From bbac8ca55dff1d376493e25ad529a617088fc759 Mon Sep 17 00:00:00 2001 From: Hakase Date: Sat, 7 Apr 2018 17:29:40 +0900 Subject: [PATCH] OpenSSL 1.1.1-pre2 --- .gitignore | 23 +- .gitmodules | 11 + .travis.yml | 147 +- CHANGES | 811 +- CONTRIBUTING | 4 +- Configurations/00-base-templates.conf | 88 +- Configurations/10-main.conf | 797 +- Configurations/50-djgpp.conf | 5 +- Configurations/50-haiku.conf | 4 +- Configurations/50-masm.conf | 11 +- Configurations/90-team.conf | 24 +- Configurations/README | 77 +- Configurations/README.design | 80 +- Configurations/common.tmpl | 93 +- Configurations/descrip.mms.tmpl | 478 +- Configurations/shared-info.pl | 102 + Configurations/unix-Makefile.tmpl | 596 +- Configurations/windows-checker.pm | 2 +- Configurations/windows-makefile.tmpl | 239 +- Configure | 1266 +- ECDSA-PATCH-CHANGELOG | 9 - INSTALL | 258 +- Makefile.shared | 521 - NEWS | 43 +- NOTES.UNIX | 12 + NOTES.VMS | 26 + NOTES.WIN | 2 +- README | 9 +- README.ENGINE | 1 - VMS/engine.opt | 3 +- VMS/openssl_shutdown.com.in | 2 +- VMS/openssl_startup.com.in | 2 +- apps/CA.pl.in | 60 +- apps/app_rand.c | 137 +- apps/apps.c | 338 +- apps/apps.h | 126 +- apps/asn1pars.c | 71 +- apps/bf_prefix.c | 177 + apps/build.info | 28 +- apps/ca.c | 696 +- apps/ciphers.c | 36 +- apps/cms.c | 237 +- apps/crl.c | 19 +- apps/crl2p7.c | 11 +- apps/ct_log_list.cnf | 41 +- apps/demoCA/cacert.pem | 14 - apps/demoCA/index.txt | 39 - apps/demoCA/private/cakey.pem | 24 - apps/demoCA/serial | 1 - apps/dgst.c | 79 +- apps/dhparam.c | 35 +- apps/dsa.c | 22 +- apps/dsaparam.c | 91 +- apps/ec.c | 24 +- apps/ecparam.c | 63 +- apps/enc.c | 134 +- apps/engine.c | 99 +- apps/errstr.c | 12 +- apps/gendsa.c | 30 +- apps/genpkey.c | 9 +- apps/genrsa.c | 44 +- apps/nseq.c | 7 +- apps/ocsp.c | 241 +- apps/openssl-vms.cnf | 2 + apps/openssl.c | 266 +- apps/openssl.cnf | 2 + apps/opt.c | 142 +- apps/passwd.c | 595 +- apps/pkcs12.c | 118 +- apps/pkcs7.c | 9 +- apps/pkcs8.c | 54 +- apps/pkey.c | 69 +- apps/pkeyparam.c | 48 +- apps/pkeyutl.c | 72 +- apps/prime.c | 5 +- apps/progs.pl | 156 +- apps/rand.c | 25 +- apps/rehash.c | 26 +- apps/req.c | 338 +- apps/rsa.c | 25 +- apps/rsautl.c | 26 +- apps/s_apps.h | 38 +- apps/s_cb.c | 351 +- apps/s_client.c | 1072 +- apps/s_server.c | 863 +- apps/s_socket.c | 130 +- apps/s_time.c | 135 +- apps/sess_id.c | 27 +- apps/smime.c | 123 +- apps/speed.c | 1005 +- apps/spkac.c | 18 +- apps/srp.c | 46 +- apps/storeutl.c | 471 + apps/testdsa.h | 134 +- apps/ts.c | 61 +- apps/tsget.in | 2 +- apps/verify.c | 24 +- apps/version.c | 64 +- apps/vms_term_sock.c | 35 +- apps/vms_term_sock.h | 1 + apps/win32_init.c | 2 +- apps/x509.c | 265 +- appveyor.yml | 42 +- build.info | 74 +- config | 52 +- crypto/LPdir_nyi.c | 3 + crypto/LPdir_unix.c | 3 + crypto/LPdir_vms.c | 3 + crypto/LPdir_win.c | 3 + crypto/LPdir_win32.c | 3 + crypto/LPdir_wince.c | 3 + crypto/aes/aes_core.c | 6 +- crypto/aes/aes_x86core.c | 23 +- crypto/aes/asm/aes-586.pl | 34 +- crypto/aes/asm/aes-armv4.pl | 8 +- crypto/aes/asm/aes-ia64.S | 4 +- crypto/aes/asm/aes-mips.pl | 93 +- crypto/aes/asm/aes-parisc.pl | 4 +- crypto/aes/asm/aes-ppc.pl | 10 +- crypto/aes/asm/aes-s390x.pl | 100 +- crypto/aes/asm/aes-sparcv9.pl | 2 +- crypto/aes/asm/aes-x86_64.pl | 134 +- crypto/aes/asm/aesfx-sparcv9.pl | 2 +- crypto/aes/asm/aesni-mb-x86_64.pl | 108 +- crypto/aes/asm/aesni-sha1-x86_64.pl | 70 +- crypto/aes/asm/aesni-sha256-x86_64.pl | 113 +- crypto/aes/asm/aesni-x86.pl | 8 +- crypto/aes/asm/aesni-x86_64.pl | 369 +- crypto/aes/asm/aesp8-ppc.pl | 2 +- crypto/aes/asm/aest4-sparcv9.pl | 8 +- crypto/aes/asm/aesv8-armx.pl | 11 +- crypto/aes/asm/bsaes-armv7.pl | 18 +- crypto/aes/asm/bsaes-x86_64.pl | 270 +- crypto/aes/asm/vpaes-armv8.pl | 12 +- crypto/aes/asm/vpaes-ppc.pl | 8 +- crypto/aes/asm/vpaes-x86.pl | 10 +- crypto/aes/asm/vpaes-x86_64.pl | 20 +- crypto/aes/build.info | 13 +- crypto/aria/aria.c | 1212 + crypto/aria/build.info | 4 + crypto/arm64cpuid.pl | 10 +- crypto/arm_arch.h | 5 +- crypto/armcap.c | 26 +- crypto/asn1/a_bitstr.c | 20 +- crypto/asn1/a_d2i_fp.c | 17 +- crypto/asn1/a_digest.c | 8 +- crypto/asn1/a_dup.c | 12 +- crypto/asn1/a_gentm.c | 231 +- crypto/asn1/a_i2d_fp.c | 16 +- crypto/asn1/a_int.c | 8 +- crypto/asn1/a_mbstr.c | 70 +- crypto/asn1/a_object.c | 33 +- crypto/asn1/a_print.c | 46 +- crypto/asn1/a_sign.c | 16 +- crypto/asn1/a_strnid.c | 105 +- crypto/asn1/a_time.c | 505 +- crypto/asn1/a_type.c | 4 +- crypto/asn1/a_utctm.c | 204 +- crypto/asn1/a_verify.c | 23 +- crypto/asn1/ameth_lib.c | 75 +- crypto/asn1/asn1_err.c | 542 +- crypto/asn1/asn1_item_list.c | 42 + crypto/asn1/asn1_item_list.h | 178 + crypto/asn1/asn1_lib.c | 57 +- crypto/asn1/asn1_locl.h | 6 +- crypto/asn1/asn1_par.c | 12 +- crypto/asn1/asn_mime.c | 44 +- crypto/asn1/asn_moid.c | 10 +- crypto/asn1/asn_mstbl.c | 3 +- crypto/asn1/bio_asn1.c | 16 +- crypto/asn1/build.info | 2 +- crypto/asn1/charmap.h | 2 +- crypto/asn1/charmap.pl | 6 +- crypto/asn1/d2i_pr.c | 6 +- crypto/asn1/d2i_pu.c | 7 +- crypto/asn1/evp_asn1.c | 12 +- crypto/asn1/f_int.c | 23 +- crypto/asn1/f_string.c | 26 +- crypto/asn1/n_pkey.c | 4 +- crypto/asn1/p5_scrypt.c | 13 +- crypto/asn1/standard_methods.h | 56 + crypto/asn1/tasn_dec.c | 51 +- crypto/asn1/tasn_prn.c | 3 +- crypto/asn1/tasn_utl.c | 5 +- crypto/asn1/tbl_standard.h | 61 + crypto/asn1/x_algor.c | 11 +- crypto/asn1/x_int64.c | 6 +- crypto/asn1/x_long.c | 27 +- crypto/asn1/x_spki.c | 5 - crypto/async/arch/async_posix.h | 1 - crypto/async/async.c | 10 +- crypto/async/async_err.c | 42 +- crypto/async/async_locl.h | 2 +- crypto/async/async_wait.c | 1 + crypto/bf/asm/bf-586.pl | 2 +- crypto/bf/bf_cbc.c | 86 - crypto/bf/bf_ecb.c | 2 +- crypto/bf/bf_enc.c | 4 - crypto/bf/build.info | 3 +- crypto/bio/b_addr.c | 50 +- crypto/bio/b_dump.c | 67 +- crypto/bio/b_print.c | 85 +- crypto/bio/b_sock.c | 39 +- crypto/bio/b_sock2.c | 88 +- crypto/bio/bf_buff.c | 84 +- crypto/bio/bf_lbuf.c | 56 +- crypto/bio/bf_nbio.c | 42 +- crypto/bio/bf_null.c | 34 +- crypto/bio/bio_cb.c | 39 +- crypto/bio/bio_err.c | 203 +- crypto/bio/bio_lcl.h | 10 +- crypto/bio/bio_lib.c | 414 +- crypto/bio/bio_meth.c | 76 +- crypto/bio/bss_acpt.c | 43 +- crypto/bio/bss_bio.c | 9 +- crypto/bio/bss_conn.c | 50 +- crypto/bio/bss_dgram.c | 113 +- crypto/bio/bss_fd.c | 41 +- crypto/bio/bss_file.c | 52 +- crypto/bio/bss_log.c | 25 +- crypto/bio/bss_mem.c | 58 +- crypto/bio/bss_null.c | 18 +- crypto/bio/bss_sock.c | 34 +- crypto/blake2/blake2_impl.h | 3 +- crypto/blake2/blake2_locl.h | 3 +- crypto/blake2/blake2b.c | 3 +- crypto/blake2/blake2s.c | 5 +- crypto/blake2/m_blake2b.c | 2 +- crypto/blake2/m_blake2s.c | 2 +- crypto/bn/README.pod | 8 +- crypto/bn/asm/alpha-mont.pl | 2 +- crypto/bn/asm/armv4-gf2m.pl | 2 +- crypto/bn/asm/armv4-mont.pl | 2 +- crypto/bn/asm/bn-586.pl | 26 +- crypto/bn/asm/c64xplus-gf2m.pl | 2 +- crypto/bn/asm/co-586.pl | 14 +- crypto/bn/asm/ia64-mont.pl | 6 +- crypto/bn/asm/ia64.S | 25 +- crypto/bn/asm/mips-mont.pl | 98 +- crypto/bn/asm/mips.pl | 752 +- crypto/bn/asm/pa-risc2.s | 1624 -- crypto/bn/asm/pa-risc2W.s | 1612 -- crypto/bn/asm/parisc-mont.pl | 8 +- crypto/bn/asm/ppc-mont.pl | 1697 +- crypto/bn/asm/ppc.pl | 271 +- crypto/bn/asm/ppc64-mont.pl | 4 +- crypto/bn/asm/rsaz-avx2.pl | 145 +- crypto/bn/asm/rsaz-x86_64.pl | 198 +- crypto/bn/asm/s390x-gf2m.pl | 4 +- crypto/bn/asm/s390x-mont.pl | 2 +- crypto/bn/asm/sparct4-mont.pl | 6 +- crypto/bn/asm/sparcv8.S | 12 +- crypto/bn/asm/sparcv8plus.S | 16 +- crypto/bn/asm/sparcv9-mont.pl | 4 +- crypto/bn/asm/sparcv9a-mont.pl | 4 +- crypto/bn/asm/via-mont.pl | 6 +- crypto/bn/asm/vis3-mont.pl | 2 +- crypto/bn/asm/x86-gf2m.pl | 4 +- crypto/bn/asm/x86-mont.pl | 8 +- crypto/bn/asm/x86_64-gcc.c | 14 +- crypto/bn/asm/x86_64-gf2m.pl | 37 +- crypto/bn/asm/x86_64-mont.pl | 88 +- crypto/bn/asm/x86_64-mont5.pl | 129 +- crypto/bn/bn_asm.c | 32 +- crypto/bn/bn_blind.c | 10 +- crypto/bn/bn_dh.c | 296 +- crypto/bn/bn_div.c | 30 +- crypto/bn/bn_err.c | 163 +- crypto/bn/bn_exp.c | 95 +- crypto/bn/bn_exp2.c | 8 +- crypto/bn/bn_gcd.c | 14 +- crypto/bn/bn_gf2m.c | 30 +- crypto/bn/bn_intern.c | 15 - crypto/bn/bn_lcl.h | 109 +- crypto/bn/bn_lib.c | 193 +- crypto/bn/bn_mod.c | 2 +- crypto/bn/bn_mont.c | 26 +- crypto/bn/bn_mul.c | 341 +- crypto/bn/bn_nist.c | 2 +- crypto/bn/bn_prime.c | 150 +- crypto/bn/bn_prime.h | 515 +- crypto/bn/bn_prime.pl | 12 +- crypto/bn/bn_print.c | 106 +- crypto/bn/bn_rand.c | 66 +- crypto/bn/bn_recp.c | 28 +- crypto/bn/bn_shift.c | 22 +- crypto/bn/bn_sqr.c | 6 +- crypto/bn/bn_sqrt.c | 4 +- crypto/bn/bn_srp.c | 6 +- crypto/bn/bn_word.c | 18 +- crypto/bn/bn_x931p.c | 14 +- crypto/bn/build.info | 35 +- crypto/bn/rsaz_exp.c | 47 +- crypto/bn/rsaz_exp.h | 47 +- crypto/buffer/buf_err.c | 24 +- crypto/buffer/buffer.c | 20 +- crypto/build.info | 9 +- crypto/c64xpluscpuid.pl | 2 +- crypto/camellia/asm/cmll-x86.pl | 8 +- crypto/camellia/asm/cmll-x86_64.pl | 57 + crypto/camellia/asm/cmllt4-sparcv9.pl | 8 +- crypto/camellia/build.info | 4 +- crypto/cast/asm/cast-586.pl | 8 +- crypto/cast/build.info | 3 +- crypto/cast/cast_lcl.h | 4 +- crypto/cast/cast_s.h | 16 +- crypto/chacha/asm/chacha-armv4.pl | 8 +- crypto/chacha/asm/chacha-armv8.pl | 5 +- crypto/chacha/asm/chacha-c64xplus.pl | 2 +- crypto/chacha/asm/chacha-ppc.pl | 4 +- crypto/chacha/asm/chacha-x86.pl | 3 +- crypto/chacha/asm/chacha-x86_64.pl | 1849 +- crypto/chacha/build.info | 3 +- crypto/cms/cms_asn1.c | 26 +- crypto/cms/cms_env.c | 2 +- crypto/cms/cms_err.c | 429 +- crypto/cms/cms_lcl.h | 26 +- crypto/cms/cms_lib.c | 2 +- crypto/cms/cms_sd.c | 3 +- crypto/comp/c_zlib.c | 9 +- crypto/comp/comp_err.c | 35 +- crypto/comp/comp_lib.c | 12 +- crypto/conf/conf_api.c | 29 +- crypto/conf/conf_def.c | 26 +- crypto/conf/conf_def.h | 2 +- crypto/conf/conf_err.c | 102 +- crypto/conf/conf_lib.c | 6 +- crypto/conf/conf_mod.c | 15 +- crypto/conf/conf_sap.c | 6 +- crypto/conf/keysets.pl | 6 +- crypto/cpt_err.c | 57 +- crypto/cryptlib.c | 74 +- crypto/ct/ct_b64.c | 12 +- crypto/ct/ct_err.c | 125 +- crypto/ct/ct_sct.c | 13 +- crypto/ctype.c | 274 + crypto/cversion.c | 45 +- crypto/des/asm/crypt586.pl | 8 +- crypto/des/asm/des-586.pl | 12 +- crypto/des/asm/des_enc.m4 | 26 +- crypto/des/asm/desboth.pl | 2 +- crypto/des/asm/dest4-sparcv9.pl | 4 +- crypto/des/build.info | 8 +- crypto/des/cbc_cksm.c | 3 +- crypto/des/cfb64ede.c | 3 +- crypto/des/cfb_enc.c | 2 +- crypto/des/des_enc.c | 6 +- crypto/des/des_locl.h | 7 +- crypto/des/ecb_enc.c | 13 +- crypto/des/fcrypt.c | 6 +- crypto/des/qud_cksm.c | 3 +- crypto/des/rand_key.c | 4 +- crypto/des/rpc_des.h | 76 - crypto/des/rpc_enc.c | 30 - crypto/des/set_key.c | 39 +- crypto/des/spr.h | 2 +- crypto/des/str2key.c | 20 - crypto/dh/build.info | 3 +- crypto/dh/dh_ameth.c | 57 +- crypto/dh/dh_asn1.c | 2 +- crypto/dh/dh_check.c | 64 +- crypto/dh/dh_err.c | 115 +- crypto/dh/dh_gen.c | 6 +- crypto/dh/dh_kdf.c | 2 +- crypto/dh/dh_key.c | 12 +- crypto/dh/dh_lib.c | 11 +- crypto/dh/dh_locl.h | 5 +- crypto/dh/dh_pmeth.c | 55 +- crypto/dh/dh_prn.c | 4 +- crypto/dh/dh_rfc7919.c | 74 + crypto/dllmain.c | 5 +- crypto/dsa/dsa_ameth.c | 4 +- crypto/dsa/dsa_asn1.c | 12 +- crypto/dsa/dsa_err.c | 93 +- crypto/dsa/dsa_key.c | 4 +- crypto/dsa/dsa_lib.c | 15 +- crypto/dsa/dsa_locl.h | 5 +- crypto/dsa/dsa_meth.c | 2 +- crypto/dsa/dsa_ossl.c | 10 +- crypto/dsa/dsa_pmeth.c | 8 +- crypto/dsa/dsa_prn.c | 8 +- crypto/dsa/dsa_sign.c | 2 - crypto/dsa/dsa_vrf.c | 2 - crypto/dso/dso_dl.c | 36 +- crypto/dso/dso_dlfcn.c | 34 +- crypto/dso/dso_err.c | 135 +- crypto/dso/dso_lib.c | 59 +- crypto/dso/dso_locl.h | 3 +- crypto/dso/dso_vms.c | 34 +- crypto/dso/dso_win32.c | 71 +- crypto/ebcdic.c | 5 - crypto/ec/asm/ecp_nistz256-armv4.pl | 4 +- crypto/ec/asm/ecp_nistz256-armv8.pl | 4 +- crypto/ec/asm/ecp_nistz256-avx2.pl | 42 +- crypto/ec/asm/ecp_nistz256-ppc64.pl | 2382 ++ crypto/ec/asm/ecp_nistz256-sparcv9.pl | 8 +- crypto/ec/asm/ecp_nistz256-x86.pl | 4 +- crypto/ec/asm/ecp_nistz256-x86_64.pl | 6 +- crypto/ec/asm/x25519-x86_64.pl | 818 + crypto/ec/build.info | 15 +- crypto/ec/curve25519.c | 1880 +- crypto/ec/curve448/arch_32/arch_intrinsics.h | 27 + crypto/ec/curve448/arch_32/f_impl.c | 95 + crypto/ec/curve448/arch_32/f_impl.h | 60 + crypto/ec/curve448/curve448.c | 727 + crypto/ec/curve448/curve448_lcl.h | 38 + crypto/ec/curve448/curve448_tables.c | 475 + crypto/ec/curve448/curve448utils.h | 78 + crypto/ec/curve448/ed448.h | 195 + crypto/ec/curve448/eddsa.c | 353 + crypto/ec/curve448/f_generic.c | 204 + crypto/ec/curve448/field.h | 168 + crypto/ec/curve448/point_448.h | 301 + crypto/ec/curve448/scalar.c | 235 + crypto/ec/curve448/word.h | 81 + crypto/ec/ec2_mult.c | 16 +- crypto/ec/ec2_oct.c | 16 +- crypto/ec/ec2_smpl.c | 26 +- crypto/ec/ec_ameth.c | 50 +- crypto/ec/ec_asn1.c | 43 +- crypto/ec/ec_curve.c | 19 +- crypto/ec/ec_cvt.c | 15 +- crypto/ec/ec_err.c | 507 +- crypto/ec/ec_key.c | 24 +- crypto/ec/ec_lcl.h | 29 +- crypto/ec/ec_lib.c | 36 +- crypto/ec/ec_mult.c | 16 +- crypto/ec/ec_oct.c | 7 +- crypto/ec/ecdh_ossl.c | 16 +- crypto/ec/ecdsa_ossl.c | 14 +- crypto/ec/eck_prn.c | 21 +- crypto/ec/ecp_mont.c | 7 +- crypto/ec/ecp_nist.c | 7 +- crypto/ec/ecp_nistp224.c | 34 +- crypto/ec/ecp_nistp256.c | 32 +- crypto/ec/ecp_nistp521.c | 54 +- crypto/ec/ecp_nistz256.c | 66 +- crypto/ec/ecp_oct.c | 9 +- crypto/ec/ecp_smpl.c | 11 +- crypto/ec/ecx_meth.c | 185 +- crypto/engine/README | 8 +- crypto/engine/build.info | 5 +- crypto/engine/eng_all.c | 8 +- crypto/engine/eng_cryptodev.c | 1757 -- crypto/engine/eng_ctrl.c | 36 +- crypto/engine/eng_devcrypto.c | 678 + crypto/engine/eng_err.c | 208 +- crypto/engine/eng_fat.c | 7 +- crypto/engine/eng_init.c | 3 +- crypto/engine/eng_int.h | 16 +- crypto/engine/eng_lib.c | 18 +- crypto/engine/eng_list.c | 17 +- crypto/engine/eng_openssl.c | 9 +- crypto/engine/eng_rdrand.c | 2 +- crypto/engine/eng_table.c | 7 +- crypto/engine/tb_asnmth.c | 3 +- crypto/err/err.c | 245 +- crypto/err/err_all.c | 68 +- crypto/err/err_prn.c | 3 +- crypto/err/openssl.ec | 164 +- crypto/err/openssl.txt | 2827 +++ crypto/evp/bio_b64.c | 27 +- crypto/evp/bio_enc.c | 46 +- crypto/evp/bio_md.c | 27 +- crypto/evp/bio_ok.c | 16 +- crypto/evp/build.info | 8 +- crypto/evp/c_allc.c | 50 +- crypto/evp/c_alld.c | 15 +- crypto/evp/digest.c | 21 + crypto/evp/e_aes.c | 1292 +- crypto/evp/e_aes_cbc_hmac_sha1.c | 8 +- crypto/evp/e_aes_cbc_hmac_sha256.c | 8 +- crypto/evp/e_aria.c | 753 + crypto/evp/e_chacha20_poly1305.c | 2 +- crypto/evp/e_null.c | 2 +- crypto/evp/e_rc2.c | 16 +- crypto/evp/e_rc4.c | 4 +- crypto/evp/e_rc4_hmac_md5.c | 2 +- crypto/evp/e_rc5.c | 2 +- crypto/evp/e_sm4.c | 100 + crypto/evp/e_xcbc_d.c | 2 +- crypto/evp/encode.c | 16 +- crypto/evp/evp_cnf.c | 11 +- crypto/evp/evp_enc.c | 8 +- crypto/evp/evp_err.c | 376 +- crypto/evp/evp_key.c | 8 +- crypto/evp/evp_lib.c | 10 +- crypto/evp/evp_pbe.c | 4 +- crypto/evp/evp_pkey.c | 1 - crypto/evp/m_md4.c | 2 +- crypto/evp/m_md5.c | 2 +- crypto/evp/m_mdc2.c | 2 +- crypto/evp/m_null.c | 2 +- crypto/evp/m_ripemd.c | 2 +- crypto/evp/m_sha1.c | 59 +- crypto/evp/m_sha3.c | 182 + crypto/evp/m_sigver.c | 38 +- crypto/evp/m_wp.c | 2 +- crypto/evp/names.c | 20 +- crypto/evp/p5_crpt2.c | 17 +- crypto/evp/p_dec.c | 2 +- crypto/evp/p_enc.c | 2 +- crypto/evp/p_lib.c | 42 +- crypto/evp/p_open.c | 4 +- crypto/evp/p_seal.c | 16 +- crypto/evp/pbe_scrypt.c | 253 + crypto/evp/pmeth_fn.c | 2 +- crypto/evp/pmeth_gn.c | 70 + crypto/evp/pmeth_lib.c | 126 +- crypto/evp/scrypt.c | 248 - crypto/ex_data.c | 3 +- crypto/hmac/hm_ameth.c | 54 - crypto/hmac/hmac.c | 30 +- crypto/idea/i_ecb.c | 2 +- crypto/idea/i_skey.c | 2 +- crypto/idea/idea_lcl.h | 15 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 + .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 + crypto/include/internal/aria.h | 58 + crypto/include/internal/asn1_int.h | 14 +- crypto/include/internal/bn_dh.h | 7 + crypto/include/internal/bn_int.h | 11 - crypto/include/internal/cryptlib_int.h | 3 +- crypto/include/internal/ctype.h | 80 + crypto/include/internal/engine.h | 2 +- crypto/include/internal/evp_int.h | 20 +- crypto/include/internal/md32_common.h | 15 +- crypto/include/internal/poly1305.h | 4 +- crypto/include/internal/rand.h | 20 - crypto/include/internal/rand_int.h | 22 + crypto/include/internal/sha.h | 19 + crypto/include/internal/siphash.h | 24 + crypto/include/internal/sm3.h | 39 + crypto/include/internal/sm4.h | 37 + crypto/include/internal/store.h | 10 + crypto/include/internal/store_int.h | 33 + crypto/include/internal/x509_int.h | 24 +- crypto/init.c | 88 +- crypto/kdf/build.info | 2 +- crypto/kdf/hkdf.c | 64 +- crypto/kdf/kdf_err.c | 49 +- crypto/kdf/scrypt.c | 262 + crypto/kdf/tls1_prf.c | 17 +- crypto/lhash/lh_stats.c | 31 +- crypto/lhash/lhash.c | 41 +- crypto/lhash/lhash_lcl.h | 19 +- crypto/lhash/num.pl | 23 - crypto/md2/md2_dgst.c | 4 +- crypto/md2/md2_one.c | 2 +- crypto/md4/md4_locl.h | 6 +- crypto/md4/md4_one.c | 2 +- crypto/md5/asm/md5-586.pl | 4 +- crypto/md5/asm/md5-ia64.S | 1002 - crypto/md5/asm/md5-sparcv9.pl | 4 +- crypto/md5/asm/md5-x86_64.pl | 13 + crypto/md5/build.info | 15 +- crypto/md5/md5_locl.h | 4 +- crypto/md5/md5_one.c | 2 +- crypto/mdc2/mdc2_one.c | 2 +- crypto/mdc2/mdc2dgst.c | 21 - crypto/mem.c | 143 +- crypto/mem_dbg.c | 189 +- crypto/mem_sec.c | 37 +- crypto/mips_arch.h | 40 + crypto/modes/asm/aesni-gcm-x86_64.pl | 75 +- crypto/modes/asm/ghash-armv4.pl | 4 +- crypto/modes/asm/ghash-ia64.pl | 2 +- crypto/modes/asm/ghash-parisc.pl | 2 +- crypto/modes/asm/ghash-s390x.pl | 14 +- crypto/modes/asm/ghash-x86.pl | 15 +- crypto/modes/asm/ghash-x86_64.pl | 80 +- crypto/modes/asm/ghashp8-ppc.pl | 2 +- crypto/modes/asm/ghashv8-armx.pl | 379 +- crypto/modes/build.info | 7 +- crypto/modes/cts128.c | 193 - crypto/modes/gcm128.c | 737 +- crypto/modes/modes_lcl.h | 3 +- crypto/o_dir.c | 2 +- crypto/o_fips.c | 12 +- crypto/o_init.c | 21 +- crypto/o_str.c | 11 +- crypto/objects/README | 2 +- crypto/objects/o_names.c | 32 +- crypto/objects/obj_dat.c | 121 +- crypto/objects/obj_dat.h | 416 +- crypto/objects/obj_dat.pl | 10 +- crypto/objects/obj_err.c | 36 +- crypto/objects/obj_lib.c | 11 +- crypto/objects/obj_mac.num | 86 + crypto/objects/obj_xref.c | 31 +- crypto/objects/obj_xref.h | 11 +- crypto/objects/obj_xref.txt | 5 + crypto/objects/objects.pl | 13 +- crypto/objects/objects.txt | 142 +- crypto/objects/objxref.pl | 11 +- crypto/ocsp/ocsp_cl.c | 23 +- crypto/ocsp/ocsp_err.c | 134 +- crypto/ocsp/ocsp_ext.c | 34 +- crypto/ocsp/ocsp_ht.c | 16 +- crypto/ocsp/ocsp_lcl.h | 6 +- crypto/ocsp/ocsp_srv.c | 44 +- crypto/pariscid.pl | 4 +- crypto/pem/pem_err.c | 182 +- crypto/pem/pem_info.c | 21 +- crypto/pem/pem_lib.c | 597 +- crypto/pem/pem_oth.c | 2 +- crypto/pem/pem_pk8.c | 2 +- crypto/pem/pem_pkey.c | 19 +- crypto/pem/pem_sign.c | 2 +- crypto/pem/pvkfmt.c | 22 +- crypto/perlasm/README | 4 +- crypto/perlasm/cbc.pl | 10 +- crypto/perlasm/ppc-xlate.pl | 104 +- crypto/perlasm/sparcv9_modes.pl | 16 +- crypto/perlasm/x86_64-xlate.pl | 1 - crypto/perlasm/x86asm.pl | 17 +- crypto/perlasm/x86gas.pl | 2 +- crypto/perlasm/x86masm.pl | 1 - crypto/perlasm/x86nasm.pl | 6 +- crypto/pkcs12/p12_key.c | 46 +- crypto/pkcs12/pk12err.c | 142 +- crypto/pkcs7/pk7_dgst.c | 15 - crypto/pkcs7/pk7_doit.c | 38 +- crypto/pkcs7/pk7_enc.c | 25 - crypto/pkcs7/pk7_lib.c | 48 +- crypto/pkcs7/pk7_mime.c | 3 +- crypto/pkcs7/pkcs7err.c | 223 +- crypto/poly1305/asm/poly1305-armv8.pl | 1 + crypto/poly1305/asm/poly1305-mips.pl | 50 +- crypto/poly1305/asm/poly1305-x86.pl | 5 +- crypto/poly1305/asm/poly1305-x86_64.pl | 1876 +- crypto/poly1305/build.info | 6 +- crypto/poly1305/poly1305.c | 514 +- crypto/poly1305/poly1305_ameth.c | 67 + crypto/poly1305/poly1305_base2_44.c | 171 + crypto/poly1305/poly1305_ieee754.c | 18 +- crypto/poly1305/poly1305_local.h | 27 + crypto/poly1305/poly1305_pmeth.c | 192 + crypto/ppccap.c | 64 +- crypto/rand/build.info | 4 +- crypto/rand/drbg_ctr.c | 371 + crypto/rand/drbg_lib.c | 980 + crypto/rand/md_rand.c | 667 - crypto/rand/rand_egd.c | 232 +- crypto/rand/rand_err.c | 99 +- crypto/rand/rand_lcl.h | 250 +- crypto/rand/rand_lib.c | 774 +- crypto/rand/rand_unix.c | 410 +- crypto/rand/rand_vms.c | 102 +- crypto/rand/rand_win.c | 157 +- crypto/rand/randfile.c | 307 +- crypto/rc2/rc2_ecb.c | 1 - crypto/rc2/tab.c | 93 - crypto/rc4/asm/rc4-586.pl | 8 +- crypto/rc4/asm/rc4-c64xplus.pl | 6 +- crypto/rc4/asm/rc4-ia64.pl | 767 - crypto/rc4/asm/rc4-md5-x86_64.pl | 20 +- crypto/rc4/asm/rc4-parisc.pl | 6 +- crypto/rc4/asm/rc4-s390x.pl | 2 +- crypto/rc4/asm/rc4-x86_64.pl | 15 +- crypto/rc4/build.info | 19 +- crypto/rc4/rc4_enc.c | 1 - crypto/rc4/rc4_skey.c | 5 +- crypto/rc5/asm/rc5-586.pl | 2 +- crypto/rc5/build.info | 3 +- crypto/ripemd/asm/rmd-586.pl | 15 +- crypto/ripemd/build.info | 3 +- crypto/ripemd/rmd_locl.h | 3 +- crypto/ripemd/rmd_one.c | 2 +- crypto/rsa/build.info | 4 +- crypto/rsa/rsa_ameth.c | 668 +- crypto/rsa/rsa_asn1.c | 56 +- crypto/rsa/rsa_chk.c | 84 +- crypto/rsa/rsa_crpt.c | 33 +- crypto/rsa/rsa_err.c | 348 +- crypto/rsa/rsa_gen.c | 311 +- crypto/rsa/rsa_lib.c | 169 +- crypto/rsa/rsa_locl.h | 44 +- crypto/rsa/rsa_meth.c | 14 + crypto/rsa/rsa_mp.c | 113 + crypto/rsa/rsa_none.c | 12 +- crypto/rsa/rsa_null.c | 93 - crypto/rsa/rsa_oaep.c | 5 - crypto/rsa/rsa_ossl.c | 174 +- crypto/rsa/rsa_pk1.c | 26 +- crypto/rsa/rsa_pmeth.c | 291 +- crypto/rsa/rsa_prn.c | 6 +- crypto/rsa/rsa_pss.c | 30 +- crypto/rsa/rsa_saos.c | 15 +- crypto/rsa/rsa_ssl.c | 22 +- crypto/rsa/rsa_x931.c | 13 +- crypto/rsa/rsa_x931g.c | 5 +- crypto/s390x_arch.h | 95 + crypto/s390xcap.c | 29 +- crypto/s390xcpuid.S | 178 - crypto/s390xcpuid.pl | 337 + crypto/sha/asm/keccak1600-armv4.pl | 1586 ++ crypto/sha/asm/keccak1600-armv8.pl | 866 + crypto/sha/asm/keccak1600-avx2.pl | 480 + crypto/sha/asm/keccak1600-avx512.pl | 549 + crypto/sha/asm/keccak1600-avx512vl.pl | 390 + crypto/sha/asm/keccak1600-c64x.pl | 882 + crypto/sha/asm/keccak1600-mmx.pl | 440 + crypto/sha/asm/keccak1600-ppc64.pl | 757 + crypto/sha/asm/keccak1600-s390x.pl | 561 + crypto/sha/asm/keccak1600-x86_64.pl | 608 + crypto/sha/asm/keccak1600p8-ppc.pl | 850 + crypto/sha/asm/sha1-586.pl | 13 +- crypto/sha/asm/sha1-alpha.pl | 2 +- crypto/sha/asm/sha1-armv8.pl | 1 + crypto/sha/asm/sha1-ia64.pl | 2 +- crypto/sha/asm/sha1-mb-x86_64.pl | 60 +- crypto/sha/asm/sha1-mips.pl | 30 +- crypto/sha/asm/sha1-parisc.pl | 2 +- crypto/sha/asm/sha1-ppc.pl | 2 +- crypto/sha/asm/sha1-s390x.pl | 6 +- crypto/sha/asm/sha1-sparcv9.pl | 6 +- crypto/sha/asm/sha1-sparcv9a.pl | 4 +- crypto/sha/asm/sha1-thumb.pl | 4 +- crypto/sha/asm/sha1-x86_64.pl | 197 +- crypto/sha/asm/sha256-586.pl | 13 +- crypto/sha/asm/sha256-mb-x86_64.pl | 56 +- crypto/sha/asm/sha512-586.pl | 7 +- crypto/sha/asm/sha512-armv8.pl | 507 +- crypto/sha/asm/sha512-mips.pl | 24 +- crypto/sha/asm/sha512-parisc.pl | 8 +- crypto/sha/asm/sha512-ppc.pl | 2 +- crypto/sha/asm/sha512-s390x.pl | 8 +- crypto/sha/asm/sha512-sparcv9.pl | 8 +- crypto/sha/asm/sha512-x86_64.pl | 187 +- crypto/sha/asm/sha512p8-ppc.pl | 11 +- crypto/sha/build.info | 28 +- crypto/sha/keccak1600.c | 1246 + crypto/sha/sha1_one.c | 2 +- crypto/sha/sha256.c | 4 +- crypto/sha/sha512.c | 87 +- crypto/sha/sha_locl.h | 12 +- crypto/siphash/build.info | 5 + crypto/siphash/siphash.c | 234 + crypto/siphash/siphash_ameth.c | 68 + crypto/siphash/siphash_local.h | 23 + crypto/siphash/siphash_pmeth.c | 206 + crypto/sm3/build.info | 2 + crypto/sm3/m_sm3.c | 52 + crypto/sm3/sm3.c | 196 + crypto/sm3/sm3_locl.h | 79 + crypto/sm4/build.info | 4 + crypto/sm4/sm4.c | 233 + crypto/sparccpuid.S | 4 - crypto/sparcv9cap.c | 3 +- crypto/srp/srp_vfy.c | 116 +- crypto/stack/stack.c | 276 +- crypto/store/build.info | 4 + crypto/store/loader_file.c | 1436 ++ crypto/store/store_err.c | 146 + crypto/store/store_init.c | 33 + crypto/store/store_lib.c | 681 + crypto/store/store_locl.h | 132 + crypto/store/store_register.c | 297 + crypto/store/store_strings.c | 28 + crypto/threads_none.c | 27 +- crypto/threads_pthread.c | 57 + crypto/threads_win.c | 17 + crypto/ts/ts_asn1.c | 17 + crypto/ts/ts_conf.c | 25 + crypto/ts/ts_err.c | 260 +- crypto/ts/ts_lcl.h | 28 + crypto/ts/ts_rsp_sign.c | 181 +- crypto/ts/ts_rsp_verify.c | 101 +- crypto/txt_db/txt_db.c | 24 +- crypto/ui/build.info | 2 +- crypto/ui/ui_err.c | 91 +- crypto/ui/ui_lib.c | 227 +- crypto/ui/ui_locl.h | 12 + crypto/ui/ui_null.c | 26 + crypto/ui/ui_openssl.c | 437 +- crypto/ui/ui_util.c | 115 +- crypto/uid.c | 4 +- crypto/whrlpool/asm/wp-mmx.pl | 8 +- crypto/whrlpool/asm/wp-x86_64.pl | 39 +- crypto/whrlpool/build.info | 3 +- crypto/whrlpool/wp_block.c | 8 - crypto/whrlpool/wp_dgst.c | 18 +- crypto/x509/by_dir.c | 34 +- crypto/x509/by_file.c | 30 +- crypto/x509/t_crl.c | 17 +- crypto/x509/t_req.c | 50 +- crypto/x509/t_x509.c | 13 +- crypto/x509/x509_att.c | 44 +- crypto/x509/x509_cmp.c | 39 +- crypto/x509/x509_d2.c | 18 +- crypto/x509/x509_def.c | 12 +- crypto/x509/x509_err.c | 227 +- crypto/x509/x509_ext.c | 37 +- crypto/x509/x509_lcl.h | 7 +- crypto/x509/x509_lu.c | 81 +- crypto/x509/x509_obj.c | 7 +- crypto/x509/x509_req.c | 14 +- crypto/x509/x509_set.c | 102 +- crypto/x509/x509_txt.c | 157 +- crypto/x509/x509_v3.c | 60 +- crypto/x509/x509_vfy.c | 199 +- crypto/x509/x509_vpm.c | 46 +- crypto/x509/x509cset.c | 19 +- crypto/x509/x509name.c | 74 +- crypto/x509/x509rset.c | 12 +- crypto/x509/x509spki.c | 8 +- crypto/x509/x509type.c | 9 +- crypto/x509/x_all.c | 3 +- crypto/x509/x_attrib.c | 6 +- crypto/x509/x_name.c | 34 +- crypto/x509/x_pubkey.c | 20 +- crypto/x509/x_x509.c | 6 +- crypto/x509v3/build.info | 2 +- crypto/x509v3/ext_dat.h | 3 +- crypto/x509v3/pcy_data.c | 6 +- crypto/x509v3/standard_exts.h | 78 + crypto/x509v3/tabtest.c | 42 - crypto/x509v3/v3_addr.c | 30 +- crypto/x509v3/v3_admis.c | 356 + crypto/x509v3/v3_admis.h | 45 + crypto/x509v3/v3_alt.c | 74 +- crypto/x509v3/v3_asid.c | 92 +- crypto/x509v3/v3_conf.c | 6 +- crypto/x509v3/v3_cpols.c | 70 +- crypto/x509v3/v3_crld.c | 23 +- crypto/x509v3/v3_enum.c | 2 +- crypto/x509v3/v3_extku.c | 9 +- crypto/x509v3/v3_info.c | 18 +- crypto/x509v3/v3_lib.c | 68 +- crypto/x509v3/v3_ncons.c | 5 +- crypto/x509v3/v3_pci.c | 6 +- crypto/x509v3/v3_pcia.c | 6 +- crypto/x509v3/v3_pku.c | 15 +- crypto/x509v3/v3_pmaps.c | 10 +- crypto/x509v3/v3_purp.c | 1 + crypto/x509v3/v3_skey.c | 2 +- crypto/x509v3/v3_tlsf.c | 5 +- crypto/x509v3/v3_utl.c | 17 +- crypto/x509v3/v3conf.c | 79 - crypto/x509v3/v3err.c | 368 +- crypto/x509v3/v3prin.c | 50 - crypto/x86_64cpuid.pl | 26 +- crypto/x86cpuid.pl | 45 +- demos/bio/Makefile | 2 +- demos/bio/saccept.c | 15 +- demos/bio/sconnect.c | 18 +- demos/bio/server-arg.c | 13 +- demos/bio/server-cmod.c | 13 +- demos/bio/server-conf.c | 13 +- demos/engines/e_chil.txt | 12 + demos/evp/Makefile | 2 +- demos/evp/aesgcm.c | 2 +- demos/pkcs12/README | 3 - demos/pkcs12/pkread.c | 35 + doc/HOWTO/certificates.txt | 2 +- doc/HOWTO/proxy_certificates.txt | 2 +- doc/README | 17 +- doc/apps/enc.pod | 354 - doc/apps/genrsa.pod | 119 - doc/apps/passwd.pod | 97 - doc/apps/pkeyutl.pod | 293 - doc/apps/s_client.pod | 619 - doc/apps/s_server.pod | 616 - doc/apps/sess_id.pod | 164 - doc/apps/speed.pod | 68 - doc/apps/version.pod | 81 - doc/apps/x509.pod | 898 - doc/crypto/ASN1_TIME_set.pod | 138 - doc/crypto/BIO_ADDRINFO.pod | 91 - doc/crypto/BIO_meth_new.pod | 131 - doc/crypto/BIO_read.pod | 77 - doc/crypto/CONF_modules_free.pod | 62 - doc/crypto/CRYPTO_THREAD_run_once.pod | 170 - doc/crypto/DH_generate_parameters.pod | 134 - doc/crypto/DH_size.pod | 47 - doc/crypto/DSA_meth_new.pod | 193 - doc/crypto/DSA_size.pod | 44 - doc/crypto/ERR_remove_state.pod | 53 - doc/crypto/EVP_DigestInit.pod | 259 - doc/crypto/EVP_DigestVerifyInit.pod | 91 - doc/crypto/EVP_EncryptInit.pod | 661 - doc/crypto/EVP_PKEY_CTX_set_hkdf_md.pod | 128 - doc/crypto/EVP_PKEY_keygen.pod | 175 - doc/crypto/OCSP_response_status.pod | 100 - doc/crypto/OpenSSL_add_all_algorithms.pod | 90 - doc/crypto/PKCS12_newpass.pod | 115 - doc/crypto/RAND_add.pod | 79 - doc/crypto/RAND_bytes.pod | 58 - doc/crypto/RAND_cleanup.pod | 42 - doc/crypto/RAND_egd.pod | 87 - doc/crypto/RAND_load_file.pod | 79 - doc/crypto/RAND_set_rand_method.pod | 81 - doc/crypto/RSA_generate_key.pod | 88 - doc/crypto/RSA_get0_key.pod | 112 - doc/crypto/RSA_meth_new.pod | 235 - doc/crypto/RSA_size.pod | 46 - doc/crypto/UI_new.pod | 203 - doc/crypto/X509_NAME_ENTRY_get_object.pod | 77 - doc/crypto/X509_STORE_CTX_set_verify_cb.pod | 215 - doc/crypto/X509_get0_signature.pod | 97 - doc/crypto/d2i_DHparams.pod | 35 - doc/crypto/d2i_Netscape_RSA.pod | 38 - doc/crypto/d2i_PKCS8PrivateKey_bio.pod | 61 - doc/crypto/x509.pod | 75 - doc/{apps => man1}/CA.pl.pod | 36 +- doc/{apps => man1}/asn1parse.pod | 32 +- doc/{apps => man1}/ca.pod | 167 +- doc/{apps => man1}/ciphers.pod | 119 +- doc/{apps => man1}/cms.pod | 126 +- doc/{apps => man1}/crl.pod | 32 +- doc/{apps => man1}/crl2pkcs7.pod | 12 +- doc/{apps => man1}/dgst.pod | 20 +- doc/{apps => man1}/dhparam.pod | 30 +- doc/{apps => man1}/dsa.pod | 27 +- doc/{apps => man1}/dsaparam.pod | 32 +- doc/{apps => man1}/ec.pod | 24 +- doc/{apps => man1}/ecparam.pod | 26 +- doc/man1/enc.pod | 407 + doc/{apps => man1}/engine.pod | 8 +- doc/{apps => man1}/errstr.pod | 0 doc/{apps => man1}/gendsa.pod | 23 +- doc/{apps => man1}/genpkey.pod | 70 +- doc/man1/genrsa.pod | 128 + doc/{apps => man1}/list.pod | 16 +- doc/{apps => man1}/nseq.pod | 8 +- doc/{apps => man1}/ocsp.pod | 103 +- doc/{apps => man1}/openssl.pod | 18 +- doc/man1/passwd.pod | 128 + doc/{apps => man1}/pkcs12.pod | 82 +- doc/{apps => man1}/pkcs7.pod | 16 +- doc/{apps => man1}/pkcs8.pod | 35 +- doc/{apps => man1}/pkey.pod | 42 +- doc/{apps => man1}/pkeyparam.pod | 17 +- doc/man1/pkeyutl.pod | 333 + doc/man1/prime.pod | 68 + doc/{apps => man1}/rand.pod | 16 +- doc/{apps => man1}/rehash.pod | 0 doc/{apps => man1}/req.pod | 127 +- doc/{apps => man1}/rsa.pod | 31 +- doc/{apps => man1}/rsautl.pod | 41 +- doc/man1/s_client.pod | 729 + doc/man1/s_server.pod | 740 + doc/{apps => man1}/s_time.pod | 29 +- doc/man1/sess_id.pod | 166 + doc/{apps => man1}/smime.pod | 102 +- doc/man1/speed.pod | 98 + doc/{apps => man1}/spkac.pod | 28 +- doc/man1/srp.pod | 73 + doc/man1/storeutl.pod | 130 + doc/{apps => man1}/ts.pod | 36 +- doc/{apps => man1}/tsget.pod | 2 + doc/{apps => man1}/verify.pod | 114 +- doc/man1/version.pod | 81 + doc/man1/x509.pod | 936 + doc/man3/ADMISSIONS.pod | 179 + .../ASN1_INTEGER_get_int64.pod | 0 doc/man3/ASN1_ITEM_lookup.pod | 39 + doc/{crypto => man3}/ASN1_OBJECT_new.pod | 0 doc/man3/ASN1_STRING_TABLE_add.pod | 65 + doc/{crypto => man3}/ASN1_STRING_length.pod | 24 +- doc/{crypto => man3}/ASN1_STRING_new.pod | 0 doc/{crypto => man3}/ASN1_STRING_print_ex.pod | 14 +- doc/man3/ASN1_TIME_set.pod | 258 + doc/{crypto => man3}/ASN1_TYPE_get.pod | 0 doc/{crypto => man3}/ASN1_generate_nconf.pod | 0 doc/{crypto => man3}/ASYNC_WAIT_CTX_new.pod | 4 +- doc/{crypto => man3}/ASYNC_start_job.pod | 17 +- doc/{crypto => man3}/BF_encrypt.pod | 12 +- doc/{crypto => man3}/BIO_ADDR.pod | 0 doc/man3/BIO_ADDRINFO.pod | 114 + doc/{crypto => man3}/BIO_connect.pod | 17 +- doc/{crypto => man3}/BIO_ctrl.pod | 0 doc/{crypto => man3}/BIO_f_base64.pod | 8 +- doc/{crypto => man3}/BIO_f_buffer.pod | 4 +- doc/{crypto => man3}/BIO_f_cipher.pod | 6 +- doc/{crypto => man3}/BIO_f_md.pod | 38 +- doc/{crypto => man3}/BIO_f_null.pod | 2 +- doc/{crypto => man3}/BIO_f_ssl.pod | 44 +- doc/{crypto => man3}/BIO_find_type.pod | 13 +- doc/{crypto => man3}/BIO_get_data.pod | 0 doc/{crypto => man3}/BIO_get_ex_new_index.pod | 22 +- doc/man3/BIO_meth_new.pod | 164 + doc/{crypto => man3}/BIO_new.pod | 7 +- doc/{crypto => man3}/BIO_new_CMS.pod | 0 doc/{crypto => man3}/BIO_parse_hostserv.pod | 6 +- doc/{crypto => man3}/BIO_printf.pod | 0 doc/{crypto => man3}/BIO_push.pod | 0 doc/man3/BIO_read.pod | 97 + doc/{crypto => man3}/BIO_s_accept.pod | 0 doc/{crypto => man3}/BIO_s_bio.pod | 30 +- doc/{crypto => man3}/BIO_s_connect.pod | 2 +- doc/{crypto => man3}/BIO_s_fd.pod | 10 +- doc/{crypto => man3}/BIO_s_file.pod | 27 +- doc/{crypto => man3}/BIO_s_mem.pod | 24 +- doc/{crypto => man3}/BIO_s_null.pod | 2 +- doc/{crypto => man3}/BIO_s_socket.pod | 2 +- doc/{crypto => man3}/BIO_set_callback.pod | 23 +- doc/{crypto => man3}/BIO_should_retry.pod | 19 +- doc/{crypto => man3}/BN_BLINDING_new.pod | 18 +- doc/{crypto => man3}/BN_CTX_new.pod | 17 +- doc/{crypto => man3}/BN_CTX_start.pod | 0 doc/{crypto => man3}/BN_add.pod | 10 +- doc/{crypto => man3}/BN_add_word.pod | 0 doc/{crypto => man3}/BN_bn2bin.pod | 2 +- doc/{crypto => man3}/BN_cmp.pod | 0 doc/{crypto => man3}/BN_copy.pod | 0 doc/{crypto => man3}/BN_generate_prime.pod | 36 +- doc/{crypto => man3}/BN_mod_inverse.pod | 2 +- .../BN_mod_mul_montgomery.pod | 6 +- .../BN_mod_mul_reciprocal.pod | 4 +- doc/{crypto => man3}/BN_new.pod | 0 doc/{crypto => man3}/BN_num_bytes.pod | 0 doc/{crypto => man3}/BN_rand.pod | 16 +- doc/man3/BN_security_bits.pod | 51 + doc/{crypto => man3}/BN_set_bit.pod | 0 doc/{crypto => man3}/BN_swap.pod | 6 +- doc/{crypto => man3}/BN_zero.pod | 22 +- doc/{crypto => man3}/BUF_MEM_new.pod | 0 doc/{crypto => man3}/CMS_add0_cert.pod | 1 - .../CMS_add1_recipient_cert.pod | 10 +- doc/{crypto => man3}/CMS_add1_signer.pod | 5 +- doc/{crypto => man3}/CMS_compress.pod | 0 doc/{crypto => man3}/CMS_decrypt.pod | 5 +- doc/{crypto => man3}/CMS_encrypt.pod | 3 +- doc/{crypto => man3}/CMS_final.pod | 0 .../CMS_get0_RecipientInfos.pod | 21 +- doc/{crypto => man3}/CMS_get0_SignerInfos.pod | 3 +- doc/{crypto => man3}/CMS_get0_type.pod | 0 .../CMS_get1_ReceiptRequest.pod | 10 +- doc/{crypto => man3}/CMS_sign.pod | 3 +- doc/{crypto => man3}/CMS_sign_receipt.pod | 4 +- doc/{crypto => man3}/CMS_uncompress.pod | 0 doc/{crypto => man3}/CMS_verify.pod | 3 +- doc/{crypto => man3}/CMS_verify_receipt.pod | 4 +- doc/man3/CONF_modules_free.pod | 58 + .../CONF_modules_load_file.pod | 51 +- doc/man3/CRYPTO_THREAD_run_once.pod | 184 + .../CRYPTO_get_ex_new_index.pod | 11 +- .../CTLOG_STORE_get0_log_by_id.pod | 2 +- doc/{crypto => man3}/CTLOG_STORE_new.pod | 2 +- doc/{crypto => man3}/CTLOG_new.pod | 2 +- .../CT_POLICY_EVAL_CTX_new.pod | 39 +- doc/{crypto => man3}/DEFINE_STACK_OF.pod | 70 +- doc/{crypto => man3}/DES_random_key.pod | 109 +- doc/{crypto => man3}/DH_generate_key.pod | 2 +- doc/man3/DH_generate_parameters.pod | 151 + doc/{crypto => man3}/DH_get0_pqg.pod | 2 +- doc/{crypto => man3}/DH_get_1024_160.pod | 0 doc/{crypto => man3}/DH_meth_new.pod | 39 +- doc/{crypto => man3}/DH_new.pod | 2 +- doc/man3/DH_new_by_nid.pod | 39 + doc/{crypto => man3}/DH_set_method.pod | 2 +- doc/man3/DH_size.pod | 57 + doc/{crypto => man3}/DSA_SIG_new.pod | 2 +- doc/{crypto => man3}/DSA_do_sign.pod | 4 +- doc/{crypto => man3}/DSA_dup_DH.pod | 8 +- doc/{crypto => man3}/DSA_generate_key.pod | 8 +- .../DSA_generate_parameters.pod | 38 +- doc/{crypto => man3}/DSA_get0_pqg.pod | 2 +- doc/man3/DSA_meth_new.pod | 215 + doc/{crypto => man3}/DSA_new.pod | 2 +- doc/{crypto => man3}/DSA_set_method.pod | 2 +- doc/{crypto => man3}/DSA_sign.pod | 11 +- doc/man3/DSA_size.pod | 48 + doc/man3/DTLS_get_data_mtu.pod | 36 + doc/man3/DTLS_set_timer_cb.pod | 40 + doc/man3/DTLSv1_listen.pod | 132 + doc/{crypto => man3}/ECDSA_SIG_new.pod | 43 +- doc/{crypto => man3}/ECPKParameters_print.pod | 0 doc/{crypto => man3}/EC_GFp_simple_method.pod | 0 doc/{crypto => man3}/EC_GROUP_copy.pod | 5 +- doc/{crypto => man3}/EC_GROUP_new.pod | 18 +- doc/{crypto => man3}/EC_KEY_get_enc_flags.pod | 0 doc/{crypto => man3}/EC_KEY_new.pod | 13 +- doc/{crypto => man3}/EC_POINT_add.pod | 12 +- doc/{crypto => man3}/EC_POINT_new.pod | 0 doc/{crypto => man3}/ENGINE_add.pod | 183 +- doc/{crypto => man3}/ERR_GET_LIB.pod | 0 doc/{crypto => man3}/ERR_clear_error.pod | 0 doc/{crypto => man3}/ERR_error_string.pod | 0 doc/{crypto => man3}/ERR_get_error.pod | 6 +- .../ERR_load_crypto_strings.pod | 10 +- doc/{crypto => man3}/ERR_load_strings.pod | 8 +- doc/{crypto => man3}/ERR_print_errors.pod | 3 +- doc/{crypto => man3}/ERR_put_error.pod | 7 +- doc/man3/ERR_remove_state.pod | 49 + doc/{crypto => man3}/ERR_set_mark.pod | 0 doc/{crypto => man3}/EVP_BytesToKey.pod | 2 +- .../EVP_CIPHER_CTX_get_cipher_data.pod | 0 doc/{crypto => man3}/EVP_CIPHER_meth_new.pod | 36 +- doc/man3/EVP_DigestInit.pod | 324 + doc/{crypto => man3}/EVP_DigestSignInit.pod | 26 +- doc/man3/EVP_DigestVerifyInit.pod | 104 + doc/{crypto => man3}/EVP_EncodeInit.pod | 5 +- doc/man3/EVP_EncryptInit.pod | 652 + doc/{crypto => man3}/EVP_MD_meth_new.pod | 2 +- doc/{crypto => man3}/EVP_OpenInit.pod | 9 +- doc/{crypto => man3}/EVP_PKEY_ASN1_METHOD.pod | 42 +- doc/{crypto => man3}/EVP_PKEY_CTX_ctrl.pod | 38 +- doc/{crypto => man3}/EVP_PKEY_CTX_new.pod | 0 doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod | 166 + .../EVP_PKEY_CTX_set_tls1_prf_md.pod | 13 +- .../EVP_PKEY_asn1_get_count.pod | 0 doc/{crypto => man3}/EVP_PKEY_cmp.pod | 0 doc/{crypto => man3}/EVP_PKEY_decrypt.pod | 25 +- doc/{crypto => man3}/EVP_PKEY_derive.pod | 19 +- doc/{crypto => man3}/EVP_PKEY_encrypt.pod | 22 +- .../EVP_PKEY_get_default_digest_nid.pod | 0 doc/man3/EVP_PKEY_keygen.pod | 206 + doc/man3/EVP_PKEY_meth_get_count.pod | 50 + doc/man3/EVP_PKEY_meth_new.pod | 407 + doc/{crypto => man3}/EVP_PKEY_new.pod | 0 .../EVP_PKEY_print_private.pod | 11 +- doc/{crypto => man3}/EVP_PKEY_set1_RSA.pod | 0 doc/{crypto => man3}/EVP_PKEY_sign.pod | 18 +- doc/{crypto => man3}/EVP_PKEY_verify.pod | 25 +- .../EVP_PKEY_verify_recover.pod | 26 +- doc/{crypto => man3}/EVP_SealInit.pod | 7 +- doc/{crypto => man3}/EVP_SignInit.pod | 16 +- doc/{crypto => man3}/EVP_VerifyInit.pod | 10 +- doc/man3/EVP_aes.pod | 181 + doc/man3/EVP_aria.pod | 111 + doc/man3/EVP_bf_cbc.pod | 59 + doc/man3/EVP_blake2b512.pod | 65 + doc/man3/EVP_camellia.pod | 94 + doc/man3/EVP_cast5_cbc.pod | 59 + doc/man3/EVP_chacha20.pod | 57 + doc/man3/EVP_des.pod | 96 + doc/man3/EVP_desx_cbc.pod | 50 + doc/man3/EVP_idea_cbc.pod | 57 + doc/man3/EVP_md2.pod | 53 + doc/man3/EVP_md4.pod | 53 + doc/man3/EVP_md5.pod | 63 + doc/man3/EVP_mdc2.pod | 53 + doc/man3/EVP_rc2_cbc.pod | 73 + doc/man3/EVP_rc4.pod | 68 + doc/man3/EVP_rc5_32_12_16_cbc.pod | 64 + doc/man3/EVP_ripemd160.pod | 52 + doc/man3/EVP_seed_cbc.pod | 59 + doc/man3/EVP_sha1.pod | 54 + doc/man3/EVP_sha224.pod | 74 + doc/man3/EVP_sha3_224.pod | 79 + doc/man3/EVP_sm3.pod | 54 + doc/man3/EVP_sm4_cbc.pod | 64 + doc/man3/EVP_whirlpool.pod | 54 + doc/{crypto => man3}/HMAC.pod | 47 +- doc/{crypto => man3}/MD5.pod | 18 +- doc/{crypto => man3}/MDC2_Init.pod | 8 +- doc/{crypto => man3}/OBJ_nid2obj.pod | 22 +- doc/{crypto => man3}/OCSP_REQUEST_new.pod | 6 +- doc/{crypto => man3}/OCSP_cert_to_id.pod | 4 +- .../OCSP_request_add1_nonce.pod | 4 +- .../OCSP_resp_find_status.pod | 11 +- doc/man3/OCSP_response_status.pod | 117 + doc/{crypto => man3}/OCSP_sendreq_new.pod | 4 +- doc/{crypto => man3}/OPENSSL_Applink.pod | 6 +- doc/{crypto => man3}/OPENSSL_LH_COMPFUNC.pod | 17 +- doc/{crypto => man3}/OPENSSL_LH_stats.pod | 14 +- .../OPENSSL_VERSION_NUMBER.pod | 8 +- doc/{crypto => man3}/OPENSSL_config.pod | 2 +- doc/man3/OPENSSL_fork_prepare.pod | 63 + doc/{crypto => man3}/OPENSSL_ia32cap.pod | 33 +- doc/{crypto => man3}/OPENSSL_init_crypto.pod | 15 +- doc/{ssl => man3}/OPENSSL_init_ssl.pod | 0 .../OPENSSL_instrument_bus.pod | 6 +- .../OPENSSL_load_builtin_modules.pod | 8 +- doc/{crypto => man3}/OPENSSL_malloc.pod | 56 +- .../OPENSSL_secure_malloc.pod | 15 +- doc/man3/OSSL_STORE_INFO.pod | 204 + doc/man3/OSSL_STORE_LOADER.pod | 264 + doc/man3/OSSL_STORE_SEARCH.pod | 193 + doc/man3/OSSL_STORE_expect.pod | 79 + doc/man3/OSSL_STORE_open.pod | 152 + doc/man3/OpenSSL_add_all_algorithms.pod | 63 + doc/man3/PEM_bytes_read_bio.pod | 81 + doc/{crypto => man3}/PEM_read.pod | 0 doc/{crypto => man3}/PEM_read_CMS.pod | 4 +- .../PEM_read_bio_PrivateKey.pod | 42 +- doc/man3/PEM_read_bio_ex.pod | 70 + .../PEM_write_bio_CMS_stream.pod | 0 .../PEM_write_bio_PKCS7_stream.pod | 0 doc/{crypto => man3}/PKCS12_create.pod | 6 +- doc/man3/PKCS12_newpass.pod | 116 + doc/{crypto => man3}/PKCS12_parse.pod | 0 doc/{crypto => man3}/PKCS5_PBKDF2_HMAC.pod | 8 +- doc/{crypto => man3}/PKCS7_decrypt.pod | 0 doc/{crypto => man3}/PKCS7_encrypt.pod | 3 +- doc/{crypto => man3}/PKCS7_sign.pod | 4 +- .../PKCS7_sign_add_signer.pod | 3 +- doc/{crypto => man3}/PKCS7_verify.pod | 3 +- doc/man3/RAND_add.pod | 157 + doc/man3/RAND_bytes.pod | 56 + doc/man3/RAND_cleanup.pod | 40 + doc/man3/RAND_egd.pod | 59 + doc/man3/RAND_load_file.pod | 89 + doc/man3/RAND_set_rand_method.pod | 68 + doc/{crypto => man3}/RC4_set_key.pod | 0 doc/{crypto => man3}/RIPEMD160_Init.pod | 9 +- doc/{crypto => man3}/RSA_blinding_on.pod | 0 doc/{crypto => man3}/RSA_check_key.pod | 4 +- doc/man3/RSA_generate_key.pod | 107 + doc/man3/RSA_get0_key.pod | 155 + doc/man3/RSA_meth_new.pod | 262 + doc/{crypto => man3}/RSA_new.pod | 2 +- .../RSA_padding_add_PKCS1_type_1.pod | 21 +- doc/{crypto => man3}/RSA_print.pod | 0 doc/{crypto => man3}/RSA_private_encrypt.pod | 8 +- doc/{crypto => man3}/RSA_public_encrypt.pod | 10 +- doc/{crypto => man3}/RSA_set_method.pod | 56 +- doc/{crypto => man3}/RSA_sign.pod | 4 +- .../RSA_sign_ASN1_OCTET_STRING.pod | 10 +- doc/man3/RSA_size.pod | 55 + doc/{crypto => man3}/SCT_new.pod | 73 +- doc/{crypto => man3}/SCT_print.pod | 11 +- doc/{crypto => man3}/SCT_validate.pod | 26 +- doc/{crypto => man3}/SHA256_Init.pod | 10 +- doc/{crypto => man3}/SMIME_read_CMS.pod | 4 +- doc/{crypto => man3}/SMIME_read_PKCS7.pod | 0 doc/{crypto => man3}/SMIME_write_CMS.pod | 0 doc/{crypto => man3}/SMIME_write_PKCS7.pod | 0 doc/man3/SSL_CIPHER_get_name.pod | 210 + .../SSL_COMP_add_compression_method.pod | 19 +- doc/{ssl => man3}/SSL_CONF_CTX_new.pod | 0 .../SSL_CONF_CTX_set1_prefix.pod | 2 +- doc/{ssl => man3}/SSL_CONF_CTX_set_flags.pod | 2 +- .../SSL_CONF_CTX_set_ssl_ctx.pod | 0 doc/{ssl => man3}/SSL_CONF_cmd.pod | 154 +- doc/{ssl => man3}/SSL_CONF_cmd_argv.pod | 2 +- doc/{ssl => man3}/SSL_CTX_add1_chain_cert.pod | 4 +- .../SSL_CTX_add_extra_chain_cert.pod | 2 +- doc/{ssl => man3}/SSL_CTX_add_session.pod | 21 +- doc/{ssl => man3}/SSL_CTX_config.pod | 10 +- doc/{ssl => man3}/SSL_CTX_ctrl.pod | 2 +- doc/man3/SSL_CTX_dane_enable.pod | 382 + doc/{ssl => man3}/SSL_CTX_flush_sessions.pod | 15 +- doc/{ssl => man3}/SSL_CTX_free.pod | 2 +- doc/{ssl => man3}/SSL_CTX_get0_param.pod | 0 doc/{ssl => man3}/SSL_CTX_get_verify_mode.pod | 2 +- .../SSL_CTX_has_client_custom_ext.pod | 2 +- .../SSL_CTX_load_verify_locations.pod | 4 +- doc/{ssl => man3}/SSL_CTX_new.pod | 14 +- doc/{ssl => man3}/SSL_CTX_sess_number.pod | 6 +- .../SSL_CTX_sess_set_cache_size.pod | 2 +- doc/man3/SSL_CTX_sess_set_get_cb.pod | 114 + doc/{ssl => man3}/SSL_CTX_sessions.pod | 12 +- doc/man3/SSL_CTX_set0_CA_list.pod | 92 + doc/man3/SSL_CTX_set1_curves.pod | 109 + doc/{ssl => man3}/SSL_CTX_set1_sigalgs.pod | 23 +- .../SSL_CTX_set1_verify_cert_store.pod | 0 .../SSL_CTX_set_alpn_select_cb.pod | 0 doc/{ssl => man3}/SSL_CTX_set_cert_cb.pod | 11 +- doc/man3/SSL_CTX_set_cert_store.pod | 89 + .../SSL_CTX_set_cert_verify_callback.pod | 12 +- doc/{ssl => man3}/SSL_CTX_set_cipher_list.pod | 2 +- .../SSL_CTX_set_client_CA_list.pod | 4 +- .../SSL_CTX_set_client_cert_cb.pod | 16 +- doc/man3/SSL_CTX_set_client_hello_cb.pod | 130 + .../SSL_CTX_set_ct_validation_callback.pod | 2 +- .../SSL_CTX_set_ctlog_list_file.pod | 2 +- .../SSL_CTX_set_default_passwd_cb.pod | 8 +- doc/{ssl => man3}/SSL_CTX_set_ex_data.pod | 0 .../SSL_CTX_set_generate_session_id.pod | 41 +- .../SSL_CTX_set_info_callback.pod | 60 +- doc/man3/SSL_CTX_set_keylog_callback.pod | 52 + .../SSL_CTX_set_max_cert_list.pod | 2 +- .../SSL_CTX_set_min_proto_version.pod | 4 +- doc/man3/SSL_CTX_set_mode.pod | 116 + doc/man3/SSL_CTX_set_msg_callback.pod | 143 + doc/{ssl => man3}/SSL_CTX_set_options.pod | 124 +- doc/man3/SSL_CTX_set_psk_client_callback.pod | 156 + .../SSL_CTX_set_quiet_shutdown.pod | 2 +- doc/{ssl => man3}/SSL_CTX_set_read_ahead.pod | 2 +- .../SSL_CTX_set_record_padding_callback.pod | 96 + doc/man3/SSL_CTX_set_security_level.pod | 190 + .../SSL_CTX_set_session_cache_mode.pod | 2 +- .../SSL_CTX_set_session_id_context.pod | 2 +- doc/man3/SSL_CTX_set_split_send_fragment.pod | 188 + doc/{ssl => man3}/SSL_CTX_set_ssl_version.pod | 2 +- doc/{ssl => man3}/SSL_CTX_set_timeout.pod | 2 +- ...SSL_CTX_set_tlsext_servername_callback.pod | 77 + .../SSL_CTX_set_tlsext_status_cb.pod | 6 +- doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod | 200 + .../SSL_CTX_set_tlsext_use_srtp.pod | 0 .../SSL_CTX_set_tmp_dh_callback.pod | 38 +- doc/man3/SSL_CTX_set_verify.pod | 355 + doc/{ssl => man3}/SSL_CTX_use_certificate.pod | 4 +- doc/man3/SSL_CTX_use_psk_identity_hint.pod | 137 + doc/man3/SSL_CTX_use_serverinfo.pod | 83 + doc/{ssl => man3}/SSL_SESSION_free.pod | 11 +- doc/man3/SSL_SESSION_get0_cipher.pod | 58 + doc/man3/SSL_SESSION_get0_hostname.pod | 74 + .../SSL_SESSION_get0_id_context.pod | 2 +- doc/{ssl => man3}/SSL_SESSION_get0_peer.pod | 2 +- .../SSL_SESSION_get_compress_id.pod | 2 +- doc/{ssl => man3}/SSL_SESSION_get_ex_data.pod | 2 +- doc/man3/SSL_SESSION_get_protocol_version.pod | 56 + doc/{ssl => man3}/SSL_SESSION_get_time.pod | 0 doc/{ssl => man3}/SSL_SESSION_has_ticket.pod | 8 +- doc/man3/SSL_SESSION_is_resumable.pod | 44 + doc/{ssl => man3}/SSL_SESSION_print.pod | 2 +- doc/{ssl => man3}/SSL_SESSION_set1_id.pod | 4 +- doc/{ssl => man3}/SSL_accept.pod | 2 +- doc/{ssl => man3}/SSL_alert_type_string.pod | 2 +- doc/man3/SSL_alloc_buffers.pod | 67 + doc/{ssl => man3}/SSL_check_chain.pod | 2 +- doc/{ssl => man3}/SSL_clear.pod | 2 +- doc/{ssl => man3}/SSL_connect.pod | 2 +- doc/{ssl => man3}/SSL_do_handshake.pod | 2 +- doc/man3/SSL_export_keying_material.pod | 87 + doc/man3/SSL_extension_supported.pod | 291 + doc/{ssl => man3}/SSL_free.pod | 2 +- doc/{ssl => man3}/SSL_get0_peer_scts.pod | 2 +- doc/{ssl => man3}/SSL_get_SSL_CTX.pod | 2 +- doc/{ssl => man3}/SSL_get_all_async_fds.pod | 4 +- doc/man3/SSL_get_ciphers.pod | 99 + doc/{ssl => man3}/SSL_get_client_CA_list.pod | 2 +- doc/man3/SSL_get_client_random.pod | 104 + doc/man3/SSL_get_current_cipher.pod | 71 + doc/{ssl => man3}/SSL_get_default_timeout.pod | 2 +- doc/{ssl => man3}/SSL_get_error.pod | 28 +- doc/{ssl => man3}/SSL_get_extms_support.pod | 2 +- doc/{ssl => man3}/SSL_get_fd.pod | 2 +- doc/{ssl => man3}/SSL_get_peer_cert_chain.pod | 2 +- .../SSL_get_peer_certificate.pod | 2 +- doc/man3/SSL_get_peer_signature_nid.pod | 45 + doc/{ssl => man3}/SSL_get_psk_identity.pod | 3 - doc/{ssl => man3}/SSL_get_rbio.pod | 2 +- doc/man3/SSL_get_server_tmp_key.pod | 43 + doc/man3/SSL_get_session.pod | 105 + doc/{ssl => man3}/SSL_get_shared_sigalgs.pod | 2 +- doc/{ssl => man3}/SSL_get_verify_result.pod | 2 +- doc/man3/SSL_get_version.pod | 108 + doc/man3/SSL_in_init.pod | 110 + doc/man3/SSL_key_update.pod | 110 + doc/{ssl => man3}/SSL_library_init.pod | 0 doc/{ssl => man3}/SSL_load_client_CA_file.pod | 6 +- doc/man3/SSL_new.pod | 69 + doc/{ssl => man3}/SSL_pending.pod | 19 +- doc/man3/SSL_read.pod | 141 + doc/man3/SSL_read_early_data.pod | 252 + doc/{ssl => man3}/SSL_rstate_string.pod | 2 +- doc/{ssl => man3}/SSL_session_reused.pod | 2 +- doc/{ssl => man3}/SSL_set1_host.pod | 25 +- doc/man3/SSL_set_bio.pod | 114 + doc/man3/SSL_set_connect_state.pod | 77 + doc/{ssl => man3}/SSL_set_fd.pod | 2 +- doc/{ssl => man3}/SSL_set_session.pod | 2 +- doc/{ssl => man3}/SSL_set_shutdown.pod | 2 +- doc/{ssl => man3}/SSL_set_verify_result.pod | 2 +- doc/{ssl => man3}/SSL_shutdown.pod | 2 +- doc/{ssl => man3}/SSL_state_string.pod | 2 +- doc/{ssl => man3}/SSL_want.pod | 24 +- doc/man3/SSL_write.pod | 123 + doc/{crypto => man3}/UI_STRING.pod | 23 +- doc/man3/UI_UTIL_read_pw.pod | 72 + doc/{crypto => man3}/UI_create_method.pod | 39 +- doc/man3/UI_new.pod | 254 + doc/{crypto => man3}/X509V3_get_d2i.pod | 0 doc/{crypto => man3}/X509_ALGOR_dup.pod | 14 +- .../X509_CRL_get0_by_serial.pod | 0 .../X509_EXTENSION_set_object.pod | 0 doc/{crypto => man3}/X509_LOOKUP_hash_dir.pod | 22 +- doc/man3/X509_NAME_ENTRY_get_object.pod | 99 + .../X509_NAME_add_entry_by_txt.pod | 24 +- doc/{crypto => man3}/X509_NAME_get0_der.pod | 0 .../X509_NAME_get_index_by_NID.pod | 29 +- doc/{crypto => man3}/X509_NAME_print_ex.pod | 21 +- doc/{crypto => man3}/X509_PUBKEY_new.pod | 0 doc/{crypto => man3}/X509_SIG_get0.pod | 6 +- .../X509_STORE_CTX_get_error.pod | 2 +- doc/{crypto => man3}/X509_STORE_CTX_new.pod | 0 doc/man3/X509_STORE_CTX_set_verify_cb.pod | 211 + .../X509_STORE_get0_param.pod | 0 doc/{crypto => man3}/X509_STORE_new.pod | 0 .../X509_STORE_set_verify_cb_func.pod | 0 .../X509_VERIFY_PARAM_set_flags.pod | 26 +- doc/{crypto => man3}/X509_check_ca.pod | 8 +- doc/{crypto => man3}/X509_check_host.pod | 4 +- doc/{crypto => man3}/X509_check_issued.pod | 4 +- doc/man3/X509_check_private_key.pod | 54 + doc/man3/X509_cmp_time.pod | 61 + doc/{crypto => man3}/X509_digest.pod | 2 +- doc/{crypto => man3}/X509_dup.pod | 19 +- doc/{crypto => man3}/X509_get0_notBefore.pod | 0 doc/man3/X509_get0_signature.pod | 128 + doc/{crypto => man3}/X509_get0_uids.pod | 0 .../X509_get_extension_flags.pod | 22 +- doc/{crypto => man3}/X509_get_pubkey.pod | 0 .../X509_get_serialNumber.pod | 0 .../X509_get_subject_name.pod | 2 +- doc/{crypto => man3}/X509_get_version.pod | 0 doc/{crypto => man3}/X509_new.pod | 0 doc/{crypto => man3}/X509_sign.pod | 0 doc/{crypto => man3}/X509_verify_cert.pod | 0 .../X509v3_get_ext_by_NID.pod | 2 +- doc/man3/d2i_DHparams.pod | 42 + doc/man3/d2i_PKCS8PrivateKey_bio.pod | 69 + doc/{crypto => man3}/d2i_PrivateKey.pod | 0 doc/{ssl => man3}/d2i_SSL_SESSION.pod | 5 +- doc/{crypto => man3}/d2i_X509.pod | 10 + doc/{crypto => man3}/i2d_CMS_bio_stream.pod | 0 doc/{crypto => man3}/i2d_PKCS7_bio_stream.pod | 0 doc/{crypto => man3}/i2d_re_X509_tbs.pod | 11 +- doc/{crypto => man3}/o2i_SCT_LIST.pod | 5 +- doc/{apps => man5}/config.pod | 20 +- doc/{apps => man5}/x509v3_config.pod | 10 +- doc/man7/Ed25519.pod | 67 + doc/man7/RSA-PSS.pod | 111 + doc/man7/X25519.pod | 58 + doc/{crypto => man7}/bio.pod | 15 +- doc/{crypto => man7}/crypto.pod | 4 +- doc/{crypto => man7}/ct.pod | 2 - doc/{crypto => man7}/des_modes.pod | 15 +- doc/{crypto => man7}/evp.pod | 28 +- doc/man7/ossl_store.pod | 102 + doc/man7/scrypt.pod | 158 + doc/{ssl => man7}/ssl.pod | 28 +- doc/man7/x509.pod | 73 + doc/openssl-c-indent.el | 2 +- doc/ssl/DTLSv1_listen.pod | 102 - doc/ssl/SSL_CIPHER_get_name.pod | 128 - doc/ssl/SSL_CTX_dane_enable.pod | 384 - doc/ssl/SSL_CTX_sess_set_get_cb.pod | 96 - doc/ssl/SSL_CTX_set1_curves.pod | 90 - doc/ssl/SSL_CTX_set_cert_store.pod | 73 - doc/ssl/SSL_CTX_set_mode.pod | 114 - doc/ssl/SSL_CTX_set_msg_callback.pod | 103 - doc/ssl/SSL_CTX_set_psk_client_callback.pod | 63 - doc/ssl/SSL_CTX_set_security_level.pod | 169 - doc/ssl/SSL_CTX_set_split_send_fragment.pod | 132 - doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod | 198 - doc/ssl/SSL_CTX_set_verify.pod | 307 - doc/ssl/SSL_CTX_use_psk_identity_hint.pod | 87 - doc/ssl/SSL_CTX_use_serverinfo.pod | 56 - doc/ssl/SSL_SESSION_get0_cipher.pod | 42 - doc/ssl/SSL_SESSION_get0_hostname.pod | 37 - doc/ssl/SSL_SESSION_get_protocol_version.pod | 44 - doc/ssl/SSL_export_keying_material.pod | 61 - doc/ssl/SSL_extension_supported.pod | 145 - doc/ssl/SSL_get_ciphers.pod | 84 - doc/ssl/SSL_get_client_random.pod | 88 - doc/ssl/SSL_get_current_cipher.pod | 55 - doc/ssl/SSL_get_session.pod | 82 - doc/ssl/SSL_get_version.pod | 67 - doc/ssl/SSL_new.pod | 61 - doc/ssl/SSL_read.pod | 121 - doc/ssl/SSL_set_bio.pod | 108 - doc/ssl/SSL_set_connect_state.pod | 64 - doc/ssl/SSL_write.pod | 111 - e_os.h | 257 +- engines/afalg/build.info | 13 - engines/afalg/e_afalg.ec | 1 - engines/afalg/e_afalg_err.c | 111 - engines/afalg/e_afalg_err.h | 60 - engines/asm/e_padlock-x86.pl | 2 +- engines/asm/e_padlock-x86_64.pl | 2 +- engines/build.info | 13 +- engines/{afalg => }/e_afalg.c | 108 +- engines/e_afalg.ec | 3 + engines/{afalg => }/e_afalg.h | 15 + engines/e_afalg.txt | 30 + engines/e_afalg_err.c | 83 + engines/e_afalg_err.h | 43 + engines/e_capi.ec | 4 +- engines/e_capi.txt | 62 + engines/e_capi_err.c | 180 +- engines/e_capi_err.h | 97 +- engines/e_chil.c | 1285 -- engines/e_chil.ec | 1 - engines/e_chil_err.c | 111 - engines/e_chil_err.h | 64 - engines/e_dasync.c | 5 +- engines/e_dasync.ec | 4 +- engines/e_dasync.txt | 22 + engines/e_dasync_err.c | 91 +- engines/e_dasync_err.h | 41 +- engines/e_ossltest.c | 140 +- engines/e_ossltest.ec | 4 +- engines/e_ossltest.txt | 13 + engines/e_ossltest_err.c | 70 +- engines/e_ossltest_err.h | 37 +- engines/e_padlock.ec | 1 - engines/vendor_defns/hwcryptohook.h | 509 - fuzz/README.md | 77 +- fuzz/asn1.c | 148 +- fuzz/asn1parse.c | 24 +- fuzz/bignum.c | 53 +- fuzz/bndiv.c | 56 +- fuzz/build.info | 16 +- fuzz/client.c | 101 + fuzz/cms.c | 33 +- fuzz/conf.c | 14 +- .../0003dfc89707eeabda0c94a227c7d3fc6cd7f182 | Bin 0 -> 15268 bytes .../00559d7859c12eaa40ed044f21802d351b206996 | Bin 0 -> 86 bytes .../0085a6bed5183d0c8af683b59afb5658cd6263c4 | Bin 0 -> 92 bytes .../008b809becebb2b079fde5dbb44478c5e632e779 | Bin 0 -> 40 bytes .../00a1bcf0e7a32452eb8b1cd971dc8b5b564a9ef0 | Bin 0 -> 495 bytes .../00a3f0b2dc24ac904fcf4095b8a3a82438202c52 | Bin 0 -> 504 bytes .../00aff37cdb1b0a2f2af0c9dc391fb1372b15e633 | Bin 0 -> 6052 bytes .../00b14db87f31c2b33204bbfdabf96bd422712976 | Bin 0 -> 26 bytes .../00c6beb3941ebf0bf02a74e4d4496f773ea989ee | Bin 0 -> 320 bytes .../00d52b4022052df8f46ba4b5040115f66fadc3c5 | Bin 0 -> 227 bytes .../00d768ab6911ffb8d66ccb03016c140fb7658204 | Bin 0 -> 170 bytes .../00f27180d90d6e8a65f53bfa911a5a9ee5b36098 | Bin 0 -> 400 bytes .../0100b276fdd5c8971fb3ae681683006cd9f20f0f | Bin 0 -> 24928 bytes .../0110b728e90d45b06d479874ca848e815a6fa4fb | Bin 0 -> 713 bytes .../0114b5ed29c54ee9b45e790a8f58b6929c48e2d1 | Bin 0 -> 84 bytes .../011aea724d8151efa0dd3227113c5cb348ed854b | 1 + .../0122363b5775dd39f326d1ca58e5c15cc76b6d5b | Bin 0 -> 177 bytes .../0122694ecefb635272892c4fad2164299fc56610 | Bin 0 -> 7 bytes .../0150b1c18d32eca958f6a6b21c298dbe27391e6a | Bin 0 -> 140 bytes .../01695676f4183e2caec02d5093a164d4ce937b24 | Bin 0 -> 199 bytes .../02045d7d734b98dab0a446f3ea6a3bd390db1110 | Bin 0 -> 1004 bytes .../024dbd1b4ffcf17317d056520fa97664bd209437 | Bin 0 -> 206 bytes .../02c36f4de24a41591c1d1a9b50b306f5d5fbf5d0 | 1 + .../02eb61cd8c58ea675bfaa4dced8a5ffe12b8d43b | Bin 0 -> 13920 bytes .../0315ca0d5871d1f4ec2ba7bfb26dc334d87a8d7e | Bin 0 -> 142 bytes .../03277bf3264bf0ba3a65e6ae58c4f1e716a2ae66 | Bin 0 -> 79 bytes .../0338e8b8f750873ade552222290e2058050710a6 | Bin 0 -> 2025 bytes .../033969db70014b8d53c360a2a4d3908d8c72c654 | Bin 0 -> 4407 bytes .../035249d96148f3620add8703cbf5218a8e953174 | Bin 0 -> 255 bytes .../0353f0433bc9e8d6110f9a07ce27a62b03126e52 | Bin 0 -> 28 bytes .../035b71e89bac2b1ae522d5ca6285674fe4904366 | Bin 0 -> 1472 bytes .../0362391cf3f8a4c895c889278c3848c4df81a7e3 | Bin 0 -> 87 bytes .../036a381250691217542d13cc4f541535c00df291 | Bin 0 -> 280 bytes .../03ad231400427e4a862055313c837d297f9c37ff | Bin 0 -> 46 bytes .../03d54df96e4fa9c9844b3b1dac2b2ac252a81089 | Bin 0 -> 506 bytes .../03e9998810910545db31727bd9bd014b4c5d9e4c | Bin 0 -> 4920 bytes .../03efc57367a097244e66ba5ea5b8149271c94a6d | Bin 0 -> 4153 bytes .../0428b98df299bfcd31f61a20f9fc31d0b556a74d | Bin 0 -> 570 bytes .../0432f6e6e2db0786d0387e7c09ed2814296d7dcc | 1 + .../04826d6afe6809312d8007b51d8a7ed4f9d6ab37 | Bin 0 -> 52 bytes .../048d57945be095ebc1853f3ddf35f1574dda65c2 | Bin 0 -> 2770 bytes .../0492e42cb40bf2d110c37ac4fdab8162df931de5 | 1 + .../04b33590d65330730838e35c919ada85d83151bb | Bin 0 -> 4127 bytes .../04c072d0248525862e4ef46fe42430f5373fbd4e | Bin 0 -> 508 bytes .../04e7da1188a2ffcaa8f2368c12c4beab9c822cc9 | Bin 0 -> 7 bytes .../04ec9f37e31b1203b4f3c01a36c3178eecf1eea4 | Bin 0 -> 6 bytes .../04f1ba3fd23a0dc9352d48280ea1fe7e1d94e26c | Bin 0 -> 19 bytes .../0506aca75bf93e309caaa01326dbfb1727020bcd | Bin 0 -> 1075 bytes .../0521b4c9c5bd11c3d8f7e1b5684b85df990f9f0d | Bin 0 -> 363 bytes .../053dabde194de686f13218c849b8e701159ea071 | Bin 0 -> 18 bytes .../054d788535e31ed1b1b162a1d15aa5df38f4d527 | Bin 0 -> 80 bytes .../0551023b2f44c59cd90b95ffcc1f096c1d8a3f65 | Bin 0 -> 13 bytes .../0568a0feae0c78db54e34f0050bb4f89d3679459 | Bin 0 -> 28 bytes .../0584e966ce708ca3992aa2fc57781f656dd33e9b | Bin 0 -> 25 bytes .../05945b16a17b566c12918f1651cc95b2ae97eff0 | Bin 0 -> 1013 bytes .../05a52819a002faf97d11b6fbbeb4b87c8d4493ff | Bin 0 -> 80 bytes .../05fd9727c53a29e3d8c2883fa52649fed248c154 | Bin 0 -> 26 bytes .../0609a7f146568bce6a5c9190569b5e61ddc54b6b | Bin 0 -> 19 bytes .../0658ba5e716d0a6ca2086ee13108f88e1fd6dc5e | 1 + .../0658f46aea2f7a995a90f361042b0840c40bf776 | Bin 0 -> 3601 bytes .../065ef2541588cb730ab0790a755e2e5fcc2fc540 | Bin 0 -> 5896 bytes .../066c71f0c21206fa42a1c0fb8624faee0bc48367 | Bin 0 -> 11 bytes .../068fb62e880cbcf79ce9166b9995cd353f592acb | Bin 0 -> 6049 bytes .../06e2f95340fed99679b780e12351cf905b5484ac | Bin 0 -> 4500 bytes .../0723f32f584e12fa5ee61ea572d7e6bcaa7860cc | Bin 0 -> 36 bytes .../07361638864ee9a0a590533cacca2d6d0daa39f3 | Bin 0 -> 273 bytes .../073a0852cdb96101bbe760a51b68f71c90d7e9bb | Bin 0 -> 3314 bytes .../07429d1d5b50057173687c84be4f22c98987fbc2 | 1 + .../074dc4eb49d3ea6c3c0cad698f618a65f325205a | Bin 0 -> 1332 bytes .../07722a401469b8e7fdeccb3ee3231df47a0e6054 | Bin 0 -> 116 bytes .../07778ddff77e2831091d0860dfc6d782077046a3 | Bin 0 -> 117 bytes .../07937aee65117a3ab60401c9a19d8cb5324ccd7d | Bin 0 -> 2480 bytes .../07cb0879414e26c50c81e30cea036e7a345ed596 | Bin 0 -> 100 bytes .../08173e573b203a5e2e0e8c0775270c6a87559b08 | Bin 0 -> 61 bytes .../08276123bfe8471dc689f6d9fadc96f06bba3cb2 | Bin 0 -> 1000 bytes .../0829cfa6d94e364cd7ef93d8378c2b61d239a0e3 | Bin 0 -> 1452 bytes .../08363d974a3b4a84aa0453bc5f24080c6a0da695 | Bin 0 -> 64 bytes .../083f36ab58d74d4fa64a0ce228b2d9d033485138 | Bin 0 -> 3120 bytes .../0853f191784494fd5083d89629769c9d22006d30 | Bin 0 -> 8 bytes .../0855d931fefdaf06538bf8385d33c6979a69f840 | Bin 0 -> 589 bytes .../086e9cb296fc6d616aef3864ab497a9747c9f573 | Bin 0 -> 132 bytes .../089650263d738b68b28aeab240f3036d8f32ba1f | Bin 0 -> 16 bytes .../08cff5d45f9fad4a723a16c631629ba7f0ca778d | Bin 0 -> 10 bytes .../08ec21d7c0d4326c8e80f57d4b6bf7011ee58bd8 | 1 + .../09083eaceb298eac3f93abb2a90feb06aabb386a | 1 + .../090d8ea802fae9b31057eb4f80d202e021033511 | Bin 0 -> 159 bytes .../0913fd09e8f4f966a6a167f73eee4e2199ee12ad | Bin 0 -> 62 bytes .../091694137869686c1a7ee39ccaf2c1bde45887ca | Bin 0 -> 98 bytes .../092509bac75dd8b164c8b4cbe9c39fe83ec492bc | Bin 0 -> 863 bytes .../0960d847dff78f3f84dcf9699aaf22f30a2440e8 | Bin 0 -> 2800 bytes .../0979f9bb860e4f78b0b8a920b26bc87b38b22567 | Bin 0 -> 91 bytes .../09d7b36792326c00d87581008aac83a95661770a | Bin 0 -> 36 bytes .../0a0d5f88e5a36d77e39e88a0709d4e55c5c61236 | Bin 0 -> 1140 bytes .../0a2f62d4a8f314604bf235715928fd6f94bfc7d7 | Bin 0 -> 540 bytes .../0a7a598828d6dd0ecb33518691f349828edb62ae | Bin 0 -> 232 bytes .../0aa03c9c1755e261607017d88f87d0483c55e188 | Bin 0 -> 4998 bytes .../0ab0fc38929e188cfcec5534350eacd30e0c5377 | Bin 0 -> 5334 bytes .../0ada8a31f96176ff0574648d657697641ff563f1 | 1 + .../0ae43b1fb75f1c8d76f968e1a95982eaa6a63a3f | Bin 0 -> 94 bytes .../0b2165d77e1513f1a9c1a79e8f8e80ff4ba36cda | Bin 0 -> 422 bytes .../0b49d5ec91e55f25cae6aa34c107cf9f676d8147 | Bin 0 -> 628 bytes .../0b70ee5253baa233fc2cccfc1b809f0e844444e7 | Bin 0 -> 378 bytes .../0b9069e8348e44dd7e2a0dfbb886d5de5e0f920b | Bin 0 -> 21 bytes .../0ba99fd79c7b228d8e95abf3ddc7533b910cd96a | Bin 0 -> 27 bytes .../0babbf8fa016e1ecbcb5dee6b2a88b8676d5073a | Bin 0 -> 7384 bytes .../0bac0cb1b9375f48175a913a25fd22afa79f41b9 | Bin 0 -> 18 bytes .../0bf904fd0e126fee86366b247cf62a4e7695b8f8 | Bin 0 -> 448 bytes .../0c01617de21f0a1c7731f2c9778d775a6f47077e | 1 + .../0c1f384ed05b6c56f3abace5ed088f0c72bcc2e0 | Bin 0 -> 2937 bytes .../0c3a8eb058fb0b434d1fa9c8a9d46c08266eca3a | Bin 0 -> 1146 bytes .../0c434b50d799ed492a79da795ac854e131e712ed | Bin 0 -> 288 bytes .../0c4edac524ddd711d7d1e8bbe38863671eb47eef | Bin 0 -> 26 bytes .../0c52f4676feade267e670d033895943467bf0287 | Bin 0 -> 1453 bytes .../0c6cc104c06b8c2a4812b8c3c6ab74f6eda79983 | Bin 0 -> 2019 bytes .../0c6e7f67c798a37323f4d6053bb046973eb07668 | 1 + .../0c769b955f479ba83375a16c9a550a217bec90f4 | Bin 0 -> 4203 bytes .../0c7f56cd0b917add3ca10c89027f7ff1620a5a29 | Bin 0 -> 26 bytes .../0c91c6872569f737005a228ea106dfbcc360262b | 1 + .../0cbc90b164c5fa1fa303e53fbb196b6f2b2220b6 | Bin 0 -> 72 bytes .../0cbdfe417293381361effbdccbdfc0837bbd413d | Bin 0 -> 549 bytes .../0cd4febcf2d9c9adb0f1ef32ed9531236f741af1 | Bin 0 -> 32 bytes .../0d36f41768b953abfcccd5cbbe6c88021235386c | Bin 0 -> 150 bytes .../0d5770244ebb31ad2be403529ad1ac5f81c5afbd | Bin 0 -> 110 bytes .../0d61de6095c9f199476d88662055f13be8e06ccb | Bin 0 -> 4 bytes .../0d7ee84b70696b927ec7845fe283214e562125a3 | Bin 0 -> 19 bytes .../0d813d407f38ca40f6c7cacfcf0eb47f210187fc | Bin 0 -> 14 bytes .../0d8206dde42181624bdf4012e1ab69a4bc5fd13c | Bin 0 -> 1651 bytes .../0d9853b13a10e74a12d44938cb7c14a80fffc0b2 | Bin 0 -> 1600 bytes .../0db0098d9c30a8552e356ae4b8caf12e9318c690 | Bin 0 -> 555 bytes .../0de77668d95a0cb135e092fdb98e13572f2fb4f7 | Bin 0 -> 228 bytes .../0e2022f5a37119afa0ef2bb8a794a1b3773706e9 | Bin 0 -> 999 bytes .../0e356ba505631fbf715758bed27d503f8b260e3a | Bin 0 -> 2 bytes .../0e63b119015f14d494c8f694f3a72c6c7f908acb | Bin 0 -> 293 bytes .../0e68867857476ef05466846983b448ca5b70587a | 2 + .../0e8aa3ff7c240dad73a1270bba27783bca917fd3 | Bin 0 -> 23 bytes .../0ea3948781fa70bc05e69ea38775957cbe55d420 | Bin 0 -> 399 bytes .../0eb5037935ba1c2791f3b7e9bc8470c3c60d2aff | 1 + .../0ebed543fc4618ccf16745b8a15e24ef84d4fa95 | Bin 0 -> 49 bytes .../0ee500dc808b4ea16a2769182d010e3d13678f86 | Bin 0 -> 4143 bytes .../0f00ebc2475af3b1375b8d70faa3b3771da47fe1 | Bin 0 -> 67 bytes .../0f025f8b50707039663a09c0ae2e829e4cdb4f0b | Bin 0 -> 6 bytes .../0f28099753c89f94a36c9f2b874e58888814be11 | Bin 0 -> 19 bytes .../0f2e7ed624c190b0e49073ec1303ed173eabb763 | Bin 0 -> 65 bytes .../0f5792d0e35472601d9f46875c9808d3546bd12f | Bin 0 -> 13 bytes .../0f6b65bbf6e17b9ad675efa4fafdac330a117b5a | Bin 0 -> 1834 bytes .../0f767ec303d7e81c099c8adf430a1c60aed16927 | Bin 0 -> 934 bytes .../0f78152e5adb7156bdd3a31ec9a8031d5873bc84 | Bin 0 -> 23 bytes .../0ff4898d39c135b7258e8c25c79f46b29aef78b1 | Bin 0 -> 30 bytes .../0ffbbf1bea84d025fdbee6fb2ce4c0dafe323778 | Bin 0 -> 485 bytes .../100755882139d8ac2af8bfc9ce880cc2a9251f7c | 1 + .../100ed87518c7cee132c7a4e222d243e36a79639b | Bin 0 -> 140 bytes .../10108ccb71990e9d7b99b0b82e9ecf16bc43d447 | Bin 0 -> 180 bytes .../102c2a168a7eb6438f353f462ae06e2d8761e0e1 | Bin 0 -> 59 bytes .../103fb3326e6388f2ff50d6f8362c6f6b86d13385 | Bin 0 -> 263 bytes .../104b0de5d9ecd820ee5938d414439a8e533a3599 | 1 + .../106b97b64b9f4076d0cb02306dcd705d70681bc6 | Bin 0 -> 56 bytes .../1092ab8bd4da3bbaae7c6506daa78f226aa05a5c | Bin 0 -> 2913 bytes .../10d01f00dca2923874f8404d11d1b30cd358a3c2 | Bin 0 -> 1390 bytes .../10d216bab7ea9e57deec17e099418ae1d96d644e | Bin 0 -> 8024 bytes .../10d7b64c22d438eefbe68b6511ce73b9160977ca | Bin 0 -> 1590 bytes .../11104e4ba4a92fdc254b6dd8aa4d7745e6236d45 | Bin 0 -> 78 bytes .../11249276ab0cea54aa2e13ba2c07269319d31fcb | Bin 0 -> 19 bytes .../11300150db008f9eee0c16fed397039ddc14d445 | Bin 0 -> 36 bytes .../113cb7e34e5d23b648a38a9623555026c4efb30d | Bin 0 -> 2084 bytes .../1141781eecdc2ed4e7d8cd78ea09bb40f8bd3d22 | Bin 0 -> 111 bytes .../114ed3f13c47c57472a16a3a9589ceb363f88832 | Bin 0 -> 46 bytes .../11522859146ebc3a36bc8ff0e546ab6815ce53e6 | Bin 0 -> 48 bytes .../11923d2ce5268e0bc8a5082feaa56f2b399e89fa | Bin 0 -> 27 bytes .../1197c0ffd3e0f77b82340b4d493cf290228d8f49 | Bin 0 -> 2892 bytes .../11b2bf9973817dfa6ca6a761518598f4928dda89 | Bin 0 -> 790 bytes .../11b4592ae3a749e1600fbdbf27bf95357650402e | Bin 0 -> 24416 bytes .../11b5c41fa22df9cd65a211abf964a6bc4104e8b5 | Bin 0 -> 17 bytes .../11d900304d0975a26665059115a718113ef1a643 | Bin 0 -> 280 bytes .../121ca7810c840a552d8d51dbcbf2ee49df3ccd4d | Bin 0 -> 52 bytes .../1227287fc0ac4f2b05bb2159404c40ac84b1c66b | Bin 0 -> 868 bytes .../1242a289a21334d8c0b10bd76803c9c3ba4aee4f | Bin 0 -> 9 bytes .../126ac8113f06449d4ce19914cd4f34bfce0248ab | Bin 0 -> 27 bytes .../126fbc0e127fe6cc0add35eb6e812823d8733119 | Bin 0 -> 692 bytes .../129bc116ce9bb203478b33802b9edd90f19fb27b | Bin 0 -> 510 bytes .../12a5a72578bf8ade691156e44f720d56848a7d1a | Bin 0 -> 1021 bytes .../12accca93449d9a07a67f0d2fcc94f49411366c3 | Bin 0 -> 1000 bytes .../12c74bf437ba831ea55c23e01514e8e1076569f0 | Bin 0 -> 1929 bytes .../12ded2f0ce41e4dde2102688fe4616ac7aaac1a1 | Bin 0 -> 1064 bytes .../12e0cd0531d71736d8a11c2b5095dfc4403aef29 | 4 + .../1352821d768d5a70bcac5c40f2542a28e71ae1f0 | Bin 0 -> 120 bytes .../135745dfa8dee0bee07c0c4dc24436d6fe70488c | Bin 0 -> 2735 bytes .../1362912a39aa7816ea10f1a56a3b2b6d43244cc9 | Bin 0 -> 5136 bytes .../1389cd4044d41d940d94dbbfea4953719bbf88e3 | 1 + .../13b612638fa6e1c75c63ec7b3ba6404623238dc9 | Bin 0 -> 159 bytes .../13ca9d68013d5c220f70298f0c4c009b63d6ba6d | Bin 0 -> 83 bytes .../13ed0ce599d0353a2da422d80ea055ec8e4fd51e | Bin 0 -> 32 bytes .../13f8c86d8edf5a33973229033c883ee8037cd067 | Bin 0 -> 52 bytes .../14207d2628a436b0ffae8d5d8b3543d9229eeae8 | Bin 0 -> 205 bytes .../1445db6227680692d49bd25b6b9289fbaa3d18fd | Bin 0 -> 4 bytes .../14b445788c533d1ccccd0e7ec2cc3aa7004fdd5a | Bin 0 -> 650 bytes .../14cb798abcc8218b01d593c92277a8463c015910 | Bin 0 -> 6 bytes .../14e8e9a8e0721ae3b7a6014585c8773c6f619abd | Bin 0 -> 714 bytes .../15196f05b117690f3e12e56aa0c43803ea0d2a46 | Bin 0 -> 2 bytes .../158e995574b055ecfaca2ee0e2eb5aa857fb8b16 | Bin 0 -> 10 bytes .../15b47c89377a0b5a7e8d458eeb4a81f7be865c83 | Bin 0 -> 7 bytes .../15bf846be45f5de1b8ddebf29d0e5ee4f15dc866 | Bin 0 -> 43 bytes .../15d51b9c748922a6a74aa48ae48158a29d30654d | Bin 0 -> 136 bytes .../15e8b673e9b4feb25a8a6c78d5f7f3c29491ada4 | Bin 0 -> 22 bytes .../1616d3d2ecc75343d9e7351f24def3b8779aabb9 | Bin 0 -> 156 bytes .../163ee21a796c7141500ecdb2b97c1b9807200949 | Bin 0 -> 101 bytes .../165e09db99908c38ef7edbb439a349b2061b6668 | Bin 0 -> 84 bytes .../1674a3d050cb153da6380a629f85a1589d2720ca | Bin 0 -> 848 bytes .../1687eda01a697a5815435c99f875a6f2ec7a6dfb | Bin 0 -> 2900 bytes .../16a41c5d669ec05cea162b44c9e4ba42d2444fdb | Bin 0 -> 14 bytes .../16b335442c6693b4c9aab079854840da3b476144 | Bin 0 -> 144 bytes .../16d264bf0c1b4ce3ba96c9fb6b8248278c15b30c | Bin 0 -> 620 bytes .../1704a553d219989399ed58f883976f292fc8c91d | Bin 0 -> 3564 bytes .../17094b92004b2e9487aec94b764043f892aa4299 | Bin 0 -> 1926 bytes .../170e83be396c9ba4f876a04c4cf991c8e9f40c11 | Bin 0 -> 3984 bytes .../1727d7b5e1b39d586618c6dbe9355351c5bf662e | Bin 0 -> 192 bytes .../174e5f148d3b3e3eac1c14b5feb45a244d75a8c5 | Bin 0 -> 371 bytes .../17837957a4d3a1d677f2c4b798cf91f6c12571e7 | Bin 0 -> 4200 bytes .../179937e98f9a166103dd0c60dbd24b10997f146a | 1 + .../179d5bc8cd1fdd39150b67d991eeb6866892e25e | Bin 0 -> 2816 bytes .../17a0b49bea9023d62d3bf46184face43a37aadbc | Bin 0 -> 155 bytes .../17bb000aaa07eae4133655fbbf4214074ddfe037 | Bin 0 -> 172 bytes .../17d4f3d3a9a810d72fa1003f079df67f75b7e597 | Bin 0 -> 129 bytes .../18319154f53e16dea7dc7c6e2513634adefda68a | Bin 0 -> 1163 bytes .../18a0ade5426ef48135ad828925732b959c2a0f1b | Bin 0 -> 786 bytes .../18b9341679cf5a0706ac13d8d84b2c6a7cc4ab0e | 1 + .../18bd8cd49ef2dbe9a3e107b576d7adb519b48369 | Bin 0 -> 6690 bytes .../18d3af0cf8ec8f9a689d6a236463d2f80bda84f2 | Bin 0 -> 28 bytes .../18df931fef8b730ccc3caa475a4ffab22de7f305 | Bin 0 -> 41 bytes .../18ffe11436dca9f1f0ad84c17ba92ecb5d751731 | Bin 0 -> 2795 bytes .../19065351ff90c7c057cce1ee218372aef546959f | Bin 0 -> 4 bytes .../190e440d016261e7fe9979a4b5c64209bc51451a | Bin 0 -> 6598 bytes .../19ac01dd2a53ea940c4d3ce63d708197c625d496 | Bin 0 -> 37 bytes .../19ae47c0346c4597f3a3f3d17325b99d27799913 | Bin 0 -> 34 bytes .../1a080cf50d5ae2919583054fb5fe743ed4249836 | Bin 0 -> 461 bytes .../1a392e89ed4c3e576b0d69d19d21728f62528f65 | Bin 0 -> 18 bytes .../1a39cda7324a6e2463eb98f7e261306720a53df2 | 1 + .../1a432c576f07a72170ff6acb8e575ffcb1ec4606 | Bin 0 -> 7 bytes .../1a8edb19884ae47252598af0868f5b747ee8fffe | Bin 0 -> 20 bytes .../1aadee902c64462c3efbca22917fc9cdab1a1dbe | Bin 0 -> 38 bytes .../1b1995df5a9788f2c68d01e46a0e1165969585e2 | 1 + .../1b2620eba3a7847c8119a335d9cedf2024be6b06 | Bin 0 -> 7 bytes .../1b38c9541d3265c8001d8eab26368e5e13fc8924 | Bin 0 -> 199 bytes .../1b3cfe6d6283fb256cdb595e9c78e15b5c84e259 | Bin 0 -> 584 bytes .../1b4849515dea91258e7aa1411e6246f003f1d169 | Bin 0 -> 1315 bytes .../1b5409fa62ce9ff2dec04baac568b563fa77c835 | Bin 0 -> 64 bytes .../1b54d1d15b277075e92b3337b4b79847bc7f5366 | Bin 0 -> 1257 bytes .../1b5c5feb82ba0a4b9c249e550a83d31b7f7eab6e | 1 + .../1bc25d5bb880ddf3d92db5b026daae9ee7acf968 | Bin 0 -> 281 bytes .../1bf627c1384bfc91506307682411ab0779965da0 | Bin 0 -> 1319 bytes .../1c49cd7e0aa830889b606de8379b75e57f268b1b | Bin 0 -> 12687 bytes .../1c60f3abd23e11a3f080711ae9ac70f8801cd5fc | Bin 0 -> 140 bytes .../1c62e82b92cfee3a0e1fb6edfefdce66c5dba463 | Bin 0 -> 39 bytes .../1c7a0221b1b1b9f375a742ff3dd4e9487ebfad7d | Bin 0 -> 23864 bytes .../1c9cb29e1c1f87dc4ba47782836d4d5a09f6a896 | Bin 0 -> 144 bytes .../1ce0683366e5403002ad523ccdbc5d015da7af1f | Bin 0 -> 64 bytes .../1ce53904a2d9979c27a51d79fac59a0d6fbb8be7 | Bin 0 -> 4508 bytes .../1cf7882d248af13533dbd3fee1b4b1396a1a321f | Bin 0 -> 4120 bytes .../1d7e2edd429ead2e9a5e2b148e83cf09e272310d | Bin 0 -> 88 bytes .../1d86800f5302791a0a599f540ef7352b6870da4b | Bin 0 -> 167 bytes .../1d9a2868e77304dea4cf2370078f3809bb06ad74 | Bin 0 -> 257 bytes .../1dab6071b19a7280ce54653d02fe4c4c071299c0 | Bin 0 -> 612 bytes .../1db8f3befb27253336ac321c0537ae88897b4fcc | Bin 0 -> 9 bytes .../1de3a044e4510f62f32815d6935420bbb94f23ff | Bin 0 -> 960 bytes .../1deb2da4d4e00abbcde2643b58cf4fea37a64053 | Bin 0 -> 4936 bytes .../1e11cd79c5ddaa2572d5ceb31579bf16572dab76 | Bin 0 -> 164 bytes .../1e203be665479c4b31f3b6b204cc5cd53c03f099 | Bin 0 -> 11088 bytes .../1e211bda2c3ad0eb86ad2a3a56744fe20e5ea24e | Bin 0 -> 20 bytes .../1e2fc16b09c2b78ce29d4215c383a25b60b56979 | Bin 0 -> 84 bytes .../1e5b8ecea1adb2a86287079674b85b32898ca682 | Bin 0 -> 39 bytes .../1ebbf3a77ebf28acbdd8e577a6dce94340e74d4e | Bin 0 -> 118 bytes .../1eeb2d4ae688e8b87cb27feaa538656dd16495d4 | Bin 0 -> 6 bytes .../1f069076a0d8608f4fd0d1fb6df007b5f1fa0737 | 1 + .../1f37ff8b0ac583461b42b2b8550da6064b4f8a16 | Bin 0 -> 2088 bytes .../1f511d3c303572f384c410e06abae38af7fcfdeb | Bin 0 -> 30 bytes .../1f95288ea7808f51a08c8b0c16e5ae757831bdda | Bin 0 -> 110 bytes .../1ff0526d134f06d696ff72027c2821644a4ab82a | Bin 0 -> 90 bytes .../2065f0d601e26f9b0f537912d696730b62fa315e | Bin 0 -> 28 bytes .../2073e661998912037eb6bb489826a76764ab5455 | Bin 0 -> 19 bytes .../20943cdae1f2999593ca4456591622c8c7b1152f | Bin 0 -> 63 bytes .../20da4441494e1370e1ac93561c3fbc26ad144b8d | Bin 0 -> 52 bytes .../20eb31e92cbd72843c2eb6733763ee769ddaa67e | Bin 0 -> 400 bytes .../211379fdfdd1ebadb71b5cb846a2f4dc86e3e861 | Bin 0 -> 509 bytes .../21138be29db294c09a6faecdd2598d853c15d7b9 | Bin 0 -> 9952 bytes .../2143a4b244fd5e84e4db3252c4e7c8bb4ecfdd34 | Bin 0 -> 3811 bytes .../215f0009486cb634bb0e920dd3d24ec2822c6202 | Bin 0 -> 84 bytes .../218593c54bd7dc7a8cd748302b69529accc28702 | Bin 0 -> 120 bytes .../21b27d2dc64114930386cecb0573d0207979c8e6 | Bin 0 -> 3216 bytes .../21c3148dc2924d69f8da376313d479920db39f6f | Bin 0 -> 87 bytes .../21cbe98418eb4043c1965c51df8c2b5922026eed | Bin 0 -> 2087 bytes .../21ee863cf786315d39ef54d0966a25226ffe654f | Bin 0 -> 2994 bytes .../22296ada9be0f815b36dca4d25004d4010fd1f79 | Bin 0 -> 265 bytes .../2231eec40220adeada27ab4ceac291d3711f14a7 | Bin 0 -> 276 bytes .../223d347613d2e50d97fe34c01245d180a31105a8 | Bin 0 -> 20 bytes .../225b6f352f09113733980be1be5c3789264e1e90 | Bin 0 -> 62 bytes .../226a44ef56a9d593ca149370fc0f1fd91e626733 | Bin 0 -> 408 bytes .../228bb2c13fe31f61dc1b46aa32f6214b6810d2b2 | 1 + .../22c03799cad50ef15d96840481f57fc7dd9a82dd | Bin 0 -> 176 bytes .../22c5d6df2be0444030c00d85c3ccb87212033de5 | Bin 0 -> 21 bytes .../22ce0654d0efb1b57f73b860e2f2d3574bf4ffa8 | Bin 0 -> 20 bytes .../22d3de360536126f2192a6888f5980961a9bb803 | Bin 0 -> 6953 bytes .../22e474615c14c99795ddb5a337d2dfca854537d1 | Bin 0 -> 39 bytes .../22f06e75ee7e1006128fe49728103c5c1e515741 | Bin 0 -> 671 bytes .../2313c76c06eed19c58b580fa32103bdaea86d2eb | Bin 0 -> 60 bytes .../233da42d3e344e33009306ab63723a1193e751fb | Bin 0 -> 144 bytes .../234c5c34daaf0963f0609415dc00751b65d16bc5 | Bin 0 -> 17 bytes .../23519a24ca0e86b74889263eaec650f2a0f4d963 | Bin 0 -> 46 bytes .../2356eae0a5c6a2e02264e06452dacefdeb601610 | Bin 0 -> 19 bytes .../23836040a0364a5f5d2b365eef9df4c6cbb3cece | Bin 0 -> 770 bytes .../2394386bdae53b815a451938b935abb7ea869597 | Bin 0 -> 17 bytes .../23a5120688aacfb5443f647aaa1605c15f2d6986 | Bin 0 -> 1265 bytes .../242311385f0e62766b28f72059024fa9fbacf3b8 | Bin 0 -> 1145 bytes .../24262bf0da61dee8c33dbc42f47b1cfed4afb4fe | Bin 0 -> 84 bytes .../2427a5f58efa03131aa646230b3fb71d2dfddeb5 | Bin 0 -> 809 bytes .../2441b7c6baaf03f679440598080aa63e9c812ac8 | Bin 0 -> 7 bytes .../246868783de348a80e7e66aa7f034418601eb1ad | Bin 0 -> 88 bytes .../2477bed39d4bfe1562219289e8bfeca0293c3dc4 | Bin 0 -> 302 bytes .../248109437ac4321a11b8823bb88a506025a00630 | Bin 0 -> 13 bytes .../24b489ebf99a1738d2f880af080d49fed1e36d25 | Bin 0 -> 64 bytes .../24d86d265671fe383d1b239e1bccb2d3d9cb0eae | Bin 0 -> 1292 bytes .../24ea03f656dee22836f41fdff109b51cf15fe610 | 1 + .../252c73fe4de9867ff96ab4ba59a7b474b6f4677a | Bin 0 -> 19 bytes .../2546c8f1115f3477546a47900565e5f069d945ab | Bin 0 -> 21 bytes .../2553c3a6d4493d7cea253ce2caac068d8b1a86d8 | Bin 0 -> 86 bytes .../2560538fbae32b5a5ee3f7761f688b24b417dbb9 | Bin 0 -> 1143 bytes .../256d94784731cbfd68c029bb59da432942ac1686 | Bin 0 -> 450 bytes .../25815508976ac21a22ab072bcc9133a367390999 | 1 + .../25aebec2d3d0d48d6dd640fe58d05987bc058bbd | Bin 0 -> 146 bytes .../25b3d3e93ba39b0c31de245ea4ac2ed61a2a02bc | Bin 0 -> 216 bytes .../25d411b8f03620ed1c0c0293315e6c1679f134dd | Bin 0 -> 27 bytes .../25e449b8101ca004096e83035cbcb94f6b5ef08b | 1 + .../25fc1f787190bade97cb4c5d03d780aa41094c40 | Bin 0 -> 11 bytes .../26365a0a762e47df29b2f9cf4c22b2a49dba3d5d | Bin 0 -> 222 bytes .../26388838cc5b59e4a94dab4bb8a1ec41a3b900c9 | Bin 0 -> 21 bytes .../26563966fae2cdab2ecaf847d26b6f90fdd681f9 | Bin 0 -> 52 bytes .../26579c14c9f7cebe8ac2372560272667d21c4c0d | 1 + .../265d85487666fc2180cd9d8b87cde998fa984682 | Bin 0 -> 46 bytes .../26758dbd1a85df8684a19f758267ed6f77627bf6 | Bin 0 -> 23 bytes .../267992f001174852383b901817f2cf33cbf89bcf | Bin 0 -> 4049 bytes .../267c4b100a6feeda45e1f996a0a559150433589e | 1 + .../267dced2112de0be3d6195621a91b47e421b2a1c | Bin 0 -> 79 bytes .../269c3a88e460d9e328526a1a24a004e3d98748ad | Bin 0 -> 5 bytes .../26b3a0702ac6b9fa207c497e2670b0ac02e6b080 | Bin 0 -> 8060 bytes .../26bf81fdf323dc8d8038a5ed7ceea72546cc61e4 | Bin 0 -> 10032 bytes .../26c2aa1b49d468c2352b36b8ca13ec06fc1ed08e | Bin 0 -> 115 bytes .../26dc233cd6abed35b4166b30801c6a34e1f1db4a | Bin 0 -> 505 bytes .../26dde550735c15b6b9c0f4a59fc53b384dc033b1 | Bin 0 -> 88 bytes .../26e6c6bcac17d0963d85dea3b8a7f9265ccb297b | Bin 0 -> 6944 bytes .../272b709ef4eff5f605e84d87ddad96481e3590cb | Bin 0 -> 64 bytes .../2758ef61c859ea74928470013086baecbcced165 | Bin 0 -> 40 bytes .../277295a6736ba3c178e52c676346e30b9aa766f8 | Bin 0 -> 23 bytes .../27e82627ef37ead3228bdf0369f4918f8b5676c7 | Bin 0 -> 154 bytes .../27faea5ffab710b1757290dd7fc5e8b6a23c252b | Bin 0 -> 517 bytes .../2809f305beb60fda1336dc7f4def369b8b7d7790 | 1 + .../28591db3cfb1b2446422436593d65c67ca7d2fb4 | Bin 0 -> 66 bytes .../287b370584ddea92465a1ea9101293c03c2d6690 | Bin 0 -> 10 bytes .../28a742b7698d5e87f6dc1807e46884fc811b9448 | Bin 0 -> 1234 bytes .../28bfd0a585c8bc4ba1772b918fe0cfe8a9c6033f | 1 + .../28dada91ba8a179bdce8fbedfffbd5b0ac11f191 | Bin 0 -> 96 bytes .../2904b4060dc9cfe8ded57f3d8e46a8f078b220d8 | Bin 0 -> 768 bytes .../290d487b910c397029d6912553c032fb1d7d641e | Bin 0 -> 13 bytes .../291440b73ad3d5168ca6153a106ecac958f2e587 | Bin 0 -> 1475 bytes .../2955ffc258f362fcc8d59864eaaf359f4996de9a | Bin 0 -> 260 bytes .../2979566edcf721bd7e5ea628ea0ab451ef356a11 | 1 + .../29a7d4f547973f6fd5f79b539a29d5c87a5a0684 | Bin 0 -> 1680 bytes .../29adf4b290d9a628c7f47c53b6b573a7ef5ad460 | Bin 0 -> 19 bytes .../29b983b8b78e0c03d9ad11ded6f539488ee32d97 | 1 + .../2a087e679f21348c6b29e73375cbb70f740aa370 | Bin 0 -> 22512 bytes .../2a3049fc81047204ba942a042cf18eb8f6bde38c | Bin 0 -> 20 bytes .../2a6ce374096b1cff82ce2edc1ac8fdd6ab6a7eca | Bin 0 -> 1059 bytes .../2a6f9e9468f4148c988daa0f259948daa880ce61 | 1 + .../2a705b2690a7c0b876823b6875595dbcb6e65759 | Bin 0 -> 259 bytes .../2a808675f81df3a737de4876aeb708b7c6617715 | Bin 0 -> 6 bytes .../2a925701461b5d1a3ef7cac05bf61a104cd286c0 | Bin 0 -> 4240 bytes .../2aad944301a4692367e0a5c95ef6d6d6dce90810 | Bin 0 -> 3900 bytes .../2acf5c5c525cccf2d18bb565f9ce6e0c8a6e43a1 | Bin 0 -> 91 bytes .../2b042db4f611b6d0d581fb19350bcd3bb5b53d4f | Bin 0 -> 52 bytes .../2b5bdcbf1810066fcc04831b9b60365150e5340c | Bin 0 -> 20 bytes .../2b71329122893cb83d91d5eb82fca5935309d3fa | Bin 0 -> 7 bytes .../2b813a7a2a4572c5b9786fd303ff771e86ba6dbb | Bin 0 -> 27 bytes .../2bd82ee7001f42a1cce96a1817562fa24e76967d | Bin 0 -> 1144 bytes .../2bed3227835c201f4ff172a335d604f00fa94d5e | Bin 0 -> 181 bytes .../2c07a1d44d79579bba47da2114e7ba53bc20e474 | Bin 0 -> 741 bytes .../2c20f2fc0264bf9a4cb3bcfd97c62ffbc56f5dab | Bin 0 -> 46 bytes .../2c4d31d8388754ff817f8af18ac490a35984319e | Bin 0 -> 18240 bytes .../2c5df96551bce8cc63c86131f067f5b4d96d5ea5 | 1 + .../2c5fb3bc9b52e6228bbaf33b8875cdd318141b4c | Bin 0 -> 377 bytes .../2c6de96fc3c699fd818578a87c09dbf2feba4911 | Bin 0 -> 1149 bytes .../2c8998288ea0ad8ee98c040fd9fba95bfd7b5298 | Bin 0 -> 87 bytes .../2c8c455beed4fe9b467d5ced9f26a26149c42972 | Bin 0 -> 19 bytes .../2c978a33804e876133d1a4f446005d6ab63b3338 | Bin 0 -> 104 bytes .../2cbd0d327849bf6ae52d293e2eb135ca8a0f0698 | Bin 0 -> 14 bytes .../2ccff942b89744187dc333ffbcea254f39f30170 | Bin 0 -> 5697 bytes .../2cd07c558fade80cc0af3d5f700a8a17be6e66de | Bin 0 -> 28 bytes .../2cd33a0e4f2d487efc38a5ea2e906d988865c645 | Bin 0 -> 4 bytes .../2cd3a1f6f5f21e49974c8b38aee1371a34d85ba5 | Bin 0 -> 62 bytes .../2cdd45847ef6403749cd7d5d0c60818689b77b7c | Bin 0 -> 200 bytes .../2d2a4041931df15db0ca2c1795ceac27d7a2211b | Bin 0 -> 89 bytes .../2d85e4438afaf6704a4d42484c5834647bb3f0a7 | Bin 0 -> 1880 bytes .../2dc8fc48dc11424a8c16192b573a6ad4fb6d968d | Bin 0 -> 30 bytes .../2dd5834595e527e5a8e3de7f72692bde2fb3b6b7 | Bin 0 -> 399 bytes .../2ded79ddbfac5a5529467365dba779b65a01edf7 | Bin 0 -> 5 bytes .../2e0b67b26fe89d25db0bae74331ed98fa4d7daf4 | Bin 0 -> 3336 bytes .../2e13c61d4a539bfceb391ad3eed8a6f43eee4808 | Bin 0 -> 30 bytes .../2e4c77b23828b0bb68ca6ba09c4233f4bc8429f4 | Bin 0 -> 34 bytes .../2e5140d77e2e6508312d4ba2f3c0adfeddaf2b15 | Bin 0 -> 28 bytes .../2e9c4b405b6f12b4207b8526596b00ac0ba1dd42 | Bin 0 -> 315 bytes .../2ea043b6f22764e8b92e7fc9e0b0a6d1a385e563 | Bin 0 -> 80 bytes .../2ea6bf9a9952ed38b0067283215d07b443417f28 | Bin 0 -> 2464 bytes .../2ed68656fe73cb5b911923dd0cca0eb005032a89 | Bin 0 -> 778 bytes .../2f01f4f0dc8fbab0239b5e321ca745b3a5007d95 | Bin 0 -> 222 bytes .../2f1de06fbbf31c1ab4745623dee9ec0dfd4d22f5 | 1 + .../2f301f762b6f68090116feb97bddfe0cc57f71ae | Bin 0 -> 29 bytes .../2f31daed8292576a96b4666ef93cf89253abf8b0 | Bin 0 -> 628 bytes .../2f408174cb85d11980607b057aa9916a636cdc30 | Bin 0 -> 84 bytes .../2f5c0012f91464f90b76fa8798f766916235e207 | Bin 0 -> 10 bytes .../2fcc0eb6596b3430ab4b77686a88193bbd41893a | Bin 0 -> 7734 bytes .../2fea43900f78af051e36e0a098b51628f08fb120 | Bin 0 -> 146 bytes .../2ff5d03d83e33b511730747155c1692095904804 | Bin 0 -> 1223 bytes .../30045cc30e35c662c4fefe29e1bae817698ff47e | Bin 0 -> 1301 bytes .../301e1aa30823fe4f988f09d1990ad0f687c5b031 | Bin 0 -> 148 bytes .../3030dbf2cd56e80ac3d2e493f6b77bde97158bb2 | Bin 0 -> 64 bytes .../303e1822e21cc1d50e0d6f713914405c272f937d | Bin 0 -> 123 bytes .../304c1c6aa4504fdc0f7cd72ac67bc70f56ec1a9c | Bin 0 -> 931 bytes .../304e2d25de86d05c009c4b285910fb44d287272a | Bin 0 -> 9 bytes .../3057e3010e137e2efd2732f533332e06ba9bd7a3 | Bin 0 -> 172 bytes .../30776425dc18ff195a46fa0883e2794186f81e48 | Bin 0 -> 554 bytes .../307d45d65ee1e8cfac9ce73580ff5b4d108e9ba9 | Bin 0 -> 804 bytes .../30819f975fcd0b5c6d424d00b1363905aa34b2d5 | Bin 0 -> 892 bytes .../308aab56f731e1f5a9680112d314cba9bfe7bc3f | Bin 0 -> 362 bytes .../309306e315adaef79cea586449434a757d406f73 | Bin 0 -> 988 bytes .../30b18e3b89698444ccccab7a5f2b5c3d7f16163d | 1 + .../30c34574bdf3dff648c0fd1bd09146058ba442dd | Bin 0 -> 1013 bytes .../30d5f44d0e7029f0e18347a4b35926472dc8007f | Bin 0 -> 4378 bytes .../30ee04f84459cbb26d94580188ac21c657bf1b8f | Bin 0 -> 20 bytes .../31122376bab259a103e57c350cf897be9215142f | Bin 0 -> 4 bytes .../311f8377ba6f579cb1462227fc384b915f256c04 | Bin 0 -> 148 bytes .../312c4f6f01067ce4b1cf877693a82880ed3cffb7 | Bin 0 -> 707 bytes .../3159f4130d588910029baca55fd3100a96e041ea | Bin 0 -> 21 bytes .../315a08c689814a50892ccf14e03bdd233d5ab779 | Bin 0 -> 8597 bytes .../31a05a612378bef25602920b419c819c1005731e | Bin 0 -> 7 bytes .../31cf20cfa7f09349c38b1b80cc1d27157453cd5a | Bin 0 -> 6097 bytes .../31cf878bc7b25d566763e35c9f7bccefdf05786f | Bin 0 -> 259 bytes .../3202161347df2eacf38dfb5e2b447b80cb3a9a7c | Bin 0 -> 484 bytes .../32196d0f22fcc6cfbe5d40e5f9f9e600ff0855eb | Bin 0 -> 281 bytes .../321f083beb2b7b058012021332799648eba6d3ff | Bin 0 -> 65 bytes .../323879f60bf9cc1b6c7b5f60140a66c267cc729a | Bin 0 -> 172 bytes .../327b71d1dfc4d5308851f01b89204c6a6394c3b2 | Bin 0 -> 990 bytes .../3297e8e44366bc07e7943701d4c0a0380f5e8634 | Bin 0 -> 44 bytes .../32df5cd9133be7757e50e8a26168fdfe668fae83 | Bin 0 -> 500 bytes .../32eea0ff97439dbe0c49bf814b5e9aeae5000614 | Bin 0 -> 59 bytes .../331a3ee3d8d1c3eedb708f4c7cb4824091f41aba | Bin 0 -> 492 bytes .../3329748472e6ff0230996b5ee1133611f39a4840 | Bin 0 -> 206 bytes .../3343a8fb2ce998741b492b4cb5075e9979a1046d | Bin 0 -> 590 bytes .../334f6bf322de2bf18d1829d9233bf3bd95256d8b | Bin 0 -> 56 bytes .../3385866fb63a8df113a4bae496e1c8a95839f19f | Bin 0 -> 224 bytes .../3396fad82e262e0139037a9f557077ad8aadbd23 | Bin 0 -> 84 bytes .../33d60aa9ddd6f1eac0b689e7f7110ea9aac6f037 | Bin 0 -> 46 bytes .../33dc227f6f4cda9f8bba04869e2cf2b64871f7bf | Bin 0 -> 816 bytes .../3423e1aec437a7412bc9795481af8cc57aff0833 | Bin 0 -> 848 bytes .../343821b6c97e66a7dfb214971bca515bd0e11c2c | Bin 0 -> 3752 bytes .../349e9765e7c30d32d53200f50762148e38073bd9 | Bin 0 -> 33 bytes .../34b53ed7e08a5f423943dd5c6a281582e1647975 | Bin 0 -> 8 bytes .../34dad8b56d1dae34e5269e5b2f99f89d54ec5b0f | Bin 0 -> 140 bytes .../34dc56c09a175ca7542d5cd641ef8f8d55082f76 | Bin 0 -> 288 bytes .../35008a66598c79770786d34f69c8b4059daede62 | Bin 0 -> 148 bytes .../3505ad3537bd59ca3dbd41485d1c471cf14145d2 | Bin 0 -> 688 bytes .../353ae97b214b32cf4373643746294fd81263d606 | Bin 0 -> 29 bytes .../356de948eea3e5677ffe6d9b7a0919530d505006 | Bin 0 -> 700 bytes .../357397855fc8a35f7807b5f636c1ff55d09e2d76 | Bin 0 -> 52 bytes .../358d5e99ecbe6617575b32cd3bb0d1d94e63076b | Bin 0 -> 43 bytes .../35bde96e40857a3138a0e127177e1f2809e2cd2e | Bin 0 -> 253 bytes .../35becf2c6b730577e0bd43e3c38212d0a175631d | Bin 0 -> 6144 bytes .../360a267327aedfdb3e3b4f8aa96d92522bd21d41 | Bin 0 -> 16 bytes .../364df9c7841b83867e4b7ec99e1dd66e186b7e90 | Bin 0 -> 167 bytes .../367f1c5267baeef57a9608715658db3fb5952956 | Bin 0 -> 1506 bytes .../36b97a07569b075272078333856ab16318650420 | Bin 0 -> 7 bytes .../36bbd62b21a2f8ccd44382906607759e493d084c | Bin 0 -> 1260 bytes .../36ecc13d76d2241712b936703934b21c057f07d8 | Bin 0 -> 5464 bytes .../370ea8ff5de671a861e83aa6da74ec934fa3c411 | 1 + .../37322dea9177afca7583b1b09e26fd8436a43e64 | Bin 0 -> 139 bytes .../3740c72db1024d24f1be884a77a6cf3645589e56 | Bin 0 -> 120 bytes .../37473541c3f65a71657c41ab4183999bc16cce72 | Bin 0 -> 4 bytes .../375acebf9e3a5f7c57660d290971eb365217ea8d | 1 + .../375e589d64f26adecb28fe5628d8135c1166ef98 | Bin 0 -> 6 bytes .../3772a649d73808b3e9d58f03f636ef2480818851 | Bin 0 -> 441 bytes .../377cc7cf7d8fec19478e57b2bf3ff48dcc2902fb | Bin 0 -> 3006 bytes .../37a48df4fbc82bf51782b23570302642a0a86537 | Bin 0 -> 4518 bytes .../37ac9cb4fd2b8206e9cf3a68fde05b0ad734f814 | Bin 0 -> 2796 bytes .../37c4e41ceec5690a27c7ca7ce26ca767c1155405 | Bin 0 -> 43 bytes .../37d5f57f8844183619d665f2b7915883e48caf60 | Bin 0 -> 5110 bytes .../37d6caf49e8a5b825bb7aa0f91d5fdbbebf13684 | Bin 0 -> 26 bytes .../385b8e83afbaba4a7c33df4c686b9a6aa031d593 | Bin 0 -> 1420 bytes .../385ddccf51a7e7abb5da4db1870a8e1ac9dfb0ce | Bin 0 -> 4 bytes .../3863c4e64d0847779cdb06d0891d6277e4e0ab37 | Bin 0 -> 21 bytes .../3886ecc8c2ed78f30576dae9a464e1ce888938da | Bin 0 -> 4568 bytes .../388e37cb1da6282ec2c5372d5c1a218e95463458 | Bin 0 -> 1885 bytes .../39035eb51e6ff44ba6afe0dcd679b8628b5429c7 | Bin 0 -> 80 bytes .../395121177c23779793b9d1c1b1629570a840646b | Bin 0 -> 1361 bytes .../39bc8fede7ce746d14e7e7f1a5c009a0737a7458 | Bin 0 -> 91 bytes .../3a03dcc8e6b187541cca648672755c404d6e9838 | Bin 0 -> 1036 bytes .../3a1c0403dd4e75be6b64c4b36b611d5d40d9d44f | Bin 0 -> 4592 bytes .../3a276f4374ac887ef501961ee4132c8aeb336438 | Bin 0 -> 3840 bytes .../3a3e6e388c2c423df62a9114d2b2e7ca865f029c | Bin 0 -> 4 bytes .../3a48f8d09fb0dcb3d17283abd68a36f68476516e | Bin 0 -> 2084 bytes .../3a770918ce293110aac21d012a14f56af987f6e5 | Bin 0 -> 29 bytes .../3a7ea04c563095ec272bddba9aea0c64333bb133 | Bin 0 -> 118 bytes .../3ad476ae6fdbaedf379337aab1b266621eacf89f | Bin 0 -> 21 bytes .../3af8591b99c94f6f628d91f8e465740e676f6b18 | Bin 0 -> 30 bytes .../3b27246d566a971871379a1272b58a26506e7f02 | Bin 0 -> 644 bytes .../3b2dcb5dad7ea730b5be2ce5dddc59be1e4aaee0 | Bin 0 -> 60 bytes .../3b822b481fdce8bf311fe51b36067b795bb3aab2 | Bin 0 -> 41 bytes .../3b95bfea3486f7358207776f032e3cba4c78753c | Bin 0 -> 5 bytes .../3b9aacf99e6417925a796b0c8bf7b8069c837cdf | 1 + .../3bb8e68e173032187571e01e69b4a61af3217e57 | Bin 0 -> 4380 bytes .../3be357290504021859fcb4448275e1bc748547e5 | Bin 0 -> 27 bytes .../3be7128d8b9707c6192012c1fd130d76517b44e1 | Bin 0 -> 98 bytes .../3bfd4bd79255dc34670bbca7fc2f5894e865a123 | Bin 0 -> 41 bytes .../3c1c584ff902329cc4b5df9482a592990c02ea14 | Bin 0 -> 28 bytes .../3c3f6ebcb6dfdfc583de052ebc5696104efa4f87 | Bin 0 -> 27 bytes .../3c5c2d6635ee980251eafeed96fbd175cdf41802 | Bin 0 -> 939 bytes .../3c6d30d25afd25cfd0a16d6b5efc65d9ef4a6a94 | Bin 0 -> 4 bytes .../3c95e19f669da7130f798c4e73384746d2ca8cd4 | Bin 0 -> 4 bytes .../3c96b57a19b0f6fa963ab1e3b344ada778f28720 | Bin 0 -> 464 bytes .../3ca56c46550315632b155e48d3bf81c8a70f1fe9 | Bin 0 -> 113 bytes .../3ccc02ce0bcaf1384855ace72a7b1e75a149b44d | Bin 0 -> 15 bytes .../3cd7d8e40f646f2fe3b5aa50ffa188f5a1f95d2c | Bin 0 -> 2639 bytes .../3cda33c4903c82ea106347170e27dd3f68ee19c8 | Bin 0 -> 43 bytes .../3cdcd21d22933467b05a3257aac72e49092ecb3b | Bin 0 -> 35 bytes .../3ce2191ffaa8baee35351674f55e67dbd4e0eb26 | Bin 0 -> 4 bytes .../3cfca2b16bd5b2c67dce1718c517dc6906a355f3 | 1 + .../3d0342cc18d757db3ce0fa5cce15e1cc5e800a7d | Bin 0 -> 318 bytes .../3d13fe6aaa42fbe75a21c934ef7b314887f7487a | Bin 0 -> 94 bytes .../3d5fd43087505460ebccbb142000ec0ff11e1089 | 1 + .../3d640c74446105731bb6d77d0be623cec70c85a1 | Bin 0 -> 3705 bytes .../3d7cfacbc8f4ad7d10684af52683f1059356ac73 | Bin 0 -> 7 bytes .../3d8e02da12ee820ccf0267b10842a6c9d51fddee | Bin 0 -> 140 bytes .../3e1db2900b689a1153916d58071d6e3073f85fcd | Bin 0 -> 1688 bytes .../3e470b916edf0b6f5f03b85592b19a084a67f4f2 | Bin 0 -> 13 bytes .../3e4f268bb4cd015f29bb76c61ab1de738a8606c6 | Bin 0 -> 5889 bytes .../3e5e3c4da2c0d845b8d883384bdebd3ec8138152 | Bin 0 -> 2424 bytes .../3e7a624b38e2a57b544ea59e6d04e4803a204a51 | Bin 0 -> 24 bytes .../3e847467baadcfce3de93e362ef11ef2534e4e10 | Bin 0 -> 86 bytes .../3e9c6d0568cf9ab2e0d7b9979767fd7a896ce0a3 | Bin 0 -> 80 bytes .../3ea06f2bfab9a2b825b59e63eb88dccbb06ad993 | Bin 0 -> 24416 bytes .../3ea4d47d5d31ac515af3512b28fe5a0ae76d4261 | Bin 0 -> 478 bytes .../3eab16f697c5e0456056ec03d882b838c4724f31 | Bin 0 -> 20 bytes .../3ebdcbf3757dfbff469f390ffdfa7b982ed5f6e0 | Bin 0 -> 54 bytes .../3ebfbf255de6265b4d8f416baa03fffebef348a9 | Bin 0 -> 1197 bytes .../3ec5f12fda420c2b8779748f675e288b95f3d846 | Bin 0 -> 48 bytes .../3ed53739885f311d21b2100f6bce6b631eab88af | Bin 0 -> 100 bytes .../3f0497384a4fa3ac5c74079b596c6db3edc9149a | Bin 0 -> 52 bytes .../3f0daeed759349f8690c052c38e28cba04f5bb2f | 1 + .../3f1812478073eb2ab38d3f350231bcd1353d6603 | Bin 0 -> 80 bytes .../3f3f65b789e4ce109b8b35194dbc7dcbb6973298 | Bin 0 -> 206 bytes .../3f8b2c71002da767dc86c975defb88d2e32ec4be | Bin 0 -> 226 bytes .../3f92258eddb56284aa528ee577a15552c5665052 | Bin 0 -> 63 bytes .../3f9acfc306ef4e3476c07b5824992d5cb986ef39 | Bin 0 -> 302 bytes .../3fde4e6a369556f8cec9b6910c33797ea23d7976 | Bin 0 -> 400 bytes .../3ff04a4f80c79c824e81f27408aea71518f678b3 | Bin 0 -> 24 bytes .../3ff351569716af04e646381a56802df11ad83be4 | Bin 0 -> 4800 bytes .../3ff8705c76c9bed9945839da8f6d7af4eb62a63a | Bin 0 -> 241 bytes .../413637d6b8315491111dea4c11c0e6a22f01e182 | Bin 0 -> 553 bytes .../4170c6bf0d0ffd45e35f9fa370f0645cf8b0af8e | Bin 0 -> 513 bytes .../41a7bc878381d7ec34bdc1b8519d60d3aee2acbe | Bin 0 -> 155 bytes .../41ade513c72734ed084eeb3863cadbfe772f16a6 | Bin 0 -> 168 bytes .../41b6a47b5ff67dad13978ee102f60324ab636abc | Bin 0 -> 959 bytes .../41ce134ae926b73205017000283f8123877ea0c4 | Bin 0 -> 17 bytes .../41ebc6aecef491b8721192164f90d0e7b407ee08 | Bin 0 -> 792 bytes .../420609fb56277d50a7370817b56d351e9b682573 | Bin 0 -> 10 bytes .../4226dce80de548950f0319282a59fb9f7bec20f6 | Bin 0 -> 1144 bytes .../424f6d879735ee72eb1ca882787c4b856f878831 | Bin 0 -> 598 bytes .../425eaba3f83d942250a074cfada7dd7032791dc0 | Bin 0 -> 508 bytes .../42e34c2136df30c4ef1e0bca4be8c670dd5514f2 | Bin 0 -> 14 bytes .../42f7620677c12687fe64a520f13d3728dc61ced3 | Bin 0 -> 19 bytes .../432031962dffc733b7e1755416c2876992d0e2b1 | Bin 0 -> 6328 bytes .../433383591e6f84cc3081850e7433287d962c4365 | Bin 0 -> 3248 bytes .../4345cc88eec132aa3259f725a58d8d8cd2a66d93 | Bin 0 -> 420 bytes .../434bb3d640ee582d75ba822f1920ed6ccdc9544e | Bin 0 -> 63 bytes .../4354a6004da25a6bccca6dccedc69c73cc3bde56 | Bin 0 -> 62 bytes .../4380f3efe0c419fb55126ca43adc05a900d74443 | Bin 0 -> 27 bytes .../4385ea6132bc53a903c8adc01d89843e0762edba | Bin 0 -> 43 bytes .../438843934d3b7bbaaf56bca5c12e1a196d6d2746 | Bin 0 -> 1336 bytes .../439bff691fe3142e5bdd71dfff1e522e4c02a3b9 | Bin 0 -> 28 bytes .../43b0e961ca40f3d431fd2a772a8d0929bd133f60 | Bin 0 -> 427 bytes .../43ce68d21ccd3ad3a0f89c8778fa8b53e8aeb4d5 | Bin 0 -> 2061 bytes .../4404b51c57ccc46d5e009c7419af6502eae0ec35 | Bin 0 -> 976 bytes .../445363e893e7fc1ba04049e78405f362154ee52b | Bin 0 -> 1504 bytes .../4494bf1805adb52086a7c4a6a234495a3f6665fb | Bin 0 -> 2948 bytes .../44b658f993bf4453dd518c598c9cd0a472083877 | Bin 0 -> 5 bytes .../44c3075d23fb536d64d7d192b90173d30fa8cc41 | Bin 0 -> 6 bytes .../44f7c8dbf5441eea10877f03f256a6c6f4efa536 | Bin 0 -> 7 bytes .../44fe976bbb429dd68cd1a2f71023b117236e8683 | Bin 0 -> 47 bytes .../452bfc9a3c955e1a37d3695e9f7bb2d72ff89a93 | Bin 0 -> 58 bytes .../4562af05e0407ff5c3b4109532aefc6e73abd646 | Bin 0 -> 9 bytes .../457d9d6573b1740cf516676c44114ce2ff1dc9c7 | Bin 0 -> 13 bytes .../459c71b6d06687940822aa8d77f1267bc28d80c2 | Bin 0 -> 149 bytes .../459dff6bb7f3718d1ab085eeb20ebfe116aeba24 | 1 + .../45d93ef15bca5d02a8e7c1e52c896055bd3944b0 | Bin 0 -> 16064 bytes .../461cfa2553caeb6e7b8264a36a7b80f05bfdfd6d | Bin 0 -> 120 bytes .../462a8cec3992cfbed9e5ae2e989da87e79f01466 | Bin 0 -> 5555 bytes .../462e126aed7edec333f795a5114aa113aae56d5f | Bin 0 -> 262 bytes .../4632a28b720502ba98b332f9f4b05b5ac808be23 | Bin 0 -> 80 bytes .../46496033d92674298405f072f1672c733cd3c649 | Bin 0 -> 82 bytes .../466c861b233832de945e2b45c5e787fb13831140 | Bin 0 -> 3223 bytes .../4673fd268a88c1449d447cc06e97aae9b906d46c | Bin 0 -> 1851 bytes .../46a5cab511b443cbb8b29c1c2614ca68029811aa | 1 + .../46a7a937e909eff2bd197a8f5a5cb78cb791830d | Bin 0 -> 18 bytes .../46ca2431fa302be8e152cdf54574707e8fbeba2b | Bin 0 -> 1168 bytes .../46dd9ea31027498131da1bafcb9adf510d750cb8 | 1 + .../46e25623c54478356b306beec44ca3bb4f929547 | Bin 0 -> 87 bytes .../46fac7ddcedb88de753917c262a3faf598491468 | Bin 0 -> 4078 bytes .../47130880a5578410b4f1448c30494fb1bc67bb7e | Bin 0 -> 574 bytes .../4755a6c230fe56ef646d06056a7a69590f89813a | Bin 0 -> 2271 bytes .../477957258202afb52e6a48f9e5df2fc09b505908 | Bin 0 -> 60 bytes .../477f80f5c51beafc1affc60bcf404636b73a9aea | Bin 0 -> 398 bytes .../479f29b0b3031d2a5decdb19468143ff8a8c8afc | Bin 0 -> 148 bytes .../47bccd90b7a6ec227a58d9b926f0aa6afeea4901 | Bin 0 -> 255 bytes .../47d5b967686001cb2f1816f29bed26d7e6b1d062 | Bin 0 -> 205 bytes .../480cbd97db3a1a53b05466e39989164536d0d334 | Bin 0 -> 91 bytes .../483a661e760fbc78aedc9d9eeba039189f83cce7 | Bin 0 -> 43 bytes .../483bfb8dd102e5cf3c089105da1cc9a7ad995bbd | Bin 0 -> 36 bytes .../4840e554ee461b815950a235c57337851c0317a6 | Bin 0 -> 4448 bytes .../4889f84070be9b33ec22a4deddf40822b2720dec | Bin 0 -> 1678 bytes .../48903e8712d816af200bda59d6e2eac7a19e80af | Bin 0 -> 2130 bytes .../489e3cf205cbee8aa41e3d91f58ac9f9e50d5355 | Bin 0 -> 1601 bytes .../48ac54c89fab401ee853c1c7d9da19ae28320c94 | Bin 0 -> 1522 bytes .../48caa3f843f61b3a3d3dffee60e14b58dcef3202 | Bin 0 -> 281 bytes .../48d9dfc992d3ae22a6a453caa16573502ffa3f3b | Bin 0 -> 9262 bytes .../48dd6615aac8ce4a9cf5e25d0eb2c468c3ae4272 | Bin 0 -> 96 bytes .../48e6b403656ecafc725a9eeaeb3cb1459a353ecb | Bin 0 -> 20 bytes .../48ea5da84385e416be10c2c402ae54b4ff6019f8 | Bin 0 -> 1438 bytes .../494c31d01525bcc00c164e62f2cd1cf3f7f9f926 | Bin 0 -> 1531 bytes .../49a85d97471f92f2a936ffcfa71d81973b3d3bbe | Bin 0 -> 970 bytes .../49fa54473cb92b8ed2564ec319db6fec71cc0f3a | Bin 0 -> 12529 bytes .../4a1155eac64213c0e2df4714537f5f38266bc14b | Bin 0 -> 47 bytes .../4a18b235b0650a5d645af2e9ec8c76bfd4de238e | 1 + .../4a22b1cdffec252e8d74192f1a920da860e7eb30 | Bin 0 -> 13 bytes .../4a417844ac3c79c434a3b65ee5bb8c53c5be94f1 | Bin 0 -> 142 bytes .../4a60acc5cbd81505c0d2373aa2733f5933c2c41a | Bin 0 -> 6 bytes .../4a8ceee541f975dfb9324c616b522066d181bba3 | Bin 0 -> 76 bytes .../4aa3d5d01aa41ee9728aace9399d253d100d4892 | Bin 0 -> 294 bytes .../4ac701563781f3253d97837bcc8bcfefc82c06bb | Bin 0 -> 304 bytes .../4b3bf885507e49d4b17436169fbe91f02bd18b70 | Bin 0 -> 1412 bytes .../4b580b133c463d32da6bed571bfd91f2e92b9e77 | Bin 0 -> 20 bytes .../4b638738d7c954bc3b5a014df64d4668ba481ccb | Bin 0 -> 7817 bytes .../4b85f78f7caef2e790d05b40328a3dad62c111d0 | Bin 0 -> 41 bytes .../4b8d3b48a24166dd709f60e6673b178c1ea387e9 | Bin 0 -> 19 bytes .../4b8f23156fe4097208340d9cf2ec08183f25eb8b | Bin 0 -> 160 bytes .../4bbca5e606c539b95e45c275db2e314f5f4ee0bb | Bin 0 -> 79 bytes .../4bc7b78f374cd1d0725abf2c73231d14b712c376 | Bin 0 -> 2476 bytes .../4bcbed4f64eef7ddaf16d8e2dc8b7009b74e3642 | Bin 0 -> 373 bytes .../4bd350a66f06ded41fd9b7ed6c310103b3bc9611 | Bin 0 -> 4376 bytes .../4bf3706a127e7878695d692dabeaad9a35a28d1d | Bin 0 -> 52 bytes .../4c201bd2e5ece123cec86a6a96feeabc3278b415 | Bin 0 -> 3916 bytes .../4c36114cda22188b48f8925eea0b43d695464abf | Bin 0 -> 20 bytes .../4c3f8403b2af4cc84f1259c257f47715aedda266 | Bin 0 -> 3287 bytes .../4c422c1396846e248d1cbaf65e5afb2e5eeced5e | Bin 0 -> 18 bytes .../4c42a6d725476c967f3a83c89ba029542c0a8dab | Bin 0 -> 529 bytes .../4c541d82d8b8094947ea55431130e953a8e189a7 | Bin 0 -> 9 bytes .../4ca187b19773cdb643318f69a175135b2d5498e7 | Bin 0 -> 1600 bytes .../4cb0c5e147bac2d4ff908054598e5f46072bd646 | Bin 0 -> 7 bytes .../4cbc8c7df0d12c4567926fe8ac524d42531644e9 | 2 + .../4cded7dbfab1a1178d7014195de62c6781222789 | Bin 0 -> 17 bytes .../4d0c6d2d6f71f267e45b9237a3e490be8139956a | Bin 0 -> 84 bytes .../4d14bb2cda358ff780e587f7845b94d0db56d10a | Bin 0 -> 66 bytes .../4d325f145c34b30c1478a38efd5a4fba516aeeb3 | Bin 0 -> 1028 bytes .../4d4cc40ff93c2c61d377a67874e0cf42e9391758 | Bin 0 -> 336 bytes .../4dc1f0cf91a2035cac54c96103269d2fa4f92fd6 | Bin 0 -> 733 bytes .../4df051ca3d4fe58ce745b5bec0c7b016d113de25 | Bin 0 -> 4 bytes .../4e07f30820044aa2511dbd4f7e1d0ce9a098c543 | Bin 0 -> 80 bytes .../4e098a66fbe959b4627476aab0b202f80cb73f0d | Bin 0 -> 3781 bytes .../4e213753ee8f9812a0cbb81ff58a3c17ef6fea94 | Bin 0 -> 569 bytes .../4e22436534f7ddda6023610945ad3fb84b08d5f2 | Bin 0 -> 2 bytes .../4e34d43e845bed3ff19f74a43a8804ac2b68e2a8 | Bin 0 -> 392 bytes .../4e446ad7e733f0209eefc2e543ff58b58a029ebf | Bin 0 -> 360 bytes .../4e71e2bf54fc1c112168eacff240b3a417786da1 | Bin 0 -> 4110 bytes .../4ea029c3039200f7b0cc415fe97d66819cd56557 | 1 + .../4ea61268ae736bebabdc87890e437e801b63e24a | Bin 0 -> 500 bytes .../4ed9c35bfedcfee05c911a9d30ca2a1a96216b15 | Bin 0 -> 1756 bytes .../4ee066c4aae99e129460a4baad1475e3da91a121 | Bin 0 -> 46 bytes .../4ee15e84efee7a1e0c566ed5babd3f88f46be948 | Bin 0 -> 41 bytes .../4f65e71775b209ef8b3b035a32a2ba7e5449f8fb | Bin 0 -> 533 bytes .../4f86dd17d08911e28e47bff04685c83e1fb2782a | Bin 0 -> 1404 bytes .../4fb2688469580df43a17a5702ac9fe1637138709 | Bin 0 -> 450 bytes .../500044a494307a25c7c851e5a1b2eeae001830d0 | Bin 0 -> 47 bytes .../501b499ccb31530d7f9c9fd1d2250b0b735c83ce | Bin 0 -> 1093 bytes .../504e021f251101c9772a5c79c51c0a6343501176 | Bin 0 -> 76 bytes .../505c2e6975f75fa9ce973d858dd1b6cba40b5422 | 1 + .../5094e34cb2a033ae34a01db474241eb2a98d478d | 1 + .../50be54adbc3f691c351c82e9363b8b9c7b788640 | Bin 0 -> 98 bytes .../50bffaed4200a28020f8f3a9e0a357884b4f45b1 | Bin 0 -> 4264 bytes .../50ee6affc53f9c4d9c7cf65e384ceda593273777 | Bin 0 -> 170 bytes .../50f8dc2527103118442044db5e16c65711aaf713 | Bin 0 -> 149 bytes .../511687be8ac48f1cb468ddaff39167ba50e98aaa | Bin 0 -> 18 bytes .../515f82c7eb64c036ad3ea97cb6893592f592102b | Bin 0 -> 4200 bytes .../5166efed7a00f41740f5c5ce949186ca9525fb5e | Bin 0 -> 999 bytes .../51885bd5f4e4b75250be652da8f1cbc42b451624 | Bin 0 -> 1077 bytes .../51b6305c916f51ae5ec46214d47870fa2c43a768 | Bin 0 -> 872 bytes .../51c934cd6f11f57bffb98e632fced14deb37088a | Bin 0 -> 56 bytes .../5238a69b1f977a6cd6b32c3f01d3aa9ed30dd224 | Bin 0 -> 13935 bytes .../5243bcc65abd73e0d68e31795b624e3a116bbfca | Bin 0 -> 55 bytes .../526a0525c31ad5f8d0335371d2e777bf3a0c7f89 | Bin 0 -> 2932 bytes .../52aa363313fc75fe9350f89ce70c26197029d323 | Bin 0 -> 198 bytes .../52ac5dadd5f779c50ccf51f59e2af961bf6079d0 | Bin 0 -> 5 bytes .../52d48e60b13e1c74d7c006b229d3499a5d5b269f | Bin 0 -> 98 bytes .../533309e8cd26532c7250372a0f809570f13e5ce5 | Bin 0 -> 323 bytes .../533c550d20c0978d5dfeafc3b2d5a8c15176c91a | Bin 0 -> 22 bytes .../534483ef2c5502e103ad49e354e255a93030acec | Bin 0 -> 1477 bytes .../535e40feca581cfc47ccbc9d7c66597d1a2f8db4 | Bin 0 -> 788 bytes .../536bba078b53ba5df2097cdcd20febbf8ffc2daf | Bin 0 -> 1013 bytes .../537b291841128849f1bb70d0da75029ccf3ad67c | Bin 0 -> 19 bytes .../53846b4c31b64311c7a0444ecb28ab52388e7d73 | Bin 0 -> 799 bytes .../53a0c472a08b2c3ce4c77abc1499f9771eb6bc8d | Bin 0 -> 172 bytes .../53bd8ae6bf593f0b019858264c242fe8977bcc4e | Bin 0 -> 651 bytes .../53ea2e73442833d7cfc57b1d250c2db557ba8410 | Bin 0 -> 672 bytes .../5416c6fdd63767d639d3bf6919b019777e6f5399 | Bin 0 -> 35 bytes .../5419ab4d398136ab62c494af4621fd6bd570bf9f | Bin 0 -> 4 bytes .../5430a880389769176b28a54f8dd3a7a65c6be0ab | Bin 0 -> 49 bytes .../543dea5d607a62f9e9bdf57458eb21b8e5008058 | Bin 0 -> 597 bytes .../5483b3891a0b4ebc5fd8ca11fd71d95af4946107 | Bin 0 -> 4 bytes .../548fc6979a821acd8a849d61b276262b5e5efc77 | Bin 0 -> 860 bytes .../54a980f0365f819688866d57ff604e242b5d57e4 | Bin 0 -> 201 bytes .../54b8ef4662b0b652f2b3c56cc9503a8aa029e389 | Bin 0 -> 70 bytes .../54e58510eb46c9112cef56422e5732bf2b280fe6 | Bin 0 -> 1224 bytes .../552e135139ce553425dd01fcd5da072ae28c945c | Bin 0 -> 84 bytes .../552ec71d9f7c63fc0e8c76feef3edbe1f3d5bb7f | Bin 0 -> 1249 bytes .../554a810ee233352c8b80bfb87f525d65eaf93b69 | Bin 0 -> 724 bytes .../55583654e419a9c98405657c045efbbddf6671a5 | Bin 0 -> 63 bytes .../556fd9d6cbc821fb43a8bc85d5d8ff45ee2b2897 | Bin 0 -> 16 bytes .../5587788035c87507c770a5675879ca78689bb6de | 1 + .../55a12417cb7eeead63b36b6577cbf3fc9bd1633c | Bin 0 -> 302 bytes .../55c207dffcff0143f73f6fd0526d624bb6283417 | Bin 0 -> 21 bytes .../5604a5399297f425deb9e6ef888f9afab4d3425b | Bin 0 -> 59 bytes .../56257125f7be8441b86bf709042966d4a7e7fbca | Bin 0 -> 2002 bytes .../56541cb263269e274c6e691f6ce969a6dddc0326 | Bin 0 -> 1234 bytes .../56931e1ce95c4e9f642eb18f61d73aef7b950326 | Bin 0 -> 6 bytes .../56ca3b36ad53bdac1de0b8e0b61a00afa6f2f9da | Bin 0 -> 276 bytes .../56d3535c6dee61c964998bd6b99bf849cd33973f | Bin 0 -> 4275 bytes .../56e6b965d2955b3066c53044f614b1f182404359 | Bin 0 -> 79 bytes .../56e888ae9db53f2bcba04c4be287530733771bdf | Bin 0 -> 3 bytes .../570ed7707949ec51856ad54514bc7de472a55e9f | Bin 0 -> 284 bytes .../570f7bae960dd16e1d4941c98493eb5cdd1f7083 | Bin 0 -> 4376 bytes .../5729733ee810b86380e596482213cc44752e4797 | Bin 0 -> 430 bytes .../572e94ac0728672e626504060f362881867ac794 | Bin 0 -> 26 bytes .../573bf5b58332a60c9774262f7619c2e61248881d | Bin 0 -> 12 bytes .../574d8800f696a16cc19206fa592352a4d6e75cb9 | Bin 0 -> 2581 bytes .../575eb716b2210ffb37c0bbf8cea76f2eeb6fc1c9 | Bin 0 -> 1402 bytes .../57831e1b76ade25c2a00f4171ba60467215e0bc3 | 1 + .../57843ca4fc8bf340f410d86b96dcbe83b81fdea9 | Bin 0 -> 19 bytes .../57935548e32c44b7d9b9a44cc1f42d9d44f1f70c | 1 + .../57c570c7d7c18581658c2300e5063d3ecb6ba303 | Bin 0 -> 4464 bytes .../57c8036be9ef79254f38405a584efa9e82638ca8 | Bin 0 -> 662 bytes .../57c8e58fdfa8e08de5cc41935d47e006b73529cf | Bin 0 -> 64 bytes .../57f348adbb25e99a2a2b21187be4effe9e36612e | Bin 0 -> 508 bytes .../57f99d6110205bbd284f5601601a72379a069ba3 | Bin 0 -> 1472 bytes .../580f25d393c1f85a458fa601d3319deed2ba4536 | Bin 0 -> 76 bytes .../5815cf152ac9e23599c29b357bdaf51a34eb3dec | Bin 0 -> 380 bytes .../5824874a40e42a8d9e6ee56c253d4b6057484e0c | Bin 0 -> 6 bytes .../58264053757f8acc7d7664be70c35f0a0f320211 | Bin 0 -> 1107 bytes .../586e82054445c082dbc4f58b461a92a5add79ddf | Bin 0 -> 144 bytes .../588b4873f9403ef4c080d9be3fb55e557f234657 | Bin 0 -> 2670 bytes .../5891d9bd854e94b73897a3c9b59d20881938a060 | Bin 0 -> 2508 bytes .../58c3534a7ec42a4c4fe9014dc04c080bf1ad7205 | Bin 0 -> 1268 bytes .../58cc52aa820845031923f290462420b9e9064ca9 | Bin 0 -> 1868 bytes .../58e326d69b45ecb51fa44488304d145cc8e29d1b | Bin 0 -> 90 bytes .../591b887407612c85f9f26772f9414dbf0c375eab | Bin 0 -> 401 bytes .../592203690ac8e57c438fcf8e822548087fe08e09 | Bin 0 -> 350 bytes .../592e6792fb5279a7de54939e69553e9ca4d486fd | Bin 0 -> 38 bytes .../593aba59b994ac20a82da4734df4e0bb87483d65 | Bin 0 -> 330 bytes .../594460ed92fee2b836d5bbd550b7f85641504a82 | Bin 0 -> 10 bytes .../595e7d328ad47d8dbc038bf544a2ea92018353d3 | Bin 0 -> 1492 bytes .../59726fd1515107a47b64eade45cf9dbd2dc8619b | Bin 0 -> 48 bytes .../597294f97b46322640a27f838eccea4d10f28806 | Bin 0 -> 129 bytes .../598497b070860fd6b3dbd83a3c57403b01f4691f | Bin 0 -> 8 bytes .../598558c8c2ce9312b1ef1d5125d5ba165e49a888 | Bin 0 -> 12 bytes .../598672161574d9e3a805a3e9dcda09c7ccb4479d | Bin 0 -> 7710 bytes .../599915c42195ef64d3858cc3ae0564d28df1da7c | 1 + .../59c6bc49b218a70cf00d473a1e3ba98238e390ee | Bin 0 -> 300 bytes .../59c819f335e7ffb61c423aa7ea1107cfa9c7efed | Bin 0 -> 82 bytes .../5a20991fc6c2329901f2a274965aed43f14783ad | Bin 0 -> 2759 bytes .../5a2d810223d3cbd6794e48f5f131d53316c0b114 | Bin 0 -> 52 bytes .../5a35b27062ec9eeebcc417591f1cb71d8ac284e2 | 1 + .../5a6dd06008fa3ab025ce805096e1ba7838b7f046 | Bin 0 -> 36 bytes .../5a6fe02237986049540b48e21403a3e3e09b77df | Bin 0 -> 1139 bytes .../5a73fcc8e2c9b399a948d042180cbab507926839 | Bin 0 -> 1500 bytes .../5a7c149a6b785ca4a56c54912837dbd650176533 | Bin 0 -> 44 bytes .../5a81605eafb24a7ea792c2a7f71c490c7afdff2c | Bin 0 -> 361 bytes .../5a852014eb675e1c384b4dc991fae59234e75faa | Bin 0 -> 10571 bytes .../5a8531047581852013917a802024c9196b384195 | Bin 0 -> 39 bytes .../5a89a82efdb68999eb96c2752b84695150a8b106 | Bin 0 -> 7 bytes .../5a89e729524bb2b080f90a9169f72359358bfe4a | Bin 0 -> 129 bytes .../5aaab58b4acf0c6cc62e7b4cf85d8cab02de4e97 | 1 + .../5aae243bcf48fbd303f3d531598f0100a84e3f24 | Bin 0 -> 21984 bytes .../5ac203e8c34dd36313c19f4c3bbcf9014780f1b6 | Bin 0 -> 129 bytes .../5acd8c7afe1dfb136366495b3ef8ea1130d1374e | Bin 0 -> 28 bytes .../5adfb6f3b3ebcf1494ac7efbc1dd204578c92be0 | Bin 0 -> 27 bytes .../5ae0e12ed628a554c49e48b6cd115a35444db126 | Bin 0 -> 80 bytes .../5aea7cef4a870a4907ead20bf12b34ab9c87bb1a | Bin 0 -> 92 bytes .../5b1cc3b96fa024694e8c8230b81c7b9a0069d878 | Bin 0 -> 815 bytes .../5b25541525ffbe6016afe8a87418983eaf3aa9d4 | Bin 0 -> 144 bytes .../5b4fdc0259bbbfb99087e0e903b737d406ec8b8a | Bin 0 -> 14417 bytes .../5b8981dc982e5d05187aa9807a843d90cc19fc4f | Bin 0 -> 10 bytes .../5bc22bdffd68784dbec8ae725c941da234b8652f | Bin 0 -> 283 bytes .../5bc27e31d11e18162c0e1c3b8b48b6a7d44866b1 | Bin 0 -> 3373 bytes .../5bd1b5cd81464686fab0d155a713ea09fa1a2b06 | Bin 0 -> 23 bytes .../5bd3ccb4ab9afef8a7bc994fdf6a1886bb692a09 | Bin 0 -> 1558 bytes .../5c6eb2716b1b78ae59e82a11f850ad7933afb4a5 | Bin 0 -> 1531 bytes .../5c7af925313309a1eac1b96f74873d67f17dcfc2 | Bin 0 -> 20 bytes .../5cdf55a54ceb8bf0f11619c90ecf6680c5c74946 | Bin 0 -> 39 bytes .../5cf973d0e7bec4dbcbc9a41d0862d43dfe6ec8a1 | Bin 0 -> 4336 bytes .../5d2b308e1998958059da429d7b907c90ebea95c2 | Bin 0 -> 1025 bytes .../5d4baf832a3ccea02f3e5af1acbe87e9084ddaa7 | 1 + .../5d53a4fea3de83ce49510986e827fbaf3371a29d | Bin 0 -> 7780 bytes .../5db7235ce1f88844a66ff29cd3ca7602e4d73b6f | Bin 0 -> 230 bytes .../5dffa11a3a8b20f8201da53e9b47ffbb267c1173 | Bin 0 -> 5014 bytes .../5e0678aa0d033be9c70d02dbda44a230f993d8b2 | Bin 0 -> 4029 bytes .../5e3ba5cc20ec04c3cd176945d091419f035f157d | Bin 0 -> 2844 bytes .../5e74882ac0016013fa54eade85e142769f091195 | Bin 0 -> 26 bytes .../5e847537a53846ba81b50426aeacca2cd42c330b | 1 + .../5e91b5571f8a37f32a0c7bcb12b95b4faaf9eb8a | Bin 0 -> 51 bytes .../5eb1071a2eb800d7ac58e2295c2014c62828ca51 | Bin 0 -> 1185 bytes .../5f36c36219eb8dae41df713995f9dac23fb8d98d | Bin 0 -> 28 bytes .../5f56c19c731496ed17fea7ade30263091c6ef785 | 1 + .../5fad365b910db6ccd2050213183ec9d0080f5d9c | Bin 0 -> 5160 bytes .../5ffbfdf6c316b902faeff8653573b7b2d989b38f | Bin 0 -> 35 bytes .../60073f5713194b8b4bf5b557338f69f76921f727 | Bin 0 -> 569 bytes .../6008e35ae7117e9c5dd84c04e9ee9953772cc81b | Bin 0 -> 254 bytes .../600d6bf8908dc534cc14554acd8485a150ebf0f3 | Bin 0 -> 106 bytes .../60135fd7e7e22ea25842ade5ccafe5eec15b6dd1 | 1 + .../6014fcc5a4f5b4ded2b737405398ec43d17c2121 | Bin 0 -> 23 bytes .../6033820eb82b9f4d50e3cf57c6740294bb99d248 | Bin 0 -> 662 bytes .../6059aca5d1eaa658af00cc0b16c5aab586261d94 | Bin 0 -> 760 bytes .../605f076cb179c768f5a0043ee678fab33a356e1c | Bin 0 -> 1040 bytes .../607960168a4d6332b2232d2cedfd06bdb05b1638 | 1 + .../60b1250b2e65f331c0fce71eda1a9372f89381c8 | Bin 0 -> 14 bytes .../60c911ccd2372e3cc3a9b6740b1a9bb9fc368d12 | Bin 0 -> 243 bytes .../60d8e7676d30e3c149c9db71e3dafef32dfc8e9f | Bin 0 -> 20 bytes .../60defde001e07e94d13f4147f9cd9ee9c520ba35 | Bin 0 -> 1440 bytes .../611cd8e2378779160742b64f349320cd1772d53c | Bin 0 -> 302 bytes .../6131b64d6d8b53cb61d2b70cf1107c180ca4de98 | Bin 0 -> 816 bytes .../615a230d39da4cb767a99c0ab709e2fd42603f37 | Bin 0 -> 44 bytes .../616dbe87f09b01cc6b86f7173d81f70b5acd2af9 | Bin 0 -> 4999 bytes .../61af51b5febfbebdd959f76357db7481d418ba30 | 1 + .../61b4b3c736d9aa64c4cf36dd011a593aaa778b5b | Bin 0 -> 26 bytes .../61c0db8528d6d95dde4ab433a0cceee6e513d203 | Bin 0 -> 1120 bytes .../61cc8eea8b2425292d034dc3de0270b985241d1a | Bin 0 -> 26 bytes .../61e2b466a0d6d416b902a4aab9d39a554685a05d | Bin 0 -> 55 bytes .../61e4b4247bb81e964b58fe31d959f53e8f77d848 | Bin 0 -> 28 bytes .../62366b1b6bfbde67f6023bc94dd03ac709143b4e | Bin 0 -> 7 bytes .../623c1f585b6ed169377f23e446a8a9105dcf93fd | Bin 0 -> 27 bytes .../623ff2b70f08d0be1d4c41fc0e43d0154f3cfdff | Bin 0 -> 4704 bytes .../62439f3a4ecafdb281b9fcbfeda62bcb70d11b1e | Bin 0 -> 2 bytes .../627c6e3c1f97db4cfaf45be1e21a133cd6609b46 | Bin 0 -> 19 bytes .../628b054a2ebc636359163d40287a76f4b6cd7008 | Bin 0 -> 6720 bytes .../629e61f33fcda2830586cf259d019ab2da6fb697 | Bin 0 -> 149 bytes .../62b8ea9f9cdf39d8e2a956a994f71cea7e40584f | Bin 0 -> 262 bytes .../62bafe37a7f1323dba538155e70edb9f8234b359 | Bin 0 -> 172 bytes .../62cba095dd3b8b6f87014a21eef6302dcee72f0a | Bin 0 -> 7 bytes .../62d76d2a2be15ca038a485d117bccbb48f7392e1 | Bin 0 -> 615 bytes .../62fe217dd3b36680f180d1938dadd5b6f884d362 | Bin 0 -> 180 bytes .../630d0b35ecf3367585596ebc5e81b35caf8f125d | Bin 0 -> 4 bytes .../632ca49ab1db054e9e4e135f0f61a12c16523ddc | Bin 0 -> 80 bytes .../637b3e47edfff5a478c49542fb80d6f75202d357 | Bin 0 -> 7 bytes .../637d12cb90cb23c929cd4ae084d8b8bc9f5aa36c | 1 + .../63b87e03a4273b7e38032f544c5ba09a5367e023 | Bin 0 -> 37 bytes .../63c3326b813ea619350ffa66718a0c16d51a8122 | Bin 0 -> 370 bytes .../63e4cff3a0f22c306965ed202e330a5e13680e35 | 1 + .../64225c96f3b11185c9efe4185c5507aceadf1944 | Bin 0 -> 28 bytes .../647d2331fef20593fa67c2e18ffd56a121f76442 | Bin 0 -> 4192 bytes .../648fdfe8c124e697c7c4500db5ba9c29e9a0476e | 1 + .../64a652943a1c76cf6cb5661c49823970b036e713 | Bin 0 -> 170 bytes .../64beaff7b7751e1c2efdf5378cfbf70d70bad025 | Bin 0 -> 523 bytes .../64df7f79dd70a6653c1f8c132dc7938f5e5844a0 | Bin 0 -> 132 bytes .../64e159659bb9706cb25017d10b068de13d30c6ca | Bin 0 -> 151 bytes .../652a56b1428f40bc8c0fc761c3cf3297ede1312d | 1 + .../653e4e7a61bd8b656d1bc97cce3c9ca70d97b093 | Bin 0 -> 66 bytes .../65978fc56a35a5242943434de1c8268ed664854e | 1 + .../65b0315d0ac5a89949eb3c7ef39a635e17dfd249 | Bin 0 -> 208 bytes .../65b9b72f1a8ab2f478a3b41a59c141eb50f367d3 | 1 + .../65eb7067aa9e4c1db6dcc46553d9f71375dc687d | Bin 0 -> 302 bytes .../65f6a84853d98d3aa000793bb7d53b5eaee0c1a7 | Bin 0 -> 1284 bytes .../661951c23228ee4b2db3ef39c59a7dc48a6df473 | Bin 0 -> 88 bytes .../665d0461ba65a86e5975a425b65b386c8237f883 | Bin 0 -> 1080 bytes .../6669112ec925af24e11a7e3831a2d3156831f01d | Bin 0 -> 9840 bytes .../666a48d51768fb040c9567ad6b290db32f541924 | Bin 0 -> 616 bytes .../666f5052d9898a43d4e67c344d6f8fd0110f7c52 | Bin 0 -> 60 bytes .../667c9f41b4ecec590bacefa67b4ce84f24c345ac | Bin 0 -> 898 bytes .../6681a37790c0a3593767fead0faf7e09d19f2849 | Bin 0 -> 1844 bytes .../668ca20c0195624c2a02e6a4b538eb4fb8471dbb | 1 + .../66aa1908dc1be4f9ab9fd70f101ab9724dfcbc74 | Bin 0 -> 18 bytes .../66c492c3ff17c0be116dd9e00f3f81be51934f0b | Bin 0 -> 66 bytes .../66e026df62681bb9036c23c87c4b6fbbce14e913 | Bin 0 -> 52 bytes .../6763194ab887e06076785d692c281811e1893f66 | Bin 0 -> 56 bytes .../676c0b51dfb74e64cd206ec2f7613c01dd93fe75 | 1 + .../6780e0ae8dd3d209829c62b740c0b57875a4450c | Bin 0 -> 18 bytes .../6795a14fdf8a2bfc0a2bcaa0dc8e75d343c175ce | Bin 0 -> 20 bytes .../67bfa42b7ab4daab7f610778a3e32d9e359d4827 | Bin 0 -> 29 bytes .../67e574f034d168969baf8c3d19d830743ef775ef | 1 + .../67e7d79e766934701220965b8637fe8477a70a8f | Bin 0 -> 1152 bytes .../67f60131a8feae64c16324b3e345a591e144ad8e | Bin 0 -> 31 bytes .../6806416c9329b50e72c1565b2a557b53b84d1f00 | Bin 0 -> 28 bytes .../68079829995549fc91e8967ed6e1a38f87e8d1eb | Bin 0 -> 4 bytes .../6824e1ff1f5078eb9f315297e1644ea65aac0914 | Bin 0 -> 433 bytes .../682b367ae8a2e186d1b4f33b777d1f2630d5b479 | Bin 0 -> 1064 bytes .../684befa69cbc6735eec028d64d055c29c7ee1d58 | Bin 0 -> 108 bytes .../687882001d3ead655002ee18967f73e47258079c | Bin 0 -> 83 bytes .../688934845f22049cb14668832efa33d45013b6b9 | Bin 0 -> 2 bytes .../68915cb462638d83fc0da9045cbb65946934017a | Bin 0 -> 20 bytes .../68b9d71ead4a7896f5d23b65249a4ece3ca0415c | Bin 0 -> 52 bytes .../68c810c70612273f02abe5ebda45da473876997b | Bin 0 -> 43 bytes .../68f8cfc45e5d629468d2ad29bb291a2cab7032cb | Bin 0 -> 528 bytes .../691ad103865cc0eb66859bdbe4f4f94af2e52d0d | Bin 0 -> 940 bytes .../69481fe8d59a86204cc686095414779d646b2237 | Bin 0 -> 62 bytes .../696b0688cb0feb9edb4d24f4b964db6de5c46211 | Bin 0 -> 1156 bytes .../69770198d13ebc570ad20f246bd5a99e2b2fcc9b | Bin 0 -> 360 bytes .../698b217f0cac24984aa72489d1ec4a84bcde4e24 | Bin 0 -> 87 bytes .../69b69b8aeac3d6cd22143fde46c1fa51c5957b08 | Bin 0 -> 1689 bytes .../69bfeef0c1be8d9af6eb3f0acf45fd39b51b2670 | Bin 0 -> 312 bytes .../69d0d64a98c2f955df1cfe211ab143fd990e9db7 | Bin 0 -> 169 bytes .../69d585d7eb7cf1a672addfa48d8c4d859feb891a | Bin 0 -> 124 bytes .../69f599b39c7d212a6b038f9180345436b394c1aa | Bin 0 -> 364 bytes .../69f8a1e62ab6a4c5c1756f8077fee0a8c6d219a2 | Bin 0 -> 19 bytes .../6a06aa5739fb44512672d44a6184e38b7891bf68 | Bin 0 -> 18 bytes .../6a1d627ac654ba1d06ea3f99cab5e534df50f0c3 | Bin 0 -> 350 bytes .../6a2b1eac9bb2fd660c2dd0a7b7c7d82660326230 | Bin 0 -> 86 bytes .../6a40822dcdf0b3102691c00dcd8087492b19b385 | 1 + .../6a6b12e0cabf3d2af2747b77c812eb9e50cd270f | Bin 0 -> 353 bytes .../6a6bc702bc4375a3897c2ab5ac6ac46b97b74490 | Bin 0 -> 5744 bytes .../6a85cf72ce5d424b88f44f1a11ff837242d39bf5 | Bin 0 -> 300 bytes .../6a8fb2f00083248a24d7544d9c96003bde8a1ccb | 1 + .../6a947f987d47d24c17b06e7e143e98cfa9a38d0b | Bin 0 -> 28 bytes .../6aba85c6d48e27882cbb5ee3d5b2f9a3fcf17b72 | Bin 0 -> 1644 bytes .../6aced155f70527b9f2db8bf4426f28aaa386bc90 | Bin 0 -> 50 bytes .../6af299b8857642fb3fee12c02e52b1f3675b504e | Bin 0 -> 80 bytes .../6afb812cafbdcb22d545e1c61f9a6161e6f12ef4 | Bin 0 -> 176 bytes .../6b0c37ab6b8781bebaab5ff10b91b2ce180b5043 | Bin 0 -> 33 bytes .../6b5783ea73c66cb48aea71da56b4947acec3ebc3 | Bin 0 -> 5484 bytes .../6b592e125891747df5215531b69b38afa6965110 | Bin 0 -> 403 bytes .../6b5d2a2da83ba893565f3e9ad996caaa92c5c829 | Bin 0 -> 117 bytes .../6b72c9ab07118eaa2a70b494c1e20d8009d4ebb1 | Bin 0 -> 1185 bytes .../6b800002da0dcac0ab1c8befee5d44be547980e0 | Bin 0 -> 4 bytes .../6b8d6fae12fb38e4f043081952343471ecd222c0 | 1 + .../6b91749ecea9f52797d5d7575432f93da98ed9b6 | Bin 0 -> 2 bytes .../6bc1d0a29017f7f7f7dd6f7e894b1e5503727990 | Bin 0 -> 29 bytes .../6bf46814bd147c19af282b06aa5d4c494f7fb5cf | 1 + .../6bf56d1beffac2c00e12c06b189353a998174a3a | Bin 0 -> 69 bytes .../6bfc3324468212f2862e6e163c5d2c55428ff186 | Bin 0 -> 38 bytes .../6c0e3aa5ef05341aa40d94f1e805bece1eb87e2a | Bin 0 -> 23 bytes .../6c0f744bf69ba76ce9230d20a7961dca09ebae16 | Bin 0 -> 168 bytes .../6c1770faf480be7a1d5a4f35b9e9b73f58643ade | Bin 0 -> 448 bytes .../6c1a3285fe9de34f7aea5ed8c382a521cf1160f0 | Bin 0 -> 3738 bytes .../6c3320263f2edb475cd715eba054a3a9838c5ed0 | Bin 0 -> 17 bytes .../6c357e26a753827c3ab18d5bd12f9bda85f2bcab | Bin 0 -> 48 bytes .../6c4a22bf37d4b458ca564e2e219cb2d4e6a858a9 | Bin 0 -> 84 bytes .../6c4b9a81fa9d25312fec6d38868ab17e5aef0913 | Bin 0 -> 83 bytes .../6c5f6735b10019aa7f1a4b0492d7c45d87e2dd4c | Bin 0 -> 98 bytes .../6c645f0aa5e178b3f571ef03dbe519a938edcaec | Bin 0 -> 4 bytes .../6c7e7b6aa7518eb727c8616d389fa069c901b064 | Bin 0 -> 1524 bytes .../6c86a5dc2d69684fc79ef1d6dca13ac342c0204a | Bin 0 -> 18 bytes .../6c9df011fb99c6b88b532e38e1de2da35a5d5cc8 | Bin 0 -> 17 bytes .../6cacc79a17083bddb0a722f33255fded78dbe5e0 | Bin 0 -> 196 bytes .../6cb42f17aaa23d38cac9a41fb6d5c507d0be0876 | Bin 0 -> 88 bytes .../6cc6e623d2681e3e40169061f65286bae4e54489 | Bin 0 -> 26 bytes .../6cd40193245eb449a8350a57769376474b4350eb | Bin 0 -> 14 bytes .../6cdff5afcb88f735cbfc095701da75ed64ba1c03 | Bin 0 -> 1084 bytes .../6ce74a3fd1e8f9491bac788ee2cfb10cb83dcac4 | Bin 0 -> 6072 bytes .../6d0f0011e1d0a6046db2b3062a91f8f97b6f18a9 | Bin 0 -> 129 bytes .../6d183eae9e00d40916aba4677aab6122ba8f8caf | Bin 0 -> 2918 bytes .../6d219f7c5025e8fc8d0820d113bc7c0b83efdb1e | Bin 0 -> 300 bytes .../6d29e2450e433020d609fcd195393444fc7ff60b | Bin 0 -> 255 bytes .../6d4a04af3813c77d9a5c0a68ec1010f1b35138d0 | Bin 0 -> 60 bytes .../6d696af6b7a5d73f1fbf41a4451a25efa4a8905f | Bin 0 -> 201 bytes .../6d70092ccbbe1809e5b0b42cb24eaa581ecdd6cb | Bin 0 -> 160 bytes .../6d78e59433c6b1f8e54425003eabb4035369101f | Bin 0 -> 175 bytes .../6e163ae1147e866ca6496218d77d52424cbd58e4 | Bin 0 -> 64 bytes .../6e16e9e90bfb89ed897b583fa6b32d2acecd33a2 | Bin 0 -> 86 bytes .../6e33f4ee9d34b6ac5d1b07e07267b733ba1f89ac | Bin 0 -> 11833 bytes .../6e3d9b6b9330c920437cc60424960e0a755a3d3a | Bin 0 -> 17 bytes .../6e72dd3a5f68536ea87da4c6de9457cd7d237d94 | Bin 0 -> 251 bytes .../6e9d9f5a1f1b613997fb3010c9a34dfeb352264c | Bin 0 -> 202 bytes .../6e9f4d2c254dcabbb78df78e31705149e20c5de3 | 2 + .../6eae924cf5e94ce0d685557eb123490aae4d3fde | Bin 0 -> 18 bytes .../6eae9a2c53d85def79dcaedfee865d01038ef2a2 | Bin 0 -> 316 bytes .../6f18c702381cb49d74f253ff5a549a9bb354561a | Bin 0 -> 422 bytes .../6f55fc65a43b0492c448ffe329fc8ff2e09ad13f | Bin 0 -> 4434 bytes .../6f943b17e6946970f39a1c0abcc99fb8b4b92d6d | Bin 0 -> 640 bytes .../6fa6885ed33befc0140d8bd024e5f25afc97cb31 | Bin 0 -> 3196 bytes .../6fc2672379da6851d8288c43f3be93ff8f483c90 | Bin 0 -> 87 bytes .../6ff99ca7c76ee3f0d25600223dc59bc262394fe5 | Bin 0 -> 208 bytes .../700cb0be3d9858302bf79f8d628becc433dd7850 | Bin 0 -> 436 bytes .../700ce88de4db9437d9736f6808a5ebf005ff51ca | Bin 0 -> 47 bytes .../70185e1ffce416c93d060365eeaaea0ce62bbe48 | Bin 0 -> 18 bytes .../702ae3810cee286d2e76e44224b25d23961cb48f | 1 + .../7061bf8cfe63354fe4bb84d6c3c2e013d5810068 | Bin 0 -> 20 bytes .../707fe4a0fb211a12cc0d2fa43dca2c03e198e18e | Bin 0 -> 179 bytes .../7096c8436ebe8ed03bb3dac27bc3a997ea650ba6 | Bin 0 -> 663 bytes .../70978313c9b398b4debcf40dad5d1480d1efb629 | Bin 0 -> 13 bytes .../70fba82f604beff2a42873db628ac0840cc295b1 | Bin 0 -> 594 bytes .../713ad7f57336df056e1c5c2f23bdaa6a1558acf9 | Bin 0 -> 171 bytes .../717bddfb84cd8a248ab859bcc6e2d9ff02e82822 | Bin 0 -> 6 bytes .../7182030ced2deacf3791067f81b911f799205514 | Bin 0 -> 52 bytes .../718f955139861fefc62329aef65ea2563edb1bb6 | Bin 0 -> 590 bytes .../71afcaf2b31c1f4e344cb21fc9bc9f26f7a5981f | Bin 0 -> 5375 bytes .../71b59cda146cdfec77ada33abfde611e64cf0eb2 | Bin 0 -> 19 bytes .../71cc74b3049695be0b0f78945fafde1de1d6a74c | Bin 0 -> 20 bytes .../71e9a4eade61ae0af07c98e5abb54e215361056c | Bin 0 -> 204 bytes .../71eba76e08d828ba7b9ef10d05b2cece50ae9ef9 | Bin 0 -> 251 bytes .../7204a9cae0682105cbe75689a0ae61345544cb37 | Bin 0 -> 43 bytes .../7215c85a7b88d609f33a4be24b57191313d0d27d | Bin 0 -> 386 bytes .../7217cde3dc7fe19260c8de989663697717862fb4 | 1 + .../721ce9eef7337a65d2704811f85147e5da34674f | Bin 0 -> 49 bytes .../725fabedb87514796273f2fbe2157bdbd347015a | Bin 0 -> 429 bytes .../72607a13d79db9062df3fb083a5fc6abf866b003 | Bin 0 -> 396 bytes .../729270f0930e3276da8024a8da94d278af121b51 | Bin 0 -> 1622 bytes .../72b864bf64f4cc084dabf89625b82d125724733d | Bin 0 -> 137 bytes .../72c43e719f76311adc55a4161e17b1c3af9c80ba | Bin 0 -> 1180 bytes .../72c91274b7f7ded6d12e52d75869ac339adced1e | Bin 0 -> 39 bytes .../72ffc4fededf4096482e65b293c6347ddb42a031 | Bin 0 -> 87 bytes .../731a9e10d808d92a4a922d0942529cb9510eadab | Bin 0 -> 584 bytes .../73482f247d0f0f25ebb7e88d976e0081a968875c | Bin 0 -> 524 bytes .../73a3ffa8016c5bac43dbf115c758976a2b31d03e | Bin 0 -> 71 bytes .../73bfa72f1963e8b189c0dcb437ee0489307009e3 | Bin 0 -> 551 bytes .../73c01cc77e5a022cdda047d43f3ddfcc5b863037 | Bin 0 -> 28 bytes .../74084450f19dda6628e62375bdfd73da94d5a7ca | Bin 0 -> 1292 bytes .../745471fa1ecae68d75dd4b3e42a99ab0e29a1da4 | Bin 0 -> 2810 bytes .../745adbbe8c1b837a073cde881ec7d01b6afc7a9c | Bin 0 -> 61 bytes .../745ca9526a0f975b8be2109a7dad85a3e46ce668 | Bin 0 -> 116 bytes .../748baf827bfafd1465ba2990646c92595a87a628 | Bin 0 -> 3916 bytes .../748f4c2c18b9948761927862a67b8fb62167da75 | Bin 0 -> 7 bytes .../74a433285081617832150fa8dcce39b56e862f14 | Bin 0 -> 26 bytes .../74ab0b5403b3aed3c9be05e4a2aebaee30306ca8 | Bin 0 -> 3561 bytes .../74b5bfd90dbda122bafb8af867e51cda5d53821d | Bin 0 -> 172 bytes .../74dc47ff5be05862f4b8cfd7a61cf2f86611e1ef | Bin 0 -> 699 bytes .../74f5dbed26b1a337a8bb237732607e97c20a02f1 | Bin 0 -> 88 bytes .../75052903d81721a67e4885de260df7d323904f7a | Bin 0 -> 100 bytes .../75279dff0b4255bc88dab0cca431e5bb26276515 | Bin 0 -> 236 bytes .../756fc8353f2bfd92cd17b7d2349b9c29d82b4176 | Bin 0 -> 302 bytes .../7578bf871b81f3b9be9d8df014f9fec68e002ad4 | Bin 0 -> 728 bytes .../75877fac394682ab3d97407578a1008c34aa0ccb | Bin 0 -> 8874 bytes .../75961a241ae4a930672d0abbbb7ff4c9eabe0dad | Bin 0 -> 170 bytes .../75c5a3fba163276375654270604e56884405884e | Bin 0 -> 148 bytes .../760ad313794315cad3943d501bb5436740c369e1 | Bin 0 -> 150 bytes .../7616befafb80efb99bdc0bdab7c4f57d44eadc8d | Bin 0 -> 60 bytes .../766db02ba389f8c75fde2950c87700ccd5f75875 | Bin 0 -> 76 bytes .../76c5830bc2df30cffab01dab3e96915a5088cf64 | Bin 0 -> 176 bytes .../76cadcb90db3b785216c80def6ab858a04f9469e | Bin 0 -> 56 bytes .../76e606a43322c716ecb0a44516e7629b8a6408f5 | Bin 0 -> 378 bytes .../76e950d005d790f90964a0b54adfae7ca9b9c026 | Bin 0 -> 52 bytes .../76f5fbbe0340445a16ed71b8b3f1d2af6393d50b | Bin 0 -> 4 bytes .../76f6df883dcfece1cd50ba7c0067695ed6b8bb8d | Bin 0 -> 10 bytes .../76fc688d70e434ee7238645338b4bdae3c6b84db | Bin 0 -> 90 bytes .../772fbfc2323b080ea649a257e45457c746fff381 | Bin 0 -> 42 bytes .../7792a53d83bcfb633a0bd16ad7341a601cca6e07 | Bin 0 -> 64 bytes .../77cacd0d7a359f0ba6028e693e97baa20cc9d9d2 | 1 + .../77f0678521b50fb499634743fb801553fd24c42c | Bin 0 -> 52 bytes .../780964f424a71ec151f54091454241354d2f7a23 | Bin 0 -> 1591 bytes .../7816004855919afe57680dc5e2d153aa98b5289c | Bin 0 -> 106 bytes .../78184ce81c3e8de5abdd326b7a62d4a3abd87237 | Bin 0 -> 4 bytes .../781aed792536f0846dacb21a350e181dd0a0f726 | Bin 0 -> 140 bytes .../787abdec1c5548f3e41b89e88b38c68a2e41d1ac | Bin 0 -> 814 bytes .../787db4cdc8eb7793d5a4b64de0f2c9e170abd52d | Bin 0 -> 17 bytes .../78918bdb1f7d7e576f35b568aee9b0f8f939c9b6 | Bin 0 -> 169 bytes .../789e9338d0a6adffe36f391bef7158dc67b18ff7 | Bin 0 -> 60 bytes .../78b471c4921e10467c8f6dcc9c471267a40108d9 | Bin 0 -> 12945 bytes .../78e1631b7c1be73e2ce1baaa4b1504fcd0631ba8 | Bin 0 -> 552 bytes .../7922215bbfd5d32218523bda1ad0c34cd3bfa3cd | Bin 0 -> 63 bytes .../793b4e0a688ab815fb78b5e3636c5d0f04d5adc9 | Bin 0 -> 1034 bytes .../793b7829471cd5c5746538c45a66c5b397025a12 | Bin 0 -> 85 bytes .../79422438fdd3111c7f4d1094929008f59cf6189d | Bin 0 -> 282 bytes .../796385a1f29e01d74508c86024a45936126ace90 | Bin 0 -> 8678 bytes .../79a052eff0e47613128bb4a2c947f6cad4bef9b8 | Bin 0 -> 90 bytes .../79b8e0885e63273a0a4cde704bfc4577286abb6b | Bin 0 -> 1887 bytes .../79d46affb01bf3b12cf779967f22a2eff1d58bee | Bin 0 -> 17268 bytes .../79da419a2d8cb46b23ee0e5bd2f5d2af2c87a39e | 1 + .../7a1092a53e4c7ce58c6baf69dfd0280c1f6690cc | Bin 0 -> 46 bytes .../7a242a3075bdc2a0cf26ca6d082387000e8bc8df | Bin 0 -> 1672 bytes .../7a25ee73e091a4ed95aeb1783ff552e216b87863 | Bin 0 -> 116 bytes .../7a2d84979d5923f61d8f447e19490ddba9aa9ed5 | 1 + .../7a30569d9dc533fb90cbd69e1a995995bc1da3be | Bin 0 -> 85 bytes .../7a5c383ffce6ffb2e4258940421258f06dc5f93b | Bin 0 -> 957 bytes .../7abe417b5455328272d91955d385587f3f9376f3 | Bin 0 -> 1686 bytes .../7aed078e4ecc4819ecfed2309b711c5ee26fbb24 | Bin 0 -> 694 bytes .../7afd6f57987bd4d242c8abc5f5a9c453123ca84f | Bin 0 -> 19 bytes .../7b2636347ba98e03a0348add812b883cee2a5980 | Bin 0 -> 35 bytes .../7b395d6af6f70c3833a28be33f54e3c158250b44 | Bin 0 -> 11403 bytes .../7b5c9bfaddadd872013077644b12deb65d83a830 | Bin 0 -> 621 bytes .../7b64b6e3e3ebc4e7d5ac0bc84afecd3cba4285c8 | Bin 0 -> 26 bytes .../7b83df2766eda2b22024f3e32f72e9bd8e9bc76b | Bin 0 -> 11360 bytes .../7b8eceb60e74b0fdfca87f931c32677ac67e5566 | Bin 0 -> 20 bytes .../7b8edcfa95396def10480ee0a8b68a5d6fb1bb12 | Bin 0 -> 41 bytes .../7b99d1c075ae858f5c0f4670e86e6074f06595d8 | Bin 0 -> 86 bytes .../7bb3f846ef26ecc6dce6e81cad0f5ee363196bf2 | Bin 0 -> 29 bytes .../7bcef44300c607fa9325c19d6a9d3d68b230901f | Bin 0 -> 28 bytes .../7bd037147730420894753f5dd71554c001e050f8 | Bin 0 -> 88 bytes .../7bdd4dcb057c6d232187ed6c47222d9cc597e404 | Bin 0 -> 1468 bytes .../7c6243517a6c2ec0cccba743d371d723952d821d | Bin 0 -> 1144 bytes .../7c7fa79a6e819ef13794c30dc6bc696ff0162134 | Bin 0 -> 145 bytes .../7c8a5d16af17672545cf506dde2fa4397f0f2576 | Bin 0 -> 406 bytes .../7ccc0b863c59d29e9ca84382651efe706d6e10b0 | Bin 0 -> 48 bytes .../7cd95c6f2e93389489f541b620986c90680d3876 | Bin 0 -> 46 bytes .../7cdeea602567a5169d281bd4bef47a1bf3fdff63 | Bin 0 -> 4283 bytes .../7cee2f0f8ce8428568161f47cdafd509ecf36ab8 | 1 + .../7d06dc8cbbeb99b5329023f0358794d62565ea8b | Bin 0 -> 26 bytes .../7d0daa42d7c1767ad99825043324206c93e507b5 | Bin 0 -> 2688 bytes .../7d46da73914f5d2cc6c25de1b0f6ba6f02e4dfcc | Bin 0 -> 144 bytes .../7d54d6caeef9817e1f96ea928140de07aee3269e | Bin 0 -> 62 bytes .../7d80bfad32e95c377146c2e8e5f784680d64ba35 | Bin 0 -> 238 bytes .../7d9f46990adecfe14b948c3415ed1d2eedd5fbfb | Bin 0 -> 17 bytes .../7db6d3aa3080a075a918ca73b140c5ccedfb5885 | Bin 0 -> 3249 bytes .../7db72f7b5b0fb62c38c8040885283b278269bc6d | Bin 0 -> 54 bytes .../7dbc9283ab3e8aef068b1630f56c28949d1b0b94 | Bin 0 -> 10 bytes .../7de00560d1e606347a023428df17739d11129008 | Bin 0 -> 18 bytes .../7dee8b794a0662cf366f19b0e3b12e1fe06cd362 | Bin 0 -> 28 bytes .../7e1149246dad142957ad926d46b5a32ef45daef2 | Bin 0 -> 3483 bytes .../7e350dafec22b76bf008ab9ed72f6c8e4f69eb2f | Bin 0 -> 111 bytes .../7e4062648f0c8f2d212b9ff8792210511d2f43a1 | Bin 0 -> 29 bytes .../7e6f2f60663d13bde2e696344b86374e678f0071 | Bin 0 -> 10 bytes .../7e7c6c44cdf06b35feff6d5014b738c899f24b90 | Bin 0 -> 19 bytes .../7e80193f0ace19651d165d26fb76d560ca421d8e | Bin 0 -> 907 bytes .../7f20704a285c239dd2c826c4583ac267a58ed283 | Bin 0 -> 636 bytes .../7f40127e5ef1270a27dbb5fb0dd88f560c584db8 | Bin 0 -> 1141 bytes .../7f4f7d13156977eb23b9154c1fe70aff5931ef12 | Bin 0 -> 348 bytes .../7f525611fbc6c81c2cbc078f17a690959f565a21 | Bin 0 -> 170 bytes .../7f5cef76687f67d8687f2d681240e999d43f594c | Bin 0 -> 8 bytes .../7f65ff7c6cb6a53c2168265172ecb8c2b518b5b1 | Bin 0 -> 9900 bytes .../7f9ff791c90a7e256c8b40c2ab5b815b379d56c5 | Bin 0 -> 63 bytes .../7fb780eabece39710fb90c4db15aeee952725796 | Bin 0 -> 6462 bytes .../7fcafe21ea7a87fef0aa7dd129ebbdf4d89655ae | Bin 0 -> 1952 bytes .../7fd34fe1f4ffd60f5b9080a88f5d7cd125980613 | Bin 0 -> 148 bytes .../7fd73282532a18d69fca823ba0477e046c9cd630 | Bin 0 -> 52 bytes .../7fd7cd570fea0e12de2b0a5cdc836630435e9dc1 | Bin 0 -> 741 bytes .../800e33adda13cd7e0737f0e244f206f5e1cdcbc9 | Bin 0 -> 20 bytes .../801d2b2b37124a7d85175c7aef30d8fe752be2eb | Bin 0 -> 113 bytes .../80234277da2c9c5134f2739ad233bd19748be795 | Bin 0 -> 4 bytes .../805d93fc05807b74e7df6ddade09b6b396f10c23 | Bin 0 -> 87 bytes .../806bbf0cdcdea436f90c25fcb6c81cbc23871a55 | Bin 0 -> 508 bytes .../807be7ed3b45cc9ed4607d6877701358a83595d6 | 1 + .../80dbfc881c136ab51cbadad6d30e732ac2f2ab71 | 2 + .../80ef83dc610a8e805fb2e6c21ed950fc1eb79596 | Bin 0 -> 366 bytes .../810627386329d3a2154fa63adee07d49e3bbe0ba | Bin 0 -> 6 bytes .../81065325e50271e1911972365cac23e57f817648 | Bin 0 -> 115 bytes .../8137ed258643a5b7902e758ef8f6e5e702c05b9d | Bin 0 -> 302 bytes .../816c4986625e1a02a06369fa7288959142544f9f | Bin 0 -> 5672 bytes .../816e59d500890ba1d958b23e32acd24aadc482ee | Bin 0 -> 65 bytes .../819b9dae3be148827005499f1c53954081bdf749 | Bin 0 -> 5472 bytes .../81b94731928277e4a4a2d9e4310d3afc2cba6bcb | Bin 0 -> 2464 bytes .../81bf4000ba8b5eedda84593501a89f65edd85509 | Bin 0 -> 4 bytes .../81bfb7a2dc1aafc681a92d5e93f563ddd81b1709 | Bin 0 -> 4760 bytes .../81c4bccd4a1fa9dd643a2a2623c8e9f91c32abe2 | Bin 0 -> 250 bytes .../81c60b24bbce9f145d6609c4f8361d928d24f2c6 | Bin 0 -> 18 bytes .../81ce38704873015fd29650f21e90fe1d2192608e | Bin 0 -> 703 bytes .../81d2698a2d14488deccbc8656640b50590b7aa35 | Bin 0 -> 4 bytes .../81d27e702ae9a300328b1aeaf9e3bdf689068e08 | Bin 0 -> 284 bytes .../81d642fd821aa715ac5505c7ec7b79ad794cac47 | Bin 0 -> 13 bytes .../81fe3be8f8da2f29571183951963f862608eaf57 | Bin 0 -> 84 bytes .../821e5489cb04b6aa2c02568c295845de427a618d | Bin 0 -> 108 bytes .../822869c2d9832cdcaee4d6b9bd88040a0c1cc14f | Bin 0 -> 51 bytes .../8241c7618e9696674609cf92a3d26756f191147c | 1 + .../827d0055e88de768dc5ea697e9c56aab0292a602 | Bin 0 -> 40 bytes .../8286324f9b77ef2dc2c151756cba71b416056f20 | Bin 0 -> 336 bytes .../82a1e1d8d00466ddf9fecdbed33c680e4e3e26f8 | Bin 0 -> 521 bytes .../82b05954c07d220e3f73a3fb869e1bc07bd3be25 | Bin 0 -> 1979 bytes .../82de90d3a6f5d2fad65a94aae6aabd8433c84a07 | Bin 0 -> 60 bytes .../8304c98d8d0168d0ae2f17133e4006963954f16f | Bin 0 -> 146 bytes .../830a2593fc053a44576817f7d354c73b917af86e | Bin 0 -> 3164 bytes .../83116120729fc51812f79ed07eaa8f9497295761 | Bin 0 -> 123 bytes .../83317e6cef0bc101c43407b2aceba582785825c0 | Bin 0 -> 387 bytes .../833e11b59a00b522d59c25a6873e650335ba82a3 | Bin 0 -> 1708 bytes .../837cd805c7181e049adc52556b9385527e05439d | Bin 0 -> 4 bytes .../8392794898328f6aa4b8a4a4d9fee55edcf6ac58 | Bin 0 -> 148 bytes .../83a4622d79a724ff399c015319427b73df9315d1 | Bin 0 -> 4367 bytes .../83b0ae5b9301462b0272671e5687787d915f9965 | Bin 0 -> 4 bytes .../83bf08efb67658230ec4f9b295922a147bf31e86 | Bin 0 -> 2809 bytes .../83cd075f4ecc07a520e1e2ea3d4e0ab5d63bf08a | Bin 0 -> 4224 bytes .../83ced1c0806987c7a32836d7959aacc2acb2ecd8 | Bin 0 -> 36 bytes .../83d1d782dcdb5d75877d83b558f2f7780edf87f5 | Bin 0 -> 24 bytes .../8438167990f6d205f9ce3aed944293ae3c62c854 | Bin 0 -> 79 bytes .../844f93a8bd0c56317b6d7315135743210435033d | Bin 0 -> 152 bytes .../8455a827e8183f1f8bf5a5ea1f71622c91793349 | Bin 0 -> 76 bytes .../84608569b99ad3722fae134af910027551ce6b4d | Bin 0 -> 87 bytes .../84714905a276e6c5efe1816f897d42de57c782be | Bin 0 -> 46 bytes .../8480895f1c89b8ac57b36fa2fb91109b9bc712e1 | Bin 0 -> 28 bytes .../8489c02f40fbad65c1d719fc12e8e7791abfa6b4 | Bin 0 -> 43 bytes .../84a237fd30882e4ce6c2dbb13c095d8718c6a917 | Bin 0 -> 1600 bytes .../84b18c29145370cff64594627a094c06fecf7c96 | Bin 0 -> 4384 bytes .../84b22a5f990f4d56ea6ee7706f584598d5f9f0bb | Bin 0 -> 21 bytes .../8504298a09ef46ead7c59ff06ba3d8050ba1ab3b | Bin 0 -> 584 bytes .../852012f24c7f232c1136cc986ac9943bf1002a07 | Bin 0 -> 34 bytes .../855a4b050dad61c8ff5bb62ef06eeac2421dcbd7 | Bin 0 -> 1002 bytes .../856e33153191dca54e636a776bac6aee4fa67995 | Bin 0 -> 16 bytes .../858c0ffeb444e97295d85c9f8eae904092c27d35 | Bin 0 -> 379 bytes .../8597ec9ac30a5be4135b9dc20e0405749a9bc2fc | Bin 0 -> 1627 bytes .../85d29815f8ad1c9c6d71058f4a95447b8d4f2786 | Bin 0 -> 392 bytes .../8619a2baa1c5e42f7dd2f3839bb3248d8442ff85 | 1 + .../861f0a6c736fff277bff41b8187deae03e08135a | Bin 0 -> 28 bytes .../866a048d2eed311eba800b7756ee5c21f6f2f182 | Bin 0 -> 215 bytes .../86c64423abfda4d7a144a31cef1b1d736191441e | Bin 0 -> 113 bytes .../86cfc8478b936ee8ee6cdcf2710d102f24da4963 | Bin 0 -> 828 bytes .../86de83add1e63681cc0e90409b5fdee134625ebb | Bin 0 -> 508 bytes .../86e58616fcb7e72e177f4f08c94feb3eea520d1c | Bin 0 -> 370 bytes .../86e623da9cf65a100e6c591093f34890d1cc76a5 | Bin 0 -> 16 bytes .../86ebaef04872865f12313999570a4d8659650756 | 1 + .../86f7d58f32cc29574aac9e43d78bae8d5556c03b | Bin 0 -> 80 bytes .../871342285eacee7b1406fa6f3d05f6f5e6cb31d2 | Bin 0 -> 188 bytes .../871dddf75b9a25773af5f5b3586ff5d456fedb95 | Bin 0 -> 60 bytes .../8731774e9647784b2431094f56a1439ac193319b | Bin 0 -> 12048 bytes .../87352519dfd539d56966f95ca2d88e1ade9c1194 | Bin 0 -> 513 bytes .../8740ce83f34d6b729e4d26edb96c735e1c814638 | 1 + .../8755475be27b210d37493dd346286537631859ea | Bin 0 -> 30 bytes .../875aeb5360aa071c298b7f61b17680af6cf97fba | Bin 0 -> 2322 bytes .../87733535e07f211f82919c4e887662d4373a7376 | Bin 0 -> 56 bytes .../87ba9ea309dc3b30c7c3cbf138c1f89349e75af8 | Bin 0 -> 10 bytes .../87de163d2bf2ba99a45902fe8f9101221bcd38f3 | Bin 0 -> 418 bytes .../87ec409694cf7a9ab8789c738b4cee42660a3e86 | Bin 0 -> 6232 bytes .../880dfd376f29ef69c385c71a4ae3d1b79b0b8e4b | Bin 0 -> 85 bytes .../88142b7e55004fa233131186d27e2dd993e2160b | Bin 0 -> 21 bytes .../883a0ac84ef88903e053a5a3516e8fad4e798c1e | Bin 0 -> 56 bytes .../8854fe64ace7c587d2d2daf84feaa3d592dda63a | Bin 0 -> 128 bytes .../8878517eabb672daf49fe7cc91d764397c8ecec4 | Bin 0 -> 2031 bytes .../888cf7a322f221a988ea57648f334eb83be5af97 | 1 + .../889c4637c1e34d7170f592c45e7ccecf1bda9e6c | Bin 0 -> 253 bytes .../889f9128b7546aede28e1233d9fe962cd9a314da | Bin 0 -> 699 bytes .../88af3aa5cf64cd01ed2762c63be919442cc2ea6b | Bin 0 -> 65 bytes .../88bad51f0b774b183636b47776d277713e0e8d30 | Bin 0 -> 123 bytes .../88d93e5a5cb88bf42c869c927c7e69c2589a17ec | Bin 0 -> 86 bytes .../88db530db5c94f8819063cad3f460a1036e94c79 | 1 + .../88ddb4e81912bf202a4199a72ab84ace6d7627c6 | Bin 0 -> 24 bytes .../88ded527751bd0309425f879b02f42fbda28c82a | Bin 0 -> 38 bytes .../88edff360184ea9a4f965c4e2db9a739d0c9f393 | Bin 0 -> 3150 bytes .../88f363bb62151a2fb63b488597f15bbfee04c562 | Bin 0 -> 328 bytes .../88f484e76d425e5b03ae6a300796129d6c3f8648 | Bin 0 -> 7 bytes .../89171ebc740f1398c7198ae8f658db99505005c9 | Bin 0 -> 146 bytes .../8932120d2b17f0ce46a0d17968668b242fa2e297 | Bin 0 -> 60 bytes .../897e8033cc44106dbfee860533b3fc1178085355 | Bin 0 -> 7748 bytes .../89be7dd7941f1ee354b26bd0c43912d99ec85606 | 1 + .../8a15be1c1371bf97b7680a5dc1d44386fe69e8aa | Bin 0 -> 4280 bytes .../8a240ada7afad50186cd02e826d7f9dc9ff7d794 | Bin 0 -> 251 bytes .../8a35f35c85fc08f93eefb66944cb7f5c84fc5686 | 1 + .../8a3ce0c40ccb925bd5fc317e5776fb811dd0a4d7 | Bin 0 -> 705 bytes .../8a3ed947bec48e57d744380ff9c01f34e0a07386 | Bin 0 -> 16 bytes .../8a4691a75497b96281a51fa37fdcde011945cd78 | Bin 0 -> 216 bytes .../8a620ac48eb9bc71d3eb168869f95636470474e6 | 1 + .../8a6c107567991ffe8c2d8f13a43814c99cc20ba9 | Bin 0 -> 4 bytes .../8a8a00a76717236cacea7f1768b9be76734af274 | Bin 0 -> 22 bytes .../8a97ffc79d8a91e018e5ad714bd9f4950deafc65 | Bin 0 -> 11312 bytes .../8a9c988b68a21bc92660275e44cf75fc6c4dc08f | Bin 0 -> 27 bytes .../8a9fe69e93f17c2b189ec45ff583b667c4021c47 | Bin 0 -> 397 bytes .../8afda039c681f56ebdcefb043c94bb47e6e3abbd | Bin 0 -> 2103 bytes .../8b2fdf377002804be2fdf93fda627c9a6a45eea5 | 1 + .../8b5d5a6786cf8a99ed3894710c3e962b78a474e5 | Bin 0 -> 901 bytes .../8b70ec463df54c76748c345f315c43a11cb6233b | Bin 0 -> 588 bytes .../8b7b5f3d3306fe2720ad45b11db4207d2a06a669 | Bin 0 -> 805 bytes .../8b920c2d24b6b63b0d1ea8d7c107c787700e9458 | Bin 0 -> 3809 bytes .../8bc2d2e0d3bcac8e389d3e3e00a3d1a6c8ed1ddc | Bin 0 -> 5 bytes .../8bcd7179354e485615c9fe24ad1ef9ee11700982 | Bin 0 -> 5744 bytes .../8be76e6647759d200fb98208e04bf3a0ad217013 | 1 + .../8c42c6631f3e7192977bce32cbcb5251c50b4549 | Bin 0 -> 541 bytes .../8c4f6b57db3895a173bc354ba3420d8db9997130 | Bin 0 -> 172 bytes .../8c5b79c06685768f9cce266d827b1b9043fe6668 | Bin 0 -> 133 bytes .../8c5f23791786a76a2e2f1b5148d5daa46932c15c | Bin 0 -> 75 bytes .../8c96f46a022eae22857d676e9f340cfad45f1b5c | Bin 0 -> 1368 bytes .../8ca02b270f487061d7a76284e54ad5955e7ffd4a | Bin 0 -> 224 bytes .../8ce054316a21d21cf2da78cb3f50c0ec5a16a3cb | 1 + .../8cf9d9ece0a99dd6b170c17f7c1472b438a9a564 | Bin 0 -> 4774 bytes .../8d0947ba564ebcff49a305e5637902f7408fce86 | Bin 0 -> 2683 bytes .../8d0da7e97a802369ea1f231329b42abd2668a52d | Bin 0 -> 9934 bytes .../8d112eb1b09488da7e3c083bcc6c47519733f997 | Bin 0 -> 302 bytes .../8d846d929136860138c50e9bde1b21815317741c | 1 + .../8d88c5b54a503793527df2b1a49a2d87f7a65172 | Bin 0 -> 336 bytes .../8d94b6b144e6c31a512480e327ba1d55e6c40684 | Bin 0 -> 1629 bytes .../8dad836f7c6e6bac817faf8578bd18779e2f7b96 | Bin 0 -> 968 bytes .../8dbe30c3a9491ff4a341f22d59f6e49efd460e6d | Bin 0 -> 1499 bytes .../8de22b17158a5c1ea3c19df805833e6af507474a | Bin 0 -> 1202 bytes .../8dea0b00ee2f4fa2123e4a625de01175228dbb77 | Bin 0 -> 74 bytes .../8df8349aef1e3ca3913d96b9b952549fe152a6fa | Bin 0 -> 316 bytes .../8e177f6188395a681832bf507dad72e3d594ac34 | Bin 0 -> 20 bytes .../8e2f28cfe7da92a0439ea13fdb931fc3a4eca53d | Bin 0 -> 596 bytes .../8e315067a4eb9c579551e2d7fa4ce51268683d40 | Bin 0 -> 54 bytes .../8e38064ef53321c690045f42f9a1c5c10c71b2cd | Bin 0 -> 517 bytes .../8e3ecafc510d3779664126e7624032ee4c9831ee | Bin 0 -> 233 bytes .../8e6035b597d6f72c7e9d0444f1cfb4696b445cc6 | Bin 0 -> 6 bytes .../8e88f8c0c2055a4d922975729ebd941697fdecef | Bin 0 -> 62 bytes .../8e8d5b062de3e56caf3dba9a8ed051cd8065a460 | Bin 0 -> 397 bytes .../8ea715f670d80de73b8882166d04ff47ab50f8a1 | Bin 0 -> 79 bytes .../8f0cb7659c67a56b9326c1c76811ca30b5322881 | Bin 0 -> 51 bytes .../8f8a16c57569aa17d7bcab7a9b0788e1f49da456 | Bin 0 -> 58 bytes .../8fb64f11ef64014d9916c151c57d2c18950657bb | Bin 0 -> 2660 bytes .../8fbde52ae0382f34b786c3e630a46d9aba23d064 | Bin 0 -> 41 bytes .../8fbf2e3ddf1b59b02943dc23ed8398a864e25ea8 | Bin 0 -> 180 bytes .../8fefa1d5ab1d739c1a714a42b8198ff08e2760e3 | Bin 0 -> 335 bytes .../900e8ed82b17fae4629140f411d6630a131a62c4 | Bin 0 -> 42 bytes .../9025bf0e7a6838bccc46358183045edc4c2476b9 | Bin 0 -> 40 bytes .../9028fd78431d80b784f29ed193b8d7a6baf32d27 | Bin 0 -> 52 bytes .../9031f395ceae12bba0efb424c63112b95b8c6b30 | Bin 0 -> 592 bytes .../906af1b43376079567fe82d774c83bca698d0748 | Bin 0 -> 53 bytes .../908bf3430b00cc6a53aa0b416ea3315624421453 | Bin 0 -> 44 bytes .../909dce73fd720ad846fad035fc11f7722314488d | Bin 0 -> 1368 bytes .../90a7c2baf151aaa282a291c84db92254e568b9fb | Bin 0 -> 151 bytes .../90c61c5d13e5f9d3ef289f27c415ad85f46a6822 | Bin 0 -> 4832 bytes .../90d812152c5d2256fbb1d5f00ffdf93f890f0ebc | Bin 0 -> 12 bytes .../90e6924c9c61028f2902d6e31c85d874445be393 | Bin 0 -> 725 bytes .../913cdfc68891a62ef98caad9b5373c8b4cf90af0 | Bin 0 -> 1874 bytes .../9150f06b63c6119bd8667c811a03a07e8d0b940f | Bin 0 -> 6 bytes .../915e6ab254b65363a90ae6988e747e224676b649 | Bin 0 -> 36 bytes .../91682bf909bab9c231f343d82e9e481c27301bef | Bin 0 -> 180 bytes .../91768aa23a920cfd5f6d79f212e613d17d9cbaca | Bin 0 -> 902 bytes .../9187441d2a416b9c45a43923b30824915ae0d6fa | Bin 0 -> 108 bytes .../91890125fbc8757458a0110ac9f6647340efe4a1 | Bin 0 -> 43 bytes .../91932ca9f0f2eed41414641b86a43d73dabf01dd | Bin 0 -> 668 bytes .../91b49745ae456f461806134ba044fe50a63ab3eb | Bin 0 -> 79 bytes .../91bff75dcc29403e1ca9b26cc19cce9b0c86dba6 | Bin 0 -> 90 bytes .../91c5896078447d9af3b4d9c213cb3cd93b9dbfdf | Bin 0 -> 2099 bytes .../91d059164c74ee8014af522df99ac8779b2d6cb6 | Bin 0 -> 934 bytes .../91dddf08912733492c1826325add870e2a249d18 | Bin 0 -> 2840 bytes .../91f04b0828b4746a8a1ad4c40aa0f20619f5fa09 | Bin 0 -> 51 bytes .../91fa58d15d2c57be3263f0e96ae9e82e422c4167 | Bin 0 -> 120 bytes .../922fd57cc8129cbee30e82d0f03f438626eee166 | Bin 0 -> 68 bytes .../9231e8e3627cdc909f5bd01ee946e572bd1bc779 | 1 + .../92444f2fb8be0e684d9146796b9d2c531adc9229 | Bin 0 -> 277 bytes .../925975810bccaf5754cda461d6a00ab5b57014f5 | Bin 0 -> 2160 bytes .../9261aef9764d90793c2c928688bfce4b282981d2 | Bin 0 -> 4895 bytes .../927d7281f79f6ea2748e00b1438079a079361aac | Bin 0 -> 1051 bytes .../927d922ec4f76b06db1cef1e53104ffd60852d1b | Bin 0 -> 81 bytes .../9285a30532fa13a64c2a58e7d162250b65dc6b8c | Bin 0 -> 14 bytes .../92bb4747428f106b18e1eac9c17d1219c19b6890 | Bin 0 -> 447 bytes .../92d54fbb7535ee6b2d7b4a6c4de8a93809e39da9 | Bin 0 -> 889 bytes .../92e2e9117c0cdf3ee4a63a723d83cbd210bf962d | Bin 0 -> 29 bytes .../92f440e52298b51e4def511ebbd572f5491ee432 | Bin 0 -> 32 bytes .../9339c16f3c58d52a77a6404b9082abd65915e3a1 | Bin 0 -> 20 bytes .../933c6669bbf937919b170ab901a1ed70f9a1cddf | Bin 0 -> 64 bytes .../93b125cbaf3f81455844d599ceee445581c04008 | Bin 0 -> 1400 bytes .../93b79527fce36486259125cb816283e7328cb46e | Bin 0 -> 967 bytes .../93be46be6d416f00ab1c35f8dd1a50cb6720819d | Bin 0 -> 431 bytes .../93c94b1238c8ddf5d03ba490a33184d749517aea | Bin 0 -> 303 bytes .../9411db3d7c2982d1e6496d520873ed1c0a35943b | Bin 0 -> 6444 bytes .../9437e0bb3e2449feb8b50bcb633eb0d71b7befc6 | Bin 0 -> 295 bytes .../943812cfb14a99b7710433e61987ece1eb9fa7d1 | Bin 0 -> 3420 bytes .../944a05fb02e54a8fb8ca7410a4157995b0a3d6d3 | Bin 0 -> 17749 bytes .../944dacc9b7274eb29aea5d9bcbf6dcc8b9ae85f9 | Bin 0 -> 1136 bytes .../9490079bcea89cf653922d52ff48603a4bd87772 | Bin 0 -> 223 bytes .../949acb1b7892d543b6dc648139ed9812811c8d1d | 2 + .../94b78245590f69ffebba1f9ef7d1db9d3bad02b2 | Bin 0 -> 88 bytes .../94ca7825e86c19426b963116d450ee4207ddbc7a | Bin 0 -> 19 bytes .../94ddb2de2c3ff69337fcbc3a6a4160d47fdd3ab7 | Bin 0 -> 7 bytes .../94edcfe867d7ef8ed1f801ba6ecd3f62670ccbee | Bin 0 -> 2994 bytes .../94ef6a147022a37b5771d44031b5fd70127ec7dc | Bin 0 -> 44 bytes .../95151ab7f74a4d6e3dae9c7e0ddaaf71d3b826eb | Bin 0 -> 76 bytes .../9515d14bd90cbd52024c381c0e3773a398f9d7f1 | Bin 0 -> 216 bytes .../953441f530ccf7fc92213873f1bc200ea281b3a4 | Bin 0 -> 4 bytes .../9540574e5ca9b5171ffa240ae88be5350b74bc09 | Bin 0 -> 68 bytes .../954a6c812dc7cebc3e06971504decee47e315d58 | Bin 0 -> 1300 bytes .../95b1fe051c1f47a125692ade718abe89ce78a185 | Bin 0 -> 64 bytes .../95c9d5b4954a01cb686e0c2522930cf2daf65a62 | Bin 0 -> 376 bytes .../95d83ac9892aacedd57ed4656beacd4af3057f5c | Bin 0 -> 41 bytes .../95dd6d0bea087a3ac16133cac5d145fe5b046333 | Bin 0 -> 40 bytes .../95e64ee92a178134bc72cfaa1a24ac9ae04ade73 | Bin 0 -> 4240 bytes .../95e96c546864a60dfadfe00a40ee50ec0653d333 | Bin 0 -> 26 bytes .../95ecc13f116ead1bff0cb5ebdbf8f19160db3b8f | Bin 0 -> 33 bytes .../9625223e87f5d74b3d383157cde8cc9606534cc3 | Bin 0 -> 84 bytes .../963434a5f1f31a3c70f32f7bcb1ff855e21c81b4 | Bin 0 -> 28 bytes .../96708faa7a9710a14c22198756b14b5d6219c74b | Bin 0 -> 46 bytes .../96a7859aa3dd91c6c72452e7c239d07eebed1791 | Bin 0 -> 701 bytes .../96b69654fc767402e0a1fc0f9b3894be51ed86c3 | Bin 0 -> 4576 bytes .../96db85868eaa21113fc9f48ed398fade8db0c113 | Bin 0 -> 1052 bytes .../970a4b0d697594259b509b4166f668b16a7fdc49 | Bin 0 -> 19 bytes .../971e88c2fa3374048e14915a8eb6499c9a54b4ce | Bin 0 -> 60 bytes .../97252b5cc09a03eb18380ed8fa6870c8274cc92a | Bin 0 -> 25 bytes .../97424ef61480899ad77d96e531bad4c973cdcdca | Bin 0 -> 350 bytes .../9759aa3802ca395d63adcf8a3d1e714320eb7f98 | Bin 0 -> 300 bytes .../97845cd279e420e5ebdff0c418b81995a49c8663 | Bin 0 -> 1863 bytes .../979a814b4c49efcaefa0837784649b45cb5ae300 | 1 + .../979f0e4cda9e1f716459768776b3052d4b860958 | Bin 0 -> 6958 bytes .../97b359b43db5cb65daf7b01dff560e6078f70794 | Bin 0 -> 24 bytes .../97c14a945a03ada2ff30882277e688f938b7aecc | Bin 0 -> 100 bytes .../97e94b7ece1d23078babcc5aaf23797459bd52da | Bin 0 -> 18 bytes .../980b9f512d3c9c7098df03c7ae0b6eba64dcbd72 | Bin 0 -> 116 bytes .../9842a93e311d469f45fcc6aeadd341b8c1896d95 | Bin 0 -> 4787 bytes .../9871b89c4eeff7c675784d2c38cc0c5748e0296d | Bin 0 -> 161 bytes .../9885398ca5b6ac0e543603469cabfe5d720f8d3e | Bin 0 -> 14 bytes .../9889734058e0ef3a309319fc4f74c4a13eac32a5 | Bin 0 -> 87 bytes .../98a0d88d12ac1f8dd0df362e3f52be743bdef80a | Bin 0 -> 3244 bytes .../98e0d1b02d0f41f655903c896af53ec853480336 | Bin 0 -> 45 bytes .../98eed1c842b6773a9e1caedd2fd2d7e9bb897926 | Bin 0 -> 6 bytes .../997bf97896f1648b29ce03f86a1bbfac2d78e2c6 | Bin 0 -> 1151 bytes .../99c34c19d3f19b724574e4df445b4d4a01b3d60e | Bin 0 -> 25 bytes .../99f0b514eebb0759346e95cb3cd5e4a45aaa1c6c | Bin 0 -> 302 bytes .../9a0c616693260f53f2f4cf9320e29fd049fb7a0a | Bin 0 -> 180 bytes .../9a0f7fe4dce713051bc336d746a7d4429c01ab76 | Bin 0 -> 268 bytes .../9a2b993d569bf7c1b847853276c9299dabb4e0da | Bin 0 -> 87 bytes .../9a310213f40ce2ce18a18fb964d8c835b9794215 | Bin 0 -> 168 bytes .../9a408c3b78ae933f2c5247abc1bbb03d889baef4 | Bin 0 -> 184 bytes .../9b10a5b0919f2d4ba82e3c3c356ad583d88846c7 | Bin 0 -> 41 bytes .../9b11e90a2625175c66844440a419fcfd74b2b508 | Bin 0 -> 78 bytes .../9b4640abefd8e47a082ee9078737e1faff9b1aaf | Bin 0 -> 5712 bytes .../9b689b53d50e31adfa83c41a4e48d6ffb7af818e | Bin 0 -> 824 bytes .../9b7c5855f3cf909bae77fb4ccaba1f1433afd677 | Bin 0 -> 90 bytes .../9b7f052595f80a46ce9d98025407097a9473d09f | Bin 0 -> 396 bytes .../9b86d55a288b0122f5a0b4a701e1a2129e5d38d6 | Bin 0 -> 27 bytes .../9b8ca8c37ac22b8c23218129875f8cf3c087e169 | Bin 0 -> 7 bytes .../9b99593353a610c4bee0d6a94a01a3296080c0fb | Bin 0 -> 2 bytes .../9b99d75e8e3fc2e040d367054905c6788fd1443b | Bin 0 -> 25 bytes .../9bb04c53cf011b3521274628a4f81f2421e6af88 | Bin 0 -> 68 bytes .../9bbb9a121a70a0bbbab4dd38cc2573e15cb36918 | Bin 0 -> 1864 bytes .../9bdc12b18785d6062f7ce294a68a84d517c44e8a | Bin 0 -> 238 bytes .../9be617f4f9fc4ea855e23e47a23383b198173218 | Bin 0 -> 196 bytes .../9c1a7d489aae9be9797a8b7c2ff4ed24a621de35 | Bin 0 -> 2152 bytes .../9c24525635a1f51d427fd6341fcbb56e26077dea | Bin 0 -> 90 bytes .../9c27903b89a25c9acc3a7500a5663b39c3bee700 | Bin 0 -> 52 bytes .../9c57ef206a217293acc2b87466d15227d992d0c7 | Bin 0 -> 519 bytes .../9ce1913a1c97e9d6922ae8540caa7cce5c7cd6e0 | 1 + .../9ce32e776a05dd95ee556700837ad3fc49daacda | Bin 0 -> 1036 bytes .../9d114916d479b7302c5ca80cfb464e364fbb4c55 | Bin 0 -> 20 bytes .../9d6e3acbef60c6540a48a540e1f2ead53e08714c | 1 + .../9d6e49cfa5754764abddaaf6de39b768c8b52d69 | Bin 0 -> 19 bytes .../9daced8012d54a56a3776b4f9f27d6596e5e31ec | Bin 0 -> 28 bytes .../9de60666a8e1a9e3fc935dbb80710e782b6edfaa | Bin 0 -> 172 bytes .../9dfb4fe64843ad69b27a5084d19e84b59eab414c | Bin 0 -> 86 bytes .../9e162dd820f136020a20d59394c49e161bfbcf1f | Bin 0 -> 396 bytes .../9e1d3b6da2ef9e59288864f86fa3477d8ef4111d | Bin 0 -> 393 bytes .../9e382218af929ab3d6562e371254895f9f270b9a | Bin 0 -> 8 bytes .../9e5599a1f97027da2db16aa861eb154891fe3a8f | 1 + .../9e6e67874284718a198986fb82e6d705e0c929a0 | Bin 0 -> 137 bytes .../9e9a14322f46cd8d416c38535d4e786055539195 | Bin 0 -> 63 bytes .../9e9e204e31145e94f84fab7eafc655df857ab5f3 | Bin 0 -> 18 bytes .../9ea2f008914511ce5b36e0851927e6c950694ebb | Bin 0 -> 16 bytes .../9ece9d154d92f21527dad6edf284cd8004e587d4 | Bin 0 -> 6 bytes .../9edbed0bb7eac3dd4975c8b375d9c94a9e7c108f | Bin 0 -> 171 bytes .../9f015c6b63b2e71943d2ec961c3593595efc8a55 | Bin 0 -> 7853 bytes .../9f2dce933fc5ffafb5c70ed6319de4f1090c75dd | Bin 0 -> 985 bytes .../9f3e80dbaea3f9789e2aa92f3460de5cd6d2b852 | Bin 0 -> 426 bytes .../9f7bb3a1837cf33955e2789306c87c00b808d457 | Bin 0 -> 4838 bytes .../9fa0e47181b655ccdee004688191acca594dcf9b | Bin 0 -> 85 bytes .../9fd49fc3b774fda940c3debeace4ddaf33e850a3 | Bin 0 -> 172 bytes .../a04accaf67b08cae4880d7d3ac90660eccd59b74 | Bin 0 -> 251 bytes .../a057a74b5f6d468c77da0f95f321e945ad8c28cd | Bin 0 -> 8704 bytes .../a077a98b8115cd701582cda9daa417005959920b | Bin 0 -> 302 bytes .../a09cdd5b762f4aa0a2d707e5ce1f8da89dfe9041 | Bin 0 -> 19 bytes .../a0bb33577de5a58c628cde37c2c41fdf471d3c29 | Bin 0 -> 69 bytes .../a0df2ee8ed2bf3267040b372081b4046b1f711dd | Bin 0 -> 301 bytes .../a103b8032003741f1ff10266a27feafa1f1dfcad | Bin 0 -> 36 bytes .../a12a9c4719487cae087e57d81f14d5a7b7aa4c3c | Bin 0 -> 64 bytes .../a1311db501de3b1e09e9f2374cb8981684ea18ae | Bin 0 -> 8 bytes .../a14da698592d363d287c59ef23cfff064b57502d | 1 + .../a14f5a282f2f196d133262580a609c45a583f8cb | Bin 0 -> 172 bytes .../a16ecdf8babe7d8a94127a58cfb97ca10848349e | Bin 0 -> 1168 bytes .../a18a0073088b19a2e8c111326d60400e53e338df | 1 + .../a18dddbfe7c4a0f220280fa1078e3ed6d5a38ca5 | Bin 0 -> 172 bytes .../a1969fad9472211e36c1ac71a23197d3f3ea6c30 | Bin 0 -> 84 bytes .../a19f3d91f2a5b08adad610dd8288c7e5ec90f9e7 | Bin 0 -> 254 bytes .../a1a31fa01dcc0518e5b710d46f72f7b74e159a73 | Bin 0 -> 10800 bytes .../a1ad0f86a27cd23e4d833772b0df48e26cf00075 | Bin 0 -> 2404 bytes .../a1b39a9925312e0a9eae02b49e8651049e2e75b3 | Bin 0 -> 300 bytes .../a1e622632efdcc7b9e62ce52b8e8c2131af3f89e | 1 + .../a1ecaf52db40a50589a6f3a4406410921aea88f3 | Bin 0 -> 368 bytes .../a246ea58b5098dc9e1fa0a58625c968372a4536c | Bin 0 -> 264 bytes .../a24e6cdcdc67c317f9ce567a0bf3d7040066af48 | 1 + .../a263c6ebaaa07ebb374e021c6e64795c6a8d2021 | Bin 0 -> 7 bytes .../a27fe454e6dd7a67f42f40e157cd0055ac80ed7b | Bin 0 -> 235 bytes .../a2ba566b3693983b462718b7cbfbdb1dc8c5246b | Bin 0 -> 22 bytes .../a2bb3b08efb3db8ee25b824f2b3e78d2ef625c32 | Bin 0 -> 41 bytes .../a2c2f9b1ea7efc25dbfe59d32bcd6253b356b704 | 1 + .../a2dcac7f79d36a8f7afefc49c4bc7379c922804d | Bin 0 -> 84 bytes .../a2e6c3c3a1f5c250b5822ec833b86bd8c551a7f3 | Bin 0 -> 87 bytes .../a2f27e004e15b13bd1b3a13c8a8b3d8cd861d541 | Bin 0 -> 6820 bytes .../a2fc05d17bab051245a8ae57103317d586056891 | Bin 0 -> 2452 bytes .../a32bcc9fb3feaaf6f267c36771048ee380416d37 | Bin 0 -> 46 bytes .../a32c9b2ac23848db5a054568cda217254fcf3cf3 | Bin 0 -> 147 bytes .../a33cc48c38a7737827aabb790844617b2521217e | Bin 0 -> 7 bytes .../a3433f35a5bd1a76fd464245b8f2179d8e9d8cb9 | Bin 0 -> 4864 bytes .../a34b23143e9939051060a5bce4b1bc25a65daa9c | Bin 0 -> 42 bytes .../a35135f936773bb766efb3b8808ee90fefc7aa12 | 1 + .../a3513dc58c4109492b01c6f91364354aebfcdfdf | Bin 0 -> 228 bytes .../a351efe7912a239d90328b23887a1227bba53ae1 | Bin 0 -> 4 bytes .../a351f0e1eb96cdcb9ed4bab2b4e8a464d9d323f1 | Bin 0 -> 1616 bytes .../a353e67df12fe9c1acdc62d8183b39912f45b81a | Bin 0 -> 1069 bytes .../a3584d095535dd2aafc9e4249ae42d7f89377596 | Bin 0 -> 792 bytes .../a358fbff3f6ec04e0e03af43ff5c9c96cf9c7a83 | Bin 0 -> 2176 bytes .../a379110303fcbae2f8be17306cb2155d1309fa97 | Bin 0 -> 116 bytes .../a38a0e74486c7fe724d244b09d9030b22866f461 | 1 + .../a3a22b8e9d26b4e8ef09c5b0172503dc133d3c26 | Bin 0 -> 6 bytes .../a3bcd5261e8b3270cc232c5e8bbc877c2edba456 | Bin 0 -> 308 bytes .../a3bf97523a6c8b39ac4b142e63a2e161b7e7f635 | Bin 0 -> 28 bytes .../a3c846324bdd94ebf1ce8faaa2fe64960f49f8c8 | Bin 0 -> 77 bytes .../a3c90d9fdf6359f836d128811af832a9b8bc45ee | Bin 0 -> 16 bytes .../a3ce2fa8996f8622c86fd5c431f10013cfd6463c | Bin 0 -> 504 bytes .../a3ed7a243b2f7a064bc3f286ac20b28af7177e50 | Bin 0 -> 322 bytes .../a40dc42bb49e387c2d22ed27bcb4e9973d24170b | Bin 0 -> 912 bytes .../a4175fc6f3fe91fd863dce5dd7cc5bdaa93c5f13 | Bin 0 -> 4304 bytes .../a42992b2c6865f208a50a443b9cc263fca16bb8d | Bin 0 -> 51 bytes .../a441534047350f7b3e9996a918f985aa079a9068 | Bin 0 -> 1152 bytes .../a45a9033df3763417d16c5bfef1ab879a87347eb | Bin 0 -> 52 bytes .../a4b0d25ab74067454d2ccaac0932dd302da50bee | Bin 0 -> 86 bytes .../a4b2fc8eaf3b7d1598903f86c69b72149bb38983 | Bin 0 -> 354 bytes .../a4c78ce6ce8b2e285e1e0cc69c38df82b93c64ac | Bin 0 -> 39 bytes .../a4cd705f18dc51047c8d5de0176f9b97aa027307 | Bin 0 -> 19 bytes .../a4e0f634448df07572fa08dd45ae87c08441f79b | Bin 0 -> 35 bytes .../a51b75759fdace4e77f905bec9d2efe2f017385a | Bin 0 -> 1012 bytes .../a528b22e79b7968b3baf9553abc8428f73358f70 | Bin 0 -> 19 bytes .../a5517e41d62d6664d51b85b3af87a4aec27afc56 | Bin 0 -> 595 bytes .../a551f0ab5a3b6c495eeadb243ed3f0741d3673fb | Bin 0 -> 276 bytes .../a5675d8ff49963faa5d37212d94cb4b4fd26bd84 | Bin 0 -> 4 bytes .../a572cc01cbbd2ac46c2c86ab07634dabe33627cb | Bin 0 -> 1401 bytes .../a596f5a44e48c95053d2f40a4bc1cb7d36c7f59e | Bin 0 -> 64 bytes .../a5e1b9f98b2f87b5c3afde0e4087e7be55ccaa87 | 1 + .../a5fd5c4eaf15d4f630b70b85904a67987488fc50 | Bin 0 -> 91 bytes .../a60bf177afccf9adebd8ba2c9ac2df5dcbb00a36 | Bin 0 -> 143 bytes .../a6529c081cd58c12e038b606490b1e43f1649c5f | Bin 0 -> 197 bytes .../a68aa7707216ff1d9cfd65447995cebd672b2078 | Bin 0 -> 129 bytes .../a6cddb3f0da71ba92e6714d3d2630249c0bc5d96 | Bin 0 -> 7 bytes .../a717af7f05576cfb9a14f9ed55dfac760ee9e677 | Bin 0 -> 333 bytes .../a72ebce1a78dc3c2c5088343a2296f15f768b318 | Bin 0 -> 137 bytes .../a767a7a832e0f705d30c9c8ae21e2f2a2de5ac84 | 1 + .../a77ccf5ad292991e701e6b5e5b6c87a2ca021f31 | Bin 0 -> 90 bytes .../a7fe19db8c4d4412718dbc6d614479afe973000a | Bin 0 -> 80 bytes .../a810761bc726a1b67205b7411f1bb0822360eca9 | Bin 0 -> 47 bytes .../a8178e9b734b5aaa85b365d8c580ee63f0864e7d | Bin 0 -> 32 bytes .../a818cde13875d37c9ffd8ef8cc89eeb39f4fd94c | Bin 0 -> 100 bytes .../a81caee035512b31c5f19ac00b06aeca2b84cf60 | Bin 0 -> 1180 bytes .../a8229a7c6c8a0952c44d7e33353436f9db7ef971 | Bin 0 -> 64 bytes .../a843d45b52f07859ccf7284daf5d667877ebcc52 | Bin 0 -> 27 bytes .../a84561620bcf44c532c93834f4077c6ff31ddaec | Bin 0 -> 56 bytes .../a85c2c4dd027f6ee658a96dac823783ecd6cf3c2 | Bin 0 -> 21 bytes .../a85d505571794366d1cee098abaaa58e0c946846 | Bin 0 -> 140 bytes .../a8aff915a5d25931f59df57de47da2a4105e3a32 | Bin 0 -> 302 bytes .../a92b936345d72f9e1fb72867e28314d9b1e77f41 | Bin 0 -> 498 bytes .../a939770c360ddb1f732a049088dd75a5c39bfb40 | Bin 0 -> 172 bytes .../a946ef4e0fc1c116d421a91fe049c8058436f75e | 1 + .../a9572ac94498bcbf3d1bf9fe5c4b456a53e93487 | Bin 0 -> 21 bytes .../a95d0447164f782f9a7aab99cabc5bba5b2e22ef | Bin 0 -> 6576 bytes .../a9979cea7013217c58fd7cd5acf6f02342afba5b | Bin 0 -> 519 bytes .../a9994fe57855b1cded987ea1a838b6e88eaff696 | Bin 0 -> 7 bytes .../a9ae59efc42ac1ad5bb0f73ca1e931e4ebf3d6c9 | Bin 0 -> 26 bytes .../a9b12748ac826e8d2aa299cc75ed61e5ab37df16 | Bin 0 -> 61 bytes .../a9b16c9d58cb0ab51c32cfb705011f3c1cd9ced4 | 1 + .../a9cca113daeddb7ad8e05b0ab21262073ff539e7 | Bin 0 -> 675 bytes .../a9d78e4ceeeeb228805a1cb5cd2bcadab7bcbdcb | 2 + .../a9f48e191899c46e32a2fe11b0bd334101bc32ff | Bin 0 -> 148 bytes .../aa0d147d61ace98c02e422a51889533e0ccab0dd | Bin 0 -> 1495 bytes .../aa3ab86120ef2eeb58121086f924b26e4441dd5e | Bin 0 -> 2894 bytes .../aa3bcbc8e1d9f7f445dff0af3be37c5770957a06 | 1 + .../aa5db18903ed99f2f95ddcbf8bac87194d9c8b88 | Bin 0 -> 257 bytes .../aa6c5226c7f13d6070eaa686245126403c8cfdc2 | Bin 0 -> 2194 bytes .../aa8c18af02d21fe7c2d815c802bfd268a225adbf | Bin 0 -> 11630 bytes .../aaa02aa4631522bf2e0f437f8423b992c5ff15a4 | Bin 0 -> 79 bytes .../aaf9708437946505eabec6e57986f8ffd82a3746 | Bin 0 -> 6 bytes .../ab1372a06ee698edd7ef2dba6f7f8e393c836f64 | Bin 0 -> 28 bytes .../ab1b863343fc9c6c0b44dddbad5c04be15bf9fa8 | Bin 0 -> 20 bytes .../ab3a6663612e8a5c0924301150a515daccfd56e7 | Bin 0 -> 634 bytes .../ab44d70254cd23ec085a220e8d21670551da398b | Bin 0 -> 197 bytes .../ab60430c3ad4b90ea462b89dcf5161ab80774761 | Bin 0 -> 13 bytes .../ab74a5fc61659cfcc7cd49dc2c06c734c1142a5f | Bin 0 -> 84 bytes .../ab76ac5dede8705aec88c12b07bcf30ecb47e782 | Bin 0 -> 588 bytes .../ab934bf85146aa5d8181d7a79ffa134d4340b10d | Bin 0 -> 6248 bytes .../ab9549c22660c5960b9d669034577935157f36b2 | Bin 0 -> 26 bytes .../abb98760eca7b3000c137a7f27e8420714fcbc3e | Bin 0 -> 172 bytes .../abbe8b77418855f49062bf1f32976734a1055f60 | Bin 0 -> 18 bytes .../abc9e9e497204c798aebd27c3328c310f97f2a25 | Bin 0 -> 1481 bytes .../abe9a00f6dff728fe630182db638eb7e353ca04d | 2 + .../abfe0543a91d522b5b0d702bf51d7bec60f8e255 | Bin 0 -> 78 bytes .../ac07cda9b27f68ff7408d878649fa12ecb8b9ed6 | 1 + .../ac240951a1e98e7633f95ddce0f0222d8c16cd24 | Bin 0 -> 2158 bytes .../ac26ccfcef267f5589f2b6e2c680b522e64f449b | Bin 0 -> 1924 bytes .../ac3973b4e4ac3d88291ae77e418e259c8c4ae24c | Bin 0 -> 29 bytes .../ac7c9a9298596c8f5e34f9ec9bf0530d99572e37 | Bin 0 -> 848 bytes .../ac80d9a0e8c0fb84ee9fe17163c50e4eb86a3281 | 1 + .../aca987c1eb92695f07065a2428c34eed2c7a7f15 | Bin 0 -> 302 bytes .../acb8993649cba7d8af2362f44a23f6959dfb47a6 | Bin 0 -> 4481 bytes .../acc916d72ed651a339fc34e8e81f6b7281295741 | Bin 0 -> 232 bytes .../ad2e5283f2da103f9ab320dab471ce631cff1b15 | Bin 0 -> 4240 bytes .../ad8b3aa5f0ca2d406974a42ce3b2101209d1371b | Bin 0 -> 5537 bytes .../ad8e0cd06391e7b3726d3f561e64a73c910f2905 | Bin 0 -> 8 bytes .../ad92f6c2508587c45d9be2aa917e2747ab39d354 | Bin 0 -> 86 bytes .../adb85c2dde3a257cb79f2e18957bc54681685c45 | Bin 0 -> 695 bytes .../ae1d744f59e5fa4f7a663dba74c3982e9450b870 | Bin 0 -> 86 bytes .../ae24c12e5fac26d40c781333054b2ce9bd7a0e86 | Bin 0 -> 40 bytes .../ae3c12d2557f4ab43a8e535824e0bf447d329d74 | Bin 0 -> 2510 bytes .../ae45099537056b3372492ecbc844640006e786ba | Bin 0 -> 64 bytes .../ae501556a91580c10cff0b9fa40811a4d75b3951 | Bin 0 -> 2 bytes .../ae955c066f7089cbc99b51b93b2f11d9446a8095 | Bin 0 -> 913 bytes .../aeaee174deb8896c40a81cf68db1107c2c71b4c4 | Bin 0 -> 4 bytes .../aed7fff7e0e6bcf92f575ee1a745104b2f2a04f0 | Bin 0 -> 292 bytes .../aef04ad881e6a1a187ff9676df7ad763393593e6 | Bin 0 -> 20 bytes .../aefb26003b0386a4e594d0967f9f4b7efbf6a17b | Bin 0 -> 16882 bytes .../aeff8174bb8c2153c56c9253b6026d3f7f024b3d | Bin 0 -> 20 bytes .../af00e75530c9aef40c431cd4f0dd6a905f435eda | Bin 0 -> 28 bytes .../af208e8b111afdb5d2db9aae8efbdefb3e596856 | Bin 0 -> 193 bytes .../af46d951d44bc0d0fcc63677e8b32f3ee931551e | Bin 0 -> 31 bytes .../af912c2f841892556f25966223e14d04390bdf6b | Bin 0 -> 1237 bytes .../afbb899acbc09f2654c4782995667aff7465d616 | Bin 0 -> 19680 bytes .../afd8f8225e7de1fe3f0319dfe4a695486386de38 | Bin 0 -> 68 bytes .../aff13a973be50601ecb4fe77b70120e69be0bd51 | Bin 0 -> 52 bytes .../aff7b27d32fa0df219f57fc66d33b698f22a3fa2 | Bin 0 -> 539 bytes .../b00dd955d2b702f62a9003078413fda3ec39e8fc | Bin 0 -> 14 bytes .../b0227ad30d41d5010b84bcc227f59c62fa1e692a | Bin 0 -> 87 bytes .../b043fed996a96f20e3205287361182317ae120ef | Bin 0 -> 32 bytes .../b06a4dc605602c6f16231902b154fb8a3dfc4a8e | Bin 0 -> 26116 bytes .../b0729be43b795255095f247e164f63a7639c14dc | 1 + .../b082abda96118869acd59416b9f0e5a28d74d55b | Bin 0 -> 162 bytes .../b084b7ff679837e7817ee062088eb8ec4ab3edfe | Bin 0 -> 10 bytes .../b0afe2e49d725a0c0dcfae7017b0734d783ecb95 | 1 + .../b0b5a0d6c1d9fda81b5e6738674b98f40019744e | Bin 0 -> 11 bytes .../b0bb1abde7c47cbbf6adaeb7954ac5f578009834 | Bin 0 -> 11016 bytes .../b0c428b5407f01084165fcb71f6dd9e50cc8a664 | Bin 0 -> 85 bytes .../b0ee669b454100ce88364492ade1422ee68971f2 | Bin 0 -> 23 bytes .../b1227ab923eef013ecd1d101b1f3e87e255b69d3 | Bin 0 -> 242 bytes .../b1584e2bab4df28edbb822bd59b256549369b1b1 | Bin 0 -> 51 bytes .../b1628ef88e6aabeb9ae2a6bd1b69fed47acf6ec4 | Bin 0 -> 302 bytes .../b186360bf1dc850b7d5f28a5bd65d612c8f28866 | 1 + .../b18baa762e27cfcda56045a6e19cacece4336523 | Bin 0 -> 608 bytes .../b197a0392cee27526234bc8d0f91638d7b3df075 | Bin 0 -> 151 bytes .../b1a9e1b6393aba5ad8d127be95a080e1eccfba99 | Bin 0 -> 4192 bytes .../b1aa7a5fe7581cae75a7babfeccd0ee9efc61196 | Bin 0 -> 52 bytes .../b1d7b9408fc599c715b47dff34d449831d9c7bb2 | 1 + .../b1f07ebd3fa7e4eb712faf7ec05b4dc795167b0a | Bin 0 -> 7 bytes .../b1fab2775df3cf209a7f27648696ab85ed9aa5dd | Bin 0 -> 14 bytes .../b228d21f5cfda9fb885b99c8966bb716a10f9509 | Bin 0 -> 750 bytes .../b236221a821c8cc42dad3ad684b1d2ba998c9c0d | Bin 0 -> 6580 bytes .../b239c227b3eef54610359cbbe8366624f5114e9c | Bin 0 -> 3259 bytes .../b24ae40ee8a0d8d9696d8d218ad79eac3aa4737b | Bin 0 -> 716 bytes .../b27d6690fca6ea18ea4af6224ccb8ddf3cfea410 | Bin 0 -> 143 bytes .../b282f841c1417ce2ee5a1e390d4e8ba21da28d8f | Bin 0 -> 20 bytes .../b2adad5a9a65fa4292fd3bdd4a3ac02a3b150910 | Bin 0 -> 144 bytes .../b2bd4e71d1d31ec34796bf8691add1e3d5a32185 | Bin 0 -> 276 bytes .../b2c0581ccad023eaea970b879524b1050c53821f | Bin 0 -> 156 bytes .../b2cd73c651425bbc635b82623c916c74a4915de7 | Bin 0 -> 172 bytes .../b30de2c7691682047c8cc22fd91cd51bb24f981e | Bin 0 -> 399 bytes .../b3115835956d18e6b34b891b2330379549c7e9f9 | 1 + .../b3300750a97dde332fcffc5f327a6a97b9e69ba7 | Bin 0 -> 4113 bytes .../b3352485f8f27a3bdf328196f27132e6d2be7731 | Bin 0 -> 241 bytes .../b3397133baa9906c64b2edf53d516ce37695e04b | Bin 0 -> 45 bytes .../b33f99a7dbfd0234e11817c28c0dea46fd3156f3 | Bin 0 -> 75 bytes .../b34b790381f928f4035ae463871cb7071daf520b | 1 + .../b34b8fca7d22b9e512c28922f34b6133c462b748 | Bin 0 -> 2 bytes .../b3647c8c093cc530f363d5dcdb67b0381d1f2fa0 | Bin 0 -> 98 bytes .../b39bd00fc3d8f25e9f8ee1fc433620ce325ea16f | Bin 0 -> 683 bytes .../b3f04dd6bddc045b24d0b35cb2b325e6c83654de | Bin 0 -> 23 bytes .../b3f0e7139a715c71ab0ccf26ab38e01e840e492b | Bin 0 -> 17 bytes .../b3fa298de378e28183ed323c8f3142286d0deaf3 | Bin 0 -> 204 bytes .../b4226270e9402c7797bf213452ae746f7fe24fa7 | Bin 0 -> 26 bytes .../b45e030dc395b317dc9809e25dd9c81cee1fd124 | Bin 0 -> 86 bytes .../b4642540a38fedb7e2f99b2948be00503a69d5e0 | Bin 0 -> 239 bytes .../b47a4b3f55c8d6223dec28884fc68f7633f037a2 | Bin 0 -> 3606 bytes .../b491bb0314dc482d49683488980e88ad4f003b6d | Bin 0 -> 163 bytes .../b4c7c4aa4a0897726f45aa61b840726b0cbef86f | Bin 0 -> 3155 bytes .../b52362a6bfcac0a3bb9a5b5b7adb147b3bb8b9a0 | 1 + .../b543223c2409909de2224c8cdf1181922c4019a4 | Bin 0 -> 62 bytes .../b56d8133391d91b023fd0e06a09f6c62cc614f94 | 1 + .../b57e6b53a973e06138526ba9c25ee85feada4d3f | Bin 0 -> 595 bytes .../b58862574e93a90cfdac660e408a437c1415b7e1 | Bin 0 -> 83 bytes .../b5a2f4137fc391ef7078e4cf916905b5762283a3 | 1 + .../b5c25a3c24781db73e0367f5afba635b9eceff32 | Bin 0 -> 264 bytes .../b5c40cff2adc035646538d66bb3d9040c457ef07 | Bin 0 -> 46 bytes .../b5cd815a0e7c4ae3e1815c7b7c55c31ca27df163 | Bin 0 -> 10 bytes .../b5e2a02fb0d5ab2dc9f7708e81aa3e18cbae501d | Bin 0 -> 54 bytes .../b5e9595141036b13dbc278d7b68dc160ffd55706 | Bin 0 -> 264 bytes .../b5ea5798f6afb3dfb49344816e6ec310f2e1553d | Bin 0 -> 303 bytes .../b5f9aeabf62e54ecaf0718a4b08ed93d11e202ac | Bin 0 -> 719 bytes .../b63706a238c9f4835030ccf12a755aa9913336c1 | Bin 0 -> 408 bytes .../b648028a07a6df2e0a4b439d827865514ef5641d | Bin 0 -> 86 bytes .../b652a82ba3aa319829832356180246cc82411772 | Bin 0 -> 748 bytes .../b6543c8211f9bc93b7a8d37a6c81cb88484554c5 | Bin 0 -> 54 bytes .../b675401475977b94060d302393d4ee384125e209 | Bin 0 -> 11236 bytes .../b6a43202b4cd9511bd13c800edfdc76472901a27 | Bin 0 -> 324 bytes .../b6b028c018e4de3a34a8d7c9cfa7c97bde470f14 | Bin 0 -> 413 bytes .../b6b067e00bf0a73c6e158787f1fc081d1268e758 | Bin 0 -> 248 bytes .../b6d1f4d731a02d6837451ff743cd541096c1289a | Bin 0 -> 953 bytes .../b6fec8028b121bf299d68e8d2f73b28eb96d605b | Bin 0 -> 6338 bytes .../b70956194b26d34601f8b317b7a0172f67057c5d | Bin 0 -> 32618 bytes .../b74f52966228929fbbd575819a91242c6f5fc6be | Bin 0 -> 1797 bytes .../b7bacdfd0b8cda665fe19570071a8816cbd92aad | Bin 0 -> 218 bytes .../b7cc71c62749290d79d327da444bb2c4b34b52f4 | 1 + .../b7dc6c57419cab4f2285221280ffd8c41c918eb7 | Bin 0 -> 327 bytes .../b80ade515cb4cfa0d63fe7b449775a2cfb9178d5 | Bin 0 -> 517 bytes .../b82e27aea4aaa5f8099f73295977eef87641a504 | Bin 0 -> 68 bytes .../b858f1ffd19c9ffd6f8b3e7c906f2d23bfec5152 | Bin 0 -> 3249 bytes .../b85ae1c3bc9c76e35341a8e35ad44560fd7f7972 | Bin 0 -> 11 bytes .../b85af3177b32e37fb34ea876be48d1b9995e144b | Bin 0 -> 160 bytes .../b8602ad82d9f606f95f0623895a88df8aea03463 | Bin 0 -> 39 bytes .../b86656f595db621c0e68fc13b72b59ef052aca74 | Bin 0 -> 5576 bytes .../b896a1d8785a9726bf761ed20767b278b3a5a55d | Bin 0 -> 8 bytes .../b89d81ad1f9f27128a0728bd3a13d9e248208558 | Bin 0 -> 18 bytes .../b8a09d129aef2dd2992279c75a10716e176b46f5 | 1 + .../b8ebdf652a99ac408bad18477fd841c4541fabd0 | Bin 0 -> 580 bytes .../b909c6d0754416478da027e42d6182c5b16a7ff1 | Bin 0 -> 72 bytes .../b915212c5434b3c8ed7304e83272ddcf487999c1 | Bin 0 -> 21440 bytes .../b915aa1b5f3ac6964a826927bef4f7ed16af3240 | Bin 0 -> 197 bytes .../b91cd78d64af5d22ee5e61f4661ce111ceb1d91e | Bin 0 -> 188 bytes .../b93480ba9ad29a60d87f66cff4704e2efd53423a | Bin 0 -> 580 bytes .../b94e4b52f95c0707f964e428869e134340183708 | Bin 0 -> 4888 bytes .../b976824df2ee00847defe80bdae34d62043f755d | Bin 0 -> 6059 bytes .../b97d605bbd12a57cb782f50e71530016433b60b3 | Bin 0 -> 39 bytes .../b9b8368e4c518096661f46068963d319996dfa67 | Bin 0 -> 339 bytes .../b9c978b0b3441d3c45c07a49a3143c9e3aac4960 | Bin 0 -> 26 bytes .../ba145b7335c11e33b52f75815b1f425e93c5fba5 | Bin 0 -> 302 bytes .../ba5ae8499716a33f65cffedb0c18e3e99275b8e9 | Bin 0 -> 7 bytes .../ba5c8c03ddd29f071f8c3f9e013a326b85bc2543 | Bin 0 -> 52 bytes .../ba67c52a7438d98e5a397d6350c108304307859b | Bin 0 -> 19 bytes .../ba79209df00b766c3b242aef865a9814d876351a | 1 + .../ba87ab5e0c8cba3954836e861058d19ace6b110d | Bin 0 -> 5744 bytes .../baa11f7fb256983212119502740a38a9eadca28b | Bin 0 -> 1494 bytes .../baa7631578546bf3b2df47820de326fc0a0cdef7 | 1 + .../baa854d91f34241bf1b147d691e98280e3f1380c | Bin 0 -> 370 bytes .../badf9543776e98300123d41f0defda501519353e | 1 + .../bae50d491964d27bc5f8d1f8aba82eff1581b693 | Bin 0 -> 2512 bytes .../baf1c89a5128177706f082aa3cb7a7b12f933054 | Bin 0 -> 3904 bytes .../bb01adf15bf6e3eeed325f3a8ace826260b68b0f | Bin 0 -> 16 bytes .../bb1030e2301fbba64d6d7995bda689aaa23a10fd | 1 + .../bb274a198c6e65a627aabbb94d660c8b9ef9e370 | Bin 0 -> 6976 bytes .../bb508362b2ea5a7ea0a8a844b13a2894daf88b69 | Bin 0 -> 1240 bytes .../bbbee86ed3a330fd7c2691f941dd6c0395798a54 | Bin 0 -> 116 bytes .../bbd34163a46c69e05cd190652973cc6ba0886b35 | 1 + .../bbf45f67a7dc081cb221d0bf1bed6f4497604e94 | Bin 0 -> 2 bytes .../bbf8059fa2a470eb76bb944102da2b34747fcdcf | Bin 0 -> 7 bytes .../bc01ab63f472ec32c7fd1dbb4d641ffec14fe997 | Bin 0 -> 516 bytes .../bc1d039398751dc204d299dcd6162fc5fc5cac7c | 1 + .../bc30ba95b740183b919a4758fd7a27931e088d5a | Bin 0 -> 222 bytes .../bc3759c7569c6861a56afbb959873a90078aa87f | Bin 0 -> 88 bytes .../bc57d6a21df258304ce40cbead80adcddf71a077 | Bin 0 -> 3199 bytes .../bc589899e0b9b4bf80e276cb74302f83166ce124 | Bin 0 -> 20 bytes .../bc8f98701a834d2b0cca6875c983aff4f23fea6a | Bin 0 -> 26 bytes .../bcbb523243e1ad57a3d691a7a51f592496a24a3e | Bin 0 -> 6 bytes .../bce00bdbceb3eb61a254a2d39cf4db3b4f1a2a8d | Bin 0 -> 6110 bytes .../bce49c0418733ed411b2bbb9b5b31caa2aab7a9d | Bin 0 -> 11 bytes .../bd054192368f2e467d9f7c2a450d8d5fe89e2d99 | Bin 0 -> 2900 bytes .../bd1537a19cc45c0f0ef9cf2aa3d9b224992012e1 | Bin 0 -> 7 bytes .../bd226c6847442c72f4a7a45c106fb06033cd9e68 | Bin 0 -> 1400 bytes .../bd2f849bc0d30c2fbf19a4b0fff0760b1a78ac5c | Bin 0 -> 88 bytes .../bd2fbc35a7f5c9773a1af4fc3ec2cb1eabbf5a02 | Bin 0 -> 533 bytes .../bd328893629cc8ea5b6aab62019c946ae24bc18f | Bin 0 -> 3352 bytes .../bd36ff181f36ebc251716d7ce74fdaa0cfadc979 | Bin 0 -> 1505 bytes .../bd735d68bfec8d8c9e3152249f7f508d088f1bea | Bin 0 -> 5 bytes .../bd7ba152c48f651162aa4597a051400eb6224ffa | Bin 0 -> 118 bytes .../bd8d27c03321c663ee2f2ef8340d1f6d14e87848 | Bin 0 -> 1455 bytes .../bdb61cfd2239642fd1551a25429705813f1e6dc4 | Bin 0 -> 1424 bytes .../bdc61a463b076c8f2865ef8636919ddf59ab6d85 | Bin 0 -> 524 bytes .../be067dd243ea5210854d857119f9769bface8202 | Bin 0 -> 819 bytes .../be153163bc63fd9c464827368f0c868f0fb47b3a | Bin 0 -> 123 bytes .../be26d7dbb85efbaa1daae1155cec4aa4b3d7ed88 | Bin 0 -> 4 bytes .../be86afffb7185e770ce184a01f98d16db52ba848 | Bin 0 -> 6 bytes .../be94f79785b58e4b1bfc7ebe9d9c1d3f36817ea0 | Bin 0 -> 28 bytes .../bec68372ec59f130f1999ae6783b285f2ef44982 | 1 + .../bef02d3fa4dfd5a07ea256bcfca0b7e099bc235c | Bin 0 -> 125 bytes .../bef21cbcc1133ae6b1c4d14b7e5e80d2cfce4271 | Bin 0 -> 1236 bytes .../bf2d96e734dc999425186a4d0961fab5e550cec7 | Bin 0 -> 247 bytes .../bf3cbcd284991149870f0c8589aba0132b314488 | Bin 0 -> 796 bytes .../bf69aa2d8f3491351516ad4ab602c7d9aee15dc1 | 1 + .../bfafbc1f8d3a569877fd3028c330608c169d4396 | Bin 0 -> 84 bytes .../bff9cd3d2942e27ef1abaf545d8b0e0b86603731 | Bin 0 -> 2 bytes .../c003e18d28c953d60c8e49a3f6bd89ff47332dad | Bin 0 -> 743 bytes .../c01651522f449f2ae8b133d5c6ed23ffe11e6add | Bin 0 -> 1481 bytes .../c0795d8d10473ce2b965c6b5732b37e9dc0516c7 | Bin 0 -> 64 bytes .../c080e72b6f95e3db529114ed03affcb3da80b3a7 | Bin 0 -> 21214 bytes .../c095394481ba03a978f44e6a368ef429afbee103 | Bin 0 -> 1573 bytes .../c09ff95b3e4cbcb099f488d34aa1ea18e7443d47 | Bin 0 -> 504 bytes .../c0ab92af50aa5462323c78e13fa00cdb6c5d2a2b | Bin 0 -> 7288 bytes .../c0c991b4df371a064bb03d09b3bbd67dc3555963 | Bin 0 -> 23 bytes .../c10a68cad711bf05e2cc856ad2570d0911760492 | Bin 0 -> 50 bytes .../c122543149ab41fbf4c69fa726ce0248ade100ba | Bin 0 -> 18 bytes .../c12cce5d53296e1e6f932dc4c5c737962a445fbf | Bin 0 -> 398 bytes .../c16325347c6fbd9466cd0dd243441d455d83a81b | Bin 0 -> 84 bytes .../c16b1efb915bc9311a6e8281546fbcbb47a3ed54 | Bin 0 -> 28 bytes .../c1960d49bbae14da4b2404f8b5d16b67b6329de7 | Bin 0 -> 1583 bytes .../c19e92ce110a55fd7f821bae3ccb36821e464959 | 1 + .../c19f1a6b7d09997b84526ce60f5aa9344738ff96 | Bin 0 -> 212 bytes .../c1c53da63ccddfe545331035439b72c78a2ff6b3 | Bin 0 -> 88 bytes .../c1cc5fbf880ad6494c4ab323c052a62e9a7fdbd2 | Bin 0 -> 10 bytes .../c1cc6157b05b1d2104e5dbbb136aaece10debd08 | Bin 0 -> 325 bytes .../c1d5b3fac019f739a652862ab714d7c6c0ecf12e | Bin 0 -> 302 bytes .../c1dc72f0595e7bda17f2fe07ce0d49f43cd4a1e6 | Bin 0 -> 2349 bytes .../c2397e4ae34e05a196ae605b199133700f5d3ffe | Bin 0 -> 64 bytes .../c247b36aea11179c8bec95b66ceda7c27ad87375 | Bin 0 -> 7 bytes .../c24c5d7d21836400684c271f295c48f8fbc767c8 | Bin 0 -> 42 bytes .../c24ffe679d844cc26ac590f2657bd36de7876703 | Bin 0 -> 1192 bytes .../c254782dbbdcc58600dcf8aac9a093bd99cb87d4 | Bin 0 -> 44 bytes .../c294956dfb26aafef23596589636baa24cc54aa4 | Bin 0 -> 18 bytes .../c2a94a57865c5a9c549ccd75b7059ab2b044ba2b | Bin 0 -> 76 bytes .../c2ccf0058c0ac148d555300752e19bd82753106f | Bin 0 -> 5 bytes .../c34890e06a40739255391375927e5089701f9057 | Bin 0 -> 1438 bytes .../c355db977d23ca91df471f6d94ed3ba987b346ea | Bin 0 -> 12830 bytes .../c37b02a203ec5e12e572483b8e1d7206b78fcd8d | Bin 0 -> 42 bytes .../c3b757def3be6e1d59e019b24929467d528f417e | Bin 0 -> 8 bytes .../c3f43f0aaed26341c1c79662a47830f47f8702b2 | Bin 0 -> 2738 bytes .../c4a269d4ad54dbc436062daae38dbb056c32962d | Bin 0 -> 522 bytes .../c4b5c11d81076cceea1256755e279a019b73865c | Bin 0 -> 21 bytes .../c4b87603674457ceb056582ee4cdacf0ec73704e | Bin 0 -> 1228 bytes .../c4d25c459d45dd0cbbcd927200369bf8eaf63635 | Bin 0 -> 63 bytes .../c52ba0d987fe55367cfc83f0584e2b0627cbc148 | Bin 0 -> 7 bytes .../c56d7c8cf6a63ba227cd5b0de727c38185dc3c7b | Bin 0 -> 144 bytes .../c59a9b28c51cbef049b78fd83ceedc8a24e09ade | Bin 0 -> 4764 bytes .../c5be91eba8ddabff50ee01e7fce5c9c4c59665f5 | Bin 0 -> 62 bytes .../c5bf0141cd869eeb1b156136c00739fcaf14d954 | Bin 0 -> 25 bytes .../c5c11447b6f25358514bc769045ef96b5e5318b2 | Bin 0 -> 11805 bytes .../c5c9d2582b3b71d9176d68e3ad189d953d184741 | Bin 0 -> 116 bytes .../c5fd2ea08e5ecf24ebe251cf93dbea32b6f7acae | 1 + .../c605232b03ba98ac697bcab4c86cfaf19c6f839a | Bin 0 -> 4 bytes .../c6092399430f41e27ec2df5d3ce7f4ff0461a3c5 | Bin 0 -> 670 bytes .../c60a8295610f49f95d015ccbf75b3400ccfc79aa | Bin 0 -> 2089 bytes .../c615dc366a3730dc503ebbcd263cdf18da2ac78f | Bin 0 -> 94 bytes .../c62c64f00567c5368cae37f4e64e1e82ff785677 | Bin 0 -> 2 bytes .../c6413befb4845455f149ce469bd4522c42e5b408 | Bin 0 -> 80 bytes .../c6788837b6d05ed77976b7a2d53d6981d3e19422 | Bin 0 -> 38 bytes .../c6a7596b14bc7e4d7c5f23f3c7e6d8a17eda0b35 | Bin 0 -> 36 bytes .../c6ac98b9712dac48c58452253a2f5668e8ca970b | Bin 0 -> 284 bytes .../c6d6df5c7e60fb685c6799757d558901b702935d | Bin 0 -> 5021 bytes .../c6e0f5178836a8609d3ea811be088509a6e22568 | Bin 0 -> 6115 bytes .../c6e4fa780050047820f45ebe515618cbb811423b | Bin 0 -> 388 bytes .../c74e2cfa8e76521f69e26b967a064b51399bb713 | Bin 0 -> 28 bytes .../c7639de8641dc12f675107b0ce6aee03e1f4ca46 | 1 + .../c7ab897967f87f2cf2600d092f8cebfdc6525fa3 | Bin 0 -> 39 bytes .../c7b5e3dac72ddc362d6fa28a24eda024990241d5 | Bin 0 -> 472 bytes .../c7ccd5efe203c5a13ed04766b96ce2321a6ed08b | Bin 0 -> 86 bytes .../c804ab6ddada45f88e0d9a8b98284e8cd050d1b8 | Bin 0 -> 152 bytes .../c84ed7a5da41f8218dc3b4e9ea84ea4f799c412b | Bin 0 -> 246 bytes .../c8554142f22c54aed08a559270093519639dae4b | Bin 0 -> 87 bytes .../c866626a30050735afe520be286593acec8a61ec | Bin 0 -> 1600 bytes .../c8aaa8fbcc05ada438cb43dc955706294f23b541 | Bin 0 -> 7576 bytes .../c8c6ea97136f492b8102a16617e06cd5f1fdac31 | Bin 0 -> 3827 bytes .../c8c9adaba9616886741f26811fe1133f1c0ce56d | Bin 0 -> 88 bytes .../c8d85c2b7f806fab101607111eb1d56978da0812 | Bin 0 -> 953 bytes .../c8e4c320db802986ce8e468aa8c0d29f5f37f37c | Bin 0 -> 1612 bytes .../c92a280573d88099cb0485f61dfa9a35e1ad2f04 | Bin 0 -> 3131 bytes .../c942315310e8fd559f63c17a18c21b03ee7bd4a0 | Bin 0 -> 1408 bytes .../c98efa14eda6c9291b93ff30de0c081608724a9c | Bin 0 -> 164 bytes .../c9b0a64e16d47f9647ed34b984b6903ae05f6d1b | Bin 0 -> 207 bytes .../c9de9910a321fc469187410e0f86437390e4f5cc | 1 + .../c9eeb822c0166c6b368cbdbf9400418e64133b00 | Bin 0 -> 17721 bytes .../c9f18df416be1c1aac670aecb5eb7c0d0464583d | Bin 0 -> 25 bytes .../ca2c94823e68fe3774e227c2f2eb034393aae182 | Bin 0 -> 479 bytes .../ca5be6d4667a1b573e4b188b64b74edd7e7a4f7c | Bin 0 -> 2810 bytes .../ca67028115b32332db65e33ad903fe9b821c12ae | Bin 0 -> 656 bytes .../ca77a06cf1291f52b270a1781c78a882f6133273 | Bin 0 -> 826 bytes .../ca989ee55ea3896d0ca067937d862b908681c534 | Bin 0 -> 36 bytes .../ca99c69bc9e82f6d16a85f93da41188b88116257 | Bin 0 -> 11799 bytes .../caa257701568763b1a10bf459055eec313d2c95a | Bin 0 -> 88 bytes .../cab1c8a63cd68a48e79e9c90f7501d7979e1e6fc | Bin 0 -> 705 bytes .../cae83cc961b720100ceebb79114a1fd35409372e | Bin 0 -> 86 bytes .../cb159664b21748088cc0ad31e6ffe3c075b6d316 | Bin 0 -> 16 bytes .../cb2b8f8fbf380221b5f4de2fa8851b1191093f35 | Bin 0 -> 18 bytes .../cb52eb83d43c879034fe72eae6c69d8ccd6d6215 | Bin 0 -> 26 bytes .../cb531704f563cddc2b2309c7d2639090fe8beb34 | Bin 0 -> 80 bytes .../cb7dffe0975ab8348e2879ba2ce226107f9230ce | Bin 0 -> 121 bytes .../cb94c844e1d3f9815d987e0940f7c4c48c94b3a5 | Bin 0 -> 139 bytes .../cb95817b74f8657dcaf565e0ffedfc35d19b6bad | Bin 0 -> 17 bytes .../cb9d4d9733bda940d75ea6b6421e19c7b0b39c6f | Bin 0 -> 84 bytes .../cbb039950bfcf2b2c5342e1ec64f536059675bd1 | Bin 0 -> 118 bytes .../cbd094d36e4cfb12fbdc79bcd75a9a7e6d8f513a | Bin 0 -> 23 bytes .../cbe577f0e997afcecc26814bf2f79ae3b64eaa04 | Bin 0 -> 248 bytes .../cbe819cc37a3172f7fa0faf34b0909b95f7d044b | Bin 0 -> 42 bytes .../cbefb0f150d1aa2aec8782b821eccda113b2e3c4 | Bin 0 -> 672 bytes .../cc056d49ee57e79809eb3ac8e5b6406c8c812d8b | 1 + .../cc19f08c6f945f45feee7add14013cfb810e2f7d | Bin 0 -> 52 bytes .../cc24d39102e3f135f8b777e2a7f4bae5b0f39157 | Bin 0 -> 302 bytes .../cc2b0e3daf4879e1b01ce49447bf75eb01897b37 | Bin 0 -> 915 bytes .../cc2be9ea9cb8d74eecde275839d24dfc29ccc830 | Bin 0 -> 9409 bytes .../cc2edaee9ed52d96ad3e2356b05cbd13851a1052 | Bin 0 -> 42 bytes .../cc36e4534e0179a6d83e90033c4d5e9616be1312 | Bin 0 -> 304 bytes .../cc4d85fee6537c5aff58366694ae50ed02b02c0d | 1 + .../cc4f856b60d2146e231a7675d2b5bff8f839ddf2 | Bin 0 -> 66 bytes .../cc5e4a83984ab2fc29c77e13823f5d88ce09b16f | Bin 0 -> 71 bytes .../cc6d0bef6e22925774e63aaa4adde0a8ecdaa088 | Bin 0 -> 18 bytes .../cc7081726b4ce70a41213b31a2ff5a98e6afc663 | Bin 0 -> 62 bytes .../cc7b0169e53fece89224cdf244a2c91bb140f295 | Bin 0 -> 84 bytes .../cc979ccf99bebc94f85623ab5944477875763fb0 | Bin 0 -> 2088 bytes .../ccc5b935d438b7542e49277e59de8dd5e5b65e08 | Bin 0 -> 9152 bytes .../ccfdbae5c22edb280055de1a87286d861e64b477 | Bin 0 -> 1116 bytes .../cd0ff1826844fb45f4a6d1860d5a76398a39b71c | Bin 0 -> 44 bytes .../cd188d14b6cba24ce7c81cef65ed0be9df3c11d7 | Bin 0 -> 3298 bytes .../cd1a252f4a3f8d1c56e0ed1cc8ac6d77a62ceb33 | Bin 0 -> 161 bytes .../cd2eb8870287ae613b45f646dd94e32ff3f666b9 | Bin 0 -> 28 bytes .../cd38582ea60e007ec5080dfefadb4d133f07a91e | 2 + .../cd7b557e181c754d5cd2f088d293ee0db514f4ce | Bin 0 -> 28 bytes .../cd7cb3a18e56ce054d4033ef1ace9b34ca395607 | Bin 0 -> 302 bytes .../cd83a0338e86458ce15910b967620ff2bb546071 | Bin 0 -> 584 bytes .../cd8a1586c03d9e85304c696f8c5e3d0571f6dcd3 | Bin 0 -> 1688 bytes .../cd8e2eb998f11f71fd898e53ca2e64d5241940ad | Bin 0 -> 16 bytes .../cd9aeb9f43d9aadb4e36572c8a6b81aebdd52c15 | 1 + .../cdbaaa5d3b4bdbc279a5654b68fface99d1d28b7 | Bin 0 -> 92 bytes .../cdf6dbee4e86520a8b795f55a5e104b316c4b434 | 1 + .../cdf9703b4b5e757c26a383b3488d33ce769bef6a | Bin 0 -> 176 bytes .../ce228900764401b9f40838f5d386a497b0c74d7a | Bin 0 -> 2742 bytes .../ce231b5fff0a00950835369cec415101f3bd37fd | Bin 0 -> 25 bytes .../ce26a3e86426e26c54a1882be8899af6c70cce1b | Bin 0 -> 708 bytes .../ce452c7bb6e2d51ce21631d06ede6ef3ffc6b6d1 | Bin 0 -> 2398 bytes .../ce58445d799105f5c5cef8817413596205d5aba5 | Bin 0 -> 6465 bytes .../ce8dd7ebc4be518af70e62d42c37345664620311 | Bin 0 -> 407 bytes .../ce90649e067422a7998d835fc1ce502169be9a73 | 1 + .../cecc1c32f5c285a59d4360a89deedaf82e841633 | Bin 0 -> 1498 bytes .../cef0c0e94ed822e43c53375ffa374fe11596f213 | Bin 0 -> 4880 bytes .../cef6b2bf4e9e59e4966c715e2c1426f21b95a147 | Bin 0 -> 2173 bytes .../cf1e481ca385507cc793852f1eb7846f69c0d5cd | 1 + .../cf29e1cf97660655914462af8248429692ed5794 | Bin 0 -> 268 bytes .../cf2a2f6ce238ad89b75983ee437c71a7083a8d8d | Bin 0 -> 4 bytes .../cf2b56b2698409363ed7366bbfe7e856adfc25cf | Bin 0 -> 55 bytes .../cf3780d2a76a0c125f224e2f7d2033c939a14698 | Bin 0 -> 263 bytes .../cf610b55ba3715d27e75b338bc2c02c64be55e8b | Bin 0 -> 302 bytes .../cf646ec7887f8a0d2fe1884e43cead6a37e0ac1b | Bin 0 -> 58 bytes .../cf6e6a3112ce0d36f87c10e66cd7fbd1fcd23d67 | Bin 0 -> 53 bytes .../cf916257767575cb4ed5f5dadd782857348dea58 | Bin 0 -> 34 bytes .../cfd7fa7b46a826edef9cdbde52d4c8c9681ef7c3 | Bin 0 -> 832 bytes .../d00adaa01a4bbad56c04a5a00cef8600a7cc1a4d | 1 + .../d0121f4286c11b30479f92505ac6c90a3bee0dd4 | Bin 0 -> 16 bytes .../d026c5ae8adbef3d8ea6b8d3f96a3ab99c4c24ab | Bin 0 -> 25 bytes .../d03586acc25d6b61f6825e8d4729c05683c3888b | Bin 0 -> 5554 bytes .../d04c73dd55b5835d38f0dedba4bf071fb54e5168 | Bin 0 -> 223 bytes .../d06f9e5cb3214bcbbbe6e775b3362da756506311 | Bin 0 -> 4 bytes .../d070ff0e7785ae022b181e8d5e26555913dcc9a6 | Bin 0 -> 21 bytes .../d087cf73451b4512e34371bc4f520d97138edc89 | 1 + .../d098a3648f27e8de6d2c9ca6c9f67bdd8e50b53d | Bin 0 -> 302 bytes .../d09fc23eb07e7de8aa8571e36e5216d31e5d5411 | Bin 0 -> 20 bytes .../d0a448771e45ed54bad449ecff4e8f4b6089fd1d | Bin 0 -> 124 bytes .../d0afd058b2dc1d4795062d7054949dc525d7b62f | Bin 0 -> 2753 bytes .../d0b2f91f0e8dd7d618e78aebfb292655353c1958 | Bin 0 -> 152 bytes .../d0f24263284627f9dc5464bcb0bd0b37618d981b | Bin 0 -> 43 bytes .../d1148d87c656a843c3705fcff91bee449c32e154 | Bin 0 -> 8701 bytes .../d11b1e4d9226c715c8150736e77447896c608b45 | 1 + .../d1261d1d01157e39b7c03d7e4c6823956d9c3f24 | Bin 0 -> 226 bytes .../d13d2e9feb2b93ad6922c129d5acd9920f0d3eea | Bin 0 -> 19 bytes .../d1aa85d1ca315d5fce8d5135d854b1c043f98b90 | Bin 0 -> 39 bytes .../d1cc51b009e4ee27aa0f5ace1e5babf53bfde76c | 1 + .../d1cf847ae991c66726cca795703130bf54667e4c | Bin 0 -> 795 bytes .../d1e37d4b434709931ed682f3e0e81e8369766f51 | 1 + .../d1f9bf1ede2e0ee9d3e1e65a64ac2eb69c02c3d3 | 1 + .../d210cabb4a456899d7c46ca736c19fa45c0ec317 | Bin 0 -> 254 bytes .../d214ad350394d93f4225103726aaecbae83b912f | Bin 0 -> 143 bytes .../d22f2e4495f75c243507c06ddd67ff642aa3723e | Bin 0 -> 19 bytes .../d23b618ca095d26d476b214dd805b6a07d68060e | Bin 0 -> 52 bytes .../d247eb1ff06306229d0761144e7af448bbee7ccb | Bin 0 -> 1168 bytes .../d27baa2af3c80b44f0e69042bc7166d54ff419eb | Bin 0 -> 83 bytes .../d27dc9ce02a432b036f569e3258fc24f062811cf | Bin 0 -> 36 bytes .../d2b3753b1e04c63c151b60a1e9c92db8146e29f2 | Bin 0 -> 4347 bytes .../d2b64368f5b6c4ac8a848beffbd867b194efe479 | Bin 0 -> 518 bytes .../d2b84d203b91443fc8a048713282a2c69251f0c5 | Bin 0 -> 12458 bytes .../d2c9f9cfd36e55fde5c5ea69c5d8b853d4e30565 | Bin 0 -> 28 bytes .../d2d3ac082b7b90f93e4dc03a52928dcaffa744d1 | Bin 0 -> 2270 bytes .../d2dc4124627577820c77dd74179d920db529eb10 | Bin 0 -> 84 bytes .../d2eb6226d25a9d24d442d74177d078e3f2d1b99f | Bin 0 -> 87 bytes .../d2f691f183f0f9848892b3992059798210154b0f | Bin 0 -> 14 bytes .../d2fd9e22f6cf77b541a41978060dfa5bd779ce23 | Bin 0 -> 4 bytes .../d30def3979bd2f8ff70324740afa3cb5d8f21917 | Bin 0 -> 688 bytes .../d3224e26c4af3e1266afc22db325d40505c23141 | Bin 0 -> 317 bytes .../d3275c60f8b8dec2f29f65c3932dabe6755cc933 | Bin 0 -> 233 bytes .../d3437005576718f55fd500b66d1bb42d0c08417e | Bin 0 -> 80 bytes .../d3596402cb0c41c074954448474ec99054839462 | Bin 0 -> 87 bytes .../d35a0b399901334e71ea283042272b5268c2c4a2 | Bin 0 -> 2192 bytes .../d35e8967053b99ce659e09545f4607a065a68061 | Bin 0 -> 26 bytes .../d376c2d8c3756405f9cc8af8ba87a95649b6181f | Bin 0 -> 68 bytes .../d3a17d0bae91a7b66edc70b28624aa629974b7c3 | Bin 0 -> 18 bytes .../d3aa81f1e2aab78c41e7785c51dd06f9c1913afd | Bin 0 -> 6 bytes .../d3d5a579c88918dc04433db83ff45eedad339eac | Bin 0 -> 92 bytes .../d3e3dda4b78ecd0ffc2450492d1682e1f41ff40a | Bin 0 -> 818 bytes .../d3fa8085c7ab925da2b6cf80d1b9d40f93d25d89 | 1 + .../d3fd7d9b31abc8fc31692c61b7cb828b755d39b2 | Bin 0 -> 3244 bytes .../d4299176fd0ef5bc10be0295ec974a7c974329e1 | Bin 0 -> 4070 bytes .../d431f83af8db5442820f5b1ea02832889e8ad8cf | Bin 0 -> 377 bytes .../d4400ee4610ea426136c381c9f0de56828079172 | Bin 0 -> 1079 bytes .../d4527e8e0d4654db77826eaf0ea76dbfa771dae1 | Bin 0 -> 474 bytes .../d464aba713059ab750552a99bfa350d7a2caebc1 | Bin 0 -> 1227 bytes .../d49f77f94a07680575c7a7e010301a01e2bece8b | Bin 0 -> 1440 bytes .../d4a48af913844917b109e61007228073326daf20 | Bin 0 -> 9 bytes .../d4bc8b7de459e4db5c6e220074289bb48c521347 | 1 + .../d4d3108fd84c5f68294e82a1d82b06ffd8445e9a | Bin 0 -> 171 bytes .../d4f6abf10c9ff592297865b8adbb595dd6a505cd | Bin 0 -> 408 bytes .../d508e15e6ec0c941b654a2287f559af8271f9e7c | Bin 0 -> 28 bytes .../d511e989181a87623d5314a50dcfe9ce9f9a31f7 | 1 + .../d51bfc30f67e51e1558a108dfaa4716a6a44bf3f | Bin 0 -> 7 bytes .../d53eb47a65b4d438afb8477b043a77dae46f9872 | Bin 0 -> 8597 bytes .../d56ac8d6bf652c4cc29f98c9bb3e86f1427234ae | Bin 0 -> 26 bytes .../d5781afe30e76939778259404aa133dbbb6fe392 | Bin 0 -> 4 bytes .../d583d1f01544886059ce6e762040140a27c6a85a | Bin 0 -> 18 bytes .../d58c21c813f56eb770f64a8d4172dcb0f004e102 | Bin 0 -> 4 bytes .../d5914f780464dfff3091e32909216ac7d2ff65b0 | Bin 0 -> 18 bytes .../d597e99a34cc1dcabdb857dc9139f288ed2435f6 | Bin 0 -> 196 bytes .../d5c295c32ba0ff69fb4bc1da2140d5854ef5dace | Bin 0 -> 85 bytes .../d5f0dbbe22f0940c6ae4ae0334b5b05cd01d6931 | Bin 0 -> 90 bytes .../d6161326ff1b8acd585f829e887a50d8c1153c8b | Bin 0 -> 19 bytes .../d62f136ae2083c8c8e15bcc79883f43b665bd31d | Bin 0 -> 3073 bytes .../d645885314dd3f8386822a933605a49161a29661 | Bin 0 -> 655 bytes .../d65461c4a019ba64f80390c296fc8d6e18c70631 | Bin 0 -> 80 bytes .../d65b64d7799e333a54cbf7b78e79beb72015a029 | 1 + .../d66da730822693fea95bcc7b57e5e4d27e6024ed | Bin 0 -> 264 bytes .../d67c74dbed723e2cd0a515865111d8244d8cf49a | Bin 0 -> 6 bytes .../d67ed7a4539f4f021f4fb6433e6c3221dcfacac8 | Bin 0 -> 11 bytes .../d68451dbc794cdbf1db1756ba559422373f880c1 | Bin 0 -> 16800 bytes .../d68c0f9ac58174b28ec80ef8bbf197bb2c54b068 | Bin 0 -> 21 bytes .../d69886317d59e90d70f2a28302d7c99ff286336d | Bin 0 -> 792 bytes .../d6990bb64f22f00dec1d41d1204b1dc8936e0474 | Bin 0 -> 52 bytes .../d6aa1472cbbf583cadb1ec31d0afe0a27669c79f | Bin 0 -> 5 bytes .../d6c94b1a045e523cdc15c25fc34cd7ec71cf8cef | 1 + .../d6d27306ba42895301ab2135a3f7e1f5049a4736 | Bin 0 -> 4312 bytes .../d6f3b69c66ec5b85efb111be98a57a6d9b4fb4d4 | Bin 0 -> 48 bytes .../d7182d6dc2c35e3cbf927f3c2254abdd46577abf | Bin 0 -> 1136 bytes .../d73f2accd04ab2607226fab006ed4c9c285c8a7e | Bin 0 -> 28 bytes .../d74ca33e2c1c19826bbee6f9b729438b04b1cbd6 | Bin 0 -> 3439 bytes .../d7654d4ef383bae283ca764a013aad2a4d4c6803 | Bin 0 -> 1041 bytes .../d772ed65628d22f1c8d4077030b315aa27214cfe | Bin 0 -> 31 bytes .../d77660a9513e0ba53dd7662cd04d29244752d794 | Bin 0 -> 39 bytes .../d78fb9d504bc418ce95cdbbfea89cc2a356efaf3 | Bin 0 -> 49 bytes .../d7910856965d1e6aed477647b3884dc082592f20 | 1 + .../d79a0bbc3dcc5f595d5feed5592a7945af8771f0 | Bin 0 -> 43 bytes .../d7a2246159c8ffbf2d652b5c5e2ae7599af47d56 | Bin 0 -> 4 bytes .../d7af492893f259ebf1c18d1feb23be283559f18b | Bin 0 -> 52 bytes .../d7ba5ae1ce1bdbaa03b3ce5ddfa4b35c70e8d0a0 | Bin 0 -> 246 bytes .../d7bf5a38bc69378f706c5835250a608214a986d7 | 1 + .../d8153e501acad522fbf0b7f85418f68af7677170 | Bin 0 -> 9036 bytes .../d82a9094182822c8353f733c6dad11d6093f0344 | Bin 0 -> 34 bytes .../d842ad48bb6912824a1327a96e3fdb9e3586b16a | Bin 0 -> 8 bytes .../d84ddfa19cf2269d13966fc5e86cc2ba5a88c673 | Bin 0 -> 208 bytes .../d85bf06827da26861786e9c22ec053aea27306d3 | Bin 0 -> 280 bytes .../d867a0c7f1ccb2293b8f33c0a3aa7968251fca12 | Bin 0 -> 11152 bytes .../d869b1dbeebcec73a70b2b39896fa96d95918a0b | Bin 0 -> 828 bytes .../d86c57fdeae2f364452d20cae7b63f9170325ca2 | Bin 0 -> 19 bytes .../d89445cf9291cbed95a84e8908eedb9031060e78 | 1 + .../d89e23614f89191517033fb4bf71f3491f388b90 | Bin 0 -> 3160 bytes .../d8d41a04d35e40fde2aca4890cb7971145c29829 | Bin 0 -> 1030 bytes .../d8d5609a3b69827cf1417f30331e9bcdce336ab5 | Bin 0 -> 392 bytes .../d8eb0c2e0a8e728d116d37a908faf6486f5fb30b | Bin 0 -> 876 bytes .../d90150cfcf01736a4e3c2736f4ff9ea48e1a985d | Bin 0 -> 7 bytes .../d90944e3c07984d5b22abe89e186e556f71e92e4 | Bin 0 -> 53 bytes .../d94243ada214b89c857936a2226d8d329824d073 | Bin 0 -> 96 bytes .../d950958da0e080486191340007389aed57c84042 | 1 + .../d95819332791622a213a3fb495b9e172a924bd8e | 1 + .../d95855d9bd40bbad46173c04b77e93ded0ad5382 | Bin 0 -> 10 bytes .../d95cc1d5b586590d1d73df70b3f48c30e5f975ac | Bin 0 -> 181 bytes .../d96150f3fa89a7ad792dcdaf8ae1c939a586c83d | Bin 0 -> 49 bytes .../d97175932017384ec6c606d8ff4f08870eb85af3 | 1 + .../d97a1b81f1cb36afc1b8f14ab048340eb94c7758 | Bin 0 -> 55 bytes .../d99002a26147901219444289fb60211ad997bf75 | 1 + .../d9eab47bf937954408a4872b51067b50d94c3e59 | Bin 0 -> 171 bytes .../d9f353d8db67a662e828c3529d410b8788c9c969 | Bin 0 -> 772 bytes .../da15f11a5a8c3bc134fca11016631e1d2aa6f173 | Bin 0 -> 4 bytes .../da2406003a932236cc3609e1ff20afb9aa639c51 | Bin 0 -> 52 bytes .../da44cc3e027175eb5a19a615c37499d6da79c091 | Bin 0 -> 12432 bytes .../da9d732e5901da9ab2da823e04ff3c4348ddf02f | Bin 0 -> 43 bytes .../da9f4242af3878dd0959739a20eab9ace0f1a1b9 | Bin 0 -> 187 bytes .../dabb0edd67910a500b399e6162b811d4a7351d82 | Bin 0 -> 79 bytes .../dac2333e7eccdd1103c878e3f5e6f63d70f6e97f | Bin 0 -> 19 bytes .../db11083d687f820144fdfa130a7bdf83844c3c55 | Bin 0 -> 18 bytes .../db2269564b637ba827e49dd1f2336b629588342c | Bin 0 -> 28 bytes .../db5f2ea41b72e62469cff1682aee83b61018d1c6 | Bin 0 -> 4288 bytes .../db71debce565a6f8c4cd9dad27b1d09cc9f725a7 | Bin 0 -> 6664 bytes .../dbc61a88e3a83b7d8560d52742300164c873f743 | Bin 0 -> 147 bytes .../dbc88d54356bc9b5395ca2db6485206b36cc6c63 | Bin 0 -> 2728 bytes .../dbd75e4ab802fd93e8adad64c922551ffa7c97be | Bin 0 -> 26 bytes .../dbf95922d9e430e2278fd0b6895465080af8c6bd | Bin 0 -> 115 bytes .../dc0925707bfd60c3d35cc3ecdc4fef1923982cf0 | Bin 0 -> 35 bytes .../dc23bc68a48f5a471ae1714cb28e843972cbd4dc | 1 + .../dc23e58d88d7d1adbb08d57a06f110b85441b881 | Bin 0 -> 29175 bytes .../dc2da23c390f3a2c9217eac960dde5e9dc8190c0 | Bin 0 -> 252 bytes .../dc2e38734348825b6ff3e9d4b83c761f90cce77f | Bin 0 -> 4076 bytes .../dc2e3f47516efd31323a792d7a41482b7bf948d6 | Bin 0 -> 85 bytes .../dc37a22e1141181601bc2c9a28d1bd93504426b0 | Bin 0 -> 1376 bytes .../dc42450e32a3438ee0c6fe4ac59662e287604eb9 | Bin 0 -> 26 bytes .../dc476ff74fe27832b0b3404a49f70526285db635 | Bin 0 -> 21 bytes .../dc4fa9c2483a6ba516cc1b705cb444cee967f142 | Bin 0 -> 3049 bytes .../dc5181470b4713145f86fa951a7d5149cd88ccb9 | Bin 0 -> 20 bytes .../dc577d4f575456eda9455a56141e459a1e4ff5b5 | Bin 0 -> 92 bytes .../dc599d2a2431d464f9c87adb13ffbd282a071897 | Bin 0 -> 302 bytes .../dc846f2f9ae8eea32d63c133dd6b24e557e79387 | Bin 0 -> 28 bytes .../dca1fc7b2d098a849d343996e98ff575d4228a8f | Bin 0 -> 233 bytes .../dce53c13a5af420543e220be11daca141d05b6ce | Bin 0 -> 10835 bytes .../dcfc6d09e62b00d868d04806d8229a7c3a0737f0 | Bin 0 -> 3523 bytes .../dd0eeb6f0360d485db794f4e75bcd7ea6ad389ba | Bin 0 -> 18 bytes .../dd11927c0b366a4697a123671d9507c3a6b7749e | 1 + .../dd15a197ade78c890ec64ab5581c2566eb0c057b | Bin 0 -> 172 bytes .../dd2eca2b1df5087d0798eafbab531cb2e80840a0 | Bin 0 -> 368 bytes .../dd64b13923546dd3d451e409316f4fa9c9a8c1d3 | Bin 0 -> 3972 bytes .../dd7602ea1be05cbc125cd9c0b5beabe38b8ff1c2 | 1 + .../dd7de2653360fa707cd7acd5fc12d59c785b8256 | Bin 0 -> 86 bytes .../dd8541f6e087ac5f40377f6fe85639ea45cc8b2d | Bin 0 -> 4 bytes .../dd9809e0526ade3e7ec36c0a91700379634874ed | Bin 0 -> 268 bytes .../ddc32b9ab8a273e10a14f149b7ab4e60cb047a4e | 1 + .../ddd667feaa595b64947fd920f59b57a702a4e89b | Bin 0 -> 1817 bytes .../de0426f0b8c9b1cc85f9e55611c6544b1e4c9eeb | Bin 0 -> 1633 bytes .../de115beb1a7af70eb0c0ccde5425ed349ca34a2f | Bin 0 -> 464 bytes .../de2be1373a29397bfccda5bb5dcbf58ec5d16087 | Bin 0 -> 999 bytes .../de6221172414204f3069787d5cf5997cccefb0f3 | Bin 0 -> 27 bytes .../de6ba606b3ed8d29918f732777ac742ce7bc54fc | Bin 0 -> 110 bytes .../de8204c55bb8aafe25ed90be2716d3884381e5c4 | Bin 0 -> 68 bytes .../de8e59bb5de013395ae1a50efd9e107a18bc62ab | Bin 0 -> 1716 bytes .../deae4b9588238c2eb246086841ba3d71cab970b1 | Bin 0 -> 67 bytes .../debb8160914ae09af59440bc3b49f99fba9363c5 | Bin 0 -> 26 bytes .../debd7624150e98b89ab4d55f50e23fb30c97b70e | Bin 0 -> 62 bytes .../dec19109a9afc17675a0d892685a6562ced2fdfc | Bin 0 -> 23 bytes .../decc923abc4765fdc89e2f5e4896538567a08768 | Bin 0 -> 31 bytes .../deda7966624f9b164667eb53be283fa0bcc01774 | Bin 0 -> 80 bytes .../def3882af4df1df49d07525776058b0a588e799a | Bin 0 -> 98 bytes .../df1a7c20a09f3a09a0f99fa188787c7f578f8492 | Bin 0 -> 3999 bytes .../df30174edf550070f94f45c0f0690edc8155194c | Bin 0 -> 1821 bytes .../df3568138980fb0296ddf10f9a28a22643a20930 | Bin 0 -> 1006 bytes .../df8a5aff28a2ee844fcf32ce641990ac3e960f1a | Bin 0 -> 8 bytes .../dfb345b5ea21bc26994850122a72a416e13bb4c3 | Bin 0 -> 7 bytes .../dfbf656468c39eb1b4282259e6d79e1a33c33cdd | Bin 0 -> 20480 bytes .../dfc81a8ad82d7b9b3e8887f9a7f9a0c4cf6c68ef | Bin 0 -> 728 bytes .../dfed7fac45090de4c6c653e19d28cd5383386c69 | Bin 0 -> 221 bytes .../dffdbcb0b87562e8a71f736da906f7070d49bef8 | Bin 0 -> 40 bytes .../e001ac66da4635ba88e755c8c109a80446250a4e | Bin 0 -> 472 bytes .../e0158333cf835f34a7a49f51c494c5c9ad99b314 | Bin 0 -> 5560 bytes .../e040743ad6fc73f7f75d5eb1e553d8415302ccc9 | Bin 0 -> 69 bytes .../e060ce99abf74051e12f885572cf6e93fac4f400 | Bin 0 -> 503 bytes .../e065f0f303798f73edf61d4b66e19e3e06a551bc | Bin 0 -> 12929 bytes .../e076ba3e6633d04d7bfc32a48e1493cd91d2265a | Bin 0 -> 202 bytes .../e084099689df42a17270fd1c021fce8cf357dc69 | Bin 0 -> 16 bytes .../e0af9d5bdcf7724b7ee725970add794f044d736c | Bin 0 -> 89 bytes .../e0be24467d0fb242760efadcad787af2a1c53568 | Bin 0 -> 272 bytes .../e0d24318aa8ba0e189382a1c08e691cb15c88949 | Bin 0 -> 302 bytes .../e0d75ce12dd73cffa9b4eb7f5f6614aea2095d1e | Bin 0 -> 1841 bytes .../e102014e0692f0034a7dc9cea493bb4fe6af637f | Bin 0 -> 88 bytes .../e1052dcae647c6b033fb2b8610873fbc4f4863ad | Bin 0 -> 169 bytes .../e12f031910c09d6e15a0bd18f881816f3dab2c7c | Bin 0 -> 17 bytes .../e1315276decbd24a4e1e203a99c668f8c5d9fabb | Bin 0 -> 62 bytes .../e13b9b09912810d5dfb6bae75a455f709c47df13 | Bin 0 -> 2648 bytes .../e13b9b7223afbd4804fb01ac8523061e7b69b47b | Bin 0 -> 172 bytes .../e14e31a2dcc884f674548575ae7ae35c4a8eb7fb | Bin 0 -> 2019 bytes .../e1688dbdcdb2da09b6e2d32d27ed72ad9fd54ab7 | Bin 0 -> 61 bytes .../e1759e953b035a0608f189542095629817ede830 | Bin 0 -> 52 bytes .../e1d9b8fa24074cd110a65682a630f8ddf76f6b5c | 1 + .../e20a8225c86380d668229b784f3cb2f31302b656 | Bin 0 -> 3288 bytes .../e21afbca48d619afdfb35abac093adfa0b424f59 | Bin 0 -> 5248 bytes .../e252b9a2ceea61fc7e571070ba176b508d165171 | Bin 0 -> 100 bytes .../e2541434944981cc97ba1b4e9aa2ce220c0cbf4e | Bin 0 -> 293 bytes .../e25ec2839a1f4f67ab05d4f561f7d5bc0037df4c | Bin 0 -> 8 bytes .../e266216386f75257f625caf5b7a56a6f985c162f | Bin 0 -> 473 bytes .../e2692bce0497a7d1715c61c9f8afae4a70b487e2 | Bin 0 -> 1592 bytes .../e26ca817afc6229a8084d7e3463500ca5cf32cb2 | Bin 0 -> 10 bytes .../e280d065a824a791f8305234d3e093fc9a5a90c7 | Bin 0 -> 2 bytes .../e2fe116f92c906e1cc43a6456f2603ce9ae0f51c | Bin 0 -> 6707 bytes .../e3102cdc85fb3c26ce6bf992afba7e1a65538b2b | Bin 0 -> 125 bytes .../e323b89821453cf6a51c1ac78a6f7faade9be109 | Bin 0 -> 8103 bytes .../e332aec6ebc9b2d794b89fd559ae94d5df62f018 | Bin 0 -> 760 bytes .../e34574e4a907ad6212bf589860a6f72208e433a7 | Bin 0 -> 84 bytes .../e366a75239894ca54ec000fcc379a9c2588b805d | 1 + .../e36747234db2614e3887edccdd58c6a62b1b0702 | Bin 0 -> 54 bytes .../e374437c87e726c065ff1aab5c5c14b300b81586 | Bin 0 -> 18 bytes .../e3a55a1ee8422b055b3043f96d799081f264ba99 | Bin 0 -> 2576 bytes .../e3a576a4f120eef80c0dfac3938f1d76866b67fd | Bin 0 -> 18 bytes .../e3aeba3629cc88e6618ba90be5ecc2a3965cf373 | Bin 0 -> 9 bytes .../e3b4f33b7369a8835aba8113c00c2b0463e2dbd8 | Bin 0 -> 340 bytes .../e3b93bef1469d4f78a05fde7801e3d7e2ad06b73 | 1 + .../e3c360383ee92a71305900ca42aa4519b3d98441 | Bin 0 -> 8 bytes .../e3c96aca3631a330686f3a29fb18960889e9ad4b | Bin 0 -> 116 bytes .../e40b375ab3e955f044a370ea347cc3707bcbbbc6 | Bin 0 -> 1255 bytes .../e4156b3b149d414511a7ea1a42ea0ebd7746625b | Bin 0 -> 1052 bytes .../e428f7f3cd8c4c49c930206acb889620a5c2511f | Bin 0 -> 21 bytes .../e42bc86af679ba434e8237bfa3bb4bdacff999cd | Bin 0 -> 93 bytes .../e43b766174a8b2b9882c2d988ca986cf928602fa | Bin 0 -> 172 bytes .../e45881c1b867106ed1c31a4edc37f58be81b79db | Bin 0 -> 1784 bytes .../e4858ba5fc7e739d17ff0c0f8813b3fc1fa262b5 | Bin 0 -> 20 bytes .../e49d1ed33e4c5f60580624db6422938115f2b831 | 1 + .../e4ac07665287db3b063d76bd3663c7c673a604be | Bin 0 -> 6214 bytes .../e4e612a57916d5609261e4de43918f09a3cd2b89 | Bin 0 -> 90 bytes .../e52c0485fc776243a9e8ebb7d85dd7a4dded5fe4 | Bin 0 -> 67 bytes .../e555ea73831e9b26adeb2b8bcd7eab9e6cfa89fb | Bin 0 -> 22 bytes .../e55c025dd0ecbca23225cd281f4d8ee48c514293 | Bin 0 -> 26 bytes .../e55ca912add0d610327ba0bd51dcf17e0f8c7f76 | Bin 0 -> 1643 bytes .../e578cc428ba20330f3e9ad22788dc11a953098b9 | Bin 0 -> 23 bytes .../e58e6a71445477600eaa7b2e67937756726e6058 | Bin 0 -> 720 bytes .../e593d8b973848f530b066885d7c6042116df9b44 | Bin 0 -> 647 bytes .../e5a7be5446431aa7edbb2ee3e3dc9e5683096377 | Bin 0 -> 16 bytes .../e5c8c3d0d47f3b1f8c90186dc7e68b5ab192c935 | Bin 0 -> 2224 bytes .../e5eecb94e56e34b800240cd2904b207a8ff272fa | Bin 0 -> 151 bytes .../e5f5b991a2421cfbc44fdf56980e45438a1672ef | Bin 0 -> 174 bytes .../e5fa626ceeb3301968da9fb7f3ba583d4815a46a | Bin 0 -> 800 bytes .../e5fb7e94d67afbebda26bb4daa811fe1f03ab990 | Bin 0 -> 52 bytes .../e603ac10f3d35e66a15374efa4e6d9b3433eaa4a | Bin 0 -> 62 bytes .../e608ded1c24ccb29e35f6276384a62f512f491c2 | Bin 0 -> 728 bytes .../e61f0890a5f43b800545b27c8f883a6f35e2111d | 1 + .../e634182c80d87d86fbdcf36da47518a297d4f346 | 1 + .../e63829ba01838973785cf94e015842733ad851ff | Bin 0 -> 104 bytes .../e647754911f47b8254d4d9f55226e6ff7447ca22 | Bin 0 -> 563 bytes .../e6587a01fa64c3414dfb4e366508da3579479994 | Bin 0 -> 390 bytes .../e66040ca4ae5201f3fbc0794de49f859e2c2c35f | Bin 0 -> 4104 bytes .../e660ae00341bdb7e944783e48b6943d9a236d8ad | Bin 0 -> 16 bytes .../e6754ecc89e89f9cdacaedd05cab8a21aee3d263 | Bin 0 -> 5554 bytes .../e68c6ad33928539c017e802832f7224ac9e513be | Bin 0 -> 232 bytes .../e697bb75dc3b99c609e8f7cf2c5621f2151971fa | Bin 0 -> 119 bytes .../e6a355b6c2b453d0b066e0c5570d324671ca8a46 | Bin 0 -> 21 bytes .../e6e566b306c1fd8ced987f82483f8ead3784a082 | Bin 0 -> 199 bytes .../e6fb7495df08b11d115d89cec4cf70d3cdb2b933 | Bin 0 -> 88 bytes .../e7156a9847caf804c71addb290ef589f7fa0bef6 | Bin 0 -> 4144 bytes .../e71d545d292db6951963875d6a45977ceb344217 | Bin 0 -> 64 bytes .../e724f6f09f2d5802acf380baa095364085d7aa8f | Bin 0 -> 4 bytes .../e73d4087e9b37bad2576462775c627727d346eb1 | Bin 0 -> 136 bytes .../e75166020278cc1364ad121cce9bc91e6c6aabba | 1 + .../e7a04d5432e2efa7a3faea4535f87cf32b01976c | Bin 0 -> 13 bytes .../e7b7549b1f7b6d407428adc2ea574d2d6bac0edd | Bin 0 -> 493 bytes .../e7bcec9f52ca77138086480b0b589296e9229c82 | Bin 0 -> 816 bytes .../e7d16f9f208b9d4a230a82955bf706688b53bb42 | 1 + .../e7ddd4b5d1da6bd5a65ca24a575debac9de95fd7 | Bin 0 -> 1297 bytes .../e80f26cff0d3c7c7c7dd66373e3132e0f38664c8 | Bin 0 -> 69 bytes .../e812bbbdd7984d227bf68d313751506a8fc05110 | Bin 0 -> 26 bytes .../e81b381a8cf2620a12975afe95c2cd577b1f8377 | Bin 0 -> 1938 bytes .../e865b53ef469b2e4e49908648e7371f4b9a750e0 | Bin 0 -> 397 bytes .../e86815b2e80708797425e856aa7706d991fb56af | Bin 0 -> 381 bytes .../e8682365dcd5e729d87aa63869da99fcfdbd3523 | 1 + .../e876fc7830379f7b936740965403f0f177f68f42 | 1 + .../e8814a8dc238ea5d54bdc0e60193e5db3b0c06bc | Bin 0 -> 167 bytes .../e8c260dccd897de268632300495ad247224ea8f6 | Bin 0 -> 302 bytes .../e8caa2a0b9c2552a0e71b2f121e5e98b9a57cf9a | Bin 0 -> 154 bytes .../e8d0332bb9f3a36c8a944df1a02d8020694bb897 | Bin 0 -> 26 bytes .../e8dcb94f3c0a0942df689750803eb1ab949f6149 | Bin 0 -> 800 bytes .../e8de420c4c9ad4d312d4a15fd597c90efad401ff | Bin 0 -> 300 bytes .../e8ebb9fd3795c6d27a41f6c44b7ff266c8223456 | Bin 0 -> 18 bytes .../e8f18d3ac417ebf164db46311e09829e65ed70c4 | Bin 0 -> 84 bytes .../e902d1891eaff3f7f4743520cd469bbe2af12456 | Bin 0 -> 1396 bytes .../e91fe173f59b063d620a934ce1a010f2b114c1f3 | Bin 0 -> 2 bytes .../e92768057678d042f234df6962ee1f4ce60de906 | Bin 0 -> 41 bytes .../e92aadad670ac157f7cd357ef18863370a632f45 | Bin 0 -> 16 bytes .../e9435df1c7fcd8767c0dd744a6117f5dcf55d3ba | 1 + .../e9520d25d07b9d7f18d6afe077da37892c178212 | Bin 0 -> 26 bytes .../e95238a620b9e7cda9bd57c1a760bc521cd68cc1 | Bin 0 -> 136 bytes .../e95f410c3ca4f39ee0b3a2aae1ac1c499010a70d | Bin 0 -> 800 bytes .../e9e262d9dfa501e19f1dda51788ec52a3b3b7866 | Bin 0 -> 23 bytes .../e9fb098224d2e7d9da6f9ed4d002d5d512b3fe40 | Bin 0 -> 8597 bytes .../ea19795056b4a88f746391b1c85d1ef39c9e76ae | Bin 0 -> 676 bytes .../ea53e1b19de174b7beae5100e22778e08add7464 | Bin 0 -> 673 bytes .../eab8c67aaed43045bf5487bcfb1aba6c03c283d9 | Bin 0 -> 44 bytes .../eabc7f16d1be1aea8c18d3da9098425fb87da1b6 | Bin 0 -> 231 bytes .../eae57b40f26c28728fff17b2f1817d5af54ebe33 | Bin 0 -> 16 bytes .../eb0ef603dfd8c1c46f4423d775f38b0a14d5b601 | 1 + .../eb2ea62a45fcbe766e51014ee8b15bf9f7b09544 | Bin 0 -> 797 bytes .../eb4c37290e6ab3f4f3cd987875a72f67b320235b | Bin 0 -> 44 bytes .../eb598aab68f7b48c2ee912d75acddb5014001dd3 | Bin 0 -> 19 bytes .../eb6e6ea86afda2dcd0da1f9c7218d7836c03dbca | Bin 0 -> 302 bytes .../eb72d9dda18bbcca933f8ae523501a1d9bba3dc0 | Bin 0 -> 1054 bytes .../eb764c79c4827331edf146c6167690a22bd37663 | Bin 0 -> 84 bytes .../eb8e9b97a43e87f67acecb84269a371cda21b7de | Bin 0 -> 316 bytes .../eba1eeb25e79e37a36d8188ec7be5bfa8405d3cc | Bin 0 -> 88 bytes .../eba22455be43c9e35237cfa1fb9d4b6a142d353a | Bin 0 -> 26 bytes .../ebc747cb389183e181504a0055a6a3f9f26ac8da | Bin 0 -> 741 bytes .../ec1382d27e750ef8d85f1fdd0799b0591439716b | 2 + .../ec315ad86c517663ef73adb4b8f3372baba22c7a | Bin 0 -> 11 bytes .../ec341ff29f2a53e7bdc05e7cfe8cea46d1d7b4e2 | 2 + .../ec3cb23c589f0871e1801377e6ef03c422cb971a | Bin 0 -> 132 bytes .../ec80306d3ad33a6acedf815184472046b1da1815 | Bin 0 -> 219 bytes .../ec99833a2e6817ab8230d4d70801af86273c37bc | Bin 0 -> 67 bytes .../eca0e50342d512d337bf2422db9bd7f55073f96f | 1 + .../ecae4596f5455a084b0f633df7b90b0f0b087de9 | Bin 0 -> 2768 bytes .../ecb3a8f3d55d588365836df7566b7af11f43c3c4 | Bin 0 -> 72 bytes .../ecd837ea646bf43316af0d32bcdabd2be4fa8bfb | Bin 0 -> 3055 bytes .../ecda94c04e83e58927fd2dec901a11a485e722f2 | Bin 0 -> 172 bytes .../ecdc37e91cbd90fad09d6a25e6bdbadc451f69b9 | Bin 0 -> 358 bytes .../ecfb2d1934d2afdfc7e85e3ec03078b9514495ad | 1 + .../ed201fe1f49f01d3d6125e9378c4c6b94496d6e2 | Bin 0 -> 12208 bytes .../ed30ddf2dc52246604dacd0bdaf715699903756b | Bin 0 -> 25340 bytes .../ed31cc7de2245df753797a0644a666897d5cb85a | Bin 0 -> 39 bytes .../ed557d8ecde1b1dfed30ebdfd60049ef6aaaa840 | Bin 0 -> 916 bytes .../ed568b63e7367edf8c7829d0036759d515a547fa | Bin 0 -> 67 bytes .../ed5e3c3afde5353320ef5adbdb07f3fbb6672b77 | Bin 0 -> 170 bytes .../ed7df7c3cdf9219817c579321229faaf0eadd2bf | Bin 0 -> 325 bytes .../ed84001e961c4bb4dbd474ebdaf7e3e2a5b34049 | Bin 0 -> 804 bytes .../eda701d6f2aadc9ec7ac9f8a0228a7db76d6f43a | Bin 0 -> 154 bytes .../eda83a0f714d686e06c0f7bcb33f059c0388e42c | Bin 0 -> 60 bytes .../edb095b416d8f08d83eee30fc4e0091f3d8a2d20 | Bin 0 -> 6 bytes .../edcd6cb713e68ab148efff0161259911643c9fdf | Bin 0 -> 143 bytes .../edd27d7878d0ed169d546461b53818c4443272b5 | Bin 0 -> 68 bytes .../eddd0d738c2a5204c8da3a48f8e7e83299f89d2a | Bin 0 -> 14 bytes .../ee00d33703b06961ff54ecc671bf4daebb3acadc | Bin 0 -> 596 bytes .../ee1f04b4d91b0cb75ef7d776958502dadf759ba7 | 1 + .../ee29e547498c5646135e73f868619d259d78ce73 | Bin 0 -> 35 bytes .../ee61b54c1c30ec974f73cbe6bbfd2b9186a5acdf | Bin 0 -> 4 bytes .../ee638062dc973600ae6c3b23a80fc1f59b14cbb6 | Bin 0 -> 3948 bytes .../ee9fa6a164702511a08ecbbaacc545b10e9ea6bb | Bin 0 -> 3930 bytes .../eeb4f19a99e84fdf50bcb31aa5f1cd0a9c0eb769 | 1 + .../eebd927505222e18bece7973a4268d08275c570d | Bin 0 -> 72 bytes .../eebe03bac30a537f78c88ccaddf70faa08c12856 | Bin 0 -> 1265 bytes .../eef67c792f7d81cac8cb80814522a674bf0962df | Bin 0 -> 1003 bytes .../eefc9c59049fffe941b1f1cd2e2851e9c300e26e | Bin 0 -> 40 bytes .../ef0611b3919141cd94d73cef586db6e046be9f18 | Bin 0 -> 302 bytes .../ef108fac7897815e610853e242a334323c24c5c5 | Bin 0 -> 404 bytes .../ef1d606ddd19c0df336a5a1ea0c21d582cb1e984 | Bin 0 -> 80 bytes .../ef37b215cdd9e7c6f02e9a70b48116cb36c0610c | Bin 0 -> 20 bytes .../ef940fc6895d341b397ea9d86873dea5c9c19805 | Bin 0 -> 12 bytes .../ef9ba81aa2a7339a1531dcc17832ed710104005a | Bin 0 -> 2440 bytes .../efa1b0cc84b4427a9b61a44998252ce400633260 | Bin 0 -> 636 bytes .../efa49b1b7a35d20c605a6a0c51800243f22e7a5f | Bin 0 -> 51 bytes .../efad2c128b9510cae89c65c2e25bf53ea055f376 | Bin 0 -> 40 bytes .../efbefe20b581a12488f22b41c8e3d9b283da9fe8 | Bin 0 -> 104 bytes .../efdd1d5227583fdef9f83230ea2c3baea4d2b40e | Bin 0 -> 1504 bytes .../efe2d218f340f1de5403614e487d9244382c7b61 | Bin 0 -> 1113 bytes .../efeb03d455bde889e70ad0b979f1c8636924687e | Bin 0 -> 28 bytes .../f070f52fd31eb171bd8fc496481215a21c308902 | Bin 0 -> 84 bytes .../f09a4aa8898b58a46bd64ec2a62a55d36b9fd9b6 | Bin 0 -> 13 bytes .../f09e5e4c2bbf05b871a3c9440f2459ecaa2e5fc4 | Bin 0 -> 22 bytes .../f0b51faaf656b05352a639a4c19bef55bcf7f342 | Bin 0 -> 35 bytes .../f0b57876e656621069b94bf93b7e71f2bf79d50a | Bin 0 -> 17 bytes .../f0eabdbfbcc4948846c79b391045ef5eec71791d | Bin 0 -> 1038 bytes .../f0ec66fe92468f3789cfe7a8c18463bfe1215152 | Bin 0 -> 1252 bytes .../f0f5db04594ec8f3ab24857f30199496102952b3 | Bin 0 -> 39 bytes .../f10da923efc27e53b3c8ad69016df7fb8ddabc4e | Bin 0 -> 1912 bytes .../f10e325e4ea043776339ee8ada0711192c65c5f8 | Bin 0 -> 63 bytes .../f11874e92ba8fc77be4132602349cd4d897a158b | Bin 0 -> 18 bytes .../f129a649471f6486ec26bbc4dfb324807d07e77a | Bin 0 -> 28 bytes .../f149b3e023ef65ebd19ecad3ee09bc606101b7bb | Bin 0 -> 30 bytes .../f151dab015518ab75b4c5b442f69246dbf52c5d6 | Bin 0 -> 68 bytes .../f165e03130081c730ecd0721d5869b1575ce13fc | Bin 0 -> 691 bytes .../f173c967bcf7d7ae73b7956bb6fa9ee8656e38b6 | Bin 0 -> 28 bytes .../f1792fcf0ad2db0777f2a2e42770fbe90cf9f509 | Bin 0 -> 701 bytes .../f190175ca74f55f48c6971f17f3e1d6ff5a8b6e9 | Bin 0 -> 80 bytes .../f195c020a28dfc5f2fb6af256b524ddcd93756ed | 1 + .../f1a599deb6f048e985cdff83e08f1de1a273a484 | Bin 0 -> 5 bytes .../f1aa28113a93a32d0c856e544dc9911a58d353b7 | Bin 0 -> 18 bytes .../f1bdc2b324005226dfa19c4805d88f843264c59c | 1 + .../f1c57e2a76d316353b53bd08fda5bb0fdcb2fcdb | Bin 0 -> 52 bytes .../f1cba12917589910ccd4714a5c52a0742cf59ea9 | Bin 0 -> 5554 bytes .../f1d48fa8f581bf6d481aff76ddde8201c1817abb | Bin 0 -> 19 bytes .../f1e517b1e6d6b58444650c8ded1badef8b41f206 | Bin 0 -> 340 bytes .../f1f5db92c413092e447b7952a9f570cbbd91dba8 | Bin 0 -> 1666 bytes .../f233d9658e8a9028a06c37b360b7ca2cd51136ec | Bin 0 -> 81 bytes .../f26993070252a6eb36ca097379f665ae4f17f47e | Bin 0 -> 4694 bytes .../f285e6c896905d7ea1b8c6a25ff545a97f532115 | Bin 0 -> 27 bytes .../f2e42be3a0f5a357ffcf9a00daa7a70de8b23b99 | Bin 0 -> 302 bytes .../f31b95175952ed280f2485bd665676bcd7e2117b | Bin 0 -> 1635 bytes .../f33b84cf850e8ca4e16b76c9de94f79660e1b2df | Bin 0 -> 768 bytes .../f35a6fb0128c28e1c44071f43156ceaea07bb837 | Bin 0 -> 3305 bytes .../f35b701a7a353f049de4c9495585f5edff155b01 | 2 + .../f3655de8a602af63006a096d1b2730c49a80ef98 | 1 + .../f36a37e1b68d354d558232288b2f0a3316e17269 | Bin 0 -> 46 bytes .../f3844b090ab7f25c3b7162322f1521f55f04ec1a | Bin 0 -> 302 bytes .../f38b4fe253e09779ddb333f415a8398962445bbf | 1 + .../f3c5037c6f62acba23b50fb08b146bb5a07914ab | Bin 0 -> 60 bytes .../f3dc1287d073dc9c303afdde6025fb41f6f0edda | Bin 0 -> 23 bytes .../f3e98b1ec7d90542557113c1e59a30590b0e6285 | Bin 0 -> 23 bytes .../f4183769aec3fcb60bd1ab868328ab2da97c7682 | Bin 0 -> 90 bytes .../f41f086985aec798ad0d0b14ea1d8818753be1a0 | Bin 0 -> 244 bytes .../f436883d82f451b5b8f174cafcdac3e0c73186c8 | Bin 0 -> 4847 bytes .../f46434a03308c25f6725b83f907d33eb5e4af9b9 | Bin 0 -> 3600 bytes .../f47af545ff93604bb8c110df50c185dccd625ba7 | Bin 0 -> 380 bytes .../f481f1d1a1bf63b5e9c93c65126e7ea6cb424b5c | Bin 0 -> 4 bytes .../f486d236a4c376742c0739c3bddadb587f5e0018 | Bin 0 -> 76 bytes .../f4c8f409402ca33a52ad333849bf2f99d3870ceb | Bin 0 -> 184 bytes .../f4f859f6f750cdd8202d305370c9bf63470b06b4 | Bin 0 -> 387 bytes .../f4fdf06bdc49bf4e1eb2159c3af101f8dc49b88b | 1 + .../f504a53f46e36e6362e7615e3e903d8e98f41d49 | Bin 0 -> 60 bytes .../f50734f6ec2c8f136a2492d8a1263cdc93b6b1b6 | Bin 0 -> 14 bytes .../f526486eeff2fa593d8552ae64e94edc0b9d3d19 | Bin 0 -> 35 bytes .../f5344c6fdce00c5a1801c38fbe1d52846859c90f | Bin 0 -> 84 bytes .../f543ac2c80af1b26a79b6a980c46eb6aa0cbff53 | Bin 0 -> 458 bytes .../f554021c618278d8f7c220b04f1261d6db3e3a5e | Bin 0 -> 5492 bytes .../f5546af8eea3da2e9e435d5c32f2dc91ef7b2a09 | Bin 0 -> 79 bytes .../f5566321d133a6b194d65c0d4497ce82fc53eec0 | Bin 0 -> 62 bytes .../f596f572ca960930c106827bd047666eafe046be | Bin 0 -> 768 bytes .../f598e959cc02f565ba91da2331a981fb7384180a | 1 + .../f5e6921553d297e6910e4823b1be12a5b29de90e | Bin 0 -> 27 bytes .../f5f53364f4a266cc7562def1744b05362a243940 | 1 + .../f62ab84e40631100d8a1dc4124ca71eba3886708 | Bin 0 -> 364 bytes .../f650110ee11fb82a3762d62e9931f90125e8deac | Bin 0 -> 68 bytes .../f650be3770a3c585e192ab90a39325ef48a2c335 | Bin 0 -> 14 bytes .../f65d78f9a0733cfd0f84fad36c03b25c3dfd0286 | Bin 0 -> 302 bytes .../f666f56690eeb1dfc9600fd371c6f57ffdf70663 | Bin 0 -> 42 bytes .../f6691716f64e8d04ade403f7a22fbe6d2896556f | Bin 0 -> 28 bytes .../f68b13b6367e1b0c1ea39bab98ca161b1d22ef45 | Bin 0 -> 1205 bytes .../f6a47dfd3f4e4d9abb62aeb7174c0de497bb82ac | Bin 0 -> 111 bytes .../f6a709650f2e7dfc55165214b1d3759a758ea193 | Bin 0 -> 44 bytes .../f6aaa8508eb08272569583d1994cdd036fbee413 | Bin 0 -> 151 bytes .../f6b0db7c9be1ba34a644bbcbc359e6238d5666b6 | Bin 0 -> 6010 bytes .../f6cdb4c36dc9496e29e0cd8c2250f58afe0a3a16 | Bin 0 -> 13 bytes .../f6fa0962abc3e802ee5983a9f915155e649971f1 | Bin 0 -> 300 bytes .../f739c044e7aa2f3802dad6e5c276ad7ff3401a6c | Bin 0 -> 792 bytes .../f73fec2725ef6f5a04b91e032b304c265b68b65a | Bin 0 -> 138 bytes .../f7567ce9b654f7e75cea729f68e70284f2ece731 | Bin 0 -> 9 bytes .../f7578c63ecea434dee743e1bfef80cd7fadc590b | Bin 0 -> 9 bytes .../f7707e801adb4f94800a9980b3429a3dd80bb5a3 | Bin 0 -> 4 bytes .../f779b155ce809f66d46cfe8760d2b8fc082fea03 | Bin 0 -> 140 bytes .../f77aa4a4e241499079490328f8f8b490dad5e338 | 2 + .../f782946bbd8afcd41435ca8d9589cf4f6d6726e4 | Bin 0 -> 4 bytes .../f793fbd8017b3b23fbc27d2b724db7e8143f673f | 1 + .../f7ba019012a93a62f8771728786c3c0cefa288b3 | Bin 0 -> 796 bytes .../f7e6dd4451dabd14fb61f504d2de9dca59ea713b | Bin 0 -> 11 bytes .../f7ffc62115bd8b9fd931b0545357da9b3c211a30 | Bin 0 -> 20 bytes .../f81709f8352c89b0151dd7f14f3e113d42e737c9 | Bin 0 -> 6328 bytes .../f82b5ccb4a440a3d01ad9cbfad149f47cc8c5fe3 | Bin 0 -> 78 bytes .../f82d3b71af0607cac2886297bfa2ec89dd101cee | Bin 0 -> 302 bytes .../f84784f47c70baa1c8280b1175aae0ca6e3a8c77 | Bin 0 -> 86 bytes .../f8de6abc43443b6b3902fefc3872f59a8eea395e | Bin 0 -> 1902 bytes .../f92bf9269252237d041ddc8b09a8178a378d1176 | Bin 0 -> 2511 bytes .../f944dcd635f9801f7ac90a407fbc479964dec024 | Bin 0 -> 2 bytes .../f9504a555142fb9248f33d304fc9efbd57c33d9a | Bin 0 -> 104 bytes .../f954b0367701e71adb23910d99ad49a2d6656f3e | Bin 0 -> 17 bytes .../f95cc956bad37119d7d9b69342dd678f9614e3bc | Bin 0 -> 55 bytes .../f98bcc888b42e3d5b3af88424ce413cb796e8c9c | Bin 0 -> 5055 bytes .../f99127ac5481b9132db2f2399610785643469dab | Bin 0 -> 203 bytes .../f9b17a2b92d9b2b322493980eff15284ebee4248 | Bin 0 -> 184 bytes .../f9bf7ad5f942fa1d272bdd8a4c1c5a71a9eeeb80 | Bin 0 -> 1910 bytes .../f9dabdf73f966f923a341d7c846e8995499e3576 | Bin 0 -> 52 bytes .../f9ec3dd26ce5d75a0fe4a831623140a3eede8e63 | Bin 0 -> 2060 bytes .../fa01386fd5071f3dfb86744a8393026cd6b90fe3 | 1 + .../fa1822bfc21a1fe01638e289357b69e0742dec26 | Bin 0 -> 68 bytes .../fa1defbcf703275031b3bfbcd4dfec28f3c95030 | Bin 0 -> 147 bytes .../fa25bc9e4b55377352bd9b84b10d4b401b20bd54 | Bin 0 -> 3916 bytes .../fa3b5dfaf5bd7771ed00e6bc63e10ff1622d8f14 | Bin 0 -> 4 bytes .../fa470adc0cb32cff7ec348ec0697c918bff85e12 | Bin 0 -> 18 bytes .../fa61ffa42f140e6fd1fc633dfc1cae4af74c0b00 | Bin 0 -> 18 bytes .../fa6cc88cb32259aa54a0c40805118a290df01b69 | Bin 0 -> 156 bytes .../fa73e49f81773035e50dc826d71d8f684b6b277d | Bin 0 -> 31 bytes .../fa741b872209ee4ca170c84edc9761a0aac29c6d | Bin 0 -> 148 bytes .../faae7efcfb0440e5e57fb01172c5a8a5fcbabfd4 | Bin 0 -> 3302 bytes .../fab1ddc131857828bf774dcd732123e901ba4502 | Bin 0 -> 806 bytes .../fab8fe3a7a87e73dbde44a84c951dcf277421f31 | Bin 0 -> 561 bytes .../fad81565da4d4e14d5bb8c386903e8ad7ae25f31 | Bin 0 -> 79 bytes .../fb1ec26f6d85f507fe4c8e69dc69e7ec9a126ffa | Bin 0 -> 1961 bytes .../fb602843485410a0c6c0b7e998d188f182a80081 | Bin 0 -> 72 bytes .../fb68f198edcdeaa143c224016993881820666044 | Bin 0 -> 98 bytes .../fb85f20d84531c53ba5a61d17f2ab0e4a711fd89 | Bin 0 -> 221 bytes .../fbe5fa3a558e9a76c393f2f12e68d5bcdd4cec80 | Bin 0 -> 19 bytes .../fbf0f59154558a55009b6886ffe986116aeddef3 | Bin 0 -> 302 bytes .../fc06be9e353221bcbb516249c2bcb7c068bf80f9 | Bin 0 -> 54 bytes .../fc2ecb9df77e25b4203b3009088a2d5c997cb668 | Bin 0 -> 2680 bytes .../fc37f4f55974c9cfad9d0a597451c5a296ef25e3 | Bin 0 -> 47 bytes .../fc5bb1d4d89dc267407020219b9399d126036830 | Bin 0 -> 566 bytes .../fc62c152b8509dc61ab8516cfeb2c1bd2b350409 | Bin 0 -> 8 bytes .../fc7c20b834c13b3b25206783d605c6be7eb91843 | Bin 0 -> 809 bytes .../fc7cea1fa31cf1d621dd344370a64d282fce497d | Bin 0 -> 48 bytes .../fc87070c7fdff8ebdda009dd9e66c83cc8bdf02b | Bin 0 -> 18 bytes .../fc92dc5b3ee5da1169a75d2b0ae228a0cec808f9 | Bin 0 -> 174 bytes .../fca36c53f255b5efd3322612f0f21ad08c184c0b | Bin 0 -> 6 bytes .../fccf12c5975f58ea4e73f76ce1c29b2e6e8f1694 | Bin 0 -> 1854 bytes .../fcd7975a3e6585b83263b5445b870bca25a8e7ec | 1 + .../fcf46724be307ee295a8d5527a843424429ba211 | Bin 0 -> 550 bytes .../fd1708db1ddcf98385dfb5a7e312cca292cc83a8 | Bin 0 -> 1263 bytes .../fd2926ace2e972afc49bbb0c5e2c9ec9c8edbcfe | Bin 0 -> 473 bytes .../fd2a882db3e38cc86dadde45daea5a079a49820e | Bin 0 -> 1500 bytes .../fd3c10f60098cbe8ee792648d71df987c3926d07 | Bin 0 -> 399 bytes .../fd64909dbb2efe674967678d0c91e85e06174e79 | Bin 0 -> 40 bytes .../fd6b9a3a092849f8cb853cf643aa11b05854138e | Bin 0 -> 1395 bytes .../fd72a59ff3d4c40dd9a8e8eae036b80f411c2924 | Bin 0 -> 80 bytes .../fd75db8934c05d9d9b17260b240f5f2f5e43518f | Bin 0 -> 52 bytes .../fdc89bef0a7babbcaf5d7dc6e875bd1c2051cb28 | Bin 0 -> 75 bytes .../fdf61cd3f465902a2657f46467688c9cf9ceded2 | Bin 0 -> 140 bytes .../fdf8941cad1833528951911cd59a43402f38b473 | Bin 0 -> 396 bytes .../fe0ba40854c292b5561ae904e57b87f41e718f78 | Bin 0 -> 5554 bytes .../fe0e8b5145c3a581e690c39179ba85608c46e7f9 | Bin 0 -> 371 bytes .../fe29e8302697186a4a06e5834f375d7cc1e1b90a | Bin 0 -> 191 bytes .../fe2d35704873ec8b3608ab09de9036fa6362db6f | Bin 0 -> 17 bytes .../fe4298dd0f2d9c7af16e6e1cfd42ed58cb59bd8f | Bin 0 -> 608 bytes .../fe5d5d23a90c7743a5bcb0198b251c816c92d4ee | Bin 0 -> 608 bytes .../fe6c1aff13b2b5bfed571d55aa48eae65e1e46e6 | Bin 0 -> 85 bytes .../fe891d24577aacb8c9a302077978cad4c668c898 | Bin 0 -> 6393 bytes .../fed8b208dcb5b0446d1c51a4a67de8d6abefffa9 | Bin 0 -> 6 bytes .../ff034f82fc46b5b43ae9f1eb939d728f89f8b1e9 | 1 + .../ff0e1ebe7f4d81862193ed28cb355aa91afe6c18 | Bin 0 -> 4 bytes .../ff360f0e8e72308766665e25f5aac9aaefa86706 | Bin 0 -> 414 bytes .../ff5a844e120b52e7e5949496075fc9847dfbf374 | Bin 0 -> 225 bytes .../ff6dfe941b4e26f195b550f9fd58dd93b29ecf81 | Bin 0 -> 4762 bytes .../ff8a75cf7988f1f2d4a54e0c37967015cd8b87d4 | Bin 0 -> 34 bytes .../ff8b8d3874f8a4f5e11f18c2709ba4a1c758d1ef | Bin 0 -> 1816 bytes .../ff91e07bcda678062cb9bb49043db9bb7372eb5c | Bin 0 -> 51 bytes .../ffd566554ec9a7463ce829db7d9fb069ee9876b5 | 1 + .../ffd7f294e877411cd191819cc818971a3150b42b | Bin 0 -> 27 bytes .../ffe511315be3b33270440692b8e11a207011fe7f | Bin 0 -> 80 bytes .../00eff4dd23adce949b3066368572a5e398e664c3 | Bin 0 -> 419 bytes .../01a1a6eaf03d6eb89cec57425b3c1951d6c3d848 | 1 + .../01ec4428d75241a628ac875142f329427d442348 | 1 + .../01f907d519964796051bd8477cd621d1cff3578d | Bin 0 -> 1545 bytes .../025083edfcdebaf7c19e199e8073d11b1523369b | 1 + .../027f6e82ba01d9db9a9167b83e56cc9f2c602550 | 3 + .../02859ef44eda40b87e38020a4099daae5d0af16a | Bin 0 -> 104 bytes .../0327b6cf2417a59ff594d05310f5f683be1f0b0e | Bin 0 -> 2345 bytes .../033e7df8fa7e9ca17075d50c89fc76113c14c49e | Bin 0 -> 25 bytes .../033f563bc19e7f7b250c89fd7ed3e90419812bdf | 1 + .../035df15165ddbc1666d656c19faae61f29706cec | Bin 0 -> 319 bytes .../03986ab7d66138ef56516e48245a90fca88a5363 | 1 + .../04769c9b1b188d1a93aeb8d1239a0c91d8bd829c | Bin 0 -> 428 bytes .../05cd611a824c84e168aaa8af75dede42923f8a64 | 7 + .../05f519920dff922b7c6299504494d70820952f74 | Bin 0 -> 6 bytes .../073bef59aaf3fc1a1dbd63557dde2db408023942 | Bin 0 -> 288 bytes .../079dde1801c6b1e289c5605882bb4279af47f751 | 1 + .../07ac75efe6ca20c4ea64c7d4f9fcc65a395814e2 | 1 + .../0aa516415b245efb270ca2b4bf831ebd3e091717 | Bin 0 -> 48 bytes .../0c43e098ac9e066aac29f6d1747d0f00227f59ba | 1 + .../0cd161ab3e0e5be829e794fe841498feba6b217d | Bin 0 -> 232 bytes .../0cdf924e6578e875d19ff4d17e7013d499fafdfc | 1 + .../0cec22cd429b9a959bf494ddec012b8702cd79c8 | Bin 0 -> 192 bytes .../0d2043e01decb4f401b9b6a4be2bdad7aab1df67 | Bin 0 -> 16 bytes .../0e470c12f319db0f6e9636ab453f96fb6aabfe5b | Bin 0 -> 393 bytes .../0e7b086e1626ef5e27bb16811161b8d99819098d | Bin 0 -> 64 bytes .../0ea2009e2bd0321dcc2449544013582707d86530 | Bin 0 -> 32 bytes .../0f47fd5ad953119e91b80007d0b6aa7a4c9e112d | 1 + .../0fa29b8c8a5d796e8c14294cebced3c4ed040002 | Bin 0 -> 6 bytes .../0fc2c5ff9021ec84c40d59c2a148bbd40a25b535 | Bin 0 -> 525 bytes .../101b080c53aa70f240d6233dc6a3f70ad716476a | Bin 0 -> 834 bytes .../1090de62d272a459dc32182669f19c7aaaf90308 | Bin 0 -> 72 bytes .../10c2d9e5bd5bbe06f3c97df8e45acd481d8890ab | 1 + .../11c211cd3ff146a1ccdb70a9db6a56aa6c457125 | Bin 0 -> 616 bytes .../11fdd5d39665523858f572af4447020c9426026e | Bin 0 -> 57 bytes .../12253f494ec7e32f60421af62bc3145745b2e88e | Bin 0 -> 43 bytes .../12c8a2227b942c1bbbb91edd8f30244613ed5d34 | 1 + .../133b4d238da97eec7ff097becf966fbc6c6369bf | Bin 0 -> 5 bytes .../14178e220b4925574ab240e3d0c552ec05ec6e79 | Bin 0 -> 11 bytes .../14264018e6bc72fada2b7a28940b79b3412fce45 | Bin 0 -> 233 bytes .../150d0a3ff583c87157e360f146ea3337a413c0b6 | 133 + .../15aacc4eab5317c589ec69dcd2be6fd15e5c8551 | 1 + .../15cf0992b80220d4b964146ce7e6984d2523ab36 | Bin 0 -> 32 bytes .../16185292e20e301c45f78d6f5d37f27772b683b0 | Bin 0 -> 128 bytes .../1634217f50491ba477c9773581784bd3f7471b03 | 1 + .../1660f4c688ec0c05b3fd24ca6af62a3b262c8df2 | Bin 0 -> 19 bytes .../1663698a71a4260c6e1e462df5c191a1a1154853 | Bin 0 -> 139 bytes .../16d9ac16bd611de5f8f6d74d322290954abf00f1 | Bin 0 -> 513 bytes .../1733c79af429cbffd01200bdde46c4ccc03c3c0e | 3 + .../17ec9059cd9e1778bfb06c6c005ea0d204ad27e5 | Bin 0 -> 418 bytes .../17f7a85cd0d2c8a256ab8cc7b7f0e9a61c4fa930 | 1 + .../181e43af6be050328f4e26dbad7a3ec417f1d7d6 | Bin 0 -> 2316 bytes .../183cf7aca8abce004de72455b4080d4082410949 | Bin 0 -> 70 bytes .../1858b2325be8da41d5ea9885ff3c4766d414100f | Bin 0 -> 20 bytes .../1ad3e86ecda8ff0c2fbafff71f105375b69f99ab | 1 + .../1b77aeeafafecce3ae280f6738befef72a38fc18 | Bin 0 -> 12 bytes .../1be1a68fc70b531d7fcce40ad4476bb240aa0251 | Bin 0 -> 6328 bytes .../1c36ca01e596c3185da92ced0fd2bd3190d239af | 1 + .../1c3d8e2d2ba8742ca4ced115e07bb21bb7e23f78 | Bin 0 -> 19 bytes .../1ce8498d15c69bb205e09d2013207364596af9d9 | 1 + .../1ed327473202ed84a153f347713df0bccabf8954 | Bin 0 -> 169 bytes .../1f175e84b638afe0bd2f4ac88f182693ac376d34 | 33 + .../1f29e7373a26536f5bb514dde2b474d795e2db59 | Bin 0 -> 1266 bytes .../1f2cde5ed7122da68806ab4ad2473a0d8360a83b | 1 + .../1f2db7c9ae005f29846b50ed357ebb892319b544 | 7 + .../2004b990f6dc9f0d7158a77849a238ffc18d7171 | Bin 0 -> 88 bytes .../203c349f5066f5f0f106a9d47192879fdc184381 | Bin 0 -> 10 bytes .../228bd7fc3c556bc1078aae442034326569ca64cd | Bin 0 -> 2187 bytes .../2387ac39d1c0c5a742ac1d94477279b1d6d393f5 | Bin 0 -> 124 bytes .../23ef60aa467187311cbb67995b41189bf548fee2 | 1 + .../23f8277ca929ab2bcdb7fb12677e24017796caa4 | Bin 0 -> 8 bytes .../240992d25353c30f3be23ff8c87300aee40078d4 | Bin 0 -> 11 bytes .../244014f63a27bb88df542a0b7d7baabca836d107 | Bin 0 -> 16 bytes .../246b2a1cc0b64457e4aa45264743a1f496570faa | Bin 0 -> 120 bytes .../24bcf80ef602addf52c1e39bc15981c95566d8fa | Bin 0 -> 256 bytes .../25d08dde1611ba0e3ef4acd7255a53c2935b991f | Bin 0 -> 258 bytes .../272affde38603570a640bd7de2904842c5df032e | Bin 0 -> 87 bytes .../2735e3edb439342b57a4ef5df88dfe289fcf9c14 | Bin 0 -> 18 bytes .../276716bcb4c62158d546f194d0776a3345b86953 | Bin 0 -> 159 bytes .../285523449bb3b9623944ed4fe78c9d73138d0828 | 4 + .../288fb2d6f42b5e13dabc1545d5ffa3cf11daf59c | 1 + .../28b35080aada64c7f80b529f7ac4f3a6a69eb5b9 | 1 + .../28eff8af2a3af2d37106441bb97cfc41561b1a46 | 1 + .../299a6b9779874a3608c556125fb4ce246f4664bd | Bin 0 -> 1112 bytes .../29fe2d690007f9c5ff5524fa244ff548ba18fa56 | Bin 0 -> 74 bytes .../2af6d48d5724ade9d67c520d9d80b15ecef89eea | 1 + .../2c888728504e1020a84f3c62544fe6b9b4c206d8 | Bin 0 -> 867 bytes .../2ca23ef1923e1a8c2b35d6bc2fffc7bb0a27553e | Bin 0 -> 16 bytes .../2cb483571a342ad76d560dd7fd89b830e52fa586 | 1 + .../2cb9dccdf0971fd12ee2284ac0a3cab352767d7b | 17 + .../2d763c7cc738acf8f51ebcbb2fa026885a9aeed6 | Bin 0 -> 42 bytes .../2dcf9ab1b7d6eb16debcd7b0385093c550f2f64b | 1 + .../2efe7c4e6f5f0469002dd6664a0ccbf713c788b1 | Bin 0 -> 303 bytes .../2f8b85b5a012f9799871733b6e9232fd3b34ab2b | 1 + .../30128c634626e0fd05899ec1021145bd08b06ccb | 1 + .../3118a1578c5cd859a682d3703c98301203d9e668 | 1 + .../314e6b07223dd6ae8726c3d81c21d78e81f53e7a | Bin 0 -> 286 bytes .../31665a2f0ff7505b2ca172bb475a8bc5dc6dbead | Bin 0 -> 36 bytes .../316aa29834e662b4ea0a4997518442bbd0c8dd51 | Bin 0 -> 72 bytes .../319ed82f19a1179468a07bab84b054538b6df935 | 1 + .../32cd2f645c6cf679a28c40f2a0322a66ea3532c9 | 1 + .../33fdc0dd795715ca62141df1e7aa35e25a3a077f | Bin 0 -> 74 bytes .../34601365e3f3937ec930766761bb22e74e8b752d | Bin 0 -> 179 bytes .../35182f40f5ee4e123a2048cd884c953b960a3ee9 | Bin 0 -> 16 bytes .../37e03835331f62cdb08fbb1e79ae552e49cdbb41 | 4 + .../38169f4274b5f2fd6fd64a61667e19dbd89c6a4f | Bin 0 -> 16 bytes .../389c77c1758dd5cb487f838c77798f9d4b3e6163 | Bin 0 -> 512 bytes .../3978b85ca8e5537dd52a74ada5e72fa8632a6de0 | 1 + .../399aac744f8909822a50f642df0f82cf298d94b8 | Bin 0 -> 327 bytes .../399bb9e9f859fdb16cd3daf233ea43359a65864c | 1 + .../3a1c56172ee7c631095508f201fe2574646cdcdf | Bin 0 -> 11 bytes .../3b31a275b830169efdc57a003b1facea1033e8ca | 1 + .../3c2e6c4e73a460f20264f3f7388690ff7291594c | Bin 0 -> 256 bytes .../3c7e8779a61a7d797d8f30f2b2e00c0b6d954a33 | 1 + .../3c8eeacf5a807bb9073dea87d9c42e5e7461e3a0 | Bin 0 -> 15 bytes .../3cd82f1bf0b7d07687c40953749543e1a12d95c9 | Bin 0 -> 345843 bytes .../3cfdaa65d83f3883dccfc224b67946da23f11852 | Bin 0 -> 96 bytes .../3d11014dbca64455a1b9474c81e15c53af97927b | Bin 0 -> 68 bytes .../3e6def017464285c66502b95e96ab079ad65e849 | Bin 0 -> 329 bytes .../3e9e817942a1baba63f07284d3f40457487bb04a | Bin 0 -> 3116 bytes .../401625a441d9efa6c2ea22a5867a1c36fc14bd3e | Bin 0 -> 1578 bytes .../4054c683a7ab1c06886ea3e00f50cd260c37def4 | 1 + .../4057e1f578329624e796b94879744e2be452d38c | 1 + .../408e123a55235d33fe3610e9b10610c776280552 | Bin 0 -> 150 bytes .../40bce251b6d5ef19e35169c532094964a38c659c | Bin 0 -> 7941 bytes .../41a6938973b559fbd8ebf55105fdb92a2441509a | 1 + .../41f32f3759e5c817178fec795ba8cab4f431256e | Bin 0 -> 3183 bytes .../4265127d4813b9d42534710fe15f1cf042643bd6 | 1 + .../429d7a72eea4a406a603c0071c34a8dbac858916 | Bin 0 -> 9 bytes .../42b5ea9f618a1c4df6d59a4976593c72bfac5385 | Bin 0 -> 20 bytes .../42cdb73fa79e064db0a19557d3a13519aaefdd58 | 1 + .../42e2444557fcd9e94ffc7c78a7e6110490878479 | Bin 0 -> 37 bytes .../43314107e6d6725cfcdf43b2b73b734b569da6de | Bin 0 -> 16 bytes .../433196ee1b3b402def6c184df93720698aa5e465 | Bin 0 -> 274 bytes .../4391e158eed8a0a53a2d8ff793346c422291f65f | Bin 0 -> 8 bytes .../446857b35e7ac31e30b5c5aec1db0197e1626cea | Bin 0 -> 34 bytes .../454eb70382875f32d63012e59741b0b3d877f5e0 | Bin 0 -> 121 bytes .../4587fc67ae30be3fc6870f903c89649319635fcc | 1 + .../4630b1d6e9b293e63a25caacf2209a436ea32e7a | Bin 0 -> 332 bytes .../4640aa465be24a6fa6e4530d79aa85e644529909 | Bin 0 -> 159 bytes .../46bb1edc95a9ba8df7d3c119e22b6329e590c08b | Bin 0 -> 9 bytes .../470ee240e8f1c85759b772f75cd55b70a3567b6e | Bin 0 -> 32 bytes .../479329c4ccc69464de5507f04ebc760e2efb31a8 | Bin 0 -> 16 bytes .../48663a1a39961ffef8bfb265cff69b82deac2b40 | 1 + .../486e216f55c29754bd34fffacf8eb4c5bfb2ce6a | Bin 0 -> 8 bytes .../48a1b352b64e96dade431f1c53b7508c7c93efc6 | Bin 0 -> 12 bytes .../48df16bc15351e7281d9bd2cef1ea9485c5f6072 | Bin 0 -> 96 bytes .../4925a7adc21b445946766747f2feb96975260090 | 3 + .../498ec114fb615262335edba3d979531b862f1be1 | 1 + .../49a63399586a985cdac7aa3d42d70a1a7803f82d | Bin 0 -> 4 bytes .../49fec3098cc76f9f0344bb750beb97333591d63d | Bin 0 -> 15 bytes .../4aae21cc3a76571618dfc7cbe352d5411f160191 | Bin 0 -> 10 bytes .../4ac46179af49de48ac4ffe56d8dd55552cc8d71d | Bin 0 -> 8 bytes .../4c3aeacb2bebb4d6f6fc56d1bc1fb7fdf6e738ce | Bin 0 -> 10 bytes .../4c7557118d54574bbe83aea7d03ab8f20aeb44b8 | Bin 0 -> 552 bytes .../4c90e85051a3bd8602f004e45258a98c993ef17f | Bin 0 -> 52 bytes .../4dfec104bdebd37986604df1cdac812ef96e5c96 | Bin 0 -> 159 bytes .../4ea897a9bf947406b47b81e549d197d24ba38688 | 3 + .../4ec5148089423af3d06239268f1fb608ada230cd | 1 + .../4f3548f51fa1bd56b5b75dbcd37d730a8a71fe6b | Bin 0 -> 256 bytes .../4f730045667ab724e11a09b446ea362d6edd51a9 | Bin 0 -> 428 bytes .../5000ddc3733bc45977221fd188936c8ffc5af7ec | Bin 0 -> 2216 bytes .../5009d72be11f131c170d4a3d0827526b75c0f753 | Bin 0 -> 82 bytes .../501ac4f8f8dda092d69ee42daaadf9de6b292e86 | 1 + .../50379eabb895ca6accd51009d882831ab58b5218 | 2 + .../50cbf74f6c0cb17212d1f1392d71c6a16cf44dba | 1 + .../51134b56031c1dc336092374fdc7025db064e8a1 | Bin 0 -> 1383 bytes .../513249c47a6e6bf69b25bf0216a1f52ec068d9f7 | Bin 0 -> 10 bytes .../51861db1e2945563e0c97b7f6e1c948ba89ab0b6 | 3 + .../51d695d5f9091074f282599b3d3e2fdf14bad3cd | Bin 0 -> 273 bytes .../532e650bb0b70927bf8aa99f959f9036a0510725 | Bin 0 -> 64 bytes .../5377f18b77a75d4101750e6c5f6e6d06713eb7a0 | Bin 0 -> 146 bytes .../53a8f2eaeb672552543dc161874532b417091707 | 1 + .../53fdcaca08988d8b337149d365220912f6b81032 | Bin 0 -> 11 bytes .../542a3419ee3a09003acd9ccc32a1ea026c236ee8 | 1 + .../54d7ae5cc5517f04a9d8d137c4563e0a90c52e60 | 1 + .../551603bd1d9c9925590e3c5e3467bfd7e0fc22d7 | Bin 0 -> 218 bytes .../5553648fbe51b503eeb16e5d3eed1a90e0345d63 | Bin 0 -> 37 bytes .../55ed174d2f972e607a1e900d2e0f496d3300f932 | Bin 0 -> 706 bytes .../57853a6181a8e30831196cfd02b93406bbc3496f | 1 + .../57ddec018108bf2a556df7e773bb349ce43286af | Bin 0 -> 87 bytes .../587dccdd994052f51dd18da92ac02971cf545cc0 | 1 + .../588b4e58831ff834d274adefc6eca5790dc37ae2 | Bin 0 -> 217 bytes .../58d9141bd6cf7ffb16e87da4b7b1bafb23a77898 | Bin 0 -> 456 bytes .../5959a2d4af9dd5ffe2332b145056ce8d9897195a | 1 + .../59d7d23630965d82d9169a76e8db4dbfb2739be0 | Bin 0 -> 16 bytes .../5a0688bf88f483ea55701dfb8e6629831dad1b3f | 1 + .../5bccdbc0694f533091bd4b1cbac011af0d75f280 | Bin 0 -> 19 bytes .../5bd470c4cea77c2741c79ade7b10bf14f3849c55 | 1 + .../5c122f7f7263bda2a57316d07d870526d10be18c | 1 + .../5cedbc4c9b05dd93876372c8b759ca2f715394b6 | Bin 0 -> 8 bytes .../5d6852cae3fad7a6af56d871fc30e24f447e9d2d | 1 + .../5d7e65b806b6d8a935805bb09c6b1f64148aa9d9 | 1 + .../5d9cba872237142b595871a1484991d69b41d422 | Bin 0 -> 24 bytes .../5e19124cc8860de2096318c8223ba85bea2997a3 | Bin 0 -> 8 bytes .../5ea8820458726997093d158c9cee7572e600a721 | Bin 0 -> 32 bytes .../5f31f43a97fd55c087f9162cc0b569ed763c87d3 | Bin 0 -> 103 bytes .../5f440869cb68531cc4361183e3e5ffb41b83b2c6 | Bin 0 -> 138 bytes .../5fbc1e2ccd91d34c30f6c993cc8671fa3cef116c | 1 + .../5ffd41abb14575b30dbcb083d961b09f6ecd3112 | Bin 0 -> 32 bytes .../604c766d5a363630026560576f16b58dfbdc50c7 | Bin 0 -> 5231 bytes .../60c891403f96fb9f5f778767d5c2e2d12d8da7ad | 1 + .../60cb4e1a3c0351466578fd2750c7c373404800b3 | 1 + .../611bfcb59b96a5461d0a450aea21939124449e77 | 1 + .../6134cfb79d534115841d5db140a086acc591136e | Bin 0 -> 10 bytes .../619418575a212bd9192d44b5dc9f4b85fae64737 | 1 + .../61d8082829bfbafcae92f1849453b51ae689d87f | Bin 0 -> 84 bytes .../61dbea04cd70f8d839ce849a05526e294ea7f15d | 1 + .../6228371672ccddce8d812e4550f7e9cc92d217cb | Bin 0 -> 56 bytes .../63cb0bdf51af8a6c6615aa6ba96e278384b79f34 | 1 + .../64304175aba6f8e44e22ea56fbf7e4ee5f9744f5 | Bin 0 -> 4 bytes .../6483a861728935b7869adcdfdc7a75e9ab821b6f | 2 + .../648c44dd5372ce0e96754d0466dabc2fad1d3581 | Bin 0 -> 11 bytes .../6496ee55bd78d06d3a055bb28b190de747c80e26 | Bin 0 -> 34 bytes .../66924c54a6f07a37016d2aa9ce0e72b049ec7367 | 1 + .../674692502ba76785f04cf153bc88cadcc5d02a36 | 1 + .../678527800f4f36fb236064b7ed342cc29b44cf40 | Bin 0 -> 10 bytes .../67dd3269449ef59d817b1e885f8de7702632fddd | Bin 0 -> 16 bytes .../67eb512bfca8fd788c1abccfe1a4015c28520433 | Bin 0 -> 2566 bytes .../6804c58dbb51e87e12f7fbc8c52416fd99df7e97 | Bin 0 -> 32 bytes .../6830a563f53d792978faaa40f09db18c07182ab3 | Bin 0 -> 8 bytes .../686291a8403b5e2a5e79ee815208cc901794fc50 | Bin 0 -> 758 bytes .../68c74d3a53fa2465751be25ca25725db0abcd147 | Bin 0 -> 144 bytes .../68e2a5bb64bc30d711d6a45e5e41574dedce0edf | 131 + .../6930f7b19810f64dd38c9f82a6a0306e46a67ad6 | Bin 0 -> 540 bytes .../69beff5a43c955dc3c55e6f34d002edcbc5c9b79 | Bin 0 -> 12 bytes .../69f8059daedd57781f09e8fccb4427faa3e87fb2 | Bin 0 -> 1243 bytes .../6a19ac9125d58478e0cd67e62c099e9c8f4d37a5 | Bin 0 -> 10 bytes .../6ac1946b67dc71822dbce39b135bf18e9014cf15 | Bin 0 -> 7593 bytes .../6b322c3522b7d9feff34c50b5d61364ac9cf2552 | Bin 0 -> 6 bytes .../6baddbdb36d8f9cf1cb9b92c67158fb8e7aa505d | 132 + .../6bfeb121cf9640042c2ba042bcd6aba9ad695b13 | 1 + .../6d0cc8ef2d7eece8ad77d1a88457a0da365ed392 | Bin 0 -> 1328 bytes .../6ea881ee14d91eeef1b072845a348a4cea103eba | Bin 0 -> 396295 bytes .../6f1b1edf6d98ecae716b7272e90c067d7bfd0a8b | Bin 0 -> 797 bytes .../7031a76fa8eaa6ffda2f7e0144072bf9d4660357 | Bin 0 -> 185 bytes .../7054e6cf12f46a3a4b6d6498d2fb5ca628fe6228 | Bin 0 -> 104 bytes .../70b8ca261799cc87fa069e46bd84a4d373842315 | Bin 0 -> 88 bytes .../71143e22b97a233e9c57f842a3c0b101b2fe9a8d | 1 + .../716bddf9a58ce3d7da4ba4fd5e575dc85ba7299f | Bin 0 -> 133 bytes .../7212d3235b8db3e10ae09fdb5954e5f721f5a71e | 1 + .../72d22ea3ae064acf520133fbd31f7febb3df9983 | Bin 0 -> 16 bytes .../72d9740060cc4f263c0bc14d39bf310c934cdd2a | Bin 0 -> 32 bytes .../72f38f759e0eb4760b6cffe60767cd8de68af052 | Bin 0 -> 552 bytes .../735adeb502365d8988894a5ecb28c8d0c1c459d2 | Bin 0 -> 241 bytes .../739d0095359e57cf912947060227e1f019112066 | 1 + .../73f797229c29665bac1f0f4ed9f7089c761e8d1b | Bin 0 -> 8884 bytes .../751f86d4aeab445a0c57553b295ca777619c8119 | Bin 0 -> 22 bytes .../754f66d6dc31dd6fa9ea1b4628182e794390f006 | 1 + .../76c66d7ca20fb78eb2c86eca0c36922e901474f9 | Bin 0 -> 10 bytes .../7732a61cb61f0871e00b94fd478168197c5eef66 | 2 + .../77411fbb2b966c657d2608840a524eb42316a32e | 1 + .../781d56064c951487176331a6312221474a65ef29 | Bin 0 -> 148 bytes .../78e32ee081f9a8f6a6f8f2d358f074de493e90d6 | Bin 0 -> 9 bytes .../799560f52f036f90a46aa5ba831fdb302b256589 | Bin 0 -> 48 bytes .../7ae3b96d98ec1f66a4a3479d424d08a9232551d5 | Bin 0 -> 170 bytes .../7b06d120c65d5835d7b5bef73c6ba77399480567 | Bin 0 -> 1826 bytes .../7c5ca4dd063af19889fdac67fa9a239d45b691db | Bin 0 -> 12 bytes .../7c8f1f69f9ef38b06f5ecaefd5e85cd3c33de79f | Bin 0 -> 8 bytes .../7ca56f8fd0403cee28f59750ff685f2874aeb31d | Bin 0 -> 16 bytes .../7ccffd29f3624b39ea29659d75ba4167d5454bcf | Bin 0 -> 1490 bytes .../7e5a2badd2d467ed63b093cbc1a266807dc9723d | 1 + .../7ed4014ec7be233f3efe93f5b71f2a72f28a3f0a | Bin 0 -> 18 bytes .../7fb8e98dc358957e8b2d34d9372d0e4b9c924c8b | 1 + .../7fea2ff7784ea52b4305610423eaf79729176a83 | Bin 0 -> 295 bytes .../80a1b59fe724a7a71b8ca628429d0ff10a3e06b0 | Bin 0 -> 8 bytes .../80b6610901a195df5950f2e0a5027a7ca5fc5888 | 1 + .../80be9a19b2dac9aefd23ced2a9a382f114cee348 | Bin 0 -> 87 bytes .../813751e17baca905f03a1d3bfa4f658923e7558b | Bin 0 -> 8 bytes .../815f31df4f984643bdadb1d151ab7c711e3cb28b | 1 + .../826d1d95da8c7db05134d47acbf02e576fbaf37f | 1 + .../8277d34e9548dd56103973233cc2570502e65800 | Bin 0 -> 1206 bytes .../829958f8aedb4e901b153f4ff13140beb6237a95 | Bin 0 -> 64 bytes .../83824800eade9a23f2de2e6a68bf18e5d93f816a | Bin 0 -> 64 bytes .../83a090f13613665b0f24dd29ea45fed7d9cddb1b | 23 + .../844f39cbc0cddb4497a34c4f47dcef4bef5f1f3c | Bin 0 -> 803 bytes .../84f90e100cb1505e7976731c25414e1854fca7fa | Bin 0 -> 5176 bytes .../85e6458878c3ca34f3f5f87a4d64e93ab79115ad | Bin 0 -> 68 bytes .../86b12c329271d6a9e5b73b87508fd1eab1c6cf40 | 1 + .../86bd257ac70892273c731f22d4a89a2f7059bbf6 | Bin 0 -> 18 bytes .../86bdf8d0da12d3d3ab16ac02809d015876a81b9c | 307 + .../870521e65b8463d62eb21c57556998ab40cb0b43 | 1 + .../873885b3aa27ceb413ee7e711817c00d1ba4db68 | Bin 0 -> 6 bytes .../8751598600d6cbd34d270df2e56f4d9e2add2311 | Bin 0 -> 8 bytes .../8786a346f400899d1a55d2f3baa28722ca268a7a | Bin 0 -> 298 bytes .../87defcf77eef5e06e7fec75e0d9cd84587901532 | Bin 0 -> 16 bytes .../887f0138c5ea56aeb46a4951ff5d45f8b9a7236b | 1 + .../88f393c93c1c3df1f63394e7523a0fa15370a7b6 | Bin 0 -> 58 bytes .../890ae975f6f926b27818fc426f028ed2fb959d05 | Bin 0 -> 52 bytes .../89111561bd3447d4e499204376a52ab066c5fc0b | Bin 0 -> 34 bytes .../8a6ab904613556d21ceeaced34c08b853033a9cd | Bin 0 -> 6 bytes .../8b569a394db2813e79819c62838c42be2aacaccb | 1 + .../8b93741e6f268da1b36c6e5fe2b3a4b5c5069e83 | 1 + .../8ce3ddcdde60b94d995c797f68a21063e1832f96 | 1 + .../8e05de6ecb4bb22c00d54623055ccd8a0346dd01 | Bin 0 -> 803 bytes .../8e7b714886902eb224b19669600ffe9b78e3a721 | Bin 0 -> 4 bytes .../8e9fda04421a0fb8e3b4c3561d688530bad6de6c | Bin 0 -> 103 bytes .../8f6ea3e33bf6a51fe84ebaeb89b55db08a56c458 | Bin 0 -> 8 bytes .../906dd8baf596af45236945ef8187880d8795d3d3 | Bin 0 -> 82 bytes .../908bd6526427c7d2b14656f9e6e279b91e707999 | Bin 0 -> 12 bytes .../918ff0104cd013706ceeef916aace268892ae8f7 | Bin 0 -> 12 bytes .../92508aeb4f1f4ca5aba99177897e0e6dc402b7ac | Bin 0 -> 37 bytes .../93589b56b8918bc0154df9ac05e7bd3a33f9a526 | Bin 0 -> 5 bytes .../938f2782da2a5200c26b6782ced6d020b538e190 | 7 + .../93f0d767c879c26a4fd1d2c514ee2e35088e7503 | Bin 0 -> 12 bytes .../94b5dbd32c5e01a19af20bcddb1537e0addb5c6f | Bin 0 -> 1429 bytes .../94e2f0af469f470b34d6803aa8cdecfc69290736 | Bin 0 -> 144 bytes .../951152b031df5dc8c2e5e0979086b399a41111d1 | Bin 0 -> 12 bytes .../952f18a923fc3bb65ee456ba0bbffddcc9b69d97 | Bin 0 -> 512 bytes .../96231c9f0acf5412491efc87254159b63ea0910a | Bin 0 -> 258 bytes .../967b3ddb70da537b0fabc179a66e002f905ccd30 | 2 + .../968fede2c4467c63b745bbb08841cee408bf80b5 | Bin 0 -> 96 bytes .../97b49bc5c23ecc74f2b562661852715f0d1fb578 | Bin 0 -> 6 bytes .../97e9a92dc5110bbc39e38fe086fcb05d68e75d85 | Bin 0 -> 24 bytes .../982e42b80c285b3d9ed3384ca180a793ffcfc763 | Bin 0 -> 315 bytes .../98f0c079d2eafa7d533878fc22fae42394a975be | Bin 0 -> 16 bytes .../98fd98c5c6c83bc36ccb1f5a939029ab1281db72 | Bin 0 -> 2975 bytes .../99901955e54897bb40a0d8c45b292812f4b92210 | Bin 0 -> 11 bytes .../9a5b2f6578b415da217d91bd4f06de8886834f80 | Bin 0 -> 282 bytes .../9a82fd2791c1e247653b4f0529431242e87981fe | 1 + .../9af682eafb576ac2312fd065f7110b585e8a99ce | 1 + .../9b29f3f7fd5ee4064fbb30f92461c5b8f7ba65fa | 1 + .../9b5dddedc7ff86c4941ad84b271034f42b81fdbf | Bin 0 -> 104 bytes .../9b9d86e4410b58a610b5a1fa80434ce776ce5250 | 1 + .../9b9ffcf963b5f3a6ef95aa387360f3bc338afe36 | 1 + .../9bd2822981b7d741659590545660a30566ec232d | Bin 0 -> 286 bytes .../9c087f501d972b2a28476da50bc17b041178afbb | Bin 0 -> 261 bytes .../9c79cf6ea53194660f597626985bd702fae587b7 | Bin 0 -> 32 bytes .../9cbcfc09f5f492dfaec020c2482fefe516636451 | 1 + .../9cdc7629f9f39de1103d202eb1c9231ebb2dce5d | Bin 0 -> 4 bytes .../9d5cb9a765619cb6765e91aaffc07402b85ca982 | 1 + .../9e4dbf50b64b03877aaa194d5f0607e86d4a042a | 173 + .../9e5fcab2f9cacdb69f4c3c551525f48793b459da | Bin 0 -> 179 bytes .../9e94810164732cd81f49645a4abd1168c532feca | Bin 0 -> 5 bytes .../9eca4099f3e5df8f16c69854f739249b75aa994b | 1 + .../9ef8e5948ba42b739d9fc103d1b5d346bb28bb1f | Bin 0 -> 516 bytes .../9fab81db87bcb7f74b9c86445e242fda0037c3e8 | Bin 0 -> 331 bytes .../a0afd876d8ceac1e59cc00eabca87b8d04c43ca7 | 1 + .../a0ce4ef36fbf2b3153796aa2ed4d74b3726f1f88 | 1 + .../a13508cbefa6dc5baa9005bb973a79462cafd3ea | 2 + .../a175a6d5f0629fe60dc10d8077bb79e6c03f5004 | 1 + .../a19b35a4d18309cedee680e614284bc47976d85c | Bin 0 -> 22 bytes .../a19dc5afedb3934e752d62ea0cdb1905bb319b44 | Bin 0 -> 8 bytes .../a1b4ddd05b8d5e357dc7833c8e4320add20fb911 | 1 + .../a1d5daa1bf7252b2d0433204350127c79475d16b | 1 + .../a2085729353eaeb87b3ab05409a69b023603596c | Bin 0 -> 8 bytes .../a238149b4bd983b37aea186bb7f45043b324420a | Bin 0 -> 237 bytes .../a33fccdaedbf26bfe4793aedcb443145547e9dff | Bin 0 -> 24 bytes .../a34fbd690b59766436942dcc3328ba4563dd171d | 1 + .../a3c63cb92bc11075f4d18f562fae56885ec6cca8 | Bin 0 -> 4 bytes .../a41f1dda8673725027cc8658ee0c2384f585bf39 | Bin 0 -> 74 bytes .../a5a606252b4cae9f0bfd12b373228153434211f4 | Bin 0 -> 5 bytes .../a5c89855d0edfd8151ff552bf061d06558d00ae3 | Bin 0 -> 24 bytes .../a6b63791473c10ffba051650212d009b806797bf | Bin 0 -> 130 bytes .../a7543b5ebf6881cc018277a337448f1936fc949b | Bin 0 -> 123 bytes .../a79027896d80caaf1084a88755c9388278a8da84 | Bin 0 -> 260 bytes .../a7a07432907667a7b5b69d58159f5f21ddd22066 | 3 + .../a8543b4ca457728c44daa45f94bc4f0b90e7f51a | 17 + .../a8a260553a1297a1abae8bd687a362798f99c535 | Bin 0 -> 2873 bytes .../a8ce50c57aee91c7f46325d99b3e83ee4a435f9d | 1 + .../a938c006bca04663e2b25de1d13eb9c6c3d853cd | Bin 0 -> 376 bytes .../a94f91fb10db1f918b068afd7b743f89f3920ad6 | Bin 0 -> 5 bytes .../a96be5689dbb4e4527c5b8821bba427e271d6e3a | 2 + .../a9715ac3612352084b45f323c2ce3fabc50c2d3c | Bin 0 -> 48 bytes .../a9b4f21bc44d6dec2ff065df1d505d968f83cd1a | Bin 0 -> 287 bytes .../aa5363a1080183d6e2d6822188672330fd546094 | Bin 0 -> 7593 bytes .../aa81816726967b745099c6605208b12ab6512358 | 1 + .../aa9099df99c03b2a02261e84f26890ba90399a00 | Bin 0 -> 53 bytes .../aa94a7ffb4abeee3da7ddca72be47f5085ccd568 | Bin 0 -> 337 bytes .../aac645e7b58a91f8b29661eee167366bd3736895 | 5 + .../ab0debc2b661eb18335e6b9bb66ce5f376c49947 | 1 + .../ad4d2c3941fba7345e08f57de01ed7e4eec8e7dd | 1 + .../ad5a25c5802a64a015b54ef8b2430ff5406d3841 | Bin 0 -> 273 bytes .../adbeb345334fba0189069ef5dd5aa32745e044ac | 1 + .../ae4f236c5b09f1ac8980059661928a5bf2bbbf43 | Bin 0 -> 238 bytes .../ae6cbbb1dd61d148ffed03449fda8dbdf8fad288 | Bin 0 -> 32 bytes .../afdee18a5a31a3b0abef4f2a4e9773b710cdc347 | 1 + .../b0112f2da27838bccad492cc2d834a88e2626689 | Bin 0 -> 396295 bytes .../b08e8223c1df541f5eed8d2991e895fcc97005cb | 1 + .../b0a84f5d425d16737c5245f81dcdef960f4fc4c1 | Bin 0 -> 64 bytes .../b119db33bd76a4019130d10ecd6f233c2c613c01 | Bin 0 -> 9 bytes .../b1628d7b309402a87bf4dbdadc4e0212daae154a | Bin 0 -> 6 bytes .../b24fe165ffb8d78e02620df66065f8cb83894753 | Bin 0 -> 903 bytes .../b33f0da9d508b982bbeaa43dc7933257e2dda653 | 1 + .../b3509233a74dcc24de99e1eddd861f380b276acf | 1 + .../b35279bc8c503122306949f52c25eee1d0a7d03a | Bin 0 -> 8 bytes .../b3f14bf976efd974e34846b742502c802fabae9d | Bin 0 -> 2 bytes .../b40b9c9c311db889bdf52554584a92ed9a4fc5f2 | Bin 0 -> 242 bytes .../b445d047770dd8fe58daaa8fe327601e6e54b05a | 1 + .../b48fb5465f973c20a1b9f40ea58bd9d20573c33c | 1 + .../b4bd9a91ec8f90d47417fea32b2511111d0fa008 | Bin 0 -> 64 bytes .../b4dba25facf0bb55596e22edad9f464b0c97ecc1 | 1 + .../b50567f373e09982d80dde31f0dbb87a4e354c70 | Bin 0 -> 3625 bytes .../b58190b99faff2ad9403763da6624284a8552b75 | 1 + .../b63d227bd0c74495095eb391559f192c8e75b4dc | 1 + .../b6b7e7f757eb89edd1e10a45ac162f762b5a5eef | 1 + .../b6c561bd6c9654aee1706371463cd181e3df48c5 | Bin 0 -> 11 bytes .../b71cdf5f69e729b078946d5f4027c865c1ca59ad | Bin 0 -> 32 bytes .../b733d1ca7b728bbde5bb6830ca82b000b4ceedad | 1 + .../b755435684a8c8742330c449a817b9d53b01dfa5 | Bin 0 -> 1019 bytes .../b902cd2e6076103fff472e6fdfdac67c0cced3d6 | Bin 0 -> 36 bytes .../b9bc4cb5cb435aae4e1bad70a0cf9f4bdd2fd68c | 4 + .../ba123374ca2b142e234e6ffce0576966c252d081 | 1 + .../ba3cacf6f5a286b3786b09ad87eed7d2ce45dfd3 | 1 + .../bd7cf4421044737e6e5e3b745a2731f75cc21135 | 1 + .../bdd4d880da10db22a0924accd42ba8db6acf3289 | Bin 0 -> 8 bytes .../bdd4ffbd38d81f69fc662e1bd0794156113b0450 | Bin 0 -> 499 bytes .../bdf664a642e7e23cb503ad75d1af96877f82e796 | Bin 0 -> 7385 bytes .../bf0e6c4ed317e97ffc4e9e59dc8617d33c1f5b1f | 1 + .../bf1065f4747bb896c5c7e67cb3b975fb9835c611 | 1 + .../bf168486f436d1c92f1fa6a2f4c7136a2652ac5e | Bin 0 -> 12 bytes .../bf16c138c0296f0f4b3374cf9c558fab237ba8b0 | Bin 0 -> 18 bytes .../bf268cef115c57244b4549ac5ad1f400e5fa851d | 9 + .../bfc359d1439ee99a6b040c0de761316db7260161 | Bin 0 -> 7 bytes .../c01d54e0d7d1a9a679327fc657e2eb562ee2a4db | Bin 0 -> 11 bytes .../c046a80861ff544b17a7b43c04fdbfac656f935b | Bin 0 -> 64 bytes .../c1f01f362ec78e619fc63ac1bb525e8599920008 | Bin 0 -> 876 bytes .../c208571bc322e36096807979457bbc16a8d57c37 | 1 + .../c2346feb346b2b91ab789d160d6cf81a8e229ccb | 1 + .../c2ec2e45736794d5b72f79abef7f6947d24b8e59 | 2 + .../c2f5f5de841c932274fad360dd3f3a8f3f55d7ea | Bin 0 -> 7158 bytes .../c3901b10f11edaee8cf85b9359f6f4189686e825 | 1 + .../c3facd6eed7fd5d7f9edc879430d5bbb94226561 | Bin 0 -> 27 bytes .../c40fc59771017e049ed7dfc12606d7e56a4d2321 | 1 + .../c4523bd7d08b05298c31b95a82bf534bf6597812 | Bin 0 -> 18 bytes .../c4d8096393f088c707addc058aaece73a871433d | Bin 0 -> 90 bytes .../c5125fe1dcef0c2400249382f85f4c7cccdcd09b | 9 + .../c53cae7dd364bbe39b111751aeaf390a0d685bc7 | Bin 0 -> 1545 bytes .../c6daf2ef1c2f2eea01abccb423e1f21448f0d27a | 17 + .../c73799bfb6cf5da3e5ec75dbd774a5121e535699 | Bin 0 -> 629 bytes .../c7397cf643b59c47a4e3935087c7897b597d224d | Bin 0 -> 1490 bytes .../c746024636af38fd84171b3fbb8535c384d62c94 | Bin 0 -> 64 bytes .../c765fd0bc1f8cf14222a2d192a64f95880bb1ad4 | 4 + .../c83a15cbe61a52848d59f77e8b1b59eecfcdb7ca | Bin 0 -> 2995 bytes .../c84b9d02fc1608825f8bdbc721e7fe5a9b67eb41 | 1 + .../c912c0b75b249099b400fe67e67b33d754e94d34 | 1 + .../c9e5d4dc5af1d21b28e4e56320a539d0190d12e0 | Bin 0 -> 4 bytes .../ca14a31bec9dfaa281ab78913aa7baf43c52d84b | Bin 0 -> 12 bytes .../ca44922d31db861da7e3b0baff305f8570b78193 | 1 + .../ca54853c6ab1f3779f72349427e0c26af0cc6c98 | 36 + .../ca7e922d02f70b7495fd586b12b7f2cc69b79e45 | 1 + .../ca8dc08082f5ed7158dffd1a53704795748d5d55 | 2 + .../cc07654bf1885690d093e8172e53bc30fa83bbf6 | 19 + .../cc1f520ac1efab7d1c99b3e3331637efaa0029e7 | 1 + .../cd040553e419e407917a389459c47baaf546cbda | 1 + .../cd72dd4a2af7f4ccebd67702c3a287b3cb018f69 | Bin 0 -> 64 bytes .../ce1a3befe579f9e574a80ec39316728c263b5a44 | Bin 0 -> 23 bytes .../cebdbd95b45b60341d350d4b3c54bb0fda48cf32 | 1 + .../cef9c8391ea7ccd3220eafc5033c0a2418e0374e | Bin 0 -> 12 bytes .../cff59d8122a016877a09322a51938b1ea076a828 | Bin 0 -> 911 bytes .../d01061380778633f9b4a72a4c34a9d3e7d4b3504 | 1 + .../d03b0644433de97212c6bdb1e0a24ac686befe58 | 1 + .../d0c4b991e835d25ee7043e8b8b4b7e50a731e27d | 1 + .../d0ce7fd02be1a62ea9b75cf35a34fbf7c026a9d8 | Bin 0 -> 25 bytes .../d128fe0bc7ae213378a03e5f2e260780d9c09acf | Bin 0 -> 13 bytes .../d17dc7fc5c23003ae354aad6f5d21e98270801c4 | 1 + .../d17f247fe8a0998745972d528308f98361e87557 | 1 + .../d18f112320ad9f0a0301501431528e3471da2cc7 | Bin 0 -> 13 bytes .../d22c6eb8369f160766c7932e80447052352f06fa | Bin 0 -> 278 bytes .../d340c36ebec364d34c1de1726c44172442a7e355 | Bin 0 -> 339 bytes .../d3791aafcf7ab885d44112b6a5d55cdb7739df3c | Bin 0 -> 8 bytes .../d394703f7511c7bca89b465c63ffe7ffbeeac19e | Bin 0 -> 12 bytes .../d3b3039003eb7192d53b6ce89b36724d2fd7637e | Bin 0 -> 2102 bytes .../d3fb21c655ee2f476d202b8cc50faf01ef2f2cfd | Bin 0 -> 951 bytes .../d45ca7d850670b329f29dbbfa015c95dd574c249 | Bin 0 -> 12 bytes .../d4e6857ceeaffefe87091674e6756f6334a91c47 | Bin 0 -> 262 bytes .../d5d0a1b2364a6735fea0e057304932053bd9639a | Bin 0 -> 295 bytes .../d5f9c956409edc620070eb6049df2ab31a235ab6 | Bin 0 -> 25 bytes .../d8a30384341c38fa8c8d2941320fbe454f87854a | 1 + .../d8b0e60d3c460a80a1a8288a0c988e0b342f7a44 | 2 + .../d9b2b8a674ca3b46d216f94ac1cf3c133027b943 | 1 + .../da03856e9f3c3e22e342dfccb4cacede7a1b63ab | Bin 0 -> 54 bytes .../dac027a0cfd82171c52f0836099eb32d2db5284b | Bin 0 -> 22 bytes .../db595d74c29e38f17665a05239f27a709bc24cda | 1 + .../db7bc5e471529ac346ed8725516699e4619806f7 | Bin 0 -> 10 bytes .../dbc2045d8f266834887df6b4efb670901988cadd | Bin 0 -> 16 bytes .../dc6bd6927e7af31ee921ec30cae98b662b4b33eb | Bin 0 -> 8 bytes .../dc9ad2e4e03df85ffc34e4ef1f2ec9d98ee1c582 | Bin 0 -> 815 bytes .../dcd63fa3aff61c70507a02bcf02f4e78aa9095b9 | 1 + .../dd0de759f6399379d7858bb8f96b68f2e81fa0bb | Bin 0 -> 5 bytes .../dd9b8e439c73f8d817036427f82c8c0fba53505b | 1 + .../ddd451be375ee6bc1ec8e2eba45ef9fbf1e7015d | Bin 0 -> 145 bytes .../de0120ee3cbff8de7f943ed3f5e7b83cad222b4f | Bin 0 -> 21 bytes .../de433b73643b7dea1ffe8fcf89a4448f921ada5c | 1 + .../de532841b1a7502adfb0f77620e6277d1db19cf8 | Bin 0 -> 112 bytes .../deca50b677fe8ed12dc027d5424ceba762d5b7e3 | Bin 0 -> 9 bytes .../df3c0a21d22d2592cfd58c0d709f80924f193587 | Bin 0 -> 4 bytes .../dfad06dc230396bc6f846df6f25aff6419a427c1 | 11 + .../dfc7923dc2d026ec8b9fe95ef01deb54f0d01d27 | 1 + .../e0ed8db3840119ef6d99e571928e7f14512cb59c | Bin 0 -> 85 bytes .../e268b5e46b6e045e004bae6ff44c22109e97efcb | 1 + .../e341b44b57620d2815a0a78ea255a17cdadd00ea | Bin 0 -> 34 bytes .../e351bee3867de466611904c30d64664b31b3f67b | Bin 0 -> 19 bytes .../e39ec802a2f2e75d56959ce7528bf313b87ef78b | Bin 0 -> 146 bytes .../e3b2d4a48bd462a33647072e49794fd2a80d79db | Bin 0 -> 32 bytes .../e3d04fa6afe55e6161d51aef7e1c916ff282feb4 | Bin 0 -> 128 bytes .../e441b5ed66f47dc20d7de9719407eddaea3b6b0f | Bin 0 -> 113 bytes .../e449746789369ea8094ff0d19fe6461d268c84e7 | 1 + .../e5a6c4edd4a9954a263bd9d292b81a0f19d7a6a1 | Bin 0 -> 473 bytes .../e5c322678a7590a3234ed6c271e9bd9e373ad07a | Bin 0 -> 853 bytes .../e62702f97628d84774e7373073285d9c44d8b5d4 | 1 + .../e64906088f9b01b52e20faf97058031ea0cdc62d | 3 + .../e64dae6abc50fb5c785f8f890a324c76f591aab0 | 1 + .../e7768137cbd7f25f2ae1f7b8ca217dafee378555 | Bin 0 -> 32 bytes .../e837b06574c6f725f15f79ea67c93c3731b82a6d | 1 + .../e8682365dcd5e729d87aa63869da99fcfdbd3523 | 1 + .../e8a542d5c01efceb8945167773d4362ea5fd2491 | 1 + .../ea4cdca728636d850611ae2de40e5f9ae444d624 | 1 + .../eaa272950c5aa65076d7c9a6eb9ef9b8b5a949bd | Bin 0 -> 14 bytes .../eb26bcdc36985d47574eb024ca89a9d48eb1d1be | 1 + .../ebfb6a6ec29c79100a9588dacf13d106f76b2912 | 1 + .../ec43a4d2f7b85bbc9f1e9902b9a14857720899b2 | Bin 0 -> 25 bytes .../ec768615e8190deef5438f1b32acd0ba72cae480 | Bin 0 -> 1931 bytes .../ed341f97baaf3a5fb905d469f2cab700c4af7d04 | Bin 0 -> 6 bytes .../ed859136897482e24aedf1e983f1a3fa046cdafe | Bin 0 -> 844 bytes .../ee90825c228fdeb78930660407b0db3d16b6a3c9 | Bin 0 -> 1284 bytes .../eea6729f0b4b15e36a9725d3cba23b39ca1f119c | Bin 0 -> 36 bytes .../ef1bff6a1fb0caf4e9b1b205d87aa70be3e0acd3 | Bin 0 -> 118 bytes .../ef269abff849f1bbaae529d8dfd76ec720a43462 | 1 + .../ef3b5dd51d64de04e57c3809a65eb8eb0ceb1ae5 | Bin 0 -> 64 bytes .../efc97347ce280b149f9df3c1dd02a3089859a671 | Bin 0 -> 4096 bytes .../f036aea710b394155c4a0b3075fc5a24a9466c2b | 1 + .../f08455633bc22ac2460cbb7029358066cd1d5cb1 | Bin 0 -> 48 bytes .../f0f0ae98c224dd4bd765106620c94eca90217e8b | Bin 0 -> 115 bytes .../f1331e8b9c9fe53d33cb5b437eb37afb01e12b3a | Bin 0 -> 12 bytes .../f1a1ecc8b28a9d541439527abc7c85b3bffc0833 | 1 + .../f1d1d8463e9ce2527065fb0742fe22cf210065f6 | Bin 0 -> 812 bytes .../f2358589c0dcc3b3b9d2c5cb840101e2191ca3cb | Bin 0 -> 8 bytes .../f238d7dbf391b264c88579892cb54b2170fc7bbf | 1 + .../f2438e360ab7835019c74e53f8c063566e4025e5 | Bin 0 -> 10 bytes .../f2b61836f31393e9c149bd60871add50f3a98bde | Bin 0 -> 247 bytes .../f2bae4d8e23912aa07a0ccfefdd5128594b753ed | Bin 0 -> 16 bytes .../f2c1ccf6c58cbf812853dabd7e0188ce8fa8320c | Bin 0 -> 8 bytes .../f33840b2d3a9cb278cd586a32228a28e676799d1 | Bin 0 -> 1362 bytes .../f3baaf0a9f2fe0209a5924cfbac1981135ee4e61 | Bin 0 -> 7 bytes .../f3bf9d2646d2b4f4c13519afaaf62d8b3f112c2e | Bin 0 -> 136 bytes .../f41526dcc4394041665266416fc354e58c93e4c9 | Bin 0 -> 64 bytes .../f43d2912c42de505da4eb6f71fc69a9bf8747499 | Bin 0 -> 8 bytes .../f4aed5a5e088e5aa3e5e9e5d1c682e0a46606ddb | 1 + .../f4f704f7d91a0f0559d12885d30bd634c623df5d | 3 + .../f519b077c4f276ec7366d75d0c773797bcd0d44d | Bin 0 -> 24 bytes .../f5252fdc2868afeb077044d3131a2ca62347e759 | 2 + .../f57138506e36d8450b56dec0dc931328234f878c | 1 + .../f577ae9a8ac7019f1601490dbffbc9961c25dee5 | Bin 0 -> 4740 bytes .../f591ccc98552c31c376ef8b4124cfa921d612195 | Bin 0 -> 75 bytes .../f5a21f58702ae36a0f1356ea01c5b3f42ac8a32a | Bin 0 -> 808 bytes .../f62d33e39df5110d91ec01cc162a41f1724fbf14 | Bin 0 -> 9 bytes .../f66af1b080740922cce299850039fc884652c827 | Bin 0 -> 18 bytes .../f69e5a2a0199560affc98cc6a7cdb79e7db18fab | Bin 0 -> 8 bytes .../f6ca4b7a2d70b544a5987127cd0ebdcb343cff09 | Bin 0 -> 4 bytes .../f6fda2c48c3ccbed0fdc64c0b1630e8efaedc4a1 | Bin 0 -> 8 bytes .../f7bc657206a38f070c5f68876605c1341ecffed4 | Bin 0 -> 1545 bytes .../f7ddf59b44ddf9253b657c54053522cf694d3fbe | Bin 0 -> 2 bytes .../f7de7a9387f98519b95e6b6c5b09f91dafd09f04 | Bin 0 -> 402 bytes .../f8c1e112428497f7ff7e289dbe2cee5cb9538c04 | Bin 0 -> 82 bytes .../f8c52b1607cac69d4c53b6237b9e58269bb7436b | Bin 0 -> 64 bytes .../f991ae785fbca0aa030c3253c43dd652c0c95f7e | 1 + .../fa89079c59d40b65bcf3935c5e114c0d8d1624a5 | Bin 0 -> 84 bytes .../faa7a0bb854984b2eadc1544a4aaea98435fd49b | Bin 0 -> 44 bytes .../fb0e0f2f9bac04bec1c0d89ab3d4eb3496d691c6 | 1 + .../fb56cc29da665219836e17d0a90c9702f84bef22 | 1 + .../fbba446cd2199c33a2a4a1364bcbe6380add098d | Bin 0 -> 6 bytes .../fbd767e6a922f2bd8d549086053a2bd772d73b1a | Bin 0 -> 258 bytes .../fbdf26e2f0d7c45d035831daf06de72ce7845ebc | 1 + .../fc0b66b091558cd1da661d1431283a4a710f7506 | Bin 0 -> 12 bytes .../fc2b232310fbc5c70eadf68accf84079edbac181 | 1 + .../fc3e4e438c79f64ef6e1a54adb9d015107d090c9 | Bin 0 -> 32 bytes .../fc610729a45fa1f08e9874b812cdb0ce8fd1f689 | Bin 0 -> 897 bytes .../fc95e673b9102baea54ba603dcd0429549276b16 | 1 + .../fda5aea568ea1d85554fc1ceea5c828bfd54eed6 | Bin 0 -> 13 bytes .../fdd5d93175495c7336dc2e87f361fa097dde33a2 | Bin 0 -> 396295 bytes .../fdd6dad660b32173d298245a2401c8ae996174e1 | 1 + .../feebeea46774faaa9f052f1f97549ac216f59169 | Bin 0 -> 58 bytes .../ff934115346eaf1cad28e858aabf959c6f994f18 | 1 + .../ffb1ebf27ceb558f62d4b6397a3a18050d7f285f | Bin 0 -> 2225 bytes .../ffd3cc6205c1db87b3c79960b174ee1d81999a06 | Bin 0 -> 637 bytes .../fff0c9c9996cb5ccff3d99c493d07189841fdd28 | 1 + .../0011d41db2558e20b383a5b679644558b4888e0c | Bin 0 -> 64 bytes .../0021d9ee011b5749271c200c5d9eaff2d4a96ca1 | Bin 0 -> 135 bytes .../00568aac9287e6fb0a78676b4133315e12cf622e | Bin 0 -> 280 bytes .../007c0aa18e7ef96b3baac9b82da17e01945c1d79 | Bin 0 -> 272 bytes .../00842ea682a1fb77a75d47b470998be22ced54e0 | Bin 0 -> 141 bytes .../00c2422d35ec8c3da2c285ce69b03b0d590b3c74 | 1 + .../0201ff353168f0863933be84c12057fbc2fa3a07 | 1 + .../024d6a420055e25bbfbae832c0336d395d4855a8 | 1 + .../02870772c5ca334b8f3c8aa447f0ebd9bfd5cf40 | Bin 0 -> 600 bytes .../02d9fea34393ee71d4f3aa44de25c1918c24974c | Bin 0 -> 1155 bytes .../03101b43c702812adaaddea87751415ce8f09957 | 1 + .../0351fb8e5735b85622e796bb40b8483b50b64ac1 | Bin 0 -> 160 bytes .../042159a7e26c12354f68a7496a78a09cfbd6cf02 | 1 + .../043ab69374a30eb3a341ef07621853e968ef35bc | Bin 0 -> 93 bytes .../045a0c41b0758b9cf643f92e57f0c11457aeadcf | Bin 0 -> 223 bytes .../0494ef6bf1eaaa4b3e6e371b1589a9b44e87b5ef | Bin 0 -> 106 bytes .../04ac1d7daf4f33c6087306633553b4680d835202 | 1 + .../05284472573e1ad58711ad817befa882ee713962 | Bin 0 -> 127 bytes .../056ba108496ea9ed2a295d84b555dbb987e2a92a | Bin 0 -> 71 bytes .../05d477c41b213e9010f9e46bc73346c6fe319cb3 | Bin 0 -> 127 bytes .../063f1987a20f44a1c5ae7e5a86a87be08f9df136 | Bin 0 -> 37 bytes .../06711f0f1477cee069093a3c436ea540ae4bca9a | Bin 0 -> 105 bytes .../068bfb7a8d1e55f9bf2825e8b2c8081e20633ad7 | Bin 0 -> 141 bytes .../07d9aed6d1eb93587a8931ead5e7663fd10e8800 | Bin 0 -> 236 bytes .../08fd4b3eb8beb1fb97af87347ca73765798fb17a | 1 + .../0981f1c7d97744fd770a778b37a8eced75741e9b | Bin 0 -> 115 bytes .../09d74e60cc4e079a2a0a0d68ed4cad3fc14fe559 | 1 + .../09fe083b11766c866365db5fccb2096146207c0f | Bin 0 -> 63 bytes .../0a46ce2bff408810a733bcfc0b54f5fcb8eb1f1b | Bin 0 -> 128 bytes .../0a50a78ba1f3e942b931b6fd2d86cb9fe6bd466a | 1 + .../0a721b892711dd6e06b1c85c71db724921d1dac5 | Bin 0 -> 734 bytes .../0a85c90033d14b61ee136ca947275888662cc564 | Bin 0 -> 164 bytes .../0ac9badb05be3b0e7ad40b1a2a903dd48120a8ec | Bin 0 -> 29 bytes .../0bb68fad351a71b2f54d5eca2238ec5b1093c3fa | 1 + .../0bef81f25c7a3beaa80b07f777480f089e3072cd | Bin 0 -> 433 bytes .../0c129a4a781bd04d1edb08158757a5cecd96f79e | Bin 0 -> 153 bytes .../0c2a76d4384f528a103df6b9d99f426b790ace38 | Bin 0 -> 80 bytes .../0c4b7ea6e5fc85681e9e9ac20ff060a849adc3c6 | Bin 0 -> 128 bytes .../0ca9ba1be6fc1c6737d8d064fefd15aa8c16f01c | Bin 0 -> 302 bytes .../0cc3fa3e0825bdb48d0bc417d498f6988a6e7161 | Bin 0 -> 136 bytes .../0cc627fbca0e3981f04a3a7c71a4e4dbc126f56f | 1 + .../0ce7b22f5748cf5906886afeb83e016b7d52afa7 | Bin 0 -> 142 bytes .../0cf0b5e196b939a9d8a97c0bcf8dd33b1f5f3648 | Bin 0 -> 102 bytes .../0d50c202149608e939960dbd23f49c91ea87ec1b | Bin 0 -> 1161 bytes .../0d75a556a936257c55dd6664794aa26fefc1eb78 | Bin 0 -> 64 bytes .../0db7460efb5c23cc50f82c5d19da08970853013e | 2 + .../0dd0afdde67588a0d5301d3aecc4af17284b4207 | Bin 0 -> 200 bytes .../0df04ea60fe03ad212982823400601ee345fe8bd | Bin 0 -> 64 bytes .../0e04b2516b1bdbe9aa9ee10bf489cdfcfcc76efd | Bin 0 -> 134 bytes .../0e52466227789edb6f8426d0b2521a1206febfd9 | Bin 0 -> 120 bytes .../0e62e8740db338b2f302e018c1db107c9fb00574 | Bin 0 -> 54 bytes .../0ea3dc0d4d5b655a09848593a64eaffa92bcdf41 | Bin 0 -> 640 bytes .../0eaaddf3208269e2bfffa194b829c6146bc04b22 | Bin 0 -> 132 bytes .../0f24cc7dc73b97f9d216d66da7f0249a3a7e988d | 1 + .../0f3e37e5823bdbae6b01f51bd8545a35dbdb8dd9 | Bin 0 -> 134 bytes .../0f495146f65652e0529ddc94c5a08f63310c2175 | Bin 0 -> 140 bytes .../0fe30d7e47172e68989c48a9973c683ee95860b1 | Bin 0 -> 1154 bytes .../102995c7ee6885b571f8addc64fb7f7e34576e29 | Bin 0 -> 117 bytes .../103b1efdfce267e732ebdf655ee3a173402502d0 | Bin 0 -> 134 bytes .../1068ce69061747b36e613dda9d535f1b1e5fc91f | 2 + .../10c0da3a01bd956e9a1f19dd0f2dd0ad614f519d | Bin 0 -> 651 bytes .../10c525ec33cc7753aa51fbd6db3dc0edd55ff10c | Bin 0 -> 355 bytes .../11513cc2ea09f6aefb615c628264054dc9146e64 | Bin 0 -> 18 bytes .../115501975116dc32d27279cad9a5206a8672213d | Bin 0 -> 172 bytes .../11a8da245ea8ae61e3b8851348038b9b0a457a49 | Bin 0 -> 22 bytes .../11fab1279768f8a0627ad0499be5df7f079b4eea | 1 + .../1224f713a133b27e592ac420e52435ce0339672c | Bin 0 -> 114 bytes .../123eb7dec2236797f7373aa3807164e4b7360800 | Bin 0 -> 180 bytes .../12f95be4a81864b3e0f06a15d951e1c30aba7140 | Bin 0 -> 142 bytes .../1382a27ccb5bae0693a2e18b34a2a08997d831dc | Bin 0 -> 22 bytes .../13eb6ea81f5abc65eda7c1a608f4e8aea64f304e | Bin 0 -> 1194 bytes .../146bfbadf76e7fc13df45fe7f154aed472b2051c | Bin 0 -> 121 bytes .../147a9d5b2e109f62ac167d54e4c6340ddce01545 | Bin 0 -> 9 bytes .../14b9515c2ecd4ac8f4b60810f542b6550d67b2bd | Bin 0 -> 512 bytes .../15667c8002e633bea2b1b9508089d87787d85be0 | 3 + .../15680cfae112fbbca9fb3558898237b35fb264ec | Bin 0 -> 227 bytes .../15b3068114c8a44d96307f86281a638de7b08e2c | Bin 0 -> 31 bytes .../165f666c1dba74e442a0945fc8d391d8561b8357 | Bin 0 -> 70 bytes .../1680269ba5a886db5bbd41496a31cb05b80e9caa | 2 + .../169ba9110bd77bacf838ebc7d26eb9b3897c26a4 | Bin 0 -> 24 bytes .../16c562a4001f28399b81b43194e7ccde68487bfc | Bin 0 -> 152 bytes .../170814e87bf5d02d7bfcb3f7706e546a99ed7109 | Bin 0 -> 120 bytes .../1721f18cfc82c0aaf99491fe57ab2b5eabac5b8a | Bin 0 -> 191 bytes .../1745891631336f1a484ea0109be4702b0aea841e | Bin 0 -> 509 bytes .../1762612e4e5b97f7049049b72cf1ca277d0fc5fb | Bin 0 -> 39 bytes .../179e5327973ced876a2b8e30f84f1283d166d8da | Bin 0 -> 114 bytes .../17a5a2b7d3598a8319461a6399605af31bfa9b36 | Bin 0 -> 264 bytes .../17e9f55b00f757f9fc56bd64ecd8623393d5b325 | Bin 0 -> 129 bytes .../18539c93974b08c2928ac372f369266b343837d8 | Bin 0 -> 45 bytes .../186d213af0874a68802e5b057e1ad68cf7489af6 | Bin 0 -> 1116 bytes .../1876796e8ec1c0a613bef6341ceb9e9ba987e2e9 | Bin 0 -> 64 bytes .../18a5e6e464c4e4a0f8a4629e20c4a97a0e1a8a21 | Bin 0 -> 101 bytes .../18bf1250d12f51767333d75523d318408ef59d42 | 129 + .../18e37fb683fd23a1ea949c408dd9811d9183a82c | 1 + .../18ff0a48916d43c31a1038ee6a4da037d864d2bc | Bin 0 -> 52 bytes .../191729ebf24fe1a4537066d99c1fff3e52bef19b | Bin 0 -> 157 bytes .../193cd6476751259cfd34aeaf720b4aea69eadb15 | Bin 0 -> 140 bytes .../1ac7ac93b4caa93cf1ffc00022d7ae7c890f0478 | Bin 0 -> 10 bytes .../1b37b3353bb7bb98ce6358a18546ccaaa41957c5 | Bin 0 -> 151 bytes .../1c13e233fa5abef542d4d5667affaa6006ce41d9 | Bin 0 -> 120 bytes .../1c32974ddb204e700efb309581f1df1c64d4d127 | Bin 0 -> 30 bytes .../1cbb141d3047367d9410e9d77e3ddfee89683afb | Bin 0 -> 160 bytes .../1cd181a68ab4cbd8141c3a1c83f9840405e0cce2 | Bin 0 -> 686 bytes .../1ceb6dbd665c5d58627fa31ed6c133ccc9e71866 | Bin 0 -> 32 bytes .../1d790ce94974aab40348e750d806b5885e8f3527 | Bin 0 -> 172 bytes .../1dce52bc5e9ae633d73ae196611f8531a7a37f93 | Bin 0 -> 428 bytes .../1df5935d4cd349ac78102af001ced100f31449b1 | Bin 0 -> 132 bytes .../1dfec9d84125f6a5d5467cd74103acfc88933fe6 | Bin 0 -> 334 bytes .../1e268588969ccaef637396904c3569279bfb01ec | 1 + .../1e331c9aa0cc226f7863cfcd22250045665a8ddf | Bin 0 -> 600 bytes .../1e78bfe3b31ae8904f08bc48157f2cf619aa6aa4 | 1 + .../1ecf3d863e5b5317aa9eefec0d0a7045e77b3dbc | Bin 0 -> 48 bytes .../1eded4e4ef96954ed169e59a6d7333f32547d0b9 | Bin 0 -> 22 bytes .../1efd06ca42ab8f700dd44610957c02667a0b4df1 | Bin 0 -> 160 bytes .../1f3dc7f0e6fca8eb8a13914b5a710b9c80028df8 | 1 + .../1f848503b378f9ca38384e3b19f5517fd33e806e | Bin 0 -> 98 bytes .../202655abef22e6bfd1db41dcaecc9b7d5bc279a2 | 1 + .../202c1c672fab92be025c9cf820ad90bd64f090e3 | Bin 0 -> 20 bytes .../2049a94185314d4049a8644d76a8f729051fa253 | Bin 0 -> 127 bytes .../20822ad0ee4e5ec4536b670320a475abb58e87ea | Bin 0 -> 60 bytes .../20fd5aa0c849f0b9380fe9c4ea3dd5bb44b4db1e | Bin 0 -> 141 bytes .../210b78032ce82a5c34bb8d9698156545ebd8610f | 1 + .../218049e64516ef6b5ddf7f02ebb092cc7b0ec159 | Bin 0 -> 76 bytes .../2192cbe3ddde5c7fdfdf59e36fdbf337b7a23732 | Bin 0 -> 8 bytes .../21ac33ed0badee09f9ae7e6f8b03092b4d2738ef | 1 + .../21ca7691e33ff29dd02938d482f8a894703e2c04 | Bin 0 -> 63 bytes .../2247a18cbf97b6cff011d4c46876aa3dc069faad | Bin 0 -> 14 bytes .../226f7197b6fec9431cf951020c3be838cdac85fd | Bin 0 -> 72 bytes .../22d36f609d2fab6d90ec6007031f3401e088fef1 | Bin 0 -> 256 bytes .../2319848c64272ec3b2a13dba9121254a55a54243 | Bin 0 -> 128 bytes .../233ae4cd36f6ae9db1e271f1e3e14891e18d4ada | 1 + .../237c6bf286c02ac1035cc08c704ae35d3ecb3b77 | Bin 0 -> 134 bytes .../238b5e718af7edcabda37bacf28c61bb6ee4713c | Bin 0 -> 126 bytes .../23ad6aafda19862e33be495e8965e9b449b4a46c | Bin 0 -> 63 bytes .../23c16e0edb2808f139a3e6c1af45ffa9350b47ce | Bin 0 -> 57 bytes .../2404c1ff7c95d6ef4a2bb6ef5747cbb8847348aa | Bin 0 -> 108 bytes .../241dc4b5939ec6bedb89bfe7136bcdb00d0a743a | 1 + .../24330e50e2df3d3557095d4fd9a5254215fee907 | 1 + .../2433d2dc44ff67783172bfaa063f7d045b9b1a2b | 1 + .../248dfd3b633caaa171a91d10f443a2b057dbf9a6 | 1 + .../249f520056a8959b5705eb915fafd1c2b28e18a8 | 3 + .../24f98757af85b04541d6dd3b35b3eb826f39b915 | Bin 0 -> 51 bytes .../256bbf6ffcb23254c612cdda36c6ed0240d46e0e | 1 + .../2584b8bf1482a82c9c38de04742302f97af09188 | Bin 0 -> 21 bytes .../25f28d29a6a62d98a285604efe816946be446b27 | 1 + .../2606fd48fedc4fea95b72d235b9a6d83155063ea | Bin 0 -> 1097 bytes .../260a7b88eadd99c775fb2882bde130680a4df385 | Bin 0 -> 99 bytes .../264c7e027882f9daa95032672be0766f38395117 | Bin 0 -> 262 bytes .../2687ae7871b4f480b6c9da8877cc5bd1611d753c | Bin 0 -> 16 bytes .../26b8282762b2393f1fa55c195152e421b5b0dc58 | 1 + .../26e00d4f485eeae8ef0a30e482fade1309c866bf | Bin 0 -> 126 bytes .../26e1a692ca420b60be9ab9263e7d3539eadcaecc | Bin 0 -> 93 bytes .../26e74fbbd671744b68b480e79b79204ddc149664 | Bin 0 -> 165 bytes .../277fd8049e9e9f5a83e9ff91c21a8aefd314f514 | Bin 0 -> 100 bytes .../280a5b1a13dbf2eaa771da30bcf30d9cfb27bddc | Bin 0 -> 32 bytes .../287ed5b1ab784a362038176b132f49e8a9a6a69c | Bin 0 -> 146 bytes .../28d0e02f16af466f385434c6e87d0e27ae47066e | Bin 0 -> 649 bytes .../28d86ab94a3bf8e7af0d872869184a7a9f2c7875 | 1 + .../2914d9c9a178f78f17bc6df6fffc5d82612ffe78 | Bin 0 -> 301 bytes .../292e0e049e96bcbcb291437860b4a617d9107c39 | Bin 0 -> 8 bytes .../29bf0a9990356b1a6b7755ab81d81e7e7b926fcf | Bin 0 -> 64 bytes .../29db29b1b9d60be2e46a73f31cbf838d43ccaa42 | 2 + .../2a4e0c6d06ec72b696da0051c64b053e65ab4acd | Bin 0 -> 134 bytes .../2bb39f673f900dc6219a71571f1e6606c7cfd013 | Bin 0 -> 128 bytes .../2c236dca3111f2ea9003a8c8d49090037fd62104 | Bin 0 -> 113 bytes .../2c921a5b65c55380aa25c303b2bd0ed342bdd753 | Bin 0 -> 61 bytes .../2c9ca87ca42d712550de52224fb39ae74e7a14f9 | Bin 0 -> 575 bytes .../2cd7861e8f33034a05353d25c3101ee689f2f7d6 | Bin 0 -> 40 bytes .../2d19415dbc404bceba31b1f1304ee4389d339db1 | Bin 0 -> 32 bytes .../2d3b4baf6b104759c82536e451c4a37407e92da5 | Bin 0 -> 31 bytes .../2d4c328a0efea3aa219cc6df06d4f0f5d7d5d881 | 1 + .../2da07b60183b7b0dcc55e85fb30cf05558834c2e | Bin 0 -> 139 bytes .../2e04bf331da1d2a48119c2624940c85a2bb96cbb | Bin 0 -> 256 bytes .../2e6632f80f09609cba55db6a73ebbf22dd5b5011 | Bin 0 -> 181 bytes .../2e796e46ccf106811da30504c7e5644b5aec31b3 | Bin 0 -> 54 bytes .../2f507fa3b7b6dc55a99afda7c15e0c52f65d915f | Bin 0 -> 23 bytes .../2fbd2164911e4cba6a0ba65608151fd577436da0 | Bin 0 -> 256 bytes .../3093da32425f62472320e38f4dacd9751120c04f | Bin 0 -> 109 bytes .../3106a174559e3e42965ac063dd2128e62868dca2 | Bin 0 -> 48 bytes .../321d56a4ac1f5d15d6f3470ed8983043436db196 | Bin 0 -> 207 bytes .../321e7b54cf7aea8d1adfa44cb9bc7243a7d0f6d9 | Bin 0 -> 57 bytes .../3286ed4d96f7bd3d8ecdbae91080171c5e3a5ed5 | Bin 0 -> 202 bytes .../3296a01c0079136a2e5408545c1467907933ffcd | Bin 0 -> 8 bytes .../32edcbe6abdd0d8a69316ae25d1f786f50f5083c | Bin 0 -> 56 bytes .../339d345718a741663b28888f038bcf97d26f8ba0 | Bin 0 -> 58 bytes .../33dfa4ae19057a36826cbbf896f5e3e884b09016 | Bin 0 -> 126 bytes .../3462fea3b762838d045d4362cd25a319104204f0 | 1 + .../3478ba99bcf7b78c74906874966e98b8ff20f4f6 | Bin 0 -> 107 bytes .../347f887e6ea6bf5ca09bf037846232ea0e240949 | Bin 0 -> 146 bytes .../348397ea401f30a113a7ef71258b1ed44b8d7525 | Bin 0 -> 61 bytes .../349f96a5e8f3ac016017aab69e8d05a98486c40e | Bin 0 -> 24 bytes .../34c6ffc54b69c3b9c1ec1db4eb00e1c89878b78b | Bin 0 -> 149 bytes .../35ab47a2ba2dec89a3686fffc8651f08084df495 | 1 + .../35c3206b7f011379adfc8cf85df241172f5c1c63 | Bin 0 -> 40 bytes .../35f066bd737b99272cd9eaf36ec190f5004b457e | Bin 0 -> 188 bytes .../363df844cdcb142eb7cf09bc258f95a58ab90c6d | 1 + .../3657205be84517271f18aef7586fdf2e553f4aeb | Bin 0 -> 154 bytes .../36579426d25530a16d21c01b7755aac46ae3dbd4 | Bin 0 -> 41 bytes .../36660a0225cfb187b72f9ea446f583e1874ce8ca | 1 + .../370428396773e8cbdb38dc17932500ac526183f9 | 1 + .../383cc381198264357d960e9f206d00d3f5f6a02d | Bin 0 -> 109 bytes .../38690f58256cffd05890d3ad140ba2cfa17a3d2f | Bin 0 -> 210 bytes .../38ae5523b8eeed1763ee82d81cb1ab6f0712fb35 | Bin 0 -> 70 bytes .../38f7dfc86bba49dc5f8f873e0f9cdf1087904ff8 | Bin 0 -> 275 bytes .../390167c36e0d55aae9bec2c1b0113d831d8dcb2e | Bin 0 -> 106 bytes .../39177edbfe7a7abba6ac6e6f1554e8a558cf5776 | Bin 0 -> 128 bytes .../39466690ea2ed65aef23629fe499492c5b85466e | Bin 0 -> 348 bytes .../3957191a00bf8a892d16f8e67d88879770ab2d15 | 2 + .../399ee600fb8ae34ad17fea2ae0e7b08544d0c734 | Bin 0 -> 116 bytes .../3a23488ce4b978caa112087f8da78de98b0edca1 | 1 + .../3a559782633f66a5661c45f1f2e6b95320254741 | Bin 0 -> 135 bytes .../3aa733d68bbde7d5a002ed0932b64ecc1de18af7 | Bin 0 -> 16 bytes .../3aa92b49de87a3a259d7f5e0abbb0629becc2ff5 | Bin 0 -> 15 bytes .../3aaaa2d3474947ee9829a79df4dc9b02c8c3f620 | Bin 0 -> 58 bytes .../3afb3f67159cb77ba326d58298f93722afd73941 | Bin 0 -> 544 bytes .../3bcd7f0060b80069012f0df0a783afa28c5727c4 | Bin 0 -> 742 bytes .../3bf2fbcf306b1f8e8d6822bd6af0dccec6f87acb | Bin 0 -> 40 bytes .../3c0d0eb59bfbbf26bfe3f2f5235ded7e6a4f5cb2 | 1 + .../3c5347ab8721451f037166d135c2eee5f7252011 | Bin 0 -> 226 bytes .../3c6bae49e5b32c8a70d3e9f6727fc4f58bf48d95 | Bin 0 -> 140 bytes .../3c8a7388f02ca309a8e9e05e92afb2cc04705ad8 | Bin 0 -> 88 bytes .../3ca36d05d51f4520ee74b9367983baa4c934e3c7 | Bin 0 -> 40 bytes .../3ccadc09ac7409bc3b1a1f3d7bf7d5fc200d07f6 | Bin 0 -> 37 bytes .../3d28cdd566dd0c7f4740bf4b428cbc49b9dab863 | Bin 0 -> 125 bytes .../3d340074a4f182d061fd43b0e0b2f6c19f481202 | Bin 0 -> 120 bytes .../3d51312150359597c03deffbde7f2eb3a9b57411 | Bin 0 -> 45 bytes .../3da03b453fbfb6212d35ce8266469d5c8ec31473 | Bin 0 -> 45 bytes .../3e162d7a180d37984ed5126b0d43a7dedf22b317 | Bin 0 -> 12 bytes .../3e2373264e7fd5afb5d0d9cddc9761beb9418a7e | Bin 0 -> 151 bytes .../3e56a3546d932e176c126bac69ee2a73a9581d02 | Bin 0 -> 149 bytes .../3e84b136027229fd82b3e78aa0f543c5b0043f8d | Bin 0 -> 97 bytes .../3e9cdbe846d50a2c7f44b928be233c9287923818 | Bin 0 -> 30 bytes .../3efc568a4aa68498f0e98f8370cb9f89d735e1b2 | Bin 0 -> 101 bytes .../3f0c67d823d6f523c9753432a56850ed093af759 | Bin 0 -> 64 bytes .../3f40842ff5d604b617e0442fbdae5d9cf186df35 | Bin 0 -> 32 bytes .../3f585c5207ed799c94d6fc80df4ac92119bc5ebe | Bin 0 -> 64 bytes .../3f7e24eba5b5823b0b87f9b837af0f1865b8f03f | Bin 0 -> 69 bytes .../3f9a64bf80bca38bd3ce1e3610ba9a329b809e3c | 1 + .../3fad8a95c80a9f9aaa0729601847cde6edd4f876 | 1 + .../3faf46acbbdc3a4197bd5a5a35ac157ef86514b1 | Bin 0 -> 1195 bytes .../3fe27f30449867805256ab4f87b1bb6e6afae5e7 | Bin 0 -> 32 bytes .../4038eec1f32c4891d0813c60c9bc94bf272d7752 | Bin 0 -> 128 bytes .../40448a317efe68881f67cb8df8bf05a4c6b18fcd | Bin 0 -> 100 bytes .../40afb848080f7d38af1be2127eab7f5f3326977d | Bin 0 -> 90 bytes .../40f212a8f933208c9e4cbf149df5a220601d8d6f | Bin 0 -> 152 bytes .../415a45bfec26dd13dad64d02b434409a26382f28 | 2 + .../41cee39eb76192d52c9f84f08e14f7c2e6533f9a | Bin 0 -> 257 bytes .../42c4e70ad84af50112945fc17eafe7f69eebf08c | Bin 0 -> 150 bytes .../42c8af90063a5a1eea87c7a6cc07f3171f720d6f | Bin 0 -> 140 bytes .../42df56db836e01acc96da7c7871c3675bf77a835 | Bin 0 -> 16 bytes .../42e4bd416880c6ea560bf3e221377c13f774ff4d | Bin 0 -> 149 bytes .../430483a9d2492af839eceaf169f5303a1c22d0fa | Bin 0 -> 101 bytes .../4347192ee942b21217f9c38570eff21323ce97fb | 1 + .../435498ea53137812cc738e0cc1cfdf8e01e62022 | Bin 0 -> 127 bytes .../43c3a255149f17d81946353a3959d24df52d0e07 | Bin 0 -> 202 bytes .../43dce8709e242b7766ce40259e6e518264091c74 | Bin 0 -> 132 bytes .../43e501ceb0f3062fb7db96a0094e58016c71cdd3 | Bin 0 -> 39 bytes .../43e679696b681827d5f619ace6655f74cdfda9c7 | Bin 0 -> 261 bytes .../43fbb5205a20fe1fab5808dde504c1b008e1fa37 | Bin 0 -> 41 bytes .../44009f597d911dbd33f5d3d6efff84a830ae21f3 | Bin 0 -> 120 bytes .../440389be8bb74ea651681f6c77b7b551b98b1e21 | Bin 0 -> 112 bytes .../447cf2b0e1caaf5d7bb03ffbd959bd9b424dc7c8 | Bin 0 -> 249 bytes .../45082cc15b05eadbd9e8913985f72357893d45e6 | Bin 0 -> 140 bytes .../450f136b9acbefc1d41eccbeb75bc36015580627 | 1 + .../4535a7123d911bdb0037b747109c7bad9a7dabb2 | Bin 0 -> 55 bytes .../4541c607b7744fb60768e1f20192b1554ff50d23 | Bin 0 -> 106 bytes .../45d67f5ef07bb00e661553e9385152340b7880e8 | Bin 0 -> 78 bytes .../45e37def1eeef7d9f4ebef8432e2f33f96d57210 | Bin 0 -> 126 bytes .../46999e4f45ca34500f3e3dff127bc960e47f2212 | Bin 0 -> 40 bytes .../46de162d688e6af9f5b07993e75f435a828561ae | Bin 0 -> 63 bytes .../46eadf79382f8774e49a0782723d680678625237 | Bin 0 -> 696 bytes .../470739a78afea3637df2c9001060439d1c971c04 | Bin 0 -> 128 bytes .../4732538b40f43473eb689e88ec7183320fa8f51d | Bin 0 -> 638 bytes .../47e47fecd21a2c754595e986a51171f77cb96f32 | Bin 0 -> 64 bytes .../47fce7675d692b5ac8689311a7dacb1dc90176fa | Bin 0 -> 32 bytes .../4832d64b1620e0ed29c5e30e8f46179b2fb0b316 | 1 + .../4856a41125177c7c3cb904cb1dc23365732ddd12 | Bin 0 -> 157 bytes .../48809304729df6310c9df53585f08197a7da44ab | Bin 0 -> 9 bytes .../48d04426041318dc151c656996e9c320b899b060 | Bin 0 -> 280 bytes .../48d42bc6b1acf00b03c8cb471811dd5cc7368a7b | Bin 0 -> 150 bytes .../48ea6a560c73987d7a0b679865a270d9015bb501 | 1 + .../48ebf82704f3a4a7d2c76ad24e8643dc15416326 | 1 + .../4932d7b3de8e97906310b6299ed5b4d35f2863f5 | Bin 0 -> 40 bytes .../495a281b0163b878f57cc62cc16753b675a325ad | Bin 0 -> 71 bytes .../498a834ab25b440c3bba77d965ead8caadcc2640 | Bin 0 -> 94 bytes .../4999193d6ae6fb7e3d7a0c679b5a84eceb9a9627 | Bin 0 -> 233 bytes .../4a7feb5e7651b3bbd32826d0a8144732d3d497cc | Bin 0 -> 152 bytes .../4aa3286984be3ac1231a0d92a1c9cc6fe38d0c67 | Bin 0 -> 135 bytes .../4ad859e13a5b2d49675ab691dd28412152c40abc | Bin 0 -> 160 bytes .../4b0ccfac9808148aff8b1f8cc251bd77479ccc3e | Bin 0 -> 133 bytes .../4b1cfd86d2fd02b50cf041729f37965ef244c042 | Bin 0 -> 74 bytes .../4b6271cf3bbc6f25598cf7d002af91b1b831b1fd | Bin 0 -> 250 bytes .../4c6c50b3d50d94b6c59711122c004860dc9b8d1e | Bin 0 -> 80 bytes .../4d1cd6ef59f645b9c4f6a4b1d7eed81d1702b13e | 1 + .../4d2127ee9e7d595b58e360c84a6723f91bb9e360 | Bin 0 -> 126 bytes .../4d4fca7e00c64df2a849780acfdc0dcf010b4cd8 | Bin 0 -> 127 bytes .../4d76a9a9135289f3740649e5180ed05f984d0168 | Bin 0 -> 512 bytes .../4d92b25a7e9872d50e77d3bd026f8e084991248c | Bin 0 -> 434 bytes .../4da1659dff86ce281dfc8af78802819339934a24 | Bin 0 -> 261 bytes .../4dab18090cddbd8463d93ce60886537edd17edbc | 1 + .../4e376522ea32e46bba92fa328d824e8483ed7a79 | Bin 0 -> 200 bytes .../4e3d476558837c641fe298009de7b88605b4b488 | Bin 0 -> 169 bytes .../4e4e988be06ba208cdf0ce84a360fac1bc855632 | Bin 0 -> 109 bytes .../4e6b21d837f0fb279d9a032ad897396e08f88a44 | Bin 0 -> 113 bytes .../4edfc78973e6ea007fcce349ad19979751c28ba9 | Bin 0 -> 112 bytes .../4ef057daa5a559d9eb70a1f6e12fcbdb483894f4 | Bin 0 -> 647 bytes .../4f0877170869b0b813943b84f02023845411e5d0 | Bin 0 -> 55 bytes .../4f19b2a777f71508520f916ea9a71744f5f8a2b3 | Bin 0 -> 111 bytes .../4f5b854cc54fc0da48b782c62f7b387398cb9a51 | Bin 0 -> 169 bytes .../4f856fbc162fb1d1035ec5a86c11e78a11bd8f42 | 2 + .../4faa799784b7025b0c32e9828f03d61401844b79 | Bin 0 -> 64 bytes .../4fbcc55803276eeab8e263c93d860f70b989338c | Bin 0 -> 111 bytes .../4fbe0885196250d34f72aa35ef7786a9d9f2bac3 | Bin 0 -> 120 bytes .../505c2317e068228df5b37054f3446ca82580f8d6 | Bin 0 -> 259 bytes .../5075f2ec95fcd21a7e6dffd9c3e182cdbb06db5d | Bin 0 -> 126 bytes .../50e7480d24c046b696fc9783bb2c549d17c2fd25 | Bin 0 -> 1157 bytes .../510932b3b619cfe77e28983ae4e7cf862de086fc | Bin 0 -> 127 bytes .../5136e0873a549e75222195649e2aba905f36f343 | Bin 0 -> 160 bytes .../514fc5ac23ea84c9aa1ba935f8575f9e309b68f3 | Bin 0 -> 157 bytes .../51a51ed3821ee373cfed0fc0b267a9079f213760 | Bin 0 -> 645 bytes .../523812bd98f2c67a37522b8018011fe273d99d15 | Bin 0 -> 152 bytes .../527a911753d4e8ec56f32376a9ee6cee812fcfbf | Bin 0 -> 316 bytes .../527e6ba895ea4ab722cc605a5682a89d5e172687 | 3 + .../527f76fd9363d6c5a69c9d7cd9bf21788539c8e8 | Bin 0 -> 38 bytes .../527fe821371d44a90baf09440689f2b45dad761c | 1 + .../529ba8f3834a042726e069a863b0a7d0bcb21b8f | Bin 0 -> 63 bytes .../52e440a4bf08fd115b860de6e5633a91e8567352 | 1 + .../53275ba3a3fbaf4f00fb8fe051ce56520b768598 | Bin 0 -> 360 bytes .../533d3a50c89d052870c6f5ddaa1c231fae38a4b2 | Bin 0 -> 37 bytes .../534549cf05110c41d44f9edd8c2e8989e7fc47d0 | 1 + .../534e1bd75165cff183e5707393597f02f2606017 | Bin 0 -> 47 bytes .../53d9a129aaa202c4647536b917666e3c744a3c97 | Bin 0 -> 38 bytes .../5408595f675bfa026853272d5fa11891591968c2 | Bin 0 -> 23 bytes .../54807ff333f91299dc9e7e535840613d0ce25451 | Bin 0 -> 120 bytes .../548ea4993d4b03d7d91f79bd2da4051fcc229f97 | Bin 0 -> 127 bytes .../54f65c915ffb78ec4681db6fa409ca1850c03df3 | Bin 0 -> 208 bytes .../5505e32ff695f06c4a6fc4777cbc0bfe75d9031f | Bin 0 -> 120 bytes .../552e8406c5bd74fd6885de0850872ba227d1802c | 2 + .../552f1a4e8c09b4e02a4ceb041866bab06937f68d | Bin 0 -> 124 bytes .../5575b8b212b9f893a6f8b32a2d9de7c7e09fcce1 | Bin 0 -> 24 bytes .../55d8f5b95483caa0056103ad34137fb6edada499 | Bin 0 -> 126 bytes .../55e49eabc1d05f9bb224a7a446a40ac9f7d73d22 | Bin 0 -> 74 bytes .../562481814a23c4207d5f7430a6167cf76a01bb00 | Bin 0 -> 32 bytes .../57234409154d6735847aea01e4d677b521940a5e | Bin 0 -> 159 bytes .../57821cc6af22200dd6b5547c76050b9ddb29153b | Bin 0 -> 137 bytes .../578e3cf7349490612b089f917b978500966c8797 | Bin 0 -> 120 bytes .../580a88dc67cfca498b6e3547ee068ae65be42ba6 | 2 + .../583605a902a23bc9a61fa1c419b2becbf04cfc91 | Bin 0 -> 160 bytes .../58e81a89e23337479e81b2f9c51f36ef339f90a6 | Bin 0 -> 258 bytes .../58f0cdc55c23aa628b19b473be923496e8a7ab3a | Bin 0 -> 1155 bytes .../58fc5cf8b1cc41b18d7dc52091b7c0e7a5f07bc5 | Bin 0 -> 250 bytes .../5929d725fc8ea293ce05aa2527b778af0bf8a31e | Bin 0 -> 580 bytes .../593498aa5940ba0052d6dbd4a70aff56612eb7c7 | 1 + .../599207807da0ee473781b708eeb9c87fe445dc00 | 4 + .../59bf2f5e14bb4151f7089fbae0c9381cc64c9ca3 | 1 + .../59e57132d8b34806720fd38b717205a06589aa8e | Bin 0 -> 146 bytes .../5a41dae90a1328145620749f7c64a92ef0adf16f | 1 + .../5abbd742dc2091c59d66b92b8f7fc784cd7ae6ee | Bin 0 -> 25 bytes .../5b254ce022c62298185b9e23d125813258a228e4 | Bin 0 -> 133 bytes .../5b7d93b7dd530bcd39decf4753cab3ea5b59d165 | Bin 0 -> 110 bytes .../5b9f1a45d0d9bdee99fcd95252a8e0b252524727 | Bin 0 -> 290 bytes .../5c10e0e276c8bd89a074239e3aa8af1b1f5009f3 | Bin 0 -> 54 bytes .../5c11d41bf5f10d45dd8eb05d06e222aad00ecb17 | Bin 0 -> 14 bytes .../5c85dbec76c2084f564eeed29b004c4ada23c08e | Bin 0 -> 10 bytes .../5c99811ae507130228a8bf4d5bff5e05ad0bc073 | Bin 0 -> 69 bytes .../5cc77d5f47d1574660b075456ff838d5ab5de9c9 | Bin 0 -> 126 bytes .../5ccb272f474bf220942c8bedc6fcd2972b588995 | Bin 0 -> 231 bytes .../5ced45be70e9fa58a9a47798ee8caac985023dbe | Bin 0 -> 270 bytes .../5d203470dfe8adc35b54b6d496933da470cf5506 | Bin 0 -> 160 bytes .../5d27ecf9834887c13f3b4850795e47139225cca0 | Bin 0 -> 150 bytes .../5d6164e6a4f6dd9d80c3d53d7f8fb2592d2d6e4e | Bin 0 -> 126 bytes .../5ddc8aec941faa1593bd4e71f36c1223f3bda123 | Bin 0 -> 32 bytes .../5df9848cf7e1bd98ed8751f09fe4c5b4c183c81a | Bin 0 -> 117 bytes .../5e03c0d598a4d191cccf0490b3aadcbb708e2c43 | Bin 0 -> 125 bytes .../5e24a81ec78649781ab09d9acfd4c3d712991cdf | Bin 0 -> 148 bytes .../5e40d17c889fffe0f97cd1bb9572430f55b0e0e0 | Bin 0 -> 158 bytes .../5f3c049f5dd220a05439fd2fd52ae4ad39d95e1d | Bin 0 -> 102 bytes .../5f8cf5adb02c00fd4d59304d78b40af060145497 | Bin 0 -> 277 bytes .../5f9471181179b1e8063e2e3420377461155e6b4e | Bin 0 -> 56 bytes .../5fb5c697b9b2d9f65ba72369b812639afd46c905 | Bin 0 -> 139 bytes .../5fc0486f53be98a89e3063dcf0515511c620a9d6 | 2 + .../5fe8ebd795409f495a1456fed72e976852fa8b67 | Bin 0 -> 37 bytes .../60299491a306009121981c68269134e2e37c79aa | Bin 0 -> 40 bytes .../6042ba735fee47ca30f872a1239d8cddab4b9a8f | Bin 0 -> 8 bytes .../607601efcb1e45367e3d9d7d9e2eaeea42fb7ba2 | Bin 0 -> 133 bytes .../609137ead36afb94f84375331667b17181f07356 | Bin 0 -> 154 bytes .../609d76318cbaf5ec74305ab7965cfcd97e46e5e4 | Bin 0 -> 256 bytes .../60c454ec5b1f3f8b7998aabe9d331fd92c898e31 | Bin 0 -> 200 bytes .../6113bd9b19807b61df3147a67b755774fedb12c3 | Bin 0 -> 57 bytes .../611f1a128c646c2c2e213b84fadbeac33fa45147 | Bin 0 -> 148 bytes .../61465eb9a1efffdf51622fe235b2f33b3a252a70 | Bin 0 -> 32 bytes .../61a97b8be7622a1a04e3ad77c74ff68982ea9b43 | 1 + .../61cc67ff6eeacb581c76eac0a566e97dd892e058 | Bin 0 -> 33 bytes .../6202c6ca108fe3940f1ee396ac3b0afab758a8ff | Bin 0 -> 37 bytes .../620c5306fd4e2de3d5c06838f2fdcb649c3efdf8 | Bin 0 -> 64 bytes .../620eb6e856afe12b59a2910701aef6fc14f84479 | Bin 0 -> 62 bytes .../6279710192b550ca788b6415e4eafbaa31f6d467 | Bin 0 -> 52 bytes .../62e550a44741308fbd2544c88f5aa5e4875b874a | Bin 0 -> 131 bytes .../62e5825953e3c282b2952141999829d67cc6518d | Bin 0 -> 126 bytes .../62f904aa08d5431164bf42f3f75db5228a5c44f2 | 1 + .../62fee53c70e9a0280288def3dc357c4540a5afe5 | Bin 0 -> 72 bytes .../6365877928bd49550c917d2be5e0e3edcfb980b0 | Bin 0 -> 83 bytes .../637c9460ee2fc36e9ce57f845de51a9382c01211 | Bin 0 -> 94 bytes .../6470f65df720ce1e9d84bac859dc05388be39d8d | Bin 0 -> 165 bytes .../6480a37c7b175ca2ab6e83e6f953247a7b6cab2a | Bin 0 -> 12 bytes .../6503adb4bf834fb91b9e1987a781495875328b77 | Bin 0 -> 118 bytes .../654f173118a517805c263789d179783736369281 | Bin 0 -> 732 bytes .../65b323ea7b6e641dec9283abb39ba9f439e386e8 | Bin 0 -> 32 bytes .../66f9b45847dfb55ba58673b804f9afab414ff2a9 | 1 + .../675e95ed8512b380227237ae346d38fda427482b | Bin 0 -> 64 bytes .../6771c66378b9fcba09403bcf0f0213117a7b2f79 | Bin 0 -> 171 bytes .../67ada30479ca71143889a77534232a92c4111662 | Bin 0 -> 281 bytes .../67bff2cd16419790e172e009b2a955c77ade769e | Bin 0 -> 260 bytes .../67df5e2798149bb2eea7ac45b4d183dd5c730564 | Bin 0 -> 80 bytes .../685708aa20cf881abffe725dba3aeb8071247396 | Bin 0 -> 148 bytes .../68fe5831286b1d1e97e5dda0bf213358b9f432c4 | Bin 0 -> 273 bytes .../6969f46215a209adf12c9d933dd7990a1b849b4d | 1 + .../69d7e55962ad5c3ca98c3b5d000c0cdd9f5aa2c9 | 1 + .../6a4d453964cb865ad893980feed44c4cf2e01809 | Bin 0 -> 113 bytes .../6a5f1a0e5251f8e808f2fbbd1057dd612eaca048 | Bin 0 -> 127 bytes .../6a744e5fddc8c38646729b383d5dd2cb8ae7cebf | Bin 0 -> 126 bytes .../6a95f63a2ab84d0518335a584a99da71b30e80b0 | Bin 0 -> 71 bytes .../6a970a73f1a47e6721107a855c1ec087fd1ab471 | Bin 0 -> 12 bytes .../6ac041b8d635613bd578e20c825106ad832ab769 | Bin 0 -> 78 bytes .../6ac10d7ca9cb55aa8bebe8816b4e25703001b941 | Bin 0 -> 120 bytes .../6ae47a64df825a9260bf3e49fc42817138827ced | Bin 0 -> 266 bytes .../6b0e3794233dbb6802f3315f9de3fcb223e7a341 | Bin 0 -> 202 bytes .../6b26d5fd1d379ce2f4d209d37833a359af8742c8 | 1 + .../6b55fa0f29e62f8a3bc350e95f07bbcfba8841cb | Bin 0 -> 29 bytes .../6be0e3e11b0a4e3d7ccf0a7b9a809d7664aefd01 | 1 + .../6c1c1facae1eebe45ceb2da6a2db37fbba60ce5c | 2 + .../6cb42ef8ca1d291f6c3019eaec6787d76521239b | Bin 0 -> 191 bytes .../6cc0f4ea193ae9e79ab3d5b09f6711396b4ccaf9 | Bin 0 -> 291 bytes .../6cc828e5547cc1e802db7873c742ecadcf67f096 | Bin 0 -> 63 bytes .../6d2e82e5338220c1146ef5272a46e3776d0cdc35 | Bin 0 -> 26 bytes .../6d784d6f643c46a9171a89cbb92660d3f07cc730 | Bin 0 -> 29 bytes .../6d7bb5e6b3faddecf4e5ee7f29d62b3cdc19b0aa | 1 + .../6d80a2304ddb46a4125974965e823908671f9519 | Bin 0 -> 31 bytes .../6d8281844c9b2c5856646f67555125b43080733b | Bin 0 -> 14 bytes .../6de0d4b21c1c02377fa39d5406e1fd0b817be116 | Bin 0 -> 1866 bytes .../6e1f49e6b62a03946dbe0952dd3bb8ca5b29fbd8 | Bin 0 -> 58 bytes .../6e8aeafbca00a864e8090bfb94cbd538ec3c9e5f | Bin 0 -> 64 bytes .../6eb325f0bacb345f2c1744b40039b81fd4688715 | Bin 0 -> 32 bytes .../6edcc1cd67d84c1414a2ebe066ba222c14ec968e | Bin 0 -> 255 bytes .../6f63081895b20cf0efe76f4cd5197c02b049c6fc | Bin 0 -> 57 bytes .../70350969c13b733264d274d43f439e207c07d201 | Bin 0 -> 149 bytes .../70c3b89ec0759e582e3b1a3b9fdb889c8fd087b9 | Bin 0 -> 64 bytes .../70c904c86c1f179b461c860437901ecb3f4ca236 | Bin 0 -> 277 bytes .../70df9026991e330667cca19dc9e830eb98c84d5f | 2 + .../70e9796845eb455ad731716a387f62eac023a6c2 | Bin 0 -> 135 bytes .../7116b5c8a72a6dcaba2fbec69e5314f611e3bfda | Bin 0 -> 132 bytes .../712367b03ab9b5b2a4e940c6ee58a9970690aaa8 | Bin 0 -> 159 bytes .../718a9c062dffa15aefc6a7104cf6ed9b52f5f4e4 | 2 + .../71c64721abadfbcccd4b95a43748c3ca7dbe9626 | Bin 0 -> 120 bytes .../71f86068e3b76d9489044f9c21b31710bac7e4e4 | Bin 0 -> 36 bytes .../72283bdeea9e68d29a23e0ac1f13622a03aa5adb | Bin 0 -> 35 bytes .../72a0d8870999f16c4c42bd01b66c296c6ff3adcb | 1 + .../72b076b94e699e5316417aac856cfe3ac7418fbd | Bin 0 -> 29 bytes .../72d1c7e3f642456b57b0d49cd78397a08d0428f1 | Bin 0 -> 125 bytes .../731384a69468c94458e4306b7c7fe1a447f72c8d | Bin 0 -> 261 bytes .../7343b5ea3134d50b0710dfce15f8064b892a3ba6 | Bin 0 -> 49 bytes .../735bba7565e94dc82b6a949ac71be2c73c787b93 | Bin 0 -> 647 bytes .../735d9b1fa219b190157f78c7e8849316f2e0254e | Bin 0 -> 48 bytes .../739417dd4666b8ac82a7e2ba13ef20de74029c8b | Bin 0 -> 148 bytes .../73972b7d320f97c02b2e20a8109151a0462e8875 | Bin 0 -> 149 bytes .../73a1b7ba8a7ad42881226a587a3db5dbb30a4042 | Bin 0 -> 631 bytes .../741ac128afab3dff880c1682dbe2da477f854e41 | Bin 0 -> 61 bytes .../74591e0f0ca130871adb79d1e0f40863c2e8b65c | Bin 0 -> 148 bytes .../7478083887e17c1e4851e5d369785657aafb0853 | 1 + .../74870d66c54721f2b5c704241097597918709d3d | Bin 0 -> 10 bytes .../7491924b3f71413f75124e5d149d028e8db13fb8 | Bin 0 -> 37 bytes .../7604ea59fa493ac6ee2bd0442dafddd4e09087bd | Bin 0 -> 95 bytes .../765baf81c7121731ba220215c3ef3fea4d2a7cbf | 1 + .../7699281b13023f5cccf48d4a9bb9e263c68b94c2 | Bin 0 -> 15 bytes .../76c679fef751503759197cca283165c50f0cfbe4 | Bin 0 -> 128 bytes .../77009924388491dad67ff81b2ecf86c1ad21b6f4 | Bin 0 -> 181 bytes .../7742401ef3d795f116a1b35e27484b4f7ae41c1b | Bin 0 -> 51 bytes .../774ac6983f66fcebace58e305eae3de033113982 | Bin 0 -> 64 bytes .../7762a474cf87d5c037c10c6b645e9ac3d3cfa394 | Bin 0 -> 15 bytes .../77c6b91e90d5db99cec831b252bce938b6079799 | Bin 0 -> 95 bytes .../783773a5bcb1e6a4dfdbb131010ac010b4a233b9 | Bin 0 -> 56 bytes .../7961d28681e014b4ea1ce45cdcb2c3740d7c516d | Bin 0 -> 249 bytes .../79921dcf20d14c789d969fd999e4075398063467 | Bin 0 -> 32 bytes .../79c5443529579b7011fe643ced6492c3f719982b | Bin 0 -> 190 bytes .../79dab809e3d75871e8c31601141978662116d43c | Bin 0 -> 136 bytes .../79dcceba401ad6e22b8712749d40d2e427207122 | Bin 0 -> 190 bytes .../79dea6ae4e59be9bba5918e6204b4d8b62259bbb | 2 + .../79df0681f74ab45adc353e7e41bcd961d818486d | Bin 0 -> 32 bytes .../79f1330dadbe4e139b309799c6c900749e2282bc | Bin 0 -> 159 bytes .../7a0b6da388fd48b2c3e3be7a796f85599605d0f0 | Bin 0 -> 62 bytes .../7a104f787a0115a8e6d40b31e83bbc89b8fb82ba | Bin 0 -> 133 bytes .../7a5dde1a1dc70f5f4a6733eae91f261d3e32b434 | Bin 0 -> 175 bytes .../7a7ab9564b9bb4c5302719caa5a5839be8120c45 | Bin 0 -> 45 bytes .../7a8cba7c2faabbaf4b946d8a4e28a124ef6cac25 | Bin 0 -> 93 bytes .../7ac7ab8a969eab4867a02827a322075c1d859738 | Bin 0 -> 126 bytes .../7af973f04745d25ce958625270ced1128314f174 | Bin 0 -> 116 bytes .../7b3ef329dad0a1e01efa45766af30f7bcd62129a | Bin 0 -> 130 bytes .../7b42f25f8ea7a2d3288d0022cfc85b0b68842e04 | Bin 0 -> 120 bytes .../7b885591d9ce6663397e025b400df2504b7551d5 | Bin 0 -> 49 bytes .../7b9dafafeaacd9bc9340455d6f00a81a2257ce5a | Bin 0 -> 8 bytes .../7bbb553afce8ee4a7a21e6f19c7185b118d93c01 | Bin 0 -> 139 bytes .../7bfb263454cd63e33b0a38868d78381f0c19828e | Bin 0 -> 10 bytes .../7c1f312bf4e264dbc5d7f22130f557c739342990 | Bin 0 -> 570 bytes .../7c236cbfafa4a0c119f7754e1a68ccbe1ab92976 | Bin 0 -> 52 bytes .../7c3bc7e2004be68a3a0f77dae62bf51df45e7d60 | 1 + .../7ca7ac12d21207f09eb44c2683b4721d64df572f | 1 + .../7d5f86cff2d0e95822cc7006f46880f4ea23eee0 | Bin 0 -> 72 bytes .../7dab9380a0376267922943d127ae9c2be47be886 | Bin 0 -> 74 bytes .../7dac784c8c238582e840ddd4478d74f9680b5219 | Bin 0 -> 126 bytes .../7dec4eee24cea1abe82b4cb59f7136d444077b5d | Bin 0 -> 301 bytes .../7df26fca829f64d145537f048e41939e7363161b | 1 + .../7e3dbf30f5786e38bfa8f0524455c5d3e43657f7 | 1 + .../7e83da9721539f7e370fb234f9cb633b120ebee6 | Bin 0 -> 71 bytes .../7e85f1ae3df8abdeb1d5f8f635317c0774f13531 | Bin 0 -> 45 bytes .../7e9fe12eb57a9ee47a91a1468a5236264b3c6280 | Bin 0 -> 512 bytes .../7eb975cced17b2749462664047b94ac6dd15c270 | 1 + .../7ed124b14d263f000c49d9efe651f9774f4fb5e4 | Bin 0 -> 128 bytes .../7ede26fd50e6568249894b96b81968d0d6459b4b | 1 + .../7edeafeb5ca3aba7a6f3f97713e3ea9317127142 | Bin 0 -> 64 bytes .../7ee32e83ca1b49679d8bce2a30f6b67d66a92790 | Bin 0 -> 125 bytes .../7efaf46174a91191fee2b972fc89b2b4cc4ec4b7 | Bin 0 -> 139 bytes .../7f4de31456e400c809d8c934503643d6b3f8655f | Bin 0 -> 40 bytes .../7f902e43471df029d523127a4fd62e614ffae551 | Bin 0 -> 128 bytes .../7fa9e1d7eb3e6e23ef4a9519718b00904b32b73c | Bin 0 -> 13 bytes .../8007314307e6723b7ee7953518625ab559ad3506 | Bin 0 -> 8 bytes .../80184a2f30ef2ea7a64a1e183b70a0c845c04a1c | Bin 0 -> 120 bytes .../806c42fa41c99efa85bf7fa6ad33c988bf5f1e8a | Bin 0 -> 91 bytes .../8082dbfc4d46dcc604705391965c0be282c83ded | Bin 0 -> 122 bytes .../809e6b7861681272c24a1219ab43f4b69d38ae4d | Bin 0 -> 126 bytes .../80d67137e523dacf51d8b9379d0ec48c8e3e5225 | 1 + .../81b8931ade20524ef441ef3d3295fb97d884695a | Bin 0 -> 126 bytes .../81d29d520d82876e9e132d459b6f6fde469b9850 | Bin 0 -> 120 bytes .../822ce58b4735642d26b0a30b9b43630ca734ad7c | Bin 0 -> 275 bytes .../8257a6de581b17b7b5c88d4e0908de3e1fe18a78 | Bin 0 -> 128 bytes .../8270b4ada6f1aff44c18bd88cb3f012888789f80 | Bin 0 -> 159 bytes .../829a87b301fb1d563103d372bbc4e63208f414b2 | Bin 0 -> 159 bytes .../82a199bafe3a5bd7a57d0c2e51d19663b40ced25 | Bin 0 -> 128 bytes .../82d1f6c34c05f99890fd114b78e5e4fc094fbafc | Bin 0 -> 312 bytes .../83188d985d73ec960ffe380b927988defb1a39ea | Bin 0 -> 652 bytes .../832af06f483d21853a366a6e10c729ddf7416ee8 | Bin 0 -> 12 bytes .../83477ae142e5ad220170d50e0f6cadd5634f411d | Bin 0 -> 128 bytes .../83a7d5c85938727ae2680482e9d4ffa6d212ad9d | Bin 0 -> 128 bytes .../83b2ad005f2e950a04183d643799673bf58d85d3 | Bin 0 -> 70 bytes .../83bc4547e87f5e6e1157e2d3549365307b20d856 | 1 + .../83cd0887cbef920c5ab083f5fd55f92910cf34ed | 1 + .../83d1c8ff2293fdbf346922f57f2a14b4a3c16af8 | 1 + .../83d4cd15dd28d1cd4371bba52e53d93b107fb732 | Bin 0 -> 596 bytes .../843931b18f1938ea5dc0dec98b07fe0e9b5028db | 1 + .../849fba0663e5a6353e5cc01af7b88ba786dcc9ad | 1 + .../84e1aa52d7a736041adb5aa92d37d89fae0be927 | Bin 0 -> 150 bytes .../84e9566974b175f2f959b865d0af11d8b3aaa536 | Bin 0 -> 126 bytes .../853c85af13729fab19afcc82625196efbf864cfe | Bin 0 -> 64 bytes .../85852da131e3e7f8c765a5a1d172499412558793 | Bin 0 -> 140 bytes .../85930deca05f1ee6926d72d0ee4a2bb642c62c67 | Bin 0 -> 150 bytes .../85a540ef04d79858d557edfeff247a69b068ef23 | Bin 0 -> 36 bytes .../863dfd12a78cbc948d1cc1d73050c297e234dd35 | Bin 0 -> 40 bytes .../86b6abfdbe036b0287f8a4729ab3fb3dd3191c8c | Bin 0 -> 58 bytes .../86c1c36fcad07123771f7e04aea8224bdc690014 | Bin 0 -> 37 bytes .../86fa73ddf7ea920e9890f42e89785102209f4314 | Bin 0 -> 122 bytes .../873ba4a8a8fdd4275455d6c1d305ea673145c374 | Bin 0 -> 139 bytes .../8768744173f2ef90d172cbbbecd017477c31be01 | Bin 0 -> 47 bytes .../87d1ad944ac5408daf88ca8a06f5aac1309084c6 | Bin 0 -> 39 bytes .../87e88889b7cba096cd0eb1a9181671075d3076f4 | 1 + .../8814ea4e2a20fc587d33b0939a913f611df5f99c | 1 + .../8840d62fa6701efb3e040208a60b50b1b8e2cac2 | Bin 0 -> 134 bytes .../8853471ea2a038d2513614886173c201a06075c5 | 2 + .../88b915afd750aa901aa6d0f5f982619206306f9f | 1 + .../893b88930ec19be22c561da9979eae4420fc28ef | Bin 0 -> 12 bytes .../895cd00606c91b3adf94c16fe7f8bc9609ee8d21 | 1 + .../89af206567ace6c97db2055d8076ffd3b15085c4 | Bin 0 -> 140 bytes .../8aae679ba6232efe2d1e3d0848d09101a09106d7 | Bin 0 -> 62 bytes .../8aedcfdf5aae05a9a8e003efd2d2ff23de86fb9d | Bin 0 -> 272 bytes .../8b29c9c85b8c7cc8e5316a8c24560941fd8be71b | Bin 0 -> 153 bytes .../8b4fc51f902257883b2b7df0cbee2fc73b887567 | Bin 0 -> 24 bytes .../8b99ac339bc1f0d913a7d6800f205d174a51460f | 2 + .../8be9de8ac1e6c9dcf4fd9ea0269200d98ea6fe30 | Bin 0 -> 53 bytes .../8c06be1c0c120507af1b264d72f184510a0079af | Bin 0 -> 127 bytes .../8c2f38d827889a408fddd7ba6c3732fa8e3035b1 | 1 + .../8ce348fd4edda47f19c5c7ecfccccf2c5b99ffb2 | Bin 0 -> 1154 bytes .../8d195b90e680901ada91761a5469b1be72554d76 | Bin 0 -> 157 bytes .../8d212aaf7ceb34d7917dbc50638ab8bf9d5c1880 | Bin 0 -> 144 bytes .../8d2ed0e5bc0613ce4bd945200af90dcd1c38a3f4 | Bin 0 -> 35 bytes .../8d313217b68609292a0e737a631d8d9e684a277f | Bin 0 -> 138 bytes .../8d3a0167ff8dcdeed93614e5ba48d92a8872ec60 | Bin 0 -> 61 bytes .../8d66da70823090c8f7663f116a4f949fde20eebf | 1 + .../8d773f8c39f375c7e7ff9c362f13536ae96ea5de | 1 + .../8dde0490957a6d583f8aa9e9d0a60156b7080923 | Bin 0 -> 376 bytes .../8e21eba895d8638f98e358a2b7008cc14efedcd4 | Bin 0 -> 43 bytes .../8e26db259964581c624970318265c8a0acfd50c1 | Bin 0 -> 55 bytes .../8eb0c38864327b88abf519473814cf553e3d9283 | Bin 0 -> 209 bytes .../8eb81120f9fd00737a41b97f39606eabbc96ff01 | Bin 0 -> 135 bytes .../8eddaf49dc253fe34cd8e2d5d08ae808759430fa | Bin 0 -> 59 bytes .../8eee7ef03bfd809a262da32104df490626766fe2 | Bin 0 -> 127 bytes .../8efb43876a5726ff939ab42bfe22df27f7b3f6ed | Bin 0 -> 79 bytes .../8fb9a2610a3c8c667c7da72fe00454e3e9cb787c | Bin 0 -> 206 bytes .../8fda1700d59460907a56d99ab1751b629cd77379 | Bin 0 -> 64 bytes .../902023fea6e57b1af304b39888d80bb41b94b60b | Bin 0 -> 1200 bytes .../9052b6e33a0ccff7be2b40a8eb4f07a5a2dd5ce4 | Bin 0 -> 126 bytes .../908481f051db1ee6b6cce8550da7b614aa89b918 | Bin 0 -> 32 bytes .../908c885d387b7a2db3cb339a79f13d83e80d3b32 | Bin 0 -> 11 bytes .../909b89c5d375fe2176052491bd1ab5ca1674fe02 | Bin 0 -> 62 bytes .../90a6488cf900b0865f166e4930b89c26812854b3 | Bin 0 -> 134 bytes .../90acc10136ea34c75b0a82438b2ba8b7b333885a | Bin 0 -> 127 bytes .../90b0cb75ec8d2171a2df93f91095d18243d12f4b | Bin 0 -> 71 bytes .../90c05b0d85c3521a89727b4676f4815ebeb41ffb | 1 + .../911ee38b6169c1bec250eae70db36b6a75c9c162 | 1 + .../91525983687c26a4d3a82a63c57094e68b1f56d0 | 1 + .../916139215b525bbcf9d32ac9a48c10fd3b12c10a | Bin 0 -> 64 bytes .../919c6e19de9903ad4bb2d531d23d3125e1f45de1 | Bin 0 -> 600 bytes .../91c3132b10fedc0b84d3e217269387a20cd42c25 | Bin 0 -> 15 bytes .../91ed094bf03be9cec438bebf99eef54c3d6abbc2 | 1 + .../9201d402ec28edd10b7ea7f1971cdb4a790b2a86 | 1 + .../920861efbffda6de686ed60111e17f7eef31b072 | 1 + .../926b20e430452d02eccad23a3a176d6ae088603c | Bin 0 -> 156 bytes .../92985491440282a70ab6dba17b1bcde877a61d53 | 1 + .../92ae779adedb85e3e2a2a533d02196dab595d199 | 2 + .../932d2a8db66d5270fc8b46fa91923b9a837c2cf5 | Bin 0 -> 58 bytes .../934fb49b8efd3ae337d826e33893773073b37c21 | Bin 0 -> 260 bytes .../940216910f81dcb31826c09666c439b46b719189 | Bin 0 -> 248 bytes .../9408960497377a35fc33c0a5cd2cd15f88aec504 | Bin 0 -> 272 bytes .../94552a6cf5b552ed6434646aae29bfb254816a59 | Bin 0 -> 133 bytes .../9459156e4e27a7bd59a2522d00307daa1d41df0e | Bin 0 -> 44 bytes .../946faf3eccc25ea0d45c0c037ef7a5aa977f0935 | Bin 0 -> 10 bytes .../9498cad323a6f8cde8d819db742d5ccac2d180f1 | Bin 0 -> 126 bytes .../94b5b6c8d01fc70e46e7695dc01f0fec27ffa9e9 | Bin 0 -> 47 bytes .../94df162ed6ab63db9dae1ef7bd4f9f0d3834e9ed | Bin 0 -> 64 bytes .../94e63e2f7e045cbed008659d7fd6615689eeb987 | Bin 0 -> 600 bytes .../94ea0a82f549b329d40542f00f5b9eeeb1e6426b | Bin 0 -> 30 bytes .../94f214a9fe4c54d034243f1f8ae8a4e9c951cdeb | 1 + .../95167908884dcb36fd5c34a27a0a624dca647a29 | Bin 0 -> 648 bytes .../954dae57d62fe22cc8b568f9b4cd7a56b5d2f2db | Bin 0 -> 14 bytes .../95548c20388bd24929ca21191c957d7c82dcc83e | Bin 0 -> 62 bytes .../95b0092a9859b00678f3baf43707ddbee0d0f8b1 | Bin 0 -> 54 bytes .../95d6ae05575eafc7593ab6280fa5b9aef033928a | 1 + .../95e9f55396538513054db1c9900df3b4fd2e1f83 | Bin 0 -> 800 bytes .../962c30626d2b3812a70542da06d5a7f331b3f7a3 | Bin 0 -> 32 bytes .../9637a6c518d93aeb720b1065d2c83cc7120563ce | Bin 0 -> 224 bytes .../964db13a8d4aadb14f05ff3fcdaf1d5776ba2c9d | Bin 0 -> 134 bytes .../96ebafed845d7872dcf379376ab8f6985ac2375f | Bin 0 -> 30 bytes .../96f0423fdfdb9be6ccb8f4dfeb892e6411231292 | 1 + .../9746b00baedf5052e44bca5befc09dcd9e85128b | Bin 0 -> 279 bytes .../9754200efc1b336be91dd7dedeb53b9e995215dd | Bin 0 -> 99 bytes .../979f253aac48fd41a62aef399f08762de6ca8f32 | Bin 0 -> 105 bytes .../97fa67b44c281b8162073b911607e78c77d69c88 | Bin 0 -> 63 bytes .../980750d9abf4fe584e796173ce071cb13e9a7366 | Bin 0 -> 6 bytes .../98745e644d09a0432b28def1097c5dbb70272a12 | Bin 0 -> 45 bytes .../98dda4b7945f5db00303116ef9afc7628d31ad3e | Bin 0 -> 217 bytes .../99504fc59a4761e200ca788f94ee0942d6ebe256 | Bin 0 -> 248 bytes .../99530606d38f6fe82e55fb7f9ba21cebd0ec8698 | Bin 0 -> 171 bytes .../998ce16fb69af958eb1eed7333334963e18b5d77 | Bin 0 -> 105 bytes .../99c2b5b4e5f79275a8db9c47018dd449ca9e10fd | Bin 0 -> 62 bytes .../9a57d9886b8af128893217c775c975c795dd917a | Bin 0 -> 154 bytes .../9a86ab5aac7ad3ec9ac240c5e4953d3a90d73029 | Bin 0 -> 160 bytes .../9ac78e4381752e7d5380f4604c39926a70b21ea9 | Bin 0 -> 7 bytes .../9b5336c1fde197695591aa3cbc3d556c64da360b | Bin 0 -> 30 bytes .../9c24c04ec88151e850acc05c50fd1d8d32dcf40e | Bin 0 -> 139 bytes .../9c56e4cc96712d8ead9aa1215e73281eb87bb3c8 | Bin 0 -> 651 bytes .../9c6a1bea49f3471825b414f1346ae6a7c89975c2 | Bin 0 -> 62 bytes .../9cae30dd277f7081566f85abb7e68f6c5246f560 | Bin 0 -> 113 bytes .../9cb513881c4fcd725c8ceb71901d4990d5fc1e26 | Bin 0 -> 126 bytes .../9e1c0583543d8f5d2b320657c4ed06abedb2aa85 | 1 + .../9e963aacd70eaa76bef42aeee2345f9417406dd9 | Bin 0 -> 141 bytes .../9ed1cf674fdc651214ff50b8b48d4bdb7485f6ac | 1 + .../9f29f7eeaa960e87cc27f5fd7e0f62c8c7cf07fd | Bin 0 -> 99 bytes .../9f3b0f6cc16f4750185dce3d509dd9f6f8065ea8 | Bin 0 -> 255 bytes .../9f4b185be4eb50b19546c1b3f41f868ac9b0a9d5 | Bin 0 -> 14 bytes .../9f4c49546b3e1ab6da09442ac4a1a3e374463dee | Bin 0 -> 32 bytes .../9f54d951ee79f4bef9ab95c4db3480b9aeab72bb | Bin 0 -> 126 bytes .../9f57b82f85ba3d7c9665de58247e0def9b7d806b | 1 + .../9f79313ec65656cc1e811f1c0739e0cfb0bb18b7 | Bin 0 -> 134 bytes .../9fa2ce42d1cadfc0783abf9f64cbb000a2f3e5f1 | Bin 0 -> 109 bytes .../9fa4c96279b761470466b73db844da2713ad718f | Bin 0 -> 142 bytes .../a045b856ae23022f6018b59a10a3a1f37a2728fd | Bin 0 -> 112 bytes .../a04d338c103ff7a338c9dd65a6bc95596e0a7aaa | Bin 0 -> 1155 bytes .../a0513349285f60df2ca366d242fb43114c07a7e9 | Bin 0 -> 72 bytes .../a0861dfb249518ce15e41b913f4bdd0a9578f37f | Bin 0 -> 100 bytes .../a0e552c5909d975a5bc7cf5d9f413685cbb1ebef | Bin 0 -> 118 bytes .../a10d104de831b8212a7a98c610abf9a278d7e202 | Bin 0 -> 61 bytes .../a1e3a282f2c735fae3a0525fa43ba49245421787 | Bin 0 -> 28 bytes .../a1e66e88878941b838b0da12c7913b8f0965bd43 | 1 + .../a2032bbecc5c31be728b443cedc413f660d411d4 | Bin 0 -> 10 bytes .../a2078553be0e0b0c1ef1009676d48886a7adf7df | Bin 0 -> 133 bytes .../a22686b39e66ed08ca665e5dc81b3d12099c22b4 | Bin 0 -> 18 bytes .../a258e6c45be522b652db80c00a56f2495eef4fde | Bin 0 -> 14 bytes .../a27076a91b42bf16b8a7775b1fc8b8db3c887e41 | Bin 0 -> 211 bytes .../a280d2c812778f6cc8929f59b6cab6a0e4816313 | Bin 0 -> 8 bytes .../a3370bcd4d9fa898339f5ef917794ea74a72ed51 | Bin 0 -> 272 bytes .../a37a61a36ab5ffe56b00a6ca53f6a1a215149760 | Bin 0 -> 205 bytes .../a39a5596dc2a6e19bd886b868324fd6bd7f7f923 | Bin 0 -> 139 bytes .../a3b09cbf4bd466d39041cebaceb641a44446b8f8 | Bin 0 -> 11 bytes .../a3ba940ad968ef20bbe9d4ca93f5c70af06a83f7 | Bin 0 -> 512 bytes .../a3bb71f82820719d2028dd49fee9b5fdd864f42f | Bin 0 -> 126 bytes .../a3e36680111036b8cb9c97005583ebdceb90a158 | Bin 0 -> 100 bytes .../a4736d24cda24819e998d55ec6730180893a7324 | Bin 0 -> 7 bytes .../a47f3ec49eee47ddde4ce0e6fb3e71972f804cb7 | Bin 0 -> 52 bytes .../a4e2f17404db168144ef5e17d4cbfee9b12e2879 | Bin 0 -> 152 bytes .../a4f4f83d6ea91f34617504824a2fc783744491cc | Bin 0 -> 174 bytes .../a5c7c760406ad803dd04a47dc458f911d6a5713a | Bin 0 -> 407 bytes .../a620a20ff8ed33aa9ec3f02d33811b9bcec085b4 | 156 + .../a62993d62ad44a7850e201dbf8d9363dd20acf76 | Bin 0 -> 90 bytes .../a63ed127762ab71bf59da8f0baecb9960f2a1c6e | 1 + .../a67e8d9a79fe7b91fa7646f41b2a01487ecc191d | Bin 0 -> 642 bytes .../a6be63522b1cd53ae7a1fa1908fcb07523555761 | 7 + .../a6d188843d75324b6e726213d7378932923d12f2 | 1 + .../a6d22d1c4cd86d0e4ffc72f7d61addf7b32c9359 | 2 + .../a6f3d0391b71d5ab0a319c0aa3a2c7f15bdac2f1 | Bin 0 -> 1000 bytes .../a6ff81548968999c2630e13b8fd6944fc0cf4def | Bin 0 -> 314 bytes .../a77c756752d1c55df286c376f7ca6e9fde86c158 | Bin 0 -> 120 bytes .../a8889f7fb7f241b50530a50d029e7fc595427198 | Bin 0 -> 71 bytes .../a8ce318c0b17beb3d4b27e667a912c2be85374c3 | Bin 0 -> 8 bytes .../a8f672487e1678a377ebe4010fda912dbdf81134 | Bin 0 -> 575 bytes .../a90afdf8ffcc946a9b8ac6a9880f9cf06d190538 | 1 + .../a96b53486c03c44338caec4c7fe7f64b36880d27 | Bin 0 -> 80 bytes .../a9968c7c9658ec720b7f91a6321d0ab1fcd57ac5 | Bin 0 -> 40 bytes .../a9bed4bb439e5d2344518d5606a9692b7cccc20d | Bin 0 -> 647 bytes .../aa232f04307a644849d083f67139748b2e1c2078 | Bin 0 -> 126 bytes .../aa9bff38dc30809ab3e5a3ca6aa49c68040f37ff | Bin 0 -> 40 bytes .../aaae5ba21a378f6635701fd698b24fbd2d74b372 | Bin 0 -> 197 bytes .../aaed52bafe1f3295ff77fdb285894de6f3087630 | 1 + .../aaef94681408c00e95dcf77642697f7512ee4a26 | Bin 0 -> 26 bytes .../ab0ec4af7b7ef8e899315185a1ecca245a8bc7ae | Bin 0 -> 128 bytes .../ab7b5b1e75083387ef835bd4252a85a84b8eec34 | Bin 0 -> 77 bytes .../abbfb76ed295504bb3fb0eee898cae4f7ab8546a | Bin 0 -> 61 bytes .../abc46e2760860a9b27cb0f33a605b2cf59c8f315 | Bin 0 -> 600 bytes .../ac0371f5a1ca82d50551ee022ced2cfdad4c7ce8 | Bin 0 -> 74 bytes .../ac13e17354f5bba6691a66a796038ae543fdce86 | Bin 0 -> 135 bytes .../aca3063b46b9d5dc485b63a3037d885473fdc26c | Bin 0 -> 134 bytes .../acc96f7b3bd448174e35dc696796659b48213dc2 | Bin 0 -> 66 bytes .../acfb4268e6f3339911f482a89f14fecfcbccf8e8 | Bin 0 -> 134 bytes .../acfc2ca2569ad87c19e15b26d899330a6a323494 | Bin 0 -> 23 bytes .../adaa6665ce0a186fd92f3e4331e29122cf7ab5f8 | Bin 0 -> 132 bytes .../ae3fba9aa89d45e1c54bbe9cad1bfeb072e16b88 | Bin 0 -> 142 bytes .../ae520b556668d003beae5588a270069d3d860674 | Bin 0 -> 159 bytes .../ae67c44e2ca66a11cce0610e59e4f49dc5623847 | Bin 0 -> 45 bytes .../ae8e48a37d16fdb04364c639681f966d78b30fd4 | Bin 0 -> 66 bytes .../aeaaa0983ecc1d76881e2d79f54cce9e909c6201 | Bin 0 -> 89 bytes .../af17e859c517771ac0d0c7eacba5ff29bfcebdc9 | Bin 0 -> 129 bytes .../afb4365979079272a0052ab6e5344da764c3796d | Bin 0 -> 93 bytes .../afca1d87339c759a65a87f62e0538469327b8a28 | Bin 0 -> 48 bytes .../b015bd5adb8df8f3cce0b979ce0ca6255cd203a8 | Bin 0 -> 64 bytes .../b01a2d92b580d7e84169f371e236086c204403d6 | Bin 0 -> 126 bytes .../b07b4468374e13c1d45c379e5b15c8ff4f13c083 | Bin 0 -> 69 bytes .../b0cb51a586e2b92cc1efca8aa50e096268feafbd | Bin 0 -> 18 bytes .../b0cc90631979532ecf7a60517bfe40bea9677311 | Bin 0 -> 72 bytes .../b1088b7b8cd045631b062fa2901eb7c798cad32c | Bin 0 -> 126 bytes .../b14357117e5979ce476c3da41ad0664b1a9f752d | Bin 0 -> 647 bytes .../b15821295a3b68835b1e5c6a67f6856049e8ea01 | Bin 0 -> 100 bytes .../b165040b54ee8a58c0c7512e6d74f7d851d6d2e5 | 1 + .../b203ec6ffd4af0172de0c36718c5712c9c7560e2 | Bin 0 -> 126 bytes .../b2311f1e57ec524b6f9bb788dd40c3e73a717bd9 | Bin 0 -> 24 bytes .../b25973397c5f92a6ceec3752cc591fcc937e5ba0 | Bin 0 -> 255 bytes .../b26d282dd3f19cf0e7117acc6c872b383ac5edb4 | Bin 0 -> 40 bytes .../b29e6e95f3f0a0f27b8c8b9c9a1a9da317a99a5d | Bin 0 -> 256 bytes .../b2c9dc498559f41ed7cefce8d6afb801acdad78c | Bin 0 -> 189 bytes .../b38c174dc663a5f8279374578a6aac90da6ff99b | Bin 0 -> 144 bytes .../b3ca8d789e96c027256f820c1aff10528e509059 | Bin 0 -> 134 bytes .../b4217fc786c4fab1657a72c4a91a083faa6d828c | Bin 0 -> 40 bytes .../b44e8e9fc2873177da968a5948848fa2a34951ab | Bin 0 -> 53 bytes .../b4c2743b21af0c1ef9fa11bedef5cefe2fadd846 | Bin 0 -> 5 bytes .../b4f1de4afd80fbbbca2ef216ab49cc5fef493f10 | Bin 0 -> 137 bytes .../b50855b968dd50d4c4821e0b65b2d4c89819ed9c | Bin 0 -> 35 bytes .../b50f2d5535ea6f80a010534b8f54ca6a13a71bd5 | 1 + .../b5489258c78732144f8a8f01aaa342566f1498f8 | Bin 0 -> 128 bytes .../b61027c382dc799042d32ebc2d7b704dc84da22c | 1 + .../b650a2a1be999019ebb348f29bf77415d70f27e8 | Bin 0 -> 68 bytes .../b6695f3a98bc4a93b61bbc65e5c1ac8709fec690 | Bin 0 -> 18 bytes .../b66b38ab43c28589a4e71fc53b0424e17a369aba | Bin 0 -> 41 bytes .../b67c62b920a2c6dfae903736240bc017191edbed | Bin 0 -> 16 bytes .../b6adc1a0356017bcacb2b664c2083f98ef2688d4 | 1 + .../b6fe4a707ce5e6596596306284ae02c6ac26a532 | 2 + .../b75d42fc086ab992bcf74e2fdcb38469b7381e47 | Bin 0 -> 171 bytes .../b771318805bd5b870fb717cd36edc597c22e39b1 | Bin 0 -> 239 bytes .../b7e06d2d3f55beaf6ecaa53cd8458e5d9ab57b0f | Bin 0 -> 70 bytes .../b806e3f9e9f1a03b00e2088e352fbcdaac75b913 | Bin 0 -> 104 bytes .../b82af8fd1b3e0f6a02caa6075c331dc35e842322 | Bin 0 -> 151 bytes .../b82ba7a5d5192bde5941db09f9b1ea1f44282466 | 1 + .../b84bd9aed14a251bc340637bd861d376e29059fd | 1 + .../b8adc24897b36404f53076a6cd2733b766be13c0 | Bin 0 -> 152 bytes .../b94496052988372d51e0ce4ae6064c2a70753d9e | Bin 0 -> 8 bytes .../b9649715c19069a2e1b3e8e1a7478feb402d141a | Bin 0 -> 64 bytes .../b96610f47a05273d282bde219def415556a5336a | Bin 0 -> 114 bytes .../b976864069e7ca1398223c60d734ea1ab53c7f13 | Bin 0 -> 7 bytes .../b9bed031c6e2bb91bb1bf743d2cd484eef351cf6 | Bin 0 -> 19 bytes .../b9de9df342f37a0d1d50b4329470c8920626333d | Bin 0 -> 135 bytes .../b9f0a4a7eb71f7e2dca960e3082893111ae9488b | Bin 0 -> 1156 bytes .../ba3273910f465dd2acd8cef785d2176539133d7e | Bin 0 -> 205 bytes .../ba3865f4b4d920a22c436d921e59a286d3abd6d3 | Bin 0 -> 95 bytes .../ba6cb35e9ce6bad3bb711c54f398b507c3471965 | Bin 0 -> 120 bytes .../ba76c84c59574475451bc81256c3de91f03d6a87 | Bin 0 -> 48 bytes .../ba919b5881e5a74c582a1c6c01d2db5cae03a48d | Bin 0 -> 16 bytes .../bb097d04473008fc91add65bee472f07cc782046 | Bin 0 -> 52 bytes .../bb32a902235b0de98db7d126863ae5c15f4d424a | Bin 0 -> 32 bytes .../bb33acdd01b0fa9a07208528ee157ace4feec1bd | Bin 0 -> 600 bytes .../bb5d03c6c662f20e8e9a6bfadbc09b202bbe0c45 | Bin 0 -> 111 bytes .../bb74dd55a5524d7ba35a3c3f3d30c29d29acab60 | Bin 0 -> 124 bytes .../bbb43034048f648b15fa045aa6af54db1ad7e6bf | 2 + .../bbdf196f92db4360a5cc17919bae65c5067036b8 | 2 + .../bbe59171082a9a76311a292bcf2966cfcbc04b56 | 3 + .../bc1791e9df6f8ad09b1d073cc461a43dc299af46 | 1 + .../bcfe0096eb81abfaac040dc02b43d003dd451dbf | Bin 0 -> 96 bytes .../bd1d74c27793973da701de6b535acac15a64be8a | Bin 0 -> 228 bytes .../bd61f311331aa9b95de14fcd1e6f0a2e0dafa70f | Bin 0 -> 128 bytes .../bd78d26e0b23876b5ff33528191d20f578edcbed | 1 + .../be26cd734419b4889072c3fa64305be3d459adc3 | Bin 0 -> 97 bytes .../be47df5cda6bb41872ee195f6c99201dc4d2c094 | Bin 0 -> 133 bytes .../beb3a10b24cf84587b3e735d4b1ac4486fd94eb9 | Bin 0 -> 160 bytes .../bef40ad6b818dc4592f716bb4b30fab1387858cb | Bin 0 -> 32 bytes .../bfb6550aaf17f1379660d0a8989031878e225498 | Bin 0 -> 575 bytes .../bfe7e6086b0f9b7f0be8e5e8233ba4bb774e04e8 | 1 + .../bffc7966574e8893763d80ef526f9ec5b4a819ff | Bin 0 -> 127 bytes .../c02a3725bbacc2424c984548570d4ef6f6a6de4a | Bin 0 -> 42 bytes .../c04435fac55ece02ead586bf38d87fba3e66159f | Bin 0 -> 20 bytes .../c0949dbdebe485b19917f0c37d4a19f8000994f9 | Bin 0 -> 93 bytes .../c0c65a6927f5f9300ec7c41d02a48349f944eb89 | Bin 0 -> 79 bytes .../c13441e813c0371804b3249ee79ca256263998a0 | Bin 0 -> 14 bytes .../c16ee237d0dc15a7fb5e2d4371934b576be7ce88 | 1 + .../c176812305674a20436fd14a22e39a20ac414158 | Bin 0 -> 35 bytes .../c17b15e0f74cc5fe557569841331e6554f6a5412 | Bin 0 -> 136 bytes .../c188e11fe5c66709ac7dfe610b0f15aaccb8fa92 | Bin 0 -> 45 bytes .../c1e58e966f00dfdcdb1585f92654eb361d406997 | Bin 0 -> 254 bytes .../c1fa47d38fb16123777c0df7b65f4a3757449804 | Bin 0 -> 126 bytes .../c24ab80df7d5ab52c0a91bc77b48bb07229a2886 | Bin 0 -> 143 bytes .../c273305a97c73e0eddf416abc0dfdf99c9bcf815 | Bin 0 -> 107 bytes .../c2beaf4fb74a9e43c8b5256f92b921fdb780547c | Bin 0 -> 128 bytes .../c307e364c04b858f1920e02afe00cd81a76af1ed | Bin 0 -> 200 bytes .../c30a1479b7d846b2d4b81146186a125be4a1bc29 | Bin 0 -> 47 bytes .../c32cc7c0432566ab59c8f48abd725cd8c07e77ae | 1 + .../c41d8374667d32ff24fd4cdde499908e51667de9 | Bin 0 -> 160 bytes .../c44830130766ba8b54fe286b821eb592ec7b4146 | 1 + .../c4ce0bfb48a5543120795cbf2e5f325849f6af10 | Bin 0 -> 4 bytes .../c4dd3b9289ab1a4873e0d1d9462edf70963a01d8 | 1 + .../c5cf0127802e0963ba05bbaf85060561855b691b | Bin 0 -> 8 bytes .../c65bb211056eb0a089e5f3df091208835887d282 | Bin 0 -> 13 bytes .../c692549bedbca78734f7becba84c7ec2d8ab5bff | Bin 0 -> 38 bytes .../c6c310747200306874de49757bd3fd3b61947627 | Bin 0 -> 38 bytes .../c700a28b425a3f008a2a188161c831959dd18cb1 | 1 + .../c70f96df03f6c124154887fd5da716ba7a86fb63 | 1 + .../c83d10a7550e6956776f4c9b68379c4aeca67df8 | Bin 0 -> 126 bytes .../c8cf26c84fdd20a2a879fed97a0aa0aaae3b08ab | Bin 0 -> 126 bytes .../c8e28322d6912546e409f70676753b7b619173a5 | Bin 0 -> 384 bytes .../c8f587e9f75c59b693e48e5d9ceb7b715e5fd99f | Bin 0 -> 62 bytes .../c919ca664abe52d1de2832b2b4fddfd21773738f | Bin 0 -> 95 bytes .../c9252d4ffa30d1a01e3eb8bcfdb14e29c87f6051 | Bin 0 -> 128 bytes .../c926f200c6795bec07fe9074e020d2e0c81ea5f1 | Bin 0 -> 126 bytes .../c97f8a9c0e72c013ec5759fdfa9e8a7c93e54281 | Bin 0 -> 10 bytes .../c99a8c77e84235aa2a1d146abb3ec5f490c9d882 | Bin 0 -> 575 bytes .../c9f696b983ad40f7c9fd7164ce093048b10f5b37 | Bin 0 -> 134 bytes .../caec3e312cf9d920f67f5d664d3f983638b63817 | Bin 0 -> 256 bytes .../cafe64440a70a77e6f4616e501a28f4a1b8dd47a | Bin 0 -> 73 bytes .../cb3fc3b1372259f50a5bf907a46c34f27deadc8e | Bin 0 -> 159 bytes .../cb77056fedf427f8b60cab2c4a9355391687fb08 | Bin 0 -> 69 bytes .../cba4e08b9436a1280defda53ced034026c4630c5 | Bin 0 -> 160 bytes .../cbaa953ad1ba92a0d10d80f926139d50d3dc4c45 | Bin 0 -> 117 bytes .../cc717a28af9f62f65096aa9908b0464c5fa966e8 | Bin 0 -> 437 bytes .../cc914196da999c5525325649ac9eb8a90b536acb | Bin 0 -> 40 bytes .../ccedf262a96788c6f89816050f9c8e7fa1bf2b67 | Bin 0 -> 167 bytes .../cd5b607b083cbf7315289362169770c06c5e4160 | Bin 0 -> 190 bytes .../cd9575b637a1826db4279d159a085ebbbaed60d4 | Bin 0 -> 167 bytes .../cdec6e5e535f34bd6a598648c713c6a70c8c3ca9 | Bin 0 -> 24 bytes .../ce12ef3eda80d7c82aa6e2fa9cf51b70b957b209 | Bin 0 -> 126 bytes .../ce18a3bb70771f160776dbab147baba7b68cbb19 | Bin 0 -> 173 bytes .../ce7309d8822b70312336073e19f2408b756e0f3a | 1 + .../ce762b0b09c4df1e6860703dd381abcdcb6bb77e | Bin 0 -> 261 bytes .../ce76d4e6a0debdc58223b98baa90674bb949052e | Bin 0 -> 62 bytes .../cea37f32ef6a586af884adfea24064fbb944a65a | Bin 0 -> 140 bytes .../cea8bfadb412ce45be0fa4c7eb41db9b367d9507 | Bin 0 -> 153 bytes .../cf15bc8a1feba9f07f131cbb4870f5cda5faca6c | Bin 0 -> 128 bytes .../cf2880716db8ffd1b3e33e39d67caf4aac8bad75 | 1 + .../cfa6fe68f29f4452a39d6db568615ad051dab7c8 | Bin 0 -> 100 bytes .../cfb3d610b96531ad745eb6ed218298efe3a17f17 | Bin 0 -> 21 bytes .../cff8cac33e9b520a4d13baf201b02fb1999f141c | Bin 0 -> 6 bytes .../d0f59d35916998b12167a94d801ef19f4ed8ebce | Bin 0 -> 40 bytes .../d0f78b088f23aeec7727dfb7c3d05a968cdf4d59 | Bin 0 -> 189 bytes .../d1167494a0d4099ee37bb4918f021fad42b64b45 | Bin 0 -> 253 bytes .../d198dffb9459b7b7a7b38559c3bcfef77d2c4208 | Bin 0 -> 178 bytes .../d1b18d239e8c05e2d04a7aa6a1c83a9c74213ba3 | 2 + .../d1b98f3ec28892fa45c340ec2661013f40b09818 | Bin 0 -> 113 bytes .../d1e8272b090506aef342038475c8e74c93784d22 | Bin 0 -> 1156 bytes .../d24dd2e018bb141e47bedb7428399cf32b5305b5 | Bin 0 -> 673 bytes .../d2fe57453e81ff96d419e1756d9dc703273a91f3 | Bin 0 -> 119 bytes .../d333804de3ce5230c4fa7c66b6eac6a21e15e097 | 1 + .../d33cdca52e9757af11c7beff8a64eb40017bb202 | Bin 0 -> 128 bytes .../d3814cb7747d0ebb4c5664f51de616e7213539ed | Bin 0 -> 101 bytes .../d43bef32a3afb15e19afec3f33b681b8fdc2c97e | Bin 0 -> 98 bytes .../d470800d0c133cb672c1730177174c8bca32404e | Bin 0 -> 253 bytes .../d4ae12feb3c3b6fccd76f29ffaaa5b43b9f595fe | Bin 0 -> 132 bytes .../d4c243eeee9147b3396e02b0ca2db650e7b50e87 | Bin 0 -> 110 bytes .../d4cbc48ff1e8c3fbb01f4e7b33ac5db0e8d2bb2d | 1 + .../d4d4ae101b2f3166a169f4d1b7bbeb95f5c1607a | Bin 0 -> 41 bytes .../d579adeba2273ea710478aa2e721301b55927331 | Bin 0 -> 126 bytes .../d65c29859fc5e1a27f416cd6d2707660fa6ae208 | 1 + .../d6ab475c8fa58bd0fc58cdc0ff75c0e1a8aef8b8 | Bin 0 -> 64 bytes .../d6cb58cdb9cdf88271fbf5a1871ec7a8b06dedb2 | 1 + .../d6e2bd9840bcccca55ce30ce23fb9ee8b09eb28f | 1 + .../d6e6c05428a1d118a63303564a5d2549b662ad68 | Bin 0 -> 157 bytes .../d71a51ced37a33b5a87ee3107b0fa23146065233 | Bin 0 -> 255 bytes .../d752097ba29b9ec46a45f6550559f6f9b4ebaf79 | Bin 0 -> 134 bytes .../d75c4d8cef2cc235526a0c91dd37d3a3b2f03cba | Bin 0 -> 8 bytes .../d76f23fcf91c960b5b57342f417fcd05f884409f | 1 + .../d79cab3b39c7dec492d317abffd9a475d3206eab | Bin 0 -> 133 bytes .../d7cf683d2667d642700c588bc8922c9e8dde6b45 | Bin 0 -> 132 bytes .../d7d3a5600d555da963c67ca71cc000e5d13d7b68 | Bin 0 -> 120 bytes .../d7d6485cfc477aa11f5c1ca22d980838f256266f | Bin 0 -> 7 bytes .../d83b83e0ace4eb634564fb12d426741a49b06ebe | Bin 0 -> 180 bytes .../d85c1043fc9065757d6a1d83c7b6a6f9f98d4f05 | Bin 0 -> 69 bytes .../d87e60d0cb6acc9b10e86be1633c0a25ead80222 | 1 + .../d8804349dc5c03cbc2309285ae74e499639123f2 | 1 + .../d889133ac1b6c08f0c1f8600dc55c429359f9c1f | Bin 0 -> 191 bytes .../d89cd87b910fc6902fd95746642af20e8ef3a967 | Bin 0 -> 1078 bytes .../d8ab33387982a98acea344ab155745efa43730d9 | Bin 0 -> 40 bytes .../d8ba646983d8e2682c2ba829c70ec277ad6ad38a | Bin 0 -> 104 bytes .../d8d658f5043d7240d0e6b5174903394185531e09 | 1 + .../d8df3276cbb1ecb0b12c9804f0cdbf3256fe6c94 | Bin 0 -> 158 bytes .../d9000d62ceac426e9442b7b3c987f1e582bf2935 | Bin 0 -> 10 bytes .../d92b645679306dfa92a17b763035a30b47d331a7 | Bin 0 -> 634 bytes .../d943c1a64a03c30eeb562e3b77f869f6ab56b7ea | 1 + .../d9462bf90136c5317fe262503735ee7afe3b0246 | Bin 0 -> 131 bytes .../d94c1468d16043cc3adb18d5d693ed31050223a5 | Bin 0 -> 62 bytes .../d9716495de635fb4815b1b2d0a5841bde74ac385 | Bin 0 -> 76 bytes .../d9e0739aaa2af6424f502e78db4d005dc4fd93b5 | 1 + .../d9e5190f49400aaeeed65ed2f277a5565cbe602c | Bin 0 -> 127 bytes .../d9f86b5a8250b7c59627cf4ef4e8bdb22714ffa5 | Bin 0 -> 146 bytes .../da29f73da6d174eaea79dede20949e86acee8501 | Bin 0 -> 78 bytes .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../dac42837b3cc6acce0673f678c7e904c3417f39d | 1 + .../db02fde58e58767eab8c6aeb378513b0be640684 | Bin 0 -> 99 bytes .../db3e87bbb884aa062e0e6314a6503099fa05efed | Bin 0 -> 41 bytes .../db77b3de83c539e18ba1079f05c0fb71089ddd83 | 1 + .../dbabba3cd97132e6ba36c6d4b1d0365fb792d5d8 | Bin 0 -> 107 bytes .../dbc211a351c75ccb27a2e80004644890e9181af6 | Bin 0 -> 126 bytes .../dbcc0ebaaf11db19ac3d6887a5d8b793b1d5a8d4 | Bin 0 -> 149 bytes .../dcaee570598f1c12cdf5a9905b4356cfc72c5aa3 | Bin 0 -> 8 bytes .../dcaf511f122bf9329f591ea7694357f0efe317d6 | Bin 0 -> 54 bytes .../dcc848a9e5fa596e4fa2f6e7e346d754ae8d920d | Bin 0 -> 167 bytes .../dcd5aca8457d9c6096efff4454b7843832f3b4c1 | Bin 0 -> 15 bytes .../dcd8e88c311bb382728dd5fde5af6795188f2ea7 | Bin 0 -> 575 bytes .../dd2d37dba442fff639d119f53a4b1f636f13c3b1 | Bin 0 -> 157 bytes .../dd69eff617a1509e5933993d51dddedc532430b7 | Bin 0 -> 141 bytes .../dd6e00bbbeba92f762998f6174e9cfe61ff9a40f | 1 + .../dd957ae8c85a77f33b64f5ae273a7b9a2b93af41 | Bin 0 -> 120 bytes .../dde86fccffc53b370da08247844b244fcfec43c0 | 1 + .../ddec77dab1f1d79d2dcd13205116c41ec3560834 | Bin 0 -> 268 bytes .../de4a4b5f22c3a0d7ccb7ed3870f1ce162366390a | Bin 0 -> 332 bytes .../de5574c3eb4f8ad1b0d27201d6d395ce9b872951 | Bin 0 -> 24 bytes .../de73565b39249c5ddb8964e6c67326d1c3a801f0 | Bin 0 -> 48 bytes .../dfbeaa978770c1cff530219e6a7ae1aa479fa831 | Bin 0 -> 158 bytes .../dff62df164bea85999742e9a48a465cbd7bab8ee | Bin 0 -> 141 bytes .../dff6a70ade2b7406092c0cd00a4c73aa927ed430 | Bin 0 -> 46 bytes .../e03fb13b930fc9816693c35a3ba1dca2d25d6271 | 2 + .../e0413f09a895a218f1564d96172ca84d720ac7b2 | Bin 0 -> 136 bytes .../e06fe9967b6c38b848c7ec4f64d13aff573d4471 | Bin 0 -> 22 bytes .../e0746858f72b2a1b5c2b23362acfe2d7254ebd4c | Bin 0 -> 64 bytes .../e0b77fef8141b57e13bfc87856f6a820968e27f1 | 1 + .../e0bb7b2f97bcd75444670f1adc4aa8f14481cc53 | Bin 0 -> 69 bytes .../e11389dee3a9b2155bdcfaed31856c0cd9968c54 | Bin 0 -> 155 bytes .../e121e2e748580e5ae757bfc244d66892fb012557 | 1 + .../e1259e86f6628854d8a5926180f0ede9b54c8bde | Bin 0 -> 140 bytes .../e1c5a293b09058e4dbe0871264d94520c7df27e6 | Bin 0 -> 160 bytes .../e1f717430e72ac6c904eb3890661f5855982e878 | Bin 0 -> 101 bytes .../e22c0a25ddfb69b79c76876f418f08aabf806e94 | Bin 0 -> 52 bytes .../e23d248a9fbc229b54390f53e45f6eeba470d244 | Bin 0 -> 63 bytes .../e377c2f5849f8fc329f95ba19cc46687bb1d89af | Bin 0 -> 35 bytes .../e39fae279ff7598506e4527cf18dbd0897fb378e | Bin 0 -> 126 bytes .../e3b6625f102437a586d9e073fea76c833b90f031 | Bin 0 -> 134 bytes .../e3d1c16a0f723acbf8942bce8ecaba4d1e6ea9de | 1 + .../e3e12d195fabff1218ec8093b86335a3d50cb33e | Bin 0 -> 126 bytes .../e3fd9ec6727cb94476cfd80c65317d487e798dc1 | Bin 0 -> 9 bytes .../e43289b46977e8d0d0c20dce5e90bc946e39a174 | 2 + .../e465864aef251ff5fab779cd6a9c92349357cdf0 | Bin 0 -> 647 bytes .../e476b4e07b9652865a637d50cc2b7245acd196a5 | Bin 0 -> 30 bytes .../e4a97d1938dc7e87f6bface107f2fd29c08caf5f | Bin 0 -> 134 bytes .../e4f31dc1d382fe1550d3f1ba418d69a1c11cc399 | 1 + .../e4f58f81fd5edf43b32108cd6d4f1a8721c35002 | Bin 0 -> 14 bytes .../e50564615c34e1d556e10ebc1ccb6bda6f134e4f | Bin 0 -> 196 bytes .../e512f0902395cab665b1ac0e8e612598be3d40d7 | Bin 0 -> 256 bytes .../e574da82180cea41e13e8155157a3096f5e13bfe | Bin 0 -> 158 bytes .../e583e7931d7b0f0b915fcc9186498aa54b4e8c8f | Bin 0 -> 34 bytes .../e5fc97ea49550dc13855094ba81ef6b010b2d335 | Bin 0 -> 127 bytes .../e608458a07237baee26dd78d8cc7ce738b69a74f | Bin 0 -> 5 bytes .../e658c444d3fbc293756f3b09fde2720547d04916 | 1 + .../e6c863bd729c105b91a5364769d3bb22f717f2a5 | 1 + .../e6d7854c725e63c0f43ac02433953efec21dbc0e | Bin 0 -> 8 bytes .../e6ebb8f0a59963a1c9cc1d41513733ab1d165df3 | Bin 0 -> 15 bytes .../e7af7107066d92134f30c6ed917f2cd60c68a350 | Bin 0 -> 202 bytes .../e7cc7dc79181382254c51a9493721074e978b3c6 | Bin 0 -> 4 bytes .../e7f6cb8d23c53715dd593ac16b565b37db30c9aa | Bin 0 -> 260 bytes .../e83330ca4c786ff34b8f816b6dccf342e6849387 | Bin 0 -> 246 bytes .../e83387fc935e49a305c42e04c8170a4572c85339 | Bin 0 -> 221 bytes .../e8501fa8a654d60826d05bcf1138a53338b7bfa7 | Bin 0 -> 40 bytes .../e88c3fcf27850d6447409d430a56364e3ffefbe3 | Bin 0 -> 197 bytes .../e89daaa3ee812b3310002656fce7b46bbdb3c667 | 1 + .../e8c1b7df993bad8dfb488a2fa869dbc0dc3f22c8 | Bin 0 -> 154 bytes .../e8de84b0514601032348e901aff9692efbb904d6 | Bin 0 -> 14 bytes .../e927df16a4ed13cccbd141e342b51795f365786b | 1 + .../e9475c56725676a03c23602d810bf47fea49123c | 1 + .../e9e39eb1da2d9c78a8a5b5b21972e19f436f1af1 | Bin 0 -> 176 bytes .../e9e3ae56eb2ee1ca0710e4c8455397bc6984ee12 | Bin 0 -> 1156 bytes .../ea16405a881c91e544152897b69477cc019cdc12 | 1 + .../eac92614718344b2fd2b7d34c2202889d844ea67 | Bin 0 -> 86 bytes .../eb150514614b78b104ff754f0f2eeec27f39fefb | 3 + .../eb77066d6a73d8ba6c336ea02ad1094e744ad159 | Bin 0 -> 40 bytes .../eb85bd8fb1a23c6ce84977860ab32e09cddca86a | 2 + .../ebb38801f09a0d87bb189abdb60cd636cab9b40c | Bin 0 -> 116 bytes .../ebb3b96382fc5ab0f5da3f40e5cf769cb2b34375 | Bin 0 -> 155 bytes .../ebeea951d8110b7238987a7036bf7c7dbe53a500 | Bin 0 -> 192 bytes .../ec034de6d9b39e746eafba47d384d4d841a7d877 | 1 + .../ec20bdc4f68b0f2aa3f11bde1c62a0be47b3983e | 1 + .../ec407b0f782955115bb6117b001a1b2d5bd8fa4a | 1 + .../ec5d78db794d97de4f2edffda10b042ed3fb774a | Bin 0 -> 38 bytes .../ec79139b50a6bc05dd2e613871e0c2aa1cf1d31e | Bin 0 -> 653 bytes .../ecd609488627f90c7b3194c865b897b905200ecd | Bin 0 -> 42 bytes .../ecf18296058dd79751f850ca40a38b669a1b2541 | Bin 0 -> 134 bytes .../ecfddb29cf09b3421ad247a71ca735892fe3b15d | Bin 0 -> 72 bytes .../ed4b26a824886dd0f80f182958032ca92217018d | Bin 0 -> 94 bytes .../ed5eeaed1dd95862fd407a1c431447a51601bc36 | Bin 0 -> 127 bytes .../ede790221fd99ad6306f39b1e67f56e24f098fa3 | Bin 0 -> 145 bytes .../ee0f46ad27874ed6ec3532901e5003530e17ed60 | Bin 0 -> 247 bytes .../ee0fa2d96239f54b55c49a841f5eeda9e72c0717 | 1 + .../ee2d00ebf6e5b60ccdd3922b875d1cb30eb27828 | 2 + .../ee3bf0671157a9fa1e59a3b19d8dc27d0dc00894 | Bin 0 -> 133 bytes .../ee66343807762304b5aa9d7e0050f0a883b5c42a | Bin 0 -> 141 bytes .../ee7867a9400242091b12a6cb3f04ca8f680db692 | 1 + .../ee9568c13097cb35684a548a97b822eba88d9991 | Bin 0 -> 66 bytes .../eeacf76069d788ad91f3839d3ac2ea19b4ef55bd | 1 + .../eedc262f8792a8194e4b0f2883c6ad837ce06932 | Bin 0 -> 61 bytes .../eef8f8da14fb5d61cf748d75d3d278751d350998 | Bin 0 -> 246 bytes .../ef11511939859b56a71004926811be5085447e29 | 1 + .../ef4218cb80193d7a4a09c523a761432d3e8478fc | Bin 0 -> 261 bytes .../ef9323259e68576624ef17382cf2330f629e8c91 | Bin 0 -> 72 bytes .../efa7a2c8d6dfd0f014c28659bcbe9b8864645e10 | 2 + .../efa83192d0ec824874d25e2836fe0a3d75ed0c9d | Bin 0 -> 135 bytes .../efc0245c583b8e78adac15261c76f5e321b4fdde | 1 + .../eff2665b4322827d202155045fdb6b55ed3a465e | Bin 0 -> 126 bytes .../f0052d02e5d252fa48c738dbe1287ea1c768fc91 | 1 + .../f0764372522410c4270697bdb1d5cd22873c0304 | Bin 0 -> 120 bytes .../f0791f9049d3fef7c86d0a1118910c497cb2239d | Bin 0 -> 46 bytes .../f0885c8145e37a2cd55ac8139305d83f38760943 | Bin 0 -> 126 bytes .../f0cc05cb4c3965028a6c9c8cbdde2f2d892ce3a1 | Bin 0 -> 289 bytes .../f0f2b0aa4ee8b8bd1e2c4e01f673f66d386a46b3 | Bin 0 -> 200 bytes .../f11be4fdb2083db074173d3e3c6c013384a1c6ba | Bin 0 -> 126 bytes .../f12d7e092bc913db9d212990f7537db19e39b82c | 1 + .../f14f6448fd80c920d2c59c70578e0d225b98b4e4 | Bin 0 -> 105 bytes .../f15286b59b04e268dd5bf2d0ff23463c33cb4bf8 | Bin 0 -> 51 bytes .../f164f093a439aee7ea00bc0cba052fafb1d0f07c | 1 + .../f17210bc3c9154a55eea178d8fbe687afa794617 | 1 + .../f178bdd1b6a0bd86d55830355c0fc809b3fb1dc4 | Bin 0 -> 15 bytes .../f1cced20f4be4dde6172b4d813e5a644728b34f1 | Bin 0 -> 23 bytes .../f1f96db10dc34ef04df7eda002765b20c4f6a733 | Bin 0 -> 158 bytes .../f2129a3c245650c409ff253f1e4cffad463ea58a | Bin 0 -> 203 bytes .../f21de6e96890a990f7d3706fc3f923b413df35ea | Bin 0 -> 190 bytes .../f2234ef9edc2b14853c0d20a9fc50ae2aec6d633 | 1 + .../f239049fa176a6e25eefe36ad7e3573e0363287c | Bin 0 -> 164 bytes .../f23d528a7f95c1af847482bfedecdbaa50bfebb7 | Bin 0 -> 125 bytes .../f282a6467410c4049af190a5bfdc123628835664 | Bin 0 -> 78 bytes .../f294f630de20322442cff3c3df323fb6b8c4a4c1 | Bin 0 -> 29 bytes .../f2d2f59a28937c90cffbf92baec467d66cd44db1 | Bin 0 -> 71 bytes .../f2e58f52109f6c2a974aa8f61cd7c9f8a2961e13 | 2 + .../f3407bd9c8185ac48f6a6df75c7e618623c46cbc | 3 + .../f357d1caf1ff6cb5a5c903a619e3f5258cd38691 | Bin 0 -> 249 bytes .../f361afd240e578fcab8407f2af6ec6a6ad3f4a94 | Bin 0 -> 13 bytes .../f370a44b8765eae60f377eb9ae9e9860a6aef211 | Bin 0 -> 20 bytes .../f38ba7ce95eb4436fb369e4331666e4b1166c354 | Bin 0 -> 1156 bytes .../f393dd602756f491e856c78c9bf19075f972629a | Bin 0 -> 4 bytes .../f3e95904bad86b97f7e769e66a192383cbdbf82a | Bin 0 -> 190 bytes .../f3f08d5a24defaf54d569471355ce0f3234480db | Bin 0 -> 45 bytes .../f3fdbc41fc737741bceb2cf14185a27ad4b769d9 | Bin 0 -> 128 bytes .../f431a3141a5ad5a3782f06686ff0a5acf6899fe8 | Bin 0 -> 6 bytes .../f440b41f1ae3efe2451080c22d5324360c0a4225 | 1 + .../f469b35a1fa6d6e234190823dbce45ef5ed510c8 | 1 + .../f49ae4cbfd1eb4405c7da71d6fb7514c9cec6b91 | Bin 0 -> 647 bytes .../f4e8afb851f168f14489266cd1636424f5d872a9 | Bin 0 -> 18 bytes .../f511a6fddf37b81e8336bb38a0663e56a6831ddf | Bin 0 -> 40 bytes .../f53d3971d3ff39f0cd2ba35cc75d3a72b5157ce1 | Bin 0 -> 146 bytes .../f54d7e8d28958d24a98db11e025996236d00d15a | Bin 0 -> 29 bytes .../f583cb7d081efbc17c3b980c80e481efef749fa9 | Bin 0 -> 7 bytes .../f5a1814601372d20aeead3d456ee3ffa36ee3c52 | Bin 0 -> 94 bytes .../f66a658e45d60cdefcbe4f254edc48dbddee24f8 | Bin 0 -> 1164 bytes .../f72fcc46d940f9d0c9910e90f08d540de0c2a760 | 1 + .../f74080044607ca75e5764bd25d43e750f44ea68b | Bin 0 -> 134 bytes .../f860be6f59a6c9bf6d5a960be887853e1444d812 | Bin 0 -> 40 bytes .../f86755bd3d77c7244da85efa79c5bd01a45addca | Bin 0 -> 97 bytes .../f88f4d38ddf8ac5fa23cbeb37625419e017c7f5a | 1 + .../f896fbda9b94f613705c6a97460c6b5a504c5a99 | Bin 0 -> 347 bytes .../f8a9d038aad28c6f7d74d76699220705881cd130 | 1 + .../f9129fc8bacd59389223492d7abd3c9e5c8272cc | 1 + .../f928afdf829c73383349b9e8be8ca14bffc97fb6 | Bin 0 -> 647 bytes .../f929817c918de5d48ebb416b9e7aa64f383bd2c7 | 1 + .../f9338cf42386624b38189ecf88715c816981a318 | Bin 0 -> 181 bytes .../f9902560fcc0d4ec49fb42df43fd3ba7cabc634c | 1 + .../f990ada42d920e980106ca70dca64b50f6024947 | Bin 0 -> 59 bytes .../f9ab7db2b61b3161da93b722dae15ed484e975e8 | Bin 0 -> 23 bytes .../f9b03b9130244ea355bce1d60bf86b9f59c2bcc8 | 2 + .../f9cf946c2879ec5c974d40982b0a91367ff87143 | 1 + .../fa253a08be3465282e00fd5a8958d2b9c6ea7c6c | 1 + .../fa3bc5d2bd1995847a476d1114b1f17db28eada8 | Bin 0 -> 72 bytes .../fa3d8b6ba466b84d64d535e3de40bb5bd01bc4ed | Bin 0 -> 25 bytes .../fa433e16012479b2148c74f1282fb04d348b4139 | Bin 0 -> 264 bytes .../fa617d1b49bec84ad69378ebed71e716a317eb9f | Bin 0 -> 139 bytes .../fa6fec7c3bd581df1bbd22394a176dd066ce4a22 | Bin 0 -> 110 bytes .../fae9ccef3449c30d68b7db167578831f2d06a8dc | Bin 0 -> 61 bytes .../fb2d1a15cfae6553362cd92b418136253a561032 | Bin 0 -> 109 bytes .../fb9b20c9bcf5260a627759b726d856cb771afc80 | 1 + .../fba3082984ee84b86b277af144a36482e76461a9 | Bin 0 -> 102 bytes .../fbc123c15e8a6a1c715285efd3d73b47a01d91bd | Bin 0 -> 38 bytes .../fbc9e8b10c4f703595dcc6489aac791e8527c636 | Bin 0 -> 63 bytes .../fbe39a24646b972b9bd16ae15dfa95d6869f6013 | 2 + .../fc2ffecb0550c3aba2802503f7306df57f44957d | 1 + .../fc3d9181bb44289d1ce61d61fd2f62ba8cfeaa6e | 119 + .../fc805a3fe1db85e359fe773a0f0c4f57f745db5f | Bin 0 -> 146 bytes .../fc92a05413f42462d0012d0b32b006d63a9cdcb0 | Bin 0 -> 102 bytes .../fcb9ed67ebdbc90d5e52a1309990a90dfb7b4803 | Bin 0 -> 148 bytes .../fce641815e07a444d409a113efb4f4f01ca06202 | Bin 0 -> 132 bytes .../fcfd86c8a20dd0804fae24ece220092e3ad204f8 | Bin 0 -> 128 bytes .../fd59809c172368c50cb10c1d21fc1511522208de | Bin 0 -> 12 bytes .../fd6c37cf67420fc2636d9d1ad6577ead008671cd | Bin 0 -> 6 bytes .../fd80fd82647a800fbba6814294b885c2947a5d6a | 1 + .../fdcae1175be746f5b35dc48ab1dfd73628a4d332 | Bin 0 -> 160 bytes .../fddd2d7322e0ff4bc76445aa358d073717f7f7a3 | Bin 0 -> 70 bytes .../fdf1cda60cc3eae8af4f2e7e001adb3e08c2ece6 | Bin 0 -> 647 bytes .../fe19859d3dd80d6fb83851dee7e98eea4b3cc784 | Bin 0 -> 29 bytes .../fe4fd0539d4d8745871d60ab2dbe22004c6a9fe5 | 1 + .../fe560913da903502f1c6ba169bac3d3f1c657627 | Bin 0 -> 250 bytes .../fe714b941d4f565ec3bca0ea45feae0fcc8bd732 | Bin 0 -> 54 bytes .../fe94a31c5e49c27e9506d0a0a484c9acde0ed2dc | Bin 0 -> 40 bytes .../feaa608a68da21c0bd55af635330d024a40d06eb | Bin 0 -> 654 bytes .../fed0689a43dc0fca9cf9f833bc3a3ff4865e5aa6 | Bin 0 -> 222 bytes .../fef4a6687a675c2e407a3b6dca57965a218d3c16 | Bin 0 -> 14 bytes .../fefa235a7ad36905489fd9dc981ba483938db6f6 | Bin 0 -> 32 bytes .../ff12bafe56915492483b40454f0af5b0090c78ef | 2 + .../ff215d0df1d2103db75d35d5080aa75b01996f43 | Bin 0 -> 255 bytes .../ff289a307acd1d8def30c396de5964f321043eca | Bin 0 -> 224 bytes .../ff84bd56755578712522fcd08e37a71fe7c5d6aa | 1 + .../ffa134887651f8fc31d1d29ea060c2e7d70aca3e | Bin 0 -> 335 bytes .../ffb1df7b5ea8fae044a025f754f8c0536c5dbb1d | Bin 0 -> 146 bytes .../ffcf7bb9f13d56093a5f20c15c33f548d2df9cc6 | Bin 0 -> 160 bytes .../ffd4f21a6e82ad25d402e984f1fdd3f8f47bb464 | Bin 0 -> 126 bytes .../ffdfae567ef24406c23c238c204308cf7bbb9d86 | Bin 0 -> 254 bytes .../015d8b0a97df883842a1e5523226534faa5ed092 | Bin 0 -> 3086 bytes .../01dc4bb81bbe2a082c6ffcd4a1ce4b56157be2a3 | Bin 0 -> 7226 bytes .../0200d7eab62ea0eaedbf4962985537981ec00a9c | Bin 0 -> 534 bytes .../02287f024c4eb1ac7e16898df84bef97173fdc24 | Bin 0 -> 26 bytes .../022c4c07b089feb76008d8d9c2c1f0bf8a5d49e8 | Bin 0 -> 331 bytes .../02f0215258ab65e8399fa792933d18d85fbf4b67 | Bin 0 -> 388 bytes .../031ce28e68b790421ca9286a5e2bf8d16145160b | 1 + .../03429177ae2c579e1d28c3fa74fc817189415115 | Bin 0 -> 337 bytes .../05087faa7f496290ac2bf172f701c93ea1de64d3 | 1 + .../051e0fef9252c8230dec521696f83136a2a086d5 | Bin 0 -> 737 bytes .../057c6bec50a14aab3f4b02670d25598f632f189a | Bin 0 -> 6530 bytes .../058dc5912bae182dd0f52abb90f6804baf082e80 | Bin 0 -> 5762 bytes .../05f3161820f8a4668897cfcf0f7a7d56699ecd65 | Bin 0 -> 740 bytes .../065e8a8af70ab05a8a6e31e82ecbda0941f0c47f | Bin 0 -> 363 bytes .../0661d9841d3da67b8cc40d4fb2787da6418bce6b | Bin 0 -> 677 bytes .../068daa1ca6549b42b0bee64fe4e65342faca88c7 | 1 + .../0691ca1f5ae47f007d9d6cdec9dd4e2aac484dcf | 1 + .../06b91fba75881bff0be487502354257e964dbbf6 | Bin 0 -> 373 bytes .../06d1390eda2b13feb446f507b44d89308a3399b7 | Bin 0 -> 2931 bytes .../06dc54fe0d6fa4af8ef4f6b7fd8074d2d137980f | Bin 0 -> 373 bytes .../077fd314f2562d7d4c33b88a462bc7a2c27b69dc | Bin 0 -> 356 bytes .../080606e7dfcea2f63bb565e94e7b6a3c6870f607 | Bin 0 -> 49080 bytes .../085927a06abf1f1207d6618f58eae4e98fdc2bf8 | Bin 0 -> 3100 bytes .../0866112f723b2e78ab5a93838684d0915b6296c3 | Bin 0 -> 3077 bytes .../087cf847ab002da41f40414361e189c2aebae0da | 1 + .../089c52c0bec4d1294c659dbeaafdb4dc9b219647 | Bin 0 -> 325 bytes .../08ff58a3ee77ba66fbdfc64c2e98b725010a623d | Bin 0 -> 1527 bytes .../09407e4d28cd13200134294792bf96278b823254 | 1 + .../0a77e9126345ffe5abdfe13c8ce0bb672c4c8dec | 1 + .../0bf645c5e2dd73f0696f8b74798fbd3581a62be0 | 1 + .../0c48ff1d1fa36c92c8d41b69232da47c4dbe632e | Bin 0 -> 3049 bytes .../0d138c7ea07e8c5e67555816ad5e8416fab82de9 | Bin 0 -> 65536 bytes .../0d218b6646c3285646e6279c9057cce24ce73e87 | Bin 0 -> 1529 bytes .../0dff3e4b973675205eacdcf05b5d088c93afc014 | Bin 0 -> 651 bytes .../0e42b6644415cd5c32b37c1773f6fa5a41fea8d7 | 1 + .../0e9d8eea1bdf13662d0be49215654a13df036691 | Bin 0 -> 24505 bytes .../0f3e9d1daf534b77f3280500872c1471e93805bc | 1 + .../104309d90b6aed3a715b3b5ecd97031bde2e439a | 1 + .../109be9d189dc1e5b8cb5c00360eae1c46239a181 | Bin 0 -> 24562 bytes .../10f0d89773275a484e66d85842c7c1d3fe97a007 | Bin 0 -> 6145 bytes .../11b492d6730efcac78434c45413aeaccc6a9df8b | 1 + .../131f3d1b5e3b770ceb91252d04646eac713f36ce | Bin 0 -> 316 bytes .../1365dbee5a1503a98c8aa65d15552382b493dc43 | Bin 0 -> 361 bytes .../13ff747d7f79f587f038caa9398f1313565f9be0 | Bin 0 -> 132 bytes .../14363b422c2ab14787bf1f35e89862f5d7f54e9e | Bin 0 -> 320 bytes .../146eed9a5220fd61011d779a34b7ad595dbfc4b4 | Bin 0 -> 630 bytes .../14706d68c0e6878b1c3ec5616f2e9e3e95f33fbb | Bin 0 -> 1915 bytes .../1475aae906b72ed8f0d972efa431ba68f74d082d | Bin 0 -> 459 bytes .../1484b8ab5535fcb397c00d8352de330b601d8489 | Bin 0 -> 1537 bytes .../149b34cc0f320de62990eb771bfdd4ed7b96ec7e | Bin 0 -> 363 bytes .../16448ebbb2ee8943a3549bf739382801f67fa055 | Bin 0 -> 1943 bytes .../177f7f21b6e6a95b0ae23349c558911568cdafbf | Bin 0 -> 438 bytes .../1784d75a2a91da80fdcc82d5734c9d3331e349cc | Bin 0 -> 24488 bytes .../1810832414023b1632037f1b9bd44a5c1d9cea6b | Bin 0 -> 132 bytes .../18dcb593b08a0dbf137a54cc7ac3a9b279f2a356 | Bin 0 -> 721 bytes .../19bd01dbc971fae5dc6a865d5ab1cdf23e205a96 | Bin 0 -> 617 bytes .../1a4bc1016ba324d40ba7497e35156aa061227e02 | Bin 0 -> 338 bytes .../1add0f8cca75b50eb079c459c7c7cb7dffd91732 | Bin 0 -> 72 bytes .../1b4a9b3a810a66243ba816e3bc07b8cfb2dd790f | Bin 0 -> 745 bytes .../1c19226fc48fa1e5b60d9f2ed84dfed79e6861d9 | Bin 0 -> 84 bytes .../1c196330eb11078b46ba64d3670df0e72df99b17 | Bin 0 -> 371 bytes .../1cd7a2fe889e74f8d82072b494c9306154b2f0cc | Bin 0 -> 2932 bytes .../1d4c8f52f23b6f10da3ec38fe9b675e5819bd0e6 | Bin 0 -> 495 bytes .../1d8d360cf5d69ec1160fdfeb25126494a1e60a8a | Bin 0 -> 1505 bytes .../1ddd5eb9ac1e48c58e549ecc2ae708aacda4116d | Bin 0 -> 1489 bytes .../1e1acd8ca354f68dbb47ad2de6f10cd6f8217aad | Bin 0 -> 1044 bytes .../1e78b7ff6e0d9c53f4f1cdda7ff9565c57e6ab67 | Bin 0 -> 3086 bytes .../1ea20e2761bcd8107882905b07c5dd7967c837c7 | 1 + .../1f3d7c7dad523bce48995ced3e694970d2c66d79 | Bin 0 -> 5 bytes .../20151155b4e8271c6c1e25d34bb53d56a0f94c3d | Bin 0 -> 2922 bytes .../211dce1a45dcd617ac0cd7363c907d3fe135fc11 | Bin 0 -> 6154 bytes .../2272253d8904ad7f5c3a8522c551722ab9bb6a84 | Bin 0 -> 369 bytes .../239c7d330be64556a0e3a07ccfb0c113145d98ab | Bin 0 -> 3037 bytes .../23e5b787019868b0c790ae95981f1c6a033cca70 | Bin 0 -> 6882 bytes .../24a5a9e6d25a893d1d8b7089e06d4bd8c0e7bdc7 | Bin 0 -> 371 bytes .../24e092068889fde1d7b17f3a49cb8f85921095b7 | Bin 0 -> 332 bytes .../24eb6d22462609aa45ce4e01d071f69f01298518 | Bin 0 -> 3 bytes .../255cae055c859c1b6509cb4af6cee7bd4cbf9de2 | Bin 0 -> 1525 bytes .../25fbcd32a32513ac99db81ef965d458c34ac909a | Bin 0 -> 391 bytes .../281feaf54294950f51817d6ca323f96af30cc46d | Bin 0 -> 231 bytes .../28b30fc33697a94fd0c9ab5817a98bdad3cb3770 | Bin 0 -> 1447 bytes .../28c2ce1e99ad1d0fc9db6fd7ea5fbcbf2646dc38 | Bin 0 -> 768 bytes .../28cc6f54f014d2494afffd5c5c9602fb33961649 | Bin 0 -> 604 bytes .../299e07091d27ae36a9626a6e6f11945d3609623b | Bin 0 -> 333 bytes .../29d2a59db35e53adbbbd3180d156aee3c82ee3f1 | Bin 0 -> 58249 bytes .../2a13b2b9778cdce97085bca248b7853ca4cecc4b | Bin 0 -> 1568 bytes .../2a641238b2da0b774bcb85890ab5de6f367450b8 | Bin 0 -> 6162 bytes .../2aa6864ed8e9998d1caa4355739696dab678fd2a | 1 + .../2aac8457237dbabdc42d28f9b62f05d03b3612fa | Bin 0 -> 1505 bytes .../2b345ae246360e578345ecd17d400250e64b4a9a | Bin 0 -> 2710 bytes .../2b6b20fb2fbfad0360a3ae5bb3740363f5a926a0 | 1 + .../2c385fd9805073cb98289da7cf242cacd87c9b22 | Bin 0 -> 2955 bytes .../2d7d044b0b9192c1b030a90c4b937a0defbdc23d | Bin 0 -> 636 bytes .../2fc36487818a089d37fbc9392b818f0078179aa9 | Bin 0 -> 2925 bytes .../2fe662c4d245df41eaaf2fe0eb85924a1e53e38c | Bin 0 -> 53 bytes .../2ff96b69f35defae9abd59f884a811e573ce72dc | Bin 0 -> 375 bytes .../30886c7cecc7b09b7585e14453a75cef886adf03 | Bin 0 -> 737 bytes .../3137cdfe829a9aeb76db365caf73a7cfeacb46b8 | Bin 0 -> 4427 bytes .../3141bd5a949ef226c221ea49853532738a6921c5 | Bin 0 -> 504 bytes .../3152a64502f5b8dd46db57376c78a462aabd1153 | Bin 0 -> 390 bytes .../31fb955d0ba672990bcdb3e38af405970449c53f | Bin 0 -> 1543 bytes .../323aa3ddc64fc058d771e98fc893de810bbcd1c2 | Bin 0 -> 11 bytes .../32dd11f59ffe739fb1a72800a5445b09d92905c3 | Bin 0 -> 421 bytes .../348d1d7e662ea1846cdd087dddf4f563abfe212f | Bin 0 -> 1524 bytes .../35f234864566e4e3b534cc10b8a7d0987c58fd23 | Bin 0 -> 390 bytes .../361ef7cd2d7882d04cbd5eb0cbb813d258a1a8fc | Bin 0 -> 699 bytes .../3667ecea4d9663b12349327a095b13b61d45d8f3 | Bin 0 -> 771 bytes .../366f7e2c062844940bc98beef59a0a143984cc27 | Bin 0 -> 615 bytes .../375bb8ea45a40ce64a1363ce9651dc8ec7e60235 | Bin 0 -> 757 bytes .../38a17043c0cc4f906951d017906992236c5e735c | Bin 0 -> 735 bytes .../3999e423332bcc42d130332d476bfbca32a0b12a | Bin 0 -> 8795 bytes .../3a17786615f13c98712c3b186d7b89e90108c161 | Bin 0 -> 84 bytes .../3a278c479897cf10bc2e5cea4a90654297763213 | Bin 0 -> 321 bytes .../3bf04dbc66ca550084b33e3f92dcb145287046e8 | Bin 0 -> 9 bytes .../3cc640cab03f97ca5acb8694f2f37f4d971f1d69 | Bin 0 -> 31 bytes .../3d233d72fdaf8a2f77ff5a2ecf1a7c49f30857aa | 1 + .../401f2db8d18697d14266aac41da19b756f5dc680 | Bin 0 -> 576 bytes .../4080923e9d1df14ace9581b290a670ca3b8ebe90 | Bin 0 -> 68 bytes .../417740cebe9b5d70a8451e3094327435ea66dab6 | Bin 0 -> 1354 bytes .../41c5c7d2b3cd1ea723f50c5841159db8f73b6153 | 25 + .../41fad555e58eb8f1387336d074d520c4f666bdc7 | 1 + .../443f21d0190d98d3335ff8b004bbbb62402e1aa8 | Bin 0 -> 87 bytes .../453357eabaecb9b8503aa4e6587cd8f19d267a69 | Bin 0 -> 1348 bytes .../45ef63d61bf995f5ed8491cea171ddd3416fd3bc | Bin 0 -> 411 bytes .../465172bf633350a6d7591f1c503de22fa9e22d52 | Bin 0 -> 363 bytes .../469710080d555aa6697850892b8a801366048236 | Bin 0 -> 634 bytes .../479c5751103b7389c3d80b95c85de12344ed51f1 | Bin 0 -> 534 bytes .../482a0f54fdd838f8e47910331b03f3c10356a02d | Bin 0 -> 4096 bytes .../4830614ac0f14f87cf80a4487cbefbf9778bc6e5 | 1 + .../48436c71fabc1f5d2d81ee0c45321047bfda6a5c | Bin 0 -> 512 bytes .../48d2ab54a8b5bd67ecf90ca6b2cd63ee635e0ad5 | Bin 0 -> 53 bytes .../4947b24445702b03bce79b7604e88957d6e13638 | Bin 0 -> 64 bytes .../49704a8c270c656af9cb0e213bee678ba305cad9 | Bin 0 -> 311 bytes .../49997b8c05840da3dce16a84eec124549aee387d | Bin 0 -> 181 bytes .../49ea3b58a5794ec6fbf58c29dc3cb7f6447fe9bd | Bin 0 -> 4078 bytes .../49ff124657da2ae53a7c0afb390a8c5463d10f94 | Bin 0 -> 477 bytes .../4a68df19d8384c75ec1cd6f70f173cac10608bc7 | Bin 0 -> 652 bytes .../4b04f1a59994683f3dbf20d4a2229269875a934a | Bin 0 -> 1501 bytes .../4b23fc81ba6e4d223bbf46daf1e3f04303052462 | 1 + .../4c57bb090c900c6f7c3765226359d1f1e5b705eb | Bin 0 -> 185 bytes .../4cc98c465a38ec41a35d1eff7c8d965b61144475 | Bin 0 -> 36 bytes .../4d11d135aa59162814860ca2c6c2ef3b08ed6c8a | Bin 0 -> 373 bytes .../4d7c8bd98b876fc3277ff489dd4c420a30e41165 | Bin 0 -> 732 bytes .../4d9fd59c323de3e80b926e683ed26f9907fe068b | Bin 0 -> 75 bytes .../4e1e06224e488a4f51372255788789e3ec8888fa | Bin 0 -> 415 bytes .../4e39dfe856c9f9b42a93aec3159458aa62c373d0 | Bin 0 -> 512 bytes .../4ea65f396b6aa9a01d3a524ab6b0d5c7c909892a | Bin 0 -> 697 bytes .../4f0b841d09f13218fa9112e9abc6a6b7d6e26d9d | Bin 0 -> 4096 bytes .../4fbc59275f1bf9d4cf4e044f586a8f51da1e0af0 | Bin 0 -> 4488 bytes .../5065029bb577423abe0e74968b102f8c2c5beea3 | Bin 0 -> 808 bytes .../51099f4d3b5cd7e30ae7e68cdbc8720be4a51b52 | Bin 0 -> 625 bytes .../5111ff73a0baeefafe85582826a5901a5f3d802f | Bin 0 -> 6146 bytes .../524199251b2fb0624a2a01c4cf180250d0610709 | Bin 0 -> 771 bytes .../532e55f79e68e0699dcf2b7a67b8794eca3da647 | Bin 0 -> 4096 bytes .../53831272810f9d9c0cee74dadd8d9b1072624ac6 | Bin 0 -> 731 bytes .../53d5adc15e1a5fe89aeb452a247349c99b280522 | 1 + .../54c5a01ea2e92a2af1b76437932e0fdf0b4645de | Bin 0 -> 750 bytes .../54c6e676d27f393d76ec2233d53953a900c404a9 | Bin 0 -> 83 bytes .../55665f6a17a1a0fa9b200a426cffa7ddeba0c353 | Bin 0 -> 6114 bytes .../5807a3babd66b299ff3dffd1c8a8080ae60269a9 | Bin 0 -> 1151 bytes .../58a611d4bd19e8778feb7dff1f0e59b7a484a6a9 | Bin 0 -> 2981 bytes .../58d621b1d3e4d0d75aead325ab29762811d9bab6 | Bin 0 -> 375 bytes .../58ffdbbb4d4956c5c41edacd1642c884f491c4f3 | Bin 0 -> 299 bytes .../59a2c2fb778a9024e40c7f66a9c079f7634f6596 | Bin 0 -> 429 bytes .../5a33184e72046b0a7f4c33516e95507165daaffb | Bin 0 -> 75 bytes .../5b63665fd02f234c80ba1cb1b09bf22145589f1a | Bin 0 -> 220 bytes .../5c40db102b507c51b0d1ace71170be9131bed246 | Bin 0 -> 348 bytes .../5c5bd82a8faf3d57644b981a8affacdf905462d3 | Bin 0 -> 1945 bytes .../5c94cfd25f2af76d1eb0bb49ab8d1f515cd74f69 | Bin 0 -> 373 bytes .../5f12df8b44ca7b529bb16d6bc61d802bc84fdc9e | Bin 0 -> 631 bytes .../5f2fbcc9e323f9f3c7484392610826a0d2622bde | Bin 0 -> 2103 bytes .../5f80c56a91491f9828dcc637a4c17ef61c5c6e35 | Bin 0 -> 397 bytes .../5f9cd939d705cc98b625eea88049403da68bb53a | 1 + .../5fc229231c40467c0667b24bc690e2fbe5d0724e | Bin 0 -> 1024 bytes .../6109e5fd262d4d7e201e9bf0f483635ac345e427 | Bin 0 -> 278870 bytes .../610e8a109988df975166df442a5a1641143ad1aa | Bin 0 -> 2099 bytes .../620c71bf929336df84bd9319ee245fbbdd5fe6e8 | Bin 0 -> 1024 bytes .../621a2a867e09d1b6c367d0b23952de7b84671654 | Bin 0 -> 370 bytes .../6225f7aef80afac702b6b8f6d13481f78ecd2c04 | Bin 0 -> 760 bytes .../62caedcd247a2e8256de1a31c547866dde860889 | Bin 0 -> 382 bytes .../62d322a783b8aae56df7227db2795543350021d2 | Bin 0 -> 390 bytes .../634e9d2fc25432627926d33f913deaffdd5cbdab | Bin 0 -> 1880 bytes .../63caab10e013b9e1bf88c4200c46f526dc8bc2bf | 1 + .../643c9ee84d4a7fd3bfbe75b8bcd14adbb1176cce | Bin 0 -> 1907 bytes .../650f16d65fff1aefdfeab0b9d88a002caa00c21c | Bin 0 -> 736 bytes .../657c11171351be50552654891042cbee124d55cb | Bin 0 -> 386 bytes .../6584e5fe51bab4cd4df1477ae53a2edaf529752a | Bin 0 -> 1360 bytes .../65a6ab2a98b8083a205e476f15ca5e44993c6a9d | Bin 0 -> 580 bytes .../65d0109e04c5cbe3493e68dc353116eb1ff9e721 | Bin 0 -> 597 bytes .../660405a62a43782afc40dc6c5fda24f7c5769700 | Bin 0 -> 2979 bytes .../66ec280b13484a101cdc9bddfb227c77a4d64d8b | Bin 0 -> 132 bytes .../67894cc463340d91523b5dffb2491ce137abc07d | Bin 0 -> 386 bytes .../68c7eda5bce173a16a7bd9fc15c4ca5231446951 | Bin 0 -> 3000 bytes .../69303eb570a1f1e778a6d4752f5f637487d0c2e2 | Bin 0 -> 723 bytes .../693a6b8c84ad5fc1881229730f7673b1609db719 | 1 + .../69ad85604d63846dae9452be0344f4d1326bdb9b | Bin 0 -> 1980 bytes .../6a4823d453a8b1a15b3d1290212d35315ac256d2 | 1 + .../6c39598df93efb6ad0d4ff68bbbb629765b2ab05 | Bin 0 -> 755 bytes .../6ea508734d66a5b8e8849d970c7849d07d398b29 | 1 + .../6ead16798043c420d1e6669f1359753cf3387258 | Bin 0 -> 732 bytes .../6ed8b63d205ba30917280b7acb723b6c35067ddc | Bin 0 -> 755 bytes .../6f16aed58ea34039fdef6ceadc26430d5c83a6d6 | Bin 0 -> 27 bytes .../6f2148c3dd78895af06df23e7015030c0651e029 | Bin 0 -> 1513 bytes .../6f8e06bf53d151856fca8818ed0bb6e86e68468e | Bin 0 -> 2086 bytes .../6ff32dc01e3e17c5094408ab01d29b681abbb521 | Bin 0 -> 277 bytes .../71dda5fc0481f14a398ba1c00f3c125ce54b5e7f | Bin 0 -> 65536 bytes .../71fadc7605c7176b051869db6d8ed6190d0ec06c | Bin 0 -> 1527 bytes .../72cbbc24af749202df5be396e7425f8f6e5ec92e | Bin 0 -> 814 bytes .../734fa74a4e98b948f67c5bd3b6dd9817a1930728 | Bin 0 -> 7134 bytes .../73bb090542f2d6ed24a4b4dde04604de40e7eff5 | Bin 0 -> 1479 bytes .../7439cccc86d958705c556ecff3b2c1c30d694601 | Bin 0 -> 266 bytes .../755eecd6dea14091fe73e0aebddb2f9fe01c7477 | Bin 0 -> 308 bytes .../75e63407eeadc307941015e94fd3c9d1457eb287 | Bin 0 -> 237 bytes .../7626a41fbedb528e84f7a508286aaad0e3fce909 | Bin 0 -> 413 bytes .../76c62007c4c47031dd279c8d19fd7831dc8bcdfa | Bin 0 -> 3076 bytes .../76ffbd5d694ffea78d6a4e2795e0e8c1b17fc4be | Bin 0 -> 75 bytes .../783962241ac06a53137f45715f0d3d72d664fbc1 | Bin 0 -> 4195 bytes .../78f9e215acb1b6028c19eb0261415891f21cfc92 | Bin 0 -> 1507 bytes .../794aee0ade67846b83c9815ac0225010b6e2c297 | Bin 0 -> 383 bytes .../79d5bf6c9bc0f6f7eae08f2a68c37dd7b89695f9 | Bin 0 -> 8584 bytes .../7a4a4fd0b771dac40e10767b09ac9acf04c2bd67 | Bin 0 -> 3998 bytes .../7b2391ae9f893d7364ed536d2bd510fd61eef81c | Bin 0 -> 51 bytes .../7b4d6a8b9ade79fbacd5c236bf086b16b215c74b | Bin 0 -> 402 bytes .../7b90552fbd838d455816bee9e3b5d1db55900162 | Bin 0 -> 296 bytes .../7c61fbdb5df1bb8d789f3b11dc29bee0a2e6aea7 | Bin 0 -> 1522 bytes .../7c9760091b99a3f27f9b813c1c3cad8a526c36c8 | 1 + .../7c9c083cf0fed6427a322dd5784d3cc3979e4095 | Bin 0 -> 40 bytes .../7cc55b10e94eaff60117c875ef09f07133a13807 | Bin 0 -> 2097 bytes .../7d111e4300734f57b1905e1dd87005aac748890a | Bin 0 -> 3116 bytes .../7e0f2c1a50c754995d0036aa6a3ac5eda34f5b70 | Bin 0 -> 780 bytes .../7e2f0ed91cb42f3edeeaaf4c7fab03ed9c10f9be | Bin 0 -> 386 bytes .../7f4294ff65ac9c7f0700fff11d8bac9eef384242 | Bin 0 -> 6139 bytes .../802359037afd08b585b223c5b16839f57908e14e | Bin 0 -> 11 bytes .../802a4297d586163769c07908f0a573a9fa1a0b27 | 1 + .../80789de87bf7e2da3e8c37fa9aa1a5a9864ad95d | Bin 0 -> 1034 bytes .../813d780d0ebf5c2067ef6664a7f38cca83e5174b | Bin 0 -> 421 bytes .../826774c4b9aa2d6d28b70d4726f46ee874ab1333 | Bin 0 -> 289 bytes .../826a18d6c513a4e447a87d31d29105c10984f79b | Bin 0 -> 437 bytes .../829a0c1942e039bdbf61aa92ba1737c80655892c | Bin 0 -> 99 bytes .../82a1594652e36861bdbbdcee7d97eb85fc99d6c1 | Bin 0 -> 1525 bytes .../82b1e8d36dfbde5f9ed8b58c0a0e92e99ee13cf5 | 1 + .../835910ab97b0c61f7e7502ba2a60c56deb09b1de | Bin 0 -> 6145 bytes .../84a3b79977a8c784760e5f8665ecdbb6be565656 | Bin 0 -> 958 bytes .../854fcb256851a8a10bffd70d131a55848445d599 | Bin 0 -> 581 bytes .../857455767fdb59e60fbe84f35b57a71fa819e46c | 1 + .../8589233ae7e49b1941802b4c94fe2d7f52f7c815 | Bin 0 -> 2426 bytes .../858f5ae67c9703ab01794e5428b53c7827516b4b | Bin 0 -> 2140 bytes .../8591fa02447c3c2fecbf71765ccbd34ddb2310b1 | Bin 0 -> 1951 bytes .../85e53271e14006f0265921d02d4d736cdc580b0b | 1 + .../86be0b293abfbb10747c3f707673bf032f88339f | Bin 0 -> 854 bytes .../86fafa6668f5fd989ad1575267c4d59fd0dc656f | Bin 0 -> 284 bytes .../883030bf193cb683c268d2d5801396025944080e | Bin 0 -> 2264 bytes .../8856bad32c80a9be73619990b669fb58034fc437 | Bin 0 -> 6156 bytes .../889125954431cee0bede33c6ac70c71bad58266a | Bin 0 -> 49080 bytes .../8920bb777999b5a9ce0da07cfb23223e34cf52b1 | Bin 0 -> 628 bytes .../89588e06d3a7107bc582f55875392975688c8a84 | Bin 0 -> 320 bytes .../89beeca2b2613da2b3032b93b599060bf6a0460f | Bin 0 -> 68 bytes .../8af354e0c2bfd80fd0eb8abf78ec1149a6d6b565 | Bin 0 -> 2979 bytes .../8b1a11b1ee13542637dbc466e196fc49785b83d9 | Bin 0 -> 100 bytes .../8c368df3ac45e9455f0f2597cb2d96e4d11cb229 | 1 + .../8c8920538756bb53896f6cfbcc58addce01e6c86 | Bin 0 -> 49117 bytes .../8caafc8209774e0edb14de714719bee89ceea664 | Bin 0 -> 793 bytes .../8ce301bd8db91d7f7c8c43680cf64a9d774bb386 | Bin 0 -> 436 bytes .../8d935d1ae41e9ca143376042026640563b069139 | Bin 0 -> 390 bytes .../8de3add92ce56d8a82ef19e212da448154730a3b | 1 + .../8e297d95f1bcc2989558676fcaccd2b660a8c245 | Bin 0 -> 1541 bytes .../8f19d67cc6ba7e28c3e9c9f4eafa2372cd0efd8a | Bin 0 -> 295 bytes .../8ff7dac8dad594231eb3fd9aac117f1e98f40e36 | 1 + .../9267b8821ed5ea6b7c28465204a5deb225702a06 | Bin 0 -> 3003 bytes .../9400a2766adfd50f470991fd7de9fc1067827265 | Bin 0 -> 11 bytes .../940b4f106c64b57b40dae5328c5e631716ad0115 | Bin 0 -> 3140 bytes .../96ab556e925078e3885c2299b9b111b9714e0b36 | Bin 0 -> 15 bytes .../96b37b29faf10c8f99be3f9734539e45c88bbf5a | Bin 0 -> 4 bytes .../97f333ec4028ee3971c8c8358edd3c9d363268c1 | 1 + .../9854fef29aecae2209740c5b18dc590ddf6d3c8f | Bin 0 -> 1477 bytes .../9973473f12b4aab002e289bb7248eca02e91dbb2 | Bin 0 -> 342 bytes .../998166386e39927361d9519c1f63d2815230ed40 | Bin 0 -> 20 bytes .../99d225147fc2b89f24b4794880da0ec80b8695f4 | 1 + .../9aa50b68713dc6801f711512c79d6d758cb9c998 | Bin 0 -> 65536 bytes .../9aa97b0df6e936579b98b00c39e8da4efe2ccb8e | 1 + .../9ade514b4ab9c889aead941a0083e042d654fa1f | Bin 0 -> 16 bytes .../9b8118c49c55f10ac8d208c6a5b716cd2bb699e0 | Bin 0 -> 1070 bytes .../9bf66b9e161eb61a7e62570e283919ad23487cfd | Bin 0 -> 356 bytes .../9c0780697e5813f173f7ed33cb688e4542135fcd | Bin 0 -> 382 bytes .../9caff6144ff1b27fdfe185aa7e8058293ba9f8aa | Bin 0 -> 375 bytes .../9d6ec804be7ec7076252def96de6d6a4156f03d5 | Bin 0 -> 1755 bytes .../9eca0768cdadc5558ae273880e193816173795f7 | Bin 0 -> 26 bytes .../9f896dab64e848720457f14d29b54791a79643f7 | Bin 0 -> 2050 bytes .../9fdce8542c3c2c8f8dd81d4588dbf2bcd76c57a7 | 1 + .../a00f057773d011dbc8e7f7bf46964ae9ddb50eb5 | Bin 0 -> 367 bytes .../a029c002ea8933b6f75a80f5eea1fe60fefa7783 | Bin 0 -> 473 bytes .../a02b952605f32812b5e80db0498861c7582db859 | Bin 0 -> 27 bytes .../a19c77ab0c8079fb7206826de8c86f202f27d540 | Bin 0 -> 333 bytes .../a1eabd79fa7e0ca50503199e2077d1d125347e2c | Bin 0 -> 2882 bytes .../a2190c70d2440c4b900cbfc42724771dc7feeec8 | Bin 0 -> 2473 bytes .../a4c5e5a879c6349ae219d85b6dd335495f893960 | Bin 0 -> 1444 bytes .../a5e4da0a703eab734b5d74e51cef578da80362ca | 1 + .../a68f0fb9a8a9699a690022eb041c3428da2fe20a | Bin 0 -> 3124 bytes .../a6a176c46fea452190990c1263e213d5f3743050 | 1 + .../a6bd6365b4f8137d7ac83d7d83743fd67a527064 | Bin 0 -> 153 bytes .../a6ec0752d81bb68420d1ff83d17a41aeddad931b | Bin 0 -> 81 bytes .../a733302d776bbd48ab3c22ca331ddafc7e320c63 | Bin 0 -> 65536 bytes .../a768ef5d1e46aaed9114f96c9491f003ca0bf6d6 | Bin 0 -> 267 bytes .../a7c3123c36e471de64b1c7dc3ed931889bc6caf2 | Bin 0 -> 1043 bytes .../a7e342121e60d4c82e44752c6cbd9be3ce7d2484 | Bin 0 -> 1553 bytes .../a837923eb38798571be3173520e2e91b0bead99a | Bin 0 -> 363 bytes .../a93705903495f33a5e86780a5dccef92e9122dc4 | Bin 0 -> 1485 bytes .../a9bbeb51d4f3511caf5ac74bdeb4168b763ce512 | Bin 0 -> 567 bytes .../a9e27cf829dac4fa7237ca2bbab4c8e5765a024e | Bin 0 -> 215 bytes .../aa5c30d643b0172f7c365139f1b38ec0875bdcfb | Bin 0 -> 6145 bytes .../aae9a94084d480d4e54df0c0e12d34df3f88be17 | Bin 0 -> 391 bytes .../ab31d9c9b80da3de1f488c93eeb40c3544e1e8a0 | Bin 0 -> 1507 bytes .../ac4881560a670298325ac61ad5c6eeac10504786 | Bin 0 -> 20746 bytes .../ada05f65f2124f476f294945e484f710a0226e8f | Bin 0 -> 1354 bytes .../ae4dac4dde31a32a49e5a7acbde216b32f056e14 | Bin 0 -> 435 bytes .../ae5a6c2d290a84f6d6c320095ccd4aae9dd9235a | Bin 0 -> 1444 bytes .../b0b1ca76fc790645bd527d3154fa217cbfef6cdb | Bin 0 -> 1945 bytes .../b16afcfc579f9bf34448b8a68d0c22272bfc4b7e | Bin 0 -> 392 bytes .../b1ce3323beaccf5ca5124264e92d7f2d45f94e6d | Bin 0 -> 3076 bytes .../b26d6743480099927d3e066acf20d07f4e1499fa | Bin 0 -> 459 bytes .../b2d89284d0e4799703274a23e83353d3c0a08063 | Bin 0 -> 4096 bytes .../b3357c6317a8fa743b34c41e0cfe640df302b4b5 | Bin 0 -> 3285 bytes .../b3b2d13de3ba9c972db06b9daa94f17d0c8d5200 | Bin 0 -> 604 bytes .../b49873196c941a0384d44a6b7ec7d42f630fb33a | Bin 0 -> 3027 bytes .../b4b179e18ca58809359875a2c1e228f4d5cc7f0f | 1 + .../b4e9dda6a3b5b0578897441183b1418ac80a54fc | Bin 0 -> 558 bytes .../b5175694c2af4410e9a0e1a2d3881fe09de1ba1f | Bin 0 -> 3135 bytes .../b5186568c1e10706f4006b396c2989b3dd292736 | Bin 0 -> 36 bytes .../b5ee12339958835f8c9c6cb26e90259c5a1a5567 | Bin 0 -> 2886 bytes .../b604c75ed8a3f111f9af607e3e81a8bebd11e686 | Bin 0 -> 6484 bytes .../b64e16294c689d97e328081b6a4ffff70dc1fdda | Bin 0 -> 330 bytes .../b7ebc89222e479b92cdc2997e02ecadbd60ab1ad | Bin 0 -> 435 bytes .../b8a56e97e26996479c972552b1f3608d1e06b908 | 1 + .../b9f3ada49a9e3c99fd69639f6cbfd6544157b079 | 1 + .../ba6aa6070e0187f80bb5a04a98905b4970159953 | Bin 0 -> 32654 bytes .../bb297c41dedbcc0a2caccc17c6878c8c1edf5511 | Bin 0 -> 368 bytes .../bc33cae0478a84be6040974d5be00d0323a6293b | 1 + .../bd26afc94b62a9dd31a4abca22d2b946fe4f55ba | Bin 0 -> 1080 bytes .../bd3c33c4b75c360cd0f4637c89afc465b51719fb | Bin 0 -> 6114 bytes .../be202131d6bb1d70a43e81ff58a42afb1f4e4cca | Bin 0 -> 2949 bytes .../bf24158cc3fd12e9f078e50a9eca7d7ac0415003 | Bin 0 -> 640 bytes .../c134e5c32f7fb657fe69a2ffd1d714e86cb619b7 | Bin 0 -> 547 bytes .../c1b8a62637927ea2a1090dd5af60774da78da6ef | Bin 0 -> 603 bytes .../c1b91b5cbcb97112dcc382a3b3f88494f3494021 | 1 + .../c1b96d60c3eaa7281cc864c65544796e4649f108 | 1 + .../c24859d08159ff85fc00a79d344b52e49ed26383 | 1 + .../c253d8b904aff6b53ae4629eed27845134f1988e | Bin 0 -> 27 bytes .../c30f9ad57dee9c27f2ee6cf21293bf274c819e1e | Bin 0 -> 572 bytes .../c3cf4923fdf3dfc7438e7addf9a0fa71ddbb0a5e | 1 + .../c40cd2a794597bf21d59d56075ccf3c96fbee2de | Bin 0 -> 11997 bytes .../c42e8706558af06bc0a8e4ff653acf159128f0eb | Bin 0 -> 603 bytes .../c449b76482e686e566522238a07f09716032283f | 1 + .../c48049b2efee83a7506eb356be7249152c1199d6 | Bin 0 -> 134 bytes .../c5b6f94b0bd3eca903ba18d897d96a96546a04f8 | Bin 0 -> 6170 bytes .../c5da8fedfae19056df2d2679bfcdf3ff23f693a6 | 1 + .../c64a482d372279a28e65d08c1b0838382c1724eb | Bin 0 -> 196 bytes .../c72a30303009bc1753480d7f53b6fbd26c58739e | Bin 0 -> 3306 bytes .../c78eeb301c6c80702ad4b5535638f4399547892a | Bin 0 -> 583 bytes .../c79d133257b8c377ce3586f612aec8bcfce6e874 | Bin 0 -> 2886 bytes .../c7e7d25a65e20c40539962d6b4ce61b7a63e7931 | Bin 0 -> 1505 bytes .../c7fcb1cdb8cb893ab3cb711eca87f443a95a983f | Bin 0 -> 951 bytes .../c861a0e04a5a922390a0027670375e9bae84dc05 | Bin 0 -> 1563 bytes .../c8bd35b61bcc058f0edd8cd92d20c6fc154bca98 | Bin 0 -> 370 bytes .../c98cbd115824f71831bf2d64517a3fd489bcc686 | Bin 0 -> 1449 bytes .../c9c2cbad030bd185b389800bf2126ba5cb09c429 | Bin 0 -> 24555 bytes .../ca021af2a443e0ceefb582fb94edb610de17c41e | Bin 0 -> 808 bytes .../ca5c67003fa2759073146a95eb4ddf345250c267 | Bin 0 -> 745 bytes .../ca74ca2328f3a90826c0433d019da4ae3bfb9f34 | Bin 0 -> 1527 bytes .../ca74d98920599b4d17a939fff1871ae5a165407c | Bin 0 -> 358 bytes .../caac574db89f9e0853fbede0987094f69aa95171 | Bin 0 -> 1543 bytes .../cab8e0a4d57ab243919bcb2936eda200e8df00c3 | Bin 0 -> 1115 bytes .../cc0cdfb65f817620ead2f1c904646220bc04ff4e | Bin 0 -> 24514 bytes .../cc317cc0f57bd873c452aa058762dc4edeae2323 | Bin 0 -> 390 bytes .../ce4db1de190383dd8a1f29747e3693b8cbac637d | Bin 0 -> 586 bytes .../ce608e403ab894d7e4cd5e6d38867adcd5f1db18 | Bin 0 -> 363 bytes .../cea6a7909420ee1b90dd4f6aba5fb5bc83877699 | Bin 0 -> 363 bytes .../cf3fa9fabd83c705c3ec2d69ab4280dca86a1461 | Bin 0 -> 399 bytes .../cf9cdf36af4db03a15fed96e67c6d2fdebb1c0fa | Bin 0 -> 140 bytes .../d0e926b295c6707b82e75dab7d4c54420b590b0c | Bin 0 -> 349 bytes .../d12e0c521f2108d15789c462b060879a77e32ef3 | Bin 0 -> 651 bytes .../d34ad7b5d248e34a170fe10f10fa97a97c8adec3 | Bin 0 -> 3025 bytes .../d34d2b4e81afda80490ac4e2415289ef82aacbc8 | Bin 0 -> 761 bytes .../d3feb66206953454df2a61f69952ba2743adf7d0 | Bin 0 -> 425 bytes .../d44fbaca1dafc7d020cc12c8d157cf29193c833c | Bin 0 -> 1913 bytes .../d4711b40c708218a19dc5ce89471aa8f31b0725d | 1 + .../d481738026217019dbce1098a379026b65ce8823 | Bin 0 -> 12651 bytes .../d72dc02868f21b0d466349b27864e54b97a0a763 | Bin 0 -> 651 bytes .../d79bb1bcccb2c62348debffa46468cec1bd5d951 | Bin 0 -> 40 bytes .../d7c15ac21bbe1f251400c77abcdd365176ef05f6 | 1 + .../d7e1ef35870b4517a581d598af0078b8723e7509 | 1 + .../d85997b89170345c0c34748f6a160c141c59a2c0 | Bin 0 -> 1943 bytes .../d91fe5876f35497a5994deb37f37d8c1e2391fe2 | Bin 0 -> 24514 bytes .../d98de8197234702275353dedac5e6c5e16bfca1f | 1 + .../d9ab70eeacd8cde0b76eb31d2c39e3cd36ea8565 | Bin 0 -> 771 bytes .../d9b608e53edcc20136615c6dcd14a8d4c2ec2122 | 1 + .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../da8bdfb2777b1c1c36354b12fa64b8356e0928a0 | Bin 0 -> 2048 bytes .../db522609cbde5fbea488a2613277181d6e2ef391 | Bin 0 -> 24563 bytes .../dc9cae6ee03ea4763a59282bd4e6a9b75dae65a4 | Bin 0 -> 390 bytes .../dd00743f408cdbfe23e9cafddc5dd8439aa25df6 | Bin 0 -> 25188 bytes .../ddc7df37694e6398b37855345a6052cb0e9e7282 | Bin 0 -> 531 bytes .../de45be1170aefb3f94af6d517573befbdd87870e | Bin 0 -> 4096 bytes .../deb64d27abb5aaf2f4c4ed19142673555fb5a152 | Bin 0 -> 65536 bytes .../df99e4166ffa1e099b6d19ec58ccd94df6c052fb | Bin 0 -> 2913 bytes .../dfa49705f0f7b0028e4a7c8ee020cdd9315a65df | Bin 0 -> 6126 bytes .../dfb7853c29356b87269cf1262b919bc1fda7cc9c | Bin 0 -> 24503 bytes .../e05c176975de6c0fb06f670094dbad52c0c0d603 | Bin 0 -> 582 bytes .../e0674bdd79d0e31012634bba51414859e34242e0 | Bin 0 -> 184 bytes .../e1b6de8fc16286d604eebd5b3315e24e562a1c20 | Bin 0 -> 422 bytes .../e2851f0f6ab15e30bf09a6c80c7075309e573b88 | Bin 0 -> 8055 bytes .../e35c23a85acbe1ee9167517e50df3127bdee1595 | Bin 0 -> 178 bytes .../e3f3c5d92a91b62650c561450dc80b68901d8d94 | Bin 0 -> 4514 bytes .../e4206dd9d551ce427be72b88e42cf925ac23b6f3 | Bin 0 -> 24536 bytes .../e43e57cfa4ec461d0aa0bd96319abf73b3d19887 | 1 + .../e52d1a9ce6e7a243221a740f4fdb2798cd66c74f | Bin 0 -> 423 bytes .../e5af677d5fb32f2af26226ad7b884496c8e9d90f | Bin 0 -> 24520 bytes .../e626352eb794ac3d4c609ea2b34d9b2d2035f591 | Bin 0 -> 2921 bytes .../e66ab289ac06731aaf9906af585ef603c5f56fc2 | Bin 0 -> 124 bytes .../e708d7fb7f2ec0c34718482b0446f36c69f9fe8a | Bin 0 -> 11 bytes .../e73e54a61689f2e96488655331e36dc14aeccb40 | Bin 0 -> 372 bytes .../e82f861ed87572a2eb05bba728e39b5fc096681f | Bin 0 -> 747 bytes .../e83ba8a9a615527fa2afb50920c9e19325d9a993 | Bin 0 -> 2934 bytes .../e90633a7e12fdd453a50f4c0dd08d6c92a83fb21 | Bin 0 -> 2955 bytes .../e9a719441f8420ee9dd29a59552b609bb92b58d4 | Bin 0 -> 1024 bytes .../ea0c28db1748de26874f52ec1478ad4ef885ebae | Bin 0 -> 435 bytes .../ea150682f7f722e8e1a3ab38f56d17f9749ed8ea | Bin 0 -> 137 bytes .../eaa3cf3cd3876b3d432b5df55bfd143066a6dbf5 | 1 + .../eb061687a11d3d77218518510aea94cccaef2a83 | Bin 0 -> 719 bytes .../eb36ade95b72fdb9bb2b9fc8854b25a6fb857c54 | 1 + .../ebbc30f2a3a1d7178dd7e40846ea0093be1540fe | 1 + .../ed48a8cdbbba962d48b94885c982f456b36ec561 | Bin 0 -> 646 bytes .../ed85a1ab65ec971214200ddbaf41673e72471618 | 1 + .../ee02d2c7731e14e1e30fe1c271552bb1957faf09 | 1 + .../ee4e41412105f71c7e9b04899c8017faa9a86cd2 | 1 + .../ee6f291584c27e323e8408dbce9c51296e4c956c | Bin 0 -> 436 bytes .../ef5618c93b7c2a3d938e9a31862ca9fa740443cd | Bin 0 -> 1024 bytes .../ef60523a189acc1304b6233aae97a439810b4138 | Bin 0 -> 6146 bytes .../ef7889b55b765eabd365991b152894025b093cea | 1 + .../efb2457a467147d38f1d46b9930f4f6f2d9b343a | Bin 0 -> 36 bytes .../f04e95b933bc5a30a687b167253ccb51c4ed27b7 | Bin 0 -> 1024 bytes .../f098baa20d2626fa4d0cea23a3772fb9fd69681a | Bin 0 -> 4096 bytes .../f18d0dd6a15817150c45493c4c5b39ac31d6f606 | Bin 0 -> 1040 bytes .../f1984db83f720c69adc8fc3d7bbcd2c942011d94 | Bin 0 -> 409 bytes .../f1bf657fe43bb408474789ff25912b9b5b739d96 | 1 + .../f260eebedab90b7934efa0a023b43ef96b86e2ec | Bin 0 -> 65536 bytes .../f285659bb4eb46db3ab99454f90a765553e8645f | Bin 0 -> 303 bytes .../f2b94e69de6099adbe1b98599bd025515274384f | Bin 0 -> 772 bytes .../f2c2ab784cd082a7a4527016336af65e28d4915c | 1 + .../f2f3539e68c7f8ff0dfed95b1d13dcf679a2ded3 | Bin 0 -> 43 bytes .../f2f833389f3ef31aaebfac0a40407477e44182ef | Bin 0 -> 735 bytes .../f329a7e14d690937e1972ef297a95375e730206d | 1 + .../f34afc58b37e7e1fcb4cb60b90db069237735d53 | Bin 0 -> 2342 bytes .../f4373ca8c61f981d4fb9cdec220773589693afe3 | Bin 0 -> 203 bytes .../f4636445dc7450f2422b4a3255c335e809329772 | 2 + .../f48bb6d76bb808b40a1cc649971fa7f4e3c5505a | Bin 0 -> 1505 bytes .../f50b6f63a1dcccb30194b9c8be5d13ee25b0a912 | Bin 0 -> 49081 bytes .../f53558d5fd24525f849468c8efe1570a5ce8ac38 | Bin 0 -> 221 bytes .../f56c005e982f592426e132292a0237658503df72 | Bin 0 -> 49021 bytes .../f5870e0b97ed68cecffd4e7ca6c5275eedac1556 | Bin 0 -> 268 bytes .../f6b9ed043c7483c0463db2262971b325eb3abf41 | Bin 0 -> 316 bytes .../f730abe1cd787bcc72051239b192527a7fb629ca | Bin 0 -> 2995 bytes .../f7451ee72e3dd7186dc8bf31e94d04ef63fe0cb7 | Bin 0 -> 2871 bytes .../f79a87b224fdb402ef5967ead4b06513b038d477 | Bin 0 -> 665 bytes .../f7b5012dc86567713748abaa61e96019ecf5cfa6 | Bin 0 -> 1446 bytes .../f8b8b36d7b5470fe30dbe9361d301c42d8e9f23e | Bin 0 -> 3 bytes .../f93336126ac3cb6578506b0efa95b8c0a56b5f65 | Bin 0 -> 1537 bytes .../f946222bdd5a8d0ae53c1459636079cc64c6b50a | Bin 0 -> 27 bytes .../f9af94f86a0123324d93b78a9090084ae4b9b012 | Bin 0 -> 611 bytes .../fa822f723402426ef2fb43a444cb032ff01f8f2f | 1 + .../fbb26198f557c82c3a12301b945057f078da74e3 | 1 + .../fbbbd643f669136b0a9bbfc32dc266f9f6cec2d8 | Bin 0 -> 363 bytes .../fc12e07ad9dbc5674678b2a782e2e1ae6d04b15a | 1 + .../fca42e7b1ee5fb12f6b23d5a87c887e36a2a1278 | Bin 0 -> 2048 bytes .../fde065cd881d3025313422d2950e45362433d0e3 | 1 + .../fdf0b8aebab1d658ded860ae92421569361df1bf | Bin 0 -> 334 bytes .../fe6097b9a2e73eaf54f97481e6071e500b2445c6 | Bin 0 -> 641 bytes .../fe9f0cfda221cdc181bc8ea399f5cafaaf7b49c8 | Bin 0 -> 6117 bytes .../fefbc63f3e4aa05f755ed0f0fec119b6fd828650 | 1 + .../ff05c6b2a87c7730ed0b4a71cd9f92ec22e9ada7 | Bin 0 -> 1473 bytes .../ff0d9806ddb710588b6d609eace448b721b963e8 | Bin 0 -> 449 bytes .../ff3bf5f23b3544ba948c857ce01e255601edfc6d | Bin 0 -> 651 bytes .../ffc8123da53ee1d66791a3e11db9de29841f3f08 | 1 + .../ffe83398c4b7a3c8a6edcdff8ceefbbbac57f7c3 | 1 + .../00071cbe33190f484377c82cc93e4bfa25a8da7e | Bin 0 -> 555 bytes .../0055d7bbd9e05736160f8c99d7774318bfc74811 | Bin 0 -> 3784 bytes .../00564ec9294372aa1c602775dc653f11c23c0623 | Bin 0 -> 903 bytes .../006cd3ea13572155d1e2885ee9236ca569ed0d04 | Bin 0 -> 6599 bytes .../008c07b523aab1e4bf2f64e709e01b214167612b | Bin 0 -> 2101 bytes .../00aa0d206777f9fea82cd4c42dbf78240ab6068c | Bin 0 -> 934 bytes .../00b297bb74389b3817614e84c3bff2fedc35c659 | Bin 0 -> 428 bytes .../00bd3eaacd4fabee9fe524ec043a951460d066c7 | Bin 0 -> 1336 bytes .../00c0480b32af9bfb98d503c4983540b9e3eb4d84 | Bin 0 -> 2101 bytes .../00e9106982013e62eedf4e28822e30421eaafee5 | Bin 0 -> 364 bytes .../010d1329044c4a86ed1add072891077bc1cc614e | Bin 0 -> 955 bytes .../011722b1b7e0aa748a65ffcca98d04575f705e18 | Bin 0 -> 544 bytes .../014f789f1fa4d758ca29f134be6d0dd19fb5175c | Bin 0 -> 537 bytes .../016fa2b55c0e99f30efb71214c3fbe7b420e4e60 | Bin 0 -> 1176 bytes .../01ac600dd14a714a0a9104f18547e4b9ce5cb376 | Bin 0 -> 476 bytes .../01c2da74f7c6a7811dad23014e10b6c6006308e9 | Bin 0 -> 423 bytes .../01d839515c0ddbe75435693c8eb8b81d2219d397 | Bin 0 -> 424 bytes .../01f6cb2b04212e4303b8df4a5346ea6f62afce28 | Bin 0 -> 1052 bytes .../01fc3c55710d402a52255afd31372eda4f82b95f | Bin 0 -> 476 bytes .../021100017f61e57e43e1d4319b047a4c308ef909 | Bin 0 -> 476 bytes .../024e3782d4c6b6395a2ebf5849145eabd16fa72b | Bin 0 -> 3160 bytes .../0269861142976d8a811fa359872e0114d330834c | Bin 0 -> 696 bytes .../027353cbc08b9166a48e660426da49a4516cf91a | Bin 0 -> 830 bytes .../028b6a1da531f50ec0d70a039dadd3b489bf745b | Bin 0 -> 1341 bytes .../02b635d45713f0e070732b7d63f170642dc26c65 | Bin 0 -> 934 bytes .../02bb7a45a85409a496fda75fb52efa4c7cf51352 | Bin 0 -> 536 bytes .../02ee2745e150b327355c81e508dae28c2f0744e8 | Bin 0 -> 719 bytes .../031de5d10830cdb813e3ada4b005ffdb7d9ce678 | Bin 0 -> 3247 bytes .../038b0ba0c6de4389740f7452b513be7bf711766f | Bin 0 -> 1044 bytes .../03ab752143df4690fc0611f04d5a843298884eb4 | Bin 0 -> 2101 bytes .../03aeb438919c57ba52e436395f3cb33b18152ec8 | Bin 0 -> 2251 bytes .../03f7982b5dc47be915cc99b747e814996f2a1937 | Bin 0 -> 2251 bytes .../0410a8099aa7b977a1e88570d78a12891cfbe383 | Bin 0 -> 751 bytes .../0425278c0253652445456c8c543c90be2d73eb86 | Bin 0 -> 571 bytes .../0426976bbdce6a642e9ead9120777cfe253f6ea9 | Bin 0 -> 519 bytes .../0471c09d1aa180aaf0b1c3780c7ed6f171524b75 | Bin 0 -> 3360 bytes .../04dfa973ab9a6f30babe08b2d62eeed7c1ff1e56 | Bin 0 -> 3154 bytes .../04fb6b301c5c19a54e4d372a7c17230ef236e381 | Bin 0 -> 624 bytes .../050ce342c2284561c296fac3dacd4894e3f80114 | Bin 0 -> 860 bytes .../050da9c3acd2b913b851fcda25477d46458da943 | Bin 0 -> 860 bytes .../0515d43171ab96ee00ad3c9e834f71b1c2414a27 | Bin 0 -> 903 bytes .../052f800e283abf04a341be10098c200961becde0 | Bin 0 -> 860 bytes .../05313f8104b23a0ac23950bbe516b2105c5f83a6 | Bin 0 -> 6600 bytes .../054b73a11025b29bc17deea05194cf3aa733ce05 | Bin 0 -> 16645 bytes .../05812834cf1fa0ab0ee21ee822a1161fdacc35b1 | Bin 0 -> 860 bytes .../05aa473f84c58446663b39773cb74aa535c56bbb | Bin 0 -> 3160 bytes .../05b2f100006a7c82791253aed0633b69c90cda29 | Bin 0 -> 692 bytes .../05c4401585d9e5bc74037556e079d0cb5b97f0bb | Bin 0 -> 1796 bytes .../05d156122e7f1517fa9ef5c27b7b5a53f9f40844 | Bin 0 -> 955 bytes .../05e4189f242cf7683f1c9d7caec8c8ca62b8b313 | Bin 0 -> 1168 bytes .../06115f4347ef3925b7323848365843e1f8fdca15 | Bin 0 -> 2952 bytes .../06126bda39767d15655656a5be5adb8e1ad7fc32 | Bin 0 -> 685 bytes .../0634e8a72c29fd1ae0f63be83d5b88615b46a627 | Bin 0 -> 6606 bytes .../06407388cd2f284f9980334aa276b7668dcc05cf | Bin 0 -> 536 bytes .../06653fe826b3c006b1df30c57101c77994e23cbc | Bin 0 -> 9360 bytes .../069960193a4a5abe81920b70ed19779c65f247ed | Bin 0 -> 1344 bytes .../06af69415434b0b8ae942ef65392c68c89f748e2 | Bin 0 -> 3154 bytes .../06e9f030708433ca76ddf2325a1f910f10e48b6c | Bin 0 -> 537 bytes .../07041a06b9dfa102679c15f526fa3ec2c855992a | Bin 0 -> 475 bytes .../070b4f227c04af80e3be8a1413197609eb34a07e | Bin 0 -> 539 bytes .../071ad27aac781ebb8f1b83e11e5c1a19e86c092b | Bin 0 -> 2252 bytes .../0725342299f60f275abde876b391d647ff8bd8e7 | Bin 0 -> 751 bytes .../07284afb30d89142b99a1a063259ab37fadde735 | Bin 0 -> 1116 bytes .../0739254334eb613133f731fb19dd6614df81ec23 | Bin 0 -> 751 bytes .../077635fdd48db7f1d040e715e01a8f3f486c5266 | Bin 0 -> 544 bytes .../0785fa8536c441e41ca75b80cb17993ed3212f60 | Bin 0 -> 3474 bytes .../0791a9ec927fde528c5c34ea8417569dba92e3a8 | Bin 0 -> 530 bytes .../080d03b666fea6bb72714924bc7e8a95d2e08607 | Bin 0 -> 1168 bytes .../0836cebdfc78a963ae652c6bb6e36edbf26e2839 | Bin 0 -> 2281 bytes .../084788cad73fb8ef97831e1a091fb45d95ba9e63 | Bin 0 -> 684 bytes .../088c484282b744e96efac0ee912c43541b510729 | Bin 0 -> 2331 bytes .../08939ba90d0ff71c03ea041e0950e1bef3a74133 | Bin 0 -> 2339 bytes .../089e6a1f2a7776ea7987277333a8896f42dffb02 | Bin 0 -> 1176 bytes .../08ac214d762e30f5cbe6743ae8e628ebe5987783 | Bin 0 -> 718 bytes .../08bbf8e0288523f28a84e714fcca3074323300a6 | Bin 0 -> 537 bytes .../08d9fb79414e4640de95c9d84f50e583aec89e43 | Bin 0 -> 539 bytes .../091ef240649c1b51b706d0a713f27798a65a001a | Bin 0 -> 1844 bytes .../0940f9b2dcd68c09ee38fcd9c20ac1cb12100ab7 | Bin 0 -> 423 bytes .../097e50c176eea06d9b0d6110bb725b3a670abe1e | Bin 0 -> 817 bytes .../0984e3a92016728a119be1c15f212bec562b47c8 | Bin 0 -> 573 bytes .../098de96a6091fe6909008b2c1e8b72992ed4d904 | Bin 0 -> 112 bytes .../09c2c6de42a078df350a8c39cbdd69ca3396c68f | Bin 0 -> 878 bytes .../0a0d1c4395d930717d522adb8bc95eb8e1f14656 | Bin 0 -> 1044 bytes .../0a273c18de0cedfcaa05e3118652e6dadd76b73f | Bin 0 -> 687 bytes .../0aa3d8ee546d8a3c5f884548b373af99c78ef2c6 | Bin 0 -> 519 bytes .../0aa4da40af53759de113f18c8907e66203974fa6 | Bin 0 -> 1844 bytes .../0aacb9ed0e568023762c3e6ed2957d8775abc110 | Bin 0 -> 532 bytes .../0ab0b132d7b360bf726658880029f6893505babc | Bin 0 -> 2331 bytes .../0adec53ab52b487ab7134e1061b3a51d86652775 | Bin 0 -> 545 bytes .../0aed6e2c5c312df21efd08af1c2803d943922ff0 | Bin 0 -> 544 bytes .../0b28799637c15ba18f072c7585409666638257b9 | Bin 0 -> 364 bytes .../0b38ec03277536379f3331f75f84d11c55869176 | Bin 0 -> 1336 bytes .../0b5464547ac1a859fcc732717c1e20fed578e72d | Bin 0 -> 1336 bytes .../0b7edf35c5379f37447fa6b8f1f2c7c07855d256 | Bin 0 -> 146 bytes .../0b99c96d766c7f77c123c559589cb722269907a5 | Bin 0 -> 544 bytes .../0bad9239300f9850395f116033a71f7c33113d2d | Bin 0 -> 13194 bytes .../0bb44140f5bfe603b4f9e0337b29a53d08a17e3f | Bin 0 -> 733 bytes .../0bdd7ffc54fe20b7b4f7e37695cbb5ba41a48369 | Bin 0 -> 690 bytes .../0bec615b63fe28e9cb00f7fad81d2becb1d4060b | Bin 0 -> 1751 bytes .../0c2332b61bef176fcce97ce507e401e9adb8b8df | Bin 0 -> 432 bytes .../0c26c60550a2bd5bb9a9c4653e869e4824ef8aae | Bin 0 -> 424 bytes .../0c2cfdab5b7ba33e7148114912a7933cd2fa6055 | Bin 0 -> 601 bytes .../0c3286f57d1269782c700c7db8f3d387c1274790 | Bin 0 -> 982 bytes .../0c6380d83c726c7b101e14fa6140e7264ec7506c | Bin 0 -> 1028 bytes .../0c774846e3a8a2499f2ada027b79733929cd73a3 | Bin 0 -> 955 bytes .../0c896ec803f62e067e6b0b7b246c4d032105b907 | Bin 0 -> 475 bytes .../0cc045b6093b3c424934839e64f66ae7c5cdfba6 | Bin 0 -> 207 bytes .../0cc5a9466c665e51c553b452cb4f6d549fceb254 | Bin 0 -> 359 bytes .../0d0b3d362a4dcca050d82ba8078eef03944a7384 | Bin 0 -> 1044 bytes .../0d3142fd416ec38c2a1aa50220e36eb16f3b73a6 | Bin 0 -> 13 bytes .../0d391a72b3647fa12a9a5a46d1d46230a4d89211 | Bin 0 -> 3154 bytes .../0d4554697c8e3dce978cb856fc210e5c44f786c0 | 0 .../0d645e2f14d7430f23ead9377d9ec43078c1bf7d | Bin 0 -> 2331 bytes .../0d7380461580c2a040474971e50c0fe3f47a3893 | Bin 0 -> 687 bytes .../0d7a21640db897063c63284aabaee63552e4049f | Bin 0 -> 1465 bytes .../0de78ab58393c50ff547d9e3d8dbc92efb15d70a | Bin 0 -> 1356 bytes .../0e45603adef858a3a62d3a16a4f9b29bfeb38965 | Bin 0 -> 34 bytes .../0e96963d11cb59d2bcf0d611034eb7eba9840414 | Bin 0 -> 3154 bytes .../0e9f53a4f2b6dc8505e113cf99f9bd103b73e1c2 | Bin 0 -> 1906 bytes .../0ea7897c36d8b4f43d1282a6afb5452a8c418461 | Bin 0 -> 675 bytes .../0ebbe86099da29775d26e24e1a2cea026f1db4e9 | Bin 0 -> 2101 bytes .../0ec51740241b7a866ea5228e0059c34feddddb2a | Bin 0 -> 6599 bytes .../0ee03d621da79cecd61333da3f82fdb270327c58 | Bin 0 -> 728 bytes .../0f01f0d717fc734901af38f0d0fed914b6bf0eca | Bin 0 -> 6599 bytes .../0f66d07b05b1320c4c10508c06376070baff23cd | Bin 0 -> 860 bytes .../0f7fb1bd646820e4eed7c3eb69593722b8dbadee | Bin 0 -> 3154 bytes .../0fd3a99d3cbd4fa3a586a97deab1ab6f6ca7f812 | Bin 0 -> 541 bytes .../0ff55c5e2230904f98706641c67e0c89a1ff7bee | Bin 0 -> 685 bytes .../0ff7ca66cc7754e1d506c4a4e9e83fa8ea38ca59 | Bin 0 -> 955 bytes .../0ffb27ffcf54d21d23c6cef43eff881e29d30ece | Bin 0 -> 2844 bytes .../0ffc89447ce0848ac7505621e5484d01dfabc2e3 | 0 .../1006f861e027d53d7a730496e627c5b535b51210 | Bin 0 -> 768 bytes .../102d86febaf49788d10912fe05b4f7a3655656dc | Bin 0 -> 1168 bytes .../103db7a915dd4197eb81b894157337b538de90a5 | Bin 0 -> 696 bytes .../105bf103bb63867a6fe03ab3d6bb9492a336cf0d | 0 .../10638f274f6773468397cdaa816ab001cf7f9a69 | Bin 0 -> 475 bytes .../10828b25f4fdc42023980690ed199c90929ac41b | Bin 0 -> 575 bytes .../10ae19aad866d132535c3c6cd463fa80ae982610 | Bin 0 -> 696 bytes .../10bd217b6eb9ce1a8dea39f331f328d289c0f237 | Bin 0 -> 554 bytes .../10c91def9466376504fc44b5e008b4dacefd3daf | Bin 0 -> 431 bytes .../10d8f9f621a9746715443531a062c4af2d7f52a3 | Bin 0 -> 3197 bytes .../10e8f74982bb0f6debb69687ce1b2ecc60eaa4e7 | Bin 0 -> 69 bytes .../110e0171699c390899bcb17acafb77de05a36669 | Bin 0 -> 647 bytes .../1111c6e8a5296457f88c404603bd13703264782f | Bin 0 -> 537 bytes .../1141f22ef6c553bcfef52cd8241f795a31dcaca8 | Bin 0 -> 296 bytes .../1147a7457381d308f905ad307203ae30f84602e3 | Bin 0 -> 1337 bytes .../114c2f4d8e373a94b7252a985d32e587609d9afb | Bin 0 -> 860 bytes .../119c4d32cd7bc87b944a98e840d8da923b399394 | Bin 0 -> 1335 bytes .../11a2095398a16cb79a680af54720a5bcacb3d52d | Bin 0 -> 1336 bytes .../11cf0fad4183278b1e5c8085920343a681169fc8 | Bin 0 -> 3160 bytes .../11dfef89eff746729956a3b3c33bb375978e6238 | Bin 0 -> 478 bytes .../11e0aeef79b2367cb5804a006d85c2b886d23b4a | Bin 0 -> 476 bytes .../11feea2afbc9a332a03553ebe5f588ce87ac145e | Bin 0 -> 1044 bytes .../120456022a86e0885aee95109670427014551022 | Bin 0 -> 53 bytes .../120a3cfb04b41e631b9f7321e4902fe203128fd9 | Bin 0 -> 3154 bytes .../121b3513f5e8ac82ff3feaf863005c41b8588957 | Bin 0 -> 563 bytes .../125f8a2bb1cc6626e9d745a19debea0f410363c8 | Bin 0 -> 3122 bytes .../1294980efbf8355868e806962f2534c6c9805ae0 | Bin 0 -> 696 bytes .../12baa1ef48de9ae38d3fab7744b2162d910043df | Bin 0 -> 13326 bytes .../12e49fb128e486c98d3d40c917f1ffb265d9c285 | Bin 0 -> 182 bytes .../12fb8b5a4c2d4677873c87afdfa21fa9d4ee0c11 | Bin 0 -> 1044 bytes .../12febecfbb8582ca8f18d44bb7ebd3fd29dc7169 | Bin 0 -> 1546 bytes .../130a1df2fc7bda5ee9b91cde0c17d789353ea034 | Bin 0 -> 1697 bytes .../13420ff898a8a69abc3c22a28f6f7349c523f273 | Bin 0 -> 935 bytes .../134a9b1ea276d19871a96977518fabbdca335438 | 1 + .../135bd6fed89a5572e67d2be28ac6847580a5b32f | Bin 0 -> 44 bytes .../136818520bd63085924780081111618c5f139316 | Bin 0 -> 536 bytes .../1371f3327fdc4982111c302fa45f296567e9f9c1 | Bin 0 -> 177 bytes .../138aaaf28988badaa0628f8227466fc463322a43 | Bin 0 -> 2251 bytes .../13b7c1bd8e36e238ebbb57fe7ff5e2baf6a3a7d8 | Bin 0 -> 1288 bytes .../13be810b632eadc831ea70abf0edc0ad95930399 | Bin 0 -> 6629 bytes .../140b8163afe4af76c0eedeb65b7984e326b5cb44 | Bin 0 -> 571 bytes .../1414d50ded016ab3291f63f5970df88e26055dd3 | Bin 0 -> 530 bytes .../141802a67af39055d1b86bfc53fa2aece8b8880e | Bin 0 -> 724 bytes .../141a69cc91aec78fa8e5da96495e3eeedfac335a | Bin 0 -> 1336 bytes .../141c3ba1b01e27d63bae0094d9de61890bd7c893 | Bin 0 -> 685 bytes .../1423304462cbec49377d06e2e97a9a4e4c42b777 | Bin 0 -> 124 bytes .../14323d64a538caa5b77425a73b612e895e499a42 | Bin 0 -> 2835 bytes .../145695921679963739e797bd05eb906ff0793efc | Bin 0 -> 99 bytes .../14a38df2a3713a5b638efbe84fb2227253879422 | Bin 0 -> 544 bytes .../14a61b7f873c7795ed0b4be6d2b95972559c52fa | Bin 0 -> 1168 bytes .../14b029cfa9528cc56c3d581ca95d0639dc9ef618 | Bin 0 -> 3533 bytes .../14d595176b036e7dff11616a55388eedd9bd0379 | Bin 0 -> 113 bytes .../14ecbac7da083efe53e637ec6d9c3fa044730865 | Bin 0 -> 696 bytes .../14f3ae181b860435bf2df4022dca21f35f719197 | Bin 0 -> 6735 bytes .../14f582eaccdeeeed8eeb8b4e660649cd6ea82bbc | Bin 0 -> 692 bytes .../1539da5fc1e3ea8bf41fa73ab838942b9c839c72 | Bin 0 -> 864 bytes .../153ad527d49b45a245e35be057bf7d1cbf72920f | Bin 0 -> 52 bytes .../154516e4e49cb38de6cb7822d966132c4bb44d5a | Bin 0 -> 3155 bytes .../154575db547ed2ecb7addbd296263c3a0dff9c48 | Bin 0 -> 1040 bytes .../154d5cfcca05c43f64ff2163c3e84ee4c503b358 | Bin 0 -> 981 bytes .../15da325dba8be86e1e1223df49c2a81527003cb9 | Bin 0 -> 1868 bytes .../15f419436400637cc395518db6f432a05ff4ab1c | Bin 0 -> 2251 bytes .../162db6ca0a23ed23721bdcb30d981ac882334d63 | Bin 0 -> 936 bytes .../165eb9f3d21dc0ef3d13448bfe756be0ee42b270 | Bin 0 -> 2836 bytes .../1672c2f40babff7dc598f0bbcb07110e2d1d385e | Bin 0 -> 784 bytes .../16a017147ccf720b47accfc671aaf34e567d17f4 | Bin 0 -> 2185 bytes .../170e23f7265930ba596bfac8b8f525ce7dc8c716 | Bin 0 -> 541 bytes .../171f5c85e320cc71aad49dca2ffe5a5dc7378f5b | Bin 0 -> 856 bytes .../174a5d1967b663c745d76a638a33c21738061c5e | Bin 0 -> 519 bytes .../17549168685b6888162fdd03058ee9cb520c5501 | Bin 0 -> 544 bytes .../176a4588598d891838781e3c5b5ff6cd43022c58 | Bin 0 -> 712 bytes .../1795e458c97fa8fd321b01833e894c299a79b612 | Bin 0 -> 815 bytes .../17a8e79c5be01dd6dfbc269db7f62f64fb09cec0 | Bin 0 -> 706 bytes .../17b3099f83dc658d1598c1b144f669737cb10348 | Bin 0 -> 519 bytes .../17b49adf0ed511a0d42aaf11473a6d9aa2d3c367 | Bin 0 -> 563 bytes .../181014feb98e71e25daff5f3682566ecde7ec49a | Bin 0 -> 955 bytes .../182a0b170f80d943077660b49460e584b627d712 | Bin 0 -> 475 bytes .../182beb2b747cd1d82e2af1123fc95115959e4dea | Bin 0 -> 2101 bytes .../18333dd73c2810d58c92c16605e6a5344db3c2d2 | Bin 0 -> 16645 bytes .../183f8c9678683b9f5a77f634922356b0a6dcafd5 | Bin 0 -> 2101 bytes .../1843bb57177497722ebd82a3120b240af8f74456 | Bin 0 -> 698 bytes .../188aaeb811968701ecf843111a136917bc44b7fa | Bin 0 -> 3154 bytes .../18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 | Bin 0 -> 874 bytes .../18c09d12f53dbf7d89d946e253c0abd701e536a9 | Bin 0 -> 3154 bytes .../18e83c26bbb04db356bb462fe68bd28460e3ff25 | Bin 0 -> 344 bytes .../18f029907549430e8e8814f23a15315bb25d981e | Bin 0 -> 1312 bytes .../19228c057075554683cfe59bd592db6df4b705e8 | Bin 0 -> 498 bytes .../194f625bbbaafe2a3da24cb1125e9c3ba3ba6764 | Bin 0 -> 696 bytes .../197fe23844923e3becc3596d36e0f950bdfa73cd | Bin 0 -> 601 bytes .../198d44c9348d06dabc6bc37dad3081c36a99a08b | Bin 0 -> 544 bytes .../19b265a4f07f21b9de142dd023a9ce0824b4d525 | Bin 0 -> 544 bytes .../19d68e2b5172a1523357f950296066ebc2971dd8 | Bin 0 -> 934 bytes .../19ef22ab5dded08db55dbeaa1973250c91603fae | Bin 0 -> 544 bytes .../1a16c971b875ea1b815c33ea5d44aa584d85c603 | Bin 0 -> 1374 bytes .../1a19878d1d28e8546c8cf2091720cc18b29c3829 | Bin 0 -> 687 bytes .../1a2aff65bee0d53fb6a58175790eba98ce85da22 | Bin 0 -> 7 bytes .../1af1e289adc4d7492f75b7bb42ce2fe49f8a6ad1 | Bin 0 -> 633 bytes .../1b1817890e1672e9dd69d28b55fe34502f99a8fd | Bin 0 -> 860 bytes .../1b28c586d421bf4487a171963ebcd3d0cfd4561c | Bin 0 -> 6599 bytes .../1b37b33f4cc5716461bee441a5cda466b6468f88 | Bin 0 -> 1175 bytes .../1b3f40905a112a005303a805c1054696cc14dd46 | Bin 0 -> 484 bytes .../1b458a091ed6d594bf9881ec558792db23857f8e | Bin 0 -> 868 bytes .../1b69391c069dedb42a8a98fb1bb8a91a1b02449c | Bin 0 -> 934 bytes .../1b940ccde9e898dde8dee41d21e581fe5bcb3c64 | Bin 0 -> 1088 bytes .../1bf29946fa34035f2744f255a581b3730462775a | Bin 0 -> 6599 bytes .../1c093cfb87fb2754a55e298ebc3a2e17a6e9726e | Bin 0 -> 544 bytes .../1c14ac122c0ae4a67c9ef6e9b4e848483f895ef1 | Bin 0 -> 6616 bytes .../1c2498bebe4af804c6853e391601e740ce623862 | Bin 0 -> 13998 bytes .../1c33c53e602a10fd1897c7f0de7b22b6ddcd4f7f | Bin 0 -> 221 bytes .../1c3d9a1f12861383e57e366d1e90ea3999287164 | Bin 0 -> 2434 bytes .../1c76bd4273acec58bfd4db4df7975eab6e7b1719 | Bin 0 -> 955 bytes .../1c8cd48dcea9607877b7f1c15bfd3a8f096559f6 | Bin 0 -> 696 bytes .../1cf9d47b461dd71cd9c02a8ce873546e27f96321 | Bin 0 -> 475 bytes .../1d92f5bfe0270ab938b478dcc770f6f9843cc92a | 1 + .../1db34dc49df12fa5dfa8226358a89f93e2e11e9d | Bin 0 -> 16645 bytes .../1dcf1eb8208ae1fdb924815ef0a58c0a73469442 | Bin 0 -> 1868 bytes .../1e14ed953f0c7e39fcf8ca36ca775c17f53799c3 | 0 .../1e51b1df99770c8f457cca8cc79d7ede2e40827e | Bin 0 -> 1335 bytes .../1e6a17655b609fa0e9b40cc60e67254bd99128eb | Bin 0 -> 2837 bytes .../1e6dcf1a821fb30297e202f8dabe7797066d57cb | Bin 0 -> 530 bytes .../1ea83947633165b8760bc4bf4d80ed75dca2a2a1 | Bin 0 -> 1374 bytes .../1eb3bd69bddbef1101b64102b4b0faa8466aaff3 | Bin 0 -> 1044 bytes .../1eb7621a57c79c965afb2ff7fdfae526acbd51c5 | Bin 0 -> 1844 bytes .../1ec5ea10a3d57074bfb334268908c3c74512b161 | Bin 0 -> 1335 bytes .../1eda0fa0f934d30321d13a0c396c52f19420c1d0 | Bin 0 -> 1199 bytes .../1eeaff74f0ecc2d4f84fb878c896f1300bbcdc3b | Bin 0 -> 897 bytes .../1ef4d3c7b8ff0c1baa4cf3038e46f27d0fc04988 | Bin 0 -> 2331 bytes .../1f6ff348eee752357b13d30f16a1836318d2b821 | Bin 0 -> 16645 bytes .../1f83f7bc387aa7b303d5c76d968fec4cd22c3acd | 0 .../1fbff08d3c2e047f3230335e9fd417516e2b04ba | Bin 0 -> 773 bytes .../201029fd3d1ec54ee754f527a982f733f9ca6cad | Bin 0 -> 2265 bytes .../20369530488a82d9401b88cecbe4f452eaa5a787 | Bin 0 -> 981 bytes .../2054de61e618a7fed08e99cf110c9e7a8299fc3d | Bin 0 -> 2251 bytes .../209cbffa376c13b3f0b4fb0c4c82844e312d5ba0 | Bin 0 -> 831 bytes .../20ca23c76c3cf41cb03c5abefa3e0132a03a4e51 | Bin 0 -> 544 bytes .../211409fc97f3a524620ac07f12e50f9f2b0fd10e | Bin 0 -> 552 bytes .../211ae5ada385451741696b47b86ff8674a8a7f9e | Bin 0 -> 621 bytes .../213c0db54109bab83f9b1320851c51f98d013234 | Bin 0 -> 2104 bytes .../21509b6a97a8ada696fb8a3f8d8e693a57bab655 | Bin 0 -> 1336 bytes .../216131af6426b00db9bbd2059f6b7585200b4fd7 | Bin 0 -> 6600 bytes .../216b77a3718d7cafbfb04cfccab8a256c6fb844a | Bin 0 -> 544 bytes .../2184025175502a407dc79f5ff391971d721d2daf | Bin 0 -> 687 bytes .../21e10308553d8d955369fd1ecf5becad924a5255 | Bin 0 -> 112 bytes .../21f79a63ff03fe52e3852a495e5d690a842b000b | Bin 0 -> 50 bytes .../21f8080b3c77593517c1147c23a21b2ecd012ee8 | Bin 0 -> 1335 bytes .../2227f323702493299c94088072489e780f82de5c | Bin 0 -> 544 bytes .../222b4aec0bb5decf67ad247cf0ec61f5a7da4670 | Bin 0 -> 428 bytes .../222d0aa90f89ade90ede1c603f476c3668d5c700 | Bin 0 -> 3724 bytes .../22337305a609ca7b0c89beaffc185b26999f97ba | Bin 0 -> 955 bytes .../223c384291d9c5e0efa65f0c2590ed77005338b0 | Bin 0 -> 521 bytes .../224f0e8804f38443b6db6221dcd9a318c6895162 | Bin 0 -> 2251 bytes .../2253ca39ba7a616201239001282186957d3d6302 | Bin 0 -> 2101 bytes .../225640aa4c4c9c07efb846d1e3a899eafa3f5fd5 | Bin 0 -> 537 bytes .../2270fce0fe6d9f6f6d1e51a7dbf377dd0db277a6 | Bin 0 -> 3315 bytes .../22765ef9ab4864b01c6c97f00292678af570937c | Bin 0 -> 459 bytes .../228f0fc2f6ebef5b752289bebf3c43f7769bee14 | 0 .../2298f0465b498aa5f397076e69dafc326859a9ac | Bin 0 -> 780 bytes .../22a79c24f2c99f2598f4338fc936227b912f6c8f | Bin 0 -> 1335 bytes .../22a8534adb7a277f0c281cd17a2e632f756cfb41 | Bin 0 -> 694 bytes .../22b27720ba0410cfd580a404de2c1c168817d0cf | Bin 0 -> 934 bytes .../22c9ef74760d14162393993e91e41188d6b2d857 | Bin 0 -> 903 bytes .../22cae63d817a784b8b88ac75de1f8544a7df731b | Bin 0 -> 112 bytes .../22e2d9ea68472124396ad6f84903072d19b2422f | Bin 0 -> 1044 bytes .../22ffba547c0342d412837bb27cdc2ac516b5b6dc | Bin 0 -> 1778 bytes .../231cbf62ba51404b850bdbbeda2d69e91f1a9b40 | Bin 0 -> 687 bytes .../231ff465cab0ca58a1623f1ad8117f0a28edf1a0 | Bin 0 -> 9351 bytes .../2324f437d62c05cfa4d5c1cf6d48ed4686a3c8cc | Bin 0 -> 519 bytes .../23363aa38c098a2e178b99faeb7ba645e6dd3eb7 | Bin 0 -> 478 bytes .../23364c2e120d0aba88e57e87e17cd6b250147931 | Bin 0 -> 6637 bytes .../233d284cee061204e4082fa34e9813eebb28d22c | Bin 0 -> 544 bytes .../234563e2eca970c4be23379a80a2da552c43e356 | Bin 0 -> 16645 bytes .../23ab1f6a342477a8dd83c117dbfbdea0df1638ed | Bin 0 -> 3108 bytes .../23d569d4e79fa8ffe7e63b2113d20d208d2a4727 | Bin 0 -> 702 bytes .../23d5d873d91f681aad9b36d9f89aec995610d394 | Bin 0 -> 184 bytes .../23ecc4b75e83bdb7f46856961ab7dbad659a83b5 | Bin 0 -> 860 bytes .../24032cc6b7a36245cee0cc243b563f6d2d834ca8 | Bin 0 -> 3154 bytes .../2431994e49cfbc09858c3723024a71348cd944c9 | Bin 0 -> 3208 bytes .../24367ec942c111aa7df6387ee160aa56ce3cd395 | Bin 0 -> 4001 bytes .../2461511fda94ed9b4989b60f6eedf23a053f0061 | Bin 0 -> 428 bytes .../247cd277267ba1478413b17998ed45fb2c4be9fc | Bin 0 -> 544 bytes .../2488f7b0d46ba83bc224903cd4364e50559e8d86 | Bin 0 -> 11927 bytes .../248bca85824864305865923052d8db04cb805d76 | Bin 0 -> 537 bytes .../24afe9d43d1337d271ffc1417af0158e3e49a810 | Bin 0 -> 478 bytes .../24c95a6f842da0558659bca8d4d2c997e04f2189 | Bin 0 -> 774 bytes .../24daadcb4c57102c6045a6aec88d96ff3e17313c | Bin 0 -> 717 bytes .../251a94768a2bbee217692572867144affc89e1c5 | Bin 0 -> 2309 bytes .../252f2d1b8dd2bbbb3a12ba16672a77ae84f4c0cb | Bin 0 -> 539 bytes .../2591edb5c1f6db821a45969f00589fe2d53f83ff | Bin 0 -> 5119 bytes .../25ad19d88cc25c531597aae66048e1f221b78c72 | Bin 0 -> 4007 bytes .../25bdf41c830f36e175db2c8cb8bfe7a26420c991 | Bin 0 -> 478 bytes .../25c34c3ab5a8e581d897f65ea125643d27fc151e | Bin 0 -> 423 bytes .../2669f9d94fa5df9082975bfa153a6d9e6de41310 | Bin 0 -> 936 bytes .../266de411bfa71713f8cccf06eb4186c3e5df73f1 | Bin 0 -> 3154 bytes .../266f260ee767c93a00cab040c148c196f7927252 | Bin 0 -> 1044 bytes .../267b9a3e8bb875b0dbfbaa18be6f86fa0841d78e | Bin 0 -> 982 bytes .../268791cd795fe0e1d47a28d2bcf1ae12b4bddc42 | Bin 0 -> 955 bytes .../268861ef7e8b3cd17bfdfd6bfc7122322ca9e879 | Bin 0 -> 566 bytes .../268c433413e52aebcb8fa4f22d12a231de89ba30 | Bin 0 -> 1787 bytes .../2690bce479f37231edf93ccf793bd1f87043f475 | Bin 0 -> 532 bytes .../2696e829c0ba78163cde564f8406854dd182a70b | Bin 0 -> 860 bytes .../26cfab3fd186d0646eb904da2b04f755eac5c51a | Bin 0 -> 691 bytes .../271b1120b25b9b8b9d1f13e4cdb157fc8baf3fb2 | Bin 0 -> 768 bytes .../273101eca8e646fa8faabbe240bc2bffd7150b92 | Bin 0 -> 785 bytes .../27ccb602b98c426617c1bc6aae54e38d204bc115 | Bin 0 -> 754 bytes .../27cf7bafaa4728a4b653c94752aa493dd387031f | Bin 0 -> 3418 bytes .../283d130e63cade943fad64a8b4f4b4fac9bbfaf2 | Bin 0 -> 62 bytes .../2889d08f0ed4642e46df3c5a6282469f2d0fab4e | Bin 0 -> 16645 bytes .../28960c98f39a369dc294aad058124cf029ec9ddf | Bin 0 -> 880 bytes .../289914adcb9f9f57c599efc794817008887085c6 | Bin 0 -> 112 bytes .../28a199310c12407b80c92386a48ad20ac4c4939b | Bin 0 -> 1168 bytes .../28ac4801a0f09bd47b210df0d001ccde82c0c178 | Bin 0 -> 539 bytes .../28d791024aac4232138e3a42447433a81b04dd6e | 0 .../28dd43279e987ba2fe2d9a2d7562035d2aec2372 | Bin 0 -> 6631 bytes .../28e6f61662d9e396b58eae9f08d9e80a1a126646 | Bin 0 -> 3883 bytes .../28e78d2629b53fc5fb0e40e08bd4f8f279707d90 | 0 .../28e7f4ba2607f33430bf74986e1a008f3507348b | Bin 0 -> 1539 bytes .../28ef6c86ca9b7d5f520271ce88b8564f1950dc68 | Bin 0 -> 2331 bytes .../296702ef52ea7757c552cb4666b3a582b0ad874e | Bin 0 -> 542 bytes .../297fb8963f16f26493cd047549622636757cc3b7 | Bin 0 -> 520 bytes .../29da3ff5f1a205b416374ee4835dc07becc93e4f | Bin 0 -> 544 bytes .../29e724648601bd9b2fb04e47b76455e153e74bd5 | Bin 0 -> 1341 bytes .../2a57460a1c2792e8349443bafca20002f6a161bc | Bin 0 -> 860 bytes .../2ae9c8b256ded687800abd68397357ea89488ad2 | Bin 0 -> 751 bytes .../2af69f3deb1f1d22e658a813c11073ea11aefee1 | Bin 0 -> 832 bytes .../2afc7c4bda5b2ea6ce35be821477e2ce501f7923 | Bin 0 -> 56 bytes .../2b0851c369903d9a49b5ee248e1b5399297941ec | Bin 0 -> 2193 bytes .../2b169fdfb3ac7a2ac172a220ebfd59ead54298c6 | Bin 0 -> 860 bytes .../2b17b11d52511d9903349c77fefa743e43e4defa | Bin 0 -> 555 bytes .../2b4cece16932e8b35af33a8d9630dcb0bdddbd4a | Bin 0 -> 1336 bytes .../2b4dbf27f1ac84529545e2c6d662c528da7d8a80 | Bin 0 -> 2332 bytes .../2b5a8502ef7acd27ac647aa219e43ae69d33ecf9 | Bin 0 -> 551 bytes .../2b75eab7fa2fba9d451d6d39064350f1be9625cc | Bin 0 -> 6690 bytes .../2b767d6ba3f690e26acecfc2acc0472bb5ace5d3 | Bin 0 -> 432 bytes .../2b76a2b52ba46b31e3bab9e4bf2edae770dd0174 | Bin 0 -> 784 bytes .../2b7a66b58f18ca91d262abfa4ba1187606895115 | Bin 0 -> 3682 bytes .../2bd75e3d4d48570769662121ee06f0b5070bb15b | Bin 0 -> 1034 bytes .../2bda3ad46f971710412759014a9fa66671dec688 | Bin 0 -> 618 bytes .../2bdcefe9cc87969af7bcad7f6b63b706fa0feed7 | Bin 0 -> 2835 bytes .../2bfa3dd2b2845abe039b5ca5f3afc334fdd0b8be | Bin 0 -> 1049 bytes .../2c4723ce319b693870e84f5edc764c9cc275c189 | Bin 0 -> 784 bytes .../2c473c6c9b20b0cfb33c6beb47d7d4a8cccb9104 | Bin 0 -> 860 bytes .../2c50314e5d6bfc80f996c2fec93ff72355de41dd | Bin 0 -> 544 bytes .../2c5453597d62df736b0b2b4b39e74295d1dc5e7c | Bin 0 -> 2251 bytes .../2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 | Bin 0 -> 2332 bytes .../2c745ad58515d83bf36205ed2e062e8104d2d50b | Bin 0 -> 544 bytes .../2c78d44c9089c8fb4838a379917f03415ba70700 | Bin 0 -> 981 bytes .../2c7cb73cee4ddb3a2c6a69e0c9d4fda178810beb | Bin 0 -> 690 bytes .../2c839d341fde6bafac6c55905bdf3b9b9d677bc1 | Bin 0 -> 544 bytes .../2c872c6de6f224889eb250771f1cca9f9546aa2d | Bin 0 -> 45 bytes .../2cab7a3ce75492f9ed50da2355454202eeecd332 | Bin 0 -> 544 bytes .../2cb1da8b08cebdac2e0f22262a18799473b1a64f | Bin 0 -> 86 bytes .../2cba911b819d5e0c5876c30d3b7f96a41246410c | Bin 0 -> 1168 bytes .../2ccc28f8d5315a2257ec8c902f6b97087eb382ea | Bin 0 -> 88 bytes .../2cf455ff26153751e30c816294c7611716344cfe | Bin 0 -> 948 bytes .../2d1d3248f4671e174683051c263e752f8e57aa1e | Bin 0 -> 552 bytes .../2d2f06ffd512f7454945601baca3c7b42f1edfb3 | Bin 0 -> 519 bytes .../2d395f4fe035526ad874775ede1e97ae00c5eee7 | Bin 0 -> 435 bytes .../2d71b09a37f18102dea96dad0c197402b9fd4d55 | Bin 0 -> 574 bytes .../2d807b57a42c13f18abbbeb360a9d5d98c6ca74f | Bin 0 -> 955 bytes .../2d809dcf1f09df50568505d2d74eb534905206ea | Bin 0 -> 11433 bytes .../2d94013f42d3587ebbeef09f917f3cf900390592 | Bin 0 -> 1336 bytes .../2d94f8707a91b534e049967f45b6e6b8aa07c521 | Bin 0 -> 544 bytes .../2d9829bdbc293722aaf280989a396664fbc67a3f | Bin 0 -> 692 bytes .../2da02deb9068926b9789fc11a6550e6e035d7950 | Bin 0 -> 475 bytes .../2da591dfc2a668c604431d10abc2c6fcae39a48f | Bin 0 -> 2101 bytes .../2da60e397078136aef4d4538f5c1fd1b54b676ef | Bin 0 -> 6659 bytes .../2dac66325ea94579f6d689f8137a8dfa157dfbb2 | Bin 0 -> 529 bytes .../2e032b08e0e7165585da2859633de5636e9d5a4e | Bin 0 -> 532 bytes .../2e796a9671ca837babb66bea7d6e51be7a3a5cee | Bin 0 -> 868 bytes .../2e940ee6b5e9d69329cb607e566a0a7e3faf284e | Bin 0 -> 337 bytes .../2ea5a4b6bbcd59da1bc96758a50e40fd8b031d9a | Bin 0 -> 1044 bytes .../2eb2367ee4bd87f859b556ba387b073714c1968d | Bin 0 -> 444 bytes .../2ee5bd5c84f31a1410d4db7e3bb027911f0d47ba | Bin 0 -> 1335 bytes .../2f02590a0793b5a8bff6c641f24b07751d7c8e10 | Bin 0 -> 685 bytes .../2f58073fecfd59d6b80db8130eabdad492d578a7 | Bin 0 -> 685 bytes .../2f7750bf142ea5d080d50e4eabca9a26e5510b06 | Bin 0 -> 1335 bytes .../2f7a7befe2eacdcffac4fc5c024174d04f39104f | Bin 0 -> 475 bytes .../2fcf92401bb2abd7ecf56607fa5e91cd4412fcb4 | Bin 0 -> 192 bytes .../2ff52b2b71486d7ccd6f7f77fae82b8becb5faab | Bin 0 -> 2843 bytes .../2fffb93d1c2a7a9dcbef30ad29717cee17eceb0a | Bin 0 -> 1078 bytes .../300f135b1302267afe76e0bb0e80c1c4cf57c601 | Bin 0 -> 806 bytes .../3034569dc2e69fc9d0ef3449381ed3533fbcfc89 | Bin 0 -> 423 bytes .../30413d0e3d1795e20a6fc89b2bc039b213a36fcb | Bin 0 -> 1188 bytes .../3047c824d1b54095241e09dc47cbd0b4d6759e0e | Bin 0 -> 476 bytes .../30495c402dcdb45155415607469d9baf91b8156e | Bin 0 -> 1176 bytes .../30b96a3ee77d5f96dec793f9e8f7c2f5663762b8 | Bin 0 -> 868 bytes .../30db66a6f95fb4df531e620689eb44e9f3e428ee | Bin 0 -> 817 bytes .../30e1ca767816157f21357accef7cc29bc14499fe | Bin 0 -> 681 bytes .../3107a66d3662feb8e3cd781aa9af9defd4c7db28 | Bin 0 -> 903 bytes .../31b7a562dd81312f3dcd5d6b3e4dbfe1d2ab5116 | Bin 0 -> 955 bytes .../31bb4f70a71adf9cb0adefd4aadf9fbe1a25a135 | Bin 0 -> 480 bytes .../31eda93a5fbe4abafa2140818c912e5a72f2d43a | Bin 0 -> 955 bytes .../32001f87d57c0d7b260f7779f2c499859d7f2909 | Bin 0 -> 3160 bytes .../321bf24b9d80450e96d84ad8aac002e338d99bc2 | Bin 0 -> 1336 bytes .../324d3734d962d718e23536429788d328a81e0704 | Bin 0 -> 363 bytes .../3256119ab96da3ea1ee50c47a2b8781c3dea8b3e | Bin 0 -> 546 bytes .../32640186bcd809f301393a4c6b5db177c22f7133 | Bin 0 -> 884 bytes .../329cec865f1a64fd0644a648cb86a510ae3d6ca3 | Bin 0 -> 2970 bytes .../32a2b0616ab084adc7e30d087737085c3cd7018f | Bin 0 -> 2101 bytes .../32beaf822db39db75307402ea58dd6480ce0ffbf | Bin 0 -> 1845 bytes .../32d84d2b74834021f9be5c433aaf46136390a3f5 | Bin 0 -> 10483 bytes .../32e17f50517146768c9a47b86c61523f70796d17 | Bin 0 -> 1336 bytes .../32f3b09897fd14b691ef9df413c563a5ed010317 | Bin 0 -> 544 bytes .../3327148340a956e13c335c8f5de4b36d2006ba4d | Bin 0 -> 544 bytes .../33b43db2bc461b1ddd85020449b4776fb7cfbf58 | Bin 0 -> 544 bytes .../33b5dce0dc50e5bcd4ce68f949f681a4e546faf0 | Bin 0 -> 34 bytes .../33c931309638367df3954024eb0328756cbd8e3b | Bin 0 -> 476 bytes .../33cda12282158ba25c89adb9c9f63d7ea15e2b91 | Bin 0 -> 2519 bytes .../343371766f1a0708e85f1117b6f7206fc99b539c | Bin 0 -> 544 bytes .../3447baa5749505bd5106bc8940929e552e1cf1b5 | Bin 0 -> 6631 bytes .../344fe0c5fe6ff723286d83f3e6c9f74dfe0ab7f5 | Bin 0 -> 687 bytes .../34541f626470b171388498faab41fab8b4122a06 | Bin 0 -> 6600 bytes .../347869bb45903b5189fb0c93c4dff3af14d1bb4c | Bin 0 -> 544 bytes .../348baf9b57a4a817d58439beb37f945f471f74ab | Bin 0 -> 724 bytes .../348d6863c12983c44420b798139f21a4773d07a5 | Bin 0 -> 955 bytes .../34a36018f4fc246933708d0ac7d6f29f71e8c339 | Bin 0 -> 1436 bytes .../34abea6b0edaba25b224f823ae91e8375d7a7140 | Bin 0 -> 571 bytes .../34b727cc0eee608d13e9c683fa5d7559f3bad510 | Bin 0 -> 475 bytes .../34d323188c04106d31fef233f3198db9b35ef291 | Bin 0 -> 1054 bytes .../34f0b0bedec22d8a49d878af8903733f8cdd7047 | Bin 0 -> 115 bytes .../34fa71215d3a91975b549c371e13236e05f97859 | Bin 0 -> 880 bytes .../3507650cb343c9676d2a70691a509d06319c3a3d | 0 .../355f26680f51d3401a2e74dc803d0fe075fd83f2 | Bin 0 -> 539 bytes .../35604b6431e63142f19c8add678077fd77bda2e6 | Bin 0 -> 2251 bytes .../3568c55adab1ac1eebd3c920460db20651a8b804 | Bin 0 -> 878 bytes .../3596fafeb7d82e16ce0d454507ade09ee1aead87 | Bin 0 -> 519 bytes .../35b1d1d9ba0a5e964f0fd90f4b54ab15307cfb1b | Bin 0 -> 1335 bytes .../35b35e9929e371d6487d7012de7fdafb740e7aea | Bin 0 -> 6599 bytes .../36065c921d38ad69b82cba89ed8bb7aa20522ad0 | Bin 0 -> 1906 bytes .../362e084c3a6d688c2cd6b631ee676684de00c869 | Bin 0 -> 423 bytes .../3650fa171f0ae12242f23e5e282ce149e396ef31 | Bin 0 -> 850 bytes .../36c399078bbd188f617c7533b2aeaf83c85b7ace | Bin 0 -> 2101 bytes .../36d8043dd70a82ffb3e82a3a4e360a2007d85fbd | Bin 0 -> 1336 bytes .../36f44e24d6aca4247d53f543f95df45f5e96d373 | Bin 0 -> 1528 bytes .../3716f5162f27c323fc154f900fac772ab1fb9e8e | Bin 0 -> 476 bytes .../373254ae2e191ec0f4bb0e62ad63cc4e8b6aaac3 | Bin 0 -> 9364 bytes .../374566d471766486329b66593035c67a89e6f4b1 | Bin 0 -> 858 bytes .../3754a83a48b5ece5435b185c99f93da0a222e16b | Bin 0 -> 260 bytes .../375a2f25d36328c2e2d1fd42aa0b00974263aae3 | Bin 0 -> 1189 bytes .../3787c7ae759d117c7416d8468d0195cc9fe1e059 | Bin 0 -> 428 bytes .../37947bf20653e8d382fa2b5542139383b79dd9f0 | Bin 0 -> 475 bytes .../379656f9a747725c433e1751b301c9fc5df495cc | Bin 0 -> 1868 bytes .../37b2f70ee401ef26f4161d2a995fb3dc254cc430 | Bin 0 -> 3155 bytes .../37b592940ff246229a30abacc645cc2c74f3c38d | Bin 0 -> 867 bytes .../37ba9f6306cb0649331e886976305fae1ce86acf | Bin 0 -> 2101 bytes .../37cf60ec71a229b5f69c7055cb526f66c0d278e7 | Bin 0 -> 88 bytes .../37d5f03bd21601c2fe139589d6295ccb9b2031d6 | Bin 0 -> 2835 bytes .../37ff5037a71ab727016ecb6fef853d8ef3998a10 | Bin 0 -> 752 bytes .../3802781ea5df312230ae05b88d66f500f0900a46 | Bin 0 -> 432 bytes .../38183ed3113981e532e78b8ef5797e991cdb6c95 | Bin 0 -> 544 bytes .../38339db40cbba4829d1337deb476f8d5367090fc | Bin 0 -> 2836 bytes .../38672fba3111bed5c95ab4f6cb08a1e9b364010a | Bin 0 -> 1044 bytes .../38917dc4cd56ffc4e9f0544d459f872dd0065b8b | Bin 0 -> 1049 bytes .../38917eb7ad6a76e8062479e6bd002742b0516753 | Bin 0 -> 696 bytes .../38a4720a633f114984040c80ce41affbedf66916 | Bin 0 -> 845 bytes .../38ab5fd3c3858c55325844ae1bcc8e8da188334e | Bin 0 -> 860 bytes .../38b78f8485a74eaffb9e94fdf56db9118c292551 | Bin 0 -> 112 bytes .../38d49595e207567b286186416ef165436bb81908 | Bin 0 -> 2331 bytes .../39161a743aa186ccd23d49238edf2272337fe6b9 | Bin 0 -> 3155 bytes .../3920e1e845b33a5c60135ef6d531cdb522dfd58b | Bin 0 -> 860 bytes .../392ba8916ff3e28f6a3fbc1c8cc6fc7fe1885f0b | Bin 0 -> 843 bytes .../397e15911b7342c01cfed53900216b5e9ca44213 | 1 + .../3993b6d48d23de6f57a2f67ac69e7eb9b1161fad | Bin 0 -> 1335 bytes .../39a2ee42bb20a7eabbb1b3ab53557eab69954a1a | Bin 0 -> 1336 bytes .../39c7e43c65b1e8905057ceec4be22c1ed10e5490 | Bin 0 -> 536 bytes .../39d3c26340f83f59a988109708e33b47293cde7b | Bin 0 -> 544 bytes .../39db0964de4b2d5e154757f60a5a1d45b8032a83 | Bin 0 -> 726 bytes .../39dba2704bf07584552d5cd605740ef5b08610bc | Bin 0 -> 845 bytes .../39eaa17ca277e733373f01548d63b3c67072cb76 | Bin 0 -> 73 bytes .../39f4712ba3437829cf5658f68a67b27166d251cb | Bin 0 -> 544 bytes .../3a0ae51e5abe5f47e78f1123e927b7353943f9e1 | Bin 0 -> 1540 bytes .../3a139bb7809c48a797d226c94d132c95e9acaf26 | Bin 0 -> 1937 bytes .../3a5c010ef555fb36c97ced3704d6b585b1dc7b04 | 0 .../3a9d098a3fbfa918964f0440753a6e394b74b4fd | Bin 0 -> 757 bytes .../3ab86c2721f9e162cc469ed916e125ebbf9825c0 | Bin 0 -> 206 bytes .../3ab940bd4c987a6f6c315b7a69078cef855b6776 | Bin 0 -> 2101 bytes .../3acbb10d830af724a9b623e92281cb369c7f3a0b | Bin 0 -> 475 bytes .../3af34c7276726be66029cca901a054aff38a264a | Bin 0 -> 16645 bytes .../3b37160e36f9cd76d8e22f550a26ccc6b6353c66 | Bin 0 -> 852 bytes .../3b982b2cf09a883795614f37fdff3075d70699a7 | Bin 0 -> 2251 bytes .../3ba05e45fe09dfddb2f87e8a061f65a88feee0e3 | Bin 0 -> 475 bytes .../3ba4f4f81f590470627b176a21644fe0b193f679 | Bin 0 -> 1022 bytes .../3bbc7a55f02246db49a7123f5b104c3b6436d174 | Bin 0 -> 2252 bytes .../3bbf27c3406727197d9e5239f4e26c7a5afb95af | Bin 0 -> 424 bytes .../3bece9894a8f31bc4fed854dad1538fd980d549b | Bin 0 -> 1784 bytes .../3c2b5eb4ddb34e87c629cde317c5efb8969b7d8a | Bin 0 -> 2837 bytes .../3c4ae91f3376531b4636dbe5aa55c5d5e3e3053a | Bin 0 -> 2835 bytes .../3c52a8f9833493c3c28d9ec3e794fdfa8790491c | Bin 0 -> 2312 bytes .../3c77d257452ff16231ddabd88cc98966e93799b5 | Bin 0 -> 579 bytes .../3c950182f51cb93042f09dad7bb60b927252ab39 | Bin 0 -> 2332 bytes .../3cb6f55e89989bc27e2619bd2b9e38f4664b8ee0 | Bin 0 -> 7648 bytes .../3ced1bd1ed09c16f69933c26544feddf4dc13b0c | Bin 0 -> 519 bytes .../3cf7bbf0751a847b1b7e1bb39c4b656354faed05 | Bin 0 -> 1040 bytes .../3d2844ffa4832210fe5284d9ab48837a708928dd | Bin 0 -> 2332 bytes .../3d2e7a38c5a3cee1232b14c6172ed760df8c0aa9 | Bin 0 -> 88 bytes .../3d3c23bb0aa79cd0b8ba959002aa275aa9173bef | Bin 0 -> 2835 bytes .../3d3f04140014eccaac2c7b60b08e4934056dd997 | Bin 0 -> 552 bytes .../3d41b72b73575e4d8506fce6f48f9b3d6b25d788 | Bin 0 -> 3495 bytes .../3d548b0c8a5412835b66966d0064f675f141efed | Bin 0 -> 532 bytes .../3d5f2d9a6b27091529338c4fe45f3ff612ed4084 | Bin 0 -> 1176 bytes .../3d6449225ed357946bb12a56492cbcecc3d6163e | Bin 0 -> 3163 bytes .../3d6dd6ddfc310de9d981e09d2319e75d1b1c99e8 | Bin 0 -> 1175 bytes .../3da58e2ca7120fc98dc41fc830a3a843738a285d | Bin 0 -> 111 bytes .../3db1eacde509497013bb509c22eb1f72d6a84093 | Bin 0 -> 12 bytes .../3dba7bf1ef103a72d1617dc1e4101489b82331ff | Bin 0 -> 696 bytes .../3dbb2ce5c27b172780447c4b01a7b4690213cc7c | Bin 0 -> 475 bytes .../3dc80ac90d3b8b2d550d51b7a7db1f6548c2658f | 0 .../3dd7d82ef3436c4c45096641909ac1ec0f81cc73 | Bin 0 -> 11143 bytes .../3e20c1e2b54bf37e4ab0b0cbaeb172fdb368d4f9 | Bin 0 -> 6599 bytes .../3e226bd1db63a3c5196ff2883e2470daccff28dd | Bin 0 -> 955 bytes .../3e35b3f34193758bb9d679e282e04306e14e8dc5 | Bin 0 -> 955 bytes .../3e3f779968d2b7f011e6ab74f0e0058fc1ccf158 | Bin 0 -> 880 bytes .../3e5891e2fe9fba41e96dca40fcb6cc12645cbaca | Bin 0 -> 476 bytes .../3e5994042812fc8e70c3f207be024698a0bfdb66 | Bin 0 -> 880 bytes .../3e84ff51308e6a67f1c0e77129d34963c29031b0 | Bin 0 -> 544 bytes .../3edcad65eb254ebec6c9052708e24eecb7d87cdd | Bin 0 -> 695 bytes .../3f1106688b0f5981833f7966d69e11309aa114f5 | Bin 0 -> 544 bytes .../3f39e78db6ac6c33ab6fb4275f8b208dd32388bc | Bin 0 -> 743 bytes .../3f51c17797a205d7432f33d302c5c0abc69064f8 | Bin 0 -> 48 bytes .../3f87c98730955a346b13cedbd599dd2fc965e068 | Bin 0 -> 1153 bytes .../3f9453768bffb8985d6da01cb729b85d2f2268b0 | Bin 0 -> 558 bytes .../3fb855d707f9826a94b2fc122c4b5a9f06926042 | Bin 0 -> 2251 bytes .../3fbce48148d1910c027382181a753d9450ed8426 | Bin 0 -> 6599 bytes .../3ff01c86a6707845235e47cc18e237d30e4237e8 | Bin 0 -> 476 bytes .../3ff4a7536ebcd75032798768c6f1e5067ac67182 | Bin 0 -> 53 bytes .../3ff8cb9dc50203bd44124c84882b8d53b1b67ab0 | Bin 0 -> 934 bytes .../4020295b5d1219f6327760c01ceb352dd86d9675 | Bin 0 -> 2929 bytes .../4022fbca06ef2585a15f89d2c464d526813a31bc | Bin 0 -> 751 bytes .../404e008f342715851fdd16c5930333dd2da4974d | Bin 0 -> 449 bytes .../40712dc00d368cd5228db99c25fc94f1c1b60937 | Bin 0 -> 48 bytes .../407283a515b063772d6365bb03272b112b63a783 | Bin 0 -> 687 bytes .../40b2169a320f7a9091791115661b282467da426a | Bin 0 -> 44 bytes .../40e9094bdc66b8016ec4682108a50f35e14f10ab | Bin 0 -> 860 bytes .../41066c040ff0a6730c012b79636d132f072cbf62 | Bin 0 -> 2836 bytes .../4116416909edaace11c66929faf0e868c118f1b2 | Bin 0 -> 2571 bytes .../41200b4b1a160421f117a10da75dcbfc6b93c645 | Bin 0 -> 3773 bytes .../412f05b1ff0bf677c132f8ce40b78b946b540d3e | Bin 0 -> 784 bytes .../4143bc986253e21efca8a1bd2d255fdec5a53b12 | Bin 0 -> 1208 bytes .../414c20c40a0d30d9df1835531bec015f636999ec | Bin 0 -> 955 bytes .../41521ea3a51b79a706269d6231fc4fdbd818f0ab | Bin 0 -> 860 bytes .../415817e2326b08f622fbd85f24e155480721e9eb | Bin 0 -> 3197 bytes .../41a12ddab78f0aae7d8112e267a71154a3574f2c | 0 .../41a8b7532ab744143297821a7b3200f09ae04c24 | Bin 0 -> 475 bytes .../41b40e3d93d42fb95ad6396eb42db651830fecb2 | Bin 0 -> 16645 bytes .../41f73a08c77291d4b7fce287e0fb4cba2fa76e42 | Bin 0 -> 3435 bytes .../422573d3614683646e27ec50f2289a91b396819a | Bin 0 -> 1248 bytes .../42477f71aaa56701e571e3427debf864e9405775 | Bin 0 -> 3218 bytes .../425456a3461762f34471f97fd452cc81bd458c8d | Bin 0 -> 3372 bytes .../42636b2ecfe8496cdc95c58103218b0bcad0b2dd | Bin 0 -> 2331 bytes .../429301ad47f156b434cc3c9e0fd6ab8ddab0e3df | Bin 0 -> 784 bytes .../4298e5c83fa195db897455537a2d3454641b6e93 | Bin 0 -> 3160 bytes .../429963c2990d644921a810d1d2a9b73b0e4d6bb4 | Bin 0 -> 1336 bytes .../42c065abb043286c119da39db91c82a4f6a95ac6 | Bin 0 -> 1044 bytes .../42ce64afe00f8181e0d48b1424175b375c246543 | Bin 0 -> 695 bytes .../42e8a69b6106c3353252612133c61bbce69f13e2 | Bin 0 -> 1077 bytes .../430e22be868d6f927181d0c6e25b95e8b97e3fb5 | Bin 0 -> 554 bytes .../430f284987994f937bdd8ff6c6d50053086fbede | Bin 0 -> 1336 bytes .../43180cd3a3387fa5ad6052d0a7bb05067022d86f | Bin 0 -> 1118 bytes .../435667da819e3275c9376bf31e145e704cabe4ba | Bin 0 -> 550 bytes .../435aeec0df85dc1f6e6af08c25e9583a75300aa9 | Bin 0 -> 579 bytes .../439cc06171fd6631cf873412c169375744fa0393 | Bin 0 -> 2128 bytes .../43a6726af7eece6377804be48487808fcfa59529 | Bin 0 -> 9318 bytes .../43ebe4753ba947574bc57709e2b797fb38e4734a | Bin 0 -> 542 bytes .../43efcc3f7a5ecc89fe9b176b188c82bbf316b336 | Bin 0 -> 2347 bytes .../44542d137490a58328efa73755599a9208b93cc2 | Bin 0 -> 681 bytes .../446f592c40b0a35c853e1a20a2bee6be16f75e29 | Bin 0 -> 919 bytes .../4474618ae58c838914877f4c71cc094aa8350181 | Bin 0 -> 387 bytes .../447d5a7995e61137c3a2787ac7df97f0bef21553 | Bin 0 -> 747 bytes .../44828d3fd63dfcabac5eb4ea8d270016a5be20bd | Bin 0 -> 2101 bytes .../449ee0e2202dbe1030981a9490f5b24cb7885dae | Bin 0 -> 415 bytes .../44e25a64e57cd09e5ddaa8822bbe46fc255ad494 | Bin 0 -> 2331 bytes .../44f00fca850d1f5c13aba8fb6d1d3a0cadf53cdd | Bin 0 -> 544 bytes .../44f8df6b20046019a46222f769a77717dbb9d396 | Bin 0 -> 955 bytes .../44ff85718ff8bc622f3aa5c563415402a4060543 | Bin 0 -> 720 bytes .../4520450321539eee9eab48ddc83026d011e9a62b | Bin 0 -> 62 bytes .../453218526bb2c4c7d56b2fa5855dd38056886dce | Bin 0 -> 2331 bytes .../4549b6072fb76002f8cb50bf12610f4d749f7739 | Bin 0 -> 1336 bytes .../4553278481eef9741051fbae2ba75603ff619858 | Bin 0 -> 1044 bytes .../458d0e56de9829df2509711bad68e9229409605a | Bin 0 -> 1336 bytes .../45a78f8bafccf0e4bb5fe2184bf98257988f3b09 | Bin 0 -> 544 bytes .../45c265cdca0b730592a11ac31edd8885c547e9a6 | Bin 0 -> 480 bytes .../45c5090a9cd6236b4d47368023ed74ce8a74e25c | Bin 0 -> 778 bytes .../45ceb2312ce8559b8581985a99b6ba80eb24c467 | Bin 0 -> 688 bytes .../45d1e33d1c6fc23296de8a591b6ced91522fe71a | Bin 0 -> 955 bytes .../45dd0f7d605307a7e0d66ffde3e1308d7c51c902 | Bin 0 -> 7648 bytes .../45e2799f1d821c353c9bd3643efa4eb06b67e7e0 | Bin 0 -> 547 bytes .../45f2402bbff42a25395486eda0fbaec46ab04ae1 | Bin 0 -> 903 bytes .../4603d21ae71cc03d586eb1a1170712f6abb74800 | Bin 0 -> 476 bytes .../4625c7f81e0cfddb32576312762d36b148358b55 | Bin 0 -> 2900 bytes .../462659944dc0e8a4cfa65633016176361b1436ef | Bin 0 -> 480 bytes .../46527c2613439fdc8a11c78ae48bd0a277b74eab | Bin 0 -> 685 bytes .../46834454b4fa0376b5bc6d2b2f441c7bf6766177 | Bin 0 -> 549 bytes .../468b6de1f8afb7651339b8efc49220aba4aa7293 | Bin 0 -> 955 bytes .../469eec98ee5a95d71e476216d28f6ec4c169d28f | Bin 0 -> 5331 bytes .../46aa63055ec440c6ade9ab33538e275fb11e9d05 | Bin 0 -> 1175 bytes .../46b8e552df0beebadc21f858648f80b932d9e6b6 | Bin 0 -> 476 bytes .../46c645c86a93c2a8da13ae9743936483988de7ea | Bin 0 -> 696 bytes .../46d30d9a37656448b02469a00f41a1c8ff4e4f5f | Bin 0 -> 2843 bytes .../4701bac77223887e0e9eaac28c18a960b9707faf | Bin 0 -> 1044 bytes .../47061571ba5fc3331f2f988f81612120dc2b599c | Bin 0 -> 6631 bytes .../47064d81eada3b2d8589c75db7afb81a70b80f83 | Bin 0 -> 741 bytes .../470e5b2eaf9f3dec2db0dce69f893e3352f9e8e0 | Bin 0 -> 544 bytes .../475a3715d84fe47538bb2df7a515ef38bf3fb284 | Bin 0 -> 1330 bytes .../47603f290f3a82381a943cff8384d7e93dd4a57b | 0 .../47648083d3864c4fd76c1dc90c7e7910b2a1626f | 0 .../476d331b2164899718b97900c03c0fc330ad03cb | Bin 0 -> 15 bytes .../47880e581db7d5597d964633910974dc5d3a279a | 0 .../479211e96659f789c9acc3d60eeaee8855b36c16 | 0 .../47a20c330833be60e2131436c571b96284972596 | Bin 0 -> 379 bytes .../47a8a12e866fcff623aaa93edb161b5e6e5f1543 | Bin 0 -> 544 bytes .../47aaeca4caf5d0870f7721e1df8ffc8c8408afc7 | Bin 0 -> 1336 bytes .../47c963ce02bcf3edd731176c112a859912ce1a3b | Bin 0 -> 2835 bytes .../47ca2c7bc80158746edcc8b0f58af0808036ba55 | Bin 0 -> 475 bytes .../47cd98babc2f0524a0de1367636f269a850fe273 | Bin 0 -> 18 bytes .../47d40fa986fa7ed8d9aaa2a767814b0bcc543be6 | Bin 0 -> 1693 bytes .../47dc5b070567f17f6ab071b291ea801853f103a5 | Bin 0 -> 2899 bytes .../47dee10eaa015ff2e590df5b8123ea0d15355b7c | Bin 0 -> 25 bytes .../47e9735be82d62c462278e0300ff98d06cbc328e | Bin 0 -> 1529 bytes .../47ff91f0692c1468f74a1ab260bacc428871187e | Bin 0 -> 557 bytes .../48011934c31d2d67c6553911f39d476249dbde2a | Bin 0 -> 936 bytes .../4823b3ddf2a2c1c4965575ec0ea5415fba1d8a2d | Bin 0 -> 3154 bytes .../483a47c4a1b14d3fd45b9bb6123d2b9eaec521e2 | Bin 0 -> 695 bytes .../484424395f7e7f99acb92c49da323033b3fb0bb2 | Bin 0 -> 955 bytes .../4855b2c760419be7de0effecacf3e576abd35d73 | Bin 0 -> 476 bytes .../4855c42f2a199d527a8d3bcbf48e63e623221c6a | Bin 0 -> 6599 bytes .../485a8af4d5bd75929a5411caae14e9277353bf94 | Bin 0 -> 2974 bytes .../489e84b87ce86b6ae9a8adab5c3492902e53fca7 | Bin 0 -> 2251 bytes .../48b98191a2f3736ca83d0462ca105a311711c85e | Bin 0 -> 544 bytes .../491d0a04b77793e8674d6148598ff0fa1573827c | Bin 0 -> 6759 bytes .../493547f75d1b5c67a5269647d3cd0525cb1fa7ae | Bin 0 -> 1868 bytes .../495035f4676d88b9a8184835954cc50977062c36 | Bin 0 -> 778 bytes .../49676005a555a0a471bbc3a071441f11d64b60dd | Bin 0 -> 688 bytes .../49a2431a993b70f453dc77186bc7be98af045d09 | Bin 0 -> 3159 bytes .../49bdbd2011cb1a5b756026312b887084a3ebd76b | Bin 0 -> 729 bytes .../49e7ef268daa0a2cdd0c24d1c4c6a713bf7be64e | Bin 0 -> 2331 bytes .../49ea35e443da6d5940cb0d28f39652597f63fbbd | Bin 0 -> 544 bytes .../49ee30ef2200abbdd4022e85f3808be5c96f2eb2 | Bin 0 -> 696 bytes .../49fedf65a47ea0d23221c2bb8e309f50a3add5ce | Bin 0 -> 546 bytes .../4a01bd14f39c81a8a6a10a33e042840ce5692a4a | Bin 0 -> 2251 bytes .../4a147c6e097b0014188817c83c851c16146a7880 | Bin 0 -> 96 bytes .../4a1cb5934068656c3c30787f6efa531032f18f7e | Bin 0 -> 475 bytes .../4a2d2bbe0d17bb691411edb54adf17c0a972b765 | Bin 0 -> 860 bytes .../4a3c905ffddbfdc96f25ef51659e2bbc3bb83830 | Bin 0 -> 3154 bytes .../4a9f4ec339c6cb5681679ee0b2bb02ccaec4d2a2 | Bin 0 -> 541 bytes .../4aac06a792b9c7b5d108b7d536eeae7a1a697562 | Bin 0 -> 20 bytes .../4acd5e2f28bfbebd9636c00198a3a1c0a9135eca | Bin 0 -> 1666 bytes .../4ad70fea32a3af382d761103760f6633dc517ad4 | Bin 0 -> 475 bytes .../4ad7eb9f8b68f89b41191b4ec3b7be58d1c1b59d | Bin 0 -> 544 bytes .../4afa220c781df8a04b016958450413cd9b1f126c | Bin 0 -> 688 bytes .../4b02fbc02a6528f684c21f7e4330b07d2dd5d9f8 | Bin 0 -> 2131 bytes .../4b13a1c5d6078c4edfb1b1c67392a1fd1f0517cf | Bin 0 -> 547 bytes .../4b1d647f9873b9885f809ee3f9e9d1ac529fbc8c | Bin 0 -> 3154 bytes .../4b2369a90ae16c4ceef256000c0a9f5c47979eb6 | Bin 0 -> 633 bytes .../4b38de80be37e3f3bc9b509e9471b19f089cca20 | Bin 0 -> 564 bytes .../4b3ead03e64f4cd07ba2b4e37c1021743e771fce | Bin 0 -> 853 bytes .../4b4473e8f34f8d4b0a9ec6fc57af62732739e05f | Bin 0 -> 86 bytes .../4b66e4ce7ce4f4bd67344ae5b45eed10f533ec8b | Bin 0 -> 2331 bytes .../4b81e8c7b0c87c0a16eab29b88c8ed6783d32439 | Bin 0 -> 546 bytes .../4b88c521e277511aee7750ae551df7fc1cf993c6 | Bin 0 -> 768 bytes .../4b99ac8d42376a474890a941042b422605b0d4e6 | Bin 0 -> 539 bytes .../4bc8a7534c4c573a32496a0809f82c54d557b56d | 0 .../4bd115ebfa3be1367c23e6c4318e1043a3ac99fa | Bin 0 -> 955 bytes .../4c013395cb5ece5d66453efddeec60f793669813 | Bin 0 -> 45 bytes .../4c0430fc59399ca198329d1cba1937b111d61546 | Bin 0 -> 544 bytes .../4c161b61757c06aa6c6a451f1a4657bbf361c6c4 | Bin 0 -> 955 bytes .../4c2369673f89a69bd79ebef71b5775f9fb317e81 | Bin 0 -> 53 bytes .../4c59c2482c6404082a0635858985b71b82cc5146 | Bin 0 -> 544 bytes .../4c5f3cbf8edae219d9889d8ba134883b79e26dc9 | Bin 0 -> 718 bytes .../4c66d62bed2462ce351dcf40d29cda35d78c7705 | Bin 0 -> 64 bytes .../4c6b444b206e07422c67815170a2b597762e7563 | Bin 0 -> 6697 bytes .../4caaf58a1600354ac9f62fba8d50f283c93a25cf | Bin 0 -> 864 bytes .../4ccd050b032794d602a29300fadc8368fce74b10 | Bin 0 -> 544 bytes .../4cfce7610603fb34b52899d5ae825a9267cc6f13 | Bin 0 -> 3108 bytes .../4d1a707cdb313724ea95783f884bb18c446aeb13 | Bin 0 -> 6600 bytes .../4d20b77701a94c7e7638a8ccb6b4f49f4e709bc1 | Bin 0 -> 11431 bytes .../4d36a58efae3b11ad750afbbebf6f1b4426c6ddd | Bin 0 -> 601 bytes .../4d3d510accadff9934eaa5d7ccf62c74dfe13800 | Bin 0 -> 2101 bytes .../4d4a2b9380be627ed32882398fd19a7f1d7442a2 | Bin 0 -> 6599 bytes .../4d4bed7ffa0c3127782cd04fdd0198ed80c3824f | Bin 0 -> 1077 bytes .../4d980ccf452491968a8b79e6dab57a2fad1c6889 | Bin 0 -> 552 bytes .../4dd78993fe41aefef22150b6ca2a364036de1a4b | Bin 0 -> 1335 bytes .../4e020e2dd25ae2a78cc2c57500cbe19002f8afd2 | Bin 0 -> 202 bytes .../4e3a2390998de7eea4348296383e23da908b8455 | Bin 0 -> 696 bytes .../4e3de75ddd56a6da8dcfe73691192fb9e28ef43c | Bin 0 -> 423 bytes .../4e62ab44732093f6bec5a90d8b5650705fcb692e | Bin 0 -> 9360 bytes .../4e6e9f761e986c4a61b5be540b826abee011d766 | 0 .../4e9319502deb9c629cd2c48a3c359479b57fcf25 | Bin 0 -> 3160 bytes .../4ef08092bd365a191a93d6fc8ca04699283d8bad | Bin 0 -> 860 bytes .../4f264e20b72d2157099ee07ff94a3d3ebdd2d1cf | Bin 0 -> 1034 bytes .../4f2bd070bb4baa414fb24c44cc6a603b7a7cb956 | Bin 0 -> 539 bytes .../4f3a5b4335304f53951535244525025c00dfb65e | Bin 0 -> 760 bytes .../4f4211f61a8d89a61f02af7a208efcce30a5e20b | Bin 0 -> 478 bytes .../4f50515e70982cccab9caf45dbe355e352e73377 | Bin 0 -> 1336 bytes .../4f57c8c119ef4d898f4c6334a78399e1506b5370 | Bin 0 -> 3159 bytes .../4f63f669b7dedacfe7a6a6e5e365c0b7b3cb9f8c | Bin 0 -> 116 bytes .../4fb68cc6a17c0bb045ab2aa8c7d06a0273be24c0 | Bin 0 -> 548 bytes .../4fd6ba5a29cdef21cba275b4f2024aa4f325f269 | Bin 0 -> 556 bytes .../4ffb0574ef5da44f24bdc034923d80214e0b1d5c | Bin 0 -> 728 bytes .../502225ececfd25bc9096ca0134fe0d16d6c13052 | Bin 0 -> 2836 bytes .../50248099e155b046a0946c8ebba7b666b760494c | Bin 0 -> 531 bytes .../5026ffd82ec3ca107a55fa98a0e0182743845cb6 | Bin 0 -> 2439 bytes .../50306bcebf05a3cbf64dcf6487b77cbc3521f18e | Bin 0 -> 695 bytes .../50342c8d3329526e48c4888cf3bdec35830f8378 | Bin 0 -> 685 bytes .../503d8c4f57bf40a7e22a1ce461a5388df7acc66a | Bin 0 -> 955 bytes .../503ee5651b58185d57534e3ee360600a01fe5be8 | Bin 0 -> 476 bytes .../5042916028aaac3abf02283666f0414f93f3b95e | Bin 0 -> 2958 bytes .../50750d88f170a89e8b0532caad49e0ea3e1ebdb0 | Bin 0 -> 884 bytes .../50a691f885edb01e7ac4790c3563ee974fab76a4 | Bin 0 -> 697 bytes .../50bed2f1822d9bf3c0084847a5360e340e76b62b | Bin 0 -> 544 bytes .../50c2966e5f59a40c6537029586949fc1c3d4716a | Bin 0 -> 2457 bytes .../50edb97c9d7f0028ef3a0462cba60d61a8df3029 | Bin 0 -> 3375 bytes .../510213979c1bbc19d27b3225566d6158b603be3e | Bin 0 -> 480 bytes .../510789b7cda8289d8f100bcd6204016ff6d6ae30 | Bin 0 -> 1516 bytes .../5137cc7acaa8b94b269020969632451a385dbdad | Bin 0 -> 6599 bytes .../51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 | Bin 0 -> 956 bytes .../520296b9c4a91f8a53cebb8260417d00ffbead61 | Bin 0 -> 478 bytes .../521799d69a9250ddc3195bd8b8fc371e1dcce1d3 | Bin 0 -> 696 bytes .../521991312b6d2fe4e3970eb97a35e4bd1e5e75ed | Bin 0 -> 2101 bytes .../52411c6a2453ce5c648a6c72f0ee921b95a9f712 | Bin 0 -> 2252 bytes .../5247ee165c5416254e877c0c9393a7c1a74396d4 | Bin 0 -> 860 bytes .../524e7138c7f716956def8f0e3c159f2b69c7f9d4 | Bin 0 -> 539 bytes .../525fd97a89ba10a66229d5d84e252789d13661f0 | Bin 0 -> 544 bytes .../526613cac59d5a7a32c8c456f48ed92bc170a4ce | Bin 0 -> 544 bytes .../527b3fafbb1e16c3e840eaf26dd0b023bb140e46 | Bin 0 -> 475 bytes .../529f3e1a767d29ac200628b726ac798525ab640f | Bin 0 -> 3259 bytes .../52b62dbbdb79fe3feaaff2802aeed0a9cd032da5 | Bin 0 -> 6599 bytes .../534e2e2fccd47e5e4763f05d4cc79dfba1005455 | Bin 0 -> 2101 bytes .../5354fca58329a03f0ccba7e3e0acb82d92535a72 | Bin 0 -> 602 bytes .../53663cc2b1f5716e050630e1d709f3ef933bade5 | Bin 0 -> 3154 bytes .../537021ef5376d35e88defa29e820f85d5adf12d3 | Bin 0 -> 778 bytes .../537c0e304aabce2e8345cbd25cc24218af766300 | Bin 0 -> 2331 bytes .../538d2cd0c51df357853bdbc481303465436e73ac | Bin 0 -> 778 bytes .../53ad80d7b46a8036be194cdb78ef8036a0ce0b50 | Bin 0 -> 47 bytes .../53d3188ce0211fa95e7468ccc3f66c84e29d6cca | Bin 0 -> 2251 bytes .../53d67eb0ed83cda2b72d803cc98cbbabc66174bf | Bin 0 -> 845 bytes .../53df8a069c8fdb2615b2d5ef7124d2f96748ae96 | Bin 0 -> 479 bytes .../53f7e340a0ee752b29b60d57c7f0939d68943341 | Bin 0 -> 3154 bytes .../53fd415e8f76430e1ae01e0086e9b2818d47c04d | Bin 0 -> 1868 bytes .../5420b2428a142b8eb858a09d3913ae19d38a86a7 | Bin 0 -> 880 bytes .../545aee70725af3d5deb4f43e6bd882ebc992aa5d | Bin 0 -> 768 bytes .../54614d71a03ca9bf84bacabb16fb38a036377843 | Bin 0 -> 478 bytes .../547fa587ca66dbd970950e8108e8f4e6bd1c728b | Bin 0 -> 3154 bytes .../54b10439f58686929a540d023332d55d463265a1 | Bin 0 -> 1335 bytes .../54b46c5600118a249495f2f8ef2d129d62332b6e | Bin 0 -> 475 bytes .../54c69cc77e09e4f482657ec9641f5f268161ac43 | 0 .../54cc1e1dfb060c8be71921970dea715875ed76d9 | Bin 0 -> 476 bytes .../54ceda6ec5c9baed5697061441dfb8069687c950 | Bin 0 -> 565 bytes .../54cedcbc0cc04916f02140f92e460948b883a196 | Bin 0 -> 1336 bytes .../54d1730286b3db1fb8dfb087f41f34e87a45fffa | Bin 0 -> 546 bytes .../5532f89402af2f74fb84b6351ddce8b91081d1a6 | Bin 0 -> 565 bytes .../555a7d9aa332fd367d20da3e7b117447f8738753 | Bin 0 -> 544 bytes .../557d576ebdf5f2567d66b3a74f24f6e66e2145be | Bin 0 -> 741 bytes .../55a46e0c0017b0cb6b9d26f4a85f0a9c8e411a16 | 0 .../560b6647ea9f16670e6dc44fb133eebaccd8896b | Bin 0 -> 2835 bytes .../567861a0ef3daef5b992549f6fea78ff39f299d7 | Bin 0 -> 2543 bytes .../567a64e0a340faa18a8e791201860b7b28715a49 | Bin 0 -> 1548 bytes .../568e49aceec407cc95710700f6a5891d48e1ca53 | Bin 0 -> 544 bytes .../56a47aaccaaadd63bfca9bd5c42562e9f9ae8c45 | Bin 0 -> 935 bytes .../56bed2ccefcbfac147ffae8d342bd06c05361978 | Bin 0 -> 747 bytes .../56cf05954e86ee34832109af775f13b833beddd1 | Bin 0 -> 1335 bytes .../56e288d542986d892bf5f3aa247e54bc6708f823 | Bin 0 -> 363 bytes .../5719fbb473022143f337a7c6bca19692786cd989 | Bin 0 -> 1366 bytes .../574bee07c2d73d1380696b884703f9f391ef48b1 | Bin 0 -> 666 bytes .../57532513716d00e062c1126b380c6b419a4ac1ee | Bin 0 -> 532 bytes .../57849033a1025fa4ce6187230b85b505d699dfad | Bin 0 -> 3154 bytes .../57ba124fd4be478cda5ea9cb609e38137912d2ed | 1 + .../57c4a5cdd33dd232645d9604635933ff7eed3cde | Bin 0 -> 12376 bytes .../57f546399fa63f8e2d7dc49067fe9c08adea7490 | Bin 0 -> 784 bytes .../582e104df62895bb20cf7bc896a0b7ad71d86d97 | Bin 0 -> 478 bytes .../5861f7c21e011201992bdd3aa4b0508221ae0a91 | Bin 0 -> 1198 bytes .../5869715de2194c5df957170f736779f50b58119b | Bin 0 -> 792 bytes .../5873c42712ecd71010070b619ed4263003756ad6 | Bin 0 -> 2787 bytes .../594b51481ac6bc7df439cce4bed815db8164c6c1 | Bin 0 -> 544 bytes .../595bae747a7c43c3288f8a519fd20b222176cc17 | Bin 0 -> 941 bytes .../599d784cfd25bef4be70e37bb6413637779f187f | Bin 0 -> 751 bytes .../599ed8f0d63d43ae6b804ab649281e2aa43fd802 | 0 .../59fa41502b876196519bcdad0966b6732523b238 | 0 .../5a03b6eb72ef691f55a3815d8de1410f05c761fd | Bin 0 -> 6599 bytes .../5a0e61b15fce26602553aa93f9d42230589ef56a | Bin 0 -> 751 bytes .../5a1c63b8fd17cbcdce5cce62a9ed57dcdcc1d788 | Bin 0 -> 544 bytes .../5a22bcf4a3f2ff59c13ee6d001be3fdaa5131b2f | Bin 0 -> 5 bytes .../5a318845ddaf8659425e27618820abd9b6b0cbe6 | Bin 0 -> 2837 bytes .../5a349cbb66a48ddcbe197cff1f2849bb6a93c56a | Bin 0 -> 4948 bytes .../5a35c9ac7326faf64d6ba9530ac6e9a0551f0fb7 | Bin 0 -> 2252 bytes .../5a6a9e4fcf0e695229b6214d22a863528c6bd043 | Bin 0 -> 475 bytes .../5aa2d2beb9109771aedfac52e64498fa50f6abd7 | Bin 0 -> 955 bytes .../5ab4c8a28ab63acf928a0ac00ab2768cb2b67994 | Bin 0 -> 544 bytes .../5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 | Bin 0 -> 6 bytes .../5ad977b04179f3ca51c54cda82bfb1a2df3770cc | Bin 0 -> 53 bytes .../5ae0dcf2b92f63c4ba84c2099a7d24fb0b9502a6 | Bin 0 -> 2292 bytes .../5aeea43cd486aec1a8ca9d8c79278a691683cd88 | Bin 0 -> 1921 bytes .../5b757e060f0969dcd095a31a8c02a3e06026669f | 0 .../5ba3b3bd49d6d35c93acde3803bc84fa665f11b0 | Bin 0 -> 6607 bytes .../5bf598f119a7860cc7b59388a11b0b543073ce92 | Bin 0 -> 853 bytes .../5c023826e238d48deac879b1f7811196de543402 | Bin 0 -> 1096 bytes .../5c0d1690fbca8608cd919bc700daced138d2e03f | Bin 0 -> 602 bytes .../5c3b5b3cc5ab6a84be92f7154abb6448be09974b | Bin 0 -> 1271 bytes .../5c3c45d31de4f8113fba84de3f53126b3c33fad6 | Bin 0 -> 2331 bytes .../5c3d21494eed72108d860611fb997c088e316089 | Bin 0 -> 1844 bytes .../5cc8aa172ac8517befe6a103d0c6a319aa4bb2b7 | Bin 0 -> 571 bytes .../5cde6823fe8fd5549125b68e2b138389e7c385b9 | Bin 0 -> 480 bytes .../5cfbfd352aa59744e0b886359a9585ea535bbf48 | Bin 0 -> 53 bytes .../5cfdf4bbb1aa4fb4e48c735169c98d1e7fd198ae | Bin 0 -> 144 bytes .../5d07da2acb6fb169665751e755b014ed74ee2be8 | Bin 0 -> 751 bytes .../5d211267f9dc965a7ad9c0792edf974a1f80dfae | Bin 0 -> 869 bytes .../5d34ff3d7a321849e572860135d77c32aa711b3e | Bin 0 -> 544 bytes .../5d969e248b38152590f6a21e9308c70586fd03f3 | Bin 0 -> 1336 bytes .../5defb21b8877607c10fc2db383344a7a44a272c4 | Bin 0 -> 815 bytes .../5e44b2d388abd7a0deaaa667e00dd9c4f509e4ed | Bin 0 -> 563 bytes .../5e481dbaeefbe42f74a9f5dabb777497bc2090c7 | Bin 0 -> 859 bytes .../5e702858f464f2290b81bcd73924c95c21f1ba38 | Bin 0 -> 72 bytes .../5e9cfe4dfd530063c07e2efcd164e98b0cbaab8e | Bin 0 -> 844 bytes .../5ee2b0150e4aae4bbcba314d9d052f90f8916eec | Bin 0 -> 1044 bytes .../5efd73d9112526d6a83f9a10974a177359415a0c | Bin 0 -> 875 bytes .../5f103ecee080798186fa162c1df1ffc4d0c17c22 | Bin 0 -> 923 bytes .../5f305927fee1e510410e1a4dba1b4673bbe3a97e | Bin 0 -> 558 bytes .../5f5fc6b831506622633923b879bb6ace522fc572 | Bin 0 -> 1471 bytes .../5f77d076413db455dcd35ef474cef4d095cba10a | Bin 0 -> 718 bytes .../5f9461d9a49802ee206cddc31d5f7802b70d8762 | 0 .../5fb9541795832c041b1d78013ffb8dba5d3ffc6c | Bin 0 -> 6600 bytes .../5fbf873a763878ac14803b8cc751b84c6c8253b3 | Bin 0 -> 363 bytes .../5fd8705410507c8bc7507f4a71117c1e95827f45 | Bin 0 -> 544 bytes .../600549b4cb0d53314e63a9b2b0f94767c82f3f00 | Bin 0 -> 667 bytes .../6073423c01a2dd0fca0bfbb909f6bd77bc2566b4 | Bin 0 -> 1077 bytes .../6073c16f8eadc95e9b2f4cd9fef418073fceaff8 | Bin 0 -> 1336 bytes .../607462bf13e38b256dc7daf81187b71350e13d71 | Bin 0 -> 544 bytes .../6080ce84f71a01f19b825e6842d07939896d3fc9 | Bin 0 -> 540 bytes .../608148368caa52c023cbe7c4ed173426063f788c | Bin 0 -> 546 bytes .../608407b7970d57fcf29fdd239aedd1401e9c1c72 | Bin 0 -> 519 bytes .../609f244309f2e43c5875fecee65f0a30d8b526d5 | Bin 0 -> 544 bytes .../60a99c0480ad5eee1514372201c0ad06d499f98a | Bin 0 -> 880 bytes .../60bfb9b9c488ae427a918727f684058b309ec295 | Bin 0 -> 6635 bytes .../60d670c1a42cf4a59e46b289a505dd52a7a7fcbc | Bin 0 -> 428 bytes .../60e32d5b52d1df4d91c76669255a0395ebb4450b | 0 .../60e8f09184cbc607c12d0527215fdf8b99d2d03c | Bin 0 -> 2101 bytes .../6107fb2e4cd364b9ed12afc9b97dce0afbed7ce9 | Bin 0 -> 3208 bytes .../61085b2e7d58fa41c886db5ac50f4a527b09dd0e | Bin 0 -> 1044 bytes .../614cf57cc1de9191ab4b72b41a9692b3593b7eef | Bin 0 -> 3197 bytes .../615692dd7670c91361b426507fb5975192309ce8 | Bin 0 -> 539 bytes .../618a704e234ee6d8a576908cd9c78f8327df3938 | Bin 0 -> 545 bytes .../619a79d515b431061cbecc4c17ee7a601ee62118 | Bin 0 -> 2843 bytes .../61c6c5486fd0330caafaed75eefa355f297444de | Bin 0 -> 860 bytes .../61cf3c15cd19427e66e71fdd0c49d7baeed646f8 | Bin 0 -> 2252 bytes .../61d8266017983e5a558b76dfd0a566f6a0a13f98 | Bin 0 -> 2101 bytes .../61dac4681a5c749ed2fe34d7c220ac98566f8b41 | Bin 0 -> 475 bytes .../6247d00c4fa6e2fbab284903acfd893a32ae7874 | Bin 0 -> 423 bytes .../624dada93d6cb372e138ab0d0da9981ecf4fc351 | Bin 0 -> 1335 bytes .../625ad3c5809b7123fc9ac59bb3207b0c683b29a4 | Bin 0 -> 1044 bytes .../625f82c4699f2e2d7a62639bd4eae9a78828e924 | Bin 0 -> 665 bytes .../6265ac061a27d3ed0a7725b2c4ec4517a9a5e94c | Bin 0 -> 544 bytes .../6265d6f0beafd687e643cacac81c166714fc7560 | Bin 0 -> 860 bytes .../62835f78ff41c6a85973d16e20ec73fa294a29c1 | Bin 0 -> 3156 bytes .../6288a9c43786d1290e4009719e4be28e5eec7ee2 | Bin 0 -> 544 bytes .../62c616f1d00b697b35ee6704e06e7c155dc8af88 | Bin 0 -> 859 bytes .../62d0b103f0a23f56cc90bcd3c8829b96b9fd410b | Bin 0 -> 20 bytes .../62dacf2522a082de534378c942fac4eee120a0c0 | Bin 0 -> 6629 bytes .../62e0b3b35d06287a592bd826331ef2425c56b800 | Bin 0 -> 1464 bytes .../62e211af4116ff2f3f6fd5e4301a0bc3eda1c487 | Bin 0 -> 2101 bytes .../632c797f0552971190c48636c2ebfd0ffb0cea2b | Bin 0 -> 700 bytes .../6334dd2dda9f9a6f620b5ef68a0d77ba7cf9386e | Bin 0 -> 4001 bytes .../635add8a959ea9c5b224d91bf27acd1594b7b2c1 | Bin 0 -> 546 bytes .../639d5d5572fb305ad57c9f4d2487875918aa9cb6 | Bin 0 -> 716 bytes .../63c09123324fa1d3c3b7114c73ecb217a094fc7f | Bin 0 -> 748 bytes .../63c111abac5f03ada44c4f1c06407614a9a8dad5 | Bin 0 -> 1993 bytes .../63d196d68bdb46038b295031ae2995cac32a74a5 | Bin 0 -> 363 bytes .../63ecf1d38ea2016b9afb23ae3afca58d5dd3d1b4 | Bin 0 -> 13200 bytes .../63eda88f556050026cecbab2838db68df8449c46 | Bin 0 -> 544 bytes .../63f9878ffbe9cd019eb9c31119f93e60038706ad | Bin 0 -> 424 bytes .../64111d0aa717252d1fc807fe6176836e974d1b51 | Bin 0 -> 1335 bytes .../6430194324a7a24c024291f436863df47c37653f | Bin 0 -> 112 bytes .../643dfa2d1975be94deee11c5f4fe5f7ba03d1dd0 | Bin 0 -> 694 bytes .../6481c36d92d9ca0fe3614e4d51fe19e4c11c88f4 | Bin 0 -> 539 bytes .../64a869b598ffedcd1aa51728d0609a9a429c8336 | Bin 0 -> 876 bytes .../64aa71fbf19463b62d08ed58abf584b321579479 | Bin 0 -> 878 bytes .../64c63d372985cece83adba25d2eeac22819562d8 | Bin 0 -> 955 bytes .../64cbcfa4099c231c56f0e44e63608059a237078f | Bin 0 -> 2331 bytes .../64f738a679d56249cc30be4dfd2f0c5bd5e28c5b | Bin 0 -> 778 bytes .../651dcc3e47fa5ead53f9b26f911aeb77d5f248af | Bin 0 -> 728 bytes .../6527e0d26192e7deaa20366cf0701f3ec54463b9 | Bin 0 -> 624 bytes .../656cf8150c073e8e8d02deccca01e4139162f3da | Bin 0 -> 3492 bytes .../65855d1b64cd3cc960341aaf8feb7e9f4a48558f | Bin 0 -> 544 bytes .../659084db34790be2cd40eaf8f0bcbbb945178d93 | Bin 0 -> 423 bytes .../6590cd4950285c8566e184ffa0f7ccd09dad53b7 | Bin 0 -> 981 bytes .../659154d8626452caa2f932a2535c31d53bd5fa2c | Bin 0 -> 480 bytes .../6597d5af018d1229e5257a20584976ae62cd91a5 | Bin 0 -> 146 bytes .../65a551e6253213f7838fe1a3d581f66812b056f7 | Bin 0 -> 845 bytes .../65a5c1b565fdc69089dab91218ae5ac64e5e29d3 | Bin 0 -> 478 bytes .../65bc3b3333ef4633f341bf82c67232fdd4f68df0 | Bin 0 -> 1048 bytes .../65cae63e97be467cbc961413f239dda66befd1c4 | Bin 0 -> 696 bytes .../65ce2430b49bc6b723823c09aa935ce841339fdf | Bin 0 -> 3372 bytes .../65f06431a42ef4bb9b8701836beee0c150e754fe | Bin 0 -> 982 bytes .../66033b5c7d3556a787805bdb0074ecf18293914c | Bin 0 -> 2101 bytes .../660cafd064ee9e2dd044ae5a075953798343200a | Bin 0 -> 6640 bytes .../661649978781c7e359a72b02e19ff1d54685d121 | Bin 0 -> 856 bytes .../664a7acb6461717b5f9b6d0a7293d1e73ee2e123 | Bin 0 -> 155 bytes .../664bc8798533a1b6b6be2db217238cd1be7404cb | Bin 0 -> 1077 bytes .../66590baf9e116e67817526c8941a73e922cebd63 | Bin 0 -> 544 bytes .../6663a6502f3ed213b02bf7f03ce6931ae8e2b60b | Bin 0 -> 661 bytes .../666523b595f1486cbd1c80fb691b3cd89de0a315 | Bin 0 -> 16645 bytes .../667a6a09b714e969f0eb82c8c0033fbcb2325c4e | Bin 0 -> 2251 bytes .../6682b59ee17a67401dcff4e81922eddd0febb3f8 | Bin 0 -> 2101 bytes .../66d0e2e70e2257ea87b599ba17cddb82cad84fcf | Bin 0 -> 6607 bytes .../66d155a2a5eadc8283d4e499e9cd63e03ec05cbd | Bin 0 -> 1666 bytes .../67233dc43939b34131ace03468e43ee310046433 | Bin 0 -> 687 bytes .../6747a445de70bedb65e0684c725b7fe8d46ba4e2 | Bin 0 -> 3156 bytes .../6748f8943dc19cb1546c387b27d5aaade3d96a15 | Bin 0 -> 9363 bytes .../6755c61bc253057992529af05152085735a29811 | Bin 0 -> 536 bytes .../6795d08c5833785c97240b15caaf99e44e3d9de8 | Bin 0 -> 480 bytes .../67c674e6e3447e13f26fb535a4be7ce39bee1016 | Bin 0 -> 544 bytes .../67dcbb016cb39eca5471951b0e8f332365bae380 | Bin 0 -> 2101 bytes .../67df09ac5ee96a891c67cc2633252a94a39bbb0a | Bin 0 -> 423 bytes .../67fbcb3f684cb22127e006ee7ba2be11de78e8c9 | Bin 0 -> 2251 bytes .../68010df6fc183b9074c2053fe430e027723b7336 | Bin 0 -> 1030 bytes .../68108fec90edf9aa04ad55a1837d81b7368f51e3 | Bin 0 -> 981 bytes .../6810eab8286981f324b3c2e6a6f9df0a4fae1a0d | Bin 0 -> 3474 bytes .../6822880e383e943192606fd8b044959e1156a7be | 0 .../6832aef642d19f0e7e98a5be7295e4851bd84a1b | Bin 0 -> 6656 bytes .../683a386b092db4b7b3d1ac85f701183c5ea0d486 | Bin 0 -> 2835 bytes .../683cb8fb020c220b365be66b725f0b24bd15cc45 | Bin 0 -> 544 bytes .../684fd8f0d78ff71382946de23c94e97b00f2dbde | Bin 0 -> 768 bytes .../68674ea8938080e5818769cd7c61bd49ed605ae2 | Bin 0 -> 1072 bytes .../687509080c54d16c0300c84f01179ed39d87dbdf | Bin 0 -> 1114 bytes .../687cd65e96be72e8d056902403edf205218202ef | Bin 0 -> 165 bytes .../68b1c665aea7a2f21fd85d492a7414b9949c5c10 | Bin 0 -> 476 bytes .../68b3c04f7cca6260eb07560cf094a2a8fc9359df | Bin 0 -> 6253 bytes .../68eed0410b6905e7058ab10b8cda6a50eca44f9f | Bin 0 -> 415 bytes .../69067284b9c6afdc7726f3336937699c26c4512f | Bin 0 -> 2332 bytes .../690e5ab137a9dede3fcfc10ae60d94e23493cc8d | Bin 0 -> 817 bytes .../69279238545dd60d4336afc3fd940597275e67f7 | Bin 0 -> 186 bytes .../6953ca5df0d9da68e9a4c76c85fb557f4558f260 | Bin 0 -> 6599 bytes .../695fcc8f7753bf71ee51f19613b0e3c8ccac3b2b | Bin 0 -> 6600 bytes .../69a462b9db58b0b63b0a73c2d6855389bc58ad71 | Bin 0 -> 1044 bytes .../69afb75309face6416b5375e08a67bc1b554b330 | Bin 0 -> 11433 bytes .../69b3df6db8ad9b6478876fa2fc868769d26ae017 | Bin 0 -> 715 bytes .../69c3fbcf1fe3c5f6c3b317dd480aafb9a6ea22d5 | Bin 0 -> 1666 bytes .../69c6d70b2e442a1fb52beba8dde05486ec8fe0b0 | Bin 0 -> 667 bytes .../69dda8f513d935147039ae8eb79ab5f5c22241a4 | Bin 0 -> 2251 bytes .../69e1fea45a1e590efaaccf67b171c4e12945fa98 | Bin 0 -> 880 bytes .../69e3dccdf212204ce4f27b3ba4093a067bbfedbd | Bin 0 -> 2839 bytes .../69f05e739541b5641183adab5ff694e775587726 | Bin 0 -> 2251 bytes .../6a0aa36495d584391d3e604383a3e51c30287ddc | Bin 0 -> 544 bytes .../6a2cad97b106c7b46c7dd4a563dbce6cb5ede67d | Bin 0 -> 2252 bytes .../6a803caed7ed942ad844c9dbcccc1f85b242a95f | Bin 0 -> 1336 bytes .../6ab6d6a5664c508e4457e6e031f060b7ec9092fb | Bin 0 -> 544 bytes .../6b11b51454a342e33ccceb3fdbef9b368ad59483 | Bin 0 -> 859 bytes .../6b1bf19907cf72f81eed166a3f63c7aa4d08990c | Bin 0 -> 62 bytes .../6b264d6308b2df6e52a5de37264d49dce0d75a8b | Bin 0 -> 186 bytes .../6b663fb5608eaf3813fa8bee242fd3ea020fc44b | Bin 0 -> 2836 bytes .../6b793b36b3baff6476e1a870f1c7d7cfe4031f2c | Bin 0 -> 744 bytes .../6b8144f5f58ba891d1795baa848153d3221d3c44 | Bin 0 -> 2101 bytes .../6bab82d7a652bc399b9b993cfa01f7804ca72b3f | Bin 0 -> 1049 bytes .../6bd22203e45d97dca39cc912073fa3ef25516506 | Bin 0 -> 860 bytes .../6c2c26ee47d64a17252ab9fe4a1a6e7e6fdab087 | Bin 0 -> 15 bytes .../6c4f116cd88c345c921741b8b15e14ade22c0215 | Bin 0 -> 982 bytes .../6c6c1c5449c11e7c60a4fbf570bf50e1364d97ab | Bin 0 -> 768 bytes .../6c87115a21f2935547a3ab79f4454586a38ffa0a | Bin 0 -> 541 bytes .../6cbc0cff192c1f39b7282831963171a6f45d83b9 | Bin 0 -> 544 bytes .../6cbffadd8719e7ef4b87bcc2baed66e2fa758e0a | Bin 0 -> 1336 bytes .../6ce545e7d0dcae85f5bd399a08cc9382dd960d7d | Bin 0 -> 1856 bytes .../6d1be9a9e141e7e4cc0215de08b8e0d8957bfce3 | Bin 0 -> 590 bytes .../6d48cb1981f9495a48756a9b610181ddc26f7844 | Bin 0 -> 544 bytes .../6debfa290d65362c9372b1e48be9409cc7d02a4b | Bin 0 -> 529 bytes .../6df0c0efbc00c9bf2ebb643b86b8d84bd85e04ec | Bin 0 -> 1945 bytes .../6df0fa3c74c3260e12b263005b740ca8eaa120b4 | Bin 0 -> 552 bytes .../6df3e93b0e079c44d2b5cbb55a97fa9eb19816fb | Bin 0 -> 694 bytes .../6e0b8e25d1511cb94888e70cc7b44475723c4259 | Bin 0 -> 1044 bytes .../6e176d351404f4cc80292ea0bc9db0fb6995195f | Bin 0 -> 1176 bytes .../6e50d7cde2518173741c39bc6b4702503283e9cc | Bin 0 -> 1868 bytes .../6e62da873e498873b6749916f9b956785a131bc8 | Bin 0 -> 532 bytes .../6e7f312cbb5f5c14bcd3de0493cdebdaea464b75 | Bin 0 -> 544 bytes .../6e896271c6744a1a642f8c57f39d5121757e82c8 | Bin 0 -> 2101 bytes .../6e8a8a7d3a100d049f376519f4587e6e14942358 | Bin 0 -> 860 bytes .../6e9327e6669d2294e761eb277bb77b537992fd37 | 0 .../6ea7e571db32f7baab75b70a92a76b28b1c328a6 | Bin 0 -> 837 bytes .../6f0c899b323b55391fa0f650b8b12dd00e62c086 | Bin 0 -> 190 bytes .../6f1ce8ad3093836a8115a019d8beeb3ff91869b9 | Bin 0 -> 717 bytes .../6f1db68dc16262ab4a7f889e455880f9d529aca2 | 0 .../6f5dc93dc58117cd70de188b2fac9a4a96e3b1eb | Bin 0 -> 3262 bytes .../6f60c480baee806ed0192900134407dbbcb05d2a | Bin 0 -> 539 bytes .../6f658059b4e7ceb3cc3dc739960aabfdf90bf1d2 | Bin 0 -> 16645 bytes .../6fac91a775bb75e8f4ceb957ffb7a8ef86bfa009 | Bin 0 -> 880 bytes .../6fcd5d2b8006e357f13b20dac4dbe0b5aac1dd33 | Bin 0 -> 896 bytes .../7025cebff211f49b0f3669f2aaaeeb345461ec26 | Bin 0 -> 688 bytes .../702d222e9df3d12dd879e9ef306d891b81dc8e67 | Bin 0 -> 880 bytes .../708adced582b21f54042e09915220c1ab1eaee8a | Bin 0 -> 475 bytes .../70a222dcd31875547c554767140b608f1a9009a4 | Bin 0 -> 423 bytes .../70c6a49d072f42633d28f7d971c166ce95020763 | Bin 0 -> 2332 bytes .../70d56d7db10d1aec403ec100938a939ac79d7469 | Bin 0 -> 2005 bytes .../70d713774b6c6ec3d97f4266d15aea17bff6f96b | Bin 0 -> 2013 bytes .../70e9e943f8ec7620c37a04c51e3284278a0c9d20 | Bin 0 -> 853 bytes .../70fbfdc26fffc206171e7196378fa3be2b2b1ffd | Bin 0 -> 694 bytes .../71470e2bd81b1c0c01328ae34455112c4665b0b4 | Bin 0 -> 2908 bytes .../716b469db79aea803951febc763e79de9ad99d5b | Bin 0 -> 685 bytes .../7182672bba0d1776ddd387fa19ceff26850232a7 | Bin 0 -> 696 bytes .../718bc0b50eeb8129f64328bea9fe679c6a0780a9 | Bin 0 -> 955 bytes .../7190e6156a1cf612cf9eb8bd0c39990ef13a5355 | Bin 0 -> 8139 bytes .../71968a1bc330b18370f71624c1240c01380f197c | Bin 0 -> 16645 bytes .../71a6a7d97752d1ad07fb2f8394ff415d752d65c6 | Bin 0 -> 210 bytes .../71ec13eb76f57919ec5a96fe4c2a6a3e3590a8d5 | Bin 0 -> 1844 bytes .../71fcfe96fc232e40e56af7bce9c6c19c27c8c3f0 | Bin 0 -> 845 bytes .../7203f7b631c82414ed32ae675b4c2fb790b84995 | Bin 0 -> 3166 bytes .../72053bd2180eabcb02668282bd59361b1efec82c | Bin 0 -> 544 bytes .../7210660ff4017eed30c341c8bba45864d991f8b8 | Bin 0 -> 194 bytes .../722f502e2ca0b06578196fdc88cbceae2a77d6d0 | Bin 0 -> 544 bytes .../72326c051724f369c7abcdedb03a615cf3eff978 | Bin 0 -> 832 bytes .../724cebdf1939017bbf550ab877137f79fa67e270 | Bin 0 -> 622 bytes .../725187002888c50d040f456b8d3f9efb3e1604b6 | Bin 0 -> 860 bytes .../7267b8769554da4d44e2aa299fe8ea4f90104f4e | Bin 0 -> 428 bytes .../7284b58a67fdc749b8be79e976c1bb6f5fccbba8 | Bin 0 -> 981 bytes .../728aea6ae6a9ba502620179c4f7b97e97af25adb | Bin 0 -> 624 bytes .../72985aaf009b17a0cfda2b8ac9bb606437a5665c | Bin 0 -> 687 bytes .../729d25843ad69664dd3096c6fe21764562707c18 | Bin 0 -> 956 bytes .../72ae3e33974e6e96be2dfb9a4abbdc9e22430cb3 | Bin 0 -> 3207 bytes .../72c20f93b63a45b5d6a8df57e3e76dbf96763d78 | Bin 0 -> 36 bytes .../72c442861cc01cd40b8c404a261ae70e0049deb6 | Bin 0 -> 860 bytes .../72cd2dd6d0ff7e481bbd8d8e5b2d9322f45cc589 | Bin 0 -> 16256 bytes .../72d0f2452fa8a96174fe5bbf2f1786ee20c517c8 | Bin 0 -> 2835 bytes .../72e6207bdf6c1d360074e3c1f48f6fe7da9bc8bc | Bin 0 -> 475 bytes .../730c04a002846848969d25b98d7468b0d35e5c68 | Bin 0 -> 607 bytes .../730faadef9685e36b22b8a447e2cbe52af1de6a3 | Bin 0 -> 2252 bytes .../7311df1ac10b2734a808343bfab753732d3960d1 | 0 .../73183c15fcd115d449f35b5878b2361ac769f54a | Bin 0 -> 529 bytes .../738fcc82adbc81685c4a239f207b25e19f887bea | Bin 0 -> 955 bytes .../73963575fffd9277c474bce6cb3544f1a718b5fd | Bin 0 -> 423 bytes .../73a7ff3af6b99a3616cd80997a60659229867c5f | Bin 0 -> 544 bytes .../73b4854764129f8ee12d929dcf447cc27e4461ca | Bin 0 -> 363 bytes .../73bd1073b4e85766e4c495fbd49a1fb928475048 | Bin 0 -> 432 bytes .../73c9b077c54b048d22f7341942915b18502bdad1 | Bin 0 -> 3155 bytes .../73ff8c48806d9e67d4ef45f51ef9ef8243db4f90 | Bin 0 -> 955 bytes .../74016fcdb97421f530c400e4d5d448ded5031863 | Bin 0 -> 1077 bytes .../74109d3ae182ee04abf0540ef373ed07857f3f16 | Bin 0 -> 2101 bytes .../74540d654ac511b51614a072e21c010a5078c204 | Bin 0 -> 2101 bytes .../7478079a5d905013680768609cbe7fdf24566a12 | Bin 0 -> 3261 bytes .../7484bfa89f250ac29a10eab4cde927d3a72fff67 | Bin 0 -> 784 bytes .../74a63ada3081170b51a81c9a05ebdafbb2864447 | Bin 0 -> 955 bytes .../74a8583d0fd59d7dc4be0318522fb3be32bb84e3 | Bin 0 -> 1336 bytes .../74bc118b2e16e09702cc2be176b943d030f42e46 | 0 .../74cd8d18bc053a60ffa1adde77d94315d9cb498c | Bin 0 -> 563 bytes .../74d95a1769df10ed725be1c6c1717400d8f2fe77 | Bin 0 -> 424 bytes .../74e0f3be6c0b6721e8183a9049877b461e64b087 | Bin 0 -> 601 bytes .../74e2c56599ebc12b7a129a96358d885fdf75d5ef | Bin 0 -> 175 bytes .../750d0b40bc02be3126d91495fed74ee022830860 | Bin 0 -> 1030 bytes .../7534c5d8806f0bc4f4be31665c4402071fe5e436 | Bin 0 -> 1044 bytes .../753be213c61c6413588ab03da422df8ab8e8f561 | Bin 0 -> 112 bytes .../755d76a29b33adfd5239275d86f9b8b1cbc6067f | Bin 0 -> 64 bytes .../7561ca8d1572b0f475436696de8579c3c7e563c8 | Bin 0 -> 856 bytes .../7566b04ca106a919dc4cb19104578f5d8a72e469 | Bin 0 -> 2251 bytes .../75762ea505477f546d8723fcade6b9e12685bd9c | Bin 0 -> 956 bytes .../757a8153b1b0addb07206df85f86e02bec23c2aa | Bin 0 -> 539 bytes .../758e74a2bd00387a332cdfa86dd4a1fe2f7fd319 | Bin 0 -> 1592 bytes .../75a8587720fe8ee931dbd89bd2f366198389120c | Bin 0 -> 36 bytes .../75b354f899ce11b79f65a87f132a5fb12b2246c5 | Bin 0 -> 919 bytes .../75be41563c353bb887460bf255c65c06d841b323 | Bin 0 -> 6762 bytes .../75deea4226c2bffba1d1403a44b1b94536308dc1 | Bin 0 -> 6608 bytes .../7608afd979a7b9cce6f0b04be5709e968b04658b | Bin 0 -> 817 bytes .../761f7d2dddf1fe63b93c770515bff2f482918ccd | Bin 0 -> 690 bytes .../76251d1d1ae6edf14ccbc2d6bdf40637efe57fc2 | Bin 0 -> 905 bytes .../7637e12eda72a17b8ab78b3ea0515a0cc5cfa6ad | Bin 0 -> 718 bytes .../763d816cf4d5ee685f834b4f6ddf17b17eff4479 | Bin 0 -> 545 bytes .../76454fa6203612451d5f1b9b17b34b2972a84cf2 | Bin 0 -> 423 bytes .../7648b066d3c4f5cca733d460b09236a4a7d616aa | Bin 0 -> 120 bytes .../764ce6bdd3253476d7e5fa42af7c908ac76642b9 | Bin 0 -> 691 bytes .../764d4ce5a03d6cbaae89865f4b4160e60d386672 | Bin 0 -> 544 bytes .../766ffc7fea84daaa914a9f8c045512d383765653 | Bin 0 -> 478 bytes .../767d253c5b9cb093fc533f6aa2ce2546b81eb002 | Bin 0 -> 1040 bytes .../76928c16815e4565fc6239561cc3915bb8cb7d72 | Bin 0 -> 341 bytes .../76a97bdd913e04eb9984c915aa817e0a3b4e77ca | Bin 0 -> 3501 bytes .../76a9889141ccc0478691c971ef9450f890b50fc8 | Bin 0 -> 860 bytes .../76d51598e263d06dfdcc4cfb0ad0231f79ffbc64 | Bin 0 -> 867 bytes .../7710a808e990b562b8c7de563a0e758a706ac5c4 | Bin 0 -> 539 bytes .../772a6443f8cab9ab694c7b612d8d5f17bc45a53a | Bin 0 -> 1243 bytes .../772dea3c069917a43fe6f264cefc2261345ca6f8 | Bin 0 -> 544 bytes .../77461e41ea64959b68798f26601ceb52b26ed1ba | Bin 0 -> 685 bytes .../7758a39c482075635ab052267492ae5639f2148a | Bin 0 -> 3154 bytes .../775e99b8edda0608b0d44fce4532cb937c645dde | Bin 0 -> 541 bytes .../776f1074af78661eb93165566533653804930394 | Bin 0 -> 53 bytes .../777228b2f7cfe0121a0955e93f3ea0e0bd6bbdb4 | Bin 0 -> 546 bytes .../779e21bf14f0ffaa564e64527460d532b12f6142 | 0 .../77a455df9b83e943accca9e8d922699f0477be9f | Bin 0 -> 844 bytes .../77bffc6f487f044f493fe66aa7f84f210f8b9087 | Bin 0 -> 2252 bytes .../77c708949fa3cbcd16421e5f780371953e5dd11a | Bin 0 -> 423 bytes .../77e0812d8cdebbff9271481d9e2f9006fe657b56 | Bin 0 -> 532 bytes .../7800615b29996eee991ed88c87622bfab6df634b | Bin 0 -> 955 bytes .../7848dda5afc52b6d29eabd80996d5391e1b4249f | Bin 0 -> 437 bytes .../78496e9afaa4fc130e88431c6224687cdb34dbca | Bin 0 -> 2251 bytes .../784dd072b3bd9fc3fb7876dc3036e1d50bb5d62f | Bin 0 -> 364 bytes .../785b47cc676e125942c55469dee10286b2ead181 | Bin 0 -> 7034 bytes .../7864c9ed2cf65d7eaa89ef289e317c316bc81fc9 | Bin 0 -> 536 bytes .../7879ace9ff536f40f4fb9c4251facbdd94446148 | Bin 0 -> 1845 bytes .../787f85085ce6e5632144f29cb3dbf33b1ea22ca0 | Bin 0 -> 743 bytes .../789dbf6aeacec0fdc8d1710a6d4ad147994cdc95 | Bin 0 -> 544 bytes .../78b6fbc42be8bdc1231ed318c99bed7da92e7d2e | Bin 0 -> 544 bytes .../78de135a17f288d8179be92be068b9fdf1fe8972 | Bin 0 -> 782 bytes .../78ea8988fa0b1cc940728f48e1506e00c3c364c6 | Bin 0 -> 537 bytes .../78ef57aeb6861b6fd95e8e4c079e754844e986b9 | Bin 0 -> 1563 bytes .../790e1ccc87f2154465439fce6322611b1f14eefa | Bin 0 -> 15762 bytes .../7917768b218f45d5e7b167812a8c5e11d2e807c8 | Bin 0 -> 2134 bytes .../7957864b246ce2100fc14909ece0c78ff0cc9666 | Bin 0 -> 695 bytes .../79b9d121c8be89e9460be36bc06e673c3ac10ee5 | Bin 0 -> 1032 bytes .../79c34605ba5a34febaeadfa690720d985b94e787 | Bin 0 -> 1335 bytes .../7a105e5295c71c0aea41a65bdaea6da8445d3010 | Bin 0 -> 768 bytes .../7a109eaa6145189f944e241efb3c4564d388f2cf | Bin 0 -> 423 bytes .../7a1354e4fee5731fd737c47a50a9930661932acd | Bin 0 -> 853 bytes .../7a22a1bcc58f696b828b2910c11a0fd2c5a037fa | Bin 0 -> 563 bytes .../7a2877b16dc73a6149cd6879cd08865feedc649a | Bin 0 -> 840 bytes .../7a324de5dab0693d6d4d0bce5ac11d4ab62ee66e | Bin 0 -> 701 bytes .../7a37ea6c98a9de58a5cbfad0b50d95306d92fc24 | Bin 0 -> 1336 bytes .../7a5efd1bca1282bf6bb38e09893704452c5ee5f4 | Bin 0 -> 423 bytes .../7ac087086f0b5c3c2e477e5eaf696f5e80d4f4fe | Bin 0 -> 860 bytes .../7adaa2dcbd0c3e15a3c1653bc3fdaa6f5e0d7751 | Bin 0 -> 166 bytes .../7af40d26bc8b5a9f99fd686beff3d315d0e2fe1c | Bin 0 -> 3155 bytes .../7af988b1b8837044b2a3894c3278d21b3d2b0632 | Bin 0 -> 545 bytes .../7b17e15dd5f0d28a997d43b66189b0bfc65090cf | Bin 0 -> 549 bytes .../7b45539f4ab4e6bd4abdadee532b340c39882757 | Bin 0 -> 1208 bytes .../7b6b7b8fac5c7e0dd3e31a8fc23d72ea61b19559 | Bin 0 -> 601 bytes .../7b9fe069ec730861cc81800ba62b7707691f66e7 | Bin 0 -> 475 bytes .../7bad14e433dceb92a08c1b8f1611be747fe85594 | Bin 0 -> 6599 bytes .../7bb334b03988cb1fe62cf08b36b084d7dfa6b410 | Bin 0 -> 783 bytes .../7bca20a878192c482989b3700f6a50b5e70d770a | Bin 0 -> 50 bytes .../7bd1c5456e5bfa15d866ccde29bcc6b3799182d3 | Bin 0 -> 544 bytes .../7bd22b74f792f6d1b54aa2f9bc538afd9822d961 | Bin 0 -> 601 bytes .../7beb951d0b7cb6b80300a7afe4586fa0803c9ca6 | Bin 0 -> 845 bytes .../7bfb9e098941ee83753b36f0158349d7bc8743a3 | Bin 0 -> 860 bytes .../7c103d11bfbd51472b1ec76ec57fd9901b89782f | Bin 0 -> 378 bytes .../7c1c64986806d83b5e2fda4a7ab7351daa4de813 | Bin 0 -> 92 bytes .../7c45c53ec89bb665d647e80dd407c652861aebbb | Bin 0 -> 1109 bytes .../7c49625f6fdabe52ccb9633e9e769fb372d31463 | Bin 0 -> 1168 bytes .../7c71e0ee961d738b7dcb38fcdc9f72a2cb149e55 | Bin 0 -> 2331 bytes .../7cbd7633e693ed95c9735e8c9fcb27abd6914097 | Bin 0 -> 428 bytes .../7cd61e2bf4a4b2b229bcc9382e05c8c8326a68c6 | Bin 0 -> 1175 bytes .../7cdfd647813443b228a52b9a374b1755c368c4aa | Bin 0 -> 935 bytes .../7cebe50b2bd66b94fa002f846fa0ad17e8137c11 | Bin 0 -> 1335 bytes .../7cf26fd59bd637b6fd77a9eccc48456217ab17c9 | Bin 0 -> 3160 bytes .../7cfd556456f6849d2f6a4162afa2bba1907d7728 | Bin 0 -> 3160 bytes .../7d1623c6e9fb0c09e01da32fbf3637a25593aeeb | Bin 0 -> 6599 bytes .../7d16803a5d22254e7ee0b919f0bc9998895aa3ac | Bin 0 -> 363 bytes .../7d5226a3d02a667f7b33f875ddfb3f4084315efe | Bin 0 -> 2251 bytes .../7d573e0cc03214778b06589922e1b702cb285bfa | Bin 0 -> 1346 bytes .../7d74b4946de11247b869dbe46002d0faf574ead3 | Bin 0 -> 529 bytes .../7d903e207ee324d6b70f1df58e0a8a850375a2c9 | Bin 0 -> 527 bytes .../7db159e27b959d69769d42220768c85ad6b0325d | Bin 0 -> 903 bytes .../7db926161f8e15089919a47fdc989544d348ff64 | Bin 0 -> 1044 bytes .../7dccf3dbaeaa38f8ca5de3abd5105f5677246435 | Bin 0 -> 685 bytes .../7de7fcae5f4b76cfe7f1eb95a280e8260329fcb4 | Bin 0 -> 1868 bytes .../7df2c6ec04ef239f61ebbd917fe56017c0375bf8 | Bin 0 -> 1030 bytes .../7e07315fe7a149b1bcc3b6a8d3bd9f3ebae18d62 | Bin 0 -> 903 bytes .../7e088b22324f85775580540d95aec10f29a7bc03 | Bin 0 -> 530 bytes .../7e0a84a7d5174c2dcc2ed6bdffcc4948b9deb5b5 | Bin 0 -> 1071 bytes .../7e0f6570af80bb4c0d18f648d100eb4f1a933e45 | Bin 0 -> 768 bytes .../7e11ef9859de7fbbbc17c5ba2620e20a8cf6c582 | Bin 0 -> 527 bytes .../7e1f11363a617be190fd84a34c44e79c9780af6e | Bin 0 -> 544 bytes .../7e34109c72bf75011a2433879ead37b9446e9df1 | Bin 0 -> 476 bytes .../7e377fc01cc2d6de8f247c1009268e184300ad25 | Bin 0 -> 428 bytes .../7e3b08b064b559cd48d74ef3c9a8af3ec7be66ce | Bin 0 -> 547 bytes .../7e464a6c2492c31d435e412374976d1990cd3dfb | Bin 0 -> 476 bytes .../7e86128ecbcca7cf46cce9d1ed46a5608fcbf751 | Bin 0 -> 622 bytes .../7e88f7cd215f0d89b407386f80749e7c43d08939 | Bin 0 -> 9301 bytes .../7eabe286089144ad2b5ec85ed89b55911acfd2ff | Bin 0 -> 544 bytes .../7eb6dbded28196211347264642828399519d6474 | Bin 0 -> 663 bytes .../7eb7c93722e62e67aad69008bb60eeee54020187 | Bin 0 -> 3154 bytes .../7ec9dab94f747840b9a683ef30e7f8eb5d8fe785 | Bin 0 -> 1511 bytes .../7ecda7bd630181b83047bc34262e61d8d3efe350 | Bin 0 -> 6599 bytes .../7ed72bd8f9159af84eb7a801a6e9a004f79d2298 | Bin 0 -> 2101 bytes .../7ee680010d4e4cfcfdb2d3d5fc002a96fa965c89 | Bin 0 -> 70 bytes .../7f291b4ca4836bdb0225066dbff673d99569e5ce | Bin 0 -> 363 bytes .../7f3ffb7c466ac920adddac9aeef14bb469fa387b | Bin 0 -> 784 bytes .../7f43604c405bca4dd41aaf31112be2b30375547a | Bin 0 -> 2101 bytes .../7f665e54f7b26e8081e85c2993b45288aea17a30 | Bin 0 -> 53 bytes .../7f79e5f910c37363321c1d8ef3a63a977b7c040f | Bin 0 -> 688 bytes .../7f7c85ec97a11cc513ca4af2124bd10e47c9e663 | Bin 0 -> 544 bytes .../7f817d0265c7b47aaaf05c70e591f8a41593aaaa | Bin 0 -> 1192 bytes .../7f87afaadec5937383f2a58ff56e6318238e78bb | Bin 0 -> 475 bytes .../7f8e7e03756fdc9c5fa04a157c63b0a6ea62e6d0 | Bin 0 -> 87 bytes .../7faa3d3cfe0da9f659a917f65896d86497c5b41a | Bin 0 -> 2331 bytes .../7fc8aff1685a2549e1d5f9d14c029ef8d2b0f588 | Bin 0 -> 17 bytes .../8005840d8b47a9a0ac70de098fbbdca1c67a53e3 | Bin 0 -> 1697 bytes .../8006080a7eda4cfecfe758e01e2e5b6a1e264b11 | Bin 0 -> 633 bytes .../800bd03706f4df76b46d1a1ad14e325dc056642f | Bin 0 -> 423 bytes .../802e443348f93619ac37401f405ec3690a561c06 | Bin 0 -> 860 bytes .../8065853bcf0f33c20ff534c0a9ad659d3d7096a5 | Bin 0 -> 601 bytes .../8088287150e594999c6eea9d13752de7befb5f68 | Bin 0 -> 2005 bytes .../80894fde6cfa385717f675127fa1ee75c001f882 | Bin 0 -> 1879 bytes .../8096ccd6c2258a72ba6b27651e9c96edbf825b5b | Bin 0 -> 190 bytes .../80b016bea274cb05470930325d421f75bddfe1ea | Bin 0 -> 806 bytes .../80b43069aec45d245f247ea3877ea5e9f0393cdc | Bin 0 -> 853 bytes .../80c668ece8b4b505f0f7a2aa319f3b2f4e015084 | Bin 0 -> 53 bytes .../810b85962927545fc269202560ad4098297e7624 | Bin 0 -> 544 bytes .../812d3a4277546c5918c644a008e2999ba63b533d | Bin 0 -> 544 bytes .../81530286fba20315ee52653fdebaed2e36859a33 | Bin 0 -> 1367 bytes .../815f0f14986eb99682a63d0a46b30f31db72cda0 | Bin 0 -> 3154 bytes .../8174d250bec23cdfadc2d035a58b84b86d702bae | Bin 0 -> 478 bytes .../81a18d930cccf9397f94205a52e00baa771ff9b9 | Bin 0 -> 880 bytes .../81ad16d26f1adb17aea0a7e73f2536abcd18e5cf | Bin 0 -> 2252 bytes .../81ae06eafa2de6c7f566382bcc762990c094810d | Bin 0 -> 544 bytes .../81b70d3ea4b4bc0557a7bdff776c9409f86f1a3b | Bin 0 -> 1335 bytes .../81b9d62ad892450ae4a06878708cac206c93222f | Bin 0 -> 424 bytes .../81bf92815e401c53d6ecc50767dfe7adcd069f1b | Bin 0 -> 74 bytes .../81ccb7b84d4d6105243d1e539907dafb3ec2e5f0 | Bin 0 -> 2251 bytes .../81d3d129e58781e592fd9caba2b7b16ae83826b3 | Bin 0 -> 694 bytes .../81fe8a107ac9bbce0b6835fb33583b037741b168 | Bin 0 -> 1175 bytes .../82091bb3e716b8255f914a83639f577e92d782ef | Bin 0 -> 928 bytes .../82312267216f5d6ed380fdeed37dc35799a4a09e | Bin 0 -> 3154 bytes .../82509a8c625aa97ca892f2a44c824a05a2296af6 | Bin 0 -> 184 bytes .../82580ae8c99b308569d36228d76d71d67e59b884 | Bin 0 -> 872 bytes .../82af97e0bfcb0a943c3ea9a107c477c3b359bf0c | Bin 0 -> 541 bytes .../82c827530544e5a474636dbd83ef67bff233f452 | Bin 0 -> 363 bytes .../833da2974da455f3b04a2bf7c9008e4e4915f247 | Bin 0 -> 475 bytes .../836701bebc7cdef6a5b4c5e121b87fc8ffc58481 | Bin 0 -> 415 bytes .../837ba875bc23e55390a4a8364c4de45c73d0b3f3 | Bin 0 -> 829 bytes .../83bbe95b21e77fc9193181eae0ed1a0294fe56f4 | Bin 0 -> 608 bytes .../83c906318c6a386c33112f69fc08b1d96be7adb1 | Bin 0 -> 934 bytes .../83cb9e17d4232115ba6dbd27caf02eacf6ef18ac | Bin 0 -> 955 bytes .../83ea0165644a2db58a78cbc768936c02d16589f6 | Bin 0 -> 423 bytes .../83ec991118f112d000c9c4440f175206f51812b6 | Bin 0 -> 858 bytes .../83f2176b46f612e4584476a19f0a61aa58053a2f | Bin 0 -> 1335 bytes .../842f6853dc86bab8623f505a0bf9a3af0a272290 | Bin 0 -> 48 bytes .../84300be4bf4dd042edc139feddeef21cad7eddaf | Bin 0 -> 62 bytes .../84659835e852e64fc4dc51b86bd65c01f2120449 | Bin 0 -> 665 bytes .../846ca68b5b40b38630cfe7010a42e91b7a005ff1 | Bin 0 -> 867 bytes .../84786169bcd9c31529370354666f169ab985efa8 | Bin 0 -> 880 bytes .../84a4d812227d7f4915221fa9c74a5afb1955570c | Bin 0 -> 3154 bytes .../84b27f74329de3c57a72e95be25af9a722560f17 | Bin 0 -> 860 bytes .../84e64176faa898281ad70003ac33718f22aafa64 | Bin 0 -> 450 bytes .../84f25dd6ceef48d2fff2f6d1641cc735034eb005 | Bin 0 -> 480 bytes .../8515110a0d9177e12d38c01bc830a053f933bdc9 | Bin 0 -> 866 bytes .../85246176c0dcda88a3388cccf1586881ee1cf430 | Bin 0 -> 2251 bytes .../85270bfc4ac827eba8bd42da919d8e0b56063a6a | Bin 0 -> 57 bytes .../852d80f1c466d8eaf0619fa385f9a342323524d9 | Bin 0 -> 696 bytes .../85345d9b6656c58ca7ca7fa36a2907d99b26db28 | Bin 0 -> 53 bytes .../854ddc6efa00c86faa27c2510d4f57c27b88867c | Bin 0 -> 2251 bytes .../855e5859f60162c3bce02dad3ea7dee1fb80277d | Bin 0 -> 2251 bytes .../85935205125e8e60b308c2d17a2ed465c823ef70 | Bin 0 -> 1868 bytes .../85a347fe6e0979a1ebc799bc83a364a35c8a1a71 | Bin 0 -> 2101 bytes .../85dd333dede4cdc0e38f70ae664636a6fb79fae0 | Bin 0 -> 539 bytes .../85ec97632cfdf439d1e778be5bedf4d1c8695f7f | Bin 0 -> 8768 bytes .../85ee4dd36a737a523b838ab76365fdd7af8e4dc5 | Bin 0 -> 1044 bytes .../85fc28c0749555aff7ce8b54b6ad294205efc127 | Bin 0 -> 2332 bytes .../8618d9c8d141f5a8f52ee885a76aca16f8bc4551 | Bin 0 -> 868 bytes .../86218288c0382566970888f8e87e27358fde005d | Bin 0 -> 955 bytes .../863511e34f9dbb709165919fd803cb302dd08699 | Bin 0 -> 6 bytes .../8650e93278abb62fe5aebe333c733ffaa3fef8d7 | Bin 0 -> 955 bytes .../8652b7f6a158ba039bc5283460a9e4798576ceff | 0 .../86848a24c49c31c6987974d1cbd2b106697d8d93 | Bin 0 -> 432 bytes .../86a11bb86cd4ee90c72761ec511e028c0253a6df | Bin 0 -> 1175 bytes .../86ab1fd145c9ad738cdbf09c222357a661928868 | Bin 0 -> 1044 bytes .../86e4db3df7a75080593162b5d7c6948d39787976 | Bin 0 -> 16645 bytes .../86ed9333ca25f49833981ea67e3ea10d1bd35e3e | Bin 0 -> 553 bytes .../86ef883c3190c41f03cc7601bb5ad4546a21b6ae | Bin 0 -> 1335 bytes .../87362de5a0e787a87b03df6fbaf9e05de0045d55 | Bin 0 -> 752 bytes .../879770db7771ac156ae7ff18f2201bbba3b4e29f | Bin 0 -> 536 bytes .../8798b62d9e0250713d81eba8734036f5e3703c3b | Bin 0 -> 1154 bytes .../87cd2689ad8823327cc82571025d88134975d4d2 | 0 .../87f136d02b626c46670cc84746740b6d2015eba6 | Bin 0 -> 1138 bytes .../87ff5e5da7d4e445293a00e864c6326604b8ba8e | Bin 0 -> 2251 bytes .../880e6e87d086f249d4906ab0e39807d37f6486ad | 0 .../88256c23c8dca4f4b3c3e00277efcd7ccbdbf83b | Bin 0 -> 751 bytes .../882de7650d969b99d688dead53dd91f8f12a7e23 | Bin 0 -> 1868 bytes .../882fc1e12e2bf996014142a0050c1e02708b26ea | Bin 0 -> 860 bytes .../8854503d42dc4f45f3aec2fbde4a395cf571f3f0 | Bin 0 -> 860 bytes .../8854cdb668ae2aad841f709b9bc02604bc993a10 | Bin 0 -> 50 bytes .../88561a552c98ebe63ac0b7e9c14d3ab76a46a824 | Bin 0 -> 1273 bytes .../8866ff2d3523ec2d93c90c300868c9cd08b7a753 | Bin 0 -> 955 bytes .../887b981a10c863e56186ec93749b66992200e365 | Bin 0 -> 3436 bytes .../8895aa11c164ab6ebcc4bdc51b9d13f270f429a5 | Bin 0 -> 363 bytes .../88a318dd25a72a38940029bbed6f8cd8d62711e0 | Bin 0 -> 934 bytes .../88ac844afb095902586d821ccb99aaabd4f38628 | Bin 0 -> 423 bytes .../88d08617dbd00886e85c0c95524e45f8ad22ed67 | Bin 0 -> 981 bytes .../88d8dd3ac9d2c5145c9e678132e686c118e08971 | Bin 0 -> 1199 bytes .../88ee8df05f5a10f9c21f91415586a58162028641 | Bin 0 -> 432 bytes .../8937c14f810ee100b68ac804b349e821aa2871df | Bin 0 -> 1161 bytes .../89465be06a694d1268447fa123e6cb5aeab40fec | Bin 0 -> 539 bytes .../8994f9d3cd7530aecee769e5ff6394ee36f71456 | Bin 0 -> 860 bytes .../89994228dddd6c94de288ba39c1b1dd3608f9e63 | Bin 0 -> 115 bytes .../899efd763078bc3f40ff20c37148761414c5495f | Bin 0 -> 478 bytes .../89afdfd860230f2a6d7285f0d70a9975babfd0f1 | Bin 0 -> 544 bytes .../89b0977c02e5fcd918547bd999843bf0f0676f50 | Bin 0 -> 62 bytes .../89b5a3cef2468fab3659b4efd38e340963c0ca50 | Bin 0 -> 476 bytes .../89c48b81673a00ff46654fdb4e7ef4f9a71e1d57 | Bin 0 -> 2101 bytes .../89f1fd15064ed7d2b226a7365ae202cf1dc7d00c | Bin 0 -> 696 bytes .../89f94628d246d4ba357f2ea779e6db94d5afe9d7 | Bin 0 -> 541 bytes .../89fbbfce741e85c71819bd0a123307c7df82af06 | Bin 0 -> 476 bytes .../89fdaef5066c7d567cd941ae36b92cee67ad09c6 | Bin 0 -> 2101 bytes .../8a31c65000afb4b3b3bce9ed45e000fd2829ec0b | Bin 0 -> 2926 bytes .../8a39fcf863813a19959a6190c39d7d6c44527ade | Bin 0 -> 688 bytes .../8a4ab3575d18e2299b38287e6da94dcfaea53ad9 | Bin 0 -> 435 bytes .../8a532adb13fb66bac60742f30c3b1d0b92648c11 | Bin 0 -> 3107 bytes .../8a6d685bafba0b09a136d2f253c7e06cb389df12 | Bin 0 -> 1175 bytes .../8a76072faecb15d59c136ce976cabf01fe0077e8 | Bin 0 -> 100 bytes .../8ab574c56a6a9b5dd0dac0330902b72382aa326c | Bin 0 -> 690 bytes .../8abd2787b83a62311dab178b44c8d139269dbe6c | Bin 0 -> 6636 bytes .../8ad96c51ae9eba1576553b48f273aa1c8c309202 | Bin 0 -> 955 bytes .../8adfa2fd98cee407d118258cfc9b20ba989eacc9 | Bin 0 -> 544 bytes .../8aeaefdb04030417caa6f7de734736c2b3950f86 | Bin 0 -> 1040 bytes .../8af8ce482084cefc956aae4ff803605e667639eb | Bin 0 -> 563 bytes .../8b2443aadbcf7677aae77de73477833394e93d04 | Bin 0 -> 4361 bytes .../8b6989e8f6e43a96a308ceb5217be5022c5493f4 | Bin 0 -> 69 bytes .../8bac0145d4941ffd7a956dd8ccbf5078739cc878 | 0 .../8bac81c5d1e222f649014f957ca179d2bb4a041a | Bin 0 -> 2835 bytes .../8baee9087cc77f5b9cab27b6f537c2e82f9b2ce1 | Bin 0 -> 475 bytes .../8bb7ec509606de06287bb0e8c29980b19aa67093 | Bin 0 -> 934 bytes .../8bc30b0ea95b3a86e3d2eaeb14d688c10ddbe11b | Bin 0 -> 563 bytes .../8bc60f90aea4d97d3ad268217a510423259d1906 | Bin 0 -> 57 bytes .../8bf45f3387b829ddab43d65eae81c67c784383d8 | Bin 0 -> 544 bytes .../8c0469c376d0f3b38ac6a8131dfc754196048e2f | Bin 0 -> 363 bytes .../8c6b20d512790058a3456ed74a08f382eb8d2bec | Bin 0 -> 688 bytes .../8c7ce3e37b525b5eb6b47fa878535f0830cbbede | Bin 0 -> 3492 bytes .../8c7ff86fa53a00b5712251a3160d9638d95a80bf | Bin 0 -> 848 bytes .../8c91d70b847cf17cc5ba9c9710e5112bfa2eade8 | Bin 0 -> 868 bytes .../8c9c073d7e6aa81d8368d6abb4a19dae60db1e46 | Bin 0 -> 6599 bytes .../8ca4e1927fa94e6b697c94a87c02e4da38cce5b5 | Bin 0 -> 480 bytes .../8cd10be9e6fc7c611dd9affe18382dc4fb83a856 | Bin 0 -> 545 bytes .../8cde5c0c27b69e33808d0a353e3b1f003b0ea086 | Bin 0 -> 2005 bytes .../8d22d7ff356b5e8ba603f1c9a03219f0c519ba4a | Bin 0 -> 2251 bytes .../8d56302b5c690194dcb908a57566ab21b05da0bf | Bin 0 -> 1077 bytes .../8d60f89f01471a99e27186d20615aa6a178f4e0e | Bin 0 -> 62 bytes .../8d635904c9bf834fcfbd3c633a8a4e8e336dc819 | Bin 0 -> 3154 bytes .../8d69f19e0ee474b2f8e6199a09fff2f05203be6c | Bin 0 -> 2101 bytes .../8d8591547b941ade208ff5caf82067d0d57de40d | Bin 0 -> 6599 bytes .../8d9c954ce7597d83c383b21c090cb8d37288654f | Bin 0 -> 3154 bytes .../8ddf39f3b9d85a0687754195108fa27b36725ee4 | Bin 0 -> 344 bytes .../8df10aab698d3018ed91364a9e738b8a44efe373 | Bin 0 -> 476 bytes .../8dffdc84f4a44ba215a312286ad39c183d482914 | Bin 0 -> 519 bytes .../8e040836e8b1cc1bf9e6c97d9a7680e49b706286 | Bin 0 -> 681 bytes .../8e0761c5011d4a5a43e03af86d7ad8b3968c2860 | Bin 0 -> 544 bytes .../8e493b8b0bd03f4f0753420569ade537b33617fa | Bin 0 -> 27 bytes .../8e4e7a3c9a9c20fa932212cbfb1f350217e5d7fc | Bin 0 -> 522 bytes .../8e62d6dc849dbbd5ee93a9e967c3adf3f32d8764 | Bin 0 -> 2490 bytes .../8e8a57e2e8d2faa1e450fb76259f90043c21aeb9 | Bin 0 -> 2251 bytes .../8e90b3fe580079ccae2ce7191141cda56859959b | Bin 0 -> 687 bytes .../8e93551f0a6dbcb9bd8a7a749374f9b9d766e8d0 | Bin 0 -> 479 bytes .../8ed599b336b3ceceeea9a6a3171a5c7be977fa81 | Bin 0 -> 880 bytes .../8efd566d0fd80ab15fb02d1a020e7f1538214db4 | Bin 0 -> 62 bytes .../8f0a7ddbdaf772001db5700d821a1c8911d5f381 | Bin 0 -> 2101 bytes .../8f29d3d8fa138c57f52024f042657e2af48efd7c | Bin 0 -> 934 bytes .../8f5c999209f88a020bfb1232337249aa5e6521a4 | Bin 0 -> 981 bytes .../8f8c17c2ef6cfdd95c974d9ef1995ea77f6178f4 | Bin 0 -> 620 bytes .../8f95b99ad1e41b8f91bf45165e59d1a303bd07d0 | Bin 0 -> 716 bytes .../8f9667706da73846428a1cd630d484164bb7494a | Bin 0 -> 936 bytes .../8f9910f05be99a0e0a499a62166e2fa00f977ae6 | Bin 0 -> 1368 bytes .../8fc8fd3ddc230616349745ccf9c182f04f8ad7e3 | Bin 0 -> 2101 bytes .../8fca8e0096a40d97f3a6fc88b023a49cacb2bb80 | Bin 0 -> 4285 bytes .../8fd5b42f89b532efdabe1c48e7dd09470d60110c | Bin 0 -> 182 bytes .../8fe52cd5a702a1f9761362af9f49074be3d986ad | Bin 0 -> 1049 bytes .../8ff8e6e2ebcaef9d659c1b9c25bac85516ec8505 | Bin 0 -> 527 bytes .../8ffa176abc5986c601045b9c95abf1e3eb6f4e23 | Bin 0 -> 544 bytes .../9013ae85a8fe8c47edaa5dea1990a0078902a448 | Bin 0 -> 579 bytes .../9020b6c628da0de740f08f49b101ab7e8dcb49a4 | Bin 0 -> 5466 bytes .../9062fdbb0fa7e93c13c2de85aa142df368011cc0 | Bin 0 -> 1176 bytes .../9091396a14eb3808e6ea3b1830919189ebe99552 | Bin 0 -> 544 bytes .../9107e4e080f9ab9d1e5e61b1e8e57162656197a0 | Bin 0 -> 695 bytes .../91169485f1efe66476f879d963efaf70715af12b | Bin 0 -> 768 bytes .../9129b7039939fb9517ce9c44fc3e2fd1ad2bc88a | Bin 0 -> 115 bytes .../913a2736f582faefbca3671e4a6a0ec724c40802 | Bin 0 -> 112 bytes .../913b9d3f919b06f6b0ad8644d83682bd0d027143 | Bin 0 -> 1049 bytes .../916360e2aeae91eb2e6243905c9b21b6aa068e99 | Bin 0 -> 16645 bytes .../91828e4e351ce60a3ea0836555e6b9fd6e6c97ca | 0 .../91864ab3f3ad954dcd5dd06b0ecb0fd4c8733a56 | Bin 0 -> 860 bytes .../918b5220ff9a2b672c0d1215d2e1fe2c1c24b86f | Bin 0 -> 955 bytes .../9194018ef329b78d30a85e536d04c252acb3e26a | Bin 0 -> 687 bytes .../91b7a7f26f77bba7c990373f873f92675929e43c | Bin 0 -> 3946 bytes .../91e134b5deaa139277191dbd268d9a6da3a52dda | Bin 0 -> 955 bytes .../91e594e775083a94a975922de99e17d6295609d4 | Bin 0 -> 16645 bytes .../91e90c02509fe07a41d50a6eac6310ff3cf0789d | Bin 0 -> 1868 bytes .../922d7c360a583e08eb1797ace2370e6016294445 | Bin 0 -> 1064 bytes .../9237b62e32deee23ac99e9331f1f42bf14e5f6c0 | Bin 0 -> 776 bytes .../923b9e7249ae3a41a8029a0cfc5efa96fd4afd2a | Bin 0 -> 476 bytes .../9256111008ca97bd29b2a9eeed0a3ffdc320df0b | Bin 0 -> 981 bytes .../9265bac6d0cb49410333f79a73744381e1ab0966 | Bin 0 -> 480 bytes .../92af5f936172d157956bf5d4b1a69a7e48d1c6b0 | Bin 0 -> 2101 bytes .../92b09525151f6ca84f45ef670e3f8fdecef2068f | Bin 0 -> 435 bytes .../92c1c5416fc23b66686e4e7beafd501bf3193b0c | Bin 0 -> 1064 bytes .../92cda41c5a3aba4f643db7f5db0545ac103e0a81 | Bin 0 -> 1175 bytes .../92d6b82411bb735f6783e30a6c43c6cbdab15645 | Bin 0 -> 11414 bytes .../92f4b5fc982afd0503e24c054e1d5a9dac9130cb | Bin 0 -> 1168 bytes .../932c86aeedb499ed6c925fe64d2b955791805844 | Bin 0 -> 2251 bytes .../932d843354f11eb8f0fa4350beac2c181ea7d52e | Bin 0 -> 784 bytes .../932ef3b7bdcdbbd4e0010c28ed1fa4a2be3c9e62 | Bin 0 -> 699 bytes .../937db6c676d26e3bcfceee79be27c5b3df0b14f1 | Bin 0 -> 853 bytes .../938d71a7f60273a1ef0bf5b93ffcf6b104d301c1 | Bin 0 -> 476 bytes .../939bf2dd028188fad86e1f9a89b224495f070c7a | Bin 0 -> 880 bytes .../93a342b0c45f83a36200470233a074b1386704fb | Bin 0 -> 12916 bytes .../93b4a764d70d42bb5da43782a69f90da516c894c | Bin 0 -> 423 bytes .../93c41fa7de7cdb511a1f90fd8e2e74bd607d8ac1 | Bin 0 -> 1044 bytes .../93c68e9764d42009f1b0a6be495cb4d966785c11 | Bin 0 -> 2005 bytes .../93ca8d2182284861c29d4db9e072fce5824464a7 | Bin 0 -> 2005 bytes .../93d94ad4b16ea7035a81802e8f9bc685904243ca | Bin 0 -> 936 bytes .../93f9715b794703ff32029e2d584cbe94b4405ae2 | Bin 0 -> 544 bytes .../94038c6829cf44359ccdb59c4b165ecf7a31172a | Bin 0 -> 696 bytes .../941449d40899d7459e95eca4ece36db8bdc45b52 | Bin 0 -> 1365 bytes .../941883c51770ee1cfbcca6a506021e6a8530a53a | Bin 0 -> 544 bytes .../9450b1069ce1a515fe84c1a6f7c36f294718b345 | Bin 0 -> 758 bytes .../9482192e5a194d4ce8ba42b6bbf57d8cdff937d2 | Bin 0 -> 692 bytes .../9489b76ff7a5f709579b9f9883cce2f191d49902 | Bin 0 -> 480 bytes .../94aceb573a78d4221836ef05259f7e7b19396b62 | Bin 0 -> 2866 bytes .../94b4a00aed43a4a1a17b97aaf2c256ea4c88c9f3 | Bin 0 -> 544 bytes .../94d666df16066e6be25d592587f8d105c34c2607 | Bin 0 -> 778 bytes .../94ef77b1c2523a4c49c3f4da57d491a4c98c7a84 | Bin 0 -> 831 bytes .../94fe15d3e1012ba3f969a406fb6de76e7b752d41 | Bin 0 -> 847 bytes .../950a006edb709a1f1677ac948b2e12263dea0e9b | Bin 0 -> 544 bytes .../950bfbfab5cd330ddd40080ba23165caecfb2017 | Bin 0 -> 955 bytes .../9529121aa332ca0a9bdd2e6beb54bb76c8d2e5f9 | Bin 0 -> 696 bytes .../952b1436dd7d12bb1ad5285a8d884e85defcc1f6 | Bin 0 -> 130 bytes .../95366ccba7ae53b3cbf7e96bcb44bdeaa5fbe7e3 | Bin 0 -> 1175 bytes .../9538a2737d07e6338b0b27b6a48c6c3557fb5a4d | Bin 0 -> 44 bytes .../953d8d336584b3916ef2e3102bd34e72eabef8fb | Bin 0 -> 1606 bytes .../9545eb2f98ab91372982db72f42b5f49feff2ee4 | Bin 0 -> 3159 bytes .../954aef591b3af88a22c24d2aa137858f557d255e | Bin 0 -> 1175 bytes .../956873946e0bbad58dceeca27f540d18e03c1c9c | Bin 0 -> 853 bytes .../956dcb8790623bd36ddb733ae3650343467d8966 | Bin 0 -> 685 bytes .../959337c9e40107a60e1b3ea764e32fba77407be4 | Bin 0 -> 853 bytes .../95a152e9a53dcea7bd8d69b9e4ca95658ec12bf4 | Bin 0 -> 778 bytes .../95a53d4d2ff384298ec283465965753d91f8f582 | Bin 0 -> 832 bytes .../95b4ffa0c15d84b6d9321a3b096d9fabcc61d21a | Bin 0 -> 10544 bytes .../95d86ee050e8c952a42cfb494bc09e3bce0a91c7 | Bin 0 -> 741 bytes .../95e889c2d4bfe06a98dfdcb9f2a25f6552ecb8d8 | Bin 0 -> 544 bytes .../95e94d107624594342261da38a60b14761204380 | Bin 0 -> 2101 bytes .../95ebe962e5148e744a427df63bef405a341b3b13 | Bin 0 -> 601 bytes .../9605dc1381adae19b031d9dd230779a31354f9e6 | Bin 0 -> 2251 bytes .../96117345f1e5dd90ccabdcdd93a03b8cd9f8a1fa | Bin 0 -> 54 bytes .../9694d7d8ddb8b0dbe4acee84cd153fafd67e98c4 | Bin 0 -> 2843 bytes .../9699739cf7670acbfdf4726ae3b8dc193e85c34c | Bin 0 -> 853 bytes .../969a0bd8636684ec3f505cc14802e85a3f6b6d5f | Bin 0 -> 536 bytes .../96ab9752100dbedc7a46791f836f0f24a3d60a44 | Bin 0 -> 2567 bytes .../96cb56f06e9a4802f55095d37907fb67489fefb4 | Bin 0 -> 867 bytes .../96cb570d1e362d695b4e812bb62f545c90352ab0 | Bin 0 -> 1168 bytes .../96f654277951fb4d0cd1be73304f6d2869f588c7 | Bin 0 -> 668 bytes .../96fe8a84801e27a439d819fd4e2dfbc88d322a35 | Bin 0 -> 934 bytes .../97085b8fed71030a0c5348b3c8b81fa2a8234fa6 | Bin 0 -> 768 bytes .../970fd9142e8f348f656b5186ebd66d32a6c2fd85 | Bin 0 -> 6600 bytes .../97272ba8dc93e2d95884f01306f98c38493a918b | Bin 0 -> 476 bytes .../973ddcbf56aa8189a35b1309233ca5319e5ed9ee | Bin 0 -> 778 bytes .../9751c7eb8f6b7a16294ffd96a2e4088966317ad8 | Bin 0 -> 955 bytes .../975574342c36dcc574fc81ec42c3113b752aeb78 | Bin 0 -> 476 bytes .../976248e3188523c84679d5e7a17824a7f88be6be | Bin 0 -> 2252 bytes .../976a775c2076294d5fee4bca0329b0aa4368364c | Bin 0 -> 544 bytes .../9774f61b239bbb0b8c4830044bd61ee12efee46c | Bin 0 -> 751 bytes .../978d67eb094e5c3904e4f17beffa40a97b1aba55 | Bin 0 -> 2101 bytes .../9799c987d4b92f703b1122bdcbaaaf61c5eb7442 | 0 .../97a966a4a91c2888776fcc12b50350de457fd85f | Bin 0 -> 480 bytes .../97ac0396479997e0d09c2b038aef871f3ebe5e91 | 1 + .../97afb8d33f6c9dcecf8d3eede4b6256585ed1953 | Bin 0 -> 696 bytes .../97b5f3f0bc5d621dde284edc3706d754298c5b1d | Bin 0 -> 7648 bytes .../97b8a70dd1fe4e151307df90290a5b5e2b273ef6 | Bin 0 -> 27 bytes .../97bb4e10b5b17cbddddfa56d4c241362b1a4740f | Bin 0 -> 544 bytes .../97eb1f29a3a10586ca14d2e431aa97e387a8c291 | Bin 0 -> 3159 bytes .../97f1924aec640c8cc367bd4d53cae9c5600696bf | Bin 0 -> 717 bytes .../9809b00b8c0f785b7add7cd0e855ba73bbffc2a1 | Bin 0 -> 221 bytes .../982a0de865eab2bcd5dc2549be2b6bf9593b6221 | Bin 0 -> 741 bytes .../9852a89b250ae264ad229f9fd7a9f67bc4530fc4 | Bin 0 -> 544 bytes .../98538e7355b3048dca7871b9986ff9bd7da3e374 | Bin 0 -> 941 bytes .../9871aaf78453f9e598c716e1e572bcdd718477ba | Bin 0 -> 853 bytes .../987ee0f7418df6db00be230dffa5e80687cd8ed0 | Bin 0 -> 476 bytes .../988111b28834b3c8c6ba5c7101ff082a45dd23a5 | Bin 0 -> 475 bytes .../98894b3a852a728f4c7d89193cbae91063fdc9b6 | Bin 0 -> 420 bytes .../98b9e3c2ec914bd4d20429f2d475729f4cbeb687 | Bin 0 -> 2251 bytes .../98fad7ec74eb6f1c125ca2712e129b88d89d9686 | Bin 0 -> 2331 bytes .../9908ceaecd1b8c7cab877391490433105c55942a | Bin 0 -> 476 bytes .../9959d87ef233615a02007e9022d747cfd04b63a5 | Bin 0 -> 478 bytes .../99790710aab5d315ccaf21fffd6365a02f9b83cb | Bin 0 -> 3154 bytes .../997afa02ec5e424d91b352b8588cc074c3d7c33a | Bin 0 -> 563 bytes .../9996bd6b7f79458075cfd7674aed767463ae7203 | Bin 0 -> 544 bytes .../99b56dbc75d473d072463808971c38dd049c0923 | Bin 0 -> 860 bytes .../99d972fb38054ff4807982cb55ba407c26f8a6b9 | Bin 0 -> 551 bytes .../99e047ca9f94d904aadb8cf9b136556be8e7c17c | Bin 0 -> 261 bytes .../99e0697a23166b6aa152bba3b13b627dc471c641 | Bin 0 -> 768 bytes .../9a2a4b011408b087158873de95c1b7c2f5cebf60 | Bin 0 -> 476 bytes .../9a32324789eb5d1bddb70a2923b9c4acaa52b2bd | Bin 0 -> 478 bytes .../9a3bbccbb902394eb75fed80af16e5aa9a944585 | Bin 0 -> 480 bytes .../9a49e2c11aa44c1c7badf9b92b5d118226a31a9e | Bin 0 -> 544 bytes .../9a63a18fed4edabd00ae76994a884182e9d8a10a | Bin 0 -> 744 bytes .../9a89c5123dd6985b71f7725e4d1481acb5da26eb | Bin 0 -> 936 bytes .../9a8bd9c815486a927689b3df114b31f9e287df4a | Bin 0 -> 544 bytes .../9a965842977ccb7eebb73da0eab8ecc6489d2a67 | Bin 0 -> 1031 bytes .../9abc22bb11940fc11888a26db2a816fc8a8b97e6 | Bin 0 -> 544 bytes .../9acded1500eaf95e29de6c52a6221b3761948a40 | Bin 0 -> 88 bytes .../9afa5e556fff69a5f8eceafb5f6fc7340834eea6 | Bin 0 -> 864 bytes .../9b18a12d746c6699777cff28ba7883258fe05714 | Bin 0 -> 111 bytes .../9b222ef69b27a3932d1e9e71251fc7418371dad7 | Bin 0 -> 880 bytes .../9b252643d350f8643c301555faaeb76a3989d027 | Bin 0 -> 3492 bytes .../9b3909958835fa3bed2413324e9865086f4df57e | Bin 0 -> 68 bytes .../9b4861ee48defc5847e42412562aadff369dc10a | Bin 0 -> 120 bytes .../9b8ba32a1b79fbca2945099342a9e7c1a9b199e4 | Bin 0 -> 62 bytes .../9b8f8586f37ab1177d072cfe479e043ff61e22f9 | Bin 0 -> 544 bytes .../9ba279f8ef58d875f6e065ffd6f7b01f4668dc70 | Bin 0 -> 868 bytes .../9bb22321ac73386c373e28c124c2bf04a9e1a14a | Bin 0 -> 544 bytes .../9bcbf7333b60a7e04c4fd6bd4412084708352526 | Bin 0 -> 546 bytes .../9bcfae9eb9e55a856f1178a14cd45c27aabf5ae3 | Bin 0 -> 544 bytes .../9bf71eccf11060d6819580de80882fe5f55219f7 | Bin 0 -> 16645 bytes .../9c131e30140bc908bb1655135e679ad1f4a48bbc | Bin 0 -> 2104 bytes .../9c1a87a12ea0a4f0d31351c36aa4896f3017bc85 | Bin 0 -> 97 bytes .../9c34e9421a1f9b06822fc4725c825b86d8e35cbc | Bin 0 -> 1480 bytes .../9c386069a65b403a5f986c765fe59a79a933fc38 | Bin 0 -> 696 bytes .../9c59826df366f4423627dd3a1ca83b9aee23b150 | Bin 0 -> 52 bytes .../9c66984c4ac0168eca3b2245c9b163d5eb72139c | Bin 0 -> 2039 bytes .../9c771017767695231c4180deee69069df15993e5 | Bin 0 -> 544 bytes .../9c8b5735a4f00d4b5939d2e53ee20a540511d3be | Bin 0 -> 588 bytes .../9ca64305512787ff6e881a185f11a54e150e40aa | Bin 0 -> 537 bytes .../9cc470a1f855ae0ab2fc0149c35aae5a04bfe957 | Bin 0 -> 1044 bytes .../9d023b41726d37db0713204c94e4b4560e9cfc41 | Bin 0 -> 544 bytes .../9d166975e5cbfe96f1368b71ce69376081ec6f77 | Bin 0 -> 1160 bytes .../9d2791a4a215ff7ee71e1be09bfa4f6f3c2085e3 | Bin 0 -> 1335 bytes .../9d8a8ca82ee8945ff4a9cb2f7f19fa19231908ae | Bin 0 -> 1336 bytes .../9d9099c81b8c63f0e2ec13e22d807d74b598aab0 | Bin 0 -> 695 bytes .../9db32da54a250b8d6fab6b574a6c2826b506ed16 | Bin 0 -> 480 bytes .../9dbdc6e2160380448b43f36a4b91260a05894c9f | Bin 0 -> 50 bytes .../9dc0d57dcf14db5b8839874f870bb1ee0a1cefca | Bin 0 -> 6599 bytes .../9df24dd7c10d7fc7cdac977e2c726e03d0dca446 | Bin 0 -> 2101 bytes .../9e0700d0068307af1ba776b81b1fe7175618d727 | Bin 0 -> 1040 bytes .../9e0d9807b6588e8d612435c4c38646324ac90408 | Bin 0 -> 3156 bytes .../9e144f2cbfa926733f76f498cd2cb1afc1ca9b8b | Bin 0 -> 735 bytes .../9e1645f7a7a4b0afd76ea23c871632dc5166b34b | Bin 0 -> 955 bytes .../9e3b23b8011c606a0653054fd79fca2b341e8d3c | Bin 0 -> 3159 bytes .../9e4b7af243419dc457d5418bd2243e9b05fef249 | Bin 0 -> 62 bytes .../9e647cb628a9311a684f1a56a1cf87eb82d6f11a | Bin 0 -> 2252 bytes .../9e70eb7fe978337bbe160ff79d1ded63055946f9 | Bin 0 -> 538 bytes .../9e79cd1c192439823bc7553caa4e9530b7529ab2 | Bin 0 -> 3154 bytes .../9e89af85287dae36afe35930d1d1d72db7bb3cf1 | Bin 0 -> 544 bytes .../9e979e49a9e61decc9afa3f00375bb5aa9f4a767 | Bin 0 -> 1548 bytes .../9eb3c08cc213b8b936f5519962a18e16fd7e4b61 | Bin 0 -> 544 bytes .../9eb884927e35a2593026ae007abe1bbaaa1b1889 | Bin 0 -> 476 bytes .../9ec87227eee002a9599a77a4c8510e54e1dd2b20 | Bin 0 -> 363 bytes .../9ef0cbd7ca9ac58c14ee10b0a9e554efee71318c | Bin 0 -> 691 bytes .../9f0820929f5779e7df8f3bcf2a02e57bea76c829 | Bin 0 -> 115 bytes .../9f0ae41bfcf22240d3a83c8eea33449270d92eb5 | Bin 0 -> 2364 bytes .../9f10e827af86e6d34076e8de9e9cffca91de2b38 | Bin 0 -> 459 bytes .../9f1f45c340ba6a8d500671d7a9d72c3a1c23d181 | Bin 0 -> 7 bytes .../9f25e4687be9699ca3d0cdc2dcbf96395d3a06e8 | Bin 0 -> 2331 bytes .../9f2bdf0221eaade1f3dcde654bb31a5ac3e966d8 | Bin 0 -> 981 bytes .../9f4a40dba3fb04b7ef14e1125afb86dd7616e871 | Bin 0 -> 2331 bytes .../9f4adff279fafcd0e46a433ca11331c43a28ee16 | Bin 0 -> 529 bytes .../9f5a52d6d3b4d906d064126b31a59d7a77770cf5 | Bin 0 -> 2255 bytes .../9f9381056c6422721387bc479685e4aa061a3f74 | Bin 0 -> 3154 bytes .../9fa14b7e276739a4f9d7c5727566fb13ac0b6075 | Bin 0 -> 476 bytes .../9fa1881ed7d11a699d43632aa610ffd4f9105b3b | Bin 0 -> 741 bytes .../9fe051759bd81ecdcee0298524f52f1f4f3d9c8c | Bin 0 -> 2251 bytes .../9fe8028565eefcd37de91f0949c9f5c683e7caaa | Bin 0 -> 860 bytes .../9ff55f73fc4f03eb4bbb4e10b6c777ce05b67918 | Bin 0 -> 1045 bytes .../a0019aa52b7ce6b2661b139bdc89c9d721384521 | Bin 0 -> 668 bytes .../a019f57d350a656c7f4d83fe292659bd9ee5b078 | Bin 0 -> 423 bytes .../a022d1488f7b11225a42080f6021bbb59eb7be67 | Bin 0 -> 476 bytes .../a0439f9d63887008345a14e62e0a08f64f5b086d | Bin 0 -> 475 bytes .../a05701399c4a2ce2bc13a0bd4ff23a07740d207e | Bin 0 -> 476 bytes .../a071f3a1b69e163a9f7b51c85a50f6af381f7e78 | Bin 0 -> 733 bytes .../a08187086204d7e7943a179482f769f1a3e8dc72 | Bin 0 -> 16645 bytes .../a094a9e28f81331994e2f8d7a9d09b74e383eb11 | Bin 0 -> 1335 bytes .../a0c5a6f149057c44fd5f24122d0055dc139bf371 | Bin 0 -> 2251 bytes .../a0ddc1f558b73b0e418ba3f1bbb680d2ddbdc1d3 | Bin 0 -> 424 bytes .../a0f274f7ce97a51902b89f24fb93b2a1e91c4303 | Bin 0 -> 1335 bytes .../a0f93be410f177e2b2bf95a83a68f32afa8cfbaf | Bin 0 -> 1760 bytes .../a0fbc97f6d51a16d69ae519dbf492b83f38c8313 | Bin 0 -> 2005 bytes .../a12e40aecc17025579afa74a7e47580a7579dba9 | Bin 0 -> 3352 bytes .../a16034982baf0b67af907d0ec6f71c335781d42d | Bin 0 -> 2552 bytes .../a16a401745c48b40ae502fc583308231f442511a | Bin 0 -> 2101 bytes .../a1ad4d1c6a3f074204ed3d5b6a724b1206a20431 | Bin 0 -> 476 bytes .../a1b60f74bd770b0e6fc91dccfdc4637f5746975a | Bin 0 -> 768 bytes .../a1c71fcca90b3eda5d9e171513d38cdde914a419 | Bin 0 -> 3154 bytes .../a1f43adebfb38a91f8df7d7462709e34e6ee0a92 | Bin 0 -> 544 bytes .../a1f482863f7c23a3b1e46abc0f69e640e53b1ed9 | Bin 0 -> 542 bytes .../a21e30ff6a5d3622d0ca07521e8f56127ae8b190 | Bin 0 -> 3160 bytes .../a2388f0b03dfefd3d6bc497b7caa947bccda10a2 | Bin 0 -> 22 bytes .../a23d7baa8b9c7120939ba5ca2086dd40b40e4db1 | Bin 0 -> 6599 bytes .../a23e949bc01d9b4d0c0aceda2ef086bdd7a39361 | Bin 0 -> 955 bytes .../a27429d226d816b1f2765fb66dcd5a6a18b4f530 | Bin 0 -> 1175 bytes .../a29120278223cb12f6ad230d1e828f1dae2b6dee | Bin 0 -> 112 bytes .../a29ac961a0576731c980d3a57de8802272d79ada | Bin 0 -> 934 bytes .../a2b35ab1ab14b70cd32f227f180b62a2f7a23fcf | 0 .../a2b4b851fb0e485032c5a6b2b45f9df1b08ee265 | Bin 0 -> 1030 bytes .../a2dbf9627d9b1558924abeed40a16a9bcf11b0ca | Bin 0 -> 550 bytes .../a2e1161490fa6ac660fc60b2313fd6374fec2553 | Bin 0 -> 363 bytes .../a2f5855c970b580be409c51f5ca8f0159c7590f0 | Bin 0 -> 851 bytes .../a3058a2e72e653ae255b769e73612d036bc43bcf | Bin 0 -> 3159 bytes .../a311ec8329cb65df4f34ca74df9f88466a7dc64d | Bin 0 -> 62 bytes .../a31ad950c6d37d682e40eee42d238cb87e4110ef | Bin 0 -> 476 bytes .../a339e5a94815b402f1f1e30ea8ebffc909485e94 | Bin 0 -> 2005 bytes .../a355b14b4a2a31d405093710ca34b77d607c7771 | Bin 0 -> 3156 bytes .../a3974f42e310369df5b433e053aeaa35b5944302 | Bin 0 -> 1868 bytes .../a3c8d3591f561741d718089e584b172d2424bf0e | Bin 0 -> 764 bytes .../a3fac722124ec01fe1b8e316725a9e0646aeb30b | Bin 0 -> 696 bytes .../a4644b47e367a1f97fad85c2eb08a3a7a7516ce1 | Bin 0 -> 694 bytes .../a49d7b09ea578f397845be482837750225eb9775 | Bin 0 -> 853 bytes .../a4a45f6d107bb2e98e9c8df1bf1e7c41e8394057 | Bin 0 -> 3159 bytes .../a4a5ae9bca2c7a9b8a3412f5b4a6ec8045d24eb1 | Bin 0 -> 3198 bytes .../a4d3b479765351c9186f9a43e2b436eef0b826a1 | Bin 0 -> 696 bytes .../a4dc463b16073c4191f53129ab3f1507e44adaa6 | Bin 0 -> 757 bytes .../a4f14dde01d73e3e630b26a1d1d1ba6dfb6bc453 | Bin 0 -> 853 bytes .../a4fd6770a13f7834a89331a2389d921d6e7353e9 | Bin 0 -> 2101 bytes .../a5131485705d33fc843ae2124dafe84ed14abd71 | Bin 0 -> 3154 bytes .../a53ab0959c9c3828bc387a5e3f7f25503fc2d0ed | Bin 0 -> 685 bytes .../a543391dd2abb6f3ddd046879f20ad1c01e2ff56 | Bin 0 -> 14 bytes .../a575732deb65445a99ea54ff92a59ad94186f1c2 | Bin 0 -> 882 bytes .../a57f51fbe0532029299150b10875f373121b3df9 | Bin 0 -> 529 bytes .../a5c0247c962d6009c60584970da4c5083486d60c | Bin 0 -> 423 bytes .../a5e5ff8716f0534723ed188470a24ffa77f6952e | Bin 0 -> 563 bytes .../a5fcf51a76caee46200c7e8ad22d1bedd092b7c0 | Bin 0 -> 2251 bytes .../a6010733f7f7bd55cbb3fabb84ad4a2ff1f0cfb2 | 0 .../a60a8ccbb53894993c1cdf449a8091d28d709015 | Bin 0 -> 700 bytes .../a64e308326142261572d7671f7322d7884e8976f | Bin 0 -> 3159 bytes .../a64ea7b5af23622c8a9ad94d899fcb3c4f300538 | Bin 0 -> 696 bytes .../a658e9c1011b7ad520a56310fa6c1ffe1b02573c | Bin 0 -> 527 bytes .../a65a6068d7e1c6dbfaff96ffc93651890b0a8a4b | Bin 0 -> 544 bytes .../a664b93dcac9ca8630ffa718dd568027947b273b | Bin 0 -> 859 bytes .../a6710cbdf2ca8a9f49f7cda5b80d9a5afaa19ac7 | Bin 0 -> 853 bytes .../a6aa38179278ad1b66f1f7d7e21ec38a587bc055 | Bin 0 -> 955 bytes .../a6af1927f9b31b45e64aac17726327894329db8a | 0 .../a6f73aa99865dcf57f74cb74022b464028e73725 | Bin 0 -> 749 bytes .../a71104fbb1a2179999c845d9c6d43f21cf42dbd7 | Bin 0 -> 1175 bytes .../a72e4b9913c99ba2a93cb650d5a2aaa3f16d00fc | Bin 0 -> 860 bytes .../a77498c602acc3170b805a7f609334022c206ba7 | Bin 0 -> 112 bytes .../a780a692ffbca2932e57fdde998b105db5698660 | Bin 0 -> 1175 bytes .../a7bfd3771de1285ff5dbf7414f3b6205f74457a2 | Bin 0 -> 544 bytes .../a7cb3d2b24183e850ef4e1252e0cb0c53214837e | Bin 0 -> 717 bytes .../a7e2c3af77d32cd3c2249d8976e223d034337b90 | Bin 0 -> 1845 bytes .../a7f19f08d18783fb2c1119235e8f6a59385b0429 | Bin 0 -> 6480 bytes .../a7f3c291c3af8af0008c9001b62387ba992c0059 | Bin 0 -> 898 bytes .../a7fed6263cab3285fe881ad1dc3d9b43864fc21e | Bin 0 -> 622 bytes .../a8024deeded961c00a91c258e7ea28128238e3a3 | Bin 0 -> 2376 bytes .../a8103e1181d7bcfcd32b86fde6d9c0a9704b4362 | Bin 0 -> 475 bytes .../a829965a6e5d908f6de2620b759bf3528dbd4cc4 | Bin 0 -> 955 bytes .../a82b7c623c40d24f32aa5bd3a29fcdeedd2e3fac | Bin 0 -> 717 bytes .../a8511b7c5021ca227d056b404ee1a5bc6797c31d | Bin 0 -> 1336 bytes .../a8532c488d57bdb61cc21297290fa1c6cad53a2f | Bin 0 -> 955 bytes .../a857b0953069baaa1529ab38960fc885f235d847 | Bin 0 -> 860 bytes .../a892a206d97a2abe1af9715038781da914c29572 | Bin 0 -> 2251 bytes .../a897c9d35dbd9161106e6fd7910cc55386a9062e | Bin 0 -> 3436 bytes .../a8994efaabb636b22c2445ddfe3b76d401225619 | Bin 0 -> 3159 bytes .../a89993a945b0bf95eca2cea16b9def2c0cd4fa33 | Bin 0 -> 1044 bytes .../a8a32728d06cc5b21833b10ea7687fa934de4694 | Bin 0 -> 749 bytes .../a8d3504d8bf1be63493c2dbd2268fa084f4cf52b | Bin 0 -> 423 bytes .../a8e714f781133732e3ba92f5a58fb8bee19760ef | Bin 0 -> 2771 bytes .../a8e8d30c18bd9dd47b36021614d808f8cf2883be | Bin 0 -> 727 bytes .../a8f322ecbb554bed2c5b8089d05794da26b4aef2 | Bin 0 -> 555 bytes .../a9138e57a1077d983c37ac3579b818ac0d3cbfaa | Bin 0 -> 2331 bytes .../a93f7cb722591d8583f02c5b7dd62056cfa1a6b3 | Bin 0 -> 6613 bytes .../a94569a03b6debc8495d7d00a03aff9adcddb8bd | Bin 0 -> 3159 bytes .../a9495ba98671eeb3c54fce01e86087bce378dca7 | Bin 0 -> 3166 bytes .../a9647aaec0d39ccbbd482ae0ccd9c59246f60322 | Bin 0 -> 544 bytes .../a9759cc7d2078d8d39397b3bd959394b744bf752 | Bin 0 -> 423 bytes .../a976737ee4a5704a72d4af9f48cfeb5927a6955f | Bin 0 -> 8 bytes .../a978fc2dbc75851018cff2aed64ee8592671a45e | Bin 0 -> 982 bytes .../a97c71ca679294ab9e1846ce0157185afb42d447 | Bin 0 -> 675 bytes .../a98b23941782be09b5f9b805974ebf1546f1f1d8 | Bin 0 -> 571 bytes .../a993fb6aa7b76d387b98b57da66c670cade4eca4 | Bin 0 -> 210 bytes .../a99ec61eb88f3f44f3e36de649537b40ad690e20 | Bin 0 -> 544 bytes .../a9a9803413da1f7373d564d0c309c006a0d9ace0 | Bin 0 -> 817 bytes .../a9c664a06b7ffbb8894fba5a1633a0b34b78ad68 | Bin 0 -> 1047 bytes .../a9e3ee1009adfb860da78d70c2046a74a6ced99f | Bin 0 -> 860 bytes .../a9f6e29cf2d6de16e87f80aa1ef2adf6777b7b64 | Bin 0 -> 729 bytes .../aa0b71049251330832eb9fa387c314021ce1b225 | Bin 0 -> 848 bytes .../aa217700283f53e2fcfd21a5928234289ccd4a78 | Bin 0 -> 415 bytes .../aa2f0b4d52b0537856db3057ef78ff2233844979 | Bin 0 -> 1077 bytes .../aa4cf63d9c4bea278264f297bad47ffaa50e8fc9 | Bin 0 -> 2743 bytes .../aa5f64df09ff83b5a64f6b413cac5555126780e5 | Bin 0 -> 424 bytes .../aa6ec9022422cf950b297f17e6d06a2d973ad3be | Bin 0 -> 544 bytes .../aa70f3f70e18051d554a6d635dc4695bccc549fb | Bin 0 -> 733 bytes .../aa84ba4eab3008a88d9b97386027e3df1b6ffd3e | Bin 0 -> 554 bytes .../aa9997965853cb841aa31162ef3e5e2ff4ef2aca | Bin 0 -> 728 bytes .../aaa4334b9f8775c23b6caef10b26e08a396dedd6 | Bin 0 -> 9 bytes .../aabf5670e8abb22353f1ddb4c2ff47b923724bd1 | Bin 0 -> 2251 bytes .../aad3481f58c28d845d82f915ec33eb670ec9101f | Bin 0 -> 331 bytes .../aadc36c3a1fd481aae701f9514df27cc6cff3206 | Bin 0 -> 12968 bytes .../aae70fb7ddb64234545056dc5f2416d5b7f82345 | Bin 0 -> 6600 bytes .../ab288a5a3e79951a2f2258ea72d78a7170c46b76 | Bin 0 -> 696 bytes .../ab3d92f4cf35a1bec9e9fe13bdc1d4d732193499 | Bin 0 -> 691 bytes .../ab4c808f5655c7fbdb1de9f97308b62055f488fc | Bin 0 -> 952 bytes .../ab5c0b462e02b09f8dd4a6502221ab3e84b3376f | Bin 0 -> 112 bytes .../ab5c3026b7d45a9bfafd4429e027efbedf93db60 | Bin 0 -> 934 bytes .../ab5e2bed56177100ac0c02d3fd7b3d0299337913 | 0 .../ab72c32441dab0477b9f5c7e66ba7b073699d317 | Bin 0 -> 544 bytes .../ab7f9685bd3b07fc895a719d67fcb31572e29667 | Bin 0 -> 2332 bytes .../ab85908f0cb25756ef2209b0a37a2ab4270d068a | Bin 0 -> 1335 bytes .../abc03dc13f0d172bfc68a0c6cfa12ddfe45b9366 | Bin 0 -> 859 bytes .../abc82f9670617310f352b8bc7a2301f5efc88ac9 | Bin 0 -> 685 bytes .../abe47acef686c142fa8615bd57af1bc7c17c687d | Bin 0 -> 696 bytes .../abeb013e6dc76f58ed049b07d235c6eff01bb07b | Bin 0 -> 1030 bytes .../abeef9fda7b58b407597cd9c1056c7558f89a459 | Bin 0 -> 789 bytes .../abfadb68650fea3ee98d095a33a8046bbdc5cdd2 | Bin 0 -> 981 bytes .../abfdbad5e00b17e2d3f0a064625204e5d31bff53 | Bin 0 -> 935 bytes .../ac2fada15114be4cb64baafd1caf434a5b277744 | Bin 0 -> 112 bytes .../ac5c73f2aac049addf40e084e78562daa0661fbb | Bin 0 -> 36 bytes .../ac6433253c62221218bd37fa0d8d97ad3de8aaf6 | Bin 0 -> 833 bytes .../ac906be4ed3799df2b06169306ccf3f94df36d39 | Bin 0 -> 601 bytes .../acc48739869e423e428cac76ff5751dc634cff84 | Bin 0 -> 478 bytes .../acd52bb3ff0092b4fe01aa7087b468a8c9e36bf8 | Bin 0 -> 99 bytes .../acddcde6308f16d5b66d5451e4e9bf5f55fa1387 | Bin 0 -> 3155 bytes .../acfcee7dc65bdce528236b4f04d5bc911e42a6ce | Bin 0 -> 1044 bytes .../ad49fd1ef25c58e267afd901917d896a9a759a8d | Bin 0 -> 1077 bytes .../ad4b02317fd87648a680d535cfcaceb7c13a36ca | Bin 0 -> 544 bytes .../ad5014c19ef5dc519d8e21ccb10239649de6176f | Bin 0 -> 2251 bytes .../ad6c3f855badaf83af1c90488b67b6a389b5f074 | Bin 0 -> 2543 bytes .../ad8772f6f8ab65d119b972b64f8ed8efb3e2cfc9 | Bin 0 -> 579 bytes .../ad893ff2bc3abfab909b0ede6bc03aa3d5564ad0 | Bin 0 -> 432 bytes .../ad94fded2b8ab1a6413db30889a6bf1a9fed898d | Bin 0 -> 724 bytes .../ad95578e87616b8e32202c08fde7bc6c05637c0e | Bin 0 -> 696 bytes .../adb80ceb3f3b3d9c57b669928eae09ad2324732a | Bin 0 -> 544 bytes .../adb8addc725bd7bd5af0ead4a5947177c75c0c81 | Bin 0 -> 2142 bytes .../addd948ffad44c7651b6c36cb59c2f2fb8187505 | Bin 0 -> 1868 bytes .../ade7ee46ecc3f8f2818555bcd23ead2d8524bc98 | Bin 0 -> 685 bytes .../adfad2699036eacece782cc64299e13b85237864 | Bin 0 -> 544 bytes .../ae66140b237569e0dcdbf45577616f236b7e11b8 | Bin 0 -> 62 bytes .../ae88c89a104814abbc9da6c83eb5e47157942fd1 | Bin 0 -> 860 bytes .../aeabb99ef54fa1b71bfb2ee1955c9af9347da554 | Bin 0 -> 2101 bytes .../aecc2f6021d9d5a5b213124dc9105c87cf027970 | Bin 0 -> 423 bytes .../aede4bc6b38e641332299c24e72799bf827c438f | Bin 0 -> 544 bytes .../aee4a54b104198eed0002b43bce3a816757ad9e5 | Bin 0 -> 475 bytes .../aef39cab837b654535dc1f1ec11af2ec061dd125 | Bin 0 -> 751 bytes .../af2852d95b9ff37024adf96591c2c407a65fee9b | Bin 0 -> 845 bytes .../af331b619fa795bdd209ab378c9439839248e89c | Bin 0 -> 869 bytes .../af3d2c9ea11aff6d68fcfa130fa8e20468c1ad78 | 0 .../af3f1bf8ffa58a84f9f1e4c1a04d9878b7ebc369 | Bin 0 -> 3207 bytes .../af452f589e0e0df65355eb8747f7801d72ceb101 | Bin 0 -> 544 bytes .../af60d18b9950d00666b69881b49ce1a358adc32f | Bin 0 -> 544 bytes .../af9e94435832d2c479887a33b0f471bac1e1e1db | Bin 0 -> 210 bytes .../afa4498aa627b400f4271e8758727d540c7b3b40 | Bin 0 -> 113 bytes .../afa9a5570a6224ac87e2fa3c9c34c9dd1903e17b | Bin 0 -> 1335 bytes .../afd57ee82b5883e06ba6b4ab73401325a59f99c8 | Bin 0 -> 1335 bytes .../afd5faca1eb19254f9582c752e543fdcc5c5e240 | Bin 0 -> 724 bytes .../afda9345a61969266fced6f939578d1812460762 | Bin 0 -> 1048 bytes .../afdd971c57b2927f17e0fea440871c4126d3fb38 | Bin 0 -> 539 bytes .../afe317025f58e0afc13741cd09a8f6e895cbb383 | Bin 0 -> 2101 bytes .../afedfb5f7392f0090a44c531a1bed4a5ffc13120 | Bin 0 -> 2252 bytes .../b01ea9f5dca3060e77acf44aed4ef0c0c5242078 | Bin 0 -> 1049 bytes .../b04de9c9d2862605f046c1c4d8ad60facea52b54 | Bin 0 -> 2331 bytes .../b055b99cc0b10dba2305b81e15e8b9ea96f1ee5e | Bin 0 -> 1523 bytes .../b05673ecadd864e1f33825a45617aed789e9afba | Bin 0 -> 363 bytes .../b0636169b0b894ef300df3356f2c292048b79414 | Bin 0 -> 2008 bytes .../b06a26736029b55f436f584ecfbf284fd96dac2f | Bin 0 -> 550 bytes .../b0a313b658e79fcb257e41322e5f96af5e3e8aba | Bin 0 -> 6600 bytes .../b0ba2fb7bac7cd6f3c806b67b0a736571851409c | Bin 0 -> 44 bytes .../b0cb853a70d3e7d4d491a4c5b9ac4daff0472d94 | Bin 0 -> 1190 bytes .../b0cfb3b6d906daa40be1ddd4649e3072b1c498a1 | Bin 0 -> 1336 bytes .../b0d466cd6a9e8c7a80b503e7a79b3a550b89e849 | Bin 0 -> 903 bytes .../b0d87c6104e1d1a74cc7785ce4d02bb3c0158fad | Bin 0 -> 570 bytes .../b0e58e4f333929bf73473c17ad50c960a9a99ca3 | Bin 0 -> 727 bytes .../b0f5772977e5df2008bacc58ae1a6136512cb230 | Bin 0 -> 692 bytes .../b0f93ffc2f8a081ae4fec8464b4ac5dce130ea1d | Bin 0 -> 1044 bytes .../b116fa73f8356bce7128a9e7d97baf1c7a3d2308 | Bin 0 -> 3154 bytes .../b1523d912964a54df2f54886c801dcd51e35be83 | Bin 0 -> 853 bytes .../b15313d3288db5c5a1504c6c3989d93ac59945ef | Bin 0 -> 431 bytes .../b15cef9fdb33930dcb84ecc7a8e66133a0b027cd | Bin 0 -> 955 bytes .../b1673e8ffe7968a31f01b455b2bf4d6c2223eda9 | Bin 0 -> 687 bytes .../b169a054af04d913128673eab293a6e4a80e997c | Bin 0 -> 2251 bytes .../b17042aba927e997ddf92690ab64f3bd8cf60f54 | Bin 0 -> 696 bytes .../b18d3987af0d9baef8c687397360c7935b652a9f | Bin 0 -> 1175 bytes .../b19240839dcd9361ac5bf5ae6e2d33e73bef8206 | Bin 0 -> 3154 bytes .../b1a9251550a689538439dd5f015294068ca6a819 | Bin 0 -> 1003 bytes .../b1b0b0d94c2c28f5ce3075e23752963af86639c1 | Bin 0 -> 2331 bytes .../b1b86fa7ae183a4918cffdc6bfe4606c08a4840d | Bin 0 -> 3463 bytes .../b1bac901907c7c53bf39cb88bd21987ca5838dc1 | Bin 0 -> 51 bytes .../b1d51838a484fa8f983c2ecaa3ba86eb537f39a7 | Bin 0 -> 544 bytes .../b1d637329cf0023e7769fc3b58574b734ce4aa78 | Bin 0 -> 544 bytes .../b1e917423b8cc54749e83b3766daab83ea32a792 | Bin 0 -> 6697 bytes .../b1f091f86fa0f80e5f0669a6e060ed2bba15a046 | Bin 0 -> 3160 bytes .../b1f4da63109dc116c1c35f59395dc787a94efb55 | Bin 0 -> 716 bytes .../b1f60163c2e0a04bd75674e14bae64121bee5428 | 0 .../b1f672145efd023b3415a948f5aa382f1b3c6499 | Bin 0 -> 544 bytes .../b1ff4d0f0dd7f305a901330b784c61a9e3ca6d50 | Bin 0 -> 1546 bytes .../b2268f348a55cb268db8ea66389c7b2ae0b8c4bd | Bin 0 -> 6629 bytes .../b2287a95733faf14b3763849a5763e9318c9ca92 | Bin 0 -> 1312 bytes .../b25f229dcff752f32887bdd13eab7d0131032364 | Bin 0 -> 1044 bytes .../b26ecb11aa2647c58920a0f328967b5baa3309e9 | Bin 0 -> 1138 bytes .../b2769253ba9847467f8775480138803f3a204032 | Bin 0 -> 363 bytes .../b27f82acd74de84ed4c79d9f0a0dcb30b00c7215 | Bin 0 -> 601 bytes .../b28e759b1e3c47b3da92e49e99dc2cb99ed9417c | Bin 0 -> 696 bytes .../b2a250b4970cd399c769dbf2f4607adace10c2cd | Bin 0 -> 3492 bytes .../b2a30a5a85d27f8131b846a84cdf868767214635 | Bin 0 -> 2252 bytes .../b2af92cf8e195db8389db54400e4e4680e9c5bd5 | Bin 0 -> 1463 bytes .../b2df6c853f98a51746f88a621b7b37acd8ca950a | Bin 0 -> 900 bytes .../b33ad86f58f8ee8a3619ac26307a8b2adbdc180c | Bin 0 -> 695 bytes .../b33fc6130991ac85e3c0bf3cd2bde459edc332e0 | Bin 0 -> 85 bytes .../b34653b3bf5e0e9862c0ebe193e69e125cd2b7c9 | Bin 0 -> 2898 bytes .../b3547fb9182b5e6ce5ba7f9d132273cb044deecc | Bin 0 -> 758 bytes .../b356741035b524d02646ee00c4b0803196e7b125 | Bin 0 -> 530 bytes .../b37ad2bb7fc5214ded272ed53c1fc1b0511c8606 | Bin 0 -> 936 bytes .../b3a79051957e5cd81430c5ec6d6f5b77b9f5db0f | Bin 0 -> 544 bytes .../b3b953c312bf389c2714774201e7c47ffdbfc4dd | Bin 0 -> 868 bytes .../b3ceedc04e28be3712e40bbfa0a967b2973e1a2e | Bin 0 -> 1176 bytes .../b3d71f93cf48317fdfdecd09db7ce59dd9decea3 | Bin 0 -> 476 bytes .../b3df9d10f10902a2a88a8ab000f23421d8c48bd5 | Bin 0 -> 423 bytes .../b3e03858fe6c59eb63bac6b70fbe87a78df39dad | Bin 0 -> 934 bytes .../b3f804cf0c5aee41866b41ca2d39dc8276f60297 | Bin 0 -> 2251 bytes .../b41bfc8c9a0af06fdde5ad04cd86b8f19347c016 | Bin 0 -> 2000 bytes .../b4308abec0d9f7c8e798772afc64fb77b365e4d1 | Bin 0 -> 475 bytes .../b45429239a327f4d4ae24bdb52d084994c2d7595 | Bin 0 -> 544 bytes .../b45b7f1fb14eb07eda4095e59508ab87112e001b | Bin 0 -> 1175 bytes .../b47811d00cf5f7a0619e4a5eb243f6ca1750771c | Bin 0 -> 476 bytes .../b495a8685f4fe719862c10dd552b3d9addbb4820 | Bin 0 -> 752 bytes .../b4cd06745056db73c7f0bb1a3a3ce499e0e2d0d5 | Bin 0 -> 480 bytes .../b4d65b1d885ac44791781cdbe6c1986ee9bc1158 | Bin 0 -> 3492 bytes .../b4e061c888f0be8c6e08c4e72ca3189015735cc6 | Bin 0 -> 2101 bytes .../b4e9242b09e7807c37e9f9fc5e64a5816481e705 | Bin 0 -> 2101 bytes .../b4ec37523c27bc91b7cd7281f40e60fda099b7da | Bin 0 -> 860 bytes .../b4ec81de8803d6a4c8becec26e3cf0b9148f5b60 | Bin 0 -> 536 bytes .../b4ece773ec1d004772beff3b1f6bccbd71498206 | Bin 0 -> 356 bytes .../b52318c76dac5dc3c5b25586ae5bd658e023e4a4 | Bin 0 -> 1172 bytes .../b525e66f72e1f3b00370b2287b3815a75ccb61f7 | Bin 0 -> 544 bytes .../b52ef1cd383fb666a6bf11eed22b628d96762008 | Bin 0 -> 544 bytes .../b53a44973bde1f03b53aa4f81ff1f70644e7698b | Bin 0 -> 656 bytes .../b540426958b232eb4fa39d5b211c93424ffef628 | Bin 0 -> 544 bytes .../b56eba8ac43d0101299864653ddd8acf85d6aafc | Bin 0 -> 12376 bytes .../b5a711b9e77bc3f467a1114be2204ed8839fe08d | Bin 0 -> 687 bytes .../b5b6804eab6a9f075ee08958cff76154f62c22e5 | Bin 0 -> 363 bytes .../b5b8ab297d05d96cd1359bafa3e702b74fdc12aa | Bin 0 -> 859 bytes .../b5be7d971da799a6ebb1714ebf7b6068da9fe4d3 | Bin 0 -> 476 bytes .../b5e89df88f8c997173ca95648a6621c0dd055e8f | Bin 0 -> 6848 bytes .../b608e4371f74841a1fe8cadc39e4f44168e85fc6 | Bin 0 -> 423 bytes .../b6199c61f51481aca377d88deaa86f0a8bbdd2c8 | Bin 0 -> 2101 bytes .../b623a80a7aeb82477ee9054a379d2ca1d5be4a10 | Bin 0 -> 2251 bytes .../b648e93013e9b2be0d3c0ae44d0231e6c0f362e6 | Bin 0 -> 27 bytes .../b64a6244811e3e5fec9b8afefd5dc38facc9b2b5 | Bin 0 -> 2408 bytes .../b6594d513a95fed75709374616aab41ef5d94e91 | Bin 0 -> 3323 bytes .../b6604a0470c4c113c86f013c3b3047bdb2aab986 | Bin 0 -> 691 bytes .../b66c80263604f359cefcc25ce48a09dd063d96ae | Bin 0 -> 669 bytes .../b67c29d3124ed0490e161b231a8532ec1536c71f | Bin 0 -> 536 bytes .../b697911d60affcc52968a4cbd5a22535a0b2d0aa | Bin 0 -> 12915 bytes .../b6b3ed3ab172b22774dc403f9078d4c3852e42ae | Bin 0 -> 12376 bytes .../b6c1c87c46968c92f90f7bcbbdc39e4d450898f8 | Bin 0 -> 2410 bytes .../b6cd899f04e29fdfd1a85d5a000d6bc5ae01b632 | Bin 0 -> 845 bytes .../b6fc4af13f56dc8cf9c9f5f1ea402375467ee867 | Bin 0 -> 544 bytes .../b7095bffeb81d0ee720214cb3078e09b675c1489 | Bin 0 -> 544 bytes .../b70d8575150eb705b7cb3c988207957992c42fa6 | Bin 0 -> 476 bytes .../b72b42a5eb1aec7c0d0c100e2ddeef09b45727f1 | Bin 0 -> 2191 bytes .../b75ba49eda7e670fea0a3a4fb77983cc7f2a86e8 | Bin 0 -> 1469 bytes .../b78c598d42c2de2fa8781386b74dc068f7faa4ab | Bin 0 -> 544 bytes .../b793dad38c5e29c79deb90aa83bf2708519cb637 | Bin 0 -> 3492 bytes .../b7a468c651d817cf046d3f0d78c68ff99171fbc4 | Bin 0 -> 3154 bytes .../b7be4f763ce5dc892b90e18cf3e5480875f2267d | Bin 0 -> 845 bytes .../b7c6e60af8fe3badb26ce63960c89f31c0ab0467 | Bin 0 -> 544 bytes .../b7d6a03445d281f742f349c3095244b377c65ec8 | Bin 0 -> 544 bytes .../b7eed86c376ef89cc652102298a301cd05e8a796 | Bin 0 -> 566 bytes .../b80e0cbe91ee95b06293e2620c3327fb8a90964c | Bin 0 -> 519 bytes .../b81812f93b4765c1396258872b222d1f00c0293f | Bin 0 -> 5 bytes .../b82b5a8eeecff5b6aa78b94f4a0ada406b86585f | Bin 0 -> 519 bytes .../b84572e91e3f1607db43523522d75776749bf062 | Bin 0 -> 955 bytes .../b8537444b1cc4511d52e82755ddb7c90d35182fd | Bin 0 -> 784 bytes .../b85ae18d9de0e3efa5df5427801b6894f8250950 | Bin 0 -> 13 bytes .../b86207ec70a97cbd66e94df93ca4aac42e33b7f5 | Bin 0 -> 479 bytes .../b887ff93096c398eddd23a9a3c4b052214ff4858 | Bin 0 -> 782 bytes .../b897a97810f021a1ceb47bcdae0dab36235dd55c | Bin 0 -> 1336 bytes .../b89aac6ddbc130200ad504ecc8bf2144fbe7fdef | Bin 0 -> 544 bytes .../b8a7a43cd2b1fe1c92ba261be688a28e57a6f3c4 | Bin 0 -> 16645 bytes .../b8ba213f7c12784d2070ba472eb0bf326c6ef472 | Bin 0 -> 56 bytes .../b8c2f1a94406834d102c6adf83356741b2f46dc4 | Bin 0 -> 1336 bytes .../b8c379d168fdde8151585554122ae819da3b2f7f | Bin 0 -> 768 bytes .../b904cd70e13fce81f61a4d0865f8ad2b3561712e | Bin 0 -> 363 bytes .../b92b639caf82683eacb8f0039b5fbe59f58d26b6 | Bin 0 -> 3160 bytes .../b934251d7b289b9d88dc975effd56675637a8606 | Bin 0 -> 751 bytes .../b9642558ac4084c5b517f91559e894bf74eede80 | Bin 0 -> 8140 bytes .../b9753d5217f5e948a28ad8977a1826fe5d6f02cf | Bin 0 -> 1516 bytes .../b98400dc366d5be20534dcf053ffeea54aaceab8 | Bin 0 -> 544 bytes .../b989c519ec275adf172481840c20168113ff960f | Bin 0 -> 2101 bytes .../b98b79ab187796c0e98f8a46d7125f60899aea22 | Bin 0 -> 601 bytes .../b9b3eb11a582981a8fdc9d64016303411a4555ce | Bin 0 -> 860 bytes .../b9c0099fb4f8b2cbb6b362d21dbe0cf314b5aed2 | Bin 0 -> 423 bytes .../b9d12d952a0072bddb8bcef9a23fe18c320136c1 | Bin 0 -> 544 bytes .../b9d6386a11c5f6bc70842e8408e817954d57fe2c | Bin 0 -> 92 bytes .../b9d68ea081c736c33c703b503f5d358dc9ff5f07 | Bin 0 -> 778 bytes .../b9dc80d71694ee48b395911b8f04d433402c87d8 | Bin 0 -> 1030 bytes .../b9e109313d6ca2f5a4666f609fb782a69feb37a5 | Bin 0 -> 53 bytes .../b9fbfd68a37327d97bb7438b9fd625ea708c1bf9 | Bin 0 -> 111 bytes .../ba18c70940de0148f6bac815beb0b22c1c17942e | Bin 0 -> 688 bytes .../ba645f6f5194b3bdfc0a44b0254ae09c18396b6a | Bin 0 -> 860 bytes .../ba70377676ff6ce446b89b6172fcc58e1030fd1c | Bin 0 -> 2101 bytes .../ba7112ad7036f37b564097446eed410d8cc82c28 | Bin 0 -> 2779 bytes .../ba90422cf902dadaf816d7c44d8e00ed37025080 | Bin 0 -> 1335 bytes .../bac2bdd9b71b115ed4e3ea5bd3c4745cdaf4dbd7 | Bin 0 -> 119 bytes .../bac92f3e11aa95d0dfdf28e953fa24acf92a4160 | Bin 0 -> 544 bytes .../bae85d276ed3e8be54ee1323a9e53b9d8b34ae2d | Bin 0 -> 62 bytes .../baee4a2de9b26176d4d2f4b238498fa249ebf902 | Bin 0 -> 544 bytes .../baf0ba04800015f887b26347167b803350138184 | Bin 0 -> 2101 bytes .../baf96f96ca7b4a22d356bd51afb4c3d4303de7ed | Bin 0 -> 476 bytes .../bb1544233df2e416203258e9284175a76aa070b2 | Bin 0 -> 544 bytes .../bb274855dbcbf9ab1f49a309f82e35e2a23a26f8 | Bin 0 -> 544 bytes .../bb2d9878ba72a5a270fedbb0439e95ab2d98f680 | 0 .../bb69b5ba8b93ed0a49c47e41db84e3da5c0bcaca | Bin 0 -> 427 bytes .../bb9c1d9cfc29d50a1caef08b77953201adf18933 | Bin 0 -> 62 bytes .../bba5275197a98dcb81d7ecca039c236953d09cc3 | Bin 0 -> 905 bytes .../bba96d7bcd6dcdfabdd9066936b5f6843a539124 | Bin 0 -> 544 bytes .../bbab44529f279132bf53700912d635a48e2ee339 | Bin 0 -> 544 bytes .../bbae911e5157d4bf9d5823c23a754d4b05dab5ad | Bin 0 -> 3463 bytes .../bbc642579c19de83b2b3a0fd6b4e38c1c460e026 | Bin 0 -> 544 bytes .../bbcef716a9e84a629d7e6fa2308ba627f8bb39e8 | Bin 0 -> 853 bytes .../bbf5b90345e84e2a7711d80d88c485b26d5ffa5a | Bin 0 -> 696 bytes .../bbfaa60d41e267b90e72cc4aedef31ac563e43a5 | Bin 0 -> 78 bytes .../bbfbf6ebe6d3125c8089cea03be317160e68a1f3 | Bin 0 -> 697 bytes .../bc1a0935164add06e019663ff03a7fdcef85bc76 | Bin 0 -> 19 bytes .../bc1eb9cd78a0cd336a9c4fd49332601bc0b23426 | Bin 0 -> 432 bytes .../bc43de1575eeb7ba519997d69bc1a030e5d64df9 | Bin 0 -> 845 bytes .../bc45cdd8f5df0343cbb73c9fc5198d83ee453bf1 | Bin 0 -> 424 bytes .../bc480636cf084a6cfc84a24c2c5b0cacf9e123f1 | Bin 0 -> 1955 bytes .../bc60cb5fe07c97a75efd45fcafcf7d4854fa82b8 | Bin 0 -> 2183 bytes .../bc69091aed7be35aabb93deeb628655a1657fe02 | Bin 0 -> 1335 bytes .../bc70880e0f8c741cee37321b83013ec30a073d23 | Bin 0 -> 3261 bytes .../bc8f82800dbdcc691773b0333548b8ccbdf6ad9c | Bin 0 -> 546 bytes .../bca6331fa3e7e5fd9fe60a37b5bbe62bf6e56e88 | Bin 0 -> 423 bytes .../bca9b13071743bf0f53fac21182127820301156e | Bin 0 -> 751 bytes .../bcafe234e24463adb4525544be884b2f2d371914 | Bin 0 -> 480 bytes .../bce99cf31a3d774c28a68d7bae60c42e584674bf | Bin 0 -> 768 bytes .../bcf83f2c7d104c256e474da1fee2966871453430 | Bin 0 -> 363 bytes .../bd04d5035958f46becaabb820401b83633872a35 | Bin 0 -> 544 bytes .../bd0c2fa34e7d10e83984cd05a603e1f471388fa1 | Bin 0 -> 685 bytes .../bd1845bc6b21b7eb937a93862a27f933ce17e2d8 | Bin 0 -> 529 bytes .../bd2b67e7c76dab55b17d45d5395073e5d28c8240 | Bin 0 -> 665 bytes .../bd5487a142e88a28d232eeeafb36507c71dc6e01 | Bin 0 -> 749 bytes .../bd6d9a4ee678d373d94a8a69d5025a50fcde61f4 | Bin 0 -> 480 bytes .../bd7620d58136b74ffbd900058c375295f7bb858f | Bin 0 -> 694 bytes .../bd8797c75b4325f666605ab6ca9f659c387c8de0 | Bin 0 -> 62 bytes .../bd9c0d86544a1643d6545aac353e3b9ea8a9d4f1 | Bin 0 -> 3154 bytes .../bda18cdc5abef4f35f1b2939813e3f06f8f17d81 | Bin 0 -> 784 bytes .../bdbcedb7d704b47e8647dd97009ad4c0a5acc763 | Bin 0 -> 2332 bytes .../bdc5a15a046746e4e2ba78899c529dfd1c61a454 | Bin 0 -> 844 bytes .../bdc99601b542f3a924d6b3b6ddbd3cf08cd10384 | Bin 0 -> 443 bytes .../bddf04f0ce0a4d0ca50223ae4df323f8ceac32f8 | Bin 0 -> 116 bytes .../bdf444e013cbc4c6b9e55002f19f9f5601673294 | Bin 0 -> 3166 bytes .../bdff16640b204f1283dbc460334f06b009f19a4c | Bin 0 -> 1175 bytes .../be09c62d2899ca5c2cec27327678ac4193ec927b | Bin 0 -> 536 bytes .../be1fd7cc9fb2ed06e3d31732c47f482be791bab3 | Bin 0 -> 751 bytes .../be22212337b5a31b2604403f93c24cabe6bafcbe | Bin 0 -> 1022 bytes .../be2d21ac977fb88c3548b0e4211f55447b1c9ebe | Bin 0 -> 2005 bytes .../be39d2b55363609f1d90508f3934a0cdc02894fb | Bin 0 -> 1540 bytes .../be41f49da37d45ee1918c3b5f37f654d10e5317a | Bin 0 -> 5984 bytes .../be47d2b1dd683545ac46c64007848a1dac3216ed | Bin 0 -> 423 bytes .../be7730e6b6e6c3a65c5711a7032530242495603e | Bin 0 -> 174 bytes .../be88d1bab3dd7d79cc151bfdd8fdacb288e390f0 | Bin 0 -> 423 bytes .../be90c9f86e25c5ed8f4ebcb03dda57afb5bb9442 | Bin 0 -> 2101 bytes .../bea70a2dec32aacecbabf8ced3a76e9d728a1b7f | 0 .../bee23e2232422bd452db9b44c5242d51def25e85 | Bin 0 -> 4001 bytes .../bf01fcbcca973bee201979151c40b48d7bd1a2a2 | Bin 0 -> 363 bytes .../bf175313dd3dde6bf40c9b84ea382388937f3827 | Bin 0 -> 53 bytes .../bf30723ef71f42785da9ff0c54c138581911d27a | Bin 0 -> 53 bytes .../bf3bcb2b6091a07a62384e376a1077231000fc30 | Bin 0 -> 793 bytes .../bf3c5382f5f270682366a37f1e7e4347c865bf73 | Bin 0 -> 544 bytes .../bf5d38910f90ab2aae878a339ef60fccb26a1ebc | Bin 0 -> 544 bytes .../bf730bae6e0e1f0d7536a9f9edc24be75ba12242 | Bin 0 -> 983 bytes .../bf74800a837f5e5e24f58e6081bd20bb282711c5 | Bin 0 -> 2332 bytes .../bf8b30e413138e407303fdddec641474f74f07ac | Bin 0 -> 955 bytes .../bf90d4bf8b4cc7b7738f228dbb206bc39d408439 | Bin 0 -> 817 bytes .../bf982250ffe930f4556b9852b6c88352515f4855 | Bin 0 -> 760 bytes .../bf984a0cfe645c3ba84e8686e024490753798326 | Bin 0 -> 2251 bytes .../bfa5049c132449db4318bc695f714046ac6792c3 | Bin 0 -> 2005 bytes .../bfa9135c32f43d7287bd3a0f8b8c2826ba56ac97 | 0 .../bfb8ba606498fa1d5b812e8c09d16bbc369c9857 | Bin 0 -> 778 bytes .../bfc94ca124f5331c1cd96b74028375e9ca5bccd3 | Bin 0 -> 981 bytes .../bfef24ff2c5535d990a074b797a20ffe1022e36c | Bin 0 -> 618 bytes .../bff3adc6f885dacdf0165f099493820372189c1a | Bin 0 -> 740 bytes .../bff7d442961b42236367a2377182489919680380 | Bin 0 -> 2251 bytes .../bff93ae9f53351b1cc0ca17dd87d57f76a0b3a57 | Bin 0 -> 83 bytes .../bffac6f745d492fb71e046e509a27a779718b0ba | Bin 0 -> 741 bytes .../bffdfa1466cba69a26e1b344a59cc7f2ddebce4b | Bin 0 -> 696 bytes .../c000696cd23dc20b2e22c5b9aefac461ce40ab63 | Bin 0 -> 696 bytes .../c01187baf00cf43ad90330b148cdddc4115b4693 | Bin 0 -> 6594 bytes .../c045a3998527375aacb218c5c0cd65de8cc1f7b5 | Bin 0 -> 479 bytes .../c04f3fd316707dc2cee8daa7761fbd081f343a56 | Bin 0 -> 544 bytes .../c0639d71ea0f6633440b33a626ec8360e2022c0a | Bin 0 -> 1335 bytes .../c066255b3259f68226e7d1b916fdbe65d4f47609 | 0 .../c08e46e851d1ebfc864e7c7de43062222f4baf7f | Bin 0 -> 371 bytes .../c094a646eb6193ead7b1354d2c7cd55392dc3a16 | 0 .../c0a04207ce08bf7a01f3feca435e92fd6fcbcb5d | Bin 0 -> 2101 bytes .../c0dc28b62994b9249cee8400f7ea978fd5e04ca0 | Bin 0 -> 5036 bytes .../c104150329243f08ca96250cd4b887bab009ff3d | Bin 0 -> 696 bytes .../c1234356107df70bb27a10708a575b5bb8a2aa4c | Bin 0 -> 544 bytes .../c136139359eff1eebcc3a5f1b8e233c706a84efd | Bin 0 -> 1176 bytes .../c1410f2d5bcc99bd5b77a0fdfa47a72eac5e1380 | Bin 0 -> 733 bytes .../c1619913d88ac6f01b43ff1e79c43a079f1e1276 | Bin 0 -> 3159 bytes .../c1628de292162f21d77aa860c0d44ed487debd91 | Bin 0 -> 3159 bytes .../c17e89f05278575d1670b87547977d43fb0061e0 | Bin 0 -> 511 bytes .../c188dc0dfdb30dace430a7f9c4cada0cfcbac707 | Bin 0 -> 475 bytes .../c1987106d67a20557fee526f2cf4fb970486dc21 | Bin 0 -> 696 bytes .../c1a4876610e6b9153569b2e4f6e100efc35b0e14 | Bin 0 -> 540 bytes .../c1a53e5643b2a30d114845d96a8b882fcee08f00 | Bin 0 -> 9 bytes .../c1b3a1d44d920244635170184584d070bf50d3ed | Bin 0 -> 955 bytes .../c1be75061aba11086fb13b1ea81566fa26d79438 | Bin 0 -> 2005 bytes .../c1c364e4371e28ba74e87168ed0fe03a4ebaf81f | Bin 0 -> 860 bytes .../c1cbd3c6dc38408cc3080eb8391697dde283f125 | Bin 0 -> 576 bytes .../c212598a468609a901c548ed56bdb12e8f116071 | Bin 0 -> 2101 bytes .../c21ff5e842658d3c52233e8be4a20b9cdcee1070 | Bin 0 -> 920 bytes .../c2237078f655a0445e3ff4a2b4048b27e7832671 | Bin 0 -> 2252 bytes .../c24470d6719206a825d1df95728db6f4c520f6dd | Bin 0 -> 9 bytes .../c26889cbaf132e163da96295d5cf5127e3effa07 | Bin 0 -> 867 bytes .../c26faa5ec0cfecb96068bd8466a8d2b5f0b554d8 | Bin 0 -> 16645 bytes .../c273f0ec4cc4c9995fcbfeb9b47f4d188277fd65 | Bin 0 -> 537 bytes .../c2746b003c7a471509dc9b87948b8891a44398b9 | Bin 0 -> 2251 bytes .../c2a2dfab515485a25bc65b32cb9d73b8e83d1257 | Bin 0 -> 955 bytes .../c2c6d4984ac12cd78b6deb1a013f1f7b35f2f792 | Bin 0 -> 3159 bytes .../c2ded3967d3ecb513258bcddc65c41758ea31dd8 | Bin 0 -> 544 bytes .../c316f99fc3b86472f3c063147467684277477b19 | Bin 0 -> 703 bytes .../c333d435902c0e6c9a35e70e3093dae7ab2128ed | Bin 0 -> 475 bytes .../c34062abdc4cfd89c29a4cfbabd474ac256a0e95 | Bin 0 -> 928 bytes .../c350bb336cc3f59dda3dd0c76547c3e984333712 | 0 .../c35260935713a8f4dbeef5c24677b845afd80c8b | Bin 0 -> 3154 bytes .../c3684f6ce40437d598ef7a7308eb9f94b26ae8da | Bin 0 -> 853 bytes .../c37ddcbecc1e3dad3cb2fea977383dcc92a701cc | Bin 0 -> 479 bytes .../c39114ee25838c960ccf0fa80ebcf8a2f2362db5 | Bin 0 -> 424 bytes .../c39d3d89d83f759d28070dc70963abdf9110ecdf | Bin 0 -> 532 bytes .../c3a5a9af24d55292064bb4f1d750ff0fc5444622 | Bin 0 -> 539 bytes .../c3a6e2303edc9e51f0f3b0ad87a268690e352e8b | Bin 0 -> 805 bytes .../c3b5ebfcac1520d89c9f1d4c7b0cb4042bb3821b | Bin 0 -> 363 bytes .../c3cc2772a3be8b39a7ec7828ba48669c7198b507 | Bin 0 -> 3160 bytes .../c3e4c9d09319ea885b301a606748f18f30f2f36d | Bin 0 -> 190 bytes .../c3e64da4f47197893787f08e88a72d7d08d049ce | Bin 0 -> 981 bytes .../c3e99499720cc1d025b9e16371076682021b4057 | Bin 0 -> 544 bytes .../c3f192cb8853ccfbe3b39d7f4572e12ef50eff44 | Bin 0 -> 1233 bytes .../c412bbff304e49c0d1bbefe6f36d3fba3c59ddc2 | Bin 0 -> 3159 bytes .../c4197d30e63646289e9a7e0ce70ac8ab5d02b851 | Bin 0 -> 1336 bytes .../c43ca124e9f6f8a0cf3a70c89e0e7cdfc1cb1486 | Bin 0 -> 544 bytes .../c4551d002a1de3c6d5ff76f5c2655fe073786194 | Bin 0 -> 1044 bytes .../c4652543ba37de8d3cc677656424034aa3779f64 | Bin 0 -> 955 bytes .../c46759964ffae5297f8945e556efd095149ceb41 | Bin 0 -> 384 bytes .../c46796d60657b20b54d634b694ab0170610679dc | Bin 0 -> 1030 bytes .../c4750cb81df39a004739c3c9d6a3e66c784ef8c7 | Bin 0 -> 478 bytes .../c4882ff80d6a4fe843789fa4a8ec34b37c7ace3b | Bin 0 -> 760 bytes .../c48b62819868a4bd3b6470c680f0bfb1bf0afc19 | Bin 0 -> 695 bytes .../c49ec5ccd11ac98edb5db37f3e3ead8e24df0b3e | Bin 0 -> 544 bytes .../c4a9cedd4f7053e116fdd10e517fd1252be3b473 | Bin 0 -> 544 bytes .../c4b9c4ca01d9a20e235cfbb0d7c493148ff9590b | Bin 0 -> 2331 bytes .../c4c6e55e70f7ce8003245e52ac20861571c8c0a5 | Bin 0 -> 192 bytes .../c4dd460e9ba9ed62ea4e771bf6d80d0a31edfbde | Bin 0 -> 547 bytes .../c4f1d2cd94683c7ae517a221935e2c1e36fcfe81 | Bin 0 -> 1175 bytes .../c4fafae82fcb199f282ced9c97286af165ec2e56 | Bin 0 -> 716 bytes .../c50e44bfabe1ea3e03bdcf177992dd96695f7acd | Bin 0 -> 544 bytes .../c5346c2f9bdc3de643b8453e88fae6b8ce86cb1e | Bin 0 -> 845 bytes .../c560e5ffcc3710d0189e605118181a834d226b36 | Bin 0 -> 805 bytes .../c564901bcd8795a9b7d2885be41e057d346e39f6 | Bin 0 -> 133 bytes .../c594907b540161244d641874a8ae9ae60e1a8add | Bin 0 -> 12376 bytes .../c5a2e087ff962f3d321ff640d713223e0b4e9e46 | Bin 0 -> 112 bytes .../c5ddfea1fc391cd3458d0fb2448ddc1c15eb03b4 | Bin 0 -> 12376 bytes .../c5e23bb082550af10b399be2d76883ddec81fa99 | Bin 0 -> 546 bytes .../c5e2848e2d8b7df9e753a6b86426b76b2408eb55 | Bin 0 -> 696 bytes .../c5ec5e68d63ec6e5973ec245cd88440af158ab0c | Bin 0 -> 544 bytes .../c5ed42d310ddf2f056096e0ac029e2f1d80fe97a | Bin 0 -> 519 bytes .../c60da588d0047f2547cc3d6057d7f852db3317bc | Bin 0 -> 550 bytes .../c61be9e6319a141d076c9b93faaad37402cc8873 | Bin 0 -> 539 bytes .../c62dd8fceeb7cb1d8323792757d1e741a424ae8e | Bin 0 -> 856 bytes .../c63e2cca2f617fa5dbc999f704d1edad78586e34 | Bin 0 -> 2408 bytes .../c644f221c8b5fd45098cdc20fbc8f030235b17d4 | Bin 0 -> 6637 bytes .../c6595c48eacd1d625f46b2d6d031720654e763e4 | Bin 0 -> 696 bytes .../c66e740279d09ab96efd31d16504a51a365cf734 | Bin 0 -> 860 bytes .../c6732e15165c2d6bf9d17f1e8db60b4780194244 | Bin 0 -> 856 bytes .../c68e25847d22ba28e27a5d0ddb252845bac0698e | Bin 0 -> 544 bytes .../c697134bb733ff666f8f212226e32ef933539c54 | Bin 0 -> 749 bytes .../c698b8f029d000da2dfdd1e7dba295b8d064e814 | Bin 0 -> 544 bytes .../c6b89288feb21507ccf65736b03fd5f181658120 | Bin 0 -> 423 bytes .../c6bd84dea9f3cdb2f1e8f0f4604aa35ec8a37cb0 | Bin 0 -> 6599 bytes .../c6d64dedd9072c16880f0da80fd50040ee3e2750 | Bin 0 -> 695 bytes .../c6e10914542b87018f3a89ff9f2118174c268178 | Bin 0 -> 782 bytes .../c6e3f111ca254ed82d9a1bf366b587b37b72efb0 | Bin 0 -> 115 bytes .../c6ec8ce0090faaefc095d0798d29ffd0cebb5aef | Bin 0 -> 2252 bytes .../c6f77d8a372678886904bf6acf46b6829a666ad4 | Bin 0 -> 2835 bytes .../c707a5c21a145c5e528da68205cfcfb1b3476d5a | 0 .../c710b29c8309d5d75303edd2d46753906213c20c | Bin 0 -> 860 bytes .../c72b8ffe8c67b32ffea2391eb587f494b07eb188 | Bin 0 -> 2101 bytes .../c734ba3a46ff02e51d0f58de10d465839871a47f | Bin 0 -> 880 bytes .../c73a5af348ff2299bfbbee7f0c2dd095d1fe39f2 | Bin 0 -> 364 bytes .../c74649790e18f8283961f6caf0f06cf2928d9698 | Bin 0 -> 3159 bytes .../c75e563e33689be5c2eae30bad8d88ecfa9eaa87 | Bin 0 -> 13191 bytes .../c76038d3e4ef35b56f2234c8d957a20fa78bfa6c | Bin 0 -> 544 bytes .../c76473595e42ca0942f76ba35fec90337c530577 | Bin 0 -> 668 bytes .../c765bb61751e5392e7e2728b9c165af6250633cf | Bin 0 -> 853 bytes .../c77bf5088bc6b4f3faccca93d90c33826d6f8754 | Bin 0 -> 363 bytes .../c7896a742a3f715f5daf6017284ea6666eadcffc | Bin 0 -> 852 bytes .../c78d8e59168ec274c727c07787e76a40b1fe5561 | Bin 0 -> 859 bytes .../c7965622a5920c5362c39615ae3d72ab58eccec5 | Bin 0 -> 415 bytes .../c7ac8282761126bbeddda55f7dd69f47de39c0d1 | Bin 0 -> 1176 bytes .../c7b8868b8aaf65fad9560b5fe826f9b55cd41a99 | Bin 0 -> 556 bytes .../c7b9f97593a7f98a79b51f68bf8eae837a760baa | Bin 0 -> 2339 bytes .../c7bc59ef9483d23af4e6f9e3083794cc3660c8dc | Bin 0 -> 817 bytes .../c7c3c997572f53752eee2b75cb8700b0801a533e | Bin 0 -> 934 bytes .../c7ffc05c4bedc91974da2cfc2172b25667f4b6c8 | Bin 0 -> 423 bytes .../c80fe19e143b47b4222397badf0950ebf1412b9b | Bin 0 -> 141 bytes .../c81d8795ff6d0bab4967a497b98d71781d6e0360 | Bin 0 -> 363 bytes .../c81f7b22e821992c59accc91fc16fe5886f48bdb | Bin 0 -> 16645 bytes .../c8203636134047568a827453727f536444d75d3e | Bin 0 -> 2251 bytes .../c8295c733b03bb130a659c0a8ff9d345793dad10 | Bin 0 -> 544 bytes .../c834513b347c7775b407366a7ca5621c5fd15f65 | Bin 0 -> 541 bytes .../c836d5a5d2906d2dbe23a71c6d51c674b4ef6500 | Bin 0 -> 751 bytes .../c847591adb00035fece2f6f553589264f9458a40 | Bin 0 -> 3154 bytes .../c848078e8570203112b99a4709ef895183dafd75 | Bin 0 -> 2251 bytes .../c8677d71ef26521b698188f9feb144029bc2b5af | Bin 0 -> 955 bytes .../c86be8bbee14465600d3310ae01a6ee8d6068528 | Bin 0 -> 934 bytes .../c87239a1218c85736dfcacd07fea764065adfa9a | Bin 0 -> 853 bytes .../c8765276917f270026a9a2bcccfa8b2cae7c910f | Bin 0 -> 119 bytes .../c8a5a3958f0b344f33c26ced96e0f43a2b34eca4 | Bin 0 -> 544 bytes .../c8a9534cbc0ee48322510de6653117647ff12af5 | Bin 0 -> 898 bytes .../c8b1df60ebba96c7048586dfb063fdf59a021258 | Bin 0 -> 480 bytes .../c8bcb277937fc98c1a7bcc8f746c230e98810a89 | Bin 0 -> 859 bytes .../c8c12a01d94fbfe4c80fbf84c4244cd001b1ea23 | Bin 0 -> 2251 bytes .../c8da2773c2e3faead2a405eaede2e337b762ed45 | Bin 0 -> 685 bytes .../c8e27680c55cb9d43d7dfb1137581ea359928982 | Bin 0 -> 423 bytes .../c8ec0c6516b4a2ae72d51a7800a7c33582610917 | Bin 0 -> 544 bytes .../c9093489207164e9ca9c51e4811e5e9888032de7 | Bin 0 -> 7 bytes .../c90ebeb64ef60b6a248a8d710ed3cad9df7a153b | Bin 0 -> 423 bytes .../c9127e46b309af0586a6b445bf234b04ffdbc995 | Bin 0 -> 424 bytes .../c9239c3692f4b70a9ec9a528d707c1b4aff681e8 | Bin 0 -> 3154 bytes .../c929a00b1575973e68310f7249e3dd5808619142 | Bin 0 -> 544 bytes .../c92c34131b635630b3beb51e80bbd1ade7cc21f9 | Bin 0 -> 684 bytes .../c931b93a41aeee31b87b5eaec20fb023fc9cb9d2 | Bin 0 -> 694 bytes .../c93201c580bf7eba02b7d7a7ba439386187eeada | Bin 0 -> 1030 bytes .../c9387c475d5438a5e2d44e9bf5147764abbbcf9f | Bin 0 -> 817 bytes .../c93b56a527beba593956f423007c5cd3adbde057 | Bin 0 -> 423 bytes .../c945cc21fddc979dd7ed963065151c36329938cc | Bin 0 -> 1540 bytes .../c9554cfe1e904fe2aca18ae71a47e3cfe6854855 | Bin 0 -> 544 bytes .../c9626e14bdee83cb947670484daab6c5082fcb71 | Bin 0 -> 2836 bytes .../c96b32cc3cd89055994eba396c22052734df2e46 | Bin 0 -> 936 bytes .../c97ccac4d24297fd0db964d645cb0a5bb8b92af7 | Bin 0 -> 363 bytes .../c981641609048358f248cdd782a74a3c23d79d1e | Bin 0 -> 696 bytes .../c98db72e8922493a4458b6fdfc755967aa311a0f | Bin 0 -> 544 bytes .../c98fd69f83a0ec60e241877fcc21a1ce687b3946 | Bin 0 -> 544 bytes .../c99f9fee8fbde6d00063cefc0c4a3a127158220e | Bin 0 -> 544 bytes .../c9aa7be7a4753d34513cd66e5306b43a60284d3d | Bin 0 -> 478 bytes .../c9b20bb80bcc1bad037b34d79afe5feea2bedaa9 | Bin 0 -> 691 bytes .../c9b3fd5a7c3692b36df9d1ffc2fdd9d525645c59 | Bin 0 -> 622 bytes .../c9bc55b02342123ff4c9c794e5f825d77555a35d | Bin 0 -> 720 bytes .../c9c77d0fe50267336c880c11740af880739491e2 | Bin 0 -> 934 bytes .../c9c90b52b95a0f3385554d1076533d46d5ce6804 | Bin 0 -> 3158 bytes .../c9d277af7ce0428f4239f03a79190bdae37fdb93 | Bin 0 -> 1176 bytes .../c9da53ccf6bf23664ca34843adee018ef73931d6 | Bin 0 -> 112 bytes .../c9f6868179710b0db1a443dbd48ebfbbc71dbc45 | Bin 0 -> 3159 bytes .../c9fac1fc63be63ffcaa115b9bffb729cd2896212 | Bin 0 -> 3154 bytes .../ca3397ec4f93afa6d0d4d5744d9dd7ff1a2b63a1 | Bin 0 -> 690 bytes .../ca35658c6fb147d0e00083d0661f427da3f57c13 | Bin 0 -> 3156 bytes .../ca3ade4692a70a10d70d38757cc6e1c04b7d02b5 | Bin 0 -> 696 bytes .../ca3b2bc923edc9cd35a7a126319da3945202a457 | Bin 0 -> 1669 bytes .../ca3c7401958ba0540f5fb180b1c0196cfb20243b | Bin 0 -> 2333 bytes .../ca56e232f516ba74ed7bc63c8241ed2932077c6d | Bin 0 -> 685 bytes .../ca5b4f0b4058b7fb8e3eebe225be3ee5f7e1b499 | Bin 0 -> 348 bytes .../ca6b13c2aa4fb08651f16d82f28d2677a3139ddc | Bin 0 -> 55 bytes .../ca7efe6d6c8d4e6de030166a66e4b0bfbb1d42e7 | Bin 0 -> 552 bytes .../ca8bb1c913b2d2a96e6ff24fe3f988afe6f670cd | Bin 0 -> 544 bytes .../ca90e472d5a71290044e24f71bf7316c617a4107 | Bin 0 -> 475 bytes .../caa3342196b679c2b2070f9fb25dfb795cfa78ca | Bin 0 -> 563 bytes .../caa8e620b4333ef9c35a8d2dcd67eba4dde5f2d4 | Bin 0 -> 465 bytes .../cab639177ac33423082a87b971be641d7c6ded28 | Bin 0 -> 1049 bytes .../cab939c1398fc6137144a3bc6b5adcacad33f1a6 | Bin 0 -> 696 bytes .../cace65ad0878c3290433c09913e8556f5aa84fd9 | Bin 0 -> 741 bytes .../cae05ca057e6617aab9789bbcaa3bdcdfa51fb1d | Bin 0 -> 981 bytes .../cae3e12b11ab0c9662abe4ae8493bac30baa5b7c | Bin 0 -> 2251 bytes .../cae8adc1c71aa4e57bac3347da7574a5b184acd5 | Bin 0 -> 111 bytes .../caefdc1ed84500d15a3418dd4ab390a1e6742cae | Bin 0 -> 424 bytes .../cafe6a4f21e6c574787e1895578630fad8ad05b5 | Bin 0 -> 981 bytes .../cb077850c2e5d120bc41bafb98589b1072dfcd14 | Bin 0 -> 695 bytes .../cb1d0b471561afde4fdaed15fd164f1a5a16dc21 | Bin 0 -> 853 bytes .../cb1f9c00bb26dfcaa311da6f08c2d12cc2d719b8 | Bin 0 -> 363 bytes .../cb388ab38f4c563568879dc83e26c0bc781368f5 | Bin 0 -> 6599 bytes .../cb3e4b02d6ccc8a87d6b7ff4179fc27c5f48126f | Bin 0 -> 544 bytes .../cb6bc88a0d7af7fd4b25473d31c556fb290d1e2e | Bin 0 -> 484 bytes .../cb6d5d5128cc8a5539e48715977e8a3cece6f4c5 | 0 .../cb6faed059cc01d0ae3222a3098862106d1a74ed | Bin 0 -> 2028 bytes .../cb710557010c392d2199c9eaada098c94842ebac | Bin 0 -> 2251 bytes .../cb7c78e6e92aa77b519b89790e5fb1b00c9ff0fe | Bin 0 -> 544 bytes .../cb7ed0cb2fedaaf88a332cfdd7c9d5b6c74cbc11 | Bin 0 -> 845 bytes .../cbbd167d9d91db7c0acec4719a407b44b8b0cf84 | Bin 0 -> 1168 bytes .../cbc043650772c10f1d674acb8674c1741cb05628 | Bin 0 -> 955 bytes .../cbd6f520e9ccd1d769df0c155b9b559af61cb1bf | Bin 0 -> 111 bytes .../cbe8dba956170f7426d372ed1eb45d33db686cc9 | Bin 0 -> 717 bytes .../cbfcb8022c378ba0e532a8ed572ac24f086c7d88 | Bin 0 -> 1868 bytes .../cc02997e982b0d126c20b75b4cbd03b4dd22f4c0 | Bin 0 -> 871 bytes .../cc096b0a680c877ef5747e3f9eccd2b302ed14d2 | Bin 0 -> 867 bytes .../cc21178ffc1153fa502f81d98c8b9b2ecc70139e | Bin 0 -> 853 bytes .../cc28958d338366bea1237fa767d5f98701843e25 | Bin 0 -> 860 bytes .../cc2a1c3ff14e08a5f812cf3f0ebf1e9789cb31b0 | Bin 0 -> 712 bytes .../cc342a336c1b99a386b667bda24f08cfb587f0c1 | 0 .../cc5570dfa4f24c8b4ae48b8f9f63fedf093b2c67 | Bin 0 -> 544 bytes .../cc74987531015569a000d514d087991e7daae082 | Bin 0 -> 853 bytes .../cc770db336828666a9fad328485d218a99636bb5 | Bin 0 -> 860 bytes .../cc7e604c7905f15080795527928222d2d1bee77a | Bin 0 -> 696 bytes .../cc931855701616c763a075f5ef8542ee2b1de721 | Bin 0 -> 423 bytes .../cc9ac3b84bee684e6ed62874b274f752729a1ab3 | Bin 0 -> 696 bytes .../ccad9a9d15b22227a44e0a11e50e94c7e0904379 | Bin 0 -> 1229 bytes .../ccc340d10c8f22771df5ee4e6aa9cd62cba75fff | Bin 0 -> 749 bytes .../ccd38967bf36f636fed6a3abd50fbba682fb1c33 | Bin 0 -> 44 bytes .../ccf2e4b2c2a65e9b7e0c41f1aaea6bf0c63d82fe | Bin 0 -> 544 bytes .../ccf4d30643081a2cff09f0cbfd922f970215264a | Bin 0 -> 459 bytes .../cd32365f23a10cdb2b1047422199b904be4bc46c | Bin 0 -> 544 bytes .../cd599a9a4d533ddc41ddbd8067f3b582d1fc800b | Bin 0 -> 480 bytes .../cd624cc840935ca5a1048c133123b2ff51cb16ba | Bin 0 -> 692 bytes .../cd6ef0a522b0d04b17fac896be0185ede723cec5 | Bin 0 -> 2861 bytes .../cd86ae75828bb9633f47f8b158b8d304e8e0b56a | Bin 0 -> 860 bytes .../cda4eb067282e389dc09493338b3c13f7355bc6d | Bin 0 -> 363 bytes .../cdb18a37d811252d781b1d04209411615ea62898 | Bin 0 -> 165 bytes .../cdc89076d36c62e8938683adf3a4df924aafe4a2 | Bin 0 -> 1943 bytes .../cdd089349b331ef564a0baf036c5bd7ba0c73c70 | Bin 0 -> 3154 bytes .../cdd87d82e7b95704280b97956c8e061a213e2e7c | Bin 0 -> 16645 bytes .../cdde58e3a47ccc1ccdfc9d1ca39876d2f7af7dd4 | Bin 0 -> 563 bytes .../cddf7977979c977ce1e1f298d3b630de8006bd60 | Bin 0 -> 364 bytes .../cdf6a8397eff9e7f65e77047b167c52c85d101d4 | Bin 0 -> 474 bytes .../cdfb7625148432225a9594aa9ac25691375b8ce0 | Bin 0 -> 840 bytes .../ce00f457e1d347436aeb26fead5d8e79bf239615 | Bin 0 -> 544 bytes .../ce17596074d5dbdfc95c266e324ac9a6ffb3fe6d | Bin 0 -> 475 bytes .../ce24402b5a7aa6844553f7639f6377cac60b5235 | 0 .../ce3a10d3186077b314b8c33cd5c0414b87ff564c | Bin 0 -> 724 bytes .../ce74183848c17c54f6d65ad8abd496e5cbb76633 | Bin 0 -> 1030 bytes .../ce79f8c29193979e4c1ebf0dbe22b3eee08cc37e | Bin 0 -> 544 bytes .../cea2b88bc13fad4a2a9a5c9416dfd9b84c803f60 | Bin 0 -> 3528 bytes .../cedd1f6fbb7c1a76f0ceecbfcb17f22867d10069 | Bin 0 -> 424 bytes .../cedfe7f75a2f271f8eb206acebc8834ef5b01842 | Bin 0 -> 690 bytes .../cefca93b324c300d195127b02f4e580b20882846 | Bin 0 -> 53 bytes .../cf0f5b6a93f626c80d047031ef692e2ea145b2e0 | Bin 0 -> 981 bytes .../cf1aee56ad9fa0ca21312b0f4fe036f22028bba1 | Bin 0 -> 853 bytes .../cf235448412bf2808ac11bff53030b9d0e36d6f0 | Bin 0 -> 3154 bytes .../cf3e58ff5f2273fd2dda2e201ab748ad21c9f13c | Bin 0 -> 475 bytes .../cf63b89a9bbd0458275bb39264c366df18bd9bfe | Bin 0 -> 696 bytes .../cf722d4fc60b46b78c616e8e1e501164fb233527 | Bin 0 -> 3159 bytes .../cf7d6fb54a397c9719c081ea8acdb0e0f6ee0887 | Bin 0 -> 428 bytes .../cfa06f88edb836d4854f20005acc93916bd307ac | Bin 0 -> 2251 bytes .../cfa361c5a3aa84b5a8637544ae02131e884bd591 | 0 .../cfa5bc8a4b12624278ac6ed9fd0900954142e850 | Bin 0 -> 934 bytes .../cfa622948c2a11207d5959c3e081928c6dfc7c4d | Bin 0 -> 239 bytes .../cfa64bb52f1256601e370bd753ccd07edfbcaf9c | Bin 0 -> 696 bytes .../cfb5de7d0803bb750cb26e11fd0232b8581f496b | Bin 0 -> 539 bytes .../cfcaa46698600ac270a1268ac725cc23119b0fb1 | Bin 0 -> 584 bytes .../cfdd7460cb1aadeec5297a95a2f2994a19dec38d | Bin 0 -> 423 bytes .../cfe70e0e315853f0a4440345a5259009df5f4aa5 | Bin 0 -> 936 bytes .../cfed02d7f21e80c8fa25fed3fba695138d5b467c | Bin 0 -> 415 bytes .../cff7884e02e54bf286e6e6bad7ef575cb744acb4 | Bin 0 -> 2101 bytes .../cffe1518134b80e4b5fd1be18a38d1ed9538ff4b | Bin 0 -> 36 bytes .../d00a3105b5921f3cd28a5c6eb1c2186f9cc500cc | Bin 0 -> 544 bytes .../d01d3757ccb20467c549e4aa5712fbdf581c40d2 | Bin 0 -> 696 bytes .../d01fc0c4b98722982b185d0cbfc6c9f81eb76fac | Bin 0 -> 749 bytes .../d04692ab5aaea9d6acab7e14fa158a8c4920de27 | Bin 0 -> 8140 bytes .../d04b8746eadc24daafc15c5fb4a8d2535800b34f | Bin 0 -> 2101 bytes .../d059918ce124d3ee06be751e354db00a00b9eb78 | Bin 0 -> 15127 bytes .../d05a645a3a561ca47e72813ac2319eb0eb3553c7 | Bin 0 -> 2251 bytes .../d0697a6cd56871f2bdd28fdaf08ed1e473d50149 | Bin 0 -> 127 bytes .../d06bba3068487fa1ae5db7dd04fd82e7b89619c8 | Bin 0 -> 2251 bytes .../d06c9f429f12af403f0a7016ed8b80c8a1926926 | Bin 0 -> 3159 bytes .../d07584556a1bd577448f43bf1e8da8557b11e608 | Bin 0 -> 3492 bytes .../d080a864900f2ae7329e6493fcfdf7eb0e391f97 | Bin 0 -> 1168 bytes .../d09d9e87a9f0604550d60864ad6206e7dab20a32 | Bin 0 -> 544 bytes .../d0ae536f01d29d142779793b1ccd136cd45fbe7c | Bin 0 -> 519 bytes .../d0ce6e69724f9e49bf271d6c1075da79eca7e360 | Bin 0 -> 3693 bytes .../d0e7d59cedb6e9da187ada83b397c1eb8c5debc9 | Bin 0 -> 2332 bytes .../d11249b2560bb7454af12dc34bbe5b35593b8800 | Bin 0 -> 424 bytes .../d1292e8d50eeeb25706629ff57641f7eb15482b7 | Bin 0 -> 3155 bytes .../d132417bf9033a54b1246778f87bd87ce73515f1 | Bin 0 -> 423 bytes .../d137b69d53e0383dfb5c5f782e7689510f2ede6b | Bin 0 -> 829 bytes .../d13cd60d3974fdcef465fbd3c0bfbbf5f852e54b | Bin 0 -> 858 bytes .../d1451942594379f11f080d0a3ecdf0b1985a8cf6 | Bin 0 -> 1336 bytes .../d1594eead5356421642288f85d8fbc49faf75b7f | Bin 0 -> 1175 bytes .../d164ad1b82293f804e63a65a26b72c2d6db7d2f1 | Bin 0 -> 687 bytes .../d173a20377f6d6bdb75f0d405fe0978fac15eee4 | Bin 0 -> 544 bytes .../d174fd331ff9a9708b5e5d47da7f899902c77823 | Bin 0 -> 53 bytes .../d1896cb68a1b17fe49c3f2dbc6cb3ebf13d1127f | Bin 0 -> 363 bytes .../d18d5a473a029eca7e5e0daace6d60cd4010dcf4 | Bin 0 -> 75 bytes .../d1a0ee3d78b1c3d6e8b657e073e17067a3f52dba | Bin 0 -> 768 bytes .../d1c6d832e083bd54e834372a66ff9ae758da5ae0 | Bin 0 -> 432 bytes .../d1d22c1cfcaca91347792052dd7a03821a979462 | Bin 0 -> 685 bytes .../d1d3bc123a0c182aac5a4a0b95201389849ec926 | Bin 0 -> 3501 bytes .../d20ec37021490a8297bb48acb56e130f1ac9d961 | Bin 0 -> 544 bytes .../d211c1c89ee49a69ec0cac607287e00c5be15468 | Bin 0 -> 480 bytes .../d223da30f9771d947aaaf24a5ae7ced83344848e | Bin 0 -> 3784 bytes .../d22f103438775b0e0c0e8ce2a65f65adcfd96a78 | 1 + .../d23b42309c707e71500f46fcacf2191914ce20e9 | Bin 0 -> 2251 bytes .../d2410bcafbf3dbde5ae1f8ac6df125a795bb1d54 | Bin 0 -> 544 bytes .../d24c3e03a990d9135df197238cdfe200d0a679fd | Bin 0 -> 363 bytes .../d27ceb3bc3263b6e220842dcac049ec7064c6c40 | Bin 0 -> 1040 bytes .../d2814645c46f60b2831ba44be1d6fc6b35dca6cb | Bin 0 -> 696 bytes .../d2b0885280d7ad647afdacf9cfd88bf9dc26869c | Bin 0 -> 1178 bytes .../d2c13f58d1962f60ac3d72185312a7fdaf04ebc8 | Bin 0 -> 1335 bytes .../d2c5f7206f51ad867946dc5ceba0367c5de5062e | Bin 0 -> 663 bytes .../d2c8dab737635d0e2c7eac94248bcb833172c5eb | Bin 0 -> 691 bytes .../d2dbb3320c18acb48929ad0ef217dbf3dc043f6d | Bin 0 -> 2251 bytes .../d2ecba205a8c8f7e6122e26f3ca3a8e65c01fabb | Bin 0 -> 62 bytes .../d2f5bdc199be0596367cce7a55a6933c577b1418 | Bin 0 -> 928 bytes .../d304fccfe1192f7a249a0a6d2df228aa18cfcbc6 | Bin 0 -> 934 bytes .../d322aa2562befee9a70338cae0d317e1fb832a15 | Bin 0 -> 1335 bytes .../d338ada036fe2be91a685dbbb031f38da0cbba51 | Bin 0 -> 479 bytes .../d340dec9e06289f03ea7247180563f650dbb52e7 | Bin 0 -> 544 bytes .../d34bcda00255920daa24840bc535d0f60f393e79 | Bin 0 -> 478 bytes .../d35a1818479f9105fa15a2843a7495bc986c54eb | Bin 0 -> 537 bytes .../d35f35595fc5aa59ccf959cfe5bff609bdf7cd5e | Bin 0 -> 695 bytes .../d362edb07a24e19591cb9b52c338faf94accb8c8 | Bin 0 -> 858 bytes .../d36f48cd5fc5a23386fcae0d6a8d18555aee8f95 | Bin 0 -> 1044 bytes .../d389c862d0698d09adb01d6bebb02ec7390263b4 | Bin 0 -> 50 bytes .../d3a4249490f5dcde8750406e4ad30a5dcdac5336 | Bin 0 -> 696 bytes .../d3c791b00ad87ec3aa5983f572f00f4758ef9cba | Bin 0 -> 544 bytes .../d40036e07426edba7543b35a6666167428a42842 | Bin 0 -> 845 bytes .../d402b525df06a304d343fa91a5d84cb1233dce45 | Bin 0 -> 479 bytes .../d43b60fc5a06083f8a2773da878f459cb26cdfe8 | Bin 0 -> 3154 bytes .../d455c7c72c9eddd5d9bee3278bc7775f861a493c | Bin 0 -> 3474 bytes .../d45d2354d65f8dc3f4803d1ddae3e56d5429ae53 | Bin 0 -> 958 bytes .../d45ec4a0b35e51f768a10205c3817b4249ae2cc5 | 0 .../d46821e8264c4f1c0b5445aeeeb34620316007b5 | Bin 0 -> 544 bytes .../d468ec2ef5dd94622133baecab2382fdc0252f38 | Bin 0 -> 544 bytes .../d481b4ff6d17407de1ea0f198f10c2efcd72fe35 | Bin 0 -> 3160 bytes .../d4aaee5d509fa8fc2281dd6fea5bb7799266c36d | Bin 0 -> 2101 bytes .../d4f4b68c737e5f0694bccd9f1fbe9ce4df673d58 | Bin 0 -> 1049 bytes .../d4fd0fa57843ff302cbb38a5fba445e6f058d6cb | Bin 0 -> 45 bytes .../d5269880d4cd89eb21a30f67dbe845154fd64919 | Bin 0 -> 7 bytes .../d54e314f8bcb4bb4a51ffb917467403cbebbcc60 | Bin 0 -> 1044 bytes .../d5520adf94e2e51f3853c4cf4609865fb86e8864 | Bin 0 -> 955 bytes .../d59201482f593bfe5997358f776e59e5543d824d | Bin 0 -> 740 bytes .../d59cf9e5179ae57248c8bce0cdf058c73dcfd5e4 | Bin 0 -> 728 bytes .../d5c1dd613ebaf5611ab185536cdd3e29880927ef | Bin 0 -> 476 bytes .../d5e8676ea04ba7201b72e313d1647bc33e3a1d94 | Bin 0 -> 743 bytes .../d5f119db84041ad0beb036d6340f12faffb37084 | Bin 0 -> 544 bytes .../d6108c4dc3bea75a4d7d94ad0b14b01147f03708 | Bin 0 -> 3492 bytes .../d62eaac4e65051695eaf061379c923d3fd36addb | Bin 0 -> 631 bytes .../d63ad42839f9edfbf217c65f1f07f66bad622c92 | Bin 0 -> 717 bytes .../d655904b6633a4610eb1eeb2947165e29fa33902 | Bin 0 -> 3154 bytes .../d662042898828a61d787cf2a78943fad47f8de70 | Bin 0 -> 2251 bytes .../d6873f700eaa24707c6fc1673068a350b4a4c6cd | Bin 0 -> 727 bytes .../d68d0dbada54c6b438c1c75c3872d541c3188a17 | Bin 0 -> 62 bytes .../d68dfd75ba98cfee1a26271317221d7727736572 | Bin 0 -> 363 bytes .../d6a475e2227fa5b18c739d190526c26a2029378c | Bin 0 -> 863 bytes .../d6ad9a4d592c808b1ba56f6d7662c797de4c06e9 | Bin 0 -> 479 bytes .../d6bbee9edb16c570a752df200ca05fd404c2edbd | Bin 0 -> 789 bytes .../d6f7936dbc4e088d847553663195578ad9f2bd76 | Bin 0 -> 87 bytes .../d70051c4aef657d998d3c222c9d45c7d9d531935 | Bin 0 -> 717 bytes .../d7072fd374529bbfc555482d4ae638849c09992d | Bin 0 -> 1868 bytes .../d713fe71363b67d9730f070032a9f5d83ce88bc3 | Bin 0 -> 544 bytes .../d7239427b93b75180d4b0ed1d5251874bddcf4ef | Bin 0 -> 2557 bytes .../d73c2ee8a08e1bc5c0058f002e7a0bdeb96fb25f | Bin 0 -> 475 bytes .../d7459a787b2a8364dc6e0754b33e1bafefcaeff1 | Bin 0 -> 544 bytes .../d74d757d5150f5d1e84543185cb6964a96508cdf | Bin 0 -> 4744 bytes .../d751176b5119f84e3332d67318ef6d1f30090d2f | Bin 0 -> 696 bytes .../d7624249aaef3280eb2822ee39d3129516bee91d | Bin 0 -> 847 bytes .../d7632626771eaa2428ca9626b6abf76d260038fb | Bin 0 -> 9 bytes .../d76e233917e17232d003fbaef87209b294e728c6 | Bin 0 -> 2005 bytes .../d7728fec9737951e82a61b59a1864e4976a05339 | Bin 0 -> 1175 bytes .../d78a0afd79fe4019c2f394483c78bc8720208074 | Bin 0 -> 2643 bytes .../d79671cb8df1e6081ac17a1d7dd65a7fbd6e9162 | Bin 0 -> 544 bytes .../d7a5c572ab07f095cb6aebdbb5ffcc49379b8d21 | Bin 0 -> 1734 bytes .../d7af351a16f89765b6c26fc5429a9139b2be1c12 | Bin 0 -> 3154 bytes .../d7d51ccd18717d5ac7724ae26496d107c4dd1c59 | Bin 0 -> 2101 bytes .../d7db4f10c158b74017c88ab50850cf1e3a94fdac | Bin 0 -> 88 bytes .../d7df1c8a4d32964662fdb1b30d722fb48d7151f5 | Bin 0 -> 597 bytes .../d7e6c583ca8d0255f20817f980282345bcf9f559 | Bin 0 -> 6600 bytes .../d7f9f138a17aa4921a76317a2eacc89267529714 | Bin 0 -> 695 bytes .../d7fba32094bd1d4f3f049911f4467ca0116644be | Bin 0 -> 544 bytes .../d808dd1bd1f58037becb01c731c313b60979ca81 | Bin 0 -> 544 bytes .../d8159b4618a93cae430116958b753991e4b3ff5d | Bin 0 -> 853 bytes .../d81ac52857b9ce4ec6f844ddb1254a2fd4916483 | Bin 0 -> 1175 bytes .../d84721148dedf9f72b6f91a2709bca89689d783e | Bin 0 -> 544 bytes .../d84f183ec3e23cdffe3342be335a166d85a5a573 | Bin 0 -> 1941 bytes .../d87a4ceecc0b85afaf27cab16cd569abd12a6680 | Bin 0 -> 16645 bytes .../d87f3ade36685f3770c37b7ab281dedaa6197a67 | Bin 0 -> 981 bytes .../d881a6077689dc8b2bfd5bc64e3e5f3e266353b0 | Bin 0 -> 476 bytes .../d897073c8c9fc74ffcec59df434b73d353b5543b | Bin 0 -> 859 bytes .../d89f7f0ffe407fcfb5dfe13814a0b23aacaa5036 | 0 .../d8a13736a5963a38d2a86da3773991d606cb8ca4 | Bin 0 -> 2063 bytes .../d8ad5ecd9694b5e0e4710e0bca34d88e930304b2 | Bin 0 -> 696 bytes .../d8b67227e1039676317c422d894163ab80b00819 | Bin 0 -> 2331 bytes .../d8c5ad02565997b79041a75875c91ced18a7f957 | Bin 0 -> 57 bytes .../d8c8101ea0cdf23c2a8f66025366396e5b65c859 | Bin 0 -> 934 bytes .../d8d112d32cc80bca30a112958c06c398bb280ad1 | Bin 0 -> 423 bytes .../d8d1e57b687656aba7fdd3ecf4eb0a324c981a1e | Bin 0 -> 702 bytes .../d8da52903f4a18cc6ef09737f3eacb5985714638 | Bin 0 -> 16645 bytes .../d8dbd9d800686272d91f2684e314e0342d3c97c6 | Bin 0 -> 817 bytes .../d8e375f8f05582a209d5ed8c7620b0912554004b | Bin 0 -> 62 bytes .../d8f2c8d393248f749bd8578aa66fa3b294ce0990 | Bin 0 -> 194 bytes .../d8f6d0d7a4070c080d2ee67f07b9ec729b3289bd | Bin 0 -> 579 bytes .../d8f7082f9284457e9de42edb51b3f1d60c23ce06 | Bin 0 -> 928 bytes .../d8f8d2191e737b156f122ce8947531fa3988a025 | Bin 0 -> 1336 bytes .../d8f9b6d1f49a03e116bcc1b0e13b4e3992d42e56 | Bin 0 -> 2332 bytes .../d8fda5ef0fd8e6a01b863f3ec626a8a5fa1656f7 | Bin 0 -> 868 bytes .../d91a249973e16614dfeaab429a69b4a66b8e3f60 | Bin 0 -> 2251 bytes .../d91c476cba36149dac8a8bf1314166a5344c56ee | Bin 0 -> 864 bytes .../d92ab866dae46470b14fae1627f72e4d94ee7855 | Bin 0 -> 574 bytes .../d92e031507f2aa881bcd049b88796d8473b90011 | Bin 0 -> 544 bytes .../d93ec423cc71d2e254544bc140aa325f039f5145 | Bin 0 -> 546 bytes .../d94e4e0b1483d0af2af3a8e059bb396386b783e6 | Bin 0 -> 2101 bytes .../d950702aa3d1be3fc62626d9b915cba016a70b66 | Bin 0 -> 57 bytes .../d95140c60347c09f76cc0a94e44ef1265c3f7e02 | Bin 0 -> 544 bytes .../d97c079b47378b1063a717aa1c47de63644908e9 | Bin 0 -> 475 bytes .../d987e71ceabdf624b114c165d70b6941fb737095 | Bin 0 -> 1933 bytes .../d9976b90327edea2d2bb81dc1fd498a8b60cc088 | Bin 0 -> 685 bytes .../d9981687d4e3fd58d5b68d5e7dc25b24955cc80e | Bin 0 -> 544 bytes .../d99a9c860ef33b4d534dba17b193d8aa1b1bae92 | Bin 0 -> 860 bytes .../d99fddf89b9ee9c781262fef61960a43d8b1ac91 | Bin 0 -> 2101 bytes .../d9b86f8dcbef5d3d0c4ab6496b30e4a65fb50f22 | Bin 0 -> 981 bytes .../d9cb13d9baaffdc07d3f72faffaa362cbe5a9ab4 | Bin 0 -> 476 bytes .../d9e757a94431d1c34c46f3091ce193bba45f0766 | Bin 0 -> 478 bytes .../d9f97c9d006666564136882cafc6879dc3aef71a | Bin 0 -> 718 bytes .../da04bfe0c835d790520d54e248daae3f9d0a71f1 | Bin 0 -> 2101 bytes .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../da3f4ef556aefc6973edb970b7f57bf38f41cee4 | Bin 0 -> 544 bytes .../da47886072d5312f1be08689da7a072f81446c12 | Bin 0 -> 696 bytes .../da565d24df030cbb664f48c2acf666b08df13177 | Bin 0 -> 363 bytes .../da5d7dccffc754714ca2c5b2e9b70c96cee66895 | Bin 0 -> 868 bytes .../da93cafbe403d0008303036b0c35172d9124c089 | Bin 0 -> 544 bytes .../dab80a92c4c1388a93435648508704892762e8f6 | Bin 0 -> 544 bytes .../dade08db447f29c4884b5656c855b457de5a8f49 | Bin 0 -> 124 bytes .../dae65d60e732f4cba1f0a9c7bd933cd272f67393 | Bin 0 -> 955 bytes .../daf158c004ae61cb11723060204521035e87784e | Bin 0 -> 3208 bytes .../db14b77598d32f23758a1a3a662bb0516c49618e | Bin 0 -> 2101 bytes .../db236db229adeeb9da7b00d3748e87893ec0e9d3 | Bin 0 -> 1336 bytes .../db2c99c13217c1f4217beed081e156618b04a7f1 | Bin 0 -> 2101 bytes .../db3c608e7a1aa1e92ab4f499d21764d539d6ddbb | Bin 0 -> 550 bytes .../db480f0a37ed9e7186849c08a3775a27869d1a60 | Bin 0 -> 563 bytes .../db520b2ecdbd304a832dc818984af7ebc2dc0669 | Bin 0 -> 544 bytes .../db7aa92a4a8e050a53788a83752810e757236351 | Bin 0 -> 6693 bytes .../db86643fa3722e19775ef21c8319e759ff4ceec2 | Bin 0 -> 695 bytes .../dbb7c1d60cd6bac81cb5d1488e578e0bba8ea582 | Bin 0 -> 544 bytes .../dbc5f6e95a576b048e5b8208db2403565f9de5e8 | Bin 0 -> 755 bytes .../dbcb3f2a3771004cb8ec87392c2949c3f2523b8b | Bin 0 -> 57 bytes .../dbe823ad8545e44d3637873fae05ba86270b78b8 | Bin 0 -> 3492 bytes .../dc0a23278d57cf749ed8cc1e216231c8ba98a1be | Bin 0 -> 981 bytes .../dc4c4d7730058a5397e8553c72d89d4dcb985552 | Bin 0 -> 867 bytes .../dc526054d833d22ecc061110130c0d33d214e530 | Bin 0 -> 364 bytes .../dc60c37fbf332b2a575f863ccec41b171b963f78 | Bin 0 -> 546 bytes .../dc7f467f7367fabc9de3b58abcf5a07366154254 | Bin 0 -> 480 bytes .../dc898545a1eeb4689da1b22a8a5c31547dae92be | Bin 0 -> 2251 bytes .../dc8c270e41e8844d6cadb9a7d38aac91885703cd | Bin 0 -> 695 bytes .../dc9410827bb4d346038c73dc046d1519fe39b4b0 | Bin 0 -> 476 bytes .../dc94a4c99c4cb9c2643faff64542a45e21e3cdaf | Bin 0 -> 1044 bytes .../dc987348b3ff8453f4ec9e7b0df5cf8913ad5663 | Bin 0 -> 1517 bytes .../dc9e8909fd7a5ccb78c57a8804f22a5ca36e0543 | Bin 0 -> 423 bytes .../dca9f125f528ca854093a9814de96893cc4022be | Bin 0 -> 1335 bytes .../dcb520d869c67df7eb3339c4ea35e93d3d7a7a3c | Bin 0 -> 1175 bytes .../dcb8b4abffe14866b55b33ccc7f3e881a9ecf082 | Bin 0 -> 690 bytes .../dcbb04f0ec93075a539700d73e4e2e336797f7db | Bin 0 -> 2101 bytes .../dcc5b4166185616d170ad4adf2be4ff9a4c0a0e7 | Bin 0 -> 637 bytes .../dcdfff3deaf676195284d67cd36c8a19bec8f9d1 | Bin 0 -> 544 bytes .../dce22b607c071dd198453e4a1718c3247f149def | Bin 0 -> 749 bytes .../dcefd16165404fe0ad54ffffb8d7822e73f34eb7 | Bin 0 -> 544 bytes .../dd02dee0a3a995a337842abea5c45d5b384dff0c | Bin 0 -> 13200 bytes .../dd417be4919a4c5c699acc5ad5fb44308d721400 | Bin 0 -> 981 bytes .../dd433613c863184c04b66db3c2393672a2806b09 | Bin 0 -> 364 bytes .../dd5225558da2d471f3a346062ee255bb50564a4e | Bin 0 -> 423 bytes .../dd542b4ee155e627cd67c1fb4ee5dc4bf2b4c79e | Bin 0 -> 363 bytes .../dd5d958425e540c4a086f77b20da2d14c74dd26f | Bin 0 -> 1528 bytes .../dd68ca4c8eb9ea19a737fdddf07174cd5300cf8f | Bin 0 -> 190 bytes .../dd68d441ca11997abee0722b482dcfb3721fec81 | Bin 0 -> 695 bytes .../dd7cfef686d32ea7de398ddae569f6cf9a3febfd | Bin 0 -> 112 bytes .../dd83f0132e8bb9f8d8bd5afeed42fee4f5e34e87 | Bin 0 -> 659 bytes .../dda7d2bebf0e962cd930b7198b2ba1a7ee7227b9 | Bin 0 -> 1314 bytes .../ddaa771bb81f33338aacb56767d6e805ef80137e | Bin 0 -> 544 bytes .../ddcc0df887278b3984e2942e6040a2f806773c02 | Bin 0 -> 2930 bytes .../ddcdfe0ef39a01af2866a07e466a9736ec9127fd | Bin 0 -> 544 bytes .../ddd465508774c78befa2fdedce0065addc017561 | Bin 0 -> 6618 bytes .../ddd53795e8d10c6856264b165e97bf0e3f5c077f | Bin 0 -> 529 bytes .../ddd5eed6d67f985dd909fd2f73613bd77cb39ac7 | Bin 0 -> 2331 bytes .../ddee8af4eb71cbcb8593e2575671fbba450aaef8 | Bin 0 -> 697 bytes .../ddf77a64fd56672d408f2b58124b9ef2c100a1e6 | Bin 0 -> 423 bytes .../ddfec90cdf59e9b053e76646d592a7232397452a | Bin 0 -> 853 bytes .../de02be6f2a36e9db113c1c2ba197316cfc1c6e21 | Bin 0 -> 768 bytes .../de1627d147c946a1af0cd76b5ddd24a23b389e79 | Bin 0 -> 817 bytes .../de19382d935a1640d8e5e78afc7554d85d5e9e13 | Bin 0 -> 563 bytes .../de1f4d4fadc666c7ab57686039c171cba1e43932 | Bin 0 -> 2101 bytes .../de212940dc9813be30d199ac09474de1883c7ae2 | Bin 0 -> 62 bytes .../de2156caa5ad0c0baaf43c4c79f2d88f32b43c2c | Bin 0 -> 845 bytes .../de32bfbcc9adf3c23476b9df5bcccf6c08a2d803 | Bin 0 -> 717 bytes .../de3dcf024b8c775e872fa997a1776462c898294b | Bin 0 -> 2005 bytes .../de5795df5baf7f56dd7ceb1b7f73a64254de18c6 | Bin 0 -> 838 bytes .../de61e01b3fe985bcb0378c64517e7e90f2a0a044 | Bin 0 -> 856 bytes .../de763208af2ddeca2313869c392699948cfad73f | Bin 0 -> 1175 bytes .../de7b927efc0ae906eca7d2d877c1dae460093b1c | Bin 0 -> 563 bytes .../de82c80501679aac5f55a7eab3f573dcdcffd57f | Bin 0 -> 542 bytes .../de8faede137e9a0e95f8b2d520c89ce5a1cf70e9 | Bin 0 -> 474 bytes .../de8fd13046d58d886c28654dc70fa8654c5a22fe | Bin 0 -> 2331 bytes .../df0310a217f1ac7ccf865236d9349200f511995d | Bin 0 -> 2101 bytes .../df074cfc097412c9612bd3944721843f17b79170 | Bin 0 -> 8140 bytes .../df0b349422fda2d066584a1cb07d25a7583e7a07 | Bin 0 -> 2005 bytes .../df1741aa15bd8d1ea925e39b7e2c25f16faf6cfc | Bin 0 -> 696 bytes .../df17438c90e509973fd9d4038bee914e9cc3cd9c | Bin 0 -> 685 bytes .../df1cd0b71590f4fd89caf91c6d5a9f560af1227d | Bin 0 -> 695 bytes .../df1f4a2867acc86cfc4e94b2642e50c30bd43abe | Bin 0 -> 544 bytes .../df54bf7abb87d20bab0367551308bf6187c99a85 | Bin 0 -> 696 bytes .../df57a40f024761fc1a15fa8387e6374baaa5dfa2 | Bin 0 -> 1845 bytes .../df58025a7465df73c75fda79ed404e1782d0e2a3 | Bin 0 -> 544 bytes .../df672a25af4717301aae97ddaf005f50c32dd342 | Bin 0 -> 476 bytes .../df6edba282c22323706c33603c5401dc4b6b4ddf | Bin 0 -> 3154 bytes .../df777561b2f48447be369088cb8b90cfeeaa734c | Bin 0 -> 149 bytes .../df83e76ff5cc15be721f0345453d92f9e8059261 | Bin 0 -> 2251 bytes .../dfa1fb3a601618161c569f70845bcb0d3e4f07d2 | Bin 0 -> 2331 bytes .../dfa305d802085fb83498e09db00f9259054f6b44 | Bin 0 -> 768 bytes .../dfb7390a63f1a5e530d6bdd901eaaff8918e26ca | Bin 0 -> 6629 bytes .../dfc22ce5bc1d6770cd9978fd92e61dd38167d5d5 | Bin 0 -> 544 bytes .../dfd21399443d629726cb6410ebe153749deb8cf8 | Bin 0 -> 3154 bytes .../dfd4b326d1429ba61808bb1bde9abfb917f3a965 | Bin 0 -> 475 bytes .../dfdb322d069f7fbca5ad02bde970bef079887daf | Bin 0 -> 1044 bytes .../dfff70b259b03199b4f647dd7f5b1d29035f7eb3 | Bin 0 -> 480 bytes .../e000930982bdee7b1ab401ca6574fea0e9995d7e | Bin 0 -> 837 bytes .../e0238d478136e390e80eb8e9853b8310a97c22f1 | Bin 0 -> 1335 bytes .../e03b79dbcf9332762b43afde6f501ac1689c1603 | Bin 0 -> 544 bytes .../e04496846c206b6769396bbafc2525afe4b92e96 | Bin 0 -> 555 bytes .../e05257b64edda6d50d42eebaf4f022b262fd37ad | Bin 0 -> 536 bytes .../e076e5138376853bc3452190bfcff29d6d316da8 | Bin 0 -> 936 bytes .../e08e0b8add9c3aeb9b054f7ebb1b8da9a47ab7f9 | Bin 0 -> 1335 bytes .../e0ac7cbebfba3c7f960e2ed893fc6ce03db8d985 | Bin 0 -> 696 bytes .../e0c033bca0a113302de4ca63d57d65935e2e9ff2 | Bin 0 -> 1697 bytes .../e0e960fcb557c250760d9ab44c009b46a6f12273 | Bin 0 -> 695 bytes .../e0ef45fd1d8a90fda26b4ff089e6ebaff9027fff | Bin 0 -> 1843 bytes .../e0fbd5e07ad49937d06855ad87dc454a7f3b8806 | Bin 0 -> 981 bytes .../e0fd1886d62c613686e763e11abc0940c6c7c492 | Bin 0 -> 544 bytes .../e1086a7f7705d0c76e984fb33af109820737f04b | Bin 0 -> 53 bytes .../e112fdfba6a579763daa6106c7dc115db6675f6b | Bin 0 -> 859 bytes .../e11619f4654ad8df4c4eb288cf66c5d0fa4664fd | Bin 0 -> 3159 bytes .../e1355e755b190fb8b2e726f97c95238e71107d01 | Bin 0 -> 768 bytes .../e14405ff915fe79f8b4b89f72979c1469123110d | Bin 0 -> 544 bytes .../e15378c349e2be83c4492b4f6963376010724bb8 | Bin 0 -> 1044 bytes .../e15e18c458016be03f07351f0613a4d5671d050f | Bin 0 -> 1335 bytes .../e16542ec2c1ab729f711d06cd45a667566065dc5 | Bin 0 -> 860 bytes .../e16a77cdb5684af093cb35878c32a419a958d339 | Bin 0 -> 1044 bytes .../e1729fa12b209f70fc20d70ea7056b330cbebd07 | Bin 0 -> 544 bytes .../e18a92d0736ed319e507de97ce71ecabaf4ce264 | 1 + .../e196f6f9b0fa6f8560b1349730aaef57acff754d | Bin 0 -> 768 bytes .../e1ab17aceb5d6fe34c0ada0703f00e4977a4ffa1 | Bin 0 -> 544 bytes .../e1b47dff17d9f1ea0919ee39d2508f97cdbedd31 | Bin 0 -> 544 bytes .../e1ba511725da3fd6f80472a8da1c22330f25b479 | Bin 0 -> 423 bytes .../e1c71ccf794e20c90ef306696a0dc35abbf3aece | Bin 0 -> 539 bytes .../e1d0bd2828045923f80ca599eae320cfa1f87008 | Bin 0 -> 423 bytes .../e1d1f0d0f1adb1b5100c6c9cc5411a3e5e3cd017 | Bin 0 -> 690 bytes .../e1e232ca3855a10391bf98270b59b9c12e45e021 | Bin 0 -> 423 bytes .../e1e726a5cb8d773287402e3f0698dd0886172b9a | Bin 0 -> 955 bytes .../e1f1f0178293bb5a6cfc01116b22b8813d310c95 | Bin 0 -> 111 bytes .../e2031640d7b02ac4390ab783055484debf5aa637 | Bin 0 -> 1031 bytes .../e20db2e02138093384776455a7c5753ea62d61e2 | Bin 0 -> 837 bytes .../e2124a95d0204058cbf8b89432248ddd90e621c3 | Bin 0 -> 88 bytes .../e21759e9bb3893c099cc43421cbddcaca26d1b5c | Bin 0 -> 544 bytes .../e23dba3a1d0197a84aeaa7fcf6ac4231d30ae4c0 | Bin 0 -> 111 bytes .../e244fd011ceeba8d82c728b757ba4701977e5083 | Bin 0 -> 1044 bytes .../e25696ebd2441abe3bcca21305846732ab4fd1d5 | Bin 0 -> 696 bytes .../e262289fdd342f42d155b1533fa8252922d5b91d | Bin 0 -> 1044 bytes .../e26ef75d4019b1a803c8ec8741df73f777a5cb7a | Bin 0 -> 423 bytes .../e2721dfc7a19b07bb7843ba13b65bc88cef8e3c4 | Bin 0 -> 981 bytes .../e273f157febaecfa6227e38527c3565227c37aec | Bin 0 -> 143 bytes .../e28110a4f3a5f7862743ede1f42c9512bf6a3cd3 | Bin 0 -> 1168 bytes .../e28eb5ff7b6729f06c922a7fba7f326eaa749d0b | Bin 0 -> 474 bytes .../e2a69fc327c2668c2633f7256a2c32d709321993 | Bin 0 -> 544 bytes .../e2d59198e601227c7f03b33d8cfc41199f0847cc | Bin 0 -> 884 bytes .../e2db3b715594112fc038fdb6453040cde8bde0b7 | Bin 0 -> 476 bytes .../e2e6c8ab0071df46e20cbb00412f747e7d05d479 | Bin 0 -> 690 bytes .../e2f8d8d0d639e488c87aea451dcbe72cf2490324 | Bin 0 -> 3179 bytes .../e31a61084d0d062b9c41a9eb2ff4179fd556eb04 | Bin 0 -> 1193 bytes .../e31b9cef64797b8c5b178fcc59fa4253878a1614 | Bin 0 -> 717 bytes .../e31cfe07c72ce521ab65437f234614d61a137fa4 | Bin 0 -> 695 bytes .../e32ad351dd11067be3720b4e9d8a0bd8e8b063d3 | Bin 0 -> 476 bytes .../e3353aa4613806fb2ca965cd351106ccdeeae9f9 | Bin 0 -> 544 bytes .../e36a145998c410df35c47f98401909f6ca661cee | Bin 0 -> 544 bytes .../e37b455435b4f9cf4a709d7cccf171d456f8a64d | Bin 0 -> 695 bytes .../e37b57ed78336399d9c182d9cc6352c4efd29dd4 | Bin 0 -> 1196 bytes .../e3b9ddf1a85a763188ef546a3d0c2069b24597b5 | Bin 0 -> 412 bytes .../e3ba2097400b2a560ed13acd23ce7630bc30cfd7 | Bin 0 -> 860 bytes .../e3ccc14c5db1ef454f953637ddc8aa46f5c1e79b | Bin 0 -> 695 bytes .../e3d94fd70e39b788ace0f597568eee464f0844d9 | Bin 0 -> 2331 bytes .../e3f1adbf64236ae1eec0858c6d97375d1a30adf8 | Bin 0 -> 874 bytes .../e4081785bea9f1cab7049d6f87b02b0194c186fc | Bin 0 -> 2843 bytes .../e40a0faa7cb6e9aec4a61e8fac3c7f26768066dc | Bin 0 -> 552 bytes .../e40bb987ebbb643360fc9794453943452a7283d3 | Bin 0 -> 6635 bytes .../e42a6d3b7bdabcc99a7701ee87bf1756af2cd6ef | Bin 0 -> 3681 bytes .../e431f23d8f94fa91453fe0b158897edd8823b38d | Bin 0 -> 475 bytes .../e453436f0294f86a27aa66f8d522411a8cc9e0b5 | Bin 0 -> 544 bytes .../e4607bf047f9093e558b6374abb897a9b0316701 | Bin 0 -> 544 bytes .../e47b50b09697bc291d248b69995060d91891db1e | Bin 0 -> 775 bytes .../e4836eea8b8971f2062f63f9fc10d8ba58f57e0c | Bin 0 -> 2005 bytes .../e48394c1adb7dd5497a29abbc75654608d4c145b | Bin 0 -> 480 bytes .../e48f41439c316753c16e9d645b75a71a54ea16de | Bin 0 -> 981 bytes .../e49383e68881036d1afe923f363e9dacb24be1c9 | Bin 0 -> 3159 bytes .../e493b0d0548bf327b07583e57123f2fc1c5529ad | Bin 0 -> 432 bytes .../e4bf4bae19039079167269596fd20864714ffdc5 | Bin 0 -> 2101 bytes .../e4d0d6406acb19d4e8b1fd9d97d666677b548abc | Bin 0 -> 464 bytes .../e4d212b46734cb29e43052cac53b868583d4b29b | Bin 0 -> 768 bytes .../e4e65493896d447caf6ceb706cb03ddac09dab8a | 0 .../e4f74f8e1c6a6722fcb93d46a361de62dce4e492 | 0 .../e50c44459d2fa5fa0789e3b5bd3f74418b55372f | Bin 0 -> 694 bytes .../e563247317f689d46c56c526061b5a9793a720ab | Bin 0 -> 1175 bytes .../e5663428d8f8aa1721bb9dc2935a2c0bb9f36727 | Bin 0 -> 3492 bytes .../e56b95d192f2a205d2f67a8eb1b3dd85df21d55f | Bin 0 -> 544 bytes .../e57332036c7a19fbd5806fca3b4b9bfb6f187112 | Bin 0 -> 6762 bytes .../e57caaed1e25caca6771a425fd688e7fe2b4fcbf | Bin 0 -> 11143 bytes .../e57f6cebb1202e4986814ca57a8fca6ca43b6646 | Bin 0 -> 867 bytes .../e5948595e51081b99ef317d7e05d11e2aa061a56 | Bin 0 -> 563 bytes .../e5ba1dbdcc0dfc2e9142b604cf5009a61c2a3604 | Bin 0 -> 981 bytes .../e5bd216000bda25145fa5ba4fd4b5782d4bbace6 | Bin 0 -> 544 bytes .../e5cd306994b189c7e9e40e3151cf91ddc8cd982f | Bin 0 -> 544 bytes .../e5ea559a5936c89bd3436ce63994686c2aa9c478 | Bin 0 -> 544 bytes .../e5fb5c2d9dc0a479dc04594aa6630d6a1a759014 | Bin 0 -> 424 bytes .../e6103de99b21fdf6925f5d9591958db0bb95ef97 | Bin 0 -> 2251 bytes .../e612296e99bde0a8222d5f23f2dcf4736d05e1c2 | Bin 0 -> 2101 bytes .../e61d6735a923d66c1d7960c97fcc1ba1d7992b39 | Bin 0 -> 1335 bytes .../e6374f2aa93ae466467e60732404bb2011b73335 | Bin 0 -> 476 bytes .../e641a3cc13f4fc3e802d1c6b5d2afb7f94ba8a83 | Bin 0 -> 860 bytes .../e642fa70e0a0a32551ec406ed8669e3154d1bcec | Bin 0 -> 480 bytes .../e6434071aeedd5a26406719f11eb7989d7ea7a78 | Bin 0 -> 934 bytes .../e6437e6f5d1c976e0f8cbb60d66957e843f98d42 | Bin 0 -> 2185 bytes .../e6489e7f24774c086d7e8cec52b46f494a06e82c | Bin 0 -> 184 bytes .../e64e81087ba61c3fcc8b0c0cb1f1413eb6c595c5 | Bin 0 -> 981 bytes .../e6521043b5807e346de0d927d91e1191a5d34972 | Bin 0 -> 544 bytes .../e65448fa259efbf46254067dad484bf052b7b681 | Bin 0 -> 1336 bytes .../e66cf72c4f3056f3d7eec815ba30afee1ddc982e | Bin 0 -> 111 bytes .../e6878f386ad3e8ce46f73e65bc67fd1cd46d08e2 | Bin 0 -> 999 bytes .../e692a341bc65e0283c0bdf3f46b6941b5ae70095 | Bin 0 -> 1044 bytes .../e696fca42b2d9beeb4f5de540c0cf3a3eb676195 | Bin 0 -> 2027 bytes .../e6a40e418e526525ebdce74b4ea85e775f084842 | Bin 0 -> 544 bytes .../e6af57a4212f7e5ff8bfb8984aea7a033a26fb57 | Bin 0 -> 1199 bytes .../e6afff093779c7fb44ec0e16b66dd3c7a0c8c3c1 | Bin 0 -> 1044 bytes .../e6b08dcc8b7dfbc8b9198644563137062cbafc0b | Bin 0 -> 544 bytes .../e6b9685308d0f629372c2391d5f36e4db4d56d47 | Bin 0 -> 177 bytes .../e6d5a74e2f0c9a44bbe207bb6e09e998351ed3f7 | Bin 0 -> 3159 bytes .../e6e5f4dc608696794b1ba08ac194a4c0b9efb9a5 | Bin 0 -> 2252 bytes .../e6e8fa13edbe14732f450806aebe430b06d8b634 | Bin 0 -> 423 bytes .../e6edbcd093526e38e8fa9677bc154d064f7ec550 | Bin 0 -> 313 bytes .../e6f693e74836f8c11948ca676930a2bad44140ed | Bin 0 -> 1170 bytes .../e702d4f0b66af49ab348db89cba3c630cc94b713 | Bin 0 -> 733 bytes .../e70d316f302a4aef8844845bb26ceeb8df3dfe14 | Bin 0 -> 544 bytes .../e7253e3d04993e4aa8f3bb63d728ca689344dec7 | Bin 0 -> 544 bytes .../e727b270df680b2c84deaf15f57acce7336c2504 | Bin 0 -> 331 bytes .../e72aa456ea4cb4eee3d6f792111d2482127a70bc | Bin 0 -> 423 bytes .../e72dde9f9b5b3f8d7d5e388a1f71c2fc236245d2 | Bin 0 -> 2835 bytes .../e73927ac0ea07bf4d2000a041dd7bfba36373b18 | Bin 0 -> 544 bytes .../e73eb4a9907c9cbef156e0cf92af83dc58cd29e0 | Bin 0 -> 24 bytes .../e7401b237cdf8248575ff1309afb9710620954c4 | Bin 0 -> 424 bytes .../e7690a41faea8c1ba8464e995a51000f24f81627 | Bin 0 -> 544 bytes .../e76d80af9d935153febf473fbcbe94cd0e6f9edb | Bin 0 -> 860 bytes .../e774e51df852a5078d24327835d47c52db2887a7 | Bin 0 -> 751 bytes .../e78db27e1af286269cc8a6e178203bf947cb1700 | Bin 0 -> 544 bytes .../e7a195790029d1afcd6369601adb141f6da119b6 | Bin 0 -> 423 bytes .../e7b054c83d4c35cde1fe054f3658f94a779b6dd8 | Bin 0 -> 884 bytes .../e7d8ce5e04f10c9637d7e324dbd96348543d9e39 | Bin 0 -> 717 bytes .../e7f5e545ad2d5b02effc8742313d95ec8d04d40b | Bin 0 -> 859 bytes .../e7f6d4a02dc0923641bba67d0966c2523e74f6d2 | Bin 0 -> 479 bytes .../e7fee46055458b709386048e30583cb8c547aa99 | Bin 0 -> 3107 bytes .../e8257da9c6066da675861d026f87ff8f9272197c | Bin 0 -> 544 bytes .../e83ef78f6a358e9d17247d9017fc5092f4a1a5ca | Bin 0 -> 544 bytes .../e840d5b017f3719758db2d2e15fe575c6526d626 | Bin 0 -> 364 bytes .../e840e4b0f81dbb354b7d95cef1405efb2a1ce441 | Bin 0 -> 733 bytes .../e8500909ad9d5e9ed3b8022827c36cc64040c421 | Bin 0 -> 2101 bytes .../e85a36873645ebe3d7f4894b4629f27d1da25d9b | Bin 0 -> 544 bytes .../e87fe94f8a5dd8eb368e4330e1167f6b8258f6b0 | Bin 0 -> 544 bytes .../e880cfe26bb5c8f11ff65b23c32126dbaeaf7bfa | Bin 0 -> 415 bytes .../e88936b630180575ddaf92b2c1a0a66d832d0a06 | Bin 0 -> 1168 bytes .../e8a78060a67eb9238df9ee29e3593014cd931510 | Bin 0 -> 1845 bytes .../e8b36129d48a550690faf04434e7f9639907ca45 | Bin 0 -> 1876 bytes .../e8d18e4306198ead98b852d1f22b90309c75d7a6 | Bin 0 -> 423 bytes .../e8d7326581039b79d6083466c9582d8ab808afc8 | Bin 0 -> 860 bytes .../e90bcd80f885d146cb458d977094e46b2c453bf0 | Bin 0 -> 415 bytes .../e90d305521f638f739aba97b969c5470b5976301 | Bin 0 -> 3154 bytes .../e9194a2df7d44d3634836f3b1e27fcbc15a337dc | 0 .../e91d5fe0b77f9f79dce410dced5174f00cb27258 | Bin 0 -> 544 bytes .../e9257ed6e7f0f7529d46bb2026d8a7c83fccda74 | Bin 0 -> 691 bytes .../e94587a42f92915752bcfa7bdec5151b43a725b0 | Bin 0 -> 768 bytes .../e9461b5a13c69fc308a354ed5729a7872f30158b | Bin 0 -> 530 bytes .../e9519bbe9c21e05826ee489012cf9a5aabc8f76c | Bin 0 -> 62 bytes .../e9524a9ba8fbcde4cc60c7cfde97e6b5b736a837 | Bin 0 -> 1545 bytes .../e965cb4226d26ea3dd2d8ce333966497c54f7870 | Bin 0 -> 681 bytes .../e96daa90089e29c76e37affef70e4793e89397f2 | Bin 0 -> 874 bytes .../e972fa099f6047158ef2fd72e41daeadf6c833c8 | Bin 0 -> 184 bytes .../e9732472943d8d7d8d3d9e9f2cb133af9dfd945c | Bin 0 -> 1175 bytes .../e977f485c360eb37988ca7fbfe63932027e13711 | Bin 0 -> 1049 bytes .../e982267136876d01673f2fca8564b9067c9b4256 | Bin 0 -> 934 bytes .../e9938774c9fc0a459bca64d1c1719150e681a162 | Bin 0 -> 853 bytes .../e994d76ceb97ea2e841eab522a13b82715714a8a | Bin 0 -> 1424 bytes .../e9a733d203ba6e2acb596763065d7e7de9e80ec2 | Bin 0 -> 1058 bytes .../e9ad7218e9dd897a9817c2a0a70e185ffe8264f3 | Bin 0 -> 717 bytes .../e9ade8364dc12fd5d964710ec53cedaa5eff9b53 | Bin 0 -> 1175 bytes .../e9c14c208abc09ec39dcf7d2253f52db1b50b45a | Bin 0 -> 544 bytes .../e9d7ff4667ef2283a2754a9d5a15197bf53e0264 | Bin 0 -> 3160 bytes .../e9f791bd8bf746417df94350fe04b6688eb54f7d | Bin 0 -> 3154 bytes .../ea062510c44fa6b8666c9de2bf7454306e7f17fc | Bin 0 -> 695 bytes .../ea0a6ca8cddd0277868a67fe1bd701589be93a44 | Bin 0 -> 1044 bytes .../ea14b8d43a6f824cd245b951c6a0035fe7b08e98 | Bin 0 -> 2005 bytes .../ea2d250ed87fe0a297ed3eeb91c5c0a615f9b444 | Bin 0 -> 544 bytes .../ea3e89ee31ebaa2abcca9f6089329084b720a645 | Bin 0 -> 6840 bytes .../ea44bab06a69fd3bb5354572f760fe9fa0c3be0d | Bin 0 -> 544 bytes .../ea4947273a23f65ffa2f3bb95c3ac38785a11004 | Bin 0 -> 884 bytes .../ea4a8f8c7e561e510735903610574a841380293b | Bin 0 -> 544 bytes .../ea558a92cde9a9ce8ca3ce35464919a948a82b69 | Bin 0 -> 1107 bytes .../ea5b16d480d85257e9d83ebdec56f44042f2ddf1 | Bin 0 -> 88 bytes .../ea6a68a5b20fff20b921bf668d23e93aca1c7f83 | Bin 0 -> 1049 bytes .../ea899ca3567abf4051c73a928f42930faaa87685 | Bin 0 -> 4320 bytes .../ea8c9ce71548d254c2acb9c5d9af0d37ed88ad43 | Bin 0 -> 696 bytes .../eab7d8dd057cfa16391bf52c52d81df51ae011cb | Bin 0 -> 936 bytes .../eabb4acb7660616fbcd482f1ba4220a00339b3b8 | Bin 0 -> 544 bytes .../eac32c2bf4f4f0600aab96b0646aa8a144f3a028 | Bin 0 -> 544 bytes .../eae01ee48ee53fb7cf3c1ec201f7a053e1df37f5 | Bin 0 -> 690 bytes .../eaef7f50a574e12b8f09ab64ed8a8b05ffd34316 | Bin 0 -> 3492 bytes .../eaf4e2eeb3d4c51aade4229d95677414c61699ca | Bin 0 -> 544 bytes .../eafa8f304174c605ccef963b2a19263bdc95e107 | Bin 0 -> 1540 bytes .../eb04ea76db48856db23fa2c8da18cffd95924d6a | Bin 0 -> 550 bytes .../eb2176ea39683e425a4121a735f0b300e8a30ef5 | Bin 0 -> 2016 bytes .../eb242072405fb28705ff140787feb1888f732c8e | Bin 0 -> 860 bytes .../eb3ce2ad302d41df8ba692ea38b956c723b91814 | Bin 0 -> 682 bytes .../eb3fb36f8ae39215bc673d4185f49d5e1696d727 | Bin 0 -> 6657 bytes .../eb4e73ab3de99bd17152ccfc2fd9794fa832a925 | Bin 0 -> 479 bytes .../eb62243d5da5ac50f96d952ae81895f67a572e06 | Bin 0 -> 544 bytes .../eb8b1362f7181e5fb536231b4882a74525248814 | Bin 0 -> 52 bytes .../eb9fe4ab419ec64cbedb5875176f998398ec5c1e | Bin 0 -> 1335 bytes .../ebb2eb3dd38c1a7815b370203338d514aa05d7d0 | Bin 0 -> 167 bytes .../ebcc54b00f5b8b3abee861f77312b05e6ed5afb6 | Bin 0 -> 928 bytes .../ebd13cdf612234383364dc86329d55473f054135 | Bin 0 -> 934 bytes .../ebd6f363c5e0598bf9c00b9ef1b3dbe9a435551f | Bin 0 -> 544 bytes .../ebdcfc2da6dd27b4b29ea2fa7e85ccb00ed33661 | Bin 0 -> 2843 bytes .../ebe00f9876d6240fc4fe03b9e0b435fd47ef780f | Bin 0 -> 868 bytes .../ebec479640ce8890747457fefbf9ed8ae2dc8d78 | Bin 0 -> 856 bytes .../ebf5c9a2915b300e787b3985547b3b2f820ab3cb | Bin 0 -> 2013 bytes .../ec0b076aa5a269d1ed3b16e340213ce83ec1bc07 | Bin 0 -> 1175 bytes .../ec0ec1af8a5a3a64f299953485c3d9b562c13c23 | Bin 0 -> 936 bytes .../ec13d81785aa38f145347530040f3e4a580f6aac | Bin 0 -> 733 bytes .../ec1e8d72fc71a7910a61affaf5f72053e3adf320 | Bin 0 -> 544 bytes .../ec22142cd340841f4eb371d0b3af52b8c0b01349 | Bin 0 -> 544 bytes .../ec4184ecaf94491dd7d3b0cdc97856eacb848979 | Bin 0 -> 13 bytes .../ec5f0c62ff7b02440488aed013c6079d7e9e63b3 | Bin 0 -> 6635 bytes .../ec921e28db562c8bf1eeb7ff13f031cc39b6d766 | Bin 0 -> 981 bytes .../ec98880ef80bfc43e5e8cd60fd7e83d94b8467c8 | Bin 0 -> 363 bytes .../ec9c645cc4ab3557a9dfd943e09db552768fbdc6 | Bin 0 -> 1049 bytes .../ec9eb358abe902938af2278ebc5cc56c5bb57dd3 | Bin 0 -> 696 bytes .../ec9fcb01ee67e56b107a4b39feb9ee1283c4e850 | Bin 0 -> 681 bytes .../eca70060bfa07a4a0ce31914dbbdd78b37e5c78d | Bin 0 -> 1176 bytes .../ecc709065e094ce057374699ac73f16d191ac7cb | Bin 0 -> 544 bytes .../ecd2ddc1168effd45f834e3bd989dff1aa66a781 | Bin 0 -> 696 bytes .../ecda9f3846b993fa785ee23dd2338569e4ccf66e | Bin 0 -> 900 bytes .../ece2b7bced2b45dc55758fc8f48923bf68a0c308 | Bin 0 -> 475 bytes .../ece4409d1cb652eba9dfbad1260fe2ef9e91d014 | Bin 0 -> 2837 bytes .../ed0d59a2630ef7350cc8e176e3c1aff0aa1ec578 | Bin 0 -> 3154 bytes .../ed13e3ad2fe23a97fc182a616ecb7ae16fe71431 | Bin 0 -> 1027 bytes .../ed16d6cfbdbd4e4fdc0a9f4e790946b0219bc4ab | Bin 0 -> 1181 bytes .../ed1be83dfd840a3beaf5841d07ef4a5fb523d0c5 | Bin 0 -> 695 bytes .../ed2d7bc8e96e29ce59b705485c304d0df9fefe24 | Bin 0 -> 75 bytes .../ed3a8bc6aac45f62f49e7040f5105166b1548214 | Bin 0 -> 3160 bytes .../ed435127550b2e9626ea35f59ef83b7c9a7c5ab4 | Bin 0 -> 475 bytes .../ed4bd4e12899fef2e64ca9c3350359fb76a3f819 | Bin 0 -> 6611 bytes .../ed621209916cf0eb3072a01265ba6a6216369681 | Bin 0 -> 563 bytes .../ed69f6c08332211ee1ec6473220e3a95723d4844 | Bin 0 -> 1175 bytes .../ed733a7438ff580c03685fda6de1777169cd06f2 | Bin 0 -> 778 bytes .../ed7fbfb7c7730876760814bdd85cf27731d69a57 | Bin 0 -> 536 bytes .../eda80def6d7f5a8a8c2c64fc7e23034ceaa4b1ee | Bin 0 -> 423 bytes .../edd495edd2ff585ecb67563c8c5cacc45cd43c51 | Bin 0 -> 1926 bytes .../eddde10c3b0ce9990ece58d3a4ed14339808047a | Bin 0 -> 474 bytes .../edfb0e34eb7711d21ab372b06b62f1b76d847e8e | Bin 0 -> 544 bytes .../edff6feb265940a7f144f6ae9a4f669fb9db2fc6 | Bin 0 -> 681 bytes .../ee0ade3daaa99f1df0622684eb5de21e17be14d5 | Bin 0 -> 423 bytes .../ee0c0edf3760482bdae850da44dbd8cab1c2acc6 | Bin 0 -> 1336 bytes .../ee1053b01d2d5b5a14dd966d66c43b60640a1560 | Bin 0 -> 1049 bytes .../ee1cc7655f936f080dea8e83be61798af26e2dfb | Bin 0 -> 2101 bytes .../ee21bdf24d778c54e6ff42ae80787a8f8041bc68 | Bin 0 -> 601 bytes .../ee26ce1aa8b17d3072621d2c10366612098cab4d | Bin 0 -> 646 bytes .../ee2874a6f230945f1f53b42999c7c1fa42815ba5 | Bin 0 -> 3197 bytes .../ee2d5edcbd537324ab7e3aeae0d0372368512dfe | Bin 0 -> 695 bytes .../ee344d3026e5a82b8db342bcf3f1ac68f4c94e2d | Bin 0 -> 27 bytes .../ee6379a43070fb110bbf3ef221c8ed72737167fa | Bin 0 -> 544 bytes .../ee67e2b1223a838949d800d455d8243217747e42 | Bin 0 -> 476 bytes .../ee68bbb48baa4fa52e15e1718e3aec4224e69f6e | Bin 0 -> 474 bytes .../ee6b011cb6ac36e95c17236812b4d10f0db7bf24 | Bin 0 -> 853 bytes .../ee6b0ea715e859a60000a3a81855c49666f0fa34 | Bin 0 -> 1335 bytes .../ee7bec03b7ca52c2cbf70026fd4c91c8275242cb | Bin 0 -> 741 bytes .../ee7e352ca24d007d133b8957053d231677649d4e | Bin 0 -> 864 bytes .../ee8b47b438595739e1d4237ce79fa713455af773 | Bin 0 -> 546 bytes .../ee9f46fb5a5c11b2af20429a445ed2a9c4e2e184 | Bin 0 -> 3154 bytes .../eea059282c02fcb488f559bd01d1ecdf96f9efcf | Bin 0 -> 87 bytes .../eea080ee8a22267a0e0603fa46444af8f5421b2c | Bin 0 -> 1044 bytes .../eea7a700b0b3c7e226b35c724f2ed32834ca2d63 | Bin 0 -> 2331 bytes .../eea89ce08fa7a811d4be10dc9787bbc2d4545ed7 | Bin 0 -> 2005 bytes .../eeae0322c4265d403c3522a1e4b723f8c06cd9f5 | Bin 0 -> 581 bytes .../eeb6dbba53244be095c825317acaade8a38b0327 | Bin 0 -> 1335 bytes .../eeba2bb5af5b04be43012751fb8d2101ba689278 | Bin 0 -> 3903 bytes .../eebe8e8dc26d3115c9a6a6128f5ddf28f5d2cde6 | Bin 0 -> 847 bytes .../eebef5e3be5ee24088ea7083f0ed9d4ef8602f17 | Bin 0 -> 1071 bytes .../eebfe884dbf516358dcd4dadca98ef489a4484cb | Bin 0 -> 931 bytes .../eec19cfe3f8c6b997d5d8efc71b7b6fd96d6edb4 | Bin 0 -> 1049 bytes .../eeca90b34dea0776ce79f957a5f74533d3d8e168 | Bin 0 -> 1175 bytes .../eedce82aa1c2f7deb28d7809eca7b1e8d3ae98bd | Bin 0 -> 8148 bytes .../eedd25cc30b22b8c1dec1c84f07b42528d21656b | Bin 0 -> 934 bytes .../eee459eb1a00bf512d7b2212c7ef1fa72d0ee3e2 | Bin 0 -> 1079 bytes .../eee910abac7607783e119e481f8616c3a1d803a4 | Bin 0 -> 764 bytes .../eeedea146f80489e4f73e7c3de9ed8f83fac6216 | Bin 0 -> 544 bytes .../eef6eed802ee2ed0ad76bf65c5671afefe07966c | Bin 0 -> 934 bytes .../ef0266312704bab57837b3ec861e3b3d1053aae3 | Bin 0 -> 853 bytes .../ef0559293dcd4aaf53c1daceb616163858c6cec4 | Bin 0 -> 1868 bytes .../ef3077fe8119bc2b9109b33a1bf8128eeeaf4209 | Bin 0 -> 2005 bytes .../ef4653b6f31bafc6736494191137c49d5388fc28 | Bin 0 -> 695 bytes .../ef5804ca311e14919700faf35b3fbc5b83c92a47 | Bin 0 -> 579 bytes .../ef77a68b2216168c40088b7e10816ef0d2a2730b | Bin 0 -> 860 bytes .../ef811650b9ef5034abdf008203e8ad184d4abed9 | Bin 0 -> 1335 bytes .../ef8b789da75d56fef38a1ee110cb1af71009522f | Bin 0 -> 544 bytes .../ef97ff842dcf820a9e100bdfec73c3add39b1cfe | Bin 0 -> 1336 bytes .../efa75a4fabc866f855f839104c56de4f85033ef3 | Bin 0 -> 544 bytes .../efa9e1900b9f10feafc8d09b9d7920bc4264f37f | Bin 0 -> 544 bytes .../efbfc9558323a6f738b7ebc5670ac111eb5d24df | Bin 0 -> 51 bytes .../efd702a15cf2a843645a770b407f6571d441c480 | Bin 0 -> 691 bytes .../efd8a6e6baaece41c6578c8675e676ce5736fac2 | Bin 0 -> 685 bytes .../efef9021d450fbfb724f2ab4b21983e83baa59c8 | Bin 0 -> 544 bytes .../eff01b2b5d0577eab4a39e210f798e82e8208298 | Bin 0 -> 544 bytes .../efff70b28ceac1fe5bd55224bf4075ead6452b9d | Bin 0 -> 544 bytes .../f0107599df38487cf2371bab75a6f9c8f13de6a0 | Bin 0 -> 2101 bytes .../f015f36fb71f10b87ec91a6f81decff1bbcdedfc | Bin 0 -> 696 bytes .../f023e55b109819ac58f4d5aacec8cb12b05fdf6b | Bin 0 -> 544 bytes .../f03389943feb94c38f8df1c36db0197fef6570b1 | Bin 0 -> 579 bytes .../f04e12bf15bb9e429d874512916f4bb8723df477 | Bin 0 -> 476 bytes .../f05b00aa0643b8814f9d787e9709499ca28b60b5 | Bin 0 -> 544 bytes .../f05c2615f31517d1d28c45a31500fe2b397dae96 | Bin 0 -> 2251 bytes .../f0713756753e8979ff0cffc13fa7c2c0710e151e | Bin 0 -> 479 bytes .../f0744900f8c7a3d895b91418584b687beb874e9e | Bin 0 -> 1107 bytes .../f07679268187434ddda875b5a956e3dcc133be71 | Bin 0 -> 6659 bytes .../f0865d4ae99a530d1633cecd4b53f4af86284f6a | Bin 0 -> 1143 bytes .../f087ea634d617d6a602edca985714f2e1de9b532 | Bin 0 -> 695 bytes .../f08d6328e4ea2a152f458d01d8868c10b1ea981e | Bin 0 -> 919 bytes .../f091d40c523ca33b4ce55d13e52a50396acf85ba | Bin 0 -> 363 bytes .../f09f999e70ab1117c803671ce8fcf6a5b325eabe | Bin 0 -> 61 bytes .../f0a197a3ca98cbef9a07f620c13951493a9e9d8d | Bin 0 -> 3492 bytes .../f0b2259a34e605ae68f076759393c21b47709d5b | Bin 0 -> 934 bytes .../f0b2b6bac46447c208f6a92166e2162f4dc6ec86 | Bin 0 -> 64 bytes .../f0b62ad646a549cf4471f8bee28d2891eda24668 | Bin 0 -> 633 bytes .../f0b651a301ce0e0f1459d11cb6ca14c22411a538 | Bin 0 -> 7 bytes .../f0c28e2c4d1db33fa9a9f505fc1c1dc017d7304a | Bin 0 -> 47 bytes .../f0ca6357854a6a2e2eb917c02a6c1613a63d056b | Bin 0 -> 1967 bytes .../f0d14e5e0803b9ce7f3522c3fb91a04e9f9f8d0e | Bin 0 -> 685 bytes .../f0edf56e06312022b8630f1007caaffb4aa590cd | Bin 0 -> 544 bytes .../f0f1596187ec44767ab8fa7b6bbea1c101faee4b | Bin 0 -> 728 bytes .../f0fa4a419f5aeaac5dbbf698c942c6c012c45e46 | Bin 0 -> 544 bytes .../f118269ef5ac2ade7d17b6dda78abf8c26f9f0b1 | Bin 0 -> 1335 bytes .../f1191c4d0a5f28f5555e791fc20166c7cccd4929 | Bin 0 -> 695 bytes .../f12150eb033a8b23f060ff16df19a35022ab451b | Bin 0 -> 363 bytes .../f130a137abca96d63b6b3b0280c355167689daaa | Bin 0 -> 856 bytes .../f13621e514732ced2713f7fe9f1313389713e087 | Bin 0 -> 733 bytes .../f13d326c6f1e66b8c30052f6289afe43f081bf2c | Bin 0 -> 695 bytes .../f140d158d948426509c3716a1afb0c8be2307374 | Bin 0 -> 544 bytes .../f1417e14d55a2330df1c50ea4c58b6d7a51f5d8a | Bin 0 -> 860 bytes .../f14a1ad1c035b946f70f5aa07859e9300b07f8ff | Bin 0 -> 2008 bytes .../f1554c08b14e500e61816d69b5039fdb914ce52b | Bin 0 -> 2101 bytes .../f1641f25375144bf56f416662383fbfc537abde0 | Bin 0 -> 981 bytes .../f1737f3507c8dba22aaa616d79f161f20dd986c4 | Bin 0 -> 774 bytes .../f1902901c29ea4427ab06e2702f806f619c2e0e0 | Bin 0 -> 1199 bytes .../f193d6825ea79777e6cb1574084c2e5294849f6d | Bin 0 -> 1175 bytes .../f19b8860ccdb84f5a7fddc9b5d926cf517c77354 | Bin 0 -> 920 bytes .../f1aa0be5c9c034c2d3a44176e459cc65f8e5badd | Bin 0 -> 423 bytes .../f1aa48e248fa5235cda4070313a307868e6001a2 | Bin 0 -> 768 bytes .../f1b5499f01e6e7eed91d87a48c73014e4ae124b7 | Bin 0 -> 1271 bytes .../f1be626801aac42f917925ad5a29fc80d615fbea | Bin 0 -> 2331 bytes .../f1dd07fb84d8d645ab3583e0ebd2af497eb9ba90 | Bin 0 -> 544 bytes .../f1ea268668377f895e99408a2ff69f5831d4474f | Bin 0 -> 745 bytes .../f20093876f6c791a2aa4762b7faeaae6eef1a8f8 | Bin 0 -> 741 bytes .../f201ead4f01e3dfb0eb91b78799b70f6000f2b26 | Bin 0 -> 687 bytes .../f21ff7736827c58ae765164a01b9ec25c66a2d47 | Bin 0 -> 716 bytes .../f220387ffb3cd9a60d62f9c0ba44e4c56e3b14cb | Bin 0 -> 2332 bytes .../f229b4b6c1cf2154d2056e8be93f25e42b6c1542 | Bin 0 -> 1512 bytes .../f230c74407cfd11c16a2bb3f4a82b1d10d85480b | Bin 0 -> 1335 bytes .../f23b850460a42172679c66672fe158ba82cd8dc8 | Bin 0 -> 50 bytes .../f240ce3d49ff623b0c46a9d503389e691bf8916e | Bin 0 -> 544 bytes .../f263130c20c834c97af850c0c9b1db021e4b874c | Bin 0 -> 1143 bytes .../f28245b3e23991a2d49b0b024aecf9dfb4780688 | Bin 0 -> 2835 bytes .../f28f0f4a319df1edeae3502220678345c737dc53 | Bin 0 -> 859 bytes .../f29545e523bc2386faad9773c0377b1346d5ec79 | Bin 0 -> 542 bytes .../f2ae58605435e1cc7cfdb1870ee7df2b0b6f0740 | Bin 0 -> 3159 bytes .../f2db07b7000d4e6497f246daf8ed5715ad39842a | Bin 0 -> 182 bytes .../f2f4c5918b3de39c9e499d4bb0585e7dc26931a2 | Bin 0 -> 696 bytes .../f2fb2acc3e449250800315ca4d18f7ddf1df0aeb | Bin 0 -> 12 bytes .../f3002d336a773be15eb188f6569114c29fbdcdea | Bin 0 -> 1335 bytes .../f301d1e20a8bbdee9ec358852d219ddc14f044e7 | Bin 0 -> 115 bytes .../f305939c5f78217335c6d8e3485cec8db339d5e7 | Bin 0 -> 544 bytes .../f308c23ca86e75ed38d3b308254a9cb220e326a1 | Bin 0 -> 3223 bytes .../f30eec20b8cb39c36be8880ad3606d6a420fef8f | Bin 0 -> 544 bytes .../f31d05198bf6851cf1c518d90a4c04fb2a4e3f91 | Bin 0 -> 424 bytes .../f32233cc55f539d26360ce148fc0eeb71c5d6524 | Bin 0 -> 544 bytes .../f34336341cd9a2072f7673f2d04dd7e6806eb40a | Bin 0 -> 1335 bytes .../f34cfef97b31dd3b1a2aaf4031d1bfc5a64a2a3f | Bin 0 -> 834 bytes .../f34d79ce59f31a1e5f4e944ba8e51bb7e718c198 | Bin 0 -> 544 bytes .../f364eeed86b7bbbbcd6b4b11dab1d3f1fae3a6b2 | Bin 0 -> 675 bytes .../f377baa8b6e05de4769027bde8bcf6d86b00737d | Bin 0 -> 567 bytes .../f37e386f62d1eed069a442a84c44a5ff81f02fa0 | Bin 0 -> 544 bytes .../f3a0838014859133825eb94010d0a514da8cecd3 | Bin 0 -> 1645 bytes .../f3a2de386db2b1414c1bdbe942248901a356009b | Bin 0 -> 423 bytes .../f3b1074538d1be75d8326a6b1c53a2b1593266b4 | Bin 0 -> 544 bytes .../f3b753a9e90c97e51f3be9b75913636851d16516 | Bin 0 -> 695 bytes .../f3b957d024f75e8f8ae14a1b26871123b9ca6ce8 | Bin 0 -> 2185 bytes .../f3bd3abb1ad977f93ac157ce2364ef8c08c8af34 | Bin 0 -> 428 bytes .../f3d40257778398a39ea94a1baaa747a4390f7e69 | Bin 0 -> 2252 bytes .../f3ed86deb28eab9bdaf42c1c22b9d8552ac339a5 | Bin 0 -> 529 bytes .../f3ee9f2dc08acda202766e8bb2845fe1d5c00cc7 | Bin 0 -> 2101 bytes .../f3f5028886d4342953df001a70ecf46d75e971b9 | Bin 0 -> 1335 bytes .../f3f9588cc7bfe042cc1694acd625262cfbb1c74d | Bin 0 -> 3159 bytes .../f4001f01f49ee2bb493a5088892d490dafdf9f86 | Bin 0 -> 859 bytes .../f4049a52ebd325e933e8e6f01db1f212737bdb32 | Bin 0 -> 1787 bytes .../f415e46f912b23c8fac4f853a670b1b194fbb411 | Bin 0 -> 2332 bytes .../f422274ad5cfb705db6afaa6003aa3654e04891e | Bin 0 -> 544 bytes .../f422e9581068867d0da0b0f62bed07a77919ff1f | Bin 0 -> 423 bytes .../f42917395040004233998ce31dabbef3af32430f | Bin 0 -> 955 bytes .../f443c1c70c42a7921daaae1f188ce76e1071c336 | Bin 0 -> 1175 bytes .../f4450f0ee93175495cd798d0363b5edfca3c905d | Bin 0 -> 981 bytes .../f4635cf652e228251070467512f1a886b15abf33 | Bin 0 -> 520 bytes .../f46b75a7b9bcad88fb6201db0da6b65eb97fe02e | Bin 0 -> 694 bytes .../f478900ffc0f022838e34862b0ce9097ddc132fe | Bin 0 -> 544 bytes .../f48613e34b5689d4d7e90cbcc554c3fc02e745d0 | Bin 0 -> 2251 bytes .../f48e58d4e9c1a253ea668cf30ee982118a783b76 | Bin 0 -> 475 bytes .../f4a0a626ae326bc21f761f2d27b6761c9919798f | Bin 0 -> 561 bytes .../f4b05152185100c8dc61f08cb44430baf52e0a68 | Bin 0 -> 696 bytes .../f4cb31ec81f272ec3d405a7af242ffdf6519d481 | Bin 0 -> 3159 bytes .../f4d8d2a1bbbe1f1690e9cb85361c72b02cb5b9b7 | Bin 0 -> 423 bytes .../f4dc57b36ead84efe8504ed1beb3be92823d5378 | Bin 0 -> 696 bytes .../f4f19b527373caa0cb59c0fb59c9024533221f85 | Bin 0 -> 423 bytes .../f4f5e3591de250829cfbd3d25e7c0691f2417c18 | Bin 0 -> 529 bytes .../f5017e9f85f126e48048fd8d6ae466235e30ee16 | Bin 0 -> 53 bytes .../f51a04226e4ec669614125e9e6bde77c901db6ae | Bin 0 -> 475 bytes .../f51d6ec1471839382a2ebba86bfa84fe963c4828 | Bin 0 -> 544 bytes .../f51eb5a83bd00d8075c3eb32aa5ef78836075b0a | Bin 0 -> 546 bytes .../f52759fdd3208b653ce1dbd280128e3f7f14fc42 | Bin 0 -> 3159 bytes .../f52f8bd6405f69d6f67ce8e3b7ff6f18c262569c | Bin 0 -> 2251 bytes .../f5374c144ae5b2f37d8a2062236afc0cd80c1f3f | Bin 0 -> 3159 bytes .../f54be25fa8abf5f3504ee54450da9dcc01f5a324 | Bin 0 -> 696 bytes .../f56427521fb7eafd569222f01ff12fe48ef949f4 | Bin 0 -> 544 bytes .../f566ac1ae53f8a56a8c8d617d45e894a5a5065eb | Bin 0 -> 1157 bytes .../f586c30989a7c37ad978751f1bd653216171a581 | Bin 0 -> 544 bytes .../f5a9a6bdf9f9ef1e6b1aef4359f6255eab2528b0 | Bin 0 -> 6638 bytes .../f5b000ae8014f725442c6168f619217015c0c471 | Bin 0 -> 556 bytes .../f5c303f43c91c8d1ccf02b5fc6f6b5de4e3b88e9 | Bin 0 -> 2332 bytes .../f5cdce3d5c8bd5b0e97e2baaac041811fb36a2c7 | Bin 0 -> 536 bytes .../f5d9d1597f726d0d7ccb56b1dd3ecbea33eb610f | Bin 0 -> 691 bytes .../f5e2eeddfbfa8202bd720b0214d52434ca55c383 | Bin 0 -> 880 bytes .../f615ff52451d1144a8b0f50dd32afcd7d472942d | Bin 0 -> 2251 bytes .../f618f11263022ca5a5fbd4f3cee72193cecc95df | Bin 0 -> 1718 bytes .../f634be311537ab50d3a0d0d76c18de4ba093adad | Bin 0 -> 7 bytes .../f67baa73453f0bc63ba545f49759ded5e5da4a2b | Bin 0 -> 743 bytes .../f67d0d076d587c944c214460df4fe48144342665 | Bin 0 -> 1545 bytes .../f6874407826d270ac853a861b955d2388451b80f | Bin 0 -> 9312 bytes .../f687ef776bf70894bab33644651fbbcc4b4c220f | Bin 0 -> 2251 bytes .../f697be7db32c71276cd4213bf7eb010e21ded596 | Bin 0 -> 544 bytes .../f698094c1650f680084b3f69bd9c0ebe5df2af3d | Bin 0 -> 2101 bytes .../f6a497537f8348a8977a5e01a7d513ad330a1d37 | Bin 0 -> 6240 bytes .../f6ad7c95b2df93146e633178365d948352a75906 | Bin 0 -> 1044 bytes .../f6d72da11dd9477d4f8e5d5ab041f88a906f7343 | Bin 0 -> 529 bytes .../f6e07d0b9c53a57884e1aac240834fc2d2b25fd1 | Bin 0 -> 853 bytes .../f6fc8401ab15671e0c2f05efe4f7acaa452eec96 | Bin 0 -> 2251 bytes .../f6fdf2fafa181ab10d3bc91ebb4fddc94812821c | Bin 0 -> 685 bytes .../f6ff5c25bc58477910eafed36e41c207a438ec8d | Bin 0 -> 62 bytes .../f7012c67709c8eafff970e14055730639de5212b | Bin 0 -> 546 bytes .../f701750ec910fba7cb6800988437689ccb2e8e9a | Bin 0 -> 2101 bytes .../f704e3d2c60ea0c50fe23d881b5049eedbe0e0f8 | Bin 0 -> 415 bytes .../f71141275801402835adc2a50bd86cad3c2304e3 | Bin 0 -> 691 bytes .../f719b4a09a48983962a52e58606301566d066c48 | 0 .../f71d98f0761d6cb4d508be6092e8e02f9c217143 | Bin 0 -> 2332 bytes .../f71f611d543d5d114368555e2df2f1316d0bfc5b | Bin 0 -> 1175 bytes .../f72ae98c40a28d420191286b7df59b9258aeca1b | 0 .../f732e6a54e3503941b141db6a7277ec6295f4025 | Bin 0 -> 544 bytes .../f73864f2ccb78ef500116cce77677721e9d70cf8 | Bin 0 -> 529 bytes .../f73f9b9a8722808c4cd4cb3e37b6c6de716d46f2 | Bin 0 -> 768 bytes .../f74724ebce461e3fd1cb673a00c6846fa196a28d | Bin 0 -> 544 bytes .../f74be25a1b9255a86dc546381bc13cf22b75a3bf | Bin 0 -> 3492 bytes .../f7569e11ffd9c587a9564b6a0b91b85e36e8bc1f | Bin 0 -> 934 bytes .../f760b7646da5830da9e87713e716a27cb8d5cd58 | Bin 0 -> 847 bytes .../f77ab14a11e1ac9a25ab8295efd15df24fa39f78 | Bin 0 -> 111 bytes .../f7bfe305c8f5f2e48fb45c55fd2255e583debf6c | Bin 0 -> 544 bytes .../f7c1758053225329cc5c7e7cd830580342220fe6 | Bin 0 -> 6599 bytes .../f7c306a87b621a733d73fc5fe3150e551683d933 | Bin 0 -> 1336 bytes .../f7cf49564f7896e839238103a324714617369fe4 | Bin 0 -> 3160 bytes .../f7cfd61d1bd8bbdebeaa3a49c24151c552a3a8c9 | Bin 0 -> 62 bytes .../f7d7a48bf8e7f6c464d55df5349de5030d72bbde | Bin 0 -> 696 bytes .../f7dba7a373eacfaee5b5cdceb719fe6fc0ca55f8 | Bin 0 -> 3474 bytes .../f7ebd0284375a373bceab0fd39e2f3dcd8a9fd16 | Bin 0 -> 3155 bytes .../f7f92954e041d85aa6ef4991cec0f7959ca7ab89 | Bin 0 -> 3154 bytes .../f80f88e8e72fadb5fb611db7cbfd3c03db1c4fe5 | Bin 0 -> 3972 bytes .../f82a37ce1904da873406ebf050d4e16691b26abb | Bin 0 -> 1093 bytes .../f830eeb92430c779f440e9bf4e21607273467963 | Bin 0 -> 544 bytes .../f834d8528d5dd5e1b71119a028d08ffdcfe7b461 | Bin 0 -> 530 bytes .../f847c0d29ab73fca9954c3b95090dcc799b0c59d | Bin 0 -> 475 bytes .../f8568c3fd4b1f6461bfcba12bc5aac3104153af9 | Bin 0 -> 544 bytes .../f858fb689858a07976ac8539ecc56bfb2a3db733 | Bin 0 -> 544 bytes .../f872098360ec18c54461e3dae13ef768c163b2a0 | Bin 0 -> 1415 bytes .../f8883e8ad1ad5c98763297c8a5840835b5e4a3eb | Bin 0 -> 1044 bytes .../f88a6aabd758bc0d3ee0dc7bd77a9b373dfe210e | Bin 0 -> 23 bytes .../f8913a2628f5052a3cf24b1d5ccfecb553f9ca35 | Bin 0 -> 853 bytes .../f89806de862c8348a0a87dd1786556d1895eed60 | Bin 0 -> 531 bytes .../f89f091e47f83dd391254b4d574322e03e2f3754 | Bin 0 -> 565 bytes .../f8af876845928653bd38772a1df33b852ea0eb0b | Bin 0 -> 50 bytes .../f8b68cfcd08e43f6332a5690fa6536cf59dd3a80 | Bin 0 -> 363 bytes .../f8d2f2c0494af902b9a7f0e1f1e118dd0f03dfb5 | Bin 0 -> 479 bytes .../f8d79cc896a97de0b8095e9f8121313edd462164 | Bin 0 -> 768 bytes .../f8db68ccbf8d7dd57ce884c81d6e2344eda30c58 | Bin 0 -> 696 bytes .../f8ece340d1e3343de2c8bcbc294122201f00c8d6 | Bin 0 -> 691 bytes .../f8f3a0409724a7770ec447488465cf54e856be96 | Bin 0 -> 860 bytes .../f8ff0a7a2604e35d59a6f1db0b5103caf5b41b0d | Bin 0 -> 6613 bytes .../f9007e156a9a8624eaf904a1b30539067f3187fb | Bin 0 -> 6629 bytes .../f901051668cc49a6978b5ec5ca459b6931981482 | Bin 0 -> 1175 bytes .../f91444bb1d7c127e2a459a5b2580e025e7d5fecc | Bin 0 -> 2281 bytes .../f92e196787634a16a52fa720f65d0eea7878995c | Bin 0 -> 3159 bytes .../f94ee87d50ba4f311c5818741bbd17688e31af9d | Bin 0 -> 544 bytes .../f9616d41703104a35ccc75c6389f2e63a68ce62c | 0 .../f97e4858d4e42fcba3b93dddb5c0b8c7c2d92924 | Bin 0 -> 428 bytes .../f9913c0375d1c18e8e9fed74c56f0113135fa535 | Bin 0 -> 813 bytes .../f9b111573b7fadd039c2e1f30aaac4e554d5e5b1 | Bin 0 -> 541 bytes .../f9b424f15c2142d2d36d7ffb03bd3256ba0059fb | Bin 0 -> 546 bytes .../f9b85f40450e91e1e07648b7aab0f09b18cee6f5 | Bin 0 -> 844 bytes .../f9bb6e1ed5765768b595439fd1436ce29e465a96 | Bin 0 -> 423 bytes .../f9c4a2c4b28570c4600d19781d69799963a96442 | Bin 0 -> 2054 bytes .../f9cca99b628f98f5c6dbd6fcae0def16da616567 | Bin 0 -> 544 bytes .../f9cfe1094c3a3557c65a44e7d5165147df89ac69 | Bin 0 -> 981 bytes .../f9d62afb74b6fe7e0ff213cbf204bba62ef8d622 | Bin 0 -> 47 bytes .../f9e33ac0fc71c1fd8c2c2b3de644dbe6721dd21a | Bin 0 -> 544 bytes .../f9f7e2ffdbe014c70b686dd5f5cbbb87ae09553e | Bin 0 -> 544 bytes .../fa0fccd4f22cb7cc7e06ed47333908ae5b502ba4 | Bin 0 -> 544 bytes .../fa11ff23a7eea69b8e38615a208b2b56ef07d035 | Bin 0 -> 860 bytes .../fa1d50b70ccf6e4dc0367b4ac397c044b13ea008 | Bin 0 -> 479 bytes .../fa1ebb07bce5da7d7c2e22a8b5aa0bfe0da3e165 | Bin 0 -> 1176 bytes .../fa250c4470e110f9b75f341a621e866c5ca5f410 | Bin 0 -> 768 bytes .../fa3083b5a70527d6c66ae3841231f0209992ffec | Bin 0 -> 3154 bytes .../fa5259c2694319639f2c78105209d088a738ae90 | Bin 0 -> 519 bytes .../fa64a9c8bc68cb3f40f02117249c55549fff3ab1 | Bin 0 -> 479 bytes .../fa65a95724feb9b6b8ab44ca7566654799da5928 | Bin 0 -> 1335 bytes .../fa758996910839483403f63ea810b98c0bcb0057 | Bin 0 -> 2331 bytes .../fa9371fda3a6adbaa3426aa08b3d6f6cab6eb752 | Bin 0 -> 1175 bytes .../faa31f8c930e2839cf4a56b569e8de166afb2a21 | Bin 0 -> 363 bytes .../faa560662413d78b385c55a5658817847401532d | Bin 0 -> 544 bytes .../faaf9ab6bbf5ec4e0673cfc5c79003907bb8e74e | Bin 0 -> 1044 bytes .../fab5883c2233634801746740c0e6e44091aeb354 | Bin 0 -> 981 bytes .../fabc17d2c0b2970db434ce6bcf112069be39e8c4 | Bin 0 -> 955 bytes .../fae3e5fbd46c48622d3da77b4b764a4cf86c1e16 | Bin 0 -> 544 bytes .../fae52976759527bbf14372155c91a6738181bb87 | Bin 0 -> 423 bytes .../fb09f67d92ee2f0217fc3bafabc8c9755449d90d | Bin 0 -> 3159 bytes .../fb1623cb512ae80063f54b52b540a5725d918e49 | Bin 0 -> 856 bytes .../fb19955e725f2a709d71e871cd5f821a01f44935 | Bin 0 -> 1175 bytes .../fb210179ed693503155f05ec10f20d50430b1f35 | Bin 0 -> 363 bytes .../fb2b15413a81c0df00b8b9f6b18c9745a46d886a | Bin 0 -> 544 bytes .../fb304060227156c16e9b7e466fb9163dd4868d2e | Bin 0 -> 1044 bytes .../fb3e7bdc5eeb0f144647ad845c8ca20727bfa903 | Bin 0 -> 848 bytes .../fb5f4937f51ab63c9dccfa1b5ed4b06b30f95252 | Bin 0 -> 710 bytes .../fb68d2bae9ef565b5e743b8131532c80d0f2833f | Bin 0 -> 1176 bytes .../fb77c350e47c3189e70c400fec18fe91e235a9a0 | Bin 0 -> 544 bytes .../fb87b12e695c532cd55e3c4244246e85301a2970 | Bin 0 -> 928 bytes .../fb99a0a81680fb1916fa8747289c3ba6446004d3 | Bin 0 -> 2251 bytes .../fba681f695d7a533f83bc3776f13819e8c8ebb2e | Bin 0 -> 3154 bytes .../fba7d5e6a3970263f7264115f35387422237ca9d | Bin 0 -> 544 bytes .../fbaa560e627cb86faa1174d3b9fc1ec0e540630f | Bin 0 -> 714 bytes .../fbaee1622d25252566dcf4ae6c6a9b85625b4c73 | Bin 0 -> 934 bytes .../fbcabe25571ac81b24a1dbb8f79f44929f1dfadd | Bin 0 -> 853 bytes .../fc0d2252684ed420a6219f55e86bf930665bd31b | Bin 0 -> 53 bytes .../fc1d3fe79a47b41ae3b93a23050f6f19671b4ae8 | Bin 0 -> 1077 bytes .../fc2301e54a589953223b8a1f470a4cf6d6dcd1f7 | Bin 0 -> 784 bytes .../fc243c2b1740e6a4fa2e6f4eb5ec4eeeb6da651e | Bin 0 -> 1209 bytes .../fc410188056f1350b3388579fdf2710d60e4849a | Bin 0 -> 475 bytes .../fc589691e87778226142ced624414cd314898682 | Bin 0 -> 1540 bytes .../fc7704f0f0c5bb5cea66b8c01588a6623c4d4456 | Bin 0 -> 688 bytes .../fc7b6eff75b73664c31c5d2fa9b9a5babd71c057 | Bin 0 -> 860 bytes .../fc7d85bf491f160c52cb75b22ae6856baf6d2175 | Bin 0 -> 544 bytes .../fc899d9b2b6a425340f63371268a7b2d219e39cf | Bin 0 -> 476 bytes .../fc93fa7d78b2d8d1a524f463ef02926fb01d408b | Bin 0 -> 1336 bytes .../fcbcab0eff0ddf8770e40c6a303c7dba383bf895 | Bin 0 -> 1787 bytes .../fcc949b64b324a54c9a9fb2a358ac91811e3eeed | Bin 0 -> 544 bytes .../fcd332210f0f121659aaeb3f6dd7f46d22ed002d | Bin 0 -> 3159 bytes .../fcd3ce3e4c74c52ebc1dd609608764ac071ccda5 | Bin 0 -> 423 bytes .../fce613ce70f5260fa98469edd765ddc3569a51d8 | Bin 0 -> 97 bytes .../fce6de601d8be53447561a02f2d86841b0280f56 | 0 .../fce9a4aec5d4824f5120a5faa73e02fe5e267998 | Bin 0 -> 544 bytes .../fcf6a4cb40e79a9ea659dc359a29afc4ff0d4a65 | Bin 0 -> 556 bytes .../fd07f6390e84bb905359b0122770f7d9a8c1725d | Bin 0 -> 601 bytes .../fd171917657c76a3a63ae814f1569725d464ffd8 | Bin 0 -> 2080 bytes .../fd17f806be35cb37b6ee1b8fa0f6328244348697 | Bin 0 -> 544 bytes .../fd1e13e506375426db14e22a5dd119ebc5123c93 | Bin 0 -> 476 bytes .../fd2829de9c832cb4617a26ce73d18e7719d9e4c4 | Bin 0 -> 696 bytes .../fd29350e21c0b49c5e7489d8a703c285d64b511c | Bin 0 -> 2252 bytes .../fd33cd7471169d087b66dc0543bee1f0686b7eb2 | Bin 0 -> 546 bytes .../fd395eb468f3e16c71e959949fed72d539aeb866 | Bin 0 -> 557 bytes .../fd4e7dad8777ae494373121700966c098d66d02b | Bin 0 -> 423 bytes .../fd60f96d93f2b784c28c0aeae61cb4168a6857d7 | Bin 0 -> 423 bytes .../fd6ca1f09095256f89fb3674f124c51eff6246d1 | Bin 0 -> 190 bytes .../fd750454095f1b5ae0601d9cdb289175ac95c32c | Bin 0 -> 691 bytes .../fd7a647e85b1e943b8fd15e3fca90de07dd6e394 | Bin 0 -> 544 bytes .../fd8950f6b527b9d26157a388084a6ddd2d54fb3a | Bin 0 -> 563 bytes .../fd8b1c12e9d8043cfdf7f6d6544ec3e3df2fe738 | Bin 0 -> 544 bytes .../fd90c3cc70b71e7d9868e3f2a53af0ae95cc23ff | Bin 0 -> 1049 bytes .../fd97f7db07ce2adcf1e74f092f1fd98d289eaeb9 | Bin 0 -> 550 bytes .../fd9deccc50fc9924f90fc1926ed775ccfea47402 | Bin 0 -> 544 bytes .../fd9ff7db8143c70f677ea540bfb118223f4a4140 | Bin 0 -> 1335 bytes .../fdace8c003cd52665a8413769c059bb2d55d96fc | Bin 0 -> 2101 bytes .../fdacee643bf370226851c7718348c7ef101f42e6 | Bin 0 -> 113 bytes .../fdbd6d1cceec3cd955b055cf33011316c60e084f | Bin 0 -> 717 bytes .../fdd5b1bc169f326113262b62384879102437e1aa | Bin 0 -> 856 bytes .../fdd9258b242aa44c29f4dc537ea965dd4d3f3f1e | Bin 0 -> 479 bytes .../fde9f972b295e117411eb8c3cad44a159747c106 | Bin 0 -> 544 bytes .../fe0bfcb711ec75fc5ffd01bfc120c68f83351de1 | Bin 0 -> 623 bytes .../fe1037aae35ab857b5a5832365b4098ef8e2af5a | Bin 0 -> 768 bytes .../fe1fbff8e51faa6c496b9e1718a9087b5f2dba01 | Bin 0 -> 16645 bytes .../fe468b64995291c78bc9ffe6dc5276d88f851771 | Bin 0 -> 6636 bytes .../fe4973608bc4038cf56863b6e1e38a69c934b6af | Bin 0 -> 3154 bytes .../fe4f4ff04621130601ce5e7de79de5c082d826a4 | Bin 0 -> 955 bytes .../fe6985c79cd6389a068e2dcce2238b19b8a5af90 | Bin 0 -> 1077 bytes .../fe6e9f5f24159b11d9de310b3beecb0663ded3c2 | Bin 0 -> 981 bytes .../fe738bd688e1a5bc89192e0412cbaaa2f59243e9 | Bin 0 -> 1044 bytes .../feb5e78bc6c06430b982f7e5b67338cdcaf055f2 | Bin 0 -> 544 bytes .../febf886841aeab938c01ba51777ba7ca6be385ed | Bin 0 -> 1044 bytes .../fec5ad2cc112c7785e324406c792d0bdbf0e4a62 | Bin 0 -> 2835 bytes .../fed85662c4e7f66e1986cc2925e56599cc1b6b2f | Bin 0 -> 363 bytes .../fed8f6c6ee90ceaac783cb6eca206fe0d4f00f4e | Bin 0 -> 934 bytes .../fefe06bcafc63ab681c59417c7682985f2a9bee8 | Bin 0 -> 845 bytes .../ff0236e5f1751b6e59d792dac5695d3ba990e1a2 | Bin 0 -> 1271 bytes .../ff04e8be235f13d5374780a781d2925ffe083494 | Bin 0 -> 778 bytes .../ff0cb7378d76abf9bb144cb16202ffa24d0087ae | Bin 0 -> 544 bytes .../ff112a574caf52f882781ca43a33f2931ee76c36 | Bin 0 -> 1030 bytes .../ff18a76a52a996c989faf3ca94cc201ab563805f | Bin 0 -> 12915 bytes .../ff21d870d0c766261a53a53c29409f547bcd4a5b | Bin 0 -> 81 bytes .../ff2d95b3f2757ef0ccaf35351d26645db40ece4d | Bin 0 -> 579 bytes .../ff2f79167e0f5410aa158efb73e824e41a33cfb6 | Bin 0 -> 544 bytes .../ff320df7fdb4535c71b718b5c10e81e99bd26a75 | Bin 0 -> 544 bytes .../ff3c5ef9bceb3c162349298fe285e9598bf8f321 | Bin 0 -> 695 bytes .../ff5748211317826d8266c69cd74da0fb816e64ca | Bin 0 -> 3463 bytes .../ff5e6830bb23997bc46f3592ad9e524b083fe8f4 | Bin 0 -> 1044 bytes .../ff9ca2f27197ce76e029152abeb161bc11317aa3 | Bin 0 -> 1044 bytes .../ffa96e44996149dd0134b3c00b0b42fa96ca8904 | Bin 0 -> 696 bytes .../ffb304bc52b1bca1c5a9e61a494ebc80cd0eb826 | Bin 0 -> 860 bytes .../ffb833577289118e86817514bb6abbbec30d85d9 | Bin 0 -> 544 bytes .../ffc5c85355620d69e4b8e0db3fb4d02870ef7bf8 | Bin 0 -> 544 bytes .../ffc8bf8d6f2ea10b953afc168f7a94d4a83bde75 | 0 .../ffcdd90ff6b45992bb955e38fef9f5d492f9b089 | Bin 0 -> 697 bytes .../ffe4e39720db8b83f968516bb399d9c6ac49d6fc | Bin 0 -> 1044 bytes .../ffeb5c728b04212b25025b0a9e2c8c98bc507f0e | Bin 0 -> 1044 bytes .../ffed17147e7577c3abb496c0adbda06aeda44be3 | Bin 0 -> 544 bytes .../fff395d5adf7537b32fd7a3def2dc2962e98c799 | Bin 0 -> 2331 bytes .../fff71e810ab002b1e1e71c52887f8671ec7b9b8c | Bin 0 -> 544 bytes .../fff8dc6656a461cd921bd392d886082331d9858e | Bin 0 -> 44 bytes .../001beffc3fb6c3e1877775e930e1b8e17e18ef14 | Bin 0 -> 3161 bytes .../00622039b24004ceb1545a1d9d0116769631d2c9 | Bin 0 -> 364 bytes .../00cdb65c6a6417f5fc947b2650ba8e95fc969be8 | Bin 0 -> 98 bytes .../013dba879a26e4daee6b9137815e1bbd248d26c4 | Bin 0 -> 269 bytes .../01904c59697c7d0854d8a71032235018a6b74ca0 | Bin 0 -> 477 bytes .../01c812fbd0f70f41f3243c3b5539bce9a50b99f1 | Bin 0 -> 292 bytes .../021e0964211eafa136a32bcce5ba7d8a24149837 | Bin 0 -> 8954 bytes .../02291a2dc906655b50167de9b882b5a178f5a5bd | Bin 0 -> 376 bytes .../0230febb82e4056d43bda1de624a7a8a3500bc0e | Bin 0 -> 6193 bytes .../0293fa7e5140c9dbf0970c87a0fea9eb2fb120ee | Bin 0 -> 675 bytes .../02a15974e36a0240469158dde302d4d5a0432851 | Bin 0 -> 320 bytes .../02b0919024f59928da3b81f4b822a3e49794f27c | Bin 0 -> 1318 bytes .../032960f280e11d43ac5df741172fb5ccdefac3db | Bin 0 -> 67 bytes .../033767ef4ae46f2a5b6acd4c1a2b2321dd660af4 | Bin 0 -> 63 bytes .../03765513d586d649f42b75a99a41b9509b5a674a | Bin 0 -> 1600 bytes .../03794cba79a2fc0befe8c7243f869648513e83bd | Bin 0 -> 577 bytes .../03b1d3bf478acba1b933f3561c7f64837b5b3462 | Bin 0 -> 611 bytes .../042832de53a975d07971c736edf10d97237b2505 | Bin 0 -> 84 bytes .../048f285869a41f3b06d988dac2bf8b249de84de5 | Bin 0 -> 141665 bytes .../04d116435eb2db2f6f24160e589410e244bfa4ec | Bin 0 -> 1278 bytes .../04e317b558fb1834b4793e2866f4ddd8824fb020 | Bin 0 -> 1026 bytes .../054987f9595267dbf281a28a898adcbb41511d77 | Bin 0 -> 2282 bytes .../05525a91697b032367304c01e8f17d0a0b36c905 | Bin 0 -> 5334 bytes .../0566d87c39586f6ab103c5b3c158b02b9409a970 | Bin 0 -> 448 bytes .../05bb9614bdb67b55efa267a96156319e8273968b | Bin 0 -> 825 bytes .../05bbb6d8e366926f0c7f510d34731a0ce33ef9b2 | Bin 0 -> 9 bytes .../05d185adeb8972dcd8ca8e0bb7946a0544409351 | Bin 0 -> 4269 bytes .../06560f919f98f6de3f34fd861fcbb693a080611b | Bin 0 -> 598 bytes .../06e2ed3bd9c5097f55fc535b81c1bc721a799e22 | Bin 0 -> 2375 bytes .../0708627aa2f9f511fe5fc4527bd415f7bfb3ce84 | Bin 0 -> 676 bytes .../0727c87b7f4a242fa3452ff174b271aa38c84104 | 2 + .../075a5cde866bce058b73f460a90428d64edab624 | Bin 0 -> 2052 bytes .../0787d96aa7200efcb3a560b0ab572001d0bcfef2 | Bin 0 -> 4573 bytes .../0796ad3fbf779ad69b3362abb65b112c8f819793 | Bin 0 -> 253 bytes .../079bfaa770e4408d2524000ae6ab037170886c09 | Bin 0 -> 3989 bytes .../07aaa8229709010848839584f1013fcbf6cabfca | Bin 0 -> 4883 bytes .../080cc63fc946a1a40e8fda309e679f0ea9e852e7 | Bin 0 -> 228 bytes .../082d1b028896eb32408f273c17efc64659972bdc | Bin 0 -> 70 bytes .../08796ff442cbb8f6417f0cdc3a2de6391111587f | Bin 0 -> 6360 bytes .../0888c844426151fe611efbebd3c752719edef45d | Bin 0 -> 140 bytes .../0889f82118a1e26482eed51aa55aa44c43377d33 | Bin 0 -> 9 bytes .../0890d6b941c9ebdde72f23cbca17409d2e6a5ed2 | Bin 0 -> 415 bytes .../08966c7d43e71572caaf36255480b635ab8e0976 | Bin 0 -> 394 bytes .../0898a1ae7932442c6c45ebce859be0bfa19ba776 | Bin 0 -> 143 bytes .../090812b212cfcfa8edef912291071ac8b8514e8c | Bin 0 -> 1503 bytes .../09b631cf12e38fadaba939941904362454a74d46 | Bin 0 -> 307 bytes .../0a1f7f9e37d1d6ea49794156df2eb83b488f08ac | Bin 0 -> 94 bytes .../0a8097ce4ee240d45eb02f6c47f8f5853b9dffc2 | Bin 0 -> 217 bytes .../0a9d1614b7b8a2f2fb5e90cfe14dec70165bfaac | Bin 0 -> 914 bytes .../0ab6c7621c517389bf715f6648283ede99b839ed | Bin 0 -> 912 bytes .../0af90ed43854b2420e7d523f292162fa8c92a6d2 | Bin 0 -> 32 bytes .../0c21ab6e54741eb7b932999b4ac8134b397498d2 | Bin 0 -> 63 bytes .../0c5125c8976cea697d02fafbfd152084c8bd7d56 | Bin 0 -> 3892 bytes .../0c69003327907005753fb374e20cbb6a4e39b159 | Bin 0 -> 700 bytes .../0cabf477985edd7b23d47b8c33078d239db6ce9f | Bin 0 -> 5997 bytes .../0cb68771c2283b504d49e2bb55e1967fabf6ec53 | Bin 0 -> 9 bytes .../0d3b7ef70023bf4274f770c0f19cff4030803f88 | Bin 0 -> 308 bytes .../0da2a74e30e730e21082e97aa96cf02283317bf8 | Bin 0 -> 2641 bytes .../0db565020fc6f018bb3aaee172b3c83937db0584 | Bin 0 -> 993 bytes .../0dc96d7f9cca01dbef6b2c0e3c52fe7aaf75886d | Bin 0 -> 18 bytes .../0ddb4d5ded4c611306636634e4576327d9bced64 | Bin 0 -> 822 bytes .../0de18567af0407af52b60b9c39a5882c4e572740 | Bin 0 -> 619 bytes .../0de34e7edf360fa9439352c164753d383241d6d4 | Bin 0 -> 189 bytes .../0e02f849a0f299352bc24141556a899c84c6daf7 | Bin 0 -> 395 bytes .../0ea9697f151b2cc738c5a3c7a01a1b9ceb3a8240 | Bin 0 -> 736 bytes .../0ec65f22a20f00cb8e20af4426dab0796d67553e | Bin 0 -> 342 bytes .../0f3ba96ade293d0eae3bcbd38cabb4cd0fb7f1d5 | Bin 0 -> 608 bytes .../0ffb9dfcaa9cdf076034a0a6d61e8ffce9ced4cc | Bin 0 -> 338 bytes .../1015a495335afd1330ff48aee0da1ee8067145dd | Bin 0 -> 481 bytes .../108195e6472ce06a2df71cfc8d444851fa8516dc | Bin 0 -> 4539 bytes .../10f6c4f669af8c3148d65b175fff64fbcdab1088 | Bin 0 -> 227 bytes .../11034936fcba6a28b997a3858725392e34d913f6 | 1 + .../118e014e886cf6e512f9358b9f67893a4832c601 | Bin 0 -> 391 bytes .../11c2ebb2e8262e7d3c72e62c1e0dc146b0e1ddaa | Bin 0 -> 151 bytes .../11f62af56656e528c7e83b9cb4bd64ea6f6d4b23 | Bin 0 -> 8389 bytes .../120536f0561e728fd65a036ad657f9496c3422d1 | Bin 0 -> 3233 bytes .../125e98fe983dbd8782eb0b4801fe8f91f4e0b124 | Bin 0 -> 37 bytes .../128c7f5de9b74785e8e5291ff0ba833404abaabb | Bin 0 -> 2928 bytes .../12bd1df41dcbbc21789574402313dc8e0fc1ae4b | Bin 0 -> 1358 bytes .../14186ccf256dad8d9eee4db3db22dd90d116b58c | Bin 0 -> 254 bytes .../1497a3ffe37037ff3f2a428abf2fb88634ad40d2 | Bin 0 -> 242 bytes .../14aab7431ec2e20cbe0f8b3adeb2b998e5ec4382 | Bin 0 -> 358 bytes .../14d6dc947865c998153b63c371c6e4a15eb69670 | Bin 0 -> 1060 bytes .../14e5ef991aa7fcf93cf97657dd43fbdc730723f6 | Bin 0 -> 1000000 bytes .../150a88b584e7ff169ee2c4217d5efe230b23fe12 | Bin 0 -> 802 bytes .../157af6587a8da75c58093e54abd374889613780b | Bin 0 -> 1615 bytes .../157c4543af657b339d59d38c444dcf877a15dc95 | Bin 0 -> 626 bytes .../15bc10a2f9e651c055f55c4c8a62150c7d111f29 | Bin 0 -> 1304 bytes .../16629e075240584bb293adba3afd7e93d16ca5ec | Bin 0 -> 50 bytes .../1685ab48a811d09825953ee9318c099c726de558 | Bin 0 -> 85 bytes .../16d07445c1ebc5f1544e8ea614c3f099be941455 | Bin 0 -> 404 bytes .../1818179cc2bfa8f67e8027827aaac7a67ed9e56d | Bin 0 -> 8021 bytes .../1822fe7c7655fd5f0bd90f2162f1db0b01255f08 | Bin 0 -> 121 bytes .../182fea3d4b2afc1f630c6eb11e6be7f7e970cc9b | Bin 0 -> 137 bytes .../1832b62ffcea0a98492833159b9241311ff98bfd | 1 + .../18d09ec2aa72fa58e96f64536027b8887c9a308a | Bin 0 -> 329 bytes .../192854c98179b2430a96293eedd1c11dd91b20e6 | Bin 0 -> 121 bytes .../19784a30e4b25e34eb373516d35a1c7c5a09d3b9 | Bin 0 -> 619 bytes .../19afd9d15f7e89e1af7127371477ed3d88e744e0 | Bin 0 -> 889 bytes .../19b29027c5f4e1393b0a6e9cc178bb95bea36727 | Bin 0 -> 1829 bytes .../19f0d4bbf188120e34733c21ba29563325b95ad2 | Bin 0 -> 32 bytes .../1a0a76d9c96c48a892c77b534d81e8cc4737e47b | Bin 0 -> 145 bytes .../1a9d449d1ac38d3236f510e8b10c0917452e7099 | Bin 0 -> 342 bytes .../1adbcacb11c34436cc94c99fa9f78ffbf2810642 | Bin 0 -> 60 bytes .../1b14a49bb86f07e5274259dc736c5d8bf95b56bb | Bin 0 -> 477 bytes .../1b20c4e42e81aa788d7bd0cc2bf911a8ff9cc771 | Bin 0 -> 1213 bytes .../1b5a96882a84612a50c58e34982168b75c8cdb16 | Bin 0 -> 86 bytes .../1b9c2a98d0d823a8361efe5f0627fea42f426755 | Bin 0 -> 2127 bytes .../1bd8d70281a1c50d498006ea6ddbbbb82a711526 | Bin 0 -> 63 bytes .../1c1678ac54383915396a5eeaae03b5fbb166da3d | Bin 0 -> 9 bytes .../1c5336f2ffc84a12b813a2752e6adb49d6c46809 | Bin 0 -> 63 bytes .../1c54fd6f52ce199a044f80f46f6d775a4bc92ec5 | Bin 0 -> 1351 bytes .../1c67851b8be1f389e8b18a22c7fc98472fff6841 | Bin 0 -> 64 bytes .../1c7b04eff4e980284554b6217445e3fc510c377a | Bin 0 -> 3266 bytes .../1d3225ff98172d02fb1d35abe0677a9b8708d699 | Bin 0 -> 60 bytes .../1dfd06b05634844f669b14f6006345405628c6a9 | Bin 0 -> 270 bytes .../1e00141c786e3354bc2458de6a83e7b5da177a0d | Bin 0 -> 121 bytes .../1e35cdee648424b1f8bc5da9fad877a3825d49b2 | Bin 0 -> 352 bytes .../1e7c546bd6f54e519a2a454c1b6da8b5a2a43578 | 1 + .../1e98272e92f27ade0d64ebea62849ce266b2690d | Bin 0 -> 1439 bytes .../1ec56389f6f35bd6a3c6e7d22a45a2c547422655 | Bin 0 -> 32 bytes .../1ec82a2bee826b71aa9de7371b45d13a7823637e | Bin 0 -> 195 bytes .../1ef3764e0da97618616f08819a3054ab9d474722 | Bin 0 -> 1000000 bytes .../1f28e2b759350d9be018abd5c2e980227e3f0c25 | Bin 0 -> 2239 bytes .../1f7be54a97defc4e811af2057feef1c87cdb9cd6 | Bin 0 -> 464 bytes .../20b782d84bf5d86f7b04af3365ef1885810fca9a | Bin 0 -> 1473 bytes .../212087a8c834b25bd6dbb07373831633480fdeeb | Bin 0 -> 11 bytes .../212582e398800e58f141db5203153825b47a38e2 | Bin 0 -> 596 bytes .../21478d53f6c9a50efbd8b19497d9753e264581a1 | Bin 0 -> 540 bytes .../21823d24aed4e73dd712d2c6bf97830170cb37db | Bin 0 -> 157 bytes .../21b2b14a64400db52e4f339de20e8aae8857c97a | Bin 0 -> 4847 bytes .../221676281401a19857b9bfb77f51629ebb3c5408 | Bin 0 -> 93 bytes .../22180564c6eb5088809208ba41e433242e88e83a | Bin 0 -> 280 bytes .../22598eb437c6eaf27e0ab1b434ae254e6a9a751b | Bin 0 -> 1108 bytes .../22c82facccea22db865c30804dd4f6fe602c5685 | Bin 0 -> 242 bytes .../230b7a7f442fbf8d7fa922a5cd3bc7902e53b2f6 | Bin 0 -> 1715 bytes .../23af198ae3a60e70908f9987b8533757dae62e61 | Bin 0 -> 20 bytes .../23b206d6d5d6ffba6e9b790b2d37af17da901955 | Bin 0 -> 297 bytes .../23bfc78d12bd0a7e3308bb70d670a1ea87c51a34 | Bin 0 -> 174 bytes .../23d80ecfefac22aa1f0c70ac48eb55f9fe4974ec | Bin 0 -> 379 bytes .../23ec66d63481b3ed2e15a55ef5ad82e7e065c392 | Bin 0 -> 602 bytes .../240449037a30e8adc07ad469cf8155601dceb818 | Bin 0 -> 603 bytes .../240f62ce7d7c70eabcbfad1b11dcf5b46d0fc650 | Bin 0 -> 241 bytes .../244ee1c78f1b3261da2f22fd3eab96500f2416f4 | Bin 0 -> 532 bytes .../24600cc014a3a7e651df25db6e4423624206bf1a | Bin 0 -> 343 bytes .../24606c725a006d444ae169c73348bcf8df616c58 | Bin 0 -> 335 bytes .../246d772a8ec82777b85658da056f674274371c11 | Bin 0 -> 1112 bytes .../24784f6c6a710f88fa3364372240d57b677b44c2 | Bin 0 -> 121 bytes .../249eaab4e59cb3c0571bcd64de1b6aa61500c478 | Bin 0 -> 1163 bytes .../24f46a88d72db8ad31887946e4390669df23621d | Bin 0 -> 224 bytes .../24fe9de8c4f01e29af6d83f2db46be8c380a37b1 | Bin 0 -> 8490 bytes .../252e0675d40f23b4393ef204f9e3d039bf6ef612 | Bin 0 -> 2563 bytes .../254bd1e2bfcf5fae3575382c1bbd85f096289ed5 | Bin 0 -> 55 bytes .../25607add89a5b35dd169fde4eed81a6d24f26412 | Bin 0 -> 101 bytes .../257da1b4689ab8f74adf934026ba4899e0416889 | Bin 0 -> 1067 bytes .../26526c48ff547b182831f50956faad133d7039e0 | Bin 0 -> 396 bytes .../26b01c1b0a2237e4d62a87e699736f993821d194 | Bin 0 -> 345 bytes .../26b9ef77e473c494d36dc9eb6458ec65c5e5f5ff | Bin 0 -> 18 bytes .../274965a9f6c10b6528cdc2084cd3cff91e29fec3 | Bin 0 -> 209 bytes .../287454070f436d7c06ccec1104d69df33bd884f6 | Bin 0 -> 11 bytes .../28b28bb9a551e4cf3530bcb157cb40383c35c796 | Bin 0 -> 68 bytes .../29f6bdefb02807fa952f547569ea700bb8596b37 | Bin 0 -> 190 bytes .../2a319ffbf44b5126aa7c5c93d3e5a57abebe3494 | Bin 0 -> 16 bytes .../2aaefde8309eef086b5161d51ada787228133430 | Bin 0 -> 868 bytes .../2ac76439026337c306de07275c71d67cf300faf2 | Bin 0 -> 37 bytes .../2ad015543a9520179eb487b63de71d81504a62f0 | Bin 0 -> 228 bytes .../2b01031c5585d89b99306cb652803dd455adda0f | Bin 0 -> 265 bytes .../2b1dca83be3a39ca9e0835bb9c0585647586d4d2 | Bin 0 -> 19 bytes .../2ba5f43a22a8477ff113f996ea4f05a52570df4f | 1 + .../2baf8eb635560cf2ac2d2011b2acbad363f059cf | Bin 0 -> 794 bytes .../2bd522903334006fcb7725c8bd4ff92c464925fa | Bin 0 -> 7429 bytes .../2bd871db70b143e5b0394be179e06d143157de52 | Bin 0 -> 5248 bytes .../2c1563df17c5aa44aa2fd916e9b3fa3772946eb3 | Bin 0 -> 7487 bytes .../2c3c0204628866b709414cff2eb0043309eb8eb2 | Bin 0 -> 2513 bytes .../2cb59e8c3905208285aa8d892a0007023d6ec0e8 | Bin 0 -> 2091 bytes .../2cb78e732b81554cb0bc4ddec3aae73832837b20 | Bin 0 -> 107 bytes .../2cc4dc7d4ae0bd18adaa49af407f83d4443fba0f | Bin 0 -> 780 bytes .../2cfdc19ee006d11833d5880410007479527eaf86 | Bin 0 -> 1522 bytes .../2d0e59d83f41cf685af2850df3db44773e48d3e8 | Bin 0 -> 129 bytes .../2d46c8a27beb4f7911a5fc4b8ace061963c6a8eb | Bin 0 -> 253 bytes .../2e0d14034984c1f8b54f66bb4815a3bd59a2edba | Bin 0 -> 326 bytes .../2e35574c32c9e6b0b269b8a8aa798d6f3573c658 | Bin 0 -> 1169 bytes .../2e41cb28978c0fd561f5a462a49e41a9313c6b9d | Bin 0 -> 133 bytes .../2e48f38ae9fec0f686c2d7b88cea783389cc4b21 | Bin 0 -> 445 bytes .../2e626f85d642e4e47bf558a46ec8ca6e47984778 | Bin 0 -> 3491 bytes .../2e68d9dad6834a041aa3a95c7d9e1c4dd13bf9eb | Bin 0 -> 1292 bytes .../2ee6979646a646e058d83735403642f800eb44ce | Bin 0 -> 80 bytes .../2f2a845a1b22aea6f910196c264ec333f7632058 | Bin 0 -> 459 bytes .../2f320e0d4207b8e418cbdee6c31927b354504995 | Bin 0 -> 154 bytes .../2f74b2956e593fdad4eff7a0ac1585a196e541c4 | Bin 0 -> 168 bytes .../2f78166b4e1c51321f84ef3f8e98ff7ed6e51cdc | Bin 0 -> 695 bytes .../2f940f0a17e863ba16f7d8ca0f81465721a2ea98 | Bin 0 -> 82 bytes .../2fa983de02a341b71e2270d28beb803fbfc3768d | Bin 0 -> 230 bytes .../30e781e70b9ce20ae650ebd9a3cb403a1ce5c64c | Bin 0 -> 825 bytes .../32493f6cfbc7ae512fdf4a207648f650d8c0c3f7 | Bin 0 -> 660 bytes .../329e74204f8336023054a5bf5ba9e8a3cbf4398b | Bin 0 -> 5698 bytes .../32bee8318bdb68d6c17ad2eb330a5b945108bad7 | Bin 0 -> 7029 bytes .../32ca39e075025acfe1a0615cfc0862ada85db15f | Bin 0 -> 232 bytes .../32f09a617b3d1564518b8902acfd5c95d74144dc | Bin 0 -> 920 bytes .../3353eea809ab612b8244836e2038db092fa19d82 | Bin 0 -> 1643 bytes .../337e00252632fc86c3e52a8f1404b0955e3543b4 | Bin 0 -> 97 bytes .../33a1a44402c17b9c41988c1bbdf13baeaeb89e3e | Bin 0 -> 1333 bytes .../33ba2daff2c7d86af922bb1cc4fc57b8dd4f9ae7 | Bin 0 -> 208 bytes .../3434858eddbb826b9a24b8a5a9dc3e43c21a1982 | Bin 0 -> 13 bytes .../34a218c942636994625e51898b474f2313de53d4 | Bin 0 -> 4294 bytes .../34a8fdbcd6d119772c11740cb2f686ad3d6bf87d | Bin 0 -> 68 bytes .../34fb1882d4fcd869731240a8583faf6e3ba26bf1 | Bin 0 -> 4562 bytes .../358540a9e3d6cfce548f72891dbbe7f39b5ebc02 | Bin 0 -> 49161 bytes .../35d3ec193508c12bcb6283e8ea71633fdd6189a7 | Bin 0 -> 1290 bytes .../35dd5edd72bb29cc187d03baf045c80f352f962b | Bin 0 -> 13 bytes .../36357d704bf41956c02c2732c1e925a8c66f700b | Bin 0 -> 118 bytes .../36f334cca1d9474bd2a17c41db2c39245600e930 | Bin 0 -> 1229 bytes .../372dd1f7d582559fd253c6ea2653f75b88478ebe | Bin 0 -> 572 bytes .../3734e4d7655b7701a86a487cded122446f721e31 | Bin 0 -> 362 bytes .../3749a4ce40c1d852d92385593dabdd97ea09b641 | Bin 0 -> 234 bytes .../375cc91f13c741ebc0106b65888199685962da01 | Bin 0 -> 3724 bytes .../384a9b71bbe543c2dbc52ae796ab80048c9e9865 | Bin 0 -> 311 bytes .../38548513d0b48232dc7bdac858e8afb411db4571 | Bin 0 -> 63 bytes .../3899240e2175347fe6a9c8b9c582fae7c000ba8e | Bin 0 -> 2071 bytes .../39270da19f70a9138f27a83a4f918623dd4ef75b | Bin 0 -> 68 bytes .../393c95ac8b7f642093d65962bec40c7ea2f6d366 | Bin 0 -> 109 bytes .../3964cc2a7b8cad9de76dcc1360deff255ffff722 | Bin 0 -> 231 bytes .../39928a5c34f6d18c8bd76ebe27179b84516e7f4d | Bin 0 -> 355 bytes .../39958ad3b2bd28777f9a822313f374cce86c823c | Bin 0 -> 4379 bytes .../3a3804e10fb3a090cc686e6bccefeb17fe713ed5 | 1 + .../3a3a8a3ffc6b39f701d71fb2b45eff81f18db91c | Bin 0 -> 336 bytes .../3a78ded9a033bfa4b77b717a22977eed55d34a29 | Bin 0 -> 362 bytes .../3a877ef5097a86ce5aa29ffc6768ad300d39168f | Bin 0 -> 353 bytes .../3aeeb8a6012e201f61ee10125f3b9ce1ebfbb8ed | Bin 0 -> 195 bytes .../3af15dc1e98e2fd12454704598aa1eadb8f90b75 | Bin 0 -> 3081 bytes .../3af414a796cd7b92621b58f6f07e39327b170ffd | Bin 0 -> 640 bytes .../3b3bd8517c5de83dd87713ca354cddc72499a80f | Bin 0 -> 23 bytes .../3b7cde1fb6acb5378a7ed41f113674d2e69f9ed2 | Bin 0 -> 60 bytes .../3b7f28c5e599e74ffad936ae371cde8d47307ea4 | Bin 0 -> 5539 bytes .../3c28eda1a8b5988741b8907cac993e9abaeb3b20 | Bin 0 -> 1654 bytes .../3cb3edf90c65b26d999a13f4a789bb0cb0b77374 | Bin 0 -> 379 bytes .../3d0b231c41d6a6479b69ba21d6d695c651c443b0 | Bin 0 -> 62 bytes .../3db36a485300c3d95acf55290774378ee3a17586 | Bin 0 -> 675 bytes .../3e31faa0580a2ef1f1b9e34383425b90fa33ba7b | Bin 0 -> 63 bytes .../3e45a8a9df56054328831640d51feab761fbedeb | Bin 0 -> 151 bytes .../3e730b3363ca5897933812b8b7fa5da9afb2d6a8 | Bin 0 -> 398 bytes .../3f39c983a2d290b9731acf922a671a912d3602e8 | Bin 0 -> 536 bytes .../3f57a8e0b4e90bcd997800758fce91b93ada369e | Bin 0 -> 20 bytes .../3fb95f9e70b76eb20a4a6a607ed3eaa11699b032 | Bin 0 -> 2070 bytes .../403f325c3f9a02bf420158e068da4fc18c997c2c | Bin 0 -> 51 bytes .../406f3dec5db8c97baa4a2a211523cf45823603e7 | Bin 0 -> 3759 bytes .../4085bcd62d06afab91757918049f30f264feb115 | Bin 0 -> 533 bytes .../40df26cc26c4a4c5a56b165539a2f3a74d03fa84 | Bin 0 -> 475 bytes .../40fae47091a4d2574abd6d55ad35c71fbdced24a | 1 + .../417c4169699e4a7c443d888f748b522aa5bd54a5 | Bin 0 -> 164 bytes .../41baa56d67b48748a75a0758d42d6d2f9c83d0c5 | Bin 0 -> 67 bytes .../4265dd75d1b135e486f67cd092b9310779fc9162 | Bin 0 -> 70 bytes .../4274020f2204aabaa502db4b527df37a39a1b392 | Bin 0 -> 87 bytes .../42c6244981447511257aab11e8abc1157794d391 | Bin 0 -> 5735 bytes .../42ef39969e3bc956a2188fcd56d855aafe4e88ae | Bin 0 -> 1890 bytes .../42f77670bd23b61ff9bf008dfcca8b3afce8b258 | Bin 0 -> 12 bytes .../437847c1376733c56c6316ad1299c5fc37977ed0 | Bin 0 -> 429 bytes .../43ce536b6fefefede87fc11167cbd16dd5b2f1c3 | Bin 0 -> 744 bytes .../44a28800b93028d12db779515ed4c42f082f1d8e | Bin 0 -> 432 bytes .../44ab18ff2a4ddf368ae361264e1aa6b3fa567f55 | Bin 0 -> 132 bytes .../452838931fde3a888f4984f083194c59a25dc107 | Bin 0 -> 1059 bytes .../4543ba9dfb4a9a1d4b64e0aba69f64ec05f0b6e6 | Bin 0 -> 468 bytes .../45515d3d2bc5d9e2a9dc1e1cfbea7585cf507058 | Bin 0 -> 139 bytes .../46a7a3c554181f82dc5a25ebe271eb1dd6abdb3b | Bin 0 -> 8175 bytes .../476bcc32f33134b387d183fa48e3f46f91b76e6f | Bin 0 -> 69 bytes .../47a48391c14fa16a4475017f1f130895e63c43cf | Bin 0 -> 481 bytes .../47d68ac0739f97ed5fb6f27f1d5118c3d4b79eac | Bin 0 -> 8280 bytes .../480055c13aaa9c72cb465635d7a8be2fd09fef47 | Bin 0 -> 106 bytes .../48079637244aaec71bd7f9402cc04ffbd927053a | Bin 0 -> 231 bytes .../481f9ce41eb423c5d94781c4b1ac1a125e142d0e | Bin 0 -> 195 bytes .../48c1fc0833b74da896092e33679b7983c9d793a1 | Bin 0 -> 1998 bytes .../48d7aede6d4cf3ead5f78fcbef764d627054b6c4 | Bin 0 -> 557 bytes .../49a70fe3dcb18a9e3b9a098bf36285facc59afa0 | Bin 0 -> 2811 bytes .../49efd3285f29fbf81dee05112fad74909f04b0f4 | Bin 0 -> 8349 bytes .../4ab4752354f422ca96dd59bf826c9edda9d9ebd2 | Bin 0 -> 995 bytes .../4b640123f2c18fd8da934f1596c6a915c8c50f62 | Bin 0 -> 63 bytes .../4bc3f80cc01de064d480c884a3cfe213718f40a9 | Bin 0 -> 6885 bytes .../4bf837b2242cc30c678a99abe20d13d8929f3d50 | Bin 0 -> 4398 bytes .../4c2257042c6beec2f7b5dc28e1ffba2381235a87 | Bin 0 -> 279 bytes .../4c2a29aa07de518f7f9d71465b2777ad95ba0da8 | Bin 0 -> 63 bytes .../4c93336d5f56c6046349d5a7c53ec5715f67211e | Bin 0 -> 1445 bytes .../4ca5e171094f61a9449f85c2f43d717e47018d59 | Bin 0 -> 914 bytes .../4cbd4fed157e74c25413b580951c1f14462d7e54 | Bin 0 -> 682 bytes .../4d13f04956597bfe0c0a008bf23c7dd06c2af7c6 | Bin 0 -> 63 bytes .../4d496d4ddc605337a05e51a040c3c03221e34174 | Bin 0 -> 97 bytes .../4e0858409d5cca1ecb29b7f42ee07cb8c2d90daa | Bin 0 -> 6621 bytes .../4e1c2059c4e6dd66d7d11c421a2ee7f58b5d40ad | Bin 0 -> 121 bytes .../4e49025a5a352c267bc5848cbc8fbdb234591090 | Bin 0 -> 477 bytes .../4e9e5af7994b0442854012e8d85d7f29d4ec6391 | Bin 0 -> 301 bytes .../4eb9ae1bd22f4d72b4a9d9f2e4171507b6b9d0ef | Bin 0 -> 4562 bytes .../4eddd947c64a1339d65e7eaaf27902628cea2115 | Bin 0 -> 1076 bytes .../4ee3c7d8de12fed781d1651934ffea4e5ac45b32 | Bin 0 -> 1397 bytes .../4eea98e89f84a5d88f955c257830cc32e5e97586 | Bin 0 -> 836 bytes .../4fb838a137b566ce296a3d1e47803925a067d6b2 | Bin 0 -> 353 bytes .../4fd74e345de7e18b48624393593d7fea8db66957 | Bin 0 -> 4914 bytes .../50043e91cd2602eca66bd37512124adb59da0653 | Bin 0 -> 4238 bytes .../510e2d0a9b7f340a816f79f92cdd84bf07b63bc4 | Bin 0 -> 279 bytes .../51141f054854b41f28c48c55598d597b51c5c0d9 | Bin 0 -> 279 bytes .../514811d8e633771fa3d5912752879fb246542076 | Bin 0 -> 655 bytes .../5155037585e213b3ce6b4e8c7f0dcce5077f19db | Bin 0 -> 376 bytes .../5161aa47681c71fe7b8832c6a98401935b283104 | Bin 0 -> 194 bytes .../516606b424a8f38251258bfd50d106aa29488134 | Bin 0 -> 53 bytes .../51995940a19100373d819aa272b5659ec1c12acb | Bin 0 -> 2048 bytes .../51ca8af7ab2aa892edbe7bfebf643477346c7d8c | Bin 0 -> 148 bytes .../51e75a83a035c494b485b6d70ed506ecde18e57b | Bin 0 -> 603 bytes .../522e06d252bdbf54f44e0a2a8db86af5863f7b9c | Bin 0 -> 231 bytes .../527700927cd870de711244c3ea576fabe33d7627 | Bin 0 -> 349 bytes .../527f5c8abfe9f0955d303d414eb49b7b08c1e3ff | Bin 0 -> 6593 bytes .../52a2f52333311c38cf78b61ee0d05e65e42493a4 | Bin 0 -> 851 bytes .../52bf4d8bb051cdd01e62b64741a67f3acbd6adf8 | Bin 0 -> 1472 bytes .../531fabcc582628eb71c92f88538d2086ae41b171 | Bin 0 -> 4281 bytes .../5339a357a3c82999d14ba096d78c271ec5e370e1 | Bin 0 -> 1279 bytes .../53427dfab48d11339955398c5cb3ae78efd6b172 | Bin 0 -> 57 bytes .../5384c684b3007842634ad469d268b7342aaf2c88 | Bin 0 -> 1918 bytes .../53bce166f00a2ee4f1ce6a62c0032f9c4245c2bf | Bin 0 -> 17 bytes .../53f01de5318442cd21da60c9e53a4ba7d152683a | Bin 0 -> 332 bytes .../54083d34df1a7d74aa90177f78cbb80f2e7cef2d | Bin 0 -> 60 bytes .../541553a8aef592a4b26efa22ebadf406f0997d10 | Bin 0 -> 290 bytes .../5423580c0f5dc94be4c929792c49dce1ec0d882f | Bin 0 -> 5653 bytes .../54388a857e6100c4c7fc3eacbf544ca7506bee1d | Bin 0 -> 193 bytes .../5536e2c5228a34dbbb965b57e806d79f4ddd7364 | Bin 0 -> 5043 bytes .../55515bfefcf95eeab4328a51a39a105f6b46aa33 | Bin 0 -> 1069 bytes .../563d0fb809be0b302785cfed422167b980d82ed3 | Bin 0 -> 1327 bytes .../56866b660a25089fb8b079361eeea0fd401e9626 | Bin 0 -> 143 bytes .../56b769c798890e0a47e29005031bd7c0d97e6e63 | Bin 0 -> 82 bytes .../56ca3b1301715a5fdb19bff85a9fdbc8302905a8 | Bin 0 -> 1382 bytes .../56ef9020c00d82ce9ea172c6aacf1e6ed4bd5ba2 | Bin 0 -> 105 bytes .../57aac7c3f1c4c65637d2b70fa52aee5874349e33 | Bin 0 -> 2724 bytes .../57cceeda5c3ca0bfbe7d90dfcf118180f9ee391f | Bin 0 -> 63 bytes .../5807c164781f37e171ab79b83da64c8c66e641d0 | Bin 0 -> 668 bytes .../58432cf0caae64adc4d27dc5e0b5481bb4d98ab9 | Bin 0 -> 120 bytes .../58d309e34a704958a8401d8ef1eaa93664916e9d | Bin 0 -> 287 bytes .../5908c660c16b2729a9ccf9d5da570524e82c11f0 | Bin 0 -> 173 bytes .../592203690ac8e57c438fcf8e822548087fe08e09 | Bin 0 -> 350 bytes .../59cd067831ffa08b8525ebfce5feb7f3fb98cdd4 | Bin 0 -> 1438 bytes .../5a160fcf13cdac1029e2c717c88e7ac9f0bb17b9 | Bin 0 -> 63 bytes .../5a45a4855576922f5571ae93496790aa993b8f17 | Bin 0 -> 18 bytes .../5a5604dbf0b4a72f913a007575adfcf7165b8c5a | Bin 0 -> 70 bytes .../5a7d976bdd0cb1b6ebe4baf906b8836bc3fb4aaa | Bin 0 -> 246 bytes .../5af538ad9382661d80853fbd92385843f97fc532 | Bin 0 -> 1705 bytes .../5b542a8f34f66867b5b7b75ab6087ec020009f81 | Bin 0 -> 2794 bytes .../5c70177e2ccb274d10772221a50a68278ebf3bc0 | Bin 0 -> 481 bytes .../5cb8b994d45ebdd525b802fa327642c8a1acd93c | Bin 0 -> 9 bytes .../5cf79516051506eeed0cc89bf7c96a21608bab13 | Bin 0 -> 1387 bytes .../5d4864ec1ba88c17a2436d37bbde4f341b9e88ac | Bin 0 -> 417 bytes .../5d791bb7fd42bcc6488a5e9da3dbdb9812fa97ed | Bin 0 -> 150 bytes .../5dda96c12ff5fb178f44e1046aec132f04560c22 | Bin 0 -> 109 bytes .../5e66eba4e68f6ff558f8d009b51e4d49f661b60d | Bin 0 -> 63 bytes .../5ebd5a3820e1cd6f2473a7692ecead0fb3f32428 | Bin 0 -> 176 bytes .../5ec2e1302e48dde7ee1da1fff202f152789469c3 | Bin 0 -> 997 bytes .../5f2764f62293076269ed600e5ab30b7bffe626a8 | Bin 0 -> 2505 bytes .../5f2a4099c7b9dc7e2711db4dc3a31c3e799daae6 | Bin 0 -> 4226 bytes .../5f443b71896a0b167ce12f388fc10dfa75aa7992 | Bin 0 -> 609 bytes .../5f69a172496ce845a3bc3d856e44e68fc4c74a19 | Bin 0 -> 202 bytes .../5f81ce6fec07979e384534edf13c90f89e156f3e | Bin 0 -> 2123 bytes .../6013111736f9fae9434800bb2135e0efd432c902 | Bin 0 -> 70 bytes .../6061e7743839ebfa91b70289646029752389c81c | Bin 0 -> 246 bytes .../607c5e1145499577469f5aca2b785f900cde891d | Bin 0 -> 5036 bytes .../60a0a7663d9a2bc1a97b778bb352f5233a9eb7ab | Bin 0 -> 6023 bytes .../60ec83b783a9b5cba68e9fc14bf19f8c670e0717 | Bin 0 -> 170 bytes .../611816bbc9386324ef8cb5e246f356ce8950e7d2 | Bin 0 -> 964 bytes .../612736dfe8d2794e432b69399f2d6d851949a3b5 | Bin 0 -> 263 bytes .../61e534f44b0708ba03be075b56bb8ee90867f039 | Bin 0 -> 7428 bytes .../61f76c35976d867502cf79486c3638db09be2522 | Bin 0 -> 4808 bytes .../61f89ea3f6429a87d230f04919a3032e92c67535 | Bin 0 -> 238 bytes .../6224526e87ed25e86d66964df6df4f27509845d1 | Bin 0 -> 63 bytes .../62c41a44a8da8b40fc244c6f321cda3002482d96 | Bin 0 -> 4816 bytes .../62e11dc4f7732523de936049c25f9c9c5655062e | Bin 0 -> 152 bytes .../6342b834be59b40205d4b8f0952c564dc89c4b44 | Bin 0 -> 947 bytes .../634c702cc0e5bc9fe8d63c29334a31fe6be71f04 | Bin 0 -> 307 bytes .../63be138c2facb8ab17142b49e339049addb18a7d | Bin 0 -> 620 bytes .../63cd9726faa85b9a5708802e5e598d632a268c24 | Bin 0 -> 1084 bytes .../63ea78af86eefa727e6fc086ae13485dde78233e | Bin 0 -> 602 bytes .../6401af9276f5a4adb00d71fb83be04d32899d77f | Bin 0 -> 1721 bytes .../6466add7e149ad083704d0104163bc0219e318bb | Bin 0 -> 6132 bytes .../64a4cb2e76cf142bc6d8aa5aec3184d9f63904d7 | Bin 0 -> 272 bytes .../64dc0ba3afe22e6d36cb12ee00ba323f4a381ce7 | Bin 0 -> 161 bytes .../659c69bd98f07cf866a19c6e30b1794b63164051 | Bin 0 -> 1777 bytes .../659fc9809159699172e00648697fe4b0ab258b09 | Bin 0 -> 6 bytes .../65b011de1d2c21299689c6ea1e47fd7ec9404fd7 | Bin 0 -> 126 bytes .../65ef54afbfe7a83c0023f2d704ee6c3186384fe4 | Bin 0 -> 5916 bytes .../66024586b9cb4bf165285564d6d618efe7870378 | Bin 0 -> 605 bytes .../6606fdf2e5f1967897937087d71bc1378d26efdc | Bin 0 -> 518 bytes .../660a25587748e61445b94be400c2d830e712d998 | Bin 0 -> 355 bytes .../6612c49a4e7bb3e311543f106f30a79a7f500b3e | Bin 0 -> 18 bytes .../664e39110a1defed5da19dd96f9ecbea933c2b5b | Bin 0 -> 2117 bytes .../6668d0c5459e44010440760b5979c917e8d697f8 | Bin 0 -> 1218 bytes .../667626824ccea749827401e2dec8ef40af508e09 | Bin 0 -> 2100 bytes .../668fc9e2bd0e49e3c05941f6a240a36d3739f4fa | Bin 0 -> 21 bytes .../66ac16b20f247bb7843229ebb04750e3bc49b3ba | Bin 0 -> 167 bytes .../66b449e16f29cead255654edd6ffa26f2053561c | Bin 0 -> 430 bytes .../67529996e4437c04d2bdadaaac39b48d364cbd09 | Bin 0 -> 1709 bytes .../6754a5b62e17a3bcef62639e7979b054d60d3925 | Bin 0 -> 258 bytes .../67df5339bf5c9bbaa6d99566d7d53a4ec314c3a4 | Bin 0 -> 307 bytes .../68147fac0d05c7e04d5f5c2b6eb2b79064c599ba | Bin 0 -> 11 bytes .../6838ff641d158783011ef54e1e39de63cee55f02 | 1 + .../6871f2e983bfc79ed551e92b53ab163c5404a3c5 | Bin 0 -> 63 bytes .../68b06d8e7ae38ff85a8d43f0c07ff224672b00fa | Bin 0 -> 87 bytes .../68d6d25273eff05fa9c1cbecac1ecf7ec695e0a6 | Bin 0 -> 379 bytes .../697ad7ecfa9e837fcb6f366a6a3079b2ea560214 | Bin 0 -> 21 bytes .../69ecf8f3da3d5781d809021945f9df3dbd3ec53e | Bin 0 -> 1279 bytes .../69ee56013fe8c1b6e53b71a88245b897ecd3ab44 | Bin 0 -> 32 bytes .../6a176dcc0b65a64ee34a5d23010541140928c0c7 | Bin 0 -> 68 bytes .../6a61762c5f8787a4561eb7072aec2fbd0041f3d4 | Bin 0 -> 785 bytes .../6aed379296eea07403acdf5956919a8b21f7fb2d | Bin 0 -> 1803 bytes .../6b55506cee08c807cea4d8337b46affb5ca555ea | Bin 0 -> 327 bytes .../6b650ea9a161df3c81c15e3debfbe4052087c86a | Bin 0 -> 1997 bytes .../6b987067a20087c6e21e26909eba46d9eaf6df1f | Bin 0 -> 826 bytes .../6b9937e99dc801968e4aec74e40cc2682dd36c0b | Bin 0 -> 740 bytes .../6c09817ff507ac2c573e9bbe48e03e4cc29fb72d | Bin 0 -> 3648 bytes .../6c193a8b875726978d16aeafb6aee68a29be1350 | Bin 0 -> 193 bytes .../6c393feaa7fb2f431f3abb4dcbb2e917d163d4a2 | Bin 0 -> 126 bytes .../6c5f4a7525779702576086f7c12bcd288ea0ee64 | Bin 0 -> 32 bytes .../6cb75dcc5b5c51dbaa814de67985f47e17b7b4ec | Bin 0 -> 933 bytes .../6cc2ac24924cd67497e142a4bc388cbd4af7773f | Bin 0 -> 935 bytes .../6d1ce7a93e17a0adfbb348a839bf9eaea93d97ea | Bin 0 -> 750 bytes .../6d2f2f3598ea58a6dff859459383616ffd99a96b | Bin 0 -> 741 bytes .../6d93c6054cfe1d4c57b9979836f7a7066a8ee8ce | Bin 0 -> 7478 bytes .../6e31b2d36e0bcfd288f840b68d5c0c568c9ca237 | Bin 0 -> 11 bytes .../6e629a39784a48f70c2e75db522994cee4b4e5f2 | Bin 0 -> 2675 bytes .../6edc3fc037fe3fcef15d444d58a2cbb06d2d8f70 | Bin 0 -> 1981 bytes .../6f034a59a30c60cdaeecc190d9a541fbbeb47d10 | Bin 0 -> 101 bytes .../6f064cf8e66f438be64e07dd1484b484905f055f | Bin 0 -> 6721 bytes .../6f2cc02c07c72efa04959c3efa583340b49477cc | Bin 0 -> 1051 bytes .../6f2e4926e08cca795f43276a288e83310b0bf2f6 | Bin 0 -> 1969 bytes .../6f4bb7eac2df875524c34a81100fc8ab390ffd55 | Bin 0 -> 2600 bytes .../6f6515af082d5b0f72deabbad6a965480a7d0a1c | Bin 0 -> 341 bytes .../6fc708bc9f95c0c7bf333886c083ae12d0dadab4 | Bin 0 -> 3288 bytes .../700f79d5fe789d05ae2ead8e143740adab670e64 | Bin 0 -> 4078 bytes .../7033f911196207a856242816ebcd9e5f269fb2ea | Bin 0 -> 2559 bytes .../703bdfa4af1cc7d02a59ef233bebbd36c11fea52 | 1 + .../704512050a386167b84253d1983b0601bbee3e28 | Bin 0 -> 174 bytes .../70de9477c81e46baedcc5f5b67c4b9299aa0753d | Bin 0 -> 3554 bytes .../7131dc286721ca165d9ae78b9f9cab262bae13a2 | Bin 0 -> 1615 bytes .../714579fb33d0234a7a38ac0e1dbac570396357d4 | Bin 0 -> 3492 bytes .../71551571d8ecaaeab608878382cc4035bb8b9857 | Bin 0 -> 68 bytes .../719e760da6aebd46e68cea5ff3fc741f75c2ddea | Bin 0 -> 68 bytes .../71a0b36ec32c3dd3b5dd37bd45d276aab03766a6 | Bin 0 -> 398 bytes .../71aa9fdd55a3366c885736fc224de564493eeb8c | Bin 0 -> 5446 bytes .../71c60c88707fe8e79e2d6abecd357dcfa4486e62 | Bin 0 -> 3281 bytes .../72363ff00ab0c63f67a2b2919844ded331afede8 | Bin 0 -> 2287 bytes .../726ff4ab5f6996ef261b747860ce037d3daf528a | Bin 0 -> 98 bytes .../7357e4c4573ec2fb6a056b5e9481247752b50607 | Bin 0 -> 3284 bytes .../736d17d99cb924912e35d6e78fa46194bca4ebdb | Bin 0 -> 68 bytes .../73960c338e0d8edc42faf1b10fcf22053858f893 | Bin 0 -> 4901 bytes .../742cada456171872d01253227af402f1a235bed6 | Bin 0 -> 37 bytes .../74482f3d75c2800b797eccca88293cbd5563a9c8 | Bin 0 -> 7525 bytes .../74b9136243d6ac0b7d1aaf58f1cbca9112e4bb40 | Bin 0 -> 319 bytes .../751d4f70138591ca16d7adad3d353ce4505651b8 | Bin 0 -> 3156 bytes .../753eb22b74e4d2fa1ed65d4720d0cd20472a7461 | Bin 0 -> 1384 bytes .../7550419efc95c342058c336365e258d5341b1db0 | Bin 0 -> 1145 bytes .../75938d83c6d3b0b8e483d27a48b1af375553d586 | Bin 0 -> 2767 bytes .../75bd864b35ec851c683c0dc20a3a57b8a9a951a8 | Bin 0 -> 82 bytes .../761bd7890190a3b0597387cffa6f11312cb0c0bd | Bin 0 -> 338 bytes .../76429aad02c0a7736a42d7db6254b44702c6f428 | 1 + .../766f70d3f9ec41887fa8c30b1c61320e716557f5 | Bin 0 -> 1036 bytes .../76f5fbbe0340445a16ed71b8b3f1d2af6393d50b | Bin 0 -> 4 bytes .../775585a0e8f6120db62d943bf8e330fb5a826149 | Bin 0 -> 260 bytes .../779e5ddee1a8bb471b878b1e45aec30ad7cb0af2 | Bin 0 -> 555 bytes .../786220643133cc84d15f938cb85b3cd6d971a050 | Bin 0 -> 2709 bytes .../787c242987607ac96199be2deaaabcc80bf5e05e | Bin 0 -> 55 bytes .../788ec3a84fc02b759cf8b1a536d20ea2e0be293e | Bin 0 -> 4278 bytes .../789b2981e461f46de65685d0bcd5020f82147314 | Bin 0 -> 394 bytes .../789e39b58a14baf948b5f953b37988871b263dbb | Bin 0 -> 101 bytes .../789f322f53d128294f5466aaf314cb122b6da0de | Bin 0 -> 212 bytes .../78b9fa54c19fde5b4d3b0bb086c065bc632c6314 | Bin 0 -> 9 bytes .../7909f92d21a6b14bdd632cdfd17194c25c6a0d02 | Bin 0 -> 370 bytes .../790e5501aa4d46b6176ec8b0501abc83f3f1c40b | Bin 0 -> 175 bytes .../79a8dcf596928875fbc6ae5c04ba8671b4002a07 | Bin 0 -> 1158 bytes .../7a01be245d49b0c02a24902a569edd47aff4e1cf | Bin 0 -> 246 bytes .../7a17170bee4b4850f3daf8c8174533a3748faf55 | Bin 0 -> 1490 bytes .../7abdb113dfc433a9ca16ab10822d72f422d9f8af | Bin 0 -> 4488 bytes .../7ae6c76e6e3c9e3c6b647f1fa3d79637bbcb5f58 | Bin 0 -> 224 bytes .../7b29c2c1d8b0f1b6d8452afbecd24aa26f4725a0 | Bin 0 -> 157 bytes .../7b56ae3a1c357a487b309ff0b15caf8f812c240d | Bin 0 -> 5368 bytes .../7b8fa704dfd75b505a415bcf2f5d1728d1e0ed3e | Bin 0 -> 63 bytes .../7b9bc0a5b1d5142d10376596023fe489873ea167 | Bin 0 -> 6125 bytes .../7bf0dae303b7c4ab5023f7390ae82389c664e6bd | Bin 0 -> 178 bytes .../7c4e7161d7095c94a59f41390a371e0061182541 | Bin 0 -> 327 bytes .../7cabd4e91526a8fea914d12fda485a218d8c5703 | Bin 0 -> 50879 bytes .../7cbb29a3bb25d67c34ac2aee9d0441473205ffc8 | Bin 0 -> 379 bytes .../7cc4ac53fffaecbe651d891a7062bee8f1c4cf6d | 1 + .../7e565b2e614ac34b5ff8f1ffe656a2aae12c9c88 | Bin 0 -> 47 bytes .../7e7404784e58cca6991f4e527f451eb7ef07d2de | Bin 0 -> 67 bytes .../7ecf9ad58ac37a8710b294e5f85fe0a87a019fa0 | Bin 0 -> 882 bytes .../7ed2bbee7755d3f0f903ccbef85c6bae86af38e3 | Bin 0 -> 110 bytes .../7edaa17c58de36d6bbf3295233b580cefa250f0e | Bin 0 -> 991 bytes .../7ef0e8bedefed149cc94e1d78e5fb07a4e4c568c | Bin 0 -> 1208 bytes .../7f0e364f50109b422da8de254fb7a410b2eba079 | Bin 0 -> 1987 bytes .../7f23e82ef48038882a1a3b8724f354b57b595769 | Bin 0 -> 5307 bytes .../7f389ed13d4e838ce9a10242c3c3191b00431648 | Bin 0 -> 2773 bytes .../7f52776cba689cb2593384292823c51b730aee5c | Bin 0 -> 609 bytes .../7f659543d46c4c5de83a60bd97546e7421a76609 | Bin 0 -> 3799 bytes .../7fcc9c06fdc6eccc321e80fbcfd48ab3fd1cd8e5 | Bin 0 -> 206 bytes .../8079acf973df10e32f3153b8a11a2a0eee74e146 | Bin 0 -> 4095 bytes .../80a2fdd7dd39961376bc78b90cf857443d818de6 | Bin 0 -> 9 bytes .../80ac46af68d9e04a679121fa02b53f0b599c8d81 | Bin 0 -> 800 bytes .../80ba78216d49d430072eb70e0b29087447c9770e | Bin 0 -> 3093 bytes .../80be74734995a6dd6b30b174f6a58a7c06ac8078 | Bin 0 -> 1171 bytes .../815a6ed73327ad6b363985e7c1c6ed218457ca3d | Bin 0 -> 1045 bytes .../81790130f4275877202a62a59a35520edf16ced5 | Bin 0 -> 202 bytes .../818e187c83baced1442bc9f8c60f34ad6f2bb723 | Bin 0 -> 1803 bytes .../834d6fac7f728680ffc0a5701cc4ce868ffd8e9d | Bin 0 -> 2781 bytes .../8365a0addced757555b3c352ee58902f7763d9a4 | Bin 0 -> 173 bytes .../8367f3d64cfdc7ab9958e24c5b65f7742ccdda3e | Bin 0 -> 1140 bytes .../8372c606df8e8b282821b272adc1c70808b3afc0 | Bin 0 -> 110 bytes .../83ad6b42eec7bea87d4a13f8de36d4c953e8119b | Bin 0 -> 215 bytes .../83b40996e938c1636660f51333b2593e99d7928b | Bin 0 -> 1129 bytes .../83e6d44d749055fbc915e846de897dbf13bb1129 | Bin 0 -> 5790 bytes .../841b7e9566382b53cab0d2fc3e69f21f085057db | Bin 0 -> 3107 bytes .../8436ab3fabbbf9fb281ad314e00fd4df49270ee0 | Bin 0 -> 6582 bytes .../84689cd17aa915cbeab2a16aee9aea3ac470f9ad | 1 + .../8481f949a12e95639341bce336fcf15b1f2ba2a2 | Bin 0 -> 70 bytes .../84c04aee72a541463e1ffaecfb4dec007f632656 | 1 + .../84c3fc13fb89880a596c25478b2bccdfd2211023 | Bin 0 -> 275 bytes .../84fe4fdd7a4e0480368a6993b6cb398c78dbb5e4 | Bin 0 -> 376 bytes .../863067c74c009dff1f2e8eaeac97f76037ff5155 | Bin 0 -> 68 bytes .../8670807075682e5374a347701bcdf4013ce2ad18 | Bin 0 -> 1394 bytes .../8687bf68a0bf9f611fa096c391ba4966e3f259fd | Bin 0 -> 1706 bytes .../86d9bd9eafbce3f81f53e3b504af98cff322c023 | Bin 0 -> 356 bytes .../86e499a642e448d5d2bacbecbf8b2d4c1cb4ce34 | Bin 0 -> 185 bytes .../87293b0401c38104a15494aa76b7046951bb5033 | Bin 0 -> 1096 bytes .../8749f3adf91265a0e8654101fd647b71fbe46a5b | Bin 0 -> 8317 bytes .../87f0db139e967becb22222fb42ab1c4760e6d6fd | Bin 0 -> 2724 bytes .../880ad25f2e884325497f0bdc6a8ed47f61d1d1ba | Bin 0 -> 766 bytes .../8863241941f7db15fb07de5355ff3440df0e8e9f | Bin 0 -> 1592 bytes .../88782d5a7ffc935899199bba58bed9728589ac89 | Bin 0 -> 6066 bytes .../889d208cb7859c4e0a1a58cf22c0674c1b0b0ca4 | Bin 0 -> 218 bytes .../88aae0a35ba1dc8bcdc24d22acca3eac59dcd599 | Bin 0 -> 327 bytes .../88cfb6559c489ddbc24db1aa57c2e7721f9b6dda | Bin 0 -> 5027 bytes .../89135d179990283d1cf7e940bf2cf0fb223f5e76 | Bin 0 -> 4529 bytes .../896799fa7f57d2513c4cb9e219ae81da04d83479 | Bin 0 -> 209 bytes .../89908f7835a2cc31c88c95e99e8edd06b005bc24 | Bin 0 -> 1095 bytes .../89c4035676cb6f506cdf8e64241a8f0ec16eb31f | Bin 0 -> 714 bytes .../8a124e49a08112b3e65174f891e93a6dba4a4776 | Bin 0 -> 176 bytes .../8a2b1cbcbaae8e7a638f88e2f1eb8bcca8dbdb93 | Bin 0 -> 2242 bytes .../8a5f977fd21ed1bf0981f8ec88cdd1042acb3e3f | Bin 0 -> 3785 bytes .../8aa71e22345eb77cca0621720f777592fe4e2345 | Bin 0 -> 205 bytes .../8ac5418c622f9b75a0c8ee8e846c9521981dbf1d | Bin 0 -> 115 bytes .../8b004b642239b9e9b59f7f261a54fc78c5b11169 | Bin 0 -> 3463 bytes .../8b1ed4f6fc7dc9bd93104e381f9d2cdc7b6e504b | Bin 0 -> 5172 bytes .../8bd643d004f42966e5257d0453e7ddfebc17b6de | Bin 0 -> 1496 bytes .../8c100f65dee1d9a898b0bc3c3a75d467f32f6f6f | Bin 0 -> 9 bytes .../8c87ccadca345816ae0448167f83e85cca97ea8f | Bin 0 -> 1426 bytes .../8c9b691e9c544a4b825da3a41457dde8009084ba | Bin 0 -> 1281 bytes .../8d493d582a5e231deddb6cd775359894c17c55b3 | Bin 0 -> 1866 bytes .../8d9c4ef7c680462eaee7942760bc8de88c49ab0e | Bin 0 -> 601 bytes .../8e246ce3406df654fcebdab0b531d53d74f537fb | Bin 0 -> 1379 bytes .../8e62ea46bafcd841005cac06974d7ee5f593c764 | Bin 0 -> 70 bytes .../8e7c65dce95e3b15d163d7f698633c7f7bc5a33f | Bin 0 -> 684 bytes .../8ea611996e04ffa27a68555e624951eeba4ce1b4 | Bin 0 -> 2363 bytes .../8ed4da7ed83cd76913e10b86ca9d3e790f584562 | Bin 0 -> 109 bytes .../8f701c9f2f45bdd96b1102f7ae9e04ec463ce841 | Bin 0 -> 281 bytes .../904dc3b05d91ed2a5a715c4e13bae17ffd32320c | Bin 0 -> 73 bytes .../9086fc28c00fbf8cea9dd2a5a97dc5a6b10b7ac9 | Bin 0 -> 11 bytes .../9101fd67f22891f36cbab56d91d2199bdb84a371 | Bin 0 -> 8128 bytes .../912d7a90a787c299010b025b7b1c4c5ce2aa878a | Bin 0 -> 2712 bytes .../9147b9b5902aedf8b9d17493f9c37355dc8345df | Bin 0 -> 355 bytes .../915822630ac65d2281976ecc889ab873668c990e | Bin 0 -> 393 bytes .../91ae110c0e2533de2d985c207b087dc573938981 | Bin 0 -> 63 bytes .../921640f270eae1388e28d08ac802cf94a613a80d | Bin 0 -> 277 bytes .../921f9ae2144d73dee528788dadcf51b2259007a2 | Bin 0 -> 352 bytes .../92af4394e18b81fc1de16927ed5006027dd99553 | Bin 0 -> 660 bytes .../92b3be17e474ac376c811691a2a0520c0d330430 | Bin 0 -> 223 bytes .../92c94c932e8e4eb52d3a3b1c4ad63cc24f7f4244 | Bin 0 -> 360 bytes .../92d8eb116510152303bbaeb0df662cd774634659 | Bin 0 -> 3187 bytes .../93624483aa540ab3d50e8c1e79f2d26723f7900b | Bin 0 -> 60 bytes .../937b106525cae82df82d78866d71671669786506 | Bin 0 -> 2123 bytes .../93d58bfd3259deeeca8aa8e6f9e664c7397ab6ba | Bin 0 -> 68 bytes .../943e1f155bd9354cf514b97b391a617400073e6b | Bin 0 -> 4267 bytes .../94738b557b8b5777f9aa73bcc4d64a9a9c317d3f | Bin 0 -> 594 bytes .../94ac9b7e6eb6800eefb221447653bd0720426e3f | Bin 0 -> 1052 bytes .../94c7692806068e9320875ca5efb44ee4222724b1 | Bin 0 -> 2547 bytes .../94ce5203be797f86fa5a620d717cfb54ac2549d7 | Bin 0 -> 2513 bytes .../94f0c42134671e6b142e5e54f1671d0f428c4477 | Bin 0 -> 2899 bytes .../9650b3740fab2797637568dc3ed4c8a31fa2a74e | Bin 0 -> 6294 bytes .../96cf0e544b47038550673fe8fa4d36f94ab86e90 | Bin 0 -> 3333 bytes .../96cfcc322b9049c36852ec01ee4cb1635ae316e4 | Bin 0 -> 92 bytes .../971496c1e18bbd3a6e66919f5c1bff7a12295742 | Bin 0 -> 85 bytes .../97971803679e654dcb1b864006d67eaf03ffad69 | Bin 0 -> 757 bytes .../97e2aaa2b765b43f5d8277d2a64f4e88cb29c21f | Bin 0 -> 308 bytes .../983b75bb776c5ccb3dd1473b7d2dc894a5b75838 | Bin 0 -> 4562 bytes .../98e5142dc104194c2391d5eb92bc503d24d6b7bf | Bin 0 -> 1597 bytes .../9949cf543da5ede3d1dbfa658640799c78aa345b | Bin 0 -> 584 bytes .../99a74476192c3131d5ee81ef7a163f85539ed262 | Bin 0 -> 987 bytes .../9a077688f4c20c0b96d75df00e2e268d498ad16c | Bin 0 -> 1616 bytes .../9a6fdb1d8102f95ac4a4e503b07747816c12e790 | Bin 0 -> 55 bytes .../9ac7503b2426ac5fca38f25e05c30552db71b05c | Bin 0 -> 2566 bytes .../9afafbe05dbcb3685f99206fb643ef5e8824aeed | Bin 0 -> 167 bytes .../9b2e01b16cf84e87d2ba61a6f1cca0320032a270 | Bin 0 -> 497 bytes .../9b779f09512fac93e8b5a5137824e75bd8788d64 | Bin 0 -> 9 bytes .../9bdabb9ea7284db105ebab288b83aa97816a4658 | Bin 0 -> 64 bytes .../9be0b97cedaf607b593b58d2fe3e30af105184ae | Bin 0 -> 3002 bytes .../9c5540e006d23fd6b8a44f85e93b2a2831fe6772 | Bin 0 -> 327 bytes .../9cf35df2aaa5adf98f5e07339bee71be93e38d0b | Bin 0 -> 3775 bytes .../9d0696dcc1d01e9471f916aebe21318b247de21c | Bin 0 -> 68 bytes .../9d1d33ce6ba11a08e8991db4596c37730d20f7e1 | Bin 0 -> 246 bytes .../9dfdf70ba05d7988596fe7fe00f497c893614b79 | Bin 0 -> 7365 bytes .../9e0d6ff690fb405c3f0fec4e6e60b5bbafd1da49 | Bin 0 -> 221 bytes .../9e12318cab75161622bfe3395b71d48fcd47acf0 | Bin 0 -> 845 bytes .../9e1f6b0ff97a0d5b32bc56b74148bdc443f70e84 | Bin 0 -> 1777 bytes .../9e2c09dbe2825597f4ebca761244d4c55763a209 | Bin 0 -> 51 bytes .../9e321cd921a48d86e35373a4fdef6ba2668a8be9 | Bin 0 -> 547 bytes .../9e45634946af305fd5774bbd0479405b5f733526 | Bin 0 -> 228 bytes .../9e7ec483ddcbf31ab9a898187cb3d013ec90bc91 | Bin 0 -> 303 bytes .../9ea08d47e687f6bfccd77330fd79139cb2ea3f61 | Bin 0 -> 157 bytes .../9ec9d69c5b01b8eb87b01cf9c68c7fc80c932335 | Bin 0 -> 4123 bytes .../9f1ec005ca6bf41acd4c351a4371e6bb8ca9a52c | Bin 0 -> 3029 bytes .../9f28ab087a34deaaccd2ba178b88872622d9d781 | Bin 0 -> 345 bytes .../9f521ea8296ed927d2825e05e6ae9508ed6942f5 | Bin 0 -> 2724 bytes .../9f5bd4e59218fa4e377cd013a225650cf59fe9db | Bin 0 -> 183 bytes .../9fd9d3f5e322653027a997f71729d9d4dc081fda | Bin 0 -> 362 bytes .../9fea76e302ae07f16c727b2d626643d6c040dbd4 | Bin 0 -> 347 bytes .../a04e387fd7e3bc51327a1e9c2200def718cae384 | Bin 0 -> 105 bytes .../a0a4594f61cc6adc585c1a404f9a8def8ea01d90 | Bin 0 -> 3093 bytes .../a0d688f6be53695c4d7799dec5d0d35dbc840fb4 | Bin 0 -> 81 bytes .../a127f793b1ee0bc1a024a5eba71b31f1b88198ee | Bin 0 -> 399 bytes .../a15b09e59620045ff46c643f53480dba906d130e | Bin 0 -> 93 bytes .../a21fc10bea6f61e354184c71c5b63b29fa201b54 | 1 + .../a23f648f5ab98cd2acce27d67928272b6ba294b5 | Bin 0 -> 258 bytes .../a24ebe2095fb9184b81af51d8be2e7807aeb3e12 | Bin 0 -> 273 bytes .../a2aef7545e4046a224b6589959ec33eb53c06bbd | Bin 0 -> 230 bytes .../a2e3b0001ce8fab496326963a4562d75b18c2c9d | Bin 0 -> 534 bytes .../a33743b9bde125344a69cd71ed2bea2d30534982 | Bin 0 -> 2999 bytes .../a3495121f8d4c5a921d6a8b28fb42a54d4568007 | Bin 0 -> 279 bytes .../a35895e9b5107a610d29488493109688b0db5bd0 | Bin 0 -> 110 bytes .../a39346a64e8ecfa7adac96ed351a4174c087b11a | Bin 0 -> 609 bytes .../a3b277f8c76bddc06f6c635b79d922b04f2d0d4b | Bin 0 -> 2814 bytes .../a3c14bc0deef84f2557f7e99453543da2b9cba9e | Bin 0 -> 675 bytes .../a45ad4662590d98be9fc3eba4ebe1b56e34161cb | Bin 0 -> 154 bytes .../a4aef9abb74e86e442a232cced96f5bb91291531 | Bin 0 -> 304 bytes .../a4cf7aa22c87b67194f4501114e21a0bed6d94f7 | Bin 0 -> 854 bytes .../a4d6fb1f5e7075027ede98a319cb1204cae14d26 | Bin 0 -> 163 bytes .../a50eb7dd1fcec240642a6bb8e395bf7e03beb4b4 | Bin 0 -> 59 bytes .../a5238a10e59bef529cb51b104535b8175b664a87 | Bin 0 -> 255 bytes .../a53c0407d90f4842b9edcf8dc96c38fd33167a1b | Bin 0 -> 133 bytes .../a5a93cadccf4568e0a5119a03ee9d97b9d24228e | Bin 0 -> 146 bytes .../a5ac27dac40942d912cc575363cf138aeeaed8c9 | Bin 0 -> 279 bytes .../a5e8b3d1c3f86b9f489b265e551a72540e2bc0ca | Bin 0 -> 232 bytes .../a5fd9020581d53ecfb41780d7ea5f6756759a9e1 | Bin 0 -> 63 bytes .../a6296912aa283323072f564bcc3d32f1c6a33f48 | Bin 0 -> 427 bytes .../a685d0d573baf2563a86ae50833dedeec2c46310 | Bin 0 -> 2219 bytes .../a6b374f45c2352af34325a22f5b532e8d4a759f7 | Bin 0 -> 269 bytes .../a6bee84dd90c1d248115d452946573982699b96c | Bin 0 -> 67 bytes .../a7573884207d606bddf5233a980911034d1721a2 | Bin 0 -> 2377 bytes .../a7851f27c8712379dee3d2c21e6cc34ece0ae4be | Bin 0 -> 17 bytes .../a8099ec00376bd19ab89d53d7f95ea873364bb2c | Bin 0 -> 9109 bytes .../a81ab2c807af55d922be959ebb561659c0406d30 | Bin 0 -> 61 bytes .../a85e25a16187f4051786a334934ccf10471ac82e | Bin 0 -> 920 bytes .../a870811d81480a7c66e22205dc766ed60ccfbcd8 | Bin 0 -> 542 bytes .../a897c77b4aae5eaf89957f783b9ea11149324669 | Bin 0 -> 2616 bytes .../a8a43cc300edca57fa7a2b0eb498f95b124cc960 | Bin 0 -> 164 bytes .../a8b23404949efd185a20ca1886c5328c39e8906b | Bin 0 -> 796 bytes .../a90c62d7cddb067dee145894099cc0b0170298bd | Bin 0 -> 168 bytes .../a93c218d78d88ffb79d79ab370caa98552e39a1f | Bin 0 -> 104 bytes .../a940cb4deee82fbd2e4a09dcf67746ffd7d9054d | Bin 0 -> 648 bytes .../a97e208722c4bf9a84213219007111fc69381596 | Bin 0 -> 1698 bytes .../a9b12d34c8d88b2d2fdc6586396b1b8d2917cb4a | Bin 0 -> 153 bytes .../a9fe4a2a73320e964add13a68538e02146690e45 | Bin 0 -> 166 bytes .../aa1fd96fb3d1309477fb1adc2365be1b67101d8f | Bin 0 -> 883 bytes .../aaa2215580c0d0ae0a9995fea1d5861298a223a6 | Bin 0 -> 9 bytes .../aafdf3ae0af424e45092c922219864480f0ac6ae | Bin 0 -> 352 bytes .../ab02322b9414f779128e4dc6287be36c1e48a1a6 | Bin 0 -> 68 bytes .../ab1973c78392ff1bb3fab840c19192da74f45f92 | Bin 0 -> 4257 bytes .../ab4fdf981d106d52eee93e82d98066e39c364b84 | Bin 0 -> 689 bytes .../ab84a9548037f546371a560ac569fda6765fec5f | Bin 0 -> 203 bytes .../abc69e4a7d64d28c00b4a79613f4112fe6559743 | Bin 0 -> 1098 bytes .../ac11939164446e92a0f80818c6f95f277bd08f96 | Bin 0 -> 554 bytes .../ac45bccf56dd2a6c1c69f71750be86585f7d4eb2 | Bin 0 -> 1212 bytes .../ac93b282c297034b9bd739ec5948f61b722f79e6 | Bin 0 -> 3180 bytes .../accecd7c005645ff9fc4b02bf0c7b1a633b23d9d | Bin 0 -> 63 bytes .../accf0d0df204d734422a615015de8cc4a8dc71d3 | Bin 0 -> 516 bytes .../ace26d88745489c86568eee221c0743f878c63d8 | Bin 0 -> 1492 bytes .../ad653c982268019f2eb6a22073ee5ac8ad1ba205 | Bin 0 -> 178 bytes .../ada7522c0b95d95312348d49898effa9a7ed5b9d | Bin 0 -> 604 bytes .../ade03e188cdbf3a92259bb7856adcd6a79c49252 | 1 + .../ae683d2185517187a198342348afb42efddbf749 | Bin 0 -> 297 bytes .../ae842297cb82c6417b4748820bd350817e5ab4da | Bin 0 -> 298 bytes .../aecf73e1067933d97dd3a27d141b2dc3b6c0cfe1 | Bin 0 -> 591 bytes .../af1bcd6ec6daf0ae07ac1ed5d6ed4b5985281b2c | Bin 0 -> 94 bytes .../af4d7f957058921adaac529a92e47a8caed3e2c7 | Bin 0 -> 105 bytes .../af61c05c6022b1c5a7b809e921d9e791df39aaa7 | Bin 0 -> 2443 bytes .../af657af64146f9cb4452866e2bb12c76567e7f22 | Bin 0 -> 92 bytes .../af79772cb94b103e78ed436b6bb3126d7be11847 | Bin 0 -> 3162 bytes .../af9600008efc9adaf13d27c0d1fef75971eb9619 | Bin 0 -> 666 bytes .../afc201f75d8b853c2086a06b4f610a9b587823ec | Bin 0 -> 3033 bytes .../b06ec2dd2a7a567203517d637e7f21bf736337ac | Bin 0 -> 1891 bytes .../b09d887241d70e5cb14ad3d58f2303c9728da194 | Bin 0 -> 596 bytes .../b0c3b384c46c7447ba8af92e36e5aea97a0ed571 | Bin 0 -> 2560 bytes .../b0f15745ad3f5cfa699df5bbe372fb739674589a | Bin 0 -> 8207 bytes .../b1107697971223a8010b4b8ac3587518f7987b26 | Bin 0 -> 2979 bytes .../b116e857d387b9a8ae48ce69f0dbc491b6b971db | Bin 0 -> 176 bytes .../b147f6fe7330d75f2453516e43583022d11f378e | Bin 0 -> 329 bytes .../b159c337facfc5deb9e9a7d8d9161beaca712bf3 | Bin 0 -> 1050 bytes .../b183bc910e3fdcd7c65602cb6f8c96f959e84644 | Bin 0 -> 1321 bytes .../b184b08df453af1889a9eff486b876bc18a03725 | Bin 0 -> 85 bytes .../b1a9a464e082bf06cbbc4319477a28048239c424 | Bin 0 -> 743 bytes .../b1b49ecc53c2072ee3f405aec7d9c05d68294dc3 | Bin 0 -> 1763 bytes .../b1c42341b54a557617921bc262c78dd6cc3ea6d7 | Bin 0 -> 797 bytes .../b26b7ebd1c472648696afa625d5763fc45f8d87d | Bin 0 -> 651 bytes .../b31ae43e27fd6412b46abb2d529b435e9bacbd12 | Bin 0 -> 661 bytes .../b339fe6b3e902a350c9428ebf508057bd51c5f96 | Bin 0 -> 1212 bytes .../b35aa1c43c614310c294a2924ba3a268ac220407 | Bin 0 -> 60 bytes .../b3c72346f3c6d6bed7aaaaf972138b34957fe5a4 | Bin 0 -> 167 bytes .../b3d7fc576345d6f63e0df559b50444e45f864144 | Bin 0 -> 654 bytes .../b41ad4d966b35f01d7b3e298945079411a87a787 | Bin 0 -> 2144 bytes .../b424c9cc455d6ed1f0b0c13b2bc50ef21f10211d | Bin 0 -> 3029 bytes .../b4e8c8315365343c4fb822f991723be0a249cbd3 | Bin 0 -> 8927 bytes .../b513fc3fe53ee2b2ddc8f5213dd683cb1d851c4e | Bin 0 -> 530 bytes .../b52d6ee2542f7e8233e2251609a19f2cf262f5f3 | Bin 0 -> 195 bytes .../b5389dc60fadc9bf5835bfecf0b729c52d271783 | Bin 0 -> 468 bytes .../b59def76d9609412d857ac3789e880afdcd83b34 | Bin 0 -> 1950 bytes .../b5b5c0f223269e8946dfcbba93c7f72b7b2108de | Bin 0 -> 334 bytes .../b5be266b68ab7c8590213113069bff6f6f992354 | Bin 0 -> 280 bytes .../b5d6d50ddf07b76f1b359436b18812ec42c0bc5f | Bin 0 -> 6404 bytes .../b5e4043090ceb00fa628a13bcff61e3be7214406 | Bin 0 -> 1593 bytes .../b5f8b61ae3b940e7b991fc19c508ada6c90a2295 | Bin 0 -> 607 bytes .../b65c569f5316aa39943caceed6f0514ef6bc622c | Bin 0 -> 89 bytes .../b66513924319d24fb36d90ae941d3116933613fb | Bin 0 -> 8613 bytes .../b719ebc782111cdcc7118e31f0c7bd378b0d32a2 | Bin 0 -> 1182 bytes .../b72f7897331a1fcb386da92ac2ba3062d7143faa | Bin 0 -> 2351 bytes .../b85312a749e0e4d09f14de83d02aeb808eac9b2d | Bin 0 -> 63 bytes .../b85f938876c1c683e8ef3852af5a01677fb243be | Bin 0 -> 2891 bytes .../b87f7967e31f73db2d15e8b021bec770f30048bf | Bin 0 -> 261 bytes .../b8d8d3933bf4443770be401479efd3422afd91a1 | Bin 0 -> 15134 bytes .../b96462203a021cbd7a0592c7beadfdcf8fef1af9 | Bin 0 -> 1143 bytes .../b994e1e07a33c341527118aeaf6d0e648b665dec | Bin 0 -> 61 bytes .../b9a494f511c7c440eef588b248a45b9c3bf9f136 | Bin 0 -> 5123 bytes .../b9afb5cb2f7fb37ca919a9de132410890cbea270 | Bin 0 -> 1264 bytes .../b9cb120be229d7688a6f39e4506f38f30582429e | Bin 0 -> 445 bytes .../b9d52c55b406b9e4953eaf5fee42b151d43dd8aa | Bin 0 -> 1658 bytes .../b9deedf2b06c5822eca664592ccb358d26628d95 | Bin 0 -> 868 bytes .../b9e288823925a8837ec10bb64e72ab128a581b4f | Bin 0 -> 241 bytes .../ba1ea19aeefb8ddf0800aeacb4c66c33dae06912 | Bin 0 -> 82 bytes .../ba50cb4a08572f9d93788345dd114549d0809fa0 | Bin 0 -> 63 bytes .../ba68813e66ea477adfb7436d4c9b09def46e9a2a | Bin 0 -> 1339 bytes .../baa4711a3725e5c23d20fce08593ae2501c3fd19 | Bin 0 -> 9 bytes .../bacd40a35bd364959f07178b90d1e430eff59b6e | Bin 0 -> 195 bytes .../bad331423fbafa9228d30994850eaba104501f4f | Bin 0 -> 147 bytes .../bb8b82323eebeb6c316881de1d2e77258b54b67c | Bin 0 -> 359 bytes .../bbe150f1cb4b9c948eded23964c12874fe06447c | Bin 0 -> 628 bytes .../bc2ceb8478b2a2e04f35ff21f1fea7b7f92a48c2 | Bin 0 -> 133 bytes .../bc77ffbade11d920ac7ccc7db59b9baa91e68e3d | Bin 0 -> 1278 bytes .../bc811cce3668ae0f3090ebc12059d94175e25867 | Bin 0 -> 68 bytes .../bca62b0196f62700a082977307f761cd7ac505af | Bin 0 -> 886 bytes .../bcba95a9a87628d13c1fcda9e0c55c460980aa51 | Bin 0 -> 9 bytes .../bce2e7bb97fe9a046dc3c70d1d74ea39630b2b77 | Bin 0 -> 158 bytes .../bd6d95cb5c45daf153c6bfcbc92af06a4c2b031b | Bin 0 -> 3002 bytes .../bd73ee62a0e23720982cb21be0965b8d767800c6 | Bin 0 -> 1615 bytes .../bdac1b26cf4555a0ba2bbcb4d9ddc89c91aeeeae | Bin 0 -> 3092 bytes .../bdf4fafa539a977b84e47c42b623b65de67d1b0b | Bin 0 -> 63 bytes .../be1c92bdaa371ad93c84673f14f027c59b43532d | Bin 0 -> 617 bytes .../be1edbf2205d33ae161c1ba11507e6f9c5dc5921 | Bin 0 -> 6627 bytes .../be215a9f742c066bb881f74c72b82bc52a47e2d7 | Bin 0 -> 234 bytes .../be3646e4377de1f3afb3b3d6aa761cb2107eb879 | Bin 0 -> 398 bytes .../be513b4de7ca220c134c57948b2059280a660da8 | Bin 0 -> 3321 bytes .../beafc07e0f188508098415c8d6ef98ae4e755e0a | Bin 0 -> 8341 bytes .../bebd2d5b8ca8f9ce1f9c793034830002331f34e2 | Bin 0 -> 936 bytes .../bee5a9bbc09ed5784e3225eca1cbc4762317ebc8 | Bin 0 -> 5164 bytes .../befcb952c4dad60f033f5d589f136b4eeee77970 | Bin 0 -> 68 bytes .../bf4599708f427e662227d17cc2b7d2f8b9b0d8bf | Bin 0 -> 339 bytes .../bf91f47d31923b5e9b55fed39e45f06235e29dad | Bin 0 -> 68 bytes .../bff7e726ce873c5010cb182f43f1f71eda7ca4c3 | Bin 0 -> 88 bytes .../bff96ff9c429bd33e7938dc78bee5dbb57e1c04e | Bin 0 -> 63 bytes .../c03b931dda6d8c623c7f9b4a0b166df683e15adb | Bin 0 -> 63 bytes .../c0c347f9e4f0eeda1d5a3564a92332adee94c8b1 | Bin 0 -> 57 bytes .../c0f042c602685c73f35ffadcea08e4a3756fd230 | Bin 0 -> 265 bytes .../c11e10a4652eb69c67c012dd522c314fbb00427c | Bin 0 -> 59 bytes .../c12f9b74f5f1f7a34a0da4e8774e8209676f9799 | Bin 0 -> 7265 bytes .../c20acbcf42bc727763e49cba4c8488b32c02d4a5 | Bin 0 -> 173 bytes .../c25e47858ed0316645df0a58abe54a011a681ad7 | Bin 0 -> 1114 bytes .../c272d5d0141ae93c4b541494ce4371756bd8bdd8 | Bin 0 -> 262 bytes .../c2798bd6b4644b8b2c758f0bb1cca340e2d54ddf | Bin 0 -> 497 bytes .../c2b5266b51fc05489aba41b8776edde463bb48a3 | Bin 0 -> 192 bytes .../c2d5d2b70b7c75fd1f2c79c3453f5b18b5ebb560 | Bin 0 -> 1967 bytes .../c2d65a835040814c7089949b00e77c57ef407d6c | Bin 0 -> 109 bytes .../c304e49fd7ef4818a739c1cc79903c87915543f4 | Bin 0 -> 62 bytes .../c3497fe19ae5ef2a593b99ea555c1589982bf1e1 | Bin 0 -> 6632 bytes .../c35a2fe54b99249e5fb5a5901d4ce1e491682cc0 | Bin 0 -> 2488 bytes .../c381fd90524d5c0aeed1e681e12c847c33ac09bd | Bin 0 -> 2033 bytes .../c3a1bd2aa5dfe03f033aee991959ab4d1131aa6d | Bin 0 -> 68 bytes .../c3a4ed09d2c4aaec8bdfae21defc61795f41f124 | Bin 0 -> 2184 bytes .../c3b0bb0bcc7dea983eb9536a56dadc7c01509d5f | Bin 0 -> 18 bytes .../c4272f2e898602958ce975702c0aef8f6c28a7d8 | Bin 0 -> 687 bytes .../c44c3bf7a511dfba86e241e3bf09dbe5cfe427c8 | Bin 0 -> 211 bytes .../c455ccb75f8f3c488bfa5c9e44c1495baa86604f | Bin 0 -> 170 bytes .../c4604b509bdad5cbda1eb5ddbc289a9af07a456f | Bin 0 -> 1178 bytes .../c497d324397330f6cbbe7e9bc3a17b9ec9ff30fa | Bin 0 -> 206 bytes .../c4f58f1815e500ffaa01f2eca952245416b2fa27 | Bin 0 -> 2217 bytes .../c542c0351e6c38d6b27c8dea2c4404e58b83b42b | Bin 0 -> 46 bytes .../c59336a17d4718fce70641e48b35603cc00550cc | Bin 0 -> 211 bytes .../c5bf18822d7c322cdf6246d9848cb7102d86526a | Bin 0 -> 543 bytes .../c5db78726651bbf33d8ba18d1df10ccacd2dd5f4 | Bin 0 -> 3180 bytes .../c5f161839cdff2f6c371cc19c1371e539e72a302 | Bin 0 -> 167 bytes .../c620e9b5d6d5e473ce134fd24da46f9ffb52aa36 | Bin 0 -> 363 bytes .../c6599f5e9685eae3db02e218a28583f75938e44d | Bin 0 -> 341 bytes .../c67c22f7d442df66cc7d7c9ad2686cbed32fa0fa | Bin 0 -> 997 bytes .../c6bb9305447598b48656de2a1f85035c7689c945 | Bin 0 -> 175 bytes .../c6c2988056ac6c42ffbe200cb0232d023224fe4e | Bin 0 -> 2840 bytes .../c6eb22eecab164945f74391113ab0125ebe76d34 | Bin 0 -> 176 bytes .../c6edf0a248f5b4576138be8b664a1761cb2ee6ef | Bin 0 -> 1832 bytes .../c8745fdbab9dce9078abdc00e2bded2fdfaa2689 | Bin 0 -> 2277 bytes .../c8a1bc23ffd9f73e3874422623d3a210b2a96b27 | Bin 0 -> 60 bytes .../c8c06650e6d59f1e8119b96c1d90e51c13b4bf43 | Bin 0 -> 371 bytes .../c926a7eca3a4ee6e3a72cddd50c45394c1617138 | Bin 0 -> 69 bytes .../c967b85bb47cdb0085589fc9c3cda95aa3452c3c | Bin 0 -> 82 bytes .../c9942e909a823b80df0728be2ba7a8e1689e69ef | Bin 0 -> 2 bytes .../c9af3f9400fd489fa467450a314fccf164703085 | Bin 0 -> 8971 bytes .../c9fcbcd40968c17d4ca563494a3ddf002fad86fe | Bin 0 -> 264 bytes .../ca00e9afbb6a16d2b4e457c192afde9cd277325b | Bin 0 -> 1224 bytes .../ca19d4a3382ae6058c3e16bb48f8b4cbf3d588c8 | Bin 0 -> 3522 bytes .../ca5af42cd58fce895bdbcb165ea17ebd942ccd55 | Bin 0 -> 2080 bytes .../ca9142e1752ec1d174f059045e7d77634e8a6c36 | Bin 0 -> 13 bytes .../ca970c9504550bc8876375bb020b2c7598608473 | Bin 0 -> 2231 bytes .../caa71b7d49fc35e505add6ff88d63992f0e236dd | Bin 0 -> 1146 bytes .../caeababd01aee99ad64092195f6a813da04143da | Bin 0 -> 1379 bytes .../cb5891bdd00390fa7580a097b539c1b3717a07f2 | Bin 0 -> 603 bytes .../cb7292791120a30c5f6b27616a30c7db7e5601eb | Bin 0 -> 70 bytes .../cb8f955650a068140d5202c9a6e29881930ba3a1 | Bin 0 -> 157 bytes .../cbe0d369c5fbae9ad7c08f353cba01fdffe5efaf | Bin 0 -> 2036 bytes .../cbe654b3c999bf38106ddfe5e4773f31534e1769 | Bin 0 -> 1105 bytes .../cbe73802376ddaac8478f98012db9f099ce3951c | Bin 0 -> 92 bytes .../cc392753bea2c7b8006c1e97f374ddee96ade373 | Bin 0 -> 94 bytes .../ccbf48f922a0c184cc08d9b5c62892339665d042 | Bin 0 -> 395 bytes .../cd21846f8551e9add1c59d69982d1f61ab5fbc33 | Bin 0 -> 258 bytes .../cd355280bab059d8289aa31a07b47931821c23f5 | Bin 0 -> 9545 bytes .../cd48dd895efd09e7e7d8eaf0db84dd7390a8c301 | Bin 0 -> 308 bytes .../cd9e830912c93e745a7781dbdff9836cb78b487b | Bin 0 -> 2831 bytes .../cdd47500d13771885ce4dc0ff1d02b9f98e726c1 | Bin 0 -> 1633 bytes .../cdd786736dd0b9689b911847b134a3c3e07f87c7 | Bin 0 -> 1067 bytes .../cdf38786969a6a5c70177cad61d0f25cb798d3d2 | Bin 0 -> 6132 bytes .../ce22f6acdbe758406ba33534cee7af10a56ffe3b | Bin 0 -> 2209 bytes .../ce77e3f3614de86f34de75165d151d2fbadac3a6 | Bin 0 -> 175 bytes .../cec423284945bd064a102b04b5c4ef383e9b80aa | 1 + .../cef32edf6d09b5faae0aae907acff1128066268d | Bin 0 -> 123 bytes .../cf8670434ef3365a3aba6d96439e180d3176d37f | Bin 0 -> 280 bytes .../cfa1e529870e7417266fe93f011ced303bb688a9 | Bin 0 -> 3499 bytes .../cfbade2118f4c7157db29d1b331f71fea84a740a | Bin 0 -> 143 bytes .../d022d6286c68f6bec7de1142b44dc7cf17fa70e1 | Bin 0 -> 63 bytes .../d051e1a8f3f09b17e692c2e5e4d5ee9fbe48a587 | Bin 0 -> 97 bytes .../d06ca3cacb854fa216337580256de043730c73f9 | Bin 0 -> 264 bytes .../d09cc0f13acf0ba10dc755c377a4cb5faff698a4 | Bin 0 -> 1212 bytes .../d0b186258c1898fbb6a112053185851bc30f496f | Bin 0 -> 331 bytes .../d1215d3d307810576197a30b3d1f18c57fc06db9 | Bin 0 -> 1665 bytes .../d1284070705f1d846e7cc0ce6670a24ffe8b8e3b | Bin 0 -> 497 bytes .../d1cf2ba128df2a049e3078fc18abf5a3a44ea4d6 | Bin 0 -> 195 bytes .../d1dec66b4c4c319bd25c3ad36e9b3b37897dc72d | Bin 0 -> 4577 bytes .../d219979441758857470f986179d200b9bbaef17f | Bin 0 -> 20 bytes .../d22de317a52c9fb355e36f968f9ed56ea85938ed | Bin 0 -> 175 bytes .../d342b4add4824739dec146eb10ab62bb005188fe | Bin 0 -> 1067 bytes .../d3718135825d96e1eff50ff91ac5ce906a3bc517 | Bin 0 -> 1656 bytes .../d37786e2c20c2de8133b936275f0f5fb40dcb7ea | Bin 0 -> 60 bytes .../d385353cb9487b1dc347d10915c394d105b63b26 | Bin 0 -> 515 bytes .../d38adcb0e018cbf2f464298a04f413d3417582e8 | Bin 0 -> 890 bytes .../d3c9ba976ceb7bcd654e7d9b66575ff45c400089 | Bin 0 -> 266 bytes .../d40f7793aacbb9576ed6eab1e685ce512e3e3448 | Bin 0 -> 1604 bytes .../d444fc877f627e3e772e2e0f98cebe9ad0efb2d0 | Bin 0 -> 153 bytes .../d44e692a87d0fcb2ae7854466741d4723595773b | Bin 0 -> 156 bytes .../d4af156c7c2c8c06a700727dbf98da572fc55faf | Bin 0 -> 11 bytes .../d4c915224fa09082487b2c7aaa8f6c88e2ff7570 | 1 + .../d5637bb23c108b88d9362f1efea84bde08c2aa03 | Bin 0 -> 1657 bytes .../d56f15ae1eb74ad009397f927bcfe7bead342bf7 | Bin 0 -> 8652 bytes .../d57a74872db23d8e02163162a4878ef24c6b8798 | Bin 0 -> 143 bytes .../d5a988103aba87dc5a7030393d708bf1c55a9972 | Bin 0 -> 3131 bytes .../d5b45c92146143a58601b32b337b8753bca28141 | 1 + .../d5bd876456b17a608a1dcb5e3ce9c5b41b15e67b | Bin 0 -> 11 bytes .../d614bf4ff6a2f430a0708514cf8cb88f1a393960 | Bin 0 -> 24 bytes .../d667312e66ecd12350f4ea669104f1fb32c32354 | 1 + .../d6ea12fc4176b56e5d767d417a8c064276e77a3b | Bin 0 -> 1857 bytes .../d71ebff397b524a5d95bd2c02359116320fb8879 | Bin 0 -> 8652 bytes .../d78aa01f9301fb4bd56626b5da5d090619808232 | Bin 0 -> 2585 bytes .../d7909315d11c87fcb5981e0dc86b0fbbbe95b2e1 | Bin 0 -> 3184 bytes .../d792eb1bc15b97c70ddfe38d8b0d9060941658f8 | Bin 0 -> 81 bytes .../d79ecdd901a3fba87f7a905adfda63480f944135 | Bin 0 -> 788 bytes .../d7a8528ab11f8b3ab9e51e2fec7eafd9135a827e | Bin 0 -> 216 bytes .../d7a88823336a1ce0cb3ec219f9d2f3b044cd9ebc | Bin 0 -> 3039 bytes .../d808c0f2d288ed39b5249e3293418df088502f3d | Bin 0 -> 2770 bytes .../d81548ae9d2c501f03732c62142ac4116f4a4699 | Bin 0 -> 13 bytes .../d82438517f194d59ed0e96b263d7dd277ef8825d | Bin 0 -> 1204 bytes .../d87a5f2b05b78a63f3e92c05c5b4e59ed5d304fd | Bin 0 -> 264 bytes .../d88d6fbdc8684ece538f57094a57942e8e5d4118 | Bin 0 -> 68 bytes .../d8e570b879408b9d61bea49aa225d43c2f694591 | Bin 0 -> 317 bytes .../d9349f81782ddc0bcfc2a2414efbed99a59720df | Bin 0 -> 549 bytes .../d9484b0f00249414fa9559fa122c9f0e5acc30f6 | Bin 0 -> 1894 bytes .../d94ccf8ebf5a2a387256abb1cf88fbaac67aa8b4 | Bin 0 -> 6434 bytes .../d97791e8457251d6cd6e9a7c1d9a2685ec0ee8cd | Bin 0 -> 143 bytes .../d9d9f57f64711bb29b9f506d9ce0808eca687ae6 | Bin 0 -> 63 bytes .../da188bccc01ce521589506012568e9bf218349dc | Bin 0 -> 998 bytes .../da32f3c16d4049f82ff46686aa32b6b2f4cdcf27 | Bin 0 -> 375 bytes .../da33e41954997c24ad31f6c1845e18510b384f67 | Bin 0 -> 2 bytes .../da348bd234bfb38a991c04f2050cc52b2068b30f | Bin 0 -> 1099 bytes .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../da4fce500ff509c71cb2c120d7a46189d01c0927 | Bin 0 -> 387 bytes .../da812421c565d7163f9515ad4a2cfda1e4bd48a9 | 1 + .../db34721b3f80fb577f0f52a700d9444f1af1437a | Bin 0 -> 827 bytes .../db659915ebbb43996f0dc012effc44b902422c7f | Bin 0 -> 98 bytes .../db7f6ad97fd40520f5849531130211850697d16a | Bin 0 -> 2049 bytes .../db974310e55ab753253e2e416009b0a71ef0f2c5 | Bin 0 -> 1158 bytes .../dbaa57e98dcdacdd921891e7d35b32a60d95f7a1 | Bin 0 -> 5446 bytes .../dc3d045b0bf1572f1ee944d99238c2e95a7ac695 | Bin 0 -> 3351 bytes .../dcb2795e17f8b65379b00b551023f43a3d017904 | Bin 0 -> 2541 bytes .../dce12727fe7585ca4d7ad34a68f0c8c541fec941 | Bin 0 -> 2638 bytes .../dce38ffe9ac046a57d3a8dfd108b3e0b856c917e | Bin 0 -> 24 bytes .../dcf5eb78850c0325c4ea694976f04d72bad2f062 | Bin 0 -> 313 bytes .../dd8621105567d83ca83ac3cc84b86c49ec2612c7 | Bin 0 -> 2726 bytes .../dd91e156d508cf79d712818b3c50ab1cf878372c | 1 + .../ddd2c4c2384325fd6c81a4daa3cd8ae97f3a6c01 | Bin 0 -> 94 bytes .../dddbd33dce5862dbc06e626b53bf1ad05910a991 | 1 + .../dde5249cabdaa1247dc09a4ebb4f4a6667008872 | Bin 0 -> 4023 bytes .../dde8683405915d50f7bc3ea3ffd905bcdc3f71d1 | Bin 0 -> 32 bytes .../ddef93ccc623d4b4b45c44e8a283a73f7b6650b6 | Bin 0 -> 220 bytes .../de0b080dfcbedf8180eba0e9a612501f26b141c2 | Bin 0 -> 8472 bytes .../de8813b99c9c7fd45a94d5b985209f177855827d | Bin 0 -> 1276 bytes .../df5124e61356abc2016c0e3f2409f3fb27af933b | Bin 0 -> 691 bytes .../df886ad4dc6a751f0e6aa21759101ab0aa57eac2 | Bin 0 -> 268 bytes .../df94849c736163240a965e6328d6829b09e623a7 | Bin 0 -> 391 bytes .../df9fea85fa50f863bf266be236a7e60e3ffb2e2e | Bin 0 -> 241 bytes .../dfcc32759f5fdc52fd41d269a174458fbd017736 | Bin 0 -> 89 bytes .../dfe7326a6117ec68fc540669843455d848fc19c4 | Bin 0 -> 258 bytes .../e0354ae69d9d83c9977d89c8e4551aab0d9789fe | Bin 0 -> 4844 bytes .../e04c12045ad2414a82135e8cc6d6d69aa3f50dcd | Bin 0 -> 271 bytes .../e09ffe5b726901f9ef129fa30963d1aeafa755dd | Bin 0 -> 1002 bytes .../e0b35eb707939d0ef01a36c314311b84c9e94743 | Bin 0 -> 88 bytes .../e0e41912c57a2dffffd93cdb453c9202d6eeb410 | Bin 0 -> 95 bytes .../e0f9c427245f24767def9208697328e5d75fcf40 | Bin 0 -> 121 bytes .../e10cc8380bbe578e2671c3c9500a41d018243759 | Bin 0 -> 3160 bytes .../e1794b3f594b65870a84cd8ef27cc4644b529acc | Bin 0 -> 8271 bytes .../e18a2ca915ce3419889409e2d27b50a6b269c4f0 | Bin 0 -> 27 bytes .../e1f690b6ede6348df60431c2106832d3213e5399 | Bin 0 -> 601 bytes .../e20c5461e3ce2d0ed40a86333dc5e6a6053fffd8 | Bin 0 -> 128 bytes .../e220af26332200e1b3aea46fe4de6d7e5a27b89c | Bin 0 -> 2480 bytes .../e25d758334c4dcf17362ec55ee7e21fcf3aaa731 | Bin 0 -> 176 bytes .../e26cd082b8de6a7eb15fe8590bd7b48897bf391d | Bin 0 -> 2176 bytes .../e2a708ff80a75211633d199f4d7e92a7649cc991 | Bin 0 -> 3966 bytes .../e2daf3c6588eb39b69eb3b59e66e92f0771765e7 | Bin 0 -> 103 bytes .../e342d48c69fd237bdbc6f6e29e8df725839c617c | Bin 0 -> 395 bytes .../e3453f7efddf18658f898ebb5b18f40bdda041ef | Bin 0 -> 264 bytes .../e352108fdb8f842fe152350c0e30793ca49c9024 | Bin 0 -> 94 bytes .../e3a9da1655f6d945e92c7ccc190ffbcb7b181c51 | Bin 0 -> 219 bytes .../e43f53bc50d606d4540018164567c8682a677f16 | Bin 0 -> 162 bytes .../e46c541fd637d20d0292c1de8945f52496b365d2 | Bin 0 -> 5118 bytes .../e53eb820231df49cfdf20c5434c2bdfee01e4377 | Bin 0 -> 50 bytes .../e585123cf8611dd98b1a98792440424127d92c2f | Bin 0 -> 674 bytes .../e608ded1c24ccb29e35f6276384a62f512f491c2 | Bin 0 -> 728 bytes .../e638f0ad925a16bb86218b18cc5c6e2290e62b4a | Bin 0 -> 93 bytes .../e63c196afdded2da459307444b2fad704909257a | Bin 0 -> 43 bytes .../e65fc6863de7a0527ea35618254e63e49dac7655 | Bin 0 -> 89 bytes .../e70646397df604a36cda403fbcb4fca9cd70ed1b | Bin 0 -> 871 bytes .../e75d4b76883c46c99abbb7eeb1d0b5127979d351 | Bin 0 -> 34 bytes .../e77ec46b3cdfaac9f4e216fe702edfdf53139fe1 | Bin 0 -> 335 bytes .../e7b9b56d1e38f0a5a31e419823804041acebce8a | Bin 0 -> 476 bytes .../e7eee82c9ed7f46ef70b22cae3da3238c3569b0b | Bin 0 -> 46 bytes .../e80975fb175fb5f1de50a624f2c66a1c0fd618b4 | Bin 0 -> 1766 bytes .../e86b1f257c032a0bfdb6d19f3975994a80860003 | Bin 0 -> 143 bytes .../e887b211a94a4845bccdad10a958abb1c0d92880 | Bin 0 -> 335 bytes .../e8cce28db4c532048b27ebd33579ed1657eeb099 | Bin 0 -> 68 bytes .../e95cf95f972f4b262827b2507f8fb0901ee757bb | Bin 0 -> 1681 bytes .../e9d1ac0e4d2858e4a7e60fa1870ef700939a3c45 | 1 + .../e9e3b3010c889928ea191f7fa624693bd2c49ba3 | Bin 0 -> 4002 bytes .../ea54f88a6da0ebf686ad6ae766864d8e392629d0 | Bin 0 -> 1084 bytes .../ea83144905175272eefd6a2e3cc3371f876a065f | Bin 0 -> 1091 bytes .../eae1a0082dd0daaf3c0f0e1ea501284cfa6524c6 | Bin 0 -> 137 bytes .../eaeb1dd53a09040451236bde1f8176d989e84572 | Bin 0 -> 288 bytes .../eb58f170889d1b5a5034a19eb09e2e04d15ab422 | Bin 0 -> 122 bytes .../ec70a7b44d062240f0ac748d150d404e9c450a0d | Bin 0 -> 69 bytes .../ecf7b343bc1b3499e12e7e4221c98a7f310da47c | Bin 0 -> 215 bytes .../ee88113f458df10f87e88ce5444d0d8de4a853f7 | Bin 0 -> 8735 bytes .../eeb0067a2652fa6ad7d2d61e108b5f303b472bfa | Bin 0 -> 9017 bytes .../eee4648ecd67f940fe8518074c1b07a6409865d0 | Bin 0 -> 1387 bytes .../ef1e36fb0644de2cf8b35dfd9792c832573df584 | Bin 0 -> 121 bytes .../ef786c25e50d3a66036fcca5bd237a5fa1a3cd46 | Bin 0 -> 330 bytes .../ef78eb3cef17b74b72d3ac9b48be73609cab2fcc | Bin 0 -> 1584 bytes .../ef8fb98d4696de1a745fee1e7650b7ca652aaf5e | Bin 0 -> 367 bytes .../efd5b14005f92acf692568bb856803c4d1bdef60 | Bin 0 -> 97 bytes .../efe7c505af17b176e0317e4acce6459bd60559f4 | Bin 0 -> 56 bytes .../f00d1ff12217f4273b75dd84950eda5f82edfb3c | Bin 0 -> 4 bytes .../f0116c4d0c9f80caa6f0d4645e2bddb1961fea0d | Bin 0 -> 12 bytes .../f01ed8456aafe51d8bb190880e72e978d6af6a19 | Bin 0 -> 4881 bytes .../f05d1bef58d7a7a0f37d10be82ab192641d84b18 | Bin 0 -> 720 bytes .../f092abf34c695a93ca2ffea95a3190abd341e7df | Bin 0 -> 388 bytes .../f0a019f3050bded468d86b5633a084977d461a93 | Bin 0 -> 101 bytes .../f0dfc0899b35da7511924d23b5bc0744a6ed75d5 | 1 + .../f142502dc206ba82fb86073fb9b18ac072c5f55d | Bin 0 -> 122 bytes .../f1800f11785fb71a1405d35074309720f49853c7 | Bin 0 -> 522 bytes .../f1b38c045244de610c68a96b6bd2e397ca71dc0e | 1 + .../f1c11899123173a0d4d63e118c712d19ac1d756c | Bin 0 -> 854 bytes .../f1cf66178f47f0d4adc68825588b405f40e562c1 | Bin 0 -> 2938 bytes .../f1f4c27cf2e40fd6edd0b24e8176fa3605c10350 | Bin 0 -> 3647 bytes .../f21f18dd4e32d9b21304929c55a3ad59b1ace1b1 | Bin 0 -> 8802 bytes .../f2316d350fb384ec81e44a020b1b58448c937831 | Bin 0 -> 109 bytes .../f23bbf6bcd6da1091dc81f913234cff7699af221 | Bin 0 -> 661 bytes .../f241772625b45bd96311a5ea6f5f7edd15bc002e | Bin 0 -> 115 bytes .../f246ff22632e7efb9675698665ae43b1fcaefdb0 | Bin 0 -> 4068 bytes .../f2e7bc0e7ce7395ee82c9df66bc3e6c9dcc2e371 | Bin 0 -> 175 bytes .../f37bd721a8407a530b175ea50c33c6f996ea82e8 | Bin 0 -> 52 bytes .../f3a1d56d017eaec7143c3cce480dfa49fb4fbea0 | Bin 0 -> 49 bytes .../f3c6fad094a0dff539c9a312db077faca2774317 | 1 + .../f4495082309756a0e51f9d215dfd2531591ae8bb | Bin 0 -> 2012 bytes .../f480d8d0001db7316335ac5acd6cf76e037da499 | Bin 0 -> 171 bytes .../f493d7babb8feef1752b3ef133f9ac3e5aaf1f2b | Bin 0 -> 184 bytes .../f4a4394ca7a634830347e0f8964ce0fb5d54e19c | Bin 0 -> 6627 bytes .../f4cba872fe05bb1bc729b4169c261062447c9dcb | Bin 0 -> 11 bytes .../f5647013861f97ff4bfed588e1ef0c33bb147413 | Bin 0 -> 160 bytes .../f674d660b1bb698903329921a852e147abe1c9e1 | Bin 0 -> 4302 bytes .../f6b71b1e44df232d6cb570003575c4db1480a0ad | Bin 0 -> 323 bytes .../f6cd11ba036959a0651e0df5c164571e90190c9d | Bin 0 -> 145 bytes .../f6d65c99dd2377851e9a284a70d21b28b6859c17 | Bin 0 -> 101 bytes .../f6f4e294c7281aea1c7a023c5c27046eaee6085e | Bin 0 -> 799 bytes .../f721fb1d9cfc62a20946a617ae40289eb43870d4 | Bin 0 -> 1088 bytes .../f7661e619add345911a9d88d4a5d75ed696412ef | Bin 0 -> 3994 bytes .../f78abf8e1ba588cecb87deee994e03e34c2038ba | Bin 0 -> 363 bytes .../f78d4fb5a8f06f67cc7da38cfce9fe60810fbc6e | Bin 0 -> 60 bytes .../f7c08ef3635728e8e4731f83355b01aab8361423 | Bin 0 -> 6558 bytes .../f832c4b21eb5d68a4518790f4690689e6dde20ca | Bin 0 -> 11 bytes .../f85fef23f323c0428044b25e1cb06254d36cd940 | Bin 0 -> 1261 bytes .../f86c1bf781cd5c2e81a091b73507cec2eba43420 | Bin 0 -> 366 bytes .../f916c19998e64c4d3a956b891aae2be4f040f784 | Bin 0 -> 142 bytes .../f91929d59d1eaa83d1f21b29e27f22457844c819 | Bin 0 -> 1372 bytes .../f9591e4492af88ac4b7936e88479bdf96282359a | 1 + .../f9599646786427881ed60010fd368278bca7024a | Bin 0 -> 11 bytes .../f95cfd454a3b1ded3d39543068279431ef7fc9d3 | Bin 0 -> 516 bytes .../f963ef21d7a492d4bea5e2a32576f62ad5d7069d | Bin 0 -> 5 bytes .../f96af49b8aa91ec84b8b74789964b9b37b9c4898 | Bin 0 -> 3659 bytes .../fa87e3c03c0b05f1b3c457bb1683ab24c81ad0c8 | Bin 0 -> 63 bytes .../faad6a1c17e4adff6645742c2b3296a05720c564 | Bin 0 -> 70 bytes .../fab88e082d016bbdc1cac9b0967b9c4ffdf08a54 | Bin 0 -> 597 bytes .../faba8911cafb7b4df0c6715ee5222f3e084ec5cf | Bin 0 -> 2394 bytes .../fbb64e8fee88a898624ccb4187b2b3813d88c2a5 | Bin 0 -> 578 bytes .../fbc5b221d7ca2df5ab6fc666b9346e712542cd77 | Bin 0 -> 5643 bytes .../fbdeb045e188d582574421743d6f3ee9993749e4 | Bin 0 -> 63 bytes .../fbe74f6a8ffd21ec64c4e88558b40486e2574b24 | Bin 0 -> 303 bytes .../fc0d6bf888342b8d08da67c3c5dc0d9af665db9a | Bin 0 -> 272 bytes .../fc754b449273b7c30806c7b39f7e8dbd65c5c8f5 | Bin 0 -> 1219 bytes .../fc8991393612ffca56f063957a8fcd58ee538811 | Bin 0 -> 8 bytes .../fcbbdf361ee0874f6c06adc82cfe1a57d52190c0 | Bin 0 -> 94 bytes .../fe0a3efea14c75d01fd770acd01b0348c5899a3b | Bin 0 -> 451 bytes .../fe1010dc430101b98214a96cb2391f1f742b1ccd | 1 + .../fe362fefbfbe61414513f51a04d8baf60102afe4 | Bin 0 -> 262 bytes .../fe6851d0eff45601180e6056e2b3b597bc72c2ab | Bin 0 -> 172 bytes .../fe769d5acbfba1336aac310c4a42439f524f331d | Bin 0 -> 3078 bytes .../fe81d16b7a1d9ab76a5e6ac3a8be487986c24d61 | Bin 0 -> 4304 bytes .../ff08a9a2b2b1d8bcb678a60e30b4b4c542e287de | Bin 0 -> 3268 bytes .../ff27cc7559ba6d40aa01235561d925eaaa7654f6 | Bin 0 -> 479 bytes .../00cf9be097833c168f03f04dbb716ab0c4748308 | Bin 0 -> 241 bytes .../03a2f9836be3c0042e47ebddf64ff4ccd7c54486 | 1 + .../0443dd5488d14b39326911b5673e50bc343ffaa0 | 1 + .../056e2e8f34bc654e6c2a9aa863c179fde704917d | Bin 0 -> 1243 bytes .../05b1421d9662f65d3d35ef06b0570aa3ac3e1cee | 2 + .../07b2d9bcd5150951604cd6a4ae50086bf6690e8a | Bin 0 -> 6063 bytes .../08534f33c201a45017b502e90a800f1b708ebcb3 | 1 + .../0b28ec9c87f258a9671d0aad25da0b8f1c7d7c2f | Bin 0 -> 892 bytes .../0db36cd42aaf4655e060a665b22230f76f22f8d9 | 1 + .../0dc7cb14b650ff202ec2921cb21f96e2dff3cf75 | 2 + .../0fba8cb6eccf6674d13833b540bc23620f18ee14 | Bin 0 -> 2411 bytes .../0fdb92c685531f3ddcfe7b3dcf5928ed2b163671 | 1 + .../14d162541bb2358cfacb39122771cf4eecff7787 | Bin 0 -> 3757 bytes .../1579249a889e3745d2c8e93e024cc46879f428a6 | Bin 0 -> 290 bytes .../1602ce2d70dad4e281a47f33a67e9ad2eb2b72d6 | 1 + .../165a922165e5fa9acb424d432680c181fda4aea7 | Bin 0 -> 532 bytes .../1723de4d4ba07a5eea87e93506af6b4d22182068 | 1 + .../18b445ec95891c1c58a1c91ed0becf54b003a25c | Bin 0 -> 1169 bytes .../194a4c8d16829e4299f665ad23c17665e63f9694 | Bin 0 -> 9735 bytes .../19832e3365e6498d55c0c3f88fa1b51c1b95f6a0 | 13 + .../1cfa62cebc9a469bfb0b44ef595b656faf94ec57 | 13 + .../1e4dc974b1d10e727c143ef0a7bef2ef5377e0d9 | 10 + .../1e7527dedb1dc2237cc0781d180d13b1aa65c256 | 1 + .../1e9487d79e3742d7fbdf8eacb6eb958b591132fc | 1 + .../1ec92d6abc80d64950950a2bf35d302416fa87a4 | 9 + .../1ffc1ec363170c85b4e64f4bfdf93b6a88ce7a2b | 5 + .../20484368a1f854a0bc9f95537e2bf1b467a8c1d1 | 3 + .../2147665a997c8703b2514bc6f592eddeb2ad7e22 | 21 + .../214a87cf956171a4e4a6842208efbe184f446b81 | 1 + .../21721e43312a4fb4d181ac2e1bb5da866679fa1e | 9 + .../21961106fe422f74814f9469591b6e566c75ef67 | 1 + .../21cd6d534f12ebd26b68782141edb81316afa004 | Bin 0 -> 16676 bytes .../23949ab306f3866c8fe4c73352e9ba0f22a029d1 | 1 + .../243d077c97d0d9ce87d7d01881cb86e5ffcdda3b | 9 + .../2475acbf8d44cd00f7651cc0bfea5c721be0103b | Bin 0 -> 62 bytes .../262e0bbcdfc27e82338ce9be7ee338f4b983c2de | Bin 0 -> 727 bytes .../2704af355accdd17e59da4718839d8f5671efdee | 2 + .../27715d2a2d6975e8c8110b98495030910fbd980d | 32 + .../27bf461ea7ed89633570cd0c11530d84b66c130f | 1 + .../27ce32eb3b498a9287e2a0537398256535752a52 | 34 + .../28aa251bbb051b96b7457b7d75a889dac7bbb9d2 | Bin 0 -> 30 bytes .../2950d5d8dfe23fce6214aea50bbf21f9ae534bc9 | 3 + .../296f7f63a83b686f92887d870188505851f3ea0b | 3 + .../2af5ceebe9e884c1d5be232740198a624fc51c7f | 1 + .../2b49f8bf40bfdab4f3a87d280b4f426b0e0f8f24 | Bin 0 -> 1851 bytes .../2bfef90fa02aade40e18fa58febeabaf39691e1d | 100 + .../2edaf4b586aa0335925a407ac4076a3bd072e86f | 4 + .../2f1718cbcd840c506d3da03ba7c9efb2bbad84f4 | 2 + .../32021db54dfb121c3da6a1960ee73d27464dc731 | 2 + .../33d115dba53b17d34609c9ffbcb66c6aabf3ed61 | 1 + .../33e8951fe1d7864f37bc874e1ec2faeebbe608d5 | 1 + .../34d6746036cff188bd48882c52fb6fd4545ca180 | 1 + .../354a326ff39512fc85c55cf1b1d7a4c6b420f631 | 1 + .../3640e0ad75a737affa51a4cbb5f12b72e2b9eee5 | 3 + .../36a6095e445c40716d0378a9896de3d8bea03d4b | Bin 0 -> 1210 bytes .../3717c2e0bb2f29a5f78d726426ad668389fce8d3 | Bin 0 -> 1603 bytes .../371a180c3a41a49fdb8ffc354a5561b1d9382291 | 2 + .../37411e3ed0a0fe3f3448c92d0cdef4bce7c64467 | Bin 0 -> 1728 bytes .../37638b16090ebd379c090e7111d79c8ea207beaf | Bin 0 -> 58 bytes .../378d62073c4b09a633181146e301931ed7586eb4 | Bin 0 -> 1364 bytes .../37d822a3157b0b604f155dd8571c49eb99e787aa | 1 + .../382049a04754875523bd0c3f4d128244e8c827a5 | 2 + .../38998cff8d16fecfe3c182de5b73dcf06157f8de | 49 + .../39bb0b34dd4ccdffd50b3bcfd3a497a122b1b0f9 | 1 + .../3b2010a23317c2221f4c61a62ccc9c24297be058 | Bin 0 -> 279 bytes .../3b824fefd171d07d9e99da5422b9a4847af3b22d | 2 + .../3d0c9e3e8dbca6210102838b7ba6fef43ad294b6 | 2 + .../3ee58dc53eeaf26f617e287dc4e1ad3b53841983 | 1 + .../3fe3452c96b452f05adee3fd27d9c59a5c9ed4fb | 2 + .../3ffb8da40ecb5adf79a13ce706f8adfb902639b5 | 1 + .../41471f78b8978370f54737836f0db16153994d5d | 4 + .../420681cdb2fadc3ad9c912750e7fc0434626ab6c | 52 + .../42301d00386102b58ba7dbf808a9c7369599f906 | 32 + .../4365aaa395c09db2b6b3d57026ecb76711358aaa | 5 + .../44948ffb307b70bfe38cda5ccaa42231e9f66719 | 2 + .../44ea1a34d5441b610cf6d142f5cc90ecd2778d7e | 12 + .../47580e9e07c1cfa05cf91676d825c5ba1d11704f | 8 + .../4763a2b062c9f30ab4537e2daa78dffd6a53b7d5 | 2 + .../47f54ecc91c8e7d42c899c091f261cb2498fce61 | Bin 0 -> 5083 bytes .../486a44d15edf63321aed662f23015e2c2cb1ed63 | 20 + .../48a9e19ad1609ed223cc1ee78e78bfcb587df2a4 | 1 + .../493295578a55910412b8d0e6744ea51110931e0d | 2 + .../4991f5d902f3c74cce670fe01874d5e6a9eed902 | 1 + .../4b608b28aca231264ef58daa304bdf4097aecd37 | 21 + .../4be3618c16b46eda6abb0e35a6e613747e5c7b42 | 1 + .../4c38e4ac639dcaecb2f879aff86f6190bf555991 | 1 + .../4c45f399582f3c740928d8424582612c13d4d9d8 | 2 + .../4d155dee0c6879b034fb6b81fa37f71d9076ad85 | 1 + .../4d93e7aebb5de2f95291d8c3464e17d7846d87be | 6 + .../4dc0a769260a74b01b441ef573437d4c9cf4b8ca | 1 + .../4e1f07dde39d7d750bc97dae84d2765f69db4da6 | 3 + .../4e6bb9e0fe5bdb9fec7856d9a0188752ab715ba0 | 1 + .../4e739aaed17ae9b78f7c7bdc8612a30f0900e4ba | 45 + .../4e741ccc1d92e1687c12c4d9dd0412540420cbec | 1 + .../4fb7415354bc93bc1ef4546c29c60234e3657282 | 8 + .../5023cd314fcd0d77d59f85aca3e9aef2352cd651 | Bin 0 -> 399 bytes .../50c06bfd4d862ed0bdc309777e50a68c9811bb11 | 8 + .../50f8e9c9209c95fac08e1914aea762a08a5a158f | 500 + .../54f95b426dfdeb8de801fe1ebcfe6cd0fde78ffc | Bin 0 -> 3748 bytes .../559753d7725c93631b20f122b9035dc11bf49578 | 1 + .../563261feb1febcef97696b0cbf018eb53bfe4fac | 1 + .../56e41baf67c740e015b8e0291efcb402b0328f77 | Bin 0 -> 7654 bytes .../572cbf25512d49029f5da8ba9e92f1a46d9fb5bb | 2 + .../584a2a7303aa9ceb0f67dbe46d6bdffbd19e0e0f | 226 + .../593a8e89ca280d0e06ac976041f086054f21f487 | 1 + .../59466f3ecca448339717e0edf32a766d405caf51 | 1 + .../596edc9243015be49aedc698d60e44fbd4374570 | 12 + .../59d31afc7eb98ebdba2525eb3beae4e9770a0053 | Bin 0 -> 3804 bytes .../5a2edc7a7bc1448a7ec9f8ffdb70772e968eb22a | 1 + .../5aa6be191d4b8373f6e834a79c5a2d00806e9ee7 | 1 + .../5b33c96cd57c5650efd3591625e99eeceaf5fadd | 2 + .../5bcf6af4637558ac7d9b5047a3d65917ceceb78b | 1 + .../5d33ab722a6773c95ead5226ae30749f6bcd8aeb | Bin 0 -> 77 bytes .../5d680e37cbb59143b226ab3257f975fe73a5ddb8 | 255 + .../5ddd521b86eda6b95428f60facdec994188fdb23 | 1 + .../5e56e3a0e582f00a450d65984f5dcc01f630c1e8 | Bin 0 -> 3009 bytes .../5f631dd599a5212b3d3c47eae4d418ec66962a38 | Bin 0 -> 60 bytes .../5f8b0ea3f43cc57c10c3c3e866872d8fb005f97a | 1 + .../5f942b875003fc8fdebd3a523a639d539b580df2 | 3 + .../5fc541b76bbb108cb8d589759aa0d2a0b0fdc779 | Bin 0 -> 241 bytes .../5fe6be7d9cecb84d95e52136410029d494df3818 | Bin 0 -> 2411 bytes .../612b067c2a1fb1ff7f5aa0b61d2f6d0b27fa4ee5 | 4 + .../613b7808c79ec960c426d3405be1d1f197fff79b | 2 + .../617e1615ada210f23ce64362e536c429e9a6c6f1 | 1 + .../63661deb912d51625a4fe8bb77aaa150a4450b00 | 89 + .../64c81068dc8152ea350b8b0a01698cf07a37656b | 1 + .../655e897cad832facba0d70c8f5d5c5f5257294e4 | 1 + .../65b1dc70d51326c3cac55855f1ff360196db8280 | 225 + .../6648cf27c5ab17adf189e7320641552bc19aedd9 | 54 + .../6715dc5c07c97c9f542a22845f9a12857a14c1dc | Bin 0 -> 1324 bytes .../6866dd35fb6adf4e0b24b6e38bcdda450ddc2fd0 | 3 + .../686e1b3f7eb760b4d0960a52f5bc720ec3318f13 | 128 + .../686f980fbd1972b306d290637b93d8a3599ba463 | 2 + .../68c1e121c566a4eb98cb6e727148a1a086000da1 | 1 + .../6b641765fc230278f55e2c0d15fb9322424aea28 | 1 + .../6b99ef868dc1f028184a0700d134f466c2c3b26a | Bin 0 -> 1117 bytes .../6bf9802ed02dfc9bade51e0a4218dbfde1c4b3a5 | Bin 0 -> 2411 bytes .../6cbd93d321113828097f70d78a3fadb43ecd01f3 | Bin 0 -> 13 bytes .../6d57948fcdba756ecce10be0b5eee83a100feb9f | 1 + .../6dbd3fbc25d658de3ca7555b836c64664195222e | Bin 0 -> 349 bytes .../6f370eff9ef5fd9105afd216687a94bd612782e9 | 256 + .../6f71933daf30e82e52b2d2eeb356a95833d8126f | 5 + .../6faecd6ee5ecb838d27540410e192519e60bbf24 | 1 + .../70968964eb6d15d9aad379f1c69ac420decf2ae3 | 2 + .../71110fdbb87e3144bb764d7ad4eb20f9ea94c6a4 | 1 + .../718f2d929525f99ab74ae6ebcbd05064f543ad7c | 129 + .../719d708649871814181291db70291f94636d17d5 | 1 + .../72f1093160db7b0812d71750b581d3ecaf7e395c | Bin 0 -> 410 bytes .../735f1146430134f6ce787961194f5f4c691ee4a9 | 1 + .../739f21b6a39569fd8a576976691b0bb8f04bd52c | 225 + .../74034ce2ec06344150f38cdc6d48638446138c0e | 1 + .../76560f668c1900d645d7b0a9c93d8735f721fdf6 | 1 + .../76a0d0fddf64913b905e2c75b4af1bccaf5457c6 | 3 + .../76af7e9601aa94a02e5aa81c4bc76b69fc898dc6 | 9 + .../76e183d7a805cdac1be9aa252c7c96a483b794e9 | 132 + .../78947ae02be4c8ebed777cca7aadcf9046270978 | 1 + .../78a6d34c8215691bc93a1830e0b132b6be05920a | 2 + .../78bcbb40da2e086aa88189c382e02bb0d5fb41dc | Bin 0 -> 158 bytes .../78bd974478bd7e07890f9c9e88a3473bad2ce070 | 2 + .../7931605428e867773c8fbc102874f431f7f39acd | 1 + .../7cc5a637f3d7e2d11a4f3fc60061208befae5fc8 | 5 + .../7efe16907681e363e7dec6c8d876fe9fb9b5479b | 1 + .../800506d2d5701894ab9ed2937c394c5e301033cc | 1 + .../835f141de99ec3bb241d6f6581dc4a3da8fcfc35 | 1 + .../8442b86ab4c6e01adb53f048803c94b9373ba689 | Bin 0 -> 9 bytes .../8460fb6a0d834f830d95433e9462335155cac4f6 | 44 + .../850cf1879a4ba4d70bc25f9534b025f58ae05e6b | 16 + .../857c6301b58d7101e046e303fd71ee74134a6014 | 10 + .../871931f6c9e58e2cc547301bf70f0b61a4e68699 | 19 + .../87fdc1b202f4e565cd90e7bcb1c722c2184f4c02 | Bin 0 -> 1626 bytes .../882e26d0b0c69267b6b87212859d803e2b1fef8a | 2 + .../88f8b9a7cea3f231c6a720f960880f92ed42a9f5 | 31 + .../89a2908d66070bbb8a795292f259bb63e5b82df5 | 1 + .../8c5d4dd99f6c9611131340eb4b352675f8fd482c | 134 + .../8c86b9760e5063ffb2bd01ab481d6267fd92d71d | 8 + .../8c8704e1d52b83e142890bb6e4188ba30cf8b3ee | 4 + .../8d14a2db57a4b340a653ee92ac187c7dc2e84781 | Bin 0 -> 1164 bytes .../8df9a1d106c91bc340a5a5d06dcb0a4dcdfb8099 | 1 + .../8e926f8f56c0c812cb78ed00bafeaf3a27be3680 | Bin 0 -> 1424 bytes .../8f2dea913bf88f52413db2187d05bb851bb0567c | 162 + .../9206a323d38d1c07e86625cc8c66f5a2cadd0c22 | 1 + .../9212dd543f6e3e40be8ffc233e7cb04146816f4b | 2 + .../92d162adb4f413ee945ca44a912792b63acacbba | 1 + .../92e57b20c2ec057d02a714d545d9605b170e9d57 | 12 + .../94e10b1a78b755e6d3d5310eb606dc5d3ccddcc1 | 2 + .../96e59dc7883fb9bd1c342e18c7d600013067d20e | Bin 0 -> 804 bytes .../97d1f8d6abad1b5758223db477d3c245c9f818a6 | 1 + .../9854be52d2c1132ad118509461ffdc55a51980fb | Bin 0 -> 3029 bytes .../9882148a3924e68161586406c4d54f5818ebdd1d | 2 + .../9b33adbe9a4c457e52804c055f8557e5188bb723 | 1 + .../9bc53e2896b041add435121fdf8f4c3c1592b408 | Bin 0 -> 5323 bytes .../9d3b9ff89e99a805da5da2751af839b6c5050f82 | 4 + .../9f116a6c88df0b5453877dd8e8214cf60f20b760 | 17 + .../9f15878240c8f9b3ef0d8d1105216dd9fcfb1ddc | 1 + .../9f965b5087904eb5bdf129ac572424fa6a5f3405 | 8 + .../a0557af8b6df66468b451fe949a5d04060af05ea | Bin 0 -> 128 bytes .../a05ca89065473db89e2f0ccf64a82b27aeb37856 | 38 + .../a21836f1a1b792ec8e8ab08a5e8e7f9fae86c5ed | Bin 0 -> 75 bytes .../a25ab8b81e830ff7ad2a2f03ab9df204d1f67fe7 | 4 + .../a291f53cd0254e1a437c1b026754f0a7b1305903 | 1 + .../a2f9d59968b82a726d0d399072b66033d9c6b89c | 2 + .../a399d5fb2bcf8d5e534f7ba2928f60d4e413014a | 16 + .../a3a27c1839088de95e79a022f666cadb1100826f | 17 + .../a41ed3029eb8b5c23b7b52d646403c316c61da21 | 2 + .../a65202e9babe0bc385c31cd35c54416661fb74ba | 223 + .../a692928b39f4f03b96e33c785833ac2540458468 | 2 + .../a7204b2700de03ee26660a0a7ae49d172bd98cce | 1 + .../a7a3f3da115dd5c2479ef4000d8693c14885b8fc | Bin 0 -> 4542 bytes .../a8124d67386b881cbbe019d9e1056748cefda8b2 | 2 + .../a813c6dffb1448dbdc453cd1966bf7a9cfdfca83 | Bin 0 -> 1811 bytes .../a85e392bc56beb1c1e44835b0b46c00a55f48fca | Bin 0 -> 1248 bytes .../abb91907b3789197b80726f1fcd5fe576a0b8827 | 1 + .../abf43d68bd2a7dd11f7fd9dcc5678ea4d74d26b9 | 46 + .../ad050adabdc47083219901f132c267fbecbfab34 | 1 + .../addf920e526cc70535d1cc225c4e29ab3db64003 | Bin 0 -> 958 bytes .../af9c0daef5bdb376c9bfddd4b7387bf9a736646b | 1 + .../b0a342a8fccbcda74714726ed45fcde265292682 | 2 + .../b1dd159fe6894bbb25b0a9e0ca2ff252fba36d3b | 2 + .../b358846a4250e43b43f5bdabda6bd20703b554c1 | 1 + .../b38607a26ecb74cd5a7a362b4cc3d54ddddd3b34 | 128 + .../b3c742415434b1fb8b5ac8a9c58f759041ddca3d | 1 + .../b3f14b506b504414c52cd5ed9a7fda63d700fa3e | 2 + .../b4ee157ca414e52dc118dfc874ddcb2f6e58642c | 1 + .../b50821942b2a23f499c1cce961108391759d9913 | 45 + .../b64c082186bd1bfcee87a2899ea898f26fbd9663 | 2 + .../b67604ba42f3ef83c6e8a9ea0eea3889cba979ae | 1 + .../b75d90a2fce772306a8e099e18a64466f009b02d | Bin 0 -> 3875 bytes .../b7cb7a3ff3a75ed0e308dc125f0c9e89f8b39941 | 35 + .../b8acead49879f8f0e78456abb87767b012329b22 | 6 + .../b8e177f16f9fc93a7c8a2a02dd7e12624e1e9567 | 2 + .../ba18ba7430d5c372085f96bc4afb1923b402c8e3 | 2 + .../bb2b39913589c4eb36c2fec811e1df4048043e37 | Bin 0 -> 1370 bytes .../bb8b75881e76750f4e48bdaec46694eeda481318 | 2 + .../bb97363a43bc80874b1f3afc15c52f90af70765f | 4 + .../bbd3caea11bad5cee06df28de9505672f3258172 | 2 + .../bbf9e8e086be05a96125ce78a1de4179ff436847 | Bin 0 -> 399 bytes .../bc147ee2e8682e53bf5603d4169ee7618592047c | 35 + .../bc4faf0158666ed8da09cdd67042a7a22d274f29 | Bin 0 -> 241 bytes .../bc556fa860bbdd95b33715eb4278805e0f7ba970 | Bin 0 -> 4884 bytes .../bd8ad612ca9b159250631dc79aaea52eedfe8375 | 19 + .../bdcdee9154e92f711257a21be6300953c99d39e6 | 4 + .../bdd2cd7fc30aa3513104ed72a6a46bf2361c2a18 | 2 + .../beb9273f3086190447e880328b00a728dc764fc1 | 8 + .../bed1da7d71d27275afcf3f5e28498cdaaf6dde60 | 1 + .../bed2977f4e308333b5c4ec87688266039dc907df | 1 + .../c0240ce49ee532a77b33b0caa89780250180317e | 2 + .../c0f6955c503cc7f8bc9a322b1fc629adaddfef46 | 1 + .../c21719fdc144b09de3c1baaa73226ef7dfeec264 | 2 + .../c22e13c46db33337193cd94fa450de5d625b8a22 | 2 + .../c233d66fadae13f3eba186b1858ec5c77218bdfe | Bin 0 -> 3804 bytes .../c2363552fae6c04a008e2db09067ffeab9b32a15 | Bin 0 -> 3866 bytes .../c34d682b7eaa8c7dda955741352571b3c1d89507 | 27 + .../c450e6ff7a76143f4733b055429f29754be5292a | 1 + .../c45ff393ef8cf1b48143f6b809181647df178657 | Bin 0 -> 2493 bytes .../c46c1350cce85ef81db0e39d67775fa9067a074c | 1 + .../c57a328f0aea6d5a256719f47efb6a225f8499e4 | 2 + .../c6463b068f540dffba8d063b6579ed51a853e333 | 256 + .../c77085f39e2868f7a9cc28f363413914dc89e397 | 2 + .../c7e12a9d0430a6c25a5af40a3d22b2915133fd4d | 2 + .../c82029a72081ddff2ba48c66302111236a01f84b | 59 + .../c82ed3d0939a5b04cfeaca959aa36a7d98afe335 | Bin 0 -> 1665 bytes .../c8ae8a463a740b3deb92910a4124f82b7c5ea5ed | 1 + .../c933719ff3062971413cbe0aa395b1201bba1851 | 1 + .../c9f989fe126a0e9442d1cff02962158d8cefaae8 | Bin 0 -> 19 bytes .../ca6de88ba083a02f604e11bc31074d3eb8d8c23c | Bin 0 -> 1551 bytes .../cdc4e3b51f3d0108dc0f1ea1b0fa171e92ad4fd7 | 250 + .../cde34b43474a613f93430e47c105df142077d23c | 11 + .../ce5cf305acf6e58d002db1417a776427a6e42027 | 1 + .../ce6fc27bcb37c30a8aa47a1377b443300580ed42 | 2 + .../cf772f067a3872fcdd1272e18c40bd3e0e954572 | 1 + .../d080283efa1f0a0b22c2569b1f334aa4dead8564 | 4 + .../d08c1474e816cfa43db418832de83aed4d940cc1 | 127 + .../d10af174841e830e84198f8086feaa924cf4e376 | 57 + .../d123ad11a86cc0f5ceb9aa3d117ec902e15857fb | 1 + .../d1c160a75e51dd62a40501c609e2d3d54a1b4a99 | 1 + .../d3a4141d3812d4bd92b8aa462f6d643d2cf36cb0 | 1 + .../d5659a3d1c50fa72544da534c9a0e43261f5e186 | 1 + .../d5a9231aa10ce46bb496219efd46dfdcc869cd68 | 2 + .../d6485fecff8cee34f9b7ed24bc4d8665b8ee8386 | 1 + .../d6d0dc412a9b64966118516ac9d174bfd9576c5a | 1 + .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../daf033043a37e84c279ceaeba0477b2418bacc02 | 1 + .../db1e1b76fe51edd9157d30fd63c3d078893e21db | 1 + .../dcfa71e52377a29fe003c09009a0e7e5f76bdcca | 1 + .../dd46a51ce6526eec344a7c90e55c3bdb9f3c5ebd | 1 + .../dd65c6b28a119edf40acbd474fd598f43a70ecaa | 1 + .../de45623a26e026631e0f67fa55f663b30921eab9 | 50 + .../df3a4a30bed1a9972f03ba4dd7d5679b2bf3ade9 | Bin 0 -> 4681 bytes .../e0169fc58f83725b3e5553698a173f45ebbb663c | 2 + .../e15af2bdb7448d37e2a913221d7f7f553811add3 | 1 + .../e1996cfb7a3dd03e1ea52d34eec90f487075c396 | 1 + .../e221f5120819fb0795d827ecc90d0b4dbc9d7049 | 1 + .../e52cef092cfbd125de46c1af18d941606c9b04d4 | 3 + .../e5dac4a33088d945b6be0e65bf8dc7383d2916ac | 1 + .../e63f199ea2caecd2f8041954459eb7451b8481ee | 8 + .../e6bbf9351b5fee5566a6103fa3fd941fdb8cb151 | 18 + .../e8f7de3d48c5f3f6474ad86ee6f23612bd352376 | 1 + .../e93a753892bd5708cebaee9aa8560e71b75f7687 | 138 + .../e994924da897028a757ca9e7f7cb621957c4433b | 250 + .../ea11eb161cce99e08f638873e59da0d961dfeaa0 | 1 + .../ead7fc167c8863abb861449fe3777e23ce65b21f | 130 + .../eb63fde9746cef54e4b8c839133e94f9bc2d2f3c | 9 + .../eb9bde4e5d1a6017b4d072a878c8ae6e5f360a80 | 137 + .../ec6fb426e4ee0e3290b494aba78c4ec54ac230bc | 4 + .../ec86a6ec2cefab6ecc2ec4f0b646ec5c2d2ebf0a | 2 + .../ed0fb5a04400bd1b18acac9adef7afe3de88b6a9 | 2 + .../ed11e673dc0cc53d9cb29272d58d4d616b4e116e | 1 + .../ed735f5258f86f6b4a129d39b672be0f6289dc39 | Bin 0 -> 4848 bytes .../edb270450fa97d63d5a637074e59cb2b229d01bd | 1 + .../edb729d2f40bc6d4fc9b6572672530b16ac34ae3 | 1 + .../ee49164a4b5ee962e4556b78946dcad2d850f3bc | 1 + .../ef27bf02f4c22152c42a8e83b29b0c4b5354100c | 2 + .../ef4b65151cf341e3d617bdb546c08cf1b8810680 | 1 + .../effcec284a4bf096733c2a008cf1c039e2f5ad4b | Bin 0 -> 279 bytes .../f04998a506aa73133342cd830255c49dca7f33a6 | Bin 0 -> 1462 bytes .../f06420bead57c97fd3fada49301f55c2ccadaea8 | Bin 0 -> 2819 bytes .../f265a62b99f9285d09b7c00ba811d92d1c334958 | 1 + .../f2a0e5f21bfe76a5fc9d01f034fddeb3fac02da8 | 9 + .../f2a7503d1a9f626e5d2916075abb5921a316c00f | 2 + .../f332fcc78c8ecca70bf1f480ab68867ee07a9dd8 | Bin 0 -> 1599 bytes .../f3dcaf1613c0ef07dc8681fcb5829f22922e1dc6 | 2 + .../f5dec5b1a1e4e59001ede85cab0f2a496dc5aeae | 4 + .../f622c8ed46553b0b77519f8496fa8e35040b291a | 127 + .../f6b77081a14644e83ef704374622ad87b548e572 | Bin 0 -> 1665 bytes .../f74a05b01f8e6061d2c5eed7bb67b4aa92980185 | Bin 0 -> 320 bytes .../f7d905e6627bb2182e24da631d6dfa101d9ef467 | 2 + .../fa3a05eade42b15d5f606e0aa5b24bcb034e4836 | 1 + .../fa5992b2aa5135443506293bd0ca9e7e1ebcc585 | 1 + .../fb610a85962e4d9882018708f2ecf75727615637 | 1 + .../fc8845af430f11bfa4876997c7a4dfb08451ef1b | Bin 0 -> 5595 bytes .../fcc604888a6fbc3e290eec04dfd8987a07f87db1 | 33 + .../fd62dff2a600b90ee1cc924cd7f19738f0497556 | 1 + .../feeca087381d83615cb2bcf1466d1e936f3ca41b | 4 + .../fff39338583ec7b5dd791d75537a9cbc59d81027 | 2 + .../00102d3de8d3536dd621f8f9ac76e00dee038465 | Bin 0 -> 4176 bytes .../00156231442bd8d62cc903875ff20db54ca872b1 | Bin 0 -> 131 bytes .../001b2f8819c5a1cb030633e392c07678f426b1e4 | Bin 0 -> 101 bytes .../001d5dc631cdf454a42cd7fb8cd687474af7e588 | Bin 0 -> 15 bytes .../004a2cea247a4de8387754b77502b488ec46827e | Bin 0 -> 107 bytes .../00503a4b8e8dfea98cdeb55c286ecc8268017b77 | Bin 0 -> 569 bytes .../00578911907efddd7d595697d2836562c44119a5 | Bin 0 -> 154 bytes .../00a7de7ffa99500823cffb6480b19bde9ab47257 | Bin 0 -> 363 bytes .../00e062b3cb85da0714fd94fac00e921770e77ab2 | Bin 0 -> 89 bytes .../00ead10264361e25a74cf1e87c2fc54819476d80 | Bin 0 -> 2024 bytes .../00f88f0becde39f2112482f5f59eae86e9e5a72d | Bin 0 -> 64 bytes .../010a92d9c12d2ddc3985491d57be5bd24f33976c | Bin 0 -> 291 bytes .../0113d82e3a16c8f4b7a9c94a959696192a25f264 | Bin 0 -> 64 bytes .../01206287c8ed6efe857f4d69bc855b393f37981f | Bin 0 -> 230 bytes .../01405eb515a1bbe06f6c798d7022f2a5193c5d19 | Bin 0 -> 291 bytes .../014a6e98d8f8e3f99271e6c3b6f72c507ad214fa | Bin 0 -> 1371 bytes .../01972b26260e27e42e068c597510f2916d28b9e6 | Bin 0 -> 317 bytes .../01eb7bb1aa59cb9ad4d3ab14390faaba19311ebb | Bin 0 -> 265 bytes .../020b0e95729fafeb6c333002f79320dd15fb6b70 | Bin 0 -> 133 bytes .../02631848f36cc4f994abff6cd2812470e8a2251c | Bin 0 -> 942 bytes .../02a2a520552d2fd9993ab9a12dba26dfdbe518b0 | Bin 0 -> 403 bytes .../02b75cc44df6880ea3a019b7b309d9dd95cf967b | Bin 0 -> 7506 bytes .../02ca6958aaa05b45f2c31188fc7b4b8c4743091a | Bin 0 -> 112 bytes .../02dcaf09c5c37dfd0dbec80fadd11135f920bf35 | Bin 0 -> 4769 bytes .../03052fb170c1c7063757f32402bc52150da88bdd | Bin 0 -> 122 bytes .../03206d66581a51a964b116cf014dc2643f70e3dd | Bin 0 -> 542 bytes .../0335f6559a2af33a2ac2ab2227ff597262cb7493 | Bin 0 -> 1405 bytes .../035dcb3b030393b52a59a6558bba0abcb4f79a98 | Bin 0 -> 1818 bytes .../03682339034cc6b799822e33d8437192a518f8bf | Bin 0 -> 141 bytes .../036966ee48c0c2366a3e47e1a3adae2aa87e73b7 | Bin 0 -> 630 bytes .../037421ad3d4a4bd5dea9d939b18b5c092df16685 | Bin 0 -> 5071 bytes .../03c83ea7e9b699ca690fc0808f0e7481db4d48d4 | Bin 0 -> 3669 bytes .../03ca06900a06aa67313329f58730e098ea29ec21 | Bin 0 -> 12312 bytes .../03e7422b960fed974c98f5e10215ba7c76c6e5fb | Bin 0 -> 60 bytes .../04133608b25fe706a5f36e6dfff4c6d01869116b | Bin 0 -> 1285 bytes .../0441425699dab543833b12b45bbc6be413d7a049 | Bin 0 -> 92 bytes .../0452b2debc563f5d69c6160b916f710db88a6319 | Bin 0 -> 218 bytes .../04562deeb100fb696ab70a45c7e5b823fb4ca722 | Bin 0 -> 908 bytes .../047ad51059315ab1dd033c695ac72258387a6a7d | Bin 0 -> 97 bytes .../048b8a57e42825e7e5efe2c8d682e6c187bbcb54 | Bin 0 -> 299 bytes .../04f5e552f1333091fe0ecb1bc9409490f108b257 | Bin 0 -> 3156 bytes .../04fe02714a20ac5adbe34823da22f3114349fb3a | Bin 0 -> 230 bytes .../05118779d1d46a0fc9232b9764ef195e3ad46177 | Bin 0 -> 418 bytes .../053e5269c3fcb81a941e2644e2f616d47dd7e713 | Bin 0 -> 1265 bytes .../0542466c37373bcacbebb1627b36ce806dccb26e | Bin 0 -> 291 bytes .../057d80002c4f67922aeb234d24f65ae889bccabf | Bin 0 -> 2028 bytes .../058bc8952b619ed50929205dab6074d07b446b2e | Bin 0 -> 89 bytes .../05922980dabb8e7559ea6819930e692fae50bb6c | Bin 0 -> 999 bytes .../05991ebde4c0d0bcbb008f8053d867b694cdee87 | Bin 0 -> 1193 bytes .../05a7ab22e53e29ed21d7834b456ef347d6842aaf | Bin 0 -> 7448 bytes .../05f33c2ed847bf9099cc1c9fee52562af75f0217 | 1 + .../06476a4bd9b94fad36e7ef556311af9b881d5873 | Bin 0 -> 542 bytes .../0664661e0ff88cc988550712a97f00852e9c1fef | Bin 0 -> 259 bytes .../0664bddf242998393586c83d9874f58e3bf0bf70 | Bin 0 -> 139 bytes .../066baad253c36f207bba42b9624f9fdf3277d142 | Bin 0 -> 41 bytes .../067b907e35ff4d0c1345699d635af7c410dff4d9 | Bin 0 -> 4506 bytes .../069ec2afb81a6619b9b3d1be298676a5f58e1957 | Bin 0 -> 304 bytes .../06f2b0dab06751e577767bb6e24c753bf9437fc6 | Bin 0 -> 331 bytes .../0719deff45ac01f3abc96f29567ee1d82f6024f3 | Bin 0 -> 1036 bytes .../07305392b7ca72ac038ed111fa0884c506bf09c0 | Bin 0 -> 70 bytes .../0734f46759473683dafc6bda9e2971fb5e626fc0 | Bin 0 -> 59 bytes .../073756c4a824cdcd193d8494b019e08ec18b08c9 | Bin 0 -> 698 bytes .../0745efac48454992271aad97e40d3910d664e58a | Bin 0 -> 520 bytes .../07cf8164c68ab174e1332a7158ea0ff555a4c81b | Bin 0 -> 2993 bytes .../07eb363a10cefd0bdb7612450830090e7eae585b | Bin 0 -> 10 bytes .../082155fc2834ca88629716b45b67f5a8ffaf4a41 | Bin 0 -> 1673 bytes .../082b0a45a5aec73fd9673a355a1496dbcea156e7 | Bin 0 -> 65 bytes .../086a9b2e7b8cc5c63b38dcd9408cf6ed1140ea1d | Bin 0 -> 536 bytes .../08a4b4b31e384089b1a8355800fac27854434549 | Bin 0 -> 317 bytes .../08f30339e945c30750d2e52078de0eb62d5d59ae | Bin 0 -> 73 bytes .../090d92eb3ff3bf45817ddc9b869385211ac4a89b | Bin 0 -> 94 bytes .../092862d28d6f1bebb7953bf5a5b75ce7444e3271 | Bin 0 -> 145 bytes .../09762f34d2e66ed8e38923e228721d1b61149227 | Bin 0 -> 40 bytes .../0984513f4e24dddc9edec05cef54d5b7a9a37256 | Bin 0 -> 604 bytes .../098e3ee083c524a347f54d0043e1f99c43239636 | Bin 0 -> 951 bytes .../09d4851af4ce81b483b466e718276fd5ad71c896 | Bin 0 -> 151 bytes .../0a0d8a1affc48649fbf3226f44796ce1978fac50 | Bin 0 -> 126 bytes .../0a169b587d15776b0ba89e08ea559b28c2e83773 | Bin 0 -> 2853 bytes .../0abf2e667cf4dbb70cff997ab0c1fc31515851c5 | Bin 0 -> 317 bytes .../0afce4b071a8367a9cc72045fafc0a4141cf2396 | Bin 0 -> 259 bytes .../0b05210cdbf528615822922c12061829428665bb | Bin 0 -> 3628 bytes .../0b1a6694266cf22426ff2a6278d76d7934a6a1f5 | Bin 0 -> 2070 bytes .../0b2fd85fa78e04cfd2818ee1b9f4401a7aba8d53 | Bin 0 -> 614 bytes .../0b35b94626db87d07a50974a2fbb7902789db99a | Bin 0 -> 26 bytes .../0b837623823be9afc7c6a91aff85ee94edfd5c92 | Bin 0 -> 31 bytes .../0b913aaf3fe8194fadd0769ec92a5fbcdf7734fd | Bin 0 -> 470 bytes .../0b98e8a02c0abd5537199a01d3237dced8382342 | Bin 0 -> 40 bytes .../0bddbb44533f037bf79b3387ea2562fa24b2be34 | Bin 0 -> 303 bytes .../0c015e7fed67e658bbed1017f14ed246b02d7008 | Bin 0 -> 7631 bytes .../0c48562d684795597cafd1cfb816f40040bc71fd | Bin 0 -> 83 bytes .../0c65c4ea35fc52b96ef523319ae11e90f2f95ee1 | Bin 0 -> 1191 bytes .../0cc9fbfc7643b5a355e7c504926d36e2fc1bdb24 | Bin 0 -> 481 bytes .../0d4755d0bb7962a5374a5ee493b7748c98e5c998 | Bin 0 -> 906 bytes .../0d52df5a370446b366e811e88cb93dc4c1dbff97 | Bin 0 -> 2495 bytes .../0d8c78853b576d459b0a5bdc9b0069f4fb5b13af | Bin 0 -> 3141 bytes .../0d9683772edcb00214150d635e58ebd94274107f | Bin 0 -> 507 bytes .../0daa5d02b074cc0279ab7329c21c4d5c9d26e0e5 | Bin 0 -> 368 bytes .../0ddf2e1252169f3f539f721b29b7d652429e6bee | Bin 0 -> 3654 bytes .../0de2f5d7d966d2194d5d5865e20efb5a29369bdc | Bin 0 -> 1729 bytes .../0e185ba2486cfc28ba520babab3ba3e05a4e0a0a | Bin 0 -> 724 bytes .../0e3e6168898a1d7e0529cbcfcd6b0ea0e76b4c17 | Bin 0 -> 248 bytes .../0e45adffd1d6293058646a9cabe1e383da14d158 | Bin 0 -> 64 bytes .../0e54dbe1c536a55b9576036d92f3433e20111120 | Bin 0 -> 1003 bytes .../0e6d90eee2eb009197288f528785a0058a13b340 | Bin 0 -> 1066 bytes .../0e7be06ae50bf33c83ecba2725752f4c070930d8 | Bin 0 -> 402 bytes .../0eb1f827b7f8b8716bc8a8524c70aa208e260a6b | Bin 0 -> 2352 bytes .../0eb5037935ba1c2791f3b7e9bc8470c3c60d2aff | 1 + .../0ecb0b957baccee8096e4d6535abb3526dafa755 | Bin 0 -> 655 bytes .../0ef75cd1fb0b62efeac4831c610c35d24e5b02f1 | Bin 0 -> 1460 bytes .../0f015401ad9be1cb62747cc6821d73fe52d4e03e | Bin 0 -> 1793 bytes .../0f040de3cc4b7b4e03945f34c053316050c48495 | Bin 0 -> 255 bytes .../0f176f00bdc350da61ada057914b5c7f1db46b5b | Bin 0 -> 3016 bytes .../0f21b4573e4a2648c4c0fc922069d9c229829e73 | Bin 0 -> 100 bytes .../0f37beb612741368dde04e513ead57a6567afd60 | Bin 0 -> 707 bytes .../0fc6811e0b1996c9a59b06e0cdc0c6699e738b1c | Bin 0 -> 1454 bytes .../0fe4033b93e560fc1ef96495ec61ada87112edf5 | Bin 0 -> 3058 bytes .../0feb30de47f9daa533fc8c46e0e77cf4d79780b6 | Bin 0 -> 71 bytes .../0ff2fd96cb71d2e191ee92691f8d319a32abdd83 | Bin 0 -> 429 bytes .../0ff82ee04abd41f8ecfa98eb5b924b9b0c5ce6f0 | Bin 0 -> 115 bytes .../100c31ea10b3cda4b90634a6f536339bf747a914 | Bin 0 -> 1982 bytes .../10559cfcf1fba796e7638b85caf77a2bd709678c | Bin 0 -> 115 bytes .../10559da22f9c0879cadbdc19c863e6d82cf61249 | Bin 0 -> 124 bytes .../108ad50e4e5ae5573bfe785d27d35cfa2f4adb0e | Bin 0 -> 354 bytes .../10b0fab0581603e10a0961b4bb82c3a1305a2d04 | Bin 0 -> 1237 bytes .../10cf4338a9cdcd6ec96bdf1fe697302b909b5e7c | Bin 0 -> 49 bytes .../10dbde0c88cbebc498ab7f8895a00b8426b3f3c1 | Bin 0 -> 110 bytes .../10e6998c54478d4c5fdb79d7e44e5acd78418bc4 | Bin 0 -> 415 bytes .../111d272efaf4f8331f1012fe6194beda52952211 | Bin 0 -> 1239 bytes .../1138005f46af8f10bbdfa28c911bb21dc79e4aad | Bin 0 -> 597 bytes .../116de0673e8912c21838b868d1846d24d71e173e | Bin 0 -> 371 bytes .../1179572eaa4a414c307fdd1dbcd50ad4941e8ca8 | Bin 0 -> 259 bytes .../118a6a5b78e95cbf561830b43adb53eccb313178 | Bin 0 -> 4035 bytes .../11ebbc92980762dbae6375197003e7f1c37347ec | 1 + .../11ecfe3a44eaefd3f09f23fb89ea302e3d127625 | Bin 0 -> 41 bytes .../11ed87e596cc33a713dfeb01ba73d69e0998034a | Bin 0 -> 56 bytes .../11f2ec7f98ae700929e4459602ccf0c8513a67b3 | Bin 0 -> 64 bytes .../120858e07e43c37fc25e9769f44f4d9964f05068 | Bin 0 -> 680 bytes .../12414c1eec82ffe6fb613f83cf3f0a7ccde7da95 | Bin 0 -> 233 bytes .../128809bad521d31f3e25a4496becc790a0fde812 | Bin 0 -> 134 bytes .../1295b3d55471f062e2f34d012c96c3ee04d55f90 | Bin 0 -> 216 bytes .../12bb8049e63e2cd6c0765399918ccb69b9f0e2a4 | Bin 0 -> 692 bytes .../12bc2bd0401e59d49142c2060b6ad003092a2caf | Bin 0 -> 82 bytes .../12cdb10cf6cf456a2d6051781007e6be4c4d6127 | Bin 0 -> 500 bytes .../12cec292450a1485c390a3e23718cb93e16d377a | Bin 0 -> 53 bytes .../12eefb2adf28b34b59c3e5dfed363069cc8d6133 | Bin 0 -> 4603 bytes .../1388c2fe8783e1cc7415edbc58ce634ec48ed5dc | Bin 0 -> 203 bytes .../13ad985b34dd23ff171e605c52cf0a521053bd98 | Bin 0 -> 77 bytes .../13c2f79b53c9cf4739e4d36e807c5c6b9813d666 | Bin 0 -> 911 bytes .../13e333638c59d6d384e48697ae31114f21e091e4 | Bin 0 -> 1265 bytes .../14987bfee680f0cb425a9bfc082fea8eae4ef0eb | Bin 0 -> 302 bytes .../14dd6afacfef0574c24043d57cda8286267c2548 | Bin 0 -> 537 bytes .../14ea55eaa83aaea8a1d19c7fb91800400b865889 | Bin 0 -> 519 bytes .../153802aa7b5abb4b4b136136352a20071a40601d | Bin 0 -> 935 bytes .../15afc9c50604c4b1f43b266800d7be37fe8d436e | Bin 0 -> 344 bytes .../15d0d2552624acf821e903fa1f9ebb20191d8783 | Bin 0 -> 603 bytes .../161b6c94c1f8648af00c5420143360b4364bdad5 | Bin 0 -> 539 bytes .../1686083e41597d16a9f17b5372873e1f6755d8e1 | Bin 0 -> 1122 bytes .../16994668de260f6a7fa79eff76fb572c6a943bd3 | Bin 0 -> 417 bytes .../16baa1ce1a91d72bf264b5d248f46d026fbd6952 | Bin 0 -> 5096 bytes .../16bb3f571429b29eea5572f28f82acfb5dbe3f00 | Bin 0 -> 158 bytes .../16fad8c16477b5ca489d8842fc4b805fdfc27797 | Bin 0 -> 1444 bytes .../172c7efa04790c94a8db11177aa97584c192f666 | Bin 0 -> 2895 bytes .../175a5546a29a410b7d25fb02613d03d3737b97b5 | Bin 0 -> 2056 bytes .../17b04d22a5d2d8f1864e12b00b36158c8e478178 | Bin 0 -> 698 bytes .../17dc916b933cba52cb68ce0b59c86023b4763f46 | Bin 0 -> 1188 bytes .../17e26f22a52ed555bdbfb5325d23400fc13b4233 | Bin 0 -> 88 bytes .../17ef9ad03551d68f46444e8ce8c159071e313393 | Bin 0 -> 604 bytes .../184903d9c3ef66f15f086d74d79e90b760bde82b | Bin 0 -> 74 bytes .../187dedc942403e0c62ba06f2b336144ba44de2c5 | Bin 0 -> 685 bytes .../18c6a11c56e49a34cb62d44180740c38ad31e877 | Bin 0 -> 499 bytes .../18dfe3536f5163424b8242ffec3f31604b68b0df | Bin 0 -> 1814 bytes .../18f2156b52ed135da2d6a01097291ae1fb3267f1 | Bin 0 -> 112 bytes .../19076cb8629abd6ea01b6791215f1124027eb400 | Bin 0 -> 56 bytes .../190b3558889e610914a501bce48c1de01c9118af | Bin 0 -> 3278 bytes .../1954852d383a7223e51191c41e4af07c9ce53c8f | Bin 0 -> 40 bytes .../19604bbb58bd18a5acdc0ac2c3743eb3ee125a88 | Bin 0 -> 39 bytes .../1967c24b439ec879b88c6714848a585d501c353b | Bin 0 -> 224 bytes .../1976b443b53d8f58f794cf88fddd5e7e2c82a46a | Bin 0 -> 1268 bytes .../1980946e89a2c36849afad1f353c81da43fb7966 | Bin 0 -> 924 bytes .../198eb7ab9baf95afa008eee00de9ab0b67efdae6 | Bin 0 -> 291 bytes .../19c90ad901e39adec8044080f9f2d5aad0bade5e | Bin 0 -> 212 bytes .../19fa09e3ea28b37b6e4ecef78f391084317cfefc | Bin 0 -> 1314 bytes .../1a24758fbc5be7a07ffd78b442e10b505bbf7421 | Bin 0 -> 110 bytes .../1a28e946e826ed0dd04dda45e9722562b7fb4abc | Bin 0 -> 557 bytes .../1a45a6101cf243a7c97f3588a0c8f0afbe9a0a60 | Bin 0 -> 1265 bytes .../1a4abe1c2f990aac2845d3ea10beb8e7fa278e6a | Bin 0 -> 1095 bytes .../1a4ac556a7cf2f858d670a942176e846a1849e12 | Bin 0 -> 1230 bytes .../1a634da71cebc57aa32f86877fc017fcfc706bb6 | Bin 0 -> 53 bytes .../1ab77227c9b91ad8968971d16ab36b4908504552 | Bin 0 -> 71 bytes .../1abcce7bc47c39003eeabc0cc1cc22f1176042da | Bin 0 -> 81 bytes .../1ae4646ca7d5f2e7cbca43b60f1b754c2f267b95 | Bin 0 -> 464 bytes .../1b38f6017e1368009eaaaded05a22fb4bd46bd7b | Bin 0 -> 982 bytes .../1b9bbd2d43312c08ba01065631cc24baf826f0e7 | Bin 0 -> 92 bytes .../1baa3bee147c8c902aa77ac5e5e1bfb0d8e3d9e0 | Bin 0 -> 53 bytes .../1bc554660a63155ed1de0f7ba55dc8e2595b05f9 | Bin 0 -> 305 bytes .../1bca42be88dfb879dd43b04eb7222a5363525f78 | Bin 0 -> 1335 bytes .../1bea53917dcf46485a621f734cd71022c23cb271 | Bin 0 -> 602 bytes .../1befedbdc185d5de4e4d58251604d1d930109482 | Bin 0 -> 252 bytes .../1c2dc1448c12fd8c31053864589e69ba3b4ebb73 | Bin 0 -> 384 bytes .../1c3456f2675c9bb75d0cf433d5233916e7a9f683 | Bin 0 -> 6486 bytes .../1c4167041e9987bb3cba75ffd17f296c95149996 | Bin 0 -> 96 bytes .../1c5e86b542116ee6c078b729caa49f48d76a047e | Bin 0 -> 2594 bytes .../1c7bb484fba855911687fcf53bea96b951a81f26 | Bin 0 -> 833 bytes .../1ca2cf49399526fb2fce857155e56d9ffc1a1347 | Bin 0 -> 97 bytes .../1cd16f2fcc9bc108fc87c2db7a70753758da7114 | Bin 0 -> 1936 bytes .../1cfc0330a22c927ee9a458425f65804eff3bc897 | Bin 0 -> 128 bytes .../1d18ad1672d14f97829c31bf04ec79f27537e6c7 | Bin 0 -> 654 bytes .../1d25d6a718b7c4ce0dc89f09f96e7ab8fd09b670 | Bin 0 -> 152 bytes .../1d52aece28ed72980497de986eea5b1cc519eeb4 | Bin 0 -> 1855 bytes .../1d55bb6a710fcc3d93d13439f1c995d8f3900bf8 | Bin 0 -> 70 bytes .../1d9d21f2256769b5ac72c0724de096e88c33c699 | Bin 0 -> 6388 bytes .../1ddaf976e402935d7e4bed539305e4d09f4b82ec | Bin 0 -> 1486 bytes .../1de702bf86038291bd0b9caa2fd9ba4e0e815755 | Bin 0 -> 291 bytes .../1decf83e9e83c254f92daca4c5f13cb0c37c9bdf | Bin 0 -> 1409 bytes .../1df9215e70c7475232761fb83c75408fe221f1f9 | Bin 0 -> 222 bytes .../1e3db9560df699e463cf299576dce9db37db09d7 | Bin 0 -> 6205 bytes .../1e7d6f17c1327fd06d0abc332a20af95f672ce51 | Bin 0 -> 2141 bytes .../1ea335ffd003808eabcf063c4ebf4048aae4ffd5 | Bin 0 -> 83 bytes .../1ea67fb478417c904a86a1a6b3000709d6033f66 | Bin 0 -> 5674 bytes .../1ec22d88d9145f8da0e4fe9e435e21dfb4dd1721 | Bin 0 -> 72 bytes .../1ed8e9a338d3c73f227cc03d2fa19c47af54fa70 | Bin 0 -> 417 bytes .../1ee8a7b18df87f60593bb2c4838acb8f76325c01 | Bin 0 -> 787 bytes .../1ef0f069d59842cf9a2828b8c32e03a1991d56ec | Bin 0 -> 88 bytes .../1f2f60378948769a7bed8bc4d04bee6bd3b5b0ff | Bin 0 -> 74 bytes .../1f365c476c7058c6d54ca06145e6ee2866289303 | Bin 0 -> 994 bytes .../1f3e7610b4468e302f7997ad36cc93dc64cec53d | Bin 0 -> 484 bytes .../1f63e220a7878e769fcbe7ee73546c5d3c535d48 | Bin 0 -> 715 bytes .../1f802b9854986ca699d6901b471348415d5e9639 | Bin 0 -> 215 bytes .../1f81e960ff5040f6a080777c60f0e0e703145d02 | Bin 0 -> 569 bytes .../1f82d6ec7892a7271304107aa8f38687240a68f5 | Bin 0 -> 5297 bytes .../1f8444025365c981a591e731ba390d12a09a2149 | Bin 0 -> 558 bytes .../1f91918a05095e6a950dbf969e8a874075483881 | Bin 0 -> 1034 bytes .../1fbcbb23c44d74cd497c3a49c661d58b521ddaec | Bin 0 -> 1506 bytes .../1fe80f79208724f9af31d9ec6471f91e61a05e57 | Bin 0 -> 2840 bytes .../1ffe0e1d26026c59c07357e752f6695e4c30176f | Bin 0 -> 520 bytes .../20004003b6cdeac02f3b02f7c2196b248f0fab4a | Bin 0 -> 35 bytes .../2029d5ba55fa9ebed46dadfe69622a64bb43e151 | Bin 0 -> 569 bytes .../2039c6bebaff279f8a96cbcaf45d6f85cbe96bd3 | Bin 0 -> 57 bytes .../205335e1955c7b6712e0a28b77e99a7fa6ce84c8 | Bin 0 -> 198 bytes .../20592f12c9cffa105794e26e3a55de8d5b8e5387 | Bin 0 -> 276 bytes .../209ca394fbd76a5de14167a58aba3a6c74ae0753 | Bin 0 -> 1356 bytes .../20a29348235fd76f8bacbc6be2b6cfa3fc266f77 | Bin 0 -> 105 bytes .../20b8bf3346d26449944f9aa72315d60448049548 | Bin 0 -> 1194 bytes .../211ed903b82d167949fa5cde87ccde323242a05c | Bin 0 -> 137 bytes .../213d60dab98521b972ab614d574db528187507d9 | Bin 0 -> 66 bytes .../2140f97c77ba613381747dd63783c92deb165424 | Bin 0 -> 103 bytes .../21431984b2004306804d04aac1c3c53b602710bd | Bin 0 -> 4616 bytes .../214595654920bf77cd88c1756179355466452078 | Bin 0 -> 2308 bytes .../21b78258250f0f20015bdd007cb8aafa4e538ba7 | Bin 0 -> 976 bytes .../21c3742920b5ac5440519fccdcf36977774a3101 | Bin 0 -> 32 bytes .../21f6ae90140f77c4567fabc5395a0fae0281bb86 | Bin 0 -> 259 bytes .../22160a3beaeb27b8d87a1931e758a5727d0b71c1 | Bin 0 -> 648 bytes .../22476ec901f784d41a6644332d15052f7d4e10d1 | Bin 0 -> 389 bytes .../226d269485bb093aba5b3eb36a9aab5b1c4f78aa | Bin 0 -> 185 bytes .../22737ac7e04e303f4fddffe024f4488326b5589e | Bin 0 -> 19 bytes .../22bf4503dbdc3d617ede125c2e7211de0b3933ef | Bin 0 -> 470 bytes .../22da11cd0685ec335baa9780cafff56e8149c310 | Bin 0 -> 1001 bytes .../22fcfaa56cbacdcfde76036dd326d11c86d32d58 | Bin 0 -> 220 bytes .../230171709ab370dcc3368c1f0f22cc21a24ef522 | Bin 0 -> 956 bytes .../23276d3f6658703a90f42202da066e0325cdf3d1 | Bin 0 -> 143 bytes .../233a40adf9e76466577763db58c4454e3b5ab9b2 | Bin 0 -> 145 bytes .../235b3e619fff5e21d59a989e4cb497de1cc87dbd | Bin 0 -> 630 bytes .../2360e90a984eac052b548fe47a5da3a93a888b13 | Bin 0 -> 1229 bytes .../238c889c28487017527b485bafa92edadaf30b90 | Bin 0 -> 615 bytes .../239487a2faa027f28dbd9b2fe015b3938637b4cc | Bin 0 -> 1465 bytes .../23ba17039ee532620c912e8a907c0d7c4981b1e3 | Bin 0 -> 1030 bytes .../2464fd79a4b2cb729dfc3efc7f058f78734c8bc3 | Bin 0 -> 131 bytes .../247b247b86a0756d3311ae343f1d094f2447f18a | Bin 0 -> 127 bytes .../247ce7d21a2e6ecd23f981a3c0f6b923fd6644d7 | Bin 0 -> 517 bytes .../24829ec671ba4351cad0faa9f961bcfc906c91d8 | Bin 0 -> 112 bytes .../248aa9c1471523fd0edb569276dfe8e9d151ae38 | Bin 0 -> 243 bytes .../249eba4f887ce0924580dda04e98de693eb03b1e | Bin 0 -> 77 bytes .../24e9a7fa3487e07c46ce08ab5c9d7eadbb7f4252 | Bin 0 -> 130 bytes .../253901a6921b140709e7f3e8a0cf8d033a5c347c | Bin 0 -> 71 bytes .../258d2fb76b1f4126c1a093cf5df2ae43577cff56 | Bin 0 -> 1717 bytes .../25b6457e26d361c2f4258b37f7fcf1d0cac2847a | Bin 0 -> 112 bytes .../25f177e166cadddd042db507e92bbd622eed324e | Bin 0 -> 633 bytes .../2628c25fc6840fb89ed23d85e4803b742b8df94c | Bin 0 -> 291 bytes .../2635f2cde53382eb26fad2d66fd5a2cbbe9c7774 | Bin 0 -> 5501 bytes .../26b71fc467567fe71f01165d462d987559884ebd | Bin 0 -> 44 bytes .../2714e8220119a41f5351265cef293283d5379708 | Bin 0 -> 5952 bytes .../274179250382d7b89e425e0b4549f22c70e67a44 | Bin 0 -> 265 bytes .../2742a718d70f51dad97e00e547833a0e778bdbf2 | Bin 0 -> 19 bytes .../27551854faf2c3a093121d83ab558f36378b1e7f | Bin 0 -> 8093 bytes .../27556c80bfc362ea1db45c6d7dead130b982202c | Bin 0 -> 321 bytes .../2772260ed8942f81401c0223b20dda31a69f17f9 | Bin 0 -> 572 bytes .../281aafdcd2879848e30ae09451516fac98cf7603 | Bin 0 -> 233 bytes .../28269062be77a46009fd7033ce027001d31d4788 | Bin 0 -> 291 bytes .../28b0cbaf15f0500e76a58b4a68992276e524dfdd | Bin 0 -> 1212 bytes .../28c57332cb674a90862c14f29180e68e8b21ea2b | Bin 0 -> 3099 bytes .../28ca22370d549bbb87152af88024e56024cf0b52 | Bin 0 -> 96 bytes .../28f7d78d0015906730474a147fdd22f95adbae51 | Bin 0 -> 118 bytes .../2907c6ad5ea2a7d5a94009bf1c37f72e6ae71446 | Bin 0 -> 151 bytes .../294518fe440dcf341ee2fddb045a8f1c26e121a9 | Bin 0 -> 486 bytes .../294a3cd09e59be1f885a88ec82fadcaddfeeab4f | Bin 0 -> 489 bytes .../297523e2bce2678f3575904f8a222cebae147045 | Bin 0 -> 55 bytes .../298e600d3f004acb5f46ea1824f771b6efffb674 | Bin 0 -> 4202 bytes .../298f6b93118ac372c7b028e619d6cf17ae1925ee | Bin 0 -> 241 bytes .../29b056f14f18f77858b9a87a658939a2d54dce81 | Bin 0 -> 57 bytes .../29d778689675dab07d4ab6a0b2c546714fc86d82 | Bin 0 -> 586 bytes .../29e505f04e0f2bc49898b73ab5a6d7e427c45a9a | Bin 0 -> 72 bytes .../2a28028facefe100d5c701acbe1ac8a1d57622f2 | Bin 0 -> 2364 bytes .../2a41271378338bc85173ae079b4fb1e3dae93a82 | Bin 0 -> 165 bytes .../2a926275154a9f7a26a1b8cae5c1102ced495bde | Bin 0 -> 664 bytes .../2aa95a4b4e27b02d075cf4cf2c781ebea4b1e878 | Bin 0 -> 3882 bytes .../2aff3d196e757db4f74dbe2b2a8fdce1194f1cdb | 1 + .../2b084a0cad95be5fe64168532d95c61bfd35637a | Bin 0 -> 104 bytes .../2b2f4187e8f1e28e211f2c732e9e5d13aa333091 | Bin 0 -> 1610 bytes .../2b4027edb24edaf76972ecdefe61dbadacfecda1 | Bin 0 -> 77 bytes .../2b483e0789176ccf25ea393bee74f39f1ddd02af | Bin 0 -> 2286 bytes .../2b64d593ee3d08d6c0bb8066ef5ccf6cd5cf8bf2 | Bin 0 -> 2368 bytes .../2b9f7f3429736c6d9a78b5439f7b242134cd8a06 | Bin 0 -> 412 bytes .../2bcf51781a3eeb3fce21a073df677765679e433c | Bin 0 -> 105 bytes .../2bf3e5319cd38b2ae31dc67d790f09a2cc00a52f | Bin 0 -> 6366 bytes .../2bf9e8f595abb498d7b95437d7cbf1a09c4cafc7 | Bin 0 -> 28 bytes .../2bfdc3a477f55cb308015eaab655d276824397af | Bin 0 -> 1953 bytes .../2c172e89c417cd4c4e12e4aa311e558eb7345449 | Bin 0 -> 212 bytes .../2c7f0c522b35a9e736de6a3298310a8370a129d6 | Bin 0 -> 136 bytes .../2c8620dcdcb31d3dd54497ca8e2dc87c1f8e9bd4 | Bin 0 -> 138 bytes .../2cc85c1e0d327f6c18e6f3c27d304ff15147928a | Bin 0 -> 376 bytes .../2ce2ada4615ff14e435859e5994b5b95a4f18d64 | Bin 0 -> 347 bytes .../2d2795bdc30449e4d578cf790599fb916abc7348 | Bin 0 -> 4964 bytes .../2d31f0bb21e2b9732eb0e86937a9510ff526e275 | Bin 0 -> 129 bytes .../2d46570ab96922b33ee265b9fb49da9cfce6e62a | Bin 0 -> 32 bytes .../2d7377f47f7526aa37663d50c17150148ba16e1b | Bin 0 -> 995 bytes .../2d8ce44b307aa52a6fe4388d9dbe279aaa5f1a1a | Bin 0 -> 265 bytes .../2d96720090a7fc357288b1c565deb03a782b7ddc | Bin 0 -> 388 bytes .../2dd94a0e77109e7df795b335ea8aa14324df632e | Bin 0 -> 136 bytes .../2dda0759568e3180e9960d869fdda611e3e02799 | Bin 0 -> 1415 bytes .../2e06743e1ee03e8272d478ea10f6856685f113a0 | Bin 0 -> 270 bytes .../2e12db2b172ef6f3b522273d1f6e4d52ccbff0c5 | Bin 0 -> 397 bytes .../2e3de6792acaaea843222dcb96665cabd02d78bb | Bin 0 -> 613 bytes .../2e92bc735bc537f5d2d99d9062a7813f5bf50890 | Bin 0 -> 2803 bytes .../2e9fa43daba492f5342efc8f05abec87c29950e6 | Bin 0 -> 8051 bytes .../2ed09bd21dedac787685232f3c5d20a78ecf486d | Bin 0 -> 756 bytes .../2ed6671868cffb7e30d2e751475ba6865270a286 | Bin 0 -> 94 bytes .../2edbdb88766bca0bc588c7b0f64cf4722dbb01ed | Bin 0 -> 850 bytes .../2eec778b210d1b8b676dea82ea8fa692c072971f | Bin 0 -> 1062 bytes .../2efada6c1b1fa28da3f527607bef68ff18487a48 | Bin 0 -> 129 bytes .../2efc62fce38727af8aacbeae06f741c496c3c101 | Bin 0 -> 8397 bytes .../2f487bf5690e42cdc6406fd2155e0e7fd9d7f90b | Bin 0 -> 188 bytes .../2f4ca6ccc87a2a69a715eea7b1bb92eb00b7e7c5 | Bin 0 -> 333 bytes .../2f58d3097ce56b13242c61327f82eab609987dfa | Bin 0 -> 196 bytes .../2f5e0aa21845828e62d428e1c6107af44832d753 | Bin 0 -> 357 bytes .../2f669d1d888a62b10ea78746ae0e96053b4fdb2b | Bin 0 -> 443 bytes .../2f7759ae015a2e777753601c628888fdb6612fff | Bin 0 -> 5282 bytes .../2f81443c141517f9ab0b85c9365a13a63835b748 | Bin 0 -> 202 bytes .../2feb915533d5de39c7d97afde5df6a4bd251e228 | Bin 0 -> 86 bytes .../2ff73326dd70c5cfe1766d21e76359c35d351748 | Bin 0 -> 216 bytes .../3020ab0852d71c1a2922e6a504834268e6998736 | Bin 0 -> 4251 bytes .../3033134271c266485f7834c09e83483964df2bef | Bin 0 -> 236 bytes .../304aa8a7d1c4cbd3203a97ddb598cad18d75ed87 | Bin 0 -> 20 bytes .../309c0b43c023606ec57fdbc2a6affcb6a1e8fe12 | Bin 0 -> 282 bytes .../30abcfdef5f4d3698e5c9b8e2d16bab9947e811f | Bin 0 -> 67 bytes .../30c197c95a3a9cee643655f4879fafada33e2f75 | Bin 0 -> 54 bytes .../30e9efc9554d67002095818e896ac3cb78048bdf | Bin 0 -> 6648 bytes .../311f39a14da9388740e314a519265e6211eb917b | Bin 0 -> 111 bytes .../316b5b4b7cce7ce7f3d56a21f1fa19deb29b1751 | Bin 0 -> 520 bytes .../317268b39e7f02d5540c2fd2e86f23c21cb81cf9 | Bin 0 -> 4582 bytes .../31954c9f10d08ec0feb92284b4df520163f27d73 | Bin 0 -> 6306 bytes .../31b9d711c354ee25087386ba3184be793f6689a3 | Bin 0 -> 94 bytes .../31f76770ffb97c1ecdaa78df7f8f5404f6ad48e9 | Bin 0 -> 275 bytes .../321b987e906f83a3efad77af6c6bb33dc3ccbc07 | Bin 0 -> 1165 bytes .../321fbabf0a30abd2f230982c11a989ed840809e9 | Bin 0 -> 3927 bytes .../322299a02a5ffac5cf0ad57d9abe2a31c48a10a8 | Bin 0 -> 1941 bytes .../322eb000da2985c71a37c97f0ebcea66401640f7 | Bin 0 -> 2549 bytes .../32337f5c9e99c39982bb0e537d7cd9d6fc2f9f3b | Bin 0 -> 3279 bytes .../32516dd197394a7eefb7eeb2e88ac215dea504be | Bin 0 -> 455 bytes .../32adf7caddc78b0557de90fc120da2514943f689 | Bin 0 -> 307 bytes .../32c00889ccddc4280580c9c6e77d5feb951d01bf | Bin 0 -> 653 bytes .../32c7e8cc0a80968371754152a898167bcab95e50 | Bin 0 -> 659 bytes .../32d25377e7ea78bde80d1a0117ab522f862c6350 | Bin 0 -> 2086 bytes .../334261e89b9df0f019fa8d8226acf26a54692e30 | Bin 0 -> 79 bytes .../334b39ebd97643f0092214624329bf3cf860e54e | Bin 0 -> 2919 bytes .../3373158da8061b7ddcf8dc4a696fbad8869795c1 | Bin 0 -> 557 bytes .../33790a4556362dd627c9e3a269dbcee17922e5dc | Bin 0 -> 111 bytes .../33943123c7c37300e2419f0e5a0e891ff1a646b2 | Bin 0 -> 636 bytes .../33b4d7bf6da02e64e8f69e68d9e3ab7449aab88b | Bin 0 -> 98 bytes .../3432c8e2d3d7523d1161328dd158dd04a34a8247 | Bin 0 -> 101 bytes .../34567d79cff41bc7958935d33f8c58fd2b0b6519 | Bin 0 -> 292 bytes .../346231626f4d576a381b7efe559269a1d134e23c | Bin 0 -> 291 bytes .../34691f8b0436eca2028f6dc9780dea6bfc6b49d8 | Bin 0 -> 12 bytes .../347c569d717de692df6b335596c8f1404aad9f49 | Bin 0 -> 872 bytes .../34c77b6813c0d31b459056319655f7960cf4aa1c | Bin 0 -> 2584 bytes .../34cd4e4dede222df1389894ef0d9efd7008001bd | Bin 0 -> 1507 bytes .../34df40bac5442837a3b2b740637fbcea46554e09 | Bin 0 -> 15 bytes .../3502826909f9684993c321bc80e5cf542f7b03d0 | Bin 0 -> 320 bytes .../351eeffe0f409e3320217ba58dbe5bb50b40f8df | Bin 0 -> 73 bytes .../352c6269579f6b759f3180adaf280dd69012639c | Bin 0 -> 83 bytes .../353abc2e5dffb7adb7c549f48a36fb9a25fc17c8 | Bin 0 -> 5528 bytes .../354b299e37b3926765095760231fe36d6c67838b | Bin 0 -> 488 bytes .../3552024cfbd1ffd3706e06841b03b94b53e3f108 | Bin 0 -> 241 bytes .../357af43e63a1b15a1d6c52bcf420f11a3dee6acd | Bin 0 -> 4525 bytes .../3585c21703126803e4237fab38ac4eea259299b8 | Bin 0 -> 461 bytes .../359ecc11647ba9a80d1fcbd6f7414afd931a11e7 | Bin 0 -> 136 bytes .../359f691f2c9a2fda09fb2682085173a68d30fcb7 | Bin 0 -> 136 bytes .../35a8cd72f905d5682c08764ae575b4921db75742 | Bin 0 -> 156 bytes .../364728f85c87c56c6f5e01b402a3ca4f7e081a11 | Bin 0 -> 108 bytes .../367a6ecba754336ccf270bdbbdddb38ef8546cd6 | Bin 0 -> 76 bytes .../367cce148a2ac5fdf29e442813a87f2226f98f5e | Bin 0 -> 59 bytes .../3682dc0393dd328231d54b0384c3f4c81f21718a | Bin 0 -> 286 bytes .../36856cdb2e5eb8ec023d9fb15188e80217bd8402 | Bin 0 -> 291 bytes .../3686453cf9ad98591e7a662b779ee2f72c10e906 | Bin 0 -> 64 bytes .../368cdcfea57ec1edb465d369bc6854c7e64ed90f | Bin 0 -> 2931 bytes .../36e96f7b04f510c57e84fa7a1ef8b7c4f49c90df | Bin 0 -> 3105 bytes .../36f9a24d15f4181781b2d81b99bbb4ea65244dc8 | Bin 0 -> 1020 bytes .../36fec942305a02fe379646045ac45d3bbbab80a9 | Bin 0 -> 1444 bytes .../372206918639173379a81a1e4ce7c68e26c1f771 | Bin 0 -> 41 bytes .../3738b8059d75896f40c24277a8e86e4f99ba6c5b | Bin 0 -> 52 bytes .../37d7f3d49580f4fc59fc768df3603b44408927c2 | Bin 0 -> 3057 bytes .../37e65b1e1cf2492d761d20fecc0efd284b9bebd2 | Bin 0 -> 1003 bytes .../37e8357b2f8844a972a7722d339df8080ed6d02b | Bin 0 -> 13 bytes .../37f75f5ade07c50371a99525d95dc7306c2c6adf | Bin 0 -> 140 bytes .../380ce41402e855090920b63e1f62ad2b58de2449 | Bin 0 -> 11 bytes .../381c49fca989a670a7e6944c509fb0099dd9ee60 | Bin 0 -> 6541 bytes .../38296f1a9e41812d98a449717fbc3833d4ca1f6f | Bin 0 -> 517 bytes .../38390d5213e465270b63e57a6a489c59593bd013 | Bin 0 -> 3050 bytes .../3889528a2185bcb5c648f7a743f8797a03f7e705 | Bin 0 -> 789 bytes .../389dc6678b7a60841d19aec28c6569e0328adcb4 | Bin 0 -> 155 bytes .../38a17cda90a79760e9afabe65f2482ca1121966f | Bin 0 -> 31 bytes .../38f96cfad0404c22b6276d466e0d0115db7e4614 | Bin 0 -> 166 bytes .../38ff11e7abbab28be10945d7d2f967ff5e51355c | Bin 0 -> 3793 bytes .../39235b8dfac013b6ff20a4634b693bba3c2d8757 | Bin 0 -> 60 bytes .../39343d5c018d59a4fd5381ec78d40441453f6c52 | Bin 0 -> 2442 bytes .../39350aa86b43c8ab1b03ce97f98d20922ab1360f | Bin 0 -> 285 bytes .../3942fcd120b4ae284deaa9196b576d93792af2da | Bin 0 -> 708 bytes .../3a051de4719d38ce77c7da4cf229f33be870835a | Bin 0 -> 725 bytes .../3a4837445c0b5283b5b1cc06bd9216b576b73b6d | Bin 0 -> 113 bytes .../3a57b4139e8f4d2a325bf77d55bc868f3e20a4b7 | 1 + .../3aa4c35bbe8751e6e75e63d09d268bf1eae0d039 | Bin 0 -> 1294 bytes .../3ace422f96b9d45b0ed36a1d01799885447daee3 | Bin 0 -> 8871 bytes .../3ad6d78fcc3bd7ab862d5c42b749717c847147bc | Bin 0 -> 75 bytes .../3afe1fc296b892600a34e9fe1c80f0d0b92366d0 | Bin 0 -> 110 bytes .../3b1851fa8464afda460ab3aa5a73bbbdc9dd895a | Bin 0 -> 112 bytes .../3b9b085d856709ca5ddefe68b1fd8c5679aeb7f1 | Bin 0 -> 2780 bytes .../3ba5e8eaa7ef3c921c4f6f8914a763d4c98f3f2b | Bin 0 -> 683 bytes .../3baac544da2eaed009d9f63b7fa0a57b34bc084a | Bin 0 -> 1409 bytes .../3bb18f3fb1d530184534172fa5148c60eb0e94c6 | Bin 0 -> 534 bytes .../3bd2e7ffd5e2c4cc3a112fd17eeff046fc98da44 | Bin 0 -> 66 bytes .../3c038e3f872d97741c301eaeefb13f79b4b6a279 | Bin 0 -> 7113 bytes .../3c0fbf80e62b6487d04636e6155e1094a0f0cbfc | Bin 0 -> 110 bytes .../3c250d7934b790b958b6c3afcbfa8db910946642 | Bin 0 -> 2280 bytes .../3c91d9b6ef63d351043bdba0f3fbd626a70e7003 | Bin 0 -> 1746 bytes .../3d4b33a3dba42c25aa0ce257d33848ad947637a0 | Bin 0 -> 229 bytes .../3d7141641e059801f7c55e7f619bc477a3ace8cb | Bin 0 -> 35 bytes .../3d976d3b3197c9015cefb5e0123299c3a269b08c | Bin 0 -> 64 bytes .../3de96d3a5e565db5c25f5a31a47e6ebe9b3d78c0 | Bin 0 -> 538 bytes .../3df1bc1f8f239391f9c570242e0e25109542d2a6 | Bin 0 -> 999 bytes .../3dfaf7289ca01ec57e5f9a6eef577ce21a31de7d | Bin 0 -> 22 bytes .../3e017b7b96ea506e32c36d84a6f5b922a8d093dc | Bin 0 -> 32 bytes .../3e04f92fb6da5df510124b31250935df7b887f8c | Bin 0 -> 524 bytes .../3e28042b023502f53c9cdc77807b248d05462110 | Bin 0 -> 217 bytes .../3e2cdead630e9a7731435a2fed9265e384d3f965 | Bin 0 -> 162 bytes .../3e32d40c88e132ad315b72e7832a9a2f8b93ad48 | Bin 0 -> 87 bytes .../3e48fb9d73c15d84285c6113cc08e7ac9c2e02cc | Bin 0 -> 196 bytes .../3e4bd6249074bb37217c545b12fafe69ecbcb7e4 | Bin 0 -> 67 bytes .../3e6979b9ca8c43360c22346cf94cf51239692122 | Bin 0 -> 27 bytes .../3ea8dbe0f9bf48bd6600c0fc9a3cdc5cd690e3d4 | Bin 0 -> 99 bytes .../3eae81e657e0dfdd2770afa6f26f73fbb7af97fb | Bin 0 -> 604 bytes .../3ec0c8b12efb44e15d2538df7d473e741218c1b4 | Bin 0 -> 57 bytes .../3f371239b51bafb365398a32c8d5ad71e4047868 | Bin 0 -> 493 bytes .../3f3b4a49efe4c5b368ec3c6870d325569fc93158 | Bin 0 -> 52 bytes .../3f76e7ffb3c155020182c87a15457d15770c7a0d | Bin 0 -> 461 bytes .../3f8059b83422cc593ad571fdd7e9f481a7ea0db9 | Bin 0 -> 291 bytes .../3f8bcaa32a880f52fa34912052b88e5ad599d069 | Bin 0 -> 64 bytes .../3fb91e96cfec3e94034f5b5632f4d0a14f59c638 | Bin 0 -> 132 bytes .../3feff190e39ef12062ed899722d26e2dbad0e5a7 | Bin 0 -> 476 bytes .../4002a3a129b59d2613af461f35d0c04a1681167f | Bin 0 -> 203 bytes .../400f1b1c3f8a81d65e917964f9c850aec6628269 | Bin 0 -> 52 bytes .../40295fba2fed0b01b94834f28c72334b01caac60 | Bin 0 -> 770 bytes .../411bff756c480e12bc2058c4117bdfbf2876862a | Bin 0 -> 297 bytes .../4162ca0f06501532db3a7bcb9183e016ef81cef7 | Bin 0 -> 136 bytes .../41834f4f0e8830173a808d01b1d006bea4d96666 | Bin 0 -> 104 bytes .../41a69a86e70313269ae777d317208002c86e7f31 | Bin 0 -> 875 bytes .../4214113c42d77585de449cd6f7c6e56cf1be4917 | Bin 0 -> 23 bytes .../421e301c21b5ddc9daea463a479c4f71440e9e3c | Bin 0 -> 70 bytes .../421eb6bb5bbb60e1fc22cc8fb81e199c8efd5c53 | Bin 0 -> 539 bytes .../4262a6f2bce1c7017e32f497d544ad5e3e181c6e | Bin 0 -> 232 bytes .../42735b6ec44d74575376882934cb7e9405aaa910 | Bin 0 -> 5600 bytes .../4292da3bae27bdde8b90d3eadb9c32688db1c6a1 | Bin 0 -> 230 bytes .../42a5a6fbbbae7b354ef7bf4d1eaedf724533224f | Bin 0 -> 4 bytes .../42e1a5367947049f4bb7435c7d88cfcaa8b3823c | Bin 0 -> 131 bytes .../431d1acde42929dbd929dcc0af9e18984390de05 | Bin 0 -> 203 bytes .../4328494694a00927e042ce8f28c9b6121ace17b5 | Bin 0 -> 343 bytes .../433223f60737c36ead4e6b9de06ee3129216e0bd | Bin 0 -> 302 bytes .../436213f9f94a0fefa128a581371cba2396683d35 | Bin 0 -> 22 bytes .../43c7d0ca6dea58d64510e63a6245aaa1a9fbfb09 | Bin 0 -> 4096 bytes .../440886bb2224a11c0924c726c915fe849a96a05c | Bin 0 -> 743 bytes .../4445bd167222abc316653fc2ed74125b4147f35b | Bin 0 -> 1020 bytes .../44617aec1d422030e7b654d01ba2d7b59d8804c9 | Bin 0 -> 519 bytes .../4494e171eba2b82a2658f88fb2930c2268ae4be7 | Bin 0 -> 387 bytes .../44a50f1a2387ba958610a9eeeb6c5144a304cebc | Bin 0 -> 900 bytes .../44b280db36721cf38271ce580a5f9f7328fe0f11 | Bin 0 -> 41 bytes .../44f74f3407b765f4dc3d4c69526172c4e78087ea | Bin 0 -> 519 bytes .../45202ac19740c45e05e111c71f146f143c94ac29 | Bin 0 -> 196 bytes .../45853cf61065f1a30c63b59563f55a21ff020827 | Bin 0 -> 36 bytes .../4585aab105624fd8d405f6ec89dff9d932c04a3f | Bin 0 -> 64 bytes .../45ba3cb085080390a1665fd28418bcb6bf3aa887 | Bin 0 -> 73 bytes .../45e9eb4d4a3baf90be6c9987593c7068a7ce6de1 | Bin 0 -> 467 bytes .../460d48fe532e6fdd1d064e199d111963cdd341c0 | Bin 0 -> 221 bytes .../46ab13b7fcd53c45883db806290eb2ea4cf5ac3e | Bin 0 -> 303 bytes .../46ae475639896e5ab898815fe704d848ccf4a098 | Bin 0 -> 138 bytes .../46c40b46f8f732a5f4a9097db25f383ecbb9741c | Bin 0 -> 417 bytes .../46e2dd30db6bdd3bdc3873a31ce2226621cb527d | Bin 0 -> 203 bytes .../4707ee6245a56d2a5f712c557cd843d13f75c4f8 | Bin 0 -> 604 bytes .../470a50c67129369ee98cb837249e300fc6eb25fa | Bin 0 -> 80 bytes .../471e107c5684959b158529bbaecce9baa098dbd1 | Bin 0 -> 127 bytes .../472ce23bdc6129fadfe063ced3031e245ed587d5 | Bin 0 -> 2221 bytes .../47374cd1e1bb1f0dbd9ec86a376158a7a917e997 | Bin 0 -> 129 bytes .../47b868fa80af48f3d0f4d8f96513f894dd9decd3 | Bin 0 -> 174 bytes .../47c6a099e5a626e5fa6d3b02df92dbb3145eea9f | Bin 0 -> 291 bytes .../47c6b4573363bfe7f97dc362cc95a248431d9cd8 | Bin 0 -> 27 bytes .../47e39ccb0e421633976105cf2df819babd17165e | Bin 0 -> 39 bytes .../47eeff372cbcd3fe1187bda85a335356be57d0b7 | Bin 0 -> 8497 bytes .../47f45e078efd13c383a2ad68a15c7defd8a93c76 | Bin 0 -> 75 bytes .../48117160851f63fd649f834df10580b7284e7ed1 | Bin 0 -> 32 bytes .../488b93e87858fcb48e077617cdc19318fbaa65cf | Bin 0 -> 125 bytes .../48b12cbb2a12c9337f7928e3b57fbcd6c22c5d06 | Bin 0 -> 2426 bytes .../48e5e82cb65da5369fad62a3bc110dcb5e56d125 | Bin 0 -> 35 bytes .../48f6d96b6d4516e834d0de06ed71aefc2c92b43a | Bin 0 -> 1812 bytes .../498f26f7161970f33bdcb9c007731417adbf6ca0 | Bin 0 -> 294 bytes .../49fb9f9d1ccf95624e4180155901fcfcf04c2ded | Bin 0 -> 275 bytes .../4a7b2e3412ff77292dfceebac06636a64aae186e | Bin 0 -> 822 bytes .../4af6b6170f9966dcc1dbb975bc8875a98d618704 | Bin 0 -> 94 bytes .../4afc3a7d5cba358a21e686e77c9d5acf8b300fd5 | Bin 0 -> 236 bytes .../4b0354bd6fb98c2694801ded6ba8be6d92bdacf7 | Bin 0 -> 34 bytes .../4b244ce31debccaee1050da6397a99b16528c7c3 | Bin 0 -> 4613 bytes .../4b3f98b856294d4dd6d59ad9e9fc20520de339f9 | Bin 0 -> 740 bytes .../4bb96f76a9cc78b1bfb5b8f057d4172c468eeb73 | Bin 0 -> 41 bytes .../4bdf904984098e781b6c3e03ffd6168b51804a3e | Bin 0 -> 198 bytes .../4bf15388eee73997396ce773fdb8dae598bcb5e6 | Bin 0 -> 787 bytes .../4c26637cf6b4f379078c33e8f920e819ed99b3e3 | Bin 0 -> 65 bytes .../4ccf6001d821d5c54c078a88f79911282f8b2973 | Bin 0 -> 80 bytes .../4ce0b78cf69784a4b29b7397bc3a9c19d32072b4 | Bin 0 -> 588 bytes .../4cf8d2b48ab326b294162eca9771a7e3d2b6a13a | Bin 0 -> 946 bytes .../4cff3bf23add186b0dc55a6fe0dde921f49de692 | Bin 0 -> 88 bytes .../4d09c75ea1882bac3a83617108f961620cd96916 | Bin 0 -> 3082 bytes .../4d4814548dcca8adeed9143da8968997d17b9556 | Bin 0 -> 4943 bytes .../4d7260a72314357999ac9b9b1283fce5e53e1388 | Bin 0 -> 31 bytes .../4d7fd43dc01f5e14e078cdd0c27ce670cd70bbf6 | Bin 0 -> 788 bytes .../4da50ca21d785c0f03716956bcd8d147ca14084a | Bin 0 -> 523 bytes .../4db4a312413b24a8bed2193d3e0a048de83b4c76 | Bin 0 -> 94 bytes .../4dd2135e78b69dd5b290f2ccf19624cdfe8638c6 | Bin 0 -> 381 bytes .../4df507fac6959aa78d4956baccba5b00a8c13fd5 | Bin 0 -> 4349 bytes .../4e09e54a5034b4b42f5e39919d379e235925ef88 | Bin 0 -> 60 bytes .../4e32d012b2a527dadb634a6c8143bd74dc4e64fd | Bin 0 -> 94 bytes .../4e6095d9e6c21a8215dde22be3713e114db2dfbe | Bin 0 -> 352 bytes .../4e6780e76a9e944470187fc8f3c340f56d5d5ebb | Bin 0 -> 27 bytes .../4e8376a9efda6b219d4ad4aaf8bb4e3d30fb3dfc | Bin 0 -> 135 bytes .../4f39a9c1655059ab946fc8dc28ed266f277a559d | Bin 0 -> 514 bytes .../4f3ae4e0d3dea2cce572a7e8c5b048dce7ab1b43 | Bin 0 -> 139 bytes .../4f63378fff9488dc4a51f4a24d30bf24ee0d96d7 | Bin 0 -> 3383 bytes .../4f8777cc814db26340535df41d7f556a2a42ccd2 | Bin 0 -> 236 bytes .../4fddba0ea7da63c55cd0b5d36b787838d7f5e6be | Bin 0 -> 4429 bytes .../501edbf11142382d9d2506b86012b143210ec184 | Bin 0 -> 10265 bytes .../5046cc66412590e800c7c7ca5ac1e574147f7d98 | Bin 0 -> 91 bytes .../5054b9a9ee841571070cf02a53a95b2b03706f51 | Bin 0 -> 397 bytes .../506e9fdc2a78371519a4496d71829afa9b28a0b7 | Bin 0 -> 5139 bytes .../51201558e8e1c8078444e3e0e0fbb9c8ba03f027 | Bin 0 -> 202 bytes .../5172c3a4ffc00976548a294c858c81db840b6d7e | Bin 0 -> 110 bytes .../51bcd5707edfa1f1656ba6c8b00654409e3cd4bd | Bin 0 -> 950 bytes .../51db8eb0f5e343c96ae85d1ba24296a8c755d069 | Bin 0 -> 52 bytes .../51ebd2b57ff2e402f4132ae1642fffbedf4a40bd | Bin 0 -> 813 bytes .../5202b2a6f32ccc1cc1f4f304c4bce8d4401ff5b7 | Bin 0 -> 1329 bytes .../5254c1c34c11e737799267b8c5163b9721ee8bf8 | Bin 0 -> 557 bytes .../5263ee4315510274004730822fbc2f5cc789dc56 | Bin 0 -> 1800 bytes .../52729c32c51f281968b6559bdc0fa76e5d53d42c | Bin 0 -> 587 bytes .../5275da65c383f181fecb978affc044e5da83e5ee | Bin 0 -> 294 bytes .../52c8ff628b1296536702d852752c12ae3f29483f | Bin 0 -> 3495 bytes .../52d812800cfb57e75935f0e0af849a5c887b183c | Bin 0 -> 305 bytes .../52ec42ad604c254bc9940b2b8023324db851efcc | Bin 0 -> 8465 bytes .../531a61a336869424c0fe5c30c4ea2fd0528ad3c4 | Bin 0 -> 981 bytes .../531c806a99a97f488043c25f086871206526f154 | Bin 0 -> 817 bytes .../5368cb84691bdbba766a5b525c05d528510a2dfd | Bin 0 -> 12 bytes .../53789f9cd38bcddf63f648a4444b804af15bac15 | Bin 0 -> 435 bytes .../538115299a4ec644a5b8ec58487a4d804d3961c4 | 1 + .../538df7ee1563a91f2db7e03711ffaf7597ca2331 | Bin 0 -> 241 bytes .../53e646a11c8e936c5c8356edffe2293b2bbcdc79 | Bin 0 -> 146 bytes .../53ec02435933f82682f4a16437a534507923acc3 | Bin 0 -> 332 bytes .../54052cad79dc0de72b7f9a4db6db797481b94091 | Bin 0 -> 402 bytes .../5462c0976963edb447e97959c980088a63b0590c | Bin 0 -> 115 bytes .../5471c4275cb3f603461b0fd116e4d7de05b09d07 | Bin 0 -> 418 bytes .../54759194c18d82c40b7a9fb6214686517166ec56 | Bin 0 -> 284 bytes .../547a345119f7841c5d4490625c6a57b612ed8087 | Bin 0 -> 2014 bytes .../548ddcc64385ae6f4253758b44282e61118bdc3f | Bin 0 -> 158 bytes .../54cf6562b329c0b830c248f3a0f6074d8c6f7365 | Bin 0 -> 96 bytes .../54f9c85d869e2e4278a15894d56a52960dbb15cf | Bin 0 -> 118 bytes .../55089b519fedfde50cacd2ce3f6143d545415c7c | Bin 0 -> 220 bytes .../553e75ad0986ff29be6fd9a55812b78cd1a9622f | Bin 0 -> 700 bytes .../55c1d8fbac62fad061fffa5ebeb9187d92748c13 | Bin 0 -> 34 bytes .../55c55ea8b00a5f3f65f3ab897b0dcaaa441fb122 | Bin 0 -> 204 bytes .../55cdd52535dafdde11be908b4eab37dbb4c36ef6 | Bin 0 -> 91 bytes .../562421b3cf18e807de77b05cd4992643e4380a2c | Bin 0 -> 957 bytes .../5627e6018eb4987e9536fb4c0fa999a875966634 | Bin 0 -> 238 bytes .../565a1bd49c700934d649482febbfb029eabb9686 | Bin 0 -> 333 bytes .../56b191de85e3d69c2186cd3f42fbba9739994db7 | Bin 0 -> 2082 bytes .../56d8645063225fcb7dfff3f403c7bd733800c261 | Bin 0 -> 220 bytes .../5712da89e5e194789f1c7f25820205e068843ad3 | Bin 0 -> 53 bytes .../57241d35a18880c0a76a6692775359fa476ec87f | Bin 0 -> 76 bytes .../573def277ebdd3dff485690fa14cd708505a5011 | Bin 0 -> 54 bytes .../57469b92a723fc146f6669aae28f0f42463d286e | Bin 0 -> 221 bytes .../576bde27c45a33a93ec0f09f82e08c4bef1b0b40 | Bin 0 -> 9552 bytes .../57f9538233143b876b915f8b7209039080241558 | Bin 0 -> 145 bytes .../583db00bd2c73cd53ec48ec419d10e1e2ecb35c2 | Bin 0 -> 106 bytes .../5847917dcc14900b1eb9e7cf06161fb9c5a5c540 | Bin 0 -> 8807 bytes .../588c7c91af9d9eed2fe9c7ba54865a85daa17615 | Bin 0 -> 112 bytes .../590c1881cd2515b08cb8d6a301f638d3a30aba69 | Bin 0 -> 276 bytes .../592d6ba84694624a372039190850c5df29763f4e | Bin 0 -> 613 bytes .../592f44a771638e173387a70a43ee5e78fa215239 | Bin 0 -> 815 bytes .../595188bfd67de0d7f685aef0ae888bfa332e1ea0 | Bin 0 -> 115 bytes .../59810464e1214a058797d055509d9c48af570c98 | Bin 0 -> 1097 bytes .../59aa32e85b1b5d7e3453f08247d67396259245d1 | Bin 0 -> 201 bytes .../59c6c3080e31685cc006371a554d3fbc7f7331e6 | Bin 0 -> 1507 bytes .../59cc9caa25785a5b1afc1a8ae8e65fd74d070d5e | Bin 0 -> 32 bytes .../59ee89b705438cb06a9c28affe381c35f80b351c | Bin 0 -> 125 bytes .../5a2be1ca27659330c41d330e3a92107b1bfebb88 | Bin 0 -> 71 bytes .../5a64b3e7c76384899a3fbc38eb972a579f2064c1 | Bin 0 -> 538 bytes .../5a657298df8408f41eaf5d3d779358f3a5bac61a | Bin 0 -> 71 bytes .../5aa1d35f1c40c4c41b772c7087d3b4dbae33ace3 | Bin 0 -> 7003 bytes .../5ae1a99f78b6ab7b4a903ebbbdf775a3e35d219f | Bin 0 -> 572 bytes .../5af6fb93888e19f61b9bf6c166b4f5e752fda76a | Bin 0 -> 3085 bytes .../5b510318d21b047c5370f14c672613fea51e5018 | Bin 0 -> 103 bytes .../5b619abe0366ad56d2fb700dd4372a5e7adb14d6 | Bin 0 -> 2454 bytes .../5b8aa235f1747fc13075c3dddd9f5f10a459e87c | Bin 0 -> 23 bytes .../5b8aa277b79e8160a24cef3c19750ded5a7536c3 | Bin 0 -> 4079 bytes .../5ba88ad3feacea4977a06fb768ca6820d93f9d3d | Bin 0 -> 1400 bytes .../5bab6b15c50fe95c8f2c4a48d30801d02944f4e5 | Bin 0 -> 3011 bytes .../5bdf26820cf032abde25c4f484e13cd87ac82087 | Bin 0 -> 5223 bytes .../5be9e7a44de35496026425131d761d90373cda68 | Bin 0 -> 34 bytes .../5c0291854e3d33ede81fd16ffa89161952955122 | Bin 0 -> 39 bytes .../5c1c738397bc357cadff1603e002e2bf77b24696 | Bin 0 -> 1031 bytes .../5c2fbad388261e186b479741c101f6d3df04df64 | Bin 0 -> 1676 bytes .../5c4a6dd20cafd1a529de120669daddbc5cb8aa03 | Bin 0 -> 604 bytes .../5c7e4e9dbe52f2b9ae8c0186538ab648f90c80d7 | Bin 0 -> 1098 bytes .../5cc91e870157f1998e8454f9cd5cebf39d0cf41c | Bin 0 -> 172 bytes .../5cdb320fe9b60367252852203a05209ee838e83d | Bin 0 -> 619 bytes .../5d1af8989ed33e32f5c6d2f01ddc080266b63ebe | Bin 0 -> 532 bytes .../5d4424c61d71a7470b781e7e9701f38847e3ce74 | Bin 0 -> 1249 bytes .../5d47af64df78a8e5302e8b5ff551b493ddea66a3 | Bin 0 -> 769 bytes .../5dc843b21c6a8812a55ebd3a0524ba2d923cb533 | Bin 0 -> 59 bytes .../5dca6501e5c99e6f701b2d9348af5063e2bab8a3 | Bin 0 -> 72 bytes .../5dd3e592c2fa8483549d310de3805bdfad220f84 | Bin 0 -> 433 bytes .../5e0478032515d14fd706980526e212568d6b1c49 | Bin 0 -> 94 bytes .../5e04ce4d12fee534dda7da19477d4624607e5c8e | Bin 0 -> 4874 bytes .../5e2a7215e609189d8374778a7eeca8dd5b7ede2f | Bin 0 -> 417 bytes .../5e2c63a206229fde1ff65c65bc48d948109a804f | Bin 0 -> 30 bytes .../5e4da61cdaa20d45aab44802320f908737eb7f0e | Bin 0 -> 216 bytes .../5e5513d0d759467efd28bff44210d83b52e0ada6 | Bin 0 -> 337 bytes .../5e57c829b72caacb181baa504f781347325a9076 | Bin 0 -> 291 bytes .../5e66f05ce382043298741d3af4afe12629046b1b | Bin 0 -> 117 bytes .../5e7d5799f863176bcd0111f3ba09e75569f2bad1 | Bin 0 -> 518 bytes .../5e8017a6120cfcd9b7ded59a1e6306255a00b3ae | Bin 0 -> 4766 bytes .../5ec2dc59ee32b77939bdc5e44059338d30bbe4ca | Bin 0 -> 2325 bytes .../5ec82dfaf0c0c850450deae6bbf9efea49af350e | Bin 0 -> 443 bytes .../5ed9c0dc18fe61de3cbd8003a2e46be4af294817 | Bin 0 -> 50 bytes .../5ef4a58f67300e5dfc11d9d3b6e9f2c62b58e543 | Bin 0 -> 227 bytes .../5f2a9c3df2e9caff05a1ef6202b7d2d3eee9edc6 | Bin 0 -> 567 bytes .../5f420c0a65cbb6b55287d7e73759d3512b58c598 | Bin 0 -> 539 bytes .../5f709f85a391fdbf0304e8ff90f14feec4740030 | Bin 0 -> 1146 bytes .../5f7611c486f204c0e5a0d11dd0ea5ad2f6b5d2f2 | Bin 0 -> 5912 bytes .../5f85f96c96d7e918ba25e5478d7399eed61aaf0a | Bin 0 -> 172 bytes .../60563a36e4557fb1139bbf07055bef1218de335b | Bin 0 -> 8597 bytes .../6058ced57298a6f24bd940de15a339df9ff78acd | Bin 0 -> 269 bytes .../606d479c981ab44e4faeab4d511bb6319b23217a | Bin 0 -> 227 bytes .../6088a7b22a83380ad9f66eb5dd8fd7d0a50f4c32 | Bin 0 -> 7859 bytes .../60a6f16242283034a9c1751b31dd5c32233cfecc | Bin 0 -> 3616 bytes .../60bdbe7b9439cdcad0b878fa904b8d172865d767 | Bin 0 -> 193 bytes .../60fb6c4e2e59dc2a61cdd77b7d6ea43ddfca4b07 | Bin 0 -> 586 bytes .../613fbeb745af4e50bde62e063223b5885a85f39b | Bin 0 -> 205 bytes .../61413a3f2ff56fbdc6d13e7cc579568b7c8c8e94 | Bin 0 -> 115 bytes .../616a384f0eb3ee3a73ac3f6f99d04d559c52e1ba | Bin 0 -> 28 bytes .../61a80001525307a756214b4e50f2f31c1604e4e9 | Bin 0 -> 2668 bytes .../61be10d7634c34ecc987c86ed48a21a59998cbbc | Bin 0 -> 115 bytes .../61ca418f423c25c6ea68d8cf4b0068741261bec7 | Bin 0 -> 636 bytes .../61fe1e156821d31b9e625c5218f4e837aeaf3edb | Bin 0 -> 179 bytes .../620dfcebad8dba36e450a464807c501fe5efe47e | Bin 0 -> 163 bytes .../6286c984085f00a14c54200404a2ae8cf3f96125 | Bin 0 -> 180 bytes .../629660ade23e34330863ed0b1408e8a1b823a811 | Bin 0 -> 63 bytes .../62af7a1cd0224e05614fa8ffa34259dc99b4e0a7 | Bin 0 -> 10 bytes .../62c86f19d278d12637bd5b0623112f06beffadfe | Bin 0 -> 203 bytes .../6331101396583364994a1112a97774d282abca69 | Bin 0 -> 345 bytes .../6333a4d4b5de7fe753202e00819978a0d27b7c34 | Bin 0 -> 499 bytes .../633f0d5412832eb2eeabb1f94338a30b1b38ba8b | Bin 0 -> 957 bytes .../63f34c8d057dc84df6596e540d99a0d8d0058c00 | Bin 0 -> 144 bytes .../64517ebc7a6d93ff4e8d7076d78d16ceb49f4c4b | Bin 0 -> 5940 bytes .../6455823ec19c3bb656a9c393cc9d479d6cfac0e3 | Bin 0 -> 137 bytes .../646053fe0e25c9b09cd5bc8693fdadb93c1f3e61 | Bin 0 -> 314 bytes .../64696d6ae3cca0e15559310f418a35e112bb248c | Bin 0 -> 92 bytes .../6475f3ee17ea23ee912d57f0d388c3b5e2fdac9c | Bin 0 -> 195 bytes .../64b83a7fbec9e91772d2ef786eab4d6e9bb55799 | Bin 0 -> 7375 bytes .../64dc42aa1cb5f531933db7b728b25b95d7238b57 | Bin 0 -> 659 bytes .../64dd46231ce227dcf17c568bfacdf36fc2cb1965 | Bin 0 -> 302 bytes .../6524326f8b306975835b59845083cc06d38efd57 | Bin 0 -> 738 bytes .../654480184478fae329adf9dc1a602071946d5e62 | Bin 0 -> 355 bytes .../656f6ed06d62fb3b3b0cb685893ec08f125d8034 | Bin 0 -> 3393 bytes .../65748177041f5ee40abf3c4f4c8cc43f74cd2c84 | Bin 0 -> 7631 bytes .../657a55e56e3f3fd67513b8d8bba7a1affba1a826 | Bin 0 -> 297 bytes .../65a172d9de45e3ccbb2ab2d0eac20ea834fbb2bf | Bin 0 -> 64 bytes .../65db1905eff3a7332782a58af2d8812a1d7257be | Bin 0 -> 3449 bytes .../6600974d36c9314ac24770dcb429368b925af69e | Bin 0 -> 1976 bytes .../660bf14ffb155b4e4a8b79f4a53d24b119908ad5 | Bin 0 -> 1329 bytes .../66161823b078d422f64bb4bff0788ee1db691ebf | Bin 0 -> 539 bytes .../66292622824b6b9e421a9d75a0f5d73562f453d9 | Bin 0 -> 79 bytes .../663c7dd209cd789a1ee4bc98095d42830960552a | Bin 0 -> 375 bytes .../66c5b481b1c447c5927c0700318d58220e1d639d | Bin 0 -> 71 bytes .../66e6f050014a92ef5b5766f2c092ee752b50fa10 | Bin 0 -> 1265 bytes .../66eca69c17d13e5c1303cf4558d8ba1a0a5c1b08 | 1 + .../673245f0252702782a7c7e190de5a7a9cddd7aa1 | Bin 0 -> 566 bytes .../6739e3e8295c657ccf333dd88a07eada3c136f04 | Bin 0 -> 53 bytes .../674a549cf5ec0285d961ebf5acbe57cfab7f2fc0 | Bin 0 -> 936 bytes .../6786dca64a916c7c9d5fae5c4aa45817f30a1a49 | Bin 0 -> 7829 bytes .../678a90e73f7a955a00109a16d7b0e454c5092d56 | Bin 0 -> 2950 bytes .../67aff04bb34ccef498c154ac9aafcf427d6b9676 | Bin 0 -> 5532 bytes .../67e863c81e2ea2c091eed43ae34bb8acfd9733b7 | Bin 0 -> 158 bytes .../67f04c73c6865e003cd689d9711bf2bca46daa89 | Bin 0 -> 519 bytes .../67f4ce538b697a0fef3d4eb3caf78ac9c7728315 | Bin 0 -> 1545 bytes .../681a808d7b7ea7d53fc7d69c073068d84c4a7da1 | Bin 0 -> 2142 bytes .../6865890a1141f3502d7a19231b716d29c11f5726 | Bin 0 -> 92 bytes .../68c619a2c38897c64d53335d03a5d5e9b9d3129c | Bin 0 -> 1405 bytes .../68eadbb64cb94b0801ecf9b7c652ba1e59062a9a | Bin 0 -> 1173 bytes .../68ec3e27eecf9ffb406ea973e12680fd2f7477ab | Bin 0 -> 361 bytes .../69130931ef1d08e99a58b5dc5cc68074fc7b3d38 | Bin 0 -> 1900 bytes .../69474be422fe69b7162884bd426b32c9ab6603a9 | Bin 0 -> 698 bytes .../694b5da184202300328f4b0ca105d74afff2505e | Bin 0 -> 3400 bytes .../6950e3e2d8dae0bef05ab36cf7fdc8728329e427 | Bin 0 -> 5528 bytes .../695d15b17aa191bcd819b57782bc5508421c9c41 | Bin 0 -> 85 bytes .../69711fa9764b490633d317d98aa3f47952a328e2 | Bin 0 -> 740 bytes .../69729e53d49fe3eda1aba479109a683ead04dcc1 | Bin 0 -> 1939 bytes .../69810ff1f2506a7c04be1906f5899ae827e00de5 | Bin 0 -> 3097 bytes .../69b267048df7b6eff8c2b48f0ef0a88604dd4a66 | Bin 0 -> 245 bytes .../69d5c668c32e3e488a09c6d9ba9886405e7b75c8 | Bin 0 -> 1004 bytes .../69d70f18f880b1031a0ec586867d2afbcc448a24 | Bin 0 -> 87 bytes .../69f04cdad0db8807e2290e0e66832afa7936d60a | Bin 0 -> 219 bytes .../6a652b433c5bd80d96a46b9e02e684e791b984d7 | Bin 0 -> 365 bytes .../6a6a7d92408499e18a1f23d806010906ccc43a84 | Bin 0 -> 1915 bytes .../6a6e7e4e60e7af976bec68769e79eda36fbcafca | Bin 0 -> 41 bytes .../6a7059131e44872c463c4a30000e9c8ad90b5188 | Bin 0 -> 1118 bytes .../6a7a0b5da5b6d776fb2859d1cc85c05e414910e0 | Bin 0 -> 1233 bytes .../6ab54a160313e770f331f551039eb69f92b42bf9 | Bin 0 -> 1541 bytes .../6adced20615cefdd6f59617877b04a046cc69bbf | Bin 0 -> 202 bytes .../6ae97f69e2d955a788e7767ebfc5b64bf3558d80 | Bin 0 -> 8460 bytes .../6af33ccc5515d73f50fdf6c809b0942d21828548 | Bin 0 -> 982 bytes .../6b0672c9dd58edb540aa4e9f6c0281bd9d2af32d | Bin 0 -> 72 bytes .../6b12e47f6c8d0f09710726bb456cf66e144e9797 | Bin 0 -> 39 bytes .../6b2b845da957125a040004fda051cd33f1afac45 | Bin 0 -> 95 bytes .../6b64c30f042f0c31138bd39df7cfd6501a204f51 | Bin 0 -> 23 bytes .../6b85661cf540c7d161b8d57d52c999cb5cb0406c | Bin 0 -> 6 bytes .../6b93f257ec6d1889c9f154f362040a3b5e7f3ac4 | Bin 0 -> 5461 bytes .../6bb8b10d681ac5b6d19b13f9d167521f8066d296 | Bin 0 -> 148 bytes .../6bcb36d11e7c8a325b32baad7aa97469b0ce916e | Bin 0 -> 8204 bytes .../6c0f0ef22ac9a99fb79276034c24f572197ae289 | Bin 0 -> 294 bytes .../6c1c14ef7a0b3819d4fcd2d9690862ff1d2abe31 | Bin 0 -> 310 bytes .../6c567a2b7a2e45ffc73b896d6aeb887c67721ecc | Bin 0 -> 167 bytes .../6c5d49ab6167f817f12b9ada7fa7ee91bd439970 | Bin 0 -> 2742 bytes .../6cba74746ac78975b55634d43862e560f10444ff | Bin 0 -> 114 bytes .../6ce0dc0d81509349d1c9caf7705b5658ed8a0439 | Bin 0 -> 1599 bytes .../6cf0eba1a6fcca7987761fa69c9672f487849ebe | Bin 0 -> 19 bytes .../6cf876e88424e5a1b87247f8c7972d4dc4f7d9df | Bin 0 -> 1104 bytes .../6d2b93a680f3ac4d69bdfaba2cc258be8ac2ef7d | Bin 0 -> 220 bytes .../6d31ef1cdb4f9dda3eb64b7b75339f2ae1e4b9cb | Bin 0 -> 332 bytes .../6d43971297e6e5f0514fc724505a5992f2b0301b | Bin 0 -> 539 bytes .../6d59ff63709c1a6f21b73bf3a4d16b07e467619e | Bin 0 -> 144 bytes .../6d79c2c3dedef8c680c09acd37269448b9f0453c | Bin 0 -> 577 bytes .../6da1ba3861ab90e87d3667f1dadc4a7ba6423721 | Bin 0 -> 54 bytes .../6dbe3c11cec0d285a0b6fe48270f73a4af3844d3 | Bin 0 -> 3412 bytes .../6dc5839fb492f5432474f3fe67a590a0b1e9e5ed | Bin 0 -> 38 bytes .../6dd7686d80d37d2507778f3b38f1059ebdade3cc | Bin 0 -> 1211 bytes .../6dda564029a6a65bfe754f6712a021d1c067fa1c | Bin 0 -> 3247 bytes .../6de8df6e1234b33c9162df5c98aa14436da939c6 | Bin 0 -> 233 bytes .../6e020f3fb3bf1960ce15f6e4e9869a8ac97b83b9 | Bin 0 -> 129 bytes .../6e049898e1aad78d9136f052efc6dcd4c77859fc | Bin 0 -> 1856 bytes .../6e2c25b4a0abeb01e0265b2d761a0bebc84a115d | Bin 0 -> 1693 bytes .../6e3bd32f00c7dbede5aa2eae76ceff8f7cab3ce8 | Bin 0 -> 9113 bytes .../6e54b450df608f104315f606156fa8521a2bb25a | Bin 0 -> 115 bytes .../6e763d4f9e961077fb1f2f706d341ae40f6852fc | Bin 0 -> 428 bytes .../6e8ade6d609a61548840c52dd402308b1584143b | Bin 0 -> 1949 bytes .../6eab4102a50966cba40bf9f84af29e317ae1e2e8 | Bin 0 -> 39 bytes .../6eabec94c3ccf355654356375f923fd09c174c0d | Bin 0 -> 2470 bytes .../6eebcc839757079980592d3fb21a6cdebf35325b | Bin 0 -> 196 bytes .../6f3d3e8d7dd64d04267eed9efeea1b63dbbc1cad | Bin 0 -> 1178 bytes .../6f82fd782cfab4df4741e0a362acb1fd3572e5f2 | Bin 0 -> 89 bytes .../6f86f882359b4d05e05cc86f17424e307fedc384 | Bin 0 -> 3966 bytes .../7031dd6a22d030bd2153091f3d6b755e64cacfbd | Bin 0 -> 48 bytes .../70539138e5366d34ca3ebf62816f71ecf0f1ddd2 | Bin 0 -> 486 bytes .../70590178b1457a6277e2dfd4fcf3e5aac95a724f | Bin 0 -> 1222 bytes .../70a738fcdde9d8d2d77b01c5dfd932eca8cd2abc | Bin 0 -> 519 bytes .../70c0b20298044403db0bdfeb454709b4d21b07ea | Bin 0 -> 2429 bytes .../70c17558c708a13305b3fb6e86462234164cb4af | Bin 0 -> 135 bytes .../70d030eee01ad4aa68be119ce04c7253ae86c384 | Bin 0 -> 745 bytes .../70d11d5f920c22e241a12dd6a8342e04695b322e | Bin 0 -> 174 bytes .../70f3d9cbf1138b5ca938f414e1847902c31959c7 | Bin 0 -> 992 bytes .../7101dfb68a52cba1fbc4924646590f5e26183186 | Bin 0 -> 115 bytes .../7130c5b81509620966ec182de6f3c2eb5f5544c2 | Bin 0 -> 250 bytes .../713cfe77c2b125c02067abf8077afdf20c30f0a6 | Bin 0 -> 1265 bytes .../7140f33b0ea03c8f19945d2140eea0b09f1788a4 | Bin 0 -> 2866 bytes .../714c81518f0e97557982c54772f06bf40c184514 | Bin 0 -> 1354 bytes .../7164234e681cd11c6882cba875a02e64ad730ccd | Bin 0 -> 30 bytes .../71708dc5ecc348b5ff1212ef4ab69b1930185969 | Bin 0 -> 54 bytes .../717227e72c77b177e34630f5518b68b1556ebddd | Bin 0 -> 931 bytes .../71a6d214f79ad99f1e5b72b314676c0a291df221 | Bin 0 -> 775 bytes .../71f72db50352b31384180a1da3a23e0840fe4785 | Bin 0 -> 455 bytes .../7206f278d20b01a560234339ae7ed7dd01227250 | Bin 0 -> 28 bytes .../7207c0f80921062f2123c41f4e877330b22e7ed2 | Bin 0 -> 64 bytes .../7209972a7d027208e57f8d0a5b30ee27204301f3 | Bin 0 -> 175 bytes .../722ce36822fee5736ff683f4b14b48cee57e3449 | Bin 0 -> 70 bytes .../722efb8896125c408849a0c29a913d42de4c0cff | Bin 0 -> 312 bytes .../72489768f5f01c6980fdd2f8bde93d9809272c4a | Bin 0 -> 27 bytes .../725ac867d1c479f1e9f90fc1769d64962110b7c7 | Bin 0 -> 46 bytes .../728284c5df133f7f4ddc859967d32fd7d5d75329 | Bin 0 -> 2824 bytes .../72c28760a8a4f71d3d33bd25493a46956c05dd7f | Bin 0 -> 1800 bytes .../72ca6866cb60a03b318d376cb859f71a4fdd7180 | Bin 0 -> 23 bytes .../72cdde3dc9740766ab35b26b18a7477c5242412e | Bin 0 -> 2524 bytes .../72eb49aefac90f58fa97add9debc211f9dde3c5a | Bin 0 -> 31 bytes .../72f58dce20e233f3b8c3956625182b74833aa166 | Bin 0 -> 109 bytes .../73031b9fc61ca6f8c0a89d9a5a2ba0dbd8b5ab28 | Bin 0 -> 70 bytes .../734c04eaf87f2bc5cb782a67e9d4a538800a9faa | Bin 0 -> 86 bytes .../735ef0392743d8b4b9248fde6234f8f3a0071bce | Bin 0 -> 71 bytes .../73b17fe206ecd8185952e110d5f0218ee9453041 | Bin 0 -> 186 bytes .../73b594e7ac9cb88130831097bc729b1392a23f49 | Bin 0 -> 49 bytes .../73b96e8737c63df91d8cdd5c27d404981948a96c | Bin 0 -> 394 bytes .../73e89884ec73ee613af8ee2b57761aa101f5d7e1 | Bin 0 -> 15 bytes .../7411401d4d644c7efc35661054f01b8574bd6d52 | Bin 0 -> 485 bytes .../744c8db8044d3193eccab2d6d7b846c0db6a720e | Bin 0 -> 3400 bytes .../7452c1da7b98a2334612358380412efd913d98de | Bin 0 -> 111 bytes .../748baf827bfafd1465ba2990646c92595a87a628 | Bin 0 -> 3916 bytes .../748d19dee171ad571a2857dc8f98fb6f15258496 | Bin 0 -> 181 bytes .../749327075643d18f2730b8ae0be8d7c79b35314a | Bin 0 -> 2054 bytes .../74f0ee2d5f811cc35cc3cc1e544007f5a91d14c5 | Bin 0 -> 1986 bytes .../74fcbb1447758a687e31a50a8879b7c255770eb4 | Bin 0 -> 2045 bytes .../75013f2f4fedf0de63071c088216da22d661a149 | Bin 0 -> 385 bytes .../7507d01594dcffec608508abe1674708e8086533 | Bin 0 -> 115 bytes .../75186e51aafa65751e8d5c29bf4990ac0b70fac6 | Bin 0 -> 1776 bytes .../75393cf41ac7eeacfc9fd3628c11ce44cdca1365 | Bin 0 -> 515 bytes .../75a9bdc12b380dd072d00cb7ae75ca1a80c8af38 | Bin 0 -> 110 bytes .../75eb703128489395576b69e1ffca01f111a7ad9e | Bin 0 -> 14765 bytes .../76051203f5ca25b1328a9d923630fb938d00db83 | Bin 0 -> 136 bytes .../761c3ad843a43678bb550ff17719fd1f3f0be202 | Bin 0 -> 283 bytes .../761fbb1867cbb7e7648277312e744751d6af43da | Bin 0 -> 377 bytes .../7627d91876f419e665cc178d1f07673f0e5d5152 | Bin 0 -> 398 bytes .../7666bc76ed8b4b979de4d96c9034281859dc997d | Bin 0 -> 726 bytes .../7673f6422e4500f7d07afe7ddf8392b8f81ba322 | Bin 0 -> 1357 bytes .../76880db8c7edd73e206f5ef28eba2286c5f078a2 | Bin 0 -> 176 bytes .../76b59735cdc40592fb48182bf56647439d09403d | Bin 0 -> 77 bytes .../76f99b01d240c2b673cac5130e6c6e25bba9927b | Bin 0 -> 613 bytes .../771b1052af9a89d47e5f0be8a805ac9571817923 | Bin 0 -> 448 bytes .../774c2c6d4c56142d47c15db8c5d9eb6e9312d1ba | Bin 0 -> 252 bytes .../777a7e8393f652cfe4b884d5a7fd5431c46cfcad | Bin 0 -> 23 bytes .../77835dc510f23fb74141f0fcee49e3bcc645e10a | Bin 0 -> 3054 bytes .../778a1ea9254ee37286a4a04c1af963b11bb3167a | Bin 0 -> 6208 bytes .../77909c81d8c917125eaee8bb74a081c2190a3bd0 | Bin 0 -> 124 bytes .../77b12aa49a2c485dd25b4288348c5f2f4539e1a9 | Bin 0 -> 4368 bytes .../77c3a005252e11a4a8250af7d1b89a12e603f7e2 | Bin 0 -> 724 bytes .../77cfaefa9b4d6a4528b83a5e138ef05a63a760fc | Bin 0 -> 1446 bytes .../77e5f3bbd05c8b3fef21e37ff6863fedf677f5c8 | Bin 0 -> 192 bytes .../77f976f72b1a0cd7475f92118ac848feafcf9b38 | Bin 0 -> 659 bytes .../781bd180e6a3277f70b588da6cab71830afe4777 | Bin 0 -> 172 bytes .../781da8df2fbb19b5df1ec3f6368a54f4944d7a8a | Bin 0 -> 101 bytes .../7821ea8e660020ec06302e0916684a339840c91f | Bin 0 -> 175 bytes .../78590d7b89f938bd5ea151d566f9c249020d58c0 | Bin 0 -> 136 bytes .../7893632bf5ddce3befd3193e7656967a6579b0d0 | Bin 0 -> 158 bytes .../78a2ae4f971b918947e49f85d26d5cdcbb7feb24 | Bin 0 -> 1376 bytes .../78b5f02e1742b72ddd73520f64385253f39ee895 | Bin 0 -> 1794 bytes .../78c18d81fb868f1b18424a3648a233573dd1af8b | Bin 0 -> 47 bytes .../78d138d25729b00ca15499d263b9ae4d20f27511 | Bin 0 -> 966 bytes .../78dc69bf0f6e75d965774e2a3b6fb5d2faae523c | Bin 0 -> 658 bytes .../78e2a31edf5b03046e21bb2d4a8fed2beb9face3 | Bin 0 -> 352 bytes .../793cda8ca0e32851aefed3cbef5de633a2cfd67a | Bin 0 -> 1128 bytes .../794e34bb037e5774251d7d9ffff883eb847f72dd | Bin 0 -> 491 bytes .../79650aa4b9c9adde4ec90ee81b3573f46e0fb9b5 | Bin 0 -> 296 bytes .../7998303099c61f1737e0ac91bb8f9572ebadc590 | Bin 0 -> 64 bytes .../79a8f1bad388024622225f4d2a131572455feb9f | Bin 0 -> 376 bytes .../79b23fc479acccadd4d351e026167a2f46b8708f | Bin 0 -> 136 bytes .../79b482a2a686c4d2e3c29725aa2cdbe71bc94412 | Bin 0 -> 519 bytes .../79dd2620da090f90be859d542f1a74baca042176 | Bin 0 -> 6323 bytes .../79f23f36ee86cfc21953f1284083c2c3e9acf16a | Bin 0 -> 477 bytes .../7a0ac9641687f2691d03e691f8075f1918493531 | Bin 0 -> 2454 bytes .../7b26c88ec28d0ada4104903dce4e379e9cfc8534 | Bin 0 -> 49 bytes .../7b55d62eb9e92ac03e59bd05b06d59ae7378646c | Bin 0 -> 96 bytes .../7b596265e25bd28bbc46940ea6b3e77298ac6b89 | Bin 0 -> 3627 bytes .../7b70cc0f0da5ab8ce72848741f000833f5b6bf98 | Bin 0 -> 1079 bytes .../7b7b0a46e894cb6c3141c343a6ba01b1b877f458 | Bin 0 -> 6209 bytes .../7bbd818d1267acd4c3fbb474e7f397e00b0b5b02 | Bin 0 -> 71 bytes .../7bbf5120a42db57a535f976496777f84bce3e890 | Bin 0 -> 449 bytes .../7bc9779be2cb26b18883d07aa7a32ea7ecb99d1e | Bin 0 -> 117 bytes .../7bcea9fb14207c231f85184d5017524847abc926 | Bin 0 -> 49 bytes .../7be22848288052552ed6942465f61d4955d087a8 | Bin 0 -> 1763 bytes .../7c195ca1bdd59eef58c3fa5a033332b5aa5b0050 | Bin 0 -> 40 bytes .../7c36891b7e834f281aaf72c3ce57e8b2942a9c37 | Bin 0 -> 5774 bytes .../7c68f32e4ee9705958165e01dc6fd5b6f86a70cb | Bin 0 -> 3632 bytes .../7c7d5377f73c1894058817f90ba7233b352b8f29 | Bin 0 -> 4249 bytes .../7cc72bd71b511461127184a0a6c40c1aae630a7a | Bin 0 -> 1294 bytes .../7ce7fa57fa27e6e82e719bacb5f17abbabb66c0e | Bin 0 -> 179 bytes .../7d6013e313b1393dd3335179b2e2491726f6e7da | Bin 0 -> 27 bytes .../7d67bbfd6f912b4c184496513a2bd9a735c12e1e | Bin 0 -> 814 bytes .../7d7abd7a0459e7695d9fa2f6cfcbf05ea6a0674d | Bin 0 -> 279 bytes .../7d9d7a22954f4c527c9c9a8067785ce99a7c7cfb | Bin 0 -> 93 bytes .../7dea951377123ebccf9b985cf4c8aa8df6b55173 | Bin 0 -> 1117 bytes .../7df4e3085922ec751ee65cab852f78c3965396ff | Bin 0 -> 540 bytes .../7e858ebf90a798299ba1ded2c746316b50f02262 | Bin 0 -> 94 bytes .../7eb22351b0a65b17a59c1d24e151713eac9ffd12 | Bin 0 -> 64 bytes .../7eb3b660df3bc57d1fc7afafa4a41b33e51a6648 | Bin 0 -> 4943 bytes .../7ebe4f27f19fed7bc816ff7fd735c177b27fa82c | Bin 0 -> 108 bytes .../7efdfde44973ca051c3e2ee40fe48890d1e3fc2a | Bin 0 -> 629 bytes .../7f04de56eb312973fd80013d099789fd4964b6b5 | Bin 0 -> 987 bytes .../7f2bb7cf7a302298c6a89075c80a96990f0bea0a | Bin 0 -> 556 bytes .../7f5fc2fb280c707bd8b33868409d0477871866af | Bin 0 -> 44 bytes .../7f753cb8807806f72a7529b27c199e4f4d63dc87 | Bin 0 -> 1079 bytes .../7f8500d5a5630a6c4a987315c9321c05b42be1ab | Bin 0 -> 291 bytes .../7fbc2cb3113e9d96520508be431f1a7baa68a648 | Bin 0 -> 45 bytes .../7feeee14cb43fe064a058a865ad930c0f3074d94 | Bin 0 -> 12 bytes .../801eb70b0f8d7a4ae3e8470ca9ddd546f647b806 | Bin 0 -> 1265 bytes .../805254d91105b06d84e26e400aec6c2837175588 | Bin 0 -> 41 bytes .../8055358eb5dd45590276f831af852d17841c80af | Bin 0 -> 194 bytes .../80c5e1caaa1c04a7841994fd2351b8579584536b | Bin 0 -> 196 bytes .../80e628d6b51b76ba8fa6192b53c77a6f674a36d0 | Bin 0 -> 975 bytes .../80e96f7861aced0dfb0fef2a90331d5f7abb6673 | Bin 0 -> 4242 bytes .../80ec8743ded5e834a2a76b32a203e6d1180e0bf1 | Bin 0 -> 101 bytes .../810abd2a8d3b80181edc4fac6629ea5475adbcbd | Bin 0 -> 5850 bytes .../81169a3c156ed802affe4ad246cd3751ceb0acdf | Bin 0 -> 46 bytes .../811c3dfcc03fbac2102b833eb2ddb1d44df6fea9 | Bin 0 -> 1216 bytes .../813c94d9e4643d37d1ab1951c5a70e0383cf1217 | Bin 0 -> 8721 bytes .../8154dbba8d38971ce44735a2c4b08cb3bd0150c5 | Bin 0 -> 430 bytes .../8166220f7262a283ba9cb585db2cab8740d0f8ad | Bin 0 -> 352 bytes .../817d750918fbd1a79067c03f9f5656d979e5e0d3 | Bin 0 -> 23 bytes .../81ad5f8f24ed8e42cb773713a7365cf91f706fa9 | Bin 0 -> 1118 bytes .../81c52d1919ef647de0db187e59dd02b7f01a72fa | Bin 0 -> 4634 bytes .../81db3e56131cb06dfa9501c499f82670e5c23707 | Bin 0 -> 57 bytes .../81ed13d6f0bd4342cd937d01219cf5a1c0e7d818 | Bin 0 -> 4605 bytes .../822cdf4433b66e631d4bc626e27112b3ec533151 | Bin 0 -> 2040 bytes .../8242ac7b154823a08b9753dbb8617ec35d60836b | Bin 0 -> 8529 bytes .../826231376254e18a22d40c246a6bdf1e119560bc | Bin 0 -> 604 bytes .../828b397b1942bf6ce30d725de548c1642f36abef | Bin 0 -> 1097 bytes .../828dea9d3a2d5f936716a1241c4519d2d972c037 | Bin 0 -> 70 bytes .../82a1d4dcd1b55859bbd606b27bcdd979569ea1c1 | Bin 0 -> 70 bytes .../82f657e5ebb838c6fbfe502cb9d40b15af38156f | Bin 0 -> 139 bytes .../8320586fb7b705f3a38ebc3277472dc0728ca26f | Bin 0 -> 5823 bytes .../8344dd0e74cb4a980ea3ab11dfb2f60fbbf6a7df | Bin 0 -> 1020 bytes .../8367302d355be29f39bbdd484caaa3aa24791e6a | Bin 0 -> 29 bytes .../8379e3456c5d8f2f4835a1f6ecd1f2908ad73d7d | Bin 0 -> 519 bytes .../839af9967801d939acf61faa66ab0a556f1ebcea | Bin 0 -> 156 bytes .../843a8bcbe7d594a75090573523b2e56a88c71377 | Bin 0 -> 6182 bytes .../8463dfbeca5589642ec05cc4508de90763b596b5 | Bin 0 -> 410 bytes .../849799627af95e8cd1419d4597baf3c691cc9517 | Bin 0 -> 1298 bytes .../84a4952a7637d39fd756f664ab443c784d89035b | Bin 0 -> 5062 bytes .../84a86c430a9d4b02ab4b8a3c95baac60fc12dfc2 | Bin 0 -> 1507 bytes .../8540e91d008fa67ea71e6a6bc61c7db3e54e5e13 | Bin 0 -> 337 bytes .../8573e6c750bc91cf87058d447121164b544d44ec | Bin 0 -> 41 bytes .../858b9fec300342b9b6069b41f6f3899200603232 | Bin 0 -> 40 bytes .../858f52112832d767e3af695d2a123a0c676e545e | Bin 0 -> 169 bytes .../85a40665965c032e41dc5eff15e0df5abeab4ef6 | Bin 0 -> 291 bytes .../85b0c7c422c3f801cebcf4a1618c6a05989abbaa | Bin 0 -> 300 bytes .../85bcd426a21863414d1a9125daccedde79a8515f | Bin 0 -> 193 bytes .../8623214b3b0eafcf51bbd2fd7d771cf2277b6a46 | Bin 0 -> 147 bytes .../8636e4c068a694215410b5ed51aefef245f0b040 | Bin 0 -> 88 bytes .../866e09804cfbbd9c8d260deb8c826da5475f3d0e | Bin 0 -> 643 bytes .../8671b7dd0e8c61a423b66db605c8af40a2041184 | Bin 0 -> 129 bytes .../868a2498461c9bca78df81d67ea4752e820fe2b1 | Bin 0 -> 83 bytes .../86c70f0657fff13e20da0eb3b0f45c196ce21a7a | Bin 0 -> 119 bytes .../86e39b8b9d5905611730ee40ab905a8b732a1349 | Bin 0 -> 14476 bytes .../86ff1a0454948ecbf4d3657680714909b13a6b8b | Bin 0 -> 810 bytes .../877bf69ef02280d886869b57809bd567a1546f0a | Bin 0 -> 221 bytes .../87bcccff1e64ab867e42ad2ed6f6f8cb37f1905f | Bin 0 -> 21 bytes .../8838cfa645cfcffeb8b50464c8d4f035eabdfcb5 | Bin 0 -> 8851 bytes .../885d5017bf961c2cb9cd81e05ee93e03d44982d9 | Bin 0 -> 30 bytes .../889f9ae39b7c42ffdf51f39c62a73b5e52868e4c | Bin 0 -> 221 bytes .../88c4395214b5f3aba93bea4458dea37672261098 | Bin 0 -> 211 bytes .../88cc9a01ad57eb4db248e086cced8e921f758566 | Bin 0 -> 4405 bytes .../88fdbc963ec60a4bfc3cacf70ed2f4185430c434 | Bin 0 -> 2801 bytes .../8903b3b6c9b0815cfd0553fafa016a6e1286004f | Bin 0 -> 291 bytes .../89095243ef564fd351536c303cb7cb9fcdf17429 | Bin 0 -> 291 bytes .../891037a9c9b059f9599a588507f4bd62fb91b9eb | Bin 0 -> 25 bytes .../89293e651b150c701c90953bc6addb9170d3ee29 | Bin 0 -> 333 bytes .../892afafcdf11cbc96a1b6742f54d60c29786f831 | Bin 0 -> 5970 bytes .../896b12d25aa96a6ae09e7920ee8131bacbe9be2d | Bin 0 -> 3722 bytes .../89bd87b37dd3e962a23a1a4bd09fdfed9517e71d | Bin 0 -> 64 bytes .../89c18b37c15ee4e8346a37f9eafdc0db9dd9149a | Bin 0 -> 36 bytes .../89f2017534ee6120372bd8a6f4b0c718686060d8 | Bin 0 -> 291 bytes .../8a0a402b518b7a9843ba71078b0242f5e39bf0b3 | Bin 0 -> 111 bytes .../8a237ab76edd158b544d318f5427d070a957d7c0 | Bin 0 -> 1541 bytes .../8a2a2e1821af79b3a2362319184a3f5ed4bed6d9 | Bin 0 -> 3141 bytes .../8a2ba82ecd7dbff89d30c6cd9d7c61deb779f4de | Bin 0 -> 1313 bytes .../8a3306f6e49bec06ceba060ca47dd2c7c01c8cb9 | Bin 0 -> 220 bytes .../8a74e96c96ca6c7868516546f4c40d7f3a02b77f | Bin 0 -> 12 bytes .../8a7881e6f1b82d493ec3f05452ec9eec8473bd93 | 1 + .../8a85d03dc9f7d261745051813539d21bc143fb66 | Bin 0 -> 2915 bytes .../8ac9e8a3d41dcc0242747d9031c3903c9b904200 | Bin 0 -> 243 bytes .../8b13c794b1a5ed6d9c75950f3d854704876e0e9b | Bin 0 -> 60 bytes .../8b192b7496ed42574d3ddf93be8fe6ef0f040564 | Bin 0 -> 277 bytes .../8b2d87468e8819e1568db4b753878a28b1d3ceb6 | Bin 0 -> 7662 bytes .../8b3505ae2e2bdd91a0f42fd070836d43188d4f57 | Bin 0 -> 27 bytes .../8b4d23afe2332ba3e62a2842c413a0794ebc5a03 | Bin 0 -> 1776 bytes .../8bb06e72c10c2387eaca45c1e653844554442560 | Bin 0 -> 64 bytes .../8bda80a41dda1b3c9fd69d86e60871c1367c36b5 | Bin 0 -> 198 bytes .../8bfca433e93225a1e92503f7912cca23c6a5edc3 | Bin 0 -> 71 bytes .../8c336341150f8545acd3b2680a8499dcd5cdbd11 | Bin 0 -> 53 bytes .../8cb0379c11e169bb2f5913ece938e2cb44960333 | Bin 0 -> 64 bytes .../8cb50f115bdaca69a5ca5a2328f58ef00dc3eb66 | Bin 0 -> 176 bytes .../8cb78b1c799047ad28af8396865413415d2d43a1 | Bin 0 -> 1606 bytes .../8cc939185ec647e574ed98fa73d9aaecd15ed706 | Bin 0 -> 112 bytes .../8ced95d51f97f90442a7ff952a6b1e9ad3a50d9d | Bin 0 -> 282 bytes .../8d112d4fcc18a0d4f36379e172523e0ac4c5bd6c | Bin 0 -> 1293 bytes .../8d423339b2e964d59e5ab75b501f6981f23ab571 | Bin 0 -> 530 bytes .../8d52554e55d9e8a9882322f4b9bada395075c398 | Bin 0 -> 291 bytes .../8e2a7a32b9a7d64668fff5074a20ae1dee483a39 | Bin 0 -> 744 bytes .../8e3228904d6c391f06a7dc5b107d417d4bd4ed0b | Bin 0 -> 2947 bytes .../8e3f2dbecfa1e17975c5ad97a3fd2ad8928c4995 | Bin 0 -> 536 bytes .../8e84de105905d6164469a7dcb14bd1e48587df23 | Bin 0 -> 1177 bytes .../8eaf415e453b97476345961d9649bddf0be225ee | Bin 0 -> 136 bytes .../8ec0d3440913121968af57149d5d72c82ab94d34 | Bin 0 -> 2314 bytes .../8ee9a6a54cd93f72a8d297ff1869781379259624 | Bin 0 -> 395 bytes .../8f24d9b915d5cda47ac85d06a23726f33bcdaf29 | Bin 0 -> 430 bytes .../8f53f3e64424f46feee5d2b8be937292686941f8 | Bin 0 -> 3866 bytes .../8f812d1ac41bb6da9c66b433d60e49346ed065de | Bin 0 -> 144 bytes .../8fb74ecfe42fc08f6c58f420e65431b4b08204d6 | Bin 0 -> 729 bytes .../8fe4de30999082d6bdba660504bbccb8f257047f | Bin 0 -> 385 bytes .../8ff49c7216ee8d795d3c3d4e7f7f2d32d28de856 | Bin 0 -> 343 bytes .../904075a1a17eec7da514af7d6bc6d847ea6f97b8 | Bin 0 -> 383 bytes .../904af246f904715cbec78e50bf977d01e6782fc4 | Bin 0 -> 3318 bytes .../904e2fae0c143cc7436ddd6a1d10c7e230719179 | Bin 0 -> 988 bytes .../905e38f0879cb5491f4e652e53d1bc35fc790460 | Bin 0 -> 724 bytes .../9068971e4c05beb57af603ff5bebfbfd270cd8b0 | Bin 0 -> 388 bytes .../90bdea8d24e492a7b2c0c7e01117ef5d947cb9cd | Bin 0 -> 44 bytes .../90e44747020ae78b7b5110edcbd04463c89a3acb | Bin 0 -> 83 bytes .../9122dc2257aaf2616c3602e9fb45d53c15928274 | Bin 0 -> 375 bytes .../918d20b728aaea3e925e98ba4027d6edff2dbc3f | Bin 0 -> 2742 bytes .../91ab7ad3050dd9f3c30962969882c6cefe22b6d6 | Bin 0 -> 291 bytes .../91badef6dfd707a8928ca62cd592347c16241a3a | Bin 0 -> 355 bytes .../91d4623d5e024399da1bc270c9405de13a9120b2 | Bin 0 -> 30 bytes .../91f9d9449c25f836d440931f5f982043165208a7 | Bin 0 -> 376 bytes .../922284be94e034438aa087bbc8504ea37bbaf6f3 | Bin 0 -> 150 bytes .../9226b0a2074059e8972bdfed94ac9cbf93316c63 | Bin 0 -> 112 bytes .../924d3593850ef3c5508df3047816587819154291 | Bin 0 -> 1361 bytes .../925496bf0f0a5ffa046b819239897a481bbe6605 | Bin 0 -> 5987 bytes .../9292a63a01fec451dd1d748cb94fa1167a4c90b0 | Bin 0 -> 103 bytes .../92ad87bd447a649e58bf0d90b68ac3b1f5cf89c6 | Bin 0 -> 517 bytes .../92c60eaecfe278d6706afd595b568077ed0ca4ac | Bin 0 -> 9416 bytes .../92fdd36f4f267303bf3eb41534116d72cd51aca6 | Bin 0 -> 647 bytes .../9300e45be11757bf2b32aa8d3074cda82a77ffd2 | Bin 0 -> 1212 bytes .../93105ead1fcf4bc1b49ac9240b43e71d9a22552c | Bin 0 -> 3659 bytes .../93687baba974345611424845a0ad4a21401ba1ef | Bin 0 -> 144 bytes .../936d507c08e7cd0999ee9ac9ee80153b20a41477 | Bin 0 -> 1013 bytes .../938db7219725d5ef6ef605b0fffd4465b4a25173 | Bin 0 -> 3243 bytes .../93afe284d0921bc9f690ce14ce5f48f4b122095c | Bin 0 -> 461 bytes .../93e0a608fd2199f9363af71f96252efdf25f9ece | Bin 0 -> 115 bytes .../93faf85a713c4c71145cdaf67e11874107aba428 | Bin 0 -> 3684 bytes .../94035114a3e194e60d329e598cd85ce1cd187aa3 | Bin 0 -> 1371 bytes .../94e6b16a05a7f88c5d271ba99945d7a2dce99c5d | Bin 0 -> 52 bytes .../950effd316485a75b309e4872039ca622f9865af | Bin 0 -> 76 bytes .../9523d6a8e97ced6f66db578a2ea970763e75e0fe | Bin 0 -> 444 bytes .../9542017b825672beda9b0fd6864a8a89f7e86631 | Bin 0 -> 64 bytes .../95f1cb35ba311433ad3d0fb9e95bbb18d975c43e | Bin 0 -> 436 bytes .../95fd9d370539e07ee1880bcc33d5c89c7e97093e | Bin 0 -> 519 bytes .../9605b077198412a5d7cc55d01f60d33a7e151aab | Bin 0 -> 185 bytes .../96150fd59d947fb616e1bd0f8ad5ece90699e9b3 | Bin 0 -> 112 bytes .../96383ce8ff2e7b939195ef8d221873059c4d5d1c | Bin 0 -> 117 bytes .../96439c1e7922acc98ff538a1d73501577be0916e | Bin 0 -> 4714 bytes .../966b04475e3acf8d0e3600e682c7e698dc6fe540 | Bin 0 -> 1184 bytes .../966bb6bd347a42fbc36cf82efa23ba1040eda869 | Bin 0 -> 377 bytes .../968c01cafd47a902f5444d0293fd596d3edf38c3 | Bin 0 -> 304 bytes .../969ae7e00ef72155a3f50e6cab5dd06fc52f0a9e | Bin 0 -> 1601 bytes .../96bcd7d2d93b2d6c3b8e4d8eaf87b2e3f983a74d | Bin 0 -> 5903 bytes .../96c4c483876d247ee809d44db7c8207f95a97c15 | Bin 0 -> 787 bytes .../96ea3cfab311822e62fdc16293052dd4cffe9f6f | Bin 0 -> 23 bytes .../9712ff2ed541bd6ef2e4d09bf6b4f8945f0b78b8 | Bin 0 -> 205 bytes .../971646ed5b4ea823686d36cd23d7312c7d25034a | Bin 0 -> 34 bytes .../971a4167f1b7514bf4887c628f4cd4a3bbf308b9 | Bin 0 -> 64 bytes .../97470ecbdf6bf33444bca2c37a2a56b3882d95b7 | Bin 0 -> 356 bytes .../9753bff7b8284d88a97c5b2dc61fe716cae69b3e | Bin 0 -> 23 bytes .../97895ce3d5162e218d6585e9057bd0f368a25fec | Bin 0 -> 2415 bytes .../97ab937487039397ff9a99fe7d1a0f077a3f673e | Bin 0 -> 3494 bytes .../98518078b32f167be2fc452d4bcfbcf03bc49601 | Bin 0 -> 728 bytes .../98975cfb4d987b86021499a0cc836e5426bd6f90 | Bin 0 -> 7633 bytes .../98a338c6e877ecd7184953b94c573a19996f2ca4 | Bin 0 -> 3683 bytes .../98a4656dcf373600173440657e01edcffbb047cc | Bin 0 -> 743 bytes .../98b1e6ae40c3a3a009e7cf1f1e708c1ac17aa76e | Bin 0 -> 27 bytes .../98e74dcf39b2ad497d08c18b5153ea2a144bc7e5 | Bin 0 -> 613 bytes .../98e7571458d5eaa339a9b5c76b4e83ec05af213d | Bin 0 -> 342 bytes .../994c57b236cc91831b50bca8abd1126bcb3602d1 | Bin 0 -> 320 bytes .../99875e932b7e74936b188f0e4dd99f613d399102 | Bin 0 -> 2135 bytes .../998870e9b2cb6d4ab895265f5ae6b298ba73ce18 | Bin 0 -> 147 bytes .../998deadb75a78c6ad3af8477e6926e8746836f39 | Bin 0 -> 54 bytes .../99978452bc7b92d61d75beb32747f6f0a8b668f7 | Bin 0 -> 363 bytes .../99b61c4cf0137badd2cbcd7588acdf0ae44e3c1d | Bin 0 -> 99 bytes .../99de0e975562975b13053c295aba19ed41f3706a | Bin 0 -> 1065 bytes .../9a196c5d46be1fe9e027d866319dfdfdbb98a585 | Bin 0 -> 131 bytes .../9a1c6923eab442415b0d494d83d654f592a64155 | Bin 0 -> 77 bytes .../9a1cc4f4fde4044bb6cb1120b9c8c4e5506efb18 | Bin 0 -> 1749 bytes .../9a59e6e3cd1eadca34a2cd119b66ee8434c179f8 | Bin 0 -> 386 bytes .../9a68000c1d6b67ce0f877d8e66909b21ad9c58fc | Bin 0 -> 20 bytes .../9aa2c690c89d5f625b09e14f2c43f9fd14afcfd5 | Bin 0 -> 541 bytes .../9aae251c20bbdd92c9516d9d133f1b99d76fb07f | Bin 0 -> 44 bytes .../9adfa673049991f896bdde7b17544830f9bb9346 | Bin 0 -> 4197 bytes .../9ae09663966e1c0ddabe4d24837dcbff975bd09e | Bin 0 -> 263 bytes .../9b9068fa4b54265bd3d4a28c7e7aaf7764c445c7 | Bin 0 -> 4611 bytes .../9b92af7f33cda521d5c0b463857ea64e2c956ca7 | Bin 0 -> 317 bytes .../9b96f906708a867a13b871fd50c60f7a22c5327d | Bin 0 -> 791 bytes .../9bc220d4c3cb10a87d3dacaf4400c73baeeddfd7 | Bin 0 -> 687 bytes .../9bd4579f0d2bfd957a5e538c6c6a8b22bda48585 | Bin 0 -> 5831 bytes .../9bd6a3592429750ec6f70a55fe514a0329dce57b | Bin 0 -> 3853 bytes .../9be45712ceed32537c35bf5b5d9466ad799f2548 | Bin 0 -> 197 bytes .../9c207eeb7f4e8c9a93236ca0063fec3c2defe522 | Bin 0 -> 783 bytes .../9c3bcbdf77685d92f26a59e232608a2c12e9e168 | Bin 0 -> 154 bytes .../9c5be7c9dbcf8717c42b112402074691a9e9a41a | Bin 0 -> 178 bytes .../9c72bd7de4ddd3b9de6a6f9de6a045666b215f4e | Bin 0 -> 1704 bytes .../9c863eed1987477d98d5b7d2dd51c634f0b4b0c1 | Bin 0 -> 139 bytes .../9c971a8f00cd4213ef141c5cfb076aa72acc2105 | Bin 0 -> 83 bytes .../9c9cf1bc4c2f2819fb1e632af9526ba67f00134d | Bin 0 -> 291 bytes .../9cdac3dd620dcb5bc1b5c47d7767b5e31e543abe | Bin 0 -> 39 bytes .../9ceb6abc9c690354134a1750aa1478be230a7412 | Bin 0 -> 107 bytes .../9d2dafc42a11302531c35d285f2ec8e7c6dfe6aa | Bin 0 -> 1230 bytes .../9d43ed314c308aa3e99ee174cece9e6978ed6978 | Bin 0 -> 330 bytes .../9d47be04ab7180de30d3e9a7f51b42f3cc999d9d | Bin 0 -> 388 bytes .../9d758b246c11e4952909f85b058b2e01896e42c0 | Bin 0 -> 41 bytes .../9daf67f728c61964315b11e2b289811e579c1b35 | Bin 0 -> 3533 bytes .../9dd2f52f1ccb01a2457eb20cbc3cf494491f162c | Bin 0 -> 32 bytes .../9e0443fd19173b95c681e3eddb34fee58cfde099 | Bin 0 -> 816 bytes .../9e11ae746e6a7ea54d582783f80e02d7acabb091 | Bin 0 -> 83 bytes .../9e33acae58dc51485264f7bce51165f750186338 | Bin 0 -> 311 bytes .../9e399184045467d3328304ffccd3973fee51d836 | Bin 0 -> 64 bytes .../9e452eb011acf03987a08313d110470b96c0a8fc | Bin 0 -> 136 bytes .../9e8100e26a96b5d62e7a463afc0260c3863821d5 | Bin 0 -> 135 bytes .../9ecd143e2632610d0aaf060da78fb7a870457e20 | Bin 0 -> 70 bytes .../9ecd6eebe4bbe854bacec138e25ec7875e1577f2 | Bin 0 -> 28 bytes .../9ed6f7059d632b40cef17429762a30ad6f2ba99c | Bin 0 -> 27 bytes .../9eeb01c172ee203fd77ce335b502d9e1fa961585 | Bin 0 -> 531 bytes .../9efe64b38c2e70c4300ee6d800c230ac601e8857 | Bin 0 -> 1268 bytes .../9f3b14f9613c48c46dca8d1acf6224c3a701bac7 | Bin 0 -> 1858 bytes .../9f4d49b3c47dc0ccb317e61b95b3f737c7b7114c | Bin 0 -> 221 bytes .../9f7300eb45179c8879e7a1a329479b1dfdd57308 | Bin 0 -> 1039 bytes .../9f7f92a7cf99434fe212fdf2669af16cdf354aaf | Bin 0 -> 631 bytes .../9f853e9a3c03c49601b7bfda8e142de3d6d751b6 | Bin 0 -> 104 bytes .../9fa44f61e950bf91d6630f86712757b516cf3981 | Bin 0 -> 992 bytes .../9faf63648ca1a3dad54564f7bb995af726c70550 | Bin 0 -> 72 bytes .../9fe54927e326bfb95b3d2e8bf13e3bfa21952ac7 | Bin 0 -> 9853 bytes .../9feec73ad77f5ca53091c38ae34c46f47c2721ff | Bin 0 -> 468 bytes .../a01549d6e8016f076ad6dcc292ac5f79f3e0350d | Bin 0 -> 125 bytes .../a043e631f87675aa21afc7b3b6588d8ededa60b2 | Bin 0 -> 2538 bytes .../a0485f78201208d984acdf1393a9d48d7e987552 | Bin 0 -> 798 bytes .../a07083f6afd13a6052f04563fa7e7570e3b70a2c | Bin 0 -> 4428 bytes .../a071e66476542e017eb86cd37b1ed6c565013cfc | Bin 0 -> 87 bytes .../a0906591bf5de0c5da30089e1adba2188082d35f | Bin 0 -> 109 bytes .../a0be79f869d24c45df69dd4c97698c94c314edc5 | Bin 0 -> 291 bytes .../a0d2cb582c094790ecf3fd30bf93601b31879e7a | Bin 0 -> 187 bytes .../a12036ee57261eeb2dad00efe7dc69d16c6033ad | Bin 0 -> 2986 bytes .../a1316eb583bc20da09b009a2a99762ac5fbfbcad | Bin 0 -> 311 bytes .../a15e5b9eec3cbe614e3301cd2540deb2ae69d2ac | Bin 0 -> 8010 bytes .../a162c9a2d686301697b7f97415ab8b4736cffdf4 | Bin 0 -> 753 bytes .../a18dab4f54bdcbab8c53c5519f974fe74f16ae07 | Bin 0 -> 5712 bytes .../a1acbf2670eee05d7853fbb90b1e31fbae952d79 | Bin 0 -> 397 bytes .../a1ae295b9ac3f8501f1aaa56d20abbc414ccdd27 | Bin 0 -> 5240 bytes .../a1c87942e6a22ad8fa5f9678d16ae19c2d901bda | Bin 0 -> 5255 bytes .../a1ceda45844e0fd09b196684919dbfd7679117a2 | Bin 0 -> 518 bytes .../a1e0b86ac564040058883bdbbd336d933a511801 | Bin 0 -> 67 bytes .../a236f04545bc61cc5e6b46bf256c6a0f9a9dddca | Bin 0 -> 83 bytes .../a2613a1ad28520cc719d2bd9e197c6b32f98ff0d | Bin 0 -> 151 bytes .../a287da171d6741e2fbeed3f27fd1f8ffe408d021 | Bin 0 -> 94 bytes .../a2b404cbd1186f45190a479339fc4100b1274c19 | Bin 0 -> 428 bytes .../a327d07f20f9c3d4b062ac128d3cebf79889a565 | Bin 0 -> 71 bytes .../a32ca6d42611400ce24cc44beeaf1858b8013583 | Bin 0 -> 57 bytes .../a367b5cf303b6e67966fb09e9457a45150c5fb6f | Bin 0 -> 116 bytes .../a36fe7ca21b15d8c89a099000db40900e696d35a | Bin 0 -> 885 bytes .../a387593f91bc9670b8a243e8238a59433a560323 | Bin 0 -> 1070 bytes .../a3a191041e44240d7c0eeb24d688aa78d2718433 | Bin 0 -> 397 bytes .../a3b219e3283e118e230899e95b828be5baf9cfa3 | Bin 0 -> 34 bytes .../a44b9043432783029683473e95a40d1add48e042 | Bin 0 -> 493 bytes .../a483f2d3211a9240cf4925caf767d768f0ed49fb | Bin 0 -> 463 bytes .../a49ae0025763d1aabbddd982121995cddecf9e23 | Bin 0 -> 110 bytes .../a4a6f2bedb16b734f15f10f80ce070e9f2a332f6 | Bin 0 -> 156 bytes .../a4d61584e5dd21e28ae1fbcedc8a7a9c2660884c | Bin 0 -> 144 bytes .../a4f2ac9bdd5abb9daf7198ab95996cb6e11fe406 | Bin 0 -> 530 bytes .../a4f9f54f76800c30132ef39835c0ddcdcce1bfa8 | Bin 0 -> 72 bytes .../a5154413f9023dd90d394fdedcce05ece2635fed | Bin 0 -> 291 bytes .../a59b80f116ad55a5ef73049aa64d1f325fe3273e | Bin 0 -> 83 bytes .../a5bb5524b85d287718523694074e4e5d4cab2171 | Bin 0 -> 79 bytes .../a5e1a6b9621f7148a6023a6a06bc0146c0ebadf0 | Bin 0 -> 324 bytes .../a5edc48803cece402f0ba07b3c43c424edf3a9b5 | Bin 0 -> 920 bytes .../a640447ebc469c57ca4f05e11ed98aa57e997566 | Bin 0 -> 1572 bytes .../a6476ccebd8ebae1cb6b3fde08c471038d4b5e95 | Bin 0 -> 1959 bytes .../a6a3f9e41d1c021aad921bdb3a72f18f304c90ca | Bin 0 -> 64 bytes .../a6e39e882df913f278efe8d3feedcbbf4eb53093 | Bin 0 -> 227 bytes .../a6e73b66fc221db58e751e76655543b67ee8dd9e | Bin 0 -> 543 bytes .../a6fb7bbd03bd69127dbdf8ec9d4ab0297be9b640 | Bin 0 -> 181 bytes .../a71ca8038f7af50f9e1e30c98154a67b3f4a43bf | Bin 0 -> 604 bytes .../a7485c48c17e802b9ead752e7a3bbe7997b0f6d4 | Bin 0 -> 291 bytes .../a76dd0b1855881d8e8d6abfb4eb44251728ef099 | Bin 0 -> 415 bytes .../a7767835438014d7093753b482ac36296826f34c | Bin 0 -> 20 bytes .../a776bb4eb12460a12b0a08516619a3e18602b4db | Bin 0 -> 220 bytes .../a790dbb1ce129505e1460b2e9f45a32dbbebc53f | Bin 0 -> 103 bytes .../a7bf70e2244693ebb57be86296edc6b030b7191e | Bin 0 -> 125 bytes .../a8482bbb4311e09a948096cdbf117590f0fcfc43 | Bin 0 -> 2678 bytes .../a860e60ad4771cf45e24a14d2ce774affe60e260 | Bin 0 -> 230 bytes .../a888e0ac8278cda04dc0da774f4615ff314ae4dd | Bin 0 -> 64 bytes .../a8a6de14b61b02bbaac94e255efc74fcbff3740d | Bin 0 -> 623 bytes .../a8de7ac6f0c19d17dd81a6d8ac20aae872051d7b | Bin 0 -> 1696 bytes .../a934cc0c37dbcdd562e0da8673c03307f23c7af0 | Bin 0 -> 310 bytes .../a93b8509749981ef8c7b661e0d164d7e6216bc69 | Bin 0 -> 2084 bytes .../a949190899109d866812d2c7a6e28c34b84f8392 | Bin 0 -> 1268 bytes .../a958e1b48c373bca9e3b14066dd6c48310e02b71 | Bin 0 -> 1034 bytes .../a95dcad5e5638526261ffbee1bf5a0571f9aaf0b | Bin 0 -> 561 bytes .../a9629d1e1f96aeecbac9d6829962495bd2efdb2c | Bin 0 -> 28 bytes .../a97202ca076394dc82588f78895738bfdddaaf05 | Bin 0 -> 91 bytes .../a9727720f961eb112fad168890ffb83561867599 | Bin 0 -> 211 bytes .../a9a36bd579ea7ba3d1c2babd04c960f299da6362 | Bin 0 -> 624 bytes .../a9a87298aacfe2e0a84fd0eb754055cf6d86fea1 | Bin 0 -> 731 bytes .../a9ccc0b391a495d5b6252098df33cea9390d980b | Bin 0 -> 2706 bytes .../a9ce490dc6c8053be62a033d1ae1246000767564 | Bin 0 -> 161 bytes .../a9db64624d542e155d64fc037a9a6d803586e567 | Bin 0 -> 2152 bytes .../a9dbbc2c46e017bdf050f9f2d71863f2f3d5b568 | Bin 0 -> 71 bytes .../a9e4b9c37e1ae6a3979a594a0bbcc0a2270ed1ef | Bin 0 -> 94 bytes .../a9eef2a398e931f9bd11886055eca1b7bfa7f641 | Bin 0 -> 442 bytes .../aa3128314acfae7275a80aac465d5a9aed89b360 | Bin 0 -> 1552 bytes .../aa3b5cf30bae3044f10dfcf81e185c86457e1ba7 | Bin 0 -> 56 bytes .../aa835f26bafb30edfd404bd56d208229baa7a7c7 | Bin 0 -> 417 bytes .../aab31052a5268f8bbaa35b31e2d45a2a05f278ad | Bin 0 -> 490 bytes .../aabf26ab43b7d5a52b0704c13fffc35a6bea82a3 | Bin 0 -> 54 bytes .../aac4d51ad12f92d31ff64979d7337b615fb8f440 | Bin 0 -> 613 bytes .../aac838b5f906b02657ba665dcba7980c7ca6f6c5 | Bin 0 -> 27 bytes .../ab37c54ba76f1ec7f89fdf374d807e2e9adec1f3 | Bin 0 -> 158 bytes .../ab45766bcf41ef214807f0f2a770c498cb00a69b | Bin 0 -> 207 bytes .../ab5166f02b063bcb4a621f90b52c69b5f7b75d8d | Bin 0 -> 48 bytes .../ab5b85398990f00ed695ab9aa894da8c0e82065b | Bin 0 -> 64 bytes .../ab652bcbf897a3f127ab8de33224c0398b7a644f | Bin 0 -> 42 bytes .../ab73dfaf1659ce3f6aa9d20d0a8e78b83559891d | Bin 0 -> 52 bytes .../abe2ef0be51cc394695c17ec9c5c940bf0f3e01d | Bin 0 -> 312 bytes .../abe54bce25857270c2e583555869b81651f314e5 | Bin 0 -> 146 bytes .../abe54f1a387d7579fe0c02698b7ef0f5d947f046 | Bin 0 -> 869 bytes .../abe7a5092747b6df66eda1e6c00c2e1d68f06c2d | Bin 0 -> 56 bytes .../abebd343d3fc64bee98827a337f27764a704d549 | Bin 0 -> 126 bytes .../ac33d34973cbab0ad1e28a8fb4639a4d520e3e41 | Bin 0 -> 181 bytes .../ac5a0006559f6825e618dff0320b3d6a5a145251 | Bin 0 -> 3373 bytes .../ac9ccb257b47ee62747fffb4c2d352b7e6b79671 | Bin 0 -> 59 bytes .../acbe0567c3fae175020e9912afc6b3f76fdfe541 | Bin 0 -> 122 bytes .../acbe8f4fdd15eb0a673c5dacd74ad0329a18802c | Bin 0 -> 132 bytes .../ace9765c785247e789039a2f86ec2a24db646de6 | Bin 0 -> 1731 bytes .../acf1380a29bbd5908d03cbfebbed700c3ef3ecc8 | Bin 0 -> 44 bytes .../acf99477adba08e4d1e7dcb98d76b338d2d54408 | Bin 0 -> 173 bytes .../acff02256f177dc57366ded50f9a5691d17d4bac | Bin 0 -> 212 bytes .../ad44d10923af95502818a9c16c6eeabc21257763 | Bin 0 -> 1770 bytes .../ad46d0699465db53d5704d5824f4c5284d6817dc | Bin 0 -> 3170 bytes .../ad96cf9c8c167e57c2b262c8b3e41ccc4527a4cf | Bin 0 -> 8 bytes .../adfc349ce0009aa22027221b126ffcf7fac60748 | Bin 0 -> 27 bytes .../ae1b29c7a337b6b5a1e1f38c12fcee216398d63e | Bin 0 -> 70 bytes .../ae28e1ae448322b48fecbabc604444db47c98f4d | Bin 0 -> 1243 bytes .../ae45bbe11ddd15ee655c6f1737bf3a12f7ad2072 | Bin 0 -> 539 bytes .../ae5ed54ad1287111f888fec6fa47150be30cc816 | Bin 0 -> 8335 bytes .../ae85736e6546df7e90e2aca2c511599a1f51f641 | Bin 0 -> 920 bytes .../aea271c660878828c101738488cbe1e9435b32f6 | Bin 0 -> 60 bytes .../af7a9c6aa930e39186b960608e9a77df02c57993 | Bin 0 -> 34 bytes .../afc4842fb39d0756705d7cfd2d0b5f0b19d93bce | Bin 0 -> 3779 bytes .../b071faea3f9ee1e3d33adee0f151c6477ae42936 | Bin 0 -> 2822 bytes .../b07cdf0efb352222b74218b2f5062eb9decb1a44 | Bin 0 -> 138 bytes .../b0997222c4071032107933d8ae78955b7cc69d08 | Bin 0 -> 4242 bytes .../b09e2730a08015e7aae241af2ac90218c9973341 | Bin 0 -> 77 bytes .../b0dd6954412a4a0a05d2e579aa78d5d03d59f53e | Bin 0 -> 4288 bytes .../b0e07c3c6ffc39d628aa4fd17b49aaf81613a4ac | Bin 0 -> 96 bytes .../b1511d06c11c16ec1440b30cc890444b3c2bc703 | Bin 0 -> 3793 bytes .../b19789c640f4ea7866e883a21588861a958202a5 | Bin 0 -> 99 bytes .../b1ffc81b843584ead831b4f4316441335251b5a3 | Bin 0 -> 246 bytes .../b2255a50584833b14b52c2e389652732af2423ea | Bin 0 -> 320 bytes .../b22df65dc76e292606994f37cc59e70f454bcc7b | Bin 0 -> 6808 bytes .../b25f3f4843dfbd678da524bc2a620563524c52e6 | Bin 0 -> 136 bytes .../b26cdbc8f5a22e983d1a0d49191fd2303437227d | Bin 0 -> 7763 bytes .../b285811ec5395c004c87e76b4c979fa5adf3d439 | Bin 0 -> 368 bytes .../b298c49447bd503c26c95f37a6b610f2fd3dfa79 | Bin 0 -> 104 bytes .../b2e5a385f912f173011b580bdae4c80be3025310 | Bin 0 -> 381 bytes .../b327a0ddf07e14db913d1ceda31ce62d6606aad7 | Bin 0 -> 267 bytes .../b3400883c0788678344eaa1ed8999d95f2f18a8e | Bin 0 -> 1865 bytes .../b376f6e945394669fc9ea4af3cf6675e3e6106fc | Bin 0 -> 421 bytes .../b3cfe1056989e3f682df5379ad358c17c083cbc0 | Bin 0 -> 397 bytes .../b3e53b7ace590775786f02cac0d95b18fd17f9d1 | Bin 0 -> 117 bytes .../b3f3a8a19b295bffba94a1973f7a9190c6ac3773 | Bin 0 -> 1067 bytes .../b3f588d3fc14af03a77a97890e67f8e55907aa40 | Bin 0 -> 70 bytes .../b409a56c8fdab46df23370c183486a7774f8118a | Bin 0 -> 4529 bytes .../b449dd0709bf0f301df61c2ff6e6b9f5769574c2 | Bin 0 -> 377 bytes .../b44abe640c205484be676e742a78ce26a3b7a03a | Bin 0 -> 1471 bytes .../b475699fe77141254b66eadccb8902742b1fe0b2 | Bin 0 -> 2497 bytes .../b48da19140aaf30de20603b6a8ca09d1aedb8ec9 | Bin 0 -> 60 bytes .../b4b08cbe75be4acd7e46245f7b91f83f9687bc8a | Bin 0 -> 4288 bytes .../b4ef47ce432bc400ea3495434251301004db3832 | Bin 0 -> 59 bytes .../b53c4478455fb482e5fe303a712c30c160e208ae | Bin 0 -> 108 bytes .../b577cf887749e1212069536f650f82c3061df2b4 | Bin 0 -> 566 bytes .../b5a0c007f581e93c156519746401a5c4239b51d5 | Bin 0 -> 94 bytes .../b5da0746a1c293ee06bfe7a72243921c23c23127 | Bin 0 -> 196 bytes .../b5f993be28cdf693f716333045c0b1508af93ab8 | Bin 0 -> 750 bytes .../b5fb1f8c499b6659b92effd8d475173676ab738a | Bin 0 -> 321 bytes .../b60744035e92e66ca299510b166108290095f4df | Bin 0 -> 96 bytes .../b6297afe94b7c31d51607340300c6e27c181acea | Bin 0 -> 8 bytes .../b63f95c330903e8754f6104d524d08c8dd81cba2 | Bin 0 -> 1784 bytes .../b66399a0067e2193731571ea864dcea6b3a6a1f7 | Bin 0 -> 947 bytes .../b69f006d4fbac5e44a85ca0614e70777906ba388 | Bin 0 -> 136 bytes .../b6cd40722b12768db31904785d357b620ff0c1b9 | Bin 0 -> 1316 bytes .../b6ff4a532ed7c19e18010dd031a3f77f15ac85ff | Bin 0 -> 291 bytes .../b723b41d345339e2076ee49785c60f0dd40015fa | Bin 0 -> 961 bytes .../b756a5d798f33063f74686d87e976eb35ac6c22b | Bin 0 -> 136 bytes .../b771d0829ec60904243323174096b6750edb1413 | Bin 0 -> 177 bytes .../b79a13788c1fe97fa3d23fc76707caeb88e92f7f | Bin 0 -> 323 bytes .../b7abc8a12269edc3e2d7fc34387e4891f30c1363 | Bin 0 -> 110 bytes .../b7c6aa449626e3134a0681b0978468f513b2a797 | Bin 0 -> 856 bytes .../b80b08d3c6aeaacd8b728de401fe5de1a83c157d | Bin 0 -> 237 bytes .../b833b3682f3293a367ac06e850c6fe4df3540015 | Bin 0 -> 270 bytes .../b834df9b4a8c61f95e97eed319c2b29fc9a54e94 | Bin 0 -> 71 bytes .../b88e53c25988863c7cc291efdd94d36a467ba36b | Bin 0 -> 519 bytes .../b8b2391c7dc7e42bc45d85f104393efcc7fe15a2 | Bin 0 -> 291 bytes .../b8f2bbc177acb92dca459e813b195c167825a46c | Bin 0 -> 2567 bytes .../b8ff19c08e3f19b5e587e805d30426c52ab74630 | Bin 0 -> 123 bytes .../b9125e17c81c303796cf08b1a7d06e38b1c99937 | Bin 0 -> 64 bytes .../b915ecfba3b8b90ebe77b020575f8ccdaa458d57 | Bin 0 -> 64 bytes .../b9533e7c54532417edfde8f70b01885e088b3084 | Bin 0 -> 638 bytes .../b96e7428902912722f3e02f9a7d3c455282407b6 | Bin 0 -> 63 bytes .../b972bc246661492ecd9712eec6ba55c6a2105ea1 | Bin 0 -> 1840 bytes .../b97d7a01b98d5c9066f40af52106aeb44f623140 | Bin 0 -> 4751 bytes .../b986ae4a2d6f9c6819fd4c16a5ccb1567bf84f58 | Bin 0 -> 539 bytes .../b999368c5a7f8f59c06af09afa043716b6425ccd | Bin 0 -> 63 bytes .../b99be101e83847874570982f6a308e16dbfaa120 | Bin 0 -> 1265 bytes .../b9b52ee2bb98bcc841e590b7f66bf335761a0565 | Bin 0 -> 1420 bytes .../ba1cecb3ce813ab4ef3e9af5279a9eeccc585d6a | Bin 0 -> 581 bytes .../ba224778b11c871500f5e717660d69bdbe4354cb | Bin 0 -> 45 bytes .../ba31bf0b8f908337a920a1ce3ddf4befb56b6220 | Bin 0 -> 35 bytes .../ba3280bf6c3d4b58b2b1f31f20a7e3aa77951642 | Bin 0 -> 64 bytes .../ba3641c70b8441da240d677a3bbb5580a4f29d47 | Bin 0 -> 1851 bytes .../ba5be17908625c303576e31e4f5646b54b9142ee | Bin 0 -> 33 bytes .../ba5cfda6114e03a7c7966ffb5a536240a02cefc0 | Bin 0 -> 94 bytes .../ba734dff42bdec38561e89daee603abde827c6fa | Bin 0 -> 835 bytes .../ba9cd3ac3685ecf84474b7c2535f0c070575e8bc | Bin 0 -> 3501 bytes .../baf09c30c63d9ef1479ab6e8d10f034ba6697054 | Bin 0 -> 105 bytes .../bb0fffac0cfa8c6d69caaa114b9ea151c895235e | Bin 0 -> 202 bytes .../bb16158ae2943d127159f2f2bf731f2c7c114c19 | Bin 0 -> 145 bytes .../bb2064f74d27827fe01199e26627b10c6f8db744 | Bin 0 -> 171 bytes .../bb4e75fbae51eefe0747ecd19d4e073d1ee0458e | Bin 0 -> 2238 bytes .../bb655b756aff03973574256bafd9deeab013adc3 | Bin 0 -> 1912 bytes .../bb7f45d75becf6d7911c2d9c920f4372188b281a | Bin 0 -> 5555 bytes .../bb9bf292bba9c87e7ea094997ab3a9e1d473f773 | Bin 0 -> 397 bytes .../bbbf5ac8d6b284e593990477ff00f470b07432af | Bin 0 -> 1298 bytes .../bc00db75f5f0f4208a8c0b518588e725ef7a1293 | Bin 0 -> 2382 bytes .../bc05d51490425004eb77dc41690933d035d43898 | Bin 0 -> 209 bytes .../bc160ed69c0fbe7d67df785af52d775baf2346d1 | Bin 0 -> 2289 bytes .../bc2ff800aa2c961d982a89a616eb67867c443c50 | Bin 0 -> 211 bytes .../bc3342713af11e60eefb82c49835b1a4d3638ef6 | Bin 0 -> 96 bytes .../bc401ad3cfa42077c36eadfbd91b2bd6d1d630ec | Bin 0 -> 15 bytes .../bc73d1c7562b3fca91035791bd82e0997e6a7454 | Bin 0 -> 918 bytes .../bc84ed383c52d81fc4d528138fb697309741284d | Bin 0 -> 111 bytes .../bc95545d55ee2dc5461a5ab86aed67f26768809a | Bin 0 -> 38 bytes .../bcc85c44aeb07648c3dd05a78290db46288997c1 | Bin 0 -> 474 bytes .../bccd5a060d61c48a9cafcfb48de704813d9a55f5 | Bin 0 -> 361 bytes .../bcf43de638e81fb08eaeb2cc3c6f10a153cca212 | Bin 0 -> 34 bytes .../bd36b5a26f3bc5f42efe45f2b28a0d75bfacf492 | Bin 0 -> 303 bytes .../bd373f3115d9e84ef0ce864756140ad64560e0a7 | Bin 0 -> 144 bytes .../bd3aa36659b766a9feb50fa4b9c4d025c268bb79 | Bin 0 -> 45 bytes .../bd42e66a85475ba2f5c8022090442de536c743c3 | Bin 0 -> 175 bytes .../bd4b757c59ace6f4cddb2116e52c0de993962ac2 | Bin 0 -> 1167 bytes .../bd626a062d8c16c7c734a39668bbaaee65cbdc3d | Bin 0 -> 244 bytes .../bd9d6382e8ec94579a840e7ec4102714f28ea700 | Bin 0 -> 421 bytes .../bda4e07907d71b5a55fee697be0423563adcd516 | Bin 0 -> 72 bytes .../bdbe5bf6b6fe386d61b3fa5cbb8ba7ad0eb39fac | Bin 0 -> 54 bytes .../bdc73612a38ca5aa2ac451357a70d6c7b8367a74 | Bin 0 -> 195 bytes .../bdddf954a322afa058e937500954acf5ba792c10 | Bin 0 -> 44 bytes .../bde417d9a34e244422ec94db1e626867748e37e2 | Bin 0 -> 161 bytes .../bde74a690d0b7243f1aeb29cf473093bff6ac36f | Bin 0 -> 391 bytes .../bdf9e02a58f9124012f19284a0598219acaaaad5 | Bin 0 -> 432 bytes .../bdfa08c36f6122b373f36f57ffd29304a3b867b0 | Bin 0 -> 322 bytes .../bdfda7e3250cc2d1dc546ac9793fab9dfa333bd2 | Bin 0 -> 79 bytes .../be4fced11142b4b464a805a56296f803bfeb2624 | Bin 0 -> 418 bytes .../be64f4c7bcd82dfc58bc849faf56beca962fef2e | Bin 0 -> 569 bytes .../be72e9dc6f3e7c8ea71a1ab571a82201420f56c7 | Bin 0 -> 55 bytes .../bead3e229d39fd6aefddb697b1e215a5327e2674 | Bin 0 -> 242 bytes .../beca614380ef9cb5e18e1d1afdd6c8611408d70e | Bin 0 -> 712 bytes .../bed99fe184946a84346e907fec9d7721d121b7f0 | Bin 0 -> 305 bytes .../bee89705ade8fe4e38899c14a5d7e2baac8686a5 | Bin 0 -> 9478 bytes .../beeec1bb1872a3aaa5cd5e9dc7c0f37457fead72 | Bin 0 -> 198 bytes .../bef2e2c30fa34cb0a34f172baac3558a6a87363f | Bin 0 -> 519 bytes .../bf0562ba51cfa8d0c622528c4df394fb22e537dc | Bin 0 -> 230 bytes .../bf1d6aa7ad6305aae92ebce0fa1fdb927b61dac8 | Bin 0 -> 1568 bytes .../bf3c2c5cb1c250b8eafa2c783edfb8d7361d9d08 | Bin 0 -> 63 bytes .../bf40d50fd53a9a5c9c30b3099ce342c96332802a | Bin 0 -> 716 bytes .../bf5040e0b5ea527a9c44b946d691a87985ee7cf1 | Bin 0 -> 268 bytes .../bf53cde377dd8de17d611dcca78b543cb7b10725 | Bin 0 -> 417 bytes .../bf69973ce84685c15a7be81543757ecb3aee1ccf | Bin 0 -> 2822 bytes .../bf7ccb01c016777773a3a414ad2c4cec83e83255 | Bin 0 -> 74 bytes .../bfaf53a2f735f3810220a949946b4a7f2069d3b6 | Bin 0 -> 142 bytes .../c045cd875b77488eda0e53159d2f8abfbbf009ef | Bin 0 -> 305 bytes .../c05402f0b0597f1a3bd79b035312557a7f081666 | Bin 0 -> 48 bytes .../c087cec85355a7eb4194fc09bca6da896050670b | Bin 0 -> 72 bytes .../c099b68b8492915be92aba5784f967383044a497 | Bin 0 -> 976 bytes .../c0a1e8e17b9e5d10c03280990a84f35922c9e4ee | Bin 0 -> 920 bytes .../c0a80ea418e448d568eeb2929c9c103ab99f5482 | Bin 0 -> 96 bytes .../c0bdaf989b0781587535254cebe86019ee8442c5 | Bin 0 -> 105 bytes .../c0d374e0fa2d9c6c487bb948f296c3b71d18860f | Bin 0 -> 116 bytes .../c0d7b1e191d3725b489646a6b6b7876a8f192eaa | Bin 0 -> 207 bytes .../c0e5d735b97cfc249a8dc9ea43417abdedc4d4e8 | Bin 0 -> 445 bytes .../c11c6df1f0f2edbb84247466b1da4df3d7875327 | Bin 0 -> 127 bytes .../c1654084b501bd7310cb8b07dc84d33d7163d21a | Bin 0 -> 400 bytes .../c16633be8247861bdb14c8d8c364aa8b269b1243 | Bin 0 -> 60 bytes .../c1743a928e89cc41f1e94c37722ec038e25b6173 | Bin 0 -> 77 bytes .../c1753f6dfb39f6181df8bf5bf820b4080fc330f2 | Bin 0 -> 596 bytes .../c17a1fe01c53379df9f811704b2dd96920ff1d8c | Bin 0 -> 320 bytes .../c18b668398d42bd4e5e972b790d1d826527de606 | Bin 0 -> 113 bytes .../c1c95dbc6a32702bad5f7a9b732a7a29491d44b2 | Bin 0 -> 682 bytes .../c1d01692530541bf0b5c10bb4212434daaa0ef94 | Bin 0 -> 60 bytes .../c1f41a92346e9544d7bac335f52245683d1a118a | Bin 0 -> 309 bytes .../c2148476e353a74bc6f81f2d36dfd364b1a400c4 | Bin 0 -> 1203 bytes .../c237eb5a12b1c3b21cb127bdf01a8e52bc9f7520 | Bin 0 -> 2515 bytes .../c2518616993d4b4720e4c15b4b3652205fd6f559 | Bin 0 -> 321 bytes .../c285a9220df57e37cb1472097adb52ffb5f35c8d | Bin 0 -> 44 bytes .../c2924f83268cd28a6b6000463edb954f52985e89 | Bin 0 -> 3708 bytes .../c2a19eae3d354e480d602c9e157a05a5ee42e2a2 | Bin 0 -> 555 bytes .../c2c9398e5843515947bab8d1dcfd4ca7dd796c1b | Bin 0 -> 65 bytes .../c2d7ace0aab11aabb0dc904b2f7e5c1c682e7591 | Bin 0 -> 726 bytes .../c2dbaa3f740cdeda0b6ac2fd9630e80074962634 | Bin 0 -> 3729 bytes .../c2eaf128635c8bdaeb3876a5909eddb863330248 | Bin 0 -> 82 bytes .../c2ecf883d35a8af68f5f288c906a7b6df054e3a9 | Bin 0 -> 726 bytes .../c301ffcb09087fc43a0660a598f491211f366246 | Bin 0 -> 44 bytes .../c33152b170d95307f6f36e26075c457b03b1a544 | Bin 0 -> 60 bytes .../c33d980050ee5dee2243687094d07b2ede93f9b2 | Bin 0 -> 604 bytes .../c36faa052aefd7952838cf74f2dc7552d87fca77 | Bin 0 -> 5297 bytes .../c36fdab8a5ca0d96920048d38a858f6a22cf62f8 | Bin 0 -> 37 bytes .../c39feaa893a71a8af507238ebcd8c9705645fe2c | Bin 0 -> 96 bytes .../c3c8ab1c55c85f2d42033195e373f47e62e49a61 | Bin 0 -> 185 bytes .../c3e4dc561cad54f8dc7e95cc2523bb505af23f1e | Bin 0 -> 96 bytes .../c4398f7813568a5a9a77b242a7e0493a1880623a | Bin 0 -> 60 bytes .../c47037654ff876f9d0229e21cb93a4e0b2c6af88 | Bin 0 -> 813 bytes .../c4789e555e23ab8abaaa08aa3dbcd1db7a44b693 | Bin 0 -> 159 bytes .../c48aedce1b290396d1b133d0c9f733df76d94d73 | Bin 0 -> 96 bytes .../c48c51a51237475c0878c4478626dc4c437b0ea1 | Bin 0 -> 3016 bytes .../c4955b8434803d79cf2ffa8e704f62fa23de72f0 | Bin 0 -> 23 bytes .../c4bb2b9663c6e22e692d586dbf86516d8252afe2 | Bin 0 -> 112 bytes .../c4ca6bb0b187305aa5b69926b258b25a14d733b1 | Bin 0 -> 18 bytes .../c4e537b49c4ef7f04485b33d2f5ed814ad184dc9 | Bin 0 -> 29 bytes .../c51be8fd3a322d38ad826df5b6d1b93793c92990 | Bin 0 -> 311 bytes .../c56017c67c827eb4eff980d808b2833b328a394c | Bin 0 -> 292 bytes .../c585b3fe01d42d94b559ec01197ea2f3c1e5b653 | Bin 0 -> 2564 bytes .../c58937c79c93bfd6d4b0f5980d4e3347171580f9 | Bin 0 -> 4689 bytes .../c5897109c62c44eaec378b521c2859da07ac6517 | Bin 0 -> 291 bytes .../c5b94533e8e50f4d48c34ddd2350695b3984cb05 | Bin 0 -> 5472 bytes .../c5cbb2162b5cb5cd4be4588a2c8c6b61742b8118 | Bin 0 -> 98 bytes .../c5fa587edb38cb65f4d69b9ddb1cfe187f1e8453 | Bin 0 -> 107 bytes .../c605086a95e3c19c7993344c52943d591bd3a3aa | Bin 0 -> 7506 bytes .../c60a90ac933ddc30cc02ac6f911d0eb8fb0d0e9d | Bin 0 -> 436 bytes .../c6144b564674bc03c7a31a3bf50c5a4b5b2eaee4 | Bin 0 -> 16 bytes .../c61aea57d85fc37f30c7c6b1ff28bbac0576d07d | Bin 0 -> 1094 bytes .../c644c052825695db8f9aba697db03fc2a3935571 | Bin 0 -> 539 bytes .../c65c3e1b53486acea045eb310a79ce4278300ce6 | Bin 0 -> 1813 bytes .../c6807ad0abce915fae00020b6a8d2c5e5ac37a41 | Bin 0 -> 233 bytes .../c6c0f8643898bdc1c6154581be02629aa624296c | Bin 0 -> 1806 bytes .../c704fbc3299b1107a3678dea31dbd5418532196f | Bin 0 -> 4334 bytes .../c70d4feae5ac8e0f8c3dec68f80c43d09a9fe8ba | Bin 0 -> 168 bytes .../c7282164bb71207cadea4298b6854d6c39f314c1 | Bin 0 -> 939 bytes .../c73d57c233111d4e4e153ff0a6145d7b0f1e7b52 | Bin 0 -> 9019 bytes .../c73fb1a4c0ee864d2272014ac8345e8672e0a590 | Bin 0 -> 1022 bytes .../c75108dd49184dc745895d62d23269f6bf30aecd | Bin 0 -> 6497 bytes .../c7a25a52dc5b295cb596eb4db4f52c6344e7ca6b | Bin 0 -> 1020 bytes .../c7d5c1b9af9c7fb03d0063c3acf1fcd8d9e6cebe | Bin 0 -> 59 bytes .../c7d5eff0e811134274ab308ca474eea2e01cef77 | Bin 0 -> 51 bytes .../c7f8a7fc8f4999d259e76d4d44efa6ef170d04e4 | Bin 0 -> 832 bytes .../c7fa2e410ee8e5604558a644e2276a580e436e91 | Bin 0 -> 1038 bytes .../c8075d06ff77a1d9b8db829832377c4cbead3d3c | Bin 0 -> 398 bytes .../c80bc4b10b7ab0ecd4e990956394181f02c7165e | Bin 0 -> 539 bytes .../c8285970fa9c2858b7904416deede2c0fc762c73 | Bin 0 -> 1277 bytes .../c829e103a5b4d9ea65d2960586e1ff4db62a87e1 | Bin 0 -> 318 bytes .../c87105dbd39019c1f782ccdbc3deb68ed66db93a | Bin 0 -> 276 bytes .../c8a5e0e9cac772c74c3bbd44cd7ff0892c1e5ddd | Bin 0 -> 137 bytes .../c8a7a5f5b5259adb7b5d5c749a9551a69ee316a8 | Bin 0 -> 397 bytes .../c8ef514010f7d4dfab7887e8fd65f59beb55d668 | Bin 0 -> 1104 bytes .../c90a73d8e5f7f7406e154e8bbace1a7d3262bc63 | Bin 0 -> 85 bytes .../c971a959a3170e8a5926494331e57548e164a77a | Bin 0 -> 3112 bytes .../c9a7dcf6a63102bd517ee4380e187ce298b41baa | Bin 0 -> 291 bytes .../c9ba3813e1207598588b70268e379005da0552d4 | Bin 0 -> 207 bytes .../c9ce7c9ea0c60f099885606ac179466a2966247e | Bin 0 -> 519 bytes .../c9e7a6b16dfc79b89da41deb97b8b3b8a1707204 | Bin 0 -> 72 bytes .../c9eef3f90d004c53415eac296e190412865247c8 | Bin 0 -> 877 bytes .../ca26c8f12b80ba1fb63d849383d78f4bcb3b8adb | Bin 0 -> 250 bytes .../ca7f5940ff9e5edee2820ddcece6b96a38886dc2 | Bin 0 -> 64 bytes .../cab215dca69b6b149ef66b28063fea8eb9848388 | Bin 0 -> 181 bytes .../cac4370a845ba6b20433028ecb084713f1a6eb1e | Bin 0 -> 96 bytes .../cae7fc85f4af5d67ca556fb1cc9dbf24af4b8181 | Bin 0 -> 3069 bytes .../cb1c9f0b30a570671958f7c3e803fd67c6b3663e | Bin 0 -> 127 bytes .../cb311e6ee39d8f3616d45994c645f0384d5a5625 | Bin 0 -> 3546 bytes .../cb3c07a3ad09bd87dfd68f658e062d36a11a49c3 | Bin 0 -> 5389 bytes .../cbc69dab6cae35bf29e24232f46ffe76dfd6f7aa | Bin 0 -> 70 bytes .../cbdc77615f88ca0cacad18b5a32d79c3482ffef3 | Bin 0 -> 83 bytes .../cbe31afddefba21d9ab884068c14fb0bcd25ac52 | Bin 0 -> 291 bytes .../cbe7846585136bc28a9166dbb1d234b37fc1f0e3 | Bin 0 -> 5311 bytes .../cc0be56443a877689f4ecd37817956d6aed97df9 | Bin 0 -> 327 bytes .../cc2d27c3b7dd465284532a8dec9f01989b7bef62 | Bin 0 -> 41 bytes .../cc368077f18c2878e50e655be00e057a38d1bb60 | Bin 0 -> 726 bytes .../cc576a8a10c8f8dee59264b45d134e2a87a43073 | Bin 0 -> 443 bytes .../cc6c2a85dbfd53b3960dcbefe9d0a321e7901e70 | Bin 0 -> 63 bytes .../cc93137ee5804b97d30ba74289fe46723dda2f9d | Bin 0 -> 1122 bytes .../ccf546bd5e691f325f876389af30b20b7f9ae8d0 | Bin 0 -> 36 bytes .../cd05da85c627ec9662a58f856ed563969425c094 | Bin 0 -> 73 bytes .../cd2e68407b1c00e747a168559fd8200baf6fdbfe | Bin 0 -> 230 bytes .../cdb49b7273a3afa7ac2d4d686daa2881ab86464c | Bin 0 -> 397 bytes .../cdb79d661d3d6efd4446b73169a64b1b1ed66547 | Bin 0 -> 376 bytes .../cdbb773ced098057f9a0bdbcf9f0fe162bb6e6bc | Bin 0 -> 4236 bytes .../cdc369c8542ff210b72b45f7c48b72650c2f32b7 | Bin 0 -> 86 bytes .../cdcf868519192d73d4a15c60cc072cc05b9d49d7 | Bin 0 -> 1431 bytes .../cdd94e01e72872ced774f232f47a7983d000d645 | Bin 0 -> 1796 bytes .../cde6024e93313322b8488b1b93b683a112de5326 | Bin 0 -> 1742 bytes .../ce2286e8dd935cecdcbb30cf126d78d153df071b | Bin 0 -> 528 bytes .../ce56105277e39cb2d86ba4e9b10054f5a199f2a8 | Bin 0 -> 388 bytes .../ce7971bc497398bc1cd91ecd5ac920878ca60ccb | Bin 0 -> 1207 bytes .../ce7c780201dbf7be5241a70d2f996f4200726735 | Bin 0 -> 55 bytes .../ce96e4edd65b923819d7617ea797ac3618c182a5 | Bin 0 -> 320 bytes .../ce977f6decc834634958db92cef12a2ea9de86bc | Bin 0 -> 23 bytes .../cea847db38869b47510f3e45b8e73ee58504914e | Bin 0 -> 39 bytes .../cead1cdb695aef45387ddce9dc5d41a1b0578669 | Bin 0 -> 19 bytes .../cebcdbfb1f51cdcf581b3b001291b01ab126b565 | Bin 0 -> 570 bytes .../cec02cbd472a6d55c3b2b9c27ab9e64e98c83977 | Bin 0 -> 446 bytes .../cf3e11c79e51ee79064712d9b08acb43553427d8 | Bin 0 -> 110 bytes .../cf78478b85771bc7136f45e77e6122c307093a45 | Bin 0 -> 65 bytes .../cf7db27712dd0aeccb09e634aca79f316e016593 | Bin 0 -> 55 bytes .../cf8e1cf278d7b36781a1065d1d92567621029bd8 | Bin 0 -> 244 bytes .../cfb205ca072d2af0df1150c66bc38ecbe90c9243 | Bin 0 -> 94 bytes .../cfbf9a237d6500bb6059a7e56524a05c77ace966 | Bin 0 -> 776 bytes .../d0130cd4bc29754711e07368db657bb9cd8dea54 | Bin 0 -> 64 bytes .../d0231e0c95b8b9fbc61284bd8a28f4ad2ef53240 | Bin 0 -> 6180 bytes .../d033dc227a036cfd5d2076ef828fe6a90ff67d7f | Bin 0 -> 126 bytes .../d052cb373d289d78990f4916c246656b2fc89e63 | Bin 0 -> 60 bytes .../d0651b933edab83d9b7894adc894b460d917f77c | Bin 0 -> 436 bytes .../d07945a577c86983a50876f4cca3be5becbac1a9 | Bin 0 -> 704 bytes .../d0c2341a4a513326aee3a568ea84cf561df91813 | Bin 0 -> 4142 bytes .../d0ca65a4e40e0d1ab20cf11b2ee2c16859782044 | Bin 0 -> 519 bytes .../d0ed15d2c2099bfe724e6bb0154ca4b89125cbbe | Bin 0 -> 12 bytes .../d10f65f45b2e7aa05c325a8fb847f29ba67b97a0 | Bin 0 -> 320 bytes .../d12472170e163408840369ea7145bcaee2c2cd86 | Bin 0 -> 30 bytes .../d13caa844b4588db04ddba18bedf3de290ac1ca5 | Bin 0 -> 167 bytes .../d14404a23d06145ba42556241745f9d51452b172 | Bin 0 -> 45 bytes .../d16093db0cdf12db95c554c8bd5b048e55ae8485 | Bin 0 -> 3757 bytes .../d164342f102e09cb91860eb28ae8263bc881e204 | Bin 0 -> 32 bytes .../d16571b85c44e1404642222b1d1eae2294450c57 | Bin 0 -> 2132 bytes .../d19500784b6a9d4798cde15d3a868e1c8cffd783 | Bin 0 -> 237 bytes .../d19be450dca3539a645f72a7ccd1cd41b5341c76 | Bin 0 -> 902 bytes .../d1a1f5de116d7ef23ddbbeb0777341e119320856 | Bin 0 -> 31 bytes .../d1a8cb70dedde79586e9ef36bb873cfa73462564 | Bin 0 -> 78 bytes .../d1c77268a874dca5756f30999030b3c6910bbd74 | Bin 0 -> 45 bytes .../d1e97b3cdce6451109005160af0f48f9e25ad395 | Bin 0 -> 115 bytes .../d20ba3def715a65d1a22da856cd4e10fed55df9b | Bin 0 -> 30 bytes .../d2159c3ebac1f4c370371c03f1689fdfa62122b3 | Bin 0 -> 2742 bytes .../d233926bd30bc131731cdfb4dba48669a378415e | Bin 0 -> 3576 bytes .../d24adf5ce2dc77210870af9331a349e562143665 | Bin 0 -> 100 bytes .../d29fda1144b0adce46b618fbe00f7fd1ab19f349 | Bin 0 -> 54 bytes .../d2a5f72c7dddb3e9fac07f2293c6c848a847c4f5 | Bin 0 -> 78 bytes .../d2e6cb012ee464bef7e9de353e6ad6b736f0a68e | Bin 0 -> 333 bytes .../d306a7975cbbdc4ef9f0de149de3db6527bf1547 | Bin 0 -> 3236 bytes .../d314a1828eaee9db493863980931f2f2bb098f6f | Bin 0 -> 1574 bytes .../d31b8907044b8c6d35a466a2f7c6dab6d0631a16 | Bin 0 -> 265 bytes .../d370573379c184b223885adcac21c2469f51df2d | Bin 0 -> 1737 bytes .../d379045b7e9236f4953a53c6201c30640c190259 | Bin 0 -> 2753 bytes .../d3a379d6e7f4b3d8eeaaa0fb97a4f2250c7082b3 | Bin 0 -> 221 bytes .../d3a78b62d0f7701b2a7c781bcff34449242073f4 | Bin 0 -> 60 bytes .../d3b7af4ec749a9b3ae38de9c6b6e3cd5ecbca7fc | Bin 0 -> 5952 bytes .../d3e9b27e1faa48ee11e9c67b43c2cc44e70377f9 | Bin 0 -> 726 bytes .../d3f0ca62351ca0532ffeac4061390233054210f7 | Bin 0 -> 277 bytes .../d439e5add24b7ca4ca600a70a55298b6007e5272 | Bin 0 -> 67 bytes .../d43fae886cbc3db23590a942bff29cbe585a7a3a | Bin 0 -> 1343 bytes .../d44ef8f8a2616d7ada060a909846c50659118daf | Bin 0 -> 113 bytes .../d4d7607f4486c9efb3873ea4c923c8a580974aeb | Bin 0 -> 4544 bytes .../d4dec280ea6a9eb7dd2cfae5dc0a356a2b88a4de | Bin 0 -> 72 bytes .../d4f5d6fa6dfbb7a5ac903ff941bf89fb6d392bfd | Bin 0 -> 302 bytes .../d50faad8dcef722e85615ef7062bcd0c2450e3c3 | Bin 0 -> 8472 bytes .../d5301b956269de9916fe4d1c645e351e12aba073 | Bin 0 -> 64 bytes .../d5436184281795da4cb49f014009c12f26b7c5f0 | Bin 0 -> 291 bytes .../d5486574fe4683592f841b157c7afe8ef0efae10 | Bin 0 -> 202 bytes .../d5546bc7fba85de0c5c3992d397f7b71ea974f4a | Bin 0 -> 347 bytes .../d55dcb4d2ade11cbe8a980c6798a3e820c91733a | Bin 0 -> 110 bytes .../d56130fab1b561602ec18dc6b810d6698bdd1ef7 | Bin 0 -> 131 bytes .../d59e9dc446ae01e2990c4dd75ab365f30101767e | Bin 0 -> 3518 bytes .../d5cca32a3a254a97b217b2711ca0cd1f1f4aec53 | Bin 0 -> 115 bytes .../d5ff257c2dcdc20316ede596e11039a7ffeaf184 | Bin 0 -> 335 bytes .../d618b748bd0f8f0b4864b7b7fdc20786546e36bb | Bin 0 -> 98 bytes .../d64b8c6e1dd68f74c7cf411cfa31b01947972d35 | Bin 0 -> 2460 bytes .../d686d07108751a925d15be3ffd2eacbb5c1f1713 | Bin 0 -> 27 bytes .../d6fb7236854bf9c3881c61e59aedaf32d1a257fc | Bin 0 -> 65 bytes .../d716808d78d8e1968c6474aa4fb34af421b8159b | Bin 0 -> 2837 bytes .../d7223b4d4618d9f3fc3968b3800f80337bb51e30 | Bin 0 -> 3446 bytes .../d7677e72c9f192db848526148878c14dad81711b | Bin 0 -> 102 bytes .../d76c8905307e0f6ca2212d6b330d700d78b35737 | Bin 0 -> 2858 bytes .../d76fd781605a610b305761bfcdd225f148f23e37 | Bin 0 -> 473 bytes .../d79853b98e28222a14f34a1453cc04c2c6186a2c | Bin 0 -> 36 bytes .../d79ac33f0f816ecd8be534427c96610b1af8105c | Bin 0 -> 146 bytes .../d7a1def00d1723536925491958e25a19ae48f91c | Bin 0 -> 34 bytes .../d7add4db0a57cd5b62a23aab518bcc6d86989409 | Bin 0 -> 135 bytes .../d7f78aed6a4670d7308d7db39ff458455273117f | Bin 0 -> 265 bytes .../d7f79f6e53294225eea433f49a6882a11d22e121 | Bin 0 -> 1564 bytes .../d80014ef0f6421f5270c4d4aaca8c1b29c10716a | Bin 0 -> 112 bytes .../d81e5c190ca550e6321eb197320d3fc4d7a411d8 | Bin 0 -> 291 bytes .../d83fb041da36e614f3aeec79ca56ef2971ee0c74 | Bin 0 -> 5661 bytes .../d87c0f658de837898b8e03e251f77734cd45f4f9 | Bin 0 -> 96 bytes .../d88954b42781fc2a66f5383ccf39d273f7261e3a | Bin 0 -> 2479 bytes .../d8b4cecebce070b262e1800565a9f060499eb35c | Bin 0 -> 523 bytes .../d8d92102a337a48806001ec7bfaf65556161fae9 | Bin 0 -> 1935 bytes .../d8fb1599719a7a270ef529c58b02d21a1f98439f | Bin 0 -> 1265 bytes .../d8ff556a9db8ffc910a97f520dd23169a1468f2b | Bin 0 -> 44 bytes .../d90f283ce655f9dbe4f6f38eb6fc8594312eed20 | Bin 0 -> 4778 bytes .../d953c848aeb45872e25ce94546bab19857e5949a | Bin 0 -> 7213 bytes .../d955d54ae2fb3cfd83fa5071d6dbc2696c2c0a54 | Bin 0 -> 40 bytes .../d9654fd618bdb3eace22a12fc239c0438e79be89 | Bin 0 -> 567 bytes .../d968792ef8afe0dbe9eb3c54430dbc319b2cfd25 | Bin 0 -> 14860 bytes .../d9763553a2b0a41fff01ecbaabdfbf2d23963161 | Bin 0 -> 23 bytes .../d97bb8e7b2a415bfc1962aa9a35bc008f5e1486d | Bin 0 -> 209 bytes .../d9c33cbcfbec484f18914d6254581a8ab3ef634b | Bin 0 -> 4582 bytes .../da0a8e15559469a698c20e3c2c6f0c20ce7b3f51 | Bin 0 -> 115 bytes .../da0b97b87a86dc957fe99215ce46c242a9775c02 | Bin 0 -> 1856 bytes .../da111d10cceb024bf464cf57422322daca8bc3a1 | Bin 0 -> 134 bytes .../da2d787ee05a01a9f74f91544aa708c2fdeebb46 | Bin 0 -> 12 bytes .../da37f16487b8a88138cbdbc8ef18a2f8b4589bb1 | Bin 0 -> 4342 bytes .../da7d7affa77e0d8ca555dd21beeee2ef29386dd2 | Bin 0 -> 23 bytes .../dac4f6f425c3f8ffcf076f55403026b450dab8cb | Bin 0 -> 619 bytes .../dacd076df3d8873ff5f2a55771e0c4b5fc92a2a1 | Bin 0 -> 254 bytes .../dadba49088d5f626aadc44a0fc86810bfce1238a | Bin 0 -> 6974 bytes .../daeebd619b09d79b30baac72815def423545a920 | Bin 0 -> 772 bytes .../dafddc80515b2bddf2a51b6c430d71e06bd9a784 | Bin 0 -> 167 bytes .../db1a952aa32aba81eb247327b3a26d760fc3b5ea | Bin 0 -> 64 bytes .../db217250a84cdf672ff48f27d1699b717422d925 | Bin 0 -> 337 bytes .../db265a9d86ebbf8ed4715c195a9178978a46522c | Bin 0 -> 145 bytes .../db67dbcc5eba040ba1e660e72e60f0779bcf5ed2 | Bin 0 -> 33 bytes .../db78c7ce2b4ea6d5d9afc29470354d7b0193aea1 | Bin 0 -> 109 bytes .../db982712af5df90e71c202b4d07477725181eac9 | Bin 0 -> 263 bytes .../dbaf1a8f4d7abe6c0b99ab7f16c5a65f64fc6963 | Bin 0 -> 1224 bytes .../dbccd2c2fe883093c32115a93f6e012fed3af2e4 | Bin 0 -> 716 bytes .../dbf272a21770e2fda17a6fd1e7be1bbc53986d83 | Bin 0 -> 35 bytes .../dc774bc2158c6a142a5c151ebd1a0db99f70dcdc | Bin 0 -> 3488 bytes .../dca76fef5df79e3036a5053bc92ccfe191cfa4b2 | Bin 0 -> 1150 bytes .../dcac013ec2e6b2d68d81454d99368d77ca88c5d0 | Bin 0 -> 801 bytes .../dce086fc1b20f43c5e0b1493366c74d49dc8da03 | Bin 0 -> 3326 bytes .../dd2ec09e041349309ed53cab7375ea2a2007f47c | Bin 0 -> 95 bytes .../dd3a55237af6812451ae7d1127c887228e102dc0 | Bin 0 -> 303 bytes .../dd9699b27e7df118f581ae6a789cf6a329a98ba0 | Bin 0 -> 158 bytes .../dd9c8b93ccc47b1486bc7e56a7421af5069fb62f | Bin 0 -> 232 bytes .../dda1ea162062d30d8363f73ffce822375c4fa50c | Bin 0 -> 1072 bytes .../ddd94ec93857eb955118ed018c85e796a824904a | Bin 0 -> 75 bytes .../ddd9c54e797474627f0c5a3731d2a719c19fb0fa | Bin 0 -> 1381 bytes .../ddfd8dbe3ba25bd8f10b066cc51a9afd567fec4a | Bin 0 -> 41 bytes .../de0b56c62f02202a7c2db82e742eab5cf1b03c5a | Bin 0 -> 252 bytes .../de3b4a2b245d01d96690a360ead7eae357c6f96f | Bin 0 -> 839 bytes .../de4c8f9e7b341b6774efd3f416a2b2a7b00e0199 | Bin 0 -> 32 bytes .../de6493ba9067e33d3a5ec1094ce6d8946b59c103 | Bin 0 -> 172 bytes .../de745722759ff5dc16b1ac7e8de9141ea2b08458 | Bin 0 -> 3089 bytes .../de8723d7e809b0a4e6d5f2215c50ffa630da8b08 | Bin 0 -> 721 bytes .../de8dbdda4be2b98c52f16b9ad40f8b512b3d2fc9 | Bin 0 -> 324 bytes .../dec525a7aae18cb357b4dbbeb3e53ea6791191c3 | Bin 0 -> 167 bytes .../defdd47a02f9be879c953f12aa202950314658eb | Bin 0 -> 291 bytes .../df287e62e6f038f68fcdd9582de6bf79cf94c159 | Bin 0 -> 738 bytes .../df51902db05955171465f857fe037e215966de08 | Bin 0 -> 65 bytes .../df55fbb0ca882ba80eb5b5b01dfcdbcb20c017c0 | Bin 0 -> 218 bytes .../df959d247ca5c7959c5c81f8c01350fb74cf4a0c | Bin 0 -> 56 bytes .../df9c0d337d7617b4e687825025fb13d03a61a8d1 | Bin 0 -> 134 bytes .../dfa2ea8c89b69fbc1ff12954bbc1d12bd1ad977d | Bin 0 -> 7513 bytes .../dfafacde42c34934d91c5acd6e333b208585883a | Bin 0 -> 663 bytes .../dfb328870b05cf923b8de43d9bdcb81c06645a70 | Bin 0 -> 892 bytes .../dfb57ea36c035dc6c2ff33522413b133b6812162 | Bin 0 -> 65 bytes .../dfbb2bb2fbd5c47d65a383467247d93f98a3e5d6 | Bin 0 -> 2425 bytes .../dfc8d080e6255fae28c6e09a28cfe5b4c2dfb7bc | Bin 0 -> 294 bytes .../dfca772ae7374a8041fba65dcf987ac7521633d7 | Bin 0 -> 376 bytes .../dfded8685c7b60c25feb09ca2238ed08bc2b9915 | Bin 0 -> 45 bytes .../e01bc0ffcf6a13ca1945605c9e03279411bed00b | Bin 0 -> 161 bytes .../e032f19ec20433ddb3bcffeb2e8fda6ce196a5b0 | Bin 0 -> 2808 bytes .../e0480f9435b928330dc5d02f9c15210be6aae1c7 | Bin 0 -> 1825 bytes .../e09827fe7dd28915738519d1efcfd4fbfc2f677e | Bin 0 -> 96 bytes .../e09d44734ff6bda38cb5b146bac8631ec663d997 | Bin 0 -> 519 bytes .../e0a467b7a8d82725f59fccd0f01b2eafe28c6493 | Bin 0 -> 3770 bytes .../e0acda88696b98448d903d232ca2404a4f168052 | Bin 0 -> 1354 bytes .../e0d5ff5097d090a34c5918dcce8f97998401cec6 | Bin 0 -> 1233 bytes .../e10c6fe8bfe85de4b5a83fdb9315af70112bc723 | Bin 0 -> 44 bytes .../e11725327f59efa744a94bcddaa78ef7253da147 | Bin 0 -> 112 bytes .../e1385d28296b193b4b880d1c866ecbf276dd2be3 | Bin 0 -> 53 bytes .../e143cb6e3f164355fb1aa9cbca064e7ab7c69cde | Bin 0 -> 3387 bytes .../e1a5efd38d6b6e48dcf080abcd71194c4af0dcb1 | Bin 0 -> 418 bytes .../e1aa6ee8595f54f1a0215933a2b956e9609d2d31 | Bin 0 -> 64 bytes .../e21030be159ecd9e47ab88ebec356f42005ef0db | Bin 0 -> 27 bytes .../e25588b0b21a23070e48628b78570556b3703376 | Bin 0 -> 171 bytes .../e2857cad0a599fb59ac84c07c67aa17b381ad9ea | Bin 0 -> 730 bytes .../e297ca57f6d3c054564d39b0c5651276018cfabc | Bin 0 -> 54 bytes .../e2bfbe2548ef39e682da47b3965f263bd3894578 | Bin 0 -> 519 bytes .../e2e0e334c0a4f08f3aa71c0ec619e128da58bba5 | Bin 0 -> 799 bytes .../e2e78647472c4a8105f278cc76352a6aff7b8f6a | Bin 0 -> 124 bytes .../e30bb4c279ea9318cfb3aea6029e8c2e59de95ba | Bin 0 -> 82 bytes .../e3306c8aa1ad658c936740fd613dffe5dfb66f18 | Bin 0 -> 1120 bytes .../e33870d89ae4af4898294416283ca3e489d80a63 | Bin 0 -> 4501 bytes .../e33aaf763e92c4069389653e369f4620c4d9c07e | Bin 0 -> 291 bytes .../e34d295e63dea9a5fe9db468fd12901cc122289c | Bin 0 -> 303 bytes .../e351a1e8eba37af45e632c10bfea3c5512026f21 | Bin 0 -> 73 bytes .../e3d28185bcd7b9b3470c964109bf417210c32e77 | Bin 0 -> 3861 bytes .../e3d71f8dda8c6d8e209130b27dbe245fecdcb729 | Bin 0 -> 418 bytes .../e3f6486bc5b3dfcad10a33a7f0db388261b359ce | Bin 0 -> 117 bytes .../e42444a8237ae7ebeb66c097905476f573c79730 | Bin 0 -> 554 bytes .../e4f8001ae1f6afc03bcf21be1ec464bf323a75ee | Bin 0 -> 745 bytes .../e5105e3125af2e93e7713d6576b3c729a9ac08e8 | Bin 0 -> 4616 bytes .../e53f1876da3dfd7224ae1f069ff967ec4f979f71 | Bin 0 -> 500 bytes .../e55bbcf84d05f555e9d27341f4f3908fce8e227d | Bin 0 -> 7697 bytes .../e561c412340f703ef5fd82afafc2cb639a865372 | Bin 0 -> 30 bytes .../e5abb935f47adafd3a0d29121c2d1eaf00f9b9a5 | Bin 0 -> 5148 bytes .../e5e8ac4b517073f5de3587a3c5f06a7f200180fd | Bin 0 -> 546 bytes .../e606a20e3e71502d345d2d1bc8b2e6950ce4ec0f | Bin 0 -> 410 bytes .../e62f30d40b34535ad77dc43420a1348d02163e37 | Bin 0 -> 171 bytes .../e6319bb29360a4533fc53456a1223a08aa1512b4 | Bin 0 -> 7721 bytes .../e63596f9e62bfcda472785f177cc1abe358a400b | Bin 0 -> 99 bytes .../e6456de471c5f9aa289236b91ef157bf67d0e860 | Bin 0 -> 5604 bytes .../e6646b23322da355513f4d892851d63224485778 | Bin 0 -> 60 bytes .../e667a68e1464eca35ee62f571f2e388cabdd9f75 | Bin 0 -> 291 bytes .../e67723f60a89be6e36ece15cccdb5c16fe250a09 | Bin 0 -> 381 bytes .../e696a6129255a5d70d9987121414e47d6cc4e066 | Bin 0 -> 77 bytes .../e6cc037d21c12fb058b1b8374e52d1a88bbfbaf9 | Bin 0 -> 395 bytes .../e6e06735e4026dec36cf60f81cc890817c4798ed | Bin 0 -> 115 bytes .../e73cf95392aec87a73e25b8bfe677627f5f71aa5 | Bin 0 -> 121 bytes .../e7791194271ca84ad6898ce1bf4293b54961f398 | Bin 0 -> 50 bytes .../e79652bd6c1a36214a81af86f3d55e57262eeb73 | Bin 0 -> 73 bytes .../e79b3e05517b46ca9810c69af8a734364aa4d369 | Bin 0 -> 791 bytes .../e79e10245f5d7925504c3766d6d639f4028374b7 | Bin 0 -> 623 bytes .../e7a3be49885506e119356d6e6933e6b56db0fba0 | Bin 0 -> 27 bytes .../e7abb499300c53c2442fa695db7f1ce0ef1beb65 | Bin 0 -> 1058 bytes .../e7acf4302cd5db4277ffee1c52989da4cb34c28e | Bin 0 -> 507 bytes .../e7bbc38111eff481c0735e4f83abf247da7ecd84 | Bin 0 -> 528 bytes .../e7c0dd959df85ce209333e7b8277d5014691ae0a | 1 + .../e7cb06ab3f5a84f5a5ee7ac6019208cc34bd65cc | Bin 0 -> 410 bytes .../e7f41d1691c45c9fc327dc5f68ebdcaa7b087a4d | Bin 0 -> 239 bytes .../e7f745a340e1d71ddd1aa24393842604c5884e6e | Bin 0 -> 45 bytes .../e806adb556a4e63232af572bf724032b8bc01ae0 | Bin 0 -> 53 bytes .../e808a89f2ffa8ad1009d762f5a35b628a37af5d4 | Bin 0 -> 4197 bytes .../e818abc68dbc4b3dcf94ce373018e64ea2aa16d7 | Bin 0 -> 268 bytes .../e8306dbe1e499abc8a9c62de707964c94d939950 | Bin 0 -> 2406 bytes .../e864c8bedbf157efe23f6c5e19f494795d6becc9 | Bin 0 -> 291 bytes .../e86ebaedfaad5f8dc7772b01722777ca0eed3ea0 | Bin 0 -> 8203 bytes .../e875be2fbec78fbaa7c2283d7ed0350efc3338a3 | Bin 0 -> 903 bytes .../e89901544228d76ccc525d393ab51c6a549ae038 | Bin 0 -> 5097 bytes .../e89a98140c8e2cc1f327b8faea7803d1615f5fc7 | Bin 0 -> 5701 bytes .../e8a697e74aed31ddadc48a1c395ef346d870befe | Bin 0 -> 890 bytes .../e901ea786b719d8a0690515a32c8d80aa8ba032f | Bin 0 -> 2039 bytes .../e91b6e6847dda89415ac4668570240bcb11d473b | Bin 0 -> 336 bytes .../e933da55146dc8c7bb1a3f6171279210c808254a | Bin 0 -> 280 bytes .../e95d7016955664063b958425c2b22abe1381cf4d | Bin 0 -> 1080 bytes .../e9aeef847c1907c4874833f36c2143e48964bd58 | Bin 0 -> 40 bytes .../e9b32f8462873d0218783fb0d377d27b043960ff | Bin 0 -> 64 bytes .../e9c0844315a8e9d85be5f21e11e699e934e9b836 | Bin 0 -> 624 bytes .../e9c8779d135605900c528cef37a98b925dc76f60 | Bin 0 -> 30 bytes .../e9cad3d0c159894c5dee499073d8c024b0730d75 | Bin 0 -> 127 bytes .../e9de3702419e7e04f51225697217c8430a9f2b9c | Bin 0 -> 119 bytes .../e9eb73f95219a17574351a7d9f3d445fe5d1e079 | Bin 0 -> 302 bytes .../e9ef1c2cf80bf7fe34e13fcb53e474c341f5a7e8 | Bin 0 -> 334 bytes .../e9f1d26ed385f2425e3568dad3cb76b7fc7160a6 | Bin 0 -> 397 bytes .../ea003969585e0b1797f93b121f17b885eda8ebb7 | Bin 0 -> 829 bytes .../ea1ae1a384af7d48076ae5fec8e8b9bffbdd6d49 | Bin 0 -> 156 bytes .../ea9b3df3fab33cf5d6bc8dec8277ee9c00d0a0ef | Bin 0 -> 136 bytes .../ea9b8bdcd914b5a2739ef68b317bec579118cd93 | Bin 0 -> 567 bytes .../ea9d283d1c5b9dc2b355a7a6778a8c5f74028a97 | Bin 0 -> 314 bytes .../ea9ff7a830d41a23e46aebd8cd323c21036f0ee4 | Bin 0 -> 72 bytes .../eaa0f44e1e8de1ff833f408a2910c512ef99b733 | Bin 0 -> 123 bytes .../eabc169b6a72df669010081c12d171706469767b | Bin 0 -> 3728 bytes .../ead6a468d1a9ae1b647033ef6533e39334619277 | Bin 0 -> 291 bytes .../ead86f693a4cc0caf4b112a00811043329d79120 | Bin 0 -> 48 bytes .../eaea8fb7554376ccc858d12a3b0509bc6c878bb6 | Bin 0 -> 1621 bytes .../eb3082c806447ce974229f57ffd366a62345adbc | Bin 0 -> 32 bytes .../eb3356487a3d9d7b1d8a3b67142a57557a5971b7 | Bin 0 -> 2215 bytes .../eb60cb628f1338e214907d0f3782421fd25ddf23 | Bin 0 -> 3951 bytes .../eb6d6b5be271ab5d3189a9978e1d0eae82759abe | Bin 0 -> 66 bytes .../ebd36a1cb97d8d23821a5849184673033a386c14 | Bin 0 -> 3902 bytes .../ebf7f4932cf43d47fe22c46097a5771894b6cccc | Bin 0 -> 22 bytes .../ec01ca986ae4ab0770f1970cff29048b41da3c03 | Bin 0 -> 4815 bytes .../ec1dd04cfb9a60353d85e9c8b44672abf3ee0d72 | Bin 0 -> 71 bytes .../ec1e6b79c9eb0931b50fe9f603964419cd9c4761 | Bin 0 -> 32 bytes .../ec6de8eaa16e15ac00b8ed7749903d6094e4a7ad | Bin 0 -> 119 bytes .../ecd9ccefd5625ed69ed2c4d13d1931cc621393f2 | Bin 0 -> 10754 bytes .../ecda1aaca20c8569cbe4a8823299c7fcd0fd9c17 | Bin 0 -> 2999 bytes .../ece83639c9b601af344096967d048bbd5bc60a06 | Bin 0 -> 488 bytes .../ed67dcabd741c6d78b4ee6e4564f2c9bbc19b9a2 | Bin 0 -> 2782 bytes .../eda78a08535c9dd6c4cf6a18d9111cd20992b02c | Bin 0 -> 914 bytes .../edc7ac48d99ee81b899b6c592a16248b25b34e4f | Bin 0 -> 3831 bytes .../edde05c589b284bd2e2a92a15ab0c564f6900678 | Bin 0 -> 1963 bytes .../edf5182066c6a4fb9985d314e3ae77f03e679621 | Bin 0 -> 774 bytes .../ee0874697ccaaef9a7cc6aaf465a2e2127003f7d | Bin 0 -> 27 bytes .../ee1b0fb281c5e465792a1d91d87a2c20431296ba | Bin 0 -> 54 bytes .../ee2d967619fdf7e9f9efcccc98cb51018524844c | Bin 0 -> 152 bytes .../ee39da1078416cf2d02ae04c68f29534c467ee10 | Bin 0 -> 291 bytes .../ee43b95846b18c71b25af88a8457dec3b7c1a7a4 | Bin 0 -> 5593 bytes .../ee4d5eec6497491372d3295dee86bb56d23ca51b | Bin 0 -> 7633 bytes .../ee594b7eb86bae17c023e8ace66d283aae93b139 | Bin 0 -> 114 bytes .../ee63fc26276c1a518136c7aac74a4518cdb4479d | Bin 0 -> 302 bytes .../ee6e4933b1acad1d28aca835ce428d13d8877bb5 | Bin 0 -> 291 bytes .../ee6f8bc1b2ed4c0dbf162113ca4b6308f6e6db5b | Bin 0 -> 220 bytes .../ee79d8894c40a65a9d16d5bdeef4f60615309722 | Bin 0 -> 102 bytes .../ee7f90a78dba458b2dc2d19cca0fba84569665e2 | Bin 0 -> 45 bytes .../ee8e15ead8137e20282d725ca537a9c74b964b91 | Bin 0 -> 225 bytes .../ee8ff3c66db9c09247f6170fea7e58c6cebdcbca | Bin 0 -> 2090 bytes .../eea00134216a5010abb3426f1ca157d3f7abfd5b | Bin 0 -> 28 bytes .../eebe03bac30a537f78c88ccaddf70faa08c12856 | Bin 0 -> 1265 bytes .../eee28a32747f22abba34346acf563f71e945993c | Bin 0 -> 101 bytes .../eeebd1c9d79d24d2bceaa576bab24ee4c245b103 | Bin 0 -> 3076 bytes .../eef512d78623c795fe2275bbc676d7ec60c5bf0d | Bin 0 -> 301 bytes .../ef3cc8e405297f69430503d826b83f1b7b39f9bf | Bin 0 -> 64 bytes .../ef7ff5ef6f075e66c7d58f3e2d2b167348ab0df7 | Bin 0 -> 519 bytes .../efa8356f9d97f450446704bc2a5603857545cc04 | Bin 0 -> 801 bytes .../efdd8d16e26f007e87e6f8dacba4fe93e92ae262 | Bin 0 -> 84 bytes .../eff2c3fe3d11db8325b991f875b8b58b2fe781c7 | Bin 0 -> 300 bytes .../eff825ca39c7b582c8520012b05439efce90c288 | Bin 0 -> 604 bytes .../f00cefae706cac62e433541175ae4f4767e9dfac | Bin 0 -> 156 bytes .../f055eddd1db686a30b26b99c2de8fecb20e42bec | Bin 0 -> 795 bytes .../f06ba47db372fcb7cd5650afd6f40d75b43a36a4 | Bin 0 -> 112 bytes .../f08e3a6ca4a60e8a366630c63e4ae59f2554a532 | Bin 0 -> 2209 bytes .../f097572eeaaa7ed53d6de50f6ec47c463b92be65 | Bin 0 -> 1339 bytes .../f0a17ff3153aaf3bc180a6beb36c312ee7152532 | Bin 0 -> 291 bytes .../f0ec63785572eded94b61b17d52e949fd867d966 | Bin 0 -> 397 bytes .../f0fcd3f173325ff76cc7de426bb65a572cf50d7b | Bin 0 -> 539 bytes .../f0fff6c7292de9810b7b787831ec7a84a2a13638 | Bin 0 -> 91 bytes .../f10eded07f1db969c2799ea8d8969d0e8ede0eee | Bin 0 -> 6521 bytes .../f17bb6fe1915358d8dd02fe61463c247795297c7 | Bin 0 -> 1045 bytes .../f19772365847b41a8312a1eb7c0543f34a90388c | Bin 0 -> 375 bytes .../f19b7a0ea3ff6a972bc3347bf658da2b8d29be67 | Bin 0 -> 5212 bytes .../f1a57b930000e625ecc2a666070045f826661e3b | Bin 0 -> 31 bytes .../f1bb42be36ede2a3723bf48610ac3f2eecef78a0 | Bin 0 -> 44 bytes .../f1cb986361f27aa3552f4bcce4b9c39584057966 | Bin 0 -> 92 bytes .../f1cba12917589910ccd4714a5c52a0742cf59ea9 | Bin 0 -> 5554 bytes .../f1dd4bf8d912562c65ff5146372f8bdef4485f75 | Bin 0 -> 1545 bytes .../f1e4f449f95ad8996cf1e5874048b9dfbe951f72 | Bin 0 -> 66 bytes .../f1eb15222a64d0d15fa7085f043115c6a59c984d | Bin 0 -> 306 bytes .../f2457a6a3290cbc4942315d445dfca05bc21890e | Bin 0 -> 628 bytes .../f261978cd6940006a12067f87f7bd09a9512fd06 | Bin 0 -> 1148 bytes .../f27c0cad181d3fc7aedecc712e1c54b6a1f23124 | Bin 0 -> 1042 bytes .../f28db80affb4654a236cda0e16599e0ef6bd9147 | Bin 0 -> 9536 bytes .../f2ac1874ffbc8428b4c8c9cae2d12464db066533 | Bin 0 -> 57 bytes .../f2b604511e8302b4ac690153a027d09a4165a6cb | Bin 0 -> 103 bytes .../f2cf4e9f35011363d872665da79217f03883ac06 | Bin 0 -> 76 bytes .../f2e04ddaa474ae661767a19694fdfc96de9dabc2 | Bin 0 -> 340 bytes .../f311de5364ab6c4ed74545685601e61067e2fb0c | Bin 0 -> 94 bytes .../f35880d06721c35a1668bf0de2ef11208839ac3c | Bin 0 -> 80 bytes .../f35935ecb59f06bf6fd395bd2db8e8061c5697d2 | Bin 0 -> 23 bytes .../f366c30b2187024b5cbd700c0cc1d2232201444c | Bin 0 -> 27 bytes .../f3868764f073358b4dfdf32918578e66d1911198 | Bin 0 -> 554 bytes .../f3a7f5c98135064f84c9d18e23c74526809e3736 | Bin 0 -> 33 bytes .../f44e15630e51e5bbbf396eb77d788218b80d55d9 | Bin 0 -> 26 bytes .../f462cced67b4a00e74215ebe90c62e4132bb2c93 | Bin 0 -> 317 bytes .../f4635f3d37a65de846eb23b4980dec1edcbd7f43 | Bin 0 -> 2515 bytes .../f4a0e82483653bd928759f72d89ed47c027d37ef | Bin 0 -> 2822 bytes .../f4d88b100b0b4ce2c1986ed8ea2bccb87f707293 | Bin 0 -> 1090 bytes .../f4e8a6f561781ea76e34092ba86ab33ef2c88fe6 | Bin 0 -> 23 bytes .../f4fe259be1038b49bfa0d410e280497f080dde18 | Bin 0 -> 181 bytes .../f50ef30f1957f25d7c94950ee38c0a13c974783e | Bin 0 -> 106 bytes .../f51d41d223a7b1a4e2ff4e6bf811966f9b083a08 | Bin 0 -> 1216 bytes .../f529ce418eca30b07af55806f5dee900142bbcec | Bin 0 -> 593 bytes .../f52dc44c5761334ad81d92f402e6f59b3d6b8865 | Bin 0 -> 2665 bytes .../f543b4cd55ac4eac283b475ee5d9ab8137b73daa | Bin 0 -> 740 bytes .../f576329dfa6554430c33e7cdc87442fcde2cad13 | Bin 0 -> 397 bytes .../f5a4e377b705da26b0ba5f9c66f83bb4080b7fab | Bin 0 -> 63 bytes .../f5a9016c7d0922eaa3c8a154a770fddac2339d51 | Bin 0 -> 224 bytes .../f5b4ecf10899a183929cd9fa3074d381667ac97a | Bin 0 -> 60 bytes .../f5d3cfb204cf313a0aa670fbf75176f3a9c4acdb | Bin 0 -> 150 bytes .../f5ec9b5d9bddb32d6e3b4ccd22e7360d42baf918 | Bin 0 -> 88 bytes .../f5f171c08fcea1de77ef869254b413ea7a72948f | Bin 0 -> 110 bytes .../f639d4f1122aff006e2f7228fae0309aa2252d18 | Bin 0 -> 3984 bytes .../f6815f4cbf4eb8e400b4b2f19db9394919a1d5d7 | Bin 0 -> 9071 bytes .../f6ccd16a3d2fa91325f502fc717f025b5e5872b1 | Bin 0 -> 201 bytes .../f6ea23c56f9a4fdebcb92923d7df6c679cbc0e62 | Bin 0 -> 1349 bytes .../f702067f7ec61e31a8a1083f6a6b23863b577d40 | Bin 0 -> 203 bytes .../f712100b2fbc591a20a5f93c99e8769b986b4971 | Bin 0 -> 716 bytes .../f72a1c537b7b47c417e76e8f1053f4c738074eec | Bin 0 -> 4568 bytes .../f73513b34f4d6afd498b3b3e983141c2ebaf01d6 | Bin 0 -> 174 bytes .../f7512586f9a54b6910ec2fdbdb14868987044fe6 | Bin 0 -> 67 bytes .../f7670fffec306e65a96f4440c5438ac9d992098f | Bin 0 -> 34 bytes .../f77658bcabb99fa3da9dd1f09d7f6c2ad15726f8 | Bin 0 -> 5306 bytes .../f78b1e49d9f0404d81d7042a085a93b31288bd60 | Bin 0 -> 77 bytes .../f796108a67f44bd1e7c517be681aa8afcc9ec290 | Bin 0 -> 1308 bytes .../f7c6d84c8bca0c77179ec1a09cd3b065a1213c8c | Bin 0 -> 165 bytes .../f7dbb3aaf6c14d9dc216b0022c4be84d10c61ec2 | Bin 0 -> 155 bytes .../f7e18b2664eb65101785ede39caebf5b95e56f91 | Bin 0 -> 14 bytes .../f7f3df2366b2f5d286adddea570a3e0ba87989db | Bin 0 -> 145 bytes .../f8059d9fa04a2761543e772f7ccdf7fc9f0ddf64 | Bin 0 -> 302 bytes .../f8303de6f79d7321fd929e3c66b7e94be094297b | Bin 0 -> 986 bytes .../f844b2b499998bd3bde54f5cbab886e426778356 | Bin 0 -> 500 bytes .../f8d4d01e1f88fc713db6bb745c93bc912e40a9e0 | Bin 0 -> 986 bytes .../f8fd4c23e879447c1eabe6816c92929dfda78a2a | Bin 0 -> 4401 bytes .../f905f64e6f916f08fc345a0c4918218f62160378 | Bin 0 -> 516 bytes .../f9133e6d575a1a533454490d3d7c669793d4e4b2 | Bin 0 -> 60 bytes .../f920ed3f65db437e0b0bc1f58b0f0c26db59555d | Bin 0 -> 501 bytes .../f938ce61eaf45a64623c100d0ccf9b3704d62468 | Bin 0 -> 407 bytes .../f94a738f643ec23f266b120b4ed72e7ba75c7c55 | Bin 0 -> 512 bytes .../f9a1d1a4d61907509147463689c53be359a98bc5 | Bin 0 -> 130 bytes .../f9aa0c9290bc6ba6de3fef6c1ec6d144b3f2588e | Bin 0 -> 7140 bytes .../f9b00b8ed2372654d19f5da5beebad49beca6939 | Bin 0 -> 1883 bytes .../f9c0ee13402c3cb8e9e46e878a23e3561289bf78 | Bin 0 -> 604 bytes .../f9c45cfc8d2263a3055bcbd0599e8459ffb9bf45 | Bin 0 -> 26 bytes .../f9c920254fae1bf9f74e61e66fdc81d1bc3ae455 | Bin 0 -> 519 bytes .../f9f430c25724ef79b2444b5b2a43289dcb5403c6 | Bin 0 -> 1076 bytes .../fa243a1c3b0e4aea545bfacb24f7a1a827836a70 | Bin 0 -> 1630 bytes .../fa336a045ab4a55488c332d6680927a50ada3b6c | Bin 0 -> 662 bytes .../fa40a60514dce0fc9081b0375a407b0852f68764 | Bin 0 -> 75 bytes .../fa54b1f922136e53bddc1a1d02e523af7098a3ec | Bin 0 -> 44 bytes .../fa6b39cecb505de5b62d929189fd1adb6c448807 | Bin 0 -> 419 bytes .../fa6d58e5031f9c8747edd06f479674df91a078f6 | Bin 0 -> 333 bytes .../fa7f82a085b4cfdd026f81bdc12ce1e9e23b2960 | Bin 0 -> 45 bytes .../faab956e71c404b69d03d3253d6eb68214e8aadb | Bin 0 -> 30 bytes .../fabbef827d375b6dff43e61f780ed809d576b0fc | Bin 0 -> 31 bytes .../face3bbba792cc08169d4c2bb4fdb1aa97c962d2 | Bin 0 -> 60 bytes .../facfbbc235dc832d7101b875d63a9f301e035332 | Bin 0 -> 23 bytes .../fadd36dbe3a22e79da89ebfe44418d5353d6b781 | Bin 0 -> 64 bytes .../fadd501fe36f265eedb1be2d06b1c23e3f492da7 | Bin 0 -> 31 bytes .../faec830d6894b2243c42edeb5ee46c752cc5a629 | Bin 0 -> 51 bytes .../fafa7e2bb1fe0d1001ece6d0e80cfd97868e6fda | Bin 0 -> 99 bytes .../fb031857d3b9f770c9bab1678cd905b7669cf625 | Bin 0 -> 2241 bytes .../fb77876c3c02bbbb3ad35cc047209c8f9c1875a0 | Bin 0 -> 961 bytes .../fbae44dc11451b65ce3e595fb0af8c71810f526e | Bin 0 -> 623 bytes .../fbc8dd9923b6872328d51deb62e9d9ead4f87ddb | Bin 0 -> 149 bytes .../fbd5708cd7a92956b72980b70ba09c1cc7dfce74 | Bin 0 -> 6309 bytes .../fbe0aeef76b30cf78e5a9a843863b1c788a657f8 | Bin 0 -> 459 bytes .../fc051143cab43c0b053eff46e27dafc67c8e26c6 | Bin 0 -> 75 bytes .../fc5434ea9cd90d7538577c57d8316d804afb1987 | Bin 0 -> 915 bytes .../fc54ab36aac82f348fa129c484924881e3f75158 | Bin 0 -> 2005 bytes .../fc57dd7b793410e4924f10fef65bae46e616411a | Bin 0 -> 43 bytes .../fc8dc944f8f01a8eede593d67fd8a5df46d48d7d | Bin 0 -> 85 bytes .../fc950d07b5cf78cbf8fa14f157baf9549f2fb64e | Bin 0 -> 3241 bytes .../fc9642257250a0f75628bae42095ba18cc8796a4 | Bin 0 -> 2721 bytes .../fc9989470c2db70192542e7d54351cce8e95e288 | Bin 0 -> 852 bytes .../fce136f7b2a85d136309a88434eeb66766633640 | Bin 0 -> 2157 bytes .../fcee944737ca1d09edbe1e31bbd587936dbbc994 | Bin 0 -> 28 bytes .../fd0173211280b1990551562051fcbaaafffd6b1a | Bin 0 -> 96 bytes .../fd207914352a328b376c75bbd903b7be68da3623 | Bin 0 -> 64 bytes .../fd4bab6c4c21eec27d6a332ec54301dc82e578ff | Bin 0 -> 2415 bytes .../fd6e4e72e7bfd775206adcf94e02491e9d560ca5 | Bin 0 -> 273 bytes .../fd74db47852c5d6618c11aa82540cdcdb355a4f0 | Bin 0 -> 80 bytes .../fda22800efe0b74070ffe87d6a2774bdc6b67ce0 | Bin 0 -> 176 bytes .../fdf52ae0a521dde327f4dc5f4ef2e31a48cf0f31 | Bin 0 -> 906 bytes .../fdf99e95f61f3d092ba88214fab9b6155567d4a2 | Bin 0 -> 710 bytes .../fdfbdf44e140f62bdf37fdfc114d6141859dd361 | Bin 0 -> 2177 bytes .../fe271ff20cf22122b1f329c622da0d7c3dbb27c8 | Bin 0 -> 3205 bytes .../fe37890845ccf78533e4d9345bdc0bb60015bff6 | Bin 0 -> 143 bytes .../fe6760398c640630e5baa371b5de5a7d5fb1e24e | Bin 0 -> 27 bytes .../fe69f18cfabfcd5fed3777a02b1d6152ff62c8ee | Bin 0 -> 5689 bytes .../fe7d631d0d3f6d704f1ae98a0a3ead9bcc5001eb | Bin 0 -> 215 bytes .../fe807e5d14b861a6da5b1999f4de2733c118c407 | Bin 0 -> 445 bytes .../fe849fd811b881f6669efed9e4c45e01a0e231c5 | Bin 0 -> 1039 bytes .../fece70f4ccbd95e1e7d29625cad73c78c980c443 | Bin 0 -> 3801 bytes .../ff09ce458cfb7918a05f8ef339bd66b02362e0d7 | Bin 0 -> 554 bytes .../ff161b8d217335d907355a7ff7aa0c0e77f95e70 | Bin 0 -> 1643 bytes .../ff56771a21c29bffd45a7b47b6bf394c3e0ab796 | Bin 0 -> 1014 bytes .../ff7e920280daa6dc7a10a11a5f7e46fe03f07807 | Bin 0 -> 59 bytes .../ffb43d61d18b7c2bbad05188684c6acf5e58f610 | Bin 0 -> 149 bytes .../ffc3ac0f04336e1a2de45d50ad59406095d122ad | Bin 0 -> 165 bytes .../ffeefa9938d848d5a92dc9a742938643250a701e | Bin 0 -> 613 bytes .../fff84a4e285acc3f30070831908df0e38670255d | Bin 0 -> 531 bytes .../03895ece2fa97495a2aeea0371ffa44dcc45ee27 | Bin 0 -> 202 bytes .../050cf714cde82d9d1da9a567bedadeda3f9945b7 | Bin 0 -> 408 bytes .../06aaaf2dbd844bc0a5dd2a217fc993d39dfdedb8 | Bin 0 -> 11 bytes .../06b8ba004ee806f2a6ce538659408647f91da7cc | Bin 0 -> 50 bytes .../0e9f1aab23b046b0793f9896832b1b176b4374ff | Bin 0 -> 202 bytes .../0ed44fd8e54562d1c0bbd682ad12ea1abb134931 | Bin 0 -> 202 bytes .../0f1bef14b9650d6ea4b1268810bc2bbe67485203 | Bin 0 -> 52 bytes .../1055348c0635d21eaf93e201d9884f0381209f7f | Bin 0 -> 410 bytes .../11e136c063a41e1f1e8bccd8cd33d8457311f090 | Bin 0 -> 115 bytes .../1272a029ce47a7a3328fd46aee459c8e7645bc37 | Bin 0 -> 318 bytes .../15fe7d100d8e902433afee2ba44878eb03c41d9d | 1 + .../167cfb94a79ad2fb8013ff35f0b7b6999599bd1c | 1 + .../1691a424ade2c0c9db85afe3d2867fa312c623d3 | Bin 0 -> 36 bytes .../16a5d2b082427ca0ab246d04c8355d0fc0bc30e4 | Bin 0 -> 114 bytes .../17d9206a15ce6dd4f78f43ba04a67b139fca28fa | 1 + .../189d59de9596eacf6297f43d0dff770d4ec3ac47 | Bin 0 -> 2927 bytes .../1d7f9a8f0511bc887d1a147f6c8c3882348fc89a | Bin 0 -> 52 bytes .../1dae967051f655a845be2b10d388245fbe64c314 | Bin 0 -> 348 bytes .../1e0f801592c9dd52291af5ef4fd3d6323167f547 | Bin 0 -> 20 bytes .../1e6eedfe74a03f806ae5c43b1e15fd427d79ef15 | Bin 0 -> 49 bytes .../1ff40d04384e351ab63b27cb1b21b8c619437092 | Bin 0 -> 525 bytes .../222821d3285922e26f713209df3feef7bcfdba42 | Bin 0 -> 202 bytes .../24d35c05f843f22337ad8e4136824d650678ced4 | Bin 0 -> 1794 bytes .../28193a8be0cfcbec255927b8d3100b95643875db | Bin 0 -> 4996 bytes .../286ececdafd8f24be4b10efc9a34dc976d9456fb | Bin 0 -> 270 bytes .../290593804e3320bef962a1af46788a270959401d | Bin 0 -> 2927 bytes .../32609206bf127869be014564aab91b4d886f6a02 | 1 + .../36cd34a64de4edf00fb9069585e9969db0995721 | Bin 0 -> 441 bytes .../383718912dbec60777065fac104b48ff3efbc5b2 | Bin 0 -> 41 bytes .../3888892596b666a57b3d0cc8458f40f4cb336b02 | Bin 0 -> 202 bytes .../3943e407d6b62c32af636dad1cc5a096ef768460 | Bin 0 -> 38 bytes .../3adecbf20f835b746c2e9ca38740a322f5fee65c | Bin 0 -> 55 bytes .../3caec23d53355e91b91bde28c92da037ee4df198 | Bin 0 -> 74 bytes .../3cc0448f6cb4ce214515cecc7b0d1631f5f1a4e6 | 1 + .../3e45faae76fc2d3dfd856571e7b2f3b738025cd6 | Bin 0 -> 268 bytes .../3f6830c6c30b4e95150d1221fc9924cd85694f54 | Bin 0 -> 308 bytes .../438911cffd884abb4b1fc7775ece8d7f1988ff88 | Bin 0 -> 266 bytes .../45c4e7808553640d2b9e9288029876453e0e784b | Bin 0 -> 33 bytes .../465a5e008d1bebc92decb52493c59e795d1557d6 | Bin 0 -> 132 bytes .../483c40015b5b049a90e332dbb52cb24bf2457d25 | Bin 0 -> 42 bytes .../49b10c0e4c31521e8f8f83947ffbbe420c88bdee | Bin 0 -> 2925 bytes .../4de8e3a19ca9df29f4189e0e1dffd30b32925808 | Bin 0 -> 132 bytes .../4e4b55208d4de0b8004c93632b8fc913d3691a5c | Bin 0 -> 52 bytes .../4f15857b6714a365cc8ee090f49aa226b3a567c4 | Bin 0 -> 202 bytes .../5093f125861301442a1d774bf7e8848968f2f55a | Bin 0 -> 4 bytes .../527ebaa226e5bbf0de21ce32855d14dced12e749 | Bin 0 -> 20 bytes .../53a8f402c678024d836dca1a0758e45381a2b9fd | 1 + .../547ed1037b1c629504262cbe45bc86d40d8c9a24 | Bin 0 -> 58 bytes .../5614c0cf6842a3c51c0fa895c7c5272bd797aa77 | Bin 0 -> 310 bytes .../57499da92a40ab3d91df7c28234d9f0251cfb4c9 | Bin 0 -> 23 bytes .../59ba69b0d0150a9aa229336b22ae731edae30936 | Bin 0 -> 28 bytes .../5a219aab7745183d9303c0db110069bb37354947 | 1 + .../5f0cbf0c4c09a2117dab8ff0b6f30df47419286f | Bin 0 -> 202 bytes .../60838affe239334c1456e8002ea000e0372864f2 | Bin 0 -> 20 bytes .../61af899aa25bf2303a1f41a282fe2e94c5b39543 | Bin 0 -> 132 bytes .../66ba5467dce24bb2a432f2d63b526829ed23d26a | Bin 0 -> 268 bytes .../68c676e3e68bfd73b9844a4a21d110c897e07dad | Bin 0 -> 26 bytes .../6adf67a8d24dbd9ff2f230f41e0854624d63f3dc | 1 + .../6c1e1aed8e0b817579df4df8acbb05bd5a1c3909 | Bin 0 -> 8496 bytes .../6d28b31f48a4836685d1d69a080cd67ff9f9a3f6 | Bin 0 -> 116 bytes .../6d3bb8fc6cdd876c61134b97de4a3cca6e82c4e6 | Bin 0 -> 2927 bytes .../6e719fcea5ffccd377b1ce0d053eaf385cde2abf | Bin 0 -> 202 bytes .../6f505e9359bb595afc17e98d497d7b98692751c1 | Bin 0 -> 12 bytes .../7052aed65f58c53e52e26108c4a1e3250b7da2ea | Bin 0 -> 363 bytes .../716865c5c849478f1e1df462c160abc5b1dc1ac3 | Bin 0 -> 316 bytes .../7323ae1682b74e1566c414dbb25c86acecc2737b | Bin 0 -> 45 bytes .../7336521ab38c68d63a0f7aecb4f3e9e51ab69474 | Bin 0 -> 420 bytes .../73e328d39160bf5d4e48b70fdf1db72359da0239 | Bin 0 -> 39 bytes .../7406ad5143ec0758b1f6c26b82775f7ab0e132f2 | Bin 0 -> 31 bytes .../74c1c86368c0c6d07a9f33d264e99ce2639bc0dc | Bin 0 -> 144 bytes .../75af5f8e7f2747501abe0da9278d6acc3f393a77 | Bin 0 -> 20 bytes .../76b3cb2dab94a304731384894eb78629ab0d09d0 | Bin 0 -> 363 bytes .../78acc4571362c3ef1febeea11e80fd7f64d8506f | Bin 0 -> 417 bytes .../78fe92f3c474278b8b348917fdbebb8bc4b0e8bc | Bin 0 -> 129 bytes .../79adc934b5b03ce831ee27b20075bd526d49e7ef | Bin 0 -> 202 bytes .../79ebf867e288b5d20a62e7fe98b5b18c93b81303 | Bin 0 -> 109 bytes .../7a9ba8182f40484678634a5061964ea228a627b1 | Bin 0 -> 2927 bytes .../7ac9ad9dfec7c879aa5bdbb58c1e97ef65b409e3 | Bin 0 -> 350 bytes .../7c5b87269e8d5cb43823f20586ad1d3699661b87 | Bin 0 -> 2927 bytes .../7c9bf6cf7852144d9ff4461aed60fd0514624179 | Bin 0 -> 147 bytes .../7c9d8b93414135fc7c1a26b5fdb062f30176cace | Bin 0 -> 30 bytes .../7ddd91ab9bc50214c83c52c808624b56b69ac239 | Bin 0 -> 5 bytes .../7e206aa458ae2cbfeb3ee159115f25d8418bd5b5 | Bin 0 -> 7 bytes .../7e7e467df3de08a380f08833903503af75257a17 | Bin 0 -> 318 bytes .../8099c9caeda78207b06c805ac3eeca980d921156 | 1 + .../80c5e81928388f2798c76a565f3e36865f862140 | Bin 0 -> 71 bytes .../819ac7475a3f0773539f8fbf7998c3c4d06f1039 | Bin 0 -> 222 bytes .../83225d2274afa034da5852d60fcade4a544f53df | 1 + .../83984a50f79387d2d233b403ec01e887374e5ac8 | Bin 0 -> 202 bytes .../8439c83cf0267a73b6a8f8500c6aa36cb6f19e2a | Bin 0 -> 23 bytes .../85197fc2fee41f14ee188bc94690a76643c7b414 | Bin 0 -> 2927 bytes .../88b2d135c4960d12e80b4337feac08081596c53a | Bin 0 -> 8738 bytes .../88db54ad98f89081186b93ce6603e4046a362e96 | Bin 0 -> 49 bytes .../8a0a1feccf6b01844f98b99a2d4a06780939a0b6 | Bin 0 -> 1794 bytes .../8c2303537b0cbb5ab4254585e2cb01c4049e7721 | Bin 0 -> 270 bytes .../90b0e4f7f4bccc3ab16b36c4b9239e8006f63549 | Bin 0 -> 527 bytes .../9128c8c2b494e6e84c69a5aaa47825452607b16a | Bin 0 -> 9 bytes .../915415ca0821848c91203fde9d2986d1ad973cdf | Bin 0 -> 140 bytes .../91c342cc17b23bbb1882e17cd164c3f0f8265f61 | Bin 0 -> 45 bytes .../9238ffbbc63fd9549f3ce0425435d1bd5e40cff3 | Bin 0 -> 12 bytes .../92f2eb3090cb2991b7dfaf54b1692aea2bc413c2 | Bin 0 -> 140 bytes .../948b11d1da5d29983285975d58b59e7e9e768adf | Bin 0 -> 96 bytes .../95da067160d74f506ad6480bde8e51a6bb1e6632 | Bin 0 -> 132 bytes .../96ea73c56a87d56701a9275b3be88e0df0b7719f | Bin 0 -> 3880 bytes .../97e02fb4637f6ffcca0df0dce0e777d284eba4f8 | Bin 0 -> 188 bytes .../994fa8c17946a027d1472b8f1875a95c52dd462a | Bin 0 -> 11 bytes .../99d0d984e41b4a41baefc78c1bab326af18dbbb9 | Bin 0 -> 66 bytes .../99e6e335844adba70bbd39cf90f96c2c1e323be9 | Bin 0 -> 12 bytes .../9b5b3912c40a54cbdecf0f866832db439068c390 | Bin 0 -> 276 bytes .../9d04b3727c4d46b1adf09f91f9d7ba1386bb36f6 | Bin 0 -> 19 bytes .../9e7a3fdd866aa862b1d4d50a56e524c2716b28e4 | Bin 0 -> 49 bytes .../a27f40352511a76805eb1193ee2049c9b31129b1 | Bin 0 -> 5551 bytes .../a30c941146363054e2995d600d521dbab77c65b0 | Bin 0 -> 113 bytes .../a4726cc0ba1739824cc957e0149181ed4767d48e | Bin 0 -> 11 bytes .../a740153622d94212247cf697c501e7728c69bbf4 | Bin 0 -> 28 bytes .../a7bfe664fce2b899c393c3e82f3377955ba664ac | Bin 0 -> 202 bytes .../a82fbed4d1553d783a179ebd0f1db9fe19dd7c20 | 1 + .../a91452cb42f7321fb2cc39cd674ba839a70a4cc2 | Bin 0 -> 2900 bytes .../a945232f71eab8e9f8ac963d0509bc4dfd78eb1c | Bin 0 -> 7 bytes .../ab98007bc5d6c4def9beb41f4de26d0bb4f34de7 | Bin 0 -> 202 bytes .../ad99472e6e0eb6e4a7efaa661542af5f2d1f4c3b | Bin 0 -> 722 bytes .../b0f149c632747bf15a8c396494c05b61c1c21595 | Bin 0 -> 41 bytes .../b2fe778770dfc26c35011c0869054714e610b856 | Bin 0 -> 56 bytes .../b3179b50c8a007deace008cc08f83885f176f465 | Bin 0 -> 114 bytes .../b399e5ee870d573a16192686cc36703572e4c7b8 | Bin 0 -> 54 bytes .../b3b03962135a3e3b1cdc4a9a63f804796abea954 | Bin 0 -> 54 bytes .../b549cd0bc9ec4634f012d86a92990f9146c943dd | Bin 0 -> 54 bytes .../b71c3077364885d7003c41348705397b520a58b8 | Bin 0 -> 132 bytes .../b940644d89295e3ce6329d1b9e1c191fea8f85ec | Bin 0 -> 2928 bytes .../baa64a166824374e71098950ec29de4629943cfb | Bin 0 -> 85 bytes .../bac510e0c1c02a75b1cf395c8b9652e75e62578d | Bin 0 -> 5 bytes .../bac9b35810bec303f52bc506ce8ad616d0fd4aea | Bin 0 -> 29 bytes .../bb030e890118c608335aeb60f291f9414de8d9d2 | Bin 0 -> 143 bytes .../bb31e9a7e8b39200d5c8534ac57a9e4637d143e5 | Bin 0 -> 107 bytes .../c2fe9e30f0c5d95d1528834ff82131a584546eda | Bin 0 -> 984 bytes .../c5b7a914229cfec83ebc085ded9ec8a04ab5ba12 | Bin 0 -> 58 bytes .../c60429a21f68577de10e58adb157287305cbad99 | Bin 0 -> 15 bytes .../c66da1d6f21758cc8d0e0b26d18aea1dcfc45b2d | Bin 0 -> 31 bytes .../c7b00a4b90540785a5279b5005582f0588d2e355 | Bin 0 -> 462 bytes .../c8dca947ad77e0e6dc3faab6b9eb3dbc6322aeba | Bin 0 -> 11 bytes .../ca33d53ca96b84b252e6a2814067bcb10670e907 | Bin 0 -> 1302 bytes .../cb19a77bc79c9da3d652896ad837761f42010424 | Bin 0 -> 274 bytes .../cc046306740fd25f9340a2767e9952727eac9e8a | Bin 0 -> 202 bytes .../cc885e5904a04a520b1c6490facb863d6e6c64f9 | Bin 0 -> 268 bytes .../cced208f4e4b59249ac183259f00ce60bb9f7cdf | Bin 0 -> 350 bytes .../cd8efd65eb210cd4c69a510b21f54b5bac9b23e2 | Bin 0 -> 134 bytes .../ce18d8a01b88b9beb1f45eaa4d5bcf67e4dc3200 | 1 + .../ce3f88b133420a99b9ecf045dde36854ec94bcc5 | Bin 0 -> 23 bytes .../d01b3d1256a1781de891358648e2fe8f6aab56ff | Bin 0 -> 202 bytes .../d581c2cd810fcf91bf8d082f0ca98df01d6a04c1 | Bin 0 -> 143 bytes .../d665f442d223e0ce84b1ff1491f9684687fa2c00 | Bin 0 -> 282 bytes .../d754cf888073564176bd2c388695a917c60d94e5 | Bin 0 -> 8 bytes .../d8cd321189387d0fbb8a3d164959586ef90d7ad5 | Bin 0 -> 7 bytes .../d99b4fa4c7de200b14c64bdc335c3f35daa96cb8 | Bin 0 -> 260 bytes .../d9c119ed1c3b4ab901f3ae0c617bddf7052270fd | Bin 0 -> 408 bytes .../d9e7463581095a3eea36444eb43cca8054282aa8 | Bin 0 -> 414 bytes .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../da937234e0d9a04d72f68ef9cea898d7a872ca54 | Bin 0 -> 10 bytes .../de90d02ca557878ced14957e64c5ea519b94910c | Bin 0 -> 20 bytes .../e74436ca5603e1e6ad9bc68801985b06b053fb49 | Bin 0 -> 6 bytes .../e826877cbc3098b6be8611b81821ceff9a82369a | Bin 0 -> 288 bytes .../e846cb417645872ab9fa01edf74674c2949539ec | Bin 0 -> 20 bytes .../e9056a1d75e9247c603c83c9e79b185cafdc0f8a | Bin 0 -> 97 bytes .../eb877e4896b1d005a86dd309002d1c937eb972ae | Bin 0 -> 143 bytes .../ebbb7934a26d8b66ccbc92a6f75fcc0848b69faf | Bin 0 -> 54 bytes .../ec4a95a4d52df149f9d575265773b96ead40ce28 | Bin 0 -> 54 bytes .../f065f6f3668aaa14bc6e04340978e70c14bd466b | Bin 0 -> 49 bytes .../f2189824dffe27634e9b874f2369451b74549a6a | Bin 0 -> 1362 bytes .../f3147f389e2e85e248edfd4bad471e4734d6f84f | Bin 0 -> 342 bytes .../f3c78768a70d416cc8957ea7a332a7089ea649f8 | Bin 0 -> 2927 bytes .../f49a805b2e0d5704f4b81b2e7852f35abb11e4ea | Bin 0 -> 462 bytes .../f4bd550d9ca5e122a7054d29148269f253183da6 | 1 + .../f84d7483a5409e2469ffc5e1bc0f21dfbd542192 | Bin 0 -> 2488 bytes .../fa0c511199c8640a67c0d5186095df8f81b7f456 | Bin 0 -> 363 bytes .../fa1603a5ce48f961c5b840954572ae131890eeea | Bin 0 -> 2927 bytes .../fb3ee60460cbd2ebdc2b5f62581356c83b985fb4 | Bin 0 -> 2927 bytes .../fbb9aaaeaaf95650633fd8e41a32b994f4539f48 | Bin 0 -> 6 bytes .../fe9f6093c7583ad2f0d0336dd20a95b6a203328c | Bin 0 -> 21 bytes .../ff165088d85b3982f77c00ec7d26621f58125fe8 | Bin 0 -> 202 bytes .../ff9839b26f6d521af44b71704afff1a39ca3d298 | Bin 0 -> 16 bytes .../000897bbf44d478cea77eef6b5e15303a92fdc35 | Bin 0 -> 416 bytes .../004fb27dcbc1e3257060a7260cd3dc5c0279a8a9 | Bin 0 -> 136 bytes .../005a49a2845abf765c4c28e64e1b2b0fad58a7ce | Bin 0 -> 362 bytes .../00681a682713a2db494a9edc45b795354d24f6ce | Bin 0 -> 363 bytes .../00856ea7240db5fcb3f3b9878adbd2447a296458 | Bin 0 -> 195 bytes .../0085b3d61039893d56ec38c177ed2128c9df75af | Bin 0 -> 128 bytes .../009fc15645bba9e5b17b7fdc594a4779772b3090 | Bin 0 -> 241 bytes .../00a24364a797ec0e4c2e7370219e8a4aa80b2d3a | Bin 0 -> 4801 bytes .../00f756159b9650d1a6f68b555d2039181949d222 | Bin 0 -> 164 bytes .../00f9505391ab252c7c661d6cdacdc07dcb4ec8b3 | Bin 0 -> 166 bytes .../014957135137bf2794c86a635a49a9edd15cea0c | Bin 0 -> 17414 bytes .../015b46419a761b3936ddb63a48d7d35e9c0197be | Bin 0 -> 128 bytes .../0176bb7a655d2707fc7e93a6647e8156709e4ff5 | Bin 0 -> 1424 bytes .../01924e0e653a38d98e76302c3ec993b0a82e1bbf | Bin 0 -> 13646 bytes .../01aac1871677db2fb69bd91ca173c4856681d995 | Bin 0 -> 2116 bytes .../01c0b72eeb3f5768b28c588e1f10e86f03032b59 | Bin 0 -> 122 bytes .../01c0fb4145a695b300fad4ce8c830934004f2f54 | Bin 0 -> 8320 bytes .../01d1381dfa10fa7588230b25c3c534e367c5d00f | Bin 0 -> 740 bytes .../01f849c75aa2ad6bdd1922710b532fb2f1496a8f | Bin 0 -> 73 bytes .../01fd4b62dcac207fb4ea80db066245d7cea923b8 | Bin 0 -> 3065 bytes .../01fdddb4ba8ca244d1b3cb3b8d870e1e1c0908e0 | Bin 0 -> 128 bytes .../0202590850f041b6beb77789233a2f307fdb4fa9 | Bin 0 -> 314 bytes .../0209c7263aa9b80622fcb4493c9ae0e99883522a | Bin 0 -> 376 bytes .../021297b3a484a195bb1d9608bbe498cb5884be2d | Bin 0 -> 1722 bytes .../021b183b0601c43d51091030ab1482899e8d65a6 | Bin 0 -> 652 bytes .../022c3f1509b9f79c6451d008038923d86428285c | Bin 0 -> 1222 bytes .../023062490b353c23edba93cc92692a0213b1eb38 | Bin 0 -> 336 bytes .../0230eeabf3e421ca8eb40c91d65a013b20e8eaaa | Bin 0 -> 236 bytes .../023d645cb49f18fea912101dff5dc0fc1758cae5 | Bin 0 -> 596 bytes .../029f8f1afb59f75306ed75e05944798f9f6e1f4d | Bin 0 -> 195 bytes .../02c1b7d700fd6e8365512abe1530506e2f9db93b | Bin 0 -> 156 bytes .../02f8aef120346f384a73542cf3e5907e075ac00c | Bin 0 -> 104 bytes .../0319c260bb3ec57345d1ecfabe92ca03a34c807f | Bin 0 -> 1376 bytes .../03465456e78a38e325f3cf7ec4d27218ce9b7a4e | Bin 0 -> 640 bytes .../035b4005780ebba29c02813f4dee141814f20318 | Bin 0 -> 754 bytes .../035fe5bb6155490b80e597dfe3a79bb694db18c5 | Bin 0 -> 187 bytes .../0363c3a3781e907b60af34043de63fedf2922c85 | Bin 0 -> 156 bytes .../0381ad610c919d10672711b28abed1bb616e2988 | Bin 0 -> 8986 bytes .../038e353731c4108517f8858558bac29cb08bf1b7 | Bin 0 -> 269 bytes .../0394a9bd277b548aa4dde8a2037135d88c9a9d0d | Bin 0 -> 424 bytes .../03a77109a7a3801d05db1100d0e8fdb09066dd27 | Bin 0 -> 13288 bytes .../03b6573c37a3605e03e6f7cec232402233213951 | Bin 0 -> 195 bytes .../03c6969388d4a376a822781b1e17df57cf765399 | Bin 0 -> 29 bytes .../03d872c1a03fb7b3aaeba98b9a08ed69ff350760 | Bin 0 -> 7516 bytes .../03f1a0730a714fdc569ea1370d34a81a3a87c668 | Bin 0 -> 4592 bytes .../04031707454e42255d42c752bcdbd6da489ba0d8 | Bin 0 -> 195 bytes .../04330ab9f9696205605d6a2cf6824f1e5ae7c64a | Bin 0 -> 486 bytes .../04568c03752539ac72f17fe06a279c5889589b9a | Bin 0 -> 68 bytes .../045f850b347d11b294b4913a0874948f35f31b60 | Bin 0 -> 260 bytes .../048c63dcc3fe44ef099a686da5a3e8bab63a3d32 | Bin 0 -> 1388 bytes .../049d6a47b33cc99a5e8e3f8c6d068e8e9d25c521 | Bin 0 -> 1317 bytes .../04c5f28628719c95e57e7a7341822f26e2c6bfa9 | Bin 0 -> 136 bytes .../04cab5727c799126fd0e52eea6f1bc12f3be862c | Bin 0 -> 642 bytes .../04dc92f0203a8b7552dc1c0577b6160411c4ef48 | Bin 0 -> 616 bytes .../051a703f308f1c48672bfbdaf0708eb57100732f | Bin 0 -> 104 bytes .../05326322213559f3882bcf0487da8ed02fbf3590 | Bin 0 -> 369 bytes .../054ed7133d19dcc4c562d1b8605b126c7ecf438b | Bin 0 -> 1424 bytes .../0553d9cff47048ef2cf1b8cbf505351281ecad5a | Bin 0 -> 740 bytes .../05620dd58356036c3e680f1756eb8d3e5005047f | Bin 0 -> 1176 bytes .../056eeffc212ba7b0378142ca7335819ba1ef48ee | Bin 0 -> 15218 bytes .../0575f22e8c3e668ebdb5ce444f3905c52f82a051 | Bin 0 -> 116 bytes .../0598f4753bfec3bb892d2414a90808d55cdbdcc4 | Bin 0 -> 129 bytes .../05d2cef6c6bf665a43ea922cb0b220edb46e0728 | Bin 0 -> 283 bytes .../05d3ae2b9e51ffe380a2dbce8cd03c6c334770bc | Bin 0 -> 251 bytes .../05ec67b88922a5ca7952d720480889839c17476e | Bin 0 -> 104 bytes .../060107eb589d77320bdda833ddd06fd2f61e53e3 | Bin 0 -> 167 bytes .../060c4c9012dc6c5d696b6df1558e915ff57c641a | Bin 0 -> 178 bytes .../061cc2a40f965e8f039a58e3812844bb47756654 | Bin 0 -> 416 bytes .../063ea1d1d4d25160c4c062e9f9138407514956d7 | Bin 0 -> 104 bytes .../066b3264b0af3a527d828d0598d82923107e2da6 | Bin 0 -> 178 bytes .../06ae014c0aa305e2534f416c57d852547123b4a8 | Bin 0 -> 122 bytes .../06c1ed43bcfca07621165d6f64d46e2e49d952eb | Bin 0 -> 143 bytes .../06c6d9449845e55a0557fcedc666993e1947bb29 | Bin 0 -> 17375 bytes .../0725e5129d0b08b0b0eece032b6a2053f6bfb55f | Bin 0 -> 304 bytes .../0726625c79b808b7e7f372e2478c126a1e66cc5c | Bin 0 -> 8318 bytes .../07874d3f7cc70df3c30b965d5f08e88d0909886c | Bin 0 -> 112 bytes .../07c655d3ae178f9ebb0cffdda25e8ccfe115b017 | Bin 0 -> 241 bytes .../07ff7e64ba59095f560f07dfdb43008cbe501239 | Bin 0 -> 448 bytes .../081640e77b166322e79ce3bd40da5795085b3510 | Bin 0 -> 102 bytes .../081eba6334d28b364d3b9e958d304774dd3b2848 | Bin 0 -> 52 bytes .../0832c65aa4e83e84d5bd312414049b256b747fd2 | Bin 0 -> 104 bytes .../085073970b8dee49eed601d618a2ea9b144dddb8 | Bin 0 -> 655 bytes .../0853ad672ba553a18db1afeabb249f1121b13293 | Bin 0 -> 396 bytes .../086751326f6efd518dbe8bb71ed8327e20f7abb4 | Bin 0 -> 424 bytes .../0876ea42819b47cb84baf2b9df45c032e8956f9a | Bin 0 -> 23 bytes .../08b1b1a0e52acc8f7188fbf540840ffbda58860c | Bin 0 -> 195 bytes .../08c52f0a788d28a4b166ffa74f265f2f3225aff9 | Bin 0 -> 488 bytes .../08d08ac15a1aab661dcf5144d5fde5af73b36714 | Bin 0 -> 16 bytes .../0948ada8eb57a986cc5bd174d8d5beda5e77921c | Bin 0 -> 13646 bytes .../097374f7aa164e60fda16bbfb2993b29ffa1f099 | Bin 0 -> 347 bytes .../098aef10c5bf07c1ea4e762022887d306f89fedb | Bin 0 -> 224 bytes .../099cc3b2c37aff54550b967e43e719b769750baa | Bin 0 -> 562 bytes .../09c83ce62b64fc28aefa29be068f24e9394a8f23 | Bin 0 -> 640 bytes .../09c98c7c95fa336c07308aabda616f4c502eb5fe | Bin 0 -> 168 bytes .../09e06a56c6071f1ff521f1b1e72ac551067f6282 | Bin 0 -> 54 bytes .../09ea64b59ba71cc98554127d64d4db37be75223e | Bin 0 -> 232 bytes .../0a1c1790c8d2c70672bd0e45fb15c12f0c19f443 | Bin 0 -> 128 bytes .../0a1cd92ce644a33f73877a67272018c0254f853a | Bin 0 -> 376 bytes .../0a419087480b3c842bb472b7c95b20a31e126edd | Bin 0 -> 104 bytes .../0a41a3ecba43a7d6772f9984ef46bad2fd9827e2 | Bin 0 -> 13328 bytes .../0a4e5a733e17fdba0c7e2ebc32e091b3bfc0bed9 | Bin 0 -> 1448 bytes .../0a5faa2c24341ce916040487e01c9f90b670bd66 | Bin 0 -> 3280 bytes .../0a60ef34698bf70c21e56a0f7c7cdf094714d130 | Bin 0 -> 432 bytes .../0ad51e37ef443887c5541f85b579832d1bbd286c | Bin 0 -> 640 bytes .../0ad6bbf63c2a6a84624f5e6656df0115265bf0ab | Bin 0 -> 2497 bytes .../0ad73ffc0284424139b424850a2e7029b9a30d1a | Bin 0 -> 448 bytes .../0ada269931005179483172b321c69b972d7bd8f4 | Bin 0 -> 102 bytes .../0ade953c2e85d723eff41b56c649a97587560353 | Bin 0 -> 122 bytes .../0af1a97aa93822cd0f9cf5ae2fa384104b16ff43 | Bin 0 -> 93 bytes .../0af41d20c5f43eee35f5ef34056a9f9c8f0efffa | Bin 0 -> 138 bytes .../0afbb113cf3b995eddfceeddc4f209d1b65f2169 | Bin 0 -> 236 bytes .../0b042472c5ec19f84d8b7280e0f053408a75e1cd | Bin 0 -> 640 bytes .../0b09d84e797f7338afd021a6fa2c293518e86e82 | Bin 0 -> 1896 bytes .../0b2f38d2c7a9810993da669e2ac10e069a85fdb8 | Bin 0 -> 4365 bytes .../0b35fbd75feec2a5fd26eef7667f465f73c3bb2f | Bin 0 -> 19206 bytes .../0b386912ee54891f35d0e6516f125017b974e4d4 | Bin 0 -> 462 bytes .../0b4e9ff26993ed460358e28e9a8e9c857355b49b | Bin 0 -> 104 bytes .../0b78416e48faa5b904c24a3db394542a0a8740be | Bin 0 -> 104 bytes .../0b96e8fdd6ba0775f43b6a4e48873bacb8526283 | Bin 0 -> 420 bytes .../0bfcd4548120deea02fde10bbbbb09c9283bd3ab | Bin 0 -> 195 bytes .../0bff27af59c6456ca763cd27001d1a37f1036bf9 | Bin 0 -> 640 bytes .../0c3138ca8dfe527fbe1dd5ddedb9383a053351a5 | Bin 0 -> 195 bytes .../0c4373d2fe3d9a419fffb2c53f46b542bf2affeb | Bin 0 -> 8320 bytes .../0c503bd3777796e4286bdef0e378809dd5fcc815 | Bin 0 -> 218 bytes .../0c71bd0ccbf52a895057861795fcacb5d2593a09 | Bin 0 -> 11420 bytes .../0c9df2ae306df5c3a521829eac026819b567a0bb | Bin 0 -> 5065 bytes .../0cdffc57871ea1e5cd7f13a54552c4af4b0f2232 | Bin 0 -> 1523 bytes .../0cf3871fe459e6e813af0ceb7a384288e11350f2 | Bin 0 -> 11199 bytes .../0d153a89a2e3ab5eec123b024fa3ad25463050fa | Bin 0 -> 189 bytes .../0d278dcbcf49d3c739f03eb07a29fdeceb5f76e9 | Bin 0 -> 239 bytes .../0d29dcef914cb137ab1ea7892a9db8f3ad62a6cb | Bin 0 -> 152 bytes .../0d64329b0f27532b565e6ff6730642ebbd5e0510 | Bin 0 -> 416 bytes .../0d6f03179de513be823baa47a6d4444d25711129 | Bin 0 -> 410 bytes .../0da442755bd83b56b3d0f7a5fb32a1099fafe685 | Bin 0 -> 122 bytes .../0dd574aeadd3c974f75d402561c48bcbd0bde67e | Bin 0 -> 196 bytes .../0dddfadf4b8dac8e66a5485c151bf80f3159c577 | Bin 0 -> 249 bytes .../0de17bc3c972b89923e963b74a0ba18c5f7ee9f7 | Bin 0 -> 3785 bytes .../0de23a5da0a28d52ee70dd55250ef42be0ac212d | Bin 0 -> 490 bytes .../0deb4ddcf52d233974baa159cc06ccafe1b011fa | Bin 0 -> 19206 bytes .../0e1783ab1dc356faf41cecc602771e38d90d456d | Bin 0 -> 30 bytes .../0e5124dcf9fef6ca070c1caaae17c046d0fea313 | Bin 0 -> 104 bytes .../0e5e9f515eec2234899c9fe9bfe8c88c8c148d7e | Bin 0 -> 195 bytes .../0e69d541e2a586b3e85232d6f400503cfe0aa6d8 | Bin 0 -> 220 bytes .../0e951166897fe529f91ed71d2f7d0f45afbebb96 | Bin 0 -> 133 bytes .../0eb92fee7b1186a0a45135abee4facf5eb203905 | Bin 0 -> 396 bytes .../0ed6d1fe4c491a109c46e2e36d6821630b223bbb | Bin 0 -> 628 bytes .../0ef660807291566b4ceb80f227b3e1aeec8cd4d4 | Bin 0 -> 1033 bytes .../0f15204cde64fa4780a569097185ddcf5ca48420 | Bin 0 -> 116 bytes .../0f2599f805f24d1bbf11a52e3886c5e52e8c9d5a | Bin 0 -> 41 bytes .../0f417b7c411503a44a772855e23a645ee56391d7 | Bin 0 -> 115 bytes .../0f5a7d887d595f5512d2d89874516c963cedf6c8 | Bin 0 -> 227 bytes .../0f5d2f743344a281c592fd614ee9bf12f27b8223 | Bin 0 -> 481 bytes .../0f64124f84494407581053e68db6018c88e9b40f | Bin 0 -> 349 bytes .../0f7c2b10d386a9c8b855e6ed6eab5e24e2ad6d24 | Bin 0 -> 236 bytes .../0f7d45acc639eab5f33121a88946cc7f387c1360 | Bin 0 -> 224 bytes .../0f97ab1e3a09b987b2052750f2b5afe5d68ea1c4 | Bin 0 -> 197 bytes .../0f9ebf3f826b1cfe322d4e36c4015a8bf2275686 | Bin 0 -> 128 bytes .../0fc1ac45dc3d4b1f34dec59c30f108720d200375 | Bin 0 -> 197 bytes .../0fd1e6c7b9d9a1a86fe67f99620e4e25b1926a92 | Bin 0 -> 102 bytes .../0ffe3359ebaa040d2dd6888eb39995e3ee0bbfb3 | Bin 0 -> 336 bytes .../10069e93a031baf47dade36a5f8b8e5a020d5053 | Bin 0 -> 122 bytes .../101156a2c1fdcc4a6fe093968712ff42ae2f588d | Bin 0 -> 377 bytes .../10190ffa70d1c5662a44098cdf3e8edfb5386c61 | Bin 0 -> 624 bytes .../103afd7441b1a7f5055f4efbec5309420f9786f5 | Bin 0 -> 102 bytes .../10525dc3f2bf438f4926c7145dd2e1cb4883f57c | Bin 0 -> 1123 bytes .../106d66a9cbae6158a70832c120cc132988cff8b0 | Bin 0 -> 232 bytes .../10c2c509fbae0d5d1ead5c4f6dd2702ffea79526 | Bin 0 -> 478 bytes .../10d5c5438405848dff95056c8b3e93d1ea590e27 | Bin 0 -> 318 bytes .../10f5f8601c898ce56aff3e74a1e7fb0bc7548244 | Bin 0 -> 15325 bytes .../10fbb0b671bcaa15702201016882a6eb04552d65 | Bin 0 -> 64 bytes .../11095f314957ca58a3d701318a0acdeee82f42dd | Bin 0 -> 51 bytes .../113f395456c5c6f4ea2ea4e1b9ed813e99048788 | Bin 0 -> 490 bytes .../115204f2745ea4371f9fc7c5bc094189b453122e | Bin 0 -> 220 bytes .../11550fe9066d1a578e7badfd1c3ad8bed7ec170b | Bin 0 -> 424 bytes .../1178be7bd59681d005d67b017f3f46fd42b5f69b | Bin 0 -> 236 bytes .../11a76da02edab6abe70f9ed488e6d1d9001eccfe | Bin 0 -> 128 bytes .../11b4fa7aff9c325ec6e158118e5436bb76a88f59 | Bin 0 -> 708 bytes .../11b89eb32e8c1c2d13fb4b6c1d49465aa0191e0e | Bin 0 -> 424 bytes .../11c1bf3e2a24c97b7762d4230ffc35f5fec4f874 | Bin 0 -> 317 bytes .../11cd3029e163422a56f9549edc2971eb9ba37ace | Bin 0 -> 129 bytes .../122d85818b76b7deb1bd9398a507eae90d67d25f | Bin 0 -> 7 bytes .../126d817082d314d00953acb7e7d8c1f1c1afd8f4 | Bin 0 -> 248 bytes .../12a24af9077f23333a4a0bcc469591e9999bac3a | Bin 0 -> 104 bytes .../12a82da914d1750d911f3222e16c5d1d69b54d0c | Bin 0 -> 236 bytes .../12e0d86f54d33aba2ba57e35e107795d5ff44051 | Bin 0 -> 424 bytes .../130f731f0639f6b90fe9b73297503ab7f4752baf | Bin 0 -> 128 bytes .../131014a98229dbdf4bdaab80016fdd89091a56d1 | Bin 0 -> 196 bytes .../131f653cab6f5ce6a1cf3a009b257dafaac80cda | Bin 0 -> 320 bytes .../132105b24c551fdf962f12797127dd3d596a507c | Bin 0 -> 128 bytes .../1366f29fbceca81e0d51f5721cf99f8979d473b0 | Bin 0 -> 120 bytes .../1372a1accaa3ffdfdda9832159d69ca8252e9235 | Bin 0 -> 741 bytes .../1373d4a9594a26f2ca5126aad00ed630ce03b44c | Bin 0 -> 351 bytes .../13970f9e47a7507212e486ea71aa29ff91e894a0 | Bin 0 -> 107 bytes .../13a88940db4677d278b9c02d3dc5c8ff74c70c96 | Bin 0 -> 104 bytes .../13b8383fc6c383e808965ad05ecb485f12c94b12 | Bin 0 -> 122 bytes .../141599ed17ac1b7becf13f93d486ee6f07d5f1e3 | Bin 0 -> 128 bytes .../14281a44f0d5da429672fed8d1b3bbdc1881fc2a | Bin 0 -> 752 bytes .../14297da7221908e130e0d95330123e876e9f5219 | Bin 0 -> 699 bytes .../14434db005a69ba022f642e020e92ba705050687 | Bin 0 -> 102 bytes .../144519d18e4de7b36097580035e81ca8f3187282 | Bin 0 -> 236 bytes .../1461063ec441d2fa66fbee0faea181e9923cb1ec | Bin 0 -> 624 bytes .../1467269dffbd5a78e72e49e105b65eaa6fcfc846 | Bin 0 -> 104 bytes .../146cdf1db678b8e2695d1a3ebc34fad5614ffcc7 | Bin 0 -> 356 bytes .../1485538e1ec1d9dabe5d0478a5e4efcd7a94a762 | Bin 0 -> 178 bytes .../14f4d8f452453f62a668783673625086de547711 | Bin 0 -> 512 bytes .../150f33ccfa77bdabd3e82fd44fe32ef19cdcb93f | Bin 0 -> 306 bytes .../15239d0092731c030848ceaea6baf753108c36c2 | Bin 0 -> 41 bytes .../1534236a0deb3cdfa623d6cbcbc3f7f6641ba45b | Bin 0 -> 240 bytes .../156308c60454458026d2297e9cd804f102d06bf2 | Bin 0 -> 390 bytes .../15784b8ee7592135834694828b5b85c8cd38d248 | Bin 0 -> 125 bytes .../159faf99034e12e0213c7927a693fa2646474ed3 | Bin 0 -> 8309 bytes .../15cdbdab3a7971179323e6c42f027db81c773be9 | Bin 0 -> 232 bytes .../15edc6715c4375589c32d5e3ec0633768f98fa7f | Bin 0 -> 30 bytes .../15f9ac34432e0b94c651e63da55a69aba4e1ce55 | Bin 0 -> 122 bytes .../16034893bd12fca4fcd0832b32389c9cec5561ad | Bin 0 -> 369 bytes .../161108539923c32216bcb8edf01934a03bf199a6 | Bin 0 -> 22 bytes .../1648add002b016cdf787a834f58209926328b0b9 | Bin 0 -> 456 bytes .../164e152ce4656376737bf32a9fdd0adb509ff835 | Bin 0 -> 6778 bytes .../1652d9021475579a1649e55b59d60b7da8aa4589 | Bin 0 -> 19207 bytes .../1675def9b1ad11b8256bee5e90ee07b06cfbe4e5 | Bin 0 -> 195 bytes .../168276948be60a73b94bb2b8b38db4df790e4830 | Bin 0 -> 116 bytes .../16afdfe0d96be13d46340204ee2c05b9d50626d1 | Bin 0 -> 50 bytes .../16b35d11cd7a2ec56eec746e59c20e5e20fde78e | Bin 0 -> 64 bytes .../16b5721e6d736b4e7426860d1925f40d26a858eb | Bin 0 -> 7662 bytes .../16c4d2253e22da4df80959caef5765268ece51e5 | Bin 0 -> 8310 bytes .../16c83742ce01180a71e16b88a2af2200f1abff13 | Bin 0 -> 369 bytes .../16d3585937a9dd7af867fe1d9f39e79881daa37b | Bin 0 -> 424 bytes .../16ee934d45660470f9921471d2e6907d7401a0c3 | Bin 0 -> 13882 bytes .../16efd57d181f9a551fab2c1302f4c369fc18923a | Bin 0 -> 196 bytes .../16f2f573034978ff5f0961a9e00568dd8bb6b643 | Bin 0 -> 233 bytes .../1718f1cf1b2e7b087fb203f492d5731dadb89d07 | Bin 0 -> 337 bytes .../17256b2eaacaa9ed544821a67e027c5a5e906dd7 | Bin 0 -> 3792 bytes .../172fb2522b65cd79e3ec968d099346e9527cc651 | Bin 0 -> 55 bytes .../1738eef9d58483e876e1f4f25e3bce7f04e6c9b2 | Bin 0 -> 102 bytes .../1749a731879b4d1abb8228383e245d58c950b3b9 | Bin 0 -> 318 bytes .../17627dbe254fcd8a6abb7e12f58746a2f2e3b4d9 | Bin 0 -> 51 bytes .../177d869e212af141564463b194006ef0293d7dd8 | Bin 0 -> 172 bytes .../178459bdef6daf669f1763158ac63f082a9352ce | Bin 0 -> 376 bytes .../17d258877b1e53d3e9e50d5e904c5c4c81532435 | Bin 0 -> 691 bytes .../17d468405b9bc14d2d91152a631aab1b5aa9b7b4 | Bin 0 -> 20001 bytes .../17d7bfb691eb62788bb401cf1523dc064e0435d0 | Bin 0 -> 232 bytes .../17e4c782ca52754991a34c8ed84db4895797b86a | Bin 0 -> 332 bytes .../17e75a3ed5c29e533e84c3ff9b363fb24f1ab71c | Bin 0 -> 167 bytes .../17f252702a2aef6e644af3247127788d0aca7166 | Bin 0 -> 166 bytes .../17faf4b3ceca3e9266c1ad655929559ada84e08b | Bin 0 -> 120 bytes .../1824c8359f0ff9c84aa81b053f0cbcb16a3a7a9d | Bin 0 -> 195 bytes .../182b76b53764186017e5a4859364c5115fb8959e | Bin 0 -> 9019 bytes .../18342e0d19b23655494a28539079074b0001efbf | Bin 0 -> 645 bytes .../18344e82d2e2b30d995c8e4e51b35a3b5c5981dc | Bin 0 -> 1033 bytes .../1844cff325b987f42821c5a699b9bd8d515e863e | Bin 0 -> 36 bytes .../186ec3b8902ceac8ecb49b29c8789b79a36390d8 | Bin 0 -> 666 bytes .../1872106087b17faefac5ed304855e09f93c37060 | Bin 0 -> 173 bytes .../1899f78b55d678f1ece38184cc2f373ecb1dfbaa | Bin 0 -> 279 bytes .../18a17c7d7f9ec43fa943b5c4d852d6158247835a | Bin 0 -> 99 bytes .../18af4f321cc5b861e8563f5533df45cd4f1bf41e | Bin 0 -> 1033 bytes .../18b0e2908414412d967dc2be534f8b76c7d99f69 | Bin 0 -> 5359 bytes .../18bf4468a14ab990302da9c02243d29f5f161ee0 | Bin 0 -> 196 bytes .../18ccbfd083bea582f3016f8833ee9c6f382941e4 | Bin 0 -> 415 bytes .../18dfc7eecea005bb1563b81c8a3a2707673e25e3 | Bin 0 -> 112 bytes .../18f3c6d016ed1b1249837bb91131a5b582778d37 | Bin 0 -> 112 bytes .../190a0a6ebfb8e6783017c453a82052ac6a46d982 | Bin 0 -> 116 bytes .../192e8d1ba3156a5db28bd7d635d794cafbe445c5 | Bin 0 -> 349 bytes .../19361f9531939df5c022340ea3b0d47011b6abfe | Bin 0 -> 667 bytes .../19437fe183b0e9befd92d2383fc3de7c5108e0b7 | Bin 0 -> 60 bytes .../19663d80f88f27b2b24a0c8bddc59586bc90b679 | Bin 0 -> 236 bytes .../196be91dd20bbdb3db9a8392f187e6b452b5dc76 | Bin 0 -> 104 bytes .../19a0b325dfb10ad4d3671b9dc636f60289837f3f | Bin 0 -> 372 bytes .../19a9d1759088a65fe77fc071820723201eeed43f | Bin 0 -> 3477 bytes .../19b2ee72881dbe9a3e037167207db7d5b0f5b90e | Bin 0 -> 195 bytes .../19d9cb7153a4534f7d9d4d2c1e122bcabf8152c6 | Bin 0 -> 256 bytes .../19df3b571a7344358fb2b0a8839ec46903f4cf19 | Bin 0 -> 767 bytes .../19e16d3947e987333c98ecf5b2f9fcff4fcdfeaf | Bin 0 -> 165 bytes .../1a0f3db8748bf720c3a07bc518ab1c7e0c32f4d2 | Bin 0 -> 477 bytes .../1a31415ce7a037a416bf9f46b9e4fe0ef87bc014 | Bin 0 -> 512 bytes .../1a3daa522995bf82c18c00e3ce3dcbc1fb54e3d9 | Bin 0 -> 585 bytes .../1a5f7ef46846004ecf3766251d7a7113378b9ebf | Bin 0 -> 15509 bytes .../1ab9833ee8e139540a381aa0e3823eac9bf8480b | Bin 0 -> 774 bytes .../1ac68ee5df89ba9124eac4099e0650f7e3634fb8 | Bin 0 -> 381 bytes .../1af138cf926b043a2c8bc021a826b815030e8835 | Bin 0 -> 409 bytes .../1b0b6715428b4bd118e5cf5cf6ab3bc44274a310 | Bin 0 -> 9604 bytes .../1b126ca1bb5e6f706e6c7e0f5fc0b376b4a8829d | Bin 0 -> 64 bytes .../1b367e21d6fcb30cf7549992711b39fa0d817968 | Bin 0 -> 708 bytes .../1b71ae28543ee9996eb240c06fa8c7b9a009a6b6 | Bin 0 -> 15368 bytes .../1b74978def0ee4234a52ee7ad4bde6e6b58441fb | Bin 0 -> 1376 bytes .../1b8e81eb26452582f63af5bf25eb6097c722f844 | Bin 0 -> 18828 bytes .../1b91a486155c64f02e0a327716356914550ab747 | Bin 0 -> 195 bytes .../1b924ee41d1e570789812d313a6695299e54d0b7 | Bin 0 -> 128 bytes .../1b99499ce03e678881882185df42a6c724beeb82 | Bin 0 -> 98 bytes .../1bbc97d9277c4cefd088dc54f71685107c1c9605 | Bin 0 -> 196 bytes .../1be7d9d2ab40c77f34f8f2eba319251f9ee60132 | Bin 0 -> 376 bytes .../1bfab29268594ab7857b6e65d0c60eaa4bafbc16 | Bin 0 -> 1698 bytes .../1c07e4aa792297cf81ae268777d476b256eb3b30 | Bin 0 -> 424 bytes .../1c14b7d38d1d2754d44671a2eee0892e868aa1ca | Bin 0 -> 72 bytes .../1c9d0d54e3c1738a076824d9bf90c71f452787f4 | Bin 0 -> 128 bytes .../1cf2c0fd428e5588412d0642bb0598936f6cc3ac | Bin 0 -> 327 bytes .../1cf531077f2e2703f5c9125bb8f5555581dea143 | Bin 0 -> 156 bytes .../1d455ffd67af33770ec25179695af8a2797315eb | Bin 0 -> 2578 bytes .../1d6858f51d10634d1d0edc7214aa287c82d8507c | Bin 0 -> 472 bytes .../1da87941c2ed4dd72d51b116a8b82297a9f2710d | Bin 0 -> 20001 bytes .../1db30ff0f3706792b7a62624bbb52e4ad5cfe697 | Bin 0 -> 416 bytes .../1dc039ced79ef6af60b73a8471f844662f80e75e | Bin 0 -> 236 bytes .../1dd405e88a9edb8a59641b178d87b16227c1fe31 | Bin 0 -> 332 bytes .../1ddba4ed829811fb69cc881b546107e50df40e9e | Bin 0 -> 8318 bytes .../1dde63ef484651373b4fb79fd38933c05ba7d15c | Bin 0 -> 3026 bytes .../1e1dc0a475cf613ae2375fa24c7f934deb5caf5b | Bin 0 -> 1840 bytes .../1e266eab22c0398c78575a176fbbdfe0252a8866 | Bin 0 -> 640 bytes .../1e3988d9e64cbba0828f50386b6e20760a0bf2e8 | Bin 0 -> 61 bytes .../1ea4f0c474c1a44420a485a6ae7d487af2df294e | Bin 0 -> 173 bytes .../1ead61c2142176db07bb152f11cbed9a8cf09f4b | Bin 0 -> 15360 bytes .../1ec38c581d0f996ddf75550bffe8ade2e109deb6 | Bin 0 -> 640 bytes .../1f7503fb816c62cdaf537bdb590df43493d144ff | Bin 0 -> 5039 bytes .../1f9577d8ece0b1ceb11122685337c4e0b6e04347 | Bin 0 -> 304 bytes .../1fb596372be59afc10a35244dc5fb4e0ef97f52a | Bin 0 -> 636 bytes .../1fd7a432be51aae6cc82c6bde1d15c4c0ac59895 | Bin 0 -> 642 bytes .../1fe155f047ef5f7237565bb647db8f3dcea20f48 | Bin 0 -> 4277 bytes .../2036f3471e7756c10b90abc3d11e70080dd0ed40 | Bin 0 -> 74 bytes .../207e08c3dc6f2f07598eb38e0f1bf1b4010c6b37 | Bin 0 -> 233 bytes .../208c8d56149ca004ec453a23a88ce951ec1dc2a3 | Bin 0 -> 112 bytes .../20a0be5d20c074d872d2b74959426c80c06f726d | Bin 0 -> 609 bytes .../20c7e63030320aefd5fc9eda52457862a64f4137 | Bin 0 -> 170 bytes .../20e4f806084aca496cef57691bacc83c0b20e7ac | Bin 0 -> 129 bytes .../212d82008f84fd85a0c9397baf55d75078483db2 | Bin 0 -> 8504 bytes .../213b0814cfd19ddd22949fa615e41b442a6c8bf8 | Bin 0 -> 512 bytes .../2145876d9fbe9ca1db9f8187f39ed0b1d6edb125 | Bin 0 -> 408 bytes .../21529bf0e3d5bdd29fd15c4e5c5f5c9b1925ad2f | Bin 0 -> 740 bytes .../2180a0be1550d75f4739c870daa948551f217cd5 | Bin 0 -> 334 bytes .../2195fcd6e86fd51d85a2d007d0814e507d0c13a1 | Bin 0 -> 178 bytes .../21a14ac884547e057d2c849282595b0bfe2eb96d | Bin 0 -> 19593 bytes .../21a6978a141c1b82ce5f4ad1743de3129c8217a4 | Bin 0 -> 232 bytes .../21bdc199a6efe248e9f05aa5ad54e15c142305bb | Bin 0 -> 11260 bytes .../21c55e8411149769bc5b591f5abadfc533d40a83 | Bin 0 -> 640 bytes .../21ca313626e59a32703e809d87cf264afdcf4c1f | Bin 0 -> 673 bytes .../21d25de59e617b1a6c3e6947e42c94db7929ce1f | Bin 0 -> 27 bytes .../21f2ff9fba7c5ddfebc428d5a0bd210b1e71c7fe | Bin 0 -> 61 bytes .../223e96733ed88a446c9c55a3050c5f5cf3d69f97 | Bin 0 -> 173 bytes .../22662261bb659b020dc8b1603bbb9b8d859a8bfc | Bin 0 -> 111 bytes .../226975e38c8c265f4625ab628641eecfb931409d | Bin 0 -> 208 bytes .../22a658e646fbb558dd84c46c31198924fc9bc7cd | Bin 0 -> 448 bytes .../22ce0e9e670bb821fc83e447afe6068733fcd7e3 | Bin 0 -> 376 bytes .../22ee4381cac6784334d67e7a24dc537137b5ade3 | Bin 0 -> 195 bytes .../22f775b50d5d6f2a1f349b6b606b9190c0ed9c6e | Bin 0 -> 254 bytes .../2315e6e33df5370ecc47befee789fe9c8031a01e | Bin 0 -> 521 bytes .../2316ce40a2c6e124c5c3ae67dd171b929c61d62b | Bin 0 -> 241 bytes .../23212c54ad2ebe1044846a598e9c9442d27ab01d | Bin 0 -> 18749 bytes .../2339b4252d411101501d5763766a06ea47bfad25 | Bin 0 -> 2473 bytes .../2360acda4460dc2b909e50912b58850ce4af6beb | Bin 0 -> 27 bytes .../236a95e0fd46c27b5cc867463251485d94eee1b5 | Bin 0 -> 115 bytes .../237695622ad5616eb6f03889d632f458328eea21 | Bin 0 -> 223 bytes .../2381627d347d2fadc2b200528c11462d97c905a1 | Bin 0 -> 512 bytes .../23a5a7048ade590fe35b753659327e8d52d060c8 | Bin 0 -> 195 bytes .../23a736309194b13e41cc25255e69c99c2a51175c | 1 + .../23bda2d044b2d29edde3377bc6eb9ddec069bf5e | Bin 0 -> 471 bytes .../2407f04e824a2145941f8327ba8dd62379f71bb3 | Bin 0 -> 377 bytes .../24922bbb0fc7f7152dd3fcdfbb96c11b50734aae | Bin 0 -> 6270 bytes .../249f1c80996d2fafd9e7f6e06157d12265153892 | Bin 0 -> 171 bytes .../24b64c359af29edf0126d7407a99c8d791995af3 | Bin 0 -> 8424 bytes .../24bc4d1c6b7bac8562a720c1c04ef48b139dd488 | Bin 0 -> 128 bytes .../24e9759b10dce2788989cbc449a669625b2ad253 | Bin 0 -> 104 bytes .../24ff6ce8a0fedf5117d452eb8ea7e51941daed52 | Bin 0 -> 376 bytes .../25332fb069f39e7f2f26d4666ed515463294bb50 | Bin 0 -> 652 bytes .../254f03484e674534ba3415a595196c9834523ce3 | Bin 0 -> 606 bytes .../2558b5fdfc371c6648b4e3b91f96a19b9744d746 | Bin 0 -> 186 bytes .../2573c24d45164b47fc0356058280ef82fcfbac3c | Bin 0 -> 1494 bytes .../257def388c37170fe83cd7c0a184dbe32f4bd5c9 | Bin 0 -> 102 bytes .../25882c4d9b1f759bb15694fd8ca27d778aa79384 | Bin 0 -> 904 bytes .../25c2a35b744cb2c03e14b65c2e73ead5a4f42f2b | Bin 0 -> 128 bytes .../25e4740ff28f207f5490fc0f17f75183b065b0df | Bin 0 -> 118 bytes .../2607f168ee80c7508878c6823d6c42a3db170b92 | Bin 0 -> 20001 bytes .../261952a046a23903f574119aae69693808b4e794 | Bin 0 -> 246 bytes .../2628ec1159b7ffefe48415e8ab6954bb8e85da94 | Bin 0 -> 16645 bytes .../264767bcc46b6c2fcd9294aecc93a70db90c48a4 | Bin 0 -> 195 bytes .../264fd8e3a276eb6e85a0ad7e2b0e2f4e5560b674 | Bin 0 -> 30 bytes .../2654a515c5b165a10ba9a976d84c9b70be42d400 | Bin 0 -> 18749 bytes .../267068aea426c8f00362e199f1a6a5b076017020 | Bin 0 -> 18774 bytes .../26dec11734de87c8569d9b10f609c69c7b6778d6 | Bin 0 -> 102 bytes .../26fbff69431a6e22b577baa9990a867dc3cc7cad | Bin 0 -> 232 bytes .../26ffc2425b1d57ce2f6695cb8072ec36e4c24e69 | Bin 0 -> 256 bytes .../270d6ee0a1671c64a7f657900b90b1ffa7e3d0f9 | Bin 0 -> 4288 bytes .../272ea52b3beb2743066983c2411b8a9370612c4c | Bin 0 -> 112 bytes .../273f1331cddfb3d2ab413532c8c171037ddf294a | Bin 0 -> 208 bytes .../274df77a87e74f64358a5e0baec1ad5ad2d1bbdc | Bin 0 -> 574 bytes .../27500511758091ce9a6d1228b4d5d43cb05e2920 | Bin 0 -> 681 bytes .../2772093a386da9a17e666e2bd56f0e57ecbeba4b | Bin 0 -> 102 bytes .../277a951632d939639b24c2a3221e93920c2e832d | Bin 0 -> 9018 bytes .../277f8461dcec061d79119e5d480270267ed3a0fb | Bin 0 -> 195 bytes .../279de0ace3d012e83132356acda72cae27937858 | Bin 0 -> 195 bytes .../279fac89f0f2c18a3ba01ccc15eafab36fff77ae | Bin 0 -> 302 bytes .../27d4a251ac7f27ac21fc6b5bf836393d755c077f | Bin 0 -> 980 bytes .../280041ed3c5a8cbbdb55ad292ed46aff4aababd6 | Bin 0 -> 8309 bytes .../287222bca649213efb150f19637454d44a215b1e | Bin 0 -> 15162 bytes .../288fa5046eea2cb81e22b8a151235ece6261ba24 | Bin 0 -> 708 bytes .../28c45c05666ff98f2d0252cb1302417f42b76013 | Bin 0 -> 490 bytes .../28df19d05a420f1cd41141b79c455da1f9ab107e | Bin 0 -> 45 bytes .../28e1af10aeba1fa60b0e7781322f9154dbe11b1a | Bin 0 -> 292 bytes .../28e53e9ac2d7b5725e950c1d4c64085f05aa4a50 | Bin 0 -> 15566 bytes .../28fa3c67202337e4e1da703c55aec984764e25a4 | Bin 0 -> 54 bytes .../29183dc8c1ac8a87a656b9daf1cc6a1668abf72c | Bin 0 -> 2036 bytes .../292ecf89af184dad3e6c2e3f7b0f097ffbb2ebaa | Bin 0 -> 52 bytes .../294c511a5e89c67184a5f4641e81d3a63ddcead6 | Bin 0 -> 640 bytes .../297a702b90c3f04c215fd0eff12fd48d619c0cd5 | Bin 0 -> 5309 bytes .../29c4b74009247bffe0bf4606f80652364961a42c | Bin 0 -> 13327 bytes .../2a03b92f73140e1990b9f3046816fafd8152d3a9 | Bin 0 -> 168 bytes .../2a09de73eaa2ef9cbe42ed6225a9cf07a48fd764 | Bin 0 -> 33 bytes .../2a2454130aa228b8c9cf1c76e1a067ada4a787f3 | Bin 0 -> 240 bytes .../2a28d213575726f7f9053301a597e1cce49b4591 | Bin 0 -> 8970 bytes .../2a63933d220b2162053ea54e22302a38029b7129 | Bin 0 -> 740 bytes .../2a78fa4a8913b0dd254467657f4ed1e46d7c83a5 | Bin 0 -> 1448 bytes .../2a9709da70c5d5642c982d2b35848a735f35d028 | Bin 0 -> 19 bytes .../2a9ff6b50508b447482fd12c89af74c4815fa0dd | Bin 0 -> 128 bytes .../2ac0ad87f1ab4987f4f9da2e7f2cee1f4bf7ef5d | Bin 0 -> 488 bytes .../2ae8ac5962e2b565b7c83585c561e40a1d7c87ca | Bin 0 -> 320 bytes .../2b102e06c7049efa8027f9c16ce2c6002e9d2f0e | Bin 0 -> 1416 bytes .../2b1dcda47a9d6f9a88c396128648c25ae8fda7ef | Bin 0 -> 374 bytes .../2b2ee3dd2ffabe041e2c9cf0053d3facfcdd11df | Bin 0 -> 172 bytes .../2b3191bb0b6b197b5e05b87d8e030bfaf3ac60e9 | Bin 0 -> 22 bytes .../2b50c40cbd87d2ad3f1bec7d3a275e15ee57b09a | Bin 0 -> 803 bytes .../2b593919fa656a2fbe25e3a83b292e4b2c921415 | Bin 0 -> 5176 bytes .../2b6700e38a9f2588dd7dcabac066a947ded11e7d | Bin 0 -> 741 bytes .../2b8e14520e3b6200abd4d22f2d1742f7f9f22847 | Bin 0 -> 72 bytes .../2bad1b591678506499ec633b47511be15f2f634d | Bin 0 -> 324 bytes .../2bc06b0bf5837261b9cb353ece74f8f896719a6c | Bin 0 -> 13420 bytes .../2bc87eeb6f77ca1a77fd08e836ca7ac4254719d6 | Bin 0 -> 467 bytes .../2bcefa1aa4e9d604ef39354ae5b12f3fb9e3b3f4 | Bin 0 -> 219 bytes .../2bcf4a619e8f9e750a0e6147506a5096784222f0 | Bin 0 -> 128 bytes .../2bfbd2f4710d4d3546c7d8bd20a3c6df32207866 | Bin 0 -> 307 bytes .../2c21de2fcd3cf0f88372e90aad339bea79e0f218 | Bin 0 -> 161 bytes .../2c2c58a8320fbb504bd9ae737b4afc40771b4e1d | Bin 0 -> 400 bytes .../2c4f05c06ecaf05ffe529f389586c3b71b48cc76 | Bin 0 -> 1448 bytes .../2c808e3ef8da6d1820f5e0ac59f64f95390c1428 | Bin 0 -> 352 bytes .../2cbe0f83e6ed9165e3f16e1a7d79598134fb5c8d | Bin 0 -> 254 bytes .../2cd0c20aeefeef4ec624de180bd19d14f4306862 | Bin 0 -> 128 bytes .../2cdc404b0281445e4683640f03539e593406f07e | Bin 0 -> 57 bytes .../2cec7854f831d72e2463508b8d084b3bd206d4a2 | Bin 0 -> 136 bytes .../2d2dc33db0e0596dd9ace25ed0f6bbe44379561e | Bin 0 -> 178 bytes .../2d4c01d57981d60c3c3a82e4c70fc0795546cc48 | Bin 0 -> 323 bytes .../2d4dd84245e7feff6e7ed96d3d0bb01a627fcce2 | Bin 0 -> 122 bytes .../2dcba900b73aa06952d2bae517d6a203b3d100fd | Bin 0 -> 448 bytes .../2dcd16c64bd4a6b9abdfd95a468899068e874333 | Bin 0 -> 104 bytes .../2ddcebc5e0e1a5ca76c35e4ce789a5e116450e0d | Bin 0 -> 583 bytes .../2de3d69d3e3a93ac20ad1de7c71ede05c83fa195 | Bin 0 -> 199 bytes .../2dee5c18020dad4ea836996007b4c42c333e73d0 | Bin 0 -> 299 bytes .../2e0eb5aaed05a045fa8f69584de4f456936097da | Bin 0 -> 400 bytes .../2e5393fde44072a4c90c94f0d35192e817dcd8a4 | Bin 0 -> 175 bytes .../2e77d3f67eeb8e4aa855a1de50f4cddbc3e135b5 | Bin 0 -> 488 bytes .../2e95fc3c1d8f946331d78f80612d74c0b37cf96a | Bin 0 -> 23 bytes .../2ed1ee87c3d810ac8051f3d7019a7705635af924 | Bin 0 -> 1698 bytes .../2ed5869f32bf8534f02756fb6e9b47cfb7a25d8e | Bin 0 -> 514 bytes .../2edbc39e1e9cf6c6f429ed02558e195b97851bf0 | Bin 0 -> 477 bytes .../2edecdac591830020963247fed49f092110a2fde | Bin 0 -> 493 bytes .../2efa7e9040720acb6ec285038e7676ee6bd3a584 | Bin 0 -> 490 bytes .../2efb02aad1e209ca6f3e74e688e98f77ebeb0ecd | Bin 0 -> 1136 bytes .../2f23a5195d8a8aee718c57672fa41b061a084e66 | Bin 0 -> 129 bytes .../2f4233cc67b870e10607528d41d38294c5b46389 | Bin 0 -> 60 bytes .../2f6a1994dcc3bce62ec605fb81d7fe88c4114710 | Bin 0 -> 392 bytes .../2f765876b13175151be2b1c571a511a1d530132f | Bin 0 -> 1033 bytes .../2f8b59019850f373a7fd0408625a4fc6e2d93d72 | Bin 0 -> 416 bytes .../2f8f9dbd80a49822d44cb6c254acca7141527e56 | Bin 0 -> 6375 bytes .../2fc831ee41a636885c50c83815ca17bb75f1fc6f | Bin 0 -> 376 bytes .../2fca6028c2fb928cd2b8b5409b46ef7c3ec26944 | Bin 0 -> 3066 bytes .../2fd9ff1ac00604840ef95149d992022640ae9504 | Bin 0 -> 426 bytes .../303d9ae910cfd3396a93a1523dd715cb4fe138b8 | Bin 0 -> 528 bytes .../3044dcfbab9e685d6a588548bf9e6e35ab8bdebb | Bin 0 -> 124 bytes .../305ecad678a316577e782c73579b9deea7747485 | Bin 0 -> 102 bytes .../306ff59073f311468688e035d099a902ec282598 | Bin 0 -> 52 bytes .../30bf30fc0203797e0fe8dde67729e56f16d8bc33 | Bin 0 -> 8310 bytes .../30c2663b39519e5182473b328d81fa4b71e6f6da | Bin 0 -> 954 bytes .../30f1ae3b7942334d7cc3e4030de172b698b26a86 | Bin 0 -> 164 bytes .../30fd50653505c5db76d75ee5a9f8fc51241fa18f | Bin 0 -> 404 bytes .../3111f9432cf1196f613c32501cef421001926e69 | Bin 0 -> 102 bytes .../313ab54861e949c3e1285220e4b6948ba30cd44a | Bin 0 -> 359 bytes .../314a5f76678c61eb745790276497cbf9e4e726b7 | Bin 0 -> 116 bytes .../314ad17f6364935763a2e1ae09a9530844e457a9 | Bin 0 -> 608 bytes .../3157a9f3607891849247e8b562f0e59efdb55a53 | Bin 0 -> 416 bytes .../31688d47fb64a7ad445a0e87354ece098829e4d7 | Bin 0 -> 61 bytes .../317b4d773e36064a490ba3e93e12ac513f687b56 | Bin 0 -> 15360 bytes .../317cf61d2175ee843a6a5aa8776058abfe9d9eea | Bin 0 -> 48 bytes .../319181546795f8278147275872b761ca6657d70d | Bin 0 -> 116 bytes .../31b4b3fefce4c715d41fc94eb55143e233353c8e | Bin 0 -> 15360 bytes .../31bde4dccedc4a497689b81892b7406d4abca30a | Bin 0 -> 122 bytes .../31f4da4e556d78a48030418e42dcb4ba0e6e067c | Bin 0 -> 176 bytes .../31fe4fc2e7d55c80c165989f5852719f0ff84d4b | Bin 0 -> 195 bytes .../321181da35598077e3774d76cff1ff64b18d0068 | Bin 0 -> 128 bytes .../322c7930a22bc87b92ce7fde3b95eb760e56fdbf | Bin 0 -> 229 bytes .../32343ad93005dd18497ad1398576f12798902465 | Bin 0 -> 318 bytes .../323da2f0ea9f4a984351123f7ec332d64a44c894 | Bin 0 -> 504 bytes .../324e5fc2f4324d7954d3c2ce6381d0cbbf1fd401 | Bin 0 -> 6485 bytes .../327a94400034b75451b31bba8a8b67d6614c61b2 | Bin 0 -> 67 bytes .../32d21e7f260be2f4b25170977ebaeb269a33fb84 | Bin 0 -> 233 bytes .../32e31da91faa79a3be8b40089e6e51e92d08a77e | Bin 0 -> 20 bytes .../32ff406c6d81b484b4eb5be11b0b7812e6c8bb18 | Bin 0 -> 18842 bytes .../330f719d014a91471bc0c7b740dfb3e59b032142 | Bin 0 -> 8310 bytes .../3314a52d5e2255113a92bf1a3bda873a664ee079 | Bin 0 -> 236 bytes .../33265dde223eb7b72a80780789708ba1414b0d0f | Bin 0 -> 68 bytes .../3373842e71a1f330c28ac3bd630a35eda892728d | Bin 0 -> 139 bytes .../3383f5d7db48dcd58244739d601a78dc13deddda | Bin 0 -> 128 bytes .../338478f8fd789fa0dca0b5cf6455a822e78b8559 | Bin 0 -> 160 bytes .../338a3288e7c4c71308802d679ee6a7be1e215371 | Bin 0 -> 588 bytes .../33913e6c252f5e8e3a588de27056e217ff7bac07 | Bin 0 -> 437 bytes .../33e48385d4e543e40149932e73fc706b73bec951 | Bin 0 -> 5065 bytes .../33e6194150e07e90f23b2804b0a5499ed211f2b8 | Bin 0 -> 64 bytes .../33f1d381534590d5cc196c75dd98b19ff746937a | Bin 0 -> 80 bytes .../33f3942b1d84f7957cfe0fbd9b038423c4031954 | Bin 0 -> 128 bytes .../3408854b6017472e52e20ec34fe6a64c2b5ba8c7 | Bin 0 -> 102 bytes .../3437c0944bcc6f44a9f2afad2b54df407fb90b0b | Bin 0 -> 1448 bytes .../347a534f47f9de25ebc878b8f21be69f57c3ff6b | Bin 0 -> 416 bytes .../34870473d8036b204e71985acd51dea9d9dd2dd6 | Bin 0 -> 504 bytes .../34a0c1131feb4883ac335082bb50e117d1e89173 | Bin 0 -> 15360 bytes .../34cf47e5addd0d4e67470b03b7e2eb7efec18eb5 | Bin 0 -> 8310 bytes .../34e7834e7788150a3fdeb3fd0a51ea4937c1df3e | Bin 0 -> 3065 bytes .../35324531a72f4adf9fad340073f3922dba9eaf3c | Bin 0 -> 206 bytes .../3548a691fd90113d2311098efba4b2f9cd405687 | Bin 0 -> 314 bytes .../354b6d7067ca5792faedb946272bd374114909c1 | Bin 0 -> 2905 bytes .../35568f26163513cd7743680d10dada59488039ba | Bin 0 -> 432 bytes .../3561ecb3404d65aacc51930ec278400f62d69d9a | Bin 0 -> 318 bytes .../358052236ff9a4023dcc65c5ce11379fa41ffc67 | Bin 0 -> 102 bytes .../35c2570e147a67030e52516bcba30713843b4ff2 | Bin 0 -> 32 bytes .../35c568f2d116a15fb134e056dd432cea023d19c4 | Bin 0 -> 260 bytes .../35db5b2c9d280f062e41d57b072da27c5033c715 | Bin 0 -> 102 bytes .../35e94ec791cc17d6784975777f10a1ebfcf0280d | Bin 0 -> 420 bytes .../362e279ee9a93e660e9b6bbc22395533bf37e721 | Bin 0 -> 285 bytes .../36364497b303eb64725e7c749e017b3934db247d | Bin 0 -> 319 bytes .../364381dacd44c26e8e99536cd1e1a9b62daa98dd | Bin 0 -> 392 bytes .../364911523d6c1e77cd8295f77f4ae82b42a30d9a | Bin 0 -> 101 bytes .../364a3dda8b65abc72b4e41d0969b948dc1017f9c | Bin 0 -> 24 bytes .../3668b637de4f8c4201bfa56bd1973bfa28d2f16f | Bin 0 -> 123 bytes .../3682864be56f8ad9c5612ba96881cf98d5990c90 | Bin 0 -> 252 bytes .../369040d819fcb44e98e0a6af8178f39fc01eeeb7 | Bin 0 -> 27 bytes .../36bb91360310bb45e2cd1b0f8d60a5d1964931cf | Bin 0 -> 142 bytes .../36c19f78718167f6f639630b9aa76567054a441a | Bin 0 -> 25 bytes .../36d5cd112149f30f032c7d23757ede6fc01e37af | Bin 0 -> 98 bytes .../36d996572166620cf7e85386218caaee7d0b843a | Bin 0 -> 392 bytes .../36ed12571d9b559b8832399ee7d21e56b3a6c9ed | Bin 0 -> 234 bytes .../3731486e774eb2c4cd4760639a66c5ca9e34fd62 | Bin 0 -> 128 bytes .../37562778ebf1ff247824a2357788de18bdd1e567 | Bin 0 -> 421 bytes .../377b2f60e384f5333ec660b5cd0bc84d517ff71d | Bin 0 -> 2824 bytes .../377dddc4f3a1ba97ee9fd4de34f7cbb4c6fe3e85 | Bin 0 -> 920 bytes .../37833e9139fbe820a7618fdc2a74d55f7115ee12 | Bin 0 -> 3242 bytes .../378aa2ddb6abba80423503416a1895431a3b9e16 | Bin 0 -> 564 bytes .../379b50e092c94a1428bc711647658f3b30ac4bce | Bin 0 -> 640 bytes .../37b460a225c04edd9f2a04afc0d9dd5290e1c6fc | Bin 0 -> 332 bytes .../37b4edc853aad5911e5566d407d2e65cd02c6ade | Bin 0 -> 203 bytes .../37ba65b1331a9326b674c9969260d688bf5e0b2c | Bin 0 -> 13428 bytes .../37c35bf0ecc8cda890b3b70aef269c2e9919029e | Bin 0 -> 488 bytes .../37dcfe310128a453d41a043d1a3a602c110e2040 | Bin 0 -> 420 bytes .../37e3df14e99a50e3575776e9eb2d77fd4353ad83 | Bin 0 -> 40 bytes .../37f278c269b0dfcfb5d198a5746842c5c5fa12a1 | Bin 0 -> 20001 bytes .../37fcafabb145f9344dc2f224e039e7ab654b54c2 | Bin 0 -> 102 bytes .../381177fc9e92a73f8d05e2121bf263396e976a9a | Bin 0 -> 233 bytes .../38163b355a219f76af7edc08fbf789c07fb74569 | Bin 0 -> 1388 bytes .../38345f7dfb78e197d8a64c468f13f1bfe5ec2c2e | Bin 0 -> 7036 bytes .../384177c35fd7fb52a191c13116b31118e00f574c | Bin 0 -> 1424 bytes .../385859c187bfe6f78ceef9c249f068dc640117f5 | Bin 0 -> 134 bytes .../385e5fc97e06a02da6b9ff4699d91874fdecacd2 | Bin 0 -> 7663 bytes .../38cc7914a8ee23ffd7e1f4c12c087ddae0ea13dd | Bin 0 -> 195 bytes .../38d7951487cdea03f4dd01e8f56a40d1df06a183 | Bin 0 -> 20001 bytes .../38e251230da65eeb64faf5e3473b38c4ee6a3527 | Bin 0 -> 4909 bytes .../38e81083b38f5d771c05e2642b8727dfdaf7796a | Bin 0 -> 61 bytes .../38ec59b0b248321c866989ed5034dc1dffc07ae9 | Bin 0 -> 4098 bytes .../391b6dd6e8422e35e44db11aef356023d47d25d7 | Bin 0 -> 278 bytes .../393c1ac0bb0b93446d056495e8dd087bc050452c | Bin 0 -> 441 bytes .../394302a75400d7b52c452b1d5643f2bc70a34e00 | Bin 0 -> 304 bytes .../3974275bd54b72c670894b883f0e88517db637e1 | Bin 0 -> 609 bytes .../3981b5b9481d34458cbb9fb4ae21f03dfb83ff33 | Bin 0 -> 616 bytes .../399db979d1bae41712b1b7c62b013098d9ee781a | Bin 0 -> 210 bytes .../39bbf41fae600d0c7b19e790e4d5a781d93df6e8 | Bin 0 -> 173 bytes .../39e1de6827036041065f5a231ed3505f0bcb90fd | Bin 0 -> 485 bytes .../39f9e1ac82f23462d323219567f66216ea4e0dc8 | Bin 0 -> 128 bytes .../3a119f359ed5c0e2ae58a10fcbf474903418d8bf | Bin 0 -> 196 bytes .../3a2cc068262db3b5d98002beab05735196b63b00 | Bin 0 -> 402 bytes .../3a2efe9790f9c80addfc66e6c022f959b8f2fadc | Bin 0 -> 196 bytes .../3a339412d089589b4e2b30950016634b747751ff | Bin 0 -> 104 bytes .../3a41fe88b817f58db21254cd9acd2293328095f6 | Bin 0 -> 15369 bytes .../3a6068ed37d33db9e224df95a437707601fe5560 | Bin 0 -> 29 bytes .../3a996df797a421e1ccd63a3ac160b9cd2d334442 | Bin 0 -> 9121 bytes .../3aa0bb4ea2d70f48650a0ed485d2cbfa16cc30eb | Bin 0 -> 112 bytes .../3aae0b5668e759b7b0efba56006c43cc3626a0f3 | Bin 0 -> 236 bytes .../3acef22cc41b4eec98e921b3c4efa7ee4a58f611 | Bin 0 -> 52 bytes .../3ad0c8e2fcd79ddea4d309d6d4371b325f509e1d | Bin 0 -> 32 bytes .../3ad2cb05c7856bb0e828d100b05cb7cdc862acdd | Bin 0 -> 195 bytes .../3ade23bfe7749e637b800378954794229b871324 | Bin 0 -> 8377 bytes .../3ae9a2c1c1db233938907971801c09c67d7fa4bc | Bin 0 -> 233 bytes .../3b41826e7594bc633fb4c4b142d05210f26fca6b | Bin 0 -> 13335 bytes .../3b8e8872cd963ecfb7ba9e69d59d74793dfa64e0 | Bin 0 -> 741 bytes .../3bb326fd010469103165fd9a2fb0a1e0fff19d0c | Bin 0 -> 198 bytes .../3bbb597698743508c5ae5a5f9e249fe1f29d60ad | Bin 0 -> 8310 bytes .../3bcf4c6186b206def660aa5ff94cf0398319edc0 | Bin 0 -> 102 bytes .../3bdeefb3e243a4e019f629282b74e052b3c34046 | Bin 0 -> 147 bytes .../3bea1a65ded52169bb8c03ec496310f5de2ba05e | Bin 0 -> 376 bytes .../3c22c50d72c749251372cbdc1af1dfe172017883 | Bin 0 -> 104 bytes .../3c3c4e78984fc9f4f241e2a5dbd780268d6ca719 | Bin 0 -> 15670 bytes .../3c54bbcb6d7bd7d916e08389b8af5b3f1b454674 | Bin 0 -> 612 bytes .../3c5c5f57ad7509716855498de27e8939c089fcf2 | Bin 0 -> 15643 bytes .../3c63ce2586679c9ce01f69ef3f529b2a568a8268 | Bin 0 -> 236 bytes .../3c916b1f12ada680af0acd4cb94b5b586bc24e3c | Bin 0 -> 334 bytes .../3caa307d562be0c232eebfa001455aa177651fc1 | Bin 0 -> 4340 bytes .../3cb248756823b5af893bd6a193c5f8e7e08b0e95 | Bin 0 -> 298 bytes .../3cb41808bec712c539040b6671cc4b2a7b086626 | Bin 0 -> 504 bytes .../3cb9feb9b44c154d5ffdfad6490390200961d692 | Bin 0 -> 35 bytes .../3cd1cf873274900ed1aa3ae97d45b16ae75d9c84 | Bin 0 -> 741 bytes .../3ce0f2c284d5388e8e9aadeb2c7f57b5b95750a3 | Bin 0 -> 67 bytes .../3cef5bf71cd388bf43006a5124245c45476d78e0 | Bin 0 -> 15368 bytes .../3d1436ed7d496ced0bdc8dba67ce6addb6eaa7b3 | Bin 0 -> 588 bytes .../3d184b1a30b817cea92726926d14205d75dccc3f | Bin 0 -> 236 bytes .../3d4dd00f4dd7976358e692a1f81bc37a1ba8ee2a | Bin 0 -> 396 bytes .../3d4f691f05a73ad1b8e8d3491799ed42ae7ba73b | Bin 0 -> 376 bytes .../3d742f45ed85edd1386885d0a64cbd645f828b34 | Bin 0 -> 396 bytes .../3d9a282fc350e5453cafc7c5ba4f293b5625239a | Bin 0 -> 334 bytes .../3d9ce174c5775da42ffdae158536775d0b7840d7 | Bin 0 -> 300 bytes .../3db5a5a877efbc58b26eb1a86a03e78e0e57157a | Bin 0 -> 112 bytes .../3db69c7d6080fec84dcde951a18d1600ed8fef1c | Bin 0 -> 337 bytes .../3dc0c5df526ebad3f83d34aac8a89f7f2bcb4874 | Bin 0 -> 1833 bytes .../3dcd16fea7f4139fb0d822d0b2d6cb8fd32c3889 | Bin 0 -> 585 bytes .../3dcec563eb77f67151f4403db6e104a3f5e13fef | Bin 0 -> 1723 bytes .../3de4bc2124fe39eda1ad6bd78175ecaa5084c131 | Bin 0 -> 426 bytes .../3e01f23d8744802bfd255b3b311e94b92e4eeceb | Bin 0 -> 8107 bytes .../3e2353d0fdd9e01935a868c99c3367269b6143ba | Bin 0 -> 568 bytes .../3e3344c9d27eef494f044d89eb9462d6b2ec9b7b | Bin 0 -> 198 bytes .../3e3605f2e8a641ede0f8d2a6b6480316ad0604d8 | Bin 0 -> 380 bytes .../3e6e7e0811bc2ae0316fee1adf604a8a4d9b3200 | Bin 0 -> 137 bytes .../3e7ff4ccb75659ba175acd7741e6b795e9977027 | Bin 0 -> 14071 bytes .../3e95eb4778741b9946812ebef0831468d0e04da7 | Bin 0 -> 164 bytes .../3e969385ad421424a09a63bc787c3d771ffc31ba | Bin 0 -> 104 bytes .../3ec24e6184f9fc89638d2391275d1ad841b3d2a7 | Bin 0 -> 15069 bytes .../3ec61dd5ad421abe5b3476b01b9e69654b35d717 | Bin 0 -> 11140 bytes .../3f2960cd38613714bdb9e8a12eb157a205faaf03 | Bin 0 -> 741 bytes .../3f3859f60ec4dbc905ba40aadf67c73dadd85e1d | Bin 0 -> 183 bytes .../3f3fd3f2cfded25c8db8ed7899dbc19ddfc33e31 | Bin 0 -> 94 bytes .../3f45223f24b1b6976620cb4201951c7df5c44554 | Bin 0 -> 267 bytes .../3f59e460cf503b69b87d93bc5f29f0de2cb36162 | Bin 0 -> 1344 bytes .../3f5a02e0cd2924aefe1bb3c599f9503eb40d728b | Bin 0 -> 3083 bytes .../3f623395ff030d4dcb976ef1e70269da4e27df64 | Bin 0 -> 195 bytes .../3f8b0efc5f7aa990e8e36c8b0a788c29cea62baf | Bin 0 -> 102 bytes .../3f8b39585b1e11938a03c00414dc90ce031ac1cd | Bin 0 -> 365 bytes .../3f946ede91097e461d72b3fe382dacd15b2b85d3 | Bin 0 -> 892 bytes .../3fab019a9782cdfc8d683113d78b4a3a1141cfcd | Bin 0 -> 8309 bytes .../400fd1eddd59bb416c3cdeab08c5a0135bab7509 | Bin 0 -> 428 bytes .../401de661e92f3cc77c837728f6a50143910f9703 | Bin 0 -> 104 bytes .../40225cb1cb842e87d906d1b714a20d67a5d1c3ed | Bin 0 -> 197 bytes .../4039b0a9966fa0801c63693b6c71fa3932528757 | Bin 0 -> 256 bytes .../404c2688581734e877b95237d81b4a2fcb59e1f4 | Bin 0 -> 196 bytes .../4051c61af6e8abafbae5647219c09cf7d082f37f | Bin 0 -> 8318 bytes .../406e6cf4f101728183f27fb56f2bdd663f490f50 | Bin 0 -> 104 bytes .../408a96229b6040c4cd81f2725faa5d668ab88dde | Bin 0 -> 4232 bytes .../408accf89ad134949aa807dc8858e584384782b7 | Bin 0 -> 180 bytes .../40a564cec65c6bbf2d3fa1f08e183fea00a4052b | Bin 0 -> 236 bytes .../40bd5899032ebf052b443281f368bbd11f65364d | Bin 0 -> 128 bytes .../412acc023e92cf856d3851c5d1e357d89ddffa2b | Bin 0 -> 377 bytes .../4133b7b163a09428c4dca35b51602b27bfee1c99 | Bin 0 -> 505 bytes .../4154abf6790f0b1631a10fb787afe2b53355d659 | Bin 0 -> 242 bytes .../41691f7817a3aeb9692143719276568064813a1e | Bin 0 -> 5253 bytes .../418a181985e3c19d46b885d21c0da1937732ceb6 | Bin 0 -> 8318 bytes .../41d42399a1257d789e3fa6398c8e9a5aa4d5aeca | Bin 0 -> 27 bytes .../41ed65f1dc1237adc02bba72afb46b375f09f397 | Bin 0 -> 20 bytes .../41f7b669f3a0e796daad00f502ccbeda4645884a | Bin 0 -> 408 bytes .../4200511e5f2ad1cf123f4f853fb55b2ed0a7e7ca | Bin 0 -> 339 bytes .../42302c50751a68ef71675c3e7263c43b61f30445 | Bin 0 -> 1920 bytes .../423ec4ceb4f41fead782abb666f0fc9e62242f4e | Bin 0 -> 418 bytes .../4255bc1b8fc4ca5c59162a00a4c42e495aeccad6 | Bin 0 -> 356 bytes .../4269a27bf86e4e8ddba0b15bbbda87fb15a9242b | Bin 0 -> 8103 bytes .../42c806cacc050f7855dbb71d0c866091414f184d | Bin 0 -> 537 bytes .../42dd966cc4efa081eeecef9706978b472f19676a | Bin 0 -> 17 bytes .../4313da4940dfa068fee750c181c127ed5e61c7f2 | Bin 0 -> 121 bytes .../43183f78e224401c5ac19364a3c8a1f0ebcb06be | Bin 0 -> 18995 bytes .../4358bdf36545aa6a5bcf2c973fe7104bd1a41675 | Bin 0 -> 12 bytes .../4363ceafd3b6715b9ad7f21c87596c361439503a | Bin 0 -> 255 bytes .../437adb854bfa54c80843bbd691d743b5231b0375 | Bin 0 -> 418 bytes .../4395c82027997691ebd1596e877778c620d49b54 | Bin 0 -> 12715 bytes .../439d51432c094fc7f77cd614cce53ef623e323d5 | Bin 0 -> 102 bytes .../43dc4a197566953f76dccafba23118a3db8136b9 | Bin 0 -> 236 bytes .../43f8bc212933a9dacdf4167b99e57a20688089e8 | Bin 0 -> 9676 bytes .../4422e4541185fe8dab92b6a808749f1cfefb180b | Bin 0 -> 149 bytes .../4426e29cc7f84c8aff099f7a2a3c78c377197ade | Bin 0 -> 88 bytes .../44314eccc9bc3877cc93572f93ec2b884392af93 | Bin 0 -> 401 bytes .../443151a242f3ae54545dcccf0d723e9e7c565348 | Bin 0 -> 70 bytes .../4433c25edd0d9992171e1bbf7b05763b2f5d6309 | Bin 0 -> 517 bytes .../44881f46510520805f4f54a83fba6a7468393762 | Bin 0 -> 375 bytes .../449c6e6c75081f1b503f1f6d8b48bafc8f6f4353 | Bin 0 -> 102 bytes .../44a18d2174483f750241809bb5abc80bf31b6793 | Bin 0 -> 104 bytes .../44c9e616a53ca2108058a637b9e1748a2d20d272 | Bin 0 -> 23 bytes .../44e8c86458f27a24519db8e6a2e6904c2752597e | Bin 0 -> 6210 bytes .../4512ebfbcf667604a1f45269b6c28c4727c0d95f | Bin 0 -> 1000 bytes .../4543b87c22431cd1968fd97e72b4f8d9b114cb06 | Bin 0 -> 573 bytes .../454e9494fb22a9b97dcdbb15d99250ec9ebed81f | Bin 0 -> 197 bytes .../45e4bb08f8e01eb6df49fe0e14b9e779ef1be241 | Bin 0 -> 1236 bytes .../4601fb7737bc00af07913d3c531d765889c3e1c4 | Bin 0 -> 18770 bytes .../46215dcf1c38587c949d3d9bc802da46de407557 | Bin 0 -> 165 bytes .../462640e9cbe775d83fc9d853593b79edae1f32da | Bin 0 -> 6516 bytes .../46394562783e5267dff1611753f929d4453d7452 | Bin 0 -> 2659 bytes .../46435d9a6279ba4bcee3a58f087946509c93bb6c | Bin 0 -> 2577 bytes .../468df2047fc894f99ec07432f100058a104d621b | Bin 0 -> 196 bytes .../46906dbc5a0d7d40ec57613c21d340e8f3a672a4 | Bin 0 -> 456 bytes .../46b9fe422cfaea6070671b9530ee4af756b29239 | Bin 0 -> 236 bytes .../46c78221570c13e30707bfd9ec4b4a76af950215 | Bin 0 -> 72 bytes .../46e478ebfa8ff869fc17d0872667e1ca36ae4a00 | Bin 0 -> 13711 bytes .../46eed4b7129c0e2b0d210ea953b1de969a0b5324 | Bin 0 -> 111 bytes .../46f580591dba79b2d6d131614f42afff4140467e | Bin 0 -> 63 bytes .../470fdd5d12b5d15d084ce88c844003613d6a1a0b | Bin 0 -> 122 bytes .../4731b5031064c4f1459437839b2e77534cb9f0ce | Bin 0 -> 377 bytes .../473cb3848839faca67eab6031fcbbcc5d7063e93 | Bin 0 -> 91 bytes .../474f9e02721c808b36d5c1550b0ebbbaddce457d | Bin 0 -> 252 bytes .../4753de1550c6c49178cc0913b4f93e49beecd1ef | Bin 0 -> 448 bytes .../4754ccf116b3b2a58c0b1a08f4078766938c53de | Bin 0 -> 200 bytes .../475602bcc4d28abad5b5749fdbdaad4b789dfad0 | Bin 0 -> 14896 bytes .../4781b9d64b240ee4b2c7719b7ddfaccc76191a0c | Bin 0 -> 102 bytes .../478d3250428f6e4f478f55568d3fbf2f0f8b94ea | Bin 0 -> 490 bytes .../47aa5075ff36e9160f01196f77eb42247a55ea36 | Bin 0 -> 236 bytes .../47cc031c6609765be818f27ea57b87e870702fe8 | Bin 0 -> 11104 bytes .../47e90fb25f5c5207905af74affb6470c5bdcd98d | Bin 0 -> 307 bytes .../4816cb16f0722093b28279b6abd0112862eaa300 | Bin 0 -> 104 bytes .../4841ca745f021d1f6b969595f81fa40f27647a97 | Bin 0 -> 237 bytes .../4842d5ade39652732eac3e0d2ba687b7b3d86cbf | Bin 0 -> 2363 bytes .../4848af73fce56da1c173502acfd7d687f9f46d6d | Bin 0 -> 3578 bytes .../486d73fa097f06f398bf498b87420795d9d72eac | Bin 0 -> 128 bytes .../4888a06695e55037e282780b96277a3dda558e7a | Bin 0 -> 6219 bytes .../48a075d81a20d8cc05ec3fd00386ea38421f2873 | Bin 0 -> 37 bytes .../48b26336b8be1c57d0831ae73af3428023a4d800 | Bin 0 -> 951 bytes .../48c8f09e61b94ea020f5ab6fbbaddf62ca2b45fa | Bin 0 -> 134 bytes .../48d1a0502d8215d3a1ca9c9e760c381a58395d38 | Bin 0 -> 508 bytes .../48ddde2e6953feb376981580c7f5c045df399e34 | Bin 0 -> 452 bytes .../48f2f11388211088f193f5228359ae1faa9d39b6 | Bin 0 -> 18771 bytes .../492be0d90422dbabdcdeb884c5aac9715e47aab7 | Bin 0 -> 612 bytes .../4957cc8040c3d081319b0bd4689373437769f8e4 | Bin 0 -> 1260 bytes .../4976bdc5d4158b18924ef343631e11791d73ef10 | Bin 0 -> 720 bytes .../499eb943bf44ac61c3cd1d66e29ec37ac9795e49 | Bin 0 -> 320 bytes .../49b67191fad12c1e448f050d02c28a9aff25b5a8 | Bin 0 -> 533 bytes .../49c54692e126c06e043162a999b9597e4a98678b | Bin 0 -> 416 bytes .../49d354ea75885900061efe4e41d524a7b4b3d3c5 | Bin 0 -> 114 bytes .../4a3d0ce480c584061d5ed1a50821ad63c990f50d | Bin 0 -> 2187 bytes .../4a469ce1589ce06ca9b101f787391890758dc8ba | Bin 0 -> 105 bytes .../4aa29790f7bc4c13221d476f7b7467794d1b40fd | Bin 0 -> 128 bytes .../4abdb8b9fd2ec21711032ee2f58407d5c1b03686 | Bin 0 -> 27 bytes .../4ade857ff894a4cc4bb8ba93e68ce1c36cbb2f18 | Bin 0 -> 120 bytes .../4af350207a6d1d698d1a2731f931dfb545f48fbb | Bin 0 -> 232 bytes .../4aff35a59c19d3d4134d6c4f964c47bfe027d743 | Bin 0 -> 55 bytes .../4b18caf9dcb1f142fd132ef126dcd789c1cbaa87 | Bin 0 -> 102 bytes .../4b44646a90fb4bdd37a777e67db0f65647171ccb | Bin 0 -> 768 bytes .../4b512d656721ffcda944c3d59a3989bdc8d20bc5 | Bin 0 -> 376 bytes .../4b66b01a0f50a587b40cca71a7c2233a6bcec20a | Bin 0 -> 195 bytes .../4b75a924b723a81b5a8adb84e658b57a3f9394f4 | Bin 0 -> 230 bytes .../4b80214eb1085a2137eb20a2cf546cff57b5a001 | Bin 0 -> 7 bytes .../4b962278e7cf4384c8a320f4df8ffddbd366ff78 | Bin 0 -> 5746 bytes .../4ba433ac8cd5e6f09edef8ffaa8cc7f8cf317c3d | Bin 0 -> 236 bytes .../4bae12b187d1292499ccdf58a530e34a44e60a9c | Bin 0 -> 28 bytes .../4bb9c3241b3ae5b39357448c57ce459e46347470 | Bin 0 -> 195 bytes .../4bc4cb2e8e4c5f104b6da8946feab8cce6ee8473 | Bin 0 -> 420 bytes .../4c157316ce1d6d31ccfe4776dd065bf4bcb5bfe7 | Bin 0 -> 464 bytes .../4c30881f15880eb6554eb45d49de9f636744693e | Bin 0 -> 184 bytes .../4c77b3367c0a1aaf22126fec6fb7f8649c88e2a5 | Bin 0 -> 312 bytes .../4c7d4ada546d84d238a2490e3f01b99f887f344b | Bin 0 -> 195 bytes .../4ca439b92c5d255134b129b01dd9ca1d950c1e43 | Bin 0 -> 8970 bytes .../4caa5c447d6557dab94af13388f9de56febc3da1 | Bin 0 -> 122 bytes .../4ce952e642fe30eccd1f2fdcb980572bac4e4084 | Bin 0 -> 52 bytes .../4cea414663b2194e15209180f69b623a4b5bbece | Bin 0 -> 375 bytes .../4cebfe5a86be7430902018b62307c124f4b582fe | Bin 0 -> 420 bytes .../4d1c399bc4c6ef5d8f3ddc03c0905e2f4ee9f129 | 1 + .../4d3553622acb0b929fe4a06b3a9376e469c6d3a0 | Bin 0 -> 504 bytes .../4d51219589f17ce16a649fd59e59c846632f3699 | Bin 0 -> 20001 bytes .../4d8415ee5434c847867fd504750391ec15e457e1 | Bin 0 -> 195 bytes .../4daa98308c5d24b6c535c9d89b06f0d808b1e44f | Bin 0 -> 492 bytes .../4dcbc9840e20dbd7307c43a9a5c6cc48fb962da4 | Bin 0 -> 233 bytes .../4e12b3c36e2be9547d8ce4f146f85ba8d1ab9c0b | Bin 0 -> 740 bytes .../4e1b1e81d3eaeec8f529af74ce227d7a82a600ed | Bin 0 -> 497 bytes .../4e268554ccc0193d6de3feae04731d3bbc6e7298 | Bin 0 -> 381 bytes .../4e7fbe92320900e7f8cac10fed9648fa5ee5be78 | Bin 0 -> 236 bytes .../4e8eab662e5c4f4a0149978a2398fb0687c31693 | Bin 0 -> 536 bytes .../4ea84d2d01e089b53a98c37ce9d3f96e65a97951 | Bin 0 -> 178 bytes .../4ed0f15ee8d7fcf1497d2f7d7f173946583803c2 | Bin 0 -> 341 bytes .../4ef3c2a78d25c5c7acd0a296d1f2a13a9eeff22b | Bin 0 -> 416 bytes .../4ef47fd91af22e3e6ee9d5059392609146a73110 | Bin 0 -> 232 bytes .../4f07aab87a1a17cf0ed4edb610b2e52c78b58c70 | Bin 0 -> 198 bytes .../4f20dce30e1a8ba97dd69a99227d9a984f41c706 | Bin 0 -> 291 bytes .../4f36efcaa81731f1b541ec881f629c9f2a204095 | Bin 0 -> 416 bytes .../4f42c91747ab9ce981106eebb607758ba8d736ee | Bin 0 -> 1237 bytes .../4f49102d6d876e0045834412d64e88e78c3140da | Bin 0 -> 508 bytes .../4f582b68e2f7a6c8d45dc28be88ebdf28fa9c80e | Bin 0 -> 8309 bytes .../4f6757ab7c701f2e701fcbc9a2c0f32742476710 | Bin 0 -> 1317 bytes .../4f73d7b29a031f405e8ad2d72e071393883f6c6a | Bin 0 -> 112 bytes .../4f91984749d39dac0c4a659b90efc822411ec90f | Bin 0 -> 496 bytes .../4f91e590b934eada14996fec53be0a1b4ca716a9 | Bin 0 -> 112 bytes .../4fae2772c11aa68608c7f5586e05f5fc903e0cf4 | Bin 0 -> 149 bytes .../4fb3dd91c95a1c98904e737fbcfd3a83f72d6275 | Bin 0 -> 263 bytes .../4fbd53cfdb09a24b1a8bf2b5463f029371f34074 | Bin 0 -> 196 bytes .../4fdae8d7d97e53ec47908105933b470a147ef28f | Bin 0 -> 100 bytes .../4fdd3f6df1cac4f99721b060e2560400978fdb57 | Bin 0 -> 1798 bytes .../4ff064ad77e27a34e1242e8b74e2b96c98afe636 | Bin 0 -> 305 bytes .../50203ed02b1c43cf65b1960f2f2adb1455e1d56b | Bin 0 -> 172 bytes .../505b490e8dbf998004b0b7c597715861f95b3f17 | Bin 0 -> 6 bytes .../50686bc15fd10c1cf8d033b0b36bbe33b0e3c7c2 | Bin 0 -> 369 bytes .../508d5a1893f9a8fcab61fb79ea09b17f13946adb | Bin 0 -> 3832 bytes .../50af416496e2ddec0d6b645d5bb6f8e14a387c18 | Bin 0 -> 195 bytes .../50c72061f017ed08eac4e0a7f64a47e52bde3179 | Bin 0 -> 1033 bytes .../50ea3de8aecec8fdfd62fb78211b21bef5c5ef40 | Bin 0 -> 13625 bytes .../50eecf3f8e732bd825caa27191c5470a64534b8c | Bin 0 -> 129 bytes .../50fd11a992cacc60e5fcb04000030b33b5849136 | Bin 0 -> 34 bytes .../510acfa96f66aa7285c2b5a6169c3b754f623150 | Bin 0 -> 196 bytes .../510cb72b2b7d4d1a7be977375862a39637c57d9d | Bin 0 -> 625 bytes .../514fb7240ef25bbb44e10b976543a1f9a5961a30 | Bin 0 -> 95 bytes .../5170e5c82402214bdb53a3122811fbd742eb48e7 | Bin 0 -> 516 bytes .../5195a15b8a29b32a448dc8aec29018d1041edc9d | Bin 0 -> 640 bytes .../51a855c558e86c72dffac18046c58b9372f2e0bd | Bin 0 -> 102 bytes .../51b5647e1b584c736047a22bc5e7ec870fb2f672 | Bin 0 -> 476 bytes .../51e27b04d50824facd3659d1fc1e8fd59429fb31 | Bin 0 -> 565 bytes .../51e3df06593195c8cfceb54ec3175ed528a7f4bf | Bin 0 -> 207 bytes .../51f30937dc71e9dbce857aa9420d4a924ade01e8 | Bin 0 -> 884 bytes .../51fdbc6db0794858050bad978616c2f676fc4191 | Bin 0 -> 170 bytes .../5229a5c922764bebff3b2e17bf1379f1ce6b7959 | Bin 0 -> 34 bytes .../524b7da7aa0e37654490e3a3ee59c31565d4e9bc | Bin 0 -> 112 bytes .../52536afdd5abbbc3c0097def1c22a5243cfb676f | Bin 0 -> 241 bytes .../52a2bd8a303924ac9a655c2c01712b003d7c433d | Bin 0 -> 98 bytes .../52cc4c5c6b0cd167669e23acf7edea6396e432be | Bin 0 -> 6354 bytes .../532c8680add69e520c08f6e492e67d3d70069e40 | Bin 0 -> 531 bytes .../5383277dc36b7ef87b5f696d9918327d40f95a52 | Bin 0 -> 744 bytes .../53b405268246690b377f41bbbddaeb788759ec6a | Bin 0 -> 102 bytes .../53cc81705b417e2880763efef774c9a7ea8676f7 | Bin 0 -> 210 bytes .../53cfb4f9dc7df9513cc68507da1143585f4d446a | Bin 0 -> 371 bytes .../53eb03f76ff3caf51f82f67133f1972996982790 | Bin 0 -> 20001 bytes .../53f64e1cfcc32d3d2549493cf0e0f5c951019446 | Bin 0 -> 14213 bytes .../53fe1c15efe69ba73b09a46c6e049969700f038b | Bin 0 -> 70 bytes .../5404b5511929cf0d519b2a46921326b354502954 | Bin 0 -> 102 bytes .../540555e6f8261010cef02a5bb5f8f302712a255e | Bin 0 -> 173 bytes .../54168489f97b587437a9877cd1e6a8f946fcdcb9 | Bin 0 -> 132 bytes .../543a61d60cdb0b71b574e27405910ca9cb7726a3 | Bin 0 -> 348 bytes .../5495222bddaf658321e7167d54456b4fae4196e5 | Bin 0 -> 57 bytes .../54a22c1472a8f492a80432ddd53b11d32e9a5c88 | Bin 0 -> 112 bytes .../54ad62cdc0e846282b800d99d1534485993507e3 | Bin 0 -> 112 bytes .../54ad682cc6379bb3b40b2fd1a2c73d258974526c | Bin 0 -> 416 bytes .../54b219e7a50bf6f58dbd3733ca096e5be57aa5f3 | Bin 0 -> 138 bytes .../54d392c720fe88b7787233b3fdfe9b4e6ff88817 | Bin 0 -> 232 bytes .../54fa208b7c48c04f5b0833ae6addf3aec215b334 | Bin 0 -> 195 bytes .../54fcd19f18f5ffa09abc55b4cf9e82fd4afd9aa1 | Bin 0 -> 8325 bytes .../553344a326b3b99498844da9e926b1a32801a03e | Bin 0 -> 128 bytes .../55668394be5374196c971e1b2a1ef563834b1399 | Bin 0 -> 41 bytes .../556fc58a4375fbb8eed92981dffc02a624c2c8f4 | Bin 0 -> 1722 bytes .../557618ba72721951a0e79b47ed4a3a47b223e28c | Bin 0 -> 184 bytes .../55841ded8f594f38b091bc145d20b88f9d5fc135 | Bin 0 -> 232 bytes .../55dc1e740a6c44f4ee8b4ae2988f7db7c50caa37 | Bin 0 -> 4800 bytes .../55dcd393fcf7272ee0d4b6a290239538edb670a0 | Bin 0 -> 104 bytes .../55ff4d368f4f21c1c751d484a075c39aa0771138 | Bin 0 -> 312 bytes .../562ef0ad472da725b07f7f0717830ae0a866815d | Bin 0 -> 259 bytes .../5639b8e7d2af474d181353f0d1f750fff8b712ae | Bin 0 -> 1822 bytes .../564717ebe54faec10cf70d6c81737f5d80084aa2 | Bin 0 -> 106 bytes .../565868ed7a06a78dcfd7ff270a0e4510b638fcfd | Bin 0 -> 9070 bytes .../566483810848ce9122d29ebda21b2048359becd5 | Bin 0 -> 8320 bytes .../5689eb0a31efcb61cdf01cbe36974a599448a097 | Bin 0 -> 648 bytes .../569cad1eede89351050840785c9832b325e3e4e9 | Bin 0 -> 195 bytes .../56a6a5d21ac902c12e9063cb6ff58d504f69f5c6 | Bin 0 -> 501 bytes .../56cf4099e381dd26022b6f77891f63a4c044596c | Bin 0 -> 11132 bytes .../56d87c2b8dc5a3e5227de7101b98a8af3172a01c | Bin 0 -> 156 bytes .../56f3c38af849dd4ca7e9bf66dab3718cd5d16926 | Bin 0 -> 254 bytes .../56f98f8f2766c863b7c9b1719803150b659cb58a | Bin 0 -> 30 bytes .../56fcede2a8799d0794e6c2f3c26aff6433a0dde6 | Bin 0 -> 8320 bytes .../570f3216da4bf90723835ba358d13bf4d739bfb4 | Bin 0 -> 102 bytes .../5729b7996e603b5284ff9fd001b7b55c363ca841 | Bin 0 -> 112 bytes .../572c55d1bbfc0724de7202e570449d6f8455e64a | Bin 0 -> 562 bytes .../57976ed81278629ee132b0bc8336aafd9221483a | Bin 0 -> 8970 bytes .../57bd5814d94ca9f755cab47e67c3592442daf945 | Bin 0 -> 13141 bytes .../57cec373f29b853f64a346937598e6cec889ceac | Bin 0 -> 316 bytes .../57d3b54ee1656de756a0a976360e45432d67a8cb | Bin 0 -> 112 bytes .../5826eccccd7b3938d746c0e917f73a5416a1d03a | Bin 0 -> 150 bytes .../58347d82b4267975f8ff8ec4888dfb2141a44e0d | Bin 0 -> 195 bytes .../5842f5f82eb91a9c2925c3707780327fcad74c6c | Bin 0 -> 200 bytes .../584bd9ab39f850384d89b25ee4c581359bf29faa | Bin 0 -> 655 bytes .../585fde2087ed8beec395a73b217b5c6ae2e38f34 | Bin 0 -> 390 bytes .../58634d3736d235f4167ec2e752cc079baa2902bf | Bin 0 -> 3940 bytes .../5885b6a2c5f5dd565206f439d7437a9d89d7bd16 | Bin 0 -> 386 bytes .../58b73605a74c28e9a98cfbf204e65ce7712af6ec | Bin 0 -> 11640 bytes .../58de9f6ddddb429d9d1f33e0a864239a5b914e79 | Bin 0 -> 1257 bytes .../59297b345cb24b34068939e7a0f8089e033dace8 | Bin 0 -> 416 bytes .../592bb54b5dd1802e2718c214e57cf34bb7525e91 | Bin 0 -> 839 bytes .../592c8c7eb261c989996377674bf4b017df819e97 | Bin 0 -> 175 bytes .../5958d8adb542d5a0d7054acdb430fc17d1504410 | Bin 0 -> 609 bytes .../597299ac6680c587993c73546f9e60dfc1509136 | Bin 0 -> 416 bytes .../5977aaa11c33a77c1249171a955ec131091b8a5c | Bin 0 -> 583 bytes .../59870b6cb956865ff45031e73bbba04b0bf15757 | 1 + .../5997023f62603dba3f6e7747e7104f962c2f4e57 | Bin 0 -> 1608 bytes .../59a387e78004ff3c264339d7dd1d4ea5418e622d | Bin 0 -> 740 bytes .../59b8b4fcad19bb4e7e8cf94847e295905b7d61ed | Bin 0 -> 448 bytes .../59f655cf5c5d10445da4be258b41f7120c37d35a | Bin 0 -> 102 bytes .../5a2623a6e087ceb9d2f4802b3e3230721aecc5ed | Bin 0 -> 154 bytes .../5a2f67725533cdfc4e309224749279cb675ed5c6 | Bin 0 -> 15509 bytes .../5a3241636c4ec2598bd1e1661b901633898b871a | Bin 0 -> 1424 bytes .../5a41f30bc7dc3d9540e4df4bc69758fe47ec1ab8 | Bin 0 -> 416 bytes .../5a4bf4c9df1f0c0253760ff963f86717d22a3bfc | Bin 0 -> 26 bytes .../5a80c86645dc7e55ccc92731565e14f689f3b439 | Bin 0 -> 755 bytes .../5a871cb73828d8f0325b3f47d0653008547bb16f | Bin 0 -> 376 bytes .../5a88b407a64b9a21b181fd78b4fd9b4685aa46cf | Bin 0 -> 4962 bytes .../5aa832d4396903dbda93500d1ae2afd998deea8c | Bin 0 -> 64 bytes .../5ac90712a287c97bbe91e812c3982def4fc687ac | Bin 0 -> 3682 bytes .../5ad38b906d3acf984827d2a18958468cfe6e4871 | Bin 0 -> 640 bytes .../5b184cfba63c7607061f47e4d760ce38c8fe5b90 | Bin 0 -> 104 bytes .../5b235a72c6a4816d3c4794ad17aa44c8df419789 | Bin 0 -> 1889 bytes .../5b2e12459dd5fdfa1fc23b175d5c267f7f69923e | Bin 0 -> 8317 bytes .../5b5dc424b9cdab22c8377e000d9d5b315f72448e | Bin 0 -> 256 bytes .../5b62d6d35a507ab1c60a90aecb0e3ac87dd540be | Bin 0 -> 220 bytes .../5b76dc32c486af6306fa63f92c8046db7709835c | Bin 0 -> 122 bytes .../5b82b72243cf16cdc38fef7e53d43b88bd21eb21 | Bin 0 -> 102 bytes .../5ba245233979ca5e7544d1884fe41c6db4d07a0a | Bin 0 -> 80 bytes .../5bb3852187f5c0f7b3735e743d5c669610b72c7c | Bin 0 -> 291 bytes .../5be2ba469acaa0e64becfe4c761017e096b1eedc | Bin 0 -> 98 bytes .../5bf0b84ca938a6ebbf1a88c9c1f615621fdabbc7 | Bin 0 -> 34 bytes .../5c0a2c61c65bb6ceb76385926219d85f9256c5d9 | Bin 0 -> 9122 bytes .../5c197072e734f0edab04fecbfcb9dad46aa7bea3 | Bin 0 -> 41 bytes .../5c25d9426e794b1075440ae8be53b21f57c26539 | Bin 0 -> 980 bytes .../5c64c5b7a1e013632d89071f1b2152eb5173efcc | Bin 0 -> 1428 bytes .../5c66c546592643f16b05e70ec59945a13b0e8245 | Bin 0 -> 9962 bytes .../5c82945da8372f474854f797cf1795e224caf994 | Bin 0 -> 319 bytes .../5c8bcc411a65317c99bbe414519f7e21ab7fc8e6 | Bin 0 -> 3543 bytes .../5c996ad355b58c7b8ae38f438a0ab9512529885c | Bin 0 -> 8367 bytes .../5cb23123596bdc695ebfaae08927aa1bbd9a8bfb | Bin 0 -> 9305 bytes .../5cd9c34c931923abe79e7e741e19dd1e5d3606e2 | Bin 0 -> 249 bytes .../5ce0896ad9d792623591798b5bab6b6694a20d9b | Bin 0 -> 128 bytes .../5cee1a8903e983f03b68409f30d4e7c543fec296 | Bin 0 -> 128 bytes .../5d26c6cead2887ef04e3cb9d29415d3faa042393 | Bin 0 -> 5730 bytes .../5d5979b60face40e4ba32d428fdbdf23cbb12cf4 | Bin 0 -> 128 bytes .../5d8ce0c8924903b6512ccbb358f838106a998df2 | Bin 0 -> 612 bytes .../5dc08d92a4c02b60e07345a73c1bdc5eadfdd9bf | Bin 0 -> 15227 bytes .../5dc61a418952166d36d0bdf58d508d5ac7a4ed60 | Bin 0 -> 612 bytes .../5ddccdbb975aba37011ce643e635867641fc9e6f | Bin 0 -> 668 bytes .../5dffb1f6eb355bd61272f0a9306da890fac5eca5 | Bin 0 -> 392 bytes .../5e120570e2a8c6efd24277b5ec8b997819995532 | Bin 0 -> 27 bytes .../5e2492945d530f31b3a8d2422041114be3e9e9c7 | Bin 0 -> 8498 bytes .../5e3a7cd0fc39ff38ac67103c229e4dab1bc6193c | Bin 0 -> 236 bytes .../5e48f76577dff5437aec2a7ac578efce1899186f | Bin 0 -> 369 bytes .../5e4d2cafcfee1a61d6375a15a72b3b56026cc1bb | Bin 0 -> 143 bytes .../5e4df9cc8bcb9c9496cfb8fe339d7ff4c0262b9f | Bin 0 -> 112 bytes .../5e66642b1e73dbe608fcf7f9d4825d51466874f9 | Bin 0 -> 467 bytes .../5e7906fe7f7f817c44700973035f5cf370820953 | Bin 0 -> 505 bytes .../5e91eaa7c899d08aeb60fedc7908e4ff5e85371a | Bin 0 -> 424 bytes .../5ebfa38fc390ede71dcaab4f73eed9af5a1d3752 | Bin 0 -> 816 bytes .../5ed51d0c22d67de5b54a411353768eb651aae53a | Bin 0 -> 819 bytes .../5edacc703ca7368704f540281d5912db7abeafba | Bin 0 -> 102 bytes .../5edfc582c5a4735dc06747e78fe6d8c16c4e020e | Bin 0 -> 816 bytes .../5ef6fbe7ead1212952a8b29e535e976a66b490f5 | Bin 0 -> 112 bytes .../5ef8836c44daad1c0900d641c021e9b2e5c0a9ac | Bin 0 -> 120 bytes .../5f08397f0d791f56a881c916cbb8faee6abedddd | Bin 0 -> 20001 bytes .../5f734e8e114f936a6137e19a50e2f48d6370284b | Bin 0 -> 1164 bytes .../5f99382ccc0c9be56108320221b5799a5816a9e9 | Bin 0 -> 157 bytes .../5f9f42f79b9452b9befba92af83006d6de468a98 | Bin 0 -> 428 bytes .../5faa421c7b9abae7865e114bf334d7f8348bb53f | Bin 0 -> 112 bytes .../5fbb28c03a07d55cd8790d60b478d8f086cc71ef | Bin 0 -> 868 bytes .../5fc6cd0c544d3effb0f3326daad103c8e3c9fa5f | Bin 0 -> 130 bytes .../5ffb48bfc662d6f173dc198662110a3a1d3ab0b0 | Bin 0 -> 15279 bytes .../601b3b621275021a1cdd5c69a6e47b5d84c00afd | Bin 0 -> 102 bytes .../6057e0b702d12a01528c7314de724d24ef5fde4c | Bin 0 -> 128 bytes .../60bc01df998cddee7a8e4d4edfcd5cee1f4032fb | Bin 0 -> 8311 bytes .../60ff51b07e4362d5d28785ce9605480d7747e40d | Bin 0 -> 106 bytes .../6103fde863a61c2448f56661f1a6eedd2d73b7c2 | Bin 0 -> 21 bytes .../6106c825dd481024842c70c7f218d54f2b3cfc2b | Bin 0 -> 2996 bytes .../610da59babc636255cadab9cce365ce27075f1a4 | Bin 0 -> 112 bytes .../6124f5a975a310e392490fd7ea8aba83db732d01 | Bin 0 -> 432 bytes .../6138da640f51fd05bd6439f48566d06b551526de | Bin 0 -> 17396 bytes .../614fb4095b36d894db280d2f2bc57746df48cb98 | Bin 0 -> 200 bytes .../6156a5b9562fa0f59138a884c4aea0336d2ad94d | Bin 0 -> 15381 bytes .../615e2ccaabae5fba1adf3740503284718be1cbe4 | Bin 0 -> 3904 bytes .../616be08733afc3aa2a6077c20d6974c83aaef6b0 | Bin 0 -> 409 bytes .../619bbef3dbd5b4c59aa21148ce5037f2298e873e | Bin 0 -> 3336 bytes .../61a68b5885e29a4b3aae7f1cdac8f19807b23095 | Bin 0 -> 8309 bytes .../61c4e4076145b1d452cb58b4a6e920f27da1e7d2 | Bin 0 -> 135 bytes .../61cccfd58e0b57c70ef816239ed4305b33fed1e0 | Bin 0 -> 18755 bytes .../61d0775cb1edb2d14ffff6909d504cae3b48c100 | Bin 0 -> 11196 bytes .../61d563618799a6c18077f88257a890c4273e14e7 | Bin 0 -> 61 bytes .../61e141a7f326b809eda10f8c66e3065a2ffb4136 | Bin 0 -> 9907 bytes .../61fc02986a730c35d6e56da04c84f915149ad7be | Bin 0 -> 336 bytes .../62203648ba7335409dd69f5285ac04dd265ffa76 | Bin 0 -> 112 bytes .../622a6d483b714093c1fbcbfe764bdacc5bab87eb | Bin 0 -> 736 bytes .../6236e8b26e1001b53a96e055e61507fa037a40e0 | Bin 0 -> 8438 bytes .../626a93f0000c537fcb2176bb3bdce3c781c5f63b | Bin 0 -> 8309 bytes .../6277af8b076f0d18ec626e4fa7c7b21208287a42 | Bin 0 -> 139 bytes .../62a0ef0a7819bf5f38f431ccc906402d012ec106 | Bin 0 -> 116 bytes .../62c3176e022fbac05a52cbdd2c4958e59fe9efdc | Bin 0 -> 236 bytes .../62cc628a24eeb996342e7ae4d23eda302eeda1e9 | Bin 0 -> 23 bytes .../62d35d8582d6ba94b563b6a76d241be2b84c9fea | Bin 0 -> 487 bytes .../6314084161be7be7a31228d183f4d07425c4e753 | Bin 0 -> 102 bytes .../6328dcf82e00a35550569ff212d0188c8c68b59a | Bin 0 -> 129 bytes .../6335a233f784f084594fedf27c93b2495a85d219 | Bin 0 -> 608 bytes .../634a73191e38c9101eb357ed97c6073356b6d3be | Bin 0 -> 9558 bytes .../635c714cd5f65e480689120db441ef5c948f592a | Bin 0 -> 8365 bytes .../639634bc1c0d9764b950f836a86f2a609609149f | Bin 0 -> 321 bytes .../63e7f4cc94b0232b65053e321888f09606029ee3 | Bin 0 -> 128 bytes .../63f7bea602a5c8611b4f91c029553c1bd16cf9eb | Bin 0 -> 9019 bytes .../63ffb72e94efd90b371d10731745322dc2389712 | Bin 0 -> 1083 bytes .../643bb24bd2ce5518bb3c3edcdff36c9ed2f909d1 | Bin 0 -> 264 bytes .../643ca75c910728abc105f0cd912da3d5a27109d6 | Bin 0 -> 192 bytes .../64579f370f95f3b51008d5ab2a94ab5556e0ec71 | Bin 0 -> 408 bytes .../645dd7455637674190231f5f5ff626edc48f7428 | Bin 0 -> 112 bytes .../6484706c47270572870088cd2958617bb49ab49c | Bin 0 -> 19368 bytes .../6489a581c7b77a3f7e0889e6970b63ca4b5a186e | Bin 0 -> 195 bytes .../64d695834333a767cba53081e890dfaf844f8c27 | Bin 0 -> 960 bytes .../64e15814d3e3a962fc374061d1a27fd9b90e4eee | Bin 0 -> 102 bytes .../64ed9057036fc10600bc2fc529f3a34cd7f314d8 | Bin 0 -> 248 bytes .../65089a38e3825f28c651ed0893018e5d352f0abe | Bin 0 -> 382 bytes .../65c19a306df45daac1a4a0242985c4123f4812df | Bin 0 -> 580 bytes .../65dc6514525969756b132d5ee54901104cf2e03b | Bin 0 -> 392 bytes .../65e887fa099865519a13b34c3fb4a8d8dfb68886 | Bin 0 -> 8424 bytes .../65ecf4266ca01308c34cfb6c18114615fcadbac1 | Bin 0 -> 365 bytes .../65ed396323d0dd300e83e638a19d19f4afdfb12e | Bin 0 -> 426 bytes .../6628e58e8422fa867fbf28d3df35b870818525a9 | Bin 0 -> 102 bytes .../664e4ae6e986d51b9ad5b031e92e1e65cb0cd52b | Bin 0 -> 121 bytes .../6657f5f6a2c18acdc558472ce87241f3c9574cc0 | Bin 0 -> 248 bytes .../668c725a4f3bce3d9483fdf0c29f0aa248f6ac94 | Bin 0 -> 208 bytes .../669136d21a0b6cb4a9ff5b3b05672d967798aeac | Bin 0 -> 102 bytes .../66a3273f2b096c989d604a2d2a16e7dbffd040a7 | Bin 0 -> 1722 bytes .../66d26ac06860ea2d1b3c9c419916ef60b1f18fae | Bin 0 -> 11569 bytes .../66d341837c10abf9735f1c091734b8afb3ebc50c | Bin 0 -> 18749 bytes .../66ea3ea865f69a335873820ef08b32026eaeb5bb | Bin 0 -> 732 bytes .../670b381cfd071cb93ce4820e7176478d3e24c056 | Bin 0 -> 369 bytes .../671316177ad3e9bb22b62b4675275368aafd9835 | Bin 0 -> 14079 bytes .../6739c39a4a579bbc1fa8c9af84cb78fab08cf8bd | Bin 0 -> 147 bytes .../6767c16894285593790c9609720c97c15ab97f91 | Bin 0 -> 432 bytes .../6787fe128d46ed9126ca4b7e0841358d5a909ed8 | Bin 0 -> 376 bytes .../678c250dc487fbc48525ee685b14fe8849b98bfc | Bin 0 -> 112 bytes .../67b33c1dd9659636a92dfb47489a739e581c0749 | Bin 0 -> 3126 bytes .../67ba070cb406a7da9e642b4fd1b474d843917399 | Bin 0 -> 504 bytes .../67da3a6cd29f6c4f533d2329bfa9905cd908a2f8 | Bin 0 -> 7200 bytes .../67fadd1cf2e23ad1838e9885bc9e823c8cb01150 | Bin 0 -> 488 bytes .../67fe430a19000970e3e436d819d2bb34d90ca954 | Bin 0 -> 471 bytes .../680a8fad47c2369bf3cb36b189159208f15ae6af | Bin 0 -> 159 bytes .../680b0abf57e2c1f484f028fc673b26b85b4d6620 | Bin 0 -> 183 bytes .../680b51925a6413e180434046a096cd7f73f39260 | Bin 0 -> 112 bytes .../68250fb9cc2f1986010d116f25a24d8f216b7529 | Bin 0 -> 106 bytes .../682ddf9f552853873db3866d0b602560c99480d6 | Bin 0 -> 775 bytes .../683d78144fef30e47c678618727447f30ccf75da | Bin 0 -> 118 bytes .../6857ee639616db351576dcb18ef543c113311277 | Bin 0 -> 314 bytes .../687425f2f057ad505f6aa9e0e703ab436c8d2067 | Bin 0 -> 120 bytes .../687f101763fbf7716c051ade89db164eac58af24 | Bin 0 -> 426 bytes .../688c6063a641c5578734c96e13de4d0915968a2a | Bin 0 -> 9592 bytes .../6897085b0e5df7bc796dfa7b27e65c028bbdc06e | Bin 0 -> 111 bytes .../68990a915ff179f67bd5e514c17fa8f85f6d6ec6 | Bin 0 -> 195 bytes .../689f7a6de7af40d4407216f6fb9c7ac6408bc41b | Bin 0 -> 112 bytes .../68a3fee14e5e1278cf8617bc7ba4213e4ed9a2fa | Bin 0 -> 47 bytes .../68ce6412aff365f6b2de07abf4d4184addf49d89 | Bin 0 -> 316 bytes .../68e825933fbf3dd070f07128625f94961f895b2c | Bin 0 -> 6518 bytes .../68f8b998c39ef8b57c7f8a93dc34bf5af6071b66 | Bin 0 -> 3293 bytes .../69315803eb341774facc999f76af4311fb45a8cc | Bin 0 -> 4985 bytes .../693566852f458ebdde807613011b1ccbc6096f2b | Bin 0 -> 504 bytes .../6939b66b277703c391d6899577fec35032a3b474 | Bin 0 -> 580 bytes .../69552b027865c1b342cfb76030df7327c2f3b387 | Bin 0 -> 5014 bytes .../69576e68153b7c47eb88cc28b653de7a1bf0db43 | Bin 0 -> 8317 bytes .../695dab2ac960453834e5de9a716d4ee4d09f0c97 | Bin 0 -> 2704 bytes .../6975cd48c7ef0d3a9c88542a6f902c21c335ecaa | Bin 0 -> 23 bytes .../69797161d4e31c42afb3cca28c8ef69450a15779 | Bin 0 -> 492 bytes .../6996ef0fa0b9c9845e08213dc9bb4c809361e11f | Bin 0 -> 402 bytes .../6a38bdc55ddbd299bc54daab87e7878af9b30e83 | Bin 0 -> 390 bytes .../6a6b19e6553e3af97b1001abc13239859aaee72f | Bin 0 -> 104 bytes .../6a787c05cfa918d12a0b3ef75132934b2b65f870 | Bin 0 -> 408 bytes .../6a81266fc3bf081269328eeb429f734ad3700fd0 | Bin 0 -> 388 bytes .../6aa4a80f867da914a36f28b62f12919d6bd77840 | Bin 0 -> 494 bytes .../6aae8250c35ea4ef39d2bcfcf5926f4af2a65cb7 | Bin 0 -> 4634 bytes .../6ad9502ab4ab77466988a3dc30ce6dcd093200c7 | Bin 0 -> 103 bytes .../6af8c9454a702b131d4644ca83879ee1001300c1 | Bin 0 -> 372 bytes .../6b05c39f97c5b6c7d7f3c02c8b2bbcb61627c70a | Bin 0 -> 30 bytes .../6b21fa24479e3e04e07a0047e83ce026aaae3c3f | Bin 0 -> 3051 bytes .../6b38b1bbbd47e76aa43095825e4cc5d4816cde54 | Bin 0 -> 396 bytes .../6b422887b53832a6bb1e16c76d457041f8009fad | Bin 0 -> 232 bytes .../6b5d3214b79e34caaae42c1149eacd04ebd41eb4 | Bin 0 -> 112 bytes .../6b7a44f90e0298e9051cf64a47171d0ec8cc1870 | Bin 0 -> 816 bytes .../6b7af335f6382e118c8d2e11e0d3bdd930d122d2 | Bin 0 -> 416 bytes .../6ba60c067d4b186b390c58ff6c9f5895ed4d0c79 | Bin 0 -> 64 bytes .../6baee1c7100aa958843c3b65249a6cfb95d95b56 | Bin 0 -> 4864 bytes .../6bd2db816bbf4d6b6f59167759dc7a7399c98dbe | Bin 0 -> 408 bytes .../6bec90a9b176180a5715aa6689a83d895e3f4f7b | Bin 0 -> 398 bytes .../6c27fe1842a429f5019c634185345b302a25c3a1 | Bin 0 -> 416 bytes .../6c3e557c20b1410fc9d1e4224694879bcb550413 | Bin 0 -> 143 bytes .../6c549f3df1fac0726fc5aaf8214f3df19b07e11b | Bin 0 -> 9676 bytes .../6c6a22a467b3db89abaa121807a55a889fe04724 | Bin 0 -> 32 bytes .../6c8850ef3addf381aa4b35dd5ebaf62bf84a7142 | Bin 0 -> 17396 bytes .../6c9fa86ccd16dfaea882bef201782ce637ceb221 | Bin 0 -> 448 bytes .../6cb6b77eb67c6b85cc93f70b98ae2acd762e071e | Bin 0 -> 504 bytes .../6cd59b1c5e7c142607608a2d5682c00528e8deb5 | Bin 0 -> 880 bytes .../6ce244807af352baf4da0af910cf2555c089afad | Bin 0 -> 236 bytes .../6cfd5deb5bb6cc46290585ad939d5062ed221c78 | Bin 0 -> 8310 bytes .../6d42d16d15ee8ca2b00078563378f98f66f04fb9 | Bin 0 -> 112 bytes .../6d4478a588646bfd3e1f2307f50ff17670ef9adc | Bin 0 -> 158 bytes .../6d64b478e15091aa28c45482265d59aca3a1587f | Bin 0 -> 112 bytes .../6d81af1c28fa224e274537fdef1ce2230b36769d | Bin 0 -> 336 bytes .../6d948242bf0d0b3ea7db9c9054b0023cea89abbd | Bin 0 -> 370 bytes .../6d95a542618df2cff27aa3abd3aa676befd5d27c | Bin 0 -> 1107 bytes .../6da0db0fca1978280bd0df08c122a47a1a9a01b7 | Bin 0 -> 177 bytes .../6deffaaf6a51d9d92eb13145cb9736e4291c3303 | Bin 0 -> 369 bytes .../6e11eb177394fe5528c785ba4117613867ad3bb2 | Bin 0 -> 102 bytes .../6e15f927a33df344e62ac66b4e82760587137597 | 1 + .../6e42532b2a6299e73632d550c07311748e1252c6 | Bin 0 -> 122 bytes .../6e4de51b4e6041b287c6278ebada37f07e5b9876 | Bin 0 -> 104 bytes .../6ea3aa199090c895de4e2cf2c9321d70c2c229d2 | Bin 0 -> 12 bytes .../6eaaad5adc64de3ab0c707ccc9c41a158e04bde0 | Bin 0 -> 485 bytes .../6efcf6f1be9bcc4a4a927d75b016d6ccdac555f4 | Bin 0 -> 61 bytes .../6effdbf174c467f3a1b9d9a2df240fb1d7dab75b | Bin 0 -> 563 bytes .../6f05e9a8ced304472fac03693c58e51c2a1914b3 | Bin 0 -> 9847 bytes .../6f0953c3ff4ade0e1bb5141f3569d9c1c9a7766d | Bin 0 -> 448 bytes .../6f0b4b5a9dcbbf591bce85776d50a3ce5d9cb129 | Bin 0 -> 257 bytes .../6f18f083a8993831f1730671c8e507c0cb654874 | Bin 0 -> 8022 bytes .../6f1ad780b3c4423037f95761025347e7b259232b | Bin 0 -> 8310 bytes .../6f1f665fabea5524bd80207fb3144ab3ff35243e | Bin 0 -> 530 bytes .../6f239c18601f8e24a4db288295ec82790a1b310f | Bin 0 -> 6635 bytes .../6f273cbe6db52ef43a523a268051d5a0b5c9f451 | Bin 0 -> 244 bytes .../6f38b38ad2f454a6d7266c8e66f5718b84335364 | Bin 0 -> 195 bytes .../6f39ce78b9acf86e42dca48ee624199607a5ca78 | Bin 0 -> 13328 bytes .../6f5ab4305815c071a29d56488790db8bd5a77376 | Bin 0 -> 477 bytes .../6f6fd8cdd9343b609e02060a1b49e153ec1dc7d9 | Bin 0 -> 376 bytes .../6f77eea83fda9731a01523b35448be378c19023c | Bin 0 -> 195 bytes .../6f89a81d0bed00be2cfde7d9b83703023bf95e09 | Bin 0 -> 312 bytes .../6f8fdbf73061a3d3afd70d16bf929ac0e99fca37 | Bin 0 -> 490 bytes .../6fa9c671cba7e8a7c51050f64d71bc7744c5f474 | Bin 0 -> 1033 bytes .../705c1d0dcfbd68f47a7049fc4035e28c614a9105 | Bin 0 -> 18749 bytes .../706666f9802fc452daf8d3f3e929df399b0946b4 | 1 + .../707c7e83866dde9085391f6b1535e8b9334eb293 | Bin 0 -> 57 bytes .../70a11b71a741c5a2a3cf9af7145db692ad13c5da | Bin 0 -> 4985 bytes .../70a936cb292f26ef2551145e04f2f437e660a91a | Bin 0 -> 416 bytes .../70c5d2217eece19f7bd2ae74101c278bd4a48463 | Bin 0 -> 4752 bytes .../70e2531877bd5e5bf8582213a802936d1113f6cf | Bin 0 -> 72 bytes .../70fdee34ef6ef0290fd7445854ae4b96add17dae | Bin 0 -> 38 bytes .../71046e1f0bee5788390de72fc77922a1b573b484 | Bin 0 -> 470 bytes .../7120074f2b20b984ad210e103d85602f9441840c | Bin 0 -> 227 bytes .../7147f7eac43454b6d61f81ec52ba74b0856a9656 | Bin 0 -> 432 bytes .../7156184bff599d4e2e31b0b47410cff7ad5d11aa | Bin 0 -> 584 bytes .../7180236291367c2bc040ce20f29f8fd85b37dfad | Bin 0 -> 127 bytes .../71b4bf9c91e874530cb1a02ce6d4b8de211ba738 | Bin 0 -> 178 bytes .../71bdb1540d5f33dfac7dda8fdb2a57db46c87b4e | Bin 0 -> 18249 bytes .../71ce1427ce24df20bf8b012fb310cc1df40b559b | Bin 0 -> 128 bytes .../71ce61c25e6f75592f21d925cbcedd9a04d1cdfc | Bin 0 -> 424 bytes .../7205905321eb92322c7cdd82f43097d09b837698 | Bin 0 -> 222 bytes .../72112d748ad87d014e3bae7a1c189ca1777989dd | Bin 0 -> 140 bytes .../727ce03489824194226b2b979d13dd02824dddaf | Bin 0 -> 4208 bytes .../727f6bdecd428fc9e98e3ec5974bcbbbda0b0514 | Bin 0 -> 8380 bytes .../72f6219f497caecbf29f6a3f01a21a0270738766 | Bin 0 -> 8400 bytes .../72f67d2e0949d763a57b66a6a674bb59fa5f54cc | Bin 0 -> 172 bytes .../72f6df7ba8a5efffe07146896642569dbddc0d6b | Bin 0 -> 483 bytes .../7322bed6e23240ed2f6834980ec48c3d183c3fe1 | Bin 0 -> 196 bytes .../733264c27e104a29f0a4bced1cd77c180379a831 | Bin 0 -> 392 bytes .../733d1a30b29b1bf9f49ecb640df2e7484d677682 | Bin 0 -> 3280 bytes .../7385381cca06eef8e2104746f1af5108476e78d3 | Bin 0 -> 377 bytes .../73e8fdedfd002d81f5b8ccbb2b0ffc7d557f68be | Bin 0 -> 2522 bytes .../741179d23e15eebd038b27bf9bf48e503ac21bf8 | Bin 0 -> 4176 bytes .../7435f7f96a8af6a87d52ad41bf2fb933d203b504 | Bin 0 -> 600 bytes .../743f367bea0299f64937851c036b62d21d0847d2 | Bin 0 -> 371 bytes .../7444318e6ea450c5e372d62e8a4e131520f2a738 | Bin 0 -> 102 bytes .../7459f86d8c5eb9b61dd971f92c4a7702c033d23e | Bin 0 -> 1328 bytes .../74b7e0d027d3cf5d545c6f95a2f3ddc0fe193c66 | Bin 0 -> 512 bytes .../74ba64b15c7a113173528a1036c923ef62ebe544 | Bin 0 -> 416 bytes .../74bfc349b4110556019ed4d4b2cee5d3fb194d75 | Bin 0 -> 376 bytes .../74d95d148eefe22621a4c0cf6b46835ada78db88 | Bin 0 -> 335 bytes .../751ded25b10ab1cbda3f4217143625207ca853f3 | Bin 0 -> 102 bytes .../751e352a1cb1cc2f9989b5ebde081a617f84ff4e | Bin 0 -> 195 bytes .../7529e415f4fb58bf1f338984e38263ae8955deef | Bin 0 -> 18919 bytes .../75414547cc71fa151670c6cb187ee969a5e1dd73 | Bin 0 -> 4497 bytes .../754a23f5412c2e6af5d7807c9cf3da2e29d5688f | Bin 0 -> 158 bytes .../7599b2de6caf93ab753b8939e66390062d1bf6f6 | Bin 0 -> 8321 bytes .../75a8be26c095538a8b38ca87e65b594e04a81136 | Bin 0 -> 1732 bytes .../75cb8c9273fe3085ff8cf8249435e9147e3ae25d | Bin 0 -> 241 bytes .../75d34579d7c95cb16cf02ef0e33b89a67f204c26 | Bin 0 -> 5105 bytes .../75d7fcfc28dcc073efb2a024ce6ddcb9aa2d60e2 | Bin 0 -> 216 bytes .../75de6c6b8b010d1829891b52a0963f3f61d07163 | Bin 0 -> 1473 bytes .../75df1125e87c1190670dc8eb7064204e7d3f9b99 | Bin 0 -> 20001 bytes .../75ec05182d7d313a6b81300a395784ecd7a4c711 | Bin 0 -> 336 bytes .../75f5ac2fa640d6e95461387541cd29a506573335 | Bin 0 -> 614 bytes .../75fa6fc313b2429933368c1e24c2f9e0288173fb | Bin 0 -> 8367 bytes .../761880338d0059a7d14b056b25320cc2a59ca075 | Bin 0 -> 824 bytes .../76469e1babdc64c71235f1074f047aad80bec0c6 | Bin 0 -> 102 bytes .../764b5cb89285d73cf66b42cc3732d0a8ac4d9d30 | Bin 0 -> 236 bytes .../764e05ece93bae4d798676f687cc627d9419b0cd | Bin 0 -> 351 bytes .../76867973d6de558f99147d807ff898118997e78b | Bin 0 -> 302 bytes .../76dcc05c96d8388792732b1001b67a774ebd7d5f | Bin 0 -> 26 bytes .../76ecb39fbb0cc5c19cbd690e4b25a33ed06127a6 | Bin 0 -> 640 bytes .../77230370b578128d007e10222a3bc548f629e30c | Bin 0 -> 195 bytes .../772adb1d731ab8026249b28aeaff409f24d81e0b | Bin 0 -> 112 bytes .../773ab2a1a364c64cfcfcf3483c55d5a6163253c9 | Bin 0 -> 302 bytes .../774878d69ec5e93cccc8b819177595a035aa7766 | Bin 0 -> 41 bytes .../7770422ee967a542abd2d2d275f761a2c9ff1bbd | Bin 0 -> 150 bytes .../7782403982076d6017b4e4244ae3bdc4045c40b1 | Bin 0 -> 236 bytes .../7788e7599f953fd033990b09e56c4bb0b4857b32 | Bin 0 -> 13328 bytes .../7791a869b64c77f26d5ea93673229292502e710e | Bin 0 -> 227 bytes .../77941b9d083af3903e78f8d4beae0dc52e072987 | Bin 0 -> 230 bytes .../77b05f54f2a6376c2f737833b3249e5b0230cf79 | Bin 0 -> 448 bytes .../77b4190e81d47c260b5365d81e859897ca8870aa | Bin 0 -> 116 bytes .../77fee81bec6c49568e539fec410c9b8ce802a4e2 | Bin 0 -> 233 bytes .../780e12cebfe1c7888851a1ccf17ac5fed0b8fefb | Bin 0 -> 608 bytes .../78140806f440552add7ba8230a240f799ffe203a | Bin 0 -> 494 bytes .../781a3a9245e1fd378527cf7a366016b49bbf7637 | Bin 0 -> 35 bytes .../7822497240e4a0d535f1a64c3d45bcaf3af2e930 | Bin 0 -> 112 bytes .../7843ff16cea11b703e9e3c7d13ce9dbc51922d59 | Bin 0 -> 2412 bytes .../788a32315df31454189934b9bf8edd3640958012 | Bin 0 -> 68 bytes .../7893eb790d3e668e70af96931e977d549913732c | Bin 0 -> 9545 bytes .../789bbfd337e5c3ba55913937e91eb97e469660e8 | Bin 0 -> 128 bytes .../78c7906032ccc9d2191c6802d2391947bcc1e940 | Bin 0 -> 195 bytes .../78d1518a90cd092a1da53258924edf4ac818f9c8 | Bin 0 -> 1448 bytes .../78dfa163127c3c4b218d893b5340648d41b59b2c | Bin 0 -> 81 bytes .../78eabc5ab117cb239d0b408287ea0cc636a5812c | Bin 0 -> 139 bytes .../790dc6dcd020b0f6c61d90f475626bbc1633f637 | Bin 0 -> 112 bytes .../795e79d385511771dd0cf0d8eb5df50e9ce769f9 | Bin 0 -> 196 bytes .../79a58af0dcfdbea3742a74c01ef5d787f3924f03 | Bin 0 -> 334 bytes .../79aeb11f5b5ff9bf0ead98976d520230ac721965 | Bin 0 -> 308 bytes .../79ddb922e6a504d21eec555b26f8a22e44c13f6a | Bin 0 -> 562 bytes .../79e2bf6007a2092e50ac209f5eed1c8c804f70f4 | Bin 0 -> 1099 bytes .../79e6ae61a5093776448fc5c9ee03af66f90ae6f8 | Bin 0 -> 1008 bytes .../79fa53cef4fbe0d9c5b76a02d4fb8737c662e223 | Bin 0 -> 4761 bytes .../7a009d445e54e51f354a9b52606ef45a05aad449 | Bin 0 -> 8309 bytes .../7a0d8f844f8df4aca595fb076939d23b16cb1f87 | Bin 0 -> 765 bytes .../7a828f43dbe9abda9dc806d6a2033e954db632c8 | Bin 0 -> 741 bytes .../7a99d22792c11a8a613bcf85eba226e0abc8c80c | Bin 0 -> 196 bytes .../7ab1d7ff6b43ee88b826e286fa21a5e3e3d7e231 | Bin 0 -> 102 bytes .../7ac1fae57a806ad8d22ad24b10a97cc12d5028e1 | Bin 0 -> 95 bytes .../7ade2c51096accfb366c5e60d7d10f1e9e95b1ba | Bin 0 -> 8365 bytes .../7ae08e8c9ba9afd2b461943fd46a482eda57f121 | Bin 0 -> 197 bytes .../7b03a6b54fdc0d183527e9b4c211cdf9168ec45a | Bin 0 -> 416 bytes .../7b0e7626904080052ee07d786affc86317ffdbbc | Bin 0 -> 232 bytes .../7b2b8d46dfb163e8f751a1e14be12da211e8c496 | Bin 0 -> 195 bytes .../7b4a60a2618a77d5bd9ac3408b6616e2c00b13cb | Bin 0 -> 584 bytes .../7b4bee5f8bfa3351a8e9dc9a0ab982ca5eff14d4 | Bin 0 -> 100 bytes .../7b549b1179a25cc5b5ee2f89398fafae6ffdf593 | Bin 0 -> 15218 bytes .../7b739783d8ae0037603673048235dcaa547b4b94 | Bin 0 -> 292 bytes .../7b8b5c012718a2a4de63d80f15f7caa0b6cc0ac9 | Bin 0 -> 416 bytes .../7b8c2600d74cf2869be972aa7184c01f52bb6f45 | Bin 0 -> 310 bytes .../7b9218b38af0e97ca41f67b769f143b835e5b514 | Bin 0 -> 61 bytes .../7b9229287b7d8b66bc90084687af186841e7ca16 | Bin 0 -> 375 bytes .../7bca4c9a6cd0eeebc53d5e6d5a88f3fffc840947 | Bin 0 -> 416 bytes .../7bdccd065c2a48df8dd283e8a376307713004ef2 | Bin 0 -> 392 bytes .../7c2a46c6244f9dc1cbf2e53957b0765a97f59170 | Bin 0 -> 67 bytes .../7c3f8f40ed5f4b28842f72bb0583d811cedb1d62 | Bin 0 -> 129 bytes .../7c4de20f9194fb5dc148fb8b85eac23ce38dfb82 | Bin 0 -> 269 bytes .../7c727958742620b409036ea8831550a352ac72db | Bin 0 -> 112 bytes .../7c9e1e19f87f15fe36acf9a1e66a5f36631d15a7 | Bin 0 -> 128 bytes .../7caa0aa14e8ca7ff11055e35326ec174b1903147 | Bin 0 -> 355 bytes .../7d558329a856bd487a20de1125a4a0b4aaa3a895 | Bin 0 -> 378 bytes .../7d6375765c90d477ab95126d3665b085038fd229 | Bin 0 -> 148 bytes .../7deaef5a355eba376b66070cfd7ea4c2e14ca78f | Bin 0 -> 41 bytes .../7e056bc4cae1126ed873b5153d01a70cb8388a5d | Bin 0 -> 304 bytes .../7e1956c3415f2b8248941f30ffc59f3d8a9696df | Bin 0 -> 884 bytes .../7e595ea114451a665bd48b6d0a78e3fc7619f0b0 | Bin 0 -> 81 bytes .../7e8d74e341371d2e877c24394706532cf1a9d23d | Bin 0 -> 128 bytes .../7ed7dacd903a9680525908c5bcad05299effa1b7 | Bin 0 -> 102 bytes .../7edcf07fc306a554855d3e48d211ab103891989e | Bin 0 -> 177 bytes .../7f0ab479640a04e3007140edc429d0966955bbf0 | Bin 0 -> 405 bytes .../7f13f825fc1e28140ad969075d5fda63e0789816 | Bin 0 -> 562 bytes .../7f47b9c8facdd24da96f6b0023d84b25372074cf | Bin 0 -> 195 bytes .../7f52ee40f7b6ee6436bbd865d43afd4c22aec755 | Bin 0 -> 68 bytes .../7f70a564c77b7bb4afaeb87924757adaccf75a60 | Bin 0 -> 104 bytes .../7f7f3025ae6d591e309f831fa3e8a6e7305415dc | Bin 0 -> 667 bytes .../7f840f6dc9e67f45139147b26ce912de0630518c | Bin 0 -> 112 bytes .../7f880d989073d20e9ed9d3f0863091d965a465ef | Bin 0 -> 102 bytes .../7f92cfa4c550e0368dc8bec67277e77cd6a40bf1 | Bin 0 -> 396 bytes .../7f9901149050d4e0dec785a92a05bf44398282ad | Bin 0 -> 228 bytes .../7fe115e82cf70bbc9c9db5691e16e63235665a80 | Bin 0 -> 478 bytes .../7ff92dab905f92f93baa1a8fb0c27e6d8c717637 | Bin 0 -> 20 bytes .../80117e5cc04fc0dc4de8635662658d32042796df | Bin 0 -> 402 bytes .../8020807517c534f485ec2355f2b3af71de11650c | Bin 0 -> 104 bytes .../802cd3dc2c7f907103570409b8d2ec0c2c28238c | Bin 0 -> 474 bytes .../805f45b162c5f395c193692034714a3b5396666f | Bin 0 -> 25 bytes .../806ae3df44e61962131404b5383ada823511f23f | Bin 0 -> 64 bytes .../80b4fd7a159e7c32ff61aac8e90b29b450b4b988 | Bin 0 -> 112 bytes .../80cb8339020e70ddaf9b75269bfa1c48e27417a4 | Bin 0 -> 12627 bytes .../810d0b1e1e75116c73a86672f495f159044e8ac7 | Bin 0 -> 227 bytes .../8138796724189385667e6334943ad6eee336ef5e | Bin 0 -> 55 bytes .../813d119c6b112593126903e4ad5caa62ffcf3f6e | Bin 0 -> 216 bytes .../8168bd224ca22d8d7b25802f25cafd862e577547 | Bin 0 -> 455 bytes .../8186705dd28c2da19a7440691bfbeafba08b3009 | Bin 0 -> 448 bytes .../819af2f8dd79a9531cdceee805ca7101859c6e03 | Bin 0 -> 457 bytes .../81b705f2aae1d31f50b41425d5edc8ca2fb4973e | Bin 0 -> 129 bytes .../81b8680066a97d591312217b1cf9520c4a8daeae | Bin 0 -> 142 bytes .../81b9329d7dd4ae578679b06679ce450e10b966d2 | Bin 0 -> 132 bytes .../81c97fdafe3db83a3d1f77877ab108b3644738de | Bin 0 -> 102 bytes .../81d4683e57b9e82fe11c404fd892585201b946b7 | Bin 0 -> 336 bytes .../81ff3d5716f7bdacfebc8bf8fd71942ebd0dff55 | Bin 0 -> 8329 bytes .../8200d1f80e25a1e25317e48d0c3d82ef149bf72a | Bin 0 -> 2522 bytes .../8242914565afd7ed7b202a4e7953a754e88e74c5 | Bin 0 -> 245 bytes .../824fa3424f95412c9a455d10421e733ab36fc857 | Bin 0 -> 1052 bytes .../8299c53d6c00b3a9b44eb89cd571044788a23ea0 | Bin 0 -> 228 bytes .../82a443c1da23407952391371d4276d3e985de085 | Bin 0 -> 142 bytes .../82d8113a9e1210906c0af51fa1e5ffbad4314b65 | Bin 0 -> 416 bytes .../82d9e92ee445f15d11a98b0c69d05c9dc47a965a | Bin 0 -> 375 bytes .../82ea65030e0ad7bd34a4672d2207f0578b2fe8e8 | Bin 0 -> 8318 bytes .../8305c35612cc34a1ab0c7e3a56a6cb82f2b6e2c3 | Bin 0 -> 368 bytes .../8308c8ce9b6c1598b995c9bc233fe07ace9190cf | Bin 0 -> 122 bytes .../831ac0837bcdd8e33215cbf933dfd39f37358773 | Bin 0 -> 72 bytes .../834d280176b6f20879452470094d5889109c1088 | Bin 0 -> 104 bytes .../834d5e9a8c5a5ab64f43756d63aed2ea71678465 | Bin 0 -> 4985 bytes .../8359da77295e5c45006327f05c9aeb09c6d74412 | Bin 0 -> 49 bytes .../835db2348f4e72450d4d094f86834f4f618e60d7 | Bin 0 -> 6861 bytes .../8365de9ba6c0bba0cc9a11d9d97e5bb436f87374 | Bin 0 -> 65 bytes .../8368876f400556b1fdc5e4eee34109b42ccd0a54 | Bin 0 -> 666 bytes .../84049bf17debceb4fe66242867e0ae22ccd50ee7 | Bin 0 -> 219 bytes .../840a83a4edefdbef374182c15544d378fdaf0d99 | Bin 0 -> 1424 bytes .../84260c3429b84a5b490326eabc3a7e0feec81724 | Bin 0 -> 489 bytes .../8432646bc4a030b8f542eb2d138f756d78eab91d | Bin 0 -> 884 bytes .../843a8d40b65cd3ff96f12b7a742cb60f5be15c5c | Bin 0 -> 151 bytes .../84667a312b254cb9f6250d073816907a16eb4918 | Bin 0 -> 18945 bytes .../84708d9fb4c33c933bcfe0c5ad79d3415d15bb71 | Bin 0 -> 7662 bytes .../8490bbefba8b96dbb4fe340a7d29c08a2c08bb49 | Bin 0 -> 392 bytes .../84afce7563651f7d8afcc35cb81b6ee311173382 | Bin 0 -> 381 bytes .../84b6554ee453ca9f0b941f503879103380319349 | Bin 0 -> 72 bytes .../84f266960fc52c50a344c736994f24b7e3ad4661 | Bin 0 -> 973 bytes .../850af3260a8326764bbd53b4c708b5d98beba55f | Bin 0 -> 1074 bytes .../850cb8ba5957707e14e1bae9220c89dc42363fb6 | Bin 0 -> 308 bytes .../852727003d9db4418d69b4cf6a393c69d3ba27be | Bin 0 -> 252 bytes .../85642f4db5c566b301f845a68f6601333a66fd56 | Bin 0 -> 444 bytes .../8567aed03539422e24b83027d1f95963e9c43b73 | Bin 0 -> 128 bytes .../8570d6053fb475cebea1b0299a0a5d2868f0bf70 | Bin 0 -> 640 bytes .../857bdd738c6ab45d1d3f3e42667ba6a5937d5582 | Bin 0 -> 122 bytes .../858deb95e726810be16fdb2ce1d584f9107947ad | Bin 0 -> 492 bytes .../85b5d8007a85934675a67e89322a137d527dcbab | Bin 0 -> 195 bytes .../85ba853a738af2a21bb1a2f69ef90832888a626d | Bin 0 -> 684 bytes .../85ebdfb9899124839e007c5a14bf97618c110665 | Bin 0 -> 2537 bytes .../85f6056f6f41ebc5a3147663b2dea683bfe921e2 | Bin 0 -> 8310 bytes .../8624933046c652c2bca16c0119407bc228a7ce60 | Bin 0 -> 256 bytes .../86300fb8518ae7bf0d784c9bad7dc871124a976d | Bin 0 -> 437 bytes .../863bca0f37d4ebfbf995b639e3bfc53b770f179f | Bin 0 -> 45 bytes .../8645f36753221a0879df3777edc217511fb23f94 | Bin 0 -> 304 bytes .../868a5598f6ada8845bc0e180e442dcc5a4ab3821 | Bin 0 -> 128 bytes .../86a449f6227e60d0d723e56186542ff492e5fca2 | Bin 0 -> 250 bytes .../86b642a56d871c554cb8a1bf283fbd2d6f6429f0 | Bin 0 -> 493 bytes .../86b8c9b916b18e3f313723ecd7639ee089f3e863 | Bin 0 -> 93 bytes .../86c1602652372c08482035eeb0880e6ea9518844 | Bin 0 -> 102 bytes .../86c3cc70c7533488cf7a8c720001db17409ab7a7 | Bin 0 -> 438 bytes .../86e6b76fa38f3c23f9300c2ce9a493825775a9f6 | Bin 0 -> 416 bytes .../8726dfe2b903928ff706d8c1251867b6af816c48 | Bin 0 -> 605 bytes .../872ebb303267b845bb7f15db81349b9c18555bf3 | Bin 0 -> 265 bytes .../875336b060f791ac2688ffd45ff6d10e4832b57e | Bin 0 -> 512 bytes .../8757c4d6d76b5f0eff0da94e5f8719e58b122fe5 | Bin 0 -> 34 bytes .../8769fbfa99a85490ed8a6247cb1ea64a57b876cc | Bin 0 -> 390 bytes .../87746abd2443fa8fdac1506b57045103ecc67134 | Bin 0 -> 6211 bytes .../87828e9b24d3243fae0c1ee438679cb3540aa0be | Bin 0 -> 490 bytes .../87968f39e3821793d8edf5955cbd762bd5952452 | Bin 0 -> 27 bytes .../87b696935aeeee73f602f4a3b6d6973813e73150 | Bin 0 -> 265 bytes .../87d5ad1470ae23edc412a8759b5ebbc9b1841603 | Bin 0 -> 380 bytes .../88436a756ae4a6a0b50d00463794d660efacb38b | Bin 0 -> 249 bytes .../88728925bba6027acf2639017dde387aaace3692 | Bin 0 -> 380 bytes .../8892b0bb6f71bfa5bd8a503b0df0d7113efd8634 | Bin 0 -> 194 bytes .../88d1f619c2134113545bb9e5209d60429942847f | Bin 0 -> 236 bytes .../88e0bb0fe71313e65a4f933f80d62910361c6d66 | Bin 0 -> 378 bytes .../88f87893a7cff48e398cf55791fcc265e8d3e584 | Bin 0 -> 102 bytes .../8957a7c2604a1d06f092ce3607afe9e9c07dd2a1 | Bin 0 -> 3477 bytes .../89586218f15169bf6b31a680c2877048a60198b4 | Bin 0 -> 6270 bytes .../8960f2faa59b2f7d013ff28f7e6a3f081a90c030 | Bin 0 -> 20001 bytes .../8971aacff7bcd0bab75cd92d46862c24f71bd677 | Bin 0 -> 722 bytes .../89768c0a4347077c3c0a3d1a3e7c2b21ffab1203 | Bin 0 -> 8972 bytes .../89a07c20d412b85f52f9e69bea5b16be20cebe98 | Bin 0 -> 170 bytes .../89e9fa0c5d94b9ff0cc846103706d903d09c6b36 | Bin 0 -> 324 bytes .../8a11d2b0835d0364e0dd6c6e78db7e7edfbbec95 | Bin 0 -> 408 bytes .../8a2883d5d083bf4eec92638e69d92b3bdb5989e6 | Bin 0 -> 106 bytes .../8a38e76fe9fb6b858d165e2a3c3b396b4e8ece24 | Bin 0 -> 165 bytes .../8a445c523d60c2936955af0d086a7b80947c8852 | Bin 0 -> 806 bytes .../8a4ab099496ece35eeb0c8a88f8714b237d48896 | Bin 0 -> 666 bytes .../8a53f1d8364289cce11b1a902cbaefd42fa314c0 | Bin 0 -> 102 bytes .../8a5c4749fa87a1743f5a2b01ba4c85072759161f | Bin 0 -> 192 bytes .../8a773771297f3b114ddd276fbf9d7e44a4750ba0 | Bin 0 -> 15511 bytes .../8a8318ef72db5a497aba63e8712c3f33151fd61a | Bin 0 -> 8365 bytes .../8a84a038fc7f8900a283977e34b67cf33734a1cc | Bin 0 -> 396 bytes .../8af1357e2e468c26419e8d3173dbf888df6267c7 | Bin 0 -> 320 bytes .../8b1b12f4f84a1c7de8da12d301944c6499855997 | Bin 0 -> 490 bytes .../8b54a512d1bd9f991de2d96503b48f4e50718977 | Bin 0 -> 208 bytes .../8b9c83f869546fc578f5efe65a1422521281b556 | Bin 0 -> 102 bytes .../8ba642c771f2f07ff8dfa54d99bc2beb76c7172e | Bin 0 -> 237 bytes .../8ba8d8ccb95c0eb7e520a0f2d121e1a2e2c55a20 | Bin 0 -> 128 bytes .../8bb4d4114cb2ef2f7c3dd48f8cf54d1ac81bb42b | Bin 0 -> 412 bytes .../8c0d43fc84fc0ffef1705c086fef0e9005b83a34 | Bin 0 -> 78 bytes .../8c20fc51f00ec70a32d927aaa8cceb4f9f2edbe8 | Bin 0 -> 156 bytes .../8c2e60f440c519b57750f978fe96b6008bf12a8b | Bin 0 -> 112 bytes .../8c5f050bfb8b86a7faa9ee155d4b2be09bd18bca | Bin 0 -> 224 bytes .../8c7352c96be76966d40c7c7227f868bb389fc8f0 | Bin 0 -> 236 bytes .../8c75e3d1f64a07aa9e7d9e5dc80d17dafa8a3ca3 | Bin 0 -> 358 bytes .../8c940139c528d8571625b5c5997f67d561de3a7d | Bin 0 -> 67 bytes .../8c94d8cb578aadbbb1a6227c099f935f5f02b8ec | Bin 0 -> 318 bytes .../8cc028762803174c4de73e07f84b1c432366ed4d | Bin 0 -> 291 bytes .../8cc5b9586be1d1f94a03e6e1db1fc8f43df1eb26 | Bin 0 -> 564 bytes .../8ceb24033a752144a71fa8db1c97dee791fa14e2 | Bin 0 -> 144 bytes .../8d261ff6328130b217f1b5d1103884d361f4af40 | Bin 0 -> 13 bytes .../8d3b91dd78eace1e67ce58a922d50a029daca860 | Bin 0 -> 195 bytes .../8d51b84fa9930481096ead7d95fb80466a21b741 | Bin 0 -> 236 bytes .../8d5a9f73f0562196c85782b610be5c16252f62a3 | Bin 0 -> 562 bytes .../8d6aaae21fbc52c45145be232a8ef29fa7907d31 | Bin 0 -> 1921 bytes .../8d9decb5430c7d7c081431e118c390cb3b14fcff | Bin 0 -> 656 bytes .../8da4eaf505edf2c2dae36f4c7a58e88c376cc334 | Bin 0 -> 1033 bytes .../8dae8e93f714cef5c7fc85c297708a4b7ab5aedd | Bin 0 -> 128 bytes .../8dc5726ed785a2302c6058637e1dd8b470c83463 | Bin 0 -> 416 bytes .../8e3238396f52f56b769e8dec792f920457dd47b5 | Bin 0 -> 194 bytes .../8e434bef3490ee99911db1064be475b0a8142629 | Bin 0 -> 128 bytes .../8e46d05a2ba08720870b741f70006b7819234be8 | Bin 0 -> 385 bytes .../8e70607cce018bf12667b98431669503424d7205 | Bin 0 -> 480 bytes .../8e7c0ec7cf8049be6b73a613287aa5a5a161cbc8 | Bin 0 -> 4634 bytes .../8eb391a9badc732390207f1ce5daa7da868c4caa | Bin 0 -> 426 bytes .../8ed1473b918863761680883d4b44c1fb88d073ad | Bin 0 -> 236 bytes .../8edb51a170abba42b957cde624b6fb538277f040 | Bin 0 -> 4985 bytes .../8efca387d799a34fcd2b7eb65ee68c9254abebd0 | Bin 0 -> 16559 bytes .../8f06932d81baaeba819b955091dd522c436c15bf | Bin 0 -> 8499 bytes .../8f16abdc4aa21aa6d0e43644c26a9151432c4c26 | Bin 0 -> 112 bytes .../8f218f89e41132b78c80d727c29bb347c7cac92a | Bin 0 -> 377 bytes .../8f3f396cbe90f90595c80f52983ff8661b7829d3 | Bin 0 -> 196 bytes .../8f40fad84d869ab0622e0143fb0a9300fb2b1e3b | Bin 0 -> 330 bytes .../8f43332cb2411d5fcd44531f88fb8d9a4c1b2767 | Bin 0 -> 265 bytes .../8f5e9f2e641a91d64814cdee93efae2cf3bd3708 | Bin 0 -> 8019 bytes .../8f7870993d5d4f455db06d9239c3cfe3bebde2b8 | Bin 0 -> 437 bytes .../8f878c9861011cbc0d15f9864b0d8106824c45c3 | Bin 0 -> 1521 bytes .../8fa4b2b17ec369247f44251d6b481612dac91852 | Bin 0 -> 6218 bytes .../8fa6ca31835c5d11356b61dc1f51c6529930d9a9 | Bin 0 -> 609 bytes .../8fdd75546449bedc2a421c57b6dc5ee3ee6a4428 | Bin 0 -> 102 bytes .../8fe11b28cdce1cff3b1f5328993da6b19e0745ac | Bin 0 -> 408 bytes .../8ff6dbcf3c271b4ca1184640c51b71bdc19f4a04 | Bin 0 -> 376 bytes .../900f59330201f1c830766a247b206ad102d7475b | Bin 0 -> 3065 bytes .../9026b3ee9638f5da38a2118c6cbd89b782eadb1f | Bin 0 -> 304 bytes .../904c9519b88289a960d8b2a1c1b13e9ff1befc83 | Bin 0 -> 468 bytes .../9092d25f44102b3c7c67ec7454a7aef95813f2c0 | Bin 0 -> 376 bytes .../909d9bebd033c387a748d6993149656891c30459 | Bin 0 -> 448 bytes .../90a437bb90d90c19ae8854c30c2534517b59e383 | Bin 0 -> 1962 bytes .../90d27172c4d30c1a7cd7859171c1a33a5d540aaf | Bin 0 -> 195 bytes .../90d590599636d9219b2073c1bfc17d755ae80e3d | Bin 0 -> 376 bytes .../90fc85def964de1129553d424411cd5b18883c8f | Bin 0 -> 102 bytes .../911769594972d67a6faec246b2fd627130b1fd7d | Bin 0 -> 448 bytes .../911db10a7e66363e93bfc929d5b03ddead9c7eba | Bin 0 -> 8019 bytes .../911e4de97ce9d819d86fa96330953fbd7e977a2f | Bin 0 -> 912 bytes .../911fdc0ecfaad129612522101123bc179660cf61 | Bin 0 -> 420 bytes .../9128998e6ea35bc3e0e08c8590d2d3f9265497ac | Bin 0 -> 23 bytes .../913979927477ae1e019d0202551df4635a3ae17a | Bin 0 -> 112 bytes .../9150b19d1db77d66a54f4e62f7e9103872029cf7 | Bin 0 -> 560 bytes .../91683c60f8c75edbb45db509e8038b2548e3df29 | Bin 0 -> 7663 bytes .../916ed6493e90b92154196a3e1fcce34b50b1f3ac | Bin 0 -> 352 bytes .../919a60130e8c0eac23556f1d4de6cf017d383d42 | Bin 0 -> 8309 bytes .../91c7867f1442e4f7842070e297d517aa94f9434f | Bin 0 -> 173 bytes .../91cb21aea76dcaebce0e9b472ae498d2aae2d3e2 | Bin 0 -> 64 bytes .../91dd6c5ccf109a48709314782a954469fcafaf79 | Bin 0 -> 654 bytes .../921be12cebfca6fdf1f17b5dc82c08933ca5fa93 | Bin 0 -> 173 bytes .../9227d557e90ec20511697c9aa16a03ff47ad4853 | Bin 0 -> 163 bytes .../9242db1f5e8d077bd49ae43b77dd9fc12098ab8b | Bin 0 -> 13831 bytes .../924391657a05ba1444bbfc7b68ef489a52ad661d | Bin 0 -> 488 bytes .../924cfe3a71abc702e7d011420acf71dc87ea8b92 | Bin 0 -> 108 bytes .../9261d9efc320f98807a61b08008a6838b4d57ae5 | Bin 0 -> 64 bytes .../928b3f3f86886f729d71d1e485c89f1e5241ff4f | Bin 0 -> 195 bytes .../929c75f44f82de5a93b54b01672986c93df32b91 | Bin 0 -> 408 bytes .../92d273e0ffd2e84492dec32a4fa8c1addb06ff6f | Bin 0 -> 744 bytes .../92e0b1d42c19323a4c66c695217a9ab91b70e08c | Bin 0 -> 395 bytes .../930e3777c326bc2769c64147d7fbecdf092c0a13 | Bin 0 -> 308 bytes .../934deb74c62f452fc327d325970778c50f1e3e59 | Bin 0 -> 381 bytes .../9368ba7ee87238c51f65a85a74df4c22a9b50896 | Bin 0 -> 61 bytes .../938ae46368f21742cd2df76bb5cc9bee5dd3ead3 | Bin 0 -> 128 bytes .../93b60a2e0a6d7cbc68c8c8c9697aa92f8c6556ab | Bin 0 -> 8368 bytes .../93c976dfe11b0a9d1f6a1a587b1212dcd3c6f213 | Bin 0 -> 448 bytes .../93e5defa78f3f8623aa56977f072a436a99b7276 | Bin 0 -> 105 bytes .../93ea70b22778a58e8d0dc081af17d702e015d464 | Bin 0 -> 149 bytes .../93efe84b8fae4da5cfee52c16785d408b146d5c9 | Bin 0 -> 29 bytes .../9420dd91fd6d61504d7839a38bfe3f05de0d5d89 | Bin 0 -> 72 bytes .../94254b4474c9b82a2811d68cd090ab2cb1875e28 | Bin 0 -> 9957 bytes .../943168497cc9a11a06ee678b756860e790a88496 | Bin 0 -> 312 bytes .../943550e8d8ec7cb678a55a7ec5e4e5966105300d | Bin 0 -> 199 bytes .../943d29d28b6d45dedaa45d3f4b0b0353470e8ecb | Bin 0 -> 164 bytes .../946ee96590da5f0af4c4f128936fedc511e980d0 | Bin 0 -> 693 bytes .../94772a88f7d486c3c8e5adfba6e685ce8bf8909d | Bin 0 -> 6677 bytes .../948983539bc6ace0b105ba70a73c42f3cf443e83 | Bin 0 -> 116 bytes .../94a60b4c54539e619577825bbb9adc5e5779d150 | Bin 0 -> 1424 bytes .../94b3d9bed2f9dfa635c80adaf9bc8af1f0ddde0a | Bin 0 -> 195 bytes .../94c0493271ea3a60f45e4d0fde698de4d2cac2d9 | Bin 0 -> 2578 bytes .../94c512318044b3cbc2a4aef946ea2f71c279a209 | Bin 0 -> 568 bytes .../94ccc0bcda713b03a8f3cfc7d51224363b3772f8 | Bin 0 -> 676 bytes .../94e0c9b72aaf4a24fc1ac36b03e190c9d795f215 | Bin 0 -> 103 bytes .../94e33cc171d1cf39205f0e301746775f7be9d30b | Bin 0 -> 128 bytes .../94f1418db6abf7189d2f9fe3398e05663708ae95 | Bin 0 -> 104 bytes .../9504b19d7e99f8be2fa167e5025473d2b2a171a7 | Bin 0 -> 1985 bytes .../951043eaa39ea5fcf06e6260ff99009f075e86ee | Bin 0 -> 8019 bytes .../955a70d7b4f615ad6c2151d2209e7e3349ddaf42 | Bin 0 -> 640 bytes .../95c2cd0a53df976d26ab2d9a94a781c89ec09e0f | Bin 0 -> 8554 bytes .../9628942bb7894835911fe743007fd984f01af88f | Bin 0 -> 175 bytes .../9640009d8ec8135602b038a2a2baddb9ea1637b3 | Bin 0 -> 337 bytes .../9645f1405d4deb40cbc8bd5651cf638d1dff691e | Bin 0 -> 264 bytes .../96538bf453870218a55c0023ec8316e603211b1e | Bin 0 -> 5212 bytes .../968608baf60ff00626562a75eb070576270c3bbe | Bin 0 -> 512 bytes .../96aeb2475e83ba208a22be1257d6328f67625806 | Bin 0 -> 744 bytes .../96b27c4d4412262d027dafd5dab867fc2259ffcb | Bin 0 -> 253 bytes .../96c740cb445cb8e310d379fc5534899d33d911ee | Bin 0 -> 165 bytes .../96d9636fcac427f4648b683d3328e019f7e98130 | Bin 0 -> 8368 bytes .../96fefe64542695f17adc10149520321d8787843a | Bin 0 -> 1448 bytes .../970d9410b445cc363250c57b24153b5757b73353 | Bin 0 -> 128 bytes .../9718224bf8fb1b17c08672064ffe69b9eff28a68 | Bin 0 -> 8278 bytes .../974c3d58469736ec30908cc4bca170bd78fd10dd | Bin 0 -> 312 bytes .../974c555fb1bfa5990dc9725817915b9eb50b16fa | Bin 0 -> 112 bytes .../9751a96303cae5a5e5cd9af6cf3ea546c18bc7b4 | Bin 0 -> 4985 bytes .../97545d8653ef729a76f16a985c0e1c99b5abdbf8 | Bin 0 -> 102 bytes .../975dc79d449862d2df9a45a73a67acf864e49338 | Bin 0 -> 164 bytes .../977dcb570e6c284f2b0bba26c312adbaa8317d59 | Bin 0 -> 1089 bytes .../9785c7cce9c3fd97ea2a7a7e26f635c296af541d | Bin 0 -> 7480 bytes .../97899cfc1e0ca6436c83aecd0b7f56f392f68cf1 | Bin 0 -> 15909 bytes .../97bcb80165965cbe5b4ed036bf26be309c83e9d8 | Bin 0 -> 154 bytes .../97cec3d3e0b844d175d63c8dc9c4e917c6154bd8 | Bin 0 -> 19485 bytes .../97f7b7728209cd96862f410c545e50331eb3e8dd | Bin 0 -> 261 bytes .../97f94a6040614df7dedb55210d6001f95e7ac01c | Bin 0 -> 5065 bytes .../97ff7dd359cc3f77ec175d89ecc30a1ce8712ef0 | Bin 0 -> 8311 bytes .../9819739a38bbfb5c131fb3f03c7c9d1763801b37 | Bin 0 -> 227 bytes .../9829e6ac7dc8461e054ae8dbecf0f5f83655b1e4 | Bin 0 -> 55 bytes .../982c74d65ba184ed73d926af0131f5bd0fb3a1b1 | Bin 0 -> 21 bytes .../9836c7f8a6bb53626563cbf3c9e62e380afa9ba1 | Bin 0 -> 102 bytes .../984a88b60e947ce745a272449f928507a3975f0b | Bin 0 -> 68 bytes .../984cd6f045dc5291dc9ce3612dfcf5a81db9aa5c | Bin 0 -> 241 bytes .../986b2b9927b85c684ef61dbb970f90e8f713d727 | Bin 0 -> 112 bytes .../9882fa2338f72e7961d9ba339fe1962449bef484 | Bin 0 -> 722 bytes .../9892f0a7a7c67f69030ef8f5a127d24709df5c23 | Bin 0 -> 37 bytes .../98c0d2537f157fbd14558128f132e9004bdba342 | Bin 0 -> 20 bytes .../98cb6ccd979e958444e890febb949927fc05e83e | Bin 0 -> 176 bytes .../98cc3ef6bee271fbda52f1bb87b71db5854a72c3 | Bin 0 -> 236 bytes .../990d38794f5200e527b080bb00969f2563464b70 | Bin 0 -> 1918 bytes .../99142891564372a5df2b350a4739b48d9e5b2410 | Bin 0 -> 104 bytes .../993e603ed98f6d9dfbea3e3eacfddb9c025d8dcc | Bin 0 -> 268 bytes .../998fd87cea37055e1d2e0648be9a52f65c94ba96 | Bin 0 -> 260 bytes .../9995574ba17377235115f8277b1b18174c0872e1 | Bin 0 -> 318 bytes .../999f6871faf2bd5e98ebf4fee399c23f101f2cfb | Bin 0 -> 772 bytes .../99a84ad620172518cf4bcd46e0a27b19b3e06034 | Bin 0 -> 952 bytes .../99ae03d785473cfc9ebb3fe5c562b1e0495a48ec | Bin 0 -> 208 bytes .../99ca367b2ca260d66bf16f4ae3306acf5a7e5b53 | Bin 0 -> 6314 bytes .../9a106ac82bc059e5f591dcd6dc60c4e9688d3f4d | Bin 0 -> 173 bytes .../9a396fd0ce7e948e49041313441f82c99d54e369 | Bin 0 -> 64 bytes .../9a44db2346501475ef5efe786e33584fa2f1f0f1 | Bin 0 -> 510 bytes .../9a57c9feb721dcc135cc755ac5efa1887d732767 | Bin 0 -> 196 bytes .../9a63bdace5fecda78df7d1add25956fd7a7099cc | Bin 0 -> 102 bytes .../9a6a2549c3b1beaa685f7b92c41824eacad50fb3 | Bin 0 -> 483 bytes .../9a768157871bda9badc877d26caed4df26fe6bc6 | Bin 0 -> 8474 bytes .../9a785aa2e18f8a3cb4be5b12d445b2a9ea2977d5 | Bin 0 -> 6 bytes .../9a7e3fed7a5a81aa72303db616c2c07c75b4fbf6 | Bin 0 -> 174 bytes .../9a8a2f6e9fcbd2584fa1ea28ded77ee41a7fc41c | Bin 0 -> 129 bytes .../9ab992ec92e6aa900bbf607ae81671687ea14cee | Bin 0 -> 557 bytes .../9ab9d13e7f99c64d5bfc823a10e4b4dc15d7b89a | Bin 0 -> 376 bytes .../9ac3a4307e8953804e18c2eeca68fa7effb1fa53 | Bin 0 -> 408 bytes .../9b1a33111d6830bb3139fdc34c9ff7017bf11928 | Bin 0 -> 644 bytes .../9b31eefd6ddba5206f8ec8a5189180fc8811cacd | Bin 0 -> 504 bytes .../9b715cd083bb83d4448f938125b71abe45d45228 | Bin 0 -> 6211 bytes .../9b7bea983050ccd7534bb5a049222e1eede08c5a | Bin 0 -> 7280 bytes .../9b89788e47befb73d63e9713e05efbc44a7ade66 | Bin 0 -> 208 bytes .../9b92582a690827f22c393b1b527338aa44a8eb90 | Bin 0 -> 256 bytes .../9babf2eca3ab73eb519e50a58ac73a137b9a0249 | Bin 0 -> 14071 bytes .../9bad7bbb254b736fbec4996e01e38fc736bd8e67 | Bin 0 -> 30 bytes .../9bc9664fa2d31211176afe4130a0217d2454ce0c | Bin 0 -> 128 bytes .../9bdde8816b426d59115be8822abbcdf8d3f99c93 | Bin 0 -> 102 bytes .../9c0b49e16e3f92a678a17c827219663e2393db76 | Bin 0 -> 102 bytes .../9c25200aa49c250e4c62f088de9337ccefcb1a0c | Bin 0 -> 102 bytes .../9c5496bbcb08e7076cdf0be1326db30f8930b514 | Bin 0 -> 236 bytes .../9c58bb1f603c5168e0eaf83ff1d8faeaf0149840 | Bin 0 -> 233 bytes .../9c67037cad68df8568391a69048a5f5309baff2d | Bin 0 -> 325 bytes .../9c7faae0e7dc09742095da3fb77ec340d41f912e | Bin 0 -> 55 bytes .../9ca045d7751af9b083b6078641d6a84a43a458d8 | Bin 0 -> 533 bytes .../9ca8ae46c4da07ce94779d1d0aa676e8344e572f | Bin 0 -> 26 bytes .../9cc769cad6656a5f95ea9e3f1c305078ec17c0fe | Bin 0 -> 128 bytes .../9cdc54dc300a1d0ad572b8057762ac8916a6a3fd | Bin 0 -> 9422 bytes .../9d128967ee2ffd01ef19a0b37b2453309d61becc | Bin 0 -> 102 bytes .../9d45a9bb07f353965d8852e05bdfdbbf7ba219a0 | Bin 0 -> 12717 bytes .../9d51ba23973bccbefdd58a6b3c711afd02f82e4a | Bin 0 -> 425 bytes .../9d5fa7dafb40b670137511821954be9f7d0d5c97 | Bin 0 -> 86 bytes .../9d8478d68461a5318ea8fe9c1cc4cec27291398d | Bin 0 -> 178 bytes .../9da88658e956b866e0a89f7a9993745aa514fb96 | Bin 0 -> 492 bytes .../9dc24e3c86aa47487cc90033030fcf24229583d5 | Bin 0 -> 2996 bytes .../9dc77945f5f3f946366249f4065c4c48f1ca440f | Bin 0 -> 13420 bytes .../9dce8e8069c6a25a894b2203179c6f396de264ac | Bin 0 -> 135 bytes .../9dfa9cfb862e80554ec754e18437bf6b2e4705ac | Bin 0 -> 668 bytes .../9dff98fab7f9e42caf72b48f3786ced3b2dec714 | Bin 0 -> 128 bytes .../9e013e36fd778fa65ebab8dcf23843abe7ad7266 | Bin 0 -> 13668 bytes .../9e0bc1fc914dd422d8f1fe06abe7b4dfc98695dc | Bin 0 -> 259 bytes .../9e5b02285324f04c516a87d471fbd110e86ec816 | Bin 0 -> 1730 bytes .../9e5fed224ebf859856c9df6de2c2b51f371b6d61 | Bin 0 -> 102 bytes .../9e746918e3bc28db9af4449960671117bdb7108c | Bin 0 -> 2690 bytes .../9e816a37c2d71764d3739d959c3273f64742dc55 | Bin 0 -> 232 bytes .../9e8670db387d16d7c2bf73512535bc832bdd9e28 | Bin 0 -> 472 bytes .../9ea4cc9ce8503e7dfc30b6e9dee9c2dbd8ece375 | Bin 0 -> 116 bytes .../9ea62085c60751e65d08a2565f2e142e1b85550d | Bin 0 -> 5503 bytes .../9ec5c7bb652515ea78e2426e72f8a07109e4f58f | Bin 0 -> 53 bytes .../9ecbafd51ea2de08fa23905d3a6bc955afd79492 | Bin 0 -> 304 bytes .../9ef49a1a23eeaf8637e5d1d03ef7c138a6aa9042 | Bin 0 -> 1020 bytes .../9ef90b908f79c6dc54fe81945da5f471cdf695ea | Bin 0 -> 448 bytes .../9efc3b85de4accf749a67cacc2d3ef49d69a97d9 | Bin 0 -> 505 bytes .../9f18ccf81b9c5462b41741b45da7f52a572577ce | Bin 0 -> 1152 bytes .../9f8ab89a177e432e8f16ba4975ef5d3cc537fb8f | Bin 0 -> 490 bytes .../9fb3dfac1cbc405d517dd2ef40e4767db21534c8 | Bin 0 -> 153 bytes .../9fbad2794cac43a526e771577f5bd84614892440 | Bin 0 -> 740 bytes .../9fc2ece8a6a5d81ec704410ce93b94123249b58d | Bin 0 -> 1124 bytes .../a00a545c6c696793e087207a9e5a006994e54c49 | Bin 0 -> 236 bytes .../a00de4765aad05322a5fe67772101705123b5bd8 | Bin 0 -> 4277 bytes .../a03415fae1196dec2be157fd92cc1a88ac8b0d36 | Bin 0 -> 318 bytes .../a050c780e6ed1e39139bb51456399ab3a16065a8 | Bin 0 -> 232 bytes .../a07b7fb86b1f9815188eb2c2e19cfbba1d30e7c1 | Bin 0 -> 135 bytes .../a099a6fd8b132e5b5ba0ce8f83364f6352db5c30 | Bin 0 -> 8318 bytes .../a0aa0d0cea8bcb80e38719aa99da3ac9b14781b3 | Bin 0 -> 512 bytes .../a0ad8644a51f0818108bf885f52ee326f7acc17f | Bin 0 -> 755 bytes .../a0d9e783d46acfd7452db7d870ac902f5b40d0c4 | Bin 0 -> 236 bytes .../a100675e8eb0abc5876c3657788aa278989356a3 | Bin 0 -> 347 bytes .../a120fc6eec359afc3735105eb60d58a39d62afd6 | Bin 0 -> 165 bytes .../a140dfc6062c603a0f03ae9d193e529a3d4d1628 | Bin 0 -> 444 bytes .../a1595f7332fdbb355bc7be73f92b224c8d59e1b7 | Bin 0 -> 1424 bytes .../a165e3b9dba2bcbdf3226e77f8afe53509e95955 | Bin 0 -> 25 bytes .../a17589404724b25c5c57e1384ff10edd6fc5090e | Bin 0 -> 128 bytes .../a17b094396feac8f65717724bbb6d6e2519d01af | Bin 0 -> 1722 bytes .../a1a6fbd7d7940ad43632bff5478f39b94de97ce2 | Bin 0 -> 172 bytes .../a1a8cf2f2d3fa165a353ad527c479425dcab3183 | Bin 0 -> 497 bytes .../a1c284771ad5df5000f70f7e1f1faf03e8e6caa0 | Bin 0 -> 884 bytes .../a1c3f10a24f17b9644c12d5cc7b3019fef1158f3 | Bin 0 -> 411 bytes .../a1dcf87018649ae77f787ff39953a0ce0a89480c | Bin 0 -> 36 bytes .../a1e0bd9476395ad99a096ccaa9e111e479081e96 | Bin 0 -> 393 bytes .../a1e12a6767b59623e0510e770eca9defb497b2ea | Bin 0 -> 64 bytes .../a22da2b75abdb1535f91a53d23ad6b8e611d8bfd | Bin 0 -> 376 bytes .../a277381ad692ee73d5c4f8336a31ab84f6ed1e8b | Bin 0 -> 396 bytes .../a28352d9beff41c6b8c136e649e5a798b53ca132 | Bin 0 -> 584 bytes .../a2859577ed1414250fd8f4005a1f27268b9597e5 | Bin 0 -> 112 bytes .../a2a97a4622e4b7f65616117e632cd3b6a077025b | Bin 0 -> 492 bytes .../a2c008095074eba43c1ffed3d7b49d67a429a5dc | Bin 0 -> 392 bytes .../a2e77bdb9742a46bd927dd61d492a8caf28bf08b | Bin 0 -> 1033 bytes .../a2f6f5a5ba921de8419899dd2e1ed079b41f1f02 | Bin 0 -> 512 bytes .../a31a2814717e9cb37abd85be7ba2132840ca9103 | Bin 0 -> 1408 bytes .../a326c84a422bf5d5cc73eadfaea29f41765e1809 | Bin 0 -> 504 bytes .../a32ca079a181d54aa58f09a61315efaf2ba80877 | Bin 0 -> 30 bytes .../a32e5442a65f84552abdf15666ff36a8d7a8a735 | Bin 0 -> 2578 bytes .../a353b86715b9d0250aec7afca0fac0cc1733b950 | Bin 0 -> 114 bytes .../a35841b58a668bdbb3d82855c0da5b6a20ec6325 | Bin 0 -> 64 bytes .../a35f29c58810f51d3c0c5a607d1a184023081967 | Bin 0 -> 122 bytes .../a379bdf247ed5fefe79936447094d3e3f4642196 | Bin 0 -> 327 bytes .../a37b47d86a3e57589b54df21027238ae05b8d03e | Bin 0 -> 269 bytes .../a3992dbf968b6d749a1c0b65547b0414eebd78de | Bin 0 -> 310 bytes .../a39c6c1e91077c405e5ebd156ba2f223f4e43d74 | Bin 0 -> 336 bytes .../a3ace6fb21d5f84727ff82dc09ed1f5339bc8eb1 | Bin 0 -> 444 bytes .../a3b3cafb49b045974cb2fb66e6047bc6be38e3fa | Bin 0 -> 336 bytes .../a3e3d3c7bdfa8ea2f874d5850a1d05029fff8a22 | Bin 0 -> 8970 bytes .../a3fc911c288e24e29146b368e3178c43f90e5f65 | Bin 0 -> 236 bytes .../a401b18a382d52b2e5915942691c2ee01c36c42e | Bin 0 -> 98 bytes .../a4143343fab72e53619d0ce0033d3fb70ddb8f99 | Bin 0 -> 116 bytes .../a4206743886a1824a113410ff1c22d589b312c7b | Bin 0 -> 111 bytes .../a425d882aa149920e53f7b0fdd53019aaac69256 | Bin 0 -> 154 bytes .../a42d1ed3e67d5d9eb689fa6eb2c3c02cf163e78d | Bin 0 -> 236 bytes .../a43b2f67459273f34db5ea28b26644050ddc7d89 | Bin 0 -> 416 bytes .../a46c36163372b84796218d16675eb82bb5db7502 | Bin 0 -> 104 bytes .../a47b48a519b08ac370a3a4cc8261b209a517ae7b | Bin 0 -> 102 bytes .../a49542e61cb314c3e98a0203fec39c8e7dd232f3 | Bin 0 -> 261 bytes .../a4f4ca33f3a1781428cdfd11a9a6dbcf7f8d6f09 | Bin 0 -> 128 bytes .../a501acfb1704032c3699a48b86c70052d2fe5b0a | Bin 0 -> 3925 bytes .../a513ae8b15ef0acac9e2de1e365b8a26ba804a48 | Bin 0 -> 740 bytes .../a5159b8fc6f6b0e4d231c9766548aea477c1f5cb | Bin 0 -> 337 bytes .../a545978201e8b844126f3a66ca5024370c6d4b73 | Bin 0 -> 128 bytes .../a548748f3f86b3f478c93e475e03fa5c4f864302 | Bin 0 -> 53 bytes .../a55f31b70a594f49aa7157b50521f626ba36d426 | Bin 0 -> 168 bytes .../a5892b869db9586c85539b9a42293cbcc4a956b4 | Bin 0 -> 128 bytes .../a59808abbcb5bcb58fa0300c7615853711b66b01 | Bin 0 -> 299 bytes .../a5e32b326e17d77eb5e552539704480714da85bc | Bin 0 -> 102 bytes .../a5e6f5502ade86482e5583bc4eae1c99b0bc46df | Bin 0 -> 4035 bytes .../a61acf97aa093ffecd7ef28556dfc41f9d982b36 | Bin 0 -> 18 bytes .../a62561a30e2190c961bdf5f9c08dda71813ba3f9 | Bin 0 -> 16934 bytes .../a63241ac68fc6b69227c57152935c86d64f99f78 | Bin 0 -> 652 bytes .../a633f7b3152fae3de14a9f731bcd702af6744f2b | Bin 0 -> 1448 bytes .../a65f0a06a82ab82e29ca19d0992dd8341e9f8fcd | Bin 0 -> 384 bytes .../a6686d010322cb652cd1ac94e41aa2222cdd7ccb | Bin 0 -> 353 bytes .../a66c05ee3504e6e63e568a79114423184ab23da9 | Bin 0 -> 7670 bytes .../a680148e2557805240eb5f5a2b98e9c9aa624034 | Bin 0 -> 195 bytes .../a6a819ae3c63172f7f66ab7ab0260c8cf858264b | Bin 0 -> 11560 bytes .../a6b2c83f758095276b49cd7f32bac715b6812f2d | Bin 0 -> 8977 bytes .../a6d90753b8491cee22de010c2bccbc1d5915d5e7 | Bin 0 -> 369 bytes .../a6db0d1e84dd96c7329fb618f70f516f60decddf | Bin 0 -> 235 bytes .../a6de0c389c43e61e2fbdff94e5c6cfcc29c2db47 | Bin 0 -> 102 bytes .../a6e4abf75d8af9ec054936c97b8802a195841539 | Bin 0 -> 12203 bytes .../a6f78b2657fdc06c0dd573eb3d41253e99dcafea | Bin 0 -> 181 bytes .../a70183f22f62bced0857f5a81c2ab9116a3054a1 | Bin 0 -> 372 bytes .../a77932944023505f42225c35d3c18477e2278c46 | Bin 0 -> 496 bytes .../a792d3ecfa028c20db3032c5135c4d503c661866 | Bin 0 -> 195 bytes .../a7ae87f894abd056c46826214d284f1f37c39254 | Bin 0 -> 376 bytes .../a7bef673fe1e2b0c8d92586832c00c7b18121e02 | Bin 0 -> 15327 bytes .../a7cd6c34aa77be26ae0ea33b274cdaa7c4368c70 | Bin 0 -> 300 bytes .../a7e74737e5dbe82fa78426a5248115e2dd8c1781 | Bin 0 -> 210 bytes .../a815ced8a92f47d900af591c9918c1469a756e89 | Bin 0 -> 12 bytes .../a81800e3d8708c40a1cd7c79f3bd292aaa63da90 | Bin 0 -> 195 bytes .../a8278db28128a9c7c610339a23b841cec6a8b5d4 | Bin 0 -> 236 bytes .../a84a7c540e0c6c5041cfc29ac1bcea1091a964e8 | Bin 0 -> 19205 bytes .../a86f9f294d2472ffeca13665ab14f81c7db56745 | Bin 0 -> 1033 bytes .../a87fe23182c394f394f72f26f2d10b48e3765aa4 | Bin 0 -> 540 bytes .../a88814ae340e5dab14a731b112bc2c20cf72fbbf | Bin 0 -> 8084 bytes .../a8c664ef97ce1b25c8bbae6c01effce6ffedbda8 | Bin 0 -> 122 bytes .../a8face71e02c9bc8a42b4313fa17e29a194bb5f6 | Bin 0 -> 244 bytes .../a90fe9363ef5507ce70ac8b5ff05a96fb27792be | Bin 0 -> 636 bytes .../a93e7bbf71fd1acf867035b0e53fe9fafc0a20a7 | Bin 0 -> 174 bytes .../a93ecc4c2996f6646ef335be49bdfc92663e9a70 | Bin 0 -> 12 bytes .../a940734121ed0bfa36b6575059fb74b0d645fa35 | Bin 0 -> 128 bytes .../a9487f83fb3b445d1794c7682dba6fd34295c17a | Bin 0 -> 445 bytes .../a97364f82bc36612d26873c08eab193c54999a26 | Bin 0 -> 15218 bytes .../a982f4ef59b98bbee2ba0565c1619a13d8cbf0f3 | Bin 0 -> 490 bytes .../a98408978cbba62175fa86613c9bcd742aa6287e | Bin 0 -> 102 bytes .../a996a3b6a80d37a1e18af8ae9acad264d2d447ee | Bin 0 -> 104 bytes .../a99ec6e68d563c331b33a5294f32c49a7c2656b0 | Bin 0 -> 154 bytes .../a9a040bd12d8b8e19565601ea6c399d5a26ef3ed | Bin 0 -> 3348 bytes .../a9b4e66ff5195c2ea7a7b98420e3c2382114905b | Bin 0 -> 412 bytes .../a9d3c9cd54b1a392b21ea14904d9a318f74636b7 | 1 + .../a9d3ed5d68d76bd21c77b32565ebafa32c96d424 | Bin 0 -> 112 bytes .../a9e93c8903f00a901ca83c377bc2c6792d33841c | Bin 0 -> 512 bytes .../a9fb6755a189883d6ae988ea2288a549591dcd39 | Bin 0 -> 428 bytes .../aa4ae2efdaecefc257beeea5cab09297e4e48481 | Bin 0 -> 516 bytes .../aa51f3d9eac595db558a49be1f44642300d130bd | Bin 0 -> 41 bytes .../aa63ee36ddc806dc1d9d1fd437c0b1de290b7ebc | Bin 0 -> 369 bytes .../aa780100def3dbef044fb0045e7b432b02e55dcc | Bin 0 -> 5065 bytes .../aa7fd1e7b2ec0561dd35dcaae522744a431d8767 | Bin 0 -> 436 bytes .../aa8e710cd1cb0aa879f8c675d750f222073de39f | Bin 0 -> 102 bytes .../aaa25dcb12400dfe54ebe8416af2ee90362f62ec | Bin 0 -> 15509 bytes .../aaaccac0ab90d121888be611fd2719abaca7a30f | Bin 0 -> 102 bytes .../aac0c14afb00c82760ee18fe741081cccc43b45c | Bin 0 -> 4348 bytes .../aac290445e4c54457eb6918c84e6e9ec76445397 | Bin 0 -> 380 bytes .../aac295a94f84b24953540e3a27de3ab72ede590b | Bin 0 -> 363 bytes .../aae13315d843a01ac7c33627765a0d7d9ffb17fc | Bin 0 -> 128 bytes .../ab14ec89d966dc4196109a3290ef897cd9d1dcac | Bin 0 -> 480 bytes .../ab1790572b1e5ddbf3597dc7703e78cbd138edf2 | Bin 0 -> 104 bytes .../ab18319a890a04a2242311ceece01b290a46270f | Bin 0 -> 79 bytes .../ab3f96917e6af9bb7372c72581a1647d549d888e | Bin 0 -> 227 bytes .../ab50c0e134dc1fb2b294d82147f1a89b0060ef07 | Bin 0 -> 377 bytes .../ab61518433d0167b4f63f381484485dc7c29e459 | Bin 0 -> 213 bytes .../ab82ec2e40e36f301aad78c569a0fe2e97c24b95 | Bin 0 -> 2063 bytes .../ab872d0752b5568e2f72069bea438ecf770d5db0 | Bin 0 -> 13 bytes .../ab96adf465e94f3fa47686ec76eea7794e20613e | Bin 0 -> 376 bytes .../ab9943aa153c7ac4a13a5355df766215688cee9b | Bin 0 -> 195 bytes .../abae6d983dece89d934a3457f6b044534a67bf93 | Bin 0 -> 324 bytes .../abb591addde3c8e0316916f1bb949983cf328f93 | Bin 0 -> 512 bytes .../abe309d908e5f62a8fe01e0220ca16d77a374520 | Bin 0 -> 8377 bytes .../abe9ce690dbf046d23efedd287a4787814ee2e9c | Bin 0 -> 104 bytes .../ac32e02a2d980978ef740e7f8e361979e5e14bf4 | Bin 0 -> 72 bytes .../ac47860d422f9ca5198ffa7405ecdb0668be7905 | Bin 0 -> 348 bytes .../ac48685e1c5e4ee628e28ba14e7debb73631bf60 | Bin 0 -> 104 bytes .../ac62e8490ff76ae2447f731e5f247dc8673c349b | Bin 0 -> 142 bytes .../ac779be195785f1e3ef5e76f45eb9da5b3429816 | Bin 0 -> 312 bytes .../aca178ab752c463d851a0c4e39aabc1aeff2cef2 | Bin 0 -> 512 bytes .../acab0b518e17a4bdcb9ab10ac7b324e195b5140d | Bin 0 -> 6 bytes .../acccd7db185d46ecb52ef47fa3411f494187f4da | Bin 0 -> 102 bytes .../acdd4c322c8732fb4aac6f67b7714c8e4318722d | Bin 0 -> 63 bytes .../ace68c94b15fbd6a968ad8ece87cce373c2bc537 | Bin 0 -> 375 bytes .../acec003975a94d2d54f5d108dcf766756802cbab | Bin 0 -> 1722 bytes .../ad1ecbf3b71de9dcb00fffdbb2064fc04fa3c083 | Bin 0 -> 8420 bytes .../ad3d80458b3b1f35d8f96e34d597c79d2dc6956e | Bin 0 -> 195 bytes .../ad411ef0987247a95b6dbe361ae447ced6493dee | Bin 0 -> 101 bytes .../ad50ee23ee13c821dcd544092655c303a8a9e93e | Bin 0 -> 51 bytes .../ad7b5b75dff4dea532880964ecec10d33ac4181e | Bin 0 -> 584 bytes .../ad94d6c55d9a4da6c39a6673a5cca206673ff3c8 | Bin 0 -> 9027 bytes .../ad9bd1bc72f9c9b506ccd44c2e44c561c26f2fbf | Bin 0 -> 1416 bytes .../ada547e56e96e8095146889047d3c624faec0007 | Bin 0 -> 1262 bytes .../adc0306a1764def67d3c20925130e701adf9a152 | Bin 0 -> 437 bytes .../adcf37e2d5310534e6e9924320a91bfb359df594 | Bin 0 -> 128 bytes .../add1c053e2076c680f90ab0ac887ba89ce06ce26 | Bin 0 -> 128 bytes .../add41ef0ea85deb19107df2731f7b869f4eead1b | Bin 0 -> 912 bytes .../adea2877f37087ee9f109062289c641df259ee7e | Bin 0 -> 128 bytes .../adfbc3aa7e198ee661f7f914b50996d106292541 | Bin 0 -> 448 bytes .../ae03dce7a9e49b23bae2ba9adbe93ed91f8e7184 | Bin 0 -> 64 bytes .../ae17362454cd9acc166e39d4b9e0862fdb2313f8 | Bin 0 -> 120 bytes .../ae27d552dc7ae3a4021456150e25638652ddd1c5 | Bin 0 -> 19484 bytes .../ae32a2abe89e212f153d49a2086cd2cfdfb0d121 | Bin 0 -> 15400 bytes .../ae3c6fb5ce32df2f2fa20aedb074aaedf30bda9e | Bin 0 -> 307 bytes .../ae47e08ed4cdedc84eb37758d23ad19943fd7f96 | Bin 0 -> 52 bytes .../ae5bb9a0c97c7c33a63956e64d23b5dcd59776de | Bin 0 -> 9962 bytes .../ae7a80d0a6837fff7ed49b5c911a5a07901ae665 | Bin 0 -> 121 bytes .../ae806bdcd5a6e9104e9344ea81b3ea047b169bae | Bin 0 -> 1094 bytes .../ae9dd5c4a4982e96abceadc8ac3201f26be20922 | Bin 0 -> 102 bytes .../aeacbcfa64dfec326b57ebfe74ead914e60058e7 | Bin 0 -> 168 bytes .../aeb7af4dd85cf3c9743087fdece02444708d5f39 | Bin 0 -> 402 bytes .../aee3a69006f07a9029bd804801bab121fa2bb73d | Bin 0 -> 415 bytes .../af0532d1406218915827c45242a7f85da47e222a | Bin 0 -> 160 bytes .../af401197962840791186fd162b01d674c12cc30b | Bin 0 -> 68 bytes .../af4a1a76e7e60dc9446d11b5ce5eebed5096e850 | Bin 0 -> 25 bytes .../af7f925b6e2deda5c183618885500f19657971e6 | Bin 0 -> 128 bytes .../af8d856a6e0f9878652749758622b8036e2d509a | Bin 0 -> 680 bytes .../aface9b3a7ebe66343d44cb2d0592b6eb39feec6 | Bin 0 -> 584 bytes .../afc03a3a849daad7017494acc365a3185a9155a1 | Bin 0 -> 512 bytes .../afc88c5e221d5890614a9dd52b7eaa777949ddc9 | Bin 0 -> 236 bytes .../afcecb7ead7c878c9e4bd19b80ac90c62e777e8e | Bin 0 -> 832 bytes .../afee3fdea3a479e5d4d430c6ad4ea150a105294d | Bin 0 -> 236 bytes .../affac4bd5224dc3148596f6fe1afdff06ba12a1c | Bin 0 -> 195 bytes .../b0166890f4a76bc573991217a93ad4e6316f9085 | Bin 0 -> 3142 bytes .../b01b0e2a4571391965093fda76cecc7d56adefa9 | Bin 0 -> 10 bytes .../b023a0bc8e71387dfabfe2ae16c38590a940a8ed | Bin 0 -> 668 bytes .../b0249f7e3dda57bd83de3733b3c86a59cdbc2063 | Bin 0 -> 20001 bytes .../b030c2949bd369b9f51b0936541543057e965382 | Bin 0 -> 52 bytes .../b04be387c26df73b5827edf3a16e4d387b87db4a | Bin 0 -> 6938 bytes .../b0e6438be56d83cb7406acc9dd59fbe27ac7773b | Bin 0 -> 741 bytes .../b13935c907c34587bfc945ecd9fd284cf2d556bb | Bin 0 -> 112 bytes .../b19732299669e6654f4dc3f0d90f5e3d75dcb342 | Bin 0 -> 144 bytes .../b1b454fe9c93bf8f96d604c9b49fcf7aa78bf515 | Bin 0 -> 2116 bytes .../b1dc2bffaecfd24d3a41c40b20d58ecc363035cc | 1 + .../b24193a48e5b47fdb2a4c4c1db09337b8703d8d3 | Bin 0 -> 832 bytes .../b268b6682b767f2b06d033cd0832f0c6cba92b96 | Bin 0 -> 318 bytes .../b268e14514089b190ca6f047a48145ae8d0423ef | Bin 0 -> 1814 bytes .../b26d13f0476bbca24a0ab68a9d8019c13d5ea00f | Bin 0 -> 406 bytes .../b283f490fd5dc87d78d722f400b03ec7b39dcd16 | Bin 0 -> 528 bytes .../b29def50215d31b8e7694e86db115bfebe27a405 | Bin 0 -> 336 bytes .../b2bcde2f984015e7303aaae7a061700c0f348c36 | Bin 0 -> 116 bytes .../b2fa5412cac233502cbc85e9ce3d9e1082d367f4 | Bin 0 -> 369 bytes .../b31ffc5223a1f8e87ee1bf6dd80b16b3b4f99fd2 | Bin 0 -> 128 bytes .../b32e8b9bbb0170ee49d829b5f3e80b2f24779036 | Bin 0 -> 238 bytes .../b33371cbe0467536dc214b0e82139ecda2952285 | Bin 0 -> 80 bytes .../b35b8d6c512a3b536792f1103496d51075b0b454 | Bin 0 -> 1338 bytes .../b38cefa0530209c6b1a1ba974f870bb4f457c9fe | Bin 0 -> 660 bytes .../b3943b42e82360fcd539913ee10659b242f49384 | Bin 0 -> 147 bytes .../b4748df45eb2e6a87f98598f2b2e6062d3e33f85 | Bin 0 -> 400 bytes .../b487301840775fed0d284f390f6be54f2e83f7e0 | Bin 0 -> 308 bytes .../b48cb75c1eaf69dffe65faa8e705b7dee46f6f0e | Bin 0 -> 3456 bytes .../b49bb8cadc34de401d373f7acda084fbb52bc2e2 | Bin 0 -> 10377 bytes .../b4aae1a316279955f9b09a8c33fcfc28a2a30ae2 | Bin 0 -> 8367 bytes .../b4cf274f48d50744992f5f77b44f1807a9a61c27 | Bin 0 -> 196 bytes .../b4df86617cbee78e8da460190f05eae0b43a4849 | Bin 0 -> 195 bytes .../b4e4e9229d0f2110ae3c33ffda875a98ec31c076 | Bin 0 -> 376 bytes .../b50a2989afbd91eb8ee198bd33ed54895e1706ec | Bin 0 -> 15279 bytes .../b52bf1e54ba0a769556b70164e0ab19996fe8b3b | Bin 0 -> 232 bytes .../b52e741d618846fce03d1c62e0c5b7da2d1a67aa | Bin 0 -> 30 bytes .../b52f4d6a2be566e673b2c997c7fe386dc11d4691 | Bin 0 -> 8317 bytes .../b53e0c775ad4a259b72f55b7d0884154fc8e14e3 | Bin 0 -> 385 bytes .../b54cf12d224d410eb90db1ae2d5d8441c35ae909 | Bin 0 -> 308 bytes .../b56b9da52189e20b83e8edbe35d85fd7d5b9e920 | Bin 0 -> 130 bytes .../b573c5afbdea6d9e7cc55ae48003076927dca77b | Bin 0 -> 124 bytes .../b57b11d8a392a604fa4528462b3b1e4481b13dfa | Bin 0 -> 376 bytes .../b5957474f55d0c16d34d7c6329185db49f29ce6a | Bin 0 -> 28 bytes .../b5a884db9c6180894cffa924705570f289a8a971 | Bin 0 -> 236 bytes .../b5c183be81573de199c2283098f5ac0ff84fb2b4 | Bin 0 -> 432 bytes .../b5c5159bb5cf19db2999b29bc1b46eb666e9035b | Bin 0 -> 9009 bytes .../b5d2512599dec6d28a857470103be815f9c61de5 | Bin 0 -> 912 bytes .../b5f3b4ff975f7a315e75b04716622a147ee20052 | Bin 0 -> 236 bytes .../b6093b63008a170f122ae15f3105240f49aca418 | Bin 0 -> 117 bytes .../b61275f345b2e6bd913171ca9b8948a14844463c | Bin 0 -> 236 bytes .../b617ee072bee10b7bf760d5ba53a7192a7e5d3c0 | Bin 0 -> 559 bytes .../b6287f61e1e797b8f9a8d575b291ba759620738f | Bin 0 -> 102 bytes .../b62aba4d7d6dbfdd0b996ed77bcc31d7c391b4d4 | Bin 0 -> 112 bytes .../b6472f1f19ed5f8492b3ece920daa1183b55a965 | Bin 0 -> 2620 bytes .../b64f43d7b8fedf8e4cd530bdb26828b9ca4246cd | Bin 0 -> 196 bytes .../b6845375116dc9c33e73584e0ebc0f11f461734c | Bin 0 -> 317 bytes .../b6bc28bd607e5d88730c4f108e2f28472f4b2b3b | Bin 0 -> 378 bytes .../b6d4ed0824aa7e2dedc6eb600d7635f560a9ed15 | Bin 0 -> 498 bytes .../b6e6f92658a5895166063342ce8436d658643b62 | Bin 0 -> 236 bytes .../b6ee88041fec4b55331a55e442a5d5cf772701fd | Bin 0 -> 102 bytes .../b6f1e03e9fbb9aaba644fff314eac64b16274c39 | Bin 0 -> 196 bytes .../b6fbeff5791b8b75536c104417fbe7fc540679a0 | Bin 0 -> 448 bytes .../b70e7adb1082c5611392843e9cb4116d0b1b74c8 | Bin 0 -> 34 bytes .../b739edcc895559d324f49bb3a51ef4b1d4ca5ca9 | Bin 0 -> 420 bytes .../b74007bf21bbc1437010d9bc4fb1af9ff570044b | Bin 0 -> 102 bytes .../b745aae1989758fde2111853a1d8612702d57385 | Bin 0 -> 236 bytes .../b749571501074b8b01d78f7d8bc1e56b30982eed | Bin 0 -> 584 bytes .../b75224cf5e59a97b1d0fa722efa2df0666bb7d9a | Bin 0 -> 34 bytes .../b787fd496a55c020beb76e56369b268f990d895e | Bin 0 -> 488 bytes .../b794455d64219b47eb474dfc1e61b8e8dd68a188 | Bin 0 -> 112 bytes .../b7ac625e10eb4df6014910d9145df26284e29681 | Bin 0 -> 30 bytes .../b7b90610b9c90dd2509b1e964fabcdda57d4670d | Bin 0 -> 428 bytes .../b7bfbc03b6c3cd6155938a75605da85276ea6357 | Bin 0 -> 8309 bytes .../b7eb841e39da3c3cb35eb120ed92622f3e4826ad | Bin 0 -> 26 bytes .../b7ed30354047cf0a0706336f7114224945d74e99 | Bin 0 -> 1722 bytes .../b7fa35ad3ab61ed00d54999b79c490b739f424cd | Bin 0 -> 15373 bytes .../b86c8001d26c9b1f67b3484c59e42d5375dbabc5 | Bin 0 -> 102 bytes .../b884ebc29bb0075d20c328382c47fdaa21fa3d15 | Bin 0 -> 3004 bytes .../b888b92bd6e8fd56af8b868891a1a7799e801881 | Bin 0 -> 24 bytes .../b88fea025d7064cae231f78c91f5657dbb0b0181 | Bin 0 -> 5386 bytes .../b8af536c5768c645aad2a94d483f8281efb2b8a8 | Bin 0 -> 237 bytes .../b8cd72b7f7c8659a9e12fcf078ba4cb25f47decd | Bin 0 -> 13 bytes .../b8da6b6a4f3c9d2e8511ffd0c24d9af88c19acd5 | Bin 0 -> 261 bytes .../b8e6e90b8de91bbcb5941787937ecbf3ab43b6fe | Bin 0 -> 471 bytes .../b8e929e779e0d9e8f2961f24f0549f50c834176a | Bin 0 -> 5888 bytes .../b902b83a0a7d8a7ee0f35b069672889bfc7c5460 | Bin 0 -> 410 bytes .../b90f8f47f6dbf2e1dee5316c4b675f66f1e090fb | Bin 0 -> 112 bytes .../b93a9c3d9dc73be5bd45623105a5efa0aa0264b3 | Bin 0 -> 667 bytes .../b97458bea69c67783a7be3e005139136b702e685 | Bin 0 -> 444 bytes .../b9830142a54ae86672fa70425282427a0ba5704d | Bin 0 -> 259 bytes .../b9aacecc271c0c257737d42eaa5415724cf87bbf | Bin 0 -> 27 bytes .../b9aebbadee313a88fa2ab72e6f335b093c10e010 | Bin 0 -> 8474 bytes .../b9babb73969eb60d82ea248df2a59b380adad527 | Bin 0 -> 369 bytes .../b9c2676c1011c24004bc4ec7efd6f27ee6c6cd71 | Bin 0 -> 3007 bytes .../b9c4cb87d5db4fdd9aeb607eb78aa7b28c4afc5e | Bin 0 -> 496 bytes .../b9d468e50151f003a50dd85528b211067f65ff40 | Bin 0 -> 6212 bytes .../b9d6c6dc31554a1b7b8b601ad365d1a6e7251b95 | Bin 0 -> 15623 bytes .../b9f24c885ac77ad4898230f66fdb7f7e1cad6765 | Bin 0 -> 492 bytes .../b9f2d840d97a704d2ddebea4c269313fa3300bbd | Bin 0 -> 768 bytes .../ba01e779491b31737a7571f1e6be64f4f89fe1b9 | Bin 0 -> 25 bytes .../ba1d6ee2c6b1028471323659658f3bedc43b0445 | Bin 0 -> 197 bytes .../ba2f67c80eaed75e5d70954435d7f3f19f10f174 | Bin 0 -> 8318 bytes .../ba41ab2d06482f8c5ab463522b47343d0f3bdcb4 | Bin 0 -> 185 bytes .../ba4a9f6263c0cb395c81afa9f77476e2a4abfa89 | Bin 0 -> 236 bytes .../ba594ace99ea38210c3bfe7647955c6da64ef8e8 | Bin 0 -> 197 bytes .../ba6262520e29c81851c8ab2be4d72b9d4cea0b47 | Bin 0 -> 196 bytes .../ba69cd473e3682ae727e86bc8b42cd837ce525f6 | Bin 0 -> 913 bytes .../ba6c52c295d613e6fb46607f1a4f8500c6fa3c4f | Bin 0 -> 196 bytes .../ba8a66b5123a0cd4e7925f3d21b4ab9735c55816 | Bin 0 -> 8971 bytes .../baafea5ff0a446a4157ed7425e5f68d72366a800 | Bin 0 -> 440 bytes .../badfba0ef902afc96e60331586b62a668b874f48 | Bin 0 -> 235 bytes .../bb07241ebca2f32026bf64a6daaf4b0e0d8eaa25 | Bin 0 -> 584 bytes .../bb33096cf7dab5ad33db12f5f794de640e868fd7 | Bin 0 -> 378 bytes .../bb44a01aa5c78122ead71bc0b990f32821b76dd4 | Bin 0 -> 31 bytes .../bb6f6820c8624b3bac43ebef53f53608b389071a | Bin 0 -> 438 bytes .../bb70a44112ab1e339d937854077c1c49a50ea6c3 | Bin 0 -> 20001 bytes .../bb8feddff0cdcbc7031771eb1d2a897e599f3327 | Bin 0 -> 102 bytes .../bbb23bacfaa312829a8f9b16aba8beededc155a9 | Bin 0 -> 898 bytes .../bbd53ebb42ed98498f291231b06136c9aa602a74 | Bin 0 -> 704 bytes .../bbea215f19d30bf34c8801492d6967bf7aaf58c5 | Bin 0 -> 112 bytes .../bbf58c1172323a2f815ef0d3ae330c5de7636e39 | Bin 0 -> 251 bytes .../bbfa49b9cf1458093ce9cea0c2672a858db5a5e4 | Bin 0 -> 740 bytes .../bc17e24b2f54669227aa7fb02a0ab75f3a15974e | Bin 0 -> 369 bytes .../bc2af0bd9031789b9be88630972e2f9682d07a03 | Bin 0 -> 376 bytes .../bc3a2d58943d0d0511384eb2896f1bb8b8241df5 | Bin 0 -> 1033 bytes .../bc43517f6b5e9b4fef11e4eb0f4fb181e98213c8 | Bin 0 -> 512 bytes .../bc633603554d92a83f3d0b6d9e0ef0d6c42de4c8 | Bin 0 -> 304 bytes .../bc6df4735f3fb955a7157317c4599fd2a4af2f1f | Bin 0 -> 8019 bytes .../bc6e6f3de35eb93d4e6ecfca1cc4afdad4c9d397 | Bin 0 -> 8311 bytes .../bc7dc24de972eace2b7e5501ada1aca6d1ae3924 | Bin 0 -> 12321 bytes .../bc90ca538ed539531d31de69708017371ab12671 | Bin 0 -> 195 bytes .../bc94a88322ea1b401b555fa6fbcc946874e09e4a | Bin 0 -> 384 bytes .../bc99a104d13c5243fc85c2bdfacca958f263cc92 | Bin 0 -> 104 bytes .../bcdf0e0e08406394eef82b7957044b82562034db | Bin 0 -> 102 bytes .../bce53d716dac420125d87b861f2ef5ab8712a18d | Bin 0 -> 508 bytes .../bce89d6431f64bd6bd689b7c36cc724e72ddfebf | Bin 0 -> 265 bytes .../bceb1ef090a7d7fd0c1ab2ec31662d74374bd19c | Bin 0 -> 2000 bytes .../bd06a0d3dff0830c58651d3469bdd49fb0b36872 | Bin 0 -> 112 bytes .../bd326fcac49a52f2f3206152212654a39ec423d0 | Bin 0 -> 740 bytes .../bd3e351f6a01aee7f7bb1529de44179de0ca13bb | Bin 0 -> 197 bytes .../bd4826bc20a952e9860ad399a0893f44ed79c47c | Bin 0 -> 61 bytes .../bd92178e99b58a85329087b4393ce744efba1868 | Bin 0 -> 3832 bytes .../bd983ec00f3b014a3c3cff3c5f6cdc28570b03b0 | Bin 0 -> 102 bytes .../bda1433a18e3738c74d163d77cdbe09d7fca5ddf | Bin 0 -> 36 bytes .../bda6196cfb4847563586972b3ee504f653e0c86d | Bin 0 -> 4558 bytes .../bdbb169b23441db3b669ad838ce1c2ba738a6efa | Bin 0 -> 112 bytes .../bdbf4d13084737224759063c13c30ef952a72d86 | Bin 0 -> 102 bytes .../bde4ef24fefa20a5bfd8726e22199d848a62a70e | Bin 0 -> 176 bytes .../bde52a6c5b4aadd185de2225bb816a3d7f6e9999 | Bin 0 -> 134 bytes .../be314087111ab4ceaf160f45419f3524c89d4714 | Bin 0 -> 5473 bytes .../be327b3a61dcc18100dd311fd53be0e78091ac27 | Bin 0 -> 112 bytes .../be6b986b282356d38ff5976758bf1676c2eb076f | Bin 0 -> 318 bytes .../be815ea60b7780158f8a9b3e9bc9de351680801c | Bin 0 -> 390 bytes .../be96bb34298e67f3d34f78149dff305796d5990e | Bin 0 -> 456 bytes .../be99ab5dd0ffea84dd2ba24a5f539870179aa9c5 | Bin 0 -> 420 bytes .../bee281d08b845c33b44aa39a112190cf77571d19 | Bin 0 -> 254 bytes .../bf0e49e3859800e03476137dbfbc27b7f5c82050 | Bin 0 -> 317 bytes .../bf376fee595c0f99c5ce03f5d94392260c8050ed | Bin 0 -> 241 bytes .../bf6865979036fac804c30be407928733426780c1 | Bin 0 -> 195 bytes .../bf6a1db20e1323c9ab5a8911bc5705ab774f4395 | Bin 0 -> 8365 bytes .../bf79eca93c5e48865058a99da3c7dbf700ded48a | Bin 0 -> 208 bytes .../bf88e2d20552079cb52595ded7c80a6c639490e7 | Bin 0 -> 1424 bytes .../bfaa706bbf6b2c7f458f39ff4031638970e41c23 | Bin 0 -> 504 bytes .../bfc2cfcd32cb2394a21cd1dcfbfe544757d74b59 | Bin 0 -> 772 bytes .../bfe39ff846b1bc51250301a8c463bd8e4e63663a | Bin 0 -> 128 bytes .../bff15551cf5238ce3d54504b927ca50cbf21c968 | Bin 0 -> 211 bytes .../c02f9c1b7b4c47e87ce9238f0faa35a018272372 | Bin 0 -> 92 bytes .../c05b0ea5b44847989c842b4ec367a9a8f4e54339 | Bin 0 -> 236 bytes .../c086b6a6d3e3e2ad4b42e76a8864a71a54219d9d | Bin 0 -> 1033 bytes .../c18b8573fc6397a8ccd10770eb3c7c0e5fd2c170 | Bin 0 -> 424 bytes .../c190be6c35b42bbaa3eb3f0ba51c281e067d6a4c | Bin 0 -> 505 bytes .../c1cb9e254b9d503328d1f23870f065a562f09697 | Bin 0 -> 112 bytes .../c1db0e953a4dcfc1d6d9cbb3388b7154d7195ff7 | Bin 0 -> 13 bytes .../c1e397821e66f7a8600644af0a8b81031229fa51 | Bin 0 -> 280 bytes .../c20958092c9afc011e4407e9799632d2cec5f90d | Bin 0 -> 667 bytes .../c219a97220614aa84ebd8b9b027b67a68eac54d3 | Bin 0 -> 6282 bytes .../c22b8af49547f82f9b18cddd42362a685fb98509 | Bin 0 -> 512 bytes .../c22fcd00d080df1f041a4e14c0c7280f87c68346 | Bin 0 -> 8312 bytes .../c245bd4da4ad191d5f46dfafc9a08331c9c31f2b | Bin 0 -> 104 bytes .../c293ce8dade9968d74be1a07bf8a881d21c51163 | Bin 0 -> 516 bytes .../c2a27ef828d61af599120d01b89b0e497bdbfba0 | Bin 0 -> 236 bytes .../c2ad4b2ed89f931983c699cc64e8adc05f25c9f1 | Bin 0 -> 400 bytes .../c2b9b49ba7b0d1ad75abfac8e8de473efcc5a4f7 | Bin 0 -> 1033 bytes .../c2c1b59dee69c88556a3032b3fa13003f27af6e3 | Bin 0 -> 124 bytes .../c2d79b7d027a2b05792e654cfad52c8f1edb4a87 | Bin 0 -> 150 bytes .../c2dcb05f615176a52db575f53ed8ab900f7aaf5a | Bin 0 -> 385 bytes .../c2e4f066919e56fecf823832d74eac3e8456cf47 | Bin 0 -> 129 bytes .../c2fac846a1d590c94d8146e1f0fe2f630610b0ae | Bin 0 -> 4496 bytes .../c31becde32ea85b30575ff51324cb0757351584f | Bin 0 -> 448 bytes .../c357fa8c782fcc07925a6b9753f1acac73ecb682 | Bin 0 -> 112 bytes .../c36deffc3c998db4faa29a90e81207ca87adf153 | Bin 0 -> 56 bytes .../c381e339b19ac934e5eaced7c96cd59684ae08e8 | Bin 0 -> 176 bytes .../c384736f55318d19b003eb263dc2f6f1002d892a | Bin 0 -> 490 bytes .../c38673bdf6942fd35bd285503ec1ee29486b74df | Bin 0 -> 104 bytes .../c3a9d2556f9feb9de396a5911769ea8d70c319fe | Bin 0 -> 6397 bytes .../c3b6d7c946a0cbdc7742e9bd6f48e95298e4795f | Bin 0 -> 128 bytes .../c3b71a46991eef4abec1135713057a83493f33d7 | Bin 0 -> 6270 bytes .../c3d462b1b88de02caa8614f261d7ca335e5693d3 | Bin 0 -> 236 bytes .../c3e65fb90988715a5d6625c5f00d218fb5b4d4bb | Bin 0 -> 302 bytes .../c3eb01f1973e35fc71c6199e2b840296620d4b65 | Bin 0 -> 740 bytes .../c40aaabeaf6f43f8a8babfa901941e6c98c41574 | Bin 0 -> 195 bytes .../c429082b62c97767b99abdfd95adeecacda1199d | Bin 0 -> 692 bytes .../c449b9096facd99b90b93fc4a8b676d45459a5fb | Bin 0 -> 5845 bytes .../c4729919afffbe70b98bd2b8d2480fa0a69685f2 | Bin 0 -> 233 bytes .../c4754372b505db27eb5313d5e1487d62fa40dbfc | Bin 0 -> 9121 bytes .../c47efcfc5f0e74b9819a0885a3aadb36d8013467 | Bin 0 -> 425 bytes .../c493d0901625344b3adb9bc31863cd094778b012 | Bin 0 -> 8328 bytes .../c49f70675130f07a9da50e374229f73e8b198b64 | Bin 0 -> 86 bytes .../c4ca65161e335e99313a0491a3f526c0a9ead0d7 | Bin 0 -> 232 bytes .../c4df5c4168e84080e29e9bb7c6f38bdefc36a9db | Bin 0 -> 102 bytes .../c4e06b3c54bb3e76e52a612576f60d69469c01ce | Bin 0 -> 120 bytes .../c525aefbcfea61b4b4e64e0828b0896792cc2244 | Bin 0 -> 105 bytes .../c5598461c9a413e068ad3d2234a0efe7cf42b1d4 | Bin 0 -> 377 bytes .../c5603e5125a73fc30949534d2744a0c1e36c24fa | Bin 0 -> 195 bytes .../c57261eb6391d691f65adda0df6c3f470c577b79 | Bin 0 -> 346 bytes .../c58abbbef05ede272ad57bd248aa99130ce0980f | Bin 0 -> 112 bytes .../c5bcd48fa9f7acaa69ac88668298701c9eba4011 | Bin 0 -> 8972 bytes .../c5cc7e50e9dd2ee8cf7ca08d58cb2523a942deae | Bin 0 -> 102 bytes .../c5d5b72eb7a4d936c7a98fa2b24d3228edeb4a15 | Bin 0 -> 18843 bytes .../c5d69582cbae5720f0c16f26ef51907af2e60e4d | Bin 0 -> 20001 bytes .../c5fe4b7bbed39eea02899522d6a9efde19dd09e9 | Bin 0 -> 732 bytes .../c60a84d8a220fdd42587a590ea26aa5d1bd9134d | Bin 0 -> 336 bytes .../c63c0d7726b4d3d9612af8265a359f86c29dd96c | Bin 0 -> 18332 bytes .../c69121277773670673dd3660a2c3113cab91bfd0 | Bin 0 -> 183 bytes .../c6a72b9214401f3021504613c1fc2d67ff0a13fd | Bin 0 -> 472 bytes .../c6b6db899edeff1d65938f6f18c2310b06591d7f | Bin 0 -> 660 bytes .../c6d597d2b3e76614496e01f72eebb5537705b0a1 | Bin 0 -> 640 bytes .../c6dedd76c8e5a1bef3b3d28a89c3e886802c4f22 | Bin 0 -> 8322 bytes .../c71a2e305fb0d74d1700416e1636c6754e227478 | Bin 0 -> 400 bytes .../c762c98546503d5649ea5f7e9acf0c4f5cf81e1e | Bin 0 -> 195 bytes .../c79690274dcb77128883bc55180f4a8d5761d6d4 | Bin 0 -> 261 bytes .../c7971c60ca8b2f04f766a2dce8235683d3fc03d6 | Bin 0 -> 274 bytes .../c7ed97176b231d3f1f8745f55154149d2eb99a90 | Bin 0 -> 112 bytes .../c810b5ccab5972d823e7c9bf3eaaaed658d315ef | Bin 0 -> 112 bytes .../c84b5ee76ff38c3b87bcb5e0d233d7d2b6266c63 | 1 + .../c8cfd82ccb8659f9f5e443a1a1798a8f14e432cc | Bin 0 -> 8310 bytes .../c93cc00f777003baca5764ecf10c9ab3e949246f | Bin 0 -> 122 bytes .../c953ec4516bf06ce2b18e936451b80822363c01c | Bin 0 -> 196 bytes .../c9586665637aa6d4d24162a4a700371e5d398551 | Bin 0 -> 8310 bytes .../c9650afdae73d8bb189341fe2a7405c2cc0a126c | Bin 0 -> 1697 bytes .../c9719435e08cd35bac7638cd13157c2247769dfd | Bin 0 -> 552 bytes .../c994fa59abfc915622a6b40e0c45dc1e7504ee89 | Bin 0 -> 124 bytes .../c9a606fa5efbf5945942e7eb6b3b66e6e50d369f | Bin 0 -> 512 bytes .../c9af8a08f795768cde47829a8a73a01415fac3f2 | Bin 0 -> 408 bytes .../c9b1498c31e19393d7dfa775f741ed5ba17a84b0 | Bin 0 -> 112 bytes .../c9da098a8238e950da7f83171658302f7fd37dcb | Bin 0 -> 1272 bytes .../c9e78d434be979b926edf59614cbe6c2e41b77c5 | Bin 0 -> 195 bytes .../c9fd8930c5c6dca6845c5519e6f3ddc14c2c570b | Bin 0 -> 340 bytes .../ca37966ab51208c6e89c884836967d47a399bbbf | Bin 0 -> 632 bytes .../ca460fe67efafd54e955d6ee3f23b857c38aa55b | Bin 0 -> 1170 bytes .../ca5ab7671fd95e4c87b859f8662c1d10a15e3aef | Bin 0 -> 505 bytes .../cac78271d939e6eab70c4caf92169bce0aad7040 | Bin 0 -> 201 bytes .../cadf9c7ffc1a07814e1fb2de923fb2ee2f07f2b6 | Bin 0 -> 797 bytes .../cae1873ba2281a03a4c3605c444b41e980e89f25 | Bin 0 -> 614 bytes .../cb1cb49ea81791cd2d480d11b761a945ddcfd403 | Bin 0 -> 112 bytes .../cb36eb4aa277a800e517e972beab85bc8618052f | Bin 0 -> 378 bytes .../cb639b6982c0950b1e70bec112728056795c507f | Bin 0 -> 512 bytes .../cb6cbd0da690bc0df843cae44272d4ab773b4ecf | Bin 0 -> 389 bytes .../cb796533dd56934eca9183d0b99343155416b5ea | Bin 0 -> 196 bytes .../cb7a75fa12e92ac806c0a280aac555373efa062f | Bin 0 -> 178 bytes .../cb7c01e3138c40fabb35da49f88c6e53143d66f6 | Bin 0 -> 104 bytes .../cb7c22c32cb79b239f790a91caf4d33f9ebcc9e1 | Bin 0 -> 574 bytes .../cb8814546ca5286cc151c96606da91cdf097c3fe | Bin 0 -> 369 bytes .../cb8be795c8e495dde83f83a56ca3edd285f49820 | Bin 0 -> 889 bytes .../cb8de2ce039d30bc29143a3839635e61be8da04b | Bin 0 -> 19977 bytes .../cb9dfc263343abc6744b84b25df8d917baf506f3 | Bin 0 -> 102 bytes .../cba5cd7645acec0983c3ca796dbc939242b9e7e3 | Bin 0 -> 104 bytes .../cbbda2d51efc95356edfe4f4e9e07ede5572c01c | Bin 0 -> 102 bytes .../cbc5db76d4b2783a024576e18ae0ad38fac52999 | Bin 0 -> 400 bytes .../cc22516849457574128e8fc43075e55d1de70440 | Bin 0 -> 8971 bytes .../cc2a39973ac62fe7f14c59403ed9525b81f452ce | Bin 0 -> 373 bytes .../cc3daad2162cab2c16bfd7ccb935fb6e18446d7a | Bin 0 -> 416 bytes .../cc4295662a0ba25062f7b558ec10371513450d95 | Bin 0 -> 6210 bytes .../cc47d8ba1c65a551c35bbc56935d015b0346af8d | Bin 0 -> 167 bytes .../cc6ca550545f7217d2a0f06c4158c928534ee1db | Bin 0 -> 420 bytes .../cc922e24d58b12c3c43a86a56b6f06ce2f603b54 | Bin 0 -> 142 bytes .../cca3abb736280aeacc5d26a5bb0a1ac8f952106b | Bin 0 -> 884 bytes .../ccb30b21ffe294f5ccbdd7a11cc3bdec041e7627 | Bin 0 -> 640 bytes .../ccd1f9238294c09c7cb01f0b1ddb9e1f0972acbb | Bin 0 -> 112 bytes .../ccd37688dbf81890bd880a8c0db9409318cbb7fe | Bin 0 -> 616 bytes .../cce89d474bd88b107811c85de8ee3b5b5c58a1a3 | Bin 0 -> 385 bytes .../ccfcccdd9e30493e3a244ed36e38ce1ac723a88d | Bin 0 -> 112 bytes .../cd07bb2ba669816fa5f749198c266663a754a29b | Bin 0 -> 112 bytes .../cd0b3bb7081dc96566460bea85db7885340271b9 | Bin 0 -> 1317 bytes .../cd0cbb1692fa82db3ffafe0bcbbea0b482383715 | Bin 0 -> 128 bytes .../cd0e2d18c13ca993cac92b38357d61d2dfe09d03 | Bin 0 -> 232 bytes .../cd12967330652fc4855c4d18a1b45ec2c7dd8b2f | Bin 0 -> 16 bytes .../cd4305cbec1195906aedf19d2f9af0723c2d2a7a | Bin 0 -> 416 bytes .../cd45ce6f71ebe6b122fcde13ffbde1f0dc4e99df | Bin 0 -> 516 bytes .../cd56ccea68c4a5d59493ebb487e45809a3641c97 | Bin 0 -> 236 bytes .../cd5d2da476c209f9e0cb5092feb32fe99d707360 | Bin 0 -> 236 bytes .../cd5d4fc8095e8fe69a37a7106693a2e23e4dfc92 | Bin 0 -> 104 bytes .../cd5ecb7357c31496831b791afece788550b513b4 | Bin 0 -> 236 bytes .../cd621518acd1e5677e57768397b5e642d14e5577 | Bin 0 -> 377 bytes .../cd6ca8614c5ceba16416d85b9e10733c3c6199d6 | Bin 0 -> 583 bytes .../cd798f75ff86d138ac9e58e383ba6a17a2943821 | Bin 0 -> 29 bytes .../cda369cf19229a28964b81edfabdf4ef61caf4ab | Bin 0 -> 119 bytes .../cdaa63d454a6e697956356b046199b77505a9b82 | Bin 0 -> 8608 bytes .../cdb10c144b68b038e159dc26aed328c1d6309214 | Bin 0 -> 128 bytes .../cdf1828fe7ca27cd7240ef26ccd34dee0fbb8037 | Bin 0 -> 229 bytes .../cdf5d1e1542cd49c7d55b094ad6c68c7af9d013c | Bin 0 -> 14079 bytes .../cdfb106a1c816cfc5a5374add630ce8f313f26d3 | Bin 0 -> 324 bytes .../ce12baabfda4456fb8b1286cb616150063497e04 | Bin 0 -> 327 bytes .../ce338862489962fc9149f2dee7035ad6920e48ee | Bin 0 -> 151 bytes .../ce4b1c96e34bdba6609710bd3742e90499467031 | Bin 0 -> 740 bytes .../ce71c2126523765db8916a42c0e8e063b2263d21 | Bin 0 -> 216 bytes .../ce75c867abe825267cf88febc5fc3ae846ba5ad2 | Bin 0 -> 112 bytes .../cec655f4bf18972f6d110b9e56dd4f28c0d7ea69 | Bin 0 -> 513 bytes .../cefb76fdce73234ccfde34f35e71aca2e6bfd8ed | Bin 0 -> 369 bytes .../cf06c7f43af61dadeabcc6914b02cafae1c3b8d7 | Bin 0 -> 87 bytes .../cf1ba456eeaea623c3d3a647dfa0dacdc27974eb | Bin 0 -> 6651 bytes .../cf2db9c56e759fb62d1cf6315ff8c6cd87c5debe | Bin 0 -> 112 bytes .../cf309ba0e68eb42cd8fdff3486a666ef06d2ef32 | Bin 0 -> 15325 bytes .../cf420b0912b21d60cdf2d40091e2d67e296ab033 | Bin 0 -> 200 bytes .../cf7053683cb122d271ada5dba79c6c7c48cea03a | Bin 0 -> 195 bytes .../cf71fdc0acf3c5705ed2308f248a15a137daeeec | Bin 0 -> 1791 bytes .../cf78afa0f4c95dfd3a61265ab4c7678a4d7f347e | Bin 0 -> 182 bytes .../cf7a585e953643dab01ba4b72ea32676f8bcb78c | Bin 0 -> 321 bytes .../cf8d8d46cb88a89ce653b83cdf114b84324b19bf | Bin 0 -> 378 bytes .../cfbd4c650fd712afdd07b8b532084a83d478db93 | Bin 0 -> 408 bytes .../cfc4e2a2229b79b7649ac1a10ae5febdcf53bcdd | Bin 0 -> 168 bytes .../cfd114ab316a11db24037c0ef246d778f4b05ab9 | Bin 0 -> 424 bytes .../cfd47de2c41896a186dfdf50d9c6cb370fbbcae8 | Bin 0 -> 1416 bytes .../cfe8b2c031fc011beac063990da48c5eb8d26fdf | Bin 0 -> 20 bytes .../d033baaca5770ad952eba506fcc453c276b36727 | Bin 0 -> 128 bytes .../d055f933356c20afe5b1ef6d97be23052b5e3dec | Bin 0 -> 389 bytes .../d05f3836467a60e164eda2add34f2a757e02147d | Bin 0 -> 112 bytes .../d0653e3c1ce25858ac3247f172af17029d79b90e | Bin 0 -> 195 bytes .../d06d8abfae572cbf58f6617b7edaf282185138c6 | Bin 0 -> 1722 bytes .../d077b2bdcc14997d927b76967fd36978d9116ead | Bin 0 -> 30 bytes .../d0a6ed27842c9e1124f9c7c72b0cb800bf893f6c | Bin 0 -> 623 bytes .../d0a89498e6b88370171f5e4dab008fb616c2244b | Bin 0 -> 379 bytes .../d0d0880adf2295f8f6585c6e796fd1e6a36df28d | Bin 0 -> 112 bytes .../d0dc25264635efd9e41b32efc31c1a2aab6b1292 | 1 + .../d0e342f565d4790aa25dcf5ea5e41f4cfc43b13f | Bin 0 -> 369 bytes .../d0eeca1947f8e90252c14aa51815f40652f3de01 | Bin 0 -> 102 bytes .../d0f7de5530d18ffbe5e3f24e8dea29b7884ba10f | Bin 0 -> 6015 bytes .../d0f881b2ea8448acfa3682b2fd6c9183a201d0d3 | Bin 0 -> 318 bytes .../d107538a2c195d2361ec384011eb516f29527500 | Bin 0 -> 128 bytes .../d10e7d2f26462ce82dc8a6a9b0f63af43c652d35 | Bin 0 -> 376 bytes .../d143d7c94cadbecda94e6b8007d81896b4d4f66b | Bin 0 -> 164 bytes .../d152b7c02ca5838846251c18388b9446ece4b3b9 | Bin 0 -> 195 bytes .../d178b66bb795e074c9b4fa94c83c005f87a6c95d | Bin 0 -> 18770 bytes .../d18190594a81e82349462e65cfab43e939a33320 | Bin 0 -> 128 bytes .../d1839c3f5b2cace7c2e11b028fd0fc00dcdc836d | Bin 0 -> 620 bytes .../d18c33ea3110c9ac95c0295a907d0f9060cd931e | Bin 0 -> 244 bytes .../d1a96346b9f1ce6ffc836c7449cf52f0301135f7 | Bin 0 -> 3804 bytes .../d1c5f64957bca789704df00a14d26062d05b01cc | Bin 0 -> 369 bytes .../d2176fbbf5318d9b0ffbb8f29bd91cd950756b9a | Bin 0 -> 236 bytes .../d224c4e2c56ca633811b08f285911c6c458d328a | Bin 0 -> 148 bytes .../d23df75ad0648f85edd94fc3b2396cab5f4840cf | Bin 0 -> 2472 bytes .../d245c6b573a1ec205f26d914fa173620b83ee78a | Bin 0 -> 260 bytes .../d248e45b5cb1c0cc5a7dbad2504f72d15489cd65 | Bin 0 -> 236 bytes .../d25512dc5e171ee503f7234a7cbc4d66624fb098 | Bin 0 -> 195 bytes .../d269326220d8ac5612c434ae9ab4444964b637ca | Bin 0 -> 256 bytes .../d27978be2f3d78777146ec175f5681a83ac8674e | Bin 0 -> 1217 bytes .../d2b7eea35bba5537f1519d514e535a59b7d41e12 | Bin 0 -> 102 bytes .../d2d10ee9797bd25e8c61586641032056d80c53f3 | Bin 0 -> 588 bytes .../d2eb7e531d356abb001ac82d43159cc635bcb571 | Bin 0 -> 195 bytes .../d2f6043bd512dc1daa5453a739e568fccd21ca33 | Bin 0 -> 195 bytes .../d2f79b69c8f9246ed8b376794e8317d09733d9d2 | Bin 0 -> 218 bytes .../d3222701f11c12533ce40bf29fccef00fd8e28a4 | Bin 0 -> 5065 bytes .../d339c98468ed58e64c5fccccfc8305c1fd20ee8a | Bin 0 -> 520 bytes .../d3566e7ca1bd6b37ddb15ed2394aefd9d85d69db | Bin 0 -> 112 bytes .../d37683be5125c2d67b9d6c067998aca0a215822c | Bin 0 -> 8310 bytes .../d399de97f4cedaa68beb93bc5360e9b894891c00 | Bin 0 -> 102 bytes .../d39a3cb24a149b894222ded164a9056d0a3417ec | Bin 0 -> 120 bytes .../d3b95daca033b080ed67f399211733f541fd709d | Bin 0 -> 741 bytes .../d3bd1c4e3df419456130dcefe952f21ea6bd9761 | Bin 0 -> 102 bytes .../d3f3e7f259cdcce2d53d35a7ab1954f7c3d54894 | Bin 0 -> 145 bytes .../d423f714645ca8f5cb9e86094ba78fb94ee36baf | Bin 0 -> 102 bytes .../d42ebf581c6a34ba0e79c773fa1668863f10fd3a | Bin 0 -> 35 bytes .../d459534681da8be142aad144c3ff91a2016e936a | 1 + .../d4600be17e39eb9e0c967ce54634aa019a589084 | Bin 0 -> 740 bytes .../d48791a7d0e6710f5ef7dc2432a1a301a4462cf2 | Bin 0 -> 2013 bytes .../d4b709eee7791362cf6254fd53b460cd8b615d17 | Bin 0 -> 609 bytes .../d4b8e74efda8afb76fcb57ba0b3c7b63803dba42 | Bin 0 -> 176 bytes .../d4cd4ba98f02aa429d4a0d6270de070728502c1a | Bin 0 -> 8463 bytes .../d4d43d2c7614d334ac76fa6367614ed766701959 | Bin 0 -> 440 bytes .../d4e60a85ccbee7fb3150fd332b725b4bad0f65c4 | Bin 0 -> 668 bytes .../d4fb37ab3f3de0504cbca04affc4972c86fb1934 | Bin 0 -> 408 bytes .../d539e95a15856a56789b472978b4f9c9735896d0 | Bin 0 -> 112 bytes .../d542e66bf17d21ec04d88b9dac115f10c712a952 | Bin 0 -> 384 bytes .../d54456e6ccc19ba4ed8a263b9b754c1540a79ac5 | Bin 0 -> 169 bytes .../d55b7be5da7686565feca4e15f885c63ef354e6f | Bin 0 -> 363 bytes .../d57c0b871fe207f40178b3fd53c6f10719c0294b | Bin 0 -> 102 bytes .../d57ff7cbcae712a23998a505e94f9857b7d03a65 | Bin 0 -> 112 bytes .../d5a6805eec22660e39539cc4f4dd0e59b42ac63a | Bin 0 -> 13338 bytes .../d5e4818d8861cc4e8fdfeebc57baaa8456799fee | Bin 0 -> 740 bytes .../d5f8920e569c1e5ad81dd41d827ffaca99a5299b | Bin 0 -> 148 bytes .../d605b02b1078bf3234c71a85496a29d38d0cf5e9 | Bin 0 -> 9456 bytes .../d607496e6a1d7e3f24425a03aa3b650fa6d7175d | Bin 0 -> 112 bytes .../d60c8e0fb2b00f92b81937bfa4fec7a63521a210 | Bin 0 -> 624 bytes .../d61f032ff45f9e4fcba6760f630fb8c5827e1c6c | Bin 0 -> 372 bytes .../d631c7c3bb374f742b43ddeeb4181097b15c2dbb | Bin 0 -> 122 bytes .../d63e524a7f1f9cbc8788829f2fb885c36717858f | Bin 0 -> 29 bytes .../d65cf2683a4b6aadbd1c17dc5b8708adfcd6eb8b | Bin 0 -> 4989 bytes .../d670f0d2642fcb94babbada232617dc2055cb271 | Bin 0 -> 489 bytes .../d68aa991d0b754ea5b8fd443537279e1d1bf44c8 | Bin 0 -> 1697 bytes .../d68d66c1c16c6b595821ffd3f105c09e1e1e26b0 | Bin 0 -> 79 bytes .../d6a947f3588ebfb77a824fc0741c339495e390ff | Bin 0 -> 112 bytes .../d6b77708c70c74f4dfe41767aef374d86d17086a | Bin 0 -> 383 bytes .../d6b978c91fdb4e480f866af340c7f7a6658c9eea | Bin 0 -> 41 bytes .../d6c0c16dd70b260abf438f966c5645d5704f23db | Bin 0 -> 276 bytes .../d6d587a7a7b0347ea2dabe6d8d4812af5e02a97f | Bin 0 -> 3543 bytes .../d743ca3de0c96d329ad9b79e0431b52fa5d7c300 | Bin 0 -> 376 bytes .../d74c66a75a8277a7f6497e3dee8d7e406123d8d1 | Bin 0 -> 81 bytes .../d74fe6a38047eeb5d692978e0864d80f50b15696 | Bin 0 -> 198 bytes .../d7509704c1d81a28294814ee00397325bd6b38fe | Bin 0 -> 376 bytes .../d751471201fa55a38065d167f6fa32026323a8c9 | Bin 0 -> 50 bytes .../d75976ab62bf26eab92f95f6d888fe023c522e86 | Bin 0 -> 444 bytes .../d776ab65097ad9943ed7aa610626c64091156839 | Bin 0 -> 695 bytes .../d784068dd63d6b26e4a2afdd27974092380b5fbe | Bin 0 -> 51 bytes .../d7b446c1e265103a2a0ad441733b312e31c0a8d1 | Bin 0 -> 1033 bytes .../d7bd4d785308b0302eb6d568b899e61c2e3b54ed | Bin 0 -> 8367 bytes .../d7c9b23e1ecdb005967a3640f24fd3816c3e5ba5 | Bin 0 -> 123 bytes .../d7e5a42e1341f44384d27c1690585603bac39859 | Bin 0 -> 492 bytes .../d8043fd14b98d3965f9529537eb20628ff889f32 | Bin 0 -> 102 bytes .../d81a1086506f67d857c8dedf1b26b6c6b500197d | Bin 0 -> 457 bytes .../d82150522abdc03ecf9f5ac742a13270966f0dc5 | Bin 0 -> 129 bytes .../d82e66dd5ef0dba2ac8710cb3ab79ab043f85804 | Bin 0 -> 112 bytes .../d8386a7def6f9b0da873a26632ff9d3097b7418a | Bin 0 -> 195 bytes .../d8482afb39a93440187f46f28bcfcb3b05be7e39 | Bin 0 -> 1144 bytes .../d84a88bd8c80f878d51b99ae9242d2a81e35b949 | Bin 0 -> 112 bytes .../d853fac5645c11da306b63e4eb1de9e4d3188ba7 | Bin 0 -> 312 bytes .../d86be867e7c045941da49a14d3c1a152663f183e | Bin 0 -> 236 bytes .../d884b809724cdb5aca9538624436ec48baf2f71c | Bin 0 -> 64 bytes .../d889c9c859fec8dcee4ecd117203c5470d2d6f79 | Bin 0 -> 408 bytes .../d89b9421472ffc7762e52af2892f682ddd8fd2ad | Bin 0 -> 54 bytes .../d8a341442c8eb97399e6cb496b3a0c07b3bc2d99 | Bin 0 -> 103 bytes .../d8ac3e77077b42bc9581031d6b4435e0b923f2c1 | Bin 0 -> 226 bytes .../d8bf3ffedc39bca4f16990c4d90e04745c92da1a | Bin 0 -> 106 bytes .../d8c48621837206d27d75e83362c33ec84d7bbcc6 | Bin 0 -> 1116 bytes .../d8d50acd81de4f4081d330f7d6230eb6b1f188bd | Bin 0 -> 178 bytes .../d900abdc132f5815c48b7ad9a2ec17616465d2d8 | Bin 0 -> 976 bytes .../d902538528d44ba252c2e4de20f914e5c74e57ce | Bin 0 -> 324 bytes .../d90cb2aa13744197c172bb1ad12c6903a63dbeb2 | Bin 0 -> 98 bytes .../d92504a74020c3a3785d7a0b9347147e755f4c17 | Bin 0 -> 7 bytes .../d9289b29058efc4c078c412f9246f397bfc82d72 | Bin 0 -> 232 bytes .../d945007767065f28c375a2619db420cd81d24ecb | Bin 0 -> 400 bytes .../d9b41d36f67979b324fbc8867c8f3e24e7661a6d | Bin 0 -> 173 bytes .../d9b5d6696358d5bcc0acd734428d80fd3513f3d1 | Bin 0 -> 102 bytes .../d9ca217a80c332cece1d5b70b887ca918322dab9 | Bin 0 -> 369 bytes .../d9e22388c0d3c0f5ec3c4097ca757557045f170e | Bin 0 -> 128 bytes .../d9ecb0cf42396e634e25b50f8eee44d19e245c7c | Bin 0 -> 876 bytes .../d9f271383860f76a72928c194fe7d0e3615a1df5 | Bin 0 -> 128 bytes .../d9fe0c93f3396b2ada03f4344c567583c29f024e | Bin 0 -> 976 bytes .../da39a3ee5e6b4b0d3255bfef95601890afd80709 | 0 .../da39ec501fb73e2d728cebef8303b182e72b08dc | Bin 0 -> 451 bytes .../da4294df9d5f37b953bd1950820c1c19381904dc | Bin 0 -> 1164 bytes .../da4f2c90e4415e698c2019fce2a08404196cee8f | Bin 0 -> 5547 bytes .../da658a8f63f65d4e1d62e569a44451a1342f1f1c | Bin 0 -> 112 bytes .../da74a6da29c4357c4d06642b57a5bc79da602027 | Bin 0 -> 112 bytes .../dae8d3b9126c455c4ee72ab22d488c97ce564221 | Bin 0 -> 362 bytes .../db07c3f944b199fb9bcea172bc75b3a146dff588 | Bin 0 -> 363 bytes .../db1c1feae39360bf6c9489112f9dbbdac2588d07 | Bin 0 -> 102 bytes .../db26b0bb4135eb3b4226b2121f8263605a937ec9 | Bin 0 -> 178 bytes .../db303bf7ac7c12ccda4713e64de6402492844fae | Bin 0 -> 15326 bytes .../db541c0fe27dfdc18543492548413d68a4d5e8aa | Bin 0 -> 375 bytes .../db9b6e35c98b406246ad0f52b9c563a43e9f00d5 | Bin 0 -> 504 bytes .../dbbc29fd14ce004ac24fc3b6666ef1115b8e6cf8 | Bin 0 -> 76 bytes .../dbc01551278c5de510ce0bc1074db7a182af0e4f | Bin 0 -> 623 bytes .../dbc255d49aa1e018137130d9ec28dfa69a8b3409 | Bin 0 -> 8631 bytes .../dbc4de5aef57d900d20a66a4afd1b7739ed11cf8 | Bin 0 -> 352 bytes .../dbe5aa220ac387b74c30ef92e05510e4476f72a0 | Bin 0 -> 408 bytes .../dbef7289b009e7e111cd715c5dcd80e282d68b9f | Bin 0 -> 426 bytes .../dbf691700ba65e2bbfb806e62b7162be446bae9a | Bin 0 -> 196 bytes .../dbfbe9ed6cfc3a6cd97c030f9d3ffb10d23cf76c | Bin 0 -> 176 bytes .../dc0f89d62cd7e2734d140e81fe5e106d341e6068 | Bin 0 -> 640 bytes .../dc373aedde4cac9c404296c2eafb1f3fedce6538 | Bin 0 -> 199 bytes .../dc3a558e8af542a26795e58e5afdbd316e3a513e | Bin 0 -> 112 bytes .../dc4bfcf3801d5264493256dfc175cceaf95eaaf3 | Bin 0 -> 104 bytes .../dc5103f90e24d35bbb36d0951c91b9e03bd12aa9 | Bin 0 -> 102 bytes .../dc62f65c82a9baabc9d2c38eef3297f64f55780a | Bin 0 -> 353 bytes .../dca825c5849893985cf168a025fa03d5afbac8ba | Bin 0 -> 36 bytes .../dcb47641fb272ded30bbf52f40e30968f94c4315 | Bin 0 -> 202 bytes .../dcbdaf7e1205844b478f8525c7af8667d7ea1e62 | Bin 0 -> 11 bytes .../dcd4abc70391c9eeaab0a2a4ca44324793f35de4 | Bin 0 -> 416 bytes .../dcd53a0a7609b799646db32def2ec64ebe0811fd | Bin 0 -> 195 bytes .../dcd7c013ddddfddbde355ba4c56ed0ded16f4796 | Bin 0 -> 129 bytes .../dce422716dd9de69e15f51b012079fab4a0b3bcb | Bin 0 -> 8019 bytes .../dce8ddd18cb91e0c5ab691b5043dd9762a8a9101 | Bin 0 -> 102 bytes .../dcebbf678ebc8f63a0354811abbf05d3da0d6af3 | Bin 0 -> 102 bytes .../dd00e6e42f39901984251558f8340ba5be77d524 | Bin 0 -> 448 bytes .../dd07847fb6cb4bbb61a01f5707ed5470c8e2fe54 | Bin 0 -> 320 bytes .../dd141313ea0de59c1501ae95100d9f9bb5f53ca6 | Bin 0 -> 488 bytes .../dd1750b7388df8b71d3ca6befd21c0b4069613b8 | Bin 0 -> 816 bytes .../dd2492165cdea1bca8a6c2db15124e7a390ca1b4 | Bin 0 -> 242 bytes .../dd3ccec4e7c5d99f36f0f26aceea404bd97dd40a | Bin 0 -> 396 bytes .../dd4550fec09625be78b577db40cac3d7149f71d0 | Bin 0 -> 236 bytes .../dd4fd8687e6aeac495abbc59089e7b33014741ef | Bin 0 -> 285 bytes .../dd58368d20170e1f585e4e7dd7e85790c73e0d91 | Bin 0 -> 325 bytes .../dd5b6d02eb83be894f8c490e34182e8cd0fc1da6 | Bin 0 -> 3006 bytes .../dd74fd0ffa3a0c5e574e5c4e6ce940268d9c2ed3 | Bin 0 -> 102 bytes .../dd7833cd5a0a26ca89302dc4d37acd66cbe860a5 | Bin 0 -> 369 bytes .../dd860044620bebb36a4892e446a3156ece9e6985 | Bin 0 -> 4206 bytes .../ddc8b14bdc772878e54abd4d7a02d1ebe0021357 | Bin 0 -> 102 bytes .../de19c9999648d2e5eccf8dedb636a9898180d811 | Bin 0 -> 227 bytes .../de1d31b86ad16b1adc89bd4e42ae73e0e3e8f7d1 | Bin 0 -> 131 bytes .../de4bd8af65daf96a0580d2270c1f52a4d8e9be3e | Bin 0 -> 456 bytes .../de5055e507626359db883115e693e9e0e4cc6cc2 | Bin 0 -> 128 bytes .../de554fc2cacb9dbab412cbc656f9a43f8abf989e | Bin 0 -> 102 bytes .../de7248e19077bc44fab3ee7140d4836adef739d0 | Bin 0 -> 420 bytes .../dea780a4f8a9131c4035c622257ace115979af94 | Bin 0 -> 64 bytes .../dea92cdcc1e531cd853c20acab4428e5952e8e16 | Bin 0 -> 377 bytes .../df273c04aa6ddec0d4ac72dd72e0e2915b66a81f | Bin 0 -> 61 bytes .../df2fdadca0bb4a087df36576b55c381fb10197b2 | Bin 0 -> 122 bytes .../df409976ff0f15f564ba16fa48b17a36456e82f9 | Bin 0 -> 403 bytes .../df4a8684303eba1ce4d8ba21dc03ca73ee447cc1 | Bin 0 -> 324 bytes .../df5efec78b1ecc3b0f0a17ba453aa34efac1f77b | Bin 0 -> 144 bytes .../df669213bf46cc9c18cbc2cbc53c520aca7b6a9a | Bin 0 -> 15069 bytes .../df9e3a515fecac1f607053065b02980ff5bcf3e6 | Bin 0 -> 64 bytes .../dfade0f3c0ff29b7089d46a9094470338a85a29c | Bin 0 -> 312 bytes .../dfd6b19cf5245534f574ac7290675a371d6ede06 | Bin 0 -> 102 bytes .../dfef3364dedfc68a1b35c36623a7d7eb008ff7c0 | Bin 0 -> 20001 bytes .../dffa7b848f98737b01f05b379f1811c26d20bf45 | Bin 0 -> 392 bytes .../e006bc0eb904a4fed68200e2b94112e75b9205e5 | Bin 0 -> 26 bytes .../e008a6a949b12b006cfdb0dbe93ca5057cc92066 | Bin 0 -> 312 bytes .../e04944532953ddb079d84fcdbfe720fd53f6e8e2 | Bin 0 -> 740 bytes .../e0495df61a484ee8549df6c5d8a1a05e6fb2b950 | Bin 0 -> 416 bytes .../e056c6b45021cc390949d2614c7ab01664de686a | Bin 0 -> 461 bytes .../e05f301df040a4d44ccda6d29e059bc8d819676d | Bin 0 -> 60 bytes .../e0a4d75755768ef05fea1cce28e16a375260fc56 | Bin 0 -> 64 bytes .../e0b0be39391e95d96e285e71979b82a33ce1106f | Bin 0 -> 17375 bytes .../e0cb454699ad327251cc5b34f6fcd3c853b247b8 | Bin 0 -> 448 bytes .../e0e4705754437d5f2a5ca804f3bd65b58f487b2d | Bin 0 -> 425 bytes .../e0eb9ee38a6467a41fa2c877fa4a6c08715aca52 | Bin 0 -> 195 bytes .../e11d2a39bb3dd2e9ff5bf4d6abc7d35300bf65c9 | Bin 0 -> 129 bytes .../e14254afdb35c0f15732551ac25e95d7feb03f0b | Bin 0 -> 2033 bytes .../e144b86e6a9651d82dcf0dd617022282eb07111a | Bin 0 -> 392 bytes .../e148ba25849161828438c58439cb361b3d35462b | Bin 0 -> 124 bytes .../e162423a4d022fb782ac103d06f1d6a32fcc5e4e | Bin 0 -> 492 bytes .../e16e95551e586feaa37f734ecad83ef1ec2b5cb6 | Bin 0 -> 112 bytes .../e19be1dc0f08b6a9cab4abc57ea5bf9416c4ab14 | Bin 0 -> 1856 bytes .../e1a03d94efbda93f45c3717bb46a68f708ae7848 | Bin 0 -> 312 bytes .../e1b3b8fe1320d63b7f18d412980e1f3321339606 | Bin 0 -> 152 bytes .../e1c08e8f3e4c96e77fc7ae4b749a8e66441edfdf | Bin 0 -> 1230 bytes .../e2229fcdab9309756749ccc69b557c12955b59a8 | Bin 0 -> 112 bytes .../e2697af5f16596f2fc006c0bcb7b8b1be099b0ee | Bin 0 -> 13335 bytes .../e26c5e6bdfda0e9cac8fccc5cae595d317401f10 | Bin 0 -> 512 bytes .../e2777dbc8068460c36f25843284e1043a9e29984 | Bin 0 -> 128 bytes .../e28b6b09d7980cec77dd38d21a5e04e991c03706 | Bin 0 -> 369 bytes .../e2aab4a72f051c638f9d04428308cc73c1007402 | Bin 0 -> 2578 bytes .../e2aeb8fb416d7ff372552e155f9fc9c2d6cfa65e | Bin 0 -> 308 bytes .../e2b23345606cb3973ece09811fb7be16ccb6172e | Bin 0 -> 227 bytes .../e2be70080ab21e69c66942cc779c1d14f0a035ff | Bin 0 -> 1698 bytes .../e2f114b5e69962ef3882fa98fe0a2745228b6e56 | Bin 0 -> 195 bytes .../e305137078fa7a20ac0bd05a6d672e9316646eee | Bin 0 -> 236 bytes .../e30c8f034befd47e82b84b6c54854cec13241e9b | Bin 0 -> 392 bytes .../e30eb352bda7219fc0f0c3c5bda301fcf1e28ec5 | Bin 0 -> 488 bytes .../e33d40098f2b37307c4397cf5ff17a28b8e711bd | Bin 0 -> 112 bytes .../e33d656538f7d1d34d180da517992a52801d5a96 | Bin 0 -> 1107 bytes .../e3482210f423f62baf63829309770129aec02fb3 | Bin 0 -> 636 bytes .../e3556c56e4313a9275cb5bc5fdf6192db022c272 | Bin 0 -> 5067 bytes .../e39307c2e8a878832f3f10198cadc7a64a85a0e8 | Bin 0 -> 416 bytes .../e3b48797c365585dac96de93b72467332dc8e453 | Bin 0 -> 166 bytes .../e3f6299562d661a4af47679cd37db7ef1377d160 | Bin 0 -> 112 bytes .../e42441d43cf94377b4aabe88bb1c22a0e7d11720 | Bin 0 -> 357 bytes .../e4413ce1fbccc6bc3a1d14bc93f5926b523f8a9a | Bin 0 -> 88 bytes .../e4528e59759de0507c9e710287dbcef473f8eb54 | Bin 0 -> 104 bytes .../e4576f3412564b5011099fd066cfd4d00d9c9a03 | Bin 0 -> 102 bytes .../e48a99056fc9c6a9d5038da9f343dbcecef55d4f | Bin 0 -> 5729 bytes .../e48ddeffe81511349c955c8e7f6f6ebf62363933 | Bin 0 -> 112 bytes .../e4920a82bb5a6b5990fd9375dfcc66a538148307 | Bin 0 -> 102 bytes .../e4978ffe4a0d5c60ec69e99fd12b2e101e6298ee | Bin 0 -> 3821 bytes .../e499209f9fc121056027189783f25751d76e83cd | Bin 0 -> 112 bytes .../e4bcb6dd1570f99710109336c6dd93cbd974406a | Bin 0 -> 369 bytes .../e4ced9b8c11e57adaf42ab84fe4c9760713eb039 | Bin 0 -> 125 bytes .../e4d3559d1f520c68c66abff97da9e42dbb298cdb | Bin 0 -> 55 bytes .../e4d7d090bade45c88e2be5f3c6ceb0f9cb2f5bf1 | Bin 0 -> 33 bytes .../e4ecd23993578bb217d3301e353c0c71fcee9c8f | Bin 0 -> 49 bytes .../e517ab34603eb1c61475b31fea52de0a83a39979 | Bin 0 -> 1408 bytes .../e52f3c1cc34f657929dcd19531d36f7528bdf679 | Bin 0 -> 182 bytes .../e537cc5699bc10f6323df21d7f56e1a3db2eeb24 | Bin 0 -> 408 bytes .../e5539c540aa9756bbaeeac040eaec1c5077c6a1c | Bin 0 -> 177 bytes .../e558cbbabbae0ae13923da1ffda92ac75b05f5a2 | Bin 0 -> 20 bytes .../e55f0a1a05b04311fa3da749a619dbdbc88d9917 | Bin 0 -> 4559 bytes .../e5600e2c7f33aa6cba77fa038d626c0709e9ecba | Bin 0 -> 67 bytes .../e56b8aac4008995fb9b0d9079f78e92517cf43ab | Bin 0 -> 390 bytes .../e57628550418b1096e924b9fede979341949816d | Bin 0 -> 609 bytes .../e585fd438170c3af384d7203765e164d32d00454 | Bin 0 -> 2156 bytes .../e58adba6163313efd56a3f9467a38cb733b8990a | Bin 0 -> 208 bytes .../e59be15055f0ae53738667fb46beb9472a89e2e0 | Bin 0 -> 243 bytes .../e5a129bc055160ed1c87e7bfd2d7cb7f8fca7c8b | Bin 0 -> 292 bytes .../e5cd92af11996eeb3155e49bb3a6a4ca8f415d54 | Bin 0 -> 490 bytes .../e5d7a015e8fb06313e3867a7a5a0c30b83596178 | Bin 0 -> 20001 bytes .../e5fe663c48c7562bc626a718bb6ed5db1a93709f | Bin 0 -> 116 bytes .../e606ebf8ff893b806f17131e95ee655a69c3793b | Bin 0 -> 320 bytes .../e61499704078464a614e3b656df0d0003872742f | Bin 0 -> 12 bytes .../e618891c135ee77954b08fd9d876a5d536071f50 | Bin 0 -> 37 bytes .../e622368449a253bbb09ccfe8dd81c55da0e730b8 | Bin 0 -> 640 bytes .../e6289d3ebfe64ce43dbc261490e3fb534b2e98d4 | Bin 0 -> 428 bytes .../e64a8b23e1f6733c2a519f2c0d92849144268cb9 | Bin 0 -> 526 bytes .../e64af6319b000618bea96b44a462a2df07959e64 | Bin 0 -> 1416 bytes .../e66ad32858df0ede4d144ecbbb968f46ba75899a | Bin 0 -> 256 bytes .../e67f1d371569323933bca29484d7d6554a9091d2 | Bin 0 -> 232 bytes .../e6847629357b258057711a869af7367ca576025e | Bin 0 -> 27 bytes .../e6e97f254b6668572894782fd0f2a5690be59600 | Bin 0 -> 504 bytes .../e6fc43f4c615088dfbb479e97fb46816c7439ae4 | Bin 0 -> 914 bytes .../e70834393c27778a4ded46dd2ee0de578a3d5124 | Bin 0 -> 260 bytes .../e72a9ba13ff7a812c6ebaa1e1dfba23616a5e0a4 | Bin 0 -> 440 bytes .../e72c74d99d4d0a01d1313f64b40583ac99e1b47c | Bin 0 -> 19465 bytes .../e739550e504acbee9334a98d8c77a9d6764701b1 | Bin 0 -> 300 bytes .../e73ea468df2fdef2ee20c8a494083e8fd9bfa5c9 | Bin 0 -> 54 bytes .../e75751553d6b1b234cea791d1bb68167fab57868 | Bin 0 -> 124 bytes .../e79be8049ac625f5eee3edd0883a75c23e8e33c3 | Bin 0 -> 544 bytes .../e7c31ff75dcf0ddfc12844d515661f1645ee0a4b | Bin 0 -> 512 bytes .../e7d752064d7ad49f1bd198cddb0390b4f56ca455 | Bin 0 -> 1316 bytes .../e7e6b6a93d6b25bf63b3c34c82d152a6f79b04bd | Bin 0 -> 41 bytes .../e7f5e9d0c160145cc5e103ee720e1b8e324fe7fe | Bin 0 -> 227 bytes .../e80173ad9755d1547c2f1d6ac33cafa26cf21a32 | Bin 0 -> 27 bytes .../e81646a3617995cf53a80119327841ac92d1702c | Bin 0 -> 750 bytes .../e81b16c070df04ad65975669ff27e5f1cc2bb502 | Bin 0 -> 236 bytes .../e8251b4e6eaf4b527f9f998cb433c1e103e7319b | Bin 0 -> 30 bytes .../e8275f71fe0347ec3635460c7f8bfbc0b58fffb3 | Bin 0 -> 24 bytes .../e8660d891837e2c2d601564af6ed4534cb6f3684 | Bin 0 -> 104 bytes .../e8d73200f9d21a7b677f7e0a6391b3c239b7b61e | Bin 0 -> 112 bytes .../e8dbe472ed970a317c151f33f88fff60a8c5c13a | Bin 0 -> 640 bytes .../e8f318d8df7ee29f92f0c3088bbc534afce71371 | Bin 0 -> 712 bytes .../e8fc58a1702f4cfeaeddaf6303193f3ee0d63cb8 | Bin 0 -> 396 bytes .../e9157a6c47964d8e3fc21b549b70a216525d01c0 | Bin 0 -> 128 bytes .../e92c9f53cc3146a7ba96978ed91185ad7c7964e8 | Bin 0 -> 369 bytes .../e9514bfc0f02f4c5629fed307093f78e533dafda | Bin 0 -> 313 bytes .../e9634753a8f7cf5584a42b9e2cb046a75f1bf296 | Bin 0 -> 102 bytes .../e9635361d394b9c39b6b28b4056cca1d64b639bc | Bin 0 -> 120 bytes .../e97f001444c2bb43dcf332735ef99eb9e7eb775a | Bin 0 -> 741 bytes .../e984950376b42dca8977d1fa5e95bc26ffa53c4e | Bin 0 -> 354 bytes .../e98f661e07cbefe8a67b02551b632b869a2c9699 | Bin 0 -> 324 bytes .../e99c53786e8a4bf34c372c71a255291e3d4a2aa5 | Bin 0 -> 15274 bytes .../e99d1e63deb410023b72e7b9a163c3c27f9b4140 | Bin 0 -> 236 bytes .../e9a211ffae6935e01e48fc2ce617422a509eb077 | Bin 0 -> 34 bytes .../e9a86fdc23d114a065efcefd96cd990b9d407e5f | Bin 0 -> 227 bytes .../e9b21ff038b0d7ac29115c793abd4167d7370f86 | Bin 0 -> 227 bytes .../e9c84cebddcf3ca59e27a8496393e6938f6cac8a | Bin 0 -> 102 bytes .../e9ea66cf93d99cf3c1665948fe35d96a0a175fbd | Bin 0 -> 1317 bytes .../e9fc7032384a99517842df6e9570ce2c476dd525 | Bin 0 -> 2578 bytes .../ea275882972414be610d6447b6e9e837bcdf33c2 | Bin 0 -> 177 bytes .../ea65224690609b7d2f6dd686cdc4049b49b1631c | Bin 0 -> 196 bytes .../ea7a0965486de23b4d57bccc0a486c16fe7ffbe7 | Bin 0 -> 240 bytes .../ea86a2bc944dd4381763d93a5ba0166985324d4a | Bin 0 -> 609 bytes .../eaa2f095be8a955addabd965ffbf1e4853b7e4b9 | Bin 0 -> 17 bytes .../eac4f924370d5e3dbc28233fe6233a85c37e9085 | Bin 0 -> 20 bytes .../eac72b779212b83863051de260150b95b3a7b99b | Bin 0 -> 1698 bytes .../eac8e4ed49435fe8d9663fd9acc7d21a98a9897d | Bin 0 -> 254 bytes .../eac8e5a23e5e1e40b7d30ec8586e0c662379d1b8 | Bin 0 -> 227 bytes .../eacd05fc97c91fd43adbad5e706ba7a339cbad6b | Bin 0 -> 640 bytes .../eb16bb520751e1367a48666d6baaef389870339c | Bin 0 -> 3400 bytes .../eb19d2a46bc17808ed47c6a1c1d138413ba8ef66 | Bin 0 -> 11132 bytes .../eb61f41e86485565067aea6cb8feee9c663926fa | Bin 0 -> 4340 bytes .../eb6eda2ae66e778d1dc37f9506e0f0dff83204a7 | Bin 0 -> 8584 bytes .../eb791ef9e0a5b71e5b941a39e4aa1df3e96be4bb | Bin 0 -> 400 bytes .../eb7b2c5304f701e07b6c736b2e405fc343f3a401 | 1 + .../eb7e4e73415ed37ed1be02c26fe4f627e8f1896b | Bin 0 -> 122 bytes .../eb95093382e347a38499b6a2b614bbf1e80def31 | Bin 0 -> 337 bytes .../eba4a0e39850585e320fd49bbefb0b1b7192c00d | Bin 0 -> 236 bytes .../ebdaaa686fcdb1ce4d36be833a089e226a412af6 | Bin 0 -> 104 bytes .../ec0521a603024741f669305116c3f84b2afbceee | Bin 0 -> 236 bytes .../ec2d89ba9fa6733f89a40d329f644935785ccbc1 | Bin 0 -> 505 bytes .../ec3725c6f5d36a810a10d3c93dc3d7bf4bdbe1a1 | Bin 0 -> 116 bytes .../ec43e2067fefb2075506534139989cb92b966e75 | Bin 0 -> 1107 bytes .../ec5e60cd9e0fa3594b60bfa5cf3a74341c9fb03e | Bin 0 -> 396 bytes .../ec624a22f5b372cd656f5e24fd69c6e9a43221ee | Bin 0 -> 142 bytes .../ec65d5125278be221580dd33e41a7dbabb384bcd | Bin 0 -> 512 bytes .../ec902b6095a3620e6a15c2782407bbb308f6a9a0 | Bin 0 -> 1473 bytes .../ec921940a201e8bc5f8352f0f872fb8c62696193 | Bin 0 -> 630 bytes .../eca07cca963c1075904c547e9593a708cf0106ab | Bin 0 -> 94 bytes .../ecdd07e7ce2338bf94c4e216cc2449f20d354dcd | Bin 0 -> 6945 bytes .../ecdfdeaf178402b7a642044a7513f4261d9a8485 | Bin 0 -> 12719 bytes .../ece8792c6c5e346f5d1cf1013afab3bac84bbae6 | Bin 0 -> 390 bytes .../ecf2097a46fba15dde63f8226a9db690860ba970 | Bin 0 -> 23 bytes .../ecf758f37fc7036818af92f3091c72b850f8ca24 | Bin 0 -> 504 bytes .../ecf7cad9132a4d7200efd4136c093202019d35f9 | Bin 0 -> 336 bytes .../ecfa3cacecb1b35351366f3e301ec9edea14c462 | 1 + .../ed05ac2c6ae468c08a09df980eb72c3286373e0b | Bin 0 -> 41 bytes .../ed0ebb9332c9d5bff8711c235d4cf1c8989f440b | Bin 0 -> 9019 bytes .../ed16cf45105a3e35a2dcb7f50d817956a46ebdc2 | Bin 0 -> 888 bytes .../ed2450b7c84846ab9425ad6f6e3cc59259cfe547 | Bin 0 -> 416 bytes .../ed28a0fce2532b149662de749ec18dc9fffd7adb | Bin 0 -> 740 bytes .../ed29ac783273e5ffbb92542b0f3f5424d50adca8 | Bin 0 -> 740 bytes .../ed7d189f546cb01cdb48261e5086a5c9f6fbca97 | Bin 0 -> 488 bytes .../ed95046d498814585520da6691db20d35c341ba2 | Bin 0 -> 168 bytes .../ed97fe87316b9f944a98101bd45330b108e7ac3f | Bin 0 -> 186 bytes .../edb1d8a2a5b8bba26def7c16245b337ab3cf014c | Bin 0 -> 112 bytes .../edc2cf2ae3313e0a6527d8d6217add8f25a39009 | Bin 0 -> 424 bytes .../edd034530ad7377488f6cae41065bb364a591ea3 | Bin 0 -> 872 bytes .../edd15eb1199af540ff828ef278a35a9e44c1c4b2 | Bin 0 -> 173 bytes .../eded9a490b72d199ce0b358dfd5630738f040d6e | Bin 0 -> 396 bytes .../ee08daf515afaae604820768c26addd51988f215 | Bin 0 -> 492 bytes .../ee0cb87202fe0e389f8bc18aa1bcba3668d9575a | Bin 0 -> 8840 bytes .../ee111a52a08511a985417a39e440e230f04ab3d3 | Bin 0 -> 365 bytes .../ee2d792097e1acfd14d3f018ac92ae32f5164afc | Bin 0 -> 416 bytes .../ee59f2dccf558eee2292c87974a92802c63f0672 | Bin 0 -> 104 bytes .../ee607f76e8b39433b6234d4e9355a854981af280 | Bin 0 -> 8390 bytes .../ee67cb38f7ded8dd07ed4b6edb95e92f28e9d663 | Bin 0 -> 102 bytes .../ee92c1a1b78c7c7c1bc51c8f6c719df444c83b43 | Bin 0 -> 7138 bytes .../eea412676088668c576470016d6ef6e77ab17813 | Bin 0 -> 340 bytes .../eea891a373d7404dada20405d9738818e7a20c79 | Bin 0 -> 400 bytes .../eeba1f97cf0560a07bf4cc734373ce15ccc4ab72 | Bin 0 -> 20001 bytes .../eebfcdb30733f173b2c64eb7d4aef075f9346366 | Bin 0 -> 112 bytes .../eef4f864c620639a0c2e71f8d8cae07b5ab83272 | Bin 0 -> 236 bytes .../eef588f67d45e558d36a9f38285518316048e236 | Bin 0 -> 2680 bytes .../ef14f59cc2d6b1560e29f9e5e6afa802e4934c1c | Bin 0 -> 376 bytes .../ef1707a6ff9571ed5ad29557a03819add0bf858b | Bin 0 -> 102 bytes .../ef35b44531412b9491b8cb15f365f6a92a47aef2 | Bin 0 -> 241 bytes .../ef5005f4850f5ebbe4a3f5b75b210b4e68958247 | Bin 0 -> 1424 bytes .../ef5404784b13cfd96d6b019d8e58ef211cd41fab | Bin 0 -> 408 bytes .../ef7460e1d7f49bdec855b39573f1e7633f1a39be | Bin 0 -> 186 bytes .../efa75afaa8cb1c493138c1377156b07f3473977c | Bin 0 -> 13810 bytes .../efaafe05f7e9aec821ea33441f2f4c9b61dde29a | Bin 0 -> 778 bytes .../efc5cf9b88d18bbab71dd724933e3e53a35c3f3b | Bin 0 -> 55 bytes .../efe310f2a47d29eaec901abba37acb12ba99f028 | Bin 0 -> 871 bytes .../efe9d37b5a34c083a637cd62374c6b7752737835 | Bin 0 -> 448 bytes .../efecac7818751b65b6306145c930123c71bfef1f | Bin 0 -> 16792 bytes .../efef9f68916a662052f6df53cd09398201ddd7a9 | Bin 0 -> 8333 bytes .../effdca9378f5afeeca1147060ae3093fe337b665 | Bin 0 -> 1833 bytes .../efff99c4132e09cdca93c679ad159199dd407e60 | Bin 0 -> 7288 bytes .../f006457ea319a5c87863254ce1dcd586b2d460fd | Bin 0 -> 196 bytes .../f00b402a4e1becee7bb0a16281c61ff13f6422a8 | Bin 0 -> 173 bytes .../f0196f84489384309705a8860204e29851ec5760 | Bin 0 -> 351 bytes .../f021f21d16c927d6a076ad378d7516155d816ccf | Bin 0 -> 327 bytes .../f0528edd52290b28d6941f232d13b3330c849ee1 | Bin 0 -> 102 bytes .../f0580003f4c8c0e4df9ec8c82d57c6bd5058e3ca | Bin 0 -> 102 bytes .../f05ed77068e6358842c88bed42b86f0053d016dd | Bin 0 -> 528 bytes .../f08336534682416e3407af225fd1486bdd1d84d0 | Bin 0 -> 124 bytes .../f08a9b96f8f82669a25ff7c38d3edb0b93cf9d3a | Bin 0 -> 3561 bytes .../f0913b25a75a014a5651b47f3e231068f11e12c9 | Bin 0 -> 120 bytes .../f0a51ac511372c48a83ba408c8b466be1fe96c19 | Bin 0 -> 112 bytes .../f0bef8fa4c0587888b806d7baa857e8e0ae2d2b5 | Bin 0 -> 529 bytes .../f0ca314bb79eba6a128de58a80bbe632a10a4518 | Bin 0 -> 121 bytes .../f0efa8060a3fbed122329aa6bd4377fd38e76f01 | Bin 0 -> 1316 bytes .../f103d87a77d95280ecc20d62b4774c93cf0df51b | Bin 0 -> 112 bytes .../f10471cf5ae5b977a04f27446cf845d4ba834413 | Bin 0 -> 307 bytes .../f113293ff92b1b5cf37f10e008890c128bfd1f57 | Bin 0 -> 128 bytes .../f11de1f989b6edcd073ef05a144b415ed6df68cb | Bin 0 -> 369 bytes .../f1343b06d4f43100a69af08b9b5731d9aaa0fda0 | Bin 0 -> 376 bytes .../f14c7a17216f7772de6df595aa08a528f2c472b1 | Bin 0 -> 102 bytes .../f14ee9668df5c1b5e5c7db9438ed54b8868f232a | Bin 0 -> 186 bytes .../f15630141ee1385a6dd02b26408089621646b4df | Bin 0 -> 164 bytes .../f16073fcf2a7ea4c6bd81a66fd0eaacd324c1b10 | Bin 0 -> 108 bytes .../f16348efac700373a2fc3ed5bb6b332e5ad03894 | Bin 0 -> 564 bytes .../f166f7a6c8734a3497760c362b27205baa7a3598 | Bin 0 -> 369 bytes .../f187dd6c990b97dff6b3e3b960bf9b40f8ce6bd1 | Bin 0 -> 663 bytes .../f1a5ccaa8a842f1a84ee4050f3e35d299406909e | Bin 0 -> 616 bytes .../f1a710ff9ecdefb29b38a8a8b891278a9bf4782a | Bin 0 -> 146 bytes .../f1b75d7ddc8c34ccef5b015a7f1a2c87868bbb19 | Bin 0 -> 183 bytes .../f1bc5a4ab248d451a32093be58b9b471bb1dfeda | Bin 0 -> 195 bytes .../f1d69dcecf0c8a1050663fb82b2c697165755426 | Bin 0 -> 112 bytes .../f1e3ffdbbf9dc80f271f9de7c1fc2e307048a284 | Bin 0 -> 72 bytes .../f1fa90b673d397e31605680c2999278b9f1e59a7 | Bin 0 -> 31 bytes .../f207b19e78c3250364221986a51057baac3cadbb | Bin 0 -> 177 bytes .../f20f83ce50c51d5d6e55b9e4abeba9413a4b2179 | Bin 0 -> 8310 bytes .../f24983a9a605d5e1a54c71684764037e801bc497 | Bin 0 -> 616 bytes .../f25372a0b18d4b589035f2bad801f4e99a99699b | Bin 0 -> 112 bytes .../f290fc63fad33a841a660fe57fa2306a2abe77a4 | Bin 0 -> 20001 bytes .../f296ae12060879b921795984a2d95da0a5aeb8d2 | Bin 0 -> 227 bytes .../f2c8576012e41c1d05acd88489bb6bf00159c072 | Bin 0 -> 227 bytes .../f2d322e0cba4e15b0cad8d90c05be69d89678e5a | Bin 0 -> 418 bytes .../f2f578182aa5ae77501391418784c0e70abb8bd4 | Bin 0 -> 64 bytes .../f31c888c6ac21890638ee85fd47ad948f60ef8a7 | Bin 0 -> 178 bytes .../f31e8635d4ce1b21371376380ea94aae3124b504 | Bin 0 -> 584 bytes .../f331baf21716b0b1c2ea65a97ac5d76f7dd4cc33 | Bin 0 -> 232 bytes .../f33a81819318523fdd0b2b175a2ab7950545bc37 | Bin 0 -> 2063 bytes .../f3619396171103496f527ac489d9faa39b43a9f6 | Bin 0 -> 102 bytes .../f3763c0b707501bad53a32c46ccace7f505af071 | Bin 0 -> 530 bytes .../f3899723eefe45e2fbf6d4bd3389da6d7b5fade4 | Bin 0 -> 369 bytes .../f392a1d851a08bc2facfb4a3d5a3779a3c85a76e | Bin 0 -> 357 bytes .../f3962ba3a9c1d4e91d10671d28efb7bf9c82a51c | Bin 0 -> 242 bytes .../f396507cee7658eb29fb5bf1ae1927486a1827cf | Bin 0 -> 12 bytes .../f39f31b65f47befe618cf565562b4b5706557f36 | Bin 0 -> 448 bytes .../f3ad00635d04d33db1b55438aaf04f9bbc6388e2 | Bin 0 -> 112 bytes .../f3cdfbd53c7b281f01460d39c49cd1271b792288 | Bin 0 -> 112 bytes .../f3d180a8ee83f6795383f0684774830f91ebcedb | Bin 0 -> 537 bytes .../f40b0d4d6c700ff2186b23307c5defca8d061490 | Bin 0 -> 64 bytes .../f41158b290c7758791b6402b3ae05feaab2216b1 | Bin 0 -> 129 bytes .../f44b97c86d901e717977222cf803fce5bcbe59d9 | Bin 0 -> 168 bytes .../f45215514abacac627b55e9c121aadf45571cb3e | Bin 0 -> 149 bytes .../f483b4553ada5539c34be5cba4b790dd3acebcd2 | 1 + .../f4a91dc65f59cdc22db75adc084031e5a7066f75 | Bin 0 -> 55 bytes .../f4e2b4521bed21c7ec4a4ab453618f7da0e86995 | Bin 0 -> 369 bytes .../f4e4247f9bd9615302a080c8dfae18450271ef55 | Bin 0 -> 1424 bytes .../f5023c9ed819fede7ee627539f23c4e9df5edba4 | Bin 0 -> 227 bytes .../f53841e711665c80cc02a64711bfb892a5b00ff2 | Bin 0 -> 171 bytes .../f56542ca7f14accaf0170e817770927449263b9f | Bin 0 -> 99 bytes .../f568ab6fd0141400a6db88d50371bfec040ef6e4 | Bin 0 -> 636 bytes .../f56cf7397d4b5a7010834d1fb766055f1d890cfc | Bin 0 -> 195 bytes .../f5701d543e870be38416d0d306172038b928a36e | Bin 0 -> 480 bytes .../f58fcf89726708a247a42cc8170991ec49c4fe49 | Bin 0 -> 260 bytes .../f593501f829cc89dbf19a4daea3b2dff4bd5cc00 | Bin 0 -> 380 bytes .../f5a3b9912397ef4a3025be7430d38a9114cf8824 | Bin 0 -> 104 bytes .../f5ac1a335cac242e59159dc59519ae4645a7a3fd | Bin 0 -> 178 bytes .../f5ad23b02831f26e348bd9a07190567b74a1dea5 | Bin 0 -> 376 bytes .../f5c9884ef56a3a163c791d0d50515db3c7ac6dd6 | Bin 0 -> 1448 bytes .../f5cceb22176cd225c9e43e709411229233a52f1a | Bin 0 -> 640 bytes .../f5fb1355d4d05b5411c8a46b03784105538b9d20 | Bin 0 -> 528 bytes .../f606fbdc5a066ef52b7f49389680d633899f488e | Bin 0 -> 1424 bytes .../f61de0a49faaa88b15749428f1d874eefdab6c21 | Bin 0 -> 358 bytes .../f63cadddc34d42687bbb3ea7d22506447a4b2a4b | Bin 0 -> 102 bytes .../f6672fdba15a15f4b1905181b00b71c921fd07b7 | Bin 0 -> 112 bytes .../f6763f21eb4575a05d05a9736de5cc9edf6f44a0 | Bin 0 -> 20001 bytes .../f67e9f7ec8d25961b4b9225409f9467965592d99 | Bin 0 -> 11300 bytes .../f69f13edd6b8e82f7b85e48f68f139f2e879d1db | Bin 0 -> 112 bytes .../f6c49052dcff5400e0e256595891bceed88626ea | Bin 0 -> 15077 bytes .../f6c80d39eefe340cc8faa268c0449e9f9219ca60 | Bin 0 -> 123 bytes .../f6fb09828614e8e05f3e312829d27479f8a91aa7 | Bin 0 -> 8310 bytes .../f6ff0aa972b46796da53b880944e53df20677d9f | Bin 0 -> 3720 bytes .../f7021691a3e964330b1afb484b736334e66a5fbc | Bin 0 -> 300 bytes .../f710815149e69fd3afd9064244de4fdc4993c365 | 1 + .../f71ce4ea670a58c4639dfc922fc07aa193e30718 | Bin 0 -> 471 bytes .../f722ddbff7ef2ec699c2fa925a98db8d1aaa1df6 | Bin 0 -> 324 bytes .../f72bb995309ab56c0917a46a71c164338d57bff5 | Bin 0 -> 236 bytes .../f72d46bf406f52aa4469b2ec04c403e889e0983c | Bin 0 -> 172 bytes .../f780648ed8c2d80a4ead8ced6db4b8eeca97eeff | Bin 0 -> 604 bytes .../f7826d57b1a5d3b4d8a407e07e941f2ef9cdb409 | Bin 0 -> 232 bytes .../f7d83bc44d823b63ef00d8449004844884575d28 | Bin 0 -> 354 bytes .../f7d9f95d13b12a20e17c136823fe1b22ac844264 | Bin 0 -> 24 bytes .../f806c6a4f3842ace543914391b568398e3d4c5fb | Bin 0 -> 236 bytes .../f82a937d441370a408bedd6648b8930f4105c3a2 | Bin 0 -> 9142 bytes .../f850102c64f57d2093b6a5aafbe60ec1f502c077 | Bin 0 -> 62 bytes .../f86a5a32ed3f43bc64194bb591b2e285b04be52f | Bin 0 -> 324 bytes .../f876a3b88e8519214c3f055eeff8131532163455 | Bin 0 -> 5528 bytes .../f89ac7f286da4dca190f0fa2686e9c1985e00995 | Bin 0 -> 298 bytes .../f8a858eb42beb2cb57d38f800ee10b7371df16ca | Bin 0 -> 102 bytes .../f8d2abf148b80edd1741d54e395034d8815ff04b | Bin 0 -> 120 bytes .../f8d36bb0141212dd2fac592b96dbd09eddbb317c | Bin 0 -> 548 bytes .../f8d39d0c344dd394d86a3b8506e84c35846e5a89 | Bin 0 -> 45 bytes .../f8f8b3ca4895445bc8060ad817d28de9c43ea684 | Bin 0 -> 15295 bytes .../f8fba6ccb6844983b0123c63aea4779c977fcbd9 | Bin 0 -> 112 bytes .../f916190b813b290427388579506702cc3fb3970d | Bin 0 -> 129 bytes .../f9290f3b12a8d92751942fa20c7f2166a209bf1d | Bin 0 -> 377 bytes .../f96265e9ff723e128480c3768c77ffbbad02745a | Bin 0 -> 221 bytes .../f98730c2ea7214201e1fb0f2dd11ffe79f1db0c0 | Bin 0 -> 797 bytes .../f9a7fb203187acf189879346349360d6f54458f8 | Bin 0 -> 480 bytes .../f9b48bd261f04220d7ad710bd60743881d79eab7 | Bin 0 -> 416 bytes .../f9c02f039eb03d71395b3fcde69350fd7197fdb6 | Bin 0 -> 128 bytes .../f9cbcf8b59dfc1a21ba865b871d8595651e737e8 | Bin 0 -> 258 bytes .../f9d2ba7c9daa914c289f47d83eaa29e1ac3a5412 | Bin 0 -> 14060 bytes .../fa0c9257b78782e9bab41c98b6ffdc343fd772cd | Bin 0 -> 375 bytes .../fa493fe381593e2a304a24e55ea8ad4f2a65c380 | Bin 0 -> 102 bytes .../fa7b5a9f562dbb54a77cf47348292dff7867e8ea | Bin 0 -> 8310 bytes .../fa7ec58afc3b72659ac7c2f0ecf4d09116a9572c | Bin 0 -> 238 bytes .../fa951e24268f784a0cc331f06806e2341af5189c | Bin 0 -> 32 bytes .../fab939eace0c19df489133f8e132b7c0537ddc16 | Bin 0 -> 40 bytes .../facf8f422730b61a4ce746bd170823dbc8da91a4 | Bin 0 -> 416 bytes .../fae60bd3f784ec0f590247d2c202a91f4fa6f452 | Bin 0 -> 227 bytes .../faead3aaa421a282b560e97b4b2900c452c4da75 | Bin 0 -> 104 bytes .../fb2ced73899b748a08b87c2efa56c09578835083 | Bin 0 -> 492 bytes .../fb2d7d892e9bcae2a612abd510f3a0ae8b716576 | Bin 0 -> 55 bytes .../fb530bac3592801ecbb85fc5e7d76d9612580c95 | Bin 0 -> 472 bytes .../fb5681858a2a8032fb1fbcfd51f68c3d080b0686 | Bin 0 -> 208 bytes .../fb574a5a3cdbc1970b4915ab3f8a03fb4e764b46 | Bin 0 -> 102 bytes .../fb74ac3710ea9c35b9e3dfe3f7e3a405cb84fc21 | Bin 0 -> 584 bytes .../fba858be23f44f9b0c6a3dcbb95d2f439aae47e3 | Bin 0 -> 102 bytes .../fbbc80f2be52603364401635b9ac579e86422c09 | Bin 0 -> 195 bytes .../fbd6c1392bd0a2ec2ca1578938e12a6edc117c6e | Bin 0 -> 104 bytes .../fbdec53ed9a341fb72d1d26b4c9e4673d37f8a68 | Bin 0 -> 236 bytes .../fc14525fe827050f8cf8a7c03316f60465a57816 | Bin 0 -> 1803 bytes .../fc555c6467c9aa496e0a865450034769a9ebfcdc | Bin 0 -> 1408 bytes .../fc61d81c72c31158c40366e02c56d4846b60444f | Bin 0 -> 624 bytes .../fc7ef2b6bdd56950c382a21e67d9f6e102011aec | Bin 0 -> 112 bytes .../fcb378e1df3f651d3ddbc08644270bf0151ff2e6 | Bin 0 -> 177 bytes .../fcb6c10d2916587e61876acbb1c9d5a751034683 | Bin 0 -> 128 bytes .../fcc46816c686530a78a0e8fd788efd044369a272 | Bin 0 -> 23 bytes .../fcd0dd060603e13fc5c4d1fae56d2b6ca0e87dd9 | Bin 0 -> 915 bytes .../fcdaf42a7f27be909599fba45af41f6dfb951a12 | Bin 0 -> 236 bytes .../fcde90c6ca2f67935f79fe19427c0f91091ddd0a | Bin 0 -> 9019 bytes .../fd2723974f25e5a6f87ccdc51ed0f6a6f32be580 | Bin 0 -> 1345 bytes .../fd30c9f8fe11a666c7e1d57a3df171dc51442b09 | Bin 0 -> 112 bytes .../fd32a5e3bcf4da6e92e85a99dc17f85b747bc3a3 | Bin 0 -> 4909 bytes .../fd3882351be9a6e034fcf9d6f3901a88dbf28e18 | Bin 0 -> 185 bytes .../fd38e5a57a338030d064f12e36c6995ce72db411 | Bin 0 -> 177 bytes .../fd40a7dce442e3bc6f01b94e3d97f4a1ba25f469 | Bin 0 -> 112 bytes .../fd58e24525a77fea3abd676f47e99b238aee264d | Bin 0 -> 175 bytes .../fd72a4a086392b212e937f3f89f594476720027d | Bin 0 -> 102 bytes .../fda50a63d5a75bf661c5c3694cac8e315f50fe62 | Bin 0 -> 102 bytes .../fdbac75260dd29391d66aa7da720d70a8de62b91 | Bin 0 -> 353 bytes .../fdd8786dd44b64b421884b192b056ae79cc15cc0 | Bin 0 -> 437 bytes .../fddb973118285b72224e6fbd7e198bca89473c9d | Bin 0 -> 63 bytes .../fde3836e83d7032c3ce422cd48faea5a7c8567f5 | Bin 0 -> 1529 bytes .../fde7fec21feaada069fa66f24e86a5fb9e1f4685 | Bin 0 -> 432 bytes .../fe00a0fbd2780be5b79a239f19b29ee4a38e8820 | Bin 0 -> 128 bytes .../fe00e155456ac39a6634bca25ed5e88b94171c89 | Bin 0 -> 636 bytes .../fe037b0a9598d7cb58011a6949cd8dab54f98c93 | Bin 0 -> 236 bytes .../fe284f96cca855a65f8f4ea0d22d82ee807ab0c4 | Bin 0 -> 12 bytes .../fe3b65ac3da97185015a10775ebc5943b7e5601d | Bin 0 -> 473 bytes .../fe50a8e384daf570a35ff5961435124a5c9e3085 | Bin 0 -> 1090 bytes .../fe580d8ac2802a14d7dfc9f95551863b7e0eebf4 | Bin 0 -> 432 bytes .../fe62328ddad04f6439cb73864a141b761bd32643 | Bin 0 -> 12 bytes .../fe8e5273f5b822149d1b9b408edc39e611b116f7 | Bin 0 -> 741 bytes .../fe99489572944ade3f99aa517d4e49bf3a48c199 | Bin 0 -> 112 bytes .../feb156839141e3a81373b27014d94643b4cb2372 | Bin 0 -> 117 bytes .../feedc0da65d08383e681a790c2aa91ff0f6ca913 | Bin 0 -> 9454 bytes .../feefd01fae313e779866c9ec5bd19ce729421fb7 | Bin 0 -> 128 bytes .../ff01dc0e9436e4691a680c20f7b5bcea91ad17ba | Bin 0 -> 265 bytes .../ff49bac394417c4c624d3c503a6e473b687f3644 | Bin 0 -> 473 bytes .../ff4d33206a96ea8358a09e9d8d8b00f7783112bb | Bin 0 -> 195 bytes .../ff63ddd2683e3e2a13ae18b20a1d8131552fa8bb | Bin 0 -> 1033 bytes .../ff89634750d34adf64d3260127c43ec3a04c2f40 | Bin 0 -> 195 bytes .../ff9006ae3b0364c076886eebce1416c51942abeb | Bin 0 -> 446 bytes .../ff94a1c2478603852203c85601b845f1696e5ea5 | Bin 0 -> 104 bytes .../ff9cac43940a2b0fb0649fdf5c331a915267bb60 | Bin 0 -> 291 bytes .../ffa5619be216040f5126854eea351406b781d5f7 | Bin 0 -> 221 bytes .../ffcf3ed49f07fad1216b9632c20612fdca08d09f | Bin 0 -> 740 bytes .../003e2514ee9f11b0a3ed3c56e6f897ea3158d86c | Bin 0 -> 340 bytes .../00568191eb6d224f8f989ffd1c009f766ee3d144 | Bin 0 -> 52 bytes .../0089650daaa68c8884536003bf9849c4351c678b | Bin 0 -> 3558 bytes .../0095a575a559d7cb5399c251641eed855dd8285b | Bin 0 -> 5917 bytes .../00ddeae8632e7c0a7040a747260bcf3496c4ae3d | Bin 0 -> 83 bytes .../00f0608cd4332fefb4f603607e876e7b93f46109 | Bin 0 -> 144 bytes .../026a2f830a0ab2d18390fe23f46d8c92250cbdc7 | Bin 0 -> 332 bytes .../028b7fed1a77134a8ba463d227cfabe1b3bbae9f | Bin 0 -> 1136 bytes .../02d625763d51fb4f68b1cbd009270f0f262433ac | Bin 0 -> 95 bytes .../02d85e646080bee0bdac6bfc07760224ca475f02 | Bin 0 -> 100 bytes .../02d8b1a33da7d252099321eb74ba39778a7835fc | Bin 0 -> 1067 bytes .../0326b1c3f0b7baf719520ed40e240a2ecaf4af37 | Bin 0 -> 354 bytes .../03b90f04674a58e1af65191769fe816e36257e58 | Bin 0 -> 399 bytes .../04286db00b45601ea17977e75a6dfcc558b28e2b | Bin 0 -> 1067 bytes .../0435de0a76087810cf8620fe46fb334e46f41092 | Bin 0 -> 146 bytes .../048913689f3518eb93289eb6fcc2ef9a59fffc2b | Bin 0 -> 141 bytes .../048a1577c90133583ef30ed13a74276ccb23abb6 | Bin 0 -> 98 bytes .../04b5c7d18ec90eb1d6efbd56f3c959b899a5ca75 | Bin 0 -> 301 bytes .../0521ddadea103c6124b4ec4c09a0d56dbfb8681a | Bin 0 -> 1067 bytes .../058bddd453d026f497800380b35130d02a6c1fa3 | Bin 0 -> 33 bytes .../0639a03713aab892ceb0e640547fa947375e463c | Bin 0 -> 1076 bytes .../063f592dd1db064dfa24e62af372d177594e1a8b | Bin 0 -> 78 bytes .../0651045b6f835a8440b3f361348142f1695e2121 | Bin 0 -> 87 bytes .../06834b75b3439ba7604f0c223b1d266f5f2cae88 | Bin 0 -> 1067 bytes .../0692826d58565ab1255489b2f936248f64a75606 | Bin 0 -> 301 bytes .../0770419b678ccb6ca7d64fbd9452e64e63f17876 | Bin 0 -> 100 bytes .../07acef79f693def9e3341f25a3f6f7bde342bf96 | Bin 0 -> 120 bytes .../07d938cfea3fa409b0e1cf7693efc3685937f421 | Bin 0 -> 1067 bytes .../07f3468358ab4012a292e51403032548dd95ae4b | Bin 0 -> 170 bytes .../08738e1e235d4349201765e7a157e246581a19ad | Bin 0 -> 332 bytes .../08a04cc8467619f4c50d5a18756de1739503eb26 | Bin 0 -> 318 bytes .../08c8b3a0c94a979339228af8d889ba4f27da4e1a | Bin 0 -> 65 bytes .../08f347b41e8f6407f35924adda5f106cd600cc43 | Bin 0 -> 1782 bytes .../08fafe4016e5bbb41fe46b54fb299aad70332ec5 | Bin 0 -> 124 bytes .../092a51864911eefdd13bfce8d6ea8e0f011fe788 | Bin 0 -> 78 bytes .../09354f1f6ddc1ac459df97fd3b522167e59b39a3 | Bin 0 -> 621 bytes .../0948289110fe992bab9d047b554367e0677bac7b | Bin 0 -> 254 bytes .../0950e0637c0d69fe222a9fa1dce5fe48c0d331a2 | Bin 0 -> 7363 bytes .../095b2792a5a262a0ac5e35e5c89d38e24cf589f3 | Bin 0 -> 804 bytes .../096b35a0e404d1f2a5577b02caf317ea0cbf91d8 | Bin 0 -> 152 bytes .../098208056cbeb946e913c40dcbeb85a7e76b61c8 | Bin 0 -> 3810 bytes .../099ba1a206336714a72affd51a1802b7667fdd26 | Bin 0 -> 630 bytes .../09b15c6338fa8f553912d872fc2d8e91336720b7 | Bin 0 -> 52 bytes .../09c5db4fb7c27c27a81a60ea07938c879241c51e | Bin 0 -> 9462 bytes .../09f27cac07bb48e184de73e354e25cae7fbd5779 | Bin 0 -> 444 bytes .../09f87bc7ca3ad60394fcb2601cb54bbc9486aa74 | Bin 0 -> 350 bytes .../0a0a450c5794be9fb982f13fadc95f934ad726a9 | Bin 0 -> 136 bytes .../0a7da7474862f72f06def1b974ad6d99ba2b057b | Bin 0 -> 330 bytes .../0a7e346872eb38051e764ff49f07973f5937ec40 | Bin 0 -> 630 bytes .../0ab0230dc85dbe79171312ab0b3d2e48151ecb5d | Bin 0 -> 7415 bytes .../0ab2341d647c578dd916f4c2224ca2ec2ba0570d | Bin 0 -> 1839 bytes .../0ac1b75580216b0c8c689996cfe2ada947132da0 | Bin 0 -> 128 bytes .../0af592acb69c287c6b318223393d41c3091d12c3 | Bin 0 -> 1067 bytes .../0b04bfe88b60b5142fc122598230f0ae4b9b98d3 | Bin 0 -> 62 bytes .../0b308cd5300ddfb0fb71b8668c9622b15ed3e21d | Bin 0 -> 137 bytes .../0b84b22ca9bfdedef7ade08bd961c3d9043cd7b5 | Bin 0 -> 1067 bytes .../0bc7cf1c2ac68bedb68d79fcb0184c0863380593 | Bin 0 -> 38 bytes .../0bf3425f4a7ea3fe4e8aedaa696ef3cb8bbb17df | Bin 0 -> 82 bytes .../0c16d5f821ac930aac44e2c77c801c187664f8e7 | Bin 0 -> 589 bytes .../0c73c47f78b5f8497f3306a90a4a66f2997cce2c | Bin 0 -> 371 bytes .../0c80bfe962eef7d0e65de0d6f4527e7cf66523e9 | Bin 0 -> 274 bytes .../0cb7c8c4db066f456f280136524577398143ea24 | Bin 0 -> 1352 bytes .../0d65068c2e17546b073f5a8ff89026ee9b4f253c | Bin 0 -> 371 bytes .../0d670f722944f5b8860e79bdbbe3bd5500750933 | Bin 0 -> 478 bytes .../0d9c88142917f3855f81be9327e3bbe07ee35370 | Bin 0 -> 1900 bytes .../0db6453c788d8ae09dca0709e2c3fb4a4cc5160a | Bin 0 -> 166 bytes .../0ddda024e28aef18366c5cec005c24c480fab721 | Bin 0 -> 332 bytes .../0e12cdb93321d3fe6bd910c9e9901eb50992b0b5 | Bin 0 -> 11 bytes .../0e27825c3c9af8b915cb4b315344d366e70b825b | Bin 0 -> 153 bytes .../0e37dd2c185dfc1d70c57c3e193789ee69d8aa53 | Bin 0 -> 109 bytes .../0e745d5a1a3a84114c12847900b3be61dff8e284 | 1 + .../0ec235877a37027853ee5cff61308b6fc032034b | Bin 0 -> 340 bytes .../0ed020c00521eac46e4898f54c5a917623b42b4f | Bin 0 -> 708 bytes .../0ed5b059c60679bb447bc4ca3c783c48af1110e6 | Bin 0 -> 226 bytes .../0efb72bf566bf70ccb51bae98a8eaf0b65c98788 | Bin 0 -> 435 bytes .../0f286564b334ce83cf14481e30fff5cbdd25d444 | Bin 0 -> 73 bytes .../0fa52d85711ea7d64d94ffcb1bfe8ccd9180e10d | Bin 0 -> 1067 bytes .../0fc8d0201bf80e48526d678c07f0097e57e89ce8 | Bin 0 -> 318 bytes .../0fcb9c0c3ec371ec61cceae3be2235086fd03d73 | Bin 0 -> 272 bytes .../0fcd273ba7d20d93228fa1da96060491e49f192e | Bin 0 -> 24 bytes .../0fe5d279320bcd5395119c6a301c9e76ae7ac631 | Bin 0 -> 946 bytes .../0fe709ef40a1acbe586e3101843c417499ffcb54 | Bin 0 -> 332 bytes .../0ffbc8752fb90249a7c3912ec4ca8080ea4aaa5a | Bin 0 -> 1782 bytes .../1035840e1c97e9b62263962d3a8934c1a3f730c5 | Bin 0 -> 428 bytes .../1052bbd2853001261af2097004bddc9a9298f84a | Bin 0 -> 708 bytes .../1079e243b0b762503ce5c0dcdebb8d18eea040db | Bin 0 -> 172 bytes .../107f8546582cd7d17ebdfc194217e18f7df78e7e | Bin 0 -> 1452 bytes .../1088bb7c1c6359902ab9e5c099250683119a8e2f | Bin 0 -> 3983 bytes .../10e5e552ac326cbba75bf79609b7b7bd69acde87 | Bin 0 -> 200 bytes .../11118ee94a4ed239d2da740cabbd755f52d1f048 | Bin 0 -> 1275 bytes .../111537830d5aa385d9c00c1a18a4ee28b1174914 | Bin 0 -> 1361 bytes .../11704eb0b54e1cd55f57c2fac792f514b1c18604 | Bin 0 -> 340 bytes .../11a26703e25658de2c37e233637e480ba81262d2 | Bin 0 -> 172 bytes .../11b202794e9cc4d415102184a4f477ac7759ffbd | Bin 0 -> 301 bytes .../11b819b2ba1dd5d72ffde90285917fca9d905b34 | Bin 0 -> 17 bytes .../11d75c9164a19835a4f5281034ca89be6f9fbdf3 | Bin 0 -> 113 bytes .../12375fc9ae9d2307395b57168a26da95c720a143 | Bin 0 -> 128 bytes .../1261bd016a54326613f0165571b9ef128861dff9 | Bin 0 -> 98 bytes .../12a5aa92c636b9e6fb2b9aaef68c340e5a892e84 | Bin 0 -> 15 bytes .../12f1d47eb7e9909bbdb6f0fbaa13c95efc4995ba | Bin 0 -> 444 bytes .../134fe32aa732f4b8d4ae57ef354dbee82bdc6534 | Bin 0 -> 199 bytes .../1399f9e942d935afe716c81d86e71f9dc258f02d | Bin 0 -> 80 bytes .../13aadef19e4ad77e783b41ac19de415da39910de | Bin 0 -> 33 bytes .../13af2ce816852e3251f3d4331dc4d21ebc401ab9 | Bin 0 -> 1455 bytes .../13b827f952989b3bca7388196bfda5bf01b589e5 | Bin 0 -> 113 bytes .../13e1cc4e698eab265838de09d7df6f9606c924a4 | Bin 0 -> 80 bytes .../1413e2df3e3d585ab0e55cb4ad1357ef7532c3d5 | Bin 0 -> 157 bytes .../14811bdaf6f7fd6c21500249472115305d6deeaa | Bin 0 -> 19 bytes .../14af207a978be3c0d81894082b625fb8f5a098ba | Bin 0 -> 1782 bytes .../14c8314419cfb3f31ebc0e250d08022f4913c898 | Bin 0 -> 78 bytes .../152f8c9c8896ba5b1de1d58a8623d38220d82951 | Bin 0 -> 589 bytes .../15581223004d6cbccdb344d4854750ea994040f9 | Bin 0 -> 72 bytes .../1563f6e7b987b63264d89b041ee94305ee2975e5 | Bin 0 -> 708 bytes .../15f8fb77f4dd8b111e28453276cf996d16ae0ebd | Bin 0 -> 233 bytes .../160034fa691e40a0f4b597745333542ebf55c08a | Bin 0 -> 166 bytes .../16348b9318d1a2dd7587296a846bdcf4e4aaea93 | Bin 0 -> 150 bytes .../16ca88aa2763ca7d8541c377a7ddfac6ba5da99e | Bin 0 -> 369 bytes .../16fcb7838fc73dad331a74e930c8312c3590b537 | Bin 0 -> 110 bytes .../172c56f6be6ef8d9808a378bdc5418862e583965 | Bin 0 -> 128 bytes .../17a4a12b2723e790859808d7234ee7a5c6dffdba | Bin 0 -> 181 bytes .../17c08dccd8b4354cffead4b0c0a153e2ab5d3db9 | Bin 0 -> 95 bytes .../1824072591c9ca74f58089ec3bbff1d07793f0a3 | Bin 0 -> 345 bytes .../189e0e8d6c3762f15954b06d88127e707b5f6134 | Bin 0 -> 159 bytes .../191f57f194a324c3ca08dc06797d945f97c4cd2b | Bin 0 -> 227 bytes .../194ed5bec80bf4f5dc3e80490fd1ff521446aae4 | Bin 0 -> 435 bytes .../19887b74faf12329b0fede33aaef2acb292511c8 | 1 + .../19ac5dc0407e92115fe4c0a8344e7f86d9270446 | Bin 0 -> 100 bytes .../19b8be8a18bb7fd6bf0732527312ac3a9e4b185e | Bin 0 -> 1067 bytes .../19febc5e8dd7cc9dc64162cf7225787810c40f1f | Bin 0 -> 1869 bytes .../1a464d62c1185873d1975cf7fa72b39af8cb0a46 | Bin 0 -> 110 bytes .../1a479d4f57b9d6d760f09f75350fd8ad5a3eb4bf | Bin 0 -> 301 bytes .../1a4a1426ad9bb71512d1efcbba233c4546d3d056 | Bin 0 -> 422 bytes .../1a561f2330e80d67edab808eabfacc1000b6c654 | Bin 0 -> 1067 bytes .../1aa63280cff8e21e9d47113efb1f1d9669056439 | Bin 0 -> 353 bytes .../1adff49ddd401107e34feee3fd61db40f59be663 | Bin 0 -> 1067 bytes .../1ae423c1eb5d5b56e26d9b9b6c5d71821f53d069 | Bin 0 -> 4851 bytes .../1b03a59de7897602b3751c2f8fc33dfe0d7aff62 | Bin 0 -> 231 bytes .../1b1f132e7faafb77c045f5f9b35d3b7449b7cf41 | Bin 0 -> 140 bytes .../1b9ee022c3a5af26f083c1716eef9118a38792c6 | Bin 0 -> 37 bytes .../1bc542ea2470e32e2dfac814e91b51bd716eed6a | Bin 0 -> 129 bytes .../1bde87b22b737d83ab42121a3de1848993e2c983 | Bin 0 -> 499 bytes .../1bf51d512cb52324f41830e21a2bb0ea6c143f69 | Bin 0 -> 1067 bytes .../1c8fba3b6a96df986f7fdfcd6c62a9e87776c49a | Bin 0 -> 357 bytes .../1cb6af1778a1f1cbbbeb567f105f1e7ad52cea8e | Bin 0 -> 471 bytes .../1cd713750f0b03f5b3b268b3f048a854dd85c95f | Bin 0 -> 150 bytes .../1d84f53e1fb44a3840baa86ff1830e1ce47fc236 | Bin 0 -> 1351 bytes .../1d878aa4b95eed171098d7bd3f3c6081cee59d63 | Bin 0 -> 152 bytes .../1d897fc8ce4804fecbe1031a8023a70926003888 | Bin 0 -> 1352 bytes .../1d916d34f451b4d12c956e93f42c6563a801952e | Bin 0 -> 4492 bytes .../1def78aa70056fd6b91eddea37061d283b3be9da | Bin 0 -> 57 bytes .../1e186b9e788b763e08b4f9a8c651ec2ce119e980 | Bin 0 -> 146 bytes .../1e67e9a29549f0b821d8da54a4398fd52490384f | Bin 0 -> 708 bytes .../1ea019d3dcc0c7318aa2fe0d4640cec8b3c32706 | Bin 0 -> 212 bytes .../1ecfd0553519e3dc83e2a01cadb41f268b6f8c15 | Bin 0 -> 95 bytes .../1f3500f7a03100176b514d44ee9415fc90cd4c1a | Bin 0 -> 732 bytes .../1f3fdfd88967726168104d8b159ae4ca6be79399 | Bin 0 -> 213 bytes .../1f4c5e5fdb78fed8374516231cc09f9eaca0ebd0 | Bin 0 -> 36 bytes .../1f5f7e57985da7cefa325c454766f32e13cab5c4 | Bin 0 -> 6271 bytes .../1f927094cf118151af336c8c8eff02a7c19de78b | Bin 0 -> 37 bytes .../1fdf3a46dc9063bc43ea01094e305032dcb09528 | Bin 0 -> 31 bytes .../1fe1df9f567c586bf8e29e3f312e11e40c1dcbea | Bin 0 -> 78 bytes .../201c9cc73cc08cb3fa371c6b2215c1f5d46ac25c | Bin 0 -> 33 bytes .../2057d4a7817e25cb521c8d8b065dd373da696f52 | Bin 0 -> 354 bytes .../20d6ce197dedc50e47af225b1238eb226f10a80e | Bin 0 -> 357 bytes .../20ea0ad021c4a12ce3722f7b461cd3334eec9b2f | Bin 0 -> 214 bytes .../20f09ad271c8f18091f65ea793fe384189060137 | Bin 0 -> 146 bytes .../20ffffb54f0f0be6115f76a6fea8577b1b3d5d75 | Bin 0 -> 123 bytes .../210285e8434bec5c2e265275458ed792a90bbcb0 | Bin 0 -> 317 bytes .../211c20a1c291591e70cde1b9227666665531a37a | Bin 0 -> 332 bytes .../2140578eefd8b5ac320251d183e3a6e4406d2dac | Bin 0 -> 143 bytes .../21bdbbea88c58914db896adadea0765333fa9008 | Bin 0 -> 94 bytes .../222d04cd15dd0dc67076d25ddaa949fc08cb89ab | Bin 0 -> 457 bytes .../22645b167c486ab8a1a0151a87a6df01d9b91906 | Bin 0 -> 23 bytes .../22677bc18266e28be74af2c66f598b9260a3f0b6 | Bin 0 -> 1067 bytes .../226a77398b9dc85fdf4db33db62afcd7440b5480 | Bin 0 -> 328 bytes .../2280e4ec737af229f5f8b09089f1f67298b6e024 | Bin 0 -> 89 bytes .../229a87edb3228c41d5e42959085e6386fdaafde9 | Bin 0 -> 110 bytes .../22e3e6f6f077a7842965696c3043c5884a9af3fa | Bin 0 -> 1509 bytes .../22f57f3ca1f373d3cf62cb1059629ba81d2ee837 | Bin 0 -> 33 bytes .../2306d844c94b942385eaab5380585b3c69a3af57 | Bin 0 -> 52 bytes .../234c7f8d7fa538efe59d90a2f2bdb61b3b63d4df | Bin 0 -> 147 bytes .../23c9e421c0ac9a6a8c737e6a2ac153a19e6750d1 | Bin 0 -> 1782 bytes .../23df07e5d8c23a5df9c506cc0fa797ad8715fa06 | Bin 0 -> 1067 bytes .../23e347badf9f32cfd088cad404bdf519a2649764 | Bin 0 -> 39 bytes .../23fde1c6a77d204c6d54670e5f6ee3cf6aab7c5c | Bin 0 -> 98 bytes .../2412196a310f3ec915aa2732b06d02c4f347969e | Bin 0 -> 93 bytes .../24820b4f75efc850693384ce782f4bfb0320a0ef | Bin 0 -> 16 bytes .../24e99b50deaaadf072f2efaa7beaaa85c7319aa3 | Bin 0 -> 65 bytes .../2516b0c74cf0a1a84540b080a6597b528096d1ff | Bin 0 -> 369 bytes .../25373a4ad20a5fc2728b9ef7a8d86f855cb34497 | Bin 0 -> 684 bytes .../255b9bec3ef74bb36abeb8d03110435022039538 | Bin 0 -> 763 bytes .../25605cf299a0a296e15a200e7219bda843a08886 | Bin 0 -> 166 bytes .../256b243656f99ae8002b58a232cee8e3c4c377ea | Bin 0 -> 95 bytes .../258346352bcd62e5aded3193fc04e47e042172b8 | Bin 0 -> 763 bytes .../25841925f8c9ae076b3e5a0a80aa45a49851f2e5 | Bin 0 -> 2349 bytes .../25aa1f4d0fd2802d8acc5a31161eb27c073670c8 | Bin 0 -> 963 bytes .../25b101e743b3ed40f0185d85ec5912db10ccb5e3 | Bin 0 -> 444 bytes .../25cd2e2fe927d500ff144151ec4a2611c61341fc | Bin 0 -> 1452 bytes .../267796f6f4d875d616428e52621b582685f038cf | Bin 0 -> 92 bytes .../26f03bb6e35299989935811337281daee9908948 | Bin 0 -> 917 bytes .../2710d29c334df30118153c2af91477e08d008ec9 | 1 + .../274fce5ddc87c5e5edc7c3be7e0e4e60cf44680a | Bin 0 -> 1993 bytes .../2758660414acc07f1663a2bedcef4bd4c13759f4 | Bin 0 -> 357 bytes .../27d6ee1b7316682260ffb5d2a5fe411944d8c959 | Bin 0 -> 137 bytes .../2813aeaa1930b7bb09752999e563d303fb2a4a09 | Bin 0 -> 78 bytes .../2837aa39984117d41d4398581c4703dbbd5d766a | Bin 0 -> 104 bytes .../286e1acb4e21adc01a8aa0ce0254fb33f2b3d46c | Bin 0 -> 78 bytes .../28938b9318b41f9bf32201e7efc1168cd1f74647 | Bin 0 -> 124 bytes .../28979696dc88f0c49fed8a5f7a90da8fe6eb86e0 | Bin 0 -> 621 bytes .../28aff84462e1ff032a3ff1a60cb0e1802e4b2ccc | Bin 0 -> 1067 bytes .../28dfe5440e8ad69fac72879f21c5ae73f6b0874d | Bin 0 -> 128 bytes .../293cb395e878286fd52eff1c3ea1489d4ac11004 | Bin 0 -> 332 bytes .../2980f09c2cd9b38d20dc1d85849853a055343b09 | Bin 0 -> 354 bytes .../29a725b8f64bb5103f23b7f8602714f40773f5ce | Bin 0 -> 127 bytes .../29aa4ffbbf0b097e0df31ede2e966b6d4ffce5b1 | Bin 0 -> 141 bytes .../29b725b98bc35c10ed6dc9118295b8309f823261 | Bin 0 -> 1067 bytes .../29d0877611b98bbb1eba59cf779731fdc3eabd62 | Bin 0 -> 548 bytes .../29e724937f95b7b1c630532fd492661a6479bdea | Bin 0 -> 177 bytes .../29f01c4e27e117c945cb24a17a54b9af6b27e009 | Bin 0 -> 64 bytes .../2a2d01bcef21598bedf2394ea638f4cf4bc4b8c0 | Bin 0 -> 1275 bytes .../2a36ff01c34b46feb54adec0ff739cd279551fad | Bin 0 -> 89 bytes .../2a8a35c937e4b9d98e23bfb4aafefeeac6cbb8e2 | Bin 0 -> 1475 bytes .../2ad9f0861d32976ff51715ab790f73806d921f95 | Bin 0 -> 78 bytes .../2addfa2cdac4c5d2f6b20bc999d557f55e20778d | Bin 0 -> 78 bytes .../2b1704f029a911ac4550a755a27f3abe0a1c971d | Bin 0 -> 4174 bytes .../2b46d37e081ec9b8b3a49a251d8d9452cc686fc6 | Bin 0 -> 52 bytes .../2b7596e0522952ebbb1c15f566e510c9ecafdebc | Bin 0 -> 116 bytes .../2bc5505749de346522b34ecc93bbe56ad15ec487 | Bin 0 -> 70 bytes .../2c60ba2872ee565b6c18d9fd1610c22d01a0df10 | Bin 0 -> 23 bytes .../2c8139e860e80dde767e5d44de8b98908d86170a | 1 + .../2cb9305ede03b14a6f4c0ce5d50275fa7d4f87b3 | Bin 0 -> 166 bytes .../2ce15df7718a68df2ae320c07a1ab6293a2f7e5e | Bin 0 -> 375 bytes .../2d60f9e759bef3d5b495a666a5e780e875ef7251 | Bin 0 -> 209 bytes .../2d64651ee6534e6b0bd4fb720771e68d4095b8fd | Bin 0 -> 2131 bytes .../2d7375772fde3b4cbd9703b1b553ef95fd780c76 | Bin 0 -> 52 bytes .../2d880c248a2e2e6918935976721f70d798591820 | Bin 0 -> 708 bytes .../2df27b0263191cb8029ca6f646f543e647c5c6ad | Bin 0 -> 1019 bytes .../2e21ba62ef2878ea8a677a4cae6e72a38f95d8ed | Bin 0 -> 83 bytes .../2e230e137591afd8795d6b182efa4fc5db6ae573 | Bin 0 -> 5191 bytes .../2e37d9fecf2a298c5efbf4630cd45b5939bb1cd1 | Bin 0 -> 1782 bytes .../2e49c982af1b02ee334cd53ca1e8e45ef7e05343 | Bin 0 -> 1067 bytes .../2e730e54a859602e090a864dcc944cca3400c69a | Bin 0 -> 332 bytes .../2e8b9aae058dec5eaf5ffaaf7f6d6e3aa69d97bd | Bin 0 -> 43 bytes .../2ebecd32553f93f21cf13a6a11a44f0c9f6aa925 | Bin 0 -> 181 bytes .../2ed0364ed3e71787975d57c3e9d64b847b3f9f2d | Bin 0 -> 208 bytes .../2f3e5bd16577b7d0082c1acef896e690186d8263 | Bin 0 -> 36 bytes .../2f4c346a226e1d0bb04dfff94bb7b4fe84a7a62e | Bin 0 -> 1067 bytes .../2f5bece0b905131891fa05d6add3a9918c72f6da | Bin 0 -> 30 bytes .../2f6520a82818ac7ba70b6fb5032303254e81bb41 | Bin 0 -> 1067 bytes .../2f6e9e72b98dce6c32457893c6893d06e33391ab | Bin 0 -> 4620 bytes .../301611fd829899aeefc10c1806839d52e9bff8b2 | Bin 0 -> 78 bytes .../30516a487b2fe5e9d84976c595216cbba901c364 | Bin 0 -> 112 bytes .../308a0c8e3520d518461721197382a92e57acd403 | Bin 0 -> 152 bytes .../3102f9f0277b0d1ad0870ebf7d956fc90ed593dc | Bin 0 -> 1067 bytes .../3122e0ddfa7d5921bff205388f5143e28df9d3e4 | Bin 0 -> 570 bytes .../312e340ef31b5a1dc6e4decaa64615f17d66c773 | Bin 0 -> 199 bytes .../313ece21d0b636ab0cc35461079b62c9f1e1ada9 | Bin 0 -> 112 bytes .../315b5e8dc1e4e380603abe1fbe367dbe694befe8 | Bin 0 -> 1067 bytes .../3170354e0e9811cb9b0b485b564a0b6f89838ab4 | Bin 0 -> 95 bytes .../31a449e6adda7efa88a489fb61d8deeb626e6f78 | Bin 0 -> 82 bytes .../31b6978ed3a1b4e33fd13ffc3a2078b219786430 | Bin 0 -> 1067 bytes .../3220d8d8ab6b2aa0e0cfce577741d393c7238f4b | Bin 0 -> 1140 bytes .../324c11f6d6df6550c5cbdb7dc63306c7cb8eb244 | Bin 0 -> 1171 bytes .../326f6c2615775d666700bfddaceaefdeefb1e62a | Bin 0 -> 1067 bytes .../32aeda3015a73b375beb4bcadbf6445d647af8a9 | Bin 0 -> 186 bytes .../32b86532e5e22b82965f3ed91faa361e6b243089 | Bin 0 -> 78 bytes .../33708ec58c572a8e36014f7669a61f171d321e96 | Bin 0 -> 167 bytes .../3377dcd98d7cf9446f13cef5c2c9eb4bfb46a574 | Bin 0 -> 45 bytes .../337d3e11dd3f3b6eea5d9ef3bf627e44b1ec79a5 | Bin 0 -> 112 bytes .../33b7ee1c60c36076763eef222dac16cb70bbd966 | Bin 0 -> 515 bytes .../33f351ca771b9a3f32c47dadae35e253e5ba0779 | Bin 0 -> 8692 bytes .../3412813c214b49214edc7df77defd66b9d3a539b | Bin 0 -> 95 bytes .../341688e26c0069a2713d2b28ee61282139ff3bc3 | Bin 0 -> 79 bytes .../3459b27eb942111985d0faf565842af6ba56e80c | Bin 0 -> 98 bytes .../3479f5b116b1e5222b90fcaf56e127dfafd55d47 | Bin 0 -> 5539 bytes .../34988e8c89efcd58cdc83cc717e1e4c0e66c09ba | Bin 0 -> 80 bytes .../34f31d25fca7808c297e6b172c884cdc0579ca74 | Bin 0 -> 396 bytes .../36345b610756b74582290fa60b4c81278535ef30 | Bin 0 -> 290 bytes .../365131727604fc9b8964c38f34ec0d09b63544cc | Bin 0 -> 67 bytes .../3662e44ee5b14b719aff84578667ad105873ae44 | Bin 0 -> 708 bytes .../3728a5f672b3022cc16e99182bf390bd8acdfd98 | Bin 0 -> 856 bytes .../373826ea52d6c0512cd90aab14acd1bf227aeccf | Bin 0 -> 192 bytes .../37502051478e36c24b849d9616e8065723f502c7 | Bin 0 -> 97 bytes .../3768c49592f45afb1dd62ef5bc605765fe53a863 | Bin 0 -> 332 bytes .../37fb8c70b5a851ed71c9ee92ad94bd925cb1d22d | Bin 0 -> 51 bytes .../38035c643b21b32ef3163f9c7556eab472232533 | Bin 0 -> 523 bytes .../38937f2396248a1ce68850aa4ce17696306827fc | Bin 0 -> 1782 bytes .../38cd3cd6ca9131a3ba8a5aa0028dba7a68e18141 | Bin 0 -> 78 bytes .../38d052ce80fb98c4ed38abb926e5510b078d6884 | Bin 0 -> 1067 bytes .../38f5ba63fdc479fa342d26c76a9d1df43a525fe8 | Bin 0 -> 91 bytes .../390306c495328264546183c12ce3278f8beb688b | Bin 0 -> 1067 bytes .../39182f737d28b1c08c06fa3b164f2b97ed4f9f07 | Bin 0 -> 177 bytes .../39289bd80a52d0e8c8eb4145373a8d8888687536 | Bin 0 -> 1067 bytes .../395a03c5493740414a9a88f402f330f1abc5f1c0 | Bin 0 -> 1352 bytes .../396e16a556e7ef4a50c246c12ed99330926f3cf0 | Bin 0 -> 1782 bytes .../396e83a577cf8b214069b71ee42a94d791898e05 | Bin 0 -> 113 bytes .../39f6a1dffac678771443d54cd47d4e64c5aa36a0 | Bin 0 -> 113 bytes .../39f8903544d95fdf92ac4e30c3f698734f0bce08 | Bin 0 -> 301 bytes .../3a4eee3ccf62f510d906d865470e1bda299a66e8 | Bin 0 -> 77 bytes .../3a647deee3652c0bb7817ccfc91d8e8864647d37 | Bin 0 -> 105 bytes .../3a70655ce9e9dd1e58486b28b99f24132bfd34c9 | Bin 0 -> 87 bytes .../3aae884e84ea7781b3feebf97b733be00a54fea0 | Bin 0 -> 1304 bytes .../3ad138a3ec143614dfe21fed72ea2d2f82e47905 | Bin 0 -> 539 bytes .../3b2f78a432ed0fb4b50edca68c96ce2d3a4067d8 | Bin 0 -> 132 bytes .../3b48e5681a868c141c59d378a5038f3e835cbf49 | Bin 0 -> 3172 bytes .../3b57da811bc18c2040edc05a07cb180b7db419f4 | Bin 0 -> 1606 bytes .../3b5f3b8d26f97e1774fa7890adb5477d96349f1f | Bin 0 -> 731 bytes .../3b79a2da67f3058a53a844f11ba2f3c46f33863a | Bin 0 -> 137 bytes .../3b79d1e6628c917c1cc694cb3e67c58de774ca88 | Bin 0 -> 149 bytes .../3b95ddb809e58aa3bc6464ece69d678aced37e49 | Bin 0 -> 622 bytes .../3bb100ff875b93f5f49b038bec6633f6e02ac3b7 | Bin 0 -> 2234 bytes .../3bb588d27afeb394560297c5ae081fbe25d3a34e | Bin 0 -> 986 bytes .../3c259b3a84fea77037a8315c1ec2d88b578983d2 | Bin 0 -> 110 bytes .../3ca53a9b116f2b4ad363fd98d79f8ca26db590de | Bin 0 -> 3028 bytes .../3d43fd708ca841333207e91dd84f030f99545a61 | Bin 0 -> 371 bytes .../3d7ed5b583974d5ada0b328d0a06cf6aac49c3a6 | Bin 0 -> 1019 bytes .../3dfd87c7e3ee7513458f440322750f8ac07badf1 | Bin 0 -> 630 bytes .../3e8ce35dba47ff90308efaf694371197ded972af | Bin 0 -> 56 bytes .../3eaa7b6df5d793044f703237bff2a87fbf97d6c2 | Bin 0 -> 276 bytes .../3ed2ee41ec31ddc8dec4e539fc679dd12fbf9c0c | Bin 0 -> 589 bytes .../3f29e7f101fbbdd1c68e90dde09dde0f18f89073 | Bin 0 -> 708 bytes .../3f4c9903ee0c9e503cb8b699dc1b0d9a1111cfac | Bin 0 -> 100 bytes .../3fa404662dc904a2ec6b8c6358d511701fab33b0 | Bin 0 -> 42 bytes .../3fd2132dfa9bd8b9d61160eb2234e3c26d65c111 | Bin 0 -> 357 bytes .../3ff4164a4a943620106dbf5909a602439b43d727 | Bin 0 -> 172 bytes .../4004746d60c237a55c97260f757d699ec964c469 | Bin 0 -> 789 bytes .../4051c0ba6fe1cbd41140915daa1649d9971692f2 | Bin 0 -> 121 bytes .../405b57ed1a2def8928e527f7a959ead228b47f64 | Bin 0 -> 1696 bytes .../405f1d07e966d8fc9768cf6cf2070ec4fff7ef95 | Bin 0 -> 78 bytes .../406f5b2c8d97100a955b35a2e2d684208856867d | Bin 0 -> 212 bytes .../40a23c9f5ff1a18b4ea6cac98b91067eec1be0a0 | Bin 0 -> 166 bytes .../40a7e1e56ee9119bdfff8ca760e7f8b6b5db78c3 | Bin 0 -> 345 bytes .../40b29fc4d90fed53fb7a2d80ecb28c159756f1cc | Bin 0 -> 70 bytes .../40b9e738a9184af40c6ceab09049d47eb71f45d2 | Bin 0 -> 88 bytes .../4110a1adcf3c6b5e22aaf388090434b2ecd3f4d8 | Bin 0 -> 65 bytes .../4117060c090239eacadb471340a0cf9d65a1a53d | Bin 0 -> 97 bytes .../416d847b238305c4526409df2c975a466f85b9e1 | Bin 0 -> 1912 bytes .../41d658c46c3166c9b4df3f1e4b5cb08d1cd83c51 | Bin 0 -> 171 bytes .../41e35f88a9699b994fd1aec3a5511e62b5f5e5f2 | Bin 0 -> 1119 bytes .../41fd4e381497bda06a45597e13926b06ee65253a | Bin 0 -> 589 bytes .../4225d2cad8d403442d0099112144dea536398c74 | Bin 0 -> 152 bytes .../42903fc18e8adeb0bd9d5cb49344381bb8c977e1 | Bin 0 -> 188 bytes .../42945d26d8a30027d5ed63bf2adb6c45fa986f67 | Bin 0 -> 157 bytes .../42af18f07d996bc3237aecbd4c37df0d702e1144 | Bin 0 -> 99 bytes .../42c40df381cd68a3d0cc506e7ea8bb81d8ae2c52 | Bin 0 -> 128 bytes .../42ec7b0dbebb8255d20736131f34caa54d15b931 | Bin 0 -> 78 bytes .../4315b37df25f295bced5c8f853adec0a6500d7a1 | Bin 0 -> 572 bytes .../433f6bc099b78eca42f73b224ce1856f211f9160 | Bin 0 -> 318 bytes .../43ae8ae8795b44a88ce8e8b8a18b23e5cb59dc47 | Bin 0 -> 1596 bytes .../43c561f1014ddc18091d92e3729cdd2c1c2e735d | Bin 0 -> 1067 bytes .../442db724e6face9a0f20acde22ca72ee9eccd4f3 | Bin 0 -> 6464 bytes .../4463dabf614222e5f2ae87f440db63cc31dbe15d | Bin 0 -> 630 bytes .../4472cfb329fdf67fd7ca90d654f49993e458947d | Bin 0 -> 135 bytes .../4498a5488cd2ea107bb072e7baabfd207fe2f117 | Bin 0 -> 78 bytes .../44b9442a5d25221d71d28aa857b02dfb89d67e7a | Bin 0 -> 166 bytes .../44c7668b1c075973f9ba8a1f23d4935e43c23dd1 | Bin 0 -> 4098 bytes .../45117de57923ff5918274ee18496ffdab2ee3773 | Bin 0 -> 205 bytes .../452693abc2c1b5659f7ec67241111ca3c63f99ec | Bin 0 -> 1792 bytes .../455be1ee4924e9dd40b3566e11342df980942c33 | Bin 0 -> 2434 bytes .../457a1e93cbdaa78c6bb7dff23d36077d7f55f9bd | Bin 0 -> 630 bytes .../45af1de1a73722c2a4a5a01633d6841f1997980e | Bin 0 -> 97 bytes .../45e3eb5ef016b16f0dc25eee6a67a48755c5bb84 | Bin 0 -> 104 bytes .../45ef09028bbc24035e9a1aaff3a5c1fd1e0e7fe7 | Bin 0 -> 958 bytes .../4679c3167527ebcf803520a0b3e99eb5d2598635 | Bin 0 -> 94 bytes .../4683782f8377938e27f5de0fa05807dc10587df3 | Bin 0 -> 96 bytes .../4692860e0c58a501b3869996806dbb09a39df8c0 | Bin 0 -> 1019 bytes .../46e303dd0f811ec6d25a7fd57b0561119ce30772 | Bin 0 -> 146 bytes .../4702720568207110c90ac1955f2145d552192fb2 | Bin 0 -> 1363 bytes .../47213b17a6c5faf64418659e601fb51633a61495 | Bin 0 -> 2460 bytes .../476bd07296708f4e03ac975b6872ad15f3a4ea8f | Bin 0 -> 82 bytes .../477e62050c9d05f5632b71d67e4f0817b949a5ab | Bin 0 -> 114 bytes .../478d04e2c8f0d81b8d70212365dc453aadbf6f24 | Bin 0 -> 1061 bytes .../47f7781e513653fd290c77cdd9ef6dbc17649062 | Bin 0 -> 731 bytes .../47f817b2bbdba30918dca2057cc74c6183e4daeb | Bin 0 -> 515 bytes .../4804e077de5ab8f1a4f0932a5b26e12551373f6b | Bin 0 -> 339 bytes .../480f78eee65ccb6b79389df92608f0a43ce51bff | Bin 0 -> 152 bytes .../48158490d84d0c2edee7017978273f647a7c874b | Bin 0 -> 708 bytes .../4850f0d1bad5342b88e34040adfe8fb981f0f4da | Bin 0 -> 85 bytes .../48519b9890c0b794d5b7a74017c994726c9dc46f | Bin 0 -> 888 bytes .../4852d9288252923f591f02d3045865095e886288 | Bin 0 -> 89 bytes .../48b463c275acc37d0d25b2586f60c18c80afe1fa | Bin 0 -> 579 bytes .../48ffe550e0975bb4606758c90f5e369c73e13ff6 | Bin 0 -> 1782 bytes .../491f2f0310bb9369502ca752b065c2a8d903b295 | Bin 0 -> 65 bytes .../495134cc022d7b5d5eb73ee73c1576f7c42b71d3 | Bin 0 -> 301 bytes .../495a8f51e6f7adffa0043a55750765bd67664140 | Bin 0 -> 126 bytes .../49cf319f65874bd676e94d1392d0633489ef15b2 | Bin 0 -> 851 bytes .../49d17cf2a87d85de1935230f9cb7e3913ce4819d | Bin 0 -> 207 bytes .../4a02d1b38ed81f13a71b8c0ca8cb0d0d830a372f | Bin 0 -> 946 bytes .../4a293d17f4e52d53e8530b3375180d4fb312ace1 | Bin 0 -> 1782 bytes .../4a641630acf1d0039d7829111b9dea20d60b19c2 | Bin 0 -> 70 bytes .../4aa535ce210495b077e3f96f13a70ec9eaed77ea | Bin 0 -> 400 bytes .../4ab6eb2ddb06fc42182506a06e93d22d28f9053d | Bin 0 -> 33 bytes .../4ad0127432757fc572fc12aba334fc992d3ff4a1 | Bin 0 -> 101 bytes .../4ad94cc47cf7d6f6f1d8854735d140de187388c6 | Bin 0 -> 78 bytes .../4b206617e08c1fe3a7bef5fe748ab81f544ba386 | Bin 0 -> 2928 bytes .../4b3e818816679b63dc471728e05d821d757ecbb5 | Bin 0 -> 107 bytes .../4b601daa1b38828d082f5f5281268f2dfce7de2a | Bin 0 -> 2110 bytes .../4bb9f3ca872239556078fa77d4872dec06b7a63c | Bin 0 -> 357 bytes .../4bd652dbdf6bb2b2b2da924cff678eefbf34718c | Bin 0 -> 332 bytes .../4be0179adc2ae07432074e1132e2316db31f43f8 | Bin 0 -> 708 bytes .../4c1605cc7ab407cc4dd2a4aea7ab3f6f55a7bf76 | Bin 0 -> 115 bytes .../4c1c5f992ff9465a7ba21321de6fe651dba5e608 | Bin 0 -> 205 bytes .../4c3398700e93b99d0fc80f4ea3e71967d5e294bb | Bin 0 -> 332 bytes .../4c5e07131e5718b1f364789e199dab6ae7b11e03 | Bin 0 -> 140 bytes .../4c639e4f101cd796f1f47cf11d66efe89a644983 | Bin 0 -> 1067 bytes .../4cc64fd7c737859445d9228a97b6e19756fea97d | Bin 0 -> 1955 bytes .../4d73192c98f505b6d51044555c54ac7376ffbc86 | Bin 0 -> 621 bytes .../4d7a04c99c9a7220d23be9042c7663ee9241a461 | Bin 0 -> 1988 bytes .../4d7e3e2bca3d3058b40d59267e19b82f084585b4 | Bin 0 -> 247 bytes .../4e036ad065fe2390e11e7535951ce91d1f484413 | Bin 0 -> 14 bytes .../4e2393b051e8a1403579003605d35b2796110a72 | Bin 0 -> 46 bytes .../4e2da2af3c6e03781f8c546c4a1cc0f907a48f70 | Bin 0 -> 78 bytes .../4e4919a1444d44ab65131169393473b09ebcf3d9 | Bin 0 -> 100 bytes .../4ec4dafa3cb6a363f640a2f5c7d274e3de4213af | Bin 0 -> 94 bytes .../4edcb4733455d426a1c17154008f74cff0b83f04 | Bin 0 -> 59 bytes .../4f07a3f9f1b8eed666a5b82307559bf1a2e87494 | Bin 0 -> 276 bytes .../4f08ec72630ef3fec6e44fd26de9988321fbffeb | Bin 0 -> 39 bytes .../4f17bc78b7c530774600b36a63d72f1ab9f0f5ec | Bin 0 -> 127 bytes .../4f5ae2ee73b60eef9e39a324918818e9d6d5118a | Bin 0 -> 148 bytes .../5020d88a6e4ebb12b2f943a85fe957c18e912eb4 | Bin 0 -> 119 bytes .../5053620789b2c5190cfe5138a7f3b848b85b7285 | Bin 0 -> 585 bytes .../505cd96e469c1ec8ea7c2956e38362aa739abfaa | Bin 0 -> 84 bytes .../5091def01d96cf9479211f616d34b507fd5eb084 | Bin 0 -> 39 bytes .../50a5755e0063842c713ba207429da75e5ac13ad6 | Bin 0 -> 2424 bytes .../50e18040aa1ec79e5d12c3ba0582c9301ba9d939 | Bin 0 -> 7631 bytes .../50f9ae9abc256131b03df79a38894c4e554a99b3 | Bin 0 -> 1067 bytes .../51180111dc505c8ddf48ba7b93e15613712dda43 | Bin 0 -> 689 bytes .../513301e846b6b1e62cd2d6986c24c5330f4acfbc | Bin 0 -> 1067 bytes .../514f27a86ec1d9a8a78e5141a9b1b97ec726304a | Bin 0 -> 143 bytes .../515324c53c98b194216855db7e192991a3e92f80 | Bin 0 -> 1782 bytes .../515cb1fff290cdbc7c440bbb6712776ee999ff55 | Bin 0 -> 708 bytes .../51a0b009ee745234dee724f3d1218486ddfdf303 | Bin 0 -> 2187 bytes .../51be1db83898eee6365a416b2dbe7f8c49270d09 | Bin 0 -> 67 bytes .../51d30427b9c8aee046cff8b89d0891d16ce5fde4 | Bin 0 -> 708 bytes .../51db6ff91fd94c5900d169101cb839dcd8bdcdb7 | Bin 0 -> 14 bytes .../51de64612c2607d35979e843597acb909dca2856 | Bin 0 -> 1904 bytes .../51f9824934e54f56616a6743b8253ae83b114d63 | Bin 0 -> 728 bytes .../51f9babfd2cdd984d8720812bc9bec3810b8cad0 | Bin 0 -> 1067 bytes .../525904c3932b9df9e39f2f9e3acf9b42aba7eeac | Bin 0 -> 708 bytes .../52f9ac46cf14fe2a28afffd8e37a33a96d74c4eb | Bin 0 -> 1740 bytes .../53109447b49505838c426d82f515cf84f4e23711 | Bin 0 -> 152 bytes .../531969e7ff84de7ee54ecc355053cc72be4e53ea | Bin 0 -> 4228 bytes .../531d4984f02a9928fa5b230c794f9a31a9ba4b08 | Bin 0 -> 148 bytes .../5320ea2150ad3500027cbb69ac4479702ff220c6 | Bin 0 -> 34 bytes .../533ef8a73609f1ffc803fc2c98f785d56683b368 | Bin 0 -> 1912 bytes .../53661c2230abb80a847de671f18d665e9c2589ca | Bin 0 -> 52 bytes .../5366fe1526a34d9ec1c591505b7196b79b8cfa0c | Bin 0 -> 1067 bytes .../53d6d3604d7ffd6a4c703b1ec017313e9fcc39a7 | Bin 0 -> 1501 bytes .../53e271731815d207df117f82a6f2deb39f8e38fb | Bin 0 -> 77 bytes .../544dc6283d06ea67f0801240ba86bb19034d2a89 | Bin 0 -> 79 bytes .../548d12b9bc826936437a17e8469723c4a057f0e1 | Bin 0 -> 6 bytes .../54bf1cf6cd5a7c0f454efd52d599c5236fdbd2b3 | Bin 0 -> 100 bytes .../54cae3051e4f9f51502a03bb8302dda49932a97b | Bin 0 -> 78 bytes .../54f85a2e5fa75ed08b69059289b12785a0612084 | Bin 0 -> 108 bytes .../5536e8bfcad2abb70c69ac7c845c3bee1bce0702 | Bin 0 -> 301 bytes .../554116af1142d68bc0b7746dd714981ead2ddcc1 | Bin 0 -> 399 bytes .../55a1030689d0c8c6c26cbfeadb563c3b98f73510 | Bin 0 -> 85 bytes .../55afac3985dd138a23b273b00bf482627ee173dc | Bin 0 -> 354 bytes .../55da19e2f745458b7bfbf96af889e6b4babf9acd | Bin 0 -> 2208 bytes .../55ffd1395766edd018e7b98d86767d175629a420 | Bin 0 -> 1019 bytes .../560538f13df7f18de7d7ab513d6cfb42a7c2ae42 | Bin 0 -> 33 bytes .../5607506d3384bcabcca6bf2501fc77387dc71d74 | Bin 0 -> 621 bytes .../560c9852995c0da4afba01fe7297d4c6d10bc3ab | Bin 0 -> 889 bytes .../562506a3f9280faa04569aa1f4c4b4b85556b624 | Bin 0 -> 332 bytes .../564403a4fe8e4167aa8a3ff9defb2b92e6a6d13e | Bin 0 -> 517 bytes .../564af3d9eb7d6f3f1a75deef27973334e47ec6df | Bin 0 -> 316 bytes .../5652f5d38c3d720c714477bd06c4f4887c6c7404 | Bin 0 -> 39 bytes .../5654c804fd7911d81419c681651197978330e0da | Bin 0 -> 56 bytes .../56571d4780c0169b5ffb90f729f0f4a0521e61b0 | Bin 0 -> 232 bytes .../565fc8addc970f52d88a2d153aebebb47d26c5fc | Bin 0 -> 524 bytes .../56661751f5a29c9f0724b35f3c98d288f1bb952b | Bin 0 -> 373 bytes .../56b49d2e2c7567fd0385b8f2bd2b41f485da2200 | Bin 0 -> 300 bytes .../5713653a6e63bd2c99387c256dd54043a9054178 | Bin 0 -> 50 bytes .../571eaafcf254554b2b11ef8aad86645bd1985e59 | Bin 0 -> 128 bytes .../5737ea72f5993e86d8845c06d3507515fcd0dd0c | Bin 0 -> 148 bytes .../574dc3d67fd2630c5ed94895f5ede1e550f8c9b8 | Bin 0 -> 143 bytes .../5750e07ccafc5648d3b6ad5a516ffcf6bc15f941 | Bin 0 -> 708 bytes .../575ab543dd130edec5318149019a090486122d00 | Bin 0 -> 78 bytes .../57754e511e3fd48674ab5b1e38f65d985d86bbf9 | Bin 0 -> 122 bytes .../578c9dd1b74f0d8edc6ef2454aea8b411f7e0dfe | Bin 0 -> 902 bytes .../57971fb61c2efc672a0b213f96255460bbdef874 | Bin 0 -> 85 bytes .../580233de69f61b32ff2f0523f4233a62b35b0466 | Bin 0 -> 444 bytes .../5812ea3e29a060a0c26df694df26edb78e15a309 | Bin 0 -> 444 bytes .../588249d7cfa464066c686f5311e1b155c2605e75 | 1 + .../58910df348fd983f058b2eb1ad34402dafb2a687 | Bin 0 -> 1296 bytes .../590123406af94a162668c0b46c02d0b077234efe | Bin 0 -> 362 bytes .../5908c35cc4ff4ae4508519479b33cae6c8fee3a5 | Bin 0 -> 176 bytes .../59291c5fcded0f35ab4f841669efdc18418cc549 | Bin 0 -> 82 bytes .../5932778cf8b920ccf4b6f890ef2b0e8e10cd7987 | Bin 0 -> 630 bytes .../594419a93654c23a1c00720e7b9039ec2b1f0100 | Bin 0 -> 63 bytes .../59581adcd44d440eefc2c01d9a069d34017f2c80 | Bin 0 -> 166 bytes .../5967e855784e96f405a07ce7297a8a0332baa3c4 | Bin 0 -> 69 bytes .../597b1e86c87acd88e0f852be9db249996d6189b6 | Bin 0 -> 1184 bytes .../59892dced63651aa663e61c8b3900b2408283164 | Bin 0 -> 140 bytes .../59a1f2882fccee54acf9cdae4db9f0528ffeb7da | Bin 0 -> 128 bytes .../59b7c29a938e4439bfca4f924957b5700a36e2de | Bin 0 -> 49 bytes .../59f65b28b54b78e67fbde9809d82c195fd51a13b | Bin 0 -> 708 bytes .../5a6d64c7df85f527a4b466351f637a241dfbcba4 | Bin 0 -> 14 bytes .../5a7b98b82cebef65cdcaa15bbe0f05611ae52526 | Bin 0 -> 357 bytes .../5a7d453ba6ef9669c627718bf3bca2b3161ccf24 | Bin 0 -> 1067 bytes .../5a815591910f136f70936a318b49216bd58c26cf | Bin 0 -> 102 bytes .../5aa743614e9360fb9fa53ffe7fef23c28043d3a2 | Bin 0 -> 45 bytes .../5aeba9db4049f5e04de35c3723cc11853afa08f7 | Bin 0 -> 301 bytes .../5b1f40c647236d9d6524218c763a63309db48ae3 | Bin 0 -> 708 bytes .../5b2bf651c3c6d7d2af7a4157bcaf474b001813ae | Bin 0 -> 946 bytes .../5b4595f912fd336c3f2036073b0c47d31003d548 | Bin 0 -> 263 bytes .../5b80584e544ee18a79c042efef37966b28012ed8 | Bin 0 -> 57 bytes .../5ba2488d33e92bff5fbdf8e30f6d6da3e621787c | Bin 0 -> 325 bytes .../5bd57da35f5e765064753222176afbe952b7ba17 | Bin 0 -> 1782 bytes .../5be1b19742a8cb1f4c8bda69a38db902d69c32b1 | Bin 0 -> 270 bytes .../5c0c2050b39ebf5d7a66269c5ad74faaf12c518d | Bin 0 -> 249 bytes .../5c13b253a49e901e2ad98e1b226cbcc5f2a1319f | Bin 0 -> 221 bytes .../5c199a10f10fcf9cdad8ca0a67a82d3faabd4251 | Bin 0 -> 98 bytes .../5c1b2625d1c11fc0d3ff7c6c59e658b88d07bda3 | Bin 0 -> 99 bytes .../5c2a05f227081687fa1204402acc69d4f1605b1c | Bin 0 -> 1385 bytes .../5c558e9dd0da0faf201f7393221b0fc3b75a8250 | Bin 0 -> 137 bytes .../5c7f4b996125c7cfe3a8da31ded8b5e0912113d1 | Bin 0 -> 169 bytes .../5ca13244db15895c1a71a3da62e2d52e641d63e0 | Bin 0 -> 220 bytes .../5ca6719af7f1f43e9672df053ce35c8426481024 | Bin 0 -> 85 bytes .../5ccba6c3f0271c0ac6a5d7af72e0b39e3208fa3a | Bin 0 -> 148 bytes .../5ce5a605fe824356579cb8d1ada02b0b0433a940 | Bin 0 -> 273 bytes .../5cf33e47fb2445cb9232af6de9ef00d2ce4744d2 | Bin 0 -> 110 bytes .../5d13becb5cdc7c43fcaf9d5c4191bec317780460 | Bin 0 -> 166 bytes .../5d16882638ddc16704b506a115632f2d50cadd8b | Bin 0 -> 1440 bytes .../5d2489827eda919bddc4294cec17a5d960c02b60 | Bin 0 -> 300 bytes .../5d408d0f011d015b5f9c3bc7a18740f46efa49e8 | Bin 0 -> 35 bytes .../5d4eda01c4fec234baa3b980e55271fdb716fa16 | Bin 0 -> 27 bytes .../5d58cc4174add224a79a346cffd935b20fe02fcf | Bin 0 -> 956 bytes .../5d9c5210ba571ee874de2e082d3ba58f6aded7d0 | Bin 0 -> 35 bytes .../5db77991f43cd30c32a0be4a6084c6c12d14da4b | Bin 0 -> 1067 bytes .../5dd94e10e650515c33dcfa5a4d7f9ddd95a27b5e | Bin 0 -> 14 bytes .../5de52c25aa1fcee49d4700d16dadc3c203825525 | Bin 0 -> 146 bytes .../5e4e5988f141c627d15a481635eae26917f8cdd3 | Bin 0 -> 166 bytes .../5e51f02946cbc7cf32e686377ec0fbc08ed21ff1 | Bin 0 -> 119 bytes .../5e62dc9383fa7b956bbbb3c5c4571ff0c4e4c4f8 | Bin 0 -> 393 bytes .../5ea043b63da3a78a7fc45c196a2f434c17ad2c8a | Bin 0 -> 1067 bytes .../5ed640808d66e6924d4babddf12f39832498a2e1 | Bin 0 -> 37 bytes .../5f6615fb93b1816ac68467db86c93dda606b3ff4 | Bin 0 -> 501 bytes .../5f727cf39ca5f105b81d0496b4a6c86e39a4adab | Bin 0 -> 8692 bytes .../5f807a82ace70080a95fb74066f5b698066040c0 | 1 + .../5f94d782ee941a02f1b1cbce341995e5eb2fbe60 | Bin 0 -> 301 bytes .../5ff2192a9a9f0bcdbeb9fd74e89c591263cd8382 | Bin 0 -> 1067 bytes .../606f4e92b51577eea0539bc31f475a506ad85225 | Bin 0 -> 35 bytes .../607c756845c9b3fd702493a7442bc98545f6edef | Bin 0 -> 301 bytes .../60ad5c6edf299c4e4db9503742fc4a8d9dcd69c8 | Bin 0 -> 301 bytes .../60f608469377789d6b6308b147411a5ce61e6300 | Bin 0 -> 16 bytes .../6135550167e5a679027910971c8aa90cbee01f2c | Bin 0 -> 39 bytes .../6175aa0bef5c799b4763be9f3ad76397a8dc5e38 | Bin 0 -> 888 bytes .../61db18cf24eb0636a49378a94157f46d942d59fd | Bin 0 -> 1281 bytes .../61e71cfd0e9d74d4cc3f7e926a5b3eefc6c145bb | Bin 0 -> 332 bytes .../61eaeb064de9b973f6f51578387e5bb87d5ceb81 | Bin 0 -> 684 bytes .../61fe5cb8761d08f7d81966371d5f10fd7652f295 | Bin 0 -> 78 bytes .../6204523ece75567ffca57293dde72c7fbc1aee64 | Bin 0 -> 921 bytes .../62116ed4ede2876b7ce0af849f3cb2aa5bf49574 | Bin 0 -> 18 bytes .../622aebca6c9cd15f8b321aba42bfc6cd2f16eb7b | Bin 0 -> 95 bytes .../6242b6d3f82635ecf7697a753249f698e8bc738f | Bin 0 -> 2284 bytes .../628602cb87dcc93f93760807a55f99a7226db46e | Bin 0 -> 630 bytes .../62c47353265d9b1d240c010e9d05913d49788b93 | Bin 0 -> 418 bytes .../62d9c338e27093243c3f7d173e06ed291b83b3bf | Bin 0 -> 27 bytes .../62dd87542396ed28176b4c44cc0cd3ac43646786 | Bin 0 -> 915 bytes .../62f894b4c5e7992dd5d86bf31ba6c502731625a9 | Bin 0 -> 2207 bytes .../63a4132b4d6919bc401d90e3a44034fc2447dd29 | Bin 0 -> 1152 bytes .../63c6e2bb255cbda5d5847354bbf6ef76c063ad48 | Bin 0 -> 312 bytes .../63f325be07dfad1ea3017a2a3e990f9942eaf2ae | Bin 0 -> 950 bytes .../641bca270486f6b36afdbbe8860d611d3e84e0a3 | Bin 0 -> 331 bytes .../64291e705837a17374735fd42defd3c2ba7aaf09 | Bin 0 -> 373 bytes .../643d807b5c6a12ff9792c63d695ca162767b33b0 | Bin 0 -> 33 bytes .../6447e0fb793aa5ed7085d506dbef92c9e27323a5 | Bin 0 -> 1067 bytes .../64cbb947ae4de379df2d76c41d0099810674e611 | Bin 0 -> 285 bytes .../64f2462bb7db455cdc286bee71c6e9bb2d59cb30 | Bin 0 -> 128 bytes .../65346eb152c8dde73e7ec4e1509b159fc10cc50b | Bin 0 -> 77 bytes .../653c474c24d905814ee20956b3e060c2b5264a8d | Bin 0 -> 589 bytes .../6563375e209764748309c4ae2faea680396cea19 | Bin 0 -> 1067 bytes .../65caaa53fe799a527b23106da60ec62199167f34 | Bin 0 -> 436 bytes .../65d2eb73577305013e15a4927ef9eff27623da37 | Bin 0 -> 110 bytes .../65de831123642383f2cbf50aa32398757d09798e | Bin 0 -> 179 bytes .../661f952e93e595c937134aef9313fd25f66f6fdc | Bin 0 -> 332 bytes .../66375fcbe5e9eef08e6225b33ac9199867a8115f | Bin 0 -> 78 bytes .../664678e899b68d7ee101187c83d5de9010a85608 | Bin 0 -> 301 bytes .../665160deadcea4e5702888df0315c8500614e88a | Bin 0 -> 475 bytes .../666c96ffdfe01896af44a4784f778595aff49d58 | Bin 0 -> 187 bytes .../6693a4b9467cbc50c5d8880af43d60a30c665006 | Bin 0 -> 2150 bytes .../66c3d3991de36fe5b0a922c9dcf21111779867fd | Bin 0 -> 80 bytes .../66e5bc266659801ff198b63d0d48e83a66f6b732 | Bin 0 -> 708 bytes .../67081bc483584c8efc4c85a7dfc3b6054f2eb1ac | Bin 0 -> 444 bytes .../673285ee42937eacf475379b5a9fc088e4ba0e2d | Bin 0 -> 157 bytes .../674d152f94d16e816fb899b74941d1c20a41789a | Bin 0 -> 128 bytes .../67c94c848a55947a0dae7f178bb59e89233199ad | Bin 0 -> 404 bytes .../67e1801eb4872b864bff6489def82222f5c96478 | 1 + .../680c54b29414d510c7834e3fd30ece1a5679f18c | Bin 0 -> 946 bytes .../681db35ed7827b89266b7b272eef10bb40ee0d49 | Bin 0 -> 270 bytes .../6824fe350c398257b1ea7043410186e8012471b8 | Bin 0 -> 531 bytes .../686328282316830832598cec996db808f230bf0a | Bin 0 -> 33 bytes .../6868a88fe91058d3d7934338cc07cca3b5f9790b | Bin 0 -> 357 bytes .../687f0922263b162a66a6c926cd2ce1aed55b5c22 | Bin 0 -> 375 bytes .../68832236392fe932b20c25272cb25bdfcf6d7dc0 | Bin 0 -> 33 bytes .../688ec25750287a5043db8159b095b360f4358868 | Bin 0 -> 372 bytes .../68c557be8ea6d973e92e9fbe59b3a121b4c2e8a0 | Bin 0 -> 2928 bytes .../68ea61b6c91a1b74a4003d1ca0a3b91cd9bd5535 | Bin 0 -> 608 bytes .../6918f16bbd7697d40b86e68c93a7e3f297e31b94 | Bin 0 -> 91 bytes .../6953545e431a5eb4806dd1c5e9232732d726e49f | Bin 0 -> 33 bytes .../6a48104d0154d6ebab96f16d52c1743198f5c32c | Bin 0 -> 4873 bytes .../6a61ad601b5a5b5e67f62929db3e45a36bb8b64f | Bin 0 -> 53 bytes .../6ae5bce6ae39d4686c183fcb3c047c897c1647d7 | Bin 0 -> 332 bytes .../6b15d1fb0e16245bf8ffce970b2e758df0383ec5 | Bin 0 -> 2060 bytes .../6b34d5671400e965c5cf436882de593f1f64ab11 | Bin 0 -> 4285 bytes .../6b76ccc92ff81b8b7e1e0dc1985d3725a32fcc18 | Bin 0 -> 81 bytes .../6b87aed93b3251669a34710a8e9b477716bb65cd | Bin 0 -> 1005 bytes .../6ba88690b7707c1c89b8088f0f5b130e103d06ec | Bin 0 -> 813 bytes .../6bf22dfb5404633a49e041cef7f7d38ef5081355 | Bin 0 -> 122 bytes .../6c0476922c39c6257419aefab62b492ff9a9b1dc | Bin 0 -> 49 bytes .../6c0994056426fc2b76149fe1455c8d9271158ddf | Bin 0 -> 1352 bytes .../6c0b3bb18b8ad63c3f85c1704c529d62a59262a5 | Bin 0 -> 88 bytes .../6c299420b43efec292df9368a19e428b1be9538a | Bin 0 -> 331 bytes .../6c33d0cb4b1958daf5bee4c88ba29b6776938d8c | Bin 0 -> 994 bytes .../6c51d02e468fed950218c48fd305e449c6e1e0ae | Bin 0 -> 211 bytes .../6c70c2b596b7d08f54017bec0f1a18d7cfc625e9 | Bin 0 -> 485 bytes .../6c8f1ac85bc8a4fd3efb607cd98dda6ef779491c | Bin 0 -> 589 bytes .../6ca9c037cd6de13c0aa71e7bbce02437dc834797 | Bin 0 -> 301 bytes .../6caeb3743c9aa826fed74ebd3c662ab9912ea712 | Bin 0 -> 93 bytes .../6cb175a172e14fb32fda01ad3ad194e8a400e762 | Bin 0 -> 78 bytes .../6cdbad7c39d719ae10b6bafadc2c4d8974e20765 | Bin 0 -> 98 bytes .../6d3a03c11b74bdc328aa32f47755c856eb75162c | Bin 0 -> 708 bytes .../6d561d0313608aa08b26e7b4b5850c34bbcef0d6 | Bin 0 -> 140 bytes .../6d6e5cab96aec56bdf9d230629ffe7abd07a4be7 | Bin 0 -> 575 bytes .../6d8149ceb03f9fe1e00dfac8e6ec8d9a64f0a60b | Bin 0 -> 113 bytes .../6d8652c318657491292053c9790e0d1df1293b56 | Bin 0 -> 91 bytes .../6d93b25cd5717247ed3566095f8629f681fa8d02 | Bin 0 -> 132 bytes .../6d9dfa3087acc454cbd8f4f791118b2855711bb7 | Bin 0 -> 1004 bytes .../6defa9fd6905046f9570bbe74112c7d0ca81e55d | Bin 0 -> 78 bytes .../6e3cbf8f3f3612114e0c07b96697ab2b29029cbc | Bin 0 -> 949 bytes .../6e70169a2561a9eca031c12397583e404b5ee185 | Bin 0 -> 244 bytes .../6ea07c01e73d6c99910d8df1bebb9b4887353c61 | Bin 0 -> 33 bytes .../6ebd5a41fd5ed5f406da465ac119cda47092a10d | Bin 0 -> 71 bytes .../6ed77697122ee679f4415e5c68417d19f37b0ff5 | Bin 0 -> 520 bytes .../6eed45832395be200cb05d2f442492e8c443d784 | Bin 0 -> 946 bytes .../6f4177a076f8a90f59f1bdbcbb54eda8e97f2cb4 | Bin 0 -> 1067 bytes .../6f547f42a04db764b8d7163aecd9e3ffabaa68a3 | Bin 0 -> 12 bytes .../6f6ce19b829add314577861026dbbe7d7da8be1b | Bin 0 -> 76 bytes .../6f99914e9b2feeb3b546514bfc39ee1da49f2c51 | Bin 0 -> 177 bytes .../6fde458d58c49f9e2709c50f4973389928772a55 | Bin 0 -> 166 bytes .../6fff43a4c2bef33e3020d6d918680235a115c070 | Bin 0 -> 66 bytes .../703d6f37c2668346a8386aa28e7cd6392d134593 | Bin 0 -> 77 bytes .../705a138f8a12803bcf0e34e9518654292b6d4719 | Bin 0 -> 245 bytes .../709105af747a6c295ea841afedb87c983a66fb4a | Bin 0 -> 33 bytes .../70a239eeadd6c7f8a0604c1a3a74bd841f632f12 | Bin 0 -> 114 bytes .../70bfab48a79c376450825ffba20d7f0bad37d258 | Bin 0 -> 98 bytes .../7110ec3f270a97b4a6e61d981f06ec7058640cdd | Bin 0 -> 150 bytes .../7122814cd907cf9129aa55856255a41465e34400 | Bin 0 -> 66 bytes .../7124dcd724a96c8d6427b16dd76bcba65aaa46c4 | Bin 0 -> 96 bytes .../715279a12229f348b8dcb9723a224476e30d6a58 | Bin 0 -> 301 bytes .../715505a81756f3dba5b9fd180f0c1ef0ea9d6a85 | Bin 0 -> 301 bytes .../71689233ba67e44b67cd2b1dbf564337f5b4b49d | Bin 0 -> 92 bytes .../716e18c8f2d0ed851265e98ddd2ebecc42a0a11a | Bin 0 -> 1281 bytes .../7193a15efa6efe2395db8bab4ec1c04773c97019 | Bin 0 -> 851 bytes .../71b595ece349d0c4655d865a503fb244a8768fed | Bin 0 -> 2677 bytes .../71c4a9f89d58d8f192e58b584428750c07196c9f | Bin 0 -> 4208 bytes .../71cf3f698c3d544bf13031102972f7055a1cc2a7 | Bin 0 -> 986 bytes .../71fbe93c726e7d8f477f55e0b25b1e1379c50f8e | Bin 0 -> 80 bytes .../724e278fd50ab6c028c5c9ebdfccc44f8e15644b | Bin 0 -> 589 bytes .../7253599f14804c692d9f8098b5d51bc4facf3fe1 | Bin 0 -> 140 bytes .../7260d75002df9a03a3f22dcbe653c7b85afe7964 | Bin 0 -> 589 bytes .../726d4c968c157e98adc124fb34f764538d7ad2d2 | Bin 0 -> 350 bytes .../726d7a01076ab1d2c954add3d6c66a1c33ce6854 | Bin 0 -> 114 bytes .../7314f51f896c9f332563bd614b6421e5886aceaa | Bin 0 -> 1067 bytes .../733bfbe66763290243f91625a75a659e9b6191ff | Bin 0 -> 630 bytes .../73664ef44854e8c48de37261ff5b203c7bb07e79 | Bin 0 -> 2946 bytes .../736e53822401f19dc531f1dba0d47caaec198f38 | Bin 0 -> 150 bytes .../739b6e977a403fa06deb8af5e0afa967fcb8d13e | Bin 0 -> 301 bytes .../73b47f681eea7fc6eb62585b864f62c364c8f44e | Bin 0 -> 708 bytes .../73faa82787c73d8a242f2b253c0795d572c53c4b | Bin 0 -> 2724 bytes .../743810d3c264beb31e87c8c38eb8f714abc927ff | Bin 0 -> 47 bytes .../7443f8335c7d78eb8caed77c176e901a2866c721 | Bin 0 -> 684 bytes .../747e63ab5808b40138776514b28b57e5a1d7acf4 | Bin 0 -> 138 bytes .../748146f339c0ee11b2dc300b6056a83ea1bab860 | Bin 0 -> 1782 bytes .../749ad6aa70a0e2509581dc0fdc8b9471b3932cb7 | Bin 0 -> 276 bytes .../749d8197d9f561f577c0f57db08f34666df73ea2 | Bin 0 -> 663 bytes .../74a55cf5762b4d4face88100361ea0a8748aad89 | Bin 0 -> 601 bytes .../74c832628c5a46acb17aff70951822ab915d2b73 | Bin 0 -> 78 bytes .../74f075659ecc08808e0087c2e7bdce521324a3e5 | Bin 0 -> 170 bytes .../752bb05b5638824585aa67a7f52ed2a84551e62e | Bin 0 -> 53 bytes .../7587964a48c3843d1397479bb1534881b5af1b36 | Bin 0 -> 170 bytes .../75f6a112c11c0942817b2f12733326eebae01c2b | Bin 0 -> 357 bytes .../761006534819e5368d945d8d1a1466d84aff0588 | Bin 0 -> 42 bytes .../76382ee935773850bed91f8aae61e1097bbff031 | Bin 0 -> 630 bytes .../7685afccfcb7e344d9942e41e753976509796c8b | Bin 0 -> 78 bytes .../76d54584dcd87cbfc10558a2c9ef1029e5b33f97 | Bin 0 -> 589 bytes .../771f0f878b12302ddab88a2812d85b8cad740883 | Bin 0 -> 708 bytes .../7725dc2b03ba8d7c910f0022d56a5ae49c9594f1 | Bin 0 -> 175 bytes .../775637f0a354d19f7d0a974cecc91fcf1c1c1681 | Bin 0 -> 78 bytes .../779a289b58bc7a4b698881b15cfc2d4524d2e171 | Bin 0 -> 301 bytes .../77a41e5bec42d2d0922070e09b812fc840106f6f | Bin 0 -> 78 bytes .../77b4743c9e65ecdcc57c0232df8567e7c6e1381a | Bin 0 -> 371 bytes .../77eba3f1894f8c94e59a3edd4be0a62a37a59c0e | Bin 0 -> 120 bytes .../77f407ac9e6dec86d666b06794544152558b1eb3 | Bin 0 -> 318 bytes .../77f41b39b3a58eaa61b33363a890b4f3436ef66f | Bin 0 -> 1875 bytes .../77f8e1f052221230336e5ac66d40082f77f0fc9d | Bin 0 -> 97 bytes .../780789c970d41252b2bececddd620869e47e7532 | Bin 0 -> 223 bytes .../781efcb33c4cc1ccfed56fce889e5214efec8145 | Bin 0 -> 357 bytes .../789bd4d45d43a2060b3a94f6db8d193c37f9305e | Bin 0 -> 2202 bytes .../78e5401157dce9db5edf5ec5be38ac1f5e5699c9 | Bin 0 -> 4905 bytes .../790987c4948fa67f1e4479cd76b71b74ade1d985 | Bin 0 -> 38 bytes .../791ea4ec36055be6f13dc4276399cc4d05dde675 | Bin 0 -> 3285 bytes .../7929e3b9cb65542a00b72adc094c7e883a62d62c | Bin 0 -> 197 bytes .../795d4358259f3dac0481eda8c959eb05e550ef26 | Bin 0 -> 101 bytes .../797781c73cda29b80d8f2903489d45b74cda7add | Bin 0 -> 104 bytes .../799e8606c1623894e88300bd3e8743f5c01bc35e | Bin 0 -> 301 bytes .../79a318771df6377b6169be8064e325d6053f6d7b | Bin 0 -> 100 bytes .../79a720aef18739326f59e2be411dae04e4cfdc63 | Bin 0 -> 579 bytes .../79b22dc204992c63b508364f764b799fb967b3e6 | Bin 0 -> 332 bytes .../79d4095a352716cf0f813e585491bf1c52c55413 | Bin 0 -> 99 bytes .../79f13a1349e66142a7840138be9a7a72708307ca | Bin 0 -> 3139 bytes .../79f1ad0562ff6806891d361e8bed38d9ea92dc97 | Bin 0 -> 1067 bytes .../7a05309d5033dd44228be4d4392b02c0edbc2c20 | Bin 0 -> 157 bytes .../7a22043e1824f0124ec16d46faea330033ec9a05 | Bin 0 -> 68 bytes .../7a3196d60c995a5e8af0df2f4a37443d6bc84c01 | Bin 0 -> 116 bytes .../7a328019898d7f8903c106a3bb2bc0cc26f73999 | Bin 0 -> 61 bytes .../7a48d36e4a8629e339a181201707de1b5fe3cd49 | Bin 0 -> 357 bytes .../7a7b62f06604cf984fe8bd0ad02711d02e6ad0c0 | 1 + .../7a81893462d5aedb529fcfaca4ae62e6c1f60edc | Bin 0 -> 1067 bytes .../7a8beb8b885fb27f427ae7039ce0e4c91d172b35 | Bin 0 -> 205 bytes .../7aa794886b93c2bf99c583162d8c1306b7e30dfd | Bin 0 -> 40 bytes .../7aaa47b8899f73685b88994fe8b1e9c692a30753 | Bin 0 -> 166 bytes .../7b9b1906da5cb645be56ee6773fc2515d89f8148 | Bin 0 -> 708 bytes .../7bcfa8aedee7db293de430b174405f20af0cf552 | Bin 0 -> 105 bytes .../7bf4881bd075b4d7f2aa42ce031d41d9847d1b35 | Bin 0 -> 143 bytes .../7c16443e844299396a7cbd46bbd5cd1cb5c04aa2 | Bin 0 -> 95 bytes .../7c2642bc9b3939670576de71c6abfb8e26d6cfaf | Bin 0 -> 104 bytes .../7c5417eac4a86bb4976698119422a50f58e6da4e | Bin 0 -> 88 bytes .../7c6610640432c9ef28617efc5a26b51f2755c60e | Bin 0 -> 112 bytes .../7c7df34fa6d48b7c3e61cd8f4383d00e49c411b6 | Bin 0 -> 708 bytes .../7ca6d278a4fd5f9485f1df1e839a65f5732bba05 | Bin 0 -> 199 bytes .../7cc7f116b73f73083dfaff59541f10bbb3adcb6d | Bin 0 -> 357 bytes .../7d7d2d50381a5e70288fe686992b44a11b3f5a2c | Bin 0 -> 136 bytes .../7e23409e23c695182a02eb2bdd1ea5c059114450 | Bin 0 -> 354 bytes .../7e7eaa9823d996e6142ecd27997963afaacc106a | Bin 0 -> 65 bytes .../7eaed080c27d76107fbc481c2270fd062a250269 | Bin 0 -> 90 bytes .../7ebfae7399981cb791177df2bd2117d84dce5afa | Bin 0 -> 1705 bytes .../7ee2b3661290bb22b4b5e2861f46bc47e5e62b9f | Bin 0 -> 354 bytes .../7f05c3a4d3f93cec5e542c46e6cc1c665a7f3cdb | Bin 0 -> 617 bytes .../7f1435a184f7f51da58aaa7c39234d3f7fbadf12 | Bin 0 -> 270 bytes .../7f456b65f5c09b5670d93a6093a7b88134484bc3 | Bin 0 -> 78 bytes .../7f846f4b8d173a78e212c3bccd9b1cbd3278ce9e | Bin 0 -> 130 bytes .../7fa128e4801eb591afab55f3ba65683f5726be67 | Bin 0 -> 630 bytes .../800959f3d628394a5304c4dac56ba17d12e86ce3 | Bin 0 -> 95 bytes .../805b84ed6e1af60565b82b6c2221a4a7c382f0ce | Bin 0 -> 112 bytes .../80b84b9a2928efbd7c88ca0e77764340a736711a | Bin 0 -> 96 bytes .../80d25cfce5571dae3078aaf23628d525675ff889 | Bin 0 -> 404 bytes .../80fd0415c68c6af27cfe6a403c05d8d30ae5be1a | Bin 0 -> 52 bytes .../8119da0a08f88417a80f48b79432bc8270e90074 | Bin 0 -> 400 bytes .../819b6a63d14d3b6bd35ff3003b724d9c2ef024ae | Bin 0 -> 114 bytes .../81d08594947f7252aa355f593c842569f31671bb | Bin 0 -> 32 bytes .../81e62b202653a2c2a4634a39b737bb5ae354bb5e | Bin 0 -> 35 bytes .../82a5838723c28efa851c54cf8677fa5883362ee3 | Bin 0 -> 1912 bytes .../82aebb4e17f1af023ea8ce62bc4d60220340b7d9 | Bin 0 -> 46 bytes .../82d21c866f3d46b1907ee53396f9e063ade64da9 | Bin 0 -> 78 bytes .../82ea87fee99df2c583504256f2f9542d0ee1dbb9 | Bin 0 -> 51 bytes .../82fdc665ef9a4c60064c86a51ef4366edcd25d56 | Bin 0 -> 2928 bytes .../8301e614b7db870058cd0a15708c2c8278182233 | Bin 0 -> 37 bytes .../831670c0636de5d74ada0ca84be356bde04ae90d | Bin 0 -> 519 bytes .../83340c2809e7863253f0c85ad24548a254b617c9 | Bin 0 -> 5568 bytes .../8334a36bcd16dae0c4d71a2a2715e96eba1b6924 | Bin 0 -> 1067 bytes .../83483e9207997cbb2dc204d16b550ba27aae7cf8 | Bin 0 -> 152 bytes .../8358492759d87c743db7fe57c2ec57004b140a02 | Bin 0 -> 636 bytes .../8386f2cf6fc349e9ee0bc6024ce2b6edbb5bfe79 | Bin 0 -> 150 bytes .../838b53861283285b114e041b5a96822a394469ad | Bin 0 -> 630 bytes .../83d94c378fd19dd3225e953fce94316f7900767c | Bin 0 -> 708 bytes .../83e6c705338ed988ece6d2298ed4d2cefd5205de | Bin 0 -> 1314 bytes .../83e9966f46a745e23033ec1e17b8849651d19d1f | Bin 0 -> 404 bytes .../8412fb1481fde9529ecd2ad1dae89a5dacbf810f | Bin 0 -> 2121 bytes .../843c475b8e6cba07ed2f89ec182ca281f5254314 | Bin 0 -> 498 bytes .../844d5f0b9278fa14be77d7f61aba360692f1a2c2 | Bin 0 -> 357 bytes .../846272e46b3ee3907b0bb399a199867a39a33123 | Bin 0 -> 1067 bytes .../847e01ddd8115ae8ecd9f7d32d9dc582edc21583 | Bin 0 -> 172 bytes .../848c1d85597a57c11f863d2816f498b9539d5270 | Bin 0 -> 137 bytes .../849e5f6e6b0c9798f395d922878e0bbc2d3c1741 | Bin 0 -> 325 bytes .../84d4955f69f57a300ec0a3bbcc106a488cb69e4a | Bin 0 -> 504 bytes .../84d75d132268ba5ef63e86949c1cde9dfb273f04 | Bin 0 -> 144 bytes .../84f11640de983d450990f49329a492a4fdf37aad | Bin 0 -> 167 bytes .../851705bba80bcf3e98038ce099a737b12259ac2a | Bin 0 -> 31 bytes .../851b151ccffce6ccba7ced415a92637763d7997e | Bin 0 -> 128 bytes .../855ce93a3bb0c7d45a85fceca85bb900cf45e6f1 | Bin 0 -> 130 bytes .../85825e404951d8af6c9d58946a92c74ce3e9c0b8 | Bin 0 -> 94 bytes .../85d3fb318a06852b1423c5df30f8433770bce85f | Bin 0 -> 56 bytes .../85f59465dffdfab105e9c0761c150ce5968bfb56 | Bin 0 -> 1912 bytes .../86340b10f02bf316803b847968b88b3a94acc515 | Bin 0 -> 166 bytes .../864018791a69f5ed87f22f3be506b37ae3f56ff9 | Bin 0 -> 128 bytes .../8643bb21bc88751267b9c51de10ee6518b56cf62 | Bin 0 -> 1351 bytes .../864ceca1967ac38f56bc33a33c6cafdaa24d5cb5 | Bin 0 -> 483 bytes .../868f1b2e2b329e9273aae01e7f4e02c21607923c | Bin 0 -> 1782 bytes .../870cfb68839b7db8c342c672391be1295b029cdc | Bin 0 -> 301 bytes .../87186b0d45470895558a8f1942ca06d773192575 | Bin 0 -> 1008 bytes .../8735f078d83291f7a6a355990a0fed522ac6aa1d | Bin 0 -> 630 bytes .../875cfbc47b2b1fd2c96791704d4bd384a68ef9b6 | Bin 0 -> 78 bytes .../878b8e718d20c9698b990500c8ccb52f194c0ee6 | Bin 0 -> 90 bytes .../87afdddf66ec355eeadfda33936601696d0773e5 | Bin 0 -> 449 bytes .../87c084a9a55b08856f7a44ec577cb2adc74a732e | Bin 0 -> 679 bytes .../87e49dc10e3a658c7b496fae477ac3de1ebae9ac | Bin 0 -> 78 bytes .../87f6ae4a2a5572c7e9d8e7f6af823aa83efd2bd4 | Bin 0 -> 93 bytes .../880281ee3f591f31cb6f717fdd897dc670ff2632 | Bin 0 -> 630 bytes .../8807c438ead3d409674d4f540f440b0baf66f27c | Bin 0 -> 84 bytes .../883623887460f57bf440cb5d97a28b0c9c7f327e | Bin 0 -> 85 bytes .../883f1ff07b1824bd1cd108cd53875755cdab2d3b | Bin 0 -> 52 bytes .../8869c4ad66242fdb86f238d496714a837095dc8e | Bin 0 -> 105 bytes .../888850137f08a9746960f6094058b987d6443a5d | Bin 0 -> 222 bytes .../88921ffce4151e829225bf80ff62a15d3cbcabd2 | Bin 0 -> 708 bytes .../88b06203f6a5610c1fcf1342b18e50ad7a7ff963 | Bin 0 -> 1067 bytes .../88b7543b89ede5fe9705abbe5ab7aebfac7fbe49 | Bin 0 -> 1281 bytes .../8950c25612c4d4f46ba91f9da501b6327ac9c479 | Bin 0 -> 1067 bytes .../8967254ae3fc2f4eededeca3e981281c2442a282 | Bin 0 -> 54 bytes .../89824519d64c1582d817ef9ef4225b4c87492ee4 | Bin 0 -> 332 bytes .../8994e26d1748656c6323edecf6ed6d6fd9917c5e | Bin 0 -> 325 bytes .../89d624b3e293de8c3b6c94ef25816ac60d41776c | Bin 0 -> 2103 bytes .../89f5d9614abf6e736f62a9559bc6ef101815e882 | Bin 0 -> 444 bytes .../8a09f057025559432f29502814a70cd3a828d740 | Bin 0 -> 95 bytes .../8a0a2149f2528a18dcb0c812b552081a69db774d | Bin 0 -> 332 bytes .../8a0f523c28d38d894cc846b9351a325374a340a1 | Bin 0 -> 100 bytes .../8a2ba09a47bb2032e22fe5b4b00501e0922aff07 | Bin 0 -> 86 bytes .../8a4935ea2002856a3c6287e11c7b46f4b2ed8ab8 | Bin 0 -> 119 bytes .../8a4fd4aaeee8e75c0473ab1e593fc87f6c71182f | Bin 0 -> 60 bytes .../8a8e03b713166040b1a0fcea075c8bd1bb7b616a | Bin 0 -> 302 bytes .../8a989951af054ec1736fa4598791bec358bf885d | Bin 0 -> 78 bytes .../8aacf6a786b84d03c101348bf3936e0eb68345eb | Bin 0 -> 332 bytes .../8ad497ba9480be437b2ef860ed9ab0eebbc2a30a | Bin 0 -> 1301 bytes .../8ae11277cee436699ae6c34b06aa2fa9f20a4bc5 | Bin 0 -> 308 bytes .../8af88a49b44a1c83d0e32eceb9d049dfb6dffc28 | Bin 0 -> 1782 bytes .../8b20fc685c8f25c929476cc9535782a916f55a32 | Bin 0 -> 126 bytes .../8b7e0283cf20a8ff4308911f08f5a956ab831093 | Bin 0 -> 1067 bytes .../8bd950afef00bd688881dc55a0fa2c7a23fafc0a | Bin 0 -> 54 bytes .../8bef0bd3ceb33ab54d25464ae8b715144f5967b0 | Bin 0 -> 50 bytes .../8c46ef8b9bc2d0b22a849e4ca38140cb46ca3efd | Bin 0 -> 326 bytes .../8c517c09c5f7d34abdfb99c33093fc3b0f80b244 | Bin 0 -> 1067 bytes .../8c75eab0d0b626f4a7b2761ef18beaf9caae6ac7 | Bin 0 -> 25 bytes .../8c8b2164f96a85d659f2b1c587042546341c5f3d | Bin 0 -> 78 bytes .../8c8f03c6a7e143963ed09397fc6b80db4772c6e4 | Bin 0 -> 630 bytes .../8c9cd8d7837cc3b2c1e2d121600f620c202b7c46 | Bin 0 -> 1800 bytes .../8cd43ae1d6122c50746d48333db851bf8fe07f2d | Bin 0 -> 31 bytes .../8cd56d41bbc837eefff4f62172cf762b1f7baeba | Bin 0 -> 119 bytes .../8cdfa48a6d57f8f6de407ba7d71b1024c9694ea0 | Bin 0 -> 2928 bytes .../8cf94d2a1ac70bdd054cbe5be69404876b164c5a | Bin 0 -> 16 bytes .../8d05ee913ad8831eeec5f49542711c0777887fa6 | Bin 0 -> 1019 bytes .../8d0d15cb0720b5e351808c61eeb684886379e6d4 | Bin 0 -> 332 bytes .../8d2646233dd1b4f604b71761d1ca084a86a3b13c | Bin 0 -> 878 bytes .../8d334099d66d8d4480c303a737317e5baa9c942b | Bin 0 -> 110 bytes .../8d34696ee3443e15de67c7b2727a6684b95865e7 | Bin 0 -> 380 bytes .../8d468d8292fa0a35d884ed77d198175b297359b1 | Bin 0 -> 133 bytes .../8d4e274f086ae16641da7ec79cf4c6f6a8101584 | Bin 0 -> 1955 bytes .../8d5499144b872b5b390b5a647b7c1b0f28cecbf0 | Bin 0 -> 301 bytes .../8d737ea86cc0c49c69f324868fe2b20360a7d366 | Bin 0 -> 540 bytes .../8d849a20383d0d2964e7491e18261e87ee64a998 | Bin 0 -> 1067 bytes .../8da493a11ecccac319a97bacd34f30995f975744 | Bin 0 -> 1301 bytes .../8db991f31d441ea67608b6a9774d43db29ddf69a | Bin 0 -> 50 bytes .../8de9c5589e1fbc865d7bdded105c78beba00470e | Bin 0 -> 1717 bytes .../8dfe3f36ceeb8ca634664f4735fc4e4249de4145 | Bin 0 -> 332 bytes .../8e4aca1be214483e5d182ce803bd4a4a3d82907e | Bin 0 -> 166 bytes .../8eafa0e4eea3a6637da34299fee5b379d543b7a3 | Bin 0 -> 1092 bytes .../8ebcd614bc2fbf189b5268bc8e940d50570af21a | Bin 0 -> 318 bytes .../8f4e8ed745d3e7c8d2e8015c7fae3a0c822e35b6 | Bin 0 -> 78 bytes .../8f5baa7239db8563c8d0d34cdd05764f91ea2ad3 | Bin 0 -> 157 bytes .../8f761396eb2dad03182ad0cbee1ee5c191d0a4c2 | Bin 0 -> 557 bytes .../8f93aa7854cbbf9255e710021cfa722c3729473e | Bin 0 -> 444 bytes .../8faa8944bccc54e102a10fb0509d0f5fed3ce61c | Bin 0 -> 33 bytes .../9009621dbb80660bd362622f06aaf3fdce4da007 | Bin 0 -> 48 bytes .../9037cee1cf7f024e7f1e475e150e64bede25fd8a | Bin 0 -> 176 bytes .../9080eb7810722ca74b8b0bcdf3eda4fecd323229 | Bin 0 -> 136 bytes .../90a722ced18e06a31b268eb0b297b29030a47dd6 | Bin 0 -> 948 bytes .../90cc7ce9fa0f539fbb3ff1ee577f599e86b86c38 | 1 + .../90da332456e0f39b7d8f54c3478913a0ec6ef7dd | Bin 0 -> 14 bytes .../90eb64e166608d4ff3aeb465412365f437f7b23a | Bin 0 -> 171 bytes .../9107fb3a9f42eea196d25da52e7cc1a6a72cacf1 | Bin 0 -> 175 bytes .../91214e3a0518ed19b0a544df23219a932216085d | Bin 0 -> 78 bytes .../91267466908adcd1979513270fd955e0609599e1 | Bin 0 -> 78 bytes .../914cdb237d4f506e8644b250426e3859ec7884ae | Bin 0 -> 166 bytes .../91b9d6396cc6f514041d0bd795b05e324b88ffc9 | Bin 0 -> 1195 bytes .../92435cb39fff0444dacdd7e604617eaaa42f019b | Bin 0 -> 130 bytes .../924fb72ab1de42a0861295834734ca817fb263ff | Bin 0 -> 1782 bytes .../92532787e15998f26bcf387834a41ef4e884b367 | Bin 0 -> 67 bytes .../92f3e0ab98a57fb3a6b0806030db152ec05cda67 | Bin 0 -> 1501 bytes .../9326abf72a5fc6bbb66e47b7a716b80e4565444d | Bin 0 -> 332 bytes .../933b2085471ce2f3660d089e323f71ccc9799e7c | Bin 0 -> 61 bytes .../937d7413c5efd9907da35ad0386119b073ace82b | Bin 0 -> 5922 bytes .../938ace5d5b7e4603894bacbf1baff72102bfa813 | Bin 0 -> 630 bytes .../9418d361c8fe4f2ed64351c7241a1400e87fd209 | Bin 0 -> 152 bytes .../948608169e1ff9e8b9c02d501fc3ca26df8f2ceb | Bin 0 -> 181 bytes .../94fe68fc4da109662649eedbd022bd653a461579 | Bin 0 -> 171 bytes .../955795e3a35aaca4b62e4ab9f68052b41be70867 | Bin 0 -> 1019 bytes .../957ce5f3e8a42eb4397ce2fbc0784ffd82c219f5 | Bin 0 -> 1067 bytes .../9582c563c9b8dd12b994887f6fceb02c950dc183 | Bin 0 -> 88 bytes .../95b16558c4645b05f42573fc3e46077c6dfb4812 | Bin 0 -> 946 bytes .../95e5e9d0c7e680669f3660f6cafd7602f8df7cc4 | Bin 0 -> 31 bytes .../962b5e98b35b3f6566b50abc198d3c1b98947b7a | Bin 0 -> 2859 bytes .../962ba8c91b422cec92603fdb124b7b48280f35b1 | Bin 0 -> 316 bytes .../963c79f0a3f29f982fd4691a11824e9e458fe30f | Bin 0 -> 684 bytes .../965274076315987233a85df61fa5626792f4da21 | Bin 0 -> 102 bytes .../965c6cbfd3cc9792f025ebe49d471e42a9e9f598 | Bin 0 -> 46 bytes .../9674a1d93fb3ca19354b32aa9d1192cbfea2eeae | Bin 0 -> 589 bytes .../96ec641ae350fdc9fe9d863fb4fdc52de87eca15 | Bin 0 -> 65 bytes .../96f12cf334b79676299c8a3e5812c443f29676b2 | Bin 0 -> 1067 bytes .../971aa8bf9b5f99e193818ef492405535601fd9e6 | Bin 0 -> 357 bytes .../97275bf74a5a281df446f29791a4018cdde084a0 | Bin 0 -> 327 bytes .../9738cede3fd16b965145df41be8c9f970ace7d12 | Bin 0 -> 630 bytes .../97505557dfecdef2b53e2ea2f91c0ae8e8a571b4 | Bin 0 -> 1019 bytes .../977eb541d4c05199575246417eb3e4ddd1ca5edd | Bin 0 -> 1067 bytes .../97a9df4a6f4dcf9c96c8d62603e18bf007ec0cf3 | Bin 0 -> 1835 bytes .../97c60ea70f7e60f0b9ea93a35744ee3fffe8e641 | Bin 0 -> 1912 bytes .../97d0079435094f7729da4b96dbb909d83b0e164a | Bin 0 -> 78 bytes .../97e483ed9dc337adbe5a13cd540df47e6d4f4a12 | Bin 0 -> 372 bytes .../989f77500ca3315c5ccd089f25dd0922a75f6f35 | Bin 0 -> 708 bytes .../98da90fdb380cc39a06a7ddaffc873a388a5fb93 | Bin 0 -> 212 bytes .../98fb4ff9065a178632fffc27436005601df58e72 | Bin 0 -> 1782 bytes .../9900141942b8bf374ff489db147c4098a4e6cb0d | Bin 0 -> 176 bytes .../9942201d28bc0a8a6bdb8db53271abd98c83c27c | Bin 0 -> 5035 bytes .../99577e6aaf2da920ee047dbe5d2730791ac1f50e | Bin 0 -> 354 bytes .../99ad58660a595b2ecd103911599ceb2869adde68 | Bin 0 -> 5679 bytes .../9a3f8b53a241289c722426918e8b30dbd5e484ee | Bin 0 -> 2917 bytes .../9a4d32e12d289a198c1ade727a595e9cb0545399 | Bin 0 -> 806 bytes .../9a7b6037ae2923462808491239630e1c59d5f3f9 | Bin 0 -> 150 bytes .../9a8264cecf5fc619b295449e1a1ab5d192328820 | Bin 0 -> 332 bytes .../9a9e5f5c032adbb2227a3cbd4734f39914c84126 | Bin 0 -> 1067 bytes .../9ae4a9d6278edbd675693e935e2c93d2f9db98f2 | Bin 0 -> 121 bytes .../9af47d9ae6a60e3a39ca2aaf0051309952594c32 | 1 + .../9af7ddef1fac37825cef3fef99db3cb1b110fc35 | Bin 0 -> 708 bytes .../9b076bda58d22fd5bee97e5bc1f1352521d26238 | Bin 0 -> 112 bytes .../9b49e0a01864fe37c3e4cb334ad7d203770b2e5d | Bin 0 -> 301 bytes .../9b8f2d79a843f5c32b913c0a606bd83a4159af64 | Bin 0 -> 32 bytes .../9bb073295d3361f094f4fa2707e38ba0d0d0cb90 | Bin 0 -> 24 bytes .../9bc4f27bb2cff76fad19afb924b628a04940d454 | Bin 0 -> 85 bytes .../9bcdc3868fc914b4611280c2482742180efeeeed | Bin 0 -> 1019 bytes .../9c33fbf0503138367f5abb8fbf8206c110ce5069 | Bin 0 -> 58 bytes .../9c3aa3bc7ca95b9750ddc234e143207263a42aaf | Bin 0 -> 1717 bytes .../9c4f1dba3b5a358dc5d1ec905a8ddd0a5ec34379 | Bin 0 -> 3345 bytes .../9c77d10b2d5e0a2f0b40d9bf25810317089fe4e3 | Bin 0 -> 357 bytes .../9c8fa9a647609eef93a2c5416111c70f53df6103 | Bin 0 -> 96 bytes .../9c9f9db86a736dd81374e160ebca11398821ee44 | Bin 0 -> 88 bytes .../9cc0f1e454ad34b5695696b8bd255cdde3176e91 | Bin 0 -> 146 bytes .../9d3455c1131fbe4ca4a81bc6d646202d83342393 | Bin 0 -> 42 bytes .../9d3d78efc6d72a14a39916cbfa9e3fb44fe7e2cc | Bin 0 -> 22 bytes .../9d59326450ad39dca348260c0d02ce00222036d8 | Bin 0 -> 212 bytes .../9d78029f18d69ef543cd278130822447a86eec29 | Bin 0 -> 1705 bytes .../9d814e241605abcb57474c9cf56978038b8c8ae0 | Bin 0 -> 36 bytes .../9d98ea1a5a2aff1b77259383f7fc820ae9852301 | Bin 0 -> 524 bytes .../9dbdd02b8fd35ef00d69afd041a85ce93c681d6f | Bin 0 -> 1067 bytes .../9dc22576af2b0e1dc59fe94282670046cf41c315 | Bin 0 -> 1067 bytes .../9df329bd6be4fe0b4c8d91f79aa34c0d546bbdc9 | Bin 0 -> 85 bytes .../9df9ad3541b962eeb3008f792522eedad4238253 | Bin 0 -> 1768 bytes .../9e229c505cbc9bebe04f095219cf90ad54fcd67a | Bin 0 -> 1067 bytes .../9e2f644275f8e606edf0af8e40a32918841a0843 | Bin 0 -> 1183 bytes .../9e3b71ad89acdd8e363e2d7fd983931633e8a8a6 | Bin 0 -> 580 bytes .../9ea8b10c1a65eae5736d25491d3bf1076e0839d2 | Bin 0 -> 80 bytes .../9eaef8cc2035d0460b1cc899d44bb44b03489593 | Bin 0 -> 589 bytes .../9f0cab719b1efe6f516ec3828d08cb4a8ecd8eeb | Bin 0 -> 80 bytes .../9f231bc4d22c8d060827408777043d15e61517c6 | Bin 0 -> 116 bytes .../9f3f9da0719ef7ce6aeb43a721eaf743119bd67b | Bin 0 -> 399 bytes .../9f41817a9d570630998060ab0280b877fbac1805 | Bin 0 -> 79 bytes .../9f522a24187262b2454cabc95cfd54c1a736870c | Bin 0 -> 1912 bytes .../9fa6a9f541c39690f4b39603b512f5e7df1186c4 | Bin 0 -> 212 bytes .../9fb649fa928fc1a994accf9f8fb656d27af70281 | Bin 0 -> 2225 bytes .../a03a5f1688257a2d31650c6560b871686f864c6e | Bin 0 -> 630 bytes .../a0550c2fc8b8b35ae7366dc6b8e13ac8aac922ca | Bin 0 -> 1782 bytes .../a05c0bad19c241db4f764989e2e561b11d715065 | Bin 0 -> 172 bytes .../a068c1c34418bb6d85a6639e9ceeb43ef283fc65 | Bin 0 -> 630 bytes .../a07036360fe6da89b61f4dab15c0707dcab9a1e2 | Bin 0 -> 107 bytes .../a09f4ce3d2e2d25b5e80ebad34a9b78bced65b6b | Bin 0 -> 589 bytes .../a0a2b683a7bfa656814f02c7dab84915a1db7746 | Bin 0 -> 708 bytes .../a0b15afa1210848794650150d2caf94d849192a6 | Bin 0 -> 1548 bytes .../a0dd27a1c9ff683a39ea8940c2d4077cd207e2f5 | Bin 0 -> 929 bytes .../a13faa0fc51df6416acee4a457113ce6e7e4e7fb | Bin 0 -> 2928 bytes .../a1567130a25327725fe4fced4fa57ee477df61ec | Bin 0 -> 91 bytes .../a15b3a56326da5dd712c9efa5dbb2d10b7ff4dc2 | Bin 0 -> 2928 bytes .../a1816ad00e51874a386cbbcb933cbd4968815627 | Bin 0 -> 212 bytes .../a18e09e641a62965a5748f69ba92a00077864806 | Bin 0 -> 541 bytes .../a190f989c353161782dd47459d3b57fb1bf871d0 | Bin 0 -> 371 bytes .../a1cb8f059c2d8684bffb265fe3680affce3029f9 | Bin 0 -> 1019 bytes .../a1cc784b45395100e1b442ca1b19f31aed330c99 | Bin 0 -> 357 bytes .../a1e7352cb76e72ae8babd03cba2d24435691cacf | Bin 0 -> 78 bytes .../a2234adada54741bf9c2c8fa442d41f235b6231b | Bin 0 -> 630 bytes .../a2762600ca77130edf61f8603ddad933c86fe035 | Bin 0 -> 2928 bytes .../a2a9be2415ffd86b9c8deddec8ee36a4b3125de4 | Bin 0 -> 1197 bytes .../a2d6faab06688763e917c57d1e0e7ae24341b86e | Bin 0 -> 332 bytes .../a2f4adfdaad11054e1abc61ef33a50286817612a | Bin 0 -> 78 bytes .../a35f547d061691be8317c53e645a961280b58378 | Bin 0 -> 1067 bytes .../a38ec54f12d923c693d9f2e794bd75eae2491b69 | Bin 0 -> 2223 bytes .../a3cd957807e3119065152d6665248394f6c8887f | Bin 0 -> 4285 bytes .../a3e8a5a8b0cb1e441b9d1a9baf572c1e3f122b5f | Bin 0 -> 1489 bytes .../a46cc1da9b1facc8205ca238b331cffb72d3f421 | Bin 0 -> 902 bytes .../a477300ff0bb0471d15012e80d84142bfd438c18 | Bin 0 -> 2025 bytes .../a49df1ddfd2ce833c917f8e51f1f136a565c4f8f | Bin 0 -> 630 bytes .../a4cdc00e4f33de3ba0e0d23df92f84595d334a3c | Bin 0 -> 128 bytes .../a4f969be4a5f7478a2559e47d8a1fb02aee22eed | Bin 0 -> 2223 bytes .../a507c4015665886d3d89e18566c790eecd1e18c4 | Bin 0 -> 630 bytes .../a51d7a6810368b08eb2183aa4c5ba2f943d8da38 | Bin 0 -> 122 bytes .../a5391841c29d257857da003eb8536c5cda60a7ab | Bin 0 -> 1955 bytes .../a5c6d9e4e126459612189fdd5abb34de24bf55a2 | Bin 0 -> 444 bytes .../a5d40a999d997d2189791ad0fe24ba085e4d4247 | Bin 0 -> 1010 bytes .../a620aef37d37a0dbf5b21699753fb3ff86378d1f | Bin 0 -> 166 bytes .../a6221853e3bd0b3dbac967ea5f7eed45858a4e23 | Bin 0 -> 166 bytes .../a63f07aad651466e8da95cc08ff20c54cd265a3a | Bin 0 -> 1067 bytes .../a64252ae24a5477882a1768917d4c219ebb494bc | Bin 0 -> 137 bytes .../a6863df5dd3a0c22e0ab924bdaf209d7f2f2500f | Bin 0 -> 31 bytes .../a6bf1ccbe3a7750057ea68440efe768718496ec0 | Bin 0 -> 372 bytes .../a6bf5f0b8d89e554eb1b66d6fee01dfe074b126c | Bin 0 -> 31 bytes .../a6c21e63819b0b21b99ae17d465710edbbcccf5f | Bin 0 -> 79 bytes .../a71a10d63097664ded0ec95754538b081420c79d | Bin 0 -> 78 bytes .../a71ca64cacbe0864e11c405f3ad3d084b9504c3e | Bin 0 -> 39 bytes .../a72b4b2a25708a485e7ce25631e962693b7aa778 | Bin 0 -> 1067 bytes .../a74019ea830032a39355b4c6854ff7759a75247a | Bin 0 -> 1246 bytes .../a76a690c4842b0d5395c8186b2a77777fc7e8d8e | Bin 0 -> 410 bytes .../a77af1cb679faa23ad49896cc79a0fd1cc324073 | Bin 0 -> 4285 bytes .../a7a794be79885149b41df177068ee575648888a0 | Bin 0 -> 166 bytes .../a7af17fdd0a2f8fd28b4f19eb624ebcc4c7c7837 | Bin 0 -> 25 bytes .../a7b03ce56f83da38eb0a0ffbca8356dfc3416db6 | Bin 0 -> 524 bytes .../a7bb6b50866cff0e6513880bbf72eed170d89e15 | Bin 0 -> 318 bytes .../a7d52ca4780717fe6c5fd77e4e0c0728bfc95566 | Bin 0 -> 279 bytes .../a7ed04ec9657cac80f19582541b904f0c44da661 | Bin 0 -> 82 bytes .../a827acfc0baea13177862f7682fde2c0a398e80d | Bin 0 -> 137 bytes .../a82e87be3357e6239d9e8d6f4ab4e5ee35f63ac2 | Bin 0 -> 94 bytes .../a8460d135ec4af5990c3bb8e010b75517001a402 | Bin 0 -> 713 bytes .../a857f0a5a8b0c2c9631296c71aee76c4fc75e411 | Bin 0 -> 4285 bytes .../a85a47dffa179291a7e9773c62ba3cf7aef41941 | Bin 0 -> 2577 bytes .../a87d055e51b24b8427ed89ebc3a56698b079dd60 | Bin 0 -> 1782 bytes .../a88ef304955f9e06631d76c3bf5b1de96aa5637c | Bin 0 -> 708 bytes .../a8a9180d5c2437fdb65d6d046fb31c29dc883ef4 | Bin 0 -> 645 bytes .../a8ab61872b0c973f2776075674dd61041e1e312a | Bin 0 -> 730 bytes .../a8eee8058dc6fe401c3b24b9ea9dab56a3359926 | Bin 0 -> 192 bytes .../a8f087aa706265738ca32b503a9aa13f525df7f2 | Bin 0 -> 1071 bytes .../a926b798b1fdc818e3ed37855b69a846b1958bf2 | Bin 0 -> 109 bytes .../a936a50b93a82a7d311aa3cda7f634602b524767 | Bin 0 -> 457 bytes .../a983139515dcf68a91979f84dac3673a88748fe6 | Bin 0 -> 1067 bytes .../a9b37ecfba4d16ebee88c3c0bcbe197835de9c1c | Bin 0 -> 124 bytes .../a9b55b630e9db5503144e477a9c2cce1e8fb0ced | Bin 0 -> 301 bytes .../a9c77a510743bc58d82e1172b54b05774c4a5a5b | Bin 0 -> 44 bytes .../aa2d0ce6f119d08ed03fcebc0ee6ca33b6b7aed9 | Bin 0 -> 35 bytes .../aa364e23a42949d80df951f0d74a3b7b2b26fe40 | Bin 0 -> 318 bytes .../aa60e73f58154efdf0bf2e5fd3647e6dfa12f2db | Bin 0 -> 1067 bytes .../aa9ac7daae501ffd69e62e70f4fb6c2b0ece9e8e | Bin 0 -> 301 bytes .../aaba5fc534a8ef2ad5eee91a1a8d7e48bfde9b03 | Bin 0 -> 804 bytes .../ab1316de30ad075d528f8c6c29c9f126995d758d | Bin 0 -> 3204 bytes .../ab2a077c85ad0427afad827cb1cffbd70e84c4a2 | Bin 0 -> 30 bytes .../ab60d4daa1b5aec8fa98786bb0049f526c5f071a | Bin 0 -> 152 bytes .../abc0dc78e5445b7573321d63599f314b4deb9be5 | Bin 0 -> 2928 bytes .../abd496ec1cd2db954b8664a4cd8d606659d0c7e6 | Bin 0 -> 26 bytes .../abdcb35a0e5e217f3c3d6c2218cba7e81b1b465e | Bin 0 -> 33 bytes .../acd5cf634396a62147a6f62dc64171b692caa3b2 | Bin 0 -> 16 bytes .../acedeaedf84f4117c41789b383b36c98a64b2ab0 | Bin 0 -> 1067 bytes .../ad311a7bc4090bf30171c48f965f09853e75783e | Bin 0 -> 7525 bytes .../ad46a8e4199b32e716d931f2a44eb20e896c3678 | Bin 0 -> 1501 bytes .../ad94a421f8a83bbc7374067cbb633ba2328687e6 | Bin 0 -> 1740 bytes .../adb6375b5f83a2121f4dc437b90f7889f0274a51 | Bin 0 -> 3831 bytes .../ae4dd2c7f6e204eaa9f128bc6166a154414a0c3c | Bin 0 -> 80 bytes .../ae738ff0ae90c0a0c03b7161249733a3487b061c | Bin 0 -> 146 bytes .../ae8934af9d15d624b634acb02fbe94fe7ba97a6d | Bin 0 -> 301 bytes .../aed5612286b84d942c531f6d2d6a4fd5d4bc8e71 | Bin 0 -> 111 bytes .../af474fdb34715de80c6c1594d756c8aaf3431956 | Bin 0 -> 98 bytes .../af59cf10a3d88c5145a25052f8fb10cb2e9d65c5 | Bin 0 -> 708 bytes .../af71372e458609c1a12102a39e9d49f958a8bfc2 | Bin 0 -> 163 bytes .../afafc43267ffae33a6cf5e38457f5448bf1c1e48 | Bin 0 -> 1067 bytes .../afed7825389000bf93d2945491d148634a554558 | Bin 0 -> 78 bytes .../b003d3f55ca65e2c44773200109eb9918daecbf3 | Bin 0 -> 4 bytes .../b01474b53a3f49ebf4927f400cf44c28213c6e8c | Bin 0 -> 37 bytes .../b02fcce0d4ea670de151d583ff5a1f75416363a2 | Bin 0 -> 932 bytes .../b053c3b25358b9c12b301c32588b62e20bf629de | Bin 0 -> 303 bytes .../b067eaf548220a54f227e200d28b4cbbe857408a | Bin 0 -> 185 bytes .../b0bcfd7a5298d3504c474b268865950bf30245b0 | Bin 0 -> 38 bytes .../b0bd26cddd1349914c3b7e27152a1424401cacba | Bin 0 -> 529 bytes .../b0c5632b6bb9a23851080394e81f9a6c623a2e82 | Bin 0 -> 1740 bytes .../b0e7750fbfedfd7ab5d938c5e4bc5403fca3107d | Bin 0 -> 357 bytes .../b0e8a473ebde2a237c1d3deab3aff4123396b6e1 | Bin 0 -> 242 bytes .../b0fb188512e8f6704a3574b1ea15f8e2b5971151 | Bin 0 -> 166 bytes .../b13e41a2a417a4b077da39f18413146450cd0595 | Bin 0 -> 1067 bytes .../b1472e1cc8eb05c27431d6fdddafcccdde2135c0 | Bin 0 -> 946 bytes .../b177d17a1b55c4ae3d1c2539cfea426ecf86a944 | Bin 0 -> 708 bytes .../b18003c9e56685f8965dc2ca229e5a1e1f7a5781 | Bin 0 -> 708 bytes .../b189198c7901c19082e551b93c457893712c281a | Bin 0 -> 145 bytes .../b198966f0f37eefee29b457e2267c13a65829d64 | 1 + .../b1f72e6ab75241ac51c2d4473c297fe8611fcf9e | Bin 0 -> 2320 bytes .../b21fc5990224ad004b57b8677ebc530ea3cd61f2 | Bin 0 -> 349 bytes .../b237c19325f76c12b389e4d181659701e7548fa5 | Bin 0 -> 176 bytes .../b264f5d799c7b4cc51f951c45ea6f24e94ed6da7 | Bin 0 -> 30 bytes .../b29dcf8d996a7dcda0c2272f0d1ca9ef9852cbc3 | Bin 0 -> 1782 bytes .../b2a59f566fdc8d876d8513561449b6a6a32b5049 | Bin 0 -> 152 bytes .../b2ca59a3cc8951076bd4f3650120c9cc81d4fa14 | Bin 0 -> 38 bytes .../b2db1e2815b3661404f6f5ae04120d6b97360514 | Bin 0 -> 36 bytes .../b2e5a6f6eaaa27165e9eb2a7ab08a5e79b0c4ccb | Bin 0 -> 78 bytes .../b2f676800004ec2a0a5c57cdf052328e9aa8e5f9 | Bin 0 -> 33 bytes .../b37b40e39f8bc22ad2c86b3776cc754a624878fb | Bin 0 -> 301 bytes .../b3ab5f0adf20d3806eb177bf04a743a930812011 | Bin 0 -> 1019 bytes .../b3b2db51f99c0a6a77f78e71fe107297079718a7 | Bin 0 -> 371 bytes .../b3d810cf537643984bea8abf415c4d240c513c3c | Bin 0 -> 146 bytes .../b3e808408c406ccf2b314c3692891da174838276 | Bin 0 -> 1067 bytes .../b3ef45ae541930ff86982fd5834a86458e9a21b8 | Bin 0 -> 6810 bytes .../b431201ea38a28ae87acf46784ddcb3247b83dca | Bin 0 -> 191 bytes .../b46de686e2e4c3ac33bf21d7b1d4163a8f5d42ea | Bin 0 -> 22 bytes .../b46eb914ca1b97912ccc335d057cbeee1d7bcd39 | Bin 0 -> 707 bytes .../b49cd3953da8bf032397d1ab24a1c0750608203c | Bin 0 -> 123 bytes .../b4dd6a94dde2f71673fc232c07909defc09a8bc2 | Bin 0 -> 630 bytes .../b5306f816a7a32a10c4bb0f021ed471cefc479e6 | Bin 0 -> 1792 bytes .../b5bd29c7bd41543f618064ff27fd9bff0b72c550 | Bin 0 -> 1782 bytes .../b62f98976c11d79674b019ea78a7ce4d6d78b479 | Bin 0 -> 2 bytes .../b633ac93f65745605bd0d72ad364fb02dd2ec56b | Bin 0 -> 166 bytes .../b672f4e36bb7b65b9692fb2d77d62dbc5a96ddbd | Bin 0 -> 106 bytes .../b676b9559d1e30c97d53963994855dccbba1de9d | Bin 0 -> 1067 bytes .../b6856f1c1bd5fd331a177554034416a47ffdf490 | Bin 0 -> 172 bytes .../b6bcdd39e2c72ab4b750cddaca31e837db718d64 | Bin 0 -> 201 bytes .../b6eff57374f9e93af911acef02c0a29a7627393e | Bin 0 -> 1912 bytes .../b6f4fbf27f088784dd34f5961c5a8007effe22b9 | Bin 0 -> 2696 bytes .../b70f87594aaaae03db97b3672aebf66a0ba310a3 | Bin 0 -> 214 bytes .../b71ad618646f1785b51050c4ba80f69664c6a636 | Bin 0 -> 132 bytes .../b74db697535f1701358c90ad8c0756b3b4dca486 | Bin 0 -> 216 bytes .../b77bf9f2ced4ac1bcc3ae5fc91f6e90b0b6f0b73 | Bin 0 -> 301 bytes .../b78afd11269a901777d105f1ce85cc6256b08e9b | Bin 0 -> 357 bytes .../b7918f2c9c99e270da3e8e055c289de9f55ef825 | Bin 0 -> 4620 bytes .../b7a75f6cb13f384316430dfa38f3d4aca3620337 | Bin 0 -> 3824 bytes .../b7c940fff5ba1080b185b7f50da77436a48ac31f | 1 + .../b7e42036050a4ab27fc55ef365b15ec64d07c101 | Bin 0 -> 897 bytes .../b7e54a505f4d60cd24845679355a6eb79d3886ce | Bin 0 -> 35 bytes .../b8105fbaf7f69f9d116ef92de71ed80e6dbcee7d | Bin 0 -> 607 bytes .../b8107f2a37d673b5323289e3744fc82c5592832e | Bin 0 -> 1067 bytes .../b84c318efd20f2981621c270506d1d872067e7af | Bin 0 -> 119 bytes .../b8519b94280d3db65659956a26308794ca314a24 | Bin 0 -> 150 bytes .../b852e463973d9a4959c7cb40a14e4d2108633643 | Bin 0 -> 73 bytes .../b8837e664d1a7e84a7849400039404f217ea16dc | Bin 0 -> 301 bytes .../b8858e115d1c843ef19d9b2d0936146340ec4ef8 | Bin 0 -> 127 bytes .../b8b5551c5fec2fd411e12b8c23a73cf807fb115f | Bin 0 -> 30 bytes .../b8be50030af6bf24ce735816c203338e76bdf602 | Bin 0 -> 136 bytes .../b91048059cc700f333297836f9f270a1654c7e7a | Bin 0 -> 1183 bytes .../b91dcad81a07b13959e6abe8b713784c9f4096d7 | Bin 0 -> 204 bytes .../b92bd0032a431e1feb68cdc57ca2344c190e194d | Bin 0 -> 1955 bytes .../b94fd86064a2daf3c855230fab14ba4d203e709a | Bin 0 -> 166 bytes .../b94fe0640faa72cdeefba5987be43f957d9c17d5 | Bin 0 -> 1912 bytes .../b97f5f9c650f6d1a2494cbf7c609ce0e5228ee42 | Bin 0 -> 2928 bytes .../b986b4efb5f09f77ca1328fc4f307feed5c97630 | Bin 0 -> 115 bytes .../b99ecdf2d38bb338f77e63deff9e4815d9f0b943 | Bin 0 -> 905 bytes .../b9a83680bb27e4fbd87320dfb6bb5a3a8e2b2f2a | Bin 0 -> 444 bytes .../b9fd13ad5fb973ffc71a7dad9e4184e9bb9d9f16 | Bin 0 -> 1705 bytes .../ba2f0b65f01fa3ed5b66843a6839c6a3fd6ea6bc | Bin 0 -> 4168 bytes .../ba5fdbce1bc3026aecae69d2a4f479b06fcd8fe1 | Bin 0 -> 332 bytes .../ba64e21aea8fcc70d270bac89ef21e16d41db1ee | Bin 0 -> 339 bytes .../ba70e67386e56414d85893ebf6db40e9127637d4 | Bin 0 -> 94 bytes .../ba9e3c974091cc39145eae3c393109c7ae9fdcef | Bin 0 -> 1489 bytes .../baeeb5027d2f56cf99b9b0445de45d5daf876979 | Bin 0 -> 125 bytes .../baf4907849e500b748c1c1d9d8765de3b0886f7a | Bin 0 -> 2512 bytes .../baf76f5d4ba6a69ede7351cabb95fd465675ec09 | Bin 0 -> 33 bytes .../bb09a2101f83bede36089b5e36974ad7f11b7553 | Bin 0 -> 54 bytes .../bb3eaefa532c6acccfef82c89500cbcbc86e1129 | Bin 0 -> 444 bytes .../bb61b707a58021e32ea83339eede94037c11bb3c | Bin 0 -> 1717 bytes .../bb76c1309aaa188d233484abbae8900ea3193ec9 | Bin 0 -> 84 bytes .../bb80f73b26f82a75191fe9f6b21aefb19a6ce840 | Bin 0 -> 1091 bytes .../bc00cdb43c45f9f25b968439554bf17f39584fe1 | Bin 0 -> 78 bytes .../bc09494155ec6730b41109b38d05eca77dbbaa81 | Bin 0 -> 112 bytes .../bc0f286f74600de786e5df7308fa45a98242f50a | Bin 0 -> 136 bytes .../bc3168a9be28442ae6863277a3ca3a14f4fe26b5 | Bin 0 -> 128 bytes .../bc62b9b541a7fd0a6b687a31ca795ce5faaa5762 | Bin 0 -> 170 bytes .../bc66392f205a38a85d06b2c049ab56a870668c1f | Bin 0 -> 1448 bytes .../bc8a51607e7f9a6b720562db22562d60c64ae0c1 | Bin 0 -> 1184 bytes .../bd0450e84141007ad17cb5c3f8ead730ae85be95 | Bin 0 -> 530 bytes .../bd240e219ee04d39877827cbdb62557041d19585 | Bin 0 -> 700 bytes .../bd52817d4e59491f8fe668f3f6086871bec6eaf6 | Bin 0 -> 50 bytes .../bd5ed7ff1e313b8d601f79ac854ddfb32e3a7492 | Bin 0 -> 1003 bytes .../bd70a4a5ee3653436b704b6fa68c639008ca8856 | Bin 0 -> 354 bytes .../bd7485271b71304b8ab46ffb852d7600a1a10694 | Bin 0 -> 332 bytes .../bdc63daa44f23e16374f5a3c34c017b8de83ea5d | Bin 0 -> 1501 bytes .../bde91802e3a12d7e18bc81d3fec561e3efd34e56 | Bin 0 -> 922 bytes .../be1a7f809a1c610bbef94690d3d52b29aba91be3 | Bin 0 -> 1935 bytes .../be233143edb3b0688266d3244255fd3f7fe1568f | Bin 0 -> 1067 bytes .../be2fc9cf168d45e253db03c904b48d28c0fb2508 | Bin 0 -> 3562 bytes .../be470bebec2d9cf2b6fa1feddf998c8b789c3644 | Bin 0 -> 128 bytes .../be55f1fb868186f26296af368ebe120f6a0ba589 | Bin 0 -> 1031 bytes .../be5d26d677bf27bbcaa8b33dd4acbd3dd9b178b2 | Bin 0 -> 2238 bytes .../be851801ff046965b260b1d18cabc45cacfbdc96 | Bin 0 -> 231 bytes .../be946c31746e25d8661d6d818a7f5854fd65dada | Bin 0 -> 1717 bytes .../be95a4b325a8f772ce969041a983358c14dcfdd8 | Bin 0 -> 42 bytes .../beb485622b00b8b1e5288007cd0b3bcd99fe4b07 | Bin 0 -> 301 bytes .../bec85210db062c230be9fc2166b44e45266ceff2 | Bin 0 -> 89 bytes .../bed1df80cee9de372fb3e8b318fcaba0d4ad1c0b | Bin 0 -> 78 bytes .../bf2482c3994aa9bef158b7b158694a342a0aacf3 | Bin 0 -> 24 bytes .../bf539243346c6cf91eb8275391f3898556c70414 | Bin 0 -> 419 bytes .../bf5eaf1402d9db01ddc775b8d47a15ffd2fdaf4c | Bin 0 -> 176 bytes .../bf8a3e8284a2bf92a111a0b8cd21ebdcb318bbdb | Bin 0 -> 238 bytes .../bfa004e94dfab73fd9bbf2c9be4e0eebc633e153 | Bin 0 -> 1448 bytes .../bfbed88b8fb76c84364885ea9c01af6d62e9c11f | Bin 0 -> 2012 bytes .../bfe5fbc32d35119d22f8370d06baef98f4763b85 | Bin 0 -> 524 bytes .../bfeea7e7199e935e783a4e98b71ed8c6e203df17 | Bin 0 -> 332 bytes .../bffd46b6747dc78e6db02620e39f73d501de558c | Bin 0 -> 708 bytes .../bffec02c9ca671497c8675b3d1c4b1c487bca891 | Bin 0 -> 1067 bytes .../c040020e7e03e7ed93db662bbcf8482720971af8 | Bin 0 -> 4663 bytes .../c0613801dc6accf1a7730fc9860c9ad5f7b23e77 | Bin 0 -> 205 bytes .../c085c8462d9cf260fca36856b3bae09e28f6d2aa | Bin 0 -> 47 bytes .../c089746db69c2e9b7dde16afa1b5be17d31f8411 | 1 + .../c09d87ebc55bf6b4fa1e1fbcada7b443d820f105 | Bin 0 -> 630 bytes .../c0a729df29cf830288d0280115ec0d48d2a8e85d | Bin 0 -> 695 bytes .../c0cb64e7406f697972417cbc2b90f9318efd6470 | Bin 0 -> 33 bytes .../c0ccae70253577beddeb5d66d3bf8fc43dce64cf | Bin 0 -> 1585 bytes .../c0d95a4541ce290f4187ba4305999ff9699e32cd | Bin 0 -> 83 bytes .../c110fb7f02a2f5352fd2cfc838740c34c97a8376 | Bin 0 -> 1955 bytes .../c14b787ac214c866829eb8e82e4cd4a4c2ede4ca | Bin 0 -> 302 bytes .../c14dc43383f167a0604a5a3e1f9e91593a6cecce | Bin 0 -> 128 bytes .../c18f967c134742f9cd2e77473f72257602aeed5c | Bin 0 -> 1501 bytes .../c19a2ece62ebd1c0e4479f3e7c107e54c9eb03b9 | Bin 0 -> 78 bytes .../c1ae0354c3f71e6fd52b4200633eed028f3cfa3a | Bin 0 -> 1475 bytes .../c208bad79de1b615ee46563ee04dc8df7bba4905 | Bin 0 -> 1281 bytes .../c26e1372cdd097b4495a9174d3afd8a44c39492b | Bin 0 -> 2941 bytes .../c28aa176f216bb349f771ee160a03fc8da9b38b5 | Bin 0 -> 77 bytes .../c2a08a5eb3df7a8b46ee691547671b6ca62f0fe1 | Bin 0 -> 85 bytes .../c2ccad1c58f1da488745efdd24d72437c8cc19dd | Bin 0 -> 301 bytes .../c2cd4c94720f9e743a37455191ac82702a5b09fa | Bin 0 -> 444 bytes .../c2d936b5aab4bbe95ccdcd3afc5158a477ba43ae | Bin 0 -> 630 bytes .../c2e9c9a6d4bd98298e20b4f1e4a619e8ed8c93ad | Bin 0 -> 31 bytes .../c2f4f1f7f4cebbd7c8d6f1b650e20372266841f0 | Bin 0 -> 589 bytes .../c301c75107d09070115cc1f65f62f06e97081486 | Bin 0 -> 11 bytes .../c34de67c32847273fbbd8fa00955cb970772dc11 | Bin 0 -> 332 bytes .../c3622f35ce3c2556e365602a2613bdae1dcf9f11 | Bin 0 -> 708 bytes .../c393defd22118c3cd733065867b3298fbfbcc704 | Bin 0 -> 541 bytes .../c3adebb15dbccf28359dd24c3f1b4b14235ad964 | Bin 0 -> 731 bytes .../c3d6efdf327c7c8b90cde5caab1486ae8a762f31 | Bin 0 -> 2928 bytes .../c445808d011199fba42a2dccfca217ee20c4d2a7 | Bin 0 -> 708 bytes .../c47f7e2e41a94282a405520bff71b21c17fd6532 | Bin 0 -> 81 bytes .../c48a891cb4f22704394f3761a3643324c0a09274 | Bin 0 -> 444 bytes .../c4d3aa801f9a5afc13824852cb2b99050bf5d3bc | Bin 0 -> 31 bytes .../c4f5bad1c8aae182c158e7a4784fb8beca6abd1a | Bin 0 -> 332 bytes .../c53546ee7deea0a15b8e270ac1f910dbbe145ce5 | Bin 0 -> 579 bytes .../c5400f184a615566314bb604ec29ee49139c811b | Bin 0 -> 2928 bytes .../c5411c11a8c3a6afae6dc97071934f597fa61ca2 | Bin 0 -> 444 bytes .../c586c3ef4f346e91c0b30f3fd41604f364a83d59 | Bin 0 -> 1890 bytes .../c5894b7e45127829d78fe257569ab1ea4b06e489 | Bin 0 -> 1183 bytes .../c5cbd11555607fb98ba591be1e117f544dca5eac | Bin 0 -> 1086 bytes .../c5cd384f7927f2be4ccdad20a41ad889b3b72eb2 | Bin 0 -> 332 bytes .../c5e0dbb839b5c39c740ac97b3d812389e0368aef | Bin 0 -> 138 bytes .../c5ff7482f5ccde1a1bbf0b52a92e884b2ae37067 | Bin 0 -> 111 bytes .../c613de65e5c11e6715e1d0229fda87f49bf1c427 | Bin 0 -> 301 bytes .../c631d57065bf76fc53c202dde361bf0dc93c80bf | Bin 0 -> 36 bytes .../c674c1a87ba97e4cf9522cff8907be4e9b0e9ac4 | Bin 0 -> 105 bytes .../c695d8dbae2e086520de349c53c99589647f17ab | Bin 0 -> 143 bytes .../c6a62168d19e44cfb391cd4c070b0f20ad2554b2 | Bin 0 -> 921 bytes .../c6e9f2f62ce4d03f027e494a5e38163623ba3f6c | Bin 0 -> 78 bytes .../c70a08d8d03bf6b4769c91103488edc93613511c | Bin 0 -> 44 bytes .../c74cb839bb574bd3d0bb977335c6d8d88211101b | Bin 0 -> 1411 bytes .../c75504388cf6fab861b7cdfbb83279394c987106 | Bin 0 -> 332 bytes .../c79f835b5a87a4fdfecaecfb4317f03a5efb8499 | Bin 0 -> 332 bytes .../c79f98bd8b9f1dc010c7c01d48652c5538c9a77b | Bin 0 -> 1996 bytes .../c7a0fc949bcef7ea5b50c581ec4863aebf181e8e | Bin 0 -> 540 bytes .../c7c66334680f90d511ea3385ced7d070744742b6 | Bin 0 -> 4620 bytes .../c836a1094f95527ab48894b30b93bcb409f31c81 | Bin 0 -> 630 bytes .../c83b2d48b56cfadd23ffc0adcbcd723a01c69201 | Bin 0 -> 630 bytes .../c859eb4f280728d5a56f730285b7cbaf4ca07749 | Bin 0 -> 78 bytes .../c86fe60112fb4d97d30033e2625b7cc5ae36598e | Bin 0 -> 76 bytes .../c8b1be341f845536faaebf9947a55428622cb337 | Bin 0 -> 1067 bytes .../c8bbdc5a30ac22b62214e6c4215e09e1671e6592 | Bin 0 -> 82 bytes .../c920e1cabafecdec60b94f291c976905b28778a9 | Bin 0 -> 3731 bytes .../c93061a8306f36ba77becd405fc665f995585b6b | Bin 0 -> 4992 bytes .../c935332a10d9eae817957b17df2e90fd39cad324 | Bin 0 -> 1452 bytes .../c93a4415cfc384a4e54425ed7629d132a9cbeaef | Bin 0 -> 1501 bytes .../c956a57c264f94a84b043b4a7c418af30d7fa320 | Bin 0 -> 276 bytes .../c9bdc60badc8964df7c1ad965e0c3be923d15004 | Bin 0 -> 88 bytes .../c9c7330d002fcf76c8823f9791242c1d018ce7d9 | Bin 0 -> 465 bytes .../ca80f1053e114d1c1bac568734c5d736fb47d58c | Bin 0 -> 113 bytes .../caa0a8b0830f81459393b89ae0c07012789d330d | Bin 0 -> 87 bytes .../caa55908f8f973f987ce9a91f7a26bf384a257e4 | Bin 0 -> 1493 bytes .../cab4a407e533ebbf5fc194bef93a0e0ca1a898a3 | Bin 0 -> 254 bytes .../caea3bea0fc80b30c0a6b449e4e205cc8bf28f20 | Bin 0 -> 100 bytes .../cb0c61f009223ff660b702d7fe2a72d2c70d67e8 | Bin 0 -> 1114 bytes .../cb583f4f0902a26a6f53e95f1a511f8642eeb0d3 | Bin 0 -> 152 bytes .../cb821b01fb7c4723ed0d6c86462a8ad42a7ff402 | Bin 0 -> 400 bytes .../cba275dc8965ce4c778ab0e4a3d006afc446b7e9 | Bin 0 -> 444 bytes .../cbea3bf2f3432acd4887dfa84d39f562975618e3 | Bin 0 -> 78 bytes .../cc02bb6b8b52e7990ccce81b6e6c03cae51e5c5b | Bin 0 -> 136 bytes .../cc2fc46f307808ab5e33f974358a5e4ee1ceeb7f | Bin 0 -> 301 bytes .../cc346599e2c62dcb5b69f64f0635b8359b96b9d4 | Bin 0 -> 82 bytes .../cc51cd681b3c2957a95c9d61f7645023dc8778a8 | Bin 0 -> 708 bytes .../cc72e079c650406ea299bb21a607221da4d08d76 | Bin 0 -> 72 bytes .../cd456928a7a15f8f6cabbab791ca24504ffe7dae | Bin 0 -> 1067 bytes .../cd788ca825474404c2a23603435fcfcc4c9a7a00 | Bin 0 -> 790 bytes .../cdaacb5e69f0449a2c56a5878807096b27ff264c | Bin 0 -> 444 bytes .../cdc50883f2132d6af661235fe15790815d6a4a7d | Bin 0 -> 284 bytes .../cdcb7cef05784193bae24f713d8f190ae3ab61c4 | Bin 0 -> 332 bytes .../cdea23e12030bfad6c546e40874110539f2fca35 | Bin 0 -> 2223 bytes .../cdf8f3a46d8daee7c3d3a45e1b7a08d5eb487c47 | Bin 0 -> 2231 bytes .../ce0228797c782bf49e740304f64c000519f66256 | Bin 0 -> 100 bytes .../ceeb6bfb2816467b8aa8ff0bdd716ac0fd66738d | Bin 0 -> 1782 bytes .../cf1591fa50717a9f34ad709377150bd4b4b258eb | Bin 0 -> 332 bytes .../cf16755c13167d90455a44ceb68152b39ed7ad82 | Bin 0 -> 47 bytes .../cf2f9fc25017e9039bea985c3d43864630fc21be | Bin 0 -> 986 bytes .../cf5e31b460e0d41910d22abe713f483c1e8124a3 | Bin 0 -> 95 bytes .../cf78e4db8ca900846dc5360f98ba07be51ba1f26 | Bin 0 -> 39 bytes .../cfccbca78ec5a2cf130de378894cba0423a5e86f | Bin 0 -> 140 bytes .../d0160fac06480822796797f387271ed582efcbcf | Bin 0 -> 166 bytes .../d01ddf5cb2d2b0f6d01de3ca77d6d10b1505d7e1 | Bin 0 -> 987 bytes .../d0418c4dd8d702d2af1dd0e8a0e8079d13bae976 | Bin 0 -> 332 bytes .../d04cde2115d499fd9bf8e02c1cef92bb5fcfe079 | Bin 0 -> 166 bytes .../d05cc6c8e8aa0c19c6aa52218c4bd648a74b3753 | Bin 0 -> 99 bytes .../d068e6396012990e8145d81061920d6c4ab53657 | Bin 0 -> 495 bytes .../d08eb103a8bef1740c41f1f273c4225672d71880 | Bin 0 -> 137 bytes .../d09a34c5eaafe4500e91df28796edf19c2bcf240 | Bin 0 -> 2349 bytes .../d0c58844ac08740cf83d5908ed001031cfd23e6a | Bin 0 -> 152 bytes .../d0ec75acdb7339726109448e380ff12e5afdbd22 | Bin 0 -> 102 bytes .../d0edaeac423dae22e0c6fa47d27de63da76e11c2 | Bin 0 -> 1111 bytes .../d11101e007435381d7150cf5a094d1bc9fcb8b4b | Bin 0 -> 482 bytes .../d138385c4a97582b8c14354771c866384f6509ca | Bin 0 -> 1448 bytes .../d14ee6ebc9dc994f33efee0746be5e036e091891 | Bin 0 -> 580 bytes .../d15bbf769835e5afe48e443e0223140aa8b80d70 | Bin 0 -> 78 bytes .../d1603a38df74d8d9375ba254128d85339e4040ef | Bin 0 -> 332 bytes .../d17b2718aeb18bd22a704b41931dc1b0cfdf6f7f | Bin 0 -> 1782 bytes .../d188cb4474ebfb6f8c8beeaf4555632fb7f37f00 | Bin 0 -> 1359 bytes .../d18c65b463fbd958e8d4773414eb07e3cffd1b72 | Bin 0 -> 584 bytes .../d18e10341bb4487f3db92f64d2529afdcceed686 | Bin 0 -> 357 bytes .../d1a8e5dcb0aa25923ad931aebba2c586be439f77 | Bin 0 -> 1452 bytes .../d1ca3b53ffcd7f674e4d1db9eec0dae138af9eb1 | Bin 0 -> 3044 bytes .../d20a0877ee8fc6467e286514b5f664cb7989f3d6 | Bin 0 -> 4285 bytes .../d211939dad2567292ae6b35a1338ef8621ac6009 | Bin 0 -> 1098 bytes .../d21a8ad79183061be4ef36853b32b98524ec102c | Bin 0 -> 142 bytes .../d228c912e2158c7111def143edf121a71a232518 | Bin 0 -> 301 bytes .../d24a9b0ec383c591302869f379bc2bc3e9047b91 | Bin 0 -> 53 bytes .../d26270f65c88f36b8797c703e275cdd8a55c2be7 | Bin 0 -> 440 bytes .../d26cf4c31166242fba310e9c12051b95b35657f0 | Bin 0 -> 332 bytes .../d275963cce7abd1b306272bbfdd98a0897c596ff | Bin 0 -> 522 bytes .../d27d0e240e9498bb93a515fd6e38030fb5a6fde9 | Bin 0 -> 156 bytes .../d2990a949c904e378517fde69640a4729e9983a0 | Bin 0 -> 1067 bytes .../d2b18e067bdccf31a1fc155597a9ac945b4ff7a1 | Bin 0 -> 113 bytes .../d2e37ae311fcb609f9e56e00177ac1f9483c0883 | Bin 0 -> 708 bytes .../d305f984afc8296871a4e808a4a8d43b7220fcd3 | Bin 0 -> 30 bytes .../d3d0441653ec326f47898764081722fc0eab7408 | Bin 0 -> 1782 bytes .../d3d3aea59be94d01b18dbd609da97d14253a172a | Bin 0 -> 622 bytes .../d3eff2f87311ba7732df410b356a9fa7e1ac020b | Bin 0 -> 114 bytes .../d408faf00b183c6a91ae1eebf8be6cfb7e868852 | Bin 0 -> 32 bytes .../d40d2e0a06f7d538c1025f947142fa92941395d0 | Bin 0 -> 483 bytes .../d461af8cad7e56c879eeba5ecf6f2f34f910ce63 | Bin 0 -> 48 bytes .../d4654add22a170855b090f4007c2ea41be21fbf8 | Bin 0 -> 97 bytes .../d46d1c5be3e3c3136e4b3dee8b7aff4c153ec0ca | Bin 0 -> 763 bytes .../d4b314a8baafdc61a676a4eecd32031d5d1b641c | Bin 0 -> 207 bytes .../d4c717355627cbee34144ed58f108b150bf3a2e2 | Bin 0 -> 1067 bytes .../d4ce9aae50f1fb1eb3d5cd465f31f9e4dfc55a80 | Bin 0 -> 439 bytes .../d4cf0a4273460ae24b06ab32d91f3b26bd855343 | Bin 0 -> 456 bytes .../d50a6097c85be0c38238c610ccf3ed1688bda395 | Bin 0 -> 146 bytes .../d57b227428426905c34e4672c46cfda899d361ac | Bin 0 -> 313 bytes .../d5a1255ce6a0cae3ab979e1780df58340e8828a0 | Bin 0 -> 1224 bytes .../d5c657a17413a4ecc6334f4ff25d5aae7ad30957 | Bin 0 -> 708 bytes .../d5d83c1b4377ad39e7f14fd8ee7439efebda8a38 | Bin 0 -> 318 bytes .../d5ed6e377b075032c4fceb469f6b6ffb0011c0c4 | Bin 0 -> 33 bytes .../d6180b617125e273696e24ca62d638da71f195c6 | Bin 0 -> 119 bytes .../d6781365552c599b05319e287d875d5352814bdc | Bin 0 -> 60 bytes .../d68c0490e877247d75363b50043c73dd44d5f8a1 | Bin 0 -> 166 bytes .../d6945a91efa06e178c8994567688d03f7e0fe93d | Bin 0 -> 136 bytes .../d698d435d72839762d845670b66297b40f772865 | Bin 0 -> 1869 bytes .../d6cc4eb420fddd5446fa0f7542929014d9509acc | Bin 0 -> 1281 bytes .../d7190fc735cea3bbe095656a55db13d92484755f | Bin 0 -> 1566 bytes .../d71cf481f6853a4e49fd49e2cb804daba0be0de8 | Bin 0 -> 132 bytes .../d71eba23161fea2aeb594ec0968484df06378cdd | Bin 0 -> 30 bytes .../d781bcd7cd9b5570079aec4ca5db42ad9212b93e | Bin 0 -> 52 bytes .../d79c54a941705823101dcb4d208add097d0516e7 | Bin 0 -> 374 bytes .../d7b013aa42fefe6c6b51a41a32d89db180857b58 | Bin 0 -> 5020 bytes .../d7e5ba7fff1fde39c4a1d5fec1f78f8bbcb66666 | Bin 0 -> 356 bytes .../d7f0fc3ac2b164008c8969f6881cc1e69fdf97ca | Bin 0 -> 187 bytes .../d805c36e4fff02066edb91bc7e570d7d9262c69e | Bin 0 -> 1585 bytes .../d8c989aba0f45b8e2610f5c4bad1cb61cf25f465 | Bin 0 -> 1183 bytes .../d8d5c3928fedd81a2c7bc89006856b14c3b54447 | Bin 0 -> 127 bytes .../d8ec4464ba6f63fe4f6666349a6a15e55bdf11f3 | Bin 0 -> 630 bytes .../d8f51c8474d34d04566d108d607b5efafb2648d5 | Bin 0 -> 65 bytes .../d9371622ac9eb9cdf7aa5e831d363b6164fdce7e | Bin 0 -> 301 bytes .../d960da072311d8b66b7b2c6b4988f079a78ac4b7 | Bin 0 -> 152 bytes .../d97e44cba4b98ec86628da64d13fd746f41823ba | Bin 0 -> 708 bytes .../d9ae8b0f1a1c1656076abc86cdac024ea4487b52 | Bin 0 -> 58 bytes .../d9b91257ea03cddbd9a572b7aabe7f80f93d81c2 | Bin 0 -> 164 bytes .../d9eda4c148afa43f6f93dd222960b110a1608707 | Bin 0 -> 1329 bytes .../da041bb3db3435e498fe40d4d322661e3c121a58 | Bin 0 -> 205 bytes .../da1162d416280327cfa6fc3c9bf39f0543cc1505 | Bin 0 -> 1782 bytes .../da1b76e4081ffb340e7146cdba8e6a6fea45705b | Bin 0 -> 24 bytes .../da417829dbe2ca5bdee30ccea654cdd92486ec14 | Bin 0 -> 1019 bytes .../da5f56ef13c722916b5c2ff8190afd4726c8d20d | Bin 0 -> 84 bytes .../da7a3c7e64a101bb271b43d32df51b00624893da | Bin 0 -> 535 bytes .../dade5e291893aace89026e0a2bb80d1656cbb182 | Bin 0 -> 4285 bytes .../db36c872ce0e072cfd25e974ae5a51a30b47dda7 | Bin 0 -> 35 bytes .../db68fd3f8d92535b766d4446c2253a8f8389409a | Bin 0 -> 2928 bytes .../db7527c46d2d97ea00cbee890cb39b00348992f9 | Bin 0 -> 83 bytes .../db7e92e737364128ed6d4ea71b4b9dc5ed34063c | Bin 0 -> 225 bytes .../dbacbd58bcc1ab9587a2933f58c4070da327afdb | Bin 0 -> 67 bytes .../dbdd04b97c7eca13df568f45431e22f0bf5506be | Bin 0 -> 78 bytes .../dc15c304ef63ba400d6c52661334da0e79e5eb97 | Bin 0 -> 108 bytes .../dc1ad44817b74a46c79a5bd9f4e1f6b3d2f76a5f | Bin 0 -> 46 bytes .../dc2fefc1639efbdd5ca75ec3171abd4c5d169024 | Bin 0 -> 89 bytes .../dc682d9ebbda6e3eae29f012d4e4c3c421533efd | Bin 0 -> 3501 bytes .../dc69d71f572600cae157b4a6614f42f0c695827d | Bin 0 -> 1229 bytes .../dc6db6cbe8f8c8b0fc3af7d23b56401dfbbcfded | Bin 0 -> 1782 bytes .../dc837f3d8b125c6dc1b716d20a7ce19032052fb4 | Bin 0 -> 66 bytes .../dc908ee2eccb5e54f69ff1ce61dda04b2604fdba | Bin 0 -> 708 bytes .../dc966c8130eccb6847a974ffb7d26daaae4fd6b6 | Bin 0 -> 82 bytes .../dccf0b2a5a1b0e7c6b664ac1b38fde563509f95c | Bin 0 -> 1686 bytes .../dd1fb938b3ad11716e57894f5f2c341fdf882e82 | Bin 0 -> 16 bytes .../dd4ca17418a2a573aea84d9d3aad101dbc09211c | Bin 0 -> 1352 bytes .../dd624397a50dca33bc01b1c15c3df016b7908547 | Bin 0 -> 630 bytes .../dd6eea36acb1996444db63776b5978be9c11c7e7 | Bin 0 -> 1912 bytes .../dd8490f3703641f556326dd2dff6b7e2cfb803a3 | Bin 0 -> 2476 bytes .../dd9c843cf008f3e288a35e0c989f5241f1d82f0a | Bin 0 -> 1055 bytes .../ddb02e7db35e1df44ab949b90577ee2810055f1c | Bin 0 -> 993 bytes .../ddc51c84bca0db8ca0cc7a34d35e386385f69f6c | Bin 0 -> 1501 bytes .../ddcb304e041569e3ad0d905af7889e14ae23f653 | Bin 0 -> 162 bytes .../dde4a5605e4a938ae8d38e0e04da3d2e8709eb5b | Bin 0 -> 78 bytes .../ddf769c9c78d9f5d0470731fb20bfc1aa005be3f | Bin 0 -> 33 bytes .../de1050ad79c4a0bf047bad8e8c21b421fa11d583 | Bin 0 -> 1067 bytes .../de54f2f13ebb9e7385d62932583cc9a99cc98f45 | Bin 0 -> 80 bytes .../de8387f580c5d51ab78c79d7ce9bf847ef165fae | Bin 0 -> 72 bytes .../de894c47ddb837db9dee4df751fb2e4c7d5d4a4a | Bin 0 -> 254 bytes .../de9dda6497bf114f57f96078effa486e6b398fd4 | Bin 0 -> 1067 bytes .../dea819cb8be58143fdccf0d016aa271feef2e282 | Bin 0 -> 95 bytes .../debfa36c66a729509b706ddd79c39cb2da7fc78c | Bin 0 -> 731 bytes .../ded9124458fd25e075d4ba7033884990a7f949fa | Bin 0 -> 199 bytes .../dedce71ddfc94add8b6a771dcb86a7a75b1d0145 | Bin 0 -> 1281 bytes .../dede0b1c8c614a117c95164a879139291966ddc7 | Bin 0 -> 2928 bytes .../def7b9b5eee2f88bba9bb265a1c554cab1151166 | Bin 0 -> 110 bytes .../df0614c595eefc2cd8d2024620c06988e6f75890 | Bin 0 -> 14 bytes .../df686cce212986a141113b69364403e974edc5ce | Bin 0 -> 137 bytes .../df6e9f853b47bd64d838490f743fcd99c50e8ed3 | Bin 0 -> 1021 bytes .../dfe52f400361419f40cb26b439d4dd6a9c480652 | Bin 0 -> 142 bytes .../e01e79c61fb0aa6177f97332e4cf56904fabeaf1 | Bin 0 -> 4285 bytes .../e02762a8cba0803c2645b2d448747f091d7cb057 | Bin 0 -> 170 bytes .../e0297451c9347b7e2d82e17f42cdfe9fd8c3ca95 | Bin 0 -> 42 bytes .../e0938df8271e974b7995bc10611d9c4fea480a42 | Bin 0 -> 41 bytes .../e0c1d8a32cb152699a404bcb49f3a052dd59d024 | Bin 0 -> 301 bytes .../e0ea5dc5c76a140c6a22780be5c5906c71d7a70d | Bin 0 -> 456 bytes .../e1007f494952c7297fb25d48ce4aa5b8de303aaa | Bin 0 -> 1501 bytes .../e112c6d78af405f0f65f0338411b91425e1a85f7 | Bin 0 -> 1912 bytes .../e11c95d648c99e60a5d673baabbf9a3483b25fcd | Bin 0 -> 5726 bytes .../e12f5701ba2eb07504cea8f2eaba9d5a50f75114 | Bin 0 -> 1585 bytes .../e14022a3ee20979b93e846bbdd005c437a7f0aaa | Bin 0 -> 113 bytes .../e14a02006eff0e43dfdb55e36909c5879ba7940a | Bin 0 -> 4620 bytes .../e1532e45398e6c7c0f1ade8dc785b1a45007499a | 1 + .../e15aa8d4ba440e84665af9ea0a6603ce063ffbd0 | Bin 0 -> 112 bytes .../e180a3d31c43db5ce2c0ed9ba1254f1786cbc717 | Bin 0 -> 804 bytes .../e21a7926ab09e0d427beda8cca2461a3650c71e9 | Bin 0 -> 325 bytes .../e226f1ca99c925e350b0f6cc057836c1e4942901 | Bin 0 -> 1955 bytes .../e2392579d3d330188eee8957c3091cb1325c91b1 | Bin 0 -> 444 bytes .../e23d153fc85007e10d2119a42c59eeb3f5e3c3a0 | Bin 0 -> 708 bytes .../e23df03c2ed3b91e18a313f6e4a5ad89621cd83d | Bin 0 -> 120 bytes .../e2658176b4d37a2ab90da32a82ca6e254e61c01b | Bin 0 -> 804 bytes .../e27797e63fdfcbb8c816cac010c58a489dab858b | Bin 0 -> 291 bytes .../e29b779de04be6fb734ef1eac3907031e7df4dc8 | Bin 0 -> 117 bytes .../e2a6eb5d03038489ab81e4f947258bbda812703c | Bin 0 -> 206 bytes .../e2c31f7add43245d8dfe8a608db310625f843e26 | Bin 0 -> 126 bytes .../e2e2155109a0284745d0b9dafee9e78a92e52d41 | Bin 0 -> 1442 bytes .../e2e7fa88c0c379f3e59163b05ecb70081f73682c | Bin 0 -> 1912 bytes .../e33c00965f68e83324d0a74d1f5fa2310491d83a | Bin 0 -> 115 bytes .../e340f3cb15bae8656950a7988a43ded179c31c13 | Bin 0 -> 332 bytes .../e348356d6210c6bccccece30d1ddfdf889766167 | Bin 0 -> 331 bytes .../e3523dda699e8d40f5b0515dbc8ce6b1cc42eb75 | Bin 0 -> 146 bytes .../e38ac3424757e610391f9177bf98e0fe96385e29 | Bin 0 -> 78 bytes .../e3b4b8e9649737dec113dff66a147161beec9eef | Bin 0 -> 98 bytes .../e3d55927e1e6ea2ab30042675e9a03014b0a1f1c | Bin 0 -> 910 bytes .../e3f8a03651e68728571ec24de70ba0b4c29bf85f | Bin 0 -> 284 bytes .../e415cf8acb1fe9e1a552cb4d07986075633c459b | Bin 0 -> 160 bytes .../e436accca8f860cc103cbf06c87be471012a4e22 | Bin 0 -> 52 bytes .../e443d6cc98578b025549636b7810113a602597a4 | Bin 0 -> 51 bytes .../e44403acc41ff34ee1dc9f09b87846a29e93ca07 | Bin 0 -> 708 bytes .../e456e6e0ddca38bd65a3c229bd36dcc2d2f0cc90 | Bin 0 -> 357 bytes .../e45a6c7cbf38ffee08605de07bb8715797a5a4d1 | Bin 0 -> 1251 bytes .../e4683b91c43b8c7c374af6c379263513c0fb14e0 | Bin 0 -> 357 bytes .../e4b6628fa56f029df489bc1af5d941d6d12110f3 | Bin 0 -> 78 bytes .../e4d327680c1970cb2b0d762aecf65af20f1be4ed | Bin 0 -> 3519 bytes .../e4ee0945aa0344ea30fa6602b6aa1fe373463972 | Bin 0 -> 1792 bytes .../e54f548b2232ff83cd1a80707caca43de80ffa77 | Bin 0 -> 472 bytes .../e5a7874e8a586dfbf3345cc99980781ae9ec001a | Bin 0 -> 112 bytes .../e5c49b81a37def36b573066742a99e8529531329 | Bin 0 -> 1782 bytes .../e5dc886614397985b34a7df67cb6fb6d6f1e9b54 | Bin 0 -> 52 bytes .../e5e621c54968669ea597b224306be65ac775f20a | Bin 0 -> 1067 bytes .../e5fb891d97128302ccfb4a476d00795396def34c | Bin 0 -> 1507 bytes .../e60b2b833543c26054383031e7c2f3670687756e | Bin 0 -> 127 bytes .../e60ba97b85452b66e5853947abc52f6df1016984 | Bin 0 -> 1358 bytes .../e640ba9148706c7f79fafa89ce92b216dc49e31c | Bin 0 -> 708 bytes .../e658832cd0ab54ef804c15ad15cbf8cb6d4a5b99 | Bin 0 -> 1782 bytes .../e66ce481f61bb4987b6c21a727dc95fb2e981ab6 | Bin 0 -> 80 bytes .../e6aef83e1e5fbbcc9f3ecc7fb3fef1c5f526d760 | Bin 0 -> 52 bytes .../e6c8300822466ba05d72b98749c9a2bd7146832f | Bin 0 -> 2645 bytes .../e6cec5e0c9305b5c928a2c2853110655403fd00e | Bin 0 -> 325 bytes .../e6ea585dcc06ab8fee62c1651844c8002cb8ac4f | Bin 0 -> 880 bytes .../e6efd16a429eaf42f03337a5d5c9321621c0c2da | Bin 0 -> 741 bytes .../e71523d7ce97ac545c22efdde520a527be325d61 | Bin 0 -> 1019 bytes .../e71e0ff5c528f030c6b6b8b1bce03ea7bfaa2b1a | Bin 0 -> 1286 bytes .../e7296e0d49aa70bb2aa686f152796214a42a6c48 | Bin 0 -> 398 bytes .../e76124e19c8caa7784d95f674aa4ce3b9ab0e587 | Bin 0 -> 506 bytes .../e7d44156dd542ac03777831416974e004591fed5 | Bin 0 -> 99 bytes .../e7d802d8b79c06d5116cf638cb9585c9b686bcba | Bin 0 -> 44 bytes .../e810b9e633738f9951b581a85912799ef3d06a03 | Bin 0 -> 51 bytes .../e81fec862ba3e6093257363fd5296f210fe94ae4 | Bin 0 -> 2408 bytes .../e837d504fdbd948a03a4caf87a89fc3e4982a8a8 | Bin 0 -> 78 bytes .../e841fdc6c46a16da425017f3feb1c3952459b04f | Bin 0 -> 52 bytes .../e86cb9f346e70d58256ce7638311e9622b7e942e | Bin 0 -> 1111 bytes .../e87b3d1d097b824a9b5d9fa46fd8a51910975b09 | Bin 0 -> 630 bytes .../e8ca7bae4d70a5e7d510a89c744099a347c645b4 | Bin 0 -> 630 bytes .../e8f76d9326f3fb45b4c9ac9aa503fb90cd0aca05 | Bin 0 -> 124 bytes .../e91637c22513d4377bc202d2b279008ae3ede58f | Bin 0 -> 1208 bytes .../e923cb95928abb7c9c6684a3b4ee5d313c1170c2 | Bin 0 -> 318 bytes .../e92bd183fa66c3166425a5dcdf19d6d91c0b188b | Bin 0 -> 6560 bytes .../e937bc11a10040616a32b5574dab9ae2328f6795 | Bin 0 -> 708 bytes .../e93ab314bc7500e43eafa0ce98ffca5e01f514d2 | Bin 0 -> 708 bytes .../e9517ac50d00219ff33f5dc4862e59dbb6d8eda1 | Bin 0 -> 1217 bytes .../e97ef39d02f6d595d80c9055419d3bade4c95042 | Bin 0 -> 110 bytes .../e9ce7f5b46545366585b0fb63266311ee09d9bd2 | Bin 0 -> 301 bytes .../ea4b2d41cbb6293e716b117af0cebf3a84eb3d37 | Bin 0 -> 98 bytes .../ea63bd3a7b161b9c24c7157fca012ade54248748 | Bin 0 -> 1067 bytes .../ea833ef8e9880858cf55b0c350e354c903b1fbdf | Bin 0 -> 445 bytes .../ea86a969661e263b082b3075df784b793e015ac3 | Bin 0 -> 1782 bytes .../eaa8b4213046e2d93173afb0851a3d29d19f3e92 | Bin 0 -> 2223 bytes .../eb2d510f8e96eee503b845f56b3d429fa0e98963 | Bin 0 -> 630 bytes .../eb6485a3fbbe2749a26c85617ae94db78a63eeb5 | Bin 0 -> 1067 bytes .../ebb775b55594f2d182e84b7485b75f0df1405cc0 | Bin 0 -> 1782 bytes .../ebd90d530158a1f31b024ae7fa67206fde402c08 | Bin 0 -> 33 bytes .../ebe7d1e889d9f0e618a47024cd7a74772ede30cc | Bin 0 -> 925 bytes .../ebf948ec57b5a37e76af242bb7d484168984b18f | Bin 0 -> 399 bytes .../ebf9f424098976ab979b2d071988dd06fbcfc415 | Bin 0 -> 678 bytes .../ebfda43891859c7fc1166b76539cfa9ab5d480e1 | Bin 0 -> 2928 bytes .../ec009499990fecc1d93a61c2ba50f8e7cb527df0 | Bin 0 -> 30 bytes .../ec1c88ffebabad4f11b964031998d76bff0e0695 | Bin 0 -> 91 bytes .../ec2823992629ecafe1711a07b9839018bc19de07 | Bin 0 -> 1067 bytes .../ec31a8415d30ae4036c03c10e7bc42aafeb75f64 | Bin 0 -> 1067 bytes .../ec82431799e5d93fcc77932b0f2cc2964ff4364c | Bin 0 -> 98 bytes .../ec8ded9bbc58a3f520edfa7cba748df792fe85a0 | Bin 0 -> 708 bytes .../eccba956c4f93850b8e5d4df1ac10f357b812498 | Bin 0 -> 630 bytes .../eccbe67a5bc0166a26d994c1b4f0629d2e13e95c | Bin 0 -> 4285 bytes .../ecd3738901429620d63f1918d068559277b1608a | Bin 0 -> 1031 bytes .../ecda47642da87271037642115c0df00b8f21f2f4 | Bin 0 -> 354 bytes .../ecde7035398bacfebda1c4834f5bc4867455cd74 | Bin 0 -> 100 bytes .../ecf51399008b790e97c184b8110737038ca351ff | Bin 0 -> 79 bytes .../ed20dc69cba9636dba68dc7dac7edcc59523ff9f | Bin 0 -> 1067 bytes .../ed45b7496357197f18dd913ddb440d4a1ff054fa | Bin 0 -> 37 bytes .../ed7179a5d27620f4e99876937c286fcc71fb8593 | 1 + .../ede9548dc757a73171ea3b362adf4cc84479d5f7 | Bin 0 -> 156 bytes .../eded96ee00f22479fa18b48d98f2ac007898a8f2 | Bin 0 -> 555 bytes .../edfbcffbd1b4b56797ce51152661789038b0cf74 | Bin 0 -> 2223 bytes .../ee1d04e03f7a78fcdcb7d6dc191bcfc40e0e2b94 | Bin 0 -> 136 bytes .../ee3598ed6a6066e3cc05f3967e3379211cc5f1bf | Bin 0 -> 300 bytes .../ee463acb2f35dfac5292b6f9637470fed172f3ba | Bin 0 -> 98 bytes .../ee6f359e7f845848e6ab4101b2f1e7d34df5ea0f | Bin 0 -> 1798 bytes .../ee94dfc8c75c020b3729087e58763a08c0b661be | Bin 0 -> 96 bytes .../eed05a55c822495b507ed25fee318360e19957bc | Bin 0 -> 589 bytes .../eee5e2cfc552f0f247ee25c82ccd1bad879a326e | Bin 0 -> 1530 bytes .../eee970a99f48ca558d8ef89549a989883599d2c7 | Bin 0 -> 33 bytes .../eef497fef6f20634c1c398eadad594452f9a8efb | Bin 0 -> 43 bytes .../eef69028ada521287c4eed060a1239d077f554a0 | Bin 0 -> 176 bytes .../ef19649b051735a5a331711b7ac1642f378f8dee | Bin 0 -> 1060 bytes .../ef1c5f651315b2b25227525ff861f8025f0f7199 | Bin 0 -> 1800 bytes .../ef1d05db45fade9a3c5b505a47a47827cafe369e | Bin 0 -> 1835 bytes .../ef561706cddd3adc14b1ab4e0a4dda46af4f904f | Bin 0 -> 134 bytes .../ef5f77cff55b884dd0a4b1c441f2973d69ea7744 | Bin 0 -> 708 bytes .../ef6aa1850f2a5fb03020cd6c05936687e660ebdb | Bin 0 -> 511 bytes .../ef786020c58a968f5f26a7d5b59b7189d484b0fa | Bin 0 -> 50 bytes .../ef7f05c61f40472a669f3741546f29c3690911c8 | Bin 0 -> 130 bytes .../efa429cc086a0935a0c9fe5a9544a91384e01481 | Bin 0 -> 1067 bytes .../effad4e4391708a646831dccd67815a31b938859 | Bin 0 -> 1912 bytes .../f042987a02f478ebf62ef23872b24b5c677df8fd | Bin 0 -> 708 bytes .../f0477538598b81323c565069639b16fd2f0e3ff2 | Bin 0 -> 1792 bytes .../f0764517e8cc64978f54c0745f19c71ea0e70e00 | Bin 0 -> 145 bytes .../f0816479e310392379a0d6bea645c444a7867011 | Bin 0 -> 1782 bytes .../f09cfeb5d2be927334a89623ecc6404bea6db20b | Bin 0 -> 1782 bytes .../f0bcfd9a2f66b248f344143fba8d2238d94dda6e | Bin 0 -> 579 bytes .../f0c5d5d5f1b0188efbd9d9a19fd3709186deefea | Bin 0 -> 85 bytes .../f0ce34f2169249cecfa0ab15bb013cc69404209c | Bin 0 -> 630 bytes .../f0d2c8d7a57f5ae0924bf7c5a6261088dd1c8dc7 | Bin 0 -> 590 bytes .../f0f56fbd22f18cc0c32b261c513428b3c064f3fa | Bin 0 -> 404 bytes .../f10fd69d1d723d7c95a9dda525b4b6e6cf8a87ec | Bin 0 -> 2223 bytes .../f11b8a191f96355b699dff1ce4bbff0bcc2ac106 | Bin 0 -> 708 bytes .../f135c6bcdb08c5b966414da3afe25994277a7c93 | Bin 0 -> 90 bytes .../f14cc98fb6a42c72e75a2b3f16945fd43a24afa2 | Bin 0 -> 216 bytes .../f15418bacf97c0690a739ad47e40831ea0a311a5 | Bin 0 -> 1067 bytes .../f1656bbc195a3958e22ad8ff06fc086943f46de2 | Bin 0 -> 136 bytes .../f1a42cf819fe190ddc249ec19643225b8547627a | Bin 0 -> 201 bytes .../f1acb7b3ee650c6b2934df96b8c975618d1c7004 | Bin 0 -> 524 bytes .../f1b0ee14bb5ae2390376f518b00f6d49ce676b95 | Bin 0 -> 7395 bytes .../f221a03a7598558703449c076eddb2a3adc669ce | Bin 0 -> 44 bytes .../f24aa93792cda1f940e5023fc0a07b6a80b68182 | Bin 0 -> 80 bytes .../f2598c16fb753508bdc8f798452a649f87ada15c | Bin 0 -> 78 bytes .../f28c7cedbbea551de6db6e5ba7fc56998413f855 | Bin 0 -> 708 bytes .../f2a972baa024ae2a1558724c762116d10421901d | Bin 0 -> 708 bytes .../f2b5bbbf23fac272a0ac0cbe67b160b884a43aed | Bin 0 -> 78 bytes .../f2d4d563d90b1e2ba89bad955ff3e344c3374dc1 | Bin 0 -> 4346 bytes .../f2eadf86d550ccb487335bc290900ba61bdcb454 | Bin 0 -> 1448 bytes .../f2f4a19ffb2456388778158a213aa2f33b351c5a | Bin 0 -> 174 bytes .../f3259591b6361d763f3a4afb99dba54e19129316 | Bin 0 -> 444 bytes .../f32c1030274c4af53ae406661ab686b916ad2c6f | Bin 0 -> 100 bytes .../f33d7e5d562029ea714f1cb8082a5fd1d32eea04 | Bin 0 -> 37 bytes .../f35c2963bb702bd60b04ca0fa1ef4567d7705a58 | Bin 0 -> 1442 bytes .../f3b0bcae9478dfe639d8aa0e9f903670060e68a3 | Bin 0 -> 630 bytes .../f3dc47bfea3ed13aa78530a925520d9dfdab1027 | Bin 0 -> 146 bytes .../f3e1ea4ab6ce0411711e8ed64d0d66b2867cbf61 | Bin 0 -> 708 bytes .../f3f63061590475f923a6f7c36c4927482162f9c2 | Bin 0 -> 1585 bytes .../f40eb7e3044db4c723d3c9d79503b535583e50de | Bin 0 -> 357 bytes .../f41b08a89d954a5b99f078736065873c9c36b8ef | Bin 0 -> 78 bytes .../f4213d49354d11aef2901149530576f03c8b2d61 | Bin 0 -> 1281 bytes .../f422402637b590f06c5f866a97471006c6d61f41 | Bin 0 -> 1067 bytes .../f4614c5480849e003dc906547fd97eed4ca26b11 | Bin 0 -> 589 bytes .../f4741081e47eb195a07b75e65fbafe53403b4f83 | Bin 0 -> 332 bytes .../f478c37198d60a5536118b53eab20962668a35d5 | Bin 0 -> 1782 bytes .../f48595187fcab0102474f59c3b66c9b2f9f35a5e | Bin 0 -> 301 bytes .../f4b323f3fb99d03991ca521c229e85580f650a60 | Bin 0 -> 1475 bytes .../f4f03cc4be8105bc0f10971d36f23cfdd22456b6 | Bin 0 -> 708 bytes .../f5165308bf24de8fb6008f71d5dae70d21fa1cff | Bin 0 -> 575 bytes .../f5b2b240fbf3a408ab37d6d9ad2dd51dc7c290d0 | Bin 0 -> 357 bytes .../f5b786072078b7da607bde48aaf21a8a073816fa | Bin 0 -> 1717 bytes .../f5cfc31b9d8e2981bd81e737187fc6db8d4964ca | Bin 0 -> 2223 bytes .../f5ea365217e9b31a4e7a961c83c26a78fdac8b21 | Bin 0 -> 47 bytes .../f628bbb46deb7f3a93f1dcc59d2b81ebff2687a0 | Bin 0 -> 150 bytes .../f62a665b9d52e55c8e97a24c9fe59a3cedceae37 | Bin 0 -> 1501 bytes .../f64079daafd8cf77efe66adda58758bc5d95967f | Bin 0 -> 325 bytes .../f66bd4f0e8d8feeaa6166163947510d3cb04ca20 | Bin 0 -> 2928 bytes .../f6a2c78d197ffd8b8e8ce53812031f2e79fb48dd | Bin 0 -> 1912 bytes .../f6e515d5f145adb6e8aeedeb5b6692066d79f114 | Bin 0 -> 1067 bytes .../f71937b6ed1217d7e6fa4c99b4aba5baa84795b7 | Bin 0 -> 708 bytes .../f75718b11cea7b5bbedb815761bf8c717dcdc5b2 | Bin 0 -> 67 bytes .../f759d004b43db028079b7074b89bb9b96957b802 | Bin 0 -> 2018 bytes .../f75bbd72f11a452d781ac5a5b7adbf8e5df1530f | Bin 0 -> 31 bytes .../f75da24024b84680c67adc3ab69b40f17afb25ae | Bin 0 -> 1501 bytes .../f79b4609de017f27867cf122e1d393e50702fdda | Bin 0 -> 1501 bytes .../f7be9dd2cc9b1d6259b3e94545fa9614e09bc51a | Bin 0 -> 1782 bytes .../f7f771dfb7a992c898ec334fb8bc516a2b1680ee | Bin 0 -> 708 bytes .../f821f718742535e2656ff868fa62f5287aaece17 | Bin 0 -> 2223 bytes .../f8320f4239c4b034b1dd02aa404e8cbf9082282f | Bin 0 -> 65 bytes .../f8382271afcc33da411fa5b93178610decd35c0d | Bin 0 -> 589 bytes .../f8e11360ad4d7bb94bf98175ae66bcd56401b989 | Bin 0 -> 124 bytes .../f9559156e1f509e2840ad88877be99ff5ae57af4 | Bin 0 -> 1183 bytes .../f97a18aa269a11d5d2a7aa6096b3bec6e41b7fe1 | Bin 0 -> 708 bytes .../f987f500bfbaa8e6a4da590af412eaaa2ae9208c | Bin 0 -> 352 bytes .../f9896279256047168866b39c7a175536e5367e23 | Bin 0 -> 212 bytes .../f9ed720d0107aa2e655b88a579250735030154e2 | Bin 0 -> 1501 bytes .../f9f850e88225b28d53860ff3058daee381428bcb | Bin 0 -> 4 bytes .../fa34fef33cef0c56a00ffdcfb44d6eca96ce2a1e | Bin 0 -> 1067 bytes .../fa3dac29c9cc6b4b6ef9c97f972c7112869175f4 | Bin 0 -> 1782 bytes .../fa45aac8d1c17b6d5c8f068f0c7fd46b0ab77b83 | Bin 0 -> 172 bytes .../fa62267b860e4ac0e5b2c4d2a70914d35700d0c0 | Bin 0 -> 2519 bytes .../fa8e09ef6de694da0911e9d028771114130551d2 | Bin 0 -> 301 bytes .../fabc53169bdede3e1679689f202db4449fcb3fae | Bin 0 -> 52 bytes .../fabe355c4a37e2bc3305418fdf507cf0e1508668 | Bin 0 -> 4285 bytes .../fad03f6e65e3624545adbd4d9a9563b785307875 | Bin 0 -> 4097 bytes .../fae3bd31efb4dd62bb3418813df258d26b0e3bf5 | Bin 0 -> 78 bytes .../fb182df5ae96bdf689754dd144d399fc970edfb3 | Bin 0 -> 85 bytes .../fb1bb2333ba2bcac011c4e325e015012095c55a4 | Bin 0 -> 1019 bytes .../fb1f6dd7b35de7a954b25d05fedc8df518a206c9 | Bin 0 -> 46 bytes .../fb923c010e2b76d8098a8e99eccc5ae3855ca358 | Bin 0 -> 78 bytes .../fba9e797cbedcd7bc9b6f4a65831ab4132e8ca69 | Bin 0 -> 274 bytes .../fbd98019ad9147ee1dfb8654d0fbe2b861e8d067 | Bin 0 -> 1800 bytes .../fbdb46f2e69d2d660e05aadcb19363cf6bbe60a6 | Bin 0 -> 37 bytes .../fbdce22195be4a287451657667ac538ceb24ca80 | Bin 0 -> 1993 bytes .../fbdf515e11a1074093dc46a2ab3815fc24f7d4ff | Bin 0 -> 74 bytes .../fc2f96447a1192b77da1c6a954a80e7855532581 | Bin 0 -> 152 bytes .../fc380cd79ffb21099651ed1ba8a3f3e725457266 | Bin 0 -> 105 bytes .../fc3d96054ccc7a4caf8efa6751667f5089b3b40a | Bin 0 -> 82 bytes .../fc4a9e9aba09d284b1f4f43ea99ed68b3eaf2f67 | Bin 0 -> 167 bytes .../fca3cc2b5d49927aedd733464105c5cdda076d5e | Bin 0 -> 48 bytes .../fcbea5cd120e8042e45dbebcbcdda07012308308 | Bin 0 -> 30 bytes .../fcd25943fc44ce00a8e56c6371808c7d3fe04853 | Bin 0 -> 332 bytes .../fcff055e35d15e8eb317317d97a58edd646fb6c2 | Bin 0 -> 589 bytes .../fd0c2ec7c389248b36c3af6ef2f4d9ef41b81431 | Bin 0 -> 332 bytes .../fd1261b3c67c38694aae394bb0d19384ffa9de8b | Bin 0 -> 78 bytes .../fd1bcc4c3ad39689392b989a20f0e4a7a5038a13 | Bin 0 -> 1449 bytes .../fd1e8d5c54acf78af2f3c390632f9b7d5749e57e | Bin 0 -> 107 bytes .../fd48d144afd0d087edba2b5e4821ad443582abe9 | Bin 0 -> 301 bytes .../fd7cb924d08921c730aa11bf2a289d5b62516753 | Bin 0 -> 150 bytes .../fd97ab445a88cdab6f0da14bbe0a2ec56c6c21e6 | Bin 0 -> 444 bytes .../fdb1942cc2e1bd56efdb32667520a215e2b36f3b | Bin 0 -> 444 bytes .../fdc4d308e17f8a504607a0391823ece65fff1624 | Bin 0 -> 120 bytes .../fdd464a31b0fdc92e44c144f1f9f2a4208650ab2 | Bin 0 -> 121 bytes .../fe356d7a4b875d5460386004a8a4daf2e1b415f8 | Bin 0 -> 2462 bytes .../fe68343c3ab36095ab94d0cc2a018885a12d9bee | Bin 0 -> 708 bytes .../fe79f56bcd1a3ef79e86594ab3b55248d9c94e7d | Bin 0 -> 1019 bytes .../feab2b8355977f0e9c4feb2e1d081dea7e6a7fb2 | Bin 0 -> 78 bytes .../febfc1b2b39c86b0d94b5312798d73ba12e7e8c8 | Bin 0 -> 301 bytes .../fed85e5a43ee7e461484ebc6bfbca249337f6647 | Bin 0 -> 325 bytes .../feed8321ce6e5aa5ac7d416349f530cbb8594035 | Bin 0 -> 80 bytes .../feeff1331656c0f780aea2d08997b27658407c47 | Bin 0 -> 1067 bytes .../fef01f446bf42c1c474ffb84999ca80e5108a30a | Bin 0 -> 33 bytes .../ff0f084747cb12a18dbb8a154404d34a3720f684 | Bin 0 -> 24 bytes .../ff0f39eb802222164ebfb6d1020da6a50cf6cfc7 | Bin 0 -> 1067 bytes .../ff203aa175317f269bdb01dd11169a6eeb9d334f | Bin 0 -> 97 bytes .../ff2a139251df84946489c0e41692c8eead5d36fd | Bin 0 -> 101 bytes .../ff46c1f59d740ea720f730bb0747e3d2045055c1 | Bin 0 -> 137 bytes .../ffa9dedbe06b3f22dbd8de6705aa7ace601cf26e | Bin 0 -> 95 bytes .../ffacc50fbadce2ef2bafbe96ff4a872648f20859 | Bin 0 -> 418 bytes .../ffb1a1faad778b26f6fad279002be86fef54419b | Bin 0 -> 2140 bytes .../ffb77c06e17fe30d1e303939e29ddff10720a9e2 | Bin 0 -> 27 bytes .../ffe498879023415c207838470f2fd842cbe6ae6c | Bin 0 -> 301 bytes fuzz/crl.c | 16 +- fuzz/ct.c | 15 +- fuzz/driver.c | 12 +- fuzz/fuzzer.h | 2 + fuzz/mkfuzzoids.pl | 32 + fuzz/oids.txt | 1021 + fuzz/rand.inc | 40 + fuzz/server.c | 439 +- fuzz/test-corpus.c | 3 + fuzz/x509.c | 19 +- include/internal/__DECC_INCLUDE_EPILOGUE.H | 16 + include/internal/__DECC_INCLUDE_PROLOGUE.H | 20 + include/internal/asn1t.h | 19 - include/internal/bio.h | 11 +- include/internal/constant_time_locl.h | 220 +- .../include => include}/internal/cryptlib.h | 28 +- include/internal/dso.h | 69 +- include/internal/dsoerr.h | 83 + include/internal/nelem.h | 14 + include/internal/o_dir.h | 19 +- include/internal/rand.h | 126 + include/internal/refcount.h | 89 + include/internal/sockets.h | 163 + include/openssl/asn1.h | 240 +- include/openssl/asn1err.h | 236 + include/openssl/asn1t.h | 32 +- include/openssl/async.h | 26 +- include/openssl/asyncerr.h | 37 + include/openssl/bio.h | 180 +- include/openssl/bioerr.h | 112 + include/openssl/bn.h | 99 +- include/openssl/bnerr.h | 92 + include/openssl/buffer.h | 19 +- include/openssl/buffererr.h | 30 + include/openssl/cms.h | 182 +- include/openssl/cmserr.h | 194 + include/openssl/comp.h | 23 +- include/openssl/comperr.h | 39 + include/openssl/conf.h | 53 +- include/openssl/conferr.h | 62 + include/openssl/crypto.h | 61 +- include/openssl/cryptoerr.h | 41 + include/openssl/ct.h | 61 +- include/openssl/cterr.h | 76 + include/openssl/dh.h | 80 +- include/openssl/dherr.h | 83 + include/openssl/dsa.h | 57 +- include/openssl/dsaerr.h | 66 + include/openssl/dtls1.h | 13 +- include/openssl/e_os2.h | 28 +- include/openssl/ec.h | 257 +- include/openssl/ecerr.h | 242 + include/openssl/engine.h | 99 +- include/openssl/engineerr.h | 105 + include/openssl/err.h | 19 +- include/openssl/evp.h | 313 +- include/openssl/evperr.h | 174 + include/openssl/kdf.h | 80 +- include/openssl/kdferr.h | 46 + include/openssl/lhash.h | 2 +- include/openssl/modes.h | 17 +- include/openssl/obj_mac.h | 410 +- include/openssl/objects.h | 928 +- include/openssl/objectserr.h | 36 + include/openssl/ocsp.h | 75 +- include/openssl/ocsperr.h | 74 + include/openssl/opensslconf.h.in | 10 +- include/openssl/opensslv.h | 8 +- include/openssl/ossl_typ.h | 9 +- include/openssl/pem.h | 146 +- include/openssl/pem2.h | 15 +- include/openssl/pemerr.h | 98 + include/openssl/pkcs12.h | 61 +- include/openssl/pkcs12err.h | 73 + include/openssl/pkcs7.h | 87 +- include/openssl/pkcs7err.h | 99 + include/openssl/rand.h | 62 +- include/openssl/randerr.h | 78 + include/openssl/rsa.h | 250 +- include/openssl/rsaerr.h | 160 + include/openssl/safestack.h | 10 +- include/openssl/ssl.h | 1044 +- include/openssl/ssl3.h | 57 +- include/openssl/sslerr.h | 745 + include/openssl/stack.h | 11 +- include/openssl/store.h | 266 + include/openssl/storeerr.h | 87 + include/openssl/tls1.h | 441 +- include/openssl/ts.h | 134 +- include/openssl/tserr.h | 128 + include/openssl/txt_db.h | 4 +- include/openssl/ui.h | 120 +- include/openssl/uierr.h | 60 + include/openssl/x509.h | 146 +- include/openssl/x509_vfy.h | 4 + include/openssl/x509err.h | 115 + include/openssl/x509v3.h | 201 +- include/openssl/x509v3err.h | 153 + ms/segrenam.pl | 71 - ms/tlhelp32.h | 136 - ms/uplink-x86.pl | 2 +- ssl/bio_ssl.c | 87 +- ssl/build.info | 11 +- ssl/d1_lib.c | 460 +- ssl/d1_msg.c | 27 +- ssl/d1_srtp.c | 196 +- ssl/methods.c | 12 + ssl/packet.c | 421 + ssl/packet_locl.h | 327 + ssl/pqueue.c | 8 +- ssl/record/rec_layer_d1.c | 588 +- ssl/record/rec_layer_s3.c | 939 +- ssl/record/record.h | 79 +- ssl/record/record_locl.h | 23 +- ssl/record/ssl3_buffer.c | 54 +- ssl/record/ssl3_record.c | 988 +- ssl/record/ssl3_record_tls13.c | 165 + ssl/s3_cbc.c | 95 +- ssl/s3_enc.c | 299 +- ssl/s3_lib.c | 1383 +- ssl/s3_msg.c | 28 +- ssl/ssl_asn1.c | 132 +- ssl/ssl_cert.c | 339 +- ssl/ssl_cert_table.h | 22 + ssl/ssl_ciph.c | 486 +- ssl/ssl_conf.c | 81 +- ssl/ssl_err.c | 1752 +- ssl/ssl_init.c | 8 +- ssl/ssl_lib.c | 2076 +- ssl/ssl_locl.h | 1382 +- ssl/ssl_mcnf.c | 4 +- ssl/ssl_rsa.c | 357 +- ssl/ssl_sess.c | 637 +- ssl/ssl_stat.c | 80 +- ssl/ssl_txt.c | 57 +- ssl/ssl_utst.c | 4 - ssl/statem/extensions.c | 1676 ++ ssl/statem/extensions_clnt.c | 1942 ++ ssl/statem/extensions_cust.c | 533 + ssl/statem/extensions_srvr.c | 1823 ++ ssl/statem/statem.c | 322 +- ssl/statem/statem.h | 33 +- ssl/statem/statem_clnt.c | 3157 ++- ssl/statem/statem_dtls.c | 423 +- ssl/statem/statem_lib.c | 1664 +- ssl/statem/statem_locl.h | 349 +- ssl/statem/statem_srvr.c | 3477 +-- ssl/t1_enc.c | 358 +- ssl/t1_ext.c | 283 - ssl/t1_lib.c | 4329 ++-- ssl/t1_reneg.c | 165 - ssl/t1_trce.c | 606 +- ssl/tls13_enc.c | 762 + ssl/tls_srp.c | 74 +- test/CAtsa.cnf | 2 + test/README | 86 +- test/README.external | 164 + test/README.ssltest.md | 29 +- test/afalgtest.c | 170 +- test/asn1_encode_test.c | 870 + test/asn1_internal_test.c | 99 + test/asn1_string_table_test.c | 77 + test/asn1_time_test.c | 356 + test/asynciotest.c | 290 +- test/bad_dtls_test.c | 236 +- test/bftest.c | 273 +- test/bio_enc_test.c | 194 +- test/bioprinttest.c | 329 +- test/bntest.c | 3280 +-- test/bntests.pl | 156 + test/build.info | 462 +- test/casttest.c | 155 +- test/certs/client-ed25519-cert.pem | 32 + test/certs/client-ed25519-key.pem | 3 + test/certs/cyrillic.msb | 83 + test/certs/cyrillic.pem | 25 + test/certs/cyrillic.utf8 | 83 + test/certs/cyrillic_crl.pem | 13 + test/certs/cyrillic_crl.utf8 | 39 + test/certs/dhp2048.pem | 8 + test/certs/ee-ecdsa-client-chain.pem | 33 + test/certs/ee-ecdsa-key.pem | 5 + test/certs/ee-ed25519.pem | 9 + test/certs/ee-pss-sha1-cert.pem | 19 + test/certs/ee-pss-sha256-cert.pem | 21 + test/certs/mkcert.sh | 17 +- test/certs/p256-server-cert.pem | 12 + test/certs/p256-server-key.pem | 5 + test/certs/p384-root-key.pem | 6 + test/certs/p384-root.pem | 12 + test/certs/p384-server-cert.pem | 13 + test/certs/p384-server-key.pem | 6 + test/certs/root-ed25519.pem | 9 + test/certs/server-cecdsa-cert.pem | 15 + test/certs/server-cecdsa-key.pem | 4 + test/certs/server-dsa-cert.pem | 31 + test/certs/server-dsa-key.pem | 15 + test/certs/server-ecdsa-cert.pem | 15 + test/certs/server-ecdsa-key.pem | 5 + test/certs/server-ed25519-cert.pem | 14 + test/certs/server-ed25519-key.pem | 3 + test/certs/server-pss-cert.pem | 19 + test/certs/server-pss-key.pem | 28 + test/certs/setup.sh | 8 + test/certs/x509-check-key.pem | 28 + test/certs/x509-check.csr | 15 + test/chacha_internal_test.c | 190 + test/cipher_overhead_test.c | 49 + test/cipherbytes_test.c | 149 + test/cipherlist_test.c | 146 +- test/ciphername_test.c | 470 + test/clienthellotest.c | 267 +- test/constant_time_test.c | 566 +- test/crltest.c | 194 +- test/ct_test.c | 485 +- test/ctype_internal_test.c | 88 + test/curve448_internal_test.c | 713 + test/d2i_test.c | 124 +- test/danetest.c | 282 +- test/destest.c | 863 +- test/dhtest.c | 263 +- test/drbgtest.c | 772 + test/drbgtest.h | 579 + test/dsatest.c | 113 +- test/dtls_mtu_test.c | 196 + test/dtlstest.c | 87 +- test/dtlsv1listentest.c | 187 +- test/ecdsatest.c | 355 +- test/ecstresstest.c | 150 + test/ectest.c | 2409 +- test/enginetest.c | 420 +- test/evp_extra_test.c | 403 +- test/evp_test.c | 2741 ++- test/evp_test.h | 11 + test/evptests.txt | 19244 ---------------- test/exdatatest.c | 181 +- test/exptest.c | 258 +- test/fatalerrtest.c | 74 +- test/gmdifftest.c | 70 +- test/handshake_helper.c | 867 +- test/handshake_helper.h | 20 + test/heartbeat_test.c | 378 - test/hmactest.c | 340 +- test/ideatest.c | 145 +- test/igetest.c | 353 +- test/lhash_test.c | 228 + test/md2test.c | 67 +- test/md4test.c | 87 - test/md5test.c | 88 - test/mdc2_internal_test.c | 71 + test/mdc2test.c | 81 +- test/memleaktest.c | 32 +- test/methtest.c | 57 - test/modes_internal_test.c | 892 + test/ocspapitest.c | 79 +- test/ossl_shim/async_bio.cc | 183 + test/ossl_shim/async_bio.h | 39 + test/ossl_shim/build.info | 6 + test/ossl_shim/include/openssl/base.h | 111 + test/ossl_shim/ossl_config.json | 296 + test/ossl_shim/ossl_shim.cc | 1271 + test/ossl_shim/packeted_bio.cc | 299 + test/ossl_shim/packeted_bio.h | 35 + test/ossl_shim/test_config.cc | 195 + test/ossl_shim/test_config.h | 88 + test/p5_crpt2_test.c | 159 - test/packettest.c | 567 +- test/pbelutest.c | 43 +- test/pemtest.c | 77 + test/pkey_meth_kdf_test.c | 181 + test/pkey_meth_test.c | 83 + test/pkits-test.pl | 6 +- test/poly1305_internal_test.c | 1576 ++ test/r160test.c | 9 - test/randtest.c | 145 - test/rc2test.c | 75 +- test/rc4test.c | 189 +- test/rc5test.c | 144 +- test/recipes/01-test_test.t | 12 + test/recipes/02-test_internal_ctype.t | 20 + test/recipes/02-test_lhash.t | 12 + test/recipes/02-test_stack.t | 12 + test/recipes/03-test_internal_asn1.t | 19 + test/recipes/03-test_internal_chacha.t | 19 + test/recipes/03-test_internal_curve448.t | 22 + test/recipes/03-test_internal_mdc2.t | 12 + test/recipes/03-test_internal_modes.t | 19 + test/recipes/03-test_internal_poly1305.t | 19 + test/recipes/03-test_internal_siphash.t | 19 + test/recipes/03-test_internal_sm4.t | 20 + .../recipes/03-test_internal_ssl_cert_table.t | 19 + test/recipes/03-test_internal_x509.t | 19 + test/recipes/03-test_ui.t | 21 +- test/recipes/04-test_asn1_encode.t | 12 + test/recipes/04-test_asn1_string_table.t | 12 + ...{90-test_bioprint.t => 04-test_bioprint.t} | 0 test/recipes/04-test_pem.t | 4 +- test/recipes/05-test_md4.t | 12 - test/recipes/05-test_md5.t | 12 - test/recipes/05-test_rand.t | 8 +- test/recipes/05-test_rmd.t | 12 - test/recipes/05-test_sha1.t | 12 - test/recipes/05-test_sha256.t | 12 - test/recipes/05-test_sha512.t | 12 - test/recipes/05-test_wp.t | 12 - test/recipes/10-test_bn.t | 74 +- test/recipes/10-test_bn_data/bnexp.txt | 30 + test/recipes/10-test_bn_data/bnmod.txt | 2801 +++ test/recipes/10-test_bn_data/bnmul.txt | 2678 +++ test/recipes/10-test_bn_data/bnshift.txt | 2427 ++ test/recipes/10-test_bn_data/bnsum.txt | 2626 +++ test/recipes/15-test_dsa.t | 3 +- test/recipes/15-test_ecparam.t | 34 + .../invalid/c2pnb208w1-reducible.pem | 7 + .../invalid/nistp256-nonprime.pem | 8 + .../invalid/nistp256-offcurve.pem | 8 + .../invalid/nistp256-wrongorder.pem | 8 + .../valid/c2pnb163v1-explicit.pem | 6 + .../valid/c2pnb163v1-named.pem | 3 + .../valid/c2pnb163v2-explicit.pem | 6 + .../valid/c2pnb163v2-named.pem | 3 + .../valid/c2pnb163v3-explicit.pem | 6 + .../valid/c2pnb163v3-named.pem | 3 + .../valid/c2pnb176v1-explicit.pem | 6 + .../valid/c2pnb176v1-named.pem | 3 + .../valid/c2pnb208w1-explicit.pem | 6 + .../valid/c2pnb208w1-named.pem | 3 + .../valid/c2pnb272w1-explicit.pem | 7 + .../valid/c2pnb272w1-named.pem | 3 + .../valid/c2pnb304w1-explicit.pem | 8 + .../valid/c2pnb304w1-named.pem | 3 + .../valid/c2pnb368w1-explicit.pem | 9 + .../valid/c2pnb368w1-named.pem | 3 + .../valid/c2tnb191v1-explicit.pem | 7 + .../valid/c2tnb191v1-named.pem | 3 + .../valid/c2tnb191v2-explicit.pem | 7 + .../valid/c2tnb191v2-named.pem | 3 + .../valid/c2tnb191v3-explicit.pem | 7 + .../valid/c2tnb191v3-named.pem | 3 + .../valid/c2tnb239v1-explicit.pem | 7 + .../valid/c2tnb239v1-named.pem | 3 + .../valid/c2tnb239v2-explicit.pem | 7 + .../valid/c2tnb239v2-named.pem | 3 + .../valid/c2tnb239v3-explicit.pem | 7 + .../valid/c2tnb239v3-named.pem | 3 + .../valid/c2tnb359v1-explicit.pem | 9 + .../valid/c2tnb359v1-named.pem | 3 + .../valid/c2tnb431r1-explicit.pem | 9 + .../valid/c2tnb431r1-named.pem | 3 + .../valid/prime192v1-explicit.pem | 7 + .../valid/prime192v1-named.pem | 3 + .../valid/prime192v2-explicit.pem | 7 + .../valid/prime192v2-named.pem | 3 + .../valid/prime192v3-explicit.pem | 7 + .../valid/prime192v3-named.pem | 3 + .../valid/prime239v1-explicit.pem | 7 + .../valid/prime239v1-named.pem | 3 + .../valid/prime239v2-explicit.pem | 7 + .../valid/prime239v2-named.pem | 3 + .../valid/prime239v3-explicit.pem | 7 + .../valid/prime239v3-named.pem | 3 + .../valid/prime256v1-explicit.pem | 8 + .../valid/prime256v1-named.pem | 3 + .../valid/secp112r1-explicit.pem | 5 + .../valid/secp112r1-named.pem | 3 + .../valid/secp112r2-explicit.pem | 5 + .../valid/secp112r2-named.pem | 3 + .../valid/secp128r1-explicit.pem | 6 + .../valid/secp128r1-named.pem | 3 + .../valid/secp128r2-explicit.pem | 6 + .../valid/secp128r2-named.pem | 3 + .../valid/secp160k1-explicit.pem | 5 + .../valid/secp160k1-named.pem | 3 + .../valid/secp160r1-explicit.pem | 6 + .../valid/secp160r1-named.pem | 3 + .../valid/secp160r2-explicit.pem | 6 + .../valid/secp160r2-named.pem | 3 + .../valid/secp192k1-explicit.pem | 5 + .../valid/secp192k1-named.pem | 3 + .../valid/secp224k1-explicit.pem | 6 + .../valid/secp224k1-named.pem | 3 + .../valid/secp224r1-explicit.pem | 7 + .../valid/secp224r1-named.pem | 3 + .../valid/secp256k1-explicit.pem | 6 + .../valid/secp256k1-named.pem | 3 + .../valid/secp384r1-explicit.pem | 10 + .../valid/secp384r1-named.pem | 3 + .../valid/secp521r1-explicit.pem | 12 + .../valid/secp521r1-named.pem | 3 + .../valid/sect113r1-explicit.pem | 6 + .../valid/sect113r1-named.pem | 3 + .../valid/sect113r2-explicit.pem | 6 + .../valid/sect113r2-named.pem | 3 + .../valid/sect131r1-explicit.pem | 6 + .../valid/sect131r1-named.pem | 3 + .../valid/sect131r2-explicit.pem | 6 + .../valid/sect131r2-named.pem | 3 + .../valid/sect163k1-explicit.pem | 5 + .../valid/sect163k1-named.pem | 3 + .../valid/sect163r1-explicit.pem | 6 + .../valid/sect163r1-named.pem | 3 + .../valid/sect163r2-explicit.pem | 5 + .../valid/sect163r2-named.pem | 3 + .../valid/sect193r1-explicit.pem | 7 + .../valid/sect193r1-named.pem | 3 + .../valid/sect193r2-explicit.pem | 7 + .../valid/sect193r2-named.pem | 3 + .../valid/sect233k1-explicit.pem | 5 + .../valid/sect233k1-named.pem | 3 + .../valid/sect233r1-explicit.pem | 7 + .../valid/sect233r1-named.pem | 3 + .../valid/sect239k1-explicit.pem | 5 + .../valid/sect239k1-named.pem | 3 + .../valid/sect283k1-explicit.pem | 6 + .../valid/sect283k1-named.pem | 3 + .../valid/sect283r1-explicit.pem | 7 + .../valid/sect283r1-named.pem | 3 + .../valid/sect409k1-explicit.pem | 7 + .../valid/sect409k1-named.pem | 3 + .../valid/sect409r1-explicit.pem | 8 + .../valid/sect409r1-named.pem | 3 + .../valid/sect571k1-explicit.pem | 8 + .../valid/sect571k1-named.pem | 3 + .../valid/sect571r1-explicit.pem | 10 + .../valid/sect571r1-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls1-explicit.pem | 4 + .../valid/wap-wsg-idm-ecid-wtls1-named.pem | 3 + .../wap-wsg-idm-ecid-wtls10-explicit.pem | 5 + .../valid/wap-wsg-idm-ecid-wtls10-named.pem | 3 + .../wap-wsg-idm-ecid-wtls11-explicit.pem | 7 + .../valid/wap-wsg-idm-ecid-wtls11-named.pem | 3 + .../wap-wsg-idm-ecid-wtls12-explicit.pem | 7 + .../valid/wap-wsg-idm-ecid-wtls12-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls3-explicit.pem | 5 + .../valid/wap-wsg-idm-ecid-wtls3-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls4-explicit.pem | 6 + .../valid/wap-wsg-idm-ecid-wtls4-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls5-explicit.pem | 6 + .../valid/wap-wsg-idm-ecid-wtls5-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls6-explicit.pem | 5 + .../valid/wap-wsg-idm-ecid-wtls6-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls7-explicit.pem | 6 + .../valid/wap-wsg-idm-ecid-wtls7-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls8-explicit.pem | 4 + .../valid/wap-wsg-idm-ecid-wtls8-named.pem | 3 + .../valid/wap-wsg-idm-ecid-wtls9-explicit.pem | 5 + .../valid/wap-wsg-idm-ecid-wtls9-named.pem | 3 + test/recipes/15-test_genrsa.t | 6 +- test/recipes/15-test_mp_rsa.t | 111 + test/recipes/15-test_mp_rsa_data/plain_text | 4 + test/recipes/15-test_rsapss.t | 8 +- test/recipes/20-test_enc.t | 19 +- test/recipes/20-test_enc_more.t | 61 + test/recipes/20-test_passwd.t | 102 +- test/recipes/25-test_crl.t | 12 +- test/recipes/25-test_req.t | 2 +- test/recipes/25-test_sid.t | 4 + test/recipes/25-test_verify.t | 167 +- test/recipes/25-test_x509.t | 17 +- test/recipes/30-test_afalg.t | 4 +- test/recipes/30-test_evp.t | 14 +- test/recipes/30-test_evp_data/evpciph.txt | 2508 ++ test/recipes/30-test_evp_data/evpdigest.txt | 532 + test/recipes/30-test_evp_data/evpencod.txt | 194 + test/recipes/30-test_evp_data/evpkdf.txt | 305 + test/recipes/30-test_evp_data/evpmac.txt | 523 + test/recipes/30-test_evp_data/evppbe.txt | 256 + test/recipes/30-test_evp_data/evppkey.txt | 18040 +++++++++++++++ test/recipes/30-test_pkey_meth.t | 12 + test/recipes/30-test_pkey_meth_kdf.t | 12 + test/recipes/60-test_x509_check_cert_pkey.t | 46 + test/recipes/60-test_x509_dup_cert.t | 17 + test/recipes/60-test_x509_time.t | 12 + test/recipes/70-test_clienthello.t | 5 +- test/recipes/70-test_comp.t | 110 + test/recipes/70-test_key_share.t | 388 + test/recipes/70-test_recordlen.t | 21 + test/recipes/70-test_renegotiation.t | 70 + test/recipes/70-test_servername.t | 22 + test/recipes/70-test_sslcbcpadding.t | 2 + test/recipes/70-test_sslcertstatus.t | 7 +- test/recipes/70-test_sslextension.t | 115 +- test/recipes/70-test_sslmessages.t | 456 +- test/recipes/70-test_sslrecords.t | 212 +- test/recipes/70-test_sslsessiontick.t | 27 +- test/recipes/70-test_sslsigalgs.t | 382 + test/recipes/70-test_sslsignature.t | 144 + test/recipes/70-test_sslskewith0p.t | 1 + test/recipes/70-test_sslversions.t | 177 + test/recipes/70-test_sslvertol.t | 87 +- test/recipes/70-test_tls13cookie.t | 111 + test/recipes/70-test_tls13downgrade.t | 93 + test/recipes/70-test_tls13hrr.t | 94 + test/recipes/70-test_tls13kexmodes.t | 341 + test/recipes/70-test_tls13messages.t | 336 + test/recipes/70-test_tls13psk.t | 152 + test/recipes/70-test_tlsextms.t | 50 +- test/recipes/70-test_wpacket.t | 20 + test/recipes/80-test_ca.t | 18 +- test/recipes/80-test_cipherbytes.t | 26 + test/recipes/80-test_ciphername.t | 27 + test/recipes/80-test_dtls_mtu.t | 21 + test/recipes/80-test_ssl_new.t | 44 +- test/recipes/80-test_ssl_old.t | 124 +- test/recipes/90-test_asn1_time.t | 12 + test/recipes/90-test_fuzz.t | 40 - test/recipes/90-test_heartbeat.t | 12 - test/recipes/90-test_overhead.t | 20 + test/recipes/90-test_p5_crpt2.t | 12 - test/recipes/90-test_sslbuffers.t | 21 + test/recipes/90-test_store.t | 478 + test/recipes/90-test_store_data/ca.cnf | 56 + test/recipes/90-test_store_data/user.cnf | 19 + test/recipes/90-test_time_offset.t | 12 + test/recipes/90-test_tls13ccs.t | 22 + test/recipes/90-test_tls13encryption.t | 23 + test/recipes/90-test_tls13secrets.t | 20 + test/recipes/95-test_external_boringssl.t | 30 + test/recipes/95-test_external_krb5.t | 23 + .../95-test_external_krb5_data/krb5.sh | 23 + test/recipes/95-test_external_pyca.t | 28 + .../cryptography.sh | 64 + test/recipes/99-test_ecstress.t | 23 + test/recipes/99-test_fuzz.t | 40 + test/recipes/bc.pl | 113 - test/recipes/ocsp-response.der | Bin 0 -> 1517 bytes test/recipes/tconversion.pl | 4 +- test/recordlentest.c | 200 + test/rmdtest.c | 92 - test/rsa_mp_test.c | 230 + test/rsa_test.c | 216 +- test/run_tests.pl | 100 +- test/sanitytest.c | 124 +- test/secmemtest.c | 168 +- test/serverinfo2.pem | 8 + test/servername_test.c | 241 + test/session.pem | 31 + test/sha1test.c | 111 - test/sha256t.c | 177 - test/sha512t.c | 199 - test/shlibloadtest.c | 287 +- test/siphash_internal_test.c | 283 + test/sm4_internal_test.c | 86 + test/srptest.c | 220 +- test/ssl-tests/01-simple.conf | 4 +- test/ssl-tests/01-simple.conf.in | 4 +- test/ssl-tests/02-protocol-version.conf | 11283 ++++++++- test/ssl-tests/04-client_auth.conf | 1132 +- test/ssl-tests/04-client_auth.conf.in | 243 +- test/ssl-tests/05-sni.conf | 107 +- test/ssl-tests/05-sni.conf.in | 57 + test/ssl-tests/06-sni-ticket.conf | 33 + test/ssl-tests/06-sni-ticket.conf.in | 34 +- test/ssl-tests/08-npn.conf | 22 + test/ssl-tests/08-npn.conf.in | 33 +- test/ssl-tests/09-alpn.conf.in | 5 +- test/ssl-tests/10-resumption.conf | 1505 +- test/ssl-tests/12-ct.conf.in | 2 +- test/ssl-tests/13-fragmentation.conf | 182 +- test/ssl-tests/13-fragmentation.conf.in | 91 +- test/ssl-tests/14-curves.conf | 58 + test/ssl-tests/14-curves.conf.in | 9 +- test/ssl-tests/16-dtls-certstatus.conf.in | 35 +- test/ssl-tests/17-renegotiate.conf | 12 +- test/ssl-tests/17-renegotiate.conf.in | 24 +- test/ssl-tests/18-dtls-renegotiate.conf | 9 + test/ssl-tests/18-dtls-renegotiate.conf.in | 328 +- test/ssl-tests/19-mac-then-encrypt.conf | 6 + test/ssl-tests/19-mac-then-encrypt.conf.in | 13 + test/ssl-tests/20-cert-select.conf | 1249 + test/ssl-tests/20-cert-select.conf.in | 641 + test/ssl-tests/21-key-update.conf | 112 + test/ssl-tests/21-key-update.conf.in | 62 + test/ssl-tests/22-compression.conf | 216 + test/ssl-tests/22-compression.conf.in | 127 + test/ssl-tests/23-srp.conf | 148 + test/ssl-tests/23-srp.conf.in | 107 + test/ssl-tests/24-padding.conf | 34 + test/ssl-tests/24-padding.conf.in | 25 + test/ssl-tests/25-cipher.conf | 244 + test/ssl-tests/25-cipher.conf.in | 156 + test/ssl-tests/26-tls13_client_auth.conf | 476 + test/ssl-tests/26-tls13_client_auth.conf.in | 293 + test/ssl-tests/protocol_version.pm | 223 +- test/ssl_cert_table_internal_test.c | 81 + test/ssl_test.c | 391 +- test/ssl_test_ctx.c | 306 +- test/ssl_test_ctx.h | 61 +- test/ssl_test_ctx_test.c | 366 +- test/ssl_test_ctx_test.conf | 9 + test/sslapitest.c | 3325 ++- test/sslbuffertest.c | 182 + test/sslcorrupttest.c | 158 +- test/ssltest_old.c | 353 +- test/ssltestlib.c | 213 +- test/ssltestlib.h | 6 +- test/stack_test.c | 380 + test/test_test.c | 558 + test/testutil.c | 109 - test/testutil.h | 410 +- test/testutil/basic_output.c | 58 + test/testutil/cb.c | 16 + test/testutil/driver.c | 299 + test/testutil/format_output.c | 529 + test/testutil/init.c | 15 + test/testutil/main.c | 106 + test/testutil/output.h | 32 + test/testutil/output_helpers.c | 34 + test/testutil/stanza.c | 158 + test/testutil/tap_bio.c | 154 + test/testutil/test_cleanup.c | 14 + test/testutil/tests.c | 448 + test/testutil/tu_local.h | 51 + test/threadstest.c | 105 +- test/time_offset_test.c | 113 + test/tls13ccstest.c | 495 + test/tls13encryptiontest.c | 406 + test/tls13secretstest.c | 406 + test/uitest.c | 96 + test/v3ext.c | 37 +- test/v3nametest.c | 135 +- test/verify_extra_test.c | 44 +- test/wp_test.c | 233 - test/wpackettest.c | 380 + test/x509_check_cert_pkey_test.c | 122 + test/x509_dup_cert_test.c | 47 + test/x509_internal_test.c | 64 + test/x509_time_test.c | 493 + test/x509aux.c | 157 +- util/ck_errf.pl | 107 +- util/copy.pl | 4 +- util/dofile.pl | 10 +- util/find-doc-nits | 38 +- util/find-undoc-api.pl | 82 - util/find-unused-errs | 21 +- util/fipslink.pl | 115 - util/incore | 454 - util/indent.pro | 56 +- util/libcrypto.num | 409 +- util/libssl.num | 74 +- util/mkbuildinf.pl | 33 +- util/mkcerts.sh | 220 - util/mkdef.pl | 200 +- util/mkerr.pl | 1256 +- util/mkrc.pl | 45 +- util/openssl-format-source | 2 +- util/openssl-update-copyright | 63 + util/perl/OpenSSL/Test.pm | 405 +- util/perl/OpenSSL/Util/Pod.pm | 13 +- util/perl/TLSProxy/Certificate.pm | 219 + util/perl/TLSProxy/CertificateVerify.pm | 96 + util/perl/TLSProxy/ClientHello.pm | 37 +- util/perl/TLSProxy/EncryptedExtensions.pm | 115 + util/perl/TLSProxy/Message.pm | 132 +- util/perl/TLSProxy/Proxy.pm | 127 +- util/perl/TLSProxy/Record.pm | 163 +- util/perl/TLSProxy/ServerHello.pm | 38 +- util/perl/TLSProxy/ServerKeyExchange.pm | 49 +- util/perl/checkhandshake.pm | 228 + util/point.sh | 10 - util/private.num | 384 + util/process_docs.pl | 23 +- util/selftest.pl | 207 - util/shlib_wrap.sh.in | 20 - util/su-filter.pl | 2 +- 17755 files changed, 221242 insertions(+), 98415 deletions(-) create mode 100644 .gitmodules create mode 100644 Configurations/shared-info.pl delete mode 100644 ECDSA-PATCH-CHANGELOG delete mode 100644 Makefile.shared create mode 100644 apps/bf_prefix.c delete mode 100644 apps/demoCA/cacert.pem delete mode 100644 apps/demoCA/index.txt delete mode 100644 apps/demoCA/private/cakey.pem delete mode 100644 apps/demoCA/serial create mode 100644 apps/storeutl.c create mode 100644 crypto/aria/aria.c create mode 100644 crypto/aria/build.info create mode 100644 crypto/asn1/asn1_item_list.c create mode 100644 crypto/asn1/asn1_item_list.h create mode 100644 crypto/asn1/standard_methods.h create mode 100644 crypto/asn1/tbl_standard.h delete mode 100644 crypto/bf/bf_cbc.c delete mode 100644 crypto/bn/asm/pa-risc2.s delete mode 100644 crypto/bn/asm/pa-risc2W.s create mode 100644 crypto/ctype.c delete mode 100644 crypto/des/rpc_des.h delete mode 100644 crypto/des/rpc_enc.c create mode 100644 crypto/dh/dh_rfc7919.c create mode 100755 crypto/ec/asm/ecp_nistz256-ppc64.pl create mode 100755 crypto/ec/asm/x25519-x86_64.pl create mode 100644 crypto/ec/curve448/arch_32/arch_intrinsics.h create mode 100644 crypto/ec/curve448/arch_32/f_impl.c create mode 100644 crypto/ec/curve448/arch_32/f_impl.h create mode 100644 crypto/ec/curve448/curve448.c create mode 100644 crypto/ec/curve448/curve448_lcl.h create mode 100644 crypto/ec/curve448/curve448_tables.c create mode 100644 crypto/ec/curve448/curve448utils.h create mode 100644 crypto/ec/curve448/ed448.h create mode 100644 crypto/ec/curve448/eddsa.c create mode 100644 crypto/ec/curve448/f_generic.c create mode 100644 crypto/ec/curve448/field.h create mode 100644 crypto/ec/curve448/point_448.h create mode 100644 crypto/ec/curve448/scalar.c create mode 100644 crypto/ec/curve448/word.h delete mode 100644 crypto/engine/eng_cryptodev.c create mode 100644 crypto/engine/eng_devcrypto.c create mode 100644 crypto/err/openssl.txt create mode 100644 crypto/evp/e_aria.c create mode 100644 crypto/evp/e_sm4.c create mode 100644 crypto/evp/m_sha3.c create mode 100644 crypto/evp/pbe_scrypt.c delete mode 100644 crypto/evp/scrypt.c create mode 100644 crypto/include/internal/__DECC_INCLUDE_EPILOGUE.H create mode 100644 crypto/include/internal/__DECC_INCLUDE_PROLOGUE.H create mode 100644 crypto/include/internal/aria.h create mode 100644 crypto/include/internal/ctype.h delete mode 100644 crypto/include/internal/rand.h create mode 100644 crypto/include/internal/rand_int.h create mode 100644 crypto/include/internal/sha.h create mode 100644 crypto/include/internal/siphash.h create mode 100644 crypto/include/internal/sm3.h create mode 100644 crypto/include/internal/sm4.h create mode 100644 crypto/include/internal/store.h create mode 100644 crypto/include/internal/store_int.h create mode 100644 crypto/kdf/scrypt.c delete mode 100644 crypto/lhash/num.pl delete mode 100644 crypto/md5/asm/md5-ia64.S create mode 100644 crypto/mips_arch.h delete mode 100644 crypto/pkcs7/pk7_dgst.c delete mode 100644 crypto/pkcs7/pk7_enc.c create mode 100644 crypto/poly1305/poly1305_ameth.c create mode 100644 crypto/poly1305/poly1305_base2_44.c create mode 100644 crypto/poly1305/poly1305_local.h create mode 100644 crypto/poly1305/poly1305_pmeth.c create mode 100644 crypto/rand/drbg_ctr.c create mode 100644 crypto/rand/drbg_lib.c delete mode 100644 crypto/rand/md_rand.c delete mode 100644 crypto/rc2/tab.c delete mode 100644 crypto/rc4/asm/rc4-ia64.pl create mode 100644 crypto/rsa/rsa_mp.c delete mode 100644 crypto/rsa/rsa_null.c create mode 100644 crypto/s390x_arch.h delete mode 100644 crypto/s390xcpuid.S create mode 100755 crypto/s390xcpuid.pl create mode 100755 crypto/sha/asm/keccak1600-armv4.pl create mode 100755 crypto/sha/asm/keccak1600-armv8.pl create mode 100755 crypto/sha/asm/keccak1600-avx2.pl create mode 100755 crypto/sha/asm/keccak1600-avx512.pl create mode 100755 crypto/sha/asm/keccak1600-avx512vl.pl create mode 100755 crypto/sha/asm/keccak1600-c64x.pl create mode 100755 crypto/sha/asm/keccak1600-mmx.pl create mode 100755 crypto/sha/asm/keccak1600-ppc64.pl create mode 100755 crypto/sha/asm/keccak1600-s390x.pl create mode 100755 crypto/sha/asm/keccak1600-x86_64.pl create mode 100755 crypto/sha/asm/keccak1600p8-ppc.pl create mode 100644 crypto/sha/keccak1600.c create mode 100644 crypto/siphash/build.info create mode 100644 crypto/siphash/siphash.c create mode 100644 crypto/siphash/siphash_ameth.c create mode 100644 crypto/siphash/siphash_local.h create mode 100644 crypto/siphash/siphash_pmeth.c create mode 100644 crypto/sm3/build.info create mode 100644 crypto/sm3/m_sm3.c create mode 100644 crypto/sm3/sm3.c create mode 100644 crypto/sm3/sm3_locl.h create mode 100644 crypto/sm4/build.info create mode 100644 crypto/sm4/sm4.c create mode 100644 crypto/store/build.info create mode 100644 crypto/store/loader_file.c create mode 100644 crypto/store/store_err.c create mode 100644 crypto/store/store_init.c create mode 100644 crypto/store/store_lib.c create mode 100644 crypto/store/store_locl.h create mode 100644 crypto/store/store_register.c create mode 100644 crypto/store/store_strings.c create mode 100644 crypto/ui/ui_null.c create mode 100644 crypto/x509v3/standard_exts.h delete mode 100644 crypto/x509v3/tabtest.c create mode 100644 crypto/x509v3/v3_admis.c create mode 100644 crypto/x509v3/v3_admis.h delete mode 100644 crypto/x509v3/v3conf.c delete mode 100644 crypto/x509v3/v3prin.c create mode 100644 demos/engines/e_chil.txt delete mode 100644 demos/pkcs12/README delete mode 100644 doc/apps/enc.pod delete mode 100644 doc/apps/genrsa.pod delete mode 100644 doc/apps/passwd.pod delete mode 100644 doc/apps/pkeyutl.pod delete mode 100644 doc/apps/s_client.pod delete mode 100644 doc/apps/s_server.pod delete mode 100644 doc/apps/sess_id.pod delete mode 100644 doc/apps/speed.pod delete mode 100644 doc/apps/version.pod delete mode 100644 doc/apps/x509.pod delete mode 100644 doc/crypto/ASN1_TIME_set.pod delete mode 100644 doc/crypto/BIO_ADDRINFO.pod delete mode 100644 doc/crypto/BIO_meth_new.pod delete mode 100644 doc/crypto/BIO_read.pod delete mode 100644 doc/crypto/CONF_modules_free.pod delete mode 100644 doc/crypto/CRYPTO_THREAD_run_once.pod delete mode 100644 doc/crypto/DH_generate_parameters.pod delete mode 100644 doc/crypto/DH_size.pod delete mode 100644 doc/crypto/DSA_meth_new.pod delete mode 100644 doc/crypto/DSA_size.pod delete mode 100644 doc/crypto/ERR_remove_state.pod delete mode 100644 doc/crypto/EVP_DigestInit.pod delete mode 100644 doc/crypto/EVP_DigestVerifyInit.pod delete mode 100644 doc/crypto/EVP_EncryptInit.pod delete mode 100644 doc/crypto/EVP_PKEY_CTX_set_hkdf_md.pod delete mode 100644 doc/crypto/EVP_PKEY_keygen.pod delete mode 100644 doc/crypto/OCSP_response_status.pod delete mode 100644 doc/crypto/OpenSSL_add_all_algorithms.pod delete mode 100644 doc/crypto/PKCS12_newpass.pod delete mode 100644 doc/crypto/RAND_add.pod delete mode 100644 doc/crypto/RAND_bytes.pod delete mode 100644 doc/crypto/RAND_cleanup.pod delete mode 100644 doc/crypto/RAND_egd.pod delete mode 100644 doc/crypto/RAND_load_file.pod delete mode 100644 doc/crypto/RAND_set_rand_method.pod delete mode 100644 doc/crypto/RSA_generate_key.pod delete mode 100644 doc/crypto/RSA_get0_key.pod delete mode 100644 doc/crypto/RSA_meth_new.pod delete mode 100644 doc/crypto/RSA_size.pod delete mode 100644 doc/crypto/UI_new.pod delete mode 100644 doc/crypto/X509_NAME_ENTRY_get_object.pod delete mode 100644 doc/crypto/X509_STORE_CTX_set_verify_cb.pod delete mode 100644 doc/crypto/X509_get0_signature.pod delete mode 100644 doc/crypto/d2i_DHparams.pod delete mode 100644 doc/crypto/d2i_Netscape_RSA.pod delete mode 100644 doc/crypto/d2i_PKCS8PrivateKey_bio.pod delete mode 100644 doc/crypto/x509.pod rename doc/{apps => man1}/CA.pl.pod (83%) rename doc/{apps => man1}/asn1parse.pod (84%) rename doc/{apps => man1}/ca.pod (79%) rename doc/{apps => man1}/ciphers.pod (86%) rename doc/{apps => man1}/cms.pod (85%) rename doc/{apps => man1}/crl.pod (75%) rename doc/{apps => man1}/crl2pkcs7.pod (86%) rename doc/{apps => man1}/dgst.pod (95%) rename doc/{apps => man1}/dhparam.pod (84%) rename doc/{apps => man1}/dsa.pod (84%) rename doc/{apps => man1}/dsaparam.pod (77%) rename doc/{apps => man1}/ec.pod (88%) rename doc/{apps => man1}/ecparam.pod (88%) create mode 100644 doc/man1/enc.pod rename doc/{apps => man1}/engine.pod (96%) rename doc/{apps => man1}/errstr.pod (100%) rename doc/{apps => man1}/gendsa.pod (77%) rename doc/{apps => man1}/genpkey.pod (80%) create mode 100644 doc/man1/genrsa.pod rename doc/{apps => man1}/list.pod (79%) rename doc/{apps => man1}/nseq.pod (87%) rename doc/{apps => man1}/ocsp.pod (82%) rename doc/{apps => man1}/openssl.pod (96%) create mode 100644 doc/man1/passwd.pod rename doc/{apps => man1}/pkcs12.pod (81%) rename doc/{apps => man1}/pkcs7.pod (83%) rename doc/{apps => man1}/pkcs8.pod (90%) rename doc/{apps => man1}/pkey.pod (75%) rename doc/{apps => man1}/pkeyparam.pod (76%) create mode 100644 doc/man1/pkeyutl.pod create mode 100644 doc/man1/prime.pod rename doc/{apps => man1}/rand.pod (81%) rename doc/{apps => man1}/rehash.pod (100%) rename doc/{apps => man1}/req.pod (83%) rename doc/{apps => man1}/rsa.pod (85%) rename doc/{apps => man1}/rsautl.pod (81%) create mode 100644 doc/man1/s_client.pod create mode 100644 doc/man1/s_server.pod rename doc/{apps => man1}/s_time.pod (87%) create mode 100644 doc/man1/sess_id.pod rename doc/{apps => man1}/smime.pod (83%) create mode 100644 doc/man1/speed.pod rename doc/{apps => man1}/spkac.pod (79%) create mode 100644 doc/man1/srp.pod create mode 100644 doc/man1/storeutl.pod rename doc/{apps => man1}/ts.pod (96%) rename doc/{apps => man1}/tsget.pod (99%) rename doc/{apps => man1}/verify.pod (89%) create mode 100644 doc/man1/version.pod create mode 100644 doc/man1/x509.pod create mode 100644 doc/man3/ADMISSIONS.pod rename doc/{crypto => man3}/ASN1_INTEGER_get_int64.pod (100%) create mode 100644 doc/man3/ASN1_ITEM_lookup.pod rename doc/{crypto => man3}/ASN1_OBJECT_new.pod (100%) create mode 100644 doc/man3/ASN1_STRING_TABLE_add.pod rename doc/{crypto => man3}/ASN1_STRING_length.pod (80%) rename doc/{crypto => man3}/ASN1_STRING_new.pod (100%) rename doc/{crypto => man3}/ASN1_STRING_print_ex.pod (90%) create mode 100644 doc/man3/ASN1_TIME_set.pod rename doc/{crypto => man3}/ASN1_TYPE_get.pod (100%) rename doc/{crypto => man3}/ASN1_generate_nconf.pod (100%) rename doc/{crypto => man3}/ASYNC_WAIT_CTX_new.pod (98%) rename doc/{crypto => man3}/ASYNC_start_job.pod (97%) rename doc/{crypto => man3}/BF_encrypt.pod (92%) rename doc/{crypto => man3}/BIO_ADDR.pod (100%) create mode 100644 doc/man3/BIO_ADDRINFO.pod rename doc/{crypto => man3}/BIO_connect.pod (82%) rename doc/{crypto => man3}/BIO_ctrl.pod (100%) rename doc/{crypto => man3}/BIO_f_base64.pod (96%) rename doc/{crypto => man3}/BIO_f_buffer.pod (97%) rename doc/{crypto => man3}/BIO_f_cipher.pod (97%) rename doc/{crypto => man3}/BIO_f_md.pod (87%) rename doc/{crypto => man3}/BIO_f_null.pod (95%) rename doc/{crypto => man3}/BIO_f_ssl.pod (90%) rename doc/{crypto => man3}/BIO_find_type.pod (89%) rename doc/{crypto => man3}/BIO_get_data.pod (100%) rename doc/{crypto => man3}/BIO_get_ex_new_index.pod (80%) create mode 100644 doc/man3/BIO_meth_new.pod rename doc/{crypto => man3}/BIO_new.pod (88%) rename doc/{crypto => man3}/BIO_new_CMS.pod (100%) rename doc/{crypto => man3}/BIO_parse_hostserv.pod (93%) rename doc/{crypto => man3}/BIO_printf.pod (100%) rename doc/{crypto => man3}/BIO_push.pod (100%) create mode 100644 doc/man3/BIO_read.pod rename doc/{crypto => man3}/BIO_s_accept.pod (100%) rename doc/{crypto => man3}/BIO_s_bio.pod (88%) rename doc/{crypto => man3}/BIO_s_connect.pod (99%) rename doc/{crypto => man3}/BIO_s_fd.pod (89%) rename doc/{crypto => man3}/BIO_s_file.pod (91%) rename doc/{crypto => man3}/BIO_s_mem.pod (85%) rename doc/{crypto => man3}/BIO_s_null.pod (96%) rename doc/{crypto => man3}/BIO_s_socket.pod (95%) rename doc/{crypto => man3}/BIO_set_callback.pod (91%) rename doc/{crypto => man3}/BIO_should_retry.pod (88%) rename doc/{crypto => man3}/BN_BLINDING_new.pod (86%) rename doc/{crypto => man3}/BN_CTX_new.pod (77%) rename doc/{crypto => man3}/BN_CTX_start.pod (100%) rename doc/{crypto => man3}/BN_add.pod (96%) rename doc/{crypto => man3}/BN_add_word.pod (100%) rename doc/{crypto => man3}/BN_bn2bin.pod (98%) rename doc/{crypto => man3}/BN_cmp.pod (100%) rename doc/{crypto => man3}/BN_copy.pod (100%) rename doc/{crypto => man3}/BN_generate_prime.pod (83%) rename doc/{crypto => man3}/BN_mod_inverse.pod (96%) rename doc/{crypto => man3}/BN_mod_mul_montgomery.pod (94%) rename doc/{crypto => man3}/BN_mod_mul_reciprocal.pod (96%) rename doc/{crypto => man3}/BN_new.pod (100%) rename doc/{crypto => man3}/BN_num_bytes.pod (100%) rename doc/{crypto => man3}/BN_rand.pod (83%) create mode 100644 doc/man3/BN_security_bits.pod rename doc/{crypto => man3}/BN_set_bit.pod (100%) rename doc/{crypto => man3}/BN_swap.pod (79%) rename doc/{crypto => man3}/BN_zero.pod (81%) rename doc/{crypto => man3}/BUF_MEM_new.pod (100%) rename doc/{crypto => man3}/CMS_add0_cert.pod (99%) rename doc/{crypto => man3}/CMS_add1_recipient_cert.pod (83%) rename doc/{crypto => man3}/CMS_add1_signer.pod (97%) rename doc/{crypto => man3}/CMS_compress.pod (100%) rename doc/{crypto => man3}/CMS_decrypt.pod (95%) rename doc/{crypto => man3}/CMS_encrypt.pod (96%) rename doc/{crypto => man3}/CMS_final.pod (100%) rename doc/{crypto => man3}/CMS_get0_RecipientInfos.pod (86%) rename doc/{crypto => man3}/CMS_get0_SignerInfos.pod (97%) rename doc/{crypto => man3}/CMS_get0_type.pod (100%) rename doc/{crypto => man3}/CMS_get1_ReceiptRequest.pod (85%) rename doc/{crypto => man3}/CMS_sign.pod (98%) rename doc/{crypto => man3}/CMS_sign_receipt.pod (91%) rename doc/{crypto => man3}/CMS_uncompress.pod (100%) rename doc/{crypto => man3}/CMS_verify.pod (98%) rename doc/{crypto => man3}/CMS_verify_receipt.pod (92%) create mode 100644 doc/man3/CONF_modules_free.pod rename doc/{crypto => man3}/CONF_modules_load_file.pod (77%) create mode 100644 doc/man3/CRYPTO_THREAD_run_once.pod rename doc/{crypto => man3}/CRYPTO_get_ex_new_index.pod (95%) rename doc/{crypto => man3}/CTLOG_STORE_get0_log_by_id.pod (99%) rename doc/{crypto => man3}/CTLOG_STORE_new.pod (99%) rename doc/{crypto => man3}/CTLOG_new.pod (99%) rename doc/{crypto => man3}/CT_POLICY_EVAL_CTX_new.pod (82%) rename doc/{crypto => man3}/DEFINE_STACK_OF.pod (77%) rename doc/{crypto => man3}/DES_random_key.pod (76%) rename doc/{crypto => man3}/DH_generate_key.pod (95%) create mode 100644 doc/man3/DH_generate_parameters.pod rename doc/{crypto => man3}/DH_get0_pqg.pod (98%) rename doc/{crypto => man3}/DH_get_1024_160.pod (100%) rename doc/{crypto => man3}/DH_meth_new.pod (88%) rename doc/{crypto => man3}/DH_new.pod (96%) create mode 100644 doc/man3/DH_new_by_nid.pod rename doc/{crypto => man3}/DH_set_method.pod (98%) create mode 100644 doc/man3/DH_size.pod rename doc/{crypto => man3}/DSA_SIG_new.pod (97%) rename doc/{crypto => man3}/DSA_do_sign.pod (93%) rename doc/{crypto => man3}/DSA_dup_DH.pod (82%) rename doc/{crypto => man3}/DSA_generate_key.pod (81%) rename doc/{crypto => man3}/DSA_generate_parameters.pod (78%) rename doc/{crypto => man3}/DSA_get0_pqg.pod (98%) create mode 100644 doc/man3/DSA_meth_new.pod rename doc/{crypto => man3}/DSA_new.pod (96%) rename doc/{crypto => man3}/DSA_set_method.pod (98%) rename doc/{crypto => man3}/DSA_sign.pod (85%) create mode 100644 doc/man3/DSA_size.pod create mode 100644 doc/man3/DTLS_get_data_mtu.pod create mode 100644 doc/man3/DTLS_set_timer_cb.pod create mode 100644 doc/man3/DTLSv1_listen.pod rename doc/{crypto => man3}/ECDSA_SIG_new.pod (94%) rename doc/{crypto => man3}/ECPKParameters_print.pod (100%) rename doc/{crypto => man3}/EC_GFp_simple_method.pod (100%) rename doc/{crypto => man3}/EC_GROUP_copy.pod (98%) rename doc/{crypto => man3}/EC_GROUP_new.pod (89%) rename doc/{crypto => man3}/EC_KEY_get_enc_flags.pod (100%) rename doc/{crypto => man3}/EC_KEY_new.pod (95%) rename doc/{crypto => man3}/EC_POINT_add.pod (91%) rename doc/{crypto => man3}/EC_POINT_new.pod (100%) rename doc/{crypto => man3}/ENGINE_add.pod (85%) rename doc/{crypto => man3}/ERR_GET_LIB.pod (100%) rename doc/{crypto => man3}/ERR_clear_error.pod (100%) rename doc/{crypto => man3}/ERR_error_string.pod (100%) rename doc/{crypto => man3}/ERR_get_error.pod (92%) rename doc/{crypto => man3}/ERR_load_crypto_strings.pod (76%) rename doc/{crypto => man3}/ERR_load_strings.pod (90%) rename doc/{crypto => man3}/ERR_print_errors.pod (97%) rename doc/{crypto => man3}/ERR_put_error.pod (94%) create mode 100644 doc/man3/ERR_remove_state.pod rename doc/{crypto => man3}/ERR_set_mark.pod (100%) rename doc/{crypto => man3}/EVP_BytesToKey.pod (98%) rename doc/{crypto => man3}/EVP_CIPHER_CTX_get_cipher_data.pod (100%) rename doc/{crypto => man3}/EVP_CIPHER_meth_new.pod (89%) create mode 100644 doc/man3/EVP_DigestInit.pod rename doc/{crypto => man3}/EVP_DigestSignInit.pod (76%) create mode 100644 doc/man3/EVP_DigestVerifyInit.pod rename doc/{crypto => man3}/EVP_EncodeInit.pod (98%) create mode 100644 doc/man3/EVP_EncryptInit.pod rename doc/{crypto => man3}/EVP_MD_meth_new.pod (99%) rename doc/{crypto => man3}/EVP_OpenInit.pod (90%) rename doc/{crypto => man3}/EVP_PKEY_ASN1_METHOD.pod (88%) rename doc/{crypto => man3}/EVP_PKEY_CTX_ctrl.pod (79%) rename doc/{crypto => man3}/EVP_PKEY_CTX_new.pod (100%) create mode 100644 doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod rename doc/{crypto => man3}/EVP_PKEY_CTX_set_tls1_prf_md.pod (95%) rename doc/{crypto => man3}/EVP_PKEY_asn1_get_count.pod (100%) rename doc/{crypto => man3}/EVP_PKEY_cmp.pod (100%) rename doc/{crypto => man3}/EVP_PKEY_decrypt.pod (85%) rename doc/{crypto => man3}/EVP_PKEY_derive.pod (89%) rename doc/{crypto => man3}/EVP_PKEY_encrypt.pod (89%) rename doc/{crypto => man3}/EVP_PKEY_get_default_digest_nid.pod (100%) create mode 100644 doc/man3/EVP_PKEY_keygen.pod create mode 100644 doc/man3/EVP_PKEY_meth_get_count.pod create mode 100644 doc/man3/EVP_PKEY_meth_new.pod rename doc/{crypto => man3}/EVP_PKEY_new.pod (100%) rename doc/{crypto => man3}/EVP_PKEY_print_private.pod (86%) rename doc/{crypto => man3}/EVP_PKEY_set1_RSA.pod (100%) rename doc/{crypto => man3}/EVP_PKEY_sign.pod (91%) rename doc/{crypto => man3}/EVP_PKEY_verify.pod (82%) rename doc/{crypto => man3}/EVP_PKEY_verify_recover.pod (86%) rename doc/{crypto => man3}/EVP_SealInit.pod (95%) rename doc/{crypto => man3}/EVP_SignInit.pod (84%) rename doc/{crypto => man3}/EVP_VerifyInit.pod (89%) create mode 100644 doc/man3/EVP_aes.pod create mode 100644 doc/man3/EVP_aria.pod create mode 100644 doc/man3/EVP_bf_cbc.pod create mode 100644 doc/man3/EVP_blake2b512.pod create mode 100644 doc/man3/EVP_camellia.pod create mode 100644 doc/man3/EVP_cast5_cbc.pod create mode 100644 doc/man3/EVP_chacha20.pod create mode 100644 doc/man3/EVP_des.pod create mode 100644 doc/man3/EVP_desx_cbc.pod create mode 100644 doc/man3/EVP_idea_cbc.pod create mode 100644 doc/man3/EVP_md2.pod create mode 100644 doc/man3/EVP_md4.pod create mode 100644 doc/man3/EVP_md5.pod create mode 100644 doc/man3/EVP_mdc2.pod create mode 100644 doc/man3/EVP_rc2_cbc.pod create mode 100644 doc/man3/EVP_rc4.pod create mode 100644 doc/man3/EVP_rc5_32_12_16_cbc.pod create mode 100644 doc/man3/EVP_ripemd160.pod create mode 100644 doc/man3/EVP_seed_cbc.pod create mode 100644 doc/man3/EVP_sha1.pod create mode 100644 doc/man3/EVP_sha224.pod create mode 100644 doc/man3/EVP_sha3_224.pod create mode 100644 doc/man3/EVP_sm3.pod create mode 100644 doc/man3/EVP_sm4_cbc.pod create mode 100644 doc/man3/EVP_whirlpool.pod rename doc/{crypto => man3}/HMAC.pod (81%) rename doc/{crypto => man3}/MD5.pod (80%) rename doc/{crypto => man3}/MDC2_Init.pod (88%) rename doc/{crypto => man3}/OBJ_nid2obj.pod (91%) rename doc/{crypto => man3}/OCSP_REQUEST_new.pod (97%) rename doc/{crypto => man3}/OCSP_cert_to_id.pod (98%) rename doc/{crypto => man3}/OCSP_request_add1_nonce.pod (98%) rename doc/{crypto => man3}/OCSP_resp_find_status.pod (93%) create mode 100644 doc/man3/OCSP_response_status.pod rename doc/{crypto => man3}/OCSP_sendreq_new.pod (98%) rename doc/{crypto => man3}/OPENSSL_Applink.pod (90%) rename doc/{crypto => man3}/OPENSSL_LH_COMPFUNC.pod (94%) rename doc/{crypto => man3}/OPENSSL_LH_stats.pod (86%) rename doc/{crypto => man3}/OPENSSL_VERSION_NUMBER.pod (95%) rename doc/{crypto => man3}/OPENSSL_config.pod (99%) create mode 100644 doc/man3/OPENSSL_fork_prepare.pod rename doc/{crypto => man3}/OPENSSL_ia32cap.pod (81%) rename doc/{crypto => man3}/OPENSSL_init_crypto.pod (95%) rename doc/{ssl => man3}/OPENSSL_init_ssl.pod (100%) rename doc/{crypto => man3}/OPENSSL_instrument_bus.pod (92%) rename doc/{crypto => man3}/OPENSSL_load_builtin_modules.pod (90%) rename doc/{crypto => man3}/OPENSSL_malloc.pod (78%) rename doc/{crypto => man3}/OPENSSL_secure_malloc.pod (91%) create mode 100644 doc/man3/OSSL_STORE_INFO.pod create mode 100644 doc/man3/OSSL_STORE_LOADER.pod create mode 100644 doc/man3/OSSL_STORE_SEARCH.pod create mode 100644 doc/man3/OSSL_STORE_expect.pod create mode 100644 doc/man3/OSSL_STORE_open.pod create mode 100644 doc/man3/OpenSSL_add_all_algorithms.pod create mode 100644 doc/man3/PEM_bytes_read_bio.pod rename doc/{crypto => man3}/PEM_read.pod (100%) rename doc/{crypto => man3}/PEM_read_CMS.pod (100%) rename doc/{crypto => man3}/PEM_read_bio_PrivateKey.pod (96%) create mode 100644 doc/man3/PEM_read_bio_ex.pod rename doc/{crypto => man3}/PEM_write_bio_CMS_stream.pod (100%) rename doc/{crypto => man3}/PEM_write_bio_PKCS7_stream.pod (100%) rename doc/{crypto => man3}/PKCS12_create.pod (94%) create mode 100644 doc/man3/PKCS12_newpass.pod rename doc/{crypto => man3}/PKCS12_parse.pod (100%) rename doc/{crypto => man3}/PKCS5_PBKDF2_HMAC.pod (91%) rename doc/{crypto => man3}/PKCS7_decrypt.pod (100%) rename doc/{crypto => man3}/PKCS7_encrypt.pod (98%) rename doc/{crypto => man3}/PKCS7_sign.pod (98%) rename doc/{crypto => man3}/PKCS7_sign_add_signer.pod (97%) rename doc/{crypto => man3}/PKCS7_verify.pod (98%) create mode 100644 doc/man3/RAND_add.pod create mode 100644 doc/man3/RAND_bytes.pod create mode 100644 doc/man3/RAND_cleanup.pod create mode 100644 doc/man3/RAND_egd.pod create mode 100644 doc/man3/RAND_load_file.pod create mode 100644 doc/man3/RAND_set_rand_method.pod rename doc/{crypto => man3}/RC4_set_key.pod (100%) rename doc/{crypto => man3}/RIPEMD160_Init.pod (87%) rename doc/{crypto => man3}/RSA_blinding_on.pod (100%) rename doc/{crypto => man3}/RSA_check_key.pod (96%) create mode 100644 doc/man3/RSA_generate_key.pod create mode 100644 doc/man3/RSA_get0_key.pod create mode 100644 doc/man3/RSA_meth_new.pod rename doc/{crypto => man3}/RSA_new.pod (98%) rename doc/{crypto => man3}/RSA_padding_add_PKCS1_type_1.pod (82%) rename doc/{crypto => man3}/RSA_print.pod (100%) rename doc/{crypto => man3}/RSA_private_encrypt.pod (88%) rename doc/{crypto => man3}/RSA_public_encrypt.pod (89%) rename doc/{crypto => man3}/RSA_set_method.pod (78%) rename doc/{crypto => man3}/RSA_sign.pod (92%) rename doc/{crypto => man3}/RSA_sign_ASN1_OCTET_STRING.pod (83%) create mode 100644 doc/man3/RSA_size.pod rename doc/{crypto => man3}/SCT_new.pod (80%) rename doc/{crypto => man3}/SCT_print.pod (87%) rename doc/{crypto => man3}/SCT_validate.pod (87%) rename doc/{crypto => man3}/SHA256_Init.pod (94%) rename doc/{crypto => man3}/SMIME_read_CMS.pod (96%) rename doc/{crypto => man3}/SMIME_read_PKCS7.pod (100%) rename doc/{crypto => man3}/SMIME_write_CMS.pod (100%) rename doc/{crypto => man3}/SMIME_write_PKCS7.pod (100%) create mode 100644 doc/man3/SSL_CIPHER_get_name.pod rename doc/{ssl => man3}/SSL_COMP_add_compression_method.pod (83%) rename doc/{ssl => man3}/SSL_CONF_CTX_new.pod (100%) rename doc/{ssl => man3}/SSL_CONF_CTX_set1_prefix.pod (99%) rename doc/{ssl => man3}/SSL_CONF_CTX_set_flags.pod (97%) rename doc/{ssl => man3}/SSL_CONF_CTX_set_ssl_ctx.pod (100%) rename doc/{ssl => man3}/SSL_CONF_cmd.pod (75%) rename doc/{ssl => man3}/SSL_CONF_cmd_argv.pod (96%) rename doc/{ssl => man3}/SSL_CTX_add1_chain_cert.pod (97%) rename doc/{ssl => man3}/SSL_CTX_add_extra_chain_cert.pod (99%) rename doc/{ssl => man3}/SSL_CTX_add_session.pod (77%) rename doc/{ssl => man3}/SSL_CTX_config.pod (93%) rename doc/{ssl => man3}/SSL_CTX_ctrl.pod (99%) create mode 100644 doc/man3/SSL_CTX_dane_enable.pod rename doc/{ssl => man3}/SSL_CTX_flush_sessions.pod (81%) rename doc/{ssl => man3}/SSL_CTX_free.pod (97%) rename doc/{ssl => man3}/SSL_CTX_get0_param.pod (100%) rename doc/{ssl => man3}/SSL_CTX_get_verify_mode.pod (98%) rename doc/{ssl => man3}/SSL_CTX_has_client_custom_ext.pod (98%) rename doc/{ssl => man3}/SSL_CTX_load_verify_locations.pod (99%) rename doc/{ssl => man3}/SSL_CTX_new.pod (93%) rename doc/{ssl => man3}/SSL_CTX_sess_number.pod (93%) rename doc/{ssl => man3}/SSL_CTX_sess_set_cache_size.pod (99%) create mode 100644 doc/man3/SSL_CTX_sess_set_get_cb.pod rename doc/{ssl => man3}/SSL_CTX_sessions.pod (76%) create mode 100644 doc/man3/SSL_CTX_set0_CA_list.pod create mode 100644 doc/man3/SSL_CTX_set1_curves.pod rename doc/{ssl => man3}/SSL_CTX_set1_sigalgs.pod (82%) rename doc/{ssl => man3}/SSL_CTX_set1_verify_cert_store.pod (100%) rename doc/{ssl => man3}/SSL_CTX_set_alpn_select_cb.pod (100%) rename doc/{ssl => man3}/SSL_CTX_set_cert_cb.pod (92%) create mode 100644 doc/man3/SSL_CTX_set_cert_store.pod rename doc/{ssl => man3}/SSL_CTX_set_cert_verify_callback.pod (87%) rename doc/{ssl => man3}/SSL_CTX_set_cipher_list.pod (98%) rename doc/{ssl => man3}/SSL_CTX_set_client_CA_list.pod (97%) rename doc/{ssl => man3}/SSL_CTX_set_client_cert_cb.pod (89%) create mode 100644 doc/man3/SSL_CTX_set_client_hello_cb.pod rename doc/{ssl => man3}/SSL_CTX_set_ct_validation_callback.pod (99%) rename doc/{ssl => man3}/SSL_CTX_set_ctlog_list_file.pod (99%) rename doc/{ssl => man3}/SSL_CTX_set_default_passwd_cb.pod (97%) rename doc/{ssl => man3}/SSL_CTX_set_ex_data.pod (100%) rename doc/{ssl => man3}/SSL_CTX_set_generate_session_id.pod (84%) rename doc/{ssl => man3}/SSL_CTX_set_info_callback.pod (76%) create mode 100644 doc/man3/SSL_CTX_set_keylog_callback.pod rename doc/{ssl => man3}/SSL_CTX_set_max_cert_list.pod (99%) rename doc/{ssl => man3}/SSL_CTX_set_min_proto_version.pod (95%) create mode 100644 doc/man3/SSL_CTX_set_mode.pod create mode 100644 doc/man3/SSL_CTX_set_msg_callback.pod rename doc/{ssl => man3}/SSL_CTX_set_options.pod (81%) create mode 100644 doc/man3/SSL_CTX_set_psk_client_callback.pod rename doc/{ssl => man3}/SSL_CTX_set_quiet_shutdown.pod (98%) rename doc/{ssl => man3}/SSL_CTX_set_read_ahead.pod (98%) create mode 100644 doc/man3/SSL_CTX_set_record_padding_callback.pod create mode 100644 doc/man3/SSL_CTX_set_security_level.pod rename doc/{ssl => man3}/SSL_CTX_set_session_cache_mode.pod (99%) rename doc/{ssl => man3}/SSL_CTX_set_session_id_context.pod (99%) create mode 100644 doc/man3/SSL_CTX_set_split_send_fragment.pod rename doc/{ssl => man3}/SSL_CTX_set_ssl_version.pod (98%) rename doc/{ssl => man3}/SSL_CTX_set_timeout.pod (99%) create mode 100644 doc/man3/SSL_CTX_set_tlsext_servername_callback.pod rename doc/{ssl => man3}/SSL_CTX_set_tlsext_status_cb.pod (95%) create mode 100644 doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod rename doc/{crypto => man3}/SSL_CTX_set_tlsext_use_srtp.pod (100%) rename doc/{ssl => man3}/SSL_CTX_set_tmp_dh_callback.pod (84%) create mode 100644 doc/man3/SSL_CTX_set_verify.pod rename doc/{ssl => man3}/SSL_CTX_use_certificate.pod (98%) create mode 100644 doc/man3/SSL_CTX_use_psk_identity_hint.pod create mode 100644 doc/man3/SSL_CTX_use_serverinfo.pod rename doc/{ssl => man3}/SSL_SESSION_free.pod (90%) create mode 100644 doc/man3/SSL_SESSION_get0_cipher.pod create mode 100644 doc/man3/SSL_SESSION_get0_hostname.pod rename doc/{ssl => man3}/SSL_SESSION_get0_id_context.pod (99%) rename doc/{ssl => man3}/SSL_SESSION_get0_peer.pod (98%) rename doc/{ssl => man3}/SSL_SESSION_get_compress_id.pod (98%) rename doc/{ssl => man3}/SSL_SESSION_get_ex_data.pod (99%) create mode 100644 doc/man3/SSL_SESSION_get_protocol_version.pod rename doc/{ssl => man3}/SSL_SESSION_get_time.pod (100%) rename doc/{ssl => man3}/SSL_SESSION_has_ticket.pod (87%) create mode 100644 doc/man3/SSL_SESSION_is_resumable.pod rename doc/{ssl => man3}/SSL_SESSION_print.pod (99%) rename doc/{ssl => man3}/SSL_SESSION_set1_id.pod (93%) rename doc/{ssl => man3}/SSL_accept.pod (98%) rename doc/{ssl => man3}/SSL_alert_type_string.pod (99%) create mode 100644 doc/man3/SSL_alloc_buffers.pod rename doc/{ssl => man3}/SSL_check_chain.pod (99%) rename doc/{ssl => man3}/SSL_clear.pod (98%) rename doc/{ssl => man3}/SSL_connect.pod (98%) rename doc/{ssl => man3}/SSL_do_handshake.pod (98%) create mode 100644 doc/man3/SSL_export_keying_material.pod create mode 100644 doc/man3/SSL_extension_supported.pod rename doc/{ssl => man3}/SSL_free.pod (99%) rename doc/{ssl => man3}/SSL_get0_peer_scts.pod (99%) rename doc/{ssl => man3}/SSL_get_SSL_CTX.pod (96%) rename doc/{ssl => man3}/SSL_get_all_async_fds.pod (100%) create mode 100644 doc/man3/SSL_get_ciphers.pod rename doc/{ssl => man3}/SSL_get_client_CA_list.pod (99%) create mode 100644 doc/man3/SSL_get_client_random.pod create mode 100644 doc/man3/SSL_get_current_cipher.pod rename doc/{ssl => man3}/SSL_get_default_timeout.pod (99%) rename doc/{ssl => man3}/SSL_get_error.pod (83%) rename doc/{ssl => man3}/SSL_get_extms_support.pod (98%) rename doc/{ssl => man3}/SSL_get_fd.pod (96%) rename doc/{ssl => man3}/SSL_get_peer_cert_chain.pod (97%) rename doc/{ssl => man3}/SSL_get_peer_certificate.pod (97%) create mode 100644 doc/man3/SSL_get_peer_signature_nid.pod rename doc/{ssl => man3}/SSL_get_psk_identity.pod (98%) rename doc/{ssl => man3}/SSL_get_rbio.pod (95%) create mode 100644 doc/man3/SSL_get_server_tmp_key.pod create mode 100644 doc/man3/SSL_get_session.pod rename doc/{ssl => man3}/SSL_get_shared_sigalgs.pod (99%) rename doc/{ssl => man3}/SSL_get_verify_result.pod (97%) create mode 100644 doc/man3/SSL_get_version.pod create mode 100644 doc/man3/SSL_in_init.pod create mode 100644 doc/man3/SSL_key_update.pod rename doc/{ssl => man3}/SSL_library_init.pod (100%) rename doc/{ssl => man3}/SSL_load_client_CA_file.pod (94%) create mode 100644 doc/man3/SSL_new.pod rename doc/{ssl => man3}/SSL_pending.pod (75%) create mode 100644 doc/man3/SSL_read.pod create mode 100644 doc/man3/SSL_read_early_data.pod rename doc/{ssl => man3}/SSL_rstate_string.pod (99%) rename doc/{ssl => man3}/SSL_session_reused.pod (96%) rename doc/{ssl => man3}/SSL_set1_host.pod (89%) create mode 100644 doc/man3/SSL_set_bio.pod create mode 100644 doc/man3/SSL_set_connect_state.pod rename doc/{ssl => man3}/SSL_set_fd.pod (97%) rename doc/{ssl => man3}/SSL_set_session.pod (98%) rename doc/{ssl => man3}/SSL_set_shutdown.pod (98%) rename doc/{ssl => man3}/SSL_set_verify_result.pod (96%) rename doc/{ssl => man3}/SSL_shutdown.pod (99%) rename doc/{ssl => man3}/SSL_state_string.pod (97%) rename doc/{ssl => man3}/SSL_want.pod (79%) create mode 100644 doc/man3/SSL_write.pod rename doc/{crypto => man3}/UI_STRING.pod (83%) create mode 100644 doc/man3/UI_UTIL_read_pw.pod rename doc/{crypto => man3}/UI_create_method.pod (81%) create mode 100644 doc/man3/UI_new.pod rename doc/{crypto => man3}/X509V3_get_d2i.pod (100%) rename doc/{crypto => man3}/X509_ALGOR_dup.pod (81%) rename doc/{crypto => man3}/X509_CRL_get0_by_serial.pod (100%) rename doc/{crypto => man3}/X509_EXTENSION_set_object.pod (100%) rename doc/{crypto => man3}/X509_LOOKUP_hash_dir.pod (86%) create mode 100644 doc/man3/X509_NAME_ENTRY_get_object.pod rename doc/{crypto => man3}/X509_NAME_add_entry_by_txt.pod (87%) rename doc/{crypto => man3}/X509_NAME_get0_der.pod (100%) rename doc/{crypto => man3}/X509_NAME_get_index_by_NID.pod (88%) rename doc/{crypto => man3}/X509_NAME_print_ex.pod (86%) rename doc/{crypto => man3}/X509_PUBKEY_new.pod (100%) rename doc/{crypto => man3}/X509_SIG_get0.pod (86%) rename doc/{crypto => man3}/X509_STORE_CTX_get_error.pod (99%) rename doc/{crypto => man3}/X509_STORE_CTX_new.pod (100%) create mode 100644 doc/man3/X509_STORE_CTX_set_verify_cb.pod rename doc/{crypto => man3}/X509_STORE_get0_param.pod (100%) rename doc/{crypto => man3}/X509_STORE_new.pod (100%) rename doc/{crypto => man3}/X509_STORE_set_verify_cb_func.pod (100%) rename doc/{crypto => man3}/X509_VERIFY_PARAM_set_flags.pod (96%) rename doc/{crypto => man3}/X509_check_ca.pod (87%) rename doc/{crypto => man3}/X509_check_host.pod (98%) rename doc/{crypto => man3}/X509_check_issued.pod (92%) create mode 100644 doc/man3/X509_check_private_key.pod create mode 100644 doc/man3/X509_cmp_time.pod rename doc/{crypto => man3}/X509_digest.pod (98%) rename doc/{crypto => man3}/X509_dup.pod (95%) rename doc/{crypto => man3}/X509_get0_notBefore.pod (100%) create mode 100644 doc/man3/X509_get0_signature.pod rename doc/{crypto => man3}/X509_get0_uids.pod (100%) rename doc/{crypto => man3}/X509_get_extension_flags.pod (92%) rename doc/{crypto => man3}/X509_get_pubkey.pod (100%) rename doc/{crypto => man3}/X509_get_serialNumber.pod (100%) rename doc/{crypto => man3}/X509_get_subject_name.pod (97%) rename doc/{crypto => man3}/X509_get_version.pod (100%) rename doc/{crypto => man3}/X509_new.pod (100%) rename doc/{crypto => man3}/X509_sign.pod (100%) rename doc/{crypto => man3}/X509_verify_cert.pod (100%) rename doc/{crypto => man3}/X509v3_get_ext_by_NID.pod (99%) create mode 100644 doc/man3/d2i_DHparams.pod create mode 100644 doc/man3/d2i_PKCS8PrivateKey_bio.pod rename doc/{crypto => man3}/d2i_PrivateKey.pod (100%) rename doc/{ssl => man3}/d2i_SSL_SESSION.pod (94%) rename doc/{crypto => man3}/d2i_X509.pod (98%) rename doc/{crypto => man3}/i2d_CMS_bio_stream.pod (100%) rename doc/{crypto => man3}/i2d_PKCS7_bio_stream.pod (100%) rename doc/{crypto => man3}/i2d_re_X509_tbs.pod (88%) rename doc/{crypto => man3}/o2i_SCT_LIST.pod (95%) rename doc/{apps => man5}/config.pod (97%) rename doc/{apps => man5}/x509v3_config.pod (98%) create mode 100644 doc/man7/Ed25519.pod create mode 100644 doc/man7/RSA-PSS.pod create mode 100644 doc/man7/X25519.pod rename doc/{crypto => man7}/bio.pod (90%) rename doc/{crypto => man7}/crypto.pod (96%) rename doc/{crypto => man7}/ct.pod (97%) rename doc/{crypto => man7}/des_modes.pod (98%) rename doc/{crypto => man7}/evp.pod (79%) create mode 100644 doc/man7/ossl_store.pod create mode 100644 doc/man7/scrypt.pod rename doc/{ssl => man7}/ssl.pod (96%) create mode 100644 doc/man7/x509.pod delete mode 100644 doc/ssl/DTLSv1_listen.pod delete mode 100644 doc/ssl/SSL_CIPHER_get_name.pod delete mode 100644 doc/ssl/SSL_CTX_dane_enable.pod delete mode 100644 doc/ssl/SSL_CTX_sess_set_get_cb.pod delete mode 100644 doc/ssl/SSL_CTX_set1_curves.pod delete mode 100644 doc/ssl/SSL_CTX_set_cert_store.pod delete mode 100644 doc/ssl/SSL_CTX_set_mode.pod delete mode 100644 doc/ssl/SSL_CTX_set_msg_callback.pod delete mode 100644 doc/ssl/SSL_CTX_set_psk_client_callback.pod delete mode 100644 doc/ssl/SSL_CTX_set_security_level.pod delete mode 100644 doc/ssl/SSL_CTX_set_split_send_fragment.pod delete mode 100644 doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod delete mode 100644 doc/ssl/SSL_CTX_set_verify.pod delete mode 100644 doc/ssl/SSL_CTX_use_psk_identity_hint.pod delete mode 100644 doc/ssl/SSL_CTX_use_serverinfo.pod delete mode 100644 doc/ssl/SSL_SESSION_get0_cipher.pod delete mode 100644 doc/ssl/SSL_SESSION_get0_hostname.pod delete mode 100644 doc/ssl/SSL_SESSION_get_protocol_version.pod delete mode 100644 doc/ssl/SSL_export_keying_material.pod delete mode 100644 doc/ssl/SSL_extension_supported.pod delete mode 100644 doc/ssl/SSL_get_ciphers.pod delete mode 100644 doc/ssl/SSL_get_client_random.pod delete mode 100644 doc/ssl/SSL_get_current_cipher.pod delete mode 100644 doc/ssl/SSL_get_session.pod delete mode 100644 doc/ssl/SSL_get_version.pod delete mode 100644 doc/ssl/SSL_new.pod delete mode 100644 doc/ssl/SSL_read.pod delete mode 100644 doc/ssl/SSL_set_bio.pod delete mode 100644 doc/ssl/SSL_set_connect_state.pod delete mode 100644 doc/ssl/SSL_write.pod delete mode 100644 engines/afalg/build.info delete mode 100644 engines/afalg/e_afalg.ec delete mode 100644 engines/afalg/e_afalg_err.c delete mode 100644 engines/afalg/e_afalg_err.h rename engines/{afalg => }/e_afalg.c (88%) create mode 100644 engines/e_afalg.ec rename engines/{afalg => }/e_afalg.h (89%) create mode 100644 engines/e_afalg.txt create mode 100644 engines/e_afalg_err.c create mode 100644 engines/e_afalg_err.h create mode 100644 engines/e_capi.txt delete mode 100644 engines/e_chil.c delete mode 100644 engines/e_chil.ec delete mode 100644 engines/e_chil_err.c delete mode 100644 engines/e_chil_err.h create mode 100644 engines/e_dasync.txt create mode 100644 engines/e_ossltest.txt delete mode 100644 engines/e_padlock.ec delete mode 100644 engines/vendor_defns/hwcryptohook.h create mode 100644 fuzz/client.c create mode 100644 fuzz/corpora/asn1/0003dfc89707eeabda0c94a227c7d3fc6cd7f182 create mode 100644 fuzz/corpora/asn1/00559d7859c12eaa40ed044f21802d351b206996 create mode 100644 fuzz/corpora/asn1/0085a6bed5183d0c8af683b59afb5658cd6263c4 create mode 100644 fuzz/corpora/asn1/008b809becebb2b079fde5dbb44478c5e632e779 create mode 100644 fuzz/corpora/asn1/00a1bcf0e7a32452eb8b1cd971dc8b5b564a9ef0 create mode 100644 fuzz/corpora/asn1/00a3f0b2dc24ac904fcf4095b8a3a82438202c52 create mode 100644 fuzz/corpora/asn1/00aff37cdb1b0a2f2af0c9dc391fb1372b15e633 create mode 100644 fuzz/corpora/asn1/00b14db87f31c2b33204bbfdabf96bd422712976 create mode 100644 fuzz/corpora/asn1/00c6beb3941ebf0bf02a74e4d4496f773ea989ee create mode 100644 fuzz/corpora/asn1/00d52b4022052df8f46ba4b5040115f66fadc3c5 create mode 100644 fuzz/corpora/asn1/00d768ab6911ffb8d66ccb03016c140fb7658204 create mode 100644 fuzz/corpora/asn1/00f27180d90d6e8a65f53bfa911a5a9ee5b36098 create mode 100644 fuzz/corpora/asn1/0100b276fdd5c8971fb3ae681683006cd9f20f0f create mode 100644 fuzz/corpora/asn1/0110b728e90d45b06d479874ca848e815a6fa4fb create mode 100644 fuzz/corpora/asn1/0114b5ed29c54ee9b45e790a8f58b6929c48e2d1 create mode 100644 fuzz/corpora/asn1/011aea724d8151efa0dd3227113c5cb348ed854b create mode 100644 fuzz/corpora/asn1/0122363b5775dd39f326d1ca58e5c15cc76b6d5b create mode 100644 fuzz/corpora/asn1/0122694ecefb635272892c4fad2164299fc56610 create mode 100644 fuzz/corpora/asn1/0150b1c18d32eca958f6a6b21c298dbe27391e6a create mode 100644 fuzz/corpora/asn1/01695676f4183e2caec02d5093a164d4ce937b24 create mode 100644 fuzz/corpora/asn1/02045d7d734b98dab0a446f3ea6a3bd390db1110 create mode 100644 fuzz/corpora/asn1/024dbd1b4ffcf17317d056520fa97664bd209437 create mode 100644 fuzz/corpora/asn1/02c36f4de24a41591c1d1a9b50b306f5d5fbf5d0 create mode 100644 fuzz/corpora/asn1/02eb61cd8c58ea675bfaa4dced8a5ffe12b8d43b create mode 100644 fuzz/corpora/asn1/0315ca0d5871d1f4ec2ba7bfb26dc334d87a8d7e create mode 100644 fuzz/corpora/asn1/03277bf3264bf0ba3a65e6ae58c4f1e716a2ae66 create mode 100644 fuzz/corpora/asn1/0338e8b8f750873ade552222290e2058050710a6 create mode 100644 fuzz/corpora/asn1/033969db70014b8d53c360a2a4d3908d8c72c654 create mode 100644 fuzz/corpora/asn1/035249d96148f3620add8703cbf5218a8e953174 create mode 100644 fuzz/corpora/asn1/0353f0433bc9e8d6110f9a07ce27a62b03126e52 create mode 100644 fuzz/corpora/asn1/035b71e89bac2b1ae522d5ca6285674fe4904366 create mode 100644 fuzz/corpora/asn1/0362391cf3f8a4c895c889278c3848c4df81a7e3 create mode 100644 fuzz/corpora/asn1/036a381250691217542d13cc4f541535c00df291 create mode 100644 fuzz/corpora/asn1/03ad231400427e4a862055313c837d297f9c37ff create mode 100644 fuzz/corpora/asn1/03d54df96e4fa9c9844b3b1dac2b2ac252a81089 create mode 100644 fuzz/corpora/asn1/03e9998810910545db31727bd9bd014b4c5d9e4c create mode 100644 fuzz/corpora/asn1/03efc57367a097244e66ba5ea5b8149271c94a6d create mode 100644 fuzz/corpora/asn1/0428b98df299bfcd31f61a20f9fc31d0b556a74d create mode 100644 fuzz/corpora/asn1/0432f6e6e2db0786d0387e7c09ed2814296d7dcc create mode 100644 fuzz/corpora/asn1/04826d6afe6809312d8007b51d8a7ed4f9d6ab37 create mode 100644 fuzz/corpora/asn1/048d57945be095ebc1853f3ddf35f1574dda65c2 create mode 100644 fuzz/corpora/asn1/0492e42cb40bf2d110c37ac4fdab8162df931de5 create mode 100644 fuzz/corpora/asn1/04b33590d65330730838e35c919ada85d83151bb create mode 100644 fuzz/corpora/asn1/04c072d0248525862e4ef46fe42430f5373fbd4e create mode 100644 fuzz/corpora/asn1/04e7da1188a2ffcaa8f2368c12c4beab9c822cc9 create mode 100644 fuzz/corpora/asn1/04ec9f37e31b1203b4f3c01a36c3178eecf1eea4 create mode 100644 fuzz/corpora/asn1/04f1ba3fd23a0dc9352d48280ea1fe7e1d94e26c create mode 100644 fuzz/corpora/asn1/0506aca75bf93e309caaa01326dbfb1727020bcd create mode 100644 fuzz/corpora/asn1/0521b4c9c5bd11c3d8f7e1b5684b85df990f9f0d create mode 100644 fuzz/corpora/asn1/053dabde194de686f13218c849b8e701159ea071 create mode 100644 fuzz/corpora/asn1/054d788535e31ed1b1b162a1d15aa5df38f4d527 create mode 100644 fuzz/corpora/asn1/0551023b2f44c59cd90b95ffcc1f096c1d8a3f65 create mode 100644 fuzz/corpora/asn1/0568a0feae0c78db54e34f0050bb4f89d3679459 create mode 100644 fuzz/corpora/asn1/0584e966ce708ca3992aa2fc57781f656dd33e9b create mode 100644 fuzz/corpora/asn1/05945b16a17b566c12918f1651cc95b2ae97eff0 create mode 100644 fuzz/corpora/asn1/05a52819a002faf97d11b6fbbeb4b87c8d4493ff create mode 100644 fuzz/corpora/asn1/05fd9727c53a29e3d8c2883fa52649fed248c154 create mode 100644 fuzz/corpora/asn1/0609a7f146568bce6a5c9190569b5e61ddc54b6b create mode 100644 fuzz/corpora/asn1/0658ba5e716d0a6ca2086ee13108f88e1fd6dc5e create mode 100644 fuzz/corpora/asn1/0658f46aea2f7a995a90f361042b0840c40bf776 create mode 100644 fuzz/corpora/asn1/065ef2541588cb730ab0790a755e2e5fcc2fc540 create mode 100644 fuzz/corpora/asn1/066c71f0c21206fa42a1c0fb8624faee0bc48367 create mode 100644 fuzz/corpora/asn1/068fb62e880cbcf79ce9166b9995cd353f592acb create mode 100644 fuzz/corpora/asn1/06e2f95340fed99679b780e12351cf905b5484ac create mode 100644 fuzz/corpora/asn1/0723f32f584e12fa5ee61ea572d7e6bcaa7860cc create mode 100644 fuzz/corpora/asn1/07361638864ee9a0a590533cacca2d6d0daa39f3 create mode 100644 fuzz/corpora/asn1/073a0852cdb96101bbe760a51b68f71c90d7e9bb create mode 100644 fuzz/corpora/asn1/07429d1d5b50057173687c84be4f22c98987fbc2 create mode 100644 fuzz/corpora/asn1/074dc4eb49d3ea6c3c0cad698f618a65f325205a create mode 100644 fuzz/corpora/asn1/07722a401469b8e7fdeccb3ee3231df47a0e6054 create mode 100644 fuzz/corpora/asn1/07778ddff77e2831091d0860dfc6d782077046a3 create mode 100644 fuzz/corpora/asn1/07937aee65117a3ab60401c9a19d8cb5324ccd7d create mode 100644 fuzz/corpora/asn1/07cb0879414e26c50c81e30cea036e7a345ed596 create mode 100644 fuzz/corpora/asn1/08173e573b203a5e2e0e8c0775270c6a87559b08 create mode 100644 fuzz/corpora/asn1/08276123bfe8471dc689f6d9fadc96f06bba3cb2 create mode 100644 fuzz/corpora/asn1/0829cfa6d94e364cd7ef93d8378c2b61d239a0e3 create mode 100644 fuzz/corpora/asn1/08363d974a3b4a84aa0453bc5f24080c6a0da695 create mode 100644 fuzz/corpora/asn1/083f36ab58d74d4fa64a0ce228b2d9d033485138 create mode 100644 fuzz/corpora/asn1/0853f191784494fd5083d89629769c9d22006d30 create mode 100644 fuzz/corpora/asn1/0855d931fefdaf06538bf8385d33c6979a69f840 create mode 100644 fuzz/corpora/asn1/086e9cb296fc6d616aef3864ab497a9747c9f573 create mode 100644 fuzz/corpora/asn1/089650263d738b68b28aeab240f3036d8f32ba1f create mode 100644 fuzz/corpora/asn1/08cff5d45f9fad4a723a16c631629ba7f0ca778d create mode 100644 fuzz/corpora/asn1/08ec21d7c0d4326c8e80f57d4b6bf7011ee58bd8 create mode 100644 fuzz/corpora/asn1/09083eaceb298eac3f93abb2a90feb06aabb386a create mode 100644 fuzz/corpora/asn1/090d8ea802fae9b31057eb4f80d202e021033511 create mode 100644 fuzz/corpora/asn1/0913fd09e8f4f966a6a167f73eee4e2199ee12ad create mode 100644 fuzz/corpora/asn1/091694137869686c1a7ee39ccaf2c1bde45887ca create mode 100644 fuzz/corpora/asn1/092509bac75dd8b164c8b4cbe9c39fe83ec492bc create mode 100644 fuzz/corpora/asn1/0960d847dff78f3f84dcf9699aaf22f30a2440e8 create mode 100644 fuzz/corpora/asn1/0979f9bb860e4f78b0b8a920b26bc87b38b22567 create mode 100644 fuzz/corpora/asn1/09d7b36792326c00d87581008aac83a95661770a create mode 100644 fuzz/corpora/asn1/0a0d5f88e5a36d77e39e88a0709d4e55c5c61236 create mode 100644 fuzz/corpora/asn1/0a2f62d4a8f314604bf235715928fd6f94bfc7d7 create mode 100644 fuzz/corpora/asn1/0a7a598828d6dd0ecb33518691f349828edb62ae create mode 100644 fuzz/corpora/asn1/0aa03c9c1755e261607017d88f87d0483c55e188 create mode 100644 fuzz/corpora/asn1/0ab0fc38929e188cfcec5534350eacd30e0c5377 create mode 100644 fuzz/corpora/asn1/0ada8a31f96176ff0574648d657697641ff563f1 create mode 100644 fuzz/corpora/asn1/0ae43b1fb75f1c8d76f968e1a95982eaa6a63a3f create mode 100644 fuzz/corpora/asn1/0b2165d77e1513f1a9c1a79e8f8e80ff4ba36cda create mode 100644 fuzz/corpora/asn1/0b49d5ec91e55f25cae6aa34c107cf9f676d8147 create mode 100644 fuzz/corpora/asn1/0b70ee5253baa233fc2cccfc1b809f0e844444e7 create mode 100644 fuzz/corpora/asn1/0b9069e8348e44dd7e2a0dfbb886d5de5e0f920b create mode 100644 fuzz/corpora/asn1/0ba99fd79c7b228d8e95abf3ddc7533b910cd96a create mode 100644 fuzz/corpora/asn1/0babbf8fa016e1ecbcb5dee6b2a88b8676d5073a create mode 100644 fuzz/corpora/asn1/0bac0cb1b9375f48175a913a25fd22afa79f41b9 create mode 100644 fuzz/corpora/asn1/0bf904fd0e126fee86366b247cf62a4e7695b8f8 create mode 100644 fuzz/corpora/asn1/0c01617de21f0a1c7731f2c9778d775a6f47077e create mode 100644 fuzz/corpora/asn1/0c1f384ed05b6c56f3abace5ed088f0c72bcc2e0 create mode 100644 fuzz/corpora/asn1/0c3a8eb058fb0b434d1fa9c8a9d46c08266eca3a create mode 100644 fuzz/corpora/asn1/0c434b50d799ed492a79da795ac854e131e712ed create mode 100644 fuzz/corpora/asn1/0c4edac524ddd711d7d1e8bbe38863671eb47eef create mode 100644 fuzz/corpora/asn1/0c52f4676feade267e670d033895943467bf0287 create mode 100644 fuzz/corpora/asn1/0c6cc104c06b8c2a4812b8c3c6ab74f6eda79983 create mode 100644 fuzz/corpora/asn1/0c6e7f67c798a37323f4d6053bb046973eb07668 create mode 100644 fuzz/corpora/asn1/0c769b955f479ba83375a16c9a550a217bec90f4 create mode 100644 fuzz/corpora/asn1/0c7f56cd0b917add3ca10c89027f7ff1620a5a29 create mode 100644 fuzz/corpora/asn1/0c91c6872569f737005a228ea106dfbcc360262b create mode 100644 fuzz/corpora/asn1/0cbc90b164c5fa1fa303e53fbb196b6f2b2220b6 create mode 100644 fuzz/corpora/asn1/0cbdfe417293381361effbdccbdfc0837bbd413d create mode 100644 fuzz/corpora/asn1/0cd4febcf2d9c9adb0f1ef32ed9531236f741af1 create mode 100644 fuzz/corpora/asn1/0d36f41768b953abfcccd5cbbe6c88021235386c create mode 100644 fuzz/corpora/asn1/0d5770244ebb31ad2be403529ad1ac5f81c5afbd create mode 100644 fuzz/corpora/asn1/0d61de6095c9f199476d88662055f13be8e06ccb create mode 100644 fuzz/corpora/asn1/0d7ee84b70696b927ec7845fe283214e562125a3 create mode 100644 fuzz/corpora/asn1/0d813d407f38ca40f6c7cacfcf0eb47f210187fc create mode 100644 fuzz/corpora/asn1/0d8206dde42181624bdf4012e1ab69a4bc5fd13c create mode 100644 fuzz/corpora/asn1/0d9853b13a10e74a12d44938cb7c14a80fffc0b2 create mode 100644 fuzz/corpora/asn1/0db0098d9c30a8552e356ae4b8caf12e9318c690 create mode 100644 fuzz/corpora/asn1/0de77668d95a0cb135e092fdb98e13572f2fb4f7 create mode 100644 fuzz/corpora/asn1/0e2022f5a37119afa0ef2bb8a794a1b3773706e9 create mode 100644 fuzz/corpora/asn1/0e356ba505631fbf715758bed27d503f8b260e3a create mode 100644 fuzz/corpora/asn1/0e63b119015f14d494c8f694f3a72c6c7f908acb create mode 100644 fuzz/corpora/asn1/0e68867857476ef05466846983b448ca5b70587a create mode 100644 fuzz/corpora/asn1/0e8aa3ff7c240dad73a1270bba27783bca917fd3 create mode 100644 fuzz/corpora/asn1/0ea3948781fa70bc05e69ea38775957cbe55d420 create mode 100644 fuzz/corpora/asn1/0eb5037935ba1c2791f3b7e9bc8470c3c60d2aff create mode 100644 fuzz/corpora/asn1/0ebed543fc4618ccf16745b8a15e24ef84d4fa95 create mode 100644 fuzz/corpora/asn1/0ee500dc808b4ea16a2769182d010e3d13678f86 create mode 100644 fuzz/corpora/asn1/0f00ebc2475af3b1375b8d70faa3b3771da47fe1 create mode 100644 fuzz/corpora/asn1/0f025f8b50707039663a09c0ae2e829e4cdb4f0b create mode 100644 fuzz/corpora/asn1/0f28099753c89f94a36c9f2b874e58888814be11 create mode 100644 fuzz/corpora/asn1/0f2e7ed624c190b0e49073ec1303ed173eabb763 create mode 100644 fuzz/corpora/asn1/0f5792d0e35472601d9f46875c9808d3546bd12f create mode 100644 fuzz/corpora/asn1/0f6b65bbf6e17b9ad675efa4fafdac330a117b5a create mode 100644 fuzz/corpora/asn1/0f767ec303d7e81c099c8adf430a1c60aed16927 create mode 100644 fuzz/corpora/asn1/0f78152e5adb7156bdd3a31ec9a8031d5873bc84 create mode 100644 fuzz/corpora/asn1/0ff4898d39c135b7258e8c25c79f46b29aef78b1 create mode 100644 fuzz/corpora/asn1/0ffbbf1bea84d025fdbee6fb2ce4c0dafe323778 create mode 100644 fuzz/corpora/asn1/100755882139d8ac2af8bfc9ce880cc2a9251f7c create mode 100644 fuzz/corpora/asn1/100ed87518c7cee132c7a4e222d243e36a79639b create mode 100644 fuzz/corpora/asn1/10108ccb71990e9d7b99b0b82e9ecf16bc43d447 create mode 100644 fuzz/corpora/asn1/102c2a168a7eb6438f353f462ae06e2d8761e0e1 create mode 100644 fuzz/corpora/asn1/103fb3326e6388f2ff50d6f8362c6f6b86d13385 create mode 100644 fuzz/corpora/asn1/104b0de5d9ecd820ee5938d414439a8e533a3599 create mode 100644 fuzz/corpora/asn1/106b97b64b9f4076d0cb02306dcd705d70681bc6 create mode 100644 fuzz/corpora/asn1/1092ab8bd4da3bbaae7c6506daa78f226aa05a5c create mode 100644 fuzz/corpora/asn1/10d01f00dca2923874f8404d11d1b30cd358a3c2 create mode 100644 fuzz/corpora/asn1/10d216bab7ea9e57deec17e099418ae1d96d644e create mode 100644 fuzz/corpora/asn1/10d7b64c22d438eefbe68b6511ce73b9160977ca create mode 100644 fuzz/corpora/asn1/11104e4ba4a92fdc254b6dd8aa4d7745e6236d45 create mode 100644 fuzz/corpora/asn1/11249276ab0cea54aa2e13ba2c07269319d31fcb create mode 100644 fuzz/corpora/asn1/11300150db008f9eee0c16fed397039ddc14d445 create mode 100644 fuzz/corpora/asn1/113cb7e34e5d23b648a38a9623555026c4efb30d create mode 100644 fuzz/corpora/asn1/1141781eecdc2ed4e7d8cd78ea09bb40f8bd3d22 create mode 100644 fuzz/corpora/asn1/114ed3f13c47c57472a16a3a9589ceb363f88832 create mode 100644 fuzz/corpora/asn1/11522859146ebc3a36bc8ff0e546ab6815ce53e6 create mode 100644 fuzz/corpora/asn1/11923d2ce5268e0bc8a5082feaa56f2b399e89fa create mode 100644 fuzz/corpora/asn1/1197c0ffd3e0f77b82340b4d493cf290228d8f49 create mode 100644 fuzz/corpora/asn1/11b2bf9973817dfa6ca6a761518598f4928dda89 create mode 100644 fuzz/corpora/asn1/11b4592ae3a749e1600fbdbf27bf95357650402e create mode 100644 fuzz/corpora/asn1/11b5c41fa22df9cd65a211abf964a6bc4104e8b5 create mode 100644 fuzz/corpora/asn1/11d900304d0975a26665059115a718113ef1a643 create mode 100644 fuzz/corpora/asn1/121ca7810c840a552d8d51dbcbf2ee49df3ccd4d create mode 100644 fuzz/corpora/asn1/1227287fc0ac4f2b05bb2159404c40ac84b1c66b create mode 100644 fuzz/corpora/asn1/1242a289a21334d8c0b10bd76803c9c3ba4aee4f create mode 100644 fuzz/corpora/asn1/126ac8113f06449d4ce19914cd4f34bfce0248ab create mode 100644 fuzz/corpora/asn1/126fbc0e127fe6cc0add35eb6e812823d8733119 create mode 100644 fuzz/corpora/asn1/129bc116ce9bb203478b33802b9edd90f19fb27b create mode 100644 fuzz/corpora/asn1/12a5a72578bf8ade691156e44f720d56848a7d1a create mode 100644 fuzz/corpora/asn1/12accca93449d9a07a67f0d2fcc94f49411366c3 create mode 100644 fuzz/corpora/asn1/12c74bf437ba831ea55c23e01514e8e1076569f0 create mode 100644 fuzz/corpora/asn1/12ded2f0ce41e4dde2102688fe4616ac7aaac1a1 create mode 100644 fuzz/corpora/asn1/12e0cd0531d71736d8a11c2b5095dfc4403aef29 create mode 100644 fuzz/corpora/asn1/1352821d768d5a70bcac5c40f2542a28e71ae1f0 create mode 100644 fuzz/corpora/asn1/135745dfa8dee0bee07c0c4dc24436d6fe70488c create mode 100644 fuzz/corpora/asn1/1362912a39aa7816ea10f1a56a3b2b6d43244cc9 create mode 100644 fuzz/corpora/asn1/1389cd4044d41d940d94dbbfea4953719bbf88e3 create mode 100644 fuzz/corpora/asn1/13b612638fa6e1c75c63ec7b3ba6404623238dc9 create mode 100644 fuzz/corpora/asn1/13ca9d68013d5c220f70298f0c4c009b63d6ba6d create mode 100644 fuzz/corpora/asn1/13ed0ce599d0353a2da422d80ea055ec8e4fd51e create mode 100644 fuzz/corpora/asn1/13f8c86d8edf5a33973229033c883ee8037cd067 create mode 100644 fuzz/corpora/asn1/14207d2628a436b0ffae8d5d8b3543d9229eeae8 create mode 100644 fuzz/corpora/asn1/1445db6227680692d49bd25b6b9289fbaa3d18fd create mode 100644 fuzz/corpora/asn1/14b445788c533d1ccccd0e7ec2cc3aa7004fdd5a create mode 100644 fuzz/corpora/asn1/14cb798abcc8218b01d593c92277a8463c015910 create mode 100644 fuzz/corpora/asn1/14e8e9a8e0721ae3b7a6014585c8773c6f619abd create mode 100644 fuzz/corpora/asn1/15196f05b117690f3e12e56aa0c43803ea0d2a46 create mode 100644 fuzz/corpora/asn1/158e995574b055ecfaca2ee0e2eb5aa857fb8b16 create mode 100644 fuzz/corpora/asn1/15b47c89377a0b5a7e8d458eeb4a81f7be865c83 create mode 100644 fuzz/corpora/asn1/15bf846be45f5de1b8ddebf29d0e5ee4f15dc866 create mode 100644 fuzz/corpora/asn1/15d51b9c748922a6a74aa48ae48158a29d30654d create mode 100644 fuzz/corpora/asn1/15e8b673e9b4feb25a8a6c78d5f7f3c29491ada4 create mode 100644 fuzz/corpora/asn1/1616d3d2ecc75343d9e7351f24def3b8779aabb9 create mode 100644 fuzz/corpora/asn1/163ee21a796c7141500ecdb2b97c1b9807200949 create mode 100644 fuzz/corpora/asn1/165e09db99908c38ef7edbb439a349b2061b6668 create mode 100644 fuzz/corpora/asn1/1674a3d050cb153da6380a629f85a1589d2720ca create mode 100644 fuzz/corpora/asn1/1687eda01a697a5815435c99f875a6f2ec7a6dfb create mode 100644 fuzz/corpora/asn1/16a41c5d669ec05cea162b44c9e4ba42d2444fdb create mode 100644 fuzz/corpora/asn1/16b335442c6693b4c9aab079854840da3b476144 create mode 100644 fuzz/corpora/asn1/16d264bf0c1b4ce3ba96c9fb6b8248278c15b30c create mode 100644 fuzz/corpora/asn1/1704a553d219989399ed58f883976f292fc8c91d create mode 100644 fuzz/corpora/asn1/17094b92004b2e9487aec94b764043f892aa4299 create mode 100644 fuzz/corpora/asn1/170e83be396c9ba4f876a04c4cf991c8e9f40c11 create mode 100644 fuzz/corpora/asn1/1727d7b5e1b39d586618c6dbe9355351c5bf662e create mode 100644 fuzz/corpora/asn1/174e5f148d3b3e3eac1c14b5feb45a244d75a8c5 create mode 100644 fuzz/corpora/asn1/17837957a4d3a1d677f2c4b798cf91f6c12571e7 create mode 100644 fuzz/corpora/asn1/179937e98f9a166103dd0c60dbd24b10997f146a create mode 100644 fuzz/corpora/asn1/179d5bc8cd1fdd39150b67d991eeb6866892e25e create mode 100644 fuzz/corpora/asn1/17a0b49bea9023d62d3bf46184face43a37aadbc create mode 100644 fuzz/corpora/asn1/17bb000aaa07eae4133655fbbf4214074ddfe037 create mode 100644 fuzz/corpora/asn1/17d4f3d3a9a810d72fa1003f079df67f75b7e597 create mode 100644 fuzz/corpora/asn1/18319154f53e16dea7dc7c6e2513634adefda68a create mode 100644 fuzz/corpora/asn1/18a0ade5426ef48135ad828925732b959c2a0f1b create mode 100644 fuzz/corpora/asn1/18b9341679cf5a0706ac13d8d84b2c6a7cc4ab0e create mode 100644 fuzz/corpora/asn1/18bd8cd49ef2dbe9a3e107b576d7adb519b48369 create mode 100644 fuzz/corpora/asn1/18d3af0cf8ec8f9a689d6a236463d2f80bda84f2 create mode 100644 fuzz/corpora/asn1/18df931fef8b730ccc3caa475a4ffab22de7f305 create mode 100644 fuzz/corpora/asn1/18ffe11436dca9f1f0ad84c17ba92ecb5d751731 create mode 100644 fuzz/corpora/asn1/19065351ff90c7c057cce1ee218372aef546959f create mode 100644 fuzz/corpora/asn1/190e440d016261e7fe9979a4b5c64209bc51451a create mode 100644 fuzz/corpora/asn1/19ac01dd2a53ea940c4d3ce63d708197c625d496 create mode 100644 fuzz/corpora/asn1/19ae47c0346c4597f3a3f3d17325b99d27799913 create mode 100644 fuzz/corpora/asn1/1a080cf50d5ae2919583054fb5fe743ed4249836 create mode 100644 fuzz/corpora/asn1/1a392e89ed4c3e576b0d69d19d21728f62528f65 create mode 100644 fuzz/corpora/asn1/1a39cda7324a6e2463eb98f7e261306720a53df2 create mode 100644 fuzz/corpora/asn1/1a432c576f07a72170ff6acb8e575ffcb1ec4606 create mode 100644 fuzz/corpora/asn1/1a8edb19884ae47252598af0868f5b747ee8fffe create mode 100644 fuzz/corpora/asn1/1aadee902c64462c3efbca22917fc9cdab1a1dbe create mode 100644 fuzz/corpora/asn1/1b1995df5a9788f2c68d01e46a0e1165969585e2 create mode 100644 fuzz/corpora/asn1/1b2620eba3a7847c8119a335d9cedf2024be6b06 create mode 100644 fuzz/corpora/asn1/1b38c9541d3265c8001d8eab26368e5e13fc8924 create mode 100644 fuzz/corpora/asn1/1b3cfe6d6283fb256cdb595e9c78e15b5c84e259 create mode 100644 fuzz/corpora/asn1/1b4849515dea91258e7aa1411e6246f003f1d169 create mode 100644 fuzz/corpora/asn1/1b5409fa62ce9ff2dec04baac568b563fa77c835 create mode 100644 fuzz/corpora/asn1/1b54d1d15b277075e92b3337b4b79847bc7f5366 create mode 100644 fuzz/corpora/asn1/1b5c5feb82ba0a4b9c249e550a83d31b7f7eab6e create mode 100644 fuzz/corpora/asn1/1bc25d5bb880ddf3d92db5b026daae9ee7acf968 create mode 100644 fuzz/corpora/asn1/1bf627c1384bfc91506307682411ab0779965da0 create mode 100644 fuzz/corpora/asn1/1c49cd7e0aa830889b606de8379b75e57f268b1b create mode 100644 fuzz/corpora/asn1/1c60f3abd23e11a3f080711ae9ac70f8801cd5fc create mode 100644 fuzz/corpora/asn1/1c62e82b92cfee3a0e1fb6edfefdce66c5dba463 create mode 100644 fuzz/corpora/asn1/1c7a0221b1b1b9f375a742ff3dd4e9487ebfad7d create mode 100644 fuzz/corpora/asn1/1c9cb29e1c1f87dc4ba47782836d4d5a09f6a896 create mode 100644 fuzz/corpora/asn1/1ce0683366e5403002ad523ccdbc5d015da7af1f create mode 100644 fuzz/corpora/asn1/1ce53904a2d9979c27a51d79fac59a0d6fbb8be7 create mode 100644 fuzz/corpora/asn1/1cf7882d248af13533dbd3fee1b4b1396a1a321f create mode 100644 fuzz/corpora/asn1/1d7e2edd429ead2e9a5e2b148e83cf09e272310d create mode 100644 fuzz/corpora/asn1/1d86800f5302791a0a599f540ef7352b6870da4b create mode 100644 fuzz/corpora/asn1/1d9a2868e77304dea4cf2370078f3809bb06ad74 create mode 100644 fuzz/corpora/asn1/1dab6071b19a7280ce54653d02fe4c4c071299c0 create mode 100644 fuzz/corpora/asn1/1db8f3befb27253336ac321c0537ae88897b4fcc create mode 100644 fuzz/corpora/asn1/1de3a044e4510f62f32815d6935420bbb94f23ff create mode 100644 fuzz/corpora/asn1/1deb2da4d4e00abbcde2643b58cf4fea37a64053 create mode 100644 fuzz/corpora/asn1/1e11cd79c5ddaa2572d5ceb31579bf16572dab76 create mode 100644 fuzz/corpora/asn1/1e203be665479c4b31f3b6b204cc5cd53c03f099 create mode 100644 fuzz/corpora/asn1/1e211bda2c3ad0eb86ad2a3a56744fe20e5ea24e create mode 100644 fuzz/corpora/asn1/1e2fc16b09c2b78ce29d4215c383a25b60b56979 create mode 100644 fuzz/corpora/asn1/1e5b8ecea1adb2a86287079674b85b32898ca682 create mode 100644 fuzz/corpora/asn1/1ebbf3a77ebf28acbdd8e577a6dce94340e74d4e create mode 100644 fuzz/corpora/asn1/1eeb2d4ae688e8b87cb27feaa538656dd16495d4 create mode 100644 fuzz/corpora/asn1/1f069076a0d8608f4fd0d1fb6df007b5f1fa0737 create mode 100644 fuzz/corpora/asn1/1f37ff8b0ac583461b42b2b8550da6064b4f8a16 create mode 100644 fuzz/corpora/asn1/1f511d3c303572f384c410e06abae38af7fcfdeb create mode 100644 fuzz/corpora/asn1/1f95288ea7808f51a08c8b0c16e5ae757831bdda create mode 100644 fuzz/corpora/asn1/1ff0526d134f06d696ff72027c2821644a4ab82a create mode 100644 fuzz/corpora/asn1/2065f0d601e26f9b0f537912d696730b62fa315e create mode 100644 fuzz/corpora/asn1/2073e661998912037eb6bb489826a76764ab5455 create mode 100644 fuzz/corpora/asn1/20943cdae1f2999593ca4456591622c8c7b1152f create mode 100644 fuzz/corpora/asn1/20da4441494e1370e1ac93561c3fbc26ad144b8d create mode 100644 fuzz/corpora/asn1/20eb31e92cbd72843c2eb6733763ee769ddaa67e create mode 100644 fuzz/corpora/asn1/211379fdfdd1ebadb71b5cb846a2f4dc86e3e861 create mode 100644 fuzz/corpora/asn1/21138be29db294c09a6faecdd2598d853c15d7b9 create mode 100644 fuzz/corpora/asn1/2143a4b244fd5e84e4db3252c4e7c8bb4ecfdd34 create mode 100644 fuzz/corpora/asn1/215f0009486cb634bb0e920dd3d24ec2822c6202 create mode 100644 fuzz/corpora/asn1/218593c54bd7dc7a8cd748302b69529accc28702 create mode 100644 fuzz/corpora/asn1/21b27d2dc64114930386cecb0573d0207979c8e6 create mode 100644 fuzz/corpora/asn1/21c3148dc2924d69f8da376313d479920db39f6f create mode 100644 fuzz/corpora/asn1/21cbe98418eb4043c1965c51df8c2b5922026eed create mode 100644 fuzz/corpora/asn1/21ee863cf786315d39ef54d0966a25226ffe654f create mode 100644 fuzz/corpora/asn1/22296ada9be0f815b36dca4d25004d4010fd1f79 create mode 100644 fuzz/corpora/asn1/2231eec40220adeada27ab4ceac291d3711f14a7 create mode 100644 fuzz/corpora/asn1/223d347613d2e50d97fe34c01245d180a31105a8 create mode 100644 fuzz/corpora/asn1/225b6f352f09113733980be1be5c3789264e1e90 create mode 100644 fuzz/corpora/asn1/226a44ef56a9d593ca149370fc0f1fd91e626733 create mode 100644 fuzz/corpora/asn1/228bb2c13fe31f61dc1b46aa32f6214b6810d2b2 create mode 100644 fuzz/corpora/asn1/22c03799cad50ef15d96840481f57fc7dd9a82dd create mode 100644 fuzz/corpora/asn1/22c5d6df2be0444030c00d85c3ccb87212033de5 create mode 100644 fuzz/corpora/asn1/22ce0654d0efb1b57f73b860e2f2d3574bf4ffa8 create mode 100644 fuzz/corpora/asn1/22d3de360536126f2192a6888f5980961a9bb803 create mode 100644 fuzz/corpora/asn1/22e474615c14c99795ddb5a337d2dfca854537d1 create mode 100644 fuzz/corpora/asn1/22f06e75ee7e1006128fe49728103c5c1e515741 create mode 100644 fuzz/corpora/asn1/2313c76c06eed19c58b580fa32103bdaea86d2eb create mode 100644 fuzz/corpora/asn1/233da42d3e344e33009306ab63723a1193e751fb create mode 100644 fuzz/corpora/asn1/234c5c34daaf0963f0609415dc00751b65d16bc5 create mode 100644 fuzz/corpora/asn1/23519a24ca0e86b74889263eaec650f2a0f4d963 create mode 100644 fuzz/corpora/asn1/2356eae0a5c6a2e02264e06452dacefdeb601610 create mode 100644 fuzz/corpora/asn1/23836040a0364a5f5d2b365eef9df4c6cbb3cece create mode 100644 fuzz/corpora/asn1/2394386bdae53b815a451938b935abb7ea869597 create mode 100644 fuzz/corpora/asn1/23a5120688aacfb5443f647aaa1605c15f2d6986 create mode 100644 fuzz/corpora/asn1/242311385f0e62766b28f72059024fa9fbacf3b8 create mode 100644 fuzz/corpora/asn1/24262bf0da61dee8c33dbc42f47b1cfed4afb4fe create mode 100644 fuzz/corpora/asn1/2427a5f58efa03131aa646230b3fb71d2dfddeb5 create mode 100644 fuzz/corpora/asn1/2441b7c6baaf03f679440598080aa63e9c812ac8 create mode 100644 fuzz/corpora/asn1/246868783de348a80e7e66aa7f034418601eb1ad create mode 100644 fuzz/corpora/asn1/2477bed39d4bfe1562219289e8bfeca0293c3dc4 create mode 100644 fuzz/corpora/asn1/248109437ac4321a11b8823bb88a506025a00630 create mode 100644 fuzz/corpora/asn1/24b489ebf99a1738d2f880af080d49fed1e36d25 create mode 100644 fuzz/corpora/asn1/24d86d265671fe383d1b239e1bccb2d3d9cb0eae create mode 100644 fuzz/corpora/asn1/24ea03f656dee22836f41fdff109b51cf15fe610 create mode 100644 fuzz/corpora/asn1/252c73fe4de9867ff96ab4ba59a7b474b6f4677a create mode 100644 fuzz/corpora/asn1/2546c8f1115f3477546a47900565e5f069d945ab create mode 100644 fuzz/corpora/asn1/2553c3a6d4493d7cea253ce2caac068d8b1a86d8 create mode 100644 fuzz/corpora/asn1/2560538fbae32b5a5ee3f7761f688b24b417dbb9 create mode 100644 fuzz/corpora/asn1/256d94784731cbfd68c029bb59da432942ac1686 create mode 100644 fuzz/corpora/asn1/25815508976ac21a22ab072bcc9133a367390999 create mode 100644 fuzz/corpora/asn1/25aebec2d3d0d48d6dd640fe58d05987bc058bbd create mode 100644 fuzz/corpora/asn1/25b3d3e93ba39b0c31de245ea4ac2ed61a2a02bc create mode 100644 fuzz/corpora/asn1/25d411b8f03620ed1c0c0293315e6c1679f134dd create mode 100644 fuzz/corpora/asn1/25e449b8101ca004096e83035cbcb94f6b5ef08b create mode 100644 fuzz/corpora/asn1/25fc1f787190bade97cb4c5d03d780aa41094c40 create mode 100644 fuzz/corpora/asn1/26365a0a762e47df29b2f9cf4c22b2a49dba3d5d create mode 100644 fuzz/corpora/asn1/26388838cc5b59e4a94dab4bb8a1ec41a3b900c9 create mode 100644 fuzz/corpora/asn1/26563966fae2cdab2ecaf847d26b6f90fdd681f9 create mode 100644 fuzz/corpora/asn1/26579c14c9f7cebe8ac2372560272667d21c4c0d create mode 100644 fuzz/corpora/asn1/265d85487666fc2180cd9d8b87cde998fa984682 create mode 100644 fuzz/corpora/asn1/26758dbd1a85df8684a19f758267ed6f77627bf6 create mode 100644 fuzz/corpora/asn1/267992f001174852383b901817f2cf33cbf89bcf create mode 100644 fuzz/corpora/asn1/267c4b100a6feeda45e1f996a0a559150433589e create mode 100644 fuzz/corpora/asn1/267dced2112de0be3d6195621a91b47e421b2a1c create mode 100644 fuzz/corpora/asn1/269c3a88e460d9e328526a1a24a004e3d98748ad create mode 100644 fuzz/corpora/asn1/26b3a0702ac6b9fa207c497e2670b0ac02e6b080 create mode 100644 fuzz/corpora/asn1/26bf81fdf323dc8d8038a5ed7ceea72546cc61e4 create mode 100644 fuzz/corpora/asn1/26c2aa1b49d468c2352b36b8ca13ec06fc1ed08e create mode 100644 fuzz/corpora/asn1/26dc233cd6abed35b4166b30801c6a34e1f1db4a create mode 100644 fuzz/corpora/asn1/26dde550735c15b6b9c0f4a59fc53b384dc033b1 create mode 100644 fuzz/corpora/asn1/26e6c6bcac17d0963d85dea3b8a7f9265ccb297b create mode 100644 fuzz/corpora/asn1/272b709ef4eff5f605e84d87ddad96481e3590cb create mode 100644 fuzz/corpora/asn1/2758ef61c859ea74928470013086baecbcced165 create mode 100644 fuzz/corpora/asn1/277295a6736ba3c178e52c676346e30b9aa766f8 create mode 100644 fuzz/corpora/asn1/27e82627ef37ead3228bdf0369f4918f8b5676c7 create mode 100644 fuzz/corpora/asn1/27faea5ffab710b1757290dd7fc5e8b6a23c252b create mode 100644 fuzz/corpora/asn1/2809f305beb60fda1336dc7f4def369b8b7d7790 create mode 100644 fuzz/corpora/asn1/28591db3cfb1b2446422436593d65c67ca7d2fb4 create mode 100644 fuzz/corpora/asn1/287b370584ddea92465a1ea9101293c03c2d6690 create mode 100644 fuzz/corpora/asn1/28a742b7698d5e87f6dc1807e46884fc811b9448 create mode 100644 fuzz/corpora/asn1/28bfd0a585c8bc4ba1772b918fe0cfe8a9c6033f create mode 100644 fuzz/corpora/asn1/28dada91ba8a179bdce8fbedfffbd5b0ac11f191 create mode 100644 fuzz/corpora/asn1/2904b4060dc9cfe8ded57f3d8e46a8f078b220d8 create mode 100644 fuzz/corpora/asn1/290d487b910c397029d6912553c032fb1d7d641e create mode 100644 fuzz/corpora/asn1/291440b73ad3d5168ca6153a106ecac958f2e587 create mode 100644 fuzz/corpora/asn1/2955ffc258f362fcc8d59864eaaf359f4996de9a create mode 100644 fuzz/corpora/asn1/2979566edcf721bd7e5ea628ea0ab451ef356a11 create mode 100644 fuzz/corpora/asn1/29a7d4f547973f6fd5f79b539a29d5c87a5a0684 create mode 100644 fuzz/corpora/asn1/29adf4b290d9a628c7f47c53b6b573a7ef5ad460 create mode 100644 fuzz/corpora/asn1/29b983b8b78e0c03d9ad11ded6f539488ee32d97 create mode 100644 fuzz/corpora/asn1/2a087e679f21348c6b29e73375cbb70f740aa370 create mode 100644 fuzz/corpora/asn1/2a3049fc81047204ba942a042cf18eb8f6bde38c create mode 100644 fuzz/corpora/asn1/2a6ce374096b1cff82ce2edc1ac8fdd6ab6a7eca create mode 100644 fuzz/corpora/asn1/2a6f9e9468f4148c988daa0f259948daa880ce61 create mode 100644 fuzz/corpora/asn1/2a705b2690a7c0b876823b6875595dbcb6e65759 create mode 100644 fuzz/corpora/asn1/2a808675f81df3a737de4876aeb708b7c6617715 create mode 100644 fuzz/corpora/asn1/2a925701461b5d1a3ef7cac05bf61a104cd286c0 create mode 100644 fuzz/corpora/asn1/2aad944301a4692367e0a5c95ef6d6d6dce90810 create mode 100644 fuzz/corpora/asn1/2acf5c5c525cccf2d18bb565f9ce6e0c8a6e43a1 create mode 100644 fuzz/corpora/asn1/2b042db4f611b6d0d581fb19350bcd3bb5b53d4f create mode 100644 fuzz/corpora/asn1/2b5bdcbf1810066fcc04831b9b60365150e5340c create mode 100644 fuzz/corpora/asn1/2b71329122893cb83d91d5eb82fca5935309d3fa create mode 100644 fuzz/corpora/asn1/2b813a7a2a4572c5b9786fd303ff771e86ba6dbb create mode 100644 fuzz/corpora/asn1/2bd82ee7001f42a1cce96a1817562fa24e76967d create mode 100644 fuzz/corpora/asn1/2bed3227835c201f4ff172a335d604f00fa94d5e create mode 100644 fuzz/corpora/asn1/2c07a1d44d79579bba47da2114e7ba53bc20e474 create mode 100644 fuzz/corpora/asn1/2c20f2fc0264bf9a4cb3bcfd97c62ffbc56f5dab create mode 100644 fuzz/corpora/asn1/2c4d31d8388754ff817f8af18ac490a35984319e create mode 100644 fuzz/corpora/asn1/2c5df96551bce8cc63c86131f067f5b4d96d5ea5 create mode 100644 fuzz/corpora/asn1/2c5fb3bc9b52e6228bbaf33b8875cdd318141b4c create mode 100644 fuzz/corpora/asn1/2c6de96fc3c699fd818578a87c09dbf2feba4911 create mode 100644 fuzz/corpora/asn1/2c8998288ea0ad8ee98c040fd9fba95bfd7b5298 create mode 100644 fuzz/corpora/asn1/2c8c455beed4fe9b467d5ced9f26a26149c42972 create mode 100644 fuzz/corpora/asn1/2c978a33804e876133d1a4f446005d6ab63b3338 create mode 100644 fuzz/corpora/asn1/2cbd0d327849bf6ae52d293e2eb135ca8a0f0698 create mode 100644 fuzz/corpora/asn1/2ccff942b89744187dc333ffbcea254f39f30170 create mode 100644 fuzz/corpora/asn1/2cd07c558fade80cc0af3d5f700a8a17be6e66de create mode 100644 fuzz/corpora/asn1/2cd33a0e4f2d487efc38a5ea2e906d988865c645 create mode 100644 fuzz/corpora/asn1/2cd3a1f6f5f21e49974c8b38aee1371a34d85ba5 create mode 100644 fuzz/corpora/asn1/2cdd45847ef6403749cd7d5d0c60818689b77b7c create mode 100644 fuzz/corpora/asn1/2d2a4041931df15db0ca2c1795ceac27d7a2211b create mode 100644 fuzz/corpora/asn1/2d85e4438afaf6704a4d42484c5834647bb3f0a7 create mode 100644 fuzz/corpora/asn1/2dc8fc48dc11424a8c16192b573a6ad4fb6d968d create mode 100644 fuzz/corpora/asn1/2dd5834595e527e5a8e3de7f72692bde2fb3b6b7 create mode 100644 fuzz/corpora/asn1/2ded79ddbfac5a5529467365dba779b65a01edf7 create mode 100644 fuzz/corpora/asn1/2e0b67b26fe89d25db0bae74331ed98fa4d7daf4 create mode 100644 fuzz/corpora/asn1/2e13c61d4a539bfceb391ad3eed8a6f43eee4808 create mode 100644 fuzz/corpora/asn1/2e4c77b23828b0bb68ca6ba09c4233f4bc8429f4 create mode 100644 fuzz/corpora/asn1/2e5140d77e2e6508312d4ba2f3c0adfeddaf2b15 create mode 100644 fuzz/corpora/asn1/2e9c4b405b6f12b4207b8526596b00ac0ba1dd42 create mode 100644 fuzz/corpora/asn1/2ea043b6f22764e8b92e7fc9e0b0a6d1a385e563 create mode 100644 fuzz/corpora/asn1/2ea6bf9a9952ed38b0067283215d07b443417f28 create mode 100644 fuzz/corpora/asn1/2ed68656fe73cb5b911923dd0cca0eb005032a89 create mode 100644 fuzz/corpora/asn1/2f01f4f0dc8fbab0239b5e321ca745b3a5007d95 create mode 100644 fuzz/corpora/asn1/2f1de06fbbf31c1ab4745623dee9ec0dfd4d22f5 create mode 100644 fuzz/corpora/asn1/2f301f762b6f68090116feb97bddfe0cc57f71ae create mode 100644 fuzz/corpora/asn1/2f31daed8292576a96b4666ef93cf89253abf8b0 create mode 100644 fuzz/corpora/asn1/2f408174cb85d11980607b057aa9916a636cdc30 create mode 100644 fuzz/corpora/asn1/2f5c0012f91464f90b76fa8798f766916235e207 create mode 100644 fuzz/corpora/asn1/2fcc0eb6596b3430ab4b77686a88193bbd41893a create mode 100644 fuzz/corpora/asn1/2fea43900f78af051e36e0a098b51628f08fb120 create mode 100644 fuzz/corpora/asn1/2ff5d03d83e33b511730747155c1692095904804 create mode 100644 fuzz/corpora/asn1/30045cc30e35c662c4fefe29e1bae817698ff47e create mode 100644 fuzz/corpora/asn1/301e1aa30823fe4f988f09d1990ad0f687c5b031 create mode 100644 fuzz/corpora/asn1/3030dbf2cd56e80ac3d2e493f6b77bde97158bb2 create mode 100644 fuzz/corpora/asn1/303e1822e21cc1d50e0d6f713914405c272f937d create mode 100644 fuzz/corpora/asn1/304c1c6aa4504fdc0f7cd72ac67bc70f56ec1a9c create mode 100644 fuzz/corpora/asn1/304e2d25de86d05c009c4b285910fb44d287272a create mode 100644 fuzz/corpora/asn1/3057e3010e137e2efd2732f533332e06ba9bd7a3 create mode 100644 fuzz/corpora/asn1/30776425dc18ff195a46fa0883e2794186f81e48 create mode 100644 fuzz/corpora/asn1/307d45d65ee1e8cfac9ce73580ff5b4d108e9ba9 create mode 100644 fuzz/corpora/asn1/30819f975fcd0b5c6d424d00b1363905aa34b2d5 create mode 100644 fuzz/corpora/asn1/308aab56f731e1f5a9680112d314cba9bfe7bc3f create mode 100644 fuzz/corpora/asn1/309306e315adaef79cea586449434a757d406f73 create mode 100644 fuzz/corpora/asn1/30b18e3b89698444ccccab7a5f2b5c3d7f16163d create mode 100644 fuzz/corpora/asn1/30c34574bdf3dff648c0fd1bd09146058ba442dd create mode 100644 fuzz/corpora/asn1/30d5f44d0e7029f0e18347a4b35926472dc8007f create mode 100644 fuzz/corpora/asn1/30ee04f84459cbb26d94580188ac21c657bf1b8f create mode 100644 fuzz/corpora/asn1/31122376bab259a103e57c350cf897be9215142f create mode 100644 fuzz/corpora/asn1/311f8377ba6f579cb1462227fc384b915f256c04 create mode 100644 fuzz/corpora/asn1/312c4f6f01067ce4b1cf877693a82880ed3cffb7 create mode 100644 fuzz/corpora/asn1/3159f4130d588910029baca55fd3100a96e041ea create mode 100644 fuzz/corpora/asn1/315a08c689814a50892ccf14e03bdd233d5ab779 create mode 100644 fuzz/corpora/asn1/31a05a612378bef25602920b419c819c1005731e create mode 100644 fuzz/corpora/asn1/31cf20cfa7f09349c38b1b80cc1d27157453cd5a create mode 100644 fuzz/corpora/asn1/31cf878bc7b25d566763e35c9f7bccefdf05786f create mode 100644 fuzz/corpora/asn1/3202161347df2eacf38dfb5e2b447b80cb3a9a7c create mode 100644 fuzz/corpora/asn1/32196d0f22fcc6cfbe5d40e5f9f9e600ff0855eb create mode 100644 fuzz/corpora/asn1/321f083beb2b7b058012021332799648eba6d3ff create mode 100644 fuzz/corpora/asn1/323879f60bf9cc1b6c7b5f60140a66c267cc729a create mode 100644 fuzz/corpora/asn1/327b71d1dfc4d5308851f01b89204c6a6394c3b2 create mode 100644 fuzz/corpora/asn1/3297e8e44366bc07e7943701d4c0a0380f5e8634 create mode 100644 fuzz/corpora/asn1/32df5cd9133be7757e50e8a26168fdfe668fae83 create mode 100644 fuzz/corpora/asn1/32eea0ff97439dbe0c49bf814b5e9aeae5000614 create mode 100644 fuzz/corpora/asn1/331a3ee3d8d1c3eedb708f4c7cb4824091f41aba create mode 100644 fuzz/corpora/asn1/3329748472e6ff0230996b5ee1133611f39a4840 create mode 100644 fuzz/corpora/asn1/3343a8fb2ce998741b492b4cb5075e9979a1046d create mode 100644 fuzz/corpora/asn1/334f6bf322de2bf18d1829d9233bf3bd95256d8b create mode 100644 fuzz/corpora/asn1/3385866fb63a8df113a4bae496e1c8a95839f19f create mode 100644 fuzz/corpora/asn1/3396fad82e262e0139037a9f557077ad8aadbd23 create mode 100644 fuzz/corpora/asn1/33d60aa9ddd6f1eac0b689e7f7110ea9aac6f037 create mode 100644 fuzz/corpora/asn1/33dc227f6f4cda9f8bba04869e2cf2b64871f7bf create mode 100644 fuzz/corpora/asn1/3423e1aec437a7412bc9795481af8cc57aff0833 create mode 100644 fuzz/corpora/asn1/343821b6c97e66a7dfb214971bca515bd0e11c2c create mode 100644 fuzz/corpora/asn1/349e9765e7c30d32d53200f50762148e38073bd9 create mode 100644 fuzz/corpora/asn1/34b53ed7e08a5f423943dd5c6a281582e1647975 create mode 100644 fuzz/corpora/asn1/34dad8b56d1dae34e5269e5b2f99f89d54ec5b0f create mode 100644 fuzz/corpora/asn1/34dc56c09a175ca7542d5cd641ef8f8d55082f76 create mode 100644 fuzz/corpora/asn1/35008a66598c79770786d34f69c8b4059daede62 create mode 100644 fuzz/corpora/asn1/3505ad3537bd59ca3dbd41485d1c471cf14145d2 create mode 100644 fuzz/corpora/asn1/353ae97b214b32cf4373643746294fd81263d606 create mode 100644 fuzz/corpora/asn1/356de948eea3e5677ffe6d9b7a0919530d505006 create mode 100644 fuzz/corpora/asn1/357397855fc8a35f7807b5f636c1ff55d09e2d76 create mode 100644 fuzz/corpora/asn1/358d5e99ecbe6617575b32cd3bb0d1d94e63076b create mode 100644 fuzz/corpora/asn1/35bde96e40857a3138a0e127177e1f2809e2cd2e create mode 100644 fuzz/corpora/asn1/35becf2c6b730577e0bd43e3c38212d0a175631d create mode 100644 fuzz/corpora/asn1/360a267327aedfdb3e3b4f8aa96d92522bd21d41 create mode 100644 fuzz/corpora/asn1/364df9c7841b83867e4b7ec99e1dd66e186b7e90 create mode 100644 fuzz/corpora/asn1/367f1c5267baeef57a9608715658db3fb5952956 create mode 100644 fuzz/corpora/asn1/36b97a07569b075272078333856ab16318650420 create mode 100644 fuzz/corpora/asn1/36bbd62b21a2f8ccd44382906607759e493d084c create mode 100644 fuzz/corpora/asn1/36ecc13d76d2241712b936703934b21c057f07d8 create mode 100644 fuzz/corpora/asn1/370ea8ff5de671a861e83aa6da74ec934fa3c411 create mode 100644 fuzz/corpora/asn1/37322dea9177afca7583b1b09e26fd8436a43e64 create mode 100644 fuzz/corpora/asn1/3740c72db1024d24f1be884a77a6cf3645589e56 create mode 100644 fuzz/corpora/asn1/37473541c3f65a71657c41ab4183999bc16cce72 create mode 100644 fuzz/corpora/asn1/375acebf9e3a5f7c57660d290971eb365217ea8d create mode 100644 fuzz/corpora/asn1/375e589d64f26adecb28fe5628d8135c1166ef98 create mode 100644 fuzz/corpora/asn1/3772a649d73808b3e9d58f03f636ef2480818851 create mode 100644 fuzz/corpora/asn1/377cc7cf7d8fec19478e57b2bf3ff48dcc2902fb create mode 100644 fuzz/corpora/asn1/37a48df4fbc82bf51782b23570302642a0a86537 create mode 100644 fuzz/corpora/asn1/37ac9cb4fd2b8206e9cf3a68fde05b0ad734f814 create mode 100644 fuzz/corpora/asn1/37c4e41ceec5690a27c7ca7ce26ca767c1155405 create mode 100644 fuzz/corpora/asn1/37d5f57f8844183619d665f2b7915883e48caf60 create mode 100644 fuzz/corpora/asn1/37d6caf49e8a5b825bb7aa0f91d5fdbbebf13684 create mode 100644 fuzz/corpora/asn1/385b8e83afbaba4a7c33df4c686b9a6aa031d593 create mode 100644 fuzz/corpora/asn1/385ddccf51a7e7abb5da4db1870a8e1ac9dfb0ce create mode 100644 fuzz/corpora/asn1/3863c4e64d0847779cdb06d0891d6277e4e0ab37 create mode 100644 fuzz/corpora/asn1/3886ecc8c2ed78f30576dae9a464e1ce888938da create mode 100644 fuzz/corpora/asn1/388e37cb1da6282ec2c5372d5c1a218e95463458 create mode 100644 fuzz/corpora/asn1/39035eb51e6ff44ba6afe0dcd679b8628b5429c7 create mode 100644 fuzz/corpora/asn1/395121177c23779793b9d1c1b1629570a840646b create mode 100644 fuzz/corpora/asn1/39bc8fede7ce746d14e7e7f1a5c009a0737a7458 create mode 100644 fuzz/corpora/asn1/3a03dcc8e6b187541cca648672755c404d6e9838 create mode 100644 fuzz/corpora/asn1/3a1c0403dd4e75be6b64c4b36b611d5d40d9d44f create mode 100644 fuzz/corpora/asn1/3a276f4374ac887ef501961ee4132c8aeb336438 create mode 100644 fuzz/corpora/asn1/3a3e6e388c2c423df62a9114d2b2e7ca865f029c create mode 100644 fuzz/corpora/asn1/3a48f8d09fb0dcb3d17283abd68a36f68476516e create mode 100644 fuzz/corpora/asn1/3a770918ce293110aac21d012a14f56af987f6e5 create mode 100644 fuzz/corpora/asn1/3a7ea04c563095ec272bddba9aea0c64333bb133 create mode 100644 fuzz/corpora/asn1/3ad476ae6fdbaedf379337aab1b266621eacf89f create mode 100644 fuzz/corpora/asn1/3af8591b99c94f6f628d91f8e465740e676f6b18 create mode 100644 fuzz/corpora/asn1/3b27246d566a971871379a1272b58a26506e7f02 create mode 100644 fuzz/corpora/asn1/3b2dcb5dad7ea730b5be2ce5dddc59be1e4aaee0 create mode 100644 fuzz/corpora/asn1/3b822b481fdce8bf311fe51b36067b795bb3aab2 create mode 100644 fuzz/corpora/asn1/3b95bfea3486f7358207776f032e3cba4c78753c create mode 100644 fuzz/corpora/asn1/3b9aacf99e6417925a796b0c8bf7b8069c837cdf create mode 100644 fuzz/corpora/asn1/3bb8e68e173032187571e01e69b4a61af3217e57 create mode 100644 fuzz/corpora/asn1/3be357290504021859fcb4448275e1bc748547e5 create mode 100644 fuzz/corpora/asn1/3be7128d8b9707c6192012c1fd130d76517b44e1 create mode 100644 fuzz/corpora/asn1/3bfd4bd79255dc34670bbca7fc2f5894e865a123 create mode 100644 fuzz/corpora/asn1/3c1c584ff902329cc4b5df9482a592990c02ea14 create mode 100644 fuzz/corpora/asn1/3c3f6ebcb6dfdfc583de052ebc5696104efa4f87 create mode 100644 fuzz/corpora/asn1/3c5c2d6635ee980251eafeed96fbd175cdf41802 create mode 100644 fuzz/corpora/asn1/3c6d30d25afd25cfd0a16d6b5efc65d9ef4a6a94 create mode 100644 fuzz/corpora/asn1/3c95e19f669da7130f798c4e73384746d2ca8cd4 create mode 100644 fuzz/corpora/asn1/3c96b57a19b0f6fa963ab1e3b344ada778f28720 create mode 100644 fuzz/corpora/asn1/3ca56c46550315632b155e48d3bf81c8a70f1fe9 create mode 100644 fuzz/corpora/asn1/3ccc02ce0bcaf1384855ace72a7b1e75a149b44d create mode 100644 fuzz/corpora/asn1/3cd7d8e40f646f2fe3b5aa50ffa188f5a1f95d2c create mode 100644 fuzz/corpora/asn1/3cda33c4903c82ea106347170e27dd3f68ee19c8 create mode 100644 fuzz/corpora/asn1/3cdcd21d22933467b05a3257aac72e49092ecb3b create mode 100644 fuzz/corpora/asn1/3ce2191ffaa8baee35351674f55e67dbd4e0eb26 create mode 100644 fuzz/corpora/asn1/3cfca2b16bd5b2c67dce1718c517dc6906a355f3 create mode 100644 fuzz/corpora/asn1/3d0342cc18d757db3ce0fa5cce15e1cc5e800a7d create mode 100644 fuzz/corpora/asn1/3d13fe6aaa42fbe75a21c934ef7b314887f7487a create mode 100644 fuzz/corpora/asn1/3d5fd43087505460ebccbb142000ec0ff11e1089 create mode 100644 fuzz/corpora/asn1/3d640c74446105731bb6d77d0be623cec70c85a1 create mode 100644 fuzz/corpora/asn1/3d7cfacbc8f4ad7d10684af52683f1059356ac73 create mode 100644 fuzz/corpora/asn1/3d8e02da12ee820ccf0267b10842a6c9d51fddee create mode 100644 fuzz/corpora/asn1/3e1db2900b689a1153916d58071d6e3073f85fcd create mode 100644 fuzz/corpora/asn1/3e470b916edf0b6f5f03b85592b19a084a67f4f2 create mode 100644 fuzz/corpora/asn1/3e4f268bb4cd015f29bb76c61ab1de738a8606c6 create mode 100644 fuzz/corpora/asn1/3e5e3c4da2c0d845b8d883384bdebd3ec8138152 create mode 100644 fuzz/corpora/asn1/3e7a624b38e2a57b544ea59e6d04e4803a204a51 create mode 100644 fuzz/corpora/asn1/3e847467baadcfce3de93e362ef11ef2534e4e10 create mode 100644 fuzz/corpora/asn1/3e9c6d0568cf9ab2e0d7b9979767fd7a896ce0a3 create mode 100644 fuzz/corpora/asn1/3ea06f2bfab9a2b825b59e63eb88dccbb06ad993 create mode 100644 fuzz/corpora/asn1/3ea4d47d5d31ac515af3512b28fe5a0ae76d4261 create mode 100644 fuzz/corpora/asn1/3eab16f697c5e0456056ec03d882b838c4724f31 create mode 100644 fuzz/corpora/asn1/3ebdcbf3757dfbff469f390ffdfa7b982ed5f6e0 create mode 100644 fuzz/corpora/asn1/3ebfbf255de6265b4d8f416baa03fffebef348a9 create mode 100644 fuzz/corpora/asn1/3ec5f12fda420c2b8779748f675e288b95f3d846 create mode 100644 fuzz/corpora/asn1/3ed53739885f311d21b2100f6bce6b631eab88af create mode 100644 fuzz/corpora/asn1/3f0497384a4fa3ac5c74079b596c6db3edc9149a create mode 100644 fuzz/corpora/asn1/3f0daeed759349f8690c052c38e28cba04f5bb2f create mode 100644 fuzz/corpora/asn1/3f1812478073eb2ab38d3f350231bcd1353d6603 create mode 100644 fuzz/corpora/asn1/3f3f65b789e4ce109b8b35194dbc7dcbb6973298 create mode 100644 fuzz/corpora/asn1/3f8b2c71002da767dc86c975defb88d2e32ec4be create mode 100644 fuzz/corpora/asn1/3f92258eddb56284aa528ee577a15552c5665052 create mode 100644 fuzz/corpora/asn1/3f9acfc306ef4e3476c07b5824992d5cb986ef39 create mode 100644 fuzz/corpora/asn1/3fde4e6a369556f8cec9b6910c33797ea23d7976 create mode 100644 fuzz/corpora/asn1/3ff04a4f80c79c824e81f27408aea71518f678b3 create mode 100644 fuzz/corpora/asn1/3ff351569716af04e646381a56802df11ad83be4 create mode 100644 fuzz/corpora/asn1/3ff8705c76c9bed9945839da8f6d7af4eb62a63a create mode 100644 fuzz/corpora/asn1/413637d6b8315491111dea4c11c0e6a22f01e182 create mode 100644 fuzz/corpora/asn1/4170c6bf0d0ffd45e35f9fa370f0645cf8b0af8e create mode 100644 fuzz/corpora/asn1/41a7bc878381d7ec34bdc1b8519d60d3aee2acbe create mode 100644 fuzz/corpora/asn1/41ade513c72734ed084eeb3863cadbfe772f16a6 create mode 100644 fuzz/corpora/asn1/41b6a47b5ff67dad13978ee102f60324ab636abc create mode 100644 fuzz/corpora/asn1/41ce134ae926b73205017000283f8123877ea0c4 create mode 100644 fuzz/corpora/asn1/41ebc6aecef491b8721192164f90d0e7b407ee08 create mode 100644 fuzz/corpora/asn1/420609fb56277d50a7370817b56d351e9b682573 create mode 100644 fuzz/corpora/asn1/4226dce80de548950f0319282a59fb9f7bec20f6 create mode 100644 fuzz/corpora/asn1/424f6d879735ee72eb1ca882787c4b856f878831 create mode 100644 fuzz/corpora/asn1/425eaba3f83d942250a074cfada7dd7032791dc0 create mode 100644 fuzz/corpora/asn1/42e34c2136df30c4ef1e0bca4be8c670dd5514f2 create mode 100644 fuzz/corpora/asn1/42f7620677c12687fe64a520f13d3728dc61ced3 create mode 100644 fuzz/corpora/asn1/432031962dffc733b7e1755416c2876992d0e2b1 create mode 100644 fuzz/corpora/asn1/433383591e6f84cc3081850e7433287d962c4365 create mode 100644 fuzz/corpora/asn1/4345cc88eec132aa3259f725a58d8d8cd2a66d93 create mode 100644 fuzz/corpora/asn1/434bb3d640ee582d75ba822f1920ed6ccdc9544e create mode 100644 fuzz/corpora/asn1/4354a6004da25a6bccca6dccedc69c73cc3bde56 create mode 100644 fuzz/corpora/asn1/4380f3efe0c419fb55126ca43adc05a900d74443 create mode 100644 fuzz/corpora/asn1/4385ea6132bc53a903c8adc01d89843e0762edba create mode 100644 fuzz/corpora/asn1/438843934d3b7bbaaf56bca5c12e1a196d6d2746 create mode 100644 fuzz/corpora/asn1/439bff691fe3142e5bdd71dfff1e522e4c02a3b9 create mode 100644 fuzz/corpora/asn1/43b0e961ca40f3d431fd2a772a8d0929bd133f60 create mode 100644 fuzz/corpora/asn1/43ce68d21ccd3ad3a0f89c8778fa8b53e8aeb4d5 create mode 100644 fuzz/corpora/asn1/4404b51c57ccc46d5e009c7419af6502eae0ec35 create mode 100644 fuzz/corpora/asn1/445363e893e7fc1ba04049e78405f362154ee52b create mode 100644 fuzz/corpora/asn1/4494bf1805adb52086a7c4a6a234495a3f6665fb create mode 100644 fuzz/corpora/asn1/44b658f993bf4453dd518c598c9cd0a472083877 create mode 100644 fuzz/corpora/asn1/44c3075d23fb536d64d7d192b90173d30fa8cc41 create mode 100644 fuzz/corpora/asn1/44f7c8dbf5441eea10877f03f256a6c6f4efa536 create mode 100644 fuzz/corpora/asn1/44fe976bbb429dd68cd1a2f71023b117236e8683 create mode 100644 fuzz/corpora/asn1/452bfc9a3c955e1a37d3695e9f7bb2d72ff89a93 create mode 100644 fuzz/corpora/asn1/4562af05e0407ff5c3b4109532aefc6e73abd646 create mode 100644 fuzz/corpora/asn1/457d9d6573b1740cf516676c44114ce2ff1dc9c7 create mode 100644 fuzz/corpora/asn1/459c71b6d06687940822aa8d77f1267bc28d80c2 create mode 100644 fuzz/corpora/asn1/459dff6bb7f3718d1ab085eeb20ebfe116aeba24 create mode 100644 fuzz/corpora/asn1/45d93ef15bca5d02a8e7c1e52c896055bd3944b0 create mode 100644 fuzz/corpora/asn1/461cfa2553caeb6e7b8264a36a7b80f05bfdfd6d create mode 100644 fuzz/corpora/asn1/462a8cec3992cfbed9e5ae2e989da87e79f01466 create mode 100644 fuzz/corpora/asn1/462e126aed7edec333f795a5114aa113aae56d5f create mode 100644 fuzz/corpora/asn1/4632a28b720502ba98b332f9f4b05b5ac808be23 create mode 100644 fuzz/corpora/asn1/46496033d92674298405f072f1672c733cd3c649 create mode 100644 fuzz/corpora/asn1/466c861b233832de945e2b45c5e787fb13831140 create mode 100644 fuzz/corpora/asn1/4673fd268a88c1449d447cc06e97aae9b906d46c create mode 100644 fuzz/corpora/asn1/46a5cab511b443cbb8b29c1c2614ca68029811aa create mode 100644 fuzz/corpora/asn1/46a7a937e909eff2bd197a8f5a5cb78cb791830d create mode 100644 fuzz/corpora/asn1/46ca2431fa302be8e152cdf54574707e8fbeba2b create mode 100644 fuzz/corpora/asn1/46dd9ea31027498131da1bafcb9adf510d750cb8 create mode 100644 fuzz/corpora/asn1/46e25623c54478356b306beec44ca3bb4f929547 create mode 100644 fuzz/corpora/asn1/46fac7ddcedb88de753917c262a3faf598491468 create mode 100644 fuzz/corpora/asn1/47130880a5578410b4f1448c30494fb1bc67bb7e create mode 100644 fuzz/corpora/asn1/4755a6c230fe56ef646d06056a7a69590f89813a create mode 100644 fuzz/corpora/asn1/477957258202afb52e6a48f9e5df2fc09b505908 create mode 100644 fuzz/corpora/asn1/477f80f5c51beafc1affc60bcf404636b73a9aea create mode 100644 fuzz/corpora/asn1/479f29b0b3031d2a5decdb19468143ff8a8c8afc create mode 100644 fuzz/corpora/asn1/47bccd90b7a6ec227a58d9b926f0aa6afeea4901 create mode 100644 fuzz/corpora/asn1/47d5b967686001cb2f1816f29bed26d7e6b1d062 create mode 100644 fuzz/corpora/asn1/480cbd97db3a1a53b05466e39989164536d0d334 create mode 100644 fuzz/corpora/asn1/483a661e760fbc78aedc9d9eeba039189f83cce7 create mode 100644 fuzz/corpora/asn1/483bfb8dd102e5cf3c089105da1cc9a7ad995bbd create mode 100644 fuzz/corpora/asn1/4840e554ee461b815950a235c57337851c0317a6 create mode 100644 fuzz/corpora/asn1/4889f84070be9b33ec22a4deddf40822b2720dec create mode 100644 fuzz/corpora/asn1/48903e8712d816af200bda59d6e2eac7a19e80af create mode 100644 fuzz/corpora/asn1/489e3cf205cbee8aa41e3d91f58ac9f9e50d5355 create mode 100644 fuzz/corpora/asn1/48ac54c89fab401ee853c1c7d9da19ae28320c94 create mode 100644 fuzz/corpora/asn1/48caa3f843f61b3a3d3dffee60e14b58dcef3202 create mode 100644 fuzz/corpora/asn1/48d9dfc992d3ae22a6a453caa16573502ffa3f3b create mode 100644 fuzz/corpora/asn1/48dd6615aac8ce4a9cf5e25d0eb2c468c3ae4272 create mode 100644 fuzz/corpora/asn1/48e6b403656ecafc725a9eeaeb3cb1459a353ecb create mode 100644 fuzz/corpora/asn1/48ea5da84385e416be10c2c402ae54b4ff6019f8 create mode 100644 fuzz/corpora/asn1/494c31d01525bcc00c164e62f2cd1cf3f7f9f926 create mode 100644 fuzz/corpora/asn1/49a85d97471f92f2a936ffcfa71d81973b3d3bbe create mode 100644 fuzz/corpora/asn1/49fa54473cb92b8ed2564ec319db6fec71cc0f3a create mode 100644 fuzz/corpora/asn1/4a1155eac64213c0e2df4714537f5f38266bc14b create mode 100644 fuzz/corpora/asn1/4a18b235b0650a5d645af2e9ec8c76bfd4de238e create mode 100644 fuzz/corpora/asn1/4a22b1cdffec252e8d74192f1a920da860e7eb30 create mode 100644 fuzz/corpora/asn1/4a417844ac3c79c434a3b65ee5bb8c53c5be94f1 create mode 100644 fuzz/corpora/asn1/4a60acc5cbd81505c0d2373aa2733f5933c2c41a create mode 100644 fuzz/corpora/asn1/4a8ceee541f975dfb9324c616b522066d181bba3 create mode 100644 fuzz/corpora/asn1/4aa3d5d01aa41ee9728aace9399d253d100d4892 create mode 100644 fuzz/corpora/asn1/4ac701563781f3253d97837bcc8bcfefc82c06bb create mode 100644 fuzz/corpora/asn1/4b3bf885507e49d4b17436169fbe91f02bd18b70 create mode 100644 fuzz/corpora/asn1/4b580b133c463d32da6bed571bfd91f2e92b9e77 create mode 100644 fuzz/corpora/asn1/4b638738d7c954bc3b5a014df64d4668ba481ccb create mode 100644 fuzz/corpora/asn1/4b85f78f7caef2e790d05b40328a3dad62c111d0 create mode 100644 fuzz/corpora/asn1/4b8d3b48a24166dd709f60e6673b178c1ea387e9 create mode 100644 fuzz/corpora/asn1/4b8f23156fe4097208340d9cf2ec08183f25eb8b create mode 100644 fuzz/corpora/asn1/4bbca5e606c539b95e45c275db2e314f5f4ee0bb create mode 100644 fuzz/corpora/asn1/4bc7b78f374cd1d0725abf2c73231d14b712c376 create mode 100644 fuzz/corpora/asn1/4bcbed4f64eef7ddaf16d8e2dc8b7009b74e3642 create mode 100644 fuzz/corpora/asn1/4bd350a66f06ded41fd9b7ed6c310103b3bc9611 create mode 100644 fuzz/corpora/asn1/4bf3706a127e7878695d692dabeaad9a35a28d1d create mode 100644 fuzz/corpora/asn1/4c201bd2e5ece123cec86a6a96feeabc3278b415 create mode 100644 fuzz/corpora/asn1/4c36114cda22188b48f8925eea0b43d695464abf create mode 100644 fuzz/corpora/asn1/4c3f8403b2af4cc84f1259c257f47715aedda266 create mode 100644 fuzz/corpora/asn1/4c422c1396846e248d1cbaf65e5afb2e5eeced5e create mode 100644 fuzz/corpora/asn1/4c42a6d725476c967f3a83c89ba029542c0a8dab create mode 100644 fuzz/corpora/asn1/4c541d82d8b8094947ea55431130e953a8e189a7 create mode 100644 fuzz/corpora/asn1/4ca187b19773cdb643318f69a175135b2d5498e7 create mode 100644 fuzz/corpora/asn1/4cb0c5e147bac2d4ff908054598e5f46072bd646 create mode 100644 fuzz/corpora/asn1/4cbc8c7df0d12c4567926fe8ac524d42531644e9 create mode 100644 fuzz/corpora/asn1/4cded7dbfab1a1178d7014195de62c6781222789 create mode 100644 fuzz/corpora/asn1/4d0c6d2d6f71f267e45b9237a3e490be8139956a create mode 100644 fuzz/corpora/asn1/4d14bb2cda358ff780e587f7845b94d0db56d10a create mode 100644 fuzz/corpora/asn1/4d325f145c34b30c1478a38efd5a4fba516aeeb3 create mode 100644 fuzz/corpora/asn1/4d4cc40ff93c2c61d377a67874e0cf42e9391758 create mode 100644 fuzz/corpora/asn1/4dc1f0cf91a2035cac54c96103269d2fa4f92fd6 create mode 100644 fuzz/corpora/asn1/4df051ca3d4fe58ce745b5bec0c7b016d113de25 create mode 100644 fuzz/corpora/asn1/4e07f30820044aa2511dbd4f7e1d0ce9a098c543 create mode 100644 fuzz/corpora/asn1/4e098a66fbe959b4627476aab0b202f80cb73f0d create mode 100644 fuzz/corpora/asn1/4e213753ee8f9812a0cbb81ff58a3c17ef6fea94 create mode 100644 fuzz/corpora/asn1/4e22436534f7ddda6023610945ad3fb84b08d5f2 create mode 100644 fuzz/corpora/asn1/4e34d43e845bed3ff19f74a43a8804ac2b68e2a8 create mode 100644 fuzz/corpora/asn1/4e446ad7e733f0209eefc2e543ff58b58a029ebf create mode 100644 fuzz/corpora/asn1/4e71e2bf54fc1c112168eacff240b3a417786da1 create mode 100644 fuzz/corpora/asn1/4ea029c3039200f7b0cc415fe97d66819cd56557 create mode 100644 fuzz/corpora/asn1/4ea61268ae736bebabdc87890e437e801b63e24a create mode 100644 fuzz/corpora/asn1/4ed9c35bfedcfee05c911a9d30ca2a1a96216b15 create mode 100644 fuzz/corpora/asn1/4ee066c4aae99e129460a4baad1475e3da91a121 create mode 100644 fuzz/corpora/asn1/4ee15e84efee7a1e0c566ed5babd3f88f46be948 create mode 100644 fuzz/corpora/asn1/4f65e71775b209ef8b3b035a32a2ba7e5449f8fb create mode 100644 fuzz/corpora/asn1/4f86dd17d08911e28e47bff04685c83e1fb2782a create mode 100644 fuzz/corpora/asn1/4fb2688469580df43a17a5702ac9fe1637138709 create mode 100644 fuzz/corpora/asn1/500044a494307a25c7c851e5a1b2eeae001830d0 create mode 100644 fuzz/corpora/asn1/501b499ccb31530d7f9c9fd1d2250b0b735c83ce create mode 100644 fuzz/corpora/asn1/504e021f251101c9772a5c79c51c0a6343501176 create mode 100644 fuzz/corpora/asn1/505c2e6975f75fa9ce973d858dd1b6cba40b5422 create mode 100644 fuzz/corpora/asn1/5094e34cb2a033ae34a01db474241eb2a98d478d create mode 100644 fuzz/corpora/asn1/50be54adbc3f691c351c82e9363b8b9c7b788640 create mode 100644 fuzz/corpora/asn1/50bffaed4200a28020f8f3a9e0a357884b4f45b1 create mode 100644 fuzz/corpora/asn1/50ee6affc53f9c4d9c7cf65e384ceda593273777 create mode 100644 fuzz/corpora/asn1/50f8dc2527103118442044db5e16c65711aaf713 create mode 100644 fuzz/corpora/asn1/511687be8ac48f1cb468ddaff39167ba50e98aaa create mode 100644 fuzz/corpora/asn1/515f82c7eb64c036ad3ea97cb6893592f592102b create mode 100644 fuzz/corpora/asn1/5166efed7a00f41740f5c5ce949186ca9525fb5e create mode 100644 fuzz/corpora/asn1/51885bd5f4e4b75250be652da8f1cbc42b451624 create mode 100644 fuzz/corpora/asn1/51b6305c916f51ae5ec46214d47870fa2c43a768 create mode 100644 fuzz/corpora/asn1/51c934cd6f11f57bffb98e632fced14deb37088a create mode 100644 fuzz/corpora/asn1/5238a69b1f977a6cd6b32c3f01d3aa9ed30dd224 create mode 100644 fuzz/corpora/asn1/5243bcc65abd73e0d68e31795b624e3a116bbfca create mode 100644 fuzz/corpora/asn1/526a0525c31ad5f8d0335371d2e777bf3a0c7f89 create mode 100644 fuzz/corpora/asn1/52aa363313fc75fe9350f89ce70c26197029d323 create mode 100644 fuzz/corpora/asn1/52ac5dadd5f779c50ccf51f59e2af961bf6079d0 create mode 100644 fuzz/corpora/asn1/52d48e60b13e1c74d7c006b229d3499a5d5b269f create mode 100644 fuzz/corpora/asn1/533309e8cd26532c7250372a0f809570f13e5ce5 create mode 100644 fuzz/corpora/asn1/533c550d20c0978d5dfeafc3b2d5a8c15176c91a create mode 100644 fuzz/corpora/asn1/534483ef2c5502e103ad49e354e255a93030acec create mode 100644 fuzz/corpora/asn1/535e40feca581cfc47ccbc9d7c66597d1a2f8db4 create mode 100644 fuzz/corpora/asn1/536bba078b53ba5df2097cdcd20febbf8ffc2daf create mode 100644 fuzz/corpora/asn1/537b291841128849f1bb70d0da75029ccf3ad67c create mode 100644 fuzz/corpora/asn1/53846b4c31b64311c7a0444ecb28ab52388e7d73 create mode 100644 fuzz/corpora/asn1/53a0c472a08b2c3ce4c77abc1499f9771eb6bc8d create mode 100644 fuzz/corpora/asn1/53bd8ae6bf593f0b019858264c242fe8977bcc4e create mode 100644 fuzz/corpora/asn1/53ea2e73442833d7cfc57b1d250c2db557ba8410 create mode 100644 fuzz/corpora/asn1/5416c6fdd63767d639d3bf6919b019777e6f5399 create mode 100644 fuzz/corpora/asn1/5419ab4d398136ab62c494af4621fd6bd570bf9f create mode 100644 fuzz/corpora/asn1/5430a880389769176b28a54f8dd3a7a65c6be0ab create mode 100644 fuzz/corpora/asn1/543dea5d607a62f9e9bdf57458eb21b8e5008058 create mode 100644 fuzz/corpora/asn1/5483b3891a0b4ebc5fd8ca11fd71d95af4946107 create mode 100644 fuzz/corpora/asn1/548fc6979a821acd8a849d61b276262b5e5efc77 create mode 100644 fuzz/corpora/asn1/54a980f0365f819688866d57ff604e242b5d57e4 create mode 100644 fuzz/corpora/asn1/54b8ef4662b0b652f2b3c56cc9503a8aa029e389 create mode 100644 fuzz/corpora/asn1/54e58510eb46c9112cef56422e5732bf2b280fe6 create mode 100644 fuzz/corpora/asn1/552e135139ce553425dd01fcd5da072ae28c945c create mode 100644 fuzz/corpora/asn1/552ec71d9f7c63fc0e8c76feef3edbe1f3d5bb7f create mode 100644 fuzz/corpora/asn1/554a810ee233352c8b80bfb87f525d65eaf93b69 create mode 100644 fuzz/corpora/asn1/55583654e419a9c98405657c045efbbddf6671a5 create mode 100644 fuzz/corpora/asn1/556fd9d6cbc821fb43a8bc85d5d8ff45ee2b2897 create mode 100644 fuzz/corpora/asn1/5587788035c87507c770a5675879ca78689bb6de create mode 100644 fuzz/corpora/asn1/55a12417cb7eeead63b36b6577cbf3fc9bd1633c create mode 100644 fuzz/corpora/asn1/55c207dffcff0143f73f6fd0526d624bb6283417 create mode 100644 fuzz/corpora/asn1/5604a5399297f425deb9e6ef888f9afab4d3425b create mode 100644 fuzz/corpora/asn1/56257125f7be8441b86bf709042966d4a7e7fbca create mode 100644 fuzz/corpora/asn1/56541cb263269e274c6e691f6ce969a6dddc0326 create mode 100644 fuzz/corpora/asn1/56931e1ce95c4e9f642eb18f61d73aef7b950326 create mode 100644 fuzz/corpora/asn1/56ca3b36ad53bdac1de0b8e0b61a00afa6f2f9da create mode 100644 fuzz/corpora/asn1/56d3535c6dee61c964998bd6b99bf849cd33973f create mode 100644 fuzz/corpora/asn1/56e6b965d2955b3066c53044f614b1f182404359 create mode 100644 fuzz/corpora/asn1/56e888ae9db53f2bcba04c4be287530733771bdf create mode 100644 fuzz/corpora/asn1/570ed7707949ec51856ad54514bc7de472a55e9f create mode 100644 fuzz/corpora/asn1/570f7bae960dd16e1d4941c98493eb5cdd1f7083 create mode 100644 fuzz/corpora/asn1/5729733ee810b86380e596482213cc44752e4797 create mode 100644 fuzz/corpora/asn1/572e94ac0728672e626504060f362881867ac794 create mode 100644 fuzz/corpora/asn1/573bf5b58332a60c9774262f7619c2e61248881d create mode 100644 fuzz/corpora/asn1/574d8800f696a16cc19206fa592352a4d6e75cb9 create mode 100644 fuzz/corpora/asn1/575eb716b2210ffb37c0bbf8cea76f2eeb6fc1c9 create mode 100644 fuzz/corpora/asn1/57831e1b76ade25c2a00f4171ba60467215e0bc3 create mode 100644 fuzz/corpora/asn1/57843ca4fc8bf340f410d86b96dcbe83b81fdea9 create mode 100644 fuzz/corpora/asn1/57935548e32c44b7d9b9a44cc1f42d9d44f1f70c create mode 100644 fuzz/corpora/asn1/57c570c7d7c18581658c2300e5063d3ecb6ba303 create mode 100644 fuzz/corpora/asn1/57c8036be9ef79254f38405a584efa9e82638ca8 create mode 100644 fuzz/corpora/asn1/57c8e58fdfa8e08de5cc41935d47e006b73529cf create mode 100644 fuzz/corpora/asn1/57f348adbb25e99a2a2b21187be4effe9e36612e create mode 100644 fuzz/corpora/asn1/57f99d6110205bbd284f5601601a72379a069ba3 create mode 100644 fuzz/corpora/asn1/580f25d393c1f85a458fa601d3319deed2ba4536 create mode 100644 fuzz/corpora/asn1/5815cf152ac9e23599c29b357bdaf51a34eb3dec create mode 100644 fuzz/corpora/asn1/5824874a40e42a8d9e6ee56c253d4b6057484e0c create mode 100644 fuzz/corpora/asn1/58264053757f8acc7d7664be70c35f0a0f320211 create mode 100644 fuzz/corpora/asn1/586e82054445c082dbc4f58b461a92a5add79ddf create mode 100644 fuzz/corpora/asn1/588b4873f9403ef4c080d9be3fb55e557f234657 create mode 100644 fuzz/corpora/asn1/5891d9bd854e94b73897a3c9b59d20881938a060 create mode 100644 fuzz/corpora/asn1/58c3534a7ec42a4c4fe9014dc04c080bf1ad7205 create mode 100644 fuzz/corpora/asn1/58cc52aa820845031923f290462420b9e9064ca9 create mode 100644 fuzz/corpora/asn1/58e326d69b45ecb51fa44488304d145cc8e29d1b create mode 100644 fuzz/corpora/asn1/591b887407612c85f9f26772f9414dbf0c375eab create mode 100644 fuzz/corpora/asn1/592203690ac8e57c438fcf8e822548087fe08e09 create mode 100644 fuzz/corpora/asn1/592e6792fb5279a7de54939e69553e9ca4d486fd create mode 100644 fuzz/corpora/asn1/593aba59b994ac20a82da4734df4e0bb87483d65 create mode 100644 fuzz/corpora/asn1/594460ed92fee2b836d5bbd550b7f85641504a82 create mode 100644 fuzz/corpora/asn1/595e7d328ad47d8dbc038bf544a2ea92018353d3 create mode 100644 fuzz/corpora/asn1/59726fd1515107a47b64eade45cf9dbd2dc8619b create mode 100644 fuzz/corpora/asn1/597294f97b46322640a27f838eccea4d10f28806 create mode 100644 fuzz/corpora/asn1/598497b070860fd6b3dbd83a3c57403b01f4691f create mode 100644 fuzz/corpora/asn1/598558c8c2ce9312b1ef1d5125d5ba165e49a888 create mode 100644 fuzz/corpora/asn1/598672161574d9e3a805a3e9dcda09c7ccb4479d create mode 100644 fuzz/corpora/asn1/599915c42195ef64d3858cc3ae0564d28df1da7c create mode 100644 fuzz/corpora/asn1/59c6bc49b218a70cf00d473a1e3ba98238e390ee create mode 100644 fuzz/corpora/asn1/59c819f335e7ffb61c423aa7ea1107cfa9c7efed create mode 100644 fuzz/corpora/asn1/5a20991fc6c2329901f2a274965aed43f14783ad create mode 100644 fuzz/corpora/asn1/5a2d810223d3cbd6794e48f5f131d53316c0b114 create mode 100644 fuzz/corpora/asn1/5a35b27062ec9eeebcc417591f1cb71d8ac284e2 create mode 100644 fuzz/corpora/asn1/5a6dd06008fa3ab025ce805096e1ba7838b7f046 create mode 100644 fuzz/corpora/asn1/5a6fe02237986049540b48e21403a3e3e09b77df create mode 100644 fuzz/corpora/asn1/5a73fcc8e2c9b399a948d042180cbab507926839 create mode 100644 fuzz/corpora/asn1/5a7c149a6b785ca4a56c54912837dbd650176533 create mode 100644 fuzz/corpora/asn1/5a81605eafb24a7ea792c2a7f71c490c7afdff2c create mode 100644 fuzz/corpora/asn1/5a852014eb675e1c384b4dc991fae59234e75faa create mode 100644 fuzz/corpora/asn1/5a8531047581852013917a802024c9196b384195 create mode 100644 fuzz/corpora/asn1/5a89a82efdb68999eb96c2752b84695150a8b106 create mode 100644 fuzz/corpora/asn1/5a89e729524bb2b080f90a9169f72359358bfe4a create mode 100644 fuzz/corpora/asn1/5aaab58b4acf0c6cc62e7b4cf85d8cab02de4e97 create mode 100644 fuzz/corpora/asn1/5aae243bcf48fbd303f3d531598f0100a84e3f24 create mode 100644 fuzz/corpora/asn1/5ac203e8c34dd36313c19f4c3bbcf9014780f1b6 create mode 100644 fuzz/corpora/asn1/5acd8c7afe1dfb136366495b3ef8ea1130d1374e create mode 100644 fuzz/corpora/asn1/5adfb6f3b3ebcf1494ac7efbc1dd204578c92be0 create mode 100644 fuzz/corpora/asn1/5ae0e12ed628a554c49e48b6cd115a35444db126 create mode 100644 fuzz/corpora/asn1/5aea7cef4a870a4907ead20bf12b34ab9c87bb1a create mode 100644 fuzz/corpora/asn1/5b1cc3b96fa024694e8c8230b81c7b9a0069d878 create mode 100644 fuzz/corpora/asn1/5b25541525ffbe6016afe8a87418983eaf3aa9d4 create mode 100644 fuzz/corpora/asn1/5b4fdc0259bbbfb99087e0e903b737d406ec8b8a create mode 100644 fuzz/corpora/asn1/5b8981dc982e5d05187aa9807a843d90cc19fc4f create mode 100644 fuzz/corpora/asn1/5bc22bdffd68784dbec8ae725c941da234b8652f create mode 100644 fuzz/corpora/asn1/5bc27e31d11e18162c0e1c3b8b48b6a7d44866b1 create mode 100644 fuzz/corpora/asn1/5bd1b5cd81464686fab0d155a713ea09fa1a2b06 create mode 100644 fuzz/corpora/asn1/5bd3ccb4ab9afef8a7bc994fdf6a1886bb692a09 create mode 100644 fuzz/corpora/asn1/5c6eb2716b1b78ae59e82a11f850ad7933afb4a5 create mode 100644 fuzz/corpora/asn1/5c7af925313309a1eac1b96f74873d67f17dcfc2 create mode 100644 fuzz/corpora/asn1/5cdf55a54ceb8bf0f11619c90ecf6680c5c74946 create mode 100644 fuzz/corpora/asn1/5cf973d0e7bec4dbcbc9a41d0862d43dfe6ec8a1 create mode 100644 fuzz/corpora/asn1/5d2b308e1998958059da429d7b907c90ebea95c2 create mode 100644 fuzz/corpora/asn1/5d4baf832a3ccea02f3e5af1acbe87e9084ddaa7 create mode 100644 fuzz/corpora/asn1/5d53a4fea3de83ce49510986e827fbaf3371a29d create mode 100644 fuzz/corpora/asn1/5db7235ce1f88844a66ff29cd3ca7602e4d73b6f create mode 100644 fuzz/corpora/asn1/5dffa11a3a8b20f8201da53e9b47ffbb267c1173 create mode 100644 fuzz/corpora/asn1/5e0678aa0d033be9c70d02dbda44a230f993d8b2 create mode 100644 fuzz/corpora/asn1/5e3ba5cc20ec04c3cd176945d091419f035f157d create mode 100644 fuzz/corpora/asn1/5e74882ac0016013fa54eade85e142769f091195 create mode 100644 fuzz/corpora/asn1/5e847537a53846ba81b50426aeacca2cd42c330b create mode 100644 fuzz/corpora/asn1/5e91b5571f8a37f32a0c7bcb12b95b4faaf9eb8a create mode 100644 fuzz/corpora/asn1/5eb1071a2eb800d7ac58e2295c2014c62828ca51 create mode 100644 fuzz/corpora/asn1/5f36c36219eb8dae41df713995f9dac23fb8d98d create mode 100644 fuzz/corpora/asn1/5f56c19c731496ed17fea7ade30263091c6ef785 create mode 100644 fuzz/corpora/asn1/5fad365b910db6ccd2050213183ec9d0080f5d9c create mode 100644 fuzz/corpora/asn1/5ffbfdf6c316b902faeff8653573b7b2d989b38f create mode 100644 fuzz/corpora/asn1/60073f5713194b8b4bf5b557338f69f76921f727 create mode 100644 fuzz/corpora/asn1/6008e35ae7117e9c5dd84c04e9ee9953772cc81b create mode 100644 fuzz/corpora/asn1/600d6bf8908dc534cc14554acd8485a150ebf0f3 create mode 100644 fuzz/corpora/asn1/60135fd7e7e22ea25842ade5ccafe5eec15b6dd1 create mode 100644 fuzz/corpora/asn1/6014fcc5a4f5b4ded2b737405398ec43d17c2121 create mode 100644 fuzz/corpora/asn1/6033820eb82b9f4d50e3cf57c6740294bb99d248 create mode 100644 fuzz/corpora/asn1/6059aca5d1eaa658af00cc0b16c5aab586261d94 create mode 100644 fuzz/corpora/asn1/605f076cb179c768f5a0043ee678fab33a356e1c create mode 100644 fuzz/corpora/asn1/607960168a4d6332b2232d2cedfd06bdb05b1638 create mode 100644 fuzz/corpora/asn1/60b1250b2e65f331c0fce71eda1a9372f89381c8 create mode 100644 fuzz/corpora/asn1/60c911ccd2372e3cc3a9b6740b1a9bb9fc368d12 create mode 100644 fuzz/corpora/asn1/60d8e7676d30e3c149c9db71e3dafef32dfc8e9f create mode 100644 fuzz/corpora/asn1/60defde001e07e94d13f4147f9cd9ee9c520ba35 create mode 100644 fuzz/corpora/asn1/611cd8e2378779160742b64f349320cd1772d53c create mode 100644 fuzz/corpora/asn1/6131b64d6d8b53cb61d2b70cf1107c180ca4de98 create mode 100644 fuzz/corpora/asn1/615a230d39da4cb767a99c0ab709e2fd42603f37 create mode 100644 fuzz/corpora/asn1/616dbe87f09b01cc6b86f7173d81f70b5acd2af9 create mode 100644 fuzz/corpora/asn1/61af51b5febfbebdd959f76357db7481d418ba30 create mode 100644 fuzz/corpora/asn1/61b4b3c736d9aa64c4cf36dd011a593aaa778b5b create mode 100644 fuzz/corpora/asn1/61c0db8528d6d95dde4ab433a0cceee6e513d203 create mode 100644 fuzz/corpora/asn1/61cc8eea8b2425292d034dc3de0270b985241d1a create mode 100644 fuzz/corpora/asn1/61e2b466a0d6d416b902a4aab9d39a554685a05d create mode 100644 fuzz/corpora/asn1/61e4b4247bb81e964b58fe31d959f53e8f77d848 create mode 100644 fuzz/corpora/asn1/62366b1b6bfbde67f6023bc94dd03ac709143b4e create mode 100644 fuzz/corpora/asn1/623c1f585b6ed169377f23e446a8a9105dcf93fd create mode 100644 fuzz/corpora/asn1/623ff2b70f08d0be1d4c41fc0e43d0154f3cfdff create mode 100644 fuzz/corpora/asn1/62439f3a4ecafdb281b9fcbfeda62bcb70d11b1e create mode 100644 fuzz/corpora/asn1/627c6e3c1f97db4cfaf45be1e21a133cd6609b46 create mode 100644 fuzz/corpora/asn1/628b054a2ebc636359163d40287a76f4b6cd7008 create mode 100644 fuzz/corpora/asn1/629e61f33fcda2830586cf259d019ab2da6fb697 create mode 100644 fuzz/corpora/asn1/62b8ea9f9cdf39d8e2a956a994f71cea7e40584f create mode 100644 fuzz/corpora/asn1/62bafe37a7f1323dba538155e70edb9f8234b359 create mode 100644 fuzz/corpora/asn1/62cba095dd3b8b6f87014a21eef6302dcee72f0a create mode 100644 fuzz/corpora/asn1/62d76d2a2be15ca038a485d117bccbb48f7392e1 create mode 100644 fuzz/corpora/asn1/62fe217dd3b36680f180d1938dadd5b6f884d362 create mode 100644 fuzz/corpora/asn1/630d0b35ecf3367585596ebc5e81b35caf8f125d create mode 100644 fuzz/corpora/asn1/632ca49ab1db054e9e4e135f0f61a12c16523ddc create mode 100644 fuzz/corpora/asn1/637b3e47edfff5a478c49542fb80d6f75202d357 create mode 100644 fuzz/corpora/asn1/637d12cb90cb23c929cd4ae084d8b8bc9f5aa36c create mode 100644 fuzz/corpora/asn1/63b87e03a4273b7e38032f544c5ba09a5367e023 create mode 100644 fuzz/corpora/asn1/63c3326b813ea619350ffa66718a0c16d51a8122 create mode 100644 fuzz/corpora/asn1/63e4cff3a0f22c306965ed202e330a5e13680e35 create mode 100644 fuzz/corpora/asn1/64225c96f3b11185c9efe4185c5507aceadf1944 create mode 100644 fuzz/corpora/asn1/647d2331fef20593fa67c2e18ffd56a121f76442 create mode 100644 fuzz/corpora/asn1/648fdfe8c124e697c7c4500db5ba9c29e9a0476e create mode 100644 fuzz/corpora/asn1/64a652943a1c76cf6cb5661c49823970b036e713 create mode 100644 fuzz/corpora/asn1/64beaff7b7751e1c2efdf5378cfbf70d70bad025 create mode 100644 fuzz/corpora/asn1/64df7f79dd70a6653c1f8c132dc7938f5e5844a0 create mode 100644 fuzz/corpora/asn1/64e159659bb9706cb25017d10b068de13d30c6ca create mode 100644 fuzz/corpora/asn1/652a56b1428f40bc8c0fc761c3cf3297ede1312d create mode 100644 fuzz/corpora/asn1/653e4e7a61bd8b656d1bc97cce3c9ca70d97b093 create mode 100644 fuzz/corpora/asn1/65978fc56a35a5242943434de1c8268ed664854e create mode 100644 fuzz/corpora/asn1/65b0315d0ac5a89949eb3c7ef39a635e17dfd249 create mode 100644 fuzz/corpora/asn1/65b9b72f1a8ab2f478a3b41a59c141eb50f367d3 create mode 100644 fuzz/corpora/asn1/65eb7067aa9e4c1db6dcc46553d9f71375dc687d create mode 100644 fuzz/corpora/asn1/65f6a84853d98d3aa000793bb7d53b5eaee0c1a7 create mode 100644 fuzz/corpora/asn1/661951c23228ee4b2db3ef39c59a7dc48a6df473 create mode 100644 fuzz/corpora/asn1/665d0461ba65a86e5975a425b65b386c8237f883 create mode 100644 fuzz/corpora/asn1/6669112ec925af24e11a7e3831a2d3156831f01d create mode 100644 fuzz/corpora/asn1/666a48d51768fb040c9567ad6b290db32f541924 create mode 100644 fuzz/corpora/asn1/666f5052d9898a43d4e67c344d6f8fd0110f7c52 create mode 100644 fuzz/corpora/asn1/667c9f41b4ecec590bacefa67b4ce84f24c345ac create mode 100644 fuzz/corpora/asn1/6681a37790c0a3593767fead0faf7e09d19f2849 create mode 100644 fuzz/corpora/asn1/668ca20c0195624c2a02e6a4b538eb4fb8471dbb create mode 100644 fuzz/corpora/asn1/66aa1908dc1be4f9ab9fd70f101ab9724dfcbc74 create mode 100644 fuzz/corpora/asn1/66c492c3ff17c0be116dd9e00f3f81be51934f0b create mode 100644 fuzz/corpora/asn1/66e026df62681bb9036c23c87c4b6fbbce14e913 create mode 100644 fuzz/corpora/asn1/6763194ab887e06076785d692c281811e1893f66 create mode 100644 fuzz/corpora/asn1/676c0b51dfb74e64cd206ec2f7613c01dd93fe75 create mode 100644 fuzz/corpora/asn1/6780e0ae8dd3d209829c62b740c0b57875a4450c create mode 100644 fuzz/corpora/asn1/6795a14fdf8a2bfc0a2bcaa0dc8e75d343c175ce create mode 100644 fuzz/corpora/asn1/67bfa42b7ab4daab7f610778a3e32d9e359d4827 create mode 100644 fuzz/corpora/asn1/67e574f034d168969baf8c3d19d830743ef775ef create mode 100644 fuzz/corpora/asn1/67e7d79e766934701220965b8637fe8477a70a8f create mode 100644 fuzz/corpora/asn1/67f60131a8feae64c16324b3e345a591e144ad8e create mode 100644 fuzz/corpora/asn1/6806416c9329b50e72c1565b2a557b53b84d1f00 create mode 100644 fuzz/corpora/asn1/68079829995549fc91e8967ed6e1a38f87e8d1eb create mode 100644 fuzz/corpora/asn1/6824e1ff1f5078eb9f315297e1644ea65aac0914 create mode 100644 fuzz/corpora/asn1/682b367ae8a2e186d1b4f33b777d1f2630d5b479 create mode 100644 fuzz/corpora/asn1/684befa69cbc6735eec028d64d055c29c7ee1d58 create mode 100644 fuzz/corpora/asn1/687882001d3ead655002ee18967f73e47258079c create mode 100644 fuzz/corpora/asn1/688934845f22049cb14668832efa33d45013b6b9 create mode 100644 fuzz/corpora/asn1/68915cb462638d83fc0da9045cbb65946934017a create mode 100644 fuzz/corpora/asn1/68b9d71ead4a7896f5d23b65249a4ece3ca0415c create mode 100644 fuzz/corpora/asn1/68c810c70612273f02abe5ebda45da473876997b create mode 100644 fuzz/corpora/asn1/68f8cfc45e5d629468d2ad29bb291a2cab7032cb create mode 100644 fuzz/corpora/asn1/691ad103865cc0eb66859bdbe4f4f94af2e52d0d create mode 100644 fuzz/corpora/asn1/69481fe8d59a86204cc686095414779d646b2237 create mode 100644 fuzz/corpora/asn1/696b0688cb0feb9edb4d24f4b964db6de5c46211 create mode 100644 fuzz/corpora/asn1/69770198d13ebc570ad20f246bd5a99e2b2fcc9b create mode 100644 fuzz/corpora/asn1/698b217f0cac24984aa72489d1ec4a84bcde4e24 create mode 100644 fuzz/corpora/asn1/69b69b8aeac3d6cd22143fde46c1fa51c5957b08 create mode 100644 fuzz/corpora/asn1/69bfeef0c1be8d9af6eb3f0acf45fd39b51b2670 create mode 100644 fuzz/corpora/asn1/69d0d64a98c2f955df1cfe211ab143fd990e9db7 create mode 100644 fuzz/corpora/asn1/69d585d7eb7cf1a672addfa48d8c4d859feb891a create mode 100644 fuzz/corpora/asn1/69f599b39c7d212a6b038f9180345436b394c1aa create mode 100644 fuzz/corpora/asn1/69f8a1e62ab6a4c5c1756f8077fee0a8c6d219a2 create mode 100644 fuzz/corpora/asn1/6a06aa5739fb44512672d44a6184e38b7891bf68 create mode 100644 fuzz/corpora/asn1/6a1d627ac654ba1d06ea3f99cab5e534df50f0c3 create mode 100644 fuzz/corpora/asn1/6a2b1eac9bb2fd660c2dd0a7b7c7d82660326230 create mode 100644 fuzz/corpora/asn1/6a40822dcdf0b3102691c00dcd8087492b19b385 create mode 100644 fuzz/corpora/asn1/6a6b12e0cabf3d2af2747b77c812eb9e50cd270f create mode 100644 fuzz/corpora/asn1/6a6bc702bc4375a3897c2ab5ac6ac46b97b74490 create mode 100644 fuzz/corpora/asn1/6a85cf72ce5d424b88f44f1a11ff837242d39bf5 create mode 100644 fuzz/corpora/asn1/6a8fb2f00083248a24d7544d9c96003bde8a1ccb create mode 100644 fuzz/corpora/asn1/6a947f987d47d24c17b06e7e143e98cfa9a38d0b create mode 100644 fuzz/corpora/asn1/6aba85c6d48e27882cbb5ee3d5b2f9a3fcf17b72 create mode 100644 fuzz/corpora/asn1/6aced155f70527b9f2db8bf4426f28aaa386bc90 create mode 100644 fuzz/corpora/asn1/6af299b8857642fb3fee12c02e52b1f3675b504e create mode 100644 fuzz/corpora/asn1/6afb812cafbdcb22d545e1c61f9a6161e6f12ef4 create mode 100644 fuzz/corpora/asn1/6b0c37ab6b8781bebaab5ff10b91b2ce180b5043 create mode 100644 fuzz/corpora/asn1/6b5783ea73c66cb48aea71da56b4947acec3ebc3 create mode 100644 fuzz/corpora/asn1/6b592e125891747df5215531b69b38afa6965110 create mode 100644 fuzz/corpora/asn1/6b5d2a2da83ba893565f3e9ad996caaa92c5c829 create mode 100644 fuzz/corpora/asn1/6b72c9ab07118eaa2a70b494c1e20d8009d4ebb1 create mode 100644 fuzz/corpora/asn1/6b800002da0dcac0ab1c8befee5d44be547980e0 create mode 100644 fuzz/corpora/asn1/6b8d6fae12fb38e4f043081952343471ecd222c0 create mode 100644 fuzz/corpora/asn1/6b91749ecea9f52797d5d7575432f93da98ed9b6 create mode 100644 fuzz/corpora/asn1/6bc1d0a29017f7f7f7dd6f7e894b1e5503727990 create mode 100644 fuzz/corpora/asn1/6bf46814bd147c19af282b06aa5d4c494f7fb5cf create mode 100644 fuzz/corpora/asn1/6bf56d1beffac2c00e12c06b189353a998174a3a create mode 100644 fuzz/corpora/asn1/6bfc3324468212f2862e6e163c5d2c55428ff186 create mode 100644 fuzz/corpora/asn1/6c0e3aa5ef05341aa40d94f1e805bece1eb87e2a create mode 100644 fuzz/corpora/asn1/6c0f744bf69ba76ce9230d20a7961dca09ebae16 create mode 100644 fuzz/corpora/asn1/6c1770faf480be7a1d5a4f35b9e9b73f58643ade create mode 100644 fuzz/corpora/asn1/6c1a3285fe9de34f7aea5ed8c382a521cf1160f0 create mode 100644 fuzz/corpora/asn1/6c3320263f2edb475cd715eba054a3a9838c5ed0 create mode 100644 fuzz/corpora/asn1/6c357e26a753827c3ab18d5bd12f9bda85f2bcab create mode 100644 fuzz/corpora/asn1/6c4a22bf37d4b458ca564e2e219cb2d4e6a858a9 create mode 100644 fuzz/corpora/asn1/6c4b9a81fa9d25312fec6d38868ab17e5aef0913 create mode 100644 fuzz/corpora/asn1/6c5f6735b10019aa7f1a4b0492d7c45d87e2dd4c create mode 100644 fuzz/corpora/asn1/6c645f0aa5e178b3f571ef03dbe519a938edcaec create mode 100644 fuzz/corpora/asn1/6c7e7b6aa7518eb727c8616d389fa069c901b064 create mode 100644 fuzz/corpora/asn1/6c86a5dc2d69684fc79ef1d6dca13ac342c0204a create mode 100644 fuzz/corpora/asn1/6c9df011fb99c6b88b532e38e1de2da35a5d5cc8 create mode 100644 fuzz/corpora/asn1/6cacc79a17083bddb0a722f33255fded78dbe5e0 create mode 100644 fuzz/corpora/asn1/6cb42f17aaa23d38cac9a41fb6d5c507d0be0876 create mode 100644 fuzz/corpora/asn1/6cc6e623d2681e3e40169061f65286bae4e54489 create mode 100644 fuzz/corpora/asn1/6cd40193245eb449a8350a57769376474b4350eb create mode 100644 fuzz/corpora/asn1/6cdff5afcb88f735cbfc095701da75ed64ba1c03 create mode 100644 fuzz/corpora/asn1/6ce74a3fd1e8f9491bac788ee2cfb10cb83dcac4 create mode 100644 fuzz/corpora/asn1/6d0f0011e1d0a6046db2b3062a91f8f97b6f18a9 create mode 100644 fuzz/corpora/asn1/6d183eae9e00d40916aba4677aab6122ba8f8caf create mode 100644 fuzz/corpora/asn1/6d219f7c5025e8fc8d0820d113bc7c0b83efdb1e create mode 100644 fuzz/corpora/asn1/6d29e2450e433020d609fcd195393444fc7ff60b create mode 100644 fuzz/corpora/asn1/6d4a04af3813c77d9a5c0a68ec1010f1b35138d0 create mode 100644 fuzz/corpora/asn1/6d696af6b7a5d73f1fbf41a4451a25efa4a8905f create mode 100644 fuzz/corpora/asn1/6d70092ccbbe1809e5b0b42cb24eaa581ecdd6cb create mode 100644 fuzz/corpora/asn1/6d78e59433c6b1f8e54425003eabb4035369101f create mode 100644 fuzz/corpora/asn1/6e163ae1147e866ca6496218d77d52424cbd58e4 create mode 100644 fuzz/corpora/asn1/6e16e9e90bfb89ed897b583fa6b32d2acecd33a2 create mode 100644 fuzz/corpora/asn1/6e33f4ee9d34b6ac5d1b07e07267b733ba1f89ac create mode 100644 fuzz/corpora/asn1/6e3d9b6b9330c920437cc60424960e0a755a3d3a create mode 100644 fuzz/corpora/asn1/6e72dd3a5f68536ea87da4c6de9457cd7d237d94 create mode 100644 fuzz/corpora/asn1/6e9d9f5a1f1b613997fb3010c9a34dfeb352264c create mode 100644 fuzz/corpora/asn1/6e9f4d2c254dcabbb78df78e31705149e20c5de3 create mode 100644 fuzz/corpora/asn1/6eae924cf5e94ce0d685557eb123490aae4d3fde create mode 100644 fuzz/corpora/asn1/6eae9a2c53d85def79dcaedfee865d01038ef2a2 create mode 100644 fuzz/corpora/asn1/6f18c702381cb49d74f253ff5a549a9bb354561a create mode 100644 fuzz/corpora/asn1/6f55fc65a43b0492c448ffe329fc8ff2e09ad13f create mode 100644 fuzz/corpora/asn1/6f943b17e6946970f39a1c0abcc99fb8b4b92d6d create mode 100644 fuzz/corpora/asn1/6fa6885ed33befc0140d8bd024e5f25afc97cb31 create mode 100644 fuzz/corpora/asn1/6fc2672379da6851d8288c43f3be93ff8f483c90 create mode 100644 fuzz/corpora/asn1/6ff99ca7c76ee3f0d25600223dc59bc262394fe5 create mode 100644 fuzz/corpora/asn1/700cb0be3d9858302bf79f8d628becc433dd7850 create mode 100644 fuzz/corpora/asn1/700ce88de4db9437d9736f6808a5ebf005ff51ca create mode 100644 fuzz/corpora/asn1/70185e1ffce416c93d060365eeaaea0ce62bbe48 create mode 100644 fuzz/corpora/asn1/702ae3810cee286d2e76e44224b25d23961cb48f create mode 100644 fuzz/corpora/asn1/7061bf8cfe63354fe4bb84d6c3c2e013d5810068 create mode 100644 fuzz/corpora/asn1/707fe4a0fb211a12cc0d2fa43dca2c03e198e18e create mode 100644 fuzz/corpora/asn1/7096c8436ebe8ed03bb3dac27bc3a997ea650ba6 create mode 100644 fuzz/corpora/asn1/70978313c9b398b4debcf40dad5d1480d1efb629 create mode 100644 fuzz/corpora/asn1/70fba82f604beff2a42873db628ac0840cc295b1 create mode 100644 fuzz/corpora/asn1/713ad7f57336df056e1c5c2f23bdaa6a1558acf9 create mode 100644 fuzz/corpora/asn1/717bddfb84cd8a248ab859bcc6e2d9ff02e82822 create mode 100644 fuzz/corpora/asn1/7182030ced2deacf3791067f81b911f799205514 create mode 100644 fuzz/corpora/asn1/718f955139861fefc62329aef65ea2563edb1bb6 create mode 100644 fuzz/corpora/asn1/71afcaf2b31c1f4e344cb21fc9bc9f26f7a5981f create mode 100644 fuzz/corpora/asn1/71b59cda146cdfec77ada33abfde611e64cf0eb2 create mode 100644 fuzz/corpora/asn1/71cc74b3049695be0b0f78945fafde1de1d6a74c create mode 100644 fuzz/corpora/asn1/71e9a4eade61ae0af07c98e5abb54e215361056c create mode 100644 fuzz/corpora/asn1/71eba76e08d828ba7b9ef10d05b2cece50ae9ef9 create mode 100644 fuzz/corpora/asn1/7204a9cae0682105cbe75689a0ae61345544cb37 create mode 100644 fuzz/corpora/asn1/7215c85a7b88d609f33a4be24b57191313d0d27d create mode 100644 fuzz/corpora/asn1/7217cde3dc7fe19260c8de989663697717862fb4 create mode 100644 fuzz/corpora/asn1/721ce9eef7337a65d2704811f85147e5da34674f create mode 100644 fuzz/corpora/asn1/725fabedb87514796273f2fbe2157bdbd347015a create mode 100644 fuzz/corpora/asn1/72607a13d79db9062df3fb083a5fc6abf866b003 create mode 100644 fuzz/corpora/asn1/729270f0930e3276da8024a8da94d278af121b51 create mode 100644 fuzz/corpora/asn1/72b864bf64f4cc084dabf89625b82d125724733d create mode 100644 fuzz/corpora/asn1/72c43e719f76311adc55a4161e17b1c3af9c80ba create mode 100644 fuzz/corpora/asn1/72c91274b7f7ded6d12e52d75869ac339adced1e create mode 100644 fuzz/corpora/asn1/72ffc4fededf4096482e65b293c6347ddb42a031 create mode 100644 fuzz/corpora/asn1/731a9e10d808d92a4a922d0942529cb9510eadab create mode 100644 fuzz/corpora/asn1/73482f247d0f0f25ebb7e88d976e0081a968875c create mode 100644 fuzz/corpora/asn1/73a3ffa8016c5bac43dbf115c758976a2b31d03e create mode 100644 fuzz/corpora/asn1/73bfa72f1963e8b189c0dcb437ee0489307009e3 create mode 100644 fuzz/corpora/asn1/73c01cc77e5a022cdda047d43f3ddfcc5b863037 create mode 100644 fuzz/corpora/asn1/74084450f19dda6628e62375bdfd73da94d5a7ca create mode 100644 fuzz/corpora/asn1/745471fa1ecae68d75dd4b3e42a99ab0e29a1da4 create mode 100644 fuzz/corpora/asn1/745adbbe8c1b837a073cde881ec7d01b6afc7a9c create mode 100644 fuzz/corpora/asn1/745ca9526a0f975b8be2109a7dad85a3e46ce668 create mode 100644 fuzz/corpora/asn1/748baf827bfafd1465ba2990646c92595a87a628 create mode 100644 fuzz/corpora/asn1/748f4c2c18b9948761927862a67b8fb62167da75 create mode 100644 fuzz/corpora/asn1/74a433285081617832150fa8dcce39b56e862f14 create mode 100644 fuzz/corpora/asn1/74ab0b5403b3aed3c9be05e4a2aebaee30306ca8 create mode 100644 fuzz/corpora/asn1/74b5bfd90dbda122bafb8af867e51cda5d53821d create mode 100644 fuzz/corpora/asn1/74dc47ff5be05862f4b8cfd7a61cf2f86611e1ef create mode 100644 fuzz/corpora/asn1/74f5dbed26b1a337a8bb237732607e97c20a02f1 create mode 100644 fuzz/corpora/asn1/75052903d81721a67e4885de260df7d323904f7a create mode 100644 fuzz/corpora/asn1/75279dff0b4255bc88dab0cca431e5bb26276515 create mode 100644 fuzz/corpora/asn1/756fc8353f2bfd92cd17b7d2349b9c29d82b4176 create mode 100644 fuzz/corpora/asn1/7578bf871b81f3b9be9d8df014f9fec68e002ad4 create mode 100644 fuzz/corpora/asn1/75877fac394682ab3d97407578a1008c34aa0ccb create mode 100644 fuzz/corpora/asn1/75961a241ae4a930672d0abbbb7ff4c9eabe0dad create mode 100644 fuzz/corpora/asn1/75c5a3fba163276375654270604e56884405884e create mode 100644 fuzz/corpora/asn1/760ad313794315cad3943d501bb5436740c369e1 create mode 100644 fuzz/corpora/asn1/7616befafb80efb99bdc0bdab7c4f57d44eadc8d create mode 100644 fuzz/corpora/asn1/766db02ba389f8c75fde2950c87700ccd5f75875 create mode 100644 fuzz/corpora/asn1/76c5830bc2df30cffab01dab3e96915a5088cf64 create mode 100644 fuzz/corpora/asn1/76cadcb90db3b785216c80def6ab858a04f9469e create mode 100644 fuzz/corpora/asn1/76e606a43322c716ecb0a44516e7629b8a6408f5 create mode 100644 fuzz/corpora/asn1/76e950d005d790f90964a0b54adfae7ca9b9c026 create mode 100644 fuzz/corpora/asn1/76f5fbbe0340445a16ed71b8b3f1d2af6393d50b create mode 100644 fuzz/corpora/asn1/76f6df883dcfece1cd50ba7c0067695ed6b8bb8d create mode 100644 fuzz/corpora/asn1/76fc688d70e434ee7238645338b4bdae3c6b84db create mode 100644 fuzz/corpora/asn1/772fbfc2323b080ea649a257e45457c746fff381 create mode 100644 fuzz/corpora/asn1/7792a53d83bcfb633a0bd16ad7341a601cca6e07 create mode 100644 fuzz/corpora/asn1/77cacd0d7a359f0ba6028e693e97baa20cc9d9d2 create mode 100644 fuzz/corpora/asn1/77f0678521b50fb499634743fb801553fd24c42c create mode 100644 fuzz/corpora/asn1/780964f424a71ec151f54091454241354d2f7a23 create mode 100644 fuzz/corpora/asn1/7816004855919afe57680dc5e2d153aa98b5289c create mode 100644 fuzz/corpora/asn1/78184ce81c3e8de5abdd326b7a62d4a3abd87237 create mode 100644 fuzz/corpora/asn1/781aed792536f0846dacb21a350e181dd0a0f726 create mode 100644 fuzz/corpora/asn1/787abdec1c5548f3e41b89e88b38c68a2e41d1ac create mode 100644 fuzz/corpora/asn1/787db4cdc8eb7793d5a4b64de0f2c9e170abd52d create mode 100644 fuzz/corpora/asn1/78918bdb1f7d7e576f35b568aee9b0f8f939c9b6 create mode 100644 fuzz/corpora/asn1/789e9338d0a6adffe36f391bef7158dc67b18ff7 create mode 100644 fuzz/corpora/asn1/78b471c4921e10467c8f6dcc9c471267a40108d9 create mode 100644 fuzz/corpora/asn1/78e1631b7c1be73e2ce1baaa4b1504fcd0631ba8 create mode 100644 fuzz/corpora/asn1/7922215bbfd5d32218523bda1ad0c34cd3bfa3cd create mode 100644 fuzz/corpora/asn1/793b4e0a688ab815fb78b5e3636c5d0f04d5adc9 create mode 100644 fuzz/corpora/asn1/793b7829471cd5c5746538c45a66c5b397025a12 create mode 100644 fuzz/corpora/asn1/79422438fdd3111c7f4d1094929008f59cf6189d create mode 100644 fuzz/corpora/asn1/796385a1f29e01d74508c86024a45936126ace90 create mode 100644 fuzz/corpora/asn1/79a052eff0e47613128bb4a2c947f6cad4bef9b8 create mode 100644 fuzz/corpora/asn1/79b8e0885e63273a0a4cde704bfc4577286abb6b create mode 100644 fuzz/corpora/asn1/79d46affb01bf3b12cf779967f22a2eff1d58bee create mode 100644 fuzz/corpora/asn1/79da419a2d8cb46b23ee0e5bd2f5d2af2c87a39e create mode 100644 fuzz/corpora/asn1/7a1092a53e4c7ce58c6baf69dfd0280c1f6690cc create mode 100644 fuzz/corpora/asn1/7a242a3075bdc2a0cf26ca6d082387000e8bc8df create mode 100644 fuzz/corpora/asn1/7a25ee73e091a4ed95aeb1783ff552e216b87863 create mode 100644 fuzz/corpora/asn1/7a2d84979d5923f61d8f447e19490ddba9aa9ed5 create mode 100644 fuzz/corpora/asn1/7a30569d9dc533fb90cbd69e1a995995bc1da3be create mode 100644 fuzz/corpora/asn1/7a5c383ffce6ffb2e4258940421258f06dc5f93b create mode 100644 fuzz/corpora/asn1/7abe417b5455328272d91955d385587f3f9376f3 create mode 100644 fuzz/corpora/asn1/7aed078e4ecc4819ecfed2309b711c5ee26fbb24 create mode 100644 fuzz/corpora/asn1/7afd6f57987bd4d242c8abc5f5a9c453123ca84f create mode 100644 fuzz/corpora/asn1/7b2636347ba98e03a0348add812b883cee2a5980 create mode 100644 fuzz/corpora/asn1/7b395d6af6f70c3833a28be33f54e3c158250b44 create mode 100644 fuzz/corpora/asn1/7b5c9bfaddadd872013077644b12deb65d83a830 create mode 100644 fuzz/corpora/asn1/7b64b6e3e3ebc4e7d5ac0bc84afecd3cba4285c8 create mode 100644 fuzz/corpora/asn1/7b83df2766eda2b22024f3e32f72e9bd8e9bc76b create mode 100644 fuzz/corpora/asn1/7b8eceb60e74b0fdfca87f931c32677ac67e5566 create mode 100644 fuzz/corpora/asn1/7b8edcfa95396def10480ee0a8b68a5d6fb1bb12 create mode 100644 fuzz/corpora/asn1/7b99d1c075ae858f5c0f4670e86e6074f06595d8 create mode 100644 fuzz/corpora/asn1/7bb3f846ef26ecc6dce6e81cad0f5ee363196bf2 create mode 100644 fuzz/corpora/asn1/7bcef44300c607fa9325c19d6a9d3d68b230901f create mode 100644 fuzz/corpora/asn1/7bd037147730420894753f5dd71554c001e050f8 create mode 100644 fuzz/corpora/asn1/7bdd4dcb057c6d232187ed6c47222d9cc597e404 create mode 100644 fuzz/corpora/asn1/7c6243517a6c2ec0cccba743d371d723952d821d create mode 100644 fuzz/corpora/asn1/7c7fa79a6e819ef13794c30dc6bc696ff0162134 create mode 100644 fuzz/corpora/asn1/7c8a5d16af17672545cf506dde2fa4397f0f2576 create mode 100644 fuzz/corpora/asn1/7ccc0b863c59d29e9ca84382651efe706d6e10b0 create mode 100644 fuzz/corpora/asn1/7cd95c6f2e93389489f541b620986c90680d3876 create mode 100644 fuzz/corpora/asn1/7cdeea602567a5169d281bd4bef47a1bf3fdff63 create mode 100644 fuzz/corpora/asn1/7cee2f0f8ce8428568161f47cdafd509ecf36ab8 create mode 100644 fuzz/corpora/asn1/7d06dc8cbbeb99b5329023f0358794d62565ea8b create mode 100644 fuzz/corpora/asn1/7d0daa42d7c1767ad99825043324206c93e507b5 create mode 100644 fuzz/corpora/asn1/7d46da73914f5d2cc6c25de1b0f6ba6f02e4dfcc create mode 100644 fuzz/corpora/asn1/7d54d6caeef9817e1f96ea928140de07aee3269e create mode 100644 fuzz/corpora/asn1/7d80bfad32e95c377146c2e8e5f784680d64ba35 create mode 100644 fuzz/corpora/asn1/7d9f46990adecfe14b948c3415ed1d2eedd5fbfb create mode 100644 fuzz/corpora/asn1/7db6d3aa3080a075a918ca73b140c5ccedfb5885 create mode 100644 fuzz/corpora/asn1/7db72f7b5b0fb62c38c8040885283b278269bc6d create mode 100644 fuzz/corpora/asn1/7dbc9283ab3e8aef068b1630f56c28949d1b0b94 create mode 100644 fuzz/corpora/asn1/7de00560d1e606347a023428df17739d11129008 create mode 100644 fuzz/corpora/asn1/7dee8b794a0662cf366f19b0e3b12e1fe06cd362 create mode 100644 fuzz/corpora/asn1/7e1149246dad142957ad926d46b5a32ef45daef2 create mode 100644 fuzz/corpora/asn1/7e350dafec22b76bf008ab9ed72f6c8e4f69eb2f create mode 100644 fuzz/corpora/asn1/7e4062648f0c8f2d212b9ff8792210511d2f43a1 create mode 100644 fuzz/corpora/asn1/7e6f2f60663d13bde2e696344b86374e678f0071 create mode 100644 fuzz/corpora/asn1/7e7c6c44cdf06b35feff6d5014b738c899f24b90 create mode 100644 fuzz/corpora/asn1/7e80193f0ace19651d165d26fb76d560ca421d8e create mode 100644 fuzz/corpora/asn1/7f20704a285c239dd2c826c4583ac267a58ed283 create mode 100644 fuzz/corpora/asn1/7f40127e5ef1270a27dbb5fb0dd88f560c584db8 create mode 100644 fuzz/corpora/asn1/7f4f7d13156977eb23b9154c1fe70aff5931ef12 create mode 100644 fuzz/corpora/asn1/7f525611fbc6c81c2cbc078f17a690959f565a21 create mode 100644 fuzz/corpora/asn1/7f5cef76687f67d8687f2d681240e999d43f594c create mode 100644 fuzz/corpora/asn1/7f65ff7c6cb6a53c2168265172ecb8c2b518b5b1 create mode 100644 fuzz/corpora/asn1/7f9ff791c90a7e256c8b40c2ab5b815b379d56c5 create mode 100644 fuzz/corpora/asn1/7fb780eabece39710fb90c4db15aeee952725796 create mode 100644 fuzz/corpora/asn1/7fcafe21ea7a87fef0aa7dd129ebbdf4d89655ae create mode 100644 fuzz/corpora/asn1/7fd34fe1f4ffd60f5b9080a88f5d7cd125980613 create mode 100644 fuzz/corpora/asn1/7fd73282532a18d69fca823ba0477e046c9cd630 create mode 100644 fuzz/corpora/asn1/7fd7cd570fea0e12de2b0a5cdc836630435e9dc1 create mode 100644 fuzz/corpora/asn1/800e33adda13cd7e0737f0e244f206f5e1cdcbc9 create mode 100644 fuzz/corpora/asn1/801d2b2b37124a7d85175c7aef30d8fe752be2eb create mode 100644 fuzz/corpora/asn1/80234277da2c9c5134f2739ad233bd19748be795 create mode 100644 fuzz/corpora/asn1/805d93fc05807b74e7df6ddade09b6b396f10c23 create mode 100644 fuzz/corpora/asn1/806bbf0cdcdea436f90c25fcb6c81cbc23871a55 create mode 100644 fuzz/corpora/asn1/807be7ed3b45cc9ed4607d6877701358a83595d6 create mode 100644 fuzz/corpora/asn1/80dbfc881c136ab51cbadad6d30e732ac2f2ab71 create mode 100644 fuzz/corpora/asn1/80ef83dc610a8e805fb2e6c21ed950fc1eb79596 create mode 100644 fuzz/corpora/asn1/810627386329d3a2154fa63adee07d49e3bbe0ba create mode 100644 fuzz/corpora/asn1/81065325e50271e1911972365cac23e57f817648 create mode 100644 fuzz/corpora/asn1/8137ed258643a5b7902e758ef8f6e5e702c05b9d create mode 100644 fuzz/corpora/asn1/816c4986625e1a02a06369fa7288959142544f9f create mode 100644 fuzz/corpora/asn1/816e59d500890ba1d958b23e32acd24aadc482ee create mode 100644 fuzz/corpora/asn1/819b9dae3be148827005499f1c53954081bdf749 create mode 100644 fuzz/corpora/asn1/81b94731928277e4a4a2d9e4310d3afc2cba6bcb create mode 100644 fuzz/corpora/asn1/81bf4000ba8b5eedda84593501a89f65edd85509 create mode 100644 fuzz/corpora/asn1/81bfb7a2dc1aafc681a92d5e93f563ddd81b1709 create mode 100644 fuzz/corpora/asn1/81c4bccd4a1fa9dd643a2a2623c8e9f91c32abe2 create mode 100644 fuzz/corpora/asn1/81c60b24bbce9f145d6609c4f8361d928d24f2c6 create mode 100644 fuzz/corpora/asn1/81ce38704873015fd29650f21e90fe1d2192608e create mode 100644 fuzz/corpora/asn1/81d2698a2d14488deccbc8656640b50590b7aa35 create mode 100644 fuzz/corpora/asn1/81d27e702ae9a300328b1aeaf9e3bdf689068e08 create mode 100644 fuzz/corpora/asn1/81d642fd821aa715ac5505c7ec7b79ad794cac47 create mode 100644 fuzz/corpora/asn1/81fe3be8f8da2f29571183951963f862608eaf57 create mode 100644 fuzz/corpora/asn1/821e5489cb04b6aa2c02568c295845de427a618d create mode 100644 fuzz/corpora/asn1/822869c2d9832cdcaee4d6b9bd88040a0c1cc14f create mode 100644 fuzz/corpora/asn1/8241c7618e9696674609cf92a3d26756f191147c create mode 100644 fuzz/corpora/asn1/827d0055e88de768dc5ea697e9c56aab0292a602 create mode 100644 fuzz/corpora/asn1/8286324f9b77ef2dc2c151756cba71b416056f20 create mode 100644 fuzz/corpora/asn1/82a1e1d8d00466ddf9fecdbed33c680e4e3e26f8 create mode 100644 fuzz/corpora/asn1/82b05954c07d220e3f73a3fb869e1bc07bd3be25 create mode 100644 fuzz/corpora/asn1/82de90d3a6f5d2fad65a94aae6aabd8433c84a07 create mode 100644 fuzz/corpora/asn1/8304c98d8d0168d0ae2f17133e4006963954f16f create mode 100644 fuzz/corpora/asn1/830a2593fc053a44576817f7d354c73b917af86e create mode 100644 fuzz/corpora/asn1/83116120729fc51812f79ed07eaa8f9497295761 create mode 100644 fuzz/corpora/asn1/83317e6cef0bc101c43407b2aceba582785825c0 create mode 100644 fuzz/corpora/asn1/833e11b59a00b522d59c25a6873e650335ba82a3 create mode 100644 fuzz/corpora/asn1/837cd805c7181e049adc52556b9385527e05439d create mode 100644 fuzz/corpora/asn1/8392794898328f6aa4b8a4a4d9fee55edcf6ac58 create mode 100644 fuzz/corpora/asn1/83a4622d79a724ff399c015319427b73df9315d1 create mode 100644 fuzz/corpora/asn1/83b0ae5b9301462b0272671e5687787d915f9965 create mode 100644 fuzz/corpora/asn1/83bf08efb67658230ec4f9b295922a147bf31e86 create mode 100644 fuzz/corpora/asn1/83cd075f4ecc07a520e1e2ea3d4e0ab5d63bf08a create mode 100644 fuzz/corpora/asn1/83ced1c0806987c7a32836d7959aacc2acb2ecd8 create mode 100644 fuzz/corpora/asn1/83d1d782dcdb5d75877d83b558f2f7780edf87f5 create mode 100644 fuzz/corpora/asn1/8438167990f6d205f9ce3aed944293ae3c62c854 create mode 100644 fuzz/corpora/asn1/844f93a8bd0c56317b6d7315135743210435033d create mode 100644 fuzz/corpora/asn1/8455a827e8183f1f8bf5a5ea1f71622c91793349 create mode 100644 fuzz/corpora/asn1/84608569b99ad3722fae134af910027551ce6b4d create mode 100644 fuzz/corpora/asn1/84714905a276e6c5efe1816f897d42de57c782be create mode 100644 fuzz/corpora/asn1/8480895f1c89b8ac57b36fa2fb91109b9bc712e1 create mode 100644 fuzz/corpora/asn1/8489c02f40fbad65c1d719fc12e8e7791abfa6b4 create mode 100644 fuzz/corpora/asn1/84a237fd30882e4ce6c2dbb13c095d8718c6a917 create mode 100644 fuzz/corpora/asn1/84b18c29145370cff64594627a094c06fecf7c96 create mode 100644 fuzz/corpora/asn1/84b22a5f990f4d56ea6ee7706f584598d5f9f0bb create mode 100644 fuzz/corpora/asn1/8504298a09ef46ead7c59ff06ba3d8050ba1ab3b create mode 100644 fuzz/corpora/asn1/852012f24c7f232c1136cc986ac9943bf1002a07 create mode 100644 fuzz/corpora/asn1/855a4b050dad61c8ff5bb62ef06eeac2421dcbd7 create mode 100644 fuzz/corpora/asn1/856e33153191dca54e636a776bac6aee4fa67995 create mode 100644 fuzz/corpora/asn1/858c0ffeb444e97295d85c9f8eae904092c27d35 create mode 100644 fuzz/corpora/asn1/8597ec9ac30a5be4135b9dc20e0405749a9bc2fc create mode 100644 fuzz/corpora/asn1/85d29815f8ad1c9c6d71058f4a95447b8d4f2786 create mode 100644 fuzz/corpora/asn1/8619a2baa1c5e42f7dd2f3839bb3248d8442ff85 create mode 100644 fuzz/corpora/asn1/861f0a6c736fff277bff41b8187deae03e08135a create mode 100644 fuzz/corpora/asn1/866a048d2eed311eba800b7756ee5c21f6f2f182 create mode 100644 fuzz/corpora/asn1/86c64423abfda4d7a144a31cef1b1d736191441e create mode 100644 fuzz/corpora/asn1/86cfc8478b936ee8ee6cdcf2710d102f24da4963 create mode 100644 fuzz/corpora/asn1/86de83add1e63681cc0e90409b5fdee134625ebb create mode 100644 fuzz/corpora/asn1/86e58616fcb7e72e177f4f08c94feb3eea520d1c create mode 100644 fuzz/corpora/asn1/86e623da9cf65a100e6c591093f34890d1cc76a5 create mode 100644 fuzz/corpora/asn1/86ebaef04872865f12313999570a4d8659650756 create mode 100644 fuzz/corpora/asn1/86f7d58f32cc29574aac9e43d78bae8d5556c03b create mode 100644 fuzz/corpora/asn1/871342285eacee7b1406fa6f3d05f6f5e6cb31d2 create mode 100644 fuzz/corpora/asn1/871dddf75b9a25773af5f5b3586ff5d456fedb95 create mode 100644 fuzz/corpora/asn1/8731774e9647784b2431094f56a1439ac193319b create mode 100644 fuzz/corpora/asn1/87352519dfd539d56966f95ca2d88e1ade9c1194 create mode 100644 fuzz/corpora/asn1/8740ce83f34d6b729e4d26edb96c735e1c814638 create mode 100644 fuzz/corpora/asn1/8755475be27b210d37493dd346286537631859ea create mode 100644 fuzz/corpora/asn1/875aeb5360aa071c298b7f61b17680af6cf97fba create mode 100644 fuzz/corpora/asn1/87733535e07f211f82919c4e887662d4373a7376 create mode 100644 fuzz/corpora/asn1/87ba9ea309dc3b30c7c3cbf138c1f89349e75af8 create mode 100644 fuzz/corpora/asn1/87de163d2bf2ba99a45902fe8f9101221bcd38f3 create mode 100644 fuzz/corpora/asn1/87ec409694cf7a9ab8789c738b4cee42660a3e86 create mode 100644 fuzz/corpora/asn1/880dfd376f29ef69c385c71a4ae3d1b79b0b8e4b create mode 100644 fuzz/corpora/asn1/88142b7e55004fa233131186d27e2dd993e2160b create mode 100644 fuzz/corpora/asn1/883a0ac84ef88903e053a5a3516e8fad4e798c1e create mode 100644 fuzz/corpora/asn1/8854fe64ace7c587d2d2daf84feaa3d592dda63a create mode 100644 fuzz/corpora/asn1/8878517eabb672daf49fe7cc91d764397c8ecec4 create mode 100644 fuzz/corpora/asn1/888cf7a322f221a988ea57648f334eb83be5af97 create mode 100644 fuzz/corpora/asn1/889c4637c1e34d7170f592c45e7ccecf1bda9e6c create mode 100644 fuzz/corpora/asn1/889f9128b7546aede28e1233d9fe962cd9a314da create mode 100644 fuzz/corpora/asn1/88af3aa5cf64cd01ed2762c63be919442cc2ea6b create mode 100644 fuzz/corpora/asn1/88bad51f0b774b183636b47776d277713e0e8d30 create mode 100644 fuzz/corpora/asn1/88d93e5a5cb88bf42c869c927c7e69c2589a17ec create mode 100644 fuzz/corpora/asn1/88db530db5c94f8819063cad3f460a1036e94c79 create mode 100644 fuzz/corpora/asn1/88ddb4e81912bf202a4199a72ab84ace6d7627c6 create mode 100644 fuzz/corpora/asn1/88ded527751bd0309425f879b02f42fbda28c82a create mode 100644 fuzz/corpora/asn1/88edff360184ea9a4f965c4e2db9a739d0c9f393 create mode 100644 fuzz/corpora/asn1/88f363bb62151a2fb63b488597f15bbfee04c562 create mode 100644 fuzz/corpora/asn1/88f484e76d425e5b03ae6a300796129d6c3f8648 create mode 100644 fuzz/corpora/asn1/89171ebc740f1398c7198ae8f658db99505005c9 create mode 100644 fuzz/corpora/asn1/8932120d2b17f0ce46a0d17968668b242fa2e297 create mode 100644 fuzz/corpora/asn1/897e8033cc44106dbfee860533b3fc1178085355 create mode 100644 fuzz/corpora/asn1/89be7dd7941f1ee354b26bd0c43912d99ec85606 create mode 100644 fuzz/corpora/asn1/8a15be1c1371bf97b7680a5dc1d44386fe69e8aa create mode 100644 fuzz/corpora/asn1/8a240ada7afad50186cd02e826d7f9dc9ff7d794 create mode 100644 fuzz/corpora/asn1/8a35f35c85fc08f93eefb66944cb7f5c84fc5686 create mode 100644 fuzz/corpora/asn1/8a3ce0c40ccb925bd5fc317e5776fb811dd0a4d7 create mode 100644 fuzz/corpora/asn1/8a3ed947bec48e57d744380ff9c01f34e0a07386 create mode 100644 fuzz/corpora/asn1/8a4691a75497b96281a51fa37fdcde011945cd78 create mode 100644 fuzz/corpora/asn1/8a620ac48eb9bc71d3eb168869f95636470474e6 create mode 100644 fuzz/corpora/asn1/8a6c107567991ffe8c2d8f13a43814c99cc20ba9 create mode 100644 fuzz/corpora/asn1/8a8a00a76717236cacea7f1768b9be76734af274 create mode 100644 fuzz/corpora/asn1/8a97ffc79d8a91e018e5ad714bd9f4950deafc65 create mode 100644 fuzz/corpora/asn1/8a9c988b68a21bc92660275e44cf75fc6c4dc08f create mode 100644 fuzz/corpora/asn1/8a9fe69e93f17c2b189ec45ff583b667c4021c47 create mode 100644 fuzz/corpora/asn1/8afda039c681f56ebdcefb043c94bb47e6e3abbd create mode 100644 fuzz/corpora/asn1/8b2fdf377002804be2fdf93fda627c9a6a45eea5 create mode 100644 fuzz/corpora/asn1/8b5d5a6786cf8a99ed3894710c3e962b78a474e5 create mode 100644 fuzz/corpora/asn1/8b70ec463df54c76748c345f315c43a11cb6233b create mode 100644 fuzz/corpora/asn1/8b7b5f3d3306fe2720ad45b11db4207d2a06a669 create mode 100644 fuzz/corpora/asn1/8b920c2d24b6b63b0d1ea8d7c107c787700e9458 create mode 100644 fuzz/corpora/asn1/8bc2d2e0d3bcac8e389d3e3e00a3d1a6c8ed1ddc create mode 100644 fuzz/corpora/asn1/8bcd7179354e485615c9fe24ad1ef9ee11700982 create mode 100644 fuzz/corpora/asn1/8be76e6647759d200fb98208e04bf3a0ad217013 create mode 100644 fuzz/corpora/asn1/8c42c6631f3e7192977bce32cbcb5251c50b4549 create mode 100644 fuzz/corpora/asn1/8c4f6b57db3895a173bc354ba3420d8db9997130 create mode 100644 fuzz/corpora/asn1/8c5b79c06685768f9cce266d827b1b9043fe6668 create mode 100644 fuzz/corpora/asn1/8c5f23791786a76a2e2f1b5148d5daa46932c15c create mode 100644 fuzz/corpora/asn1/8c96f46a022eae22857d676e9f340cfad45f1b5c create mode 100644 fuzz/corpora/asn1/8ca02b270f487061d7a76284e54ad5955e7ffd4a create mode 100644 fuzz/corpora/asn1/8ce054316a21d21cf2da78cb3f50c0ec5a16a3cb create mode 100644 fuzz/corpora/asn1/8cf9d9ece0a99dd6b170c17f7c1472b438a9a564 create mode 100644 fuzz/corpora/asn1/8d0947ba564ebcff49a305e5637902f7408fce86 create mode 100644 fuzz/corpora/asn1/8d0da7e97a802369ea1f231329b42abd2668a52d create mode 100644 fuzz/corpora/asn1/8d112eb1b09488da7e3c083bcc6c47519733f997 create mode 100644 fuzz/corpora/asn1/8d846d929136860138c50e9bde1b21815317741c create mode 100644 fuzz/corpora/asn1/8d88c5b54a503793527df2b1a49a2d87f7a65172 create mode 100644 fuzz/corpora/asn1/8d94b6b144e6c31a512480e327ba1d55e6c40684 create mode 100644 fuzz/corpora/asn1/8dad836f7c6e6bac817faf8578bd18779e2f7b96 create mode 100644 fuzz/corpora/asn1/8dbe30c3a9491ff4a341f22d59f6e49efd460e6d create mode 100644 fuzz/corpora/asn1/8de22b17158a5c1ea3c19df805833e6af507474a create mode 100644 fuzz/corpora/asn1/8dea0b00ee2f4fa2123e4a625de01175228dbb77 create mode 100644 fuzz/corpora/asn1/8df8349aef1e3ca3913d96b9b952549fe152a6fa create mode 100644 fuzz/corpora/asn1/8e177f6188395a681832bf507dad72e3d594ac34 create mode 100644 fuzz/corpora/asn1/8e2f28cfe7da92a0439ea13fdb931fc3a4eca53d create mode 100644 fuzz/corpora/asn1/8e315067a4eb9c579551e2d7fa4ce51268683d40 create mode 100644 fuzz/corpora/asn1/8e38064ef53321c690045f42f9a1c5c10c71b2cd create mode 100644 fuzz/corpora/asn1/8e3ecafc510d3779664126e7624032ee4c9831ee create mode 100644 fuzz/corpora/asn1/8e6035b597d6f72c7e9d0444f1cfb4696b445cc6 create mode 100644 fuzz/corpora/asn1/8e88f8c0c2055a4d922975729ebd941697fdecef create mode 100644 fuzz/corpora/asn1/8e8d5b062de3e56caf3dba9a8ed051cd8065a460 create mode 100644 fuzz/corpora/asn1/8ea715f670d80de73b8882166d04ff47ab50f8a1 create mode 100644 fuzz/corpora/asn1/8f0cb7659c67a56b9326c1c76811ca30b5322881 create mode 100644 fuzz/corpora/asn1/8f8a16c57569aa17d7bcab7a9b0788e1f49da456 create mode 100644 fuzz/corpora/asn1/8fb64f11ef64014d9916c151c57d2c18950657bb create mode 100644 fuzz/corpora/asn1/8fbde52ae0382f34b786c3e630a46d9aba23d064 create mode 100644 fuzz/corpora/asn1/8fbf2e3ddf1b59b02943dc23ed8398a864e25ea8 create mode 100644 fuzz/corpora/asn1/8fefa1d5ab1d739c1a714a42b8198ff08e2760e3 create mode 100644 fuzz/corpora/asn1/900e8ed82b17fae4629140f411d6630a131a62c4 create mode 100644 fuzz/corpora/asn1/9025bf0e7a6838bccc46358183045edc4c2476b9 create mode 100644 fuzz/corpora/asn1/9028fd78431d80b784f29ed193b8d7a6baf32d27 create mode 100644 fuzz/corpora/asn1/9031f395ceae12bba0efb424c63112b95b8c6b30 create mode 100644 fuzz/corpora/asn1/906af1b43376079567fe82d774c83bca698d0748 create mode 100644 fuzz/corpora/asn1/908bf3430b00cc6a53aa0b416ea3315624421453 create mode 100644 fuzz/corpora/asn1/909dce73fd720ad846fad035fc11f7722314488d create mode 100644 fuzz/corpora/asn1/90a7c2baf151aaa282a291c84db92254e568b9fb create mode 100644 fuzz/corpora/asn1/90c61c5d13e5f9d3ef289f27c415ad85f46a6822 create mode 100644 fuzz/corpora/asn1/90d812152c5d2256fbb1d5f00ffdf93f890f0ebc create mode 100644 fuzz/corpora/asn1/90e6924c9c61028f2902d6e31c85d874445be393 create mode 100644 fuzz/corpora/asn1/913cdfc68891a62ef98caad9b5373c8b4cf90af0 create mode 100644 fuzz/corpora/asn1/9150f06b63c6119bd8667c811a03a07e8d0b940f create mode 100644 fuzz/corpora/asn1/915e6ab254b65363a90ae6988e747e224676b649 create mode 100644 fuzz/corpora/asn1/91682bf909bab9c231f343d82e9e481c27301bef create mode 100644 fuzz/corpora/asn1/91768aa23a920cfd5f6d79f212e613d17d9cbaca create mode 100644 fuzz/corpora/asn1/9187441d2a416b9c45a43923b30824915ae0d6fa create mode 100644 fuzz/corpora/asn1/91890125fbc8757458a0110ac9f6647340efe4a1 create mode 100644 fuzz/corpora/asn1/91932ca9f0f2eed41414641b86a43d73dabf01dd create mode 100644 fuzz/corpora/asn1/91b49745ae456f461806134ba044fe50a63ab3eb create mode 100644 fuzz/corpora/asn1/91bff75dcc29403e1ca9b26cc19cce9b0c86dba6 create mode 100644 fuzz/corpora/asn1/91c5896078447d9af3b4d9c213cb3cd93b9dbfdf create mode 100644 fuzz/corpora/asn1/91d059164c74ee8014af522df99ac8779b2d6cb6 create mode 100644 fuzz/corpora/asn1/91dddf08912733492c1826325add870e2a249d18 create mode 100644 fuzz/corpora/asn1/91f04b0828b4746a8a1ad4c40aa0f20619f5fa09 create mode 100644 fuzz/corpora/asn1/91fa58d15d2c57be3263f0e96ae9e82e422c4167 create mode 100644 fuzz/corpora/asn1/922fd57cc8129cbee30e82d0f03f438626eee166 create mode 100644 fuzz/corpora/asn1/9231e8e3627cdc909f5bd01ee946e572bd1bc779 create mode 100644 fuzz/corpora/asn1/92444f2fb8be0e684d9146796b9d2c531adc9229 create mode 100644 fuzz/corpora/asn1/925975810bccaf5754cda461d6a00ab5b57014f5 create mode 100644 fuzz/corpora/asn1/9261aef9764d90793c2c928688bfce4b282981d2 create mode 100644 fuzz/corpora/asn1/927d7281f79f6ea2748e00b1438079a079361aac create mode 100644 fuzz/corpora/asn1/927d922ec4f76b06db1cef1e53104ffd60852d1b create mode 100644 fuzz/corpora/asn1/9285a30532fa13a64c2a58e7d162250b65dc6b8c create mode 100644 fuzz/corpora/asn1/92bb4747428f106b18e1eac9c17d1219c19b6890 create mode 100644 fuzz/corpora/asn1/92d54fbb7535ee6b2d7b4a6c4de8a93809e39da9 create mode 100644 fuzz/corpora/asn1/92e2e9117c0cdf3ee4a63a723d83cbd210bf962d create mode 100644 fuzz/corpora/asn1/92f440e52298b51e4def511ebbd572f5491ee432 create mode 100644 fuzz/corpora/asn1/9339c16f3c58d52a77a6404b9082abd65915e3a1 create mode 100644 fuzz/corpora/asn1/933c6669bbf937919b170ab901a1ed70f9a1cddf create mode 100644 fuzz/corpora/asn1/93b125cbaf3f81455844d599ceee445581c04008 create mode 100644 fuzz/corpora/asn1/93b79527fce36486259125cb816283e7328cb46e create mode 100644 fuzz/corpora/asn1/93be46be6d416f00ab1c35f8dd1a50cb6720819d create mode 100644 fuzz/corpora/asn1/93c94b1238c8ddf5d03ba490a33184d749517aea create mode 100644 fuzz/corpora/asn1/9411db3d7c2982d1e6496d520873ed1c0a35943b create mode 100644 fuzz/corpora/asn1/9437e0bb3e2449feb8b50bcb633eb0d71b7befc6 create mode 100644 fuzz/corpora/asn1/943812cfb14a99b7710433e61987ece1eb9fa7d1 create mode 100644 fuzz/corpora/asn1/944a05fb02e54a8fb8ca7410a4157995b0a3d6d3 create mode 100644 fuzz/corpora/asn1/944dacc9b7274eb29aea5d9bcbf6dcc8b9ae85f9 create mode 100644 fuzz/corpora/asn1/9490079bcea89cf653922d52ff48603a4bd87772 create mode 100644 fuzz/corpora/asn1/949acb1b7892d543b6dc648139ed9812811c8d1d create mode 100644 fuzz/corpora/asn1/94b78245590f69ffebba1f9ef7d1db9d3bad02b2 create mode 100644 fuzz/corpora/asn1/94ca7825e86c19426b963116d450ee4207ddbc7a create mode 100644 fuzz/corpora/asn1/94ddb2de2c3ff69337fcbc3a6a4160d47fdd3ab7 create mode 100644 fuzz/corpora/asn1/94edcfe867d7ef8ed1f801ba6ecd3f62670ccbee create mode 100644 fuzz/corpora/asn1/94ef6a147022a37b5771d44031b5fd70127ec7dc create mode 100644 fuzz/corpora/asn1/95151ab7f74a4d6e3dae9c7e0ddaaf71d3b826eb create mode 100644 fuzz/corpora/asn1/9515d14bd90cbd52024c381c0e3773a398f9d7f1 create mode 100644 fuzz/corpora/asn1/953441f530ccf7fc92213873f1bc200ea281b3a4 create mode 100644 fuzz/corpora/asn1/9540574e5ca9b5171ffa240ae88be5350b74bc09 create mode 100644 fuzz/corpora/asn1/954a6c812dc7cebc3e06971504decee47e315d58 create mode 100644 fuzz/corpora/asn1/95b1fe051c1f47a125692ade718abe89ce78a185 create mode 100644 fuzz/corpora/asn1/95c9d5b4954a01cb686e0c2522930cf2daf65a62 create mode 100644 fuzz/corpora/asn1/95d83ac9892aacedd57ed4656beacd4af3057f5c create mode 100644 fuzz/corpora/asn1/95dd6d0bea087a3ac16133cac5d145fe5b046333 create mode 100644 fuzz/corpora/asn1/95e64ee92a178134bc72cfaa1a24ac9ae04ade73 create mode 100644 fuzz/corpora/asn1/95e96c546864a60dfadfe00a40ee50ec0653d333 create mode 100644 fuzz/corpora/asn1/95ecc13f116ead1bff0cb5ebdbf8f19160db3b8f create mode 100644 fuzz/corpora/asn1/9625223e87f5d74b3d383157cde8cc9606534cc3 create mode 100644 fuzz/corpora/asn1/963434a5f1f31a3c70f32f7bcb1ff855e21c81b4 create mode 100644 fuzz/corpora/asn1/96708faa7a9710a14c22198756b14b5d6219c74b create mode 100644 fuzz/corpora/asn1/96a7859aa3dd91c6c72452e7c239d07eebed1791 create mode 100644 fuzz/corpora/asn1/96b69654fc767402e0a1fc0f9b3894be51ed86c3 create mode 100644 fuzz/corpora/asn1/96db85868eaa21113fc9f48ed398fade8db0c113 create mode 100644 fuzz/corpora/asn1/970a4b0d697594259b509b4166f668b16a7fdc49 create mode 100644 fuzz/corpora/asn1/971e88c2fa3374048e14915a8eb6499c9a54b4ce create mode 100644 fuzz/corpora/asn1/97252b5cc09a03eb18380ed8fa6870c8274cc92a create mode 100644 fuzz/corpora/asn1/97424ef61480899ad77d96e531bad4c973cdcdca create mode 100644 fuzz/corpora/asn1/9759aa3802ca395d63adcf8a3d1e714320eb7f98 create mode 100644 fuzz/corpora/asn1/97845cd279e420e5ebdff0c418b81995a49c8663 create mode 100644 fuzz/corpora/asn1/979a814b4c49efcaefa0837784649b45cb5ae300 create mode 100644 fuzz/corpora/asn1/979f0e4cda9e1f716459768776b3052d4b860958 create mode 100644 fuzz/corpora/asn1/97b359b43db5cb65daf7b01dff560e6078f70794 create mode 100644 fuzz/corpora/asn1/97c14a945a03ada2ff30882277e688f938b7aecc create mode 100644 fuzz/corpora/asn1/97e94b7ece1d23078babcc5aaf23797459bd52da create mode 100644 fuzz/corpora/asn1/980b9f512d3c9c7098df03c7ae0b6eba64dcbd72 create mode 100644 fuzz/corpora/asn1/9842a93e311d469f45fcc6aeadd341b8c1896d95 create mode 100644 fuzz/corpora/asn1/9871b89c4eeff7c675784d2c38cc0c5748e0296d create mode 100644 fuzz/corpora/asn1/9885398ca5b6ac0e543603469cabfe5d720f8d3e create mode 100644 fuzz/corpora/asn1/9889734058e0ef3a309319fc4f74c4a13eac32a5 create mode 100644 fuzz/corpora/asn1/98a0d88d12ac1f8dd0df362e3f52be743bdef80a create mode 100644 fuzz/corpora/asn1/98e0d1b02d0f41f655903c896af53ec853480336 create mode 100644 fuzz/corpora/asn1/98eed1c842b6773a9e1caedd2fd2d7e9bb897926 create mode 100644 fuzz/corpora/asn1/997bf97896f1648b29ce03f86a1bbfac2d78e2c6 create mode 100644 fuzz/corpora/asn1/99c34c19d3f19b724574e4df445b4d4a01b3d60e create mode 100644 fuzz/corpora/asn1/99f0b514eebb0759346e95cb3cd5e4a45aaa1c6c create mode 100644 fuzz/corpora/asn1/9a0c616693260f53f2f4cf9320e29fd049fb7a0a create mode 100644 fuzz/corpora/asn1/9a0f7fe4dce713051bc336d746a7d4429c01ab76 create mode 100644 fuzz/corpora/asn1/9a2b993d569bf7c1b847853276c9299dabb4e0da create mode 100644 fuzz/corpora/asn1/9a310213f40ce2ce18a18fb964d8c835b9794215 create mode 100644 fuzz/corpora/asn1/9a408c3b78ae933f2c5247abc1bbb03d889baef4 create mode 100644 fuzz/corpora/asn1/9b10a5b0919f2d4ba82e3c3c356ad583d88846c7 create mode 100644 fuzz/corpora/asn1/9b11e90a2625175c66844440a419fcfd74b2b508 create mode 100644 fuzz/corpora/asn1/9b4640abefd8e47a082ee9078737e1faff9b1aaf create mode 100644 fuzz/corpora/asn1/9b689b53d50e31adfa83c41a4e48d6ffb7af818e create mode 100644 fuzz/corpora/asn1/9b7c5855f3cf909bae77fb4ccaba1f1433afd677 create mode 100644 fuzz/corpora/asn1/9b7f052595f80a46ce9d98025407097a9473d09f create mode 100644 fuzz/corpora/asn1/9b86d55a288b0122f5a0b4a701e1a2129e5d38d6 create mode 100644 fuzz/corpora/asn1/9b8ca8c37ac22b8c23218129875f8cf3c087e169 create mode 100644 fuzz/corpora/asn1/9b99593353a610c4bee0d6a94a01a3296080c0fb create mode 100644 fuzz/corpora/asn1/9b99d75e8e3fc2e040d367054905c6788fd1443b create mode 100644 fuzz/corpora/asn1/9bb04c53cf011b3521274628a4f81f2421e6af88 create mode 100644 fuzz/corpora/asn1/9bbb9a121a70a0bbbab4dd38cc2573e15cb36918 create mode 100644 fuzz/corpora/asn1/9bdc12b18785d6062f7ce294a68a84d517c44e8a create mode 100644 fuzz/corpora/asn1/9be617f4f9fc4ea855e23e47a23383b198173218 create mode 100644 fuzz/corpora/asn1/9c1a7d489aae9be9797a8b7c2ff4ed24a621de35 create mode 100644 fuzz/corpora/asn1/9c24525635a1f51d427fd6341fcbb56e26077dea create mode 100644 fuzz/corpora/asn1/9c27903b89a25c9acc3a7500a5663b39c3bee700 create mode 100644 fuzz/corpora/asn1/9c57ef206a217293acc2b87466d15227d992d0c7 create mode 100644 fuzz/corpora/asn1/9ce1913a1c97e9d6922ae8540caa7cce5c7cd6e0 create mode 100644 fuzz/corpora/asn1/9ce32e776a05dd95ee556700837ad3fc49daacda create mode 100644 fuzz/corpora/asn1/9d114916d479b7302c5ca80cfb464e364fbb4c55 create mode 100644 fuzz/corpora/asn1/9d6e3acbef60c6540a48a540e1f2ead53e08714c create mode 100644 fuzz/corpora/asn1/9d6e49cfa5754764abddaaf6de39b768c8b52d69 create mode 100644 fuzz/corpora/asn1/9daced8012d54a56a3776b4f9f27d6596e5e31ec create mode 100644 fuzz/corpora/asn1/9de60666a8e1a9e3fc935dbb80710e782b6edfaa create mode 100644 fuzz/corpora/asn1/9dfb4fe64843ad69b27a5084d19e84b59eab414c create mode 100644 fuzz/corpora/asn1/9e162dd820f136020a20d59394c49e161bfbcf1f create mode 100644 fuzz/corpora/asn1/9e1d3b6da2ef9e59288864f86fa3477d8ef4111d create mode 100644 fuzz/corpora/asn1/9e382218af929ab3d6562e371254895f9f270b9a create mode 100644 fuzz/corpora/asn1/9e5599a1f97027da2db16aa861eb154891fe3a8f create mode 100644 fuzz/corpora/asn1/9e6e67874284718a198986fb82e6d705e0c929a0 create mode 100644 fuzz/corpora/asn1/9e9a14322f46cd8d416c38535d4e786055539195 create mode 100644 fuzz/corpora/asn1/9e9e204e31145e94f84fab7eafc655df857ab5f3 create mode 100644 fuzz/corpora/asn1/9ea2f008914511ce5b36e0851927e6c950694ebb create mode 100644 fuzz/corpora/asn1/9ece9d154d92f21527dad6edf284cd8004e587d4 create mode 100644 fuzz/corpora/asn1/9edbed0bb7eac3dd4975c8b375d9c94a9e7c108f create mode 100644 fuzz/corpora/asn1/9f015c6b63b2e71943d2ec961c3593595efc8a55 create mode 100644 fuzz/corpora/asn1/9f2dce933fc5ffafb5c70ed6319de4f1090c75dd create mode 100644 fuzz/corpora/asn1/9f3e80dbaea3f9789e2aa92f3460de5cd6d2b852 create mode 100644 fuzz/corpora/asn1/9f7bb3a1837cf33955e2789306c87c00b808d457 create mode 100644 fuzz/corpora/asn1/9fa0e47181b655ccdee004688191acca594dcf9b create mode 100644 fuzz/corpora/asn1/9fd49fc3b774fda940c3debeace4ddaf33e850a3 create mode 100644 fuzz/corpora/asn1/a04accaf67b08cae4880d7d3ac90660eccd59b74 create mode 100644 fuzz/corpora/asn1/a057a74b5f6d468c77da0f95f321e945ad8c28cd create mode 100644 fuzz/corpora/asn1/a077a98b8115cd701582cda9daa417005959920b create mode 100644 fuzz/corpora/asn1/a09cdd5b762f4aa0a2d707e5ce1f8da89dfe9041 create mode 100644 fuzz/corpora/asn1/a0bb33577de5a58c628cde37c2c41fdf471d3c29 create mode 100644 fuzz/corpora/asn1/a0df2ee8ed2bf3267040b372081b4046b1f711dd create mode 100644 fuzz/corpora/asn1/a103b8032003741f1ff10266a27feafa1f1dfcad create mode 100644 fuzz/corpora/asn1/a12a9c4719487cae087e57d81f14d5a7b7aa4c3c create mode 100644 fuzz/corpora/asn1/a1311db501de3b1e09e9f2374cb8981684ea18ae create mode 100644 fuzz/corpora/asn1/a14da698592d363d287c59ef23cfff064b57502d create mode 100644 fuzz/corpora/asn1/a14f5a282f2f196d133262580a609c45a583f8cb create mode 100644 fuzz/corpora/asn1/a16ecdf8babe7d8a94127a58cfb97ca10848349e create mode 100644 fuzz/corpora/asn1/a18a0073088b19a2e8c111326d60400e53e338df create mode 100644 fuzz/corpora/asn1/a18dddbfe7c4a0f220280fa1078e3ed6d5a38ca5 create mode 100644 fuzz/corpora/asn1/a1969fad9472211e36c1ac71a23197d3f3ea6c30 create mode 100644 fuzz/corpora/asn1/a19f3d91f2a5b08adad610dd8288c7e5ec90f9e7 create mode 100644 fuzz/corpora/asn1/a1a31fa01dcc0518e5b710d46f72f7b74e159a73 create mode 100644 fuzz/corpora/asn1/a1ad0f86a27cd23e4d833772b0df48e26cf00075 create mode 100644 fuzz/corpora/asn1/a1b39a9925312e0a9eae02b49e8651049e2e75b3 create mode 100644 fuzz/corpora/asn1/a1e622632efdcc7b9e62ce52b8e8c2131af3f89e create mode 100644 fuzz/corpora/asn1/a1ecaf52db40a50589a6f3a4406410921aea88f3 create mode 100644 fuzz/corpora/asn1/a246ea58b5098dc9e1fa0a58625c968372a4536c create mode 100644 fuzz/corpora/asn1/a24e6cdcdc67c317f9ce567a0bf3d7040066af48 create mode 100644 fuzz/corpora/asn1/a263c6ebaaa07ebb374e021c6e64795c6a8d2021 create mode 100644 fuzz/corpora/asn1/a27fe454e6dd7a67f42f40e157cd0055ac80ed7b create mode 100644 fuzz/corpora/asn1/a2ba566b3693983b462718b7cbfbdb1dc8c5246b create mode 100644 fuzz/corpora/asn1/a2bb3b08efb3db8ee25b824f2b3e78d2ef625c32 create mode 100644 fuzz/corpora/asn1/a2c2f9b1ea7efc25dbfe59d32bcd6253b356b704 create mode 100644 fuzz/corpora/asn1/a2dcac7f79d36a8f7afefc49c4bc7379c922804d create mode 100644 fuzz/corpora/asn1/a2e6c3c3a1f5c250b5822ec833b86bd8c551a7f3 create mode 100644 fuzz/corpora/asn1/a2f27e004e15b13bd1b3a13c8a8b3d8cd861d541 create mode 100644 fuzz/corpora/asn1/a2fc05d17bab051245a8ae57103317d586056891 create mode 100644 fuzz/corpora/asn1/a32bcc9fb3feaaf6f267c36771048ee380416d37 create mode 100644 fuzz/corpora/asn1/a32c9b2ac23848db5a054568cda217254fcf3cf3 create mode 100644 fuzz/corpora/asn1/a33cc48c38a7737827aabb790844617b2521217e create mode 100644 fuzz/corpora/asn1/a3433f35a5bd1a76fd464245b8f2179d8e9d8cb9 create mode 100644 fuzz/corpora/asn1/a34b23143e9939051060a5bce4b1bc25a65daa9c create mode 100644 fuzz/corpora/asn1/a35135f936773bb766efb3b8808ee90fefc7aa12 create mode 100644 fuzz/corpora/asn1/a3513dc58c4109492b01c6f91364354aebfcdfdf create mode 100644 fuzz/corpora/asn1/a351efe7912a239d90328b23887a1227bba53ae1 create mode 100644 fuzz/corpora/asn1/a351f0e1eb96cdcb9ed4bab2b4e8a464d9d323f1 create mode 100644 fuzz/corpora/asn1/a353e67df12fe9c1acdc62d8183b39912f45b81a create mode 100644 fuzz/corpora/asn1/a3584d095535dd2aafc9e4249ae42d7f89377596 create mode 100644 fuzz/corpora/asn1/a358fbff3f6ec04e0e03af43ff5c9c96cf9c7a83 create mode 100644 fuzz/corpora/asn1/a379110303fcbae2f8be17306cb2155d1309fa97 create mode 100644 fuzz/corpora/asn1/a38a0e74486c7fe724d244b09d9030b22866f461 create mode 100644 fuzz/corpora/asn1/a3a22b8e9d26b4e8ef09c5b0172503dc133d3c26 create mode 100644 fuzz/corpora/asn1/a3bcd5261e8b3270cc232c5e8bbc877c2edba456 create mode 100644 fuzz/corpora/asn1/a3bf97523a6c8b39ac4b142e63a2e161b7e7f635 create mode 100644 fuzz/corpora/asn1/a3c846324bdd94ebf1ce8faaa2fe64960f49f8c8 create mode 100644 fuzz/corpora/asn1/a3c90d9fdf6359f836d128811af832a9b8bc45ee create mode 100644 fuzz/corpora/asn1/a3ce2fa8996f8622c86fd5c431f10013cfd6463c create mode 100644 fuzz/corpora/asn1/a3ed7a243b2f7a064bc3f286ac20b28af7177e50 create mode 100644 fuzz/corpora/asn1/a40dc42bb49e387c2d22ed27bcb4e9973d24170b create mode 100644 fuzz/corpora/asn1/a4175fc6f3fe91fd863dce5dd7cc5bdaa93c5f13 create mode 100644 fuzz/corpora/asn1/a42992b2c6865f208a50a443b9cc263fca16bb8d create mode 100644 fuzz/corpora/asn1/a441534047350f7b3e9996a918f985aa079a9068 create mode 100644 fuzz/corpora/asn1/a45a9033df3763417d16c5bfef1ab879a87347eb create mode 100644 fuzz/corpora/asn1/a4b0d25ab74067454d2ccaac0932dd302da50bee create mode 100644 fuzz/corpora/asn1/a4b2fc8eaf3b7d1598903f86c69b72149bb38983 create mode 100644 fuzz/corpora/asn1/a4c78ce6ce8b2e285e1e0cc69c38df82b93c64ac create mode 100644 fuzz/corpora/asn1/a4cd705f18dc51047c8d5de0176f9b97aa027307 create mode 100644 fuzz/corpora/asn1/a4e0f634448df07572fa08dd45ae87c08441f79b create mode 100644 fuzz/corpora/asn1/a51b75759fdace4e77f905bec9d2efe2f017385a create mode 100644 fuzz/corpora/asn1/a528b22e79b7968b3baf9553abc8428f73358f70 create mode 100644 fuzz/corpora/asn1/a5517e41d62d6664d51b85b3af87a4aec27afc56 create mode 100644 fuzz/corpora/asn1/a551f0ab5a3b6c495eeadb243ed3f0741d3673fb create mode 100644 fuzz/corpora/asn1/a5675d8ff49963faa5d37212d94cb4b4fd26bd84 create mode 100644 fuzz/corpora/asn1/a572cc01cbbd2ac46c2c86ab07634dabe33627cb create mode 100644 fuzz/corpora/asn1/a596f5a44e48c95053d2f40a4bc1cb7d36c7f59e create mode 100644 fuzz/corpora/asn1/a5e1b9f98b2f87b5c3afde0e4087e7be55ccaa87 create mode 100644 fuzz/corpora/asn1/a5fd5c4eaf15d4f630b70b85904a67987488fc50 create mode 100644 fuzz/corpora/asn1/a60bf177afccf9adebd8ba2c9ac2df5dcbb00a36 create mode 100644 fuzz/corpora/asn1/a6529c081cd58c12e038b606490b1e43f1649c5f create mode 100644 fuzz/corpora/asn1/a68aa7707216ff1d9cfd65447995cebd672b2078 create mode 100644 fuzz/corpora/asn1/a6cddb3f0da71ba92e6714d3d2630249c0bc5d96 create mode 100644 fuzz/corpora/asn1/a717af7f05576cfb9a14f9ed55dfac760ee9e677 create mode 100644 fuzz/corpora/asn1/a72ebce1a78dc3c2c5088343a2296f15f768b318 create mode 100644 fuzz/corpora/asn1/a767a7a832e0f705d30c9c8ae21e2f2a2de5ac84 create mode 100644 fuzz/corpora/asn1/a77ccf5ad292991e701e6b5e5b6c87a2ca021f31 create mode 100644 fuzz/corpora/asn1/a7fe19db8c4d4412718dbc6d614479afe973000a create mode 100644 fuzz/corpora/asn1/a810761bc726a1b67205b7411f1bb0822360eca9 create mode 100644 fuzz/corpora/asn1/a8178e9b734b5aaa85b365d8c580ee63f0864e7d create mode 100644 fuzz/corpora/asn1/a818cde13875d37c9ffd8ef8cc89eeb39f4fd94c create mode 100644 fuzz/corpora/asn1/a81caee035512b31c5f19ac00b06aeca2b84cf60 create mode 100644 fuzz/corpora/asn1/a8229a7c6c8a0952c44d7e33353436f9db7ef971 create mode 100644 fuzz/corpora/asn1/a843d45b52f07859ccf7284daf5d667877ebcc52 create mode 100644 fuzz/corpora/asn1/a84561620bcf44c532c93834f4077c6ff31ddaec create mode 100644 fuzz/corpora/asn1/a85c2c4dd027f6ee658a96dac823783ecd6cf3c2 create mode 100644 fuzz/corpora/asn1/a85d505571794366d1cee098abaaa58e0c946846 create mode 100644 fuzz/corpora/asn1/a8aff915a5d25931f59df57de47da2a4105e3a32 create mode 100644 fuzz/corpora/asn1/a92b936345d72f9e1fb72867e28314d9b1e77f41 create mode 100644 fuzz/corpora/asn1/a939770c360ddb1f732a049088dd75a5c39bfb40 create mode 100644 fuzz/corpora/asn1/a946ef4e0fc1c116d421a91fe049c8058436f75e create mode 100644 fuzz/corpora/asn1/a9572ac94498bcbf3d1bf9fe5c4b456a53e93487 create mode 100644 fuzz/corpora/asn1/a95d0447164f782f9a7aab99cabc5bba5b2e22ef create mode 100644 fuzz/corpora/asn1/a9979cea7013217c58fd7cd5acf6f02342afba5b create mode 100644 fuzz/corpora/asn1/a9994fe57855b1cded987ea1a838b6e88eaff696 create mode 100644 fuzz/corpora/asn1/a9ae59efc42ac1ad5bb0f73ca1e931e4ebf3d6c9 create mode 100644 fuzz/corpora/asn1/a9b12748ac826e8d2aa299cc75ed61e5ab37df16 create mode 100644 fuzz/corpora/asn1/a9b16c9d58cb0ab51c32cfb705011f3c1cd9ced4 create mode 100644 fuzz/corpora/asn1/a9cca113daeddb7ad8e05b0ab21262073ff539e7 create mode 100644 fuzz/corpora/asn1/a9d78e4ceeeeb228805a1cb5cd2bcadab7bcbdcb create mode 100644 fuzz/corpora/asn1/a9f48e191899c46e32a2fe11b0bd334101bc32ff create mode 100644 fuzz/corpora/asn1/aa0d147d61ace98c02e422a51889533e0ccab0dd create mode 100644 fuzz/corpora/asn1/aa3ab86120ef2eeb58121086f924b26e4441dd5e create mode 100644 fuzz/corpora/asn1/aa3bcbc8e1d9f7f445dff0af3be37c5770957a06 create mode 100644 fuzz/corpora/asn1/aa5db18903ed99f2f95ddcbf8bac87194d9c8b88 create mode 100644 fuzz/corpora/asn1/aa6c5226c7f13d6070eaa686245126403c8cfdc2 create mode 100644 fuzz/corpora/asn1/aa8c18af02d21fe7c2d815c802bfd268a225adbf create mode 100644 fuzz/corpora/asn1/aaa02aa4631522bf2e0f437f8423b992c5ff15a4 create mode 100644 fuzz/corpora/asn1/aaf9708437946505eabec6e57986f8ffd82a3746 create mode 100644 fuzz/corpora/asn1/ab1372a06ee698edd7ef2dba6f7f8e393c836f64 create mode 100644 fuzz/corpora/asn1/ab1b863343fc9c6c0b44dddbad5c04be15bf9fa8 create mode 100644 fuzz/corpora/asn1/ab3a6663612e8a5c0924301150a515daccfd56e7 create mode 100644 fuzz/corpora/asn1/ab44d70254cd23ec085a220e8d21670551da398b create mode 100644 fuzz/corpora/asn1/ab60430c3ad4b90ea462b89dcf5161ab80774761 create mode 100644 fuzz/corpora/asn1/ab74a5fc61659cfcc7cd49dc2c06c734c1142a5f create mode 100644 fuzz/corpora/asn1/ab76ac5dede8705aec88c12b07bcf30ecb47e782 create mode 100644 fuzz/corpora/asn1/ab934bf85146aa5d8181d7a79ffa134d4340b10d create mode 100644 fuzz/corpora/asn1/ab9549c22660c5960b9d669034577935157f36b2 create mode 100644 fuzz/corpora/asn1/abb98760eca7b3000c137a7f27e8420714fcbc3e create mode 100644 fuzz/corpora/asn1/abbe8b77418855f49062bf1f32976734a1055f60 create mode 100644 fuzz/corpora/asn1/abc9e9e497204c798aebd27c3328c310f97f2a25 create mode 100644 fuzz/corpora/asn1/abe9a00f6dff728fe630182db638eb7e353ca04d create mode 100644 fuzz/corpora/asn1/abfe0543a91d522b5b0d702bf51d7bec60f8e255 create mode 100644 fuzz/corpora/asn1/ac07cda9b27f68ff7408d878649fa12ecb8b9ed6 create mode 100644 fuzz/corpora/asn1/ac240951a1e98e7633f95ddce0f0222d8c16cd24 create mode 100644 fuzz/corpora/asn1/ac26ccfcef267f5589f2b6e2c680b522e64f449b create mode 100644 fuzz/corpora/asn1/ac3973b4e4ac3d88291ae77e418e259c8c4ae24c create mode 100644 fuzz/corpora/asn1/ac7c9a9298596c8f5e34f9ec9bf0530d99572e37 create mode 100644 fuzz/corpora/asn1/ac80d9a0e8c0fb84ee9fe17163c50e4eb86a3281 create mode 100644 fuzz/corpora/asn1/aca987c1eb92695f07065a2428c34eed2c7a7f15 create mode 100644 fuzz/corpora/asn1/acb8993649cba7d8af2362f44a23f6959dfb47a6 create mode 100644 fuzz/corpora/asn1/acc916d72ed651a339fc34e8e81f6b7281295741 create mode 100644 fuzz/corpora/asn1/ad2e5283f2da103f9ab320dab471ce631cff1b15 create mode 100644 fuzz/corpora/asn1/ad8b3aa5f0ca2d406974a42ce3b2101209d1371b create mode 100644 fuzz/corpora/asn1/ad8e0cd06391e7b3726d3f561e64a73c910f2905 create mode 100644 fuzz/corpora/asn1/ad92f6c2508587c45d9be2aa917e2747ab39d354 create mode 100644 fuzz/corpora/asn1/adb85c2dde3a257cb79f2e18957bc54681685c45 create mode 100644 fuzz/corpora/asn1/ae1d744f59e5fa4f7a663dba74c3982e9450b870 create mode 100644 fuzz/corpora/asn1/ae24c12e5fac26d40c781333054b2ce9bd7a0e86 create mode 100644 fuzz/corpora/asn1/ae3c12d2557f4ab43a8e535824e0bf447d329d74 create mode 100644 fuzz/corpora/asn1/ae45099537056b3372492ecbc844640006e786ba create mode 100644 fuzz/corpora/asn1/ae501556a91580c10cff0b9fa40811a4d75b3951 create mode 100644 fuzz/corpora/asn1/ae955c066f7089cbc99b51b93b2f11d9446a8095 create mode 100644 fuzz/corpora/asn1/aeaee174deb8896c40a81cf68db1107c2c71b4c4 create mode 100644 fuzz/corpora/asn1/aed7fff7e0e6bcf92f575ee1a745104b2f2a04f0 create mode 100644 fuzz/corpora/asn1/aef04ad881e6a1a187ff9676df7ad763393593e6 create mode 100644 fuzz/corpora/asn1/aefb26003b0386a4e594d0967f9f4b7efbf6a17b create mode 100644 fuzz/corpora/asn1/aeff8174bb8c2153c56c9253b6026d3f7f024b3d create mode 100644 fuzz/corpora/asn1/af00e75530c9aef40c431cd4f0dd6a905f435eda create mode 100644 fuzz/corpora/asn1/af208e8b111afdb5d2db9aae8efbdefb3e596856 create mode 100644 fuzz/corpora/asn1/af46d951d44bc0d0fcc63677e8b32f3ee931551e create mode 100644 fuzz/corpora/asn1/af912c2f841892556f25966223e14d04390bdf6b create mode 100644 fuzz/corpora/asn1/afbb899acbc09f2654c4782995667aff7465d616 create mode 100644 fuzz/corpora/asn1/afd8f8225e7de1fe3f0319dfe4a695486386de38 create mode 100644 fuzz/corpora/asn1/aff13a973be50601ecb4fe77b70120e69be0bd51 create mode 100644 fuzz/corpora/asn1/aff7b27d32fa0df219f57fc66d33b698f22a3fa2 create mode 100644 fuzz/corpora/asn1/b00dd955d2b702f62a9003078413fda3ec39e8fc create mode 100644 fuzz/corpora/asn1/b0227ad30d41d5010b84bcc227f59c62fa1e692a create mode 100644 fuzz/corpora/asn1/b043fed996a96f20e3205287361182317ae120ef create mode 100644 fuzz/corpora/asn1/b06a4dc605602c6f16231902b154fb8a3dfc4a8e create mode 100644 fuzz/corpora/asn1/b0729be43b795255095f247e164f63a7639c14dc create mode 100644 fuzz/corpora/asn1/b082abda96118869acd59416b9f0e5a28d74d55b create mode 100644 fuzz/corpora/asn1/b084b7ff679837e7817ee062088eb8ec4ab3edfe create mode 100644 fuzz/corpora/asn1/b0afe2e49d725a0c0dcfae7017b0734d783ecb95 create mode 100644 fuzz/corpora/asn1/b0b5a0d6c1d9fda81b5e6738674b98f40019744e create mode 100644 fuzz/corpora/asn1/b0bb1abde7c47cbbf6adaeb7954ac5f578009834 create mode 100644 fuzz/corpora/asn1/b0c428b5407f01084165fcb71f6dd9e50cc8a664 create mode 100644 fuzz/corpora/asn1/b0ee669b454100ce88364492ade1422ee68971f2 create mode 100644 fuzz/corpora/asn1/b1227ab923eef013ecd1d101b1f3e87e255b69d3 create mode 100644 fuzz/corpora/asn1/b1584e2bab4df28edbb822bd59b256549369b1b1 create mode 100644 fuzz/corpora/asn1/b1628ef88e6aabeb9ae2a6bd1b69fed47acf6ec4 create mode 100644 fuzz/corpora/asn1/b186360bf1dc850b7d5f28a5bd65d612c8f28866 create mode 100644 fuzz/corpora/asn1/b18baa762e27cfcda56045a6e19cacece4336523 create mode 100644 fuzz/corpora/asn1/b197a0392cee27526234bc8d0f91638d7b3df075 create mode 100644 fuzz/corpora/asn1/b1a9e1b6393aba5ad8d127be95a080e1eccfba99 create mode 100644 fuzz/corpora/asn1/b1aa7a5fe7581cae75a7babfeccd0ee9efc61196 create mode 100644 fuzz/corpora/asn1/b1d7b9408fc599c715b47dff34d449831d9c7bb2 create mode 100644 fuzz/corpora/asn1/b1f07ebd3fa7e4eb712faf7ec05b4dc795167b0a create mode 100644 fuzz/corpora/asn1/b1fab2775df3cf209a7f27648696ab85ed9aa5dd create mode 100644 fuzz/corpora/asn1/b228d21f5cfda9fb885b99c8966bb716a10f9509 create mode 100644 fuzz/corpora/asn1/b236221a821c8cc42dad3ad684b1d2ba998c9c0d create mode 100644 fuzz/corpora/asn1/b239c227b3eef54610359cbbe8366624f5114e9c create mode 100644 fuzz/corpora/asn1/b24ae40ee8a0d8d9696d8d218ad79eac3aa4737b create mode 100644 fuzz/corpora/asn1/b27d6690fca6ea18ea4af6224ccb8ddf3cfea410 create mode 100644 fuzz/corpora/asn1/b282f841c1417ce2ee5a1e390d4e8ba21da28d8f create mode 100644 fuzz/corpora/asn1/b2adad5a9a65fa4292fd3bdd4a3ac02a3b150910 create mode 100644 fuzz/corpora/asn1/b2bd4e71d1d31ec34796bf8691add1e3d5a32185 create mode 100644 fuzz/corpora/asn1/b2c0581ccad023eaea970b879524b1050c53821f create mode 100644 fuzz/corpora/asn1/b2cd73c651425bbc635b82623c916c74a4915de7 create mode 100644 fuzz/corpora/asn1/b30de2c7691682047c8cc22fd91cd51bb24f981e create mode 100644 fuzz/corpora/asn1/b3115835956d18e6b34b891b2330379549c7e9f9 create mode 100644 fuzz/corpora/asn1/b3300750a97dde332fcffc5f327a6a97b9e69ba7 create mode 100644 fuzz/corpora/asn1/b3352485f8f27a3bdf328196f27132e6d2be7731 create mode 100644 fuzz/corpora/asn1/b3397133baa9906c64b2edf53d516ce37695e04b create mode 100644 fuzz/corpora/asn1/b33f99a7dbfd0234e11817c28c0dea46fd3156f3 create mode 100644 fuzz/corpora/asn1/b34b790381f928f4035ae463871cb7071daf520b create mode 100644 fuzz/corpora/asn1/b34b8fca7d22b9e512c28922f34b6133c462b748 create mode 100644 fuzz/corpora/asn1/b3647c8c093cc530f363d5dcdb67b0381d1f2fa0 create mode 100644 fuzz/corpora/asn1/b39bd00fc3d8f25e9f8ee1fc433620ce325ea16f create mode 100644 fuzz/corpora/asn1/b3f04dd6bddc045b24d0b35cb2b325e6c83654de create mode 100644 fuzz/corpora/asn1/b3f0e7139a715c71ab0ccf26ab38e01e840e492b create mode 100644 fuzz/corpora/asn1/b3fa298de378e28183ed323c8f3142286d0deaf3 create mode 100644 fuzz/corpora/asn1/b4226270e9402c7797bf213452ae746f7fe24fa7 create mode 100644 fuzz/corpora/asn1/b45e030dc395b317dc9809e25dd9c81cee1fd124 create mode 100644 fuzz/corpora/asn1/b4642540a38fedb7e2f99b2948be00503a69d5e0 create mode 100644 fuzz/corpora/asn1/b47a4b3f55c8d6223dec28884fc68f7633f037a2 create mode 100644 fuzz/corpora/asn1/b491bb0314dc482d49683488980e88ad4f003b6d create mode 100644 fuzz/corpora/asn1/b4c7c4aa4a0897726f45aa61b840726b0cbef86f create mode 100644 fuzz/corpora/asn1/b52362a6bfcac0a3bb9a5b5b7adb147b3bb8b9a0 create mode 100644 fuzz/corpora/asn1/b543223c2409909de2224c8cdf1181922c4019a4 create mode 100644 fuzz/corpora/asn1/b56d8133391d91b023fd0e06a09f6c62cc614f94 create mode 100644 fuzz/corpora/asn1/b57e6b53a973e06138526ba9c25ee85feada4d3f create mode 100644 fuzz/corpora/asn1/b58862574e93a90cfdac660e408a437c1415b7e1 create mode 100644 fuzz/corpora/asn1/b5a2f4137fc391ef7078e4cf916905b5762283a3 create mode 100644 fuzz/corpora/asn1/b5c25a3c24781db73e0367f5afba635b9eceff32 create mode 100644 fuzz/corpora/asn1/b5c40cff2adc035646538d66bb3d9040c457ef07 create mode 100644 fuzz/corpora/asn1/b5cd815a0e7c4ae3e1815c7b7c55c31ca27df163 create mode 100644 fuzz/corpora/asn1/b5e2a02fb0d5ab2dc9f7708e81aa3e18cbae501d create mode 100644 fuzz/corpora/asn1/b5e9595141036b13dbc278d7b68dc160ffd55706 create mode 100644 fuzz/corpora/asn1/b5ea5798f6afb3dfb49344816e6ec310f2e1553d create mode 100644 fuzz/corpora/asn1/b5f9aeabf62e54ecaf0718a4b08ed93d11e202ac create mode 100644 fuzz/corpora/asn1/b63706a238c9f4835030ccf12a755aa9913336c1 create mode 100644 fuzz/corpora/asn1/b648028a07a6df2e0a4b439d827865514ef5641d create mode 100644 fuzz/corpora/asn1/b652a82ba3aa319829832356180246cc82411772 create mode 100644 fuzz/corpora/asn1/b6543c8211f9bc93b7a8d37a6c81cb88484554c5 create mode 100644 fuzz/corpora/asn1/b675401475977b94060d302393d4ee384125e209 create mode 100644 fuzz/corpora/asn1/b6a43202b4cd9511bd13c800edfdc76472901a27 create mode 100644 fuzz/corpora/asn1/b6b028c018e4de3a34a8d7c9cfa7c97bde470f14 create mode 100644 fuzz/corpora/asn1/b6b067e00bf0a73c6e158787f1fc081d1268e758 create mode 100644 fuzz/corpora/asn1/b6d1f4d731a02d6837451ff743cd541096c1289a create mode 100644 fuzz/corpora/asn1/b6fec8028b121bf299d68e8d2f73b28eb96d605b create mode 100644 fuzz/corpora/asn1/b70956194b26d34601f8b317b7a0172f67057c5d create mode 100644 fuzz/corpora/asn1/b74f52966228929fbbd575819a91242c6f5fc6be create mode 100644 fuzz/corpora/asn1/b7bacdfd0b8cda665fe19570071a8816cbd92aad create mode 100644 fuzz/corpora/asn1/b7cc71c62749290d79d327da444bb2c4b34b52f4 create mode 100644 fuzz/corpora/asn1/b7dc6c57419cab4f2285221280ffd8c41c918eb7 create mode 100644 fuzz/corpora/asn1/b80ade515cb4cfa0d63fe7b449775a2cfb9178d5 create mode 100644 fuzz/corpora/asn1/b82e27aea4aaa5f8099f73295977eef87641a504 create mode 100644 fuzz/corpora/asn1/b858f1ffd19c9ffd6f8b3e7c906f2d23bfec5152 create mode 100644 fuzz/corpora/asn1/b85ae1c3bc9c76e35341a8e35ad44560fd7f7972 create mode 100644 fuzz/corpora/asn1/b85af3177b32e37fb34ea876be48d1b9995e144b create mode 100644 fuzz/corpora/asn1/b8602ad82d9f606f95f0623895a88df8aea03463 create mode 100644 fuzz/corpora/asn1/b86656f595db621c0e68fc13b72b59ef052aca74 create mode 100644 fuzz/corpora/asn1/b896a1d8785a9726bf761ed20767b278b3a5a55d create mode 100644 fuzz/corpora/asn1/b89d81ad1f9f27128a0728bd3a13d9e248208558 create mode 100644 fuzz/corpora/asn1/b8a09d129aef2dd2992279c75a10716e176b46f5 create mode 100644 fuzz/corpora/asn1/b8ebdf652a99ac408bad18477fd841c4541fabd0 create mode 100644 fuzz/corpora/asn1/b909c6d0754416478da027e42d6182c5b16a7ff1 create mode 100644 fuzz/corpora/asn1/b915212c5434b3c8ed7304e83272ddcf487999c1 create mode 100644 fuzz/corpora/asn1/b915aa1b5f3ac6964a826927bef4f7ed16af3240 create mode 100644 fuzz/corpora/asn1/b91cd78d64af5d22ee5e61f4661ce111ceb1d91e create mode 100644 fuzz/corpora/asn1/b93480ba9ad29a60d87f66cff4704e2efd53423a create mode 100644 fuzz/corpora/asn1/b94e4b52f95c0707f964e428869e134340183708 create mode 100644 fuzz/corpora/asn1/b976824df2ee00847defe80bdae34d62043f755d create mode 100644 fuzz/corpora/asn1/b97d605bbd12a57cb782f50e71530016433b60b3 create mode 100644 fuzz/corpora/asn1/b9b8368e4c518096661f46068963d319996dfa67 create mode 100644 fuzz/corpora/asn1/b9c978b0b3441d3c45c07a49a3143c9e3aac4960 create mode 100644 fuzz/corpora/asn1/ba145b7335c11e33b52f75815b1f425e93c5fba5 create mode 100644 fuzz/corpora/asn1/ba5ae8499716a33f65cffedb0c18e3e99275b8e9 create mode 100644 fuzz/corpora/asn1/ba5c8c03ddd29f071f8c3f9e013a326b85bc2543 create mode 100644 fuzz/corpora/asn1/ba67c52a7438d98e5a397d6350c108304307859b create mode 100644 fuzz/corpora/asn1/ba79209df00b766c3b242aef865a9814d876351a create mode 100644 fuzz/corpora/asn1/ba87ab5e0c8cba3954836e861058d19ace6b110d create mode 100644 fuzz/corpora/asn1/baa11f7fb256983212119502740a38a9eadca28b create mode 100644 fuzz/corpora/asn1/baa7631578546bf3b2df47820de326fc0a0cdef7 create mode 100644 fuzz/corpora/asn1/baa854d91f34241bf1b147d691e98280e3f1380c create mode 100644 fuzz/corpora/asn1/badf9543776e98300123d41f0defda501519353e create mode 100644 fuzz/corpora/asn1/bae50d491964d27bc5f8d1f8aba82eff1581b693 create mode 100644 fuzz/corpora/asn1/baf1c89a5128177706f082aa3cb7a7b12f933054 create mode 100644 fuzz/corpora/asn1/bb01adf15bf6e3eeed325f3a8ace826260b68b0f create mode 100644 fuzz/corpora/asn1/bb1030e2301fbba64d6d7995bda689aaa23a10fd create mode 100644 fuzz/corpora/asn1/bb274a198c6e65a627aabbb94d660c8b9ef9e370 create mode 100644 fuzz/corpora/asn1/bb508362b2ea5a7ea0a8a844b13a2894daf88b69 create mode 100644 fuzz/corpora/asn1/bbbee86ed3a330fd7c2691f941dd6c0395798a54 create mode 100644 fuzz/corpora/asn1/bbd34163a46c69e05cd190652973cc6ba0886b35 create mode 100644 fuzz/corpora/asn1/bbf45f67a7dc081cb221d0bf1bed6f4497604e94 create mode 100644 fuzz/corpora/asn1/bbf8059fa2a470eb76bb944102da2b34747fcdcf create mode 100644 fuzz/corpora/asn1/bc01ab63f472ec32c7fd1dbb4d641ffec14fe997 create mode 100644 fuzz/corpora/asn1/bc1d039398751dc204d299dcd6162fc5fc5cac7c create mode 100644 fuzz/corpora/asn1/bc30ba95b740183b919a4758fd7a27931e088d5a create mode 100644 fuzz/corpora/asn1/bc3759c7569c6861a56afbb959873a90078aa87f create mode 100644 fuzz/corpora/asn1/bc57d6a21df258304ce40cbead80adcddf71a077 create mode 100644 fuzz/corpora/asn1/bc589899e0b9b4bf80e276cb74302f83166ce124 create mode 100644 fuzz/corpora/asn1/bc8f98701a834d2b0cca6875c983aff4f23fea6a create mode 100644 fuzz/corpora/asn1/bcbb523243e1ad57a3d691a7a51f592496a24a3e create mode 100644 fuzz/corpora/asn1/bce00bdbceb3eb61a254a2d39cf4db3b4f1a2a8d create mode 100644 fuzz/corpora/asn1/bce49c0418733ed411b2bbb9b5b31caa2aab7a9d create mode 100644 fuzz/corpora/asn1/bd054192368f2e467d9f7c2a450d8d5fe89e2d99 create mode 100644 fuzz/corpora/asn1/bd1537a19cc45c0f0ef9cf2aa3d9b224992012e1 create mode 100644 fuzz/corpora/asn1/bd226c6847442c72f4a7a45c106fb06033cd9e68 create mode 100644 fuzz/corpora/asn1/bd2f849bc0d30c2fbf19a4b0fff0760b1a78ac5c create mode 100644 fuzz/corpora/asn1/bd2fbc35a7f5c9773a1af4fc3ec2cb1eabbf5a02 create mode 100644 fuzz/corpora/asn1/bd328893629cc8ea5b6aab62019c946ae24bc18f create mode 100644 fuzz/corpora/asn1/bd36ff181f36ebc251716d7ce74fdaa0cfadc979 create mode 100644 fuzz/corpora/asn1/bd735d68bfec8d8c9e3152249f7f508d088f1bea create mode 100644 fuzz/corpora/asn1/bd7ba152c48f651162aa4597a051400eb6224ffa create mode 100644 fuzz/corpora/asn1/bd8d27c03321c663ee2f2ef8340d1f6d14e87848 create mode 100644 fuzz/corpora/asn1/bdb61cfd2239642fd1551a25429705813f1e6dc4 create mode 100644 fuzz/corpora/asn1/bdc61a463b076c8f2865ef8636919ddf59ab6d85 create mode 100644 fuzz/corpora/asn1/be067dd243ea5210854d857119f9769bface8202 create mode 100644 fuzz/corpora/asn1/be153163bc63fd9c464827368f0c868f0fb47b3a create mode 100644 fuzz/corpora/asn1/be26d7dbb85efbaa1daae1155cec4aa4b3d7ed88 create mode 100644 fuzz/corpora/asn1/be86afffb7185e770ce184a01f98d16db52ba848 create mode 100644 fuzz/corpora/asn1/be94f79785b58e4b1bfc7ebe9d9c1d3f36817ea0 create mode 100644 fuzz/corpora/asn1/bec68372ec59f130f1999ae6783b285f2ef44982 create mode 100644 fuzz/corpora/asn1/bef02d3fa4dfd5a07ea256bcfca0b7e099bc235c create mode 100644 fuzz/corpora/asn1/bef21cbcc1133ae6b1c4d14b7e5e80d2cfce4271 create mode 100644 fuzz/corpora/asn1/bf2d96e734dc999425186a4d0961fab5e550cec7 create mode 100644 fuzz/corpora/asn1/bf3cbcd284991149870f0c8589aba0132b314488 create mode 100644 fuzz/corpora/asn1/bf69aa2d8f3491351516ad4ab602c7d9aee15dc1 create mode 100644 fuzz/corpora/asn1/bfafbc1f8d3a569877fd3028c330608c169d4396 create mode 100644 fuzz/corpora/asn1/bff9cd3d2942e27ef1abaf545d8b0e0b86603731 create mode 100644 fuzz/corpora/asn1/c003e18d28c953d60c8e49a3f6bd89ff47332dad create mode 100644 fuzz/corpora/asn1/c01651522f449f2ae8b133d5c6ed23ffe11e6add create mode 100644 fuzz/corpora/asn1/c0795d8d10473ce2b965c6b5732b37e9dc0516c7 create mode 100644 fuzz/corpora/asn1/c080e72b6f95e3db529114ed03affcb3da80b3a7 create mode 100644 fuzz/corpora/asn1/c095394481ba03a978f44e6a368ef429afbee103 create mode 100644 fuzz/corpora/asn1/c09ff95b3e4cbcb099f488d34aa1ea18e7443d47 create mode 100644 fuzz/corpora/asn1/c0ab92af50aa5462323c78e13fa00cdb6c5d2a2b create mode 100644 fuzz/corpora/asn1/c0c991b4df371a064bb03d09b3bbd67dc3555963 create mode 100644 fuzz/corpora/asn1/c10a68cad711bf05e2cc856ad2570d0911760492 create mode 100644 fuzz/corpora/asn1/c122543149ab41fbf4c69fa726ce0248ade100ba create mode 100644 fuzz/corpora/asn1/c12cce5d53296e1e6f932dc4c5c737962a445fbf create mode 100644 fuzz/corpora/asn1/c16325347c6fbd9466cd0dd243441d455d83a81b create mode 100644 fuzz/corpora/asn1/c16b1efb915bc9311a6e8281546fbcbb47a3ed54 create mode 100644 fuzz/corpora/asn1/c1960d49bbae14da4b2404f8b5d16b67b6329de7 create mode 100644 fuzz/corpora/asn1/c19e92ce110a55fd7f821bae3ccb36821e464959 create mode 100644 fuzz/corpora/asn1/c19f1a6b7d09997b84526ce60f5aa9344738ff96 create mode 100644 fuzz/corpora/asn1/c1c53da63ccddfe545331035439b72c78a2ff6b3 create mode 100644 fuzz/corpora/asn1/c1cc5fbf880ad6494c4ab323c052a62e9a7fdbd2 create mode 100644 fuzz/corpora/asn1/c1cc6157b05b1d2104e5dbbb136aaece10debd08 create mode 100644 fuzz/corpora/asn1/c1d5b3fac019f739a652862ab714d7c6c0ecf12e create mode 100644 fuzz/corpora/asn1/c1dc72f0595e7bda17f2fe07ce0d49f43cd4a1e6 create mode 100644 fuzz/corpora/asn1/c2397e4ae34e05a196ae605b199133700f5d3ffe create mode 100644 fuzz/corpora/asn1/c247b36aea11179c8bec95b66ceda7c27ad87375 create mode 100644 fuzz/corpora/asn1/c24c5d7d21836400684c271f295c48f8fbc767c8 create mode 100644 fuzz/corpora/asn1/c24ffe679d844cc26ac590f2657bd36de7876703 create mode 100644 fuzz/corpora/asn1/c254782dbbdcc58600dcf8aac9a093bd99cb87d4 create mode 100644 fuzz/corpora/asn1/c294956dfb26aafef23596589636baa24cc54aa4 create mode 100644 fuzz/corpora/asn1/c2a94a57865c5a9c549ccd75b7059ab2b044ba2b create mode 100644 fuzz/corpora/asn1/c2ccf0058c0ac148d555300752e19bd82753106f create mode 100644 fuzz/corpora/asn1/c34890e06a40739255391375927e5089701f9057 create mode 100644 fuzz/corpora/asn1/c355db977d23ca91df471f6d94ed3ba987b346ea create mode 100644 fuzz/corpora/asn1/c37b02a203ec5e12e572483b8e1d7206b78fcd8d create mode 100644 fuzz/corpora/asn1/c3b757def3be6e1d59e019b24929467d528f417e create mode 100644 fuzz/corpora/asn1/c3f43f0aaed26341c1c79662a47830f47f8702b2 create mode 100644 fuzz/corpora/asn1/c4a269d4ad54dbc436062daae38dbb056c32962d create mode 100644 fuzz/corpora/asn1/c4b5c11d81076cceea1256755e279a019b73865c create mode 100644 fuzz/corpora/asn1/c4b87603674457ceb056582ee4cdacf0ec73704e create mode 100644 fuzz/corpora/asn1/c4d25c459d45dd0cbbcd927200369bf8eaf63635 create mode 100644 fuzz/corpora/asn1/c52ba0d987fe55367cfc83f0584e2b0627cbc148 create mode 100644 fuzz/corpora/asn1/c56d7c8cf6a63ba227cd5b0de727c38185dc3c7b create mode 100644 fuzz/corpora/asn1/c59a9b28c51cbef049b78fd83ceedc8a24e09ade create mode 100644 fuzz/corpora/asn1/c5be91eba8ddabff50ee01e7fce5c9c4c59665f5 create mode 100644 fuzz/corpora/asn1/c5bf0141cd869eeb1b156136c00739fcaf14d954 create mode 100644 fuzz/corpora/asn1/c5c11447b6f25358514bc769045ef96b5e5318b2 create mode 100644 fuzz/corpora/asn1/c5c9d2582b3b71d9176d68e3ad189d953d184741 create mode 100644 fuzz/corpora/asn1/c5fd2ea08e5ecf24ebe251cf93dbea32b6f7acae create mode 100644 fuzz/corpora/asn1/c605232b03ba98ac697bcab4c86cfaf19c6f839a create mode 100644 fuzz/corpora/asn1/c6092399430f41e27ec2df5d3ce7f4ff0461a3c5 create mode 100644 fuzz/corpora/asn1/c60a8295610f49f95d015ccbf75b3400ccfc79aa create mode 100644 fuzz/corpora/asn1/c615dc366a3730dc503ebbcd263cdf18da2ac78f create mode 100644 fuzz/corpora/asn1/c62c64f00567c5368cae37f4e64e1e82ff785677 create mode 100644 fuzz/corpora/asn1/c6413befb4845455f149ce469bd4522c42e5b408 create mode 100644 fuzz/corpora/asn1/c6788837b6d05ed77976b7a2d53d6981d3e19422 create mode 100644 fuzz/corpora/asn1/c6a7596b14bc7e4d7c5f23f3c7e6d8a17eda0b35 create mode 100644 fuzz/corpora/asn1/c6ac98b9712dac48c58452253a2f5668e8ca970b create mode 100644 fuzz/corpora/asn1/c6d6df5c7e60fb685c6799757d558901b702935d create mode 100644 fuzz/corpora/asn1/c6e0f5178836a8609d3ea811be088509a6e22568 create mode 100644 fuzz/corpora/asn1/c6e4fa780050047820f45ebe515618cbb811423b create mode 100644 fuzz/corpora/asn1/c74e2cfa8e76521f69e26b967a064b51399bb713 create mode 100644 fuzz/corpora/asn1/c7639de8641dc12f675107b0ce6aee03e1f4ca46 create mode 100644 fuzz/corpora/asn1/c7ab897967f87f2cf2600d092f8cebfdc6525fa3 create mode 100644 fuzz/corpora/asn1/c7b5e3dac72ddc362d6fa28a24eda024990241d5 create mode 100644 fuzz/corpora/asn1/c7ccd5efe203c5a13ed04766b96ce2321a6ed08b create mode 100644 fuzz/corpora/asn1/c804ab6ddada45f88e0d9a8b98284e8cd050d1b8 create mode 100644 fuzz/corpora/asn1/c84ed7a5da41f8218dc3b4e9ea84ea4f799c412b create mode 100644 fuzz/corpora/asn1/c8554142f22c54aed08a559270093519639dae4b create mode 100644 fuzz/corpora/asn1/c866626a30050735afe520be286593acec8a61ec create mode 100644 fuzz/corpora/asn1/c8aaa8fbcc05ada438cb43dc955706294f23b541 create mode 100644 fuzz/corpora/asn1/c8c6ea97136f492b8102a16617e06cd5f1fdac31 create mode 100644 fuzz/corpora/asn1/c8c9adaba9616886741f26811fe1133f1c0ce56d create mode 100644 fuzz/corpora/asn1/c8d85c2b7f806fab101607111eb1d56978da0812 create mode 100644 fuzz/corpora/asn1/c8e4c320db802986ce8e468aa8c0d29f5f37f37c create mode 100644 fuzz/corpora/asn1/c92a280573d88099cb0485f61dfa9a35e1ad2f04 create mode 100644 fuzz/corpora/asn1/c942315310e8fd559f63c17a18c21b03ee7bd4a0 create mode 100644 fuzz/corpora/asn1/c98efa14eda6c9291b93ff30de0c081608724a9c create mode 100644 fuzz/corpora/asn1/c9b0a64e16d47f9647ed34b984b6903ae05f6d1b create mode 100644 fuzz/corpora/asn1/c9de9910a321fc469187410e0f86437390e4f5cc create mode 100644 fuzz/corpora/asn1/c9eeb822c0166c6b368cbdbf9400418e64133b00 create mode 100644 fuzz/corpora/asn1/c9f18df416be1c1aac670aecb5eb7c0d0464583d create mode 100644 fuzz/corpora/asn1/ca2c94823e68fe3774e227c2f2eb034393aae182 create mode 100644 fuzz/corpora/asn1/ca5be6d4667a1b573e4b188b64b74edd7e7a4f7c create mode 100644 fuzz/corpora/asn1/ca67028115b32332db65e33ad903fe9b821c12ae create mode 100644 fuzz/corpora/asn1/ca77a06cf1291f52b270a1781c78a882f6133273 create mode 100644 fuzz/corpora/asn1/ca989ee55ea3896d0ca067937d862b908681c534 create mode 100644 fuzz/corpora/asn1/ca99c69bc9e82f6d16a85f93da41188b88116257 create mode 100644 fuzz/corpora/asn1/caa257701568763b1a10bf459055eec313d2c95a create mode 100644 fuzz/corpora/asn1/cab1c8a63cd68a48e79e9c90f7501d7979e1e6fc create mode 100644 fuzz/corpora/asn1/cae83cc961b720100ceebb79114a1fd35409372e create mode 100644 fuzz/corpora/asn1/cb159664b21748088cc0ad31e6ffe3c075b6d316 create mode 100644 fuzz/corpora/asn1/cb2b8f8fbf380221b5f4de2fa8851b1191093f35 create mode 100644 fuzz/corpora/asn1/cb52eb83d43c879034fe72eae6c69d8ccd6d6215 create mode 100644 fuzz/corpora/asn1/cb531704f563cddc2b2309c7d2639090fe8beb34 create mode 100644 fuzz/corpora/asn1/cb7dffe0975ab8348e2879ba2ce226107f9230ce create mode 100644 fuzz/corpora/asn1/cb94c844e1d3f9815d987e0940f7c4c48c94b3a5 create mode 100644 fuzz/corpora/asn1/cb95817b74f8657dcaf565e0ffedfc35d19b6bad create mode 100644 fuzz/corpora/asn1/cb9d4d9733bda940d75ea6b6421e19c7b0b39c6f create mode 100644 fuzz/corpora/asn1/cbb039950bfcf2b2c5342e1ec64f536059675bd1 create mode 100644 fuzz/corpora/asn1/cbd094d36e4cfb12fbdc79bcd75a9a7e6d8f513a create mode 100644 fuzz/corpora/asn1/cbe577f0e997afcecc26814bf2f79ae3b64eaa04 create mode 100644 fuzz/corpora/asn1/cbe819cc37a3172f7fa0faf34b0909b95f7d044b create mode 100644 fuzz/corpora/asn1/cbefb0f150d1aa2aec8782b821eccda113b2e3c4 create mode 100644 fuzz/corpora/asn1/cc056d49ee57e79809eb3ac8e5b6406c8c812d8b create mode 100644 fuzz/corpora/asn1/cc19f08c6f945f45feee7add14013cfb810e2f7d create mode 100644 fuzz/corpora/asn1/cc24d39102e3f135f8b777e2a7f4bae5b0f39157 create mode 100644 fuzz/corpora/asn1/cc2b0e3daf4879e1b01ce49447bf75eb01897b37 create mode 100644 fuzz/corpora/asn1/cc2be9ea9cb8d74eecde275839d24dfc29ccc830 create mode 100644 fuzz/corpora/asn1/cc2edaee9ed52d96ad3e2356b05cbd13851a1052 create mode 100644 fuzz/corpora/asn1/cc36e4534e0179a6d83e90033c4d5e9616be1312 create mode 100644 fuzz/corpora/asn1/cc4d85fee6537c5aff58366694ae50ed02b02c0d create mode 100644 fuzz/corpora/asn1/cc4f856b60d2146e231a7675d2b5bff8f839ddf2 create mode 100644 fuzz/corpora/asn1/cc5e4a83984ab2fc29c77e13823f5d88ce09b16f create mode 100644 fuzz/corpora/asn1/cc6d0bef6e22925774e63aaa4adde0a8ecdaa088 create mode 100644 fuzz/corpora/asn1/cc7081726b4ce70a41213b31a2ff5a98e6afc663 create mode 100644 fuzz/corpora/asn1/cc7b0169e53fece89224cdf244a2c91bb140f295 create mode 100644 fuzz/corpora/asn1/cc979ccf99bebc94f85623ab5944477875763fb0 create mode 100644 fuzz/corpora/asn1/ccc5b935d438b7542e49277e59de8dd5e5b65e08 create mode 100644 fuzz/corpora/asn1/ccfdbae5c22edb280055de1a87286d861e64b477 create mode 100644 fuzz/corpora/asn1/cd0ff1826844fb45f4a6d1860d5a76398a39b71c create mode 100644 fuzz/corpora/asn1/cd188d14b6cba24ce7c81cef65ed0be9df3c11d7 create mode 100644 fuzz/corpora/asn1/cd1a252f4a3f8d1c56e0ed1cc8ac6d77a62ceb33 create mode 100644 fuzz/corpora/asn1/cd2eb8870287ae613b45f646dd94e32ff3f666b9 create mode 100644 fuzz/corpora/asn1/cd38582ea60e007ec5080dfefadb4d133f07a91e create mode 100644 fuzz/corpora/asn1/cd7b557e181c754d5cd2f088d293ee0db514f4ce create mode 100644 fuzz/corpora/asn1/cd7cb3a18e56ce054d4033ef1ace9b34ca395607 create mode 100644 fuzz/corpora/asn1/cd83a0338e86458ce15910b967620ff2bb546071 create mode 100644 fuzz/corpora/asn1/cd8a1586c03d9e85304c696f8c5e3d0571f6dcd3 create mode 100644 fuzz/corpora/asn1/cd8e2eb998f11f71fd898e53ca2e64d5241940ad create mode 100644 fuzz/corpora/asn1/cd9aeb9f43d9aadb4e36572c8a6b81aebdd52c15 create mode 100644 fuzz/corpora/asn1/cdbaaa5d3b4bdbc279a5654b68fface99d1d28b7 create mode 100644 fuzz/corpora/asn1/cdf6dbee4e86520a8b795f55a5e104b316c4b434 create mode 100644 fuzz/corpora/asn1/cdf9703b4b5e757c26a383b3488d33ce769bef6a create mode 100644 fuzz/corpora/asn1/ce228900764401b9f40838f5d386a497b0c74d7a create mode 100644 fuzz/corpora/asn1/ce231b5fff0a00950835369cec415101f3bd37fd create mode 100644 fuzz/corpora/asn1/ce26a3e86426e26c54a1882be8899af6c70cce1b create mode 100644 fuzz/corpora/asn1/ce452c7bb6e2d51ce21631d06ede6ef3ffc6b6d1 create mode 100644 fuzz/corpora/asn1/ce58445d799105f5c5cef8817413596205d5aba5 create mode 100644 fuzz/corpora/asn1/ce8dd7ebc4be518af70e62d42c37345664620311 create mode 100644 fuzz/corpora/asn1/ce90649e067422a7998d835fc1ce502169be9a73 create mode 100644 fuzz/corpora/asn1/cecc1c32f5c285a59d4360a89deedaf82e841633 create mode 100644 fuzz/corpora/asn1/cef0c0e94ed822e43c53375ffa374fe11596f213 create mode 100644 fuzz/corpora/asn1/cef6b2bf4e9e59e4966c715e2c1426f21b95a147 create mode 100644 fuzz/corpora/asn1/cf1e481ca385507cc793852f1eb7846f69c0d5cd create mode 100644 fuzz/corpora/asn1/cf29e1cf97660655914462af8248429692ed5794 create mode 100644 fuzz/corpora/asn1/cf2a2f6ce238ad89b75983ee437c71a7083a8d8d create mode 100644 fuzz/corpora/asn1/cf2b56b2698409363ed7366bbfe7e856adfc25cf create mode 100644 fuzz/corpora/asn1/cf3780d2a76a0c125f224e2f7d2033c939a14698 create mode 100644 fuzz/corpora/asn1/cf610b55ba3715d27e75b338bc2c02c64be55e8b create mode 100644 fuzz/corpora/asn1/cf646ec7887f8a0d2fe1884e43cead6a37e0ac1b create mode 100644 fuzz/corpora/asn1/cf6e6a3112ce0d36f87c10e66cd7fbd1fcd23d67 create mode 100644 fuzz/corpora/asn1/cf916257767575cb4ed5f5dadd782857348dea58 create mode 100644 fuzz/corpora/asn1/cfd7fa7b46a826edef9cdbde52d4c8c9681ef7c3 create mode 100644 fuzz/corpora/asn1/d00adaa01a4bbad56c04a5a00cef8600a7cc1a4d create mode 100644 fuzz/corpora/asn1/d0121f4286c11b30479f92505ac6c90a3bee0dd4 create mode 100644 fuzz/corpora/asn1/d026c5ae8adbef3d8ea6b8d3f96a3ab99c4c24ab create mode 100644 fuzz/corpora/asn1/d03586acc25d6b61f6825e8d4729c05683c3888b create mode 100644 fuzz/corpora/asn1/d04c73dd55b5835d38f0dedba4bf071fb54e5168 create mode 100644 fuzz/corpora/asn1/d06f9e5cb3214bcbbbe6e775b3362da756506311 create mode 100644 fuzz/corpora/asn1/d070ff0e7785ae022b181e8d5e26555913dcc9a6 create mode 100644 fuzz/corpora/asn1/d087cf73451b4512e34371bc4f520d97138edc89 create mode 100644 fuzz/corpora/asn1/d098a3648f27e8de6d2c9ca6c9f67bdd8e50b53d create mode 100644 fuzz/corpora/asn1/d09fc23eb07e7de8aa8571e36e5216d31e5d5411 create mode 100644 fuzz/corpora/asn1/d0a448771e45ed54bad449ecff4e8f4b6089fd1d create mode 100644 fuzz/corpora/asn1/d0afd058b2dc1d4795062d7054949dc525d7b62f create mode 100644 fuzz/corpora/asn1/d0b2f91f0e8dd7d618e78aebfb292655353c1958 create mode 100644 fuzz/corpora/asn1/d0f24263284627f9dc5464bcb0bd0b37618d981b create mode 100644 fuzz/corpora/asn1/d1148d87c656a843c3705fcff91bee449c32e154 create mode 100644 fuzz/corpora/asn1/d11b1e4d9226c715c8150736e77447896c608b45 create mode 100644 fuzz/corpora/asn1/d1261d1d01157e39b7c03d7e4c6823956d9c3f24 create mode 100644 fuzz/corpora/asn1/d13d2e9feb2b93ad6922c129d5acd9920f0d3eea create mode 100644 fuzz/corpora/asn1/d1aa85d1ca315d5fce8d5135d854b1c043f98b90 create mode 100644 fuzz/corpora/asn1/d1cc51b009e4ee27aa0f5ace1e5babf53bfde76c create mode 100644 fuzz/corpora/asn1/d1cf847ae991c66726cca795703130bf54667e4c create mode 100644 fuzz/corpora/asn1/d1e37d4b434709931ed682f3e0e81e8369766f51 create mode 100644 fuzz/corpora/asn1/d1f9bf1ede2e0ee9d3e1e65a64ac2eb69c02c3d3 create mode 100644 fuzz/corpora/asn1/d210cabb4a456899d7c46ca736c19fa45c0ec317 create mode 100644 fuzz/corpora/asn1/d214ad350394d93f4225103726aaecbae83b912f create mode 100644 fuzz/corpora/asn1/d22f2e4495f75c243507c06ddd67ff642aa3723e create mode 100644 fuzz/corpora/asn1/d23b618ca095d26d476b214dd805b6a07d68060e create mode 100644 fuzz/corpora/asn1/d247eb1ff06306229d0761144e7af448bbee7ccb create mode 100644 fuzz/corpora/asn1/d27baa2af3c80b44f0e69042bc7166d54ff419eb create mode 100644 fuzz/corpora/asn1/d27dc9ce02a432b036f569e3258fc24f062811cf create mode 100644 fuzz/corpora/asn1/d2b3753b1e04c63c151b60a1e9c92db8146e29f2 create mode 100644 fuzz/corpora/asn1/d2b64368f5b6c4ac8a848beffbd867b194efe479 create mode 100644 fuzz/corpora/asn1/d2b84d203b91443fc8a048713282a2c69251f0c5 create mode 100644 fuzz/corpora/asn1/d2c9f9cfd36e55fde5c5ea69c5d8b853d4e30565 create mode 100644 fuzz/corpora/asn1/d2d3ac082b7b90f93e4dc03a52928dcaffa744d1 create mode 100644 fuzz/corpora/asn1/d2dc4124627577820c77dd74179d920db529eb10 create mode 100644 fuzz/corpora/asn1/d2eb6226d25a9d24d442d74177d078e3f2d1b99f create mode 100644 fuzz/corpora/asn1/d2f691f183f0f9848892b3992059798210154b0f create mode 100644 fuzz/corpora/asn1/d2fd9e22f6cf77b541a41978060dfa5bd779ce23 create mode 100644 fuzz/corpora/asn1/d30def3979bd2f8ff70324740afa3cb5d8f21917 create mode 100644 fuzz/corpora/asn1/d3224e26c4af3e1266afc22db325d40505c23141 create mode 100644 fuzz/corpora/asn1/d3275c60f8b8dec2f29f65c3932dabe6755cc933 create mode 100644 fuzz/corpora/asn1/d3437005576718f55fd500b66d1bb42d0c08417e create mode 100644 fuzz/corpora/asn1/d3596402cb0c41c074954448474ec99054839462 create mode 100644 fuzz/corpora/asn1/d35a0b399901334e71ea283042272b5268c2c4a2 create mode 100644 fuzz/corpora/asn1/d35e8967053b99ce659e09545f4607a065a68061 create mode 100644 fuzz/corpora/asn1/d376c2d8c3756405f9cc8af8ba87a95649b6181f create mode 100644 fuzz/corpora/asn1/d3a17d0bae91a7b66edc70b28624aa629974b7c3 create mode 100644 fuzz/corpora/asn1/d3aa81f1e2aab78c41e7785c51dd06f9c1913afd create mode 100644 fuzz/corpora/asn1/d3d5a579c88918dc04433db83ff45eedad339eac create mode 100644 fuzz/corpora/asn1/d3e3dda4b78ecd0ffc2450492d1682e1f41ff40a create mode 100644 fuzz/corpora/asn1/d3fa8085c7ab925da2b6cf80d1b9d40f93d25d89 create mode 100644 fuzz/corpora/asn1/d3fd7d9b31abc8fc31692c61b7cb828b755d39b2 create mode 100644 fuzz/corpora/asn1/d4299176fd0ef5bc10be0295ec974a7c974329e1 create mode 100644 fuzz/corpora/asn1/d431f83af8db5442820f5b1ea02832889e8ad8cf create mode 100644 fuzz/corpora/asn1/d4400ee4610ea426136c381c9f0de56828079172 create mode 100644 fuzz/corpora/asn1/d4527e8e0d4654db77826eaf0ea76dbfa771dae1 create mode 100644 fuzz/corpora/asn1/d464aba713059ab750552a99bfa350d7a2caebc1 create mode 100644 fuzz/corpora/asn1/d49f77f94a07680575c7a7e010301a01e2bece8b create mode 100644 fuzz/corpora/asn1/d4a48af913844917b109e61007228073326daf20 create mode 100644 fuzz/corpora/asn1/d4bc8b7de459e4db5c6e220074289bb48c521347 create mode 100644 fuzz/corpora/asn1/d4d3108fd84c5f68294e82a1d82b06ffd8445e9a create mode 100644 fuzz/corpora/asn1/d4f6abf10c9ff592297865b8adbb595dd6a505cd create mode 100644 fuzz/corpora/asn1/d508e15e6ec0c941b654a2287f559af8271f9e7c create mode 100644 fuzz/corpora/asn1/d511e989181a87623d5314a50dcfe9ce9f9a31f7 create mode 100644 fuzz/corpora/asn1/d51bfc30f67e51e1558a108dfaa4716a6a44bf3f create mode 100644 fuzz/corpora/asn1/d53eb47a65b4d438afb8477b043a77dae46f9872 create mode 100644 fuzz/corpora/asn1/d56ac8d6bf652c4cc29f98c9bb3e86f1427234ae create mode 100644 fuzz/corpora/asn1/d5781afe30e76939778259404aa133dbbb6fe392 create mode 100644 fuzz/corpora/asn1/d583d1f01544886059ce6e762040140a27c6a85a create mode 100644 fuzz/corpora/asn1/d58c21c813f56eb770f64a8d4172dcb0f004e102 create mode 100644 fuzz/corpora/asn1/d5914f780464dfff3091e32909216ac7d2ff65b0 create mode 100644 fuzz/corpora/asn1/d597e99a34cc1dcabdb857dc9139f288ed2435f6 create mode 100644 fuzz/corpora/asn1/d5c295c32ba0ff69fb4bc1da2140d5854ef5dace create mode 100644 fuzz/corpora/asn1/d5f0dbbe22f0940c6ae4ae0334b5b05cd01d6931 create mode 100644 fuzz/corpora/asn1/d6161326ff1b8acd585f829e887a50d8c1153c8b create mode 100644 fuzz/corpora/asn1/d62f136ae2083c8c8e15bcc79883f43b665bd31d create mode 100644 fuzz/corpora/asn1/d645885314dd3f8386822a933605a49161a29661 create mode 100644 fuzz/corpora/asn1/d65461c4a019ba64f80390c296fc8d6e18c70631 create mode 100644 fuzz/corpora/asn1/d65b64d7799e333a54cbf7b78e79beb72015a029 create mode 100644 fuzz/corpora/asn1/d66da730822693fea95bcc7b57e5e4d27e6024ed create mode 100644 fuzz/corpora/asn1/d67c74dbed723e2cd0a515865111d8244d8cf49a create mode 100644 fuzz/corpora/asn1/d67ed7a4539f4f021f4fb6433e6c3221dcfacac8 create mode 100644 fuzz/corpora/asn1/d68451dbc794cdbf1db1756ba559422373f880c1 create mode 100644 fuzz/corpora/asn1/d68c0f9ac58174b28ec80ef8bbf197bb2c54b068 create mode 100644 fuzz/corpora/asn1/d69886317d59e90d70f2a28302d7c99ff286336d create mode 100644 fuzz/corpora/asn1/d6990bb64f22f00dec1d41d1204b1dc8936e0474 create mode 100644 fuzz/corpora/asn1/d6aa1472cbbf583cadb1ec31d0afe0a27669c79f create mode 100644 fuzz/corpora/asn1/d6c94b1a045e523cdc15c25fc34cd7ec71cf8cef create mode 100644 fuzz/corpora/asn1/d6d27306ba42895301ab2135a3f7e1f5049a4736 create mode 100644 fuzz/corpora/asn1/d6f3b69c66ec5b85efb111be98a57a6d9b4fb4d4 create mode 100644 fuzz/corpora/asn1/d7182d6dc2c35e3cbf927f3c2254abdd46577abf create mode 100644 fuzz/corpora/asn1/d73f2accd04ab2607226fab006ed4c9c285c8a7e create mode 100644 fuzz/corpora/asn1/d74ca33e2c1c19826bbee6f9b729438b04b1cbd6 create mode 100644 fuzz/corpora/asn1/d7654d4ef383bae283ca764a013aad2a4d4c6803 create mode 100644 fuzz/corpora/asn1/d772ed65628d22f1c8d4077030b315aa27214cfe create mode 100644 fuzz/corpora/asn1/d77660a9513e0ba53dd7662cd04d29244752d794 create mode 100644 fuzz/corpora/asn1/d78fb9d504bc418ce95cdbbfea89cc2a356efaf3 create mode 100644 fuzz/corpora/asn1/d7910856965d1e6aed477647b3884dc082592f20 create mode 100644 fuzz/corpora/asn1/d79a0bbc3dcc5f595d5feed5592a7945af8771f0 create mode 100644 fuzz/corpora/asn1/d7a2246159c8ffbf2d652b5c5e2ae7599af47d56 create mode 100644 fuzz/corpora/asn1/d7af492893f259ebf1c18d1feb23be283559f18b create mode 100644 fuzz/corpora/asn1/d7ba5ae1ce1bdbaa03b3ce5ddfa4b35c70e8d0a0 create mode 100644 fuzz/corpora/asn1/d7bf5a38bc69378f706c5835250a608214a986d7 create mode 100644 fuzz/corpora/asn1/d8153e501acad522fbf0b7f85418f68af7677170 create mode 100644 fuzz/corpora/asn1/d82a9094182822c8353f733c6dad11d6093f0344 create mode 100644 fuzz/corpora/asn1/d842ad48bb6912824a1327a96e3fdb9e3586b16a create mode 100644 fuzz/corpora/asn1/d84ddfa19cf2269d13966fc5e86cc2ba5a88c673 create mode 100644 fuzz/corpora/asn1/d85bf06827da26861786e9c22ec053aea27306d3 create mode 100644 fuzz/corpora/asn1/d867a0c7f1ccb2293b8f33c0a3aa7968251fca12 create mode 100644 fuzz/corpora/asn1/d869b1dbeebcec73a70b2b39896fa96d95918a0b create mode 100644 fuzz/corpora/asn1/d86c57fdeae2f364452d20cae7b63f9170325ca2 create mode 100644 fuzz/corpora/asn1/d89445cf9291cbed95a84e8908eedb9031060e78 create mode 100644 fuzz/corpora/asn1/d89e23614f89191517033fb4bf71f3491f388b90 create mode 100644 fuzz/corpora/asn1/d8d41a04d35e40fde2aca4890cb7971145c29829 create mode 100644 fuzz/corpora/asn1/d8d5609a3b69827cf1417f30331e9bcdce336ab5 create mode 100644 fuzz/corpora/asn1/d8eb0c2e0a8e728d116d37a908faf6486f5fb30b create mode 100644 fuzz/corpora/asn1/d90150cfcf01736a4e3c2736f4ff9ea48e1a985d create mode 100644 fuzz/corpora/asn1/d90944e3c07984d5b22abe89e186e556f71e92e4 create mode 100644 fuzz/corpora/asn1/d94243ada214b89c857936a2226d8d329824d073 create mode 100644 fuzz/corpora/asn1/d950958da0e080486191340007389aed57c84042 create mode 100644 fuzz/corpora/asn1/d95819332791622a213a3fb495b9e172a924bd8e create mode 100644 fuzz/corpora/asn1/d95855d9bd40bbad46173c04b77e93ded0ad5382 create mode 100644 fuzz/corpora/asn1/d95cc1d5b586590d1d73df70b3f48c30e5f975ac create mode 100644 fuzz/corpora/asn1/d96150f3fa89a7ad792dcdaf8ae1c939a586c83d create mode 100644 fuzz/corpora/asn1/d97175932017384ec6c606d8ff4f08870eb85af3 create mode 100644 fuzz/corpora/asn1/d97a1b81f1cb36afc1b8f14ab048340eb94c7758 create mode 100644 fuzz/corpora/asn1/d99002a26147901219444289fb60211ad997bf75 create mode 100644 fuzz/corpora/asn1/d9eab47bf937954408a4872b51067b50d94c3e59 create mode 100644 fuzz/corpora/asn1/d9f353d8db67a662e828c3529d410b8788c9c969 create mode 100644 fuzz/corpora/asn1/da15f11a5a8c3bc134fca11016631e1d2aa6f173 create mode 100644 fuzz/corpora/asn1/da2406003a932236cc3609e1ff20afb9aa639c51 create mode 100644 fuzz/corpora/asn1/da44cc3e027175eb5a19a615c37499d6da79c091 create mode 100644 fuzz/corpora/asn1/da9d732e5901da9ab2da823e04ff3c4348ddf02f create mode 100644 fuzz/corpora/asn1/da9f4242af3878dd0959739a20eab9ace0f1a1b9 create mode 100644 fuzz/corpora/asn1/dabb0edd67910a500b399e6162b811d4a7351d82 create mode 100644 fuzz/corpora/asn1/dac2333e7eccdd1103c878e3f5e6f63d70f6e97f create mode 100644 fuzz/corpora/asn1/db11083d687f820144fdfa130a7bdf83844c3c55 create mode 100644 fuzz/corpora/asn1/db2269564b637ba827e49dd1f2336b629588342c create mode 100644 fuzz/corpora/asn1/db5f2ea41b72e62469cff1682aee83b61018d1c6 create mode 100644 fuzz/corpora/asn1/db71debce565a6f8c4cd9dad27b1d09cc9f725a7 create mode 100644 fuzz/corpora/asn1/dbc61a88e3a83b7d8560d52742300164c873f743 create mode 100644 fuzz/corpora/asn1/dbc88d54356bc9b5395ca2db6485206b36cc6c63 create mode 100644 fuzz/corpora/asn1/dbd75e4ab802fd93e8adad64c922551ffa7c97be create mode 100644 fuzz/corpora/asn1/dbf95922d9e430e2278fd0b6895465080af8c6bd create mode 100644 fuzz/corpora/asn1/dc0925707bfd60c3d35cc3ecdc4fef1923982cf0 create mode 100644 fuzz/corpora/asn1/dc23bc68a48f5a471ae1714cb28e843972cbd4dc create mode 100644 fuzz/corpora/asn1/dc23e58d88d7d1adbb08d57a06f110b85441b881 create mode 100644 fuzz/corpora/asn1/dc2da23c390f3a2c9217eac960dde5e9dc8190c0 create mode 100644 fuzz/corpora/asn1/dc2e38734348825b6ff3e9d4b83c761f90cce77f create mode 100644 fuzz/corpora/asn1/dc2e3f47516efd31323a792d7a41482b7bf948d6 create mode 100644 fuzz/corpora/asn1/dc37a22e1141181601bc2c9a28d1bd93504426b0 create mode 100644 fuzz/corpora/asn1/dc42450e32a3438ee0c6fe4ac59662e287604eb9 create mode 100644 fuzz/corpora/asn1/dc476ff74fe27832b0b3404a49f70526285db635 create mode 100644 fuzz/corpora/asn1/dc4fa9c2483a6ba516cc1b705cb444cee967f142 create mode 100644 fuzz/corpora/asn1/dc5181470b4713145f86fa951a7d5149cd88ccb9 create mode 100644 fuzz/corpora/asn1/dc577d4f575456eda9455a56141e459a1e4ff5b5 create mode 100644 fuzz/corpora/asn1/dc599d2a2431d464f9c87adb13ffbd282a071897 create mode 100644 fuzz/corpora/asn1/dc846f2f9ae8eea32d63c133dd6b24e557e79387 create mode 100644 fuzz/corpora/asn1/dca1fc7b2d098a849d343996e98ff575d4228a8f create mode 100644 fuzz/corpora/asn1/dce53c13a5af420543e220be11daca141d05b6ce create mode 100644 fuzz/corpora/asn1/dcfc6d09e62b00d868d04806d8229a7c3a0737f0 create mode 100644 fuzz/corpora/asn1/dd0eeb6f0360d485db794f4e75bcd7ea6ad389ba create mode 100644 fuzz/corpora/asn1/dd11927c0b366a4697a123671d9507c3a6b7749e create mode 100644 fuzz/corpora/asn1/dd15a197ade78c890ec64ab5581c2566eb0c057b create mode 100644 fuzz/corpora/asn1/dd2eca2b1df5087d0798eafbab531cb2e80840a0 create mode 100644 fuzz/corpora/asn1/dd64b13923546dd3d451e409316f4fa9c9a8c1d3 create mode 100644 fuzz/corpora/asn1/dd7602ea1be05cbc125cd9c0b5beabe38b8ff1c2 create mode 100644 fuzz/corpora/asn1/dd7de2653360fa707cd7acd5fc12d59c785b8256 create mode 100644 fuzz/corpora/asn1/dd8541f6e087ac5f40377f6fe85639ea45cc8b2d create mode 100644 fuzz/corpora/asn1/dd9809e0526ade3e7ec36c0a91700379634874ed create mode 100644 fuzz/corpora/asn1/ddc32b9ab8a273e10a14f149b7ab4e60cb047a4e create mode 100644 fuzz/corpora/asn1/ddd667feaa595b64947fd920f59b57a702a4e89b create mode 100644 fuzz/corpora/asn1/de0426f0b8c9b1cc85f9e55611c6544b1e4c9eeb create mode 100644 fuzz/corpora/asn1/de115beb1a7af70eb0c0ccde5425ed349ca34a2f create mode 100644 fuzz/corpora/asn1/de2be1373a29397bfccda5bb5dcbf58ec5d16087 create mode 100644 fuzz/corpora/asn1/de6221172414204f3069787d5cf5997cccefb0f3 create mode 100644 fuzz/corpora/asn1/de6ba606b3ed8d29918f732777ac742ce7bc54fc create mode 100644 fuzz/corpora/asn1/de8204c55bb8aafe25ed90be2716d3884381e5c4 create mode 100644 fuzz/corpora/asn1/de8e59bb5de013395ae1a50efd9e107a18bc62ab create mode 100644 fuzz/corpora/asn1/deae4b9588238c2eb246086841ba3d71cab970b1 create mode 100644 fuzz/corpora/asn1/debb8160914ae09af59440bc3b49f99fba9363c5 create mode 100644 fuzz/corpora/asn1/debd7624150e98b89ab4d55f50e23fb30c97b70e create mode 100644 fuzz/corpora/asn1/dec19109a9afc17675a0d892685a6562ced2fdfc create mode 100644 fuzz/corpora/asn1/decc923abc4765fdc89e2f5e4896538567a08768 create mode 100644 fuzz/corpora/asn1/deda7966624f9b164667eb53be283fa0bcc01774 create mode 100644 fuzz/corpora/asn1/def3882af4df1df49d07525776058b0a588e799a create mode 100644 fuzz/corpora/asn1/df1a7c20a09f3a09a0f99fa188787c7f578f8492 create mode 100644 fuzz/corpora/asn1/df30174edf550070f94f45c0f0690edc8155194c create mode 100644 fuzz/corpora/asn1/df3568138980fb0296ddf10f9a28a22643a20930 create mode 100644 fuzz/corpora/asn1/df8a5aff28a2ee844fcf32ce641990ac3e960f1a create mode 100644 fuzz/corpora/asn1/dfb345b5ea21bc26994850122a72a416e13bb4c3 create mode 100644 fuzz/corpora/asn1/dfbf656468c39eb1b4282259e6d79e1a33c33cdd create mode 100644 fuzz/corpora/asn1/dfc81a8ad82d7b9b3e8887f9a7f9a0c4cf6c68ef create mode 100644 fuzz/corpora/asn1/dfed7fac45090de4c6c653e19d28cd5383386c69 create mode 100644 fuzz/corpora/asn1/dffdbcb0b87562e8a71f736da906f7070d49bef8 create mode 100644 fuzz/corpora/asn1/e001ac66da4635ba88e755c8c109a80446250a4e create mode 100644 fuzz/corpora/asn1/e0158333cf835f34a7a49f51c494c5c9ad99b314 create mode 100644 fuzz/corpora/asn1/e040743ad6fc73f7f75d5eb1e553d8415302ccc9 create mode 100644 fuzz/corpora/asn1/e060ce99abf74051e12f885572cf6e93fac4f400 create mode 100644 fuzz/corpora/asn1/e065f0f303798f73edf61d4b66e19e3e06a551bc create mode 100644 fuzz/corpora/asn1/e076ba3e6633d04d7bfc32a48e1493cd91d2265a create mode 100644 fuzz/corpora/asn1/e084099689df42a17270fd1c021fce8cf357dc69 create mode 100644 fuzz/corpora/asn1/e0af9d5bdcf7724b7ee725970add794f044d736c create mode 100644 fuzz/corpora/asn1/e0be24467d0fb242760efadcad787af2a1c53568 create mode 100644 fuzz/corpora/asn1/e0d24318aa8ba0e189382a1c08e691cb15c88949 create mode 100644 fuzz/corpora/asn1/e0d75ce12dd73cffa9b4eb7f5f6614aea2095d1e create mode 100644 fuzz/corpora/asn1/e102014e0692f0034a7dc9cea493bb4fe6af637f create mode 100644 fuzz/corpora/asn1/e1052dcae647c6b033fb2b8610873fbc4f4863ad create mode 100644 fuzz/corpora/asn1/e12f031910c09d6e15a0bd18f881816f3dab2c7c create mode 100644 fuzz/corpora/asn1/e1315276decbd24a4e1e203a99c668f8c5d9fabb create mode 100644 fuzz/corpora/asn1/e13b9b09912810d5dfb6bae75a455f709c47df13 create mode 100644 fuzz/corpora/asn1/e13b9b7223afbd4804fb01ac8523061e7b69b47b create mode 100644 fuzz/corpora/asn1/e14e31a2dcc884f674548575ae7ae35c4a8eb7fb create mode 100644 fuzz/corpora/asn1/e1688dbdcdb2da09b6e2d32d27ed72ad9fd54ab7 create mode 100644 fuzz/corpora/asn1/e1759e953b035a0608f189542095629817ede830 create mode 100644 fuzz/corpora/asn1/e1d9b8fa24074cd110a65682a630f8ddf76f6b5c create mode 100644 fuzz/corpora/asn1/e20a8225c86380d668229b784f3cb2f31302b656 create mode 100644 fuzz/corpora/asn1/e21afbca48d619afdfb35abac093adfa0b424f59 create mode 100644 fuzz/corpora/asn1/e252b9a2ceea61fc7e571070ba176b508d165171 create mode 100644 fuzz/corpora/asn1/e2541434944981cc97ba1b4e9aa2ce220c0cbf4e create mode 100644 fuzz/corpora/asn1/e25ec2839a1f4f67ab05d4f561f7d5bc0037df4c create mode 100644 fuzz/corpora/asn1/e266216386f75257f625caf5b7a56a6f985c162f create mode 100644 fuzz/corpora/asn1/e2692bce0497a7d1715c61c9f8afae4a70b487e2 create mode 100644 fuzz/corpora/asn1/e26ca817afc6229a8084d7e3463500ca5cf32cb2 create mode 100644 fuzz/corpora/asn1/e280d065a824a791f8305234d3e093fc9a5a90c7 create mode 100644 fuzz/corpora/asn1/e2fe116f92c906e1cc43a6456f2603ce9ae0f51c create mode 100644 fuzz/corpora/asn1/e3102cdc85fb3c26ce6bf992afba7e1a65538b2b create mode 100644 fuzz/corpora/asn1/e323b89821453cf6a51c1ac78a6f7faade9be109 create mode 100644 fuzz/corpora/asn1/e332aec6ebc9b2d794b89fd559ae94d5df62f018 create mode 100644 fuzz/corpora/asn1/e34574e4a907ad6212bf589860a6f72208e433a7 create mode 100644 fuzz/corpora/asn1/e366a75239894ca54ec000fcc379a9c2588b805d create mode 100644 fuzz/corpora/asn1/e36747234db2614e3887edccdd58c6a62b1b0702 create mode 100644 fuzz/corpora/asn1/e374437c87e726c065ff1aab5c5c14b300b81586 create mode 100644 fuzz/corpora/asn1/e3a55a1ee8422b055b3043f96d799081f264ba99 create mode 100644 fuzz/corpora/asn1/e3a576a4f120eef80c0dfac3938f1d76866b67fd create mode 100644 fuzz/corpora/asn1/e3aeba3629cc88e6618ba90be5ecc2a3965cf373 create mode 100644 fuzz/corpora/asn1/e3b4f33b7369a8835aba8113c00c2b0463e2dbd8 create mode 100644 fuzz/corpora/asn1/e3b93bef1469d4f78a05fde7801e3d7e2ad06b73 create mode 100644 fuzz/corpora/asn1/e3c360383ee92a71305900ca42aa4519b3d98441 create mode 100644 fuzz/corpora/asn1/e3c96aca3631a330686f3a29fb18960889e9ad4b create mode 100644 fuzz/corpora/asn1/e40b375ab3e955f044a370ea347cc3707bcbbbc6 create mode 100644 fuzz/corpora/asn1/e4156b3b149d414511a7ea1a42ea0ebd7746625b create mode 100644 fuzz/corpora/asn1/e428f7f3cd8c4c49c930206acb889620a5c2511f create mode 100644 fuzz/corpora/asn1/e42bc86af679ba434e8237bfa3bb4bdacff999cd create mode 100644 fuzz/corpora/asn1/e43b766174a8b2b9882c2d988ca986cf928602fa create mode 100644 fuzz/corpora/asn1/e45881c1b867106ed1c31a4edc37f58be81b79db create mode 100644 fuzz/corpora/asn1/e4858ba5fc7e739d17ff0c0f8813b3fc1fa262b5 create mode 100644 fuzz/corpora/asn1/e49d1ed33e4c5f60580624db6422938115f2b831 create mode 100644 fuzz/corpora/asn1/e4ac07665287db3b063d76bd3663c7c673a604be create mode 100644 fuzz/corpora/asn1/e4e612a57916d5609261e4de43918f09a3cd2b89 create mode 100644 fuzz/corpora/asn1/e52c0485fc776243a9e8ebb7d85dd7a4dded5fe4 create mode 100644 fuzz/corpora/asn1/e555ea73831e9b26adeb2b8bcd7eab9e6cfa89fb create mode 100644 fuzz/corpora/asn1/e55c025dd0ecbca23225cd281f4d8ee48c514293 create mode 100644 fuzz/corpora/asn1/e55ca912add0d610327ba0bd51dcf17e0f8c7f76 create mode 100644 fuzz/corpora/asn1/e578cc428ba20330f3e9ad22788dc11a953098b9 create mode 100644 fuzz/corpora/asn1/e58e6a71445477600eaa7b2e67937756726e6058 create mode 100644 fuzz/corpora/asn1/e593d8b973848f530b066885d7c6042116df9b44 create mode 100644 fuzz/corpora/asn1/e5a7be5446431aa7edbb2ee3e3dc9e5683096377 create mode 100644 fuzz/corpora/asn1/e5c8c3d0d47f3b1f8c90186dc7e68b5ab192c935 create mode 100644 fuzz/corpora/asn1/e5eecb94e56e34b800240cd2904b207a8ff272fa create mode 100644 fuzz/corpora/asn1/e5f5b991a2421cfbc44fdf56980e45438a1672ef create mode 100644 fuzz/corpora/asn1/e5fa626ceeb3301968da9fb7f3ba583d4815a46a create mode 100644 fuzz/corpora/asn1/e5fb7e94d67afbebda26bb4daa811fe1f03ab990 create mode 100644 fuzz/corpora/asn1/e603ac10f3d35e66a15374efa4e6d9b3433eaa4a create mode 100644 fuzz/corpora/asn1/e608ded1c24ccb29e35f6276384a62f512f491c2 create mode 100644 fuzz/corpora/asn1/e61f0890a5f43b800545b27c8f883a6f35e2111d create mode 100644 fuzz/corpora/asn1/e634182c80d87d86fbdcf36da47518a297d4f346 create mode 100644 fuzz/corpora/asn1/e63829ba01838973785cf94e015842733ad851ff create mode 100644 fuzz/corpora/asn1/e647754911f47b8254d4d9f55226e6ff7447ca22 create mode 100644 fuzz/corpora/asn1/e6587a01fa64c3414dfb4e366508da3579479994 create mode 100644 fuzz/corpora/asn1/e66040ca4ae5201f3fbc0794de49f859e2c2c35f create mode 100644 fuzz/corpora/asn1/e660ae00341bdb7e944783e48b6943d9a236d8ad create mode 100644 fuzz/corpora/asn1/e6754ecc89e89f9cdacaedd05cab8a21aee3d263 create mode 100644 fuzz/corpora/asn1/e68c6ad33928539c017e802832f7224ac9e513be create mode 100644 fuzz/corpora/asn1/e697bb75dc3b99c609e8f7cf2c5621f2151971fa create mode 100644 fuzz/corpora/asn1/e6a355b6c2b453d0b066e0c5570d324671ca8a46 create mode 100644 fuzz/corpora/asn1/e6e566b306c1fd8ced987f82483f8ead3784a082 create mode 100644 fuzz/corpora/asn1/e6fb7495df08b11d115d89cec4cf70d3cdb2b933 create mode 100644 fuzz/corpora/asn1/e7156a9847caf804c71addb290ef589f7fa0bef6 create mode 100644 fuzz/corpora/asn1/e71d545d292db6951963875d6a45977ceb344217 create mode 100644 fuzz/corpora/asn1/e724f6f09f2d5802acf380baa095364085d7aa8f create mode 100644 fuzz/corpora/asn1/e73d4087e9b37bad2576462775c627727d346eb1 create mode 100644 fuzz/corpora/asn1/e75166020278cc1364ad121cce9bc91e6c6aabba create mode 100644 fuzz/corpora/asn1/e7a04d5432e2efa7a3faea4535f87cf32b01976c create mode 100644 fuzz/corpora/asn1/e7b7549b1f7b6d407428adc2ea574d2d6bac0edd create mode 100644 fuzz/corpora/asn1/e7bcec9f52ca77138086480b0b589296e9229c82 create mode 100644 fuzz/corpora/asn1/e7d16f9f208b9d4a230a82955bf706688b53bb42 create mode 100644 fuzz/corpora/asn1/e7ddd4b5d1da6bd5a65ca24a575debac9de95fd7 create mode 100644 fuzz/corpora/asn1/e80f26cff0d3c7c7c7dd66373e3132e0f38664c8 create mode 100644 fuzz/corpora/asn1/e812bbbdd7984d227bf68d313751506a8fc05110 create mode 100644 fuzz/corpora/asn1/e81b381a8cf2620a12975afe95c2cd577b1f8377 create mode 100644 fuzz/corpora/asn1/e865b53ef469b2e4e49908648e7371f4b9a750e0 create mode 100644 fuzz/corpora/asn1/e86815b2e80708797425e856aa7706d991fb56af create mode 100644 fuzz/corpora/asn1/e8682365dcd5e729d87aa63869da99fcfdbd3523 create mode 100644 fuzz/corpora/asn1/e876fc7830379f7b936740965403f0f177f68f42 create mode 100644 fuzz/corpora/asn1/e8814a8dc238ea5d54bdc0e60193e5db3b0c06bc create mode 100644 fuzz/corpora/asn1/e8c260dccd897de268632300495ad247224ea8f6 create mode 100644 fuzz/corpora/asn1/e8caa2a0b9c2552a0e71b2f121e5e98b9a57cf9a create mode 100644 fuzz/corpora/asn1/e8d0332bb9f3a36c8a944df1a02d8020694bb897 create mode 100644 fuzz/corpora/asn1/e8dcb94f3c0a0942df689750803eb1ab949f6149 create mode 100644 fuzz/corpora/asn1/e8de420c4c9ad4d312d4a15fd597c90efad401ff create mode 100644 fuzz/corpora/asn1/e8ebb9fd3795c6d27a41f6c44b7ff266c8223456 create mode 100644 fuzz/corpora/asn1/e8f18d3ac417ebf164db46311e09829e65ed70c4 create mode 100644 fuzz/corpora/asn1/e902d1891eaff3f7f4743520cd469bbe2af12456 create mode 100644 fuzz/corpora/asn1/e91fe173f59b063d620a934ce1a010f2b114c1f3 create mode 100644 fuzz/corpora/asn1/e92768057678d042f234df6962ee1f4ce60de906 create mode 100644 fuzz/corpora/asn1/e92aadad670ac157f7cd357ef18863370a632f45 create mode 100644 fuzz/corpora/asn1/e9435df1c7fcd8767c0dd744a6117f5dcf55d3ba create mode 100644 fuzz/corpora/asn1/e9520d25d07b9d7f18d6afe077da37892c178212 create mode 100644 fuzz/corpora/asn1/e95238a620b9e7cda9bd57c1a760bc521cd68cc1 create mode 100644 fuzz/corpora/asn1/e95f410c3ca4f39ee0b3a2aae1ac1c499010a70d create mode 100644 fuzz/corpora/asn1/e9e262d9dfa501e19f1dda51788ec52a3b3b7866 create mode 100644 fuzz/corpora/asn1/e9fb098224d2e7d9da6f9ed4d002d5d512b3fe40 create mode 100644 fuzz/corpora/asn1/ea19795056b4a88f746391b1c85d1ef39c9e76ae create mode 100644 fuzz/corpora/asn1/ea53e1b19de174b7beae5100e22778e08add7464 create mode 100644 fuzz/corpora/asn1/eab8c67aaed43045bf5487bcfb1aba6c03c283d9 create mode 100644 fuzz/corpora/asn1/eabc7f16d1be1aea8c18d3da9098425fb87da1b6 create mode 100644 fuzz/corpora/asn1/eae57b40f26c28728fff17b2f1817d5af54ebe33 create mode 100644 fuzz/corpora/asn1/eb0ef603dfd8c1c46f4423d775f38b0a14d5b601 create mode 100644 fuzz/corpora/asn1/eb2ea62a45fcbe766e51014ee8b15bf9f7b09544 create mode 100644 fuzz/corpora/asn1/eb4c37290e6ab3f4f3cd987875a72f67b320235b create mode 100644 fuzz/corpora/asn1/eb598aab68f7b48c2ee912d75acddb5014001dd3 create mode 100644 fuzz/corpora/asn1/eb6e6ea86afda2dcd0da1f9c7218d7836c03dbca create mode 100644 fuzz/corpora/asn1/eb72d9dda18bbcca933f8ae523501a1d9bba3dc0 create mode 100644 fuzz/corpora/asn1/eb764c79c4827331edf146c6167690a22bd37663 create mode 100644 fuzz/corpora/asn1/eb8e9b97a43e87f67acecb84269a371cda21b7de create mode 100644 fuzz/corpora/asn1/eba1eeb25e79e37a36d8188ec7be5bfa8405d3cc create mode 100644 fuzz/corpora/asn1/eba22455be43c9e35237cfa1fb9d4b6a142d353a create mode 100644 fuzz/corpora/asn1/ebc747cb389183e181504a0055a6a3f9f26ac8da create mode 100644 fuzz/corpora/asn1/ec1382d27e750ef8d85f1fdd0799b0591439716b create mode 100644 fuzz/corpora/asn1/ec315ad86c517663ef73adb4b8f3372baba22c7a create mode 100644 fuzz/corpora/asn1/ec341ff29f2a53e7bdc05e7cfe8cea46d1d7b4e2 create mode 100644 fuzz/corpora/asn1/ec3cb23c589f0871e1801377e6ef03c422cb971a create mode 100644 fuzz/corpora/asn1/ec80306d3ad33a6acedf815184472046b1da1815 create mode 100644 fuzz/corpora/asn1/ec99833a2e6817ab8230d4d70801af86273c37bc create mode 100644 fuzz/corpora/asn1/eca0e50342d512d337bf2422db9bd7f55073f96f create mode 100644 fuzz/corpora/asn1/ecae4596f5455a084b0f633df7b90b0f0b087de9 create mode 100644 fuzz/corpora/asn1/ecb3a8f3d55d588365836df7566b7af11f43c3c4 create mode 100644 fuzz/corpora/asn1/ecd837ea646bf43316af0d32bcdabd2be4fa8bfb create mode 100644 fuzz/corpora/asn1/ecda94c04e83e58927fd2dec901a11a485e722f2 create mode 100644 fuzz/corpora/asn1/ecdc37e91cbd90fad09d6a25e6bdbadc451f69b9 create mode 100644 fuzz/corpora/asn1/ecfb2d1934d2afdfc7e85e3ec03078b9514495ad create mode 100644 fuzz/corpora/asn1/ed201fe1f49f01d3d6125e9378c4c6b94496d6e2 create mode 100644 fuzz/corpora/asn1/ed30ddf2dc52246604dacd0bdaf715699903756b create mode 100644 fuzz/corpora/asn1/ed31cc7de2245df753797a0644a666897d5cb85a create mode 100644 fuzz/corpora/asn1/ed557d8ecde1b1dfed30ebdfd60049ef6aaaa840 create mode 100644 fuzz/corpora/asn1/ed568b63e7367edf8c7829d0036759d515a547fa create mode 100644 fuzz/corpora/asn1/ed5e3c3afde5353320ef5adbdb07f3fbb6672b77 create mode 100644 fuzz/corpora/asn1/ed7df7c3cdf9219817c579321229faaf0eadd2bf create mode 100644 fuzz/corpora/asn1/ed84001e961c4bb4dbd474ebdaf7e3e2a5b34049 create mode 100644 fuzz/corpora/asn1/eda701d6f2aadc9ec7ac9f8a0228a7db76d6f43a create mode 100644 fuzz/corpora/asn1/eda83a0f714d686e06c0f7bcb33f059c0388e42c create mode 100644 fuzz/corpora/asn1/edb095b416d8f08d83eee30fc4e0091f3d8a2d20 create mode 100644 fuzz/corpora/asn1/edcd6cb713e68ab148efff0161259911643c9fdf create mode 100644 fuzz/corpora/asn1/edd27d7878d0ed169d546461b53818c4443272b5 create mode 100644 fuzz/corpora/asn1/eddd0d738c2a5204c8da3a48f8e7e83299f89d2a create mode 100644 fuzz/corpora/asn1/ee00d33703b06961ff54ecc671bf4daebb3acadc create mode 100644 fuzz/corpora/asn1/ee1f04b4d91b0cb75ef7d776958502dadf759ba7 create mode 100644 fuzz/corpora/asn1/ee29e547498c5646135e73f868619d259d78ce73 create mode 100644 fuzz/corpora/asn1/ee61b54c1c30ec974f73cbe6bbfd2b9186a5acdf create mode 100644 fuzz/corpora/asn1/ee638062dc973600ae6c3b23a80fc1f59b14cbb6 create mode 100644 fuzz/corpora/asn1/ee9fa6a164702511a08ecbbaacc545b10e9ea6bb create mode 100644 fuzz/corpora/asn1/eeb4f19a99e84fdf50bcb31aa5f1cd0a9c0eb769 create mode 100644 fuzz/corpora/asn1/eebd927505222e18bece7973a4268d08275c570d create mode 100644 fuzz/corpora/asn1/eebe03bac30a537f78c88ccaddf70faa08c12856 create mode 100644 fuzz/corpora/asn1/eef67c792f7d81cac8cb80814522a674bf0962df create mode 100644 fuzz/corpora/asn1/eefc9c59049fffe941b1f1cd2e2851e9c300e26e create mode 100644 fuzz/corpora/asn1/ef0611b3919141cd94d73cef586db6e046be9f18 create mode 100644 fuzz/corpora/asn1/ef108fac7897815e610853e242a334323c24c5c5 create mode 100644 fuzz/corpora/asn1/ef1d606ddd19c0df336a5a1ea0c21d582cb1e984 create mode 100644 fuzz/corpora/asn1/ef37b215cdd9e7c6f02e9a70b48116cb36c0610c create mode 100644 fuzz/corpora/asn1/ef940fc6895d341b397ea9d86873dea5c9c19805 create mode 100644 fuzz/corpora/asn1/ef9ba81aa2a7339a1531dcc17832ed710104005a create mode 100644 fuzz/corpora/asn1/efa1b0cc84b4427a9b61a44998252ce400633260 create mode 100644 fuzz/corpora/asn1/efa49b1b7a35d20c605a6a0c51800243f22e7a5f create mode 100644 fuzz/corpora/asn1/efad2c128b9510cae89c65c2e25bf53ea055f376 create mode 100644 fuzz/corpora/asn1/efbefe20b581a12488f22b41c8e3d9b283da9fe8 create mode 100644 fuzz/corpora/asn1/efdd1d5227583fdef9f83230ea2c3baea4d2b40e create mode 100644 fuzz/corpora/asn1/efe2d218f340f1de5403614e487d9244382c7b61 create mode 100644 fuzz/corpora/asn1/efeb03d455bde889e70ad0b979f1c8636924687e create mode 100644 fuzz/corpora/asn1/f070f52fd31eb171bd8fc496481215a21c308902 create mode 100644 fuzz/corpora/asn1/f09a4aa8898b58a46bd64ec2a62a55d36b9fd9b6 create mode 100644 fuzz/corpora/asn1/f09e5e4c2bbf05b871a3c9440f2459ecaa2e5fc4 create mode 100644 fuzz/corpora/asn1/f0b51faaf656b05352a639a4c19bef55bcf7f342 create mode 100644 fuzz/corpora/asn1/f0b57876e656621069b94bf93b7e71f2bf79d50a create mode 100644 fuzz/corpora/asn1/f0eabdbfbcc4948846c79b391045ef5eec71791d create mode 100644 fuzz/corpora/asn1/f0ec66fe92468f3789cfe7a8c18463bfe1215152 create mode 100644 fuzz/corpora/asn1/f0f5db04594ec8f3ab24857f30199496102952b3 create mode 100644 fuzz/corpora/asn1/f10da923efc27e53b3c8ad69016df7fb8ddabc4e create mode 100644 fuzz/corpora/asn1/f10e325e4ea043776339ee8ada0711192c65c5f8 create mode 100644 fuzz/corpora/asn1/f11874e92ba8fc77be4132602349cd4d897a158b create mode 100644 fuzz/corpora/asn1/f129a649471f6486ec26bbc4dfb324807d07e77a create mode 100644 fuzz/corpora/asn1/f149b3e023ef65ebd19ecad3ee09bc606101b7bb create mode 100644 fuzz/corpora/asn1/f151dab015518ab75b4c5b442f69246dbf52c5d6 create mode 100644 fuzz/corpora/asn1/f165e03130081c730ecd0721d5869b1575ce13fc create mode 100644 fuzz/corpora/asn1/f173c967bcf7d7ae73b7956bb6fa9ee8656e38b6 create mode 100644 fuzz/corpora/asn1/f1792fcf0ad2db0777f2a2e42770fbe90cf9f509 create mode 100644 fuzz/corpora/asn1/f190175ca74f55f48c6971f17f3e1d6ff5a8b6e9 create mode 100644 fuzz/corpora/asn1/f195c020a28dfc5f2fb6af256b524ddcd93756ed create mode 100644 fuzz/corpora/asn1/f1a599deb6f048e985cdff83e08f1de1a273a484 create mode 100644 fuzz/corpora/asn1/f1aa28113a93a32d0c856e544dc9911a58d353b7 create mode 100644 fuzz/corpora/asn1/f1bdc2b324005226dfa19c4805d88f843264c59c create mode 100644 fuzz/corpora/asn1/f1c57e2a76d316353b53bd08fda5bb0fdcb2fcdb create mode 100644 fuzz/corpora/asn1/f1cba12917589910ccd4714a5c52a0742cf59ea9 create mode 100644 fuzz/corpora/asn1/f1d48fa8f581bf6d481aff76ddde8201c1817abb create mode 100644 fuzz/corpora/asn1/f1e517b1e6d6b58444650c8ded1badef8b41f206 create mode 100644 fuzz/corpora/asn1/f1f5db92c413092e447b7952a9f570cbbd91dba8 create mode 100644 fuzz/corpora/asn1/f233d9658e8a9028a06c37b360b7ca2cd51136ec create mode 100644 fuzz/corpora/asn1/f26993070252a6eb36ca097379f665ae4f17f47e create mode 100644 fuzz/corpora/asn1/f285e6c896905d7ea1b8c6a25ff545a97f532115 create mode 100644 fuzz/corpora/asn1/f2e42be3a0f5a357ffcf9a00daa7a70de8b23b99 create mode 100644 fuzz/corpora/asn1/f31b95175952ed280f2485bd665676bcd7e2117b create mode 100644 fuzz/corpora/asn1/f33b84cf850e8ca4e16b76c9de94f79660e1b2df create mode 100644 fuzz/corpora/asn1/f35a6fb0128c28e1c44071f43156ceaea07bb837 create mode 100644 fuzz/corpora/asn1/f35b701a7a353f049de4c9495585f5edff155b01 create mode 100644 fuzz/corpora/asn1/f3655de8a602af63006a096d1b2730c49a80ef98 create mode 100644 fuzz/corpora/asn1/f36a37e1b68d354d558232288b2f0a3316e17269 create mode 100644 fuzz/corpora/asn1/f3844b090ab7f25c3b7162322f1521f55f04ec1a create mode 100644 fuzz/corpora/asn1/f38b4fe253e09779ddb333f415a8398962445bbf create mode 100644 fuzz/corpora/asn1/f3c5037c6f62acba23b50fb08b146bb5a07914ab create mode 100644 fuzz/corpora/asn1/f3dc1287d073dc9c303afdde6025fb41f6f0edda create mode 100644 fuzz/corpora/asn1/f3e98b1ec7d90542557113c1e59a30590b0e6285 create mode 100644 fuzz/corpora/asn1/f4183769aec3fcb60bd1ab868328ab2da97c7682 create mode 100644 fuzz/corpora/asn1/f41f086985aec798ad0d0b14ea1d8818753be1a0 create mode 100644 fuzz/corpora/asn1/f436883d82f451b5b8f174cafcdac3e0c73186c8 create mode 100644 fuzz/corpora/asn1/f46434a03308c25f6725b83f907d33eb5e4af9b9 create mode 100644 fuzz/corpora/asn1/f47af545ff93604bb8c110df50c185dccd625ba7 create mode 100644 fuzz/corpora/asn1/f481f1d1a1bf63b5e9c93c65126e7ea6cb424b5c create mode 100644 fuzz/corpora/asn1/f486d236a4c376742c0739c3bddadb587f5e0018 create mode 100644 fuzz/corpora/asn1/f4c8f409402ca33a52ad333849bf2f99d3870ceb create mode 100644 fuzz/corpora/asn1/f4f859f6f750cdd8202d305370c9bf63470b06b4 create mode 100644 fuzz/corpora/asn1/f4fdf06bdc49bf4e1eb2159c3af101f8dc49b88b create mode 100644 fuzz/corpora/asn1/f504a53f46e36e6362e7615e3e903d8e98f41d49 create mode 100644 fuzz/corpora/asn1/f50734f6ec2c8f136a2492d8a1263cdc93b6b1b6 create mode 100644 fuzz/corpora/asn1/f526486eeff2fa593d8552ae64e94edc0b9d3d19 create mode 100644 fuzz/corpora/asn1/f5344c6fdce00c5a1801c38fbe1d52846859c90f create mode 100644 fuzz/corpora/asn1/f543ac2c80af1b26a79b6a980c46eb6aa0cbff53 create mode 100644 fuzz/corpora/asn1/f554021c618278d8f7c220b04f1261d6db3e3a5e create mode 100644 fuzz/corpora/asn1/f5546af8eea3da2e9e435d5c32f2dc91ef7b2a09 create mode 100644 fuzz/corpora/asn1/f5566321d133a6b194d65c0d4497ce82fc53eec0 create mode 100644 fuzz/corpora/asn1/f596f572ca960930c106827bd047666eafe046be create mode 100644 fuzz/corpora/asn1/f598e959cc02f565ba91da2331a981fb7384180a create mode 100644 fuzz/corpora/asn1/f5e6921553d297e6910e4823b1be12a5b29de90e create mode 100644 fuzz/corpora/asn1/f5f53364f4a266cc7562def1744b05362a243940 create mode 100644 fuzz/corpora/asn1/f62ab84e40631100d8a1dc4124ca71eba3886708 create mode 100644 fuzz/corpora/asn1/f650110ee11fb82a3762d62e9931f90125e8deac create mode 100644 fuzz/corpora/asn1/f650be3770a3c585e192ab90a39325ef48a2c335 create mode 100644 fuzz/corpora/asn1/f65d78f9a0733cfd0f84fad36c03b25c3dfd0286 create mode 100644 fuzz/corpora/asn1/f666f56690eeb1dfc9600fd371c6f57ffdf70663 create mode 100644 fuzz/corpora/asn1/f6691716f64e8d04ade403f7a22fbe6d2896556f create mode 100644 fuzz/corpora/asn1/f68b13b6367e1b0c1ea39bab98ca161b1d22ef45 create mode 100644 fuzz/corpora/asn1/f6a47dfd3f4e4d9abb62aeb7174c0de497bb82ac create mode 100644 fuzz/corpora/asn1/f6a709650f2e7dfc55165214b1d3759a758ea193 create mode 100644 fuzz/corpora/asn1/f6aaa8508eb08272569583d1994cdd036fbee413 create mode 100644 fuzz/corpora/asn1/f6b0db7c9be1ba34a644bbcbc359e6238d5666b6 create mode 100644 fuzz/corpora/asn1/f6cdb4c36dc9496e29e0cd8c2250f58afe0a3a16 create mode 100644 fuzz/corpora/asn1/f6fa0962abc3e802ee5983a9f915155e649971f1 create mode 100644 fuzz/corpora/asn1/f739c044e7aa2f3802dad6e5c276ad7ff3401a6c create mode 100644 fuzz/corpora/asn1/f73fec2725ef6f5a04b91e032b304c265b68b65a create mode 100644 fuzz/corpora/asn1/f7567ce9b654f7e75cea729f68e70284f2ece731 create mode 100644 fuzz/corpora/asn1/f7578c63ecea434dee743e1bfef80cd7fadc590b create mode 100644 fuzz/corpora/asn1/f7707e801adb4f94800a9980b3429a3dd80bb5a3 create mode 100644 fuzz/corpora/asn1/f779b155ce809f66d46cfe8760d2b8fc082fea03 create mode 100644 fuzz/corpora/asn1/f77aa4a4e241499079490328f8f8b490dad5e338 create mode 100644 fuzz/corpora/asn1/f782946bbd8afcd41435ca8d9589cf4f6d6726e4 create mode 100644 fuzz/corpora/asn1/f793fbd8017b3b23fbc27d2b724db7e8143f673f create mode 100644 fuzz/corpora/asn1/f7ba019012a93a62f8771728786c3c0cefa288b3 create mode 100644 fuzz/corpora/asn1/f7e6dd4451dabd14fb61f504d2de9dca59ea713b create mode 100644 fuzz/corpora/asn1/f7ffc62115bd8b9fd931b0545357da9b3c211a30 create mode 100644 fuzz/corpora/asn1/f81709f8352c89b0151dd7f14f3e113d42e737c9 create mode 100644 fuzz/corpora/asn1/f82b5ccb4a440a3d01ad9cbfad149f47cc8c5fe3 create mode 100644 fuzz/corpora/asn1/f82d3b71af0607cac2886297bfa2ec89dd101cee create mode 100644 fuzz/corpora/asn1/f84784f47c70baa1c8280b1175aae0ca6e3a8c77 create mode 100644 fuzz/corpora/asn1/f8de6abc43443b6b3902fefc3872f59a8eea395e create mode 100644 fuzz/corpora/asn1/f92bf9269252237d041ddc8b09a8178a378d1176 create mode 100644 fuzz/corpora/asn1/f944dcd635f9801f7ac90a407fbc479964dec024 create mode 100644 fuzz/corpora/asn1/f9504a555142fb9248f33d304fc9efbd57c33d9a create mode 100644 fuzz/corpora/asn1/f954b0367701e71adb23910d99ad49a2d6656f3e create mode 100644 fuzz/corpora/asn1/f95cc956bad37119d7d9b69342dd678f9614e3bc create mode 100644 fuzz/corpora/asn1/f98bcc888b42e3d5b3af88424ce413cb796e8c9c create mode 100644 fuzz/corpora/asn1/f99127ac5481b9132db2f2399610785643469dab create mode 100644 fuzz/corpora/asn1/f9b17a2b92d9b2b322493980eff15284ebee4248 create mode 100644 fuzz/corpora/asn1/f9bf7ad5f942fa1d272bdd8a4c1c5a71a9eeeb80 create mode 100644 fuzz/corpora/asn1/f9dabdf73f966f923a341d7c846e8995499e3576 create mode 100644 fuzz/corpora/asn1/f9ec3dd26ce5d75a0fe4a831623140a3eede8e63 create mode 100644 fuzz/corpora/asn1/fa01386fd5071f3dfb86744a8393026cd6b90fe3 create mode 100644 fuzz/corpora/asn1/fa1822bfc21a1fe01638e289357b69e0742dec26 create mode 100644 fuzz/corpora/asn1/fa1defbcf703275031b3bfbcd4dfec28f3c95030 create mode 100644 fuzz/corpora/asn1/fa25bc9e4b55377352bd9b84b10d4b401b20bd54 create mode 100644 fuzz/corpora/asn1/fa3b5dfaf5bd7771ed00e6bc63e10ff1622d8f14 create mode 100644 fuzz/corpora/asn1/fa470adc0cb32cff7ec348ec0697c918bff85e12 create mode 100644 fuzz/corpora/asn1/fa61ffa42f140e6fd1fc633dfc1cae4af74c0b00 create mode 100644 fuzz/corpora/asn1/fa6cc88cb32259aa54a0c40805118a290df01b69 create mode 100644 fuzz/corpora/asn1/fa73e49f81773035e50dc826d71d8f684b6b277d create mode 100644 fuzz/corpora/asn1/fa741b872209ee4ca170c84edc9761a0aac29c6d create mode 100644 fuzz/corpora/asn1/faae7efcfb0440e5e57fb01172c5a8a5fcbabfd4 create mode 100644 fuzz/corpora/asn1/fab1ddc131857828bf774dcd732123e901ba4502 create mode 100644 fuzz/corpora/asn1/fab8fe3a7a87e73dbde44a84c951dcf277421f31 create mode 100644 fuzz/corpora/asn1/fad81565da4d4e14d5bb8c386903e8ad7ae25f31 create mode 100644 fuzz/corpora/asn1/fb1ec26f6d85f507fe4c8e69dc69e7ec9a126ffa create mode 100644 fuzz/corpora/asn1/fb602843485410a0c6c0b7e998d188f182a80081 create mode 100644 fuzz/corpora/asn1/fb68f198edcdeaa143c224016993881820666044 create mode 100644 fuzz/corpora/asn1/fb85f20d84531c53ba5a61d17f2ab0e4a711fd89 create mode 100644 fuzz/corpora/asn1/fbe5fa3a558e9a76c393f2f12e68d5bcdd4cec80 create mode 100644 fuzz/corpora/asn1/fbf0f59154558a55009b6886ffe986116aeddef3 create mode 100644 fuzz/corpora/asn1/fc06be9e353221bcbb516249c2bcb7c068bf80f9 create mode 100644 fuzz/corpora/asn1/fc2ecb9df77e25b4203b3009088a2d5c997cb668 create mode 100644 fuzz/corpora/asn1/fc37f4f55974c9cfad9d0a597451c5a296ef25e3 create mode 100644 fuzz/corpora/asn1/fc5bb1d4d89dc267407020219b9399d126036830 create mode 100644 fuzz/corpora/asn1/fc62c152b8509dc61ab8516cfeb2c1bd2b350409 create mode 100644 fuzz/corpora/asn1/fc7c20b834c13b3b25206783d605c6be7eb91843 create mode 100644 fuzz/corpora/asn1/fc7cea1fa31cf1d621dd344370a64d282fce497d create mode 100644 fuzz/corpora/asn1/fc87070c7fdff8ebdda009dd9e66c83cc8bdf02b create mode 100644 fuzz/corpora/asn1/fc92dc5b3ee5da1169a75d2b0ae228a0cec808f9 create mode 100644 fuzz/corpora/asn1/fca36c53f255b5efd3322612f0f21ad08c184c0b create mode 100644 fuzz/corpora/asn1/fccf12c5975f58ea4e73f76ce1c29b2e6e8f1694 create mode 100644 fuzz/corpora/asn1/fcd7975a3e6585b83263b5445b870bca25a8e7ec create mode 100644 fuzz/corpora/asn1/fcf46724be307ee295a8d5527a843424429ba211 create mode 100644 fuzz/corpora/asn1/fd1708db1ddcf98385dfb5a7e312cca292cc83a8 create mode 100644 fuzz/corpora/asn1/fd2926ace2e972afc49bbb0c5e2c9ec9c8edbcfe create mode 100644 fuzz/corpora/asn1/fd2a882db3e38cc86dadde45daea5a079a49820e create mode 100644 fuzz/corpora/asn1/fd3c10f60098cbe8ee792648d71df987c3926d07 create mode 100644 fuzz/corpora/asn1/fd64909dbb2efe674967678d0c91e85e06174e79 create mode 100644 fuzz/corpora/asn1/fd6b9a3a092849f8cb853cf643aa11b05854138e create mode 100644 fuzz/corpora/asn1/fd72a59ff3d4c40dd9a8e8eae036b80f411c2924 create mode 100644 fuzz/corpora/asn1/fd75db8934c05d9d9b17260b240f5f2f5e43518f create mode 100644 fuzz/corpora/asn1/fdc89bef0a7babbcaf5d7dc6e875bd1c2051cb28 create mode 100644 fuzz/corpora/asn1/fdf61cd3f465902a2657f46467688c9cf9ceded2 create mode 100644 fuzz/corpora/asn1/fdf8941cad1833528951911cd59a43402f38b473 create mode 100644 fuzz/corpora/asn1/fe0ba40854c292b5561ae904e57b87f41e718f78 create mode 100644 fuzz/corpora/asn1/fe0e8b5145c3a581e690c39179ba85608c46e7f9 create mode 100644 fuzz/corpora/asn1/fe29e8302697186a4a06e5834f375d7cc1e1b90a create mode 100644 fuzz/corpora/asn1/fe2d35704873ec8b3608ab09de9036fa6362db6f create mode 100644 fuzz/corpora/asn1/fe4298dd0f2d9c7af16e6e1cfd42ed58cb59bd8f create mode 100644 fuzz/corpora/asn1/fe5d5d23a90c7743a5bcb0198b251c816c92d4ee create mode 100644 fuzz/corpora/asn1/fe6c1aff13b2b5bfed571d55aa48eae65e1e46e6 create mode 100644 fuzz/corpora/asn1/fe891d24577aacb8c9a302077978cad4c668c898 create mode 100644 fuzz/corpora/asn1/fed8b208dcb5b0446d1c51a4a67de8d6abefffa9 create mode 100644 fuzz/corpora/asn1/ff034f82fc46b5b43ae9f1eb939d728f89f8b1e9 create mode 100644 fuzz/corpora/asn1/ff0e1ebe7f4d81862193ed28cb355aa91afe6c18 create mode 100644 fuzz/corpora/asn1/ff360f0e8e72308766665e25f5aac9aaefa86706 create mode 100644 fuzz/corpora/asn1/ff5a844e120b52e7e5949496075fc9847dfbf374 create mode 100644 fuzz/corpora/asn1/ff6dfe941b4e26f195b550f9fd58dd93b29ecf81 create mode 100644 fuzz/corpora/asn1/ff8a75cf7988f1f2d4a54e0c37967015cd8b87d4 create mode 100644 fuzz/corpora/asn1/ff8b8d3874f8a4f5e11f18c2709ba4a1c758d1ef create mode 100644 fuzz/corpora/asn1/ff91e07bcda678062cb9bb49043db9bb7372eb5c create mode 100644 fuzz/corpora/asn1/ffd566554ec9a7463ce829db7d9fb069ee9876b5 create mode 100644 fuzz/corpora/asn1/ffd7f294e877411cd191819cc818971a3150b42b create mode 100644 fuzz/corpora/asn1/ffe511315be3b33270440692b8e11a207011fe7f create mode 100644 fuzz/corpora/asn1parse/00eff4dd23adce949b3066368572a5e398e664c3 create mode 100644 fuzz/corpora/asn1parse/01a1a6eaf03d6eb89cec57425b3c1951d6c3d848 create mode 100644 fuzz/corpora/asn1parse/01ec4428d75241a628ac875142f329427d442348 create mode 100644 fuzz/corpora/asn1parse/01f907d519964796051bd8477cd621d1cff3578d create mode 100644 fuzz/corpora/asn1parse/025083edfcdebaf7c19e199e8073d11b1523369b create mode 100644 fuzz/corpora/asn1parse/027f6e82ba01d9db9a9167b83e56cc9f2c602550 create mode 100644 fuzz/corpora/asn1parse/02859ef44eda40b87e38020a4099daae5d0af16a create mode 100644 fuzz/corpora/asn1parse/0327b6cf2417a59ff594d05310f5f683be1f0b0e create mode 100644 fuzz/corpora/asn1parse/033e7df8fa7e9ca17075d50c89fc76113c14c49e create mode 100644 fuzz/corpora/asn1parse/033f563bc19e7f7b250c89fd7ed3e90419812bdf create mode 100644 fuzz/corpora/asn1parse/035df15165ddbc1666d656c19faae61f29706cec create mode 100644 fuzz/corpora/asn1parse/03986ab7d66138ef56516e48245a90fca88a5363 create mode 100644 fuzz/corpora/asn1parse/04769c9b1b188d1a93aeb8d1239a0c91d8bd829c create mode 100644 fuzz/corpora/asn1parse/05cd611a824c84e168aaa8af75dede42923f8a64 create mode 100644 fuzz/corpora/asn1parse/05f519920dff922b7c6299504494d70820952f74 create mode 100644 fuzz/corpora/asn1parse/073bef59aaf3fc1a1dbd63557dde2db408023942 create mode 100644 fuzz/corpora/asn1parse/079dde1801c6b1e289c5605882bb4279af47f751 create mode 100644 fuzz/corpora/asn1parse/07ac75efe6ca20c4ea64c7d4f9fcc65a395814e2 create mode 100644 fuzz/corpora/asn1parse/0aa516415b245efb270ca2b4bf831ebd3e091717 create mode 100644 fuzz/corpora/asn1parse/0c43e098ac9e066aac29f6d1747d0f00227f59ba create mode 100644 fuzz/corpora/asn1parse/0cd161ab3e0e5be829e794fe841498feba6b217d create mode 100644 fuzz/corpora/asn1parse/0cdf924e6578e875d19ff4d17e7013d499fafdfc create mode 100644 fuzz/corpora/asn1parse/0cec22cd429b9a959bf494ddec012b8702cd79c8 create mode 100644 fuzz/corpora/asn1parse/0d2043e01decb4f401b9b6a4be2bdad7aab1df67 create mode 100644 fuzz/corpora/asn1parse/0e470c12f319db0f6e9636ab453f96fb6aabfe5b create mode 100644 fuzz/corpora/asn1parse/0e7b086e1626ef5e27bb16811161b8d99819098d create mode 100644 fuzz/corpora/asn1parse/0ea2009e2bd0321dcc2449544013582707d86530 create mode 100644 fuzz/corpora/asn1parse/0f47fd5ad953119e91b80007d0b6aa7a4c9e112d create mode 100644 fuzz/corpora/asn1parse/0fa29b8c8a5d796e8c14294cebced3c4ed040002 create mode 100644 fuzz/corpora/asn1parse/0fc2c5ff9021ec84c40d59c2a148bbd40a25b535 create mode 100644 fuzz/corpora/asn1parse/101b080c53aa70f240d6233dc6a3f70ad716476a create mode 100644 fuzz/corpora/asn1parse/1090de62d272a459dc32182669f19c7aaaf90308 create mode 100644 fuzz/corpora/asn1parse/10c2d9e5bd5bbe06f3c97df8e45acd481d8890ab create mode 100644 fuzz/corpora/asn1parse/11c211cd3ff146a1ccdb70a9db6a56aa6c457125 create mode 100644 fuzz/corpora/asn1parse/11fdd5d39665523858f572af4447020c9426026e create mode 100644 fuzz/corpora/asn1parse/12253f494ec7e32f60421af62bc3145745b2e88e create mode 100644 fuzz/corpora/asn1parse/12c8a2227b942c1bbbb91edd8f30244613ed5d34 create mode 100644 fuzz/corpora/asn1parse/133b4d238da97eec7ff097becf966fbc6c6369bf create mode 100644 fuzz/corpora/asn1parse/14178e220b4925574ab240e3d0c552ec05ec6e79 create mode 100644 fuzz/corpora/asn1parse/14264018e6bc72fada2b7a28940b79b3412fce45 create mode 100644 fuzz/corpora/asn1parse/150d0a3ff583c87157e360f146ea3337a413c0b6 create mode 100644 fuzz/corpora/asn1parse/15aacc4eab5317c589ec69dcd2be6fd15e5c8551 create mode 100644 fuzz/corpora/asn1parse/15cf0992b80220d4b964146ce7e6984d2523ab36 create mode 100644 fuzz/corpora/asn1parse/16185292e20e301c45f78d6f5d37f27772b683b0 create mode 100644 fuzz/corpora/asn1parse/1634217f50491ba477c9773581784bd3f7471b03 create mode 100644 fuzz/corpora/asn1parse/1660f4c688ec0c05b3fd24ca6af62a3b262c8df2 create mode 100644 fuzz/corpora/asn1parse/1663698a71a4260c6e1e462df5c191a1a1154853 create mode 100644 fuzz/corpora/asn1parse/16d9ac16bd611de5f8f6d74d322290954abf00f1 create mode 100644 fuzz/corpora/asn1parse/1733c79af429cbffd01200bdde46c4ccc03c3c0e create mode 100644 fuzz/corpora/asn1parse/17ec9059cd9e1778bfb06c6c005ea0d204ad27e5 create mode 100644 fuzz/corpora/asn1parse/17f7a85cd0d2c8a256ab8cc7b7f0e9a61c4fa930 create mode 100644 fuzz/corpora/asn1parse/181e43af6be050328f4e26dbad7a3ec417f1d7d6 create mode 100644 fuzz/corpora/asn1parse/183cf7aca8abce004de72455b4080d4082410949 create mode 100644 fuzz/corpora/asn1parse/1858b2325be8da41d5ea9885ff3c4766d414100f create mode 100644 fuzz/corpora/asn1parse/1ad3e86ecda8ff0c2fbafff71f105375b69f99ab create mode 100644 fuzz/corpora/asn1parse/1b77aeeafafecce3ae280f6738befef72a38fc18 create mode 100644 fuzz/corpora/asn1parse/1be1a68fc70b531d7fcce40ad4476bb240aa0251 create mode 100644 fuzz/corpora/asn1parse/1c36ca01e596c3185da92ced0fd2bd3190d239af create mode 100644 fuzz/corpora/asn1parse/1c3d8e2d2ba8742ca4ced115e07bb21bb7e23f78 create mode 100644 fuzz/corpora/asn1parse/1ce8498d15c69bb205e09d2013207364596af9d9 create mode 100644 fuzz/corpora/asn1parse/1ed327473202ed84a153f347713df0bccabf8954 create mode 100644 fuzz/corpora/asn1parse/1f175e84b638afe0bd2f4ac88f182693ac376d34 create mode 100644 fuzz/corpora/asn1parse/1f29e7373a26536f5bb514dde2b474d795e2db59 create mode 100644 fuzz/corpora/asn1parse/1f2cde5ed7122da68806ab4ad2473a0d8360a83b create mode 100644 fuzz/corpora/asn1parse/1f2db7c9ae005f29846b50ed357ebb892319b544 create mode 100644 fuzz/corpora/asn1parse/2004b990f6dc9f0d7158a77849a238ffc18d7171 create mode 100644 fuzz/corpora/asn1parse/203c349f5066f5f0f106a9d47192879fdc184381 create mode 100644 fuzz/corpora/asn1parse/228bd7fc3c556bc1078aae442034326569ca64cd create mode 100644 fuzz/corpora/asn1parse/2387ac39d1c0c5a742ac1d94477279b1d6d393f5 create mode 100644 fuzz/corpora/asn1parse/23ef60aa467187311cbb67995b41189bf548fee2 create mode 100644 fuzz/corpora/asn1parse/23f8277ca929ab2bcdb7fb12677e24017796caa4 create mode 100644 fuzz/corpora/asn1parse/240992d25353c30f3be23ff8c87300aee40078d4 create mode 100644 fuzz/corpora/asn1parse/244014f63a27bb88df542a0b7d7baabca836d107 create mode 100644 fuzz/corpora/asn1parse/246b2a1cc0b64457e4aa45264743a1f496570faa create mode 100644 fuzz/corpora/asn1parse/24bcf80ef602addf52c1e39bc15981c95566d8fa create mode 100644 fuzz/corpora/asn1parse/25d08dde1611ba0e3ef4acd7255a53c2935b991f create mode 100644 fuzz/corpora/asn1parse/272affde38603570a640bd7de2904842c5df032e create mode 100644 fuzz/corpora/asn1parse/2735e3edb439342b57a4ef5df88dfe289fcf9c14 create mode 100644 fuzz/corpora/asn1parse/276716bcb4c62158d546f194d0776a3345b86953 create mode 100644 fuzz/corpora/asn1parse/285523449bb3b9623944ed4fe78c9d73138d0828 create mode 100644 fuzz/corpora/asn1parse/288fb2d6f42b5e13dabc1545d5ffa3cf11daf59c create mode 100644 fuzz/corpora/asn1parse/28b35080aada64c7f80b529f7ac4f3a6a69eb5b9 create mode 100644 fuzz/corpora/asn1parse/28eff8af2a3af2d37106441bb97cfc41561b1a46 create mode 100644 fuzz/corpora/asn1parse/299a6b9779874a3608c556125fb4ce246f4664bd create mode 100644 fuzz/corpora/asn1parse/29fe2d690007f9c5ff5524fa244ff548ba18fa56 create mode 100644 fuzz/corpora/asn1parse/2af6d48d5724ade9d67c520d9d80b15ecef89eea create mode 100644 fuzz/corpora/asn1parse/2c888728504e1020a84f3c62544fe6b9b4c206d8 create mode 100644 fuzz/corpora/asn1parse/2ca23ef1923e1a8c2b35d6bc2fffc7bb0a27553e create mode 100644 fuzz/corpora/asn1parse/2cb483571a342ad76d560dd7fd89b830e52fa586 create mode 100644 fuzz/corpora/asn1parse/2cb9dccdf0971fd12ee2284ac0a3cab352767d7b create mode 100644 fuzz/corpora/asn1parse/2d763c7cc738acf8f51ebcbb2fa026885a9aeed6 create mode 100644 fuzz/corpora/asn1parse/2dcf9ab1b7d6eb16debcd7b0385093c550f2f64b create mode 100644 fuzz/corpora/asn1parse/2efe7c4e6f5f0469002dd6664a0ccbf713c788b1 create mode 100644 fuzz/corpora/asn1parse/2f8b85b5a012f9799871733b6e9232fd3b34ab2b create mode 100644 fuzz/corpora/asn1parse/30128c634626e0fd05899ec1021145bd08b06ccb create mode 100644 fuzz/corpora/asn1parse/3118a1578c5cd859a682d3703c98301203d9e668 create mode 100644 fuzz/corpora/asn1parse/314e6b07223dd6ae8726c3d81c21d78e81f53e7a create mode 100644 fuzz/corpora/asn1parse/31665a2f0ff7505b2ca172bb475a8bc5dc6dbead create mode 100644 fuzz/corpora/asn1parse/316aa29834e662b4ea0a4997518442bbd0c8dd51 create mode 100644 fuzz/corpora/asn1parse/319ed82f19a1179468a07bab84b054538b6df935 create mode 100644 fuzz/corpora/asn1parse/32cd2f645c6cf679a28c40f2a0322a66ea3532c9 create mode 100644 fuzz/corpora/asn1parse/33fdc0dd795715ca62141df1e7aa35e25a3a077f create mode 100644 fuzz/corpora/asn1parse/34601365e3f3937ec930766761bb22e74e8b752d create mode 100644 fuzz/corpora/asn1parse/35182f40f5ee4e123a2048cd884c953b960a3ee9 create mode 100644 fuzz/corpora/asn1parse/37e03835331f62cdb08fbb1e79ae552e49cdbb41 create mode 100644 fuzz/corpora/asn1parse/38169f4274b5f2fd6fd64a61667e19dbd89c6a4f create mode 100644 fuzz/corpora/asn1parse/389c77c1758dd5cb487f838c77798f9d4b3e6163 create mode 100644 fuzz/corpora/asn1parse/3978b85ca8e5537dd52a74ada5e72fa8632a6de0 create mode 100644 fuzz/corpora/asn1parse/399aac744f8909822a50f642df0f82cf298d94b8 create mode 100644 fuzz/corpora/asn1parse/399bb9e9f859fdb16cd3daf233ea43359a65864c create mode 100644 fuzz/corpora/asn1parse/3a1c56172ee7c631095508f201fe2574646cdcdf create mode 100644 fuzz/corpora/asn1parse/3b31a275b830169efdc57a003b1facea1033e8ca create mode 100644 fuzz/corpora/asn1parse/3c2e6c4e73a460f20264f3f7388690ff7291594c create mode 100644 fuzz/corpora/asn1parse/3c7e8779a61a7d797d8f30f2b2e00c0b6d954a33 create mode 100644 fuzz/corpora/asn1parse/3c8eeacf5a807bb9073dea87d9c42e5e7461e3a0 create mode 100644 fuzz/corpora/asn1parse/3cd82f1bf0b7d07687c40953749543e1a12d95c9 create mode 100644 fuzz/corpora/asn1parse/3cfdaa65d83f3883dccfc224b67946da23f11852 create mode 100644 fuzz/corpora/asn1parse/3d11014dbca64455a1b9474c81e15c53af97927b create mode 100644 fuzz/corpora/asn1parse/3e6def017464285c66502b95e96ab079ad65e849 create mode 100644 fuzz/corpora/asn1parse/3e9e817942a1baba63f07284d3f40457487bb04a create mode 100644 fuzz/corpora/asn1parse/401625a441d9efa6c2ea22a5867a1c36fc14bd3e create mode 100644 fuzz/corpora/asn1parse/4054c683a7ab1c06886ea3e00f50cd260c37def4 create mode 100644 fuzz/corpora/asn1parse/4057e1f578329624e796b94879744e2be452d38c create mode 100644 fuzz/corpora/asn1parse/408e123a55235d33fe3610e9b10610c776280552 create mode 100644 fuzz/corpora/asn1parse/40bce251b6d5ef19e35169c532094964a38c659c create mode 100644 fuzz/corpora/asn1parse/41a6938973b559fbd8ebf55105fdb92a2441509a create mode 100644 fuzz/corpora/asn1parse/41f32f3759e5c817178fec795ba8cab4f431256e create mode 100644 fuzz/corpora/asn1parse/4265127d4813b9d42534710fe15f1cf042643bd6 create mode 100644 fuzz/corpora/asn1parse/429d7a72eea4a406a603c0071c34a8dbac858916 create mode 100644 fuzz/corpora/asn1parse/42b5ea9f618a1c4df6d59a4976593c72bfac5385 create mode 100644 fuzz/corpora/asn1parse/42cdb73fa79e064db0a19557d3a13519aaefdd58 create mode 100644 fuzz/corpora/asn1parse/42e2444557fcd9e94ffc7c78a7e6110490878479 create mode 100644 fuzz/corpora/asn1parse/43314107e6d6725cfcdf43b2b73b734b569da6de create mode 100644 fuzz/corpora/asn1parse/433196ee1b3b402def6c184df93720698aa5e465 create mode 100644 fuzz/corpora/asn1parse/4391e158eed8a0a53a2d8ff793346c422291f65f create mode 100644 fuzz/corpora/asn1parse/446857b35e7ac31e30b5c5aec1db0197e1626cea create mode 100644 fuzz/corpora/asn1parse/454eb70382875f32d63012e59741b0b3d877f5e0 create mode 100644 fuzz/corpora/asn1parse/4587fc67ae30be3fc6870f903c89649319635fcc create mode 100644 fuzz/corpora/asn1parse/4630b1d6e9b293e63a25caacf2209a436ea32e7a create mode 100644 fuzz/corpora/asn1parse/4640aa465be24a6fa6e4530d79aa85e644529909 create mode 100644 fuzz/corpora/asn1parse/46bb1edc95a9ba8df7d3c119e22b6329e590c08b create mode 100644 fuzz/corpora/asn1parse/470ee240e8f1c85759b772f75cd55b70a3567b6e create mode 100644 fuzz/corpora/asn1parse/479329c4ccc69464de5507f04ebc760e2efb31a8 create mode 100644 fuzz/corpora/asn1parse/48663a1a39961ffef8bfb265cff69b82deac2b40 create mode 100644 fuzz/corpora/asn1parse/486e216f55c29754bd34fffacf8eb4c5bfb2ce6a create mode 100644 fuzz/corpora/asn1parse/48a1b352b64e96dade431f1c53b7508c7c93efc6 create mode 100644 fuzz/corpora/asn1parse/48df16bc15351e7281d9bd2cef1ea9485c5f6072 create mode 100644 fuzz/corpora/asn1parse/4925a7adc21b445946766747f2feb96975260090 create mode 100644 fuzz/corpora/asn1parse/498ec114fb615262335edba3d979531b862f1be1 create mode 100644 fuzz/corpora/asn1parse/49a63399586a985cdac7aa3d42d70a1a7803f82d create mode 100644 fuzz/corpora/asn1parse/49fec3098cc76f9f0344bb750beb97333591d63d create mode 100644 fuzz/corpora/asn1parse/4aae21cc3a76571618dfc7cbe352d5411f160191 create mode 100644 fuzz/corpora/asn1parse/4ac46179af49de48ac4ffe56d8dd55552cc8d71d create mode 100644 fuzz/corpora/asn1parse/4c3aeacb2bebb4d6f6fc56d1bc1fb7fdf6e738ce create mode 100644 fuzz/corpora/asn1parse/4c7557118d54574bbe83aea7d03ab8f20aeb44b8 create mode 100644 fuzz/corpora/asn1parse/4c90e85051a3bd8602f004e45258a98c993ef17f create mode 100644 fuzz/corpora/asn1parse/4dfec104bdebd37986604df1cdac812ef96e5c96 create mode 100644 fuzz/corpora/asn1parse/4ea897a9bf947406b47b81e549d197d24ba38688 create mode 100644 fuzz/corpora/asn1parse/4ec5148089423af3d06239268f1fb608ada230cd create mode 100644 fuzz/corpora/asn1parse/4f3548f51fa1bd56b5b75dbcd37d730a8a71fe6b create mode 100644 fuzz/corpora/asn1parse/4f730045667ab724e11a09b446ea362d6edd51a9 create mode 100644 fuzz/corpora/asn1parse/5000ddc3733bc45977221fd188936c8ffc5af7ec create mode 100644 fuzz/corpora/asn1parse/5009d72be11f131c170d4a3d0827526b75c0f753 create mode 100644 fuzz/corpora/asn1parse/501ac4f8f8dda092d69ee42daaadf9de6b292e86 create mode 100644 fuzz/corpora/asn1parse/50379eabb895ca6accd51009d882831ab58b5218 create mode 100644 fuzz/corpora/asn1parse/50cbf74f6c0cb17212d1f1392d71c6a16cf44dba create mode 100644 fuzz/corpora/asn1parse/51134b56031c1dc336092374fdc7025db064e8a1 create mode 100644 fuzz/corpora/asn1parse/513249c47a6e6bf69b25bf0216a1f52ec068d9f7 create mode 100644 fuzz/corpora/asn1parse/51861db1e2945563e0c97b7f6e1c948ba89ab0b6 create mode 100644 fuzz/corpora/asn1parse/51d695d5f9091074f282599b3d3e2fdf14bad3cd create mode 100644 fuzz/corpora/asn1parse/532e650bb0b70927bf8aa99f959f9036a0510725 create mode 100644 fuzz/corpora/asn1parse/5377f18b77a75d4101750e6c5f6e6d06713eb7a0 create mode 100644 fuzz/corpora/asn1parse/53a8f2eaeb672552543dc161874532b417091707 create mode 100644 fuzz/corpora/asn1parse/53fdcaca08988d8b337149d365220912f6b81032 create mode 100644 fuzz/corpora/asn1parse/542a3419ee3a09003acd9ccc32a1ea026c236ee8 create mode 100644 fuzz/corpora/asn1parse/54d7ae5cc5517f04a9d8d137c4563e0a90c52e60 create mode 100644 fuzz/corpora/asn1parse/551603bd1d9c9925590e3c5e3467bfd7e0fc22d7 create mode 100644 fuzz/corpora/asn1parse/5553648fbe51b503eeb16e5d3eed1a90e0345d63 create mode 100644 fuzz/corpora/asn1parse/55ed174d2f972e607a1e900d2e0f496d3300f932 create mode 100644 fuzz/corpora/asn1parse/57853a6181a8e30831196cfd02b93406bbc3496f create mode 100644 fuzz/corpora/asn1parse/57ddec018108bf2a556df7e773bb349ce43286af create mode 100644 fuzz/corpora/asn1parse/587dccdd994052f51dd18da92ac02971cf545cc0 create mode 100644 fuzz/corpora/asn1parse/588b4e58831ff834d274adefc6eca5790dc37ae2 create mode 100644 fuzz/corpora/asn1parse/58d9141bd6cf7ffb16e87da4b7b1bafb23a77898 create mode 100644 fuzz/corpora/asn1parse/5959a2d4af9dd5ffe2332b145056ce8d9897195a create mode 100644 fuzz/corpora/asn1parse/59d7d23630965d82d9169a76e8db4dbfb2739be0 create mode 100644 fuzz/corpora/asn1parse/5a0688bf88f483ea55701dfb8e6629831dad1b3f create mode 100644 fuzz/corpora/asn1parse/5bccdbc0694f533091bd4b1cbac011af0d75f280 create mode 100644 fuzz/corpora/asn1parse/5bd470c4cea77c2741c79ade7b10bf14f3849c55 create mode 100644 fuzz/corpora/asn1parse/5c122f7f7263bda2a57316d07d870526d10be18c create mode 100644 fuzz/corpora/asn1parse/5cedbc4c9b05dd93876372c8b759ca2f715394b6 create mode 100644 fuzz/corpora/asn1parse/5d6852cae3fad7a6af56d871fc30e24f447e9d2d create mode 100644 fuzz/corpora/asn1parse/5d7e65b806b6d8a935805bb09c6b1f64148aa9d9 create mode 100644 fuzz/corpora/asn1parse/5d9cba872237142b595871a1484991d69b41d422 create mode 100644 fuzz/corpora/asn1parse/5e19124cc8860de2096318c8223ba85bea2997a3 create mode 100644 fuzz/corpora/asn1parse/5ea8820458726997093d158c9cee7572e600a721 create mode 100644 fuzz/corpora/asn1parse/5f31f43a97fd55c087f9162cc0b569ed763c87d3 create mode 100644 fuzz/corpora/asn1parse/5f440869cb68531cc4361183e3e5ffb41b83b2c6 create mode 100644 fuzz/corpora/asn1parse/5fbc1e2ccd91d34c30f6c993cc8671fa3cef116c create mode 100644 fuzz/corpora/asn1parse/5ffd41abb14575b30dbcb083d961b09f6ecd3112 create mode 100644 fuzz/corpora/asn1parse/604c766d5a363630026560576f16b58dfbdc50c7 create mode 100644 fuzz/corpora/asn1parse/60c891403f96fb9f5f778767d5c2e2d12d8da7ad create mode 100644 fuzz/corpora/asn1parse/60cb4e1a3c0351466578fd2750c7c373404800b3 create mode 100644 fuzz/corpora/asn1parse/611bfcb59b96a5461d0a450aea21939124449e77 create mode 100644 fuzz/corpora/asn1parse/6134cfb79d534115841d5db140a086acc591136e create mode 100644 fuzz/corpora/asn1parse/619418575a212bd9192d44b5dc9f4b85fae64737 create mode 100644 fuzz/corpora/asn1parse/61d8082829bfbafcae92f1849453b51ae689d87f create mode 100644 fuzz/corpora/asn1parse/61dbea04cd70f8d839ce849a05526e294ea7f15d create mode 100644 fuzz/corpora/asn1parse/6228371672ccddce8d812e4550f7e9cc92d217cb create mode 100644 fuzz/corpora/asn1parse/63cb0bdf51af8a6c6615aa6ba96e278384b79f34 create mode 100644 fuzz/corpora/asn1parse/64304175aba6f8e44e22ea56fbf7e4ee5f9744f5 create mode 100644 fuzz/corpora/asn1parse/6483a861728935b7869adcdfdc7a75e9ab821b6f create mode 100644 fuzz/corpora/asn1parse/648c44dd5372ce0e96754d0466dabc2fad1d3581 create mode 100644 fuzz/corpora/asn1parse/6496ee55bd78d06d3a055bb28b190de747c80e26 create mode 100644 fuzz/corpora/asn1parse/66924c54a6f07a37016d2aa9ce0e72b049ec7367 create mode 100644 fuzz/corpora/asn1parse/674692502ba76785f04cf153bc88cadcc5d02a36 create mode 100644 fuzz/corpora/asn1parse/678527800f4f36fb236064b7ed342cc29b44cf40 create mode 100644 fuzz/corpora/asn1parse/67dd3269449ef59d817b1e885f8de7702632fddd create mode 100644 fuzz/corpora/asn1parse/67eb512bfca8fd788c1abccfe1a4015c28520433 create mode 100644 fuzz/corpora/asn1parse/6804c58dbb51e87e12f7fbc8c52416fd99df7e97 create mode 100644 fuzz/corpora/asn1parse/6830a563f53d792978faaa40f09db18c07182ab3 create mode 100644 fuzz/corpora/asn1parse/686291a8403b5e2a5e79ee815208cc901794fc50 create mode 100644 fuzz/corpora/asn1parse/68c74d3a53fa2465751be25ca25725db0abcd147 create mode 100644 fuzz/corpora/asn1parse/68e2a5bb64bc30d711d6a45e5e41574dedce0edf create mode 100644 fuzz/corpora/asn1parse/6930f7b19810f64dd38c9f82a6a0306e46a67ad6 create mode 100644 fuzz/corpora/asn1parse/69beff5a43c955dc3c55e6f34d002edcbc5c9b79 create mode 100644 fuzz/corpora/asn1parse/69f8059daedd57781f09e8fccb4427faa3e87fb2 create mode 100644 fuzz/corpora/asn1parse/6a19ac9125d58478e0cd67e62c099e9c8f4d37a5 create mode 100644 fuzz/corpora/asn1parse/6ac1946b67dc71822dbce39b135bf18e9014cf15 create mode 100644 fuzz/corpora/asn1parse/6b322c3522b7d9feff34c50b5d61364ac9cf2552 create mode 100644 fuzz/corpora/asn1parse/6baddbdb36d8f9cf1cb9b92c67158fb8e7aa505d create mode 100644 fuzz/corpora/asn1parse/6bfeb121cf9640042c2ba042bcd6aba9ad695b13 create mode 100644 fuzz/corpora/asn1parse/6d0cc8ef2d7eece8ad77d1a88457a0da365ed392 create mode 100644 fuzz/corpora/asn1parse/6ea881ee14d91eeef1b072845a348a4cea103eba create mode 100644 fuzz/corpora/asn1parse/6f1b1edf6d98ecae716b7272e90c067d7bfd0a8b create mode 100644 fuzz/corpora/asn1parse/7031a76fa8eaa6ffda2f7e0144072bf9d4660357 create mode 100644 fuzz/corpora/asn1parse/7054e6cf12f46a3a4b6d6498d2fb5ca628fe6228 create mode 100644 fuzz/corpora/asn1parse/70b8ca261799cc87fa069e46bd84a4d373842315 create mode 100644 fuzz/corpora/asn1parse/71143e22b97a233e9c57f842a3c0b101b2fe9a8d create mode 100644 fuzz/corpora/asn1parse/716bddf9a58ce3d7da4ba4fd5e575dc85ba7299f create mode 100644 fuzz/corpora/asn1parse/7212d3235b8db3e10ae09fdb5954e5f721f5a71e create mode 100644 fuzz/corpora/asn1parse/72d22ea3ae064acf520133fbd31f7febb3df9983 create mode 100644 fuzz/corpora/asn1parse/72d9740060cc4f263c0bc14d39bf310c934cdd2a create mode 100644 fuzz/corpora/asn1parse/72f38f759e0eb4760b6cffe60767cd8de68af052 create mode 100644 fuzz/corpora/asn1parse/735adeb502365d8988894a5ecb28c8d0c1c459d2 create mode 100644 fuzz/corpora/asn1parse/739d0095359e57cf912947060227e1f019112066 create mode 100644 fuzz/corpora/asn1parse/73f797229c29665bac1f0f4ed9f7089c761e8d1b create mode 100644 fuzz/corpora/asn1parse/751f86d4aeab445a0c57553b295ca777619c8119 create mode 100644 fuzz/corpora/asn1parse/754f66d6dc31dd6fa9ea1b4628182e794390f006 create mode 100644 fuzz/corpora/asn1parse/76c66d7ca20fb78eb2c86eca0c36922e901474f9 create mode 100644 fuzz/corpora/asn1parse/7732a61cb61f0871e00b94fd478168197c5eef66 create mode 100644 fuzz/corpora/asn1parse/77411fbb2b966c657d2608840a524eb42316a32e create mode 100644 fuzz/corpora/asn1parse/781d56064c951487176331a6312221474a65ef29 create mode 100644 fuzz/corpora/asn1parse/78e32ee081f9a8f6a6f8f2d358f074de493e90d6 create mode 100644 fuzz/corpora/asn1parse/799560f52f036f90a46aa5ba831fdb302b256589 create mode 100644 fuzz/corpora/asn1parse/7ae3b96d98ec1f66a4a3479d424d08a9232551d5 create mode 100644 fuzz/corpora/asn1parse/7b06d120c65d5835d7b5bef73c6ba77399480567 create mode 100644 fuzz/corpora/asn1parse/7c5ca4dd063af19889fdac67fa9a239d45b691db create mode 100644 fuzz/corpora/asn1parse/7c8f1f69f9ef38b06f5ecaefd5e85cd3c33de79f create mode 100644 fuzz/corpora/asn1parse/7ca56f8fd0403cee28f59750ff685f2874aeb31d create mode 100644 fuzz/corpora/asn1parse/7ccffd29f3624b39ea29659d75ba4167d5454bcf create mode 100644 fuzz/corpora/asn1parse/7e5a2badd2d467ed63b093cbc1a266807dc9723d create mode 100644 fuzz/corpora/asn1parse/7ed4014ec7be233f3efe93f5b71f2a72f28a3f0a create mode 100644 fuzz/corpora/asn1parse/7fb8e98dc358957e8b2d34d9372d0e4b9c924c8b create mode 100644 fuzz/corpora/asn1parse/7fea2ff7784ea52b4305610423eaf79729176a83 create mode 100644 fuzz/corpora/asn1parse/80a1b59fe724a7a71b8ca628429d0ff10a3e06b0 create mode 100644 fuzz/corpora/asn1parse/80b6610901a195df5950f2e0a5027a7ca5fc5888 create mode 100644 fuzz/corpora/asn1parse/80be9a19b2dac9aefd23ced2a9a382f114cee348 create mode 100644 fuzz/corpora/asn1parse/813751e17baca905f03a1d3bfa4f658923e7558b create mode 100644 fuzz/corpora/asn1parse/815f31df4f984643bdadb1d151ab7c711e3cb28b create mode 100644 fuzz/corpora/asn1parse/826d1d95da8c7db05134d47acbf02e576fbaf37f create mode 100644 fuzz/corpora/asn1parse/8277d34e9548dd56103973233cc2570502e65800 create mode 100644 fuzz/corpora/asn1parse/829958f8aedb4e901b153f4ff13140beb6237a95 create mode 100644 fuzz/corpora/asn1parse/83824800eade9a23f2de2e6a68bf18e5d93f816a create mode 100644 fuzz/corpora/asn1parse/83a090f13613665b0f24dd29ea45fed7d9cddb1b create mode 100644 fuzz/corpora/asn1parse/844f39cbc0cddb4497a34c4f47dcef4bef5f1f3c create mode 100644 fuzz/corpora/asn1parse/84f90e100cb1505e7976731c25414e1854fca7fa create mode 100644 fuzz/corpora/asn1parse/85e6458878c3ca34f3f5f87a4d64e93ab79115ad create mode 100644 fuzz/corpora/asn1parse/86b12c329271d6a9e5b73b87508fd1eab1c6cf40 create mode 100644 fuzz/corpora/asn1parse/86bd257ac70892273c731f22d4a89a2f7059bbf6 create mode 100644 fuzz/corpora/asn1parse/86bdf8d0da12d3d3ab16ac02809d015876a81b9c create mode 100644 fuzz/corpora/asn1parse/870521e65b8463d62eb21c57556998ab40cb0b43 create mode 100644 fuzz/corpora/asn1parse/873885b3aa27ceb413ee7e711817c00d1ba4db68 create mode 100644 fuzz/corpora/asn1parse/8751598600d6cbd34d270df2e56f4d9e2add2311 create mode 100644 fuzz/corpora/asn1parse/8786a346f400899d1a55d2f3baa28722ca268a7a create mode 100644 fuzz/corpora/asn1parse/87defcf77eef5e06e7fec75e0d9cd84587901532 create mode 100644 fuzz/corpora/asn1parse/887f0138c5ea56aeb46a4951ff5d45f8b9a7236b create mode 100644 fuzz/corpora/asn1parse/88f393c93c1c3df1f63394e7523a0fa15370a7b6 create mode 100644 fuzz/corpora/asn1parse/890ae975f6f926b27818fc426f028ed2fb959d05 create mode 100644 fuzz/corpora/asn1parse/89111561bd3447d4e499204376a52ab066c5fc0b create mode 100644 fuzz/corpora/asn1parse/8a6ab904613556d21ceeaced34c08b853033a9cd create mode 100644 fuzz/corpora/asn1parse/8b569a394db2813e79819c62838c42be2aacaccb create mode 100644 fuzz/corpora/asn1parse/8b93741e6f268da1b36c6e5fe2b3a4b5c5069e83 create mode 100644 fuzz/corpora/asn1parse/8ce3ddcdde60b94d995c797f68a21063e1832f96 create mode 100644 fuzz/corpora/asn1parse/8e05de6ecb4bb22c00d54623055ccd8a0346dd01 create mode 100644 fuzz/corpora/asn1parse/8e7b714886902eb224b19669600ffe9b78e3a721 create mode 100644 fuzz/corpora/asn1parse/8e9fda04421a0fb8e3b4c3561d688530bad6de6c create mode 100644 fuzz/corpora/asn1parse/8f6ea3e33bf6a51fe84ebaeb89b55db08a56c458 create mode 100644 fuzz/corpora/asn1parse/906dd8baf596af45236945ef8187880d8795d3d3 create mode 100644 fuzz/corpora/asn1parse/908bd6526427c7d2b14656f9e6e279b91e707999 create mode 100644 fuzz/corpora/asn1parse/918ff0104cd013706ceeef916aace268892ae8f7 create mode 100644 fuzz/corpora/asn1parse/92508aeb4f1f4ca5aba99177897e0e6dc402b7ac create mode 100644 fuzz/corpora/asn1parse/93589b56b8918bc0154df9ac05e7bd3a33f9a526 create mode 100644 fuzz/corpora/asn1parse/938f2782da2a5200c26b6782ced6d020b538e190 create mode 100644 fuzz/corpora/asn1parse/93f0d767c879c26a4fd1d2c514ee2e35088e7503 create mode 100644 fuzz/corpora/asn1parse/94b5dbd32c5e01a19af20bcddb1537e0addb5c6f create mode 100644 fuzz/corpora/asn1parse/94e2f0af469f470b34d6803aa8cdecfc69290736 create mode 100644 fuzz/corpora/asn1parse/951152b031df5dc8c2e5e0979086b399a41111d1 create mode 100644 fuzz/corpora/asn1parse/952f18a923fc3bb65ee456ba0bbffddcc9b69d97 create mode 100644 fuzz/corpora/asn1parse/96231c9f0acf5412491efc87254159b63ea0910a create mode 100644 fuzz/corpora/asn1parse/967b3ddb70da537b0fabc179a66e002f905ccd30 create mode 100644 fuzz/corpora/asn1parse/968fede2c4467c63b745bbb08841cee408bf80b5 create mode 100644 fuzz/corpora/asn1parse/97b49bc5c23ecc74f2b562661852715f0d1fb578 create mode 100644 fuzz/corpora/asn1parse/97e9a92dc5110bbc39e38fe086fcb05d68e75d85 create mode 100644 fuzz/corpora/asn1parse/982e42b80c285b3d9ed3384ca180a793ffcfc763 create mode 100644 fuzz/corpora/asn1parse/98f0c079d2eafa7d533878fc22fae42394a975be create mode 100644 fuzz/corpora/asn1parse/98fd98c5c6c83bc36ccb1f5a939029ab1281db72 create mode 100644 fuzz/corpora/asn1parse/99901955e54897bb40a0d8c45b292812f4b92210 create mode 100644 fuzz/corpora/asn1parse/9a5b2f6578b415da217d91bd4f06de8886834f80 create mode 100644 fuzz/corpora/asn1parse/9a82fd2791c1e247653b4f0529431242e87981fe create mode 100644 fuzz/corpora/asn1parse/9af682eafb576ac2312fd065f7110b585e8a99ce create mode 100644 fuzz/corpora/asn1parse/9b29f3f7fd5ee4064fbb30f92461c5b8f7ba65fa create mode 100644 fuzz/corpora/asn1parse/9b5dddedc7ff86c4941ad84b271034f42b81fdbf create mode 100644 fuzz/corpora/asn1parse/9b9d86e4410b58a610b5a1fa80434ce776ce5250 create mode 100644 fuzz/corpora/asn1parse/9b9ffcf963b5f3a6ef95aa387360f3bc338afe36 create mode 100644 fuzz/corpora/asn1parse/9bd2822981b7d741659590545660a30566ec232d create mode 100644 fuzz/corpora/asn1parse/9c087f501d972b2a28476da50bc17b041178afbb create mode 100644 fuzz/corpora/asn1parse/9c79cf6ea53194660f597626985bd702fae587b7 create mode 100644 fuzz/corpora/asn1parse/9cbcfc09f5f492dfaec020c2482fefe516636451 create mode 100644 fuzz/corpora/asn1parse/9cdc7629f9f39de1103d202eb1c9231ebb2dce5d create mode 100644 fuzz/corpora/asn1parse/9d5cb9a765619cb6765e91aaffc07402b85ca982 create mode 100644 fuzz/corpora/asn1parse/9e4dbf50b64b03877aaa194d5f0607e86d4a042a create mode 100644 fuzz/corpora/asn1parse/9e5fcab2f9cacdb69f4c3c551525f48793b459da create mode 100644 fuzz/corpora/asn1parse/9e94810164732cd81f49645a4abd1168c532feca create mode 100644 fuzz/corpora/asn1parse/9eca4099f3e5df8f16c69854f739249b75aa994b create mode 100644 fuzz/corpora/asn1parse/9ef8e5948ba42b739d9fc103d1b5d346bb28bb1f create mode 100644 fuzz/corpora/asn1parse/9fab81db87bcb7f74b9c86445e242fda0037c3e8 create mode 100644 fuzz/corpora/asn1parse/a0afd876d8ceac1e59cc00eabca87b8d04c43ca7 create mode 100644 fuzz/corpora/asn1parse/a0ce4ef36fbf2b3153796aa2ed4d74b3726f1f88 create mode 100644 fuzz/corpora/asn1parse/a13508cbefa6dc5baa9005bb973a79462cafd3ea create mode 100644 fuzz/corpora/asn1parse/a175a6d5f0629fe60dc10d8077bb79e6c03f5004 create mode 100644 fuzz/corpora/asn1parse/a19b35a4d18309cedee680e614284bc47976d85c create mode 100644 fuzz/corpora/asn1parse/a19dc5afedb3934e752d62ea0cdb1905bb319b44 create mode 100644 fuzz/corpora/asn1parse/a1b4ddd05b8d5e357dc7833c8e4320add20fb911 create mode 100644 fuzz/corpora/asn1parse/a1d5daa1bf7252b2d0433204350127c79475d16b create mode 100644 fuzz/corpora/asn1parse/a2085729353eaeb87b3ab05409a69b023603596c create mode 100644 fuzz/corpora/asn1parse/a238149b4bd983b37aea186bb7f45043b324420a create mode 100644 fuzz/corpora/asn1parse/a33fccdaedbf26bfe4793aedcb443145547e9dff create mode 100644 fuzz/corpora/asn1parse/a34fbd690b59766436942dcc3328ba4563dd171d create mode 100644 fuzz/corpora/asn1parse/a3c63cb92bc11075f4d18f562fae56885ec6cca8 create mode 100644 fuzz/corpora/asn1parse/a41f1dda8673725027cc8658ee0c2384f585bf39 create mode 100644 fuzz/corpora/asn1parse/a5a606252b4cae9f0bfd12b373228153434211f4 create mode 100644 fuzz/corpora/asn1parse/a5c89855d0edfd8151ff552bf061d06558d00ae3 create mode 100644 fuzz/corpora/asn1parse/a6b63791473c10ffba051650212d009b806797bf create mode 100644 fuzz/corpora/asn1parse/a7543b5ebf6881cc018277a337448f1936fc949b create mode 100644 fuzz/corpora/asn1parse/a79027896d80caaf1084a88755c9388278a8da84 create mode 100644 fuzz/corpora/asn1parse/a7a07432907667a7b5b69d58159f5f21ddd22066 create mode 100644 fuzz/corpora/asn1parse/a8543b4ca457728c44daa45f94bc4f0b90e7f51a create mode 100644 fuzz/corpora/asn1parse/a8a260553a1297a1abae8bd687a362798f99c535 create mode 100644 fuzz/corpora/asn1parse/a8ce50c57aee91c7f46325d99b3e83ee4a435f9d create mode 100644 fuzz/corpora/asn1parse/a938c006bca04663e2b25de1d13eb9c6c3d853cd create mode 100644 fuzz/corpora/asn1parse/a94f91fb10db1f918b068afd7b743f89f3920ad6 create mode 100644 fuzz/corpora/asn1parse/a96be5689dbb4e4527c5b8821bba427e271d6e3a create mode 100644 fuzz/corpora/asn1parse/a9715ac3612352084b45f323c2ce3fabc50c2d3c create mode 100644 fuzz/corpora/asn1parse/a9b4f21bc44d6dec2ff065df1d505d968f83cd1a create mode 100644 fuzz/corpora/asn1parse/aa5363a1080183d6e2d6822188672330fd546094 create mode 100644 fuzz/corpora/asn1parse/aa81816726967b745099c6605208b12ab6512358 create mode 100644 fuzz/corpora/asn1parse/aa9099df99c03b2a02261e84f26890ba90399a00 create mode 100644 fuzz/corpora/asn1parse/aa94a7ffb4abeee3da7ddca72be47f5085ccd568 create mode 100644 fuzz/corpora/asn1parse/aac645e7b58a91f8b29661eee167366bd3736895 create mode 100644 fuzz/corpora/asn1parse/ab0debc2b661eb18335e6b9bb66ce5f376c49947 create mode 100644 fuzz/corpora/asn1parse/ad4d2c3941fba7345e08f57de01ed7e4eec8e7dd create mode 100644 fuzz/corpora/asn1parse/ad5a25c5802a64a015b54ef8b2430ff5406d3841 create mode 100644 fuzz/corpora/asn1parse/adbeb345334fba0189069ef5dd5aa32745e044ac create mode 100644 fuzz/corpora/asn1parse/ae4f236c5b09f1ac8980059661928a5bf2bbbf43 create mode 100644 fuzz/corpora/asn1parse/ae6cbbb1dd61d148ffed03449fda8dbdf8fad288 create mode 100644 fuzz/corpora/asn1parse/afdee18a5a31a3b0abef4f2a4e9773b710cdc347 create mode 100644 fuzz/corpora/asn1parse/b0112f2da27838bccad492cc2d834a88e2626689 create mode 100644 fuzz/corpora/asn1parse/b08e8223c1df541f5eed8d2991e895fcc97005cb create mode 100644 fuzz/corpora/asn1parse/b0a84f5d425d16737c5245f81dcdef960f4fc4c1 create mode 100644 fuzz/corpora/asn1parse/b119db33bd76a4019130d10ecd6f233c2c613c01 create mode 100644 fuzz/corpora/asn1parse/b1628d7b309402a87bf4dbdadc4e0212daae154a create mode 100644 fuzz/corpora/asn1parse/b24fe165ffb8d78e02620df66065f8cb83894753 create mode 100644 fuzz/corpora/asn1parse/b33f0da9d508b982bbeaa43dc7933257e2dda653 create mode 100644 fuzz/corpora/asn1parse/b3509233a74dcc24de99e1eddd861f380b276acf create mode 100644 fuzz/corpora/asn1parse/b35279bc8c503122306949f52c25eee1d0a7d03a create mode 100644 fuzz/corpora/asn1parse/b3f14bf976efd974e34846b742502c802fabae9d create mode 100644 fuzz/corpora/asn1parse/b40b9c9c311db889bdf52554584a92ed9a4fc5f2 create mode 100644 fuzz/corpora/asn1parse/b445d047770dd8fe58daaa8fe327601e6e54b05a create mode 100644 fuzz/corpora/asn1parse/b48fb5465f973c20a1b9f40ea58bd9d20573c33c create mode 100644 fuzz/corpora/asn1parse/b4bd9a91ec8f90d47417fea32b2511111d0fa008 create mode 100644 fuzz/corpora/asn1parse/b4dba25facf0bb55596e22edad9f464b0c97ecc1 create mode 100644 fuzz/corpora/asn1parse/b50567f373e09982d80dde31f0dbb87a4e354c70 create mode 100644 fuzz/corpora/asn1parse/b58190b99faff2ad9403763da6624284a8552b75 create mode 100644 fuzz/corpora/asn1parse/b63d227bd0c74495095eb391559f192c8e75b4dc create mode 100644 fuzz/corpora/asn1parse/b6b7e7f757eb89edd1e10a45ac162f762b5a5eef create mode 100644 fuzz/corpora/asn1parse/b6c561bd6c9654aee1706371463cd181e3df48c5 create mode 100644 fuzz/corpora/asn1parse/b71cdf5f69e729b078946d5f4027c865c1ca59ad create mode 100644 fuzz/corpora/asn1parse/b733d1ca7b728bbde5bb6830ca82b000b4ceedad create mode 100644 fuzz/corpora/asn1parse/b755435684a8c8742330c449a817b9d53b01dfa5 create mode 100644 fuzz/corpora/asn1parse/b902cd2e6076103fff472e6fdfdac67c0cced3d6 create mode 100644 fuzz/corpora/asn1parse/b9bc4cb5cb435aae4e1bad70a0cf9f4bdd2fd68c create mode 100644 fuzz/corpora/asn1parse/ba123374ca2b142e234e6ffce0576966c252d081 create mode 100644 fuzz/corpora/asn1parse/ba3cacf6f5a286b3786b09ad87eed7d2ce45dfd3 create mode 100644 fuzz/corpora/asn1parse/bd7cf4421044737e6e5e3b745a2731f75cc21135 create mode 100644 fuzz/corpora/asn1parse/bdd4d880da10db22a0924accd42ba8db6acf3289 create mode 100644 fuzz/corpora/asn1parse/bdd4ffbd38d81f69fc662e1bd0794156113b0450 create mode 100644 fuzz/corpora/asn1parse/bdf664a642e7e23cb503ad75d1af96877f82e796 create mode 100644 fuzz/corpora/asn1parse/bf0e6c4ed317e97ffc4e9e59dc8617d33c1f5b1f create mode 100644 fuzz/corpora/asn1parse/bf1065f4747bb896c5c7e67cb3b975fb9835c611 create mode 100644 fuzz/corpora/asn1parse/bf168486f436d1c92f1fa6a2f4c7136a2652ac5e create mode 100644 fuzz/corpora/asn1parse/bf16c138c0296f0f4b3374cf9c558fab237ba8b0 create mode 100644 fuzz/corpora/asn1parse/bf268cef115c57244b4549ac5ad1f400e5fa851d create mode 100644 fuzz/corpora/asn1parse/bfc359d1439ee99a6b040c0de761316db7260161 create mode 100644 fuzz/corpora/asn1parse/c01d54e0d7d1a9a679327fc657e2eb562ee2a4db create mode 100644 fuzz/corpora/asn1parse/c046a80861ff544b17a7b43c04fdbfac656f935b create mode 100644 fuzz/corpora/asn1parse/c1f01f362ec78e619fc63ac1bb525e8599920008 create mode 100644 fuzz/corpora/asn1parse/c208571bc322e36096807979457bbc16a8d57c37 create mode 100644 fuzz/corpora/asn1parse/c2346feb346b2b91ab789d160d6cf81a8e229ccb create mode 100644 fuzz/corpora/asn1parse/c2ec2e45736794d5b72f79abef7f6947d24b8e59 create mode 100644 fuzz/corpora/asn1parse/c2f5f5de841c932274fad360dd3f3a8f3f55d7ea create mode 100644 fuzz/corpora/asn1parse/c3901b10f11edaee8cf85b9359f6f4189686e825 create mode 100644 fuzz/corpora/asn1parse/c3facd6eed7fd5d7f9edc879430d5bbb94226561 create mode 100644 fuzz/corpora/asn1parse/c40fc59771017e049ed7dfc12606d7e56a4d2321 create mode 100644 fuzz/corpora/asn1parse/c4523bd7d08b05298c31b95a82bf534bf6597812 create mode 100644 fuzz/corpora/asn1parse/c4d8096393f088c707addc058aaece73a871433d create mode 100644 fuzz/corpora/asn1parse/c5125fe1dcef0c2400249382f85f4c7cccdcd09b create mode 100644 fuzz/corpora/asn1parse/c53cae7dd364bbe39b111751aeaf390a0d685bc7 create mode 100644 fuzz/corpora/asn1parse/c6daf2ef1c2f2eea01abccb423e1f21448f0d27a create mode 100644 fuzz/corpora/asn1parse/c73799bfb6cf5da3e5ec75dbd774a5121e535699 create mode 100644 fuzz/corpora/asn1parse/c7397cf643b59c47a4e3935087c7897b597d224d create mode 100644 fuzz/corpora/asn1parse/c746024636af38fd84171b3fbb8535c384d62c94 create mode 100644 fuzz/corpora/asn1parse/c765fd0bc1f8cf14222a2d192a64f95880bb1ad4 create mode 100644 fuzz/corpora/asn1parse/c83a15cbe61a52848d59f77e8b1b59eecfcdb7ca create mode 100644 fuzz/corpora/asn1parse/c84b9d02fc1608825f8bdbc721e7fe5a9b67eb41 create mode 100644 fuzz/corpora/asn1parse/c912c0b75b249099b400fe67e67b33d754e94d34 create mode 100644 fuzz/corpora/asn1parse/c9e5d4dc5af1d21b28e4e56320a539d0190d12e0 create mode 100644 fuzz/corpora/asn1parse/ca14a31bec9dfaa281ab78913aa7baf43c52d84b create mode 100644 fuzz/corpora/asn1parse/ca44922d31db861da7e3b0baff305f8570b78193 create mode 100644 fuzz/corpora/asn1parse/ca54853c6ab1f3779f72349427e0c26af0cc6c98 create mode 100644 fuzz/corpora/asn1parse/ca7e922d02f70b7495fd586b12b7f2cc69b79e45 create mode 100644 fuzz/corpora/asn1parse/ca8dc08082f5ed7158dffd1a53704795748d5d55 create mode 100644 fuzz/corpora/asn1parse/cc07654bf1885690d093e8172e53bc30fa83bbf6 create mode 100644 fuzz/corpora/asn1parse/cc1f520ac1efab7d1c99b3e3331637efaa0029e7 create mode 100644 fuzz/corpora/asn1parse/cd040553e419e407917a389459c47baaf546cbda create mode 100644 fuzz/corpora/asn1parse/cd72dd4a2af7f4ccebd67702c3a287b3cb018f69 create mode 100644 fuzz/corpora/asn1parse/ce1a3befe579f9e574a80ec39316728c263b5a44 create mode 100644 fuzz/corpora/asn1parse/cebdbd95b45b60341d350d4b3c54bb0fda48cf32 create mode 100644 fuzz/corpora/asn1parse/cef9c8391ea7ccd3220eafc5033c0a2418e0374e create mode 100644 fuzz/corpora/asn1parse/cff59d8122a016877a09322a51938b1ea076a828 create mode 100644 fuzz/corpora/asn1parse/d01061380778633f9b4a72a4c34a9d3e7d4b3504 create mode 100644 fuzz/corpora/asn1parse/d03b0644433de97212c6bdb1e0a24ac686befe58 create mode 100644 fuzz/corpora/asn1parse/d0c4b991e835d25ee7043e8b8b4b7e50a731e27d create mode 100644 fuzz/corpora/asn1parse/d0ce7fd02be1a62ea9b75cf35a34fbf7c026a9d8 create mode 100644 fuzz/corpora/asn1parse/d128fe0bc7ae213378a03e5f2e260780d9c09acf create mode 100644 fuzz/corpora/asn1parse/d17dc7fc5c23003ae354aad6f5d21e98270801c4 create mode 100644 fuzz/corpora/asn1parse/d17f247fe8a0998745972d528308f98361e87557 create mode 100644 fuzz/corpora/asn1parse/d18f112320ad9f0a0301501431528e3471da2cc7 create mode 100644 fuzz/corpora/asn1parse/d22c6eb8369f160766c7932e80447052352f06fa create mode 100644 fuzz/corpora/asn1parse/d340c36ebec364d34c1de1726c44172442a7e355 create mode 100644 fuzz/corpora/asn1parse/d3791aafcf7ab885d44112b6a5d55cdb7739df3c create mode 100644 fuzz/corpora/asn1parse/d394703f7511c7bca89b465c63ffe7ffbeeac19e create mode 100644 fuzz/corpora/asn1parse/d3b3039003eb7192d53b6ce89b36724d2fd7637e create mode 100644 fuzz/corpora/asn1parse/d3fb21c655ee2f476d202b8cc50faf01ef2f2cfd create mode 100644 fuzz/corpora/asn1parse/d45ca7d850670b329f29dbbfa015c95dd574c249 create mode 100644 fuzz/corpora/asn1parse/d4e6857ceeaffefe87091674e6756f6334a91c47 create mode 100644 fuzz/corpora/asn1parse/d5d0a1b2364a6735fea0e057304932053bd9639a create mode 100644 fuzz/corpora/asn1parse/d5f9c956409edc620070eb6049df2ab31a235ab6 create mode 100644 fuzz/corpora/asn1parse/d8a30384341c38fa8c8d2941320fbe454f87854a create mode 100644 fuzz/corpora/asn1parse/d8b0e60d3c460a80a1a8288a0c988e0b342f7a44 create mode 100644 fuzz/corpora/asn1parse/d9b2b8a674ca3b46d216f94ac1cf3c133027b943 create mode 100644 fuzz/corpora/asn1parse/da03856e9f3c3e22e342dfccb4cacede7a1b63ab create mode 100644 fuzz/corpora/asn1parse/dac027a0cfd82171c52f0836099eb32d2db5284b create mode 100644 fuzz/corpora/asn1parse/db595d74c29e38f17665a05239f27a709bc24cda create mode 100644 fuzz/corpora/asn1parse/db7bc5e471529ac346ed8725516699e4619806f7 create mode 100644 fuzz/corpora/asn1parse/dbc2045d8f266834887df6b4efb670901988cadd create mode 100644 fuzz/corpora/asn1parse/dc6bd6927e7af31ee921ec30cae98b662b4b33eb create mode 100644 fuzz/corpora/asn1parse/dc9ad2e4e03df85ffc34e4ef1f2ec9d98ee1c582 create mode 100644 fuzz/corpora/asn1parse/dcd63fa3aff61c70507a02bcf02f4e78aa9095b9 create mode 100644 fuzz/corpora/asn1parse/dd0de759f6399379d7858bb8f96b68f2e81fa0bb create mode 100644 fuzz/corpora/asn1parse/dd9b8e439c73f8d817036427f82c8c0fba53505b create mode 100644 fuzz/corpora/asn1parse/ddd451be375ee6bc1ec8e2eba45ef9fbf1e7015d create mode 100644 fuzz/corpora/asn1parse/de0120ee3cbff8de7f943ed3f5e7b83cad222b4f create mode 100644 fuzz/corpora/asn1parse/de433b73643b7dea1ffe8fcf89a4448f921ada5c create mode 100644 fuzz/corpora/asn1parse/de532841b1a7502adfb0f77620e6277d1db19cf8 create mode 100644 fuzz/corpora/asn1parse/deca50b677fe8ed12dc027d5424ceba762d5b7e3 create mode 100644 fuzz/corpora/asn1parse/df3c0a21d22d2592cfd58c0d709f80924f193587 create mode 100644 fuzz/corpora/asn1parse/dfad06dc230396bc6f846df6f25aff6419a427c1 create mode 100644 fuzz/corpora/asn1parse/dfc7923dc2d026ec8b9fe95ef01deb54f0d01d27 create mode 100644 fuzz/corpora/asn1parse/e0ed8db3840119ef6d99e571928e7f14512cb59c create mode 100644 fuzz/corpora/asn1parse/e268b5e46b6e045e004bae6ff44c22109e97efcb create mode 100644 fuzz/corpora/asn1parse/e341b44b57620d2815a0a78ea255a17cdadd00ea create mode 100644 fuzz/corpora/asn1parse/e351bee3867de466611904c30d64664b31b3f67b create mode 100644 fuzz/corpora/asn1parse/e39ec802a2f2e75d56959ce7528bf313b87ef78b create mode 100644 fuzz/corpora/asn1parse/e3b2d4a48bd462a33647072e49794fd2a80d79db create mode 100644 fuzz/corpora/asn1parse/e3d04fa6afe55e6161d51aef7e1c916ff282feb4 create mode 100644 fuzz/corpora/asn1parse/e441b5ed66f47dc20d7de9719407eddaea3b6b0f create mode 100644 fuzz/corpora/asn1parse/e449746789369ea8094ff0d19fe6461d268c84e7 create mode 100644 fuzz/corpora/asn1parse/e5a6c4edd4a9954a263bd9d292b81a0f19d7a6a1 create mode 100644 fuzz/corpora/asn1parse/e5c322678a7590a3234ed6c271e9bd9e373ad07a create mode 100644 fuzz/corpora/asn1parse/e62702f97628d84774e7373073285d9c44d8b5d4 create mode 100644 fuzz/corpora/asn1parse/e64906088f9b01b52e20faf97058031ea0cdc62d create mode 100644 fuzz/corpora/asn1parse/e64dae6abc50fb5c785f8f890a324c76f591aab0 create mode 100644 fuzz/corpora/asn1parse/e7768137cbd7f25f2ae1f7b8ca217dafee378555 create mode 100644 fuzz/corpora/asn1parse/e837b06574c6f725f15f79ea67c93c3731b82a6d create mode 100644 fuzz/corpora/asn1parse/e8682365dcd5e729d87aa63869da99fcfdbd3523 create mode 100644 fuzz/corpora/asn1parse/e8a542d5c01efceb8945167773d4362ea5fd2491 create mode 100644 fuzz/corpora/asn1parse/ea4cdca728636d850611ae2de40e5f9ae444d624 create mode 100644 fuzz/corpora/asn1parse/eaa272950c5aa65076d7c9a6eb9ef9b8b5a949bd create mode 100644 fuzz/corpora/asn1parse/eb26bcdc36985d47574eb024ca89a9d48eb1d1be create mode 100644 fuzz/corpora/asn1parse/ebfb6a6ec29c79100a9588dacf13d106f76b2912 create mode 100644 fuzz/corpora/asn1parse/ec43a4d2f7b85bbc9f1e9902b9a14857720899b2 create mode 100644 fuzz/corpora/asn1parse/ec768615e8190deef5438f1b32acd0ba72cae480 create mode 100644 fuzz/corpora/asn1parse/ed341f97baaf3a5fb905d469f2cab700c4af7d04 create mode 100644 fuzz/corpora/asn1parse/ed859136897482e24aedf1e983f1a3fa046cdafe create mode 100644 fuzz/corpora/asn1parse/ee90825c228fdeb78930660407b0db3d16b6a3c9 create mode 100644 fuzz/corpora/asn1parse/eea6729f0b4b15e36a9725d3cba23b39ca1f119c create mode 100644 fuzz/corpora/asn1parse/ef1bff6a1fb0caf4e9b1b205d87aa70be3e0acd3 create mode 100644 fuzz/corpora/asn1parse/ef269abff849f1bbaae529d8dfd76ec720a43462 create mode 100644 fuzz/corpora/asn1parse/ef3b5dd51d64de04e57c3809a65eb8eb0ceb1ae5 create mode 100644 fuzz/corpora/asn1parse/efc97347ce280b149f9df3c1dd02a3089859a671 create mode 100644 fuzz/corpora/asn1parse/f036aea710b394155c4a0b3075fc5a24a9466c2b create mode 100644 fuzz/corpora/asn1parse/f08455633bc22ac2460cbb7029358066cd1d5cb1 create mode 100644 fuzz/corpora/asn1parse/f0f0ae98c224dd4bd765106620c94eca90217e8b create mode 100644 fuzz/corpora/asn1parse/f1331e8b9c9fe53d33cb5b437eb37afb01e12b3a create mode 100644 fuzz/corpora/asn1parse/f1a1ecc8b28a9d541439527abc7c85b3bffc0833 create mode 100644 fuzz/corpora/asn1parse/f1d1d8463e9ce2527065fb0742fe22cf210065f6 create mode 100644 fuzz/corpora/asn1parse/f2358589c0dcc3b3b9d2c5cb840101e2191ca3cb create mode 100644 fuzz/corpora/asn1parse/f238d7dbf391b264c88579892cb54b2170fc7bbf create mode 100644 fuzz/corpora/asn1parse/f2438e360ab7835019c74e53f8c063566e4025e5 create mode 100644 fuzz/corpora/asn1parse/f2b61836f31393e9c149bd60871add50f3a98bde create mode 100644 fuzz/corpora/asn1parse/f2bae4d8e23912aa07a0ccfefdd5128594b753ed create mode 100644 fuzz/corpora/asn1parse/f2c1ccf6c58cbf812853dabd7e0188ce8fa8320c create mode 100644 fuzz/corpora/asn1parse/f33840b2d3a9cb278cd586a32228a28e676799d1 create mode 100644 fuzz/corpora/asn1parse/f3baaf0a9f2fe0209a5924cfbac1981135ee4e61 create mode 100644 fuzz/corpora/asn1parse/f3bf9d2646d2b4f4c13519afaaf62d8b3f112c2e create mode 100644 fuzz/corpora/asn1parse/f41526dcc4394041665266416fc354e58c93e4c9 create mode 100644 fuzz/corpora/asn1parse/f43d2912c42de505da4eb6f71fc69a9bf8747499 create mode 100644 fuzz/corpora/asn1parse/f4aed5a5e088e5aa3e5e9e5d1c682e0a46606ddb create mode 100644 fuzz/corpora/asn1parse/f4f704f7d91a0f0559d12885d30bd634c623df5d create mode 100644 fuzz/corpora/asn1parse/f519b077c4f276ec7366d75d0c773797bcd0d44d create mode 100644 fuzz/corpora/asn1parse/f5252fdc2868afeb077044d3131a2ca62347e759 create mode 100644 fuzz/corpora/asn1parse/f57138506e36d8450b56dec0dc931328234f878c create mode 100644 fuzz/corpora/asn1parse/f577ae9a8ac7019f1601490dbffbc9961c25dee5 create mode 100644 fuzz/corpora/asn1parse/f591ccc98552c31c376ef8b4124cfa921d612195 create mode 100644 fuzz/corpora/asn1parse/f5a21f58702ae36a0f1356ea01c5b3f42ac8a32a create mode 100644 fuzz/corpora/asn1parse/f62d33e39df5110d91ec01cc162a41f1724fbf14 create mode 100644 fuzz/corpora/asn1parse/f66af1b080740922cce299850039fc884652c827 create mode 100644 fuzz/corpora/asn1parse/f69e5a2a0199560affc98cc6a7cdb79e7db18fab create mode 100644 fuzz/corpora/asn1parse/f6ca4b7a2d70b544a5987127cd0ebdcb343cff09 create mode 100644 fuzz/corpora/asn1parse/f6fda2c48c3ccbed0fdc64c0b1630e8efaedc4a1 create mode 100644 fuzz/corpora/asn1parse/f7bc657206a38f070c5f68876605c1341ecffed4 create mode 100644 fuzz/corpora/asn1parse/f7ddf59b44ddf9253b657c54053522cf694d3fbe create mode 100644 fuzz/corpora/asn1parse/f7de7a9387f98519b95e6b6c5b09f91dafd09f04 create mode 100644 fuzz/corpora/asn1parse/f8c1e112428497f7ff7e289dbe2cee5cb9538c04 create mode 100644 fuzz/corpora/asn1parse/f8c52b1607cac69d4c53b6237b9e58269bb7436b create mode 100644 fuzz/corpora/asn1parse/f991ae785fbca0aa030c3253c43dd652c0c95f7e create mode 100644 fuzz/corpora/asn1parse/fa89079c59d40b65bcf3935c5e114c0d8d1624a5 create mode 100644 fuzz/corpora/asn1parse/faa7a0bb854984b2eadc1544a4aaea98435fd49b create mode 100644 fuzz/corpora/asn1parse/fb0e0f2f9bac04bec1c0d89ab3d4eb3496d691c6 create mode 100644 fuzz/corpora/asn1parse/fb56cc29da665219836e17d0a90c9702f84bef22 create mode 100644 fuzz/corpora/asn1parse/fbba446cd2199c33a2a4a1364bcbe6380add098d create mode 100644 fuzz/corpora/asn1parse/fbd767e6a922f2bd8d549086053a2bd772d73b1a create mode 100644 fuzz/corpora/asn1parse/fbdf26e2f0d7c45d035831daf06de72ce7845ebc create mode 100644 fuzz/corpora/asn1parse/fc0b66b091558cd1da661d1431283a4a710f7506 create mode 100644 fuzz/corpora/asn1parse/fc2b232310fbc5c70eadf68accf84079edbac181 create mode 100644 fuzz/corpora/asn1parse/fc3e4e438c79f64ef6e1a54adb9d015107d090c9 create mode 100644 fuzz/corpora/asn1parse/fc610729a45fa1f08e9874b812cdb0ce8fd1f689 create mode 100644 fuzz/corpora/asn1parse/fc95e673b9102baea54ba603dcd0429549276b16 create mode 100644 fuzz/corpora/asn1parse/fda5aea568ea1d85554fc1ceea5c828bfd54eed6 create mode 100644 fuzz/corpora/asn1parse/fdd5d93175495c7336dc2e87f361fa097dde33a2 create mode 100644 fuzz/corpora/asn1parse/fdd6dad660b32173d298245a2401c8ae996174e1 create mode 100644 fuzz/corpora/asn1parse/feebeea46774faaa9f052f1f97549ac216f59169 create mode 100644 fuzz/corpora/asn1parse/ff934115346eaf1cad28e858aabf959c6f994f18 create mode 100644 fuzz/corpora/asn1parse/ffb1ebf27ceb558f62d4b6397a3a18050d7f285f create mode 100644 fuzz/corpora/asn1parse/ffd3cc6205c1db87b3c79960b174ee1d81999a06 create mode 100644 fuzz/corpora/asn1parse/fff0c9c9996cb5ccff3d99c493d07189841fdd28 create mode 100644 fuzz/corpora/bignum/0011d41db2558e20b383a5b679644558b4888e0c create mode 100644 fuzz/corpora/bignum/0021d9ee011b5749271c200c5d9eaff2d4a96ca1 create mode 100644 fuzz/corpora/bignum/00568aac9287e6fb0a78676b4133315e12cf622e create mode 100644 fuzz/corpora/bignum/007c0aa18e7ef96b3baac9b82da17e01945c1d79 create mode 100644 fuzz/corpora/bignum/00842ea682a1fb77a75d47b470998be22ced54e0 create mode 100644 fuzz/corpora/bignum/00c2422d35ec8c3da2c285ce69b03b0d590b3c74 create mode 100644 fuzz/corpora/bignum/0201ff353168f0863933be84c12057fbc2fa3a07 create mode 100644 fuzz/corpora/bignum/024d6a420055e25bbfbae832c0336d395d4855a8 create mode 100644 fuzz/corpora/bignum/02870772c5ca334b8f3c8aa447f0ebd9bfd5cf40 create mode 100644 fuzz/corpora/bignum/02d9fea34393ee71d4f3aa44de25c1918c24974c create mode 100644 fuzz/corpora/bignum/03101b43c702812adaaddea87751415ce8f09957 create mode 100644 fuzz/corpora/bignum/0351fb8e5735b85622e796bb40b8483b50b64ac1 create mode 100644 fuzz/corpora/bignum/042159a7e26c12354f68a7496a78a09cfbd6cf02 create mode 100644 fuzz/corpora/bignum/043ab69374a30eb3a341ef07621853e968ef35bc create mode 100644 fuzz/corpora/bignum/045a0c41b0758b9cf643f92e57f0c11457aeadcf create mode 100644 fuzz/corpora/bignum/0494ef6bf1eaaa4b3e6e371b1589a9b44e87b5ef create mode 100644 fuzz/corpora/bignum/04ac1d7daf4f33c6087306633553b4680d835202 create mode 100644 fuzz/corpora/bignum/05284472573e1ad58711ad817befa882ee713962 create mode 100644 fuzz/corpora/bignum/056ba108496ea9ed2a295d84b555dbb987e2a92a create mode 100644 fuzz/corpora/bignum/05d477c41b213e9010f9e46bc73346c6fe319cb3 create mode 100644 fuzz/corpora/bignum/063f1987a20f44a1c5ae7e5a86a87be08f9df136 create mode 100644 fuzz/corpora/bignum/06711f0f1477cee069093a3c436ea540ae4bca9a create mode 100644 fuzz/corpora/bignum/068bfb7a8d1e55f9bf2825e8b2c8081e20633ad7 create mode 100644 fuzz/corpora/bignum/07d9aed6d1eb93587a8931ead5e7663fd10e8800 create mode 100644 fuzz/corpora/bignum/08fd4b3eb8beb1fb97af87347ca73765798fb17a create mode 100644 fuzz/corpora/bignum/0981f1c7d97744fd770a778b37a8eced75741e9b create mode 100644 fuzz/corpora/bignum/09d74e60cc4e079a2a0a0d68ed4cad3fc14fe559 create mode 100644 fuzz/corpora/bignum/09fe083b11766c866365db5fccb2096146207c0f create mode 100644 fuzz/corpora/bignum/0a46ce2bff408810a733bcfc0b54f5fcb8eb1f1b create mode 100644 fuzz/corpora/bignum/0a50a78ba1f3e942b931b6fd2d86cb9fe6bd466a create mode 100644 fuzz/corpora/bignum/0a721b892711dd6e06b1c85c71db724921d1dac5 create mode 100644 fuzz/corpora/bignum/0a85c90033d14b61ee136ca947275888662cc564 create mode 100644 fuzz/corpora/bignum/0ac9badb05be3b0e7ad40b1a2a903dd48120a8ec create mode 100644 fuzz/corpora/bignum/0bb68fad351a71b2f54d5eca2238ec5b1093c3fa create mode 100644 fuzz/corpora/bignum/0bef81f25c7a3beaa80b07f777480f089e3072cd create mode 100644 fuzz/corpora/bignum/0c129a4a781bd04d1edb08158757a5cecd96f79e create mode 100644 fuzz/corpora/bignum/0c2a76d4384f528a103df6b9d99f426b790ace38 create mode 100644 fuzz/corpora/bignum/0c4b7ea6e5fc85681e9e9ac20ff060a849adc3c6 create mode 100644 fuzz/corpora/bignum/0ca9ba1be6fc1c6737d8d064fefd15aa8c16f01c create mode 100644 fuzz/corpora/bignum/0cc3fa3e0825bdb48d0bc417d498f6988a6e7161 create mode 100644 fuzz/corpora/bignum/0cc627fbca0e3981f04a3a7c71a4e4dbc126f56f create mode 100644 fuzz/corpora/bignum/0ce7b22f5748cf5906886afeb83e016b7d52afa7 create mode 100644 fuzz/corpora/bignum/0cf0b5e196b939a9d8a97c0bcf8dd33b1f5f3648 create mode 100644 fuzz/corpora/bignum/0d50c202149608e939960dbd23f49c91ea87ec1b create mode 100644 fuzz/corpora/bignum/0d75a556a936257c55dd6664794aa26fefc1eb78 create mode 100644 fuzz/corpora/bignum/0db7460efb5c23cc50f82c5d19da08970853013e create mode 100644 fuzz/corpora/bignum/0dd0afdde67588a0d5301d3aecc4af17284b4207 create mode 100644 fuzz/corpora/bignum/0df04ea60fe03ad212982823400601ee345fe8bd create mode 100644 fuzz/corpora/bignum/0e04b2516b1bdbe9aa9ee10bf489cdfcfcc76efd create mode 100644 fuzz/corpora/bignum/0e52466227789edb6f8426d0b2521a1206febfd9 create mode 100644 fuzz/corpora/bignum/0e62e8740db338b2f302e018c1db107c9fb00574 create mode 100644 fuzz/corpora/bignum/0ea3dc0d4d5b655a09848593a64eaffa92bcdf41 create mode 100644 fuzz/corpora/bignum/0eaaddf3208269e2bfffa194b829c6146bc04b22 create mode 100644 fuzz/corpora/bignum/0f24cc7dc73b97f9d216d66da7f0249a3a7e988d create mode 100644 fuzz/corpora/bignum/0f3e37e5823bdbae6b01f51bd8545a35dbdb8dd9 create mode 100644 fuzz/corpora/bignum/0f495146f65652e0529ddc94c5a08f63310c2175 create mode 100644 fuzz/corpora/bignum/0fe30d7e47172e68989c48a9973c683ee95860b1 create mode 100644 fuzz/corpora/bignum/102995c7ee6885b571f8addc64fb7f7e34576e29 create mode 100644 fuzz/corpora/bignum/103b1efdfce267e732ebdf655ee3a173402502d0 create mode 100644 fuzz/corpora/bignum/1068ce69061747b36e613dda9d535f1b1e5fc91f create mode 100644 fuzz/corpora/bignum/10c0da3a01bd956e9a1f19dd0f2dd0ad614f519d create mode 100644 fuzz/corpora/bignum/10c525ec33cc7753aa51fbd6db3dc0edd55ff10c create mode 100644 fuzz/corpora/bignum/11513cc2ea09f6aefb615c628264054dc9146e64 create mode 100644 fuzz/corpora/bignum/115501975116dc32d27279cad9a5206a8672213d create mode 100644 fuzz/corpora/bignum/11a8da245ea8ae61e3b8851348038b9b0a457a49 create mode 100644 fuzz/corpora/bignum/11fab1279768f8a0627ad0499be5df7f079b4eea create mode 100644 fuzz/corpora/bignum/1224f713a133b27e592ac420e52435ce0339672c create mode 100644 fuzz/corpora/bignum/123eb7dec2236797f7373aa3807164e4b7360800 create mode 100644 fuzz/corpora/bignum/12f95be4a81864b3e0f06a15d951e1c30aba7140 create mode 100644 fuzz/corpora/bignum/1382a27ccb5bae0693a2e18b34a2a08997d831dc create mode 100644 fuzz/corpora/bignum/13eb6ea81f5abc65eda7c1a608f4e8aea64f304e create mode 100644 fuzz/corpora/bignum/146bfbadf76e7fc13df45fe7f154aed472b2051c create mode 100644 fuzz/corpora/bignum/147a9d5b2e109f62ac167d54e4c6340ddce01545 create mode 100644 fuzz/corpora/bignum/14b9515c2ecd4ac8f4b60810f542b6550d67b2bd create mode 100644 fuzz/corpora/bignum/15667c8002e633bea2b1b9508089d87787d85be0 create mode 100644 fuzz/corpora/bignum/15680cfae112fbbca9fb3558898237b35fb264ec create mode 100644 fuzz/corpora/bignum/15b3068114c8a44d96307f86281a638de7b08e2c create mode 100644 fuzz/corpora/bignum/165f666c1dba74e442a0945fc8d391d8561b8357 create mode 100644 fuzz/corpora/bignum/1680269ba5a886db5bbd41496a31cb05b80e9caa create mode 100644 fuzz/corpora/bignum/169ba9110bd77bacf838ebc7d26eb9b3897c26a4 create mode 100644 fuzz/corpora/bignum/16c562a4001f28399b81b43194e7ccde68487bfc create mode 100644 fuzz/corpora/bignum/170814e87bf5d02d7bfcb3f7706e546a99ed7109 create mode 100644 fuzz/corpora/bignum/1721f18cfc82c0aaf99491fe57ab2b5eabac5b8a create mode 100644 fuzz/corpora/bignum/1745891631336f1a484ea0109be4702b0aea841e create mode 100644 fuzz/corpora/bignum/1762612e4e5b97f7049049b72cf1ca277d0fc5fb create mode 100644 fuzz/corpora/bignum/179e5327973ced876a2b8e30f84f1283d166d8da create mode 100644 fuzz/corpora/bignum/17a5a2b7d3598a8319461a6399605af31bfa9b36 create mode 100644 fuzz/corpora/bignum/17e9f55b00f757f9fc56bd64ecd8623393d5b325 create mode 100644 fuzz/corpora/bignum/18539c93974b08c2928ac372f369266b343837d8 create mode 100644 fuzz/corpora/bignum/186d213af0874a68802e5b057e1ad68cf7489af6 create mode 100644 fuzz/corpora/bignum/1876796e8ec1c0a613bef6341ceb9e9ba987e2e9 create mode 100644 fuzz/corpora/bignum/18a5e6e464c4e4a0f8a4629e20c4a97a0e1a8a21 create mode 100644 fuzz/corpora/bignum/18bf1250d12f51767333d75523d318408ef59d42 create mode 100644 fuzz/corpora/bignum/18e37fb683fd23a1ea949c408dd9811d9183a82c create mode 100644 fuzz/corpora/bignum/18ff0a48916d43c31a1038ee6a4da037d864d2bc create mode 100644 fuzz/corpora/bignum/191729ebf24fe1a4537066d99c1fff3e52bef19b create mode 100644 fuzz/corpora/bignum/193cd6476751259cfd34aeaf720b4aea69eadb15 create mode 100644 fuzz/corpora/bignum/1ac7ac93b4caa93cf1ffc00022d7ae7c890f0478 create mode 100644 fuzz/corpora/bignum/1b37b3353bb7bb98ce6358a18546ccaaa41957c5 create mode 100644 fuzz/corpora/bignum/1c13e233fa5abef542d4d5667affaa6006ce41d9 create mode 100644 fuzz/corpora/bignum/1c32974ddb204e700efb309581f1df1c64d4d127 create mode 100644 fuzz/corpora/bignum/1cbb141d3047367d9410e9d77e3ddfee89683afb create mode 100644 fuzz/corpora/bignum/1cd181a68ab4cbd8141c3a1c83f9840405e0cce2 create mode 100644 fuzz/corpora/bignum/1ceb6dbd665c5d58627fa31ed6c133ccc9e71866 create mode 100644 fuzz/corpora/bignum/1d790ce94974aab40348e750d806b5885e8f3527 create mode 100644 fuzz/corpora/bignum/1dce52bc5e9ae633d73ae196611f8531a7a37f93 create mode 100644 fuzz/corpora/bignum/1df5935d4cd349ac78102af001ced100f31449b1 create mode 100644 fuzz/corpora/bignum/1dfec9d84125f6a5d5467cd74103acfc88933fe6 create mode 100644 fuzz/corpora/bignum/1e268588969ccaef637396904c3569279bfb01ec create mode 100644 fuzz/corpora/bignum/1e331c9aa0cc226f7863cfcd22250045665a8ddf create mode 100644 fuzz/corpora/bignum/1e78bfe3b31ae8904f08bc48157f2cf619aa6aa4 create mode 100644 fuzz/corpora/bignum/1ecf3d863e5b5317aa9eefec0d0a7045e77b3dbc create mode 100644 fuzz/corpora/bignum/1eded4e4ef96954ed169e59a6d7333f32547d0b9 create mode 100644 fuzz/corpora/bignum/1efd06ca42ab8f700dd44610957c02667a0b4df1 create mode 100644 fuzz/corpora/bignum/1f3dc7f0e6fca8eb8a13914b5a710b9c80028df8 create mode 100644 fuzz/corpora/bignum/1f848503b378f9ca38384e3b19f5517fd33e806e create mode 100644 fuzz/corpora/bignum/202655abef22e6bfd1db41dcaecc9b7d5bc279a2 create mode 100644 fuzz/corpora/bignum/202c1c672fab92be025c9cf820ad90bd64f090e3 create mode 100644 fuzz/corpora/bignum/2049a94185314d4049a8644d76a8f729051fa253 create mode 100644 fuzz/corpora/bignum/20822ad0ee4e5ec4536b670320a475abb58e87ea create mode 100644 fuzz/corpora/bignum/20fd5aa0c849f0b9380fe9c4ea3dd5bb44b4db1e create mode 100644 fuzz/corpora/bignum/210b78032ce82a5c34bb8d9698156545ebd8610f create mode 100644 fuzz/corpora/bignum/218049e64516ef6b5ddf7f02ebb092cc7b0ec159 create mode 100644 fuzz/corpora/bignum/2192cbe3ddde5c7fdfdf59e36fdbf337b7a23732 create mode 100644 fuzz/corpora/bignum/21ac33ed0badee09f9ae7e6f8b03092b4d2738ef create mode 100644 fuzz/corpora/bignum/21ca7691e33ff29dd02938d482f8a894703e2c04 create mode 100644 fuzz/corpora/bignum/2247a18cbf97b6cff011d4c46876aa3dc069faad create mode 100644 fuzz/corpora/bignum/226f7197b6fec9431cf951020c3be838cdac85fd create mode 100644 fuzz/corpora/bignum/22d36f609d2fab6d90ec6007031f3401e088fef1 create mode 100644 fuzz/corpora/bignum/2319848c64272ec3b2a13dba9121254a55a54243 create mode 100644 fuzz/corpora/bignum/233ae4cd36f6ae9db1e271f1e3e14891e18d4ada create mode 100644 fuzz/corpora/bignum/237c6bf286c02ac1035cc08c704ae35d3ecb3b77 create mode 100644 fuzz/corpora/bignum/238b5e718af7edcabda37bacf28c61bb6ee4713c create mode 100644 fuzz/corpora/bignum/23ad6aafda19862e33be495e8965e9b449b4a46c create mode 100644 fuzz/corpora/bignum/23c16e0edb2808f139a3e6c1af45ffa9350b47ce create mode 100644 fuzz/corpora/bignum/2404c1ff7c95d6ef4a2bb6ef5747cbb8847348aa create mode 100644 fuzz/corpora/bignum/241dc4b5939ec6bedb89bfe7136bcdb00d0a743a create mode 100644 fuzz/corpora/bignum/24330e50e2df3d3557095d4fd9a5254215fee907 create mode 100644 fuzz/corpora/bignum/2433d2dc44ff67783172bfaa063f7d045b9b1a2b create mode 100644 fuzz/corpora/bignum/248dfd3b633caaa171a91d10f443a2b057dbf9a6 create mode 100644 fuzz/corpora/bignum/249f520056a8959b5705eb915fafd1c2b28e18a8 create mode 100644 fuzz/corpora/bignum/24f98757af85b04541d6dd3b35b3eb826f39b915 create mode 100644 fuzz/corpora/bignum/256bbf6ffcb23254c612cdda36c6ed0240d46e0e create mode 100644 fuzz/corpora/bignum/2584b8bf1482a82c9c38de04742302f97af09188 create mode 100644 fuzz/corpora/bignum/25f28d29a6a62d98a285604efe816946be446b27 create mode 100644 fuzz/corpora/bignum/2606fd48fedc4fea95b72d235b9a6d83155063ea create mode 100644 fuzz/corpora/bignum/260a7b88eadd99c775fb2882bde130680a4df385 create mode 100644 fuzz/corpora/bignum/264c7e027882f9daa95032672be0766f38395117 create mode 100644 fuzz/corpora/bignum/2687ae7871b4f480b6c9da8877cc5bd1611d753c create mode 100644 fuzz/corpora/bignum/26b8282762b2393f1fa55c195152e421b5b0dc58 create mode 100644 fuzz/corpora/bignum/26e00d4f485eeae8ef0a30e482fade1309c866bf create mode 100644 fuzz/corpora/bignum/26e1a692ca420b60be9ab9263e7d3539eadcaecc create mode 100644 fuzz/corpora/bignum/26e74fbbd671744b68b480e79b79204ddc149664 create mode 100644 fuzz/corpora/bignum/277fd8049e9e9f5a83e9ff91c21a8aefd314f514 create mode 100644 fuzz/corpora/bignum/280a5b1a13dbf2eaa771da30bcf30d9cfb27bddc create mode 100644 fuzz/corpora/bignum/287ed5b1ab784a362038176b132f49e8a9a6a69c create mode 100644 fuzz/corpora/bignum/28d0e02f16af466f385434c6e87d0e27ae47066e create mode 100644 fuzz/corpora/bignum/28d86ab94a3bf8e7af0d872869184a7a9f2c7875 create mode 100644 fuzz/corpora/bignum/2914d9c9a178f78f17bc6df6fffc5d82612ffe78 create mode 100644 fuzz/corpora/bignum/292e0e049e96bcbcb291437860b4a617d9107c39 create mode 100644 fuzz/corpora/bignum/29bf0a9990356b1a6b7755ab81d81e7e7b926fcf create mode 100644 fuzz/corpora/bignum/29db29b1b9d60be2e46a73f31cbf838d43ccaa42 create mode 100644 fuzz/corpora/bignum/2a4e0c6d06ec72b696da0051c64b053e65ab4acd create mode 100644 fuzz/corpora/bignum/2bb39f673f900dc6219a71571f1e6606c7cfd013 create mode 100644 fuzz/corpora/bignum/2c236dca3111f2ea9003a8c8d49090037fd62104 create mode 100644 fuzz/corpora/bignum/2c921a5b65c55380aa25c303b2bd0ed342bdd753 create mode 100644 fuzz/corpora/bignum/2c9ca87ca42d712550de52224fb39ae74e7a14f9 create mode 100644 fuzz/corpora/bignum/2cd7861e8f33034a05353d25c3101ee689f2f7d6 create mode 100644 fuzz/corpora/bignum/2d19415dbc404bceba31b1f1304ee4389d339db1 create mode 100644 fuzz/corpora/bignum/2d3b4baf6b104759c82536e451c4a37407e92da5 create mode 100644 fuzz/corpora/bignum/2d4c328a0efea3aa219cc6df06d4f0f5d7d5d881 create mode 100644 fuzz/corpora/bignum/2da07b60183b7b0dcc55e85fb30cf05558834c2e create mode 100644 fuzz/corpora/bignum/2e04bf331da1d2a48119c2624940c85a2bb96cbb create mode 100644 fuzz/corpora/bignum/2e6632f80f09609cba55db6a73ebbf22dd5b5011 create mode 100644 fuzz/corpora/bignum/2e796e46ccf106811da30504c7e5644b5aec31b3 create mode 100644 fuzz/corpora/bignum/2f507fa3b7b6dc55a99afda7c15e0c52f65d915f create mode 100644 fuzz/corpora/bignum/2fbd2164911e4cba6a0ba65608151fd577436da0 create mode 100644 fuzz/corpora/bignum/3093da32425f62472320e38f4dacd9751120c04f create mode 100644 fuzz/corpora/bignum/3106a174559e3e42965ac063dd2128e62868dca2 create mode 100644 fuzz/corpora/bignum/321d56a4ac1f5d15d6f3470ed8983043436db196 create mode 100644 fuzz/corpora/bignum/321e7b54cf7aea8d1adfa44cb9bc7243a7d0f6d9 create mode 100644 fuzz/corpora/bignum/3286ed4d96f7bd3d8ecdbae91080171c5e3a5ed5 create mode 100644 fuzz/corpora/bignum/3296a01c0079136a2e5408545c1467907933ffcd create mode 100644 fuzz/corpora/bignum/32edcbe6abdd0d8a69316ae25d1f786f50f5083c create mode 100644 fuzz/corpora/bignum/339d345718a741663b28888f038bcf97d26f8ba0 create mode 100644 fuzz/corpora/bignum/33dfa4ae19057a36826cbbf896f5e3e884b09016 create mode 100644 fuzz/corpora/bignum/3462fea3b762838d045d4362cd25a319104204f0 create mode 100644 fuzz/corpora/bignum/3478ba99bcf7b78c74906874966e98b8ff20f4f6 create mode 100644 fuzz/corpora/bignum/347f887e6ea6bf5ca09bf037846232ea0e240949 create mode 100644 fuzz/corpora/bignum/348397ea401f30a113a7ef71258b1ed44b8d7525 create mode 100644 fuzz/corpora/bignum/349f96a5e8f3ac016017aab69e8d05a98486c40e create mode 100644 fuzz/corpora/bignum/34c6ffc54b69c3b9c1ec1db4eb00e1c89878b78b create mode 100644 fuzz/corpora/bignum/35ab47a2ba2dec89a3686fffc8651f08084df495 create mode 100644 fuzz/corpora/bignum/35c3206b7f011379adfc8cf85df241172f5c1c63 create mode 100644 fuzz/corpora/bignum/35f066bd737b99272cd9eaf36ec190f5004b457e create mode 100644 fuzz/corpora/bignum/363df844cdcb142eb7cf09bc258f95a58ab90c6d create mode 100644 fuzz/corpora/bignum/3657205be84517271f18aef7586fdf2e553f4aeb create mode 100644 fuzz/corpora/bignum/36579426d25530a16d21c01b7755aac46ae3dbd4 create mode 100644 fuzz/corpora/bignum/36660a0225cfb187b72f9ea446f583e1874ce8ca create mode 100644 fuzz/corpora/bignum/370428396773e8cbdb38dc17932500ac526183f9 create mode 100644 fuzz/corpora/bignum/383cc381198264357d960e9f206d00d3f5f6a02d create mode 100644 fuzz/corpora/bignum/38690f58256cffd05890d3ad140ba2cfa17a3d2f create mode 100644 fuzz/corpora/bignum/38ae5523b8eeed1763ee82d81cb1ab6f0712fb35 create mode 100644 fuzz/corpora/bignum/38f7dfc86bba49dc5f8f873e0f9cdf1087904ff8 create mode 100644 fuzz/corpora/bignum/390167c36e0d55aae9bec2c1b0113d831d8dcb2e create mode 100644 fuzz/corpora/bignum/39177edbfe7a7abba6ac6e6f1554e8a558cf5776 create mode 100644 fuzz/corpora/bignum/39466690ea2ed65aef23629fe499492c5b85466e create mode 100644 fuzz/corpora/bignum/3957191a00bf8a892d16f8e67d88879770ab2d15 create mode 100644 fuzz/corpora/bignum/399ee600fb8ae34ad17fea2ae0e7b08544d0c734 create mode 100644 fuzz/corpora/bignum/3a23488ce4b978caa112087f8da78de98b0edca1 create mode 100644 fuzz/corpora/bignum/3a559782633f66a5661c45f1f2e6b95320254741 create mode 100644 fuzz/corpora/bignum/3aa733d68bbde7d5a002ed0932b64ecc1de18af7 create mode 100644 fuzz/corpora/bignum/3aa92b49de87a3a259d7f5e0abbb0629becc2ff5 create mode 100644 fuzz/corpora/bignum/3aaaa2d3474947ee9829a79df4dc9b02c8c3f620 create mode 100644 fuzz/corpora/bignum/3afb3f67159cb77ba326d58298f93722afd73941 create mode 100644 fuzz/corpora/bignum/3bcd7f0060b80069012f0df0a783afa28c5727c4 create mode 100644 fuzz/corpora/bignum/3bf2fbcf306b1f8e8d6822bd6af0dccec6f87acb create mode 100644 fuzz/corpora/bignum/3c0d0eb59bfbbf26bfe3f2f5235ded7e6a4f5cb2 create mode 100644 fuzz/corpora/bignum/3c5347ab8721451f037166d135c2eee5f7252011 create mode 100644 fuzz/corpora/bignum/3c6bae49e5b32c8a70d3e9f6727fc4f58bf48d95 create mode 100644 fuzz/corpora/bignum/3c8a7388f02ca309a8e9e05e92afb2cc04705ad8 create mode 100644 fuzz/corpora/bignum/3ca36d05d51f4520ee74b9367983baa4c934e3c7 create mode 100644 fuzz/corpora/bignum/3ccadc09ac7409bc3b1a1f3d7bf7d5fc200d07f6 create mode 100644 fuzz/corpora/bignum/3d28cdd566dd0c7f4740bf4b428cbc49b9dab863 create mode 100644 fuzz/corpora/bignum/3d340074a4f182d061fd43b0e0b2f6c19f481202 create mode 100644 fuzz/corpora/bignum/3d51312150359597c03deffbde7f2eb3a9b57411 create mode 100644 fuzz/corpora/bignum/3da03b453fbfb6212d35ce8266469d5c8ec31473 create mode 100644 fuzz/corpora/bignum/3e162d7a180d37984ed5126b0d43a7dedf22b317 create mode 100644 fuzz/corpora/bignum/3e2373264e7fd5afb5d0d9cddc9761beb9418a7e create mode 100644 fuzz/corpora/bignum/3e56a3546d932e176c126bac69ee2a73a9581d02 create mode 100644 fuzz/corpora/bignum/3e84b136027229fd82b3e78aa0f543c5b0043f8d create mode 100644 fuzz/corpora/bignum/3e9cdbe846d50a2c7f44b928be233c9287923818 create mode 100644 fuzz/corpora/bignum/3efc568a4aa68498f0e98f8370cb9f89d735e1b2 create mode 100644 fuzz/corpora/bignum/3f0c67d823d6f523c9753432a56850ed093af759 create mode 100644 fuzz/corpora/bignum/3f40842ff5d604b617e0442fbdae5d9cf186df35 create mode 100644 fuzz/corpora/bignum/3f585c5207ed799c94d6fc80df4ac92119bc5ebe create mode 100644 fuzz/corpora/bignum/3f7e24eba5b5823b0b87f9b837af0f1865b8f03f create mode 100644 fuzz/corpora/bignum/3f9a64bf80bca38bd3ce1e3610ba9a329b809e3c create mode 100644 fuzz/corpora/bignum/3fad8a95c80a9f9aaa0729601847cde6edd4f876 create mode 100644 fuzz/corpora/bignum/3faf46acbbdc3a4197bd5a5a35ac157ef86514b1 create mode 100644 fuzz/corpora/bignum/3fe27f30449867805256ab4f87b1bb6e6afae5e7 create mode 100644 fuzz/corpora/bignum/4038eec1f32c4891d0813c60c9bc94bf272d7752 create mode 100644 fuzz/corpora/bignum/40448a317efe68881f67cb8df8bf05a4c6b18fcd create mode 100644 fuzz/corpora/bignum/40afb848080f7d38af1be2127eab7f5f3326977d create mode 100644 fuzz/corpora/bignum/40f212a8f933208c9e4cbf149df5a220601d8d6f create mode 100644 fuzz/corpora/bignum/415a45bfec26dd13dad64d02b434409a26382f28 create mode 100644 fuzz/corpora/bignum/41cee39eb76192d52c9f84f08e14f7c2e6533f9a create mode 100644 fuzz/corpora/bignum/42c4e70ad84af50112945fc17eafe7f69eebf08c create mode 100644 fuzz/corpora/bignum/42c8af90063a5a1eea87c7a6cc07f3171f720d6f create mode 100644 fuzz/corpora/bignum/42df56db836e01acc96da7c7871c3675bf77a835 create mode 100644 fuzz/corpora/bignum/42e4bd416880c6ea560bf3e221377c13f774ff4d create mode 100644 fuzz/corpora/bignum/430483a9d2492af839eceaf169f5303a1c22d0fa create mode 100644 fuzz/corpora/bignum/4347192ee942b21217f9c38570eff21323ce97fb create mode 100644 fuzz/corpora/bignum/435498ea53137812cc738e0cc1cfdf8e01e62022 create mode 100644 fuzz/corpora/bignum/43c3a255149f17d81946353a3959d24df52d0e07 create mode 100644 fuzz/corpora/bignum/43dce8709e242b7766ce40259e6e518264091c74 create mode 100644 fuzz/corpora/bignum/43e501ceb0f3062fb7db96a0094e58016c71cdd3 create mode 100644 fuzz/corpora/bignum/43e679696b681827d5f619ace6655f74cdfda9c7 create mode 100644 fuzz/corpora/bignum/43fbb5205a20fe1fab5808dde504c1b008e1fa37 create mode 100644 fuzz/corpora/bignum/44009f597d911dbd33f5d3d6efff84a830ae21f3 create mode 100644 fuzz/corpora/bignum/440389be8bb74ea651681f6c77b7b551b98b1e21 create mode 100644 fuzz/corpora/bignum/447cf2b0e1caaf5d7bb03ffbd959bd9b424dc7c8 create mode 100644 fuzz/corpora/bignum/45082cc15b05eadbd9e8913985f72357893d45e6 create mode 100644 fuzz/corpora/bignum/450f136b9acbefc1d41eccbeb75bc36015580627 create mode 100644 fuzz/corpora/bignum/4535a7123d911bdb0037b747109c7bad9a7dabb2 create mode 100644 fuzz/corpora/bignum/4541c607b7744fb60768e1f20192b1554ff50d23 create mode 100644 fuzz/corpora/bignum/45d67f5ef07bb00e661553e9385152340b7880e8 create mode 100644 fuzz/corpora/bignum/45e37def1eeef7d9f4ebef8432e2f33f96d57210 create mode 100644 fuzz/corpora/bignum/46999e4f45ca34500f3e3dff127bc960e47f2212 create mode 100644 fuzz/corpora/bignum/46de162d688e6af9f5b07993e75f435a828561ae create mode 100644 fuzz/corpora/bignum/46eadf79382f8774e49a0782723d680678625237 create mode 100644 fuzz/corpora/bignum/470739a78afea3637df2c9001060439d1c971c04 create mode 100644 fuzz/corpora/bignum/4732538b40f43473eb689e88ec7183320fa8f51d create mode 100644 fuzz/corpora/bignum/47e47fecd21a2c754595e986a51171f77cb96f32 create mode 100644 fuzz/corpora/bignum/47fce7675d692b5ac8689311a7dacb1dc90176fa create mode 100644 fuzz/corpora/bignum/4832d64b1620e0ed29c5e30e8f46179b2fb0b316 create mode 100644 fuzz/corpora/bignum/4856a41125177c7c3cb904cb1dc23365732ddd12 create mode 100644 fuzz/corpora/bignum/48809304729df6310c9df53585f08197a7da44ab create mode 100644 fuzz/corpora/bignum/48d04426041318dc151c656996e9c320b899b060 create mode 100644 fuzz/corpora/bignum/48d42bc6b1acf00b03c8cb471811dd5cc7368a7b create mode 100644 fuzz/corpora/bignum/48ea6a560c73987d7a0b679865a270d9015bb501 create mode 100644 fuzz/corpora/bignum/48ebf82704f3a4a7d2c76ad24e8643dc15416326 create mode 100644 fuzz/corpora/bignum/4932d7b3de8e97906310b6299ed5b4d35f2863f5 create mode 100644 fuzz/corpora/bignum/495a281b0163b878f57cc62cc16753b675a325ad create mode 100644 fuzz/corpora/bignum/498a834ab25b440c3bba77d965ead8caadcc2640 create mode 100644 fuzz/corpora/bignum/4999193d6ae6fb7e3d7a0c679b5a84eceb9a9627 create mode 100644 fuzz/corpora/bignum/4a7feb5e7651b3bbd32826d0a8144732d3d497cc create mode 100644 fuzz/corpora/bignum/4aa3286984be3ac1231a0d92a1c9cc6fe38d0c67 create mode 100644 fuzz/corpora/bignum/4ad859e13a5b2d49675ab691dd28412152c40abc create mode 100644 fuzz/corpora/bignum/4b0ccfac9808148aff8b1f8cc251bd77479ccc3e create mode 100644 fuzz/corpora/bignum/4b1cfd86d2fd02b50cf041729f37965ef244c042 create mode 100644 fuzz/corpora/bignum/4b6271cf3bbc6f25598cf7d002af91b1b831b1fd create mode 100644 fuzz/corpora/bignum/4c6c50b3d50d94b6c59711122c004860dc9b8d1e create mode 100644 fuzz/corpora/bignum/4d1cd6ef59f645b9c4f6a4b1d7eed81d1702b13e create mode 100644 fuzz/corpora/bignum/4d2127ee9e7d595b58e360c84a6723f91bb9e360 create mode 100644 fuzz/corpora/bignum/4d4fca7e00c64df2a849780acfdc0dcf010b4cd8 create mode 100644 fuzz/corpora/bignum/4d76a9a9135289f3740649e5180ed05f984d0168 create mode 100644 fuzz/corpora/bignum/4d92b25a7e9872d50e77d3bd026f8e084991248c create mode 100644 fuzz/corpora/bignum/4da1659dff86ce281dfc8af78802819339934a24 create mode 100644 fuzz/corpora/bignum/4dab18090cddbd8463d93ce60886537edd17edbc create mode 100644 fuzz/corpora/bignum/4e376522ea32e46bba92fa328d824e8483ed7a79 create mode 100644 fuzz/corpora/bignum/4e3d476558837c641fe298009de7b88605b4b488 create mode 100644 fuzz/corpora/bignum/4e4e988be06ba208cdf0ce84a360fac1bc855632 create mode 100644 fuzz/corpora/bignum/4e6b21d837f0fb279d9a032ad897396e08f88a44 create mode 100644 fuzz/corpora/bignum/4edfc78973e6ea007fcce349ad19979751c28ba9 create mode 100644 fuzz/corpora/bignum/4ef057daa5a559d9eb70a1f6e12fcbdb483894f4 create mode 100644 fuzz/corpora/bignum/4f0877170869b0b813943b84f02023845411e5d0 create mode 100644 fuzz/corpora/bignum/4f19b2a777f71508520f916ea9a71744f5f8a2b3 create mode 100644 fuzz/corpora/bignum/4f5b854cc54fc0da48b782c62f7b387398cb9a51 create mode 100644 fuzz/corpora/bignum/4f856fbc162fb1d1035ec5a86c11e78a11bd8f42 create mode 100644 fuzz/corpora/bignum/4faa799784b7025b0c32e9828f03d61401844b79 create mode 100644 fuzz/corpora/bignum/4fbcc55803276eeab8e263c93d860f70b989338c create mode 100644 fuzz/corpora/bignum/4fbe0885196250d34f72aa35ef7786a9d9f2bac3 create mode 100644 fuzz/corpora/bignum/505c2317e068228df5b37054f3446ca82580f8d6 create mode 100644 fuzz/corpora/bignum/5075f2ec95fcd21a7e6dffd9c3e182cdbb06db5d create mode 100644 fuzz/corpora/bignum/50e7480d24c046b696fc9783bb2c549d17c2fd25 create mode 100644 fuzz/corpora/bignum/510932b3b619cfe77e28983ae4e7cf862de086fc create mode 100644 fuzz/corpora/bignum/5136e0873a549e75222195649e2aba905f36f343 create mode 100644 fuzz/corpora/bignum/514fc5ac23ea84c9aa1ba935f8575f9e309b68f3 create mode 100644 fuzz/corpora/bignum/51a51ed3821ee373cfed0fc0b267a9079f213760 create mode 100644 fuzz/corpora/bignum/523812bd98f2c67a37522b8018011fe273d99d15 create mode 100644 fuzz/corpora/bignum/527a911753d4e8ec56f32376a9ee6cee812fcfbf create mode 100644 fuzz/corpora/bignum/527e6ba895ea4ab722cc605a5682a89d5e172687 create mode 100644 fuzz/corpora/bignum/527f76fd9363d6c5a69c9d7cd9bf21788539c8e8 create mode 100644 fuzz/corpora/bignum/527fe821371d44a90baf09440689f2b45dad761c create mode 100644 fuzz/corpora/bignum/529ba8f3834a042726e069a863b0a7d0bcb21b8f create mode 100644 fuzz/corpora/bignum/52e440a4bf08fd115b860de6e5633a91e8567352 create mode 100644 fuzz/corpora/bignum/53275ba3a3fbaf4f00fb8fe051ce56520b768598 create mode 100644 fuzz/corpora/bignum/533d3a50c89d052870c6f5ddaa1c231fae38a4b2 create mode 100644 fuzz/corpora/bignum/534549cf05110c41d44f9edd8c2e8989e7fc47d0 create mode 100644 fuzz/corpora/bignum/534e1bd75165cff183e5707393597f02f2606017 create mode 100644 fuzz/corpora/bignum/53d9a129aaa202c4647536b917666e3c744a3c97 create mode 100644 fuzz/corpora/bignum/5408595f675bfa026853272d5fa11891591968c2 create mode 100644 fuzz/corpora/bignum/54807ff333f91299dc9e7e535840613d0ce25451 create mode 100644 fuzz/corpora/bignum/548ea4993d4b03d7d91f79bd2da4051fcc229f97 create mode 100644 fuzz/corpora/bignum/54f65c915ffb78ec4681db6fa409ca1850c03df3 create mode 100644 fuzz/corpora/bignum/5505e32ff695f06c4a6fc4777cbc0bfe75d9031f create mode 100644 fuzz/corpora/bignum/552e8406c5bd74fd6885de0850872ba227d1802c create mode 100644 fuzz/corpora/bignum/552f1a4e8c09b4e02a4ceb041866bab06937f68d create mode 100644 fuzz/corpora/bignum/5575b8b212b9f893a6f8b32a2d9de7c7e09fcce1 create mode 100644 fuzz/corpora/bignum/55d8f5b95483caa0056103ad34137fb6edada499 create mode 100644 fuzz/corpora/bignum/55e49eabc1d05f9bb224a7a446a40ac9f7d73d22 create mode 100644 fuzz/corpora/bignum/562481814a23c4207d5f7430a6167cf76a01bb00 create mode 100644 fuzz/corpora/bignum/57234409154d6735847aea01e4d677b521940a5e create mode 100644 fuzz/corpora/bignum/57821cc6af22200dd6b5547c76050b9ddb29153b create mode 100644 fuzz/corpora/bignum/578e3cf7349490612b089f917b978500966c8797 create mode 100644 fuzz/corpora/bignum/580a88dc67cfca498b6e3547ee068ae65be42ba6 create mode 100644 fuzz/corpora/bignum/583605a902a23bc9a61fa1c419b2becbf04cfc91 create mode 100644 fuzz/corpora/bignum/58e81a89e23337479e81b2f9c51f36ef339f90a6 create mode 100644 fuzz/corpora/bignum/58f0cdc55c23aa628b19b473be923496e8a7ab3a create mode 100644 fuzz/corpora/bignum/58fc5cf8b1cc41b18d7dc52091b7c0e7a5f07bc5 create mode 100644 fuzz/corpora/bignum/5929d725fc8ea293ce05aa2527b778af0bf8a31e create mode 100644 fuzz/corpora/bignum/593498aa5940ba0052d6dbd4a70aff56612eb7c7 create mode 100644 fuzz/corpora/bignum/599207807da0ee473781b708eeb9c87fe445dc00 create mode 100644 fuzz/corpora/bignum/59bf2f5e14bb4151f7089fbae0c9381cc64c9ca3 create mode 100644 fuzz/corpora/bignum/59e57132d8b34806720fd38b717205a06589aa8e create mode 100644 fuzz/corpora/bignum/5a41dae90a1328145620749f7c64a92ef0adf16f create mode 100644 fuzz/corpora/bignum/5abbd742dc2091c59d66b92b8f7fc784cd7ae6ee create mode 100644 fuzz/corpora/bignum/5b254ce022c62298185b9e23d125813258a228e4 create mode 100644 fuzz/corpora/bignum/5b7d93b7dd530bcd39decf4753cab3ea5b59d165 create mode 100644 fuzz/corpora/bignum/5b9f1a45d0d9bdee99fcd95252a8e0b252524727 create mode 100644 fuzz/corpora/bignum/5c10e0e276c8bd89a074239e3aa8af1b1f5009f3 create mode 100644 fuzz/corpora/bignum/5c11d41bf5f10d45dd8eb05d06e222aad00ecb17 create mode 100644 fuzz/corpora/bignum/5c85dbec76c2084f564eeed29b004c4ada23c08e create mode 100644 fuzz/corpora/bignum/5c99811ae507130228a8bf4d5bff5e05ad0bc073 create mode 100644 fuzz/corpora/bignum/5cc77d5f47d1574660b075456ff838d5ab5de9c9 create mode 100644 fuzz/corpora/bignum/5ccb272f474bf220942c8bedc6fcd2972b588995 create mode 100644 fuzz/corpora/bignum/5ced45be70e9fa58a9a47798ee8caac985023dbe create mode 100644 fuzz/corpora/bignum/5d203470dfe8adc35b54b6d496933da470cf5506 create mode 100644 fuzz/corpora/bignum/5d27ecf9834887c13f3b4850795e47139225cca0 create mode 100644 fuzz/corpora/bignum/5d6164e6a4f6dd9d80c3d53d7f8fb2592d2d6e4e create mode 100644 fuzz/corpora/bignum/5ddc8aec941faa1593bd4e71f36c1223f3bda123 create mode 100644 fuzz/corpora/bignum/5df9848cf7e1bd98ed8751f09fe4c5b4c183c81a create mode 100644 fuzz/corpora/bignum/5e03c0d598a4d191cccf0490b3aadcbb708e2c43 create mode 100644 fuzz/corpora/bignum/5e24a81ec78649781ab09d9acfd4c3d712991cdf create mode 100644 fuzz/corpora/bignum/5e40d17c889fffe0f97cd1bb9572430f55b0e0e0 create mode 100644 fuzz/corpora/bignum/5f3c049f5dd220a05439fd2fd52ae4ad39d95e1d create mode 100644 fuzz/corpora/bignum/5f8cf5adb02c00fd4d59304d78b40af060145497 create mode 100644 fuzz/corpora/bignum/5f9471181179b1e8063e2e3420377461155e6b4e create mode 100644 fuzz/corpora/bignum/5fb5c697b9b2d9f65ba72369b812639afd46c905 create mode 100644 fuzz/corpora/bignum/5fc0486f53be98a89e3063dcf0515511c620a9d6 create mode 100644 fuzz/corpora/bignum/5fe8ebd795409f495a1456fed72e976852fa8b67 create mode 100644 fuzz/corpora/bignum/60299491a306009121981c68269134e2e37c79aa create mode 100644 fuzz/corpora/bignum/6042ba735fee47ca30f872a1239d8cddab4b9a8f create mode 100644 fuzz/corpora/bignum/607601efcb1e45367e3d9d7d9e2eaeea42fb7ba2 create mode 100644 fuzz/corpora/bignum/609137ead36afb94f84375331667b17181f07356 create mode 100644 fuzz/corpora/bignum/609d76318cbaf5ec74305ab7965cfcd97e46e5e4 create mode 100644 fuzz/corpora/bignum/60c454ec5b1f3f8b7998aabe9d331fd92c898e31 create mode 100644 fuzz/corpora/bignum/6113bd9b19807b61df3147a67b755774fedb12c3 create mode 100644 fuzz/corpora/bignum/611f1a128c646c2c2e213b84fadbeac33fa45147 create mode 100644 fuzz/corpora/bignum/61465eb9a1efffdf51622fe235b2f33b3a252a70 create mode 100644 fuzz/corpora/bignum/61a97b8be7622a1a04e3ad77c74ff68982ea9b43 create mode 100644 fuzz/corpora/bignum/61cc67ff6eeacb581c76eac0a566e97dd892e058 create mode 100644 fuzz/corpora/bignum/6202c6ca108fe3940f1ee396ac3b0afab758a8ff create mode 100644 fuzz/corpora/bignum/620c5306fd4e2de3d5c06838f2fdcb649c3efdf8 create mode 100644 fuzz/corpora/bignum/620eb6e856afe12b59a2910701aef6fc14f84479 create mode 100644 fuzz/corpora/bignum/6279710192b550ca788b6415e4eafbaa31f6d467 create mode 100644 fuzz/corpora/bignum/62e550a44741308fbd2544c88f5aa5e4875b874a create mode 100644 fuzz/corpora/bignum/62e5825953e3c282b2952141999829d67cc6518d create mode 100644 fuzz/corpora/bignum/62f904aa08d5431164bf42f3f75db5228a5c44f2 create mode 100644 fuzz/corpora/bignum/62fee53c70e9a0280288def3dc357c4540a5afe5 create mode 100644 fuzz/corpora/bignum/6365877928bd49550c917d2be5e0e3edcfb980b0 create mode 100644 fuzz/corpora/bignum/637c9460ee2fc36e9ce57f845de51a9382c01211 create mode 100644 fuzz/corpora/bignum/6470f65df720ce1e9d84bac859dc05388be39d8d create mode 100644 fuzz/corpora/bignum/6480a37c7b175ca2ab6e83e6f953247a7b6cab2a create mode 100644 fuzz/corpora/bignum/6503adb4bf834fb91b9e1987a781495875328b77 create mode 100644 fuzz/corpora/bignum/654f173118a517805c263789d179783736369281 create mode 100644 fuzz/corpora/bignum/65b323ea7b6e641dec9283abb39ba9f439e386e8 create mode 100644 fuzz/corpora/bignum/66f9b45847dfb55ba58673b804f9afab414ff2a9 create mode 100644 fuzz/corpora/bignum/675e95ed8512b380227237ae346d38fda427482b create mode 100644 fuzz/corpora/bignum/6771c66378b9fcba09403bcf0f0213117a7b2f79 create mode 100644 fuzz/corpora/bignum/67ada30479ca71143889a77534232a92c4111662 create mode 100644 fuzz/corpora/bignum/67bff2cd16419790e172e009b2a955c77ade769e create mode 100644 fuzz/corpora/bignum/67df5e2798149bb2eea7ac45b4d183dd5c730564 create mode 100644 fuzz/corpora/bignum/685708aa20cf881abffe725dba3aeb8071247396 create mode 100644 fuzz/corpora/bignum/68fe5831286b1d1e97e5dda0bf213358b9f432c4 create mode 100644 fuzz/corpora/bignum/6969f46215a209adf12c9d933dd7990a1b849b4d create mode 100644 fuzz/corpora/bignum/69d7e55962ad5c3ca98c3b5d000c0cdd9f5aa2c9 create mode 100644 fuzz/corpora/bignum/6a4d453964cb865ad893980feed44c4cf2e01809 create mode 100644 fuzz/corpora/bignum/6a5f1a0e5251f8e808f2fbbd1057dd612eaca048 create mode 100644 fuzz/corpora/bignum/6a744e5fddc8c38646729b383d5dd2cb8ae7cebf create mode 100644 fuzz/corpora/bignum/6a95f63a2ab84d0518335a584a99da71b30e80b0 create mode 100644 fuzz/corpora/bignum/6a970a73f1a47e6721107a855c1ec087fd1ab471 create mode 100644 fuzz/corpora/bignum/6ac041b8d635613bd578e20c825106ad832ab769 create mode 100644 fuzz/corpora/bignum/6ac10d7ca9cb55aa8bebe8816b4e25703001b941 create mode 100644 fuzz/corpora/bignum/6ae47a64df825a9260bf3e49fc42817138827ced create mode 100644 fuzz/corpora/bignum/6b0e3794233dbb6802f3315f9de3fcb223e7a341 create mode 100644 fuzz/corpora/bignum/6b26d5fd1d379ce2f4d209d37833a359af8742c8 create mode 100644 fuzz/corpora/bignum/6b55fa0f29e62f8a3bc350e95f07bbcfba8841cb create mode 100644 fuzz/corpora/bignum/6be0e3e11b0a4e3d7ccf0a7b9a809d7664aefd01 create mode 100644 fuzz/corpora/bignum/6c1c1facae1eebe45ceb2da6a2db37fbba60ce5c create mode 100644 fuzz/corpora/bignum/6cb42ef8ca1d291f6c3019eaec6787d76521239b create mode 100644 fuzz/corpora/bignum/6cc0f4ea193ae9e79ab3d5b09f6711396b4ccaf9 create mode 100644 fuzz/corpora/bignum/6cc828e5547cc1e802db7873c742ecadcf67f096 create mode 100644 fuzz/corpora/bignum/6d2e82e5338220c1146ef5272a46e3776d0cdc35 create mode 100644 fuzz/corpora/bignum/6d784d6f643c46a9171a89cbb92660d3f07cc730 create mode 100644 fuzz/corpora/bignum/6d7bb5e6b3faddecf4e5ee7f29d62b3cdc19b0aa create mode 100644 fuzz/corpora/bignum/6d80a2304ddb46a4125974965e823908671f9519 create mode 100644 fuzz/corpora/bignum/6d8281844c9b2c5856646f67555125b43080733b create mode 100644 fuzz/corpora/bignum/6de0d4b21c1c02377fa39d5406e1fd0b817be116 create mode 100644 fuzz/corpora/bignum/6e1f49e6b62a03946dbe0952dd3bb8ca5b29fbd8 create mode 100644 fuzz/corpora/bignum/6e8aeafbca00a864e8090bfb94cbd538ec3c9e5f create mode 100644 fuzz/corpora/bignum/6eb325f0bacb345f2c1744b40039b81fd4688715 create mode 100644 fuzz/corpora/bignum/6edcc1cd67d84c1414a2ebe066ba222c14ec968e create mode 100644 fuzz/corpora/bignum/6f63081895b20cf0efe76f4cd5197c02b049c6fc create mode 100644 fuzz/corpora/bignum/70350969c13b733264d274d43f439e207c07d201 create mode 100644 fuzz/corpora/bignum/70c3b89ec0759e582e3b1a3b9fdb889c8fd087b9 create mode 100644 fuzz/corpora/bignum/70c904c86c1f179b461c860437901ecb3f4ca236 create mode 100644 fuzz/corpora/bignum/70df9026991e330667cca19dc9e830eb98c84d5f create mode 100644 fuzz/corpora/bignum/70e9796845eb455ad731716a387f62eac023a6c2 create mode 100644 fuzz/corpora/bignum/7116b5c8a72a6dcaba2fbec69e5314f611e3bfda create mode 100644 fuzz/corpora/bignum/712367b03ab9b5b2a4e940c6ee58a9970690aaa8 create mode 100644 fuzz/corpora/bignum/718a9c062dffa15aefc6a7104cf6ed9b52f5f4e4 create mode 100644 fuzz/corpora/bignum/71c64721abadfbcccd4b95a43748c3ca7dbe9626 create mode 100644 fuzz/corpora/bignum/71f86068e3b76d9489044f9c21b31710bac7e4e4 create mode 100644 fuzz/corpora/bignum/72283bdeea9e68d29a23e0ac1f13622a03aa5adb create mode 100644 fuzz/corpora/bignum/72a0d8870999f16c4c42bd01b66c296c6ff3adcb create mode 100644 fuzz/corpora/bignum/72b076b94e699e5316417aac856cfe3ac7418fbd create mode 100644 fuzz/corpora/bignum/72d1c7e3f642456b57b0d49cd78397a08d0428f1 create mode 100644 fuzz/corpora/bignum/731384a69468c94458e4306b7c7fe1a447f72c8d create mode 100644 fuzz/corpora/bignum/7343b5ea3134d50b0710dfce15f8064b892a3ba6 create mode 100644 fuzz/corpora/bignum/735bba7565e94dc82b6a949ac71be2c73c787b93 create mode 100644 fuzz/corpora/bignum/735d9b1fa219b190157f78c7e8849316f2e0254e create mode 100644 fuzz/corpora/bignum/739417dd4666b8ac82a7e2ba13ef20de74029c8b create mode 100644 fuzz/corpora/bignum/73972b7d320f97c02b2e20a8109151a0462e8875 create mode 100644 fuzz/corpora/bignum/73a1b7ba8a7ad42881226a587a3db5dbb30a4042 create mode 100644 fuzz/corpora/bignum/741ac128afab3dff880c1682dbe2da477f854e41 create mode 100644 fuzz/corpora/bignum/74591e0f0ca130871adb79d1e0f40863c2e8b65c create mode 100644 fuzz/corpora/bignum/7478083887e17c1e4851e5d369785657aafb0853 create mode 100644 fuzz/corpora/bignum/74870d66c54721f2b5c704241097597918709d3d create mode 100644 fuzz/corpora/bignum/7491924b3f71413f75124e5d149d028e8db13fb8 create mode 100644 fuzz/corpora/bignum/7604ea59fa493ac6ee2bd0442dafddd4e09087bd create mode 100644 fuzz/corpora/bignum/765baf81c7121731ba220215c3ef3fea4d2a7cbf create mode 100644 fuzz/corpora/bignum/7699281b13023f5cccf48d4a9bb9e263c68b94c2 create mode 100644 fuzz/corpora/bignum/76c679fef751503759197cca283165c50f0cfbe4 create mode 100644 fuzz/corpora/bignum/77009924388491dad67ff81b2ecf86c1ad21b6f4 create mode 100644 fuzz/corpora/bignum/7742401ef3d795f116a1b35e27484b4f7ae41c1b create mode 100644 fuzz/corpora/bignum/774ac6983f66fcebace58e305eae3de033113982 create mode 100644 fuzz/corpora/bignum/7762a474cf87d5c037c10c6b645e9ac3d3cfa394 create mode 100644 fuzz/corpora/bignum/77c6b91e90d5db99cec831b252bce938b6079799 create mode 100644 fuzz/corpora/bignum/783773a5bcb1e6a4dfdbb131010ac010b4a233b9 create mode 100644 fuzz/corpora/bignum/7961d28681e014b4ea1ce45cdcb2c3740d7c516d create mode 100644 fuzz/corpora/bignum/79921dcf20d14c789d969fd999e4075398063467 create mode 100644 fuzz/corpora/bignum/79c5443529579b7011fe643ced6492c3f719982b create mode 100644 fuzz/corpora/bignum/79dab809e3d75871e8c31601141978662116d43c create mode 100644 fuzz/corpora/bignum/79dcceba401ad6e22b8712749d40d2e427207122 create mode 100644 fuzz/corpora/bignum/79dea6ae4e59be9bba5918e6204b4d8b62259bbb create mode 100644 fuzz/corpora/bignum/79df0681f74ab45adc353e7e41bcd961d818486d create mode 100644 fuzz/corpora/bignum/79f1330dadbe4e139b309799c6c900749e2282bc create mode 100644 fuzz/corpora/bignum/7a0b6da388fd48b2c3e3be7a796f85599605d0f0 create mode 100644 fuzz/corpora/bignum/7a104f787a0115a8e6d40b31e83bbc89b8fb82ba create mode 100644 fuzz/corpora/bignum/7a5dde1a1dc70f5f4a6733eae91f261d3e32b434 create mode 100644 fuzz/corpora/bignum/7a7ab9564b9bb4c5302719caa5a5839be8120c45 create mode 100644 fuzz/corpora/bignum/7a8cba7c2faabbaf4b946d8a4e28a124ef6cac25 create mode 100644 fuzz/corpora/bignum/7ac7ab8a969eab4867a02827a322075c1d859738 create mode 100644 fuzz/corpora/bignum/7af973f04745d25ce958625270ced1128314f174 create mode 100644 fuzz/corpora/bignum/7b3ef329dad0a1e01efa45766af30f7bcd62129a create mode 100644 fuzz/corpora/bignum/7b42f25f8ea7a2d3288d0022cfc85b0b68842e04 create mode 100644 fuzz/corpora/bignum/7b885591d9ce6663397e025b400df2504b7551d5 create mode 100644 fuzz/corpora/bignum/7b9dafafeaacd9bc9340455d6f00a81a2257ce5a create mode 100644 fuzz/corpora/bignum/7bbb553afce8ee4a7a21e6f19c7185b118d93c01 create mode 100644 fuzz/corpora/bignum/7bfb263454cd63e33b0a38868d78381f0c19828e create mode 100644 fuzz/corpora/bignum/7c1f312bf4e264dbc5d7f22130f557c739342990 create mode 100644 fuzz/corpora/bignum/7c236cbfafa4a0c119f7754e1a68ccbe1ab92976 create mode 100644 fuzz/corpora/bignum/7c3bc7e2004be68a3a0f77dae62bf51df45e7d60 create mode 100644 fuzz/corpora/bignum/7ca7ac12d21207f09eb44c2683b4721d64df572f create mode 100644 fuzz/corpora/bignum/7d5f86cff2d0e95822cc7006f46880f4ea23eee0 create mode 100644 fuzz/corpora/bignum/7dab9380a0376267922943d127ae9c2be47be886 create mode 100644 fuzz/corpora/bignum/7dac784c8c238582e840ddd4478d74f9680b5219 create mode 100644 fuzz/corpora/bignum/7dec4eee24cea1abe82b4cb59f7136d444077b5d create mode 100644 fuzz/corpora/bignum/7df26fca829f64d145537f048e41939e7363161b create mode 100644 fuzz/corpora/bignum/7e3dbf30f5786e38bfa8f0524455c5d3e43657f7 create mode 100644 fuzz/corpora/bignum/7e83da9721539f7e370fb234f9cb633b120ebee6 create mode 100644 fuzz/corpora/bignum/7e85f1ae3df8abdeb1d5f8f635317c0774f13531 create mode 100644 fuzz/corpora/bignum/7e9fe12eb57a9ee47a91a1468a5236264b3c6280 create mode 100644 fuzz/corpora/bignum/7eb975cced17b2749462664047b94ac6dd15c270 create mode 100644 fuzz/corpora/bignum/7ed124b14d263f000c49d9efe651f9774f4fb5e4 create mode 100644 fuzz/corpora/bignum/7ede26fd50e6568249894b96b81968d0d6459b4b create mode 100644 fuzz/corpora/bignum/7edeafeb5ca3aba7a6f3f97713e3ea9317127142 create mode 100644 fuzz/corpora/bignum/7ee32e83ca1b49679d8bce2a30f6b67d66a92790 create mode 100644 fuzz/corpora/bignum/7efaf46174a91191fee2b972fc89b2b4cc4ec4b7 create mode 100644 fuzz/corpora/bignum/7f4de31456e400c809d8c934503643d6b3f8655f create mode 100644 fuzz/corpora/bignum/7f902e43471df029d523127a4fd62e614ffae551 create mode 100644 fuzz/corpora/bignum/7fa9e1d7eb3e6e23ef4a9519718b00904b32b73c create mode 100644 fuzz/corpora/bignum/8007314307e6723b7ee7953518625ab559ad3506 create mode 100644 fuzz/corpora/bignum/80184a2f30ef2ea7a64a1e183b70a0c845c04a1c create mode 100644 fuzz/corpora/bignum/806c42fa41c99efa85bf7fa6ad33c988bf5f1e8a create mode 100644 fuzz/corpora/bignum/8082dbfc4d46dcc604705391965c0be282c83ded create mode 100644 fuzz/corpora/bignum/809e6b7861681272c24a1219ab43f4b69d38ae4d create mode 100644 fuzz/corpora/bignum/80d67137e523dacf51d8b9379d0ec48c8e3e5225 create mode 100644 fuzz/corpora/bignum/81b8931ade20524ef441ef3d3295fb97d884695a create mode 100644 fuzz/corpora/bignum/81d29d520d82876e9e132d459b6f6fde469b9850 create mode 100644 fuzz/corpora/bignum/822ce58b4735642d26b0a30b9b43630ca734ad7c create mode 100644 fuzz/corpora/bignum/8257a6de581b17b7b5c88d4e0908de3e1fe18a78 create mode 100644 fuzz/corpora/bignum/8270b4ada6f1aff44c18bd88cb3f012888789f80 create mode 100644 fuzz/corpora/bignum/829a87b301fb1d563103d372bbc4e63208f414b2 create mode 100644 fuzz/corpora/bignum/82a199bafe3a5bd7a57d0c2e51d19663b40ced25 create mode 100644 fuzz/corpora/bignum/82d1f6c34c05f99890fd114b78e5e4fc094fbafc create mode 100644 fuzz/corpora/bignum/83188d985d73ec960ffe380b927988defb1a39ea create mode 100644 fuzz/corpora/bignum/832af06f483d21853a366a6e10c729ddf7416ee8 create mode 100644 fuzz/corpora/bignum/83477ae142e5ad220170d50e0f6cadd5634f411d create mode 100644 fuzz/corpora/bignum/83a7d5c85938727ae2680482e9d4ffa6d212ad9d create mode 100644 fuzz/corpora/bignum/83b2ad005f2e950a04183d643799673bf58d85d3 create mode 100644 fuzz/corpora/bignum/83bc4547e87f5e6e1157e2d3549365307b20d856 create mode 100644 fuzz/corpora/bignum/83cd0887cbef920c5ab083f5fd55f92910cf34ed create mode 100644 fuzz/corpora/bignum/83d1c8ff2293fdbf346922f57f2a14b4a3c16af8 create mode 100644 fuzz/corpora/bignum/83d4cd15dd28d1cd4371bba52e53d93b107fb732 create mode 100644 fuzz/corpora/bignum/843931b18f1938ea5dc0dec98b07fe0e9b5028db create mode 100644 fuzz/corpora/bignum/849fba0663e5a6353e5cc01af7b88ba786dcc9ad create mode 100644 fuzz/corpora/bignum/84e1aa52d7a736041adb5aa92d37d89fae0be927 create mode 100644 fuzz/corpora/bignum/84e9566974b175f2f959b865d0af11d8b3aaa536 create mode 100644 fuzz/corpora/bignum/853c85af13729fab19afcc82625196efbf864cfe create mode 100644 fuzz/corpora/bignum/85852da131e3e7f8c765a5a1d172499412558793 create mode 100644 fuzz/corpora/bignum/85930deca05f1ee6926d72d0ee4a2bb642c62c67 create mode 100644 fuzz/corpora/bignum/85a540ef04d79858d557edfeff247a69b068ef23 create mode 100644 fuzz/corpora/bignum/863dfd12a78cbc948d1cc1d73050c297e234dd35 create mode 100644 fuzz/corpora/bignum/86b6abfdbe036b0287f8a4729ab3fb3dd3191c8c create mode 100644 fuzz/corpora/bignum/86c1c36fcad07123771f7e04aea8224bdc690014 create mode 100644 fuzz/corpora/bignum/86fa73ddf7ea920e9890f42e89785102209f4314 create mode 100644 fuzz/corpora/bignum/873ba4a8a8fdd4275455d6c1d305ea673145c374 create mode 100644 fuzz/corpora/bignum/8768744173f2ef90d172cbbbecd017477c31be01 create mode 100644 fuzz/corpora/bignum/87d1ad944ac5408daf88ca8a06f5aac1309084c6 create mode 100644 fuzz/corpora/bignum/87e88889b7cba096cd0eb1a9181671075d3076f4 create mode 100644 fuzz/corpora/bignum/8814ea4e2a20fc587d33b0939a913f611df5f99c create mode 100644 fuzz/corpora/bignum/8840d62fa6701efb3e040208a60b50b1b8e2cac2 create mode 100644 fuzz/corpora/bignum/8853471ea2a038d2513614886173c201a06075c5 create mode 100644 fuzz/corpora/bignum/88b915afd750aa901aa6d0f5f982619206306f9f create mode 100644 fuzz/corpora/bignum/893b88930ec19be22c561da9979eae4420fc28ef create mode 100644 fuzz/corpora/bignum/895cd00606c91b3adf94c16fe7f8bc9609ee8d21 create mode 100644 fuzz/corpora/bignum/89af206567ace6c97db2055d8076ffd3b15085c4 create mode 100644 fuzz/corpora/bignum/8aae679ba6232efe2d1e3d0848d09101a09106d7 create mode 100644 fuzz/corpora/bignum/8aedcfdf5aae05a9a8e003efd2d2ff23de86fb9d create mode 100644 fuzz/corpora/bignum/8b29c9c85b8c7cc8e5316a8c24560941fd8be71b create mode 100644 fuzz/corpora/bignum/8b4fc51f902257883b2b7df0cbee2fc73b887567 create mode 100644 fuzz/corpora/bignum/8b99ac339bc1f0d913a7d6800f205d174a51460f create mode 100644 fuzz/corpora/bignum/8be9de8ac1e6c9dcf4fd9ea0269200d98ea6fe30 create mode 100644 fuzz/corpora/bignum/8c06be1c0c120507af1b264d72f184510a0079af create mode 100644 fuzz/corpora/bignum/8c2f38d827889a408fddd7ba6c3732fa8e3035b1 create mode 100644 fuzz/corpora/bignum/8ce348fd4edda47f19c5c7ecfccccf2c5b99ffb2 create mode 100644 fuzz/corpora/bignum/8d195b90e680901ada91761a5469b1be72554d76 create mode 100644 fuzz/corpora/bignum/8d212aaf7ceb34d7917dbc50638ab8bf9d5c1880 create mode 100644 fuzz/corpora/bignum/8d2ed0e5bc0613ce4bd945200af90dcd1c38a3f4 create mode 100644 fuzz/corpora/bignum/8d313217b68609292a0e737a631d8d9e684a277f create mode 100644 fuzz/corpora/bignum/8d3a0167ff8dcdeed93614e5ba48d92a8872ec60 create mode 100644 fuzz/corpora/bignum/8d66da70823090c8f7663f116a4f949fde20eebf create mode 100644 fuzz/corpora/bignum/8d773f8c39f375c7e7ff9c362f13536ae96ea5de create mode 100644 fuzz/corpora/bignum/8dde0490957a6d583f8aa9e9d0a60156b7080923 create mode 100644 fuzz/corpora/bignum/8e21eba895d8638f98e358a2b7008cc14efedcd4 create mode 100644 fuzz/corpora/bignum/8e26db259964581c624970318265c8a0acfd50c1 create mode 100644 fuzz/corpora/bignum/8eb0c38864327b88abf519473814cf553e3d9283 create mode 100644 fuzz/corpora/bignum/8eb81120f9fd00737a41b97f39606eabbc96ff01 create mode 100644 fuzz/corpora/bignum/8eddaf49dc253fe34cd8e2d5d08ae808759430fa create mode 100644 fuzz/corpora/bignum/8eee7ef03bfd809a262da32104df490626766fe2 create mode 100644 fuzz/corpora/bignum/8efb43876a5726ff939ab42bfe22df27f7b3f6ed create mode 100644 fuzz/corpora/bignum/8fb9a2610a3c8c667c7da72fe00454e3e9cb787c create mode 100644 fuzz/corpora/bignum/8fda1700d59460907a56d99ab1751b629cd77379 create mode 100644 fuzz/corpora/bignum/902023fea6e57b1af304b39888d80bb41b94b60b create mode 100644 fuzz/corpora/bignum/9052b6e33a0ccff7be2b40a8eb4f07a5a2dd5ce4 create mode 100644 fuzz/corpora/bignum/908481f051db1ee6b6cce8550da7b614aa89b918 create mode 100644 fuzz/corpora/bignum/908c885d387b7a2db3cb339a79f13d83e80d3b32 create mode 100644 fuzz/corpora/bignum/909b89c5d375fe2176052491bd1ab5ca1674fe02 create mode 100644 fuzz/corpora/bignum/90a6488cf900b0865f166e4930b89c26812854b3 create mode 100644 fuzz/corpora/bignum/90acc10136ea34c75b0a82438b2ba8b7b333885a create mode 100644 fuzz/corpora/bignum/90b0cb75ec8d2171a2df93f91095d18243d12f4b create mode 100644 fuzz/corpora/bignum/90c05b0d85c3521a89727b4676f4815ebeb41ffb create mode 100644 fuzz/corpora/bignum/911ee38b6169c1bec250eae70db36b6a75c9c162 create mode 100644 fuzz/corpora/bignum/91525983687c26a4d3a82a63c57094e68b1f56d0 create mode 100644 fuzz/corpora/bignum/916139215b525bbcf9d32ac9a48c10fd3b12c10a create mode 100644 fuzz/corpora/bignum/919c6e19de9903ad4bb2d531d23d3125e1f45de1 create mode 100644 fuzz/corpora/bignum/91c3132b10fedc0b84d3e217269387a20cd42c25 create mode 100644 fuzz/corpora/bignum/91ed094bf03be9cec438bebf99eef54c3d6abbc2 create mode 100644 fuzz/corpora/bignum/9201d402ec28edd10b7ea7f1971cdb4a790b2a86 create mode 100644 fuzz/corpora/bignum/920861efbffda6de686ed60111e17f7eef31b072 create mode 100644 fuzz/corpora/bignum/926b20e430452d02eccad23a3a176d6ae088603c create mode 100644 fuzz/corpora/bignum/92985491440282a70ab6dba17b1bcde877a61d53 create mode 100644 fuzz/corpora/bignum/92ae779adedb85e3e2a2a533d02196dab595d199 create mode 100644 fuzz/corpora/bignum/932d2a8db66d5270fc8b46fa91923b9a837c2cf5 create mode 100644 fuzz/corpora/bignum/934fb49b8efd3ae337d826e33893773073b37c21 create mode 100644 fuzz/corpora/bignum/940216910f81dcb31826c09666c439b46b719189 create mode 100644 fuzz/corpora/bignum/9408960497377a35fc33c0a5cd2cd15f88aec504 create mode 100644 fuzz/corpora/bignum/94552a6cf5b552ed6434646aae29bfb254816a59 create mode 100644 fuzz/corpora/bignum/9459156e4e27a7bd59a2522d00307daa1d41df0e create mode 100644 fuzz/corpora/bignum/946faf3eccc25ea0d45c0c037ef7a5aa977f0935 create mode 100644 fuzz/corpora/bignum/9498cad323a6f8cde8d819db742d5ccac2d180f1 create mode 100644 fuzz/corpora/bignum/94b5b6c8d01fc70e46e7695dc01f0fec27ffa9e9 create mode 100644 fuzz/corpora/bignum/94df162ed6ab63db9dae1ef7bd4f9f0d3834e9ed create mode 100644 fuzz/corpora/bignum/94e63e2f7e045cbed008659d7fd6615689eeb987 create mode 100644 fuzz/corpora/bignum/94ea0a82f549b329d40542f00f5b9eeeb1e6426b create mode 100644 fuzz/corpora/bignum/94f214a9fe4c54d034243f1f8ae8a4e9c951cdeb create mode 100644 fuzz/corpora/bignum/95167908884dcb36fd5c34a27a0a624dca647a29 create mode 100644 fuzz/corpora/bignum/954dae57d62fe22cc8b568f9b4cd7a56b5d2f2db create mode 100644 fuzz/corpora/bignum/95548c20388bd24929ca21191c957d7c82dcc83e create mode 100644 fuzz/corpora/bignum/95b0092a9859b00678f3baf43707ddbee0d0f8b1 create mode 100644 fuzz/corpora/bignum/95d6ae05575eafc7593ab6280fa5b9aef033928a create mode 100644 fuzz/corpora/bignum/95e9f55396538513054db1c9900df3b4fd2e1f83 create mode 100644 fuzz/corpora/bignum/962c30626d2b3812a70542da06d5a7f331b3f7a3 create mode 100644 fuzz/corpora/bignum/9637a6c518d93aeb720b1065d2c83cc7120563ce create mode 100644 fuzz/corpora/bignum/964db13a8d4aadb14f05ff3fcdaf1d5776ba2c9d create mode 100644 fuzz/corpora/bignum/96ebafed845d7872dcf379376ab8f6985ac2375f create mode 100644 fuzz/corpora/bignum/96f0423fdfdb9be6ccb8f4dfeb892e6411231292 create mode 100644 fuzz/corpora/bignum/9746b00baedf5052e44bca5befc09dcd9e85128b create mode 100644 fuzz/corpora/bignum/9754200efc1b336be91dd7dedeb53b9e995215dd create mode 100644 fuzz/corpora/bignum/979f253aac48fd41a62aef399f08762de6ca8f32 create mode 100644 fuzz/corpora/bignum/97fa67b44c281b8162073b911607e78c77d69c88 create mode 100644 fuzz/corpora/bignum/980750d9abf4fe584e796173ce071cb13e9a7366 create mode 100644 fuzz/corpora/bignum/98745e644d09a0432b28def1097c5dbb70272a12 create mode 100644 fuzz/corpora/bignum/98dda4b7945f5db00303116ef9afc7628d31ad3e create mode 100644 fuzz/corpora/bignum/99504fc59a4761e200ca788f94ee0942d6ebe256 create mode 100644 fuzz/corpora/bignum/99530606d38f6fe82e55fb7f9ba21cebd0ec8698 create mode 100644 fuzz/corpora/bignum/998ce16fb69af958eb1eed7333334963e18b5d77 create mode 100644 fuzz/corpora/bignum/99c2b5b4e5f79275a8db9c47018dd449ca9e10fd create mode 100644 fuzz/corpora/bignum/9a57d9886b8af128893217c775c975c795dd917a create mode 100644 fuzz/corpora/bignum/9a86ab5aac7ad3ec9ac240c5e4953d3a90d73029 create mode 100644 fuzz/corpora/bignum/9ac78e4381752e7d5380f4604c39926a70b21ea9 create mode 100644 fuzz/corpora/bignum/9b5336c1fde197695591aa3cbc3d556c64da360b create mode 100644 fuzz/corpora/bignum/9c24c04ec88151e850acc05c50fd1d8d32dcf40e create mode 100644 fuzz/corpora/bignum/9c56e4cc96712d8ead9aa1215e73281eb87bb3c8 create mode 100644 fuzz/corpora/bignum/9c6a1bea49f3471825b414f1346ae6a7c89975c2 create mode 100644 fuzz/corpora/bignum/9cae30dd277f7081566f85abb7e68f6c5246f560 create mode 100644 fuzz/corpora/bignum/9cb513881c4fcd725c8ceb71901d4990d5fc1e26 create mode 100644 fuzz/corpora/bignum/9e1c0583543d8f5d2b320657c4ed06abedb2aa85 create mode 100644 fuzz/corpora/bignum/9e963aacd70eaa76bef42aeee2345f9417406dd9 create mode 100644 fuzz/corpora/bignum/9ed1cf674fdc651214ff50b8b48d4bdb7485f6ac create mode 100644 fuzz/corpora/bignum/9f29f7eeaa960e87cc27f5fd7e0f62c8c7cf07fd create mode 100644 fuzz/corpora/bignum/9f3b0f6cc16f4750185dce3d509dd9f6f8065ea8 create mode 100644 fuzz/corpora/bignum/9f4b185be4eb50b19546c1b3f41f868ac9b0a9d5 create mode 100644 fuzz/corpora/bignum/9f4c49546b3e1ab6da09442ac4a1a3e374463dee create mode 100644 fuzz/corpora/bignum/9f54d951ee79f4bef9ab95c4db3480b9aeab72bb create mode 100644 fuzz/corpora/bignum/9f57b82f85ba3d7c9665de58247e0def9b7d806b create mode 100644 fuzz/corpora/bignum/9f79313ec65656cc1e811f1c0739e0cfb0bb18b7 create mode 100644 fuzz/corpora/bignum/9fa2ce42d1cadfc0783abf9f64cbb000a2f3e5f1 create mode 100644 fuzz/corpora/bignum/9fa4c96279b761470466b73db844da2713ad718f create mode 100644 fuzz/corpora/bignum/a045b856ae23022f6018b59a10a3a1f37a2728fd create mode 100644 fuzz/corpora/bignum/a04d338c103ff7a338c9dd65a6bc95596e0a7aaa create mode 100644 fuzz/corpora/bignum/a0513349285f60df2ca366d242fb43114c07a7e9 create mode 100644 fuzz/corpora/bignum/a0861dfb249518ce15e41b913f4bdd0a9578f37f create mode 100644 fuzz/corpora/bignum/a0e552c5909d975a5bc7cf5d9f413685cbb1ebef create mode 100644 fuzz/corpora/bignum/a10d104de831b8212a7a98c610abf9a278d7e202 create mode 100644 fuzz/corpora/bignum/a1e3a282f2c735fae3a0525fa43ba49245421787 create mode 100644 fuzz/corpora/bignum/a1e66e88878941b838b0da12c7913b8f0965bd43 create mode 100644 fuzz/corpora/bignum/a2032bbecc5c31be728b443cedc413f660d411d4 create mode 100644 fuzz/corpora/bignum/a2078553be0e0b0c1ef1009676d48886a7adf7df create mode 100644 fuzz/corpora/bignum/a22686b39e66ed08ca665e5dc81b3d12099c22b4 create mode 100644 fuzz/corpora/bignum/a258e6c45be522b652db80c00a56f2495eef4fde create mode 100644 fuzz/corpora/bignum/a27076a91b42bf16b8a7775b1fc8b8db3c887e41 create mode 100644 fuzz/corpora/bignum/a280d2c812778f6cc8929f59b6cab6a0e4816313 create mode 100644 fuzz/corpora/bignum/a3370bcd4d9fa898339f5ef917794ea74a72ed51 create mode 100644 fuzz/corpora/bignum/a37a61a36ab5ffe56b00a6ca53f6a1a215149760 create mode 100644 fuzz/corpora/bignum/a39a5596dc2a6e19bd886b868324fd6bd7f7f923 create mode 100644 fuzz/corpora/bignum/a3b09cbf4bd466d39041cebaceb641a44446b8f8 create mode 100644 fuzz/corpora/bignum/a3ba940ad968ef20bbe9d4ca93f5c70af06a83f7 create mode 100644 fuzz/corpora/bignum/a3bb71f82820719d2028dd49fee9b5fdd864f42f create mode 100644 fuzz/corpora/bignum/a3e36680111036b8cb9c97005583ebdceb90a158 create mode 100644 fuzz/corpora/bignum/a4736d24cda24819e998d55ec6730180893a7324 create mode 100644 fuzz/corpora/bignum/a47f3ec49eee47ddde4ce0e6fb3e71972f804cb7 create mode 100644 fuzz/corpora/bignum/a4e2f17404db168144ef5e17d4cbfee9b12e2879 create mode 100644 fuzz/corpora/bignum/a4f4f83d6ea91f34617504824a2fc783744491cc create mode 100644 fuzz/corpora/bignum/a5c7c760406ad803dd04a47dc458f911d6a5713a create mode 100644 fuzz/corpora/bignum/a620a20ff8ed33aa9ec3f02d33811b9bcec085b4 create mode 100644 fuzz/corpora/bignum/a62993d62ad44a7850e201dbf8d9363dd20acf76 create mode 100644 fuzz/corpora/bignum/a63ed127762ab71bf59da8f0baecb9960f2a1c6e create mode 100644 fuzz/corpora/bignum/a67e8d9a79fe7b91fa7646f41b2a01487ecc191d create mode 100644 fuzz/corpora/bignum/a6be63522b1cd53ae7a1fa1908fcb07523555761 create mode 100644 fuzz/corpora/bignum/a6d188843d75324b6e726213d7378932923d12f2 create mode 100644 fuzz/corpora/bignum/a6d22d1c4cd86d0e4ffc72f7d61addf7b32c9359 create mode 100644 fuzz/corpora/bignum/a6f3d0391b71d5ab0a319c0aa3a2c7f15bdac2f1 create mode 100644 fuzz/corpora/bignum/a6ff81548968999c2630e13b8fd6944fc0cf4def create mode 100644 fuzz/corpora/bignum/a77c756752d1c55df286c376f7ca6e9fde86c158 create mode 100644 fuzz/corpora/bignum/a8889f7fb7f241b50530a50d029e7fc595427198 create mode 100644 fuzz/corpora/bignum/a8ce318c0b17beb3d4b27e667a912c2be85374c3 create mode 100644 fuzz/corpora/bignum/a8f672487e1678a377ebe4010fda912dbdf81134 create mode 100644 fuzz/corpora/bignum/a90afdf8ffcc946a9b8ac6a9880f9cf06d190538 create mode 100644 fuzz/corpora/bignum/a96b53486c03c44338caec4c7fe7f64b36880d27 create mode 100644 fuzz/corpora/bignum/a9968c7c9658ec720b7f91a6321d0ab1fcd57ac5 create mode 100644 fuzz/corpora/bignum/a9bed4bb439e5d2344518d5606a9692b7cccc20d create mode 100644 fuzz/corpora/bignum/aa232f04307a644849d083f67139748b2e1c2078 create mode 100644 fuzz/corpora/bignum/aa9bff38dc30809ab3e5a3ca6aa49c68040f37ff create mode 100644 fuzz/corpora/bignum/aaae5ba21a378f6635701fd698b24fbd2d74b372 create mode 100644 fuzz/corpora/bignum/aaed52bafe1f3295ff77fdb285894de6f3087630 create mode 100644 fuzz/corpora/bignum/aaef94681408c00e95dcf77642697f7512ee4a26 create mode 100644 fuzz/corpora/bignum/ab0ec4af7b7ef8e899315185a1ecca245a8bc7ae create mode 100644 fuzz/corpora/bignum/ab7b5b1e75083387ef835bd4252a85a84b8eec34 create mode 100644 fuzz/corpora/bignum/abbfb76ed295504bb3fb0eee898cae4f7ab8546a create mode 100644 fuzz/corpora/bignum/abc46e2760860a9b27cb0f33a605b2cf59c8f315 create mode 100644 fuzz/corpora/bignum/ac0371f5a1ca82d50551ee022ced2cfdad4c7ce8 create mode 100644 fuzz/corpora/bignum/ac13e17354f5bba6691a66a796038ae543fdce86 create mode 100644 fuzz/corpora/bignum/aca3063b46b9d5dc485b63a3037d885473fdc26c create mode 100644 fuzz/corpora/bignum/acc96f7b3bd448174e35dc696796659b48213dc2 create mode 100644 fuzz/corpora/bignum/acfb4268e6f3339911f482a89f14fecfcbccf8e8 create mode 100644 fuzz/corpora/bignum/acfc2ca2569ad87c19e15b26d899330a6a323494 create mode 100644 fuzz/corpora/bignum/adaa6665ce0a186fd92f3e4331e29122cf7ab5f8 create mode 100644 fuzz/corpora/bignum/ae3fba9aa89d45e1c54bbe9cad1bfeb072e16b88 create mode 100644 fuzz/corpora/bignum/ae520b556668d003beae5588a270069d3d860674 create mode 100644 fuzz/corpora/bignum/ae67c44e2ca66a11cce0610e59e4f49dc5623847 create mode 100644 fuzz/corpora/bignum/ae8e48a37d16fdb04364c639681f966d78b30fd4 create mode 100644 fuzz/corpora/bignum/aeaaa0983ecc1d76881e2d79f54cce9e909c6201 create mode 100644 fuzz/corpora/bignum/af17e859c517771ac0d0c7eacba5ff29bfcebdc9 create mode 100644 fuzz/corpora/bignum/afb4365979079272a0052ab6e5344da764c3796d create mode 100644 fuzz/corpora/bignum/afca1d87339c759a65a87f62e0538469327b8a28 create mode 100644 fuzz/corpora/bignum/b015bd5adb8df8f3cce0b979ce0ca6255cd203a8 create mode 100644 fuzz/corpora/bignum/b01a2d92b580d7e84169f371e236086c204403d6 create mode 100644 fuzz/corpora/bignum/b07b4468374e13c1d45c379e5b15c8ff4f13c083 create mode 100644 fuzz/corpora/bignum/b0cb51a586e2b92cc1efca8aa50e096268feafbd create mode 100644 fuzz/corpora/bignum/b0cc90631979532ecf7a60517bfe40bea9677311 create mode 100644 fuzz/corpora/bignum/b1088b7b8cd045631b062fa2901eb7c798cad32c create mode 100644 fuzz/corpora/bignum/b14357117e5979ce476c3da41ad0664b1a9f752d create mode 100644 fuzz/corpora/bignum/b15821295a3b68835b1e5c6a67f6856049e8ea01 create mode 100644 fuzz/corpora/bignum/b165040b54ee8a58c0c7512e6d74f7d851d6d2e5 create mode 100644 fuzz/corpora/bignum/b203ec6ffd4af0172de0c36718c5712c9c7560e2 create mode 100644 fuzz/corpora/bignum/b2311f1e57ec524b6f9bb788dd40c3e73a717bd9 create mode 100644 fuzz/corpora/bignum/b25973397c5f92a6ceec3752cc591fcc937e5ba0 create mode 100644 fuzz/corpora/bignum/b26d282dd3f19cf0e7117acc6c872b383ac5edb4 create mode 100644 fuzz/corpora/bignum/b29e6e95f3f0a0f27b8c8b9c9a1a9da317a99a5d create mode 100644 fuzz/corpora/bignum/b2c9dc498559f41ed7cefce8d6afb801acdad78c create mode 100644 fuzz/corpora/bignum/b38c174dc663a5f8279374578a6aac90da6ff99b create mode 100644 fuzz/corpora/bignum/b3ca8d789e96c027256f820c1aff10528e509059 create mode 100644 fuzz/corpora/bignum/b4217fc786c4fab1657a72c4a91a083faa6d828c create mode 100644 fuzz/corpora/bignum/b44e8e9fc2873177da968a5948848fa2a34951ab create mode 100644 fuzz/corpora/bignum/b4c2743b21af0c1ef9fa11bedef5cefe2fadd846 create mode 100644 fuzz/corpora/bignum/b4f1de4afd80fbbbca2ef216ab49cc5fef493f10 create mode 100644 fuzz/corpora/bignum/b50855b968dd50d4c4821e0b65b2d4c89819ed9c create mode 100644 fuzz/corpora/bignum/b50f2d5535ea6f80a010534b8f54ca6a13a71bd5 create mode 100644 fuzz/corpora/bignum/b5489258c78732144f8a8f01aaa342566f1498f8 create mode 100644 fuzz/corpora/bignum/b61027c382dc799042d32ebc2d7b704dc84da22c create mode 100644 fuzz/corpora/bignum/b650a2a1be999019ebb348f29bf77415d70f27e8 create mode 100644 fuzz/corpora/bignum/b6695f3a98bc4a93b61bbc65e5c1ac8709fec690 create mode 100644 fuzz/corpora/bignum/b66b38ab43c28589a4e71fc53b0424e17a369aba create mode 100644 fuzz/corpora/bignum/b67c62b920a2c6dfae903736240bc017191edbed create mode 100644 fuzz/corpora/bignum/b6adc1a0356017bcacb2b664c2083f98ef2688d4 create mode 100644 fuzz/corpora/bignum/b6fe4a707ce5e6596596306284ae02c6ac26a532 create mode 100644 fuzz/corpora/bignum/b75d42fc086ab992bcf74e2fdcb38469b7381e47 create mode 100644 fuzz/corpora/bignum/b771318805bd5b870fb717cd36edc597c22e39b1 create mode 100644 fuzz/corpora/bignum/b7e06d2d3f55beaf6ecaa53cd8458e5d9ab57b0f create mode 100644 fuzz/corpora/bignum/b806e3f9e9f1a03b00e2088e352fbcdaac75b913 create mode 100644 fuzz/corpora/bignum/b82af8fd1b3e0f6a02caa6075c331dc35e842322 create mode 100644 fuzz/corpora/bignum/b82ba7a5d5192bde5941db09f9b1ea1f44282466 create mode 100644 fuzz/corpora/bignum/b84bd9aed14a251bc340637bd861d376e29059fd create mode 100644 fuzz/corpora/bignum/b8adc24897b36404f53076a6cd2733b766be13c0 create mode 100644 fuzz/corpora/bignum/b94496052988372d51e0ce4ae6064c2a70753d9e create mode 100644 fuzz/corpora/bignum/b9649715c19069a2e1b3e8e1a7478feb402d141a create mode 100644 fuzz/corpora/bignum/b96610f47a05273d282bde219def415556a5336a create mode 100644 fuzz/corpora/bignum/b976864069e7ca1398223c60d734ea1ab53c7f13 create mode 100644 fuzz/corpora/bignum/b9bed031c6e2bb91bb1bf743d2cd484eef351cf6 create mode 100644 fuzz/corpora/bignum/b9de9df342f37a0d1d50b4329470c8920626333d create mode 100644 fuzz/corpora/bignum/b9f0a4a7eb71f7e2dca960e3082893111ae9488b create mode 100644 fuzz/corpora/bignum/ba3273910f465dd2acd8cef785d2176539133d7e create mode 100644 fuzz/corpora/bignum/ba3865f4b4d920a22c436d921e59a286d3abd6d3 create mode 100644 fuzz/corpora/bignum/ba6cb35e9ce6bad3bb711c54f398b507c3471965 create mode 100644 fuzz/corpora/bignum/ba76c84c59574475451bc81256c3de91f03d6a87 create mode 100644 fuzz/corpora/bignum/ba919b5881e5a74c582a1c6c01d2db5cae03a48d create mode 100644 fuzz/corpora/bignum/bb097d04473008fc91add65bee472f07cc782046 create mode 100644 fuzz/corpora/bignum/bb32a902235b0de98db7d126863ae5c15f4d424a create mode 100644 fuzz/corpora/bignum/bb33acdd01b0fa9a07208528ee157ace4feec1bd create mode 100644 fuzz/corpora/bignum/bb5d03c6c662f20e8e9a6bfadbc09b202bbe0c45 create mode 100644 fuzz/corpora/bignum/bb74dd55a5524d7ba35a3c3f3d30c29d29acab60 create mode 100644 fuzz/corpora/bignum/bbb43034048f648b15fa045aa6af54db1ad7e6bf create mode 100644 fuzz/corpora/bignum/bbdf196f92db4360a5cc17919bae65c5067036b8 create mode 100644 fuzz/corpora/bignum/bbe59171082a9a76311a292bcf2966cfcbc04b56 create mode 100644 fuzz/corpora/bignum/bc1791e9df6f8ad09b1d073cc461a43dc299af46 create mode 100644 fuzz/corpora/bignum/bcfe0096eb81abfaac040dc02b43d003dd451dbf create mode 100644 fuzz/corpora/bignum/bd1d74c27793973da701de6b535acac15a64be8a create mode 100644 fuzz/corpora/bignum/bd61f311331aa9b95de14fcd1e6f0a2e0dafa70f create mode 100644 fuzz/corpora/bignum/bd78d26e0b23876b5ff33528191d20f578edcbed create mode 100644 fuzz/corpora/bignum/be26cd734419b4889072c3fa64305be3d459adc3 create mode 100644 fuzz/corpora/bignum/be47df5cda6bb41872ee195f6c99201dc4d2c094 create mode 100644 fuzz/corpora/bignum/beb3a10b24cf84587b3e735d4b1ac4486fd94eb9 create mode 100644 fuzz/corpora/bignum/bef40ad6b818dc4592f716bb4b30fab1387858cb create mode 100644 fuzz/corpora/bignum/bfb6550aaf17f1379660d0a8989031878e225498 create mode 100644 fuzz/corpora/bignum/bfe7e6086b0f9b7f0be8e5e8233ba4bb774e04e8 create mode 100644 fuzz/corpora/bignum/bffc7966574e8893763d80ef526f9ec5b4a819ff create mode 100644 fuzz/corpora/bignum/c02a3725bbacc2424c984548570d4ef6f6a6de4a create mode 100644 fuzz/corpora/bignum/c04435fac55ece02ead586bf38d87fba3e66159f create mode 100644 fuzz/corpora/bignum/c0949dbdebe485b19917f0c37d4a19f8000994f9 create mode 100644 fuzz/corpora/bignum/c0c65a6927f5f9300ec7c41d02a48349f944eb89 create mode 100644 fuzz/corpora/bignum/c13441e813c0371804b3249ee79ca256263998a0 create mode 100644 fuzz/corpora/bignum/c16ee237d0dc15a7fb5e2d4371934b576be7ce88 create mode 100644 fuzz/corpora/bignum/c176812305674a20436fd14a22e39a20ac414158 create mode 100644 fuzz/corpora/bignum/c17b15e0f74cc5fe557569841331e6554f6a5412 create mode 100644 fuzz/corpora/bignum/c188e11fe5c66709ac7dfe610b0f15aaccb8fa92 create mode 100644 fuzz/corpora/bignum/c1e58e966f00dfdcdb1585f92654eb361d406997 create mode 100644 fuzz/corpora/bignum/c1fa47d38fb16123777c0df7b65f4a3757449804 create mode 100644 fuzz/corpora/bignum/c24ab80df7d5ab52c0a91bc77b48bb07229a2886 create mode 100644 fuzz/corpora/bignum/c273305a97c73e0eddf416abc0dfdf99c9bcf815 create mode 100644 fuzz/corpora/bignum/c2beaf4fb74a9e43c8b5256f92b921fdb780547c create mode 100644 fuzz/corpora/bignum/c307e364c04b858f1920e02afe00cd81a76af1ed create mode 100644 fuzz/corpora/bignum/c30a1479b7d846b2d4b81146186a125be4a1bc29 create mode 100644 fuzz/corpora/bignum/c32cc7c0432566ab59c8f48abd725cd8c07e77ae create mode 100644 fuzz/corpora/bignum/c41d8374667d32ff24fd4cdde499908e51667de9 create mode 100644 fuzz/corpora/bignum/c44830130766ba8b54fe286b821eb592ec7b4146 create mode 100644 fuzz/corpora/bignum/c4ce0bfb48a5543120795cbf2e5f325849f6af10 create mode 100644 fuzz/corpora/bignum/c4dd3b9289ab1a4873e0d1d9462edf70963a01d8 create mode 100644 fuzz/corpora/bignum/c5cf0127802e0963ba05bbaf85060561855b691b create mode 100644 fuzz/corpora/bignum/c65bb211056eb0a089e5f3df091208835887d282 create mode 100644 fuzz/corpora/bignum/c692549bedbca78734f7becba84c7ec2d8ab5bff create mode 100644 fuzz/corpora/bignum/c6c310747200306874de49757bd3fd3b61947627 create mode 100644 fuzz/corpora/bignum/c700a28b425a3f008a2a188161c831959dd18cb1 create mode 100644 fuzz/corpora/bignum/c70f96df03f6c124154887fd5da716ba7a86fb63 create mode 100644 fuzz/corpora/bignum/c83d10a7550e6956776f4c9b68379c4aeca67df8 create mode 100644 fuzz/corpora/bignum/c8cf26c84fdd20a2a879fed97a0aa0aaae3b08ab create mode 100644 fuzz/corpora/bignum/c8e28322d6912546e409f70676753b7b619173a5 create mode 100644 fuzz/corpora/bignum/c8f587e9f75c59b693e48e5d9ceb7b715e5fd99f create mode 100644 fuzz/corpora/bignum/c919ca664abe52d1de2832b2b4fddfd21773738f create mode 100644 fuzz/corpora/bignum/c9252d4ffa30d1a01e3eb8bcfdb14e29c87f6051 create mode 100644 fuzz/corpora/bignum/c926f200c6795bec07fe9074e020d2e0c81ea5f1 create mode 100644 fuzz/corpora/bignum/c97f8a9c0e72c013ec5759fdfa9e8a7c93e54281 create mode 100644 fuzz/corpora/bignum/c99a8c77e84235aa2a1d146abb3ec5f490c9d882 create mode 100644 fuzz/corpora/bignum/c9f696b983ad40f7c9fd7164ce093048b10f5b37 create mode 100644 fuzz/corpora/bignum/caec3e312cf9d920f67f5d664d3f983638b63817 create mode 100644 fuzz/corpora/bignum/cafe64440a70a77e6f4616e501a28f4a1b8dd47a create mode 100644 fuzz/corpora/bignum/cb3fc3b1372259f50a5bf907a46c34f27deadc8e create mode 100644 fuzz/corpora/bignum/cb77056fedf427f8b60cab2c4a9355391687fb08 create mode 100644 fuzz/corpora/bignum/cba4e08b9436a1280defda53ced034026c4630c5 create mode 100644 fuzz/corpora/bignum/cbaa953ad1ba92a0d10d80f926139d50d3dc4c45 create mode 100644 fuzz/corpora/bignum/cc717a28af9f62f65096aa9908b0464c5fa966e8 create mode 100644 fuzz/corpora/bignum/cc914196da999c5525325649ac9eb8a90b536acb create mode 100644 fuzz/corpora/bignum/ccedf262a96788c6f89816050f9c8e7fa1bf2b67 create mode 100644 fuzz/corpora/bignum/cd5b607b083cbf7315289362169770c06c5e4160 create mode 100644 fuzz/corpora/bignum/cd9575b637a1826db4279d159a085ebbbaed60d4 create mode 100644 fuzz/corpora/bignum/cdec6e5e535f34bd6a598648c713c6a70c8c3ca9 create mode 100644 fuzz/corpora/bignum/ce12ef3eda80d7c82aa6e2fa9cf51b70b957b209 create mode 100644 fuzz/corpora/bignum/ce18a3bb70771f160776dbab147baba7b68cbb19 create mode 100644 fuzz/corpora/bignum/ce7309d8822b70312336073e19f2408b756e0f3a create mode 100644 fuzz/corpora/bignum/ce762b0b09c4df1e6860703dd381abcdcb6bb77e create mode 100644 fuzz/corpora/bignum/ce76d4e6a0debdc58223b98baa90674bb949052e create mode 100644 fuzz/corpora/bignum/cea37f32ef6a586af884adfea24064fbb944a65a create mode 100644 fuzz/corpora/bignum/cea8bfadb412ce45be0fa4c7eb41db9b367d9507 create mode 100644 fuzz/corpora/bignum/cf15bc8a1feba9f07f131cbb4870f5cda5faca6c create mode 100644 fuzz/corpora/bignum/cf2880716db8ffd1b3e33e39d67caf4aac8bad75 create mode 100644 fuzz/corpora/bignum/cfa6fe68f29f4452a39d6db568615ad051dab7c8 create mode 100644 fuzz/corpora/bignum/cfb3d610b96531ad745eb6ed218298efe3a17f17 create mode 100644 fuzz/corpora/bignum/cff8cac33e9b520a4d13baf201b02fb1999f141c create mode 100644 fuzz/corpora/bignum/d0f59d35916998b12167a94d801ef19f4ed8ebce create mode 100644 fuzz/corpora/bignum/d0f78b088f23aeec7727dfb7c3d05a968cdf4d59 create mode 100644 fuzz/corpora/bignum/d1167494a0d4099ee37bb4918f021fad42b64b45 create mode 100644 fuzz/corpora/bignum/d198dffb9459b7b7a7b38559c3bcfef77d2c4208 create mode 100644 fuzz/corpora/bignum/d1b18d239e8c05e2d04a7aa6a1c83a9c74213ba3 create mode 100644 fuzz/corpora/bignum/d1b98f3ec28892fa45c340ec2661013f40b09818 create mode 100644 fuzz/corpora/bignum/d1e8272b090506aef342038475c8e74c93784d22 create mode 100644 fuzz/corpora/bignum/d24dd2e018bb141e47bedb7428399cf32b5305b5 create mode 100644 fuzz/corpora/bignum/d2fe57453e81ff96d419e1756d9dc703273a91f3 create mode 100644 fuzz/corpora/bignum/d333804de3ce5230c4fa7c66b6eac6a21e15e097 create mode 100644 fuzz/corpora/bignum/d33cdca52e9757af11c7beff8a64eb40017bb202 create mode 100644 fuzz/corpora/bignum/d3814cb7747d0ebb4c5664f51de616e7213539ed create mode 100644 fuzz/corpora/bignum/d43bef32a3afb15e19afec3f33b681b8fdc2c97e create mode 100644 fuzz/corpora/bignum/d470800d0c133cb672c1730177174c8bca32404e create mode 100644 fuzz/corpora/bignum/d4ae12feb3c3b6fccd76f29ffaaa5b43b9f595fe create mode 100644 fuzz/corpora/bignum/d4c243eeee9147b3396e02b0ca2db650e7b50e87 create mode 100644 fuzz/corpora/bignum/d4cbc48ff1e8c3fbb01f4e7b33ac5db0e8d2bb2d create mode 100644 fuzz/corpora/bignum/d4d4ae101b2f3166a169f4d1b7bbeb95f5c1607a create mode 100644 fuzz/corpora/bignum/d579adeba2273ea710478aa2e721301b55927331 create mode 100644 fuzz/corpora/bignum/d65c29859fc5e1a27f416cd6d2707660fa6ae208 create mode 100644 fuzz/corpora/bignum/d6ab475c8fa58bd0fc58cdc0ff75c0e1a8aef8b8 create mode 100644 fuzz/corpora/bignum/d6cb58cdb9cdf88271fbf5a1871ec7a8b06dedb2 create mode 100644 fuzz/corpora/bignum/d6e2bd9840bcccca55ce30ce23fb9ee8b09eb28f create mode 100644 fuzz/corpora/bignum/d6e6c05428a1d118a63303564a5d2549b662ad68 create mode 100644 fuzz/corpora/bignum/d71a51ced37a33b5a87ee3107b0fa23146065233 create mode 100644 fuzz/corpora/bignum/d752097ba29b9ec46a45f6550559f6f9b4ebaf79 create mode 100644 fuzz/corpora/bignum/d75c4d8cef2cc235526a0c91dd37d3a3b2f03cba create mode 100644 fuzz/corpora/bignum/d76f23fcf91c960b5b57342f417fcd05f884409f create mode 100644 fuzz/corpora/bignum/d79cab3b39c7dec492d317abffd9a475d3206eab create mode 100644 fuzz/corpora/bignum/d7cf683d2667d642700c588bc8922c9e8dde6b45 create mode 100644 fuzz/corpora/bignum/d7d3a5600d555da963c67ca71cc000e5d13d7b68 create mode 100644 fuzz/corpora/bignum/d7d6485cfc477aa11f5c1ca22d980838f256266f create mode 100644 fuzz/corpora/bignum/d83b83e0ace4eb634564fb12d426741a49b06ebe create mode 100644 fuzz/corpora/bignum/d85c1043fc9065757d6a1d83c7b6a6f9f98d4f05 create mode 100644 fuzz/corpora/bignum/d87e60d0cb6acc9b10e86be1633c0a25ead80222 create mode 100644 fuzz/corpora/bignum/d8804349dc5c03cbc2309285ae74e499639123f2 create mode 100644 fuzz/corpora/bignum/d889133ac1b6c08f0c1f8600dc55c429359f9c1f create mode 100644 fuzz/corpora/bignum/d89cd87b910fc6902fd95746642af20e8ef3a967 create mode 100644 fuzz/corpora/bignum/d8ab33387982a98acea344ab155745efa43730d9 create mode 100644 fuzz/corpora/bignum/d8ba646983d8e2682c2ba829c70ec277ad6ad38a create mode 100644 fuzz/corpora/bignum/d8d658f5043d7240d0e6b5174903394185531e09 create mode 100644 fuzz/corpora/bignum/d8df3276cbb1ecb0b12c9804f0cdbf3256fe6c94 create mode 100644 fuzz/corpora/bignum/d9000d62ceac426e9442b7b3c987f1e582bf2935 create mode 100644 fuzz/corpora/bignum/d92b645679306dfa92a17b763035a30b47d331a7 create mode 100644 fuzz/corpora/bignum/d943c1a64a03c30eeb562e3b77f869f6ab56b7ea create mode 100644 fuzz/corpora/bignum/d9462bf90136c5317fe262503735ee7afe3b0246 create mode 100644 fuzz/corpora/bignum/d94c1468d16043cc3adb18d5d693ed31050223a5 create mode 100644 fuzz/corpora/bignum/d9716495de635fb4815b1b2d0a5841bde74ac385 create mode 100644 fuzz/corpora/bignum/d9e0739aaa2af6424f502e78db4d005dc4fd93b5 create mode 100644 fuzz/corpora/bignum/d9e5190f49400aaeeed65ed2f277a5565cbe602c create mode 100644 fuzz/corpora/bignum/d9f86b5a8250b7c59627cf4ef4e8bdb22714ffa5 create mode 100644 fuzz/corpora/bignum/da29f73da6d174eaea79dede20949e86acee8501 create mode 100644 fuzz/corpora/bignum/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/bignum/dac42837b3cc6acce0673f678c7e904c3417f39d create mode 100644 fuzz/corpora/bignum/db02fde58e58767eab8c6aeb378513b0be640684 create mode 100644 fuzz/corpora/bignum/db3e87bbb884aa062e0e6314a6503099fa05efed create mode 100644 fuzz/corpora/bignum/db77b3de83c539e18ba1079f05c0fb71089ddd83 create mode 100644 fuzz/corpora/bignum/dbabba3cd97132e6ba36c6d4b1d0365fb792d5d8 create mode 100644 fuzz/corpora/bignum/dbc211a351c75ccb27a2e80004644890e9181af6 create mode 100644 fuzz/corpora/bignum/dbcc0ebaaf11db19ac3d6887a5d8b793b1d5a8d4 create mode 100644 fuzz/corpora/bignum/dcaee570598f1c12cdf5a9905b4356cfc72c5aa3 create mode 100644 fuzz/corpora/bignum/dcaf511f122bf9329f591ea7694357f0efe317d6 create mode 100644 fuzz/corpora/bignum/dcc848a9e5fa596e4fa2f6e7e346d754ae8d920d create mode 100644 fuzz/corpora/bignum/dcd5aca8457d9c6096efff4454b7843832f3b4c1 create mode 100644 fuzz/corpora/bignum/dcd8e88c311bb382728dd5fde5af6795188f2ea7 create mode 100644 fuzz/corpora/bignum/dd2d37dba442fff639d119f53a4b1f636f13c3b1 create mode 100644 fuzz/corpora/bignum/dd69eff617a1509e5933993d51dddedc532430b7 create mode 100644 fuzz/corpora/bignum/dd6e00bbbeba92f762998f6174e9cfe61ff9a40f create mode 100644 fuzz/corpora/bignum/dd957ae8c85a77f33b64f5ae273a7b9a2b93af41 create mode 100644 fuzz/corpora/bignum/dde86fccffc53b370da08247844b244fcfec43c0 create mode 100644 fuzz/corpora/bignum/ddec77dab1f1d79d2dcd13205116c41ec3560834 create mode 100644 fuzz/corpora/bignum/de4a4b5f22c3a0d7ccb7ed3870f1ce162366390a create mode 100644 fuzz/corpora/bignum/de5574c3eb4f8ad1b0d27201d6d395ce9b872951 create mode 100644 fuzz/corpora/bignum/de73565b39249c5ddb8964e6c67326d1c3a801f0 create mode 100644 fuzz/corpora/bignum/dfbeaa978770c1cff530219e6a7ae1aa479fa831 create mode 100644 fuzz/corpora/bignum/dff62df164bea85999742e9a48a465cbd7bab8ee create mode 100644 fuzz/corpora/bignum/dff6a70ade2b7406092c0cd00a4c73aa927ed430 create mode 100644 fuzz/corpora/bignum/e03fb13b930fc9816693c35a3ba1dca2d25d6271 create mode 100644 fuzz/corpora/bignum/e0413f09a895a218f1564d96172ca84d720ac7b2 create mode 100644 fuzz/corpora/bignum/e06fe9967b6c38b848c7ec4f64d13aff573d4471 create mode 100644 fuzz/corpora/bignum/e0746858f72b2a1b5c2b23362acfe2d7254ebd4c create mode 100644 fuzz/corpora/bignum/e0b77fef8141b57e13bfc87856f6a820968e27f1 create mode 100644 fuzz/corpora/bignum/e0bb7b2f97bcd75444670f1adc4aa8f14481cc53 create mode 100644 fuzz/corpora/bignum/e11389dee3a9b2155bdcfaed31856c0cd9968c54 create mode 100644 fuzz/corpora/bignum/e121e2e748580e5ae757bfc244d66892fb012557 create mode 100644 fuzz/corpora/bignum/e1259e86f6628854d8a5926180f0ede9b54c8bde create mode 100644 fuzz/corpora/bignum/e1c5a293b09058e4dbe0871264d94520c7df27e6 create mode 100644 fuzz/corpora/bignum/e1f717430e72ac6c904eb3890661f5855982e878 create mode 100644 fuzz/corpora/bignum/e22c0a25ddfb69b79c76876f418f08aabf806e94 create mode 100644 fuzz/corpora/bignum/e23d248a9fbc229b54390f53e45f6eeba470d244 create mode 100644 fuzz/corpora/bignum/e377c2f5849f8fc329f95ba19cc46687bb1d89af create mode 100644 fuzz/corpora/bignum/e39fae279ff7598506e4527cf18dbd0897fb378e create mode 100644 fuzz/corpora/bignum/e3b6625f102437a586d9e073fea76c833b90f031 create mode 100644 fuzz/corpora/bignum/e3d1c16a0f723acbf8942bce8ecaba4d1e6ea9de create mode 100644 fuzz/corpora/bignum/e3e12d195fabff1218ec8093b86335a3d50cb33e create mode 100644 fuzz/corpora/bignum/e3fd9ec6727cb94476cfd80c65317d487e798dc1 create mode 100644 fuzz/corpora/bignum/e43289b46977e8d0d0c20dce5e90bc946e39a174 create mode 100644 fuzz/corpora/bignum/e465864aef251ff5fab779cd6a9c92349357cdf0 create mode 100644 fuzz/corpora/bignum/e476b4e07b9652865a637d50cc2b7245acd196a5 create mode 100644 fuzz/corpora/bignum/e4a97d1938dc7e87f6bface107f2fd29c08caf5f create mode 100644 fuzz/corpora/bignum/e4f31dc1d382fe1550d3f1ba418d69a1c11cc399 create mode 100644 fuzz/corpora/bignum/e4f58f81fd5edf43b32108cd6d4f1a8721c35002 create mode 100644 fuzz/corpora/bignum/e50564615c34e1d556e10ebc1ccb6bda6f134e4f create mode 100644 fuzz/corpora/bignum/e512f0902395cab665b1ac0e8e612598be3d40d7 create mode 100644 fuzz/corpora/bignum/e574da82180cea41e13e8155157a3096f5e13bfe create mode 100644 fuzz/corpora/bignum/e583e7931d7b0f0b915fcc9186498aa54b4e8c8f create mode 100644 fuzz/corpora/bignum/e5fc97ea49550dc13855094ba81ef6b010b2d335 create mode 100644 fuzz/corpora/bignum/e608458a07237baee26dd78d8cc7ce738b69a74f create mode 100644 fuzz/corpora/bignum/e658c444d3fbc293756f3b09fde2720547d04916 create mode 100644 fuzz/corpora/bignum/e6c863bd729c105b91a5364769d3bb22f717f2a5 create mode 100644 fuzz/corpora/bignum/e6d7854c725e63c0f43ac02433953efec21dbc0e create mode 100644 fuzz/corpora/bignum/e6ebb8f0a59963a1c9cc1d41513733ab1d165df3 create mode 100644 fuzz/corpora/bignum/e7af7107066d92134f30c6ed917f2cd60c68a350 create mode 100644 fuzz/corpora/bignum/e7cc7dc79181382254c51a9493721074e978b3c6 create mode 100644 fuzz/corpora/bignum/e7f6cb8d23c53715dd593ac16b565b37db30c9aa create mode 100644 fuzz/corpora/bignum/e83330ca4c786ff34b8f816b6dccf342e6849387 create mode 100644 fuzz/corpora/bignum/e83387fc935e49a305c42e04c8170a4572c85339 create mode 100644 fuzz/corpora/bignum/e8501fa8a654d60826d05bcf1138a53338b7bfa7 create mode 100644 fuzz/corpora/bignum/e88c3fcf27850d6447409d430a56364e3ffefbe3 create mode 100644 fuzz/corpora/bignum/e89daaa3ee812b3310002656fce7b46bbdb3c667 create mode 100644 fuzz/corpora/bignum/e8c1b7df993bad8dfb488a2fa869dbc0dc3f22c8 create mode 100644 fuzz/corpora/bignum/e8de84b0514601032348e901aff9692efbb904d6 create mode 100644 fuzz/corpora/bignum/e927df16a4ed13cccbd141e342b51795f365786b create mode 100644 fuzz/corpora/bignum/e9475c56725676a03c23602d810bf47fea49123c create mode 100644 fuzz/corpora/bignum/e9e39eb1da2d9c78a8a5b5b21972e19f436f1af1 create mode 100644 fuzz/corpora/bignum/e9e3ae56eb2ee1ca0710e4c8455397bc6984ee12 create mode 100644 fuzz/corpora/bignum/ea16405a881c91e544152897b69477cc019cdc12 create mode 100644 fuzz/corpora/bignum/eac92614718344b2fd2b7d34c2202889d844ea67 create mode 100644 fuzz/corpora/bignum/eb150514614b78b104ff754f0f2eeec27f39fefb create mode 100644 fuzz/corpora/bignum/eb77066d6a73d8ba6c336ea02ad1094e744ad159 create mode 100644 fuzz/corpora/bignum/eb85bd8fb1a23c6ce84977860ab32e09cddca86a create mode 100644 fuzz/corpora/bignum/ebb38801f09a0d87bb189abdb60cd636cab9b40c create mode 100644 fuzz/corpora/bignum/ebb3b96382fc5ab0f5da3f40e5cf769cb2b34375 create mode 100644 fuzz/corpora/bignum/ebeea951d8110b7238987a7036bf7c7dbe53a500 create mode 100644 fuzz/corpora/bignum/ec034de6d9b39e746eafba47d384d4d841a7d877 create mode 100644 fuzz/corpora/bignum/ec20bdc4f68b0f2aa3f11bde1c62a0be47b3983e create mode 100644 fuzz/corpora/bignum/ec407b0f782955115bb6117b001a1b2d5bd8fa4a create mode 100644 fuzz/corpora/bignum/ec5d78db794d97de4f2edffda10b042ed3fb774a create mode 100644 fuzz/corpora/bignum/ec79139b50a6bc05dd2e613871e0c2aa1cf1d31e create mode 100644 fuzz/corpora/bignum/ecd609488627f90c7b3194c865b897b905200ecd create mode 100644 fuzz/corpora/bignum/ecf18296058dd79751f850ca40a38b669a1b2541 create mode 100644 fuzz/corpora/bignum/ecfddb29cf09b3421ad247a71ca735892fe3b15d create mode 100644 fuzz/corpora/bignum/ed4b26a824886dd0f80f182958032ca92217018d create mode 100644 fuzz/corpora/bignum/ed5eeaed1dd95862fd407a1c431447a51601bc36 create mode 100644 fuzz/corpora/bignum/ede790221fd99ad6306f39b1e67f56e24f098fa3 create mode 100644 fuzz/corpora/bignum/ee0f46ad27874ed6ec3532901e5003530e17ed60 create mode 100644 fuzz/corpora/bignum/ee0fa2d96239f54b55c49a841f5eeda9e72c0717 create mode 100644 fuzz/corpora/bignum/ee2d00ebf6e5b60ccdd3922b875d1cb30eb27828 create mode 100644 fuzz/corpora/bignum/ee3bf0671157a9fa1e59a3b19d8dc27d0dc00894 create mode 100644 fuzz/corpora/bignum/ee66343807762304b5aa9d7e0050f0a883b5c42a create mode 100644 fuzz/corpora/bignum/ee7867a9400242091b12a6cb3f04ca8f680db692 create mode 100644 fuzz/corpora/bignum/ee9568c13097cb35684a548a97b822eba88d9991 create mode 100644 fuzz/corpora/bignum/eeacf76069d788ad91f3839d3ac2ea19b4ef55bd create mode 100644 fuzz/corpora/bignum/eedc262f8792a8194e4b0f2883c6ad837ce06932 create mode 100644 fuzz/corpora/bignum/eef8f8da14fb5d61cf748d75d3d278751d350998 create mode 100644 fuzz/corpora/bignum/ef11511939859b56a71004926811be5085447e29 create mode 100644 fuzz/corpora/bignum/ef4218cb80193d7a4a09c523a761432d3e8478fc create mode 100644 fuzz/corpora/bignum/ef9323259e68576624ef17382cf2330f629e8c91 create mode 100644 fuzz/corpora/bignum/efa7a2c8d6dfd0f014c28659bcbe9b8864645e10 create mode 100644 fuzz/corpora/bignum/efa83192d0ec824874d25e2836fe0a3d75ed0c9d create mode 100644 fuzz/corpora/bignum/efc0245c583b8e78adac15261c76f5e321b4fdde create mode 100644 fuzz/corpora/bignum/eff2665b4322827d202155045fdb6b55ed3a465e create mode 100644 fuzz/corpora/bignum/f0052d02e5d252fa48c738dbe1287ea1c768fc91 create mode 100644 fuzz/corpora/bignum/f0764372522410c4270697bdb1d5cd22873c0304 create mode 100644 fuzz/corpora/bignum/f0791f9049d3fef7c86d0a1118910c497cb2239d create mode 100644 fuzz/corpora/bignum/f0885c8145e37a2cd55ac8139305d83f38760943 create mode 100644 fuzz/corpora/bignum/f0cc05cb4c3965028a6c9c8cbdde2f2d892ce3a1 create mode 100644 fuzz/corpora/bignum/f0f2b0aa4ee8b8bd1e2c4e01f673f66d386a46b3 create mode 100644 fuzz/corpora/bignum/f11be4fdb2083db074173d3e3c6c013384a1c6ba create mode 100644 fuzz/corpora/bignum/f12d7e092bc913db9d212990f7537db19e39b82c create mode 100644 fuzz/corpora/bignum/f14f6448fd80c920d2c59c70578e0d225b98b4e4 create mode 100644 fuzz/corpora/bignum/f15286b59b04e268dd5bf2d0ff23463c33cb4bf8 create mode 100644 fuzz/corpora/bignum/f164f093a439aee7ea00bc0cba052fafb1d0f07c create mode 100644 fuzz/corpora/bignum/f17210bc3c9154a55eea178d8fbe687afa794617 create mode 100644 fuzz/corpora/bignum/f178bdd1b6a0bd86d55830355c0fc809b3fb1dc4 create mode 100644 fuzz/corpora/bignum/f1cced20f4be4dde6172b4d813e5a644728b34f1 create mode 100644 fuzz/corpora/bignum/f1f96db10dc34ef04df7eda002765b20c4f6a733 create mode 100644 fuzz/corpora/bignum/f2129a3c245650c409ff253f1e4cffad463ea58a create mode 100644 fuzz/corpora/bignum/f21de6e96890a990f7d3706fc3f923b413df35ea create mode 100644 fuzz/corpora/bignum/f2234ef9edc2b14853c0d20a9fc50ae2aec6d633 create mode 100644 fuzz/corpora/bignum/f239049fa176a6e25eefe36ad7e3573e0363287c create mode 100644 fuzz/corpora/bignum/f23d528a7f95c1af847482bfedecdbaa50bfebb7 create mode 100644 fuzz/corpora/bignum/f282a6467410c4049af190a5bfdc123628835664 create mode 100644 fuzz/corpora/bignum/f294f630de20322442cff3c3df323fb6b8c4a4c1 create mode 100644 fuzz/corpora/bignum/f2d2f59a28937c90cffbf92baec467d66cd44db1 create mode 100644 fuzz/corpora/bignum/f2e58f52109f6c2a974aa8f61cd7c9f8a2961e13 create mode 100644 fuzz/corpora/bignum/f3407bd9c8185ac48f6a6df75c7e618623c46cbc create mode 100644 fuzz/corpora/bignum/f357d1caf1ff6cb5a5c903a619e3f5258cd38691 create mode 100644 fuzz/corpora/bignum/f361afd240e578fcab8407f2af6ec6a6ad3f4a94 create mode 100644 fuzz/corpora/bignum/f370a44b8765eae60f377eb9ae9e9860a6aef211 create mode 100644 fuzz/corpora/bignum/f38ba7ce95eb4436fb369e4331666e4b1166c354 create mode 100644 fuzz/corpora/bignum/f393dd602756f491e856c78c9bf19075f972629a create mode 100644 fuzz/corpora/bignum/f3e95904bad86b97f7e769e66a192383cbdbf82a create mode 100644 fuzz/corpora/bignum/f3f08d5a24defaf54d569471355ce0f3234480db create mode 100644 fuzz/corpora/bignum/f3fdbc41fc737741bceb2cf14185a27ad4b769d9 create mode 100644 fuzz/corpora/bignum/f431a3141a5ad5a3782f06686ff0a5acf6899fe8 create mode 100644 fuzz/corpora/bignum/f440b41f1ae3efe2451080c22d5324360c0a4225 create mode 100644 fuzz/corpora/bignum/f469b35a1fa6d6e234190823dbce45ef5ed510c8 create mode 100644 fuzz/corpora/bignum/f49ae4cbfd1eb4405c7da71d6fb7514c9cec6b91 create mode 100644 fuzz/corpora/bignum/f4e8afb851f168f14489266cd1636424f5d872a9 create mode 100644 fuzz/corpora/bignum/f511a6fddf37b81e8336bb38a0663e56a6831ddf create mode 100644 fuzz/corpora/bignum/f53d3971d3ff39f0cd2ba35cc75d3a72b5157ce1 create mode 100644 fuzz/corpora/bignum/f54d7e8d28958d24a98db11e025996236d00d15a create mode 100644 fuzz/corpora/bignum/f583cb7d081efbc17c3b980c80e481efef749fa9 create mode 100644 fuzz/corpora/bignum/f5a1814601372d20aeead3d456ee3ffa36ee3c52 create mode 100644 fuzz/corpora/bignum/f66a658e45d60cdefcbe4f254edc48dbddee24f8 create mode 100644 fuzz/corpora/bignum/f72fcc46d940f9d0c9910e90f08d540de0c2a760 create mode 100644 fuzz/corpora/bignum/f74080044607ca75e5764bd25d43e750f44ea68b create mode 100644 fuzz/corpora/bignum/f860be6f59a6c9bf6d5a960be887853e1444d812 create mode 100644 fuzz/corpora/bignum/f86755bd3d77c7244da85efa79c5bd01a45addca create mode 100644 fuzz/corpora/bignum/f88f4d38ddf8ac5fa23cbeb37625419e017c7f5a create mode 100644 fuzz/corpora/bignum/f896fbda9b94f613705c6a97460c6b5a504c5a99 create mode 100644 fuzz/corpora/bignum/f8a9d038aad28c6f7d74d76699220705881cd130 create mode 100644 fuzz/corpora/bignum/f9129fc8bacd59389223492d7abd3c9e5c8272cc create mode 100644 fuzz/corpora/bignum/f928afdf829c73383349b9e8be8ca14bffc97fb6 create mode 100644 fuzz/corpora/bignum/f929817c918de5d48ebb416b9e7aa64f383bd2c7 create mode 100644 fuzz/corpora/bignum/f9338cf42386624b38189ecf88715c816981a318 create mode 100644 fuzz/corpora/bignum/f9902560fcc0d4ec49fb42df43fd3ba7cabc634c create mode 100644 fuzz/corpora/bignum/f990ada42d920e980106ca70dca64b50f6024947 create mode 100644 fuzz/corpora/bignum/f9ab7db2b61b3161da93b722dae15ed484e975e8 create mode 100644 fuzz/corpora/bignum/f9b03b9130244ea355bce1d60bf86b9f59c2bcc8 create mode 100644 fuzz/corpora/bignum/f9cf946c2879ec5c974d40982b0a91367ff87143 create mode 100644 fuzz/corpora/bignum/fa253a08be3465282e00fd5a8958d2b9c6ea7c6c create mode 100644 fuzz/corpora/bignum/fa3bc5d2bd1995847a476d1114b1f17db28eada8 create mode 100644 fuzz/corpora/bignum/fa3d8b6ba466b84d64d535e3de40bb5bd01bc4ed create mode 100644 fuzz/corpora/bignum/fa433e16012479b2148c74f1282fb04d348b4139 create mode 100644 fuzz/corpora/bignum/fa617d1b49bec84ad69378ebed71e716a317eb9f create mode 100644 fuzz/corpora/bignum/fa6fec7c3bd581df1bbd22394a176dd066ce4a22 create mode 100644 fuzz/corpora/bignum/fae9ccef3449c30d68b7db167578831f2d06a8dc create mode 100644 fuzz/corpora/bignum/fb2d1a15cfae6553362cd92b418136253a561032 create mode 100644 fuzz/corpora/bignum/fb9b20c9bcf5260a627759b726d856cb771afc80 create mode 100644 fuzz/corpora/bignum/fba3082984ee84b86b277af144a36482e76461a9 create mode 100644 fuzz/corpora/bignum/fbc123c15e8a6a1c715285efd3d73b47a01d91bd create mode 100644 fuzz/corpora/bignum/fbc9e8b10c4f703595dcc6489aac791e8527c636 create mode 100644 fuzz/corpora/bignum/fbe39a24646b972b9bd16ae15dfa95d6869f6013 create mode 100644 fuzz/corpora/bignum/fc2ffecb0550c3aba2802503f7306df57f44957d create mode 100644 fuzz/corpora/bignum/fc3d9181bb44289d1ce61d61fd2f62ba8cfeaa6e create mode 100644 fuzz/corpora/bignum/fc805a3fe1db85e359fe773a0f0c4f57f745db5f create mode 100644 fuzz/corpora/bignum/fc92a05413f42462d0012d0b32b006d63a9cdcb0 create mode 100644 fuzz/corpora/bignum/fcb9ed67ebdbc90d5e52a1309990a90dfb7b4803 create mode 100644 fuzz/corpora/bignum/fce641815e07a444d409a113efb4f4f01ca06202 create mode 100644 fuzz/corpora/bignum/fcfd86c8a20dd0804fae24ece220092e3ad204f8 create mode 100644 fuzz/corpora/bignum/fd59809c172368c50cb10c1d21fc1511522208de create mode 100644 fuzz/corpora/bignum/fd6c37cf67420fc2636d9d1ad6577ead008671cd create mode 100644 fuzz/corpora/bignum/fd80fd82647a800fbba6814294b885c2947a5d6a create mode 100644 fuzz/corpora/bignum/fdcae1175be746f5b35dc48ab1dfd73628a4d332 create mode 100644 fuzz/corpora/bignum/fddd2d7322e0ff4bc76445aa358d073717f7f7a3 create mode 100644 fuzz/corpora/bignum/fdf1cda60cc3eae8af4f2e7e001adb3e08c2ece6 create mode 100644 fuzz/corpora/bignum/fe19859d3dd80d6fb83851dee7e98eea4b3cc784 create mode 100644 fuzz/corpora/bignum/fe4fd0539d4d8745871d60ab2dbe22004c6a9fe5 create mode 100644 fuzz/corpora/bignum/fe560913da903502f1c6ba169bac3d3f1c657627 create mode 100644 fuzz/corpora/bignum/fe714b941d4f565ec3bca0ea45feae0fcc8bd732 create mode 100644 fuzz/corpora/bignum/fe94a31c5e49c27e9506d0a0a484c9acde0ed2dc create mode 100644 fuzz/corpora/bignum/feaa608a68da21c0bd55af635330d024a40d06eb create mode 100644 fuzz/corpora/bignum/fed0689a43dc0fca9cf9f833bc3a3ff4865e5aa6 create mode 100644 fuzz/corpora/bignum/fef4a6687a675c2e407a3b6dca57965a218d3c16 create mode 100644 fuzz/corpora/bignum/fefa235a7ad36905489fd9dc981ba483938db6f6 create mode 100644 fuzz/corpora/bignum/ff12bafe56915492483b40454f0af5b0090c78ef create mode 100644 fuzz/corpora/bignum/ff215d0df1d2103db75d35d5080aa75b01996f43 create mode 100644 fuzz/corpora/bignum/ff289a307acd1d8def30c396de5964f321043eca create mode 100644 fuzz/corpora/bignum/ff84bd56755578712522fcd08e37a71fe7c5d6aa create mode 100644 fuzz/corpora/bignum/ffa134887651f8fc31d1d29ea060c2e7d70aca3e create mode 100644 fuzz/corpora/bignum/ffb1df7b5ea8fae044a025f754f8c0536c5dbb1d create mode 100644 fuzz/corpora/bignum/ffcf7bb9f13d56093a5f20c15c33f548d2df9cc6 create mode 100644 fuzz/corpora/bignum/ffd4f21a6e82ad25d402e984f1fdd3f8f47bb464 create mode 100644 fuzz/corpora/bignum/ffdfae567ef24406c23c238c204308cf7bbb9d86 create mode 100644 fuzz/corpora/bndiv/015d8b0a97df883842a1e5523226534faa5ed092 create mode 100644 fuzz/corpora/bndiv/01dc4bb81bbe2a082c6ffcd4a1ce4b56157be2a3 create mode 100644 fuzz/corpora/bndiv/0200d7eab62ea0eaedbf4962985537981ec00a9c create mode 100644 fuzz/corpora/bndiv/02287f024c4eb1ac7e16898df84bef97173fdc24 create mode 100644 fuzz/corpora/bndiv/022c4c07b089feb76008d8d9c2c1f0bf8a5d49e8 create mode 100644 fuzz/corpora/bndiv/02f0215258ab65e8399fa792933d18d85fbf4b67 create mode 100644 fuzz/corpora/bndiv/031ce28e68b790421ca9286a5e2bf8d16145160b create mode 100644 fuzz/corpora/bndiv/03429177ae2c579e1d28c3fa74fc817189415115 create mode 100644 fuzz/corpora/bndiv/05087faa7f496290ac2bf172f701c93ea1de64d3 create mode 100644 fuzz/corpora/bndiv/051e0fef9252c8230dec521696f83136a2a086d5 create mode 100644 fuzz/corpora/bndiv/057c6bec50a14aab3f4b02670d25598f632f189a create mode 100644 fuzz/corpora/bndiv/058dc5912bae182dd0f52abb90f6804baf082e80 create mode 100644 fuzz/corpora/bndiv/05f3161820f8a4668897cfcf0f7a7d56699ecd65 create mode 100644 fuzz/corpora/bndiv/065e8a8af70ab05a8a6e31e82ecbda0941f0c47f create mode 100644 fuzz/corpora/bndiv/0661d9841d3da67b8cc40d4fb2787da6418bce6b create mode 100644 fuzz/corpora/bndiv/068daa1ca6549b42b0bee64fe4e65342faca88c7 create mode 100644 fuzz/corpora/bndiv/0691ca1f5ae47f007d9d6cdec9dd4e2aac484dcf create mode 100644 fuzz/corpora/bndiv/06b91fba75881bff0be487502354257e964dbbf6 create mode 100644 fuzz/corpora/bndiv/06d1390eda2b13feb446f507b44d89308a3399b7 create mode 100644 fuzz/corpora/bndiv/06dc54fe0d6fa4af8ef4f6b7fd8074d2d137980f create mode 100644 fuzz/corpora/bndiv/077fd314f2562d7d4c33b88a462bc7a2c27b69dc create mode 100644 fuzz/corpora/bndiv/080606e7dfcea2f63bb565e94e7b6a3c6870f607 create mode 100644 fuzz/corpora/bndiv/085927a06abf1f1207d6618f58eae4e98fdc2bf8 create mode 100644 fuzz/corpora/bndiv/0866112f723b2e78ab5a93838684d0915b6296c3 create mode 100644 fuzz/corpora/bndiv/087cf847ab002da41f40414361e189c2aebae0da create mode 100644 fuzz/corpora/bndiv/089c52c0bec4d1294c659dbeaafdb4dc9b219647 create mode 100644 fuzz/corpora/bndiv/08ff58a3ee77ba66fbdfc64c2e98b725010a623d create mode 100644 fuzz/corpora/bndiv/09407e4d28cd13200134294792bf96278b823254 create mode 100644 fuzz/corpora/bndiv/0a77e9126345ffe5abdfe13c8ce0bb672c4c8dec create mode 100644 fuzz/corpora/bndiv/0bf645c5e2dd73f0696f8b74798fbd3581a62be0 create mode 100644 fuzz/corpora/bndiv/0c48ff1d1fa36c92c8d41b69232da47c4dbe632e create mode 100644 fuzz/corpora/bndiv/0d138c7ea07e8c5e67555816ad5e8416fab82de9 create mode 100644 fuzz/corpora/bndiv/0d218b6646c3285646e6279c9057cce24ce73e87 create mode 100644 fuzz/corpora/bndiv/0dff3e4b973675205eacdcf05b5d088c93afc014 create mode 100644 fuzz/corpora/bndiv/0e42b6644415cd5c32b37c1773f6fa5a41fea8d7 create mode 100644 fuzz/corpora/bndiv/0e9d8eea1bdf13662d0be49215654a13df036691 create mode 100644 fuzz/corpora/bndiv/0f3e9d1daf534b77f3280500872c1471e93805bc create mode 100644 fuzz/corpora/bndiv/104309d90b6aed3a715b3b5ecd97031bde2e439a create mode 100644 fuzz/corpora/bndiv/109be9d189dc1e5b8cb5c00360eae1c46239a181 create mode 100644 fuzz/corpora/bndiv/10f0d89773275a484e66d85842c7c1d3fe97a007 create mode 100644 fuzz/corpora/bndiv/11b492d6730efcac78434c45413aeaccc6a9df8b create mode 100644 fuzz/corpora/bndiv/131f3d1b5e3b770ceb91252d04646eac713f36ce create mode 100644 fuzz/corpora/bndiv/1365dbee5a1503a98c8aa65d15552382b493dc43 create mode 100644 fuzz/corpora/bndiv/13ff747d7f79f587f038caa9398f1313565f9be0 create mode 100644 fuzz/corpora/bndiv/14363b422c2ab14787bf1f35e89862f5d7f54e9e create mode 100644 fuzz/corpora/bndiv/146eed9a5220fd61011d779a34b7ad595dbfc4b4 create mode 100644 fuzz/corpora/bndiv/14706d68c0e6878b1c3ec5616f2e9e3e95f33fbb create mode 100644 fuzz/corpora/bndiv/1475aae906b72ed8f0d972efa431ba68f74d082d create mode 100644 fuzz/corpora/bndiv/1484b8ab5535fcb397c00d8352de330b601d8489 create mode 100644 fuzz/corpora/bndiv/149b34cc0f320de62990eb771bfdd4ed7b96ec7e create mode 100644 fuzz/corpora/bndiv/16448ebbb2ee8943a3549bf739382801f67fa055 create mode 100644 fuzz/corpora/bndiv/177f7f21b6e6a95b0ae23349c558911568cdafbf create mode 100644 fuzz/corpora/bndiv/1784d75a2a91da80fdcc82d5734c9d3331e349cc create mode 100644 fuzz/corpora/bndiv/1810832414023b1632037f1b9bd44a5c1d9cea6b create mode 100644 fuzz/corpora/bndiv/18dcb593b08a0dbf137a54cc7ac3a9b279f2a356 create mode 100644 fuzz/corpora/bndiv/19bd01dbc971fae5dc6a865d5ab1cdf23e205a96 create mode 100644 fuzz/corpora/bndiv/1a4bc1016ba324d40ba7497e35156aa061227e02 create mode 100644 fuzz/corpora/bndiv/1add0f8cca75b50eb079c459c7c7cb7dffd91732 create mode 100644 fuzz/corpora/bndiv/1b4a9b3a810a66243ba816e3bc07b8cfb2dd790f create mode 100644 fuzz/corpora/bndiv/1c19226fc48fa1e5b60d9f2ed84dfed79e6861d9 create mode 100644 fuzz/corpora/bndiv/1c196330eb11078b46ba64d3670df0e72df99b17 create mode 100644 fuzz/corpora/bndiv/1cd7a2fe889e74f8d82072b494c9306154b2f0cc create mode 100644 fuzz/corpora/bndiv/1d4c8f52f23b6f10da3ec38fe9b675e5819bd0e6 create mode 100644 fuzz/corpora/bndiv/1d8d360cf5d69ec1160fdfeb25126494a1e60a8a create mode 100644 fuzz/corpora/bndiv/1ddd5eb9ac1e48c58e549ecc2ae708aacda4116d create mode 100644 fuzz/corpora/bndiv/1e1acd8ca354f68dbb47ad2de6f10cd6f8217aad create mode 100644 fuzz/corpora/bndiv/1e78b7ff6e0d9c53f4f1cdda7ff9565c57e6ab67 create mode 100644 fuzz/corpora/bndiv/1ea20e2761bcd8107882905b07c5dd7967c837c7 create mode 100644 fuzz/corpora/bndiv/1f3d7c7dad523bce48995ced3e694970d2c66d79 create mode 100644 fuzz/corpora/bndiv/20151155b4e8271c6c1e25d34bb53d56a0f94c3d create mode 100644 fuzz/corpora/bndiv/211dce1a45dcd617ac0cd7363c907d3fe135fc11 create mode 100644 fuzz/corpora/bndiv/2272253d8904ad7f5c3a8522c551722ab9bb6a84 create mode 100644 fuzz/corpora/bndiv/239c7d330be64556a0e3a07ccfb0c113145d98ab create mode 100644 fuzz/corpora/bndiv/23e5b787019868b0c790ae95981f1c6a033cca70 create mode 100644 fuzz/corpora/bndiv/24a5a9e6d25a893d1d8b7089e06d4bd8c0e7bdc7 create mode 100644 fuzz/corpora/bndiv/24e092068889fde1d7b17f3a49cb8f85921095b7 create mode 100644 fuzz/corpora/bndiv/24eb6d22462609aa45ce4e01d071f69f01298518 create mode 100644 fuzz/corpora/bndiv/255cae055c859c1b6509cb4af6cee7bd4cbf9de2 create mode 100644 fuzz/corpora/bndiv/25fbcd32a32513ac99db81ef965d458c34ac909a create mode 100644 fuzz/corpora/bndiv/281feaf54294950f51817d6ca323f96af30cc46d create mode 100644 fuzz/corpora/bndiv/28b30fc33697a94fd0c9ab5817a98bdad3cb3770 create mode 100644 fuzz/corpora/bndiv/28c2ce1e99ad1d0fc9db6fd7ea5fbcbf2646dc38 create mode 100644 fuzz/corpora/bndiv/28cc6f54f014d2494afffd5c5c9602fb33961649 create mode 100644 fuzz/corpora/bndiv/299e07091d27ae36a9626a6e6f11945d3609623b create mode 100644 fuzz/corpora/bndiv/29d2a59db35e53adbbbd3180d156aee3c82ee3f1 create mode 100644 fuzz/corpora/bndiv/2a13b2b9778cdce97085bca248b7853ca4cecc4b create mode 100644 fuzz/corpora/bndiv/2a641238b2da0b774bcb85890ab5de6f367450b8 create mode 100644 fuzz/corpora/bndiv/2aa6864ed8e9998d1caa4355739696dab678fd2a create mode 100644 fuzz/corpora/bndiv/2aac8457237dbabdc42d28f9b62f05d03b3612fa create mode 100644 fuzz/corpora/bndiv/2b345ae246360e578345ecd17d400250e64b4a9a create mode 100644 fuzz/corpora/bndiv/2b6b20fb2fbfad0360a3ae5bb3740363f5a926a0 create mode 100644 fuzz/corpora/bndiv/2c385fd9805073cb98289da7cf242cacd87c9b22 create mode 100644 fuzz/corpora/bndiv/2d7d044b0b9192c1b030a90c4b937a0defbdc23d create mode 100644 fuzz/corpora/bndiv/2fc36487818a089d37fbc9392b818f0078179aa9 create mode 100644 fuzz/corpora/bndiv/2fe662c4d245df41eaaf2fe0eb85924a1e53e38c create mode 100644 fuzz/corpora/bndiv/2ff96b69f35defae9abd59f884a811e573ce72dc create mode 100644 fuzz/corpora/bndiv/30886c7cecc7b09b7585e14453a75cef886adf03 create mode 100644 fuzz/corpora/bndiv/3137cdfe829a9aeb76db365caf73a7cfeacb46b8 create mode 100644 fuzz/corpora/bndiv/3141bd5a949ef226c221ea49853532738a6921c5 create mode 100644 fuzz/corpora/bndiv/3152a64502f5b8dd46db57376c78a462aabd1153 create mode 100644 fuzz/corpora/bndiv/31fb955d0ba672990bcdb3e38af405970449c53f create mode 100644 fuzz/corpora/bndiv/323aa3ddc64fc058d771e98fc893de810bbcd1c2 create mode 100644 fuzz/corpora/bndiv/32dd11f59ffe739fb1a72800a5445b09d92905c3 create mode 100644 fuzz/corpora/bndiv/348d1d7e662ea1846cdd087dddf4f563abfe212f create mode 100644 fuzz/corpora/bndiv/35f234864566e4e3b534cc10b8a7d0987c58fd23 create mode 100644 fuzz/corpora/bndiv/361ef7cd2d7882d04cbd5eb0cbb813d258a1a8fc create mode 100644 fuzz/corpora/bndiv/3667ecea4d9663b12349327a095b13b61d45d8f3 create mode 100644 fuzz/corpora/bndiv/366f7e2c062844940bc98beef59a0a143984cc27 create mode 100644 fuzz/corpora/bndiv/375bb8ea45a40ce64a1363ce9651dc8ec7e60235 create mode 100644 fuzz/corpora/bndiv/38a17043c0cc4f906951d017906992236c5e735c create mode 100644 fuzz/corpora/bndiv/3999e423332bcc42d130332d476bfbca32a0b12a create mode 100644 fuzz/corpora/bndiv/3a17786615f13c98712c3b186d7b89e90108c161 create mode 100644 fuzz/corpora/bndiv/3a278c479897cf10bc2e5cea4a90654297763213 create mode 100644 fuzz/corpora/bndiv/3bf04dbc66ca550084b33e3f92dcb145287046e8 create mode 100644 fuzz/corpora/bndiv/3cc640cab03f97ca5acb8694f2f37f4d971f1d69 create mode 100644 fuzz/corpora/bndiv/3d233d72fdaf8a2f77ff5a2ecf1a7c49f30857aa create mode 100644 fuzz/corpora/bndiv/401f2db8d18697d14266aac41da19b756f5dc680 create mode 100644 fuzz/corpora/bndiv/4080923e9d1df14ace9581b290a670ca3b8ebe90 create mode 100644 fuzz/corpora/bndiv/417740cebe9b5d70a8451e3094327435ea66dab6 create mode 100644 fuzz/corpora/bndiv/41c5c7d2b3cd1ea723f50c5841159db8f73b6153 create mode 100644 fuzz/corpora/bndiv/41fad555e58eb8f1387336d074d520c4f666bdc7 create mode 100644 fuzz/corpora/bndiv/443f21d0190d98d3335ff8b004bbbb62402e1aa8 create mode 100644 fuzz/corpora/bndiv/453357eabaecb9b8503aa4e6587cd8f19d267a69 create mode 100644 fuzz/corpora/bndiv/45ef63d61bf995f5ed8491cea171ddd3416fd3bc create mode 100644 fuzz/corpora/bndiv/465172bf633350a6d7591f1c503de22fa9e22d52 create mode 100644 fuzz/corpora/bndiv/469710080d555aa6697850892b8a801366048236 create mode 100644 fuzz/corpora/bndiv/479c5751103b7389c3d80b95c85de12344ed51f1 create mode 100644 fuzz/corpora/bndiv/482a0f54fdd838f8e47910331b03f3c10356a02d create mode 100644 fuzz/corpora/bndiv/4830614ac0f14f87cf80a4487cbefbf9778bc6e5 create mode 100644 fuzz/corpora/bndiv/48436c71fabc1f5d2d81ee0c45321047bfda6a5c create mode 100644 fuzz/corpora/bndiv/48d2ab54a8b5bd67ecf90ca6b2cd63ee635e0ad5 create mode 100644 fuzz/corpora/bndiv/4947b24445702b03bce79b7604e88957d6e13638 create mode 100644 fuzz/corpora/bndiv/49704a8c270c656af9cb0e213bee678ba305cad9 create mode 100644 fuzz/corpora/bndiv/49997b8c05840da3dce16a84eec124549aee387d create mode 100644 fuzz/corpora/bndiv/49ea3b58a5794ec6fbf58c29dc3cb7f6447fe9bd create mode 100644 fuzz/corpora/bndiv/49ff124657da2ae53a7c0afb390a8c5463d10f94 create mode 100644 fuzz/corpora/bndiv/4a68df19d8384c75ec1cd6f70f173cac10608bc7 create mode 100644 fuzz/corpora/bndiv/4b04f1a59994683f3dbf20d4a2229269875a934a create mode 100644 fuzz/corpora/bndiv/4b23fc81ba6e4d223bbf46daf1e3f04303052462 create mode 100644 fuzz/corpora/bndiv/4c57bb090c900c6f7c3765226359d1f1e5b705eb create mode 100644 fuzz/corpora/bndiv/4cc98c465a38ec41a35d1eff7c8d965b61144475 create mode 100644 fuzz/corpora/bndiv/4d11d135aa59162814860ca2c6c2ef3b08ed6c8a create mode 100644 fuzz/corpora/bndiv/4d7c8bd98b876fc3277ff489dd4c420a30e41165 create mode 100644 fuzz/corpora/bndiv/4d9fd59c323de3e80b926e683ed26f9907fe068b create mode 100644 fuzz/corpora/bndiv/4e1e06224e488a4f51372255788789e3ec8888fa create mode 100644 fuzz/corpora/bndiv/4e39dfe856c9f9b42a93aec3159458aa62c373d0 create mode 100644 fuzz/corpora/bndiv/4ea65f396b6aa9a01d3a524ab6b0d5c7c909892a create mode 100644 fuzz/corpora/bndiv/4f0b841d09f13218fa9112e9abc6a6b7d6e26d9d create mode 100644 fuzz/corpora/bndiv/4fbc59275f1bf9d4cf4e044f586a8f51da1e0af0 create mode 100644 fuzz/corpora/bndiv/5065029bb577423abe0e74968b102f8c2c5beea3 create mode 100644 fuzz/corpora/bndiv/51099f4d3b5cd7e30ae7e68cdbc8720be4a51b52 create mode 100644 fuzz/corpora/bndiv/5111ff73a0baeefafe85582826a5901a5f3d802f create mode 100644 fuzz/corpora/bndiv/524199251b2fb0624a2a01c4cf180250d0610709 create mode 100644 fuzz/corpora/bndiv/532e55f79e68e0699dcf2b7a67b8794eca3da647 create mode 100644 fuzz/corpora/bndiv/53831272810f9d9c0cee74dadd8d9b1072624ac6 create mode 100644 fuzz/corpora/bndiv/53d5adc15e1a5fe89aeb452a247349c99b280522 create mode 100644 fuzz/corpora/bndiv/54c5a01ea2e92a2af1b76437932e0fdf0b4645de create mode 100644 fuzz/corpora/bndiv/54c6e676d27f393d76ec2233d53953a900c404a9 create mode 100644 fuzz/corpora/bndiv/55665f6a17a1a0fa9b200a426cffa7ddeba0c353 create mode 100644 fuzz/corpora/bndiv/5807a3babd66b299ff3dffd1c8a8080ae60269a9 create mode 100644 fuzz/corpora/bndiv/58a611d4bd19e8778feb7dff1f0e59b7a484a6a9 create mode 100644 fuzz/corpora/bndiv/58d621b1d3e4d0d75aead325ab29762811d9bab6 create mode 100644 fuzz/corpora/bndiv/58ffdbbb4d4956c5c41edacd1642c884f491c4f3 create mode 100644 fuzz/corpora/bndiv/59a2c2fb778a9024e40c7f66a9c079f7634f6596 create mode 100644 fuzz/corpora/bndiv/5a33184e72046b0a7f4c33516e95507165daaffb create mode 100644 fuzz/corpora/bndiv/5b63665fd02f234c80ba1cb1b09bf22145589f1a create mode 100644 fuzz/corpora/bndiv/5c40db102b507c51b0d1ace71170be9131bed246 create mode 100644 fuzz/corpora/bndiv/5c5bd82a8faf3d57644b981a8affacdf905462d3 create mode 100644 fuzz/corpora/bndiv/5c94cfd25f2af76d1eb0bb49ab8d1f515cd74f69 create mode 100644 fuzz/corpora/bndiv/5f12df8b44ca7b529bb16d6bc61d802bc84fdc9e create mode 100644 fuzz/corpora/bndiv/5f2fbcc9e323f9f3c7484392610826a0d2622bde create mode 100644 fuzz/corpora/bndiv/5f80c56a91491f9828dcc637a4c17ef61c5c6e35 create mode 100644 fuzz/corpora/bndiv/5f9cd939d705cc98b625eea88049403da68bb53a create mode 100644 fuzz/corpora/bndiv/5fc229231c40467c0667b24bc690e2fbe5d0724e create mode 100644 fuzz/corpora/bndiv/6109e5fd262d4d7e201e9bf0f483635ac345e427 create mode 100644 fuzz/corpora/bndiv/610e8a109988df975166df442a5a1641143ad1aa create mode 100644 fuzz/corpora/bndiv/620c71bf929336df84bd9319ee245fbbdd5fe6e8 create mode 100644 fuzz/corpora/bndiv/621a2a867e09d1b6c367d0b23952de7b84671654 create mode 100644 fuzz/corpora/bndiv/6225f7aef80afac702b6b8f6d13481f78ecd2c04 create mode 100644 fuzz/corpora/bndiv/62caedcd247a2e8256de1a31c547866dde860889 create mode 100644 fuzz/corpora/bndiv/62d322a783b8aae56df7227db2795543350021d2 create mode 100644 fuzz/corpora/bndiv/634e9d2fc25432627926d33f913deaffdd5cbdab create mode 100644 fuzz/corpora/bndiv/63caab10e013b9e1bf88c4200c46f526dc8bc2bf create mode 100644 fuzz/corpora/bndiv/643c9ee84d4a7fd3bfbe75b8bcd14adbb1176cce create mode 100644 fuzz/corpora/bndiv/650f16d65fff1aefdfeab0b9d88a002caa00c21c create mode 100644 fuzz/corpora/bndiv/657c11171351be50552654891042cbee124d55cb create mode 100644 fuzz/corpora/bndiv/6584e5fe51bab4cd4df1477ae53a2edaf529752a create mode 100644 fuzz/corpora/bndiv/65a6ab2a98b8083a205e476f15ca5e44993c6a9d create mode 100644 fuzz/corpora/bndiv/65d0109e04c5cbe3493e68dc353116eb1ff9e721 create mode 100644 fuzz/corpora/bndiv/660405a62a43782afc40dc6c5fda24f7c5769700 create mode 100644 fuzz/corpora/bndiv/66ec280b13484a101cdc9bddfb227c77a4d64d8b create mode 100644 fuzz/corpora/bndiv/67894cc463340d91523b5dffb2491ce137abc07d create mode 100644 fuzz/corpora/bndiv/68c7eda5bce173a16a7bd9fc15c4ca5231446951 create mode 100644 fuzz/corpora/bndiv/69303eb570a1f1e778a6d4752f5f637487d0c2e2 create mode 100644 fuzz/corpora/bndiv/693a6b8c84ad5fc1881229730f7673b1609db719 create mode 100644 fuzz/corpora/bndiv/69ad85604d63846dae9452be0344f4d1326bdb9b create mode 100644 fuzz/corpora/bndiv/6a4823d453a8b1a15b3d1290212d35315ac256d2 create mode 100644 fuzz/corpora/bndiv/6c39598df93efb6ad0d4ff68bbbb629765b2ab05 create mode 100644 fuzz/corpora/bndiv/6ea508734d66a5b8e8849d970c7849d07d398b29 create mode 100644 fuzz/corpora/bndiv/6ead16798043c420d1e6669f1359753cf3387258 create mode 100644 fuzz/corpora/bndiv/6ed8b63d205ba30917280b7acb723b6c35067ddc create mode 100644 fuzz/corpora/bndiv/6f16aed58ea34039fdef6ceadc26430d5c83a6d6 create mode 100644 fuzz/corpora/bndiv/6f2148c3dd78895af06df23e7015030c0651e029 create mode 100644 fuzz/corpora/bndiv/6f8e06bf53d151856fca8818ed0bb6e86e68468e create mode 100644 fuzz/corpora/bndiv/6ff32dc01e3e17c5094408ab01d29b681abbb521 create mode 100644 fuzz/corpora/bndiv/71dda5fc0481f14a398ba1c00f3c125ce54b5e7f create mode 100644 fuzz/corpora/bndiv/71fadc7605c7176b051869db6d8ed6190d0ec06c create mode 100644 fuzz/corpora/bndiv/72cbbc24af749202df5be396e7425f8f6e5ec92e create mode 100644 fuzz/corpora/bndiv/734fa74a4e98b948f67c5bd3b6dd9817a1930728 create mode 100644 fuzz/corpora/bndiv/73bb090542f2d6ed24a4b4dde04604de40e7eff5 create mode 100644 fuzz/corpora/bndiv/7439cccc86d958705c556ecff3b2c1c30d694601 create mode 100644 fuzz/corpora/bndiv/755eecd6dea14091fe73e0aebddb2f9fe01c7477 create mode 100644 fuzz/corpora/bndiv/75e63407eeadc307941015e94fd3c9d1457eb287 create mode 100644 fuzz/corpora/bndiv/7626a41fbedb528e84f7a508286aaad0e3fce909 create mode 100644 fuzz/corpora/bndiv/76c62007c4c47031dd279c8d19fd7831dc8bcdfa create mode 100644 fuzz/corpora/bndiv/76ffbd5d694ffea78d6a4e2795e0e8c1b17fc4be create mode 100644 fuzz/corpora/bndiv/783962241ac06a53137f45715f0d3d72d664fbc1 create mode 100644 fuzz/corpora/bndiv/78f9e215acb1b6028c19eb0261415891f21cfc92 create mode 100644 fuzz/corpora/bndiv/794aee0ade67846b83c9815ac0225010b6e2c297 create mode 100644 fuzz/corpora/bndiv/79d5bf6c9bc0f6f7eae08f2a68c37dd7b89695f9 create mode 100644 fuzz/corpora/bndiv/7a4a4fd0b771dac40e10767b09ac9acf04c2bd67 create mode 100644 fuzz/corpora/bndiv/7b2391ae9f893d7364ed536d2bd510fd61eef81c create mode 100644 fuzz/corpora/bndiv/7b4d6a8b9ade79fbacd5c236bf086b16b215c74b create mode 100644 fuzz/corpora/bndiv/7b90552fbd838d455816bee9e3b5d1db55900162 create mode 100644 fuzz/corpora/bndiv/7c61fbdb5df1bb8d789f3b11dc29bee0a2e6aea7 create mode 100644 fuzz/corpora/bndiv/7c9760091b99a3f27f9b813c1c3cad8a526c36c8 create mode 100644 fuzz/corpora/bndiv/7c9c083cf0fed6427a322dd5784d3cc3979e4095 create mode 100644 fuzz/corpora/bndiv/7cc55b10e94eaff60117c875ef09f07133a13807 create mode 100644 fuzz/corpora/bndiv/7d111e4300734f57b1905e1dd87005aac748890a create mode 100644 fuzz/corpora/bndiv/7e0f2c1a50c754995d0036aa6a3ac5eda34f5b70 create mode 100644 fuzz/corpora/bndiv/7e2f0ed91cb42f3edeeaaf4c7fab03ed9c10f9be create mode 100644 fuzz/corpora/bndiv/7f4294ff65ac9c7f0700fff11d8bac9eef384242 create mode 100644 fuzz/corpora/bndiv/802359037afd08b585b223c5b16839f57908e14e create mode 100644 fuzz/corpora/bndiv/802a4297d586163769c07908f0a573a9fa1a0b27 create mode 100644 fuzz/corpora/bndiv/80789de87bf7e2da3e8c37fa9aa1a5a9864ad95d create mode 100644 fuzz/corpora/bndiv/813d780d0ebf5c2067ef6664a7f38cca83e5174b create mode 100644 fuzz/corpora/bndiv/826774c4b9aa2d6d28b70d4726f46ee874ab1333 create mode 100644 fuzz/corpora/bndiv/826a18d6c513a4e447a87d31d29105c10984f79b create mode 100644 fuzz/corpora/bndiv/829a0c1942e039bdbf61aa92ba1737c80655892c create mode 100644 fuzz/corpora/bndiv/82a1594652e36861bdbbdcee7d97eb85fc99d6c1 create mode 100644 fuzz/corpora/bndiv/82b1e8d36dfbde5f9ed8b58c0a0e92e99ee13cf5 create mode 100644 fuzz/corpora/bndiv/835910ab97b0c61f7e7502ba2a60c56deb09b1de create mode 100644 fuzz/corpora/bndiv/84a3b79977a8c784760e5f8665ecdbb6be565656 create mode 100644 fuzz/corpora/bndiv/854fcb256851a8a10bffd70d131a55848445d599 create mode 100644 fuzz/corpora/bndiv/857455767fdb59e60fbe84f35b57a71fa819e46c create mode 100644 fuzz/corpora/bndiv/8589233ae7e49b1941802b4c94fe2d7f52f7c815 create mode 100644 fuzz/corpora/bndiv/858f5ae67c9703ab01794e5428b53c7827516b4b create mode 100644 fuzz/corpora/bndiv/8591fa02447c3c2fecbf71765ccbd34ddb2310b1 create mode 100644 fuzz/corpora/bndiv/85e53271e14006f0265921d02d4d736cdc580b0b create mode 100644 fuzz/corpora/bndiv/86be0b293abfbb10747c3f707673bf032f88339f create mode 100644 fuzz/corpora/bndiv/86fafa6668f5fd989ad1575267c4d59fd0dc656f create mode 100644 fuzz/corpora/bndiv/883030bf193cb683c268d2d5801396025944080e create mode 100644 fuzz/corpora/bndiv/8856bad32c80a9be73619990b669fb58034fc437 create mode 100644 fuzz/corpora/bndiv/889125954431cee0bede33c6ac70c71bad58266a create mode 100644 fuzz/corpora/bndiv/8920bb777999b5a9ce0da07cfb23223e34cf52b1 create mode 100644 fuzz/corpora/bndiv/89588e06d3a7107bc582f55875392975688c8a84 create mode 100644 fuzz/corpora/bndiv/89beeca2b2613da2b3032b93b599060bf6a0460f create mode 100644 fuzz/corpora/bndiv/8af354e0c2bfd80fd0eb8abf78ec1149a6d6b565 create mode 100644 fuzz/corpora/bndiv/8b1a11b1ee13542637dbc466e196fc49785b83d9 create mode 100644 fuzz/corpora/bndiv/8c368df3ac45e9455f0f2597cb2d96e4d11cb229 create mode 100644 fuzz/corpora/bndiv/8c8920538756bb53896f6cfbcc58addce01e6c86 create mode 100644 fuzz/corpora/bndiv/8caafc8209774e0edb14de714719bee89ceea664 create mode 100644 fuzz/corpora/bndiv/8ce301bd8db91d7f7c8c43680cf64a9d774bb386 create mode 100644 fuzz/corpora/bndiv/8d935d1ae41e9ca143376042026640563b069139 create mode 100644 fuzz/corpora/bndiv/8de3add92ce56d8a82ef19e212da448154730a3b create mode 100644 fuzz/corpora/bndiv/8e297d95f1bcc2989558676fcaccd2b660a8c245 create mode 100644 fuzz/corpora/bndiv/8f19d67cc6ba7e28c3e9c9f4eafa2372cd0efd8a create mode 100644 fuzz/corpora/bndiv/8ff7dac8dad594231eb3fd9aac117f1e98f40e36 create mode 100644 fuzz/corpora/bndiv/9267b8821ed5ea6b7c28465204a5deb225702a06 create mode 100644 fuzz/corpora/bndiv/9400a2766adfd50f470991fd7de9fc1067827265 create mode 100644 fuzz/corpora/bndiv/940b4f106c64b57b40dae5328c5e631716ad0115 create mode 100644 fuzz/corpora/bndiv/96ab556e925078e3885c2299b9b111b9714e0b36 create mode 100644 fuzz/corpora/bndiv/96b37b29faf10c8f99be3f9734539e45c88bbf5a create mode 100644 fuzz/corpora/bndiv/97f333ec4028ee3971c8c8358edd3c9d363268c1 create mode 100644 fuzz/corpora/bndiv/9854fef29aecae2209740c5b18dc590ddf6d3c8f create mode 100644 fuzz/corpora/bndiv/9973473f12b4aab002e289bb7248eca02e91dbb2 create mode 100644 fuzz/corpora/bndiv/998166386e39927361d9519c1f63d2815230ed40 create mode 100644 fuzz/corpora/bndiv/99d225147fc2b89f24b4794880da0ec80b8695f4 create mode 100644 fuzz/corpora/bndiv/9aa50b68713dc6801f711512c79d6d758cb9c998 create mode 100644 fuzz/corpora/bndiv/9aa97b0df6e936579b98b00c39e8da4efe2ccb8e create mode 100644 fuzz/corpora/bndiv/9ade514b4ab9c889aead941a0083e042d654fa1f create mode 100644 fuzz/corpora/bndiv/9b8118c49c55f10ac8d208c6a5b716cd2bb699e0 create mode 100644 fuzz/corpora/bndiv/9bf66b9e161eb61a7e62570e283919ad23487cfd create mode 100644 fuzz/corpora/bndiv/9c0780697e5813f173f7ed33cb688e4542135fcd create mode 100644 fuzz/corpora/bndiv/9caff6144ff1b27fdfe185aa7e8058293ba9f8aa create mode 100644 fuzz/corpora/bndiv/9d6ec804be7ec7076252def96de6d6a4156f03d5 create mode 100644 fuzz/corpora/bndiv/9eca0768cdadc5558ae273880e193816173795f7 create mode 100644 fuzz/corpora/bndiv/9f896dab64e848720457f14d29b54791a79643f7 create mode 100644 fuzz/corpora/bndiv/9fdce8542c3c2c8f8dd81d4588dbf2bcd76c57a7 create mode 100644 fuzz/corpora/bndiv/a00f057773d011dbc8e7f7bf46964ae9ddb50eb5 create mode 100644 fuzz/corpora/bndiv/a029c002ea8933b6f75a80f5eea1fe60fefa7783 create mode 100644 fuzz/corpora/bndiv/a02b952605f32812b5e80db0498861c7582db859 create mode 100644 fuzz/corpora/bndiv/a19c77ab0c8079fb7206826de8c86f202f27d540 create mode 100644 fuzz/corpora/bndiv/a1eabd79fa7e0ca50503199e2077d1d125347e2c create mode 100644 fuzz/corpora/bndiv/a2190c70d2440c4b900cbfc42724771dc7feeec8 create mode 100644 fuzz/corpora/bndiv/a4c5e5a879c6349ae219d85b6dd335495f893960 create mode 100644 fuzz/corpora/bndiv/a5e4da0a703eab734b5d74e51cef578da80362ca create mode 100644 fuzz/corpora/bndiv/a68f0fb9a8a9699a690022eb041c3428da2fe20a create mode 100644 fuzz/corpora/bndiv/a6a176c46fea452190990c1263e213d5f3743050 create mode 100644 fuzz/corpora/bndiv/a6bd6365b4f8137d7ac83d7d83743fd67a527064 create mode 100644 fuzz/corpora/bndiv/a6ec0752d81bb68420d1ff83d17a41aeddad931b create mode 100644 fuzz/corpora/bndiv/a733302d776bbd48ab3c22ca331ddafc7e320c63 create mode 100644 fuzz/corpora/bndiv/a768ef5d1e46aaed9114f96c9491f003ca0bf6d6 create mode 100644 fuzz/corpora/bndiv/a7c3123c36e471de64b1c7dc3ed931889bc6caf2 create mode 100644 fuzz/corpora/bndiv/a7e342121e60d4c82e44752c6cbd9be3ce7d2484 create mode 100644 fuzz/corpora/bndiv/a837923eb38798571be3173520e2e91b0bead99a create mode 100644 fuzz/corpora/bndiv/a93705903495f33a5e86780a5dccef92e9122dc4 create mode 100644 fuzz/corpora/bndiv/a9bbeb51d4f3511caf5ac74bdeb4168b763ce512 create mode 100644 fuzz/corpora/bndiv/a9e27cf829dac4fa7237ca2bbab4c8e5765a024e create mode 100644 fuzz/corpora/bndiv/aa5c30d643b0172f7c365139f1b38ec0875bdcfb create mode 100644 fuzz/corpora/bndiv/aae9a94084d480d4e54df0c0e12d34df3f88be17 create mode 100644 fuzz/corpora/bndiv/ab31d9c9b80da3de1f488c93eeb40c3544e1e8a0 create mode 100644 fuzz/corpora/bndiv/ac4881560a670298325ac61ad5c6eeac10504786 create mode 100644 fuzz/corpora/bndiv/ada05f65f2124f476f294945e484f710a0226e8f create mode 100644 fuzz/corpora/bndiv/ae4dac4dde31a32a49e5a7acbde216b32f056e14 create mode 100644 fuzz/corpora/bndiv/ae5a6c2d290a84f6d6c320095ccd4aae9dd9235a create mode 100644 fuzz/corpora/bndiv/b0b1ca76fc790645bd527d3154fa217cbfef6cdb create mode 100644 fuzz/corpora/bndiv/b16afcfc579f9bf34448b8a68d0c22272bfc4b7e create mode 100644 fuzz/corpora/bndiv/b1ce3323beaccf5ca5124264e92d7f2d45f94e6d create mode 100644 fuzz/corpora/bndiv/b26d6743480099927d3e066acf20d07f4e1499fa create mode 100644 fuzz/corpora/bndiv/b2d89284d0e4799703274a23e83353d3c0a08063 create mode 100644 fuzz/corpora/bndiv/b3357c6317a8fa743b34c41e0cfe640df302b4b5 create mode 100644 fuzz/corpora/bndiv/b3b2d13de3ba9c972db06b9daa94f17d0c8d5200 create mode 100644 fuzz/corpora/bndiv/b49873196c941a0384d44a6b7ec7d42f630fb33a create mode 100644 fuzz/corpora/bndiv/b4b179e18ca58809359875a2c1e228f4d5cc7f0f create mode 100644 fuzz/corpora/bndiv/b4e9dda6a3b5b0578897441183b1418ac80a54fc create mode 100644 fuzz/corpora/bndiv/b5175694c2af4410e9a0e1a2d3881fe09de1ba1f create mode 100644 fuzz/corpora/bndiv/b5186568c1e10706f4006b396c2989b3dd292736 create mode 100644 fuzz/corpora/bndiv/b5ee12339958835f8c9c6cb26e90259c5a1a5567 create mode 100644 fuzz/corpora/bndiv/b604c75ed8a3f111f9af607e3e81a8bebd11e686 create mode 100644 fuzz/corpora/bndiv/b64e16294c689d97e328081b6a4ffff70dc1fdda create mode 100644 fuzz/corpora/bndiv/b7ebc89222e479b92cdc2997e02ecadbd60ab1ad create mode 100644 fuzz/corpora/bndiv/b8a56e97e26996479c972552b1f3608d1e06b908 create mode 100644 fuzz/corpora/bndiv/b9f3ada49a9e3c99fd69639f6cbfd6544157b079 create mode 100644 fuzz/corpora/bndiv/ba6aa6070e0187f80bb5a04a98905b4970159953 create mode 100644 fuzz/corpora/bndiv/bb297c41dedbcc0a2caccc17c6878c8c1edf5511 create mode 100644 fuzz/corpora/bndiv/bc33cae0478a84be6040974d5be00d0323a6293b create mode 100644 fuzz/corpora/bndiv/bd26afc94b62a9dd31a4abca22d2b946fe4f55ba create mode 100644 fuzz/corpora/bndiv/bd3c33c4b75c360cd0f4637c89afc465b51719fb create mode 100644 fuzz/corpora/bndiv/be202131d6bb1d70a43e81ff58a42afb1f4e4cca create mode 100644 fuzz/corpora/bndiv/bf24158cc3fd12e9f078e50a9eca7d7ac0415003 create mode 100644 fuzz/corpora/bndiv/c134e5c32f7fb657fe69a2ffd1d714e86cb619b7 create mode 100644 fuzz/corpora/bndiv/c1b8a62637927ea2a1090dd5af60774da78da6ef create mode 100644 fuzz/corpora/bndiv/c1b91b5cbcb97112dcc382a3b3f88494f3494021 create mode 100644 fuzz/corpora/bndiv/c1b96d60c3eaa7281cc864c65544796e4649f108 create mode 100644 fuzz/corpora/bndiv/c24859d08159ff85fc00a79d344b52e49ed26383 create mode 100644 fuzz/corpora/bndiv/c253d8b904aff6b53ae4629eed27845134f1988e create mode 100644 fuzz/corpora/bndiv/c30f9ad57dee9c27f2ee6cf21293bf274c819e1e create mode 100644 fuzz/corpora/bndiv/c3cf4923fdf3dfc7438e7addf9a0fa71ddbb0a5e create mode 100644 fuzz/corpora/bndiv/c40cd2a794597bf21d59d56075ccf3c96fbee2de create mode 100644 fuzz/corpora/bndiv/c42e8706558af06bc0a8e4ff653acf159128f0eb create mode 100644 fuzz/corpora/bndiv/c449b76482e686e566522238a07f09716032283f create mode 100644 fuzz/corpora/bndiv/c48049b2efee83a7506eb356be7249152c1199d6 create mode 100644 fuzz/corpora/bndiv/c5b6f94b0bd3eca903ba18d897d96a96546a04f8 create mode 100644 fuzz/corpora/bndiv/c5da8fedfae19056df2d2679bfcdf3ff23f693a6 create mode 100644 fuzz/corpora/bndiv/c64a482d372279a28e65d08c1b0838382c1724eb create mode 100644 fuzz/corpora/bndiv/c72a30303009bc1753480d7f53b6fbd26c58739e create mode 100644 fuzz/corpora/bndiv/c78eeb301c6c80702ad4b5535638f4399547892a create mode 100644 fuzz/corpora/bndiv/c79d133257b8c377ce3586f612aec8bcfce6e874 create mode 100644 fuzz/corpora/bndiv/c7e7d25a65e20c40539962d6b4ce61b7a63e7931 create mode 100644 fuzz/corpora/bndiv/c7fcb1cdb8cb893ab3cb711eca87f443a95a983f create mode 100644 fuzz/corpora/bndiv/c861a0e04a5a922390a0027670375e9bae84dc05 create mode 100644 fuzz/corpora/bndiv/c8bd35b61bcc058f0edd8cd92d20c6fc154bca98 create mode 100644 fuzz/corpora/bndiv/c98cbd115824f71831bf2d64517a3fd489bcc686 create mode 100644 fuzz/corpora/bndiv/c9c2cbad030bd185b389800bf2126ba5cb09c429 create mode 100644 fuzz/corpora/bndiv/ca021af2a443e0ceefb582fb94edb610de17c41e create mode 100644 fuzz/corpora/bndiv/ca5c67003fa2759073146a95eb4ddf345250c267 create mode 100644 fuzz/corpora/bndiv/ca74ca2328f3a90826c0433d019da4ae3bfb9f34 create mode 100644 fuzz/corpora/bndiv/ca74d98920599b4d17a939fff1871ae5a165407c create mode 100644 fuzz/corpora/bndiv/caac574db89f9e0853fbede0987094f69aa95171 create mode 100644 fuzz/corpora/bndiv/cab8e0a4d57ab243919bcb2936eda200e8df00c3 create mode 100644 fuzz/corpora/bndiv/cc0cdfb65f817620ead2f1c904646220bc04ff4e create mode 100644 fuzz/corpora/bndiv/cc317cc0f57bd873c452aa058762dc4edeae2323 create mode 100644 fuzz/corpora/bndiv/ce4db1de190383dd8a1f29747e3693b8cbac637d create mode 100644 fuzz/corpora/bndiv/ce608e403ab894d7e4cd5e6d38867adcd5f1db18 create mode 100644 fuzz/corpora/bndiv/cea6a7909420ee1b90dd4f6aba5fb5bc83877699 create mode 100644 fuzz/corpora/bndiv/cf3fa9fabd83c705c3ec2d69ab4280dca86a1461 create mode 100644 fuzz/corpora/bndiv/cf9cdf36af4db03a15fed96e67c6d2fdebb1c0fa create mode 100644 fuzz/corpora/bndiv/d0e926b295c6707b82e75dab7d4c54420b590b0c create mode 100644 fuzz/corpora/bndiv/d12e0c521f2108d15789c462b060879a77e32ef3 create mode 100644 fuzz/corpora/bndiv/d34ad7b5d248e34a170fe10f10fa97a97c8adec3 create mode 100644 fuzz/corpora/bndiv/d34d2b4e81afda80490ac4e2415289ef82aacbc8 create mode 100644 fuzz/corpora/bndiv/d3feb66206953454df2a61f69952ba2743adf7d0 create mode 100644 fuzz/corpora/bndiv/d44fbaca1dafc7d020cc12c8d157cf29193c833c create mode 100644 fuzz/corpora/bndiv/d4711b40c708218a19dc5ce89471aa8f31b0725d create mode 100644 fuzz/corpora/bndiv/d481738026217019dbce1098a379026b65ce8823 create mode 100644 fuzz/corpora/bndiv/d72dc02868f21b0d466349b27864e54b97a0a763 create mode 100644 fuzz/corpora/bndiv/d79bb1bcccb2c62348debffa46468cec1bd5d951 create mode 100644 fuzz/corpora/bndiv/d7c15ac21bbe1f251400c77abcdd365176ef05f6 create mode 100644 fuzz/corpora/bndiv/d7e1ef35870b4517a581d598af0078b8723e7509 create mode 100644 fuzz/corpora/bndiv/d85997b89170345c0c34748f6a160c141c59a2c0 create mode 100644 fuzz/corpora/bndiv/d91fe5876f35497a5994deb37f37d8c1e2391fe2 create mode 100644 fuzz/corpora/bndiv/d98de8197234702275353dedac5e6c5e16bfca1f create mode 100644 fuzz/corpora/bndiv/d9ab70eeacd8cde0b76eb31d2c39e3cd36ea8565 create mode 100644 fuzz/corpora/bndiv/d9b608e53edcc20136615c6dcd14a8d4c2ec2122 create mode 100644 fuzz/corpora/bndiv/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/bndiv/da8bdfb2777b1c1c36354b12fa64b8356e0928a0 create mode 100644 fuzz/corpora/bndiv/db522609cbde5fbea488a2613277181d6e2ef391 create mode 100644 fuzz/corpora/bndiv/dc9cae6ee03ea4763a59282bd4e6a9b75dae65a4 create mode 100644 fuzz/corpora/bndiv/dd00743f408cdbfe23e9cafddc5dd8439aa25df6 create mode 100644 fuzz/corpora/bndiv/ddc7df37694e6398b37855345a6052cb0e9e7282 create mode 100644 fuzz/corpora/bndiv/de45be1170aefb3f94af6d517573befbdd87870e create mode 100644 fuzz/corpora/bndiv/deb64d27abb5aaf2f4c4ed19142673555fb5a152 create mode 100644 fuzz/corpora/bndiv/df99e4166ffa1e099b6d19ec58ccd94df6c052fb create mode 100644 fuzz/corpora/bndiv/dfa49705f0f7b0028e4a7c8ee020cdd9315a65df create mode 100644 fuzz/corpora/bndiv/dfb7853c29356b87269cf1262b919bc1fda7cc9c create mode 100644 fuzz/corpora/bndiv/e05c176975de6c0fb06f670094dbad52c0c0d603 create mode 100644 fuzz/corpora/bndiv/e0674bdd79d0e31012634bba51414859e34242e0 create mode 100644 fuzz/corpora/bndiv/e1b6de8fc16286d604eebd5b3315e24e562a1c20 create mode 100644 fuzz/corpora/bndiv/e2851f0f6ab15e30bf09a6c80c7075309e573b88 create mode 100644 fuzz/corpora/bndiv/e35c23a85acbe1ee9167517e50df3127bdee1595 create mode 100644 fuzz/corpora/bndiv/e3f3c5d92a91b62650c561450dc80b68901d8d94 create mode 100644 fuzz/corpora/bndiv/e4206dd9d551ce427be72b88e42cf925ac23b6f3 create mode 100644 fuzz/corpora/bndiv/e43e57cfa4ec461d0aa0bd96319abf73b3d19887 create mode 100644 fuzz/corpora/bndiv/e52d1a9ce6e7a243221a740f4fdb2798cd66c74f create mode 100644 fuzz/corpora/bndiv/e5af677d5fb32f2af26226ad7b884496c8e9d90f create mode 100644 fuzz/corpora/bndiv/e626352eb794ac3d4c609ea2b34d9b2d2035f591 create mode 100644 fuzz/corpora/bndiv/e66ab289ac06731aaf9906af585ef603c5f56fc2 create mode 100644 fuzz/corpora/bndiv/e708d7fb7f2ec0c34718482b0446f36c69f9fe8a create mode 100644 fuzz/corpora/bndiv/e73e54a61689f2e96488655331e36dc14aeccb40 create mode 100644 fuzz/corpora/bndiv/e82f861ed87572a2eb05bba728e39b5fc096681f create mode 100644 fuzz/corpora/bndiv/e83ba8a9a615527fa2afb50920c9e19325d9a993 create mode 100644 fuzz/corpora/bndiv/e90633a7e12fdd453a50f4c0dd08d6c92a83fb21 create mode 100644 fuzz/corpora/bndiv/e9a719441f8420ee9dd29a59552b609bb92b58d4 create mode 100644 fuzz/corpora/bndiv/ea0c28db1748de26874f52ec1478ad4ef885ebae create mode 100644 fuzz/corpora/bndiv/ea150682f7f722e8e1a3ab38f56d17f9749ed8ea create mode 100644 fuzz/corpora/bndiv/eaa3cf3cd3876b3d432b5df55bfd143066a6dbf5 create mode 100644 fuzz/corpora/bndiv/eb061687a11d3d77218518510aea94cccaef2a83 create mode 100644 fuzz/corpora/bndiv/eb36ade95b72fdb9bb2b9fc8854b25a6fb857c54 create mode 100644 fuzz/corpora/bndiv/ebbc30f2a3a1d7178dd7e40846ea0093be1540fe create mode 100644 fuzz/corpora/bndiv/ed48a8cdbbba962d48b94885c982f456b36ec561 create mode 100644 fuzz/corpora/bndiv/ed85a1ab65ec971214200ddbaf41673e72471618 create mode 100644 fuzz/corpora/bndiv/ee02d2c7731e14e1e30fe1c271552bb1957faf09 create mode 100644 fuzz/corpora/bndiv/ee4e41412105f71c7e9b04899c8017faa9a86cd2 create mode 100644 fuzz/corpora/bndiv/ee6f291584c27e323e8408dbce9c51296e4c956c create mode 100644 fuzz/corpora/bndiv/ef5618c93b7c2a3d938e9a31862ca9fa740443cd create mode 100644 fuzz/corpora/bndiv/ef60523a189acc1304b6233aae97a439810b4138 create mode 100644 fuzz/corpora/bndiv/ef7889b55b765eabd365991b152894025b093cea create mode 100644 fuzz/corpora/bndiv/efb2457a467147d38f1d46b9930f4f6f2d9b343a create mode 100644 fuzz/corpora/bndiv/f04e95b933bc5a30a687b167253ccb51c4ed27b7 create mode 100644 fuzz/corpora/bndiv/f098baa20d2626fa4d0cea23a3772fb9fd69681a create mode 100644 fuzz/corpora/bndiv/f18d0dd6a15817150c45493c4c5b39ac31d6f606 create mode 100644 fuzz/corpora/bndiv/f1984db83f720c69adc8fc3d7bbcd2c942011d94 create mode 100644 fuzz/corpora/bndiv/f1bf657fe43bb408474789ff25912b9b5b739d96 create mode 100644 fuzz/corpora/bndiv/f260eebedab90b7934efa0a023b43ef96b86e2ec create mode 100644 fuzz/corpora/bndiv/f285659bb4eb46db3ab99454f90a765553e8645f create mode 100644 fuzz/corpora/bndiv/f2b94e69de6099adbe1b98599bd025515274384f create mode 100644 fuzz/corpora/bndiv/f2c2ab784cd082a7a4527016336af65e28d4915c create mode 100644 fuzz/corpora/bndiv/f2f3539e68c7f8ff0dfed95b1d13dcf679a2ded3 create mode 100644 fuzz/corpora/bndiv/f2f833389f3ef31aaebfac0a40407477e44182ef create mode 100644 fuzz/corpora/bndiv/f329a7e14d690937e1972ef297a95375e730206d create mode 100644 fuzz/corpora/bndiv/f34afc58b37e7e1fcb4cb60b90db069237735d53 create mode 100644 fuzz/corpora/bndiv/f4373ca8c61f981d4fb9cdec220773589693afe3 create mode 100644 fuzz/corpora/bndiv/f4636445dc7450f2422b4a3255c335e809329772 create mode 100644 fuzz/corpora/bndiv/f48bb6d76bb808b40a1cc649971fa7f4e3c5505a create mode 100644 fuzz/corpora/bndiv/f50b6f63a1dcccb30194b9c8be5d13ee25b0a912 create mode 100644 fuzz/corpora/bndiv/f53558d5fd24525f849468c8efe1570a5ce8ac38 create mode 100644 fuzz/corpora/bndiv/f56c005e982f592426e132292a0237658503df72 create mode 100644 fuzz/corpora/bndiv/f5870e0b97ed68cecffd4e7ca6c5275eedac1556 create mode 100644 fuzz/corpora/bndiv/f6b9ed043c7483c0463db2262971b325eb3abf41 create mode 100644 fuzz/corpora/bndiv/f730abe1cd787bcc72051239b192527a7fb629ca create mode 100644 fuzz/corpora/bndiv/f7451ee72e3dd7186dc8bf31e94d04ef63fe0cb7 create mode 100644 fuzz/corpora/bndiv/f79a87b224fdb402ef5967ead4b06513b038d477 create mode 100644 fuzz/corpora/bndiv/f7b5012dc86567713748abaa61e96019ecf5cfa6 create mode 100644 fuzz/corpora/bndiv/f8b8b36d7b5470fe30dbe9361d301c42d8e9f23e create mode 100644 fuzz/corpora/bndiv/f93336126ac3cb6578506b0efa95b8c0a56b5f65 create mode 100644 fuzz/corpora/bndiv/f946222bdd5a8d0ae53c1459636079cc64c6b50a create mode 100644 fuzz/corpora/bndiv/f9af94f86a0123324d93b78a9090084ae4b9b012 create mode 100644 fuzz/corpora/bndiv/fa822f723402426ef2fb43a444cb032ff01f8f2f create mode 100644 fuzz/corpora/bndiv/fbb26198f557c82c3a12301b945057f078da74e3 create mode 100644 fuzz/corpora/bndiv/fbbbd643f669136b0a9bbfc32dc266f9f6cec2d8 create mode 100644 fuzz/corpora/bndiv/fc12e07ad9dbc5674678b2a782e2e1ae6d04b15a create mode 100644 fuzz/corpora/bndiv/fca42e7b1ee5fb12f6b23d5a87c887e36a2a1278 create mode 100644 fuzz/corpora/bndiv/fde065cd881d3025313422d2950e45362433d0e3 create mode 100644 fuzz/corpora/bndiv/fdf0b8aebab1d658ded860ae92421569361df1bf create mode 100644 fuzz/corpora/bndiv/fe6097b9a2e73eaf54f97481e6071e500b2445c6 create mode 100644 fuzz/corpora/bndiv/fe9f0cfda221cdc181bc8ea399f5cafaaf7b49c8 create mode 100644 fuzz/corpora/bndiv/fefbc63f3e4aa05f755ed0f0fec119b6fd828650 create mode 100644 fuzz/corpora/bndiv/ff05c6b2a87c7730ed0b4a71cd9f92ec22e9ada7 create mode 100644 fuzz/corpora/bndiv/ff0d9806ddb710588b6d609eace448b721b963e8 create mode 100644 fuzz/corpora/bndiv/ff3bf5f23b3544ba948c857ce01e255601edfc6d create mode 100644 fuzz/corpora/bndiv/ffc8123da53ee1d66791a3e11db9de29841f3f08 create mode 100644 fuzz/corpora/bndiv/ffe83398c4b7a3c8a6edcdff8ceefbbbac57f7c3 create mode 100644 fuzz/corpora/client/00071cbe33190f484377c82cc93e4bfa25a8da7e create mode 100644 fuzz/corpora/client/0055d7bbd9e05736160f8c99d7774318bfc74811 create mode 100644 fuzz/corpora/client/00564ec9294372aa1c602775dc653f11c23c0623 create mode 100644 fuzz/corpora/client/006cd3ea13572155d1e2885ee9236ca569ed0d04 create mode 100644 fuzz/corpora/client/008c07b523aab1e4bf2f64e709e01b214167612b create mode 100644 fuzz/corpora/client/00aa0d206777f9fea82cd4c42dbf78240ab6068c create mode 100644 fuzz/corpora/client/00b297bb74389b3817614e84c3bff2fedc35c659 create mode 100644 fuzz/corpora/client/00bd3eaacd4fabee9fe524ec043a951460d066c7 create mode 100644 fuzz/corpora/client/00c0480b32af9bfb98d503c4983540b9e3eb4d84 create mode 100644 fuzz/corpora/client/00e9106982013e62eedf4e28822e30421eaafee5 create mode 100644 fuzz/corpora/client/010d1329044c4a86ed1add072891077bc1cc614e create mode 100644 fuzz/corpora/client/011722b1b7e0aa748a65ffcca98d04575f705e18 create mode 100644 fuzz/corpora/client/014f789f1fa4d758ca29f134be6d0dd19fb5175c create mode 100644 fuzz/corpora/client/016fa2b55c0e99f30efb71214c3fbe7b420e4e60 create mode 100644 fuzz/corpora/client/01ac600dd14a714a0a9104f18547e4b9ce5cb376 create mode 100644 fuzz/corpora/client/01c2da74f7c6a7811dad23014e10b6c6006308e9 create mode 100644 fuzz/corpora/client/01d839515c0ddbe75435693c8eb8b81d2219d397 create mode 100644 fuzz/corpora/client/01f6cb2b04212e4303b8df4a5346ea6f62afce28 create mode 100644 fuzz/corpora/client/01fc3c55710d402a52255afd31372eda4f82b95f create mode 100644 fuzz/corpora/client/021100017f61e57e43e1d4319b047a4c308ef909 create mode 100644 fuzz/corpora/client/024e3782d4c6b6395a2ebf5849145eabd16fa72b create mode 100644 fuzz/corpora/client/0269861142976d8a811fa359872e0114d330834c create mode 100644 fuzz/corpora/client/027353cbc08b9166a48e660426da49a4516cf91a create mode 100644 fuzz/corpora/client/028b6a1da531f50ec0d70a039dadd3b489bf745b create mode 100644 fuzz/corpora/client/02b635d45713f0e070732b7d63f170642dc26c65 create mode 100644 fuzz/corpora/client/02bb7a45a85409a496fda75fb52efa4c7cf51352 create mode 100644 fuzz/corpora/client/02ee2745e150b327355c81e508dae28c2f0744e8 create mode 100644 fuzz/corpora/client/031de5d10830cdb813e3ada4b005ffdb7d9ce678 create mode 100644 fuzz/corpora/client/038b0ba0c6de4389740f7452b513be7bf711766f create mode 100644 fuzz/corpora/client/03ab752143df4690fc0611f04d5a843298884eb4 create mode 100644 fuzz/corpora/client/03aeb438919c57ba52e436395f3cb33b18152ec8 create mode 100644 fuzz/corpora/client/03f7982b5dc47be915cc99b747e814996f2a1937 create mode 100644 fuzz/corpora/client/0410a8099aa7b977a1e88570d78a12891cfbe383 create mode 100644 fuzz/corpora/client/0425278c0253652445456c8c543c90be2d73eb86 create mode 100644 fuzz/corpora/client/0426976bbdce6a642e9ead9120777cfe253f6ea9 create mode 100644 fuzz/corpora/client/0471c09d1aa180aaf0b1c3780c7ed6f171524b75 create mode 100644 fuzz/corpora/client/04dfa973ab9a6f30babe08b2d62eeed7c1ff1e56 create mode 100644 fuzz/corpora/client/04fb6b301c5c19a54e4d372a7c17230ef236e381 create mode 100644 fuzz/corpora/client/050ce342c2284561c296fac3dacd4894e3f80114 create mode 100644 fuzz/corpora/client/050da9c3acd2b913b851fcda25477d46458da943 create mode 100644 fuzz/corpora/client/0515d43171ab96ee00ad3c9e834f71b1c2414a27 create mode 100644 fuzz/corpora/client/052f800e283abf04a341be10098c200961becde0 create mode 100644 fuzz/corpora/client/05313f8104b23a0ac23950bbe516b2105c5f83a6 create mode 100644 fuzz/corpora/client/054b73a11025b29bc17deea05194cf3aa733ce05 create mode 100644 fuzz/corpora/client/05812834cf1fa0ab0ee21ee822a1161fdacc35b1 create mode 100644 fuzz/corpora/client/05aa473f84c58446663b39773cb74aa535c56bbb create mode 100644 fuzz/corpora/client/05b2f100006a7c82791253aed0633b69c90cda29 create mode 100644 fuzz/corpora/client/05c4401585d9e5bc74037556e079d0cb5b97f0bb create mode 100644 fuzz/corpora/client/05d156122e7f1517fa9ef5c27b7b5a53f9f40844 create mode 100644 fuzz/corpora/client/05e4189f242cf7683f1c9d7caec8c8ca62b8b313 create mode 100644 fuzz/corpora/client/06115f4347ef3925b7323848365843e1f8fdca15 create mode 100644 fuzz/corpora/client/06126bda39767d15655656a5be5adb8e1ad7fc32 create mode 100644 fuzz/corpora/client/0634e8a72c29fd1ae0f63be83d5b88615b46a627 create mode 100644 fuzz/corpora/client/06407388cd2f284f9980334aa276b7668dcc05cf create mode 100644 fuzz/corpora/client/06653fe826b3c006b1df30c57101c77994e23cbc create mode 100644 fuzz/corpora/client/069960193a4a5abe81920b70ed19779c65f247ed create mode 100644 fuzz/corpora/client/06af69415434b0b8ae942ef65392c68c89f748e2 create mode 100644 fuzz/corpora/client/06e9f030708433ca76ddf2325a1f910f10e48b6c create mode 100644 fuzz/corpora/client/07041a06b9dfa102679c15f526fa3ec2c855992a create mode 100644 fuzz/corpora/client/070b4f227c04af80e3be8a1413197609eb34a07e create mode 100644 fuzz/corpora/client/071ad27aac781ebb8f1b83e11e5c1a19e86c092b create mode 100644 fuzz/corpora/client/0725342299f60f275abde876b391d647ff8bd8e7 create mode 100644 fuzz/corpora/client/07284afb30d89142b99a1a063259ab37fadde735 create mode 100644 fuzz/corpora/client/0739254334eb613133f731fb19dd6614df81ec23 create mode 100644 fuzz/corpora/client/077635fdd48db7f1d040e715e01a8f3f486c5266 create mode 100644 fuzz/corpora/client/0785fa8536c441e41ca75b80cb17993ed3212f60 create mode 100644 fuzz/corpora/client/0791a9ec927fde528c5c34ea8417569dba92e3a8 create mode 100644 fuzz/corpora/client/080d03b666fea6bb72714924bc7e8a95d2e08607 create mode 100644 fuzz/corpora/client/0836cebdfc78a963ae652c6bb6e36edbf26e2839 create mode 100644 fuzz/corpora/client/084788cad73fb8ef97831e1a091fb45d95ba9e63 create mode 100644 fuzz/corpora/client/088c484282b744e96efac0ee912c43541b510729 create mode 100644 fuzz/corpora/client/08939ba90d0ff71c03ea041e0950e1bef3a74133 create mode 100644 fuzz/corpora/client/089e6a1f2a7776ea7987277333a8896f42dffb02 create mode 100644 fuzz/corpora/client/08ac214d762e30f5cbe6743ae8e628ebe5987783 create mode 100644 fuzz/corpora/client/08bbf8e0288523f28a84e714fcca3074323300a6 create mode 100644 fuzz/corpora/client/08d9fb79414e4640de95c9d84f50e583aec89e43 create mode 100644 fuzz/corpora/client/091ef240649c1b51b706d0a713f27798a65a001a create mode 100644 fuzz/corpora/client/0940f9b2dcd68c09ee38fcd9c20ac1cb12100ab7 create mode 100644 fuzz/corpora/client/097e50c176eea06d9b0d6110bb725b3a670abe1e create mode 100644 fuzz/corpora/client/0984e3a92016728a119be1c15f212bec562b47c8 create mode 100644 fuzz/corpora/client/098de96a6091fe6909008b2c1e8b72992ed4d904 create mode 100644 fuzz/corpora/client/09c2c6de42a078df350a8c39cbdd69ca3396c68f create mode 100644 fuzz/corpora/client/0a0d1c4395d930717d522adb8bc95eb8e1f14656 create mode 100644 fuzz/corpora/client/0a273c18de0cedfcaa05e3118652e6dadd76b73f create mode 100644 fuzz/corpora/client/0aa3d8ee546d8a3c5f884548b373af99c78ef2c6 create mode 100644 fuzz/corpora/client/0aa4da40af53759de113f18c8907e66203974fa6 create mode 100644 fuzz/corpora/client/0aacb9ed0e568023762c3e6ed2957d8775abc110 create mode 100644 fuzz/corpora/client/0ab0b132d7b360bf726658880029f6893505babc create mode 100644 fuzz/corpora/client/0adec53ab52b487ab7134e1061b3a51d86652775 create mode 100644 fuzz/corpora/client/0aed6e2c5c312df21efd08af1c2803d943922ff0 create mode 100644 fuzz/corpora/client/0b28799637c15ba18f072c7585409666638257b9 create mode 100644 fuzz/corpora/client/0b38ec03277536379f3331f75f84d11c55869176 create mode 100644 fuzz/corpora/client/0b5464547ac1a859fcc732717c1e20fed578e72d create mode 100644 fuzz/corpora/client/0b7edf35c5379f37447fa6b8f1f2c7c07855d256 create mode 100644 fuzz/corpora/client/0b99c96d766c7f77c123c559589cb722269907a5 create mode 100644 fuzz/corpora/client/0bad9239300f9850395f116033a71f7c33113d2d create mode 100644 fuzz/corpora/client/0bb44140f5bfe603b4f9e0337b29a53d08a17e3f create mode 100644 fuzz/corpora/client/0bdd7ffc54fe20b7b4f7e37695cbb5ba41a48369 create mode 100644 fuzz/corpora/client/0bec615b63fe28e9cb00f7fad81d2becb1d4060b create mode 100644 fuzz/corpora/client/0c2332b61bef176fcce97ce507e401e9adb8b8df create mode 100644 fuzz/corpora/client/0c26c60550a2bd5bb9a9c4653e869e4824ef8aae create mode 100644 fuzz/corpora/client/0c2cfdab5b7ba33e7148114912a7933cd2fa6055 create mode 100644 fuzz/corpora/client/0c3286f57d1269782c700c7db8f3d387c1274790 create mode 100644 fuzz/corpora/client/0c6380d83c726c7b101e14fa6140e7264ec7506c create mode 100644 fuzz/corpora/client/0c774846e3a8a2499f2ada027b79733929cd73a3 create mode 100644 fuzz/corpora/client/0c896ec803f62e067e6b0b7b246c4d032105b907 create mode 100644 fuzz/corpora/client/0cc045b6093b3c424934839e64f66ae7c5cdfba6 create mode 100644 fuzz/corpora/client/0cc5a9466c665e51c553b452cb4f6d549fceb254 create mode 100644 fuzz/corpora/client/0d0b3d362a4dcca050d82ba8078eef03944a7384 create mode 100644 fuzz/corpora/client/0d3142fd416ec38c2a1aa50220e36eb16f3b73a6 create mode 100644 fuzz/corpora/client/0d391a72b3647fa12a9a5a46d1d46230a4d89211 create mode 100644 fuzz/corpora/client/0d4554697c8e3dce978cb856fc210e5c44f786c0 create mode 100644 fuzz/corpora/client/0d645e2f14d7430f23ead9377d9ec43078c1bf7d create mode 100644 fuzz/corpora/client/0d7380461580c2a040474971e50c0fe3f47a3893 create mode 100644 fuzz/corpora/client/0d7a21640db897063c63284aabaee63552e4049f create mode 100644 fuzz/corpora/client/0de78ab58393c50ff547d9e3d8dbc92efb15d70a create mode 100644 fuzz/corpora/client/0e45603adef858a3a62d3a16a4f9b29bfeb38965 create mode 100644 fuzz/corpora/client/0e96963d11cb59d2bcf0d611034eb7eba9840414 create mode 100644 fuzz/corpora/client/0e9f53a4f2b6dc8505e113cf99f9bd103b73e1c2 create mode 100644 fuzz/corpora/client/0ea7897c36d8b4f43d1282a6afb5452a8c418461 create mode 100644 fuzz/corpora/client/0ebbe86099da29775d26e24e1a2cea026f1db4e9 create mode 100644 fuzz/corpora/client/0ec51740241b7a866ea5228e0059c34feddddb2a create mode 100644 fuzz/corpora/client/0ee03d621da79cecd61333da3f82fdb270327c58 create mode 100644 fuzz/corpora/client/0f01f0d717fc734901af38f0d0fed914b6bf0eca create mode 100644 fuzz/corpora/client/0f66d07b05b1320c4c10508c06376070baff23cd create mode 100644 fuzz/corpora/client/0f7fb1bd646820e4eed7c3eb69593722b8dbadee create mode 100644 fuzz/corpora/client/0fd3a99d3cbd4fa3a586a97deab1ab6f6ca7f812 create mode 100644 fuzz/corpora/client/0ff55c5e2230904f98706641c67e0c89a1ff7bee create mode 100644 fuzz/corpora/client/0ff7ca66cc7754e1d506c4a4e9e83fa8ea38ca59 create mode 100644 fuzz/corpora/client/0ffb27ffcf54d21d23c6cef43eff881e29d30ece create mode 100644 fuzz/corpora/client/0ffc89447ce0848ac7505621e5484d01dfabc2e3 create mode 100644 fuzz/corpora/client/1006f861e027d53d7a730496e627c5b535b51210 create mode 100644 fuzz/corpora/client/102d86febaf49788d10912fe05b4f7a3655656dc create mode 100644 fuzz/corpora/client/103db7a915dd4197eb81b894157337b538de90a5 create mode 100644 fuzz/corpora/client/105bf103bb63867a6fe03ab3d6bb9492a336cf0d create mode 100644 fuzz/corpora/client/10638f274f6773468397cdaa816ab001cf7f9a69 create mode 100644 fuzz/corpora/client/10828b25f4fdc42023980690ed199c90929ac41b create mode 100644 fuzz/corpora/client/10ae19aad866d132535c3c6cd463fa80ae982610 create mode 100644 fuzz/corpora/client/10bd217b6eb9ce1a8dea39f331f328d289c0f237 create mode 100644 fuzz/corpora/client/10c91def9466376504fc44b5e008b4dacefd3daf create mode 100644 fuzz/corpora/client/10d8f9f621a9746715443531a062c4af2d7f52a3 create mode 100644 fuzz/corpora/client/10e8f74982bb0f6debb69687ce1b2ecc60eaa4e7 create mode 100644 fuzz/corpora/client/110e0171699c390899bcb17acafb77de05a36669 create mode 100644 fuzz/corpora/client/1111c6e8a5296457f88c404603bd13703264782f create mode 100644 fuzz/corpora/client/1141f22ef6c553bcfef52cd8241f795a31dcaca8 create mode 100644 fuzz/corpora/client/1147a7457381d308f905ad307203ae30f84602e3 create mode 100644 fuzz/corpora/client/114c2f4d8e373a94b7252a985d32e587609d9afb create mode 100644 fuzz/corpora/client/119c4d32cd7bc87b944a98e840d8da923b399394 create mode 100644 fuzz/corpora/client/11a2095398a16cb79a680af54720a5bcacb3d52d create mode 100644 fuzz/corpora/client/11cf0fad4183278b1e5c8085920343a681169fc8 create mode 100644 fuzz/corpora/client/11dfef89eff746729956a3b3c33bb375978e6238 create mode 100644 fuzz/corpora/client/11e0aeef79b2367cb5804a006d85c2b886d23b4a create mode 100644 fuzz/corpora/client/11feea2afbc9a332a03553ebe5f588ce87ac145e create mode 100644 fuzz/corpora/client/120456022a86e0885aee95109670427014551022 create mode 100644 fuzz/corpora/client/120a3cfb04b41e631b9f7321e4902fe203128fd9 create mode 100644 fuzz/corpora/client/121b3513f5e8ac82ff3feaf863005c41b8588957 create mode 100644 fuzz/corpora/client/125f8a2bb1cc6626e9d745a19debea0f410363c8 create mode 100644 fuzz/corpora/client/1294980efbf8355868e806962f2534c6c9805ae0 create mode 100644 fuzz/corpora/client/12baa1ef48de9ae38d3fab7744b2162d910043df create mode 100644 fuzz/corpora/client/12e49fb128e486c98d3d40c917f1ffb265d9c285 create mode 100644 fuzz/corpora/client/12fb8b5a4c2d4677873c87afdfa21fa9d4ee0c11 create mode 100644 fuzz/corpora/client/12febecfbb8582ca8f18d44bb7ebd3fd29dc7169 create mode 100644 fuzz/corpora/client/130a1df2fc7bda5ee9b91cde0c17d789353ea034 create mode 100644 fuzz/corpora/client/13420ff898a8a69abc3c22a28f6f7349c523f273 create mode 100644 fuzz/corpora/client/134a9b1ea276d19871a96977518fabbdca335438 create mode 100644 fuzz/corpora/client/135bd6fed89a5572e67d2be28ac6847580a5b32f create mode 100644 fuzz/corpora/client/136818520bd63085924780081111618c5f139316 create mode 100644 fuzz/corpora/client/1371f3327fdc4982111c302fa45f296567e9f9c1 create mode 100644 fuzz/corpora/client/138aaaf28988badaa0628f8227466fc463322a43 create mode 100644 fuzz/corpora/client/13b7c1bd8e36e238ebbb57fe7ff5e2baf6a3a7d8 create mode 100644 fuzz/corpora/client/13be810b632eadc831ea70abf0edc0ad95930399 create mode 100644 fuzz/corpora/client/140b8163afe4af76c0eedeb65b7984e326b5cb44 create mode 100644 fuzz/corpora/client/1414d50ded016ab3291f63f5970df88e26055dd3 create mode 100644 fuzz/corpora/client/141802a67af39055d1b86bfc53fa2aece8b8880e create mode 100644 fuzz/corpora/client/141a69cc91aec78fa8e5da96495e3eeedfac335a create mode 100644 fuzz/corpora/client/141c3ba1b01e27d63bae0094d9de61890bd7c893 create mode 100644 fuzz/corpora/client/1423304462cbec49377d06e2e97a9a4e4c42b777 create mode 100644 fuzz/corpora/client/14323d64a538caa5b77425a73b612e895e499a42 create mode 100644 fuzz/corpora/client/145695921679963739e797bd05eb906ff0793efc create mode 100644 fuzz/corpora/client/14a38df2a3713a5b638efbe84fb2227253879422 create mode 100644 fuzz/corpora/client/14a61b7f873c7795ed0b4be6d2b95972559c52fa create mode 100644 fuzz/corpora/client/14b029cfa9528cc56c3d581ca95d0639dc9ef618 create mode 100644 fuzz/corpora/client/14d595176b036e7dff11616a55388eedd9bd0379 create mode 100644 fuzz/corpora/client/14ecbac7da083efe53e637ec6d9c3fa044730865 create mode 100644 fuzz/corpora/client/14f3ae181b860435bf2df4022dca21f35f719197 create mode 100644 fuzz/corpora/client/14f582eaccdeeeed8eeb8b4e660649cd6ea82bbc create mode 100644 fuzz/corpora/client/1539da5fc1e3ea8bf41fa73ab838942b9c839c72 create mode 100644 fuzz/corpora/client/153ad527d49b45a245e35be057bf7d1cbf72920f create mode 100644 fuzz/corpora/client/154516e4e49cb38de6cb7822d966132c4bb44d5a create mode 100644 fuzz/corpora/client/154575db547ed2ecb7addbd296263c3a0dff9c48 create mode 100644 fuzz/corpora/client/154d5cfcca05c43f64ff2163c3e84ee4c503b358 create mode 100644 fuzz/corpora/client/15da325dba8be86e1e1223df49c2a81527003cb9 create mode 100644 fuzz/corpora/client/15f419436400637cc395518db6f432a05ff4ab1c create mode 100644 fuzz/corpora/client/162db6ca0a23ed23721bdcb30d981ac882334d63 create mode 100644 fuzz/corpora/client/165eb9f3d21dc0ef3d13448bfe756be0ee42b270 create mode 100644 fuzz/corpora/client/1672c2f40babff7dc598f0bbcb07110e2d1d385e create mode 100644 fuzz/corpora/client/16a017147ccf720b47accfc671aaf34e567d17f4 create mode 100644 fuzz/corpora/client/170e23f7265930ba596bfac8b8f525ce7dc8c716 create mode 100644 fuzz/corpora/client/171f5c85e320cc71aad49dca2ffe5a5dc7378f5b create mode 100644 fuzz/corpora/client/174a5d1967b663c745d76a638a33c21738061c5e create mode 100644 fuzz/corpora/client/17549168685b6888162fdd03058ee9cb520c5501 create mode 100644 fuzz/corpora/client/176a4588598d891838781e3c5b5ff6cd43022c58 create mode 100644 fuzz/corpora/client/1795e458c97fa8fd321b01833e894c299a79b612 create mode 100644 fuzz/corpora/client/17a8e79c5be01dd6dfbc269db7f62f64fb09cec0 create mode 100644 fuzz/corpora/client/17b3099f83dc658d1598c1b144f669737cb10348 create mode 100644 fuzz/corpora/client/17b49adf0ed511a0d42aaf11473a6d9aa2d3c367 create mode 100644 fuzz/corpora/client/181014feb98e71e25daff5f3682566ecde7ec49a create mode 100644 fuzz/corpora/client/182a0b170f80d943077660b49460e584b627d712 create mode 100644 fuzz/corpora/client/182beb2b747cd1d82e2af1123fc95115959e4dea create mode 100644 fuzz/corpora/client/18333dd73c2810d58c92c16605e6a5344db3c2d2 create mode 100644 fuzz/corpora/client/183f8c9678683b9f5a77f634922356b0a6dcafd5 create mode 100644 fuzz/corpora/client/1843bb57177497722ebd82a3120b240af8f74456 create mode 100644 fuzz/corpora/client/188aaeb811968701ecf843111a136917bc44b7fa create mode 100644 fuzz/corpora/client/18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 create mode 100644 fuzz/corpora/client/18c09d12f53dbf7d89d946e253c0abd701e536a9 create mode 100644 fuzz/corpora/client/18e83c26bbb04db356bb462fe68bd28460e3ff25 create mode 100644 fuzz/corpora/client/18f029907549430e8e8814f23a15315bb25d981e create mode 100644 fuzz/corpora/client/19228c057075554683cfe59bd592db6df4b705e8 create mode 100644 fuzz/corpora/client/194f625bbbaafe2a3da24cb1125e9c3ba3ba6764 create mode 100644 fuzz/corpora/client/197fe23844923e3becc3596d36e0f950bdfa73cd create mode 100644 fuzz/corpora/client/198d44c9348d06dabc6bc37dad3081c36a99a08b create mode 100644 fuzz/corpora/client/19b265a4f07f21b9de142dd023a9ce0824b4d525 create mode 100644 fuzz/corpora/client/19d68e2b5172a1523357f950296066ebc2971dd8 create mode 100644 fuzz/corpora/client/19ef22ab5dded08db55dbeaa1973250c91603fae create mode 100644 fuzz/corpora/client/1a16c971b875ea1b815c33ea5d44aa584d85c603 create mode 100644 fuzz/corpora/client/1a19878d1d28e8546c8cf2091720cc18b29c3829 create mode 100644 fuzz/corpora/client/1a2aff65bee0d53fb6a58175790eba98ce85da22 create mode 100644 fuzz/corpora/client/1af1e289adc4d7492f75b7bb42ce2fe49f8a6ad1 create mode 100644 fuzz/corpora/client/1b1817890e1672e9dd69d28b55fe34502f99a8fd create mode 100644 fuzz/corpora/client/1b28c586d421bf4487a171963ebcd3d0cfd4561c create mode 100644 fuzz/corpora/client/1b37b33f4cc5716461bee441a5cda466b6468f88 create mode 100644 fuzz/corpora/client/1b3f40905a112a005303a805c1054696cc14dd46 create mode 100644 fuzz/corpora/client/1b458a091ed6d594bf9881ec558792db23857f8e create mode 100644 fuzz/corpora/client/1b69391c069dedb42a8a98fb1bb8a91a1b02449c create mode 100644 fuzz/corpora/client/1b940ccde9e898dde8dee41d21e581fe5bcb3c64 create mode 100644 fuzz/corpora/client/1bf29946fa34035f2744f255a581b3730462775a create mode 100644 fuzz/corpora/client/1c093cfb87fb2754a55e298ebc3a2e17a6e9726e create mode 100644 fuzz/corpora/client/1c14ac122c0ae4a67c9ef6e9b4e848483f895ef1 create mode 100644 fuzz/corpora/client/1c2498bebe4af804c6853e391601e740ce623862 create mode 100644 fuzz/corpora/client/1c33c53e602a10fd1897c7f0de7b22b6ddcd4f7f create mode 100644 fuzz/corpora/client/1c3d9a1f12861383e57e366d1e90ea3999287164 create mode 100644 fuzz/corpora/client/1c76bd4273acec58bfd4db4df7975eab6e7b1719 create mode 100644 fuzz/corpora/client/1c8cd48dcea9607877b7f1c15bfd3a8f096559f6 create mode 100644 fuzz/corpora/client/1cf9d47b461dd71cd9c02a8ce873546e27f96321 create mode 100644 fuzz/corpora/client/1d92f5bfe0270ab938b478dcc770f6f9843cc92a create mode 100644 fuzz/corpora/client/1db34dc49df12fa5dfa8226358a89f93e2e11e9d create mode 100644 fuzz/corpora/client/1dcf1eb8208ae1fdb924815ef0a58c0a73469442 create mode 100644 fuzz/corpora/client/1e14ed953f0c7e39fcf8ca36ca775c17f53799c3 create mode 100644 fuzz/corpora/client/1e51b1df99770c8f457cca8cc79d7ede2e40827e create mode 100644 fuzz/corpora/client/1e6a17655b609fa0e9b40cc60e67254bd99128eb create mode 100644 fuzz/corpora/client/1e6dcf1a821fb30297e202f8dabe7797066d57cb create mode 100644 fuzz/corpora/client/1ea83947633165b8760bc4bf4d80ed75dca2a2a1 create mode 100644 fuzz/corpora/client/1eb3bd69bddbef1101b64102b4b0faa8466aaff3 create mode 100644 fuzz/corpora/client/1eb7621a57c79c965afb2ff7fdfae526acbd51c5 create mode 100644 fuzz/corpora/client/1ec5ea10a3d57074bfb334268908c3c74512b161 create mode 100644 fuzz/corpora/client/1eda0fa0f934d30321d13a0c396c52f19420c1d0 create mode 100644 fuzz/corpora/client/1eeaff74f0ecc2d4f84fb878c896f1300bbcdc3b create mode 100644 fuzz/corpora/client/1ef4d3c7b8ff0c1baa4cf3038e46f27d0fc04988 create mode 100644 fuzz/corpora/client/1f6ff348eee752357b13d30f16a1836318d2b821 create mode 100644 fuzz/corpora/client/1f83f7bc387aa7b303d5c76d968fec4cd22c3acd create mode 100644 fuzz/corpora/client/1fbff08d3c2e047f3230335e9fd417516e2b04ba create mode 100644 fuzz/corpora/client/201029fd3d1ec54ee754f527a982f733f9ca6cad create mode 100644 fuzz/corpora/client/20369530488a82d9401b88cecbe4f452eaa5a787 create mode 100644 fuzz/corpora/client/2054de61e618a7fed08e99cf110c9e7a8299fc3d create mode 100644 fuzz/corpora/client/209cbffa376c13b3f0b4fb0c4c82844e312d5ba0 create mode 100644 fuzz/corpora/client/20ca23c76c3cf41cb03c5abefa3e0132a03a4e51 create mode 100644 fuzz/corpora/client/211409fc97f3a524620ac07f12e50f9f2b0fd10e create mode 100644 fuzz/corpora/client/211ae5ada385451741696b47b86ff8674a8a7f9e create mode 100644 fuzz/corpora/client/213c0db54109bab83f9b1320851c51f98d013234 create mode 100644 fuzz/corpora/client/21509b6a97a8ada696fb8a3f8d8e693a57bab655 create mode 100644 fuzz/corpora/client/216131af6426b00db9bbd2059f6b7585200b4fd7 create mode 100644 fuzz/corpora/client/216b77a3718d7cafbfb04cfccab8a256c6fb844a create mode 100644 fuzz/corpora/client/2184025175502a407dc79f5ff391971d721d2daf create mode 100644 fuzz/corpora/client/21e10308553d8d955369fd1ecf5becad924a5255 create mode 100644 fuzz/corpora/client/21f79a63ff03fe52e3852a495e5d690a842b000b create mode 100644 fuzz/corpora/client/21f8080b3c77593517c1147c23a21b2ecd012ee8 create mode 100644 fuzz/corpora/client/2227f323702493299c94088072489e780f82de5c create mode 100644 fuzz/corpora/client/222b4aec0bb5decf67ad247cf0ec61f5a7da4670 create mode 100644 fuzz/corpora/client/222d0aa90f89ade90ede1c603f476c3668d5c700 create mode 100644 fuzz/corpora/client/22337305a609ca7b0c89beaffc185b26999f97ba create mode 100644 fuzz/corpora/client/223c384291d9c5e0efa65f0c2590ed77005338b0 create mode 100644 fuzz/corpora/client/224f0e8804f38443b6db6221dcd9a318c6895162 create mode 100644 fuzz/corpora/client/2253ca39ba7a616201239001282186957d3d6302 create mode 100644 fuzz/corpora/client/225640aa4c4c9c07efb846d1e3a899eafa3f5fd5 create mode 100644 fuzz/corpora/client/2270fce0fe6d9f6f6d1e51a7dbf377dd0db277a6 create mode 100644 fuzz/corpora/client/22765ef9ab4864b01c6c97f00292678af570937c create mode 100644 fuzz/corpora/client/228f0fc2f6ebef5b752289bebf3c43f7769bee14 create mode 100644 fuzz/corpora/client/2298f0465b498aa5f397076e69dafc326859a9ac create mode 100644 fuzz/corpora/client/22a79c24f2c99f2598f4338fc936227b912f6c8f create mode 100644 fuzz/corpora/client/22a8534adb7a277f0c281cd17a2e632f756cfb41 create mode 100644 fuzz/corpora/client/22b27720ba0410cfd580a404de2c1c168817d0cf create mode 100644 fuzz/corpora/client/22c9ef74760d14162393993e91e41188d6b2d857 create mode 100644 fuzz/corpora/client/22cae63d817a784b8b88ac75de1f8544a7df731b create mode 100644 fuzz/corpora/client/22e2d9ea68472124396ad6f84903072d19b2422f create mode 100644 fuzz/corpora/client/22ffba547c0342d412837bb27cdc2ac516b5b6dc create mode 100644 fuzz/corpora/client/231cbf62ba51404b850bdbbeda2d69e91f1a9b40 create mode 100644 fuzz/corpora/client/231ff465cab0ca58a1623f1ad8117f0a28edf1a0 create mode 100644 fuzz/corpora/client/2324f437d62c05cfa4d5c1cf6d48ed4686a3c8cc create mode 100644 fuzz/corpora/client/23363aa38c098a2e178b99faeb7ba645e6dd3eb7 create mode 100644 fuzz/corpora/client/23364c2e120d0aba88e57e87e17cd6b250147931 create mode 100644 fuzz/corpora/client/233d284cee061204e4082fa34e9813eebb28d22c create mode 100644 fuzz/corpora/client/234563e2eca970c4be23379a80a2da552c43e356 create mode 100644 fuzz/corpora/client/23ab1f6a342477a8dd83c117dbfbdea0df1638ed create mode 100644 fuzz/corpora/client/23d569d4e79fa8ffe7e63b2113d20d208d2a4727 create mode 100644 fuzz/corpora/client/23d5d873d91f681aad9b36d9f89aec995610d394 create mode 100644 fuzz/corpora/client/23ecc4b75e83bdb7f46856961ab7dbad659a83b5 create mode 100644 fuzz/corpora/client/24032cc6b7a36245cee0cc243b563f6d2d834ca8 create mode 100644 fuzz/corpora/client/2431994e49cfbc09858c3723024a71348cd944c9 create mode 100644 fuzz/corpora/client/24367ec942c111aa7df6387ee160aa56ce3cd395 create mode 100644 fuzz/corpora/client/2461511fda94ed9b4989b60f6eedf23a053f0061 create mode 100644 fuzz/corpora/client/247cd277267ba1478413b17998ed45fb2c4be9fc create mode 100644 fuzz/corpora/client/2488f7b0d46ba83bc224903cd4364e50559e8d86 create mode 100644 fuzz/corpora/client/248bca85824864305865923052d8db04cb805d76 create mode 100644 fuzz/corpora/client/24afe9d43d1337d271ffc1417af0158e3e49a810 create mode 100644 fuzz/corpora/client/24c95a6f842da0558659bca8d4d2c997e04f2189 create mode 100644 fuzz/corpora/client/24daadcb4c57102c6045a6aec88d96ff3e17313c create mode 100644 fuzz/corpora/client/251a94768a2bbee217692572867144affc89e1c5 create mode 100644 fuzz/corpora/client/252f2d1b8dd2bbbb3a12ba16672a77ae84f4c0cb create mode 100644 fuzz/corpora/client/2591edb5c1f6db821a45969f00589fe2d53f83ff create mode 100644 fuzz/corpora/client/25ad19d88cc25c531597aae66048e1f221b78c72 create mode 100644 fuzz/corpora/client/25bdf41c830f36e175db2c8cb8bfe7a26420c991 create mode 100644 fuzz/corpora/client/25c34c3ab5a8e581d897f65ea125643d27fc151e create mode 100644 fuzz/corpora/client/2669f9d94fa5df9082975bfa153a6d9e6de41310 create mode 100644 fuzz/corpora/client/266de411bfa71713f8cccf06eb4186c3e5df73f1 create mode 100644 fuzz/corpora/client/266f260ee767c93a00cab040c148c196f7927252 create mode 100644 fuzz/corpora/client/267b9a3e8bb875b0dbfbaa18be6f86fa0841d78e create mode 100644 fuzz/corpora/client/268791cd795fe0e1d47a28d2bcf1ae12b4bddc42 create mode 100644 fuzz/corpora/client/268861ef7e8b3cd17bfdfd6bfc7122322ca9e879 create mode 100644 fuzz/corpora/client/268c433413e52aebcb8fa4f22d12a231de89ba30 create mode 100644 fuzz/corpora/client/2690bce479f37231edf93ccf793bd1f87043f475 create mode 100644 fuzz/corpora/client/2696e829c0ba78163cde564f8406854dd182a70b create mode 100644 fuzz/corpora/client/26cfab3fd186d0646eb904da2b04f755eac5c51a create mode 100644 fuzz/corpora/client/271b1120b25b9b8b9d1f13e4cdb157fc8baf3fb2 create mode 100644 fuzz/corpora/client/273101eca8e646fa8faabbe240bc2bffd7150b92 create mode 100644 fuzz/corpora/client/27ccb602b98c426617c1bc6aae54e38d204bc115 create mode 100644 fuzz/corpora/client/27cf7bafaa4728a4b653c94752aa493dd387031f create mode 100644 fuzz/corpora/client/283d130e63cade943fad64a8b4f4b4fac9bbfaf2 create mode 100644 fuzz/corpora/client/2889d08f0ed4642e46df3c5a6282469f2d0fab4e create mode 100644 fuzz/corpora/client/28960c98f39a369dc294aad058124cf029ec9ddf create mode 100644 fuzz/corpora/client/289914adcb9f9f57c599efc794817008887085c6 create mode 100644 fuzz/corpora/client/28a199310c12407b80c92386a48ad20ac4c4939b create mode 100644 fuzz/corpora/client/28ac4801a0f09bd47b210df0d001ccde82c0c178 create mode 100644 fuzz/corpora/client/28d791024aac4232138e3a42447433a81b04dd6e create mode 100644 fuzz/corpora/client/28dd43279e987ba2fe2d9a2d7562035d2aec2372 create mode 100644 fuzz/corpora/client/28e6f61662d9e396b58eae9f08d9e80a1a126646 create mode 100644 fuzz/corpora/client/28e78d2629b53fc5fb0e40e08bd4f8f279707d90 create mode 100644 fuzz/corpora/client/28e7f4ba2607f33430bf74986e1a008f3507348b create mode 100644 fuzz/corpora/client/28ef6c86ca9b7d5f520271ce88b8564f1950dc68 create mode 100644 fuzz/corpora/client/296702ef52ea7757c552cb4666b3a582b0ad874e create mode 100644 fuzz/corpora/client/297fb8963f16f26493cd047549622636757cc3b7 create mode 100644 fuzz/corpora/client/29da3ff5f1a205b416374ee4835dc07becc93e4f create mode 100644 fuzz/corpora/client/29e724648601bd9b2fb04e47b76455e153e74bd5 create mode 100644 fuzz/corpora/client/2a57460a1c2792e8349443bafca20002f6a161bc create mode 100644 fuzz/corpora/client/2ae9c8b256ded687800abd68397357ea89488ad2 create mode 100644 fuzz/corpora/client/2af69f3deb1f1d22e658a813c11073ea11aefee1 create mode 100644 fuzz/corpora/client/2afc7c4bda5b2ea6ce35be821477e2ce501f7923 create mode 100644 fuzz/corpora/client/2b0851c369903d9a49b5ee248e1b5399297941ec create mode 100644 fuzz/corpora/client/2b169fdfb3ac7a2ac172a220ebfd59ead54298c6 create mode 100644 fuzz/corpora/client/2b17b11d52511d9903349c77fefa743e43e4defa create mode 100644 fuzz/corpora/client/2b4cece16932e8b35af33a8d9630dcb0bdddbd4a create mode 100644 fuzz/corpora/client/2b4dbf27f1ac84529545e2c6d662c528da7d8a80 create mode 100644 fuzz/corpora/client/2b5a8502ef7acd27ac647aa219e43ae69d33ecf9 create mode 100644 fuzz/corpora/client/2b75eab7fa2fba9d451d6d39064350f1be9625cc create mode 100644 fuzz/corpora/client/2b767d6ba3f690e26acecfc2acc0472bb5ace5d3 create mode 100644 fuzz/corpora/client/2b76a2b52ba46b31e3bab9e4bf2edae770dd0174 create mode 100644 fuzz/corpora/client/2b7a66b58f18ca91d262abfa4ba1187606895115 create mode 100644 fuzz/corpora/client/2bd75e3d4d48570769662121ee06f0b5070bb15b create mode 100644 fuzz/corpora/client/2bda3ad46f971710412759014a9fa66671dec688 create mode 100644 fuzz/corpora/client/2bdcefe9cc87969af7bcad7f6b63b706fa0feed7 create mode 100644 fuzz/corpora/client/2bfa3dd2b2845abe039b5ca5f3afc334fdd0b8be create mode 100644 fuzz/corpora/client/2c4723ce319b693870e84f5edc764c9cc275c189 create mode 100644 fuzz/corpora/client/2c473c6c9b20b0cfb33c6beb47d7d4a8cccb9104 create mode 100644 fuzz/corpora/client/2c50314e5d6bfc80f996c2fec93ff72355de41dd create mode 100644 fuzz/corpora/client/2c5453597d62df736b0b2b4b39e74295d1dc5e7c create mode 100644 fuzz/corpora/client/2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 create mode 100644 fuzz/corpora/client/2c745ad58515d83bf36205ed2e062e8104d2d50b create mode 100644 fuzz/corpora/client/2c78d44c9089c8fb4838a379917f03415ba70700 create mode 100644 fuzz/corpora/client/2c7cb73cee4ddb3a2c6a69e0c9d4fda178810beb create mode 100644 fuzz/corpora/client/2c839d341fde6bafac6c55905bdf3b9b9d677bc1 create mode 100644 fuzz/corpora/client/2c872c6de6f224889eb250771f1cca9f9546aa2d create mode 100644 fuzz/corpora/client/2cab7a3ce75492f9ed50da2355454202eeecd332 create mode 100644 fuzz/corpora/client/2cb1da8b08cebdac2e0f22262a18799473b1a64f create mode 100644 fuzz/corpora/client/2cba911b819d5e0c5876c30d3b7f96a41246410c create mode 100644 fuzz/corpora/client/2ccc28f8d5315a2257ec8c902f6b97087eb382ea create mode 100644 fuzz/corpora/client/2cf455ff26153751e30c816294c7611716344cfe create mode 100644 fuzz/corpora/client/2d1d3248f4671e174683051c263e752f8e57aa1e create mode 100644 fuzz/corpora/client/2d2f06ffd512f7454945601baca3c7b42f1edfb3 create mode 100644 fuzz/corpora/client/2d395f4fe035526ad874775ede1e97ae00c5eee7 create mode 100644 fuzz/corpora/client/2d71b09a37f18102dea96dad0c197402b9fd4d55 create mode 100644 fuzz/corpora/client/2d807b57a42c13f18abbbeb360a9d5d98c6ca74f create mode 100644 fuzz/corpora/client/2d809dcf1f09df50568505d2d74eb534905206ea create mode 100644 fuzz/corpora/client/2d94013f42d3587ebbeef09f917f3cf900390592 create mode 100644 fuzz/corpora/client/2d94f8707a91b534e049967f45b6e6b8aa07c521 create mode 100644 fuzz/corpora/client/2d9829bdbc293722aaf280989a396664fbc67a3f create mode 100644 fuzz/corpora/client/2da02deb9068926b9789fc11a6550e6e035d7950 create mode 100644 fuzz/corpora/client/2da591dfc2a668c604431d10abc2c6fcae39a48f create mode 100644 fuzz/corpora/client/2da60e397078136aef4d4538f5c1fd1b54b676ef create mode 100644 fuzz/corpora/client/2dac66325ea94579f6d689f8137a8dfa157dfbb2 create mode 100644 fuzz/corpora/client/2e032b08e0e7165585da2859633de5636e9d5a4e create mode 100644 fuzz/corpora/client/2e796a9671ca837babb66bea7d6e51be7a3a5cee create mode 100644 fuzz/corpora/client/2e940ee6b5e9d69329cb607e566a0a7e3faf284e create mode 100644 fuzz/corpora/client/2ea5a4b6bbcd59da1bc96758a50e40fd8b031d9a create mode 100644 fuzz/corpora/client/2eb2367ee4bd87f859b556ba387b073714c1968d create mode 100644 fuzz/corpora/client/2ee5bd5c84f31a1410d4db7e3bb027911f0d47ba create mode 100644 fuzz/corpora/client/2f02590a0793b5a8bff6c641f24b07751d7c8e10 create mode 100644 fuzz/corpora/client/2f58073fecfd59d6b80db8130eabdad492d578a7 create mode 100644 fuzz/corpora/client/2f7750bf142ea5d080d50e4eabca9a26e5510b06 create mode 100644 fuzz/corpora/client/2f7a7befe2eacdcffac4fc5c024174d04f39104f create mode 100644 fuzz/corpora/client/2fcf92401bb2abd7ecf56607fa5e91cd4412fcb4 create mode 100644 fuzz/corpora/client/2ff52b2b71486d7ccd6f7f77fae82b8becb5faab create mode 100644 fuzz/corpora/client/2fffb93d1c2a7a9dcbef30ad29717cee17eceb0a create mode 100644 fuzz/corpora/client/300f135b1302267afe76e0bb0e80c1c4cf57c601 create mode 100644 fuzz/corpora/client/3034569dc2e69fc9d0ef3449381ed3533fbcfc89 create mode 100644 fuzz/corpora/client/30413d0e3d1795e20a6fc89b2bc039b213a36fcb create mode 100644 fuzz/corpora/client/3047c824d1b54095241e09dc47cbd0b4d6759e0e create mode 100644 fuzz/corpora/client/30495c402dcdb45155415607469d9baf91b8156e create mode 100644 fuzz/corpora/client/30b96a3ee77d5f96dec793f9e8f7c2f5663762b8 create mode 100644 fuzz/corpora/client/30db66a6f95fb4df531e620689eb44e9f3e428ee create mode 100644 fuzz/corpora/client/30e1ca767816157f21357accef7cc29bc14499fe create mode 100644 fuzz/corpora/client/3107a66d3662feb8e3cd781aa9af9defd4c7db28 create mode 100644 fuzz/corpora/client/31b7a562dd81312f3dcd5d6b3e4dbfe1d2ab5116 create mode 100644 fuzz/corpora/client/31bb4f70a71adf9cb0adefd4aadf9fbe1a25a135 create mode 100644 fuzz/corpora/client/31eda93a5fbe4abafa2140818c912e5a72f2d43a create mode 100644 fuzz/corpora/client/32001f87d57c0d7b260f7779f2c499859d7f2909 create mode 100644 fuzz/corpora/client/321bf24b9d80450e96d84ad8aac002e338d99bc2 create mode 100644 fuzz/corpora/client/324d3734d962d718e23536429788d328a81e0704 create mode 100644 fuzz/corpora/client/3256119ab96da3ea1ee50c47a2b8781c3dea8b3e create mode 100644 fuzz/corpora/client/32640186bcd809f301393a4c6b5db177c22f7133 create mode 100644 fuzz/corpora/client/329cec865f1a64fd0644a648cb86a510ae3d6ca3 create mode 100644 fuzz/corpora/client/32a2b0616ab084adc7e30d087737085c3cd7018f create mode 100644 fuzz/corpora/client/32beaf822db39db75307402ea58dd6480ce0ffbf create mode 100644 fuzz/corpora/client/32d84d2b74834021f9be5c433aaf46136390a3f5 create mode 100644 fuzz/corpora/client/32e17f50517146768c9a47b86c61523f70796d17 create mode 100644 fuzz/corpora/client/32f3b09897fd14b691ef9df413c563a5ed010317 create mode 100644 fuzz/corpora/client/3327148340a956e13c335c8f5de4b36d2006ba4d create mode 100644 fuzz/corpora/client/33b43db2bc461b1ddd85020449b4776fb7cfbf58 create mode 100644 fuzz/corpora/client/33b5dce0dc50e5bcd4ce68f949f681a4e546faf0 create mode 100644 fuzz/corpora/client/33c931309638367df3954024eb0328756cbd8e3b create mode 100644 fuzz/corpora/client/33cda12282158ba25c89adb9c9f63d7ea15e2b91 create mode 100644 fuzz/corpora/client/343371766f1a0708e85f1117b6f7206fc99b539c create mode 100644 fuzz/corpora/client/3447baa5749505bd5106bc8940929e552e1cf1b5 create mode 100644 fuzz/corpora/client/344fe0c5fe6ff723286d83f3e6c9f74dfe0ab7f5 create mode 100644 fuzz/corpora/client/34541f626470b171388498faab41fab8b4122a06 create mode 100644 fuzz/corpora/client/347869bb45903b5189fb0c93c4dff3af14d1bb4c create mode 100644 fuzz/corpora/client/348baf9b57a4a817d58439beb37f945f471f74ab create mode 100644 fuzz/corpora/client/348d6863c12983c44420b798139f21a4773d07a5 create mode 100644 fuzz/corpora/client/34a36018f4fc246933708d0ac7d6f29f71e8c339 create mode 100644 fuzz/corpora/client/34abea6b0edaba25b224f823ae91e8375d7a7140 create mode 100644 fuzz/corpora/client/34b727cc0eee608d13e9c683fa5d7559f3bad510 create mode 100644 fuzz/corpora/client/34d323188c04106d31fef233f3198db9b35ef291 create mode 100644 fuzz/corpora/client/34f0b0bedec22d8a49d878af8903733f8cdd7047 create mode 100644 fuzz/corpora/client/34fa71215d3a91975b549c371e13236e05f97859 create mode 100644 fuzz/corpora/client/3507650cb343c9676d2a70691a509d06319c3a3d create mode 100644 fuzz/corpora/client/355f26680f51d3401a2e74dc803d0fe075fd83f2 create mode 100644 fuzz/corpora/client/35604b6431e63142f19c8add678077fd77bda2e6 create mode 100644 fuzz/corpora/client/3568c55adab1ac1eebd3c920460db20651a8b804 create mode 100644 fuzz/corpora/client/3596fafeb7d82e16ce0d454507ade09ee1aead87 create mode 100644 fuzz/corpora/client/35b1d1d9ba0a5e964f0fd90f4b54ab15307cfb1b create mode 100644 fuzz/corpora/client/35b35e9929e371d6487d7012de7fdafb740e7aea create mode 100644 fuzz/corpora/client/36065c921d38ad69b82cba89ed8bb7aa20522ad0 create mode 100644 fuzz/corpora/client/362e084c3a6d688c2cd6b631ee676684de00c869 create mode 100644 fuzz/corpora/client/3650fa171f0ae12242f23e5e282ce149e396ef31 create mode 100644 fuzz/corpora/client/36c399078bbd188f617c7533b2aeaf83c85b7ace create mode 100644 fuzz/corpora/client/36d8043dd70a82ffb3e82a3a4e360a2007d85fbd create mode 100644 fuzz/corpora/client/36f44e24d6aca4247d53f543f95df45f5e96d373 create mode 100644 fuzz/corpora/client/3716f5162f27c323fc154f900fac772ab1fb9e8e create mode 100644 fuzz/corpora/client/373254ae2e191ec0f4bb0e62ad63cc4e8b6aaac3 create mode 100644 fuzz/corpora/client/374566d471766486329b66593035c67a89e6f4b1 create mode 100644 fuzz/corpora/client/3754a83a48b5ece5435b185c99f93da0a222e16b create mode 100644 fuzz/corpora/client/375a2f25d36328c2e2d1fd42aa0b00974263aae3 create mode 100644 fuzz/corpora/client/3787c7ae759d117c7416d8468d0195cc9fe1e059 create mode 100644 fuzz/corpora/client/37947bf20653e8d382fa2b5542139383b79dd9f0 create mode 100644 fuzz/corpora/client/379656f9a747725c433e1751b301c9fc5df495cc create mode 100644 fuzz/corpora/client/37b2f70ee401ef26f4161d2a995fb3dc254cc430 create mode 100644 fuzz/corpora/client/37b592940ff246229a30abacc645cc2c74f3c38d create mode 100644 fuzz/corpora/client/37ba9f6306cb0649331e886976305fae1ce86acf create mode 100644 fuzz/corpora/client/37cf60ec71a229b5f69c7055cb526f66c0d278e7 create mode 100644 fuzz/corpora/client/37d5f03bd21601c2fe139589d6295ccb9b2031d6 create mode 100644 fuzz/corpora/client/37ff5037a71ab727016ecb6fef853d8ef3998a10 create mode 100644 fuzz/corpora/client/3802781ea5df312230ae05b88d66f500f0900a46 create mode 100644 fuzz/corpora/client/38183ed3113981e532e78b8ef5797e991cdb6c95 create mode 100644 fuzz/corpora/client/38339db40cbba4829d1337deb476f8d5367090fc create mode 100644 fuzz/corpora/client/38672fba3111bed5c95ab4f6cb08a1e9b364010a create mode 100644 fuzz/corpora/client/38917dc4cd56ffc4e9f0544d459f872dd0065b8b create mode 100644 fuzz/corpora/client/38917eb7ad6a76e8062479e6bd002742b0516753 create mode 100644 fuzz/corpora/client/38a4720a633f114984040c80ce41affbedf66916 create mode 100644 fuzz/corpora/client/38ab5fd3c3858c55325844ae1bcc8e8da188334e create mode 100644 fuzz/corpora/client/38b78f8485a74eaffb9e94fdf56db9118c292551 create mode 100644 fuzz/corpora/client/38d49595e207567b286186416ef165436bb81908 create mode 100644 fuzz/corpora/client/39161a743aa186ccd23d49238edf2272337fe6b9 create mode 100644 fuzz/corpora/client/3920e1e845b33a5c60135ef6d531cdb522dfd58b create mode 100644 fuzz/corpora/client/392ba8916ff3e28f6a3fbc1c8cc6fc7fe1885f0b create mode 100644 fuzz/corpora/client/397e15911b7342c01cfed53900216b5e9ca44213 create mode 100644 fuzz/corpora/client/3993b6d48d23de6f57a2f67ac69e7eb9b1161fad create mode 100644 fuzz/corpora/client/39a2ee42bb20a7eabbb1b3ab53557eab69954a1a create mode 100644 fuzz/corpora/client/39c7e43c65b1e8905057ceec4be22c1ed10e5490 create mode 100644 fuzz/corpora/client/39d3c26340f83f59a988109708e33b47293cde7b create mode 100644 fuzz/corpora/client/39db0964de4b2d5e154757f60a5a1d45b8032a83 create mode 100644 fuzz/corpora/client/39dba2704bf07584552d5cd605740ef5b08610bc create mode 100644 fuzz/corpora/client/39eaa17ca277e733373f01548d63b3c67072cb76 create mode 100644 fuzz/corpora/client/39f4712ba3437829cf5658f68a67b27166d251cb create mode 100644 fuzz/corpora/client/3a0ae51e5abe5f47e78f1123e927b7353943f9e1 create mode 100644 fuzz/corpora/client/3a139bb7809c48a797d226c94d132c95e9acaf26 create mode 100644 fuzz/corpora/client/3a5c010ef555fb36c97ced3704d6b585b1dc7b04 create mode 100644 fuzz/corpora/client/3a9d098a3fbfa918964f0440753a6e394b74b4fd create mode 100644 fuzz/corpora/client/3ab86c2721f9e162cc469ed916e125ebbf9825c0 create mode 100644 fuzz/corpora/client/3ab940bd4c987a6f6c315b7a69078cef855b6776 create mode 100644 fuzz/corpora/client/3acbb10d830af724a9b623e92281cb369c7f3a0b create mode 100644 fuzz/corpora/client/3af34c7276726be66029cca901a054aff38a264a create mode 100644 fuzz/corpora/client/3b37160e36f9cd76d8e22f550a26ccc6b6353c66 create mode 100644 fuzz/corpora/client/3b982b2cf09a883795614f37fdff3075d70699a7 create mode 100644 fuzz/corpora/client/3ba05e45fe09dfddb2f87e8a061f65a88feee0e3 create mode 100644 fuzz/corpora/client/3ba4f4f81f590470627b176a21644fe0b193f679 create mode 100644 fuzz/corpora/client/3bbc7a55f02246db49a7123f5b104c3b6436d174 create mode 100644 fuzz/corpora/client/3bbf27c3406727197d9e5239f4e26c7a5afb95af create mode 100644 fuzz/corpora/client/3bece9894a8f31bc4fed854dad1538fd980d549b create mode 100644 fuzz/corpora/client/3c2b5eb4ddb34e87c629cde317c5efb8969b7d8a create mode 100644 fuzz/corpora/client/3c4ae91f3376531b4636dbe5aa55c5d5e3e3053a create mode 100644 fuzz/corpora/client/3c52a8f9833493c3c28d9ec3e794fdfa8790491c create mode 100644 fuzz/corpora/client/3c77d257452ff16231ddabd88cc98966e93799b5 create mode 100644 fuzz/corpora/client/3c950182f51cb93042f09dad7bb60b927252ab39 create mode 100644 fuzz/corpora/client/3cb6f55e89989bc27e2619bd2b9e38f4664b8ee0 create mode 100644 fuzz/corpora/client/3ced1bd1ed09c16f69933c26544feddf4dc13b0c create mode 100644 fuzz/corpora/client/3cf7bbf0751a847b1b7e1bb39c4b656354faed05 create mode 100644 fuzz/corpora/client/3d2844ffa4832210fe5284d9ab48837a708928dd create mode 100644 fuzz/corpora/client/3d2e7a38c5a3cee1232b14c6172ed760df8c0aa9 create mode 100644 fuzz/corpora/client/3d3c23bb0aa79cd0b8ba959002aa275aa9173bef create mode 100644 fuzz/corpora/client/3d3f04140014eccaac2c7b60b08e4934056dd997 create mode 100644 fuzz/corpora/client/3d41b72b73575e4d8506fce6f48f9b3d6b25d788 create mode 100644 fuzz/corpora/client/3d548b0c8a5412835b66966d0064f675f141efed create mode 100644 fuzz/corpora/client/3d5f2d9a6b27091529338c4fe45f3ff612ed4084 create mode 100644 fuzz/corpora/client/3d6449225ed357946bb12a56492cbcecc3d6163e create mode 100644 fuzz/corpora/client/3d6dd6ddfc310de9d981e09d2319e75d1b1c99e8 create mode 100644 fuzz/corpora/client/3da58e2ca7120fc98dc41fc830a3a843738a285d create mode 100644 fuzz/corpora/client/3db1eacde509497013bb509c22eb1f72d6a84093 create mode 100644 fuzz/corpora/client/3dba7bf1ef103a72d1617dc1e4101489b82331ff create mode 100644 fuzz/corpora/client/3dbb2ce5c27b172780447c4b01a7b4690213cc7c create mode 100644 fuzz/corpora/client/3dc80ac90d3b8b2d550d51b7a7db1f6548c2658f create mode 100644 fuzz/corpora/client/3dd7d82ef3436c4c45096641909ac1ec0f81cc73 create mode 100644 fuzz/corpora/client/3e20c1e2b54bf37e4ab0b0cbaeb172fdb368d4f9 create mode 100644 fuzz/corpora/client/3e226bd1db63a3c5196ff2883e2470daccff28dd create mode 100644 fuzz/corpora/client/3e35b3f34193758bb9d679e282e04306e14e8dc5 create mode 100644 fuzz/corpora/client/3e3f779968d2b7f011e6ab74f0e0058fc1ccf158 create mode 100644 fuzz/corpora/client/3e5891e2fe9fba41e96dca40fcb6cc12645cbaca create mode 100644 fuzz/corpora/client/3e5994042812fc8e70c3f207be024698a0bfdb66 create mode 100644 fuzz/corpora/client/3e84ff51308e6a67f1c0e77129d34963c29031b0 create mode 100644 fuzz/corpora/client/3edcad65eb254ebec6c9052708e24eecb7d87cdd create mode 100644 fuzz/corpora/client/3f1106688b0f5981833f7966d69e11309aa114f5 create mode 100644 fuzz/corpora/client/3f39e78db6ac6c33ab6fb4275f8b208dd32388bc create mode 100644 fuzz/corpora/client/3f51c17797a205d7432f33d302c5c0abc69064f8 create mode 100644 fuzz/corpora/client/3f87c98730955a346b13cedbd599dd2fc965e068 create mode 100644 fuzz/corpora/client/3f9453768bffb8985d6da01cb729b85d2f2268b0 create mode 100644 fuzz/corpora/client/3fb855d707f9826a94b2fc122c4b5a9f06926042 create mode 100644 fuzz/corpora/client/3fbce48148d1910c027382181a753d9450ed8426 create mode 100644 fuzz/corpora/client/3ff01c86a6707845235e47cc18e237d30e4237e8 create mode 100644 fuzz/corpora/client/3ff4a7536ebcd75032798768c6f1e5067ac67182 create mode 100644 fuzz/corpora/client/3ff8cb9dc50203bd44124c84882b8d53b1b67ab0 create mode 100644 fuzz/corpora/client/4020295b5d1219f6327760c01ceb352dd86d9675 create mode 100644 fuzz/corpora/client/4022fbca06ef2585a15f89d2c464d526813a31bc create mode 100644 fuzz/corpora/client/404e008f342715851fdd16c5930333dd2da4974d create mode 100644 fuzz/corpora/client/40712dc00d368cd5228db99c25fc94f1c1b60937 create mode 100644 fuzz/corpora/client/407283a515b063772d6365bb03272b112b63a783 create mode 100644 fuzz/corpora/client/40b2169a320f7a9091791115661b282467da426a create mode 100644 fuzz/corpora/client/40e9094bdc66b8016ec4682108a50f35e14f10ab create mode 100644 fuzz/corpora/client/41066c040ff0a6730c012b79636d132f072cbf62 create mode 100644 fuzz/corpora/client/4116416909edaace11c66929faf0e868c118f1b2 create mode 100644 fuzz/corpora/client/41200b4b1a160421f117a10da75dcbfc6b93c645 create mode 100644 fuzz/corpora/client/412f05b1ff0bf677c132f8ce40b78b946b540d3e create mode 100644 fuzz/corpora/client/4143bc986253e21efca8a1bd2d255fdec5a53b12 create mode 100644 fuzz/corpora/client/414c20c40a0d30d9df1835531bec015f636999ec create mode 100644 fuzz/corpora/client/41521ea3a51b79a706269d6231fc4fdbd818f0ab create mode 100644 fuzz/corpora/client/415817e2326b08f622fbd85f24e155480721e9eb create mode 100644 fuzz/corpora/client/41a12ddab78f0aae7d8112e267a71154a3574f2c create mode 100644 fuzz/corpora/client/41a8b7532ab744143297821a7b3200f09ae04c24 create mode 100644 fuzz/corpora/client/41b40e3d93d42fb95ad6396eb42db651830fecb2 create mode 100644 fuzz/corpora/client/41f73a08c77291d4b7fce287e0fb4cba2fa76e42 create mode 100644 fuzz/corpora/client/422573d3614683646e27ec50f2289a91b396819a create mode 100644 fuzz/corpora/client/42477f71aaa56701e571e3427debf864e9405775 create mode 100644 fuzz/corpora/client/425456a3461762f34471f97fd452cc81bd458c8d create mode 100644 fuzz/corpora/client/42636b2ecfe8496cdc95c58103218b0bcad0b2dd create mode 100644 fuzz/corpora/client/429301ad47f156b434cc3c9e0fd6ab8ddab0e3df create mode 100644 fuzz/corpora/client/4298e5c83fa195db897455537a2d3454641b6e93 create mode 100644 fuzz/corpora/client/429963c2990d644921a810d1d2a9b73b0e4d6bb4 create mode 100644 fuzz/corpora/client/42c065abb043286c119da39db91c82a4f6a95ac6 create mode 100644 fuzz/corpora/client/42ce64afe00f8181e0d48b1424175b375c246543 create mode 100644 fuzz/corpora/client/42e8a69b6106c3353252612133c61bbce69f13e2 create mode 100644 fuzz/corpora/client/430e22be868d6f927181d0c6e25b95e8b97e3fb5 create mode 100644 fuzz/corpora/client/430f284987994f937bdd8ff6c6d50053086fbede create mode 100644 fuzz/corpora/client/43180cd3a3387fa5ad6052d0a7bb05067022d86f create mode 100644 fuzz/corpora/client/435667da819e3275c9376bf31e145e704cabe4ba create mode 100644 fuzz/corpora/client/435aeec0df85dc1f6e6af08c25e9583a75300aa9 create mode 100644 fuzz/corpora/client/439cc06171fd6631cf873412c169375744fa0393 create mode 100644 fuzz/corpora/client/43a6726af7eece6377804be48487808fcfa59529 create mode 100644 fuzz/corpora/client/43ebe4753ba947574bc57709e2b797fb38e4734a create mode 100644 fuzz/corpora/client/43efcc3f7a5ecc89fe9b176b188c82bbf316b336 create mode 100644 fuzz/corpora/client/44542d137490a58328efa73755599a9208b93cc2 create mode 100644 fuzz/corpora/client/446f592c40b0a35c853e1a20a2bee6be16f75e29 create mode 100644 fuzz/corpora/client/4474618ae58c838914877f4c71cc094aa8350181 create mode 100644 fuzz/corpora/client/447d5a7995e61137c3a2787ac7df97f0bef21553 create mode 100644 fuzz/corpora/client/44828d3fd63dfcabac5eb4ea8d270016a5be20bd create mode 100644 fuzz/corpora/client/449ee0e2202dbe1030981a9490f5b24cb7885dae create mode 100644 fuzz/corpora/client/44e25a64e57cd09e5ddaa8822bbe46fc255ad494 create mode 100644 fuzz/corpora/client/44f00fca850d1f5c13aba8fb6d1d3a0cadf53cdd create mode 100644 fuzz/corpora/client/44f8df6b20046019a46222f769a77717dbb9d396 create mode 100644 fuzz/corpora/client/44ff85718ff8bc622f3aa5c563415402a4060543 create mode 100644 fuzz/corpora/client/4520450321539eee9eab48ddc83026d011e9a62b create mode 100644 fuzz/corpora/client/453218526bb2c4c7d56b2fa5855dd38056886dce create mode 100644 fuzz/corpora/client/4549b6072fb76002f8cb50bf12610f4d749f7739 create mode 100644 fuzz/corpora/client/4553278481eef9741051fbae2ba75603ff619858 create mode 100644 fuzz/corpora/client/458d0e56de9829df2509711bad68e9229409605a create mode 100644 fuzz/corpora/client/45a78f8bafccf0e4bb5fe2184bf98257988f3b09 create mode 100644 fuzz/corpora/client/45c265cdca0b730592a11ac31edd8885c547e9a6 create mode 100644 fuzz/corpora/client/45c5090a9cd6236b4d47368023ed74ce8a74e25c create mode 100644 fuzz/corpora/client/45ceb2312ce8559b8581985a99b6ba80eb24c467 create mode 100644 fuzz/corpora/client/45d1e33d1c6fc23296de8a591b6ced91522fe71a create mode 100644 fuzz/corpora/client/45dd0f7d605307a7e0d66ffde3e1308d7c51c902 create mode 100644 fuzz/corpora/client/45e2799f1d821c353c9bd3643efa4eb06b67e7e0 create mode 100644 fuzz/corpora/client/45f2402bbff42a25395486eda0fbaec46ab04ae1 create mode 100644 fuzz/corpora/client/4603d21ae71cc03d586eb1a1170712f6abb74800 create mode 100644 fuzz/corpora/client/4625c7f81e0cfddb32576312762d36b148358b55 create mode 100644 fuzz/corpora/client/462659944dc0e8a4cfa65633016176361b1436ef create mode 100644 fuzz/corpora/client/46527c2613439fdc8a11c78ae48bd0a277b74eab create mode 100644 fuzz/corpora/client/46834454b4fa0376b5bc6d2b2f441c7bf6766177 create mode 100644 fuzz/corpora/client/468b6de1f8afb7651339b8efc49220aba4aa7293 create mode 100644 fuzz/corpora/client/469eec98ee5a95d71e476216d28f6ec4c169d28f create mode 100644 fuzz/corpora/client/46aa63055ec440c6ade9ab33538e275fb11e9d05 create mode 100644 fuzz/corpora/client/46b8e552df0beebadc21f858648f80b932d9e6b6 create mode 100644 fuzz/corpora/client/46c645c86a93c2a8da13ae9743936483988de7ea create mode 100644 fuzz/corpora/client/46d30d9a37656448b02469a00f41a1c8ff4e4f5f create mode 100644 fuzz/corpora/client/4701bac77223887e0e9eaac28c18a960b9707faf create mode 100644 fuzz/corpora/client/47061571ba5fc3331f2f988f81612120dc2b599c create mode 100644 fuzz/corpora/client/47064d81eada3b2d8589c75db7afb81a70b80f83 create mode 100644 fuzz/corpora/client/470e5b2eaf9f3dec2db0dce69f893e3352f9e8e0 create mode 100644 fuzz/corpora/client/475a3715d84fe47538bb2df7a515ef38bf3fb284 create mode 100644 fuzz/corpora/client/47603f290f3a82381a943cff8384d7e93dd4a57b create mode 100644 fuzz/corpora/client/47648083d3864c4fd76c1dc90c7e7910b2a1626f create mode 100644 fuzz/corpora/client/476d331b2164899718b97900c03c0fc330ad03cb create mode 100644 fuzz/corpora/client/47880e581db7d5597d964633910974dc5d3a279a create mode 100644 fuzz/corpora/client/479211e96659f789c9acc3d60eeaee8855b36c16 create mode 100644 fuzz/corpora/client/47a20c330833be60e2131436c571b96284972596 create mode 100644 fuzz/corpora/client/47a8a12e866fcff623aaa93edb161b5e6e5f1543 create mode 100644 fuzz/corpora/client/47aaeca4caf5d0870f7721e1df8ffc8c8408afc7 create mode 100644 fuzz/corpora/client/47c963ce02bcf3edd731176c112a859912ce1a3b create mode 100644 fuzz/corpora/client/47ca2c7bc80158746edcc8b0f58af0808036ba55 create mode 100644 fuzz/corpora/client/47cd98babc2f0524a0de1367636f269a850fe273 create mode 100644 fuzz/corpora/client/47d40fa986fa7ed8d9aaa2a767814b0bcc543be6 create mode 100644 fuzz/corpora/client/47dc5b070567f17f6ab071b291ea801853f103a5 create mode 100644 fuzz/corpora/client/47dee10eaa015ff2e590df5b8123ea0d15355b7c create mode 100644 fuzz/corpora/client/47e9735be82d62c462278e0300ff98d06cbc328e create mode 100644 fuzz/corpora/client/47ff91f0692c1468f74a1ab260bacc428871187e create mode 100644 fuzz/corpora/client/48011934c31d2d67c6553911f39d476249dbde2a create mode 100644 fuzz/corpora/client/4823b3ddf2a2c1c4965575ec0ea5415fba1d8a2d create mode 100644 fuzz/corpora/client/483a47c4a1b14d3fd45b9bb6123d2b9eaec521e2 create mode 100644 fuzz/corpora/client/484424395f7e7f99acb92c49da323033b3fb0bb2 create mode 100644 fuzz/corpora/client/4855b2c760419be7de0effecacf3e576abd35d73 create mode 100644 fuzz/corpora/client/4855c42f2a199d527a8d3bcbf48e63e623221c6a create mode 100644 fuzz/corpora/client/485a8af4d5bd75929a5411caae14e9277353bf94 create mode 100644 fuzz/corpora/client/489e84b87ce86b6ae9a8adab5c3492902e53fca7 create mode 100644 fuzz/corpora/client/48b98191a2f3736ca83d0462ca105a311711c85e create mode 100644 fuzz/corpora/client/491d0a04b77793e8674d6148598ff0fa1573827c create mode 100644 fuzz/corpora/client/493547f75d1b5c67a5269647d3cd0525cb1fa7ae create mode 100644 fuzz/corpora/client/495035f4676d88b9a8184835954cc50977062c36 create mode 100644 fuzz/corpora/client/49676005a555a0a471bbc3a071441f11d64b60dd create mode 100644 fuzz/corpora/client/49a2431a993b70f453dc77186bc7be98af045d09 create mode 100644 fuzz/corpora/client/49bdbd2011cb1a5b756026312b887084a3ebd76b create mode 100644 fuzz/corpora/client/49e7ef268daa0a2cdd0c24d1c4c6a713bf7be64e create mode 100644 fuzz/corpora/client/49ea35e443da6d5940cb0d28f39652597f63fbbd create mode 100644 fuzz/corpora/client/49ee30ef2200abbdd4022e85f3808be5c96f2eb2 create mode 100644 fuzz/corpora/client/49fedf65a47ea0d23221c2bb8e309f50a3add5ce create mode 100644 fuzz/corpora/client/4a01bd14f39c81a8a6a10a33e042840ce5692a4a create mode 100644 fuzz/corpora/client/4a147c6e097b0014188817c83c851c16146a7880 create mode 100644 fuzz/corpora/client/4a1cb5934068656c3c30787f6efa531032f18f7e create mode 100644 fuzz/corpora/client/4a2d2bbe0d17bb691411edb54adf17c0a972b765 create mode 100644 fuzz/corpora/client/4a3c905ffddbfdc96f25ef51659e2bbc3bb83830 create mode 100644 fuzz/corpora/client/4a9f4ec339c6cb5681679ee0b2bb02ccaec4d2a2 create mode 100644 fuzz/corpora/client/4aac06a792b9c7b5d108b7d536eeae7a1a697562 create mode 100644 fuzz/corpora/client/4acd5e2f28bfbebd9636c00198a3a1c0a9135eca create mode 100644 fuzz/corpora/client/4ad70fea32a3af382d761103760f6633dc517ad4 create mode 100644 fuzz/corpora/client/4ad7eb9f8b68f89b41191b4ec3b7be58d1c1b59d create mode 100644 fuzz/corpora/client/4afa220c781df8a04b016958450413cd9b1f126c create mode 100644 fuzz/corpora/client/4b02fbc02a6528f684c21f7e4330b07d2dd5d9f8 create mode 100644 fuzz/corpora/client/4b13a1c5d6078c4edfb1b1c67392a1fd1f0517cf create mode 100644 fuzz/corpora/client/4b1d647f9873b9885f809ee3f9e9d1ac529fbc8c create mode 100644 fuzz/corpora/client/4b2369a90ae16c4ceef256000c0a9f5c47979eb6 create mode 100644 fuzz/corpora/client/4b38de80be37e3f3bc9b509e9471b19f089cca20 create mode 100644 fuzz/corpora/client/4b3ead03e64f4cd07ba2b4e37c1021743e771fce create mode 100644 fuzz/corpora/client/4b4473e8f34f8d4b0a9ec6fc57af62732739e05f create mode 100644 fuzz/corpora/client/4b66e4ce7ce4f4bd67344ae5b45eed10f533ec8b create mode 100644 fuzz/corpora/client/4b81e8c7b0c87c0a16eab29b88c8ed6783d32439 create mode 100644 fuzz/corpora/client/4b88c521e277511aee7750ae551df7fc1cf993c6 create mode 100644 fuzz/corpora/client/4b99ac8d42376a474890a941042b422605b0d4e6 create mode 100644 fuzz/corpora/client/4bc8a7534c4c573a32496a0809f82c54d557b56d create mode 100644 fuzz/corpora/client/4bd115ebfa3be1367c23e6c4318e1043a3ac99fa create mode 100644 fuzz/corpora/client/4c013395cb5ece5d66453efddeec60f793669813 create mode 100644 fuzz/corpora/client/4c0430fc59399ca198329d1cba1937b111d61546 create mode 100644 fuzz/corpora/client/4c161b61757c06aa6c6a451f1a4657bbf361c6c4 create mode 100644 fuzz/corpora/client/4c2369673f89a69bd79ebef71b5775f9fb317e81 create mode 100644 fuzz/corpora/client/4c59c2482c6404082a0635858985b71b82cc5146 create mode 100644 fuzz/corpora/client/4c5f3cbf8edae219d9889d8ba134883b79e26dc9 create mode 100644 fuzz/corpora/client/4c66d62bed2462ce351dcf40d29cda35d78c7705 create mode 100644 fuzz/corpora/client/4c6b444b206e07422c67815170a2b597762e7563 create mode 100644 fuzz/corpora/client/4caaf58a1600354ac9f62fba8d50f283c93a25cf create mode 100644 fuzz/corpora/client/4ccd050b032794d602a29300fadc8368fce74b10 create mode 100644 fuzz/corpora/client/4cfce7610603fb34b52899d5ae825a9267cc6f13 create mode 100644 fuzz/corpora/client/4d1a707cdb313724ea95783f884bb18c446aeb13 create mode 100644 fuzz/corpora/client/4d20b77701a94c7e7638a8ccb6b4f49f4e709bc1 create mode 100644 fuzz/corpora/client/4d36a58efae3b11ad750afbbebf6f1b4426c6ddd create mode 100644 fuzz/corpora/client/4d3d510accadff9934eaa5d7ccf62c74dfe13800 create mode 100644 fuzz/corpora/client/4d4a2b9380be627ed32882398fd19a7f1d7442a2 create mode 100644 fuzz/corpora/client/4d4bed7ffa0c3127782cd04fdd0198ed80c3824f create mode 100644 fuzz/corpora/client/4d980ccf452491968a8b79e6dab57a2fad1c6889 create mode 100644 fuzz/corpora/client/4dd78993fe41aefef22150b6ca2a364036de1a4b create mode 100644 fuzz/corpora/client/4e020e2dd25ae2a78cc2c57500cbe19002f8afd2 create mode 100644 fuzz/corpora/client/4e3a2390998de7eea4348296383e23da908b8455 create mode 100644 fuzz/corpora/client/4e3de75ddd56a6da8dcfe73691192fb9e28ef43c create mode 100644 fuzz/corpora/client/4e62ab44732093f6bec5a90d8b5650705fcb692e create mode 100644 fuzz/corpora/client/4e6e9f761e986c4a61b5be540b826abee011d766 create mode 100644 fuzz/corpora/client/4e9319502deb9c629cd2c48a3c359479b57fcf25 create mode 100644 fuzz/corpora/client/4ef08092bd365a191a93d6fc8ca04699283d8bad create mode 100644 fuzz/corpora/client/4f264e20b72d2157099ee07ff94a3d3ebdd2d1cf create mode 100644 fuzz/corpora/client/4f2bd070bb4baa414fb24c44cc6a603b7a7cb956 create mode 100644 fuzz/corpora/client/4f3a5b4335304f53951535244525025c00dfb65e create mode 100644 fuzz/corpora/client/4f4211f61a8d89a61f02af7a208efcce30a5e20b create mode 100644 fuzz/corpora/client/4f50515e70982cccab9caf45dbe355e352e73377 create mode 100644 fuzz/corpora/client/4f57c8c119ef4d898f4c6334a78399e1506b5370 create mode 100644 fuzz/corpora/client/4f63f669b7dedacfe7a6a6e5e365c0b7b3cb9f8c create mode 100644 fuzz/corpora/client/4fb68cc6a17c0bb045ab2aa8c7d06a0273be24c0 create mode 100644 fuzz/corpora/client/4fd6ba5a29cdef21cba275b4f2024aa4f325f269 create mode 100644 fuzz/corpora/client/4ffb0574ef5da44f24bdc034923d80214e0b1d5c create mode 100644 fuzz/corpora/client/502225ececfd25bc9096ca0134fe0d16d6c13052 create mode 100644 fuzz/corpora/client/50248099e155b046a0946c8ebba7b666b760494c create mode 100644 fuzz/corpora/client/5026ffd82ec3ca107a55fa98a0e0182743845cb6 create mode 100644 fuzz/corpora/client/50306bcebf05a3cbf64dcf6487b77cbc3521f18e create mode 100644 fuzz/corpora/client/50342c8d3329526e48c4888cf3bdec35830f8378 create mode 100644 fuzz/corpora/client/503d8c4f57bf40a7e22a1ce461a5388df7acc66a create mode 100644 fuzz/corpora/client/503ee5651b58185d57534e3ee360600a01fe5be8 create mode 100644 fuzz/corpora/client/5042916028aaac3abf02283666f0414f93f3b95e create mode 100644 fuzz/corpora/client/50750d88f170a89e8b0532caad49e0ea3e1ebdb0 create mode 100644 fuzz/corpora/client/50a691f885edb01e7ac4790c3563ee974fab76a4 create mode 100644 fuzz/corpora/client/50bed2f1822d9bf3c0084847a5360e340e76b62b create mode 100644 fuzz/corpora/client/50c2966e5f59a40c6537029586949fc1c3d4716a create mode 100644 fuzz/corpora/client/50edb97c9d7f0028ef3a0462cba60d61a8df3029 create mode 100644 fuzz/corpora/client/510213979c1bbc19d27b3225566d6158b603be3e create mode 100644 fuzz/corpora/client/510789b7cda8289d8f100bcd6204016ff6d6ae30 create mode 100644 fuzz/corpora/client/5137cc7acaa8b94b269020969632451a385dbdad create mode 100644 fuzz/corpora/client/51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 create mode 100644 fuzz/corpora/client/520296b9c4a91f8a53cebb8260417d00ffbead61 create mode 100644 fuzz/corpora/client/521799d69a9250ddc3195bd8b8fc371e1dcce1d3 create mode 100644 fuzz/corpora/client/521991312b6d2fe4e3970eb97a35e4bd1e5e75ed create mode 100644 fuzz/corpora/client/52411c6a2453ce5c648a6c72f0ee921b95a9f712 create mode 100644 fuzz/corpora/client/5247ee165c5416254e877c0c9393a7c1a74396d4 create mode 100644 fuzz/corpora/client/524e7138c7f716956def8f0e3c159f2b69c7f9d4 create mode 100644 fuzz/corpora/client/525fd97a89ba10a66229d5d84e252789d13661f0 create mode 100644 fuzz/corpora/client/526613cac59d5a7a32c8c456f48ed92bc170a4ce create mode 100644 fuzz/corpora/client/527b3fafbb1e16c3e840eaf26dd0b023bb140e46 create mode 100644 fuzz/corpora/client/529f3e1a767d29ac200628b726ac798525ab640f create mode 100644 fuzz/corpora/client/52b62dbbdb79fe3feaaff2802aeed0a9cd032da5 create mode 100644 fuzz/corpora/client/534e2e2fccd47e5e4763f05d4cc79dfba1005455 create mode 100644 fuzz/corpora/client/5354fca58329a03f0ccba7e3e0acb82d92535a72 create mode 100644 fuzz/corpora/client/53663cc2b1f5716e050630e1d709f3ef933bade5 create mode 100644 fuzz/corpora/client/537021ef5376d35e88defa29e820f85d5adf12d3 create mode 100644 fuzz/corpora/client/537c0e304aabce2e8345cbd25cc24218af766300 create mode 100644 fuzz/corpora/client/538d2cd0c51df357853bdbc481303465436e73ac create mode 100644 fuzz/corpora/client/53ad80d7b46a8036be194cdb78ef8036a0ce0b50 create mode 100644 fuzz/corpora/client/53d3188ce0211fa95e7468ccc3f66c84e29d6cca create mode 100644 fuzz/corpora/client/53d67eb0ed83cda2b72d803cc98cbbabc66174bf create mode 100644 fuzz/corpora/client/53df8a069c8fdb2615b2d5ef7124d2f96748ae96 create mode 100644 fuzz/corpora/client/53f7e340a0ee752b29b60d57c7f0939d68943341 create mode 100644 fuzz/corpora/client/53fd415e8f76430e1ae01e0086e9b2818d47c04d create mode 100644 fuzz/corpora/client/5420b2428a142b8eb858a09d3913ae19d38a86a7 create mode 100644 fuzz/corpora/client/545aee70725af3d5deb4f43e6bd882ebc992aa5d create mode 100644 fuzz/corpora/client/54614d71a03ca9bf84bacabb16fb38a036377843 create mode 100644 fuzz/corpora/client/547fa587ca66dbd970950e8108e8f4e6bd1c728b create mode 100644 fuzz/corpora/client/54b10439f58686929a540d023332d55d463265a1 create mode 100644 fuzz/corpora/client/54b46c5600118a249495f2f8ef2d129d62332b6e create mode 100644 fuzz/corpora/client/54c69cc77e09e4f482657ec9641f5f268161ac43 create mode 100644 fuzz/corpora/client/54cc1e1dfb060c8be71921970dea715875ed76d9 create mode 100644 fuzz/corpora/client/54ceda6ec5c9baed5697061441dfb8069687c950 create mode 100644 fuzz/corpora/client/54cedcbc0cc04916f02140f92e460948b883a196 create mode 100644 fuzz/corpora/client/54d1730286b3db1fb8dfb087f41f34e87a45fffa create mode 100644 fuzz/corpora/client/5532f89402af2f74fb84b6351ddce8b91081d1a6 create mode 100644 fuzz/corpora/client/555a7d9aa332fd367d20da3e7b117447f8738753 create mode 100644 fuzz/corpora/client/557d576ebdf5f2567d66b3a74f24f6e66e2145be create mode 100644 fuzz/corpora/client/55a46e0c0017b0cb6b9d26f4a85f0a9c8e411a16 create mode 100644 fuzz/corpora/client/560b6647ea9f16670e6dc44fb133eebaccd8896b create mode 100644 fuzz/corpora/client/567861a0ef3daef5b992549f6fea78ff39f299d7 create mode 100644 fuzz/corpora/client/567a64e0a340faa18a8e791201860b7b28715a49 create mode 100644 fuzz/corpora/client/568e49aceec407cc95710700f6a5891d48e1ca53 create mode 100644 fuzz/corpora/client/56a47aaccaaadd63bfca9bd5c42562e9f9ae8c45 create mode 100644 fuzz/corpora/client/56bed2ccefcbfac147ffae8d342bd06c05361978 create mode 100644 fuzz/corpora/client/56cf05954e86ee34832109af775f13b833beddd1 create mode 100644 fuzz/corpora/client/56e288d542986d892bf5f3aa247e54bc6708f823 create mode 100644 fuzz/corpora/client/5719fbb473022143f337a7c6bca19692786cd989 create mode 100644 fuzz/corpora/client/574bee07c2d73d1380696b884703f9f391ef48b1 create mode 100644 fuzz/corpora/client/57532513716d00e062c1126b380c6b419a4ac1ee create mode 100644 fuzz/corpora/client/57849033a1025fa4ce6187230b85b505d699dfad create mode 100644 fuzz/corpora/client/57ba124fd4be478cda5ea9cb609e38137912d2ed create mode 100644 fuzz/corpora/client/57c4a5cdd33dd232645d9604635933ff7eed3cde create mode 100644 fuzz/corpora/client/57f546399fa63f8e2d7dc49067fe9c08adea7490 create mode 100644 fuzz/corpora/client/582e104df62895bb20cf7bc896a0b7ad71d86d97 create mode 100644 fuzz/corpora/client/5861f7c21e011201992bdd3aa4b0508221ae0a91 create mode 100644 fuzz/corpora/client/5869715de2194c5df957170f736779f50b58119b create mode 100644 fuzz/corpora/client/5873c42712ecd71010070b619ed4263003756ad6 create mode 100644 fuzz/corpora/client/594b51481ac6bc7df439cce4bed815db8164c6c1 create mode 100644 fuzz/corpora/client/595bae747a7c43c3288f8a519fd20b222176cc17 create mode 100644 fuzz/corpora/client/599d784cfd25bef4be70e37bb6413637779f187f create mode 100644 fuzz/corpora/client/599ed8f0d63d43ae6b804ab649281e2aa43fd802 create mode 100644 fuzz/corpora/client/59fa41502b876196519bcdad0966b6732523b238 create mode 100644 fuzz/corpora/client/5a03b6eb72ef691f55a3815d8de1410f05c761fd create mode 100644 fuzz/corpora/client/5a0e61b15fce26602553aa93f9d42230589ef56a create mode 100644 fuzz/corpora/client/5a1c63b8fd17cbcdce5cce62a9ed57dcdcc1d788 create mode 100644 fuzz/corpora/client/5a22bcf4a3f2ff59c13ee6d001be3fdaa5131b2f create mode 100644 fuzz/corpora/client/5a318845ddaf8659425e27618820abd9b6b0cbe6 create mode 100644 fuzz/corpora/client/5a349cbb66a48ddcbe197cff1f2849bb6a93c56a create mode 100644 fuzz/corpora/client/5a35c9ac7326faf64d6ba9530ac6e9a0551f0fb7 create mode 100644 fuzz/corpora/client/5a6a9e4fcf0e695229b6214d22a863528c6bd043 create mode 100644 fuzz/corpora/client/5aa2d2beb9109771aedfac52e64498fa50f6abd7 create mode 100644 fuzz/corpora/client/5ab4c8a28ab63acf928a0ac00ab2768cb2b67994 create mode 100644 fuzz/corpora/client/5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 create mode 100644 fuzz/corpora/client/5ad977b04179f3ca51c54cda82bfb1a2df3770cc create mode 100644 fuzz/corpora/client/5ae0dcf2b92f63c4ba84c2099a7d24fb0b9502a6 create mode 100644 fuzz/corpora/client/5aeea43cd486aec1a8ca9d8c79278a691683cd88 create mode 100644 fuzz/corpora/client/5b757e060f0969dcd095a31a8c02a3e06026669f create mode 100644 fuzz/corpora/client/5ba3b3bd49d6d35c93acde3803bc84fa665f11b0 create mode 100644 fuzz/corpora/client/5bf598f119a7860cc7b59388a11b0b543073ce92 create mode 100644 fuzz/corpora/client/5c023826e238d48deac879b1f7811196de543402 create mode 100644 fuzz/corpora/client/5c0d1690fbca8608cd919bc700daced138d2e03f create mode 100644 fuzz/corpora/client/5c3b5b3cc5ab6a84be92f7154abb6448be09974b create mode 100644 fuzz/corpora/client/5c3c45d31de4f8113fba84de3f53126b3c33fad6 create mode 100644 fuzz/corpora/client/5c3d21494eed72108d860611fb997c088e316089 create mode 100644 fuzz/corpora/client/5cc8aa172ac8517befe6a103d0c6a319aa4bb2b7 create mode 100644 fuzz/corpora/client/5cde6823fe8fd5549125b68e2b138389e7c385b9 create mode 100644 fuzz/corpora/client/5cfbfd352aa59744e0b886359a9585ea535bbf48 create mode 100644 fuzz/corpora/client/5cfdf4bbb1aa4fb4e48c735169c98d1e7fd198ae create mode 100644 fuzz/corpora/client/5d07da2acb6fb169665751e755b014ed74ee2be8 create mode 100644 fuzz/corpora/client/5d211267f9dc965a7ad9c0792edf974a1f80dfae create mode 100644 fuzz/corpora/client/5d34ff3d7a321849e572860135d77c32aa711b3e create mode 100644 fuzz/corpora/client/5d969e248b38152590f6a21e9308c70586fd03f3 create mode 100644 fuzz/corpora/client/5defb21b8877607c10fc2db383344a7a44a272c4 create mode 100644 fuzz/corpora/client/5e44b2d388abd7a0deaaa667e00dd9c4f509e4ed create mode 100644 fuzz/corpora/client/5e481dbaeefbe42f74a9f5dabb777497bc2090c7 create mode 100644 fuzz/corpora/client/5e702858f464f2290b81bcd73924c95c21f1ba38 create mode 100644 fuzz/corpora/client/5e9cfe4dfd530063c07e2efcd164e98b0cbaab8e create mode 100644 fuzz/corpora/client/5ee2b0150e4aae4bbcba314d9d052f90f8916eec create mode 100644 fuzz/corpora/client/5efd73d9112526d6a83f9a10974a177359415a0c create mode 100644 fuzz/corpora/client/5f103ecee080798186fa162c1df1ffc4d0c17c22 create mode 100644 fuzz/corpora/client/5f305927fee1e510410e1a4dba1b4673bbe3a97e create mode 100644 fuzz/corpora/client/5f5fc6b831506622633923b879bb6ace522fc572 create mode 100644 fuzz/corpora/client/5f77d076413db455dcd35ef474cef4d095cba10a create mode 100644 fuzz/corpora/client/5f9461d9a49802ee206cddc31d5f7802b70d8762 create mode 100644 fuzz/corpora/client/5fb9541795832c041b1d78013ffb8dba5d3ffc6c create mode 100644 fuzz/corpora/client/5fbf873a763878ac14803b8cc751b84c6c8253b3 create mode 100644 fuzz/corpora/client/5fd8705410507c8bc7507f4a71117c1e95827f45 create mode 100644 fuzz/corpora/client/600549b4cb0d53314e63a9b2b0f94767c82f3f00 create mode 100644 fuzz/corpora/client/6073423c01a2dd0fca0bfbb909f6bd77bc2566b4 create mode 100644 fuzz/corpora/client/6073c16f8eadc95e9b2f4cd9fef418073fceaff8 create mode 100644 fuzz/corpora/client/607462bf13e38b256dc7daf81187b71350e13d71 create mode 100644 fuzz/corpora/client/6080ce84f71a01f19b825e6842d07939896d3fc9 create mode 100644 fuzz/corpora/client/608148368caa52c023cbe7c4ed173426063f788c create mode 100644 fuzz/corpora/client/608407b7970d57fcf29fdd239aedd1401e9c1c72 create mode 100644 fuzz/corpora/client/609f244309f2e43c5875fecee65f0a30d8b526d5 create mode 100644 fuzz/corpora/client/60a99c0480ad5eee1514372201c0ad06d499f98a create mode 100644 fuzz/corpora/client/60bfb9b9c488ae427a918727f684058b309ec295 create mode 100644 fuzz/corpora/client/60d670c1a42cf4a59e46b289a505dd52a7a7fcbc create mode 100644 fuzz/corpora/client/60e32d5b52d1df4d91c76669255a0395ebb4450b create mode 100644 fuzz/corpora/client/60e8f09184cbc607c12d0527215fdf8b99d2d03c create mode 100644 fuzz/corpora/client/6107fb2e4cd364b9ed12afc9b97dce0afbed7ce9 create mode 100644 fuzz/corpora/client/61085b2e7d58fa41c886db5ac50f4a527b09dd0e create mode 100644 fuzz/corpora/client/614cf57cc1de9191ab4b72b41a9692b3593b7eef create mode 100644 fuzz/corpora/client/615692dd7670c91361b426507fb5975192309ce8 create mode 100644 fuzz/corpora/client/618a704e234ee6d8a576908cd9c78f8327df3938 create mode 100644 fuzz/corpora/client/619a79d515b431061cbecc4c17ee7a601ee62118 create mode 100644 fuzz/corpora/client/61c6c5486fd0330caafaed75eefa355f297444de create mode 100644 fuzz/corpora/client/61cf3c15cd19427e66e71fdd0c49d7baeed646f8 create mode 100644 fuzz/corpora/client/61d8266017983e5a558b76dfd0a566f6a0a13f98 create mode 100644 fuzz/corpora/client/61dac4681a5c749ed2fe34d7c220ac98566f8b41 create mode 100644 fuzz/corpora/client/6247d00c4fa6e2fbab284903acfd893a32ae7874 create mode 100644 fuzz/corpora/client/624dada93d6cb372e138ab0d0da9981ecf4fc351 create mode 100644 fuzz/corpora/client/625ad3c5809b7123fc9ac59bb3207b0c683b29a4 create mode 100644 fuzz/corpora/client/625f82c4699f2e2d7a62639bd4eae9a78828e924 create mode 100644 fuzz/corpora/client/6265ac061a27d3ed0a7725b2c4ec4517a9a5e94c create mode 100644 fuzz/corpora/client/6265d6f0beafd687e643cacac81c166714fc7560 create mode 100644 fuzz/corpora/client/62835f78ff41c6a85973d16e20ec73fa294a29c1 create mode 100644 fuzz/corpora/client/6288a9c43786d1290e4009719e4be28e5eec7ee2 create mode 100644 fuzz/corpora/client/62c616f1d00b697b35ee6704e06e7c155dc8af88 create mode 100644 fuzz/corpora/client/62d0b103f0a23f56cc90bcd3c8829b96b9fd410b create mode 100644 fuzz/corpora/client/62dacf2522a082de534378c942fac4eee120a0c0 create mode 100644 fuzz/corpora/client/62e0b3b35d06287a592bd826331ef2425c56b800 create mode 100644 fuzz/corpora/client/62e211af4116ff2f3f6fd5e4301a0bc3eda1c487 create mode 100644 fuzz/corpora/client/632c797f0552971190c48636c2ebfd0ffb0cea2b create mode 100644 fuzz/corpora/client/6334dd2dda9f9a6f620b5ef68a0d77ba7cf9386e create mode 100644 fuzz/corpora/client/635add8a959ea9c5b224d91bf27acd1594b7b2c1 create mode 100644 fuzz/corpora/client/639d5d5572fb305ad57c9f4d2487875918aa9cb6 create mode 100644 fuzz/corpora/client/63c09123324fa1d3c3b7114c73ecb217a094fc7f create mode 100644 fuzz/corpora/client/63c111abac5f03ada44c4f1c06407614a9a8dad5 create mode 100644 fuzz/corpora/client/63d196d68bdb46038b295031ae2995cac32a74a5 create mode 100644 fuzz/corpora/client/63ecf1d38ea2016b9afb23ae3afca58d5dd3d1b4 create mode 100644 fuzz/corpora/client/63eda88f556050026cecbab2838db68df8449c46 create mode 100644 fuzz/corpora/client/63f9878ffbe9cd019eb9c31119f93e60038706ad create mode 100644 fuzz/corpora/client/64111d0aa717252d1fc807fe6176836e974d1b51 create mode 100644 fuzz/corpora/client/6430194324a7a24c024291f436863df47c37653f create mode 100644 fuzz/corpora/client/643dfa2d1975be94deee11c5f4fe5f7ba03d1dd0 create mode 100644 fuzz/corpora/client/6481c36d92d9ca0fe3614e4d51fe19e4c11c88f4 create mode 100644 fuzz/corpora/client/64a869b598ffedcd1aa51728d0609a9a429c8336 create mode 100644 fuzz/corpora/client/64aa71fbf19463b62d08ed58abf584b321579479 create mode 100644 fuzz/corpora/client/64c63d372985cece83adba25d2eeac22819562d8 create mode 100644 fuzz/corpora/client/64cbcfa4099c231c56f0e44e63608059a237078f create mode 100644 fuzz/corpora/client/64f738a679d56249cc30be4dfd2f0c5bd5e28c5b create mode 100644 fuzz/corpora/client/651dcc3e47fa5ead53f9b26f911aeb77d5f248af create mode 100644 fuzz/corpora/client/6527e0d26192e7deaa20366cf0701f3ec54463b9 create mode 100644 fuzz/corpora/client/656cf8150c073e8e8d02deccca01e4139162f3da create mode 100644 fuzz/corpora/client/65855d1b64cd3cc960341aaf8feb7e9f4a48558f create mode 100644 fuzz/corpora/client/659084db34790be2cd40eaf8f0bcbbb945178d93 create mode 100644 fuzz/corpora/client/6590cd4950285c8566e184ffa0f7ccd09dad53b7 create mode 100644 fuzz/corpora/client/659154d8626452caa2f932a2535c31d53bd5fa2c create mode 100644 fuzz/corpora/client/6597d5af018d1229e5257a20584976ae62cd91a5 create mode 100644 fuzz/corpora/client/65a551e6253213f7838fe1a3d581f66812b056f7 create mode 100644 fuzz/corpora/client/65a5c1b565fdc69089dab91218ae5ac64e5e29d3 create mode 100644 fuzz/corpora/client/65bc3b3333ef4633f341bf82c67232fdd4f68df0 create mode 100644 fuzz/corpora/client/65cae63e97be467cbc961413f239dda66befd1c4 create mode 100644 fuzz/corpora/client/65ce2430b49bc6b723823c09aa935ce841339fdf create mode 100644 fuzz/corpora/client/65f06431a42ef4bb9b8701836beee0c150e754fe create mode 100644 fuzz/corpora/client/66033b5c7d3556a787805bdb0074ecf18293914c create mode 100644 fuzz/corpora/client/660cafd064ee9e2dd044ae5a075953798343200a create mode 100644 fuzz/corpora/client/661649978781c7e359a72b02e19ff1d54685d121 create mode 100644 fuzz/corpora/client/664a7acb6461717b5f9b6d0a7293d1e73ee2e123 create mode 100644 fuzz/corpora/client/664bc8798533a1b6b6be2db217238cd1be7404cb create mode 100644 fuzz/corpora/client/66590baf9e116e67817526c8941a73e922cebd63 create mode 100644 fuzz/corpora/client/6663a6502f3ed213b02bf7f03ce6931ae8e2b60b create mode 100644 fuzz/corpora/client/666523b595f1486cbd1c80fb691b3cd89de0a315 create mode 100644 fuzz/corpora/client/667a6a09b714e969f0eb82c8c0033fbcb2325c4e create mode 100644 fuzz/corpora/client/6682b59ee17a67401dcff4e81922eddd0febb3f8 create mode 100644 fuzz/corpora/client/66d0e2e70e2257ea87b599ba17cddb82cad84fcf create mode 100644 fuzz/corpora/client/66d155a2a5eadc8283d4e499e9cd63e03ec05cbd create mode 100644 fuzz/corpora/client/67233dc43939b34131ace03468e43ee310046433 create mode 100644 fuzz/corpora/client/6747a445de70bedb65e0684c725b7fe8d46ba4e2 create mode 100644 fuzz/corpora/client/6748f8943dc19cb1546c387b27d5aaade3d96a15 create mode 100644 fuzz/corpora/client/6755c61bc253057992529af05152085735a29811 create mode 100644 fuzz/corpora/client/6795d08c5833785c97240b15caaf99e44e3d9de8 create mode 100644 fuzz/corpora/client/67c674e6e3447e13f26fb535a4be7ce39bee1016 create mode 100644 fuzz/corpora/client/67dcbb016cb39eca5471951b0e8f332365bae380 create mode 100644 fuzz/corpora/client/67df09ac5ee96a891c67cc2633252a94a39bbb0a create mode 100644 fuzz/corpora/client/67fbcb3f684cb22127e006ee7ba2be11de78e8c9 create mode 100644 fuzz/corpora/client/68010df6fc183b9074c2053fe430e027723b7336 create mode 100644 fuzz/corpora/client/68108fec90edf9aa04ad55a1837d81b7368f51e3 create mode 100644 fuzz/corpora/client/6810eab8286981f324b3c2e6a6f9df0a4fae1a0d create mode 100644 fuzz/corpora/client/6822880e383e943192606fd8b044959e1156a7be create mode 100644 fuzz/corpora/client/6832aef642d19f0e7e98a5be7295e4851bd84a1b create mode 100644 fuzz/corpora/client/683a386b092db4b7b3d1ac85f701183c5ea0d486 create mode 100644 fuzz/corpora/client/683cb8fb020c220b365be66b725f0b24bd15cc45 create mode 100644 fuzz/corpora/client/684fd8f0d78ff71382946de23c94e97b00f2dbde create mode 100644 fuzz/corpora/client/68674ea8938080e5818769cd7c61bd49ed605ae2 create mode 100644 fuzz/corpora/client/687509080c54d16c0300c84f01179ed39d87dbdf create mode 100644 fuzz/corpora/client/687cd65e96be72e8d056902403edf205218202ef create mode 100644 fuzz/corpora/client/68b1c665aea7a2f21fd85d492a7414b9949c5c10 create mode 100644 fuzz/corpora/client/68b3c04f7cca6260eb07560cf094a2a8fc9359df create mode 100644 fuzz/corpora/client/68eed0410b6905e7058ab10b8cda6a50eca44f9f create mode 100644 fuzz/corpora/client/69067284b9c6afdc7726f3336937699c26c4512f create mode 100644 fuzz/corpora/client/690e5ab137a9dede3fcfc10ae60d94e23493cc8d create mode 100644 fuzz/corpora/client/69279238545dd60d4336afc3fd940597275e67f7 create mode 100644 fuzz/corpora/client/6953ca5df0d9da68e9a4c76c85fb557f4558f260 create mode 100644 fuzz/corpora/client/695fcc8f7753bf71ee51f19613b0e3c8ccac3b2b create mode 100644 fuzz/corpora/client/69a462b9db58b0b63b0a73c2d6855389bc58ad71 create mode 100644 fuzz/corpora/client/69afb75309face6416b5375e08a67bc1b554b330 create mode 100644 fuzz/corpora/client/69b3df6db8ad9b6478876fa2fc868769d26ae017 create mode 100644 fuzz/corpora/client/69c3fbcf1fe3c5f6c3b317dd480aafb9a6ea22d5 create mode 100644 fuzz/corpora/client/69c6d70b2e442a1fb52beba8dde05486ec8fe0b0 create mode 100644 fuzz/corpora/client/69dda8f513d935147039ae8eb79ab5f5c22241a4 create mode 100644 fuzz/corpora/client/69e1fea45a1e590efaaccf67b171c4e12945fa98 create mode 100644 fuzz/corpora/client/69e3dccdf212204ce4f27b3ba4093a067bbfedbd create mode 100644 fuzz/corpora/client/69f05e739541b5641183adab5ff694e775587726 create mode 100644 fuzz/corpora/client/6a0aa36495d584391d3e604383a3e51c30287ddc create mode 100644 fuzz/corpora/client/6a2cad97b106c7b46c7dd4a563dbce6cb5ede67d create mode 100644 fuzz/corpora/client/6a803caed7ed942ad844c9dbcccc1f85b242a95f create mode 100644 fuzz/corpora/client/6ab6d6a5664c508e4457e6e031f060b7ec9092fb create mode 100644 fuzz/corpora/client/6b11b51454a342e33ccceb3fdbef9b368ad59483 create mode 100644 fuzz/corpora/client/6b1bf19907cf72f81eed166a3f63c7aa4d08990c create mode 100644 fuzz/corpora/client/6b264d6308b2df6e52a5de37264d49dce0d75a8b create mode 100644 fuzz/corpora/client/6b663fb5608eaf3813fa8bee242fd3ea020fc44b create mode 100644 fuzz/corpora/client/6b793b36b3baff6476e1a870f1c7d7cfe4031f2c create mode 100644 fuzz/corpora/client/6b8144f5f58ba891d1795baa848153d3221d3c44 create mode 100644 fuzz/corpora/client/6bab82d7a652bc399b9b993cfa01f7804ca72b3f create mode 100644 fuzz/corpora/client/6bd22203e45d97dca39cc912073fa3ef25516506 create mode 100644 fuzz/corpora/client/6c2c26ee47d64a17252ab9fe4a1a6e7e6fdab087 create mode 100644 fuzz/corpora/client/6c4f116cd88c345c921741b8b15e14ade22c0215 create mode 100644 fuzz/corpora/client/6c6c1c5449c11e7c60a4fbf570bf50e1364d97ab create mode 100644 fuzz/corpora/client/6c87115a21f2935547a3ab79f4454586a38ffa0a create mode 100644 fuzz/corpora/client/6cbc0cff192c1f39b7282831963171a6f45d83b9 create mode 100644 fuzz/corpora/client/6cbffadd8719e7ef4b87bcc2baed66e2fa758e0a create mode 100644 fuzz/corpora/client/6ce545e7d0dcae85f5bd399a08cc9382dd960d7d create mode 100644 fuzz/corpora/client/6d1be9a9e141e7e4cc0215de08b8e0d8957bfce3 create mode 100644 fuzz/corpora/client/6d48cb1981f9495a48756a9b610181ddc26f7844 create mode 100644 fuzz/corpora/client/6debfa290d65362c9372b1e48be9409cc7d02a4b create mode 100644 fuzz/corpora/client/6df0c0efbc00c9bf2ebb643b86b8d84bd85e04ec create mode 100644 fuzz/corpora/client/6df0fa3c74c3260e12b263005b740ca8eaa120b4 create mode 100644 fuzz/corpora/client/6df3e93b0e079c44d2b5cbb55a97fa9eb19816fb create mode 100644 fuzz/corpora/client/6e0b8e25d1511cb94888e70cc7b44475723c4259 create mode 100644 fuzz/corpora/client/6e176d351404f4cc80292ea0bc9db0fb6995195f create mode 100644 fuzz/corpora/client/6e50d7cde2518173741c39bc6b4702503283e9cc create mode 100644 fuzz/corpora/client/6e62da873e498873b6749916f9b956785a131bc8 create mode 100644 fuzz/corpora/client/6e7f312cbb5f5c14bcd3de0493cdebdaea464b75 create mode 100644 fuzz/corpora/client/6e896271c6744a1a642f8c57f39d5121757e82c8 create mode 100644 fuzz/corpora/client/6e8a8a7d3a100d049f376519f4587e6e14942358 create mode 100644 fuzz/corpora/client/6e9327e6669d2294e761eb277bb77b537992fd37 create mode 100644 fuzz/corpora/client/6ea7e571db32f7baab75b70a92a76b28b1c328a6 create mode 100644 fuzz/corpora/client/6f0c899b323b55391fa0f650b8b12dd00e62c086 create mode 100644 fuzz/corpora/client/6f1ce8ad3093836a8115a019d8beeb3ff91869b9 create mode 100644 fuzz/corpora/client/6f1db68dc16262ab4a7f889e455880f9d529aca2 create mode 100644 fuzz/corpora/client/6f5dc93dc58117cd70de188b2fac9a4a96e3b1eb create mode 100644 fuzz/corpora/client/6f60c480baee806ed0192900134407dbbcb05d2a create mode 100644 fuzz/corpora/client/6f658059b4e7ceb3cc3dc739960aabfdf90bf1d2 create mode 100644 fuzz/corpora/client/6fac91a775bb75e8f4ceb957ffb7a8ef86bfa009 create mode 100644 fuzz/corpora/client/6fcd5d2b8006e357f13b20dac4dbe0b5aac1dd33 create mode 100644 fuzz/corpora/client/7025cebff211f49b0f3669f2aaaeeb345461ec26 create mode 100644 fuzz/corpora/client/702d222e9df3d12dd879e9ef306d891b81dc8e67 create mode 100644 fuzz/corpora/client/708adced582b21f54042e09915220c1ab1eaee8a create mode 100644 fuzz/corpora/client/70a222dcd31875547c554767140b608f1a9009a4 create mode 100644 fuzz/corpora/client/70c6a49d072f42633d28f7d971c166ce95020763 create mode 100644 fuzz/corpora/client/70d56d7db10d1aec403ec100938a939ac79d7469 create mode 100644 fuzz/corpora/client/70d713774b6c6ec3d97f4266d15aea17bff6f96b create mode 100644 fuzz/corpora/client/70e9e943f8ec7620c37a04c51e3284278a0c9d20 create mode 100644 fuzz/corpora/client/70fbfdc26fffc206171e7196378fa3be2b2b1ffd create mode 100644 fuzz/corpora/client/71470e2bd81b1c0c01328ae34455112c4665b0b4 create mode 100644 fuzz/corpora/client/716b469db79aea803951febc763e79de9ad99d5b create mode 100644 fuzz/corpora/client/7182672bba0d1776ddd387fa19ceff26850232a7 create mode 100644 fuzz/corpora/client/718bc0b50eeb8129f64328bea9fe679c6a0780a9 create mode 100644 fuzz/corpora/client/7190e6156a1cf612cf9eb8bd0c39990ef13a5355 create mode 100644 fuzz/corpora/client/71968a1bc330b18370f71624c1240c01380f197c create mode 100644 fuzz/corpora/client/71a6a7d97752d1ad07fb2f8394ff415d752d65c6 create mode 100644 fuzz/corpora/client/71ec13eb76f57919ec5a96fe4c2a6a3e3590a8d5 create mode 100644 fuzz/corpora/client/71fcfe96fc232e40e56af7bce9c6c19c27c8c3f0 create mode 100644 fuzz/corpora/client/7203f7b631c82414ed32ae675b4c2fb790b84995 create mode 100644 fuzz/corpora/client/72053bd2180eabcb02668282bd59361b1efec82c create mode 100644 fuzz/corpora/client/7210660ff4017eed30c341c8bba45864d991f8b8 create mode 100644 fuzz/corpora/client/722f502e2ca0b06578196fdc88cbceae2a77d6d0 create mode 100644 fuzz/corpora/client/72326c051724f369c7abcdedb03a615cf3eff978 create mode 100644 fuzz/corpora/client/724cebdf1939017bbf550ab877137f79fa67e270 create mode 100644 fuzz/corpora/client/725187002888c50d040f456b8d3f9efb3e1604b6 create mode 100644 fuzz/corpora/client/7267b8769554da4d44e2aa299fe8ea4f90104f4e create mode 100644 fuzz/corpora/client/7284b58a67fdc749b8be79e976c1bb6f5fccbba8 create mode 100644 fuzz/corpora/client/728aea6ae6a9ba502620179c4f7b97e97af25adb create mode 100644 fuzz/corpora/client/72985aaf009b17a0cfda2b8ac9bb606437a5665c create mode 100644 fuzz/corpora/client/729d25843ad69664dd3096c6fe21764562707c18 create mode 100644 fuzz/corpora/client/72ae3e33974e6e96be2dfb9a4abbdc9e22430cb3 create mode 100644 fuzz/corpora/client/72c20f93b63a45b5d6a8df57e3e76dbf96763d78 create mode 100644 fuzz/corpora/client/72c442861cc01cd40b8c404a261ae70e0049deb6 create mode 100644 fuzz/corpora/client/72cd2dd6d0ff7e481bbd8d8e5b2d9322f45cc589 create mode 100644 fuzz/corpora/client/72d0f2452fa8a96174fe5bbf2f1786ee20c517c8 create mode 100644 fuzz/corpora/client/72e6207bdf6c1d360074e3c1f48f6fe7da9bc8bc create mode 100644 fuzz/corpora/client/730c04a002846848969d25b98d7468b0d35e5c68 create mode 100644 fuzz/corpora/client/730faadef9685e36b22b8a447e2cbe52af1de6a3 create mode 100644 fuzz/corpora/client/7311df1ac10b2734a808343bfab753732d3960d1 create mode 100644 fuzz/corpora/client/73183c15fcd115d449f35b5878b2361ac769f54a create mode 100644 fuzz/corpora/client/738fcc82adbc81685c4a239f207b25e19f887bea create mode 100644 fuzz/corpora/client/73963575fffd9277c474bce6cb3544f1a718b5fd create mode 100644 fuzz/corpora/client/73a7ff3af6b99a3616cd80997a60659229867c5f create mode 100644 fuzz/corpora/client/73b4854764129f8ee12d929dcf447cc27e4461ca create mode 100644 fuzz/corpora/client/73bd1073b4e85766e4c495fbd49a1fb928475048 create mode 100644 fuzz/corpora/client/73c9b077c54b048d22f7341942915b18502bdad1 create mode 100644 fuzz/corpora/client/73ff8c48806d9e67d4ef45f51ef9ef8243db4f90 create mode 100644 fuzz/corpora/client/74016fcdb97421f530c400e4d5d448ded5031863 create mode 100644 fuzz/corpora/client/74109d3ae182ee04abf0540ef373ed07857f3f16 create mode 100644 fuzz/corpora/client/74540d654ac511b51614a072e21c010a5078c204 create mode 100644 fuzz/corpora/client/7478079a5d905013680768609cbe7fdf24566a12 create mode 100644 fuzz/corpora/client/7484bfa89f250ac29a10eab4cde927d3a72fff67 create mode 100644 fuzz/corpora/client/74a63ada3081170b51a81c9a05ebdafbb2864447 create mode 100644 fuzz/corpora/client/74a8583d0fd59d7dc4be0318522fb3be32bb84e3 create mode 100644 fuzz/corpora/client/74bc118b2e16e09702cc2be176b943d030f42e46 create mode 100644 fuzz/corpora/client/74cd8d18bc053a60ffa1adde77d94315d9cb498c create mode 100644 fuzz/corpora/client/74d95a1769df10ed725be1c6c1717400d8f2fe77 create mode 100644 fuzz/corpora/client/74e0f3be6c0b6721e8183a9049877b461e64b087 create mode 100644 fuzz/corpora/client/74e2c56599ebc12b7a129a96358d885fdf75d5ef create mode 100644 fuzz/corpora/client/750d0b40bc02be3126d91495fed74ee022830860 create mode 100644 fuzz/corpora/client/7534c5d8806f0bc4f4be31665c4402071fe5e436 create mode 100644 fuzz/corpora/client/753be213c61c6413588ab03da422df8ab8e8f561 create mode 100644 fuzz/corpora/client/755d76a29b33adfd5239275d86f9b8b1cbc6067f create mode 100644 fuzz/corpora/client/7561ca8d1572b0f475436696de8579c3c7e563c8 create mode 100644 fuzz/corpora/client/7566b04ca106a919dc4cb19104578f5d8a72e469 create mode 100644 fuzz/corpora/client/75762ea505477f546d8723fcade6b9e12685bd9c create mode 100644 fuzz/corpora/client/757a8153b1b0addb07206df85f86e02bec23c2aa create mode 100644 fuzz/corpora/client/758e74a2bd00387a332cdfa86dd4a1fe2f7fd319 create mode 100644 fuzz/corpora/client/75a8587720fe8ee931dbd89bd2f366198389120c create mode 100644 fuzz/corpora/client/75b354f899ce11b79f65a87f132a5fb12b2246c5 create mode 100644 fuzz/corpora/client/75be41563c353bb887460bf255c65c06d841b323 create mode 100644 fuzz/corpora/client/75deea4226c2bffba1d1403a44b1b94536308dc1 create mode 100644 fuzz/corpora/client/7608afd979a7b9cce6f0b04be5709e968b04658b create mode 100644 fuzz/corpora/client/761f7d2dddf1fe63b93c770515bff2f482918ccd create mode 100644 fuzz/corpora/client/76251d1d1ae6edf14ccbc2d6bdf40637efe57fc2 create mode 100644 fuzz/corpora/client/7637e12eda72a17b8ab78b3ea0515a0cc5cfa6ad create mode 100644 fuzz/corpora/client/763d816cf4d5ee685f834b4f6ddf17b17eff4479 create mode 100644 fuzz/corpora/client/76454fa6203612451d5f1b9b17b34b2972a84cf2 create mode 100644 fuzz/corpora/client/7648b066d3c4f5cca733d460b09236a4a7d616aa create mode 100644 fuzz/corpora/client/764ce6bdd3253476d7e5fa42af7c908ac76642b9 create mode 100644 fuzz/corpora/client/764d4ce5a03d6cbaae89865f4b4160e60d386672 create mode 100644 fuzz/corpora/client/766ffc7fea84daaa914a9f8c045512d383765653 create mode 100644 fuzz/corpora/client/767d253c5b9cb093fc533f6aa2ce2546b81eb002 create mode 100644 fuzz/corpora/client/76928c16815e4565fc6239561cc3915bb8cb7d72 create mode 100644 fuzz/corpora/client/76a97bdd913e04eb9984c915aa817e0a3b4e77ca create mode 100644 fuzz/corpora/client/76a9889141ccc0478691c971ef9450f890b50fc8 create mode 100644 fuzz/corpora/client/76d51598e263d06dfdcc4cfb0ad0231f79ffbc64 create mode 100644 fuzz/corpora/client/7710a808e990b562b8c7de563a0e758a706ac5c4 create mode 100644 fuzz/corpora/client/772a6443f8cab9ab694c7b612d8d5f17bc45a53a create mode 100644 fuzz/corpora/client/772dea3c069917a43fe6f264cefc2261345ca6f8 create mode 100644 fuzz/corpora/client/77461e41ea64959b68798f26601ceb52b26ed1ba create mode 100644 fuzz/corpora/client/7758a39c482075635ab052267492ae5639f2148a create mode 100644 fuzz/corpora/client/775e99b8edda0608b0d44fce4532cb937c645dde create mode 100644 fuzz/corpora/client/776f1074af78661eb93165566533653804930394 create mode 100644 fuzz/corpora/client/777228b2f7cfe0121a0955e93f3ea0e0bd6bbdb4 create mode 100644 fuzz/corpora/client/779e21bf14f0ffaa564e64527460d532b12f6142 create mode 100644 fuzz/corpora/client/77a455df9b83e943accca9e8d922699f0477be9f create mode 100644 fuzz/corpora/client/77bffc6f487f044f493fe66aa7f84f210f8b9087 create mode 100644 fuzz/corpora/client/77c708949fa3cbcd16421e5f780371953e5dd11a create mode 100644 fuzz/corpora/client/77e0812d8cdebbff9271481d9e2f9006fe657b56 create mode 100644 fuzz/corpora/client/7800615b29996eee991ed88c87622bfab6df634b create mode 100644 fuzz/corpora/client/7848dda5afc52b6d29eabd80996d5391e1b4249f create mode 100644 fuzz/corpora/client/78496e9afaa4fc130e88431c6224687cdb34dbca create mode 100644 fuzz/corpora/client/784dd072b3bd9fc3fb7876dc3036e1d50bb5d62f create mode 100644 fuzz/corpora/client/785b47cc676e125942c55469dee10286b2ead181 create mode 100644 fuzz/corpora/client/7864c9ed2cf65d7eaa89ef289e317c316bc81fc9 create mode 100644 fuzz/corpora/client/7879ace9ff536f40f4fb9c4251facbdd94446148 create mode 100644 fuzz/corpora/client/787f85085ce6e5632144f29cb3dbf33b1ea22ca0 create mode 100644 fuzz/corpora/client/789dbf6aeacec0fdc8d1710a6d4ad147994cdc95 create mode 100644 fuzz/corpora/client/78b6fbc42be8bdc1231ed318c99bed7da92e7d2e create mode 100644 fuzz/corpora/client/78de135a17f288d8179be92be068b9fdf1fe8972 create mode 100644 fuzz/corpora/client/78ea8988fa0b1cc940728f48e1506e00c3c364c6 create mode 100644 fuzz/corpora/client/78ef57aeb6861b6fd95e8e4c079e754844e986b9 create mode 100644 fuzz/corpora/client/790e1ccc87f2154465439fce6322611b1f14eefa create mode 100644 fuzz/corpora/client/7917768b218f45d5e7b167812a8c5e11d2e807c8 create mode 100644 fuzz/corpora/client/7957864b246ce2100fc14909ece0c78ff0cc9666 create mode 100644 fuzz/corpora/client/79b9d121c8be89e9460be36bc06e673c3ac10ee5 create mode 100644 fuzz/corpora/client/79c34605ba5a34febaeadfa690720d985b94e787 create mode 100644 fuzz/corpora/client/7a105e5295c71c0aea41a65bdaea6da8445d3010 create mode 100644 fuzz/corpora/client/7a109eaa6145189f944e241efb3c4564d388f2cf create mode 100644 fuzz/corpora/client/7a1354e4fee5731fd737c47a50a9930661932acd create mode 100644 fuzz/corpora/client/7a22a1bcc58f696b828b2910c11a0fd2c5a037fa create mode 100644 fuzz/corpora/client/7a2877b16dc73a6149cd6879cd08865feedc649a create mode 100644 fuzz/corpora/client/7a324de5dab0693d6d4d0bce5ac11d4ab62ee66e create mode 100644 fuzz/corpora/client/7a37ea6c98a9de58a5cbfad0b50d95306d92fc24 create mode 100644 fuzz/corpora/client/7a5efd1bca1282bf6bb38e09893704452c5ee5f4 create mode 100644 fuzz/corpora/client/7ac087086f0b5c3c2e477e5eaf696f5e80d4f4fe create mode 100644 fuzz/corpora/client/7adaa2dcbd0c3e15a3c1653bc3fdaa6f5e0d7751 create mode 100644 fuzz/corpora/client/7af40d26bc8b5a9f99fd686beff3d315d0e2fe1c create mode 100644 fuzz/corpora/client/7af988b1b8837044b2a3894c3278d21b3d2b0632 create mode 100644 fuzz/corpora/client/7b17e15dd5f0d28a997d43b66189b0bfc65090cf create mode 100644 fuzz/corpora/client/7b45539f4ab4e6bd4abdadee532b340c39882757 create mode 100644 fuzz/corpora/client/7b6b7b8fac5c7e0dd3e31a8fc23d72ea61b19559 create mode 100644 fuzz/corpora/client/7b9fe069ec730861cc81800ba62b7707691f66e7 create mode 100644 fuzz/corpora/client/7bad14e433dceb92a08c1b8f1611be747fe85594 create mode 100644 fuzz/corpora/client/7bb334b03988cb1fe62cf08b36b084d7dfa6b410 create mode 100644 fuzz/corpora/client/7bca20a878192c482989b3700f6a50b5e70d770a create mode 100644 fuzz/corpora/client/7bd1c5456e5bfa15d866ccde29bcc6b3799182d3 create mode 100644 fuzz/corpora/client/7bd22b74f792f6d1b54aa2f9bc538afd9822d961 create mode 100644 fuzz/corpora/client/7beb951d0b7cb6b80300a7afe4586fa0803c9ca6 create mode 100644 fuzz/corpora/client/7bfb9e098941ee83753b36f0158349d7bc8743a3 create mode 100644 fuzz/corpora/client/7c103d11bfbd51472b1ec76ec57fd9901b89782f create mode 100644 fuzz/corpora/client/7c1c64986806d83b5e2fda4a7ab7351daa4de813 create mode 100644 fuzz/corpora/client/7c45c53ec89bb665d647e80dd407c652861aebbb create mode 100644 fuzz/corpora/client/7c49625f6fdabe52ccb9633e9e769fb372d31463 create mode 100644 fuzz/corpora/client/7c71e0ee961d738b7dcb38fcdc9f72a2cb149e55 create mode 100644 fuzz/corpora/client/7cbd7633e693ed95c9735e8c9fcb27abd6914097 create mode 100644 fuzz/corpora/client/7cd61e2bf4a4b2b229bcc9382e05c8c8326a68c6 create mode 100644 fuzz/corpora/client/7cdfd647813443b228a52b9a374b1755c368c4aa create mode 100644 fuzz/corpora/client/7cebe50b2bd66b94fa002f846fa0ad17e8137c11 create mode 100644 fuzz/corpora/client/7cf26fd59bd637b6fd77a9eccc48456217ab17c9 create mode 100644 fuzz/corpora/client/7cfd556456f6849d2f6a4162afa2bba1907d7728 create mode 100644 fuzz/corpora/client/7d1623c6e9fb0c09e01da32fbf3637a25593aeeb create mode 100644 fuzz/corpora/client/7d16803a5d22254e7ee0b919f0bc9998895aa3ac create mode 100644 fuzz/corpora/client/7d5226a3d02a667f7b33f875ddfb3f4084315efe create mode 100644 fuzz/corpora/client/7d573e0cc03214778b06589922e1b702cb285bfa create mode 100644 fuzz/corpora/client/7d74b4946de11247b869dbe46002d0faf574ead3 create mode 100644 fuzz/corpora/client/7d903e207ee324d6b70f1df58e0a8a850375a2c9 create mode 100644 fuzz/corpora/client/7db159e27b959d69769d42220768c85ad6b0325d create mode 100644 fuzz/corpora/client/7db926161f8e15089919a47fdc989544d348ff64 create mode 100644 fuzz/corpora/client/7dccf3dbaeaa38f8ca5de3abd5105f5677246435 create mode 100644 fuzz/corpora/client/7de7fcae5f4b76cfe7f1eb95a280e8260329fcb4 create mode 100644 fuzz/corpora/client/7df2c6ec04ef239f61ebbd917fe56017c0375bf8 create mode 100644 fuzz/corpora/client/7e07315fe7a149b1bcc3b6a8d3bd9f3ebae18d62 create mode 100644 fuzz/corpora/client/7e088b22324f85775580540d95aec10f29a7bc03 create mode 100644 fuzz/corpora/client/7e0a84a7d5174c2dcc2ed6bdffcc4948b9deb5b5 create mode 100644 fuzz/corpora/client/7e0f6570af80bb4c0d18f648d100eb4f1a933e45 create mode 100644 fuzz/corpora/client/7e11ef9859de7fbbbc17c5ba2620e20a8cf6c582 create mode 100644 fuzz/corpora/client/7e1f11363a617be190fd84a34c44e79c9780af6e create mode 100644 fuzz/corpora/client/7e34109c72bf75011a2433879ead37b9446e9df1 create mode 100644 fuzz/corpora/client/7e377fc01cc2d6de8f247c1009268e184300ad25 create mode 100644 fuzz/corpora/client/7e3b08b064b559cd48d74ef3c9a8af3ec7be66ce create mode 100644 fuzz/corpora/client/7e464a6c2492c31d435e412374976d1990cd3dfb create mode 100644 fuzz/corpora/client/7e86128ecbcca7cf46cce9d1ed46a5608fcbf751 create mode 100644 fuzz/corpora/client/7e88f7cd215f0d89b407386f80749e7c43d08939 create mode 100644 fuzz/corpora/client/7eabe286089144ad2b5ec85ed89b55911acfd2ff create mode 100644 fuzz/corpora/client/7eb6dbded28196211347264642828399519d6474 create mode 100644 fuzz/corpora/client/7eb7c93722e62e67aad69008bb60eeee54020187 create mode 100644 fuzz/corpora/client/7ec9dab94f747840b9a683ef30e7f8eb5d8fe785 create mode 100644 fuzz/corpora/client/7ecda7bd630181b83047bc34262e61d8d3efe350 create mode 100644 fuzz/corpora/client/7ed72bd8f9159af84eb7a801a6e9a004f79d2298 create mode 100644 fuzz/corpora/client/7ee680010d4e4cfcfdb2d3d5fc002a96fa965c89 create mode 100644 fuzz/corpora/client/7f291b4ca4836bdb0225066dbff673d99569e5ce create mode 100644 fuzz/corpora/client/7f3ffb7c466ac920adddac9aeef14bb469fa387b create mode 100644 fuzz/corpora/client/7f43604c405bca4dd41aaf31112be2b30375547a create mode 100644 fuzz/corpora/client/7f665e54f7b26e8081e85c2993b45288aea17a30 create mode 100644 fuzz/corpora/client/7f79e5f910c37363321c1d8ef3a63a977b7c040f create mode 100644 fuzz/corpora/client/7f7c85ec97a11cc513ca4af2124bd10e47c9e663 create mode 100644 fuzz/corpora/client/7f817d0265c7b47aaaf05c70e591f8a41593aaaa create mode 100644 fuzz/corpora/client/7f87afaadec5937383f2a58ff56e6318238e78bb create mode 100644 fuzz/corpora/client/7f8e7e03756fdc9c5fa04a157c63b0a6ea62e6d0 create mode 100644 fuzz/corpora/client/7faa3d3cfe0da9f659a917f65896d86497c5b41a create mode 100644 fuzz/corpora/client/7fc8aff1685a2549e1d5f9d14c029ef8d2b0f588 create mode 100644 fuzz/corpora/client/8005840d8b47a9a0ac70de098fbbdca1c67a53e3 create mode 100644 fuzz/corpora/client/8006080a7eda4cfecfe758e01e2e5b6a1e264b11 create mode 100644 fuzz/corpora/client/800bd03706f4df76b46d1a1ad14e325dc056642f create mode 100644 fuzz/corpora/client/802e443348f93619ac37401f405ec3690a561c06 create mode 100644 fuzz/corpora/client/8065853bcf0f33c20ff534c0a9ad659d3d7096a5 create mode 100644 fuzz/corpora/client/8088287150e594999c6eea9d13752de7befb5f68 create mode 100644 fuzz/corpora/client/80894fde6cfa385717f675127fa1ee75c001f882 create mode 100644 fuzz/corpora/client/8096ccd6c2258a72ba6b27651e9c96edbf825b5b create mode 100644 fuzz/corpora/client/80b016bea274cb05470930325d421f75bddfe1ea create mode 100644 fuzz/corpora/client/80b43069aec45d245f247ea3877ea5e9f0393cdc create mode 100644 fuzz/corpora/client/80c668ece8b4b505f0f7a2aa319f3b2f4e015084 create mode 100644 fuzz/corpora/client/810b85962927545fc269202560ad4098297e7624 create mode 100644 fuzz/corpora/client/812d3a4277546c5918c644a008e2999ba63b533d create mode 100644 fuzz/corpora/client/81530286fba20315ee52653fdebaed2e36859a33 create mode 100644 fuzz/corpora/client/815f0f14986eb99682a63d0a46b30f31db72cda0 create mode 100644 fuzz/corpora/client/8174d250bec23cdfadc2d035a58b84b86d702bae create mode 100644 fuzz/corpora/client/81a18d930cccf9397f94205a52e00baa771ff9b9 create mode 100644 fuzz/corpora/client/81ad16d26f1adb17aea0a7e73f2536abcd18e5cf create mode 100644 fuzz/corpora/client/81ae06eafa2de6c7f566382bcc762990c094810d create mode 100644 fuzz/corpora/client/81b70d3ea4b4bc0557a7bdff776c9409f86f1a3b create mode 100644 fuzz/corpora/client/81b9d62ad892450ae4a06878708cac206c93222f create mode 100644 fuzz/corpora/client/81bf92815e401c53d6ecc50767dfe7adcd069f1b create mode 100644 fuzz/corpora/client/81ccb7b84d4d6105243d1e539907dafb3ec2e5f0 create mode 100644 fuzz/corpora/client/81d3d129e58781e592fd9caba2b7b16ae83826b3 create mode 100644 fuzz/corpora/client/81fe8a107ac9bbce0b6835fb33583b037741b168 create mode 100644 fuzz/corpora/client/82091bb3e716b8255f914a83639f577e92d782ef create mode 100644 fuzz/corpora/client/82312267216f5d6ed380fdeed37dc35799a4a09e create mode 100644 fuzz/corpora/client/82509a8c625aa97ca892f2a44c824a05a2296af6 create mode 100644 fuzz/corpora/client/82580ae8c99b308569d36228d76d71d67e59b884 create mode 100644 fuzz/corpora/client/82af97e0bfcb0a943c3ea9a107c477c3b359bf0c create mode 100644 fuzz/corpora/client/82c827530544e5a474636dbd83ef67bff233f452 create mode 100644 fuzz/corpora/client/833da2974da455f3b04a2bf7c9008e4e4915f247 create mode 100644 fuzz/corpora/client/836701bebc7cdef6a5b4c5e121b87fc8ffc58481 create mode 100644 fuzz/corpora/client/837ba875bc23e55390a4a8364c4de45c73d0b3f3 create mode 100644 fuzz/corpora/client/83bbe95b21e77fc9193181eae0ed1a0294fe56f4 create mode 100644 fuzz/corpora/client/83c906318c6a386c33112f69fc08b1d96be7adb1 create mode 100644 fuzz/corpora/client/83cb9e17d4232115ba6dbd27caf02eacf6ef18ac create mode 100644 fuzz/corpora/client/83ea0165644a2db58a78cbc768936c02d16589f6 create mode 100644 fuzz/corpora/client/83ec991118f112d000c9c4440f175206f51812b6 create mode 100644 fuzz/corpora/client/83f2176b46f612e4584476a19f0a61aa58053a2f create mode 100644 fuzz/corpora/client/842f6853dc86bab8623f505a0bf9a3af0a272290 create mode 100644 fuzz/corpora/client/84300be4bf4dd042edc139feddeef21cad7eddaf create mode 100644 fuzz/corpora/client/84659835e852e64fc4dc51b86bd65c01f2120449 create mode 100644 fuzz/corpora/client/846ca68b5b40b38630cfe7010a42e91b7a005ff1 create mode 100644 fuzz/corpora/client/84786169bcd9c31529370354666f169ab985efa8 create mode 100644 fuzz/corpora/client/84a4d812227d7f4915221fa9c74a5afb1955570c create mode 100644 fuzz/corpora/client/84b27f74329de3c57a72e95be25af9a722560f17 create mode 100644 fuzz/corpora/client/84e64176faa898281ad70003ac33718f22aafa64 create mode 100644 fuzz/corpora/client/84f25dd6ceef48d2fff2f6d1641cc735034eb005 create mode 100644 fuzz/corpora/client/8515110a0d9177e12d38c01bc830a053f933bdc9 create mode 100644 fuzz/corpora/client/85246176c0dcda88a3388cccf1586881ee1cf430 create mode 100644 fuzz/corpora/client/85270bfc4ac827eba8bd42da919d8e0b56063a6a create mode 100644 fuzz/corpora/client/852d80f1c466d8eaf0619fa385f9a342323524d9 create mode 100644 fuzz/corpora/client/85345d9b6656c58ca7ca7fa36a2907d99b26db28 create mode 100644 fuzz/corpora/client/854ddc6efa00c86faa27c2510d4f57c27b88867c create mode 100644 fuzz/corpora/client/855e5859f60162c3bce02dad3ea7dee1fb80277d create mode 100644 fuzz/corpora/client/85935205125e8e60b308c2d17a2ed465c823ef70 create mode 100644 fuzz/corpora/client/85a347fe6e0979a1ebc799bc83a364a35c8a1a71 create mode 100644 fuzz/corpora/client/85dd333dede4cdc0e38f70ae664636a6fb79fae0 create mode 100644 fuzz/corpora/client/85ec97632cfdf439d1e778be5bedf4d1c8695f7f create mode 100644 fuzz/corpora/client/85ee4dd36a737a523b838ab76365fdd7af8e4dc5 create mode 100644 fuzz/corpora/client/85fc28c0749555aff7ce8b54b6ad294205efc127 create mode 100644 fuzz/corpora/client/8618d9c8d141f5a8f52ee885a76aca16f8bc4551 create mode 100644 fuzz/corpora/client/86218288c0382566970888f8e87e27358fde005d create mode 100644 fuzz/corpora/client/863511e34f9dbb709165919fd803cb302dd08699 create mode 100644 fuzz/corpora/client/8650e93278abb62fe5aebe333c733ffaa3fef8d7 create mode 100644 fuzz/corpora/client/8652b7f6a158ba039bc5283460a9e4798576ceff create mode 100644 fuzz/corpora/client/86848a24c49c31c6987974d1cbd2b106697d8d93 create mode 100644 fuzz/corpora/client/86a11bb86cd4ee90c72761ec511e028c0253a6df create mode 100644 fuzz/corpora/client/86ab1fd145c9ad738cdbf09c222357a661928868 create mode 100644 fuzz/corpora/client/86e4db3df7a75080593162b5d7c6948d39787976 create mode 100644 fuzz/corpora/client/86ed9333ca25f49833981ea67e3ea10d1bd35e3e create mode 100644 fuzz/corpora/client/86ef883c3190c41f03cc7601bb5ad4546a21b6ae create mode 100644 fuzz/corpora/client/87362de5a0e787a87b03df6fbaf9e05de0045d55 create mode 100644 fuzz/corpora/client/879770db7771ac156ae7ff18f2201bbba3b4e29f create mode 100644 fuzz/corpora/client/8798b62d9e0250713d81eba8734036f5e3703c3b create mode 100644 fuzz/corpora/client/87cd2689ad8823327cc82571025d88134975d4d2 create mode 100644 fuzz/corpora/client/87f136d02b626c46670cc84746740b6d2015eba6 create mode 100644 fuzz/corpora/client/87ff5e5da7d4e445293a00e864c6326604b8ba8e create mode 100644 fuzz/corpora/client/880e6e87d086f249d4906ab0e39807d37f6486ad create mode 100644 fuzz/corpora/client/88256c23c8dca4f4b3c3e00277efcd7ccbdbf83b create mode 100644 fuzz/corpora/client/882de7650d969b99d688dead53dd91f8f12a7e23 create mode 100644 fuzz/corpora/client/882fc1e12e2bf996014142a0050c1e02708b26ea create mode 100644 fuzz/corpora/client/8854503d42dc4f45f3aec2fbde4a395cf571f3f0 create mode 100644 fuzz/corpora/client/8854cdb668ae2aad841f709b9bc02604bc993a10 create mode 100644 fuzz/corpora/client/88561a552c98ebe63ac0b7e9c14d3ab76a46a824 create mode 100644 fuzz/corpora/client/8866ff2d3523ec2d93c90c300868c9cd08b7a753 create mode 100644 fuzz/corpora/client/887b981a10c863e56186ec93749b66992200e365 create mode 100644 fuzz/corpora/client/8895aa11c164ab6ebcc4bdc51b9d13f270f429a5 create mode 100644 fuzz/corpora/client/88a318dd25a72a38940029bbed6f8cd8d62711e0 create mode 100644 fuzz/corpora/client/88ac844afb095902586d821ccb99aaabd4f38628 create mode 100644 fuzz/corpora/client/88d08617dbd00886e85c0c95524e45f8ad22ed67 create mode 100644 fuzz/corpora/client/88d8dd3ac9d2c5145c9e678132e686c118e08971 create mode 100644 fuzz/corpora/client/88ee8df05f5a10f9c21f91415586a58162028641 create mode 100644 fuzz/corpora/client/8937c14f810ee100b68ac804b349e821aa2871df create mode 100644 fuzz/corpora/client/89465be06a694d1268447fa123e6cb5aeab40fec create mode 100644 fuzz/corpora/client/8994f9d3cd7530aecee769e5ff6394ee36f71456 create mode 100644 fuzz/corpora/client/89994228dddd6c94de288ba39c1b1dd3608f9e63 create mode 100644 fuzz/corpora/client/899efd763078bc3f40ff20c37148761414c5495f create mode 100644 fuzz/corpora/client/89afdfd860230f2a6d7285f0d70a9975babfd0f1 create mode 100644 fuzz/corpora/client/89b0977c02e5fcd918547bd999843bf0f0676f50 create mode 100644 fuzz/corpora/client/89b5a3cef2468fab3659b4efd38e340963c0ca50 create mode 100644 fuzz/corpora/client/89c48b81673a00ff46654fdb4e7ef4f9a71e1d57 create mode 100644 fuzz/corpora/client/89f1fd15064ed7d2b226a7365ae202cf1dc7d00c create mode 100644 fuzz/corpora/client/89f94628d246d4ba357f2ea779e6db94d5afe9d7 create mode 100644 fuzz/corpora/client/89fbbfce741e85c71819bd0a123307c7df82af06 create mode 100644 fuzz/corpora/client/89fdaef5066c7d567cd941ae36b92cee67ad09c6 create mode 100644 fuzz/corpora/client/8a31c65000afb4b3b3bce9ed45e000fd2829ec0b create mode 100644 fuzz/corpora/client/8a39fcf863813a19959a6190c39d7d6c44527ade create mode 100644 fuzz/corpora/client/8a4ab3575d18e2299b38287e6da94dcfaea53ad9 create mode 100644 fuzz/corpora/client/8a532adb13fb66bac60742f30c3b1d0b92648c11 create mode 100644 fuzz/corpora/client/8a6d685bafba0b09a136d2f253c7e06cb389df12 create mode 100644 fuzz/corpora/client/8a76072faecb15d59c136ce976cabf01fe0077e8 create mode 100644 fuzz/corpora/client/8ab574c56a6a9b5dd0dac0330902b72382aa326c create mode 100644 fuzz/corpora/client/8abd2787b83a62311dab178b44c8d139269dbe6c create mode 100644 fuzz/corpora/client/8ad96c51ae9eba1576553b48f273aa1c8c309202 create mode 100644 fuzz/corpora/client/8adfa2fd98cee407d118258cfc9b20ba989eacc9 create mode 100644 fuzz/corpora/client/8aeaefdb04030417caa6f7de734736c2b3950f86 create mode 100644 fuzz/corpora/client/8af8ce482084cefc956aae4ff803605e667639eb create mode 100644 fuzz/corpora/client/8b2443aadbcf7677aae77de73477833394e93d04 create mode 100644 fuzz/corpora/client/8b6989e8f6e43a96a308ceb5217be5022c5493f4 create mode 100644 fuzz/corpora/client/8bac0145d4941ffd7a956dd8ccbf5078739cc878 create mode 100644 fuzz/corpora/client/8bac81c5d1e222f649014f957ca179d2bb4a041a create mode 100644 fuzz/corpora/client/8baee9087cc77f5b9cab27b6f537c2e82f9b2ce1 create mode 100644 fuzz/corpora/client/8bb7ec509606de06287bb0e8c29980b19aa67093 create mode 100644 fuzz/corpora/client/8bc30b0ea95b3a86e3d2eaeb14d688c10ddbe11b create mode 100644 fuzz/corpora/client/8bc60f90aea4d97d3ad268217a510423259d1906 create mode 100644 fuzz/corpora/client/8bf45f3387b829ddab43d65eae81c67c784383d8 create mode 100644 fuzz/corpora/client/8c0469c376d0f3b38ac6a8131dfc754196048e2f create mode 100644 fuzz/corpora/client/8c6b20d512790058a3456ed74a08f382eb8d2bec create mode 100644 fuzz/corpora/client/8c7ce3e37b525b5eb6b47fa878535f0830cbbede create mode 100644 fuzz/corpora/client/8c7ff86fa53a00b5712251a3160d9638d95a80bf create mode 100644 fuzz/corpora/client/8c91d70b847cf17cc5ba9c9710e5112bfa2eade8 create mode 100644 fuzz/corpora/client/8c9c073d7e6aa81d8368d6abb4a19dae60db1e46 create mode 100644 fuzz/corpora/client/8ca4e1927fa94e6b697c94a87c02e4da38cce5b5 create mode 100644 fuzz/corpora/client/8cd10be9e6fc7c611dd9affe18382dc4fb83a856 create mode 100644 fuzz/corpora/client/8cde5c0c27b69e33808d0a353e3b1f003b0ea086 create mode 100644 fuzz/corpora/client/8d22d7ff356b5e8ba603f1c9a03219f0c519ba4a create mode 100644 fuzz/corpora/client/8d56302b5c690194dcb908a57566ab21b05da0bf create mode 100644 fuzz/corpora/client/8d60f89f01471a99e27186d20615aa6a178f4e0e create mode 100644 fuzz/corpora/client/8d635904c9bf834fcfbd3c633a8a4e8e336dc819 create mode 100644 fuzz/corpora/client/8d69f19e0ee474b2f8e6199a09fff2f05203be6c create mode 100644 fuzz/corpora/client/8d8591547b941ade208ff5caf82067d0d57de40d create mode 100644 fuzz/corpora/client/8d9c954ce7597d83c383b21c090cb8d37288654f create mode 100644 fuzz/corpora/client/8ddf39f3b9d85a0687754195108fa27b36725ee4 create mode 100644 fuzz/corpora/client/8df10aab698d3018ed91364a9e738b8a44efe373 create mode 100644 fuzz/corpora/client/8dffdc84f4a44ba215a312286ad39c183d482914 create mode 100644 fuzz/corpora/client/8e040836e8b1cc1bf9e6c97d9a7680e49b706286 create mode 100644 fuzz/corpora/client/8e0761c5011d4a5a43e03af86d7ad8b3968c2860 create mode 100644 fuzz/corpora/client/8e493b8b0bd03f4f0753420569ade537b33617fa create mode 100644 fuzz/corpora/client/8e4e7a3c9a9c20fa932212cbfb1f350217e5d7fc create mode 100644 fuzz/corpora/client/8e62d6dc849dbbd5ee93a9e967c3adf3f32d8764 create mode 100644 fuzz/corpora/client/8e8a57e2e8d2faa1e450fb76259f90043c21aeb9 create mode 100644 fuzz/corpora/client/8e90b3fe580079ccae2ce7191141cda56859959b create mode 100644 fuzz/corpora/client/8e93551f0a6dbcb9bd8a7a749374f9b9d766e8d0 create mode 100644 fuzz/corpora/client/8ed599b336b3ceceeea9a6a3171a5c7be977fa81 create mode 100644 fuzz/corpora/client/8efd566d0fd80ab15fb02d1a020e7f1538214db4 create mode 100644 fuzz/corpora/client/8f0a7ddbdaf772001db5700d821a1c8911d5f381 create mode 100644 fuzz/corpora/client/8f29d3d8fa138c57f52024f042657e2af48efd7c create mode 100644 fuzz/corpora/client/8f5c999209f88a020bfb1232337249aa5e6521a4 create mode 100644 fuzz/corpora/client/8f8c17c2ef6cfdd95c974d9ef1995ea77f6178f4 create mode 100644 fuzz/corpora/client/8f95b99ad1e41b8f91bf45165e59d1a303bd07d0 create mode 100644 fuzz/corpora/client/8f9667706da73846428a1cd630d484164bb7494a create mode 100644 fuzz/corpora/client/8f9910f05be99a0e0a499a62166e2fa00f977ae6 create mode 100644 fuzz/corpora/client/8fc8fd3ddc230616349745ccf9c182f04f8ad7e3 create mode 100644 fuzz/corpora/client/8fca8e0096a40d97f3a6fc88b023a49cacb2bb80 create mode 100644 fuzz/corpora/client/8fd5b42f89b532efdabe1c48e7dd09470d60110c create mode 100644 fuzz/corpora/client/8fe52cd5a702a1f9761362af9f49074be3d986ad create mode 100644 fuzz/corpora/client/8ff8e6e2ebcaef9d659c1b9c25bac85516ec8505 create mode 100644 fuzz/corpora/client/8ffa176abc5986c601045b9c95abf1e3eb6f4e23 create mode 100644 fuzz/corpora/client/9013ae85a8fe8c47edaa5dea1990a0078902a448 create mode 100644 fuzz/corpora/client/9020b6c628da0de740f08f49b101ab7e8dcb49a4 create mode 100644 fuzz/corpora/client/9062fdbb0fa7e93c13c2de85aa142df368011cc0 create mode 100644 fuzz/corpora/client/9091396a14eb3808e6ea3b1830919189ebe99552 create mode 100644 fuzz/corpora/client/9107e4e080f9ab9d1e5e61b1e8e57162656197a0 create mode 100644 fuzz/corpora/client/91169485f1efe66476f879d963efaf70715af12b create mode 100644 fuzz/corpora/client/9129b7039939fb9517ce9c44fc3e2fd1ad2bc88a create mode 100644 fuzz/corpora/client/913a2736f582faefbca3671e4a6a0ec724c40802 create mode 100644 fuzz/corpora/client/913b9d3f919b06f6b0ad8644d83682bd0d027143 create mode 100644 fuzz/corpora/client/916360e2aeae91eb2e6243905c9b21b6aa068e99 create mode 100644 fuzz/corpora/client/91828e4e351ce60a3ea0836555e6b9fd6e6c97ca create mode 100644 fuzz/corpora/client/91864ab3f3ad954dcd5dd06b0ecb0fd4c8733a56 create mode 100644 fuzz/corpora/client/918b5220ff9a2b672c0d1215d2e1fe2c1c24b86f create mode 100644 fuzz/corpora/client/9194018ef329b78d30a85e536d04c252acb3e26a create mode 100644 fuzz/corpora/client/91b7a7f26f77bba7c990373f873f92675929e43c create mode 100644 fuzz/corpora/client/91e134b5deaa139277191dbd268d9a6da3a52dda create mode 100644 fuzz/corpora/client/91e594e775083a94a975922de99e17d6295609d4 create mode 100644 fuzz/corpora/client/91e90c02509fe07a41d50a6eac6310ff3cf0789d create mode 100644 fuzz/corpora/client/922d7c360a583e08eb1797ace2370e6016294445 create mode 100644 fuzz/corpora/client/9237b62e32deee23ac99e9331f1f42bf14e5f6c0 create mode 100644 fuzz/corpora/client/923b9e7249ae3a41a8029a0cfc5efa96fd4afd2a create mode 100644 fuzz/corpora/client/9256111008ca97bd29b2a9eeed0a3ffdc320df0b create mode 100644 fuzz/corpora/client/9265bac6d0cb49410333f79a73744381e1ab0966 create mode 100644 fuzz/corpora/client/92af5f936172d157956bf5d4b1a69a7e48d1c6b0 create mode 100644 fuzz/corpora/client/92b09525151f6ca84f45ef670e3f8fdecef2068f create mode 100644 fuzz/corpora/client/92c1c5416fc23b66686e4e7beafd501bf3193b0c create mode 100644 fuzz/corpora/client/92cda41c5a3aba4f643db7f5db0545ac103e0a81 create mode 100644 fuzz/corpora/client/92d6b82411bb735f6783e30a6c43c6cbdab15645 create mode 100644 fuzz/corpora/client/92f4b5fc982afd0503e24c054e1d5a9dac9130cb create mode 100644 fuzz/corpora/client/932c86aeedb499ed6c925fe64d2b955791805844 create mode 100644 fuzz/corpora/client/932d843354f11eb8f0fa4350beac2c181ea7d52e create mode 100644 fuzz/corpora/client/932ef3b7bdcdbbd4e0010c28ed1fa4a2be3c9e62 create mode 100644 fuzz/corpora/client/937db6c676d26e3bcfceee79be27c5b3df0b14f1 create mode 100644 fuzz/corpora/client/938d71a7f60273a1ef0bf5b93ffcf6b104d301c1 create mode 100644 fuzz/corpora/client/939bf2dd028188fad86e1f9a89b224495f070c7a create mode 100644 fuzz/corpora/client/93a342b0c45f83a36200470233a074b1386704fb create mode 100644 fuzz/corpora/client/93b4a764d70d42bb5da43782a69f90da516c894c create mode 100644 fuzz/corpora/client/93c41fa7de7cdb511a1f90fd8e2e74bd607d8ac1 create mode 100644 fuzz/corpora/client/93c68e9764d42009f1b0a6be495cb4d966785c11 create mode 100644 fuzz/corpora/client/93ca8d2182284861c29d4db9e072fce5824464a7 create mode 100644 fuzz/corpora/client/93d94ad4b16ea7035a81802e8f9bc685904243ca create mode 100644 fuzz/corpora/client/93f9715b794703ff32029e2d584cbe94b4405ae2 create mode 100644 fuzz/corpora/client/94038c6829cf44359ccdb59c4b165ecf7a31172a create mode 100644 fuzz/corpora/client/941449d40899d7459e95eca4ece36db8bdc45b52 create mode 100644 fuzz/corpora/client/941883c51770ee1cfbcca6a506021e6a8530a53a create mode 100644 fuzz/corpora/client/9450b1069ce1a515fe84c1a6f7c36f294718b345 create mode 100644 fuzz/corpora/client/9482192e5a194d4ce8ba42b6bbf57d8cdff937d2 create mode 100644 fuzz/corpora/client/9489b76ff7a5f709579b9f9883cce2f191d49902 create mode 100644 fuzz/corpora/client/94aceb573a78d4221836ef05259f7e7b19396b62 create mode 100644 fuzz/corpora/client/94b4a00aed43a4a1a17b97aaf2c256ea4c88c9f3 create mode 100644 fuzz/corpora/client/94d666df16066e6be25d592587f8d105c34c2607 create mode 100644 fuzz/corpora/client/94ef77b1c2523a4c49c3f4da57d491a4c98c7a84 create mode 100644 fuzz/corpora/client/94fe15d3e1012ba3f969a406fb6de76e7b752d41 create mode 100644 fuzz/corpora/client/950a006edb709a1f1677ac948b2e12263dea0e9b create mode 100644 fuzz/corpora/client/950bfbfab5cd330ddd40080ba23165caecfb2017 create mode 100644 fuzz/corpora/client/9529121aa332ca0a9bdd2e6beb54bb76c8d2e5f9 create mode 100644 fuzz/corpora/client/952b1436dd7d12bb1ad5285a8d884e85defcc1f6 create mode 100644 fuzz/corpora/client/95366ccba7ae53b3cbf7e96bcb44bdeaa5fbe7e3 create mode 100644 fuzz/corpora/client/9538a2737d07e6338b0b27b6a48c6c3557fb5a4d create mode 100644 fuzz/corpora/client/953d8d336584b3916ef2e3102bd34e72eabef8fb create mode 100644 fuzz/corpora/client/9545eb2f98ab91372982db72f42b5f49feff2ee4 create mode 100644 fuzz/corpora/client/954aef591b3af88a22c24d2aa137858f557d255e create mode 100644 fuzz/corpora/client/956873946e0bbad58dceeca27f540d18e03c1c9c create mode 100644 fuzz/corpora/client/956dcb8790623bd36ddb733ae3650343467d8966 create mode 100644 fuzz/corpora/client/959337c9e40107a60e1b3ea764e32fba77407be4 create mode 100644 fuzz/corpora/client/95a152e9a53dcea7bd8d69b9e4ca95658ec12bf4 create mode 100644 fuzz/corpora/client/95a53d4d2ff384298ec283465965753d91f8f582 create mode 100644 fuzz/corpora/client/95b4ffa0c15d84b6d9321a3b096d9fabcc61d21a create mode 100644 fuzz/corpora/client/95d86ee050e8c952a42cfb494bc09e3bce0a91c7 create mode 100644 fuzz/corpora/client/95e889c2d4bfe06a98dfdcb9f2a25f6552ecb8d8 create mode 100644 fuzz/corpora/client/95e94d107624594342261da38a60b14761204380 create mode 100644 fuzz/corpora/client/95ebe962e5148e744a427df63bef405a341b3b13 create mode 100644 fuzz/corpora/client/9605dc1381adae19b031d9dd230779a31354f9e6 create mode 100644 fuzz/corpora/client/96117345f1e5dd90ccabdcdd93a03b8cd9f8a1fa create mode 100644 fuzz/corpora/client/9694d7d8ddb8b0dbe4acee84cd153fafd67e98c4 create mode 100644 fuzz/corpora/client/9699739cf7670acbfdf4726ae3b8dc193e85c34c create mode 100644 fuzz/corpora/client/969a0bd8636684ec3f505cc14802e85a3f6b6d5f create mode 100644 fuzz/corpora/client/96ab9752100dbedc7a46791f836f0f24a3d60a44 create mode 100644 fuzz/corpora/client/96cb56f06e9a4802f55095d37907fb67489fefb4 create mode 100644 fuzz/corpora/client/96cb570d1e362d695b4e812bb62f545c90352ab0 create mode 100644 fuzz/corpora/client/96f654277951fb4d0cd1be73304f6d2869f588c7 create mode 100644 fuzz/corpora/client/96fe8a84801e27a439d819fd4e2dfbc88d322a35 create mode 100644 fuzz/corpora/client/97085b8fed71030a0c5348b3c8b81fa2a8234fa6 create mode 100644 fuzz/corpora/client/970fd9142e8f348f656b5186ebd66d32a6c2fd85 create mode 100644 fuzz/corpora/client/97272ba8dc93e2d95884f01306f98c38493a918b create mode 100644 fuzz/corpora/client/973ddcbf56aa8189a35b1309233ca5319e5ed9ee create mode 100644 fuzz/corpora/client/9751c7eb8f6b7a16294ffd96a2e4088966317ad8 create mode 100644 fuzz/corpora/client/975574342c36dcc574fc81ec42c3113b752aeb78 create mode 100644 fuzz/corpora/client/976248e3188523c84679d5e7a17824a7f88be6be create mode 100644 fuzz/corpora/client/976a775c2076294d5fee4bca0329b0aa4368364c create mode 100644 fuzz/corpora/client/9774f61b239bbb0b8c4830044bd61ee12efee46c create mode 100644 fuzz/corpora/client/978d67eb094e5c3904e4f17beffa40a97b1aba55 create mode 100644 fuzz/corpora/client/9799c987d4b92f703b1122bdcbaaaf61c5eb7442 create mode 100644 fuzz/corpora/client/97a966a4a91c2888776fcc12b50350de457fd85f create mode 100644 fuzz/corpora/client/97ac0396479997e0d09c2b038aef871f3ebe5e91 create mode 100644 fuzz/corpora/client/97afb8d33f6c9dcecf8d3eede4b6256585ed1953 create mode 100644 fuzz/corpora/client/97b5f3f0bc5d621dde284edc3706d754298c5b1d create mode 100644 fuzz/corpora/client/97b8a70dd1fe4e151307df90290a5b5e2b273ef6 create mode 100644 fuzz/corpora/client/97bb4e10b5b17cbddddfa56d4c241362b1a4740f create mode 100644 fuzz/corpora/client/97eb1f29a3a10586ca14d2e431aa97e387a8c291 create mode 100644 fuzz/corpora/client/97f1924aec640c8cc367bd4d53cae9c5600696bf create mode 100644 fuzz/corpora/client/9809b00b8c0f785b7add7cd0e855ba73bbffc2a1 create mode 100644 fuzz/corpora/client/982a0de865eab2bcd5dc2549be2b6bf9593b6221 create mode 100644 fuzz/corpora/client/9852a89b250ae264ad229f9fd7a9f67bc4530fc4 create mode 100644 fuzz/corpora/client/98538e7355b3048dca7871b9986ff9bd7da3e374 create mode 100644 fuzz/corpora/client/9871aaf78453f9e598c716e1e572bcdd718477ba create mode 100644 fuzz/corpora/client/987ee0f7418df6db00be230dffa5e80687cd8ed0 create mode 100644 fuzz/corpora/client/988111b28834b3c8c6ba5c7101ff082a45dd23a5 create mode 100644 fuzz/corpora/client/98894b3a852a728f4c7d89193cbae91063fdc9b6 create mode 100644 fuzz/corpora/client/98b9e3c2ec914bd4d20429f2d475729f4cbeb687 create mode 100644 fuzz/corpora/client/98fad7ec74eb6f1c125ca2712e129b88d89d9686 create mode 100644 fuzz/corpora/client/9908ceaecd1b8c7cab877391490433105c55942a create mode 100644 fuzz/corpora/client/9959d87ef233615a02007e9022d747cfd04b63a5 create mode 100644 fuzz/corpora/client/99790710aab5d315ccaf21fffd6365a02f9b83cb create mode 100644 fuzz/corpora/client/997afa02ec5e424d91b352b8588cc074c3d7c33a create mode 100644 fuzz/corpora/client/9996bd6b7f79458075cfd7674aed767463ae7203 create mode 100644 fuzz/corpora/client/99b56dbc75d473d072463808971c38dd049c0923 create mode 100644 fuzz/corpora/client/99d972fb38054ff4807982cb55ba407c26f8a6b9 create mode 100644 fuzz/corpora/client/99e047ca9f94d904aadb8cf9b136556be8e7c17c create mode 100644 fuzz/corpora/client/99e0697a23166b6aa152bba3b13b627dc471c641 create mode 100644 fuzz/corpora/client/9a2a4b011408b087158873de95c1b7c2f5cebf60 create mode 100644 fuzz/corpora/client/9a32324789eb5d1bddb70a2923b9c4acaa52b2bd create mode 100644 fuzz/corpora/client/9a3bbccbb902394eb75fed80af16e5aa9a944585 create mode 100644 fuzz/corpora/client/9a49e2c11aa44c1c7badf9b92b5d118226a31a9e create mode 100644 fuzz/corpora/client/9a63a18fed4edabd00ae76994a884182e9d8a10a create mode 100644 fuzz/corpora/client/9a89c5123dd6985b71f7725e4d1481acb5da26eb create mode 100644 fuzz/corpora/client/9a8bd9c815486a927689b3df114b31f9e287df4a create mode 100644 fuzz/corpora/client/9a965842977ccb7eebb73da0eab8ecc6489d2a67 create mode 100644 fuzz/corpora/client/9abc22bb11940fc11888a26db2a816fc8a8b97e6 create mode 100644 fuzz/corpora/client/9acded1500eaf95e29de6c52a6221b3761948a40 create mode 100644 fuzz/corpora/client/9afa5e556fff69a5f8eceafb5f6fc7340834eea6 create mode 100644 fuzz/corpora/client/9b18a12d746c6699777cff28ba7883258fe05714 create mode 100644 fuzz/corpora/client/9b222ef69b27a3932d1e9e71251fc7418371dad7 create mode 100644 fuzz/corpora/client/9b252643d350f8643c301555faaeb76a3989d027 create mode 100644 fuzz/corpora/client/9b3909958835fa3bed2413324e9865086f4df57e create mode 100644 fuzz/corpora/client/9b4861ee48defc5847e42412562aadff369dc10a create mode 100644 fuzz/corpora/client/9b8ba32a1b79fbca2945099342a9e7c1a9b199e4 create mode 100644 fuzz/corpora/client/9b8f8586f37ab1177d072cfe479e043ff61e22f9 create mode 100644 fuzz/corpora/client/9ba279f8ef58d875f6e065ffd6f7b01f4668dc70 create mode 100644 fuzz/corpora/client/9bb22321ac73386c373e28c124c2bf04a9e1a14a create mode 100644 fuzz/corpora/client/9bcbf7333b60a7e04c4fd6bd4412084708352526 create mode 100644 fuzz/corpora/client/9bcfae9eb9e55a856f1178a14cd45c27aabf5ae3 create mode 100644 fuzz/corpora/client/9bf71eccf11060d6819580de80882fe5f55219f7 create mode 100644 fuzz/corpora/client/9c131e30140bc908bb1655135e679ad1f4a48bbc create mode 100644 fuzz/corpora/client/9c1a87a12ea0a4f0d31351c36aa4896f3017bc85 create mode 100644 fuzz/corpora/client/9c34e9421a1f9b06822fc4725c825b86d8e35cbc create mode 100644 fuzz/corpora/client/9c386069a65b403a5f986c765fe59a79a933fc38 create mode 100644 fuzz/corpora/client/9c59826df366f4423627dd3a1ca83b9aee23b150 create mode 100644 fuzz/corpora/client/9c66984c4ac0168eca3b2245c9b163d5eb72139c create mode 100644 fuzz/corpora/client/9c771017767695231c4180deee69069df15993e5 create mode 100644 fuzz/corpora/client/9c8b5735a4f00d4b5939d2e53ee20a540511d3be create mode 100644 fuzz/corpora/client/9ca64305512787ff6e881a185f11a54e150e40aa create mode 100644 fuzz/corpora/client/9cc470a1f855ae0ab2fc0149c35aae5a04bfe957 create mode 100644 fuzz/corpora/client/9d023b41726d37db0713204c94e4b4560e9cfc41 create mode 100644 fuzz/corpora/client/9d166975e5cbfe96f1368b71ce69376081ec6f77 create mode 100644 fuzz/corpora/client/9d2791a4a215ff7ee71e1be09bfa4f6f3c2085e3 create mode 100644 fuzz/corpora/client/9d8a8ca82ee8945ff4a9cb2f7f19fa19231908ae create mode 100644 fuzz/corpora/client/9d9099c81b8c63f0e2ec13e22d807d74b598aab0 create mode 100644 fuzz/corpora/client/9db32da54a250b8d6fab6b574a6c2826b506ed16 create mode 100644 fuzz/corpora/client/9dbdc6e2160380448b43f36a4b91260a05894c9f create mode 100644 fuzz/corpora/client/9dc0d57dcf14db5b8839874f870bb1ee0a1cefca create mode 100644 fuzz/corpora/client/9df24dd7c10d7fc7cdac977e2c726e03d0dca446 create mode 100644 fuzz/corpora/client/9e0700d0068307af1ba776b81b1fe7175618d727 create mode 100644 fuzz/corpora/client/9e0d9807b6588e8d612435c4c38646324ac90408 create mode 100644 fuzz/corpora/client/9e144f2cbfa926733f76f498cd2cb1afc1ca9b8b create mode 100644 fuzz/corpora/client/9e1645f7a7a4b0afd76ea23c871632dc5166b34b create mode 100644 fuzz/corpora/client/9e3b23b8011c606a0653054fd79fca2b341e8d3c create mode 100644 fuzz/corpora/client/9e4b7af243419dc457d5418bd2243e9b05fef249 create mode 100644 fuzz/corpora/client/9e647cb628a9311a684f1a56a1cf87eb82d6f11a create mode 100644 fuzz/corpora/client/9e70eb7fe978337bbe160ff79d1ded63055946f9 create mode 100644 fuzz/corpora/client/9e79cd1c192439823bc7553caa4e9530b7529ab2 create mode 100644 fuzz/corpora/client/9e89af85287dae36afe35930d1d1d72db7bb3cf1 create mode 100644 fuzz/corpora/client/9e979e49a9e61decc9afa3f00375bb5aa9f4a767 create mode 100644 fuzz/corpora/client/9eb3c08cc213b8b936f5519962a18e16fd7e4b61 create mode 100644 fuzz/corpora/client/9eb884927e35a2593026ae007abe1bbaaa1b1889 create mode 100644 fuzz/corpora/client/9ec87227eee002a9599a77a4c8510e54e1dd2b20 create mode 100644 fuzz/corpora/client/9ef0cbd7ca9ac58c14ee10b0a9e554efee71318c create mode 100644 fuzz/corpora/client/9f0820929f5779e7df8f3bcf2a02e57bea76c829 create mode 100644 fuzz/corpora/client/9f0ae41bfcf22240d3a83c8eea33449270d92eb5 create mode 100644 fuzz/corpora/client/9f10e827af86e6d34076e8de9e9cffca91de2b38 create mode 100644 fuzz/corpora/client/9f1f45c340ba6a8d500671d7a9d72c3a1c23d181 create mode 100644 fuzz/corpora/client/9f25e4687be9699ca3d0cdc2dcbf96395d3a06e8 create mode 100644 fuzz/corpora/client/9f2bdf0221eaade1f3dcde654bb31a5ac3e966d8 create mode 100644 fuzz/corpora/client/9f4a40dba3fb04b7ef14e1125afb86dd7616e871 create mode 100644 fuzz/corpora/client/9f4adff279fafcd0e46a433ca11331c43a28ee16 create mode 100644 fuzz/corpora/client/9f5a52d6d3b4d906d064126b31a59d7a77770cf5 create mode 100644 fuzz/corpora/client/9f9381056c6422721387bc479685e4aa061a3f74 create mode 100644 fuzz/corpora/client/9fa14b7e276739a4f9d7c5727566fb13ac0b6075 create mode 100644 fuzz/corpora/client/9fa1881ed7d11a699d43632aa610ffd4f9105b3b create mode 100644 fuzz/corpora/client/9fe051759bd81ecdcee0298524f52f1f4f3d9c8c create mode 100644 fuzz/corpora/client/9fe8028565eefcd37de91f0949c9f5c683e7caaa create mode 100644 fuzz/corpora/client/9ff55f73fc4f03eb4bbb4e10b6c777ce05b67918 create mode 100644 fuzz/corpora/client/a0019aa52b7ce6b2661b139bdc89c9d721384521 create mode 100644 fuzz/corpora/client/a019f57d350a656c7f4d83fe292659bd9ee5b078 create mode 100644 fuzz/corpora/client/a022d1488f7b11225a42080f6021bbb59eb7be67 create mode 100644 fuzz/corpora/client/a0439f9d63887008345a14e62e0a08f64f5b086d create mode 100644 fuzz/corpora/client/a05701399c4a2ce2bc13a0bd4ff23a07740d207e create mode 100644 fuzz/corpora/client/a071f3a1b69e163a9f7b51c85a50f6af381f7e78 create mode 100644 fuzz/corpora/client/a08187086204d7e7943a179482f769f1a3e8dc72 create mode 100644 fuzz/corpora/client/a094a9e28f81331994e2f8d7a9d09b74e383eb11 create mode 100644 fuzz/corpora/client/a0c5a6f149057c44fd5f24122d0055dc139bf371 create mode 100644 fuzz/corpora/client/a0ddc1f558b73b0e418ba3f1bbb680d2ddbdc1d3 create mode 100644 fuzz/corpora/client/a0f274f7ce97a51902b89f24fb93b2a1e91c4303 create mode 100644 fuzz/corpora/client/a0f93be410f177e2b2bf95a83a68f32afa8cfbaf create mode 100644 fuzz/corpora/client/a0fbc97f6d51a16d69ae519dbf492b83f38c8313 create mode 100644 fuzz/corpora/client/a12e40aecc17025579afa74a7e47580a7579dba9 create mode 100644 fuzz/corpora/client/a16034982baf0b67af907d0ec6f71c335781d42d create mode 100644 fuzz/corpora/client/a16a401745c48b40ae502fc583308231f442511a create mode 100644 fuzz/corpora/client/a1ad4d1c6a3f074204ed3d5b6a724b1206a20431 create mode 100644 fuzz/corpora/client/a1b60f74bd770b0e6fc91dccfdc4637f5746975a create mode 100644 fuzz/corpora/client/a1c71fcca90b3eda5d9e171513d38cdde914a419 create mode 100644 fuzz/corpora/client/a1f43adebfb38a91f8df7d7462709e34e6ee0a92 create mode 100644 fuzz/corpora/client/a1f482863f7c23a3b1e46abc0f69e640e53b1ed9 create mode 100644 fuzz/corpora/client/a21e30ff6a5d3622d0ca07521e8f56127ae8b190 create mode 100644 fuzz/corpora/client/a2388f0b03dfefd3d6bc497b7caa947bccda10a2 create mode 100644 fuzz/corpora/client/a23d7baa8b9c7120939ba5ca2086dd40b40e4db1 create mode 100644 fuzz/corpora/client/a23e949bc01d9b4d0c0aceda2ef086bdd7a39361 create mode 100644 fuzz/corpora/client/a27429d226d816b1f2765fb66dcd5a6a18b4f530 create mode 100644 fuzz/corpora/client/a29120278223cb12f6ad230d1e828f1dae2b6dee create mode 100644 fuzz/corpora/client/a29ac961a0576731c980d3a57de8802272d79ada create mode 100644 fuzz/corpora/client/a2b35ab1ab14b70cd32f227f180b62a2f7a23fcf create mode 100644 fuzz/corpora/client/a2b4b851fb0e485032c5a6b2b45f9df1b08ee265 create mode 100644 fuzz/corpora/client/a2dbf9627d9b1558924abeed40a16a9bcf11b0ca create mode 100644 fuzz/corpora/client/a2e1161490fa6ac660fc60b2313fd6374fec2553 create mode 100644 fuzz/corpora/client/a2f5855c970b580be409c51f5ca8f0159c7590f0 create mode 100644 fuzz/corpora/client/a3058a2e72e653ae255b769e73612d036bc43bcf create mode 100644 fuzz/corpora/client/a311ec8329cb65df4f34ca74df9f88466a7dc64d create mode 100644 fuzz/corpora/client/a31ad950c6d37d682e40eee42d238cb87e4110ef create mode 100644 fuzz/corpora/client/a339e5a94815b402f1f1e30ea8ebffc909485e94 create mode 100644 fuzz/corpora/client/a355b14b4a2a31d405093710ca34b77d607c7771 create mode 100644 fuzz/corpora/client/a3974f42e310369df5b433e053aeaa35b5944302 create mode 100644 fuzz/corpora/client/a3c8d3591f561741d718089e584b172d2424bf0e create mode 100644 fuzz/corpora/client/a3fac722124ec01fe1b8e316725a9e0646aeb30b create mode 100644 fuzz/corpora/client/a4644b47e367a1f97fad85c2eb08a3a7a7516ce1 create mode 100644 fuzz/corpora/client/a49d7b09ea578f397845be482837750225eb9775 create mode 100644 fuzz/corpora/client/a4a45f6d107bb2e98e9c8df1bf1e7c41e8394057 create mode 100644 fuzz/corpora/client/a4a5ae9bca2c7a9b8a3412f5b4a6ec8045d24eb1 create mode 100644 fuzz/corpora/client/a4d3b479765351c9186f9a43e2b436eef0b826a1 create mode 100644 fuzz/corpora/client/a4dc463b16073c4191f53129ab3f1507e44adaa6 create mode 100644 fuzz/corpora/client/a4f14dde01d73e3e630b26a1d1d1ba6dfb6bc453 create mode 100644 fuzz/corpora/client/a4fd6770a13f7834a89331a2389d921d6e7353e9 create mode 100644 fuzz/corpora/client/a5131485705d33fc843ae2124dafe84ed14abd71 create mode 100644 fuzz/corpora/client/a53ab0959c9c3828bc387a5e3f7f25503fc2d0ed create mode 100644 fuzz/corpora/client/a543391dd2abb6f3ddd046879f20ad1c01e2ff56 create mode 100644 fuzz/corpora/client/a575732deb65445a99ea54ff92a59ad94186f1c2 create mode 100644 fuzz/corpora/client/a57f51fbe0532029299150b10875f373121b3df9 create mode 100644 fuzz/corpora/client/a5c0247c962d6009c60584970da4c5083486d60c create mode 100644 fuzz/corpora/client/a5e5ff8716f0534723ed188470a24ffa77f6952e create mode 100644 fuzz/corpora/client/a5fcf51a76caee46200c7e8ad22d1bedd092b7c0 create mode 100644 fuzz/corpora/client/a6010733f7f7bd55cbb3fabb84ad4a2ff1f0cfb2 create mode 100644 fuzz/corpora/client/a60a8ccbb53894993c1cdf449a8091d28d709015 create mode 100644 fuzz/corpora/client/a64e308326142261572d7671f7322d7884e8976f create mode 100644 fuzz/corpora/client/a64ea7b5af23622c8a9ad94d899fcb3c4f300538 create mode 100644 fuzz/corpora/client/a658e9c1011b7ad520a56310fa6c1ffe1b02573c create mode 100644 fuzz/corpora/client/a65a6068d7e1c6dbfaff96ffc93651890b0a8a4b create mode 100644 fuzz/corpora/client/a664b93dcac9ca8630ffa718dd568027947b273b create mode 100644 fuzz/corpora/client/a6710cbdf2ca8a9f49f7cda5b80d9a5afaa19ac7 create mode 100644 fuzz/corpora/client/a6aa38179278ad1b66f1f7d7e21ec38a587bc055 create mode 100644 fuzz/corpora/client/a6af1927f9b31b45e64aac17726327894329db8a create mode 100644 fuzz/corpora/client/a6f73aa99865dcf57f74cb74022b464028e73725 create mode 100644 fuzz/corpora/client/a71104fbb1a2179999c845d9c6d43f21cf42dbd7 create mode 100644 fuzz/corpora/client/a72e4b9913c99ba2a93cb650d5a2aaa3f16d00fc create mode 100644 fuzz/corpora/client/a77498c602acc3170b805a7f609334022c206ba7 create mode 100644 fuzz/corpora/client/a780a692ffbca2932e57fdde998b105db5698660 create mode 100644 fuzz/corpora/client/a7bfd3771de1285ff5dbf7414f3b6205f74457a2 create mode 100644 fuzz/corpora/client/a7cb3d2b24183e850ef4e1252e0cb0c53214837e create mode 100644 fuzz/corpora/client/a7e2c3af77d32cd3c2249d8976e223d034337b90 create mode 100644 fuzz/corpora/client/a7f19f08d18783fb2c1119235e8f6a59385b0429 create mode 100644 fuzz/corpora/client/a7f3c291c3af8af0008c9001b62387ba992c0059 create mode 100644 fuzz/corpora/client/a7fed6263cab3285fe881ad1dc3d9b43864fc21e create mode 100644 fuzz/corpora/client/a8024deeded961c00a91c258e7ea28128238e3a3 create mode 100644 fuzz/corpora/client/a8103e1181d7bcfcd32b86fde6d9c0a9704b4362 create mode 100644 fuzz/corpora/client/a829965a6e5d908f6de2620b759bf3528dbd4cc4 create mode 100644 fuzz/corpora/client/a82b7c623c40d24f32aa5bd3a29fcdeedd2e3fac create mode 100644 fuzz/corpora/client/a8511b7c5021ca227d056b404ee1a5bc6797c31d create mode 100644 fuzz/corpora/client/a8532c488d57bdb61cc21297290fa1c6cad53a2f create mode 100644 fuzz/corpora/client/a857b0953069baaa1529ab38960fc885f235d847 create mode 100644 fuzz/corpora/client/a892a206d97a2abe1af9715038781da914c29572 create mode 100644 fuzz/corpora/client/a897c9d35dbd9161106e6fd7910cc55386a9062e create mode 100644 fuzz/corpora/client/a8994efaabb636b22c2445ddfe3b76d401225619 create mode 100644 fuzz/corpora/client/a89993a945b0bf95eca2cea16b9def2c0cd4fa33 create mode 100644 fuzz/corpora/client/a8a32728d06cc5b21833b10ea7687fa934de4694 create mode 100644 fuzz/corpora/client/a8d3504d8bf1be63493c2dbd2268fa084f4cf52b create mode 100644 fuzz/corpora/client/a8e714f781133732e3ba92f5a58fb8bee19760ef create mode 100644 fuzz/corpora/client/a8e8d30c18bd9dd47b36021614d808f8cf2883be create mode 100644 fuzz/corpora/client/a8f322ecbb554bed2c5b8089d05794da26b4aef2 create mode 100644 fuzz/corpora/client/a9138e57a1077d983c37ac3579b818ac0d3cbfaa create mode 100644 fuzz/corpora/client/a93f7cb722591d8583f02c5b7dd62056cfa1a6b3 create mode 100644 fuzz/corpora/client/a94569a03b6debc8495d7d00a03aff9adcddb8bd create mode 100644 fuzz/corpora/client/a9495ba98671eeb3c54fce01e86087bce378dca7 create mode 100644 fuzz/corpora/client/a9647aaec0d39ccbbd482ae0ccd9c59246f60322 create mode 100644 fuzz/corpora/client/a9759cc7d2078d8d39397b3bd959394b744bf752 create mode 100644 fuzz/corpora/client/a976737ee4a5704a72d4af9f48cfeb5927a6955f create mode 100644 fuzz/corpora/client/a978fc2dbc75851018cff2aed64ee8592671a45e create mode 100644 fuzz/corpora/client/a97c71ca679294ab9e1846ce0157185afb42d447 create mode 100644 fuzz/corpora/client/a98b23941782be09b5f9b805974ebf1546f1f1d8 create mode 100644 fuzz/corpora/client/a993fb6aa7b76d387b98b57da66c670cade4eca4 create mode 100644 fuzz/corpora/client/a99ec61eb88f3f44f3e36de649537b40ad690e20 create mode 100644 fuzz/corpora/client/a9a9803413da1f7373d564d0c309c006a0d9ace0 create mode 100644 fuzz/corpora/client/a9c664a06b7ffbb8894fba5a1633a0b34b78ad68 create mode 100644 fuzz/corpora/client/a9e3ee1009adfb860da78d70c2046a74a6ced99f create mode 100644 fuzz/corpora/client/a9f6e29cf2d6de16e87f80aa1ef2adf6777b7b64 create mode 100644 fuzz/corpora/client/aa0b71049251330832eb9fa387c314021ce1b225 create mode 100644 fuzz/corpora/client/aa217700283f53e2fcfd21a5928234289ccd4a78 create mode 100644 fuzz/corpora/client/aa2f0b4d52b0537856db3057ef78ff2233844979 create mode 100644 fuzz/corpora/client/aa4cf63d9c4bea278264f297bad47ffaa50e8fc9 create mode 100644 fuzz/corpora/client/aa5f64df09ff83b5a64f6b413cac5555126780e5 create mode 100644 fuzz/corpora/client/aa6ec9022422cf950b297f17e6d06a2d973ad3be create mode 100644 fuzz/corpora/client/aa70f3f70e18051d554a6d635dc4695bccc549fb create mode 100644 fuzz/corpora/client/aa84ba4eab3008a88d9b97386027e3df1b6ffd3e create mode 100644 fuzz/corpora/client/aa9997965853cb841aa31162ef3e5e2ff4ef2aca create mode 100644 fuzz/corpora/client/aaa4334b9f8775c23b6caef10b26e08a396dedd6 create mode 100644 fuzz/corpora/client/aabf5670e8abb22353f1ddb4c2ff47b923724bd1 create mode 100644 fuzz/corpora/client/aad3481f58c28d845d82f915ec33eb670ec9101f create mode 100644 fuzz/corpora/client/aadc36c3a1fd481aae701f9514df27cc6cff3206 create mode 100644 fuzz/corpora/client/aae70fb7ddb64234545056dc5f2416d5b7f82345 create mode 100644 fuzz/corpora/client/ab288a5a3e79951a2f2258ea72d78a7170c46b76 create mode 100644 fuzz/corpora/client/ab3d92f4cf35a1bec9e9fe13bdc1d4d732193499 create mode 100644 fuzz/corpora/client/ab4c808f5655c7fbdb1de9f97308b62055f488fc create mode 100644 fuzz/corpora/client/ab5c0b462e02b09f8dd4a6502221ab3e84b3376f create mode 100644 fuzz/corpora/client/ab5c3026b7d45a9bfafd4429e027efbedf93db60 create mode 100644 fuzz/corpora/client/ab5e2bed56177100ac0c02d3fd7b3d0299337913 create mode 100644 fuzz/corpora/client/ab72c32441dab0477b9f5c7e66ba7b073699d317 create mode 100644 fuzz/corpora/client/ab7f9685bd3b07fc895a719d67fcb31572e29667 create mode 100644 fuzz/corpora/client/ab85908f0cb25756ef2209b0a37a2ab4270d068a create mode 100644 fuzz/corpora/client/abc03dc13f0d172bfc68a0c6cfa12ddfe45b9366 create mode 100644 fuzz/corpora/client/abc82f9670617310f352b8bc7a2301f5efc88ac9 create mode 100644 fuzz/corpora/client/abe47acef686c142fa8615bd57af1bc7c17c687d create mode 100644 fuzz/corpora/client/abeb013e6dc76f58ed049b07d235c6eff01bb07b create mode 100644 fuzz/corpora/client/abeef9fda7b58b407597cd9c1056c7558f89a459 create mode 100644 fuzz/corpora/client/abfadb68650fea3ee98d095a33a8046bbdc5cdd2 create mode 100644 fuzz/corpora/client/abfdbad5e00b17e2d3f0a064625204e5d31bff53 create mode 100644 fuzz/corpora/client/ac2fada15114be4cb64baafd1caf434a5b277744 create mode 100644 fuzz/corpora/client/ac5c73f2aac049addf40e084e78562daa0661fbb create mode 100644 fuzz/corpora/client/ac6433253c62221218bd37fa0d8d97ad3de8aaf6 create mode 100644 fuzz/corpora/client/ac906be4ed3799df2b06169306ccf3f94df36d39 create mode 100644 fuzz/corpora/client/acc48739869e423e428cac76ff5751dc634cff84 create mode 100644 fuzz/corpora/client/acd52bb3ff0092b4fe01aa7087b468a8c9e36bf8 create mode 100644 fuzz/corpora/client/acddcde6308f16d5b66d5451e4e9bf5f55fa1387 create mode 100644 fuzz/corpora/client/acfcee7dc65bdce528236b4f04d5bc911e42a6ce create mode 100644 fuzz/corpora/client/ad49fd1ef25c58e267afd901917d896a9a759a8d create mode 100644 fuzz/corpora/client/ad4b02317fd87648a680d535cfcaceb7c13a36ca create mode 100644 fuzz/corpora/client/ad5014c19ef5dc519d8e21ccb10239649de6176f create mode 100644 fuzz/corpora/client/ad6c3f855badaf83af1c90488b67b6a389b5f074 create mode 100644 fuzz/corpora/client/ad8772f6f8ab65d119b972b64f8ed8efb3e2cfc9 create mode 100644 fuzz/corpora/client/ad893ff2bc3abfab909b0ede6bc03aa3d5564ad0 create mode 100644 fuzz/corpora/client/ad94fded2b8ab1a6413db30889a6bf1a9fed898d create mode 100644 fuzz/corpora/client/ad95578e87616b8e32202c08fde7bc6c05637c0e create mode 100644 fuzz/corpora/client/adb80ceb3f3b3d9c57b669928eae09ad2324732a create mode 100644 fuzz/corpora/client/adb8addc725bd7bd5af0ead4a5947177c75c0c81 create mode 100644 fuzz/corpora/client/addd948ffad44c7651b6c36cb59c2f2fb8187505 create mode 100644 fuzz/corpora/client/ade7ee46ecc3f8f2818555bcd23ead2d8524bc98 create mode 100644 fuzz/corpora/client/adfad2699036eacece782cc64299e13b85237864 create mode 100644 fuzz/corpora/client/ae66140b237569e0dcdbf45577616f236b7e11b8 create mode 100644 fuzz/corpora/client/ae88c89a104814abbc9da6c83eb5e47157942fd1 create mode 100644 fuzz/corpora/client/aeabb99ef54fa1b71bfb2ee1955c9af9347da554 create mode 100644 fuzz/corpora/client/aecc2f6021d9d5a5b213124dc9105c87cf027970 create mode 100644 fuzz/corpora/client/aede4bc6b38e641332299c24e72799bf827c438f create mode 100644 fuzz/corpora/client/aee4a54b104198eed0002b43bce3a816757ad9e5 create mode 100644 fuzz/corpora/client/aef39cab837b654535dc1f1ec11af2ec061dd125 create mode 100644 fuzz/corpora/client/af2852d95b9ff37024adf96591c2c407a65fee9b create mode 100644 fuzz/corpora/client/af331b619fa795bdd209ab378c9439839248e89c create mode 100644 fuzz/corpora/client/af3d2c9ea11aff6d68fcfa130fa8e20468c1ad78 create mode 100644 fuzz/corpora/client/af3f1bf8ffa58a84f9f1e4c1a04d9878b7ebc369 create mode 100644 fuzz/corpora/client/af452f589e0e0df65355eb8747f7801d72ceb101 create mode 100644 fuzz/corpora/client/af60d18b9950d00666b69881b49ce1a358adc32f create mode 100644 fuzz/corpora/client/af9e94435832d2c479887a33b0f471bac1e1e1db create mode 100644 fuzz/corpora/client/afa4498aa627b400f4271e8758727d540c7b3b40 create mode 100644 fuzz/corpora/client/afa9a5570a6224ac87e2fa3c9c34c9dd1903e17b create mode 100644 fuzz/corpora/client/afd57ee82b5883e06ba6b4ab73401325a59f99c8 create mode 100644 fuzz/corpora/client/afd5faca1eb19254f9582c752e543fdcc5c5e240 create mode 100644 fuzz/corpora/client/afda9345a61969266fced6f939578d1812460762 create mode 100644 fuzz/corpora/client/afdd971c57b2927f17e0fea440871c4126d3fb38 create mode 100644 fuzz/corpora/client/afe317025f58e0afc13741cd09a8f6e895cbb383 create mode 100644 fuzz/corpora/client/afedfb5f7392f0090a44c531a1bed4a5ffc13120 create mode 100644 fuzz/corpora/client/b01ea9f5dca3060e77acf44aed4ef0c0c5242078 create mode 100644 fuzz/corpora/client/b04de9c9d2862605f046c1c4d8ad60facea52b54 create mode 100644 fuzz/corpora/client/b055b99cc0b10dba2305b81e15e8b9ea96f1ee5e create mode 100644 fuzz/corpora/client/b05673ecadd864e1f33825a45617aed789e9afba create mode 100644 fuzz/corpora/client/b0636169b0b894ef300df3356f2c292048b79414 create mode 100644 fuzz/corpora/client/b06a26736029b55f436f584ecfbf284fd96dac2f create mode 100644 fuzz/corpora/client/b0a313b658e79fcb257e41322e5f96af5e3e8aba create mode 100644 fuzz/corpora/client/b0ba2fb7bac7cd6f3c806b67b0a736571851409c create mode 100644 fuzz/corpora/client/b0cb853a70d3e7d4d491a4c5b9ac4daff0472d94 create mode 100644 fuzz/corpora/client/b0cfb3b6d906daa40be1ddd4649e3072b1c498a1 create mode 100644 fuzz/corpora/client/b0d466cd6a9e8c7a80b503e7a79b3a550b89e849 create mode 100644 fuzz/corpora/client/b0d87c6104e1d1a74cc7785ce4d02bb3c0158fad create mode 100644 fuzz/corpora/client/b0e58e4f333929bf73473c17ad50c960a9a99ca3 create mode 100644 fuzz/corpora/client/b0f5772977e5df2008bacc58ae1a6136512cb230 create mode 100644 fuzz/corpora/client/b0f93ffc2f8a081ae4fec8464b4ac5dce130ea1d create mode 100644 fuzz/corpora/client/b116fa73f8356bce7128a9e7d97baf1c7a3d2308 create mode 100644 fuzz/corpora/client/b1523d912964a54df2f54886c801dcd51e35be83 create mode 100644 fuzz/corpora/client/b15313d3288db5c5a1504c6c3989d93ac59945ef create mode 100644 fuzz/corpora/client/b15cef9fdb33930dcb84ecc7a8e66133a0b027cd create mode 100644 fuzz/corpora/client/b1673e8ffe7968a31f01b455b2bf4d6c2223eda9 create mode 100644 fuzz/corpora/client/b169a054af04d913128673eab293a6e4a80e997c create mode 100644 fuzz/corpora/client/b17042aba927e997ddf92690ab64f3bd8cf60f54 create mode 100644 fuzz/corpora/client/b18d3987af0d9baef8c687397360c7935b652a9f create mode 100644 fuzz/corpora/client/b19240839dcd9361ac5bf5ae6e2d33e73bef8206 create mode 100644 fuzz/corpora/client/b1a9251550a689538439dd5f015294068ca6a819 create mode 100644 fuzz/corpora/client/b1b0b0d94c2c28f5ce3075e23752963af86639c1 create mode 100644 fuzz/corpora/client/b1b86fa7ae183a4918cffdc6bfe4606c08a4840d create mode 100644 fuzz/corpora/client/b1bac901907c7c53bf39cb88bd21987ca5838dc1 create mode 100644 fuzz/corpora/client/b1d51838a484fa8f983c2ecaa3ba86eb537f39a7 create mode 100644 fuzz/corpora/client/b1d637329cf0023e7769fc3b58574b734ce4aa78 create mode 100644 fuzz/corpora/client/b1e917423b8cc54749e83b3766daab83ea32a792 create mode 100644 fuzz/corpora/client/b1f091f86fa0f80e5f0669a6e060ed2bba15a046 create mode 100644 fuzz/corpora/client/b1f4da63109dc116c1c35f59395dc787a94efb55 create mode 100644 fuzz/corpora/client/b1f60163c2e0a04bd75674e14bae64121bee5428 create mode 100644 fuzz/corpora/client/b1f672145efd023b3415a948f5aa382f1b3c6499 create mode 100644 fuzz/corpora/client/b1ff4d0f0dd7f305a901330b784c61a9e3ca6d50 create mode 100644 fuzz/corpora/client/b2268f348a55cb268db8ea66389c7b2ae0b8c4bd create mode 100644 fuzz/corpora/client/b2287a95733faf14b3763849a5763e9318c9ca92 create mode 100644 fuzz/corpora/client/b25f229dcff752f32887bdd13eab7d0131032364 create mode 100644 fuzz/corpora/client/b26ecb11aa2647c58920a0f328967b5baa3309e9 create mode 100644 fuzz/corpora/client/b2769253ba9847467f8775480138803f3a204032 create mode 100644 fuzz/corpora/client/b27f82acd74de84ed4c79d9f0a0dcb30b00c7215 create mode 100644 fuzz/corpora/client/b28e759b1e3c47b3da92e49e99dc2cb99ed9417c create mode 100644 fuzz/corpora/client/b2a250b4970cd399c769dbf2f4607adace10c2cd create mode 100644 fuzz/corpora/client/b2a30a5a85d27f8131b846a84cdf868767214635 create mode 100644 fuzz/corpora/client/b2af92cf8e195db8389db54400e4e4680e9c5bd5 create mode 100644 fuzz/corpora/client/b2df6c853f98a51746f88a621b7b37acd8ca950a create mode 100644 fuzz/corpora/client/b33ad86f58f8ee8a3619ac26307a8b2adbdc180c create mode 100644 fuzz/corpora/client/b33fc6130991ac85e3c0bf3cd2bde459edc332e0 create mode 100644 fuzz/corpora/client/b34653b3bf5e0e9862c0ebe193e69e125cd2b7c9 create mode 100644 fuzz/corpora/client/b3547fb9182b5e6ce5ba7f9d132273cb044deecc create mode 100644 fuzz/corpora/client/b356741035b524d02646ee00c4b0803196e7b125 create mode 100644 fuzz/corpora/client/b37ad2bb7fc5214ded272ed53c1fc1b0511c8606 create mode 100644 fuzz/corpora/client/b3a79051957e5cd81430c5ec6d6f5b77b9f5db0f create mode 100644 fuzz/corpora/client/b3b953c312bf389c2714774201e7c47ffdbfc4dd create mode 100644 fuzz/corpora/client/b3ceedc04e28be3712e40bbfa0a967b2973e1a2e create mode 100644 fuzz/corpora/client/b3d71f93cf48317fdfdecd09db7ce59dd9decea3 create mode 100644 fuzz/corpora/client/b3df9d10f10902a2a88a8ab000f23421d8c48bd5 create mode 100644 fuzz/corpora/client/b3e03858fe6c59eb63bac6b70fbe87a78df39dad create mode 100644 fuzz/corpora/client/b3f804cf0c5aee41866b41ca2d39dc8276f60297 create mode 100644 fuzz/corpora/client/b41bfc8c9a0af06fdde5ad04cd86b8f19347c016 create mode 100644 fuzz/corpora/client/b4308abec0d9f7c8e798772afc64fb77b365e4d1 create mode 100644 fuzz/corpora/client/b45429239a327f4d4ae24bdb52d084994c2d7595 create mode 100644 fuzz/corpora/client/b45b7f1fb14eb07eda4095e59508ab87112e001b create mode 100644 fuzz/corpora/client/b47811d00cf5f7a0619e4a5eb243f6ca1750771c create mode 100644 fuzz/corpora/client/b495a8685f4fe719862c10dd552b3d9addbb4820 create mode 100644 fuzz/corpora/client/b4cd06745056db73c7f0bb1a3a3ce499e0e2d0d5 create mode 100644 fuzz/corpora/client/b4d65b1d885ac44791781cdbe6c1986ee9bc1158 create mode 100644 fuzz/corpora/client/b4e061c888f0be8c6e08c4e72ca3189015735cc6 create mode 100644 fuzz/corpora/client/b4e9242b09e7807c37e9f9fc5e64a5816481e705 create mode 100644 fuzz/corpora/client/b4ec37523c27bc91b7cd7281f40e60fda099b7da create mode 100644 fuzz/corpora/client/b4ec81de8803d6a4c8becec26e3cf0b9148f5b60 create mode 100644 fuzz/corpora/client/b4ece773ec1d004772beff3b1f6bccbd71498206 create mode 100644 fuzz/corpora/client/b52318c76dac5dc3c5b25586ae5bd658e023e4a4 create mode 100644 fuzz/corpora/client/b525e66f72e1f3b00370b2287b3815a75ccb61f7 create mode 100644 fuzz/corpora/client/b52ef1cd383fb666a6bf11eed22b628d96762008 create mode 100644 fuzz/corpora/client/b53a44973bde1f03b53aa4f81ff1f70644e7698b create mode 100644 fuzz/corpora/client/b540426958b232eb4fa39d5b211c93424ffef628 create mode 100644 fuzz/corpora/client/b56eba8ac43d0101299864653ddd8acf85d6aafc create mode 100644 fuzz/corpora/client/b5a711b9e77bc3f467a1114be2204ed8839fe08d create mode 100644 fuzz/corpora/client/b5b6804eab6a9f075ee08958cff76154f62c22e5 create mode 100644 fuzz/corpora/client/b5b8ab297d05d96cd1359bafa3e702b74fdc12aa create mode 100644 fuzz/corpora/client/b5be7d971da799a6ebb1714ebf7b6068da9fe4d3 create mode 100644 fuzz/corpora/client/b5e89df88f8c997173ca95648a6621c0dd055e8f create mode 100644 fuzz/corpora/client/b608e4371f74841a1fe8cadc39e4f44168e85fc6 create mode 100644 fuzz/corpora/client/b6199c61f51481aca377d88deaa86f0a8bbdd2c8 create mode 100644 fuzz/corpora/client/b623a80a7aeb82477ee9054a379d2ca1d5be4a10 create mode 100644 fuzz/corpora/client/b648e93013e9b2be0d3c0ae44d0231e6c0f362e6 create mode 100644 fuzz/corpora/client/b64a6244811e3e5fec9b8afefd5dc38facc9b2b5 create mode 100644 fuzz/corpora/client/b6594d513a95fed75709374616aab41ef5d94e91 create mode 100644 fuzz/corpora/client/b6604a0470c4c113c86f013c3b3047bdb2aab986 create mode 100644 fuzz/corpora/client/b66c80263604f359cefcc25ce48a09dd063d96ae create mode 100644 fuzz/corpora/client/b67c29d3124ed0490e161b231a8532ec1536c71f create mode 100644 fuzz/corpora/client/b697911d60affcc52968a4cbd5a22535a0b2d0aa create mode 100644 fuzz/corpora/client/b6b3ed3ab172b22774dc403f9078d4c3852e42ae create mode 100644 fuzz/corpora/client/b6c1c87c46968c92f90f7bcbbdc39e4d450898f8 create mode 100644 fuzz/corpora/client/b6cd899f04e29fdfd1a85d5a000d6bc5ae01b632 create mode 100644 fuzz/corpora/client/b6fc4af13f56dc8cf9c9f5f1ea402375467ee867 create mode 100644 fuzz/corpora/client/b7095bffeb81d0ee720214cb3078e09b675c1489 create mode 100644 fuzz/corpora/client/b70d8575150eb705b7cb3c988207957992c42fa6 create mode 100644 fuzz/corpora/client/b72b42a5eb1aec7c0d0c100e2ddeef09b45727f1 create mode 100644 fuzz/corpora/client/b75ba49eda7e670fea0a3a4fb77983cc7f2a86e8 create mode 100644 fuzz/corpora/client/b78c598d42c2de2fa8781386b74dc068f7faa4ab create mode 100644 fuzz/corpora/client/b793dad38c5e29c79deb90aa83bf2708519cb637 create mode 100644 fuzz/corpora/client/b7a468c651d817cf046d3f0d78c68ff99171fbc4 create mode 100644 fuzz/corpora/client/b7be4f763ce5dc892b90e18cf3e5480875f2267d create mode 100644 fuzz/corpora/client/b7c6e60af8fe3badb26ce63960c89f31c0ab0467 create mode 100644 fuzz/corpora/client/b7d6a03445d281f742f349c3095244b377c65ec8 create mode 100644 fuzz/corpora/client/b7eed86c376ef89cc652102298a301cd05e8a796 create mode 100644 fuzz/corpora/client/b80e0cbe91ee95b06293e2620c3327fb8a90964c create mode 100644 fuzz/corpora/client/b81812f93b4765c1396258872b222d1f00c0293f create mode 100644 fuzz/corpora/client/b82b5a8eeecff5b6aa78b94f4a0ada406b86585f create mode 100644 fuzz/corpora/client/b84572e91e3f1607db43523522d75776749bf062 create mode 100644 fuzz/corpora/client/b8537444b1cc4511d52e82755ddb7c90d35182fd create mode 100644 fuzz/corpora/client/b85ae18d9de0e3efa5df5427801b6894f8250950 create mode 100644 fuzz/corpora/client/b86207ec70a97cbd66e94df93ca4aac42e33b7f5 create mode 100644 fuzz/corpora/client/b887ff93096c398eddd23a9a3c4b052214ff4858 create mode 100644 fuzz/corpora/client/b897a97810f021a1ceb47bcdae0dab36235dd55c create mode 100644 fuzz/corpora/client/b89aac6ddbc130200ad504ecc8bf2144fbe7fdef create mode 100644 fuzz/corpora/client/b8a7a43cd2b1fe1c92ba261be688a28e57a6f3c4 create mode 100644 fuzz/corpora/client/b8ba213f7c12784d2070ba472eb0bf326c6ef472 create mode 100644 fuzz/corpora/client/b8c2f1a94406834d102c6adf83356741b2f46dc4 create mode 100644 fuzz/corpora/client/b8c379d168fdde8151585554122ae819da3b2f7f create mode 100644 fuzz/corpora/client/b904cd70e13fce81f61a4d0865f8ad2b3561712e create mode 100644 fuzz/corpora/client/b92b639caf82683eacb8f0039b5fbe59f58d26b6 create mode 100644 fuzz/corpora/client/b934251d7b289b9d88dc975effd56675637a8606 create mode 100644 fuzz/corpora/client/b9642558ac4084c5b517f91559e894bf74eede80 create mode 100644 fuzz/corpora/client/b9753d5217f5e948a28ad8977a1826fe5d6f02cf create mode 100644 fuzz/corpora/client/b98400dc366d5be20534dcf053ffeea54aaceab8 create mode 100644 fuzz/corpora/client/b989c519ec275adf172481840c20168113ff960f create mode 100644 fuzz/corpora/client/b98b79ab187796c0e98f8a46d7125f60899aea22 create mode 100644 fuzz/corpora/client/b9b3eb11a582981a8fdc9d64016303411a4555ce create mode 100644 fuzz/corpora/client/b9c0099fb4f8b2cbb6b362d21dbe0cf314b5aed2 create mode 100644 fuzz/corpora/client/b9d12d952a0072bddb8bcef9a23fe18c320136c1 create mode 100644 fuzz/corpora/client/b9d6386a11c5f6bc70842e8408e817954d57fe2c create mode 100644 fuzz/corpora/client/b9d68ea081c736c33c703b503f5d358dc9ff5f07 create mode 100644 fuzz/corpora/client/b9dc80d71694ee48b395911b8f04d433402c87d8 create mode 100644 fuzz/corpora/client/b9e109313d6ca2f5a4666f609fb782a69feb37a5 create mode 100644 fuzz/corpora/client/b9fbfd68a37327d97bb7438b9fd625ea708c1bf9 create mode 100644 fuzz/corpora/client/ba18c70940de0148f6bac815beb0b22c1c17942e create mode 100644 fuzz/corpora/client/ba645f6f5194b3bdfc0a44b0254ae09c18396b6a create mode 100644 fuzz/corpora/client/ba70377676ff6ce446b89b6172fcc58e1030fd1c create mode 100644 fuzz/corpora/client/ba7112ad7036f37b564097446eed410d8cc82c28 create mode 100644 fuzz/corpora/client/ba90422cf902dadaf816d7c44d8e00ed37025080 create mode 100644 fuzz/corpora/client/bac2bdd9b71b115ed4e3ea5bd3c4745cdaf4dbd7 create mode 100644 fuzz/corpora/client/bac92f3e11aa95d0dfdf28e953fa24acf92a4160 create mode 100644 fuzz/corpora/client/bae85d276ed3e8be54ee1323a9e53b9d8b34ae2d create mode 100644 fuzz/corpora/client/baee4a2de9b26176d4d2f4b238498fa249ebf902 create mode 100644 fuzz/corpora/client/baf0ba04800015f887b26347167b803350138184 create mode 100644 fuzz/corpora/client/baf96f96ca7b4a22d356bd51afb4c3d4303de7ed create mode 100644 fuzz/corpora/client/bb1544233df2e416203258e9284175a76aa070b2 create mode 100644 fuzz/corpora/client/bb274855dbcbf9ab1f49a309f82e35e2a23a26f8 create mode 100644 fuzz/corpora/client/bb2d9878ba72a5a270fedbb0439e95ab2d98f680 create mode 100644 fuzz/corpora/client/bb69b5ba8b93ed0a49c47e41db84e3da5c0bcaca create mode 100644 fuzz/corpora/client/bb9c1d9cfc29d50a1caef08b77953201adf18933 create mode 100644 fuzz/corpora/client/bba5275197a98dcb81d7ecca039c236953d09cc3 create mode 100644 fuzz/corpora/client/bba96d7bcd6dcdfabdd9066936b5f6843a539124 create mode 100644 fuzz/corpora/client/bbab44529f279132bf53700912d635a48e2ee339 create mode 100644 fuzz/corpora/client/bbae911e5157d4bf9d5823c23a754d4b05dab5ad create mode 100644 fuzz/corpora/client/bbc642579c19de83b2b3a0fd6b4e38c1c460e026 create mode 100644 fuzz/corpora/client/bbcef716a9e84a629d7e6fa2308ba627f8bb39e8 create mode 100644 fuzz/corpora/client/bbf5b90345e84e2a7711d80d88c485b26d5ffa5a create mode 100644 fuzz/corpora/client/bbfaa60d41e267b90e72cc4aedef31ac563e43a5 create mode 100644 fuzz/corpora/client/bbfbf6ebe6d3125c8089cea03be317160e68a1f3 create mode 100644 fuzz/corpora/client/bc1a0935164add06e019663ff03a7fdcef85bc76 create mode 100644 fuzz/corpora/client/bc1eb9cd78a0cd336a9c4fd49332601bc0b23426 create mode 100644 fuzz/corpora/client/bc43de1575eeb7ba519997d69bc1a030e5d64df9 create mode 100644 fuzz/corpora/client/bc45cdd8f5df0343cbb73c9fc5198d83ee453bf1 create mode 100644 fuzz/corpora/client/bc480636cf084a6cfc84a24c2c5b0cacf9e123f1 create mode 100644 fuzz/corpora/client/bc60cb5fe07c97a75efd45fcafcf7d4854fa82b8 create mode 100644 fuzz/corpora/client/bc69091aed7be35aabb93deeb628655a1657fe02 create mode 100644 fuzz/corpora/client/bc70880e0f8c741cee37321b83013ec30a073d23 create mode 100644 fuzz/corpora/client/bc8f82800dbdcc691773b0333548b8ccbdf6ad9c create mode 100644 fuzz/corpora/client/bca6331fa3e7e5fd9fe60a37b5bbe62bf6e56e88 create mode 100644 fuzz/corpora/client/bca9b13071743bf0f53fac21182127820301156e create mode 100644 fuzz/corpora/client/bcafe234e24463adb4525544be884b2f2d371914 create mode 100644 fuzz/corpora/client/bce99cf31a3d774c28a68d7bae60c42e584674bf create mode 100644 fuzz/corpora/client/bcf83f2c7d104c256e474da1fee2966871453430 create mode 100644 fuzz/corpora/client/bd04d5035958f46becaabb820401b83633872a35 create mode 100644 fuzz/corpora/client/bd0c2fa34e7d10e83984cd05a603e1f471388fa1 create mode 100644 fuzz/corpora/client/bd1845bc6b21b7eb937a93862a27f933ce17e2d8 create mode 100644 fuzz/corpora/client/bd2b67e7c76dab55b17d45d5395073e5d28c8240 create mode 100644 fuzz/corpora/client/bd5487a142e88a28d232eeeafb36507c71dc6e01 create mode 100644 fuzz/corpora/client/bd6d9a4ee678d373d94a8a69d5025a50fcde61f4 create mode 100644 fuzz/corpora/client/bd7620d58136b74ffbd900058c375295f7bb858f create mode 100644 fuzz/corpora/client/bd8797c75b4325f666605ab6ca9f659c387c8de0 create mode 100644 fuzz/corpora/client/bd9c0d86544a1643d6545aac353e3b9ea8a9d4f1 create mode 100644 fuzz/corpora/client/bda18cdc5abef4f35f1b2939813e3f06f8f17d81 create mode 100644 fuzz/corpora/client/bdbcedb7d704b47e8647dd97009ad4c0a5acc763 create mode 100644 fuzz/corpora/client/bdc5a15a046746e4e2ba78899c529dfd1c61a454 create mode 100644 fuzz/corpora/client/bdc99601b542f3a924d6b3b6ddbd3cf08cd10384 create mode 100644 fuzz/corpora/client/bddf04f0ce0a4d0ca50223ae4df323f8ceac32f8 create mode 100644 fuzz/corpora/client/bdf444e013cbc4c6b9e55002f19f9f5601673294 create mode 100644 fuzz/corpora/client/bdff16640b204f1283dbc460334f06b009f19a4c create mode 100644 fuzz/corpora/client/be09c62d2899ca5c2cec27327678ac4193ec927b create mode 100644 fuzz/corpora/client/be1fd7cc9fb2ed06e3d31732c47f482be791bab3 create mode 100644 fuzz/corpora/client/be22212337b5a31b2604403f93c24cabe6bafcbe create mode 100644 fuzz/corpora/client/be2d21ac977fb88c3548b0e4211f55447b1c9ebe create mode 100644 fuzz/corpora/client/be39d2b55363609f1d90508f3934a0cdc02894fb create mode 100644 fuzz/corpora/client/be41f49da37d45ee1918c3b5f37f654d10e5317a create mode 100644 fuzz/corpora/client/be47d2b1dd683545ac46c64007848a1dac3216ed create mode 100644 fuzz/corpora/client/be7730e6b6e6c3a65c5711a7032530242495603e create mode 100644 fuzz/corpora/client/be88d1bab3dd7d79cc151bfdd8fdacb288e390f0 create mode 100644 fuzz/corpora/client/be90c9f86e25c5ed8f4ebcb03dda57afb5bb9442 create mode 100644 fuzz/corpora/client/bea70a2dec32aacecbabf8ced3a76e9d728a1b7f create mode 100644 fuzz/corpora/client/bee23e2232422bd452db9b44c5242d51def25e85 create mode 100644 fuzz/corpora/client/bf01fcbcca973bee201979151c40b48d7bd1a2a2 create mode 100644 fuzz/corpora/client/bf175313dd3dde6bf40c9b84ea382388937f3827 create mode 100644 fuzz/corpora/client/bf30723ef71f42785da9ff0c54c138581911d27a create mode 100644 fuzz/corpora/client/bf3bcb2b6091a07a62384e376a1077231000fc30 create mode 100644 fuzz/corpora/client/bf3c5382f5f270682366a37f1e7e4347c865bf73 create mode 100644 fuzz/corpora/client/bf5d38910f90ab2aae878a339ef60fccb26a1ebc create mode 100644 fuzz/corpora/client/bf730bae6e0e1f0d7536a9f9edc24be75ba12242 create mode 100644 fuzz/corpora/client/bf74800a837f5e5e24f58e6081bd20bb282711c5 create mode 100644 fuzz/corpora/client/bf8b30e413138e407303fdddec641474f74f07ac create mode 100644 fuzz/corpora/client/bf90d4bf8b4cc7b7738f228dbb206bc39d408439 create mode 100644 fuzz/corpora/client/bf982250ffe930f4556b9852b6c88352515f4855 create mode 100644 fuzz/corpora/client/bf984a0cfe645c3ba84e8686e024490753798326 create mode 100644 fuzz/corpora/client/bfa5049c132449db4318bc695f714046ac6792c3 create mode 100644 fuzz/corpora/client/bfa9135c32f43d7287bd3a0f8b8c2826ba56ac97 create mode 100644 fuzz/corpora/client/bfb8ba606498fa1d5b812e8c09d16bbc369c9857 create mode 100644 fuzz/corpora/client/bfc94ca124f5331c1cd96b74028375e9ca5bccd3 create mode 100644 fuzz/corpora/client/bfef24ff2c5535d990a074b797a20ffe1022e36c create mode 100644 fuzz/corpora/client/bff3adc6f885dacdf0165f099493820372189c1a create mode 100644 fuzz/corpora/client/bff7d442961b42236367a2377182489919680380 create mode 100644 fuzz/corpora/client/bff93ae9f53351b1cc0ca17dd87d57f76a0b3a57 create mode 100644 fuzz/corpora/client/bffac6f745d492fb71e046e509a27a779718b0ba create mode 100644 fuzz/corpora/client/bffdfa1466cba69a26e1b344a59cc7f2ddebce4b create mode 100644 fuzz/corpora/client/c000696cd23dc20b2e22c5b9aefac461ce40ab63 create mode 100644 fuzz/corpora/client/c01187baf00cf43ad90330b148cdddc4115b4693 create mode 100644 fuzz/corpora/client/c045a3998527375aacb218c5c0cd65de8cc1f7b5 create mode 100644 fuzz/corpora/client/c04f3fd316707dc2cee8daa7761fbd081f343a56 create mode 100644 fuzz/corpora/client/c0639d71ea0f6633440b33a626ec8360e2022c0a create mode 100644 fuzz/corpora/client/c066255b3259f68226e7d1b916fdbe65d4f47609 create mode 100644 fuzz/corpora/client/c08e46e851d1ebfc864e7c7de43062222f4baf7f create mode 100644 fuzz/corpora/client/c094a646eb6193ead7b1354d2c7cd55392dc3a16 create mode 100644 fuzz/corpora/client/c0a04207ce08bf7a01f3feca435e92fd6fcbcb5d create mode 100644 fuzz/corpora/client/c0dc28b62994b9249cee8400f7ea978fd5e04ca0 create mode 100644 fuzz/corpora/client/c104150329243f08ca96250cd4b887bab009ff3d create mode 100644 fuzz/corpora/client/c1234356107df70bb27a10708a575b5bb8a2aa4c create mode 100644 fuzz/corpora/client/c136139359eff1eebcc3a5f1b8e233c706a84efd create mode 100644 fuzz/corpora/client/c1410f2d5bcc99bd5b77a0fdfa47a72eac5e1380 create mode 100644 fuzz/corpora/client/c1619913d88ac6f01b43ff1e79c43a079f1e1276 create mode 100644 fuzz/corpora/client/c1628de292162f21d77aa860c0d44ed487debd91 create mode 100644 fuzz/corpora/client/c17e89f05278575d1670b87547977d43fb0061e0 create mode 100644 fuzz/corpora/client/c188dc0dfdb30dace430a7f9c4cada0cfcbac707 create mode 100644 fuzz/corpora/client/c1987106d67a20557fee526f2cf4fb970486dc21 create mode 100644 fuzz/corpora/client/c1a4876610e6b9153569b2e4f6e100efc35b0e14 create mode 100644 fuzz/corpora/client/c1a53e5643b2a30d114845d96a8b882fcee08f00 create mode 100644 fuzz/corpora/client/c1b3a1d44d920244635170184584d070bf50d3ed create mode 100644 fuzz/corpora/client/c1be75061aba11086fb13b1ea81566fa26d79438 create mode 100644 fuzz/corpora/client/c1c364e4371e28ba74e87168ed0fe03a4ebaf81f create mode 100644 fuzz/corpora/client/c1cbd3c6dc38408cc3080eb8391697dde283f125 create mode 100644 fuzz/corpora/client/c212598a468609a901c548ed56bdb12e8f116071 create mode 100644 fuzz/corpora/client/c21ff5e842658d3c52233e8be4a20b9cdcee1070 create mode 100644 fuzz/corpora/client/c2237078f655a0445e3ff4a2b4048b27e7832671 create mode 100644 fuzz/corpora/client/c24470d6719206a825d1df95728db6f4c520f6dd create mode 100644 fuzz/corpora/client/c26889cbaf132e163da96295d5cf5127e3effa07 create mode 100644 fuzz/corpora/client/c26faa5ec0cfecb96068bd8466a8d2b5f0b554d8 create mode 100644 fuzz/corpora/client/c273f0ec4cc4c9995fcbfeb9b47f4d188277fd65 create mode 100644 fuzz/corpora/client/c2746b003c7a471509dc9b87948b8891a44398b9 create mode 100644 fuzz/corpora/client/c2a2dfab515485a25bc65b32cb9d73b8e83d1257 create mode 100644 fuzz/corpora/client/c2c6d4984ac12cd78b6deb1a013f1f7b35f2f792 create mode 100644 fuzz/corpora/client/c2ded3967d3ecb513258bcddc65c41758ea31dd8 create mode 100644 fuzz/corpora/client/c316f99fc3b86472f3c063147467684277477b19 create mode 100644 fuzz/corpora/client/c333d435902c0e6c9a35e70e3093dae7ab2128ed create mode 100644 fuzz/corpora/client/c34062abdc4cfd89c29a4cfbabd474ac256a0e95 create mode 100644 fuzz/corpora/client/c350bb336cc3f59dda3dd0c76547c3e984333712 create mode 100644 fuzz/corpora/client/c35260935713a8f4dbeef5c24677b845afd80c8b create mode 100644 fuzz/corpora/client/c3684f6ce40437d598ef7a7308eb9f94b26ae8da create mode 100644 fuzz/corpora/client/c37ddcbecc1e3dad3cb2fea977383dcc92a701cc create mode 100644 fuzz/corpora/client/c39114ee25838c960ccf0fa80ebcf8a2f2362db5 create mode 100644 fuzz/corpora/client/c39d3d89d83f759d28070dc70963abdf9110ecdf create mode 100644 fuzz/corpora/client/c3a5a9af24d55292064bb4f1d750ff0fc5444622 create mode 100644 fuzz/corpora/client/c3a6e2303edc9e51f0f3b0ad87a268690e352e8b create mode 100644 fuzz/corpora/client/c3b5ebfcac1520d89c9f1d4c7b0cb4042bb3821b create mode 100644 fuzz/corpora/client/c3cc2772a3be8b39a7ec7828ba48669c7198b507 create mode 100644 fuzz/corpora/client/c3e4c9d09319ea885b301a606748f18f30f2f36d create mode 100644 fuzz/corpora/client/c3e64da4f47197893787f08e88a72d7d08d049ce create mode 100644 fuzz/corpora/client/c3e99499720cc1d025b9e16371076682021b4057 create mode 100644 fuzz/corpora/client/c3f192cb8853ccfbe3b39d7f4572e12ef50eff44 create mode 100644 fuzz/corpora/client/c412bbff304e49c0d1bbefe6f36d3fba3c59ddc2 create mode 100644 fuzz/corpora/client/c4197d30e63646289e9a7e0ce70ac8ab5d02b851 create mode 100644 fuzz/corpora/client/c43ca124e9f6f8a0cf3a70c89e0e7cdfc1cb1486 create mode 100644 fuzz/corpora/client/c4551d002a1de3c6d5ff76f5c2655fe073786194 create mode 100644 fuzz/corpora/client/c4652543ba37de8d3cc677656424034aa3779f64 create mode 100644 fuzz/corpora/client/c46759964ffae5297f8945e556efd095149ceb41 create mode 100644 fuzz/corpora/client/c46796d60657b20b54d634b694ab0170610679dc create mode 100644 fuzz/corpora/client/c4750cb81df39a004739c3c9d6a3e66c784ef8c7 create mode 100644 fuzz/corpora/client/c4882ff80d6a4fe843789fa4a8ec34b37c7ace3b create mode 100644 fuzz/corpora/client/c48b62819868a4bd3b6470c680f0bfb1bf0afc19 create mode 100644 fuzz/corpora/client/c49ec5ccd11ac98edb5db37f3e3ead8e24df0b3e create mode 100644 fuzz/corpora/client/c4a9cedd4f7053e116fdd10e517fd1252be3b473 create mode 100644 fuzz/corpora/client/c4b9c4ca01d9a20e235cfbb0d7c493148ff9590b create mode 100644 fuzz/corpora/client/c4c6e55e70f7ce8003245e52ac20861571c8c0a5 create mode 100644 fuzz/corpora/client/c4dd460e9ba9ed62ea4e771bf6d80d0a31edfbde create mode 100644 fuzz/corpora/client/c4f1d2cd94683c7ae517a221935e2c1e36fcfe81 create mode 100644 fuzz/corpora/client/c4fafae82fcb199f282ced9c97286af165ec2e56 create mode 100644 fuzz/corpora/client/c50e44bfabe1ea3e03bdcf177992dd96695f7acd create mode 100644 fuzz/corpora/client/c5346c2f9bdc3de643b8453e88fae6b8ce86cb1e create mode 100644 fuzz/corpora/client/c560e5ffcc3710d0189e605118181a834d226b36 create mode 100644 fuzz/corpora/client/c564901bcd8795a9b7d2885be41e057d346e39f6 create mode 100644 fuzz/corpora/client/c594907b540161244d641874a8ae9ae60e1a8add create mode 100644 fuzz/corpora/client/c5a2e087ff962f3d321ff640d713223e0b4e9e46 create mode 100644 fuzz/corpora/client/c5ddfea1fc391cd3458d0fb2448ddc1c15eb03b4 create mode 100644 fuzz/corpora/client/c5e23bb082550af10b399be2d76883ddec81fa99 create mode 100644 fuzz/corpora/client/c5e2848e2d8b7df9e753a6b86426b76b2408eb55 create mode 100644 fuzz/corpora/client/c5ec5e68d63ec6e5973ec245cd88440af158ab0c create mode 100644 fuzz/corpora/client/c5ed42d310ddf2f056096e0ac029e2f1d80fe97a create mode 100644 fuzz/corpora/client/c60da588d0047f2547cc3d6057d7f852db3317bc create mode 100644 fuzz/corpora/client/c61be9e6319a141d076c9b93faaad37402cc8873 create mode 100644 fuzz/corpora/client/c62dd8fceeb7cb1d8323792757d1e741a424ae8e create mode 100644 fuzz/corpora/client/c63e2cca2f617fa5dbc999f704d1edad78586e34 create mode 100644 fuzz/corpora/client/c644f221c8b5fd45098cdc20fbc8f030235b17d4 create mode 100644 fuzz/corpora/client/c6595c48eacd1d625f46b2d6d031720654e763e4 create mode 100644 fuzz/corpora/client/c66e740279d09ab96efd31d16504a51a365cf734 create mode 100644 fuzz/corpora/client/c6732e15165c2d6bf9d17f1e8db60b4780194244 create mode 100644 fuzz/corpora/client/c68e25847d22ba28e27a5d0ddb252845bac0698e create mode 100644 fuzz/corpora/client/c697134bb733ff666f8f212226e32ef933539c54 create mode 100644 fuzz/corpora/client/c698b8f029d000da2dfdd1e7dba295b8d064e814 create mode 100644 fuzz/corpora/client/c6b89288feb21507ccf65736b03fd5f181658120 create mode 100644 fuzz/corpora/client/c6bd84dea9f3cdb2f1e8f0f4604aa35ec8a37cb0 create mode 100644 fuzz/corpora/client/c6d64dedd9072c16880f0da80fd50040ee3e2750 create mode 100644 fuzz/corpora/client/c6e10914542b87018f3a89ff9f2118174c268178 create mode 100644 fuzz/corpora/client/c6e3f111ca254ed82d9a1bf366b587b37b72efb0 create mode 100644 fuzz/corpora/client/c6ec8ce0090faaefc095d0798d29ffd0cebb5aef create mode 100644 fuzz/corpora/client/c6f77d8a372678886904bf6acf46b6829a666ad4 create mode 100644 fuzz/corpora/client/c707a5c21a145c5e528da68205cfcfb1b3476d5a create mode 100644 fuzz/corpora/client/c710b29c8309d5d75303edd2d46753906213c20c create mode 100644 fuzz/corpora/client/c72b8ffe8c67b32ffea2391eb587f494b07eb188 create mode 100644 fuzz/corpora/client/c734ba3a46ff02e51d0f58de10d465839871a47f create mode 100644 fuzz/corpora/client/c73a5af348ff2299bfbbee7f0c2dd095d1fe39f2 create mode 100644 fuzz/corpora/client/c74649790e18f8283961f6caf0f06cf2928d9698 create mode 100644 fuzz/corpora/client/c75e563e33689be5c2eae30bad8d88ecfa9eaa87 create mode 100644 fuzz/corpora/client/c76038d3e4ef35b56f2234c8d957a20fa78bfa6c create mode 100644 fuzz/corpora/client/c76473595e42ca0942f76ba35fec90337c530577 create mode 100644 fuzz/corpora/client/c765bb61751e5392e7e2728b9c165af6250633cf create mode 100644 fuzz/corpora/client/c77bf5088bc6b4f3faccca93d90c33826d6f8754 create mode 100644 fuzz/corpora/client/c7896a742a3f715f5daf6017284ea6666eadcffc create mode 100644 fuzz/corpora/client/c78d8e59168ec274c727c07787e76a40b1fe5561 create mode 100644 fuzz/corpora/client/c7965622a5920c5362c39615ae3d72ab58eccec5 create mode 100644 fuzz/corpora/client/c7ac8282761126bbeddda55f7dd69f47de39c0d1 create mode 100644 fuzz/corpora/client/c7b8868b8aaf65fad9560b5fe826f9b55cd41a99 create mode 100644 fuzz/corpora/client/c7b9f97593a7f98a79b51f68bf8eae837a760baa create mode 100644 fuzz/corpora/client/c7bc59ef9483d23af4e6f9e3083794cc3660c8dc create mode 100644 fuzz/corpora/client/c7c3c997572f53752eee2b75cb8700b0801a533e create mode 100644 fuzz/corpora/client/c7ffc05c4bedc91974da2cfc2172b25667f4b6c8 create mode 100644 fuzz/corpora/client/c80fe19e143b47b4222397badf0950ebf1412b9b create mode 100644 fuzz/corpora/client/c81d8795ff6d0bab4967a497b98d71781d6e0360 create mode 100644 fuzz/corpora/client/c81f7b22e821992c59accc91fc16fe5886f48bdb create mode 100644 fuzz/corpora/client/c8203636134047568a827453727f536444d75d3e create mode 100644 fuzz/corpora/client/c8295c733b03bb130a659c0a8ff9d345793dad10 create mode 100644 fuzz/corpora/client/c834513b347c7775b407366a7ca5621c5fd15f65 create mode 100644 fuzz/corpora/client/c836d5a5d2906d2dbe23a71c6d51c674b4ef6500 create mode 100644 fuzz/corpora/client/c847591adb00035fece2f6f553589264f9458a40 create mode 100644 fuzz/corpora/client/c848078e8570203112b99a4709ef895183dafd75 create mode 100644 fuzz/corpora/client/c8677d71ef26521b698188f9feb144029bc2b5af create mode 100644 fuzz/corpora/client/c86be8bbee14465600d3310ae01a6ee8d6068528 create mode 100644 fuzz/corpora/client/c87239a1218c85736dfcacd07fea764065adfa9a create mode 100644 fuzz/corpora/client/c8765276917f270026a9a2bcccfa8b2cae7c910f create mode 100644 fuzz/corpora/client/c8a5a3958f0b344f33c26ced96e0f43a2b34eca4 create mode 100644 fuzz/corpora/client/c8a9534cbc0ee48322510de6653117647ff12af5 create mode 100644 fuzz/corpora/client/c8b1df60ebba96c7048586dfb063fdf59a021258 create mode 100644 fuzz/corpora/client/c8bcb277937fc98c1a7bcc8f746c230e98810a89 create mode 100644 fuzz/corpora/client/c8c12a01d94fbfe4c80fbf84c4244cd001b1ea23 create mode 100644 fuzz/corpora/client/c8da2773c2e3faead2a405eaede2e337b762ed45 create mode 100644 fuzz/corpora/client/c8e27680c55cb9d43d7dfb1137581ea359928982 create mode 100644 fuzz/corpora/client/c8ec0c6516b4a2ae72d51a7800a7c33582610917 create mode 100644 fuzz/corpora/client/c9093489207164e9ca9c51e4811e5e9888032de7 create mode 100644 fuzz/corpora/client/c90ebeb64ef60b6a248a8d710ed3cad9df7a153b create mode 100644 fuzz/corpora/client/c9127e46b309af0586a6b445bf234b04ffdbc995 create mode 100644 fuzz/corpora/client/c9239c3692f4b70a9ec9a528d707c1b4aff681e8 create mode 100644 fuzz/corpora/client/c929a00b1575973e68310f7249e3dd5808619142 create mode 100644 fuzz/corpora/client/c92c34131b635630b3beb51e80bbd1ade7cc21f9 create mode 100644 fuzz/corpora/client/c931b93a41aeee31b87b5eaec20fb023fc9cb9d2 create mode 100644 fuzz/corpora/client/c93201c580bf7eba02b7d7a7ba439386187eeada create mode 100644 fuzz/corpora/client/c9387c475d5438a5e2d44e9bf5147764abbbcf9f create mode 100644 fuzz/corpora/client/c93b56a527beba593956f423007c5cd3adbde057 create mode 100644 fuzz/corpora/client/c945cc21fddc979dd7ed963065151c36329938cc create mode 100644 fuzz/corpora/client/c9554cfe1e904fe2aca18ae71a47e3cfe6854855 create mode 100644 fuzz/corpora/client/c9626e14bdee83cb947670484daab6c5082fcb71 create mode 100644 fuzz/corpora/client/c96b32cc3cd89055994eba396c22052734df2e46 create mode 100644 fuzz/corpora/client/c97ccac4d24297fd0db964d645cb0a5bb8b92af7 create mode 100644 fuzz/corpora/client/c981641609048358f248cdd782a74a3c23d79d1e create mode 100644 fuzz/corpora/client/c98db72e8922493a4458b6fdfc755967aa311a0f create mode 100644 fuzz/corpora/client/c98fd69f83a0ec60e241877fcc21a1ce687b3946 create mode 100644 fuzz/corpora/client/c99f9fee8fbde6d00063cefc0c4a3a127158220e create mode 100644 fuzz/corpora/client/c9aa7be7a4753d34513cd66e5306b43a60284d3d create mode 100644 fuzz/corpora/client/c9b20bb80bcc1bad037b34d79afe5feea2bedaa9 create mode 100644 fuzz/corpora/client/c9b3fd5a7c3692b36df9d1ffc2fdd9d525645c59 create mode 100644 fuzz/corpora/client/c9bc55b02342123ff4c9c794e5f825d77555a35d create mode 100644 fuzz/corpora/client/c9c77d0fe50267336c880c11740af880739491e2 create mode 100644 fuzz/corpora/client/c9c90b52b95a0f3385554d1076533d46d5ce6804 create mode 100644 fuzz/corpora/client/c9d277af7ce0428f4239f03a79190bdae37fdb93 create mode 100644 fuzz/corpora/client/c9da53ccf6bf23664ca34843adee018ef73931d6 create mode 100644 fuzz/corpora/client/c9f6868179710b0db1a443dbd48ebfbbc71dbc45 create mode 100644 fuzz/corpora/client/c9fac1fc63be63ffcaa115b9bffb729cd2896212 create mode 100644 fuzz/corpora/client/ca3397ec4f93afa6d0d4d5744d9dd7ff1a2b63a1 create mode 100644 fuzz/corpora/client/ca35658c6fb147d0e00083d0661f427da3f57c13 create mode 100644 fuzz/corpora/client/ca3ade4692a70a10d70d38757cc6e1c04b7d02b5 create mode 100644 fuzz/corpora/client/ca3b2bc923edc9cd35a7a126319da3945202a457 create mode 100644 fuzz/corpora/client/ca3c7401958ba0540f5fb180b1c0196cfb20243b create mode 100644 fuzz/corpora/client/ca56e232f516ba74ed7bc63c8241ed2932077c6d create mode 100644 fuzz/corpora/client/ca5b4f0b4058b7fb8e3eebe225be3ee5f7e1b499 create mode 100644 fuzz/corpora/client/ca6b13c2aa4fb08651f16d82f28d2677a3139ddc create mode 100644 fuzz/corpora/client/ca7efe6d6c8d4e6de030166a66e4b0bfbb1d42e7 create mode 100644 fuzz/corpora/client/ca8bb1c913b2d2a96e6ff24fe3f988afe6f670cd create mode 100644 fuzz/corpora/client/ca90e472d5a71290044e24f71bf7316c617a4107 create mode 100644 fuzz/corpora/client/caa3342196b679c2b2070f9fb25dfb795cfa78ca create mode 100644 fuzz/corpora/client/caa8e620b4333ef9c35a8d2dcd67eba4dde5f2d4 create mode 100644 fuzz/corpora/client/cab639177ac33423082a87b971be641d7c6ded28 create mode 100644 fuzz/corpora/client/cab939c1398fc6137144a3bc6b5adcacad33f1a6 create mode 100644 fuzz/corpora/client/cace65ad0878c3290433c09913e8556f5aa84fd9 create mode 100644 fuzz/corpora/client/cae05ca057e6617aab9789bbcaa3bdcdfa51fb1d create mode 100644 fuzz/corpora/client/cae3e12b11ab0c9662abe4ae8493bac30baa5b7c create mode 100644 fuzz/corpora/client/cae8adc1c71aa4e57bac3347da7574a5b184acd5 create mode 100644 fuzz/corpora/client/caefdc1ed84500d15a3418dd4ab390a1e6742cae create mode 100644 fuzz/corpora/client/cafe6a4f21e6c574787e1895578630fad8ad05b5 create mode 100644 fuzz/corpora/client/cb077850c2e5d120bc41bafb98589b1072dfcd14 create mode 100644 fuzz/corpora/client/cb1d0b471561afde4fdaed15fd164f1a5a16dc21 create mode 100644 fuzz/corpora/client/cb1f9c00bb26dfcaa311da6f08c2d12cc2d719b8 create mode 100644 fuzz/corpora/client/cb388ab38f4c563568879dc83e26c0bc781368f5 create mode 100644 fuzz/corpora/client/cb3e4b02d6ccc8a87d6b7ff4179fc27c5f48126f create mode 100644 fuzz/corpora/client/cb6bc88a0d7af7fd4b25473d31c556fb290d1e2e create mode 100644 fuzz/corpora/client/cb6d5d5128cc8a5539e48715977e8a3cece6f4c5 create mode 100644 fuzz/corpora/client/cb6faed059cc01d0ae3222a3098862106d1a74ed create mode 100644 fuzz/corpora/client/cb710557010c392d2199c9eaada098c94842ebac create mode 100644 fuzz/corpora/client/cb7c78e6e92aa77b519b89790e5fb1b00c9ff0fe create mode 100644 fuzz/corpora/client/cb7ed0cb2fedaaf88a332cfdd7c9d5b6c74cbc11 create mode 100644 fuzz/corpora/client/cbbd167d9d91db7c0acec4719a407b44b8b0cf84 create mode 100644 fuzz/corpora/client/cbc043650772c10f1d674acb8674c1741cb05628 create mode 100644 fuzz/corpora/client/cbd6f520e9ccd1d769df0c155b9b559af61cb1bf create mode 100644 fuzz/corpora/client/cbe8dba956170f7426d372ed1eb45d33db686cc9 create mode 100644 fuzz/corpora/client/cbfcb8022c378ba0e532a8ed572ac24f086c7d88 create mode 100644 fuzz/corpora/client/cc02997e982b0d126c20b75b4cbd03b4dd22f4c0 create mode 100644 fuzz/corpora/client/cc096b0a680c877ef5747e3f9eccd2b302ed14d2 create mode 100644 fuzz/corpora/client/cc21178ffc1153fa502f81d98c8b9b2ecc70139e create mode 100644 fuzz/corpora/client/cc28958d338366bea1237fa767d5f98701843e25 create mode 100644 fuzz/corpora/client/cc2a1c3ff14e08a5f812cf3f0ebf1e9789cb31b0 create mode 100644 fuzz/corpora/client/cc342a336c1b99a386b667bda24f08cfb587f0c1 create mode 100644 fuzz/corpora/client/cc5570dfa4f24c8b4ae48b8f9f63fedf093b2c67 create mode 100644 fuzz/corpora/client/cc74987531015569a000d514d087991e7daae082 create mode 100644 fuzz/corpora/client/cc770db336828666a9fad328485d218a99636bb5 create mode 100644 fuzz/corpora/client/cc7e604c7905f15080795527928222d2d1bee77a create mode 100644 fuzz/corpora/client/cc931855701616c763a075f5ef8542ee2b1de721 create mode 100644 fuzz/corpora/client/cc9ac3b84bee684e6ed62874b274f752729a1ab3 create mode 100644 fuzz/corpora/client/ccad9a9d15b22227a44e0a11e50e94c7e0904379 create mode 100644 fuzz/corpora/client/ccc340d10c8f22771df5ee4e6aa9cd62cba75fff create mode 100644 fuzz/corpora/client/ccd38967bf36f636fed6a3abd50fbba682fb1c33 create mode 100644 fuzz/corpora/client/ccf2e4b2c2a65e9b7e0c41f1aaea6bf0c63d82fe create mode 100644 fuzz/corpora/client/ccf4d30643081a2cff09f0cbfd922f970215264a create mode 100644 fuzz/corpora/client/cd32365f23a10cdb2b1047422199b904be4bc46c create mode 100644 fuzz/corpora/client/cd599a9a4d533ddc41ddbd8067f3b582d1fc800b create mode 100644 fuzz/corpora/client/cd624cc840935ca5a1048c133123b2ff51cb16ba create mode 100644 fuzz/corpora/client/cd6ef0a522b0d04b17fac896be0185ede723cec5 create mode 100644 fuzz/corpora/client/cd86ae75828bb9633f47f8b158b8d304e8e0b56a create mode 100644 fuzz/corpora/client/cda4eb067282e389dc09493338b3c13f7355bc6d create mode 100644 fuzz/corpora/client/cdb18a37d811252d781b1d04209411615ea62898 create mode 100644 fuzz/corpora/client/cdc89076d36c62e8938683adf3a4df924aafe4a2 create mode 100644 fuzz/corpora/client/cdd089349b331ef564a0baf036c5bd7ba0c73c70 create mode 100644 fuzz/corpora/client/cdd87d82e7b95704280b97956c8e061a213e2e7c create mode 100644 fuzz/corpora/client/cdde58e3a47ccc1ccdfc9d1ca39876d2f7af7dd4 create mode 100644 fuzz/corpora/client/cddf7977979c977ce1e1f298d3b630de8006bd60 create mode 100644 fuzz/corpora/client/cdf6a8397eff9e7f65e77047b167c52c85d101d4 create mode 100644 fuzz/corpora/client/cdfb7625148432225a9594aa9ac25691375b8ce0 create mode 100644 fuzz/corpora/client/ce00f457e1d347436aeb26fead5d8e79bf239615 create mode 100644 fuzz/corpora/client/ce17596074d5dbdfc95c266e324ac9a6ffb3fe6d create mode 100644 fuzz/corpora/client/ce24402b5a7aa6844553f7639f6377cac60b5235 create mode 100644 fuzz/corpora/client/ce3a10d3186077b314b8c33cd5c0414b87ff564c create mode 100644 fuzz/corpora/client/ce74183848c17c54f6d65ad8abd496e5cbb76633 create mode 100644 fuzz/corpora/client/ce79f8c29193979e4c1ebf0dbe22b3eee08cc37e create mode 100644 fuzz/corpora/client/cea2b88bc13fad4a2a9a5c9416dfd9b84c803f60 create mode 100644 fuzz/corpora/client/cedd1f6fbb7c1a76f0ceecbfcb17f22867d10069 create mode 100644 fuzz/corpora/client/cedfe7f75a2f271f8eb206acebc8834ef5b01842 create mode 100644 fuzz/corpora/client/cefca93b324c300d195127b02f4e580b20882846 create mode 100644 fuzz/corpora/client/cf0f5b6a93f626c80d047031ef692e2ea145b2e0 create mode 100644 fuzz/corpora/client/cf1aee56ad9fa0ca21312b0f4fe036f22028bba1 create mode 100644 fuzz/corpora/client/cf235448412bf2808ac11bff53030b9d0e36d6f0 create mode 100644 fuzz/corpora/client/cf3e58ff5f2273fd2dda2e201ab748ad21c9f13c create mode 100644 fuzz/corpora/client/cf63b89a9bbd0458275bb39264c366df18bd9bfe create mode 100644 fuzz/corpora/client/cf722d4fc60b46b78c616e8e1e501164fb233527 create mode 100644 fuzz/corpora/client/cf7d6fb54a397c9719c081ea8acdb0e0f6ee0887 create mode 100644 fuzz/corpora/client/cfa06f88edb836d4854f20005acc93916bd307ac create mode 100644 fuzz/corpora/client/cfa361c5a3aa84b5a8637544ae02131e884bd591 create mode 100644 fuzz/corpora/client/cfa5bc8a4b12624278ac6ed9fd0900954142e850 create mode 100644 fuzz/corpora/client/cfa622948c2a11207d5959c3e081928c6dfc7c4d create mode 100644 fuzz/corpora/client/cfa64bb52f1256601e370bd753ccd07edfbcaf9c create mode 100644 fuzz/corpora/client/cfb5de7d0803bb750cb26e11fd0232b8581f496b create mode 100644 fuzz/corpora/client/cfcaa46698600ac270a1268ac725cc23119b0fb1 create mode 100644 fuzz/corpora/client/cfdd7460cb1aadeec5297a95a2f2994a19dec38d create mode 100644 fuzz/corpora/client/cfe70e0e315853f0a4440345a5259009df5f4aa5 create mode 100644 fuzz/corpora/client/cfed02d7f21e80c8fa25fed3fba695138d5b467c create mode 100644 fuzz/corpora/client/cff7884e02e54bf286e6e6bad7ef575cb744acb4 create mode 100644 fuzz/corpora/client/cffe1518134b80e4b5fd1be18a38d1ed9538ff4b create mode 100644 fuzz/corpora/client/d00a3105b5921f3cd28a5c6eb1c2186f9cc500cc create mode 100644 fuzz/corpora/client/d01d3757ccb20467c549e4aa5712fbdf581c40d2 create mode 100644 fuzz/corpora/client/d01fc0c4b98722982b185d0cbfc6c9f81eb76fac create mode 100644 fuzz/corpora/client/d04692ab5aaea9d6acab7e14fa158a8c4920de27 create mode 100644 fuzz/corpora/client/d04b8746eadc24daafc15c5fb4a8d2535800b34f create mode 100644 fuzz/corpora/client/d059918ce124d3ee06be751e354db00a00b9eb78 create mode 100644 fuzz/corpora/client/d05a645a3a561ca47e72813ac2319eb0eb3553c7 create mode 100644 fuzz/corpora/client/d0697a6cd56871f2bdd28fdaf08ed1e473d50149 create mode 100644 fuzz/corpora/client/d06bba3068487fa1ae5db7dd04fd82e7b89619c8 create mode 100644 fuzz/corpora/client/d06c9f429f12af403f0a7016ed8b80c8a1926926 create mode 100644 fuzz/corpora/client/d07584556a1bd577448f43bf1e8da8557b11e608 create mode 100644 fuzz/corpora/client/d080a864900f2ae7329e6493fcfdf7eb0e391f97 create mode 100644 fuzz/corpora/client/d09d9e87a9f0604550d60864ad6206e7dab20a32 create mode 100644 fuzz/corpora/client/d0ae536f01d29d142779793b1ccd136cd45fbe7c create mode 100644 fuzz/corpora/client/d0ce6e69724f9e49bf271d6c1075da79eca7e360 create mode 100644 fuzz/corpora/client/d0e7d59cedb6e9da187ada83b397c1eb8c5debc9 create mode 100644 fuzz/corpora/client/d11249b2560bb7454af12dc34bbe5b35593b8800 create mode 100644 fuzz/corpora/client/d1292e8d50eeeb25706629ff57641f7eb15482b7 create mode 100644 fuzz/corpora/client/d132417bf9033a54b1246778f87bd87ce73515f1 create mode 100644 fuzz/corpora/client/d137b69d53e0383dfb5c5f782e7689510f2ede6b create mode 100644 fuzz/corpora/client/d13cd60d3974fdcef465fbd3c0bfbbf5f852e54b create mode 100644 fuzz/corpora/client/d1451942594379f11f080d0a3ecdf0b1985a8cf6 create mode 100644 fuzz/corpora/client/d1594eead5356421642288f85d8fbc49faf75b7f create mode 100644 fuzz/corpora/client/d164ad1b82293f804e63a65a26b72c2d6db7d2f1 create mode 100644 fuzz/corpora/client/d173a20377f6d6bdb75f0d405fe0978fac15eee4 create mode 100644 fuzz/corpora/client/d174fd331ff9a9708b5e5d47da7f899902c77823 create mode 100644 fuzz/corpora/client/d1896cb68a1b17fe49c3f2dbc6cb3ebf13d1127f create mode 100644 fuzz/corpora/client/d18d5a473a029eca7e5e0daace6d60cd4010dcf4 create mode 100644 fuzz/corpora/client/d1a0ee3d78b1c3d6e8b657e073e17067a3f52dba create mode 100644 fuzz/corpora/client/d1c6d832e083bd54e834372a66ff9ae758da5ae0 create mode 100644 fuzz/corpora/client/d1d22c1cfcaca91347792052dd7a03821a979462 create mode 100644 fuzz/corpora/client/d1d3bc123a0c182aac5a4a0b95201389849ec926 create mode 100644 fuzz/corpora/client/d20ec37021490a8297bb48acb56e130f1ac9d961 create mode 100644 fuzz/corpora/client/d211c1c89ee49a69ec0cac607287e00c5be15468 create mode 100644 fuzz/corpora/client/d223da30f9771d947aaaf24a5ae7ced83344848e create mode 100644 fuzz/corpora/client/d22f103438775b0e0c0e8ce2a65f65adcfd96a78 create mode 100644 fuzz/corpora/client/d23b42309c707e71500f46fcacf2191914ce20e9 create mode 100644 fuzz/corpora/client/d2410bcafbf3dbde5ae1f8ac6df125a795bb1d54 create mode 100644 fuzz/corpora/client/d24c3e03a990d9135df197238cdfe200d0a679fd create mode 100644 fuzz/corpora/client/d27ceb3bc3263b6e220842dcac049ec7064c6c40 create mode 100644 fuzz/corpora/client/d2814645c46f60b2831ba44be1d6fc6b35dca6cb create mode 100644 fuzz/corpora/client/d2b0885280d7ad647afdacf9cfd88bf9dc26869c create mode 100644 fuzz/corpora/client/d2c13f58d1962f60ac3d72185312a7fdaf04ebc8 create mode 100644 fuzz/corpora/client/d2c5f7206f51ad867946dc5ceba0367c5de5062e create mode 100644 fuzz/corpora/client/d2c8dab737635d0e2c7eac94248bcb833172c5eb create mode 100644 fuzz/corpora/client/d2dbb3320c18acb48929ad0ef217dbf3dc043f6d create mode 100644 fuzz/corpora/client/d2ecba205a8c8f7e6122e26f3ca3a8e65c01fabb create mode 100644 fuzz/corpora/client/d2f5bdc199be0596367cce7a55a6933c577b1418 create mode 100644 fuzz/corpora/client/d304fccfe1192f7a249a0a6d2df228aa18cfcbc6 create mode 100644 fuzz/corpora/client/d322aa2562befee9a70338cae0d317e1fb832a15 create mode 100644 fuzz/corpora/client/d338ada036fe2be91a685dbbb031f38da0cbba51 create mode 100644 fuzz/corpora/client/d340dec9e06289f03ea7247180563f650dbb52e7 create mode 100644 fuzz/corpora/client/d34bcda00255920daa24840bc535d0f60f393e79 create mode 100644 fuzz/corpora/client/d35a1818479f9105fa15a2843a7495bc986c54eb create mode 100644 fuzz/corpora/client/d35f35595fc5aa59ccf959cfe5bff609bdf7cd5e create mode 100644 fuzz/corpora/client/d362edb07a24e19591cb9b52c338faf94accb8c8 create mode 100644 fuzz/corpora/client/d36f48cd5fc5a23386fcae0d6a8d18555aee8f95 create mode 100644 fuzz/corpora/client/d389c862d0698d09adb01d6bebb02ec7390263b4 create mode 100644 fuzz/corpora/client/d3a4249490f5dcde8750406e4ad30a5dcdac5336 create mode 100644 fuzz/corpora/client/d3c791b00ad87ec3aa5983f572f00f4758ef9cba create mode 100644 fuzz/corpora/client/d40036e07426edba7543b35a6666167428a42842 create mode 100644 fuzz/corpora/client/d402b525df06a304d343fa91a5d84cb1233dce45 create mode 100644 fuzz/corpora/client/d43b60fc5a06083f8a2773da878f459cb26cdfe8 create mode 100644 fuzz/corpora/client/d455c7c72c9eddd5d9bee3278bc7775f861a493c create mode 100644 fuzz/corpora/client/d45d2354d65f8dc3f4803d1ddae3e56d5429ae53 create mode 100644 fuzz/corpora/client/d45ec4a0b35e51f768a10205c3817b4249ae2cc5 create mode 100644 fuzz/corpora/client/d46821e8264c4f1c0b5445aeeeb34620316007b5 create mode 100644 fuzz/corpora/client/d468ec2ef5dd94622133baecab2382fdc0252f38 create mode 100644 fuzz/corpora/client/d481b4ff6d17407de1ea0f198f10c2efcd72fe35 create mode 100644 fuzz/corpora/client/d4aaee5d509fa8fc2281dd6fea5bb7799266c36d create mode 100644 fuzz/corpora/client/d4f4b68c737e5f0694bccd9f1fbe9ce4df673d58 create mode 100644 fuzz/corpora/client/d4fd0fa57843ff302cbb38a5fba445e6f058d6cb create mode 100644 fuzz/corpora/client/d5269880d4cd89eb21a30f67dbe845154fd64919 create mode 100644 fuzz/corpora/client/d54e314f8bcb4bb4a51ffb917467403cbebbcc60 create mode 100644 fuzz/corpora/client/d5520adf94e2e51f3853c4cf4609865fb86e8864 create mode 100644 fuzz/corpora/client/d59201482f593bfe5997358f776e59e5543d824d create mode 100644 fuzz/corpora/client/d59cf9e5179ae57248c8bce0cdf058c73dcfd5e4 create mode 100644 fuzz/corpora/client/d5c1dd613ebaf5611ab185536cdd3e29880927ef create mode 100644 fuzz/corpora/client/d5e8676ea04ba7201b72e313d1647bc33e3a1d94 create mode 100644 fuzz/corpora/client/d5f119db84041ad0beb036d6340f12faffb37084 create mode 100644 fuzz/corpora/client/d6108c4dc3bea75a4d7d94ad0b14b01147f03708 create mode 100644 fuzz/corpora/client/d62eaac4e65051695eaf061379c923d3fd36addb create mode 100644 fuzz/corpora/client/d63ad42839f9edfbf217c65f1f07f66bad622c92 create mode 100644 fuzz/corpora/client/d655904b6633a4610eb1eeb2947165e29fa33902 create mode 100644 fuzz/corpora/client/d662042898828a61d787cf2a78943fad47f8de70 create mode 100644 fuzz/corpora/client/d6873f700eaa24707c6fc1673068a350b4a4c6cd create mode 100644 fuzz/corpora/client/d68d0dbada54c6b438c1c75c3872d541c3188a17 create mode 100644 fuzz/corpora/client/d68dfd75ba98cfee1a26271317221d7727736572 create mode 100644 fuzz/corpora/client/d6a475e2227fa5b18c739d190526c26a2029378c create mode 100644 fuzz/corpora/client/d6ad9a4d592c808b1ba56f6d7662c797de4c06e9 create mode 100644 fuzz/corpora/client/d6bbee9edb16c570a752df200ca05fd404c2edbd create mode 100644 fuzz/corpora/client/d6f7936dbc4e088d847553663195578ad9f2bd76 create mode 100644 fuzz/corpora/client/d70051c4aef657d998d3c222c9d45c7d9d531935 create mode 100644 fuzz/corpora/client/d7072fd374529bbfc555482d4ae638849c09992d create mode 100644 fuzz/corpora/client/d713fe71363b67d9730f070032a9f5d83ce88bc3 create mode 100644 fuzz/corpora/client/d7239427b93b75180d4b0ed1d5251874bddcf4ef create mode 100644 fuzz/corpora/client/d73c2ee8a08e1bc5c0058f002e7a0bdeb96fb25f create mode 100644 fuzz/corpora/client/d7459a787b2a8364dc6e0754b33e1bafefcaeff1 create mode 100644 fuzz/corpora/client/d74d757d5150f5d1e84543185cb6964a96508cdf create mode 100644 fuzz/corpora/client/d751176b5119f84e3332d67318ef6d1f30090d2f create mode 100644 fuzz/corpora/client/d7624249aaef3280eb2822ee39d3129516bee91d create mode 100644 fuzz/corpora/client/d7632626771eaa2428ca9626b6abf76d260038fb create mode 100644 fuzz/corpora/client/d76e233917e17232d003fbaef87209b294e728c6 create mode 100644 fuzz/corpora/client/d7728fec9737951e82a61b59a1864e4976a05339 create mode 100644 fuzz/corpora/client/d78a0afd79fe4019c2f394483c78bc8720208074 create mode 100644 fuzz/corpora/client/d79671cb8df1e6081ac17a1d7dd65a7fbd6e9162 create mode 100644 fuzz/corpora/client/d7a5c572ab07f095cb6aebdbb5ffcc49379b8d21 create mode 100644 fuzz/corpora/client/d7af351a16f89765b6c26fc5429a9139b2be1c12 create mode 100644 fuzz/corpora/client/d7d51ccd18717d5ac7724ae26496d107c4dd1c59 create mode 100644 fuzz/corpora/client/d7db4f10c158b74017c88ab50850cf1e3a94fdac create mode 100644 fuzz/corpora/client/d7df1c8a4d32964662fdb1b30d722fb48d7151f5 create mode 100644 fuzz/corpora/client/d7e6c583ca8d0255f20817f980282345bcf9f559 create mode 100644 fuzz/corpora/client/d7f9f138a17aa4921a76317a2eacc89267529714 create mode 100644 fuzz/corpora/client/d7fba32094bd1d4f3f049911f4467ca0116644be create mode 100644 fuzz/corpora/client/d808dd1bd1f58037becb01c731c313b60979ca81 create mode 100644 fuzz/corpora/client/d8159b4618a93cae430116958b753991e4b3ff5d create mode 100644 fuzz/corpora/client/d81ac52857b9ce4ec6f844ddb1254a2fd4916483 create mode 100644 fuzz/corpora/client/d84721148dedf9f72b6f91a2709bca89689d783e create mode 100644 fuzz/corpora/client/d84f183ec3e23cdffe3342be335a166d85a5a573 create mode 100644 fuzz/corpora/client/d87a4ceecc0b85afaf27cab16cd569abd12a6680 create mode 100644 fuzz/corpora/client/d87f3ade36685f3770c37b7ab281dedaa6197a67 create mode 100644 fuzz/corpora/client/d881a6077689dc8b2bfd5bc64e3e5f3e266353b0 create mode 100644 fuzz/corpora/client/d897073c8c9fc74ffcec59df434b73d353b5543b create mode 100644 fuzz/corpora/client/d89f7f0ffe407fcfb5dfe13814a0b23aacaa5036 create mode 100644 fuzz/corpora/client/d8a13736a5963a38d2a86da3773991d606cb8ca4 create mode 100644 fuzz/corpora/client/d8ad5ecd9694b5e0e4710e0bca34d88e930304b2 create mode 100644 fuzz/corpora/client/d8b67227e1039676317c422d894163ab80b00819 create mode 100644 fuzz/corpora/client/d8c5ad02565997b79041a75875c91ced18a7f957 create mode 100644 fuzz/corpora/client/d8c8101ea0cdf23c2a8f66025366396e5b65c859 create mode 100644 fuzz/corpora/client/d8d112d32cc80bca30a112958c06c398bb280ad1 create mode 100644 fuzz/corpora/client/d8d1e57b687656aba7fdd3ecf4eb0a324c981a1e create mode 100644 fuzz/corpora/client/d8da52903f4a18cc6ef09737f3eacb5985714638 create mode 100644 fuzz/corpora/client/d8dbd9d800686272d91f2684e314e0342d3c97c6 create mode 100644 fuzz/corpora/client/d8e375f8f05582a209d5ed8c7620b0912554004b create mode 100644 fuzz/corpora/client/d8f2c8d393248f749bd8578aa66fa3b294ce0990 create mode 100644 fuzz/corpora/client/d8f6d0d7a4070c080d2ee67f07b9ec729b3289bd create mode 100644 fuzz/corpora/client/d8f7082f9284457e9de42edb51b3f1d60c23ce06 create mode 100644 fuzz/corpora/client/d8f8d2191e737b156f122ce8947531fa3988a025 create mode 100644 fuzz/corpora/client/d8f9b6d1f49a03e116bcc1b0e13b4e3992d42e56 create mode 100644 fuzz/corpora/client/d8fda5ef0fd8e6a01b863f3ec626a8a5fa1656f7 create mode 100644 fuzz/corpora/client/d91a249973e16614dfeaab429a69b4a66b8e3f60 create mode 100644 fuzz/corpora/client/d91c476cba36149dac8a8bf1314166a5344c56ee create mode 100644 fuzz/corpora/client/d92ab866dae46470b14fae1627f72e4d94ee7855 create mode 100644 fuzz/corpora/client/d92e031507f2aa881bcd049b88796d8473b90011 create mode 100644 fuzz/corpora/client/d93ec423cc71d2e254544bc140aa325f039f5145 create mode 100644 fuzz/corpora/client/d94e4e0b1483d0af2af3a8e059bb396386b783e6 create mode 100644 fuzz/corpora/client/d950702aa3d1be3fc62626d9b915cba016a70b66 create mode 100644 fuzz/corpora/client/d95140c60347c09f76cc0a94e44ef1265c3f7e02 create mode 100644 fuzz/corpora/client/d97c079b47378b1063a717aa1c47de63644908e9 create mode 100644 fuzz/corpora/client/d987e71ceabdf624b114c165d70b6941fb737095 create mode 100644 fuzz/corpora/client/d9976b90327edea2d2bb81dc1fd498a8b60cc088 create mode 100644 fuzz/corpora/client/d9981687d4e3fd58d5b68d5e7dc25b24955cc80e create mode 100644 fuzz/corpora/client/d99a9c860ef33b4d534dba17b193d8aa1b1bae92 create mode 100644 fuzz/corpora/client/d99fddf89b9ee9c781262fef61960a43d8b1ac91 create mode 100644 fuzz/corpora/client/d9b86f8dcbef5d3d0c4ab6496b30e4a65fb50f22 create mode 100644 fuzz/corpora/client/d9cb13d9baaffdc07d3f72faffaa362cbe5a9ab4 create mode 100644 fuzz/corpora/client/d9e757a94431d1c34c46f3091ce193bba45f0766 create mode 100644 fuzz/corpora/client/d9f97c9d006666564136882cafc6879dc3aef71a create mode 100644 fuzz/corpora/client/da04bfe0c835d790520d54e248daae3f9d0a71f1 create mode 100644 fuzz/corpora/client/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/client/da3f4ef556aefc6973edb970b7f57bf38f41cee4 create mode 100644 fuzz/corpora/client/da47886072d5312f1be08689da7a072f81446c12 create mode 100644 fuzz/corpora/client/da565d24df030cbb664f48c2acf666b08df13177 create mode 100644 fuzz/corpora/client/da5d7dccffc754714ca2c5b2e9b70c96cee66895 create mode 100644 fuzz/corpora/client/da93cafbe403d0008303036b0c35172d9124c089 create mode 100644 fuzz/corpora/client/dab80a92c4c1388a93435648508704892762e8f6 create mode 100644 fuzz/corpora/client/dade08db447f29c4884b5656c855b457de5a8f49 create mode 100644 fuzz/corpora/client/dae65d60e732f4cba1f0a9c7bd933cd272f67393 create mode 100644 fuzz/corpora/client/daf158c004ae61cb11723060204521035e87784e create mode 100644 fuzz/corpora/client/db14b77598d32f23758a1a3a662bb0516c49618e create mode 100644 fuzz/corpora/client/db236db229adeeb9da7b00d3748e87893ec0e9d3 create mode 100644 fuzz/corpora/client/db2c99c13217c1f4217beed081e156618b04a7f1 create mode 100644 fuzz/corpora/client/db3c608e7a1aa1e92ab4f499d21764d539d6ddbb create mode 100644 fuzz/corpora/client/db480f0a37ed9e7186849c08a3775a27869d1a60 create mode 100644 fuzz/corpora/client/db520b2ecdbd304a832dc818984af7ebc2dc0669 create mode 100644 fuzz/corpora/client/db7aa92a4a8e050a53788a83752810e757236351 create mode 100644 fuzz/corpora/client/db86643fa3722e19775ef21c8319e759ff4ceec2 create mode 100644 fuzz/corpora/client/dbb7c1d60cd6bac81cb5d1488e578e0bba8ea582 create mode 100644 fuzz/corpora/client/dbc5f6e95a576b048e5b8208db2403565f9de5e8 create mode 100644 fuzz/corpora/client/dbcb3f2a3771004cb8ec87392c2949c3f2523b8b create mode 100644 fuzz/corpora/client/dbe823ad8545e44d3637873fae05ba86270b78b8 create mode 100644 fuzz/corpora/client/dc0a23278d57cf749ed8cc1e216231c8ba98a1be create mode 100644 fuzz/corpora/client/dc4c4d7730058a5397e8553c72d89d4dcb985552 create mode 100644 fuzz/corpora/client/dc526054d833d22ecc061110130c0d33d214e530 create mode 100644 fuzz/corpora/client/dc60c37fbf332b2a575f863ccec41b171b963f78 create mode 100644 fuzz/corpora/client/dc7f467f7367fabc9de3b58abcf5a07366154254 create mode 100644 fuzz/corpora/client/dc898545a1eeb4689da1b22a8a5c31547dae92be create mode 100644 fuzz/corpora/client/dc8c270e41e8844d6cadb9a7d38aac91885703cd create mode 100644 fuzz/corpora/client/dc9410827bb4d346038c73dc046d1519fe39b4b0 create mode 100644 fuzz/corpora/client/dc94a4c99c4cb9c2643faff64542a45e21e3cdaf create mode 100644 fuzz/corpora/client/dc987348b3ff8453f4ec9e7b0df5cf8913ad5663 create mode 100644 fuzz/corpora/client/dc9e8909fd7a5ccb78c57a8804f22a5ca36e0543 create mode 100644 fuzz/corpora/client/dca9f125f528ca854093a9814de96893cc4022be create mode 100644 fuzz/corpora/client/dcb520d869c67df7eb3339c4ea35e93d3d7a7a3c create mode 100644 fuzz/corpora/client/dcb8b4abffe14866b55b33ccc7f3e881a9ecf082 create mode 100644 fuzz/corpora/client/dcbb04f0ec93075a539700d73e4e2e336797f7db create mode 100644 fuzz/corpora/client/dcc5b4166185616d170ad4adf2be4ff9a4c0a0e7 create mode 100644 fuzz/corpora/client/dcdfff3deaf676195284d67cd36c8a19bec8f9d1 create mode 100644 fuzz/corpora/client/dce22b607c071dd198453e4a1718c3247f149def create mode 100644 fuzz/corpora/client/dcefd16165404fe0ad54ffffb8d7822e73f34eb7 create mode 100644 fuzz/corpora/client/dd02dee0a3a995a337842abea5c45d5b384dff0c create mode 100644 fuzz/corpora/client/dd417be4919a4c5c699acc5ad5fb44308d721400 create mode 100644 fuzz/corpora/client/dd433613c863184c04b66db3c2393672a2806b09 create mode 100644 fuzz/corpora/client/dd5225558da2d471f3a346062ee255bb50564a4e create mode 100644 fuzz/corpora/client/dd542b4ee155e627cd67c1fb4ee5dc4bf2b4c79e create mode 100644 fuzz/corpora/client/dd5d958425e540c4a086f77b20da2d14c74dd26f create mode 100644 fuzz/corpora/client/dd68ca4c8eb9ea19a737fdddf07174cd5300cf8f create mode 100644 fuzz/corpora/client/dd68d441ca11997abee0722b482dcfb3721fec81 create mode 100644 fuzz/corpora/client/dd7cfef686d32ea7de398ddae569f6cf9a3febfd create mode 100644 fuzz/corpora/client/dd83f0132e8bb9f8d8bd5afeed42fee4f5e34e87 create mode 100644 fuzz/corpora/client/dda7d2bebf0e962cd930b7198b2ba1a7ee7227b9 create mode 100644 fuzz/corpora/client/ddaa771bb81f33338aacb56767d6e805ef80137e create mode 100644 fuzz/corpora/client/ddcc0df887278b3984e2942e6040a2f806773c02 create mode 100644 fuzz/corpora/client/ddcdfe0ef39a01af2866a07e466a9736ec9127fd create mode 100644 fuzz/corpora/client/ddd465508774c78befa2fdedce0065addc017561 create mode 100644 fuzz/corpora/client/ddd53795e8d10c6856264b165e97bf0e3f5c077f create mode 100644 fuzz/corpora/client/ddd5eed6d67f985dd909fd2f73613bd77cb39ac7 create mode 100644 fuzz/corpora/client/ddee8af4eb71cbcb8593e2575671fbba450aaef8 create mode 100644 fuzz/corpora/client/ddf77a64fd56672d408f2b58124b9ef2c100a1e6 create mode 100644 fuzz/corpora/client/ddfec90cdf59e9b053e76646d592a7232397452a create mode 100644 fuzz/corpora/client/de02be6f2a36e9db113c1c2ba197316cfc1c6e21 create mode 100644 fuzz/corpora/client/de1627d147c946a1af0cd76b5ddd24a23b389e79 create mode 100644 fuzz/corpora/client/de19382d935a1640d8e5e78afc7554d85d5e9e13 create mode 100644 fuzz/corpora/client/de1f4d4fadc666c7ab57686039c171cba1e43932 create mode 100644 fuzz/corpora/client/de212940dc9813be30d199ac09474de1883c7ae2 create mode 100644 fuzz/corpora/client/de2156caa5ad0c0baaf43c4c79f2d88f32b43c2c create mode 100644 fuzz/corpora/client/de32bfbcc9adf3c23476b9df5bcccf6c08a2d803 create mode 100644 fuzz/corpora/client/de3dcf024b8c775e872fa997a1776462c898294b create mode 100644 fuzz/corpora/client/de5795df5baf7f56dd7ceb1b7f73a64254de18c6 create mode 100644 fuzz/corpora/client/de61e01b3fe985bcb0378c64517e7e90f2a0a044 create mode 100644 fuzz/corpora/client/de763208af2ddeca2313869c392699948cfad73f create mode 100644 fuzz/corpora/client/de7b927efc0ae906eca7d2d877c1dae460093b1c create mode 100644 fuzz/corpora/client/de82c80501679aac5f55a7eab3f573dcdcffd57f create mode 100644 fuzz/corpora/client/de8faede137e9a0e95f8b2d520c89ce5a1cf70e9 create mode 100644 fuzz/corpora/client/de8fd13046d58d886c28654dc70fa8654c5a22fe create mode 100644 fuzz/corpora/client/df0310a217f1ac7ccf865236d9349200f511995d create mode 100644 fuzz/corpora/client/df074cfc097412c9612bd3944721843f17b79170 create mode 100644 fuzz/corpora/client/df0b349422fda2d066584a1cb07d25a7583e7a07 create mode 100644 fuzz/corpora/client/df1741aa15bd8d1ea925e39b7e2c25f16faf6cfc create mode 100644 fuzz/corpora/client/df17438c90e509973fd9d4038bee914e9cc3cd9c create mode 100644 fuzz/corpora/client/df1cd0b71590f4fd89caf91c6d5a9f560af1227d create mode 100644 fuzz/corpora/client/df1f4a2867acc86cfc4e94b2642e50c30bd43abe create mode 100644 fuzz/corpora/client/df54bf7abb87d20bab0367551308bf6187c99a85 create mode 100644 fuzz/corpora/client/df57a40f024761fc1a15fa8387e6374baaa5dfa2 create mode 100644 fuzz/corpora/client/df58025a7465df73c75fda79ed404e1782d0e2a3 create mode 100644 fuzz/corpora/client/df672a25af4717301aae97ddaf005f50c32dd342 create mode 100644 fuzz/corpora/client/df6edba282c22323706c33603c5401dc4b6b4ddf create mode 100644 fuzz/corpora/client/df777561b2f48447be369088cb8b90cfeeaa734c create mode 100644 fuzz/corpora/client/df83e76ff5cc15be721f0345453d92f9e8059261 create mode 100644 fuzz/corpora/client/dfa1fb3a601618161c569f70845bcb0d3e4f07d2 create mode 100644 fuzz/corpora/client/dfa305d802085fb83498e09db00f9259054f6b44 create mode 100644 fuzz/corpora/client/dfb7390a63f1a5e530d6bdd901eaaff8918e26ca create mode 100644 fuzz/corpora/client/dfc22ce5bc1d6770cd9978fd92e61dd38167d5d5 create mode 100644 fuzz/corpora/client/dfd21399443d629726cb6410ebe153749deb8cf8 create mode 100644 fuzz/corpora/client/dfd4b326d1429ba61808bb1bde9abfb917f3a965 create mode 100644 fuzz/corpora/client/dfdb322d069f7fbca5ad02bde970bef079887daf create mode 100644 fuzz/corpora/client/dfff70b259b03199b4f647dd7f5b1d29035f7eb3 create mode 100644 fuzz/corpora/client/e000930982bdee7b1ab401ca6574fea0e9995d7e create mode 100644 fuzz/corpora/client/e0238d478136e390e80eb8e9853b8310a97c22f1 create mode 100644 fuzz/corpora/client/e03b79dbcf9332762b43afde6f501ac1689c1603 create mode 100644 fuzz/corpora/client/e04496846c206b6769396bbafc2525afe4b92e96 create mode 100644 fuzz/corpora/client/e05257b64edda6d50d42eebaf4f022b262fd37ad create mode 100644 fuzz/corpora/client/e076e5138376853bc3452190bfcff29d6d316da8 create mode 100644 fuzz/corpora/client/e08e0b8add9c3aeb9b054f7ebb1b8da9a47ab7f9 create mode 100644 fuzz/corpora/client/e0ac7cbebfba3c7f960e2ed893fc6ce03db8d985 create mode 100644 fuzz/corpora/client/e0c033bca0a113302de4ca63d57d65935e2e9ff2 create mode 100644 fuzz/corpora/client/e0e960fcb557c250760d9ab44c009b46a6f12273 create mode 100644 fuzz/corpora/client/e0ef45fd1d8a90fda26b4ff089e6ebaff9027fff create mode 100644 fuzz/corpora/client/e0fbd5e07ad49937d06855ad87dc454a7f3b8806 create mode 100644 fuzz/corpora/client/e0fd1886d62c613686e763e11abc0940c6c7c492 create mode 100644 fuzz/corpora/client/e1086a7f7705d0c76e984fb33af109820737f04b create mode 100644 fuzz/corpora/client/e112fdfba6a579763daa6106c7dc115db6675f6b create mode 100644 fuzz/corpora/client/e11619f4654ad8df4c4eb288cf66c5d0fa4664fd create mode 100644 fuzz/corpora/client/e1355e755b190fb8b2e726f97c95238e71107d01 create mode 100644 fuzz/corpora/client/e14405ff915fe79f8b4b89f72979c1469123110d create mode 100644 fuzz/corpora/client/e15378c349e2be83c4492b4f6963376010724bb8 create mode 100644 fuzz/corpora/client/e15e18c458016be03f07351f0613a4d5671d050f create mode 100644 fuzz/corpora/client/e16542ec2c1ab729f711d06cd45a667566065dc5 create mode 100644 fuzz/corpora/client/e16a77cdb5684af093cb35878c32a419a958d339 create mode 100644 fuzz/corpora/client/e1729fa12b209f70fc20d70ea7056b330cbebd07 create mode 100644 fuzz/corpora/client/e18a92d0736ed319e507de97ce71ecabaf4ce264 create mode 100644 fuzz/corpora/client/e196f6f9b0fa6f8560b1349730aaef57acff754d create mode 100644 fuzz/corpora/client/e1ab17aceb5d6fe34c0ada0703f00e4977a4ffa1 create mode 100644 fuzz/corpora/client/e1b47dff17d9f1ea0919ee39d2508f97cdbedd31 create mode 100644 fuzz/corpora/client/e1ba511725da3fd6f80472a8da1c22330f25b479 create mode 100644 fuzz/corpora/client/e1c71ccf794e20c90ef306696a0dc35abbf3aece create mode 100644 fuzz/corpora/client/e1d0bd2828045923f80ca599eae320cfa1f87008 create mode 100644 fuzz/corpora/client/e1d1f0d0f1adb1b5100c6c9cc5411a3e5e3cd017 create mode 100644 fuzz/corpora/client/e1e232ca3855a10391bf98270b59b9c12e45e021 create mode 100644 fuzz/corpora/client/e1e726a5cb8d773287402e3f0698dd0886172b9a create mode 100644 fuzz/corpora/client/e1f1f0178293bb5a6cfc01116b22b8813d310c95 create mode 100644 fuzz/corpora/client/e2031640d7b02ac4390ab783055484debf5aa637 create mode 100644 fuzz/corpora/client/e20db2e02138093384776455a7c5753ea62d61e2 create mode 100644 fuzz/corpora/client/e2124a95d0204058cbf8b89432248ddd90e621c3 create mode 100644 fuzz/corpora/client/e21759e9bb3893c099cc43421cbddcaca26d1b5c create mode 100644 fuzz/corpora/client/e23dba3a1d0197a84aeaa7fcf6ac4231d30ae4c0 create mode 100644 fuzz/corpora/client/e244fd011ceeba8d82c728b757ba4701977e5083 create mode 100644 fuzz/corpora/client/e25696ebd2441abe3bcca21305846732ab4fd1d5 create mode 100644 fuzz/corpora/client/e262289fdd342f42d155b1533fa8252922d5b91d create mode 100644 fuzz/corpora/client/e26ef75d4019b1a803c8ec8741df73f777a5cb7a create mode 100644 fuzz/corpora/client/e2721dfc7a19b07bb7843ba13b65bc88cef8e3c4 create mode 100644 fuzz/corpora/client/e273f157febaecfa6227e38527c3565227c37aec create mode 100644 fuzz/corpora/client/e28110a4f3a5f7862743ede1f42c9512bf6a3cd3 create mode 100644 fuzz/corpora/client/e28eb5ff7b6729f06c922a7fba7f326eaa749d0b create mode 100644 fuzz/corpora/client/e2a69fc327c2668c2633f7256a2c32d709321993 create mode 100644 fuzz/corpora/client/e2d59198e601227c7f03b33d8cfc41199f0847cc create mode 100644 fuzz/corpora/client/e2db3b715594112fc038fdb6453040cde8bde0b7 create mode 100644 fuzz/corpora/client/e2e6c8ab0071df46e20cbb00412f747e7d05d479 create mode 100644 fuzz/corpora/client/e2f8d8d0d639e488c87aea451dcbe72cf2490324 create mode 100644 fuzz/corpora/client/e31a61084d0d062b9c41a9eb2ff4179fd556eb04 create mode 100644 fuzz/corpora/client/e31b9cef64797b8c5b178fcc59fa4253878a1614 create mode 100644 fuzz/corpora/client/e31cfe07c72ce521ab65437f234614d61a137fa4 create mode 100644 fuzz/corpora/client/e32ad351dd11067be3720b4e9d8a0bd8e8b063d3 create mode 100644 fuzz/corpora/client/e3353aa4613806fb2ca965cd351106ccdeeae9f9 create mode 100644 fuzz/corpora/client/e36a145998c410df35c47f98401909f6ca661cee create mode 100644 fuzz/corpora/client/e37b455435b4f9cf4a709d7cccf171d456f8a64d create mode 100644 fuzz/corpora/client/e37b57ed78336399d9c182d9cc6352c4efd29dd4 create mode 100644 fuzz/corpora/client/e3b9ddf1a85a763188ef546a3d0c2069b24597b5 create mode 100644 fuzz/corpora/client/e3ba2097400b2a560ed13acd23ce7630bc30cfd7 create mode 100644 fuzz/corpora/client/e3ccc14c5db1ef454f953637ddc8aa46f5c1e79b create mode 100644 fuzz/corpora/client/e3d94fd70e39b788ace0f597568eee464f0844d9 create mode 100644 fuzz/corpora/client/e3f1adbf64236ae1eec0858c6d97375d1a30adf8 create mode 100644 fuzz/corpora/client/e4081785bea9f1cab7049d6f87b02b0194c186fc create mode 100644 fuzz/corpora/client/e40a0faa7cb6e9aec4a61e8fac3c7f26768066dc create mode 100644 fuzz/corpora/client/e40bb987ebbb643360fc9794453943452a7283d3 create mode 100644 fuzz/corpora/client/e42a6d3b7bdabcc99a7701ee87bf1756af2cd6ef create mode 100644 fuzz/corpora/client/e431f23d8f94fa91453fe0b158897edd8823b38d create mode 100644 fuzz/corpora/client/e453436f0294f86a27aa66f8d522411a8cc9e0b5 create mode 100644 fuzz/corpora/client/e4607bf047f9093e558b6374abb897a9b0316701 create mode 100644 fuzz/corpora/client/e47b50b09697bc291d248b69995060d91891db1e create mode 100644 fuzz/corpora/client/e4836eea8b8971f2062f63f9fc10d8ba58f57e0c create mode 100644 fuzz/corpora/client/e48394c1adb7dd5497a29abbc75654608d4c145b create mode 100644 fuzz/corpora/client/e48f41439c316753c16e9d645b75a71a54ea16de create mode 100644 fuzz/corpora/client/e49383e68881036d1afe923f363e9dacb24be1c9 create mode 100644 fuzz/corpora/client/e493b0d0548bf327b07583e57123f2fc1c5529ad create mode 100644 fuzz/corpora/client/e4bf4bae19039079167269596fd20864714ffdc5 create mode 100644 fuzz/corpora/client/e4d0d6406acb19d4e8b1fd9d97d666677b548abc create mode 100644 fuzz/corpora/client/e4d212b46734cb29e43052cac53b868583d4b29b create mode 100644 fuzz/corpora/client/e4e65493896d447caf6ceb706cb03ddac09dab8a create mode 100644 fuzz/corpora/client/e4f74f8e1c6a6722fcb93d46a361de62dce4e492 create mode 100644 fuzz/corpora/client/e50c44459d2fa5fa0789e3b5bd3f74418b55372f create mode 100644 fuzz/corpora/client/e563247317f689d46c56c526061b5a9793a720ab create mode 100644 fuzz/corpora/client/e5663428d8f8aa1721bb9dc2935a2c0bb9f36727 create mode 100644 fuzz/corpora/client/e56b95d192f2a205d2f67a8eb1b3dd85df21d55f create mode 100644 fuzz/corpora/client/e57332036c7a19fbd5806fca3b4b9bfb6f187112 create mode 100644 fuzz/corpora/client/e57caaed1e25caca6771a425fd688e7fe2b4fcbf create mode 100644 fuzz/corpora/client/e57f6cebb1202e4986814ca57a8fca6ca43b6646 create mode 100644 fuzz/corpora/client/e5948595e51081b99ef317d7e05d11e2aa061a56 create mode 100644 fuzz/corpora/client/e5ba1dbdcc0dfc2e9142b604cf5009a61c2a3604 create mode 100644 fuzz/corpora/client/e5bd216000bda25145fa5ba4fd4b5782d4bbace6 create mode 100644 fuzz/corpora/client/e5cd306994b189c7e9e40e3151cf91ddc8cd982f create mode 100644 fuzz/corpora/client/e5ea559a5936c89bd3436ce63994686c2aa9c478 create mode 100644 fuzz/corpora/client/e5fb5c2d9dc0a479dc04594aa6630d6a1a759014 create mode 100644 fuzz/corpora/client/e6103de99b21fdf6925f5d9591958db0bb95ef97 create mode 100644 fuzz/corpora/client/e612296e99bde0a8222d5f23f2dcf4736d05e1c2 create mode 100644 fuzz/corpora/client/e61d6735a923d66c1d7960c97fcc1ba1d7992b39 create mode 100644 fuzz/corpora/client/e6374f2aa93ae466467e60732404bb2011b73335 create mode 100644 fuzz/corpora/client/e641a3cc13f4fc3e802d1c6b5d2afb7f94ba8a83 create mode 100644 fuzz/corpora/client/e642fa70e0a0a32551ec406ed8669e3154d1bcec create mode 100644 fuzz/corpora/client/e6434071aeedd5a26406719f11eb7989d7ea7a78 create mode 100644 fuzz/corpora/client/e6437e6f5d1c976e0f8cbb60d66957e843f98d42 create mode 100644 fuzz/corpora/client/e6489e7f24774c086d7e8cec52b46f494a06e82c create mode 100644 fuzz/corpora/client/e64e81087ba61c3fcc8b0c0cb1f1413eb6c595c5 create mode 100644 fuzz/corpora/client/e6521043b5807e346de0d927d91e1191a5d34972 create mode 100644 fuzz/corpora/client/e65448fa259efbf46254067dad484bf052b7b681 create mode 100644 fuzz/corpora/client/e66cf72c4f3056f3d7eec815ba30afee1ddc982e create mode 100644 fuzz/corpora/client/e6878f386ad3e8ce46f73e65bc67fd1cd46d08e2 create mode 100644 fuzz/corpora/client/e692a341bc65e0283c0bdf3f46b6941b5ae70095 create mode 100644 fuzz/corpora/client/e696fca42b2d9beeb4f5de540c0cf3a3eb676195 create mode 100644 fuzz/corpora/client/e6a40e418e526525ebdce74b4ea85e775f084842 create mode 100644 fuzz/corpora/client/e6af57a4212f7e5ff8bfb8984aea7a033a26fb57 create mode 100644 fuzz/corpora/client/e6afff093779c7fb44ec0e16b66dd3c7a0c8c3c1 create mode 100644 fuzz/corpora/client/e6b08dcc8b7dfbc8b9198644563137062cbafc0b create mode 100644 fuzz/corpora/client/e6b9685308d0f629372c2391d5f36e4db4d56d47 create mode 100644 fuzz/corpora/client/e6d5a74e2f0c9a44bbe207bb6e09e998351ed3f7 create mode 100644 fuzz/corpora/client/e6e5f4dc608696794b1ba08ac194a4c0b9efb9a5 create mode 100644 fuzz/corpora/client/e6e8fa13edbe14732f450806aebe430b06d8b634 create mode 100644 fuzz/corpora/client/e6edbcd093526e38e8fa9677bc154d064f7ec550 create mode 100644 fuzz/corpora/client/e6f693e74836f8c11948ca676930a2bad44140ed create mode 100644 fuzz/corpora/client/e702d4f0b66af49ab348db89cba3c630cc94b713 create mode 100644 fuzz/corpora/client/e70d316f302a4aef8844845bb26ceeb8df3dfe14 create mode 100644 fuzz/corpora/client/e7253e3d04993e4aa8f3bb63d728ca689344dec7 create mode 100644 fuzz/corpora/client/e727b270df680b2c84deaf15f57acce7336c2504 create mode 100644 fuzz/corpora/client/e72aa456ea4cb4eee3d6f792111d2482127a70bc create mode 100644 fuzz/corpora/client/e72dde9f9b5b3f8d7d5e388a1f71c2fc236245d2 create mode 100644 fuzz/corpora/client/e73927ac0ea07bf4d2000a041dd7bfba36373b18 create mode 100644 fuzz/corpora/client/e73eb4a9907c9cbef156e0cf92af83dc58cd29e0 create mode 100644 fuzz/corpora/client/e7401b237cdf8248575ff1309afb9710620954c4 create mode 100644 fuzz/corpora/client/e7690a41faea8c1ba8464e995a51000f24f81627 create mode 100644 fuzz/corpora/client/e76d80af9d935153febf473fbcbe94cd0e6f9edb create mode 100644 fuzz/corpora/client/e774e51df852a5078d24327835d47c52db2887a7 create mode 100644 fuzz/corpora/client/e78db27e1af286269cc8a6e178203bf947cb1700 create mode 100644 fuzz/corpora/client/e7a195790029d1afcd6369601adb141f6da119b6 create mode 100644 fuzz/corpora/client/e7b054c83d4c35cde1fe054f3658f94a779b6dd8 create mode 100644 fuzz/corpora/client/e7d8ce5e04f10c9637d7e324dbd96348543d9e39 create mode 100644 fuzz/corpora/client/e7f5e545ad2d5b02effc8742313d95ec8d04d40b create mode 100644 fuzz/corpora/client/e7f6d4a02dc0923641bba67d0966c2523e74f6d2 create mode 100644 fuzz/corpora/client/e7fee46055458b709386048e30583cb8c547aa99 create mode 100644 fuzz/corpora/client/e8257da9c6066da675861d026f87ff8f9272197c create mode 100644 fuzz/corpora/client/e83ef78f6a358e9d17247d9017fc5092f4a1a5ca create mode 100644 fuzz/corpora/client/e840d5b017f3719758db2d2e15fe575c6526d626 create mode 100644 fuzz/corpora/client/e840e4b0f81dbb354b7d95cef1405efb2a1ce441 create mode 100644 fuzz/corpora/client/e8500909ad9d5e9ed3b8022827c36cc64040c421 create mode 100644 fuzz/corpora/client/e85a36873645ebe3d7f4894b4629f27d1da25d9b create mode 100644 fuzz/corpora/client/e87fe94f8a5dd8eb368e4330e1167f6b8258f6b0 create mode 100644 fuzz/corpora/client/e880cfe26bb5c8f11ff65b23c32126dbaeaf7bfa create mode 100644 fuzz/corpora/client/e88936b630180575ddaf92b2c1a0a66d832d0a06 create mode 100644 fuzz/corpora/client/e8a78060a67eb9238df9ee29e3593014cd931510 create mode 100644 fuzz/corpora/client/e8b36129d48a550690faf04434e7f9639907ca45 create mode 100644 fuzz/corpora/client/e8d18e4306198ead98b852d1f22b90309c75d7a6 create mode 100644 fuzz/corpora/client/e8d7326581039b79d6083466c9582d8ab808afc8 create mode 100644 fuzz/corpora/client/e90bcd80f885d146cb458d977094e46b2c453bf0 create mode 100644 fuzz/corpora/client/e90d305521f638f739aba97b969c5470b5976301 create mode 100644 fuzz/corpora/client/e9194a2df7d44d3634836f3b1e27fcbc15a337dc create mode 100644 fuzz/corpora/client/e91d5fe0b77f9f79dce410dced5174f00cb27258 create mode 100644 fuzz/corpora/client/e9257ed6e7f0f7529d46bb2026d8a7c83fccda74 create mode 100644 fuzz/corpora/client/e94587a42f92915752bcfa7bdec5151b43a725b0 create mode 100644 fuzz/corpora/client/e9461b5a13c69fc308a354ed5729a7872f30158b create mode 100644 fuzz/corpora/client/e9519bbe9c21e05826ee489012cf9a5aabc8f76c create mode 100644 fuzz/corpora/client/e9524a9ba8fbcde4cc60c7cfde97e6b5b736a837 create mode 100644 fuzz/corpora/client/e965cb4226d26ea3dd2d8ce333966497c54f7870 create mode 100644 fuzz/corpora/client/e96daa90089e29c76e37affef70e4793e89397f2 create mode 100644 fuzz/corpora/client/e972fa099f6047158ef2fd72e41daeadf6c833c8 create mode 100644 fuzz/corpora/client/e9732472943d8d7d8d3d9e9f2cb133af9dfd945c create mode 100644 fuzz/corpora/client/e977f485c360eb37988ca7fbfe63932027e13711 create mode 100644 fuzz/corpora/client/e982267136876d01673f2fca8564b9067c9b4256 create mode 100644 fuzz/corpora/client/e9938774c9fc0a459bca64d1c1719150e681a162 create mode 100644 fuzz/corpora/client/e994d76ceb97ea2e841eab522a13b82715714a8a create mode 100644 fuzz/corpora/client/e9a733d203ba6e2acb596763065d7e7de9e80ec2 create mode 100644 fuzz/corpora/client/e9ad7218e9dd897a9817c2a0a70e185ffe8264f3 create mode 100644 fuzz/corpora/client/e9ade8364dc12fd5d964710ec53cedaa5eff9b53 create mode 100644 fuzz/corpora/client/e9c14c208abc09ec39dcf7d2253f52db1b50b45a create mode 100644 fuzz/corpora/client/e9d7ff4667ef2283a2754a9d5a15197bf53e0264 create mode 100644 fuzz/corpora/client/e9f791bd8bf746417df94350fe04b6688eb54f7d create mode 100644 fuzz/corpora/client/ea062510c44fa6b8666c9de2bf7454306e7f17fc create mode 100644 fuzz/corpora/client/ea0a6ca8cddd0277868a67fe1bd701589be93a44 create mode 100644 fuzz/corpora/client/ea14b8d43a6f824cd245b951c6a0035fe7b08e98 create mode 100644 fuzz/corpora/client/ea2d250ed87fe0a297ed3eeb91c5c0a615f9b444 create mode 100644 fuzz/corpora/client/ea3e89ee31ebaa2abcca9f6089329084b720a645 create mode 100644 fuzz/corpora/client/ea44bab06a69fd3bb5354572f760fe9fa0c3be0d create mode 100644 fuzz/corpora/client/ea4947273a23f65ffa2f3bb95c3ac38785a11004 create mode 100644 fuzz/corpora/client/ea4a8f8c7e561e510735903610574a841380293b create mode 100644 fuzz/corpora/client/ea558a92cde9a9ce8ca3ce35464919a948a82b69 create mode 100644 fuzz/corpora/client/ea5b16d480d85257e9d83ebdec56f44042f2ddf1 create mode 100644 fuzz/corpora/client/ea6a68a5b20fff20b921bf668d23e93aca1c7f83 create mode 100644 fuzz/corpora/client/ea899ca3567abf4051c73a928f42930faaa87685 create mode 100644 fuzz/corpora/client/ea8c9ce71548d254c2acb9c5d9af0d37ed88ad43 create mode 100644 fuzz/corpora/client/eab7d8dd057cfa16391bf52c52d81df51ae011cb create mode 100644 fuzz/corpora/client/eabb4acb7660616fbcd482f1ba4220a00339b3b8 create mode 100644 fuzz/corpora/client/eac32c2bf4f4f0600aab96b0646aa8a144f3a028 create mode 100644 fuzz/corpora/client/eae01ee48ee53fb7cf3c1ec201f7a053e1df37f5 create mode 100644 fuzz/corpora/client/eaef7f50a574e12b8f09ab64ed8a8b05ffd34316 create mode 100644 fuzz/corpora/client/eaf4e2eeb3d4c51aade4229d95677414c61699ca create mode 100644 fuzz/corpora/client/eafa8f304174c605ccef963b2a19263bdc95e107 create mode 100644 fuzz/corpora/client/eb04ea76db48856db23fa2c8da18cffd95924d6a create mode 100644 fuzz/corpora/client/eb2176ea39683e425a4121a735f0b300e8a30ef5 create mode 100644 fuzz/corpora/client/eb242072405fb28705ff140787feb1888f732c8e create mode 100644 fuzz/corpora/client/eb3ce2ad302d41df8ba692ea38b956c723b91814 create mode 100644 fuzz/corpora/client/eb3fb36f8ae39215bc673d4185f49d5e1696d727 create mode 100644 fuzz/corpora/client/eb4e73ab3de99bd17152ccfc2fd9794fa832a925 create mode 100644 fuzz/corpora/client/eb62243d5da5ac50f96d952ae81895f67a572e06 create mode 100644 fuzz/corpora/client/eb8b1362f7181e5fb536231b4882a74525248814 create mode 100644 fuzz/corpora/client/eb9fe4ab419ec64cbedb5875176f998398ec5c1e create mode 100644 fuzz/corpora/client/ebb2eb3dd38c1a7815b370203338d514aa05d7d0 create mode 100644 fuzz/corpora/client/ebcc54b00f5b8b3abee861f77312b05e6ed5afb6 create mode 100644 fuzz/corpora/client/ebd13cdf612234383364dc86329d55473f054135 create mode 100644 fuzz/corpora/client/ebd6f363c5e0598bf9c00b9ef1b3dbe9a435551f create mode 100644 fuzz/corpora/client/ebdcfc2da6dd27b4b29ea2fa7e85ccb00ed33661 create mode 100644 fuzz/corpora/client/ebe00f9876d6240fc4fe03b9e0b435fd47ef780f create mode 100644 fuzz/corpora/client/ebec479640ce8890747457fefbf9ed8ae2dc8d78 create mode 100644 fuzz/corpora/client/ebf5c9a2915b300e787b3985547b3b2f820ab3cb create mode 100644 fuzz/corpora/client/ec0b076aa5a269d1ed3b16e340213ce83ec1bc07 create mode 100644 fuzz/corpora/client/ec0ec1af8a5a3a64f299953485c3d9b562c13c23 create mode 100644 fuzz/corpora/client/ec13d81785aa38f145347530040f3e4a580f6aac create mode 100644 fuzz/corpora/client/ec1e8d72fc71a7910a61affaf5f72053e3adf320 create mode 100644 fuzz/corpora/client/ec22142cd340841f4eb371d0b3af52b8c0b01349 create mode 100644 fuzz/corpora/client/ec4184ecaf94491dd7d3b0cdc97856eacb848979 create mode 100644 fuzz/corpora/client/ec5f0c62ff7b02440488aed013c6079d7e9e63b3 create mode 100644 fuzz/corpora/client/ec921e28db562c8bf1eeb7ff13f031cc39b6d766 create mode 100644 fuzz/corpora/client/ec98880ef80bfc43e5e8cd60fd7e83d94b8467c8 create mode 100644 fuzz/corpora/client/ec9c645cc4ab3557a9dfd943e09db552768fbdc6 create mode 100644 fuzz/corpora/client/ec9eb358abe902938af2278ebc5cc56c5bb57dd3 create mode 100644 fuzz/corpora/client/ec9fcb01ee67e56b107a4b39feb9ee1283c4e850 create mode 100644 fuzz/corpora/client/eca70060bfa07a4a0ce31914dbbdd78b37e5c78d create mode 100644 fuzz/corpora/client/ecc709065e094ce057374699ac73f16d191ac7cb create mode 100644 fuzz/corpora/client/ecd2ddc1168effd45f834e3bd989dff1aa66a781 create mode 100644 fuzz/corpora/client/ecda9f3846b993fa785ee23dd2338569e4ccf66e create mode 100644 fuzz/corpora/client/ece2b7bced2b45dc55758fc8f48923bf68a0c308 create mode 100644 fuzz/corpora/client/ece4409d1cb652eba9dfbad1260fe2ef9e91d014 create mode 100644 fuzz/corpora/client/ed0d59a2630ef7350cc8e176e3c1aff0aa1ec578 create mode 100644 fuzz/corpora/client/ed13e3ad2fe23a97fc182a616ecb7ae16fe71431 create mode 100644 fuzz/corpora/client/ed16d6cfbdbd4e4fdc0a9f4e790946b0219bc4ab create mode 100644 fuzz/corpora/client/ed1be83dfd840a3beaf5841d07ef4a5fb523d0c5 create mode 100644 fuzz/corpora/client/ed2d7bc8e96e29ce59b705485c304d0df9fefe24 create mode 100644 fuzz/corpora/client/ed3a8bc6aac45f62f49e7040f5105166b1548214 create mode 100644 fuzz/corpora/client/ed435127550b2e9626ea35f59ef83b7c9a7c5ab4 create mode 100644 fuzz/corpora/client/ed4bd4e12899fef2e64ca9c3350359fb76a3f819 create mode 100644 fuzz/corpora/client/ed621209916cf0eb3072a01265ba6a6216369681 create mode 100644 fuzz/corpora/client/ed69f6c08332211ee1ec6473220e3a95723d4844 create mode 100644 fuzz/corpora/client/ed733a7438ff580c03685fda6de1777169cd06f2 create mode 100644 fuzz/corpora/client/ed7fbfb7c7730876760814bdd85cf27731d69a57 create mode 100644 fuzz/corpora/client/eda80def6d7f5a8a8c2c64fc7e23034ceaa4b1ee create mode 100644 fuzz/corpora/client/edd495edd2ff585ecb67563c8c5cacc45cd43c51 create mode 100644 fuzz/corpora/client/eddde10c3b0ce9990ece58d3a4ed14339808047a create mode 100644 fuzz/corpora/client/edfb0e34eb7711d21ab372b06b62f1b76d847e8e create mode 100644 fuzz/corpora/client/edff6feb265940a7f144f6ae9a4f669fb9db2fc6 create mode 100644 fuzz/corpora/client/ee0ade3daaa99f1df0622684eb5de21e17be14d5 create mode 100644 fuzz/corpora/client/ee0c0edf3760482bdae850da44dbd8cab1c2acc6 create mode 100644 fuzz/corpora/client/ee1053b01d2d5b5a14dd966d66c43b60640a1560 create mode 100644 fuzz/corpora/client/ee1cc7655f936f080dea8e83be61798af26e2dfb create mode 100644 fuzz/corpora/client/ee21bdf24d778c54e6ff42ae80787a8f8041bc68 create mode 100644 fuzz/corpora/client/ee26ce1aa8b17d3072621d2c10366612098cab4d create mode 100644 fuzz/corpora/client/ee2874a6f230945f1f53b42999c7c1fa42815ba5 create mode 100644 fuzz/corpora/client/ee2d5edcbd537324ab7e3aeae0d0372368512dfe create mode 100644 fuzz/corpora/client/ee344d3026e5a82b8db342bcf3f1ac68f4c94e2d create mode 100644 fuzz/corpora/client/ee6379a43070fb110bbf3ef221c8ed72737167fa create mode 100644 fuzz/corpora/client/ee67e2b1223a838949d800d455d8243217747e42 create mode 100644 fuzz/corpora/client/ee68bbb48baa4fa52e15e1718e3aec4224e69f6e create mode 100644 fuzz/corpora/client/ee6b011cb6ac36e95c17236812b4d10f0db7bf24 create mode 100644 fuzz/corpora/client/ee6b0ea715e859a60000a3a81855c49666f0fa34 create mode 100644 fuzz/corpora/client/ee7bec03b7ca52c2cbf70026fd4c91c8275242cb create mode 100644 fuzz/corpora/client/ee7e352ca24d007d133b8957053d231677649d4e create mode 100644 fuzz/corpora/client/ee8b47b438595739e1d4237ce79fa713455af773 create mode 100644 fuzz/corpora/client/ee9f46fb5a5c11b2af20429a445ed2a9c4e2e184 create mode 100644 fuzz/corpora/client/eea059282c02fcb488f559bd01d1ecdf96f9efcf create mode 100644 fuzz/corpora/client/eea080ee8a22267a0e0603fa46444af8f5421b2c create mode 100644 fuzz/corpora/client/eea7a700b0b3c7e226b35c724f2ed32834ca2d63 create mode 100644 fuzz/corpora/client/eea89ce08fa7a811d4be10dc9787bbc2d4545ed7 create mode 100644 fuzz/corpora/client/eeae0322c4265d403c3522a1e4b723f8c06cd9f5 create mode 100644 fuzz/corpora/client/eeb6dbba53244be095c825317acaade8a38b0327 create mode 100644 fuzz/corpora/client/eeba2bb5af5b04be43012751fb8d2101ba689278 create mode 100644 fuzz/corpora/client/eebe8e8dc26d3115c9a6a6128f5ddf28f5d2cde6 create mode 100644 fuzz/corpora/client/eebef5e3be5ee24088ea7083f0ed9d4ef8602f17 create mode 100644 fuzz/corpora/client/eebfe884dbf516358dcd4dadca98ef489a4484cb create mode 100644 fuzz/corpora/client/eec19cfe3f8c6b997d5d8efc71b7b6fd96d6edb4 create mode 100644 fuzz/corpora/client/eeca90b34dea0776ce79f957a5f74533d3d8e168 create mode 100644 fuzz/corpora/client/eedce82aa1c2f7deb28d7809eca7b1e8d3ae98bd create mode 100644 fuzz/corpora/client/eedd25cc30b22b8c1dec1c84f07b42528d21656b create mode 100644 fuzz/corpora/client/eee459eb1a00bf512d7b2212c7ef1fa72d0ee3e2 create mode 100644 fuzz/corpora/client/eee910abac7607783e119e481f8616c3a1d803a4 create mode 100644 fuzz/corpora/client/eeedea146f80489e4f73e7c3de9ed8f83fac6216 create mode 100644 fuzz/corpora/client/eef6eed802ee2ed0ad76bf65c5671afefe07966c create mode 100644 fuzz/corpora/client/ef0266312704bab57837b3ec861e3b3d1053aae3 create mode 100644 fuzz/corpora/client/ef0559293dcd4aaf53c1daceb616163858c6cec4 create mode 100644 fuzz/corpora/client/ef3077fe8119bc2b9109b33a1bf8128eeeaf4209 create mode 100644 fuzz/corpora/client/ef4653b6f31bafc6736494191137c49d5388fc28 create mode 100644 fuzz/corpora/client/ef5804ca311e14919700faf35b3fbc5b83c92a47 create mode 100644 fuzz/corpora/client/ef77a68b2216168c40088b7e10816ef0d2a2730b create mode 100644 fuzz/corpora/client/ef811650b9ef5034abdf008203e8ad184d4abed9 create mode 100644 fuzz/corpora/client/ef8b789da75d56fef38a1ee110cb1af71009522f create mode 100644 fuzz/corpora/client/ef97ff842dcf820a9e100bdfec73c3add39b1cfe create mode 100644 fuzz/corpora/client/efa75a4fabc866f855f839104c56de4f85033ef3 create mode 100644 fuzz/corpora/client/efa9e1900b9f10feafc8d09b9d7920bc4264f37f create mode 100644 fuzz/corpora/client/efbfc9558323a6f738b7ebc5670ac111eb5d24df create mode 100644 fuzz/corpora/client/efd702a15cf2a843645a770b407f6571d441c480 create mode 100644 fuzz/corpora/client/efd8a6e6baaece41c6578c8675e676ce5736fac2 create mode 100644 fuzz/corpora/client/efef9021d450fbfb724f2ab4b21983e83baa59c8 create mode 100644 fuzz/corpora/client/eff01b2b5d0577eab4a39e210f798e82e8208298 create mode 100644 fuzz/corpora/client/efff70b28ceac1fe5bd55224bf4075ead6452b9d create mode 100644 fuzz/corpora/client/f0107599df38487cf2371bab75a6f9c8f13de6a0 create mode 100644 fuzz/corpora/client/f015f36fb71f10b87ec91a6f81decff1bbcdedfc create mode 100644 fuzz/corpora/client/f023e55b109819ac58f4d5aacec8cb12b05fdf6b create mode 100644 fuzz/corpora/client/f03389943feb94c38f8df1c36db0197fef6570b1 create mode 100644 fuzz/corpora/client/f04e12bf15bb9e429d874512916f4bb8723df477 create mode 100644 fuzz/corpora/client/f05b00aa0643b8814f9d787e9709499ca28b60b5 create mode 100644 fuzz/corpora/client/f05c2615f31517d1d28c45a31500fe2b397dae96 create mode 100644 fuzz/corpora/client/f0713756753e8979ff0cffc13fa7c2c0710e151e create mode 100644 fuzz/corpora/client/f0744900f8c7a3d895b91418584b687beb874e9e create mode 100644 fuzz/corpora/client/f07679268187434ddda875b5a956e3dcc133be71 create mode 100644 fuzz/corpora/client/f0865d4ae99a530d1633cecd4b53f4af86284f6a create mode 100644 fuzz/corpora/client/f087ea634d617d6a602edca985714f2e1de9b532 create mode 100644 fuzz/corpora/client/f08d6328e4ea2a152f458d01d8868c10b1ea981e create mode 100644 fuzz/corpora/client/f091d40c523ca33b4ce55d13e52a50396acf85ba create mode 100644 fuzz/corpora/client/f09f999e70ab1117c803671ce8fcf6a5b325eabe create mode 100644 fuzz/corpora/client/f0a197a3ca98cbef9a07f620c13951493a9e9d8d create mode 100644 fuzz/corpora/client/f0b2259a34e605ae68f076759393c21b47709d5b create mode 100644 fuzz/corpora/client/f0b2b6bac46447c208f6a92166e2162f4dc6ec86 create mode 100644 fuzz/corpora/client/f0b62ad646a549cf4471f8bee28d2891eda24668 create mode 100644 fuzz/corpora/client/f0b651a301ce0e0f1459d11cb6ca14c22411a538 create mode 100644 fuzz/corpora/client/f0c28e2c4d1db33fa9a9f505fc1c1dc017d7304a create mode 100644 fuzz/corpora/client/f0ca6357854a6a2e2eb917c02a6c1613a63d056b create mode 100644 fuzz/corpora/client/f0d14e5e0803b9ce7f3522c3fb91a04e9f9f8d0e create mode 100644 fuzz/corpora/client/f0edf56e06312022b8630f1007caaffb4aa590cd create mode 100644 fuzz/corpora/client/f0f1596187ec44767ab8fa7b6bbea1c101faee4b create mode 100644 fuzz/corpora/client/f0fa4a419f5aeaac5dbbf698c942c6c012c45e46 create mode 100644 fuzz/corpora/client/f118269ef5ac2ade7d17b6dda78abf8c26f9f0b1 create mode 100644 fuzz/corpora/client/f1191c4d0a5f28f5555e791fc20166c7cccd4929 create mode 100644 fuzz/corpora/client/f12150eb033a8b23f060ff16df19a35022ab451b create mode 100644 fuzz/corpora/client/f130a137abca96d63b6b3b0280c355167689daaa create mode 100644 fuzz/corpora/client/f13621e514732ced2713f7fe9f1313389713e087 create mode 100644 fuzz/corpora/client/f13d326c6f1e66b8c30052f6289afe43f081bf2c create mode 100644 fuzz/corpora/client/f140d158d948426509c3716a1afb0c8be2307374 create mode 100644 fuzz/corpora/client/f1417e14d55a2330df1c50ea4c58b6d7a51f5d8a create mode 100644 fuzz/corpora/client/f14a1ad1c035b946f70f5aa07859e9300b07f8ff create mode 100644 fuzz/corpora/client/f1554c08b14e500e61816d69b5039fdb914ce52b create mode 100644 fuzz/corpora/client/f1641f25375144bf56f416662383fbfc537abde0 create mode 100644 fuzz/corpora/client/f1737f3507c8dba22aaa616d79f161f20dd986c4 create mode 100644 fuzz/corpora/client/f1902901c29ea4427ab06e2702f806f619c2e0e0 create mode 100644 fuzz/corpora/client/f193d6825ea79777e6cb1574084c2e5294849f6d create mode 100644 fuzz/corpora/client/f19b8860ccdb84f5a7fddc9b5d926cf517c77354 create mode 100644 fuzz/corpora/client/f1aa0be5c9c034c2d3a44176e459cc65f8e5badd create mode 100644 fuzz/corpora/client/f1aa48e248fa5235cda4070313a307868e6001a2 create mode 100644 fuzz/corpora/client/f1b5499f01e6e7eed91d87a48c73014e4ae124b7 create mode 100644 fuzz/corpora/client/f1be626801aac42f917925ad5a29fc80d615fbea create mode 100644 fuzz/corpora/client/f1dd07fb84d8d645ab3583e0ebd2af497eb9ba90 create mode 100644 fuzz/corpora/client/f1ea268668377f895e99408a2ff69f5831d4474f create mode 100644 fuzz/corpora/client/f20093876f6c791a2aa4762b7faeaae6eef1a8f8 create mode 100644 fuzz/corpora/client/f201ead4f01e3dfb0eb91b78799b70f6000f2b26 create mode 100644 fuzz/corpora/client/f21ff7736827c58ae765164a01b9ec25c66a2d47 create mode 100644 fuzz/corpora/client/f220387ffb3cd9a60d62f9c0ba44e4c56e3b14cb create mode 100644 fuzz/corpora/client/f229b4b6c1cf2154d2056e8be93f25e42b6c1542 create mode 100644 fuzz/corpora/client/f230c74407cfd11c16a2bb3f4a82b1d10d85480b create mode 100644 fuzz/corpora/client/f23b850460a42172679c66672fe158ba82cd8dc8 create mode 100644 fuzz/corpora/client/f240ce3d49ff623b0c46a9d503389e691bf8916e create mode 100644 fuzz/corpora/client/f263130c20c834c97af850c0c9b1db021e4b874c create mode 100644 fuzz/corpora/client/f28245b3e23991a2d49b0b024aecf9dfb4780688 create mode 100644 fuzz/corpora/client/f28f0f4a319df1edeae3502220678345c737dc53 create mode 100644 fuzz/corpora/client/f29545e523bc2386faad9773c0377b1346d5ec79 create mode 100644 fuzz/corpora/client/f2ae58605435e1cc7cfdb1870ee7df2b0b6f0740 create mode 100644 fuzz/corpora/client/f2db07b7000d4e6497f246daf8ed5715ad39842a create mode 100644 fuzz/corpora/client/f2f4c5918b3de39c9e499d4bb0585e7dc26931a2 create mode 100644 fuzz/corpora/client/f2fb2acc3e449250800315ca4d18f7ddf1df0aeb create mode 100644 fuzz/corpora/client/f3002d336a773be15eb188f6569114c29fbdcdea create mode 100644 fuzz/corpora/client/f301d1e20a8bbdee9ec358852d219ddc14f044e7 create mode 100644 fuzz/corpora/client/f305939c5f78217335c6d8e3485cec8db339d5e7 create mode 100644 fuzz/corpora/client/f308c23ca86e75ed38d3b308254a9cb220e326a1 create mode 100644 fuzz/corpora/client/f30eec20b8cb39c36be8880ad3606d6a420fef8f create mode 100644 fuzz/corpora/client/f31d05198bf6851cf1c518d90a4c04fb2a4e3f91 create mode 100644 fuzz/corpora/client/f32233cc55f539d26360ce148fc0eeb71c5d6524 create mode 100644 fuzz/corpora/client/f34336341cd9a2072f7673f2d04dd7e6806eb40a create mode 100644 fuzz/corpora/client/f34cfef97b31dd3b1a2aaf4031d1bfc5a64a2a3f create mode 100644 fuzz/corpora/client/f34d79ce59f31a1e5f4e944ba8e51bb7e718c198 create mode 100644 fuzz/corpora/client/f364eeed86b7bbbbcd6b4b11dab1d3f1fae3a6b2 create mode 100644 fuzz/corpora/client/f377baa8b6e05de4769027bde8bcf6d86b00737d create mode 100644 fuzz/corpora/client/f37e386f62d1eed069a442a84c44a5ff81f02fa0 create mode 100644 fuzz/corpora/client/f3a0838014859133825eb94010d0a514da8cecd3 create mode 100644 fuzz/corpora/client/f3a2de386db2b1414c1bdbe942248901a356009b create mode 100644 fuzz/corpora/client/f3b1074538d1be75d8326a6b1c53a2b1593266b4 create mode 100644 fuzz/corpora/client/f3b753a9e90c97e51f3be9b75913636851d16516 create mode 100644 fuzz/corpora/client/f3b957d024f75e8f8ae14a1b26871123b9ca6ce8 create mode 100644 fuzz/corpora/client/f3bd3abb1ad977f93ac157ce2364ef8c08c8af34 create mode 100644 fuzz/corpora/client/f3d40257778398a39ea94a1baaa747a4390f7e69 create mode 100644 fuzz/corpora/client/f3ed86deb28eab9bdaf42c1c22b9d8552ac339a5 create mode 100644 fuzz/corpora/client/f3ee9f2dc08acda202766e8bb2845fe1d5c00cc7 create mode 100644 fuzz/corpora/client/f3f5028886d4342953df001a70ecf46d75e971b9 create mode 100644 fuzz/corpora/client/f3f9588cc7bfe042cc1694acd625262cfbb1c74d create mode 100644 fuzz/corpora/client/f4001f01f49ee2bb493a5088892d490dafdf9f86 create mode 100644 fuzz/corpora/client/f4049a52ebd325e933e8e6f01db1f212737bdb32 create mode 100644 fuzz/corpora/client/f415e46f912b23c8fac4f853a670b1b194fbb411 create mode 100644 fuzz/corpora/client/f422274ad5cfb705db6afaa6003aa3654e04891e create mode 100644 fuzz/corpora/client/f422e9581068867d0da0b0f62bed07a77919ff1f create mode 100644 fuzz/corpora/client/f42917395040004233998ce31dabbef3af32430f create mode 100644 fuzz/corpora/client/f443c1c70c42a7921daaae1f188ce76e1071c336 create mode 100644 fuzz/corpora/client/f4450f0ee93175495cd798d0363b5edfca3c905d create mode 100644 fuzz/corpora/client/f4635cf652e228251070467512f1a886b15abf33 create mode 100644 fuzz/corpora/client/f46b75a7b9bcad88fb6201db0da6b65eb97fe02e create mode 100644 fuzz/corpora/client/f478900ffc0f022838e34862b0ce9097ddc132fe create mode 100644 fuzz/corpora/client/f48613e34b5689d4d7e90cbcc554c3fc02e745d0 create mode 100644 fuzz/corpora/client/f48e58d4e9c1a253ea668cf30ee982118a783b76 create mode 100644 fuzz/corpora/client/f4a0a626ae326bc21f761f2d27b6761c9919798f create mode 100644 fuzz/corpora/client/f4b05152185100c8dc61f08cb44430baf52e0a68 create mode 100644 fuzz/corpora/client/f4cb31ec81f272ec3d405a7af242ffdf6519d481 create mode 100644 fuzz/corpora/client/f4d8d2a1bbbe1f1690e9cb85361c72b02cb5b9b7 create mode 100644 fuzz/corpora/client/f4dc57b36ead84efe8504ed1beb3be92823d5378 create mode 100644 fuzz/corpora/client/f4f19b527373caa0cb59c0fb59c9024533221f85 create mode 100644 fuzz/corpora/client/f4f5e3591de250829cfbd3d25e7c0691f2417c18 create mode 100644 fuzz/corpora/client/f5017e9f85f126e48048fd8d6ae466235e30ee16 create mode 100644 fuzz/corpora/client/f51a04226e4ec669614125e9e6bde77c901db6ae create mode 100644 fuzz/corpora/client/f51d6ec1471839382a2ebba86bfa84fe963c4828 create mode 100644 fuzz/corpora/client/f51eb5a83bd00d8075c3eb32aa5ef78836075b0a create mode 100644 fuzz/corpora/client/f52759fdd3208b653ce1dbd280128e3f7f14fc42 create mode 100644 fuzz/corpora/client/f52f8bd6405f69d6f67ce8e3b7ff6f18c262569c create mode 100644 fuzz/corpora/client/f5374c144ae5b2f37d8a2062236afc0cd80c1f3f create mode 100644 fuzz/corpora/client/f54be25fa8abf5f3504ee54450da9dcc01f5a324 create mode 100644 fuzz/corpora/client/f56427521fb7eafd569222f01ff12fe48ef949f4 create mode 100644 fuzz/corpora/client/f566ac1ae53f8a56a8c8d617d45e894a5a5065eb create mode 100644 fuzz/corpora/client/f586c30989a7c37ad978751f1bd653216171a581 create mode 100644 fuzz/corpora/client/f5a9a6bdf9f9ef1e6b1aef4359f6255eab2528b0 create mode 100644 fuzz/corpora/client/f5b000ae8014f725442c6168f619217015c0c471 create mode 100644 fuzz/corpora/client/f5c303f43c91c8d1ccf02b5fc6f6b5de4e3b88e9 create mode 100644 fuzz/corpora/client/f5cdce3d5c8bd5b0e97e2baaac041811fb36a2c7 create mode 100644 fuzz/corpora/client/f5d9d1597f726d0d7ccb56b1dd3ecbea33eb610f create mode 100644 fuzz/corpora/client/f5e2eeddfbfa8202bd720b0214d52434ca55c383 create mode 100644 fuzz/corpora/client/f615ff52451d1144a8b0f50dd32afcd7d472942d create mode 100644 fuzz/corpora/client/f618f11263022ca5a5fbd4f3cee72193cecc95df create mode 100644 fuzz/corpora/client/f634be311537ab50d3a0d0d76c18de4ba093adad create mode 100644 fuzz/corpora/client/f67baa73453f0bc63ba545f49759ded5e5da4a2b create mode 100644 fuzz/corpora/client/f67d0d076d587c944c214460df4fe48144342665 create mode 100644 fuzz/corpora/client/f6874407826d270ac853a861b955d2388451b80f create mode 100644 fuzz/corpora/client/f687ef776bf70894bab33644651fbbcc4b4c220f create mode 100644 fuzz/corpora/client/f697be7db32c71276cd4213bf7eb010e21ded596 create mode 100644 fuzz/corpora/client/f698094c1650f680084b3f69bd9c0ebe5df2af3d create mode 100644 fuzz/corpora/client/f6a497537f8348a8977a5e01a7d513ad330a1d37 create mode 100644 fuzz/corpora/client/f6ad7c95b2df93146e633178365d948352a75906 create mode 100644 fuzz/corpora/client/f6d72da11dd9477d4f8e5d5ab041f88a906f7343 create mode 100644 fuzz/corpora/client/f6e07d0b9c53a57884e1aac240834fc2d2b25fd1 create mode 100644 fuzz/corpora/client/f6fc8401ab15671e0c2f05efe4f7acaa452eec96 create mode 100644 fuzz/corpora/client/f6fdf2fafa181ab10d3bc91ebb4fddc94812821c create mode 100644 fuzz/corpora/client/f6ff5c25bc58477910eafed36e41c207a438ec8d create mode 100644 fuzz/corpora/client/f7012c67709c8eafff970e14055730639de5212b create mode 100644 fuzz/corpora/client/f701750ec910fba7cb6800988437689ccb2e8e9a create mode 100644 fuzz/corpora/client/f704e3d2c60ea0c50fe23d881b5049eedbe0e0f8 create mode 100644 fuzz/corpora/client/f71141275801402835adc2a50bd86cad3c2304e3 create mode 100644 fuzz/corpora/client/f719b4a09a48983962a52e58606301566d066c48 create mode 100644 fuzz/corpora/client/f71d98f0761d6cb4d508be6092e8e02f9c217143 create mode 100644 fuzz/corpora/client/f71f611d543d5d114368555e2df2f1316d0bfc5b create mode 100644 fuzz/corpora/client/f72ae98c40a28d420191286b7df59b9258aeca1b create mode 100644 fuzz/corpora/client/f732e6a54e3503941b141db6a7277ec6295f4025 create mode 100644 fuzz/corpora/client/f73864f2ccb78ef500116cce77677721e9d70cf8 create mode 100644 fuzz/corpora/client/f73f9b9a8722808c4cd4cb3e37b6c6de716d46f2 create mode 100644 fuzz/corpora/client/f74724ebce461e3fd1cb673a00c6846fa196a28d create mode 100644 fuzz/corpora/client/f74be25a1b9255a86dc546381bc13cf22b75a3bf create mode 100644 fuzz/corpora/client/f7569e11ffd9c587a9564b6a0b91b85e36e8bc1f create mode 100644 fuzz/corpora/client/f760b7646da5830da9e87713e716a27cb8d5cd58 create mode 100644 fuzz/corpora/client/f77ab14a11e1ac9a25ab8295efd15df24fa39f78 create mode 100644 fuzz/corpora/client/f7bfe305c8f5f2e48fb45c55fd2255e583debf6c create mode 100644 fuzz/corpora/client/f7c1758053225329cc5c7e7cd830580342220fe6 create mode 100644 fuzz/corpora/client/f7c306a87b621a733d73fc5fe3150e551683d933 create mode 100644 fuzz/corpora/client/f7cf49564f7896e839238103a324714617369fe4 create mode 100644 fuzz/corpora/client/f7cfd61d1bd8bbdebeaa3a49c24151c552a3a8c9 create mode 100644 fuzz/corpora/client/f7d7a48bf8e7f6c464d55df5349de5030d72bbde create mode 100644 fuzz/corpora/client/f7dba7a373eacfaee5b5cdceb719fe6fc0ca55f8 create mode 100644 fuzz/corpora/client/f7ebd0284375a373bceab0fd39e2f3dcd8a9fd16 create mode 100644 fuzz/corpora/client/f7f92954e041d85aa6ef4991cec0f7959ca7ab89 create mode 100644 fuzz/corpora/client/f80f88e8e72fadb5fb611db7cbfd3c03db1c4fe5 create mode 100644 fuzz/corpora/client/f82a37ce1904da873406ebf050d4e16691b26abb create mode 100644 fuzz/corpora/client/f830eeb92430c779f440e9bf4e21607273467963 create mode 100644 fuzz/corpora/client/f834d8528d5dd5e1b71119a028d08ffdcfe7b461 create mode 100644 fuzz/corpora/client/f847c0d29ab73fca9954c3b95090dcc799b0c59d create mode 100644 fuzz/corpora/client/f8568c3fd4b1f6461bfcba12bc5aac3104153af9 create mode 100644 fuzz/corpora/client/f858fb689858a07976ac8539ecc56bfb2a3db733 create mode 100644 fuzz/corpora/client/f872098360ec18c54461e3dae13ef768c163b2a0 create mode 100644 fuzz/corpora/client/f8883e8ad1ad5c98763297c8a5840835b5e4a3eb create mode 100644 fuzz/corpora/client/f88a6aabd758bc0d3ee0dc7bd77a9b373dfe210e create mode 100644 fuzz/corpora/client/f8913a2628f5052a3cf24b1d5ccfecb553f9ca35 create mode 100644 fuzz/corpora/client/f89806de862c8348a0a87dd1786556d1895eed60 create mode 100644 fuzz/corpora/client/f89f091e47f83dd391254b4d574322e03e2f3754 create mode 100644 fuzz/corpora/client/f8af876845928653bd38772a1df33b852ea0eb0b create mode 100644 fuzz/corpora/client/f8b68cfcd08e43f6332a5690fa6536cf59dd3a80 create mode 100644 fuzz/corpora/client/f8d2f2c0494af902b9a7f0e1f1e118dd0f03dfb5 create mode 100644 fuzz/corpora/client/f8d79cc896a97de0b8095e9f8121313edd462164 create mode 100644 fuzz/corpora/client/f8db68ccbf8d7dd57ce884c81d6e2344eda30c58 create mode 100644 fuzz/corpora/client/f8ece340d1e3343de2c8bcbc294122201f00c8d6 create mode 100644 fuzz/corpora/client/f8f3a0409724a7770ec447488465cf54e856be96 create mode 100644 fuzz/corpora/client/f8ff0a7a2604e35d59a6f1db0b5103caf5b41b0d create mode 100644 fuzz/corpora/client/f9007e156a9a8624eaf904a1b30539067f3187fb create mode 100644 fuzz/corpora/client/f901051668cc49a6978b5ec5ca459b6931981482 create mode 100644 fuzz/corpora/client/f91444bb1d7c127e2a459a5b2580e025e7d5fecc create mode 100644 fuzz/corpora/client/f92e196787634a16a52fa720f65d0eea7878995c create mode 100644 fuzz/corpora/client/f94ee87d50ba4f311c5818741bbd17688e31af9d create mode 100644 fuzz/corpora/client/f9616d41703104a35ccc75c6389f2e63a68ce62c create mode 100644 fuzz/corpora/client/f97e4858d4e42fcba3b93dddb5c0b8c7c2d92924 create mode 100644 fuzz/corpora/client/f9913c0375d1c18e8e9fed74c56f0113135fa535 create mode 100644 fuzz/corpora/client/f9b111573b7fadd039c2e1f30aaac4e554d5e5b1 create mode 100644 fuzz/corpora/client/f9b424f15c2142d2d36d7ffb03bd3256ba0059fb create mode 100644 fuzz/corpora/client/f9b85f40450e91e1e07648b7aab0f09b18cee6f5 create mode 100644 fuzz/corpora/client/f9bb6e1ed5765768b595439fd1436ce29e465a96 create mode 100644 fuzz/corpora/client/f9c4a2c4b28570c4600d19781d69799963a96442 create mode 100644 fuzz/corpora/client/f9cca99b628f98f5c6dbd6fcae0def16da616567 create mode 100644 fuzz/corpora/client/f9cfe1094c3a3557c65a44e7d5165147df89ac69 create mode 100644 fuzz/corpora/client/f9d62afb74b6fe7e0ff213cbf204bba62ef8d622 create mode 100644 fuzz/corpora/client/f9e33ac0fc71c1fd8c2c2b3de644dbe6721dd21a create mode 100644 fuzz/corpora/client/f9f7e2ffdbe014c70b686dd5f5cbbb87ae09553e create mode 100644 fuzz/corpora/client/fa0fccd4f22cb7cc7e06ed47333908ae5b502ba4 create mode 100644 fuzz/corpora/client/fa11ff23a7eea69b8e38615a208b2b56ef07d035 create mode 100644 fuzz/corpora/client/fa1d50b70ccf6e4dc0367b4ac397c044b13ea008 create mode 100644 fuzz/corpora/client/fa1ebb07bce5da7d7c2e22a8b5aa0bfe0da3e165 create mode 100644 fuzz/corpora/client/fa250c4470e110f9b75f341a621e866c5ca5f410 create mode 100644 fuzz/corpora/client/fa3083b5a70527d6c66ae3841231f0209992ffec create mode 100644 fuzz/corpora/client/fa5259c2694319639f2c78105209d088a738ae90 create mode 100644 fuzz/corpora/client/fa64a9c8bc68cb3f40f02117249c55549fff3ab1 create mode 100644 fuzz/corpora/client/fa65a95724feb9b6b8ab44ca7566654799da5928 create mode 100644 fuzz/corpora/client/fa758996910839483403f63ea810b98c0bcb0057 create mode 100644 fuzz/corpora/client/fa9371fda3a6adbaa3426aa08b3d6f6cab6eb752 create mode 100644 fuzz/corpora/client/faa31f8c930e2839cf4a56b569e8de166afb2a21 create mode 100644 fuzz/corpora/client/faa560662413d78b385c55a5658817847401532d create mode 100644 fuzz/corpora/client/faaf9ab6bbf5ec4e0673cfc5c79003907bb8e74e create mode 100644 fuzz/corpora/client/fab5883c2233634801746740c0e6e44091aeb354 create mode 100644 fuzz/corpora/client/fabc17d2c0b2970db434ce6bcf112069be39e8c4 create mode 100644 fuzz/corpora/client/fae3e5fbd46c48622d3da77b4b764a4cf86c1e16 create mode 100644 fuzz/corpora/client/fae52976759527bbf14372155c91a6738181bb87 create mode 100644 fuzz/corpora/client/fb09f67d92ee2f0217fc3bafabc8c9755449d90d create mode 100644 fuzz/corpora/client/fb1623cb512ae80063f54b52b540a5725d918e49 create mode 100644 fuzz/corpora/client/fb19955e725f2a709d71e871cd5f821a01f44935 create mode 100644 fuzz/corpora/client/fb210179ed693503155f05ec10f20d50430b1f35 create mode 100644 fuzz/corpora/client/fb2b15413a81c0df00b8b9f6b18c9745a46d886a create mode 100644 fuzz/corpora/client/fb304060227156c16e9b7e466fb9163dd4868d2e create mode 100644 fuzz/corpora/client/fb3e7bdc5eeb0f144647ad845c8ca20727bfa903 create mode 100644 fuzz/corpora/client/fb5f4937f51ab63c9dccfa1b5ed4b06b30f95252 create mode 100644 fuzz/corpora/client/fb68d2bae9ef565b5e743b8131532c80d0f2833f create mode 100644 fuzz/corpora/client/fb77c350e47c3189e70c400fec18fe91e235a9a0 create mode 100644 fuzz/corpora/client/fb87b12e695c532cd55e3c4244246e85301a2970 create mode 100644 fuzz/corpora/client/fb99a0a81680fb1916fa8747289c3ba6446004d3 create mode 100644 fuzz/corpora/client/fba681f695d7a533f83bc3776f13819e8c8ebb2e create mode 100644 fuzz/corpora/client/fba7d5e6a3970263f7264115f35387422237ca9d create mode 100644 fuzz/corpora/client/fbaa560e627cb86faa1174d3b9fc1ec0e540630f create mode 100644 fuzz/corpora/client/fbaee1622d25252566dcf4ae6c6a9b85625b4c73 create mode 100644 fuzz/corpora/client/fbcabe25571ac81b24a1dbb8f79f44929f1dfadd create mode 100644 fuzz/corpora/client/fc0d2252684ed420a6219f55e86bf930665bd31b create mode 100644 fuzz/corpora/client/fc1d3fe79a47b41ae3b93a23050f6f19671b4ae8 create mode 100644 fuzz/corpora/client/fc2301e54a589953223b8a1f470a4cf6d6dcd1f7 create mode 100644 fuzz/corpora/client/fc243c2b1740e6a4fa2e6f4eb5ec4eeeb6da651e create mode 100644 fuzz/corpora/client/fc410188056f1350b3388579fdf2710d60e4849a create mode 100644 fuzz/corpora/client/fc589691e87778226142ced624414cd314898682 create mode 100644 fuzz/corpora/client/fc7704f0f0c5bb5cea66b8c01588a6623c4d4456 create mode 100644 fuzz/corpora/client/fc7b6eff75b73664c31c5d2fa9b9a5babd71c057 create mode 100644 fuzz/corpora/client/fc7d85bf491f160c52cb75b22ae6856baf6d2175 create mode 100644 fuzz/corpora/client/fc899d9b2b6a425340f63371268a7b2d219e39cf create mode 100644 fuzz/corpora/client/fc93fa7d78b2d8d1a524f463ef02926fb01d408b create mode 100644 fuzz/corpora/client/fcbcab0eff0ddf8770e40c6a303c7dba383bf895 create mode 100644 fuzz/corpora/client/fcc949b64b324a54c9a9fb2a358ac91811e3eeed create mode 100644 fuzz/corpora/client/fcd332210f0f121659aaeb3f6dd7f46d22ed002d create mode 100644 fuzz/corpora/client/fcd3ce3e4c74c52ebc1dd609608764ac071ccda5 create mode 100644 fuzz/corpora/client/fce613ce70f5260fa98469edd765ddc3569a51d8 create mode 100644 fuzz/corpora/client/fce6de601d8be53447561a02f2d86841b0280f56 create mode 100644 fuzz/corpora/client/fce9a4aec5d4824f5120a5faa73e02fe5e267998 create mode 100644 fuzz/corpora/client/fcf6a4cb40e79a9ea659dc359a29afc4ff0d4a65 create mode 100644 fuzz/corpora/client/fd07f6390e84bb905359b0122770f7d9a8c1725d create mode 100644 fuzz/corpora/client/fd171917657c76a3a63ae814f1569725d464ffd8 create mode 100644 fuzz/corpora/client/fd17f806be35cb37b6ee1b8fa0f6328244348697 create mode 100644 fuzz/corpora/client/fd1e13e506375426db14e22a5dd119ebc5123c93 create mode 100644 fuzz/corpora/client/fd2829de9c832cb4617a26ce73d18e7719d9e4c4 create mode 100644 fuzz/corpora/client/fd29350e21c0b49c5e7489d8a703c285d64b511c create mode 100644 fuzz/corpora/client/fd33cd7471169d087b66dc0543bee1f0686b7eb2 create mode 100644 fuzz/corpora/client/fd395eb468f3e16c71e959949fed72d539aeb866 create mode 100644 fuzz/corpora/client/fd4e7dad8777ae494373121700966c098d66d02b create mode 100644 fuzz/corpora/client/fd60f96d93f2b784c28c0aeae61cb4168a6857d7 create mode 100644 fuzz/corpora/client/fd6ca1f09095256f89fb3674f124c51eff6246d1 create mode 100644 fuzz/corpora/client/fd750454095f1b5ae0601d9cdb289175ac95c32c create mode 100644 fuzz/corpora/client/fd7a647e85b1e943b8fd15e3fca90de07dd6e394 create mode 100644 fuzz/corpora/client/fd8950f6b527b9d26157a388084a6ddd2d54fb3a create mode 100644 fuzz/corpora/client/fd8b1c12e9d8043cfdf7f6d6544ec3e3df2fe738 create mode 100644 fuzz/corpora/client/fd90c3cc70b71e7d9868e3f2a53af0ae95cc23ff create mode 100644 fuzz/corpora/client/fd97f7db07ce2adcf1e74f092f1fd98d289eaeb9 create mode 100644 fuzz/corpora/client/fd9deccc50fc9924f90fc1926ed775ccfea47402 create mode 100644 fuzz/corpora/client/fd9ff7db8143c70f677ea540bfb118223f4a4140 create mode 100644 fuzz/corpora/client/fdace8c003cd52665a8413769c059bb2d55d96fc create mode 100644 fuzz/corpora/client/fdacee643bf370226851c7718348c7ef101f42e6 create mode 100644 fuzz/corpora/client/fdbd6d1cceec3cd955b055cf33011316c60e084f create mode 100644 fuzz/corpora/client/fdd5b1bc169f326113262b62384879102437e1aa create mode 100644 fuzz/corpora/client/fdd9258b242aa44c29f4dc537ea965dd4d3f3f1e create mode 100644 fuzz/corpora/client/fde9f972b295e117411eb8c3cad44a159747c106 create mode 100644 fuzz/corpora/client/fe0bfcb711ec75fc5ffd01bfc120c68f83351de1 create mode 100644 fuzz/corpora/client/fe1037aae35ab857b5a5832365b4098ef8e2af5a create mode 100644 fuzz/corpora/client/fe1fbff8e51faa6c496b9e1718a9087b5f2dba01 create mode 100644 fuzz/corpora/client/fe468b64995291c78bc9ffe6dc5276d88f851771 create mode 100644 fuzz/corpora/client/fe4973608bc4038cf56863b6e1e38a69c934b6af create mode 100644 fuzz/corpora/client/fe4f4ff04621130601ce5e7de79de5c082d826a4 create mode 100644 fuzz/corpora/client/fe6985c79cd6389a068e2dcce2238b19b8a5af90 create mode 100644 fuzz/corpora/client/fe6e9f5f24159b11d9de310b3beecb0663ded3c2 create mode 100644 fuzz/corpora/client/fe738bd688e1a5bc89192e0412cbaaa2f59243e9 create mode 100644 fuzz/corpora/client/feb5e78bc6c06430b982f7e5b67338cdcaf055f2 create mode 100644 fuzz/corpora/client/febf886841aeab938c01ba51777ba7ca6be385ed create mode 100644 fuzz/corpora/client/fec5ad2cc112c7785e324406c792d0bdbf0e4a62 create mode 100644 fuzz/corpora/client/fed85662c4e7f66e1986cc2925e56599cc1b6b2f create mode 100644 fuzz/corpora/client/fed8f6c6ee90ceaac783cb6eca206fe0d4f00f4e create mode 100644 fuzz/corpora/client/fefe06bcafc63ab681c59417c7682985f2a9bee8 create mode 100644 fuzz/corpora/client/ff0236e5f1751b6e59d792dac5695d3ba990e1a2 create mode 100644 fuzz/corpora/client/ff04e8be235f13d5374780a781d2925ffe083494 create mode 100644 fuzz/corpora/client/ff0cb7378d76abf9bb144cb16202ffa24d0087ae create mode 100644 fuzz/corpora/client/ff112a574caf52f882781ca43a33f2931ee76c36 create mode 100644 fuzz/corpora/client/ff18a76a52a996c989faf3ca94cc201ab563805f create mode 100644 fuzz/corpora/client/ff21d870d0c766261a53a53c29409f547bcd4a5b create mode 100644 fuzz/corpora/client/ff2d95b3f2757ef0ccaf35351d26645db40ece4d create mode 100644 fuzz/corpora/client/ff2f79167e0f5410aa158efb73e824e41a33cfb6 create mode 100644 fuzz/corpora/client/ff320df7fdb4535c71b718b5c10e81e99bd26a75 create mode 100644 fuzz/corpora/client/ff3c5ef9bceb3c162349298fe285e9598bf8f321 create mode 100644 fuzz/corpora/client/ff5748211317826d8266c69cd74da0fb816e64ca create mode 100644 fuzz/corpora/client/ff5e6830bb23997bc46f3592ad9e524b083fe8f4 create mode 100644 fuzz/corpora/client/ff9ca2f27197ce76e029152abeb161bc11317aa3 create mode 100644 fuzz/corpora/client/ffa96e44996149dd0134b3c00b0b42fa96ca8904 create mode 100644 fuzz/corpora/client/ffb304bc52b1bca1c5a9e61a494ebc80cd0eb826 create mode 100644 fuzz/corpora/client/ffb833577289118e86817514bb6abbbec30d85d9 create mode 100644 fuzz/corpora/client/ffc5c85355620d69e4b8e0db3fb4d02870ef7bf8 create mode 100644 fuzz/corpora/client/ffc8bf8d6f2ea10b953afc168f7a94d4a83bde75 create mode 100644 fuzz/corpora/client/ffcdd90ff6b45992bb955e38fef9f5d492f9b089 create mode 100644 fuzz/corpora/client/ffe4e39720db8b83f968516bb399d9c6ac49d6fc create mode 100644 fuzz/corpora/client/ffeb5c728b04212b25025b0a9e2c8c98bc507f0e create mode 100644 fuzz/corpora/client/ffed17147e7577c3abb496c0adbda06aeda44be3 create mode 100644 fuzz/corpora/client/fff395d5adf7537b32fd7a3def2dc2962e98c799 create mode 100644 fuzz/corpora/client/fff71e810ab002b1e1e71c52887f8671ec7b9b8c create mode 100644 fuzz/corpora/client/fff8dc6656a461cd921bd392d886082331d9858e create mode 100644 fuzz/corpora/cms/001beffc3fb6c3e1877775e930e1b8e17e18ef14 create mode 100644 fuzz/corpora/cms/00622039b24004ceb1545a1d9d0116769631d2c9 create mode 100644 fuzz/corpora/cms/00cdb65c6a6417f5fc947b2650ba8e95fc969be8 create mode 100644 fuzz/corpora/cms/013dba879a26e4daee6b9137815e1bbd248d26c4 create mode 100644 fuzz/corpora/cms/01904c59697c7d0854d8a71032235018a6b74ca0 create mode 100644 fuzz/corpora/cms/01c812fbd0f70f41f3243c3b5539bce9a50b99f1 create mode 100644 fuzz/corpora/cms/021e0964211eafa136a32bcce5ba7d8a24149837 create mode 100644 fuzz/corpora/cms/02291a2dc906655b50167de9b882b5a178f5a5bd create mode 100644 fuzz/corpora/cms/0230febb82e4056d43bda1de624a7a8a3500bc0e create mode 100644 fuzz/corpora/cms/0293fa7e5140c9dbf0970c87a0fea9eb2fb120ee create mode 100644 fuzz/corpora/cms/02a15974e36a0240469158dde302d4d5a0432851 create mode 100644 fuzz/corpora/cms/02b0919024f59928da3b81f4b822a3e49794f27c create mode 100644 fuzz/corpora/cms/032960f280e11d43ac5df741172fb5ccdefac3db create mode 100644 fuzz/corpora/cms/033767ef4ae46f2a5b6acd4c1a2b2321dd660af4 create mode 100644 fuzz/corpora/cms/03765513d586d649f42b75a99a41b9509b5a674a create mode 100644 fuzz/corpora/cms/03794cba79a2fc0befe8c7243f869648513e83bd create mode 100644 fuzz/corpora/cms/03b1d3bf478acba1b933f3561c7f64837b5b3462 create mode 100644 fuzz/corpora/cms/042832de53a975d07971c736edf10d97237b2505 create mode 100644 fuzz/corpora/cms/048f285869a41f3b06d988dac2bf8b249de84de5 create mode 100644 fuzz/corpora/cms/04d116435eb2db2f6f24160e589410e244bfa4ec create mode 100644 fuzz/corpora/cms/04e317b558fb1834b4793e2866f4ddd8824fb020 create mode 100644 fuzz/corpora/cms/054987f9595267dbf281a28a898adcbb41511d77 create mode 100644 fuzz/corpora/cms/05525a91697b032367304c01e8f17d0a0b36c905 create mode 100644 fuzz/corpora/cms/0566d87c39586f6ab103c5b3c158b02b9409a970 create mode 100644 fuzz/corpora/cms/05bb9614bdb67b55efa267a96156319e8273968b create mode 100644 fuzz/corpora/cms/05bbb6d8e366926f0c7f510d34731a0ce33ef9b2 create mode 100644 fuzz/corpora/cms/05d185adeb8972dcd8ca8e0bb7946a0544409351 create mode 100644 fuzz/corpora/cms/06560f919f98f6de3f34fd861fcbb693a080611b create mode 100644 fuzz/corpora/cms/06e2ed3bd9c5097f55fc535b81c1bc721a799e22 create mode 100644 fuzz/corpora/cms/0708627aa2f9f511fe5fc4527bd415f7bfb3ce84 create mode 100644 fuzz/corpora/cms/0727c87b7f4a242fa3452ff174b271aa38c84104 create mode 100644 fuzz/corpora/cms/075a5cde866bce058b73f460a90428d64edab624 create mode 100644 fuzz/corpora/cms/0787d96aa7200efcb3a560b0ab572001d0bcfef2 create mode 100644 fuzz/corpora/cms/0796ad3fbf779ad69b3362abb65b112c8f819793 create mode 100644 fuzz/corpora/cms/079bfaa770e4408d2524000ae6ab037170886c09 create mode 100644 fuzz/corpora/cms/07aaa8229709010848839584f1013fcbf6cabfca create mode 100644 fuzz/corpora/cms/080cc63fc946a1a40e8fda309e679f0ea9e852e7 create mode 100644 fuzz/corpora/cms/082d1b028896eb32408f273c17efc64659972bdc create mode 100644 fuzz/corpora/cms/08796ff442cbb8f6417f0cdc3a2de6391111587f create mode 100644 fuzz/corpora/cms/0888c844426151fe611efbebd3c752719edef45d create mode 100644 fuzz/corpora/cms/0889f82118a1e26482eed51aa55aa44c43377d33 create mode 100644 fuzz/corpora/cms/0890d6b941c9ebdde72f23cbca17409d2e6a5ed2 create mode 100644 fuzz/corpora/cms/08966c7d43e71572caaf36255480b635ab8e0976 create mode 100644 fuzz/corpora/cms/0898a1ae7932442c6c45ebce859be0bfa19ba776 create mode 100644 fuzz/corpora/cms/090812b212cfcfa8edef912291071ac8b8514e8c create mode 100644 fuzz/corpora/cms/09b631cf12e38fadaba939941904362454a74d46 create mode 100644 fuzz/corpora/cms/0a1f7f9e37d1d6ea49794156df2eb83b488f08ac create mode 100644 fuzz/corpora/cms/0a8097ce4ee240d45eb02f6c47f8f5853b9dffc2 create mode 100644 fuzz/corpora/cms/0a9d1614b7b8a2f2fb5e90cfe14dec70165bfaac create mode 100644 fuzz/corpora/cms/0ab6c7621c517389bf715f6648283ede99b839ed create mode 100644 fuzz/corpora/cms/0af90ed43854b2420e7d523f292162fa8c92a6d2 create mode 100644 fuzz/corpora/cms/0c21ab6e54741eb7b932999b4ac8134b397498d2 create mode 100644 fuzz/corpora/cms/0c5125c8976cea697d02fafbfd152084c8bd7d56 create mode 100644 fuzz/corpora/cms/0c69003327907005753fb374e20cbb6a4e39b159 create mode 100644 fuzz/corpora/cms/0cabf477985edd7b23d47b8c33078d239db6ce9f create mode 100644 fuzz/corpora/cms/0cb68771c2283b504d49e2bb55e1967fabf6ec53 create mode 100644 fuzz/corpora/cms/0d3b7ef70023bf4274f770c0f19cff4030803f88 create mode 100644 fuzz/corpora/cms/0da2a74e30e730e21082e97aa96cf02283317bf8 create mode 100644 fuzz/corpora/cms/0db565020fc6f018bb3aaee172b3c83937db0584 create mode 100644 fuzz/corpora/cms/0dc96d7f9cca01dbef6b2c0e3c52fe7aaf75886d create mode 100644 fuzz/corpora/cms/0ddb4d5ded4c611306636634e4576327d9bced64 create mode 100644 fuzz/corpora/cms/0de18567af0407af52b60b9c39a5882c4e572740 create mode 100644 fuzz/corpora/cms/0de34e7edf360fa9439352c164753d383241d6d4 create mode 100644 fuzz/corpora/cms/0e02f849a0f299352bc24141556a899c84c6daf7 create mode 100644 fuzz/corpora/cms/0ea9697f151b2cc738c5a3c7a01a1b9ceb3a8240 create mode 100644 fuzz/corpora/cms/0ec65f22a20f00cb8e20af4426dab0796d67553e create mode 100644 fuzz/corpora/cms/0f3ba96ade293d0eae3bcbd38cabb4cd0fb7f1d5 create mode 100644 fuzz/corpora/cms/0ffb9dfcaa9cdf076034a0a6d61e8ffce9ced4cc create mode 100644 fuzz/corpora/cms/1015a495335afd1330ff48aee0da1ee8067145dd create mode 100644 fuzz/corpora/cms/108195e6472ce06a2df71cfc8d444851fa8516dc create mode 100644 fuzz/corpora/cms/10f6c4f669af8c3148d65b175fff64fbcdab1088 create mode 100644 fuzz/corpora/cms/11034936fcba6a28b997a3858725392e34d913f6 create mode 100644 fuzz/corpora/cms/118e014e886cf6e512f9358b9f67893a4832c601 create mode 100644 fuzz/corpora/cms/11c2ebb2e8262e7d3c72e62c1e0dc146b0e1ddaa create mode 100644 fuzz/corpora/cms/11f62af56656e528c7e83b9cb4bd64ea6f6d4b23 create mode 100644 fuzz/corpora/cms/120536f0561e728fd65a036ad657f9496c3422d1 create mode 100644 fuzz/corpora/cms/125e98fe983dbd8782eb0b4801fe8f91f4e0b124 create mode 100644 fuzz/corpora/cms/128c7f5de9b74785e8e5291ff0ba833404abaabb create mode 100644 fuzz/corpora/cms/12bd1df41dcbbc21789574402313dc8e0fc1ae4b create mode 100644 fuzz/corpora/cms/14186ccf256dad8d9eee4db3db22dd90d116b58c create mode 100644 fuzz/corpora/cms/1497a3ffe37037ff3f2a428abf2fb88634ad40d2 create mode 100644 fuzz/corpora/cms/14aab7431ec2e20cbe0f8b3adeb2b998e5ec4382 create mode 100644 fuzz/corpora/cms/14d6dc947865c998153b63c371c6e4a15eb69670 create mode 100644 fuzz/corpora/cms/14e5ef991aa7fcf93cf97657dd43fbdc730723f6 create mode 100644 fuzz/corpora/cms/150a88b584e7ff169ee2c4217d5efe230b23fe12 create mode 100644 fuzz/corpora/cms/157af6587a8da75c58093e54abd374889613780b create mode 100644 fuzz/corpora/cms/157c4543af657b339d59d38c444dcf877a15dc95 create mode 100644 fuzz/corpora/cms/15bc10a2f9e651c055f55c4c8a62150c7d111f29 create mode 100644 fuzz/corpora/cms/16629e075240584bb293adba3afd7e93d16ca5ec create mode 100644 fuzz/corpora/cms/1685ab48a811d09825953ee9318c099c726de558 create mode 100644 fuzz/corpora/cms/16d07445c1ebc5f1544e8ea614c3f099be941455 create mode 100644 fuzz/corpora/cms/1818179cc2bfa8f67e8027827aaac7a67ed9e56d create mode 100644 fuzz/corpora/cms/1822fe7c7655fd5f0bd90f2162f1db0b01255f08 create mode 100644 fuzz/corpora/cms/182fea3d4b2afc1f630c6eb11e6be7f7e970cc9b create mode 100644 fuzz/corpora/cms/1832b62ffcea0a98492833159b9241311ff98bfd create mode 100644 fuzz/corpora/cms/18d09ec2aa72fa58e96f64536027b8887c9a308a create mode 100644 fuzz/corpora/cms/192854c98179b2430a96293eedd1c11dd91b20e6 create mode 100644 fuzz/corpora/cms/19784a30e4b25e34eb373516d35a1c7c5a09d3b9 create mode 100644 fuzz/corpora/cms/19afd9d15f7e89e1af7127371477ed3d88e744e0 create mode 100644 fuzz/corpora/cms/19b29027c5f4e1393b0a6e9cc178bb95bea36727 create mode 100644 fuzz/corpora/cms/19f0d4bbf188120e34733c21ba29563325b95ad2 create mode 100644 fuzz/corpora/cms/1a0a76d9c96c48a892c77b534d81e8cc4737e47b create mode 100644 fuzz/corpora/cms/1a9d449d1ac38d3236f510e8b10c0917452e7099 create mode 100644 fuzz/corpora/cms/1adbcacb11c34436cc94c99fa9f78ffbf2810642 create mode 100644 fuzz/corpora/cms/1b14a49bb86f07e5274259dc736c5d8bf95b56bb create mode 100644 fuzz/corpora/cms/1b20c4e42e81aa788d7bd0cc2bf911a8ff9cc771 create mode 100644 fuzz/corpora/cms/1b5a96882a84612a50c58e34982168b75c8cdb16 create mode 100644 fuzz/corpora/cms/1b9c2a98d0d823a8361efe5f0627fea42f426755 create mode 100644 fuzz/corpora/cms/1bd8d70281a1c50d498006ea6ddbbbb82a711526 create mode 100644 fuzz/corpora/cms/1c1678ac54383915396a5eeaae03b5fbb166da3d create mode 100644 fuzz/corpora/cms/1c5336f2ffc84a12b813a2752e6adb49d6c46809 create mode 100644 fuzz/corpora/cms/1c54fd6f52ce199a044f80f46f6d775a4bc92ec5 create mode 100644 fuzz/corpora/cms/1c67851b8be1f389e8b18a22c7fc98472fff6841 create mode 100644 fuzz/corpora/cms/1c7b04eff4e980284554b6217445e3fc510c377a create mode 100644 fuzz/corpora/cms/1d3225ff98172d02fb1d35abe0677a9b8708d699 create mode 100644 fuzz/corpora/cms/1dfd06b05634844f669b14f6006345405628c6a9 create mode 100644 fuzz/corpora/cms/1e00141c786e3354bc2458de6a83e7b5da177a0d create mode 100644 fuzz/corpora/cms/1e35cdee648424b1f8bc5da9fad877a3825d49b2 create mode 100644 fuzz/corpora/cms/1e7c546bd6f54e519a2a454c1b6da8b5a2a43578 create mode 100644 fuzz/corpora/cms/1e98272e92f27ade0d64ebea62849ce266b2690d create mode 100644 fuzz/corpora/cms/1ec56389f6f35bd6a3c6e7d22a45a2c547422655 create mode 100644 fuzz/corpora/cms/1ec82a2bee826b71aa9de7371b45d13a7823637e create mode 100644 fuzz/corpora/cms/1ef3764e0da97618616f08819a3054ab9d474722 create mode 100644 fuzz/corpora/cms/1f28e2b759350d9be018abd5c2e980227e3f0c25 create mode 100644 fuzz/corpora/cms/1f7be54a97defc4e811af2057feef1c87cdb9cd6 create mode 100644 fuzz/corpora/cms/20b782d84bf5d86f7b04af3365ef1885810fca9a create mode 100644 fuzz/corpora/cms/212087a8c834b25bd6dbb07373831633480fdeeb create mode 100644 fuzz/corpora/cms/212582e398800e58f141db5203153825b47a38e2 create mode 100644 fuzz/corpora/cms/21478d53f6c9a50efbd8b19497d9753e264581a1 create mode 100644 fuzz/corpora/cms/21823d24aed4e73dd712d2c6bf97830170cb37db create mode 100644 fuzz/corpora/cms/21b2b14a64400db52e4f339de20e8aae8857c97a create mode 100644 fuzz/corpora/cms/221676281401a19857b9bfb77f51629ebb3c5408 create mode 100644 fuzz/corpora/cms/22180564c6eb5088809208ba41e433242e88e83a create mode 100644 fuzz/corpora/cms/22598eb437c6eaf27e0ab1b434ae254e6a9a751b create mode 100644 fuzz/corpora/cms/22c82facccea22db865c30804dd4f6fe602c5685 create mode 100644 fuzz/corpora/cms/230b7a7f442fbf8d7fa922a5cd3bc7902e53b2f6 create mode 100644 fuzz/corpora/cms/23af198ae3a60e70908f9987b8533757dae62e61 create mode 100644 fuzz/corpora/cms/23b206d6d5d6ffba6e9b790b2d37af17da901955 create mode 100644 fuzz/corpora/cms/23bfc78d12bd0a7e3308bb70d670a1ea87c51a34 create mode 100644 fuzz/corpora/cms/23d80ecfefac22aa1f0c70ac48eb55f9fe4974ec create mode 100644 fuzz/corpora/cms/23ec66d63481b3ed2e15a55ef5ad82e7e065c392 create mode 100644 fuzz/corpora/cms/240449037a30e8adc07ad469cf8155601dceb818 create mode 100644 fuzz/corpora/cms/240f62ce7d7c70eabcbfad1b11dcf5b46d0fc650 create mode 100644 fuzz/corpora/cms/244ee1c78f1b3261da2f22fd3eab96500f2416f4 create mode 100644 fuzz/corpora/cms/24600cc014a3a7e651df25db6e4423624206bf1a create mode 100644 fuzz/corpora/cms/24606c725a006d444ae169c73348bcf8df616c58 create mode 100644 fuzz/corpora/cms/246d772a8ec82777b85658da056f674274371c11 create mode 100644 fuzz/corpora/cms/24784f6c6a710f88fa3364372240d57b677b44c2 create mode 100644 fuzz/corpora/cms/249eaab4e59cb3c0571bcd64de1b6aa61500c478 create mode 100644 fuzz/corpora/cms/24f46a88d72db8ad31887946e4390669df23621d create mode 100644 fuzz/corpora/cms/24fe9de8c4f01e29af6d83f2db46be8c380a37b1 create mode 100644 fuzz/corpora/cms/252e0675d40f23b4393ef204f9e3d039bf6ef612 create mode 100644 fuzz/corpora/cms/254bd1e2bfcf5fae3575382c1bbd85f096289ed5 create mode 100644 fuzz/corpora/cms/25607add89a5b35dd169fde4eed81a6d24f26412 create mode 100644 fuzz/corpora/cms/257da1b4689ab8f74adf934026ba4899e0416889 create mode 100644 fuzz/corpora/cms/26526c48ff547b182831f50956faad133d7039e0 create mode 100644 fuzz/corpora/cms/26b01c1b0a2237e4d62a87e699736f993821d194 create mode 100644 fuzz/corpora/cms/26b9ef77e473c494d36dc9eb6458ec65c5e5f5ff create mode 100644 fuzz/corpora/cms/274965a9f6c10b6528cdc2084cd3cff91e29fec3 create mode 100644 fuzz/corpora/cms/287454070f436d7c06ccec1104d69df33bd884f6 create mode 100644 fuzz/corpora/cms/28b28bb9a551e4cf3530bcb157cb40383c35c796 create mode 100644 fuzz/corpora/cms/29f6bdefb02807fa952f547569ea700bb8596b37 create mode 100644 fuzz/corpora/cms/2a319ffbf44b5126aa7c5c93d3e5a57abebe3494 create mode 100644 fuzz/corpora/cms/2aaefde8309eef086b5161d51ada787228133430 create mode 100644 fuzz/corpora/cms/2ac76439026337c306de07275c71d67cf300faf2 create mode 100644 fuzz/corpora/cms/2ad015543a9520179eb487b63de71d81504a62f0 create mode 100644 fuzz/corpora/cms/2b01031c5585d89b99306cb652803dd455adda0f create mode 100644 fuzz/corpora/cms/2b1dca83be3a39ca9e0835bb9c0585647586d4d2 create mode 100644 fuzz/corpora/cms/2ba5f43a22a8477ff113f996ea4f05a52570df4f create mode 100644 fuzz/corpora/cms/2baf8eb635560cf2ac2d2011b2acbad363f059cf create mode 100644 fuzz/corpora/cms/2bd522903334006fcb7725c8bd4ff92c464925fa create mode 100644 fuzz/corpora/cms/2bd871db70b143e5b0394be179e06d143157de52 create mode 100644 fuzz/corpora/cms/2c1563df17c5aa44aa2fd916e9b3fa3772946eb3 create mode 100644 fuzz/corpora/cms/2c3c0204628866b709414cff2eb0043309eb8eb2 create mode 100644 fuzz/corpora/cms/2cb59e8c3905208285aa8d892a0007023d6ec0e8 create mode 100644 fuzz/corpora/cms/2cb78e732b81554cb0bc4ddec3aae73832837b20 create mode 100644 fuzz/corpora/cms/2cc4dc7d4ae0bd18adaa49af407f83d4443fba0f create mode 100644 fuzz/corpora/cms/2cfdc19ee006d11833d5880410007479527eaf86 create mode 100644 fuzz/corpora/cms/2d0e59d83f41cf685af2850df3db44773e48d3e8 create mode 100644 fuzz/corpora/cms/2d46c8a27beb4f7911a5fc4b8ace061963c6a8eb create mode 100644 fuzz/corpora/cms/2e0d14034984c1f8b54f66bb4815a3bd59a2edba create mode 100644 fuzz/corpora/cms/2e35574c32c9e6b0b269b8a8aa798d6f3573c658 create mode 100644 fuzz/corpora/cms/2e41cb28978c0fd561f5a462a49e41a9313c6b9d create mode 100644 fuzz/corpora/cms/2e48f38ae9fec0f686c2d7b88cea783389cc4b21 create mode 100644 fuzz/corpora/cms/2e626f85d642e4e47bf558a46ec8ca6e47984778 create mode 100644 fuzz/corpora/cms/2e68d9dad6834a041aa3a95c7d9e1c4dd13bf9eb create mode 100644 fuzz/corpora/cms/2ee6979646a646e058d83735403642f800eb44ce create mode 100644 fuzz/corpora/cms/2f2a845a1b22aea6f910196c264ec333f7632058 create mode 100644 fuzz/corpora/cms/2f320e0d4207b8e418cbdee6c31927b354504995 create mode 100644 fuzz/corpora/cms/2f74b2956e593fdad4eff7a0ac1585a196e541c4 create mode 100644 fuzz/corpora/cms/2f78166b4e1c51321f84ef3f8e98ff7ed6e51cdc create mode 100644 fuzz/corpora/cms/2f940f0a17e863ba16f7d8ca0f81465721a2ea98 create mode 100644 fuzz/corpora/cms/2fa983de02a341b71e2270d28beb803fbfc3768d create mode 100644 fuzz/corpora/cms/30e781e70b9ce20ae650ebd9a3cb403a1ce5c64c create mode 100644 fuzz/corpora/cms/32493f6cfbc7ae512fdf4a207648f650d8c0c3f7 create mode 100644 fuzz/corpora/cms/329e74204f8336023054a5bf5ba9e8a3cbf4398b create mode 100644 fuzz/corpora/cms/32bee8318bdb68d6c17ad2eb330a5b945108bad7 create mode 100644 fuzz/corpora/cms/32ca39e075025acfe1a0615cfc0862ada85db15f create mode 100644 fuzz/corpora/cms/32f09a617b3d1564518b8902acfd5c95d74144dc create mode 100644 fuzz/corpora/cms/3353eea809ab612b8244836e2038db092fa19d82 create mode 100644 fuzz/corpora/cms/337e00252632fc86c3e52a8f1404b0955e3543b4 create mode 100644 fuzz/corpora/cms/33a1a44402c17b9c41988c1bbdf13baeaeb89e3e create mode 100644 fuzz/corpora/cms/33ba2daff2c7d86af922bb1cc4fc57b8dd4f9ae7 create mode 100644 fuzz/corpora/cms/3434858eddbb826b9a24b8a5a9dc3e43c21a1982 create mode 100644 fuzz/corpora/cms/34a218c942636994625e51898b474f2313de53d4 create mode 100644 fuzz/corpora/cms/34a8fdbcd6d119772c11740cb2f686ad3d6bf87d create mode 100644 fuzz/corpora/cms/34fb1882d4fcd869731240a8583faf6e3ba26bf1 create mode 100644 fuzz/corpora/cms/358540a9e3d6cfce548f72891dbbe7f39b5ebc02 create mode 100644 fuzz/corpora/cms/35d3ec193508c12bcb6283e8ea71633fdd6189a7 create mode 100644 fuzz/corpora/cms/35dd5edd72bb29cc187d03baf045c80f352f962b create mode 100644 fuzz/corpora/cms/36357d704bf41956c02c2732c1e925a8c66f700b create mode 100644 fuzz/corpora/cms/36f334cca1d9474bd2a17c41db2c39245600e930 create mode 100644 fuzz/corpora/cms/372dd1f7d582559fd253c6ea2653f75b88478ebe create mode 100644 fuzz/corpora/cms/3734e4d7655b7701a86a487cded122446f721e31 create mode 100644 fuzz/corpora/cms/3749a4ce40c1d852d92385593dabdd97ea09b641 create mode 100644 fuzz/corpora/cms/375cc91f13c741ebc0106b65888199685962da01 create mode 100644 fuzz/corpora/cms/384a9b71bbe543c2dbc52ae796ab80048c9e9865 create mode 100644 fuzz/corpora/cms/38548513d0b48232dc7bdac858e8afb411db4571 create mode 100644 fuzz/corpora/cms/3899240e2175347fe6a9c8b9c582fae7c000ba8e create mode 100644 fuzz/corpora/cms/39270da19f70a9138f27a83a4f918623dd4ef75b create mode 100644 fuzz/corpora/cms/393c95ac8b7f642093d65962bec40c7ea2f6d366 create mode 100644 fuzz/corpora/cms/3964cc2a7b8cad9de76dcc1360deff255ffff722 create mode 100644 fuzz/corpora/cms/39928a5c34f6d18c8bd76ebe27179b84516e7f4d create mode 100644 fuzz/corpora/cms/39958ad3b2bd28777f9a822313f374cce86c823c create mode 100644 fuzz/corpora/cms/3a3804e10fb3a090cc686e6bccefeb17fe713ed5 create mode 100644 fuzz/corpora/cms/3a3a8a3ffc6b39f701d71fb2b45eff81f18db91c create mode 100644 fuzz/corpora/cms/3a78ded9a033bfa4b77b717a22977eed55d34a29 create mode 100644 fuzz/corpora/cms/3a877ef5097a86ce5aa29ffc6768ad300d39168f create mode 100644 fuzz/corpora/cms/3aeeb8a6012e201f61ee10125f3b9ce1ebfbb8ed create mode 100644 fuzz/corpora/cms/3af15dc1e98e2fd12454704598aa1eadb8f90b75 create mode 100644 fuzz/corpora/cms/3af414a796cd7b92621b58f6f07e39327b170ffd create mode 100644 fuzz/corpora/cms/3b3bd8517c5de83dd87713ca354cddc72499a80f create mode 100644 fuzz/corpora/cms/3b7cde1fb6acb5378a7ed41f113674d2e69f9ed2 create mode 100644 fuzz/corpora/cms/3b7f28c5e599e74ffad936ae371cde8d47307ea4 create mode 100644 fuzz/corpora/cms/3c28eda1a8b5988741b8907cac993e9abaeb3b20 create mode 100644 fuzz/corpora/cms/3cb3edf90c65b26d999a13f4a789bb0cb0b77374 create mode 100644 fuzz/corpora/cms/3d0b231c41d6a6479b69ba21d6d695c651c443b0 create mode 100644 fuzz/corpora/cms/3db36a485300c3d95acf55290774378ee3a17586 create mode 100644 fuzz/corpora/cms/3e31faa0580a2ef1f1b9e34383425b90fa33ba7b create mode 100644 fuzz/corpora/cms/3e45a8a9df56054328831640d51feab761fbedeb create mode 100644 fuzz/corpora/cms/3e730b3363ca5897933812b8b7fa5da9afb2d6a8 create mode 100644 fuzz/corpora/cms/3f39c983a2d290b9731acf922a671a912d3602e8 create mode 100644 fuzz/corpora/cms/3f57a8e0b4e90bcd997800758fce91b93ada369e create mode 100644 fuzz/corpora/cms/3fb95f9e70b76eb20a4a6a607ed3eaa11699b032 create mode 100644 fuzz/corpora/cms/403f325c3f9a02bf420158e068da4fc18c997c2c create mode 100644 fuzz/corpora/cms/406f3dec5db8c97baa4a2a211523cf45823603e7 create mode 100644 fuzz/corpora/cms/4085bcd62d06afab91757918049f30f264feb115 create mode 100644 fuzz/corpora/cms/40df26cc26c4a4c5a56b165539a2f3a74d03fa84 create mode 100644 fuzz/corpora/cms/40fae47091a4d2574abd6d55ad35c71fbdced24a create mode 100644 fuzz/corpora/cms/417c4169699e4a7c443d888f748b522aa5bd54a5 create mode 100644 fuzz/corpora/cms/41baa56d67b48748a75a0758d42d6d2f9c83d0c5 create mode 100644 fuzz/corpora/cms/4265dd75d1b135e486f67cd092b9310779fc9162 create mode 100644 fuzz/corpora/cms/4274020f2204aabaa502db4b527df37a39a1b392 create mode 100644 fuzz/corpora/cms/42c6244981447511257aab11e8abc1157794d391 create mode 100644 fuzz/corpora/cms/42ef39969e3bc956a2188fcd56d855aafe4e88ae create mode 100644 fuzz/corpora/cms/42f77670bd23b61ff9bf008dfcca8b3afce8b258 create mode 100644 fuzz/corpora/cms/437847c1376733c56c6316ad1299c5fc37977ed0 create mode 100644 fuzz/corpora/cms/43ce536b6fefefede87fc11167cbd16dd5b2f1c3 create mode 100644 fuzz/corpora/cms/44a28800b93028d12db779515ed4c42f082f1d8e create mode 100644 fuzz/corpora/cms/44ab18ff2a4ddf368ae361264e1aa6b3fa567f55 create mode 100644 fuzz/corpora/cms/452838931fde3a888f4984f083194c59a25dc107 create mode 100644 fuzz/corpora/cms/4543ba9dfb4a9a1d4b64e0aba69f64ec05f0b6e6 create mode 100644 fuzz/corpora/cms/45515d3d2bc5d9e2a9dc1e1cfbea7585cf507058 create mode 100644 fuzz/corpora/cms/46a7a3c554181f82dc5a25ebe271eb1dd6abdb3b create mode 100644 fuzz/corpora/cms/476bcc32f33134b387d183fa48e3f46f91b76e6f create mode 100644 fuzz/corpora/cms/47a48391c14fa16a4475017f1f130895e63c43cf create mode 100644 fuzz/corpora/cms/47d68ac0739f97ed5fb6f27f1d5118c3d4b79eac create mode 100644 fuzz/corpora/cms/480055c13aaa9c72cb465635d7a8be2fd09fef47 create mode 100644 fuzz/corpora/cms/48079637244aaec71bd7f9402cc04ffbd927053a create mode 100644 fuzz/corpora/cms/481f9ce41eb423c5d94781c4b1ac1a125e142d0e create mode 100644 fuzz/corpora/cms/48c1fc0833b74da896092e33679b7983c9d793a1 create mode 100644 fuzz/corpora/cms/48d7aede6d4cf3ead5f78fcbef764d627054b6c4 create mode 100644 fuzz/corpora/cms/49a70fe3dcb18a9e3b9a098bf36285facc59afa0 create mode 100644 fuzz/corpora/cms/49efd3285f29fbf81dee05112fad74909f04b0f4 create mode 100644 fuzz/corpora/cms/4ab4752354f422ca96dd59bf826c9edda9d9ebd2 create mode 100644 fuzz/corpora/cms/4b640123f2c18fd8da934f1596c6a915c8c50f62 create mode 100644 fuzz/corpora/cms/4bc3f80cc01de064d480c884a3cfe213718f40a9 create mode 100644 fuzz/corpora/cms/4bf837b2242cc30c678a99abe20d13d8929f3d50 create mode 100644 fuzz/corpora/cms/4c2257042c6beec2f7b5dc28e1ffba2381235a87 create mode 100644 fuzz/corpora/cms/4c2a29aa07de518f7f9d71465b2777ad95ba0da8 create mode 100644 fuzz/corpora/cms/4c93336d5f56c6046349d5a7c53ec5715f67211e create mode 100644 fuzz/corpora/cms/4ca5e171094f61a9449f85c2f43d717e47018d59 create mode 100644 fuzz/corpora/cms/4cbd4fed157e74c25413b580951c1f14462d7e54 create mode 100644 fuzz/corpora/cms/4d13f04956597bfe0c0a008bf23c7dd06c2af7c6 create mode 100644 fuzz/corpora/cms/4d496d4ddc605337a05e51a040c3c03221e34174 create mode 100644 fuzz/corpora/cms/4e0858409d5cca1ecb29b7f42ee07cb8c2d90daa create mode 100644 fuzz/corpora/cms/4e1c2059c4e6dd66d7d11c421a2ee7f58b5d40ad create mode 100644 fuzz/corpora/cms/4e49025a5a352c267bc5848cbc8fbdb234591090 create mode 100644 fuzz/corpora/cms/4e9e5af7994b0442854012e8d85d7f29d4ec6391 create mode 100644 fuzz/corpora/cms/4eb9ae1bd22f4d72b4a9d9f2e4171507b6b9d0ef create mode 100644 fuzz/corpora/cms/4eddd947c64a1339d65e7eaaf27902628cea2115 create mode 100644 fuzz/corpora/cms/4ee3c7d8de12fed781d1651934ffea4e5ac45b32 create mode 100644 fuzz/corpora/cms/4eea98e89f84a5d88f955c257830cc32e5e97586 create mode 100644 fuzz/corpora/cms/4fb838a137b566ce296a3d1e47803925a067d6b2 create mode 100644 fuzz/corpora/cms/4fd74e345de7e18b48624393593d7fea8db66957 create mode 100644 fuzz/corpora/cms/50043e91cd2602eca66bd37512124adb59da0653 create mode 100644 fuzz/corpora/cms/510e2d0a9b7f340a816f79f92cdd84bf07b63bc4 create mode 100644 fuzz/corpora/cms/51141f054854b41f28c48c55598d597b51c5c0d9 create mode 100644 fuzz/corpora/cms/514811d8e633771fa3d5912752879fb246542076 create mode 100644 fuzz/corpora/cms/5155037585e213b3ce6b4e8c7f0dcce5077f19db create mode 100644 fuzz/corpora/cms/5161aa47681c71fe7b8832c6a98401935b283104 create mode 100644 fuzz/corpora/cms/516606b424a8f38251258bfd50d106aa29488134 create mode 100644 fuzz/corpora/cms/51995940a19100373d819aa272b5659ec1c12acb create mode 100644 fuzz/corpora/cms/51ca8af7ab2aa892edbe7bfebf643477346c7d8c create mode 100644 fuzz/corpora/cms/51e75a83a035c494b485b6d70ed506ecde18e57b create mode 100644 fuzz/corpora/cms/522e06d252bdbf54f44e0a2a8db86af5863f7b9c create mode 100644 fuzz/corpora/cms/527700927cd870de711244c3ea576fabe33d7627 create mode 100644 fuzz/corpora/cms/527f5c8abfe9f0955d303d414eb49b7b08c1e3ff create mode 100644 fuzz/corpora/cms/52a2f52333311c38cf78b61ee0d05e65e42493a4 create mode 100644 fuzz/corpora/cms/52bf4d8bb051cdd01e62b64741a67f3acbd6adf8 create mode 100644 fuzz/corpora/cms/531fabcc582628eb71c92f88538d2086ae41b171 create mode 100644 fuzz/corpora/cms/5339a357a3c82999d14ba096d78c271ec5e370e1 create mode 100644 fuzz/corpora/cms/53427dfab48d11339955398c5cb3ae78efd6b172 create mode 100644 fuzz/corpora/cms/5384c684b3007842634ad469d268b7342aaf2c88 create mode 100644 fuzz/corpora/cms/53bce166f00a2ee4f1ce6a62c0032f9c4245c2bf create mode 100644 fuzz/corpora/cms/53f01de5318442cd21da60c9e53a4ba7d152683a create mode 100644 fuzz/corpora/cms/54083d34df1a7d74aa90177f78cbb80f2e7cef2d create mode 100644 fuzz/corpora/cms/541553a8aef592a4b26efa22ebadf406f0997d10 create mode 100644 fuzz/corpora/cms/5423580c0f5dc94be4c929792c49dce1ec0d882f create mode 100644 fuzz/corpora/cms/54388a857e6100c4c7fc3eacbf544ca7506bee1d create mode 100644 fuzz/corpora/cms/5536e2c5228a34dbbb965b57e806d79f4ddd7364 create mode 100644 fuzz/corpora/cms/55515bfefcf95eeab4328a51a39a105f6b46aa33 create mode 100644 fuzz/corpora/cms/563d0fb809be0b302785cfed422167b980d82ed3 create mode 100644 fuzz/corpora/cms/56866b660a25089fb8b079361eeea0fd401e9626 create mode 100644 fuzz/corpora/cms/56b769c798890e0a47e29005031bd7c0d97e6e63 create mode 100644 fuzz/corpora/cms/56ca3b1301715a5fdb19bff85a9fdbc8302905a8 create mode 100644 fuzz/corpora/cms/56ef9020c00d82ce9ea172c6aacf1e6ed4bd5ba2 create mode 100644 fuzz/corpora/cms/57aac7c3f1c4c65637d2b70fa52aee5874349e33 create mode 100644 fuzz/corpora/cms/57cceeda5c3ca0bfbe7d90dfcf118180f9ee391f create mode 100644 fuzz/corpora/cms/5807c164781f37e171ab79b83da64c8c66e641d0 create mode 100644 fuzz/corpora/cms/58432cf0caae64adc4d27dc5e0b5481bb4d98ab9 create mode 100644 fuzz/corpora/cms/58d309e34a704958a8401d8ef1eaa93664916e9d create mode 100644 fuzz/corpora/cms/5908c660c16b2729a9ccf9d5da570524e82c11f0 create mode 100644 fuzz/corpora/cms/592203690ac8e57c438fcf8e822548087fe08e09 create mode 100644 fuzz/corpora/cms/59cd067831ffa08b8525ebfce5feb7f3fb98cdd4 create mode 100644 fuzz/corpora/cms/5a160fcf13cdac1029e2c717c88e7ac9f0bb17b9 create mode 100644 fuzz/corpora/cms/5a45a4855576922f5571ae93496790aa993b8f17 create mode 100644 fuzz/corpora/cms/5a5604dbf0b4a72f913a007575adfcf7165b8c5a create mode 100644 fuzz/corpora/cms/5a7d976bdd0cb1b6ebe4baf906b8836bc3fb4aaa create mode 100644 fuzz/corpora/cms/5af538ad9382661d80853fbd92385843f97fc532 create mode 100644 fuzz/corpora/cms/5b542a8f34f66867b5b7b75ab6087ec020009f81 create mode 100644 fuzz/corpora/cms/5c70177e2ccb274d10772221a50a68278ebf3bc0 create mode 100644 fuzz/corpora/cms/5cb8b994d45ebdd525b802fa327642c8a1acd93c create mode 100644 fuzz/corpora/cms/5cf79516051506eeed0cc89bf7c96a21608bab13 create mode 100644 fuzz/corpora/cms/5d4864ec1ba88c17a2436d37bbde4f341b9e88ac create mode 100644 fuzz/corpora/cms/5d791bb7fd42bcc6488a5e9da3dbdb9812fa97ed create mode 100644 fuzz/corpora/cms/5dda96c12ff5fb178f44e1046aec132f04560c22 create mode 100644 fuzz/corpora/cms/5e66eba4e68f6ff558f8d009b51e4d49f661b60d create mode 100644 fuzz/corpora/cms/5ebd5a3820e1cd6f2473a7692ecead0fb3f32428 create mode 100644 fuzz/corpora/cms/5ec2e1302e48dde7ee1da1fff202f152789469c3 create mode 100644 fuzz/corpora/cms/5f2764f62293076269ed600e5ab30b7bffe626a8 create mode 100644 fuzz/corpora/cms/5f2a4099c7b9dc7e2711db4dc3a31c3e799daae6 create mode 100644 fuzz/corpora/cms/5f443b71896a0b167ce12f388fc10dfa75aa7992 create mode 100644 fuzz/corpora/cms/5f69a172496ce845a3bc3d856e44e68fc4c74a19 create mode 100644 fuzz/corpora/cms/5f81ce6fec07979e384534edf13c90f89e156f3e create mode 100644 fuzz/corpora/cms/6013111736f9fae9434800bb2135e0efd432c902 create mode 100644 fuzz/corpora/cms/6061e7743839ebfa91b70289646029752389c81c create mode 100644 fuzz/corpora/cms/607c5e1145499577469f5aca2b785f900cde891d create mode 100644 fuzz/corpora/cms/60a0a7663d9a2bc1a97b778bb352f5233a9eb7ab create mode 100644 fuzz/corpora/cms/60ec83b783a9b5cba68e9fc14bf19f8c670e0717 create mode 100644 fuzz/corpora/cms/611816bbc9386324ef8cb5e246f356ce8950e7d2 create mode 100644 fuzz/corpora/cms/612736dfe8d2794e432b69399f2d6d851949a3b5 create mode 100644 fuzz/corpora/cms/61e534f44b0708ba03be075b56bb8ee90867f039 create mode 100644 fuzz/corpora/cms/61f76c35976d867502cf79486c3638db09be2522 create mode 100644 fuzz/corpora/cms/61f89ea3f6429a87d230f04919a3032e92c67535 create mode 100644 fuzz/corpora/cms/6224526e87ed25e86d66964df6df4f27509845d1 create mode 100644 fuzz/corpora/cms/62c41a44a8da8b40fc244c6f321cda3002482d96 create mode 100644 fuzz/corpora/cms/62e11dc4f7732523de936049c25f9c9c5655062e create mode 100644 fuzz/corpora/cms/6342b834be59b40205d4b8f0952c564dc89c4b44 create mode 100644 fuzz/corpora/cms/634c702cc0e5bc9fe8d63c29334a31fe6be71f04 create mode 100644 fuzz/corpora/cms/63be138c2facb8ab17142b49e339049addb18a7d create mode 100644 fuzz/corpora/cms/63cd9726faa85b9a5708802e5e598d632a268c24 create mode 100644 fuzz/corpora/cms/63ea78af86eefa727e6fc086ae13485dde78233e create mode 100644 fuzz/corpora/cms/6401af9276f5a4adb00d71fb83be04d32899d77f create mode 100644 fuzz/corpora/cms/6466add7e149ad083704d0104163bc0219e318bb create mode 100644 fuzz/corpora/cms/64a4cb2e76cf142bc6d8aa5aec3184d9f63904d7 create mode 100644 fuzz/corpora/cms/64dc0ba3afe22e6d36cb12ee00ba323f4a381ce7 create mode 100644 fuzz/corpora/cms/659c69bd98f07cf866a19c6e30b1794b63164051 create mode 100644 fuzz/corpora/cms/659fc9809159699172e00648697fe4b0ab258b09 create mode 100644 fuzz/corpora/cms/65b011de1d2c21299689c6ea1e47fd7ec9404fd7 create mode 100644 fuzz/corpora/cms/65ef54afbfe7a83c0023f2d704ee6c3186384fe4 create mode 100644 fuzz/corpora/cms/66024586b9cb4bf165285564d6d618efe7870378 create mode 100644 fuzz/corpora/cms/6606fdf2e5f1967897937087d71bc1378d26efdc create mode 100644 fuzz/corpora/cms/660a25587748e61445b94be400c2d830e712d998 create mode 100644 fuzz/corpora/cms/6612c49a4e7bb3e311543f106f30a79a7f500b3e create mode 100644 fuzz/corpora/cms/664e39110a1defed5da19dd96f9ecbea933c2b5b create mode 100644 fuzz/corpora/cms/6668d0c5459e44010440760b5979c917e8d697f8 create mode 100644 fuzz/corpora/cms/667626824ccea749827401e2dec8ef40af508e09 create mode 100644 fuzz/corpora/cms/668fc9e2bd0e49e3c05941f6a240a36d3739f4fa create mode 100644 fuzz/corpora/cms/66ac16b20f247bb7843229ebb04750e3bc49b3ba create mode 100644 fuzz/corpora/cms/66b449e16f29cead255654edd6ffa26f2053561c create mode 100644 fuzz/corpora/cms/67529996e4437c04d2bdadaaac39b48d364cbd09 create mode 100644 fuzz/corpora/cms/6754a5b62e17a3bcef62639e7979b054d60d3925 create mode 100644 fuzz/corpora/cms/67df5339bf5c9bbaa6d99566d7d53a4ec314c3a4 create mode 100644 fuzz/corpora/cms/68147fac0d05c7e04d5f5c2b6eb2b79064c599ba create mode 100644 fuzz/corpora/cms/6838ff641d158783011ef54e1e39de63cee55f02 create mode 100644 fuzz/corpora/cms/6871f2e983bfc79ed551e92b53ab163c5404a3c5 create mode 100644 fuzz/corpora/cms/68b06d8e7ae38ff85a8d43f0c07ff224672b00fa create mode 100644 fuzz/corpora/cms/68d6d25273eff05fa9c1cbecac1ecf7ec695e0a6 create mode 100644 fuzz/corpora/cms/697ad7ecfa9e837fcb6f366a6a3079b2ea560214 create mode 100644 fuzz/corpora/cms/69ecf8f3da3d5781d809021945f9df3dbd3ec53e create mode 100644 fuzz/corpora/cms/69ee56013fe8c1b6e53b71a88245b897ecd3ab44 create mode 100644 fuzz/corpora/cms/6a176dcc0b65a64ee34a5d23010541140928c0c7 create mode 100644 fuzz/corpora/cms/6a61762c5f8787a4561eb7072aec2fbd0041f3d4 create mode 100644 fuzz/corpora/cms/6aed379296eea07403acdf5956919a8b21f7fb2d create mode 100644 fuzz/corpora/cms/6b55506cee08c807cea4d8337b46affb5ca555ea create mode 100644 fuzz/corpora/cms/6b650ea9a161df3c81c15e3debfbe4052087c86a create mode 100644 fuzz/corpora/cms/6b987067a20087c6e21e26909eba46d9eaf6df1f create mode 100644 fuzz/corpora/cms/6b9937e99dc801968e4aec74e40cc2682dd36c0b create mode 100644 fuzz/corpora/cms/6c09817ff507ac2c573e9bbe48e03e4cc29fb72d create mode 100644 fuzz/corpora/cms/6c193a8b875726978d16aeafb6aee68a29be1350 create mode 100644 fuzz/corpora/cms/6c393feaa7fb2f431f3abb4dcbb2e917d163d4a2 create mode 100644 fuzz/corpora/cms/6c5f4a7525779702576086f7c12bcd288ea0ee64 create mode 100644 fuzz/corpora/cms/6cb75dcc5b5c51dbaa814de67985f47e17b7b4ec create mode 100644 fuzz/corpora/cms/6cc2ac24924cd67497e142a4bc388cbd4af7773f create mode 100644 fuzz/corpora/cms/6d1ce7a93e17a0adfbb348a839bf9eaea93d97ea create mode 100644 fuzz/corpora/cms/6d2f2f3598ea58a6dff859459383616ffd99a96b create mode 100644 fuzz/corpora/cms/6d93c6054cfe1d4c57b9979836f7a7066a8ee8ce create mode 100644 fuzz/corpora/cms/6e31b2d36e0bcfd288f840b68d5c0c568c9ca237 create mode 100644 fuzz/corpora/cms/6e629a39784a48f70c2e75db522994cee4b4e5f2 create mode 100644 fuzz/corpora/cms/6edc3fc037fe3fcef15d444d58a2cbb06d2d8f70 create mode 100644 fuzz/corpora/cms/6f034a59a30c60cdaeecc190d9a541fbbeb47d10 create mode 100644 fuzz/corpora/cms/6f064cf8e66f438be64e07dd1484b484905f055f create mode 100644 fuzz/corpora/cms/6f2cc02c07c72efa04959c3efa583340b49477cc create mode 100644 fuzz/corpora/cms/6f2e4926e08cca795f43276a288e83310b0bf2f6 create mode 100644 fuzz/corpora/cms/6f4bb7eac2df875524c34a81100fc8ab390ffd55 create mode 100644 fuzz/corpora/cms/6f6515af082d5b0f72deabbad6a965480a7d0a1c create mode 100644 fuzz/corpora/cms/6fc708bc9f95c0c7bf333886c083ae12d0dadab4 create mode 100644 fuzz/corpora/cms/700f79d5fe789d05ae2ead8e143740adab670e64 create mode 100644 fuzz/corpora/cms/7033f911196207a856242816ebcd9e5f269fb2ea create mode 100644 fuzz/corpora/cms/703bdfa4af1cc7d02a59ef233bebbd36c11fea52 create mode 100644 fuzz/corpora/cms/704512050a386167b84253d1983b0601bbee3e28 create mode 100644 fuzz/corpora/cms/70de9477c81e46baedcc5f5b67c4b9299aa0753d create mode 100644 fuzz/corpora/cms/7131dc286721ca165d9ae78b9f9cab262bae13a2 create mode 100644 fuzz/corpora/cms/714579fb33d0234a7a38ac0e1dbac570396357d4 create mode 100644 fuzz/corpora/cms/71551571d8ecaaeab608878382cc4035bb8b9857 create mode 100644 fuzz/corpora/cms/719e760da6aebd46e68cea5ff3fc741f75c2ddea create mode 100644 fuzz/corpora/cms/71a0b36ec32c3dd3b5dd37bd45d276aab03766a6 create mode 100644 fuzz/corpora/cms/71aa9fdd55a3366c885736fc224de564493eeb8c create mode 100644 fuzz/corpora/cms/71c60c88707fe8e79e2d6abecd357dcfa4486e62 create mode 100644 fuzz/corpora/cms/72363ff00ab0c63f67a2b2919844ded331afede8 create mode 100644 fuzz/corpora/cms/726ff4ab5f6996ef261b747860ce037d3daf528a create mode 100644 fuzz/corpora/cms/7357e4c4573ec2fb6a056b5e9481247752b50607 create mode 100644 fuzz/corpora/cms/736d17d99cb924912e35d6e78fa46194bca4ebdb create mode 100644 fuzz/corpora/cms/73960c338e0d8edc42faf1b10fcf22053858f893 create mode 100644 fuzz/corpora/cms/742cada456171872d01253227af402f1a235bed6 create mode 100644 fuzz/corpora/cms/74482f3d75c2800b797eccca88293cbd5563a9c8 create mode 100644 fuzz/corpora/cms/74b9136243d6ac0b7d1aaf58f1cbca9112e4bb40 create mode 100644 fuzz/corpora/cms/751d4f70138591ca16d7adad3d353ce4505651b8 create mode 100644 fuzz/corpora/cms/753eb22b74e4d2fa1ed65d4720d0cd20472a7461 create mode 100644 fuzz/corpora/cms/7550419efc95c342058c336365e258d5341b1db0 create mode 100644 fuzz/corpora/cms/75938d83c6d3b0b8e483d27a48b1af375553d586 create mode 100644 fuzz/corpora/cms/75bd864b35ec851c683c0dc20a3a57b8a9a951a8 create mode 100644 fuzz/corpora/cms/761bd7890190a3b0597387cffa6f11312cb0c0bd create mode 100644 fuzz/corpora/cms/76429aad02c0a7736a42d7db6254b44702c6f428 create mode 100644 fuzz/corpora/cms/766f70d3f9ec41887fa8c30b1c61320e716557f5 create mode 100644 fuzz/corpora/cms/76f5fbbe0340445a16ed71b8b3f1d2af6393d50b create mode 100644 fuzz/corpora/cms/775585a0e8f6120db62d943bf8e330fb5a826149 create mode 100644 fuzz/corpora/cms/779e5ddee1a8bb471b878b1e45aec30ad7cb0af2 create mode 100644 fuzz/corpora/cms/786220643133cc84d15f938cb85b3cd6d971a050 create mode 100644 fuzz/corpora/cms/787c242987607ac96199be2deaaabcc80bf5e05e create mode 100644 fuzz/corpora/cms/788ec3a84fc02b759cf8b1a536d20ea2e0be293e create mode 100644 fuzz/corpora/cms/789b2981e461f46de65685d0bcd5020f82147314 create mode 100644 fuzz/corpora/cms/789e39b58a14baf948b5f953b37988871b263dbb create mode 100644 fuzz/corpora/cms/789f322f53d128294f5466aaf314cb122b6da0de create mode 100644 fuzz/corpora/cms/78b9fa54c19fde5b4d3b0bb086c065bc632c6314 create mode 100644 fuzz/corpora/cms/7909f92d21a6b14bdd632cdfd17194c25c6a0d02 create mode 100644 fuzz/corpora/cms/790e5501aa4d46b6176ec8b0501abc83f3f1c40b create mode 100644 fuzz/corpora/cms/79a8dcf596928875fbc6ae5c04ba8671b4002a07 create mode 100644 fuzz/corpora/cms/7a01be245d49b0c02a24902a569edd47aff4e1cf create mode 100644 fuzz/corpora/cms/7a17170bee4b4850f3daf8c8174533a3748faf55 create mode 100644 fuzz/corpora/cms/7abdb113dfc433a9ca16ab10822d72f422d9f8af create mode 100644 fuzz/corpora/cms/7ae6c76e6e3c9e3c6b647f1fa3d79637bbcb5f58 create mode 100644 fuzz/corpora/cms/7b29c2c1d8b0f1b6d8452afbecd24aa26f4725a0 create mode 100644 fuzz/corpora/cms/7b56ae3a1c357a487b309ff0b15caf8f812c240d create mode 100644 fuzz/corpora/cms/7b8fa704dfd75b505a415bcf2f5d1728d1e0ed3e create mode 100644 fuzz/corpora/cms/7b9bc0a5b1d5142d10376596023fe489873ea167 create mode 100644 fuzz/corpora/cms/7bf0dae303b7c4ab5023f7390ae82389c664e6bd create mode 100644 fuzz/corpora/cms/7c4e7161d7095c94a59f41390a371e0061182541 create mode 100644 fuzz/corpora/cms/7cabd4e91526a8fea914d12fda485a218d8c5703 create mode 100644 fuzz/corpora/cms/7cbb29a3bb25d67c34ac2aee9d0441473205ffc8 create mode 100644 fuzz/corpora/cms/7cc4ac53fffaecbe651d891a7062bee8f1c4cf6d create mode 100644 fuzz/corpora/cms/7e565b2e614ac34b5ff8f1ffe656a2aae12c9c88 create mode 100644 fuzz/corpora/cms/7e7404784e58cca6991f4e527f451eb7ef07d2de create mode 100644 fuzz/corpora/cms/7ecf9ad58ac37a8710b294e5f85fe0a87a019fa0 create mode 100644 fuzz/corpora/cms/7ed2bbee7755d3f0f903ccbef85c6bae86af38e3 create mode 100644 fuzz/corpora/cms/7edaa17c58de36d6bbf3295233b580cefa250f0e create mode 100644 fuzz/corpora/cms/7ef0e8bedefed149cc94e1d78e5fb07a4e4c568c create mode 100644 fuzz/corpora/cms/7f0e364f50109b422da8de254fb7a410b2eba079 create mode 100644 fuzz/corpora/cms/7f23e82ef48038882a1a3b8724f354b57b595769 create mode 100644 fuzz/corpora/cms/7f389ed13d4e838ce9a10242c3c3191b00431648 create mode 100644 fuzz/corpora/cms/7f52776cba689cb2593384292823c51b730aee5c create mode 100644 fuzz/corpora/cms/7f659543d46c4c5de83a60bd97546e7421a76609 create mode 100644 fuzz/corpora/cms/7fcc9c06fdc6eccc321e80fbcfd48ab3fd1cd8e5 create mode 100644 fuzz/corpora/cms/8079acf973df10e32f3153b8a11a2a0eee74e146 create mode 100644 fuzz/corpora/cms/80a2fdd7dd39961376bc78b90cf857443d818de6 create mode 100644 fuzz/corpora/cms/80ac46af68d9e04a679121fa02b53f0b599c8d81 create mode 100644 fuzz/corpora/cms/80ba78216d49d430072eb70e0b29087447c9770e create mode 100644 fuzz/corpora/cms/80be74734995a6dd6b30b174f6a58a7c06ac8078 create mode 100644 fuzz/corpora/cms/815a6ed73327ad6b363985e7c1c6ed218457ca3d create mode 100644 fuzz/corpora/cms/81790130f4275877202a62a59a35520edf16ced5 create mode 100644 fuzz/corpora/cms/818e187c83baced1442bc9f8c60f34ad6f2bb723 create mode 100644 fuzz/corpora/cms/834d6fac7f728680ffc0a5701cc4ce868ffd8e9d create mode 100644 fuzz/corpora/cms/8365a0addced757555b3c352ee58902f7763d9a4 create mode 100644 fuzz/corpora/cms/8367f3d64cfdc7ab9958e24c5b65f7742ccdda3e create mode 100644 fuzz/corpora/cms/8372c606df8e8b282821b272adc1c70808b3afc0 create mode 100644 fuzz/corpora/cms/83ad6b42eec7bea87d4a13f8de36d4c953e8119b create mode 100644 fuzz/corpora/cms/83b40996e938c1636660f51333b2593e99d7928b create mode 100644 fuzz/corpora/cms/83e6d44d749055fbc915e846de897dbf13bb1129 create mode 100644 fuzz/corpora/cms/841b7e9566382b53cab0d2fc3e69f21f085057db create mode 100644 fuzz/corpora/cms/8436ab3fabbbf9fb281ad314e00fd4df49270ee0 create mode 100644 fuzz/corpora/cms/84689cd17aa915cbeab2a16aee9aea3ac470f9ad create mode 100644 fuzz/corpora/cms/8481f949a12e95639341bce336fcf15b1f2ba2a2 create mode 100644 fuzz/corpora/cms/84c04aee72a541463e1ffaecfb4dec007f632656 create mode 100644 fuzz/corpora/cms/84c3fc13fb89880a596c25478b2bccdfd2211023 create mode 100644 fuzz/corpora/cms/84fe4fdd7a4e0480368a6993b6cb398c78dbb5e4 create mode 100644 fuzz/corpora/cms/863067c74c009dff1f2e8eaeac97f76037ff5155 create mode 100644 fuzz/corpora/cms/8670807075682e5374a347701bcdf4013ce2ad18 create mode 100644 fuzz/corpora/cms/8687bf68a0bf9f611fa096c391ba4966e3f259fd create mode 100644 fuzz/corpora/cms/86d9bd9eafbce3f81f53e3b504af98cff322c023 create mode 100644 fuzz/corpora/cms/86e499a642e448d5d2bacbecbf8b2d4c1cb4ce34 create mode 100644 fuzz/corpora/cms/87293b0401c38104a15494aa76b7046951bb5033 create mode 100644 fuzz/corpora/cms/8749f3adf91265a0e8654101fd647b71fbe46a5b create mode 100644 fuzz/corpora/cms/87f0db139e967becb22222fb42ab1c4760e6d6fd create mode 100644 fuzz/corpora/cms/880ad25f2e884325497f0bdc6a8ed47f61d1d1ba create mode 100644 fuzz/corpora/cms/8863241941f7db15fb07de5355ff3440df0e8e9f create mode 100644 fuzz/corpora/cms/88782d5a7ffc935899199bba58bed9728589ac89 create mode 100644 fuzz/corpora/cms/889d208cb7859c4e0a1a58cf22c0674c1b0b0ca4 create mode 100644 fuzz/corpora/cms/88aae0a35ba1dc8bcdc24d22acca3eac59dcd599 create mode 100644 fuzz/corpora/cms/88cfb6559c489ddbc24db1aa57c2e7721f9b6dda create mode 100644 fuzz/corpora/cms/89135d179990283d1cf7e940bf2cf0fb223f5e76 create mode 100644 fuzz/corpora/cms/896799fa7f57d2513c4cb9e219ae81da04d83479 create mode 100644 fuzz/corpora/cms/89908f7835a2cc31c88c95e99e8edd06b005bc24 create mode 100644 fuzz/corpora/cms/89c4035676cb6f506cdf8e64241a8f0ec16eb31f create mode 100644 fuzz/corpora/cms/8a124e49a08112b3e65174f891e93a6dba4a4776 create mode 100644 fuzz/corpora/cms/8a2b1cbcbaae8e7a638f88e2f1eb8bcca8dbdb93 create mode 100644 fuzz/corpora/cms/8a5f977fd21ed1bf0981f8ec88cdd1042acb3e3f create mode 100644 fuzz/corpora/cms/8aa71e22345eb77cca0621720f777592fe4e2345 create mode 100644 fuzz/corpora/cms/8ac5418c622f9b75a0c8ee8e846c9521981dbf1d create mode 100644 fuzz/corpora/cms/8b004b642239b9e9b59f7f261a54fc78c5b11169 create mode 100644 fuzz/corpora/cms/8b1ed4f6fc7dc9bd93104e381f9d2cdc7b6e504b create mode 100644 fuzz/corpora/cms/8bd643d004f42966e5257d0453e7ddfebc17b6de create mode 100644 fuzz/corpora/cms/8c100f65dee1d9a898b0bc3c3a75d467f32f6f6f create mode 100644 fuzz/corpora/cms/8c87ccadca345816ae0448167f83e85cca97ea8f create mode 100644 fuzz/corpora/cms/8c9b691e9c544a4b825da3a41457dde8009084ba create mode 100644 fuzz/corpora/cms/8d493d582a5e231deddb6cd775359894c17c55b3 create mode 100644 fuzz/corpora/cms/8d9c4ef7c680462eaee7942760bc8de88c49ab0e create mode 100644 fuzz/corpora/cms/8e246ce3406df654fcebdab0b531d53d74f537fb create mode 100644 fuzz/corpora/cms/8e62ea46bafcd841005cac06974d7ee5f593c764 create mode 100644 fuzz/corpora/cms/8e7c65dce95e3b15d163d7f698633c7f7bc5a33f create mode 100644 fuzz/corpora/cms/8ea611996e04ffa27a68555e624951eeba4ce1b4 create mode 100644 fuzz/corpora/cms/8ed4da7ed83cd76913e10b86ca9d3e790f584562 create mode 100644 fuzz/corpora/cms/8f701c9f2f45bdd96b1102f7ae9e04ec463ce841 create mode 100644 fuzz/corpora/cms/904dc3b05d91ed2a5a715c4e13bae17ffd32320c create mode 100644 fuzz/corpora/cms/9086fc28c00fbf8cea9dd2a5a97dc5a6b10b7ac9 create mode 100644 fuzz/corpora/cms/9101fd67f22891f36cbab56d91d2199bdb84a371 create mode 100644 fuzz/corpora/cms/912d7a90a787c299010b025b7b1c4c5ce2aa878a create mode 100644 fuzz/corpora/cms/9147b9b5902aedf8b9d17493f9c37355dc8345df create mode 100644 fuzz/corpora/cms/915822630ac65d2281976ecc889ab873668c990e create mode 100644 fuzz/corpora/cms/91ae110c0e2533de2d985c207b087dc573938981 create mode 100644 fuzz/corpora/cms/921640f270eae1388e28d08ac802cf94a613a80d create mode 100644 fuzz/corpora/cms/921f9ae2144d73dee528788dadcf51b2259007a2 create mode 100644 fuzz/corpora/cms/92af4394e18b81fc1de16927ed5006027dd99553 create mode 100644 fuzz/corpora/cms/92b3be17e474ac376c811691a2a0520c0d330430 create mode 100644 fuzz/corpora/cms/92c94c932e8e4eb52d3a3b1c4ad63cc24f7f4244 create mode 100644 fuzz/corpora/cms/92d8eb116510152303bbaeb0df662cd774634659 create mode 100644 fuzz/corpora/cms/93624483aa540ab3d50e8c1e79f2d26723f7900b create mode 100644 fuzz/corpora/cms/937b106525cae82df82d78866d71671669786506 create mode 100644 fuzz/corpora/cms/93d58bfd3259deeeca8aa8e6f9e664c7397ab6ba create mode 100644 fuzz/corpora/cms/943e1f155bd9354cf514b97b391a617400073e6b create mode 100644 fuzz/corpora/cms/94738b557b8b5777f9aa73bcc4d64a9a9c317d3f create mode 100644 fuzz/corpora/cms/94ac9b7e6eb6800eefb221447653bd0720426e3f create mode 100644 fuzz/corpora/cms/94c7692806068e9320875ca5efb44ee4222724b1 create mode 100644 fuzz/corpora/cms/94ce5203be797f86fa5a620d717cfb54ac2549d7 create mode 100644 fuzz/corpora/cms/94f0c42134671e6b142e5e54f1671d0f428c4477 create mode 100644 fuzz/corpora/cms/9650b3740fab2797637568dc3ed4c8a31fa2a74e create mode 100644 fuzz/corpora/cms/96cf0e544b47038550673fe8fa4d36f94ab86e90 create mode 100644 fuzz/corpora/cms/96cfcc322b9049c36852ec01ee4cb1635ae316e4 create mode 100644 fuzz/corpora/cms/971496c1e18bbd3a6e66919f5c1bff7a12295742 create mode 100644 fuzz/corpora/cms/97971803679e654dcb1b864006d67eaf03ffad69 create mode 100644 fuzz/corpora/cms/97e2aaa2b765b43f5d8277d2a64f4e88cb29c21f create mode 100644 fuzz/corpora/cms/983b75bb776c5ccb3dd1473b7d2dc894a5b75838 create mode 100644 fuzz/corpora/cms/98e5142dc104194c2391d5eb92bc503d24d6b7bf create mode 100644 fuzz/corpora/cms/9949cf543da5ede3d1dbfa658640799c78aa345b create mode 100644 fuzz/corpora/cms/99a74476192c3131d5ee81ef7a163f85539ed262 create mode 100644 fuzz/corpora/cms/9a077688f4c20c0b96d75df00e2e268d498ad16c create mode 100644 fuzz/corpora/cms/9a6fdb1d8102f95ac4a4e503b07747816c12e790 create mode 100644 fuzz/corpora/cms/9ac7503b2426ac5fca38f25e05c30552db71b05c create mode 100644 fuzz/corpora/cms/9afafbe05dbcb3685f99206fb643ef5e8824aeed create mode 100644 fuzz/corpora/cms/9b2e01b16cf84e87d2ba61a6f1cca0320032a270 create mode 100644 fuzz/corpora/cms/9b779f09512fac93e8b5a5137824e75bd8788d64 create mode 100644 fuzz/corpora/cms/9bdabb9ea7284db105ebab288b83aa97816a4658 create mode 100644 fuzz/corpora/cms/9be0b97cedaf607b593b58d2fe3e30af105184ae create mode 100644 fuzz/corpora/cms/9c5540e006d23fd6b8a44f85e93b2a2831fe6772 create mode 100644 fuzz/corpora/cms/9cf35df2aaa5adf98f5e07339bee71be93e38d0b create mode 100644 fuzz/corpora/cms/9d0696dcc1d01e9471f916aebe21318b247de21c create mode 100644 fuzz/corpora/cms/9d1d33ce6ba11a08e8991db4596c37730d20f7e1 create mode 100644 fuzz/corpora/cms/9dfdf70ba05d7988596fe7fe00f497c893614b79 create mode 100644 fuzz/corpora/cms/9e0d6ff690fb405c3f0fec4e6e60b5bbafd1da49 create mode 100644 fuzz/corpora/cms/9e12318cab75161622bfe3395b71d48fcd47acf0 create mode 100644 fuzz/corpora/cms/9e1f6b0ff97a0d5b32bc56b74148bdc443f70e84 create mode 100644 fuzz/corpora/cms/9e2c09dbe2825597f4ebca761244d4c55763a209 create mode 100644 fuzz/corpora/cms/9e321cd921a48d86e35373a4fdef6ba2668a8be9 create mode 100644 fuzz/corpora/cms/9e45634946af305fd5774bbd0479405b5f733526 create mode 100644 fuzz/corpora/cms/9e7ec483ddcbf31ab9a898187cb3d013ec90bc91 create mode 100644 fuzz/corpora/cms/9ea08d47e687f6bfccd77330fd79139cb2ea3f61 create mode 100644 fuzz/corpora/cms/9ec9d69c5b01b8eb87b01cf9c68c7fc80c932335 create mode 100644 fuzz/corpora/cms/9f1ec005ca6bf41acd4c351a4371e6bb8ca9a52c create mode 100644 fuzz/corpora/cms/9f28ab087a34deaaccd2ba178b88872622d9d781 create mode 100644 fuzz/corpora/cms/9f521ea8296ed927d2825e05e6ae9508ed6942f5 create mode 100644 fuzz/corpora/cms/9f5bd4e59218fa4e377cd013a225650cf59fe9db create mode 100644 fuzz/corpora/cms/9fd9d3f5e322653027a997f71729d9d4dc081fda create mode 100644 fuzz/corpora/cms/9fea76e302ae07f16c727b2d626643d6c040dbd4 create mode 100644 fuzz/corpora/cms/a04e387fd7e3bc51327a1e9c2200def718cae384 create mode 100644 fuzz/corpora/cms/a0a4594f61cc6adc585c1a404f9a8def8ea01d90 create mode 100644 fuzz/corpora/cms/a0d688f6be53695c4d7799dec5d0d35dbc840fb4 create mode 100644 fuzz/corpora/cms/a127f793b1ee0bc1a024a5eba71b31f1b88198ee create mode 100644 fuzz/corpora/cms/a15b09e59620045ff46c643f53480dba906d130e create mode 100644 fuzz/corpora/cms/a21fc10bea6f61e354184c71c5b63b29fa201b54 create mode 100644 fuzz/corpora/cms/a23f648f5ab98cd2acce27d67928272b6ba294b5 create mode 100644 fuzz/corpora/cms/a24ebe2095fb9184b81af51d8be2e7807aeb3e12 create mode 100644 fuzz/corpora/cms/a2aef7545e4046a224b6589959ec33eb53c06bbd create mode 100644 fuzz/corpora/cms/a2e3b0001ce8fab496326963a4562d75b18c2c9d create mode 100644 fuzz/corpora/cms/a33743b9bde125344a69cd71ed2bea2d30534982 create mode 100644 fuzz/corpora/cms/a3495121f8d4c5a921d6a8b28fb42a54d4568007 create mode 100644 fuzz/corpora/cms/a35895e9b5107a610d29488493109688b0db5bd0 create mode 100644 fuzz/corpora/cms/a39346a64e8ecfa7adac96ed351a4174c087b11a create mode 100644 fuzz/corpora/cms/a3b277f8c76bddc06f6c635b79d922b04f2d0d4b create mode 100644 fuzz/corpora/cms/a3c14bc0deef84f2557f7e99453543da2b9cba9e create mode 100644 fuzz/corpora/cms/a45ad4662590d98be9fc3eba4ebe1b56e34161cb create mode 100644 fuzz/corpora/cms/a4aef9abb74e86e442a232cced96f5bb91291531 create mode 100644 fuzz/corpora/cms/a4cf7aa22c87b67194f4501114e21a0bed6d94f7 create mode 100644 fuzz/corpora/cms/a4d6fb1f5e7075027ede98a319cb1204cae14d26 create mode 100644 fuzz/corpora/cms/a50eb7dd1fcec240642a6bb8e395bf7e03beb4b4 create mode 100644 fuzz/corpora/cms/a5238a10e59bef529cb51b104535b8175b664a87 create mode 100644 fuzz/corpora/cms/a53c0407d90f4842b9edcf8dc96c38fd33167a1b create mode 100644 fuzz/corpora/cms/a5a93cadccf4568e0a5119a03ee9d97b9d24228e create mode 100644 fuzz/corpora/cms/a5ac27dac40942d912cc575363cf138aeeaed8c9 create mode 100644 fuzz/corpora/cms/a5e8b3d1c3f86b9f489b265e551a72540e2bc0ca create mode 100644 fuzz/corpora/cms/a5fd9020581d53ecfb41780d7ea5f6756759a9e1 create mode 100644 fuzz/corpora/cms/a6296912aa283323072f564bcc3d32f1c6a33f48 create mode 100644 fuzz/corpora/cms/a685d0d573baf2563a86ae50833dedeec2c46310 create mode 100644 fuzz/corpora/cms/a6b374f45c2352af34325a22f5b532e8d4a759f7 create mode 100644 fuzz/corpora/cms/a6bee84dd90c1d248115d452946573982699b96c create mode 100644 fuzz/corpora/cms/a7573884207d606bddf5233a980911034d1721a2 create mode 100644 fuzz/corpora/cms/a7851f27c8712379dee3d2c21e6cc34ece0ae4be create mode 100644 fuzz/corpora/cms/a8099ec00376bd19ab89d53d7f95ea873364bb2c create mode 100644 fuzz/corpora/cms/a81ab2c807af55d922be959ebb561659c0406d30 create mode 100644 fuzz/corpora/cms/a85e25a16187f4051786a334934ccf10471ac82e create mode 100644 fuzz/corpora/cms/a870811d81480a7c66e22205dc766ed60ccfbcd8 create mode 100644 fuzz/corpora/cms/a897c77b4aae5eaf89957f783b9ea11149324669 create mode 100644 fuzz/corpora/cms/a8a43cc300edca57fa7a2b0eb498f95b124cc960 create mode 100644 fuzz/corpora/cms/a8b23404949efd185a20ca1886c5328c39e8906b create mode 100644 fuzz/corpora/cms/a90c62d7cddb067dee145894099cc0b0170298bd create mode 100644 fuzz/corpora/cms/a93c218d78d88ffb79d79ab370caa98552e39a1f create mode 100644 fuzz/corpora/cms/a940cb4deee82fbd2e4a09dcf67746ffd7d9054d create mode 100644 fuzz/corpora/cms/a97e208722c4bf9a84213219007111fc69381596 create mode 100644 fuzz/corpora/cms/a9b12d34c8d88b2d2fdc6586396b1b8d2917cb4a create mode 100644 fuzz/corpora/cms/a9fe4a2a73320e964add13a68538e02146690e45 create mode 100644 fuzz/corpora/cms/aa1fd96fb3d1309477fb1adc2365be1b67101d8f create mode 100644 fuzz/corpora/cms/aaa2215580c0d0ae0a9995fea1d5861298a223a6 create mode 100644 fuzz/corpora/cms/aafdf3ae0af424e45092c922219864480f0ac6ae create mode 100644 fuzz/corpora/cms/ab02322b9414f779128e4dc6287be36c1e48a1a6 create mode 100644 fuzz/corpora/cms/ab1973c78392ff1bb3fab840c19192da74f45f92 create mode 100644 fuzz/corpora/cms/ab4fdf981d106d52eee93e82d98066e39c364b84 create mode 100644 fuzz/corpora/cms/ab84a9548037f546371a560ac569fda6765fec5f create mode 100644 fuzz/corpora/cms/abc69e4a7d64d28c00b4a79613f4112fe6559743 create mode 100644 fuzz/corpora/cms/ac11939164446e92a0f80818c6f95f277bd08f96 create mode 100644 fuzz/corpora/cms/ac45bccf56dd2a6c1c69f71750be86585f7d4eb2 create mode 100644 fuzz/corpora/cms/ac93b282c297034b9bd739ec5948f61b722f79e6 create mode 100644 fuzz/corpora/cms/accecd7c005645ff9fc4b02bf0c7b1a633b23d9d create mode 100644 fuzz/corpora/cms/accf0d0df204d734422a615015de8cc4a8dc71d3 create mode 100644 fuzz/corpora/cms/ace26d88745489c86568eee221c0743f878c63d8 create mode 100644 fuzz/corpora/cms/ad653c982268019f2eb6a22073ee5ac8ad1ba205 create mode 100644 fuzz/corpora/cms/ada7522c0b95d95312348d49898effa9a7ed5b9d create mode 100644 fuzz/corpora/cms/ade03e188cdbf3a92259bb7856adcd6a79c49252 create mode 100644 fuzz/corpora/cms/ae683d2185517187a198342348afb42efddbf749 create mode 100644 fuzz/corpora/cms/ae842297cb82c6417b4748820bd350817e5ab4da create mode 100644 fuzz/corpora/cms/aecf73e1067933d97dd3a27d141b2dc3b6c0cfe1 create mode 100644 fuzz/corpora/cms/af1bcd6ec6daf0ae07ac1ed5d6ed4b5985281b2c create mode 100644 fuzz/corpora/cms/af4d7f957058921adaac529a92e47a8caed3e2c7 create mode 100644 fuzz/corpora/cms/af61c05c6022b1c5a7b809e921d9e791df39aaa7 create mode 100644 fuzz/corpora/cms/af657af64146f9cb4452866e2bb12c76567e7f22 create mode 100644 fuzz/corpora/cms/af79772cb94b103e78ed436b6bb3126d7be11847 create mode 100644 fuzz/corpora/cms/af9600008efc9adaf13d27c0d1fef75971eb9619 create mode 100644 fuzz/corpora/cms/afc201f75d8b853c2086a06b4f610a9b587823ec create mode 100644 fuzz/corpora/cms/b06ec2dd2a7a567203517d637e7f21bf736337ac create mode 100644 fuzz/corpora/cms/b09d887241d70e5cb14ad3d58f2303c9728da194 create mode 100644 fuzz/corpora/cms/b0c3b384c46c7447ba8af92e36e5aea97a0ed571 create mode 100644 fuzz/corpora/cms/b0f15745ad3f5cfa699df5bbe372fb739674589a create mode 100644 fuzz/corpora/cms/b1107697971223a8010b4b8ac3587518f7987b26 create mode 100644 fuzz/corpora/cms/b116e857d387b9a8ae48ce69f0dbc491b6b971db create mode 100644 fuzz/corpora/cms/b147f6fe7330d75f2453516e43583022d11f378e create mode 100644 fuzz/corpora/cms/b159c337facfc5deb9e9a7d8d9161beaca712bf3 create mode 100644 fuzz/corpora/cms/b183bc910e3fdcd7c65602cb6f8c96f959e84644 create mode 100644 fuzz/corpora/cms/b184b08df453af1889a9eff486b876bc18a03725 create mode 100644 fuzz/corpora/cms/b1a9a464e082bf06cbbc4319477a28048239c424 create mode 100644 fuzz/corpora/cms/b1b49ecc53c2072ee3f405aec7d9c05d68294dc3 create mode 100644 fuzz/corpora/cms/b1c42341b54a557617921bc262c78dd6cc3ea6d7 create mode 100644 fuzz/corpora/cms/b26b7ebd1c472648696afa625d5763fc45f8d87d create mode 100644 fuzz/corpora/cms/b31ae43e27fd6412b46abb2d529b435e9bacbd12 create mode 100644 fuzz/corpora/cms/b339fe6b3e902a350c9428ebf508057bd51c5f96 create mode 100644 fuzz/corpora/cms/b35aa1c43c614310c294a2924ba3a268ac220407 create mode 100644 fuzz/corpora/cms/b3c72346f3c6d6bed7aaaaf972138b34957fe5a4 create mode 100644 fuzz/corpora/cms/b3d7fc576345d6f63e0df559b50444e45f864144 create mode 100644 fuzz/corpora/cms/b41ad4d966b35f01d7b3e298945079411a87a787 create mode 100644 fuzz/corpora/cms/b424c9cc455d6ed1f0b0c13b2bc50ef21f10211d create mode 100644 fuzz/corpora/cms/b4e8c8315365343c4fb822f991723be0a249cbd3 create mode 100644 fuzz/corpora/cms/b513fc3fe53ee2b2ddc8f5213dd683cb1d851c4e create mode 100644 fuzz/corpora/cms/b52d6ee2542f7e8233e2251609a19f2cf262f5f3 create mode 100644 fuzz/corpora/cms/b5389dc60fadc9bf5835bfecf0b729c52d271783 create mode 100644 fuzz/corpora/cms/b59def76d9609412d857ac3789e880afdcd83b34 create mode 100644 fuzz/corpora/cms/b5b5c0f223269e8946dfcbba93c7f72b7b2108de create mode 100644 fuzz/corpora/cms/b5be266b68ab7c8590213113069bff6f6f992354 create mode 100644 fuzz/corpora/cms/b5d6d50ddf07b76f1b359436b18812ec42c0bc5f create mode 100644 fuzz/corpora/cms/b5e4043090ceb00fa628a13bcff61e3be7214406 create mode 100644 fuzz/corpora/cms/b5f8b61ae3b940e7b991fc19c508ada6c90a2295 create mode 100644 fuzz/corpora/cms/b65c569f5316aa39943caceed6f0514ef6bc622c create mode 100644 fuzz/corpora/cms/b66513924319d24fb36d90ae941d3116933613fb create mode 100644 fuzz/corpora/cms/b719ebc782111cdcc7118e31f0c7bd378b0d32a2 create mode 100644 fuzz/corpora/cms/b72f7897331a1fcb386da92ac2ba3062d7143faa create mode 100644 fuzz/corpora/cms/b85312a749e0e4d09f14de83d02aeb808eac9b2d create mode 100644 fuzz/corpora/cms/b85f938876c1c683e8ef3852af5a01677fb243be create mode 100644 fuzz/corpora/cms/b87f7967e31f73db2d15e8b021bec770f30048bf create mode 100644 fuzz/corpora/cms/b8d8d3933bf4443770be401479efd3422afd91a1 create mode 100644 fuzz/corpora/cms/b96462203a021cbd7a0592c7beadfdcf8fef1af9 create mode 100644 fuzz/corpora/cms/b994e1e07a33c341527118aeaf6d0e648b665dec create mode 100644 fuzz/corpora/cms/b9a494f511c7c440eef588b248a45b9c3bf9f136 create mode 100644 fuzz/corpora/cms/b9afb5cb2f7fb37ca919a9de132410890cbea270 create mode 100644 fuzz/corpora/cms/b9cb120be229d7688a6f39e4506f38f30582429e create mode 100644 fuzz/corpora/cms/b9d52c55b406b9e4953eaf5fee42b151d43dd8aa create mode 100644 fuzz/corpora/cms/b9deedf2b06c5822eca664592ccb358d26628d95 create mode 100644 fuzz/corpora/cms/b9e288823925a8837ec10bb64e72ab128a581b4f create mode 100644 fuzz/corpora/cms/ba1ea19aeefb8ddf0800aeacb4c66c33dae06912 create mode 100644 fuzz/corpora/cms/ba50cb4a08572f9d93788345dd114549d0809fa0 create mode 100644 fuzz/corpora/cms/ba68813e66ea477adfb7436d4c9b09def46e9a2a create mode 100644 fuzz/corpora/cms/baa4711a3725e5c23d20fce08593ae2501c3fd19 create mode 100644 fuzz/corpora/cms/bacd40a35bd364959f07178b90d1e430eff59b6e create mode 100644 fuzz/corpora/cms/bad331423fbafa9228d30994850eaba104501f4f create mode 100644 fuzz/corpora/cms/bb8b82323eebeb6c316881de1d2e77258b54b67c create mode 100644 fuzz/corpora/cms/bbe150f1cb4b9c948eded23964c12874fe06447c create mode 100644 fuzz/corpora/cms/bc2ceb8478b2a2e04f35ff21f1fea7b7f92a48c2 create mode 100644 fuzz/corpora/cms/bc77ffbade11d920ac7ccc7db59b9baa91e68e3d create mode 100644 fuzz/corpora/cms/bc811cce3668ae0f3090ebc12059d94175e25867 create mode 100644 fuzz/corpora/cms/bca62b0196f62700a082977307f761cd7ac505af create mode 100644 fuzz/corpora/cms/bcba95a9a87628d13c1fcda9e0c55c460980aa51 create mode 100644 fuzz/corpora/cms/bce2e7bb97fe9a046dc3c70d1d74ea39630b2b77 create mode 100644 fuzz/corpora/cms/bd6d95cb5c45daf153c6bfcbc92af06a4c2b031b create mode 100644 fuzz/corpora/cms/bd73ee62a0e23720982cb21be0965b8d767800c6 create mode 100644 fuzz/corpora/cms/bdac1b26cf4555a0ba2bbcb4d9ddc89c91aeeeae create mode 100644 fuzz/corpora/cms/bdf4fafa539a977b84e47c42b623b65de67d1b0b create mode 100644 fuzz/corpora/cms/be1c92bdaa371ad93c84673f14f027c59b43532d create mode 100644 fuzz/corpora/cms/be1edbf2205d33ae161c1ba11507e6f9c5dc5921 create mode 100644 fuzz/corpora/cms/be215a9f742c066bb881f74c72b82bc52a47e2d7 create mode 100644 fuzz/corpora/cms/be3646e4377de1f3afb3b3d6aa761cb2107eb879 create mode 100644 fuzz/corpora/cms/be513b4de7ca220c134c57948b2059280a660da8 create mode 100644 fuzz/corpora/cms/beafc07e0f188508098415c8d6ef98ae4e755e0a create mode 100644 fuzz/corpora/cms/bebd2d5b8ca8f9ce1f9c793034830002331f34e2 create mode 100644 fuzz/corpora/cms/bee5a9bbc09ed5784e3225eca1cbc4762317ebc8 create mode 100644 fuzz/corpora/cms/befcb952c4dad60f033f5d589f136b4eeee77970 create mode 100644 fuzz/corpora/cms/bf4599708f427e662227d17cc2b7d2f8b9b0d8bf create mode 100644 fuzz/corpora/cms/bf91f47d31923b5e9b55fed39e45f06235e29dad create mode 100644 fuzz/corpora/cms/bff7e726ce873c5010cb182f43f1f71eda7ca4c3 create mode 100644 fuzz/corpora/cms/bff96ff9c429bd33e7938dc78bee5dbb57e1c04e create mode 100644 fuzz/corpora/cms/c03b931dda6d8c623c7f9b4a0b166df683e15adb create mode 100644 fuzz/corpora/cms/c0c347f9e4f0eeda1d5a3564a92332adee94c8b1 create mode 100644 fuzz/corpora/cms/c0f042c602685c73f35ffadcea08e4a3756fd230 create mode 100644 fuzz/corpora/cms/c11e10a4652eb69c67c012dd522c314fbb00427c create mode 100644 fuzz/corpora/cms/c12f9b74f5f1f7a34a0da4e8774e8209676f9799 create mode 100644 fuzz/corpora/cms/c20acbcf42bc727763e49cba4c8488b32c02d4a5 create mode 100644 fuzz/corpora/cms/c25e47858ed0316645df0a58abe54a011a681ad7 create mode 100644 fuzz/corpora/cms/c272d5d0141ae93c4b541494ce4371756bd8bdd8 create mode 100644 fuzz/corpora/cms/c2798bd6b4644b8b2c758f0bb1cca340e2d54ddf create mode 100644 fuzz/corpora/cms/c2b5266b51fc05489aba41b8776edde463bb48a3 create mode 100644 fuzz/corpora/cms/c2d5d2b70b7c75fd1f2c79c3453f5b18b5ebb560 create mode 100644 fuzz/corpora/cms/c2d65a835040814c7089949b00e77c57ef407d6c create mode 100644 fuzz/corpora/cms/c304e49fd7ef4818a739c1cc79903c87915543f4 create mode 100644 fuzz/corpora/cms/c3497fe19ae5ef2a593b99ea555c1589982bf1e1 create mode 100644 fuzz/corpora/cms/c35a2fe54b99249e5fb5a5901d4ce1e491682cc0 create mode 100644 fuzz/corpora/cms/c381fd90524d5c0aeed1e681e12c847c33ac09bd create mode 100644 fuzz/corpora/cms/c3a1bd2aa5dfe03f033aee991959ab4d1131aa6d create mode 100644 fuzz/corpora/cms/c3a4ed09d2c4aaec8bdfae21defc61795f41f124 create mode 100644 fuzz/corpora/cms/c3b0bb0bcc7dea983eb9536a56dadc7c01509d5f create mode 100644 fuzz/corpora/cms/c4272f2e898602958ce975702c0aef8f6c28a7d8 create mode 100644 fuzz/corpora/cms/c44c3bf7a511dfba86e241e3bf09dbe5cfe427c8 create mode 100644 fuzz/corpora/cms/c455ccb75f8f3c488bfa5c9e44c1495baa86604f create mode 100644 fuzz/corpora/cms/c4604b509bdad5cbda1eb5ddbc289a9af07a456f create mode 100644 fuzz/corpora/cms/c497d324397330f6cbbe7e9bc3a17b9ec9ff30fa create mode 100644 fuzz/corpora/cms/c4f58f1815e500ffaa01f2eca952245416b2fa27 create mode 100644 fuzz/corpora/cms/c542c0351e6c38d6b27c8dea2c4404e58b83b42b create mode 100644 fuzz/corpora/cms/c59336a17d4718fce70641e48b35603cc00550cc create mode 100644 fuzz/corpora/cms/c5bf18822d7c322cdf6246d9848cb7102d86526a create mode 100644 fuzz/corpora/cms/c5db78726651bbf33d8ba18d1df10ccacd2dd5f4 create mode 100644 fuzz/corpora/cms/c5f161839cdff2f6c371cc19c1371e539e72a302 create mode 100644 fuzz/corpora/cms/c620e9b5d6d5e473ce134fd24da46f9ffb52aa36 create mode 100644 fuzz/corpora/cms/c6599f5e9685eae3db02e218a28583f75938e44d create mode 100644 fuzz/corpora/cms/c67c22f7d442df66cc7d7c9ad2686cbed32fa0fa create mode 100644 fuzz/corpora/cms/c6bb9305447598b48656de2a1f85035c7689c945 create mode 100644 fuzz/corpora/cms/c6c2988056ac6c42ffbe200cb0232d023224fe4e create mode 100644 fuzz/corpora/cms/c6eb22eecab164945f74391113ab0125ebe76d34 create mode 100644 fuzz/corpora/cms/c6edf0a248f5b4576138be8b664a1761cb2ee6ef create mode 100644 fuzz/corpora/cms/c8745fdbab9dce9078abdc00e2bded2fdfaa2689 create mode 100644 fuzz/corpora/cms/c8a1bc23ffd9f73e3874422623d3a210b2a96b27 create mode 100644 fuzz/corpora/cms/c8c06650e6d59f1e8119b96c1d90e51c13b4bf43 create mode 100644 fuzz/corpora/cms/c926a7eca3a4ee6e3a72cddd50c45394c1617138 create mode 100644 fuzz/corpora/cms/c967b85bb47cdb0085589fc9c3cda95aa3452c3c create mode 100644 fuzz/corpora/cms/c9942e909a823b80df0728be2ba7a8e1689e69ef create mode 100644 fuzz/corpora/cms/c9af3f9400fd489fa467450a314fccf164703085 create mode 100644 fuzz/corpora/cms/c9fcbcd40968c17d4ca563494a3ddf002fad86fe create mode 100644 fuzz/corpora/cms/ca00e9afbb6a16d2b4e457c192afde9cd277325b create mode 100644 fuzz/corpora/cms/ca19d4a3382ae6058c3e16bb48f8b4cbf3d588c8 create mode 100644 fuzz/corpora/cms/ca5af42cd58fce895bdbcb165ea17ebd942ccd55 create mode 100644 fuzz/corpora/cms/ca9142e1752ec1d174f059045e7d77634e8a6c36 create mode 100644 fuzz/corpora/cms/ca970c9504550bc8876375bb020b2c7598608473 create mode 100644 fuzz/corpora/cms/caa71b7d49fc35e505add6ff88d63992f0e236dd create mode 100644 fuzz/corpora/cms/caeababd01aee99ad64092195f6a813da04143da create mode 100644 fuzz/corpora/cms/cb5891bdd00390fa7580a097b539c1b3717a07f2 create mode 100644 fuzz/corpora/cms/cb7292791120a30c5f6b27616a30c7db7e5601eb create mode 100644 fuzz/corpora/cms/cb8f955650a068140d5202c9a6e29881930ba3a1 create mode 100644 fuzz/corpora/cms/cbe0d369c5fbae9ad7c08f353cba01fdffe5efaf create mode 100644 fuzz/corpora/cms/cbe654b3c999bf38106ddfe5e4773f31534e1769 create mode 100644 fuzz/corpora/cms/cbe73802376ddaac8478f98012db9f099ce3951c create mode 100644 fuzz/corpora/cms/cc392753bea2c7b8006c1e97f374ddee96ade373 create mode 100644 fuzz/corpora/cms/ccbf48f922a0c184cc08d9b5c62892339665d042 create mode 100644 fuzz/corpora/cms/cd21846f8551e9add1c59d69982d1f61ab5fbc33 create mode 100644 fuzz/corpora/cms/cd355280bab059d8289aa31a07b47931821c23f5 create mode 100644 fuzz/corpora/cms/cd48dd895efd09e7e7d8eaf0db84dd7390a8c301 create mode 100644 fuzz/corpora/cms/cd9e830912c93e745a7781dbdff9836cb78b487b create mode 100644 fuzz/corpora/cms/cdd47500d13771885ce4dc0ff1d02b9f98e726c1 create mode 100644 fuzz/corpora/cms/cdd786736dd0b9689b911847b134a3c3e07f87c7 create mode 100644 fuzz/corpora/cms/cdf38786969a6a5c70177cad61d0f25cb798d3d2 create mode 100644 fuzz/corpora/cms/ce22f6acdbe758406ba33534cee7af10a56ffe3b create mode 100644 fuzz/corpora/cms/ce77e3f3614de86f34de75165d151d2fbadac3a6 create mode 100644 fuzz/corpora/cms/cec423284945bd064a102b04b5c4ef383e9b80aa create mode 100644 fuzz/corpora/cms/cef32edf6d09b5faae0aae907acff1128066268d create mode 100644 fuzz/corpora/cms/cf8670434ef3365a3aba6d96439e180d3176d37f create mode 100644 fuzz/corpora/cms/cfa1e529870e7417266fe93f011ced303bb688a9 create mode 100644 fuzz/corpora/cms/cfbade2118f4c7157db29d1b331f71fea84a740a create mode 100644 fuzz/corpora/cms/d022d6286c68f6bec7de1142b44dc7cf17fa70e1 create mode 100644 fuzz/corpora/cms/d051e1a8f3f09b17e692c2e5e4d5ee9fbe48a587 create mode 100644 fuzz/corpora/cms/d06ca3cacb854fa216337580256de043730c73f9 create mode 100644 fuzz/corpora/cms/d09cc0f13acf0ba10dc755c377a4cb5faff698a4 create mode 100644 fuzz/corpora/cms/d0b186258c1898fbb6a112053185851bc30f496f create mode 100644 fuzz/corpora/cms/d1215d3d307810576197a30b3d1f18c57fc06db9 create mode 100644 fuzz/corpora/cms/d1284070705f1d846e7cc0ce6670a24ffe8b8e3b create mode 100644 fuzz/corpora/cms/d1cf2ba128df2a049e3078fc18abf5a3a44ea4d6 create mode 100644 fuzz/corpora/cms/d1dec66b4c4c319bd25c3ad36e9b3b37897dc72d create mode 100644 fuzz/corpora/cms/d219979441758857470f986179d200b9bbaef17f create mode 100644 fuzz/corpora/cms/d22de317a52c9fb355e36f968f9ed56ea85938ed create mode 100644 fuzz/corpora/cms/d342b4add4824739dec146eb10ab62bb005188fe create mode 100644 fuzz/corpora/cms/d3718135825d96e1eff50ff91ac5ce906a3bc517 create mode 100644 fuzz/corpora/cms/d37786e2c20c2de8133b936275f0f5fb40dcb7ea create mode 100644 fuzz/corpora/cms/d385353cb9487b1dc347d10915c394d105b63b26 create mode 100644 fuzz/corpora/cms/d38adcb0e018cbf2f464298a04f413d3417582e8 create mode 100644 fuzz/corpora/cms/d3c9ba976ceb7bcd654e7d9b66575ff45c400089 create mode 100644 fuzz/corpora/cms/d40f7793aacbb9576ed6eab1e685ce512e3e3448 create mode 100644 fuzz/corpora/cms/d444fc877f627e3e772e2e0f98cebe9ad0efb2d0 create mode 100644 fuzz/corpora/cms/d44e692a87d0fcb2ae7854466741d4723595773b create mode 100644 fuzz/corpora/cms/d4af156c7c2c8c06a700727dbf98da572fc55faf create mode 100644 fuzz/corpora/cms/d4c915224fa09082487b2c7aaa8f6c88e2ff7570 create mode 100644 fuzz/corpora/cms/d5637bb23c108b88d9362f1efea84bde08c2aa03 create mode 100644 fuzz/corpora/cms/d56f15ae1eb74ad009397f927bcfe7bead342bf7 create mode 100644 fuzz/corpora/cms/d57a74872db23d8e02163162a4878ef24c6b8798 create mode 100644 fuzz/corpora/cms/d5a988103aba87dc5a7030393d708bf1c55a9972 create mode 100644 fuzz/corpora/cms/d5b45c92146143a58601b32b337b8753bca28141 create mode 100644 fuzz/corpora/cms/d5bd876456b17a608a1dcb5e3ce9c5b41b15e67b create mode 100644 fuzz/corpora/cms/d614bf4ff6a2f430a0708514cf8cb88f1a393960 create mode 100644 fuzz/corpora/cms/d667312e66ecd12350f4ea669104f1fb32c32354 create mode 100644 fuzz/corpora/cms/d6ea12fc4176b56e5d767d417a8c064276e77a3b create mode 100644 fuzz/corpora/cms/d71ebff397b524a5d95bd2c02359116320fb8879 create mode 100644 fuzz/corpora/cms/d78aa01f9301fb4bd56626b5da5d090619808232 create mode 100644 fuzz/corpora/cms/d7909315d11c87fcb5981e0dc86b0fbbbe95b2e1 create mode 100644 fuzz/corpora/cms/d792eb1bc15b97c70ddfe38d8b0d9060941658f8 create mode 100644 fuzz/corpora/cms/d79ecdd901a3fba87f7a905adfda63480f944135 create mode 100644 fuzz/corpora/cms/d7a8528ab11f8b3ab9e51e2fec7eafd9135a827e create mode 100644 fuzz/corpora/cms/d7a88823336a1ce0cb3ec219f9d2f3b044cd9ebc create mode 100644 fuzz/corpora/cms/d808c0f2d288ed39b5249e3293418df088502f3d create mode 100644 fuzz/corpora/cms/d81548ae9d2c501f03732c62142ac4116f4a4699 create mode 100644 fuzz/corpora/cms/d82438517f194d59ed0e96b263d7dd277ef8825d create mode 100644 fuzz/corpora/cms/d87a5f2b05b78a63f3e92c05c5b4e59ed5d304fd create mode 100644 fuzz/corpora/cms/d88d6fbdc8684ece538f57094a57942e8e5d4118 create mode 100644 fuzz/corpora/cms/d8e570b879408b9d61bea49aa225d43c2f694591 create mode 100644 fuzz/corpora/cms/d9349f81782ddc0bcfc2a2414efbed99a59720df create mode 100644 fuzz/corpora/cms/d9484b0f00249414fa9559fa122c9f0e5acc30f6 create mode 100644 fuzz/corpora/cms/d94ccf8ebf5a2a387256abb1cf88fbaac67aa8b4 create mode 100644 fuzz/corpora/cms/d97791e8457251d6cd6e9a7c1d9a2685ec0ee8cd create mode 100644 fuzz/corpora/cms/d9d9f57f64711bb29b9f506d9ce0808eca687ae6 create mode 100644 fuzz/corpora/cms/da188bccc01ce521589506012568e9bf218349dc create mode 100644 fuzz/corpora/cms/da32f3c16d4049f82ff46686aa32b6b2f4cdcf27 create mode 100644 fuzz/corpora/cms/da33e41954997c24ad31f6c1845e18510b384f67 create mode 100644 fuzz/corpora/cms/da348bd234bfb38a991c04f2050cc52b2068b30f create mode 100644 fuzz/corpora/cms/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/cms/da4fce500ff509c71cb2c120d7a46189d01c0927 create mode 100644 fuzz/corpora/cms/da812421c565d7163f9515ad4a2cfda1e4bd48a9 create mode 100644 fuzz/corpora/cms/db34721b3f80fb577f0f52a700d9444f1af1437a create mode 100644 fuzz/corpora/cms/db659915ebbb43996f0dc012effc44b902422c7f create mode 100644 fuzz/corpora/cms/db7f6ad97fd40520f5849531130211850697d16a create mode 100644 fuzz/corpora/cms/db974310e55ab753253e2e416009b0a71ef0f2c5 create mode 100644 fuzz/corpora/cms/dbaa57e98dcdacdd921891e7d35b32a60d95f7a1 create mode 100644 fuzz/corpora/cms/dc3d045b0bf1572f1ee944d99238c2e95a7ac695 create mode 100644 fuzz/corpora/cms/dcb2795e17f8b65379b00b551023f43a3d017904 create mode 100644 fuzz/corpora/cms/dce12727fe7585ca4d7ad34a68f0c8c541fec941 create mode 100644 fuzz/corpora/cms/dce38ffe9ac046a57d3a8dfd108b3e0b856c917e create mode 100644 fuzz/corpora/cms/dcf5eb78850c0325c4ea694976f04d72bad2f062 create mode 100644 fuzz/corpora/cms/dd8621105567d83ca83ac3cc84b86c49ec2612c7 create mode 100644 fuzz/corpora/cms/dd91e156d508cf79d712818b3c50ab1cf878372c create mode 100644 fuzz/corpora/cms/ddd2c4c2384325fd6c81a4daa3cd8ae97f3a6c01 create mode 100644 fuzz/corpora/cms/dddbd33dce5862dbc06e626b53bf1ad05910a991 create mode 100644 fuzz/corpora/cms/dde5249cabdaa1247dc09a4ebb4f4a6667008872 create mode 100644 fuzz/corpora/cms/dde8683405915d50f7bc3ea3ffd905bcdc3f71d1 create mode 100644 fuzz/corpora/cms/ddef93ccc623d4b4b45c44e8a283a73f7b6650b6 create mode 100644 fuzz/corpora/cms/de0b080dfcbedf8180eba0e9a612501f26b141c2 create mode 100644 fuzz/corpora/cms/de8813b99c9c7fd45a94d5b985209f177855827d create mode 100644 fuzz/corpora/cms/df5124e61356abc2016c0e3f2409f3fb27af933b create mode 100644 fuzz/corpora/cms/df886ad4dc6a751f0e6aa21759101ab0aa57eac2 create mode 100644 fuzz/corpora/cms/df94849c736163240a965e6328d6829b09e623a7 create mode 100644 fuzz/corpora/cms/df9fea85fa50f863bf266be236a7e60e3ffb2e2e create mode 100644 fuzz/corpora/cms/dfcc32759f5fdc52fd41d269a174458fbd017736 create mode 100644 fuzz/corpora/cms/dfe7326a6117ec68fc540669843455d848fc19c4 create mode 100644 fuzz/corpora/cms/e0354ae69d9d83c9977d89c8e4551aab0d9789fe create mode 100644 fuzz/corpora/cms/e04c12045ad2414a82135e8cc6d6d69aa3f50dcd create mode 100644 fuzz/corpora/cms/e09ffe5b726901f9ef129fa30963d1aeafa755dd create mode 100644 fuzz/corpora/cms/e0b35eb707939d0ef01a36c314311b84c9e94743 create mode 100644 fuzz/corpora/cms/e0e41912c57a2dffffd93cdb453c9202d6eeb410 create mode 100644 fuzz/corpora/cms/e0f9c427245f24767def9208697328e5d75fcf40 create mode 100644 fuzz/corpora/cms/e10cc8380bbe578e2671c3c9500a41d018243759 create mode 100644 fuzz/corpora/cms/e1794b3f594b65870a84cd8ef27cc4644b529acc create mode 100644 fuzz/corpora/cms/e18a2ca915ce3419889409e2d27b50a6b269c4f0 create mode 100644 fuzz/corpora/cms/e1f690b6ede6348df60431c2106832d3213e5399 create mode 100644 fuzz/corpora/cms/e20c5461e3ce2d0ed40a86333dc5e6a6053fffd8 create mode 100644 fuzz/corpora/cms/e220af26332200e1b3aea46fe4de6d7e5a27b89c create mode 100644 fuzz/corpora/cms/e25d758334c4dcf17362ec55ee7e21fcf3aaa731 create mode 100644 fuzz/corpora/cms/e26cd082b8de6a7eb15fe8590bd7b48897bf391d create mode 100644 fuzz/corpora/cms/e2a708ff80a75211633d199f4d7e92a7649cc991 create mode 100644 fuzz/corpora/cms/e2daf3c6588eb39b69eb3b59e66e92f0771765e7 create mode 100644 fuzz/corpora/cms/e342d48c69fd237bdbc6f6e29e8df725839c617c create mode 100644 fuzz/corpora/cms/e3453f7efddf18658f898ebb5b18f40bdda041ef create mode 100644 fuzz/corpora/cms/e352108fdb8f842fe152350c0e30793ca49c9024 create mode 100644 fuzz/corpora/cms/e3a9da1655f6d945e92c7ccc190ffbcb7b181c51 create mode 100644 fuzz/corpora/cms/e43f53bc50d606d4540018164567c8682a677f16 create mode 100644 fuzz/corpora/cms/e46c541fd637d20d0292c1de8945f52496b365d2 create mode 100644 fuzz/corpora/cms/e53eb820231df49cfdf20c5434c2bdfee01e4377 create mode 100644 fuzz/corpora/cms/e585123cf8611dd98b1a98792440424127d92c2f create mode 100644 fuzz/corpora/cms/e608ded1c24ccb29e35f6276384a62f512f491c2 create mode 100644 fuzz/corpora/cms/e638f0ad925a16bb86218b18cc5c6e2290e62b4a create mode 100644 fuzz/corpora/cms/e63c196afdded2da459307444b2fad704909257a create mode 100644 fuzz/corpora/cms/e65fc6863de7a0527ea35618254e63e49dac7655 create mode 100644 fuzz/corpora/cms/e70646397df604a36cda403fbcb4fca9cd70ed1b create mode 100644 fuzz/corpora/cms/e75d4b76883c46c99abbb7eeb1d0b5127979d351 create mode 100644 fuzz/corpora/cms/e77ec46b3cdfaac9f4e216fe702edfdf53139fe1 create mode 100644 fuzz/corpora/cms/e7b9b56d1e38f0a5a31e419823804041acebce8a create mode 100644 fuzz/corpora/cms/e7eee82c9ed7f46ef70b22cae3da3238c3569b0b create mode 100644 fuzz/corpora/cms/e80975fb175fb5f1de50a624f2c66a1c0fd618b4 create mode 100644 fuzz/corpora/cms/e86b1f257c032a0bfdb6d19f3975994a80860003 create mode 100644 fuzz/corpora/cms/e887b211a94a4845bccdad10a958abb1c0d92880 create mode 100644 fuzz/corpora/cms/e8cce28db4c532048b27ebd33579ed1657eeb099 create mode 100644 fuzz/corpora/cms/e95cf95f972f4b262827b2507f8fb0901ee757bb create mode 100644 fuzz/corpora/cms/e9d1ac0e4d2858e4a7e60fa1870ef700939a3c45 create mode 100644 fuzz/corpora/cms/e9e3b3010c889928ea191f7fa624693bd2c49ba3 create mode 100644 fuzz/corpora/cms/ea54f88a6da0ebf686ad6ae766864d8e392629d0 create mode 100644 fuzz/corpora/cms/ea83144905175272eefd6a2e3cc3371f876a065f create mode 100644 fuzz/corpora/cms/eae1a0082dd0daaf3c0f0e1ea501284cfa6524c6 create mode 100644 fuzz/corpora/cms/eaeb1dd53a09040451236bde1f8176d989e84572 create mode 100644 fuzz/corpora/cms/eb58f170889d1b5a5034a19eb09e2e04d15ab422 create mode 100644 fuzz/corpora/cms/ec70a7b44d062240f0ac748d150d404e9c450a0d create mode 100644 fuzz/corpora/cms/ecf7b343bc1b3499e12e7e4221c98a7f310da47c create mode 100644 fuzz/corpora/cms/ee88113f458df10f87e88ce5444d0d8de4a853f7 create mode 100644 fuzz/corpora/cms/eeb0067a2652fa6ad7d2d61e108b5f303b472bfa create mode 100644 fuzz/corpora/cms/eee4648ecd67f940fe8518074c1b07a6409865d0 create mode 100644 fuzz/corpora/cms/ef1e36fb0644de2cf8b35dfd9792c832573df584 create mode 100644 fuzz/corpora/cms/ef786c25e50d3a66036fcca5bd237a5fa1a3cd46 create mode 100644 fuzz/corpora/cms/ef78eb3cef17b74b72d3ac9b48be73609cab2fcc create mode 100644 fuzz/corpora/cms/ef8fb98d4696de1a745fee1e7650b7ca652aaf5e create mode 100644 fuzz/corpora/cms/efd5b14005f92acf692568bb856803c4d1bdef60 create mode 100644 fuzz/corpora/cms/efe7c505af17b176e0317e4acce6459bd60559f4 create mode 100644 fuzz/corpora/cms/f00d1ff12217f4273b75dd84950eda5f82edfb3c create mode 100644 fuzz/corpora/cms/f0116c4d0c9f80caa6f0d4645e2bddb1961fea0d create mode 100644 fuzz/corpora/cms/f01ed8456aafe51d8bb190880e72e978d6af6a19 create mode 100644 fuzz/corpora/cms/f05d1bef58d7a7a0f37d10be82ab192641d84b18 create mode 100644 fuzz/corpora/cms/f092abf34c695a93ca2ffea95a3190abd341e7df create mode 100644 fuzz/corpora/cms/f0a019f3050bded468d86b5633a084977d461a93 create mode 100644 fuzz/corpora/cms/f0dfc0899b35da7511924d23b5bc0744a6ed75d5 create mode 100644 fuzz/corpora/cms/f142502dc206ba82fb86073fb9b18ac072c5f55d create mode 100644 fuzz/corpora/cms/f1800f11785fb71a1405d35074309720f49853c7 create mode 100644 fuzz/corpora/cms/f1b38c045244de610c68a96b6bd2e397ca71dc0e create mode 100644 fuzz/corpora/cms/f1c11899123173a0d4d63e118c712d19ac1d756c create mode 100644 fuzz/corpora/cms/f1cf66178f47f0d4adc68825588b405f40e562c1 create mode 100644 fuzz/corpora/cms/f1f4c27cf2e40fd6edd0b24e8176fa3605c10350 create mode 100644 fuzz/corpora/cms/f21f18dd4e32d9b21304929c55a3ad59b1ace1b1 create mode 100644 fuzz/corpora/cms/f2316d350fb384ec81e44a020b1b58448c937831 create mode 100644 fuzz/corpora/cms/f23bbf6bcd6da1091dc81f913234cff7699af221 create mode 100644 fuzz/corpora/cms/f241772625b45bd96311a5ea6f5f7edd15bc002e create mode 100644 fuzz/corpora/cms/f246ff22632e7efb9675698665ae43b1fcaefdb0 create mode 100644 fuzz/corpora/cms/f2e7bc0e7ce7395ee82c9df66bc3e6c9dcc2e371 create mode 100644 fuzz/corpora/cms/f37bd721a8407a530b175ea50c33c6f996ea82e8 create mode 100644 fuzz/corpora/cms/f3a1d56d017eaec7143c3cce480dfa49fb4fbea0 create mode 100644 fuzz/corpora/cms/f3c6fad094a0dff539c9a312db077faca2774317 create mode 100644 fuzz/corpora/cms/f4495082309756a0e51f9d215dfd2531591ae8bb create mode 100644 fuzz/corpora/cms/f480d8d0001db7316335ac5acd6cf76e037da499 create mode 100644 fuzz/corpora/cms/f493d7babb8feef1752b3ef133f9ac3e5aaf1f2b create mode 100644 fuzz/corpora/cms/f4a4394ca7a634830347e0f8964ce0fb5d54e19c create mode 100644 fuzz/corpora/cms/f4cba872fe05bb1bc729b4169c261062447c9dcb create mode 100644 fuzz/corpora/cms/f5647013861f97ff4bfed588e1ef0c33bb147413 create mode 100644 fuzz/corpora/cms/f674d660b1bb698903329921a852e147abe1c9e1 create mode 100644 fuzz/corpora/cms/f6b71b1e44df232d6cb570003575c4db1480a0ad create mode 100644 fuzz/corpora/cms/f6cd11ba036959a0651e0df5c164571e90190c9d create mode 100644 fuzz/corpora/cms/f6d65c99dd2377851e9a284a70d21b28b6859c17 create mode 100644 fuzz/corpora/cms/f6f4e294c7281aea1c7a023c5c27046eaee6085e create mode 100644 fuzz/corpora/cms/f721fb1d9cfc62a20946a617ae40289eb43870d4 create mode 100644 fuzz/corpora/cms/f7661e619add345911a9d88d4a5d75ed696412ef create mode 100644 fuzz/corpora/cms/f78abf8e1ba588cecb87deee994e03e34c2038ba create mode 100644 fuzz/corpora/cms/f78d4fb5a8f06f67cc7da38cfce9fe60810fbc6e create mode 100644 fuzz/corpora/cms/f7c08ef3635728e8e4731f83355b01aab8361423 create mode 100644 fuzz/corpora/cms/f832c4b21eb5d68a4518790f4690689e6dde20ca create mode 100644 fuzz/corpora/cms/f85fef23f323c0428044b25e1cb06254d36cd940 create mode 100644 fuzz/corpora/cms/f86c1bf781cd5c2e81a091b73507cec2eba43420 create mode 100644 fuzz/corpora/cms/f916c19998e64c4d3a956b891aae2be4f040f784 create mode 100644 fuzz/corpora/cms/f91929d59d1eaa83d1f21b29e27f22457844c819 create mode 100644 fuzz/corpora/cms/f9591e4492af88ac4b7936e88479bdf96282359a create mode 100644 fuzz/corpora/cms/f9599646786427881ed60010fd368278bca7024a create mode 100644 fuzz/corpora/cms/f95cfd454a3b1ded3d39543068279431ef7fc9d3 create mode 100644 fuzz/corpora/cms/f963ef21d7a492d4bea5e2a32576f62ad5d7069d create mode 100644 fuzz/corpora/cms/f96af49b8aa91ec84b8b74789964b9b37b9c4898 create mode 100644 fuzz/corpora/cms/fa87e3c03c0b05f1b3c457bb1683ab24c81ad0c8 create mode 100644 fuzz/corpora/cms/faad6a1c17e4adff6645742c2b3296a05720c564 create mode 100644 fuzz/corpora/cms/fab88e082d016bbdc1cac9b0967b9c4ffdf08a54 create mode 100644 fuzz/corpora/cms/faba8911cafb7b4df0c6715ee5222f3e084ec5cf create mode 100644 fuzz/corpora/cms/fbb64e8fee88a898624ccb4187b2b3813d88c2a5 create mode 100644 fuzz/corpora/cms/fbc5b221d7ca2df5ab6fc666b9346e712542cd77 create mode 100644 fuzz/corpora/cms/fbdeb045e188d582574421743d6f3ee9993749e4 create mode 100644 fuzz/corpora/cms/fbe74f6a8ffd21ec64c4e88558b40486e2574b24 create mode 100644 fuzz/corpora/cms/fc0d6bf888342b8d08da67c3c5dc0d9af665db9a create mode 100644 fuzz/corpora/cms/fc754b449273b7c30806c7b39f7e8dbd65c5c8f5 create mode 100644 fuzz/corpora/cms/fc8991393612ffca56f063957a8fcd58ee538811 create mode 100644 fuzz/corpora/cms/fcbbdf361ee0874f6c06adc82cfe1a57d52190c0 create mode 100644 fuzz/corpora/cms/fe0a3efea14c75d01fd770acd01b0348c5899a3b create mode 100644 fuzz/corpora/cms/fe1010dc430101b98214a96cb2391f1f742b1ccd create mode 100644 fuzz/corpora/cms/fe362fefbfbe61414513f51a04d8baf60102afe4 create mode 100644 fuzz/corpora/cms/fe6851d0eff45601180e6056e2b3b597bc72c2ab create mode 100644 fuzz/corpora/cms/fe769d5acbfba1336aac310c4a42439f524f331d create mode 100644 fuzz/corpora/cms/fe81d16b7a1d9ab76a5e6ac3a8be487986c24d61 create mode 100644 fuzz/corpora/cms/ff08a9a2b2b1d8bcb678a60e30b4b4c542e287de create mode 100644 fuzz/corpora/cms/ff27cc7559ba6d40aa01235561d925eaaa7654f6 create mode 100644 fuzz/corpora/conf/00cf9be097833c168f03f04dbb716ab0c4748308 create mode 100644 fuzz/corpora/conf/03a2f9836be3c0042e47ebddf64ff4ccd7c54486 create mode 100644 fuzz/corpora/conf/0443dd5488d14b39326911b5673e50bc343ffaa0 create mode 100644 fuzz/corpora/conf/056e2e8f34bc654e6c2a9aa863c179fde704917d create mode 100644 fuzz/corpora/conf/05b1421d9662f65d3d35ef06b0570aa3ac3e1cee create mode 100644 fuzz/corpora/conf/07b2d9bcd5150951604cd6a4ae50086bf6690e8a create mode 100644 fuzz/corpora/conf/08534f33c201a45017b502e90a800f1b708ebcb3 create mode 100644 fuzz/corpora/conf/0b28ec9c87f258a9671d0aad25da0b8f1c7d7c2f create mode 100644 fuzz/corpora/conf/0db36cd42aaf4655e060a665b22230f76f22f8d9 create mode 100644 fuzz/corpora/conf/0dc7cb14b650ff202ec2921cb21f96e2dff3cf75 create mode 100644 fuzz/corpora/conf/0fba8cb6eccf6674d13833b540bc23620f18ee14 create mode 100644 fuzz/corpora/conf/0fdb92c685531f3ddcfe7b3dcf5928ed2b163671 create mode 100644 fuzz/corpora/conf/14d162541bb2358cfacb39122771cf4eecff7787 create mode 100644 fuzz/corpora/conf/1579249a889e3745d2c8e93e024cc46879f428a6 create mode 100644 fuzz/corpora/conf/1602ce2d70dad4e281a47f33a67e9ad2eb2b72d6 create mode 100644 fuzz/corpora/conf/165a922165e5fa9acb424d432680c181fda4aea7 create mode 100644 fuzz/corpora/conf/1723de4d4ba07a5eea87e93506af6b4d22182068 create mode 100644 fuzz/corpora/conf/18b445ec95891c1c58a1c91ed0becf54b003a25c create mode 100644 fuzz/corpora/conf/194a4c8d16829e4299f665ad23c17665e63f9694 create mode 100644 fuzz/corpora/conf/19832e3365e6498d55c0c3f88fa1b51c1b95f6a0 create mode 100644 fuzz/corpora/conf/1cfa62cebc9a469bfb0b44ef595b656faf94ec57 create mode 100644 fuzz/corpora/conf/1e4dc974b1d10e727c143ef0a7bef2ef5377e0d9 create mode 100644 fuzz/corpora/conf/1e7527dedb1dc2237cc0781d180d13b1aa65c256 create mode 100644 fuzz/corpora/conf/1e9487d79e3742d7fbdf8eacb6eb958b591132fc create mode 100644 fuzz/corpora/conf/1ec92d6abc80d64950950a2bf35d302416fa87a4 create mode 100644 fuzz/corpora/conf/1ffc1ec363170c85b4e64f4bfdf93b6a88ce7a2b create mode 100644 fuzz/corpora/conf/20484368a1f854a0bc9f95537e2bf1b467a8c1d1 create mode 100644 fuzz/corpora/conf/2147665a997c8703b2514bc6f592eddeb2ad7e22 create mode 100644 fuzz/corpora/conf/214a87cf956171a4e4a6842208efbe184f446b81 create mode 100644 fuzz/corpora/conf/21721e43312a4fb4d181ac2e1bb5da866679fa1e create mode 100644 fuzz/corpora/conf/21961106fe422f74814f9469591b6e566c75ef67 create mode 100644 fuzz/corpora/conf/21cd6d534f12ebd26b68782141edb81316afa004 create mode 100644 fuzz/corpora/conf/23949ab306f3866c8fe4c73352e9ba0f22a029d1 create mode 100644 fuzz/corpora/conf/243d077c97d0d9ce87d7d01881cb86e5ffcdda3b create mode 100644 fuzz/corpora/conf/2475acbf8d44cd00f7651cc0bfea5c721be0103b create mode 100644 fuzz/corpora/conf/262e0bbcdfc27e82338ce9be7ee338f4b983c2de create mode 100644 fuzz/corpora/conf/2704af355accdd17e59da4718839d8f5671efdee create mode 100644 fuzz/corpora/conf/27715d2a2d6975e8c8110b98495030910fbd980d create mode 100644 fuzz/corpora/conf/27bf461ea7ed89633570cd0c11530d84b66c130f create mode 100644 fuzz/corpora/conf/27ce32eb3b498a9287e2a0537398256535752a52 create mode 100644 fuzz/corpora/conf/28aa251bbb051b96b7457b7d75a889dac7bbb9d2 create mode 100644 fuzz/corpora/conf/2950d5d8dfe23fce6214aea50bbf21f9ae534bc9 create mode 100644 fuzz/corpora/conf/296f7f63a83b686f92887d870188505851f3ea0b create mode 100644 fuzz/corpora/conf/2af5ceebe9e884c1d5be232740198a624fc51c7f create mode 100644 fuzz/corpora/conf/2b49f8bf40bfdab4f3a87d280b4f426b0e0f8f24 create mode 100644 fuzz/corpora/conf/2bfef90fa02aade40e18fa58febeabaf39691e1d create mode 100644 fuzz/corpora/conf/2edaf4b586aa0335925a407ac4076a3bd072e86f create mode 100644 fuzz/corpora/conf/2f1718cbcd840c506d3da03ba7c9efb2bbad84f4 create mode 100644 fuzz/corpora/conf/32021db54dfb121c3da6a1960ee73d27464dc731 create mode 100644 fuzz/corpora/conf/33d115dba53b17d34609c9ffbcb66c6aabf3ed61 create mode 100644 fuzz/corpora/conf/33e8951fe1d7864f37bc874e1ec2faeebbe608d5 create mode 100644 fuzz/corpora/conf/34d6746036cff188bd48882c52fb6fd4545ca180 create mode 100644 fuzz/corpora/conf/354a326ff39512fc85c55cf1b1d7a4c6b420f631 create mode 100644 fuzz/corpora/conf/3640e0ad75a737affa51a4cbb5f12b72e2b9eee5 create mode 100644 fuzz/corpora/conf/36a6095e445c40716d0378a9896de3d8bea03d4b create mode 100644 fuzz/corpora/conf/3717c2e0bb2f29a5f78d726426ad668389fce8d3 create mode 100644 fuzz/corpora/conf/371a180c3a41a49fdb8ffc354a5561b1d9382291 create mode 100644 fuzz/corpora/conf/37411e3ed0a0fe3f3448c92d0cdef4bce7c64467 create mode 100644 fuzz/corpora/conf/37638b16090ebd379c090e7111d79c8ea207beaf create mode 100644 fuzz/corpora/conf/378d62073c4b09a633181146e301931ed7586eb4 create mode 100644 fuzz/corpora/conf/37d822a3157b0b604f155dd8571c49eb99e787aa create mode 100644 fuzz/corpora/conf/382049a04754875523bd0c3f4d128244e8c827a5 create mode 100644 fuzz/corpora/conf/38998cff8d16fecfe3c182de5b73dcf06157f8de create mode 100644 fuzz/corpora/conf/39bb0b34dd4ccdffd50b3bcfd3a497a122b1b0f9 create mode 100644 fuzz/corpora/conf/3b2010a23317c2221f4c61a62ccc9c24297be058 create mode 100644 fuzz/corpora/conf/3b824fefd171d07d9e99da5422b9a4847af3b22d create mode 100644 fuzz/corpora/conf/3d0c9e3e8dbca6210102838b7ba6fef43ad294b6 create mode 100644 fuzz/corpora/conf/3ee58dc53eeaf26f617e287dc4e1ad3b53841983 create mode 100644 fuzz/corpora/conf/3fe3452c96b452f05adee3fd27d9c59a5c9ed4fb create mode 100644 fuzz/corpora/conf/3ffb8da40ecb5adf79a13ce706f8adfb902639b5 create mode 100644 fuzz/corpora/conf/41471f78b8978370f54737836f0db16153994d5d create mode 100644 fuzz/corpora/conf/420681cdb2fadc3ad9c912750e7fc0434626ab6c create mode 100644 fuzz/corpora/conf/42301d00386102b58ba7dbf808a9c7369599f906 create mode 100644 fuzz/corpora/conf/4365aaa395c09db2b6b3d57026ecb76711358aaa create mode 100644 fuzz/corpora/conf/44948ffb307b70bfe38cda5ccaa42231e9f66719 create mode 100644 fuzz/corpora/conf/44ea1a34d5441b610cf6d142f5cc90ecd2778d7e create mode 100644 fuzz/corpora/conf/47580e9e07c1cfa05cf91676d825c5ba1d11704f create mode 100644 fuzz/corpora/conf/4763a2b062c9f30ab4537e2daa78dffd6a53b7d5 create mode 100644 fuzz/corpora/conf/47f54ecc91c8e7d42c899c091f261cb2498fce61 create mode 100644 fuzz/corpora/conf/486a44d15edf63321aed662f23015e2c2cb1ed63 create mode 100644 fuzz/corpora/conf/48a9e19ad1609ed223cc1ee78e78bfcb587df2a4 create mode 100644 fuzz/corpora/conf/493295578a55910412b8d0e6744ea51110931e0d create mode 100644 fuzz/corpora/conf/4991f5d902f3c74cce670fe01874d5e6a9eed902 create mode 100644 fuzz/corpora/conf/4b608b28aca231264ef58daa304bdf4097aecd37 create mode 100644 fuzz/corpora/conf/4be3618c16b46eda6abb0e35a6e613747e5c7b42 create mode 100644 fuzz/corpora/conf/4c38e4ac639dcaecb2f879aff86f6190bf555991 create mode 100644 fuzz/corpora/conf/4c45f399582f3c740928d8424582612c13d4d9d8 create mode 100644 fuzz/corpora/conf/4d155dee0c6879b034fb6b81fa37f71d9076ad85 create mode 100644 fuzz/corpora/conf/4d93e7aebb5de2f95291d8c3464e17d7846d87be create mode 100644 fuzz/corpora/conf/4dc0a769260a74b01b441ef573437d4c9cf4b8ca create mode 100644 fuzz/corpora/conf/4e1f07dde39d7d750bc97dae84d2765f69db4da6 create mode 100644 fuzz/corpora/conf/4e6bb9e0fe5bdb9fec7856d9a0188752ab715ba0 create mode 100644 fuzz/corpora/conf/4e739aaed17ae9b78f7c7bdc8612a30f0900e4ba create mode 100644 fuzz/corpora/conf/4e741ccc1d92e1687c12c4d9dd0412540420cbec create mode 100644 fuzz/corpora/conf/4fb7415354bc93bc1ef4546c29c60234e3657282 create mode 100644 fuzz/corpora/conf/5023cd314fcd0d77d59f85aca3e9aef2352cd651 create mode 100644 fuzz/corpora/conf/50c06bfd4d862ed0bdc309777e50a68c9811bb11 create mode 100644 fuzz/corpora/conf/50f8e9c9209c95fac08e1914aea762a08a5a158f create mode 100644 fuzz/corpora/conf/54f95b426dfdeb8de801fe1ebcfe6cd0fde78ffc create mode 100644 fuzz/corpora/conf/559753d7725c93631b20f122b9035dc11bf49578 create mode 100644 fuzz/corpora/conf/563261feb1febcef97696b0cbf018eb53bfe4fac create mode 100644 fuzz/corpora/conf/56e41baf67c740e015b8e0291efcb402b0328f77 create mode 100644 fuzz/corpora/conf/572cbf25512d49029f5da8ba9e92f1a46d9fb5bb create mode 100644 fuzz/corpora/conf/584a2a7303aa9ceb0f67dbe46d6bdffbd19e0e0f create mode 100644 fuzz/corpora/conf/593a8e89ca280d0e06ac976041f086054f21f487 create mode 100644 fuzz/corpora/conf/59466f3ecca448339717e0edf32a766d405caf51 create mode 100644 fuzz/corpora/conf/596edc9243015be49aedc698d60e44fbd4374570 create mode 100644 fuzz/corpora/conf/59d31afc7eb98ebdba2525eb3beae4e9770a0053 create mode 100644 fuzz/corpora/conf/5a2edc7a7bc1448a7ec9f8ffdb70772e968eb22a create mode 100644 fuzz/corpora/conf/5aa6be191d4b8373f6e834a79c5a2d00806e9ee7 create mode 100644 fuzz/corpora/conf/5b33c96cd57c5650efd3591625e99eeceaf5fadd create mode 100644 fuzz/corpora/conf/5bcf6af4637558ac7d9b5047a3d65917ceceb78b create mode 100644 fuzz/corpora/conf/5d33ab722a6773c95ead5226ae30749f6bcd8aeb create mode 100644 fuzz/corpora/conf/5d680e37cbb59143b226ab3257f975fe73a5ddb8 create mode 100644 fuzz/corpora/conf/5ddd521b86eda6b95428f60facdec994188fdb23 create mode 100644 fuzz/corpora/conf/5e56e3a0e582f00a450d65984f5dcc01f630c1e8 create mode 100644 fuzz/corpora/conf/5f631dd599a5212b3d3c47eae4d418ec66962a38 create mode 100644 fuzz/corpora/conf/5f8b0ea3f43cc57c10c3c3e866872d8fb005f97a create mode 100644 fuzz/corpora/conf/5f942b875003fc8fdebd3a523a639d539b580df2 create mode 100644 fuzz/corpora/conf/5fc541b76bbb108cb8d589759aa0d2a0b0fdc779 create mode 100644 fuzz/corpora/conf/5fe6be7d9cecb84d95e52136410029d494df3818 create mode 100644 fuzz/corpora/conf/612b067c2a1fb1ff7f5aa0b61d2f6d0b27fa4ee5 create mode 100644 fuzz/corpora/conf/613b7808c79ec960c426d3405be1d1f197fff79b create mode 100644 fuzz/corpora/conf/617e1615ada210f23ce64362e536c429e9a6c6f1 create mode 100644 fuzz/corpora/conf/63661deb912d51625a4fe8bb77aaa150a4450b00 create mode 100644 fuzz/corpora/conf/64c81068dc8152ea350b8b0a01698cf07a37656b create mode 100644 fuzz/corpora/conf/655e897cad832facba0d70c8f5d5c5f5257294e4 create mode 100644 fuzz/corpora/conf/65b1dc70d51326c3cac55855f1ff360196db8280 create mode 100644 fuzz/corpora/conf/6648cf27c5ab17adf189e7320641552bc19aedd9 create mode 100644 fuzz/corpora/conf/6715dc5c07c97c9f542a22845f9a12857a14c1dc create mode 100644 fuzz/corpora/conf/6866dd35fb6adf4e0b24b6e38bcdda450ddc2fd0 create mode 100644 fuzz/corpora/conf/686e1b3f7eb760b4d0960a52f5bc720ec3318f13 create mode 100644 fuzz/corpora/conf/686f980fbd1972b306d290637b93d8a3599ba463 create mode 100644 fuzz/corpora/conf/68c1e121c566a4eb98cb6e727148a1a086000da1 create mode 100644 fuzz/corpora/conf/6b641765fc230278f55e2c0d15fb9322424aea28 create mode 100644 fuzz/corpora/conf/6b99ef868dc1f028184a0700d134f466c2c3b26a create mode 100644 fuzz/corpora/conf/6bf9802ed02dfc9bade51e0a4218dbfde1c4b3a5 create mode 100644 fuzz/corpora/conf/6cbd93d321113828097f70d78a3fadb43ecd01f3 create mode 100644 fuzz/corpora/conf/6d57948fcdba756ecce10be0b5eee83a100feb9f create mode 100644 fuzz/corpora/conf/6dbd3fbc25d658de3ca7555b836c64664195222e create mode 100644 fuzz/corpora/conf/6f370eff9ef5fd9105afd216687a94bd612782e9 create mode 100644 fuzz/corpora/conf/6f71933daf30e82e52b2d2eeb356a95833d8126f create mode 100644 fuzz/corpora/conf/6faecd6ee5ecb838d27540410e192519e60bbf24 create mode 100644 fuzz/corpora/conf/70968964eb6d15d9aad379f1c69ac420decf2ae3 create mode 100644 fuzz/corpora/conf/71110fdbb87e3144bb764d7ad4eb20f9ea94c6a4 create mode 100644 fuzz/corpora/conf/718f2d929525f99ab74ae6ebcbd05064f543ad7c create mode 100644 fuzz/corpora/conf/719d708649871814181291db70291f94636d17d5 create mode 100644 fuzz/corpora/conf/72f1093160db7b0812d71750b581d3ecaf7e395c create mode 100644 fuzz/corpora/conf/735f1146430134f6ce787961194f5f4c691ee4a9 create mode 100644 fuzz/corpora/conf/739f21b6a39569fd8a576976691b0bb8f04bd52c create mode 100644 fuzz/corpora/conf/74034ce2ec06344150f38cdc6d48638446138c0e create mode 100644 fuzz/corpora/conf/76560f668c1900d645d7b0a9c93d8735f721fdf6 create mode 100644 fuzz/corpora/conf/76a0d0fddf64913b905e2c75b4af1bccaf5457c6 create mode 100644 fuzz/corpora/conf/76af7e9601aa94a02e5aa81c4bc76b69fc898dc6 create mode 100644 fuzz/corpora/conf/76e183d7a805cdac1be9aa252c7c96a483b794e9 create mode 100644 fuzz/corpora/conf/78947ae02be4c8ebed777cca7aadcf9046270978 create mode 100644 fuzz/corpora/conf/78a6d34c8215691bc93a1830e0b132b6be05920a create mode 100644 fuzz/corpora/conf/78bcbb40da2e086aa88189c382e02bb0d5fb41dc create mode 100644 fuzz/corpora/conf/78bd974478bd7e07890f9c9e88a3473bad2ce070 create mode 100644 fuzz/corpora/conf/7931605428e867773c8fbc102874f431f7f39acd create mode 100644 fuzz/corpora/conf/7cc5a637f3d7e2d11a4f3fc60061208befae5fc8 create mode 100644 fuzz/corpora/conf/7efe16907681e363e7dec6c8d876fe9fb9b5479b create mode 100644 fuzz/corpora/conf/800506d2d5701894ab9ed2937c394c5e301033cc create mode 100644 fuzz/corpora/conf/835f141de99ec3bb241d6f6581dc4a3da8fcfc35 create mode 100644 fuzz/corpora/conf/8442b86ab4c6e01adb53f048803c94b9373ba689 create mode 100644 fuzz/corpora/conf/8460fb6a0d834f830d95433e9462335155cac4f6 create mode 100644 fuzz/corpora/conf/850cf1879a4ba4d70bc25f9534b025f58ae05e6b create mode 100644 fuzz/corpora/conf/857c6301b58d7101e046e303fd71ee74134a6014 create mode 100644 fuzz/corpora/conf/871931f6c9e58e2cc547301bf70f0b61a4e68699 create mode 100644 fuzz/corpora/conf/87fdc1b202f4e565cd90e7bcb1c722c2184f4c02 create mode 100644 fuzz/corpora/conf/882e26d0b0c69267b6b87212859d803e2b1fef8a create mode 100644 fuzz/corpora/conf/88f8b9a7cea3f231c6a720f960880f92ed42a9f5 create mode 100644 fuzz/corpora/conf/89a2908d66070bbb8a795292f259bb63e5b82df5 create mode 100644 fuzz/corpora/conf/8c5d4dd99f6c9611131340eb4b352675f8fd482c create mode 100644 fuzz/corpora/conf/8c86b9760e5063ffb2bd01ab481d6267fd92d71d create mode 100644 fuzz/corpora/conf/8c8704e1d52b83e142890bb6e4188ba30cf8b3ee create mode 100644 fuzz/corpora/conf/8d14a2db57a4b340a653ee92ac187c7dc2e84781 create mode 100644 fuzz/corpora/conf/8df9a1d106c91bc340a5a5d06dcb0a4dcdfb8099 create mode 100644 fuzz/corpora/conf/8e926f8f56c0c812cb78ed00bafeaf3a27be3680 create mode 100644 fuzz/corpora/conf/8f2dea913bf88f52413db2187d05bb851bb0567c create mode 100644 fuzz/corpora/conf/9206a323d38d1c07e86625cc8c66f5a2cadd0c22 create mode 100644 fuzz/corpora/conf/9212dd543f6e3e40be8ffc233e7cb04146816f4b create mode 100644 fuzz/corpora/conf/92d162adb4f413ee945ca44a912792b63acacbba create mode 100644 fuzz/corpora/conf/92e57b20c2ec057d02a714d545d9605b170e9d57 create mode 100644 fuzz/corpora/conf/94e10b1a78b755e6d3d5310eb606dc5d3ccddcc1 create mode 100644 fuzz/corpora/conf/96e59dc7883fb9bd1c342e18c7d600013067d20e create mode 100644 fuzz/corpora/conf/97d1f8d6abad1b5758223db477d3c245c9f818a6 create mode 100644 fuzz/corpora/conf/9854be52d2c1132ad118509461ffdc55a51980fb create mode 100644 fuzz/corpora/conf/9882148a3924e68161586406c4d54f5818ebdd1d create mode 100644 fuzz/corpora/conf/9b33adbe9a4c457e52804c055f8557e5188bb723 create mode 100644 fuzz/corpora/conf/9bc53e2896b041add435121fdf8f4c3c1592b408 create mode 100644 fuzz/corpora/conf/9d3b9ff89e99a805da5da2751af839b6c5050f82 create mode 100644 fuzz/corpora/conf/9f116a6c88df0b5453877dd8e8214cf60f20b760 create mode 100644 fuzz/corpora/conf/9f15878240c8f9b3ef0d8d1105216dd9fcfb1ddc create mode 100644 fuzz/corpora/conf/9f965b5087904eb5bdf129ac572424fa6a5f3405 create mode 100644 fuzz/corpora/conf/a0557af8b6df66468b451fe949a5d04060af05ea create mode 100644 fuzz/corpora/conf/a05ca89065473db89e2f0ccf64a82b27aeb37856 create mode 100644 fuzz/corpora/conf/a21836f1a1b792ec8e8ab08a5e8e7f9fae86c5ed create mode 100644 fuzz/corpora/conf/a25ab8b81e830ff7ad2a2f03ab9df204d1f67fe7 create mode 100644 fuzz/corpora/conf/a291f53cd0254e1a437c1b026754f0a7b1305903 create mode 100644 fuzz/corpora/conf/a2f9d59968b82a726d0d399072b66033d9c6b89c create mode 100644 fuzz/corpora/conf/a399d5fb2bcf8d5e534f7ba2928f60d4e413014a create mode 100644 fuzz/corpora/conf/a3a27c1839088de95e79a022f666cadb1100826f create mode 100644 fuzz/corpora/conf/a41ed3029eb8b5c23b7b52d646403c316c61da21 create mode 100644 fuzz/corpora/conf/a65202e9babe0bc385c31cd35c54416661fb74ba create mode 100644 fuzz/corpora/conf/a692928b39f4f03b96e33c785833ac2540458468 create mode 100644 fuzz/corpora/conf/a7204b2700de03ee26660a0a7ae49d172bd98cce create mode 100644 fuzz/corpora/conf/a7a3f3da115dd5c2479ef4000d8693c14885b8fc create mode 100644 fuzz/corpora/conf/a8124d67386b881cbbe019d9e1056748cefda8b2 create mode 100644 fuzz/corpora/conf/a813c6dffb1448dbdc453cd1966bf7a9cfdfca83 create mode 100644 fuzz/corpora/conf/a85e392bc56beb1c1e44835b0b46c00a55f48fca create mode 100644 fuzz/corpora/conf/abb91907b3789197b80726f1fcd5fe576a0b8827 create mode 100644 fuzz/corpora/conf/abf43d68bd2a7dd11f7fd9dcc5678ea4d74d26b9 create mode 100644 fuzz/corpora/conf/ad050adabdc47083219901f132c267fbecbfab34 create mode 100644 fuzz/corpora/conf/addf920e526cc70535d1cc225c4e29ab3db64003 create mode 100644 fuzz/corpora/conf/af9c0daef5bdb376c9bfddd4b7387bf9a736646b create mode 100644 fuzz/corpora/conf/b0a342a8fccbcda74714726ed45fcde265292682 create mode 100644 fuzz/corpora/conf/b1dd159fe6894bbb25b0a9e0ca2ff252fba36d3b create mode 100644 fuzz/corpora/conf/b358846a4250e43b43f5bdabda6bd20703b554c1 create mode 100644 fuzz/corpora/conf/b38607a26ecb74cd5a7a362b4cc3d54ddddd3b34 create mode 100644 fuzz/corpora/conf/b3c742415434b1fb8b5ac8a9c58f759041ddca3d create mode 100644 fuzz/corpora/conf/b3f14b506b504414c52cd5ed9a7fda63d700fa3e create mode 100644 fuzz/corpora/conf/b4ee157ca414e52dc118dfc874ddcb2f6e58642c create mode 100644 fuzz/corpora/conf/b50821942b2a23f499c1cce961108391759d9913 create mode 100644 fuzz/corpora/conf/b64c082186bd1bfcee87a2899ea898f26fbd9663 create mode 100644 fuzz/corpora/conf/b67604ba42f3ef83c6e8a9ea0eea3889cba979ae create mode 100644 fuzz/corpora/conf/b75d90a2fce772306a8e099e18a64466f009b02d create mode 100644 fuzz/corpora/conf/b7cb7a3ff3a75ed0e308dc125f0c9e89f8b39941 create mode 100644 fuzz/corpora/conf/b8acead49879f8f0e78456abb87767b012329b22 create mode 100644 fuzz/corpora/conf/b8e177f16f9fc93a7c8a2a02dd7e12624e1e9567 create mode 100644 fuzz/corpora/conf/ba18ba7430d5c372085f96bc4afb1923b402c8e3 create mode 100644 fuzz/corpora/conf/bb2b39913589c4eb36c2fec811e1df4048043e37 create mode 100644 fuzz/corpora/conf/bb8b75881e76750f4e48bdaec46694eeda481318 create mode 100644 fuzz/corpora/conf/bb97363a43bc80874b1f3afc15c52f90af70765f create mode 100644 fuzz/corpora/conf/bbd3caea11bad5cee06df28de9505672f3258172 create mode 100644 fuzz/corpora/conf/bbf9e8e086be05a96125ce78a1de4179ff436847 create mode 100644 fuzz/corpora/conf/bc147ee2e8682e53bf5603d4169ee7618592047c create mode 100644 fuzz/corpora/conf/bc4faf0158666ed8da09cdd67042a7a22d274f29 create mode 100644 fuzz/corpora/conf/bc556fa860bbdd95b33715eb4278805e0f7ba970 create mode 100644 fuzz/corpora/conf/bd8ad612ca9b159250631dc79aaea52eedfe8375 create mode 100644 fuzz/corpora/conf/bdcdee9154e92f711257a21be6300953c99d39e6 create mode 100644 fuzz/corpora/conf/bdd2cd7fc30aa3513104ed72a6a46bf2361c2a18 create mode 100644 fuzz/corpora/conf/beb9273f3086190447e880328b00a728dc764fc1 create mode 100644 fuzz/corpora/conf/bed1da7d71d27275afcf3f5e28498cdaaf6dde60 create mode 100644 fuzz/corpora/conf/bed2977f4e308333b5c4ec87688266039dc907df create mode 100644 fuzz/corpora/conf/c0240ce49ee532a77b33b0caa89780250180317e create mode 100644 fuzz/corpora/conf/c0f6955c503cc7f8bc9a322b1fc629adaddfef46 create mode 100644 fuzz/corpora/conf/c21719fdc144b09de3c1baaa73226ef7dfeec264 create mode 100644 fuzz/corpora/conf/c22e13c46db33337193cd94fa450de5d625b8a22 create mode 100644 fuzz/corpora/conf/c233d66fadae13f3eba186b1858ec5c77218bdfe create mode 100644 fuzz/corpora/conf/c2363552fae6c04a008e2db09067ffeab9b32a15 create mode 100644 fuzz/corpora/conf/c34d682b7eaa8c7dda955741352571b3c1d89507 create mode 100644 fuzz/corpora/conf/c450e6ff7a76143f4733b055429f29754be5292a create mode 100644 fuzz/corpora/conf/c45ff393ef8cf1b48143f6b809181647df178657 create mode 100644 fuzz/corpora/conf/c46c1350cce85ef81db0e39d67775fa9067a074c create mode 100644 fuzz/corpora/conf/c57a328f0aea6d5a256719f47efb6a225f8499e4 create mode 100644 fuzz/corpora/conf/c6463b068f540dffba8d063b6579ed51a853e333 create mode 100644 fuzz/corpora/conf/c77085f39e2868f7a9cc28f363413914dc89e397 create mode 100644 fuzz/corpora/conf/c7e12a9d0430a6c25a5af40a3d22b2915133fd4d create mode 100644 fuzz/corpora/conf/c82029a72081ddff2ba48c66302111236a01f84b create mode 100644 fuzz/corpora/conf/c82ed3d0939a5b04cfeaca959aa36a7d98afe335 create mode 100644 fuzz/corpora/conf/c8ae8a463a740b3deb92910a4124f82b7c5ea5ed create mode 100644 fuzz/corpora/conf/c933719ff3062971413cbe0aa395b1201bba1851 create mode 100644 fuzz/corpora/conf/c9f989fe126a0e9442d1cff02962158d8cefaae8 create mode 100644 fuzz/corpora/conf/ca6de88ba083a02f604e11bc31074d3eb8d8c23c create mode 100644 fuzz/corpora/conf/cdc4e3b51f3d0108dc0f1ea1b0fa171e92ad4fd7 create mode 100644 fuzz/corpora/conf/cde34b43474a613f93430e47c105df142077d23c create mode 100644 fuzz/corpora/conf/ce5cf305acf6e58d002db1417a776427a6e42027 create mode 100644 fuzz/corpora/conf/ce6fc27bcb37c30a8aa47a1377b443300580ed42 create mode 100644 fuzz/corpora/conf/cf772f067a3872fcdd1272e18c40bd3e0e954572 create mode 100644 fuzz/corpora/conf/d080283efa1f0a0b22c2569b1f334aa4dead8564 create mode 100644 fuzz/corpora/conf/d08c1474e816cfa43db418832de83aed4d940cc1 create mode 100644 fuzz/corpora/conf/d10af174841e830e84198f8086feaa924cf4e376 create mode 100644 fuzz/corpora/conf/d123ad11a86cc0f5ceb9aa3d117ec902e15857fb create mode 100644 fuzz/corpora/conf/d1c160a75e51dd62a40501c609e2d3d54a1b4a99 create mode 100644 fuzz/corpora/conf/d3a4141d3812d4bd92b8aa462f6d643d2cf36cb0 create mode 100644 fuzz/corpora/conf/d5659a3d1c50fa72544da534c9a0e43261f5e186 create mode 100644 fuzz/corpora/conf/d5a9231aa10ce46bb496219efd46dfdcc869cd68 create mode 100644 fuzz/corpora/conf/d6485fecff8cee34f9b7ed24bc4d8665b8ee8386 create mode 100644 fuzz/corpora/conf/d6d0dc412a9b64966118516ac9d174bfd9576c5a create mode 100644 fuzz/corpora/conf/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/conf/daf033043a37e84c279ceaeba0477b2418bacc02 create mode 100644 fuzz/corpora/conf/db1e1b76fe51edd9157d30fd63c3d078893e21db create mode 100644 fuzz/corpora/conf/dcfa71e52377a29fe003c09009a0e7e5f76bdcca create mode 100644 fuzz/corpora/conf/dd46a51ce6526eec344a7c90e55c3bdb9f3c5ebd create mode 100644 fuzz/corpora/conf/dd65c6b28a119edf40acbd474fd598f43a70ecaa create mode 100644 fuzz/corpora/conf/de45623a26e026631e0f67fa55f663b30921eab9 create mode 100644 fuzz/corpora/conf/df3a4a30bed1a9972f03ba4dd7d5679b2bf3ade9 create mode 100644 fuzz/corpora/conf/e0169fc58f83725b3e5553698a173f45ebbb663c create mode 100644 fuzz/corpora/conf/e15af2bdb7448d37e2a913221d7f7f553811add3 create mode 100644 fuzz/corpora/conf/e1996cfb7a3dd03e1ea52d34eec90f487075c396 create mode 100644 fuzz/corpora/conf/e221f5120819fb0795d827ecc90d0b4dbc9d7049 create mode 100644 fuzz/corpora/conf/e52cef092cfbd125de46c1af18d941606c9b04d4 create mode 100644 fuzz/corpora/conf/e5dac4a33088d945b6be0e65bf8dc7383d2916ac create mode 100644 fuzz/corpora/conf/e63f199ea2caecd2f8041954459eb7451b8481ee create mode 100644 fuzz/corpora/conf/e6bbf9351b5fee5566a6103fa3fd941fdb8cb151 create mode 100644 fuzz/corpora/conf/e8f7de3d48c5f3f6474ad86ee6f23612bd352376 create mode 100644 fuzz/corpora/conf/e93a753892bd5708cebaee9aa8560e71b75f7687 create mode 100644 fuzz/corpora/conf/e994924da897028a757ca9e7f7cb621957c4433b create mode 100644 fuzz/corpora/conf/ea11eb161cce99e08f638873e59da0d961dfeaa0 create mode 100644 fuzz/corpora/conf/ead7fc167c8863abb861449fe3777e23ce65b21f create mode 100644 fuzz/corpora/conf/eb63fde9746cef54e4b8c839133e94f9bc2d2f3c create mode 100644 fuzz/corpora/conf/eb9bde4e5d1a6017b4d072a878c8ae6e5f360a80 create mode 100644 fuzz/corpora/conf/ec6fb426e4ee0e3290b494aba78c4ec54ac230bc create mode 100644 fuzz/corpora/conf/ec86a6ec2cefab6ecc2ec4f0b646ec5c2d2ebf0a create mode 100644 fuzz/corpora/conf/ed0fb5a04400bd1b18acac9adef7afe3de88b6a9 create mode 100644 fuzz/corpora/conf/ed11e673dc0cc53d9cb29272d58d4d616b4e116e create mode 100644 fuzz/corpora/conf/ed735f5258f86f6b4a129d39b672be0f6289dc39 create mode 100644 fuzz/corpora/conf/edb270450fa97d63d5a637074e59cb2b229d01bd create mode 100644 fuzz/corpora/conf/edb729d2f40bc6d4fc9b6572672530b16ac34ae3 create mode 100644 fuzz/corpora/conf/ee49164a4b5ee962e4556b78946dcad2d850f3bc create mode 100644 fuzz/corpora/conf/ef27bf02f4c22152c42a8e83b29b0c4b5354100c create mode 100644 fuzz/corpora/conf/ef4b65151cf341e3d617bdb546c08cf1b8810680 create mode 100644 fuzz/corpora/conf/effcec284a4bf096733c2a008cf1c039e2f5ad4b create mode 100644 fuzz/corpora/conf/f04998a506aa73133342cd830255c49dca7f33a6 create mode 100644 fuzz/corpora/conf/f06420bead57c97fd3fada49301f55c2ccadaea8 create mode 100644 fuzz/corpora/conf/f265a62b99f9285d09b7c00ba811d92d1c334958 create mode 100644 fuzz/corpora/conf/f2a0e5f21bfe76a5fc9d01f034fddeb3fac02da8 create mode 100644 fuzz/corpora/conf/f2a7503d1a9f626e5d2916075abb5921a316c00f create mode 100644 fuzz/corpora/conf/f332fcc78c8ecca70bf1f480ab68867ee07a9dd8 create mode 100644 fuzz/corpora/conf/f3dcaf1613c0ef07dc8681fcb5829f22922e1dc6 create mode 100644 fuzz/corpora/conf/f5dec5b1a1e4e59001ede85cab0f2a496dc5aeae create mode 100644 fuzz/corpora/conf/f622c8ed46553b0b77519f8496fa8e35040b291a create mode 100644 fuzz/corpora/conf/f6b77081a14644e83ef704374622ad87b548e572 create mode 100644 fuzz/corpora/conf/f74a05b01f8e6061d2c5eed7bb67b4aa92980185 create mode 100644 fuzz/corpora/conf/f7d905e6627bb2182e24da631d6dfa101d9ef467 create mode 100644 fuzz/corpora/conf/fa3a05eade42b15d5f606e0aa5b24bcb034e4836 create mode 100644 fuzz/corpora/conf/fa5992b2aa5135443506293bd0ca9e7e1ebcc585 create mode 100644 fuzz/corpora/conf/fb610a85962e4d9882018708f2ecf75727615637 create mode 100644 fuzz/corpora/conf/fc8845af430f11bfa4876997c7a4dfb08451ef1b create mode 100644 fuzz/corpora/conf/fcc604888a6fbc3e290eec04dfd8987a07f87db1 create mode 100644 fuzz/corpora/conf/fd62dff2a600b90ee1cc924cd7f19738f0497556 create mode 100644 fuzz/corpora/conf/feeca087381d83615cb2bcf1466d1e936f3ca41b create mode 100644 fuzz/corpora/conf/fff39338583ec7b5dd791d75537a9cbc59d81027 create mode 100644 fuzz/corpora/crl/00102d3de8d3536dd621f8f9ac76e00dee038465 create mode 100644 fuzz/corpora/crl/00156231442bd8d62cc903875ff20db54ca872b1 create mode 100644 fuzz/corpora/crl/001b2f8819c5a1cb030633e392c07678f426b1e4 create mode 100644 fuzz/corpora/crl/001d5dc631cdf454a42cd7fb8cd687474af7e588 create mode 100644 fuzz/corpora/crl/004a2cea247a4de8387754b77502b488ec46827e create mode 100644 fuzz/corpora/crl/00503a4b8e8dfea98cdeb55c286ecc8268017b77 create mode 100644 fuzz/corpora/crl/00578911907efddd7d595697d2836562c44119a5 create mode 100644 fuzz/corpora/crl/00a7de7ffa99500823cffb6480b19bde9ab47257 create mode 100644 fuzz/corpora/crl/00e062b3cb85da0714fd94fac00e921770e77ab2 create mode 100644 fuzz/corpora/crl/00ead10264361e25a74cf1e87c2fc54819476d80 create mode 100644 fuzz/corpora/crl/00f88f0becde39f2112482f5f59eae86e9e5a72d create mode 100644 fuzz/corpora/crl/010a92d9c12d2ddc3985491d57be5bd24f33976c create mode 100644 fuzz/corpora/crl/0113d82e3a16c8f4b7a9c94a959696192a25f264 create mode 100644 fuzz/corpora/crl/01206287c8ed6efe857f4d69bc855b393f37981f create mode 100644 fuzz/corpora/crl/01405eb515a1bbe06f6c798d7022f2a5193c5d19 create mode 100644 fuzz/corpora/crl/014a6e98d8f8e3f99271e6c3b6f72c507ad214fa create mode 100644 fuzz/corpora/crl/01972b26260e27e42e068c597510f2916d28b9e6 create mode 100644 fuzz/corpora/crl/01eb7bb1aa59cb9ad4d3ab14390faaba19311ebb create mode 100644 fuzz/corpora/crl/020b0e95729fafeb6c333002f79320dd15fb6b70 create mode 100644 fuzz/corpora/crl/02631848f36cc4f994abff6cd2812470e8a2251c create mode 100644 fuzz/corpora/crl/02a2a520552d2fd9993ab9a12dba26dfdbe518b0 create mode 100644 fuzz/corpora/crl/02b75cc44df6880ea3a019b7b309d9dd95cf967b create mode 100644 fuzz/corpora/crl/02ca6958aaa05b45f2c31188fc7b4b8c4743091a create mode 100644 fuzz/corpora/crl/02dcaf09c5c37dfd0dbec80fadd11135f920bf35 create mode 100644 fuzz/corpora/crl/03052fb170c1c7063757f32402bc52150da88bdd create mode 100644 fuzz/corpora/crl/03206d66581a51a964b116cf014dc2643f70e3dd create mode 100644 fuzz/corpora/crl/0335f6559a2af33a2ac2ab2227ff597262cb7493 create mode 100644 fuzz/corpora/crl/035dcb3b030393b52a59a6558bba0abcb4f79a98 create mode 100644 fuzz/corpora/crl/03682339034cc6b799822e33d8437192a518f8bf create mode 100644 fuzz/corpora/crl/036966ee48c0c2366a3e47e1a3adae2aa87e73b7 create mode 100644 fuzz/corpora/crl/037421ad3d4a4bd5dea9d939b18b5c092df16685 create mode 100644 fuzz/corpora/crl/03c83ea7e9b699ca690fc0808f0e7481db4d48d4 create mode 100644 fuzz/corpora/crl/03ca06900a06aa67313329f58730e098ea29ec21 create mode 100644 fuzz/corpora/crl/03e7422b960fed974c98f5e10215ba7c76c6e5fb create mode 100644 fuzz/corpora/crl/04133608b25fe706a5f36e6dfff4c6d01869116b create mode 100644 fuzz/corpora/crl/0441425699dab543833b12b45bbc6be413d7a049 create mode 100644 fuzz/corpora/crl/0452b2debc563f5d69c6160b916f710db88a6319 create mode 100644 fuzz/corpora/crl/04562deeb100fb696ab70a45c7e5b823fb4ca722 create mode 100644 fuzz/corpora/crl/047ad51059315ab1dd033c695ac72258387a6a7d create mode 100644 fuzz/corpora/crl/048b8a57e42825e7e5efe2c8d682e6c187bbcb54 create mode 100644 fuzz/corpora/crl/04f5e552f1333091fe0ecb1bc9409490f108b257 create mode 100644 fuzz/corpora/crl/04fe02714a20ac5adbe34823da22f3114349fb3a create mode 100644 fuzz/corpora/crl/05118779d1d46a0fc9232b9764ef195e3ad46177 create mode 100644 fuzz/corpora/crl/053e5269c3fcb81a941e2644e2f616d47dd7e713 create mode 100644 fuzz/corpora/crl/0542466c37373bcacbebb1627b36ce806dccb26e create mode 100644 fuzz/corpora/crl/057d80002c4f67922aeb234d24f65ae889bccabf create mode 100644 fuzz/corpora/crl/058bc8952b619ed50929205dab6074d07b446b2e create mode 100644 fuzz/corpora/crl/05922980dabb8e7559ea6819930e692fae50bb6c create mode 100644 fuzz/corpora/crl/05991ebde4c0d0bcbb008f8053d867b694cdee87 create mode 100644 fuzz/corpora/crl/05a7ab22e53e29ed21d7834b456ef347d6842aaf create mode 100644 fuzz/corpora/crl/05f33c2ed847bf9099cc1c9fee52562af75f0217 create mode 100644 fuzz/corpora/crl/06476a4bd9b94fad36e7ef556311af9b881d5873 create mode 100644 fuzz/corpora/crl/0664661e0ff88cc988550712a97f00852e9c1fef create mode 100644 fuzz/corpora/crl/0664bddf242998393586c83d9874f58e3bf0bf70 create mode 100644 fuzz/corpora/crl/066baad253c36f207bba42b9624f9fdf3277d142 create mode 100644 fuzz/corpora/crl/067b907e35ff4d0c1345699d635af7c410dff4d9 create mode 100644 fuzz/corpora/crl/069ec2afb81a6619b9b3d1be298676a5f58e1957 create mode 100644 fuzz/corpora/crl/06f2b0dab06751e577767bb6e24c753bf9437fc6 create mode 100644 fuzz/corpora/crl/0719deff45ac01f3abc96f29567ee1d82f6024f3 create mode 100644 fuzz/corpora/crl/07305392b7ca72ac038ed111fa0884c506bf09c0 create mode 100644 fuzz/corpora/crl/0734f46759473683dafc6bda9e2971fb5e626fc0 create mode 100644 fuzz/corpora/crl/073756c4a824cdcd193d8494b019e08ec18b08c9 create mode 100644 fuzz/corpora/crl/0745efac48454992271aad97e40d3910d664e58a create mode 100644 fuzz/corpora/crl/07cf8164c68ab174e1332a7158ea0ff555a4c81b create mode 100644 fuzz/corpora/crl/07eb363a10cefd0bdb7612450830090e7eae585b create mode 100644 fuzz/corpora/crl/082155fc2834ca88629716b45b67f5a8ffaf4a41 create mode 100644 fuzz/corpora/crl/082b0a45a5aec73fd9673a355a1496dbcea156e7 create mode 100644 fuzz/corpora/crl/086a9b2e7b8cc5c63b38dcd9408cf6ed1140ea1d create mode 100644 fuzz/corpora/crl/08a4b4b31e384089b1a8355800fac27854434549 create mode 100644 fuzz/corpora/crl/08f30339e945c30750d2e52078de0eb62d5d59ae create mode 100644 fuzz/corpora/crl/090d92eb3ff3bf45817ddc9b869385211ac4a89b create mode 100644 fuzz/corpora/crl/092862d28d6f1bebb7953bf5a5b75ce7444e3271 create mode 100644 fuzz/corpora/crl/09762f34d2e66ed8e38923e228721d1b61149227 create mode 100644 fuzz/corpora/crl/0984513f4e24dddc9edec05cef54d5b7a9a37256 create mode 100644 fuzz/corpora/crl/098e3ee083c524a347f54d0043e1f99c43239636 create mode 100644 fuzz/corpora/crl/09d4851af4ce81b483b466e718276fd5ad71c896 create mode 100644 fuzz/corpora/crl/0a0d8a1affc48649fbf3226f44796ce1978fac50 create mode 100644 fuzz/corpora/crl/0a169b587d15776b0ba89e08ea559b28c2e83773 create mode 100644 fuzz/corpora/crl/0abf2e667cf4dbb70cff997ab0c1fc31515851c5 create mode 100644 fuzz/corpora/crl/0afce4b071a8367a9cc72045fafc0a4141cf2396 create mode 100644 fuzz/corpora/crl/0b05210cdbf528615822922c12061829428665bb create mode 100644 fuzz/corpora/crl/0b1a6694266cf22426ff2a6278d76d7934a6a1f5 create mode 100644 fuzz/corpora/crl/0b2fd85fa78e04cfd2818ee1b9f4401a7aba8d53 create mode 100644 fuzz/corpora/crl/0b35b94626db87d07a50974a2fbb7902789db99a create mode 100644 fuzz/corpora/crl/0b837623823be9afc7c6a91aff85ee94edfd5c92 create mode 100644 fuzz/corpora/crl/0b913aaf3fe8194fadd0769ec92a5fbcdf7734fd create mode 100644 fuzz/corpora/crl/0b98e8a02c0abd5537199a01d3237dced8382342 create mode 100644 fuzz/corpora/crl/0bddbb44533f037bf79b3387ea2562fa24b2be34 create mode 100644 fuzz/corpora/crl/0c015e7fed67e658bbed1017f14ed246b02d7008 create mode 100644 fuzz/corpora/crl/0c48562d684795597cafd1cfb816f40040bc71fd create mode 100644 fuzz/corpora/crl/0c65c4ea35fc52b96ef523319ae11e90f2f95ee1 create mode 100644 fuzz/corpora/crl/0cc9fbfc7643b5a355e7c504926d36e2fc1bdb24 create mode 100644 fuzz/corpora/crl/0d4755d0bb7962a5374a5ee493b7748c98e5c998 create mode 100644 fuzz/corpora/crl/0d52df5a370446b366e811e88cb93dc4c1dbff97 create mode 100644 fuzz/corpora/crl/0d8c78853b576d459b0a5bdc9b0069f4fb5b13af create mode 100644 fuzz/corpora/crl/0d9683772edcb00214150d635e58ebd94274107f create mode 100644 fuzz/corpora/crl/0daa5d02b074cc0279ab7329c21c4d5c9d26e0e5 create mode 100644 fuzz/corpora/crl/0ddf2e1252169f3f539f721b29b7d652429e6bee create mode 100644 fuzz/corpora/crl/0de2f5d7d966d2194d5d5865e20efb5a29369bdc create mode 100644 fuzz/corpora/crl/0e185ba2486cfc28ba520babab3ba3e05a4e0a0a create mode 100644 fuzz/corpora/crl/0e3e6168898a1d7e0529cbcfcd6b0ea0e76b4c17 create mode 100644 fuzz/corpora/crl/0e45adffd1d6293058646a9cabe1e383da14d158 create mode 100644 fuzz/corpora/crl/0e54dbe1c536a55b9576036d92f3433e20111120 create mode 100644 fuzz/corpora/crl/0e6d90eee2eb009197288f528785a0058a13b340 create mode 100644 fuzz/corpora/crl/0e7be06ae50bf33c83ecba2725752f4c070930d8 create mode 100644 fuzz/corpora/crl/0eb1f827b7f8b8716bc8a8524c70aa208e260a6b create mode 100644 fuzz/corpora/crl/0eb5037935ba1c2791f3b7e9bc8470c3c60d2aff create mode 100644 fuzz/corpora/crl/0ecb0b957baccee8096e4d6535abb3526dafa755 create mode 100644 fuzz/corpora/crl/0ef75cd1fb0b62efeac4831c610c35d24e5b02f1 create mode 100644 fuzz/corpora/crl/0f015401ad9be1cb62747cc6821d73fe52d4e03e create mode 100644 fuzz/corpora/crl/0f040de3cc4b7b4e03945f34c053316050c48495 create mode 100644 fuzz/corpora/crl/0f176f00bdc350da61ada057914b5c7f1db46b5b create mode 100644 fuzz/corpora/crl/0f21b4573e4a2648c4c0fc922069d9c229829e73 create mode 100644 fuzz/corpora/crl/0f37beb612741368dde04e513ead57a6567afd60 create mode 100644 fuzz/corpora/crl/0fc6811e0b1996c9a59b06e0cdc0c6699e738b1c create mode 100644 fuzz/corpora/crl/0fe4033b93e560fc1ef96495ec61ada87112edf5 create mode 100644 fuzz/corpora/crl/0feb30de47f9daa533fc8c46e0e77cf4d79780b6 create mode 100644 fuzz/corpora/crl/0ff2fd96cb71d2e191ee92691f8d319a32abdd83 create mode 100644 fuzz/corpora/crl/0ff82ee04abd41f8ecfa98eb5b924b9b0c5ce6f0 create mode 100644 fuzz/corpora/crl/100c31ea10b3cda4b90634a6f536339bf747a914 create mode 100644 fuzz/corpora/crl/10559cfcf1fba796e7638b85caf77a2bd709678c create mode 100644 fuzz/corpora/crl/10559da22f9c0879cadbdc19c863e6d82cf61249 create mode 100644 fuzz/corpora/crl/108ad50e4e5ae5573bfe785d27d35cfa2f4adb0e create mode 100644 fuzz/corpora/crl/10b0fab0581603e10a0961b4bb82c3a1305a2d04 create mode 100644 fuzz/corpora/crl/10cf4338a9cdcd6ec96bdf1fe697302b909b5e7c create mode 100644 fuzz/corpora/crl/10dbde0c88cbebc498ab7f8895a00b8426b3f3c1 create mode 100644 fuzz/corpora/crl/10e6998c54478d4c5fdb79d7e44e5acd78418bc4 create mode 100644 fuzz/corpora/crl/111d272efaf4f8331f1012fe6194beda52952211 create mode 100644 fuzz/corpora/crl/1138005f46af8f10bbdfa28c911bb21dc79e4aad create mode 100644 fuzz/corpora/crl/116de0673e8912c21838b868d1846d24d71e173e create mode 100644 fuzz/corpora/crl/1179572eaa4a414c307fdd1dbcd50ad4941e8ca8 create mode 100644 fuzz/corpora/crl/118a6a5b78e95cbf561830b43adb53eccb313178 create mode 100644 fuzz/corpora/crl/11ebbc92980762dbae6375197003e7f1c37347ec create mode 100644 fuzz/corpora/crl/11ecfe3a44eaefd3f09f23fb89ea302e3d127625 create mode 100644 fuzz/corpora/crl/11ed87e596cc33a713dfeb01ba73d69e0998034a create mode 100644 fuzz/corpora/crl/11f2ec7f98ae700929e4459602ccf0c8513a67b3 create mode 100644 fuzz/corpora/crl/120858e07e43c37fc25e9769f44f4d9964f05068 create mode 100644 fuzz/corpora/crl/12414c1eec82ffe6fb613f83cf3f0a7ccde7da95 create mode 100644 fuzz/corpora/crl/128809bad521d31f3e25a4496becc790a0fde812 create mode 100644 fuzz/corpora/crl/1295b3d55471f062e2f34d012c96c3ee04d55f90 create mode 100644 fuzz/corpora/crl/12bb8049e63e2cd6c0765399918ccb69b9f0e2a4 create mode 100644 fuzz/corpora/crl/12bc2bd0401e59d49142c2060b6ad003092a2caf create mode 100644 fuzz/corpora/crl/12cdb10cf6cf456a2d6051781007e6be4c4d6127 create mode 100644 fuzz/corpora/crl/12cec292450a1485c390a3e23718cb93e16d377a create mode 100644 fuzz/corpora/crl/12eefb2adf28b34b59c3e5dfed363069cc8d6133 create mode 100644 fuzz/corpora/crl/1388c2fe8783e1cc7415edbc58ce634ec48ed5dc create mode 100644 fuzz/corpora/crl/13ad985b34dd23ff171e605c52cf0a521053bd98 create mode 100644 fuzz/corpora/crl/13c2f79b53c9cf4739e4d36e807c5c6b9813d666 create mode 100644 fuzz/corpora/crl/13e333638c59d6d384e48697ae31114f21e091e4 create mode 100644 fuzz/corpora/crl/14987bfee680f0cb425a9bfc082fea8eae4ef0eb create mode 100644 fuzz/corpora/crl/14dd6afacfef0574c24043d57cda8286267c2548 create mode 100644 fuzz/corpora/crl/14ea55eaa83aaea8a1d19c7fb91800400b865889 create mode 100644 fuzz/corpora/crl/153802aa7b5abb4b4b136136352a20071a40601d create mode 100644 fuzz/corpora/crl/15afc9c50604c4b1f43b266800d7be37fe8d436e create mode 100644 fuzz/corpora/crl/15d0d2552624acf821e903fa1f9ebb20191d8783 create mode 100644 fuzz/corpora/crl/161b6c94c1f8648af00c5420143360b4364bdad5 create mode 100644 fuzz/corpora/crl/1686083e41597d16a9f17b5372873e1f6755d8e1 create mode 100644 fuzz/corpora/crl/16994668de260f6a7fa79eff76fb572c6a943bd3 create mode 100644 fuzz/corpora/crl/16baa1ce1a91d72bf264b5d248f46d026fbd6952 create mode 100644 fuzz/corpora/crl/16bb3f571429b29eea5572f28f82acfb5dbe3f00 create mode 100644 fuzz/corpora/crl/16fad8c16477b5ca489d8842fc4b805fdfc27797 create mode 100644 fuzz/corpora/crl/172c7efa04790c94a8db11177aa97584c192f666 create mode 100644 fuzz/corpora/crl/175a5546a29a410b7d25fb02613d03d3737b97b5 create mode 100644 fuzz/corpora/crl/17b04d22a5d2d8f1864e12b00b36158c8e478178 create mode 100644 fuzz/corpora/crl/17dc916b933cba52cb68ce0b59c86023b4763f46 create mode 100644 fuzz/corpora/crl/17e26f22a52ed555bdbfb5325d23400fc13b4233 create mode 100644 fuzz/corpora/crl/17ef9ad03551d68f46444e8ce8c159071e313393 create mode 100644 fuzz/corpora/crl/184903d9c3ef66f15f086d74d79e90b760bde82b create mode 100644 fuzz/corpora/crl/187dedc942403e0c62ba06f2b336144ba44de2c5 create mode 100644 fuzz/corpora/crl/18c6a11c56e49a34cb62d44180740c38ad31e877 create mode 100644 fuzz/corpora/crl/18dfe3536f5163424b8242ffec3f31604b68b0df create mode 100644 fuzz/corpora/crl/18f2156b52ed135da2d6a01097291ae1fb3267f1 create mode 100644 fuzz/corpora/crl/19076cb8629abd6ea01b6791215f1124027eb400 create mode 100644 fuzz/corpora/crl/190b3558889e610914a501bce48c1de01c9118af create mode 100644 fuzz/corpora/crl/1954852d383a7223e51191c41e4af07c9ce53c8f create mode 100644 fuzz/corpora/crl/19604bbb58bd18a5acdc0ac2c3743eb3ee125a88 create mode 100644 fuzz/corpora/crl/1967c24b439ec879b88c6714848a585d501c353b create mode 100644 fuzz/corpora/crl/1976b443b53d8f58f794cf88fddd5e7e2c82a46a create mode 100644 fuzz/corpora/crl/1980946e89a2c36849afad1f353c81da43fb7966 create mode 100644 fuzz/corpora/crl/198eb7ab9baf95afa008eee00de9ab0b67efdae6 create mode 100644 fuzz/corpora/crl/19c90ad901e39adec8044080f9f2d5aad0bade5e create mode 100644 fuzz/corpora/crl/19fa09e3ea28b37b6e4ecef78f391084317cfefc create mode 100644 fuzz/corpora/crl/1a24758fbc5be7a07ffd78b442e10b505bbf7421 create mode 100644 fuzz/corpora/crl/1a28e946e826ed0dd04dda45e9722562b7fb4abc create mode 100644 fuzz/corpora/crl/1a45a6101cf243a7c97f3588a0c8f0afbe9a0a60 create mode 100644 fuzz/corpora/crl/1a4abe1c2f990aac2845d3ea10beb8e7fa278e6a create mode 100644 fuzz/corpora/crl/1a4ac556a7cf2f858d670a942176e846a1849e12 create mode 100644 fuzz/corpora/crl/1a634da71cebc57aa32f86877fc017fcfc706bb6 create mode 100644 fuzz/corpora/crl/1ab77227c9b91ad8968971d16ab36b4908504552 create mode 100644 fuzz/corpora/crl/1abcce7bc47c39003eeabc0cc1cc22f1176042da create mode 100644 fuzz/corpora/crl/1ae4646ca7d5f2e7cbca43b60f1b754c2f267b95 create mode 100644 fuzz/corpora/crl/1b38f6017e1368009eaaaded05a22fb4bd46bd7b create mode 100644 fuzz/corpora/crl/1b9bbd2d43312c08ba01065631cc24baf826f0e7 create mode 100644 fuzz/corpora/crl/1baa3bee147c8c902aa77ac5e5e1bfb0d8e3d9e0 create mode 100644 fuzz/corpora/crl/1bc554660a63155ed1de0f7ba55dc8e2595b05f9 create mode 100644 fuzz/corpora/crl/1bca42be88dfb879dd43b04eb7222a5363525f78 create mode 100644 fuzz/corpora/crl/1bea53917dcf46485a621f734cd71022c23cb271 create mode 100644 fuzz/corpora/crl/1befedbdc185d5de4e4d58251604d1d930109482 create mode 100644 fuzz/corpora/crl/1c2dc1448c12fd8c31053864589e69ba3b4ebb73 create mode 100644 fuzz/corpora/crl/1c3456f2675c9bb75d0cf433d5233916e7a9f683 create mode 100644 fuzz/corpora/crl/1c4167041e9987bb3cba75ffd17f296c95149996 create mode 100644 fuzz/corpora/crl/1c5e86b542116ee6c078b729caa49f48d76a047e create mode 100644 fuzz/corpora/crl/1c7bb484fba855911687fcf53bea96b951a81f26 create mode 100644 fuzz/corpora/crl/1ca2cf49399526fb2fce857155e56d9ffc1a1347 create mode 100644 fuzz/corpora/crl/1cd16f2fcc9bc108fc87c2db7a70753758da7114 create mode 100644 fuzz/corpora/crl/1cfc0330a22c927ee9a458425f65804eff3bc897 create mode 100644 fuzz/corpora/crl/1d18ad1672d14f97829c31bf04ec79f27537e6c7 create mode 100644 fuzz/corpora/crl/1d25d6a718b7c4ce0dc89f09f96e7ab8fd09b670 create mode 100644 fuzz/corpora/crl/1d52aece28ed72980497de986eea5b1cc519eeb4 create mode 100644 fuzz/corpora/crl/1d55bb6a710fcc3d93d13439f1c995d8f3900bf8 create mode 100644 fuzz/corpora/crl/1d9d21f2256769b5ac72c0724de096e88c33c699 create mode 100644 fuzz/corpora/crl/1ddaf976e402935d7e4bed539305e4d09f4b82ec create mode 100644 fuzz/corpora/crl/1de702bf86038291bd0b9caa2fd9ba4e0e815755 create mode 100644 fuzz/corpora/crl/1decf83e9e83c254f92daca4c5f13cb0c37c9bdf create mode 100644 fuzz/corpora/crl/1df9215e70c7475232761fb83c75408fe221f1f9 create mode 100644 fuzz/corpora/crl/1e3db9560df699e463cf299576dce9db37db09d7 create mode 100644 fuzz/corpora/crl/1e7d6f17c1327fd06d0abc332a20af95f672ce51 create mode 100644 fuzz/corpora/crl/1ea335ffd003808eabcf063c4ebf4048aae4ffd5 create mode 100644 fuzz/corpora/crl/1ea67fb478417c904a86a1a6b3000709d6033f66 create mode 100644 fuzz/corpora/crl/1ec22d88d9145f8da0e4fe9e435e21dfb4dd1721 create mode 100644 fuzz/corpora/crl/1ed8e9a338d3c73f227cc03d2fa19c47af54fa70 create mode 100644 fuzz/corpora/crl/1ee8a7b18df87f60593bb2c4838acb8f76325c01 create mode 100644 fuzz/corpora/crl/1ef0f069d59842cf9a2828b8c32e03a1991d56ec create mode 100644 fuzz/corpora/crl/1f2f60378948769a7bed8bc4d04bee6bd3b5b0ff create mode 100644 fuzz/corpora/crl/1f365c476c7058c6d54ca06145e6ee2866289303 create mode 100644 fuzz/corpora/crl/1f3e7610b4468e302f7997ad36cc93dc64cec53d create mode 100644 fuzz/corpora/crl/1f63e220a7878e769fcbe7ee73546c5d3c535d48 create mode 100644 fuzz/corpora/crl/1f802b9854986ca699d6901b471348415d5e9639 create mode 100644 fuzz/corpora/crl/1f81e960ff5040f6a080777c60f0e0e703145d02 create mode 100644 fuzz/corpora/crl/1f82d6ec7892a7271304107aa8f38687240a68f5 create mode 100644 fuzz/corpora/crl/1f8444025365c981a591e731ba390d12a09a2149 create mode 100644 fuzz/corpora/crl/1f91918a05095e6a950dbf969e8a874075483881 create mode 100644 fuzz/corpora/crl/1fbcbb23c44d74cd497c3a49c661d58b521ddaec create mode 100644 fuzz/corpora/crl/1fe80f79208724f9af31d9ec6471f91e61a05e57 create mode 100644 fuzz/corpora/crl/1ffe0e1d26026c59c07357e752f6695e4c30176f create mode 100644 fuzz/corpora/crl/20004003b6cdeac02f3b02f7c2196b248f0fab4a create mode 100644 fuzz/corpora/crl/2029d5ba55fa9ebed46dadfe69622a64bb43e151 create mode 100644 fuzz/corpora/crl/2039c6bebaff279f8a96cbcaf45d6f85cbe96bd3 create mode 100644 fuzz/corpora/crl/205335e1955c7b6712e0a28b77e99a7fa6ce84c8 create mode 100644 fuzz/corpora/crl/20592f12c9cffa105794e26e3a55de8d5b8e5387 create mode 100644 fuzz/corpora/crl/209ca394fbd76a5de14167a58aba3a6c74ae0753 create mode 100644 fuzz/corpora/crl/20a29348235fd76f8bacbc6be2b6cfa3fc266f77 create mode 100644 fuzz/corpora/crl/20b8bf3346d26449944f9aa72315d60448049548 create mode 100644 fuzz/corpora/crl/211ed903b82d167949fa5cde87ccde323242a05c create mode 100644 fuzz/corpora/crl/213d60dab98521b972ab614d574db528187507d9 create mode 100644 fuzz/corpora/crl/2140f97c77ba613381747dd63783c92deb165424 create mode 100644 fuzz/corpora/crl/21431984b2004306804d04aac1c3c53b602710bd create mode 100644 fuzz/corpora/crl/214595654920bf77cd88c1756179355466452078 create mode 100644 fuzz/corpora/crl/21b78258250f0f20015bdd007cb8aafa4e538ba7 create mode 100644 fuzz/corpora/crl/21c3742920b5ac5440519fccdcf36977774a3101 create mode 100644 fuzz/corpora/crl/21f6ae90140f77c4567fabc5395a0fae0281bb86 create mode 100644 fuzz/corpora/crl/22160a3beaeb27b8d87a1931e758a5727d0b71c1 create mode 100644 fuzz/corpora/crl/22476ec901f784d41a6644332d15052f7d4e10d1 create mode 100644 fuzz/corpora/crl/226d269485bb093aba5b3eb36a9aab5b1c4f78aa create mode 100644 fuzz/corpora/crl/22737ac7e04e303f4fddffe024f4488326b5589e create mode 100644 fuzz/corpora/crl/22bf4503dbdc3d617ede125c2e7211de0b3933ef create mode 100644 fuzz/corpora/crl/22da11cd0685ec335baa9780cafff56e8149c310 create mode 100644 fuzz/corpora/crl/22fcfaa56cbacdcfde76036dd326d11c86d32d58 create mode 100644 fuzz/corpora/crl/230171709ab370dcc3368c1f0f22cc21a24ef522 create mode 100644 fuzz/corpora/crl/23276d3f6658703a90f42202da066e0325cdf3d1 create mode 100644 fuzz/corpora/crl/233a40adf9e76466577763db58c4454e3b5ab9b2 create mode 100644 fuzz/corpora/crl/235b3e619fff5e21d59a989e4cb497de1cc87dbd create mode 100644 fuzz/corpora/crl/2360e90a984eac052b548fe47a5da3a93a888b13 create mode 100644 fuzz/corpora/crl/238c889c28487017527b485bafa92edadaf30b90 create mode 100644 fuzz/corpora/crl/239487a2faa027f28dbd9b2fe015b3938637b4cc create mode 100644 fuzz/corpora/crl/23ba17039ee532620c912e8a907c0d7c4981b1e3 create mode 100644 fuzz/corpora/crl/2464fd79a4b2cb729dfc3efc7f058f78734c8bc3 create mode 100644 fuzz/corpora/crl/247b247b86a0756d3311ae343f1d094f2447f18a create mode 100644 fuzz/corpora/crl/247ce7d21a2e6ecd23f981a3c0f6b923fd6644d7 create mode 100644 fuzz/corpora/crl/24829ec671ba4351cad0faa9f961bcfc906c91d8 create mode 100644 fuzz/corpora/crl/248aa9c1471523fd0edb569276dfe8e9d151ae38 create mode 100644 fuzz/corpora/crl/249eba4f887ce0924580dda04e98de693eb03b1e create mode 100644 fuzz/corpora/crl/24e9a7fa3487e07c46ce08ab5c9d7eadbb7f4252 create mode 100644 fuzz/corpora/crl/253901a6921b140709e7f3e8a0cf8d033a5c347c create mode 100644 fuzz/corpora/crl/258d2fb76b1f4126c1a093cf5df2ae43577cff56 create mode 100644 fuzz/corpora/crl/25b6457e26d361c2f4258b37f7fcf1d0cac2847a create mode 100644 fuzz/corpora/crl/25f177e166cadddd042db507e92bbd622eed324e create mode 100644 fuzz/corpora/crl/2628c25fc6840fb89ed23d85e4803b742b8df94c create mode 100644 fuzz/corpora/crl/2635f2cde53382eb26fad2d66fd5a2cbbe9c7774 create mode 100644 fuzz/corpora/crl/26b71fc467567fe71f01165d462d987559884ebd create mode 100644 fuzz/corpora/crl/2714e8220119a41f5351265cef293283d5379708 create mode 100644 fuzz/corpora/crl/274179250382d7b89e425e0b4549f22c70e67a44 create mode 100644 fuzz/corpora/crl/2742a718d70f51dad97e00e547833a0e778bdbf2 create mode 100644 fuzz/corpora/crl/27551854faf2c3a093121d83ab558f36378b1e7f create mode 100644 fuzz/corpora/crl/27556c80bfc362ea1db45c6d7dead130b982202c create mode 100644 fuzz/corpora/crl/2772260ed8942f81401c0223b20dda31a69f17f9 create mode 100644 fuzz/corpora/crl/281aafdcd2879848e30ae09451516fac98cf7603 create mode 100644 fuzz/corpora/crl/28269062be77a46009fd7033ce027001d31d4788 create mode 100644 fuzz/corpora/crl/28b0cbaf15f0500e76a58b4a68992276e524dfdd create mode 100644 fuzz/corpora/crl/28c57332cb674a90862c14f29180e68e8b21ea2b create mode 100644 fuzz/corpora/crl/28ca22370d549bbb87152af88024e56024cf0b52 create mode 100644 fuzz/corpora/crl/28f7d78d0015906730474a147fdd22f95adbae51 create mode 100644 fuzz/corpora/crl/2907c6ad5ea2a7d5a94009bf1c37f72e6ae71446 create mode 100644 fuzz/corpora/crl/294518fe440dcf341ee2fddb045a8f1c26e121a9 create mode 100644 fuzz/corpora/crl/294a3cd09e59be1f885a88ec82fadcaddfeeab4f create mode 100644 fuzz/corpora/crl/297523e2bce2678f3575904f8a222cebae147045 create mode 100644 fuzz/corpora/crl/298e600d3f004acb5f46ea1824f771b6efffb674 create mode 100644 fuzz/corpora/crl/298f6b93118ac372c7b028e619d6cf17ae1925ee create mode 100644 fuzz/corpora/crl/29b056f14f18f77858b9a87a658939a2d54dce81 create mode 100644 fuzz/corpora/crl/29d778689675dab07d4ab6a0b2c546714fc86d82 create mode 100644 fuzz/corpora/crl/29e505f04e0f2bc49898b73ab5a6d7e427c45a9a create mode 100644 fuzz/corpora/crl/2a28028facefe100d5c701acbe1ac8a1d57622f2 create mode 100644 fuzz/corpora/crl/2a41271378338bc85173ae079b4fb1e3dae93a82 create mode 100644 fuzz/corpora/crl/2a926275154a9f7a26a1b8cae5c1102ced495bde create mode 100644 fuzz/corpora/crl/2aa95a4b4e27b02d075cf4cf2c781ebea4b1e878 create mode 100644 fuzz/corpora/crl/2aff3d196e757db4f74dbe2b2a8fdce1194f1cdb create mode 100644 fuzz/corpora/crl/2b084a0cad95be5fe64168532d95c61bfd35637a create mode 100644 fuzz/corpora/crl/2b2f4187e8f1e28e211f2c732e9e5d13aa333091 create mode 100644 fuzz/corpora/crl/2b4027edb24edaf76972ecdefe61dbadacfecda1 create mode 100644 fuzz/corpora/crl/2b483e0789176ccf25ea393bee74f39f1ddd02af create mode 100644 fuzz/corpora/crl/2b64d593ee3d08d6c0bb8066ef5ccf6cd5cf8bf2 create mode 100644 fuzz/corpora/crl/2b9f7f3429736c6d9a78b5439f7b242134cd8a06 create mode 100644 fuzz/corpora/crl/2bcf51781a3eeb3fce21a073df677765679e433c create mode 100644 fuzz/corpora/crl/2bf3e5319cd38b2ae31dc67d790f09a2cc00a52f create mode 100644 fuzz/corpora/crl/2bf9e8f595abb498d7b95437d7cbf1a09c4cafc7 create mode 100644 fuzz/corpora/crl/2bfdc3a477f55cb308015eaab655d276824397af create mode 100644 fuzz/corpora/crl/2c172e89c417cd4c4e12e4aa311e558eb7345449 create mode 100644 fuzz/corpora/crl/2c7f0c522b35a9e736de6a3298310a8370a129d6 create mode 100644 fuzz/corpora/crl/2c8620dcdcb31d3dd54497ca8e2dc87c1f8e9bd4 create mode 100644 fuzz/corpora/crl/2cc85c1e0d327f6c18e6f3c27d304ff15147928a create mode 100644 fuzz/corpora/crl/2ce2ada4615ff14e435859e5994b5b95a4f18d64 create mode 100644 fuzz/corpora/crl/2d2795bdc30449e4d578cf790599fb916abc7348 create mode 100644 fuzz/corpora/crl/2d31f0bb21e2b9732eb0e86937a9510ff526e275 create mode 100644 fuzz/corpora/crl/2d46570ab96922b33ee265b9fb49da9cfce6e62a create mode 100644 fuzz/corpora/crl/2d7377f47f7526aa37663d50c17150148ba16e1b create mode 100644 fuzz/corpora/crl/2d8ce44b307aa52a6fe4388d9dbe279aaa5f1a1a create mode 100644 fuzz/corpora/crl/2d96720090a7fc357288b1c565deb03a782b7ddc create mode 100644 fuzz/corpora/crl/2dd94a0e77109e7df795b335ea8aa14324df632e create mode 100644 fuzz/corpora/crl/2dda0759568e3180e9960d869fdda611e3e02799 create mode 100644 fuzz/corpora/crl/2e06743e1ee03e8272d478ea10f6856685f113a0 create mode 100644 fuzz/corpora/crl/2e12db2b172ef6f3b522273d1f6e4d52ccbff0c5 create mode 100644 fuzz/corpora/crl/2e3de6792acaaea843222dcb96665cabd02d78bb create mode 100644 fuzz/corpora/crl/2e92bc735bc537f5d2d99d9062a7813f5bf50890 create mode 100644 fuzz/corpora/crl/2e9fa43daba492f5342efc8f05abec87c29950e6 create mode 100644 fuzz/corpora/crl/2ed09bd21dedac787685232f3c5d20a78ecf486d create mode 100644 fuzz/corpora/crl/2ed6671868cffb7e30d2e751475ba6865270a286 create mode 100644 fuzz/corpora/crl/2edbdb88766bca0bc588c7b0f64cf4722dbb01ed create mode 100644 fuzz/corpora/crl/2eec778b210d1b8b676dea82ea8fa692c072971f create mode 100644 fuzz/corpora/crl/2efada6c1b1fa28da3f527607bef68ff18487a48 create mode 100644 fuzz/corpora/crl/2efc62fce38727af8aacbeae06f741c496c3c101 create mode 100644 fuzz/corpora/crl/2f487bf5690e42cdc6406fd2155e0e7fd9d7f90b create mode 100644 fuzz/corpora/crl/2f4ca6ccc87a2a69a715eea7b1bb92eb00b7e7c5 create mode 100644 fuzz/corpora/crl/2f58d3097ce56b13242c61327f82eab609987dfa create mode 100644 fuzz/corpora/crl/2f5e0aa21845828e62d428e1c6107af44832d753 create mode 100644 fuzz/corpora/crl/2f669d1d888a62b10ea78746ae0e96053b4fdb2b create mode 100644 fuzz/corpora/crl/2f7759ae015a2e777753601c628888fdb6612fff create mode 100644 fuzz/corpora/crl/2f81443c141517f9ab0b85c9365a13a63835b748 create mode 100644 fuzz/corpora/crl/2feb915533d5de39c7d97afde5df6a4bd251e228 create mode 100644 fuzz/corpora/crl/2ff73326dd70c5cfe1766d21e76359c35d351748 create mode 100644 fuzz/corpora/crl/3020ab0852d71c1a2922e6a504834268e6998736 create mode 100644 fuzz/corpora/crl/3033134271c266485f7834c09e83483964df2bef create mode 100644 fuzz/corpora/crl/304aa8a7d1c4cbd3203a97ddb598cad18d75ed87 create mode 100644 fuzz/corpora/crl/309c0b43c023606ec57fdbc2a6affcb6a1e8fe12 create mode 100644 fuzz/corpora/crl/30abcfdef5f4d3698e5c9b8e2d16bab9947e811f create mode 100644 fuzz/corpora/crl/30c197c95a3a9cee643655f4879fafada33e2f75 create mode 100644 fuzz/corpora/crl/30e9efc9554d67002095818e896ac3cb78048bdf create mode 100644 fuzz/corpora/crl/311f39a14da9388740e314a519265e6211eb917b create mode 100644 fuzz/corpora/crl/316b5b4b7cce7ce7f3d56a21f1fa19deb29b1751 create mode 100644 fuzz/corpora/crl/317268b39e7f02d5540c2fd2e86f23c21cb81cf9 create mode 100644 fuzz/corpora/crl/31954c9f10d08ec0feb92284b4df520163f27d73 create mode 100644 fuzz/corpora/crl/31b9d711c354ee25087386ba3184be793f6689a3 create mode 100644 fuzz/corpora/crl/31f76770ffb97c1ecdaa78df7f8f5404f6ad48e9 create mode 100644 fuzz/corpora/crl/321b987e906f83a3efad77af6c6bb33dc3ccbc07 create mode 100644 fuzz/corpora/crl/321fbabf0a30abd2f230982c11a989ed840809e9 create mode 100644 fuzz/corpora/crl/322299a02a5ffac5cf0ad57d9abe2a31c48a10a8 create mode 100644 fuzz/corpora/crl/322eb000da2985c71a37c97f0ebcea66401640f7 create mode 100644 fuzz/corpora/crl/32337f5c9e99c39982bb0e537d7cd9d6fc2f9f3b create mode 100644 fuzz/corpora/crl/32516dd197394a7eefb7eeb2e88ac215dea504be create mode 100644 fuzz/corpora/crl/32adf7caddc78b0557de90fc120da2514943f689 create mode 100644 fuzz/corpora/crl/32c00889ccddc4280580c9c6e77d5feb951d01bf create mode 100644 fuzz/corpora/crl/32c7e8cc0a80968371754152a898167bcab95e50 create mode 100644 fuzz/corpora/crl/32d25377e7ea78bde80d1a0117ab522f862c6350 create mode 100644 fuzz/corpora/crl/334261e89b9df0f019fa8d8226acf26a54692e30 create mode 100644 fuzz/corpora/crl/334b39ebd97643f0092214624329bf3cf860e54e create mode 100644 fuzz/corpora/crl/3373158da8061b7ddcf8dc4a696fbad8869795c1 create mode 100644 fuzz/corpora/crl/33790a4556362dd627c9e3a269dbcee17922e5dc create mode 100644 fuzz/corpora/crl/33943123c7c37300e2419f0e5a0e891ff1a646b2 create mode 100644 fuzz/corpora/crl/33b4d7bf6da02e64e8f69e68d9e3ab7449aab88b create mode 100644 fuzz/corpora/crl/3432c8e2d3d7523d1161328dd158dd04a34a8247 create mode 100644 fuzz/corpora/crl/34567d79cff41bc7958935d33f8c58fd2b0b6519 create mode 100644 fuzz/corpora/crl/346231626f4d576a381b7efe559269a1d134e23c create mode 100644 fuzz/corpora/crl/34691f8b0436eca2028f6dc9780dea6bfc6b49d8 create mode 100644 fuzz/corpora/crl/347c569d717de692df6b335596c8f1404aad9f49 create mode 100644 fuzz/corpora/crl/34c77b6813c0d31b459056319655f7960cf4aa1c create mode 100644 fuzz/corpora/crl/34cd4e4dede222df1389894ef0d9efd7008001bd create mode 100644 fuzz/corpora/crl/34df40bac5442837a3b2b740637fbcea46554e09 create mode 100644 fuzz/corpora/crl/3502826909f9684993c321bc80e5cf542f7b03d0 create mode 100644 fuzz/corpora/crl/351eeffe0f409e3320217ba58dbe5bb50b40f8df create mode 100644 fuzz/corpora/crl/352c6269579f6b759f3180adaf280dd69012639c create mode 100644 fuzz/corpora/crl/353abc2e5dffb7adb7c549f48a36fb9a25fc17c8 create mode 100644 fuzz/corpora/crl/354b299e37b3926765095760231fe36d6c67838b create mode 100644 fuzz/corpora/crl/3552024cfbd1ffd3706e06841b03b94b53e3f108 create mode 100644 fuzz/corpora/crl/357af43e63a1b15a1d6c52bcf420f11a3dee6acd create mode 100644 fuzz/corpora/crl/3585c21703126803e4237fab38ac4eea259299b8 create mode 100644 fuzz/corpora/crl/359ecc11647ba9a80d1fcbd6f7414afd931a11e7 create mode 100644 fuzz/corpora/crl/359f691f2c9a2fda09fb2682085173a68d30fcb7 create mode 100644 fuzz/corpora/crl/35a8cd72f905d5682c08764ae575b4921db75742 create mode 100644 fuzz/corpora/crl/364728f85c87c56c6f5e01b402a3ca4f7e081a11 create mode 100644 fuzz/corpora/crl/367a6ecba754336ccf270bdbbdddb38ef8546cd6 create mode 100644 fuzz/corpora/crl/367cce148a2ac5fdf29e442813a87f2226f98f5e create mode 100644 fuzz/corpora/crl/3682dc0393dd328231d54b0384c3f4c81f21718a create mode 100644 fuzz/corpora/crl/36856cdb2e5eb8ec023d9fb15188e80217bd8402 create mode 100644 fuzz/corpora/crl/3686453cf9ad98591e7a662b779ee2f72c10e906 create mode 100644 fuzz/corpora/crl/368cdcfea57ec1edb465d369bc6854c7e64ed90f create mode 100644 fuzz/corpora/crl/36e96f7b04f510c57e84fa7a1ef8b7c4f49c90df create mode 100644 fuzz/corpora/crl/36f9a24d15f4181781b2d81b99bbb4ea65244dc8 create mode 100644 fuzz/corpora/crl/36fec942305a02fe379646045ac45d3bbbab80a9 create mode 100644 fuzz/corpora/crl/372206918639173379a81a1e4ce7c68e26c1f771 create mode 100644 fuzz/corpora/crl/3738b8059d75896f40c24277a8e86e4f99ba6c5b create mode 100644 fuzz/corpora/crl/37d7f3d49580f4fc59fc768df3603b44408927c2 create mode 100644 fuzz/corpora/crl/37e65b1e1cf2492d761d20fecc0efd284b9bebd2 create mode 100644 fuzz/corpora/crl/37e8357b2f8844a972a7722d339df8080ed6d02b create mode 100644 fuzz/corpora/crl/37f75f5ade07c50371a99525d95dc7306c2c6adf create mode 100644 fuzz/corpora/crl/380ce41402e855090920b63e1f62ad2b58de2449 create mode 100644 fuzz/corpora/crl/381c49fca989a670a7e6944c509fb0099dd9ee60 create mode 100644 fuzz/corpora/crl/38296f1a9e41812d98a449717fbc3833d4ca1f6f create mode 100644 fuzz/corpora/crl/38390d5213e465270b63e57a6a489c59593bd013 create mode 100644 fuzz/corpora/crl/3889528a2185bcb5c648f7a743f8797a03f7e705 create mode 100644 fuzz/corpora/crl/389dc6678b7a60841d19aec28c6569e0328adcb4 create mode 100644 fuzz/corpora/crl/38a17cda90a79760e9afabe65f2482ca1121966f create mode 100644 fuzz/corpora/crl/38f96cfad0404c22b6276d466e0d0115db7e4614 create mode 100644 fuzz/corpora/crl/38ff11e7abbab28be10945d7d2f967ff5e51355c create mode 100644 fuzz/corpora/crl/39235b8dfac013b6ff20a4634b693bba3c2d8757 create mode 100644 fuzz/corpora/crl/39343d5c018d59a4fd5381ec78d40441453f6c52 create mode 100644 fuzz/corpora/crl/39350aa86b43c8ab1b03ce97f98d20922ab1360f create mode 100644 fuzz/corpora/crl/3942fcd120b4ae284deaa9196b576d93792af2da create mode 100644 fuzz/corpora/crl/3a051de4719d38ce77c7da4cf229f33be870835a create mode 100644 fuzz/corpora/crl/3a4837445c0b5283b5b1cc06bd9216b576b73b6d create mode 100644 fuzz/corpora/crl/3a57b4139e8f4d2a325bf77d55bc868f3e20a4b7 create mode 100644 fuzz/corpora/crl/3aa4c35bbe8751e6e75e63d09d268bf1eae0d039 create mode 100644 fuzz/corpora/crl/3ace422f96b9d45b0ed36a1d01799885447daee3 create mode 100644 fuzz/corpora/crl/3ad6d78fcc3bd7ab862d5c42b749717c847147bc create mode 100644 fuzz/corpora/crl/3afe1fc296b892600a34e9fe1c80f0d0b92366d0 create mode 100644 fuzz/corpora/crl/3b1851fa8464afda460ab3aa5a73bbbdc9dd895a create mode 100644 fuzz/corpora/crl/3b9b085d856709ca5ddefe68b1fd8c5679aeb7f1 create mode 100644 fuzz/corpora/crl/3ba5e8eaa7ef3c921c4f6f8914a763d4c98f3f2b create mode 100644 fuzz/corpora/crl/3baac544da2eaed009d9f63b7fa0a57b34bc084a create mode 100644 fuzz/corpora/crl/3bb18f3fb1d530184534172fa5148c60eb0e94c6 create mode 100644 fuzz/corpora/crl/3bd2e7ffd5e2c4cc3a112fd17eeff046fc98da44 create mode 100644 fuzz/corpora/crl/3c038e3f872d97741c301eaeefb13f79b4b6a279 create mode 100644 fuzz/corpora/crl/3c0fbf80e62b6487d04636e6155e1094a0f0cbfc create mode 100644 fuzz/corpora/crl/3c250d7934b790b958b6c3afcbfa8db910946642 create mode 100644 fuzz/corpora/crl/3c91d9b6ef63d351043bdba0f3fbd626a70e7003 create mode 100644 fuzz/corpora/crl/3d4b33a3dba42c25aa0ce257d33848ad947637a0 create mode 100644 fuzz/corpora/crl/3d7141641e059801f7c55e7f619bc477a3ace8cb create mode 100644 fuzz/corpora/crl/3d976d3b3197c9015cefb5e0123299c3a269b08c create mode 100644 fuzz/corpora/crl/3de96d3a5e565db5c25f5a31a47e6ebe9b3d78c0 create mode 100644 fuzz/corpora/crl/3df1bc1f8f239391f9c570242e0e25109542d2a6 create mode 100644 fuzz/corpora/crl/3dfaf7289ca01ec57e5f9a6eef577ce21a31de7d create mode 100644 fuzz/corpora/crl/3e017b7b96ea506e32c36d84a6f5b922a8d093dc create mode 100644 fuzz/corpora/crl/3e04f92fb6da5df510124b31250935df7b887f8c create mode 100644 fuzz/corpora/crl/3e28042b023502f53c9cdc77807b248d05462110 create mode 100644 fuzz/corpora/crl/3e2cdead630e9a7731435a2fed9265e384d3f965 create mode 100644 fuzz/corpora/crl/3e32d40c88e132ad315b72e7832a9a2f8b93ad48 create mode 100644 fuzz/corpora/crl/3e48fb9d73c15d84285c6113cc08e7ac9c2e02cc create mode 100644 fuzz/corpora/crl/3e4bd6249074bb37217c545b12fafe69ecbcb7e4 create mode 100644 fuzz/corpora/crl/3e6979b9ca8c43360c22346cf94cf51239692122 create mode 100644 fuzz/corpora/crl/3ea8dbe0f9bf48bd6600c0fc9a3cdc5cd690e3d4 create mode 100644 fuzz/corpora/crl/3eae81e657e0dfdd2770afa6f26f73fbb7af97fb create mode 100644 fuzz/corpora/crl/3ec0c8b12efb44e15d2538df7d473e741218c1b4 create mode 100644 fuzz/corpora/crl/3f371239b51bafb365398a32c8d5ad71e4047868 create mode 100644 fuzz/corpora/crl/3f3b4a49efe4c5b368ec3c6870d325569fc93158 create mode 100644 fuzz/corpora/crl/3f76e7ffb3c155020182c87a15457d15770c7a0d create mode 100644 fuzz/corpora/crl/3f8059b83422cc593ad571fdd7e9f481a7ea0db9 create mode 100644 fuzz/corpora/crl/3f8bcaa32a880f52fa34912052b88e5ad599d069 create mode 100644 fuzz/corpora/crl/3fb91e96cfec3e94034f5b5632f4d0a14f59c638 create mode 100644 fuzz/corpora/crl/3feff190e39ef12062ed899722d26e2dbad0e5a7 create mode 100644 fuzz/corpora/crl/4002a3a129b59d2613af461f35d0c04a1681167f create mode 100644 fuzz/corpora/crl/400f1b1c3f8a81d65e917964f9c850aec6628269 create mode 100644 fuzz/corpora/crl/40295fba2fed0b01b94834f28c72334b01caac60 create mode 100644 fuzz/corpora/crl/411bff756c480e12bc2058c4117bdfbf2876862a create mode 100644 fuzz/corpora/crl/4162ca0f06501532db3a7bcb9183e016ef81cef7 create mode 100644 fuzz/corpora/crl/41834f4f0e8830173a808d01b1d006bea4d96666 create mode 100644 fuzz/corpora/crl/41a69a86e70313269ae777d317208002c86e7f31 create mode 100644 fuzz/corpora/crl/4214113c42d77585de449cd6f7c6e56cf1be4917 create mode 100644 fuzz/corpora/crl/421e301c21b5ddc9daea463a479c4f71440e9e3c create mode 100644 fuzz/corpora/crl/421eb6bb5bbb60e1fc22cc8fb81e199c8efd5c53 create mode 100644 fuzz/corpora/crl/4262a6f2bce1c7017e32f497d544ad5e3e181c6e create mode 100644 fuzz/corpora/crl/42735b6ec44d74575376882934cb7e9405aaa910 create mode 100644 fuzz/corpora/crl/4292da3bae27bdde8b90d3eadb9c32688db1c6a1 create mode 100644 fuzz/corpora/crl/42a5a6fbbbae7b354ef7bf4d1eaedf724533224f create mode 100644 fuzz/corpora/crl/42e1a5367947049f4bb7435c7d88cfcaa8b3823c create mode 100644 fuzz/corpora/crl/431d1acde42929dbd929dcc0af9e18984390de05 create mode 100644 fuzz/corpora/crl/4328494694a00927e042ce8f28c9b6121ace17b5 create mode 100644 fuzz/corpora/crl/433223f60737c36ead4e6b9de06ee3129216e0bd create mode 100644 fuzz/corpora/crl/436213f9f94a0fefa128a581371cba2396683d35 create mode 100644 fuzz/corpora/crl/43c7d0ca6dea58d64510e63a6245aaa1a9fbfb09 create mode 100644 fuzz/corpora/crl/440886bb2224a11c0924c726c915fe849a96a05c create mode 100644 fuzz/corpora/crl/4445bd167222abc316653fc2ed74125b4147f35b create mode 100644 fuzz/corpora/crl/44617aec1d422030e7b654d01ba2d7b59d8804c9 create mode 100644 fuzz/corpora/crl/4494e171eba2b82a2658f88fb2930c2268ae4be7 create mode 100644 fuzz/corpora/crl/44a50f1a2387ba958610a9eeeb6c5144a304cebc create mode 100644 fuzz/corpora/crl/44b280db36721cf38271ce580a5f9f7328fe0f11 create mode 100644 fuzz/corpora/crl/44f74f3407b765f4dc3d4c69526172c4e78087ea create mode 100644 fuzz/corpora/crl/45202ac19740c45e05e111c71f146f143c94ac29 create mode 100644 fuzz/corpora/crl/45853cf61065f1a30c63b59563f55a21ff020827 create mode 100644 fuzz/corpora/crl/4585aab105624fd8d405f6ec89dff9d932c04a3f create mode 100644 fuzz/corpora/crl/45ba3cb085080390a1665fd28418bcb6bf3aa887 create mode 100644 fuzz/corpora/crl/45e9eb4d4a3baf90be6c9987593c7068a7ce6de1 create mode 100644 fuzz/corpora/crl/460d48fe532e6fdd1d064e199d111963cdd341c0 create mode 100644 fuzz/corpora/crl/46ab13b7fcd53c45883db806290eb2ea4cf5ac3e create mode 100644 fuzz/corpora/crl/46ae475639896e5ab898815fe704d848ccf4a098 create mode 100644 fuzz/corpora/crl/46c40b46f8f732a5f4a9097db25f383ecbb9741c create mode 100644 fuzz/corpora/crl/46e2dd30db6bdd3bdc3873a31ce2226621cb527d create mode 100644 fuzz/corpora/crl/4707ee6245a56d2a5f712c557cd843d13f75c4f8 create mode 100644 fuzz/corpora/crl/470a50c67129369ee98cb837249e300fc6eb25fa create mode 100644 fuzz/corpora/crl/471e107c5684959b158529bbaecce9baa098dbd1 create mode 100644 fuzz/corpora/crl/472ce23bdc6129fadfe063ced3031e245ed587d5 create mode 100644 fuzz/corpora/crl/47374cd1e1bb1f0dbd9ec86a376158a7a917e997 create mode 100644 fuzz/corpora/crl/47b868fa80af48f3d0f4d8f96513f894dd9decd3 create mode 100644 fuzz/corpora/crl/47c6a099e5a626e5fa6d3b02df92dbb3145eea9f create mode 100644 fuzz/corpora/crl/47c6b4573363bfe7f97dc362cc95a248431d9cd8 create mode 100644 fuzz/corpora/crl/47e39ccb0e421633976105cf2df819babd17165e create mode 100644 fuzz/corpora/crl/47eeff372cbcd3fe1187bda85a335356be57d0b7 create mode 100644 fuzz/corpora/crl/47f45e078efd13c383a2ad68a15c7defd8a93c76 create mode 100644 fuzz/corpora/crl/48117160851f63fd649f834df10580b7284e7ed1 create mode 100644 fuzz/corpora/crl/488b93e87858fcb48e077617cdc19318fbaa65cf create mode 100644 fuzz/corpora/crl/48b12cbb2a12c9337f7928e3b57fbcd6c22c5d06 create mode 100644 fuzz/corpora/crl/48e5e82cb65da5369fad62a3bc110dcb5e56d125 create mode 100644 fuzz/corpora/crl/48f6d96b6d4516e834d0de06ed71aefc2c92b43a create mode 100644 fuzz/corpora/crl/498f26f7161970f33bdcb9c007731417adbf6ca0 create mode 100644 fuzz/corpora/crl/49fb9f9d1ccf95624e4180155901fcfcf04c2ded create mode 100644 fuzz/corpora/crl/4a7b2e3412ff77292dfceebac06636a64aae186e create mode 100644 fuzz/corpora/crl/4af6b6170f9966dcc1dbb975bc8875a98d618704 create mode 100644 fuzz/corpora/crl/4afc3a7d5cba358a21e686e77c9d5acf8b300fd5 create mode 100644 fuzz/corpora/crl/4b0354bd6fb98c2694801ded6ba8be6d92bdacf7 create mode 100644 fuzz/corpora/crl/4b244ce31debccaee1050da6397a99b16528c7c3 create mode 100644 fuzz/corpora/crl/4b3f98b856294d4dd6d59ad9e9fc20520de339f9 create mode 100644 fuzz/corpora/crl/4bb96f76a9cc78b1bfb5b8f057d4172c468eeb73 create mode 100644 fuzz/corpora/crl/4bdf904984098e781b6c3e03ffd6168b51804a3e create mode 100644 fuzz/corpora/crl/4bf15388eee73997396ce773fdb8dae598bcb5e6 create mode 100644 fuzz/corpora/crl/4c26637cf6b4f379078c33e8f920e819ed99b3e3 create mode 100644 fuzz/corpora/crl/4ccf6001d821d5c54c078a88f79911282f8b2973 create mode 100644 fuzz/corpora/crl/4ce0b78cf69784a4b29b7397bc3a9c19d32072b4 create mode 100644 fuzz/corpora/crl/4cf8d2b48ab326b294162eca9771a7e3d2b6a13a create mode 100644 fuzz/corpora/crl/4cff3bf23add186b0dc55a6fe0dde921f49de692 create mode 100644 fuzz/corpora/crl/4d09c75ea1882bac3a83617108f961620cd96916 create mode 100644 fuzz/corpora/crl/4d4814548dcca8adeed9143da8968997d17b9556 create mode 100644 fuzz/corpora/crl/4d7260a72314357999ac9b9b1283fce5e53e1388 create mode 100644 fuzz/corpora/crl/4d7fd43dc01f5e14e078cdd0c27ce670cd70bbf6 create mode 100644 fuzz/corpora/crl/4da50ca21d785c0f03716956bcd8d147ca14084a create mode 100644 fuzz/corpora/crl/4db4a312413b24a8bed2193d3e0a048de83b4c76 create mode 100644 fuzz/corpora/crl/4dd2135e78b69dd5b290f2ccf19624cdfe8638c6 create mode 100644 fuzz/corpora/crl/4df507fac6959aa78d4956baccba5b00a8c13fd5 create mode 100644 fuzz/corpora/crl/4e09e54a5034b4b42f5e39919d379e235925ef88 create mode 100644 fuzz/corpora/crl/4e32d012b2a527dadb634a6c8143bd74dc4e64fd create mode 100644 fuzz/corpora/crl/4e6095d9e6c21a8215dde22be3713e114db2dfbe create mode 100644 fuzz/corpora/crl/4e6780e76a9e944470187fc8f3c340f56d5d5ebb create mode 100644 fuzz/corpora/crl/4e8376a9efda6b219d4ad4aaf8bb4e3d30fb3dfc create mode 100644 fuzz/corpora/crl/4f39a9c1655059ab946fc8dc28ed266f277a559d create mode 100644 fuzz/corpora/crl/4f3ae4e0d3dea2cce572a7e8c5b048dce7ab1b43 create mode 100644 fuzz/corpora/crl/4f63378fff9488dc4a51f4a24d30bf24ee0d96d7 create mode 100644 fuzz/corpora/crl/4f8777cc814db26340535df41d7f556a2a42ccd2 create mode 100644 fuzz/corpora/crl/4fddba0ea7da63c55cd0b5d36b787838d7f5e6be create mode 100644 fuzz/corpora/crl/501edbf11142382d9d2506b86012b143210ec184 create mode 100644 fuzz/corpora/crl/5046cc66412590e800c7c7ca5ac1e574147f7d98 create mode 100644 fuzz/corpora/crl/5054b9a9ee841571070cf02a53a95b2b03706f51 create mode 100644 fuzz/corpora/crl/506e9fdc2a78371519a4496d71829afa9b28a0b7 create mode 100644 fuzz/corpora/crl/51201558e8e1c8078444e3e0e0fbb9c8ba03f027 create mode 100644 fuzz/corpora/crl/5172c3a4ffc00976548a294c858c81db840b6d7e create mode 100644 fuzz/corpora/crl/51bcd5707edfa1f1656ba6c8b00654409e3cd4bd create mode 100644 fuzz/corpora/crl/51db8eb0f5e343c96ae85d1ba24296a8c755d069 create mode 100644 fuzz/corpora/crl/51ebd2b57ff2e402f4132ae1642fffbedf4a40bd create mode 100644 fuzz/corpora/crl/5202b2a6f32ccc1cc1f4f304c4bce8d4401ff5b7 create mode 100644 fuzz/corpora/crl/5254c1c34c11e737799267b8c5163b9721ee8bf8 create mode 100644 fuzz/corpora/crl/5263ee4315510274004730822fbc2f5cc789dc56 create mode 100644 fuzz/corpora/crl/52729c32c51f281968b6559bdc0fa76e5d53d42c create mode 100644 fuzz/corpora/crl/5275da65c383f181fecb978affc044e5da83e5ee create mode 100644 fuzz/corpora/crl/52c8ff628b1296536702d852752c12ae3f29483f create mode 100644 fuzz/corpora/crl/52d812800cfb57e75935f0e0af849a5c887b183c create mode 100644 fuzz/corpora/crl/52ec42ad604c254bc9940b2b8023324db851efcc create mode 100644 fuzz/corpora/crl/531a61a336869424c0fe5c30c4ea2fd0528ad3c4 create mode 100644 fuzz/corpora/crl/531c806a99a97f488043c25f086871206526f154 create mode 100644 fuzz/corpora/crl/5368cb84691bdbba766a5b525c05d528510a2dfd create mode 100644 fuzz/corpora/crl/53789f9cd38bcddf63f648a4444b804af15bac15 create mode 100644 fuzz/corpora/crl/538115299a4ec644a5b8ec58487a4d804d3961c4 create mode 100644 fuzz/corpora/crl/538df7ee1563a91f2db7e03711ffaf7597ca2331 create mode 100644 fuzz/corpora/crl/53e646a11c8e936c5c8356edffe2293b2bbcdc79 create mode 100644 fuzz/corpora/crl/53ec02435933f82682f4a16437a534507923acc3 create mode 100644 fuzz/corpora/crl/54052cad79dc0de72b7f9a4db6db797481b94091 create mode 100644 fuzz/corpora/crl/5462c0976963edb447e97959c980088a63b0590c create mode 100644 fuzz/corpora/crl/5471c4275cb3f603461b0fd116e4d7de05b09d07 create mode 100644 fuzz/corpora/crl/54759194c18d82c40b7a9fb6214686517166ec56 create mode 100644 fuzz/corpora/crl/547a345119f7841c5d4490625c6a57b612ed8087 create mode 100644 fuzz/corpora/crl/548ddcc64385ae6f4253758b44282e61118bdc3f create mode 100644 fuzz/corpora/crl/54cf6562b329c0b830c248f3a0f6074d8c6f7365 create mode 100644 fuzz/corpora/crl/54f9c85d869e2e4278a15894d56a52960dbb15cf create mode 100644 fuzz/corpora/crl/55089b519fedfde50cacd2ce3f6143d545415c7c create mode 100644 fuzz/corpora/crl/553e75ad0986ff29be6fd9a55812b78cd1a9622f create mode 100644 fuzz/corpora/crl/55c1d8fbac62fad061fffa5ebeb9187d92748c13 create mode 100644 fuzz/corpora/crl/55c55ea8b00a5f3f65f3ab897b0dcaaa441fb122 create mode 100644 fuzz/corpora/crl/55cdd52535dafdde11be908b4eab37dbb4c36ef6 create mode 100644 fuzz/corpora/crl/562421b3cf18e807de77b05cd4992643e4380a2c create mode 100644 fuzz/corpora/crl/5627e6018eb4987e9536fb4c0fa999a875966634 create mode 100644 fuzz/corpora/crl/565a1bd49c700934d649482febbfb029eabb9686 create mode 100644 fuzz/corpora/crl/56b191de85e3d69c2186cd3f42fbba9739994db7 create mode 100644 fuzz/corpora/crl/56d8645063225fcb7dfff3f403c7bd733800c261 create mode 100644 fuzz/corpora/crl/5712da89e5e194789f1c7f25820205e068843ad3 create mode 100644 fuzz/corpora/crl/57241d35a18880c0a76a6692775359fa476ec87f create mode 100644 fuzz/corpora/crl/573def277ebdd3dff485690fa14cd708505a5011 create mode 100644 fuzz/corpora/crl/57469b92a723fc146f6669aae28f0f42463d286e create mode 100644 fuzz/corpora/crl/576bde27c45a33a93ec0f09f82e08c4bef1b0b40 create mode 100644 fuzz/corpora/crl/57f9538233143b876b915f8b7209039080241558 create mode 100644 fuzz/corpora/crl/583db00bd2c73cd53ec48ec419d10e1e2ecb35c2 create mode 100644 fuzz/corpora/crl/5847917dcc14900b1eb9e7cf06161fb9c5a5c540 create mode 100644 fuzz/corpora/crl/588c7c91af9d9eed2fe9c7ba54865a85daa17615 create mode 100644 fuzz/corpora/crl/590c1881cd2515b08cb8d6a301f638d3a30aba69 create mode 100644 fuzz/corpora/crl/592d6ba84694624a372039190850c5df29763f4e create mode 100644 fuzz/corpora/crl/592f44a771638e173387a70a43ee5e78fa215239 create mode 100644 fuzz/corpora/crl/595188bfd67de0d7f685aef0ae888bfa332e1ea0 create mode 100644 fuzz/corpora/crl/59810464e1214a058797d055509d9c48af570c98 create mode 100644 fuzz/corpora/crl/59aa32e85b1b5d7e3453f08247d67396259245d1 create mode 100644 fuzz/corpora/crl/59c6c3080e31685cc006371a554d3fbc7f7331e6 create mode 100644 fuzz/corpora/crl/59cc9caa25785a5b1afc1a8ae8e65fd74d070d5e create mode 100644 fuzz/corpora/crl/59ee89b705438cb06a9c28affe381c35f80b351c create mode 100644 fuzz/corpora/crl/5a2be1ca27659330c41d330e3a92107b1bfebb88 create mode 100644 fuzz/corpora/crl/5a64b3e7c76384899a3fbc38eb972a579f2064c1 create mode 100644 fuzz/corpora/crl/5a657298df8408f41eaf5d3d779358f3a5bac61a create mode 100644 fuzz/corpora/crl/5aa1d35f1c40c4c41b772c7087d3b4dbae33ace3 create mode 100644 fuzz/corpora/crl/5ae1a99f78b6ab7b4a903ebbbdf775a3e35d219f create mode 100644 fuzz/corpora/crl/5af6fb93888e19f61b9bf6c166b4f5e752fda76a create mode 100644 fuzz/corpora/crl/5b510318d21b047c5370f14c672613fea51e5018 create mode 100644 fuzz/corpora/crl/5b619abe0366ad56d2fb700dd4372a5e7adb14d6 create mode 100644 fuzz/corpora/crl/5b8aa235f1747fc13075c3dddd9f5f10a459e87c create mode 100644 fuzz/corpora/crl/5b8aa277b79e8160a24cef3c19750ded5a7536c3 create mode 100644 fuzz/corpora/crl/5ba88ad3feacea4977a06fb768ca6820d93f9d3d create mode 100644 fuzz/corpora/crl/5bab6b15c50fe95c8f2c4a48d30801d02944f4e5 create mode 100644 fuzz/corpora/crl/5bdf26820cf032abde25c4f484e13cd87ac82087 create mode 100644 fuzz/corpora/crl/5be9e7a44de35496026425131d761d90373cda68 create mode 100644 fuzz/corpora/crl/5c0291854e3d33ede81fd16ffa89161952955122 create mode 100644 fuzz/corpora/crl/5c1c738397bc357cadff1603e002e2bf77b24696 create mode 100644 fuzz/corpora/crl/5c2fbad388261e186b479741c101f6d3df04df64 create mode 100644 fuzz/corpora/crl/5c4a6dd20cafd1a529de120669daddbc5cb8aa03 create mode 100644 fuzz/corpora/crl/5c7e4e9dbe52f2b9ae8c0186538ab648f90c80d7 create mode 100644 fuzz/corpora/crl/5cc91e870157f1998e8454f9cd5cebf39d0cf41c create mode 100644 fuzz/corpora/crl/5cdb320fe9b60367252852203a05209ee838e83d create mode 100644 fuzz/corpora/crl/5d1af8989ed33e32f5c6d2f01ddc080266b63ebe create mode 100644 fuzz/corpora/crl/5d4424c61d71a7470b781e7e9701f38847e3ce74 create mode 100644 fuzz/corpora/crl/5d47af64df78a8e5302e8b5ff551b493ddea66a3 create mode 100644 fuzz/corpora/crl/5dc843b21c6a8812a55ebd3a0524ba2d923cb533 create mode 100644 fuzz/corpora/crl/5dca6501e5c99e6f701b2d9348af5063e2bab8a3 create mode 100644 fuzz/corpora/crl/5dd3e592c2fa8483549d310de3805bdfad220f84 create mode 100644 fuzz/corpora/crl/5e0478032515d14fd706980526e212568d6b1c49 create mode 100644 fuzz/corpora/crl/5e04ce4d12fee534dda7da19477d4624607e5c8e create mode 100644 fuzz/corpora/crl/5e2a7215e609189d8374778a7eeca8dd5b7ede2f create mode 100644 fuzz/corpora/crl/5e2c63a206229fde1ff65c65bc48d948109a804f create mode 100644 fuzz/corpora/crl/5e4da61cdaa20d45aab44802320f908737eb7f0e create mode 100644 fuzz/corpora/crl/5e5513d0d759467efd28bff44210d83b52e0ada6 create mode 100644 fuzz/corpora/crl/5e57c829b72caacb181baa504f781347325a9076 create mode 100644 fuzz/corpora/crl/5e66f05ce382043298741d3af4afe12629046b1b create mode 100644 fuzz/corpora/crl/5e7d5799f863176bcd0111f3ba09e75569f2bad1 create mode 100644 fuzz/corpora/crl/5e8017a6120cfcd9b7ded59a1e6306255a00b3ae create mode 100644 fuzz/corpora/crl/5ec2dc59ee32b77939bdc5e44059338d30bbe4ca create mode 100644 fuzz/corpora/crl/5ec82dfaf0c0c850450deae6bbf9efea49af350e create mode 100644 fuzz/corpora/crl/5ed9c0dc18fe61de3cbd8003a2e46be4af294817 create mode 100644 fuzz/corpora/crl/5ef4a58f67300e5dfc11d9d3b6e9f2c62b58e543 create mode 100644 fuzz/corpora/crl/5f2a9c3df2e9caff05a1ef6202b7d2d3eee9edc6 create mode 100644 fuzz/corpora/crl/5f420c0a65cbb6b55287d7e73759d3512b58c598 create mode 100644 fuzz/corpora/crl/5f709f85a391fdbf0304e8ff90f14feec4740030 create mode 100644 fuzz/corpora/crl/5f7611c486f204c0e5a0d11dd0ea5ad2f6b5d2f2 create mode 100644 fuzz/corpora/crl/5f85f96c96d7e918ba25e5478d7399eed61aaf0a create mode 100644 fuzz/corpora/crl/60563a36e4557fb1139bbf07055bef1218de335b create mode 100644 fuzz/corpora/crl/6058ced57298a6f24bd940de15a339df9ff78acd create mode 100644 fuzz/corpora/crl/606d479c981ab44e4faeab4d511bb6319b23217a create mode 100644 fuzz/corpora/crl/6088a7b22a83380ad9f66eb5dd8fd7d0a50f4c32 create mode 100644 fuzz/corpora/crl/60a6f16242283034a9c1751b31dd5c32233cfecc create mode 100644 fuzz/corpora/crl/60bdbe7b9439cdcad0b878fa904b8d172865d767 create mode 100644 fuzz/corpora/crl/60fb6c4e2e59dc2a61cdd77b7d6ea43ddfca4b07 create mode 100644 fuzz/corpora/crl/613fbeb745af4e50bde62e063223b5885a85f39b create mode 100644 fuzz/corpora/crl/61413a3f2ff56fbdc6d13e7cc579568b7c8c8e94 create mode 100644 fuzz/corpora/crl/616a384f0eb3ee3a73ac3f6f99d04d559c52e1ba create mode 100644 fuzz/corpora/crl/61a80001525307a756214b4e50f2f31c1604e4e9 create mode 100644 fuzz/corpora/crl/61be10d7634c34ecc987c86ed48a21a59998cbbc create mode 100644 fuzz/corpora/crl/61ca418f423c25c6ea68d8cf4b0068741261bec7 create mode 100644 fuzz/corpora/crl/61fe1e156821d31b9e625c5218f4e837aeaf3edb create mode 100644 fuzz/corpora/crl/620dfcebad8dba36e450a464807c501fe5efe47e create mode 100644 fuzz/corpora/crl/6286c984085f00a14c54200404a2ae8cf3f96125 create mode 100644 fuzz/corpora/crl/629660ade23e34330863ed0b1408e8a1b823a811 create mode 100644 fuzz/corpora/crl/62af7a1cd0224e05614fa8ffa34259dc99b4e0a7 create mode 100644 fuzz/corpora/crl/62c86f19d278d12637bd5b0623112f06beffadfe create mode 100644 fuzz/corpora/crl/6331101396583364994a1112a97774d282abca69 create mode 100644 fuzz/corpora/crl/6333a4d4b5de7fe753202e00819978a0d27b7c34 create mode 100644 fuzz/corpora/crl/633f0d5412832eb2eeabb1f94338a30b1b38ba8b create mode 100644 fuzz/corpora/crl/63f34c8d057dc84df6596e540d99a0d8d0058c00 create mode 100644 fuzz/corpora/crl/64517ebc7a6d93ff4e8d7076d78d16ceb49f4c4b create mode 100644 fuzz/corpora/crl/6455823ec19c3bb656a9c393cc9d479d6cfac0e3 create mode 100644 fuzz/corpora/crl/646053fe0e25c9b09cd5bc8693fdadb93c1f3e61 create mode 100644 fuzz/corpora/crl/64696d6ae3cca0e15559310f418a35e112bb248c create mode 100644 fuzz/corpora/crl/6475f3ee17ea23ee912d57f0d388c3b5e2fdac9c create mode 100644 fuzz/corpora/crl/64b83a7fbec9e91772d2ef786eab4d6e9bb55799 create mode 100644 fuzz/corpora/crl/64dc42aa1cb5f531933db7b728b25b95d7238b57 create mode 100644 fuzz/corpora/crl/64dd46231ce227dcf17c568bfacdf36fc2cb1965 create mode 100644 fuzz/corpora/crl/6524326f8b306975835b59845083cc06d38efd57 create mode 100644 fuzz/corpora/crl/654480184478fae329adf9dc1a602071946d5e62 create mode 100644 fuzz/corpora/crl/656f6ed06d62fb3b3b0cb685893ec08f125d8034 create mode 100644 fuzz/corpora/crl/65748177041f5ee40abf3c4f4c8cc43f74cd2c84 create mode 100644 fuzz/corpora/crl/657a55e56e3f3fd67513b8d8bba7a1affba1a826 create mode 100644 fuzz/corpora/crl/65a172d9de45e3ccbb2ab2d0eac20ea834fbb2bf create mode 100644 fuzz/corpora/crl/65db1905eff3a7332782a58af2d8812a1d7257be create mode 100644 fuzz/corpora/crl/6600974d36c9314ac24770dcb429368b925af69e create mode 100644 fuzz/corpora/crl/660bf14ffb155b4e4a8b79f4a53d24b119908ad5 create mode 100644 fuzz/corpora/crl/66161823b078d422f64bb4bff0788ee1db691ebf create mode 100644 fuzz/corpora/crl/66292622824b6b9e421a9d75a0f5d73562f453d9 create mode 100644 fuzz/corpora/crl/663c7dd209cd789a1ee4bc98095d42830960552a create mode 100644 fuzz/corpora/crl/66c5b481b1c447c5927c0700318d58220e1d639d create mode 100644 fuzz/corpora/crl/66e6f050014a92ef5b5766f2c092ee752b50fa10 create mode 100644 fuzz/corpora/crl/66eca69c17d13e5c1303cf4558d8ba1a0a5c1b08 create mode 100644 fuzz/corpora/crl/673245f0252702782a7c7e190de5a7a9cddd7aa1 create mode 100644 fuzz/corpora/crl/6739e3e8295c657ccf333dd88a07eada3c136f04 create mode 100644 fuzz/corpora/crl/674a549cf5ec0285d961ebf5acbe57cfab7f2fc0 create mode 100644 fuzz/corpora/crl/6786dca64a916c7c9d5fae5c4aa45817f30a1a49 create mode 100644 fuzz/corpora/crl/678a90e73f7a955a00109a16d7b0e454c5092d56 create mode 100644 fuzz/corpora/crl/67aff04bb34ccef498c154ac9aafcf427d6b9676 create mode 100644 fuzz/corpora/crl/67e863c81e2ea2c091eed43ae34bb8acfd9733b7 create mode 100644 fuzz/corpora/crl/67f04c73c6865e003cd689d9711bf2bca46daa89 create mode 100644 fuzz/corpora/crl/67f4ce538b697a0fef3d4eb3caf78ac9c7728315 create mode 100644 fuzz/corpora/crl/681a808d7b7ea7d53fc7d69c073068d84c4a7da1 create mode 100644 fuzz/corpora/crl/6865890a1141f3502d7a19231b716d29c11f5726 create mode 100644 fuzz/corpora/crl/68c619a2c38897c64d53335d03a5d5e9b9d3129c create mode 100644 fuzz/corpora/crl/68eadbb64cb94b0801ecf9b7c652ba1e59062a9a create mode 100644 fuzz/corpora/crl/68ec3e27eecf9ffb406ea973e12680fd2f7477ab create mode 100644 fuzz/corpora/crl/69130931ef1d08e99a58b5dc5cc68074fc7b3d38 create mode 100644 fuzz/corpora/crl/69474be422fe69b7162884bd426b32c9ab6603a9 create mode 100644 fuzz/corpora/crl/694b5da184202300328f4b0ca105d74afff2505e create mode 100644 fuzz/corpora/crl/6950e3e2d8dae0bef05ab36cf7fdc8728329e427 create mode 100644 fuzz/corpora/crl/695d15b17aa191bcd819b57782bc5508421c9c41 create mode 100644 fuzz/corpora/crl/69711fa9764b490633d317d98aa3f47952a328e2 create mode 100644 fuzz/corpora/crl/69729e53d49fe3eda1aba479109a683ead04dcc1 create mode 100644 fuzz/corpora/crl/69810ff1f2506a7c04be1906f5899ae827e00de5 create mode 100644 fuzz/corpora/crl/69b267048df7b6eff8c2b48f0ef0a88604dd4a66 create mode 100644 fuzz/corpora/crl/69d5c668c32e3e488a09c6d9ba9886405e7b75c8 create mode 100644 fuzz/corpora/crl/69d70f18f880b1031a0ec586867d2afbcc448a24 create mode 100644 fuzz/corpora/crl/69f04cdad0db8807e2290e0e66832afa7936d60a create mode 100644 fuzz/corpora/crl/6a652b433c5bd80d96a46b9e02e684e791b984d7 create mode 100644 fuzz/corpora/crl/6a6a7d92408499e18a1f23d806010906ccc43a84 create mode 100644 fuzz/corpora/crl/6a6e7e4e60e7af976bec68769e79eda36fbcafca create mode 100644 fuzz/corpora/crl/6a7059131e44872c463c4a30000e9c8ad90b5188 create mode 100644 fuzz/corpora/crl/6a7a0b5da5b6d776fb2859d1cc85c05e414910e0 create mode 100644 fuzz/corpora/crl/6ab54a160313e770f331f551039eb69f92b42bf9 create mode 100644 fuzz/corpora/crl/6adced20615cefdd6f59617877b04a046cc69bbf create mode 100644 fuzz/corpora/crl/6ae97f69e2d955a788e7767ebfc5b64bf3558d80 create mode 100644 fuzz/corpora/crl/6af33ccc5515d73f50fdf6c809b0942d21828548 create mode 100644 fuzz/corpora/crl/6b0672c9dd58edb540aa4e9f6c0281bd9d2af32d create mode 100644 fuzz/corpora/crl/6b12e47f6c8d0f09710726bb456cf66e144e9797 create mode 100644 fuzz/corpora/crl/6b2b845da957125a040004fda051cd33f1afac45 create mode 100644 fuzz/corpora/crl/6b64c30f042f0c31138bd39df7cfd6501a204f51 create mode 100644 fuzz/corpora/crl/6b85661cf540c7d161b8d57d52c999cb5cb0406c create mode 100644 fuzz/corpora/crl/6b93f257ec6d1889c9f154f362040a3b5e7f3ac4 create mode 100644 fuzz/corpora/crl/6bb8b10d681ac5b6d19b13f9d167521f8066d296 create mode 100644 fuzz/corpora/crl/6bcb36d11e7c8a325b32baad7aa97469b0ce916e create mode 100644 fuzz/corpora/crl/6c0f0ef22ac9a99fb79276034c24f572197ae289 create mode 100644 fuzz/corpora/crl/6c1c14ef7a0b3819d4fcd2d9690862ff1d2abe31 create mode 100644 fuzz/corpora/crl/6c567a2b7a2e45ffc73b896d6aeb887c67721ecc create mode 100644 fuzz/corpora/crl/6c5d49ab6167f817f12b9ada7fa7ee91bd439970 create mode 100644 fuzz/corpora/crl/6cba74746ac78975b55634d43862e560f10444ff create mode 100644 fuzz/corpora/crl/6ce0dc0d81509349d1c9caf7705b5658ed8a0439 create mode 100644 fuzz/corpora/crl/6cf0eba1a6fcca7987761fa69c9672f487849ebe create mode 100644 fuzz/corpora/crl/6cf876e88424e5a1b87247f8c7972d4dc4f7d9df create mode 100644 fuzz/corpora/crl/6d2b93a680f3ac4d69bdfaba2cc258be8ac2ef7d create mode 100644 fuzz/corpora/crl/6d31ef1cdb4f9dda3eb64b7b75339f2ae1e4b9cb create mode 100644 fuzz/corpora/crl/6d43971297e6e5f0514fc724505a5992f2b0301b create mode 100644 fuzz/corpora/crl/6d59ff63709c1a6f21b73bf3a4d16b07e467619e create mode 100644 fuzz/corpora/crl/6d79c2c3dedef8c680c09acd37269448b9f0453c create mode 100644 fuzz/corpora/crl/6da1ba3861ab90e87d3667f1dadc4a7ba6423721 create mode 100644 fuzz/corpora/crl/6dbe3c11cec0d285a0b6fe48270f73a4af3844d3 create mode 100644 fuzz/corpora/crl/6dc5839fb492f5432474f3fe67a590a0b1e9e5ed create mode 100644 fuzz/corpora/crl/6dd7686d80d37d2507778f3b38f1059ebdade3cc create mode 100644 fuzz/corpora/crl/6dda564029a6a65bfe754f6712a021d1c067fa1c create mode 100644 fuzz/corpora/crl/6de8df6e1234b33c9162df5c98aa14436da939c6 create mode 100644 fuzz/corpora/crl/6e020f3fb3bf1960ce15f6e4e9869a8ac97b83b9 create mode 100644 fuzz/corpora/crl/6e049898e1aad78d9136f052efc6dcd4c77859fc create mode 100644 fuzz/corpora/crl/6e2c25b4a0abeb01e0265b2d761a0bebc84a115d create mode 100644 fuzz/corpora/crl/6e3bd32f00c7dbede5aa2eae76ceff8f7cab3ce8 create mode 100644 fuzz/corpora/crl/6e54b450df608f104315f606156fa8521a2bb25a create mode 100644 fuzz/corpora/crl/6e763d4f9e961077fb1f2f706d341ae40f6852fc create mode 100644 fuzz/corpora/crl/6e8ade6d609a61548840c52dd402308b1584143b create mode 100644 fuzz/corpora/crl/6eab4102a50966cba40bf9f84af29e317ae1e2e8 create mode 100644 fuzz/corpora/crl/6eabec94c3ccf355654356375f923fd09c174c0d create mode 100644 fuzz/corpora/crl/6eebcc839757079980592d3fb21a6cdebf35325b create mode 100644 fuzz/corpora/crl/6f3d3e8d7dd64d04267eed9efeea1b63dbbc1cad create mode 100644 fuzz/corpora/crl/6f82fd782cfab4df4741e0a362acb1fd3572e5f2 create mode 100644 fuzz/corpora/crl/6f86f882359b4d05e05cc86f17424e307fedc384 create mode 100644 fuzz/corpora/crl/7031dd6a22d030bd2153091f3d6b755e64cacfbd create mode 100644 fuzz/corpora/crl/70539138e5366d34ca3ebf62816f71ecf0f1ddd2 create mode 100644 fuzz/corpora/crl/70590178b1457a6277e2dfd4fcf3e5aac95a724f create mode 100644 fuzz/corpora/crl/70a738fcdde9d8d2d77b01c5dfd932eca8cd2abc create mode 100644 fuzz/corpora/crl/70c0b20298044403db0bdfeb454709b4d21b07ea create mode 100644 fuzz/corpora/crl/70c17558c708a13305b3fb6e86462234164cb4af create mode 100644 fuzz/corpora/crl/70d030eee01ad4aa68be119ce04c7253ae86c384 create mode 100644 fuzz/corpora/crl/70d11d5f920c22e241a12dd6a8342e04695b322e create mode 100644 fuzz/corpora/crl/70f3d9cbf1138b5ca938f414e1847902c31959c7 create mode 100644 fuzz/corpora/crl/7101dfb68a52cba1fbc4924646590f5e26183186 create mode 100644 fuzz/corpora/crl/7130c5b81509620966ec182de6f3c2eb5f5544c2 create mode 100644 fuzz/corpora/crl/713cfe77c2b125c02067abf8077afdf20c30f0a6 create mode 100644 fuzz/corpora/crl/7140f33b0ea03c8f19945d2140eea0b09f1788a4 create mode 100644 fuzz/corpora/crl/714c81518f0e97557982c54772f06bf40c184514 create mode 100644 fuzz/corpora/crl/7164234e681cd11c6882cba875a02e64ad730ccd create mode 100644 fuzz/corpora/crl/71708dc5ecc348b5ff1212ef4ab69b1930185969 create mode 100644 fuzz/corpora/crl/717227e72c77b177e34630f5518b68b1556ebddd create mode 100644 fuzz/corpora/crl/71a6d214f79ad99f1e5b72b314676c0a291df221 create mode 100644 fuzz/corpora/crl/71f72db50352b31384180a1da3a23e0840fe4785 create mode 100644 fuzz/corpora/crl/7206f278d20b01a560234339ae7ed7dd01227250 create mode 100644 fuzz/corpora/crl/7207c0f80921062f2123c41f4e877330b22e7ed2 create mode 100644 fuzz/corpora/crl/7209972a7d027208e57f8d0a5b30ee27204301f3 create mode 100644 fuzz/corpora/crl/722ce36822fee5736ff683f4b14b48cee57e3449 create mode 100644 fuzz/corpora/crl/722efb8896125c408849a0c29a913d42de4c0cff create mode 100644 fuzz/corpora/crl/72489768f5f01c6980fdd2f8bde93d9809272c4a create mode 100644 fuzz/corpora/crl/725ac867d1c479f1e9f90fc1769d64962110b7c7 create mode 100644 fuzz/corpora/crl/728284c5df133f7f4ddc859967d32fd7d5d75329 create mode 100644 fuzz/corpora/crl/72c28760a8a4f71d3d33bd25493a46956c05dd7f create mode 100644 fuzz/corpora/crl/72ca6866cb60a03b318d376cb859f71a4fdd7180 create mode 100644 fuzz/corpora/crl/72cdde3dc9740766ab35b26b18a7477c5242412e create mode 100644 fuzz/corpora/crl/72eb49aefac90f58fa97add9debc211f9dde3c5a create mode 100644 fuzz/corpora/crl/72f58dce20e233f3b8c3956625182b74833aa166 create mode 100644 fuzz/corpora/crl/73031b9fc61ca6f8c0a89d9a5a2ba0dbd8b5ab28 create mode 100644 fuzz/corpora/crl/734c04eaf87f2bc5cb782a67e9d4a538800a9faa create mode 100644 fuzz/corpora/crl/735ef0392743d8b4b9248fde6234f8f3a0071bce create mode 100644 fuzz/corpora/crl/73b17fe206ecd8185952e110d5f0218ee9453041 create mode 100644 fuzz/corpora/crl/73b594e7ac9cb88130831097bc729b1392a23f49 create mode 100644 fuzz/corpora/crl/73b96e8737c63df91d8cdd5c27d404981948a96c create mode 100644 fuzz/corpora/crl/73e89884ec73ee613af8ee2b57761aa101f5d7e1 create mode 100644 fuzz/corpora/crl/7411401d4d644c7efc35661054f01b8574bd6d52 create mode 100644 fuzz/corpora/crl/744c8db8044d3193eccab2d6d7b846c0db6a720e create mode 100644 fuzz/corpora/crl/7452c1da7b98a2334612358380412efd913d98de create mode 100644 fuzz/corpora/crl/748baf827bfafd1465ba2990646c92595a87a628 create mode 100644 fuzz/corpora/crl/748d19dee171ad571a2857dc8f98fb6f15258496 create mode 100644 fuzz/corpora/crl/749327075643d18f2730b8ae0be8d7c79b35314a create mode 100644 fuzz/corpora/crl/74f0ee2d5f811cc35cc3cc1e544007f5a91d14c5 create mode 100644 fuzz/corpora/crl/74fcbb1447758a687e31a50a8879b7c255770eb4 create mode 100644 fuzz/corpora/crl/75013f2f4fedf0de63071c088216da22d661a149 create mode 100644 fuzz/corpora/crl/7507d01594dcffec608508abe1674708e8086533 create mode 100644 fuzz/corpora/crl/75186e51aafa65751e8d5c29bf4990ac0b70fac6 create mode 100644 fuzz/corpora/crl/75393cf41ac7eeacfc9fd3628c11ce44cdca1365 create mode 100644 fuzz/corpora/crl/75a9bdc12b380dd072d00cb7ae75ca1a80c8af38 create mode 100644 fuzz/corpora/crl/75eb703128489395576b69e1ffca01f111a7ad9e create mode 100644 fuzz/corpora/crl/76051203f5ca25b1328a9d923630fb938d00db83 create mode 100644 fuzz/corpora/crl/761c3ad843a43678bb550ff17719fd1f3f0be202 create mode 100644 fuzz/corpora/crl/761fbb1867cbb7e7648277312e744751d6af43da create mode 100644 fuzz/corpora/crl/7627d91876f419e665cc178d1f07673f0e5d5152 create mode 100644 fuzz/corpora/crl/7666bc76ed8b4b979de4d96c9034281859dc997d create mode 100644 fuzz/corpora/crl/7673f6422e4500f7d07afe7ddf8392b8f81ba322 create mode 100644 fuzz/corpora/crl/76880db8c7edd73e206f5ef28eba2286c5f078a2 create mode 100644 fuzz/corpora/crl/76b59735cdc40592fb48182bf56647439d09403d create mode 100644 fuzz/corpora/crl/76f99b01d240c2b673cac5130e6c6e25bba9927b create mode 100644 fuzz/corpora/crl/771b1052af9a89d47e5f0be8a805ac9571817923 create mode 100644 fuzz/corpora/crl/774c2c6d4c56142d47c15db8c5d9eb6e9312d1ba create mode 100644 fuzz/corpora/crl/777a7e8393f652cfe4b884d5a7fd5431c46cfcad create mode 100644 fuzz/corpora/crl/77835dc510f23fb74141f0fcee49e3bcc645e10a create mode 100644 fuzz/corpora/crl/778a1ea9254ee37286a4a04c1af963b11bb3167a create mode 100644 fuzz/corpora/crl/77909c81d8c917125eaee8bb74a081c2190a3bd0 create mode 100644 fuzz/corpora/crl/77b12aa49a2c485dd25b4288348c5f2f4539e1a9 create mode 100644 fuzz/corpora/crl/77c3a005252e11a4a8250af7d1b89a12e603f7e2 create mode 100644 fuzz/corpora/crl/77cfaefa9b4d6a4528b83a5e138ef05a63a760fc create mode 100644 fuzz/corpora/crl/77e5f3bbd05c8b3fef21e37ff6863fedf677f5c8 create mode 100644 fuzz/corpora/crl/77f976f72b1a0cd7475f92118ac848feafcf9b38 create mode 100644 fuzz/corpora/crl/781bd180e6a3277f70b588da6cab71830afe4777 create mode 100644 fuzz/corpora/crl/781da8df2fbb19b5df1ec3f6368a54f4944d7a8a create mode 100644 fuzz/corpora/crl/7821ea8e660020ec06302e0916684a339840c91f create mode 100644 fuzz/corpora/crl/78590d7b89f938bd5ea151d566f9c249020d58c0 create mode 100644 fuzz/corpora/crl/7893632bf5ddce3befd3193e7656967a6579b0d0 create mode 100644 fuzz/corpora/crl/78a2ae4f971b918947e49f85d26d5cdcbb7feb24 create mode 100644 fuzz/corpora/crl/78b5f02e1742b72ddd73520f64385253f39ee895 create mode 100644 fuzz/corpora/crl/78c18d81fb868f1b18424a3648a233573dd1af8b create mode 100644 fuzz/corpora/crl/78d138d25729b00ca15499d263b9ae4d20f27511 create mode 100644 fuzz/corpora/crl/78dc69bf0f6e75d965774e2a3b6fb5d2faae523c create mode 100644 fuzz/corpora/crl/78e2a31edf5b03046e21bb2d4a8fed2beb9face3 create mode 100644 fuzz/corpora/crl/793cda8ca0e32851aefed3cbef5de633a2cfd67a create mode 100644 fuzz/corpora/crl/794e34bb037e5774251d7d9ffff883eb847f72dd create mode 100644 fuzz/corpora/crl/79650aa4b9c9adde4ec90ee81b3573f46e0fb9b5 create mode 100644 fuzz/corpora/crl/7998303099c61f1737e0ac91bb8f9572ebadc590 create mode 100644 fuzz/corpora/crl/79a8f1bad388024622225f4d2a131572455feb9f create mode 100644 fuzz/corpora/crl/79b23fc479acccadd4d351e026167a2f46b8708f create mode 100644 fuzz/corpora/crl/79b482a2a686c4d2e3c29725aa2cdbe71bc94412 create mode 100644 fuzz/corpora/crl/79dd2620da090f90be859d542f1a74baca042176 create mode 100644 fuzz/corpora/crl/79f23f36ee86cfc21953f1284083c2c3e9acf16a create mode 100644 fuzz/corpora/crl/7a0ac9641687f2691d03e691f8075f1918493531 create mode 100644 fuzz/corpora/crl/7b26c88ec28d0ada4104903dce4e379e9cfc8534 create mode 100644 fuzz/corpora/crl/7b55d62eb9e92ac03e59bd05b06d59ae7378646c create mode 100644 fuzz/corpora/crl/7b596265e25bd28bbc46940ea6b3e77298ac6b89 create mode 100644 fuzz/corpora/crl/7b70cc0f0da5ab8ce72848741f000833f5b6bf98 create mode 100644 fuzz/corpora/crl/7b7b0a46e894cb6c3141c343a6ba01b1b877f458 create mode 100644 fuzz/corpora/crl/7bbd818d1267acd4c3fbb474e7f397e00b0b5b02 create mode 100644 fuzz/corpora/crl/7bbf5120a42db57a535f976496777f84bce3e890 create mode 100644 fuzz/corpora/crl/7bc9779be2cb26b18883d07aa7a32ea7ecb99d1e create mode 100644 fuzz/corpora/crl/7bcea9fb14207c231f85184d5017524847abc926 create mode 100644 fuzz/corpora/crl/7be22848288052552ed6942465f61d4955d087a8 create mode 100644 fuzz/corpora/crl/7c195ca1bdd59eef58c3fa5a033332b5aa5b0050 create mode 100644 fuzz/corpora/crl/7c36891b7e834f281aaf72c3ce57e8b2942a9c37 create mode 100644 fuzz/corpora/crl/7c68f32e4ee9705958165e01dc6fd5b6f86a70cb create mode 100644 fuzz/corpora/crl/7c7d5377f73c1894058817f90ba7233b352b8f29 create mode 100644 fuzz/corpora/crl/7cc72bd71b511461127184a0a6c40c1aae630a7a create mode 100644 fuzz/corpora/crl/7ce7fa57fa27e6e82e719bacb5f17abbabb66c0e create mode 100644 fuzz/corpora/crl/7d6013e313b1393dd3335179b2e2491726f6e7da create mode 100644 fuzz/corpora/crl/7d67bbfd6f912b4c184496513a2bd9a735c12e1e create mode 100644 fuzz/corpora/crl/7d7abd7a0459e7695d9fa2f6cfcbf05ea6a0674d create mode 100644 fuzz/corpora/crl/7d9d7a22954f4c527c9c9a8067785ce99a7c7cfb create mode 100644 fuzz/corpora/crl/7dea951377123ebccf9b985cf4c8aa8df6b55173 create mode 100644 fuzz/corpora/crl/7df4e3085922ec751ee65cab852f78c3965396ff create mode 100644 fuzz/corpora/crl/7e858ebf90a798299ba1ded2c746316b50f02262 create mode 100644 fuzz/corpora/crl/7eb22351b0a65b17a59c1d24e151713eac9ffd12 create mode 100644 fuzz/corpora/crl/7eb3b660df3bc57d1fc7afafa4a41b33e51a6648 create mode 100644 fuzz/corpora/crl/7ebe4f27f19fed7bc816ff7fd735c177b27fa82c create mode 100644 fuzz/corpora/crl/7efdfde44973ca051c3e2ee40fe48890d1e3fc2a create mode 100644 fuzz/corpora/crl/7f04de56eb312973fd80013d099789fd4964b6b5 create mode 100644 fuzz/corpora/crl/7f2bb7cf7a302298c6a89075c80a96990f0bea0a create mode 100644 fuzz/corpora/crl/7f5fc2fb280c707bd8b33868409d0477871866af create mode 100644 fuzz/corpora/crl/7f753cb8807806f72a7529b27c199e4f4d63dc87 create mode 100644 fuzz/corpora/crl/7f8500d5a5630a6c4a987315c9321c05b42be1ab create mode 100644 fuzz/corpora/crl/7fbc2cb3113e9d96520508be431f1a7baa68a648 create mode 100644 fuzz/corpora/crl/7feeee14cb43fe064a058a865ad930c0f3074d94 create mode 100644 fuzz/corpora/crl/801eb70b0f8d7a4ae3e8470ca9ddd546f647b806 create mode 100644 fuzz/corpora/crl/805254d91105b06d84e26e400aec6c2837175588 create mode 100644 fuzz/corpora/crl/8055358eb5dd45590276f831af852d17841c80af create mode 100644 fuzz/corpora/crl/80c5e1caaa1c04a7841994fd2351b8579584536b create mode 100644 fuzz/corpora/crl/80e628d6b51b76ba8fa6192b53c77a6f674a36d0 create mode 100644 fuzz/corpora/crl/80e96f7861aced0dfb0fef2a90331d5f7abb6673 create mode 100644 fuzz/corpora/crl/80ec8743ded5e834a2a76b32a203e6d1180e0bf1 create mode 100644 fuzz/corpora/crl/810abd2a8d3b80181edc4fac6629ea5475adbcbd create mode 100644 fuzz/corpora/crl/81169a3c156ed802affe4ad246cd3751ceb0acdf create mode 100644 fuzz/corpora/crl/811c3dfcc03fbac2102b833eb2ddb1d44df6fea9 create mode 100644 fuzz/corpora/crl/813c94d9e4643d37d1ab1951c5a70e0383cf1217 create mode 100644 fuzz/corpora/crl/8154dbba8d38971ce44735a2c4b08cb3bd0150c5 create mode 100644 fuzz/corpora/crl/8166220f7262a283ba9cb585db2cab8740d0f8ad create mode 100644 fuzz/corpora/crl/817d750918fbd1a79067c03f9f5656d979e5e0d3 create mode 100644 fuzz/corpora/crl/81ad5f8f24ed8e42cb773713a7365cf91f706fa9 create mode 100644 fuzz/corpora/crl/81c52d1919ef647de0db187e59dd02b7f01a72fa create mode 100644 fuzz/corpora/crl/81db3e56131cb06dfa9501c499f82670e5c23707 create mode 100644 fuzz/corpora/crl/81ed13d6f0bd4342cd937d01219cf5a1c0e7d818 create mode 100644 fuzz/corpora/crl/822cdf4433b66e631d4bc626e27112b3ec533151 create mode 100644 fuzz/corpora/crl/8242ac7b154823a08b9753dbb8617ec35d60836b create mode 100644 fuzz/corpora/crl/826231376254e18a22d40c246a6bdf1e119560bc create mode 100644 fuzz/corpora/crl/828b397b1942bf6ce30d725de548c1642f36abef create mode 100644 fuzz/corpora/crl/828dea9d3a2d5f936716a1241c4519d2d972c037 create mode 100644 fuzz/corpora/crl/82a1d4dcd1b55859bbd606b27bcdd979569ea1c1 create mode 100644 fuzz/corpora/crl/82f657e5ebb838c6fbfe502cb9d40b15af38156f create mode 100644 fuzz/corpora/crl/8320586fb7b705f3a38ebc3277472dc0728ca26f create mode 100644 fuzz/corpora/crl/8344dd0e74cb4a980ea3ab11dfb2f60fbbf6a7df create mode 100644 fuzz/corpora/crl/8367302d355be29f39bbdd484caaa3aa24791e6a create mode 100644 fuzz/corpora/crl/8379e3456c5d8f2f4835a1f6ecd1f2908ad73d7d create mode 100644 fuzz/corpora/crl/839af9967801d939acf61faa66ab0a556f1ebcea create mode 100644 fuzz/corpora/crl/843a8bcbe7d594a75090573523b2e56a88c71377 create mode 100644 fuzz/corpora/crl/8463dfbeca5589642ec05cc4508de90763b596b5 create mode 100644 fuzz/corpora/crl/849799627af95e8cd1419d4597baf3c691cc9517 create mode 100644 fuzz/corpora/crl/84a4952a7637d39fd756f664ab443c784d89035b create mode 100644 fuzz/corpora/crl/84a86c430a9d4b02ab4b8a3c95baac60fc12dfc2 create mode 100644 fuzz/corpora/crl/8540e91d008fa67ea71e6a6bc61c7db3e54e5e13 create mode 100644 fuzz/corpora/crl/8573e6c750bc91cf87058d447121164b544d44ec create mode 100644 fuzz/corpora/crl/858b9fec300342b9b6069b41f6f3899200603232 create mode 100644 fuzz/corpora/crl/858f52112832d767e3af695d2a123a0c676e545e create mode 100644 fuzz/corpora/crl/85a40665965c032e41dc5eff15e0df5abeab4ef6 create mode 100644 fuzz/corpora/crl/85b0c7c422c3f801cebcf4a1618c6a05989abbaa create mode 100644 fuzz/corpora/crl/85bcd426a21863414d1a9125daccedde79a8515f create mode 100644 fuzz/corpora/crl/8623214b3b0eafcf51bbd2fd7d771cf2277b6a46 create mode 100644 fuzz/corpora/crl/8636e4c068a694215410b5ed51aefef245f0b040 create mode 100644 fuzz/corpora/crl/866e09804cfbbd9c8d260deb8c826da5475f3d0e create mode 100644 fuzz/corpora/crl/8671b7dd0e8c61a423b66db605c8af40a2041184 create mode 100644 fuzz/corpora/crl/868a2498461c9bca78df81d67ea4752e820fe2b1 create mode 100644 fuzz/corpora/crl/86c70f0657fff13e20da0eb3b0f45c196ce21a7a create mode 100644 fuzz/corpora/crl/86e39b8b9d5905611730ee40ab905a8b732a1349 create mode 100644 fuzz/corpora/crl/86ff1a0454948ecbf4d3657680714909b13a6b8b create mode 100644 fuzz/corpora/crl/877bf69ef02280d886869b57809bd567a1546f0a create mode 100644 fuzz/corpora/crl/87bcccff1e64ab867e42ad2ed6f6f8cb37f1905f create mode 100644 fuzz/corpora/crl/8838cfa645cfcffeb8b50464c8d4f035eabdfcb5 create mode 100644 fuzz/corpora/crl/885d5017bf961c2cb9cd81e05ee93e03d44982d9 create mode 100644 fuzz/corpora/crl/889f9ae39b7c42ffdf51f39c62a73b5e52868e4c create mode 100644 fuzz/corpora/crl/88c4395214b5f3aba93bea4458dea37672261098 create mode 100644 fuzz/corpora/crl/88cc9a01ad57eb4db248e086cced8e921f758566 create mode 100644 fuzz/corpora/crl/88fdbc963ec60a4bfc3cacf70ed2f4185430c434 create mode 100644 fuzz/corpora/crl/8903b3b6c9b0815cfd0553fafa016a6e1286004f create mode 100644 fuzz/corpora/crl/89095243ef564fd351536c303cb7cb9fcdf17429 create mode 100644 fuzz/corpora/crl/891037a9c9b059f9599a588507f4bd62fb91b9eb create mode 100644 fuzz/corpora/crl/89293e651b150c701c90953bc6addb9170d3ee29 create mode 100644 fuzz/corpora/crl/892afafcdf11cbc96a1b6742f54d60c29786f831 create mode 100644 fuzz/corpora/crl/896b12d25aa96a6ae09e7920ee8131bacbe9be2d create mode 100644 fuzz/corpora/crl/89bd87b37dd3e962a23a1a4bd09fdfed9517e71d create mode 100644 fuzz/corpora/crl/89c18b37c15ee4e8346a37f9eafdc0db9dd9149a create mode 100644 fuzz/corpora/crl/89f2017534ee6120372bd8a6f4b0c718686060d8 create mode 100644 fuzz/corpora/crl/8a0a402b518b7a9843ba71078b0242f5e39bf0b3 create mode 100644 fuzz/corpora/crl/8a237ab76edd158b544d318f5427d070a957d7c0 create mode 100644 fuzz/corpora/crl/8a2a2e1821af79b3a2362319184a3f5ed4bed6d9 create mode 100644 fuzz/corpora/crl/8a2ba82ecd7dbff89d30c6cd9d7c61deb779f4de create mode 100644 fuzz/corpora/crl/8a3306f6e49bec06ceba060ca47dd2c7c01c8cb9 create mode 100644 fuzz/corpora/crl/8a74e96c96ca6c7868516546f4c40d7f3a02b77f create mode 100644 fuzz/corpora/crl/8a7881e6f1b82d493ec3f05452ec9eec8473bd93 create mode 100644 fuzz/corpora/crl/8a85d03dc9f7d261745051813539d21bc143fb66 create mode 100644 fuzz/corpora/crl/8ac9e8a3d41dcc0242747d9031c3903c9b904200 create mode 100644 fuzz/corpora/crl/8b13c794b1a5ed6d9c75950f3d854704876e0e9b create mode 100644 fuzz/corpora/crl/8b192b7496ed42574d3ddf93be8fe6ef0f040564 create mode 100644 fuzz/corpora/crl/8b2d87468e8819e1568db4b753878a28b1d3ceb6 create mode 100644 fuzz/corpora/crl/8b3505ae2e2bdd91a0f42fd070836d43188d4f57 create mode 100644 fuzz/corpora/crl/8b4d23afe2332ba3e62a2842c413a0794ebc5a03 create mode 100644 fuzz/corpora/crl/8bb06e72c10c2387eaca45c1e653844554442560 create mode 100644 fuzz/corpora/crl/8bda80a41dda1b3c9fd69d86e60871c1367c36b5 create mode 100644 fuzz/corpora/crl/8bfca433e93225a1e92503f7912cca23c6a5edc3 create mode 100644 fuzz/corpora/crl/8c336341150f8545acd3b2680a8499dcd5cdbd11 create mode 100644 fuzz/corpora/crl/8cb0379c11e169bb2f5913ece938e2cb44960333 create mode 100644 fuzz/corpora/crl/8cb50f115bdaca69a5ca5a2328f58ef00dc3eb66 create mode 100644 fuzz/corpora/crl/8cb78b1c799047ad28af8396865413415d2d43a1 create mode 100644 fuzz/corpora/crl/8cc939185ec647e574ed98fa73d9aaecd15ed706 create mode 100644 fuzz/corpora/crl/8ced95d51f97f90442a7ff952a6b1e9ad3a50d9d create mode 100644 fuzz/corpora/crl/8d112d4fcc18a0d4f36379e172523e0ac4c5bd6c create mode 100644 fuzz/corpora/crl/8d423339b2e964d59e5ab75b501f6981f23ab571 create mode 100644 fuzz/corpora/crl/8d52554e55d9e8a9882322f4b9bada395075c398 create mode 100644 fuzz/corpora/crl/8e2a7a32b9a7d64668fff5074a20ae1dee483a39 create mode 100644 fuzz/corpora/crl/8e3228904d6c391f06a7dc5b107d417d4bd4ed0b create mode 100644 fuzz/corpora/crl/8e3f2dbecfa1e17975c5ad97a3fd2ad8928c4995 create mode 100644 fuzz/corpora/crl/8e84de105905d6164469a7dcb14bd1e48587df23 create mode 100644 fuzz/corpora/crl/8eaf415e453b97476345961d9649bddf0be225ee create mode 100644 fuzz/corpora/crl/8ec0d3440913121968af57149d5d72c82ab94d34 create mode 100644 fuzz/corpora/crl/8ee9a6a54cd93f72a8d297ff1869781379259624 create mode 100644 fuzz/corpora/crl/8f24d9b915d5cda47ac85d06a23726f33bcdaf29 create mode 100644 fuzz/corpora/crl/8f53f3e64424f46feee5d2b8be937292686941f8 create mode 100644 fuzz/corpora/crl/8f812d1ac41bb6da9c66b433d60e49346ed065de create mode 100644 fuzz/corpora/crl/8fb74ecfe42fc08f6c58f420e65431b4b08204d6 create mode 100644 fuzz/corpora/crl/8fe4de30999082d6bdba660504bbccb8f257047f create mode 100644 fuzz/corpora/crl/8ff49c7216ee8d795d3c3d4e7f7f2d32d28de856 create mode 100644 fuzz/corpora/crl/904075a1a17eec7da514af7d6bc6d847ea6f97b8 create mode 100644 fuzz/corpora/crl/904af246f904715cbec78e50bf977d01e6782fc4 create mode 100644 fuzz/corpora/crl/904e2fae0c143cc7436ddd6a1d10c7e230719179 create mode 100644 fuzz/corpora/crl/905e38f0879cb5491f4e652e53d1bc35fc790460 create mode 100644 fuzz/corpora/crl/9068971e4c05beb57af603ff5bebfbfd270cd8b0 create mode 100644 fuzz/corpora/crl/90bdea8d24e492a7b2c0c7e01117ef5d947cb9cd create mode 100644 fuzz/corpora/crl/90e44747020ae78b7b5110edcbd04463c89a3acb create mode 100644 fuzz/corpora/crl/9122dc2257aaf2616c3602e9fb45d53c15928274 create mode 100644 fuzz/corpora/crl/918d20b728aaea3e925e98ba4027d6edff2dbc3f create mode 100644 fuzz/corpora/crl/91ab7ad3050dd9f3c30962969882c6cefe22b6d6 create mode 100644 fuzz/corpora/crl/91badef6dfd707a8928ca62cd592347c16241a3a create mode 100644 fuzz/corpora/crl/91d4623d5e024399da1bc270c9405de13a9120b2 create mode 100644 fuzz/corpora/crl/91f9d9449c25f836d440931f5f982043165208a7 create mode 100644 fuzz/corpora/crl/922284be94e034438aa087bbc8504ea37bbaf6f3 create mode 100644 fuzz/corpora/crl/9226b0a2074059e8972bdfed94ac9cbf93316c63 create mode 100644 fuzz/corpora/crl/924d3593850ef3c5508df3047816587819154291 create mode 100644 fuzz/corpora/crl/925496bf0f0a5ffa046b819239897a481bbe6605 create mode 100644 fuzz/corpora/crl/9292a63a01fec451dd1d748cb94fa1167a4c90b0 create mode 100644 fuzz/corpora/crl/92ad87bd447a649e58bf0d90b68ac3b1f5cf89c6 create mode 100644 fuzz/corpora/crl/92c60eaecfe278d6706afd595b568077ed0ca4ac create mode 100644 fuzz/corpora/crl/92fdd36f4f267303bf3eb41534116d72cd51aca6 create mode 100644 fuzz/corpora/crl/9300e45be11757bf2b32aa8d3074cda82a77ffd2 create mode 100644 fuzz/corpora/crl/93105ead1fcf4bc1b49ac9240b43e71d9a22552c create mode 100644 fuzz/corpora/crl/93687baba974345611424845a0ad4a21401ba1ef create mode 100644 fuzz/corpora/crl/936d507c08e7cd0999ee9ac9ee80153b20a41477 create mode 100644 fuzz/corpora/crl/938db7219725d5ef6ef605b0fffd4465b4a25173 create mode 100644 fuzz/corpora/crl/93afe284d0921bc9f690ce14ce5f48f4b122095c create mode 100644 fuzz/corpora/crl/93e0a608fd2199f9363af71f96252efdf25f9ece create mode 100644 fuzz/corpora/crl/93faf85a713c4c71145cdaf67e11874107aba428 create mode 100644 fuzz/corpora/crl/94035114a3e194e60d329e598cd85ce1cd187aa3 create mode 100644 fuzz/corpora/crl/94e6b16a05a7f88c5d271ba99945d7a2dce99c5d create mode 100644 fuzz/corpora/crl/950effd316485a75b309e4872039ca622f9865af create mode 100644 fuzz/corpora/crl/9523d6a8e97ced6f66db578a2ea970763e75e0fe create mode 100644 fuzz/corpora/crl/9542017b825672beda9b0fd6864a8a89f7e86631 create mode 100644 fuzz/corpora/crl/95f1cb35ba311433ad3d0fb9e95bbb18d975c43e create mode 100644 fuzz/corpora/crl/95fd9d370539e07ee1880bcc33d5c89c7e97093e create mode 100644 fuzz/corpora/crl/9605b077198412a5d7cc55d01f60d33a7e151aab create mode 100644 fuzz/corpora/crl/96150fd59d947fb616e1bd0f8ad5ece90699e9b3 create mode 100644 fuzz/corpora/crl/96383ce8ff2e7b939195ef8d221873059c4d5d1c create mode 100644 fuzz/corpora/crl/96439c1e7922acc98ff538a1d73501577be0916e create mode 100644 fuzz/corpora/crl/966b04475e3acf8d0e3600e682c7e698dc6fe540 create mode 100644 fuzz/corpora/crl/966bb6bd347a42fbc36cf82efa23ba1040eda869 create mode 100644 fuzz/corpora/crl/968c01cafd47a902f5444d0293fd596d3edf38c3 create mode 100644 fuzz/corpora/crl/969ae7e00ef72155a3f50e6cab5dd06fc52f0a9e create mode 100644 fuzz/corpora/crl/96bcd7d2d93b2d6c3b8e4d8eaf87b2e3f983a74d create mode 100644 fuzz/corpora/crl/96c4c483876d247ee809d44db7c8207f95a97c15 create mode 100644 fuzz/corpora/crl/96ea3cfab311822e62fdc16293052dd4cffe9f6f create mode 100644 fuzz/corpora/crl/9712ff2ed541bd6ef2e4d09bf6b4f8945f0b78b8 create mode 100644 fuzz/corpora/crl/971646ed5b4ea823686d36cd23d7312c7d25034a create mode 100644 fuzz/corpora/crl/971a4167f1b7514bf4887c628f4cd4a3bbf308b9 create mode 100644 fuzz/corpora/crl/97470ecbdf6bf33444bca2c37a2a56b3882d95b7 create mode 100644 fuzz/corpora/crl/9753bff7b8284d88a97c5b2dc61fe716cae69b3e create mode 100644 fuzz/corpora/crl/97895ce3d5162e218d6585e9057bd0f368a25fec create mode 100644 fuzz/corpora/crl/97ab937487039397ff9a99fe7d1a0f077a3f673e create mode 100644 fuzz/corpora/crl/98518078b32f167be2fc452d4bcfbcf03bc49601 create mode 100644 fuzz/corpora/crl/98975cfb4d987b86021499a0cc836e5426bd6f90 create mode 100644 fuzz/corpora/crl/98a338c6e877ecd7184953b94c573a19996f2ca4 create mode 100644 fuzz/corpora/crl/98a4656dcf373600173440657e01edcffbb047cc create mode 100644 fuzz/corpora/crl/98b1e6ae40c3a3a009e7cf1f1e708c1ac17aa76e create mode 100644 fuzz/corpora/crl/98e74dcf39b2ad497d08c18b5153ea2a144bc7e5 create mode 100644 fuzz/corpora/crl/98e7571458d5eaa339a9b5c76b4e83ec05af213d create mode 100644 fuzz/corpora/crl/994c57b236cc91831b50bca8abd1126bcb3602d1 create mode 100644 fuzz/corpora/crl/99875e932b7e74936b188f0e4dd99f613d399102 create mode 100644 fuzz/corpora/crl/998870e9b2cb6d4ab895265f5ae6b298ba73ce18 create mode 100644 fuzz/corpora/crl/998deadb75a78c6ad3af8477e6926e8746836f39 create mode 100644 fuzz/corpora/crl/99978452bc7b92d61d75beb32747f6f0a8b668f7 create mode 100644 fuzz/corpora/crl/99b61c4cf0137badd2cbcd7588acdf0ae44e3c1d create mode 100644 fuzz/corpora/crl/99de0e975562975b13053c295aba19ed41f3706a create mode 100644 fuzz/corpora/crl/9a196c5d46be1fe9e027d866319dfdfdbb98a585 create mode 100644 fuzz/corpora/crl/9a1c6923eab442415b0d494d83d654f592a64155 create mode 100644 fuzz/corpora/crl/9a1cc4f4fde4044bb6cb1120b9c8c4e5506efb18 create mode 100644 fuzz/corpora/crl/9a59e6e3cd1eadca34a2cd119b66ee8434c179f8 create mode 100644 fuzz/corpora/crl/9a68000c1d6b67ce0f877d8e66909b21ad9c58fc create mode 100644 fuzz/corpora/crl/9aa2c690c89d5f625b09e14f2c43f9fd14afcfd5 create mode 100644 fuzz/corpora/crl/9aae251c20bbdd92c9516d9d133f1b99d76fb07f create mode 100644 fuzz/corpora/crl/9adfa673049991f896bdde7b17544830f9bb9346 create mode 100644 fuzz/corpora/crl/9ae09663966e1c0ddabe4d24837dcbff975bd09e create mode 100644 fuzz/corpora/crl/9b9068fa4b54265bd3d4a28c7e7aaf7764c445c7 create mode 100644 fuzz/corpora/crl/9b92af7f33cda521d5c0b463857ea64e2c956ca7 create mode 100644 fuzz/corpora/crl/9b96f906708a867a13b871fd50c60f7a22c5327d create mode 100644 fuzz/corpora/crl/9bc220d4c3cb10a87d3dacaf4400c73baeeddfd7 create mode 100644 fuzz/corpora/crl/9bd4579f0d2bfd957a5e538c6c6a8b22bda48585 create mode 100644 fuzz/corpora/crl/9bd6a3592429750ec6f70a55fe514a0329dce57b create mode 100644 fuzz/corpora/crl/9be45712ceed32537c35bf5b5d9466ad799f2548 create mode 100644 fuzz/corpora/crl/9c207eeb7f4e8c9a93236ca0063fec3c2defe522 create mode 100644 fuzz/corpora/crl/9c3bcbdf77685d92f26a59e232608a2c12e9e168 create mode 100644 fuzz/corpora/crl/9c5be7c9dbcf8717c42b112402074691a9e9a41a create mode 100644 fuzz/corpora/crl/9c72bd7de4ddd3b9de6a6f9de6a045666b215f4e create mode 100644 fuzz/corpora/crl/9c863eed1987477d98d5b7d2dd51c634f0b4b0c1 create mode 100644 fuzz/corpora/crl/9c971a8f00cd4213ef141c5cfb076aa72acc2105 create mode 100644 fuzz/corpora/crl/9c9cf1bc4c2f2819fb1e632af9526ba67f00134d create mode 100644 fuzz/corpora/crl/9cdac3dd620dcb5bc1b5c47d7767b5e31e543abe create mode 100644 fuzz/corpora/crl/9ceb6abc9c690354134a1750aa1478be230a7412 create mode 100644 fuzz/corpora/crl/9d2dafc42a11302531c35d285f2ec8e7c6dfe6aa create mode 100644 fuzz/corpora/crl/9d43ed314c308aa3e99ee174cece9e6978ed6978 create mode 100644 fuzz/corpora/crl/9d47be04ab7180de30d3e9a7f51b42f3cc999d9d create mode 100644 fuzz/corpora/crl/9d758b246c11e4952909f85b058b2e01896e42c0 create mode 100644 fuzz/corpora/crl/9daf67f728c61964315b11e2b289811e579c1b35 create mode 100644 fuzz/corpora/crl/9dd2f52f1ccb01a2457eb20cbc3cf494491f162c create mode 100644 fuzz/corpora/crl/9e0443fd19173b95c681e3eddb34fee58cfde099 create mode 100644 fuzz/corpora/crl/9e11ae746e6a7ea54d582783f80e02d7acabb091 create mode 100644 fuzz/corpora/crl/9e33acae58dc51485264f7bce51165f750186338 create mode 100644 fuzz/corpora/crl/9e399184045467d3328304ffccd3973fee51d836 create mode 100644 fuzz/corpora/crl/9e452eb011acf03987a08313d110470b96c0a8fc create mode 100644 fuzz/corpora/crl/9e8100e26a96b5d62e7a463afc0260c3863821d5 create mode 100644 fuzz/corpora/crl/9ecd143e2632610d0aaf060da78fb7a870457e20 create mode 100644 fuzz/corpora/crl/9ecd6eebe4bbe854bacec138e25ec7875e1577f2 create mode 100644 fuzz/corpora/crl/9ed6f7059d632b40cef17429762a30ad6f2ba99c create mode 100644 fuzz/corpora/crl/9eeb01c172ee203fd77ce335b502d9e1fa961585 create mode 100644 fuzz/corpora/crl/9efe64b38c2e70c4300ee6d800c230ac601e8857 create mode 100644 fuzz/corpora/crl/9f3b14f9613c48c46dca8d1acf6224c3a701bac7 create mode 100644 fuzz/corpora/crl/9f4d49b3c47dc0ccb317e61b95b3f737c7b7114c create mode 100644 fuzz/corpora/crl/9f7300eb45179c8879e7a1a329479b1dfdd57308 create mode 100644 fuzz/corpora/crl/9f7f92a7cf99434fe212fdf2669af16cdf354aaf create mode 100644 fuzz/corpora/crl/9f853e9a3c03c49601b7bfda8e142de3d6d751b6 create mode 100644 fuzz/corpora/crl/9fa44f61e950bf91d6630f86712757b516cf3981 create mode 100644 fuzz/corpora/crl/9faf63648ca1a3dad54564f7bb995af726c70550 create mode 100644 fuzz/corpora/crl/9fe54927e326bfb95b3d2e8bf13e3bfa21952ac7 create mode 100644 fuzz/corpora/crl/9feec73ad77f5ca53091c38ae34c46f47c2721ff create mode 100644 fuzz/corpora/crl/a01549d6e8016f076ad6dcc292ac5f79f3e0350d create mode 100644 fuzz/corpora/crl/a043e631f87675aa21afc7b3b6588d8ededa60b2 create mode 100644 fuzz/corpora/crl/a0485f78201208d984acdf1393a9d48d7e987552 create mode 100644 fuzz/corpora/crl/a07083f6afd13a6052f04563fa7e7570e3b70a2c create mode 100644 fuzz/corpora/crl/a071e66476542e017eb86cd37b1ed6c565013cfc create mode 100644 fuzz/corpora/crl/a0906591bf5de0c5da30089e1adba2188082d35f create mode 100644 fuzz/corpora/crl/a0be79f869d24c45df69dd4c97698c94c314edc5 create mode 100644 fuzz/corpora/crl/a0d2cb582c094790ecf3fd30bf93601b31879e7a create mode 100644 fuzz/corpora/crl/a12036ee57261eeb2dad00efe7dc69d16c6033ad create mode 100644 fuzz/corpora/crl/a1316eb583bc20da09b009a2a99762ac5fbfbcad create mode 100644 fuzz/corpora/crl/a15e5b9eec3cbe614e3301cd2540deb2ae69d2ac create mode 100644 fuzz/corpora/crl/a162c9a2d686301697b7f97415ab8b4736cffdf4 create mode 100644 fuzz/corpora/crl/a18dab4f54bdcbab8c53c5519f974fe74f16ae07 create mode 100644 fuzz/corpora/crl/a1acbf2670eee05d7853fbb90b1e31fbae952d79 create mode 100644 fuzz/corpora/crl/a1ae295b9ac3f8501f1aaa56d20abbc414ccdd27 create mode 100644 fuzz/corpora/crl/a1c87942e6a22ad8fa5f9678d16ae19c2d901bda create mode 100644 fuzz/corpora/crl/a1ceda45844e0fd09b196684919dbfd7679117a2 create mode 100644 fuzz/corpora/crl/a1e0b86ac564040058883bdbbd336d933a511801 create mode 100644 fuzz/corpora/crl/a236f04545bc61cc5e6b46bf256c6a0f9a9dddca create mode 100644 fuzz/corpora/crl/a2613a1ad28520cc719d2bd9e197c6b32f98ff0d create mode 100644 fuzz/corpora/crl/a287da171d6741e2fbeed3f27fd1f8ffe408d021 create mode 100644 fuzz/corpora/crl/a2b404cbd1186f45190a479339fc4100b1274c19 create mode 100644 fuzz/corpora/crl/a327d07f20f9c3d4b062ac128d3cebf79889a565 create mode 100644 fuzz/corpora/crl/a32ca6d42611400ce24cc44beeaf1858b8013583 create mode 100644 fuzz/corpora/crl/a367b5cf303b6e67966fb09e9457a45150c5fb6f create mode 100644 fuzz/corpora/crl/a36fe7ca21b15d8c89a099000db40900e696d35a create mode 100644 fuzz/corpora/crl/a387593f91bc9670b8a243e8238a59433a560323 create mode 100644 fuzz/corpora/crl/a3a191041e44240d7c0eeb24d688aa78d2718433 create mode 100644 fuzz/corpora/crl/a3b219e3283e118e230899e95b828be5baf9cfa3 create mode 100644 fuzz/corpora/crl/a44b9043432783029683473e95a40d1add48e042 create mode 100644 fuzz/corpora/crl/a483f2d3211a9240cf4925caf767d768f0ed49fb create mode 100644 fuzz/corpora/crl/a49ae0025763d1aabbddd982121995cddecf9e23 create mode 100644 fuzz/corpora/crl/a4a6f2bedb16b734f15f10f80ce070e9f2a332f6 create mode 100644 fuzz/corpora/crl/a4d61584e5dd21e28ae1fbcedc8a7a9c2660884c create mode 100644 fuzz/corpora/crl/a4f2ac9bdd5abb9daf7198ab95996cb6e11fe406 create mode 100644 fuzz/corpora/crl/a4f9f54f76800c30132ef39835c0ddcdcce1bfa8 create mode 100644 fuzz/corpora/crl/a5154413f9023dd90d394fdedcce05ece2635fed create mode 100644 fuzz/corpora/crl/a59b80f116ad55a5ef73049aa64d1f325fe3273e create mode 100644 fuzz/corpora/crl/a5bb5524b85d287718523694074e4e5d4cab2171 create mode 100644 fuzz/corpora/crl/a5e1a6b9621f7148a6023a6a06bc0146c0ebadf0 create mode 100644 fuzz/corpora/crl/a5edc48803cece402f0ba07b3c43c424edf3a9b5 create mode 100644 fuzz/corpora/crl/a640447ebc469c57ca4f05e11ed98aa57e997566 create mode 100644 fuzz/corpora/crl/a6476ccebd8ebae1cb6b3fde08c471038d4b5e95 create mode 100644 fuzz/corpora/crl/a6a3f9e41d1c021aad921bdb3a72f18f304c90ca create mode 100644 fuzz/corpora/crl/a6e39e882df913f278efe8d3feedcbbf4eb53093 create mode 100644 fuzz/corpora/crl/a6e73b66fc221db58e751e76655543b67ee8dd9e create mode 100644 fuzz/corpora/crl/a6fb7bbd03bd69127dbdf8ec9d4ab0297be9b640 create mode 100644 fuzz/corpora/crl/a71ca8038f7af50f9e1e30c98154a67b3f4a43bf create mode 100644 fuzz/corpora/crl/a7485c48c17e802b9ead752e7a3bbe7997b0f6d4 create mode 100644 fuzz/corpora/crl/a76dd0b1855881d8e8d6abfb4eb44251728ef099 create mode 100644 fuzz/corpora/crl/a7767835438014d7093753b482ac36296826f34c create mode 100644 fuzz/corpora/crl/a776bb4eb12460a12b0a08516619a3e18602b4db create mode 100644 fuzz/corpora/crl/a790dbb1ce129505e1460b2e9f45a32dbbebc53f create mode 100644 fuzz/corpora/crl/a7bf70e2244693ebb57be86296edc6b030b7191e create mode 100644 fuzz/corpora/crl/a8482bbb4311e09a948096cdbf117590f0fcfc43 create mode 100644 fuzz/corpora/crl/a860e60ad4771cf45e24a14d2ce774affe60e260 create mode 100644 fuzz/corpora/crl/a888e0ac8278cda04dc0da774f4615ff314ae4dd create mode 100644 fuzz/corpora/crl/a8a6de14b61b02bbaac94e255efc74fcbff3740d create mode 100644 fuzz/corpora/crl/a8de7ac6f0c19d17dd81a6d8ac20aae872051d7b create mode 100644 fuzz/corpora/crl/a934cc0c37dbcdd562e0da8673c03307f23c7af0 create mode 100644 fuzz/corpora/crl/a93b8509749981ef8c7b661e0d164d7e6216bc69 create mode 100644 fuzz/corpora/crl/a949190899109d866812d2c7a6e28c34b84f8392 create mode 100644 fuzz/corpora/crl/a958e1b48c373bca9e3b14066dd6c48310e02b71 create mode 100644 fuzz/corpora/crl/a95dcad5e5638526261ffbee1bf5a0571f9aaf0b create mode 100644 fuzz/corpora/crl/a9629d1e1f96aeecbac9d6829962495bd2efdb2c create mode 100644 fuzz/corpora/crl/a97202ca076394dc82588f78895738bfdddaaf05 create mode 100644 fuzz/corpora/crl/a9727720f961eb112fad168890ffb83561867599 create mode 100644 fuzz/corpora/crl/a9a36bd579ea7ba3d1c2babd04c960f299da6362 create mode 100644 fuzz/corpora/crl/a9a87298aacfe2e0a84fd0eb754055cf6d86fea1 create mode 100644 fuzz/corpora/crl/a9ccc0b391a495d5b6252098df33cea9390d980b create mode 100644 fuzz/corpora/crl/a9ce490dc6c8053be62a033d1ae1246000767564 create mode 100644 fuzz/corpora/crl/a9db64624d542e155d64fc037a9a6d803586e567 create mode 100644 fuzz/corpora/crl/a9dbbc2c46e017bdf050f9f2d71863f2f3d5b568 create mode 100644 fuzz/corpora/crl/a9e4b9c37e1ae6a3979a594a0bbcc0a2270ed1ef create mode 100644 fuzz/corpora/crl/a9eef2a398e931f9bd11886055eca1b7bfa7f641 create mode 100644 fuzz/corpora/crl/aa3128314acfae7275a80aac465d5a9aed89b360 create mode 100644 fuzz/corpora/crl/aa3b5cf30bae3044f10dfcf81e185c86457e1ba7 create mode 100644 fuzz/corpora/crl/aa835f26bafb30edfd404bd56d208229baa7a7c7 create mode 100644 fuzz/corpora/crl/aab31052a5268f8bbaa35b31e2d45a2a05f278ad create mode 100644 fuzz/corpora/crl/aabf26ab43b7d5a52b0704c13fffc35a6bea82a3 create mode 100644 fuzz/corpora/crl/aac4d51ad12f92d31ff64979d7337b615fb8f440 create mode 100644 fuzz/corpora/crl/aac838b5f906b02657ba665dcba7980c7ca6f6c5 create mode 100644 fuzz/corpora/crl/ab37c54ba76f1ec7f89fdf374d807e2e9adec1f3 create mode 100644 fuzz/corpora/crl/ab45766bcf41ef214807f0f2a770c498cb00a69b create mode 100644 fuzz/corpora/crl/ab5166f02b063bcb4a621f90b52c69b5f7b75d8d create mode 100644 fuzz/corpora/crl/ab5b85398990f00ed695ab9aa894da8c0e82065b create mode 100644 fuzz/corpora/crl/ab652bcbf897a3f127ab8de33224c0398b7a644f create mode 100644 fuzz/corpora/crl/ab73dfaf1659ce3f6aa9d20d0a8e78b83559891d create mode 100644 fuzz/corpora/crl/abe2ef0be51cc394695c17ec9c5c940bf0f3e01d create mode 100644 fuzz/corpora/crl/abe54bce25857270c2e583555869b81651f314e5 create mode 100644 fuzz/corpora/crl/abe54f1a387d7579fe0c02698b7ef0f5d947f046 create mode 100644 fuzz/corpora/crl/abe7a5092747b6df66eda1e6c00c2e1d68f06c2d create mode 100644 fuzz/corpora/crl/abebd343d3fc64bee98827a337f27764a704d549 create mode 100644 fuzz/corpora/crl/ac33d34973cbab0ad1e28a8fb4639a4d520e3e41 create mode 100644 fuzz/corpora/crl/ac5a0006559f6825e618dff0320b3d6a5a145251 create mode 100644 fuzz/corpora/crl/ac9ccb257b47ee62747fffb4c2d352b7e6b79671 create mode 100644 fuzz/corpora/crl/acbe0567c3fae175020e9912afc6b3f76fdfe541 create mode 100644 fuzz/corpora/crl/acbe8f4fdd15eb0a673c5dacd74ad0329a18802c create mode 100644 fuzz/corpora/crl/ace9765c785247e789039a2f86ec2a24db646de6 create mode 100644 fuzz/corpora/crl/acf1380a29bbd5908d03cbfebbed700c3ef3ecc8 create mode 100644 fuzz/corpora/crl/acf99477adba08e4d1e7dcb98d76b338d2d54408 create mode 100644 fuzz/corpora/crl/acff02256f177dc57366ded50f9a5691d17d4bac create mode 100644 fuzz/corpora/crl/ad44d10923af95502818a9c16c6eeabc21257763 create mode 100644 fuzz/corpora/crl/ad46d0699465db53d5704d5824f4c5284d6817dc create mode 100644 fuzz/corpora/crl/ad96cf9c8c167e57c2b262c8b3e41ccc4527a4cf create mode 100644 fuzz/corpora/crl/adfc349ce0009aa22027221b126ffcf7fac60748 create mode 100644 fuzz/corpora/crl/ae1b29c7a337b6b5a1e1f38c12fcee216398d63e create mode 100644 fuzz/corpora/crl/ae28e1ae448322b48fecbabc604444db47c98f4d create mode 100644 fuzz/corpora/crl/ae45bbe11ddd15ee655c6f1737bf3a12f7ad2072 create mode 100644 fuzz/corpora/crl/ae5ed54ad1287111f888fec6fa47150be30cc816 create mode 100644 fuzz/corpora/crl/ae85736e6546df7e90e2aca2c511599a1f51f641 create mode 100644 fuzz/corpora/crl/aea271c660878828c101738488cbe1e9435b32f6 create mode 100644 fuzz/corpora/crl/af7a9c6aa930e39186b960608e9a77df02c57993 create mode 100644 fuzz/corpora/crl/afc4842fb39d0756705d7cfd2d0b5f0b19d93bce create mode 100644 fuzz/corpora/crl/b071faea3f9ee1e3d33adee0f151c6477ae42936 create mode 100644 fuzz/corpora/crl/b07cdf0efb352222b74218b2f5062eb9decb1a44 create mode 100644 fuzz/corpora/crl/b0997222c4071032107933d8ae78955b7cc69d08 create mode 100644 fuzz/corpora/crl/b09e2730a08015e7aae241af2ac90218c9973341 create mode 100644 fuzz/corpora/crl/b0dd6954412a4a0a05d2e579aa78d5d03d59f53e create mode 100644 fuzz/corpora/crl/b0e07c3c6ffc39d628aa4fd17b49aaf81613a4ac create mode 100644 fuzz/corpora/crl/b1511d06c11c16ec1440b30cc890444b3c2bc703 create mode 100644 fuzz/corpora/crl/b19789c640f4ea7866e883a21588861a958202a5 create mode 100644 fuzz/corpora/crl/b1ffc81b843584ead831b4f4316441335251b5a3 create mode 100644 fuzz/corpora/crl/b2255a50584833b14b52c2e389652732af2423ea create mode 100644 fuzz/corpora/crl/b22df65dc76e292606994f37cc59e70f454bcc7b create mode 100644 fuzz/corpora/crl/b25f3f4843dfbd678da524bc2a620563524c52e6 create mode 100644 fuzz/corpora/crl/b26cdbc8f5a22e983d1a0d49191fd2303437227d create mode 100644 fuzz/corpora/crl/b285811ec5395c004c87e76b4c979fa5adf3d439 create mode 100644 fuzz/corpora/crl/b298c49447bd503c26c95f37a6b610f2fd3dfa79 create mode 100644 fuzz/corpora/crl/b2e5a385f912f173011b580bdae4c80be3025310 create mode 100644 fuzz/corpora/crl/b327a0ddf07e14db913d1ceda31ce62d6606aad7 create mode 100644 fuzz/corpora/crl/b3400883c0788678344eaa1ed8999d95f2f18a8e create mode 100644 fuzz/corpora/crl/b376f6e945394669fc9ea4af3cf6675e3e6106fc create mode 100644 fuzz/corpora/crl/b3cfe1056989e3f682df5379ad358c17c083cbc0 create mode 100644 fuzz/corpora/crl/b3e53b7ace590775786f02cac0d95b18fd17f9d1 create mode 100644 fuzz/corpora/crl/b3f3a8a19b295bffba94a1973f7a9190c6ac3773 create mode 100644 fuzz/corpora/crl/b3f588d3fc14af03a77a97890e67f8e55907aa40 create mode 100644 fuzz/corpora/crl/b409a56c8fdab46df23370c183486a7774f8118a create mode 100644 fuzz/corpora/crl/b449dd0709bf0f301df61c2ff6e6b9f5769574c2 create mode 100644 fuzz/corpora/crl/b44abe640c205484be676e742a78ce26a3b7a03a create mode 100644 fuzz/corpora/crl/b475699fe77141254b66eadccb8902742b1fe0b2 create mode 100644 fuzz/corpora/crl/b48da19140aaf30de20603b6a8ca09d1aedb8ec9 create mode 100644 fuzz/corpora/crl/b4b08cbe75be4acd7e46245f7b91f83f9687bc8a create mode 100644 fuzz/corpora/crl/b4ef47ce432bc400ea3495434251301004db3832 create mode 100644 fuzz/corpora/crl/b53c4478455fb482e5fe303a712c30c160e208ae create mode 100644 fuzz/corpora/crl/b577cf887749e1212069536f650f82c3061df2b4 create mode 100644 fuzz/corpora/crl/b5a0c007f581e93c156519746401a5c4239b51d5 create mode 100644 fuzz/corpora/crl/b5da0746a1c293ee06bfe7a72243921c23c23127 create mode 100644 fuzz/corpora/crl/b5f993be28cdf693f716333045c0b1508af93ab8 create mode 100644 fuzz/corpora/crl/b5fb1f8c499b6659b92effd8d475173676ab738a create mode 100644 fuzz/corpora/crl/b60744035e92e66ca299510b166108290095f4df create mode 100644 fuzz/corpora/crl/b6297afe94b7c31d51607340300c6e27c181acea create mode 100644 fuzz/corpora/crl/b63f95c330903e8754f6104d524d08c8dd81cba2 create mode 100644 fuzz/corpora/crl/b66399a0067e2193731571ea864dcea6b3a6a1f7 create mode 100644 fuzz/corpora/crl/b69f006d4fbac5e44a85ca0614e70777906ba388 create mode 100644 fuzz/corpora/crl/b6cd40722b12768db31904785d357b620ff0c1b9 create mode 100644 fuzz/corpora/crl/b6ff4a532ed7c19e18010dd031a3f77f15ac85ff create mode 100644 fuzz/corpora/crl/b723b41d345339e2076ee49785c60f0dd40015fa create mode 100644 fuzz/corpora/crl/b756a5d798f33063f74686d87e976eb35ac6c22b create mode 100644 fuzz/corpora/crl/b771d0829ec60904243323174096b6750edb1413 create mode 100644 fuzz/corpora/crl/b79a13788c1fe97fa3d23fc76707caeb88e92f7f create mode 100644 fuzz/corpora/crl/b7abc8a12269edc3e2d7fc34387e4891f30c1363 create mode 100644 fuzz/corpora/crl/b7c6aa449626e3134a0681b0978468f513b2a797 create mode 100644 fuzz/corpora/crl/b80b08d3c6aeaacd8b728de401fe5de1a83c157d create mode 100644 fuzz/corpora/crl/b833b3682f3293a367ac06e850c6fe4df3540015 create mode 100644 fuzz/corpora/crl/b834df9b4a8c61f95e97eed319c2b29fc9a54e94 create mode 100644 fuzz/corpora/crl/b88e53c25988863c7cc291efdd94d36a467ba36b create mode 100644 fuzz/corpora/crl/b8b2391c7dc7e42bc45d85f104393efcc7fe15a2 create mode 100644 fuzz/corpora/crl/b8f2bbc177acb92dca459e813b195c167825a46c create mode 100644 fuzz/corpora/crl/b8ff19c08e3f19b5e587e805d30426c52ab74630 create mode 100644 fuzz/corpora/crl/b9125e17c81c303796cf08b1a7d06e38b1c99937 create mode 100644 fuzz/corpora/crl/b915ecfba3b8b90ebe77b020575f8ccdaa458d57 create mode 100644 fuzz/corpora/crl/b9533e7c54532417edfde8f70b01885e088b3084 create mode 100644 fuzz/corpora/crl/b96e7428902912722f3e02f9a7d3c455282407b6 create mode 100644 fuzz/corpora/crl/b972bc246661492ecd9712eec6ba55c6a2105ea1 create mode 100644 fuzz/corpora/crl/b97d7a01b98d5c9066f40af52106aeb44f623140 create mode 100644 fuzz/corpora/crl/b986ae4a2d6f9c6819fd4c16a5ccb1567bf84f58 create mode 100644 fuzz/corpora/crl/b999368c5a7f8f59c06af09afa043716b6425ccd create mode 100644 fuzz/corpora/crl/b99be101e83847874570982f6a308e16dbfaa120 create mode 100644 fuzz/corpora/crl/b9b52ee2bb98bcc841e590b7f66bf335761a0565 create mode 100644 fuzz/corpora/crl/ba1cecb3ce813ab4ef3e9af5279a9eeccc585d6a create mode 100644 fuzz/corpora/crl/ba224778b11c871500f5e717660d69bdbe4354cb create mode 100644 fuzz/corpora/crl/ba31bf0b8f908337a920a1ce3ddf4befb56b6220 create mode 100644 fuzz/corpora/crl/ba3280bf6c3d4b58b2b1f31f20a7e3aa77951642 create mode 100644 fuzz/corpora/crl/ba3641c70b8441da240d677a3bbb5580a4f29d47 create mode 100644 fuzz/corpora/crl/ba5be17908625c303576e31e4f5646b54b9142ee create mode 100644 fuzz/corpora/crl/ba5cfda6114e03a7c7966ffb5a536240a02cefc0 create mode 100644 fuzz/corpora/crl/ba734dff42bdec38561e89daee603abde827c6fa create mode 100644 fuzz/corpora/crl/ba9cd3ac3685ecf84474b7c2535f0c070575e8bc create mode 100644 fuzz/corpora/crl/baf09c30c63d9ef1479ab6e8d10f034ba6697054 create mode 100644 fuzz/corpora/crl/bb0fffac0cfa8c6d69caaa114b9ea151c895235e create mode 100644 fuzz/corpora/crl/bb16158ae2943d127159f2f2bf731f2c7c114c19 create mode 100644 fuzz/corpora/crl/bb2064f74d27827fe01199e26627b10c6f8db744 create mode 100644 fuzz/corpora/crl/bb4e75fbae51eefe0747ecd19d4e073d1ee0458e create mode 100644 fuzz/corpora/crl/bb655b756aff03973574256bafd9deeab013adc3 create mode 100644 fuzz/corpora/crl/bb7f45d75becf6d7911c2d9c920f4372188b281a create mode 100644 fuzz/corpora/crl/bb9bf292bba9c87e7ea094997ab3a9e1d473f773 create mode 100644 fuzz/corpora/crl/bbbf5ac8d6b284e593990477ff00f470b07432af create mode 100644 fuzz/corpora/crl/bc00db75f5f0f4208a8c0b518588e725ef7a1293 create mode 100644 fuzz/corpora/crl/bc05d51490425004eb77dc41690933d035d43898 create mode 100644 fuzz/corpora/crl/bc160ed69c0fbe7d67df785af52d775baf2346d1 create mode 100644 fuzz/corpora/crl/bc2ff800aa2c961d982a89a616eb67867c443c50 create mode 100644 fuzz/corpora/crl/bc3342713af11e60eefb82c49835b1a4d3638ef6 create mode 100644 fuzz/corpora/crl/bc401ad3cfa42077c36eadfbd91b2bd6d1d630ec create mode 100644 fuzz/corpora/crl/bc73d1c7562b3fca91035791bd82e0997e6a7454 create mode 100644 fuzz/corpora/crl/bc84ed383c52d81fc4d528138fb697309741284d create mode 100644 fuzz/corpora/crl/bc95545d55ee2dc5461a5ab86aed67f26768809a create mode 100644 fuzz/corpora/crl/bcc85c44aeb07648c3dd05a78290db46288997c1 create mode 100644 fuzz/corpora/crl/bccd5a060d61c48a9cafcfb48de704813d9a55f5 create mode 100644 fuzz/corpora/crl/bcf43de638e81fb08eaeb2cc3c6f10a153cca212 create mode 100644 fuzz/corpora/crl/bd36b5a26f3bc5f42efe45f2b28a0d75bfacf492 create mode 100644 fuzz/corpora/crl/bd373f3115d9e84ef0ce864756140ad64560e0a7 create mode 100644 fuzz/corpora/crl/bd3aa36659b766a9feb50fa4b9c4d025c268bb79 create mode 100644 fuzz/corpora/crl/bd42e66a85475ba2f5c8022090442de536c743c3 create mode 100644 fuzz/corpora/crl/bd4b757c59ace6f4cddb2116e52c0de993962ac2 create mode 100644 fuzz/corpora/crl/bd626a062d8c16c7c734a39668bbaaee65cbdc3d create mode 100644 fuzz/corpora/crl/bd9d6382e8ec94579a840e7ec4102714f28ea700 create mode 100644 fuzz/corpora/crl/bda4e07907d71b5a55fee697be0423563adcd516 create mode 100644 fuzz/corpora/crl/bdbe5bf6b6fe386d61b3fa5cbb8ba7ad0eb39fac create mode 100644 fuzz/corpora/crl/bdc73612a38ca5aa2ac451357a70d6c7b8367a74 create mode 100644 fuzz/corpora/crl/bdddf954a322afa058e937500954acf5ba792c10 create mode 100644 fuzz/corpora/crl/bde417d9a34e244422ec94db1e626867748e37e2 create mode 100644 fuzz/corpora/crl/bde74a690d0b7243f1aeb29cf473093bff6ac36f create mode 100644 fuzz/corpora/crl/bdf9e02a58f9124012f19284a0598219acaaaad5 create mode 100644 fuzz/corpora/crl/bdfa08c36f6122b373f36f57ffd29304a3b867b0 create mode 100644 fuzz/corpora/crl/bdfda7e3250cc2d1dc546ac9793fab9dfa333bd2 create mode 100644 fuzz/corpora/crl/be4fced11142b4b464a805a56296f803bfeb2624 create mode 100644 fuzz/corpora/crl/be64f4c7bcd82dfc58bc849faf56beca962fef2e create mode 100644 fuzz/corpora/crl/be72e9dc6f3e7c8ea71a1ab571a82201420f56c7 create mode 100644 fuzz/corpora/crl/bead3e229d39fd6aefddb697b1e215a5327e2674 create mode 100644 fuzz/corpora/crl/beca614380ef9cb5e18e1d1afdd6c8611408d70e create mode 100644 fuzz/corpora/crl/bed99fe184946a84346e907fec9d7721d121b7f0 create mode 100644 fuzz/corpora/crl/bee89705ade8fe4e38899c14a5d7e2baac8686a5 create mode 100644 fuzz/corpora/crl/beeec1bb1872a3aaa5cd5e9dc7c0f37457fead72 create mode 100644 fuzz/corpora/crl/bef2e2c30fa34cb0a34f172baac3558a6a87363f create mode 100644 fuzz/corpora/crl/bf0562ba51cfa8d0c622528c4df394fb22e537dc create mode 100644 fuzz/corpora/crl/bf1d6aa7ad6305aae92ebce0fa1fdb927b61dac8 create mode 100644 fuzz/corpora/crl/bf3c2c5cb1c250b8eafa2c783edfb8d7361d9d08 create mode 100644 fuzz/corpora/crl/bf40d50fd53a9a5c9c30b3099ce342c96332802a create mode 100644 fuzz/corpora/crl/bf5040e0b5ea527a9c44b946d691a87985ee7cf1 create mode 100644 fuzz/corpora/crl/bf53cde377dd8de17d611dcca78b543cb7b10725 create mode 100644 fuzz/corpora/crl/bf69973ce84685c15a7be81543757ecb3aee1ccf create mode 100644 fuzz/corpora/crl/bf7ccb01c016777773a3a414ad2c4cec83e83255 create mode 100644 fuzz/corpora/crl/bfaf53a2f735f3810220a949946b4a7f2069d3b6 create mode 100644 fuzz/corpora/crl/c045cd875b77488eda0e53159d2f8abfbbf009ef create mode 100644 fuzz/corpora/crl/c05402f0b0597f1a3bd79b035312557a7f081666 create mode 100644 fuzz/corpora/crl/c087cec85355a7eb4194fc09bca6da896050670b create mode 100644 fuzz/corpora/crl/c099b68b8492915be92aba5784f967383044a497 create mode 100644 fuzz/corpora/crl/c0a1e8e17b9e5d10c03280990a84f35922c9e4ee create mode 100644 fuzz/corpora/crl/c0a80ea418e448d568eeb2929c9c103ab99f5482 create mode 100644 fuzz/corpora/crl/c0bdaf989b0781587535254cebe86019ee8442c5 create mode 100644 fuzz/corpora/crl/c0d374e0fa2d9c6c487bb948f296c3b71d18860f create mode 100644 fuzz/corpora/crl/c0d7b1e191d3725b489646a6b6b7876a8f192eaa create mode 100644 fuzz/corpora/crl/c0e5d735b97cfc249a8dc9ea43417abdedc4d4e8 create mode 100644 fuzz/corpora/crl/c11c6df1f0f2edbb84247466b1da4df3d7875327 create mode 100644 fuzz/corpora/crl/c1654084b501bd7310cb8b07dc84d33d7163d21a create mode 100644 fuzz/corpora/crl/c16633be8247861bdb14c8d8c364aa8b269b1243 create mode 100644 fuzz/corpora/crl/c1743a928e89cc41f1e94c37722ec038e25b6173 create mode 100644 fuzz/corpora/crl/c1753f6dfb39f6181df8bf5bf820b4080fc330f2 create mode 100644 fuzz/corpora/crl/c17a1fe01c53379df9f811704b2dd96920ff1d8c create mode 100644 fuzz/corpora/crl/c18b668398d42bd4e5e972b790d1d826527de606 create mode 100644 fuzz/corpora/crl/c1c95dbc6a32702bad5f7a9b732a7a29491d44b2 create mode 100644 fuzz/corpora/crl/c1d01692530541bf0b5c10bb4212434daaa0ef94 create mode 100644 fuzz/corpora/crl/c1f41a92346e9544d7bac335f52245683d1a118a create mode 100644 fuzz/corpora/crl/c2148476e353a74bc6f81f2d36dfd364b1a400c4 create mode 100644 fuzz/corpora/crl/c237eb5a12b1c3b21cb127bdf01a8e52bc9f7520 create mode 100644 fuzz/corpora/crl/c2518616993d4b4720e4c15b4b3652205fd6f559 create mode 100644 fuzz/corpora/crl/c285a9220df57e37cb1472097adb52ffb5f35c8d create mode 100644 fuzz/corpora/crl/c2924f83268cd28a6b6000463edb954f52985e89 create mode 100644 fuzz/corpora/crl/c2a19eae3d354e480d602c9e157a05a5ee42e2a2 create mode 100644 fuzz/corpora/crl/c2c9398e5843515947bab8d1dcfd4ca7dd796c1b create mode 100644 fuzz/corpora/crl/c2d7ace0aab11aabb0dc904b2f7e5c1c682e7591 create mode 100644 fuzz/corpora/crl/c2dbaa3f740cdeda0b6ac2fd9630e80074962634 create mode 100644 fuzz/corpora/crl/c2eaf128635c8bdaeb3876a5909eddb863330248 create mode 100644 fuzz/corpora/crl/c2ecf883d35a8af68f5f288c906a7b6df054e3a9 create mode 100644 fuzz/corpora/crl/c301ffcb09087fc43a0660a598f491211f366246 create mode 100644 fuzz/corpora/crl/c33152b170d95307f6f36e26075c457b03b1a544 create mode 100644 fuzz/corpora/crl/c33d980050ee5dee2243687094d07b2ede93f9b2 create mode 100644 fuzz/corpora/crl/c36faa052aefd7952838cf74f2dc7552d87fca77 create mode 100644 fuzz/corpora/crl/c36fdab8a5ca0d96920048d38a858f6a22cf62f8 create mode 100644 fuzz/corpora/crl/c39feaa893a71a8af507238ebcd8c9705645fe2c create mode 100644 fuzz/corpora/crl/c3c8ab1c55c85f2d42033195e373f47e62e49a61 create mode 100644 fuzz/corpora/crl/c3e4dc561cad54f8dc7e95cc2523bb505af23f1e create mode 100644 fuzz/corpora/crl/c4398f7813568a5a9a77b242a7e0493a1880623a create mode 100644 fuzz/corpora/crl/c47037654ff876f9d0229e21cb93a4e0b2c6af88 create mode 100644 fuzz/corpora/crl/c4789e555e23ab8abaaa08aa3dbcd1db7a44b693 create mode 100644 fuzz/corpora/crl/c48aedce1b290396d1b133d0c9f733df76d94d73 create mode 100644 fuzz/corpora/crl/c48c51a51237475c0878c4478626dc4c437b0ea1 create mode 100644 fuzz/corpora/crl/c4955b8434803d79cf2ffa8e704f62fa23de72f0 create mode 100644 fuzz/corpora/crl/c4bb2b9663c6e22e692d586dbf86516d8252afe2 create mode 100644 fuzz/corpora/crl/c4ca6bb0b187305aa5b69926b258b25a14d733b1 create mode 100644 fuzz/corpora/crl/c4e537b49c4ef7f04485b33d2f5ed814ad184dc9 create mode 100644 fuzz/corpora/crl/c51be8fd3a322d38ad826df5b6d1b93793c92990 create mode 100644 fuzz/corpora/crl/c56017c67c827eb4eff980d808b2833b328a394c create mode 100644 fuzz/corpora/crl/c585b3fe01d42d94b559ec01197ea2f3c1e5b653 create mode 100644 fuzz/corpora/crl/c58937c79c93bfd6d4b0f5980d4e3347171580f9 create mode 100644 fuzz/corpora/crl/c5897109c62c44eaec378b521c2859da07ac6517 create mode 100644 fuzz/corpora/crl/c5b94533e8e50f4d48c34ddd2350695b3984cb05 create mode 100644 fuzz/corpora/crl/c5cbb2162b5cb5cd4be4588a2c8c6b61742b8118 create mode 100644 fuzz/corpora/crl/c5fa587edb38cb65f4d69b9ddb1cfe187f1e8453 create mode 100644 fuzz/corpora/crl/c605086a95e3c19c7993344c52943d591bd3a3aa create mode 100644 fuzz/corpora/crl/c60a90ac933ddc30cc02ac6f911d0eb8fb0d0e9d create mode 100644 fuzz/corpora/crl/c6144b564674bc03c7a31a3bf50c5a4b5b2eaee4 create mode 100644 fuzz/corpora/crl/c61aea57d85fc37f30c7c6b1ff28bbac0576d07d create mode 100644 fuzz/corpora/crl/c644c052825695db8f9aba697db03fc2a3935571 create mode 100644 fuzz/corpora/crl/c65c3e1b53486acea045eb310a79ce4278300ce6 create mode 100644 fuzz/corpora/crl/c6807ad0abce915fae00020b6a8d2c5e5ac37a41 create mode 100644 fuzz/corpora/crl/c6c0f8643898bdc1c6154581be02629aa624296c create mode 100644 fuzz/corpora/crl/c704fbc3299b1107a3678dea31dbd5418532196f create mode 100644 fuzz/corpora/crl/c70d4feae5ac8e0f8c3dec68f80c43d09a9fe8ba create mode 100644 fuzz/corpora/crl/c7282164bb71207cadea4298b6854d6c39f314c1 create mode 100644 fuzz/corpora/crl/c73d57c233111d4e4e153ff0a6145d7b0f1e7b52 create mode 100644 fuzz/corpora/crl/c73fb1a4c0ee864d2272014ac8345e8672e0a590 create mode 100644 fuzz/corpora/crl/c75108dd49184dc745895d62d23269f6bf30aecd create mode 100644 fuzz/corpora/crl/c7a25a52dc5b295cb596eb4db4f52c6344e7ca6b create mode 100644 fuzz/corpora/crl/c7d5c1b9af9c7fb03d0063c3acf1fcd8d9e6cebe create mode 100644 fuzz/corpora/crl/c7d5eff0e811134274ab308ca474eea2e01cef77 create mode 100644 fuzz/corpora/crl/c7f8a7fc8f4999d259e76d4d44efa6ef170d04e4 create mode 100644 fuzz/corpora/crl/c7fa2e410ee8e5604558a644e2276a580e436e91 create mode 100644 fuzz/corpora/crl/c8075d06ff77a1d9b8db829832377c4cbead3d3c create mode 100644 fuzz/corpora/crl/c80bc4b10b7ab0ecd4e990956394181f02c7165e create mode 100644 fuzz/corpora/crl/c8285970fa9c2858b7904416deede2c0fc762c73 create mode 100644 fuzz/corpora/crl/c829e103a5b4d9ea65d2960586e1ff4db62a87e1 create mode 100644 fuzz/corpora/crl/c87105dbd39019c1f782ccdbc3deb68ed66db93a create mode 100644 fuzz/corpora/crl/c8a5e0e9cac772c74c3bbd44cd7ff0892c1e5ddd create mode 100644 fuzz/corpora/crl/c8a7a5f5b5259adb7b5d5c749a9551a69ee316a8 create mode 100644 fuzz/corpora/crl/c8ef514010f7d4dfab7887e8fd65f59beb55d668 create mode 100644 fuzz/corpora/crl/c90a73d8e5f7f7406e154e8bbace1a7d3262bc63 create mode 100644 fuzz/corpora/crl/c971a959a3170e8a5926494331e57548e164a77a create mode 100644 fuzz/corpora/crl/c9a7dcf6a63102bd517ee4380e187ce298b41baa create mode 100644 fuzz/corpora/crl/c9ba3813e1207598588b70268e379005da0552d4 create mode 100644 fuzz/corpora/crl/c9ce7c9ea0c60f099885606ac179466a2966247e create mode 100644 fuzz/corpora/crl/c9e7a6b16dfc79b89da41deb97b8b3b8a1707204 create mode 100644 fuzz/corpora/crl/c9eef3f90d004c53415eac296e190412865247c8 create mode 100644 fuzz/corpora/crl/ca26c8f12b80ba1fb63d849383d78f4bcb3b8adb create mode 100644 fuzz/corpora/crl/ca7f5940ff9e5edee2820ddcece6b96a38886dc2 create mode 100644 fuzz/corpora/crl/cab215dca69b6b149ef66b28063fea8eb9848388 create mode 100644 fuzz/corpora/crl/cac4370a845ba6b20433028ecb084713f1a6eb1e create mode 100644 fuzz/corpora/crl/cae7fc85f4af5d67ca556fb1cc9dbf24af4b8181 create mode 100644 fuzz/corpora/crl/cb1c9f0b30a570671958f7c3e803fd67c6b3663e create mode 100644 fuzz/corpora/crl/cb311e6ee39d8f3616d45994c645f0384d5a5625 create mode 100644 fuzz/corpora/crl/cb3c07a3ad09bd87dfd68f658e062d36a11a49c3 create mode 100644 fuzz/corpora/crl/cbc69dab6cae35bf29e24232f46ffe76dfd6f7aa create mode 100644 fuzz/corpora/crl/cbdc77615f88ca0cacad18b5a32d79c3482ffef3 create mode 100644 fuzz/corpora/crl/cbe31afddefba21d9ab884068c14fb0bcd25ac52 create mode 100644 fuzz/corpora/crl/cbe7846585136bc28a9166dbb1d234b37fc1f0e3 create mode 100644 fuzz/corpora/crl/cc0be56443a877689f4ecd37817956d6aed97df9 create mode 100644 fuzz/corpora/crl/cc2d27c3b7dd465284532a8dec9f01989b7bef62 create mode 100644 fuzz/corpora/crl/cc368077f18c2878e50e655be00e057a38d1bb60 create mode 100644 fuzz/corpora/crl/cc576a8a10c8f8dee59264b45d134e2a87a43073 create mode 100644 fuzz/corpora/crl/cc6c2a85dbfd53b3960dcbefe9d0a321e7901e70 create mode 100644 fuzz/corpora/crl/cc93137ee5804b97d30ba74289fe46723dda2f9d create mode 100644 fuzz/corpora/crl/ccf546bd5e691f325f876389af30b20b7f9ae8d0 create mode 100644 fuzz/corpora/crl/cd05da85c627ec9662a58f856ed563969425c094 create mode 100644 fuzz/corpora/crl/cd2e68407b1c00e747a168559fd8200baf6fdbfe create mode 100644 fuzz/corpora/crl/cdb49b7273a3afa7ac2d4d686daa2881ab86464c create mode 100644 fuzz/corpora/crl/cdb79d661d3d6efd4446b73169a64b1b1ed66547 create mode 100644 fuzz/corpora/crl/cdbb773ced098057f9a0bdbcf9f0fe162bb6e6bc create mode 100644 fuzz/corpora/crl/cdc369c8542ff210b72b45f7c48b72650c2f32b7 create mode 100644 fuzz/corpora/crl/cdcf868519192d73d4a15c60cc072cc05b9d49d7 create mode 100644 fuzz/corpora/crl/cdd94e01e72872ced774f232f47a7983d000d645 create mode 100644 fuzz/corpora/crl/cde6024e93313322b8488b1b93b683a112de5326 create mode 100644 fuzz/corpora/crl/ce2286e8dd935cecdcbb30cf126d78d153df071b create mode 100644 fuzz/corpora/crl/ce56105277e39cb2d86ba4e9b10054f5a199f2a8 create mode 100644 fuzz/corpora/crl/ce7971bc497398bc1cd91ecd5ac920878ca60ccb create mode 100644 fuzz/corpora/crl/ce7c780201dbf7be5241a70d2f996f4200726735 create mode 100644 fuzz/corpora/crl/ce96e4edd65b923819d7617ea797ac3618c182a5 create mode 100644 fuzz/corpora/crl/ce977f6decc834634958db92cef12a2ea9de86bc create mode 100644 fuzz/corpora/crl/cea847db38869b47510f3e45b8e73ee58504914e create mode 100644 fuzz/corpora/crl/cead1cdb695aef45387ddce9dc5d41a1b0578669 create mode 100644 fuzz/corpora/crl/cebcdbfb1f51cdcf581b3b001291b01ab126b565 create mode 100644 fuzz/corpora/crl/cec02cbd472a6d55c3b2b9c27ab9e64e98c83977 create mode 100644 fuzz/corpora/crl/cf3e11c79e51ee79064712d9b08acb43553427d8 create mode 100644 fuzz/corpora/crl/cf78478b85771bc7136f45e77e6122c307093a45 create mode 100644 fuzz/corpora/crl/cf7db27712dd0aeccb09e634aca79f316e016593 create mode 100644 fuzz/corpora/crl/cf8e1cf278d7b36781a1065d1d92567621029bd8 create mode 100644 fuzz/corpora/crl/cfb205ca072d2af0df1150c66bc38ecbe90c9243 create mode 100644 fuzz/corpora/crl/cfbf9a237d6500bb6059a7e56524a05c77ace966 create mode 100644 fuzz/corpora/crl/d0130cd4bc29754711e07368db657bb9cd8dea54 create mode 100644 fuzz/corpora/crl/d0231e0c95b8b9fbc61284bd8a28f4ad2ef53240 create mode 100644 fuzz/corpora/crl/d033dc227a036cfd5d2076ef828fe6a90ff67d7f create mode 100644 fuzz/corpora/crl/d052cb373d289d78990f4916c246656b2fc89e63 create mode 100644 fuzz/corpora/crl/d0651b933edab83d9b7894adc894b460d917f77c create mode 100644 fuzz/corpora/crl/d07945a577c86983a50876f4cca3be5becbac1a9 create mode 100644 fuzz/corpora/crl/d0c2341a4a513326aee3a568ea84cf561df91813 create mode 100644 fuzz/corpora/crl/d0ca65a4e40e0d1ab20cf11b2ee2c16859782044 create mode 100644 fuzz/corpora/crl/d0ed15d2c2099bfe724e6bb0154ca4b89125cbbe create mode 100644 fuzz/corpora/crl/d10f65f45b2e7aa05c325a8fb847f29ba67b97a0 create mode 100644 fuzz/corpora/crl/d12472170e163408840369ea7145bcaee2c2cd86 create mode 100644 fuzz/corpora/crl/d13caa844b4588db04ddba18bedf3de290ac1ca5 create mode 100644 fuzz/corpora/crl/d14404a23d06145ba42556241745f9d51452b172 create mode 100644 fuzz/corpora/crl/d16093db0cdf12db95c554c8bd5b048e55ae8485 create mode 100644 fuzz/corpora/crl/d164342f102e09cb91860eb28ae8263bc881e204 create mode 100644 fuzz/corpora/crl/d16571b85c44e1404642222b1d1eae2294450c57 create mode 100644 fuzz/corpora/crl/d19500784b6a9d4798cde15d3a868e1c8cffd783 create mode 100644 fuzz/corpora/crl/d19be450dca3539a645f72a7ccd1cd41b5341c76 create mode 100644 fuzz/corpora/crl/d1a1f5de116d7ef23ddbbeb0777341e119320856 create mode 100644 fuzz/corpora/crl/d1a8cb70dedde79586e9ef36bb873cfa73462564 create mode 100644 fuzz/corpora/crl/d1c77268a874dca5756f30999030b3c6910bbd74 create mode 100644 fuzz/corpora/crl/d1e97b3cdce6451109005160af0f48f9e25ad395 create mode 100644 fuzz/corpora/crl/d20ba3def715a65d1a22da856cd4e10fed55df9b create mode 100644 fuzz/corpora/crl/d2159c3ebac1f4c370371c03f1689fdfa62122b3 create mode 100644 fuzz/corpora/crl/d233926bd30bc131731cdfb4dba48669a378415e create mode 100644 fuzz/corpora/crl/d24adf5ce2dc77210870af9331a349e562143665 create mode 100644 fuzz/corpora/crl/d29fda1144b0adce46b618fbe00f7fd1ab19f349 create mode 100644 fuzz/corpora/crl/d2a5f72c7dddb3e9fac07f2293c6c848a847c4f5 create mode 100644 fuzz/corpora/crl/d2e6cb012ee464bef7e9de353e6ad6b736f0a68e create mode 100644 fuzz/corpora/crl/d306a7975cbbdc4ef9f0de149de3db6527bf1547 create mode 100644 fuzz/corpora/crl/d314a1828eaee9db493863980931f2f2bb098f6f create mode 100644 fuzz/corpora/crl/d31b8907044b8c6d35a466a2f7c6dab6d0631a16 create mode 100644 fuzz/corpora/crl/d370573379c184b223885adcac21c2469f51df2d create mode 100644 fuzz/corpora/crl/d379045b7e9236f4953a53c6201c30640c190259 create mode 100644 fuzz/corpora/crl/d3a379d6e7f4b3d8eeaaa0fb97a4f2250c7082b3 create mode 100644 fuzz/corpora/crl/d3a78b62d0f7701b2a7c781bcff34449242073f4 create mode 100644 fuzz/corpora/crl/d3b7af4ec749a9b3ae38de9c6b6e3cd5ecbca7fc create mode 100644 fuzz/corpora/crl/d3e9b27e1faa48ee11e9c67b43c2cc44e70377f9 create mode 100644 fuzz/corpora/crl/d3f0ca62351ca0532ffeac4061390233054210f7 create mode 100644 fuzz/corpora/crl/d439e5add24b7ca4ca600a70a55298b6007e5272 create mode 100644 fuzz/corpora/crl/d43fae886cbc3db23590a942bff29cbe585a7a3a create mode 100644 fuzz/corpora/crl/d44ef8f8a2616d7ada060a909846c50659118daf create mode 100644 fuzz/corpora/crl/d4d7607f4486c9efb3873ea4c923c8a580974aeb create mode 100644 fuzz/corpora/crl/d4dec280ea6a9eb7dd2cfae5dc0a356a2b88a4de create mode 100644 fuzz/corpora/crl/d4f5d6fa6dfbb7a5ac903ff941bf89fb6d392bfd create mode 100644 fuzz/corpora/crl/d50faad8dcef722e85615ef7062bcd0c2450e3c3 create mode 100644 fuzz/corpora/crl/d5301b956269de9916fe4d1c645e351e12aba073 create mode 100644 fuzz/corpora/crl/d5436184281795da4cb49f014009c12f26b7c5f0 create mode 100644 fuzz/corpora/crl/d5486574fe4683592f841b157c7afe8ef0efae10 create mode 100644 fuzz/corpora/crl/d5546bc7fba85de0c5c3992d397f7b71ea974f4a create mode 100644 fuzz/corpora/crl/d55dcb4d2ade11cbe8a980c6798a3e820c91733a create mode 100644 fuzz/corpora/crl/d56130fab1b561602ec18dc6b810d6698bdd1ef7 create mode 100644 fuzz/corpora/crl/d59e9dc446ae01e2990c4dd75ab365f30101767e create mode 100644 fuzz/corpora/crl/d5cca32a3a254a97b217b2711ca0cd1f1f4aec53 create mode 100644 fuzz/corpora/crl/d5ff257c2dcdc20316ede596e11039a7ffeaf184 create mode 100644 fuzz/corpora/crl/d618b748bd0f8f0b4864b7b7fdc20786546e36bb create mode 100644 fuzz/corpora/crl/d64b8c6e1dd68f74c7cf411cfa31b01947972d35 create mode 100644 fuzz/corpora/crl/d686d07108751a925d15be3ffd2eacbb5c1f1713 create mode 100644 fuzz/corpora/crl/d6fb7236854bf9c3881c61e59aedaf32d1a257fc create mode 100644 fuzz/corpora/crl/d716808d78d8e1968c6474aa4fb34af421b8159b create mode 100644 fuzz/corpora/crl/d7223b4d4618d9f3fc3968b3800f80337bb51e30 create mode 100644 fuzz/corpora/crl/d7677e72c9f192db848526148878c14dad81711b create mode 100644 fuzz/corpora/crl/d76c8905307e0f6ca2212d6b330d700d78b35737 create mode 100644 fuzz/corpora/crl/d76fd781605a610b305761bfcdd225f148f23e37 create mode 100644 fuzz/corpora/crl/d79853b98e28222a14f34a1453cc04c2c6186a2c create mode 100644 fuzz/corpora/crl/d79ac33f0f816ecd8be534427c96610b1af8105c create mode 100644 fuzz/corpora/crl/d7a1def00d1723536925491958e25a19ae48f91c create mode 100644 fuzz/corpora/crl/d7add4db0a57cd5b62a23aab518bcc6d86989409 create mode 100644 fuzz/corpora/crl/d7f78aed6a4670d7308d7db39ff458455273117f create mode 100644 fuzz/corpora/crl/d7f79f6e53294225eea433f49a6882a11d22e121 create mode 100644 fuzz/corpora/crl/d80014ef0f6421f5270c4d4aaca8c1b29c10716a create mode 100644 fuzz/corpora/crl/d81e5c190ca550e6321eb197320d3fc4d7a411d8 create mode 100644 fuzz/corpora/crl/d83fb041da36e614f3aeec79ca56ef2971ee0c74 create mode 100644 fuzz/corpora/crl/d87c0f658de837898b8e03e251f77734cd45f4f9 create mode 100644 fuzz/corpora/crl/d88954b42781fc2a66f5383ccf39d273f7261e3a create mode 100644 fuzz/corpora/crl/d8b4cecebce070b262e1800565a9f060499eb35c create mode 100644 fuzz/corpora/crl/d8d92102a337a48806001ec7bfaf65556161fae9 create mode 100644 fuzz/corpora/crl/d8fb1599719a7a270ef529c58b02d21a1f98439f create mode 100644 fuzz/corpora/crl/d8ff556a9db8ffc910a97f520dd23169a1468f2b create mode 100644 fuzz/corpora/crl/d90f283ce655f9dbe4f6f38eb6fc8594312eed20 create mode 100644 fuzz/corpora/crl/d953c848aeb45872e25ce94546bab19857e5949a create mode 100644 fuzz/corpora/crl/d955d54ae2fb3cfd83fa5071d6dbc2696c2c0a54 create mode 100644 fuzz/corpora/crl/d9654fd618bdb3eace22a12fc239c0438e79be89 create mode 100644 fuzz/corpora/crl/d968792ef8afe0dbe9eb3c54430dbc319b2cfd25 create mode 100644 fuzz/corpora/crl/d9763553a2b0a41fff01ecbaabdfbf2d23963161 create mode 100644 fuzz/corpora/crl/d97bb8e7b2a415bfc1962aa9a35bc008f5e1486d create mode 100644 fuzz/corpora/crl/d9c33cbcfbec484f18914d6254581a8ab3ef634b create mode 100644 fuzz/corpora/crl/da0a8e15559469a698c20e3c2c6f0c20ce7b3f51 create mode 100644 fuzz/corpora/crl/da0b97b87a86dc957fe99215ce46c242a9775c02 create mode 100644 fuzz/corpora/crl/da111d10cceb024bf464cf57422322daca8bc3a1 create mode 100644 fuzz/corpora/crl/da2d787ee05a01a9f74f91544aa708c2fdeebb46 create mode 100644 fuzz/corpora/crl/da37f16487b8a88138cbdbc8ef18a2f8b4589bb1 create mode 100644 fuzz/corpora/crl/da7d7affa77e0d8ca555dd21beeee2ef29386dd2 create mode 100644 fuzz/corpora/crl/dac4f6f425c3f8ffcf076f55403026b450dab8cb create mode 100644 fuzz/corpora/crl/dacd076df3d8873ff5f2a55771e0c4b5fc92a2a1 create mode 100644 fuzz/corpora/crl/dadba49088d5f626aadc44a0fc86810bfce1238a create mode 100644 fuzz/corpora/crl/daeebd619b09d79b30baac72815def423545a920 create mode 100644 fuzz/corpora/crl/dafddc80515b2bddf2a51b6c430d71e06bd9a784 create mode 100644 fuzz/corpora/crl/db1a952aa32aba81eb247327b3a26d760fc3b5ea create mode 100644 fuzz/corpora/crl/db217250a84cdf672ff48f27d1699b717422d925 create mode 100644 fuzz/corpora/crl/db265a9d86ebbf8ed4715c195a9178978a46522c create mode 100644 fuzz/corpora/crl/db67dbcc5eba040ba1e660e72e60f0779bcf5ed2 create mode 100644 fuzz/corpora/crl/db78c7ce2b4ea6d5d9afc29470354d7b0193aea1 create mode 100644 fuzz/corpora/crl/db982712af5df90e71c202b4d07477725181eac9 create mode 100644 fuzz/corpora/crl/dbaf1a8f4d7abe6c0b99ab7f16c5a65f64fc6963 create mode 100644 fuzz/corpora/crl/dbccd2c2fe883093c32115a93f6e012fed3af2e4 create mode 100644 fuzz/corpora/crl/dbf272a21770e2fda17a6fd1e7be1bbc53986d83 create mode 100644 fuzz/corpora/crl/dc774bc2158c6a142a5c151ebd1a0db99f70dcdc create mode 100644 fuzz/corpora/crl/dca76fef5df79e3036a5053bc92ccfe191cfa4b2 create mode 100644 fuzz/corpora/crl/dcac013ec2e6b2d68d81454d99368d77ca88c5d0 create mode 100644 fuzz/corpora/crl/dce086fc1b20f43c5e0b1493366c74d49dc8da03 create mode 100644 fuzz/corpora/crl/dd2ec09e041349309ed53cab7375ea2a2007f47c create mode 100644 fuzz/corpora/crl/dd3a55237af6812451ae7d1127c887228e102dc0 create mode 100644 fuzz/corpora/crl/dd9699b27e7df118f581ae6a789cf6a329a98ba0 create mode 100644 fuzz/corpora/crl/dd9c8b93ccc47b1486bc7e56a7421af5069fb62f create mode 100644 fuzz/corpora/crl/dda1ea162062d30d8363f73ffce822375c4fa50c create mode 100644 fuzz/corpora/crl/ddd94ec93857eb955118ed018c85e796a824904a create mode 100644 fuzz/corpora/crl/ddd9c54e797474627f0c5a3731d2a719c19fb0fa create mode 100644 fuzz/corpora/crl/ddfd8dbe3ba25bd8f10b066cc51a9afd567fec4a create mode 100644 fuzz/corpora/crl/de0b56c62f02202a7c2db82e742eab5cf1b03c5a create mode 100644 fuzz/corpora/crl/de3b4a2b245d01d96690a360ead7eae357c6f96f create mode 100644 fuzz/corpora/crl/de4c8f9e7b341b6774efd3f416a2b2a7b00e0199 create mode 100644 fuzz/corpora/crl/de6493ba9067e33d3a5ec1094ce6d8946b59c103 create mode 100644 fuzz/corpora/crl/de745722759ff5dc16b1ac7e8de9141ea2b08458 create mode 100644 fuzz/corpora/crl/de8723d7e809b0a4e6d5f2215c50ffa630da8b08 create mode 100644 fuzz/corpora/crl/de8dbdda4be2b98c52f16b9ad40f8b512b3d2fc9 create mode 100644 fuzz/corpora/crl/dec525a7aae18cb357b4dbbeb3e53ea6791191c3 create mode 100644 fuzz/corpora/crl/defdd47a02f9be879c953f12aa202950314658eb create mode 100644 fuzz/corpora/crl/df287e62e6f038f68fcdd9582de6bf79cf94c159 create mode 100644 fuzz/corpora/crl/df51902db05955171465f857fe037e215966de08 create mode 100644 fuzz/corpora/crl/df55fbb0ca882ba80eb5b5b01dfcdbcb20c017c0 create mode 100644 fuzz/corpora/crl/df959d247ca5c7959c5c81f8c01350fb74cf4a0c create mode 100644 fuzz/corpora/crl/df9c0d337d7617b4e687825025fb13d03a61a8d1 create mode 100644 fuzz/corpora/crl/dfa2ea8c89b69fbc1ff12954bbc1d12bd1ad977d create mode 100644 fuzz/corpora/crl/dfafacde42c34934d91c5acd6e333b208585883a create mode 100644 fuzz/corpora/crl/dfb328870b05cf923b8de43d9bdcb81c06645a70 create mode 100644 fuzz/corpora/crl/dfb57ea36c035dc6c2ff33522413b133b6812162 create mode 100644 fuzz/corpora/crl/dfbb2bb2fbd5c47d65a383467247d93f98a3e5d6 create mode 100644 fuzz/corpora/crl/dfc8d080e6255fae28c6e09a28cfe5b4c2dfb7bc create mode 100644 fuzz/corpora/crl/dfca772ae7374a8041fba65dcf987ac7521633d7 create mode 100644 fuzz/corpora/crl/dfded8685c7b60c25feb09ca2238ed08bc2b9915 create mode 100644 fuzz/corpora/crl/e01bc0ffcf6a13ca1945605c9e03279411bed00b create mode 100644 fuzz/corpora/crl/e032f19ec20433ddb3bcffeb2e8fda6ce196a5b0 create mode 100644 fuzz/corpora/crl/e0480f9435b928330dc5d02f9c15210be6aae1c7 create mode 100644 fuzz/corpora/crl/e09827fe7dd28915738519d1efcfd4fbfc2f677e create mode 100644 fuzz/corpora/crl/e09d44734ff6bda38cb5b146bac8631ec663d997 create mode 100644 fuzz/corpora/crl/e0a467b7a8d82725f59fccd0f01b2eafe28c6493 create mode 100644 fuzz/corpora/crl/e0acda88696b98448d903d232ca2404a4f168052 create mode 100644 fuzz/corpora/crl/e0d5ff5097d090a34c5918dcce8f97998401cec6 create mode 100644 fuzz/corpora/crl/e10c6fe8bfe85de4b5a83fdb9315af70112bc723 create mode 100644 fuzz/corpora/crl/e11725327f59efa744a94bcddaa78ef7253da147 create mode 100644 fuzz/corpora/crl/e1385d28296b193b4b880d1c866ecbf276dd2be3 create mode 100644 fuzz/corpora/crl/e143cb6e3f164355fb1aa9cbca064e7ab7c69cde create mode 100644 fuzz/corpora/crl/e1a5efd38d6b6e48dcf080abcd71194c4af0dcb1 create mode 100644 fuzz/corpora/crl/e1aa6ee8595f54f1a0215933a2b956e9609d2d31 create mode 100644 fuzz/corpora/crl/e21030be159ecd9e47ab88ebec356f42005ef0db create mode 100644 fuzz/corpora/crl/e25588b0b21a23070e48628b78570556b3703376 create mode 100644 fuzz/corpora/crl/e2857cad0a599fb59ac84c07c67aa17b381ad9ea create mode 100644 fuzz/corpora/crl/e297ca57f6d3c054564d39b0c5651276018cfabc create mode 100644 fuzz/corpora/crl/e2bfbe2548ef39e682da47b3965f263bd3894578 create mode 100644 fuzz/corpora/crl/e2e0e334c0a4f08f3aa71c0ec619e128da58bba5 create mode 100644 fuzz/corpora/crl/e2e78647472c4a8105f278cc76352a6aff7b8f6a create mode 100644 fuzz/corpora/crl/e30bb4c279ea9318cfb3aea6029e8c2e59de95ba create mode 100644 fuzz/corpora/crl/e3306c8aa1ad658c936740fd613dffe5dfb66f18 create mode 100644 fuzz/corpora/crl/e33870d89ae4af4898294416283ca3e489d80a63 create mode 100644 fuzz/corpora/crl/e33aaf763e92c4069389653e369f4620c4d9c07e create mode 100644 fuzz/corpora/crl/e34d295e63dea9a5fe9db468fd12901cc122289c create mode 100644 fuzz/corpora/crl/e351a1e8eba37af45e632c10bfea3c5512026f21 create mode 100644 fuzz/corpora/crl/e3d28185bcd7b9b3470c964109bf417210c32e77 create mode 100644 fuzz/corpora/crl/e3d71f8dda8c6d8e209130b27dbe245fecdcb729 create mode 100644 fuzz/corpora/crl/e3f6486bc5b3dfcad10a33a7f0db388261b359ce create mode 100644 fuzz/corpora/crl/e42444a8237ae7ebeb66c097905476f573c79730 create mode 100644 fuzz/corpora/crl/e4f8001ae1f6afc03bcf21be1ec464bf323a75ee create mode 100644 fuzz/corpora/crl/e5105e3125af2e93e7713d6576b3c729a9ac08e8 create mode 100644 fuzz/corpora/crl/e53f1876da3dfd7224ae1f069ff967ec4f979f71 create mode 100644 fuzz/corpora/crl/e55bbcf84d05f555e9d27341f4f3908fce8e227d create mode 100644 fuzz/corpora/crl/e561c412340f703ef5fd82afafc2cb639a865372 create mode 100644 fuzz/corpora/crl/e5abb935f47adafd3a0d29121c2d1eaf00f9b9a5 create mode 100644 fuzz/corpora/crl/e5e8ac4b517073f5de3587a3c5f06a7f200180fd create mode 100644 fuzz/corpora/crl/e606a20e3e71502d345d2d1bc8b2e6950ce4ec0f create mode 100644 fuzz/corpora/crl/e62f30d40b34535ad77dc43420a1348d02163e37 create mode 100644 fuzz/corpora/crl/e6319bb29360a4533fc53456a1223a08aa1512b4 create mode 100644 fuzz/corpora/crl/e63596f9e62bfcda472785f177cc1abe358a400b create mode 100644 fuzz/corpora/crl/e6456de471c5f9aa289236b91ef157bf67d0e860 create mode 100644 fuzz/corpora/crl/e6646b23322da355513f4d892851d63224485778 create mode 100644 fuzz/corpora/crl/e667a68e1464eca35ee62f571f2e388cabdd9f75 create mode 100644 fuzz/corpora/crl/e67723f60a89be6e36ece15cccdb5c16fe250a09 create mode 100644 fuzz/corpora/crl/e696a6129255a5d70d9987121414e47d6cc4e066 create mode 100644 fuzz/corpora/crl/e6cc037d21c12fb058b1b8374e52d1a88bbfbaf9 create mode 100644 fuzz/corpora/crl/e6e06735e4026dec36cf60f81cc890817c4798ed create mode 100644 fuzz/corpora/crl/e73cf95392aec87a73e25b8bfe677627f5f71aa5 create mode 100644 fuzz/corpora/crl/e7791194271ca84ad6898ce1bf4293b54961f398 create mode 100644 fuzz/corpora/crl/e79652bd6c1a36214a81af86f3d55e57262eeb73 create mode 100644 fuzz/corpora/crl/e79b3e05517b46ca9810c69af8a734364aa4d369 create mode 100644 fuzz/corpora/crl/e79e10245f5d7925504c3766d6d639f4028374b7 create mode 100644 fuzz/corpora/crl/e7a3be49885506e119356d6e6933e6b56db0fba0 create mode 100644 fuzz/corpora/crl/e7abb499300c53c2442fa695db7f1ce0ef1beb65 create mode 100644 fuzz/corpora/crl/e7acf4302cd5db4277ffee1c52989da4cb34c28e create mode 100644 fuzz/corpora/crl/e7bbc38111eff481c0735e4f83abf247da7ecd84 create mode 100644 fuzz/corpora/crl/e7c0dd959df85ce209333e7b8277d5014691ae0a create mode 100644 fuzz/corpora/crl/e7cb06ab3f5a84f5a5ee7ac6019208cc34bd65cc create mode 100644 fuzz/corpora/crl/e7f41d1691c45c9fc327dc5f68ebdcaa7b087a4d create mode 100644 fuzz/corpora/crl/e7f745a340e1d71ddd1aa24393842604c5884e6e create mode 100644 fuzz/corpora/crl/e806adb556a4e63232af572bf724032b8bc01ae0 create mode 100644 fuzz/corpora/crl/e808a89f2ffa8ad1009d762f5a35b628a37af5d4 create mode 100644 fuzz/corpora/crl/e818abc68dbc4b3dcf94ce373018e64ea2aa16d7 create mode 100644 fuzz/corpora/crl/e8306dbe1e499abc8a9c62de707964c94d939950 create mode 100644 fuzz/corpora/crl/e864c8bedbf157efe23f6c5e19f494795d6becc9 create mode 100644 fuzz/corpora/crl/e86ebaedfaad5f8dc7772b01722777ca0eed3ea0 create mode 100644 fuzz/corpora/crl/e875be2fbec78fbaa7c2283d7ed0350efc3338a3 create mode 100644 fuzz/corpora/crl/e89901544228d76ccc525d393ab51c6a549ae038 create mode 100644 fuzz/corpora/crl/e89a98140c8e2cc1f327b8faea7803d1615f5fc7 create mode 100644 fuzz/corpora/crl/e8a697e74aed31ddadc48a1c395ef346d870befe create mode 100644 fuzz/corpora/crl/e901ea786b719d8a0690515a32c8d80aa8ba032f create mode 100644 fuzz/corpora/crl/e91b6e6847dda89415ac4668570240bcb11d473b create mode 100644 fuzz/corpora/crl/e933da55146dc8c7bb1a3f6171279210c808254a create mode 100644 fuzz/corpora/crl/e95d7016955664063b958425c2b22abe1381cf4d create mode 100644 fuzz/corpora/crl/e9aeef847c1907c4874833f36c2143e48964bd58 create mode 100644 fuzz/corpora/crl/e9b32f8462873d0218783fb0d377d27b043960ff create mode 100644 fuzz/corpora/crl/e9c0844315a8e9d85be5f21e11e699e934e9b836 create mode 100644 fuzz/corpora/crl/e9c8779d135605900c528cef37a98b925dc76f60 create mode 100644 fuzz/corpora/crl/e9cad3d0c159894c5dee499073d8c024b0730d75 create mode 100644 fuzz/corpora/crl/e9de3702419e7e04f51225697217c8430a9f2b9c create mode 100644 fuzz/corpora/crl/e9eb73f95219a17574351a7d9f3d445fe5d1e079 create mode 100644 fuzz/corpora/crl/e9ef1c2cf80bf7fe34e13fcb53e474c341f5a7e8 create mode 100644 fuzz/corpora/crl/e9f1d26ed385f2425e3568dad3cb76b7fc7160a6 create mode 100644 fuzz/corpora/crl/ea003969585e0b1797f93b121f17b885eda8ebb7 create mode 100644 fuzz/corpora/crl/ea1ae1a384af7d48076ae5fec8e8b9bffbdd6d49 create mode 100644 fuzz/corpora/crl/ea9b3df3fab33cf5d6bc8dec8277ee9c00d0a0ef create mode 100644 fuzz/corpora/crl/ea9b8bdcd914b5a2739ef68b317bec579118cd93 create mode 100644 fuzz/corpora/crl/ea9d283d1c5b9dc2b355a7a6778a8c5f74028a97 create mode 100644 fuzz/corpora/crl/ea9ff7a830d41a23e46aebd8cd323c21036f0ee4 create mode 100644 fuzz/corpora/crl/eaa0f44e1e8de1ff833f408a2910c512ef99b733 create mode 100644 fuzz/corpora/crl/eabc169b6a72df669010081c12d171706469767b create mode 100644 fuzz/corpora/crl/ead6a468d1a9ae1b647033ef6533e39334619277 create mode 100644 fuzz/corpora/crl/ead86f693a4cc0caf4b112a00811043329d79120 create mode 100644 fuzz/corpora/crl/eaea8fb7554376ccc858d12a3b0509bc6c878bb6 create mode 100644 fuzz/corpora/crl/eb3082c806447ce974229f57ffd366a62345adbc create mode 100644 fuzz/corpora/crl/eb3356487a3d9d7b1d8a3b67142a57557a5971b7 create mode 100644 fuzz/corpora/crl/eb60cb628f1338e214907d0f3782421fd25ddf23 create mode 100644 fuzz/corpora/crl/eb6d6b5be271ab5d3189a9978e1d0eae82759abe create mode 100644 fuzz/corpora/crl/ebd36a1cb97d8d23821a5849184673033a386c14 create mode 100644 fuzz/corpora/crl/ebf7f4932cf43d47fe22c46097a5771894b6cccc create mode 100644 fuzz/corpora/crl/ec01ca986ae4ab0770f1970cff29048b41da3c03 create mode 100644 fuzz/corpora/crl/ec1dd04cfb9a60353d85e9c8b44672abf3ee0d72 create mode 100644 fuzz/corpora/crl/ec1e6b79c9eb0931b50fe9f603964419cd9c4761 create mode 100644 fuzz/corpora/crl/ec6de8eaa16e15ac00b8ed7749903d6094e4a7ad create mode 100644 fuzz/corpora/crl/ecd9ccefd5625ed69ed2c4d13d1931cc621393f2 create mode 100644 fuzz/corpora/crl/ecda1aaca20c8569cbe4a8823299c7fcd0fd9c17 create mode 100644 fuzz/corpora/crl/ece83639c9b601af344096967d048bbd5bc60a06 create mode 100644 fuzz/corpora/crl/ed67dcabd741c6d78b4ee6e4564f2c9bbc19b9a2 create mode 100644 fuzz/corpora/crl/eda78a08535c9dd6c4cf6a18d9111cd20992b02c create mode 100644 fuzz/corpora/crl/edc7ac48d99ee81b899b6c592a16248b25b34e4f create mode 100644 fuzz/corpora/crl/edde05c589b284bd2e2a92a15ab0c564f6900678 create mode 100644 fuzz/corpora/crl/edf5182066c6a4fb9985d314e3ae77f03e679621 create mode 100644 fuzz/corpora/crl/ee0874697ccaaef9a7cc6aaf465a2e2127003f7d create mode 100644 fuzz/corpora/crl/ee1b0fb281c5e465792a1d91d87a2c20431296ba create mode 100644 fuzz/corpora/crl/ee2d967619fdf7e9f9efcccc98cb51018524844c create mode 100644 fuzz/corpora/crl/ee39da1078416cf2d02ae04c68f29534c467ee10 create mode 100644 fuzz/corpora/crl/ee43b95846b18c71b25af88a8457dec3b7c1a7a4 create mode 100644 fuzz/corpora/crl/ee4d5eec6497491372d3295dee86bb56d23ca51b create mode 100644 fuzz/corpora/crl/ee594b7eb86bae17c023e8ace66d283aae93b139 create mode 100644 fuzz/corpora/crl/ee63fc26276c1a518136c7aac74a4518cdb4479d create mode 100644 fuzz/corpora/crl/ee6e4933b1acad1d28aca835ce428d13d8877bb5 create mode 100644 fuzz/corpora/crl/ee6f8bc1b2ed4c0dbf162113ca4b6308f6e6db5b create mode 100644 fuzz/corpora/crl/ee79d8894c40a65a9d16d5bdeef4f60615309722 create mode 100644 fuzz/corpora/crl/ee7f90a78dba458b2dc2d19cca0fba84569665e2 create mode 100644 fuzz/corpora/crl/ee8e15ead8137e20282d725ca537a9c74b964b91 create mode 100644 fuzz/corpora/crl/ee8ff3c66db9c09247f6170fea7e58c6cebdcbca create mode 100644 fuzz/corpora/crl/eea00134216a5010abb3426f1ca157d3f7abfd5b create mode 100644 fuzz/corpora/crl/eebe03bac30a537f78c88ccaddf70faa08c12856 create mode 100644 fuzz/corpora/crl/eee28a32747f22abba34346acf563f71e945993c create mode 100644 fuzz/corpora/crl/eeebd1c9d79d24d2bceaa576bab24ee4c245b103 create mode 100644 fuzz/corpora/crl/eef512d78623c795fe2275bbc676d7ec60c5bf0d create mode 100644 fuzz/corpora/crl/ef3cc8e405297f69430503d826b83f1b7b39f9bf create mode 100644 fuzz/corpora/crl/ef7ff5ef6f075e66c7d58f3e2d2b167348ab0df7 create mode 100644 fuzz/corpora/crl/efa8356f9d97f450446704bc2a5603857545cc04 create mode 100644 fuzz/corpora/crl/efdd8d16e26f007e87e6f8dacba4fe93e92ae262 create mode 100644 fuzz/corpora/crl/eff2c3fe3d11db8325b991f875b8b58b2fe781c7 create mode 100644 fuzz/corpora/crl/eff825ca39c7b582c8520012b05439efce90c288 create mode 100644 fuzz/corpora/crl/f00cefae706cac62e433541175ae4f4767e9dfac create mode 100644 fuzz/corpora/crl/f055eddd1db686a30b26b99c2de8fecb20e42bec create mode 100644 fuzz/corpora/crl/f06ba47db372fcb7cd5650afd6f40d75b43a36a4 create mode 100644 fuzz/corpora/crl/f08e3a6ca4a60e8a366630c63e4ae59f2554a532 create mode 100644 fuzz/corpora/crl/f097572eeaaa7ed53d6de50f6ec47c463b92be65 create mode 100644 fuzz/corpora/crl/f0a17ff3153aaf3bc180a6beb36c312ee7152532 create mode 100644 fuzz/corpora/crl/f0ec63785572eded94b61b17d52e949fd867d966 create mode 100644 fuzz/corpora/crl/f0fcd3f173325ff76cc7de426bb65a572cf50d7b create mode 100644 fuzz/corpora/crl/f0fff6c7292de9810b7b787831ec7a84a2a13638 create mode 100644 fuzz/corpora/crl/f10eded07f1db969c2799ea8d8969d0e8ede0eee create mode 100644 fuzz/corpora/crl/f17bb6fe1915358d8dd02fe61463c247795297c7 create mode 100644 fuzz/corpora/crl/f19772365847b41a8312a1eb7c0543f34a90388c create mode 100644 fuzz/corpora/crl/f19b7a0ea3ff6a972bc3347bf658da2b8d29be67 create mode 100644 fuzz/corpora/crl/f1a57b930000e625ecc2a666070045f826661e3b create mode 100644 fuzz/corpora/crl/f1bb42be36ede2a3723bf48610ac3f2eecef78a0 create mode 100644 fuzz/corpora/crl/f1cb986361f27aa3552f4bcce4b9c39584057966 create mode 100644 fuzz/corpora/crl/f1cba12917589910ccd4714a5c52a0742cf59ea9 create mode 100644 fuzz/corpora/crl/f1dd4bf8d912562c65ff5146372f8bdef4485f75 create mode 100644 fuzz/corpora/crl/f1e4f449f95ad8996cf1e5874048b9dfbe951f72 create mode 100644 fuzz/corpora/crl/f1eb15222a64d0d15fa7085f043115c6a59c984d create mode 100644 fuzz/corpora/crl/f2457a6a3290cbc4942315d445dfca05bc21890e create mode 100644 fuzz/corpora/crl/f261978cd6940006a12067f87f7bd09a9512fd06 create mode 100644 fuzz/corpora/crl/f27c0cad181d3fc7aedecc712e1c54b6a1f23124 create mode 100644 fuzz/corpora/crl/f28db80affb4654a236cda0e16599e0ef6bd9147 create mode 100644 fuzz/corpora/crl/f2ac1874ffbc8428b4c8c9cae2d12464db066533 create mode 100644 fuzz/corpora/crl/f2b604511e8302b4ac690153a027d09a4165a6cb create mode 100644 fuzz/corpora/crl/f2cf4e9f35011363d872665da79217f03883ac06 create mode 100644 fuzz/corpora/crl/f2e04ddaa474ae661767a19694fdfc96de9dabc2 create mode 100644 fuzz/corpora/crl/f311de5364ab6c4ed74545685601e61067e2fb0c create mode 100644 fuzz/corpora/crl/f35880d06721c35a1668bf0de2ef11208839ac3c create mode 100644 fuzz/corpora/crl/f35935ecb59f06bf6fd395bd2db8e8061c5697d2 create mode 100644 fuzz/corpora/crl/f366c30b2187024b5cbd700c0cc1d2232201444c create mode 100644 fuzz/corpora/crl/f3868764f073358b4dfdf32918578e66d1911198 create mode 100644 fuzz/corpora/crl/f3a7f5c98135064f84c9d18e23c74526809e3736 create mode 100644 fuzz/corpora/crl/f44e15630e51e5bbbf396eb77d788218b80d55d9 create mode 100644 fuzz/corpora/crl/f462cced67b4a00e74215ebe90c62e4132bb2c93 create mode 100644 fuzz/corpora/crl/f4635f3d37a65de846eb23b4980dec1edcbd7f43 create mode 100644 fuzz/corpora/crl/f4a0e82483653bd928759f72d89ed47c027d37ef create mode 100644 fuzz/corpora/crl/f4d88b100b0b4ce2c1986ed8ea2bccb87f707293 create mode 100644 fuzz/corpora/crl/f4e8a6f561781ea76e34092ba86ab33ef2c88fe6 create mode 100644 fuzz/corpora/crl/f4fe259be1038b49bfa0d410e280497f080dde18 create mode 100644 fuzz/corpora/crl/f50ef30f1957f25d7c94950ee38c0a13c974783e create mode 100644 fuzz/corpora/crl/f51d41d223a7b1a4e2ff4e6bf811966f9b083a08 create mode 100644 fuzz/corpora/crl/f529ce418eca30b07af55806f5dee900142bbcec create mode 100644 fuzz/corpora/crl/f52dc44c5761334ad81d92f402e6f59b3d6b8865 create mode 100644 fuzz/corpora/crl/f543b4cd55ac4eac283b475ee5d9ab8137b73daa create mode 100644 fuzz/corpora/crl/f576329dfa6554430c33e7cdc87442fcde2cad13 create mode 100644 fuzz/corpora/crl/f5a4e377b705da26b0ba5f9c66f83bb4080b7fab create mode 100644 fuzz/corpora/crl/f5a9016c7d0922eaa3c8a154a770fddac2339d51 create mode 100644 fuzz/corpora/crl/f5b4ecf10899a183929cd9fa3074d381667ac97a create mode 100644 fuzz/corpora/crl/f5d3cfb204cf313a0aa670fbf75176f3a9c4acdb create mode 100644 fuzz/corpora/crl/f5ec9b5d9bddb32d6e3b4ccd22e7360d42baf918 create mode 100644 fuzz/corpora/crl/f5f171c08fcea1de77ef869254b413ea7a72948f create mode 100644 fuzz/corpora/crl/f639d4f1122aff006e2f7228fae0309aa2252d18 create mode 100644 fuzz/corpora/crl/f6815f4cbf4eb8e400b4b2f19db9394919a1d5d7 create mode 100644 fuzz/corpora/crl/f6ccd16a3d2fa91325f502fc717f025b5e5872b1 create mode 100644 fuzz/corpora/crl/f6ea23c56f9a4fdebcb92923d7df6c679cbc0e62 create mode 100644 fuzz/corpora/crl/f702067f7ec61e31a8a1083f6a6b23863b577d40 create mode 100644 fuzz/corpora/crl/f712100b2fbc591a20a5f93c99e8769b986b4971 create mode 100644 fuzz/corpora/crl/f72a1c537b7b47c417e76e8f1053f4c738074eec create mode 100644 fuzz/corpora/crl/f73513b34f4d6afd498b3b3e983141c2ebaf01d6 create mode 100644 fuzz/corpora/crl/f7512586f9a54b6910ec2fdbdb14868987044fe6 create mode 100644 fuzz/corpora/crl/f7670fffec306e65a96f4440c5438ac9d992098f create mode 100644 fuzz/corpora/crl/f77658bcabb99fa3da9dd1f09d7f6c2ad15726f8 create mode 100644 fuzz/corpora/crl/f78b1e49d9f0404d81d7042a085a93b31288bd60 create mode 100644 fuzz/corpora/crl/f796108a67f44bd1e7c517be681aa8afcc9ec290 create mode 100644 fuzz/corpora/crl/f7c6d84c8bca0c77179ec1a09cd3b065a1213c8c create mode 100644 fuzz/corpora/crl/f7dbb3aaf6c14d9dc216b0022c4be84d10c61ec2 create mode 100644 fuzz/corpora/crl/f7e18b2664eb65101785ede39caebf5b95e56f91 create mode 100644 fuzz/corpora/crl/f7f3df2366b2f5d286adddea570a3e0ba87989db create mode 100644 fuzz/corpora/crl/f8059d9fa04a2761543e772f7ccdf7fc9f0ddf64 create mode 100644 fuzz/corpora/crl/f8303de6f79d7321fd929e3c66b7e94be094297b create mode 100644 fuzz/corpora/crl/f844b2b499998bd3bde54f5cbab886e426778356 create mode 100644 fuzz/corpora/crl/f8d4d01e1f88fc713db6bb745c93bc912e40a9e0 create mode 100644 fuzz/corpora/crl/f8fd4c23e879447c1eabe6816c92929dfda78a2a create mode 100644 fuzz/corpora/crl/f905f64e6f916f08fc345a0c4918218f62160378 create mode 100644 fuzz/corpora/crl/f9133e6d575a1a533454490d3d7c669793d4e4b2 create mode 100644 fuzz/corpora/crl/f920ed3f65db437e0b0bc1f58b0f0c26db59555d create mode 100644 fuzz/corpora/crl/f938ce61eaf45a64623c100d0ccf9b3704d62468 create mode 100644 fuzz/corpora/crl/f94a738f643ec23f266b120b4ed72e7ba75c7c55 create mode 100644 fuzz/corpora/crl/f9a1d1a4d61907509147463689c53be359a98bc5 create mode 100644 fuzz/corpora/crl/f9aa0c9290bc6ba6de3fef6c1ec6d144b3f2588e create mode 100644 fuzz/corpora/crl/f9b00b8ed2372654d19f5da5beebad49beca6939 create mode 100644 fuzz/corpora/crl/f9c0ee13402c3cb8e9e46e878a23e3561289bf78 create mode 100644 fuzz/corpora/crl/f9c45cfc8d2263a3055bcbd0599e8459ffb9bf45 create mode 100644 fuzz/corpora/crl/f9c920254fae1bf9f74e61e66fdc81d1bc3ae455 create mode 100644 fuzz/corpora/crl/f9f430c25724ef79b2444b5b2a43289dcb5403c6 create mode 100644 fuzz/corpora/crl/fa243a1c3b0e4aea545bfacb24f7a1a827836a70 create mode 100644 fuzz/corpora/crl/fa336a045ab4a55488c332d6680927a50ada3b6c create mode 100644 fuzz/corpora/crl/fa40a60514dce0fc9081b0375a407b0852f68764 create mode 100644 fuzz/corpora/crl/fa54b1f922136e53bddc1a1d02e523af7098a3ec create mode 100644 fuzz/corpora/crl/fa6b39cecb505de5b62d929189fd1adb6c448807 create mode 100644 fuzz/corpora/crl/fa6d58e5031f9c8747edd06f479674df91a078f6 create mode 100644 fuzz/corpora/crl/fa7f82a085b4cfdd026f81bdc12ce1e9e23b2960 create mode 100644 fuzz/corpora/crl/faab956e71c404b69d03d3253d6eb68214e8aadb create mode 100644 fuzz/corpora/crl/fabbef827d375b6dff43e61f780ed809d576b0fc create mode 100644 fuzz/corpora/crl/face3bbba792cc08169d4c2bb4fdb1aa97c962d2 create mode 100644 fuzz/corpora/crl/facfbbc235dc832d7101b875d63a9f301e035332 create mode 100644 fuzz/corpora/crl/fadd36dbe3a22e79da89ebfe44418d5353d6b781 create mode 100644 fuzz/corpora/crl/fadd501fe36f265eedb1be2d06b1c23e3f492da7 create mode 100644 fuzz/corpora/crl/faec830d6894b2243c42edeb5ee46c752cc5a629 create mode 100644 fuzz/corpora/crl/fafa7e2bb1fe0d1001ece6d0e80cfd97868e6fda create mode 100644 fuzz/corpora/crl/fb031857d3b9f770c9bab1678cd905b7669cf625 create mode 100644 fuzz/corpora/crl/fb77876c3c02bbbb3ad35cc047209c8f9c1875a0 create mode 100644 fuzz/corpora/crl/fbae44dc11451b65ce3e595fb0af8c71810f526e create mode 100644 fuzz/corpora/crl/fbc8dd9923b6872328d51deb62e9d9ead4f87ddb create mode 100644 fuzz/corpora/crl/fbd5708cd7a92956b72980b70ba09c1cc7dfce74 create mode 100644 fuzz/corpora/crl/fbe0aeef76b30cf78e5a9a843863b1c788a657f8 create mode 100644 fuzz/corpora/crl/fc051143cab43c0b053eff46e27dafc67c8e26c6 create mode 100644 fuzz/corpora/crl/fc5434ea9cd90d7538577c57d8316d804afb1987 create mode 100644 fuzz/corpora/crl/fc54ab36aac82f348fa129c484924881e3f75158 create mode 100644 fuzz/corpora/crl/fc57dd7b793410e4924f10fef65bae46e616411a create mode 100644 fuzz/corpora/crl/fc8dc944f8f01a8eede593d67fd8a5df46d48d7d create mode 100644 fuzz/corpora/crl/fc950d07b5cf78cbf8fa14f157baf9549f2fb64e create mode 100644 fuzz/corpora/crl/fc9642257250a0f75628bae42095ba18cc8796a4 create mode 100644 fuzz/corpora/crl/fc9989470c2db70192542e7d54351cce8e95e288 create mode 100644 fuzz/corpora/crl/fce136f7b2a85d136309a88434eeb66766633640 create mode 100644 fuzz/corpora/crl/fcee944737ca1d09edbe1e31bbd587936dbbc994 create mode 100644 fuzz/corpora/crl/fd0173211280b1990551562051fcbaaafffd6b1a create mode 100644 fuzz/corpora/crl/fd207914352a328b376c75bbd903b7be68da3623 create mode 100644 fuzz/corpora/crl/fd4bab6c4c21eec27d6a332ec54301dc82e578ff create mode 100644 fuzz/corpora/crl/fd6e4e72e7bfd775206adcf94e02491e9d560ca5 create mode 100644 fuzz/corpora/crl/fd74db47852c5d6618c11aa82540cdcdb355a4f0 create mode 100644 fuzz/corpora/crl/fda22800efe0b74070ffe87d6a2774bdc6b67ce0 create mode 100644 fuzz/corpora/crl/fdf52ae0a521dde327f4dc5f4ef2e31a48cf0f31 create mode 100644 fuzz/corpora/crl/fdf99e95f61f3d092ba88214fab9b6155567d4a2 create mode 100644 fuzz/corpora/crl/fdfbdf44e140f62bdf37fdfc114d6141859dd361 create mode 100644 fuzz/corpora/crl/fe271ff20cf22122b1f329c622da0d7c3dbb27c8 create mode 100644 fuzz/corpora/crl/fe37890845ccf78533e4d9345bdc0bb60015bff6 create mode 100644 fuzz/corpora/crl/fe6760398c640630e5baa371b5de5a7d5fb1e24e create mode 100644 fuzz/corpora/crl/fe69f18cfabfcd5fed3777a02b1d6152ff62c8ee create mode 100644 fuzz/corpora/crl/fe7d631d0d3f6d704f1ae98a0a3ead9bcc5001eb create mode 100644 fuzz/corpora/crl/fe807e5d14b861a6da5b1999f4de2733c118c407 create mode 100644 fuzz/corpora/crl/fe849fd811b881f6669efed9e4c45e01a0e231c5 create mode 100644 fuzz/corpora/crl/fece70f4ccbd95e1e7d29625cad73c78c980c443 create mode 100644 fuzz/corpora/crl/ff09ce458cfb7918a05f8ef339bd66b02362e0d7 create mode 100644 fuzz/corpora/crl/ff161b8d217335d907355a7ff7aa0c0e77f95e70 create mode 100644 fuzz/corpora/crl/ff56771a21c29bffd45a7b47b6bf394c3e0ab796 create mode 100644 fuzz/corpora/crl/ff7e920280daa6dc7a10a11a5f7e46fe03f07807 create mode 100644 fuzz/corpora/crl/ffb43d61d18b7c2bbad05188684c6acf5e58f610 create mode 100644 fuzz/corpora/crl/ffc3ac0f04336e1a2de45d50ad59406095d122ad create mode 100644 fuzz/corpora/crl/ffeefa9938d848d5a92dc9a742938643250a701e create mode 100644 fuzz/corpora/crl/fff84a4e285acc3f30070831908df0e38670255d create mode 100644 fuzz/corpora/ct/03895ece2fa97495a2aeea0371ffa44dcc45ee27 create mode 100644 fuzz/corpora/ct/050cf714cde82d9d1da9a567bedadeda3f9945b7 create mode 100644 fuzz/corpora/ct/06aaaf2dbd844bc0a5dd2a217fc993d39dfdedb8 create mode 100644 fuzz/corpora/ct/06b8ba004ee806f2a6ce538659408647f91da7cc create mode 100644 fuzz/corpora/ct/0e9f1aab23b046b0793f9896832b1b176b4374ff create mode 100644 fuzz/corpora/ct/0ed44fd8e54562d1c0bbd682ad12ea1abb134931 create mode 100644 fuzz/corpora/ct/0f1bef14b9650d6ea4b1268810bc2bbe67485203 create mode 100644 fuzz/corpora/ct/1055348c0635d21eaf93e201d9884f0381209f7f create mode 100644 fuzz/corpora/ct/11e136c063a41e1f1e8bccd8cd33d8457311f090 create mode 100644 fuzz/corpora/ct/1272a029ce47a7a3328fd46aee459c8e7645bc37 create mode 100644 fuzz/corpora/ct/15fe7d100d8e902433afee2ba44878eb03c41d9d create mode 100644 fuzz/corpora/ct/167cfb94a79ad2fb8013ff35f0b7b6999599bd1c create mode 100644 fuzz/corpora/ct/1691a424ade2c0c9db85afe3d2867fa312c623d3 create mode 100644 fuzz/corpora/ct/16a5d2b082427ca0ab246d04c8355d0fc0bc30e4 create mode 100644 fuzz/corpora/ct/17d9206a15ce6dd4f78f43ba04a67b139fca28fa create mode 100644 fuzz/corpora/ct/189d59de9596eacf6297f43d0dff770d4ec3ac47 create mode 100644 fuzz/corpora/ct/1d7f9a8f0511bc887d1a147f6c8c3882348fc89a create mode 100644 fuzz/corpora/ct/1dae967051f655a845be2b10d388245fbe64c314 create mode 100644 fuzz/corpora/ct/1e0f801592c9dd52291af5ef4fd3d6323167f547 create mode 100644 fuzz/corpora/ct/1e6eedfe74a03f806ae5c43b1e15fd427d79ef15 create mode 100644 fuzz/corpora/ct/1ff40d04384e351ab63b27cb1b21b8c619437092 create mode 100644 fuzz/corpora/ct/222821d3285922e26f713209df3feef7bcfdba42 create mode 100644 fuzz/corpora/ct/24d35c05f843f22337ad8e4136824d650678ced4 create mode 100644 fuzz/corpora/ct/28193a8be0cfcbec255927b8d3100b95643875db create mode 100644 fuzz/corpora/ct/286ececdafd8f24be4b10efc9a34dc976d9456fb create mode 100644 fuzz/corpora/ct/290593804e3320bef962a1af46788a270959401d create mode 100644 fuzz/corpora/ct/32609206bf127869be014564aab91b4d886f6a02 create mode 100644 fuzz/corpora/ct/36cd34a64de4edf00fb9069585e9969db0995721 create mode 100644 fuzz/corpora/ct/383718912dbec60777065fac104b48ff3efbc5b2 create mode 100644 fuzz/corpora/ct/3888892596b666a57b3d0cc8458f40f4cb336b02 create mode 100644 fuzz/corpora/ct/3943e407d6b62c32af636dad1cc5a096ef768460 create mode 100644 fuzz/corpora/ct/3adecbf20f835b746c2e9ca38740a322f5fee65c create mode 100644 fuzz/corpora/ct/3caec23d53355e91b91bde28c92da037ee4df198 create mode 100644 fuzz/corpora/ct/3cc0448f6cb4ce214515cecc7b0d1631f5f1a4e6 create mode 100644 fuzz/corpora/ct/3e45faae76fc2d3dfd856571e7b2f3b738025cd6 create mode 100644 fuzz/corpora/ct/3f6830c6c30b4e95150d1221fc9924cd85694f54 create mode 100644 fuzz/corpora/ct/438911cffd884abb4b1fc7775ece8d7f1988ff88 create mode 100644 fuzz/corpora/ct/45c4e7808553640d2b9e9288029876453e0e784b create mode 100644 fuzz/corpora/ct/465a5e008d1bebc92decb52493c59e795d1557d6 create mode 100644 fuzz/corpora/ct/483c40015b5b049a90e332dbb52cb24bf2457d25 create mode 100644 fuzz/corpora/ct/49b10c0e4c31521e8f8f83947ffbbe420c88bdee create mode 100644 fuzz/corpora/ct/4de8e3a19ca9df29f4189e0e1dffd30b32925808 create mode 100644 fuzz/corpora/ct/4e4b55208d4de0b8004c93632b8fc913d3691a5c create mode 100644 fuzz/corpora/ct/4f15857b6714a365cc8ee090f49aa226b3a567c4 create mode 100644 fuzz/corpora/ct/5093f125861301442a1d774bf7e8848968f2f55a create mode 100644 fuzz/corpora/ct/527ebaa226e5bbf0de21ce32855d14dced12e749 create mode 100644 fuzz/corpora/ct/53a8f402c678024d836dca1a0758e45381a2b9fd create mode 100644 fuzz/corpora/ct/547ed1037b1c629504262cbe45bc86d40d8c9a24 create mode 100644 fuzz/corpora/ct/5614c0cf6842a3c51c0fa895c7c5272bd797aa77 create mode 100644 fuzz/corpora/ct/57499da92a40ab3d91df7c28234d9f0251cfb4c9 create mode 100644 fuzz/corpora/ct/59ba69b0d0150a9aa229336b22ae731edae30936 create mode 100644 fuzz/corpora/ct/5a219aab7745183d9303c0db110069bb37354947 create mode 100644 fuzz/corpora/ct/5f0cbf0c4c09a2117dab8ff0b6f30df47419286f create mode 100644 fuzz/corpora/ct/60838affe239334c1456e8002ea000e0372864f2 create mode 100644 fuzz/corpora/ct/61af899aa25bf2303a1f41a282fe2e94c5b39543 create mode 100644 fuzz/corpora/ct/66ba5467dce24bb2a432f2d63b526829ed23d26a create mode 100644 fuzz/corpora/ct/68c676e3e68bfd73b9844a4a21d110c897e07dad create mode 100644 fuzz/corpora/ct/6adf67a8d24dbd9ff2f230f41e0854624d63f3dc create mode 100644 fuzz/corpora/ct/6c1e1aed8e0b817579df4df8acbb05bd5a1c3909 create mode 100644 fuzz/corpora/ct/6d28b31f48a4836685d1d69a080cd67ff9f9a3f6 create mode 100644 fuzz/corpora/ct/6d3bb8fc6cdd876c61134b97de4a3cca6e82c4e6 create mode 100644 fuzz/corpora/ct/6e719fcea5ffccd377b1ce0d053eaf385cde2abf create mode 100644 fuzz/corpora/ct/6f505e9359bb595afc17e98d497d7b98692751c1 create mode 100644 fuzz/corpora/ct/7052aed65f58c53e52e26108c4a1e3250b7da2ea create mode 100644 fuzz/corpora/ct/716865c5c849478f1e1df462c160abc5b1dc1ac3 create mode 100644 fuzz/corpora/ct/7323ae1682b74e1566c414dbb25c86acecc2737b create mode 100644 fuzz/corpora/ct/7336521ab38c68d63a0f7aecb4f3e9e51ab69474 create mode 100644 fuzz/corpora/ct/73e328d39160bf5d4e48b70fdf1db72359da0239 create mode 100644 fuzz/corpora/ct/7406ad5143ec0758b1f6c26b82775f7ab0e132f2 create mode 100644 fuzz/corpora/ct/74c1c86368c0c6d07a9f33d264e99ce2639bc0dc create mode 100644 fuzz/corpora/ct/75af5f8e7f2747501abe0da9278d6acc3f393a77 create mode 100644 fuzz/corpora/ct/76b3cb2dab94a304731384894eb78629ab0d09d0 create mode 100644 fuzz/corpora/ct/78acc4571362c3ef1febeea11e80fd7f64d8506f create mode 100644 fuzz/corpora/ct/78fe92f3c474278b8b348917fdbebb8bc4b0e8bc create mode 100644 fuzz/corpora/ct/79adc934b5b03ce831ee27b20075bd526d49e7ef create mode 100644 fuzz/corpora/ct/79ebf867e288b5d20a62e7fe98b5b18c93b81303 create mode 100644 fuzz/corpora/ct/7a9ba8182f40484678634a5061964ea228a627b1 create mode 100644 fuzz/corpora/ct/7ac9ad9dfec7c879aa5bdbb58c1e97ef65b409e3 create mode 100644 fuzz/corpora/ct/7c5b87269e8d5cb43823f20586ad1d3699661b87 create mode 100644 fuzz/corpora/ct/7c9bf6cf7852144d9ff4461aed60fd0514624179 create mode 100644 fuzz/corpora/ct/7c9d8b93414135fc7c1a26b5fdb062f30176cace create mode 100644 fuzz/corpora/ct/7ddd91ab9bc50214c83c52c808624b56b69ac239 create mode 100644 fuzz/corpora/ct/7e206aa458ae2cbfeb3ee159115f25d8418bd5b5 create mode 100644 fuzz/corpora/ct/7e7e467df3de08a380f08833903503af75257a17 create mode 100644 fuzz/corpora/ct/8099c9caeda78207b06c805ac3eeca980d921156 create mode 100644 fuzz/corpora/ct/80c5e81928388f2798c76a565f3e36865f862140 create mode 100644 fuzz/corpora/ct/819ac7475a3f0773539f8fbf7998c3c4d06f1039 create mode 100644 fuzz/corpora/ct/83225d2274afa034da5852d60fcade4a544f53df create mode 100644 fuzz/corpora/ct/83984a50f79387d2d233b403ec01e887374e5ac8 create mode 100644 fuzz/corpora/ct/8439c83cf0267a73b6a8f8500c6aa36cb6f19e2a create mode 100644 fuzz/corpora/ct/85197fc2fee41f14ee188bc94690a76643c7b414 create mode 100644 fuzz/corpora/ct/88b2d135c4960d12e80b4337feac08081596c53a create mode 100644 fuzz/corpora/ct/88db54ad98f89081186b93ce6603e4046a362e96 create mode 100644 fuzz/corpora/ct/8a0a1feccf6b01844f98b99a2d4a06780939a0b6 create mode 100644 fuzz/corpora/ct/8c2303537b0cbb5ab4254585e2cb01c4049e7721 create mode 100644 fuzz/corpora/ct/90b0e4f7f4bccc3ab16b36c4b9239e8006f63549 create mode 100644 fuzz/corpora/ct/9128c8c2b494e6e84c69a5aaa47825452607b16a create mode 100644 fuzz/corpora/ct/915415ca0821848c91203fde9d2986d1ad973cdf create mode 100644 fuzz/corpora/ct/91c342cc17b23bbb1882e17cd164c3f0f8265f61 create mode 100644 fuzz/corpora/ct/9238ffbbc63fd9549f3ce0425435d1bd5e40cff3 create mode 100644 fuzz/corpora/ct/92f2eb3090cb2991b7dfaf54b1692aea2bc413c2 create mode 100644 fuzz/corpora/ct/948b11d1da5d29983285975d58b59e7e9e768adf create mode 100644 fuzz/corpora/ct/95da067160d74f506ad6480bde8e51a6bb1e6632 create mode 100644 fuzz/corpora/ct/96ea73c56a87d56701a9275b3be88e0df0b7719f create mode 100644 fuzz/corpora/ct/97e02fb4637f6ffcca0df0dce0e777d284eba4f8 create mode 100644 fuzz/corpora/ct/994fa8c17946a027d1472b8f1875a95c52dd462a create mode 100644 fuzz/corpora/ct/99d0d984e41b4a41baefc78c1bab326af18dbbb9 create mode 100644 fuzz/corpora/ct/99e6e335844adba70bbd39cf90f96c2c1e323be9 create mode 100644 fuzz/corpora/ct/9b5b3912c40a54cbdecf0f866832db439068c390 create mode 100644 fuzz/corpora/ct/9d04b3727c4d46b1adf09f91f9d7ba1386bb36f6 create mode 100644 fuzz/corpora/ct/9e7a3fdd866aa862b1d4d50a56e524c2716b28e4 create mode 100644 fuzz/corpora/ct/a27f40352511a76805eb1193ee2049c9b31129b1 create mode 100644 fuzz/corpora/ct/a30c941146363054e2995d600d521dbab77c65b0 create mode 100644 fuzz/corpora/ct/a4726cc0ba1739824cc957e0149181ed4767d48e create mode 100644 fuzz/corpora/ct/a740153622d94212247cf697c501e7728c69bbf4 create mode 100644 fuzz/corpora/ct/a7bfe664fce2b899c393c3e82f3377955ba664ac create mode 100644 fuzz/corpora/ct/a82fbed4d1553d783a179ebd0f1db9fe19dd7c20 create mode 100644 fuzz/corpora/ct/a91452cb42f7321fb2cc39cd674ba839a70a4cc2 create mode 100644 fuzz/corpora/ct/a945232f71eab8e9f8ac963d0509bc4dfd78eb1c create mode 100644 fuzz/corpora/ct/ab98007bc5d6c4def9beb41f4de26d0bb4f34de7 create mode 100644 fuzz/corpora/ct/ad99472e6e0eb6e4a7efaa661542af5f2d1f4c3b create mode 100644 fuzz/corpora/ct/b0f149c632747bf15a8c396494c05b61c1c21595 create mode 100644 fuzz/corpora/ct/b2fe778770dfc26c35011c0869054714e610b856 create mode 100644 fuzz/corpora/ct/b3179b50c8a007deace008cc08f83885f176f465 create mode 100644 fuzz/corpora/ct/b399e5ee870d573a16192686cc36703572e4c7b8 create mode 100644 fuzz/corpora/ct/b3b03962135a3e3b1cdc4a9a63f804796abea954 create mode 100644 fuzz/corpora/ct/b549cd0bc9ec4634f012d86a92990f9146c943dd create mode 100644 fuzz/corpora/ct/b71c3077364885d7003c41348705397b520a58b8 create mode 100644 fuzz/corpora/ct/b940644d89295e3ce6329d1b9e1c191fea8f85ec create mode 100644 fuzz/corpora/ct/baa64a166824374e71098950ec29de4629943cfb create mode 100644 fuzz/corpora/ct/bac510e0c1c02a75b1cf395c8b9652e75e62578d create mode 100644 fuzz/corpora/ct/bac9b35810bec303f52bc506ce8ad616d0fd4aea create mode 100644 fuzz/corpora/ct/bb030e890118c608335aeb60f291f9414de8d9d2 create mode 100644 fuzz/corpora/ct/bb31e9a7e8b39200d5c8534ac57a9e4637d143e5 create mode 100644 fuzz/corpora/ct/c2fe9e30f0c5d95d1528834ff82131a584546eda create mode 100644 fuzz/corpora/ct/c5b7a914229cfec83ebc085ded9ec8a04ab5ba12 create mode 100644 fuzz/corpora/ct/c60429a21f68577de10e58adb157287305cbad99 create mode 100644 fuzz/corpora/ct/c66da1d6f21758cc8d0e0b26d18aea1dcfc45b2d create mode 100644 fuzz/corpora/ct/c7b00a4b90540785a5279b5005582f0588d2e355 create mode 100644 fuzz/corpora/ct/c8dca947ad77e0e6dc3faab6b9eb3dbc6322aeba create mode 100644 fuzz/corpora/ct/ca33d53ca96b84b252e6a2814067bcb10670e907 create mode 100644 fuzz/corpora/ct/cb19a77bc79c9da3d652896ad837761f42010424 create mode 100644 fuzz/corpora/ct/cc046306740fd25f9340a2767e9952727eac9e8a create mode 100644 fuzz/corpora/ct/cc885e5904a04a520b1c6490facb863d6e6c64f9 create mode 100644 fuzz/corpora/ct/cced208f4e4b59249ac183259f00ce60bb9f7cdf create mode 100644 fuzz/corpora/ct/cd8efd65eb210cd4c69a510b21f54b5bac9b23e2 create mode 100644 fuzz/corpora/ct/ce18d8a01b88b9beb1f45eaa4d5bcf67e4dc3200 create mode 100644 fuzz/corpora/ct/ce3f88b133420a99b9ecf045dde36854ec94bcc5 create mode 100644 fuzz/corpora/ct/d01b3d1256a1781de891358648e2fe8f6aab56ff create mode 100644 fuzz/corpora/ct/d581c2cd810fcf91bf8d082f0ca98df01d6a04c1 create mode 100644 fuzz/corpora/ct/d665f442d223e0ce84b1ff1491f9684687fa2c00 create mode 100644 fuzz/corpora/ct/d754cf888073564176bd2c388695a917c60d94e5 create mode 100644 fuzz/corpora/ct/d8cd321189387d0fbb8a3d164959586ef90d7ad5 create mode 100644 fuzz/corpora/ct/d99b4fa4c7de200b14c64bdc335c3f35daa96cb8 create mode 100644 fuzz/corpora/ct/d9c119ed1c3b4ab901f3ae0c617bddf7052270fd create mode 100644 fuzz/corpora/ct/d9e7463581095a3eea36444eb43cca8054282aa8 create mode 100644 fuzz/corpora/ct/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/ct/da937234e0d9a04d72f68ef9cea898d7a872ca54 create mode 100644 fuzz/corpora/ct/de90d02ca557878ced14957e64c5ea519b94910c create mode 100644 fuzz/corpora/ct/e74436ca5603e1e6ad9bc68801985b06b053fb49 create mode 100644 fuzz/corpora/ct/e826877cbc3098b6be8611b81821ceff9a82369a create mode 100644 fuzz/corpora/ct/e846cb417645872ab9fa01edf74674c2949539ec create mode 100644 fuzz/corpora/ct/e9056a1d75e9247c603c83c9e79b185cafdc0f8a create mode 100644 fuzz/corpora/ct/eb877e4896b1d005a86dd309002d1c937eb972ae create mode 100644 fuzz/corpora/ct/ebbb7934a26d8b66ccbc92a6f75fcc0848b69faf create mode 100644 fuzz/corpora/ct/ec4a95a4d52df149f9d575265773b96ead40ce28 create mode 100644 fuzz/corpora/ct/f065f6f3668aaa14bc6e04340978e70c14bd466b create mode 100644 fuzz/corpora/ct/f2189824dffe27634e9b874f2369451b74549a6a create mode 100644 fuzz/corpora/ct/f3147f389e2e85e248edfd4bad471e4734d6f84f create mode 100644 fuzz/corpora/ct/f3c78768a70d416cc8957ea7a332a7089ea649f8 create mode 100644 fuzz/corpora/ct/f49a805b2e0d5704f4b81b2e7852f35abb11e4ea create mode 100644 fuzz/corpora/ct/f4bd550d9ca5e122a7054d29148269f253183da6 create mode 100644 fuzz/corpora/ct/f84d7483a5409e2469ffc5e1bc0f21dfbd542192 create mode 100644 fuzz/corpora/ct/fa0c511199c8640a67c0d5186095df8f81b7f456 create mode 100644 fuzz/corpora/ct/fa1603a5ce48f961c5b840954572ae131890eeea create mode 100644 fuzz/corpora/ct/fb3ee60460cbd2ebdc2b5f62581356c83b985fb4 create mode 100644 fuzz/corpora/ct/fbb9aaaeaaf95650633fd8e41a32b994f4539f48 create mode 100644 fuzz/corpora/ct/fe9f6093c7583ad2f0d0336dd20a95b6a203328c create mode 100644 fuzz/corpora/ct/ff165088d85b3982f77c00ec7d26621f58125fe8 create mode 100644 fuzz/corpora/ct/ff9839b26f6d521af44b71704afff1a39ca3d298 create mode 100644 fuzz/corpora/server/000897bbf44d478cea77eef6b5e15303a92fdc35 create mode 100644 fuzz/corpora/server/004fb27dcbc1e3257060a7260cd3dc5c0279a8a9 create mode 100644 fuzz/corpora/server/005a49a2845abf765c4c28e64e1b2b0fad58a7ce create mode 100644 fuzz/corpora/server/00681a682713a2db494a9edc45b795354d24f6ce create mode 100644 fuzz/corpora/server/00856ea7240db5fcb3f3b9878adbd2447a296458 create mode 100644 fuzz/corpora/server/0085b3d61039893d56ec38c177ed2128c9df75af create mode 100644 fuzz/corpora/server/009fc15645bba9e5b17b7fdc594a4779772b3090 create mode 100644 fuzz/corpora/server/00a24364a797ec0e4c2e7370219e8a4aa80b2d3a create mode 100644 fuzz/corpora/server/00f756159b9650d1a6f68b555d2039181949d222 create mode 100644 fuzz/corpora/server/00f9505391ab252c7c661d6cdacdc07dcb4ec8b3 create mode 100644 fuzz/corpora/server/014957135137bf2794c86a635a49a9edd15cea0c create mode 100644 fuzz/corpora/server/015b46419a761b3936ddb63a48d7d35e9c0197be create mode 100644 fuzz/corpora/server/0176bb7a655d2707fc7e93a6647e8156709e4ff5 create mode 100644 fuzz/corpora/server/01924e0e653a38d98e76302c3ec993b0a82e1bbf create mode 100644 fuzz/corpora/server/01aac1871677db2fb69bd91ca173c4856681d995 create mode 100644 fuzz/corpora/server/01c0b72eeb3f5768b28c588e1f10e86f03032b59 create mode 100644 fuzz/corpora/server/01c0fb4145a695b300fad4ce8c830934004f2f54 create mode 100644 fuzz/corpora/server/01d1381dfa10fa7588230b25c3c534e367c5d00f create mode 100644 fuzz/corpora/server/01f849c75aa2ad6bdd1922710b532fb2f1496a8f create mode 100644 fuzz/corpora/server/01fd4b62dcac207fb4ea80db066245d7cea923b8 create mode 100644 fuzz/corpora/server/01fdddb4ba8ca244d1b3cb3b8d870e1e1c0908e0 create mode 100644 fuzz/corpora/server/0202590850f041b6beb77789233a2f307fdb4fa9 create mode 100644 fuzz/corpora/server/0209c7263aa9b80622fcb4493c9ae0e99883522a create mode 100644 fuzz/corpora/server/021297b3a484a195bb1d9608bbe498cb5884be2d create mode 100644 fuzz/corpora/server/021b183b0601c43d51091030ab1482899e8d65a6 create mode 100644 fuzz/corpora/server/022c3f1509b9f79c6451d008038923d86428285c create mode 100644 fuzz/corpora/server/023062490b353c23edba93cc92692a0213b1eb38 create mode 100644 fuzz/corpora/server/0230eeabf3e421ca8eb40c91d65a013b20e8eaaa create mode 100644 fuzz/corpora/server/023d645cb49f18fea912101dff5dc0fc1758cae5 create mode 100644 fuzz/corpora/server/029f8f1afb59f75306ed75e05944798f9f6e1f4d create mode 100644 fuzz/corpora/server/02c1b7d700fd6e8365512abe1530506e2f9db93b create mode 100644 fuzz/corpora/server/02f8aef120346f384a73542cf3e5907e075ac00c create mode 100644 fuzz/corpora/server/0319c260bb3ec57345d1ecfabe92ca03a34c807f create mode 100644 fuzz/corpora/server/03465456e78a38e325f3cf7ec4d27218ce9b7a4e create mode 100644 fuzz/corpora/server/035b4005780ebba29c02813f4dee141814f20318 create mode 100644 fuzz/corpora/server/035fe5bb6155490b80e597dfe3a79bb694db18c5 create mode 100644 fuzz/corpora/server/0363c3a3781e907b60af34043de63fedf2922c85 create mode 100644 fuzz/corpora/server/0381ad610c919d10672711b28abed1bb616e2988 create mode 100644 fuzz/corpora/server/038e353731c4108517f8858558bac29cb08bf1b7 create mode 100644 fuzz/corpora/server/0394a9bd277b548aa4dde8a2037135d88c9a9d0d create mode 100644 fuzz/corpora/server/03a77109a7a3801d05db1100d0e8fdb09066dd27 create mode 100644 fuzz/corpora/server/03b6573c37a3605e03e6f7cec232402233213951 create mode 100644 fuzz/corpora/server/03c6969388d4a376a822781b1e17df57cf765399 create mode 100644 fuzz/corpora/server/03d872c1a03fb7b3aaeba98b9a08ed69ff350760 create mode 100644 fuzz/corpora/server/03f1a0730a714fdc569ea1370d34a81a3a87c668 create mode 100644 fuzz/corpora/server/04031707454e42255d42c752bcdbd6da489ba0d8 create mode 100644 fuzz/corpora/server/04330ab9f9696205605d6a2cf6824f1e5ae7c64a create mode 100644 fuzz/corpora/server/04568c03752539ac72f17fe06a279c5889589b9a create mode 100644 fuzz/corpora/server/045f850b347d11b294b4913a0874948f35f31b60 create mode 100644 fuzz/corpora/server/048c63dcc3fe44ef099a686da5a3e8bab63a3d32 create mode 100644 fuzz/corpora/server/049d6a47b33cc99a5e8e3f8c6d068e8e9d25c521 create mode 100644 fuzz/corpora/server/04c5f28628719c95e57e7a7341822f26e2c6bfa9 create mode 100644 fuzz/corpora/server/04cab5727c799126fd0e52eea6f1bc12f3be862c create mode 100644 fuzz/corpora/server/04dc92f0203a8b7552dc1c0577b6160411c4ef48 create mode 100644 fuzz/corpora/server/051a703f308f1c48672bfbdaf0708eb57100732f create mode 100644 fuzz/corpora/server/05326322213559f3882bcf0487da8ed02fbf3590 create mode 100644 fuzz/corpora/server/054ed7133d19dcc4c562d1b8605b126c7ecf438b create mode 100644 fuzz/corpora/server/0553d9cff47048ef2cf1b8cbf505351281ecad5a create mode 100644 fuzz/corpora/server/05620dd58356036c3e680f1756eb8d3e5005047f create mode 100644 fuzz/corpora/server/056eeffc212ba7b0378142ca7335819ba1ef48ee create mode 100644 fuzz/corpora/server/0575f22e8c3e668ebdb5ce444f3905c52f82a051 create mode 100644 fuzz/corpora/server/0598f4753bfec3bb892d2414a90808d55cdbdcc4 create mode 100644 fuzz/corpora/server/05d2cef6c6bf665a43ea922cb0b220edb46e0728 create mode 100644 fuzz/corpora/server/05d3ae2b9e51ffe380a2dbce8cd03c6c334770bc create mode 100644 fuzz/corpora/server/05ec67b88922a5ca7952d720480889839c17476e create mode 100644 fuzz/corpora/server/060107eb589d77320bdda833ddd06fd2f61e53e3 create mode 100644 fuzz/corpora/server/060c4c9012dc6c5d696b6df1558e915ff57c641a create mode 100644 fuzz/corpora/server/061cc2a40f965e8f039a58e3812844bb47756654 create mode 100644 fuzz/corpora/server/063ea1d1d4d25160c4c062e9f9138407514956d7 create mode 100644 fuzz/corpora/server/066b3264b0af3a527d828d0598d82923107e2da6 create mode 100644 fuzz/corpora/server/06ae014c0aa305e2534f416c57d852547123b4a8 create mode 100644 fuzz/corpora/server/06c1ed43bcfca07621165d6f64d46e2e49d952eb create mode 100644 fuzz/corpora/server/06c6d9449845e55a0557fcedc666993e1947bb29 create mode 100644 fuzz/corpora/server/0725e5129d0b08b0b0eece032b6a2053f6bfb55f create mode 100644 fuzz/corpora/server/0726625c79b808b7e7f372e2478c126a1e66cc5c create mode 100644 fuzz/corpora/server/07874d3f7cc70df3c30b965d5f08e88d0909886c create mode 100644 fuzz/corpora/server/07c655d3ae178f9ebb0cffdda25e8ccfe115b017 create mode 100644 fuzz/corpora/server/07ff7e64ba59095f560f07dfdb43008cbe501239 create mode 100644 fuzz/corpora/server/081640e77b166322e79ce3bd40da5795085b3510 create mode 100644 fuzz/corpora/server/081eba6334d28b364d3b9e958d304774dd3b2848 create mode 100644 fuzz/corpora/server/0832c65aa4e83e84d5bd312414049b256b747fd2 create mode 100644 fuzz/corpora/server/085073970b8dee49eed601d618a2ea9b144dddb8 create mode 100644 fuzz/corpora/server/0853ad672ba553a18db1afeabb249f1121b13293 create mode 100644 fuzz/corpora/server/086751326f6efd518dbe8bb71ed8327e20f7abb4 create mode 100644 fuzz/corpora/server/0876ea42819b47cb84baf2b9df45c032e8956f9a create mode 100644 fuzz/corpora/server/08b1b1a0e52acc8f7188fbf540840ffbda58860c create mode 100644 fuzz/corpora/server/08c52f0a788d28a4b166ffa74f265f2f3225aff9 create mode 100644 fuzz/corpora/server/08d08ac15a1aab661dcf5144d5fde5af73b36714 create mode 100644 fuzz/corpora/server/0948ada8eb57a986cc5bd174d8d5beda5e77921c create mode 100644 fuzz/corpora/server/097374f7aa164e60fda16bbfb2993b29ffa1f099 create mode 100644 fuzz/corpora/server/098aef10c5bf07c1ea4e762022887d306f89fedb create mode 100644 fuzz/corpora/server/099cc3b2c37aff54550b967e43e719b769750baa create mode 100644 fuzz/corpora/server/09c83ce62b64fc28aefa29be068f24e9394a8f23 create mode 100644 fuzz/corpora/server/09c98c7c95fa336c07308aabda616f4c502eb5fe create mode 100644 fuzz/corpora/server/09e06a56c6071f1ff521f1b1e72ac551067f6282 create mode 100644 fuzz/corpora/server/09ea64b59ba71cc98554127d64d4db37be75223e create mode 100644 fuzz/corpora/server/0a1c1790c8d2c70672bd0e45fb15c12f0c19f443 create mode 100644 fuzz/corpora/server/0a1cd92ce644a33f73877a67272018c0254f853a create mode 100644 fuzz/corpora/server/0a419087480b3c842bb472b7c95b20a31e126edd create mode 100644 fuzz/corpora/server/0a41a3ecba43a7d6772f9984ef46bad2fd9827e2 create mode 100644 fuzz/corpora/server/0a4e5a733e17fdba0c7e2ebc32e091b3bfc0bed9 create mode 100644 fuzz/corpora/server/0a5faa2c24341ce916040487e01c9f90b670bd66 create mode 100644 fuzz/corpora/server/0a60ef34698bf70c21e56a0f7c7cdf094714d130 create mode 100644 fuzz/corpora/server/0ad51e37ef443887c5541f85b579832d1bbd286c create mode 100644 fuzz/corpora/server/0ad6bbf63c2a6a84624f5e6656df0115265bf0ab create mode 100644 fuzz/corpora/server/0ad73ffc0284424139b424850a2e7029b9a30d1a create mode 100644 fuzz/corpora/server/0ada269931005179483172b321c69b972d7bd8f4 create mode 100644 fuzz/corpora/server/0ade953c2e85d723eff41b56c649a97587560353 create mode 100644 fuzz/corpora/server/0af1a97aa93822cd0f9cf5ae2fa384104b16ff43 create mode 100644 fuzz/corpora/server/0af41d20c5f43eee35f5ef34056a9f9c8f0efffa create mode 100644 fuzz/corpora/server/0afbb113cf3b995eddfceeddc4f209d1b65f2169 create mode 100644 fuzz/corpora/server/0b042472c5ec19f84d8b7280e0f053408a75e1cd create mode 100644 fuzz/corpora/server/0b09d84e797f7338afd021a6fa2c293518e86e82 create mode 100644 fuzz/corpora/server/0b2f38d2c7a9810993da669e2ac10e069a85fdb8 create mode 100644 fuzz/corpora/server/0b35fbd75feec2a5fd26eef7667f465f73c3bb2f create mode 100644 fuzz/corpora/server/0b386912ee54891f35d0e6516f125017b974e4d4 create mode 100644 fuzz/corpora/server/0b4e9ff26993ed460358e28e9a8e9c857355b49b create mode 100644 fuzz/corpora/server/0b78416e48faa5b904c24a3db394542a0a8740be create mode 100644 fuzz/corpora/server/0b96e8fdd6ba0775f43b6a4e48873bacb8526283 create mode 100644 fuzz/corpora/server/0bfcd4548120deea02fde10bbbbb09c9283bd3ab create mode 100644 fuzz/corpora/server/0bff27af59c6456ca763cd27001d1a37f1036bf9 create mode 100644 fuzz/corpora/server/0c3138ca8dfe527fbe1dd5ddedb9383a053351a5 create mode 100644 fuzz/corpora/server/0c4373d2fe3d9a419fffb2c53f46b542bf2affeb create mode 100644 fuzz/corpora/server/0c503bd3777796e4286bdef0e378809dd5fcc815 create mode 100644 fuzz/corpora/server/0c71bd0ccbf52a895057861795fcacb5d2593a09 create mode 100644 fuzz/corpora/server/0c9df2ae306df5c3a521829eac026819b567a0bb create mode 100644 fuzz/corpora/server/0cdffc57871ea1e5cd7f13a54552c4af4b0f2232 create mode 100644 fuzz/corpora/server/0cf3871fe459e6e813af0ceb7a384288e11350f2 create mode 100644 fuzz/corpora/server/0d153a89a2e3ab5eec123b024fa3ad25463050fa create mode 100644 fuzz/corpora/server/0d278dcbcf49d3c739f03eb07a29fdeceb5f76e9 create mode 100644 fuzz/corpora/server/0d29dcef914cb137ab1ea7892a9db8f3ad62a6cb create mode 100644 fuzz/corpora/server/0d64329b0f27532b565e6ff6730642ebbd5e0510 create mode 100644 fuzz/corpora/server/0d6f03179de513be823baa47a6d4444d25711129 create mode 100644 fuzz/corpora/server/0da442755bd83b56b3d0f7a5fb32a1099fafe685 create mode 100644 fuzz/corpora/server/0dd574aeadd3c974f75d402561c48bcbd0bde67e create mode 100644 fuzz/corpora/server/0dddfadf4b8dac8e66a5485c151bf80f3159c577 create mode 100644 fuzz/corpora/server/0de17bc3c972b89923e963b74a0ba18c5f7ee9f7 create mode 100644 fuzz/corpora/server/0de23a5da0a28d52ee70dd55250ef42be0ac212d create mode 100644 fuzz/corpora/server/0deb4ddcf52d233974baa159cc06ccafe1b011fa create mode 100644 fuzz/corpora/server/0e1783ab1dc356faf41cecc602771e38d90d456d create mode 100644 fuzz/corpora/server/0e5124dcf9fef6ca070c1caaae17c046d0fea313 create mode 100644 fuzz/corpora/server/0e5e9f515eec2234899c9fe9bfe8c88c8c148d7e create mode 100644 fuzz/corpora/server/0e69d541e2a586b3e85232d6f400503cfe0aa6d8 create mode 100644 fuzz/corpora/server/0e951166897fe529f91ed71d2f7d0f45afbebb96 create mode 100644 fuzz/corpora/server/0eb92fee7b1186a0a45135abee4facf5eb203905 create mode 100644 fuzz/corpora/server/0ed6d1fe4c491a109c46e2e36d6821630b223bbb create mode 100644 fuzz/corpora/server/0ef660807291566b4ceb80f227b3e1aeec8cd4d4 create mode 100644 fuzz/corpora/server/0f15204cde64fa4780a569097185ddcf5ca48420 create mode 100644 fuzz/corpora/server/0f2599f805f24d1bbf11a52e3886c5e52e8c9d5a create mode 100644 fuzz/corpora/server/0f417b7c411503a44a772855e23a645ee56391d7 create mode 100644 fuzz/corpora/server/0f5a7d887d595f5512d2d89874516c963cedf6c8 create mode 100644 fuzz/corpora/server/0f5d2f743344a281c592fd614ee9bf12f27b8223 create mode 100644 fuzz/corpora/server/0f64124f84494407581053e68db6018c88e9b40f create mode 100644 fuzz/corpora/server/0f7c2b10d386a9c8b855e6ed6eab5e24e2ad6d24 create mode 100644 fuzz/corpora/server/0f7d45acc639eab5f33121a88946cc7f387c1360 create mode 100644 fuzz/corpora/server/0f97ab1e3a09b987b2052750f2b5afe5d68ea1c4 create mode 100644 fuzz/corpora/server/0f9ebf3f826b1cfe322d4e36c4015a8bf2275686 create mode 100644 fuzz/corpora/server/0fc1ac45dc3d4b1f34dec59c30f108720d200375 create mode 100644 fuzz/corpora/server/0fd1e6c7b9d9a1a86fe67f99620e4e25b1926a92 create mode 100644 fuzz/corpora/server/0ffe3359ebaa040d2dd6888eb39995e3ee0bbfb3 create mode 100644 fuzz/corpora/server/10069e93a031baf47dade36a5f8b8e5a020d5053 create mode 100644 fuzz/corpora/server/101156a2c1fdcc4a6fe093968712ff42ae2f588d create mode 100644 fuzz/corpora/server/10190ffa70d1c5662a44098cdf3e8edfb5386c61 create mode 100644 fuzz/corpora/server/103afd7441b1a7f5055f4efbec5309420f9786f5 create mode 100644 fuzz/corpora/server/10525dc3f2bf438f4926c7145dd2e1cb4883f57c create mode 100644 fuzz/corpora/server/106d66a9cbae6158a70832c120cc132988cff8b0 create mode 100644 fuzz/corpora/server/10c2c509fbae0d5d1ead5c4f6dd2702ffea79526 create mode 100644 fuzz/corpora/server/10d5c5438405848dff95056c8b3e93d1ea590e27 create mode 100644 fuzz/corpora/server/10f5f8601c898ce56aff3e74a1e7fb0bc7548244 create mode 100644 fuzz/corpora/server/10fbb0b671bcaa15702201016882a6eb04552d65 create mode 100644 fuzz/corpora/server/11095f314957ca58a3d701318a0acdeee82f42dd create mode 100644 fuzz/corpora/server/113f395456c5c6f4ea2ea4e1b9ed813e99048788 create mode 100644 fuzz/corpora/server/115204f2745ea4371f9fc7c5bc094189b453122e create mode 100644 fuzz/corpora/server/11550fe9066d1a578e7badfd1c3ad8bed7ec170b create mode 100644 fuzz/corpora/server/1178be7bd59681d005d67b017f3f46fd42b5f69b create mode 100644 fuzz/corpora/server/11a76da02edab6abe70f9ed488e6d1d9001eccfe create mode 100644 fuzz/corpora/server/11b4fa7aff9c325ec6e158118e5436bb76a88f59 create mode 100644 fuzz/corpora/server/11b89eb32e8c1c2d13fb4b6c1d49465aa0191e0e create mode 100644 fuzz/corpora/server/11c1bf3e2a24c97b7762d4230ffc35f5fec4f874 create mode 100644 fuzz/corpora/server/11cd3029e163422a56f9549edc2971eb9ba37ace create mode 100644 fuzz/corpora/server/122d85818b76b7deb1bd9398a507eae90d67d25f create mode 100644 fuzz/corpora/server/126d817082d314d00953acb7e7d8c1f1c1afd8f4 create mode 100644 fuzz/corpora/server/12a24af9077f23333a4a0bcc469591e9999bac3a create mode 100644 fuzz/corpora/server/12a82da914d1750d911f3222e16c5d1d69b54d0c create mode 100644 fuzz/corpora/server/12e0d86f54d33aba2ba57e35e107795d5ff44051 create mode 100644 fuzz/corpora/server/130f731f0639f6b90fe9b73297503ab7f4752baf create mode 100644 fuzz/corpora/server/131014a98229dbdf4bdaab80016fdd89091a56d1 create mode 100644 fuzz/corpora/server/131f653cab6f5ce6a1cf3a009b257dafaac80cda create mode 100644 fuzz/corpora/server/132105b24c551fdf962f12797127dd3d596a507c create mode 100644 fuzz/corpora/server/1366f29fbceca81e0d51f5721cf99f8979d473b0 create mode 100644 fuzz/corpora/server/1372a1accaa3ffdfdda9832159d69ca8252e9235 create mode 100644 fuzz/corpora/server/1373d4a9594a26f2ca5126aad00ed630ce03b44c create mode 100644 fuzz/corpora/server/13970f9e47a7507212e486ea71aa29ff91e894a0 create mode 100644 fuzz/corpora/server/13a88940db4677d278b9c02d3dc5c8ff74c70c96 create mode 100644 fuzz/corpora/server/13b8383fc6c383e808965ad05ecb485f12c94b12 create mode 100644 fuzz/corpora/server/141599ed17ac1b7becf13f93d486ee6f07d5f1e3 create mode 100644 fuzz/corpora/server/14281a44f0d5da429672fed8d1b3bbdc1881fc2a create mode 100644 fuzz/corpora/server/14297da7221908e130e0d95330123e876e9f5219 create mode 100644 fuzz/corpora/server/14434db005a69ba022f642e020e92ba705050687 create mode 100644 fuzz/corpora/server/144519d18e4de7b36097580035e81ca8f3187282 create mode 100644 fuzz/corpora/server/1461063ec441d2fa66fbee0faea181e9923cb1ec create mode 100644 fuzz/corpora/server/1467269dffbd5a78e72e49e105b65eaa6fcfc846 create mode 100644 fuzz/corpora/server/146cdf1db678b8e2695d1a3ebc34fad5614ffcc7 create mode 100644 fuzz/corpora/server/1485538e1ec1d9dabe5d0478a5e4efcd7a94a762 create mode 100644 fuzz/corpora/server/14f4d8f452453f62a668783673625086de547711 create mode 100644 fuzz/corpora/server/150f33ccfa77bdabd3e82fd44fe32ef19cdcb93f create mode 100644 fuzz/corpora/server/15239d0092731c030848ceaea6baf753108c36c2 create mode 100644 fuzz/corpora/server/1534236a0deb3cdfa623d6cbcbc3f7f6641ba45b create mode 100644 fuzz/corpora/server/156308c60454458026d2297e9cd804f102d06bf2 create mode 100644 fuzz/corpora/server/15784b8ee7592135834694828b5b85c8cd38d248 create mode 100644 fuzz/corpora/server/159faf99034e12e0213c7927a693fa2646474ed3 create mode 100644 fuzz/corpora/server/15cdbdab3a7971179323e6c42f027db81c773be9 create mode 100644 fuzz/corpora/server/15edc6715c4375589c32d5e3ec0633768f98fa7f create mode 100644 fuzz/corpora/server/15f9ac34432e0b94c651e63da55a69aba4e1ce55 create mode 100644 fuzz/corpora/server/16034893bd12fca4fcd0832b32389c9cec5561ad create mode 100644 fuzz/corpora/server/161108539923c32216bcb8edf01934a03bf199a6 create mode 100644 fuzz/corpora/server/1648add002b016cdf787a834f58209926328b0b9 create mode 100644 fuzz/corpora/server/164e152ce4656376737bf32a9fdd0adb509ff835 create mode 100644 fuzz/corpora/server/1652d9021475579a1649e55b59d60b7da8aa4589 create mode 100644 fuzz/corpora/server/1675def9b1ad11b8256bee5e90ee07b06cfbe4e5 create mode 100644 fuzz/corpora/server/168276948be60a73b94bb2b8b38db4df790e4830 create mode 100644 fuzz/corpora/server/16afdfe0d96be13d46340204ee2c05b9d50626d1 create mode 100644 fuzz/corpora/server/16b35d11cd7a2ec56eec746e59c20e5e20fde78e create mode 100644 fuzz/corpora/server/16b5721e6d736b4e7426860d1925f40d26a858eb create mode 100644 fuzz/corpora/server/16c4d2253e22da4df80959caef5765268ece51e5 create mode 100644 fuzz/corpora/server/16c83742ce01180a71e16b88a2af2200f1abff13 create mode 100644 fuzz/corpora/server/16d3585937a9dd7af867fe1d9f39e79881daa37b create mode 100644 fuzz/corpora/server/16ee934d45660470f9921471d2e6907d7401a0c3 create mode 100644 fuzz/corpora/server/16efd57d181f9a551fab2c1302f4c369fc18923a create mode 100644 fuzz/corpora/server/16f2f573034978ff5f0961a9e00568dd8bb6b643 create mode 100644 fuzz/corpora/server/1718f1cf1b2e7b087fb203f492d5731dadb89d07 create mode 100644 fuzz/corpora/server/17256b2eaacaa9ed544821a67e027c5a5e906dd7 create mode 100644 fuzz/corpora/server/172fb2522b65cd79e3ec968d099346e9527cc651 create mode 100644 fuzz/corpora/server/1738eef9d58483e876e1f4f25e3bce7f04e6c9b2 create mode 100644 fuzz/corpora/server/1749a731879b4d1abb8228383e245d58c950b3b9 create mode 100644 fuzz/corpora/server/17627dbe254fcd8a6abb7e12f58746a2f2e3b4d9 create mode 100644 fuzz/corpora/server/177d869e212af141564463b194006ef0293d7dd8 create mode 100644 fuzz/corpora/server/178459bdef6daf669f1763158ac63f082a9352ce create mode 100644 fuzz/corpora/server/17d258877b1e53d3e9e50d5e904c5c4c81532435 create mode 100644 fuzz/corpora/server/17d468405b9bc14d2d91152a631aab1b5aa9b7b4 create mode 100644 fuzz/corpora/server/17d7bfb691eb62788bb401cf1523dc064e0435d0 create mode 100644 fuzz/corpora/server/17e4c782ca52754991a34c8ed84db4895797b86a create mode 100644 fuzz/corpora/server/17e75a3ed5c29e533e84c3ff9b363fb24f1ab71c create mode 100644 fuzz/corpora/server/17f252702a2aef6e644af3247127788d0aca7166 create mode 100644 fuzz/corpora/server/17faf4b3ceca3e9266c1ad655929559ada84e08b create mode 100644 fuzz/corpora/server/1824c8359f0ff9c84aa81b053f0cbcb16a3a7a9d create mode 100644 fuzz/corpora/server/182b76b53764186017e5a4859364c5115fb8959e create mode 100644 fuzz/corpora/server/18342e0d19b23655494a28539079074b0001efbf create mode 100644 fuzz/corpora/server/18344e82d2e2b30d995c8e4e51b35a3b5c5981dc create mode 100644 fuzz/corpora/server/1844cff325b987f42821c5a699b9bd8d515e863e create mode 100644 fuzz/corpora/server/186ec3b8902ceac8ecb49b29c8789b79a36390d8 create mode 100644 fuzz/corpora/server/1872106087b17faefac5ed304855e09f93c37060 create mode 100644 fuzz/corpora/server/1899f78b55d678f1ece38184cc2f373ecb1dfbaa create mode 100644 fuzz/corpora/server/18a17c7d7f9ec43fa943b5c4d852d6158247835a create mode 100644 fuzz/corpora/server/18af4f321cc5b861e8563f5533df45cd4f1bf41e create mode 100644 fuzz/corpora/server/18b0e2908414412d967dc2be534f8b76c7d99f69 create mode 100644 fuzz/corpora/server/18bf4468a14ab990302da9c02243d29f5f161ee0 create mode 100644 fuzz/corpora/server/18ccbfd083bea582f3016f8833ee9c6f382941e4 create mode 100644 fuzz/corpora/server/18dfc7eecea005bb1563b81c8a3a2707673e25e3 create mode 100644 fuzz/corpora/server/18f3c6d016ed1b1249837bb91131a5b582778d37 create mode 100644 fuzz/corpora/server/190a0a6ebfb8e6783017c453a82052ac6a46d982 create mode 100644 fuzz/corpora/server/192e8d1ba3156a5db28bd7d635d794cafbe445c5 create mode 100644 fuzz/corpora/server/19361f9531939df5c022340ea3b0d47011b6abfe create mode 100644 fuzz/corpora/server/19437fe183b0e9befd92d2383fc3de7c5108e0b7 create mode 100644 fuzz/corpora/server/19663d80f88f27b2b24a0c8bddc59586bc90b679 create mode 100644 fuzz/corpora/server/196be91dd20bbdb3db9a8392f187e6b452b5dc76 create mode 100644 fuzz/corpora/server/19a0b325dfb10ad4d3671b9dc636f60289837f3f create mode 100644 fuzz/corpora/server/19a9d1759088a65fe77fc071820723201eeed43f create mode 100644 fuzz/corpora/server/19b2ee72881dbe9a3e037167207db7d5b0f5b90e create mode 100644 fuzz/corpora/server/19d9cb7153a4534f7d9d4d2c1e122bcabf8152c6 create mode 100644 fuzz/corpora/server/19df3b571a7344358fb2b0a8839ec46903f4cf19 create mode 100644 fuzz/corpora/server/19e16d3947e987333c98ecf5b2f9fcff4fcdfeaf create mode 100644 fuzz/corpora/server/1a0f3db8748bf720c3a07bc518ab1c7e0c32f4d2 create mode 100644 fuzz/corpora/server/1a31415ce7a037a416bf9f46b9e4fe0ef87bc014 create mode 100644 fuzz/corpora/server/1a3daa522995bf82c18c00e3ce3dcbc1fb54e3d9 create mode 100644 fuzz/corpora/server/1a5f7ef46846004ecf3766251d7a7113378b9ebf create mode 100644 fuzz/corpora/server/1ab9833ee8e139540a381aa0e3823eac9bf8480b create mode 100644 fuzz/corpora/server/1ac68ee5df89ba9124eac4099e0650f7e3634fb8 create mode 100644 fuzz/corpora/server/1af138cf926b043a2c8bc021a826b815030e8835 create mode 100644 fuzz/corpora/server/1b0b6715428b4bd118e5cf5cf6ab3bc44274a310 create mode 100644 fuzz/corpora/server/1b126ca1bb5e6f706e6c7e0f5fc0b376b4a8829d create mode 100644 fuzz/corpora/server/1b367e21d6fcb30cf7549992711b39fa0d817968 create mode 100644 fuzz/corpora/server/1b71ae28543ee9996eb240c06fa8c7b9a009a6b6 create mode 100644 fuzz/corpora/server/1b74978def0ee4234a52ee7ad4bde6e6b58441fb create mode 100644 fuzz/corpora/server/1b8e81eb26452582f63af5bf25eb6097c722f844 create mode 100644 fuzz/corpora/server/1b91a486155c64f02e0a327716356914550ab747 create mode 100644 fuzz/corpora/server/1b924ee41d1e570789812d313a6695299e54d0b7 create mode 100644 fuzz/corpora/server/1b99499ce03e678881882185df42a6c724beeb82 create mode 100644 fuzz/corpora/server/1bbc97d9277c4cefd088dc54f71685107c1c9605 create mode 100644 fuzz/corpora/server/1be7d9d2ab40c77f34f8f2eba319251f9ee60132 create mode 100644 fuzz/corpora/server/1bfab29268594ab7857b6e65d0c60eaa4bafbc16 create mode 100644 fuzz/corpora/server/1c07e4aa792297cf81ae268777d476b256eb3b30 create mode 100644 fuzz/corpora/server/1c14b7d38d1d2754d44671a2eee0892e868aa1ca create mode 100644 fuzz/corpora/server/1c9d0d54e3c1738a076824d9bf90c71f452787f4 create mode 100644 fuzz/corpora/server/1cf2c0fd428e5588412d0642bb0598936f6cc3ac create mode 100644 fuzz/corpora/server/1cf531077f2e2703f5c9125bb8f5555581dea143 create mode 100644 fuzz/corpora/server/1d455ffd67af33770ec25179695af8a2797315eb create mode 100644 fuzz/corpora/server/1d6858f51d10634d1d0edc7214aa287c82d8507c create mode 100644 fuzz/corpora/server/1da87941c2ed4dd72d51b116a8b82297a9f2710d create mode 100644 fuzz/corpora/server/1db30ff0f3706792b7a62624bbb52e4ad5cfe697 create mode 100644 fuzz/corpora/server/1dc039ced79ef6af60b73a8471f844662f80e75e create mode 100644 fuzz/corpora/server/1dd405e88a9edb8a59641b178d87b16227c1fe31 create mode 100644 fuzz/corpora/server/1ddba4ed829811fb69cc881b546107e50df40e9e create mode 100644 fuzz/corpora/server/1dde63ef484651373b4fb79fd38933c05ba7d15c create mode 100644 fuzz/corpora/server/1e1dc0a475cf613ae2375fa24c7f934deb5caf5b create mode 100644 fuzz/corpora/server/1e266eab22c0398c78575a176fbbdfe0252a8866 create mode 100644 fuzz/corpora/server/1e3988d9e64cbba0828f50386b6e20760a0bf2e8 create mode 100644 fuzz/corpora/server/1ea4f0c474c1a44420a485a6ae7d487af2df294e create mode 100644 fuzz/corpora/server/1ead61c2142176db07bb152f11cbed9a8cf09f4b create mode 100644 fuzz/corpora/server/1ec38c581d0f996ddf75550bffe8ade2e109deb6 create mode 100644 fuzz/corpora/server/1f7503fb816c62cdaf537bdb590df43493d144ff create mode 100644 fuzz/corpora/server/1f9577d8ece0b1ceb11122685337c4e0b6e04347 create mode 100644 fuzz/corpora/server/1fb596372be59afc10a35244dc5fb4e0ef97f52a create mode 100644 fuzz/corpora/server/1fd7a432be51aae6cc82c6bde1d15c4c0ac59895 create mode 100644 fuzz/corpora/server/1fe155f047ef5f7237565bb647db8f3dcea20f48 create mode 100644 fuzz/corpora/server/2036f3471e7756c10b90abc3d11e70080dd0ed40 create mode 100644 fuzz/corpora/server/207e08c3dc6f2f07598eb38e0f1bf1b4010c6b37 create mode 100644 fuzz/corpora/server/208c8d56149ca004ec453a23a88ce951ec1dc2a3 create mode 100644 fuzz/corpora/server/20a0be5d20c074d872d2b74959426c80c06f726d create mode 100644 fuzz/corpora/server/20c7e63030320aefd5fc9eda52457862a64f4137 create mode 100644 fuzz/corpora/server/20e4f806084aca496cef57691bacc83c0b20e7ac create mode 100644 fuzz/corpora/server/212d82008f84fd85a0c9397baf55d75078483db2 create mode 100644 fuzz/corpora/server/213b0814cfd19ddd22949fa615e41b442a6c8bf8 create mode 100644 fuzz/corpora/server/2145876d9fbe9ca1db9f8187f39ed0b1d6edb125 create mode 100644 fuzz/corpora/server/21529bf0e3d5bdd29fd15c4e5c5f5c9b1925ad2f create mode 100644 fuzz/corpora/server/2180a0be1550d75f4739c870daa948551f217cd5 create mode 100644 fuzz/corpora/server/2195fcd6e86fd51d85a2d007d0814e507d0c13a1 create mode 100644 fuzz/corpora/server/21a14ac884547e057d2c849282595b0bfe2eb96d create mode 100644 fuzz/corpora/server/21a6978a141c1b82ce5f4ad1743de3129c8217a4 create mode 100644 fuzz/corpora/server/21bdc199a6efe248e9f05aa5ad54e15c142305bb create mode 100644 fuzz/corpora/server/21c55e8411149769bc5b591f5abadfc533d40a83 create mode 100644 fuzz/corpora/server/21ca313626e59a32703e809d87cf264afdcf4c1f create mode 100644 fuzz/corpora/server/21d25de59e617b1a6c3e6947e42c94db7929ce1f create mode 100644 fuzz/corpora/server/21f2ff9fba7c5ddfebc428d5a0bd210b1e71c7fe create mode 100644 fuzz/corpora/server/223e96733ed88a446c9c55a3050c5f5cf3d69f97 create mode 100644 fuzz/corpora/server/22662261bb659b020dc8b1603bbb9b8d859a8bfc create mode 100644 fuzz/corpora/server/226975e38c8c265f4625ab628641eecfb931409d create mode 100644 fuzz/corpora/server/22a658e646fbb558dd84c46c31198924fc9bc7cd create mode 100644 fuzz/corpora/server/22ce0e9e670bb821fc83e447afe6068733fcd7e3 create mode 100644 fuzz/corpora/server/22ee4381cac6784334d67e7a24dc537137b5ade3 create mode 100644 fuzz/corpora/server/22f775b50d5d6f2a1f349b6b606b9190c0ed9c6e create mode 100644 fuzz/corpora/server/2315e6e33df5370ecc47befee789fe9c8031a01e create mode 100644 fuzz/corpora/server/2316ce40a2c6e124c5c3ae67dd171b929c61d62b create mode 100644 fuzz/corpora/server/23212c54ad2ebe1044846a598e9c9442d27ab01d create mode 100644 fuzz/corpora/server/2339b4252d411101501d5763766a06ea47bfad25 create mode 100644 fuzz/corpora/server/2360acda4460dc2b909e50912b58850ce4af6beb create mode 100644 fuzz/corpora/server/236a95e0fd46c27b5cc867463251485d94eee1b5 create mode 100644 fuzz/corpora/server/237695622ad5616eb6f03889d632f458328eea21 create mode 100644 fuzz/corpora/server/2381627d347d2fadc2b200528c11462d97c905a1 create mode 100644 fuzz/corpora/server/23a5a7048ade590fe35b753659327e8d52d060c8 create mode 100644 fuzz/corpora/server/23a736309194b13e41cc25255e69c99c2a51175c create mode 100644 fuzz/corpora/server/23bda2d044b2d29edde3377bc6eb9ddec069bf5e create mode 100644 fuzz/corpora/server/2407f04e824a2145941f8327ba8dd62379f71bb3 create mode 100644 fuzz/corpora/server/24922bbb0fc7f7152dd3fcdfbb96c11b50734aae create mode 100644 fuzz/corpora/server/249f1c80996d2fafd9e7f6e06157d12265153892 create mode 100644 fuzz/corpora/server/24b64c359af29edf0126d7407a99c8d791995af3 create mode 100644 fuzz/corpora/server/24bc4d1c6b7bac8562a720c1c04ef48b139dd488 create mode 100644 fuzz/corpora/server/24e9759b10dce2788989cbc449a669625b2ad253 create mode 100644 fuzz/corpora/server/24ff6ce8a0fedf5117d452eb8ea7e51941daed52 create mode 100644 fuzz/corpora/server/25332fb069f39e7f2f26d4666ed515463294bb50 create mode 100644 fuzz/corpora/server/254f03484e674534ba3415a595196c9834523ce3 create mode 100644 fuzz/corpora/server/2558b5fdfc371c6648b4e3b91f96a19b9744d746 create mode 100644 fuzz/corpora/server/2573c24d45164b47fc0356058280ef82fcfbac3c create mode 100644 fuzz/corpora/server/257def388c37170fe83cd7c0a184dbe32f4bd5c9 create mode 100644 fuzz/corpora/server/25882c4d9b1f759bb15694fd8ca27d778aa79384 create mode 100644 fuzz/corpora/server/25c2a35b744cb2c03e14b65c2e73ead5a4f42f2b create mode 100644 fuzz/corpora/server/25e4740ff28f207f5490fc0f17f75183b065b0df create mode 100644 fuzz/corpora/server/2607f168ee80c7508878c6823d6c42a3db170b92 create mode 100644 fuzz/corpora/server/261952a046a23903f574119aae69693808b4e794 create mode 100644 fuzz/corpora/server/2628ec1159b7ffefe48415e8ab6954bb8e85da94 create mode 100644 fuzz/corpora/server/264767bcc46b6c2fcd9294aecc93a70db90c48a4 create mode 100644 fuzz/corpora/server/264fd8e3a276eb6e85a0ad7e2b0e2f4e5560b674 create mode 100644 fuzz/corpora/server/2654a515c5b165a10ba9a976d84c9b70be42d400 create mode 100644 fuzz/corpora/server/267068aea426c8f00362e199f1a6a5b076017020 create mode 100644 fuzz/corpora/server/26dec11734de87c8569d9b10f609c69c7b6778d6 create mode 100644 fuzz/corpora/server/26fbff69431a6e22b577baa9990a867dc3cc7cad create mode 100644 fuzz/corpora/server/26ffc2425b1d57ce2f6695cb8072ec36e4c24e69 create mode 100644 fuzz/corpora/server/270d6ee0a1671c64a7f657900b90b1ffa7e3d0f9 create mode 100644 fuzz/corpora/server/272ea52b3beb2743066983c2411b8a9370612c4c create mode 100644 fuzz/corpora/server/273f1331cddfb3d2ab413532c8c171037ddf294a create mode 100644 fuzz/corpora/server/274df77a87e74f64358a5e0baec1ad5ad2d1bbdc create mode 100644 fuzz/corpora/server/27500511758091ce9a6d1228b4d5d43cb05e2920 create mode 100644 fuzz/corpora/server/2772093a386da9a17e666e2bd56f0e57ecbeba4b create mode 100644 fuzz/corpora/server/277a951632d939639b24c2a3221e93920c2e832d create mode 100644 fuzz/corpora/server/277f8461dcec061d79119e5d480270267ed3a0fb create mode 100644 fuzz/corpora/server/279de0ace3d012e83132356acda72cae27937858 create mode 100644 fuzz/corpora/server/279fac89f0f2c18a3ba01ccc15eafab36fff77ae create mode 100644 fuzz/corpora/server/27d4a251ac7f27ac21fc6b5bf836393d755c077f create mode 100644 fuzz/corpora/server/280041ed3c5a8cbbdb55ad292ed46aff4aababd6 create mode 100644 fuzz/corpora/server/287222bca649213efb150f19637454d44a215b1e create mode 100644 fuzz/corpora/server/288fa5046eea2cb81e22b8a151235ece6261ba24 create mode 100644 fuzz/corpora/server/28c45c05666ff98f2d0252cb1302417f42b76013 create mode 100644 fuzz/corpora/server/28df19d05a420f1cd41141b79c455da1f9ab107e create mode 100644 fuzz/corpora/server/28e1af10aeba1fa60b0e7781322f9154dbe11b1a create mode 100644 fuzz/corpora/server/28e53e9ac2d7b5725e950c1d4c64085f05aa4a50 create mode 100644 fuzz/corpora/server/28fa3c67202337e4e1da703c55aec984764e25a4 create mode 100644 fuzz/corpora/server/29183dc8c1ac8a87a656b9daf1cc6a1668abf72c create mode 100644 fuzz/corpora/server/292ecf89af184dad3e6c2e3f7b0f097ffbb2ebaa create mode 100644 fuzz/corpora/server/294c511a5e89c67184a5f4641e81d3a63ddcead6 create mode 100644 fuzz/corpora/server/297a702b90c3f04c215fd0eff12fd48d619c0cd5 create mode 100644 fuzz/corpora/server/29c4b74009247bffe0bf4606f80652364961a42c create mode 100644 fuzz/corpora/server/2a03b92f73140e1990b9f3046816fafd8152d3a9 create mode 100644 fuzz/corpora/server/2a09de73eaa2ef9cbe42ed6225a9cf07a48fd764 create mode 100644 fuzz/corpora/server/2a2454130aa228b8c9cf1c76e1a067ada4a787f3 create mode 100644 fuzz/corpora/server/2a28d213575726f7f9053301a597e1cce49b4591 create mode 100644 fuzz/corpora/server/2a63933d220b2162053ea54e22302a38029b7129 create mode 100644 fuzz/corpora/server/2a78fa4a8913b0dd254467657f4ed1e46d7c83a5 create mode 100644 fuzz/corpora/server/2a9709da70c5d5642c982d2b35848a735f35d028 create mode 100644 fuzz/corpora/server/2a9ff6b50508b447482fd12c89af74c4815fa0dd create mode 100644 fuzz/corpora/server/2ac0ad87f1ab4987f4f9da2e7f2cee1f4bf7ef5d create mode 100644 fuzz/corpora/server/2ae8ac5962e2b565b7c83585c561e40a1d7c87ca create mode 100644 fuzz/corpora/server/2b102e06c7049efa8027f9c16ce2c6002e9d2f0e create mode 100644 fuzz/corpora/server/2b1dcda47a9d6f9a88c396128648c25ae8fda7ef create mode 100644 fuzz/corpora/server/2b2ee3dd2ffabe041e2c9cf0053d3facfcdd11df create mode 100644 fuzz/corpora/server/2b3191bb0b6b197b5e05b87d8e030bfaf3ac60e9 create mode 100644 fuzz/corpora/server/2b50c40cbd87d2ad3f1bec7d3a275e15ee57b09a create mode 100644 fuzz/corpora/server/2b593919fa656a2fbe25e3a83b292e4b2c921415 create mode 100644 fuzz/corpora/server/2b6700e38a9f2588dd7dcabac066a947ded11e7d create mode 100644 fuzz/corpora/server/2b8e14520e3b6200abd4d22f2d1742f7f9f22847 create mode 100644 fuzz/corpora/server/2bad1b591678506499ec633b47511be15f2f634d create mode 100644 fuzz/corpora/server/2bc06b0bf5837261b9cb353ece74f8f896719a6c create mode 100644 fuzz/corpora/server/2bc87eeb6f77ca1a77fd08e836ca7ac4254719d6 create mode 100644 fuzz/corpora/server/2bcefa1aa4e9d604ef39354ae5b12f3fb9e3b3f4 create mode 100644 fuzz/corpora/server/2bcf4a619e8f9e750a0e6147506a5096784222f0 create mode 100644 fuzz/corpora/server/2bfbd2f4710d4d3546c7d8bd20a3c6df32207866 create mode 100644 fuzz/corpora/server/2c21de2fcd3cf0f88372e90aad339bea79e0f218 create mode 100644 fuzz/corpora/server/2c2c58a8320fbb504bd9ae737b4afc40771b4e1d create mode 100644 fuzz/corpora/server/2c4f05c06ecaf05ffe529f389586c3b71b48cc76 create mode 100644 fuzz/corpora/server/2c808e3ef8da6d1820f5e0ac59f64f95390c1428 create mode 100644 fuzz/corpora/server/2cbe0f83e6ed9165e3f16e1a7d79598134fb5c8d create mode 100644 fuzz/corpora/server/2cd0c20aeefeef4ec624de180bd19d14f4306862 create mode 100644 fuzz/corpora/server/2cdc404b0281445e4683640f03539e593406f07e create mode 100644 fuzz/corpora/server/2cec7854f831d72e2463508b8d084b3bd206d4a2 create mode 100644 fuzz/corpora/server/2d2dc33db0e0596dd9ace25ed0f6bbe44379561e create mode 100644 fuzz/corpora/server/2d4c01d57981d60c3c3a82e4c70fc0795546cc48 create mode 100644 fuzz/corpora/server/2d4dd84245e7feff6e7ed96d3d0bb01a627fcce2 create mode 100644 fuzz/corpora/server/2dcba900b73aa06952d2bae517d6a203b3d100fd create mode 100644 fuzz/corpora/server/2dcd16c64bd4a6b9abdfd95a468899068e874333 create mode 100644 fuzz/corpora/server/2ddcebc5e0e1a5ca76c35e4ce789a5e116450e0d create mode 100644 fuzz/corpora/server/2de3d69d3e3a93ac20ad1de7c71ede05c83fa195 create mode 100644 fuzz/corpora/server/2dee5c18020dad4ea836996007b4c42c333e73d0 create mode 100644 fuzz/corpora/server/2e0eb5aaed05a045fa8f69584de4f456936097da create mode 100644 fuzz/corpora/server/2e5393fde44072a4c90c94f0d35192e817dcd8a4 create mode 100644 fuzz/corpora/server/2e77d3f67eeb8e4aa855a1de50f4cddbc3e135b5 create mode 100644 fuzz/corpora/server/2e95fc3c1d8f946331d78f80612d74c0b37cf96a create mode 100644 fuzz/corpora/server/2ed1ee87c3d810ac8051f3d7019a7705635af924 create mode 100644 fuzz/corpora/server/2ed5869f32bf8534f02756fb6e9b47cfb7a25d8e create mode 100644 fuzz/corpora/server/2edbc39e1e9cf6c6f429ed02558e195b97851bf0 create mode 100644 fuzz/corpora/server/2edecdac591830020963247fed49f092110a2fde create mode 100644 fuzz/corpora/server/2efa7e9040720acb6ec285038e7676ee6bd3a584 create mode 100644 fuzz/corpora/server/2efb02aad1e209ca6f3e74e688e98f77ebeb0ecd create mode 100644 fuzz/corpora/server/2f23a5195d8a8aee718c57672fa41b061a084e66 create mode 100644 fuzz/corpora/server/2f4233cc67b870e10607528d41d38294c5b46389 create mode 100644 fuzz/corpora/server/2f6a1994dcc3bce62ec605fb81d7fe88c4114710 create mode 100644 fuzz/corpora/server/2f765876b13175151be2b1c571a511a1d530132f create mode 100644 fuzz/corpora/server/2f8b59019850f373a7fd0408625a4fc6e2d93d72 create mode 100644 fuzz/corpora/server/2f8f9dbd80a49822d44cb6c254acca7141527e56 create mode 100644 fuzz/corpora/server/2fc831ee41a636885c50c83815ca17bb75f1fc6f create mode 100644 fuzz/corpora/server/2fca6028c2fb928cd2b8b5409b46ef7c3ec26944 create mode 100644 fuzz/corpora/server/2fd9ff1ac00604840ef95149d992022640ae9504 create mode 100644 fuzz/corpora/server/303d9ae910cfd3396a93a1523dd715cb4fe138b8 create mode 100644 fuzz/corpora/server/3044dcfbab9e685d6a588548bf9e6e35ab8bdebb create mode 100644 fuzz/corpora/server/305ecad678a316577e782c73579b9deea7747485 create mode 100644 fuzz/corpora/server/306ff59073f311468688e035d099a902ec282598 create mode 100644 fuzz/corpora/server/30bf30fc0203797e0fe8dde67729e56f16d8bc33 create mode 100644 fuzz/corpora/server/30c2663b39519e5182473b328d81fa4b71e6f6da create mode 100644 fuzz/corpora/server/30f1ae3b7942334d7cc3e4030de172b698b26a86 create mode 100644 fuzz/corpora/server/30fd50653505c5db76d75ee5a9f8fc51241fa18f create mode 100644 fuzz/corpora/server/3111f9432cf1196f613c32501cef421001926e69 create mode 100644 fuzz/corpora/server/313ab54861e949c3e1285220e4b6948ba30cd44a create mode 100644 fuzz/corpora/server/314a5f76678c61eb745790276497cbf9e4e726b7 create mode 100644 fuzz/corpora/server/314ad17f6364935763a2e1ae09a9530844e457a9 create mode 100644 fuzz/corpora/server/3157a9f3607891849247e8b562f0e59efdb55a53 create mode 100644 fuzz/corpora/server/31688d47fb64a7ad445a0e87354ece098829e4d7 create mode 100644 fuzz/corpora/server/317b4d773e36064a490ba3e93e12ac513f687b56 create mode 100644 fuzz/corpora/server/317cf61d2175ee843a6a5aa8776058abfe9d9eea create mode 100644 fuzz/corpora/server/319181546795f8278147275872b761ca6657d70d create mode 100644 fuzz/corpora/server/31b4b3fefce4c715d41fc94eb55143e233353c8e create mode 100644 fuzz/corpora/server/31bde4dccedc4a497689b81892b7406d4abca30a create mode 100644 fuzz/corpora/server/31f4da4e556d78a48030418e42dcb4ba0e6e067c create mode 100644 fuzz/corpora/server/31fe4fc2e7d55c80c165989f5852719f0ff84d4b create mode 100644 fuzz/corpora/server/321181da35598077e3774d76cff1ff64b18d0068 create mode 100644 fuzz/corpora/server/322c7930a22bc87b92ce7fde3b95eb760e56fdbf create mode 100644 fuzz/corpora/server/32343ad93005dd18497ad1398576f12798902465 create mode 100644 fuzz/corpora/server/323da2f0ea9f4a984351123f7ec332d64a44c894 create mode 100644 fuzz/corpora/server/324e5fc2f4324d7954d3c2ce6381d0cbbf1fd401 create mode 100644 fuzz/corpora/server/327a94400034b75451b31bba8a8b67d6614c61b2 create mode 100644 fuzz/corpora/server/32d21e7f260be2f4b25170977ebaeb269a33fb84 create mode 100644 fuzz/corpora/server/32e31da91faa79a3be8b40089e6e51e92d08a77e create mode 100644 fuzz/corpora/server/32ff406c6d81b484b4eb5be11b0b7812e6c8bb18 create mode 100644 fuzz/corpora/server/330f719d014a91471bc0c7b740dfb3e59b032142 create mode 100644 fuzz/corpora/server/3314a52d5e2255113a92bf1a3bda873a664ee079 create mode 100644 fuzz/corpora/server/33265dde223eb7b72a80780789708ba1414b0d0f create mode 100644 fuzz/corpora/server/3373842e71a1f330c28ac3bd630a35eda892728d create mode 100644 fuzz/corpora/server/3383f5d7db48dcd58244739d601a78dc13deddda create mode 100644 fuzz/corpora/server/338478f8fd789fa0dca0b5cf6455a822e78b8559 create mode 100644 fuzz/corpora/server/338a3288e7c4c71308802d679ee6a7be1e215371 create mode 100644 fuzz/corpora/server/33913e6c252f5e8e3a588de27056e217ff7bac07 create mode 100644 fuzz/corpora/server/33e48385d4e543e40149932e73fc706b73bec951 create mode 100644 fuzz/corpora/server/33e6194150e07e90f23b2804b0a5499ed211f2b8 create mode 100644 fuzz/corpora/server/33f1d381534590d5cc196c75dd98b19ff746937a create mode 100644 fuzz/corpora/server/33f3942b1d84f7957cfe0fbd9b038423c4031954 create mode 100644 fuzz/corpora/server/3408854b6017472e52e20ec34fe6a64c2b5ba8c7 create mode 100644 fuzz/corpora/server/3437c0944bcc6f44a9f2afad2b54df407fb90b0b create mode 100644 fuzz/corpora/server/347a534f47f9de25ebc878b8f21be69f57c3ff6b create mode 100644 fuzz/corpora/server/34870473d8036b204e71985acd51dea9d9dd2dd6 create mode 100644 fuzz/corpora/server/34a0c1131feb4883ac335082bb50e117d1e89173 create mode 100644 fuzz/corpora/server/34cf47e5addd0d4e67470b03b7e2eb7efec18eb5 create mode 100644 fuzz/corpora/server/34e7834e7788150a3fdeb3fd0a51ea4937c1df3e create mode 100644 fuzz/corpora/server/35324531a72f4adf9fad340073f3922dba9eaf3c create mode 100644 fuzz/corpora/server/3548a691fd90113d2311098efba4b2f9cd405687 create mode 100644 fuzz/corpora/server/354b6d7067ca5792faedb946272bd374114909c1 create mode 100644 fuzz/corpora/server/35568f26163513cd7743680d10dada59488039ba create mode 100644 fuzz/corpora/server/3561ecb3404d65aacc51930ec278400f62d69d9a create mode 100644 fuzz/corpora/server/358052236ff9a4023dcc65c5ce11379fa41ffc67 create mode 100644 fuzz/corpora/server/35c2570e147a67030e52516bcba30713843b4ff2 create mode 100644 fuzz/corpora/server/35c568f2d116a15fb134e056dd432cea023d19c4 create mode 100644 fuzz/corpora/server/35db5b2c9d280f062e41d57b072da27c5033c715 create mode 100644 fuzz/corpora/server/35e94ec791cc17d6784975777f10a1ebfcf0280d create mode 100644 fuzz/corpora/server/362e279ee9a93e660e9b6bbc22395533bf37e721 create mode 100644 fuzz/corpora/server/36364497b303eb64725e7c749e017b3934db247d create mode 100644 fuzz/corpora/server/364381dacd44c26e8e99536cd1e1a9b62daa98dd create mode 100644 fuzz/corpora/server/364911523d6c1e77cd8295f77f4ae82b42a30d9a create mode 100644 fuzz/corpora/server/364a3dda8b65abc72b4e41d0969b948dc1017f9c create mode 100644 fuzz/corpora/server/3668b637de4f8c4201bfa56bd1973bfa28d2f16f create mode 100644 fuzz/corpora/server/3682864be56f8ad9c5612ba96881cf98d5990c90 create mode 100644 fuzz/corpora/server/369040d819fcb44e98e0a6af8178f39fc01eeeb7 create mode 100644 fuzz/corpora/server/36bb91360310bb45e2cd1b0f8d60a5d1964931cf create mode 100644 fuzz/corpora/server/36c19f78718167f6f639630b9aa76567054a441a create mode 100644 fuzz/corpora/server/36d5cd112149f30f032c7d23757ede6fc01e37af create mode 100644 fuzz/corpora/server/36d996572166620cf7e85386218caaee7d0b843a create mode 100644 fuzz/corpora/server/36ed12571d9b559b8832399ee7d21e56b3a6c9ed create mode 100644 fuzz/corpora/server/3731486e774eb2c4cd4760639a66c5ca9e34fd62 create mode 100644 fuzz/corpora/server/37562778ebf1ff247824a2357788de18bdd1e567 create mode 100644 fuzz/corpora/server/377b2f60e384f5333ec660b5cd0bc84d517ff71d create mode 100644 fuzz/corpora/server/377dddc4f3a1ba97ee9fd4de34f7cbb4c6fe3e85 create mode 100644 fuzz/corpora/server/37833e9139fbe820a7618fdc2a74d55f7115ee12 create mode 100644 fuzz/corpora/server/378aa2ddb6abba80423503416a1895431a3b9e16 create mode 100644 fuzz/corpora/server/379b50e092c94a1428bc711647658f3b30ac4bce create mode 100644 fuzz/corpora/server/37b460a225c04edd9f2a04afc0d9dd5290e1c6fc create mode 100644 fuzz/corpora/server/37b4edc853aad5911e5566d407d2e65cd02c6ade create mode 100644 fuzz/corpora/server/37ba65b1331a9326b674c9969260d688bf5e0b2c create mode 100644 fuzz/corpora/server/37c35bf0ecc8cda890b3b70aef269c2e9919029e create mode 100644 fuzz/corpora/server/37dcfe310128a453d41a043d1a3a602c110e2040 create mode 100644 fuzz/corpora/server/37e3df14e99a50e3575776e9eb2d77fd4353ad83 create mode 100644 fuzz/corpora/server/37f278c269b0dfcfb5d198a5746842c5c5fa12a1 create mode 100644 fuzz/corpora/server/37fcafabb145f9344dc2f224e039e7ab654b54c2 create mode 100644 fuzz/corpora/server/381177fc9e92a73f8d05e2121bf263396e976a9a create mode 100644 fuzz/corpora/server/38163b355a219f76af7edc08fbf789c07fb74569 create mode 100644 fuzz/corpora/server/38345f7dfb78e197d8a64c468f13f1bfe5ec2c2e create mode 100644 fuzz/corpora/server/384177c35fd7fb52a191c13116b31118e00f574c create mode 100644 fuzz/corpora/server/385859c187bfe6f78ceef9c249f068dc640117f5 create mode 100644 fuzz/corpora/server/385e5fc97e06a02da6b9ff4699d91874fdecacd2 create mode 100644 fuzz/corpora/server/38cc7914a8ee23ffd7e1f4c12c087ddae0ea13dd create mode 100644 fuzz/corpora/server/38d7951487cdea03f4dd01e8f56a40d1df06a183 create mode 100644 fuzz/corpora/server/38e251230da65eeb64faf5e3473b38c4ee6a3527 create mode 100644 fuzz/corpora/server/38e81083b38f5d771c05e2642b8727dfdaf7796a create mode 100644 fuzz/corpora/server/38ec59b0b248321c866989ed5034dc1dffc07ae9 create mode 100644 fuzz/corpora/server/391b6dd6e8422e35e44db11aef356023d47d25d7 create mode 100644 fuzz/corpora/server/393c1ac0bb0b93446d056495e8dd087bc050452c create mode 100644 fuzz/corpora/server/394302a75400d7b52c452b1d5643f2bc70a34e00 create mode 100644 fuzz/corpora/server/3974275bd54b72c670894b883f0e88517db637e1 create mode 100644 fuzz/corpora/server/3981b5b9481d34458cbb9fb4ae21f03dfb83ff33 create mode 100644 fuzz/corpora/server/399db979d1bae41712b1b7c62b013098d9ee781a create mode 100644 fuzz/corpora/server/39bbf41fae600d0c7b19e790e4d5a781d93df6e8 create mode 100644 fuzz/corpora/server/39e1de6827036041065f5a231ed3505f0bcb90fd create mode 100644 fuzz/corpora/server/39f9e1ac82f23462d323219567f66216ea4e0dc8 create mode 100644 fuzz/corpora/server/3a119f359ed5c0e2ae58a10fcbf474903418d8bf create mode 100644 fuzz/corpora/server/3a2cc068262db3b5d98002beab05735196b63b00 create mode 100644 fuzz/corpora/server/3a2efe9790f9c80addfc66e6c022f959b8f2fadc create mode 100644 fuzz/corpora/server/3a339412d089589b4e2b30950016634b747751ff create mode 100644 fuzz/corpora/server/3a41fe88b817f58db21254cd9acd2293328095f6 create mode 100644 fuzz/corpora/server/3a6068ed37d33db9e224df95a437707601fe5560 create mode 100644 fuzz/corpora/server/3a996df797a421e1ccd63a3ac160b9cd2d334442 create mode 100644 fuzz/corpora/server/3aa0bb4ea2d70f48650a0ed485d2cbfa16cc30eb create mode 100644 fuzz/corpora/server/3aae0b5668e759b7b0efba56006c43cc3626a0f3 create mode 100644 fuzz/corpora/server/3acef22cc41b4eec98e921b3c4efa7ee4a58f611 create mode 100644 fuzz/corpora/server/3ad0c8e2fcd79ddea4d309d6d4371b325f509e1d create mode 100644 fuzz/corpora/server/3ad2cb05c7856bb0e828d100b05cb7cdc862acdd create mode 100644 fuzz/corpora/server/3ade23bfe7749e637b800378954794229b871324 create mode 100644 fuzz/corpora/server/3ae9a2c1c1db233938907971801c09c67d7fa4bc create mode 100644 fuzz/corpora/server/3b41826e7594bc633fb4c4b142d05210f26fca6b create mode 100644 fuzz/corpora/server/3b8e8872cd963ecfb7ba9e69d59d74793dfa64e0 create mode 100644 fuzz/corpora/server/3bb326fd010469103165fd9a2fb0a1e0fff19d0c create mode 100644 fuzz/corpora/server/3bbb597698743508c5ae5a5f9e249fe1f29d60ad create mode 100644 fuzz/corpora/server/3bcf4c6186b206def660aa5ff94cf0398319edc0 create mode 100644 fuzz/corpora/server/3bdeefb3e243a4e019f629282b74e052b3c34046 create mode 100644 fuzz/corpora/server/3bea1a65ded52169bb8c03ec496310f5de2ba05e create mode 100644 fuzz/corpora/server/3c22c50d72c749251372cbdc1af1dfe172017883 create mode 100644 fuzz/corpora/server/3c3c4e78984fc9f4f241e2a5dbd780268d6ca719 create mode 100644 fuzz/corpora/server/3c54bbcb6d7bd7d916e08389b8af5b3f1b454674 create mode 100644 fuzz/corpora/server/3c5c5f57ad7509716855498de27e8939c089fcf2 create mode 100644 fuzz/corpora/server/3c63ce2586679c9ce01f69ef3f529b2a568a8268 create mode 100644 fuzz/corpora/server/3c916b1f12ada680af0acd4cb94b5b586bc24e3c create mode 100644 fuzz/corpora/server/3caa307d562be0c232eebfa001455aa177651fc1 create mode 100644 fuzz/corpora/server/3cb248756823b5af893bd6a193c5f8e7e08b0e95 create mode 100644 fuzz/corpora/server/3cb41808bec712c539040b6671cc4b2a7b086626 create mode 100644 fuzz/corpora/server/3cb9feb9b44c154d5ffdfad6490390200961d692 create mode 100644 fuzz/corpora/server/3cd1cf873274900ed1aa3ae97d45b16ae75d9c84 create mode 100644 fuzz/corpora/server/3ce0f2c284d5388e8e9aadeb2c7f57b5b95750a3 create mode 100644 fuzz/corpora/server/3cef5bf71cd388bf43006a5124245c45476d78e0 create mode 100644 fuzz/corpora/server/3d1436ed7d496ced0bdc8dba67ce6addb6eaa7b3 create mode 100644 fuzz/corpora/server/3d184b1a30b817cea92726926d14205d75dccc3f create mode 100644 fuzz/corpora/server/3d4dd00f4dd7976358e692a1f81bc37a1ba8ee2a create mode 100644 fuzz/corpora/server/3d4f691f05a73ad1b8e8d3491799ed42ae7ba73b create mode 100644 fuzz/corpora/server/3d742f45ed85edd1386885d0a64cbd645f828b34 create mode 100644 fuzz/corpora/server/3d9a282fc350e5453cafc7c5ba4f293b5625239a create mode 100644 fuzz/corpora/server/3d9ce174c5775da42ffdae158536775d0b7840d7 create mode 100644 fuzz/corpora/server/3db5a5a877efbc58b26eb1a86a03e78e0e57157a create mode 100644 fuzz/corpora/server/3db69c7d6080fec84dcde951a18d1600ed8fef1c create mode 100644 fuzz/corpora/server/3dc0c5df526ebad3f83d34aac8a89f7f2bcb4874 create mode 100644 fuzz/corpora/server/3dcd16fea7f4139fb0d822d0b2d6cb8fd32c3889 create mode 100644 fuzz/corpora/server/3dcec563eb77f67151f4403db6e104a3f5e13fef create mode 100644 fuzz/corpora/server/3de4bc2124fe39eda1ad6bd78175ecaa5084c131 create mode 100644 fuzz/corpora/server/3e01f23d8744802bfd255b3b311e94b92e4eeceb create mode 100644 fuzz/corpora/server/3e2353d0fdd9e01935a868c99c3367269b6143ba create mode 100644 fuzz/corpora/server/3e3344c9d27eef494f044d89eb9462d6b2ec9b7b create mode 100644 fuzz/corpora/server/3e3605f2e8a641ede0f8d2a6b6480316ad0604d8 create mode 100644 fuzz/corpora/server/3e6e7e0811bc2ae0316fee1adf604a8a4d9b3200 create mode 100644 fuzz/corpora/server/3e7ff4ccb75659ba175acd7741e6b795e9977027 create mode 100644 fuzz/corpora/server/3e95eb4778741b9946812ebef0831468d0e04da7 create mode 100644 fuzz/corpora/server/3e969385ad421424a09a63bc787c3d771ffc31ba create mode 100644 fuzz/corpora/server/3ec24e6184f9fc89638d2391275d1ad841b3d2a7 create mode 100644 fuzz/corpora/server/3ec61dd5ad421abe5b3476b01b9e69654b35d717 create mode 100644 fuzz/corpora/server/3f2960cd38613714bdb9e8a12eb157a205faaf03 create mode 100644 fuzz/corpora/server/3f3859f60ec4dbc905ba40aadf67c73dadd85e1d create mode 100644 fuzz/corpora/server/3f3fd3f2cfded25c8db8ed7899dbc19ddfc33e31 create mode 100644 fuzz/corpora/server/3f45223f24b1b6976620cb4201951c7df5c44554 create mode 100644 fuzz/corpora/server/3f59e460cf503b69b87d93bc5f29f0de2cb36162 create mode 100644 fuzz/corpora/server/3f5a02e0cd2924aefe1bb3c599f9503eb40d728b create mode 100644 fuzz/corpora/server/3f623395ff030d4dcb976ef1e70269da4e27df64 create mode 100644 fuzz/corpora/server/3f8b0efc5f7aa990e8e36c8b0a788c29cea62baf create mode 100644 fuzz/corpora/server/3f8b39585b1e11938a03c00414dc90ce031ac1cd create mode 100644 fuzz/corpora/server/3f946ede91097e461d72b3fe382dacd15b2b85d3 create mode 100644 fuzz/corpora/server/3fab019a9782cdfc8d683113d78b4a3a1141cfcd create mode 100644 fuzz/corpora/server/400fd1eddd59bb416c3cdeab08c5a0135bab7509 create mode 100644 fuzz/corpora/server/401de661e92f3cc77c837728f6a50143910f9703 create mode 100644 fuzz/corpora/server/40225cb1cb842e87d906d1b714a20d67a5d1c3ed create mode 100644 fuzz/corpora/server/4039b0a9966fa0801c63693b6c71fa3932528757 create mode 100644 fuzz/corpora/server/404c2688581734e877b95237d81b4a2fcb59e1f4 create mode 100644 fuzz/corpora/server/4051c61af6e8abafbae5647219c09cf7d082f37f create mode 100644 fuzz/corpora/server/406e6cf4f101728183f27fb56f2bdd663f490f50 create mode 100644 fuzz/corpora/server/408a96229b6040c4cd81f2725faa5d668ab88dde create mode 100644 fuzz/corpora/server/408accf89ad134949aa807dc8858e584384782b7 create mode 100644 fuzz/corpora/server/40a564cec65c6bbf2d3fa1f08e183fea00a4052b create mode 100644 fuzz/corpora/server/40bd5899032ebf052b443281f368bbd11f65364d create mode 100644 fuzz/corpora/server/412acc023e92cf856d3851c5d1e357d89ddffa2b create mode 100644 fuzz/corpora/server/4133b7b163a09428c4dca35b51602b27bfee1c99 create mode 100644 fuzz/corpora/server/4154abf6790f0b1631a10fb787afe2b53355d659 create mode 100644 fuzz/corpora/server/41691f7817a3aeb9692143719276568064813a1e create mode 100644 fuzz/corpora/server/418a181985e3c19d46b885d21c0da1937732ceb6 create mode 100644 fuzz/corpora/server/41d42399a1257d789e3fa6398c8e9a5aa4d5aeca create mode 100644 fuzz/corpora/server/41ed65f1dc1237adc02bba72afb46b375f09f397 create mode 100644 fuzz/corpora/server/41f7b669f3a0e796daad00f502ccbeda4645884a create mode 100644 fuzz/corpora/server/4200511e5f2ad1cf123f4f853fb55b2ed0a7e7ca create mode 100644 fuzz/corpora/server/42302c50751a68ef71675c3e7263c43b61f30445 create mode 100644 fuzz/corpora/server/423ec4ceb4f41fead782abb666f0fc9e62242f4e create mode 100644 fuzz/corpora/server/4255bc1b8fc4ca5c59162a00a4c42e495aeccad6 create mode 100644 fuzz/corpora/server/4269a27bf86e4e8ddba0b15bbbda87fb15a9242b create mode 100644 fuzz/corpora/server/42c806cacc050f7855dbb71d0c866091414f184d create mode 100644 fuzz/corpora/server/42dd966cc4efa081eeecef9706978b472f19676a create mode 100644 fuzz/corpora/server/4313da4940dfa068fee750c181c127ed5e61c7f2 create mode 100644 fuzz/corpora/server/43183f78e224401c5ac19364a3c8a1f0ebcb06be create mode 100644 fuzz/corpora/server/4358bdf36545aa6a5bcf2c973fe7104bd1a41675 create mode 100644 fuzz/corpora/server/4363ceafd3b6715b9ad7f21c87596c361439503a create mode 100644 fuzz/corpora/server/437adb854bfa54c80843bbd691d743b5231b0375 create mode 100644 fuzz/corpora/server/4395c82027997691ebd1596e877778c620d49b54 create mode 100644 fuzz/corpora/server/439d51432c094fc7f77cd614cce53ef623e323d5 create mode 100644 fuzz/corpora/server/43dc4a197566953f76dccafba23118a3db8136b9 create mode 100644 fuzz/corpora/server/43f8bc212933a9dacdf4167b99e57a20688089e8 create mode 100644 fuzz/corpora/server/4422e4541185fe8dab92b6a808749f1cfefb180b create mode 100644 fuzz/corpora/server/4426e29cc7f84c8aff099f7a2a3c78c377197ade create mode 100644 fuzz/corpora/server/44314eccc9bc3877cc93572f93ec2b884392af93 create mode 100644 fuzz/corpora/server/443151a242f3ae54545dcccf0d723e9e7c565348 create mode 100644 fuzz/corpora/server/4433c25edd0d9992171e1bbf7b05763b2f5d6309 create mode 100644 fuzz/corpora/server/44881f46510520805f4f54a83fba6a7468393762 create mode 100644 fuzz/corpora/server/449c6e6c75081f1b503f1f6d8b48bafc8f6f4353 create mode 100644 fuzz/corpora/server/44a18d2174483f750241809bb5abc80bf31b6793 create mode 100644 fuzz/corpora/server/44c9e616a53ca2108058a637b9e1748a2d20d272 create mode 100644 fuzz/corpora/server/44e8c86458f27a24519db8e6a2e6904c2752597e create mode 100644 fuzz/corpora/server/4512ebfbcf667604a1f45269b6c28c4727c0d95f create mode 100644 fuzz/corpora/server/4543b87c22431cd1968fd97e72b4f8d9b114cb06 create mode 100644 fuzz/corpora/server/454e9494fb22a9b97dcdbb15d99250ec9ebed81f create mode 100644 fuzz/corpora/server/45e4bb08f8e01eb6df49fe0e14b9e779ef1be241 create mode 100644 fuzz/corpora/server/4601fb7737bc00af07913d3c531d765889c3e1c4 create mode 100644 fuzz/corpora/server/46215dcf1c38587c949d3d9bc802da46de407557 create mode 100644 fuzz/corpora/server/462640e9cbe775d83fc9d853593b79edae1f32da create mode 100644 fuzz/corpora/server/46394562783e5267dff1611753f929d4453d7452 create mode 100644 fuzz/corpora/server/46435d9a6279ba4bcee3a58f087946509c93bb6c create mode 100644 fuzz/corpora/server/468df2047fc894f99ec07432f100058a104d621b create mode 100644 fuzz/corpora/server/46906dbc5a0d7d40ec57613c21d340e8f3a672a4 create mode 100644 fuzz/corpora/server/46b9fe422cfaea6070671b9530ee4af756b29239 create mode 100644 fuzz/corpora/server/46c78221570c13e30707bfd9ec4b4a76af950215 create mode 100644 fuzz/corpora/server/46e478ebfa8ff869fc17d0872667e1ca36ae4a00 create mode 100644 fuzz/corpora/server/46eed4b7129c0e2b0d210ea953b1de969a0b5324 create mode 100644 fuzz/corpora/server/46f580591dba79b2d6d131614f42afff4140467e create mode 100644 fuzz/corpora/server/470fdd5d12b5d15d084ce88c844003613d6a1a0b create mode 100644 fuzz/corpora/server/4731b5031064c4f1459437839b2e77534cb9f0ce create mode 100644 fuzz/corpora/server/473cb3848839faca67eab6031fcbbcc5d7063e93 create mode 100644 fuzz/corpora/server/474f9e02721c808b36d5c1550b0ebbbaddce457d create mode 100644 fuzz/corpora/server/4753de1550c6c49178cc0913b4f93e49beecd1ef create mode 100644 fuzz/corpora/server/4754ccf116b3b2a58c0b1a08f4078766938c53de create mode 100644 fuzz/corpora/server/475602bcc4d28abad5b5749fdbdaad4b789dfad0 create mode 100644 fuzz/corpora/server/4781b9d64b240ee4b2c7719b7ddfaccc76191a0c create mode 100644 fuzz/corpora/server/478d3250428f6e4f478f55568d3fbf2f0f8b94ea create mode 100644 fuzz/corpora/server/47aa5075ff36e9160f01196f77eb42247a55ea36 create mode 100644 fuzz/corpora/server/47cc031c6609765be818f27ea57b87e870702fe8 create mode 100644 fuzz/corpora/server/47e90fb25f5c5207905af74affb6470c5bdcd98d create mode 100644 fuzz/corpora/server/4816cb16f0722093b28279b6abd0112862eaa300 create mode 100644 fuzz/corpora/server/4841ca745f021d1f6b969595f81fa40f27647a97 create mode 100644 fuzz/corpora/server/4842d5ade39652732eac3e0d2ba687b7b3d86cbf create mode 100644 fuzz/corpora/server/4848af73fce56da1c173502acfd7d687f9f46d6d create mode 100644 fuzz/corpora/server/486d73fa097f06f398bf498b87420795d9d72eac create mode 100644 fuzz/corpora/server/4888a06695e55037e282780b96277a3dda558e7a create mode 100644 fuzz/corpora/server/48a075d81a20d8cc05ec3fd00386ea38421f2873 create mode 100644 fuzz/corpora/server/48b26336b8be1c57d0831ae73af3428023a4d800 create mode 100644 fuzz/corpora/server/48c8f09e61b94ea020f5ab6fbbaddf62ca2b45fa create mode 100644 fuzz/corpora/server/48d1a0502d8215d3a1ca9c9e760c381a58395d38 create mode 100644 fuzz/corpora/server/48ddde2e6953feb376981580c7f5c045df399e34 create mode 100644 fuzz/corpora/server/48f2f11388211088f193f5228359ae1faa9d39b6 create mode 100644 fuzz/corpora/server/492be0d90422dbabdcdeb884c5aac9715e47aab7 create mode 100644 fuzz/corpora/server/4957cc8040c3d081319b0bd4689373437769f8e4 create mode 100644 fuzz/corpora/server/4976bdc5d4158b18924ef343631e11791d73ef10 create mode 100644 fuzz/corpora/server/499eb943bf44ac61c3cd1d66e29ec37ac9795e49 create mode 100644 fuzz/corpora/server/49b67191fad12c1e448f050d02c28a9aff25b5a8 create mode 100644 fuzz/corpora/server/49c54692e126c06e043162a999b9597e4a98678b create mode 100644 fuzz/corpora/server/49d354ea75885900061efe4e41d524a7b4b3d3c5 create mode 100644 fuzz/corpora/server/4a3d0ce480c584061d5ed1a50821ad63c990f50d create mode 100644 fuzz/corpora/server/4a469ce1589ce06ca9b101f787391890758dc8ba create mode 100644 fuzz/corpora/server/4aa29790f7bc4c13221d476f7b7467794d1b40fd create mode 100644 fuzz/corpora/server/4abdb8b9fd2ec21711032ee2f58407d5c1b03686 create mode 100644 fuzz/corpora/server/4ade857ff894a4cc4bb8ba93e68ce1c36cbb2f18 create mode 100644 fuzz/corpora/server/4af350207a6d1d698d1a2731f931dfb545f48fbb create mode 100644 fuzz/corpora/server/4aff35a59c19d3d4134d6c4f964c47bfe027d743 create mode 100644 fuzz/corpora/server/4b18caf9dcb1f142fd132ef126dcd789c1cbaa87 create mode 100644 fuzz/corpora/server/4b44646a90fb4bdd37a777e67db0f65647171ccb create mode 100644 fuzz/corpora/server/4b512d656721ffcda944c3d59a3989bdc8d20bc5 create mode 100644 fuzz/corpora/server/4b66b01a0f50a587b40cca71a7c2233a6bcec20a create mode 100644 fuzz/corpora/server/4b75a924b723a81b5a8adb84e658b57a3f9394f4 create mode 100644 fuzz/corpora/server/4b80214eb1085a2137eb20a2cf546cff57b5a001 create mode 100644 fuzz/corpora/server/4b962278e7cf4384c8a320f4df8ffddbd366ff78 create mode 100644 fuzz/corpora/server/4ba433ac8cd5e6f09edef8ffaa8cc7f8cf317c3d create mode 100644 fuzz/corpora/server/4bae12b187d1292499ccdf58a530e34a44e60a9c create mode 100644 fuzz/corpora/server/4bb9c3241b3ae5b39357448c57ce459e46347470 create mode 100644 fuzz/corpora/server/4bc4cb2e8e4c5f104b6da8946feab8cce6ee8473 create mode 100644 fuzz/corpora/server/4c157316ce1d6d31ccfe4776dd065bf4bcb5bfe7 create mode 100644 fuzz/corpora/server/4c30881f15880eb6554eb45d49de9f636744693e create mode 100644 fuzz/corpora/server/4c77b3367c0a1aaf22126fec6fb7f8649c88e2a5 create mode 100644 fuzz/corpora/server/4c7d4ada546d84d238a2490e3f01b99f887f344b create mode 100644 fuzz/corpora/server/4ca439b92c5d255134b129b01dd9ca1d950c1e43 create mode 100644 fuzz/corpora/server/4caa5c447d6557dab94af13388f9de56febc3da1 create mode 100644 fuzz/corpora/server/4ce952e642fe30eccd1f2fdcb980572bac4e4084 create mode 100644 fuzz/corpora/server/4cea414663b2194e15209180f69b623a4b5bbece create mode 100644 fuzz/corpora/server/4cebfe5a86be7430902018b62307c124f4b582fe create mode 100644 fuzz/corpora/server/4d1c399bc4c6ef5d8f3ddc03c0905e2f4ee9f129 create mode 100644 fuzz/corpora/server/4d3553622acb0b929fe4a06b3a9376e469c6d3a0 create mode 100644 fuzz/corpora/server/4d51219589f17ce16a649fd59e59c846632f3699 create mode 100644 fuzz/corpora/server/4d8415ee5434c847867fd504750391ec15e457e1 create mode 100644 fuzz/corpora/server/4daa98308c5d24b6c535c9d89b06f0d808b1e44f create mode 100644 fuzz/corpora/server/4dcbc9840e20dbd7307c43a9a5c6cc48fb962da4 create mode 100644 fuzz/corpora/server/4e12b3c36e2be9547d8ce4f146f85ba8d1ab9c0b create mode 100644 fuzz/corpora/server/4e1b1e81d3eaeec8f529af74ce227d7a82a600ed create mode 100644 fuzz/corpora/server/4e268554ccc0193d6de3feae04731d3bbc6e7298 create mode 100644 fuzz/corpora/server/4e7fbe92320900e7f8cac10fed9648fa5ee5be78 create mode 100644 fuzz/corpora/server/4e8eab662e5c4f4a0149978a2398fb0687c31693 create mode 100644 fuzz/corpora/server/4ea84d2d01e089b53a98c37ce9d3f96e65a97951 create mode 100644 fuzz/corpora/server/4ed0f15ee8d7fcf1497d2f7d7f173946583803c2 create mode 100644 fuzz/corpora/server/4ef3c2a78d25c5c7acd0a296d1f2a13a9eeff22b create mode 100644 fuzz/corpora/server/4ef47fd91af22e3e6ee9d5059392609146a73110 create mode 100644 fuzz/corpora/server/4f07aab87a1a17cf0ed4edb610b2e52c78b58c70 create mode 100644 fuzz/corpora/server/4f20dce30e1a8ba97dd69a99227d9a984f41c706 create mode 100644 fuzz/corpora/server/4f36efcaa81731f1b541ec881f629c9f2a204095 create mode 100644 fuzz/corpora/server/4f42c91747ab9ce981106eebb607758ba8d736ee create mode 100644 fuzz/corpora/server/4f49102d6d876e0045834412d64e88e78c3140da create mode 100644 fuzz/corpora/server/4f582b68e2f7a6c8d45dc28be88ebdf28fa9c80e create mode 100644 fuzz/corpora/server/4f6757ab7c701f2e701fcbc9a2c0f32742476710 create mode 100644 fuzz/corpora/server/4f73d7b29a031f405e8ad2d72e071393883f6c6a create mode 100644 fuzz/corpora/server/4f91984749d39dac0c4a659b90efc822411ec90f create mode 100644 fuzz/corpora/server/4f91e590b934eada14996fec53be0a1b4ca716a9 create mode 100644 fuzz/corpora/server/4fae2772c11aa68608c7f5586e05f5fc903e0cf4 create mode 100644 fuzz/corpora/server/4fb3dd91c95a1c98904e737fbcfd3a83f72d6275 create mode 100644 fuzz/corpora/server/4fbd53cfdb09a24b1a8bf2b5463f029371f34074 create mode 100644 fuzz/corpora/server/4fdae8d7d97e53ec47908105933b470a147ef28f create mode 100644 fuzz/corpora/server/4fdd3f6df1cac4f99721b060e2560400978fdb57 create mode 100644 fuzz/corpora/server/4ff064ad77e27a34e1242e8b74e2b96c98afe636 create mode 100644 fuzz/corpora/server/50203ed02b1c43cf65b1960f2f2adb1455e1d56b create mode 100644 fuzz/corpora/server/505b490e8dbf998004b0b7c597715861f95b3f17 create mode 100644 fuzz/corpora/server/50686bc15fd10c1cf8d033b0b36bbe33b0e3c7c2 create mode 100644 fuzz/corpora/server/508d5a1893f9a8fcab61fb79ea09b17f13946adb create mode 100644 fuzz/corpora/server/50af416496e2ddec0d6b645d5bb6f8e14a387c18 create mode 100644 fuzz/corpora/server/50c72061f017ed08eac4e0a7f64a47e52bde3179 create mode 100644 fuzz/corpora/server/50ea3de8aecec8fdfd62fb78211b21bef5c5ef40 create mode 100644 fuzz/corpora/server/50eecf3f8e732bd825caa27191c5470a64534b8c create mode 100644 fuzz/corpora/server/50fd11a992cacc60e5fcb04000030b33b5849136 create mode 100644 fuzz/corpora/server/510acfa96f66aa7285c2b5a6169c3b754f623150 create mode 100644 fuzz/corpora/server/510cb72b2b7d4d1a7be977375862a39637c57d9d create mode 100644 fuzz/corpora/server/514fb7240ef25bbb44e10b976543a1f9a5961a30 create mode 100644 fuzz/corpora/server/5170e5c82402214bdb53a3122811fbd742eb48e7 create mode 100644 fuzz/corpora/server/5195a15b8a29b32a448dc8aec29018d1041edc9d create mode 100644 fuzz/corpora/server/51a855c558e86c72dffac18046c58b9372f2e0bd create mode 100644 fuzz/corpora/server/51b5647e1b584c736047a22bc5e7ec870fb2f672 create mode 100644 fuzz/corpora/server/51e27b04d50824facd3659d1fc1e8fd59429fb31 create mode 100644 fuzz/corpora/server/51e3df06593195c8cfceb54ec3175ed528a7f4bf create mode 100644 fuzz/corpora/server/51f30937dc71e9dbce857aa9420d4a924ade01e8 create mode 100644 fuzz/corpora/server/51fdbc6db0794858050bad978616c2f676fc4191 create mode 100644 fuzz/corpora/server/5229a5c922764bebff3b2e17bf1379f1ce6b7959 create mode 100644 fuzz/corpora/server/524b7da7aa0e37654490e3a3ee59c31565d4e9bc create mode 100644 fuzz/corpora/server/52536afdd5abbbc3c0097def1c22a5243cfb676f create mode 100644 fuzz/corpora/server/52a2bd8a303924ac9a655c2c01712b003d7c433d create mode 100644 fuzz/corpora/server/52cc4c5c6b0cd167669e23acf7edea6396e432be create mode 100644 fuzz/corpora/server/532c8680add69e520c08f6e492e67d3d70069e40 create mode 100644 fuzz/corpora/server/5383277dc36b7ef87b5f696d9918327d40f95a52 create mode 100644 fuzz/corpora/server/53b405268246690b377f41bbbddaeb788759ec6a create mode 100644 fuzz/corpora/server/53cc81705b417e2880763efef774c9a7ea8676f7 create mode 100644 fuzz/corpora/server/53cfb4f9dc7df9513cc68507da1143585f4d446a create mode 100644 fuzz/corpora/server/53eb03f76ff3caf51f82f67133f1972996982790 create mode 100644 fuzz/corpora/server/53f64e1cfcc32d3d2549493cf0e0f5c951019446 create mode 100644 fuzz/corpora/server/53fe1c15efe69ba73b09a46c6e049969700f038b create mode 100644 fuzz/corpora/server/5404b5511929cf0d519b2a46921326b354502954 create mode 100644 fuzz/corpora/server/540555e6f8261010cef02a5bb5f8f302712a255e create mode 100644 fuzz/corpora/server/54168489f97b587437a9877cd1e6a8f946fcdcb9 create mode 100644 fuzz/corpora/server/543a61d60cdb0b71b574e27405910ca9cb7726a3 create mode 100644 fuzz/corpora/server/5495222bddaf658321e7167d54456b4fae4196e5 create mode 100644 fuzz/corpora/server/54a22c1472a8f492a80432ddd53b11d32e9a5c88 create mode 100644 fuzz/corpora/server/54ad62cdc0e846282b800d99d1534485993507e3 create mode 100644 fuzz/corpora/server/54ad682cc6379bb3b40b2fd1a2c73d258974526c create mode 100644 fuzz/corpora/server/54b219e7a50bf6f58dbd3733ca096e5be57aa5f3 create mode 100644 fuzz/corpora/server/54d392c720fe88b7787233b3fdfe9b4e6ff88817 create mode 100644 fuzz/corpora/server/54fa208b7c48c04f5b0833ae6addf3aec215b334 create mode 100644 fuzz/corpora/server/54fcd19f18f5ffa09abc55b4cf9e82fd4afd9aa1 create mode 100644 fuzz/corpora/server/553344a326b3b99498844da9e926b1a32801a03e create mode 100644 fuzz/corpora/server/55668394be5374196c971e1b2a1ef563834b1399 create mode 100644 fuzz/corpora/server/556fc58a4375fbb8eed92981dffc02a624c2c8f4 create mode 100644 fuzz/corpora/server/557618ba72721951a0e79b47ed4a3a47b223e28c create mode 100644 fuzz/corpora/server/55841ded8f594f38b091bc145d20b88f9d5fc135 create mode 100644 fuzz/corpora/server/55dc1e740a6c44f4ee8b4ae2988f7db7c50caa37 create mode 100644 fuzz/corpora/server/55dcd393fcf7272ee0d4b6a290239538edb670a0 create mode 100644 fuzz/corpora/server/55ff4d368f4f21c1c751d484a075c39aa0771138 create mode 100644 fuzz/corpora/server/562ef0ad472da725b07f7f0717830ae0a866815d create mode 100644 fuzz/corpora/server/5639b8e7d2af474d181353f0d1f750fff8b712ae create mode 100644 fuzz/corpora/server/564717ebe54faec10cf70d6c81737f5d80084aa2 create mode 100644 fuzz/corpora/server/565868ed7a06a78dcfd7ff270a0e4510b638fcfd create mode 100644 fuzz/corpora/server/566483810848ce9122d29ebda21b2048359becd5 create mode 100644 fuzz/corpora/server/5689eb0a31efcb61cdf01cbe36974a599448a097 create mode 100644 fuzz/corpora/server/569cad1eede89351050840785c9832b325e3e4e9 create mode 100644 fuzz/corpora/server/56a6a5d21ac902c12e9063cb6ff58d504f69f5c6 create mode 100644 fuzz/corpora/server/56cf4099e381dd26022b6f77891f63a4c044596c create mode 100644 fuzz/corpora/server/56d87c2b8dc5a3e5227de7101b98a8af3172a01c create mode 100644 fuzz/corpora/server/56f3c38af849dd4ca7e9bf66dab3718cd5d16926 create mode 100644 fuzz/corpora/server/56f98f8f2766c863b7c9b1719803150b659cb58a create mode 100644 fuzz/corpora/server/56fcede2a8799d0794e6c2f3c26aff6433a0dde6 create mode 100644 fuzz/corpora/server/570f3216da4bf90723835ba358d13bf4d739bfb4 create mode 100644 fuzz/corpora/server/5729b7996e603b5284ff9fd001b7b55c363ca841 create mode 100644 fuzz/corpora/server/572c55d1bbfc0724de7202e570449d6f8455e64a create mode 100644 fuzz/corpora/server/57976ed81278629ee132b0bc8336aafd9221483a create mode 100644 fuzz/corpora/server/57bd5814d94ca9f755cab47e67c3592442daf945 create mode 100644 fuzz/corpora/server/57cec373f29b853f64a346937598e6cec889ceac create mode 100644 fuzz/corpora/server/57d3b54ee1656de756a0a976360e45432d67a8cb create mode 100644 fuzz/corpora/server/5826eccccd7b3938d746c0e917f73a5416a1d03a create mode 100644 fuzz/corpora/server/58347d82b4267975f8ff8ec4888dfb2141a44e0d create mode 100644 fuzz/corpora/server/5842f5f82eb91a9c2925c3707780327fcad74c6c create mode 100644 fuzz/corpora/server/584bd9ab39f850384d89b25ee4c581359bf29faa create mode 100644 fuzz/corpora/server/585fde2087ed8beec395a73b217b5c6ae2e38f34 create mode 100644 fuzz/corpora/server/58634d3736d235f4167ec2e752cc079baa2902bf create mode 100644 fuzz/corpora/server/5885b6a2c5f5dd565206f439d7437a9d89d7bd16 create mode 100644 fuzz/corpora/server/58b73605a74c28e9a98cfbf204e65ce7712af6ec create mode 100644 fuzz/corpora/server/58de9f6ddddb429d9d1f33e0a864239a5b914e79 create mode 100644 fuzz/corpora/server/59297b345cb24b34068939e7a0f8089e033dace8 create mode 100644 fuzz/corpora/server/592bb54b5dd1802e2718c214e57cf34bb7525e91 create mode 100644 fuzz/corpora/server/592c8c7eb261c989996377674bf4b017df819e97 create mode 100644 fuzz/corpora/server/5958d8adb542d5a0d7054acdb430fc17d1504410 create mode 100644 fuzz/corpora/server/597299ac6680c587993c73546f9e60dfc1509136 create mode 100644 fuzz/corpora/server/5977aaa11c33a77c1249171a955ec131091b8a5c create mode 100644 fuzz/corpora/server/59870b6cb956865ff45031e73bbba04b0bf15757 create mode 100644 fuzz/corpora/server/5997023f62603dba3f6e7747e7104f962c2f4e57 create mode 100644 fuzz/corpora/server/59a387e78004ff3c264339d7dd1d4ea5418e622d create mode 100644 fuzz/corpora/server/59b8b4fcad19bb4e7e8cf94847e295905b7d61ed create mode 100644 fuzz/corpora/server/59f655cf5c5d10445da4be258b41f7120c37d35a create mode 100644 fuzz/corpora/server/5a2623a6e087ceb9d2f4802b3e3230721aecc5ed create mode 100644 fuzz/corpora/server/5a2f67725533cdfc4e309224749279cb675ed5c6 create mode 100644 fuzz/corpora/server/5a3241636c4ec2598bd1e1661b901633898b871a create mode 100644 fuzz/corpora/server/5a41f30bc7dc3d9540e4df4bc69758fe47ec1ab8 create mode 100644 fuzz/corpora/server/5a4bf4c9df1f0c0253760ff963f86717d22a3bfc create mode 100644 fuzz/corpora/server/5a80c86645dc7e55ccc92731565e14f689f3b439 create mode 100644 fuzz/corpora/server/5a871cb73828d8f0325b3f47d0653008547bb16f create mode 100644 fuzz/corpora/server/5a88b407a64b9a21b181fd78b4fd9b4685aa46cf create mode 100644 fuzz/corpora/server/5aa832d4396903dbda93500d1ae2afd998deea8c create mode 100644 fuzz/corpora/server/5ac90712a287c97bbe91e812c3982def4fc687ac create mode 100644 fuzz/corpora/server/5ad38b906d3acf984827d2a18958468cfe6e4871 create mode 100644 fuzz/corpora/server/5b184cfba63c7607061f47e4d760ce38c8fe5b90 create mode 100644 fuzz/corpora/server/5b235a72c6a4816d3c4794ad17aa44c8df419789 create mode 100644 fuzz/corpora/server/5b2e12459dd5fdfa1fc23b175d5c267f7f69923e create mode 100644 fuzz/corpora/server/5b5dc424b9cdab22c8377e000d9d5b315f72448e create mode 100644 fuzz/corpora/server/5b62d6d35a507ab1c60a90aecb0e3ac87dd540be create mode 100644 fuzz/corpora/server/5b76dc32c486af6306fa63f92c8046db7709835c create mode 100644 fuzz/corpora/server/5b82b72243cf16cdc38fef7e53d43b88bd21eb21 create mode 100644 fuzz/corpora/server/5ba245233979ca5e7544d1884fe41c6db4d07a0a create mode 100644 fuzz/corpora/server/5bb3852187f5c0f7b3735e743d5c669610b72c7c create mode 100644 fuzz/corpora/server/5be2ba469acaa0e64becfe4c761017e096b1eedc create mode 100644 fuzz/corpora/server/5bf0b84ca938a6ebbf1a88c9c1f615621fdabbc7 create mode 100644 fuzz/corpora/server/5c0a2c61c65bb6ceb76385926219d85f9256c5d9 create mode 100644 fuzz/corpora/server/5c197072e734f0edab04fecbfcb9dad46aa7bea3 create mode 100644 fuzz/corpora/server/5c25d9426e794b1075440ae8be53b21f57c26539 create mode 100644 fuzz/corpora/server/5c64c5b7a1e013632d89071f1b2152eb5173efcc create mode 100644 fuzz/corpora/server/5c66c546592643f16b05e70ec59945a13b0e8245 create mode 100644 fuzz/corpora/server/5c82945da8372f474854f797cf1795e224caf994 create mode 100644 fuzz/corpora/server/5c8bcc411a65317c99bbe414519f7e21ab7fc8e6 create mode 100644 fuzz/corpora/server/5c996ad355b58c7b8ae38f438a0ab9512529885c create mode 100644 fuzz/corpora/server/5cb23123596bdc695ebfaae08927aa1bbd9a8bfb create mode 100644 fuzz/corpora/server/5cd9c34c931923abe79e7e741e19dd1e5d3606e2 create mode 100644 fuzz/corpora/server/5ce0896ad9d792623591798b5bab6b6694a20d9b create mode 100644 fuzz/corpora/server/5cee1a8903e983f03b68409f30d4e7c543fec296 create mode 100644 fuzz/corpora/server/5d26c6cead2887ef04e3cb9d29415d3faa042393 create mode 100644 fuzz/corpora/server/5d5979b60face40e4ba32d428fdbdf23cbb12cf4 create mode 100644 fuzz/corpora/server/5d8ce0c8924903b6512ccbb358f838106a998df2 create mode 100644 fuzz/corpora/server/5dc08d92a4c02b60e07345a73c1bdc5eadfdd9bf create mode 100644 fuzz/corpora/server/5dc61a418952166d36d0bdf58d508d5ac7a4ed60 create mode 100644 fuzz/corpora/server/5ddccdbb975aba37011ce643e635867641fc9e6f create mode 100644 fuzz/corpora/server/5dffb1f6eb355bd61272f0a9306da890fac5eca5 create mode 100644 fuzz/corpora/server/5e120570e2a8c6efd24277b5ec8b997819995532 create mode 100644 fuzz/corpora/server/5e2492945d530f31b3a8d2422041114be3e9e9c7 create mode 100644 fuzz/corpora/server/5e3a7cd0fc39ff38ac67103c229e4dab1bc6193c create mode 100644 fuzz/corpora/server/5e48f76577dff5437aec2a7ac578efce1899186f create mode 100644 fuzz/corpora/server/5e4d2cafcfee1a61d6375a15a72b3b56026cc1bb create mode 100644 fuzz/corpora/server/5e4df9cc8bcb9c9496cfb8fe339d7ff4c0262b9f create mode 100644 fuzz/corpora/server/5e66642b1e73dbe608fcf7f9d4825d51466874f9 create mode 100644 fuzz/corpora/server/5e7906fe7f7f817c44700973035f5cf370820953 create mode 100644 fuzz/corpora/server/5e91eaa7c899d08aeb60fedc7908e4ff5e85371a create mode 100644 fuzz/corpora/server/5ebfa38fc390ede71dcaab4f73eed9af5a1d3752 create mode 100644 fuzz/corpora/server/5ed51d0c22d67de5b54a411353768eb651aae53a create mode 100644 fuzz/corpora/server/5edacc703ca7368704f540281d5912db7abeafba create mode 100644 fuzz/corpora/server/5edfc582c5a4735dc06747e78fe6d8c16c4e020e create mode 100644 fuzz/corpora/server/5ef6fbe7ead1212952a8b29e535e976a66b490f5 create mode 100644 fuzz/corpora/server/5ef8836c44daad1c0900d641c021e9b2e5c0a9ac create mode 100644 fuzz/corpora/server/5f08397f0d791f56a881c916cbb8faee6abedddd create mode 100644 fuzz/corpora/server/5f734e8e114f936a6137e19a50e2f48d6370284b create mode 100644 fuzz/corpora/server/5f99382ccc0c9be56108320221b5799a5816a9e9 create mode 100644 fuzz/corpora/server/5f9f42f79b9452b9befba92af83006d6de468a98 create mode 100644 fuzz/corpora/server/5faa421c7b9abae7865e114bf334d7f8348bb53f create mode 100644 fuzz/corpora/server/5fbb28c03a07d55cd8790d60b478d8f086cc71ef create mode 100644 fuzz/corpora/server/5fc6cd0c544d3effb0f3326daad103c8e3c9fa5f create mode 100644 fuzz/corpora/server/5ffb48bfc662d6f173dc198662110a3a1d3ab0b0 create mode 100644 fuzz/corpora/server/601b3b621275021a1cdd5c69a6e47b5d84c00afd create mode 100644 fuzz/corpora/server/6057e0b702d12a01528c7314de724d24ef5fde4c create mode 100644 fuzz/corpora/server/60bc01df998cddee7a8e4d4edfcd5cee1f4032fb create mode 100644 fuzz/corpora/server/60ff51b07e4362d5d28785ce9605480d7747e40d create mode 100644 fuzz/corpora/server/6103fde863a61c2448f56661f1a6eedd2d73b7c2 create mode 100644 fuzz/corpora/server/6106c825dd481024842c70c7f218d54f2b3cfc2b create mode 100644 fuzz/corpora/server/610da59babc636255cadab9cce365ce27075f1a4 create mode 100644 fuzz/corpora/server/6124f5a975a310e392490fd7ea8aba83db732d01 create mode 100644 fuzz/corpora/server/6138da640f51fd05bd6439f48566d06b551526de create mode 100644 fuzz/corpora/server/614fb4095b36d894db280d2f2bc57746df48cb98 create mode 100644 fuzz/corpora/server/6156a5b9562fa0f59138a884c4aea0336d2ad94d create mode 100644 fuzz/corpora/server/615e2ccaabae5fba1adf3740503284718be1cbe4 create mode 100644 fuzz/corpora/server/616be08733afc3aa2a6077c20d6974c83aaef6b0 create mode 100644 fuzz/corpora/server/619bbef3dbd5b4c59aa21148ce5037f2298e873e create mode 100644 fuzz/corpora/server/61a68b5885e29a4b3aae7f1cdac8f19807b23095 create mode 100644 fuzz/corpora/server/61c4e4076145b1d452cb58b4a6e920f27da1e7d2 create mode 100644 fuzz/corpora/server/61cccfd58e0b57c70ef816239ed4305b33fed1e0 create mode 100644 fuzz/corpora/server/61d0775cb1edb2d14ffff6909d504cae3b48c100 create mode 100644 fuzz/corpora/server/61d563618799a6c18077f88257a890c4273e14e7 create mode 100644 fuzz/corpora/server/61e141a7f326b809eda10f8c66e3065a2ffb4136 create mode 100644 fuzz/corpora/server/61fc02986a730c35d6e56da04c84f915149ad7be create mode 100644 fuzz/corpora/server/62203648ba7335409dd69f5285ac04dd265ffa76 create mode 100644 fuzz/corpora/server/622a6d483b714093c1fbcbfe764bdacc5bab87eb create mode 100644 fuzz/corpora/server/6236e8b26e1001b53a96e055e61507fa037a40e0 create mode 100644 fuzz/corpora/server/626a93f0000c537fcb2176bb3bdce3c781c5f63b create mode 100644 fuzz/corpora/server/6277af8b076f0d18ec626e4fa7c7b21208287a42 create mode 100644 fuzz/corpora/server/62a0ef0a7819bf5f38f431ccc906402d012ec106 create mode 100644 fuzz/corpora/server/62c3176e022fbac05a52cbdd2c4958e59fe9efdc create mode 100644 fuzz/corpora/server/62cc628a24eeb996342e7ae4d23eda302eeda1e9 create mode 100644 fuzz/corpora/server/62d35d8582d6ba94b563b6a76d241be2b84c9fea create mode 100644 fuzz/corpora/server/6314084161be7be7a31228d183f4d07425c4e753 create mode 100644 fuzz/corpora/server/6328dcf82e00a35550569ff212d0188c8c68b59a create mode 100644 fuzz/corpora/server/6335a233f784f084594fedf27c93b2495a85d219 create mode 100644 fuzz/corpora/server/634a73191e38c9101eb357ed97c6073356b6d3be create mode 100644 fuzz/corpora/server/635c714cd5f65e480689120db441ef5c948f592a create mode 100644 fuzz/corpora/server/639634bc1c0d9764b950f836a86f2a609609149f create mode 100644 fuzz/corpora/server/63e7f4cc94b0232b65053e321888f09606029ee3 create mode 100644 fuzz/corpora/server/63f7bea602a5c8611b4f91c029553c1bd16cf9eb create mode 100644 fuzz/corpora/server/63ffb72e94efd90b371d10731745322dc2389712 create mode 100644 fuzz/corpora/server/643bb24bd2ce5518bb3c3edcdff36c9ed2f909d1 create mode 100644 fuzz/corpora/server/643ca75c910728abc105f0cd912da3d5a27109d6 create mode 100644 fuzz/corpora/server/64579f370f95f3b51008d5ab2a94ab5556e0ec71 create mode 100644 fuzz/corpora/server/645dd7455637674190231f5f5ff626edc48f7428 create mode 100644 fuzz/corpora/server/6484706c47270572870088cd2958617bb49ab49c create mode 100644 fuzz/corpora/server/6489a581c7b77a3f7e0889e6970b63ca4b5a186e create mode 100644 fuzz/corpora/server/64d695834333a767cba53081e890dfaf844f8c27 create mode 100644 fuzz/corpora/server/64e15814d3e3a962fc374061d1a27fd9b90e4eee create mode 100644 fuzz/corpora/server/64ed9057036fc10600bc2fc529f3a34cd7f314d8 create mode 100644 fuzz/corpora/server/65089a38e3825f28c651ed0893018e5d352f0abe create mode 100644 fuzz/corpora/server/65c19a306df45daac1a4a0242985c4123f4812df create mode 100644 fuzz/corpora/server/65dc6514525969756b132d5ee54901104cf2e03b create mode 100644 fuzz/corpora/server/65e887fa099865519a13b34c3fb4a8d8dfb68886 create mode 100644 fuzz/corpora/server/65ecf4266ca01308c34cfb6c18114615fcadbac1 create mode 100644 fuzz/corpora/server/65ed396323d0dd300e83e638a19d19f4afdfb12e create mode 100644 fuzz/corpora/server/6628e58e8422fa867fbf28d3df35b870818525a9 create mode 100644 fuzz/corpora/server/664e4ae6e986d51b9ad5b031e92e1e65cb0cd52b create mode 100644 fuzz/corpora/server/6657f5f6a2c18acdc558472ce87241f3c9574cc0 create mode 100644 fuzz/corpora/server/668c725a4f3bce3d9483fdf0c29f0aa248f6ac94 create mode 100644 fuzz/corpora/server/669136d21a0b6cb4a9ff5b3b05672d967798aeac create mode 100644 fuzz/corpora/server/66a3273f2b096c989d604a2d2a16e7dbffd040a7 create mode 100644 fuzz/corpora/server/66d26ac06860ea2d1b3c9c419916ef60b1f18fae create mode 100644 fuzz/corpora/server/66d341837c10abf9735f1c091734b8afb3ebc50c create mode 100644 fuzz/corpora/server/66ea3ea865f69a335873820ef08b32026eaeb5bb create mode 100644 fuzz/corpora/server/670b381cfd071cb93ce4820e7176478d3e24c056 create mode 100644 fuzz/corpora/server/671316177ad3e9bb22b62b4675275368aafd9835 create mode 100644 fuzz/corpora/server/6739c39a4a579bbc1fa8c9af84cb78fab08cf8bd create mode 100644 fuzz/corpora/server/6767c16894285593790c9609720c97c15ab97f91 create mode 100644 fuzz/corpora/server/6787fe128d46ed9126ca4b7e0841358d5a909ed8 create mode 100644 fuzz/corpora/server/678c250dc487fbc48525ee685b14fe8849b98bfc create mode 100644 fuzz/corpora/server/67b33c1dd9659636a92dfb47489a739e581c0749 create mode 100644 fuzz/corpora/server/67ba070cb406a7da9e642b4fd1b474d843917399 create mode 100644 fuzz/corpora/server/67da3a6cd29f6c4f533d2329bfa9905cd908a2f8 create mode 100644 fuzz/corpora/server/67fadd1cf2e23ad1838e9885bc9e823c8cb01150 create mode 100644 fuzz/corpora/server/67fe430a19000970e3e436d819d2bb34d90ca954 create mode 100644 fuzz/corpora/server/680a8fad47c2369bf3cb36b189159208f15ae6af create mode 100644 fuzz/corpora/server/680b0abf57e2c1f484f028fc673b26b85b4d6620 create mode 100644 fuzz/corpora/server/680b51925a6413e180434046a096cd7f73f39260 create mode 100644 fuzz/corpora/server/68250fb9cc2f1986010d116f25a24d8f216b7529 create mode 100644 fuzz/corpora/server/682ddf9f552853873db3866d0b602560c99480d6 create mode 100644 fuzz/corpora/server/683d78144fef30e47c678618727447f30ccf75da create mode 100644 fuzz/corpora/server/6857ee639616db351576dcb18ef543c113311277 create mode 100644 fuzz/corpora/server/687425f2f057ad505f6aa9e0e703ab436c8d2067 create mode 100644 fuzz/corpora/server/687f101763fbf7716c051ade89db164eac58af24 create mode 100644 fuzz/corpora/server/688c6063a641c5578734c96e13de4d0915968a2a create mode 100644 fuzz/corpora/server/6897085b0e5df7bc796dfa7b27e65c028bbdc06e create mode 100644 fuzz/corpora/server/68990a915ff179f67bd5e514c17fa8f85f6d6ec6 create mode 100644 fuzz/corpora/server/689f7a6de7af40d4407216f6fb9c7ac6408bc41b create mode 100644 fuzz/corpora/server/68a3fee14e5e1278cf8617bc7ba4213e4ed9a2fa create mode 100644 fuzz/corpora/server/68ce6412aff365f6b2de07abf4d4184addf49d89 create mode 100644 fuzz/corpora/server/68e825933fbf3dd070f07128625f94961f895b2c create mode 100644 fuzz/corpora/server/68f8b998c39ef8b57c7f8a93dc34bf5af6071b66 create mode 100644 fuzz/corpora/server/69315803eb341774facc999f76af4311fb45a8cc create mode 100644 fuzz/corpora/server/693566852f458ebdde807613011b1ccbc6096f2b create mode 100644 fuzz/corpora/server/6939b66b277703c391d6899577fec35032a3b474 create mode 100644 fuzz/corpora/server/69552b027865c1b342cfb76030df7327c2f3b387 create mode 100644 fuzz/corpora/server/69576e68153b7c47eb88cc28b653de7a1bf0db43 create mode 100644 fuzz/corpora/server/695dab2ac960453834e5de9a716d4ee4d09f0c97 create mode 100644 fuzz/corpora/server/6975cd48c7ef0d3a9c88542a6f902c21c335ecaa create mode 100644 fuzz/corpora/server/69797161d4e31c42afb3cca28c8ef69450a15779 create mode 100644 fuzz/corpora/server/6996ef0fa0b9c9845e08213dc9bb4c809361e11f create mode 100644 fuzz/corpora/server/6a38bdc55ddbd299bc54daab87e7878af9b30e83 create mode 100644 fuzz/corpora/server/6a6b19e6553e3af97b1001abc13239859aaee72f create mode 100644 fuzz/corpora/server/6a787c05cfa918d12a0b3ef75132934b2b65f870 create mode 100644 fuzz/corpora/server/6a81266fc3bf081269328eeb429f734ad3700fd0 create mode 100644 fuzz/corpora/server/6aa4a80f867da914a36f28b62f12919d6bd77840 create mode 100644 fuzz/corpora/server/6aae8250c35ea4ef39d2bcfcf5926f4af2a65cb7 create mode 100644 fuzz/corpora/server/6ad9502ab4ab77466988a3dc30ce6dcd093200c7 create mode 100644 fuzz/corpora/server/6af8c9454a702b131d4644ca83879ee1001300c1 create mode 100644 fuzz/corpora/server/6b05c39f97c5b6c7d7f3c02c8b2bbcb61627c70a create mode 100644 fuzz/corpora/server/6b21fa24479e3e04e07a0047e83ce026aaae3c3f create mode 100644 fuzz/corpora/server/6b38b1bbbd47e76aa43095825e4cc5d4816cde54 create mode 100644 fuzz/corpora/server/6b422887b53832a6bb1e16c76d457041f8009fad create mode 100644 fuzz/corpora/server/6b5d3214b79e34caaae42c1149eacd04ebd41eb4 create mode 100644 fuzz/corpora/server/6b7a44f90e0298e9051cf64a47171d0ec8cc1870 create mode 100644 fuzz/corpora/server/6b7af335f6382e118c8d2e11e0d3bdd930d122d2 create mode 100644 fuzz/corpora/server/6ba60c067d4b186b390c58ff6c9f5895ed4d0c79 create mode 100644 fuzz/corpora/server/6baee1c7100aa958843c3b65249a6cfb95d95b56 create mode 100644 fuzz/corpora/server/6bd2db816bbf4d6b6f59167759dc7a7399c98dbe create mode 100644 fuzz/corpora/server/6bec90a9b176180a5715aa6689a83d895e3f4f7b create mode 100644 fuzz/corpora/server/6c27fe1842a429f5019c634185345b302a25c3a1 create mode 100644 fuzz/corpora/server/6c3e557c20b1410fc9d1e4224694879bcb550413 create mode 100644 fuzz/corpora/server/6c549f3df1fac0726fc5aaf8214f3df19b07e11b create mode 100644 fuzz/corpora/server/6c6a22a467b3db89abaa121807a55a889fe04724 create mode 100644 fuzz/corpora/server/6c8850ef3addf381aa4b35dd5ebaf62bf84a7142 create mode 100644 fuzz/corpora/server/6c9fa86ccd16dfaea882bef201782ce637ceb221 create mode 100644 fuzz/corpora/server/6cb6b77eb67c6b85cc93f70b98ae2acd762e071e create mode 100644 fuzz/corpora/server/6cd59b1c5e7c142607608a2d5682c00528e8deb5 create mode 100644 fuzz/corpora/server/6ce244807af352baf4da0af910cf2555c089afad create mode 100644 fuzz/corpora/server/6cfd5deb5bb6cc46290585ad939d5062ed221c78 create mode 100644 fuzz/corpora/server/6d42d16d15ee8ca2b00078563378f98f66f04fb9 create mode 100644 fuzz/corpora/server/6d4478a588646bfd3e1f2307f50ff17670ef9adc create mode 100644 fuzz/corpora/server/6d64b478e15091aa28c45482265d59aca3a1587f create mode 100644 fuzz/corpora/server/6d81af1c28fa224e274537fdef1ce2230b36769d create mode 100644 fuzz/corpora/server/6d948242bf0d0b3ea7db9c9054b0023cea89abbd create mode 100644 fuzz/corpora/server/6d95a542618df2cff27aa3abd3aa676befd5d27c create mode 100644 fuzz/corpora/server/6da0db0fca1978280bd0df08c122a47a1a9a01b7 create mode 100644 fuzz/corpora/server/6deffaaf6a51d9d92eb13145cb9736e4291c3303 create mode 100644 fuzz/corpora/server/6e11eb177394fe5528c785ba4117613867ad3bb2 create mode 100644 fuzz/corpora/server/6e15f927a33df344e62ac66b4e82760587137597 create mode 100644 fuzz/corpora/server/6e42532b2a6299e73632d550c07311748e1252c6 create mode 100644 fuzz/corpora/server/6e4de51b4e6041b287c6278ebada37f07e5b9876 create mode 100644 fuzz/corpora/server/6ea3aa199090c895de4e2cf2c9321d70c2c229d2 create mode 100644 fuzz/corpora/server/6eaaad5adc64de3ab0c707ccc9c41a158e04bde0 create mode 100644 fuzz/corpora/server/6efcf6f1be9bcc4a4a927d75b016d6ccdac555f4 create mode 100644 fuzz/corpora/server/6effdbf174c467f3a1b9d9a2df240fb1d7dab75b create mode 100644 fuzz/corpora/server/6f05e9a8ced304472fac03693c58e51c2a1914b3 create mode 100644 fuzz/corpora/server/6f0953c3ff4ade0e1bb5141f3569d9c1c9a7766d create mode 100644 fuzz/corpora/server/6f0b4b5a9dcbbf591bce85776d50a3ce5d9cb129 create mode 100644 fuzz/corpora/server/6f18f083a8993831f1730671c8e507c0cb654874 create mode 100644 fuzz/corpora/server/6f1ad780b3c4423037f95761025347e7b259232b create mode 100644 fuzz/corpora/server/6f1f665fabea5524bd80207fb3144ab3ff35243e create mode 100644 fuzz/corpora/server/6f239c18601f8e24a4db288295ec82790a1b310f create mode 100644 fuzz/corpora/server/6f273cbe6db52ef43a523a268051d5a0b5c9f451 create mode 100644 fuzz/corpora/server/6f38b38ad2f454a6d7266c8e66f5718b84335364 create mode 100644 fuzz/corpora/server/6f39ce78b9acf86e42dca48ee624199607a5ca78 create mode 100644 fuzz/corpora/server/6f5ab4305815c071a29d56488790db8bd5a77376 create mode 100644 fuzz/corpora/server/6f6fd8cdd9343b609e02060a1b49e153ec1dc7d9 create mode 100644 fuzz/corpora/server/6f77eea83fda9731a01523b35448be378c19023c create mode 100644 fuzz/corpora/server/6f89a81d0bed00be2cfde7d9b83703023bf95e09 create mode 100644 fuzz/corpora/server/6f8fdbf73061a3d3afd70d16bf929ac0e99fca37 create mode 100644 fuzz/corpora/server/6fa9c671cba7e8a7c51050f64d71bc7744c5f474 create mode 100644 fuzz/corpora/server/705c1d0dcfbd68f47a7049fc4035e28c614a9105 create mode 100644 fuzz/corpora/server/706666f9802fc452daf8d3f3e929df399b0946b4 create mode 100644 fuzz/corpora/server/707c7e83866dde9085391f6b1535e8b9334eb293 create mode 100644 fuzz/corpora/server/70a11b71a741c5a2a3cf9af7145db692ad13c5da create mode 100644 fuzz/corpora/server/70a936cb292f26ef2551145e04f2f437e660a91a create mode 100644 fuzz/corpora/server/70c5d2217eece19f7bd2ae74101c278bd4a48463 create mode 100644 fuzz/corpora/server/70e2531877bd5e5bf8582213a802936d1113f6cf create mode 100644 fuzz/corpora/server/70fdee34ef6ef0290fd7445854ae4b96add17dae create mode 100644 fuzz/corpora/server/71046e1f0bee5788390de72fc77922a1b573b484 create mode 100644 fuzz/corpora/server/7120074f2b20b984ad210e103d85602f9441840c create mode 100644 fuzz/corpora/server/7147f7eac43454b6d61f81ec52ba74b0856a9656 create mode 100644 fuzz/corpora/server/7156184bff599d4e2e31b0b47410cff7ad5d11aa create mode 100644 fuzz/corpora/server/7180236291367c2bc040ce20f29f8fd85b37dfad create mode 100644 fuzz/corpora/server/71b4bf9c91e874530cb1a02ce6d4b8de211ba738 create mode 100644 fuzz/corpora/server/71bdb1540d5f33dfac7dda8fdb2a57db46c87b4e create mode 100644 fuzz/corpora/server/71ce1427ce24df20bf8b012fb310cc1df40b559b create mode 100644 fuzz/corpora/server/71ce61c25e6f75592f21d925cbcedd9a04d1cdfc create mode 100644 fuzz/corpora/server/7205905321eb92322c7cdd82f43097d09b837698 create mode 100644 fuzz/corpora/server/72112d748ad87d014e3bae7a1c189ca1777989dd create mode 100644 fuzz/corpora/server/727ce03489824194226b2b979d13dd02824dddaf create mode 100644 fuzz/corpora/server/727f6bdecd428fc9e98e3ec5974bcbbbda0b0514 create mode 100644 fuzz/corpora/server/72f6219f497caecbf29f6a3f01a21a0270738766 create mode 100644 fuzz/corpora/server/72f67d2e0949d763a57b66a6a674bb59fa5f54cc create mode 100644 fuzz/corpora/server/72f6df7ba8a5efffe07146896642569dbddc0d6b create mode 100644 fuzz/corpora/server/7322bed6e23240ed2f6834980ec48c3d183c3fe1 create mode 100644 fuzz/corpora/server/733264c27e104a29f0a4bced1cd77c180379a831 create mode 100644 fuzz/corpora/server/733d1a30b29b1bf9f49ecb640df2e7484d677682 create mode 100644 fuzz/corpora/server/7385381cca06eef8e2104746f1af5108476e78d3 create mode 100644 fuzz/corpora/server/73e8fdedfd002d81f5b8ccbb2b0ffc7d557f68be create mode 100644 fuzz/corpora/server/741179d23e15eebd038b27bf9bf48e503ac21bf8 create mode 100644 fuzz/corpora/server/7435f7f96a8af6a87d52ad41bf2fb933d203b504 create mode 100644 fuzz/corpora/server/743f367bea0299f64937851c036b62d21d0847d2 create mode 100644 fuzz/corpora/server/7444318e6ea450c5e372d62e8a4e131520f2a738 create mode 100644 fuzz/corpora/server/7459f86d8c5eb9b61dd971f92c4a7702c033d23e create mode 100644 fuzz/corpora/server/74b7e0d027d3cf5d545c6f95a2f3ddc0fe193c66 create mode 100644 fuzz/corpora/server/74ba64b15c7a113173528a1036c923ef62ebe544 create mode 100644 fuzz/corpora/server/74bfc349b4110556019ed4d4b2cee5d3fb194d75 create mode 100644 fuzz/corpora/server/74d95d148eefe22621a4c0cf6b46835ada78db88 create mode 100644 fuzz/corpora/server/751ded25b10ab1cbda3f4217143625207ca853f3 create mode 100644 fuzz/corpora/server/751e352a1cb1cc2f9989b5ebde081a617f84ff4e create mode 100644 fuzz/corpora/server/7529e415f4fb58bf1f338984e38263ae8955deef create mode 100644 fuzz/corpora/server/75414547cc71fa151670c6cb187ee969a5e1dd73 create mode 100644 fuzz/corpora/server/754a23f5412c2e6af5d7807c9cf3da2e29d5688f create mode 100644 fuzz/corpora/server/7599b2de6caf93ab753b8939e66390062d1bf6f6 create mode 100644 fuzz/corpora/server/75a8be26c095538a8b38ca87e65b594e04a81136 create mode 100644 fuzz/corpora/server/75cb8c9273fe3085ff8cf8249435e9147e3ae25d create mode 100644 fuzz/corpora/server/75d34579d7c95cb16cf02ef0e33b89a67f204c26 create mode 100644 fuzz/corpora/server/75d7fcfc28dcc073efb2a024ce6ddcb9aa2d60e2 create mode 100644 fuzz/corpora/server/75de6c6b8b010d1829891b52a0963f3f61d07163 create mode 100644 fuzz/corpora/server/75df1125e87c1190670dc8eb7064204e7d3f9b99 create mode 100644 fuzz/corpora/server/75ec05182d7d313a6b81300a395784ecd7a4c711 create mode 100644 fuzz/corpora/server/75f5ac2fa640d6e95461387541cd29a506573335 create mode 100644 fuzz/corpora/server/75fa6fc313b2429933368c1e24c2f9e0288173fb create mode 100644 fuzz/corpora/server/761880338d0059a7d14b056b25320cc2a59ca075 create mode 100644 fuzz/corpora/server/76469e1babdc64c71235f1074f047aad80bec0c6 create mode 100644 fuzz/corpora/server/764b5cb89285d73cf66b42cc3732d0a8ac4d9d30 create mode 100644 fuzz/corpora/server/764e05ece93bae4d798676f687cc627d9419b0cd create mode 100644 fuzz/corpora/server/76867973d6de558f99147d807ff898118997e78b create mode 100644 fuzz/corpora/server/76dcc05c96d8388792732b1001b67a774ebd7d5f create mode 100644 fuzz/corpora/server/76ecb39fbb0cc5c19cbd690e4b25a33ed06127a6 create mode 100644 fuzz/corpora/server/77230370b578128d007e10222a3bc548f629e30c create mode 100644 fuzz/corpora/server/772adb1d731ab8026249b28aeaff409f24d81e0b create mode 100644 fuzz/corpora/server/773ab2a1a364c64cfcfcf3483c55d5a6163253c9 create mode 100644 fuzz/corpora/server/774878d69ec5e93cccc8b819177595a035aa7766 create mode 100644 fuzz/corpora/server/7770422ee967a542abd2d2d275f761a2c9ff1bbd create mode 100644 fuzz/corpora/server/7782403982076d6017b4e4244ae3bdc4045c40b1 create mode 100644 fuzz/corpora/server/7788e7599f953fd033990b09e56c4bb0b4857b32 create mode 100644 fuzz/corpora/server/7791a869b64c77f26d5ea93673229292502e710e create mode 100644 fuzz/corpora/server/77941b9d083af3903e78f8d4beae0dc52e072987 create mode 100644 fuzz/corpora/server/77b05f54f2a6376c2f737833b3249e5b0230cf79 create mode 100644 fuzz/corpora/server/77b4190e81d47c260b5365d81e859897ca8870aa create mode 100644 fuzz/corpora/server/77fee81bec6c49568e539fec410c9b8ce802a4e2 create mode 100644 fuzz/corpora/server/780e12cebfe1c7888851a1ccf17ac5fed0b8fefb create mode 100644 fuzz/corpora/server/78140806f440552add7ba8230a240f799ffe203a create mode 100644 fuzz/corpora/server/781a3a9245e1fd378527cf7a366016b49bbf7637 create mode 100644 fuzz/corpora/server/7822497240e4a0d535f1a64c3d45bcaf3af2e930 create mode 100644 fuzz/corpora/server/7843ff16cea11b703e9e3c7d13ce9dbc51922d59 create mode 100644 fuzz/corpora/server/788a32315df31454189934b9bf8edd3640958012 create mode 100644 fuzz/corpora/server/7893eb790d3e668e70af96931e977d549913732c create mode 100644 fuzz/corpora/server/789bbfd337e5c3ba55913937e91eb97e469660e8 create mode 100644 fuzz/corpora/server/78c7906032ccc9d2191c6802d2391947bcc1e940 create mode 100644 fuzz/corpora/server/78d1518a90cd092a1da53258924edf4ac818f9c8 create mode 100644 fuzz/corpora/server/78dfa163127c3c4b218d893b5340648d41b59b2c create mode 100644 fuzz/corpora/server/78eabc5ab117cb239d0b408287ea0cc636a5812c create mode 100644 fuzz/corpora/server/790dc6dcd020b0f6c61d90f475626bbc1633f637 create mode 100644 fuzz/corpora/server/795e79d385511771dd0cf0d8eb5df50e9ce769f9 create mode 100644 fuzz/corpora/server/79a58af0dcfdbea3742a74c01ef5d787f3924f03 create mode 100644 fuzz/corpora/server/79aeb11f5b5ff9bf0ead98976d520230ac721965 create mode 100644 fuzz/corpora/server/79ddb922e6a504d21eec555b26f8a22e44c13f6a create mode 100644 fuzz/corpora/server/79e2bf6007a2092e50ac209f5eed1c8c804f70f4 create mode 100644 fuzz/corpora/server/79e6ae61a5093776448fc5c9ee03af66f90ae6f8 create mode 100644 fuzz/corpora/server/79fa53cef4fbe0d9c5b76a02d4fb8737c662e223 create mode 100644 fuzz/corpora/server/7a009d445e54e51f354a9b52606ef45a05aad449 create mode 100644 fuzz/corpora/server/7a0d8f844f8df4aca595fb076939d23b16cb1f87 create mode 100644 fuzz/corpora/server/7a828f43dbe9abda9dc806d6a2033e954db632c8 create mode 100644 fuzz/corpora/server/7a99d22792c11a8a613bcf85eba226e0abc8c80c create mode 100644 fuzz/corpora/server/7ab1d7ff6b43ee88b826e286fa21a5e3e3d7e231 create mode 100644 fuzz/corpora/server/7ac1fae57a806ad8d22ad24b10a97cc12d5028e1 create mode 100644 fuzz/corpora/server/7ade2c51096accfb366c5e60d7d10f1e9e95b1ba create mode 100644 fuzz/corpora/server/7ae08e8c9ba9afd2b461943fd46a482eda57f121 create mode 100644 fuzz/corpora/server/7b03a6b54fdc0d183527e9b4c211cdf9168ec45a create mode 100644 fuzz/corpora/server/7b0e7626904080052ee07d786affc86317ffdbbc create mode 100644 fuzz/corpora/server/7b2b8d46dfb163e8f751a1e14be12da211e8c496 create mode 100644 fuzz/corpora/server/7b4a60a2618a77d5bd9ac3408b6616e2c00b13cb create mode 100644 fuzz/corpora/server/7b4bee5f8bfa3351a8e9dc9a0ab982ca5eff14d4 create mode 100644 fuzz/corpora/server/7b549b1179a25cc5b5ee2f89398fafae6ffdf593 create mode 100644 fuzz/corpora/server/7b739783d8ae0037603673048235dcaa547b4b94 create mode 100644 fuzz/corpora/server/7b8b5c012718a2a4de63d80f15f7caa0b6cc0ac9 create mode 100644 fuzz/corpora/server/7b8c2600d74cf2869be972aa7184c01f52bb6f45 create mode 100644 fuzz/corpora/server/7b9218b38af0e97ca41f67b769f143b835e5b514 create mode 100644 fuzz/corpora/server/7b9229287b7d8b66bc90084687af186841e7ca16 create mode 100644 fuzz/corpora/server/7bca4c9a6cd0eeebc53d5e6d5a88f3fffc840947 create mode 100644 fuzz/corpora/server/7bdccd065c2a48df8dd283e8a376307713004ef2 create mode 100644 fuzz/corpora/server/7c2a46c6244f9dc1cbf2e53957b0765a97f59170 create mode 100644 fuzz/corpora/server/7c3f8f40ed5f4b28842f72bb0583d811cedb1d62 create mode 100644 fuzz/corpora/server/7c4de20f9194fb5dc148fb8b85eac23ce38dfb82 create mode 100644 fuzz/corpora/server/7c727958742620b409036ea8831550a352ac72db create mode 100644 fuzz/corpora/server/7c9e1e19f87f15fe36acf9a1e66a5f36631d15a7 create mode 100644 fuzz/corpora/server/7caa0aa14e8ca7ff11055e35326ec174b1903147 create mode 100644 fuzz/corpora/server/7d558329a856bd487a20de1125a4a0b4aaa3a895 create mode 100644 fuzz/corpora/server/7d6375765c90d477ab95126d3665b085038fd229 create mode 100644 fuzz/corpora/server/7deaef5a355eba376b66070cfd7ea4c2e14ca78f create mode 100644 fuzz/corpora/server/7e056bc4cae1126ed873b5153d01a70cb8388a5d create mode 100644 fuzz/corpora/server/7e1956c3415f2b8248941f30ffc59f3d8a9696df create mode 100644 fuzz/corpora/server/7e595ea114451a665bd48b6d0a78e3fc7619f0b0 create mode 100644 fuzz/corpora/server/7e8d74e341371d2e877c24394706532cf1a9d23d create mode 100644 fuzz/corpora/server/7ed7dacd903a9680525908c5bcad05299effa1b7 create mode 100644 fuzz/corpora/server/7edcf07fc306a554855d3e48d211ab103891989e create mode 100644 fuzz/corpora/server/7f0ab479640a04e3007140edc429d0966955bbf0 create mode 100644 fuzz/corpora/server/7f13f825fc1e28140ad969075d5fda63e0789816 create mode 100644 fuzz/corpora/server/7f47b9c8facdd24da96f6b0023d84b25372074cf create mode 100644 fuzz/corpora/server/7f52ee40f7b6ee6436bbd865d43afd4c22aec755 create mode 100644 fuzz/corpora/server/7f70a564c77b7bb4afaeb87924757adaccf75a60 create mode 100644 fuzz/corpora/server/7f7f3025ae6d591e309f831fa3e8a6e7305415dc create mode 100644 fuzz/corpora/server/7f840f6dc9e67f45139147b26ce912de0630518c create mode 100644 fuzz/corpora/server/7f880d989073d20e9ed9d3f0863091d965a465ef create mode 100644 fuzz/corpora/server/7f92cfa4c550e0368dc8bec67277e77cd6a40bf1 create mode 100644 fuzz/corpora/server/7f9901149050d4e0dec785a92a05bf44398282ad create mode 100644 fuzz/corpora/server/7fe115e82cf70bbc9c9db5691e16e63235665a80 create mode 100644 fuzz/corpora/server/7ff92dab905f92f93baa1a8fb0c27e6d8c717637 create mode 100644 fuzz/corpora/server/80117e5cc04fc0dc4de8635662658d32042796df create mode 100644 fuzz/corpora/server/8020807517c534f485ec2355f2b3af71de11650c create mode 100644 fuzz/corpora/server/802cd3dc2c7f907103570409b8d2ec0c2c28238c create mode 100644 fuzz/corpora/server/805f45b162c5f395c193692034714a3b5396666f create mode 100644 fuzz/corpora/server/806ae3df44e61962131404b5383ada823511f23f create mode 100644 fuzz/corpora/server/80b4fd7a159e7c32ff61aac8e90b29b450b4b988 create mode 100644 fuzz/corpora/server/80cb8339020e70ddaf9b75269bfa1c48e27417a4 create mode 100644 fuzz/corpora/server/810d0b1e1e75116c73a86672f495f159044e8ac7 create mode 100644 fuzz/corpora/server/8138796724189385667e6334943ad6eee336ef5e create mode 100644 fuzz/corpora/server/813d119c6b112593126903e4ad5caa62ffcf3f6e create mode 100644 fuzz/corpora/server/8168bd224ca22d8d7b25802f25cafd862e577547 create mode 100644 fuzz/corpora/server/8186705dd28c2da19a7440691bfbeafba08b3009 create mode 100644 fuzz/corpora/server/819af2f8dd79a9531cdceee805ca7101859c6e03 create mode 100644 fuzz/corpora/server/81b705f2aae1d31f50b41425d5edc8ca2fb4973e create mode 100644 fuzz/corpora/server/81b8680066a97d591312217b1cf9520c4a8daeae create mode 100644 fuzz/corpora/server/81b9329d7dd4ae578679b06679ce450e10b966d2 create mode 100644 fuzz/corpora/server/81c97fdafe3db83a3d1f77877ab108b3644738de create mode 100644 fuzz/corpora/server/81d4683e57b9e82fe11c404fd892585201b946b7 create mode 100644 fuzz/corpora/server/81ff3d5716f7bdacfebc8bf8fd71942ebd0dff55 create mode 100644 fuzz/corpora/server/8200d1f80e25a1e25317e48d0c3d82ef149bf72a create mode 100644 fuzz/corpora/server/8242914565afd7ed7b202a4e7953a754e88e74c5 create mode 100644 fuzz/corpora/server/824fa3424f95412c9a455d10421e733ab36fc857 create mode 100644 fuzz/corpora/server/8299c53d6c00b3a9b44eb89cd571044788a23ea0 create mode 100644 fuzz/corpora/server/82a443c1da23407952391371d4276d3e985de085 create mode 100644 fuzz/corpora/server/82d8113a9e1210906c0af51fa1e5ffbad4314b65 create mode 100644 fuzz/corpora/server/82d9e92ee445f15d11a98b0c69d05c9dc47a965a create mode 100644 fuzz/corpora/server/82ea65030e0ad7bd34a4672d2207f0578b2fe8e8 create mode 100644 fuzz/corpora/server/8305c35612cc34a1ab0c7e3a56a6cb82f2b6e2c3 create mode 100644 fuzz/corpora/server/8308c8ce9b6c1598b995c9bc233fe07ace9190cf create mode 100644 fuzz/corpora/server/831ac0837bcdd8e33215cbf933dfd39f37358773 create mode 100644 fuzz/corpora/server/834d280176b6f20879452470094d5889109c1088 create mode 100644 fuzz/corpora/server/834d5e9a8c5a5ab64f43756d63aed2ea71678465 create mode 100644 fuzz/corpora/server/8359da77295e5c45006327f05c9aeb09c6d74412 create mode 100644 fuzz/corpora/server/835db2348f4e72450d4d094f86834f4f618e60d7 create mode 100644 fuzz/corpora/server/8365de9ba6c0bba0cc9a11d9d97e5bb436f87374 create mode 100644 fuzz/corpora/server/8368876f400556b1fdc5e4eee34109b42ccd0a54 create mode 100644 fuzz/corpora/server/84049bf17debceb4fe66242867e0ae22ccd50ee7 create mode 100644 fuzz/corpora/server/840a83a4edefdbef374182c15544d378fdaf0d99 create mode 100644 fuzz/corpora/server/84260c3429b84a5b490326eabc3a7e0feec81724 create mode 100644 fuzz/corpora/server/8432646bc4a030b8f542eb2d138f756d78eab91d create mode 100644 fuzz/corpora/server/843a8d40b65cd3ff96f12b7a742cb60f5be15c5c create mode 100644 fuzz/corpora/server/84667a312b254cb9f6250d073816907a16eb4918 create mode 100644 fuzz/corpora/server/84708d9fb4c33c933bcfe0c5ad79d3415d15bb71 create mode 100644 fuzz/corpora/server/8490bbefba8b96dbb4fe340a7d29c08a2c08bb49 create mode 100644 fuzz/corpora/server/84afce7563651f7d8afcc35cb81b6ee311173382 create mode 100644 fuzz/corpora/server/84b6554ee453ca9f0b941f503879103380319349 create mode 100644 fuzz/corpora/server/84f266960fc52c50a344c736994f24b7e3ad4661 create mode 100644 fuzz/corpora/server/850af3260a8326764bbd53b4c708b5d98beba55f create mode 100644 fuzz/corpora/server/850cb8ba5957707e14e1bae9220c89dc42363fb6 create mode 100644 fuzz/corpora/server/852727003d9db4418d69b4cf6a393c69d3ba27be create mode 100644 fuzz/corpora/server/85642f4db5c566b301f845a68f6601333a66fd56 create mode 100644 fuzz/corpora/server/8567aed03539422e24b83027d1f95963e9c43b73 create mode 100644 fuzz/corpora/server/8570d6053fb475cebea1b0299a0a5d2868f0bf70 create mode 100644 fuzz/corpora/server/857bdd738c6ab45d1d3f3e42667ba6a5937d5582 create mode 100644 fuzz/corpora/server/858deb95e726810be16fdb2ce1d584f9107947ad create mode 100644 fuzz/corpora/server/85b5d8007a85934675a67e89322a137d527dcbab create mode 100644 fuzz/corpora/server/85ba853a738af2a21bb1a2f69ef90832888a626d create mode 100644 fuzz/corpora/server/85ebdfb9899124839e007c5a14bf97618c110665 create mode 100644 fuzz/corpora/server/85f6056f6f41ebc5a3147663b2dea683bfe921e2 create mode 100644 fuzz/corpora/server/8624933046c652c2bca16c0119407bc228a7ce60 create mode 100644 fuzz/corpora/server/86300fb8518ae7bf0d784c9bad7dc871124a976d create mode 100644 fuzz/corpora/server/863bca0f37d4ebfbf995b639e3bfc53b770f179f create mode 100644 fuzz/corpora/server/8645f36753221a0879df3777edc217511fb23f94 create mode 100644 fuzz/corpora/server/868a5598f6ada8845bc0e180e442dcc5a4ab3821 create mode 100644 fuzz/corpora/server/86a449f6227e60d0d723e56186542ff492e5fca2 create mode 100644 fuzz/corpora/server/86b642a56d871c554cb8a1bf283fbd2d6f6429f0 create mode 100644 fuzz/corpora/server/86b8c9b916b18e3f313723ecd7639ee089f3e863 create mode 100644 fuzz/corpora/server/86c1602652372c08482035eeb0880e6ea9518844 create mode 100644 fuzz/corpora/server/86c3cc70c7533488cf7a8c720001db17409ab7a7 create mode 100644 fuzz/corpora/server/86e6b76fa38f3c23f9300c2ce9a493825775a9f6 create mode 100644 fuzz/corpora/server/8726dfe2b903928ff706d8c1251867b6af816c48 create mode 100644 fuzz/corpora/server/872ebb303267b845bb7f15db81349b9c18555bf3 create mode 100644 fuzz/corpora/server/875336b060f791ac2688ffd45ff6d10e4832b57e create mode 100644 fuzz/corpora/server/8757c4d6d76b5f0eff0da94e5f8719e58b122fe5 create mode 100644 fuzz/corpora/server/8769fbfa99a85490ed8a6247cb1ea64a57b876cc create mode 100644 fuzz/corpora/server/87746abd2443fa8fdac1506b57045103ecc67134 create mode 100644 fuzz/corpora/server/87828e9b24d3243fae0c1ee438679cb3540aa0be create mode 100644 fuzz/corpora/server/87968f39e3821793d8edf5955cbd762bd5952452 create mode 100644 fuzz/corpora/server/87b696935aeeee73f602f4a3b6d6973813e73150 create mode 100644 fuzz/corpora/server/87d5ad1470ae23edc412a8759b5ebbc9b1841603 create mode 100644 fuzz/corpora/server/88436a756ae4a6a0b50d00463794d660efacb38b create mode 100644 fuzz/corpora/server/88728925bba6027acf2639017dde387aaace3692 create mode 100644 fuzz/corpora/server/8892b0bb6f71bfa5bd8a503b0df0d7113efd8634 create mode 100644 fuzz/corpora/server/88d1f619c2134113545bb9e5209d60429942847f create mode 100644 fuzz/corpora/server/88e0bb0fe71313e65a4f933f80d62910361c6d66 create mode 100644 fuzz/corpora/server/88f87893a7cff48e398cf55791fcc265e8d3e584 create mode 100644 fuzz/corpora/server/8957a7c2604a1d06f092ce3607afe9e9c07dd2a1 create mode 100644 fuzz/corpora/server/89586218f15169bf6b31a680c2877048a60198b4 create mode 100644 fuzz/corpora/server/8960f2faa59b2f7d013ff28f7e6a3f081a90c030 create mode 100644 fuzz/corpora/server/8971aacff7bcd0bab75cd92d46862c24f71bd677 create mode 100644 fuzz/corpora/server/89768c0a4347077c3c0a3d1a3e7c2b21ffab1203 create mode 100644 fuzz/corpora/server/89a07c20d412b85f52f9e69bea5b16be20cebe98 create mode 100644 fuzz/corpora/server/89e9fa0c5d94b9ff0cc846103706d903d09c6b36 create mode 100644 fuzz/corpora/server/8a11d2b0835d0364e0dd6c6e78db7e7edfbbec95 create mode 100644 fuzz/corpora/server/8a2883d5d083bf4eec92638e69d92b3bdb5989e6 create mode 100644 fuzz/corpora/server/8a38e76fe9fb6b858d165e2a3c3b396b4e8ece24 create mode 100644 fuzz/corpora/server/8a445c523d60c2936955af0d086a7b80947c8852 create mode 100644 fuzz/corpora/server/8a4ab099496ece35eeb0c8a88f8714b237d48896 create mode 100644 fuzz/corpora/server/8a53f1d8364289cce11b1a902cbaefd42fa314c0 create mode 100644 fuzz/corpora/server/8a5c4749fa87a1743f5a2b01ba4c85072759161f create mode 100644 fuzz/corpora/server/8a773771297f3b114ddd276fbf9d7e44a4750ba0 create mode 100644 fuzz/corpora/server/8a8318ef72db5a497aba63e8712c3f33151fd61a create mode 100644 fuzz/corpora/server/8a84a038fc7f8900a283977e34b67cf33734a1cc create mode 100644 fuzz/corpora/server/8af1357e2e468c26419e8d3173dbf888df6267c7 create mode 100644 fuzz/corpora/server/8b1b12f4f84a1c7de8da12d301944c6499855997 create mode 100644 fuzz/corpora/server/8b54a512d1bd9f991de2d96503b48f4e50718977 create mode 100644 fuzz/corpora/server/8b9c83f869546fc578f5efe65a1422521281b556 create mode 100644 fuzz/corpora/server/8ba642c771f2f07ff8dfa54d99bc2beb76c7172e create mode 100644 fuzz/corpora/server/8ba8d8ccb95c0eb7e520a0f2d121e1a2e2c55a20 create mode 100644 fuzz/corpora/server/8bb4d4114cb2ef2f7c3dd48f8cf54d1ac81bb42b create mode 100644 fuzz/corpora/server/8c0d43fc84fc0ffef1705c086fef0e9005b83a34 create mode 100644 fuzz/corpora/server/8c20fc51f00ec70a32d927aaa8cceb4f9f2edbe8 create mode 100644 fuzz/corpora/server/8c2e60f440c519b57750f978fe96b6008bf12a8b create mode 100644 fuzz/corpora/server/8c5f050bfb8b86a7faa9ee155d4b2be09bd18bca create mode 100644 fuzz/corpora/server/8c7352c96be76966d40c7c7227f868bb389fc8f0 create mode 100644 fuzz/corpora/server/8c75e3d1f64a07aa9e7d9e5dc80d17dafa8a3ca3 create mode 100644 fuzz/corpora/server/8c940139c528d8571625b5c5997f67d561de3a7d create mode 100644 fuzz/corpora/server/8c94d8cb578aadbbb1a6227c099f935f5f02b8ec create mode 100644 fuzz/corpora/server/8cc028762803174c4de73e07f84b1c432366ed4d create mode 100644 fuzz/corpora/server/8cc5b9586be1d1f94a03e6e1db1fc8f43df1eb26 create mode 100644 fuzz/corpora/server/8ceb24033a752144a71fa8db1c97dee791fa14e2 create mode 100644 fuzz/corpora/server/8d261ff6328130b217f1b5d1103884d361f4af40 create mode 100644 fuzz/corpora/server/8d3b91dd78eace1e67ce58a922d50a029daca860 create mode 100644 fuzz/corpora/server/8d51b84fa9930481096ead7d95fb80466a21b741 create mode 100644 fuzz/corpora/server/8d5a9f73f0562196c85782b610be5c16252f62a3 create mode 100644 fuzz/corpora/server/8d6aaae21fbc52c45145be232a8ef29fa7907d31 create mode 100644 fuzz/corpora/server/8d9decb5430c7d7c081431e118c390cb3b14fcff create mode 100644 fuzz/corpora/server/8da4eaf505edf2c2dae36f4c7a58e88c376cc334 create mode 100644 fuzz/corpora/server/8dae8e93f714cef5c7fc85c297708a4b7ab5aedd create mode 100644 fuzz/corpora/server/8dc5726ed785a2302c6058637e1dd8b470c83463 create mode 100644 fuzz/corpora/server/8e3238396f52f56b769e8dec792f920457dd47b5 create mode 100644 fuzz/corpora/server/8e434bef3490ee99911db1064be475b0a8142629 create mode 100644 fuzz/corpora/server/8e46d05a2ba08720870b741f70006b7819234be8 create mode 100644 fuzz/corpora/server/8e70607cce018bf12667b98431669503424d7205 create mode 100644 fuzz/corpora/server/8e7c0ec7cf8049be6b73a613287aa5a5a161cbc8 create mode 100644 fuzz/corpora/server/8eb391a9badc732390207f1ce5daa7da868c4caa create mode 100644 fuzz/corpora/server/8ed1473b918863761680883d4b44c1fb88d073ad create mode 100644 fuzz/corpora/server/8edb51a170abba42b957cde624b6fb538277f040 create mode 100644 fuzz/corpora/server/8efca387d799a34fcd2b7eb65ee68c9254abebd0 create mode 100644 fuzz/corpora/server/8f06932d81baaeba819b955091dd522c436c15bf create mode 100644 fuzz/corpora/server/8f16abdc4aa21aa6d0e43644c26a9151432c4c26 create mode 100644 fuzz/corpora/server/8f218f89e41132b78c80d727c29bb347c7cac92a create mode 100644 fuzz/corpora/server/8f3f396cbe90f90595c80f52983ff8661b7829d3 create mode 100644 fuzz/corpora/server/8f40fad84d869ab0622e0143fb0a9300fb2b1e3b create mode 100644 fuzz/corpora/server/8f43332cb2411d5fcd44531f88fb8d9a4c1b2767 create mode 100644 fuzz/corpora/server/8f5e9f2e641a91d64814cdee93efae2cf3bd3708 create mode 100644 fuzz/corpora/server/8f7870993d5d4f455db06d9239c3cfe3bebde2b8 create mode 100644 fuzz/corpora/server/8f878c9861011cbc0d15f9864b0d8106824c45c3 create mode 100644 fuzz/corpora/server/8fa4b2b17ec369247f44251d6b481612dac91852 create mode 100644 fuzz/corpora/server/8fa6ca31835c5d11356b61dc1f51c6529930d9a9 create mode 100644 fuzz/corpora/server/8fdd75546449bedc2a421c57b6dc5ee3ee6a4428 create mode 100644 fuzz/corpora/server/8fe11b28cdce1cff3b1f5328993da6b19e0745ac create mode 100644 fuzz/corpora/server/8ff6dbcf3c271b4ca1184640c51b71bdc19f4a04 create mode 100644 fuzz/corpora/server/900f59330201f1c830766a247b206ad102d7475b create mode 100644 fuzz/corpora/server/9026b3ee9638f5da38a2118c6cbd89b782eadb1f create mode 100644 fuzz/corpora/server/904c9519b88289a960d8b2a1c1b13e9ff1befc83 create mode 100644 fuzz/corpora/server/9092d25f44102b3c7c67ec7454a7aef95813f2c0 create mode 100644 fuzz/corpora/server/909d9bebd033c387a748d6993149656891c30459 create mode 100644 fuzz/corpora/server/90a437bb90d90c19ae8854c30c2534517b59e383 create mode 100644 fuzz/corpora/server/90d27172c4d30c1a7cd7859171c1a33a5d540aaf create mode 100644 fuzz/corpora/server/90d590599636d9219b2073c1bfc17d755ae80e3d create mode 100644 fuzz/corpora/server/90fc85def964de1129553d424411cd5b18883c8f create mode 100644 fuzz/corpora/server/911769594972d67a6faec246b2fd627130b1fd7d create mode 100644 fuzz/corpora/server/911db10a7e66363e93bfc929d5b03ddead9c7eba create mode 100644 fuzz/corpora/server/911e4de97ce9d819d86fa96330953fbd7e977a2f create mode 100644 fuzz/corpora/server/911fdc0ecfaad129612522101123bc179660cf61 create mode 100644 fuzz/corpora/server/9128998e6ea35bc3e0e08c8590d2d3f9265497ac create mode 100644 fuzz/corpora/server/913979927477ae1e019d0202551df4635a3ae17a create mode 100644 fuzz/corpora/server/9150b19d1db77d66a54f4e62f7e9103872029cf7 create mode 100644 fuzz/corpora/server/91683c60f8c75edbb45db509e8038b2548e3df29 create mode 100644 fuzz/corpora/server/916ed6493e90b92154196a3e1fcce34b50b1f3ac create mode 100644 fuzz/corpora/server/919a60130e8c0eac23556f1d4de6cf017d383d42 create mode 100644 fuzz/corpora/server/91c7867f1442e4f7842070e297d517aa94f9434f create mode 100644 fuzz/corpora/server/91cb21aea76dcaebce0e9b472ae498d2aae2d3e2 create mode 100644 fuzz/corpora/server/91dd6c5ccf109a48709314782a954469fcafaf79 create mode 100644 fuzz/corpora/server/921be12cebfca6fdf1f17b5dc82c08933ca5fa93 create mode 100644 fuzz/corpora/server/9227d557e90ec20511697c9aa16a03ff47ad4853 create mode 100644 fuzz/corpora/server/9242db1f5e8d077bd49ae43b77dd9fc12098ab8b create mode 100644 fuzz/corpora/server/924391657a05ba1444bbfc7b68ef489a52ad661d create mode 100644 fuzz/corpora/server/924cfe3a71abc702e7d011420acf71dc87ea8b92 create mode 100644 fuzz/corpora/server/9261d9efc320f98807a61b08008a6838b4d57ae5 create mode 100644 fuzz/corpora/server/928b3f3f86886f729d71d1e485c89f1e5241ff4f create mode 100644 fuzz/corpora/server/929c75f44f82de5a93b54b01672986c93df32b91 create mode 100644 fuzz/corpora/server/92d273e0ffd2e84492dec32a4fa8c1addb06ff6f create mode 100644 fuzz/corpora/server/92e0b1d42c19323a4c66c695217a9ab91b70e08c create mode 100644 fuzz/corpora/server/930e3777c326bc2769c64147d7fbecdf092c0a13 create mode 100644 fuzz/corpora/server/934deb74c62f452fc327d325970778c50f1e3e59 create mode 100644 fuzz/corpora/server/9368ba7ee87238c51f65a85a74df4c22a9b50896 create mode 100644 fuzz/corpora/server/938ae46368f21742cd2df76bb5cc9bee5dd3ead3 create mode 100644 fuzz/corpora/server/93b60a2e0a6d7cbc68c8c8c9697aa92f8c6556ab create mode 100644 fuzz/corpora/server/93c976dfe11b0a9d1f6a1a587b1212dcd3c6f213 create mode 100644 fuzz/corpora/server/93e5defa78f3f8623aa56977f072a436a99b7276 create mode 100644 fuzz/corpora/server/93ea70b22778a58e8d0dc081af17d702e015d464 create mode 100644 fuzz/corpora/server/93efe84b8fae4da5cfee52c16785d408b146d5c9 create mode 100644 fuzz/corpora/server/9420dd91fd6d61504d7839a38bfe3f05de0d5d89 create mode 100644 fuzz/corpora/server/94254b4474c9b82a2811d68cd090ab2cb1875e28 create mode 100644 fuzz/corpora/server/943168497cc9a11a06ee678b756860e790a88496 create mode 100644 fuzz/corpora/server/943550e8d8ec7cb678a55a7ec5e4e5966105300d create mode 100644 fuzz/corpora/server/943d29d28b6d45dedaa45d3f4b0b0353470e8ecb create mode 100644 fuzz/corpora/server/946ee96590da5f0af4c4f128936fedc511e980d0 create mode 100644 fuzz/corpora/server/94772a88f7d486c3c8e5adfba6e685ce8bf8909d create mode 100644 fuzz/corpora/server/948983539bc6ace0b105ba70a73c42f3cf443e83 create mode 100644 fuzz/corpora/server/94a60b4c54539e619577825bbb9adc5e5779d150 create mode 100644 fuzz/corpora/server/94b3d9bed2f9dfa635c80adaf9bc8af1f0ddde0a create mode 100644 fuzz/corpora/server/94c0493271ea3a60f45e4d0fde698de4d2cac2d9 create mode 100644 fuzz/corpora/server/94c512318044b3cbc2a4aef946ea2f71c279a209 create mode 100644 fuzz/corpora/server/94ccc0bcda713b03a8f3cfc7d51224363b3772f8 create mode 100644 fuzz/corpora/server/94e0c9b72aaf4a24fc1ac36b03e190c9d795f215 create mode 100644 fuzz/corpora/server/94e33cc171d1cf39205f0e301746775f7be9d30b create mode 100644 fuzz/corpora/server/94f1418db6abf7189d2f9fe3398e05663708ae95 create mode 100644 fuzz/corpora/server/9504b19d7e99f8be2fa167e5025473d2b2a171a7 create mode 100644 fuzz/corpora/server/951043eaa39ea5fcf06e6260ff99009f075e86ee create mode 100644 fuzz/corpora/server/955a70d7b4f615ad6c2151d2209e7e3349ddaf42 create mode 100644 fuzz/corpora/server/95c2cd0a53df976d26ab2d9a94a781c89ec09e0f create mode 100644 fuzz/corpora/server/9628942bb7894835911fe743007fd984f01af88f create mode 100644 fuzz/corpora/server/9640009d8ec8135602b038a2a2baddb9ea1637b3 create mode 100644 fuzz/corpora/server/9645f1405d4deb40cbc8bd5651cf638d1dff691e create mode 100644 fuzz/corpora/server/96538bf453870218a55c0023ec8316e603211b1e create mode 100644 fuzz/corpora/server/968608baf60ff00626562a75eb070576270c3bbe create mode 100644 fuzz/corpora/server/96aeb2475e83ba208a22be1257d6328f67625806 create mode 100644 fuzz/corpora/server/96b27c4d4412262d027dafd5dab867fc2259ffcb create mode 100644 fuzz/corpora/server/96c740cb445cb8e310d379fc5534899d33d911ee create mode 100644 fuzz/corpora/server/96d9636fcac427f4648b683d3328e019f7e98130 create mode 100644 fuzz/corpora/server/96fefe64542695f17adc10149520321d8787843a create mode 100644 fuzz/corpora/server/970d9410b445cc363250c57b24153b5757b73353 create mode 100644 fuzz/corpora/server/9718224bf8fb1b17c08672064ffe69b9eff28a68 create mode 100644 fuzz/corpora/server/974c3d58469736ec30908cc4bca170bd78fd10dd create mode 100644 fuzz/corpora/server/974c555fb1bfa5990dc9725817915b9eb50b16fa create mode 100644 fuzz/corpora/server/9751a96303cae5a5e5cd9af6cf3ea546c18bc7b4 create mode 100644 fuzz/corpora/server/97545d8653ef729a76f16a985c0e1c99b5abdbf8 create mode 100644 fuzz/corpora/server/975dc79d449862d2df9a45a73a67acf864e49338 create mode 100644 fuzz/corpora/server/977dcb570e6c284f2b0bba26c312adbaa8317d59 create mode 100644 fuzz/corpora/server/9785c7cce9c3fd97ea2a7a7e26f635c296af541d create mode 100644 fuzz/corpora/server/97899cfc1e0ca6436c83aecd0b7f56f392f68cf1 create mode 100644 fuzz/corpora/server/97bcb80165965cbe5b4ed036bf26be309c83e9d8 create mode 100644 fuzz/corpora/server/97cec3d3e0b844d175d63c8dc9c4e917c6154bd8 create mode 100644 fuzz/corpora/server/97f7b7728209cd96862f410c545e50331eb3e8dd create mode 100644 fuzz/corpora/server/97f94a6040614df7dedb55210d6001f95e7ac01c create mode 100644 fuzz/corpora/server/97ff7dd359cc3f77ec175d89ecc30a1ce8712ef0 create mode 100644 fuzz/corpora/server/9819739a38bbfb5c131fb3f03c7c9d1763801b37 create mode 100644 fuzz/corpora/server/9829e6ac7dc8461e054ae8dbecf0f5f83655b1e4 create mode 100644 fuzz/corpora/server/982c74d65ba184ed73d926af0131f5bd0fb3a1b1 create mode 100644 fuzz/corpora/server/9836c7f8a6bb53626563cbf3c9e62e380afa9ba1 create mode 100644 fuzz/corpora/server/984a88b60e947ce745a272449f928507a3975f0b create mode 100644 fuzz/corpora/server/984cd6f045dc5291dc9ce3612dfcf5a81db9aa5c create mode 100644 fuzz/corpora/server/986b2b9927b85c684ef61dbb970f90e8f713d727 create mode 100644 fuzz/corpora/server/9882fa2338f72e7961d9ba339fe1962449bef484 create mode 100644 fuzz/corpora/server/9892f0a7a7c67f69030ef8f5a127d24709df5c23 create mode 100644 fuzz/corpora/server/98c0d2537f157fbd14558128f132e9004bdba342 create mode 100644 fuzz/corpora/server/98cb6ccd979e958444e890febb949927fc05e83e create mode 100644 fuzz/corpora/server/98cc3ef6bee271fbda52f1bb87b71db5854a72c3 create mode 100644 fuzz/corpora/server/990d38794f5200e527b080bb00969f2563464b70 create mode 100644 fuzz/corpora/server/99142891564372a5df2b350a4739b48d9e5b2410 create mode 100644 fuzz/corpora/server/993e603ed98f6d9dfbea3e3eacfddb9c025d8dcc create mode 100644 fuzz/corpora/server/998fd87cea37055e1d2e0648be9a52f65c94ba96 create mode 100644 fuzz/corpora/server/9995574ba17377235115f8277b1b18174c0872e1 create mode 100644 fuzz/corpora/server/999f6871faf2bd5e98ebf4fee399c23f101f2cfb create mode 100644 fuzz/corpora/server/99a84ad620172518cf4bcd46e0a27b19b3e06034 create mode 100644 fuzz/corpora/server/99ae03d785473cfc9ebb3fe5c562b1e0495a48ec create mode 100644 fuzz/corpora/server/99ca367b2ca260d66bf16f4ae3306acf5a7e5b53 create mode 100644 fuzz/corpora/server/9a106ac82bc059e5f591dcd6dc60c4e9688d3f4d create mode 100644 fuzz/corpora/server/9a396fd0ce7e948e49041313441f82c99d54e369 create mode 100644 fuzz/corpora/server/9a44db2346501475ef5efe786e33584fa2f1f0f1 create mode 100644 fuzz/corpora/server/9a57c9feb721dcc135cc755ac5efa1887d732767 create mode 100644 fuzz/corpora/server/9a63bdace5fecda78df7d1add25956fd7a7099cc create mode 100644 fuzz/corpora/server/9a6a2549c3b1beaa685f7b92c41824eacad50fb3 create mode 100644 fuzz/corpora/server/9a768157871bda9badc877d26caed4df26fe6bc6 create mode 100644 fuzz/corpora/server/9a785aa2e18f8a3cb4be5b12d445b2a9ea2977d5 create mode 100644 fuzz/corpora/server/9a7e3fed7a5a81aa72303db616c2c07c75b4fbf6 create mode 100644 fuzz/corpora/server/9a8a2f6e9fcbd2584fa1ea28ded77ee41a7fc41c create mode 100644 fuzz/corpora/server/9ab992ec92e6aa900bbf607ae81671687ea14cee create mode 100644 fuzz/corpora/server/9ab9d13e7f99c64d5bfc823a10e4b4dc15d7b89a create mode 100644 fuzz/corpora/server/9ac3a4307e8953804e18c2eeca68fa7effb1fa53 create mode 100644 fuzz/corpora/server/9b1a33111d6830bb3139fdc34c9ff7017bf11928 create mode 100644 fuzz/corpora/server/9b31eefd6ddba5206f8ec8a5189180fc8811cacd create mode 100644 fuzz/corpora/server/9b715cd083bb83d4448f938125b71abe45d45228 create mode 100644 fuzz/corpora/server/9b7bea983050ccd7534bb5a049222e1eede08c5a create mode 100644 fuzz/corpora/server/9b89788e47befb73d63e9713e05efbc44a7ade66 create mode 100644 fuzz/corpora/server/9b92582a690827f22c393b1b527338aa44a8eb90 create mode 100644 fuzz/corpora/server/9babf2eca3ab73eb519e50a58ac73a137b9a0249 create mode 100644 fuzz/corpora/server/9bad7bbb254b736fbec4996e01e38fc736bd8e67 create mode 100644 fuzz/corpora/server/9bc9664fa2d31211176afe4130a0217d2454ce0c create mode 100644 fuzz/corpora/server/9bdde8816b426d59115be8822abbcdf8d3f99c93 create mode 100644 fuzz/corpora/server/9c0b49e16e3f92a678a17c827219663e2393db76 create mode 100644 fuzz/corpora/server/9c25200aa49c250e4c62f088de9337ccefcb1a0c create mode 100644 fuzz/corpora/server/9c5496bbcb08e7076cdf0be1326db30f8930b514 create mode 100644 fuzz/corpora/server/9c58bb1f603c5168e0eaf83ff1d8faeaf0149840 create mode 100644 fuzz/corpora/server/9c67037cad68df8568391a69048a5f5309baff2d create mode 100644 fuzz/corpora/server/9c7faae0e7dc09742095da3fb77ec340d41f912e create mode 100644 fuzz/corpora/server/9ca045d7751af9b083b6078641d6a84a43a458d8 create mode 100644 fuzz/corpora/server/9ca8ae46c4da07ce94779d1d0aa676e8344e572f create mode 100644 fuzz/corpora/server/9cc769cad6656a5f95ea9e3f1c305078ec17c0fe create mode 100644 fuzz/corpora/server/9cdc54dc300a1d0ad572b8057762ac8916a6a3fd create mode 100644 fuzz/corpora/server/9d128967ee2ffd01ef19a0b37b2453309d61becc create mode 100644 fuzz/corpora/server/9d45a9bb07f353965d8852e05bdfdbbf7ba219a0 create mode 100644 fuzz/corpora/server/9d51ba23973bccbefdd58a6b3c711afd02f82e4a create mode 100644 fuzz/corpora/server/9d5fa7dafb40b670137511821954be9f7d0d5c97 create mode 100644 fuzz/corpora/server/9d8478d68461a5318ea8fe9c1cc4cec27291398d create mode 100644 fuzz/corpora/server/9da88658e956b866e0a89f7a9993745aa514fb96 create mode 100644 fuzz/corpora/server/9dc24e3c86aa47487cc90033030fcf24229583d5 create mode 100644 fuzz/corpora/server/9dc77945f5f3f946366249f4065c4c48f1ca440f create mode 100644 fuzz/corpora/server/9dce8e8069c6a25a894b2203179c6f396de264ac create mode 100644 fuzz/corpora/server/9dfa9cfb862e80554ec754e18437bf6b2e4705ac create mode 100644 fuzz/corpora/server/9dff98fab7f9e42caf72b48f3786ced3b2dec714 create mode 100644 fuzz/corpora/server/9e013e36fd778fa65ebab8dcf23843abe7ad7266 create mode 100644 fuzz/corpora/server/9e0bc1fc914dd422d8f1fe06abe7b4dfc98695dc create mode 100644 fuzz/corpora/server/9e5b02285324f04c516a87d471fbd110e86ec816 create mode 100644 fuzz/corpora/server/9e5fed224ebf859856c9df6de2c2b51f371b6d61 create mode 100644 fuzz/corpora/server/9e746918e3bc28db9af4449960671117bdb7108c create mode 100644 fuzz/corpora/server/9e816a37c2d71764d3739d959c3273f64742dc55 create mode 100644 fuzz/corpora/server/9e8670db387d16d7c2bf73512535bc832bdd9e28 create mode 100644 fuzz/corpora/server/9ea4cc9ce8503e7dfc30b6e9dee9c2dbd8ece375 create mode 100644 fuzz/corpora/server/9ea62085c60751e65d08a2565f2e142e1b85550d create mode 100644 fuzz/corpora/server/9ec5c7bb652515ea78e2426e72f8a07109e4f58f create mode 100644 fuzz/corpora/server/9ecbafd51ea2de08fa23905d3a6bc955afd79492 create mode 100644 fuzz/corpora/server/9ef49a1a23eeaf8637e5d1d03ef7c138a6aa9042 create mode 100644 fuzz/corpora/server/9ef90b908f79c6dc54fe81945da5f471cdf695ea create mode 100644 fuzz/corpora/server/9efc3b85de4accf749a67cacc2d3ef49d69a97d9 create mode 100644 fuzz/corpora/server/9f18ccf81b9c5462b41741b45da7f52a572577ce create mode 100644 fuzz/corpora/server/9f8ab89a177e432e8f16ba4975ef5d3cc537fb8f create mode 100644 fuzz/corpora/server/9fb3dfac1cbc405d517dd2ef40e4767db21534c8 create mode 100644 fuzz/corpora/server/9fbad2794cac43a526e771577f5bd84614892440 create mode 100644 fuzz/corpora/server/9fc2ece8a6a5d81ec704410ce93b94123249b58d create mode 100644 fuzz/corpora/server/a00a545c6c696793e087207a9e5a006994e54c49 create mode 100644 fuzz/corpora/server/a00de4765aad05322a5fe67772101705123b5bd8 create mode 100644 fuzz/corpora/server/a03415fae1196dec2be157fd92cc1a88ac8b0d36 create mode 100644 fuzz/corpora/server/a050c780e6ed1e39139bb51456399ab3a16065a8 create mode 100644 fuzz/corpora/server/a07b7fb86b1f9815188eb2c2e19cfbba1d30e7c1 create mode 100644 fuzz/corpora/server/a099a6fd8b132e5b5ba0ce8f83364f6352db5c30 create mode 100644 fuzz/corpora/server/a0aa0d0cea8bcb80e38719aa99da3ac9b14781b3 create mode 100644 fuzz/corpora/server/a0ad8644a51f0818108bf885f52ee326f7acc17f create mode 100644 fuzz/corpora/server/a0d9e783d46acfd7452db7d870ac902f5b40d0c4 create mode 100644 fuzz/corpora/server/a100675e8eb0abc5876c3657788aa278989356a3 create mode 100644 fuzz/corpora/server/a120fc6eec359afc3735105eb60d58a39d62afd6 create mode 100644 fuzz/corpora/server/a140dfc6062c603a0f03ae9d193e529a3d4d1628 create mode 100644 fuzz/corpora/server/a1595f7332fdbb355bc7be73f92b224c8d59e1b7 create mode 100644 fuzz/corpora/server/a165e3b9dba2bcbdf3226e77f8afe53509e95955 create mode 100644 fuzz/corpora/server/a17589404724b25c5c57e1384ff10edd6fc5090e create mode 100644 fuzz/corpora/server/a17b094396feac8f65717724bbb6d6e2519d01af create mode 100644 fuzz/corpora/server/a1a6fbd7d7940ad43632bff5478f39b94de97ce2 create mode 100644 fuzz/corpora/server/a1a8cf2f2d3fa165a353ad527c479425dcab3183 create mode 100644 fuzz/corpora/server/a1c284771ad5df5000f70f7e1f1faf03e8e6caa0 create mode 100644 fuzz/corpora/server/a1c3f10a24f17b9644c12d5cc7b3019fef1158f3 create mode 100644 fuzz/corpora/server/a1dcf87018649ae77f787ff39953a0ce0a89480c create mode 100644 fuzz/corpora/server/a1e0bd9476395ad99a096ccaa9e111e479081e96 create mode 100644 fuzz/corpora/server/a1e12a6767b59623e0510e770eca9defb497b2ea create mode 100644 fuzz/corpora/server/a22da2b75abdb1535f91a53d23ad6b8e611d8bfd create mode 100644 fuzz/corpora/server/a277381ad692ee73d5c4f8336a31ab84f6ed1e8b create mode 100644 fuzz/corpora/server/a28352d9beff41c6b8c136e649e5a798b53ca132 create mode 100644 fuzz/corpora/server/a2859577ed1414250fd8f4005a1f27268b9597e5 create mode 100644 fuzz/corpora/server/a2a97a4622e4b7f65616117e632cd3b6a077025b create mode 100644 fuzz/corpora/server/a2c008095074eba43c1ffed3d7b49d67a429a5dc create mode 100644 fuzz/corpora/server/a2e77bdb9742a46bd927dd61d492a8caf28bf08b create mode 100644 fuzz/corpora/server/a2f6f5a5ba921de8419899dd2e1ed079b41f1f02 create mode 100644 fuzz/corpora/server/a31a2814717e9cb37abd85be7ba2132840ca9103 create mode 100644 fuzz/corpora/server/a326c84a422bf5d5cc73eadfaea29f41765e1809 create mode 100644 fuzz/corpora/server/a32ca079a181d54aa58f09a61315efaf2ba80877 create mode 100644 fuzz/corpora/server/a32e5442a65f84552abdf15666ff36a8d7a8a735 create mode 100644 fuzz/corpora/server/a353b86715b9d0250aec7afca0fac0cc1733b950 create mode 100644 fuzz/corpora/server/a35841b58a668bdbb3d82855c0da5b6a20ec6325 create mode 100644 fuzz/corpora/server/a35f29c58810f51d3c0c5a607d1a184023081967 create mode 100644 fuzz/corpora/server/a379bdf247ed5fefe79936447094d3e3f4642196 create mode 100644 fuzz/corpora/server/a37b47d86a3e57589b54df21027238ae05b8d03e create mode 100644 fuzz/corpora/server/a3992dbf968b6d749a1c0b65547b0414eebd78de create mode 100644 fuzz/corpora/server/a39c6c1e91077c405e5ebd156ba2f223f4e43d74 create mode 100644 fuzz/corpora/server/a3ace6fb21d5f84727ff82dc09ed1f5339bc8eb1 create mode 100644 fuzz/corpora/server/a3b3cafb49b045974cb2fb66e6047bc6be38e3fa create mode 100644 fuzz/corpora/server/a3e3d3c7bdfa8ea2f874d5850a1d05029fff8a22 create mode 100644 fuzz/corpora/server/a3fc911c288e24e29146b368e3178c43f90e5f65 create mode 100644 fuzz/corpora/server/a401b18a382d52b2e5915942691c2ee01c36c42e create mode 100644 fuzz/corpora/server/a4143343fab72e53619d0ce0033d3fb70ddb8f99 create mode 100644 fuzz/corpora/server/a4206743886a1824a113410ff1c22d589b312c7b create mode 100644 fuzz/corpora/server/a425d882aa149920e53f7b0fdd53019aaac69256 create mode 100644 fuzz/corpora/server/a42d1ed3e67d5d9eb689fa6eb2c3c02cf163e78d create mode 100644 fuzz/corpora/server/a43b2f67459273f34db5ea28b26644050ddc7d89 create mode 100644 fuzz/corpora/server/a46c36163372b84796218d16675eb82bb5db7502 create mode 100644 fuzz/corpora/server/a47b48a519b08ac370a3a4cc8261b209a517ae7b create mode 100644 fuzz/corpora/server/a49542e61cb314c3e98a0203fec39c8e7dd232f3 create mode 100644 fuzz/corpora/server/a4f4ca33f3a1781428cdfd11a9a6dbcf7f8d6f09 create mode 100644 fuzz/corpora/server/a501acfb1704032c3699a48b86c70052d2fe5b0a create mode 100644 fuzz/corpora/server/a513ae8b15ef0acac9e2de1e365b8a26ba804a48 create mode 100644 fuzz/corpora/server/a5159b8fc6f6b0e4d231c9766548aea477c1f5cb create mode 100644 fuzz/corpora/server/a545978201e8b844126f3a66ca5024370c6d4b73 create mode 100644 fuzz/corpora/server/a548748f3f86b3f478c93e475e03fa5c4f864302 create mode 100644 fuzz/corpora/server/a55f31b70a594f49aa7157b50521f626ba36d426 create mode 100644 fuzz/corpora/server/a5892b869db9586c85539b9a42293cbcc4a956b4 create mode 100644 fuzz/corpora/server/a59808abbcb5bcb58fa0300c7615853711b66b01 create mode 100644 fuzz/corpora/server/a5e32b326e17d77eb5e552539704480714da85bc create mode 100644 fuzz/corpora/server/a5e6f5502ade86482e5583bc4eae1c99b0bc46df create mode 100644 fuzz/corpora/server/a61acf97aa093ffecd7ef28556dfc41f9d982b36 create mode 100644 fuzz/corpora/server/a62561a30e2190c961bdf5f9c08dda71813ba3f9 create mode 100644 fuzz/corpora/server/a63241ac68fc6b69227c57152935c86d64f99f78 create mode 100644 fuzz/corpora/server/a633f7b3152fae3de14a9f731bcd702af6744f2b create mode 100644 fuzz/corpora/server/a65f0a06a82ab82e29ca19d0992dd8341e9f8fcd create mode 100644 fuzz/corpora/server/a6686d010322cb652cd1ac94e41aa2222cdd7ccb create mode 100644 fuzz/corpora/server/a66c05ee3504e6e63e568a79114423184ab23da9 create mode 100644 fuzz/corpora/server/a680148e2557805240eb5f5a2b98e9c9aa624034 create mode 100644 fuzz/corpora/server/a6a819ae3c63172f7f66ab7ab0260c8cf858264b create mode 100644 fuzz/corpora/server/a6b2c83f758095276b49cd7f32bac715b6812f2d create mode 100644 fuzz/corpora/server/a6d90753b8491cee22de010c2bccbc1d5915d5e7 create mode 100644 fuzz/corpora/server/a6db0d1e84dd96c7329fb618f70f516f60decddf create mode 100644 fuzz/corpora/server/a6de0c389c43e61e2fbdff94e5c6cfcc29c2db47 create mode 100644 fuzz/corpora/server/a6e4abf75d8af9ec054936c97b8802a195841539 create mode 100644 fuzz/corpora/server/a6f78b2657fdc06c0dd573eb3d41253e99dcafea create mode 100644 fuzz/corpora/server/a70183f22f62bced0857f5a81c2ab9116a3054a1 create mode 100644 fuzz/corpora/server/a77932944023505f42225c35d3c18477e2278c46 create mode 100644 fuzz/corpora/server/a792d3ecfa028c20db3032c5135c4d503c661866 create mode 100644 fuzz/corpora/server/a7ae87f894abd056c46826214d284f1f37c39254 create mode 100644 fuzz/corpora/server/a7bef673fe1e2b0c8d92586832c00c7b18121e02 create mode 100644 fuzz/corpora/server/a7cd6c34aa77be26ae0ea33b274cdaa7c4368c70 create mode 100644 fuzz/corpora/server/a7e74737e5dbe82fa78426a5248115e2dd8c1781 create mode 100644 fuzz/corpora/server/a815ced8a92f47d900af591c9918c1469a756e89 create mode 100644 fuzz/corpora/server/a81800e3d8708c40a1cd7c79f3bd292aaa63da90 create mode 100644 fuzz/corpora/server/a8278db28128a9c7c610339a23b841cec6a8b5d4 create mode 100644 fuzz/corpora/server/a84a7c540e0c6c5041cfc29ac1bcea1091a964e8 create mode 100644 fuzz/corpora/server/a86f9f294d2472ffeca13665ab14f81c7db56745 create mode 100644 fuzz/corpora/server/a87fe23182c394f394f72f26f2d10b48e3765aa4 create mode 100644 fuzz/corpora/server/a88814ae340e5dab14a731b112bc2c20cf72fbbf create mode 100644 fuzz/corpora/server/a8c664ef97ce1b25c8bbae6c01effce6ffedbda8 create mode 100644 fuzz/corpora/server/a8face71e02c9bc8a42b4313fa17e29a194bb5f6 create mode 100644 fuzz/corpora/server/a90fe9363ef5507ce70ac8b5ff05a96fb27792be create mode 100644 fuzz/corpora/server/a93e7bbf71fd1acf867035b0e53fe9fafc0a20a7 create mode 100644 fuzz/corpora/server/a93ecc4c2996f6646ef335be49bdfc92663e9a70 create mode 100644 fuzz/corpora/server/a940734121ed0bfa36b6575059fb74b0d645fa35 create mode 100644 fuzz/corpora/server/a9487f83fb3b445d1794c7682dba6fd34295c17a create mode 100644 fuzz/corpora/server/a97364f82bc36612d26873c08eab193c54999a26 create mode 100644 fuzz/corpora/server/a982f4ef59b98bbee2ba0565c1619a13d8cbf0f3 create mode 100644 fuzz/corpora/server/a98408978cbba62175fa86613c9bcd742aa6287e create mode 100644 fuzz/corpora/server/a996a3b6a80d37a1e18af8ae9acad264d2d447ee create mode 100644 fuzz/corpora/server/a99ec6e68d563c331b33a5294f32c49a7c2656b0 create mode 100644 fuzz/corpora/server/a9a040bd12d8b8e19565601ea6c399d5a26ef3ed create mode 100644 fuzz/corpora/server/a9b4e66ff5195c2ea7a7b98420e3c2382114905b create mode 100644 fuzz/corpora/server/a9d3c9cd54b1a392b21ea14904d9a318f74636b7 create mode 100644 fuzz/corpora/server/a9d3ed5d68d76bd21c77b32565ebafa32c96d424 create mode 100644 fuzz/corpora/server/a9e93c8903f00a901ca83c377bc2c6792d33841c create mode 100644 fuzz/corpora/server/a9fb6755a189883d6ae988ea2288a549591dcd39 create mode 100644 fuzz/corpora/server/aa4ae2efdaecefc257beeea5cab09297e4e48481 create mode 100644 fuzz/corpora/server/aa51f3d9eac595db558a49be1f44642300d130bd create mode 100644 fuzz/corpora/server/aa63ee36ddc806dc1d9d1fd437c0b1de290b7ebc create mode 100644 fuzz/corpora/server/aa780100def3dbef044fb0045e7b432b02e55dcc create mode 100644 fuzz/corpora/server/aa7fd1e7b2ec0561dd35dcaae522744a431d8767 create mode 100644 fuzz/corpora/server/aa8e710cd1cb0aa879f8c675d750f222073de39f create mode 100644 fuzz/corpora/server/aaa25dcb12400dfe54ebe8416af2ee90362f62ec create mode 100644 fuzz/corpora/server/aaaccac0ab90d121888be611fd2719abaca7a30f create mode 100644 fuzz/corpora/server/aac0c14afb00c82760ee18fe741081cccc43b45c create mode 100644 fuzz/corpora/server/aac290445e4c54457eb6918c84e6e9ec76445397 create mode 100644 fuzz/corpora/server/aac295a94f84b24953540e3a27de3ab72ede590b create mode 100644 fuzz/corpora/server/aae13315d843a01ac7c33627765a0d7d9ffb17fc create mode 100644 fuzz/corpora/server/ab14ec89d966dc4196109a3290ef897cd9d1dcac create mode 100644 fuzz/corpora/server/ab1790572b1e5ddbf3597dc7703e78cbd138edf2 create mode 100644 fuzz/corpora/server/ab18319a890a04a2242311ceece01b290a46270f create mode 100644 fuzz/corpora/server/ab3f96917e6af9bb7372c72581a1647d549d888e create mode 100644 fuzz/corpora/server/ab50c0e134dc1fb2b294d82147f1a89b0060ef07 create mode 100644 fuzz/corpora/server/ab61518433d0167b4f63f381484485dc7c29e459 create mode 100644 fuzz/corpora/server/ab82ec2e40e36f301aad78c569a0fe2e97c24b95 create mode 100644 fuzz/corpora/server/ab872d0752b5568e2f72069bea438ecf770d5db0 create mode 100644 fuzz/corpora/server/ab96adf465e94f3fa47686ec76eea7794e20613e create mode 100644 fuzz/corpora/server/ab9943aa153c7ac4a13a5355df766215688cee9b create mode 100644 fuzz/corpora/server/abae6d983dece89d934a3457f6b044534a67bf93 create mode 100644 fuzz/corpora/server/abb591addde3c8e0316916f1bb949983cf328f93 create mode 100644 fuzz/corpora/server/abe309d908e5f62a8fe01e0220ca16d77a374520 create mode 100644 fuzz/corpora/server/abe9ce690dbf046d23efedd287a4787814ee2e9c create mode 100644 fuzz/corpora/server/ac32e02a2d980978ef740e7f8e361979e5e14bf4 create mode 100644 fuzz/corpora/server/ac47860d422f9ca5198ffa7405ecdb0668be7905 create mode 100644 fuzz/corpora/server/ac48685e1c5e4ee628e28ba14e7debb73631bf60 create mode 100644 fuzz/corpora/server/ac62e8490ff76ae2447f731e5f247dc8673c349b create mode 100644 fuzz/corpora/server/ac779be195785f1e3ef5e76f45eb9da5b3429816 create mode 100644 fuzz/corpora/server/aca178ab752c463d851a0c4e39aabc1aeff2cef2 create mode 100644 fuzz/corpora/server/acab0b518e17a4bdcb9ab10ac7b324e195b5140d create mode 100644 fuzz/corpora/server/acccd7db185d46ecb52ef47fa3411f494187f4da create mode 100644 fuzz/corpora/server/acdd4c322c8732fb4aac6f67b7714c8e4318722d create mode 100644 fuzz/corpora/server/ace68c94b15fbd6a968ad8ece87cce373c2bc537 create mode 100644 fuzz/corpora/server/acec003975a94d2d54f5d108dcf766756802cbab create mode 100644 fuzz/corpora/server/ad1ecbf3b71de9dcb00fffdbb2064fc04fa3c083 create mode 100644 fuzz/corpora/server/ad3d80458b3b1f35d8f96e34d597c79d2dc6956e create mode 100644 fuzz/corpora/server/ad411ef0987247a95b6dbe361ae447ced6493dee create mode 100644 fuzz/corpora/server/ad50ee23ee13c821dcd544092655c303a8a9e93e create mode 100644 fuzz/corpora/server/ad7b5b75dff4dea532880964ecec10d33ac4181e create mode 100644 fuzz/corpora/server/ad94d6c55d9a4da6c39a6673a5cca206673ff3c8 create mode 100644 fuzz/corpora/server/ad9bd1bc72f9c9b506ccd44c2e44c561c26f2fbf create mode 100644 fuzz/corpora/server/ada547e56e96e8095146889047d3c624faec0007 create mode 100644 fuzz/corpora/server/adc0306a1764def67d3c20925130e701adf9a152 create mode 100644 fuzz/corpora/server/adcf37e2d5310534e6e9924320a91bfb359df594 create mode 100644 fuzz/corpora/server/add1c053e2076c680f90ab0ac887ba89ce06ce26 create mode 100644 fuzz/corpora/server/add41ef0ea85deb19107df2731f7b869f4eead1b create mode 100644 fuzz/corpora/server/adea2877f37087ee9f109062289c641df259ee7e create mode 100644 fuzz/corpora/server/adfbc3aa7e198ee661f7f914b50996d106292541 create mode 100644 fuzz/corpora/server/ae03dce7a9e49b23bae2ba9adbe93ed91f8e7184 create mode 100644 fuzz/corpora/server/ae17362454cd9acc166e39d4b9e0862fdb2313f8 create mode 100644 fuzz/corpora/server/ae27d552dc7ae3a4021456150e25638652ddd1c5 create mode 100644 fuzz/corpora/server/ae32a2abe89e212f153d49a2086cd2cfdfb0d121 create mode 100644 fuzz/corpora/server/ae3c6fb5ce32df2f2fa20aedb074aaedf30bda9e create mode 100644 fuzz/corpora/server/ae47e08ed4cdedc84eb37758d23ad19943fd7f96 create mode 100644 fuzz/corpora/server/ae5bb9a0c97c7c33a63956e64d23b5dcd59776de create mode 100644 fuzz/corpora/server/ae7a80d0a6837fff7ed49b5c911a5a07901ae665 create mode 100644 fuzz/corpora/server/ae806bdcd5a6e9104e9344ea81b3ea047b169bae create mode 100644 fuzz/corpora/server/ae9dd5c4a4982e96abceadc8ac3201f26be20922 create mode 100644 fuzz/corpora/server/aeacbcfa64dfec326b57ebfe74ead914e60058e7 create mode 100644 fuzz/corpora/server/aeb7af4dd85cf3c9743087fdece02444708d5f39 create mode 100644 fuzz/corpora/server/aee3a69006f07a9029bd804801bab121fa2bb73d create mode 100644 fuzz/corpora/server/af0532d1406218915827c45242a7f85da47e222a create mode 100644 fuzz/corpora/server/af401197962840791186fd162b01d674c12cc30b create mode 100644 fuzz/corpora/server/af4a1a76e7e60dc9446d11b5ce5eebed5096e850 create mode 100644 fuzz/corpora/server/af7f925b6e2deda5c183618885500f19657971e6 create mode 100644 fuzz/corpora/server/af8d856a6e0f9878652749758622b8036e2d509a create mode 100644 fuzz/corpora/server/aface9b3a7ebe66343d44cb2d0592b6eb39feec6 create mode 100644 fuzz/corpora/server/afc03a3a849daad7017494acc365a3185a9155a1 create mode 100644 fuzz/corpora/server/afc88c5e221d5890614a9dd52b7eaa777949ddc9 create mode 100644 fuzz/corpora/server/afcecb7ead7c878c9e4bd19b80ac90c62e777e8e create mode 100644 fuzz/corpora/server/afee3fdea3a479e5d4d430c6ad4ea150a105294d create mode 100644 fuzz/corpora/server/affac4bd5224dc3148596f6fe1afdff06ba12a1c create mode 100644 fuzz/corpora/server/b0166890f4a76bc573991217a93ad4e6316f9085 create mode 100644 fuzz/corpora/server/b01b0e2a4571391965093fda76cecc7d56adefa9 create mode 100644 fuzz/corpora/server/b023a0bc8e71387dfabfe2ae16c38590a940a8ed create mode 100644 fuzz/corpora/server/b0249f7e3dda57bd83de3733b3c86a59cdbc2063 create mode 100644 fuzz/corpora/server/b030c2949bd369b9f51b0936541543057e965382 create mode 100644 fuzz/corpora/server/b04be387c26df73b5827edf3a16e4d387b87db4a create mode 100644 fuzz/corpora/server/b0e6438be56d83cb7406acc9dd59fbe27ac7773b create mode 100644 fuzz/corpora/server/b13935c907c34587bfc945ecd9fd284cf2d556bb create mode 100644 fuzz/corpora/server/b19732299669e6654f4dc3f0d90f5e3d75dcb342 create mode 100644 fuzz/corpora/server/b1b454fe9c93bf8f96d604c9b49fcf7aa78bf515 create mode 100644 fuzz/corpora/server/b1dc2bffaecfd24d3a41c40b20d58ecc363035cc create mode 100644 fuzz/corpora/server/b24193a48e5b47fdb2a4c4c1db09337b8703d8d3 create mode 100644 fuzz/corpora/server/b268b6682b767f2b06d033cd0832f0c6cba92b96 create mode 100644 fuzz/corpora/server/b268e14514089b190ca6f047a48145ae8d0423ef create mode 100644 fuzz/corpora/server/b26d13f0476bbca24a0ab68a9d8019c13d5ea00f create mode 100644 fuzz/corpora/server/b283f490fd5dc87d78d722f400b03ec7b39dcd16 create mode 100644 fuzz/corpora/server/b29def50215d31b8e7694e86db115bfebe27a405 create mode 100644 fuzz/corpora/server/b2bcde2f984015e7303aaae7a061700c0f348c36 create mode 100644 fuzz/corpora/server/b2fa5412cac233502cbc85e9ce3d9e1082d367f4 create mode 100644 fuzz/corpora/server/b31ffc5223a1f8e87ee1bf6dd80b16b3b4f99fd2 create mode 100644 fuzz/corpora/server/b32e8b9bbb0170ee49d829b5f3e80b2f24779036 create mode 100644 fuzz/corpora/server/b33371cbe0467536dc214b0e82139ecda2952285 create mode 100644 fuzz/corpora/server/b35b8d6c512a3b536792f1103496d51075b0b454 create mode 100644 fuzz/corpora/server/b38cefa0530209c6b1a1ba974f870bb4f457c9fe create mode 100644 fuzz/corpora/server/b3943b42e82360fcd539913ee10659b242f49384 create mode 100644 fuzz/corpora/server/b4748df45eb2e6a87f98598f2b2e6062d3e33f85 create mode 100644 fuzz/corpora/server/b487301840775fed0d284f390f6be54f2e83f7e0 create mode 100644 fuzz/corpora/server/b48cb75c1eaf69dffe65faa8e705b7dee46f6f0e create mode 100644 fuzz/corpora/server/b49bb8cadc34de401d373f7acda084fbb52bc2e2 create mode 100644 fuzz/corpora/server/b4aae1a316279955f9b09a8c33fcfc28a2a30ae2 create mode 100644 fuzz/corpora/server/b4cf274f48d50744992f5f77b44f1807a9a61c27 create mode 100644 fuzz/corpora/server/b4df86617cbee78e8da460190f05eae0b43a4849 create mode 100644 fuzz/corpora/server/b4e4e9229d0f2110ae3c33ffda875a98ec31c076 create mode 100644 fuzz/corpora/server/b50a2989afbd91eb8ee198bd33ed54895e1706ec create mode 100644 fuzz/corpora/server/b52bf1e54ba0a769556b70164e0ab19996fe8b3b create mode 100644 fuzz/corpora/server/b52e741d618846fce03d1c62e0c5b7da2d1a67aa create mode 100644 fuzz/corpora/server/b52f4d6a2be566e673b2c997c7fe386dc11d4691 create mode 100644 fuzz/corpora/server/b53e0c775ad4a259b72f55b7d0884154fc8e14e3 create mode 100644 fuzz/corpora/server/b54cf12d224d410eb90db1ae2d5d8441c35ae909 create mode 100644 fuzz/corpora/server/b56b9da52189e20b83e8edbe35d85fd7d5b9e920 create mode 100644 fuzz/corpora/server/b573c5afbdea6d9e7cc55ae48003076927dca77b create mode 100644 fuzz/corpora/server/b57b11d8a392a604fa4528462b3b1e4481b13dfa create mode 100644 fuzz/corpora/server/b5957474f55d0c16d34d7c6329185db49f29ce6a create mode 100644 fuzz/corpora/server/b5a884db9c6180894cffa924705570f289a8a971 create mode 100644 fuzz/corpora/server/b5c183be81573de199c2283098f5ac0ff84fb2b4 create mode 100644 fuzz/corpora/server/b5c5159bb5cf19db2999b29bc1b46eb666e9035b create mode 100644 fuzz/corpora/server/b5d2512599dec6d28a857470103be815f9c61de5 create mode 100644 fuzz/corpora/server/b5f3b4ff975f7a315e75b04716622a147ee20052 create mode 100644 fuzz/corpora/server/b6093b63008a170f122ae15f3105240f49aca418 create mode 100644 fuzz/corpora/server/b61275f345b2e6bd913171ca9b8948a14844463c create mode 100644 fuzz/corpora/server/b617ee072bee10b7bf760d5ba53a7192a7e5d3c0 create mode 100644 fuzz/corpora/server/b6287f61e1e797b8f9a8d575b291ba759620738f create mode 100644 fuzz/corpora/server/b62aba4d7d6dbfdd0b996ed77bcc31d7c391b4d4 create mode 100644 fuzz/corpora/server/b6472f1f19ed5f8492b3ece920daa1183b55a965 create mode 100644 fuzz/corpora/server/b64f43d7b8fedf8e4cd530bdb26828b9ca4246cd create mode 100644 fuzz/corpora/server/b6845375116dc9c33e73584e0ebc0f11f461734c create mode 100644 fuzz/corpora/server/b6bc28bd607e5d88730c4f108e2f28472f4b2b3b create mode 100644 fuzz/corpora/server/b6d4ed0824aa7e2dedc6eb600d7635f560a9ed15 create mode 100644 fuzz/corpora/server/b6e6f92658a5895166063342ce8436d658643b62 create mode 100644 fuzz/corpora/server/b6ee88041fec4b55331a55e442a5d5cf772701fd create mode 100644 fuzz/corpora/server/b6f1e03e9fbb9aaba644fff314eac64b16274c39 create mode 100644 fuzz/corpora/server/b6fbeff5791b8b75536c104417fbe7fc540679a0 create mode 100644 fuzz/corpora/server/b70e7adb1082c5611392843e9cb4116d0b1b74c8 create mode 100644 fuzz/corpora/server/b739edcc895559d324f49bb3a51ef4b1d4ca5ca9 create mode 100644 fuzz/corpora/server/b74007bf21bbc1437010d9bc4fb1af9ff570044b create mode 100644 fuzz/corpora/server/b745aae1989758fde2111853a1d8612702d57385 create mode 100644 fuzz/corpora/server/b749571501074b8b01d78f7d8bc1e56b30982eed create mode 100644 fuzz/corpora/server/b75224cf5e59a97b1d0fa722efa2df0666bb7d9a create mode 100644 fuzz/corpora/server/b787fd496a55c020beb76e56369b268f990d895e create mode 100644 fuzz/corpora/server/b794455d64219b47eb474dfc1e61b8e8dd68a188 create mode 100644 fuzz/corpora/server/b7ac625e10eb4df6014910d9145df26284e29681 create mode 100644 fuzz/corpora/server/b7b90610b9c90dd2509b1e964fabcdda57d4670d create mode 100644 fuzz/corpora/server/b7bfbc03b6c3cd6155938a75605da85276ea6357 create mode 100644 fuzz/corpora/server/b7eb841e39da3c3cb35eb120ed92622f3e4826ad create mode 100644 fuzz/corpora/server/b7ed30354047cf0a0706336f7114224945d74e99 create mode 100644 fuzz/corpora/server/b7fa35ad3ab61ed00d54999b79c490b739f424cd create mode 100644 fuzz/corpora/server/b86c8001d26c9b1f67b3484c59e42d5375dbabc5 create mode 100644 fuzz/corpora/server/b884ebc29bb0075d20c328382c47fdaa21fa3d15 create mode 100644 fuzz/corpora/server/b888b92bd6e8fd56af8b868891a1a7799e801881 create mode 100644 fuzz/corpora/server/b88fea025d7064cae231f78c91f5657dbb0b0181 create mode 100644 fuzz/corpora/server/b8af536c5768c645aad2a94d483f8281efb2b8a8 create mode 100644 fuzz/corpora/server/b8cd72b7f7c8659a9e12fcf078ba4cb25f47decd create mode 100644 fuzz/corpora/server/b8da6b6a4f3c9d2e8511ffd0c24d9af88c19acd5 create mode 100644 fuzz/corpora/server/b8e6e90b8de91bbcb5941787937ecbf3ab43b6fe create mode 100644 fuzz/corpora/server/b8e929e779e0d9e8f2961f24f0549f50c834176a create mode 100644 fuzz/corpora/server/b902b83a0a7d8a7ee0f35b069672889bfc7c5460 create mode 100644 fuzz/corpora/server/b90f8f47f6dbf2e1dee5316c4b675f66f1e090fb create mode 100644 fuzz/corpora/server/b93a9c3d9dc73be5bd45623105a5efa0aa0264b3 create mode 100644 fuzz/corpora/server/b97458bea69c67783a7be3e005139136b702e685 create mode 100644 fuzz/corpora/server/b9830142a54ae86672fa70425282427a0ba5704d create mode 100644 fuzz/corpora/server/b9aacecc271c0c257737d42eaa5415724cf87bbf create mode 100644 fuzz/corpora/server/b9aebbadee313a88fa2ab72e6f335b093c10e010 create mode 100644 fuzz/corpora/server/b9babb73969eb60d82ea248df2a59b380adad527 create mode 100644 fuzz/corpora/server/b9c2676c1011c24004bc4ec7efd6f27ee6c6cd71 create mode 100644 fuzz/corpora/server/b9c4cb87d5db4fdd9aeb607eb78aa7b28c4afc5e create mode 100644 fuzz/corpora/server/b9d468e50151f003a50dd85528b211067f65ff40 create mode 100644 fuzz/corpora/server/b9d6c6dc31554a1b7b8b601ad365d1a6e7251b95 create mode 100644 fuzz/corpora/server/b9f24c885ac77ad4898230f66fdb7f7e1cad6765 create mode 100644 fuzz/corpora/server/b9f2d840d97a704d2ddebea4c269313fa3300bbd create mode 100644 fuzz/corpora/server/ba01e779491b31737a7571f1e6be64f4f89fe1b9 create mode 100644 fuzz/corpora/server/ba1d6ee2c6b1028471323659658f3bedc43b0445 create mode 100644 fuzz/corpora/server/ba2f67c80eaed75e5d70954435d7f3f19f10f174 create mode 100644 fuzz/corpora/server/ba41ab2d06482f8c5ab463522b47343d0f3bdcb4 create mode 100644 fuzz/corpora/server/ba4a9f6263c0cb395c81afa9f77476e2a4abfa89 create mode 100644 fuzz/corpora/server/ba594ace99ea38210c3bfe7647955c6da64ef8e8 create mode 100644 fuzz/corpora/server/ba6262520e29c81851c8ab2be4d72b9d4cea0b47 create mode 100644 fuzz/corpora/server/ba69cd473e3682ae727e86bc8b42cd837ce525f6 create mode 100644 fuzz/corpora/server/ba6c52c295d613e6fb46607f1a4f8500c6fa3c4f create mode 100644 fuzz/corpora/server/ba8a66b5123a0cd4e7925f3d21b4ab9735c55816 create mode 100644 fuzz/corpora/server/baafea5ff0a446a4157ed7425e5f68d72366a800 create mode 100644 fuzz/corpora/server/badfba0ef902afc96e60331586b62a668b874f48 create mode 100644 fuzz/corpora/server/bb07241ebca2f32026bf64a6daaf4b0e0d8eaa25 create mode 100644 fuzz/corpora/server/bb33096cf7dab5ad33db12f5f794de640e868fd7 create mode 100644 fuzz/corpora/server/bb44a01aa5c78122ead71bc0b990f32821b76dd4 create mode 100644 fuzz/corpora/server/bb6f6820c8624b3bac43ebef53f53608b389071a create mode 100644 fuzz/corpora/server/bb70a44112ab1e339d937854077c1c49a50ea6c3 create mode 100644 fuzz/corpora/server/bb8feddff0cdcbc7031771eb1d2a897e599f3327 create mode 100644 fuzz/corpora/server/bbb23bacfaa312829a8f9b16aba8beededc155a9 create mode 100644 fuzz/corpora/server/bbd53ebb42ed98498f291231b06136c9aa602a74 create mode 100644 fuzz/corpora/server/bbea215f19d30bf34c8801492d6967bf7aaf58c5 create mode 100644 fuzz/corpora/server/bbf58c1172323a2f815ef0d3ae330c5de7636e39 create mode 100644 fuzz/corpora/server/bbfa49b9cf1458093ce9cea0c2672a858db5a5e4 create mode 100644 fuzz/corpora/server/bc17e24b2f54669227aa7fb02a0ab75f3a15974e create mode 100644 fuzz/corpora/server/bc2af0bd9031789b9be88630972e2f9682d07a03 create mode 100644 fuzz/corpora/server/bc3a2d58943d0d0511384eb2896f1bb8b8241df5 create mode 100644 fuzz/corpora/server/bc43517f6b5e9b4fef11e4eb0f4fb181e98213c8 create mode 100644 fuzz/corpora/server/bc633603554d92a83f3d0b6d9e0ef0d6c42de4c8 create mode 100644 fuzz/corpora/server/bc6df4735f3fb955a7157317c4599fd2a4af2f1f create mode 100644 fuzz/corpora/server/bc6e6f3de35eb93d4e6ecfca1cc4afdad4c9d397 create mode 100644 fuzz/corpora/server/bc7dc24de972eace2b7e5501ada1aca6d1ae3924 create mode 100644 fuzz/corpora/server/bc90ca538ed539531d31de69708017371ab12671 create mode 100644 fuzz/corpora/server/bc94a88322ea1b401b555fa6fbcc946874e09e4a create mode 100644 fuzz/corpora/server/bc99a104d13c5243fc85c2bdfacca958f263cc92 create mode 100644 fuzz/corpora/server/bcdf0e0e08406394eef82b7957044b82562034db create mode 100644 fuzz/corpora/server/bce53d716dac420125d87b861f2ef5ab8712a18d create mode 100644 fuzz/corpora/server/bce89d6431f64bd6bd689b7c36cc724e72ddfebf create mode 100644 fuzz/corpora/server/bceb1ef090a7d7fd0c1ab2ec31662d74374bd19c create mode 100644 fuzz/corpora/server/bd06a0d3dff0830c58651d3469bdd49fb0b36872 create mode 100644 fuzz/corpora/server/bd326fcac49a52f2f3206152212654a39ec423d0 create mode 100644 fuzz/corpora/server/bd3e351f6a01aee7f7bb1529de44179de0ca13bb create mode 100644 fuzz/corpora/server/bd4826bc20a952e9860ad399a0893f44ed79c47c create mode 100644 fuzz/corpora/server/bd92178e99b58a85329087b4393ce744efba1868 create mode 100644 fuzz/corpora/server/bd983ec00f3b014a3c3cff3c5f6cdc28570b03b0 create mode 100644 fuzz/corpora/server/bda1433a18e3738c74d163d77cdbe09d7fca5ddf create mode 100644 fuzz/corpora/server/bda6196cfb4847563586972b3ee504f653e0c86d create mode 100644 fuzz/corpora/server/bdbb169b23441db3b669ad838ce1c2ba738a6efa create mode 100644 fuzz/corpora/server/bdbf4d13084737224759063c13c30ef952a72d86 create mode 100644 fuzz/corpora/server/bde4ef24fefa20a5bfd8726e22199d848a62a70e create mode 100644 fuzz/corpora/server/bde52a6c5b4aadd185de2225bb816a3d7f6e9999 create mode 100644 fuzz/corpora/server/be314087111ab4ceaf160f45419f3524c89d4714 create mode 100644 fuzz/corpora/server/be327b3a61dcc18100dd311fd53be0e78091ac27 create mode 100644 fuzz/corpora/server/be6b986b282356d38ff5976758bf1676c2eb076f create mode 100644 fuzz/corpora/server/be815ea60b7780158f8a9b3e9bc9de351680801c create mode 100644 fuzz/corpora/server/be96bb34298e67f3d34f78149dff305796d5990e create mode 100644 fuzz/corpora/server/be99ab5dd0ffea84dd2ba24a5f539870179aa9c5 create mode 100644 fuzz/corpora/server/bee281d08b845c33b44aa39a112190cf77571d19 create mode 100644 fuzz/corpora/server/bf0e49e3859800e03476137dbfbc27b7f5c82050 create mode 100644 fuzz/corpora/server/bf376fee595c0f99c5ce03f5d94392260c8050ed create mode 100644 fuzz/corpora/server/bf6865979036fac804c30be407928733426780c1 create mode 100644 fuzz/corpora/server/bf6a1db20e1323c9ab5a8911bc5705ab774f4395 create mode 100644 fuzz/corpora/server/bf79eca93c5e48865058a99da3c7dbf700ded48a create mode 100644 fuzz/corpora/server/bf88e2d20552079cb52595ded7c80a6c639490e7 create mode 100644 fuzz/corpora/server/bfaa706bbf6b2c7f458f39ff4031638970e41c23 create mode 100644 fuzz/corpora/server/bfc2cfcd32cb2394a21cd1dcfbfe544757d74b59 create mode 100644 fuzz/corpora/server/bfe39ff846b1bc51250301a8c463bd8e4e63663a create mode 100644 fuzz/corpora/server/bff15551cf5238ce3d54504b927ca50cbf21c968 create mode 100644 fuzz/corpora/server/c02f9c1b7b4c47e87ce9238f0faa35a018272372 create mode 100644 fuzz/corpora/server/c05b0ea5b44847989c842b4ec367a9a8f4e54339 create mode 100644 fuzz/corpora/server/c086b6a6d3e3e2ad4b42e76a8864a71a54219d9d create mode 100644 fuzz/corpora/server/c18b8573fc6397a8ccd10770eb3c7c0e5fd2c170 create mode 100644 fuzz/corpora/server/c190be6c35b42bbaa3eb3f0ba51c281e067d6a4c create mode 100644 fuzz/corpora/server/c1cb9e254b9d503328d1f23870f065a562f09697 create mode 100644 fuzz/corpora/server/c1db0e953a4dcfc1d6d9cbb3388b7154d7195ff7 create mode 100644 fuzz/corpora/server/c1e397821e66f7a8600644af0a8b81031229fa51 create mode 100644 fuzz/corpora/server/c20958092c9afc011e4407e9799632d2cec5f90d create mode 100644 fuzz/corpora/server/c219a97220614aa84ebd8b9b027b67a68eac54d3 create mode 100644 fuzz/corpora/server/c22b8af49547f82f9b18cddd42362a685fb98509 create mode 100644 fuzz/corpora/server/c22fcd00d080df1f041a4e14c0c7280f87c68346 create mode 100644 fuzz/corpora/server/c245bd4da4ad191d5f46dfafc9a08331c9c31f2b create mode 100644 fuzz/corpora/server/c293ce8dade9968d74be1a07bf8a881d21c51163 create mode 100644 fuzz/corpora/server/c2a27ef828d61af599120d01b89b0e497bdbfba0 create mode 100644 fuzz/corpora/server/c2ad4b2ed89f931983c699cc64e8adc05f25c9f1 create mode 100644 fuzz/corpora/server/c2b9b49ba7b0d1ad75abfac8e8de473efcc5a4f7 create mode 100644 fuzz/corpora/server/c2c1b59dee69c88556a3032b3fa13003f27af6e3 create mode 100644 fuzz/corpora/server/c2d79b7d027a2b05792e654cfad52c8f1edb4a87 create mode 100644 fuzz/corpora/server/c2dcb05f615176a52db575f53ed8ab900f7aaf5a create mode 100644 fuzz/corpora/server/c2e4f066919e56fecf823832d74eac3e8456cf47 create mode 100644 fuzz/corpora/server/c2fac846a1d590c94d8146e1f0fe2f630610b0ae create mode 100644 fuzz/corpora/server/c31becde32ea85b30575ff51324cb0757351584f create mode 100644 fuzz/corpora/server/c357fa8c782fcc07925a6b9753f1acac73ecb682 create mode 100644 fuzz/corpora/server/c36deffc3c998db4faa29a90e81207ca87adf153 create mode 100644 fuzz/corpora/server/c381e339b19ac934e5eaced7c96cd59684ae08e8 create mode 100644 fuzz/corpora/server/c384736f55318d19b003eb263dc2f6f1002d892a create mode 100644 fuzz/corpora/server/c38673bdf6942fd35bd285503ec1ee29486b74df create mode 100644 fuzz/corpora/server/c3a9d2556f9feb9de396a5911769ea8d70c319fe create mode 100644 fuzz/corpora/server/c3b6d7c946a0cbdc7742e9bd6f48e95298e4795f create mode 100644 fuzz/corpora/server/c3b71a46991eef4abec1135713057a83493f33d7 create mode 100644 fuzz/corpora/server/c3d462b1b88de02caa8614f261d7ca335e5693d3 create mode 100644 fuzz/corpora/server/c3e65fb90988715a5d6625c5f00d218fb5b4d4bb create mode 100644 fuzz/corpora/server/c3eb01f1973e35fc71c6199e2b840296620d4b65 create mode 100644 fuzz/corpora/server/c40aaabeaf6f43f8a8babfa901941e6c98c41574 create mode 100644 fuzz/corpora/server/c429082b62c97767b99abdfd95adeecacda1199d create mode 100644 fuzz/corpora/server/c449b9096facd99b90b93fc4a8b676d45459a5fb create mode 100644 fuzz/corpora/server/c4729919afffbe70b98bd2b8d2480fa0a69685f2 create mode 100644 fuzz/corpora/server/c4754372b505db27eb5313d5e1487d62fa40dbfc create mode 100644 fuzz/corpora/server/c47efcfc5f0e74b9819a0885a3aadb36d8013467 create mode 100644 fuzz/corpora/server/c493d0901625344b3adb9bc31863cd094778b012 create mode 100644 fuzz/corpora/server/c49f70675130f07a9da50e374229f73e8b198b64 create mode 100644 fuzz/corpora/server/c4ca65161e335e99313a0491a3f526c0a9ead0d7 create mode 100644 fuzz/corpora/server/c4df5c4168e84080e29e9bb7c6f38bdefc36a9db create mode 100644 fuzz/corpora/server/c4e06b3c54bb3e76e52a612576f60d69469c01ce create mode 100644 fuzz/corpora/server/c525aefbcfea61b4b4e64e0828b0896792cc2244 create mode 100644 fuzz/corpora/server/c5598461c9a413e068ad3d2234a0efe7cf42b1d4 create mode 100644 fuzz/corpora/server/c5603e5125a73fc30949534d2744a0c1e36c24fa create mode 100644 fuzz/corpora/server/c57261eb6391d691f65adda0df6c3f470c577b79 create mode 100644 fuzz/corpora/server/c58abbbef05ede272ad57bd248aa99130ce0980f create mode 100644 fuzz/corpora/server/c5bcd48fa9f7acaa69ac88668298701c9eba4011 create mode 100644 fuzz/corpora/server/c5cc7e50e9dd2ee8cf7ca08d58cb2523a942deae create mode 100644 fuzz/corpora/server/c5d5b72eb7a4d936c7a98fa2b24d3228edeb4a15 create mode 100644 fuzz/corpora/server/c5d69582cbae5720f0c16f26ef51907af2e60e4d create mode 100644 fuzz/corpora/server/c5fe4b7bbed39eea02899522d6a9efde19dd09e9 create mode 100644 fuzz/corpora/server/c60a84d8a220fdd42587a590ea26aa5d1bd9134d create mode 100644 fuzz/corpora/server/c63c0d7726b4d3d9612af8265a359f86c29dd96c create mode 100644 fuzz/corpora/server/c69121277773670673dd3660a2c3113cab91bfd0 create mode 100644 fuzz/corpora/server/c6a72b9214401f3021504613c1fc2d67ff0a13fd create mode 100644 fuzz/corpora/server/c6b6db899edeff1d65938f6f18c2310b06591d7f create mode 100644 fuzz/corpora/server/c6d597d2b3e76614496e01f72eebb5537705b0a1 create mode 100644 fuzz/corpora/server/c6dedd76c8e5a1bef3b3d28a89c3e886802c4f22 create mode 100644 fuzz/corpora/server/c71a2e305fb0d74d1700416e1636c6754e227478 create mode 100644 fuzz/corpora/server/c762c98546503d5649ea5f7e9acf0c4f5cf81e1e create mode 100644 fuzz/corpora/server/c79690274dcb77128883bc55180f4a8d5761d6d4 create mode 100644 fuzz/corpora/server/c7971c60ca8b2f04f766a2dce8235683d3fc03d6 create mode 100644 fuzz/corpora/server/c7ed97176b231d3f1f8745f55154149d2eb99a90 create mode 100644 fuzz/corpora/server/c810b5ccab5972d823e7c9bf3eaaaed658d315ef create mode 100644 fuzz/corpora/server/c84b5ee76ff38c3b87bcb5e0d233d7d2b6266c63 create mode 100644 fuzz/corpora/server/c8cfd82ccb8659f9f5e443a1a1798a8f14e432cc create mode 100644 fuzz/corpora/server/c93cc00f777003baca5764ecf10c9ab3e949246f create mode 100644 fuzz/corpora/server/c953ec4516bf06ce2b18e936451b80822363c01c create mode 100644 fuzz/corpora/server/c9586665637aa6d4d24162a4a700371e5d398551 create mode 100644 fuzz/corpora/server/c9650afdae73d8bb189341fe2a7405c2cc0a126c create mode 100644 fuzz/corpora/server/c9719435e08cd35bac7638cd13157c2247769dfd create mode 100644 fuzz/corpora/server/c994fa59abfc915622a6b40e0c45dc1e7504ee89 create mode 100644 fuzz/corpora/server/c9a606fa5efbf5945942e7eb6b3b66e6e50d369f create mode 100644 fuzz/corpora/server/c9af8a08f795768cde47829a8a73a01415fac3f2 create mode 100644 fuzz/corpora/server/c9b1498c31e19393d7dfa775f741ed5ba17a84b0 create mode 100644 fuzz/corpora/server/c9da098a8238e950da7f83171658302f7fd37dcb create mode 100644 fuzz/corpora/server/c9e78d434be979b926edf59614cbe6c2e41b77c5 create mode 100644 fuzz/corpora/server/c9fd8930c5c6dca6845c5519e6f3ddc14c2c570b create mode 100644 fuzz/corpora/server/ca37966ab51208c6e89c884836967d47a399bbbf create mode 100644 fuzz/corpora/server/ca460fe67efafd54e955d6ee3f23b857c38aa55b create mode 100644 fuzz/corpora/server/ca5ab7671fd95e4c87b859f8662c1d10a15e3aef create mode 100644 fuzz/corpora/server/cac78271d939e6eab70c4caf92169bce0aad7040 create mode 100644 fuzz/corpora/server/cadf9c7ffc1a07814e1fb2de923fb2ee2f07f2b6 create mode 100644 fuzz/corpora/server/cae1873ba2281a03a4c3605c444b41e980e89f25 create mode 100644 fuzz/corpora/server/cb1cb49ea81791cd2d480d11b761a945ddcfd403 create mode 100644 fuzz/corpora/server/cb36eb4aa277a800e517e972beab85bc8618052f create mode 100644 fuzz/corpora/server/cb639b6982c0950b1e70bec112728056795c507f create mode 100644 fuzz/corpora/server/cb6cbd0da690bc0df843cae44272d4ab773b4ecf create mode 100644 fuzz/corpora/server/cb796533dd56934eca9183d0b99343155416b5ea create mode 100644 fuzz/corpora/server/cb7a75fa12e92ac806c0a280aac555373efa062f create mode 100644 fuzz/corpora/server/cb7c01e3138c40fabb35da49f88c6e53143d66f6 create mode 100644 fuzz/corpora/server/cb7c22c32cb79b239f790a91caf4d33f9ebcc9e1 create mode 100644 fuzz/corpora/server/cb8814546ca5286cc151c96606da91cdf097c3fe create mode 100644 fuzz/corpora/server/cb8be795c8e495dde83f83a56ca3edd285f49820 create mode 100644 fuzz/corpora/server/cb8de2ce039d30bc29143a3839635e61be8da04b create mode 100644 fuzz/corpora/server/cb9dfc263343abc6744b84b25df8d917baf506f3 create mode 100644 fuzz/corpora/server/cba5cd7645acec0983c3ca796dbc939242b9e7e3 create mode 100644 fuzz/corpora/server/cbbda2d51efc95356edfe4f4e9e07ede5572c01c create mode 100644 fuzz/corpora/server/cbc5db76d4b2783a024576e18ae0ad38fac52999 create mode 100644 fuzz/corpora/server/cc22516849457574128e8fc43075e55d1de70440 create mode 100644 fuzz/corpora/server/cc2a39973ac62fe7f14c59403ed9525b81f452ce create mode 100644 fuzz/corpora/server/cc3daad2162cab2c16bfd7ccb935fb6e18446d7a create mode 100644 fuzz/corpora/server/cc4295662a0ba25062f7b558ec10371513450d95 create mode 100644 fuzz/corpora/server/cc47d8ba1c65a551c35bbc56935d015b0346af8d create mode 100644 fuzz/corpora/server/cc6ca550545f7217d2a0f06c4158c928534ee1db create mode 100644 fuzz/corpora/server/cc922e24d58b12c3c43a86a56b6f06ce2f603b54 create mode 100644 fuzz/corpora/server/cca3abb736280aeacc5d26a5bb0a1ac8f952106b create mode 100644 fuzz/corpora/server/ccb30b21ffe294f5ccbdd7a11cc3bdec041e7627 create mode 100644 fuzz/corpora/server/ccd1f9238294c09c7cb01f0b1ddb9e1f0972acbb create mode 100644 fuzz/corpora/server/ccd37688dbf81890bd880a8c0db9409318cbb7fe create mode 100644 fuzz/corpora/server/cce89d474bd88b107811c85de8ee3b5b5c58a1a3 create mode 100644 fuzz/corpora/server/ccfcccdd9e30493e3a244ed36e38ce1ac723a88d create mode 100644 fuzz/corpora/server/cd07bb2ba669816fa5f749198c266663a754a29b create mode 100644 fuzz/corpora/server/cd0b3bb7081dc96566460bea85db7885340271b9 create mode 100644 fuzz/corpora/server/cd0cbb1692fa82db3ffafe0bcbbea0b482383715 create mode 100644 fuzz/corpora/server/cd0e2d18c13ca993cac92b38357d61d2dfe09d03 create mode 100644 fuzz/corpora/server/cd12967330652fc4855c4d18a1b45ec2c7dd8b2f create mode 100644 fuzz/corpora/server/cd4305cbec1195906aedf19d2f9af0723c2d2a7a create mode 100644 fuzz/corpora/server/cd45ce6f71ebe6b122fcde13ffbde1f0dc4e99df create mode 100644 fuzz/corpora/server/cd56ccea68c4a5d59493ebb487e45809a3641c97 create mode 100644 fuzz/corpora/server/cd5d2da476c209f9e0cb5092feb32fe99d707360 create mode 100644 fuzz/corpora/server/cd5d4fc8095e8fe69a37a7106693a2e23e4dfc92 create mode 100644 fuzz/corpora/server/cd5ecb7357c31496831b791afece788550b513b4 create mode 100644 fuzz/corpora/server/cd621518acd1e5677e57768397b5e642d14e5577 create mode 100644 fuzz/corpora/server/cd6ca8614c5ceba16416d85b9e10733c3c6199d6 create mode 100644 fuzz/corpora/server/cd798f75ff86d138ac9e58e383ba6a17a2943821 create mode 100644 fuzz/corpora/server/cda369cf19229a28964b81edfabdf4ef61caf4ab create mode 100644 fuzz/corpora/server/cdaa63d454a6e697956356b046199b77505a9b82 create mode 100644 fuzz/corpora/server/cdb10c144b68b038e159dc26aed328c1d6309214 create mode 100644 fuzz/corpora/server/cdf1828fe7ca27cd7240ef26ccd34dee0fbb8037 create mode 100644 fuzz/corpora/server/cdf5d1e1542cd49c7d55b094ad6c68c7af9d013c create mode 100644 fuzz/corpora/server/cdfb106a1c816cfc5a5374add630ce8f313f26d3 create mode 100644 fuzz/corpora/server/ce12baabfda4456fb8b1286cb616150063497e04 create mode 100644 fuzz/corpora/server/ce338862489962fc9149f2dee7035ad6920e48ee create mode 100644 fuzz/corpora/server/ce4b1c96e34bdba6609710bd3742e90499467031 create mode 100644 fuzz/corpora/server/ce71c2126523765db8916a42c0e8e063b2263d21 create mode 100644 fuzz/corpora/server/ce75c867abe825267cf88febc5fc3ae846ba5ad2 create mode 100644 fuzz/corpora/server/cec655f4bf18972f6d110b9e56dd4f28c0d7ea69 create mode 100644 fuzz/corpora/server/cefb76fdce73234ccfde34f35e71aca2e6bfd8ed create mode 100644 fuzz/corpora/server/cf06c7f43af61dadeabcc6914b02cafae1c3b8d7 create mode 100644 fuzz/corpora/server/cf1ba456eeaea623c3d3a647dfa0dacdc27974eb create mode 100644 fuzz/corpora/server/cf2db9c56e759fb62d1cf6315ff8c6cd87c5debe create mode 100644 fuzz/corpora/server/cf309ba0e68eb42cd8fdff3486a666ef06d2ef32 create mode 100644 fuzz/corpora/server/cf420b0912b21d60cdf2d40091e2d67e296ab033 create mode 100644 fuzz/corpora/server/cf7053683cb122d271ada5dba79c6c7c48cea03a create mode 100644 fuzz/corpora/server/cf71fdc0acf3c5705ed2308f248a15a137daeeec create mode 100644 fuzz/corpora/server/cf78afa0f4c95dfd3a61265ab4c7678a4d7f347e create mode 100644 fuzz/corpora/server/cf7a585e953643dab01ba4b72ea32676f8bcb78c create mode 100644 fuzz/corpora/server/cf8d8d46cb88a89ce653b83cdf114b84324b19bf create mode 100644 fuzz/corpora/server/cfbd4c650fd712afdd07b8b532084a83d478db93 create mode 100644 fuzz/corpora/server/cfc4e2a2229b79b7649ac1a10ae5febdcf53bcdd create mode 100644 fuzz/corpora/server/cfd114ab316a11db24037c0ef246d778f4b05ab9 create mode 100644 fuzz/corpora/server/cfd47de2c41896a186dfdf50d9c6cb370fbbcae8 create mode 100644 fuzz/corpora/server/cfe8b2c031fc011beac063990da48c5eb8d26fdf create mode 100644 fuzz/corpora/server/d033baaca5770ad952eba506fcc453c276b36727 create mode 100644 fuzz/corpora/server/d055f933356c20afe5b1ef6d97be23052b5e3dec create mode 100644 fuzz/corpora/server/d05f3836467a60e164eda2add34f2a757e02147d create mode 100644 fuzz/corpora/server/d0653e3c1ce25858ac3247f172af17029d79b90e create mode 100644 fuzz/corpora/server/d06d8abfae572cbf58f6617b7edaf282185138c6 create mode 100644 fuzz/corpora/server/d077b2bdcc14997d927b76967fd36978d9116ead create mode 100644 fuzz/corpora/server/d0a6ed27842c9e1124f9c7c72b0cb800bf893f6c create mode 100644 fuzz/corpora/server/d0a89498e6b88370171f5e4dab008fb616c2244b create mode 100644 fuzz/corpora/server/d0d0880adf2295f8f6585c6e796fd1e6a36df28d create mode 100644 fuzz/corpora/server/d0dc25264635efd9e41b32efc31c1a2aab6b1292 create mode 100644 fuzz/corpora/server/d0e342f565d4790aa25dcf5ea5e41f4cfc43b13f create mode 100644 fuzz/corpora/server/d0eeca1947f8e90252c14aa51815f40652f3de01 create mode 100644 fuzz/corpora/server/d0f7de5530d18ffbe5e3f24e8dea29b7884ba10f create mode 100644 fuzz/corpora/server/d0f881b2ea8448acfa3682b2fd6c9183a201d0d3 create mode 100644 fuzz/corpora/server/d107538a2c195d2361ec384011eb516f29527500 create mode 100644 fuzz/corpora/server/d10e7d2f26462ce82dc8a6a9b0f63af43c652d35 create mode 100644 fuzz/corpora/server/d143d7c94cadbecda94e6b8007d81896b4d4f66b create mode 100644 fuzz/corpora/server/d152b7c02ca5838846251c18388b9446ece4b3b9 create mode 100644 fuzz/corpora/server/d178b66bb795e074c9b4fa94c83c005f87a6c95d create mode 100644 fuzz/corpora/server/d18190594a81e82349462e65cfab43e939a33320 create mode 100644 fuzz/corpora/server/d1839c3f5b2cace7c2e11b028fd0fc00dcdc836d create mode 100644 fuzz/corpora/server/d18c33ea3110c9ac95c0295a907d0f9060cd931e create mode 100644 fuzz/corpora/server/d1a96346b9f1ce6ffc836c7449cf52f0301135f7 create mode 100644 fuzz/corpora/server/d1c5f64957bca789704df00a14d26062d05b01cc create mode 100644 fuzz/corpora/server/d2176fbbf5318d9b0ffbb8f29bd91cd950756b9a create mode 100644 fuzz/corpora/server/d224c4e2c56ca633811b08f285911c6c458d328a create mode 100644 fuzz/corpora/server/d23df75ad0648f85edd94fc3b2396cab5f4840cf create mode 100644 fuzz/corpora/server/d245c6b573a1ec205f26d914fa173620b83ee78a create mode 100644 fuzz/corpora/server/d248e45b5cb1c0cc5a7dbad2504f72d15489cd65 create mode 100644 fuzz/corpora/server/d25512dc5e171ee503f7234a7cbc4d66624fb098 create mode 100644 fuzz/corpora/server/d269326220d8ac5612c434ae9ab4444964b637ca create mode 100644 fuzz/corpora/server/d27978be2f3d78777146ec175f5681a83ac8674e create mode 100644 fuzz/corpora/server/d2b7eea35bba5537f1519d514e535a59b7d41e12 create mode 100644 fuzz/corpora/server/d2d10ee9797bd25e8c61586641032056d80c53f3 create mode 100644 fuzz/corpora/server/d2eb7e531d356abb001ac82d43159cc635bcb571 create mode 100644 fuzz/corpora/server/d2f6043bd512dc1daa5453a739e568fccd21ca33 create mode 100644 fuzz/corpora/server/d2f79b69c8f9246ed8b376794e8317d09733d9d2 create mode 100644 fuzz/corpora/server/d3222701f11c12533ce40bf29fccef00fd8e28a4 create mode 100644 fuzz/corpora/server/d339c98468ed58e64c5fccccfc8305c1fd20ee8a create mode 100644 fuzz/corpora/server/d3566e7ca1bd6b37ddb15ed2394aefd9d85d69db create mode 100644 fuzz/corpora/server/d37683be5125c2d67b9d6c067998aca0a215822c create mode 100644 fuzz/corpora/server/d399de97f4cedaa68beb93bc5360e9b894891c00 create mode 100644 fuzz/corpora/server/d39a3cb24a149b894222ded164a9056d0a3417ec create mode 100644 fuzz/corpora/server/d3b95daca033b080ed67f399211733f541fd709d create mode 100644 fuzz/corpora/server/d3bd1c4e3df419456130dcefe952f21ea6bd9761 create mode 100644 fuzz/corpora/server/d3f3e7f259cdcce2d53d35a7ab1954f7c3d54894 create mode 100644 fuzz/corpora/server/d423f714645ca8f5cb9e86094ba78fb94ee36baf create mode 100644 fuzz/corpora/server/d42ebf581c6a34ba0e79c773fa1668863f10fd3a create mode 100644 fuzz/corpora/server/d459534681da8be142aad144c3ff91a2016e936a create mode 100644 fuzz/corpora/server/d4600be17e39eb9e0c967ce54634aa019a589084 create mode 100644 fuzz/corpora/server/d48791a7d0e6710f5ef7dc2432a1a301a4462cf2 create mode 100644 fuzz/corpora/server/d4b709eee7791362cf6254fd53b460cd8b615d17 create mode 100644 fuzz/corpora/server/d4b8e74efda8afb76fcb57ba0b3c7b63803dba42 create mode 100644 fuzz/corpora/server/d4cd4ba98f02aa429d4a0d6270de070728502c1a create mode 100644 fuzz/corpora/server/d4d43d2c7614d334ac76fa6367614ed766701959 create mode 100644 fuzz/corpora/server/d4e60a85ccbee7fb3150fd332b725b4bad0f65c4 create mode 100644 fuzz/corpora/server/d4fb37ab3f3de0504cbca04affc4972c86fb1934 create mode 100644 fuzz/corpora/server/d539e95a15856a56789b472978b4f9c9735896d0 create mode 100644 fuzz/corpora/server/d542e66bf17d21ec04d88b9dac115f10c712a952 create mode 100644 fuzz/corpora/server/d54456e6ccc19ba4ed8a263b9b754c1540a79ac5 create mode 100644 fuzz/corpora/server/d55b7be5da7686565feca4e15f885c63ef354e6f create mode 100644 fuzz/corpora/server/d57c0b871fe207f40178b3fd53c6f10719c0294b create mode 100644 fuzz/corpora/server/d57ff7cbcae712a23998a505e94f9857b7d03a65 create mode 100644 fuzz/corpora/server/d5a6805eec22660e39539cc4f4dd0e59b42ac63a create mode 100644 fuzz/corpora/server/d5e4818d8861cc4e8fdfeebc57baaa8456799fee create mode 100644 fuzz/corpora/server/d5f8920e569c1e5ad81dd41d827ffaca99a5299b create mode 100644 fuzz/corpora/server/d605b02b1078bf3234c71a85496a29d38d0cf5e9 create mode 100644 fuzz/corpora/server/d607496e6a1d7e3f24425a03aa3b650fa6d7175d create mode 100644 fuzz/corpora/server/d60c8e0fb2b00f92b81937bfa4fec7a63521a210 create mode 100644 fuzz/corpora/server/d61f032ff45f9e4fcba6760f630fb8c5827e1c6c create mode 100644 fuzz/corpora/server/d631c7c3bb374f742b43ddeeb4181097b15c2dbb create mode 100644 fuzz/corpora/server/d63e524a7f1f9cbc8788829f2fb885c36717858f create mode 100644 fuzz/corpora/server/d65cf2683a4b6aadbd1c17dc5b8708adfcd6eb8b create mode 100644 fuzz/corpora/server/d670f0d2642fcb94babbada232617dc2055cb271 create mode 100644 fuzz/corpora/server/d68aa991d0b754ea5b8fd443537279e1d1bf44c8 create mode 100644 fuzz/corpora/server/d68d66c1c16c6b595821ffd3f105c09e1e1e26b0 create mode 100644 fuzz/corpora/server/d6a947f3588ebfb77a824fc0741c339495e390ff create mode 100644 fuzz/corpora/server/d6b77708c70c74f4dfe41767aef374d86d17086a create mode 100644 fuzz/corpora/server/d6b978c91fdb4e480f866af340c7f7a6658c9eea create mode 100644 fuzz/corpora/server/d6c0c16dd70b260abf438f966c5645d5704f23db create mode 100644 fuzz/corpora/server/d6d587a7a7b0347ea2dabe6d8d4812af5e02a97f create mode 100644 fuzz/corpora/server/d743ca3de0c96d329ad9b79e0431b52fa5d7c300 create mode 100644 fuzz/corpora/server/d74c66a75a8277a7f6497e3dee8d7e406123d8d1 create mode 100644 fuzz/corpora/server/d74fe6a38047eeb5d692978e0864d80f50b15696 create mode 100644 fuzz/corpora/server/d7509704c1d81a28294814ee00397325bd6b38fe create mode 100644 fuzz/corpora/server/d751471201fa55a38065d167f6fa32026323a8c9 create mode 100644 fuzz/corpora/server/d75976ab62bf26eab92f95f6d888fe023c522e86 create mode 100644 fuzz/corpora/server/d776ab65097ad9943ed7aa610626c64091156839 create mode 100644 fuzz/corpora/server/d784068dd63d6b26e4a2afdd27974092380b5fbe create mode 100644 fuzz/corpora/server/d7b446c1e265103a2a0ad441733b312e31c0a8d1 create mode 100644 fuzz/corpora/server/d7bd4d785308b0302eb6d568b899e61c2e3b54ed create mode 100644 fuzz/corpora/server/d7c9b23e1ecdb005967a3640f24fd3816c3e5ba5 create mode 100644 fuzz/corpora/server/d7e5a42e1341f44384d27c1690585603bac39859 create mode 100644 fuzz/corpora/server/d8043fd14b98d3965f9529537eb20628ff889f32 create mode 100644 fuzz/corpora/server/d81a1086506f67d857c8dedf1b26b6c6b500197d create mode 100644 fuzz/corpora/server/d82150522abdc03ecf9f5ac742a13270966f0dc5 create mode 100644 fuzz/corpora/server/d82e66dd5ef0dba2ac8710cb3ab79ab043f85804 create mode 100644 fuzz/corpora/server/d8386a7def6f9b0da873a26632ff9d3097b7418a create mode 100644 fuzz/corpora/server/d8482afb39a93440187f46f28bcfcb3b05be7e39 create mode 100644 fuzz/corpora/server/d84a88bd8c80f878d51b99ae9242d2a81e35b949 create mode 100644 fuzz/corpora/server/d853fac5645c11da306b63e4eb1de9e4d3188ba7 create mode 100644 fuzz/corpora/server/d86be867e7c045941da49a14d3c1a152663f183e create mode 100644 fuzz/corpora/server/d884b809724cdb5aca9538624436ec48baf2f71c create mode 100644 fuzz/corpora/server/d889c9c859fec8dcee4ecd117203c5470d2d6f79 create mode 100644 fuzz/corpora/server/d89b9421472ffc7762e52af2892f682ddd8fd2ad create mode 100644 fuzz/corpora/server/d8a341442c8eb97399e6cb496b3a0c07b3bc2d99 create mode 100644 fuzz/corpora/server/d8ac3e77077b42bc9581031d6b4435e0b923f2c1 create mode 100644 fuzz/corpora/server/d8bf3ffedc39bca4f16990c4d90e04745c92da1a create mode 100644 fuzz/corpora/server/d8c48621837206d27d75e83362c33ec84d7bbcc6 create mode 100644 fuzz/corpora/server/d8d50acd81de4f4081d330f7d6230eb6b1f188bd create mode 100644 fuzz/corpora/server/d900abdc132f5815c48b7ad9a2ec17616465d2d8 create mode 100644 fuzz/corpora/server/d902538528d44ba252c2e4de20f914e5c74e57ce create mode 100644 fuzz/corpora/server/d90cb2aa13744197c172bb1ad12c6903a63dbeb2 create mode 100644 fuzz/corpora/server/d92504a74020c3a3785d7a0b9347147e755f4c17 create mode 100644 fuzz/corpora/server/d9289b29058efc4c078c412f9246f397bfc82d72 create mode 100644 fuzz/corpora/server/d945007767065f28c375a2619db420cd81d24ecb create mode 100644 fuzz/corpora/server/d9b41d36f67979b324fbc8867c8f3e24e7661a6d create mode 100644 fuzz/corpora/server/d9b5d6696358d5bcc0acd734428d80fd3513f3d1 create mode 100644 fuzz/corpora/server/d9ca217a80c332cece1d5b70b887ca918322dab9 create mode 100644 fuzz/corpora/server/d9e22388c0d3c0f5ec3c4097ca757557045f170e create mode 100644 fuzz/corpora/server/d9ecb0cf42396e634e25b50f8eee44d19e245c7c create mode 100644 fuzz/corpora/server/d9f271383860f76a72928c194fe7d0e3615a1df5 create mode 100644 fuzz/corpora/server/d9fe0c93f3396b2ada03f4344c567583c29f024e create mode 100644 fuzz/corpora/server/da39a3ee5e6b4b0d3255bfef95601890afd80709 create mode 100644 fuzz/corpora/server/da39ec501fb73e2d728cebef8303b182e72b08dc create mode 100644 fuzz/corpora/server/da4294df9d5f37b953bd1950820c1c19381904dc create mode 100644 fuzz/corpora/server/da4f2c90e4415e698c2019fce2a08404196cee8f create mode 100644 fuzz/corpora/server/da658a8f63f65d4e1d62e569a44451a1342f1f1c create mode 100644 fuzz/corpora/server/da74a6da29c4357c4d06642b57a5bc79da602027 create mode 100644 fuzz/corpora/server/dae8d3b9126c455c4ee72ab22d488c97ce564221 create mode 100644 fuzz/corpora/server/db07c3f944b199fb9bcea172bc75b3a146dff588 create mode 100644 fuzz/corpora/server/db1c1feae39360bf6c9489112f9dbbdac2588d07 create mode 100644 fuzz/corpora/server/db26b0bb4135eb3b4226b2121f8263605a937ec9 create mode 100644 fuzz/corpora/server/db303bf7ac7c12ccda4713e64de6402492844fae create mode 100644 fuzz/corpora/server/db541c0fe27dfdc18543492548413d68a4d5e8aa create mode 100644 fuzz/corpora/server/db9b6e35c98b406246ad0f52b9c563a43e9f00d5 create mode 100644 fuzz/corpora/server/dbbc29fd14ce004ac24fc3b6666ef1115b8e6cf8 create mode 100644 fuzz/corpora/server/dbc01551278c5de510ce0bc1074db7a182af0e4f create mode 100644 fuzz/corpora/server/dbc255d49aa1e018137130d9ec28dfa69a8b3409 create mode 100644 fuzz/corpora/server/dbc4de5aef57d900d20a66a4afd1b7739ed11cf8 create mode 100644 fuzz/corpora/server/dbe5aa220ac387b74c30ef92e05510e4476f72a0 create mode 100644 fuzz/corpora/server/dbef7289b009e7e111cd715c5dcd80e282d68b9f create mode 100644 fuzz/corpora/server/dbf691700ba65e2bbfb806e62b7162be446bae9a create mode 100644 fuzz/corpora/server/dbfbe9ed6cfc3a6cd97c030f9d3ffb10d23cf76c create mode 100644 fuzz/corpora/server/dc0f89d62cd7e2734d140e81fe5e106d341e6068 create mode 100644 fuzz/corpora/server/dc373aedde4cac9c404296c2eafb1f3fedce6538 create mode 100644 fuzz/corpora/server/dc3a558e8af542a26795e58e5afdbd316e3a513e create mode 100644 fuzz/corpora/server/dc4bfcf3801d5264493256dfc175cceaf95eaaf3 create mode 100644 fuzz/corpora/server/dc5103f90e24d35bbb36d0951c91b9e03bd12aa9 create mode 100644 fuzz/corpora/server/dc62f65c82a9baabc9d2c38eef3297f64f55780a create mode 100644 fuzz/corpora/server/dca825c5849893985cf168a025fa03d5afbac8ba create mode 100644 fuzz/corpora/server/dcb47641fb272ded30bbf52f40e30968f94c4315 create mode 100644 fuzz/corpora/server/dcbdaf7e1205844b478f8525c7af8667d7ea1e62 create mode 100644 fuzz/corpora/server/dcd4abc70391c9eeaab0a2a4ca44324793f35de4 create mode 100644 fuzz/corpora/server/dcd53a0a7609b799646db32def2ec64ebe0811fd create mode 100644 fuzz/corpora/server/dcd7c013ddddfddbde355ba4c56ed0ded16f4796 create mode 100644 fuzz/corpora/server/dce422716dd9de69e15f51b012079fab4a0b3bcb create mode 100644 fuzz/corpora/server/dce8ddd18cb91e0c5ab691b5043dd9762a8a9101 create mode 100644 fuzz/corpora/server/dcebbf678ebc8f63a0354811abbf05d3da0d6af3 create mode 100644 fuzz/corpora/server/dd00e6e42f39901984251558f8340ba5be77d524 create mode 100644 fuzz/corpora/server/dd07847fb6cb4bbb61a01f5707ed5470c8e2fe54 create mode 100644 fuzz/corpora/server/dd141313ea0de59c1501ae95100d9f9bb5f53ca6 create mode 100644 fuzz/corpora/server/dd1750b7388df8b71d3ca6befd21c0b4069613b8 create mode 100644 fuzz/corpora/server/dd2492165cdea1bca8a6c2db15124e7a390ca1b4 create mode 100644 fuzz/corpora/server/dd3ccec4e7c5d99f36f0f26aceea404bd97dd40a create mode 100644 fuzz/corpora/server/dd4550fec09625be78b577db40cac3d7149f71d0 create mode 100644 fuzz/corpora/server/dd4fd8687e6aeac495abbc59089e7b33014741ef create mode 100644 fuzz/corpora/server/dd58368d20170e1f585e4e7dd7e85790c73e0d91 create mode 100644 fuzz/corpora/server/dd5b6d02eb83be894f8c490e34182e8cd0fc1da6 create mode 100644 fuzz/corpora/server/dd74fd0ffa3a0c5e574e5c4e6ce940268d9c2ed3 create mode 100644 fuzz/corpora/server/dd7833cd5a0a26ca89302dc4d37acd66cbe860a5 create mode 100644 fuzz/corpora/server/dd860044620bebb36a4892e446a3156ece9e6985 create mode 100644 fuzz/corpora/server/ddc8b14bdc772878e54abd4d7a02d1ebe0021357 create mode 100644 fuzz/corpora/server/de19c9999648d2e5eccf8dedb636a9898180d811 create mode 100644 fuzz/corpora/server/de1d31b86ad16b1adc89bd4e42ae73e0e3e8f7d1 create mode 100644 fuzz/corpora/server/de4bd8af65daf96a0580d2270c1f52a4d8e9be3e create mode 100644 fuzz/corpora/server/de5055e507626359db883115e693e9e0e4cc6cc2 create mode 100644 fuzz/corpora/server/de554fc2cacb9dbab412cbc656f9a43f8abf989e create mode 100644 fuzz/corpora/server/de7248e19077bc44fab3ee7140d4836adef739d0 create mode 100644 fuzz/corpora/server/dea780a4f8a9131c4035c622257ace115979af94 create mode 100644 fuzz/corpora/server/dea92cdcc1e531cd853c20acab4428e5952e8e16 create mode 100644 fuzz/corpora/server/df273c04aa6ddec0d4ac72dd72e0e2915b66a81f create mode 100644 fuzz/corpora/server/df2fdadca0bb4a087df36576b55c381fb10197b2 create mode 100644 fuzz/corpora/server/df409976ff0f15f564ba16fa48b17a36456e82f9 create mode 100644 fuzz/corpora/server/df4a8684303eba1ce4d8ba21dc03ca73ee447cc1 create mode 100644 fuzz/corpora/server/df5efec78b1ecc3b0f0a17ba453aa34efac1f77b create mode 100644 fuzz/corpora/server/df669213bf46cc9c18cbc2cbc53c520aca7b6a9a create mode 100644 fuzz/corpora/server/df9e3a515fecac1f607053065b02980ff5bcf3e6 create mode 100644 fuzz/corpora/server/dfade0f3c0ff29b7089d46a9094470338a85a29c create mode 100644 fuzz/corpora/server/dfd6b19cf5245534f574ac7290675a371d6ede06 create mode 100644 fuzz/corpora/server/dfef3364dedfc68a1b35c36623a7d7eb008ff7c0 create mode 100644 fuzz/corpora/server/dffa7b848f98737b01f05b379f1811c26d20bf45 create mode 100644 fuzz/corpora/server/e006bc0eb904a4fed68200e2b94112e75b9205e5 create mode 100644 fuzz/corpora/server/e008a6a949b12b006cfdb0dbe93ca5057cc92066 create mode 100644 fuzz/corpora/server/e04944532953ddb079d84fcdbfe720fd53f6e8e2 create mode 100644 fuzz/corpora/server/e0495df61a484ee8549df6c5d8a1a05e6fb2b950 create mode 100644 fuzz/corpora/server/e056c6b45021cc390949d2614c7ab01664de686a create mode 100644 fuzz/corpora/server/e05f301df040a4d44ccda6d29e059bc8d819676d create mode 100644 fuzz/corpora/server/e0a4d75755768ef05fea1cce28e16a375260fc56 create mode 100644 fuzz/corpora/server/e0b0be39391e95d96e285e71979b82a33ce1106f create mode 100644 fuzz/corpora/server/e0cb454699ad327251cc5b34f6fcd3c853b247b8 create mode 100644 fuzz/corpora/server/e0e4705754437d5f2a5ca804f3bd65b58f487b2d create mode 100644 fuzz/corpora/server/e0eb9ee38a6467a41fa2c877fa4a6c08715aca52 create mode 100644 fuzz/corpora/server/e11d2a39bb3dd2e9ff5bf4d6abc7d35300bf65c9 create mode 100644 fuzz/corpora/server/e14254afdb35c0f15732551ac25e95d7feb03f0b create mode 100644 fuzz/corpora/server/e144b86e6a9651d82dcf0dd617022282eb07111a create mode 100644 fuzz/corpora/server/e148ba25849161828438c58439cb361b3d35462b create mode 100644 fuzz/corpora/server/e162423a4d022fb782ac103d06f1d6a32fcc5e4e create mode 100644 fuzz/corpora/server/e16e95551e586feaa37f734ecad83ef1ec2b5cb6 create mode 100644 fuzz/corpora/server/e19be1dc0f08b6a9cab4abc57ea5bf9416c4ab14 create mode 100644 fuzz/corpora/server/e1a03d94efbda93f45c3717bb46a68f708ae7848 create mode 100644 fuzz/corpora/server/e1b3b8fe1320d63b7f18d412980e1f3321339606 create mode 100644 fuzz/corpora/server/e1c08e8f3e4c96e77fc7ae4b749a8e66441edfdf create mode 100644 fuzz/corpora/server/e2229fcdab9309756749ccc69b557c12955b59a8 create mode 100644 fuzz/corpora/server/e2697af5f16596f2fc006c0bcb7b8b1be099b0ee create mode 100644 fuzz/corpora/server/e26c5e6bdfda0e9cac8fccc5cae595d317401f10 create mode 100644 fuzz/corpora/server/e2777dbc8068460c36f25843284e1043a9e29984 create mode 100644 fuzz/corpora/server/e28b6b09d7980cec77dd38d21a5e04e991c03706 create mode 100644 fuzz/corpora/server/e2aab4a72f051c638f9d04428308cc73c1007402 create mode 100644 fuzz/corpora/server/e2aeb8fb416d7ff372552e155f9fc9c2d6cfa65e create mode 100644 fuzz/corpora/server/e2b23345606cb3973ece09811fb7be16ccb6172e create mode 100644 fuzz/corpora/server/e2be70080ab21e69c66942cc779c1d14f0a035ff create mode 100644 fuzz/corpora/server/e2f114b5e69962ef3882fa98fe0a2745228b6e56 create mode 100644 fuzz/corpora/server/e305137078fa7a20ac0bd05a6d672e9316646eee create mode 100644 fuzz/corpora/server/e30c8f034befd47e82b84b6c54854cec13241e9b create mode 100644 fuzz/corpora/server/e30eb352bda7219fc0f0c3c5bda301fcf1e28ec5 create mode 100644 fuzz/corpora/server/e33d40098f2b37307c4397cf5ff17a28b8e711bd create mode 100644 fuzz/corpora/server/e33d656538f7d1d34d180da517992a52801d5a96 create mode 100644 fuzz/corpora/server/e3482210f423f62baf63829309770129aec02fb3 create mode 100644 fuzz/corpora/server/e3556c56e4313a9275cb5bc5fdf6192db022c272 create mode 100644 fuzz/corpora/server/e39307c2e8a878832f3f10198cadc7a64a85a0e8 create mode 100644 fuzz/corpora/server/e3b48797c365585dac96de93b72467332dc8e453 create mode 100644 fuzz/corpora/server/e3f6299562d661a4af47679cd37db7ef1377d160 create mode 100644 fuzz/corpora/server/e42441d43cf94377b4aabe88bb1c22a0e7d11720 create mode 100644 fuzz/corpora/server/e4413ce1fbccc6bc3a1d14bc93f5926b523f8a9a create mode 100644 fuzz/corpora/server/e4528e59759de0507c9e710287dbcef473f8eb54 create mode 100644 fuzz/corpora/server/e4576f3412564b5011099fd066cfd4d00d9c9a03 create mode 100644 fuzz/corpora/server/e48a99056fc9c6a9d5038da9f343dbcecef55d4f create mode 100644 fuzz/corpora/server/e48ddeffe81511349c955c8e7f6f6ebf62363933 create mode 100644 fuzz/corpora/server/e4920a82bb5a6b5990fd9375dfcc66a538148307 create mode 100644 fuzz/corpora/server/e4978ffe4a0d5c60ec69e99fd12b2e101e6298ee create mode 100644 fuzz/corpora/server/e499209f9fc121056027189783f25751d76e83cd create mode 100644 fuzz/corpora/server/e4bcb6dd1570f99710109336c6dd93cbd974406a create mode 100644 fuzz/corpora/server/e4ced9b8c11e57adaf42ab84fe4c9760713eb039 create mode 100644 fuzz/corpora/server/e4d3559d1f520c68c66abff97da9e42dbb298cdb create mode 100644 fuzz/corpora/server/e4d7d090bade45c88e2be5f3c6ceb0f9cb2f5bf1 create mode 100644 fuzz/corpora/server/e4ecd23993578bb217d3301e353c0c71fcee9c8f create mode 100644 fuzz/corpora/server/e517ab34603eb1c61475b31fea52de0a83a39979 create mode 100644 fuzz/corpora/server/e52f3c1cc34f657929dcd19531d36f7528bdf679 create mode 100644 fuzz/corpora/server/e537cc5699bc10f6323df21d7f56e1a3db2eeb24 create mode 100644 fuzz/corpora/server/e5539c540aa9756bbaeeac040eaec1c5077c6a1c create mode 100644 fuzz/corpora/server/e558cbbabbae0ae13923da1ffda92ac75b05f5a2 create mode 100644 fuzz/corpora/server/e55f0a1a05b04311fa3da749a619dbdbc88d9917 create mode 100644 fuzz/corpora/server/e5600e2c7f33aa6cba77fa038d626c0709e9ecba create mode 100644 fuzz/corpora/server/e56b8aac4008995fb9b0d9079f78e92517cf43ab create mode 100644 fuzz/corpora/server/e57628550418b1096e924b9fede979341949816d create mode 100644 fuzz/corpora/server/e585fd438170c3af384d7203765e164d32d00454 create mode 100644 fuzz/corpora/server/e58adba6163313efd56a3f9467a38cb733b8990a create mode 100644 fuzz/corpora/server/e59be15055f0ae53738667fb46beb9472a89e2e0 create mode 100644 fuzz/corpora/server/e5a129bc055160ed1c87e7bfd2d7cb7f8fca7c8b create mode 100644 fuzz/corpora/server/e5cd92af11996eeb3155e49bb3a6a4ca8f415d54 create mode 100644 fuzz/corpora/server/e5d7a015e8fb06313e3867a7a5a0c30b83596178 create mode 100644 fuzz/corpora/server/e5fe663c48c7562bc626a718bb6ed5db1a93709f create mode 100644 fuzz/corpora/server/e606ebf8ff893b806f17131e95ee655a69c3793b create mode 100644 fuzz/corpora/server/e61499704078464a614e3b656df0d0003872742f create mode 100644 fuzz/corpora/server/e618891c135ee77954b08fd9d876a5d536071f50 create mode 100644 fuzz/corpora/server/e622368449a253bbb09ccfe8dd81c55da0e730b8 create mode 100644 fuzz/corpora/server/e6289d3ebfe64ce43dbc261490e3fb534b2e98d4 create mode 100644 fuzz/corpora/server/e64a8b23e1f6733c2a519f2c0d92849144268cb9 create mode 100644 fuzz/corpora/server/e64af6319b000618bea96b44a462a2df07959e64 create mode 100644 fuzz/corpora/server/e66ad32858df0ede4d144ecbbb968f46ba75899a create mode 100644 fuzz/corpora/server/e67f1d371569323933bca29484d7d6554a9091d2 create mode 100644 fuzz/corpora/server/e6847629357b258057711a869af7367ca576025e create mode 100644 fuzz/corpora/server/e6e97f254b6668572894782fd0f2a5690be59600 create mode 100644 fuzz/corpora/server/e6fc43f4c615088dfbb479e97fb46816c7439ae4 create mode 100644 fuzz/corpora/server/e70834393c27778a4ded46dd2ee0de578a3d5124 create mode 100644 fuzz/corpora/server/e72a9ba13ff7a812c6ebaa1e1dfba23616a5e0a4 create mode 100644 fuzz/corpora/server/e72c74d99d4d0a01d1313f64b40583ac99e1b47c create mode 100644 fuzz/corpora/server/e739550e504acbee9334a98d8c77a9d6764701b1 create mode 100644 fuzz/corpora/server/e73ea468df2fdef2ee20c8a494083e8fd9bfa5c9 create mode 100644 fuzz/corpora/server/e75751553d6b1b234cea791d1bb68167fab57868 create mode 100644 fuzz/corpora/server/e79be8049ac625f5eee3edd0883a75c23e8e33c3 create mode 100644 fuzz/corpora/server/e7c31ff75dcf0ddfc12844d515661f1645ee0a4b create mode 100644 fuzz/corpora/server/e7d752064d7ad49f1bd198cddb0390b4f56ca455 create mode 100644 fuzz/corpora/server/e7e6b6a93d6b25bf63b3c34c82d152a6f79b04bd create mode 100644 fuzz/corpora/server/e7f5e9d0c160145cc5e103ee720e1b8e324fe7fe create mode 100644 fuzz/corpora/server/e80173ad9755d1547c2f1d6ac33cafa26cf21a32 create mode 100644 fuzz/corpora/server/e81646a3617995cf53a80119327841ac92d1702c create mode 100644 fuzz/corpora/server/e81b16c070df04ad65975669ff27e5f1cc2bb502 create mode 100644 fuzz/corpora/server/e8251b4e6eaf4b527f9f998cb433c1e103e7319b create mode 100644 fuzz/corpora/server/e8275f71fe0347ec3635460c7f8bfbc0b58fffb3 create mode 100644 fuzz/corpora/server/e8660d891837e2c2d601564af6ed4534cb6f3684 create mode 100644 fuzz/corpora/server/e8d73200f9d21a7b677f7e0a6391b3c239b7b61e create mode 100644 fuzz/corpora/server/e8dbe472ed970a317c151f33f88fff60a8c5c13a create mode 100644 fuzz/corpora/server/e8f318d8df7ee29f92f0c3088bbc534afce71371 create mode 100644 fuzz/corpora/server/e8fc58a1702f4cfeaeddaf6303193f3ee0d63cb8 create mode 100644 fuzz/corpora/server/e9157a6c47964d8e3fc21b549b70a216525d01c0 create mode 100644 fuzz/corpora/server/e92c9f53cc3146a7ba96978ed91185ad7c7964e8 create mode 100644 fuzz/corpora/server/e9514bfc0f02f4c5629fed307093f78e533dafda create mode 100644 fuzz/corpora/server/e9634753a8f7cf5584a42b9e2cb046a75f1bf296 create mode 100644 fuzz/corpora/server/e9635361d394b9c39b6b28b4056cca1d64b639bc create mode 100644 fuzz/corpora/server/e97f001444c2bb43dcf332735ef99eb9e7eb775a create mode 100644 fuzz/corpora/server/e984950376b42dca8977d1fa5e95bc26ffa53c4e create mode 100644 fuzz/corpora/server/e98f661e07cbefe8a67b02551b632b869a2c9699 create mode 100644 fuzz/corpora/server/e99c53786e8a4bf34c372c71a255291e3d4a2aa5 create mode 100644 fuzz/corpora/server/e99d1e63deb410023b72e7b9a163c3c27f9b4140 create mode 100644 fuzz/corpora/server/e9a211ffae6935e01e48fc2ce617422a509eb077 create mode 100644 fuzz/corpora/server/e9a86fdc23d114a065efcefd96cd990b9d407e5f create mode 100644 fuzz/corpora/server/e9b21ff038b0d7ac29115c793abd4167d7370f86 create mode 100644 fuzz/corpora/server/e9c84cebddcf3ca59e27a8496393e6938f6cac8a create mode 100644 fuzz/corpora/server/e9ea66cf93d99cf3c1665948fe35d96a0a175fbd create mode 100644 fuzz/corpora/server/e9fc7032384a99517842df6e9570ce2c476dd525 create mode 100644 fuzz/corpora/server/ea275882972414be610d6447b6e9e837bcdf33c2 create mode 100644 fuzz/corpora/server/ea65224690609b7d2f6dd686cdc4049b49b1631c create mode 100644 fuzz/corpora/server/ea7a0965486de23b4d57bccc0a486c16fe7ffbe7 create mode 100644 fuzz/corpora/server/ea86a2bc944dd4381763d93a5ba0166985324d4a create mode 100644 fuzz/corpora/server/eaa2f095be8a955addabd965ffbf1e4853b7e4b9 create mode 100644 fuzz/corpora/server/eac4f924370d5e3dbc28233fe6233a85c37e9085 create mode 100644 fuzz/corpora/server/eac72b779212b83863051de260150b95b3a7b99b create mode 100644 fuzz/corpora/server/eac8e4ed49435fe8d9663fd9acc7d21a98a9897d create mode 100644 fuzz/corpora/server/eac8e5a23e5e1e40b7d30ec8586e0c662379d1b8 create mode 100644 fuzz/corpora/server/eacd05fc97c91fd43adbad5e706ba7a339cbad6b create mode 100644 fuzz/corpora/server/eb16bb520751e1367a48666d6baaef389870339c create mode 100644 fuzz/corpora/server/eb19d2a46bc17808ed47c6a1c1d138413ba8ef66 create mode 100644 fuzz/corpora/server/eb61f41e86485565067aea6cb8feee9c663926fa create mode 100644 fuzz/corpora/server/eb6eda2ae66e778d1dc37f9506e0f0dff83204a7 create mode 100644 fuzz/corpora/server/eb791ef9e0a5b71e5b941a39e4aa1df3e96be4bb create mode 100644 fuzz/corpora/server/eb7b2c5304f701e07b6c736b2e405fc343f3a401 create mode 100644 fuzz/corpora/server/eb7e4e73415ed37ed1be02c26fe4f627e8f1896b create mode 100644 fuzz/corpora/server/eb95093382e347a38499b6a2b614bbf1e80def31 create mode 100644 fuzz/corpora/server/eba4a0e39850585e320fd49bbefb0b1b7192c00d create mode 100644 fuzz/corpora/server/ebdaaa686fcdb1ce4d36be833a089e226a412af6 create mode 100644 fuzz/corpora/server/ec0521a603024741f669305116c3f84b2afbceee create mode 100644 fuzz/corpora/server/ec2d89ba9fa6733f89a40d329f644935785ccbc1 create mode 100644 fuzz/corpora/server/ec3725c6f5d36a810a10d3c93dc3d7bf4bdbe1a1 create mode 100644 fuzz/corpora/server/ec43e2067fefb2075506534139989cb92b966e75 create mode 100644 fuzz/corpora/server/ec5e60cd9e0fa3594b60bfa5cf3a74341c9fb03e create mode 100644 fuzz/corpora/server/ec624a22f5b372cd656f5e24fd69c6e9a43221ee create mode 100644 fuzz/corpora/server/ec65d5125278be221580dd33e41a7dbabb384bcd create mode 100644 fuzz/corpora/server/ec902b6095a3620e6a15c2782407bbb308f6a9a0 create mode 100644 fuzz/corpora/server/ec921940a201e8bc5f8352f0f872fb8c62696193 create mode 100644 fuzz/corpora/server/eca07cca963c1075904c547e9593a708cf0106ab create mode 100644 fuzz/corpora/server/ecdd07e7ce2338bf94c4e216cc2449f20d354dcd create mode 100644 fuzz/corpora/server/ecdfdeaf178402b7a642044a7513f4261d9a8485 create mode 100644 fuzz/corpora/server/ece8792c6c5e346f5d1cf1013afab3bac84bbae6 create mode 100644 fuzz/corpora/server/ecf2097a46fba15dde63f8226a9db690860ba970 create mode 100644 fuzz/corpora/server/ecf758f37fc7036818af92f3091c72b850f8ca24 create mode 100644 fuzz/corpora/server/ecf7cad9132a4d7200efd4136c093202019d35f9 create mode 100644 fuzz/corpora/server/ecfa3cacecb1b35351366f3e301ec9edea14c462 create mode 100644 fuzz/corpora/server/ed05ac2c6ae468c08a09df980eb72c3286373e0b create mode 100644 fuzz/corpora/server/ed0ebb9332c9d5bff8711c235d4cf1c8989f440b create mode 100644 fuzz/corpora/server/ed16cf45105a3e35a2dcb7f50d817956a46ebdc2 create mode 100644 fuzz/corpora/server/ed2450b7c84846ab9425ad6f6e3cc59259cfe547 create mode 100644 fuzz/corpora/server/ed28a0fce2532b149662de749ec18dc9fffd7adb create mode 100644 fuzz/corpora/server/ed29ac783273e5ffbb92542b0f3f5424d50adca8 create mode 100644 fuzz/corpora/server/ed7d189f546cb01cdb48261e5086a5c9f6fbca97 create mode 100644 fuzz/corpora/server/ed95046d498814585520da6691db20d35c341ba2 create mode 100644 fuzz/corpora/server/ed97fe87316b9f944a98101bd45330b108e7ac3f create mode 100644 fuzz/corpora/server/edb1d8a2a5b8bba26def7c16245b337ab3cf014c create mode 100644 fuzz/corpora/server/edc2cf2ae3313e0a6527d8d6217add8f25a39009 create mode 100644 fuzz/corpora/server/edd034530ad7377488f6cae41065bb364a591ea3 create mode 100644 fuzz/corpora/server/edd15eb1199af540ff828ef278a35a9e44c1c4b2 create mode 100644 fuzz/corpora/server/eded9a490b72d199ce0b358dfd5630738f040d6e create mode 100644 fuzz/corpora/server/ee08daf515afaae604820768c26addd51988f215 create mode 100644 fuzz/corpora/server/ee0cb87202fe0e389f8bc18aa1bcba3668d9575a create mode 100644 fuzz/corpora/server/ee111a52a08511a985417a39e440e230f04ab3d3 create mode 100644 fuzz/corpora/server/ee2d792097e1acfd14d3f018ac92ae32f5164afc create mode 100644 fuzz/corpora/server/ee59f2dccf558eee2292c87974a92802c63f0672 create mode 100644 fuzz/corpora/server/ee607f76e8b39433b6234d4e9355a854981af280 create mode 100644 fuzz/corpora/server/ee67cb38f7ded8dd07ed4b6edb95e92f28e9d663 create mode 100644 fuzz/corpora/server/ee92c1a1b78c7c7c1bc51c8f6c719df444c83b43 create mode 100644 fuzz/corpora/server/eea412676088668c576470016d6ef6e77ab17813 create mode 100644 fuzz/corpora/server/eea891a373d7404dada20405d9738818e7a20c79 create mode 100644 fuzz/corpora/server/eeba1f97cf0560a07bf4cc734373ce15ccc4ab72 create mode 100644 fuzz/corpora/server/eebfcdb30733f173b2c64eb7d4aef075f9346366 create mode 100644 fuzz/corpora/server/eef4f864c620639a0c2e71f8d8cae07b5ab83272 create mode 100644 fuzz/corpora/server/eef588f67d45e558d36a9f38285518316048e236 create mode 100644 fuzz/corpora/server/ef14f59cc2d6b1560e29f9e5e6afa802e4934c1c create mode 100644 fuzz/corpora/server/ef1707a6ff9571ed5ad29557a03819add0bf858b create mode 100644 fuzz/corpora/server/ef35b44531412b9491b8cb15f365f6a92a47aef2 create mode 100644 fuzz/corpora/server/ef5005f4850f5ebbe4a3f5b75b210b4e68958247 create mode 100644 fuzz/corpora/server/ef5404784b13cfd96d6b019d8e58ef211cd41fab create mode 100644 fuzz/corpora/server/ef7460e1d7f49bdec855b39573f1e7633f1a39be create mode 100644 fuzz/corpora/server/efa75afaa8cb1c493138c1377156b07f3473977c create mode 100644 fuzz/corpora/server/efaafe05f7e9aec821ea33441f2f4c9b61dde29a create mode 100644 fuzz/corpora/server/efc5cf9b88d18bbab71dd724933e3e53a35c3f3b create mode 100644 fuzz/corpora/server/efe310f2a47d29eaec901abba37acb12ba99f028 create mode 100644 fuzz/corpora/server/efe9d37b5a34c083a637cd62374c6b7752737835 create mode 100644 fuzz/corpora/server/efecac7818751b65b6306145c930123c71bfef1f create mode 100644 fuzz/corpora/server/efef9f68916a662052f6df53cd09398201ddd7a9 create mode 100644 fuzz/corpora/server/effdca9378f5afeeca1147060ae3093fe337b665 create mode 100644 fuzz/corpora/server/efff99c4132e09cdca93c679ad159199dd407e60 create mode 100644 fuzz/corpora/server/f006457ea319a5c87863254ce1dcd586b2d460fd create mode 100644 fuzz/corpora/server/f00b402a4e1becee7bb0a16281c61ff13f6422a8 create mode 100644 fuzz/corpora/server/f0196f84489384309705a8860204e29851ec5760 create mode 100644 fuzz/corpora/server/f021f21d16c927d6a076ad378d7516155d816ccf create mode 100644 fuzz/corpora/server/f0528edd52290b28d6941f232d13b3330c849ee1 create mode 100644 fuzz/corpora/server/f0580003f4c8c0e4df9ec8c82d57c6bd5058e3ca create mode 100644 fuzz/corpora/server/f05ed77068e6358842c88bed42b86f0053d016dd create mode 100644 fuzz/corpora/server/f08336534682416e3407af225fd1486bdd1d84d0 create mode 100644 fuzz/corpora/server/f08a9b96f8f82669a25ff7c38d3edb0b93cf9d3a create mode 100644 fuzz/corpora/server/f0913b25a75a014a5651b47f3e231068f11e12c9 create mode 100644 fuzz/corpora/server/f0a51ac511372c48a83ba408c8b466be1fe96c19 create mode 100644 fuzz/corpora/server/f0bef8fa4c0587888b806d7baa857e8e0ae2d2b5 create mode 100644 fuzz/corpora/server/f0ca314bb79eba6a128de58a80bbe632a10a4518 create mode 100644 fuzz/corpora/server/f0efa8060a3fbed122329aa6bd4377fd38e76f01 create mode 100644 fuzz/corpora/server/f103d87a77d95280ecc20d62b4774c93cf0df51b create mode 100644 fuzz/corpora/server/f10471cf5ae5b977a04f27446cf845d4ba834413 create mode 100644 fuzz/corpora/server/f113293ff92b1b5cf37f10e008890c128bfd1f57 create mode 100644 fuzz/corpora/server/f11de1f989b6edcd073ef05a144b415ed6df68cb create mode 100644 fuzz/corpora/server/f1343b06d4f43100a69af08b9b5731d9aaa0fda0 create mode 100644 fuzz/corpora/server/f14c7a17216f7772de6df595aa08a528f2c472b1 create mode 100644 fuzz/corpora/server/f14ee9668df5c1b5e5c7db9438ed54b8868f232a create mode 100644 fuzz/corpora/server/f15630141ee1385a6dd02b26408089621646b4df create mode 100644 fuzz/corpora/server/f16073fcf2a7ea4c6bd81a66fd0eaacd324c1b10 create mode 100644 fuzz/corpora/server/f16348efac700373a2fc3ed5bb6b332e5ad03894 create mode 100644 fuzz/corpora/server/f166f7a6c8734a3497760c362b27205baa7a3598 create mode 100644 fuzz/corpora/server/f187dd6c990b97dff6b3e3b960bf9b40f8ce6bd1 create mode 100644 fuzz/corpora/server/f1a5ccaa8a842f1a84ee4050f3e35d299406909e create mode 100644 fuzz/corpora/server/f1a710ff9ecdefb29b38a8a8b891278a9bf4782a create mode 100644 fuzz/corpora/server/f1b75d7ddc8c34ccef5b015a7f1a2c87868bbb19 create mode 100644 fuzz/corpora/server/f1bc5a4ab248d451a32093be58b9b471bb1dfeda create mode 100644 fuzz/corpora/server/f1d69dcecf0c8a1050663fb82b2c697165755426 create mode 100644 fuzz/corpora/server/f1e3ffdbbf9dc80f271f9de7c1fc2e307048a284 create mode 100644 fuzz/corpora/server/f1fa90b673d397e31605680c2999278b9f1e59a7 create mode 100644 fuzz/corpora/server/f207b19e78c3250364221986a51057baac3cadbb create mode 100644 fuzz/corpora/server/f20f83ce50c51d5d6e55b9e4abeba9413a4b2179 create mode 100644 fuzz/corpora/server/f24983a9a605d5e1a54c71684764037e801bc497 create mode 100644 fuzz/corpora/server/f25372a0b18d4b589035f2bad801f4e99a99699b create mode 100644 fuzz/corpora/server/f290fc63fad33a841a660fe57fa2306a2abe77a4 create mode 100644 fuzz/corpora/server/f296ae12060879b921795984a2d95da0a5aeb8d2 create mode 100644 fuzz/corpora/server/f2c8576012e41c1d05acd88489bb6bf00159c072 create mode 100644 fuzz/corpora/server/f2d322e0cba4e15b0cad8d90c05be69d89678e5a create mode 100644 fuzz/corpora/server/f2f578182aa5ae77501391418784c0e70abb8bd4 create mode 100644 fuzz/corpora/server/f31c888c6ac21890638ee85fd47ad948f60ef8a7 create mode 100644 fuzz/corpora/server/f31e8635d4ce1b21371376380ea94aae3124b504 create mode 100644 fuzz/corpora/server/f331baf21716b0b1c2ea65a97ac5d76f7dd4cc33 create mode 100644 fuzz/corpora/server/f33a81819318523fdd0b2b175a2ab7950545bc37 create mode 100644 fuzz/corpora/server/f3619396171103496f527ac489d9faa39b43a9f6 create mode 100644 fuzz/corpora/server/f3763c0b707501bad53a32c46ccace7f505af071 create mode 100644 fuzz/corpora/server/f3899723eefe45e2fbf6d4bd3389da6d7b5fade4 create mode 100644 fuzz/corpora/server/f392a1d851a08bc2facfb4a3d5a3779a3c85a76e create mode 100644 fuzz/corpora/server/f3962ba3a9c1d4e91d10671d28efb7bf9c82a51c create mode 100644 fuzz/corpora/server/f396507cee7658eb29fb5bf1ae1927486a1827cf create mode 100644 fuzz/corpora/server/f39f31b65f47befe618cf565562b4b5706557f36 create mode 100644 fuzz/corpora/server/f3ad00635d04d33db1b55438aaf04f9bbc6388e2 create mode 100644 fuzz/corpora/server/f3cdfbd53c7b281f01460d39c49cd1271b792288 create mode 100644 fuzz/corpora/server/f3d180a8ee83f6795383f0684774830f91ebcedb create mode 100644 fuzz/corpora/server/f40b0d4d6c700ff2186b23307c5defca8d061490 create mode 100644 fuzz/corpora/server/f41158b290c7758791b6402b3ae05feaab2216b1 create mode 100644 fuzz/corpora/server/f44b97c86d901e717977222cf803fce5bcbe59d9 create mode 100644 fuzz/corpora/server/f45215514abacac627b55e9c121aadf45571cb3e create mode 100644 fuzz/corpora/server/f483b4553ada5539c34be5cba4b790dd3acebcd2 create mode 100644 fuzz/corpora/server/f4a91dc65f59cdc22db75adc084031e5a7066f75 create mode 100644 fuzz/corpora/server/f4e2b4521bed21c7ec4a4ab453618f7da0e86995 create mode 100644 fuzz/corpora/server/f4e4247f9bd9615302a080c8dfae18450271ef55 create mode 100644 fuzz/corpora/server/f5023c9ed819fede7ee627539f23c4e9df5edba4 create mode 100644 fuzz/corpora/server/f53841e711665c80cc02a64711bfb892a5b00ff2 create mode 100644 fuzz/corpora/server/f56542ca7f14accaf0170e817770927449263b9f create mode 100644 fuzz/corpora/server/f568ab6fd0141400a6db88d50371bfec040ef6e4 create mode 100644 fuzz/corpora/server/f56cf7397d4b5a7010834d1fb766055f1d890cfc create mode 100644 fuzz/corpora/server/f5701d543e870be38416d0d306172038b928a36e create mode 100644 fuzz/corpora/server/f58fcf89726708a247a42cc8170991ec49c4fe49 create mode 100644 fuzz/corpora/server/f593501f829cc89dbf19a4daea3b2dff4bd5cc00 create mode 100644 fuzz/corpora/server/f5a3b9912397ef4a3025be7430d38a9114cf8824 create mode 100644 fuzz/corpora/server/f5ac1a335cac242e59159dc59519ae4645a7a3fd create mode 100644 fuzz/corpora/server/f5ad23b02831f26e348bd9a07190567b74a1dea5 create mode 100644 fuzz/corpora/server/f5c9884ef56a3a163c791d0d50515db3c7ac6dd6 create mode 100644 fuzz/corpora/server/f5cceb22176cd225c9e43e709411229233a52f1a create mode 100644 fuzz/corpora/server/f5fb1355d4d05b5411c8a46b03784105538b9d20 create mode 100644 fuzz/corpora/server/f606fbdc5a066ef52b7f49389680d633899f488e create mode 100644 fuzz/corpora/server/f61de0a49faaa88b15749428f1d874eefdab6c21 create mode 100644 fuzz/corpora/server/f63cadddc34d42687bbb3ea7d22506447a4b2a4b create mode 100644 fuzz/corpora/server/f6672fdba15a15f4b1905181b00b71c921fd07b7 create mode 100644 fuzz/corpora/server/f6763f21eb4575a05d05a9736de5cc9edf6f44a0 create mode 100644 fuzz/corpora/server/f67e9f7ec8d25961b4b9225409f9467965592d99 create mode 100644 fuzz/corpora/server/f69f13edd6b8e82f7b85e48f68f139f2e879d1db create mode 100644 fuzz/corpora/server/f6c49052dcff5400e0e256595891bceed88626ea create mode 100644 fuzz/corpora/server/f6c80d39eefe340cc8faa268c0449e9f9219ca60 create mode 100644 fuzz/corpora/server/f6fb09828614e8e05f3e312829d27479f8a91aa7 create mode 100644 fuzz/corpora/server/f6ff0aa972b46796da53b880944e53df20677d9f create mode 100644 fuzz/corpora/server/f7021691a3e964330b1afb484b736334e66a5fbc create mode 100644 fuzz/corpora/server/f710815149e69fd3afd9064244de4fdc4993c365 create mode 100644 fuzz/corpora/server/f71ce4ea670a58c4639dfc922fc07aa193e30718 create mode 100644 fuzz/corpora/server/f722ddbff7ef2ec699c2fa925a98db8d1aaa1df6 create mode 100644 fuzz/corpora/server/f72bb995309ab56c0917a46a71c164338d57bff5 create mode 100644 fuzz/corpora/server/f72d46bf406f52aa4469b2ec04c403e889e0983c create mode 100644 fuzz/corpora/server/f780648ed8c2d80a4ead8ced6db4b8eeca97eeff create mode 100644 fuzz/corpora/server/f7826d57b1a5d3b4d8a407e07e941f2ef9cdb409 create mode 100644 fuzz/corpora/server/f7d83bc44d823b63ef00d8449004844884575d28 create mode 100644 fuzz/corpora/server/f7d9f95d13b12a20e17c136823fe1b22ac844264 create mode 100644 fuzz/corpora/server/f806c6a4f3842ace543914391b568398e3d4c5fb create mode 100644 fuzz/corpora/server/f82a937d441370a408bedd6648b8930f4105c3a2 create mode 100644 fuzz/corpora/server/f850102c64f57d2093b6a5aafbe60ec1f502c077 create mode 100644 fuzz/corpora/server/f86a5a32ed3f43bc64194bb591b2e285b04be52f create mode 100644 fuzz/corpora/server/f876a3b88e8519214c3f055eeff8131532163455 create mode 100644 fuzz/corpora/server/f89ac7f286da4dca190f0fa2686e9c1985e00995 create mode 100644 fuzz/corpora/server/f8a858eb42beb2cb57d38f800ee10b7371df16ca create mode 100644 fuzz/corpora/server/f8d2abf148b80edd1741d54e395034d8815ff04b create mode 100644 fuzz/corpora/server/f8d36bb0141212dd2fac592b96dbd09eddbb317c create mode 100644 fuzz/corpora/server/f8d39d0c344dd394d86a3b8506e84c35846e5a89 create mode 100644 fuzz/corpora/server/f8f8b3ca4895445bc8060ad817d28de9c43ea684 create mode 100644 fuzz/corpora/server/f8fba6ccb6844983b0123c63aea4779c977fcbd9 create mode 100644 fuzz/corpora/server/f916190b813b290427388579506702cc3fb3970d create mode 100644 fuzz/corpora/server/f9290f3b12a8d92751942fa20c7f2166a209bf1d create mode 100644 fuzz/corpora/server/f96265e9ff723e128480c3768c77ffbbad02745a create mode 100644 fuzz/corpora/server/f98730c2ea7214201e1fb0f2dd11ffe79f1db0c0 create mode 100644 fuzz/corpora/server/f9a7fb203187acf189879346349360d6f54458f8 create mode 100644 fuzz/corpora/server/f9b48bd261f04220d7ad710bd60743881d79eab7 create mode 100644 fuzz/corpora/server/f9c02f039eb03d71395b3fcde69350fd7197fdb6 create mode 100644 fuzz/corpora/server/f9cbcf8b59dfc1a21ba865b871d8595651e737e8 create mode 100644 fuzz/corpora/server/f9d2ba7c9daa914c289f47d83eaa29e1ac3a5412 create mode 100644 fuzz/corpora/server/fa0c9257b78782e9bab41c98b6ffdc343fd772cd create mode 100644 fuzz/corpora/server/fa493fe381593e2a304a24e55ea8ad4f2a65c380 create mode 100644 fuzz/corpora/server/fa7b5a9f562dbb54a77cf47348292dff7867e8ea create mode 100644 fuzz/corpora/server/fa7ec58afc3b72659ac7c2f0ecf4d09116a9572c create mode 100644 fuzz/corpora/server/fa951e24268f784a0cc331f06806e2341af5189c create mode 100644 fuzz/corpora/server/fab939eace0c19df489133f8e132b7c0537ddc16 create mode 100644 fuzz/corpora/server/facf8f422730b61a4ce746bd170823dbc8da91a4 create mode 100644 fuzz/corpora/server/fae60bd3f784ec0f590247d2c202a91f4fa6f452 create mode 100644 fuzz/corpora/server/faead3aaa421a282b560e97b4b2900c452c4da75 create mode 100644 fuzz/corpora/server/fb2ced73899b748a08b87c2efa56c09578835083 create mode 100644 fuzz/corpora/server/fb2d7d892e9bcae2a612abd510f3a0ae8b716576 create mode 100644 fuzz/corpora/server/fb530bac3592801ecbb85fc5e7d76d9612580c95 create mode 100644 fuzz/corpora/server/fb5681858a2a8032fb1fbcfd51f68c3d080b0686 create mode 100644 fuzz/corpora/server/fb574a5a3cdbc1970b4915ab3f8a03fb4e764b46 create mode 100644 fuzz/corpora/server/fb74ac3710ea9c35b9e3dfe3f7e3a405cb84fc21 create mode 100644 fuzz/corpora/server/fba858be23f44f9b0c6a3dcbb95d2f439aae47e3 create mode 100644 fuzz/corpora/server/fbbc80f2be52603364401635b9ac579e86422c09 create mode 100644 fuzz/corpora/server/fbd6c1392bd0a2ec2ca1578938e12a6edc117c6e create mode 100644 fuzz/corpora/server/fbdec53ed9a341fb72d1d26b4c9e4673d37f8a68 create mode 100644 fuzz/corpora/server/fc14525fe827050f8cf8a7c03316f60465a57816 create mode 100644 fuzz/corpora/server/fc555c6467c9aa496e0a865450034769a9ebfcdc create mode 100644 fuzz/corpora/server/fc61d81c72c31158c40366e02c56d4846b60444f create mode 100644 fuzz/corpora/server/fc7ef2b6bdd56950c382a21e67d9f6e102011aec create mode 100644 fuzz/corpora/server/fcb378e1df3f651d3ddbc08644270bf0151ff2e6 create mode 100644 fuzz/corpora/server/fcb6c10d2916587e61876acbb1c9d5a751034683 create mode 100644 fuzz/corpora/server/fcc46816c686530a78a0e8fd788efd044369a272 create mode 100644 fuzz/corpora/server/fcd0dd060603e13fc5c4d1fae56d2b6ca0e87dd9 create mode 100644 fuzz/corpora/server/fcdaf42a7f27be909599fba45af41f6dfb951a12 create mode 100644 fuzz/corpora/server/fcde90c6ca2f67935f79fe19427c0f91091ddd0a create mode 100644 fuzz/corpora/server/fd2723974f25e5a6f87ccdc51ed0f6a6f32be580 create mode 100644 fuzz/corpora/server/fd30c9f8fe11a666c7e1d57a3df171dc51442b09 create mode 100644 fuzz/corpora/server/fd32a5e3bcf4da6e92e85a99dc17f85b747bc3a3 create mode 100644 fuzz/corpora/server/fd3882351be9a6e034fcf9d6f3901a88dbf28e18 create mode 100644 fuzz/corpora/server/fd38e5a57a338030d064f12e36c6995ce72db411 create mode 100644 fuzz/corpora/server/fd40a7dce442e3bc6f01b94e3d97f4a1ba25f469 create mode 100644 fuzz/corpora/server/fd58e24525a77fea3abd676f47e99b238aee264d create mode 100644 fuzz/corpora/server/fd72a4a086392b212e937f3f89f594476720027d create mode 100644 fuzz/corpora/server/fda50a63d5a75bf661c5c3694cac8e315f50fe62 create mode 100644 fuzz/corpora/server/fdbac75260dd29391d66aa7da720d70a8de62b91 create mode 100644 fuzz/corpora/server/fdd8786dd44b64b421884b192b056ae79cc15cc0 create mode 100644 fuzz/corpora/server/fddb973118285b72224e6fbd7e198bca89473c9d create mode 100644 fuzz/corpora/server/fde3836e83d7032c3ce422cd48faea5a7c8567f5 create mode 100644 fuzz/corpora/server/fde7fec21feaada069fa66f24e86a5fb9e1f4685 create mode 100644 fuzz/corpora/server/fe00a0fbd2780be5b79a239f19b29ee4a38e8820 create mode 100644 fuzz/corpora/server/fe00e155456ac39a6634bca25ed5e88b94171c89 create mode 100644 fuzz/corpora/server/fe037b0a9598d7cb58011a6949cd8dab54f98c93 create mode 100644 fuzz/corpora/server/fe284f96cca855a65f8f4ea0d22d82ee807ab0c4 create mode 100644 fuzz/corpora/server/fe3b65ac3da97185015a10775ebc5943b7e5601d create mode 100644 fuzz/corpora/server/fe50a8e384daf570a35ff5961435124a5c9e3085 create mode 100644 fuzz/corpora/server/fe580d8ac2802a14d7dfc9f95551863b7e0eebf4 create mode 100644 fuzz/corpora/server/fe62328ddad04f6439cb73864a141b761bd32643 create mode 100644 fuzz/corpora/server/fe8e5273f5b822149d1b9b408edc39e611b116f7 create mode 100644 fuzz/corpora/server/fe99489572944ade3f99aa517d4e49bf3a48c199 create mode 100644 fuzz/corpora/server/feb156839141e3a81373b27014d94643b4cb2372 create mode 100644 fuzz/corpora/server/feedc0da65d08383e681a790c2aa91ff0f6ca913 create mode 100644 fuzz/corpora/server/feefd01fae313e779866c9ec5bd19ce729421fb7 create mode 100644 fuzz/corpora/server/ff01dc0e9436e4691a680c20f7b5bcea91ad17ba create mode 100644 fuzz/corpora/server/ff49bac394417c4c624d3c503a6e473b687f3644 create mode 100644 fuzz/corpora/server/ff4d33206a96ea8358a09e9d8d8b00f7783112bb create mode 100644 fuzz/corpora/server/ff63ddd2683e3e2a13ae18b20a1d8131552fa8bb create mode 100644 fuzz/corpora/server/ff89634750d34adf64d3260127c43ec3a04c2f40 create mode 100644 fuzz/corpora/server/ff9006ae3b0364c076886eebce1416c51942abeb create mode 100644 fuzz/corpora/server/ff94a1c2478603852203c85601b845f1696e5ea5 create mode 100644 fuzz/corpora/server/ff9cac43940a2b0fb0649fdf5c331a915267bb60 create mode 100644 fuzz/corpora/server/ffa5619be216040f5126854eea351406b781d5f7 create mode 100644 fuzz/corpora/server/ffcf3ed49f07fad1216b9632c20612fdca08d09f create mode 100644 fuzz/corpora/x509/003e2514ee9f11b0a3ed3c56e6f897ea3158d86c create mode 100644 fuzz/corpora/x509/00568191eb6d224f8f989ffd1c009f766ee3d144 create mode 100644 fuzz/corpora/x509/0089650daaa68c8884536003bf9849c4351c678b create mode 100644 fuzz/corpora/x509/0095a575a559d7cb5399c251641eed855dd8285b create mode 100644 fuzz/corpora/x509/00ddeae8632e7c0a7040a747260bcf3496c4ae3d create mode 100644 fuzz/corpora/x509/00f0608cd4332fefb4f603607e876e7b93f46109 create mode 100644 fuzz/corpora/x509/026a2f830a0ab2d18390fe23f46d8c92250cbdc7 create mode 100644 fuzz/corpora/x509/028b7fed1a77134a8ba463d227cfabe1b3bbae9f create mode 100644 fuzz/corpora/x509/02d625763d51fb4f68b1cbd009270f0f262433ac create mode 100644 fuzz/corpora/x509/02d85e646080bee0bdac6bfc07760224ca475f02 create mode 100644 fuzz/corpora/x509/02d8b1a33da7d252099321eb74ba39778a7835fc create mode 100644 fuzz/corpora/x509/0326b1c3f0b7baf719520ed40e240a2ecaf4af37 create mode 100644 fuzz/corpora/x509/03b90f04674a58e1af65191769fe816e36257e58 create mode 100644 fuzz/corpora/x509/04286db00b45601ea17977e75a6dfcc558b28e2b create mode 100644 fuzz/corpora/x509/0435de0a76087810cf8620fe46fb334e46f41092 create mode 100644 fuzz/corpora/x509/048913689f3518eb93289eb6fcc2ef9a59fffc2b create mode 100644 fuzz/corpora/x509/048a1577c90133583ef30ed13a74276ccb23abb6 create mode 100644 fuzz/corpora/x509/04b5c7d18ec90eb1d6efbd56f3c959b899a5ca75 create mode 100644 fuzz/corpora/x509/0521ddadea103c6124b4ec4c09a0d56dbfb8681a create mode 100644 fuzz/corpora/x509/058bddd453d026f497800380b35130d02a6c1fa3 create mode 100644 fuzz/corpora/x509/0639a03713aab892ceb0e640547fa947375e463c create mode 100644 fuzz/corpora/x509/063f592dd1db064dfa24e62af372d177594e1a8b create mode 100644 fuzz/corpora/x509/0651045b6f835a8440b3f361348142f1695e2121 create mode 100644 fuzz/corpora/x509/06834b75b3439ba7604f0c223b1d266f5f2cae88 create mode 100644 fuzz/corpora/x509/0692826d58565ab1255489b2f936248f64a75606 create mode 100644 fuzz/corpora/x509/0770419b678ccb6ca7d64fbd9452e64e63f17876 create mode 100644 fuzz/corpora/x509/07acef79f693def9e3341f25a3f6f7bde342bf96 create mode 100644 fuzz/corpora/x509/07d938cfea3fa409b0e1cf7693efc3685937f421 create mode 100644 fuzz/corpora/x509/07f3468358ab4012a292e51403032548dd95ae4b create mode 100644 fuzz/corpora/x509/08738e1e235d4349201765e7a157e246581a19ad create mode 100644 fuzz/corpora/x509/08a04cc8467619f4c50d5a18756de1739503eb26 create mode 100644 fuzz/corpora/x509/08c8b3a0c94a979339228af8d889ba4f27da4e1a create mode 100644 fuzz/corpora/x509/08f347b41e8f6407f35924adda5f106cd600cc43 create mode 100644 fuzz/corpora/x509/08fafe4016e5bbb41fe46b54fb299aad70332ec5 create mode 100644 fuzz/corpora/x509/092a51864911eefdd13bfce8d6ea8e0f011fe788 create mode 100644 fuzz/corpora/x509/09354f1f6ddc1ac459df97fd3b522167e59b39a3 create mode 100644 fuzz/corpora/x509/0948289110fe992bab9d047b554367e0677bac7b create mode 100644 fuzz/corpora/x509/0950e0637c0d69fe222a9fa1dce5fe48c0d331a2 create mode 100644 fuzz/corpora/x509/095b2792a5a262a0ac5e35e5c89d38e24cf589f3 create mode 100644 fuzz/corpora/x509/096b35a0e404d1f2a5577b02caf317ea0cbf91d8 create mode 100644 fuzz/corpora/x509/098208056cbeb946e913c40dcbeb85a7e76b61c8 create mode 100644 fuzz/corpora/x509/099ba1a206336714a72affd51a1802b7667fdd26 create mode 100644 fuzz/corpora/x509/09b15c6338fa8f553912d872fc2d8e91336720b7 create mode 100644 fuzz/corpora/x509/09c5db4fb7c27c27a81a60ea07938c879241c51e create mode 100644 fuzz/corpora/x509/09f27cac07bb48e184de73e354e25cae7fbd5779 create mode 100644 fuzz/corpora/x509/09f87bc7ca3ad60394fcb2601cb54bbc9486aa74 create mode 100644 fuzz/corpora/x509/0a0a450c5794be9fb982f13fadc95f934ad726a9 create mode 100644 fuzz/corpora/x509/0a7da7474862f72f06def1b974ad6d99ba2b057b create mode 100644 fuzz/corpora/x509/0a7e346872eb38051e764ff49f07973f5937ec40 create mode 100644 fuzz/corpora/x509/0ab0230dc85dbe79171312ab0b3d2e48151ecb5d create mode 100644 fuzz/corpora/x509/0ab2341d647c578dd916f4c2224ca2ec2ba0570d create mode 100644 fuzz/corpora/x509/0ac1b75580216b0c8c689996cfe2ada947132da0 create mode 100644 fuzz/corpora/x509/0af592acb69c287c6b318223393d41c3091d12c3 create mode 100644 fuzz/corpora/x509/0b04bfe88b60b5142fc122598230f0ae4b9b98d3 create mode 100644 fuzz/corpora/x509/0b308cd5300ddfb0fb71b8668c9622b15ed3e21d create mode 100644 fuzz/corpora/x509/0b84b22ca9bfdedef7ade08bd961c3d9043cd7b5 create mode 100644 fuzz/corpora/x509/0bc7cf1c2ac68bedb68d79fcb0184c0863380593 create mode 100644 fuzz/corpora/x509/0bf3425f4a7ea3fe4e8aedaa696ef3cb8bbb17df create mode 100644 fuzz/corpora/x509/0c16d5f821ac930aac44e2c77c801c187664f8e7 create mode 100644 fuzz/corpora/x509/0c73c47f78b5f8497f3306a90a4a66f2997cce2c create mode 100644 fuzz/corpora/x509/0c80bfe962eef7d0e65de0d6f4527e7cf66523e9 create mode 100644 fuzz/corpora/x509/0cb7c8c4db066f456f280136524577398143ea24 create mode 100644 fuzz/corpora/x509/0d65068c2e17546b073f5a8ff89026ee9b4f253c create mode 100644 fuzz/corpora/x509/0d670f722944f5b8860e79bdbbe3bd5500750933 create mode 100644 fuzz/corpora/x509/0d9c88142917f3855f81be9327e3bbe07ee35370 create mode 100644 fuzz/corpora/x509/0db6453c788d8ae09dca0709e2c3fb4a4cc5160a create mode 100644 fuzz/corpora/x509/0ddda024e28aef18366c5cec005c24c480fab721 create mode 100644 fuzz/corpora/x509/0e12cdb93321d3fe6bd910c9e9901eb50992b0b5 create mode 100644 fuzz/corpora/x509/0e27825c3c9af8b915cb4b315344d366e70b825b create mode 100644 fuzz/corpora/x509/0e37dd2c185dfc1d70c57c3e193789ee69d8aa53 create mode 100644 fuzz/corpora/x509/0e745d5a1a3a84114c12847900b3be61dff8e284 create mode 100644 fuzz/corpora/x509/0ec235877a37027853ee5cff61308b6fc032034b create mode 100644 fuzz/corpora/x509/0ed020c00521eac46e4898f54c5a917623b42b4f create mode 100644 fuzz/corpora/x509/0ed5b059c60679bb447bc4ca3c783c48af1110e6 create mode 100644 fuzz/corpora/x509/0efb72bf566bf70ccb51bae98a8eaf0b65c98788 create mode 100644 fuzz/corpora/x509/0f286564b334ce83cf14481e30fff5cbdd25d444 create mode 100644 fuzz/corpora/x509/0fa52d85711ea7d64d94ffcb1bfe8ccd9180e10d create mode 100644 fuzz/corpora/x509/0fc8d0201bf80e48526d678c07f0097e57e89ce8 create mode 100644 fuzz/corpora/x509/0fcb9c0c3ec371ec61cceae3be2235086fd03d73 create mode 100644 fuzz/corpora/x509/0fcd273ba7d20d93228fa1da96060491e49f192e create mode 100644 fuzz/corpora/x509/0fe5d279320bcd5395119c6a301c9e76ae7ac631 create mode 100644 fuzz/corpora/x509/0fe709ef40a1acbe586e3101843c417499ffcb54 create mode 100644 fuzz/corpora/x509/0ffbc8752fb90249a7c3912ec4ca8080ea4aaa5a create mode 100644 fuzz/corpora/x509/1035840e1c97e9b62263962d3a8934c1a3f730c5 create mode 100644 fuzz/corpora/x509/1052bbd2853001261af2097004bddc9a9298f84a create mode 100644 fuzz/corpora/x509/1079e243b0b762503ce5c0dcdebb8d18eea040db create mode 100644 fuzz/corpora/x509/107f8546582cd7d17ebdfc194217e18f7df78e7e create mode 100644 fuzz/corpora/x509/1088bb7c1c6359902ab9e5c099250683119a8e2f create mode 100644 fuzz/corpora/x509/10e5e552ac326cbba75bf79609b7b7bd69acde87 create mode 100644 fuzz/corpora/x509/11118ee94a4ed239d2da740cabbd755f52d1f048 create mode 100644 fuzz/corpora/x509/111537830d5aa385d9c00c1a18a4ee28b1174914 create mode 100644 fuzz/corpora/x509/11704eb0b54e1cd55f57c2fac792f514b1c18604 create mode 100644 fuzz/corpora/x509/11a26703e25658de2c37e233637e480ba81262d2 create mode 100644 fuzz/corpora/x509/11b202794e9cc4d415102184a4f477ac7759ffbd create mode 100644 fuzz/corpora/x509/11b819b2ba1dd5d72ffde90285917fca9d905b34 create mode 100644 fuzz/corpora/x509/11d75c9164a19835a4f5281034ca89be6f9fbdf3 create mode 100644 fuzz/corpora/x509/12375fc9ae9d2307395b57168a26da95c720a143 create mode 100644 fuzz/corpora/x509/1261bd016a54326613f0165571b9ef128861dff9 create mode 100644 fuzz/corpora/x509/12a5aa92c636b9e6fb2b9aaef68c340e5a892e84 create mode 100644 fuzz/corpora/x509/12f1d47eb7e9909bbdb6f0fbaa13c95efc4995ba create mode 100644 fuzz/corpora/x509/134fe32aa732f4b8d4ae57ef354dbee82bdc6534 create mode 100644 fuzz/corpora/x509/1399f9e942d935afe716c81d86e71f9dc258f02d create mode 100644 fuzz/corpora/x509/13aadef19e4ad77e783b41ac19de415da39910de create mode 100644 fuzz/corpora/x509/13af2ce816852e3251f3d4331dc4d21ebc401ab9 create mode 100644 fuzz/corpora/x509/13b827f952989b3bca7388196bfda5bf01b589e5 create mode 100644 fuzz/corpora/x509/13e1cc4e698eab265838de09d7df6f9606c924a4 create mode 100644 fuzz/corpora/x509/1413e2df3e3d585ab0e55cb4ad1357ef7532c3d5 create mode 100644 fuzz/corpora/x509/14811bdaf6f7fd6c21500249472115305d6deeaa create mode 100644 fuzz/corpora/x509/14af207a978be3c0d81894082b625fb8f5a098ba create mode 100644 fuzz/corpora/x509/14c8314419cfb3f31ebc0e250d08022f4913c898 create mode 100644 fuzz/corpora/x509/152f8c9c8896ba5b1de1d58a8623d38220d82951 create mode 100644 fuzz/corpora/x509/15581223004d6cbccdb344d4854750ea994040f9 create mode 100644 fuzz/corpora/x509/1563f6e7b987b63264d89b041ee94305ee2975e5 create mode 100644 fuzz/corpora/x509/15f8fb77f4dd8b111e28453276cf996d16ae0ebd create mode 100644 fuzz/corpora/x509/160034fa691e40a0f4b597745333542ebf55c08a create mode 100644 fuzz/corpora/x509/16348b9318d1a2dd7587296a846bdcf4e4aaea93 create mode 100644 fuzz/corpora/x509/16ca88aa2763ca7d8541c377a7ddfac6ba5da99e create mode 100644 fuzz/corpora/x509/16fcb7838fc73dad331a74e930c8312c3590b537 create mode 100644 fuzz/corpora/x509/172c56f6be6ef8d9808a378bdc5418862e583965 create mode 100644 fuzz/corpora/x509/17a4a12b2723e790859808d7234ee7a5c6dffdba create mode 100644 fuzz/corpora/x509/17c08dccd8b4354cffead4b0c0a153e2ab5d3db9 create mode 100644 fuzz/corpora/x509/1824072591c9ca74f58089ec3bbff1d07793f0a3 create mode 100644 fuzz/corpora/x509/189e0e8d6c3762f15954b06d88127e707b5f6134 create mode 100644 fuzz/corpora/x509/191f57f194a324c3ca08dc06797d945f97c4cd2b create mode 100644 fuzz/corpora/x509/194ed5bec80bf4f5dc3e80490fd1ff521446aae4 create mode 100644 fuzz/corpora/x509/19887b74faf12329b0fede33aaef2acb292511c8 create mode 100644 fuzz/corpora/x509/19ac5dc0407e92115fe4c0a8344e7f86d9270446 create mode 100644 fuzz/corpora/x509/19b8be8a18bb7fd6bf0732527312ac3a9e4b185e create mode 100644 fuzz/corpora/x509/19febc5e8dd7cc9dc64162cf7225787810c40f1f create mode 100644 fuzz/corpora/x509/1a464d62c1185873d1975cf7fa72b39af8cb0a46 create mode 100644 fuzz/corpora/x509/1a479d4f57b9d6d760f09f75350fd8ad5a3eb4bf create mode 100644 fuzz/corpora/x509/1a4a1426ad9bb71512d1efcbba233c4546d3d056 create mode 100644 fuzz/corpora/x509/1a561f2330e80d67edab808eabfacc1000b6c654 create mode 100644 fuzz/corpora/x509/1aa63280cff8e21e9d47113efb1f1d9669056439 create mode 100644 fuzz/corpora/x509/1adff49ddd401107e34feee3fd61db40f59be663 create mode 100644 fuzz/corpora/x509/1ae423c1eb5d5b56e26d9b9b6c5d71821f53d069 create mode 100644 fuzz/corpora/x509/1b03a59de7897602b3751c2f8fc33dfe0d7aff62 create mode 100644 fuzz/corpora/x509/1b1f132e7faafb77c045f5f9b35d3b7449b7cf41 create mode 100644 fuzz/corpora/x509/1b9ee022c3a5af26f083c1716eef9118a38792c6 create mode 100644 fuzz/corpora/x509/1bc542ea2470e32e2dfac814e91b51bd716eed6a create mode 100644 fuzz/corpora/x509/1bde87b22b737d83ab42121a3de1848993e2c983 create mode 100644 fuzz/corpora/x509/1bf51d512cb52324f41830e21a2bb0ea6c143f69 create mode 100644 fuzz/corpora/x509/1c8fba3b6a96df986f7fdfcd6c62a9e87776c49a create mode 100644 fuzz/corpora/x509/1cb6af1778a1f1cbbbeb567f105f1e7ad52cea8e create mode 100644 fuzz/corpora/x509/1cd713750f0b03f5b3b268b3f048a854dd85c95f create mode 100644 fuzz/corpora/x509/1d84f53e1fb44a3840baa86ff1830e1ce47fc236 create mode 100644 fuzz/corpora/x509/1d878aa4b95eed171098d7bd3f3c6081cee59d63 create mode 100644 fuzz/corpora/x509/1d897fc8ce4804fecbe1031a8023a70926003888 create mode 100644 fuzz/corpora/x509/1d916d34f451b4d12c956e93f42c6563a801952e create mode 100644 fuzz/corpora/x509/1def78aa70056fd6b91eddea37061d283b3be9da create mode 100644 fuzz/corpora/x509/1e186b9e788b763e08b4f9a8c651ec2ce119e980 create mode 100644 fuzz/corpora/x509/1e67e9a29549f0b821d8da54a4398fd52490384f create mode 100644 fuzz/corpora/x509/1ea019d3dcc0c7318aa2fe0d4640cec8b3c32706 create mode 100644 fuzz/corpora/x509/1ecfd0553519e3dc83e2a01cadb41f268b6f8c15 create mode 100644 fuzz/corpora/x509/1f3500f7a03100176b514d44ee9415fc90cd4c1a create mode 100644 fuzz/corpora/x509/1f3fdfd88967726168104d8b159ae4ca6be79399 create mode 100644 fuzz/corpora/x509/1f4c5e5fdb78fed8374516231cc09f9eaca0ebd0 create mode 100644 fuzz/corpora/x509/1f5f7e57985da7cefa325c454766f32e13cab5c4 create mode 100644 fuzz/corpora/x509/1f927094cf118151af336c8c8eff02a7c19de78b create mode 100644 fuzz/corpora/x509/1fdf3a46dc9063bc43ea01094e305032dcb09528 create mode 100644 fuzz/corpora/x509/1fe1df9f567c586bf8e29e3f312e11e40c1dcbea create mode 100644 fuzz/corpora/x509/201c9cc73cc08cb3fa371c6b2215c1f5d46ac25c create mode 100644 fuzz/corpora/x509/2057d4a7817e25cb521c8d8b065dd373da696f52 create mode 100644 fuzz/corpora/x509/20d6ce197dedc50e47af225b1238eb226f10a80e create mode 100644 fuzz/corpora/x509/20ea0ad021c4a12ce3722f7b461cd3334eec9b2f create mode 100644 fuzz/corpora/x509/20f09ad271c8f18091f65ea793fe384189060137 create mode 100644 fuzz/corpora/x509/20ffffb54f0f0be6115f76a6fea8577b1b3d5d75 create mode 100644 fuzz/corpora/x509/210285e8434bec5c2e265275458ed792a90bbcb0 create mode 100644 fuzz/corpora/x509/211c20a1c291591e70cde1b9227666665531a37a create mode 100644 fuzz/corpora/x509/2140578eefd8b5ac320251d183e3a6e4406d2dac create mode 100644 fuzz/corpora/x509/21bdbbea88c58914db896adadea0765333fa9008 create mode 100644 fuzz/corpora/x509/222d04cd15dd0dc67076d25ddaa949fc08cb89ab create mode 100644 fuzz/corpora/x509/22645b167c486ab8a1a0151a87a6df01d9b91906 create mode 100644 fuzz/corpora/x509/22677bc18266e28be74af2c66f598b9260a3f0b6 create mode 100644 fuzz/corpora/x509/226a77398b9dc85fdf4db33db62afcd7440b5480 create mode 100644 fuzz/corpora/x509/2280e4ec737af229f5f8b09089f1f67298b6e024 create mode 100644 fuzz/corpora/x509/229a87edb3228c41d5e42959085e6386fdaafde9 create mode 100644 fuzz/corpora/x509/22e3e6f6f077a7842965696c3043c5884a9af3fa create mode 100644 fuzz/corpora/x509/22f57f3ca1f373d3cf62cb1059629ba81d2ee837 create mode 100644 fuzz/corpora/x509/2306d844c94b942385eaab5380585b3c69a3af57 create mode 100644 fuzz/corpora/x509/234c7f8d7fa538efe59d90a2f2bdb61b3b63d4df create mode 100644 fuzz/corpora/x509/23c9e421c0ac9a6a8c737e6a2ac153a19e6750d1 create mode 100644 fuzz/corpora/x509/23df07e5d8c23a5df9c506cc0fa797ad8715fa06 create mode 100644 fuzz/corpora/x509/23e347badf9f32cfd088cad404bdf519a2649764 create mode 100644 fuzz/corpora/x509/23fde1c6a77d204c6d54670e5f6ee3cf6aab7c5c create mode 100644 fuzz/corpora/x509/2412196a310f3ec915aa2732b06d02c4f347969e create mode 100644 fuzz/corpora/x509/24820b4f75efc850693384ce782f4bfb0320a0ef create mode 100644 fuzz/corpora/x509/24e99b50deaaadf072f2efaa7beaaa85c7319aa3 create mode 100644 fuzz/corpora/x509/2516b0c74cf0a1a84540b080a6597b528096d1ff create mode 100644 fuzz/corpora/x509/25373a4ad20a5fc2728b9ef7a8d86f855cb34497 create mode 100644 fuzz/corpora/x509/255b9bec3ef74bb36abeb8d03110435022039538 create mode 100644 fuzz/corpora/x509/25605cf299a0a296e15a200e7219bda843a08886 create mode 100644 fuzz/corpora/x509/256b243656f99ae8002b58a232cee8e3c4c377ea create mode 100644 fuzz/corpora/x509/258346352bcd62e5aded3193fc04e47e042172b8 create mode 100644 fuzz/corpora/x509/25841925f8c9ae076b3e5a0a80aa45a49851f2e5 create mode 100644 fuzz/corpora/x509/25aa1f4d0fd2802d8acc5a31161eb27c073670c8 create mode 100644 fuzz/corpora/x509/25b101e743b3ed40f0185d85ec5912db10ccb5e3 create mode 100644 fuzz/corpora/x509/25cd2e2fe927d500ff144151ec4a2611c61341fc create mode 100644 fuzz/corpora/x509/267796f6f4d875d616428e52621b582685f038cf create mode 100644 fuzz/corpora/x509/26f03bb6e35299989935811337281daee9908948 create mode 100644 fuzz/corpora/x509/2710d29c334df30118153c2af91477e08d008ec9 create mode 100644 fuzz/corpora/x509/274fce5ddc87c5e5edc7c3be7e0e4e60cf44680a create mode 100644 fuzz/corpora/x509/2758660414acc07f1663a2bedcef4bd4c13759f4 create mode 100644 fuzz/corpora/x509/27d6ee1b7316682260ffb5d2a5fe411944d8c959 create mode 100644 fuzz/corpora/x509/2813aeaa1930b7bb09752999e563d303fb2a4a09 create mode 100644 fuzz/corpora/x509/2837aa39984117d41d4398581c4703dbbd5d766a create mode 100644 fuzz/corpora/x509/286e1acb4e21adc01a8aa0ce0254fb33f2b3d46c create mode 100644 fuzz/corpora/x509/28938b9318b41f9bf32201e7efc1168cd1f74647 create mode 100644 fuzz/corpora/x509/28979696dc88f0c49fed8a5f7a90da8fe6eb86e0 create mode 100644 fuzz/corpora/x509/28aff84462e1ff032a3ff1a60cb0e1802e4b2ccc create mode 100644 fuzz/corpora/x509/28dfe5440e8ad69fac72879f21c5ae73f6b0874d create mode 100644 fuzz/corpora/x509/293cb395e878286fd52eff1c3ea1489d4ac11004 create mode 100644 fuzz/corpora/x509/2980f09c2cd9b38d20dc1d85849853a055343b09 create mode 100644 fuzz/corpora/x509/29a725b8f64bb5103f23b7f8602714f40773f5ce create mode 100644 fuzz/corpora/x509/29aa4ffbbf0b097e0df31ede2e966b6d4ffce5b1 create mode 100644 fuzz/corpora/x509/29b725b98bc35c10ed6dc9118295b8309f823261 create mode 100644 fuzz/corpora/x509/29d0877611b98bbb1eba59cf779731fdc3eabd62 create mode 100644 fuzz/corpora/x509/29e724937f95b7b1c630532fd492661a6479bdea create mode 100644 fuzz/corpora/x509/29f01c4e27e117c945cb24a17a54b9af6b27e009 create mode 100644 fuzz/corpora/x509/2a2d01bcef21598bedf2394ea638f4cf4bc4b8c0 create mode 100644 fuzz/corpora/x509/2a36ff01c34b46feb54adec0ff739cd279551fad create mode 100644 fuzz/corpora/x509/2a8a35c937e4b9d98e23bfb4aafefeeac6cbb8e2 create mode 100644 fuzz/corpora/x509/2ad9f0861d32976ff51715ab790f73806d921f95 create mode 100644 fuzz/corpora/x509/2addfa2cdac4c5d2f6b20bc999d557f55e20778d create mode 100644 fuzz/corpora/x509/2b1704f029a911ac4550a755a27f3abe0a1c971d create mode 100644 fuzz/corpora/x509/2b46d37e081ec9b8b3a49a251d8d9452cc686fc6 create mode 100644 fuzz/corpora/x509/2b7596e0522952ebbb1c15f566e510c9ecafdebc create mode 100644 fuzz/corpora/x509/2bc5505749de346522b34ecc93bbe56ad15ec487 create mode 100644 fuzz/corpora/x509/2c60ba2872ee565b6c18d9fd1610c22d01a0df10 create mode 100644 fuzz/corpora/x509/2c8139e860e80dde767e5d44de8b98908d86170a create mode 100644 fuzz/corpora/x509/2cb9305ede03b14a6f4c0ce5d50275fa7d4f87b3 create mode 100644 fuzz/corpora/x509/2ce15df7718a68df2ae320c07a1ab6293a2f7e5e create mode 100644 fuzz/corpora/x509/2d60f9e759bef3d5b495a666a5e780e875ef7251 create mode 100644 fuzz/corpora/x509/2d64651ee6534e6b0bd4fb720771e68d4095b8fd create mode 100644 fuzz/corpora/x509/2d7375772fde3b4cbd9703b1b553ef95fd780c76 create mode 100644 fuzz/corpora/x509/2d880c248a2e2e6918935976721f70d798591820 create mode 100644 fuzz/corpora/x509/2df27b0263191cb8029ca6f646f543e647c5c6ad create mode 100644 fuzz/corpora/x509/2e21ba62ef2878ea8a677a4cae6e72a38f95d8ed create mode 100644 fuzz/corpora/x509/2e230e137591afd8795d6b182efa4fc5db6ae573 create mode 100644 fuzz/corpora/x509/2e37d9fecf2a298c5efbf4630cd45b5939bb1cd1 create mode 100644 fuzz/corpora/x509/2e49c982af1b02ee334cd53ca1e8e45ef7e05343 create mode 100644 fuzz/corpora/x509/2e730e54a859602e090a864dcc944cca3400c69a create mode 100644 fuzz/corpora/x509/2e8b9aae058dec5eaf5ffaaf7f6d6e3aa69d97bd create mode 100644 fuzz/corpora/x509/2ebecd32553f93f21cf13a6a11a44f0c9f6aa925 create mode 100644 fuzz/corpora/x509/2ed0364ed3e71787975d57c3e9d64b847b3f9f2d create mode 100644 fuzz/corpora/x509/2f3e5bd16577b7d0082c1acef896e690186d8263 create mode 100644 fuzz/corpora/x509/2f4c346a226e1d0bb04dfff94bb7b4fe84a7a62e create mode 100644 fuzz/corpora/x509/2f5bece0b905131891fa05d6add3a9918c72f6da create mode 100644 fuzz/corpora/x509/2f6520a82818ac7ba70b6fb5032303254e81bb41 create mode 100644 fuzz/corpora/x509/2f6e9e72b98dce6c32457893c6893d06e33391ab create mode 100644 fuzz/corpora/x509/301611fd829899aeefc10c1806839d52e9bff8b2 create mode 100644 fuzz/corpora/x509/30516a487b2fe5e9d84976c595216cbba901c364 create mode 100644 fuzz/corpora/x509/308a0c8e3520d518461721197382a92e57acd403 create mode 100644 fuzz/corpora/x509/3102f9f0277b0d1ad0870ebf7d956fc90ed593dc create mode 100644 fuzz/corpora/x509/3122e0ddfa7d5921bff205388f5143e28df9d3e4 create mode 100644 fuzz/corpora/x509/312e340ef31b5a1dc6e4decaa64615f17d66c773 create mode 100644 fuzz/corpora/x509/313ece21d0b636ab0cc35461079b62c9f1e1ada9 create mode 100644 fuzz/corpora/x509/315b5e8dc1e4e380603abe1fbe367dbe694befe8 create mode 100644 fuzz/corpora/x509/3170354e0e9811cb9b0b485b564a0b6f89838ab4 create mode 100644 fuzz/corpora/x509/31a449e6adda7efa88a489fb61d8deeb626e6f78 create mode 100644 fuzz/corpora/x509/31b6978ed3a1b4e33fd13ffc3a2078b219786430 create mode 100644 fuzz/corpora/x509/3220d8d8ab6b2aa0e0cfce577741d393c7238f4b create mode 100644 fuzz/corpora/x509/324c11f6d6df6550c5cbdb7dc63306c7cb8eb244 create mode 100644 fuzz/corpora/x509/326f6c2615775d666700bfddaceaefdeefb1e62a create mode 100644 fuzz/corpora/x509/32aeda3015a73b375beb4bcadbf6445d647af8a9 create mode 100644 fuzz/corpora/x509/32b86532e5e22b82965f3ed91faa361e6b243089 create mode 100644 fuzz/corpora/x509/33708ec58c572a8e36014f7669a61f171d321e96 create mode 100644 fuzz/corpora/x509/3377dcd98d7cf9446f13cef5c2c9eb4bfb46a574 create mode 100644 fuzz/corpora/x509/337d3e11dd3f3b6eea5d9ef3bf627e44b1ec79a5 create mode 100644 fuzz/corpora/x509/33b7ee1c60c36076763eef222dac16cb70bbd966 create mode 100644 fuzz/corpora/x509/33f351ca771b9a3f32c47dadae35e253e5ba0779 create mode 100644 fuzz/corpora/x509/3412813c214b49214edc7df77defd66b9d3a539b create mode 100644 fuzz/corpora/x509/341688e26c0069a2713d2b28ee61282139ff3bc3 create mode 100644 fuzz/corpora/x509/3459b27eb942111985d0faf565842af6ba56e80c create mode 100644 fuzz/corpora/x509/3479f5b116b1e5222b90fcaf56e127dfafd55d47 create mode 100644 fuzz/corpora/x509/34988e8c89efcd58cdc83cc717e1e4c0e66c09ba create mode 100644 fuzz/corpora/x509/34f31d25fca7808c297e6b172c884cdc0579ca74 create mode 100644 fuzz/corpora/x509/36345b610756b74582290fa60b4c81278535ef30 create mode 100644 fuzz/corpora/x509/365131727604fc9b8964c38f34ec0d09b63544cc create mode 100644 fuzz/corpora/x509/3662e44ee5b14b719aff84578667ad105873ae44 create mode 100644 fuzz/corpora/x509/3728a5f672b3022cc16e99182bf390bd8acdfd98 create mode 100644 fuzz/corpora/x509/373826ea52d6c0512cd90aab14acd1bf227aeccf create mode 100644 fuzz/corpora/x509/37502051478e36c24b849d9616e8065723f502c7 create mode 100644 fuzz/corpora/x509/3768c49592f45afb1dd62ef5bc605765fe53a863 create mode 100644 fuzz/corpora/x509/37fb8c70b5a851ed71c9ee92ad94bd925cb1d22d create mode 100644 fuzz/corpora/x509/38035c643b21b32ef3163f9c7556eab472232533 create mode 100644 fuzz/corpora/x509/38937f2396248a1ce68850aa4ce17696306827fc create mode 100644 fuzz/corpora/x509/38cd3cd6ca9131a3ba8a5aa0028dba7a68e18141 create mode 100644 fuzz/corpora/x509/38d052ce80fb98c4ed38abb926e5510b078d6884 create mode 100644 fuzz/corpora/x509/38f5ba63fdc479fa342d26c76a9d1df43a525fe8 create mode 100644 fuzz/corpora/x509/390306c495328264546183c12ce3278f8beb688b create mode 100644 fuzz/corpora/x509/39182f737d28b1c08c06fa3b164f2b97ed4f9f07 create mode 100644 fuzz/corpora/x509/39289bd80a52d0e8c8eb4145373a8d8888687536 create mode 100644 fuzz/corpora/x509/395a03c5493740414a9a88f402f330f1abc5f1c0 create mode 100644 fuzz/corpora/x509/396e16a556e7ef4a50c246c12ed99330926f3cf0 create mode 100644 fuzz/corpora/x509/396e83a577cf8b214069b71ee42a94d791898e05 create mode 100644 fuzz/corpora/x509/39f6a1dffac678771443d54cd47d4e64c5aa36a0 create mode 100644 fuzz/corpora/x509/39f8903544d95fdf92ac4e30c3f698734f0bce08 create mode 100644 fuzz/corpora/x509/3a4eee3ccf62f510d906d865470e1bda299a66e8 create mode 100644 fuzz/corpora/x509/3a647deee3652c0bb7817ccfc91d8e8864647d37 create mode 100644 fuzz/corpora/x509/3a70655ce9e9dd1e58486b28b99f24132bfd34c9 create mode 100644 fuzz/corpora/x509/3aae884e84ea7781b3feebf97b733be00a54fea0 create mode 100644 fuzz/corpora/x509/3ad138a3ec143614dfe21fed72ea2d2f82e47905 create mode 100644 fuzz/corpora/x509/3b2f78a432ed0fb4b50edca68c96ce2d3a4067d8 create mode 100644 fuzz/corpora/x509/3b48e5681a868c141c59d378a5038f3e835cbf49 create mode 100644 fuzz/corpora/x509/3b57da811bc18c2040edc05a07cb180b7db419f4 create mode 100644 fuzz/corpora/x509/3b5f3b8d26f97e1774fa7890adb5477d96349f1f create mode 100644 fuzz/corpora/x509/3b79a2da67f3058a53a844f11ba2f3c46f33863a create mode 100644 fuzz/corpora/x509/3b79d1e6628c917c1cc694cb3e67c58de774ca88 create mode 100644 fuzz/corpora/x509/3b95ddb809e58aa3bc6464ece69d678aced37e49 create mode 100644 fuzz/corpora/x509/3bb100ff875b93f5f49b038bec6633f6e02ac3b7 create mode 100644 fuzz/corpora/x509/3bb588d27afeb394560297c5ae081fbe25d3a34e create mode 100644 fuzz/corpora/x509/3c259b3a84fea77037a8315c1ec2d88b578983d2 create mode 100644 fuzz/corpora/x509/3ca53a9b116f2b4ad363fd98d79f8ca26db590de create mode 100644 fuzz/corpora/x509/3d43fd708ca841333207e91dd84f030f99545a61 create mode 100644 fuzz/corpora/x509/3d7ed5b583974d5ada0b328d0a06cf6aac49c3a6 create mode 100644 fuzz/corpora/x509/3dfd87c7e3ee7513458f440322750f8ac07badf1 create mode 100644 fuzz/corpora/x509/3e8ce35dba47ff90308efaf694371197ded972af create mode 100644 fuzz/corpora/x509/3eaa7b6df5d793044f703237bff2a87fbf97d6c2 create mode 100644 fuzz/corpora/x509/3ed2ee41ec31ddc8dec4e539fc679dd12fbf9c0c create mode 100644 fuzz/corpora/x509/3f29e7f101fbbdd1c68e90dde09dde0f18f89073 create mode 100644 fuzz/corpora/x509/3f4c9903ee0c9e503cb8b699dc1b0d9a1111cfac create mode 100644 fuzz/corpora/x509/3fa404662dc904a2ec6b8c6358d511701fab33b0 create mode 100644 fuzz/corpora/x509/3fd2132dfa9bd8b9d61160eb2234e3c26d65c111 create mode 100644 fuzz/corpora/x509/3ff4164a4a943620106dbf5909a602439b43d727 create mode 100644 fuzz/corpora/x509/4004746d60c237a55c97260f757d699ec964c469 create mode 100644 fuzz/corpora/x509/4051c0ba6fe1cbd41140915daa1649d9971692f2 create mode 100644 fuzz/corpora/x509/405b57ed1a2def8928e527f7a959ead228b47f64 create mode 100644 fuzz/corpora/x509/405f1d07e966d8fc9768cf6cf2070ec4fff7ef95 create mode 100644 fuzz/corpora/x509/406f5b2c8d97100a955b35a2e2d684208856867d create mode 100644 fuzz/corpora/x509/40a23c9f5ff1a18b4ea6cac98b91067eec1be0a0 create mode 100644 fuzz/corpora/x509/40a7e1e56ee9119bdfff8ca760e7f8b6b5db78c3 create mode 100644 fuzz/corpora/x509/40b29fc4d90fed53fb7a2d80ecb28c159756f1cc create mode 100644 fuzz/corpora/x509/40b9e738a9184af40c6ceab09049d47eb71f45d2 create mode 100644 fuzz/corpora/x509/4110a1adcf3c6b5e22aaf388090434b2ecd3f4d8 create mode 100644 fuzz/corpora/x509/4117060c090239eacadb471340a0cf9d65a1a53d create mode 100644 fuzz/corpora/x509/416d847b238305c4526409df2c975a466f85b9e1 create mode 100644 fuzz/corpora/x509/41d658c46c3166c9b4df3f1e4b5cb08d1cd83c51 create mode 100644 fuzz/corpora/x509/41e35f88a9699b994fd1aec3a5511e62b5f5e5f2 create mode 100644 fuzz/corpora/x509/41fd4e381497bda06a45597e13926b06ee65253a create mode 100644 fuzz/corpora/x509/4225d2cad8d403442d0099112144dea536398c74 create mode 100644 fuzz/corpora/x509/42903fc18e8adeb0bd9d5cb49344381bb8c977e1 create mode 100644 fuzz/corpora/x509/42945d26d8a30027d5ed63bf2adb6c45fa986f67 create mode 100644 fuzz/corpora/x509/42af18f07d996bc3237aecbd4c37df0d702e1144 create mode 100644 fuzz/corpora/x509/42c40df381cd68a3d0cc506e7ea8bb81d8ae2c52 create mode 100644 fuzz/corpora/x509/42ec7b0dbebb8255d20736131f34caa54d15b931 create mode 100644 fuzz/corpora/x509/4315b37df25f295bced5c8f853adec0a6500d7a1 create mode 100644 fuzz/corpora/x509/433f6bc099b78eca42f73b224ce1856f211f9160 create mode 100644 fuzz/corpora/x509/43ae8ae8795b44a88ce8e8b8a18b23e5cb59dc47 create mode 100644 fuzz/corpora/x509/43c561f1014ddc18091d92e3729cdd2c1c2e735d create mode 100644 fuzz/corpora/x509/442db724e6face9a0f20acde22ca72ee9eccd4f3 create mode 100644 fuzz/corpora/x509/4463dabf614222e5f2ae87f440db63cc31dbe15d create mode 100644 fuzz/corpora/x509/4472cfb329fdf67fd7ca90d654f49993e458947d create mode 100644 fuzz/corpora/x509/4498a5488cd2ea107bb072e7baabfd207fe2f117 create mode 100644 fuzz/corpora/x509/44b9442a5d25221d71d28aa857b02dfb89d67e7a create mode 100644 fuzz/corpora/x509/44c7668b1c075973f9ba8a1f23d4935e43c23dd1 create mode 100644 fuzz/corpora/x509/45117de57923ff5918274ee18496ffdab2ee3773 create mode 100644 fuzz/corpora/x509/452693abc2c1b5659f7ec67241111ca3c63f99ec create mode 100644 fuzz/corpora/x509/455be1ee4924e9dd40b3566e11342df980942c33 create mode 100644 fuzz/corpora/x509/457a1e93cbdaa78c6bb7dff23d36077d7f55f9bd create mode 100644 fuzz/corpora/x509/45af1de1a73722c2a4a5a01633d6841f1997980e create mode 100644 fuzz/corpora/x509/45e3eb5ef016b16f0dc25eee6a67a48755c5bb84 create mode 100644 fuzz/corpora/x509/45ef09028bbc24035e9a1aaff3a5c1fd1e0e7fe7 create mode 100644 fuzz/corpora/x509/4679c3167527ebcf803520a0b3e99eb5d2598635 create mode 100644 fuzz/corpora/x509/4683782f8377938e27f5de0fa05807dc10587df3 create mode 100644 fuzz/corpora/x509/4692860e0c58a501b3869996806dbb09a39df8c0 create mode 100644 fuzz/corpora/x509/46e303dd0f811ec6d25a7fd57b0561119ce30772 create mode 100644 fuzz/corpora/x509/4702720568207110c90ac1955f2145d552192fb2 create mode 100644 fuzz/corpora/x509/47213b17a6c5faf64418659e601fb51633a61495 create mode 100644 fuzz/corpora/x509/476bd07296708f4e03ac975b6872ad15f3a4ea8f create mode 100644 fuzz/corpora/x509/477e62050c9d05f5632b71d67e4f0817b949a5ab create mode 100644 fuzz/corpora/x509/478d04e2c8f0d81b8d70212365dc453aadbf6f24 create mode 100644 fuzz/corpora/x509/47f7781e513653fd290c77cdd9ef6dbc17649062 create mode 100644 fuzz/corpora/x509/47f817b2bbdba30918dca2057cc74c6183e4daeb create mode 100644 fuzz/corpora/x509/4804e077de5ab8f1a4f0932a5b26e12551373f6b create mode 100644 fuzz/corpora/x509/480f78eee65ccb6b79389df92608f0a43ce51bff create mode 100644 fuzz/corpora/x509/48158490d84d0c2edee7017978273f647a7c874b create mode 100644 fuzz/corpora/x509/4850f0d1bad5342b88e34040adfe8fb981f0f4da create mode 100644 fuzz/corpora/x509/48519b9890c0b794d5b7a74017c994726c9dc46f create mode 100644 fuzz/corpora/x509/4852d9288252923f591f02d3045865095e886288 create mode 100644 fuzz/corpora/x509/48b463c275acc37d0d25b2586f60c18c80afe1fa create mode 100644 fuzz/corpora/x509/48ffe550e0975bb4606758c90f5e369c73e13ff6 create mode 100644 fuzz/corpora/x509/491f2f0310bb9369502ca752b065c2a8d903b295 create mode 100644 fuzz/corpora/x509/495134cc022d7b5d5eb73ee73c1576f7c42b71d3 create mode 100644 fuzz/corpora/x509/495a8f51e6f7adffa0043a55750765bd67664140 create mode 100644 fuzz/corpora/x509/49cf319f65874bd676e94d1392d0633489ef15b2 create mode 100644 fuzz/corpora/x509/49d17cf2a87d85de1935230f9cb7e3913ce4819d create mode 100644 fuzz/corpora/x509/4a02d1b38ed81f13a71b8c0ca8cb0d0d830a372f create mode 100644 fuzz/corpora/x509/4a293d17f4e52d53e8530b3375180d4fb312ace1 create mode 100644 fuzz/corpora/x509/4a641630acf1d0039d7829111b9dea20d60b19c2 create mode 100644 fuzz/corpora/x509/4aa535ce210495b077e3f96f13a70ec9eaed77ea create mode 100644 fuzz/corpora/x509/4ab6eb2ddb06fc42182506a06e93d22d28f9053d create mode 100644 fuzz/corpora/x509/4ad0127432757fc572fc12aba334fc992d3ff4a1 create mode 100644 fuzz/corpora/x509/4ad94cc47cf7d6f6f1d8854735d140de187388c6 create mode 100644 fuzz/corpora/x509/4b206617e08c1fe3a7bef5fe748ab81f544ba386 create mode 100644 fuzz/corpora/x509/4b3e818816679b63dc471728e05d821d757ecbb5 create mode 100644 fuzz/corpora/x509/4b601daa1b38828d082f5f5281268f2dfce7de2a create mode 100644 fuzz/corpora/x509/4bb9f3ca872239556078fa77d4872dec06b7a63c create mode 100644 fuzz/corpora/x509/4bd652dbdf6bb2b2b2da924cff678eefbf34718c create mode 100644 fuzz/corpora/x509/4be0179adc2ae07432074e1132e2316db31f43f8 create mode 100644 fuzz/corpora/x509/4c1605cc7ab407cc4dd2a4aea7ab3f6f55a7bf76 create mode 100644 fuzz/corpora/x509/4c1c5f992ff9465a7ba21321de6fe651dba5e608 create mode 100644 fuzz/corpora/x509/4c3398700e93b99d0fc80f4ea3e71967d5e294bb create mode 100644 fuzz/corpora/x509/4c5e07131e5718b1f364789e199dab6ae7b11e03 create mode 100644 fuzz/corpora/x509/4c639e4f101cd796f1f47cf11d66efe89a644983 create mode 100644 fuzz/corpora/x509/4cc64fd7c737859445d9228a97b6e19756fea97d create mode 100644 fuzz/corpora/x509/4d73192c98f505b6d51044555c54ac7376ffbc86 create mode 100644 fuzz/corpora/x509/4d7a04c99c9a7220d23be9042c7663ee9241a461 create mode 100644 fuzz/corpora/x509/4d7e3e2bca3d3058b40d59267e19b82f084585b4 create mode 100644 fuzz/corpora/x509/4e036ad065fe2390e11e7535951ce91d1f484413 create mode 100644 fuzz/corpora/x509/4e2393b051e8a1403579003605d35b2796110a72 create mode 100644 fuzz/corpora/x509/4e2da2af3c6e03781f8c546c4a1cc0f907a48f70 create mode 100644 fuzz/corpora/x509/4e4919a1444d44ab65131169393473b09ebcf3d9 create mode 100644 fuzz/corpora/x509/4ec4dafa3cb6a363f640a2f5c7d274e3de4213af create mode 100644 fuzz/corpora/x509/4edcb4733455d426a1c17154008f74cff0b83f04 create mode 100644 fuzz/corpora/x509/4f07a3f9f1b8eed666a5b82307559bf1a2e87494 create mode 100644 fuzz/corpora/x509/4f08ec72630ef3fec6e44fd26de9988321fbffeb create mode 100644 fuzz/corpora/x509/4f17bc78b7c530774600b36a63d72f1ab9f0f5ec create mode 100644 fuzz/corpora/x509/4f5ae2ee73b60eef9e39a324918818e9d6d5118a create mode 100644 fuzz/corpora/x509/5020d88a6e4ebb12b2f943a85fe957c18e912eb4 create mode 100644 fuzz/corpora/x509/5053620789b2c5190cfe5138a7f3b848b85b7285 create mode 100644 fuzz/corpora/x509/505cd96e469c1ec8ea7c2956e38362aa739abfaa create mode 100644 fuzz/corpora/x509/5091def01d96cf9479211f616d34b507fd5eb084 create mode 100644 fuzz/corpora/x509/50a5755e0063842c713ba207429da75e5ac13ad6 create mode 100644 fuzz/corpora/x509/50e18040aa1ec79e5d12c3ba0582c9301ba9d939 create mode 100644 fuzz/corpora/x509/50f9ae9abc256131b03df79a38894c4e554a99b3 create mode 100644 fuzz/corpora/x509/51180111dc505c8ddf48ba7b93e15613712dda43 create mode 100644 fuzz/corpora/x509/513301e846b6b1e62cd2d6986c24c5330f4acfbc create mode 100644 fuzz/corpora/x509/514f27a86ec1d9a8a78e5141a9b1b97ec726304a create mode 100644 fuzz/corpora/x509/515324c53c98b194216855db7e192991a3e92f80 create mode 100644 fuzz/corpora/x509/515cb1fff290cdbc7c440bbb6712776ee999ff55 create mode 100644 fuzz/corpora/x509/51a0b009ee745234dee724f3d1218486ddfdf303 create mode 100644 fuzz/corpora/x509/51be1db83898eee6365a416b2dbe7f8c49270d09 create mode 100644 fuzz/corpora/x509/51d30427b9c8aee046cff8b89d0891d16ce5fde4 create mode 100644 fuzz/corpora/x509/51db6ff91fd94c5900d169101cb839dcd8bdcdb7 create mode 100644 fuzz/corpora/x509/51de64612c2607d35979e843597acb909dca2856 create mode 100644 fuzz/corpora/x509/51f9824934e54f56616a6743b8253ae83b114d63 create mode 100644 fuzz/corpora/x509/51f9babfd2cdd984d8720812bc9bec3810b8cad0 create mode 100644 fuzz/corpora/x509/525904c3932b9df9e39f2f9e3acf9b42aba7eeac create mode 100644 fuzz/corpora/x509/52f9ac46cf14fe2a28afffd8e37a33a96d74c4eb create mode 100644 fuzz/corpora/x509/53109447b49505838c426d82f515cf84f4e23711 create mode 100644 fuzz/corpora/x509/531969e7ff84de7ee54ecc355053cc72be4e53ea create mode 100644 fuzz/corpora/x509/531d4984f02a9928fa5b230c794f9a31a9ba4b08 create mode 100644 fuzz/corpora/x509/5320ea2150ad3500027cbb69ac4479702ff220c6 create mode 100644 fuzz/corpora/x509/533ef8a73609f1ffc803fc2c98f785d56683b368 create mode 100644 fuzz/corpora/x509/53661c2230abb80a847de671f18d665e9c2589ca create mode 100644 fuzz/corpora/x509/5366fe1526a34d9ec1c591505b7196b79b8cfa0c create mode 100644 fuzz/corpora/x509/53d6d3604d7ffd6a4c703b1ec017313e9fcc39a7 create mode 100644 fuzz/corpora/x509/53e271731815d207df117f82a6f2deb39f8e38fb create mode 100644 fuzz/corpora/x509/544dc6283d06ea67f0801240ba86bb19034d2a89 create mode 100644 fuzz/corpora/x509/548d12b9bc826936437a17e8469723c4a057f0e1 create mode 100644 fuzz/corpora/x509/54bf1cf6cd5a7c0f454efd52d599c5236fdbd2b3 create mode 100644 fuzz/corpora/x509/54cae3051e4f9f51502a03bb8302dda49932a97b create mode 100644 fuzz/corpora/x509/54f85a2e5fa75ed08b69059289b12785a0612084 create mode 100644 fuzz/corpora/x509/5536e8bfcad2abb70c69ac7c845c3bee1bce0702 create mode 100644 fuzz/corpora/x509/554116af1142d68bc0b7746dd714981ead2ddcc1 create mode 100644 fuzz/corpora/x509/55a1030689d0c8c6c26cbfeadb563c3b98f73510 create mode 100644 fuzz/corpora/x509/55afac3985dd138a23b273b00bf482627ee173dc create mode 100644 fuzz/corpora/x509/55da19e2f745458b7bfbf96af889e6b4babf9acd create mode 100644 fuzz/corpora/x509/55ffd1395766edd018e7b98d86767d175629a420 create mode 100644 fuzz/corpora/x509/560538f13df7f18de7d7ab513d6cfb42a7c2ae42 create mode 100644 fuzz/corpora/x509/5607506d3384bcabcca6bf2501fc77387dc71d74 create mode 100644 fuzz/corpora/x509/560c9852995c0da4afba01fe7297d4c6d10bc3ab create mode 100644 fuzz/corpora/x509/562506a3f9280faa04569aa1f4c4b4b85556b624 create mode 100644 fuzz/corpora/x509/564403a4fe8e4167aa8a3ff9defb2b92e6a6d13e create mode 100644 fuzz/corpora/x509/564af3d9eb7d6f3f1a75deef27973334e47ec6df create mode 100644 fuzz/corpora/x509/5652f5d38c3d720c714477bd06c4f4887c6c7404 create mode 100644 fuzz/corpora/x509/5654c804fd7911d81419c681651197978330e0da create mode 100644 fuzz/corpora/x509/56571d4780c0169b5ffb90f729f0f4a0521e61b0 create mode 100644 fuzz/corpora/x509/565fc8addc970f52d88a2d153aebebb47d26c5fc create mode 100644 fuzz/corpora/x509/56661751f5a29c9f0724b35f3c98d288f1bb952b create mode 100644 fuzz/corpora/x509/56b49d2e2c7567fd0385b8f2bd2b41f485da2200 create mode 100644 fuzz/corpora/x509/5713653a6e63bd2c99387c256dd54043a9054178 create mode 100644 fuzz/corpora/x509/571eaafcf254554b2b11ef8aad86645bd1985e59 create mode 100644 fuzz/corpora/x509/5737ea72f5993e86d8845c06d3507515fcd0dd0c create mode 100644 fuzz/corpora/x509/574dc3d67fd2630c5ed94895f5ede1e550f8c9b8 create mode 100644 fuzz/corpora/x509/5750e07ccafc5648d3b6ad5a516ffcf6bc15f941 create mode 100644 fuzz/corpora/x509/575ab543dd130edec5318149019a090486122d00 create mode 100644 fuzz/corpora/x509/57754e511e3fd48674ab5b1e38f65d985d86bbf9 create mode 100644 fuzz/corpora/x509/578c9dd1b74f0d8edc6ef2454aea8b411f7e0dfe create mode 100644 fuzz/corpora/x509/57971fb61c2efc672a0b213f96255460bbdef874 create mode 100644 fuzz/corpora/x509/580233de69f61b32ff2f0523f4233a62b35b0466 create mode 100644 fuzz/corpora/x509/5812ea3e29a060a0c26df694df26edb78e15a309 create mode 100644 fuzz/corpora/x509/588249d7cfa464066c686f5311e1b155c2605e75 create mode 100644 fuzz/corpora/x509/58910df348fd983f058b2eb1ad34402dafb2a687 create mode 100644 fuzz/corpora/x509/590123406af94a162668c0b46c02d0b077234efe create mode 100644 fuzz/corpora/x509/5908c35cc4ff4ae4508519479b33cae6c8fee3a5 create mode 100644 fuzz/corpora/x509/59291c5fcded0f35ab4f841669efdc18418cc549 create mode 100644 fuzz/corpora/x509/5932778cf8b920ccf4b6f890ef2b0e8e10cd7987 create mode 100644 fuzz/corpora/x509/594419a93654c23a1c00720e7b9039ec2b1f0100 create mode 100644 fuzz/corpora/x509/59581adcd44d440eefc2c01d9a069d34017f2c80 create mode 100644 fuzz/corpora/x509/5967e855784e96f405a07ce7297a8a0332baa3c4 create mode 100644 fuzz/corpora/x509/597b1e86c87acd88e0f852be9db249996d6189b6 create mode 100644 fuzz/corpora/x509/59892dced63651aa663e61c8b3900b2408283164 create mode 100644 fuzz/corpora/x509/59a1f2882fccee54acf9cdae4db9f0528ffeb7da create mode 100644 fuzz/corpora/x509/59b7c29a938e4439bfca4f924957b5700a36e2de create mode 100644 fuzz/corpora/x509/59f65b28b54b78e67fbde9809d82c195fd51a13b create mode 100644 fuzz/corpora/x509/5a6d64c7df85f527a4b466351f637a241dfbcba4 create mode 100644 fuzz/corpora/x509/5a7b98b82cebef65cdcaa15bbe0f05611ae52526 create mode 100644 fuzz/corpora/x509/5a7d453ba6ef9669c627718bf3bca2b3161ccf24 create mode 100644 fuzz/corpora/x509/5a815591910f136f70936a318b49216bd58c26cf create mode 100644 fuzz/corpora/x509/5aa743614e9360fb9fa53ffe7fef23c28043d3a2 create mode 100644 fuzz/corpora/x509/5aeba9db4049f5e04de35c3723cc11853afa08f7 create mode 100644 fuzz/corpora/x509/5b1f40c647236d9d6524218c763a63309db48ae3 create mode 100644 fuzz/corpora/x509/5b2bf651c3c6d7d2af7a4157bcaf474b001813ae create mode 100644 fuzz/corpora/x509/5b4595f912fd336c3f2036073b0c47d31003d548 create mode 100644 fuzz/corpora/x509/5b80584e544ee18a79c042efef37966b28012ed8 create mode 100644 fuzz/corpora/x509/5ba2488d33e92bff5fbdf8e30f6d6da3e621787c create mode 100644 fuzz/corpora/x509/5bd57da35f5e765064753222176afbe952b7ba17 create mode 100644 fuzz/corpora/x509/5be1b19742a8cb1f4c8bda69a38db902d69c32b1 create mode 100644 fuzz/corpora/x509/5c0c2050b39ebf5d7a66269c5ad74faaf12c518d create mode 100644 fuzz/corpora/x509/5c13b253a49e901e2ad98e1b226cbcc5f2a1319f create mode 100644 fuzz/corpora/x509/5c199a10f10fcf9cdad8ca0a67a82d3faabd4251 create mode 100644 fuzz/corpora/x509/5c1b2625d1c11fc0d3ff7c6c59e658b88d07bda3 create mode 100644 fuzz/corpora/x509/5c2a05f227081687fa1204402acc69d4f1605b1c create mode 100644 fuzz/corpora/x509/5c558e9dd0da0faf201f7393221b0fc3b75a8250 create mode 100644 fuzz/corpora/x509/5c7f4b996125c7cfe3a8da31ded8b5e0912113d1 create mode 100644 fuzz/corpora/x509/5ca13244db15895c1a71a3da62e2d52e641d63e0 create mode 100644 fuzz/corpora/x509/5ca6719af7f1f43e9672df053ce35c8426481024 create mode 100644 fuzz/corpora/x509/5ccba6c3f0271c0ac6a5d7af72e0b39e3208fa3a create mode 100644 fuzz/corpora/x509/5ce5a605fe824356579cb8d1ada02b0b0433a940 create mode 100644 fuzz/corpora/x509/5cf33e47fb2445cb9232af6de9ef00d2ce4744d2 create mode 100644 fuzz/corpora/x509/5d13becb5cdc7c43fcaf9d5c4191bec317780460 create mode 100644 fuzz/corpora/x509/5d16882638ddc16704b506a115632f2d50cadd8b create mode 100644 fuzz/corpora/x509/5d2489827eda919bddc4294cec17a5d960c02b60 create mode 100644 fuzz/corpora/x509/5d408d0f011d015b5f9c3bc7a18740f46efa49e8 create mode 100644 fuzz/corpora/x509/5d4eda01c4fec234baa3b980e55271fdb716fa16 create mode 100644 fuzz/corpora/x509/5d58cc4174add224a79a346cffd935b20fe02fcf create mode 100644 fuzz/corpora/x509/5d9c5210ba571ee874de2e082d3ba58f6aded7d0 create mode 100644 fuzz/corpora/x509/5db77991f43cd30c32a0be4a6084c6c12d14da4b create mode 100644 fuzz/corpora/x509/5dd94e10e650515c33dcfa5a4d7f9ddd95a27b5e create mode 100644 fuzz/corpora/x509/5de52c25aa1fcee49d4700d16dadc3c203825525 create mode 100644 fuzz/corpora/x509/5e4e5988f141c627d15a481635eae26917f8cdd3 create mode 100644 fuzz/corpora/x509/5e51f02946cbc7cf32e686377ec0fbc08ed21ff1 create mode 100644 fuzz/corpora/x509/5e62dc9383fa7b956bbbb3c5c4571ff0c4e4c4f8 create mode 100644 fuzz/corpora/x509/5ea043b63da3a78a7fc45c196a2f434c17ad2c8a create mode 100644 fuzz/corpora/x509/5ed640808d66e6924d4babddf12f39832498a2e1 create mode 100644 fuzz/corpora/x509/5f6615fb93b1816ac68467db86c93dda606b3ff4 create mode 100644 fuzz/corpora/x509/5f727cf39ca5f105b81d0496b4a6c86e39a4adab create mode 100644 fuzz/corpora/x509/5f807a82ace70080a95fb74066f5b698066040c0 create mode 100644 fuzz/corpora/x509/5f94d782ee941a02f1b1cbce341995e5eb2fbe60 create mode 100644 fuzz/corpora/x509/5ff2192a9a9f0bcdbeb9fd74e89c591263cd8382 create mode 100644 fuzz/corpora/x509/606f4e92b51577eea0539bc31f475a506ad85225 create mode 100644 fuzz/corpora/x509/607c756845c9b3fd702493a7442bc98545f6edef create mode 100644 fuzz/corpora/x509/60ad5c6edf299c4e4db9503742fc4a8d9dcd69c8 create mode 100644 fuzz/corpora/x509/60f608469377789d6b6308b147411a5ce61e6300 create mode 100644 fuzz/corpora/x509/6135550167e5a679027910971c8aa90cbee01f2c create mode 100644 fuzz/corpora/x509/6175aa0bef5c799b4763be9f3ad76397a8dc5e38 create mode 100644 fuzz/corpora/x509/61db18cf24eb0636a49378a94157f46d942d59fd create mode 100644 fuzz/corpora/x509/61e71cfd0e9d74d4cc3f7e926a5b3eefc6c145bb create mode 100644 fuzz/corpora/x509/61eaeb064de9b973f6f51578387e5bb87d5ceb81 create mode 100644 fuzz/corpora/x509/61fe5cb8761d08f7d81966371d5f10fd7652f295 create mode 100644 fuzz/corpora/x509/6204523ece75567ffca57293dde72c7fbc1aee64 create mode 100644 fuzz/corpora/x509/62116ed4ede2876b7ce0af849f3cb2aa5bf49574 create mode 100644 fuzz/corpora/x509/622aebca6c9cd15f8b321aba42bfc6cd2f16eb7b create mode 100644 fuzz/corpora/x509/6242b6d3f82635ecf7697a753249f698e8bc738f create mode 100644 fuzz/corpora/x509/628602cb87dcc93f93760807a55f99a7226db46e create mode 100644 fuzz/corpora/x509/62c47353265d9b1d240c010e9d05913d49788b93 create mode 100644 fuzz/corpora/x509/62d9c338e27093243c3f7d173e06ed291b83b3bf create mode 100644 fuzz/corpora/x509/62dd87542396ed28176b4c44cc0cd3ac43646786 create mode 100644 fuzz/corpora/x509/62f894b4c5e7992dd5d86bf31ba6c502731625a9 create mode 100644 fuzz/corpora/x509/63a4132b4d6919bc401d90e3a44034fc2447dd29 create mode 100644 fuzz/corpora/x509/63c6e2bb255cbda5d5847354bbf6ef76c063ad48 create mode 100644 fuzz/corpora/x509/63f325be07dfad1ea3017a2a3e990f9942eaf2ae create mode 100644 fuzz/corpora/x509/641bca270486f6b36afdbbe8860d611d3e84e0a3 create mode 100644 fuzz/corpora/x509/64291e705837a17374735fd42defd3c2ba7aaf09 create mode 100644 fuzz/corpora/x509/643d807b5c6a12ff9792c63d695ca162767b33b0 create mode 100644 fuzz/corpora/x509/6447e0fb793aa5ed7085d506dbef92c9e27323a5 create mode 100644 fuzz/corpora/x509/64cbb947ae4de379df2d76c41d0099810674e611 create mode 100644 fuzz/corpora/x509/64f2462bb7db455cdc286bee71c6e9bb2d59cb30 create mode 100644 fuzz/corpora/x509/65346eb152c8dde73e7ec4e1509b159fc10cc50b create mode 100644 fuzz/corpora/x509/653c474c24d905814ee20956b3e060c2b5264a8d create mode 100644 fuzz/corpora/x509/6563375e209764748309c4ae2faea680396cea19 create mode 100644 fuzz/corpora/x509/65caaa53fe799a527b23106da60ec62199167f34 create mode 100644 fuzz/corpora/x509/65d2eb73577305013e15a4927ef9eff27623da37 create mode 100644 fuzz/corpora/x509/65de831123642383f2cbf50aa32398757d09798e create mode 100644 fuzz/corpora/x509/661f952e93e595c937134aef9313fd25f66f6fdc create mode 100644 fuzz/corpora/x509/66375fcbe5e9eef08e6225b33ac9199867a8115f create mode 100644 fuzz/corpora/x509/664678e899b68d7ee101187c83d5de9010a85608 create mode 100644 fuzz/corpora/x509/665160deadcea4e5702888df0315c8500614e88a create mode 100644 fuzz/corpora/x509/666c96ffdfe01896af44a4784f778595aff49d58 create mode 100644 fuzz/corpora/x509/6693a4b9467cbc50c5d8880af43d60a30c665006 create mode 100644 fuzz/corpora/x509/66c3d3991de36fe5b0a922c9dcf21111779867fd create mode 100644 fuzz/corpora/x509/66e5bc266659801ff198b63d0d48e83a66f6b732 create mode 100644 fuzz/corpora/x509/67081bc483584c8efc4c85a7dfc3b6054f2eb1ac create mode 100644 fuzz/corpora/x509/673285ee42937eacf475379b5a9fc088e4ba0e2d create mode 100644 fuzz/corpora/x509/674d152f94d16e816fb899b74941d1c20a41789a create mode 100644 fuzz/corpora/x509/67c94c848a55947a0dae7f178bb59e89233199ad create mode 100644 fuzz/corpora/x509/67e1801eb4872b864bff6489def82222f5c96478 create mode 100644 fuzz/corpora/x509/680c54b29414d510c7834e3fd30ece1a5679f18c create mode 100644 fuzz/corpora/x509/681db35ed7827b89266b7b272eef10bb40ee0d49 create mode 100644 fuzz/corpora/x509/6824fe350c398257b1ea7043410186e8012471b8 create mode 100644 fuzz/corpora/x509/686328282316830832598cec996db808f230bf0a create mode 100644 fuzz/corpora/x509/6868a88fe91058d3d7934338cc07cca3b5f9790b create mode 100644 fuzz/corpora/x509/687f0922263b162a66a6c926cd2ce1aed55b5c22 create mode 100644 fuzz/corpora/x509/68832236392fe932b20c25272cb25bdfcf6d7dc0 create mode 100644 fuzz/corpora/x509/688ec25750287a5043db8159b095b360f4358868 create mode 100644 fuzz/corpora/x509/68c557be8ea6d973e92e9fbe59b3a121b4c2e8a0 create mode 100644 fuzz/corpora/x509/68ea61b6c91a1b74a4003d1ca0a3b91cd9bd5535 create mode 100644 fuzz/corpora/x509/6918f16bbd7697d40b86e68c93a7e3f297e31b94 create mode 100644 fuzz/corpora/x509/6953545e431a5eb4806dd1c5e9232732d726e49f create mode 100644 fuzz/corpora/x509/6a48104d0154d6ebab96f16d52c1743198f5c32c create mode 100644 fuzz/corpora/x509/6a61ad601b5a5b5e67f62929db3e45a36bb8b64f create mode 100644 fuzz/corpora/x509/6ae5bce6ae39d4686c183fcb3c047c897c1647d7 create mode 100644 fuzz/corpora/x509/6b15d1fb0e16245bf8ffce970b2e758df0383ec5 create mode 100644 fuzz/corpora/x509/6b34d5671400e965c5cf436882de593f1f64ab11 create mode 100644 fuzz/corpora/x509/6b76ccc92ff81b8b7e1e0dc1985d3725a32fcc18 create mode 100644 fuzz/corpora/x509/6b87aed93b3251669a34710a8e9b477716bb65cd create mode 100644 fuzz/corpora/x509/6ba88690b7707c1c89b8088f0f5b130e103d06ec create mode 100644 fuzz/corpora/x509/6bf22dfb5404633a49e041cef7f7d38ef5081355 create mode 100644 fuzz/corpora/x509/6c0476922c39c6257419aefab62b492ff9a9b1dc create mode 100644 fuzz/corpora/x509/6c0994056426fc2b76149fe1455c8d9271158ddf create mode 100644 fuzz/corpora/x509/6c0b3bb18b8ad63c3f85c1704c529d62a59262a5 create mode 100644 fuzz/corpora/x509/6c299420b43efec292df9368a19e428b1be9538a create mode 100644 fuzz/corpora/x509/6c33d0cb4b1958daf5bee4c88ba29b6776938d8c create mode 100644 fuzz/corpora/x509/6c51d02e468fed950218c48fd305e449c6e1e0ae create mode 100644 fuzz/corpora/x509/6c70c2b596b7d08f54017bec0f1a18d7cfc625e9 create mode 100644 fuzz/corpora/x509/6c8f1ac85bc8a4fd3efb607cd98dda6ef779491c create mode 100644 fuzz/corpora/x509/6ca9c037cd6de13c0aa71e7bbce02437dc834797 create mode 100644 fuzz/corpora/x509/6caeb3743c9aa826fed74ebd3c662ab9912ea712 create mode 100644 fuzz/corpora/x509/6cb175a172e14fb32fda01ad3ad194e8a400e762 create mode 100644 fuzz/corpora/x509/6cdbad7c39d719ae10b6bafadc2c4d8974e20765 create mode 100644 fuzz/corpora/x509/6d3a03c11b74bdc328aa32f47755c856eb75162c create mode 100644 fuzz/corpora/x509/6d561d0313608aa08b26e7b4b5850c34bbcef0d6 create mode 100644 fuzz/corpora/x509/6d6e5cab96aec56bdf9d230629ffe7abd07a4be7 create mode 100644 fuzz/corpora/x509/6d8149ceb03f9fe1e00dfac8e6ec8d9a64f0a60b create mode 100644 fuzz/corpora/x509/6d8652c318657491292053c9790e0d1df1293b56 create mode 100644 fuzz/corpora/x509/6d93b25cd5717247ed3566095f8629f681fa8d02 create mode 100644 fuzz/corpora/x509/6d9dfa3087acc454cbd8f4f791118b2855711bb7 create mode 100644 fuzz/corpora/x509/6defa9fd6905046f9570bbe74112c7d0ca81e55d create mode 100644 fuzz/corpora/x509/6e3cbf8f3f3612114e0c07b96697ab2b29029cbc create mode 100644 fuzz/corpora/x509/6e70169a2561a9eca031c12397583e404b5ee185 create mode 100644 fuzz/corpora/x509/6ea07c01e73d6c99910d8df1bebb9b4887353c61 create mode 100644 fuzz/corpora/x509/6ebd5a41fd5ed5f406da465ac119cda47092a10d create mode 100644 fuzz/corpora/x509/6ed77697122ee679f4415e5c68417d19f37b0ff5 create mode 100644 fuzz/corpora/x509/6eed45832395be200cb05d2f442492e8c443d784 create mode 100644 fuzz/corpora/x509/6f4177a076f8a90f59f1bdbcbb54eda8e97f2cb4 create mode 100644 fuzz/corpora/x509/6f547f42a04db764b8d7163aecd9e3ffabaa68a3 create mode 100644 fuzz/corpora/x509/6f6ce19b829add314577861026dbbe7d7da8be1b create mode 100644 fuzz/corpora/x509/6f99914e9b2feeb3b546514bfc39ee1da49f2c51 create mode 100644 fuzz/corpora/x509/6fde458d58c49f9e2709c50f4973389928772a55 create mode 100644 fuzz/corpora/x509/6fff43a4c2bef33e3020d6d918680235a115c070 create mode 100644 fuzz/corpora/x509/703d6f37c2668346a8386aa28e7cd6392d134593 create mode 100644 fuzz/corpora/x509/705a138f8a12803bcf0e34e9518654292b6d4719 create mode 100644 fuzz/corpora/x509/709105af747a6c295ea841afedb87c983a66fb4a create mode 100644 fuzz/corpora/x509/70a239eeadd6c7f8a0604c1a3a74bd841f632f12 create mode 100644 fuzz/corpora/x509/70bfab48a79c376450825ffba20d7f0bad37d258 create mode 100644 fuzz/corpora/x509/7110ec3f270a97b4a6e61d981f06ec7058640cdd create mode 100644 fuzz/corpora/x509/7122814cd907cf9129aa55856255a41465e34400 create mode 100644 fuzz/corpora/x509/7124dcd724a96c8d6427b16dd76bcba65aaa46c4 create mode 100644 fuzz/corpora/x509/715279a12229f348b8dcb9723a224476e30d6a58 create mode 100644 fuzz/corpora/x509/715505a81756f3dba5b9fd180f0c1ef0ea9d6a85 create mode 100644 fuzz/corpora/x509/71689233ba67e44b67cd2b1dbf564337f5b4b49d create mode 100644 fuzz/corpora/x509/716e18c8f2d0ed851265e98ddd2ebecc42a0a11a create mode 100644 fuzz/corpora/x509/7193a15efa6efe2395db8bab4ec1c04773c97019 create mode 100644 fuzz/corpora/x509/71b595ece349d0c4655d865a503fb244a8768fed create mode 100644 fuzz/corpora/x509/71c4a9f89d58d8f192e58b584428750c07196c9f create mode 100644 fuzz/corpora/x509/71cf3f698c3d544bf13031102972f7055a1cc2a7 create mode 100644 fuzz/corpora/x509/71fbe93c726e7d8f477f55e0b25b1e1379c50f8e create mode 100644 fuzz/corpora/x509/724e278fd50ab6c028c5c9ebdfccc44f8e15644b create mode 100644 fuzz/corpora/x509/7253599f14804c692d9f8098b5d51bc4facf3fe1 create mode 100644 fuzz/corpora/x509/7260d75002df9a03a3f22dcbe653c7b85afe7964 create mode 100644 fuzz/corpora/x509/726d4c968c157e98adc124fb34f764538d7ad2d2 create mode 100644 fuzz/corpora/x509/726d7a01076ab1d2c954add3d6c66a1c33ce6854 create mode 100644 fuzz/corpora/x509/7314f51f896c9f332563bd614b6421e5886aceaa create mode 100644 fuzz/corpora/x509/733bfbe66763290243f91625a75a659e9b6191ff create mode 100644 fuzz/corpora/x509/73664ef44854e8c48de37261ff5b203c7bb07e79 create mode 100644 fuzz/corpora/x509/736e53822401f19dc531f1dba0d47caaec198f38 create mode 100644 fuzz/corpora/x509/739b6e977a403fa06deb8af5e0afa967fcb8d13e create mode 100644 fuzz/corpora/x509/73b47f681eea7fc6eb62585b864f62c364c8f44e create mode 100644 fuzz/corpora/x509/73faa82787c73d8a242f2b253c0795d572c53c4b create mode 100644 fuzz/corpora/x509/743810d3c264beb31e87c8c38eb8f714abc927ff create mode 100644 fuzz/corpora/x509/7443f8335c7d78eb8caed77c176e901a2866c721 create mode 100644 fuzz/corpora/x509/747e63ab5808b40138776514b28b57e5a1d7acf4 create mode 100644 fuzz/corpora/x509/748146f339c0ee11b2dc300b6056a83ea1bab860 create mode 100644 fuzz/corpora/x509/749ad6aa70a0e2509581dc0fdc8b9471b3932cb7 create mode 100644 fuzz/corpora/x509/749d8197d9f561f577c0f57db08f34666df73ea2 create mode 100644 fuzz/corpora/x509/74a55cf5762b4d4face88100361ea0a8748aad89 create mode 100644 fuzz/corpora/x509/74c832628c5a46acb17aff70951822ab915d2b73 create mode 100644 fuzz/corpora/x509/74f075659ecc08808e0087c2e7bdce521324a3e5 create mode 100644 fuzz/corpora/x509/752bb05b5638824585aa67a7f52ed2a84551e62e create mode 100644 fuzz/corpora/x509/7587964a48c3843d1397479bb1534881b5af1b36 create mode 100644 fuzz/corpora/x509/75f6a112c11c0942817b2f12733326eebae01c2b create mode 100644 fuzz/corpora/x509/761006534819e5368d945d8d1a1466d84aff0588 create mode 100644 fuzz/corpora/x509/76382ee935773850bed91f8aae61e1097bbff031 create mode 100644 fuzz/corpora/x509/7685afccfcb7e344d9942e41e753976509796c8b create mode 100644 fuzz/corpora/x509/76d54584dcd87cbfc10558a2c9ef1029e5b33f97 create mode 100644 fuzz/corpora/x509/771f0f878b12302ddab88a2812d85b8cad740883 create mode 100644 fuzz/corpora/x509/7725dc2b03ba8d7c910f0022d56a5ae49c9594f1 create mode 100644 fuzz/corpora/x509/775637f0a354d19f7d0a974cecc91fcf1c1c1681 create mode 100644 fuzz/corpora/x509/779a289b58bc7a4b698881b15cfc2d4524d2e171 create mode 100644 fuzz/corpora/x509/77a41e5bec42d2d0922070e09b812fc840106f6f create mode 100644 fuzz/corpora/x509/77b4743c9e65ecdcc57c0232df8567e7c6e1381a create mode 100644 fuzz/corpora/x509/77eba3f1894f8c94e59a3edd4be0a62a37a59c0e create mode 100644 fuzz/corpora/x509/77f407ac9e6dec86d666b06794544152558b1eb3 create mode 100644 fuzz/corpora/x509/77f41b39b3a58eaa61b33363a890b4f3436ef66f create mode 100644 fuzz/corpora/x509/77f8e1f052221230336e5ac66d40082f77f0fc9d create mode 100644 fuzz/corpora/x509/780789c970d41252b2bececddd620869e47e7532 create mode 100644 fuzz/corpora/x509/781efcb33c4cc1ccfed56fce889e5214efec8145 create mode 100644 fuzz/corpora/x509/789bd4d45d43a2060b3a94f6db8d193c37f9305e create mode 100644 fuzz/corpora/x509/78e5401157dce9db5edf5ec5be38ac1f5e5699c9 create mode 100644 fuzz/corpora/x509/790987c4948fa67f1e4479cd76b71b74ade1d985 create mode 100644 fuzz/corpora/x509/791ea4ec36055be6f13dc4276399cc4d05dde675 create mode 100644 fuzz/corpora/x509/7929e3b9cb65542a00b72adc094c7e883a62d62c create mode 100644 fuzz/corpora/x509/795d4358259f3dac0481eda8c959eb05e550ef26 create mode 100644 fuzz/corpora/x509/797781c73cda29b80d8f2903489d45b74cda7add create mode 100644 fuzz/corpora/x509/799e8606c1623894e88300bd3e8743f5c01bc35e create mode 100644 fuzz/corpora/x509/79a318771df6377b6169be8064e325d6053f6d7b create mode 100644 fuzz/corpora/x509/79a720aef18739326f59e2be411dae04e4cfdc63 create mode 100644 fuzz/corpora/x509/79b22dc204992c63b508364f764b799fb967b3e6 create mode 100644 fuzz/corpora/x509/79d4095a352716cf0f813e585491bf1c52c55413 create mode 100644 fuzz/corpora/x509/79f13a1349e66142a7840138be9a7a72708307ca create mode 100644 fuzz/corpora/x509/79f1ad0562ff6806891d361e8bed38d9ea92dc97 create mode 100644 fuzz/corpora/x509/7a05309d5033dd44228be4d4392b02c0edbc2c20 create mode 100644 fuzz/corpora/x509/7a22043e1824f0124ec16d46faea330033ec9a05 create mode 100644 fuzz/corpora/x509/7a3196d60c995a5e8af0df2f4a37443d6bc84c01 create mode 100644 fuzz/corpora/x509/7a328019898d7f8903c106a3bb2bc0cc26f73999 create mode 100644 fuzz/corpora/x509/7a48d36e4a8629e339a181201707de1b5fe3cd49 create mode 100644 fuzz/corpora/x509/7a7b62f06604cf984fe8bd0ad02711d02e6ad0c0 create mode 100644 fuzz/corpora/x509/7a81893462d5aedb529fcfaca4ae62e6c1f60edc create mode 100644 fuzz/corpora/x509/7a8beb8b885fb27f427ae7039ce0e4c91d172b35 create mode 100644 fuzz/corpora/x509/7aa794886b93c2bf99c583162d8c1306b7e30dfd create mode 100644 fuzz/corpora/x509/7aaa47b8899f73685b88994fe8b1e9c692a30753 create mode 100644 fuzz/corpora/x509/7b9b1906da5cb645be56ee6773fc2515d89f8148 create mode 100644 fuzz/corpora/x509/7bcfa8aedee7db293de430b174405f20af0cf552 create mode 100644 fuzz/corpora/x509/7bf4881bd075b4d7f2aa42ce031d41d9847d1b35 create mode 100644 fuzz/corpora/x509/7c16443e844299396a7cbd46bbd5cd1cb5c04aa2 create mode 100644 fuzz/corpora/x509/7c2642bc9b3939670576de71c6abfb8e26d6cfaf create mode 100644 fuzz/corpora/x509/7c5417eac4a86bb4976698119422a50f58e6da4e create mode 100644 fuzz/corpora/x509/7c6610640432c9ef28617efc5a26b51f2755c60e create mode 100644 fuzz/corpora/x509/7c7df34fa6d48b7c3e61cd8f4383d00e49c411b6 create mode 100644 fuzz/corpora/x509/7ca6d278a4fd5f9485f1df1e839a65f5732bba05 create mode 100644 fuzz/corpora/x509/7cc7f116b73f73083dfaff59541f10bbb3adcb6d create mode 100644 fuzz/corpora/x509/7d7d2d50381a5e70288fe686992b44a11b3f5a2c create mode 100644 fuzz/corpora/x509/7e23409e23c695182a02eb2bdd1ea5c059114450 create mode 100644 fuzz/corpora/x509/7e7eaa9823d996e6142ecd27997963afaacc106a create mode 100644 fuzz/corpora/x509/7eaed080c27d76107fbc481c2270fd062a250269 create mode 100644 fuzz/corpora/x509/7ebfae7399981cb791177df2bd2117d84dce5afa create mode 100644 fuzz/corpora/x509/7ee2b3661290bb22b4b5e2861f46bc47e5e62b9f create mode 100644 fuzz/corpora/x509/7f05c3a4d3f93cec5e542c46e6cc1c665a7f3cdb create mode 100644 fuzz/corpora/x509/7f1435a184f7f51da58aaa7c39234d3f7fbadf12 create mode 100644 fuzz/corpora/x509/7f456b65f5c09b5670d93a6093a7b88134484bc3 create mode 100644 fuzz/corpora/x509/7f846f4b8d173a78e212c3bccd9b1cbd3278ce9e create mode 100644 fuzz/corpora/x509/7fa128e4801eb591afab55f3ba65683f5726be67 create mode 100644 fuzz/corpora/x509/800959f3d628394a5304c4dac56ba17d12e86ce3 create mode 100644 fuzz/corpora/x509/805b84ed6e1af60565b82b6c2221a4a7c382f0ce create mode 100644 fuzz/corpora/x509/80b84b9a2928efbd7c88ca0e77764340a736711a create mode 100644 fuzz/corpora/x509/80d25cfce5571dae3078aaf23628d525675ff889 create mode 100644 fuzz/corpora/x509/80fd0415c68c6af27cfe6a403c05d8d30ae5be1a create mode 100644 fuzz/corpora/x509/8119da0a08f88417a80f48b79432bc8270e90074 create mode 100644 fuzz/corpora/x509/819b6a63d14d3b6bd35ff3003b724d9c2ef024ae create mode 100644 fuzz/corpora/x509/81d08594947f7252aa355f593c842569f31671bb create mode 100644 fuzz/corpora/x509/81e62b202653a2c2a4634a39b737bb5ae354bb5e create mode 100644 fuzz/corpora/x509/82a5838723c28efa851c54cf8677fa5883362ee3 create mode 100644 fuzz/corpora/x509/82aebb4e17f1af023ea8ce62bc4d60220340b7d9 create mode 100644 fuzz/corpora/x509/82d21c866f3d46b1907ee53396f9e063ade64da9 create mode 100644 fuzz/corpora/x509/82ea87fee99df2c583504256f2f9542d0ee1dbb9 create mode 100644 fuzz/corpora/x509/82fdc665ef9a4c60064c86a51ef4366edcd25d56 create mode 100644 fuzz/corpora/x509/8301e614b7db870058cd0a15708c2c8278182233 create mode 100644 fuzz/corpora/x509/831670c0636de5d74ada0ca84be356bde04ae90d create mode 100644 fuzz/corpora/x509/83340c2809e7863253f0c85ad24548a254b617c9 create mode 100644 fuzz/corpora/x509/8334a36bcd16dae0c4d71a2a2715e96eba1b6924 create mode 100644 fuzz/corpora/x509/83483e9207997cbb2dc204d16b550ba27aae7cf8 create mode 100644 fuzz/corpora/x509/8358492759d87c743db7fe57c2ec57004b140a02 create mode 100644 fuzz/corpora/x509/8386f2cf6fc349e9ee0bc6024ce2b6edbb5bfe79 create mode 100644 fuzz/corpora/x509/838b53861283285b114e041b5a96822a394469ad create mode 100644 fuzz/corpora/x509/83d94c378fd19dd3225e953fce94316f7900767c create mode 100644 fuzz/corpora/x509/83e6c705338ed988ece6d2298ed4d2cefd5205de create mode 100644 fuzz/corpora/x509/83e9966f46a745e23033ec1e17b8849651d19d1f create mode 100644 fuzz/corpora/x509/8412fb1481fde9529ecd2ad1dae89a5dacbf810f create mode 100644 fuzz/corpora/x509/843c475b8e6cba07ed2f89ec182ca281f5254314 create mode 100644 fuzz/corpora/x509/844d5f0b9278fa14be77d7f61aba360692f1a2c2 create mode 100644 fuzz/corpora/x509/846272e46b3ee3907b0bb399a199867a39a33123 create mode 100644 fuzz/corpora/x509/847e01ddd8115ae8ecd9f7d32d9dc582edc21583 create mode 100644 fuzz/corpora/x509/848c1d85597a57c11f863d2816f498b9539d5270 create mode 100644 fuzz/corpora/x509/849e5f6e6b0c9798f395d922878e0bbc2d3c1741 create mode 100644 fuzz/corpora/x509/84d4955f69f57a300ec0a3bbcc106a488cb69e4a create mode 100644 fuzz/corpora/x509/84d75d132268ba5ef63e86949c1cde9dfb273f04 create mode 100644 fuzz/corpora/x509/84f11640de983d450990f49329a492a4fdf37aad create mode 100644 fuzz/corpora/x509/851705bba80bcf3e98038ce099a737b12259ac2a create mode 100644 fuzz/corpora/x509/851b151ccffce6ccba7ced415a92637763d7997e create mode 100644 fuzz/corpora/x509/855ce93a3bb0c7d45a85fceca85bb900cf45e6f1 create mode 100644 fuzz/corpora/x509/85825e404951d8af6c9d58946a92c74ce3e9c0b8 create mode 100644 fuzz/corpora/x509/85d3fb318a06852b1423c5df30f8433770bce85f create mode 100644 fuzz/corpora/x509/85f59465dffdfab105e9c0761c150ce5968bfb56 create mode 100644 fuzz/corpora/x509/86340b10f02bf316803b847968b88b3a94acc515 create mode 100644 fuzz/corpora/x509/864018791a69f5ed87f22f3be506b37ae3f56ff9 create mode 100644 fuzz/corpora/x509/8643bb21bc88751267b9c51de10ee6518b56cf62 create mode 100644 fuzz/corpora/x509/864ceca1967ac38f56bc33a33c6cafdaa24d5cb5 create mode 100644 fuzz/corpora/x509/868f1b2e2b329e9273aae01e7f4e02c21607923c create mode 100644 fuzz/corpora/x509/870cfb68839b7db8c342c672391be1295b029cdc create mode 100644 fuzz/corpora/x509/87186b0d45470895558a8f1942ca06d773192575 create mode 100644 fuzz/corpora/x509/8735f078d83291f7a6a355990a0fed522ac6aa1d create mode 100644 fuzz/corpora/x509/875cfbc47b2b1fd2c96791704d4bd384a68ef9b6 create mode 100644 fuzz/corpora/x509/878b8e718d20c9698b990500c8ccb52f194c0ee6 create mode 100644 fuzz/corpora/x509/87afdddf66ec355eeadfda33936601696d0773e5 create mode 100644 fuzz/corpora/x509/87c084a9a55b08856f7a44ec577cb2adc74a732e create mode 100644 fuzz/corpora/x509/87e49dc10e3a658c7b496fae477ac3de1ebae9ac create mode 100644 fuzz/corpora/x509/87f6ae4a2a5572c7e9d8e7f6af823aa83efd2bd4 create mode 100644 fuzz/corpora/x509/880281ee3f591f31cb6f717fdd897dc670ff2632 create mode 100644 fuzz/corpora/x509/8807c438ead3d409674d4f540f440b0baf66f27c create mode 100644 fuzz/corpora/x509/883623887460f57bf440cb5d97a28b0c9c7f327e create mode 100644 fuzz/corpora/x509/883f1ff07b1824bd1cd108cd53875755cdab2d3b create mode 100644 fuzz/corpora/x509/8869c4ad66242fdb86f238d496714a837095dc8e create mode 100644 fuzz/corpora/x509/888850137f08a9746960f6094058b987d6443a5d create mode 100644 fuzz/corpora/x509/88921ffce4151e829225bf80ff62a15d3cbcabd2 create mode 100644 fuzz/corpora/x509/88b06203f6a5610c1fcf1342b18e50ad7a7ff963 create mode 100644 fuzz/corpora/x509/88b7543b89ede5fe9705abbe5ab7aebfac7fbe49 create mode 100644 fuzz/corpora/x509/8950c25612c4d4f46ba91f9da501b6327ac9c479 create mode 100644 fuzz/corpora/x509/8967254ae3fc2f4eededeca3e981281c2442a282 create mode 100644 fuzz/corpora/x509/89824519d64c1582d817ef9ef4225b4c87492ee4 create mode 100644 fuzz/corpora/x509/8994e26d1748656c6323edecf6ed6d6fd9917c5e create mode 100644 fuzz/corpora/x509/89d624b3e293de8c3b6c94ef25816ac60d41776c create mode 100644 fuzz/corpora/x509/89f5d9614abf6e736f62a9559bc6ef101815e882 create mode 100644 fuzz/corpora/x509/8a09f057025559432f29502814a70cd3a828d740 create mode 100644 fuzz/corpora/x509/8a0a2149f2528a18dcb0c812b552081a69db774d create mode 100644 fuzz/corpora/x509/8a0f523c28d38d894cc846b9351a325374a340a1 create mode 100644 fuzz/corpora/x509/8a2ba09a47bb2032e22fe5b4b00501e0922aff07 create mode 100644 fuzz/corpora/x509/8a4935ea2002856a3c6287e11c7b46f4b2ed8ab8 create mode 100644 fuzz/corpora/x509/8a4fd4aaeee8e75c0473ab1e593fc87f6c71182f create mode 100644 fuzz/corpora/x509/8a8e03b713166040b1a0fcea075c8bd1bb7b616a create mode 100644 fuzz/corpora/x509/8a989951af054ec1736fa4598791bec358bf885d create mode 100644 fuzz/corpora/x509/8aacf6a786b84d03c101348bf3936e0eb68345eb create mode 100644 fuzz/corpora/x509/8ad497ba9480be437b2ef860ed9ab0eebbc2a30a create mode 100644 fuzz/corpora/x509/8ae11277cee436699ae6c34b06aa2fa9f20a4bc5 create mode 100644 fuzz/corpora/x509/8af88a49b44a1c83d0e32eceb9d049dfb6dffc28 create mode 100644 fuzz/corpora/x509/8b20fc685c8f25c929476cc9535782a916f55a32 create mode 100644 fuzz/corpora/x509/8b7e0283cf20a8ff4308911f08f5a956ab831093 create mode 100644 fuzz/corpora/x509/8bd950afef00bd688881dc55a0fa2c7a23fafc0a create mode 100644 fuzz/corpora/x509/8bef0bd3ceb33ab54d25464ae8b715144f5967b0 create mode 100644 fuzz/corpora/x509/8c46ef8b9bc2d0b22a849e4ca38140cb46ca3efd create mode 100644 fuzz/corpora/x509/8c517c09c5f7d34abdfb99c33093fc3b0f80b244 create mode 100644 fuzz/corpora/x509/8c75eab0d0b626f4a7b2761ef18beaf9caae6ac7 create mode 100644 fuzz/corpora/x509/8c8b2164f96a85d659f2b1c587042546341c5f3d create mode 100644 fuzz/corpora/x509/8c8f03c6a7e143963ed09397fc6b80db4772c6e4 create mode 100644 fuzz/corpora/x509/8c9cd8d7837cc3b2c1e2d121600f620c202b7c46 create mode 100644 fuzz/corpora/x509/8cd43ae1d6122c50746d48333db851bf8fe07f2d create mode 100644 fuzz/corpora/x509/8cd56d41bbc837eefff4f62172cf762b1f7baeba create mode 100644 fuzz/corpora/x509/8cdfa48a6d57f8f6de407ba7d71b1024c9694ea0 create mode 100644 fuzz/corpora/x509/8cf94d2a1ac70bdd054cbe5be69404876b164c5a create mode 100644 fuzz/corpora/x509/8d05ee913ad8831eeec5f49542711c0777887fa6 create mode 100644 fuzz/corpora/x509/8d0d15cb0720b5e351808c61eeb684886379e6d4 create mode 100644 fuzz/corpora/x509/8d2646233dd1b4f604b71761d1ca084a86a3b13c create mode 100644 fuzz/corpora/x509/8d334099d66d8d4480c303a737317e5baa9c942b create mode 100644 fuzz/corpora/x509/8d34696ee3443e15de67c7b2727a6684b95865e7 create mode 100644 fuzz/corpora/x509/8d468d8292fa0a35d884ed77d198175b297359b1 create mode 100644 fuzz/corpora/x509/8d4e274f086ae16641da7ec79cf4c6f6a8101584 create mode 100644 fuzz/corpora/x509/8d5499144b872b5b390b5a647b7c1b0f28cecbf0 create mode 100644 fuzz/corpora/x509/8d737ea86cc0c49c69f324868fe2b20360a7d366 create mode 100644 fuzz/corpora/x509/8d849a20383d0d2964e7491e18261e87ee64a998 create mode 100644 fuzz/corpora/x509/8da493a11ecccac319a97bacd34f30995f975744 create mode 100644 fuzz/corpora/x509/8db991f31d441ea67608b6a9774d43db29ddf69a create mode 100644 fuzz/corpora/x509/8de9c5589e1fbc865d7bdded105c78beba00470e create mode 100644 fuzz/corpora/x509/8dfe3f36ceeb8ca634664f4735fc4e4249de4145 create mode 100644 fuzz/corpora/x509/8e4aca1be214483e5d182ce803bd4a4a3d82907e create mode 100644 fuzz/corpora/x509/8eafa0e4eea3a6637da34299fee5b379d543b7a3 create mode 100644 fuzz/corpora/x509/8ebcd614bc2fbf189b5268bc8e940d50570af21a create mode 100644 fuzz/corpora/x509/8f4e8ed745d3e7c8d2e8015c7fae3a0c822e35b6 create mode 100644 fuzz/corpora/x509/8f5baa7239db8563c8d0d34cdd05764f91ea2ad3 create mode 100644 fuzz/corpora/x509/8f761396eb2dad03182ad0cbee1ee5c191d0a4c2 create mode 100644 fuzz/corpora/x509/8f93aa7854cbbf9255e710021cfa722c3729473e create mode 100644 fuzz/corpora/x509/8faa8944bccc54e102a10fb0509d0f5fed3ce61c create mode 100644 fuzz/corpora/x509/9009621dbb80660bd362622f06aaf3fdce4da007 create mode 100644 fuzz/corpora/x509/9037cee1cf7f024e7f1e475e150e64bede25fd8a create mode 100644 fuzz/corpora/x509/9080eb7810722ca74b8b0bcdf3eda4fecd323229 create mode 100644 fuzz/corpora/x509/90a722ced18e06a31b268eb0b297b29030a47dd6 create mode 100644 fuzz/corpora/x509/90cc7ce9fa0f539fbb3ff1ee577f599e86b86c38 create mode 100644 fuzz/corpora/x509/90da332456e0f39b7d8f54c3478913a0ec6ef7dd create mode 100644 fuzz/corpora/x509/90eb64e166608d4ff3aeb465412365f437f7b23a create mode 100644 fuzz/corpora/x509/9107fb3a9f42eea196d25da52e7cc1a6a72cacf1 create mode 100644 fuzz/corpora/x509/91214e3a0518ed19b0a544df23219a932216085d create mode 100644 fuzz/corpora/x509/91267466908adcd1979513270fd955e0609599e1 create mode 100644 fuzz/corpora/x509/914cdb237d4f506e8644b250426e3859ec7884ae create mode 100644 fuzz/corpora/x509/91b9d6396cc6f514041d0bd795b05e324b88ffc9 create mode 100644 fuzz/corpora/x509/92435cb39fff0444dacdd7e604617eaaa42f019b create mode 100644 fuzz/corpora/x509/924fb72ab1de42a0861295834734ca817fb263ff create mode 100644 fuzz/corpora/x509/92532787e15998f26bcf387834a41ef4e884b367 create mode 100644 fuzz/corpora/x509/92f3e0ab98a57fb3a6b0806030db152ec05cda67 create mode 100644 fuzz/corpora/x509/9326abf72a5fc6bbb66e47b7a716b80e4565444d create mode 100644 fuzz/corpora/x509/933b2085471ce2f3660d089e323f71ccc9799e7c create mode 100644 fuzz/corpora/x509/937d7413c5efd9907da35ad0386119b073ace82b create mode 100644 fuzz/corpora/x509/938ace5d5b7e4603894bacbf1baff72102bfa813 create mode 100644 fuzz/corpora/x509/9418d361c8fe4f2ed64351c7241a1400e87fd209 create mode 100644 fuzz/corpora/x509/948608169e1ff9e8b9c02d501fc3ca26df8f2ceb create mode 100644 fuzz/corpora/x509/94fe68fc4da109662649eedbd022bd653a461579 create mode 100644 fuzz/corpora/x509/955795e3a35aaca4b62e4ab9f68052b41be70867 create mode 100644 fuzz/corpora/x509/957ce5f3e8a42eb4397ce2fbc0784ffd82c219f5 create mode 100644 fuzz/corpora/x509/9582c563c9b8dd12b994887f6fceb02c950dc183 create mode 100644 fuzz/corpora/x509/95b16558c4645b05f42573fc3e46077c6dfb4812 create mode 100644 fuzz/corpora/x509/95e5e9d0c7e680669f3660f6cafd7602f8df7cc4 create mode 100644 fuzz/corpora/x509/962b5e98b35b3f6566b50abc198d3c1b98947b7a create mode 100644 fuzz/corpora/x509/962ba8c91b422cec92603fdb124b7b48280f35b1 create mode 100644 fuzz/corpora/x509/963c79f0a3f29f982fd4691a11824e9e458fe30f create mode 100644 fuzz/corpora/x509/965274076315987233a85df61fa5626792f4da21 create mode 100644 fuzz/corpora/x509/965c6cbfd3cc9792f025ebe49d471e42a9e9f598 create mode 100644 fuzz/corpora/x509/9674a1d93fb3ca19354b32aa9d1192cbfea2eeae create mode 100644 fuzz/corpora/x509/96ec641ae350fdc9fe9d863fb4fdc52de87eca15 create mode 100644 fuzz/corpora/x509/96f12cf334b79676299c8a3e5812c443f29676b2 create mode 100644 fuzz/corpora/x509/971aa8bf9b5f99e193818ef492405535601fd9e6 create mode 100644 fuzz/corpora/x509/97275bf74a5a281df446f29791a4018cdde084a0 create mode 100644 fuzz/corpora/x509/9738cede3fd16b965145df41be8c9f970ace7d12 create mode 100644 fuzz/corpora/x509/97505557dfecdef2b53e2ea2f91c0ae8e8a571b4 create mode 100644 fuzz/corpora/x509/977eb541d4c05199575246417eb3e4ddd1ca5edd create mode 100644 fuzz/corpora/x509/97a9df4a6f4dcf9c96c8d62603e18bf007ec0cf3 create mode 100644 fuzz/corpora/x509/97c60ea70f7e60f0b9ea93a35744ee3fffe8e641 create mode 100644 fuzz/corpora/x509/97d0079435094f7729da4b96dbb909d83b0e164a create mode 100644 fuzz/corpora/x509/97e483ed9dc337adbe5a13cd540df47e6d4f4a12 create mode 100644 fuzz/corpora/x509/989f77500ca3315c5ccd089f25dd0922a75f6f35 create mode 100644 fuzz/corpora/x509/98da90fdb380cc39a06a7ddaffc873a388a5fb93 create mode 100644 fuzz/corpora/x509/98fb4ff9065a178632fffc27436005601df58e72 create mode 100644 fuzz/corpora/x509/9900141942b8bf374ff489db147c4098a4e6cb0d create mode 100644 fuzz/corpora/x509/9942201d28bc0a8a6bdb8db53271abd98c83c27c create mode 100644 fuzz/corpora/x509/99577e6aaf2da920ee047dbe5d2730791ac1f50e create mode 100644 fuzz/corpora/x509/99ad58660a595b2ecd103911599ceb2869adde68 create mode 100644 fuzz/corpora/x509/9a3f8b53a241289c722426918e8b30dbd5e484ee create mode 100644 fuzz/corpora/x509/9a4d32e12d289a198c1ade727a595e9cb0545399 create mode 100644 fuzz/corpora/x509/9a7b6037ae2923462808491239630e1c59d5f3f9 create mode 100644 fuzz/corpora/x509/9a8264cecf5fc619b295449e1a1ab5d192328820 create mode 100644 fuzz/corpora/x509/9a9e5f5c032adbb2227a3cbd4734f39914c84126 create mode 100644 fuzz/corpora/x509/9ae4a9d6278edbd675693e935e2c93d2f9db98f2 create mode 100644 fuzz/corpora/x509/9af47d9ae6a60e3a39ca2aaf0051309952594c32 create mode 100644 fuzz/corpora/x509/9af7ddef1fac37825cef3fef99db3cb1b110fc35 create mode 100644 fuzz/corpora/x509/9b076bda58d22fd5bee97e5bc1f1352521d26238 create mode 100644 fuzz/corpora/x509/9b49e0a01864fe37c3e4cb334ad7d203770b2e5d create mode 100644 fuzz/corpora/x509/9b8f2d79a843f5c32b913c0a606bd83a4159af64 create mode 100644 fuzz/corpora/x509/9bb073295d3361f094f4fa2707e38ba0d0d0cb90 create mode 100644 fuzz/corpora/x509/9bc4f27bb2cff76fad19afb924b628a04940d454 create mode 100644 fuzz/corpora/x509/9bcdc3868fc914b4611280c2482742180efeeeed create mode 100644 fuzz/corpora/x509/9c33fbf0503138367f5abb8fbf8206c110ce5069 create mode 100644 fuzz/corpora/x509/9c3aa3bc7ca95b9750ddc234e143207263a42aaf create mode 100644 fuzz/corpora/x509/9c4f1dba3b5a358dc5d1ec905a8ddd0a5ec34379 create mode 100644 fuzz/corpora/x509/9c77d10b2d5e0a2f0b40d9bf25810317089fe4e3 create mode 100644 fuzz/corpora/x509/9c8fa9a647609eef93a2c5416111c70f53df6103 create mode 100644 fuzz/corpora/x509/9c9f9db86a736dd81374e160ebca11398821ee44 create mode 100644 fuzz/corpora/x509/9cc0f1e454ad34b5695696b8bd255cdde3176e91 create mode 100644 fuzz/corpora/x509/9d3455c1131fbe4ca4a81bc6d646202d83342393 create mode 100644 fuzz/corpora/x509/9d3d78efc6d72a14a39916cbfa9e3fb44fe7e2cc create mode 100644 fuzz/corpora/x509/9d59326450ad39dca348260c0d02ce00222036d8 create mode 100644 fuzz/corpora/x509/9d78029f18d69ef543cd278130822447a86eec29 create mode 100644 fuzz/corpora/x509/9d814e241605abcb57474c9cf56978038b8c8ae0 create mode 100644 fuzz/corpora/x509/9d98ea1a5a2aff1b77259383f7fc820ae9852301 create mode 100644 fuzz/corpora/x509/9dbdd02b8fd35ef00d69afd041a85ce93c681d6f create mode 100644 fuzz/corpora/x509/9dc22576af2b0e1dc59fe94282670046cf41c315 create mode 100644 fuzz/corpora/x509/9df329bd6be4fe0b4c8d91f79aa34c0d546bbdc9 create mode 100644 fuzz/corpora/x509/9df9ad3541b962eeb3008f792522eedad4238253 create mode 100644 fuzz/corpora/x509/9e229c505cbc9bebe04f095219cf90ad54fcd67a create mode 100644 fuzz/corpora/x509/9e2f644275f8e606edf0af8e40a32918841a0843 create mode 100644 fuzz/corpora/x509/9e3b71ad89acdd8e363e2d7fd983931633e8a8a6 create mode 100644 fuzz/corpora/x509/9ea8b10c1a65eae5736d25491d3bf1076e0839d2 create mode 100644 fuzz/corpora/x509/9eaef8cc2035d0460b1cc899d44bb44b03489593 create mode 100644 fuzz/corpora/x509/9f0cab719b1efe6f516ec3828d08cb4a8ecd8eeb create mode 100644 fuzz/corpora/x509/9f231bc4d22c8d060827408777043d15e61517c6 create mode 100644 fuzz/corpora/x509/9f3f9da0719ef7ce6aeb43a721eaf743119bd67b create mode 100644 fuzz/corpora/x509/9f41817a9d570630998060ab0280b877fbac1805 create mode 100644 fuzz/corpora/x509/9f522a24187262b2454cabc95cfd54c1a736870c create mode 100644 fuzz/corpora/x509/9fa6a9f541c39690f4b39603b512f5e7df1186c4 create mode 100644 fuzz/corpora/x509/9fb649fa928fc1a994accf9f8fb656d27af70281 create mode 100644 fuzz/corpora/x509/a03a5f1688257a2d31650c6560b871686f864c6e create mode 100644 fuzz/corpora/x509/a0550c2fc8b8b35ae7366dc6b8e13ac8aac922ca create mode 100644 fuzz/corpora/x509/a05c0bad19c241db4f764989e2e561b11d715065 create mode 100644 fuzz/corpora/x509/a068c1c34418bb6d85a6639e9ceeb43ef283fc65 create mode 100644 fuzz/corpora/x509/a07036360fe6da89b61f4dab15c0707dcab9a1e2 create mode 100644 fuzz/corpora/x509/a09f4ce3d2e2d25b5e80ebad34a9b78bced65b6b create mode 100644 fuzz/corpora/x509/a0a2b683a7bfa656814f02c7dab84915a1db7746 create mode 100644 fuzz/corpora/x509/a0b15afa1210848794650150d2caf94d849192a6 create mode 100644 fuzz/corpora/x509/a0dd27a1c9ff683a39ea8940c2d4077cd207e2f5 create mode 100644 fuzz/corpora/x509/a13faa0fc51df6416acee4a457113ce6e7e4e7fb create mode 100644 fuzz/corpora/x509/a1567130a25327725fe4fced4fa57ee477df61ec create mode 100644 fuzz/corpora/x509/a15b3a56326da5dd712c9efa5dbb2d10b7ff4dc2 create mode 100644 fuzz/corpora/x509/a1816ad00e51874a386cbbcb933cbd4968815627 create mode 100644 fuzz/corpora/x509/a18e09e641a62965a5748f69ba92a00077864806 create mode 100644 fuzz/corpora/x509/a190f989c353161782dd47459d3b57fb1bf871d0 create mode 100644 fuzz/corpora/x509/a1cb8f059c2d8684bffb265fe3680affce3029f9 create mode 100644 fuzz/corpora/x509/a1cc784b45395100e1b442ca1b19f31aed330c99 create mode 100644 fuzz/corpora/x509/a1e7352cb76e72ae8babd03cba2d24435691cacf create mode 100644 fuzz/corpora/x509/a2234adada54741bf9c2c8fa442d41f235b6231b create mode 100644 fuzz/corpora/x509/a2762600ca77130edf61f8603ddad933c86fe035 create mode 100644 fuzz/corpora/x509/a2a9be2415ffd86b9c8deddec8ee36a4b3125de4 create mode 100644 fuzz/corpora/x509/a2d6faab06688763e917c57d1e0e7ae24341b86e create mode 100644 fuzz/corpora/x509/a2f4adfdaad11054e1abc61ef33a50286817612a create mode 100644 fuzz/corpora/x509/a35f547d061691be8317c53e645a961280b58378 create mode 100644 fuzz/corpora/x509/a38ec54f12d923c693d9f2e794bd75eae2491b69 create mode 100644 fuzz/corpora/x509/a3cd957807e3119065152d6665248394f6c8887f create mode 100644 fuzz/corpora/x509/a3e8a5a8b0cb1e441b9d1a9baf572c1e3f122b5f create mode 100644 fuzz/corpora/x509/a46cc1da9b1facc8205ca238b331cffb72d3f421 create mode 100644 fuzz/corpora/x509/a477300ff0bb0471d15012e80d84142bfd438c18 create mode 100644 fuzz/corpora/x509/a49df1ddfd2ce833c917f8e51f1f136a565c4f8f create mode 100644 fuzz/corpora/x509/a4cdc00e4f33de3ba0e0d23df92f84595d334a3c create mode 100644 fuzz/corpora/x509/a4f969be4a5f7478a2559e47d8a1fb02aee22eed create mode 100644 fuzz/corpora/x509/a507c4015665886d3d89e18566c790eecd1e18c4 create mode 100644 fuzz/corpora/x509/a51d7a6810368b08eb2183aa4c5ba2f943d8da38 create mode 100644 fuzz/corpora/x509/a5391841c29d257857da003eb8536c5cda60a7ab create mode 100644 fuzz/corpora/x509/a5c6d9e4e126459612189fdd5abb34de24bf55a2 create mode 100644 fuzz/corpora/x509/a5d40a999d997d2189791ad0fe24ba085e4d4247 create mode 100644 fuzz/corpora/x509/a620aef37d37a0dbf5b21699753fb3ff86378d1f create mode 100644 fuzz/corpora/x509/a6221853e3bd0b3dbac967ea5f7eed45858a4e23 create mode 100644 fuzz/corpora/x509/a63f07aad651466e8da95cc08ff20c54cd265a3a create mode 100644 fuzz/corpora/x509/a64252ae24a5477882a1768917d4c219ebb494bc create mode 100644 fuzz/corpora/x509/a6863df5dd3a0c22e0ab924bdaf209d7f2f2500f create mode 100644 fuzz/corpora/x509/a6bf1ccbe3a7750057ea68440efe768718496ec0 create mode 100644 fuzz/corpora/x509/a6bf5f0b8d89e554eb1b66d6fee01dfe074b126c create mode 100644 fuzz/corpora/x509/a6c21e63819b0b21b99ae17d465710edbbcccf5f create mode 100644 fuzz/corpora/x509/a71a10d63097664ded0ec95754538b081420c79d create mode 100644 fuzz/corpora/x509/a71ca64cacbe0864e11c405f3ad3d084b9504c3e create mode 100644 fuzz/corpora/x509/a72b4b2a25708a485e7ce25631e962693b7aa778 create mode 100644 fuzz/corpora/x509/a74019ea830032a39355b4c6854ff7759a75247a create mode 100644 fuzz/corpora/x509/a76a690c4842b0d5395c8186b2a77777fc7e8d8e create mode 100644 fuzz/corpora/x509/a77af1cb679faa23ad49896cc79a0fd1cc324073 create mode 100644 fuzz/corpora/x509/a7a794be79885149b41df177068ee575648888a0 create mode 100644 fuzz/corpora/x509/a7af17fdd0a2f8fd28b4f19eb624ebcc4c7c7837 create mode 100644 fuzz/corpora/x509/a7b03ce56f83da38eb0a0ffbca8356dfc3416db6 create mode 100644 fuzz/corpora/x509/a7bb6b50866cff0e6513880bbf72eed170d89e15 create mode 100644 fuzz/corpora/x509/a7d52ca4780717fe6c5fd77e4e0c0728bfc95566 create mode 100644 fuzz/corpora/x509/a7ed04ec9657cac80f19582541b904f0c44da661 create mode 100644 fuzz/corpora/x509/a827acfc0baea13177862f7682fde2c0a398e80d create mode 100644 fuzz/corpora/x509/a82e87be3357e6239d9e8d6f4ab4e5ee35f63ac2 create mode 100644 fuzz/corpora/x509/a8460d135ec4af5990c3bb8e010b75517001a402 create mode 100644 fuzz/corpora/x509/a857f0a5a8b0c2c9631296c71aee76c4fc75e411 create mode 100644 fuzz/corpora/x509/a85a47dffa179291a7e9773c62ba3cf7aef41941 create mode 100644 fuzz/corpora/x509/a87d055e51b24b8427ed89ebc3a56698b079dd60 create mode 100644 fuzz/corpora/x509/a88ef304955f9e06631d76c3bf5b1de96aa5637c create mode 100644 fuzz/corpora/x509/a8a9180d5c2437fdb65d6d046fb31c29dc883ef4 create mode 100644 fuzz/corpora/x509/a8ab61872b0c973f2776075674dd61041e1e312a create mode 100644 fuzz/corpora/x509/a8eee8058dc6fe401c3b24b9ea9dab56a3359926 create mode 100644 fuzz/corpora/x509/a8f087aa706265738ca32b503a9aa13f525df7f2 create mode 100644 fuzz/corpora/x509/a926b798b1fdc818e3ed37855b69a846b1958bf2 create mode 100644 fuzz/corpora/x509/a936a50b93a82a7d311aa3cda7f634602b524767 create mode 100644 fuzz/corpora/x509/a983139515dcf68a91979f84dac3673a88748fe6 create mode 100644 fuzz/corpora/x509/a9b37ecfba4d16ebee88c3c0bcbe197835de9c1c create mode 100644 fuzz/corpora/x509/a9b55b630e9db5503144e477a9c2cce1e8fb0ced create mode 100644 fuzz/corpora/x509/a9c77a510743bc58d82e1172b54b05774c4a5a5b create mode 100644 fuzz/corpora/x509/aa2d0ce6f119d08ed03fcebc0ee6ca33b6b7aed9 create mode 100644 fuzz/corpora/x509/aa364e23a42949d80df951f0d74a3b7b2b26fe40 create mode 100644 fuzz/corpora/x509/aa60e73f58154efdf0bf2e5fd3647e6dfa12f2db create mode 100644 fuzz/corpora/x509/aa9ac7daae501ffd69e62e70f4fb6c2b0ece9e8e create mode 100644 fuzz/corpora/x509/aaba5fc534a8ef2ad5eee91a1a8d7e48bfde9b03 create mode 100644 fuzz/corpora/x509/ab1316de30ad075d528f8c6c29c9f126995d758d create mode 100644 fuzz/corpora/x509/ab2a077c85ad0427afad827cb1cffbd70e84c4a2 create mode 100644 fuzz/corpora/x509/ab60d4daa1b5aec8fa98786bb0049f526c5f071a create mode 100644 fuzz/corpora/x509/abc0dc78e5445b7573321d63599f314b4deb9be5 create mode 100644 fuzz/corpora/x509/abd496ec1cd2db954b8664a4cd8d606659d0c7e6 create mode 100644 fuzz/corpora/x509/abdcb35a0e5e217f3c3d6c2218cba7e81b1b465e create mode 100644 fuzz/corpora/x509/acd5cf634396a62147a6f62dc64171b692caa3b2 create mode 100644 fuzz/corpora/x509/acedeaedf84f4117c41789b383b36c98a64b2ab0 create mode 100644 fuzz/corpora/x509/ad311a7bc4090bf30171c48f965f09853e75783e create mode 100644 fuzz/corpora/x509/ad46a8e4199b32e716d931f2a44eb20e896c3678 create mode 100644 fuzz/corpora/x509/ad94a421f8a83bbc7374067cbb633ba2328687e6 create mode 100644 fuzz/corpora/x509/adb6375b5f83a2121f4dc437b90f7889f0274a51 create mode 100644 fuzz/corpora/x509/ae4dd2c7f6e204eaa9f128bc6166a154414a0c3c create mode 100644 fuzz/corpora/x509/ae738ff0ae90c0a0c03b7161249733a3487b061c create mode 100644 fuzz/corpora/x509/ae8934af9d15d624b634acb02fbe94fe7ba97a6d create mode 100644 fuzz/corpora/x509/aed5612286b84d942c531f6d2d6a4fd5d4bc8e71 create mode 100644 fuzz/corpora/x509/af474fdb34715de80c6c1594d756c8aaf3431956 create mode 100644 fuzz/corpora/x509/af59cf10a3d88c5145a25052f8fb10cb2e9d65c5 create mode 100644 fuzz/corpora/x509/af71372e458609c1a12102a39e9d49f958a8bfc2 create mode 100644 fuzz/corpora/x509/afafc43267ffae33a6cf5e38457f5448bf1c1e48 create mode 100644 fuzz/corpora/x509/afed7825389000bf93d2945491d148634a554558 create mode 100644 fuzz/corpora/x509/b003d3f55ca65e2c44773200109eb9918daecbf3 create mode 100644 fuzz/corpora/x509/b01474b53a3f49ebf4927f400cf44c28213c6e8c create mode 100644 fuzz/corpora/x509/b02fcce0d4ea670de151d583ff5a1f75416363a2 create mode 100644 fuzz/corpora/x509/b053c3b25358b9c12b301c32588b62e20bf629de create mode 100644 fuzz/corpora/x509/b067eaf548220a54f227e200d28b4cbbe857408a create mode 100644 fuzz/corpora/x509/b0bcfd7a5298d3504c474b268865950bf30245b0 create mode 100644 fuzz/corpora/x509/b0bd26cddd1349914c3b7e27152a1424401cacba create mode 100644 fuzz/corpora/x509/b0c5632b6bb9a23851080394e81f9a6c623a2e82 create mode 100644 fuzz/corpora/x509/b0e7750fbfedfd7ab5d938c5e4bc5403fca3107d create mode 100644 fuzz/corpora/x509/b0e8a473ebde2a237c1d3deab3aff4123396b6e1 create mode 100644 fuzz/corpora/x509/b0fb188512e8f6704a3574b1ea15f8e2b5971151 create mode 100644 fuzz/corpora/x509/b13e41a2a417a4b077da39f18413146450cd0595 create mode 100644 fuzz/corpora/x509/b1472e1cc8eb05c27431d6fdddafcccdde2135c0 create mode 100644 fuzz/corpora/x509/b177d17a1b55c4ae3d1c2539cfea426ecf86a944 create mode 100644 fuzz/corpora/x509/b18003c9e56685f8965dc2ca229e5a1e1f7a5781 create mode 100644 fuzz/corpora/x509/b189198c7901c19082e551b93c457893712c281a create mode 100644 fuzz/corpora/x509/b198966f0f37eefee29b457e2267c13a65829d64 create mode 100644 fuzz/corpora/x509/b1f72e6ab75241ac51c2d4473c297fe8611fcf9e create mode 100644 fuzz/corpora/x509/b21fc5990224ad004b57b8677ebc530ea3cd61f2 create mode 100644 fuzz/corpora/x509/b237c19325f76c12b389e4d181659701e7548fa5 create mode 100644 fuzz/corpora/x509/b264f5d799c7b4cc51f951c45ea6f24e94ed6da7 create mode 100644 fuzz/corpora/x509/b29dcf8d996a7dcda0c2272f0d1ca9ef9852cbc3 create mode 100644 fuzz/corpora/x509/b2a59f566fdc8d876d8513561449b6a6a32b5049 create mode 100644 fuzz/corpora/x509/b2ca59a3cc8951076bd4f3650120c9cc81d4fa14 create mode 100644 fuzz/corpora/x509/b2db1e2815b3661404f6f5ae04120d6b97360514 create mode 100644 fuzz/corpora/x509/b2e5a6f6eaaa27165e9eb2a7ab08a5e79b0c4ccb create mode 100644 fuzz/corpora/x509/b2f676800004ec2a0a5c57cdf052328e9aa8e5f9 create mode 100644 fuzz/corpora/x509/b37b40e39f8bc22ad2c86b3776cc754a624878fb create mode 100644 fuzz/corpora/x509/b3ab5f0adf20d3806eb177bf04a743a930812011 create mode 100644 fuzz/corpora/x509/b3b2db51f99c0a6a77f78e71fe107297079718a7 create mode 100644 fuzz/corpora/x509/b3d810cf537643984bea8abf415c4d240c513c3c create mode 100644 fuzz/corpora/x509/b3e808408c406ccf2b314c3692891da174838276 create mode 100644 fuzz/corpora/x509/b3ef45ae541930ff86982fd5834a86458e9a21b8 create mode 100644 fuzz/corpora/x509/b431201ea38a28ae87acf46784ddcb3247b83dca create mode 100644 fuzz/corpora/x509/b46de686e2e4c3ac33bf21d7b1d4163a8f5d42ea create mode 100644 fuzz/corpora/x509/b46eb914ca1b97912ccc335d057cbeee1d7bcd39 create mode 100644 fuzz/corpora/x509/b49cd3953da8bf032397d1ab24a1c0750608203c create mode 100644 fuzz/corpora/x509/b4dd6a94dde2f71673fc232c07909defc09a8bc2 create mode 100644 fuzz/corpora/x509/b5306f816a7a32a10c4bb0f021ed471cefc479e6 create mode 100644 fuzz/corpora/x509/b5bd29c7bd41543f618064ff27fd9bff0b72c550 create mode 100644 fuzz/corpora/x509/b62f98976c11d79674b019ea78a7ce4d6d78b479 create mode 100644 fuzz/corpora/x509/b633ac93f65745605bd0d72ad364fb02dd2ec56b create mode 100644 fuzz/corpora/x509/b672f4e36bb7b65b9692fb2d77d62dbc5a96ddbd create mode 100644 fuzz/corpora/x509/b676b9559d1e30c97d53963994855dccbba1de9d create mode 100644 fuzz/corpora/x509/b6856f1c1bd5fd331a177554034416a47ffdf490 create mode 100644 fuzz/corpora/x509/b6bcdd39e2c72ab4b750cddaca31e837db718d64 create mode 100644 fuzz/corpora/x509/b6eff57374f9e93af911acef02c0a29a7627393e create mode 100644 fuzz/corpora/x509/b6f4fbf27f088784dd34f5961c5a8007effe22b9 create mode 100644 fuzz/corpora/x509/b70f87594aaaae03db97b3672aebf66a0ba310a3 create mode 100644 fuzz/corpora/x509/b71ad618646f1785b51050c4ba80f69664c6a636 create mode 100644 fuzz/corpora/x509/b74db697535f1701358c90ad8c0756b3b4dca486 create mode 100644 fuzz/corpora/x509/b77bf9f2ced4ac1bcc3ae5fc91f6e90b0b6f0b73 create mode 100644 fuzz/corpora/x509/b78afd11269a901777d105f1ce85cc6256b08e9b create mode 100644 fuzz/corpora/x509/b7918f2c9c99e270da3e8e055c289de9f55ef825 create mode 100644 fuzz/corpora/x509/b7a75f6cb13f384316430dfa38f3d4aca3620337 create mode 100644 fuzz/corpora/x509/b7c940fff5ba1080b185b7f50da77436a48ac31f create mode 100644 fuzz/corpora/x509/b7e42036050a4ab27fc55ef365b15ec64d07c101 create mode 100644 fuzz/corpora/x509/b7e54a505f4d60cd24845679355a6eb79d3886ce create mode 100644 fuzz/corpora/x509/b8105fbaf7f69f9d116ef92de71ed80e6dbcee7d create mode 100644 fuzz/corpora/x509/b8107f2a37d673b5323289e3744fc82c5592832e create mode 100644 fuzz/corpora/x509/b84c318efd20f2981621c270506d1d872067e7af create mode 100644 fuzz/corpora/x509/b8519b94280d3db65659956a26308794ca314a24 create mode 100644 fuzz/corpora/x509/b852e463973d9a4959c7cb40a14e4d2108633643 create mode 100644 fuzz/corpora/x509/b8837e664d1a7e84a7849400039404f217ea16dc create mode 100644 fuzz/corpora/x509/b8858e115d1c843ef19d9b2d0936146340ec4ef8 create mode 100644 fuzz/corpora/x509/b8b5551c5fec2fd411e12b8c23a73cf807fb115f create mode 100644 fuzz/corpora/x509/b8be50030af6bf24ce735816c203338e76bdf602 create mode 100644 fuzz/corpora/x509/b91048059cc700f333297836f9f270a1654c7e7a create mode 100644 fuzz/corpora/x509/b91dcad81a07b13959e6abe8b713784c9f4096d7 create mode 100644 fuzz/corpora/x509/b92bd0032a431e1feb68cdc57ca2344c190e194d create mode 100644 fuzz/corpora/x509/b94fd86064a2daf3c855230fab14ba4d203e709a create mode 100644 fuzz/corpora/x509/b94fe0640faa72cdeefba5987be43f957d9c17d5 create mode 100644 fuzz/corpora/x509/b97f5f9c650f6d1a2494cbf7c609ce0e5228ee42 create mode 100644 fuzz/corpora/x509/b986b4efb5f09f77ca1328fc4f307feed5c97630 create mode 100644 fuzz/corpora/x509/b99ecdf2d38bb338f77e63deff9e4815d9f0b943 create mode 100644 fuzz/corpora/x509/b9a83680bb27e4fbd87320dfb6bb5a3a8e2b2f2a create mode 100644 fuzz/corpora/x509/b9fd13ad5fb973ffc71a7dad9e4184e9bb9d9f16 create mode 100644 fuzz/corpora/x509/ba2f0b65f01fa3ed5b66843a6839c6a3fd6ea6bc create mode 100644 fuzz/corpora/x509/ba5fdbce1bc3026aecae69d2a4f479b06fcd8fe1 create mode 100644 fuzz/corpora/x509/ba64e21aea8fcc70d270bac89ef21e16d41db1ee create mode 100644 fuzz/corpora/x509/ba70e67386e56414d85893ebf6db40e9127637d4 create mode 100644 fuzz/corpora/x509/ba9e3c974091cc39145eae3c393109c7ae9fdcef create mode 100644 fuzz/corpora/x509/baeeb5027d2f56cf99b9b0445de45d5daf876979 create mode 100644 fuzz/corpora/x509/baf4907849e500b748c1c1d9d8765de3b0886f7a create mode 100644 fuzz/corpora/x509/baf76f5d4ba6a69ede7351cabb95fd465675ec09 create mode 100644 fuzz/corpora/x509/bb09a2101f83bede36089b5e36974ad7f11b7553 create mode 100644 fuzz/corpora/x509/bb3eaefa532c6acccfef82c89500cbcbc86e1129 create mode 100644 fuzz/corpora/x509/bb61b707a58021e32ea83339eede94037c11bb3c create mode 100644 fuzz/corpora/x509/bb76c1309aaa188d233484abbae8900ea3193ec9 create mode 100644 fuzz/corpora/x509/bb80f73b26f82a75191fe9f6b21aefb19a6ce840 create mode 100644 fuzz/corpora/x509/bc00cdb43c45f9f25b968439554bf17f39584fe1 create mode 100644 fuzz/corpora/x509/bc09494155ec6730b41109b38d05eca77dbbaa81 create mode 100644 fuzz/corpora/x509/bc0f286f74600de786e5df7308fa45a98242f50a create mode 100644 fuzz/corpora/x509/bc3168a9be28442ae6863277a3ca3a14f4fe26b5 create mode 100644 fuzz/corpora/x509/bc62b9b541a7fd0a6b687a31ca795ce5faaa5762 create mode 100644 fuzz/corpora/x509/bc66392f205a38a85d06b2c049ab56a870668c1f create mode 100644 fuzz/corpora/x509/bc8a51607e7f9a6b720562db22562d60c64ae0c1 create mode 100644 fuzz/corpora/x509/bd0450e84141007ad17cb5c3f8ead730ae85be95 create mode 100644 fuzz/corpora/x509/bd240e219ee04d39877827cbdb62557041d19585 create mode 100644 fuzz/corpora/x509/bd52817d4e59491f8fe668f3f6086871bec6eaf6 create mode 100644 fuzz/corpora/x509/bd5ed7ff1e313b8d601f79ac854ddfb32e3a7492 create mode 100644 fuzz/corpora/x509/bd70a4a5ee3653436b704b6fa68c639008ca8856 create mode 100644 fuzz/corpora/x509/bd7485271b71304b8ab46ffb852d7600a1a10694 create mode 100644 fuzz/corpora/x509/bdc63daa44f23e16374f5a3c34c017b8de83ea5d create mode 100644 fuzz/corpora/x509/bde91802e3a12d7e18bc81d3fec561e3efd34e56 create mode 100644 fuzz/corpora/x509/be1a7f809a1c610bbef94690d3d52b29aba91be3 create mode 100644 fuzz/corpora/x509/be233143edb3b0688266d3244255fd3f7fe1568f create mode 100644 fuzz/corpora/x509/be2fc9cf168d45e253db03c904b48d28c0fb2508 create mode 100644 fuzz/corpora/x509/be470bebec2d9cf2b6fa1feddf998c8b789c3644 create mode 100644 fuzz/corpora/x509/be55f1fb868186f26296af368ebe120f6a0ba589 create mode 100644 fuzz/corpora/x509/be5d26d677bf27bbcaa8b33dd4acbd3dd9b178b2 create mode 100644 fuzz/corpora/x509/be851801ff046965b260b1d18cabc45cacfbdc96 create mode 100644 fuzz/corpora/x509/be946c31746e25d8661d6d818a7f5854fd65dada create mode 100644 fuzz/corpora/x509/be95a4b325a8f772ce969041a983358c14dcfdd8 create mode 100644 fuzz/corpora/x509/beb485622b00b8b1e5288007cd0b3bcd99fe4b07 create mode 100644 fuzz/corpora/x509/bec85210db062c230be9fc2166b44e45266ceff2 create mode 100644 fuzz/corpora/x509/bed1df80cee9de372fb3e8b318fcaba0d4ad1c0b create mode 100644 fuzz/corpora/x509/bf2482c3994aa9bef158b7b158694a342a0aacf3 create mode 100644 fuzz/corpora/x509/bf539243346c6cf91eb8275391f3898556c70414 create mode 100644 fuzz/corpora/x509/bf5eaf1402d9db01ddc775b8d47a15ffd2fdaf4c create mode 100644 fuzz/corpora/x509/bf8a3e8284a2bf92a111a0b8cd21ebdcb318bbdb create mode 100644 fuzz/corpora/x509/bfa004e94dfab73fd9bbf2c9be4e0eebc633e153 create mode 100644 fuzz/corpora/x509/bfbed88b8fb76c84364885ea9c01af6d62e9c11f create mode 100644 fuzz/corpora/x509/bfe5fbc32d35119d22f8370d06baef98f4763b85 create mode 100644 fuzz/corpora/x509/bfeea7e7199e935e783a4e98b71ed8c6e203df17 create mode 100644 fuzz/corpora/x509/bffd46b6747dc78e6db02620e39f73d501de558c create mode 100644 fuzz/corpora/x509/bffec02c9ca671497c8675b3d1c4b1c487bca891 create mode 100644 fuzz/corpora/x509/c040020e7e03e7ed93db662bbcf8482720971af8 create mode 100644 fuzz/corpora/x509/c0613801dc6accf1a7730fc9860c9ad5f7b23e77 create mode 100644 fuzz/corpora/x509/c085c8462d9cf260fca36856b3bae09e28f6d2aa create mode 100644 fuzz/corpora/x509/c089746db69c2e9b7dde16afa1b5be17d31f8411 create mode 100644 fuzz/corpora/x509/c09d87ebc55bf6b4fa1e1fbcada7b443d820f105 create mode 100644 fuzz/corpora/x509/c0a729df29cf830288d0280115ec0d48d2a8e85d create mode 100644 fuzz/corpora/x509/c0cb64e7406f697972417cbc2b90f9318efd6470 create mode 100644 fuzz/corpora/x509/c0ccae70253577beddeb5d66d3bf8fc43dce64cf create mode 100644 fuzz/corpora/x509/c0d95a4541ce290f4187ba4305999ff9699e32cd create mode 100644 fuzz/corpora/x509/c110fb7f02a2f5352fd2cfc838740c34c97a8376 create mode 100644 fuzz/corpora/x509/c14b787ac214c866829eb8e82e4cd4a4c2ede4ca create mode 100644 fuzz/corpora/x509/c14dc43383f167a0604a5a3e1f9e91593a6cecce create mode 100644 fuzz/corpora/x509/c18f967c134742f9cd2e77473f72257602aeed5c create mode 100644 fuzz/corpora/x509/c19a2ece62ebd1c0e4479f3e7c107e54c9eb03b9 create mode 100644 fuzz/corpora/x509/c1ae0354c3f71e6fd52b4200633eed028f3cfa3a create mode 100644 fuzz/corpora/x509/c208bad79de1b615ee46563ee04dc8df7bba4905 create mode 100644 fuzz/corpora/x509/c26e1372cdd097b4495a9174d3afd8a44c39492b create mode 100644 fuzz/corpora/x509/c28aa176f216bb349f771ee160a03fc8da9b38b5 create mode 100644 fuzz/corpora/x509/c2a08a5eb3df7a8b46ee691547671b6ca62f0fe1 create mode 100644 fuzz/corpora/x509/c2ccad1c58f1da488745efdd24d72437c8cc19dd create mode 100644 fuzz/corpora/x509/c2cd4c94720f9e743a37455191ac82702a5b09fa create mode 100644 fuzz/corpora/x509/c2d936b5aab4bbe95ccdcd3afc5158a477ba43ae create mode 100644 fuzz/corpora/x509/c2e9c9a6d4bd98298e20b4f1e4a619e8ed8c93ad create mode 100644 fuzz/corpora/x509/c2f4f1f7f4cebbd7c8d6f1b650e20372266841f0 create mode 100644 fuzz/corpora/x509/c301c75107d09070115cc1f65f62f06e97081486 create mode 100644 fuzz/corpora/x509/c34de67c32847273fbbd8fa00955cb970772dc11 create mode 100644 fuzz/corpora/x509/c3622f35ce3c2556e365602a2613bdae1dcf9f11 create mode 100644 fuzz/corpora/x509/c393defd22118c3cd733065867b3298fbfbcc704 create mode 100644 fuzz/corpora/x509/c3adebb15dbccf28359dd24c3f1b4b14235ad964 create mode 100644 fuzz/corpora/x509/c3d6efdf327c7c8b90cde5caab1486ae8a762f31 create mode 100644 fuzz/corpora/x509/c445808d011199fba42a2dccfca217ee20c4d2a7 create mode 100644 fuzz/corpora/x509/c47f7e2e41a94282a405520bff71b21c17fd6532 create mode 100644 fuzz/corpora/x509/c48a891cb4f22704394f3761a3643324c0a09274 create mode 100644 fuzz/corpora/x509/c4d3aa801f9a5afc13824852cb2b99050bf5d3bc create mode 100644 fuzz/corpora/x509/c4f5bad1c8aae182c158e7a4784fb8beca6abd1a create mode 100644 fuzz/corpora/x509/c53546ee7deea0a15b8e270ac1f910dbbe145ce5 create mode 100644 fuzz/corpora/x509/c5400f184a615566314bb604ec29ee49139c811b create mode 100644 fuzz/corpora/x509/c5411c11a8c3a6afae6dc97071934f597fa61ca2 create mode 100644 fuzz/corpora/x509/c586c3ef4f346e91c0b30f3fd41604f364a83d59 create mode 100644 fuzz/corpora/x509/c5894b7e45127829d78fe257569ab1ea4b06e489 create mode 100644 fuzz/corpora/x509/c5cbd11555607fb98ba591be1e117f544dca5eac create mode 100644 fuzz/corpora/x509/c5cd384f7927f2be4ccdad20a41ad889b3b72eb2 create mode 100644 fuzz/corpora/x509/c5e0dbb839b5c39c740ac97b3d812389e0368aef create mode 100644 fuzz/corpora/x509/c5ff7482f5ccde1a1bbf0b52a92e884b2ae37067 create mode 100644 fuzz/corpora/x509/c613de65e5c11e6715e1d0229fda87f49bf1c427 create mode 100644 fuzz/corpora/x509/c631d57065bf76fc53c202dde361bf0dc93c80bf create mode 100644 fuzz/corpora/x509/c674c1a87ba97e4cf9522cff8907be4e9b0e9ac4 create mode 100644 fuzz/corpora/x509/c695d8dbae2e086520de349c53c99589647f17ab create mode 100644 fuzz/corpora/x509/c6a62168d19e44cfb391cd4c070b0f20ad2554b2 create mode 100644 fuzz/corpora/x509/c6e9f2f62ce4d03f027e494a5e38163623ba3f6c create mode 100644 fuzz/corpora/x509/c70a08d8d03bf6b4769c91103488edc93613511c create mode 100644 fuzz/corpora/x509/c74cb839bb574bd3d0bb977335c6d8d88211101b create mode 100644 fuzz/corpora/x509/c75504388cf6fab861b7cdfbb83279394c987106 create mode 100644 fuzz/corpora/x509/c79f835b5a87a4fdfecaecfb4317f03a5efb8499 create mode 100644 fuzz/corpora/x509/c79f98bd8b9f1dc010c7c01d48652c5538c9a77b create mode 100644 fuzz/corpora/x509/c7a0fc949bcef7ea5b50c581ec4863aebf181e8e create mode 100644 fuzz/corpora/x509/c7c66334680f90d511ea3385ced7d070744742b6 create mode 100644 fuzz/corpora/x509/c836a1094f95527ab48894b30b93bcb409f31c81 create mode 100644 fuzz/corpora/x509/c83b2d48b56cfadd23ffc0adcbcd723a01c69201 create mode 100644 fuzz/corpora/x509/c859eb4f280728d5a56f730285b7cbaf4ca07749 create mode 100644 fuzz/corpora/x509/c86fe60112fb4d97d30033e2625b7cc5ae36598e create mode 100644 fuzz/corpora/x509/c8b1be341f845536faaebf9947a55428622cb337 create mode 100644 fuzz/corpora/x509/c8bbdc5a30ac22b62214e6c4215e09e1671e6592 create mode 100644 fuzz/corpora/x509/c920e1cabafecdec60b94f291c976905b28778a9 create mode 100644 fuzz/corpora/x509/c93061a8306f36ba77becd405fc665f995585b6b create mode 100644 fuzz/corpora/x509/c935332a10d9eae817957b17df2e90fd39cad324 create mode 100644 fuzz/corpora/x509/c93a4415cfc384a4e54425ed7629d132a9cbeaef create mode 100644 fuzz/corpora/x509/c956a57c264f94a84b043b4a7c418af30d7fa320 create mode 100644 fuzz/corpora/x509/c9bdc60badc8964df7c1ad965e0c3be923d15004 create mode 100644 fuzz/corpora/x509/c9c7330d002fcf76c8823f9791242c1d018ce7d9 create mode 100644 fuzz/corpora/x509/ca80f1053e114d1c1bac568734c5d736fb47d58c create mode 100644 fuzz/corpora/x509/caa0a8b0830f81459393b89ae0c07012789d330d create mode 100644 fuzz/corpora/x509/caa55908f8f973f987ce9a91f7a26bf384a257e4 create mode 100644 fuzz/corpora/x509/cab4a407e533ebbf5fc194bef93a0e0ca1a898a3 create mode 100644 fuzz/corpora/x509/caea3bea0fc80b30c0a6b449e4e205cc8bf28f20 create mode 100644 fuzz/corpora/x509/cb0c61f009223ff660b702d7fe2a72d2c70d67e8 create mode 100644 fuzz/corpora/x509/cb583f4f0902a26a6f53e95f1a511f8642eeb0d3 create mode 100644 fuzz/corpora/x509/cb821b01fb7c4723ed0d6c86462a8ad42a7ff402 create mode 100644 fuzz/corpora/x509/cba275dc8965ce4c778ab0e4a3d006afc446b7e9 create mode 100644 fuzz/corpora/x509/cbea3bf2f3432acd4887dfa84d39f562975618e3 create mode 100644 fuzz/corpora/x509/cc02bb6b8b52e7990ccce81b6e6c03cae51e5c5b create mode 100644 fuzz/corpora/x509/cc2fc46f307808ab5e33f974358a5e4ee1ceeb7f create mode 100644 fuzz/corpora/x509/cc346599e2c62dcb5b69f64f0635b8359b96b9d4 create mode 100644 fuzz/corpora/x509/cc51cd681b3c2957a95c9d61f7645023dc8778a8 create mode 100644 fuzz/corpora/x509/cc72e079c650406ea299bb21a607221da4d08d76 create mode 100644 fuzz/corpora/x509/cd456928a7a15f8f6cabbab791ca24504ffe7dae create mode 100644 fuzz/corpora/x509/cd788ca825474404c2a23603435fcfcc4c9a7a00 create mode 100644 fuzz/corpora/x509/cdaacb5e69f0449a2c56a5878807096b27ff264c create mode 100644 fuzz/corpora/x509/cdc50883f2132d6af661235fe15790815d6a4a7d create mode 100644 fuzz/corpora/x509/cdcb7cef05784193bae24f713d8f190ae3ab61c4 create mode 100644 fuzz/corpora/x509/cdea23e12030bfad6c546e40874110539f2fca35 create mode 100644 fuzz/corpora/x509/cdf8f3a46d8daee7c3d3a45e1b7a08d5eb487c47 create mode 100644 fuzz/corpora/x509/ce0228797c782bf49e740304f64c000519f66256 create mode 100644 fuzz/corpora/x509/ceeb6bfb2816467b8aa8ff0bdd716ac0fd66738d create mode 100644 fuzz/corpora/x509/cf1591fa50717a9f34ad709377150bd4b4b258eb create mode 100644 fuzz/corpora/x509/cf16755c13167d90455a44ceb68152b39ed7ad82 create mode 100644 fuzz/corpora/x509/cf2f9fc25017e9039bea985c3d43864630fc21be create mode 100644 fuzz/corpora/x509/cf5e31b460e0d41910d22abe713f483c1e8124a3 create mode 100644 fuzz/corpora/x509/cf78e4db8ca900846dc5360f98ba07be51ba1f26 create mode 100644 fuzz/corpora/x509/cfccbca78ec5a2cf130de378894cba0423a5e86f create mode 100644 fuzz/corpora/x509/d0160fac06480822796797f387271ed582efcbcf create mode 100644 fuzz/corpora/x509/d01ddf5cb2d2b0f6d01de3ca77d6d10b1505d7e1 create mode 100644 fuzz/corpora/x509/d0418c4dd8d702d2af1dd0e8a0e8079d13bae976 create mode 100644 fuzz/corpora/x509/d04cde2115d499fd9bf8e02c1cef92bb5fcfe079 create mode 100644 fuzz/corpora/x509/d05cc6c8e8aa0c19c6aa52218c4bd648a74b3753 create mode 100644 fuzz/corpora/x509/d068e6396012990e8145d81061920d6c4ab53657 create mode 100644 fuzz/corpora/x509/d08eb103a8bef1740c41f1f273c4225672d71880 create mode 100644 fuzz/corpora/x509/d09a34c5eaafe4500e91df28796edf19c2bcf240 create mode 100644 fuzz/corpora/x509/d0c58844ac08740cf83d5908ed001031cfd23e6a create mode 100644 fuzz/corpora/x509/d0ec75acdb7339726109448e380ff12e5afdbd22 create mode 100644 fuzz/corpora/x509/d0edaeac423dae22e0c6fa47d27de63da76e11c2 create mode 100644 fuzz/corpora/x509/d11101e007435381d7150cf5a094d1bc9fcb8b4b create mode 100644 fuzz/corpora/x509/d138385c4a97582b8c14354771c866384f6509ca create mode 100644 fuzz/corpora/x509/d14ee6ebc9dc994f33efee0746be5e036e091891 create mode 100644 fuzz/corpora/x509/d15bbf769835e5afe48e443e0223140aa8b80d70 create mode 100644 fuzz/corpora/x509/d1603a38df74d8d9375ba254128d85339e4040ef create mode 100644 fuzz/corpora/x509/d17b2718aeb18bd22a704b41931dc1b0cfdf6f7f create mode 100644 fuzz/corpora/x509/d188cb4474ebfb6f8c8beeaf4555632fb7f37f00 create mode 100644 fuzz/corpora/x509/d18c65b463fbd958e8d4773414eb07e3cffd1b72 create mode 100644 fuzz/corpora/x509/d18e10341bb4487f3db92f64d2529afdcceed686 create mode 100644 fuzz/corpora/x509/d1a8e5dcb0aa25923ad931aebba2c586be439f77 create mode 100644 fuzz/corpora/x509/d1ca3b53ffcd7f674e4d1db9eec0dae138af9eb1 create mode 100644 fuzz/corpora/x509/d20a0877ee8fc6467e286514b5f664cb7989f3d6 create mode 100644 fuzz/corpora/x509/d211939dad2567292ae6b35a1338ef8621ac6009 create mode 100644 fuzz/corpora/x509/d21a8ad79183061be4ef36853b32b98524ec102c create mode 100644 fuzz/corpora/x509/d228c912e2158c7111def143edf121a71a232518 create mode 100644 fuzz/corpora/x509/d24a9b0ec383c591302869f379bc2bc3e9047b91 create mode 100644 fuzz/corpora/x509/d26270f65c88f36b8797c703e275cdd8a55c2be7 create mode 100644 fuzz/corpora/x509/d26cf4c31166242fba310e9c12051b95b35657f0 create mode 100644 fuzz/corpora/x509/d275963cce7abd1b306272bbfdd98a0897c596ff create mode 100644 fuzz/corpora/x509/d27d0e240e9498bb93a515fd6e38030fb5a6fde9 create mode 100644 fuzz/corpora/x509/d2990a949c904e378517fde69640a4729e9983a0 create mode 100644 fuzz/corpora/x509/d2b18e067bdccf31a1fc155597a9ac945b4ff7a1 create mode 100644 fuzz/corpora/x509/d2e37ae311fcb609f9e56e00177ac1f9483c0883 create mode 100644 fuzz/corpora/x509/d305f984afc8296871a4e808a4a8d43b7220fcd3 create mode 100644 fuzz/corpora/x509/d3d0441653ec326f47898764081722fc0eab7408 create mode 100644 fuzz/corpora/x509/d3d3aea59be94d01b18dbd609da97d14253a172a create mode 100644 fuzz/corpora/x509/d3eff2f87311ba7732df410b356a9fa7e1ac020b create mode 100644 fuzz/corpora/x509/d408faf00b183c6a91ae1eebf8be6cfb7e868852 create mode 100644 fuzz/corpora/x509/d40d2e0a06f7d538c1025f947142fa92941395d0 create mode 100644 fuzz/corpora/x509/d461af8cad7e56c879eeba5ecf6f2f34f910ce63 create mode 100644 fuzz/corpora/x509/d4654add22a170855b090f4007c2ea41be21fbf8 create mode 100644 fuzz/corpora/x509/d46d1c5be3e3c3136e4b3dee8b7aff4c153ec0ca create mode 100644 fuzz/corpora/x509/d4b314a8baafdc61a676a4eecd32031d5d1b641c create mode 100644 fuzz/corpora/x509/d4c717355627cbee34144ed58f108b150bf3a2e2 create mode 100644 fuzz/corpora/x509/d4ce9aae50f1fb1eb3d5cd465f31f9e4dfc55a80 create mode 100644 fuzz/corpora/x509/d4cf0a4273460ae24b06ab32d91f3b26bd855343 create mode 100644 fuzz/corpora/x509/d50a6097c85be0c38238c610ccf3ed1688bda395 create mode 100644 fuzz/corpora/x509/d57b227428426905c34e4672c46cfda899d361ac create mode 100644 fuzz/corpora/x509/d5a1255ce6a0cae3ab979e1780df58340e8828a0 create mode 100644 fuzz/corpora/x509/d5c657a17413a4ecc6334f4ff25d5aae7ad30957 create mode 100644 fuzz/corpora/x509/d5d83c1b4377ad39e7f14fd8ee7439efebda8a38 create mode 100644 fuzz/corpora/x509/d5ed6e377b075032c4fceb469f6b6ffb0011c0c4 create mode 100644 fuzz/corpora/x509/d6180b617125e273696e24ca62d638da71f195c6 create mode 100644 fuzz/corpora/x509/d6781365552c599b05319e287d875d5352814bdc create mode 100644 fuzz/corpora/x509/d68c0490e877247d75363b50043c73dd44d5f8a1 create mode 100644 fuzz/corpora/x509/d6945a91efa06e178c8994567688d03f7e0fe93d create mode 100644 fuzz/corpora/x509/d698d435d72839762d845670b66297b40f772865 create mode 100644 fuzz/corpora/x509/d6cc4eb420fddd5446fa0f7542929014d9509acc create mode 100644 fuzz/corpora/x509/d7190fc735cea3bbe095656a55db13d92484755f create mode 100644 fuzz/corpora/x509/d71cf481f6853a4e49fd49e2cb804daba0be0de8 create mode 100644 fuzz/corpora/x509/d71eba23161fea2aeb594ec0968484df06378cdd create mode 100644 fuzz/corpora/x509/d781bcd7cd9b5570079aec4ca5db42ad9212b93e create mode 100644 fuzz/corpora/x509/d79c54a941705823101dcb4d208add097d0516e7 create mode 100644 fuzz/corpora/x509/d7b013aa42fefe6c6b51a41a32d89db180857b58 create mode 100644 fuzz/corpora/x509/d7e5ba7fff1fde39c4a1d5fec1f78f8bbcb66666 create mode 100644 fuzz/corpora/x509/d7f0fc3ac2b164008c8969f6881cc1e69fdf97ca create mode 100644 fuzz/corpora/x509/d805c36e4fff02066edb91bc7e570d7d9262c69e create mode 100644 fuzz/corpora/x509/d8c989aba0f45b8e2610f5c4bad1cb61cf25f465 create mode 100644 fuzz/corpora/x509/d8d5c3928fedd81a2c7bc89006856b14c3b54447 create mode 100644 fuzz/corpora/x509/d8ec4464ba6f63fe4f6666349a6a15e55bdf11f3 create mode 100644 fuzz/corpora/x509/d8f51c8474d34d04566d108d607b5efafb2648d5 create mode 100644 fuzz/corpora/x509/d9371622ac9eb9cdf7aa5e831d363b6164fdce7e create mode 100644 fuzz/corpora/x509/d960da072311d8b66b7b2c6b4988f079a78ac4b7 create mode 100644 fuzz/corpora/x509/d97e44cba4b98ec86628da64d13fd746f41823ba create mode 100644 fuzz/corpora/x509/d9ae8b0f1a1c1656076abc86cdac024ea4487b52 create mode 100644 fuzz/corpora/x509/d9b91257ea03cddbd9a572b7aabe7f80f93d81c2 create mode 100644 fuzz/corpora/x509/d9eda4c148afa43f6f93dd222960b110a1608707 create mode 100644 fuzz/corpora/x509/da041bb3db3435e498fe40d4d322661e3c121a58 create mode 100644 fuzz/corpora/x509/da1162d416280327cfa6fc3c9bf39f0543cc1505 create mode 100644 fuzz/corpora/x509/da1b76e4081ffb340e7146cdba8e6a6fea45705b create mode 100644 fuzz/corpora/x509/da417829dbe2ca5bdee30ccea654cdd92486ec14 create mode 100644 fuzz/corpora/x509/da5f56ef13c722916b5c2ff8190afd4726c8d20d create mode 100644 fuzz/corpora/x509/da7a3c7e64a101bb271b43d32df51b00624893da create mode 100644 fuzz/corpora/x509/dade5e291893aace89026e0a2bb80d1656cbb182 create mode 100644 fuzz/corpora/x509/db36c872ce0e072cfd25e974ae5a51a30b47dda7 create mode 100644 fuzz/corpora/x509/db68fd3f8d92535b766d4446c2253a8f8389409a create mode 100644 fuzz/corpora/x509/db7527c46d2d97ea00cbee890cb39b00348992f9 create mode 100644 fuzz/corpora/x509/db7e92e737364128ed6d4ea71b4b9dc5ed34063c create mode 100644 fuzz/corpora/x509/dbacbd58bcc1ab9587a2933f58c4070da327afdb create mode 100644 fuzz/corpora/x509/dbdd04b97c7eca13df568f45431e22f0bf5506be create mode 100644 fuzz/corpora/x509/dc15c304ef63ba400d6c52661334da0e79e5eb97 create mode 100644 fuzz/corpora/x509/dc1ad44817b74a46c79a5bd9f4e1f6b3d2f76a5f create mode 100644 fuzz/corpora/x509/dc2fefc1639efbdd5ca75ec3171abd4c5d169024 create mode 100644 fuzz/corpora/x509/dc682d9ebbda6e3eae29f012d4e4c3c421533efd create mode 100644 fuzz/corpora/x509/dc69d71f572600cae157b4a6614f42f0c695827d create mode 100644 fuzz/corpora/x509/dc6db6cbe8f8c8b0fc3af7d23b56401dfbbcfded create mode 100644 fuzz/corpora/x509/dc837f3d8b125c6dc1b716d20a7ce19032052fb4 create mode 100644 fuzz/corpora/x509/dc908ee2eccb5e54f69ff1ce61dda04b2604fdba create mode 100644 fuzz/corpora/x509/dc966c8130eccb6847a974ffb7d26daaae4fd6b6 create mode 100644 fuzz/corpora/x509/dccf0b2a5a1b0e7c6b664ac1b38fde563509f95c create mode 100644 fuzz/corpora/x509/dd1fb938b3ad11716e57894f5f2c341fdf882e82 create mode 100644 fuzz/corpora/x509/dd4ca17418a2a573aea84d9d3aad101dbc09211c create mode 100644 fuzz/corpora/x509/dd624397a50dca33bc01b1c15c3df016b7908547 create mode 100644 fuzz/corpora/x509/dd6eea36acb1996444db63776b5978be9c11c7e7 create mode 100644 fuzz/corpora/x509/dd8490f3703641f556326dd2dff6b7e2cfb803a3 create mode 100644 fuzz/corpora/x509/dd9c843cf008f3e288a35e0c989f5241f1d82f0a create mode 100644 fuzz/corpora/x509/ddb02e7db35e1df44ab949b90577ee2810055f1c create mode 100644 fuzz/corpora/x509/ddc51c84bca0db8ca0cc7a34d35e386385f69f6c create mode 100644 fuzz/corpora/x509/ddcb304e041569e3ad0d905af7889e14ae23f653 create mode 100644 fuzz/corpora/x509/dde4a5605e4a938ae8d38e0e04da3d2e8709eb5b create mode 100644 fuzz/corpora/x509/ddf769c9c78d9f5d0470731fb20bfc1aa005be3f create mode 100644 fuzz/corpora/x509/de1050ad79c4a0bf047bad8e8c21b421fa11d583 create mode 100644 fuzz/corpora/x509/de54f2f13ebb9e7385d62932583cc9a99cc98f45 create mode 100644 fuzz/corpora/x509/de8387f580c5d51ab78c79d7ce9bf847ef165fae create mode 100644 fuzz/corpora/x509/de894c47ddb837db9dee4df751fb2e4c7d5d4a4a create mode 100644 fuzz/corpora/x509/de9dda6497bf114f57f96078effa486e6b398fd4 create mode 100644 fuzz/corpora/x509/dea819cb8be58143fdccf0d016aa271feef2e282 create mode 100644 fuzz/corpora/x509/debfa36c66a729509b706ddd79c39cb2da7fc78c create mode 100644 fuzz/corpora/x509/ded9124458fd25e075d4ba7033884990a7f949fa create mode 100644 fuzz/corpora/x509/dedce71ddfc94add8b6a771dcb86a7a75b1d0145 create mode 100644 fuzz/corpora/x509/dede0b1c8c614a117c95164a879139291966ddc7 create mode 100644 fuzz/corpora/x509/def7b9b5eee2f88bba9bb265a1c554cab1151166 create mode 100644 fuzz/corpora/x509/df0614c595eefc2cd8d2024620c06988e6f75890 create mode 100644 fuzz/corpora/x509/df686cce212986a141113b69364403e974edc5ce create mode 100644 fuzz/corpora/x509/df6e9f853b47bd64d838490f743fcd99c50e8ed3 create mode 100644 fuzz/corpora/x509/dfe52f400361419f40cb26b439d4dd6a9c480652 create mode 100644 fuzz/corpora/x509/e01e79c61fb0aa6177f97332e4cf56904fabeaf1 create mode 100644 fuzz/corpora/x509/e02762a8cba0803c2645b2d448747f091d7cb057 create mode 100644 fuzz/corpora/x509/e0297451c9347b7e2d82e17f42cdfe9fd8c3ca95 create mode 100644 fuzz/corpora/x509/e0938df8271e974b7995bc10611d9c4fea480a42 create mode 100644 fuzz/corpora/x509/e0c1d8a32cb152699a404bcb49f3a052dd59d024 create mode 100644 fuzz/corpora/x509/e0ea5dc5c76a140c6a22780be5c5906c71d7a70d create mode 100644 fuzz/corpora/x509/e1007f494952c7297fb25d48ce4aa5b8de303aaa create mode 100644 fuzz/corpora/x509/e112c6d78af405f0f65f0338411b91425e1a85f7 create mode 100644 fuzz/corpora/x509/e11c95d648c99e60a5d673baabbf9a3483b25fcd create mode 100644 fuzz/corpora/x509/e12f5701ba2eb07504cea8f2eaba9d5a50f75114 create mode 100644 fuzz/corpora/x509/e14022a3ee20979b93e846bbdd005c437a7f0aaa create mode 100644 fuzz/corpora/x509/e14a02006eff0e43dfdb55e36909c5879ba7940a create mode 100644 fuzz/corpora/x509/e1532e45398e6c7c0f1ade8dc785b1a45007499a create mode 100644 fuzz/corpora/x509/e15aa8d4ba440e84665af9ea0a6603ce063ffbd0 create mode 100644 fuzz/corpora/x509/e180a3d31c43db5ce2c0ed9ba1254f1786cbc717 create mode 100644 fuzz/corpora/x509/e21a7926ab09e0d427beda8cca2461a3650c71e9 create mode 100644 fuzz/corpora/x509/e226f1ca99c925e350b0f6cc057836c1e4942901 create mode 100644 fuzz/corpora/x509/e2392579d3d330188eee8957c3091cb1325c91b1 create mode 100644 fuzz/corpora/x509/e23d153fc85007e10d2119a42c59eeb3f5e3c3a0 create mode 100644 fuzz/corpora/x509/e23df03c2ed3b91e18a313f6e4a5ad89621cd83d create mode 100644 fuzz/corpora/x509/e2658176b4d37a2ab90da32a82ca6e254e61c01b create mode 100644 fuzz/corpora/x509/e27797e63fdfcbb8c816cac010c58a489dab858b create mode 100644 fuzz/corpora/x509/e29b779de04be6fb734ef1eac3907031e7df4dc8 create mode 100644 fuzz/corpora/x509/e2a6eb5d03038489ab81e4f947258bbda812703c create mode 100644 fuzz/corpora/x509/e2c31f7add43245d8dfe8a608db310625f843e26 create mode 100644 fuzz/corpora/x509/e2e2155109a0284745d0b9dafee9e78a92e52d41 create mode 100644 fuzz/corpora/x509/e2e7fa88c0c379f3e59163b05ecb70081f73682c create mode 100644 fuzz/corpora/x509/e33c00965f68e83324d0a74d1f5fa2310491d83a create mode 100644 fuzz/corpora/x509/e340f3cb15bae8656950a7988a43ded179c31c13 create mode 100644 fuzz/corpora/x509/e348356d6210c6bccccece30d1ddfdf889766167 create mode 100644 fuzz/corpora/x509/e3523dda699e8d40f5b0515dbc8ce6b1cc42eb75 create mode 100644 fuzz/corpora/x509/e38ac3424757e610391f9177bf98e0fe96385e29 create mode 100644 fuzz/corpora/x509/e3b4b8e9649737dec113dff66a147161beec9eef create mode 100644 fuzz/corpora/x509/e3d55927e1e6ea2ab30042675e9a03014b0a1f1c create mode 100644 fuzz/corpora/x509/e3f8a03651e68728571ec24de70ba0b4c29bf85f create mode 100644 fuzz/corpora/x509/e415cf8acb1fe9e1a552cb4d07986075633c459b create mode 100644 fuzz/corpora/x509/e436accca8f860cc103cbf06c87be471012a4e22 create mode 100644 fuzz/corpora/x509/e443d6cc98578b025549636b7810113a602597a4 create mode 100644 fuzz/corpora/x509/e44403acc41ff34ee1dc9f09b87846a29e93ca07 create mode 100644 fuzz/corpora/x509/e456e6e0ddca38bd65a3c229bd36dcc2d2f0cc90 create mode 100644 fuzz/corpora/x509/e45a6c7cbf38ffee08605de07bb8715797a5a4d1 create mode 100644 fuzz/corpora/x509/e4683b91c43b8c7c374af6c379263513c0fb14e0 create mode 100644 fuzz/corpora/x509/e4b6628fa56f029df489bc1af5d941d6d12110f3 create mode 100644 fuzz/corpora/x509/e4d327680c1970cb2b0d762aecf65af20f1be4ed create mode 100644 fuzz/corpora/x509/e4ee0945aa0344ea30fa6602b6aa1fe373463972 create mode 100644 fuzz/corpora/x509/e54f548b2232ff83cd1a80707caca43de80ffa77 create mode 100644 fuzz/corpora/x509/e5a7874e8a586dfbf3345cc99980781ae9ec001a create mode 100644 fuzz/corpora/x509/e5c49b81a37def36b573066742a99e8529531329 create mode 100644 fuzz/corpora/x509/e5dc886614397985b34a7df67cb6fb6d6f1e9b54 create mode 100644 fuzz/corpora/x509/e5e621c54968669ea597b224306be65ac775f20a create mode 100644 fuzz/corpora/x509/e5fb891d97128302ccfb4a476d00795396def34c create mode 100644 fuzz/corpora/x509/e60b2b833543c26054383031e7c2f3670687756e create mode 100644 fuzz/corpora/x509/e60ba97b85452b66e5853947abc52f6df1016984 create mode 100644 fuzz/corpora/x509/e640ba9148706c7f79fafa89ce92b216dc49e31c create mode 100644 fuzz/corpora/x509/e658832cd0ab54ef804c15ad15cbf8cb6d4a5b99 create mode 100644 fuzz/corpora/x509/e66ce481f61bb4987b6c21a727dc95fb2e981ab6 create mode 100644 fuzz/corpora/x509/e6aef83e1e5fbbcc9f3ecc7fb3fef1c5f526d760 create mode 100644 fuzz/corpora/x509/e6c8300822466ba05d72b98749c9a2bd7146832f create mode 100644 fuzz/corpora/x509/e6cec5e0c9305b5c928a2c2853110655403fd00e create mode 100644 fuzz/corpora/x509/e6ea585dcc06ab8fee62c1651844c8002cb8ac4f create mode 100644 fuzz/corpora/x509/e6efd16a429eaf42f03337a5d5c9321621c0c2da create mode 100644 fuzz/corpora/x509/e71523d7ce97ac545c22efdde520a527be325d61 create mode 100644 fuzz/corpora/x509/e71e0ff5c528f030c6b6b8b1bce03ea7bfaa2b1a create mode 100644 fuzz/corpora/x509/e7296e0d49aa70bb2aa686f152796214a42a6c48 create mode 100644 fuzz/corpora/x509/e76124e19c8caa7784d95f674aa4ce3b9ab0e587 create mode 100644 fuzz/corpora/x509/e7d44156dd542ac03777831416974e004591fed5 create mode 100644 fuzz/corpora/x509/e7d802d8b79c06d5116cf638cb9585c9b686bcba create mode 100644 fuzz/corpora/x509/e810b9e633738f9951b581a85912799ef3d06a03 create mode 100644 fuzz/corpora/x509/e81fec862ba3e6093257363fd5296f210fe94ae4 create mode 100644 fuzz/corpora/x509/e837d504fdbd948a03a4caf87a89fc3e4982a8a8 create mode 100644 fuzz/corpora/x509/e841fdc6c46a16da425017f3feb1c3952459b04f create mode 100644 fuzz/corpora/x509/e86cb9f346e70d58256ce7638311e9622b7e942e create mode 100644 fuzz/corpora/x509/e87b3d1d097b824a9b5d9fa46fd8a51910975b09 create mode 100644 fuzz/corpora/x509/e8ca7bae4d70a5e7d510a89c744099a347c645b4 create mode 100644 fuzz/corpora/x509/e8f76d9326f3fb45b4c9ac9aa503fb90cd0aca05 create mode 100644 fuzz/corpora/x509/e91637c22513d4377bc202d2b279008ae3ede58f create mode 100644 fuzz/corpora/x509/e923cb95928abb7c9c6684a3b4ee5d313c1170c2 create mode 100644 fuzz/corpora/x509/e92bd183fa66c3166425a5dcdf19d6d91c0b188b create mode 100644 fuzz/corpora/x509/e937bc11a10040616a32b5574dab9ae2328f6795 create mode 100644 fuzz/corpora/x509/e93ab314bc7500e43eafa0ce98ffca5e01f514d2 create mode 100644 fuzz/corpora/x509/e9517ac50d00219ff33f5dc4862e59dbb6d8eda1 create mode 100644 fuzz/corpora/x509/e97ef39d02f6d595d80c9055419d3bade4c95042 create mode 100644 fuzz/corpora/x509/e9ce7f5b46545366585b0fb63266311ee09d9bd2 create mode 100644 fuzz/corpora/x509/ea4b2d41cbb6293e716b117af0cebf3a84eb3d37 create mode 100644 fuzz/corpora/x509/ea63bd3a7b161b9c24c7157fca012ade54248748 create mode 100644 fuzz/corpora/x509/ea833ef8e9880858cf55b0c350e354c903b1fbdf create mode 100644 fuzz/corpora/x509/ea86a969661e263b082b3075df784b793e015ac3 create mode 100644 fuzz/corpora/x509/eaa8b4213046e2d93173afb0851a3d29d19f3e92 create mode 100644 fuzz/corpora/x509/eb2d510f8e96eee503b845f56b3d429fa0e98963 create mode 100644 fuzz/corpora/x509/eb6485a3fbbe2749a26c85617ae94db78a63eeb5 create mode 100644 fuzz/corpora/x509/ebb775b55594f2d182e84b7485b75f0df1405cc0 create mode 100644 fuzz/corpora/x509/ebd90d530158a1f31b024ae7fa67206fde402c08 create mode 100644 fuzz/corpora/x509/ebe7d1e889d9f0e618a47024cd7a74772ede30cc create mode 100644 fuzz/corpora/x509/ebf948ec57b5a37e76af242bb7d484168984b18f create mode 100644 fuzz/corpora/x509/ebf9f424098976ab979b2d071988dd06fbcfc415 create mode 100644 fuzz/corpora/x509/ebfda43891859c7fc1166b76539cfa9ab5d480e1 create mode 100644 fuzz/corpora/x509/ec009499990fecc1d93a61c2ba50f8e7cb527df0 create mode 100644 fuzz/corpora/x509/ec1c88ffebabad4f11b964031998d76bff0e0695 create mode 100644 fuzz/corpora/x509/ec2823992629ecafe1711a07b9839018bc19de07 create mode 100644 fuzz/corpora/x509/ec31a8415d30ae4036c03c10e7bc42aafeb75f64 create mode 100644 fuzz/corpora/x509/ec82431799e5d93fcc77932b0f2cc2964ff4364c create mode 100644 fuzz/corpora/x509/ec8ded9bbc58a3f520edfa7cba748df792fe85a0 create mode 100644 fuzz/corpora/x509/eccba956c4f93850b8e5d4df1ac10f357b812498 create mode 100644 fuzz/corpora/x509/eccbe67a5bc0166a26d994c1b4f0629d2e13e95c create mode 100644 fuzz/corpora/x509/ecd3738901429620d63f1918d068559277b1608a create mode 100644 fuzz/corpora/x509/ecda47642da87271037642115c0df00b8f21f2f4 create mode 100644 fuzz/corpora/x509/ecde7035398bacfebda1c4834f5bc4867455cd74 create mode 100644 fuzz/corpora/x509/ecf51399008b790e97c184b8110737038ca351ff create mode 100644 fuzz/corpora/x509/ed20dc69cba9636dba68dc7dac7edcc59523ff9f create mode 100644 fuzz/corpora/x509/ed45b7496357197f18dd913ddb440d4a1ff054fa create mode 100644 fuzz/corpora/x509/ed7179a5d27620f4e99876937c286fcc71fb8593 create mode 100644 fuzz/corpora/x509/ede9548dc757a73171ea3b362adf4cc84479d5f7 create mode 100644 fuzz/corpora/x509/eded96ee00f22479fa18b48d98f2ac007898a8f2 create mode 100644 fuzz/corpora/x509/edfbcffbd1b4b56797ce51152661789038b0cf74 create mode 100644 fuzz/corpora/x509/ee1d04e03f7a78fcdcb7d6dc191bcfc40e0e2b94 create mode 100644 fuzz/corpora/x509/ee3598ed6a6066e3cc05f3967e3379211cc5f1bf create mode 100644 fuzz/corpora/x509/ee463acb2f35dfac5292b6f9637470fed172f3ba create mode 100644 fuzz/corpora/x509/ee6f359e7f845848e6ab4101b2f1e7d34df5ea0f create mode 100644 fuzz/corpora/x509/ee94dfc8c75c020b3729087e58763a08c0b661be create mode 100644 fuzz/corpora/x509/eed05a55c822495b507ed25fee318360e19957bc create mode 100644 fuzz/corpora/x509/eee5e2cfc552f0f247ee25c82ccd1bad879a326e create mode 100644 fuzz/corpora/x509/eee970a99f48ca558d8ef89549a989883599d2c7 create mode 100644 fuzz/corpora/x509/eef497fef6f20634c1c398eadad594452f9a8efb create mode 100644 fuzz/corpora/x509/eef69028ada521287c4eed060a1239d077f554a0 create mode 100644 fuzz/corpora/x509/ef19649b051735a5a331711b7ac1642f378f8dee create mode 100644 fuzz/corpora/x509/ef1c5f651315b2b25227525ff861f8025f0f7199 create mode 100644 fuzz/corpora/x509/ef1d05db45fade9a3c5b505a47a47827cafe369e create mode 100644 fuzz/corpora/x509/ef561706cddd3adc14b1ab4e0a4dda46af4f904f create mode 100644 fuzz/corpora/x509/ef5f77cff55b884dd0a4b1c441f2973d69ea7744 create mode 100644 fuzz/corpora/x509/ef6aa1850f2a5fb03020cd6c05936687e660ebdb create mode 100644 fuzz/corpora/x509/ef786020c58a968f5f26a7d5b59b7189d484b0fa create mode 100644 fuzz/corpora/x509/ef7f05c61f40472a669f3741546f29c3690911c8 create mode 100644 fuzz/corpora/x509/efa429cc086a0935a0c9fe5a9544a91384e01481 create mode 100644 fuzz/corpora/x509/effad4e4391708a646831dccd67815a31b938859 create mode 100644 fuzz/corpora/x509/f042987a02f478ebf62ef23872b24b5c677df8fd create mode 100644 fuzz/corpora/x509/f0477538598b81323c565069639b16fd2f0e3ff2 create mode 100644 fuzz/corpora/x509/f0764517e8cc64978f54c0745f19c71ea0e70e00 create mode 100644 fuzz/corpora/x509/f0816479e310392379a0d6bea645c444a7867011 create mode 100644 fuzz/corpora/x509/f09cfeb5d2be927334a89623ecc6404bea6db20b create mode 100644 fuzz/corpora/x509/f0bcfd9a2f66b248f344143fba8d2238d94dda6e create mode 100644 fuzz/corpora/x509/f0c5d5d5f1b0188efbd9d9a19fd3709186deefea create mode 100644 fuzz/corpora/x509/f0ce34f2169249cecfa0ab15bb013cc69404209c create mode 100644 fuzz/corpora/x509/f0d2c8d7a57f5ae0924bf7c5a6261088dd1c8dc7 create mode 100644 fuzz/corpora/x509/f0f56fbd22f18cc0c32b261c513428b3c064f3fa create mode 100644 fuzz/corpora/x509/f10fd69d1d723d7c95a9dda525b4b6e6cf8a87ec create mode 100644 fuzz/corpora/x509/f11b8a191f96355b699dff1ce4bbff0bcc2ac106 create mode 100644 fuzz/corpora/x509/f135c6bcdb08c5b966414da3afe25994277a7c93 create mode 100644 fuzz/corpora/x509/f14cc98fb6a42c72e75a2b3f16945fd43a24afa2 create mode 100644 fuzz/corpora/x509/f15418bacf97c0690a739ad47e40831ea0a311a5 create mode 100644 fuzz/corpora/x509/f1656bbc195a3958e22ad8ff06fc086943f46de2 create mode 100644 fuzz/corpora/x509/f1a42cf819fe190ddc249ec19643225b8547627a create mode 100644 fuzz/corpora/x509/f1acb7b3ee650c6b2934df96b8c975618d1c7004 create mode 100644 fuzz/corpora/x509/f1b0ee14bb5ae2390376f518b00f6d49ce676b95 create mode 100644 fuzz/corpora/x509/f221a03a7598558703449c076eddb2a3adc669ce create mode 100644 fuzz/corpora/x509/f24aa93792cda1f940e5023fc0a07b6a80b68182 create mode 100644 fuzz/corpora/x509/f2598c16fb753508bdc8f798452a649f87ada15c create mode 100644 fuzz/corpora/x509/f28c7cedbbea551de6db6e5ba7fc56998413f855 create mode 100644 fuzz/corpora/x509/f2a972baa024ae2a1558724c762116d10421901d create mode 100644 fuzz/corpora/x509/f2b5bbbf23fac272a0ac0cbe67b160b884a43aed create mode 100644 fuzz/corpora/x509/f2d4d563d90b1e2ba89bad955ff3e344c3374dc1 create mode 100644 fuzz/corpora/x509/f2eadf86d550ccb487335bc290900ba61bdcb454 create mode 100644 fuzz/corpora/x509/f2f4a19ffb2456388778158a213aa2f33b351c5a create mode 100644 fuzz/corpora/x509/f3259591b6361d763f3a4afb99dba54e19129316 create mode 100644 fuzz/corpora/x509/f32c1030274c4af53ae406661ab686b916ad2c6f create mode 100644 fuzz/corpora/x509/f33d7e5d562029ea714f1cb8082a5fd1d32eea04 create mode 100644 fuzz/corpora/x509/f35c2963bb702bd60b04ca0fa1ef4567d7705a58 create mode 100644 fuzz/corpora/x509/f3b0bcae9478dfe639d8aa0e9f903670060e68a3 create mode 100644 fuzz/corpora/x509/f3dc47bfea3ed13aa78530a925520d9dfdab1027 create mode 100644 fuzz/corpora/x509/f3e1ea4ab6ce0411711e8ed64d0d66b2867cbf61 create mode 100644 fuzz/corpora/x509/f3f63061590475f923a6f7c36c4927482162f9c2 create mode 100644 fuzz/corpora/x509/f40eb7e3044db4c723d3c9d79503b535583e50de create mode 100644 fuzz/corpora/x509/f41b08a89d954a5b99f078736065873c9c36b8ef create mode 100644 fuzz/corpora/x509/f4213d49354d11aef2901149530576f03c8b2d61 create mode 100644 fuzz/corpora/x509/f422402637b590f06c5f866a97471006c6d61f41 create mode 100644 fuzz/corpora/x509/f4614c5480849e003dc906547fd97eed4ca26b11 create mode 100644 fuzz/corpora/x509/f4741081e47eb195a07b75e65fbafe53403b4f83 create mode 100644 fuzz/corpora/x509/f478c37198d60a5536118b53eab20962668a35d5 create mode 100644 fuzz/corpora/x509/f48595187fcab0102474f59c3b66c9b2f9f35a5e create mode 100644 fuzz/corpora/x509/f4b323f3fb99d03991ca521c229e85580f650a60 create mode 100644 fuzz/corpora/x509/f4f03cc4be8105bc0f10971d36f23cfdd22456b6 create mode 100644 fuzz/corpora/x509/f5165308bf24de8fb6008f71d5dae70d21fa1cff create mode 100644 fuzz/corpora/x509/f5b2b240fbf3a408ab37d6d9ad2dd51dc7c290d0 create mode 100644 fuzz/corpora/x509/f5b786072078b7da607bde48aaf21a8a073816fa create mode 100644 fuzz/corpora/x509/f5cfc31b9d8e2981bd81e737187fc6db8d4964ca create mode 100644 fuzz/corpora/x509/f5ea365217e9b31a4e7a961c83c26a78fdac8b21 create mode 100644 fuzz/corpora/x509/f628bbb46deb7f3a93f1dcc59d2b81ebff2687a0 create mode 100644 fuzz/corpora/x509/f62a665b9d52e55c8e97a24c9fe59a3cedceae37 create mode 100644 fuzz/corpora/x509/f64079daafd8cf77efe66adda58758bc5d95967f create mode 100644 fuzz/corpora/x509/f66bd4f0e8d8feeaa6166163947510d3cb04ca20 create mode 100644 fuzz/corpora/x509/f6a2c78d197ffd8b8e8ce53812031f2e79fb48dd create mode 100644 fuzz/corpora/x509/f6e515d5f145adb6e8aeedeb5b6692066d79f114 create mode 100644 fuzz/corpora/x509/f71937b6ed1217d7e6fa4c99b4aba5baa84795b7 create mode 100644 fuzz/corpora/x509/f75718b11cea7b5bbedb815761bf8c717dcdc5b2 create mode 100644 fuzz/corpora/x509/f759d004b43db028079b7074b89bb9b96957b802 create mode 100644 fuzz/corpora/x509/f75bbd72f11a452d781ac5a5b7adbf8e5df1530f create mode 100644 fuzz/corpora/x509/f75da24024b84680c67adc3ab69b40f17afb25ae create mode 100644 fuzz/corpora/x509/f79b4609de017f27867cf122e1d393e50702fdda create mode 100644 fuzz/corpora/x509/f7be9dd2cc9b1d6259b3e94545fa9614e09bc51a create mode 100644 fuzz/corpora/x509/f7f771dfb7a992c898ec334fb8bc516a2b1680ee create mode 100644 fuzz/corpora/x509/f821f718742535e2656ff868fa62f5287aaece17 create mode 100644 fuzz/corpora/x509/f8320f4239c4b034b1dd02aa404e8cbf9082282f create mode 100644 fuzz/corpora/x509/f8382271afcc33da411fa5b93178610decd35c0d create mode 100644 fuzz/corpora/x509/f8e11360ad4d7bb94bf98175ae66bcd56401b989 create mode 100644 fuzz/corpora/x509/f9559156e1f509e2840ad88877be99ff5ae57af4 create mode 100644 fuzz/corpora/x509/f97a18aa269a11d5d2a7aa6096b3bec6e41b7fe1 create mode 100644 fuzz/corpora/x509/f987f500bfbaa8e6a4da590af412eaaa2ae9208c create mode 100644 fuzz/corpora/x509/f9896279256047168866b39c7a175536e5367e23 create mode 100644 fuzz/corpora/x509/f9ed720d0107aa2e655b88a579250735030154e2 create mode 100644 fuzz/corpora/x509/f9f850e88225b28d53860ff3058daee381428bcb create mode 100644 fuzz/corpora/x509/fa34fef33cef0c56a00ffdcfb44d6eca96ce2a1e create mode 100644 fuzz/corpora/x509/fa3dac29c9cc6b4b6ef9c97f972c7112869175f4 create mode 100644 fuzz/corpora/x509/fa45aac8d1c17b6d5c8f068f0c7fd46b0ab77b83 create mode 100644 fuzz/corpora/x509/fa62267b860e4ac0e5b2c4d2a70914d35700d0c0 create mode 100644 fuzz/corpora/x509/fa8e09ef6de694da0911e9d028771114130551d2 create mode 100644 fuzz/corpora/x509/fabc53169bdede3e1679689f202db4449fcb3fae create mode 100644 fuzz/corpora/x509/fabe355c4a37e2bc3305418fdf507cf0e1508668 create mode 100644 fuzz/corpora/x509/fad03f6e65e3624545adbd4d9a9563b785307875 create mode 100644 fuzz/corpora/x509/fae3bd31efb4dd62bb3418813df258d26b0e3bf5 create mode 100644 fuzz/corpora/x509/fb182df5ae96bdf689754dd144d399fc970edfb3 create mode 100644 fuzz/corpora/x509/fb1bb2333ba2bcac011c4e325e015012095c55a4 create mode 100644 fuzz/corpora/x509/fb1f6dd7b35de7a954b25d05fedc8df518a206c9 create mode 100644 fuzz/corpora/x509/fb923c010e2b76d8098a8e99eccc5ae3855ca358 create mode 100644 fuzz/corpora/x509/fba9e797cbedcd7bc9b6f4a65831ab4132e8ca69 create mode 100644 fuzz/corpora/x509/fbd98019ad9147ee1dfb8654d0fbe2b861e8d067 create mode 100644 fuzz/corpora/x509/fbdb46f2e69d2d660e05aadcb19363cf6bbe60a6 create mode 100644 fuzz/corpora/x509/fbdce22195be4a287451657667ac538ceb24ca80 create mode 100644 fuzz/corpora/x509/fbdf515e11a1074093dc46a2ab3815fc24f7d4ff create mode 100644 fuzz/corpora/x509/fc2f96447a1192b77da1c6a954a80e7855532581 create mode 100644 fuzz/corpora/x509/fc380cd79ffb21099651ed1ba8a3f3e725457266 create mode 100644 fuzz/corpora/x509/fc3d96054ccc7a4caf8efa6751667f5089b3b40a create mode 100644 fuzz/corpora/x509/fc4a9e9aba09d284b1f4f43ea99ed68b3eaf2f67 create mode 100644 fuzz/corpora/x509/fca3cc2b5d49927aedd733464105c5cdda076d5e create mode 100644 fuzz/corpora/x509/fcbea5cd120e8042e45dbebcbcdda07012308308 create mode 100644 fuzz/corpora/x509/fcd25943fc44ce00a8e56c6371808c7d3fe04853 create mode 100644 fuzz/corpora/x509/fcff055e35d15e8eb317317d97a58edd646fb6c2 create mode 100644 fuzz/corpora/x509/fd0c2ec7c389248b36c3af6ef2f4d9ef41b81431 create mode 100644 fuzz/corpora/x509/fd1261b3c67c38694aae394bb0d19384ffa9de8b create mode 100644 fuzz/corpora/x509/fd1bcc4c3ad39689392b989a20f0e4a7a5038a13 create mode 100644 fuzz/corpora/x509/fd1e8d5c54acf78af2f3c390632f9b7d5749e57e create mode 100644 fuzz/corpora/x509/fd48d144afd0d087edba2b5e4821ad443582abe9 create mode 100644 fuzz/corpora/x509/fd7cb924d08921c730aa11bf2a289d5b62516753 create mode 100644 fuzz/corpora/x509/fd97ab445a88cdab6f0da14bbe0a2ec56c6c21e6 create mode 100644 fuzz/corpora/x509/fdb1942cc2e1bd56efdb32667520a215e2b36f3b create mode 100644 fuzz/corpora/x509/fdc4d308e17f8a504607a0391823ece65fff1624 create mode 100644 fuzz/corpora/x509/fdd464a31b0fdc92e44c144f1f9f2a4208650ab2 create mode 100644 fuzz/corpora/x509/fe356d7a4b875d5460386004a8a4daf2e1b415f8 create mode 100644 fuzz/corpora/x509/fe68343c3ab36095ab94d0cc2a018885a12d9bee create mode 100644 fuzz/corpora/x509/fe79f56bcd1a3ef79e86594ab3b55248d9c94e7d create mode 100644 fuzz/corpora/x509/feab2b8355977f0e9c4feb2e1d081dea7e6a7fb2 create mode 100644 fuzz/corpora/x509/febfc1b2b39c86b0d94b5312798d73ba12e7e8c8 create mode 100644 fuzz/corpora/x509/fed85e5a43ee7e461484ebc6bfbca249337f6647 create mode 100644 fuzz/corpora/x509/feed8321ce6e5aa5ac7d416349f530cbb8594035 create mode 100644 fuzz/corpora/x509/feeff1331656c0f780aea2d08997b27658407c47 create mode 100644 fuzz/corpora/x509/fef01f446bf42c1c474ffb84999ca80e5108a30a create mode 100644 fuzz/corpora/x509/ff0f084747cb12a18dbb8a154404d34a3720f684 create mode 100644 fuzz/corpora/x509/ff0f39eb802222164ebfb6d1020da6a50cf6cfc7 create mode 100644 fuzz/corpora/x509/ff203aa175317f269bdb01dd11169a6eeb9d334f create mode 100644 fuzz/corpora/x509/ff2a139251df84946489c0e41692c8eead5d36fd create mode 100644 fuzz/corpora/x509/ff46c1f59d740ea720f730bb0747e3d2045055c1 create mode 100644 fuzz/corpora/x509/ffa9dedbe06b3f22dbd8de6705aa7ace601cf26e create mode 100644 fuzz/corpora/x509/ffacc50fbadce2ef2bafbe96ff4a872648f20859 create mode 100644 fuzz/corpora/x509/ffb1a1faad778b26f6fad279002be86fef54419b create mode 100644 fuzz/corpora/x509/ffb77c06e17fe30d1e303939e29ddff10720a9e2 create mode 100644 fuzz/corpora/x509/ffe498879023415c207838470f2fd842cbe6ae6c create mode 100755 fuzz/mkfuzzoids.pl create mode 100644 fuzz/oids.txt create mode 100644 fuzz/rand.inc create mode 100644 include/internal/__DECC_INCLUDE_EPILOGUE.H create mode 100644 include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 include/internal/asn1t.h rename {crypto/include => include}/internal/cryptlib.h (76%) create mode 100644 include/internal/dsoerr.h create mode 100644 include/internal/nelem.h create mode 100644 include/internal/rand.h create mode 100644 include/internal/refcount.h create mode 100644 include/internal/sockets.h create mode 100644 include/openssl/asn1err.h create mode 100644 include/openssl/asyncerr.h create mode 100644 include/openssl/bioerr.h create mode 100644 include/openssl/bnerr.h create mode 100644 include/openssl/buffererr.h create mode 100644 include/openssl/cmserr.h create mode 100644 include/openssl/comperr.h create mode 100644 include/openssl/conferr.h create mode 100644 include/openssl/cryptoerr.h create mode 100644 include/openssl/cterr.h create mode 100644 include/openssl/dherr.h create mode 100644 include/openssl/dsaerr.h create mode 100644 include/openssl/ecerr.h create mode 100644 include/openssl/engineerr.h create mode 100644 include/openssl/evperr.h create mode 100644 include/openssl/kdferr.h create mode 100644 include/openssl/objectserr.h create mode 100644 include/openssl/ocsperr.h create mode 100644 include/openssl/pemerr.h create mode 100644 include/openssl/pkcs12err.h create mode 100644 include/openssl/pkcs7err.h create mode 100644 include/openssl/randerr.h create mode 100644 include/openssl/rsaerr.h create mode 100644 include/openssl/sslerr.h create mode 100644 include/openssl/store.h create mode 100644 include/openssl/storeerr.h create mode 100644 include/openssl/tserr.h create mode 100644 include/openssl/uierr.h create mode 100644 include/openssl/x509err.h create mode 100644 include/openssl/x509v3err.h delete mode 100755 ms/segrenam.pl delete mode 100644 ms/tlhelp32.h create mode 100644 ssl/packet.c create mode 100644 ssl/record/ssl3_record_tls13.c create mode 100644 ssl/ssl_cert_table.h create mode 100644 ssl/statem/extensions.c create mode 100644 ssl/statem/extensions_clnt.c create mode 100644 ssl/statem/extensions_cust.c create mode 100644 ssl/statem/extensions_srvr.c delete mode 100644 ssl/t1_ext.c delete mode 100644 ssl/t1_reneg.c create mode 100644 ssl/tls13_enc.c create mode 100644 test/README.external create mode 100644 test/asn1_encode_test.c create mode 100644 test/asn1_internal_test.c create mode 100644 test/asn1_string_table_test.c create mode 100644 test/asn1_time_test.c create mode 100755 test/bntests.pl create mode 100644 test/certs/client-ed25519-cert.pem create mode 100644 test/certs/client-ed25519-key.pem create mode 100644 test/certs/cyrillic.msb create mode 100644 test/certs/cyrillic.pem create mode 100644 test/certs/cyrillic.utf8 create mode 100644 test/certs/cyrillic_crl.pem create mode 100644 test/certs/cyrillic_crl.utf8 create mode 100644 test/certs/dhp2048.pem create mode 100644 test/certs/ee-ecdsa-client-chain.pem create mode 100644 test/certs/ee-ecdsa-key.pem create mode 100644 test/certs/ee-ed25519.pem create mode 100644 test/certs/ee-pss-sha1-cert.pem create mode 100644 test/certs/ee-pss-sha256-cert.pem create mode 100644 test/certs/p256-server-cert.pem create mode 100644 test/certs/p256-server-key.pem create mode 100644 test/certs/p384-root-key.pem create mode 100644 test/certs/p384-root.pem create mode 100644 test/certs/p384-server-cert.pem create mode 100644 test/certs/p384-server-key.pem create mode 100644 test/certs/root-ed25519.pem create mode 100644 test/certs/server-cecdsa-cert.pem create mode 100644 test/certs/server-cecdsa-key.pem create mode 100644 test/certs/server-dsa-cert.pem create mode 100644 test/certs/server-dsa-key.pem create mode 100644 test/certs/server-ecdsa-cert.pem create mode 100644 test/certs/server-ecdsa-key.pem create mode 100644 test/certs/server-ed25519-cert.pem create mode 100644 test/certs/server-ed25519-key.pem create mode 100644 test/certs/server-pss-cert.pem create mode 100644 test/certs/server-pss-key.pem create mode 100644 test/certs/x509-check-key.pem create mode 100644 test/certs/x509-check.csr create mode 100644 test/chacha_internal_test.c create mode 100644 test/cipher_overhead_test.c create mode 100644 test/cipherbytes_test.c create mode 100644 test/ciphername_test.c create mode 100644 test/ctype_internal_test.c create mode 100644 test/curve448_internal_test.c create mode 100644 test/drbgtest.c create mode 100644 test/drbgtest.h create mode 100644 test/dtls_mtu_test.c create mode 100644 test/ecstresstest.c create mode 100644 test/evp_test.h delete mode 100644 test/evptests.txt delete mode 100644 test/heartbeat_test.c create mode 100644 test/lhash_test.c delete mode 100644 test/md4test.c delete mode 100644 test/md5test.c create mode 100644 test/mdc2_internal_test.c delete mode 100644 test/methtest.c create mode 100644 test/modes_internal_test.c create mode 100644 test/ossl_shim/async_bio.cc create mode 100644 test/ossl_shim/async_bio.h create mode 100644 test/ossl_shim/build.info create mode 100644 test/ossl_shim/include/openssl/base.h create mode 100644 test/ossl_shim/ossl_config.json create mode 100644 test/ossl_shim/ossl_shim.cc create mode 100644 test/ossl_shim/packeted_bio.cc create mode 100644 test/ossl_shim/packeted_bio.h create mode 100644 test/ossl_shim/test_config.cc create mode 100644 test/ossl_shim/test_config.h delete mode 100644 test/p5_crpt2_test.c create mode 100644 test/pemtest.c create mode 100644 test/pkey_meth_kdf_test.c create mode 100644 test/pkey_meth_test.c create mode 100644 test/poly1305_internal_test.c delete mode 100644 test/r160test.c delete mode 100644 test/randtest.c create mode 100644 test/recipes/01-test_test.t create mode 100644 test/recipes/02-test_internal_ctype.t create mode 100644 test/recipes/02-test_lhash.t create mode 100644 test/recipes/02-test_stack.t create mode 100644 test/recipes/03-test_internal_asn1.t create mode 100644 test/recipes/03-test_internal_chacha.t create mode 100644 test/recipes/03-test_internal_curve448.t create mode 100644 test/recipes/03-test_internal_mdc2.t create mode 100644 test/recipes/03-test_internal_modes.t create mode 100644 test/recipes/03-test_internal_poly1305.t create mode 100644 test/recipes/03-test_internal_siphash.t create mode 100644 test/recipes/03-test_internal_sm4.t create mode 100644 test/recipes/03-test_internal_ssl_cert_table.t create mode 100644 test/recipes/03-test_internal_x509.t create mode 100644 test/recipes/04-test_asn1_encode.t create mode 100644 test/recipes/04-test_asn1_string_table.t rename test/recipes/{90-test_bioprint.t => 04-test_bioprint.t} (100%) delete mode 100644 test/recipes/05-test_md4.t delete mode 100644 test/recipes/05-test_md5.t delete mode 100644 test/recipes/05-test_rmd.t delete mode 100644 test/recipes/05-test_sha1.t delete mode 100644 test/recipes/05-test_sha256.t delete mode 100644 test/recipes/05-test_sha512.t delete mode 100644 test/recipes/05-test_wp.t create mode 100644 test/recipes/10-test_bn_data/bnexp.txt create mode 100644 test/recipes/10-test_bn_data/bnmod.txt create mode 100644 test/recipes/10-test_bn_data/bnmul.txt create mode 100644 test/recipes/10-test_bn_data/bnshift.txt create mode 100644 test/recipes/10-test_bn_data/bnsum.txt create mode 100644 test/recipes/15-test_ecparam.t create mode 100644 test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem create mode 100644 test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem create mode 100644 test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem create mode 100644 test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem create mode 100644 test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem create mode 100644 test/recipes/15-test_mp_rsa.t create mode 100644 test/recipes/15-test_mp_rsa_data/plain_text create mode 100644 test/recipes/20-test_enc_more.t create mode 100644 test/recipes/30-test_evp_data/evpciph.txt create mode 100644 test/recipes/30-test_evp_data/evpdigest.txt create mode 100644 test/recipes/30-test_evp_data/evpencod.txt create mode 100644 test/recipes/30-test_evp_data/evpkdf.txt create mode 100644 test/recipes/30-test_evp_data/evpmac.txt create mode 100644 test/recipes/30-test_evp_data/evppbe.txt create mode 100644 test/recipes/30-test_evp_data/evppkey.txt create mode 100644 test/recipes/30-test_pkey_meth.t create mode 100644 test/recipes/30-test_pkey_meth_kdf.t create mode 100644 test/recipes/60-test_x509_check_cert_pkey.t create mode 100644 test/recipes/60-test_x509_dup_cert.t create mode 100644 test/recipes/60-test_x509_time.t create mode 100644 test/recipes/70-test_comp.t create mode 100644 test/recipes/70-test_key_share.t create mode 100644 test/recipes/70-test_recordlen.t create mode 100644 test/recipes/70-test_renegotiation.t create mode 100644 test/recipes/70-test_servername.t create mode 100644 test/recipes/70-test_sslsigalgs.t create mode 100644 test/recipes/70-test_sslsignature.t create mode 100644 test/recipes/70-test_sslversions.t create mode 100644 test/recipes/70-test_tls13cookie.t create mode 100644 test/recipes/70-test_tls13downgrade.t create mode 100644 test/recipes/70-test_tls13hrr.t create mode 100644 test/recipes/70-test_tls13kexmodes.t create mode 100644 test/recipes/70-test_tls13messages.t create mode 100644 test/recipes/70-test_tls13psk.t create mode 100644 test/recipes/70-test_wpacket.t create mode 100644 test/recipes/80-test_cipherbytes.t create mode 100644 test/recipes/80-test_ciphername.t create mode 100644 test/recipes/80-test_dtls_mtu.t create mode 100644 test/recipes/90-test_asn1_time.t delete mode 100644 test/recipes/90-test_fuzz.t delete mode 100644 test/recipes/90-test_heartbeat.t create mode 100644 test/recipes/90-test_overhead.t delete mode 100644 test/recipes/90-test_p5_crpt2.t create mode 100644 test/recipes/90-test_sslbuffers.t create mode 100644 test/recipes/90-test_store.t create mode 100644 test/recipes/90-test_store_data/ca.cnf create mode 100644 test/recipes/90-test_store_data/user.cnf create mode 100644 test/recipes/90-test_time_offset.t create mode 100644 test/recipes/90-test_tls13ccs.t create mode 100644 test/recipes/90-test_tls13encryption.t create mode 100644 test/recipes/90-test_tls13secrets.t create mode 100644 test/recipes/95-test_external_boringssl.t create mode 100644 test/recipes/95-test_external_krb5.t create mode 100755 test/recipes/95-test_external_krb5_data/krb5.sh create mode 100644 test/recipes/95-test_external_pyca.t create mode 100755 test/recipes/95-test_external_pyca_data/cryptography.sh create mode 100644 test/recipes/99-test_ecstress.t create mode 100644 test/recipes/99-test_fuzz.t delete mode 100644 test/recipes/bc.pl create mode 100644 test/recipes/ocsp-response.der create mode 100644 test/recordlentest.c delete mode 100644 test/rmdtest.c create mode 100644 test/rsa_mp_test.c create mode 100644 test/serverinfo2.pem create mode 100644 test/servername_test.c create mode 100644 test/session.pem delete mode 100644 test/sha1test.c delete mode 100644 test/sha256t.c delete mode 100644 test/sha512t.c create mode 100644 test/siphash_internal_test.c create mode 100644 test/sm4_internal_test.c create mode 100644 test/ssl-tests/20-cert-select.conf create mode 100644 test/ssl-tests/20-cert-select.conf.in create mode 100644 test/ssl-tests/21-key-update.conf create mode 100644 test/ssl-tests/21-key-update.conf.in create mode 100644 test/ssl-tests/22-compression.conf create mode 100644 test/ssl-tests/22-compression.conf.in create mode 100644 test/ssl-tests/23-srp.conf create mode 100644 test/ssl-tests/23-srp.conf.in create mode 100644 test/ssl-tests/24-padding.conf create mode 100644 test/ssl-tests/24-padding.conf.in create mode 100644 test/ssl-tests/25-cipher.conf create mode 100644 test/ssl-tests/25-cipher.conf.in create mode 100644 test/ssl-tests/26-tls13_client_auth.conf create mode 100644 test/ssl-tests/26-tls13_client_auth.conf.in create mode 100644 test/ssl_cert_table_internal_test.c create mode 100644 test/sslbuffertest.c create mode 100644 test/stack_test.c create mode 100644 test/test_test.c delete mode 100644 test/testutil.c create mode 100644 test/testutil/basic_output.c create mode 100644 test/testutil/cb.c create mode 100644 test/testutil/driver.c create mode 100644 test/testutil/format_output.c create mode 100644 test/testutil/init.c create mode 100644 test/testutil/main.c create mode 100644 test/testutil/output.h create mode 100644 test/testutil/output_helpers.c create mode 100644 test/testutil/stanza.c create mode 100644 test/testutil/tap_bio.c create mode 100644 test/testutil/test_cleanup.c create mode 100644 test/testutil/tests.c create mode 100644 test/testutil/tu_local.h create mode 100644 test/time_offset_test.c create mode 100644 test/tls13ccstest.c create mode 100644 test/tls13encryptiontest.c create mode 100644 test/tls13secretstest.c create mode 100644 test/uitest.c delete mode 100644 test/wp_test.c create mode 100644 test/wpackettest.c create mode 100644 test/x509_check_cert_pkey_test.c create mode 100644 test/x509_dup_cert_test.c create mode 100644 test/x509_internal_test.c create mode 100644 test/x509_time_test.c delete mode 100755 util/find-undoc-api.pl delete mode 100644 util/fipslink.pl delete mode 100755 util/incore delete mode 100755 util/mkcerts.sh mode change 100644 => 100755 util/mkerr.pl create mode 100755 util/openssl-update-copyright create mode 100644 util/perl/TLSProxy/Certificate.pm create mode 100644 util/perl/TLSProxy/CertificateVerify.pm create mode 100644 util/perl/TLSProxy/EncryptedExtensions.pm create mode 100644 util/perl/checkhandshake.pm delete mode 100755 util/point.sh create mode 100644 util/private.num delete mode 100644 util/selftest.pl diff --git a/.gitignore b/.gitignore index 173d3bd6..7496b0e4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ /Makefile.orig /MINFO /TABLE -/*.a /*.pc /rehash.time /inc.* @@ -32,6 +31,13 @@ Makefile /openssl/include/opensslconf.h /util/domd +# error code files +/crypto/err/openssl.txt.old +/engines/e_afalg.txt.old +/engines/e_capi.txt.old +/engines/e_dasync.txt.old +/engines/e_ossltest.txt.old + # Executables /apps/openssl /test/sha256t @@ -51,6 +57,7 @@ Makefile /test/ssltest_old /test/x509aux /test/v3ext +/test/ossl_shim/ossl_shim # Certain files that get created by tests on the fly /test/test-runs @@ -73,8 +80,8 @@ Makefile /util/shlib_wrap.sh /tags /TAGS -/crypto.map -/ssl.map +/libcrypto.map +/libssl.map # Windows (legacy) /tmp32 @@ -143,7 +150,8 @@ Makefile # Certificate symbolic links *.0 -# All kinds of executables +# All kinds of libraries and executables +*.a *.so *.so.* *.dylib @@ -172,9 +180,4 @@ pod2htmd.tmp # Windows manifest files *.manifest - -# Ignore -*.orig -*.rej -*.patch - +doc-nits diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..af32ea61 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,11 @@ +[submodule "boringssl"] + path = boringssl + url = https://boringssl.googlesource.com/boringssl + +[submodule "pyca.cryptography"] + path = pyca-cryptography + url = https://github.com/pyca/cryptography.git + +[submodule "krb5"] + path = krb5 + url = https://github.com/krb5/krb5 diff --git a/.travis.yml b/.travis.yml index b5fc4431..0586fb3e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,65 +3,98 @@ sudo: required language: c cache: ccache +git: + submodules: false before_install: - if [ -n "$COVERALLS" ]; then pip install --user cpp-coveralls; fi; + - if expr "$CONFIG_OPTS" ":" ".*enable-external-tests" > /dev/null; then + git submodule update --init --recursive; + fi; addons: apt: packages: - ccache + - golang-1.6 os: - linux + - osx compiler: - clang - gcc env: - - CONFIG_OPTS="" DESTDIR="_install" - - CONFIG_OPTS="--debug no-shared enable-crypto-mdebug enable-rc5 enable-md2" - - CONFIG_OPTS="no-pic --strict-warnings" BUILDONLY="yes" - - CONFIG_OPTS="no-engine no-shared --strict-warnings" BUILDONLY="yes" - - CONFIG_OPTS="no-stdio --strict-warnings" BUILDONLY="yes" - - CONFIG_OPTS="no-ec" BUILDONLY="yes" + - CONFIG_OPTS="" DESTDIR="_install" TESTS="-test_fuzz" + - CONFIG_OPTS="no-asm -Werror --debug no-afalgeng no-shared enable-crypto-mdebug enable-rc5 enable-md2" TESTS="-test_fuzz" - CONFIG_OPTS="no-asm --strict-warnings" BUILDONLY="yes" CHECKDOCS="yes" matrix: include: + - os: linux + addons: + apt: + packages: + - gcc-5 + - g++-5 + sources: + - ubuntu-toolchain-r-test + compiler: gcc-5 + env: CONFIG_OPTS="--strict-warnings" TESTS="-test_fuzz" COMMENT="Move to the BORINGTEST build when interoperable" - os: linux compiler: clang-3.9 env: CONFIG_OPTS="--strict-warnings no-deprecated" BUILDONLY="yes" - os: linux - compiler: gcc - env: CONFIG_OPTS="--debug --coverage no-asm enable-rc5 enable-md2 enable-ec_nistp_64_gcc_128 enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers" COVERALLS="yes" - - os: linux - compiler: clang-3.9 - env: CONFIG_OPTS="enable-asan" - - os: linux - compiler: clang-3.9 - env: CONFIG_OPTS="enable-msan" - - os: linux - compiler: clang-3.9 - env: CONFIG_OPTS="no-asm enable-ubsan enable-rc5 enable-md2 enable-ssl3 enable-ssl3-method -fno-sanitize=alignment" - - os: linux - compiler: clang-3.9 - env: CONFIG_OPTS="no-asm enable-asan enable-rc5 enable-md2" - - os: linux - compiler: clang-3.9 - env: CONFIG_OPTS="no-stdio" + addons: + apt: + packages: + - binutils-mingw-w64 + - gcc-mingw-w64 + compiler: i686-w64-mingw32-gcc + env: CONFIG_OPTS="no-stdio" BUILDONLY="yes" - os: linux addons: apt: packages: - gcc-5 + - g++-5 sources: - ubuntu-toolchain-r-test compiler: gcc-5 - env: CONFIG_OPTS="no-asm enable-ubsan enable-rc5 enable-md2 -DPEDANTIC" + env: EXTENDED_TEST="yes" CONFIG_OPTS="--debug --coverage no-asm enable-rc5 enable-md2 enable-ec_nistp_64_gcc_128 enable-ssl3 enable-ssl3-method enable-nextprotoneg enable-weak-ssl-ciphers no-shared -DPEDANTIC -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" COVERALLS="yes" BORINGSSL_TESTS="yes" CXX="g++-5" + - os: linux + addons: + apt: + packages: + - gcc-5 + - g++-5 + sources: + - ubuntu-toolchain-r-test + compiler: gcc-5 + env: EXTENDED_TEST="yes" CONFIG_OPTS="--debug enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers enable-external-tests" BORINGSSL_TESTS="yes" CXX="g++-5" TESTS=95 + - os: linux + compiler: clang-3.9 + env: EXTENDED_TEST="yes" CONFIG_OPTS="enable-msan" + - os: linux + compiler: clang-3.9 + env: EXTENDED_TEST="yes" CONFIG_OPTS="no-asm enable-ubsan enable-rc5 enable-md2 enable-ssl3 enable-ssl3-method enable-nextprotoneg -fno-sanitize=alignment no-shared -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" + - os: linux + compiler: clang-3.9 + env: EXTENDED_TEST="yes" CONFIG_OPTS="no-asm enable-asan enable-rc5 enable-md2 no-shared -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" + - os: linux + addons: + apt: + packages: + - gcc-5 + - g++-5 + sources: + - ubuntu-toolchain-r-test + compiler: gcc-5 + env: EXTENDED_TEST="yes" CONFIG_OPTS="--debug no-asm enable-ubsan enable-rc5 enable-md2 -DPEDANTIC" OPENSSL_TEST_RAND_ORDER=0 - os: linux addons: apt: @@ -69,15 +102,7 @@ matrix: - binutils-mingw-w64 - gcc-mingw-w64 compiler: i686-w64-mingw32-gcc - env: CONFIG_OPTS="no-pic" TESTS="-test_fuzz" - - os: linux - addons: - apt: - packages: - - binutils-mingw-w64 - - gcc-mingw-w64 - compiler: i686-w64-mingw32-gcc - env: CONFIG_OPTS="no-stdio" BUILDONLY="yes" + env: EXTENDED_TEST="yes" CONFIG_OPTS="no-pic" TESTS="-test_fuzz" - os: linux addons: apt: @@ -85,15 +110,7 @@ matrix: - binutils-mingw-w64 - gcc-mingw-w64 compiler: x86_64-w64-mingw32-gcc - env: CONFIG_OPTS="no-pic" TESTS="-test_fuzz" - - os: linux - addons: - apt: - packages: - - binutils-mingw-w64 - - gcc-mingw-w64 - compiler: x86_64-w64-mingw32-gcc - env: CONFIG_OPTS="no-stdio" BUILDONLY="yes" + env: EXTENDED_TEST="yes" CONFIG_OPTS="no-pic" TESTS="-test_fuzz" exclude: - os: linux compiler: clang @@ -101,6 +118,10 @@ matrix: compiler: gcc before_script: + - env + - if [ "$TRAVIS_PULL_REQUEST" != "false" -a -n "$EXTENDED_TEST" ]; then + (git log -1 $TRAVIS_COMMIT_RANGE | grep '\[extended tests\]' > /dev/null) || exit 0; + fi - if [ -n "$DESTDIR" ]; then sh .travis-create-release.sh $TRAVIS_OS_NAME; tar -xvzf _srcdist.tar.gz; @@ -131,14 +152,7 @@ before_script: fi; $srcdir/config -v $CONFIG_OPTS; fi - - if [ -z "$BUILDONLY" ]; then - if [ -n "$CROSS_COMPILE" ]; then - if [ "$TRAVIS_OS_NAME" == "linux" ]; then - sudo dpkg --add-architecture i386; - sudo apt-get update; - fi; - fi; - fi + - ./configdata.pm --dump - cd $top script: @@ -147,11 +161,9 @@ script: else make="make"; fi + - top=${PWD} - if [ -n "$DESTDIR" ]; then cd _build; - top=..; - else - top=.; fi - if $make update; then echo -e '+\057 MAKE UPDATE OK'; @@ -166,37 +178,46 @@ script: echo -e '+\057\057 MAKE DOC-NITS FAILED'; false; fi; fi - - if $make ; then + - if $make; then echo -e '+\057\057\057 MAKE OK'; else echo -e '+\057\057\057 MAKE FAILED'; false; fi; - if [ -z "$BUILDONLY" ]; then if [ -n "$CROSS_COMPILE" ]; then - sudo apt-get -yq install wine; + sudo dpkg --add-architecture i386; + sudo apt-get update; + sudo apt-get -yq --no-install-suggests --no-install-recommends --force-yes install wine; export EXE_SHELL="wine" WINEPREFIX=`pwd`; fi; - HARNESS_VERBOSE=yes make test; + if [ -e krb5/src ]; then + sudo apt-get -yq install bison dejagnu gettext keyutils ldap-utils libldap2-dev libkeyutils-dev python-cjson python-paste python-pyrad slapd tcl-dev tcsh; + fi; + if HARNESS_VERBOSE=yes BORING_RUNNER_DIR=$top/boringssl/ssl/test/runner make test; then + echo -e '+\057\057\057\057 MAKE TEST OK'; + else + echo -e '+\057\057\057\057 MAKE TEST FAILED'; false; + fi; else if $make build_tests; then - echo -e '+\057\057\075 MAKE BUILD_TESTS OK'; + echo -e '+\057\057\057\057\057 MAKE BUILD_TESTS OK'; else - echo -e '+\057\057\075 MAKE BUILD_TESTS FAILEd'; false; + echo -e '+\057\057\057\057\057 MAKE BUILD_TESTS FAILED'; false; fi; fi - if [ -n "$DESTDIR" ]; then - mkdir "../$DESTDIR"; - if $make install install_docs DESTDIR="../$DESTDIR"; then - echo -e '+\057\057\057\057\057 MAKE INSTALL_DOCS OK'; + mkdir "$top/$DESTDIR"; + if $make install install_docs DESTDIR="$top/$DESTDIR"; then + echo -e '+\057\057\057\057\057\057 MAKE INSTALL OK'; else - echo -e '+\057\057\057\057\057 MAKE INSTALL_DOCS FAILED'; false; + echo -e '+\057\057\057\057\057\057 MAKE INSTALL FAILED'; false; fi; fi - cd $top after_success: - if [ -n "$COVERALLS" ]; then - coveralls -b . --gcov-options '\-lp'; + coveralls -b . --gcov gcov-5 --gcov-options '\-lpbc'; fi; notifications: diff --git a/CHANGES b/CHANGES index 0ea1ad55..e08644a5 100644 --- a/CHANGES +++ b/CHANGES @@ -7,54 +7,261 @@ https://github.com/openssl/openssl/commits/ and pick the appropriate release branch. - Changes between 1.1.0g and 1.1.0h [27 Mar 2018] + Changes between 1.1.0g and 1.1.1 [xx XXX xxxx] - *) Constructed ASN.1 types with a recursive definition could exceed the stack + *) Extend OSSL_STORE with capabilities to search and to narrow the set of + objects loaded. This adds the functions OSSL_STORE_expect() and + OSSL_STORE_find() as well as needed tools to construct searches and + get the search data out of them. + [Richard Levitte] - Constructed ASN.1 types with a recursive definition (such as can be found - in PKCS7) could eventually exceed the stack given malicious input with - excessive recursion. This could result in a Denial Of Service attack. There - are no such structures used within SSL/TLS that come from untrusted sources - so this is considered safe. + *) Support for TLSv1.3 added. Note that users upgrading from an earlier + version of OpenSSL should review their configuration settings to ensure + that they are still appropriate for TLSv1.3. In particular if no TLSv1.3 + ciphersuites are enabled then OpenSSL will refuse to make a connection + unless (1) TLSv1.3 is explicitly disabled or (2) the ciphersuite + configuration is updated to include suitable ciphersuites. The DEFAULT + ciphersuite configuration does include TLSv1.3 ciphersuites. For further + information on this and other related issues please see: + https://www.openssl.org/blog/blog/2018/02/08/tlsv1.3/ - This issue was reported to OpenSSL on 4th January 2018 by the OSS-fuzz - project. - (CVE-2018-0739) + NOTE: In this pre-release of OpenSSL a draft version of the + TLSv1.3 standard has been implemented. Implementations of different draft + versions of the standard do not inter-operate, and this version will not + inter-operate with an implementation of the final standard when it is + eventually published. Different pre-release versions may implement + different versions of the draft. The final version of OpenSSL 1.1.1 will + implement the final version of the standard. + TODO(TLS1.3): Remove the above note before final release [Matt Caswell] - *) Incorrect CRYPTO_memcmp on HP-UX PA-RISC + *) Grand redesign of the OpenSSL random generator - Because of an implementation bug the PA-RISC CRYPTO_memcmp function is - effectively reduced to only comparing the least significant bit of each - byte. This allows an attacker to forge messages that would be considered as - authenticated in an amount of tries lower than that guaranteed by the - security claims of the scheme. The module can only be compiled by the - HP-UX assembler, so that only HP-UX PA-RISC targets are affected. + The default RAND method now utilizes an AES-CTR DRBG according to + NIST standard SP 800-90Ar1. The new random generator is essentially + a port of the default random generator from the OpenSSL FIPS 2.0 + object module. It is a hybrid deterministic random bit generator + using an AES-CTR bit stream and which seeds and reseeds itself + automatically using trusted system entropy sources. - This issue was reported to OpenSSL on 2nd March 2018 by Peter Waltenberg - (IBM). - (CVE-2018-0733) + Some of its new features are: + o Support for multiple DRBG instances with seed chaining. + o Add a public DRBG instance for the default RAND method. + o Add a dedicated DRBG instance for generating long term private keys. + o Make the DRBG instances fork-safe. + o Keep all global DRBG instances on the secure heap if it is enabled. + o Add a DRBG instance to every SSL instance for lock free operation + and to increase unpredictability. + [Paul Dale, Benjamin Kaduk, Kurt Roeckx, Rich Salz, Matthias St. Pierre] + + *) Changed Configure so it only says what it does and doesn't dump + so much data. Instead, ./configdata.pm should be used as a script + to display all sorts of configuration data. + [Richard Levitte] + + *) Added processing of "make variables" to Configure. + [Richard Levitte] + + *) Added SHA512/224 and SHA512/256 algorithm support. + [Paul Dale] + + *) The last traces of Netware support, first removed in 1.1.0, have + now been removed. + [Rich Salz] + + *) Get rid of Makefile.shared, and in the process, make the processing + of certain files (rc.obj, or the .def/.map/.opt files produced from + the ordinal files) more visible and hopefully easier to trace and + debug (or make silent). + [Richard Levitte] + + *) Make it possible to have environment variable assignments as + arguments to config / Configure. + [Richard Levitte] + + *) Add multi-prime RSA (RFC 8017) support. + [Paul Yang] + + *) Add SM3 implemented according to GB/T 32905-2016 + [ Jack Lloyd , + Ronald Tse , + Erick Borsboom ] + + *) Add 'Maximum Fragment Length' TLS extension negotiation and support + as documented in RFC6066. + Based on a patch from Tomasz Moń + [Filipe Raimundo da Silva] + + *) Add SM4 implemented according to GB/T 32907-2016. + [ Jack Lloyd , + Ronald Tse , + Erick Borsboom ] + + *) Reimplement -newreq-nodes and ERR_error_string_n; the + original author does not agree with the license change. + [Rich Salz] + + *) Add ARIA AEAD TLS support. + [Jon Spillett] + + *) Some macro definitions to support VS6 have been removed. Visual + Studio 6 has not worked since 1.1.0 + [Rich Salz] + + *) Add ERR_clear_last_mark(), to allow callers to clear the last mark + without clearing the errors. + [Richard Levitte] + + *) Add "atfork" functions. If building on a system that without + pthreads, see doc/man3/OPENSSL_fork_prepare.pod for application + requirements. The RAND facility now uses/requires this. + [Rich Salz] + + *) Add SHA3. [Andy Polyakov] + *) The UI API becomes a permanent and integral part of libcrypto, i.e. + not possible to disable entirely. However, it's still possible to + disable the console reading UI method, UI_OpenSSL() (use UI_null() + as a fallback). + + To disable, configure with 'no-ui-console'. 'no-ui' is still + possible to use as an alias. Check at compile time with the + macro OPENSSL_NO_UI_CONSOLE. The macro OPENSSL_NO_UI is still + possible to check and is an alias for OPENSSL_NO_UI_CONSOLE. + [Richard Levitte] + + *) Add a STORE module, which implements a uniform and URI based reader of + stores that can contain keys, certificates, CRLs and numerous other + objects. The main API is loosely based on a few stdio functions, + and includes OSSL_STORE_open, OSSL_STORE_load, OSSL_STORE_eof, + OSSL_STORE_error and OSSL_STORE_close. + The implementation uses backends called "loaders" to implement arbitrary + URI schemes. There is one built in "loader" for the 'file' scheme. + [Richard Levitte] + + *) Add devcrypto engine. This has been implemented against cryptodev-linux, + then adjusted to work on FreeBSD 8.4 as well. + Enable by configuring with 'enable-devcryptoeng'. This is done by default + on BSD implementations, as cryptodev.h is assumed to exist on all of them. + [Richard Levitte] + + *) Module names can prefixed with OSSL_ or OPENSSL_. This affects + util/mkerr.pl, which is adapted to allow those prefixes, leading to + error code calls like this: + + OSSL_FOOerr(OSSL_FOO_F_SOMETHING, OSSL_FOO_R_WHATEVER); + + With this change, we claim the namespaces OSSL and OPENSSL in a manner + that can be encoded in C. For the foreseeable future, this will only + affect new modules. + [Richard Levitte and Tim Hudson] + + *) Removed BSD cryptodev engine. + [Rich Salz] + *) Add a build target 'build_all_generated', to build all generated files and only that. This can be used to prepare everything that requires things like perl for a system that lacks perl and then move everything to that system and do the rest of the build there. [Richard Levitte] - *) Backport SSL_OP_NO_RENGOTIATION + *) In the UI interface, make it possible to duplicate the user data. This + can be used by engines that need to retain the data for a longer time + than just the call where this user data is passed. + [Richard Levitte] - OpenSSL 1.0.2 and below had the ability to disable renegotiation using the - (undocumented) SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS flag. Due to the opacity - changes this is no longer possible in 1.1.0. Therefore the new - SSL_OP_NO_RENEGOTIATION option from 1.1.1-dev has been backported to - 1.1.0 to provide equivalent functionality. + *) Ignore the '-named_curve auto' value for compatibility of applications + with OpenSSL 1.0.2. + [Tomas Mraz ] - Note that if an application built against 1.1.0h headers (or above) is run - using an older version of 1.1.0 (prior to 1.1.0h) then the option will be - accepted but nothing will happen, i.e. renegotiation will not be prevented. + *) Fragmented SSL/TLS alerts are no longer accepted. An alert message is 2 + bytes long. In theory it is permissible in SSLv3 - TLSv1.2 to fragment such + alerts across multiple records (some of which could be empty). In practice + it make no sense to send an empty alert record, or to fragment one. TLSv1.3 + prohibts this altogether and other libraries (BoringSSL, NSS) do not + support this at all. Supporting it adds significant complexity to the + record layer, and its removal is unlikely to cause inter-operability + issues. [Matt Caswell] + *) Add the ASN.1 types INT32, UINT32, INT64, UINT64 and variants prefixed + with Z. These are meant to replace LONG and ZLONG and to be size safe. + The use of LONG and ZLONG is discouraged and scheduled for deprecation + in OpenSSL 1.2.0. + [Richard Levitte] + + *) Add the 'z' and 'j' modifiers to BIO_printf() et al formatting string, + 'z' is to be used for [s]size_t, and 'j' - with [u]int64_t. + [Richard Levitte, Andy Polyakov] + + *) Add EC_KEY_get0_engine(), which does for EC_KEY what RSA_get0_engine() + does for RSA, etc. + [Richard Levitte] + + *) Have 'config' recognise 64-bit mingw and choose 'mingw64' as the target + platform rather than 'mingw'. + [Richard Levitte] + + *) The functions X509_STORE_add_cert and X509_STORE_add_crl return + success if they are asked to add an object which already exists + in the store. This change cascades to other functions which load + certificates and CRLs. + [Paul Dale] + + *) x86_64 assembly pack: annotate code with DWARF CFI directives to + facilitate stack unwinding even from assembly subroutines. + [Andy Polyakov] + + *) Remove VAX C specific definitions of OPENSSL_EXPORT, OPENSSL_EXTERN. + Also remove OPENSSL_GLOBAL entirely, as it became a no-op. + [Richard Levitte] + + *) Remove the VMS-specific reimplementation of gmtime from crypto/o_times.c. + VMS C's RTL has a fully up to date gmtime() and gmtime_r() since V7.1, + which is the minimum version we support. + [Richard Levitte] + + *) Certificate time validation (X509_cmp_time) enforces stricter + compliance with RFC 5280. Fractional seconds and timezone offsets + are no longer allowed. + [Emilia Käsper] + + *) Add support for ARIA + [Paul Dale] + + *) s_client will now send the Server Name Indication (SNI) extension by + default unless the new "-noservername" option is used. The server name is + based on the host provided to the "-connect" option unless overridden by + using "-servername". + [Matt Caswell] + + *) Add support for SipHash + [Todd Short] + + *) OpenSSL now fails if it receives an unrecognised record type in TLS1.0 + or TLS1.1. Previously this only happened in SSLv3 and TLS1.2. This is to + prevent issues where no progress is being made and the peer continually + sends unrecognised record types, using up resources processing them. + [Matt Caswell] + + *) 'openssl passwd' can now produce SHA256 and SHA512 based output, + using the algorithm defined in + https://www.akkadia.org/drepper/SHA-crypt.txt + [Richard Levitte] + + *) Heartbeat support has been removed; the ABI is changed for now. + [Richard Levitte, Rich Salz] + + *) Support for SSL_OP_NO_ENCRYPT_THEN_MAC in SSL_CONF_cmd. + [Emilia Käsper] + + *) The RSA "null" method, which was partially supported to avoid patent + issues, has been replaced to always returns NULL. + [Rich Salz] + + Changes between 1.1.0g and 1.1.0h [xx XXX xxxx] + *) Removed the OS390-Unix config target. It relied on a script that doesn't exist. [Rich Salz] @@ -113,13 +320,6 @@ (CVE-2017-3735) [Rich Salz] - *) Ignore the '-named_curve auto' value for compatibility of applications - with OpenSSL 1.0.2. - [Tomas Mraz ] - - *) Support for SSL_OP_NO_ENCRYPT_THEN_MAC in SSL_CONF_cmd. - [Emilia Käsper] - Changes between 1.1.0e and 1.1.0f [25 May 2017] *) Have 'config' recognise 64-bit mingw and choose 'mingw64' as the target @@ -235,12 +435,6 @@ (CVE-2016-7055) [Andy Polyakov] - *) OpenSSL now fails if it receives an unrecognised record type in TLS1.0 - or TLS1.1. Previously this only happened in SSLv3 and TLS1.2. This is to - prevent issues where no progress is being made and the peer continually - sends unrecognised record types, using up resources processing them. - [Matt Caswell] - *) Removed automatic addition of RPATH in shared libraries and executables, as this was a remainder from OpenSSL 1.0.x and isn't needed any more. [Richard Levitte] @@ -794,7 +988,7 @@ *) Add support for setting the minimum and maximum supported protocol. It can bet set via the SSL_set_min_proto_version() and SSL_set_max_proto_version(), or via the SSL_CONF's MinProtocol and - MaxProtcol. It's recommended to use the new APIs to disable + MaxProtocol. It's recommended to use the new APIs to disable protocols instead of disabling individual protocols using SSL_set_options() or SSL_CONF's Protocol. This change also removes support for disabling TLS 1.2 in the OpenSSL TLS @@ -1144,13 +1338,13 @@ [Steve Henson] *) Experimental encrypt-then-mac support. - + Experimental support for encrypt then mac from draft-gutmann-tls-encrypt-then-mac-02.txt To enable it set the appropriate extension number (0x42 for the test server) using e.g. -DTLSEXT_TYPE_encrypt_then_mac=0x42 - + For non-compliant peers (i.e. just about everything) this should have no effect. @@ -1201,7 +1395,7 @@ *) Use separate DRBG fields for internal and external flags. New function FIPS_drbg_health_check() to perform on demand health checking. Add - generation tests to fips_test_suite with reduced health check interval to + generation tests to fips_test_suite with reduced health check interval to demonstrate periodic health checking. Add "nodh" option to fips_test_suite to skip very slow DH test. [Steve Henson] @@ -1215,7 +1409,7 @@ combination: call this in fips_test_suite. [Steve Henson] - *) Add support for canonical generation of DSA parameter 'g'. See + *) Add support for canonical generation of DSA parameter 'g'. See FIPS 186-3 A.2.3. *) Add support for HMAC DRBG from SP800-90. Update DRBG algorithm test and @@ -1239,7 +1433,7 @@ requested amount of entropy. [Steve Henson] - *) Add PRNG security strength checks to RSA, DSA and ECDSA using + *) Add PRNG security strength checks to RSA, DSA and ECDSA using information in FIPS186-3, SP800-57 and SP800-131A. [Steve Henson] @@ -1331,7 +1525,7 @@ can be set or retrieved with a ctrl. The IV length is by default 12 bytes (96 bits) but can be set to an alternative value. If the IV length exceeds the maximum IV length (currently 16 bytes) it cannot be - set before the key. + set before the key. [Steve Henson] *) New flag in ciphers: EVP_CIPH_FLAG_CUSTOM_CIPHER. This means the @@ -1374,7 +1568,7 @@ Add CMAC pkey methods. [Steve Henson] - *) Experimental renegotiation in s_server -www mode. If the client + *) Experimental renegotiation in s_server -www mode. If the client browses /reneg connection is renegotiated. If /renegcert it is renegotiated requesting a certificate. [Steve Henson] @@ -1394,7 +1588,7 @@ *) New macro __owur for "OpenSSL Warn Unused Result". This makes use of a gcc attribute to warn if the result of a function is ignored. This is enable if DEBUG_UNUSED is set. Add to several functions in evp.h - whose return value is often ignored. + whose return value is often ignored. [Steve Henson] *) New -noct, -requestct, -requirect and -ctlogfile options for s_client. @@ -2199,7 +2393,7 @@ [Steve Henson] *) Add new "valid_flags" field to CERT_PKEY structure which determines what - the certificate can be used for (if anything). Set valid_flags field + the certificate can be used for (if anything). Set valid_flags field in new tls1_check_chain function. Simplify ssl_set_cert_masks which used to have similar checks in it. @@ -2242,7 +2436,7 @@ *) Fix OCSP checking. [Rob Stradling and Ben Laurie] - *) Initial experimental support for explicitly trusted non-root CAs. + *) Initial experimental support for explicitly trusted non-root CAs. OpenSSL still tries to build a complete chain to a root but if an intermediate CA has a trust setting included that is used. The first setting is used: whether to trust (e.g., -addtrust option to the x509 @@ -2293,7 +2487,7 @@ to set list of supported curves. [Steve Henson] - *) New ctrls to retrieve supported signature algorithms and + *) New ctrls to retrieve supported signature algorithms and supported curve values as an array of NIDs. Extend openssl utility to print out received values. [Steve Henson] @@ -2498,7 +2692,7 @@ [Adam Langley, Bodo Moeller] *) Add additional DigestInfo checks. - + Re-encode DigestInto in DER and check against the original when verifying RSA signature: this will reject any improperly encoded DigestInfo structures. @@ -2668,7 +2862,7 @@ Changes between 1.0.1e and 1.0.1f [6 Jan 2014] - *) Fix for TLS record tampering bug. A carefully crafted invalid + *) Fix for TLS record tampering bug. A carefully crafted invalid handshake could crash OpenSSL with a NULL pointer exception. Thanks to Anton Johansson for reporting this issues. (CVE-2013-4353) @@ -2696,9 +2890,9 @@ *) Make the decoding of SSLv3, TLS and DTLS CBC records constant time. - This addresses the flaw in CBC record processing discovered by + This addresses the flaw in CBC record processing discovered by Nadhem Alfardan and Kenny Paterson. Details of this attack can be found - at: http://www.isg.rhul.ac.uk/tls/ + at: http://www.isg.rhul.ac.uk/tls/ Thanks go to Nadhem Alfardan and Kenny Paterson of the Information Security Group at Royal Holloway, University of London @@ -2758,7 +2952,7 @@ *) OpenSSL 1.0.0 sets SSL_OP_ALL to 0x80000FFFL and OpenSSL 1.0.1 and 1.0.1a set SSL_OP_NO_TLSv1_1 to 0x00000400L which would unfortunately mean any application compiled against OpenSSL 1.0.0 headers setting - SSL_OP_ALL would also set SSL_OP_NO_TLSv1_1, unintentionally disablng + SSL_OP_ALL would also set SSL_OP_NO_TLSv1_1, unintentionally disabling TLS 1.1 also. Fix this by changing the value of SSL_OP_NO_TLSv1_1 to 0x10000000L Any application which was previously compiled against OpenSSL 1.0.1 or 1.0.1a headers and which cares about SSL_OP_NO_TLSv1_1 @@ -2767,7 +2961,7 @@ in unlike event, limit maximum offered version to TLS 1.0 [see below]. [Steve Henson] - *) In order to ensure interoperabilty SSL_OP_NO_protocolX does not + *) In order to ensure interoperability SSL_OP_NO_protocolX does not disable just protocol X, but all protocols above X *if* there are protocols *below* X still enabled. In more practical terms it means that if application wants to disable TLS1.0 in favor of TLS1.1 and @@ -2796,12 +2990,12 @@ 1. Do not use record version number > TLS 1.0 in initial client hello: some (but not all) hanging servers will now work. 2. If we set OPENSSL_MAX_TLS1_2_CIPHER_LENGTH this will truncate - the number of ciphers sent in the client hello. This should be + the number of ciphers sent in the client hello. This should be set to an even number, such as 50, for example by passing: -DOPENSSL_MAX_TLS1_2_CIPHER_LENGTH=50 to config or Configure. Most broken servers should now work. 3. If all else fails setting OPENSSL_NO_TLS1_2_CLIENT will disable - TLS 1.2 client support entirely. + TLS 1.2 client support entirely. [Steve Henson] *) Fix SEGV in Vector Permutation AES module observed in OpenSSH. @@ -2816,7 +3010,7 @@ *) The format used for MDC2 RSA signatures is inconsistent between EVP and the RSA_sign/RSA_verify functions. This was made more apparent when OpenSSL used RSA_sign/RSA_verify for some RSA signatures in particular - those which went through EVP_PKEY_METHOD in 1.0.0 and later. Detect + those which went through EVP_PKEY_METHOD in 1.0.0 and later. Detect the correct format in RSA_verify so both forms transparently work. [Steve Henson] @@ -2838,12 +3032,12 @@ *) Extensive assembler packs updates, most notably: - - x86[_64]: AES-NI, PCLMULQDQ, RDRAND support; - - x86[_64]: SSSE3 support (SHA1, vector-permutation AES); - - x86_64: bit-sliced AES implementation; - - ARM: NEON support, contemporary platforms optimizations; - - s390x: z196 support; - - *: GHASH and GF(2^m) multiplication implementations; + - x86[_64]: AES-NI, PCLMULQDQ, RDRAND support; + - x86[_64]: SSSE3 support (SHA1, vector-permutation AES); + - x86_64: bit-sliced AES implementation; + - ARM: NEON support, contemporary platforms optimizations; + - s390x: z196 support; + - *: GHASH and GF(2^m) multiplication implementations; [Andy Polyakov] @@ -2889,7 +3083,7 @@ *) New -sigopt option to the ca, req and x509 utilities. Additional signature parameters can be passed using this option and in - particular PSS. + particular PSS. [Steve Henson] *) Add RSA PSS signing function. This will generate and set the @@ -2914,7 +3108,7 @@ [Steve Henson, Martin Kaiser ] *) Add algorithm specific signature printing. An individual ASN1 method - can now print out signatures instead of the standard hex dump. + can now print out signatures instead of the standard hex dump. More complex signatures (e.g. PSS) can print out more meaningful information. Include DSA version that prints out the signature @@ -2951,7 +3145,7 @@ *) Add GCM support to TLS library. Some custom code is needed to split the IV between the fixed (from PRF) and explicit (from TLS record) - portions. This adds all GCM ciphersuites supported by RFC5288 and + portions. This adds all GCM ciphersuites supported by RFC5288 and RFC5289. Generalise some AES* cipherstrings to include GCM and add a special AESGCM string for GCM only. [Steve Henson] @@ -3005,10 +3199,10 @@ to use them can use the private_* version instead. [Steve Henson] - *) Redirect cipher operations to FIPS module for FIPS builds. + *) Redirect cipher operations to FIPS module for FIPS builds. [Steve Henson] - *) Redirect digest operations to FIPS module for FIPS builds. + *) Redirect digest operations to FIPS module for FIPS builds. [Steve Henson] *) Update build system to add "fips" flag which will link in fipscanister.o @@ -3020,7 +3214,7 @@ This should be configurable so applications can judge speed vs strength. [Steve Henson] - *) Add TLS v1.2 server support for client authentication. + *) Add TLS v1.2 server support for client authentication. [Steve Henson] *) Add support for FIPS mode in ssl library: disable SSLv3, non-FIPS ciphers @@ -3062,11 +3256,8 @@ to work with OPENSSL_NO_SSL_INTERN defined. [Steve Henson] - *) A long standing patch to add support for SRP from EdelWeb (Peter - Sylvester and Christophe Renou) was integrated. - [Christophe Renou , Peter Sylvester - , Tom Wu , and - Ben Laurie] + *) Add SRP support. + [Tom Wu and Ben Laurie] *) Add functions to copy EVP_PKEY_METHOD and retrieve flags and id. [Steve Henson] @@ -3106,7 +3297,7 @@ this issue. (CVE-2012-0884) [Steve Henson] - *) Fix CVE-2011-4619: make sure we really are receiving a + *) Fix CVE-2011-4619: make sure we really are receiving a client hello before rejecting multiple SGC restarts. Thanks to Ivan Nestlerode for discovering this bug. [Steve Henson] @@ -3199,7 +3390,7 @@ *) Add protection against ECDSA timing attacks as mentioned in the paper by Billy Bob Brumley and Nicola Tuveri, see: - http://eprint.iacr.org/2011/232.pdf + http://eprint.iacr.org/2011/232.pdf [Billy Bob Brumley and Nicola Tuveri] @@ -3233,12 +3424,12 @@ [Steve Henson] *) Fix WIN32 build system to correctly link an ENGINE directory into - a DLL. + a DLL. [Steve Henson] Changes between 1.0.0 and 1.0.0a [01 Jun 2010] - *) Check return value of int_rsa_verify in pkey_rsa_verifyrecover + *) Check return value of int_rsa_verify in pkey_rsa_verifyrecover (CVE-2010-1633) [Steve Henson, Peter-Michael Hager ] @@ -3307,7 +3498,7 @@ retrieve a digest flags is by accessing the structure directly. Update EVP_MD_do_all*() and EVP_CIPHER_do_all*() to include the name a digest or cipher is registered as in the "from" argument. Print out all - registered digests in the dgst usage message instead of manually + registered digests in the dgst usage message instead of manually attempting to work them out. [Steve Henson] @@ -3341,7 +3532,7 @@ *) Update Gost ENGINE to support parameter files. [Victor B. Wagner ] - *) Support GeneralizedTime in ca utility. + *) Support GeneralizedTime in ca utility. [Oliver Martin , Steve Henson] *) Enhance the hash format used for certificate directory links. The new @@ -3538,7 +3729,7 @@ SSL_set_tlsext_opaque_prf_input(ssl, src, len) is used to set the opaque PRF input value to use in the handshake. This will create - an interal copy of the length-'len' string at 'src', and will + an internal copy of the length-'len' string at 'src', and will return non-zero for success. To get more control and flexibility, provide a callback function @@ -3579,7 +3770,7 @@ [Bodo Moeller] *) Update ssl code to support digests other than SHA1+MD5 for handshake - MAC. + MAC. [Victor B. Wagner ] @@ -3591,7 +3782,7 @@ If a client application caches session in an SSL_SESSION structure support is transparent because tickets are now stored in the encoded SSL_SESSION. - + The SSL_CTX structure automatically generates keys for ticket protection in servers so again support should be possible with no application modification. @@ -3628,7 +3819,7 @@ *) New option -sigopt to dgst utility. Update dgst to use EVP_Digest{Sign,Verify}*. These two changes make it possible to use - alternative signing parameters such as X9.31 or PSS in the dgst + alternative signing parameters such as X9.31 or PSS in the dgst utility. [Steve Henson] @@ -3648,8 +3839,8 @@ most recently disabled ciphersuites when "HIGH" is parsed). Also, change ssl_create_cipher_list() (using this new - funcionality) such that between otherwise identical - cihpersuites, ephemeral ECDH is preferred over ephemeral DH in + functionality) such that between otherwise identical + ciphersuites, ephemeral ECDH is preferred over ephemeral DH in the default order. [Bodo Moeller] @@ -3699,14 +3890,14 @@ *) Initial incomplete changes to avoid need for function casts in OpenSSL some compilers (gcc 4.2 and later) reject their use. Safestack is - reimplemented. Update ASN1 to avoid use of legacy functions. + reimplemented. Update ASN1 to avoid use of legacy functions. [Steve Henson] *) Win32/64 targets are linked with Winsock2. [Andy Polyakov] *) Add an X509_CRL_METHOD structure to allow CRL processing to be redirected - to external functions. This can be used to increase CRL handling + to external functions. This can be used to increase CRL handling efficiency especially when CRLs are very large by (for example) storing the CRL revoked certificates in a database. [Steve Henson] @@ -3740,7 +3931,7 @@ *) New function X509_CRL_match() to check if two CRLs are identical. Normally this would be called X509_CRL_cmp() but that name is already used by - a function that just compares CRL issuer names. Cache several CRL + a function that just compares CRL issuer names. Cache several CRL extensions in X509_CRL structure and cache CRLDP in X509. [Steve Henson] @@ -3749,7 +3940,7 @@ Name comparison can then be performed rapidly using memcmp(). [Steve Henson] - *) Non-blocking OCSP request processing. Add -timeout option to ocsp + *) Non-blocking OCSP request processing. Add -timeout option to ocsp utility. [Steve Henson] @@ -3828,7 +4019,7 @@ functional reference processing. [Steve Henson] - *) New functions EVP_Digest{Sign,Verify)*. These are enchance versions of + *) New functions EVP_Digest{Sign,Verify)*. These are enhanced versions of EVP_{Sign,Verify}* which allow an application to customise the signature process. [Steve Henson] @@ -3875,7 +4066,7 @@ type for signing if it is not explicitly indicated. [Steve Henson] - *) Use OID cross reference table in ASN1_sign() and ASN1_verify(). New + *) Use OID cross reference table in ASN1_sign() and ASN1_verify(). New EVP_MD flag EVP_MD_FLAG_PKEY_METHOD_SIGNATURE. This uses the relevant signing method from the key type. This effectively removes the link between digests and public key types. @@ -3884,7 +4075,7 @@ *) Add an OID cross reference table and utility functions. Its purpose is to translate between signature OIDs such as SHA1WithrsaEncryption and SHA1, rsaEncryption. This will allow some of the algorithm specific hackery - needed to use the correct OID to be removed. + needed to use the correct OID to be removed. [Steve Henson] *) Remove algorithm specific dependencies when setting PKCS7_SIGNER_INFO @@ -3900,7 +4091,7 @@ [Steve Henson] *) Add DSA pkey method and DH pkey methods, extend DH ASN1 method to support - public and private key formats. As a side effect these add additional + public and private key formats. As a side effect these add additional command line functionality not previously available: DSA signatures can be generated and verified using pkeyutl and DH key support and generation in pkey, genpkey. @@ -3921,7 +4112,7 @@ *) Add functions for main EVP_PKEY_method operations. The undocumented functions EVP_PKEY_{encrypt,decrypt} have been renamed to - EVP_PKEY_{encrypt,decrypt}_old. + EVP_PKEY_{encrypt,decrypt}_old. [Steve Henson] *) Initial definitions for EVP_PKEY_METHOD. This will be a high level public @@ -3946,7 +4137,7 @@ type. [Steve Henson] - *) Transfer public key printing routines to EVP_PKEY_ASN1_METHOD. New + *) Transfer public key printing routines to EVP_PKEY_ASN1_METHOD. New functions EVP_PKEY_print_public(), EVP_PKEY_print_private(), EVP_PKEY_print_param() to print public key data from an EVP_PKEY structure. @@ -3967,11 +4158,11 @@ *) Add initial support for RFC 4279 PSK TLS ciphersuites. Add members for the psk identity [hint] and the psk callback functions to the SSL_SESSION, SSL and SSL_CTX structure. - + New ciphersuites: PSK-RC4-SHA, PSK-3DES-EDE-CBC-SHA, PSK-AES128-CBC-SHA, PSK-AES256-CBC-SHA - + New functions: SSL_CTX_use_psk_identity_hint SSL_get_psk_identity_hint @@ -4040,8 +4231,8 @@ [Andy Polyakov] *) New option SSL_OP_NO_COMP to disable use of compression selectively - in SSL structures. New SSL ctrl to set maximum send fragment size. - Save memory by seeting the I/O buffer sizes dynamically instead of + in SSL structures. New SSL ctrl to set maximum send fragment size. + Save memory by setting the I/O buffer sizes dynamically instead of using the maximum available value. [Steve Henson] @@ -4094,13 +4285,13 @@ protection is active. (CVE-2010-0740) [Bodo Moeller, Adam Langley ] - *) Fix for CVE-2010-0433 where some kerberos enabled versions of OpenSSL + *) Fix for CVE-2010-0433 where some kerberos enabled versions of OpenSSL could be crashed if the relevant tables were not present (e.g. chrooted). [Tomas Hoger ] Changes between 0.9.8l and 0.9.8m [25 Feb 2010] - *) Always check bn_wexpend() return values for failure. (CVE-2009-3245) + *) Always check bn_wexpand() return values for failure. (CVE-2009-3245) [Martin Olsson, Neel Mehta] *) Fix X509_STORE locking: Every 'objs' access requires a lock (to @@ -4233,11 +4424,11 @@ is already buffered was missing. For every new message was memory allocated, allowing an attacker to perform an denial of service attack with sending out of seq handshake messages until there is no memory - left. Additionally every future messege was buffered, even if the + left. Additionally every future message was buffered, even if the sequence number made no sense and would be part of another handshake. So only messages with sequence numbers less than 10 in advance will be buffered. (CVE-2009-1378) - [Robin Seggelmann, discovered by Daniel Mentz] + [Robin Seggelmann, discovered by Daniel Mentz] *) Records are buffered if they arrive with a future epoch to be processed after finishing the corresponding handshake. There is @@ -4246,11 +4437,11 @@ memory left. This patch adds the pqueue_size() function to determine the size of a buffer and limits the record buffer to 100 entries. (CVE-2009-1377) - [Robin Seggelmann, discovered by Daniel Mentz] + [Robin Seggelmann, discovered by Daniel Mentz] *) Keep a copy of frag->msg_header.frag_len so it can be used after the parent structure is freed. (CVE-2009-1379) - [Daniel Mentz] + [Daniel Mentz] *) Handle non-blocking I/O properly in SSL_shutdown() call. [Darryl Miles ] @@ -4285,7 +4476,7 @@ a legal length. (CVE-2009-0590) [Steve Henson] - *) Set S/MIME signing as the default purpose rather than setting it + *) Set S/MIME signing as the default purpose rather than setting it unconditionally. This allows applications to override it at the store level. [Steve Henson] @@ -4417,12 +4608,12 @@ Changes between 0.9.8g and 0.9.8h [28 May 2008] *) Fix flaw if 'Server Key exchange message' is omitted from a TLS - handshake which could lead to a cilent crash as found using the - Codenomicon TLS test suite (CVE-2008-1672) + handshake which could lead to a client crash as found using the + Codenomicon TLS test suite (CVE-2008-1672) [Steve Henson, Mark Cox] *) Fix double free in TLS server name extensions which could lead to - a remote crash found by Codenomicon TLS test suite (CVE-2008-0891) + a remote crash found by Codenomicon TLS test suite (CVE-2008-0891) [Joe Orton] *) Clear error queue in SSL_CTX_use_certificate_chain_file() @@ -4523,7 +4714,7 @@ *) Fix BN flag handling in RSA_eay_mod_exp() and BN_MONT_CTX_set() to get the expected BN_FLG_CONSTTIME behavior. [Bodo Moeller (Google)] - + *) Netware support: - fixed wrong usage of ioctlsocket() when build for LIBC BSD sockets @@ -4575,7 +4766,7 @@ (gcc 4.2 and later) reject their use. [Kurt Roeckx , Peter Hartley , Steve Henson] - + *) Add RFC4507 support to OpenSSL. This includes the corrections in RFC4507bis. The encrypted ticket format is an encrypted encoded SSL_SESSION structure, that way new session features are automatically @@ -4584,7 +4775,7 @@ If a client application caches session in an SSL_SESSION structure support is transparent because tickets are now stored in the encoded SSL_SESSION. - + The SSL_CTX structure automatically generates keys for ticket protection in servers so again support should be possible with no application modification. @@ -4764,7 +4955,7 @@ *) Fix ASN.1 parsing of certain invalid structures that can result in a denial of service. (CVE-2006-2937) [Steve Henson] - *) Fix buffer overflow in SSL_get_shared_ciphers() function. + *) Fix buffer overflow in SSL_get_shared_ciphers() function. (CVE-2006-3738) [Tavis Ormandy and Will Drewry, Google Security Team] *) Fix SSL client code which could crash if connecting to a @@ -4851,7 +5042,7 @@ *) Disable the padding bug check when compression is in use. The padding bug check assumes the first packet is of even length, this is not - necessarily true if compresssion is enabled and can result in false + necessarily true if compression is enabled and can result in false positives causing handshake failure. The actual bug test is ancient code so it is hoped that implementations will either have fixed it by now or any which still have the bug do not support compression. @@ -5044,7 +5235,7 @@ *) New structure X509_VERIFY_PARAM which combines current verify parameters, update associated structures and add various utility functions. - Add new policy related verify parameters, include policy checking in + Add new policy related verify parameters, include policy checking in standard verify code. Enhance 'smime' application with extra parameters to support policy checking and print out. [Steve Henson] @@ -5080,7 +5271,7 @@ we can fix the problem directly in the 'ca' utility.) [Steve Henson] - *) Reduced header interdepencies by declaring more opaque objects in + *) Reduced header interdependencies by declaring more opaque objects in ossl_typ.h. As a consequence, including some headers (eg. engine.h) will give fewer recursive includes, which could break lazy source code - so this change is covered by the OPENSSL_NO_DEPRECATED symbol. As always, @@ -5093,12 +5284,12 @@ [Steve Henson] *) Add new EVP function EVP_CIPHER_CTX_rand_key and associated functionality. - This will generate a random key of the appropriate length based on the + This will generate 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. This is used in the des and + routine to support keys of a specific form. This is used in the des and 3des routines to generate a key of the correct parity. Update S/MIME code to use new functions and hence generate correct parity DES keys. - Add EVP_CHECK_DES_KEY #define to return an error if the key is not + Add EVP_CHECK_DES_KEY #define to return an error if the key is not valid (weak or incorrect parity). [Steve Henson] @@ -5211,7 +5402,7 @@ functions. [Steve Henson] - *) New function PKCS7_set0_type_other() this initializes a PKCS7 + *) New function PKCS7_set0_type_other() this initializes a PKCS7 structure of type "other". [Steve Henson] @@ -5272,16 +5463,16 @@ takes an extra flags argument for optional functionality. Currently, the following flags are defined: - OBJ_BSEARCH_VALUE_ON_NOMATCH - This one gets OBJ_bsearch_ex() to return a pointer to the first - element where the comparing function returns a negative or zero - number. + OBJ_BSEARCH_VALUE_ON_NOMATCH + This one gets OBJ_bsearch_ex() to return a pointer to the first + element where the comparing function returns a negative or zero + number. - OBJ_BSEARCH_FIRST_VALUE_ON_MATCH - This one gets OBJ_bsearch_ex() to return a pointer to the first - element where the comparing function returns zero. This is useful - if there are more than one element where the comparing function - returns zero. + OBJ_BSEARCH_FIRST_VALUE_ON_MATCH + This one gets OBJ_bsearch_ex() to return a pointer to the first + element where the comparing function returns zero. This is useful + if there are more than one element where the comparing function + returns zero. [Richard Levitte] *) Make it possible to create self-signed certificates with 'openssl ca' @@ -5304,7 +5495,7 @@ named like the index file with '.attr' appended to the name. [Richard Levitte] - *) Generate muti valued AVAs using '+' notation in config files for + *) Generate multi-valued AVAs using '+' notation in config files for req and dirName. [Steve Henson] @@ -5420,7 +5611,7 @@ [Geoff Thorpe] *) Change the ZLIB compression method to be stateful, and make it - available to TLS with the number defined in + available to TLS with the number defined in draft-ietf-tls-compression-04.txt. [Richard Levitte] @@ -5428,8 +5619,8 @@ is defined as follows (according to X.509_4thEditionDraftV6.pdf): CertificatePair ::= SEQUENCE { - forward [0] Certificate OPTIONAL, - reverse [1] Certificate OPTIONAL, + forward [0] Certificate OPTIONAL, + reverse [1] Certificate OPTIONAL, -- at least one of the pair shall be present -- } Also implement the PEM functions to read and write certificate @@ -5444,7 +5635,7 @@ Makefile.shared, for Cygwin's sake. [Richard Levitte] - *) Extend the BIGNUM API by creating a function + *) Extend the BIGNUM API by creating a function void BN_set_negative(BIGNUM *a, int neg); and a macro that behave like int BN_is_negative(const BIGNUM *a); @@ -5597,7 +5788,7 @@ *) Add binary polynomial arithmetic software in crypto/bn/bn_gf2m.c. Polynomials are represented as BIGNUMs (where the sign bit is not - used) in the following functions [macros]: + used) in the following functions [macros]: BN_GF2m_add BN_GF2m_sub [= BN_GF2m_add] @@ -5690,7 +5881,7 @@ EC_METHOD_get_field_type() returns this value. [Nils Larsch ] - *) Add functions + *) Add functions EC_POINT_point2bn() EC_POINT_bn2point() EC_POINT_point2hex() @@ -5749,7 +5940,7 @@ EC_GROUP_set_curve_name() EC_GROUP_get_curve_name() [Nils Larsch ] @@ -5809,7 +6000,7 @@ *) Fix ASN.1 parsing of certain invalid structures that can result in a denial of service. (CVE-2006-2937) [Steve Henson] - *) Fix buffer overflow in SSL_get_shared_ciphers() function. + *) Fix buffer overflow in SSL_get_shared_ciphers() function. (CVE-2006-3738) [Tavis Ormandy and Will Drewry, Google Security Team] *) Fix SSL client code which could crash if connecting to a @@ -5845,7 +6036,7 @@ draft-ietf-tls-56-bit-ciphersuites-0[01].txt, but do not really appear there. - Also deactive the remaining ciphersuites from + Also deactivate the remaining ciphersuites from draft-ietf-tls-56-bit-ciphersuites-01.txt. These are just as unofficial, and the ID has long expired. [Bodo Moeller] @@ -5863,10 +6054,10 @@ *) Fixes for VC++ 2005 build under Windows. [Steve Henson] - *) Add new Windows build target VC-32-GMAKE for VC++. This uses GNU make + *) Add new Windows build target VC-32-GMAKE for VC++. This uses GNU make from a Windows bash shell such as MSYS. It is autodetected from the "config" script when run from a VC++ environment. Modify standard VC++ - build to use fipscanister.o from the GNU make build. + build to use fipscanister.o from the GNU make build. [Steve Henson] Changes between 0.9.7h and 0.9.7i [14 Oct 2005] @@ -5979,7 +6170,7 @@ values. The OpenSSL team would like to thank the UK NISCC for bringing this issue - to our attention. + to our attention. [Stephen Henson, reported by UK NISCC] @@ -6024,7 +6215,7 @@ Changes between 0.9.7d and 0.9.7e [25 Oct 2004] - *) Avoid a race condition when CRLs are checked in a multi threaded + *) Avoid a race condition when CRLs are checked in a multi threaded environment. This would happen due to the reordering of the revoked entries during signature checking and serial number lookup. Now the encoding is cached and the serial number sort performed under a lock. @@ -6048,13 +6239,13 @@ Changes between 0.9.7c and 0.9.7d [17 Mar 2004] - *) Fix null-pointer assignment in do_change_cipher_spec() revealed - by using the Codenomicon TLS Test Tool (CVE-2004-0079) - [Joe Orton, Steve Henson] + *) Fix null-pointer assignment in do_change_cipher_spec() revealed + by using the Codenomicon TLS Test Tool (CVE-2004-0079) + [Joe Orton, Steve Henson] *) Fix flaw in SSL/TLS handshaking when using Kerberos ciphersuites (CVE-2004-0112) - [Joe Orton, Steve Henson] + [Joe Orton, Steve Henson] *) Make it possible to have multiple active certificates with the same subject in the CA index file. This is done only if the keyword @@ -6064,7 +6255,7 @@ named like the index file with '.attr' appended to the name. [Richard Levitte] - *) X509 verify fixes. Disable broken certificate workarounds when + *) X509 verify fixes. Disable broken certificate workarounds when X509_V_FLAGS_X509_STRICT is set. Check CRL issuer has cRLSign set if keyUsage extension present. Don't accept CRLs with unhandled critical extensions: since verify currently doesn't process CRL extensions this @@ -6073,7 +6264,7 @@ [Steve Henson] *) When creating an OCSP nonce use an OCTET STRING inside the extnValue. - A clarification of RFC2560 will require the use of OCTET STRINGs and + A clarification of RFC2560 will require the use of OCTET STRINGs and some implementations cannot handle the current raw format. Since OpenSSL copies and compares OCSP nonces as opaque blobs without any attempt at parsing them this should not create any compatibility issues. @@ -6097,7 +6288,7 @@ Stop out of bounds reads in the ASN1 code when presented with invalid tags (CVE-2003-0543 and CVE-2003-0544). - + Free up ASN1_TYPE correctly if ANY type is invalid (CVE-2003-0545). If verify callback ignores invalid public key errors don't try to check @@ -6127,7 +6318,7 @@ blocks during encryption. [Richard Levitte] - *) Various fixes to base64 BIO and non blocking I/O. On write + *) Various fixes to base64 BIO and non blocking I/O. On write flushes were not handled properly if the BIO retried. On read data was not being buffered properly and had various logic bugs. This also affects blocking I/O when the data being decoded is a @@ -6175,7 +6366,7 @@ *) Target "mingw" now allows native Windows code to be generated in the Cygwin environment as well as with the MinGW compiler. - [Ulf Moeller] + [Ulf Moeller] Changes between 0.9.7 and 0.9.7a [19 Feb 2003] @@ -6211,7 +6402,7 @@ *) Allow an application to disable the automatic SSL chain building. Before this a rather primitive chain build was always performed in - ssl3_output_cert_chain(): an application had no way to send the + ssl3_output_cert_chain(): an application had no way to send the correct chain if the automatic operation produced an incorrect result. Now the chain builder is disabled if either: @@ -6431,15 +6622,15 @@ build directory is the following (tested on Linux), maybe with some local tweaks: - # Place yourself outside of the OpenSSL source tree. In - # this example, the environment variable OPENSSL_SOURCE - # is assumed to contain the absolute OpenSSL source directory. - mkdir -p objtree/"`uname -s`-`uname -r`-`uname -m`" - cd objtree/"`uname -s`-`uname -r`-`uname -m`" - (cd $OPENSSL_SOURCE; find . -type f) | while read F; do - mkdir -p `dirname $F` - ln -s $OPENSSL_SOURCE/$F $F - done + # Place yourself outside of the OpenSSL source tree. In + # this example, the environment variable OPENSSL_SOURCE + # is assumed to contain the absolute OpenSSL source directory. + mkdir -p objtree/"`uname -s`-`uname -r`-`uname -m`" + cd objtree/"`uname -s`-`uname -r`-`uname -m`" + (cd $OPENSSL_SOURCE; find . -type f) | while read F; do + mkdir -p `dirname $F` + ln -s $OPENSSL_SOURCE/$F $F + done To be absolutely sure not to disturb the source tree, a "make clean" is a good thing. If it isn't successful, don't worry about it, @@ -6459,7 +6650,7 @@ error in AES-CFB decryption. [Richard Levitte] - *) Remove most calls to EVP_CIPHER_CTX_cleanup() in evp_enc.c, this + *) Remove most calls to EVP_CIPHER_CTX_cleanup() in evp_enc.c, this allows existing EVP_CIPHER_CTX structures to be reused after calling EVP_*Final(). This behaviour is used by encryption BIOs and some applications. This has the side effect that @@ -6486,11 +6677,11 @@ [Lutz Jaenicke] *) Add an "init" command to the ENGINE config module and auto initialize - ENGINEs. Without any "init" command the ENGINE will be initialized - after all ctrl commands have been executed on it. If init=1 the - ENGINE is initailized at that point (ctrls before that point are run + ENGINEs. Without any "init" command the ENGINE will be initialized + after all ctrl commands have been executed on it. If init=1 the + ENGINE is initialized at that point (ctrls before that point are run on the uninitialized ENGINE and after on the initialized one). If - init=0 then the ENGINE will not be iniatialized at all. + init=0 then the ENGINE will not be initialized at all. [Steve Henson] *) Fix the 'app_verify_callback' interface so that the user-defined @@ -6528,7 +6719,7 @@ *) Config modules support in openssl utility. Most commands now load modules from the config file, - though in a few (such as version) this isn't done + though in a few (such as version) this isn't done because it couldn't be used for anything. In the case of ca and req the config file used is @@ -6594,7 +6785,7 @@ but report on the latest error recorded rather than the first one still in the error queue. [Ben Laurie, Bodo Moeller] - + *) default_algorithms option in ENGINE config module. This allows things like: default_algorithms = ALL @@ -6711,7 +6902,7 @@ [Richard Levitte] *) Test for certificates which contain unsupported critical extensions. - If such a certificate is found during a verify operation it is + If such a certificate is found during a verify operation it is rejected by default: this behaviour can be overridden by either handling the new error X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION or by setting the verify flag X509_V_FLAG_IGNORE_CRITICAL. A new function @@ -6747,7 +6938,7 @@ *) Major restructuring to the underlying ENGINE code. This includes reduction of linker bloat, separation of pure "ENGINE" manipulation (initialisation, etc) from functionality dealing with implementations - of specific crypto iterfaces. This change also introduces integrated + of specific crypto interfaces. This change also introduces integrated support for symmetric ciphers and digest implementations - so ENGINEs can now accelerate these by providing EVP_CIPHER and EVP_MD implementations of their own. This is detailed in crypto/engine/README @@ -6934,8 +7125,8 @@ des_key_schedule ks; - des_set_key_checked(..., &ks); - des_ncbc_encrypt(..., &ks, ...); + des_set_key_checked(..., &ks); + des_ncbc_encrypt(..., &ks, ...); (Note that a later change renames 'des_...' into 'DES_...'.) [Ben Laurie] @@ -7076,7 +7267,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k [Steve Henson] *) Add copies of X509_STORE_CTX fields and callbacks to X509_STORE - structure. These are inherited by X509_STORE_CTX when it is + structure. These are inherited by X509_STORE_CTX when it is initialised. This allows various defaults to be set in the X509_STORE structure (such as flags for CRL checking and custom purpose or trust settings) for functions which only use X509_STORE_CTX @@ -7141,7 +7332,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k '-pre' and '-post' switches. '-post' is only used if '-t' is specified and the ENGINE is successfully initialised. The syntax for the individual commands are colon-separated, for example; - openssl engine chil -pre FORK_CHECK:0 -pre SO_PATH:/lib/test.so + openssl engine chil -pre FORK_CHECK:0 -pre SO_PATH:/lib/test.so [Geoff] *) New dynamic control command support for ENGINEs. ENGINEs can now @@ -7240,7 +7431,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k EC_GFp_simple_method() uses the basic BN_mod_mul and BN_mod_sqr operations and provides various method functions that can also - operate with faster implementations of modular arithmetic. + operate with faster implementations of modular arithmetic. EC_GFp_mont_method() reuses most functions that are part of EC_GFp_simple_method, but uses Montgomery arithmetic. @@ -7329,16 +7520,16 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL in the source file (foo.c) like this: - OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1; - OPENSSL_IMPLEMENT_GLOBAL(double,bar); + OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1; + OPENSSL_IMPLEMENT_GLOBAL(double,bar); To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL and OPENSSL_GLOBAL_REF in the header file (foo.h) like this: - OPENSSL_DECLARE_GLOBAL(int,foo); - #define foo OPENSSL_GLOBAL_REF(foo) - OPENSSL_DECLARE_GLOBAL(double,bar); - #define bar OPENSSL_GLOBAL_REF(bar) + OPENSSL_DECLARE_GLOBAL(int,foo); + #define foo OPENSSL_GLOBAL_REF(foo) + OPENSSL_DECLARE_GLOBAL(double,bar); + #define bar OPENSSL_GLOBAL_REF(bar) The #defines are very important, and therefore so is including the header file everywhere where the defined globals are used. @@ -7428,7 +7619,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) New option -set_serial to 'req' and 'x509' this allows the serial number to use to be specified on the command line. Previously self - signed certificates were hard coded with serial number 0 and the + signed certificates were hard coded with serial number 0 and the CA options of 'x509' had to use a serial number in a file which was auto incremented. [Steve Henson] @@ -7453,7 +7644,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k option to ocsp utility. [Steve Henson] - *) New nonce behavior. The return value of OCSP_check_nonce() now + *) New nonce behavior. The return value of OCSP_check_nonce() now reflects the various checks performed. Applications can decide whether to tolerate certain situations such as an absent nonce in a response when one was present in a request: the ocsp application @@ -7527,7 +7718,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Various new functions. EVP_Digest() combines EVP_Digest{Init,Update,Final}() in a single operation. X509_get0_pubkey_bitstr() extracts the public_key structure from a certificate. X509_pubkey_digest() digests the public_key - contents: this is used in various key identifiers. + contents: this is used in various key identifiers. [Steve Henson] *) Make sk_sort() tolerate a NULL argument. @@ -7542,7 +7733,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k to data. This was previously part of the PKCS7 ASN1 code. This was causing problems with OpenSSL created PKCS#12 and PKCS#7 structures. [Steve Henson, reported by Kenneth R. Robinette - ] + ] *) Add CRYPTO_push_info() and CRYPTO_pop_info() calls to new ASN1 routines: without these tracing memory leaks is very painful. @@ -7556,7 +7747,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k and use ASN1_TIME_set() if the value is not V_ASN1_UTCTIME or V_ASN1_GENERALIZEDTIME, without this it always uses GeneralizedTime. [Steve Henson, reported by Kenneth R. Robinette - ] + ] *) Fixes to BN_to_ASN1_INTEGER when bn is zero. This would previously result in a zero length in the ASN1_INTEGER structure which was @@ -7641,10 +7832,10 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k settings for extended allocation functions, the following functions are provided: - CRYPTO_set_mem_ex_functions - CRYPTO_set_locked_mem_ex_functions - CRYPTO_get_mem_ex_functions - CRYPTO_get_locked_mem_ex_functions + CRYPTO_set_mem_ex_functions + CRYPTO_set_locked_mem_ex_functions + CRYPTO_get_mem_ex_functions + CRYPTO_get_locked_mem_ex_functions These work the same way as CRYPTO_set_mem_functions and friends. CRYPTO_get_[locked_]mem_functions now writes 0 where such an @@ -7715,7 +7906,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Update OCSP API. Remove obsolete extensions argument from various functions. Extensions are now handled using the new - OCSP extension code. New simple OCSP HTTP function which + OCSP extension code. New simple OCSP HTTP function which can be used to send requests and parse the response. [Steve Henson] @@ -7751,7 +7942,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k [Steve Henson] *) Enhance mkdef.pl to be more accepting about spacing in C preprocessor - lines, recognice more "algorithms" that can be deselected, and make + lines, recognize more "algorithms" that can be deselected, and make it complain about algorithm deselection that isn't recognised. [Richard Levitte] @@ -7985,11 +8176,11 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Add the following functions: - ENGINE_load_cswift() - ENGINE_load_chil() - ENGINE_load_atalla() - ENGINE_load_nuron() - ENGINE_load_builtin_engines() + ENGINE_load_cswift() + ENGINE_load_chil() + ENGINE_load_atalla() + ENGINE_load_nuron() + ENGINE_load_builtin_engines() That way, an application can itself choose if external engines that are built-in in OpenSSL shall ever be used or not. The benefit is @@ -8101,7 +8292,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Stop out of bounds reads in the ASN1 code when presented with invalid tags (CVE-2003-0543 and CVE-2003-0544). - + If verify callback ignores invalid public key errors don't try to check certificate signature with the NULL public key. @@ -8149,7 +8340,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Changes between 0.9.6h and 0.9.6i [19 Feb 2003] *) In ssl3_get_record (ssl/s3_pkt.c), minimize information leaked - via timing by performing a MAC computation even if incorrrect + via timing by performing a MAC computation even if incorrect block cipher padding has been found. This is a countermeasure against active attacks where the attacker has to distinguish between bad padding and a MAC verification error. (CVE-2003-0078) @@ -8180,7 +8371,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k [Zeev Lieber ] *) Undo an undocumented change introduced in 0.9.6e which caused - repeated calls to OpenSSL_add_all_ciphers() and + repeated calls to OpenSSL_add_all_ciphers() and OpenSSL_add_all_digests() to be ignored, even after calling EVP_cleanup(). [Richard Levitte] @@ -8238,8 +8429,8 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fix ASN1 checks. Check for overflow by comparing with LONG_MAX and get fix the header length calculation. [Florian Weimer , - Alon Kantor (and others), - Steve Henson] + Alon Kantor (and others), + Steve Henson] *) Use proper error handling instead of 'assertions' in buffer overflow checks added in 0.9.6e. This prevents DoS (the @@ -8354,7 +8545,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k a generator of the order-q subgroup is just as good, if not better. [Bodo Moeller] - + *) Map new X509 verification errors to alerts. Discovered and submitted by Tom Wu . [Lutz Jaenicke] @@ -8467,7 +8658,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k [Broadcom, Nalin Dahyabhai , Mark Cox] *) [In 0.9.6c-engine release:] - Add support for SureWare crypto accelerator cards from + Add support for SureWare crypto accelerator cards from Baltimore Technologies. (Use engine 'sureware') [Baltimore Technologies and Mark Cox] @@ -8810,8 +9001,8 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Computations, J. Cryptology 14 (2001) 2, 101-119, http://theory.stanford.edu/~dabo/papers/faults.ps.gz). [Ulf Moeller] - - *) MIPS assembler BIGNUM division bug fix. + + *) MIPS assembler BIGNUM division bug fix. [Andy Polyakov] *) Disabled incorrect Alpha assembler code. @@ -8867,7 +9058,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k 2. Fix logical glitch in is_MemCheck_on() aka CRYPTO_is_mem_check_on(). 3. Count how many times MemCheck_off() has been called so that - nested use can be treated correctly. This also avoids + nested use can be treated correctly. This also avoids inband-signalling in the previous code (which relied on the assumption that thread ID 0 is impossible). [Bodo Moeller] @@ -8981,7 +9172,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) rand_win.c fix for Borland C. [Ulf Möller] - + *) BN_rshift bugfix for n == 0. [Bodo Moeller] @@ -9051,7 +9242,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k and not in SSL_clear because the latter is also used by the accept/connect functions; previously, the settings made by SSL_set_read_ahead would be lost during the handshake. - [Bodo Moeller; problems reported by Anders Gertz ] + [Bodo Moeller; problems reported by Anders Gertz ] *) Correct util/mkdef.pl to be selective about disabled algorithms. Previously, it would create entries for disabled algorithms no @@ -9141,7 +9332,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k doc package contains the contents of the doc directory. The original openssl.spec was provided by Damien Miller . [Richard Levitte] - + *) Add a large number of documentation files for many SSL routines. [Lutz Jaenicke ] @@ -9187,19 +9378,19 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Allow the verify time to be set by an application, rather than always using the current time. [Steve Henson] - + *) Phase 2 verify code reorganisation. The certificate verify code now looks up an issuer certificate by a number of criteria: subject name, authority key id and key usage. It also verifies self signed certificates by the same criteria. The main comparison function is X509_check_issued() which performs these checks. - + Lot of changes were necessary in order to support this without completely rewriting the lookup code. - + Authority and subject key identifier are now cached. - + The LHASH 'certs' is X509_STORE has now been replaced by a STACK_OF(X509_OBJECT). This is mainly because an LHASH can't store or retrieve multiple objects with @@ -9209,10 +9400,10 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k use only) have changed to handle the new X509_STORE structure. This will break anything that messed round with X509_STORE internally. - + The functions X509_STORE_add_cert() now checks for an exact match, rather than just subject name. - + The X509_STORE API doesn't directly support the retrieval of multiple certificates matching a given criteria, however this can be worked round by performing a lookup first @@ -9220,9 +9411,9 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k and then examining the cache for matches. This is probably the best we can do without throwing out X509_LOOKUP entirely (maybe later...). - + The X509_VERIFY_CTX structure has been enhanced considerably. - + All certificate lookup operations now go via a get_issuer() callback. Although this currently uses an X509_STORE it can be replaced by custom lookups. This is a simple way @@ -9231,15 +9422,15 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k in future. A very simple version which uses a simple STACK for its trusted certificate store is also provided using X509_STORE_CTX_trusted_stack(). - + The verify_cb() and verify() callbacks now have equivalents in the X509_STORE_CTX structure. - + X509_STORE_CTX also has a 'flags' field which can be used to customise the verify behaviour. [Steve Henson] - - *) Add new PKCS#7 signing option PKCS7_NOSMIMECAP which + + *) Add new PKCS#7 signing option PKCS7_NOSMIMECAP which excludes S/MIME capabilities. [Steve Henson] @@ -9301,7 +9492,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Modification to PKCS#7 encoding routines to output definite length encoding. Since currently the whole structures are in - memory there's not real point in using indefinite length + memory there's not real point in using indefinite length constructed encoding. However if OpenSSL is compiled with the flag PKCS7_INDEFINITE_ENCODING the old form is used. [Steve Henson] @@ -9309,27 +9500,27 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Added BIO_vprintf() and BIO_vsnprintf(). [Richard Levitte] - *) Added more prefixes to parse for in the the strings written + *) Added more prefixes to parse for in the strings written through a logging bio, to cover all the levels that are available through syslog. The prefixes are now: - PANIC, EMERG, EMR => LOG_EMERG - ALERT, ALR => LOG_ALERT - CRIT, CRI => LOG_CRIT - ERROR, ERR => LOG_ERR - WARNING, WARN, WAR => LOG_WARNING - NOTICE, NOTE, NOT => LOG_NOTICE - INFO, INF => LOG_INFO - DEBUG, DBG => LOG_DEBUG + PANIC, EMERG, EMR => LOG_EMERG + ALERT, ALR => LOG_ALERT + CRIT, CRI => LOG_CRIT + ERROR, ERR => LOG_ERR + WARNING, WARN, WAR => LOG_WARNING + NOTICE, NOTE, NOT => LOG_NOTICE + INFO, INF => LOG_INFO + DEBUG, DBG => LOG_DEBUG and as before, if none of those prefixes are present at the beginning of the string, LOG_ERR is chosen. On Win32, the LOG_* levels are mapped according to this: - LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR => EVENTLOG_ERROR_TYPE - LOG_WARNING => EVENTLOG_WARNING_TYPE - LOG_NOTICE, LOG_INFO, LOG_DEBUG => EVENTLOG_INFORMATION_TYPE + LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR => EVENTLOG_ERROR_TYPE + LOG_WARNING => EVENTLOG_WARNING_TYPE + LOG_NOTICE, LOG_INFO, LOG_DEBUG => EVENTLOG_INFORMATION_TYPE [Richard Levitte] @@ -9380,7 +9571,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) New functions ASN1_STRING_print_ex() and X509_NAME_print_ex() these print out strings and name structures based on various flags including RFC2253 support and proper handling of - multibyte characters. Added options to the 'x509' utility + multibyte characters. Added options to the 'x509' utility to allow the various flags to be set. [Steve Henson] @@ -9458,7 +9649,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k to check that it worked correctly is to look in obj_dat.h and check the array nid_objs and make sure the objects haven't moved around (this is important!). Additions are OK, as well as - consistent name changes. + consistent name changes. [Richard Levitte] *) Add BSD-style MD5-based passwords to 'openssl passwd' (option '-1'). @@ -9482,9 +9673,9 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k added extra typesafe functions: these no longer exist. [Steve Henson] - *) Reorganisation of the stack code. The macros are now all + *) Reorganisation of the stack code. The macros are now all collected in safestack.h . Each macro is defined in terms of - a "stack macro" of the form SKM_(type, a, b). The + a "stack macro" of the form SKM_(type, a, b). The DEBUG_SAFESTACK is now handled in terms of function casts, this has the advantage of retaining type safety without the use of additional functions. If DEBUG_SAFESTACK is not defined @@ -9502,7 +9693,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k new functions i2d_RSA_NET(), d2i_RSA_NET() etc which are the same as the old Netscape_RSA functions except they have an additional 'sgckey' parameter which uses the modified algorithm. Also added - an -sgckey command line option to the rsa utility. Thanks to + an -sgckey command line option to the rsa utility. Thanks to Adrian Peck for posting details of the modified algorithm to openssl-dev. [Steve Henson] @@ -9514,7 +9705,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) New X509_get1_email() and X509_REQ_get1_email() functions that return a STACK of email addresses from a certificate or request, these look - in the subject name and the subject alternative name extensions and + in the subject name and the subject alternative name extensions and omit any duplicate addresses. [Steve Henson] @@ -9746,7 +9937,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k ] *) Fix for HMAC. It wasn't zeroing the rest of the block if the key length - was larger than the MD block size. + was larger than the MD block size. [Steve Henson, pointed out by Yost William ] *) Modernise PKCS12_parse() so it uses STACK_OF(X509) for its ca argument @@ -9787,7 +9978,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k ssl_cert_dup, which is used by SSL_new, now copies DH keys in addition to parameters -- in previous versions (since OpenSSL 0.9.3) the 'default key' from SSL_CTX_set_tmp_dh would always be lost, meaning - you effectivly got SSL_OP_SINGLE_DH_USE when using this macro. + you effectively got SSL_OP_SINGLE_DH_USE when using this macro. [Bodo Moeller] *) New s_client option -ign_eof: EOF at stdin is ignored, and @@ -9881,7 +10072,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Add an optional second argument to the set_label() in the perl assembly language builder. If this argument exists and is set - to 1 it signals that the assembler should use a symbol whose + to 1 it signals that the assembler should use a symbol whose scope is the entire file, not just the current function. This is needed with MASM which uses the format label:: for this scope. [Steve Henson, pointed out by Peter Runestig ] @@ -10006,7 +10197,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) ./config recognizes MacOS X now. [Andy Polyakov] - *) Bug fix for BN_div() when the first words of num and divsor are + *) Bug fix for BN_div() when the first words of num and divisor are equal (it gave wrong results if (rem=(n1-q*d0)&BN_MASK2) < d0). [Ulf Möller] @@ -10044,7 +10235,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Source code cleanups: use const where appropriate, eliminate casts, use void * instead of char * in lhash. - [Ulf Möller] + [Ulf Möller] *) Bugfix: ssl3_send_server_key_exchange was not restartable (the state was not changed to SSL3_ST_SW_KEY_EXCH_B, and because of @@ -10069,7 +10260,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k loop rather than for the current invocation of the inner loop. DSA_generate_parameters additionally can call the callback function with an 'iteration count' of -1, meaning that a - candidate has passed the trial division test (when q is generated + candidate has passed the trial division test (when q is generated from an application-provided seed, trial division is skipped). [Bodo Moeller] @@ -10178,7 +10369,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Add missing #ifndefs that caused missing symbols when building libssl as a shared library without RSA. Use #ifndef NO_SSL2 instead of - NO_RSA in ssl/s2*.c. + NO_RSA in ssl/s2*.c. [Kris Kennaway , modified by Ulf Möller] *) Precautions against using the PRNG uninitialized: RAND_bytes() now @@ -10220,9 +10411,9 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Honor the no-xxx Configure options when creating .DEF files. [Ulf Möller] - *) Add PKCS#10 attributes to field table: challengePassword, + *) Add PKCS#10 attributes to field table: challengePassword, unstructuredName and unstructuredAddress. These are taken from - draft PKCS#9 v2.0 but are compatible with v1.2 provided no + draft PKCS#9 v2.0 but are compatible with v1.2 provided no international characters are used. More changes to X509_ATTRIBUTE code: allow the setting of types @@ -10374,9 +10565,9 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k With these changes, a new set of functions and macros have appeared: - CRYPTO_set_mem_debug_functions() [F] + CRYPTO_set_mem_debug_functions() [F] CRYPTO_get_mem_debug_functions() [F] - CRYPTO_dbg_set_options() [F] + CRYPTO_dbg_set_options() [F] CRYPTO_dbg_get_options() [F] CRYPTO_malloc_debug_init() [M] @@ -10389,7 +10580,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k debugging functions are used, CRYPTO_dbg_set_options can be used to request additional information: CRYPTO_dbg_set_options(V_CYRPTO_MDEBUG_xxx) corresponds to setting - the CRYPTO_MDEBUG_xxx macro when compiling the library. + the CRYPTO_MDEBUG_xxx macro when compiling the library. Also, things like CRYPTO_set_mem_functions will always give the expected result (the new set of functions is used for allocation @@ -10532,7 +10723,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k other than PKCS#8 should be dumped: but the other formats have to stay in the name of compatibility. - With public keys and the benefit of hindsight one standard format + With public keys and the benefit of hindsight one standard format is used which works with EVP_PKEY, RSA or DSA structures: though it clearly returns an error if you try to read the wrong kind of key. @@ -10649,7 +10840,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k will also read in any additional "auxiliary information". By doing things this way a fair degree of compatibility can be retained: existing certificates can have this information added - using the new 'x509' options. + using the new 'x509' options. Current auxiliary information includes an "alias" and some trust settings. The trust settings will ultimately be used in enhanced @@ -10665,7 +10856,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k performance improvement for 1024 bit RSA signs. [Mark Cox] - *) Hack to fix PKCS#7 decryption when used with some unorthodox RC2 + *) Hack to fix PKCS#7 decryption when used with some unorthodox RC2 handling. Most clients have the effective key size in bits equal to the key length in bits: so a 40 bit RC2 key uses a 40 bit (5 byte) key. A few however don't do this and instead use the size of the decrypted key @@ -10677,7 +10868,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k the key length and effective key length are equal. [Steve Henson] - *) Add a bunch of functions that should simplify the creation of + *) Add a bunch of functions that should simplify the creation of X509_NAME structures. Now you should be able to do: X509_NAME_add_entry_by_txt(nm, "CN", MBSTRING_ASC, "Steve", -1, -1, 0); and have it automatically work out the correct field type and fill in @@ -10710,7 +10901,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Use the random seed file in some applications that previously did not: ca, - dsaparam -genkey (which also ignored its '-rand' option), + dsaparam -genkey (which also ignored its '-rand' option), s_client, s_server, x509 (when signing). @@ -10747,7 +10938,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Add various functions that can check a certificate's extensions to see if it usable for various purposes such as SSL client, - server or S/MIME and CAs of these types. This is currently + server or S/MIME and CAs of these types. This is currently VERY EXPERIMENTAL but will ultimately be used for certificate chain verification. Also added a -purpose flag to x509 utility to print out all the purposes. @@ -10920,7 +11111,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k provides hooks that allow the default DSA functions or functions on a "per key" basis to be replaced. This allows hardware acceleration and hardware key storage to be handled without major modification to the - library. Also added low level modexp hooks and CRYPTO_EX structure and + library. Also added low level modexp hooks and CRYPTO_EX structure and associated functions. [Steve Henson] @@ -10965,7 +11156,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k [Bodo Moeller] Changes between 0.9.3a and 0.9.4 [09 Aug 1999] - + *) Install libRSAglue.a when OpenSSL is built with RSAref. [Ralf S. Engelschall] @@ -11054,7 +11245,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k delete an unused file. [Ulf Möller] - *) Add support for the the free Netwide assembler (NASM) under Win32, + *) Add support for the free Netwide assembler (NASM) under Win32, since not many people have MASM (ml) and it can be hard to obtain. This is currently experimental but it seems to work OK and pass all the tests. Check out INSTALL.W32 for info. @@ -11070,7 +11261,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k for verifying the consistency of RSA keys. [Ulf Moeller, Bodo Moeller] - *) Various changes to make Win32 compile work: + *) Various changes to make Win32 compile work: 1. Casts to avoid "loss of data" warnings in p5_crpt2.c 2. Change unsigned int to int in b_dump.c to avoid "signed/unsigned comparison" warnings. @@ -11094,7 +11285,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Omitting parameters is no longer recommended. The test was also the wrong way round! This was probably due to unusual behaviour in - EVP_cmp_parameters() which returns 1 if the parameters match. + EVP_cmp_parameters() which returns 1 if the parameters match. This meant that parameters were omitted when they *didn't* match and the certificate was useless. Certificates signed with 'ca' didn't have this bug. @@ -11171,7 +11362,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Complete the PEM_* macros with DECLARE_PEM versions to replace the function prototypes in pem.h, also change util/mkdef.pl to add the - necessary function names. + necessary function names. [Steve Henson] *) mk1mf.pl (used by Windows builds) did not properly read the @@ -11211,7 +11402,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Add initial documentation of the X509V3 functions. [Steve Henson] - *) Add a new pair of functions PEM_write_PKCS8PrivateKey() and + *) Add a new pair of functions PEM_write_PKCS8PrivateKey() and PEM_write_bio_PKCS8PrivateKey() that are equivalent to PEM_write_PrivateKey() and PEM_write_bio_PrivateKey() but use the more secure PKCS#8 private key format with a high iteration count. @@ -11353,11 +11544,11 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Changes between 0.9.2b and 0.9.3 [24 May 1999] *) Bignum library bug fix. IRIX 6 passes "make test" now! - This also avoids the problems with SC4.2 and unpatched SC5. + This also avoids the problems with SC4.2 and unpatched SC5. [Andy Polyakov ] *) New functions sk_num, sk_value and sk_set to replace the previous macros. - These are required because of the typesafe stack would otherwise break + These are required because of the typesafe stack would otherwise break existing code. If old code used a structure member which used to be STACK and is now STACK_OF (for example cert in a PKCS7_SIGNED structure) with sk_num or sk_value it would produce an error because the num, data members @@ -11418,7 +11609,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fix various things to let OpenSSL even pass ``egcc -pipe -O2 -Wall -Wshadow -Wpointer-arith -Wcast-align -Wmissing-prototypes - -Wmissing-declarations -Wnested-externs -Winline'' with EGCS 1.1.2+ + -Wmissing-declarations -Wnested-externs -Winline'' with EGCS 1.1.2+ [Ralf S. Engelschall] *) Various fixes to the EVP and PKCS#7 code. It may now be able to @@ -11439,7 +11630,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k in different behaviour than observed with earlier library versions: Changing settings for an SSL_CTX *ctx after having done s = SSL_new(ctx) does not influence s as it used to. - + In order to clean up things more thoroughly, inside SSL_SESSION we don't use CERT any longer, but a new structure SESS_CERT that holds per-session data (if available); currently, this is @@ -11487,7 +11678,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Update HPUX configuration. [Anonymous] - + *) Add missing sk__unshift() function to safestack.h [Ralf S. Engelschall] @@ -11591,11 +11782,11 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fix lots of warnings. [Richard Levitte ] - + *) In add_cert_dir() in crypto/x509/by_dir.c, break out of the loop if the directory spec didn't end with a LIST_SEPARATOR_CHAR. [Richard Levitte ] - + *) Fix problems with sizeof(long) == 8. [Andy Polyakov ] @@ -11679,7 +11870,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Bugfix: In test/testenc, don't test "openssl " for ciphers that were excluded, e.g. by -DNO_IDEA. Also, test - all available cipers including rc5, which was forgotten until now. + all available ciphers including rc5, which was forgotten until now. In order to let the testing shell script know which algorithms are available, a new (up to now undocumented) command "openssl list-cipher-commands" is used. @@ -11706,7 +11897,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) New config option to avoid instructions that are illegal on the 80386. The default code is faster, but requires at least a 486. [Ulf Möller] - + *) Got rid of old SSL2_CLIENT_VERSION (inconsistently used) and SSL2_SERVER_VERSION (not used at all) macros, which are now the same as SSL2_VERSION anyway. @@ -11749,8 +11940,8 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k OAEP isn't supported when OpenSSL is built with RSAref. [Ulf Moeller ] - *) Move definitions of IS_SET/IS_SEQUENCE inside crypto/asn1/asn1.h - so they no longer are missing under -DNOPROTO. + *) Move definitions of IS_SET/IS_SEQUENCE inside crypto/asn1/asn1.h + so they no longer are missing under -DNOPROTO. [Soren S. Jorvang ] @@ -11907,14 +12098,14 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k [Ben Laurie] *) Add a bunch of fixes to the PKCS#7 stuff. It used to sometimes reorder - signed attributes when verifying signatures (this would break them), + signed attributes when verifying signatures (this would break them), the detached data encoding was wrong and public keys obtained using X509_get_pubkey() weren't freed. [Steve Henson] *) Add text documentation for the BUFFER functions. Also added a work around to a Win95 console bug. This was triggered by the password read stuff: the - last character typed gets carried over to the next fread(). If you were + last character typed gets carried over to the next fread(). If you were generating a new cert request using 'req' for example then the last character of the passphrase would be CR which would then enter the first field as blank. @@ -11923,7 +12114,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Added the new `Includes OpenSSL Cryptography Software' button as doc/openssl_button.{gif,html} which is similar in style to the old SSLeay button and can be used by applications based on OpenSSL to show the - relationship to the OpenSSL project. + relationship to the OpenSSL project. [Ralf S. Engelschall] *) Remove confusing variables in function signatures in files @@ -11954,7 +12145,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k See http://www.stack.nl/~dimitri/doxygen/index.html, and run doxygen with openssl.doxy as the configuration file. [Ben Laurie] - + *) Get rid of remaining C++-style comments which strict C compilers hate. [Ralf S. Engelschall, pointed out by Carlos Amengual] @@ -11967,12 +12158,12 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k their SSL_CTX_xxx() counterparts but work on a per-connection basis. This is needed for applications which have to configure certificates on a per-connection basis (e.g. Apache+mod_ssl) instead of a per-context basis - (e.g. s_server). + (e.g. s_server). For the RSA certificate situation is makes no difference, but for the DSA certificate situation this fixes the "no shared cipher" problem where the OpenSSL cipher selection procedure failed because the temporary keys were not overtaken from the context and the API provided - no way to reconfigure them. + no way to reconfigure them. The new functions now let applications reconfigure the stuff and they are in detail: SSL_need_tmp_RSA, SSL_set_tmp_rsa, SSL_set_tmp_dh, SSL_set_tmp_rsa_callback and SSL_set_tmp_dh_callback. Additionally a new @@ -12119,7 +12310,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k message is now correct (it understands "crypto" and "ssl" on its command line). There is also now an "update" option. This will update the util/ssleay.num and util/libeay.num files with any new functions. - If you do a: + If you do a: perl util/mkdef.pl crypto ssl update it will update them. [Steve Henson] @@ -12170,7 +12361,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fixed ms/32all.bat script: `no_asm' -> `no-asm' [Rainer W. Gerling ] - + *) New program nseq to manipulate netscape certificate sequences [Steve Henson] @@ -12225,7 +12416,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Spelling mistake in C version of CAST-128. [Ben Laurie, reported by Jeremy Hylton ] - *) Changes to the error generation code. The perl script err-code.pl + *) Changes to the error generation code. The perl script err-code.pl now reads in the old error codes and retains the old numbers, only adding new ones if necessary. It also only changes the .err files if new codes are added. The makefiles have been modified to only insert errors @@ -12277,7 +12468,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) The function OBJ_txt2nid was broken. It was supposed to return a nid based on a text string, looking up short and long names and finally "dot" format. The "dot" format stuff didn't work. Added new function - OBJ_txt2obj to do the same but return an ASN1_OBJECT and rewrote + OBJ_txt2obj to do the same but return an ASN1_OBJECT and rewrote OBJ_txt2nid to use it. OBJ_txt2obj can also return objects even if the OID is not part of the table. [Steve Henson] @@ -12371,7 +12562,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fix renumbering bug in X509_NAME_delete_entry(). [Ben Laurie] - *) Enhanced the err-ins.pl script so it makes the error library number + *) Enhanced the err-ins.pl script so it makes the error library number global and can add a library name. This is needed for external ASN1 and other error libraries. [Steve Henson] @@ -12379,7 +12570,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fixed sk_insert which never worked properly. [Steve Henson] - *) Fix ASN1 macros so they can handle indefinite length constructed + *) Fix ASN1 macros so they can handle indefinite length constructed EXPLICIT tags. Some non standard certificates use these: they can now be read in. [Steve Henson] @@ -12424,10 +12615,10 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Changes between 0.9.1b and 0.9.1c [23-Dec-1998] - *) Added OPENSSL_VERSION_NUMBER to crypto/crypto.h and + *) Added OPENSSL_VERSION_NUMBER to crypto/crypto.h and changed SSLeay to OpenSSL in version strings. [Ralf S. Engelschall] - + *) Some fixups to the top-level documents. [Paul Sutton] @@ -12435,7 +12626,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k because the symlink to include/ was missing. [Ralf S. Engelschall] - *) Incorporated the popular no-RSA/DSA-only patches + *) Incorporated the popular no-RSA/DSA-only patches which allow to compile a RSA-free SSLeay. [Andrew Cooke / Interrader Ldt., Ralf S. Engelschall] @@ -12443,7 +12634,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k when "ssleay" is still not found. [Ralf S. Engelschall] - *) Added more platforms to Configure: Cray T3E, HPUX 11, + *) Added more platforms to Configure: Cray T3E, HPUX 11, [Ralf S. Engelschall, Beckmann ] *) Updated the README file. @@ -12459,13 +12650,13 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Cleaned up the top-level documents; o new files: CHANGES and LICENSE - o merged VERSION, HISTORY* and README* files a CHANGES.SSLeay + o merged VERSION, HISTORY* and README* files a CHANGES.SSLeay o merged COPYRIGHT into LICENSE o removed obsolete TODO file o renamed MICROSOFT to INSTALL.W32 [Ralf S. Engelschall] - *) Removed dummy files from the 0.9.1b source tree: + *) Removed dummy files from the 0.9.1b source tree: crypto/asn1/x crypto/bio/cd crypto/bio/fg crypto/bio/grep crypto/bio/vi crypto/bn/asm/......add.c crypto/bn/asm/a.out crypto/dsa/f crypto/md5/f crypto/pem/gmon.out crypto/perlasm/f crypto/pkcs7/build crypto/rsa/f @@ -12481,7 +12672,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k Young and Tim J. Hudson created while they were working for C2Net until summer 1998. [The OpenSSL Project] - + Changes between 0.9.0b and 0.9.1b [not released] @@ -12491,17 +12682,17 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Changed some BIGNUM api stuff. [Eric A. Young] - *) Various platform ports: OpenBSD, Ultrix, IRIX 64bit, NetBSD, + *) Various platform ports: OpenBSD, Ultrix, IRIX 64bit, NetBSD, DGUX x86, Linux Alpha, etc. [Eric A. Young] - *) New COMP library [crypto/comp/] for SSL Record Layer Compression: + *) New COMP library [crypto/comp/] for SSL Record Layer Compression: RLE (dummy implemented) and ZLIB (really implemented when ZLIB is available). [Eric A. Young] - *) Add -strparse option to asn1pars program which parses nested - binary structures + *) Add -strparse option to asn1pars program which parses nested + binary structures [Dr Stephen Henson ] *) Added "oid_file" to ssleay.cnf for "ca" and "req" programs. @@ -12580,7 +12771,7 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k *) Fixed various code and comment typos. [Eric A. Young] - *) A minor bug in ssl/s3_clnt.c where there would always be 4 0 + *) A minor bug in ssl/s3_clnt.c where there would always be 4 0 bytes sent in the client random. [Edward Bishop ] diff --git a/CONTRIBUTING b/CONTRIBUTING index 1eebaf37..08c607aa 100644 --- a/CONTRIBUTING +++ b/CONTRIBUTING @@ -50,5 +50,5 @@ acceptance and review process faster: test/README for information on the test framework. 6. New features or changed functionality must include - documentation. Please look at the "pod" files in doc/apps, doc/crypto - and doc/ssl for examples of our style. + documentation. Please look at the "pod" files in doc/man[1357] + for examples of our style. diff --git a/Configurations/00-base-templates.conf b/Configurations/00-base-templates.conf index 3455b3ac..0350997f 100644 --- a/Configurations/00-base-templates.conf +++ b/Configurations/00-base-templates.conf @@ -1,14 +1,18 @@ # -*- Mode: perl -*- -%targets=( +my %targets=( DEFAULTS => { template => 1, cflags => "", + cppflags => "", + lflags => "", defines => [], + includes => [], thread_scheme => "(unknown)", # Assume we don't know thread_defines => [], apps_aux_src => "", + apps_init_src => "", cpuid_asm_src => "mem_clr.c", uplink_aux_src => "", bn_asm_src => "bn_asm.c", @@ -36,12 +40,30 @@ shared_rcflag => "", shared_extension => "", - build_scheme => [ "unified", "unix" ], - build_file => "Makefile", + #### Defaults for the benefit of the config targets who don't inherit + #### a BASE and assume Unixly defaults + #### THESE WILL DISAPPEAR IN OpenSSL 1.2 + build_scheme => [ "unified", "unix" ], + build_file => "Makefile", + + ar => "ar", + arflags => "r", + cc => "cc", + hashbangperl => "/usr/bin/env perl", + ranlib => sub { which("$config{cross_compile_prefix}ranlib") + ? "ranlib" : "" }, + rc => "windres", + + #### THESE WILL BE ENABLED IN OpenSSL 1.2 + #hashbangperl => "PERL", # Only Unix actually cares }, BASE_common => { template => 1, + + enable => [], + disable => [], + defines => sub { my @defs = (); @@ -49,24 +71,32 @@ push @defs, "ZLIB_SHARED" unless $disabled{"zlib-dynamic"}; return [ @defs ]; }, + includes => + sub { + my @incs = (); + push @incs, $withargs{zlib_include} + if !$disabled{zlib} && $withargs{zlib_include}; + return [ @incs ]; + }, }, BASE_unix => { inherit_from => [ "BASE_common" ], template => 1, + ar => "ar", + arflags => "r", + cc => "cc", + lflags => + sub { $withargs{zlib_lib} ? "-L".$withargs{zlib_lib} : () }, ex_libs => - sub { - unless ($disabled{zlib}) { - if (defined($disabled{"zlib-dynamic"})) { - if (defined($withargs{zlib_lib})) { - return "-L".$withargs{zlib_lib}." -lz"; - } else { - return "-lz"; - } - } - } - return (); }, + sub { !defined($disabled{zlib}) + && defined($disabled{"zlib-dynamic"}) + ? "-lz" : () }, + hashbangperl => "/usr/bin/env perl", # Only Unix actually cares + ranlib => sub { which("$config{cross_compile_prefix}ranlib") + ? "ranlib" : "" }, + rc => "windres", build_scheme => [ "unified", "unix" ], build_file => "Makefile", @@ -107,13 +137,23 @@ inherit_from => [ "BASE_common" ], template => 1, + includes => + add(sub { + my @incs = (); + # GNV$ZLIB_INCLUDE is the standard logical name for later + # zlib incarnations. + push @incs, 'GNV$ZLIB_INCLUDE:' + if !$disabled{zlib} && !$withargs{zlib_include}; + return [ @incs ]; + }), + build_file => "descrip.mms", build_scheme => [ "unified", "VMS" ], }, uplink_common => { template => 1, - apps_aux_src => add("../ms/applink.c"), + apps_init_src => add("../ms/applink.c"), uplink_aux_src => add("../ms/uplink.c"), defines => add("OPENSSL_USE_APPLINK"), }, @@ -163,7 +203,7 @@ template => 1, cpuid_asm_src => "x86_64cpuid.s", bn_asm_src => "asm/x86_64-gcc.c x86_64-mont.s x86_64-mont5.s x86_64-gf2m.s rsaz_exp.c rsaz-x86_64.s rsaz-avx2.s", - ec_asm_src => "ecp_nistz256.c ecp_nistz256-x86_64.s", + ec_asm_src => "ecp_nistz256.c ecp_nistz256-x86_64.s x25519-x86_64.s", aes_asm_src => "aes-x86_64.s vpaes-x86_64.s bsaes-x86_64.s aesni-x86_64.s aesni-sha1-x86_64.s aesni-sha256-x86_64.s aesni-mb-x86_64.s", md5_asm_src => "md5-x86_64.s", sha1_asm_src => "sha1-x86_64.s sha256-x86_64.s sha512-x86_64.s sha1-mb-x86_64.s sha256-mb-x86_64.s", @@ -180,9 +220,7 @@ cpuid_asm_src => "ia64cpuid.s", bn_asm_src => "bn-ia64.s ia64-mont.s", aes_asm_src => "aes_core.c aes_cbc.c aes-ia64.s", - md5_asm_src => "md5-ia64.s", sha1_asm_src => "sha1-ia64.s sha256-ia64.s sha512-ia64.s", - rc4_asm_src => "rc4-ia64.s rc4_skey.c", modes_asm_src => "ghash-ia64.s", perlasm_scheme => "void" }, @@ -217,7 +255,7 @@ }, mips32_asm => { template => 1, - bn_asm_src => "bn-mips.s mips-mont.s", + bn_asm_src => "bn-mips.S mips-mont.S", aes_asm_src => "aes_cbc.c aes-mips.S", sha1_asm_src => "sha1-mips.S sha256-mips.S", }, @@ -276,18 +314,20 @@ inherit_from => [ "parisc11_asm" ], perlasm_scheme => "64", }, - ppc64_asm => { + ppc32_asm => { template => 1, cpuid_asm_src => "ppccpuid.s ppccap.c", - bn_asm_src => "bn-ppc.s ppc-mont.s ppc64-mont.s", + bn_asm_src => "bn-ppc.s ppc-mont.s", aes_asm_src => "aes_core.c aes_cbc.c aes-ppc.s vpaes-ppc.s aesp8-ppc.s", sha1_asm_src => "sha1-ppc.s sha256-ppc.s sha512-ppc.s sha256p8-ppc.s sha512p8-ppc.s", modes_asm_src => "ghashp8-ppc.s", chacha_asm_src => "chacha-ppc.s", poly1305_asm_src=> "poly1305-ppc.s poly1305-ppcfp.s", }, - ppc32_asm => { - inherit_from => [ "ppc64_asm" ], - template => 1 + ppc64_asm => { + inherit_from => [ "ppc32_asm" ], + template => 1, + ec_asm_src => "ecp_nistz256.c ecp_nistz256-ppc64.s", + }, ); diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf index b49f04b5..3ee07176 100644 --- a/Configurations/10-main.conf +++ b/Configurations/10-main.conf @@ -53,14 +53,14 @@ my $vc_wince_info = {}; sub vc_wince_info { unless (%$vc_wince_info) { # sanity check - $die->('%OSVERSION% is not defined') if (!defined($ENV{'OSVERSION'})); - $die->('%PLATFORM% is not defined') if (!defined($ENV{'PLATFORM'})); - $die->('%TARGETCPU% is not defined') if (!defined($ENV{'TARGETCPU'})); + $die->('%OSVERSION% is not defined') if (!defined(env('OSVERSION'))); + $die->('%PLATFORM% is not defined') if (!defined(env('PLATFORM'))); + $die->('%TARGETCPU% is not defined') if (!defined(env('TARGETCPU'))); # # Idea behind this is to mimic flags set by eVC++ IDE... # - my $wcevers = $ENV{'OSVERSION'}; # WCENNN + my $wcevers = env('OSVERSION'); # WCENNN my $wcevernum; my $wceverdotnum; if ($wcevers =~ /^WCE([1-9])([0-9]{2})$/) { @@ -74,12 +74,12 @@ sub vc_wince_info { my $wcecdefs = "-D_WIN32_WCE=$wcevernum -DUNDER_CE=$wcevernum"; # -D_WIN32_WCE=NNN my $wcelflag = "/subsystem:windowsce,$wceverdotnum"; # ...,N.NN - my $wceplatf = $ENV{'PLATFORM'}; + my $wceplatf = env('PLATFORM'); $wceplatf =~ tr/a-z0-9 /A-Z0-9_/; $wcecdefs .= " -DWCE_PLATFORM_$wceplatf"; - my $wcetgt = $ENV{'TARGETCPU'}; # just shorter name... + my $wcetgt = env('TARGETCPU'); # just shorter name... SWITCH: for($wcetgt) { /^X86/ && do { $wcecdefs.=" -Dx86 -D_X86_ -D_i386_ -Di_386_"; $wcelflag.=" /machine:X86"; last; }; @@ -107,7 +107,7 @@ sub vc_wince_info { $wcelflag.=" /machine:$wcetgt"; last; }; } - $vc_wince_info = { cflags => $wcecdefs, + $vc_wince_info = { cppflags => $wcecdefs, lflags => $wcelflag }; } return $vc_wince_info; @@ -116,13 +116,19 @@ sub vc_wince_info { # Helper functions for the VMS configs my $vms_info = {}; sub vms_info { - unless (%$vms_info) { - my $pointer_size = shift; - my $pointer_size_str = $pointer_size == 0 ? "" : "$pointer_size"; + my $pointer_size_str = $config{target} =~ m|-p(\d+)$| ? $1 : ""; + # For the case where Configure iterate through all config targets, such + # as when listing them and their details, we reset info if the pointer + # size changes. + if (%$vms_info && $vms_info->{pointer_size} ne $pointer_size_str) { + $vms_info = {}; + } + + unless (%$vms_info) { $vms_info->{disable_warns} = [ ]; $vms_info->{pointer_size} = $pointer_size_str; - if ($pointer_size == 64) { + if ($pointer_size_str eq "64") { `PIPE CC /NOCROSS_REFERENCE /NOLIST /NOOBJECT /WARNINGS = DISABLE = ( MAYLOSEDATA3, EMPTYFILE ) NL: 2> NL:`; if ($? == 0) { push @{$vms_info->{disable_warns}}, "MAYLOSEDATA3"; @@ -140,14 +146,25 @@ sub vms_info { $vms_info->{def_zlib} =~ s|/.*$||g; } } + + if ($config{target} =~ /-ia64/) { + `PIPE ias -H 2> NL:`; + if ($? == 0) { + $vms_info->{as} = "ias"; + $vms_info->{asflags} = '-d debug "-N" vms_upcase'; + $vms_info->{asoutflag} = "-o"; + $vms_info->{perlasm_scheme} = "ias"; + } + } } return $vms_info; } -%targets = ( +my %targets = ( #### Basic configs that should work on any 32-bit box "gcc" => { + inherit_from => [ "BASE_unix" ], cc => "gcc", cflags => picker(debug => "-O0 -g", release => "-O3"), @@ -155,6 +172,7 @@ sub vms_info { bn_ops => "BN_LLONG", }, "cc" => { + inherit_from => [ "BASE_unix" ], cc => "cc", cflags => "-O", thread_scheme => "(unknown)", @@ -164,12 +182,13 @@ sub vms_info { "vos-gcc" => { inherit_from => [ "BASE_unix" ], cc => "gcc", - cflags => picker(default => "-Wall -DOPENSSL_SYS_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN", + cflags => picker(default => "-Wall", debug => "-O0 -g", release => "-O3"), + cppflags => "-D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN", thread_scheme => "(unknown)", sys_id => "VOS", - lflags => "-Wl,-map", + lflags => add("-Wl,-map"), bn_ops => "BN_LLONG", shared_extension => ".so", }, @@ -178,32 +197,25 @@ sub vms_info { "solaris-common" => { inherit_from => [ "BASE_unix" ], template => 1, - cflags => "-DFILIO_H", + cppflags => "-DFILIO_H", ex_libs => add("-lsocket -lnsl -ldl"), dso_scheme => "dlfcn", thread_scheme => "pthreads", shared_target => "solaris-shared", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, #### Solaris x86 with GNU C setups "solaris-x86-gcc" => { # NB. GNU C has to be configured to use GNU assembler, and not # /usr/ccs/bin/as. Failure to comply will result in compile # failures [at least] in 32-bit build. - # [Above statement is in direct contradition with one below. - # Latter is kept, because it's formally inappropriate to - # modify compile flags in letter release.] - # -DOPENSSL_NO_INLINE_ASM switches off inline assembler. We have - # to do it here because whenever GNU C instantiates an assembler - # template it surrounds it with #APP #NO_APP comment pair which - # (at least Solaris 7_x86) /usr/ccs/bin/as fails to assemble - # with "Illegal mnemonic" error message. inherit_from => [ "solaris-common", asm("x86_elf_asm") ], cc => "gcc", - cflags => add_before(picker(default => "-Wall -DL_ENDIAN -DOPENSSL_NO_INLINE_ASM", + cflags => add_before(picker(default => "-Wall", debug => "-O0 -g", release => "-O3 -fomit-frame-pointer"), threads("-pthread")), + cppflags => add("-DL_ENDIAN"), ex_libs => add(threads("-pthread")), bn_ops => "BN_LLONG", shared_cflag => "-fPIC", @@ -217,18 +229,19 @@ sub vms_info { # gcc shared build with Sun C. Given that gcc generates faster # code [thanks to inline assembler], I would actually recommend # to consider using gcc shared build even with vendor compiler:-) - # + # -- inherit_from => [ "solaris-common", asm("x86_64_asm") ], cc => "gcc", - cflags => add_before(picker(default => "-m64 -Wall -DL_ENDIAN", + cflags => add_before(picker(default => "-m64 -Wall", debug => "-O0 -g", release => "-O3"), threads("-pthread")), + cppflags => add("-DL_ENDIAN"), ex_libs => add(threads("-pthread")), bn_ops => "SIXTY_FOUR_BIT_LONG", perlasm_scheme => "elf", shared_cflag => "-fPIC", - shared_ldflag => "-m64 -shared -static-libgcc", + shared_ldflag => "-shared -static-libgcc", multilib => "/64", }, @@ -248,17 +261,17 @@ sub vms_info { "solaris64-x86_64-cc" => { inherit_from => [ "solaris-common", asm("x86_64_asm") ], cc => "cc", - cflags => add_before(picker(default => "-xarch=generic64 -xstrconst -Xa -DL_ENDIAN", + cflags => add_before(picker(default => "-xarch=generic64 -xstrconst -Xa", debug => "-g", - release => "-xO5 -xdepend -xbuiltin"), - threads("-D_REENTRANT")), + release => "-xO5 -xdepend -xbuiltin")), + cppflags => add("-DL_ENDIAN", threads("-D_REENTRANT")), thread_scheme => "pthreads", - lflags => add("-xarch=generic64",threads("-mt")), + lflags => add(threads("-mt")), ex_libs => add(threads("-lpthread")), bn_ops => "SIXTY_FOUR_BIT_LONG", perlasm_scheme => "elf", shared_cflag => "-KPIC", - shared_ldflag => "-xarch=generic64 -G -dy -z text", + shared_ldflag => "-G -dy -z text", multilib => "/64", }, @@ -266,10 +279,11 @@ sub vms_info { "solaris-sparcv7-gcc" => { inherit_from => [ "solaris-common" ], cc => "gcc", - cflags => add_before(picker(default => "-Wall -DB_ENDIAN -DBN_DIV2W", + cflags => add_before(picker(default => "-Wall", debug => "-O0 -g", release => "-O3"), threads("-pthread")), + cppflags => add("-DB_ENDIAN -DBN_DIV2W"), ex_libs => add(threads("-pthread")), bn_ops => "BN_LLONG RC4_CHAR", shared_cflag => "-fPIC", @@ -289,7 +303,6 @@ sub vms_info { inherit_from => [ "solaris-sparcv9-gcc" ], cflags => sub { my $f=join(" ",@_); $f =~ s/\-m32/-m64/; $f; }, bn_ops => "BN_LLONG RC4_CHAR", - shared_ldflag => "-m64 -shared", multilib => "/64", }, @@ -300,10 +313,11 @@ sub vms_info { "solaris-sparcv7-cc" => { inherit_from => [ "solaris-common" ], cc => "cc", - cflags => add_before(picker(default => "-xstrconst -Xa -DB_ENDIAN -DBN_DIV2W", + cflags => add_before(picker(default => "-xstrconst -Xa", debug => "-g", - release => "-xO5 -xdepend"), - threads("-D_REENTRANT")), + release => "-xO5 -xdepend")), + cppflags => add("-DB_ENDIAN -DBN_DIV2W", + threads("-D_REENTRANT")), lflags => add(threads("-mt")), ex_libs => add(threads("-lpthread")), bn_ops => "BN_LLONG RC4_CHAR", @@ -322,9 +336,7 @@ sub vms_info { "solaris64-sparcv9-cc" => { inherit_from => [ "solaris-sparcv7-cc", asm("sparcv9_asm") ], cflags => add_before("-xarch=v9"), - lflags => add_before("-xarch=v9"), bn_ops => "BN_LLONG RC4_CHAR", - shared_ldflag => "-xarch=v9 -G -dy -z text", multilib => "/64", }, @@ -333,9 +345,10 @@ sub vms_info { "irix-mips3-gcc" => { inherit_from => [ "BASE_unix", asm("mips64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-mabi=n32 -DB_ENDIAN -DBN_DIV3W", + cflags => combine(picker(default => "-mabi=n32", debug => "-g -O0", - release => "-O3"), + release => "-O3")), + cppflags => combine("-DB_ENDIAN -DBN_DIV3W", threads("-D_SGI_MP_SOURCE")), ex_libs => add(threads("-lpthread")), bn_ops => "RC4_CHAR SIXTY_FOUR_BIT", @@ -343,16 +356,16 @@ sub vms_info { perlasm_scheme => "n32", dso_scheme => "dlfcn", shared_target => "irix-shared", - shared_ldflag => "-mabi=n32", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "32", }, "irix-mips3-cc" => { inherit_from => [ "BASE_unix", asm("mips64_asm") ], cc => "cc", - cflags => combine(picker(default => "-n32 -mips3 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W", + cflags => combine(picker(default => "-n32 -mips3 -use_readonly_const -G0 -rdata_shared", debug => "-g -O0", - release => "-O2"), + release => "-O2")), + cppflags => combine("-DB_ENDIAN -DBN_DIV3W", threads("-D_SGI_MP_SOURCE")), ex_libs => add(threads("-lpthread")), bn_ops => "RC4_CHAR SIXTY_FOUR_BIT", @@ -360,17 +373,17 @@ sub vms_info { perlasm_scheme => "n32", dso_scheme => "dlfcn", shared_target => "irix-shared", - shared_ldflag => "-n32", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "32", }, # N64 ABI builds. "irix64-mips4-gcc" => { inherit_from => [ "BASE_unix", asm("mips64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-mabi=64 -mips4 -DB_ENDIAN -DBN_DIV3W", + cflags => combine(picker(default => "-mabi=64 -mips4", debug => "-g -O0", - release => "-O3"), + release => "-O3")), + cppflags => combine("-DB_ENDIAN -DBN_DIV3W", threads("-D_SGI_MP_SOURCE")), ex_libs => add(threads("-lpthread")), bn_ops => "RC4_CHAR SIXTY_FOUR_BIT_LONG", @@ -378,16 +391,16 @@ sub vms_info { perlasm_scheme => "64", dso_scheme => "dlfcn", shared_target => "irix-shared", - shared_ldflag => "-mabi=64", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "64", }, "irix64-mips4-cc" => { inherit_from => [ "BASE_unix", asm("mips64_asm") ], cc => "cc", - cflags => combine(picker(default => "-64 -mips4 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W", + cflags => combine(picker(default => "-64 -mips4 -use_readonly_const -G0 -rdata_shared", debug => "-g -O0", - release => "-O2"), + release => "-O2")), + cppflags => combine("-DB_ENDIAN -DBN_DIV3W", threads("-D_SGI_MP_SOURCE")), ex_libs => add(threads("-lpthread")), bn_ops => "RC4_CHAR SIXTY_FOUR_BIT_LONG", @@ -395,8 +408,7 @@ sub vms_info { perlasm_scheme => "64", dso_scheme => "dlfcn", shared_target => "irix-shared", - shared_ldflag => "-64", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "64", }, @@ -427,14 +439,13 @@ sub vms_info { # targets; b) performance-critical 32-bit assembly modules implement # even PA-RISC 2.0-specific code paths, which are chosen at run-time, # thus adequate performance is provided even with PA-RISC 1.1 build. -# "hpux-parisc-gcc" => { inherit_from => [ "BASE_unix" ], cc => "gcc", - cflags => combine(picker(default => "-DB_ENDIAN -DBN_DIV2W", - debug => "-O0 -g", + cflags => combine(picker(debug => "-O0 -g", release => "-O3"), threads("-pthread")), + cppflags => "-DB_ENDIAN -DBN_DIV2W", ex_libs => add("-Wl,+s -ldld", threads("-pthread")), bn_ops => "BN_LLONG", thread_scheme => "pthreads", @@ -442,7 +453,7 @@ sub vms_info { shared_target => "hpux-shared", shared_cflag => "-fPIC", shared_ldflag => "-shared", - shared_extension => ".sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", }, "hpux-parisc1_1-gcc" => { inherit_from => [ "hpux-parisc-gcc", asm("parisc11_asm") ], @@ -451,10 +462,9 @@ sub vms_info { "hpux64-parisc2-gcc" => { inherit_from => [ "BASE_unix", asm("parisc20_64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-DB_ENDIAN", - debug => "-O0 -g", - release => "-O3"), - threads("-D_REENTRANT")), + cflags => combine(picker(debug => "-O0 -g", + release => "-O3")), + cppflags => combine("-DB_ENDIAN", threads("-D_REENTRANT")), ex_libs => add("-ldl"), bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", thread_scheme => "pthreads", @@ -462,20 +472,18 @@ sub vms_info { shared_target => "hpux-shared", shared_cflag => "-fpic", shared_ldflag => "-shared", - shared_extension => ".sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", multilib => "/pa20_64", }, # More attempts at unified 10.X and 11.X targets for HP C compiler. - # - # Chris Ruemmler - # Kevin Steves "hpux-parisc-cc" => { inherit_from => [ "BASE_unix" ], cc => "cc", - cflags => combine(picker(default => "+Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY", + cflags => combine(picker(default => "+Optrs_strongly_typed -Ae +ESlit", debug => "+O0 +d -g", - release => "+O3"), + release => "+O3")), + cppflags => combine("-DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY", threads("-D_REENTRANT")), ex_libs => add("-Wl,+s -ldld",threads("-lpthread")), bn_ops => "RC4_CHAR", @@ -484,7 +492,7 @@ sub vms_info { shared_target => "hpux-shared", shared_cflag => "+Z", shared_ldflag => "-b", - shared_extension => ".sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", }, "hpux-parisc1_1-cc" => { inherit_from => [ "hpux-parisc-cc", asm("parisc11_asm") ], @@ -494,9 +502,10 @@ sub vms_info { "hpux64-parisc2-cc" => { inherit_from => [ "BASE_unix", asm("parisc20_64_asm") ], cc => "cc", - cflags => combine(picker(default => "+DD64 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY", + cflags => combine(picker(default => "+DD64 +Optrs_strongly_typed -Ae +ESlit", debug => "+O0 +d -g", - release => "+O3"), + release => "+O3")), + cppflags => combine("-DB_ENDIAN -DMD32_XARRAY", threads("-D_REENTRANT")), ex_libs => add("-ldl",threads("-lpthread")), bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", @@ -504,8 +513,8 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "hpux-shared", shared_cflag => "+Z", - shared_ldflag => "+DD64 -b", - shared_extension => ".sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_ldflag => "-b", + shared_extension => ".sl.\$(SHLIB_VERSION_NUMBER)", multilib => "/pa20_64", }, @@ -513,47 +522,45 @@ sub vms_info { "hpux-ia64-cc" => { inherit_from => [ "BASE_unix", asm("ia64_asm") ], cc => "cc", - cflags => combine(picker(default => "-Ae +DD32 +Olit=all -z -DB_ENDIAN", + cflags => combine(picker(default => "-Ae +DD32 +Olit=all -z", debug => "+O0 +d -g", - release => "+O2"), - threads("-D_REENTRANT")), + release => "+O2")), + cppflags => combine("-DB_ENDIAN", threads("-D_REENTRANT")), ex_libs => add("-ldl",threads("-lpthread")), bn_ops => "SIXTY_FOUR_BIT", thread_scheme => "pthreads", dso_scheme => "dlfcn", shared_target => "hpux-shared", shared_cflag => "+Z", - shared_ldflag => "+DD32 -b", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_ldflag => "-b", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "/hpux32", }, - # Frank Geurts has patiently assisted - # with debugging of the following config. "hpux64-ia64-cc" => { inherit_from => [ "BASE_unix", asm("ia64_asm") ], cc => "cc", - cflags => combine(picker(default => "-Ae +DD64 +Olit=all -z -DB_ENDIAN", + cflags => combine(picker(default => "-Ae +DD64 +Olit=all -z", debug => "+O0 +d -g", - release => "+O3"), - threads("-D_REENTRANT")), + release => "+O3")), + cppflags => combine("-DB_ENDIAN", threads("-D_REENTRANT")), ex_libs => add("-ldl", threads("-lpthread")), bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthreads", dso_scheme => "dlfcn", shared_target => "hpux-shared", shared_cflag => "+Z", - shared_ldflag => "+DD64 -b", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_ldflag => "-b", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "/hpux64", }, # GCC builds... "hpux-ia64-gcc" => { inherit_from => [ "BASE_unix", asm("ia64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-DB_ENDIAN", - debug => "-O0 -g", + cflags => combine(picker(debug => "-O0 -g", release => "-O3"), threads("-pthread")), + cppflags => "-DB_ENDIAN", ex_libs => add("-ldl", threads("-pthread")), bn_ops => "SIXTY_FOUR_BIT", thread_scheme => "pthreads", @@ -561,24 +568,25 @@ sub vms_info { shared_target => "hpux-shared", shared_cflag => "-fpic", shared_ldflag => "-shared", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "/hpux32", }, "hpux64-ia64-gcc" => { inherit_from => [ "BASE_unix", asm("ia64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-mlp64 -DB_ENDIAN", + cflags => combine(picker(default => "-mlp64", debug => "-O0 -g", release => "-O3"), threads("-pthread")), + cppflags => "-DB_ENDIAN", ex_libs => add("-ldl", threads("-pthread")), bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthreads", dso_scheme => "dlfcn", shared_target => "hpux-shared", shared_cflag => "-fpic", - shared_ldflag => "-mlp64 -shared", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_ldflag => "-shared", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "/hpux64", }, @@ -586,9 +594,12 @@ sub vms_info { "MPE/iX-gcc" => { inherit_from => [ "BASE_unix" ], cc => "gcc", - cflags => "-DBN_DIV2W -O3 -D_POSIX_SOURCE -D_SOCKET_SOURCE -I/SYSLOG/PUB", + cflags => "-O3", + cppflags => "-D_ENDIAN -DBN_DIV2W -D_POSIX_SOURCE -D_SOCKET_SOURCE", + includes => add("/SYSLOG/PUB"), sys_id => "MPE", - ex_libs => add("-L/SYSLOG/PUB -lsyslog -lsocket -lcurses"), + lflags => add("-L/SYSLOG/PUB"), + ex_libs => add("-lsyslog -lsocket -lcurses"), thread_scheme => "(unknown)", bn_ops => "BN_LLONG", }, @@ -600,8 +611,8 @@ sub vms_info { "tru64-alpha-gcc" => { inherit_from => [ "BASE_unix", asm("alpha_asm") ], cc => "gcc", - cflags => combine("-std=c9x -D_XOPEN_SOURCE=500 -D_OSF_SOURCE -O3", - threads("-pthread")), + cflags => combine("-std=c9x -O3", threads("-pthread")), + cppflags => "-D_XOPEN_SOURCE=500 -D_OSF_SOURCE", ex_libs => add("-lrt", threads("-pthread")), # for mlock(2) bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthreads", @@ -612,8 +623,9 @@ sub vms_info { "tru64-alpha-cc" => { inherit_from => [ "BASE_unix", asm("alpha_asm") ], cc => "cc", - cflags => combine("-std1 -D_XOPEN_SOURCE=500 -D_OSF_SOURCE -tune host -fast -readonly_strings", + cflags => combine("-std1 -tune host -fast -readonly_strings", threads("-pthread")), + cppflags => "-D_XOPEN_SOURCE=500 -D_OSF_SOURCE", ex_libs => add("-lrt", threads("-pthread")), # for mlock(2) bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthreads", @@ -631,18 +643,24 @@ sub vms_info { "linux-generic32" => { inherit_from => [ "BASE_unix" ], cc => "gcc", + cxx => "g++", cflags => combine(picker(default => "-Wall", debug => "-O0 -g", release => "-O3"), threads("-pthread")), + cxxflags => combine(picker(default => "-std=c++11 -Wall", + debug => "-O0 -g", + release => "-O3"), + threads("-pthread")), + cppflags => "-DOPENSSL_USE_NODELETE", ex_libs => add("-ldl", threads("-pthread")), bn_ops => "BN_LLONG RC4_CHAR", thread_scheme => "pthreads", dso_scheme => "dlfcn", shared_target => "linux-shared", - shared_cflag => "-fPIC -DOPENSSL_USE_NODELETE", + shared_cflag => "-fPIC", shared_ldflag => "-Wl,-znodelete", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "linux-generic64" => { inherit_from => [ "linux-generic32" ], @@ -655,16 +673,16 @@ sub vms_info { }, "linux-ppc64" => { inherit_from => [ "linux-generic64", asm("ppc64_asm") ], - cflags => add("-m64 -DB_ENDIAN"), + cflags => add("-m64"), + cppflags => add("-DB_ENDIAN"), perlasm_scheme => "linux64", - shared_ldflag => add("-m64"), multilib => "64", }, "linux-ppc64le" => { inherit_from => [ "linux-generic64", asm("ppc64_asm") ], - cflags => add("-m64 -DL_ENDIAN"), + cflags => add("-m64"), + cppflags => add("-DL_ENDIAN"), perlasm_scheme => "linux64le", - shared_ldflag => add("-m64"), }, "linux-armv4" => { @@ -711,32 +729,31 @@ sub vms_info { cflags => add("-mabi=ilp32"), bn_ops => "SIXTY_FOUR_BIT RC4_CHAR", perlasm_scheme => "linux64", - shared_ldflag => add("-mabi=ilp32"), }, "linux-mips32" => { # Configure script adds minimally required -march for assembly # support, if no -march was specified at command line. inherit_from => [ "linux-generic32", asm("mips32_asm") ], - cflags => add("-mabi=32 -DBN_DIV3W"), + cflags => add("-mabi=32"), + cppflags => add("-DBN_DIV3W"), perlasm_scheme => "o32", - shared_ldflag => add("-mabi=32"), }, # mips32 and mips64 below refer to contemporary MIPS Architecture # specifications, MIPS32 and MIPS64, rather than to kernel bitness. "linux-mips64" => { inherit_from => [ "linux-generic32", asm("mips64_asm") ], - cflags => add("-mabi=n32 -DBN_DIV3W"), + cflags => add("-mabi=n32"), + cppflags => add("-DBN_DIV3W"), bn_ops => "SIXTY_FOUR_BIT RC4_CHAR", perlasm_scheme => "n32", - shared_ldflag => add("-mabi=n32"), multilib => "32", }, "linux64-mips64" => { inherit_from => [ "linux-generic64", asm("mips64_asm") ], - cflags => add("-mabi=64 -DBN_DIV3W"), + cflags => add("-mabi=64"), + cppflags => add("-DBN_DIV3W"), perlasm_scheme => "64", - shared_ldflag => add("-mabi=64"), multilib => "64", }, @@ -745,16 +762,17 @@ sub vms_info { #### machines where gcc doesn't understand -m32 and -m64 "linux-elf" => { inherit_from => [ "linux-generic32", asm("x86_elf_asm") ], - cflags => add(picker(default => "-DL_ENDIAN", - release => "-fomit-frame-pointer")), + cflags => add(picker(release => "-fomit-frame-pointer")), + cppflags => add("-DL_ENDIAN"), bn_ops => "BN_LLONG", }, "linux-aout" => { inherit_from => [ "BASE_unix", asm("x86_asm") ], cc => "gcc", - cflags => add(picker(default => "-DL_ENDIAN -Wall", + cflags => add(picker(default => "-Wall", debug => "-O0 -g", release => "-O3 -fomit-frame-pointer")), + cppflags => add("-DL_ENDIAN"), bn_ops => "BN_LLONG", thread_scheme => "(unknown)", perlasm_scheme => "a.out", @@ -763,37 +781,38 @@ sub vms_info { #### X86 / X86_64 targets "linux-x86" => { inherit_from => [ "linux-generic32", asm("x86_asm") ], - cflags => add(picker(default => "-m32 -DL_ENDIAN", + cflags => add(picker(default => "-m32", release => "-fomit-frame-pointer")), + cppflags => add("-DL_ENDIAN"), bn_ops => "BN_LLONG", perlasm_scheme => "elf", - shared_ldflag => add("-m32"), }, "linux-x86-clang" => { inherit_from => [ "linux-x86" ], cc => "clang", cxx => "clang++", - cflags => add("-Wextra -Qunused-arguments"), + cflags => add("-Wextra"), }, "linux-x86_64" => { inherit_from => [ "linux-generic64", asm("x86_64_asm") ], - cflags => add("-m64 -DL_ENDIAN"), + cflags => add("-m64"), + cppflags => add("-DL_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT_LONG", perlasm_scheme => "elf", - shared_ldflag => add("-m64"), multilib => "64", }, "linux-x86_64-clang" => { inherit_from => [ "linux-x86_64" ], cc => "clang", - cflags => add("-Wextra -Qunused-arguments"), + cxx => "clang++", + cflags => add("-Wextra"), }, "linux-x32" => { inherit_from => [ "linux-generic32", asm("x86_64_asm") ], - cflags => add("-mx32 -DL_ENDIAN"), + cflags => add("-mx32"), + cppflags => add("-DL_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT", perlasm_scheme => "elf32", - shared_ldflag => add("-mx32"), multilib => "x32", }, @@ -804,9 +823,9 @@ sub vms_info { "linux64-s390x" => { inherit_from => [ "linux-generic64", asm("s390x_asm") ], - cflags => add("-m64 -DB_ENDIAN"), + cflags => add("-m64"), + cppflags => add("-DB_ENDIAN"), perlasm_scheme => "64", - shared_ldflag => add("-m64"), multilib => "64", }, "linux32-s390x" => { @@ -827,46 +846,46 @@ sub vms_info { # sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1... # inherit_from => [ "linux-generic32", asm("s390x_asm") ], - cflags => add("-m31 -Wa,-mzarch -DB_ENDIAN"), + cflags => add("-m31 -Wa,-mzarch"), + cppflags => add("-DB_ENDIAN"), bn_asm_src => sub { my $r=join(" ",@_); $r=~s|asm/s390x\.S|bn_asm.c|; $r; }, perlasm_scheme => "31", - shared_ldflag => add("-m31"), multilib => "/highgprs", }, #### SPARC Linux setups - # Ray Miller has - # patiently assisted with debugging of following two configs. "linux-sparcv8" => { inherit_from => [ "linux-generic32", asm("sparcv8_asm") ], - cflags => add("-mcpu=v8 -DB_ENDIAN -DBN_DIV2W"), + cflags => add("-mcpu=v8"), + cppflags => add("-DB_ENDIAN -DBN_DIV2W"), }, "linux-sparcv9" => { # it's a real mess with -mcpu=ultrasparc option under Linux, # but -Wa,-Av8plus should do the trick no matter what. inherit_from => [ "linux-generic32", asm("sparcv9_asm") ], - cflags => add("-m32 -mcpu=ultrasparc -Wa,-Av8plus -DB_ENDIAN -DBN_DIV2W"), - shared_ldflag => add("-m32"), + cflags => add("-m32 -mcpu=ultrasparc -Wa,-Av8plus"), + cppflags => add("-DB_ENDIAN -DBN_DIV2W"), }, "linux64-sparcv9" => { # GCC 3.1 is a requirement inherit_from => [ "linux-generic64", asm("sparcv9_asm") ], - cflags => add("-m64 -mcpu=ultrasparc -DB_ENDIAN"), + cflags => add("-m64 -mcpu=ultrasparc"), + cppflags => add("-DB_ENDIAN"), bn_ops => "BN_LLONG RC4_CHAR", - shared_ldflag => add("-m64"), multilib => "64", }, "linux-alpha-gcc" => { inherit_from => [ "linux-generic64", asm("alpha_asm") ], - cflags => add("-DL_ENDIAN"), + cppflags => add("-DL_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT_LONG", }, "linux-c64xplus" => { inherit_from => [ "BASE_unix" ], # TI_CGT_C6000_7.3.x is a requirement cc => "cl6x", - cflags => combine("--linux -ea=.s -eo=.o -mv6400+ -o2 -ox -ms -pden -DOPENSSL_SMALL_FOOTPRINT", + cflags => "--linux -ea=.s -eo=.o -mv6400+ -o2 -ox -ms -pden", + cppflags => combine("-DOPENSSL_SMALL_FOOTPRINT", threads("-D_REENTRANT")), bn_ops => "BN_LLONG", cpuid_asm_src => "c64xpluscpuid.s", @@ -883,7 +902,7 @@ sub vms_info { shared_target => "linux-shared", shared_cflag => "--pic", shared_ldflag => add("-z --sysv --shared"), - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", ranlib => "true", }, @@ -960,6 +979,23 @@ sub vms_info { inherit_from => [ "android64", asm("aarch64_asm") ], perlasm_scheme => "linux64", }, + "android64-x86_64" => { + inherit_from => [ "android64", asm("x86_64_asm") ], + perlasm_scheme => "elf", + }, + "android64-mips64" => { + ############################################################ + # You are more than likely have to specify target processor + # on ./Configure command line. Trouble is that toolchain's + # default is MIPS64r6 (at least in r10d), but there are no + # such processors around (or they are too rare to spot one). + # Actual problem is that MIPS64r6 is binary incompatible + # with previous MIPS ISA versions, in sense that unlike + # prior versions original MIPS binary code will fail. + # + inherit_from => [ "android64", asm("mips64_asm") ], + perlasm_scheme => "64", + }, #### *BSD "BSD-generic32" => { @@ -975,13 +1011,16 @@ sub vms_info { cflags => combine(picker(default => "-Wall", debug => "-O0 -g", release => "-O3"), - threads("-pthread -D_THREAD_SAFE -D_REENTRANT")), + threads("-pthread")), + cppflags => threads("-D_THREAD_SAFE -D_REENTRANT"), + ex_libs => add(threads("-pthread")), + enable => add("devcryptoeng"), bn_ops => "BN_LLONG", thread_scheme => "pthreads", dso_scheme => "dlfcn", shared_target => "bsd-gcc-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "BSD-generic64" => { inherit_from => [ "BSD-generic32" ], @@ -990,8 +1029,8 @@ sub vms_info { "BSD-x86" => { inherit_from => [ "BSD-generic32", asm("x86_asm") ], - cflags => add(picker(default => "-DL_ENDIAN", - release => "-fomit-frame-pointer")), + cflags => add(picker(release => "-fomit-frame-pointer")), + cppflags => add("-DL_ENDIAN"), bn_ops => "BN_LLONG", shared_target => "bsd-shared", perlasm_scheme => "a.out", @@ -1003,26 +1042,27 @@ sub vms_info { "BSD-sparcv8" => { inherit_from => [ "BSD-generic32", asm("sparcv8_asm") ], - cflags => add("-mcpu=v8 -DB_ENDIAN"), + cflags => add("-mcpu=v8"), + cppflags => add("-DB_ENDIAN"), }, "BSD-sparc64" => { # -DMD32_REG_T=int doesn't actually belong in sparc64 target, it # simply *happens* to work around a compiler bug in gcc 3.3.3, # triggered by RIPEMD160 code. inherit_from => [ "BSD-generic64", asm("sparcv9_asm") ], - cflags => add("-DB_ENDIAN -DMD32_REG_T=int"), + cppflags => add("-DB_ENDIAN -DMD32_REG_T=int"), bn_ops => "BN_LLONG", }, "BSD-ia64" => { inherit_from => [ "BSD-generic64", asm("ia64_asm") ], - cflags => add_before("-DL_ENDIAN"), + cppflags => add("-DL_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT_LONG", }, "BSD-x86_64" => { inherit_from => [ "BSD-generic64", asm("x86_64_asm") ], - cflags => add_before("-DL_ENDIAN"), + cppflags => add("-DL_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT_LONG", perlasm_scheme => "elf", }, @@ -1030,14 +1070,15 @@ sub vms_info { "bsdi-elf-gcc" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], cc => "gcc", - cflags => "-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -Wall", + cflags => "-fomit-frame-pointer -O3 -Wall", + cppflags => "-DPERL5 -DL_ENDIAN", ex_libs => add("-ldl"), bn_ops => "BN_LLONG", thread_scheme => "(unknown)", dso_scheme => "dlfcn", shared_target => "bsd-gcc-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "nextstep" => { @@ -1061,7 +1102,8 @@ sub vms_info { "qnx4" => { inherit_from => [ "BASE_unix" ], cc => "cc", - cflags => "-DL_ENDIAN -DTERMIO", + cflags => "", + cppflags => "-DL_ENDIAN -DTERMIO", thread_scheme => "(unknown)", }, "QNX6" => { @@ -1071,17 +1113,18 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "bsd-gcc-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "QNX6-i386" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], cc => "gcc", - cflags => "-DL_ENDIAN -O2 -Wall", + cflags => "-O2 -Wall", + cppflags => "-DL_ENDIAN", ex_libs => add("-lsocket"), dso_scheme => "dlfcn", shared_target => "bsd-gcc-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, #### SCO/Caldera targets. @@ -1092,31 +1135,30 @@ sub vms_info { # and './Configure unixware-7 -Kpentium_pro' or whatever appropriate. # Note that not all targets include assembler support. Mostly because of # lack of motivation to support out-of-date platforms with out-of-date -# compiler drivers and assemblers. Tim Rice has -# patiently assisted to debug most of it. +# compiler drivers and assemblers. # # UnixWare 2.0x fails destest with -O. "unixware-2.0" => { inherit_from => [ "BASE_unix" ], cc => "cc", - cflags => combine("-DFILIO_H -DNO_STRINGS_H", - threads("-Kthread")), + cflags => combine(threads("-Kthread")), + cppflags => "-DFILIO_H -DNO_STRINGS_H", ex_libs => add("-lsocket -lnsl -lresolv -lx"), thread_scheme => "uithreads", }, "unixware-2.1" => { inherit_from => [ "BASE_unix" ], cc => "cc", - cflags => combine("-O -DFILIO_H", - threads("-Kthread")), + cflags => combine("-O", threads("-Kthread")), + cppflags => "-DFILIO_H", ex_libs => add("-lsocket -lnsl -lresolv -lx"), thread_scheme => "uithreads", }, "unixware-7" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], cc => "cc", - cflags => combine("-O -DFILIO_H -Kalloca", - threads("-Kthread")), + cflags => combine("-O -Kalloca", threads("-Kthread")), + cppflags => "-DFILIO_H", ex_libs => add("-lsocket -lnsl"), thread_scheme => "uithreads", bn_ops => "BN_LLONG", @@ -1124,13 +1166,14 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "svr5-shared", shared_cflag => "-Kpic", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "unixware-7-gcc" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], cc => "gcc", - cflags => combine("-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -Wall", - threads("-D_REENTRANT")), + cflags => combine("-O3 -fomit-frame-pointer -Wall"), + cppflags => add("-DL_ENDIAN -DFILIO_H", + threads("-D_REENTRANT")), ex_libs => add("-lsocket -lnsl"), bn_ops => "BN_LLONG", thread_scheme => "pthreads", @@ -1138,9 +1181,9 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "gnu-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, -# SCO 5 - Ben Laurie says the -O breaks the SCO cc. +# SCO 5 - Ben Laurie says the -O breaks the SCO cc. "sco5-cc" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], cc => "cc", @@ -1151,7 +1194,7 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "svr3-shared", shared_cflag => "-Kpic", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "sco5-gcc" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], @@ -1164,7 +1207,7 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "svr3-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, #### IBM's AIX. @@ -1176,10 +1219,10 @@ sub vms_info { "aix-gcc" => { inherit_from => [ "BASE_unix", asm("ppc32_asm") ], cc => "gcc", - cflags => combine(picker(default => "-DB_ENDIAN", - debug => "-O0 -g", + cflags => combine(picker(debug => "-O0 -g", release => "-O"), threads("-pthread")), + cppflags => "-DB_ENDIAN", ex_libs => add(threads("-pthread")), sys_id => "AIX", bn_ops => "BN_LLONG RC4_CHAR", @@ -1188,16 +1231,17 @@ sub vms_info { dso_scheme => "dlfcn", shared_target => "aix-shared", shared_ldflag => "-shared -static-libgcc -Wl,-G", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - arflags => "-X32", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", + arflags => "-X32 r", }, "aix64-gcc" => { inherit_from => [ "BASE_unix", asm("ppc64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-maix64 -DB_ENDIAN", + cflags => combine(picker(default => "-maix64", debug => "-O0 -g", release => "-O"), threads("-pthread")), + cppflags => "-DB_ENDIAN", ex_libs => add(threads("-pthread")), sys_id => "AIX", bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", @@ -1205,17 +1249,18 @@ sub vms_info { perlasm_scheme => "aix64", dso_scheme => "dlfcn", shared_target => "aix-shared", - shared_ldflag => "-maix64 -shared -static-libgcc -Wl,-G", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - arflags => "-X64", + shared_ldflag => "-shared -static-libgcc -Wl,-G", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", + arflags => "-X64 r", }, "aix-cc" => { inherit_from => [ "BASE_unix", asm("ppc32_asm") ], cc => "cc", - cflags => combine(picker(default => "-q32 -DB_ENDIAN -qmaxmem=16384 -qro -qroconst", + cflags => combine(picker(default => "-q32 -qmaxmem=16384 -qro -qroconst", debug => "-O0 -g", release => "-O"), - threads("-qthreaded -D_THREAD_SAFE")), + threads("-qthreaded")), + cppflags => combine("-DB_ENDIAN", threads("-D_THREAD_SAFE")), sys_id => "AIX", bn_ops => "BN_LLONG RC4_CHAR", thread_scheme => "pthreads", @@ -1223,17 +1268,18 @@ sub vms_info { perlasm_scheme => "aix32", dso_scheme => "dlfcn", shared_target => "aix-shared", - shared_ldflag => "-q32 -G", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - arflags => "-X 32", + shared_ldflag => "-G", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", + arflags => "-X32 r", }, "aix64-cc" => { inherit_from => [ "BASE_unix", asm("ppc64_asm") ], cc => "cc", - cflags => combine(picker(default => "-q64 -DB_ENDIAN -qmaxmem=16384 -qro -qroconst", + cflags => combine(picker(default => "-q64 -qmaxmem=16384 -qro -qroconst", debug => "-O0 -g", release => "-O"), - threads("-qthreaded -D_THREAD_SAFE")), + threads("-qthreaded")), + cppflags => combine("-DB_ENDIAN", threads("-D_THREAD_SAFE")), sys_id => "AIX", bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", thread_scheme => "pthreads", @@ -1241,16 +1287,17 @@ sub vms_info { perlasm_scheme => "aix64", dso_scheme => "dlfcn", shared_target => "aix-shared", - shared_ldflag => "-q64 -G", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - arflags => "-X 64", + shared_ldflag => "-G", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", + arflags => "-X64 r", }, # SIEMENS BS2000/OSD: an EBCDIC-based mainframe "BS2000-OSD" => { inherit_from => [ "BASE_unix" ], cc => "c89", - cflags => "-O -XLLML -XLLMK -XL -DB_ENDIAN -DCHARSET_EBCDIC", + cflags => "-O -XLLML -XLLMK -XL", + cppflags => "-DB_ENDIAN -DCHARSET_EBCDIC", ex_libs => add("-lsocket -lnsl"), bn_ops => "THIRTY_TWO_BIT RC4_CHAR", thread_scheme => "(unknown)", @@ -1271,8 +1318,12 @@ sub vms_info { inherit_from => [ "BASE_Windows" ], template => 1, cc => "cl", - cflags => "-W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE", - defines => add(sub { my @defs = (); + cpp => '$(CC) /EP /C', + cflags => "-W3 -wd4090 -Gs0 -GF -Gy -nologo", + defines => add("OPENSSL_SYS_WIN32", "WIN32_LEAN_AND_MEAN", + "L_ENDIAN", "_CRT_SECURE_NO_DEPRECATE", + "_WINSOCK_DEPRECATED_NO_WARNINGS", + sub { my @defs = (); unless ($disabled{"zlib-dynamic"}) { my $zlib = $withargs{zlib_lib} // "ZLIB1"; @@ -1281,7 +1332,7 @@ sub vms_info { 'LIBZ="' . $zlib . '"'); } return [ @defs ]; - }), + }), coutflag => "/Fo", lib_cflags => add("/Zi /Fdossl_static"), dso_cflags => "/Zi /Fddso", @@ -1296,17 +1347,18 @@ sub vms_info { "VC-noCE-common" => { inherit_from => [ "VC-common" ], template => 1, - cflags => add(picker(default => "-DUNICODE -D_UNICODE", - debug => + cflags => add(picker(debug => sub { ($disabled{shared} ? "" : "/MDd") - ." /Od -DDEBUG -D_DEBUG"; + ." /Od"; }, release => sub { ($disabled{shared} ? "" : "/MD") ." /O2"; })), + defines => add(picker(default => [ "UNICODE", "_UNICODE" ], + debug => [ "DEBUG", "_DEBUG" ])), lib_cflags => add(sub { $disabled{shared} ? "/MT /Zl" : () }), # Following might/should appears controversial, i.e. defining # /MDd without evaluating $disabled{shared}. It works in @@ -1370,6 +1422,7 @@ sub vms_info { # configure with 'perl Configure VC-WIN32 -DUNICODE -D_UNICODE' inherit_from => [ "VC-noCE-common", asm("x86_asm"), sub { $disabled{shared} ? () : "uplink_common" } ], + cflags => add("-WX"), as => sub { vc_win32_info()->{as} }, asflags => sub { vc_win32_info()->{asflags} }, asoutflag => sub { vc_win32_info()->{asoutflag} }, @@ -1378,7 +1431,7 @@ sub vms_info { # WIN32 UNICODE build gets linked with unicows.lib for # backward compatibility with Win9x. push @ex_libs, 'unicows.lib' - if (grep { $_ eq "UNICODE" } @user_defines); + if (grep { $_ eq "UNICODE" } @{$user{CPPDEFINES}}); return join(" ", @ex_libs, @_); }), sys_id => "WIN32", @@ -1394,30 +1447,38 @@ sub vms_info { cc => "cl", cflags => picker(default => - combine('/W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYS_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT', + combine('/W3 /WX /GF /Gy /nologo', sub { vc_wince_info()->{cflags}; }, - sub { defined($ENV{'WCECOMPAT'}) - ? '-I$(WCECOMPAT)/include' : (); }, - sub { defined($ENV{'PORTSDK_LIBPATH'}) - ? '-I$(PORTSDK_LIBPATH)/../../include' : (); }, sub { `cl 2>&1` =~ /Version ([0-9]+)\./ && $1>=14 ? ($disabled{shared} ? " /MT" : " /MD") : " /MC"; }), - debug => "/Od -DDEBUG -D_DEBUG", + debug => "/Od", release => "/O1i"), - lflags => combine("/nologo /opt:ref", - sub { vc_wince_info()->{lflags}; }, - sub { defined($ENV{PORTSDK_LIBPATH}) - ? "/entry:mainCRTstartup" : (); }), + cppflags => sub { vc_wince_info()->{cppflags}; }, + defines => + picker(default => [ "UNICODE", "_UNICODE", "OPENSSL_SYS_WINCE", + "WIN32_LEAN_AND_MEAN", "L_ENDIAN", "DSO_WIN32", + "NO_CHMOD", "OPENSSL_SMALL_FOOTPRINT" ], + debug => [ "DEBUG", "_DEBUG" ]), + includes => + add(combine(sub { defined(env('WCECOMPAT')) + ? '$(WCECOMPAT)/include' : (); }, + sub { defined(env('PORTSDK_LIBPATH')) + ? '$(PORTSDK_LIBPATH)/../../include' + : (); })), + lflags => add(combine("/nologo /opt:ref", + sub { vc_wince_info()->{lflags}; }, + sub { defined(env('PORTSDK_LIBPATH')) + ? "/entry:mainCRTstartup" : (); })), sys_id => "WINCE", bn_ops => "BN_LLONG EXPORT_VAR_AS_FN", ex_libs => add(sub { my @ex_libs = (); push @ex_libs, 'ws2.lib' unless $disabled{sock}; push @ex_libs, 'crypt32.lib'; - if (defined($ENV{WCECOMPAT})) { + if (defined(env('WCECOMPAT'))) { my $x = '$(WCECOMPAT)/lib'; - if (-f "$x/$ENV{TARGETCPU}/wcecompatex.lib") { + if (-f "$x/env('TARGETCPU')/wcecompatex.lib") { $x .= '/$(TARGETCPU)/wcecompatex.lib'; } else { $x .= '/wcecompatex.lib'; @@ -1425,9 +1486,9 @@ sub vms_info { push @ex_libs, $x; } push @ex_libs, '$(PORTSDK_LIBPATH)/portlib.lib' - if (defined($ENV{'PORTSDK_LIBPATH'})); + if (defined(env('PORTSDK_LIBPATH'))); push @ex_libs, ' /nodefaultlib coredll.lib corelibc.lib' - if ($ENV{'TARGETCPU'} eq "X86"); + if (env('TARGETCPU') eq "X86"); return @ex_libs; }), build_scheme => add("VC-WCE", { separator => undef }), @@ -1438,10 +1499,11 @@ sub vms_info { inherit_from => [ "BASE_unix", asm("x86_asm"), sub { $disabled{shared} ? () : "x86_uplink" } ], cc => "gcc", - cflags => combine(picker(default => "-DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE -m32 -Wall", - debug => "-g -O0", - release => "-O3 -fomit-frame-pointer"), - threads("-D_MT")), + cflags => picker(default => "-m32 -Wall", + debug => "-g -O0", + release => "-O3 -fomit-frame-pointer"), + cppflags => combine("-DL_ENDIAN -DWIN32_LEAN_AND_MEAN", + "-DUNICODE -D_UNICODE", threads("-D_MT")), sys_id => "MINGW32", ex_libs => add("-lws2_32 -lgdi32 -lcrypt32"), bn_ops => "BN_LLONG EXPORT_VAR_AS_FN", @@ -1449,7 +1511,7 @@ sub vms_info { perlasm_scheme => "coff", dso_scheme => "win32", shared_target => "mingw-shared", - shared_cflag => add("-D_WINDLL"), + shared_cppflags => add("_WINDLL"), shared_ldflag => "-static-libgcc", shared_rcflag => "--target=pe-i386", shared_extension => ".dll", @@ -1467,10 +1529,11 @@ sub vms_info { # Applink is never engaged and can as well be omitted. inherit_from => [ "BASE_unix", asm("x86_64_asm") ], cc => "gcc", - cflags => combine(picker(default => "-DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE -m64 -Wall", - debug => "-g -O0", - release => "-O3"), - threads("-D_MT")), + cflags => picker(default => "-m64 -Wall", + debug => "-g -O0", + release => "-O3"), + cppflags => combine("-DL_ENDIAN -DWIN32_LEAN_AND_MEAN", + "-DUNICODE -D_UNICODE", threads("-D_MT")), sys_id => "MINGW64", ex_libs => add("-lws2_32 -lgdi32 -lcrypt32"), bn_ops => "SIXTY_FOUR_BIT EXPORT_VAR_AS_FN", @@ -1478,7 +1541,7 @@ sub vms_info { perlasm_scheme => "mingw64", dso_scheme => "win32", shared_target => "mingw-shared", - shared_cflag => add("-D_WINDLL"), + shared_cppflags => add("_WINDLL"), shared_ldflag => "-static-libgcc", shared_rcflag => "--target=pe-x86-64", shared_extension => ".dll", @@ -1490,7 +1553,8 @@ sub vms_info { "UEFI" => { inherit_from => [ "BASE_unix" ], cc => "cc", - cflags => "-DL_ENDIAN -O", + cflags => "-O", + cppflags => "-DL_ENDIAN", sys_id => "UEFI", }, @@ -1498,7 +1562,8 @@ sub vms_info { "UWIN" => { inherit_from => [ "BASE_unix" ], cc => "cc", - cflags => "-DTERMIOS -DL_ENDIAN -O -Wall", + cflags => "-O -Wall", + cppflags => "-DTERMIOS -DL_ENDIAN", sys_id => "UWIN", bn_ops => "BN_LLONG", dso_scheme => "win32", @@ -1508,33 +1573,33 @@ sub vms_info { "Cygwin-x86" => { inherit_from => [ "BASE_unix", asm("x86_asm") ], cc => "gcc", - cflags => picker(default => "-DTERMIOS -DL_ENDIAN -Wall", + cflags => picker(default => "-Wall", debug => "-g -O0", release => "-O3 -fomit-frame-pointer"), + cppflags => "-DTERMIOS -DL_ENDIAN", sys_id => "CYGWIN", bn_ops => "BN_LLONG", thread_scheme => "pthread", perlasm_scheme => "coff", dso_scheme => "dlfcn", shared_target => "cygwin-shared", - shared_cflag => "-D_WINDLL", - shared_ldflag => "-shared", + shared_cppflags => "-D_WINDLL", shared_extension => ".dll", }, "Cygwin-x86_64" => { inherit_from => [ "BASE_unix", asm("x86_64_asm") ], cc => "gcc", - cflags => picker(default => "-DTERMIOS -DL_ENDIAN -Wall", + cflags => picker(default => "-Wall", debug => "-g -O0", release => "-O3"), + cppflags => "-DTERMIOS -DL_ENDIAN", sys_id => "CYGWIN", bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthread", perlasm_scheme => "mingw64", dso_scheme => "dlfcn", shared_target => "cygwin-shared", - shared_cflag => "-D_WINDLL", - shared_ldflag => "-shared", + shared_cppflags => "-D_WINDLL", shared_extension => ".dll", }, # Backward compatibility for those using this target @@ -1560,10 +1625,10 @@ sub vms_info { inherit_from => [ "BASE_unix" ], template => 1, cc => "cc", - cflags => combine(picker(default => "", - debug => "-g -O0", - release => "-O3"), - threads("-D_REENTRANT")), + cflags => picker(default => "", + debug => "-g -O0", + release => "-O3"), + cppflags => threads("-D_REENTRANT"), sys_id => "MACOSX", plib_lflags => "-Wl,-search_paths_first", bn_ops => "BN_LLONG RC4_CHAR", @@ -1573,40 +1638,38 @@ sub vms_info { ranlib => "ranlib -c", shared_target => "darwin-shared", shared_cflag => "-fPIC", - shared_ldflag => "-dynamiclib", - shared_extension => ".\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", + shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib", }, # Option "freeze" such as -std=gnu9x can't negatively interfere # with future defaults for below two targets, because MacOS X # for PPC has no future, it was discontinued by vendor in 2009. "darwin-ppc-cc" => { inherit_from => [ "darwin-common", asm("ppc32_asm") ], - cflags => add("-arch ppc -std=gnu9x -DB_ENDIAN -Wa,-force_cpusubtype_ALL"), + cflags => add("-arch ppc -std=gnu9x -Wa,-force_cpusubtype_ALL"), + cppflags => add("-DB_ENDIAN"), perlasm_scheme => "osx32", - shared_cflag => add("-fno-common"), - shared_ldflag => "-arch ppc -dynamiclib", }, "darwin64-ppc-cc" => { inherit_from => [ "darwin-common", asm("ppc64_asm") ], - cflags => add("-arch ppc64 -std=gnu9x -DB_ENDIAN"), + cflags => add("-arch ppc64 -std=gnu9x"), + cppflags => add("-DB_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", perlasm_scheme => "osx64", - shared_ldflag => "-arch ppc64 -dynamiclib", }, "darwin-i386-cc" => { inherit_from => [ "darwin-common", asm("x86_asm") ], - cflags => add(picker(default => "-arch i386 -DL_ENDIAN", + cflags => add(picker(default => "-arch i386", release => "-fomit-frame-pointer")), + cppflags => add("-DL_ENDIAN"), bn_ops => "BN_LLONG RC4_INT", perlasm_scheme => "macosx", - shared_ldflag => "-arch i386 -dynamiclib", }, "darwin64-x86_64-cc" => { inherit_from => [ "darwin-common", asm("x86_64_asm") ], - cflags => add("-arch x86_64 -DL_ENDIAN -Wall"), + cflags => add("-arch x86_64 -Wall"), + cppflags => add("-DL_ENDIAN"), bn_ops => "SIXTY_FOUR_BIT_LONG", perlasm_scheme => "macosx", - shared_ldflag => "-arch x86_64 -dynamiclib", }, #### iPhoneOS/iOS @@ -1651,75 +1714,109 @@ sub vms_info { inherit_from => [ "BASE_unix" ], inherit_from => [ asm("x86_elf_asm") ], cc => "gcc", - cflags => combine("-DL_ENDIAN -O3 -fomit-frame-pointer -Wall", + cflags => combine("-O3 -fomit-frame-pointer -Wall", threads("-pthread")), + cppflags => "-DL_ENDIAN", ex_libs => add("-ldl", threads("-pthread")), bn_ops => "BN_LLONG", thread_scheme => "pthreads", dso_scheme => "dlfcn", shared_target => "linux-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, ##### VxWorks for various targets "vxworks-ppc60x" => { inherit_from => [ "BASE_unix" ], cc => "ccppc", - cflags => "-D_REENTRANT -mrtp -mhard-float -mstrict-align -fno-implicit-fp -DPPC32_fp60x -O2 -fstrength-reduce -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip", + cflags => "-mrtp -mhard-float -mstrict-align -fno-implicit-fp -O2 -fstrength-reduce -fno-builtin -fno-strict-aliasing -Wall", + cppflags => combine("-D_REENTRANT -DPPC32_fp60x -DCPU=PPC32", + "_DTOOL_FAMILY=gnu -DTOOL=gnu", + "-I\$(WIND_BASE)/target/usr/h", + "-I\$(WIND_BASE)/target/usr/h/wrn/coreip"), sys_id => "VXWORKS", - ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common"), + lflags => add("-L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/common"), + ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"), }, "vxworks-ppcgen" => { inherit_from => [ "BASE_unix" ], cc => "ccppc", - cflags => "-D_REENTRANT -mrtp -msoft-float -mstrict-align -O1 -fno-builtin -fno-strict-aliasing -Wall -DCPU=PPC32 -DTOOL_FAMILY=gnu -DTOOL=gnu -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/usr/h/wrn/coreip", + cflags => "-mrtp -msoft-float -mstrict-align -O1 -fno-builtin -fno-strict-aliasing -Wall", + cppflags => combine("-D_REENTRANT -DPPC32 -DCPU=PPC32", + "-DTOOL_FAMILY=gnu -DTOOL=gnu", + "-I\$(WIND_BASE)/target/usr/h", + "-I\$(WIND_BASE)/target/usr/h/wrn/coreip"), sys_id => "VXWORKS", - ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon"), + lflags => add("-L \$(WIND_BASE)/target/usr/lib/ppc/PPC32/sfcommon"), + ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"), }, "vxworks-ppc405" => { inherit_from => [ "BASE_unix" ], cc => "ccppc", - cflags => "-g -msoft-float -mlongcall -DCPU=PPC405 -I\$(WIND_BASE)/target/h", + cflags => "-g -msoft-float -mlongcall", + cppflags => combine("-D_REENTRANT -DPPC32 -DCPU=PPC405", + "-DTOOL_FAMILY=gnu -DTOOL=gnu", + "-I\$(WIND_BASE)/target/h"), sys_id => "VXWORKS", - lflags => "-r", + lflags => add("-r"), }, "vxworks-ppc750" => { inherit_from => [ "BASE_unix" ], cc => "ccppc", - cflags => "-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h \$(DEBUG_FLAG)", + cflags => "-ansi -nostdinc -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall \$(DEBUG_FLAG)", + cppflags => combine("-DPPC750 -D_REENTRANT -DCPU=PPC604", + "-I\$(WIND_BASE)/target/h"), sys_id => "VXWORKS", - lflags => "-r", + lflags => add("-r"), }, "vxworks-ppc750-debug" => { inherit_from => [ "BASE_unix" ], cc => "ccppc", - cflags => "-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DPEDANTIC -DDEBUG -g", + cflags => "-ansi -nostdinc -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -g", + cppflags => combine("-DPPC750 -D_REENTRANT -DCPU=PPC604", + "-DPEDANTIC -DDEBUG", + "-I\$(WIND_BASE)/target/h"), sys_id => "VXWORKS", - lflags => "-r", + lflags => add("-r"), }, "vxworks-ppc860" => { inherit_from => [ "BASE_unix" ], cc => "ccppc", - cflags => "-nostdinc -msoft-float -DCPU=PPC860 -DNO_STRINGS_H -I\$(WIND_BASE)/target/h", + cflags => "-nostdinc -msoft-float", + cppflags => combine("-DCPU=PPC860 -DNO_STRINGS_H", + "-I\$(WIND_BASE)/target/h"), sys_id => "VXWORKS", - lflags => "-r", + lflags => add("-r"), }, "vxworks-simlinux" => { inherit_from => [ "BASE_unix" ], cc => "ccpentium", - cflags => "-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DL_ENDIAN -DCPU=SIMLINUX -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/h -I\$(WIND_BASE)/target/h/wrn/coreip -DOPENSSL_NO_HW_PADLOCK", + cflags => "-B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -fno-builtin -fno-defer-pop", + cppflags => combine("-D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\"", + "-DL_ENDIAN -DCPU=SIMLINUX -DNO_STRINGS_H", + "-DTOOL_FAMILY=gnu -DTOOL=gnu", + "-DOPENSSL_NO_HW_PADLOCK", + "-I\$(WIND_BASE)/target/h", + "-I\$(WIND_BASE)/target/h/wrn/coreip"), sys_id => "VXWORKS", - lflags => "-r", + lflags => add("-r"), ranlib => "ranlibpentium", }, "vxworks-mips" => { inherit_from => [ "BASE_unix", asm("mips32_asm") ], cc => "ccmips", - cflags => combine("-mrtp -mips2 -O -G 0 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\" -DCPU=MIPS32 -msoft-float -mno-branch-likely -DTOOL_FAMILY=gnu -DTOOL=gnu -fno-builtin -fno-defer-pop -DNO_STRINGS_H -I\$(WIND_BASE)/target/usr/h -I\$(WIND_BASE)/target/h/wrn/coreip", - threads("-D_REENTRANT")), + cflags => "-mrtp -mips2 -O -G 0 -B\$(WIND_BASE)/host/\$(WIND_HOST_TYPE)/lib/gcc-lib/ -msoft-float -mno-branch-likely -fno-builtin -fno-defer-pop", + cppflags => combine("-D_VSB_CONFIG_FILE=\"\$(WIND_BASE)/target/lib/h/config/vsbConfig.h\"", + "-DCPU=MIPS32 -DNO_STRINGS_H", + "-DTOOL_FAMILY=gnu -DTOOL=gnu", + "-DOPENSSL_NO_HW_PADLOCK", + threads("-D_REENTRANT"), + "-I\$(WIND_BASE)/target/h", + "-I\$(WIND_BASE)/target/h/wrn/coreip"), sys_id => "VXWORKS", - ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000 -L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon"), + lflags => add("-L \$(WIND_BASE)/target/usr/lib/mips/MIPSI32/sfcommon"), + ex_libs => add("-Wl,--defsym,__wrs_rtp_base=0xe0000000"), thread_scheme => "pthreads", perlasm_scheme => "o32", ranlib => "ranlibmips", @@ -1728,157 +1825,123 @@ sub vms_info { #### uClinux "uClinux-dist" => { inherit_from => [ "BASE_unix" ], - cc => "$ENV{'CC'}", - cflags => combine(threads("-D_REENTRANT")), + cc => sub { env('CC') }, + cppflags => threads("-D_REENTRANT"), ex_libs => add("\$(LDLIBS)"), bn_ops => "BN_LLONG", thread_scheme => "pthreads", - dso_scheme => "$ENV{'LIBSSL_dlfcn'}", + dso_scheme => sub { env('LIBSSL_dlfcn') }, shared_target => "linux-shared", shared_cflag => "-fPIC", - shared_ldflag => "-shared", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - ranlib => "$ENV{'RANLIB'}", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", + ranlib => sub { env('RANLIB') }, }, "uClinux-dist64" => { inherit_from => [ "BASE_unix" ], - cc => "$ENV{'CC'}", - cflags => combine(threads("-D_REENTRANT")), + cc => sub { env('CC') }, + cppflags => threads("-D_REENTRANT"), ex_libs => add("\$(LDLIBS)"), bn_ops => "SIXTY_FOUR_BIT_LONG", thread_scheme => "pthreads", - dso_scheme => "$ENV{'LIBSSL_dlfcn'}", + dso_scheme => sub { env('LIBSSL_dlfcn') }, shared_target => "linux-shared", shared_cflag => "-fPIC", - shared_ldflag => "-shared", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", - ranlib => "$ENV{'RANLIB'}", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", + ranlib => sub { env('RANLIB') }, }, ##### VMS + # Most things happen in vms-generic. + # Note that vms_info extracts the pointer size from the end of + # the target name, and will assume that anything matching /-p\d+$/ + # indicates the pointer size setting for the desired target. "vms-generic" => { inherit_from => [ "BASE_VMS" ], template => 1, cc => "CC/DECC", - cflags => picker(default => "/STANDARD=(ISOC94,RELAXED)/NOLIST/PREFIX=ALL", - debug => "/NOOPTIMIZE/DEBUG", - release => "/OPTIMIZE/NODEBUG"), - defines => add("OPENSSL_USE_NODELETE"), - lflags => picker(default => "/MAP", + cpp => '$(CC)/PREPROCESS_ONLY=SYS$OUTPUT:', + cflags => + combine(picker(default => "/STANDARD=(ISOC94,RELAXED)/NOLIST/PREFIX=ALL", + debug => "/NOOPTIMIZE/DEBUG", + release => "/OPTIMIZE/NODEBUG"), + sub { my @warnings = + @{vms_info()->{disable_warns}}; + @warnings + ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); }), + defines => + add("OPENSSL_USE_NODELETE", + sub { + return vms_info()->{def_zlib} + ? "LIBZ=\"\"\"".vms_info()->{def_zlib}."\"\"\"" : (); + }), + lflags => picker(default => "/MAP='F\$PARSE(\".MAP\",\"\$\@\")'", debug => "/DEBUG/TRACEBACK", release => "/NODEBUG/NOTRACEBACK"), lib_cflags => add("/NAMES=(AS_IS,SHORTENED)/EXTERN_MODEL=STRICT_REFDEF"), - dso_cflags => add("/NAMES=(AS_IS,SHORTENED)"), + # no_inst_lib_cflags is used instead of lib_cflags by descrip.mms.tmpl + # for object files belonging to selected internal libraries + no_inst_lib_cflags => "", + ex_libs => add(sub { return vms_info()->{zlib} || (); }), shared_target => "vms-shared", dso_scheme => "vms", thread_scheme => "pthreads", - apps_aux_src => "vms_decc_init.c vms_term_sock.c", + as => sub { vms_info()->{as} }, + asflags => sub { vms_info()->{asflags} }, + asoutflag => sub { vms_info()->{asoutflag} }, + perlasm_scheme => sub { vms_info()->{perlasm_scheme} }, + + apps_aux_src => "vms_term_sock.c", + apps_init_src => "vms_decc_init.c", }, + # From HELP CC/POINTER_SIZE: + # + # ---------- + # LONG[=ARGV] The compiler assumes 64-bit pointers. If the ARGV option to + # LONG or 64 is present, the main argument argv will be an + # array of long pointers instead of an array of short pointers. + # + # 64[=ARGV] Same as LONG. + # ---------- + # + # We don't want the hassle of dealing with 32-bit pointers with argv, so + # we force it to have 64-bit pointers, see the added cflags in the -p64 + # config targets below. + "vms-alpha" => { inherit_from => [ "vms-generic" ], - cflags => add(sub { my @warnings = - @{vms_info(0)->{disable_warns}}; - @warnings - ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); }), - defines => - add(sub { - return vms_info(0)->{def_zlib} - ? "LIBZ=\"\"\"".vms_info(0)->{def_zlib}."\"\"\"" : (); - }), - ex_libs => add(sub { return vms_info(0)->{zlib} || (); }), - pointer_size => sub { return vms_info(0)->{pointer_size} }, - #as => "???", - #debug_aflags => "/NOOPTIMIZE/DEBUG", - #release_aflags => "/OPTIMIZE/NODEBUG", - bn_opts => "SIXTY_FOUR_BIT RC4_INT", + bn_ops => "SIXTY_FOUR_BIT RC4_INT", + pointer_size => "", }, "vms-alpha-p32" => { - inherit_from => [ "vms-generic" ], - cflags => - add("/POINTER_SIZE=32", - sub { my @warnings = - @{vms_info(32)->{disable_warns}}; - @warnings - ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); - } ), - defines => - add(sub { - return vms_info(32)->{def_zlib} - ? "LIBZ=\"\"\"".vms_info(32)->{def_zlib}."\"\"\"" : (); - }), - ex_libs => add(sub { return vms_info(32)->{zlib} || (); }), - pointer_size => sub { return vms_info(32)->{pointer_size} }, + inherit_from => [ "vms-alpha" ], + cflags => add("/POINTER_SIZE=32"), + pointer_size => "32", }, "vms-alpha-p64" => { - inherit_from => [ "vms-generic" ], - cflags => - add("/POINTER_SIZE=64=ARGV", - sub { my @warnings = - @{vms_info(64)->{disable_warns}}; - @warnings - ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); - } ), - defines => - add(sub { - return vms_info(64)->{def_zlib} - ? "LIBZ=\"\"\"".vms_info(64)->{def_zlib}."\"\"\"" : (); - }), - ex_libs => add(sub { return vms_info(64)->{zlib} || (); }), - pointer_size => sub { return vms_info(64)->{pointer_size} }, + inherit_from => [ "vms-alpha" ], + cflags => add("/POINTER_SIZE=64=ARGV"), + pointer_size => "64", }, "vms-ia64" => { - inherit_from => [ "vms-generic" ], - cflags => add(sub { my @warnings = - @{vms_info(0)->{disable_warns}}; - @warnings - ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); }), - defines => - add(sub { - return vms_info(0)->{def_zlib} - ? "LIBZ=\"\"\"".vms_info(0)->{def_zlib}."\"\"\"" : (); - }), - ex_libs => add(sub { return vms_info(0)->{zlib} || (); }), - pointer_size => sub { return vms_info(0)->{pointer_size} }, - #as => "I4S", - #debug_aflags => "/NOOPTIMIZE/DEBUG", - #release_aflags => "/OPTIMIZE/NODEBUG", - bn_opts => "SIXTY_FOUR_BIT RC4_INT", + inherit_from => [ "vms-generic", + sub { vms_info()->{as} + ? asm("ia64_asm")->() : () } ], + bn_ops => "SIXTY_FOUR_BIT RC4_INT", + pointer_size => "", + + modes_asm_src => "", # Because ghash-ia64.s doesn't work on VMS }, "vms-ia64-p32" => { - inherit_from => [ "vms-generic" ], - cflags => - add("/POINTER_SIZE=32", - sub { my @warnings = - @{vms_info(32)->{disable_warns}}; - @warnings - ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); - } ), - defines => - add(sub { - return vms_info(32)->{def_zlib} - ? "LIBZ=\"\"\"".vms_info(32)->{def_zlib}."\"\"\"" : (); - }), - ex_libs => add(sub { return vms_info(32)->{zlib} || (); }), - pointer_size => sub { return vms_info(32)->{pointer_size} }, + inherit_from => [ "vms-ia64" ], + cflags => add("/POINTER_SIZE=32"), + pointer_size => "32", }, "vms-ia64-p64" => { - inherit_from => [ "vms-generic" ], - cflags => - add("/POINTER_SIZE=64=ARGV", - sub { my @warnings = - @{vms_info(64)->{disable_warns}}; - @warnings - ? "/WARNINGS=DISABLE=(".join(",",@warnings).")" : (); - } ), - defines => - add(sub { - return vms_info(64)->{def_zlib} - ? "LIBZ=\"\"\"".vms_info(64)->{def_zlib}."\"\"\"" : (); - }), - ex_libs => add(sub { return vms_info(64)->{zlib} || (); }), - pointer_size => sub { return vms_info(64)->{pointer_size} }, + inherit_from => [ "vms-ia64" ], + cflags => add("/POINTER_SIZE=64=ARGV"), + pointer_size => "64", }, ); diff --git a/Configurations/50-djgpp.conf b/Configurations/50-djgpp.conf index f532bd16..b4d19e20 100644 --- a/Configurations/50-djgpp.conf +++ b/Configurations/50-djgpp.conf @@ -2,13 +2,14 @@ # and rely entirely on the OpenSSL community to help is fine # tune and test. -%targets = ( +my %targets = ( "DJGPP" => { inherit_from => [ asm("x86_asm") ], cc => "gcc", cflags => "-I/dev/env/WATT_ROOT/inc -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -Wall", sys_id => "MSDOS", - ex_libs => add("-L/dev/env/WATT_ROOT/lib -lwatt"), + lflags => add("-L/dev/env/WATT_ROOT/lib"), + ex_libs => add("-lwatt"), bn_ops => "BN_LLONG", perlasm_scheme => "a.out", }, diff --git a/Configurations/50-haiku.conf b/Configurations/50-haiku.conf index f1146666..b57e1487 100644 --- a/Configurations/50-haiku.conf +++ b/Configurations/50-haiku.conf @@ -1,4 +1,4 @@ -%targets = ( +my %targets = ( "haiku-common" => { template => 1, cc => "cc", @@ -14,7 +14,7 @@ shared_target => "gnu-shared", shared_cflag => "-fPIC", shared_ldflag => "-shared", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "haiku-x86" => { inherit_from => [ "haiku-common", asm("x86_elf_asm") ], diff --git a/Configurations/50-masm.conf b/Configurations/50-masm.conf index 60a55072..e2b54e34 100644 --- a/Configurations/50-masm.conf +++ b/Configurations/50-masm.conf @@ -7,11 +7,16 @@ # proven to be daunting task. This is experimental target, for # production builds stick with [up-to-date version of] nasm. -%targets = ( +my %targets = ( "VC-WIN64A-masm" => { - inherit_from => [ "VC-WIN64A" ], + inherit_from => [ "VC-WIN64-common", asm("x86_64_asm"), + sub { $disabled{shared} ? () : "x86_64_uplink" } ], as => "ml64", - asflags => "/c /Cp /Cx /Zi", + asflags => "/nologo /c /Cp /Cx /Zi", asoutflag => "/Fo", + sys_id => "WIN64A", + bn_asm_src => sub { return undef unless @_; + my $r=join(" ",@_); $r=~s|asm/x86_64-gcc|bn_asm|; $r; }, + perlasm_scheme => "masm", }, ); diff --git a/Configurations/90-team.conf b/Configurations/90-team.conf index 0a83c22a..31382182 100644 --- a/Configurations/90-team.conf +++ b/Configurations/90-team.conf @@ -1,20 +1,22 @@ ## -*- mode: perl; -*- ## Build configuration targets for openssl-team members -%targets = ( +my %targets = ( "purify" => { + inherit_from => [ 'BASE_unix' ], cc => "purify gcc", cflags => "-g -Wall", thread_scheme => "(unknown)", ex_libs => add(" ","-lsocket -lnsl"), }, "debug" => { + inherit_from => [ 'BASE_unix' ], cc => "gcc", cflags => "-DBN_DEBUG -DREF_DEBUG -DCONF_DEBUG -DBN_CTX_DEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror", thread_scheme => "(unknown)", }, "debug-erbridge" => { - inherit_from => [ "x86_64_asm" ], + inherit_from => [ 'BASE_unix', "x86_64_asm" ], cc => "gcc", cflags => combine("$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -m64 -DL_ENDIAN -DTERMIO -g", threads("-D_REENTRANT")), @@ -26,11 +28,11 @@ shared_target => "linux-shared", shared_cflag => "-fPIC", shared_ldflag => "-m64", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", multilib => "64", }, "debug-linux-pentium" => { - inherit_from => [ "x86_elf_asm" ], + inherit_from => [ 'BASE_unix', "x86_elf_asm" ], cc => "gcc", cflags => combine("-DBN_DEBUG -DREF_DEBUG -DCONF_DEBUG -DBN_CTX_DEBUG -DL_ENDIAN -g -mcpu=pentium -Wall", threads("-D_REENTRANT")), @@ -40,7 +42,7 @@ dso_scheme => "dlfcn", }, "debug-linux-ppro" => { - inherit_from => [ "x86_elf_asm" ], + inherit_from => [ 'BASE_unix', "x86_elf_asm" ], cc => "gcc", cflags => combine("-DBN_DEBUG -DREF_DEBUG -DCONF_DEBUG -DBN_CTX_DEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall", threads("-D_REENTRANT")), @@ -50,6 +52,7 @@ dso_scheme => "dlfcn", }, "debug-linux-ia32-aes" => { + inherit_from => [ 'BASE_unix' ], cc => "gcc", cflags => combine("-DL_ENDIAN -O3 -fomit-frame-pointer -Wall", threads("-D_REENTRANT")), @@ -74,15 +77,16 @@ dso_scheme => "dlfcn", shared_target => "linux-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "dist" => { + inherit_from => [ 'BASE_unix' ], cc => "cc", cflags => "-O", thread_scheme => "(unknown)", }, "debug-test-64-clang" => { - inherit_from => [ "x86_64_asm" ], + inherit_from => [ 'BASE_unix', "x86_64_asm" ], cc => "clang", cflags => combine("$gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe", threads("${BSDthreads}")), @@ -92,10 +96,10 @@ dso_scheme => "dlfcn", shared_target => "bsd-gcc-shared", shared_cflag => "-fPIC", - shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", + shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", }, "darwin64-debug-test-64-clang" => { - inherit_from => [ "x86_64_asm" ], + inherit_from => [ 'BASE_unix', "x86_64_asm" ], cc => "clang", cflags => combine("-arch x86_64 -DL_ENDIAN $gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Wno-error=language-extension-token -Wno-error=unused-const-variable -Wstrict-overflow -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe", threads("${BSDthreads}")), @@ -107,6 +111,6 @@ shared_target => "darwin-shared", shared_cflag => "-fPIC -fno-common", shared_ldflag => "-arch x86_64 -dynamiclib", - shared_extension => ".\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib", + shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib", }, ); diff --git a/Configurations/README b/Configurations/README index 6e136454..8d32a254 100644 --- a/Configurations/README +++ b/Configurations/README @@ -38,17 +38,40 @@ In each table entry, the following keys are significant: sys_id => System identity for systems where that is difficult to determine automatically. - cc => The compiler command, usually one of "cc", - "gcc" or "clang". This command is normally - also used to link object files and - libraries into the final program. - cflags => Flags that are used at all times when - compiling. + enable => Enable specific configuration features. + This MUST be an array of words. + disable => Disable specific configuration features. + This MUST be an array of words. + Note: if the same feature is both enabled + and disabled, disable wins. + + cpp => The C preprocessor command, normally not + given, as the build file defaults are + usually good enough. + cppflags => The C preprocessor flags. defines => As an alternative, macro definitions may be - present here instead of in `cflags'. If + given here instead of in `cppflags'. If given here, they MUST be as an array of the string such as "MACRO=value", or just "MACRO" for definitions without value. + includes => As an alternative, inclusion directories + may be given here instead of in `cppflags'. + If given here, the MUST be an array of + strings, one directory specification each. + cc => The C compiler command, usually one of "cc", + "gcc" or "clang". This command is normally + also used to link object files and + libraries into the final program. + cxx => The C++ compiler command, usually one of + "c++", "g++" or "clang++". This command is + also used when linking a program where at + least one of the object file is made from + C++ source. + cflags => Flags that are used at all times when + compiling C object files. + cxxflags => Flags that are used at all times when + compiling C++ object files. If unset, it + gets the same value as cflags. shared_cflag => Extra compilation flags used when compiling for shared libraries, typically something like "-fPIC". @@ -72,7 +95,8 @@ In each table entry, the following keys are significant: (NOTE: this is here for future use, it's not implemented yet) arflags => Flags to be used with the library archive - command. + command. On Unix, this includes the + command letter, 'r' by default. ranlib => The library archive indexing command, the default is 'ranlib' it it exists. @@ -189,8 +213,14 @@ In each table entry, the following keys are significant: export vars as accessor functions. - apps_extra_src => Extra source to build apps/openssl, as - needed by the target. + apps_aux_src => Extra source to build apps/openssl and other + apps, as needed by the target and that can be + collected in a library. + apps_init_src => Init source to build apps/openssl and other + apps, as needed by the target. This code + cannot be placed in a library, as the rest + of the code isn't expected to link to it + explicitely. cpuid_asm_src => assembler implementation of cpuid code as well as OPENSSL_cleanse(). Default to mem_clr.c @@ -377,14 +407,16 @@ source as well. However, the files given through SOURCE are expected to be located in the source tree while files given through DEPEND are expected to be located in the build tree) -For some libraries, we maintain files with public symbols and their -slot in a transfer vector (important on some platforms). It can be -declared like this: +It's also possible to depend on static libraries explicitly: - ORDINALS[libcrypto]=crypto + DEPEND[foo]=libsomething.a + DEPEND[libbar]=libsomethingelse.a -The value is not the name of the file in question, but rather the -argument to util/mkdef.pl that indicates which file to use. +This should be rarely used, and care should be taken to make sure it's +only used when supported. For example, native Windows build doesn't +support build static libraries and DLLs at the same time, so using +static libraries on Windows can only be done when configured +'no-shared'. One some platforms, shared libraries come with a name that's different from their static counterpart. That's declared as follows: @@ -420,8 +452,8 @@ others, that's done as follows: GENERATE[bar.s]=asm/bar.S The value of each GENERATE line is a command line or part of it. -Configure places no rules on the command line, except the the first -item muct be the generator file. It is, however, entirely up to the +Configure places no rules on the command line, except that the first +item must be the generator file. It is, however, entirely up to the build file template to define exactly how those command lines should be handled, how the output is captured and so on. @@ -623,8 +655,7 @@ They are all expected to return a string with the lines they produce. libobj2shlib(shlib => "PATH/TO/shlibfile", lib => "PATH/TO/libfile", objs => [ "PATH/TO/objectfile", ... ], - deps => [ "PATH/TO/otherlibfile", ... ], - ordinals => [ "word", "/PATH/TO/ordfile" ]); + deps => [ "PATH/TO/otherlibfile", ... ]); 'lib' has the intended library file name *without* extension, libobj2shlib is expected to add that. @@ -633,11 +664,7 @@ They are all expected to return a string with the lines they produce. libraries (also *without* extension) this library needs to be linked with. 'objs' has the list of object files (also *without* extension) to build - this library. 'ordinals' MAY be present, and when - it is, its value is an array where the word is - "crypto" or "ssl" and the file is one of the ordinal - files util/libeay.num or util/ssleay.num in the - source directory. + this library. This function has a choice; it can use the corresponding static library as input to make the diff --git a/Configurations/README.design b/Configurations/README.design index bea9790a..cae08fc2 100644 --- a/Configurations/README.design +++ b/Configurations/README.design @@ -41,10 +41,9 @@ end products. There are variants for them with '_NO_INST' as suffix (PROGRAM_NO_INST etc) to specify end products that shouldn't get installed. -The variables SOURCE, DEPEND, INCLUDE and ORDINALS are indexed by a -produced file, and their values are the source used to produce that -particular produced file, extra dependencies, include directories -needed, and ordinal files (explained further below. +The variables SOURCE, DEPEND and INCLUDE are indexed by a produced +file, and their values are the source used to produce that particular +produced file, extra dependencies, and include directories needed. All their values in all the build.info throughout the source tree are collected together and form a set of programs, libraries, engines and @@ -57,18 +56,15 @@ dependencies. # build.info LIBS=libcrypto libssl - ORDINALS[libcrypto]=crypto - ORDINALS[libssl]=ssl INCLUDE[libcrypto]=include INCLUDE[libssl]=include DEPEND[libssl]=libcrypto This is the top directory build.info file, and it tells us that two -libraries are to be built, there are some ordinals to be used to -declare what symbols in those libraries are seen as public, the -include directory 'include/' shall be used throughout when building -anything that will end up in each library, and that the library -'libssl' depend on the library 'libcrypto' to function properly. +libraries are to be built, the include directory 'include/' shall be +used throughout when building anything that will end up in each +library, and that the library 'libssl' depend on the library +'libcrypto' to function properly. # apps/build.info PROGRAMS=openssl @@ -133,7 +129,7 @@ library 'libssl' is built from the source file 'ssl/tls.c'. ENGINES_NO_INST=ossltest SOURCE[ossltest]=e_ossltest.c - DEPEND[ossltest]=../libcrypto + DEPEND[ossltest]=../libcrypto.a INCLUDE[ossltest]=../include This is the build.info file in 'engines/', telling us that two engines @@ -142,18 +138,17 @@ dasync's source is 'engines/e_dasync.c' and ossltest's source is 'engines/e_ossltest.c' and that the include directory 'include/' may be used when building anything that will be part of these engines. Also, both engines depend on the library 'libcrypto' to function -properly. Finally, only dasync is being installed, as ossltest is -only for internal testing. +properly. ossltest is explicitly linked with the static variant of +the library 'libcrypto'. Finally, only dasync is being installed, as +ossltest is only for internal testing. When Configure digests these build.info files, the accumulated information comes down to this: LIBS=libcrypto libssl - ORDINALS[libcrypto]=crypto SOURCE[libcrypto]=crypto/aes.c crypto/evp.c crypto/cversion.c DEPEND[crypto/cversion.o]=crypto/buildinf.h INCLUDE[libcrypto]=include - ORDINALS[libssl]=ssl SOURCE[libssl]=ssl/tls.c INCLUDE[libssl]=include DEPEND[libssl]=libcrypto @@ -170,7 +165,7 @@ information comes down to this: ENGINES_NO_INST=engines/ossltest SOURCE[engines/ossltest]=engines/e_ossltest.c - DEPEND[engines/ossltest]=libcrypto + DEPEND[engines/ossltest]=libcrypto.a INCLUDE[engines/ossltest]=include GENERATE[crypto/buildinf.h]=util/mkbuildinf.pl "$(CC) $(CFLAGS)" "$(PLATFORM)" @@ -186,9 +181,9 @@ PROGRAMS may be used to declare programs only. ENGINES may be used to declare engines only. -The indexes for SOURCE and ORDINALS must only be end product files, -such as libraries, programs or engines. The values of SOURCE -variables must only be source files (possibly generated) +The indexes for SOURCE must only be end product files, such as +libraries, programs or engines. The values of SOURCE variables must +only be source files (possibly generated). INCLUDE and DEPEND shows a relationship between different files (usually produced files) or between files and directories, such as a @@ -235,12 +230,6 @@ indexes: libraries => a list of libraries. These are directly inferred from the LIBS variable in build.info files. - ordinals => a hash table containing 'file' => [ 'word', 'ordfile' ] - pairs. 'file' and 'word' are directly inferred from - the ORDINALS variables in build.info files, while the - file 'ofile' comes from internal knowledge in - Configure. - programs => a list of programs. These are directly inferred from the PROGRAMS variable in build.info files. @@ -281,10 +270,14 @@ section above would be digested into a %unified_info table: [ "crypto/buildinf.h", ], - "engines/ossltest" => + "engines/dasync" => [ "libcrypto", ], + "engines/ossltest" => + [ + "libcrypto.a", + ], "libssl" => [ "libcrypto", @@ -354,19 +347,6 @@ section above would be digested into a %unified_info table: "libcrypto", "libssl", ], - "ordinals" => - { - "libcrypto" => - [ - "crypto", - "util/libcrypto.num", - ], - "libssl" => - [ - "ssl", - "util/libssl.num", - ], - }, "programs" => [ "apps/openssl", @@ -396,6 +376,14 @@ section above would be digested into a %unified_info table: [ "crypto/evp.c", ], + "engines/e_dasync.o" => + [ + "engines/e_dasync.c", + ], + "engines/dasync" => + [ + "engines/e_dasync.o", + ], "engines/e_ossltest.o" => [ "engines/e_ossltest.c", @@ -517,8 +505,7 @@ etc. libobj2shlib(shlib => "PATH/TO/shlibfile", lib => "PATH/TO/libfile", objs => [ "PATH/TO/objectfile", ... ], - deps => [ "PATH/TO/otherlibfile", ... ], - ordinals => [ "word", "/PATH/TO/ordfile" ]); + deps => [ "PATH/TO/otherlibfile", ... ]); 'lib' has the intended library file name *without* extension, libobj2shlib is expected to add that. @@ -527,11 +514,7 @@ etc. libraries (also *without* extension) this library needs to be linked with. 'objs' has the list of object files (also *without* extension) to build - this library. 'ordinals' MAY be present, and when - it is, its value is an array where the word is - "crypto" or "ssl" and the file is one of the ordinal - files util/libcrypto.num or util/libssl.num in the - source directory. + this library. This function has a choice; it can use the corresponding static library as input to make the @@ -604,8 +587,7 @@ following calls: libobj2shlib(shlib => "libcrypto", lib => "libcrypto", objs => [ "crypto/aes", "crypto/evp", "crypto/cversion" ], - deps => [ ] - ordinals => [ "crypto", "util/libcrypto.num" ]); + deps => [ ]); obj2lib(lib => "libcrypto" objs => [ "crypto/aes", "crypto/evp", "crypto/cversion" ]); diff --git a/Configurations/common.tmpl b/Configurations/common.tmpl index 13ffe948..180621e7 100644 --- a/Configurations/common.tmpl +++ b/Configurations/common.tmpl @@ -9,15 +9,23 @@ # there are no duplicate dependencies and that they are in the # right order. This is especially used to sort the list of # libraries that a build depends on. + sub extensionlesslib { + my @result = map { $_ =~ /(\.a)?$/; $` } @_; + return @result if wantarray; + return $result[0]; + } sub resolvedepends { my $thing = shift; + my $extensionlessthing = extensionlesslib($thing); my @listsofar = @_; # to check if we're looping - my @list = @{$unified_info{depends}->{$thing}}; + my @list = @{$unified_info{depends}->{$thing} // + $unified_info{depends}->{$extensionlessthing}}; my @newlist = (); if (scalar @list) { foreach my $item (@list) { + my $extensionlessitem = extensionlesslib($item); # It's time to break off when the dependency list starts looping - next if grep { $_ eq $item } @listsofar; + next if grep { extensionlesslib($_) eq $extensionlessitem } @listsofar; push @newlist, $item, resolvedepends($item, @listsofar, $item); } } @@ -26,12 +34,34 @@ sub reducedepends { my @list = @_; my @newlist = (); + my %replace = (); while (@list) { my $item = shift @list; - push @newlist, $item - unless grep { $item eq $_ } @list; + my $extensionlessitem = extensionlesslib($item); + if (grep { $extensionlessitem eq extensionlesslib($_) } @list) { + if ($item ne $extensionlessitem) { + # If this instance of the library is explicitly static, we + # prefer that to any shared library name, since it must have + # been done on purpose. + $replace{$extensionlessitem} = $item; + } + } else { + push @newlist, $item; + } } - @newlist; + map { $replace{$_} // $_; } @newlist; + } + + # is_installed checks if a given file will be installed (i.e. they are + # not defined _NO_INST in build.info) + sub is_installed { + my $product = shift; + if (grep { $product eq $_ } + map { (@{$unified_info{install}->{$_}}) } + keys %{$unified_info{install}}) { + return 1; + } + return 0; } # dogenerate is responsible for producing all the recipes that build @@ -66,11 +96,11 @@ sub doobj { my $obj = shift; return "" if $cache{$obj}; - (my $obj_no_o = $obj) =~ s|\.o$||; my $bin = shift; my %opts = @_; if (@{$unified_info{sources}->{$obj}}) { - $OUT .= src2obj(obj => $obj_no_o, + $OUT .= src2obj(obj => $obj, + product => $bin, srcs => $unified_info{sources}->{$obj}, deps => $unified_info{depends}->{$obj}, incs => $unified_info{includes}->{$obj}, @@ -90,26 +120,28 @@ sub dolib { my $lib = shift; return "" if $cache{$lib}; - unless ($disabled{shared}) { - my %ordinals = - $unified_info{ordinals}->{$lib} - ? (ordinals => $unified_info{ordinals}->{$lib}) : (); + unless ($disabled{shared} || $lib =~ /\.a$/) { $OUT .= libobj2shlib(shlib => $unified_info{sharednames}->{$lib}, lib => $lib, - objs => [ map { (my $x = $_) =~ s|\.o$||; $x } - (@{$unified_info{sources}->{$lib}}, - @{$unified_info{shared_sources}->{$lib}}) ], + objs => [ @{$unified_info{shared_sources}->{$lib}}, + @{$unified_info{sources}->{$lib}} ], deps => [ reducedepends(resolvedepends($lib)) ], - %ordinals); - foreach (@{$unified_info{shared_sources}->{$lib}}) { - doobj($_, $lib, intent => "lib"); + installed => is_installed($lib)); + foreach ((@{$unified_info{shared_sources}->{$lib}}, + @{$unified_info{sources}->{$lib}})) { + # If this is somehow a compiled object, take care of it that way + # Otherwise, it might simply be generated + if (defined $unified_info{sources}->{$_}) { + doobj($_, $lib, intent => "lib", installed => is_installed($lib)); + } else { + dogenerate($_, undef, undef, intent => "lib"); + } } } $OUT .= obj2lib(lib => $lib, - objs => [ map { (my $x = $_) =~ s|\.o$||; $x } - @{$unified_info{sources}->{$lib}} ]); + objs => [ @{$unified_info{sources}->{$lib}} ]); foreach (@{$unified_info{sources}->{$lib}}) { - doobj($_, $lib, intent => "lib"); + doobj($_, $lib, intent => "lib", installed => is_installed($lib)); } $cache{$lib} = 1; } @@ -121,13 +153,13 @@ my $lib = shift; return "" if $cache{$lib}; $OUT .= obj2dso(lib => $lib, - objs => [ map { (my $x = $_) =~ s|\.o$||; $x } - (@{$unified_info{sources}->{$lib}}, - @{$unified_info{shared_sources}->{$lib}}) ], - deps => [ resolvedepends($lib) ]); + objs => [ @{$unified_info{sources}->{$lib}}, + @{$unified_info{shared_sources}->{$lib}} ], + deps => [ resolvedepends($lib) ], + installed => is_installed($lib)); foreach ((@{$unified_info{sources}->{$lib}}, @{$unified_info{shared_sources}->{$lib}})) { - doobj($_, $lib, intent => "dso"); + doobj($_, $lib, intent => "dso", installed => is_installed($lib)); } $cache{$lib} = 1; } @@ -139,11 +171,11 @@ return "" if $cache{$bin}; my $deps = [ reducedepends(resolvedepends($bin)) ]; $OUT .= obj2bin(bin => $bin, - objs => [ map { (my $x = $_) =~ s|\.o$||; $x } - @{$unified_info{sources}->{$bin}} ], - deps => $deps); + objs => [ @{$unified_info{sources}->{$bin}} ], + deps => $deps, + installed => is_installed($bin)); foreach (@{$unified_info{sources}->{$bin}}) { - doobj($_, $bin, intent => "bin"); + doobj($_, $bin, intent => "bin", installed => is_installed($bin)); } $cache{$bin} = 1; } @@ -154,7 +186,8 @@ my $script = shift; return "" if $cache{$script}; $OUT .= in2script(script => $script, - sources => $unified_info{sources}->{$script}); + sources => $unified_info{sources}->{$script}, + installed => is_installed($script)); $cache{$script} = 1; } diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl index 7e3356f1..2364644b 100644 --- a/Configurations/descrip.mms.tmpl +++ b/Configurations/descrip.mms.tmpl @@ -9,7 +9,7 @@ our $osslprefix = 'OSSL$'; (our $osslprefix_q = $osslprefix) =~ s/\$/\\\$/; - our $sover = sprintf "%02d%02d", $config{shlib_major}, $config{shlib_minor}; + our $sover_dirname = sprintf "%02d%02d", split(/\./, $config{shlib_version_number}); our $osslver = sprintf "%02d%02d", split(/\./, $config{version}); our $sourcedir = $config{sourcedir}; @@ -42,9 +42,19 @@ # Because we need to make two computations of these data, # we store them in arrays for reuse - our @shlibs = map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}; - our @install_shlibs = map { $unified_info{sharednames}->{$_} || () } @{$unified_info{install}->{libraries}}; - our @generated = ( ( map { (my $x = $_) =~ s|\.S$|\.s|; $x } + our @libs = + map { (my $x = $_) =~ s/\.a$//; $x } + @{$unified_info{libraries}}; + our @shlibs = + map { $unified_info{sharednames}->{$_} || () } + grep(!/\.a$/, @{$unified_info{libraries}}); + our @install_libs = + map { (my $x = $_) =~ s/\.a$//; $x } + @{$unified_info{install}->{libraries}}; + our @install_shlibs = + map { $unified_info{sharednames}->{$_} || () } + grep(!/\.a$/, @{$unified_info{install}->{libraries}}); + our @generated = ( ( map { (my $x = $_) =~ s|\.[sS]$|\.asm|; $x } grep { defined $unified_info{generate}->{$_} } map { @{$unified_info{sources}->{$_}} } grep { /\.o$/ } keys %{$unified_info{sources}} ), @@ -63,17 +73,9 @@ } my $sd1 = sourcedir("ssl","record"); my $sd2 = sourcedir("ssl","statem"); - $unified_info{before}->{"[.test]heartbeat_test.OBJ"} - = $unified_info{before}->{"[.test]ssltest_old.OBJ"} - = qq(record_include = F\$PARSE("$sd1","A.;",,,"SYNTAX_ONLY") - "A.;" - define record 'record_include' - statem_include = F\$PARSE("$sd2","A.;",,,"SYNTAX_ONLY") - "A.;" - define statem 'statem_include'); - $unified_info{after}->{"[.test]heartbeat_test.OBJ"} - = $unified_info{after}->{"[.test]ssltest.OBJ"} - = qq(deassign statem - deassign record); - foreach (grep /^\[\.ssl\.(?:record|statem)\].*\.o$/, keys %{$unified_info{sources}}) { + my @ssl_locl_users = grep(/^\[\.(?:ssl\.(?:record|statem)|test)\].*\.o$/, + keys %{$unified_info{sources}}); + foreach (@ssl_locl_users) { (my $x = $_) =~ s|\.o$|.OBJ|; $unified_info{before}->{$x} = qq(record_include = F\$PARSE("$sd1","A.;",,,"SYNTAX_ONLY") - "A.;" @@ -121,7 +123,7 @@ SHLIB_EXT=.EXE OBJ_EXT=.OBJ DEP_EXT=.D -LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @{$unified_info{libraries}}) -} +LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @libs) -} SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @shlibs) -} ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{engines}}) -} PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{programs}}) -} @@ -135,7 +137,7 @@ DEPS={- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; } GENERATED_MANDATORY={- join(", ", map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -} GENERATED={- join(", ", map { "-\n\t".$_ } @generated) -} -INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @{$unified_info{install}->{libraries}}) -} +INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -} INSTALL_SHLIBS={- join(", ", map { "-\n\t".$_.".EXE" } @install_shlibs) -} INSTALL_ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{install}->{engines}}) -} INSTALL_PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{install}->{programs}}) -} @@ -167,27 +169,52 @@ OPENSSLDIR={- catdir($config{openssldir}) or # The same, but for C OPENSSLDIR_C={- $osslprefix -}DATAROOT:[000000] # Where installed engines reside, for C -ENGINESDIR_C={- $osslprefix -}ENGINES{- $sover.$target{pointer_size} -}: +ENGINESDIR_C={- $osslprefix -}ENGINES{- $sover_dirname.$target{pointer_size} -}: -CC= {- $target{cc} -} -CFLAGS= /DEFINE=({- join(",", @{$target{defines}}, @{$config{defines}},"OPENSSLDIR=\"\"\"\$(OPENSSLDIR_C)\"\"\"","ENGINESDIR=\"\"\"\$(ENGINESDIR_C)\"\"\"") -}) {- $target{cflags} -} {- $config{cflags} -} -CFLAGS_Q=$(CFLAGS) -DEPFLAG= /DEFINE=({- join(",", @{$config{depdefines}}) -}) -LDFLAGS= {- $target{lflags} -} -EX_LIBS= {- $target{ex_libs} ? ",".$target{ex_libs} : "" -}{- $config{ex_libs} ? ",".$config{ex_libs} : "" -} -LIB_CFLAGS={- $target{lib_cflags} || "" -} -DSO_CFLAGS={- $target{dso_cflags} || "" -} -BIN_CFLAGS={- $target{bin_cflags} || "" -} +CC= {- $config{cc} -} +CPP= {- $config{cpp} -} +DEFINES={- our $defines = join(",", + '__dummy', # To make comma processing easier + @{$config{defines}}) -} +INCLUDES={- our $includes = join(',', @{$config{includes}}) -} +CPPFLAGS='qual_includes'{- our $cppflags = join('', @{$config{cppflags}}) -} +CPPFLAGS_Q={- (my $x = $cppflags) =~ s|"|""|g; + (my $d = $defines) =~ s|"|""|g; + $x .= "/INCLUDE=($includes)" if $includes; + $x .= "/DEFINE=($d)"; + $x; -} +CFLAGS={- join('', @{$config{cflags}}) -} +LDFLAGS= {- join('', @{$config{lflags}}) -} +EX_LIBS= {- join('', map { ','.$_ } @{$config{ex_libs}}) -} + +LIB_DEFINES=$(DEFINES){- join("", (map { ",$_" } + @{$target{shared_defines}}, + 'OPENSSLDIR="""$(OPENSSLDIR_C)"""', + 'ENGINESDIR="""$(ENGINESDIR_C)"""')) -} +LIB_CPPFLAGS=$(CPPFLAGS)/DEFINE=($(LIB_DEFINES)) +LIB_CFLAGS=$(CFLAGS){- $target{lib_cflags} // "" -} +DSO_DEFINES=$(DEFINES){- join("", (map { ",$_" } @{$target{dso_defines}})) -} +DSO_CPPFLAGS=$(CPPFLAGS)/DEFINE=($(DSO_DEFINES)) +DSO_CFLAGS=$(CFLAGS){- $target{dso_cflags} // "" -} +BIN_DEFINES=$(DEFINES){- join("", (map { ",$_" } @{$target{bin_defines}})) -} +BIN_CPPFLAGS=$(CPPFLAGS)/DEFINE=($(BIN_DEFINES)) +BIN_CFLAGS=$(CFLAGS){- $target{bin_cflags} // "" -} +NO_INST_LIB_CFLAGS=$(CFLAGS){- $target{no_inst_lib_cflags} + // $target{lib_cflags} + // "" -} +NO_INST_DSO_CFLAGS=$(CFLAGS){- $target{no_inst_dso_cflags} + // $target{dso_cflags} + // "" -} +NO_INST_BIN_CFLAGS=$(CFLAGS){- $target{no_inst_bin_cflags} + // $target{bin_cflags} + // "" -} PERL={- $config{perl} -} -# We let the C compiler driver to take care of .s files. This is done in -# order to be excused from maintaining a separate set of architecture -# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC -# gcc, then the driver will automatically translate it to -xarch=v8plus -# and pass it down to assembler. -AS={- $target{as} -} -ASFLAG={- $target{asflags} -} +AS={- $config{as} -} +ASFLAGS={- join(' ', @{$config{asflags}}) -} +ASOUTFLAG={- $target{asoutflag} -}$(OSSL_EMPTY) +PERLASM_SCHEME={- $target{perlasm_scheme} -} # .FIRST and .LAST are special targets with MMS and MMK. # The defines in there are for C. includes that look like @@ -238,10 +265,10 @@ NODEBUG=@ $(NODEBUG) ! Set up logical names for the libraries, so LINK and $(NODEBUG) ! running programs can use them. $(NODEBUG) ! - $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEFINE ".uc($_)." 'F\$ENV(\"DEFAULT\")'".uc($_)."\$(SHLIB_EXT)" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) || "!" -} + $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEFINE ".uc($_)." 'F\$ENV(\"DEFAULT\")'".uc($_)."\$(SHLIB_EXT)" } @shlibs) || "!" -} .LAST : - $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEASSIGN ".uc($_) } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) || "!" -} + $(NODEBUG) {- join("\n\t\$(NODEBUG) ", map { "DEASSIGN ".uc($_) } @shlibs) || "!" -} $(NODEBUG) DEASSIGN ossl_dataroot $(NODEBUG) DEASSIGN ossl_installroot $(NODEBUG) DEASSIGN internal @@ -331,8 +358,8 @@ uninstall : uninstall_docs uninstall_sw # Because VMS wants the generation number (or *) to delete files, we can't # use $(LIBS), $(PROGRAMS), $(GENERATED) and $(ENGINES)directly. libclean : - {- join("\n\t", map { "- DELETE $_.OLB;*" } @{$unified_info{libraries}}) || "@ !" -} - {- join("\n\t", map { "- DELETE $_.EXE;*,$_.MAP;*,$_.OPT;*" } @shlibs) || "@ !" -} + {- join("\n\t", map { "- DELETE $_.OLB;*" } @libs) || "@ !" -} + {- join("\n\t", map { "- DELETE $_.EXE;*,$_.MAP;*" } @shlibs) || "@ !" -} clean : libclean {- join("\n\t", map { "- DELETE $_.EXE;*,$_.OPT;*" } @{$unified_info{programs}}) || "@ !" -} @@ -395,6 +422,12 @@ install_ssldirs : check_INSTALLTOP IF F$SEARCH("OSSL_DATAROOT:[000000]openssl.cnf") .EQS. "" THEN - COPY/PROT=W:R {- sourcefile("apps", "openssl-vms.cnf") -} - ossl_dataroot:[000000]openssl.cnf + @ ! Install CTLOG configuration file + COPY/PROT=W:R {- sourcefile("apps", "ct_log_list.cnf") -} - + ossl_dataroot:[000000]ct_log_list.cnf-dist + IF F$SEARCH("OSSL_DATAROOT:[000000]ct_log_list.cnf") .EQS. "" THEN - + COPY/PROT=W:R {- sourcefile("apps", "ct_log_list.cnf") -} - + ossl_dataroot:[000000]ct_log_list.cnf install_shared : check_INSTALLTOP @ {- output_off() if $disabled{shared}; "" -} ! @@ -415,7 +448,7 @@ _install_dev_ns : check_INSTALLTOP - CREATE/DIR ossl_installroot:[LIB.'arch'] {- join("\n ", map { "COPY/PROT=W:R $_.OLB ossl_installroot:[LIB.'arch']" } - @{$unified_info{install}->{libraries}}) -} + @install_libs) -} install_dev : install_shared _install_dev_ns @@ -433,9 +466,9 @@ install_runtime : install_shared _install_runtime_ns install_engines : check_INSTALLTOP @ {- output_off() unless scalar @{$unified_info{engines}}; "" -} ! @ WRITE SYS$OUTPUT "*** Installing engines" - - CREATE/DIR ossl_installroot:[ENGINES{- $sover.$target{pointer_size} -}.'arch'] + - CREATE/DIR ossl_installroot:[ENGINES{- $sover_dirname.$target{pointer_size} -}.'arch'] {- join("\n ", - map { "COPY/PROT=W:RE $_.EXE ossl_installroot:[ENGINES$sover$target{pointer_size}.'arch']" } + map { "COPY/PROT=W:RE $_.EXE ossl_installroot:[ENGINES$sover_dirname$target{pointer_size}.'arch']" } @{$unified_info{install}->{engines}}) -} @ {- output_on() unless scalar @{$unified_info{engines}}; "" -} ! @@ -488,6 +521,7 @@ vmsconfig.pm : configdata.pm WRITE CONFIG "our %config = (" WRITE CONFIG " target => '","{- $config{target} -}","'," WRITE CONFIG " version => '","{- $config{version} -}","'," + WRITE CONFIG " shlib_version_number => '","{- $config{shlib_version_number} -}","'," WRITE CONFIG " shlib_major => '","{- $config{shlib_major} -}","'," WRITE CONFIG " shlib_minor => '","{- $config{shlib_minor} -}","'," WRITE CONFIG " no_shared => '","{- $disabled{shared} -}","'," @@ -524,8 +558,7 @@ debug_logicals : # Building targets ################################################### configdata.pm : $(SRCDIR)Configure $(SRCDIR)config.com {- join(" ", @{$config{build_file_templates}}, @{$config{build_infos}}, @{$config{conf_files}}) -} - @ WRITE SYS$OUTPUT "Reconfiguring..." - perl $(SRCDIR)Configure reconf + perl configdata.pm -r @ WRITE SYS$OUTPUT "*************************************************" @ WRITE SYS$OUTPUT "*** ***" @ WRITE SYS$OUTPUT "*** Please run the same mms command again ***" @@ -533,41 +566,148 @@ configdata.pm : $(SRCDIR)Configure $(SRCDIR)config.com {- join(" ", @{$config{bu @ WRITE SYS$OUTPUT "*************************************************" @ PIPE ( EXIT %X10000000 ) +reconfigure reconf : + perl configdata.pm -r + {- use File::Basename; use File::Spec::Functions qw/abs2rel rel2abs catfile catdir/; + # Helper function to figure out dependencies on libraries + # It takes a list of library names and outputs a list of dependencies + sub compute_lib_depends { + if ($disabled{shared}) { + return map { $_ =~ /\.a$/ ? $`.".OLB" : $_.".OLB" } @_; + } + return map { $_ =~ /\.a$/ + ? $`.".OLB" + : $unified_info{sharednames}->{$_}.".EXE" } @_; + } + + # Helper function to deal with inclusion directory specs. + # We have to deal with two things: + # 1. comma separation and no possibility of trailing comma + # 2. no inclusion directories given at all + # 3. long compiler command lines + # To resolve 1, we need to iterate through the sources of inclusion + # directories, and only add a comma when needed. + # To resolve 2, we need to have a variable that will hold the whole + # inclusion qualifier, or be the empty string if there are no inclusion + # directories. That's the symbol 'qual_includes' that's used in CPPFLAGS + # To resolve 3, we creata a logical name TMP_INCLUDES: to hold the list + # of inclusion directories. + # + # This function returns a list of two lists, one being the collection of + # commands to execute before the compiler is called, and the other being + # the collection of commands to execute after. It takes as arguments the + # collection of strings to include as directory specs. + sub includes { + my @stuff = ( @_ ); + my @before = ( + 'qual_includes :=', + ); + my @after = ( + 'DELETE/SYMBOL/LOCAL qual_includes', + ); + + if (scalar @stuff > 0) { + push @before, 'tmp_includes := '.shift(@stuff); + while (@stuff) { + push @before, 'tmp_add := '.shift(@stuff); + push @before, 'IF tmp_includes .NES. "" .AND. tmp_add .NES. "" THEN tmp_includes = tmp_includes + ","'; + push @before, 'tmp_includes = tmp_includes + tmp_add'; + } + push @before, "IF tmp_includes .NES. \"\" THEN DEFINE tmp_includes 'tmp_includes'"; + push @before, 'IF tmp_includes .NES. "" THEN qual_includes := /INCLUDE=(tmp_includes:)'; + push @before, 'DELETE/SYMBOL/LOCAL tmp_includes'; + push @before, 'DELETE/SYMBOL/LOCAL tmp_add'; + push @after, 'DEASSIGN tmp_includes:' + } + return ([ @before ], [ @after ]); + } + sub generatesrc { my %args = @_; + (my $target = $args{src}) =~ s/\.[sS]$/.asm/; my $generator = join(" ", @{$args{generator}}); my $generator_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}}); my $deps = join(", -\n\t\t", @{$args{generator_deps}}, @{$args{deps}}); - if ($args{src} !~ /\.[sS]$/) { + if ($target !~ /\.asm$/) { if ($args{generator}->[0] =~ m|^.*\.in$|) { my $dofile = abs2rel(rel2abs(catfile($config{sourcedir}, "util", "dofile.pl")), rel2abs($config{builddir})); return <<"EOF"; -$args{src} : $args{generator}->[0] $deps +$target : $args{generator}->[0] $deps \$(PERL) "-I\$(BLDDIR)" "-Mconfigdata" $dofile \\ - "-o$target{build_file}" $generator > \$@ + "-o$target{build_file}" $generator > \$\@ EOF } else { return <<"EOF"; -$args{src} : $args{generator}->[0] $deps - \$(PERL)$generator_incs $generator > \$@ +$target : $args{generator}->[0] $deps + \$(PERL)$generator_incs $generator > \$\@ EOF } } else { - die "No method to generate assembler source present.\n"; + if ($args{generator}->[0] =~ /\.pl$/) { + $generator = '$(PERL)'.$generator_incs.' '.$generator; + } elsif ($args{generator}->[0] =~ /\.S$/) { + $generator = undef; + } else { + die "Generator type for $src unknown: $generator\n"; + } + + my $cppflags = { + lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)', + dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)', + bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)' + } -> {$args{intent}}; + my @incs_cmds = includes({ lib => '$(LIB_INCLUDES)', + dso => '$(DSO_INCLUDES)', + bin => '$(BIN_INCLUDES)' } -> {$args{intent}}, + '$(INCLUDES)', + @{$args{incs}}); + my $incs_on = join("\n\t\@ ", @{$incs_cmds[0]}) || '!'; + my $incs_off = join("\n\t\@ ", @{$incs_cmds[1]}) || '!'; + if (defined($generator)) { + # If the target is named foo.S in build.info, we want to + # end up generating foo.s in two steps. + if ($args{src} =~ /\.S$/) { + return <<"EOF"; +$target : $args{generator}->[0] $deps + $generator \$\@-S + \@ $incs_on + PIPE \$(CPP) $cppflags \$\@-S | - + \$(PERL) -ne "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" > \$\@-i + \@ $incs_off + RENAME \$\@-i \$\@ + DELETE \$\@-S +EOF + } + # Otherwise.... + return <<"EOF"; +$target : $args{generator}->[0] $deps + $generator \$\@ +EOF + } + return <<"EOF"; +$target : $args{generator}->[0] $deps + \@ $incs_on + SHOW SYMBOL qual_includes + PIPE \$(CPP) $cppflags $args{generator}->[0] | - + \$(PERL) "-ne" "/^#(\\s*line)?\\s*[0-9]+\\s+""/ or print" > \$\@ + \@ $incs_off +EOF } } sub src2obj { my %args = @_; - my $obj = $args{obj}; - my $deps = join(", -\n\t\t", @{$args{srcs}}, @{$args{deps}}); + my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x + } ( @{$args{srcs}} ); + (my $obj = $args{obj}) =~ s|\.o$||; + my $deps = join(", -\n\t\t", @srcs, @{$args{deps}}); # Because VMS C isn't very good at combining a /INCLUDE path with # #includes having a relative directory (like '#include "../foo.h"), @@ -580,50 +720,64 @@ EOF my $objd = abs2rel(rel2abs(dirname($obj)), rel2abs($forward)); my $objn = basename($obj); my $srcs = - join(", ", - map { abs2rel(rel2abs($_), rel2abs($forward)) } @{$args{srcs}}); - my $ecflags = { lib => '$(LIB_CFLAGS)', - dso => '$(DSO_CFLAGS)', - bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; - my $incs_on = "\@ !"; - my $incs_off = "\@ !"; - my $incs = ""; - my @incs = (); - push @incs, @{$args{incs}} if @{$args{incs}}; - unless ($disabled{zlib}) { - # GNV$ZLIB_INCLUDE is the standard logical name for later zlib - # incarnations. - push @incs, ($withargs{zlib_include} || 'GNV$ZLIB_INCLUDE:'); - } - if (@incs) { - $incs_on = - "DEFINE tmp_includes " - .join(",-\n\t\t\t", map { - file_name_is_absolute($_) - ? $_ : catdir($backward,$_) - } @incs); - $incs_off = "DEASSIGN tmp_includes"; - $incs = " /INCLUDE=(tmp_includes:)"; - } + join(", ", map { abs2rel(rel2abs($_), rel2abs($forward)) } @srcs); my $before = $unified_info{before}->{$obj.".OBJ"} || "\@ !"; my $after = $unified_info{after}->{$obj.".OBJ"} || "\@ !"; - my $depbuild = $disabled{makedepend} ? "" - : " /MMS=(FILE=${objd}${objn}.tmp-D,TARGET=$obj.OBJ)"; - return <<"EOF"; + if ($srcs[0] =~ /\.asm$/) { + return <<"EOF"; $obj.OBJ : $deps ${before} SET DEFAULT $forward - $incs_on - \$(CC) \$(CFLAGS)${ecflags}${incs}${depbuild} /OBJECT=${objd}${objn}.OBJ /REPOSITORY=$backward $srcs - $incs_off + \$(AS) \$(ASFLAGS) \$(ASOUTFLAG)${objd}${objn}.OBJ $srcs + SET DEFAULT $backward +EOF + } + + my $cflags; + if ($args{installed}) { + $cflags = { lib => '$(LIB_CFLAGS)', + dso => '$(DSO_CFLAGS)', + bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; + } else { + $cflags = { lib => '$(NO_INST_LIB_CFLAGS)', + dso => '$(NO_INST_DSO_CFLAGS)', + bin => '$(NO_INST_BIN_CFLAGS)' } -> {$args{intent}}; + } + $cflags .= { lib => '$(LIB_CPPFLAGS)', + dso => '$(DSO_CPPFLAGS)', + bin => '$(BIN_CPPFLAGS)' } -> {$args{intent}}; + + my @incs_cmds = includes({ lib => '$(LIB_INCLUDES)', + dso => '$(DSO_INCLUDES)', + bin => '$(BIN_INCLUDES)' } -> {$args{intent}}, + '$(INCLUDES)', + map { + file_name_is_absolute($_) + ? $_ : catdir($backward,$_) + } @{$args{incs}}); + my $incs_on = join("\n\t\@ ", @{$incs_cmds[0]}) || '!'; + my $incs_off = join("\n\t\@ ", @{$incs_cmds[1]}) || '!'; + my $depbuild = $disabled{makedepend} ? "" + : " /MMS=(FILE=${objd}${objn}.tmp-D,TARGET=$obj.OBJ)"; + + return <<"EOF" +$obj.OBJ : $deps + ${before} + SET DEFAULT $forward + \@ $incs_on + \$(CC) ${cflags}${depbuild} /OBJECT=${objd}${objn}.OBJ /REPOSITORY=$backward $srcs + \@ $incs_off SET DEFAULT $backward ${after} + - PURGE $obj.OBJ +EOF + . ($disabled{makedepend} ? "" : <<"EOF" \@ PIPE ( \$(PERL) -e "use File::Compare qw/compare_text/; my \$x = compare_text(""$obj.D"",""$obj.tmp-D""); exit(0x10000000 + (\$x == 0));" || - RENAME $obj.tmp-D $obj.d ) \@ IF F\$SEARCH("$obj.tmp-D") .NES. "" THEN DELETE $obj.tmp-D;* - - PURGE $obj.OBJ EOF + ); } sub libobj2shlib { my %args = @_; @@ -631,19 +785,14 @@ EOF my $shlib = $args{shlib}; my $libd = dirname($lib); my $libn = basename($lib); - (my $mkdef_key = $libn) =~ s/^${osslprefix_q}lib([^0-9]*)\d*/$1/i; - my @deps = map { - $disabled{shared} ? $_.".OLB" - : $unified_info{sharednames}->{$_}.".EXE"; } @{$args{deps}}; - my $deps = join(", -\n\t\t", @deps); + my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } + grep { $_ =~ m|\.o$| } + @{$args{objs}}; + my @defs = grep { $_ =~ /\.opt$/ } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + die "More than one symbol vector" if scalar @defs > 1; + my $deps = join(", -\n\t\t", @defs, @deps); my $shlib_target = $disabled{shared} ? "" : $target{shared_target}; - my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : ""; - my $engine_opt = abs2rel(rel2abs(catfile($config{sourcedir}, - "VMS", "engine.opt")), - rel2abs($config{builddir})); - my $mkdef_pl = abs2rel(rel2abs(catfile($config{sourcedir}, - "util", "mkdef.pl")), - rel2abs($config{builddir})); my $translatesyms_pl = abs2rel(rel2abs(catfile($config{sourcedir}, "VMS", "translatesyms.pl")), rel2abs($config{builddir})); @@ -651,27 +800,32 @@ EOF # previous line's file spec as default, so if no directory spec # is present in the current line and the previous line has one that # doesn't apply, you're in for a surprise. - my $write_opt = + my $write_opt1 = + join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_; + "WRITE OPT_FILE \"$x" } @objs). + "\""; + my $write_opt2 = join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_; $x =~ s|(\.EXE)|$1/SHARE|; $x =~ s|(\.OLB)|$1/LIB|; "WRITE OPT_FILE \"$x\"" } @deps) || "\@ !"; - return <<"EOF"; -$shlib.EXE : $lib.OLB $deps $ordinalsfile - \$(PERL) $mkdef_pl "$mkdef_key" "VMS" > $shlib.SYMVEC-tmp - \$(PERL) $translatesyms_pl \$(BLDDIR)CXX\$DEMANGLER_DB. < $shlib.SYMVEC-tmp > $shlib.SYMVEC - DELETE $shlib.SYMVEC-tmp;* - OPEN/WRITE/SHARE=READ OPT_FILE $shlib.OPT - WRITE OPT_FILE "IDENTIFICATION=""V$config{version}""" - TYPE $shlib.SYMVEC /OUTPUT=OPT_FILE: - WRITE OPT_FILE "$lib.OLB/LIBRARY" - $write_opt + return <<"EOF" +$shlib.EXE : $lib.OLB $deps + \$(PERL) $translatesyms_pl \$(BLDDIR)CXX\$DEMANGLER_DB. < $defs[0] > $defs[0]-translated + OPEN/WRITE/SHARE=READ OPT_FILE $lib-components.OPT + $write_opt1 + $write_opt2 CLOSE OPT_FILE - LINK /MAP=$shlib.MAP /FULL/SHARE=$shlib.EXE $shlib.OPT/OPT \$(EX_LIBS) - DELETE $shlib.SYMVEC;* - PURGE $shlib.EXE,$shlib.OPT,$shlib.MAP + LINK \$(LDFLAGS)/SHARE=\$\@ $defs[0]-translated/OPT,- + $lib-components.OPT/OPT \$(EX_LIBS) + DELETE $defs[0]-translated;*,$lib-components.OPT;* + PURGE $shlib.EXE,$shlib.MAP EOF + . ($config{target} =~ m|alpha| ? "" : <<"EOF" + SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@ +EOF + ); } sub obj2dso { my %args = @_; @@ -679,10 +833,8 @@ EOF my $libd = dirname($lib); my $libn = basename($lib); (my $libn_nolib = $libn) =~ s/^lib//; - my @objs = map { "$_.OBJ" } @{$args{objs}}; - my @deps = map { - $disabled{shared} ? $_.".OLB" - : $unified_info{sharednames}->{$_}.".EXE"; } @{$args{deps}}; + my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); my $deps = join(", -\n\t\t", @objs, @deps); my $shlib_target = $disabled{shared} ? "" : $target{shared_target}; my $engine_opt = abs2rel(rel2abs(catfile($config{sourcedir}, @@ -702,23 +854,28 @@ EOF $x =~ s|(\.OLB)|$1/LIB|; "WRITE OPT_FILE \"$x\"" } @deps) || "\@ !"; - return <<"EOF"; + return <<"EOF" $lib.EXE : $deps OPEN/WRITE/SHARE=READ OPT_FILE $lib.OPT TYPE $engine_opt /OUTPUT=OPT_FILE: $write_opt1 $write_opt2 CLOSE OPT_FILE - LINK /MAP=$lib.MAP /FULL/SHARE=$lib.EXE $lib.OPT/OPT \$(EX_LIBS) + LINK \$(LDFLAGS)/SHARE=\$\@ $lib.OPT/OPT \$(EX_LIBS) - PURGE $lib.EXE,$lib.OPT,$lib.MAP EOF + . ($config{target} =~ m|alpha| ? "" : <<"EOF" + SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@ +EOF + ); } sub obj2lib { my %args = @_; - my $lib = $args{lib}; - my $objs = join(", -\n\t\t", map { $_.".OBJ" } (@{$args{objs}})); - my $fill_lib = join("\n\t", (map { "LIBRARY/REPLACE $lib.OLB $_.OBJ" } - @{$args{objs}})); + (my $lib = $args{lib}) =~ s/\.a$//; + my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } @{$args{objs}}; + my $objs = join(", -\n\t\t", @objs); + my $fill_lib = join("\n\t", (map { "LIBRARY/REPLACE $lib.OLB $_" } + @objs)); return <<"EOF"; $lib.OLB : $objs LIBRARY/CREATE/OBJECT $lib.OLB @@ -731,34 +888,91 @@ EOF my $bin = $args{bin}; my $bind = dirname($bin); my $binn = basename($bin); - my @objs = map { "$_.OBJ" } @{$args{objs}}; - my @deps = map { - $disabled{shared} ? $_.".OLB" - : $unified_info{sharednames}->{$_}.".EXE"; } @{$args{deps}}; + my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } @{$args{objs}}; + my $objs = join(",", @objs); + my @deps = compute_lib_depends(@{$args{deps}}); my $deps = join(", -\n\t\t", @objs, @deps); + + my $olb_count = scalar grep(m|\.OLB$|, @deps); + my $analyse_objs = "@ !"; + if ($olb_count > 0) { + my $analyse_quals = + $config{target} =~ m|alpha| ? "/GSD" : "/SECTIONS=SYMTAB"; + $analyse_objs = "- pipe ANALYSE/OBJECT$analyse_quals $objs | SEARCH SYS\$INPUT \"\"\"main\"\"\" ; nomain = \$severity .NE. 1" + } # The "[]" hack is because in .OPT files, each line inherits the # previous line's file spec as default, so if no directory spec # is present in the current line and the previous line has one that # doesn't apply, you're in for a surprise. my $write_opt1 = join(",-\"\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_; - "WRITE OPT_FILE \"$x" } @objs). + "\@ WRITE OPT_FILE \"$x" } @objs). "\""; my $write_opt2 = - join("\n\t", map { my $x = $_ =~ /\[/ ? $_ : "[]".$_; - $x =~ s|(\.EXE)|$1/SHARE|; - $x =~ s|(\.OLB)|$1/LIB|; - "WRITE OPT_FILE \"$x\"" } @deps) + join("\n\t", map { my @lines = (); + my $x = $_ =~ /\[/ ? $_ : "[]".$_; + if ($x =~ m|\.EXE$|) { + push @lines, "\@ WRITE OPT_FILE \"$x/SHARE\""; + } elsif ($x =~ m|\.OLB$|) { + (my $l = $x) =~ s/\W/_/g; + push @lines, + "\@ IF nomain THEN WRITE OPT_FILE \"$x/LIB\$(INCLUDE_MAIN_$l)\"", + "\@ IF .NOT. nomain THEN WRITE OPT_FILE \"$x/LIB\"" + } + @lines + } @deps) || "\@ !"; - return <<"EOF"; + # The linking commands looks a bit complex, but it's for good reason. + # When you link, say, foo.obj, bar.obj and libsomething.exe/share, and + # bar.obj happens to have a symbol that also exists in libsomething.exe, + # the linker will warn about it, loudly, and will then choose to pick + # the first copy encountered (the one in bar.obj in this example). + # On Unix and on Windows, the corresponding maneuvre goes through + # silently with the same effect. + # With some test programs, made for checking the internals of OpenSSL, + # we do this kind of linking deliberately, picking a few specific object + # files from within [.crypto] or [.ssl] so we can reach symbols that are + # otherwise unreachable (since the shareable images only exports the + # symbols listed in [.util]*.num), and then with the shared libraries + # themselves. So we need to silence the warning about multiply defined + # symbols, to mimic the way linking work on Unix and Windows, and so + # the build isn't interrupted (MMS stops when warnings are signaled, + # by default), and so someone building doesn't have to worry where it + # isn't necessary. If there are other warnings, however, we show them + # and let it break the build. + return <<"EOF" $bin.EXE : $deps - OPEN/WRITE/SHARE=READ OPT_FILE $bin.OPT + $analyse_objs + @ OPEN/WRITE/SHARE=READ OPT_FILE $bin.OPT $write_opt1 $write_opt2 - CLOSE OPT_FILE - LINK/EXEC=$bin.EXE \$(LDFLAGS) $bin.OPT/OPT \$(EX_LIBS) + @ CLOSE OPT_FILE + TYPE $bin.opt ! For debugging + - pipe SPAWN/WAIT/NOLOG/OUT=$bin.LINKLOG - + LINK \$(LDFLAGS)/EXEC=\$\@ $bin.OPT/OPT \$(EX_LIBS) ; - + link_status = \$status ; link_severity = link_status .AND. 7 + @ search_severity = 1 + -@ IF link_severity .EQ. 0 THEN - + pipe SEARCH $bin.LINKLOG "%","-"/MATCH=AND | - + SPAWN/WAIT/NOLOG/OUT=NLA0: - + SEARCH SYS\$INPUT: "-W-MULDEF,"/MATCH=NOR ; - + search_severity = \$severity + @ ! search_severity is 3 when the last search didn't find any matching + @ ! string: %SEARCH-I-NOMATCHES, no strings matched + @ ! If that was the result, we pretend linking got through without + @ ! fault or warning. + @ IF search_severity .EQ. 3 THEN link_severity = 1 + @ ! At this point, if link_severity shows that there was a fault + @ ! or warning, make sure to restore the linking status. + -@ IF .NOT. link_severity THEN TYPE $bin.LINKLOG + -@ DELETE $bin.LINKLOG;* + @ IF .NOT. link_severity THEN SPAWN/WAIT/NOLOG EXIT 'link_status' - PURGE $bin.EXE,$bin.OPT EOF + . ($config{target} =~ m|alpha| ? "" : <<"EOF" + SET IMAGE/FLAGS=(NOCALL_DEBUG) \$\@ +EOF + ); } sub in2script { my %args = @_; diff --git a/Configurations/shared-info.pl b/Configurations/shared-info.pl new file mode 100644 index 00000000..97163488 --- /dev/null +++ b/Configurations/shared-info.pl @@ -0,0 +1,102 @@ +#! /usr/bin/env perl +# -*- mode: perl; -*- +# 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 + +# This is a collection of extra attributes to be used as input for creating +# shared libraries, currently on any Unix variant, including Unix like +# environments on Windows. + +sub detect_gnu_ld { + my @lines = + `$config{cross_compile_prefix}$config{cc} -Wl,-V /dev/null 2>&1`; + return grep /^GNU ld/, @lines; +} +sub detect_gnu_cc { + my @lines = + `$config{cross_compile_prefix}$config{cc} -v 2>&1`; + return grep /gcc/, @lines; +} + +my %shared_info; +%shared_info = ( + 'gnu-shared' => { + shared_ldflag => '-shared -Wl,-Bsymbolic', + shared_sonameflag => '-Wl,-soname=', + }, + 'linux-shared' => sub { + return { + %{$shared_info{'gnu-shared'}}, + shared_defflag => '-Wl,--version-script=', + }; + }, + 'bsd-gcc-shared' => sub { return $shared_info{'linux-shared'}; }, + 'bsd-shared' => sub { + return $shared_info{'gnu-shared'} if detect_gnu_ld(); + return { + shared_ldflag => '-shared -nostdlib', + }; + }, + 'darwin-shared' => { + dso_lflags => '-bundle', + shared_ldflag => '-dynamiclib -current_version $(SHLIB_VERSION_NUMBER) -compatibility_version $(SHLIB_VERSION_NUMBER)', + shared_sonameflag => '-install_name $(INSTALLTOP)/$(LIBDIR)/', + }, + 'cygwin-shared' => { + shared_ldflag => '-shared -Wl,--enable-auto-image-base', + shared_impflag => '-Wl,--out-implib=', + }, + 'mingw-shared' => sub { + return { + %{$shared_info{'cygwin-shared'}}, + # def_flag made to empty string so it still generates + # something + shared_defflag => '', + }; + }, + 'alpha-osf1-shared' => sub { + return $shared_info{'gnu-shared'} if detect_gnu_ld(); + return { + dso_lflags => '-shared -Wl,-Bsymbolic', + shared_ldflag => '-shared -Wl,-Bsymbolic -set_version $(SHLIB_VERSION_NUMBER)', + }; + }, + 'solaris-shared' => { + shared_ldflag => '-Wl,-Bsymbolic', + shared_defflag => '-Wl,-M,', + }, + 'svr3-shared' => sub { + return $shared_info{'gnu-shared'} if detect_gnu_ld(); + return { + shared_ldflag => '-G', + shared_sonameflag => '-h ', + }; + }, + 'svr5-shared' => sub { + return $shared_info{'gnu-shared'} if detect_gnu_ld(); + return { + shared_ldflag => detect_gnu_cc() ? '-shared' : '-G', + shared_sonameflag => '-h ', + }; + }, + 'irix-shared' => sub { + return $shared_info{'gnu-shared'} if detect_gnu_ld(); + return { + shared_ldflag => '-shared -Wl,-Bsymbolic', + shared_sonameflag => '-Wl,-soname=', + }; + }, + 'hpux-shared' => { + bin_lflags => '-Wl,+s,+cdp,../:,+cdp,./:', + shared_ldflag => '-Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+cdp,../:,+cdp,./:', + shared_sonameflag => '-Wl,+h,', + }, + 'aix-shared' => { + bin_lflags => '-Wl,-bsvr4', + shared_ldflag => '-Wl,-bexpall,-bnolibpath,-bM:SRE', + }, +); diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 40cf2c3d..78b1a5e5 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -15,9 +15,9 @@ sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ } - our $sover = $config{target} =~ /^mingw/ - ? $config{shlib_major}."_".$config{shlib_minor} - : $config{shlib_major}.".".$config{shlib_minor}; + our $sover_dirname = $config{shlib_version_number}; + $sover_dirname =~ s|\.|_|g + if $config{target} =~ /^mingw/; # shlib and shlib_simple both take a static library name and figure # out what the shlib name should be. @@ -39,18 +39,24 @@ # removed. On some systems, they may therefore return the exact same # string. sub shlib { - return () if $disabled{shared}; my $lib = shift; - return $unified_info{sharednames}->{$lib}. $shlibvariant. $shlibext; + return () if $disabled{shared} || $lib =~ /\.a$/; + return $unified_info{sharednames}->{$lib}. $shlibvariant. '$(SHLIB_EXT)'; } sub shlib_simple { - return () if $disabled{shared}; - my $lib = shift; + return () if $disabled{shared} || $lib =~ /\.a$/; + if (windowsdll()) { - return $lib . $shlibextimport; + return $lib . '$(SHLIB_EXT_IMPORT)'; } - return $lib . $shlibextsimple; + return $lib . '$(SHLIB_EXT_SIMPLE)'; + } + + # Easy fixing of static library names + sub lib { + (my $lib = shift) =~ s/\.a$//; + return $lib . $libext; } # dso is a complement to shlib / shlib_simple that returns the @@ -84,8 +90,11 @@ SHLIB_VERSION_HISTORY={- $config{shlib_version_history} -} SHLIB_MAJOR={- $config{shlib_major} -} SHLIB_MINOR={- $config{shlib_minor} -} SHLIB_TARGET={- $target{shared_target} -} +SHLIB_EXT={- $shlibext -} +SHLIB_EXT_SIMPLE={- $shlibextsimple -} +SHLIB_EXT_IMPORT={- $shlibextimport -} -LIBS={- join(" ", map { $_.$libext } @{$unified_info{libraries}}) -} +LIBS={- join(" ", map { lib($_) } @{$unified_info{libraries}}) -} SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -} SHLIB_INFO={- join(" ", map { "\"".shlib($_).";".shlib_simple($_)."\"" } @{$unified_info{libraries}}) -} ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -} @@ -98,12 +107,13 @@ DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; } {- output_on() if $disabled{makedepend}; "" -} GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}} ) -} GENERATED={- join(" ", - ( grep { defined $unified_info{generate}->{$_} } + ( map { (my $x = $_) =~ s|\.S$|\.s|; $x } + grep { defined $unified_info{generate}->{$_} } map { @{$unified_info{sources}->{$_}} } grep { /\.o$/ } keys %{$unified_info{sources}} ), ( grep { /\.h$/ } keys %{$unified_info{generate}} )) -} -INSTALL_LIBS={- join(" ", map { $_.$libext } @{$unified_info{install}->{libraries}}) -} +INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIB_INFO={- join(" ", map { "\"".shlib($_).";".shlib_simple($_)."\"" } @{$unified_info{install}->{libraries}}) -} INSTALL_ENGINES={- join(" ", map { dso($_) } @{$unified_info{install}->{engines}}) -} @@ -144,21 +154,26 @@ OPENSSLDIR={- # : catdir($prefix, $config{openssldir})) : catdir($prefix, "ssl"); $openssldir -} -LIBDIR={- # - # if $prefix/lib$target{multilib} is not an existing - # directory, then assume that it's not searched by linker - # automatically, in which case adding $target{multilib} suffix - # causes more grief than we're ready to tolerate, so don't... - our $multilib = - -d "$prefix/lib$target{multilib}" ? $target{multilib} : ""; - our $libdir = $config{libdir} || "lib$multilib"; - $libdir -} -ENGINESDIR={- use File::Spec::Functions; - catdir($prefix,$libdir,"engines-$sover") -} +LIBDIR={- our $libdir = $config{libdir}; + unless ($libdir) { + # + # if $prefix/lib$target{multilib} is not an existing + # directory, then assume that it's not searched by linker + # automatically, in which case adding $target{multilib} suffix + # causes more grief than we're ready to tolerate, so don't... + our $multilib = + -d "$prefix/lib$target{multilib}" ? $target{multilib} : ""; + $libdir = "lib$multilib"; + } + file_name_is_absolute($libdir) ? "" : $libdir -} +# $(libdir) is chosen to be compatible with the GNU coding standards +libdir={- file_name_is_absolute($libdir) + ? $libdir : '$(INSTALLTOP)/$(LIBDIR)' -} +ENGINESDIR=$(libdir)/engines-{- $sover_dirname -} # Convenience variable for those who want to set the rpath in shared # libraries and applications -LIBRPATH=$(INSTALLTOP)/$(LIBDIR) +LIBRPATH=$(libdir) MANDIR=$(INSTALLTOP)/share/man DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME) @@ -170,29 +185,47 @@ HTMLDIR=$(DOCDIR)/html MANSUFFIX= HTMLSUFFIX=html - +# For "optional" echo messages, to get "real" silence +ECHO = echo CROSS_COMPILE= {- $config{cross_compile_prefix} -} -CC= $(CROSS_COMPILE){- $target{cc} -} -CFLAGS={- our $cflags2 = join(" ",(map { "-D".$_} @{$target{defines}}, @{$config{defines}}),"-DOPENSSLDIR=\"\\\"\$(OPENSSLDIR)\\\"\"","-DENGINESDIR=\"\\\"\$(ENGINESDIR)\\\"\"") -} {- $target{cflags} -} {- $config{cflags} -} -CFLAGS_Q={- $cflags2 =~ s|([\\"])|\\$1|g; $cflags2 -} {- $config{cflags} -} -LDFLAGS= {- $target{lflags} -} -PLIB_LDFLAGS= {- $target{plib_lflags} -} -EX_LIBS= {- $target{ex_libs} -} {- $config{ex_libs} -} -LIB_CFLAGS={- $target{shared_cflag} || "" -} -LIB_LDFLAGS={- $target{shared_ldflag}." ".$config{shared_ldflag} -} -DSO_CFLAGS={- $target{shared_cflag} || "" -} -DSO_LDFLAGS=$(LIB_LDFLAGS) -BIN_CFLAGS={- $target{bin_cflags} -} +CPPFLAGS={- our $cppflags = join(" ", + (map { "-D".$_} @{$config{defines}}), + (map { "-I".$_} @{$config{includes}}), + @{$config{cppflags}}) -} +CPPFLAGS_Q={- $cppflags =~ s|([\\"])|\\$1|g; $cppflags -} +CC= $(CROSS_COMPILE){- $config{cc} -} +CFLAGS={- join(' ', @{$config{cflags}}) -} +CXX={- $config{cxx} ? "\$(CROSS_COMPILE)$config{cxx}" : '' -} +CXXFLAGS={- join(' ', @{$config{cxxflags}}) -} +LDFLAGS= {- join(' ', @{$config{lflags}}) -} +PLIB_LDFLAGS= {- join(' ', @{$config{plib_lflags}}) -} +EX_LIBS= {- join(' ', @{$config{ex_libs}}) -} + +LIB_CPPFLAGS={- join(' ', '$(CPPFLAGS)', + $target{shared_cppflag} || (), + (map { '-D'.$_ } + ('OPENSSLDIR="\"$(OPENSSLDIR)\""', + 'ENGINESDIR="\"$(ENGINESDIR)\""'))) -} +LIB_CFLAGS={- join(' ', '$(CFLAGS)', $target{shared_cflag} || ()) -} +LIB_CXXFLAGS={- join(' ', '$(CXXFLAGS)', $target{shared_cxxflag} || ()) -} +LIB_LDFLAGS={- join(' ', '$(LDFLAGS)', $target{shared_ldflag} || (), $config{shared_ldflag} || ()) -} +DSO_CPPFLAGS={- join(' ', '$(CPPFLAGS)', $target{dso_cppflags} || ()) -} +DSO_CFLAGS={- join(' ', '$(CFLAGS)', $target{dso_cflags} || ()) -} +DSO_CXXFLAGS={- join(' ', '$(CXXFLAGS)', $target{dso_cxxflags} || ()) -} +DSO_LDFLAGS={- join(' ', '$(LDFLAGS)', $target{dso_lflags} || ()) -} +BIN_CPPFLAGS={- join(' ', '$(CPPFLAGS)', $target{bin_cppflags} || ()) -} +BIN_CFLAGS={- join(' ', '$(CFLAGS)', $target{bin_cflags} || ()) -} +BIN_CXXFLAGS={- join(' ', '$(CXXFLAGS)', $target{bin_cxxflags} || ()) -} +BIN_LDFLAGS={- join(' ', '$(LDFLAGS)', $target{bin_lflags} || ()) -} PERL={- $config{perl} -} -ARFLAGS= {- $target{arflags} -} -AR=$(CROSS_COMPILE){- $target{ar} || "ar" -} $(ARFLAGS) r -RANLIB= {- $target{ranlib} -} -NM= $(CROSS_COMPILE){- $target{nm} || "nm" -} -RCFLAGS={- $target{shared_rcflag} -} +AR=$(CROSS_COMPILE){- $config{ar} -} +ARFLAGS= {- join(' ', @{$config{arflags}}) -} +RANLIB={- $config{ranlib} ? "\$(CROSS_COMPILE)$config{ranlib}" : "true"; -} RC= $(CROSS_COMPILE){- $target{rc} || "windres" -} +RCFLAGS={- join(' ', @{$config{rcflags}}) -} {- $target{shared_rcflag} -} RM= rm -f RMDIR= rmdir TAR= {- $target{tar} || "tar" -} @@ -207,8 +240,9 @@ TARFILE= ../$(NAME).tar # order to be excused from maintaining a separate set of architecture # dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC # gcc, then the driver will automatically translate it to -xarch=v8plus -# and pass it down to assembler. In any case, we do not define AS or -# ASFLAGS for this reason. +# and pass it down to assembler. +AS={- $config{as} ? "\$(CROSS_COMPILE)$config{as}" : '$(CC) -c' -} +ASFLAGS={- join(' ', @{$config{asflags}}) || '$(CFLAGS)' -} PERLASM_SCHEME= {- $target{perlasm_scheme} -} # For x86 assembler: Set PROCESSOR to 386 if you want to support @@ -276,10 +310,10 @@ libclean: @set -e; for s in $(SHLIB_INFO); do \ s1=`echo "$$s" | cut -f1 -d";"`; \ s2=`echo "$$s" | cut -f2 -d";"`; \ - echo $(RM) $$s1; \ + $(ECHO) $(RM) $$s1; \ $(RM) $$s1; \ if [ "$$s1" != "$$s2" ]; then \ - echo $(RM) $$s2; \ + $(ECHO) $(RM) $$s2; \ $(RM) $$s2; \ fi; \ done @@ -339,47 +373,56 @@ install_ssldirs: @set -e; for x in dummy $(MISC_SCRIPTS); do \ if [ "$$x" = "dummy" ]; then continue; fi; \ fn=`basename $$x`; \ - echo "install $$x -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \ + $(ECHO) "install $$x -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \ cp $$x $(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new; \ chmod 755 $(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new; \ mv -f $(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new \ $(DESTDIR)$(OPENSSLDIR)/misc/$$fn; \ done - @echo "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist" + @$(ECHO) "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist" @cp $(SRCDIR)/apps/openssl.cnf $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new @chmod 644 $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new @mv -f $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist - @if ! [ -f "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf" ]; then \ - echo "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \ + @if [ ! -f "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf" ]; then \ + $(ECHO) "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \ cp $(SRCDIR)/apps/openssl.cnf $(DESTDIR)$(OPENSSLDIR)/openssl.cnf; \ chmod 644 $(DESTDIR)$(OPENSSLDIR)/openssl.cnf; \ fi + @$(ECHO) "install $(SRCDIR)/apps/ct_log_list.cnf -> $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.dist" + @cp $(SRCDIR)/apps/ct_log_list.cnf $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new + @chmod 644 $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new + @mv -f $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.dist + @if [ ! -f "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf" ]; then \ + $(ECHO) "install $(SRCDIR)/apps/ct_log_list.cnf -> $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \ + cp $(SRCDIR)/apps/ct_log_list.cnf $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf; \ + chmod 644 $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf; \ + fi install_dev: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) - @echo "*** Installing development files" + @$(ECHO) "*** Installing development files" @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/include/openssl @ : {- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$target{defines}}; "" -} - @echo "install $(SRCDIR)/ms/applink.c -> $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c" + @$(ECHO) "install $(SRCDIR)/ms/applink.c -> $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c" @cp $(SRCDIR)/ms/applink.c $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c @chmod 644 $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c @ : {- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$target{defines}}; "" -} @set -e; for i in $(SRCDIR)/include/openssl/*.h \ $(BLDDIR)/include/openssl/*.h; do \ fn=`basename $$i`; \ - echo "install $$i -> $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \ + $(ECHO) "install $$i -> $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \ cp $$i $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn; \ chmod 644 $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn; \ done - @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/$(LIBDIR) + @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(libdir) @set -e; for l in $(INSTALL_LIBS); do \ fn=`basename $$l`; \ - echo "install $$l -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ - cp $$l $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - $(RANLIB) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new \ - $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ + $(ECHO) "install $$l -> $(DESTDIR)$(libdir)/$$fn"; \ + cp $$l $(DESTDIR)$(libdir)/$$fn.new; \ + $(RANLIB) $(DESTDIR)$(libdir)/$$fn.new; \ + chmod 644 $(DESTDIR)$(libdir)/$$fn.new; \ + mv -f $(DESTDIR)$(libdir)/$$fn.new \ + $(DESTDIR)$(libdir)/$$fn; \ done @ : {- output_off() if $disabled{shared}; "" -} @set -e; for s in $(INSTALL_SHLIB_INFO); do \ @@ -388,53 +431,53 @@ install_dev: fn1=`basename $$s1`; \ fn2=`basename $$s2`; \ : {- output_off() if windowsdll(); "" -}; \ - echo "install $$s1 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1"; \ - cp $$s1 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1.new; \ - chmod 755 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1.new; \ - mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1.new \ - $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1; \ + $(ECHO) "install $$s1 -> $(DESTDIR)$(libdir)/$$fn1"; \ + cp $$s1 $(DESTDIR)$(libdir)/$$fn1.new; \ + chmod 755 $(DESTDIR)$(libdir)/$$fn1.new; \ + mv -f $(DESTDIR)$(libdir)/$$fn1.new \ + $(DESTDIR)$(libdir)/$$fn1; \ if [ "$$fn1" != "$$fn2" ]; then \ - echo "link $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1"; \ - ln -sf $$fn1 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ + $(ECHO) "link $(DESTDIR)$(libdir)/$$fn2 -> $(DESTDIR)$(libdir)/$$fn1"; \ + ln -sf $$fn1 $(DESTDIR)$(libdir)/$$fn2; \ fi; \ : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \ - echo "install $$s2 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \ - cp $$s2 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2.new; \ - chmod 755 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2.new; \ - mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2.new \ - $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ + $(ECHO) "install $$s2 -> $(DESTDIR)$(libdir)/$$fn2"; \ + cp $$s2 $(DESTDIR)$(libdir)/$$fn2.new; \ + chmod 755 $(DESTDIR)$(libdir)/$$fn2.new; \ + mv -f $(DESTDIR)$(libdir)/$$fn2.new \ + $(DESTDIR)$(libdir)/$$fn2; \ : {- output_on() unless windowsdll(); "" -}; \ done @ : {- output_on() if $disabled{shared}; "" -} - @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - @echo "install libcrypto.pc -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc" - @cp libcrypto.pc $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - @chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc - @echo "install libssl.pc -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc" - @cp libssl.pc $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - @chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc - @echo "install openssl.pc -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc" - @cp openssl.pc $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - @chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc + @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(libdir)/pkgconfig + @$(ECHO) "install libcrypto.pc -> $(DESTDIR)$(libdir)/pkgconfig/libcrypto.pc" + @cp libcrypto.pc $(DESTDIR)$(libdir)/pkgconfig + @chmod 644 $(DESTDIR)$(libdir)/pkgconfig/libcrypto.pc + @$(ECHO) "install libssl.pc -> $(DESTDIR)$(libdir)/pkgconfig/libssl.pc" + @cp libssl.pc $(DESTDIR)$(libdir)/pkgconfig + @chmod 644 $(DESTDIR)$(libdir)/pkgconfig/libssl.pc + @$(ECHO) "install openssl.pc -> $(DESTDIR)$(libdir)/pkgconfig/openssl.pc" + @cp openssl.pc $(DESTDIR)$(libdir)/pkgconfig + @chmod 644 $(DESTDIR)$(libdir)/pkgconfig/openssl.pc uninstall_dev: - @echo "*** Uninstalling development files" + @$(ECHO) "*** Uninstalling development files" @ : {- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$target{defines}}; "" -} - @echo "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c" + @$(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c" @$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c @ : {- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$target{defines}}; "" -} @set -e; for i in $(SRCDIR)/include/openssl/*.h \ $(BLDDIR)/include/openssl/*.h; do \ fn=`basename $$i`; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \ + $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn; \ done -$(RMDIR) $(DESTDIR)$(INSTALLTOP)/include/openssl -$(RMDIR) $(DESTDIR)$(INSTALLTOP)/include @set -e; for l in $(INSTALL_LIBS); do \ fn=`basename $$l`; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ + $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn"; \ + $(RM) $(DESTDIR)$(libdir)/$$fn; \ done @ : {- output_off() if $disabled{shared}; "" -} @set -e; for s in $(INSTALL_SHLIB_INFO); do \ @@ -443,32 +486,32 @@ uninstall_dev: fn1=`basename $$s1`; \ fn2=`basename $$s2`; \ : {- output_off() if windowsdll(); "" -}; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1"; \ - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1; \ + $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \ + $(RM) $(DESTDIR)$(libdir)/$$fn1; \ if [ "$$fn1" != "$$fn2" ]; then \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \ - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ + $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \ + $(RM) $(DESTDIR)$(libdir)/$$fn2; \ fi; \ : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \ - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ + $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \ + $(RM) $(DESTDIR)$(libdir)/$$fn2; \ : {- output_on() unless windowsdll(); "" -}; \ done @ : {- output_on() if $disabled{shared}; "" -} - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc - -$(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig - -$(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR) + $(RM) $(DESTDIR)$(libdir)/pkgconfig/libcrypto.pc + $(RM) $(DESTDIR)$(libdir)/pkgconfig/libssl.pc + $(RM) $(DESTDIR)$(libdir)/pkgconfig/openssl.pc + -$(RMDIR) $(DESTDIR)$(libdir)/pkgconfig + -$(RMDIR) $(DESTDIR)$(libdir) install_engines: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(ENGINESDIR)/ - @echo "*** Installing engines" + @$(ECHO) "*** Installing engines" @set -e; for e in dummy $(INSTALL_ENGINES); do \ if [ "$$e" = "dummy" ]; then continue; fi; \ fn=`basename $$e`; \ - echo "install $$e -> $(DESTDIR)$(ENGINESDIR)/$$fn"; \ + $(ECHO) "install $$e -> $(DESTDIR)$(ENGINESDIR)/$$fn"; \ cp $$e $(DESTDIR)$(ENGINESDIR)/$$fn.new; \ chmod 755 $(DESTDIR)$(ENGINESDIR)/$$fn.new; \ mv -f $(DESTDIR)$(ENGINESDIR)/$$fn.new \ @@ -476,14 +519,14 @@ install_engines: done uninstall_engines: - @echo "*** Uninstalling engines" + @$(ECHO) "*** Uninstalling engines" @set -e; for e in dummy $(INSTALL_ENGINES); do \ if [ "$$e" = "dummy" ]; then continue; fi; \ fn=`basename $$e`; \ if [ "$$fn" = '{- dso("ossltest") -}' ]; then \ continue; \ fi; \ - echo "$(RM) $(DESTDIR)$(ENGINESDIR)/$$fn"; \ + $(ECHO) "$(RM) $(DESTDIR)$(ENGINESDIR)/$$fn"; \ $(RM) $(DESTDIR)$(ENGINESDIR)/$$fn; \ done -$(RMDIR) $(DESTDIR)$(ENGINESDIR) @@ -492,30 +535,30 @@ install_runtime: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/bin @ : {- output_off() if windowsdll(); "" -} - @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/$(LIBDIR) + @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(libdir) @ : {- output_on() if windowsdll(); "" -} - @echo "*** Installing runtime files" + @$(ECHO) "*** Installing runtime files" @set -e; for s in dummy $(INSTALL_SHLIBS); do \ if [ "$$s" = "dummy" ]; then continue; fi; \ fn=`basename $$s`; \ : {- output_off() unless windowsdll(); "" -}; \ - echo "install $$s -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ + $(ECHO) "install $$s -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ cp $$s $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 644 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ mv -f $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new \ $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ : {- output_on() unless windowsdll(); "" -}{- output_off() if windowsdll(); "" -}; \ - echo "install $$s -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ - cp $$s $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - chmod 755 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new \ - $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ + $(ECHO) "install $$s -> $(DESTDIR)$(libdir)/$$fn"; \ + cp $$s $(DESTDIR)$(libdir)/$$fn.new; \ + chmod 755 $(DESTDIR)$(libdir)/$$fn.new; \ + mv -f $(DESTDIR)$(libdir)/$$fn.new \ + $(DESTDIR)$(libdir)/$$fn; \ : {- output_on() if windowsdll(); "" -}; \ done @set -e; for x in dummy $(INSTALL_PROGRAMS); do \ if [ "$$x" = "dummy" ]; then continue; fi; \ fn=`basename $$x`; \ - echo "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ + $(ECHO) "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ cp $$x $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 755 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ mv -f $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new \ @@ -524,7 +567,7 @@ install_runtime: @set -e; for x in dummy $(BIN_SCRIPTS); do \ if [ "$$x" = "dummy" ]; then continue; fi; \ fn=`basename $$x`; \ - echo "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ + $(ECHO) "install $$x -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ cp $$x $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 755 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ mv -f $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new \ @@ -532,26 +575,26 @@ install_runtime: done uninstall_runtime: - @echo "*** Uninstalling runtime files" + @$(ECHO) "*** Uninstalling runtime files" @set -e; for x in dummy $(INSTALL_PROGRAMS); \ do \ if [ "$$x" = "dummy" ]; then continue; fi; \ fn=`basename $$x`; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ + $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ done; @set -e; for x in dummy $(BIN_SCRIPTS); \ do \ if [ "$$x" = "dummy" ]; then continue; fi; \ fn=`basename $$x`; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ + $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ done @ : {- output_off() unless windowsdll(); "" -} @set -e; for s in dummy $(INSTALL_SHLIBS); do \ if [ "$$s" = "dummy" ]; then continue; fi; \ fn=`basename $$s`; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ + $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ done @ : {- output_on() unless windowsdll(); "" -} @@ -560,24 +603,24 @@ uninstall_runtime: install_man_docs: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) - @echo "*** Installing manpages" + @$(ECHO) "*** Installing manpages" $(PERL) $(SRCDIR)/util/process_docs.pl \ --destdir=$(DESTDIR)$(MANDIR) --type=man --suffix=$(MANSUFFIX) uninstall_man_docs: - @echo "*** Uninstalling manpages" + @$(ECHO) "*** Uninstalling manpages" $(PERL) $(SRCDIR)/util/process_docs.pl \ --destdir=$(DESTDIR)$(MANDIR) --type=man --suffix=$(MANSUFFIX) \ --remove install_html_docs: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) - @echo "*** Installing HTML manpages" + @$(ECHO) "*** Installing HTML manpages" $(PERL) $(SRCDIR)/util/process_docs.pl \ --destdir=$(DESTDIR)$(HTMLDIR) --type=html uninstall_html_docs: - @echo "*** Uninstalling manpages" + @$(ECHO) "*** Uninstalling manpages" $(PERL) $(SRCDIR)/util/process_docs.pl \ --destdir=$(DESTDIR)$(HTMLDIR) --type=html --remove @@ -587,10 +630,10 @@ uninstall_html_docs: update: generate errors ordinals generate: generate_apps generate_crypto_bn generate_crypto_objects \ - generate_crypto_conf generate_crypto_asn1 + generate_crypto_conf generate_crypto_asn1 generate_fuzz_oids doc-nits: - (cd $(SRCDIR); $(PERL) util/find-doc-nits -n ) >doc-nits + (cd $(SRCDIR); $(PERL) util/find-doc-nits -n -p ) >doc-nits if [ -s doc-nits ] ; then cat doc-nits; rm doc-nits ; exit 1; fi # Test coverage is a good idea for the future @@ -628,14 +671,22 @@ generate_crypto_asn1: ( cd $(SRCDIR); $(PERL) crypto/asn1/charmap.pl \ > crypto/asn1/charmap.h ) +generate_fuzz_oids: + ( cd $(SRCDIR); $(PERL) fuzz/mkfuzzoids.pl \ + crypto/objects/obj_dat.h \ + > fuzz/oids.txt ) + +# Set to -force to force a rebuild +ERROR_REBUILD= errors: ( cd $(SRCDIR); $(PERL) util/ck_errf.pl -strict */*.c */*/*.c ) - ( cd $(SRCDIR); $(PERL) util/mkerr.pl -recurse -write ) - ( cd $(SRCDIR)/engines; \ - for e in *.ec; do \ - $(PERL) ../util/mkerr.pl -conf $$e \ - -nostatic -staticloader -write *.c; \ - done ) + ( b=`pwd`; cd $(SRCDIR); \ + $(PERL) -I$$b util/mkerr.pl $(ERROR_REBUILD) -internal ) + ( b=`pwd`; cd $(SRCDIR)/engines; \ + for E in *.ec ; do \ + $(PERL) -I$$b ../util/mkerr.pl $(ERROR_REBUILD) -static \ + -conf $$E `basename $$E .ec`.c ; \ + done ) ordinals: ( b=`pwd`; cd $(SRCDIR); $(PERL) -I$$b util/mkdef.pl crypto update ) @@ -664,8 +715,11 @@ tar: DISTDIR=$(NAME); \ mkdir -p $$TMPDIR/$$DISTDIR; \ (cd $(SRCDIR); \ + excl_re=`git submodule status | sed -e 's/^.//' | cut -d' ' -f2`; \ + excl_re="^(fuzz/corpora|`echo $$excl_re | sed -e 's/ /$$|/g'`\$$)"; \ + echo "$$excl_re"; \ git ls-tree -r --name-only --full-tree HEAD \ - | grep -v '^fuzz/corpora' \ + | egrep -v "$$excl_re" \ | while read F; do \ mkdir -p $$TMPDIR/$$DISTDIR/`dirname $$F`; \ cp $$F $$TMPDIR/$$DISTDIR/$$F; \ @@ -681,7 +735,7 @@ tar: cd $(SRCDIR); ls -l $(TARFILE).gz dist: - @$(MAKE) PREPARE_CMD='$(PERL) ./Configure dist' tar + @$(MAKE) PREPARE_CMD='$(PERL) ./Configure dist' TARFILE="$(TARFILE)" NAME="$(NAME)" tar # Helper targets ##################################################### @@ -701,9 +755,13 @@ libcrypto.pc libssl.pc openssl.pc: configdata.pm $(LIBS) {- join(" ",map { shlib libcrypto.pc: @ ( echo 'prefix=$(INSTALLTOP)'; \ echo 'exec_prefix=$${prefix}'; \ - echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ + if [ -n "$(LIBDIR)" ]; then \ + echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ + else \ + echo 'libdir=$(libdir)'; \ + fi; \ echo 'includedir=$${prefix}/include'; \ - echo 'enginesdir=$${libdir}/engines-{- $sover -}'; \ + echo 'enginesdir=$${libdir}/engines-{- $sover_dirname -}'; \ echo ''; \ echo 'Name: OpenSSL-libcrypto'; \ echo 'Description: OpenSSL cryptography library'; \ @@ -715,7 +773,11 @@ libcrypto.pc: libssl.pc: @ ( echo 'prefix=$(INSTALLTOP)'; \ echo 'exec_prefix=$${prefix}'; \ - echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ + if [ -n "$(LIBDIR)" ]; then \ + echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ + else \ + echo 'libdir=$(libdir)'; \ + fi; \ echo 'includedir=$${prefix}/include'; \ echo ''; \ echo 'Name: OpenSSL-libssl'; \ @@ -728,7 +790,11 @@ libssl.pc: openssl.pc: @ ( echo 'prefix=$(INSTALLTOP)'; \ echo 'exec_prefix=$${prefix}'; \ - echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ + if [ -n "$(LIBDIR)" ]; then \ + echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \ + else \ + echo 'libdir=$(libdir)'; \ + fi; \ echo 'includedir=$${prefix}/include'; \ echo ''; \ echo 'Name: OpenSSL'; \ @@ -738,8 +804,7 @@ openssl.pc: configdata.pm: $(SRCDIR)/Configure $(SRCDIR)/config {- join(" ", @{$config{build_file_templates}}, @{$config{build_infos}}, @{$config{conf_files}}) -} @echo "Detected changed: $?" - @echo "Reconfiguring..." - $(PERL) $(SRCDIR)/Configure reconf + $(PERL) configdata.pm -r @echo "**************************************************" @echo "*** ***" @echo "*** Please run the same make command again ***" @@ -747,6 +812,9 @@ configdata.pm: $(SRCDIR)/Configure $(SRCDIR)/config {- join(" ", @{$config{build @echo "**************************************************" @false +reconfigure reconf: + $(PERL) configdata.pm -r + {- use File::Basename; use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/; @@ -755,13 +823,13 @@ configdata.pm: $(SRCDIR)/Configure $(SRCDIR)/config {- join(" ", @{$config{build # It takes a list of library names and outputs a list of dependencies sub compute_lib_depends { if ($disabled{shared}) { - return map { $_.$libext } @_; + return map { lib($_) } @_; } # Depending on shared libraries: # On Windows POSIX layers, we depend on {libname}.dll.a # On Unix platforms, we depend on {shlibname}.so - return map { shlib_simple($_) } @_; + return map { $_ =~ /\.a$/ ? $`.$libext : shlib_simple($_) } @_; } sub generatesrc { @@ -798,7 +866,26 @@ EOF die "Generator type for $args{src} unknown: $generator\n"; } + my $cppflags = { + lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)', + dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)', + bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)' + } -> {$args{intent}}; if (defined($generator)) { + # If the target is named foo.S in build.info, we want to + # end up generating foo.s in two steps. + if ($args{src} =~ /\.S$/) { + (my $target = $args{src}) =~ s|\.S$|.s|; + return <<"EOF"; +$target: $args{generator}->[0] $deps + ( trap "rm -f \$@.*" INT 0; \\ + $generator \$@.S; \\ + \$(CPP) $incs $cppflags \$@.S | \\ + \$(PERL) -ne '/^#(line)?\\s*[0-9]+/ or print' > \$@.i && \\ + mv -f \$@.i \$@ ) +EOF + } + # Otherwise.... return <<"EOF"; $args{src}: $args{generator}->[0] $deps $generator \$@ @@ -806,7 +893,7 @@ EOF } return <<"EOF"; $args{src}: $args{generator}->[0] $deps - \$(CC) $incs \$(CFLAGS) -E $args{generator}->[0] | \\ + \$(CPP) $incs $cppflags $args{generator}->[0] | \\ \$(PERL) -ne '/^#(line)?\\s*[0-9]+/ or print' > \$@ EOF } @@ -817,45 +904,49 @@ EOF # last in the line. We may therefore need to put back a line ending. sub src2obj { my %args = @_; - my $obj = $args{obj}; - my @srcs = @{$args{srcs}}; + (my $obj = $args{obj}) =~ s|\.o$||; + my @srcs = map { if ($unified_info{generate}->{$_}) { + (my $x = $_) =~ s/\.S$/.s/; $x + } else { + $_ + } + } ( @{$args{srcs}} ); my $srcs = join(" ", @srcs); my $deps = join(" ", @srcs, @{$args{deps}}); my $incs = join("", map { " -I".$_ } @{$args{incs}}); - unless ($disabled{zlib}) { - if ($withargs{zlib_include}) { - $incs .= " -I".$withargs{zlib_include}; - } + my $cmd; + my $cmdflags; + my $cmdcompile; + my $makedepprog = $disabled{makedepend} ? undef : $config{makedepprog}; + if (grep /\.rc$/, @srcs) { + $cmd = '$(RC)'; + $cmdflags = '$(RCFLAGS)'; + $cmdcompile = ''; + $makedepprog = undef; + } elsif (grep /\.(cc|cpp)$/, @srcs) { + $cmd = '$(CXX)'; + $cmdcompile = ' -c'; + $cmdflags = { + lib => '$(LIB_CXXFLAGS) $(LIB_CPPFLAGS)', + dso => '$(DSO_CXXFLAGS) $(DSO_CPPFLAGS)', + bin => '$(BIN_CXXFLAGS) $(BIN_CPPFLAGS)' + } -> {$args{intent}}; + } else { + $cmd = '$(CC)'; + $cmdcompile = ' -c'; + $cmdflags = { + lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)', + dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)', + bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)' + } -> {$args{intent}}; } - my $ecflags = { lib => '$(LIB_CFLAGS)', - dso => '$(DSO_CFLAGS)', - bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; - my $makedepprog = $config{makedepprog}; - my $recipe; - # extension-specific rules - if (grep /\.s$/, @srcs) { - $recipe .= <<"EOF"; + $cmdflags .= $cmdcompile; + my $recipe = <<"EOF"; $obj$objext: $deps - \$(CC) \$(CFLAGS) $ecflags -c -o \$\@ $srcs EOF - } elsif (grep /\.S$/, @srcs) { - # In case one wonders why not just $(CC) -c file.S. While it - # does work with contemporary compilers, there are some legacy - # ones that get it wrong. Hence the elaborate scheme... We - # don't care to maintain dependecy lists, because dependency - # is rather weak, at most one header file that lists constants - # which are assigned in ascending order. + if (defined $makedepprog && $makedepprog !~ /\/makedepend/) { $recipe .= <<"EOF"; -$obj$objext: $deps - ( trap "rm -f \$@.*" INT 0; \\ - \$(CPP) $incs \$(CFLAGS) $ecflags $srcs | \\ - \$(PERL) -ne '/^#(line)?\\s*[0-9]+/ or print' > \$@.s && \\ - \$(CC) \$(CFLAGS) $ecflags -c -o \$\@ \$@.s ) -EOF - } elsif (!$disabled{makedepend} && $makedepprog !~ /\/makedepend/) { - $recipe .= <<"EOF"; -$obj$objext: $deps - \$(CC) $incs \$(CFLAGS) $ecflags -MMD -MF $obj$depext.tmp -MT \$\@ -c -o \$\@ $srcs + $cmd $incs $cmdflags -MMD -MF $obj$depext.tmp -MT \$\@ -c -o \$\@ $srcs \@touch $obj$depext.tmp \@if cmp $obj$depext.tmp $obj$depext > /dev/null 2> /dev/null; then \\ rm -f $obj$depext.tmp; \\ @@ -865,12 +956,11 @@ $obj$objext: $deps EOF } else { $recipe .= <<"EOF"; -$obj$objext: $deps - \$(CC) $incs \$(CFLAGS) $ecflags -c -o \$\@ $srcs + $cmd $incs $cmdflags -o \$\@ $srcs EOF - if (!$disabled{makedepend} && $makedepprog =~ /\/makedepend/) { + if (defined $makedepprog && $makedepprog =~ /\/makedepend/) { $recipe .= <<"EOF"; - -\$(MAKEDEPEND) -f- -o"|\$\@" -- $incs \$(CFLAGS) $ecflags -- $srcs \\ + -\$(MAKEDEPEND) -f- -o"|\$\@" -- $incs $cmdflags -- $srcs \\ >$obj$depext.tmp 2>/dev/null -\$(PERL) -i -pe 's/^.*\\|//; s/ \\/(\\\\.|[^ ])*//; \$\$_ = undef if (/: *\$\$/ || /^(#.*| *)\$\$/); \$\$_.="\\n" unless !defined(\$\$_) or /\\R\$\$/g;' $obj$depext.tmp \@if cmp $obj$depext.tmp $obj$depext > /dev/null 2> /dev/null; then \\ @@ -893,79 +983,97 @@ EOF my $libd = dirname($lib); my $libn = basename($lib); (my $libname = $libn) =~ s/^lib//; - my $linklibs = join("", map { my $d = dirname($_); - my $f = basename($_); + my @linkdirs = (); + foreach (@{args{deps}}) { + my $d = dirname($_); + push @linkdirs, $d unless grep { $d eq $_ } @linkdirs; + } + my $linkflags = join("", map { "-L$_ " } @linkdirs); + my $linklibs = join("", map { my $f = basename($_); (my $l = $f) =~ s/^lib//; - " -L$d -l$l" } @{$args{deps}}); - my $deps = join(" ",compute_lib_depends(@{$args{deps}})); - my $shlib_target = $target{shared_target}; - my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : ""; + " -l$l" } @{$args{deps}}); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } + grep { $_ =~ m|\.o$| } + @{$args{objs}}; + my @defs = grep { $_ =~ /\.(def|map)$/ } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + die "More than one exported symbol map" if scalar @defs > 1; + my $objs = join(" ", @objs); + my $deps = join(" ", @objs, @defs, @deps); my $target = shlib_simple($lib); my $target_full = shlib($lib); - return <<"EOF" -# With a build on a Windows POSIX layer (Cygwin or Mingw), we know for a fact + my $shared_soname = ""; + $shared_soname .= ' '.$target{shared_sonameflag}.basename($target_full) + if defined $target{shared_sonameflag}; + my $shared_imp = ""; + $shared_imp .= ' '.$target{shared_impflag}.basename($target) + if defined $target{shared_impflag}; + my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs); + my $recipe = <<"EOF"; +# When building on a Windows POSIX layer (Cygwin or Mingw), we know for a fact # that two files get produced, {shlibname}.dll and {libname}.dll.a. # With all other Unix platforms, we often build a shared library with the # SO version built into the file name and a symlink without the SO version # It's not necessary to have both as targets. The choice falls on the -# simplest, {libname}$shlibextimport for Windows POSIX layers and -# {libname}$shlibextsimple for the Unix platforms. -$target: $lib$libext $deps $ordinalsfile - \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ - PLATFORM=\$(PLATFORM) \\ - PERL="\$(PERL)" SRCDIR='\$(SRCDIR)' DSTDIR="$libd" \\ - INSTALLTOP='\$(INSTALLTOP)' LIBDIR='\$(LIBDIR)' \\ - LIBDEPS='\$(PLIB_LDFLAGS) '"$linklibs"' \$(EX_LIBS)' \\ - LIBNAME=$libname SHLIBVERSION=\$(SHLIB_MAJOR).\$(SHLIB_MINOR) \\ - STLIBNAME=$lib$libext \\ - SHLIBNAME=$target SHLIBNAME_FULL=$target_full \\ - CC='\$(CC)' CFLAGS='\$(CFLAGS) \$(LIB_CFLAGS)' \\ - LDFLAGS='\$(LDFLAGS)' SHARED_LDFLAGS='\$(LIB_LDFLAGS)' \\ - RC='\$(RC)' SHARED_RCFLAGS='\$(RCFLAGS)' \\ - link_shlib.$shlib_target +# simplest, {libname}\$(SHLIB_EXT_IMPORT) for Windows POSIX layers and +# {libname}\$(SHLIB_EXT_SIMPLE) for the Unix platforms. +$target: $deps + \$(CC) \$(LIB_CFLAGS) $linkflags\$(LIB_LDFLAGS)$shared_soname$shared_imp \\ + -o $target_full$shared_def $objs \\ + \$(PLIB_LDFLAGS) $linklibs \$(EX_LIBS) EOF - . (windowsdll() ? <<"EOF" : ""); - rm -f apps/$shlib$shlibext - rm -f test/$shlib$shlibext - rm -f fuzz/$shlib$shlibext - cp -p $shlib$shlibext apps/ - cp -p $shlib$shlibext test/ - cp -p $shlib$shlibext fuzz/ + if (windowsdll()) { + $recipe .= <<"EOF"; + rm -f apps/$shlib'\$(SHLIB_EXT)' + rm -f test/$shlib'\$(SHLIB_EXT)' + rm -f fuzz/$shlib'\$(SHLIB_EXT)' + cp -p $shlib'\$(SHLIB_EXT)' apps/ + cp -p $shlib'\$(SHLIB_EXT)' test/ + cp -p $shlib'\$(SHLIB_EXT)' fuzz/ EOF + } else { + $recipe .= <<"EOF"; + if [ '$target' != '$target_full' ]; then \\ + rm -f $target; \\ + ln -s $target_full $target; \\ + fi +EOF + } } sub obj2dso { my %args = @_; my $dso = $args{lib}; my $dsod = dirname($dso); my $dson = basename($dso); - my $shlibdeps = join("", map { my $d = dirname($_); - my $f = basename($_); - (my $l = $f) =~ s/^lib//; - " -L$d -l$l" } @{$args{deps}}); - my $deps = join(" ",compute_lib_depends(@{$args{deps}})); - my $shlib_target = $target{shared_target}; - my $objs = join(" ", map { $_.$objext } @{$args{objs}}); + my @linkdirs = (); + foreach (@{args{deps}}) { + my $d = dirname($_); + push @linkdirs, $d unless grep { $d eq $_ } @linkdirs; + } + my $linkflags = join("", map { "-L$_ " } @linkdirs); + my $linklibs = join("", map { my $f = basename($_); + (my $l = $f) =~ s/^lib//; + " -l$l" } @{$args{deps}}); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + my $objs = join(" ", @objs); + my $deps = join(" ", @deps); my $target = dso($dso); return <<"EOF"; $target: $objs $deps - \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ - PLATFORM=\$(PLATFORM) \\ - PERL="\$(PERL)" SRCDIR='\$(SRCDIR)' DSTDIR="$dsod" \\ - LIBDEPS='\$(PLIB_LDFLAGS) '"$shlibdeps"' \$(EX_LIBS)' \\ - SHLIBNAME_FULL=$target LDFLAGS='\$(LDFLAGS)' \\ - CC='\$(CC)' CFLAGS='\$(CFLAGS) \$(DSO_CFLAGS)' \\ - SHARED_LDFLAGS='\$(DSO_LDFLAGS)' \\ - LIBEXTRAS="$objs" \\ - link_dso.$shlib_target + \$(CC) \$(DSO_CFLAGS) $linkflags\$(DSO_LDFLAGS) \\ + -o $target $objs \\ + \$(PLIB_LDFLAGS) $linklibs \$(EX_LIBS) EOF } sub obj2lib { my %args = @_; - my $lib = $args{lib}; - my $objs = join(" ", map { $_.$objext } @{$args{objs}}); + (my $lib = $args{lib}) =~ s/\.a$//; + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my $objs = join(" ", @objs); return <<"EOF"; $lib$libext: $objs - \$(AR) \$\@ \$\? + \$(AR) \$(ARFLAGS) \$\@ \$\? \$(RANLIB) \$\@ || echo Never mind. EOF } @@ -974,24 +1082,36 @@ EOF my $bin = $args{bin}; my $bind = dirname($bin); my $binn = basename($bin); - my $objs = join(" ", map { $_.$objext } @{$args{objs}}); + my $objs = join(" ", map { (my $x = $_) =~ s|\.o$|$objext|; $x } + @{$args{objs}}); my $deps = join(" ",compute_lib_depends(@{$args{deps}})); - my $linklibs = join("", map { my $d = dirname($_); - my $f = basename($_); - $d = "." if $d eq $f; - (my $l = $f) =~ s/^lib//; - " -L$d -l$l" } @{$args{deps}}); - my $shlib_target = $disabled{shared} ? "" : $target{shared_target}; + my @linkdirs = (); + foreach (@{args{deps}}) { + next if $_ =~ /\.a$/; + my $d = dirname($_); + push @linkdirs, $d unless grep { $d eq $_ } @linkdirs; + } + my $linkflags = join("", map { "-L$_ " } @linkdirs); + my $linklibs = join("", map { if ($_ =~ /\.a$/) { + " $_"; + } else { + my $f = basename($_); + (my $l = $f) =~ s/^lib//; + " -l$l" + } + } @{$args{deps}}); + my $cmd = '$(CC)'; + my $cmdflags = '$(BIN_CFLAGS)'; + if (grep /_cc\.o$/, @{$args{objs}}) { + $cmd = '$(CXX)'; + $cmdflags = '$(BIN_CXXFLAGS)'; + } return <<"EOF"; $bin$exeext: $objs $deps - \$(RM) $bin$exeext - \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ - PERL="\$(PERL)" SRCDIR=\$(SRCDIR) \\ - APPNAME=$bin$exeext OBJECTS="$objs" \\ - LIBDEPS='\$(PLIB_LDFLAGS) '"$linklibs"' \$(EX_LIBS)' \\ - CC='\$(CC)' CFLAGS='\$(CFLAGS) \$(BIN_CFLAGS)' \\ - LDFLAGS='\$(LDFLAGS)' \\ - link_app.$shlib_target + rm -f $bin$exeext + \$\${LDCMD:-$cmd} $cmdflags $linkflags\$(BIN_LDFLAGS) \\ + -o $bin$exeext $objs \\ + \$(PLIB_LDFLAGS) $linklibs \$(EX_LIBS) EOF } sub in2script { diff --git a/Configurations/windows-checker.pm b/Configurations/windows-checker.pm index de46fbc1..4b7105df 100644 --- a/Configurations/windows-checker.pm +++ b/Configurations/windows-checker.pm @@ -6,7 +6,7 @@ use Config; # we expect for the platform use File::Spec::Functions qw(:DEFAULT rel2abs); -if (rel2abs('.') !~ m|\\|) { +if (!$ENV{CONFIGURE_INSIST} && rel2abs('.') !~ m|\\|) { die <[2] eq "VC-W32" ? @@ -31,14 +32,20 @@ $win_commonroot = $ENV{$win_commonroot}; sub shlib { - return () if $disabled{shared}; my $lib = shift; + return () if $disabled{shared} || $lib =~ /\.a$/; + return () unless defined $unified_info{sharednames}->{$lib}; return $unified_info{sharednames}->{$lib} . $shlibext; } + sub lib { + (my $lib = shift) =~ s/\.a$//; + return $lib . $libext; + } + sub shlib_import { - return () if $disabled{shared}; my $lib = shift; + return () if $disabled{shared} || $lib =~ /\.a$/; return $lib . $shlibextimport; } @@ -52,7 +59,7 @@ sub dependmagic { my $target = shift; - return "$target: build_generated\n\t\$(MAKE) depend && \$(MAKE) _$target\n_$target"; + return "$target: build_generated\n\t\$(MAKE) /\$(MAKEFLAGS) depend && \$(MAKE) /\$(MAKEFLAGS) _$target\n_$target"; } ''; -} @@ -67,7 +74,7 @@ MINOR={- $config{minor} -} SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -} -LIBS={- join(" ", map { $_.$libext } @{$unified_info{libraries}}) -} +LIBS={- join(" ", map { lib($_) } @{$unified_info{libraries}}) -} SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -} SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{libraries}}) -} ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -} @@ -88,7 +95,7 @@ GENERATED={- join(" ", grep { /\.o$/ } keys %{$unified_info{sources}} ), ( grep { /\.h$/ } keys %{$unified_info{generate}} )) -} -INSTALL_LIBS={- join(" ", map { $_.$libext } @{$unified_info{install}->{libraries}}) -} +INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_ENGINES={- join(" ", map { dso($_) } @{$unified_info{install}->{engines}}) -} @@ -116,7 +123,7 @@ INSTALLTOP_dev={- # $prefix is used in the OPENSSLDIR perl snippet INSTALLTOP_dir={- canonpath($prefix_dir) -} OPENSSLDIR_dev={- # # The logic here is that if no --openssldir was given, - # OPENSSLDIR will get the value from $prefix plus "/ssl". + # OPENSSLDIR will get the value "$win_commonroot\\SSL". # If --openssldir was given and the value is an absolute # path, OPENSSLDIR will get its value without change. # If the value from --openssldir is a relative path, @@ -135,9 +142,9 @@ OPENSSLDIR_dev={- # $openssldir_dev -} OPENSSLDIR_dir={- canonpath($openssldir_dir) -} LIBDIR={- our $libdir = $config{libdir} || "lib"; - $libdir -} + file_name_is_absolute($libdir) ? "" : $libdir -} ENGINESDIR_dev={- use File::Spec::Functions qw(:DEFAULT splitpath); - our $enginesdir = catdir($prefix,$libdir,"engines-$sover"); + our $enginesdir = catdir($prefix,$libdir,"engines-$sover_dirname"); our ($enginesdir_dev, $enginesdir_dir, $enginesdir_file) = splitpath($enginesdir, 1); $enginesdir_dev -} @@ -152,35 +159,53 @@ OPENSSLDIR=$(OPENSSLDIR_dev)$(OPENSSLDIR_dir) ENGINESDIR=$(ENGINESDIR_dev)$(ENGINESDIR_dir) !ENDIF -CC={- $target{cc} -} -CFLAGS={- join(" ",(map { "-D".$_} @{$target{defines}}, @{$config{defines}})) -} {- join(" ", quotify_l("-DENGINESDIR=\"$enginesdir\"", "-DOPENSSLDIR=\"$openssldir\"")) -} {- $target{cflags} -} {- $config{cflags} -} +# $(libdir) is chosen to be compatible with the GNU coding standards +libdir={- file_name_is_absolute($libdir) + ? $libdir : '$(INSTALLTOP)\$(LIBDIR)' -} + +CC={- $config{cc} -} +CPP={- $config{cpp} -} +CPPFLAGS={- our $cppflags = join(" ", + (map { "-D".$_} @{$config{defines}}), + (map { " /I ".$_} @{$config{includes}}), + @{$config{cppflags}}) -} +CPPFLAGS_Q={- $cppflags =~ s|([\\"])|\\$1|g; $cppflags -} +CFLAGS={- join(' ', @{$config{cflags}}) -} COUTFLAG={- $target{coutflag} || "/Fo" -}$(OSSL_EMPTY) -RC={- $target{rc} || "rc" -} +RC={- $config{rc} -} RCOUTFLAG={- $target{rcoutflag} || "/fo" -}$(OSSL_EMPTY) -LD={- $target{ld} || "link" -} -LDFLAGS={- $target{lflags} -} +LD={- $config{ld} -} +LDFLAGS={- join(' ', @{$config{lflags}}) -} LDOUTFLAG={- $target{loutflag} || "/out:" -}$(OSSL_EMPTY) -EX_LIBS={- $target{ex_libs} -} -LIB_CFLAGS={- join(" ", $target{lib_cflags}, $target{shared_cflag}) || "" -} -LIB_LDFLAGS={- $target{shared_ldflag} || "" -} -DSO_CFLAGS={- join(" ", $target{dso_cflags}, $target{shared_cflag}) || "" -} -DSO_LDFLAGS={- join(" ", $target{dso_lflags}, $target{shared_ldflag}) || "" -} -BIN_CFLAGS={- $target{bin_cflags} -} -BIN_LDFLAGS={- $target{bin_lflags} -} +EX_LIBS={- join(' ', @{$config{ex_libs}}) -} + +LIB_CPPFLAGS={- join(' ', '$(CPPFLAGS)', + $target{shared_cppflag} || (), + (map { quotify_l("-D".$_) } + "OPENSSLDIR=\"$openssldir\"", + "ENGINESDIR=\"$enginesdir\"")) -} +LIB_CFLAGS={- join(' ', '$(CFLAGS)', $target{lib_cflags} || (), $target{shared_cflag} || ()) -} +LIB_LDFLAGS={- join(' ', '$(LDFLAGS)', $target{shared_ldflag} || (), $config{shared_ldflag} || ()) -} +DSO_CPPFLAGS={- join(' ', '$(CPPFLAGS)', $target{dso_cppflags} || ()) -} +DSO_CFLAGS={- join(' ', '$(CFLAGS)', $target{dso_cflags} || ()) -} +DSO_LDFLAGS={- join(' ', '$(LDFLAGS)', $target{dso_ldflag} || ()) -} +BIN_CPPFLAGS={- join(' ', '$(CPPFLAGS)', $target{dso_cppflags} || ()) -} +BIN_CFLAGS={- join(' ', '$(CFLAGS)', $target{bin_cflags} || ()) -} +BIN_LDFLAGS={- join(' ', '$(LDFLAGS)', $target{bin_lflags} || ()) -} PERL={- $config{perl} -} -AR={- $target{ar} -} -ARFLAGS= {- $target{arflags} -} +AR={- $config{ar} -} +ARFLAGS= {- join(' ', @{$config{arflags}}) -} AROUTFLAG={- $target{aroutflag} || "/out:" -}$(OSSL_EMPTY) -MT={- $target{mt} -} -MTFLAGS= {- $target{mtflags} -} +MT={- $config{mt} -} +MTFLAGS= {- join(' ', @{$config{mtflags}}) -} MTINFLAG={- $target{mtinflag} || "-manifest " -}$(OSSL_EMPTY) MTOUTFLAG={- $target{mtoutflag} || "-outputresource:" -}$(OSSL_EMPTY) -AS={- $target{as} -} -ASFLAGS={- $target{asflags} -} +AS={- $config{as} -} +ASFLAGS={- join(' ', @{$config{asflags}}) -} ASOUTFLAG={- $target{asoutflag} -}$(OSSL_EMPTY) PERLASM_SCHEME= {- $target{perlasm_scheme} -} @@ -248,7 +273,9 @@ clean: libclean -del /Q /S /F *.d -del /Q /S /F *.obj -del /Q /S /F *.pdb - -del /Q /S /F *.exp + -del /Q /F *.exp + -del /Q /F apps\*.exp + -del /Q /F engines\*.exp -del /Q /S /F engines\*.ilk -del /Q /S /F engines\*.lib -del /Q /S /F apps\*.lib @@ -283,25 +310,28 @@ install_ssldirs: "$(OPENSSLDIR)\openssl.cnf" @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(MISC_SCRIPTS) \ "$(OPENSSLDIR)\misc" + @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\ct_log_list.cnf" \ + "$(OPENSSLDIR)\ct_log_list.cnf.dist" + @IF NOT EXIST "$(OPENSSLDIR)\ct_log_list.cnf" \ + "$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\ct_log_list.cnf" \ + "$(OPENSSLDIR)\ct_log_list.cnf" install_dev: @if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 ) @echo *** Installing development files @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\include\openssl" - @rem {- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$target{defines}}; "" -} + @rem {- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$config{defines}}; "" -} @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\ms\applink.c" \ "$(INSTALLTOP)\include\openssl" - @rem {- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$target{defines}}; "" -} + @rem {- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$config{defines}}; "" -} @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\include\openssl\*.h" \ "$(INSTALLTOP)\include\openssl" @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\include\openssl\*.h \ "$(INSTALLTOP)\include\openssl" - @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\$(LIBDIR)" - @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_LIBS) \ - "$(INSTALLTOP)\$(LIBDIR)" + @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(libdir)" + @"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_LIBS) "$(libdir)" @if "$(SHLIBS)"=="" \ - "$(PERL)" "$(SRCDIR)\util\copy.pl" ossl_static.pdb \ - "$(INSTALLTOP)\$(LIBDIR)" + "$(PERL)" "$(SRCDIR)\util\copy.pl" ossl_static.pdb "$(libdir)" uninstall_dev: @@ -344,8 +374,7 @@ uninstall_html_docs: configdata.pm: "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{build_file_templates}}, @{$config{build_infos}}, @{$config{conf_files}}) -} @echo "Detected changed: $?" - @echo "Reconfiguring..." - "$(PERL)" "$(SRCDIR)\Configure" reconf + "$(PERL)" configdata.pm -r @echo "**************************************************" @echo "*** ***" @echo "*** Please run the same make command again ***" @@ -353,6 +382,9 @@ configdata.pm: "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{b @echo "**************************************************" @exit 1 +reconfigure reconf: + "$(PERL)" configdata.pm -r + {- use File::Basename; use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/; @@ -361,16 +393,20 @@ configdata.pm: "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{b # It takes a list of library names and outputs a list of dependencies sub compute_lib_depends { if ($disabled{shared}) { - return map { $_.$libext } @_; + return map { lib($_) } @_; } - return map { shlib_import($_) } @_; + foreach (@_) { + (my $l = $_) =~ s/\.a$//; + die "Linking with static variants of shared libraries is not supported in this configuration\n" + if $l ne $_ && shlib($l); + } + return map { shlib_import($_) or lib($_) } @_; } sub generatesrc { my %args = @_; (my $target = $args{src}) =~ s/\.[sS]$/.asm/; - my ($gen0, @gens) = @{$args{generator}}; - my $generator = '"'.$gen0.'"'.join('', map { " $_" } @gens); + my $generator = '"'.join('" "', @{$args{generator}}).'"'; my $generator_incs = join("", map { " -I \"$_\"" } @{$args{generator_incs}}); my $incs = join("", map { " /I \"$_\"" } @{$args{incs}}); my $deps = @{$args{deps}} ? @@ -401,6 +437,12 @@ EOF die "Generator type for $src unknown: $generator\n"; } + my $cppflags = $incs; + $cppflags .= { + lib => ' $(LIB_CFLAGS) $(LIB_CPPFLAGS)', + dso => ' $(DSO_CFLAGS) $(DSO_CPPFLAGS)', + bin => ' $(BIN_CFLAGS) $(BIN_CPPFLAGS)' + } -> {$args{intent}}; if (defined($generator)) { # If the target is named foo.S in build.info, we want to # end up generating foo.s in two steps. @@ -409,7 +451,7 @@ EOF $target: "$args{generator}->[0]" $deps set ASM=\$(AS) $generator \$@.S - \$(CC) $incs \$(CFLAGS) /EP /C \$@.S > \$@.i && move /Y \$@.i \$@ + \$(CPP) $cppflags \$@.S > \$@.i && move /Y \$@.i \$@ del /Q \$@.S EOF } @@ -422,28 +464,33 @@ EOF } return <<"EOF"; $target: "$args{generator}->[0]" $deps - \$(CC) $incs \$(CFLAGS) /EP /C "$args{generator}->[0]" > \$@.i && move /Y \$@.i \$@ + \$(CPP) $incs $cppflags "$args{generator}->[0]" > \$@.i && move /Y \$@.i \$@ EOF } } sub src2obj { my %args = @_; - my $obj = $args{obj}; my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x } ( @{$args{srcs}} ); my $srcs = '"'.join('" "', @srcs).'"'; my $deps = '"'.join('" "', @srcs, @{$args{deps}}).'"'; my $incs = join("", map { ' /I "'.$_.'"' } @{$args{incs}}); - unless ($disabled{zlib}) { - if ($withargs{zlib_include}) { - $incs .= ' /I "'.$withargs{zlib_include}.'"'; - } - } - my $ecflags = { lib => '$(LIB_CFLAGS)', - dso => '$(DSO_CFLAGS)', - bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; + my $cflags = { lib => ' $(LIB_CFLAGS)', + dso => ' $(DSO_CFLAGS)', + bin => ' $(BIN_CFLAGS)' } -> {$args{intent}}; + $cflags .= $incs; + $cflags .= { lib => ' $(LIB_CPPFLAGS)', + dso => ' $(DSO_CPPFLAGS)', + bin => ' $(BIN_CPPFLAGS)' } -> {$args{intent}}; my $makedepprog = $config{makedepprog}; + if ($srcs[0] =~ /\.rc$/) { + return <<"EOF"; +$args{obj}: $deps + \$(RC) \$(RCOUTFLAG)\$\@ $srcs +EOF + } + (my $obj = $args{obj}) =~ s|\.o$||; if ($srcs[0] =~ /\.asm$/) { return <<"EOF"; $obj$objext: $deps @@ -452,7 +499,7 @@ EOF } return <<"EOF" if (!$disabled{makedepend}); $obj$depext: $deps - \$(CC) \$(CFLAGS) $ecflags$inc /Zs /showIncludes $srcs 2>&1 | \\ + \$(CC) $cflags /Zs /showIncludes $srcs 2>&1 | \\ "\$(PERL)" -n << > $obj$depext chomp; s/^Note: including file: *//; @@ -460,11 +507,13 @@ s/^Note: including file: *//; END { print '$obj$objext: ',join(" ", sort keys \%collect),"\\n" } << $obj$objext: $obj$depext - \$(CC) $incs \$(CFLAGS) $ecflags -c \$(COUTFLAG)\$\@ $srcs + \$(CC) $cflags -c \$(COUTFLAG)\$\@ @<< +$srcs +<< EOF return <<"EOF" if ($disabled{makedepend}); $obj$objext: $deps - \$(CC) $incs \$(CFLAGS) $ecflags -c \$(COUTFLAG)\$\@ $srcs + \$(CC) $cflags -c \$(COUTFLAG)\$\@ $srcs EOF } @@ -475,32 +524,24 @@ EOF my %args = @_; my $lib = $args{lib}; my $shlib = $args{shlib}; - (my $mkdef_key = $lib) =~ s/^lib//i; - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $linklibs = join("", - map { "\n$_" } compute_lib_depends(@{$args{deps}})); - my $deps = join(" ", - (map { $_.$objext } @{$args{objs}}), - compute_lib_depends(@{$args{deps}})); - my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : ""; - my $mkdef_pl = abs2rel(rel2abs(catfile($config{sourcedir}, - "util", "mkdef.pl")), - rel2abs($config{builddir})); - my $mkrc_pl = abs2rel(rel2abs(catfile($config{sourcedir}, - "util", "mkrc.pl")), - rel2abs($config{builddir})); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } + grep { $_ =~ m/\.(?:o|res)$/ } + @{$args{objs}}; + my @defs = grep { $_ =~ /\.def$/ } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + die "More than one exported symbols list" if scalar @defs > 1; + my $linklibs = join("", map { "$_\n" } @deps); + my $objs = join("\n", @objs); + my $deps = join(" ", @objs, @defs, @deps); my $target = shlib_import($lib); + my $shared_def = join("", map { " /def:$_" } @defs); return <<"EOF" -$target: $deps "$ordinalsfile" "$mkdef_pl" - "\$(PERL)" "$mkdef_pl" "$mkdef_key" 32 > $shlib.def - "\$(PERL)" -i.tmp -pe "s|^LIBRARY\\s+${mkdef_key}32|LIBRARY $shlib|;" $shlib.def - DEL $shlib.def.tmp - "\$(PERL)" "$mkrc_pl" $shlib$shlibext > $shlib.rc - \$(RC) \$(RCOUTFLAG)$shlib.res $shlib.rc +$target: $deps IF EXIST $shlib$shlibext.manifest DEL /F /Q $shlib$shlibext.manifest \$(LD) \$(LDFLAGS) \$(LIB_LDFLAGS) \\ - /implib:\$@ \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<< || (DEL /Q \$(\@B).* $shlib.* && EXIT 1) -$objs $shlib.res$linklibs \$(EX_LIBS) + /implib:\$@ \$(LDOUTFLAG)$shlib$shlibext$shared_def @<< || (DEL /Q \$(\@B).* $shlib.* && EXIT 1) +$objs +$linklibs\$(EX_LIBS) << IF EXIST $shlib$shlibext.manifest \\ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$shlib$shlibext.manifest \$(MTOUTFLAG)$shlib$shlibext @@ -516,12 +557,11 @@ EOF my %args = @_; my $dso = $args{lib}; my $dso_n = basename($dso); - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $linklibs = join("", - map { "\n$_" } compute_lib_depends(@{$args{deps}})); - my $deps = join(" ", - (map { $_.$objext } @{$args{objs}}), - compute_lib_depends(@{$args{deps}})); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + my $objs = join("\n", @objs); + my $linklibs = join("", map { "$_\n" } @deps); + my $deps = join(" ", @objs, @deps); return <<"EOF"; $dso$dsoext: $deps IF EXIST $dso$dsoext.manifest DEL /F /Q $dso$dsoext.manifest @@ -531,43 +571,48 @@ EXPORTS bind_engine @1 v_check @2 << -$objs$linklibs \$(EX_LIBS) +$objs +$linklibs \$(EX_LIBS) << IF EXIST $dso$dsoext.manifest \\ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$dso$dsoext.manifest \$(MTOUTFLAG)$dso$dsoext EOF } sub obj2lib { + my %args = @_; + my $lib = $args{lib}; + # Because static libs and import libs are both named the same in native # Windows, we can't have both. We skip the static lib in that case, # as the shared libs are what we use anyway. - return "" unless $disabled{"shared"}; + return "" unless $disabled{"shared"} || $lib =~ /\.a$/; - my %args = @_; - my $lib = $args{lib}; - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $deps = join(" ", map { $_.$objext } @{$args{objs}}); + $lib =~ s/\.a$//; + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my $objs = join("\n", @objs); + my $deps = join(" ", @objs); return <<"EOF"; $lib$libext: $deps \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<< -\$** +$objs << EOF } sub obj2bin { my %args = @_; my $bin = $args{bin}; - my $objs = join("\n", map { $_.$objext } @{$args{objs}}); - my $linklibs = join("", - map { "\n$_" } compute_lib_depends(@{$args{deps}})); - my $deps = join(" ", - (map { $_.$objext } @{$args{objs}}), - compute_lib_depends(@{$args{deps}})); + my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}}; + my @deps = compute_lib_depends(@{$args{deps}}); + my $objs = join("\n", @objs); + my $linklibs = join("", map { "$_\n" } @deps); + my $deps = join(" ", @objs, @deps); return <<"EOF"; $bin$exeext: $deps IF EXIST $bin$exeext.manifest DEL /F /Q $bin$exeext.manifest \$(LD) \$(LDFLAGS) \$(BIN_LDFLAGS) \$(LDOUTFLAG)$bin$exeext @<< -$objs setargv.obj$linklibs \$(EX_LIBS) +$objs +setargv.obj +$linklibs\$(EX_LIBS) << IF EXIST $bin$exeext.manifest \\ \$(MT) \$(MTFLAGS) \$(MTINFLAG)$bin$exeext.manifest \$(MTOUTFLAG)$bin$exeext diff --git a/Configure b/Configure index c0033643..3c40a0e2 100755 --- a/Configure +++ b/Configure @@ -11,6 +11,7 @@ use 5.10.0; use strict; +use Config; use FindBin; use lib "$FindBin::Bin/util/perl"; use File::Basename; @@ -103,23 +104,25 @@ my $usage="Usage: Configure [no- ...] [enable- ...] [-Dxxx] [-lx # past these. # DEBUG_UNUSED enables __owur (warn unused result) checks. +# -DPEDANTIC complements -pedantic and is meant to mask code that +# is not strictly standard-compliant and/or implementation-specific, +# e.g. inline assembly, disregards to alignment requirements, such +# that -pedantic would complain about. Incidentally -DPEDANTIC has +# to be used even in sanitized builds, because sanitizer too is +# supposed to and does take notice of non-standard behaviour. Then +# -pedantic with pre-C9x compiler would also complain about 'long +# long' not being supported. As 64-bit algorithms are common now, +# it grew impossible to resolve this without sizeable additional +# code, so we just tell compiler to be pedantic about everything +# but 'long long' type. + my $gcc_devteam_warn = "-DDEBUG_UNUSED" - # -DPEDANTIC complements -pedantic and is meant to mask code that - # is not strictly standard-compliant and/or implementation-specific, - # e.g. inline assembly, disregards to alignment requirements, such - # that -pedantic would complain about. Incidentally -DPEDANTIC has - # to be used even in sanitized builds, because sanitizer too is - # supposed to and does take notice of non-standard behaviour. Then - # -pedantic with pre-C9x compiler would also complain about 'long - # long' not being supported. As 64-bit algorithms are common now, - # it grew impossible to resolve this without sizeable additional - # code, so we just tell compiler to be pedantic about everything - # but 'long long' type. . " -DPEDANTIC -pedantic -Wno-long-long" . " -Wall" . " -Wextra" . " -Wno-unused-parameter" . " -Wno-missing-field-initializers" + . " -Wswitch" . " -Wsign-compare" . " -Wmissing-prototypes" . " -Wshadow" @@ -132,19 +135,20 @@ my $gcc_devteam_warn = "-DDEBUG_UNUSED" # These are used in addition to $gcc_devteam_warn when the compiler is clang. # TODO(openssl-team): fix problems and investigate if (at least) the # following warnings can also be enabled: -# -Wswitch-enum # -Wcast-align -# -Wunreachable-code +# -Wunreachable-code -- no, too ugly/compiler-specific # -Wlanguage-extension-token -- no, we use asm() # -Wunused-macros -- no, too tricky for BN and _XOPEN_SOURCE etc # -Wextended-offsetof -- no, needed in CMS ASN1 code my $clang_devteam_warn = "" - . " -Qunused-arguments" + . " -Wswitch-default" + . " -Wno-parentheses-equality" . " -Wno-language-extension-token" . " -Wno-extended-offsetof" . " -Wconditional-uninitialized" . " -Wincompatible-pointer-types-discards-qualifiers" . " -Wmissing-variable-declarations" + . " -Wno-unknown-warning-option" ; # This adds backtrace information to the memory leak info. Is only used @@ -207,6 +211,8 @@ $config{builddir} = abs2rel($blddir); my @argvcopy=@ARGV; if (grep /^reconf(igure)?$/, @argvcopy) { + die "reconfiguring with other arguments present isn't supported" + if scalar @argvcopy > 1; if (-f "./configdata.pm") { my $file = "./configdata.pm"; unless (my $return = do $file) { @@ -219,22 +225,7 @@ if (grep /^reconf(igure)?$/, @argvcopy) { @{$configdata::config{perlargv}} : (); die "Incorrect data to reconfigure, please do a normal configuration\n" if (grep(/^reconf/,@argvcopy)); - $ENV{CROSS_COMPILE} = $configdata::config{cross_compile_prefix} - if defined($configdata::config{cross_compile_prefix}); - $ENV{CC} = $configdata::config{cc} - if defined($configdata::config{cc}); - $ENV{BUILDFILE} = $configdata::config{build_file} - if defined($configdata::config{build_file}); - $ENV{$local_config_envname} = $configdata::config{local_config_dir} - if defined($configdata::config{local_config_dir}); - - print "Reconfiguring with: ", join(" ",@argvcopy), "\n"; - print " CROSS_COMPILE = ",$ENV{CROSS_COMPILE},"\n" - if $ENV{CROSS_COMPILE}; - print " CC = ",$ENV{CC},"\n" if $ENV{CC}; - print " BUILDFILE = ",$ENV{BUILDFILE},"\n" if $ENV{BUILDFILE}; - print " $local_config_envname = ",$ENV{$local_config_envname},"\n" - if $ENV{$local_config_envname}; + $config{perlenv} = $configdata::config{perlenv} // {}; } else { die "Insufficient data to reconfigure, please do a normal configuration\n"; } @@ -273,13 +264,13 @@ foreach (sort glob($pattern)) { &read_config($_); } -if (defined $ENV{$local_config_envname}) { +if (defined env($local_config_envname)) { if ($^O eq 'VMS') { # VMS environment variables are logical names, # which can be used as is $pattern = $local_config_envname . ':' . '*.conf'; } else { - $pattern = catfile($ENV{$local_config_envname}, '*.conf'); + $pattern = catfile(env($local_config_envname), '*.conf'); } foreach (sort glob($pattern)) { @@ -287,36 +278,35 @@ if (defined $ENV{$local_config_envname}) { } } - -print "Configuring OpenSSL version $config{version} ($config{version_num})\n"; +# Save away perl command information +$config{perl_cmd} = $^X; +$config{perl_version} = $Config{version}; +$config{perl_archname} = $Config{archname}; $config{prefix}=""; $config{openssldir}=""; $config{processor}=""; $config{libdir}=""; -$config{cross_compile_prefix}=""; -$config{fipslibdir}="/usr/local/ssl/fips-2.0/lib/"; -my $nofipscanistercheck=0; -$config{baseaddr}="0xFB00000"; my $auto_threads=1; # enable threads automatically? true by default my $default_ranlib; -$config{fips}=0; # Top level directories to build $config{dirs} = [ "crypto", "ssl", "engines", "apps", "test", "util", "tools", "fuzz" ]; # crypto/ subdirectories to build $config{sdirs} = [ "objects", - "md2", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2", - "des", "aes", "rc2", "rc4", "rc5", "idea", "bf", "cast", "camellia", "seed", "chacha", "modes", + "md2", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2", "siphash", "sm3", + "des", "aes", "rc2", "rc4", "rc5", "idea", "aria", "bf", "cast", "camellia", "seed", "sm4", "chacha", "modes", "bn", "ec", "rsa", "dsa", "dh", "dso", "engine", "buffer", "bio", "stack", "lhash", "rand", "err", "evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "comp", "ocsp", "ui", - "cms", "ts", "srp", "cmac", "ct", "async", "kdf" + "cms", "ts", "srp", "cmac", "ct", "async", "kdf", "store" ]; +# test/ subdirectories to build +$config{tdirs} = [ "ossl_shim" ]; # Known TLS and DTLS protocols -my @tls = qw(ssl3 tls1 tls1_1 tls1_2); +my @tls = qw(ssl3 tls1 tls1_1 tls1_2 tls1_3); my @dtls = qw(dtls1 dtls1_2); # Explicitly known options that are possible to disable. They can @@ -325,6 +315,7 @@ my @dtls = qw(dtls1 dtls1_2); my @disablables = ( "afalgeng", + "aria", "asan", "asm", "async", @@ -344,6 +335,7 @@ my @disablables = ( "ct", "deprecated", "des", + "devcryptoeng", "dgram", "dh", "dsa", @@ -358,6 +350,7 @@ my @disablables = ( "egd", "engine", "err", + "external-tests", "filenames", "fuzz-libfuzzer", "fuzz-afl", @@ -388,6 +381,9 @@ my @disablables = ( "sctp", "seed", "shared", + "siphash", + "sm3", + "sm4", "sock", "srp", "srtp", @@ -396,11 +392,13 @@ my @disablables = ( "ssl-trace", "static-engine", "stdio", + "tests", "threads", "tls", + "tls13downgrade", "ts", "ubsan", - "ui", + "ui-console", "unit-test", "whirlpool", "weak-ssl-ciphers", @@ -410,13 +408,14 @@ my @disablables = ( foreach my $proto ((@tls, @dtls)) { push(@disablables, $proto); - push(@disablables, "$proto-method"); + push(@disablables, "$proto-method") unless $proto eq "tls1_3"; } my %deprecated_disablables = ( "ssl2" => undef, "buf-freelists" => undef, - "ripemd" => "rmd160" + "ripemd" => "rmd160", + "ui" => "ui-console", ); # All of the following is disabled by default (RC5 was enabled before 0.9.8): @@ -425,8 +424,10 @@ our %disabled = ( # "what" => "comment" "asan" => "default", "crypto-mdebug" => "default", "crypto-mdebug-backtrace" => "default", + "devcryptoeng" => "default", "ec_nistp_64_gcc_128" => "default", "egd" => "default", + "external-tests" => "default", "fuzz-libfuzzer" => "default", "fuzz-afl" => "default", "heartbeats" => "default", @@ -438,6 +439,7 @@ our %disabled = ( # "what" => "comment" "ssl3" => "default", "ssl3-method" => "default", "ubsan" => "default", + "tls13downgrade" => "default", "unit-test" => "default", "weak-ssl-ciphers" => "default", "zlib" => "default", @@ -473,14 +475,16 @@ my @disable_cascades = ( # Without position independent code, there can be no shared libraries or DSOs "pic" => [ "shared" ], "shared" => [ "dynamic-engine" ], - "engine" => [ "afalgeng" ], + "engine" => [ "afalgeng", "devcryptoeng" ], # no-autoalginit is only useful when building non-shared "autoalginit" => [ "shared", "apps" ], "stdio" => [ "apps", "capieng", "egd" ], "apps" => [ "tests" ], - "comp" => [ "zlib" ], + "tests" => [ "external-tests" ], + "comp" => [ "zlib" ], + "ec" => [ "tls1_3" ], sub { !$disabled{"unit-test"} } => [ "heartbeats" ], sub { !$disabled{"msan"} } => [ "asm" ], @@ -510,23 +514,104 @@ while ((my $first, my $second) = (shift @list, shift @list)) { &usage if ($#ARGV < 0); -my $user_cflags=""; -my @user_defines=(); +# For the "make variables" CINCLUDES and CDEFINES, we support lists with +# platform specific list separators. Users from those platforms should +# recognise those separators from how you set up the PATH to find executables. +# The default is the Unix like separator, :, but as an exception, we also +# support the space as separator. +my $list_separator_re = + { VMS => qr/(? qr/(? {$^O} // qr/(? undef, + ARFLAGS => [], + AS => undef, + ASFLAGS => [], + CC => undef, + CFLAGS => [], + CXX => undef, + CXXFLAGS => [], + CPP => undef, + CPPFLAGS => [], # -D, -I, -Wp, + CPPDEFINES => [], # Alternative for -D + CPPINCLUDES => [], # Alternative for -I + CROSS_COMPILE => undef, + HASHBANGPERL=> undef, + LD => undef, + LDFLAGS => [], # -L, -Wl, + LDLIBS => [], # -l + MT => undef, + MTFLAGS => [], + RANLIB => undef, + RC => undef, + RCFLAGS => [], + RM => undef, + ); +# Info about what "make variables" may be prefixed with the cross compiler +# prefix. This should NEVER mention any such variable with a list for value. +my @user_crossable = qw ( AR AS CC CXX CPP LD MT RANLIB RC ); +# The same but for flags given as Configure options. These are *additional* +# input, as opposed to the VAR=string option that override the corresponding +# config target attributes +my %useradd = ( + CPPDEFINES => [], + CPPINCLUDES => [], + CPPFLAGS => [], + CFLAGS => [], + CXXFLAGS => [], + LDFLAGS => [], + LDLIBS => [], + ); + +my %user_synonyms = ( + HASHBANGPERL=> 'PERL', + RC => 'WINDRES', + ); +my %user_to_target = ( + # If not given here, the value is the lc of the key + CPPDEFINES => 'defines', + CPPINCLUDES => 'includes', + CROSS_COMPILE => 'cross_compile_prefix', + LDFLAGS => 'lflags', + LDLIBS => 'ex_libs', + ); + $config{openssl_api_defines}=[]; $config{openssl_algorithm_defines}=[]; $config{openssl_thread_defines}=[]; $config{openssl_sys_defines}=[]; $config{openssl_other_defines}=[]; -my $libs=""; -my $target=""; $config{options}=""; $config{build_type} = "release"; +my $target=""; my %unsupported_options = (); my %deprecated_options = (); +# If you change this, update apps/version.c +my @known_seed_sources = qw(getrandom devrandom os egd none rdcpu librandom); +my @seed_sources = (); while (@argvcopy) { $_ = shift @argvcopy; + + # Support env variable assignments among the options + if (m|^(\w+)=(.+)?$|) + { + $config{perlenv}->{$1} = $2; + # Every time a variable is given as a configuration argument, + # it acts as a reset if the variable. + if (exists $user{$1}) + { + $user{$1} = ref $user{$1} eq "ARRAY" ? [] : undef; + } + if (exists $useradd{$1}) + { + $useradd{$1} = []; + } + next; + } + # VMS is a case insensitive environment, and depending on settings # out of our control, we may receive options uppercased. Let's # downcase at least the part before any equal sign. @@ -644,7 +729,7 @@ while (@argvcopy) { $config{processor}=386; } elsif (/^fips$/) { - $config{fips}=1; + die "FIPS mode not supported\n"; } elsif (/^rsaref$/) { @@ -654,8 +739,7 @@ while (@argvcopy) } elsif (/^nofipscanistercheck$/) { - $config{fips} = 1; - $nofipscanistercheck = 1; + die "FIPS mode not supported\n"; } elsif (/^[-+]/) { @@ -693,25 +777,34 @@ while (@argvcopy) { $withargs{fuzzer_include}=$1; } - elsif (/^--with-fipslibdir=(.*)$/) + elsif (/^--with-rand-seed=(.*)$/) { - $config{fipslibdir}="$1/"; - } - elsif (/^--with-baseaddr=(.*)$/) - { - $config{baseaddr}="$1"; - } + foreach my $x (split(m|,|, $1)) + { + die "Unknown --with-rand-seed choice $x\n" + if ! grep { $x eq $_ } @known_seed_sources; + push @seed_sources, $x; + } + } elsif (/^--cross-compile-prefix=(.*)$/) { - $config{cross_compile_prefix}=$1; + $user{CROSS_COMPILE}=$1; } elsif (/^--config=(.*)$/) { read_config $1; } - elsif (/^-[lL](.*)$/ or /^-Wl,/) + elsif (/^-L(.*)$/) { - $libs.=$_." "; + push @{$useradd{LDFLAGS}}, $_; + } + elsif (/^-l(.*)$/ or /^-Wl,/) + { + push @{$useradd{LDLIBS}}, $_; + } + elsif (/^-framework$/) + { + push @{$useradd{LDLIBS}}, $_, shift(@argvcopy); } elsif (/^-rpath$/ or /^-R$/) # -rpath is the OSF1 rpath flag @@ -719,11 +812,11 @@ while (@argvcopy) { my $rpath = shift(@argvcopy) || ""; $rpath .= " " if $rpath ne ""; - $libs.=$_." ".$rpath; + push @{$useradd{LDFLAGS}}, $_, $rpath; } elsif (/^-static$/) { - $libs.=$_." "; + push @{$useradd{LDFLAGS}}, $_; $disabled{"dso"} = "forced"; $disabled{"pic"} = "forced"; $disabled{"shared"} = "forced"; @@ -731,12 +824,21 @@ while (@argvcopy) } elsif (/^-D(.*)$/) { - push @user_defines, $1; + push @{$useradd{CPPDEFINES}}, $1; + } + elsif (/^-I(.*)$/) + { + push @{$useradd{CPPINCLUDES}}, $1; + } + elsif (/^-Wp,$/) + { + push @{$useradd{CPPFLAGS}}, $1; } else # common if (/^[-+]/), just pass down... { $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei; - $user_cflags.=" ".$_; + push @{$useradd{CFLAGS}}, $_; + push @{$useradd{CXXFLAGS}}, $_; } } else @@ -746,7 +848,7 @@ while (@argvcopy) } unless ($_ eq $target || /^no-/ || /^disable-/) { - # "no-..." follows later after implied disactivations + # "no-..." follows later after implied deactivations # have been derived. (Don't take this too seriously, # we really only write OPTIONS to the Makefile out of # nostalgia.) @@ -773,22 +875,26 @@ while (@argvcopy) } } -if ($libs =~ /(^|\s)-Wl,-rpath,/ +foreach (keys %user) { + my $value = env($_); + $value //= defined $user_synonyms{$_} ? env($user_synonyms{$_}) : undef; + + if (defined $value) { + if (ref $user{$_} eq 'ARRAY') { + $user{$_} = [ split /$list_separator_re/, $value ]; + } elsif (!defined $user{$_}) { + $user{$_} = $value; + } + } +} + +if (grep { $_ =~ /(^|\s)-Wl,-rpath,/ } ($user{LDLIBS} ? @{$user{LDLIBS}} : ()) && !$disabled{shared} && !($disabled{asan} && $disabled{msan} && $disabled{ubsan})) { die "***** Cannot simultaneously use -rpath, shared libraries, and\n", "***** any of asan, msan or ubsan\n"; } -if ($config{fips}) - { - delete $disabled{"shared"} if ($disabled{"shared"} =~ /^default/); - } -else - { - @{$config{dirs}} = grep !/^fips$/, @{$config{dirs}}; - } - my @tocheckfor = (keys %disabled); while (@tocheckfor) { my %new_tocheckfor = (); @@ -829,75 +935,25 @@ if ($target eq "HASH") { exit 0; } +print "Configuring OpenSSL version $config{version} ($config{version_num}) "; +print "for $target\n"; + +if (scalar(@seed_sources) == 0) { + print "Using os-specific seed configuration\n"; + push @seed_sources, 'os'; +} +die "Cannot seed with none and anything else" + if scalar(grep { $_ eq 'none' } @seed_sources) > 0 + && scalar(@seed_sources) > 1; +push @{$config{openssl_other_defines}}, + map { (my $x = $_) =~ tr|[\-a-z]|[_A-Z]|; "OPENSSL_RAND_SEED_$x" } + @seed_sources; + # Backward compatibility? if ($target =~ m/^CygWin32(-.*)$/) { $target = "Cygwin".$1; } -foreach (sort (keys %disabled)) - { - $config{options} .= " no-$_"; - - printf " no-%-12s %-10s", $_, "[$disabled{$_}]"; - - if (/^dso$/) - { } - elsif (/^threads$/) - { } - elsif (/^shared$/) - { } - elsif (/^pic$/) - { } - elsif (/^zlib$/) - { } - elsif (/^dynamic-engine$/) - { } - elsif (/^makedepend$/) - { } - elsif (/^zlib-dynamic$/) - { } - elsif (/^sse2$/) - { } - elsif (/^engine$/) - { - @{$config{dirs}} = grep !/^engines$/, @{$config{dirs}}; - @{$config{sdirs}} = grep !/^engine$/, @{$config{sdirs}}; - push @{$config{openssl_other_defines}}, "OPENSSL_NO_ENGINE"; - print " OPENSSL_NO_ENGINE (skip engines)"; - } - else - { - my ($WHAT, $what); - - ($WHAT = $what = $_) =~ tr/[\-a-z]/[_A-Z]/; - - # Fix up C macro end names - $WHAT = "RMD160" if $what eq "ripemd"; - - # fix-up crypto/directory name(s) - $what = "ripemd" if $what eq "rmd160"; - $what = "whrlpool" if $what eq "whirlpool"; - - if ($what ne "async" && $what ne "err" - && grep { $_ eq $what } @{$config{sdirs}}) - { - push @{$config{openssl_algorithm_defines}}, "OPENSSL_NO_$WHAT"; - @{$config{sdirs}} = grep { $_ ne $what} @{$config{sdirs}}; - - print " OPENSSL_NO_$WHAT (skip dir)"; - } - else - { - push @{$config{openssl_other_defines}}, "OPENSSL_NO_$WHAT"; - print " OPENSSL_NO_$WHAT"; - } - } - - print "\n"; - } - -print "Configuring for $target\n"; - # Support for legacy targets having a name starting with 'debug-' my ($d, $t) = $target =~ m/^(debug-)?(.*)$/; if ($d) { @@ -913,54 +969,157 @@ my %target = resolve_config($target); &usage if (!%target || $target{template}); -my %conf_files = map { $_ => 1 } (@{$target{_conf_fname_int}}); -$config{conf_files} = [ sort keys %conf_files ]; %target = ( %{$table{DEFAULTS}}, %target ); +# Make the flags to build DSOs the same as for shared libraries unless they +# are already defined +$target{dso_cflags} = $target{shared_cflag} unless defined $target{dso_cflags}; +$target{dso_cxxflags} = $target{shared_cxxflag} unless defined $target{dso_cxxflags}; +$target{dso_lflags} = $target{shared_ldflag} unless defined $target{dso_lflags}; +{ + my $shared_info_pl = + catfile(dirname($0), "Configurations", "shared-info.pl"); + my %shared_info = read_eval_file($shared_info_pl); + push @{$target{_conf_fname_int}}, $shared_info_pl; + my $si = $target{shared_target}; + while (ref $si ne "HASH") { + last if ! defined $si; + if (ref $si eq "CODE") { + $si = $si->(); + } else { + $si = $shared_info{$si}; + } + } + + # Some of the 'shared_target' values don't have any entried in + # %shared_info. That's perfectly fine, AS LONG AS the build file + # template knows how to handle this. That is currently the case for + # Windows and VMS. + if (defined $si) { + # Just as above, copy certain shared_* attributes to the corresponding + # dso_ attribute unless the latter is already defined + $si->{dso_cflags} = $si->{shared_cflag} unless defined $si->{dso_cflags}; + $si->{dso_cxxflags} = $si->{shared_cxxflag} unless defined $si->{dso_cxxflags}; + $si->{dso_lflags} = $si->{shared_ldflag} unless defined $si->{dso_lflags}; + foreach (sort keys %$si) { + $target{$_} = defined $target{$_} + ? add($si->{$_})->($target{$_}) + : $si->{$_}; + } + } +} + +my %conf_files = map { $_ => 1 } (@{$target{_conf_fname_int}}); +$config{conf_files} = [ sort keys %conf_files ]; + +foreach my $feature (@{$target{disable}}) { + if (exists $deprecated_disablables{$feature}) { + warn "***** config $target disables deprecated feature $feature\n"; + } elsif (!grep { $feature eq $_ } @disablables) { + die "***** config $target disables unknown feature $feature\n"; + } + $disabled{$feature} = 'config'; +} +foreach my $feature (@{$target{enable}}) { + if ("default" eq ($disabled{$_} // "")) { + if (exists $deprecated_disablables{$feature}) { + warn "***** config $target enables deprecated feature $feature\n"; + } elsif (!grep { $feature eq $_ } @disablables) { + die "***** config $target enables unknown feature $feature\n"; + } + delete $disabled{$_}; + } +} + +$target{cxxflags}//=$target{cflags} if $target{cxx}; $target{exe_extension}=""; $target{exe_extension}=".exe" if ($config{target} eq "DJGPP" || $config{target} =~ /^(?:Cygwin|mingw)/); $target{exe_extension}=".pm" if ($config{target} =~ /vos/); ($target{shared_extension_simple}=$target{shared_extension}) - =~ s|\.\$\(SHLIB_MAJOR\)\.\$\(SHLIB_MINOR\)||; + =~ s|\.\$\(SHLIB_VERSION_NUMBER\)||; $target{dso_extension}=$target{shared_extension_simple}; ($target{shared_import_extension}=$target{shared_extension_simple}.".a") if ($config{target} =~ /^(?:Cygwin|mingw)/); - -$config{cross_compile_prefix} = $ENV{'CROSS_COMPILE'} - if $config{cross_compile_prefix} eq ""; - # Allow overriding the names of some tools. USE WITH CARE # Note: only Unix cares about HASHBANGPERL... that explains # the default string. -$config{perl} = $ENV{'PERL'} || ($^O ne "VMS" ? $^X : "perl"); -$config{hashbangperl} = - $ENV{'HASHBANGPERL'} || $ENV{'PERL'} || "/usr/bin/env perl"; -$target{cc} = $ENV{'CC'} || $target{cc} || "cc"; -$target{ranlib} = $ENV{'RANLIB'} || $target{ranlib} || - (which("$config{cross_compile_prefix}ranlib") ? - "\$(CROSS_COMPILE)ranlib" : "true"); -$target{ar} = $ENV{'AR'} || $target{ar} || "ar"; -$target{nm} = $ENV{'NM'} || $target{nm} || "nm"; -$target{rc} = - $ENV{'RC'} || $ENV{'WINDRES'} || $target{rc} || "windres"; +$config{perl} = ($^O ne "VMS" ? $^X : "perl"); +foreach (keys %user) { + my $target_key = $user_to_target{$_} // lc $_; + my $ref_type = ref $user{$_}; + + # Temporary function. Takes an intended ref type (empty string or "ARRAY") + # and a value that's to be coerced into that type. + my $mkvalue = sub { + my $type = shift; + my $value = shift; + my $undef_p = shift; + + die "Too many arguments for \$mkvalue" if @_; + + while (ref $value eq 'CODE') { + $value = $value->(); + } + + if ($type eq 'ARRAY') { + return undef unless defined $value; + return undef if ref $value ne 'ARRAY' && !$value; + return undef if ref $value eq 'ARRAY' && !@$value; + return [ $value ] unless ref $value eq 'ARRAY'; + } + return undef unless $value; + return $value; + }; + + $config{$target_key} = + $mkvalue->($ref_type, $user{$_}) + || $mkvalue->($ref_type, $target{$target_key}); + delete $config{$target_key} unless defined $config{$target_key}; +} +$config{plib_lflags} = [ $target{plib_lflags} ]; # Allow overriding the build file name -$target{build_file} = $ENV{BUILDFILE} || $target{build_file} || "Makefile"; +$config{build_file} = env('BUILDFILE') || $target{build_file} || "Makefile"; -# Cache information necessary for reconfiguration -$config{cc} = $target{cc}; -$config{build_file} = $target{build_file}; +my %disabled_info = (); # For configdata.pm +foreach my $what (sort keys %disabled) { + $config{options} .= " no-$what"; -# For cflags, lflags, plib_lflags, ex_libs and defines, add the debug_ -# or release_ attributes. -# Do it in such a way that no spurious space is appended (hence the grep). -$config{defines} = []; -$config{cflags} = ""; -$config{ex_libs} = ""; -$config{shared_ldflag} = ""; + if (!grep { $what eq $_ } ( 'dso', 'threads', 'shared', 'pic', + 'dynamic-engine', 'makedepend', + 'zlib-dynamic', 'zlib', 'sse2' )) { + (my $WHAT = uc $what) =~ s|-|_|g; + + # Fix up C macro end names + $WHAT = "RMD160" if $what eq "ripemd"; + + # fix-up crypto/directory name(s) + $what = "ripemd" if $what eq "rmd160"; + $what = "whrlpool" if $what eq "whirlpool"; + + my $macro = $disabled_info{$what}->{macro} = "OPENSSL_NO_$WHAT"; + + if ((grep { $what eq $_ } @{$config{sdirs}}) + && $what ne 'async' && $what ne 'err') { + @{$config{sdirs}} = grep { $what ne $_} @{$config{sdirs}}; + $disabled_info{$what}->{skipped} = [ catdir('crypto', $what) ]; + + if ($what ne 'engine') { + push @{$config{openssl_algorithm_defines}}, $macro; + } else { + @{$config{dirs}} = grep !/^engines$/, @{$config{dirs}}; + push @{$disabled_info{engine}->{skipped}}, catdir('engines'); + push @{$config{openssl_other_defines}}, $macro; + } + } else { + push @{$config{openssl_other_defines}}, $macro; + } + + } +} # Make sure build_scheme is consistent. $target{build_scheme} = [ $target{build_scheme} ] @@ -990,22 +1149,24 @@ foreach my $checker (($builder_platform."-".$target{build_file}."-checker.pm", push @{$config{defines}}, "NDEBUG" if $config{build_type} eq "release"; -if ($target =~ /^mingw/ && `$target{cc} --target-help 2>&1` =~ m/-mno-cygwin/m) +if ($target =~ /^mingw/ && `$config{cc} --target-help 2>&1` =~ m/-mno-cygwin/m) { - $config{cflags} .= " -mno-cygwin"; - $config{shared_ldflag} .= " -mno-cygwin"; + push @{$config{cflags}}, "-mno-cygwin"; + push @{$config{cxxflags}}, "-mno-cygwin" if $config{cxx}; + push @{$config{shared_ldflag}}, "-mno-cygwin"; } -if ($target =~ /linux.*-mips/ && !$disabled{asm} && $user_cflags !~ /-m(ips|arch=)/) { +if ($target =~ /linux.*-mips/ && !$disabled{asm} + && !grep { $_ !~ /-m(ips|arch=)/ } (@{$user{CFLAGS}}, + @{$useradd{CFLAGS}})) { # minimally required architecture flags for assembly modules - $config{cflags}="-mips2 $config{cflags}" if ($target =~ /mips32/); - $config{cflags}="-mips3 $config{cflags}" if ($target =~ /mips64/); + my $value; + $value = '-mips2' if ($target =~ /mips32/); + $value = '-mips3' if ($target =~ /mips64/); + unshift @{$config{cflags}}, $value; + unshift @{$config{cxxflags}}, $value if $config{cxx}; } -my $no_shared_warn=0; -my $no_user_cflags=0; -my $no_user_defines=0; - # The DSO code currently always implements all functions so that no # applications will have to worry about that from a compilation point # of view. However, the "method"s may return zero unless that platform @@ -1029,17 +1190,6 @@ if (!$disabled{dso} && $target{dso_scheme} ne "") } } -$config{ex_libs}="$libs$config{ex_libs}" if ($libs ne ""); - -if ($disabled{asm}) - { - if ($config{fips}) - { - @{$config{defines}} = grep !/^[BL]_ENDIAN$/, @{$config{defines}}; - @{$target{defines}} = grep !/^[BL]_ENDIAN$/, @{$target{defines}}; - } - } - # If threads aren't disabled, check how possible they are unless ($disabled{threads}) { if ($auto_threads) { @@ -1056,7 +1206,8 @@ unless ($disabled{threads}) { # system-dependent compiler options that are necessary. We # can't truly check that the given options are correct, but # we expect the user to know what [s]He is doing. - if ($no_user_cflags && $no_user_defines) { + if (!@{$user{CFLAGS}} && !@{$useradd{CFLAGS}} + && !@{$user{CPPDEFINES}} && !@{$useradd{CPPDEFINES}}) { die "You asked for multi-threading support, but didn't\n" ,"provide any system-specific compiler options\n"; } @@ -1067,9 +1218,7 @@ unless ($disabled{threads}) { # If threads still aren't disabled, add a C macro to ensure the source # code knows about it. Any other flag is taken care of by the configs. unless($disabled{threads}) { - foreach (("defines", "openssl_thread_defines")) { - push @{$config{$_}}, "OPENSSL_THREADS"; - } + push @{$config{openssl_thread_defines}}, "OPENSSL_THREADS"; } # With "deprecated" disable all deprecated features. @@ -1077,11 +1226,11 @@ if (defined($disabled{"deprecated"})) { $config{api} = $maxapi; } +my $no_shared_warn=0; if ($target{shared_target} eq "") { $no_shared_warn = 1 - if ((!$disabled{shared} || !$disabled{"dynamic-engine"}) - && !$config{fips}); + if (!$disabled{shared} || !$disabled{"dynamic-engine"}); $disabled{shared} = "no-shared-target"; $disabled{pic} = $disabled{shared} = $disabled{"dynamic-engine"} = "no-shared-target"; @@ -1095,27 +1244,28 @@ if ($disabled{"dynamic-engine"}) { $config{dynamic_engines} = 1; } -unless ($disabled{"fuzz-libfuzzer"}) { - $config{cflags} .= "-fsanitize-coverage=edge,indirect-calls "; -} - unless ($disabled{asan}) { - $config{cflags} .= "-fsanitize=address "; + push @{$config{cflags}}, "-fsanitize=address"; + push @{$config{cxxflags}}, "-fsanitize=address" if $config{cxx}; } unless ($disabled{ubsan}) { # -DPEDANTIC or -fnosanitize=alignment may also be required on some # platforms. - $config{cflags} .= "-fsanitize=undefined -fno-sanitize-recover=all "; + push @{$config{cflags}}, "-fsanitize=undefined", "-fno-sanitize-recover=all"; + push @{$config{cxxflags}}, "-fsanitize=undefined", "-fno-sanitize-recover=all" + if $config{cxx}; } unless ($disabled{msan}) { - $config{cflags} .= "-fsanitize=memory "; + push @{$config{cflags}}, "-fsanitize=memory"; + push @{$config{cxxflags}}, "-fsanitize=memory" if $config{cxx}; } unless ($disabled{"fuzz-libfuzzer"} && $disabled{"fuzz-afl"} && $disabled{asan} && $disabled{ubsan} && $disabled{msan}) { - $config{cflags} .= "-fno-omit-frame-pointer -g "; + push @{$config{cflags}}, "-fno-omit-frame-pointer", "-g"; + push @{$config{cxxflags}}, "-fno-omit-frame-pointer", "-g" if $config{cxx}; } # # Platform fix-ups @@ -1124,8 +1274,14 @@ unless ($disabled{"fuzz-libfuzzer"} && $disabled{"fuzz-afl"} # This saves the build files from having to check if ($disabled{pic}) { - $target{shared_cflag} = $target{shared_ldflag} = - $target{shared_rcflag} = ""; + foreach (qw(shared_cflag shared_cxxflag shared_cppflag + shared_defines shared_includes shared_ldflag + dso_cflags dso_cxxflags dso_cppflags + dso_defines dso_includes dso_lflags)) + { + delete $config{$_}; + $target{$_} = ""; + } } else { @@ -1139,6 +1295,8 @@ if ($target{sys_id} ne "") unless ($disabled{asm}) { $target{cpuid_asm_src}=$table{DEFAULTS}->{cpuid_asm_src} if ($config{processor} eq "386"); + push @{$config{defines}}, "OPENSSL_CPUID_OBJ" if ($target{cpuid_asm_src} ne "mem_clr.c"); + $target{bn_asm_src} =~ s/\w+-gf2m.c// if (defined($disabled{ec2m})); # bn-586 is the only one implementing bn_*_part_words @@ -1149,10 +1307,6 @@ unless ($disabled{asm}) { push @{$config{defines}}, "OPENSSL_BN_ASM_MONT5" if ($target{bn_asm_src} =~ /-mont5/); push @{$config{defines}}, "OPENSSL_BN_ASM_GF2m" if ($target{bn_asm_src} =~ /-gf2m/); - if ($config{fips}) { - push @{$config{openssl_other_defines}}, "OPENSSL_FIPS"; - } - if ($target{sha1_asm_src}) { push @{$config{defines}}, "SHA1_ASM" if ($target{sha1_asm_src} =~ /sx86/ || $target{sha1_asm_src} =~ /sha1/); push @{$config{defines}}, "SHA256_ASM" if ($target{sha1_asm_src} =~ /sha256/); @@ -1192,6 +1346,9 @@ unless ($disabled{asm}) { if ($target{ec_asm_src} =~ /ecp_nistz256/) { push @{$config{defines}}, "ECP_NISTZ256_ASM"; } + if ($target{ec_asm_src} =~ /x25519/) { + push @{$config{defines}}, "X25519_ASM"; + } if ($target{padlock_asm_src} ne $table{DEFAULTS}->{padlock_asm_src}) { push @{$config{defines}}, "PADLOCK_ASM"; } @@ -1200,33 +1357,27 @@ unless ($disabled{asm}) { } } -my %predefined; +my %predefined = compiler_predefined($config{cc}); -if ($^O ne "VMS") { - my $cc = "$config{cross_compile_prefix}$target{cc}"; - - # collect compiler pre-defines from gcc or gcc-alike... - open(PIPE, "$cc -dM -E -x c /dev/null 2>&1 |"); - while () { - m/^#define\s+(\w+(?:\(\w+\))?)(?:\s+(.+))?/ or last; - $predefined{$1} = $2 // ""; - } - close(PIPE); - - if (!$disabled{makedepend}) { - # We know that GNU C version 3 and up as well as all clang - # versions support dependency generation - if ($predefined{__GNUC__} >= 3) { - $config{makedepprog} = $cc; - } else { - $config{makedepprog} = which('makedepend'); - $disabled{makedepend} = "unavailable" unless $config{makedepprog}; - } +# Check for makedepend capabilities. +if (!$disabled{makedepend}) { + if ($config{target} =~ /^(VC|vms)-/) { + # For VC- and vms- targets, there's nothing more to do here. The + # functionality is hard coded in the corresponding build files for + # cl (Windows) and CC/DECC (VMS). + } elsif ($predefined{__GNUC__} >= 3) { + # We know that GNU C version 3 and up as well as all clang + # versions support dependency generation + $config{makedepprog} = "\$(CROSS_COMPILE)$config{cc}"; + } else { + # In all other cases, we look for 'makedepend', and disable the + # capability if not found. + $config{makedepprog} = which('makedepend'); + $disabled{makedepend} = "unavailable" unless $config{makedepprog}; } } - # Deal with bn_ops ################################################### $config{bn_ll} =0; @@ -1254,9 +1405,12 @@ die "Exactly one of SIXTY_FOUR_BIT|SIXTY_FOUR_BIT_LONG|THIRTY_TWO_BIT can be set # Hack cflags for better warnings (dev option) ####################### -# "Stringify" the C flags string. This permits it to be made part of a string -# and works as well on command lines. -$config{cflags} =~ s/([\\\"])/\\$1/g; +# "Stringify" the C and C++ flags string. This permits it to be made part of +# a string and works as well on command lines. +$config{cflags} = [ map { (my $x = $_) =~ s/([\\\"])/\\$1/g; $x } + @{$config{cflags}} ]; +$config{cxxflags} = [ map { (my $x = $_) =~ s/([\\\"])/\\$1/g; $x } + @{$config{cxxflags}} ] if $config{cxx}; if (defined($config{api})) { $config{openssl_api_defines} = [ "OPENSSL_MIN_API=".$apitable->{$config{api}} ]; @@ -1264,20 +1418,36 @@ if (defined($config{api})) { push @{$config{defines}}, $apiflag; } +if (defined($predefined{__clang__}) && !$disabled{asm}) { + push @{$config{cflags}}, "-Qunused-arguments"; + push @{$config{cxxflags}}, "-Qunused-arguments" if $config{cxx}; +} + if ($strict_warnings) { my $wopt; - die "ERROR --strict-warnings requires gcc or gcc-alike" - unless defined($predefined{__GNUC__}); + my $gccver = $predefined{__GNUC__} // -1; + + die "ERROR --strict-warnings requires gcc[>=4] or gcc-alike" + unless $gccver >= 4; + $gcc_devteam_warn .= " -Wmisleading-indentation" if $gccver >= 6; foreach $wopt (split /\s+/, $gcc_devteam_warn) { - $config{cflags} .= " $wopt" unless ($config{cflags} =~ /(?:^|\s)$wopt(?:\s|$)/) + push @{$config{cflags}}, $wopt + unless grep { $_ eq $wopt } @{$config{cflags}}; + push @{$config{cxxflags}}, $wopt + if ($config{cxx} + && !grep { $_ eq $wopt } @{$config{cxxflags}}); } if (defined($predefined{__clang__})) { foreach $wopt (split /\s+/, $clang_devteam_warn) { - $config{cflags} .= " $wopt" unless ($config{cflags} =~ /(?:^|\s)$wopt(?:\s|$)/) + push @{$config{cflags}}, $wopt + unless grep { $_ eq $wopt } @{$config{cflags}}; + push @{$config{cxxflags}}, $wopt + if ($config{cxx} + && !grep { $_ eq $wopt } @{$config{cxxflags}}); } } } @@ -1286,21 +1456,18 @@ unless ($disabled{"crypto-mdebug-backtrace"}) { foreach my $wopt (split /\s+/, $memleak_devteam_backtrace) { - $config{cflags} .= " $wopt" unless ($config{cflags} =~ /(?:^|\s)$wopt(?:\s|$)/) + push @{$config{cflags}}, $wopt + unless grep { $_ eq $wopt } @{$config{cflags}}; + push @{$config{cxxflags}}, $wopt + if ($config{cxx} + && !grep { $_ eq $wopt } @{$config{cxxflags}}); } if ($target =~ /^BSD-/) { - $config{ex_libs} .= " -lexecinfo"; + push @{$config{ex_libs}}, "-lexecinfo"; } } -if ($user_cflags ne "") { $config{cflags}="$config{cflags}$user_cflags"; } -else { $no_user_cflags=1; } -if (@user_defines) { $config{defines}=[ @{$config{defines}}, @user_defines ]; } -else { $no_user_defines=1; } - -# ALL MODIFICATIONS TO %config and %target MUST BE DONE FROM HERE ON - unless ($disabled{afalgeng}) { $config{afalgeng}=""; if ($target =~ m/^linux/) { @@ -1325,6 +1492,24 @@ unless ($disabled{afalgeng}) { push @{$config{openssl_other_defines}}, "OPENSSL_NO_AFALGENG" if ($disabled{afalgeng}); +# Finish up %config by appending things the user gave us on the command line +# apart from "make variables" +foreach (keys %useradd) { + # The must all be lists, so we assert that here + die "internal error: \$useradd{$_} isn't an ARRAY\n" + unless ref $useradd{$_} eq 'ARRAY'; + + my $target_key = $user_to_target{$_} // lc $_; + + if (defined $config{$target_key}) { + push @{$config{$target_key}}, @{$useradd{$_}}; + } else { + $config{$target_key} = [ @{$useradd{$_}} ]; + } +} + +# ALL MODIFICATIONS TO %config and %target MUST BE DONE FROM HERE ON + # If we use the unified build, collect information from build.info files my %unified_info = (); @@ -1373,7 +1558,7 @@ if ($builder eq "unified") { my @build_file_templates = (); # First, look in the user provided directory, if given - if (defined $ENV{$local_config_envname}) { + if (defined env($local_config_envname)) { @build_file_templates = map { if ($^O eq 'VMS') { @@ -1381,7 +1566,7 @@ if ($builder eq "unified") { # which can be used as is $local_config_envname . ':' . $_; } else { - catfile($ENV{$local_config_envname}, $_); + catfile(env($local_config_envname), $_); } } @build_file_template_names; @@ -1419,9 +1604,14 @@ if ($builder eq "unified") { push @build_infos, [ catdir("engines", $_), "build.info" ] if (-f catfile($srcdir, "engines", $_, "build.info")); } + foreach (@{$config{tdirs}}) { + push @build_infos, [ catdir("test", $_), "build.info" ] + if (-f catfile($srcdir, "test", $_, "build.info")); + } $config{build_infos} = [ ]; + my %ordinals = (); foreach (@build_infos) { my $sourced = catdir($srcdir, $_->[0]); my $buildd = catdir($blddir, $_->[0]); @@ -1443,7 +1633,6 @@ if ($builder eq "unified") { my @intermediates = (); my @rawlines = (); - my %ordinals = (); my %sources = (); my %shared_sources = (); my %includes = (); @@ -1452,10 +1641,6 @@ if ($builder eq "unified") { my %sharednames = (); my %generate = (); - # We want to detect configdata.pm in the source tree, so we - # don't use it if the build tree is different. - my $src_configdata = cleanfile($srcdir, "configdata.pm", $blddir); - push @{$config{build_infos}}, catfile(abs2rel($sourced, $blddir), $f); my $template = Text::Template->new(TYPE => 'FILE', @@ -1591,7 +1776,7 @@ if ($builder eq "unified") { || $target_kind eq $target{build_file}."(".$builder_platform.")"); } }, - qr/^(?:#.*|\s*)$/ => sub { }, + qr/^\s*(?:#.*)?$/ => sub { }, "OTHERWISE" => sub { die "Something wrong with this line:\n$_\nat $sourced/$f" }, "BEFORE" => sub { if ($buildinfo_debug) { @@ -1721,33 +1906,24 @@ EOF } # Additionally, we set up sharednames for libraries that don't - # have any, as themselves. - foreach (keys %{$unified_info{libraries}}) { + # have any, as themselves. Only for libraries that aren't + # explicitly static. + foreach (grep !/\.a$/, keys %{$unified_info{libraries}}) { if (!defined $unified_info{sharednames}->{$_}) { $unified_info{sharednames}->{$_} = $_ } } - } - foreach (keys %ordinals) { - my $dest = $_; - my $ddest = cleanfile($buildd, $_, $blddir); - if ($unified_info{rename}->{$ddest}) { - $ddest = $unified_info{rename}->{$ddest}; - } - foreach (@{$ordinals{$dest}}) { - my %known_ordinals = - ( - crypto => - cleanfile($sourced, catfile("util", "libcrypto.num"), $blddir), - ssl => - cleanfile($sourced, catfile("util", "libssl.num"), $blddir) - ); - my $o = $known_ordinals{$_}; - die "Ordinals for $ddest defined more than once\n" - if $unified_info{ordinals}->{$ddest}; - $unified_info{ordinals}->{$ddest} = [ $_, $o ]; + # Check that we haven't defined any library as both shared and + # explicitly static. That is forbidden. + my @doubles = (); + foreach (grep /\.a$/, keys %{$unified_info{libraries}}) { + (my $l = $_) =~ s/\.a$//; + push @doubles, $l if defined $unified_info{sharednames}->{$l}; } + die "these libraries are both explicitly static and shared:\n ", + join(" ", @doubles), "\n" + if @doubles; } foreach (keys %sources) { @@ -1761,12 +1937,14 @@ EOF # If it isn't in the source tree, we assume it's generated # in the build tree - if ($s eq $src_configdata || ! -f $s || $generate{$_}) { + if (! -f $s || $generate{$_}) { $s = cleanfile($buildd, $_, $blddir); } - # We recognise C and asm files - if ($s =~ /\.[csS]\b$/) { - (my $o = $_) =~ s/\.[csS]\b$/.o/; + # We recognise C++, C and asm files + if ($s =~ /\.(cc|cpp|c|s|S)$/) { + my $o = $_; + $o =~ s/\.[csS]$/.o/; # C and assembler + $o =~ s/\.(cc|cpp)$/_cc.o/; # C++ $o = cleanfile($buildd, $o, $blddir); $unified_info{sources}->{$ddest}->{$o} = 1; $unified_info{sources}->{$o}->{$s} = 1; @@ -1787,15 +1965,30 @@ EOF # If it isn't in the source tree, we assume it's generated # in the build tree - if ($s eq $src_configdata || ! -f $s || $generate{$_}) { + if (! -f $s || $generate{$_}) { $s = cleanfile($buildd, $_, $blddir); } - # We recognise C and asm files - if ($s =~ /\.[csS]\b$/) { - (my $o = $_) =~ s/\.[csS]\b$/.o/; + + if ($s =~ /\.(cc|cpp|c|s|S)$/) { + # We recognise C++, C and asm files + my $o = $_; + $o =~ s/\.[csS]$/.o/; # C and assembler + $o =~ s/\.(cc|cpp)$/_cc.o/; # C++ $o = cleanfile($buildd, $o, $blddir); $unified_info{shared_sources}->{$ddest}->{$o} = 1; $unified_info{sources}->{$o}->{$s} = 1; + } elsif ($s =~ /\.rc$/) { + # We also recognise resource files + my $o = $_; + $o =~ s/\.rc$/.res/; # Resource configuration + my $o = cleanfile($buildd, $o, $blddir); + $unified_info{shared_sources}->{$ddest}->{$o} = 1; + $unified_info{sources}->{$o}->{$s} = 1; + } elsif ($s =~ /\.(def|map|opt)$/) { + # We also recognise .def / .map / .opt files + # We know they are generated files + my $def = cleanfile($buildd, $s, $blddir); + $unified_info{shared_sources}->{$ddest}->{$def} = 1; } else { die "unrecognised source file type for shared library: $s\n"; } @@ -1822,7 +2015,7 @@ EOF # If the destination doesn't exist in source, it can only be # a generated file in the build tree. - if ($ddest ne "" && ($ddest eq $src_configdata || ! -f $ddest)) { + if ($ddest ne "" && ! -f $ddest) { $ddest = cleanfile($buildd, $_, $blddir); if ($unified_info{rename}->{$ddest}) { $ddest = $unified_info{rename}->{$ddest}; @@ -1836,17 +2029,23 @@ EOF # in the build tree rather than the source tree, and assume # and that there are lines to build it in a BEGINRAW..ENDRAW # section or in the Makefile template. - if ($d eq $src_configdata - || ! -f $d + if (! -f $d || (grep { $d eq $_ } map { cleanfile($srcdir, $_, $blddir) } grep { /\.h$/ } keys %{$unified_info{generate}})) { $d = cleanfile($buildd, $_, $blddir); } # Take note if the file to depend on is being renamed + # Take extra care with files ending with .a, they should + # be treated without that extension, and the extension + # should be added back after treatment. + $d =~ /(\.a)?$/; + my $e = $1 // ""; + $d = $`; if ($unified_info{rename}->{$d}) { $d = $unified_info{rename}->{$d}; } + $d .= $e; $unified_info{depends}->{$ddest}->{$d} = 1; } } @@ -1857,7 +2056,7 @@ EOF # If the destination doesn't exist in source, it can only be # a generated file in the build tree. - if ($ddest eq $src_configdata || ! -f $ddest) { + if (! -f $ddest) { $ddest = cleanfile($buildd, $_, $blddir); if ($unified_info{rename}->{$ddest}) { $ddest = $unified_info{rename}->{$ddest}; @@ -1874,6 +2073,14 @@ EOF } } + my $ordinals_text = join(', ', sort keys %ordinals); + warn <<"EOF" if $ordinals_text; + +WARNING: ORDINALS were specified for $ordinals_text +They are ignored and should be replaced with a combination of GENERATE, +DEPEND and SHARED_SOURCE. +EOF + # Massage the result # If we depend on a header file or a perl module, add an inclusion of @@ -1882,12 +2089,16 @@ EOF next if $dest eq ""; foreach my $d (keys %{$unified_info{depends}->{$dest}}) { next unless $d =~ /\.(h|pm)$/; - my $i = dirname($d); - my $spot = - $d eq "configdata.pm" || defined($unified_info{generate}->{$d}) - ? 'build' : 'source'; - push @{$unified_info{includes}->{$dest}->{$spot}}, $i - unless grep { $_ eq $i } @{$unified_info{includes}->{$dest}->{$spot}}; + if ($d eq "configdata.pm" + || defined($unified_info{generate}->{$d})) { + my $i = cleandir($blddir, dirname($d)); + push @{$unified_info{includes}->{$dest}->{build}}, $i + unless grep { $_ eq $i } @{$unified_info{includes}->{$dest}->{build}}; + } else { + my $i = cleandir($srcdir, dirname($d)); + push @{$unified_info{includes}->{$dest}->{source}}, $i + unless grep { $_ eq $i } @{$unified_info{includes}->{$dest}->{source}}; + } } } @@ -1947,13 +2158,18 @@ EOF foreach (grep /_(asm|aux)_src$/, keys %target) { my $src = $_; (my $obj = $_) =~ s/_(asm|aux)_src$/_obj/; - ($target{$obj} = $target{$src}) =~ s/\.[csS]\b/.o/g; + $target{$obj} = $target{$src}; + $target{$obj} =~ s/\.[csS]\b/.o/g; # C and assembler + $target{$obj} =~ s/\.(cc|cpp)\b/_cc.o/g; # C++ } # Write down our configuration where it fits ######################### +print "Creating configdata.pm\n"; open(OUT,">configdata.pm") || die "unable to create configdata.pm: $!\n"; print OUT <<"EOF"; +#! $config{hashbangperl} + package configdata; use strict; @@ -1971,6 +2187,22 @@ foreach (sort keys %config) { print OUT " ", $_, " => [ ", join(", ", map { quotify("perl", $_) } @{$config{$_}}), " ],\n"; + } elsif (ref($config{$_}) eq "HASH") { + print OUT " ", $_, " => {"; + if (scalar keys %{$config{$_}} > 0) { + print OUT "\n"; + foreach my $key (sort keys %{$config{$_}}) { + print OUT " ", + join(" => ", + quotify("perl", $key), + defined $config{$_}->{$key} + ? quotify("perl", $config{$_}->{$key}) + : "undef"); + print OUT ",\n"; + } + print OUT " "; + } + print OUT "},\n"; } else { print OUT " ", $_, " => ", quotify("perl", $config{$_}), ",\n" } @@ -2072,52 +2304,298 @@ if ($builder eq "unified") { EOF } -print OUT "1;\n"; +print OUT + "# The following data is only used when this files is use as a script\n"; +print OUT "my \%makevars = (\n"; +foreach (sort keys %user) { + print OUT ' ',$_,' ' x (20 - length $_),'=> ', + "'",$user_to_target{$_} || lc $_,"',\n"; +} +print OUT ");\n"; +print OUT "my \%disabled_info = (\n"; +foreach my $what (sort keys %disabled_info) { + print OUT " '$what' => {\n"; + foreach my $info (sort keys %{$disabled_info{$what}}) { + if (ref $disabled_info{$what}->{$info} eq 'ARRAY') { + print OUT " $info => [ ", + join(', ', map { "'$_'" } @{$disabled_info{$what}->{$info}}), + " ],\n"; + } else { + print OUT " $info => '", $disabled_info{$what}->{$info}, + "',\n"; + } + } + print OUT " },\n"; +} +print OUT ");\n"; +print OUT 'my @user_crossable = qw( ', join (' ', @user_crossable), " );\n"; +print OUT << 'EOF'; +# If run directly, we can give some answers, and even reconfigure +unless (caller) { + use Getopt::Long; + use File::Spec::Functions; + use File::Basename; + use Pod::Usage; + + my $here = dirname($0); + + my $dump = undef; + my $cmdline = undef; + my $options = undef; + my $target = undef; + my $envvars = undef; + my $makevars = undef; + my $buildparams = undef; + my $reconf = undef; + my $verbose = undef; + my $help = undef; + my $man = undef; + GetOptions('dump|d' => \$dump, + 'command-line|c' => \$cmdline, + 'options|o' => \$options, + 'target|t' => \$target, + 'environment|e' => \$envvars, + 'make-variables|m' => \$makevars, + 'build-parameters|b' => \$buildparams, + 'reconfigure|reconf|r' => \$reconf, + 'verbose|v' => \$verbose, + 'help' => \$help, + 'man' => \$man) + or die "Errors in command line arguments\n"; + + unless ($dump || $cmdline || $options || $target || $envvars || $makevars + || $buildparams || $reconf || $verbose || $help || $man) { + print STDERR <<"_____"; +You must give at least one option. +For more information, do '$0 --help' +_____ + exit(2); + } + + if ($help) { + pod2usage(-exitval => 0, + -verbose => 1); + } + if ($man) { + pod2usage(-exitval => 0, + -verbose => 2); + } + if ($dump || $cmdline) { + print "\nCommand line (with current working directory = $here):\n\n"; + print ' ',join(' ', + $config{perl}, + catfile($config{sourcedir}, 'Configure'), + @{$config{perlargv}}), "\n"; + print "\nPerl information:\n\n"; + print ' ',$config{perl_cmd},"\n"; + print ' ',$config{perl_version},' for ',$config{perl_archname},"\n"; + } + if ($dump || $options) { + my $longest = 0; + my $longest2 = 0; + foreach my $what (@disablables) { + $longest = length($what) if $longest < length($what); + $longest2 = length($disabled{$what}) + if $disabled{$what} && $longest2 < length($disabled{$what}); + } + print "\nEnabled features:\n\n"; + foreach my $what (@disablables) { + print " $what\n" unless $disabled{$what}; + } + print "\nDisabled features:\n\n"; + foreach my $what (@disablables) { + if ($disabled{$what}) { + print " $what", ' ' x ($longest - length($what) + 1), + "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); + print $disabled_info{$what}->{macro} + if $disabled_info{$what}->{macro}; + print ' (skip ', + join(', ', @{$disabled_info{$what}->{skipped}}), + ')' + if $disabled_info{$what}->{skipped}; + print "\n"; + } + } + } + if ($dump || $target) { + print "\nConfig target attributes:\n\n"; + foreach (sort keys %target) { + next if $_ =~ m|^_| || $_ eq 'template'; + my $quotify = sub { + map { (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""} @_; + }; + print ' ', $_, ' => '; + if (ref($target{$_}) eq "ARRAY") { + print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n"; + } else { + print $quotify->($target{$_}), ",\n" + } + } + } + if ($dump || $envvars) { + print "\nRecorded environment:\n\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n"; + } + } + if ($dump || $makevars) { + print "\nMakevars:\n\n"; + foreach my $var (sort keys %makevars) { + my $prefix = ''; + $prefix = $config{cross_compile_prefix} + if grep { $var eq $_ } @user_crossable; + print ' ',$var,' ' x (16 - length $var),'= ', + (ref $config{$makevars{$var}} eq 'ARRAY' + ? join(' ', @{$config{$makevars{$var}}}) + : $prefix.$config{$makevars{$var}}), + "\n" + if defined $config{$makevars{$var}}; + } + + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + my $buildfile = canonpath(catdir(@buildfile)); + print <<"_____"; + +NOTE: These variables only represent the configuration view. The build file +template may have processed these variables further, please have a look at the +build file for more exact data: + $buildfile +_____ + } + if ($dump || $buildparams) { + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + print "\nbuild file:\n\n"; + print " ", canonpath(catfile(@buildfile)),"\n"; + + print "\nbuild file templates:\n\n"; + foreach (@{$config{build_file_templates}}) { + my @tmpl = ($_); + unshift @tmpl, $here + unless file_name_is_absolute($config{sourcedir}); + print ' ',canonpath(catfile(@tmpl)),"\n"; + } + } + if ($reconf) { + if ($verbose) { + print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n"; + } + } + + chdir $here; + exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf'; + } +} + +1; + +__END__ + +=head1 NAME + +configdata.pm - configuration data for OpenSSL builds + +=head1 SYNOPSIS + +Interactive: + + perl configdata.pm [options] + +As data bank module: + + use configdata; + +=head1 DESCRIPTION + +This module can be used in two modes, interactively and as a module containing +all the data recorded by OpenSSL's Configure script. + +When used interactively, simply run it as any perl script, with at least one +option, and you will get the information you ask for. See L below. + +When loaded as a module, you get a few databanks with useful information to +perform build related tasks. The databanks are: + + %config Configured things. + %target The OpenSSL config target with all inheritances + resolved. + %disabled The features that are disabled. + @disablables The list of features that can be disabled. + %withargs All data given through --with-THING options. + %unified_info All information that was computed from the build.info + files. + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +Print a brief help message and exit. + +=item B<--man> + +Print the manual page and exit. + +=item B<--dump> | B<-d> + +Print all relevant configuration data. This is equivalent to B<--command-line> +B<--options> B<--target> B<--environment> B<--make-variables> +B<--build-parameters>. + +=item B<--command-line> | B<-c> + +Print the current configuration command line. + +=item B<--options> | B<-o> + +Print the features, both enabled and disabled, and display defined macro and +skipped directories where applicable. + +=item B<--target> | B<-t> + +Print the config attributes for this config target. + +=item B<--environment> | B<-e> + +Print the environment variables and their values at the time of configuration. + +=item B<--make-variables> | B<-m> + +Print the main make variables generated in the current configuration + +=item B<--build-parameters> | B<-b> + +Print the build parameters, i.e. build file and build file templates. + +=item B<--reconfigure> | B<--reconf> | B<-r> + +Redo the configuration. + +=item B<--verbose> | B<-v> + +Verbose output. + +=back + +=cut + +EOF close(OUT); - - -print "CC =$config{cross_compile_prefix}$target{cc}\n"; -print "CFLAG =$target{cflags} $config{cflags}\n"; -print "SHARED_CFLAG =$target{shared_cflag}\n"; -print "DEFINES =",join(" ", @{$target{defines}}, @{$config{defines}}),"\n"; -print "LFLAG =$target{lflags}\n"; -print "PLIB_LFLAG =$target{plib_lflags}\n"; -print "EX_LIBS =$target{ex_libs} $config{ex_libs}\n"; -print "APPS_OBJ =$target{apps_obj}\n"; -print "CPUID_OBJ =$target{cpuid_obj}\n"; -print "UPLINK_OBJ =$target{uplink_obj}\n"; -print "BN_ASM =$target{bn_obj}\n"; -print "EC_ASM =$target{ec_obj}\n"; -print "DES_ENC =$target{des_obj}\n"; -print "AES_ENC =$target{aes_obj}\n"; -print "BF_ENC =$target{bf_obj}\n"; -print "CAST_ENC =$target{cast_obj}\n"; -print "RC4_ENC =$target{rc4_obj}\n"; -print "RC5_ENC =$target{rc5_obj}\n"; -print "MD5_OBJ_ASM =$target{md5_obj}\n"; -print "SHA1_OBJ_ASM =$target{sha1_obj}\n"; -print "RMD160_OBJ_ASM=$target{rmd160_obj}\n"; -print "CMLL_ENC =$target{cmll_obj}\n"; -print "MODES_OBJ =$target{modes_obj}\n"; -print "PADLOCK_OBJ =$target{padlock_obj}\n"; -print "CHACHA_ENC =$target{chacha_obj}\n"; -print "POLY1305_OBJ =$target{poly1305_obj}\n"; -print "BLAKE2_OBJ =$target{blake2_obj}\n"; -print "PROCESSOR =$config{processor}\n"; -print "RANLIB =", $target{ranlib} eq '$(CROSS_COMPILE)ranlib' ? - "$config{cross_compile_prefix}ranlib" : - "$target{ranlib}", "\n"; -print "ARFLAGS =$target{arflags}\n"; -print "PERL =$config{perl}\n"; -print "\n"; -print "SIXTY_FOUR_BIT_LONG mode\n" if $config{b64l}; -print "SIXTY_FOUR_BIT mode\n" if $config{b64}; -print "THIRTY_TWO_BIT mode\n" if $config{b32}; -print "BN_LLONG mode\n" if $config{bn_ll}; -print "RC4 uses $config{rc4_int}\n" if $config{rc4_int} ne $def_int; +if ($builder_platform eq 'unix') { + my $mode = (0755 & ~umask); + chmod $mode, 'configdata.pm' + or warn sprintf("WARNING: Couldn't change mode for 'configdata.pm' to 0%03o: %s\n",$mode,$!); +} my %builders = ( unified => sub { + print 'Creating ',$target{build_file},"\n"; run_dofile(catfile($blddir, $target{build_file}), @{$config{build_file_templates}}); }, @@ -2125,11 +2603,6 @@ my %builders = ( $builders{$builder}->($builder_platform, @builder_opts); -print <<"EOF"; - -Configured for $target. -EOF - print <<"EOF" if ($disabled{threads} eq "unavailable"); The library could not be configured for supporting multi-threaded @@ -2146,6 +2619,26 @@ or position independent code, please let us know (but please first make sure you have tried with a current version of OpenSSL). EOF +print <<"EOF" if (-f catfile($srcdir, "configdata.pm") && $srcdir ne $blddir); + +WARNING: there are indications that another build was made in the source +directory. This build may have picked up artifacts from that build, the +safest course of action is to clean the source directory and redo this +configuration. +EOF + +print <<"EOF"; + +********************************************************************** +*** *** +*** If you want to report a building issue, please include the *** +*** output from this command: *** +*** *** +*** perl configdata.pm --dump *** +*** *** +********************************************************************** +EOF + exit(0); ###################################################################### @@ -2275,25 +2768,38 @@ sub add { sub { _add($separator, @_, @x) }; } +sub read_eval_file { + my $fname = shift; + my $content; + my @result; + + open F, "< $fname" or die "Can't open '$fname': $!\n"; + { + undef local $/; + $content = ; + } + close F; + { + local $@; + + @result = ( eval $content ); + warn $@ if $@; + } + return wantarray ? @result : $result[0]; +} + # configuration reader, evaluates the input file as a perl script and expects # it to fill %targets with target configurations. Those are then added to # %table. sub read_config { my $fname = shift; - open(CONFFILE, "< $fname") - or die "Can't open configuration file '$fname'!\n"; - my $x = $/; - undef $/; - my $content = ; - $/ = $x; - close(CONFFILE); - my %targets = (); + my %targets; + { # Protect certain tables from tampering - local %table = %::table; + local %table = (); - eval $content; - warn $@ if $@; + %targets = read_eval_file($fname); } my %preexisting = (); foreach (sort keys %targets) { @@ -2495,6 +3001,32 @@ sub run_dofile rename("$out.new", $out) || die "Can't rename $out.new, $!"; } +sub compiler_predefined { + state %predefined; + my $default_compiler = shift; + + return () if $^O eq 'VMS'; + + die 'compiler_predefines called without a default compiler' + unless $default_compiler; + + if (! $predefined{$default_compiler}) { + my $cc = "$config{cross_compile_prefix}$default_compiler"; + + $predefined{$default_compiler} = {}; + + # collect compiler pre-defines from gcc or gcc-alike... + open(PIPE, "$cc -dM -E -x c /dev/null 2>&1 |"); + while (my $l = ) { + $l =~ m/^#define\s+(\w+(?:\(\w+\))?)(?:\s+(.+))?/ or last; + $predefined{$default_compiler}->{$1} = $2 // ''; + } + close(PIPE); + } + + return %{$predefined{$default_compiler}}; +} + sub which { my ($name)=@_; @@ -2516,6 +3048,19 @@ sub which } } +sub env +{ + my $name = shift; + + # Note that if $ENV{$name} doesn't exist or is undefined, + # $config{perlenv}->{$name} will be created with the value + # undef. This is intentional. + + $config{perlenv}->{$name} = $ENV{$name} + if ! exists $config{perlenv}->{$name}; + return $config{perlenv}->{$name}; +} + # Configuration printer ############################################## sub print_table_entry @@ -2529,9 +3074,12 @@ sub print_table_entry my @sequence = ( "sys_id", + "cpp", + "cppflags", + "defines", + "includes", "cc", "cflags", - "defines", "unistd", "ld", "lflags", diff --git a/ECDSA-PATCH-CHANGELOG b/ECDSA-PATCH-CHANGELOG deleted file mode 100644 index d4eae753..00000000 --- a/ECDSA-PATCH-CHANGELOG +++ /dev/null @@ -1,9 +0,0 @@ -Changelog [PATCH] OpenSSL1.1h - 30-40% ECDSA performance improvement -* Sat, 6 Jan 2018 08:21:45 +0100 -- Rebuilt to host the new upstream code (6 Jan 2018). -* Fri, 5 Jan 2018 20:45:22 +0100 -- Rebuilt to host the new upstream code (5 Jan 2018). -* Wed, 1 Jan 2018 21:39:19 +0100 -- Inital packaging. -- Based on OpenSSL 1.1.1dev pull 5001. - diff --git a/INSTALL b/INSTALL index 3e21cc29..3c8548dd 100644 --- a/INSTALL +++ b/INSTALL @@ -316,6 +316,13 @@ no-err Don't compile in any error strings. + enable-external-tests + Enable building of integration with external test suites. + This is a developer option and may not work on all platforms. + The only supported external test suite at the current time is + the BoringSSL test suite. See the file test/README.external + for further details. + no-filenames Don't compile in filename and line number information (e.g. for errors and memory allocation). @@ -332,9 +339,6 @@ available if the GOST algorithms are also available through loading an externally supplied engine. - enable-heartbeats - Build support for DTLS heartbeats. - no-hw-padlock Don't build the padlock engine. @@ -415,6 +419,9 @@ the OpenSSL tests also use the command line applications the tests will also be skipped. + no-tests + Don't build test programs or run any test. + no-threads Don't try to build with support for multi-threaded applications. @@ -426,6 +433,16 @@ require additional system-dependent options! See "Note on multi-threading" below. + enable-tls13downgrade + TODO(TLS1.3): Make this enabled by default and remove the + option when TLSv1.3 is out of draft + TLSv1.3 offers a downgrade protection mechanism. This is + implemented but disabled by default. It should not typically + be enabled except for testing purposes. Otherwise this could + cause problems if a pre-RFC version of OpenSSL talks to an + RFC implementation (it will erroneously be detected as a + downgrade). + no-ts Don't build Time Stamping Authority support. @@ -467,18 +484,22 @@ no- Don't build support for negotiating the specified SSL/TLS - protocol (one of ssl, ssl3, tls, tls1, tls1_1, tls1_2, dtls, - dtls1 or dtls1_2). If "no-tls" is selected then all of tls1, - tls1_1 and tls1_2 are disabled. Similarly "no-dtls" will - disable dtls1 and dtls1_2. The "no-ssl" option is synonymous - with "no-ssl3". Note this only affects version negotiation. - OpenSSL will still provide the methods for applications to - explicitly select the individual protocol versions. + protocol (one of ssl, ssl3, tls, tls1, tls1_1, tls1_2, + tls1_3, dtls, dtls1 or dtls1_2). If "no-tls" is selected then + all of tls1, tls1_1, tls1_2 and tls1_3 are disabled. + Similarly "no-dtls" will disable dtls1 and dtls1_2. The + "no-ssl" option is synonymous with "no-ssl3". Note this only + affects version negotiation. OpenSSL will still provide the + methods for applications to explicitly select the individual + protocol versions. no--method As for no- but in addition do not build the methods for applications to explicitly select individual protocol - versions. + versions. Note that there is no "no-tls1_3-method" option + because there is no application method for TLSv1.3. Using + individual protocol methods directly is deprecated. + Applications should use TLS_method() instead. enable- Build with support for the specified algorithm, where @@ -486,13 +507,14 @@ no- Build without support for the specified algorithm, where - is one of: bf, blake2, camellia, cast, chacha, cmac, - des, dh, dsa, ecdh, ecdsa, idea, md4, mdc2, ocb, poly1305, - rc2, rc4, rmd160, scrypt, seed or whirlpool. The "ripemd" - algorithm is deprecated and if used is synonymous with rmd160. + is one of: aria, bf, blake2, camellia, cast, chacha, + cmac, des, dh, dsa, ecdh, ecdsa, idea, md4, mdc2, ocb, + poly1305, rc2, rc4, rmd160, scrypt, seed, siphash, sm3, sm4 + or whirlpool. The "ripemd" algorithm is deprecated and if + used is synonymous with rmd160. - -Dxxx, lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static - These system specific options will be recocognised and + -Dxxx, -Ixxx, -Wp, -lxxx, -Lxxx, -Wl, -rpath, -R, -framework, -static + These system specific options will be recognised and passed through to the compiler to allow you to define preprocessor symbols, specify additional libraries, library directories or other compiler options. It might be worth @@ -502,11 +524,119 @@ unsuitable for execution on other, typically older, processor. Consult your compiler documentation. + Take note of the VAR=value documentation below and how + these flags interact with those variables. + -xxx, +xxx Additional options that are not otherwise recognised are passed through as they are to the compiler as well. Again, consult your compiler documentation. + Take note of the VAR=value documentation below and how + these flags interact with those variables. + + VAR=value + Assignment if environment variable for Configure. These + work just like normal environment variable assignments, + but are supported on all platforms and are confined to + the configuration scripts only. These assignments override + the corresponding value in the inherited environment, if + there is one. + + The following variables are used as "make variables" and + can be used as an alternative to giving preprocessor, + compiler and linker options directly as configuration. + The following variables are supported: + + AR The static library archiver. + ARFLAGS Flags for the static library archiver. + AS The assembler compiler. + ASFLAGS Flags for the assembler compiler. + CC The C compiler. + CFLAGS Flags for the C compiler. + CXX The C++ compiler. + CXXFLAGS Flags for the C++ compiler. + CPP The C/C++ preprocessor. + CPPFLAGS Flags for the C/C++ preprocessor. + CPPDEFINES List of CPP macro definitions, separated + by a platform specific character (':' or + space for Unix, ';' for Windows, ',' for + VMS). This can be used in place of -D. + CPPINCLUDES List of CPP inclusion directories, separated + the same way as for CPPDEFINES. This can + be used in place of -I. + HASHBANGPERL Perl invocation to be inserted after '#!' + in public perl scripts. + LD The program linker (not used on Unix, $(CC) + is used there). + LDFLAGS Flags for the shared library, DSO and + program linker. + LDLIBS Extra libraries to use when linking. + Takes the form of a space separated list + of library specifications on Unix and + Windows, and as a comma separated list of + libraries on VMS. + RANLIB The library archive indexer. + RC The Windows resources manipulator. + RCFLAGS Flags for the Windows reources manipulator. + RM The command to remove files and directories. + + These can be mixed with flags given on the command line. + Any variable assignment resets any corresponding flags + given before it, so for example: + + ./config -DFOO CPPFLAGS=-DBAR -DCOOKIE + + Will end up having 'CPPFLAGS=-DBAR -DCOOKIE'. + + Here is how the flags documented above are collected as + augmentation of these variables: + + -Dxxx xxx is collected in CPPDEFINES + -Ixxx xxx is collected in CPPINCLUDES + -Wp,xxx collected in CPPFLAGS + -Lxxx collected in LDFLAGS + -lxxx collected in LDLIBS + -Wp,xxx collected in LDLIBS + -rpath xxx collected in LDLIBS + -R xxx collected in LDLIBS + -framework xxx collected in LDLIBS + -static collected in LDLIBS + -xxx collected in CFLAGS + +xxx collected in CFLAGS + + reconf + reconfigure + Reconfigure from earlier data. This fetches the previous + command line options and environment from data saved in + "configdata.pm", and runs the configuration process again, + using these options and environment. + Note: NO other option is permitted together with "reconf". + This means that you also MUST use "./Configure" (or + what corresponds to that on non-Unix platforms) directly + to invoke this option. + Note: The original configuration saves away values for ALL + environment variables that were used, and if they weren't + defined, they are still saved away with information that + they weren't originally defined. This information takes + precedence over environment variables that are defined + when reconfiguring. + + Displaying configuration data + ----------------------------- + + The configuration script itself will say very little, and finishes by + creating "configdata.pm". This perl module can be loaded by other scripts + to find all the configuration data, and it can also be used as a script to + display all sorts of configuration data in a human readable form. + + For more information, please do: + + $ ./configdata.pm --help # Unix + + or + + $ perl configdata.pm --help # Windows and VMS Installation in Detail ---------------------- @@ -619,22 +749,34 @@ ("openssl"). The libraries will be built in the top-level directory, and the binary will be in the "apps" subdirectory. + Troubleshooting: + If the build fails, look at the output. There may be reasons for the failure that aren't problems in OpenSSL itself (like - missing standard headers). If you are having problems you can - get help by sending an email to the openssl-users email list (see + missing standard headers). + + If the build succeeded previously, but fails after a source or + configuration change, it might be helpful to clean the build tree + before attempting another build. Use this command: + + $ make clean # Unix + $ mms clean ! (or mmk) OpenVMS + $ nmake clean # Windows + + Assembler error messages can sometimes be sidestepped by using the + "no-asm" configuration option. + + Compiling parts of OpenSSL with gcc and others with the system + compiler will result in unresolved symbols on some systems. + + If you are still having problems you can get help by sending an email + to the openssl-users email list (see https://www.openssl.org/community/mailinglists.html for details). If it is a bug with OpenSSL itself, please open an issue on GitHub, at https://github.com/openssl/openssl/issues. Please review the existing ones first; maybe the bug was already reported or has already been fixed. - (If you encounter assembler error messages, try the "no-asm" - configuration option as an immediate fix.) - - Compiling parts of OpenSSL with gcc and others with the system - compiler will result in unresolved symbols on some systems. - 3. After a successful build, the libraries should be tested. Run: $ make test # Unix @@ -682,6 +824,9 @@ To report a bug please open an issue on GitHub, at https://github.com/openssl/openssl/issues. + For more details on how the make variables TESTS can be used, + see section TESTS in Detail below. + 4. If everything tests ok, install OpenSSL with $ make install # Unix @@ -819,11 +964,14 @@ possible to create your own ".conf" and ".tmpl" files and store them locally, outside the OpenSSL source tree. This environment variable can be set to the directory where these files are held - and will have Configure to consider them in addition to the - standard ones. + and will be considered by Configure before it looks in the + standard directories. PERL The name of the Perl executable to use when building OpenSSL. + This variable is used in config script only. Configure on the + other hand imposes the interpreter by which it itself was + executed on the whole build procedure. HASHBANGPERL The command string for the Perl executable to insert in the @@ -888,12 +1036,68 @@ uninstall Uninstall all OpenSSL components. + reconfigure + reconf + Re-run the configuration process, as exactly as the last time + as possible. + update This is a developer option. If you are developing a patch for OpenSSL you may need to use this if you want to update automatically generated files; add new error codes or add new (or change the visibility of) public API functions. (Unix only). + TESTS in Detail + --------------- + + The make variable TESTS supports a versatile set of space separated tokens + with which you can specify a set of tests to be performed. With a "current + set of tests" in mind, initially being empty, here are the possible tokens: + + alltests The current set of tests becomes the whole set of available + tests (as listed when you do 'make list-tests' or similar). + xxx Adds the test 'xxx' to the current set of tests. + -xxx Removes 'xxx' from the current set of tests. If this is the + first token in the list, the current set of tests is first + assigned the whole set of available tests, effectively making + this token equivalent to TESTS="alltests -xxx". + nn Adds the test group 'nn' (which is a number) to the current + set of tests. + -nn Removes the test group 'nn' from the current set of tests. + If this is the first token in the list, the current set of + tests is first assigned the whole set of available tests, + effectively making this token equivalent to + TESTS="alltests -xxx". + + Also, all tokens except for "alltests" may have wildcards, such as *. + (on Unix and Windows, BSD style wildcards are supported, while on VMS, + it's VMS style wildcards) + + Example: All tests except for the fuzz tests: + + $ make TESTS=-test_fuzz test + + or (if you want to be explicit) + + $ make TESTS='alltests -test_fuzz' test + + Example: All tests that have a name starting with "test_ssl" but not those + starting with "test_ssl_": + + $ make TESTS='test_ssl* -test_ssl_*' test + + Example: Only test group 10: + + $ make TESTS='10' + + Example: All tests except the slow group (group 99): + + $ make TESTS='-99' + + Example: All tests in test groups 80 to 99 except for tests in group 90: + + $ make TESTS='[89]? -90' + Note on multi-threading ----------------------- diff --git a/Makefile.shared b/Makefile.shared deleted file mode 100644 index 4f9550aa..00000000 --- a/Makefile.shared +++ /dev/null @@ -1,521 +0,0 @@ -# -# Helper makefile to link shared libraries in a portable way. -# This is much simpler than libtool, and hopefully not too error-prone. -# -# The following variables need to be set on the command line to build -# properly - -# CC contains the current compiler. This one MUST be defined -CC=cc -CFLAGS=$(CFLAG) -# LDFLAGS contains flags to be used when temporary object files (when building -# shared libraries) are created, or when an application is linked. -# SHARED_LDFLAGS contains flags to be used when the shared library is created. -LDFLAGS=$(LDFLAG) -SHARED_LDFLAGS=$(SHARED_LDFLAG) - -RC=windres -# SHARED_RCFLAGS are flags used with windres, i.e. when build for Cygwin -# or Mingw. -SHARED_RCFLAGS=$(SHARED_RCFLAG) - -NM=nm - -# LIBNAME contains just the name of the library, without prefix ("lib" -# on Unix, "cyg" for certain forms under Cygwin...) or suffix (.a, .so, -# .dll, ...). This one MUST have a value when using this makefile to -# build shared libraries. -# For example, to build libfoo.so, you need to do the following: -#LIBNAME=foo -LIBNAME= - -# STLIBNAME contains the path of the static library to build the shared -# library from, for example: -#STLIBNAME=libfoo.a -STLIBNAME= - -# On most Unix platforms, SHLIBNAME contains the path of the short name of -# the shared library to build, for example -#SHLIBNAME=libfoo.so -# On Windows POSIX layers (cygwin and mingw), SHLIBNAME contains the import -# library name for the shared library to be built, for example: -#SHLIBNAME=libfoo.dll.a - -# SHLIBNAME_FULL contains the path of the full name of the shared library to -# build, for example: -#SHLIBNAME_FULL=libfoo.so.1.2 -# When building DSOs, SHLIBNAME_FULL contains path of the full DSO name, for -# example: -#SHLIBNAME_FULL=dir/dso.so -SHLIBNAME_FULL= - -# SHLIBVERSION contains the current version of the shared library (not to -# be confused with the project version) -#SHLIBVERSION=1.2 -SHLIBVERSION= - -# NOTE: to build shared libraries, LIBNAME, STLIBNAME, SHLIBNAME and -# SHLIBNAME_FULL MUST have values when using this makefile, and in some -# cases, SHLIBVERSION as well. To build DSOs, SHLIBNAME_FULL MUST have -# a value, the rest can be left alone. - - -# APPNAME contains just the name of the application, without suffix ("" -# on Unix, ".exe" on Windows, ...). This one MUST have a value when using -# this makefile to build applications. -# For example, to build foo, you need to do the following: -#APPNAME=foo -APPNAME= - -# SRCDIR is the top directory of the source tree. -SRCDIR=. - -# OBJECTS contains all the object files to link together into the application. -# This must contain at least one object file. -#OBJECTS=foo.o -OBJECTS= - -# LIBEXTRAS contains extra modules to link together with the library. -# For example, if a second library, say libbar.a needs to be linked into -# libfoo.so, you need to do the following: -#LIBEXTRAS=libbar.a -# Note that this MUST be used when using the link_dso targets, to hold the -# names of all object files that go into the target shared object. -LIBEXTRAS= - -# LIBDEPS contains all the flags necessary to cover all necessary -# dependencies to other libraries. -LIBDEPS= - -#------------------------------------------------------------------------------ -# The rest is private to this makefile. - -SET_X=: -#SET_X=set -x - -top: - echo "Trying to use this makefile interactively? Don't." - -LINK_APP= \ - ( $(SET_X); \ - LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \ - LDCMD="$${LDCMD:-$(CC)}"; LDFLAGS="$${LDFLAGS:-$(CFLAGS) $(LDFLAGS)}"; \ - LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ - LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ - echo LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ - $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS}; \ - LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ - $${LDCMD} $${LDFLAGS} -o $${APPNAME:=$(APPNAME)} $(OBJECTS) $${LIBDEPS} ) - -LINK_SO= \ - ( $(SET_X); \ - LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \ - SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \ - SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \ - LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \ - LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \ - echo LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ - $${SHAREDCMD} $${SHAREDFLAGS} \ - -o $(SHLIBNAME_FULL) \ - $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS; \ - LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \ - $${SHAREDCMD} $${SHAREDFLAGS} \ - -o $(SHLIBNAME_FULL) \ - $$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \ - ) && $(SYMLINK_SO) - -SYMLINK_SO= \ - if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \ - if [ -n "$(SHLIBNAME_FULL)" -a -n "$(SHLIBNAME)" -a \ - "$(SHLIBNAME_FULL)" != "$(SHLIBNAME)" ]; then \ - ( $(SET_X); \ - rm -f $(SHLIBNAME); \ - ln -s $(SHLIBNAME_FULL) $(SHLIBNAME) ); \ - fi; \ - fi - -LINK_SO_SHLIB= SHOBJECTS="$(STLIBNAME) $(LIBEXTRAS)"; $(LINK_SO) -LINK_SO_DSO= INHIBIT_SYMLINKS=yes; SHOBJECTS="$(LIBEXTRAS)"; $(LINK_SO) - -LINK_SO_SHLIB_VIA_O= \ - SHOBJECTS=$(STLIBNAME).o; \ - ALL=$$ALLSYMSFLAGS; ALLSYMSFLAGS=; NOALLSYMSFLAGS=; \ - ( echo ld $(LDFLAGS) -r -o $$SHOBJECTS $$ALL $(STLIBNAME) $(LIBEXTRAS); \ - ld $(LDFLAGS) -r -o $$SHOBJECTS $$ALL $(STLIBNAME) $(LIBEXTRAS) ); \ - $(LINK_SO) && ( echo rm -f $$SHOBJECTS; rm -f $$SHOBJECTS ) - -LINK_SO_SHLIB_UNPACKED= \ - UNPACKDIR=link_tmp.$$$$; rm -rf $$UNPACKDIR; mkdir $$UNPACKDIR; \ - (cd $$UNPACKDIR; ar x ../$(STLIBNAME)) && \ - ([ -z "$(LIBEXTRAS)" ] || cp $(LIBEXTRAS) $$UNPACKDIR) && \ - SHOBJECTS=$$UNPACKDIR/*.o; \ - $(LINK_SO) && rm -rf $$UNPACKDIR - -DETECT_GNU_LD=($(CC) -Wl,-V /dev/null 2>&1 | grep '^GNU ld' )>/dev/null - -DO_GNU_SO_COMMON=\ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$(SHLIBNAME_FULL)" -DO_GNU_DSO=\ - $(DO_GNU_SO_COMMON) -DO_GNU_SO=\ - ALLSYMSFLAGS='-Wl,--whole-archive'; \ - NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ - $(DO_GNU_SO_COMMON) -DO_GNU_APP=LDFLAGS="$(CFLAGS) $(LDFLAGS)" - -#This is rather special. It's a special target with which one can link -#applications without bothering with any features that have anything to -#do with shared libraries, for example when linking against static -#libraries. It's mostly here to avoid a lot of conditionals everywhere -#else... -link_app.: - $(LINK_APP) - -link_dso.gnu: - @ $(DO_GNU_DSO); $(LINK_SO_DSO) -link_shlib.gnu: - @ $(DO_GNU_SO); $(LINK_SO_SHLIB) -link_app.gnu: - @ $(DO_GNU_APP); $(LINK_APP) - -link_shlib.linux-shared: - @$(PERL) $(SRCDIR)/util/mkdef.pl $(LIBNAME) linux >$(LIBNAME).map; \ - $(DO_GNU_SO); \ - ALLSYMSFLAGS='-Wl,--whole-archive,--version-script=$(LIBNAME).map'; \ - $(LINK_SO_SHLIB) - -link_dso.bsd: - @if $(DETECT_GNU_LD); then $(DO_GNU_DSO); else \ - LIBDEPS=" "; \ - ALLSYMSFLAGS=; \ - NOALLSYMSFLAGS=; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \ - fi; $(LINK_SO_DSO) -link_shlib.bsd: - @if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ - LIBDEPS=" "; \ - ALLSYMSFLAGS="-Wl,-Bforcearchive"; \ - NOALLSYMSFLAGS=; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -nostdlib"; \ - fi; $(LINK_SO_SHLIB) -link_app.bsd: - @if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \ - LDFLAGS="$(CFLAGS) $(LDFLAGS)"; \ - fi; $(LINK_APP) - -# For Darwin AKA Mac OS/X (dyld) -# Originally link_dso.darwin produced .so, because it was hard-coded -# in dso_dlfcn module. At later point dso_dlfcn switched to .dylib -# extension in order to allow for run-time linking with vendor- -# supplied shared libraries such as libz, so that link_dso.darwin had -# to be harmonized with it. This caused minor controversy, because -# it was believed that dlopen can't be used to dynamically load -# .dylib-s, only so called bundle modules (ones linked with -bundle -# flag). The belief seems to be originating from pre-10.4 release, -# where dlfcn functionality was emulated by dlcompat add-on. In -# 10.4 dlopen was rewritten as native part of dyld and is documented -# to be capable of loading both dynamic libraries and bundles. In -# order to provide compatibility with pre-10.4 dlopen, modules are -# linked with -bundle flag, which makes .dylib extension misleading. -# It works, because dlopen is [and always was] extension-agnostic. -# Alternative to this heuristic approach is to develop specific -# MacOS X dso module relying on whichever "native" dyld interface. -link_dso.darwin: - @ ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) `echo $(SHARED_LDFLAGS) | sed s/dynamiclib/bundle/`"; \ - $(LINK_SO_DSO) -link_shlib.darwin: - @ ALLSYMSFLAGS='-all_load'; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -current_version $(SHLIBVERSION) -compatibility_version $(SHLIBVERSION) -install_name $(INSTALLTOP)/$(LIBDIR)/$(SHLIBNAME_FULL)"; \ - $(LINK_SO_SHLIB) -link_app.darwin: # is there run-path on darwin? - $(LINK_APP) - -link_dso.cygwin: - @ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - base=-Wl,--enable-auto-image-base; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic"; \ - $(LINK_SO_DSO) -link_shlib.cygwin: - @ INHIBIT_SYMLINKS=yes; \ - echo "$(PERL) $(SRCDIR)/util/mkrc.pl $(SHLIBNAME_FULL) |" \ - "$(RC) $(SHARED_RCFLAGS) -o rc.o"; \ - $(PERL) $(SRCDIR)/util/mkrc.pl $(SHLIBNAME_FULL) | \ - $(RC) $(SHARED_RCFLAGS) -o rc.o; \ - ALLSYMSFLAGS='-Wl,--whole-archive'; \ - NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,--enable-auto-image-base -Wl,-Bsymbolic -Wl,--out-implib,$(SHLIBNAME) rc.o"; \ - $(LINK_SO_SHLIB) || exit 1; \ - rm rc.o -link_app.cygwin: - $(LINK_APP) - -# link_dso.mingw-shared and link_app.mingw-shared are mapped to the -# corresponding cygwin targets, as they do the exact same thing. -link_shlib.mingw: - @ INHIBIT_SYMLINKS=yes; \ - base=; [ $(LIBNAME) = "crypto" -a -n "$(FIPSCANLIB)" ] && base=-Wl,--image-base,0x63000000; \ - $(PERL) $(SRCDIR)/util/mkdef.pl 32 $(LIBNAME) \ - | sed -e 's|^\(LIBRARY *\)$(LIBNAME)32|\1$(SHLIBNAME_FULL)|' \ - > $(LIBNAME).def; \ - echo "$(PERL) $(SRCDIR)/util/mkrc.pl $(SHLIBNAME_FULL) |" \ - "$(RC) $(SHARED_RCFLAGS) -o rc.o"; \ - $(PERL) $(SRCDIR)/util/mkrc.pl $(SHLIBNAME_FULL) | \ - $(RC) $(SHARED_RCFLAGS) -o rc.o; \ - ALLSYMSFLAGS='-Wl,--whole-archive'; \ - NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,$(SHLIBNAME) $(LIBNAME).def rc.o"; \ - $(LINK_SO_SHLIB) || exit 1; \ - rm $(LIBNAME).def rc.o - -link_dso.alpha-osf1: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_DSO); \ - else \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \ - fi; \ - $(LINK_SO_DSO) -link_shlib.alpha-osf1: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_SO); \ - else \ - ALLSYMSFLAGS='-all'; \ - NOALLSYMSFLAGS='-none'; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic -set_version $(SHLIBVERSION)"; \ - fi; \ - $(LINK_SO_SHLIB) -link_app.alpha-osf1: - @if $(DETECT_GNU_LD); then \ - $(DO_GNU_APP); \ - else \ - LDFLAGS="$(CFLAGS) $(LDFLAGS)"; \ - fi; \ - $(LINK_APP) - -link_dso.solaris: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_DSO); \ - else \ - ALLSYMSFLAGS=""; \ - NOALLSYMSFLAGS=""; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $(SHLIBNAME_FULL) -Wl,-Bsymbolic"; \ - fi; \ - $(LINK_SO_DSO) -link_shlib.solaris: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_SO); \ - else \ - $(PERL) $(SRCDIR)/util/mkdef.pl $(LIBNAME) linux >$(LIBNAME).map; \ - ALLSYMSFLAGS="-Wl,-z,allextract,-M,$(LIBNAME).map"; \ - NOALLSYMSFLAGS="-Wl,-z,defaultextract"; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -h $(SHLIBNAME_FULL) -Wl,-Bsymbolic"; \ - fi; \ - $(LINK_SO_SHLIB) -link_app.solaris: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_APP); \ - else \ - LDFLAGS="$(CFLAGS) $(LDFLAGS)"; \ - fi; \ - $(LINK_APP) - -# OpenServer 5 native compilers used -link_dso.svr3: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_DSO); \ - else \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) -G -h $(SHLIBNAME_FULL)"; \ - fi; \ - $(LINK_SO_DSO) -link_shlib.svr3: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_SO); \ - else \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) -G -h $(SHLIBNAME_FULL)"; \ - fi; \ - $(LINK_SO_SHLIB_UNPACKED) -link_app.svr3: - @$(DETECT_GNU_LD) && $(DO_GNU_APP); \ - $(LINK_APP) - -# UnixWare 7 and OpenUNIX 8 native compilers used -link_dso.svr5: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_DSO); \ - else \ - SHARE_FLAG='-G'; \ - ($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $(SHLIBNAME_FULL)"; \ - fi; \ - $(LINK_SO_DSO) -link_shlib.svr5: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_SO); \ - else \ - SHARE_FLAG='-G'; \ - ($(CC) -v 2>&1 | grep gcc) > /dev/null && SHARE_FLAG='-shared'; \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS="$(CFLAGS) $${SHARE_FLAG} -h $(SHLIBNAME_FULL)"; \ - fi; \ - $(LINK_SO_SHLIB_UNPACKED) -link_app.svr5: - @$(DETECT_GNU_LD) && $(DO_GNU_APP); \ - $(LINK_APP) - -link_dso.irix: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_DSO); \ - else \ - ALLSYMSFLAGS=""; \ - NOALLSYMSFLAGS=""; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$(SHLIBNAME_FULL),-B,symbolic"; \ - fi; \ - $(LINK_SO_DSO) -link_shlib.irix: - @ if $(DETECT_GNU_LD); then \ - $(DO_GNU_SO); \ - else \ - MINUSWL=""; \ - ($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \ - ALLSYMSFLAGS="$${MINUSWL}-all"; \ - NOALLSYMSFLAGS="$${MINUSWL}-none"; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$(SHLIBNAME_FULL),-B,symbolic"; \ - fi; \ - $(LINK_SO_SHLIB) -link_app.irix: - @LDFLAGS="$(CFLAGS) $(LDFLAGS)"; \ - $(LINK_APP) - -# 32-bit PA-RISC HP-UX embeds the -L pathname of libs we link with, so -# we compensate for it with +cdp ../: and +cdp ./:. Yes, these rewrite -# rules imply that we can only link one level down in catalog structure, -# but that's what takes place for the moment of this writing. +cdp option -# was introduced in HP-UX 11.x and applies in 32-bit PA-RISC link -# editor context only [it's simply ignored in other cases, which are all -# ELFs by the way]. -# -link_dso.hpux: - @if $(DETECT_GNU_LD); then $(DO_GNU_DSO); else \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$(SHLIBNAME_FULL),+cdp,../:,+cdp,./:"; \ - fi; \ - rm -f $(SHLIBNAME_FULL) || :; \ - $(LINK_SO_DSO) && chmod a=rx $(SHLIBNAME_FULL) -link_shlib.hpux: - @if $(DETECT_GNU_LD); then $(DO_GNU_SO); else \ - ALLSYMSFLAGS='-Wl,-Fl'; \ - NOALLSYMSFLAGS=''; \ - expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$(SHLIBNAME_FULL),+cdp,../:,+cdp,./:"; \ - fi; \ - rm -f $(SHLIBNAME_FULL) || :; \ - $(LINK_SO_SHLIB) && chmod a=rx $(SHLIBNAME_FULL) -link_app.hpux: - @if $(DETECT_GNU_LD); then $(DO_GNU_APP); else \ - LDFLAGS="$(CFLAGS) $(LDFLAGS) -Wl,+s,+cdp,../:,+cdp,./:"; \ - fi; \ - $(LINK_APP) - -link_dso.aix: - @OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || :; \ - OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \ - ALLSYMSFLAGS=''; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \ - rm -f $(SHLIBNAME_FULL) 2>&1 > /dev/null ; \ - $(LINK_SO_DSO); -link_shlib.aix: - @ OBJECT_MODE=`expr "x$(SHARED_LDFLAGS)" : 'x\-[a-z]*\(64\)'` || : ; \ - OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \ - ALLSYMSFLAGS='-bnogc'; \ - NOALLSYMSFLAGS=''; \ - SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-bexpall,-bnolibpath,-bM:SRE'; \ - rm -f $(SHLIBNAME_FULL) 2>&1 > /dev/null ; \ - $(LINK_SO_SHLIB_VIA_O) -link_app.aix: - LDFLAGS="$(CFLAGS) -Wl,-bsvr4 $(LDFLAGS)"; \ - $(LINK_APP) - - -# Targets to build symbolic links when needed -symlink.gnu symlink.solaris symlink.svr3 symlink.svr5 symlink.irix \ -symlink.aix: - @ $(SYMLINK_SO) -symlink.darwin: - @ $(SYMLINK_SO) -symlink.hpux: - @ $(SYMLINK_SO) -# The following lines means those specific architectures do no symlinks -symlink.cygwin symlink.alpha-osf1 symlink.tru64 symlink.tru64-rpath: - -# Compatibility targets -link_dso.bsd-gcc-shared link_dso.linux-shared link_dso.gnu-shared: link_dso.gnu -link_shlib.bsd-gcc-shared: link_shlib.linux-shared -link_shlib.gnu-shared: link_shlib.gnu -link_app.bsd-gcc-shared link_app.linux-shared link_app.gnu-shared: link_app.gnu -symlink.bsd-gcc-shared symlink.bsd-shared symlink.linux-shared symlink.gnu-shared: symlink.gnu -link_dso.bsd-shared: link_dso.bsd -link_shlib.bsd-shared: link_shlib.bsd -link_app.bsd-shared: link_app.bsd -link_dso.darwin-shared: link_dso.darwin -link_shlib.darwin-shared: link_shlib.darwin -link_app.darwin-shared: link_app.darwin -symlink.darwin-shared: symlink.darwin -link_dso.cygwin-shared: link_dso.cygwin -link_shlib.cygwin-shared: link_shlib.cygwin -link_app.cygwin-shared: link_app.cygwin -symlink.cygwin-shared: symlink.cygwin -link_dso.mingw-shared: link_dso.cygwin -link_shlib.mingw-shared: link_shlib.mingw -link_app.mingw-shared: link_app.cygwin -symlink.mingw-shared: symlink.cygwin -link_dso.alpha-osf1-shared: link_dso.alpha-osf1 -link_shlib.alpha-osf1-shared: link_shlib.alpha-osf1 -link_app.alpha-osf1-shared: link_app.alpha-osf1 -symlink.alpha-osf1-shared: symlink.alpha-osf1 -link_dso.tru64-shared: link_dso.tru64 -link_shlib.tru64-shared: link_shlib.tru64 -link_app.tru64-shared: link_app.tru64 -symlink.tru64-shared: symlink.tru64 -link_dso.tru64-shared-rpath: link_dso.tru64-rpath -link_shlib.tru64-shared-rpath: link_shlib.tru64-rpath -link_app.tru64-shared-rpath: link_app.tru64-rpath -symlink.tru64-shared-rpath: symlink.tru64-rpath -link_dso.solaris-shared: link_dso.solaris -link_shlib.solaris-shared: link_shlib.solaris -link_app.solaris-shared: link_app.solaris -symlink.solaris-shared: symlink.solaris -link_dso.svr3-shared: link_dso.svr3 -link_shlib.svr3-shared: link_shlib.svr3 -link_app.svr3-shared: link_app.svr3 -symlink.svr3-shared: symlink.svr3 -link_dso.svr5-shared: link_dso.svr5 -link_shlib.svr5-shared: link_shlib.svr5 -link_app.svr5-shared: link_app.svr5 -symlink.svr5-shared: symlink.svr5 -link_dso.irix-shared: link_dso.irix -link_shlib.irix-shared: link_shlib.irix -link_app.irix-shared: link_app.irix -symlink.irix-shared: symlink.irix -link_dso.hpux-shared: link_dso.hpux -link_shlib.hpux-shared: link_shlib.hpux -link_app.hpux-shared: link_app.hpux -symlink.hpux-shared: symlink.hpux -link_dso.aix-shared: link_dso.aix -link_shlib.aix-shared: link_shlib.aix -link_app.aix-shared: link_app.aix -symlink.aix-shared: symlink.aix diff --git a/NEWS b/NEWS index 8744fe68..c60da874 100644 --- a/NEWS +++ b/NEWS @@ -5,11 +5,25 @@ This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file. - Major changes between OpenSSL 1.1.0g and OpenSSL 1.1.0h [27 Mar 2018] + Major changes between OpenSSL 1.1.0g and OpenSSL 1.1.1 [in pre-release] + + o Support for TLSv1.3 added + o Move the display of configuration data to configdata.pm. + o Allow GNU style "make variables" to be used with Configure. + o Add a STORE module (OSSL_STORE) + o Claim the namespaces OSSL and OPENSSL, represented as symbol prefixes + o Add multi-prime RSA (RFC 8017) support + o Add SM3 implemented according to GB/T 32905-2016 + o Add SM4 implemented according to GB/T 32907-2016. + o Add 'Maximum Fragment Length' TLS extension negotiation and support + o Add ARIA support + o Add SHA3 + o Rewrite of devcrypto engine + o Add support for SipHash + o Grand redesign of the OpenSSL random generator + + Major changes between OpenSSL 1.1.0g and OpenSSL 1.1.0h [under development] - o Constructed ASN.1 types with a recursive definition could exceed the - stack (CVE-2018-0739) - o Incorrect CRYPTO_memcmp on HP-UX PA-RISC (CVE-2018-0733) o rsaz_1024_mul_avx2 overflow bug on x86_64 (CVE-2017-3738) Major changes between OpenSSL 1.1.0f and OpenSSL 1.1.0g [2 Nov 2017] @@ -367,7 +381,7 @@ o Compression memory leak fixed. o Compression session resumption fixed. o Ticket and SNI coexistence fixes. - o Many fixes to DTLS handling. + o Many fixes to DTLS handling. Major changes between OpenSSL 0.9.8k and OpenSSL 0.9.8l [5 Nov 2009]: @@ -400,7 +414,7 @@ o Add gcc 4.2 support. o Add support for AES and SSE2 assembly language optimization for VC++ build. - o Support for RFC4507bis and server name extensions if explicitly + o Support for RFC4507bis and server name extensions if explicitly selected at compile time. o DTLS improvements. o RFC4507bis support. @@ -493,7 +507,7 @@ affected functions. o Improved platform support for PowerPC. o New FIPS 180-2 algorithms (SHA-224, -256, -384 and -512). - o New X509_VERIFY_PARAM structure to support parametrisation + o New X509_VERIFY_PARAM structure to support parameterisation of X.509 path validation. o Major overhaul of RC4 performance on Intel P4, IA-64 and AMD64. @@ -580,7 +594,7 @@ Major changes between OpenSSL 0.9.7a and OpenSSL 0.9.7b [10 Apr 2003]: o Security: counter the Klima-Pokorny-Rosa extension of - Bleichbacher's attack + Bleichbacher's attack o Security: make RSA blinding default. o Configuration: Irix fixes, AIX fixes, better mingw support. o Support for new platforms: linux-ia64-ecc. @@ -640,7 +654,7 @@ o SSL/TLS: allow optional cipher choice according to server's preference. o SSL/TLS: allow server to explicitly set new session ids. o SSL/TLS: support Kerberos cipher suites (RFC2712). - Only supports MIT Kerberos for now. + Only supports MIT Kerberos for now. o SSL/TLS: allow more precise control of renegotiations and sessions. o SSL/TLS: add callback to retrieve SSL/TLS messages. o SSL/TLS: support AES cipher suites (RFC3268). @@ -653,7 +667,7 @@ Major changes between OpenSSL 0.9.6i and OpenSSL 0.9.6j [10 Apr 2003]: o Security: counter the Klima-Pokorny-Rosa extension of - Bleichbacher's attack + Bleichbacher's attack o Security: make RSA blinding default. o Build: shared library support fixes. @@ -765,7 +779,7 @@ Major changes between OpenSSL 0.9.5 and OpenSSL 0.9.5a [1 Apr 2000]: - o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 + o Bug fixes for Win32, SuSE Linux, NeXTSTEP and FreeBSD 2.2.8 o Shared library support for HPUX and Solaris-gcc o Support of Linux/IA64 o Assembler support for Mingw32 @@ -779,7 +793,7 @@ o Automation of 'req' application o Fixes to make s_client, s_server work under Windows o Support for multiple fieldnames in SPKACs - o New SPKAC command line utilty and associated library functions + o New SPKAC command line utility and associated library functions o Options to allow passwords to be obtained from various sources o New public key PEM format and options to handle it o Many other fixes and enhancements to command line utilities @@ -861,8 +875,7 @@ o Added BIO proxy and filtering functionality o Extended Big Number (BN) library o Added RIPE MD160 message digest - o Addeed support for RC2/64bit cipher + o Added support for RC2/64bit cipher o Extended ASN.1 parser routines - o Adjustations of the source tree for CVS + o Adjustments of the source tree for CVS o Support for various new platforms - diff --git a/NOTES.UNIX b/NOTES.UNIX index 43146e9e..32361072 100644 --- a/NOTES.UNIX +++ b/NOTES.UNIX @@ -28,3 +28,15 @@ $ ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \ -Wl,-rpath,'$(LIBRPATH)' + + On modern systems using GNU ld.so, a better choice may be to use the + new dtags, like this: + + $ ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl \ + -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)' + + This sets DT_RUNPATH instead of DT_RPATH. DT_RUNPATH is considered after + the environment variable LD_LIBRARY_PATH, while DT_RPATH is considered + before that environment variable (which means that the values in that + environment variable won't matter if the library is found in the + paths given by DT_RPATH). diff --git a/NOTES.VMS b/NOTES.VMS index 3e9a57e8..98def068 100644 --- a/NOTES.VMS +++ b/NOTES.VMS @@ -56,6 +56,32 @@ to use. + About debugging + --------------- + + If you build for debugging, the default on VMS is that image + activation starts the debugger automatically, giving you a debug + prompt. Unfortunately, this disrupts all other uses, such as running + test programs in the test framework. + + Generally speaking, if you build for debugging, only use the programs + directly for debugging. Do not try to use them from a script, such + as running the test suite. + + *The following is not available on Alpha* + + As a compromise, we're turning off the flag that makes the debugger + start automatically. If there is a program that you need to debug, + you need to turn that flag back on first, for example: + + $ set image /flag=call_debug [.test]evp_test.exe + + Then just run it and you will find yourself in a debugging session. + When done, we recommend that you turn that flag back off: + + $ set image /flag=nocall_debug [.test]evp_test.exe + + Checking the distribution ------------------------- diff --git a/NOTES.WIN b/NOTES.WIN index c31aed92..ac215c36 100644 --- a/NOTES.WIN +++ b/NOTES.WIN @@ -6,7 +6,7 @@ -------------------------------------------------- In addition to the requirements and instructions listed in INSTALL, - this are required as well: + these are required as well: - You need Perl. We recommend ActiveState Perl, available from https://www.activestate.com/ActivePerl. Another viable alternative diff --git a/README b/README index 3491280e..344f1619 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ - OpenSSL 1.1.0h 27 Mar 2018 + OpenSSL 1.1.1-pre2 (alpha) 27 Feb 2018 - Copyright (c) 1998-2016 The OpenSSL Project + Copyright (c) 1998-2018 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson All rights reserved. @@ -62,14 +62,13 @@ - Download the latest version from the repository to see if the problem has already been addressed - Configure with no-asm - - Remove compiler optimisation flags + - Remove compiler optimization flags If you wish to report a bug then please include the following information and create an issue on GitHub: - OpenSSL version: output of 'openssl version -a' - - Any "Configure" options that you selected during compilation of the - library if applicable (see INSTALL) + - Configuration data: output of 'perl configdata.pm --dump' - OS Name, Version, Hardware platform - Compiler Details (name, version) - Application Details (name, version) diff --git a/README.ENGINE b/README.ENGINE index 530a4edd..230dc82a 100644 --- a/README.ENGINE +++ b/README.ENGINE @@ -13,7 +13,6 @@ There are currently built-in ENGINE implementations for the following crypto devices: - o Cryptodev o Microsoft CryptoAPI o VIA Padlock o nCipher CHIL diff --git a/VMS/engine.opt b/VMS/engine.opt index 1c73c800..9725023a 100644 --- a/VMS/engine.opt +++ b/VMS/engine.opt @@ -1,2 +1,3 @@ CASE_SENSITIVE=YES -SYMBOL_VECTOR=(bind_engine=PROCEDURE,v_check=PROCEDURE) +SYMBOL_VECTOR=(BIND_ENGINE=PROCEDURE,V_CHECK=PROCEDURE,- + bind_engine/BIND_ENGINE=PROCEDURE,v_check/V_CHECK=PROCEDURE) diff --git a/VMS/openssl_shutdown.com.in b/VMS/openssl_shutdown.com.in index f0df1c1c..fd4e3d50 100644 --- a/VMS/openssl_shutdown.com.in +++ b/VMS/openssl_shutdown.com.in @@ -26,7 +26,7 @@ $ ENDIF $ $ ! Abbrevs $ DEAS := DEASSIGN /NOLOG 'P1' -$ sv := {- sprintf "%02d%02d", $config{shlib_major}, $config{shlib_minor} -} +$ sv := {- sprintf "%02d%02d", split m|\.|, $config{shlib_version_number} -} $ pz := {- $config{pointer_size} -} $ $ DEAS OSSL$DATAROOT diff --git a/VMS/openssl_startup.com.in b/VMS/openssl_startup.com.in index 9c8c09ac..9e6e1c0b 100644 --- a/VMS/openssl_startup.com.in +++ b/VMS/openssl_startup.com.in @@ -88,7 +88,7 @@ $ $ ! Abbrevs $ DEFT := DEFINE /TRANSLATION=CONCEALED /NOLOG 'P1' $ DEF := DEFINE /NOLOG 'P1' -$ sv := {- sprintf "%02d%02d", $config{shlib_major}, $config{shlib_minor} -} +$ sv := {- sprintf "%02d%02d", split m|\.|, $config{shlib_version_number} -} $ pz := {- $config{pointer_size} -} $ $ DEFT OSSL$DATAROOT 'OPENSSLDIR_'] diff --git a/apps/CA.pl.in b/apps/CA.pl.in index 7277eeca..784c22f6 100644 --- a/apps/CA.pl.in +++ b/apps/CA.pl.in @@ -46,8 +46,25 @@ 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 { @@ -96,22 +113,23 @@ sub run if ( $WHAT =~ /^(-\?|-h|-help)$/ ) { - print STDERR "usage: CA -newcert|-newreq|-newreq-nodes|-newca|-sign|-signcert|-verify\n"; - print STDERR " CA -pkcs12 [certname]\n"; - print STDERR " CA -crl|-revoke cert-filename [reason]\n"; + 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"); + $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 '-newreq' ) { +} 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 -keyout $NEWKEY -out $NEWREQ $DAYS"); - print "Request is in $NEWREQ, private key is in $NEWKEY\n" if $RET == 0; -} elsif ($WHAT eq '-newreq-nodes' ) { - # create a certificate request - $RET = run("$REQ -new -nodes -keyout $NEWKEY -out $NEWREQ $DAYS"); + $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 @@ -136,11 +154,11 @@ if ($WHAT eq '-newcert' ) { print "Making CA certificate ...\n"; $RET = run("$REQ -new -keyout" . " ${CATOP}/private/$CAKEY" - . " -out ${CATOP}/$CAREQ"); + . " -out ${CATOP}/$CAREQ $EXTRA{req}"); $RET = run("$CA -create_serial" . " -out ${CATOP}/$CACERT $CADAYS -batch" . " -keyfile ${CATOP}/private/$CAKEY -selfsign" - . " -extensions v3_ca" + . " -extensions v3_ca $EXTRA{ca}" . " -infiles ${CATOP}/$CAREQ") if $RET == 0; print "CA certificate is in ${CATOP}/$CACERT\n" if $RET == 0; } @@ -150,32 +168,32 @@ if ($WHAT eq '-newcert' ) { $RET = run("$PKCS12 -in $NEWCERT -inkey $NEWKEY" . " -certfile ${CATOP}/$CACERT" . " -out $NEWP12" - . " -export -name \"$cname\""); + . " -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 -infiles $NEWREQ"); + $RET = run("$CA -policy policy_anything $EXTRA{ca} -infiles $NEWREQ"); } elsif ($WHAT eq '-sign' ) { - $RET = run("$CA -policy policy_anything -out $NEWCERT -infiles $NEWREQ"); + $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 -infiles $NEWREQ"); + . " -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"); + . " -out tmp.pem $EXTRA{x509}"); $RET = run("$CA -policy policy_anything -out $NEWCERT" - . " -infiles tmp.pem") if $RET == 0; + . "$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"); + 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"); + $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]; @@ -186,7 +204,7 @@ if ($WHAT eq '-newcert' ) { my $reason = $ARGV[1]; $reason = " -crl_reason $reason" if defined $reason && crl_reason_ok($reason); - $RET = run("$CA -revoke \"$cname\"" . $reason); + $RET = run("$CA -revoke \"$cname\"" . $reason . $EXTRA{ca}); } else { print STDERR "Unknown arg \"$WHAT\"\n"; print STDERR "Use -help for help.\n"; diff --git a/apps/app_rand.c b/apps/app_rand.c index ff0771cb..28caad41 100644 --- a/apps/app_rand.c +++ b/apps/app_rand.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,107 +9,86 @@ #include "apps.h" #include +#include #include +#include -static int seeded = 0; -static int egdsocket = 0; +static char *save_rand_file; -int app_RAND_load_file(const char *file, int dont_warn) +void app_RAND_load_conf(CONF *c, const char *section) { - int consider_randfile = (file == NULL); - char buffer[200]; + const char *randfile = NCONF_get_string(c, section, "RANDFILE"); - if (file == NULL) - file = RAND_file_name(buffer, sizeof(buffer)); -#ifndef OPENSSL_NO_EGD - else if (RAND_egd(file) > 0) { - /* - * we try if the given filename is an EGD socket. if it is, we don't - * write anything back to the file. - */ - egdsocket = 1; - return 1; + if (randfile == NULL) { + ERR_clear_error(); + return; } -#endif - if (file == NULL || !RAND_load_file(file, -1)) { - if (RAND_status() == 0) { - if (!dont_warn) { - BIO_printf(bio_err, "unable to load 'random state'\n"); - BIO_printf(bio_err, - "This means that the random number generator has not been seeded\n"); - BIO_printf(bio_err, "with much random data.\n"); - if (consider_randfile) { /* explanation does not apply when a - * file is explicitly named */ - BIO_printf(bio_err, - "Consider setting the RANDFILE environment variable to point at a file that\n"); - BIO_printf(bio_err, - "'random' data can be kept in (the file will be overwritten).\n"); - } - } - return 0; - } + if (RAND_load_file(randfile, -1) < 0) { + BIO_printf(bio_err, "Can't load %s into RNG\n", randfile); + ERR_print_errors(bio_err); + return; } - seeded = 1; - return 1; + if (save_rand_file == NULL) + save_rand_file = OPENSSL_strdup(randfile); } -long app_RAND_load_files(char *name) +static int loadfiles(char *name) { - char *p, *n; - int last; - long tot = 0; -#ifndef OPENSSL_NO_EGD - int egd; -#endif + char *p; + int last, ret = 1; - for (;;) { + for ( ; ; ) { last = 0; - for (p = name; ((*p != '\0') && (*p != LIST_SEPARATOR_CHAR)); p++) ; + for (p = name; *p != '\0' && *p != LIST_SEPARATOR_CHAR; p++) + continue; if (*p == '\0') last = 1; *p = '\0'; - n = name; - name = p + 1; - if (*n == '\0') - break; - -#ifndef OPENSSL_NO_EGD - egd = RAND_egd(n); - if (egd > 0) - tot += egd; - else -#endif - tot += RAND_load_file(n, -1); + if (RAND_load_file(name, -1) < 0) { + BIO_printf(bio_err, "Can't load %s into RNG\n", name); + ERR_print_errors(bio_err); + ret = 0; + } if (last) break; + name = p + 1; + if (*name == '\0') + break; } - if (tot > 512) - app_RAND_allow_write_file(); - return (tot); + return ret; } -int app_RAND_write_file(const char *file) +void app_RAND_write(void) { - char buffer[200]; + if (save_rand_file == NULL) + return; + if (RAND_write_file(save_rand_file) == -1) { + BIO_printf(bio_err, "Cannot write random bytes:\n"); + ERR_print_errors(bio_err); + } + OPENSSL_free(save_rand_file); + save_rand_file = NULL; +} - if (egdsocket || !seeded) - /* - * If we did not manage to read the seed file, we should not write a - * low-entropy seed file back -- it would suppress a crucial warning - * the next time we want to use it. - */ - return 0; - if (file == NULL) - file = RAND_file_name(buffer, sizeof(buffer)); - if (file == NULL || !RAND_write_file(file)) { - BIO_printf(bio_err, "unable to write 'random state'\n"); - return 0; +/* + * See comments in opt_verify for explanation of this. + */ +enum r_range { OPT_R_ENUM }; + +int opt_rand(int opt) +{ + switch ((enum r_range)opt) { + case OPT_R__FIRST: + case OPT_R__LAST: + break; + case OPT_R_RAND: + return loadfiles(opt_arg()); + break; + case OPT_R_WRITERAND: + OPENSSL_free(save_rand_file); + save_rand_file = OPENSSL_strdup(opt_arg()); + break; } return 1; } - -void app_RAND_allow_write_file(void) -{ - seeded = 1; -} diff --git a/apps/apps.c b/apps/apps.c index 8703d0cc..0438bdb9 100644 --- a/apps/apps.c +++ b/apps/apps.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -54,9 +54,8 @@ typedef struct { unsigned long mask; } NAME_EX_TBL; -#if !defined(OPENSSL_NO_UI) || !defined(OPENSSL_NO_ENGINE) static UI_METHOD *ui_method = NULL; -#endif +static const UI_METHOD *ui_fallback_method = NULL; static int set_table_opts(unsigned long *flags, const char *arg, const NAME_EX_TBL * in_tbl); @@ -110,13 +109,13 @@ int chopup_args(ARGS *arg, char *buf) } } arg->argv[arg->argc] = NULL; - return (1); + return 1; } #ifndef APP_INIT int app_init(long mesgwin) { - return (1); + return 1; } #endif @@ -138,41 +137,55 @@ int ctx_set_verify_locations(SSL_CTX *ctx, const char *CAfile, int ctx_set_ctlog_list_file(SSL_CTX *ctx, const char *path) { - if (path == NULL) { + if (path == NULL) return SSL_CTX_set_default_ctlog_list_file(ctx); - } return SSL_CTX_set_ctlog_list_file(ctx, path); } #endif +static unsigned long nmflag = 0; +static char nmflag_set = 0; + +int set_nameopt(const char *arg) +{ + int ret = set_name_ex(&nmflag, arg); + + if (ret) + nmflag_set = 1; + + return ret; +} + +unsigned long get_nameopt(void) +{ + return (nmflag_set) ? nmflag : XN_FLAG_ONELINE; +} + int dump_cert_text(BIO *out, X509 *x) { - char *p; - - p = X509_NAME_oneline(X509_get_subject_name(x), NULL, 0); - BIO_puts(out, "subject="); - BIO_puts(out, p); - OPENSSL_free(p); - - p = X509_NAME_oneline(X509_get_issuer_name(x), NULL, 0); - BIO_puts(out, "\nissuer="); - BIO_puts(out, p); + print_name(out, "subject=", X509_get_subject_name(x), get_nameopt()); + BIO_puts(out, "\n"); + print_name(out, "issuer=", X509_get_issuer_name(x), get_nameopt()); BIO_puts(out, "\n"); - OPENSSL_free(p); return 0; } -#ifndef OPENSSL_NO_UI static int ui_open(UI *ui) { - return UI_method_get_opener(UI_OpenSSL())(ui); + int (*opener)(UI *ui) = UI_method_get_opener(ui_fallback_method); + + if (opener) + return opener(ui); + return 1; } static int ui_read(UI *ui, UI_STRING *uis) { + int (*reader)(UI *ui, UI_STRING *uis) = NULL; + if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && UI_get0_user_data(ui)) { switch (UI_get_string_type(uis)) { @@ -186,15 +199,25 @@ static int ui_read(UI *ui, UI_STRING *uis) return 1; } } - default: + break; + case UIT_NONE: + case UIT_BOOLEAN: + case UIT_INFO: + case UIT_ERROR: break; } } - return UI_method_get_reader(UI_OpenSSL())(ui, uis); + + reader = UI_method_get_reader(ui_fallback_method); + if (reader) + return reader(ui, uis); + return 1; } static int ui_write(UI *ui, UI_STRING *uis) { + int (*writer)(UI *ui, UI_STRING *uis) = NULL; + if (UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD && UI_get0_user_data(ui)) { switch (UI_get_string_type(uis)) { @@ -206,20 +229,36 @@ static int ui_write(UI *ui, UI_STRING *uis) if (password && password[0] != '\0') return 1; } - default: + break; + case UIT_NONE: + case UIT_BOOLEAN: + case UIT_INFO: + case UIT_ERROR: break; } } - return UI_method_get_writer(UI_OpenSSL())(ui, uis); + + writer = UI_method_get_writer(ui_fallback_method); + if (writer) + return writer(ui, uis); + return 1; } static int ui_close(UI *ui) { - return UI_method_get_closer(UI_OpenSSL())(ui); + int (*closer)(UI *ui) = UI_method_get_closer(ui_fallback_method); + + if (closer) + return closer(ui); + return 1; } int setup_ui_method(void) { + ui_fallback_method = UI_null(); +#ifndef OPENSSL_NO_UI_CONSOLE + ui_fallback_method = UI_OpenSSL(); +#endif ui_method = UI_create_method("OpenSSL application user interface"); UI_method_set_opener(ui_method, ui_open); UI_method_set_reader(ui_method, ui_read); @@ -235,24 +274,18 @@ void destroy_ui_method(void) ui_method = NULL; } } -#endif + +const UI_METHOD *get_ui_method(void) +{ + return ui_method; +} int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp) { int res = 0; -#ifndef OPENSSL_NO_UI UI *ui = NULL; -#endif PW_CB_DATA *cb_data = (PW_CB_DATA *)cb_tmp; -#ifdef OPENSSL_NO_UI - if (cb_data != NULL && cb_data->password != NULL) { - res = strlen(cb_data->password); - if (res > bufsiz) - res = bufsiz; - memcpy(buf, cb_data->password, res); - } -#else ui = UI_new_method(ui_method); if (ui) { int ok = 0; @@ -276,9 +309,9 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp) /* We know that there is no previous user data to return to us */ (void)UI_add_user_data(ui, cb_data); - if (ok >= 0) - ok = UI_add_input_string(ui, prompt, ui_flags, buf, - PW_MIN_LENGTH, bufsiz - 1); + ok = UI_add_input_string(ui, prompt, ui_flags, buf, + PW_MIN_LENGTH, bufsiz - 1); + if (ok >= 0 && verify) { buff = app_malloc(bufsiz, "password buffer"); ok = UI_add_verify_string(ui, prompt, ui_flags, buff, @@ -287,8 +320,7 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp) if (ok >= 0) do { ok = UI_process(ui); - } - while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0)); + } while (ok < 0 && UI_ctrl(ui, UI_CTRL_IS_REDOABLE, 0, 0, 0)); OPENSSL_clear_free(buff, (unsigned int)bufsiz); @@ -308,7 +340,6 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp) UI_free(ui); OPENSSL_free(prompt); } -#endif return res; } @@ -317,22 +348,24 @@ static char *app_get_pass(const char *arg, int keepbio); int app_passwd(const char *arg1, const char *arg2, char **pass1, char **pass2) { int same; - if (!arg2 || !arg1 || strcmp(arg1, arg2)) + if (arg2 == NULL || arg1 == NULL || strcmp(arg1, arg2)) same = 0; else same = 1; - if (arg1) { + if (arg1 != NULL) { *pass1 = app_get_pass(arg1, same); - if (!*pass1) + if (*pass1 == NULL) return 0; - } else if (pass1) + } else if (pass1 != NULL) { *pass1 = NULL; - if (arg2) { + } + if (arg2 != NULL) { *pass2 = app_get_pass(arg2, same ? 2 : 0); - if (!*pass2) + if (*pass2 == NULL) return 0; - } else if (pass2) + } else if (pass2 != NULL) { *pass2 = NULL; + } return 1; } @@ -346,16 +379,16 @@ static char *app_get_pass(const char *arg, int keepbio) return OPENSSL_strdup(arg + 5); if (strncmp(arg, "env:", 4) == 0) { tmp = getenv(arg + 4); - if (!tmp) { + if (tmp == NULL) { BIO_printf(bio_err, "Can't read environment variable %s\n", arg + 4); return NULL; } return OPENSSL_strdup(tmp); } - if (!keepbio || !pwdbio) { + if (!keepbio || pwdbio == NULL) { if (strncmp(arg, "file:", 5) == 0) { pwdbio = BIO_new_file(arg + 5, "r"); - if (!pwdbio) { + if (pwdbio == NULL) { BIO_printf(bio_err, "Can't open file %s\n", arg + 5); return NULL; } @@ -404,12 +437,12 @@ static char *app_get_pass(const char *arg, int keepbio) return NULL; } tmp = strchr(tpass, '\n'); - if (tmp) + if (tmp != NULL) *tmp = 0; return OPENSSL_strdup(tpass); } -static CONF *app_load_config_(BIO *in, const char *filename) +CONF *app_load_config_bio(BIO *in, const char *filename) { long errorline = -1; CONF *conf; @@ -420,15 +453,21 @@ static CONF *app_load_config_(BIO *in, const char *filename) if (i > 0) return conf; - if (errorline <= 0) - BIO_printf(bio_err, "%s: Can't load config file \"%s\"\n", - opt_getprog(), filename); + if (errorline <= 0) { + BIO_printf(bio_err, "%s: Can't load ", opt_getprog()); + } else { + BIO_printf(bio_err, "%s: Error on line %ld of ", opt_getprog(), + errorline); + } + if (filename != NULL) + BIO_printf(bio_err, "config file \"%s\"\n", filename); else - BIO_printf(bio_err, "%s: Error on line %ld of config file \"%s\"\n", - opt_getprog(), errorline, filename); + BIO_printf(bio_err, "config input"); + NCONF_free(conf); return NULL; } + CONF *app_load_config(const char *filename) { BIO *in; @@ -438,10 +477,11 @@ CONF *app_load_config(const char *filename) if (in == NULL) return NULL; - conf = app_load_config_(in, filename); + conf = app_load_config_bio(in, filename); BIO_free(in); return conf; } + CONF *app_load_config_quiet(const char *filename) { BIO *in; @@ -451,7 +491,7 @@ CONF *app_load_config_quiet(const char *filename) if (in == NULL) return NULL; - conf = app_load_config_(in, filename); + conf = app_load_config_bio(in, filename); BIO_free(in); return conf; } @@ -515,9 +555,9 @@ static int load_pkcs12(BIO *in, const char *desc, goto die; } /* See if an empty password will do */ - if (PKCS12_verify_mac(p12, "", 0) || PKCS12_verify_mac(p12, NULL, 0)) + if (PKCS12_verify_mac(p12, "", 0) || PKCS12_verify_mac(p12, NULL, 0)) { pass = ""; - else { + } else { if (!pem_cb) pem_cb = (pem_password_cb *)password_callback; len = pem_cb(tpass, PEM_BUFSIZE, 0, cb_data); @@ -578,8 +618,7 @@ static int load_cert_crl_http(const char *url, X509 **pcert, X509_CRL **pcrl) OPENSSL_free(host); OPENSSL_free(path); OPENSSL_free(port); - if (bio) - BIO_free_all(bio); + BIO_free_all(bio); OCSP_REQ_CTX_free(rctx); if (rv != 1) { BIO_printf(bio_err, "Error loading %s from %s\n", @@ -605,17 +644,18 @@ X509 *load_cert(const char *file, int format, const char *cert_descrip) if (file == NULL) { unbuffer(stdin); cert = dup_bio_in(format); - } else + } else { cert = bio_open_default(file, 'r', format); + } if (cert == NULL) goto end; - if (format == FORMAT_ASN1) + if (format == FORMAT_ASN1) { x = d2i_X509_bio(cert, NULL); - else if (format == FORMAT_PEM) + } else if (format == FORMAT_PEM) { x = PEM_read_bio_X509_AUX(cert, NULL, (pem_password_cb *)password_callback, NULL); - else if (format == FORMAT_PKCS12) { + } else if (format == FORMAT_PKCS12) { if (!load_pkcs12(cert, cert_descrip, NULL, NULL, NULL, &x, NULL)) goto end; } else { @@ -628,7 +668,7 @@ X509 *load_cert(const char *file, int format, const char *cert_descrip) ERR_print_errors(bio_err); } BIO_free(cert); - return (x); + return x; } X509_CRL *load_crl(const char *infile, int format) @@ -646,11 +686,11 @@ X509_CRL *load_crl(const char *infile, int format) in = bio_open_default(infile, 'r', format); if (in == NULL) goto end; - if (format == FORMAT_ASN1) + if (format == FORMAT_ASN1) { x = d2i_X509_CRL_bio(in, NULL); - else if (format == FORMAT_PEM) + } else if (format == FORMAT_PEM) { x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL); - else { + } else { BIO_printf(bio_err, "bad input format specified for input crl\n"); goto end; } @@ -662,7 +702,7 @@ X509_CRL *load_crl(const char *infile, int format) end: BIO_free(in); - return (x); + return x; } EVP_PKEY *load_key(const char *file, int format, int maybe_stdin, @@ -680,9 +720,9 @@ EVP_PKEY *load_key(const char *file, int format, int maybe_stdin, goto end; } if (format == FORMAT_ENGINE) { - if (e == NULL) + if (e == NULL) { BIO_printf(bio_err, "no engine specified\n"); - else { + } else { #ifndef OPENSSL_NO_ENGINE if (ENGINE_init(e)) { pkey = ENGINE_load_private_key(e, file, ui_method, &cb_data); @@ -701,8 +741,9 @@ EVP_PKEY *load_key(const char *file, int format, int maybe_stdin, if (file == NULL && maybe_stdin) { unbuffer(stdin); key = dup_bio_in(format); - } else + } else { key = bio_open_default(file, 'r', format); + } if (key == NULL) goto end; if (format == FORMAT_ASN1) { @@ -711,21 +752,19 @@ EVP_PKEY *load_key(const char *file, int format, int maybe_stdin, pkey = PEM_read_bio_PrivateKey(key, NULL, (pem_password_cb *)password_callback, &cb_data); - } - else if (format == FORMAT_PKCS12) { + } else if (format == FORMAT_PKCS12) { if (!load_pkcs12(key, key_descrip, (pem_password_cb *)password_callback, &cb_data, &pkey, NULL, NULL)) goto end; - } #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) && !defined (OPENSSL_NO_RC4) - else if (format == FORMAT_MSBLOB) + } else if (format == FORMAT_MSBLOB) { pkey = b2i_PrivateKey_bio(key); - else if (format == FORMAT_PVK) + } else if (format == FORMAT_PVK) { pkey = b2i_PVK_bio(key, (pem_password_cb *)password_callback, &cb_data); #endif - else { + } else { BIO_printf(bio_err, "bad input format specified for key file\n"); goto end; } @@ -735,7 +774,7 @@ EVP_PKEY *load_key(const char *file, int format, int maybe_stdin, BIO_printf(bio_err, "unable to load %s\n", key_descrip); ERR_print_errors(bio_err); } - return (pkey); + return pkey; } EVP_PKEY *load_pubkey(const char *file, int format, int maybe_stdin, @@ -753,9 +792,9 @@ EVP_PKEY *load_pubkey(const char *file, int format, int maybe_stdin, goto end; } if (format == FORMAT_ENGINE) { - if (e == NULL) + if (e == NULL) { BIO_printf(bio_err, "no engine specified\n"); - else { + } else { #ifndef OPENSSL_NO_ENGINE pkey = ENGINE_load_public_key(e, file, ui_method, &cb_data); if (pkey == NULL) { @@ -771,14 +810,14 @@ EVP_PKEY *load_pubkey(const char *file, int format, int maybe_stdin, if (file == NULL && maybe_stdin) { unbuffer(stdin); key = dup_bio_in(format); - } else + } else { key = bio_open_default(file, 'r', format); + } if (key == NULL) goto end; if (format == FORMAT_ASN1) { pkey = d2i_PUBKEY_bio(key, NULL); - } - else if (format == FORMAT_ASN1RSA) { + } else if (format == FORMAT_ASN1RSA) { #ifndef OPENSSL_NO_RSA RSA *rsa; rsa = d2i_RSAPublicKey_bio(key, NULL); @@ -808,21 +847,20 @@ EVP_PKEY *load_pubkey(const char *file, int format, int maybe_stdin, BIO_printf(bio_err, "RSA keys not supported\n"); #endif pkey = NULL; - } - else if (format == FORMAT_PEM) { + } else if (format == FORMAT_PEM) { pkey = PEM_read_bio_PUBKEY(key, NULL, (pem_password_cb *)password_callback, &cb_data); - } #if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DSA) - else if (format == FORMAT_MSBLOB) + } else if (format == FORMAT_MSBLOB) { pkey = b2i_PublicKey_bio(key); #endif + } end: BIO_free(key); if (pkey == NULL) BIO_printf(bio_err, "unable to load %s\n", key_descrip); - return (pkey); + return pkey; } static int load_certs_crls(const char *file, int format, @@ -855,36 +893,36 @@ static int load_certs_crls(const char *file, int format, BIO_free(bio); - if (pcerts && *pcerts == NULL) { + if (pcerts != NULL && *pcerts == NULL) { *pcerts = sk_X509_new_null(); - if (!*pcerts) + if (*pcerts == NULL) goto end; } - if (pcrls && *pcrls == NULL) { + if (pcrls != NULL && *pcrls == NULL) { *pcrls = sk_X509_CRL_new_null(); - if (!*pcrls) + if (*pcrls == NULL) goto end; } for (i = 0; i < sk_X509_INFO_num(xis); i++) { xi = sk_X509_INFO_value(xis, i); - if (xi->x509 && pcerts) { + if (xi->x509 != NULL && pcerts != NULL) { if (!sk_X509_push(*pcerts, xi->x509)) goto end; xi->x509 = NULL; } - if (xi->crl && pcrls) { + if (xi->crl != NULL && pcrls != NULL) { if (!sk_X509_CRL_push(*pcrls, xi->crl)) goto end; xi->crl = NULL; } } - if (pcerts && sk_X509_num(*pcerts) > 0) + if (pcerts != NULL && sk_X509_num(*pcerts) > 0) rv = 1; - if (pcrls && sk_X509_CRL_num(*pcrls) > 0) + if (pcrls != NULL && sk_X509_CRL_num(*pcrls) > 0) rv = 1; end: @@ -892,11 +930,11 @@ static int load_certs_crls(const char *file, int format, sk_X509_INFO_pop_free(xis, X509_INFO_free); if (rv == 0) { - if (pcerts) { + if (pcerts != NULL) { sk_X509_pop_free(*pcerts, X509_free); *pcerts = NULL; } - if (pcrls) { + if (pcrls != NULL) { sk_X509_CRL_pop_free(*pcrls, X509_CRL_free); *pcrls = NULL; } @@ -1101,8 +1139,9 @@ static int set_table_opts(unsigned long *flags, const char *arg, } else if (c == '+') { c = 1; arg++; - } else + } else { c = 1; + } for (ptbl = in_tbl; ptbl->name; ptbl++) { if (strcasecmp(arg, ptbl->name) == 0) { @@ -1147,9 +1186,9 @@ void print_bignum_var(BIO *out, const BIGNUM *in, const char *var, int len, unsigned char *buffer) { BIO_printf(out, " static unsigned char %s_%d[] = {", var, len); - if (BN_is_zero(in)) + if (BN_is_zero(in)) { BIO_printf(out, "\n\t0x00"); - else { + } else { int i, l; l = BN_bn2bin(in, buffer); @@ -1164,6 +1203,7 @@ void print_bignum_var(BIO *out, const BIGNUM *in, const char *var, } BIO_printf(out, "\n };\n"); } + void print_array(BIO *out, const char* title, int len, const unsigned char* d) { int i; @@ -1197,8 +1237,9 @@ X509_STORE *setup_verify(const char *CAfile, const char *CApath, int noCAfile, i BIO_printf(bio_err, "Error loading file %s\n", CAfile); goto end; } - } else + } else { X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT); + } } if (CApath != NULL || !noCApath) { @@ -1210,8 +1251,9 @@ X509_STORE *setup_verify(const char *CAfile, const char *CApath, int noCAfile, i BIO_printf(bio_err, "Error loading directory %s\n", CApath); goto end; } - } else + } else { X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); + } } ERR_clear_error(); @@ -1242,7 +1284,7 @@ ENGINE *setup_engine(const char *engine, int debug) ENGINE *e = NULL; #ifndef OPENSSL_NO_ENGINE - if (engine) { + if (engine != NULL) { if (strcmp(engine, "auto") == 0) { BIO_printf(bio_err, "enabling auto ENGINE support\n"); ENGINE_register_all_complete(); @@ -1297,7 +1339,7 @@ static int index_serial_cmp(const OPENSSL_CSTRING *a, for (aa = a[DB_serial]; *aa == '0'; aa++) ; for (bb = b[DB_serial]; *bb == '0'; bb++) ; - return (strcmp(aa, bb)); + return strcmp(aa, bb); } static int index_name_qual(char **a) @@ -1312,7 +1354,7 @@ static unsigned long index_name_hash(const OPENSSL_CSTRING *a) int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b) { - return (strcmp(a[DB_name], b[DB_name])); + return strcmp(a[DB_name], b[DB_name]); } static IMPLEMENT_LHASH_HASH_FN(index_serial, OPENSSL_CSTRING) @@ -1363,7 +1405,7 @@ BIGNUM *load_serial(const char *serialfile, int create, ASN1_INTEGER **retai) err: BIO_free(in); ASN1_INTEGER_free(ai); - return (ret); + return ret; } int save_serial(const char *serialfile, const char *suffix, const BIGNUM *serial, @@ -1413,7 +1455,7 @@ int save_serial(const char *serialfile, const char *suffix, const BIGNUM *serial err: BIO_free_all(out); ASN1_INTEGER_free(ai); - return (ret); + return ret; } int rotate_serial(const char *serialfile, const char *new_suffix, @@ -1464,15 +1506,11 @@ int rand_serial(BIGNUM *b, ASN1_INTEGER *ai) BIGNUM *btmp; int ret = 0; - if (b) - btmp = b; - else - btmp = BN_new(); - + btmp = b == NULL ? BN_new() : b; if (btmp == NULL) return 0; - if (!BN_pseudo_rand(btmp, SERIAL_RAND_BITS, 0, 0)) + if (!BN_rand(btmp, SERIAL_RAND_BITS, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY)) goto error; if (ai && !BN_to_ASN1_INTEGER(btmp, ai)) goto error; @@ -1848,8 +1886,9 @@ static void nodes_print(const char *name, STACK_OF(X509_POLICY_NODE) *nodes) node = sk_X509_POLICY_NODE_value(nodes, i); X509_POLICY_NODE_print(bio_err, node, 2); } - } else + } else { BIO_puts(bio_err, " \n"); + } } void policies_print(X509_STORE_CTX *ctx) @@ -1892,10 +1931,11 @@ unsigned char *next_protos_parse(size_t *outlen, const char *in) OPENSSL_free(out); return NULL; } - out[start] = i - start; + out[start] = (unsigned char)(i - start); start = i + 1; - } else + } else { out[i + 1] = in[i]; + } } *outlen = len + 1; @@ -2118,7 +2158,7 @@ double app_tminterval(int stop, int usertime) ret = (__int64)(tmstop.QuadPart - tmstart.QuadPart) * 1e-7; } - return (ret); + return ret; } #elif defined(OPENSSL_SYSTEM_VXWORKS) # include @@ -2154,7 +2194,7 @@ double app_tminterval(int stop, int usertime) else ret = (now - tmstart) / (double)sysClkRateGet(); # endif - return (ret); + return ret; } #elif defined(OPENSSL_SYSTEM_VMS) @@ -2188,7 +2228,7 @@ double app_tminterval(int stop, int usertime) else ret = (now - tmstart) / (double)(CLK_TCK); - return (ret); + return ret; } #elif defined(_SC_CLK_TCK) /* by means of unistd.h */ @@ -2204,14 +2244,14 @@ double app_tminterval(int stop, int usertime) if (usertime) now = rus.tms_utime; - if (stop == TM_START) + if (stop == TM_START) { tmstart = now; - else { + } else { long int tck = sysconf(_SC_CLK_TCK); ret = (now - tmstart) / (double)tck; } - return (ret); + return ret; } #else @@ -2336,12 +2376,12 @@ int raw_read_stdin(void *buf, int siz) { DWORD n; if (ReadFile(GetStdHandle(STD_INPUT_HANDLE), buf, siz, &n, NULL)) - return (n); + return n; else - return (-1); + return -1; } #elif defined(__VMS) -#include +# include int raw_read_stdin(void *buf, int siz) { @@ -2359,9 +2399,9 @@ int raw_write_stdout(const void *buf, int siz) { DWORD n; if (WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), buf, siz, &n, NULL)) - return (n); + return n; else - return (-1); + return -1; } #else int raw_write_stdout(const void *buf, int siz) @@ -2388,14 +2428,26 @@ BIO *dup_bio_in(int format) BIO_NOCLOSE | (istext(format) ? BIO_FP_TEXT : 0)); } +static BIO_METHOD *prefix_method = NULL; + BIO *dup_bio_out(int format) { BIO *b = BIO_new_fp(stdout, BIO_NOCLOSE | (istext(format) ? BIO_FP_TEXT : 0)); + void *prefix = NULL; + #ifdef OPENSSL_SYS_VMS if (istext(format)) b = BIO_push(BIO_new(BIO_f_linebuffer()), b); #endif + + if (istext(format) && (prefix = getenv("HARNESS_OSSL_PREFIX")) != NULL) { + if (prefix_method == NULL) + prefix_method = apps_bf_prefix(); + b = BIO_push(BIO_new(prefix_method), b); + BIO_ctrl(b, PREFIX_CTRL_SET_PREFIX, 0, prefix); + } + return b; } @@ -2410,6 +2462,12 @@ BIO *dup_bio_err(int format) return b; } +void destroy_prefix_method() +{ + BIO_meth_free(prefix_method); + prefix_method = NULL; +} + void unbuffer(FILE *fp) { /* @@ -2636,15 +2694,23 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, if (X509_gmtime_adj(X509_getm_notBefore(x), 0) == NULL) return 0; } else { - if (!ASN1_TIME_set_string(X509_getm_notBefore(x), startdate)) + if (!ASN1_TIME_set_string_X509(X509_getm_notBefore(x), startdate)) return 0; } if (enddate == NULL) { if (X509_time_adj_ex(X509_getm_notAfter(x), days, 0, NULL) == NULL) return 0; - } else if (!ASN1_TIME_set_string(X509_getm_notAfter(x), enddate)) { + } else if (!ASN1_TIME_set_string_X509(X509_getm_notAfter(x), enddate)) { return 0; } return 1; } + +void make_uppercase(char *string) +{ + int i; + + for (i = 0; string[i] != '\0'; i++) + string[i] = toupper((unsigned char)string[i]); +} diff --git a/apps/apps.h b/apps/apps.h index f91faf8c..daaef369 100644 --- a/apps/apps.h +++ b/apps/apps.h @@ -10,17 +10,14 @@ #ifndef HEADER_APPS_H # define HEADER_APPS_H -# include "e_os.h" -# if defined(__unix) || defined(__unix__) -# include /* struct timeval for DTLS */ -# endif +# include "e_os.h" /* struct timeval for DTLS */ +# include "internal/nelem.h" # include # include # include # include # include -# include # include # include # include @@ -40,27 +37,38 @@ */ #define _UC(c) ((unsigned char)(c)) -int app_RAND_load_file(const char *file, int dont_warn); -int app_RAND_write_file(const char *file); -/* - * When `file' is NULL, use defaults. `bio_e' is for error messages. - */ -void app_RAND_allow_write_file(void); -long app_RAND_load_files(char *file); /* `file' is a list of files to read, - * separated by LIST_SEPARATOR_CHAR - * (see e_os.h). The string is - * destroyed! */ +void app_RAND_load_conf(CONF *c, const char *section); +void app_RAND_write(void); extern char *default_config_file; extern BIO *bio_in; extern BIO *bio_out; extern BIO *bio_err; +extern const unsigned char tls13_aes128gcmsha256_id[]; +extern const unsigned char tls13_aes256gcmsha384_id[]; +extern BIO_ADDR *ourpeer; + +BIO_METHOD *apps_bf_prefix(void); +/* + * The control used to set the prefix with BIO_ctrl() + * We make it high enough so the chance of ever clashing with the BIO library + * remains unlikely for the foreseeable future and beyond. + */ +#define PREFIX_CTRL_SET_PREFIX (1 << 15) +/* + * apps_bf_prefix() returns a dynamically created BIO_METHOD, which we + * need to destroy at some point. When created internally, it's stored + * in an internal pointer which can be freed with the following function + */ +void destroy_prefix_method(void); + BIO *dup_bio_in(int format); BIO *dup_bio_out(int format); BIO *dup_bio_err(int format); BIO *bio_open_owner(const char *filename, int format, int private); BIO *bio_open_default(const char *filename, char mode, int format); BIO *bio_open_default_quiet(const char *filename, char mode, int format); +CONF *app_load_config_bio(BIO *in, const char *filename); CONF *app_load_config(const char *filename); CONF *app_load_config_quiet(const char *filename); int app_load_modules(const CONF *config); @@ -175,7 +183,7 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, case OPT_V_ALLOW_PROXY_CERTS /* - * Common "extended"? options. + * Common "extended validation" options. */ # define OPT_X_ENUM \ OPT_X__FIRST=1000, \ @@ -210,18 +218,21 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, # define OPT_S_ENUM \ OPT_S__FIRST=3000, \ OPT_S_NOSSL3, OPT_S_NOTLS1, OPT_S_NOTLS1_1, OPT_S_NOTLS1_2, \ - OPT_S_BUGS, OPT_S_NO_COMP, OPT_S_NOTICKET, \ + OPT_S_NOTLS1_3, OPT_S_BUGS, OPT_S_NO_COMP, OPT_S_NOTICKET, \ OPT_S_SERVERPREF, OPT_S_LEGACYRENEG, OPT_S_LEGACYCONN, \ - OPT_S_ONRESUMP, OPT_S_NOLEGACYCONN, OPT_S_STRICT, OPT_S_SIGALGS, \ - OPT_S_CLIENTSIGALGS, OPT_S_CURVES, OPT_S_NAMEDCURVE, OPT_S_CIPHER, \ - OPT_S_DEBUGBROKE, OPT_S_COMP, OPT_S_MINPROTO, OPT_S_MAXPROTO, \ - OPT_S_NO_RENEGOTIATION, OPT_S__LAST + OPT_S_ONRESUMP, OPT_S_NOLEGACYCONN, OPT_S_ALLOW_NO_DHE_KEX, \ + OPT_S_PRIORITIZE_CHACHA, \ + OPT_S_STRICT, OPT_S_SIGALGS, OPT_S_CLIENTSIGALGS, OPT_S_GROUPS, \ + OPT_S_CURVES, OPT_S_NAMEDCURVE, OPT_S_CIPHER, \ + OPT_S_RECORD_PADDING, OPT_S_DEBUGBROKE, OPT_S_COMP, \ + OPT_S_NO_RENEGOTIATION, OPT_S_NO_MIDDLEBOX, OPT_S__LAST # define OPT_S_OPTIONS \ {"no_ssl3", OPT_S_NOSSL3, '-',"Just disable SSLv3" }, \ {"no_tls1", OPT_S_NOTLS1, '-', "Just disable TLSv1"}, \ {"no_tls1_1", OPT_S_NOTLS1_1, '-', "Just disable TLSv1.1" }, \ {"no_tls1_2", OPT_S_NOTLS1_2, '-', "Just disable TLSv1.2"}, \ + {"no_tls1_3", OPT_S_NOTLS1_3, '-', "Just disable TLSv1.3"}, \ {"bugs", OPT_S_BUGS, '-', "Turn on SSL bug compatibility"}, \ {"no_comp", OPT_S_NO_COMP, '-', "Disable SSL/TLS compression (default)" }, \ {"comp", OPT_S_COMP, '-', "Use SSL/TLS-level compression" }, \ @@ -238,6 +249,10 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, "Disallow session resumption on renegotiation"}, \ {"no_legacy_server_connect", OPT_S_NOLEGACYCONN, '-', \ "Disallow initial connection to servers that don't support RI"}, \ + {"allow_no_dhe_kex", OPT_S_ALLOW_NO_DHE_KEX, '-', \ + "In TLSv1.3 allow non-(ec)dhe based key exchange on resumption"}, \ + {"prioritize_chacha", OPT_S_PRIORITIZE_CHACHA, '-', \ + "Prioritize ChaCha ciphers when preferred by clients"}, \ {"strict", OPT_S_STRICT, '-', \ "Enforce strict certificate checks as per TLS standard"}, \ {"sigalgs", OPT_S_SIGALGS, 's', \ @@ -245,15 +260,19 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, {"client_sigalgs", OPT_S_CLIENTSIGALGS, 's', \ "Signature algorithms to support for client certificate" \ " authentication (colon-separated list)" }, \ + {"groups", OPT_S_GROUPS, 's', \ + "Groups to advertise (colon-separated list)" }, \ {"curves", OPT_S_CURVES, 's', \ - "Elliptic curves to advertise (colon-separated list)" }, \ + "Groups to advertise (colon-separated list)" }, \ {"named_curve", OPT_S_NAMEDCURVE, 's', \ "Elliptic curve used for ECDHE (server-side only)" }, \ {"cipher", OPT_S_CIPHER, 's', "Specify cipher list to be used"}, \ - {"min_protocol", OPT_S_MINPROTO, 's', "Specify the minimum protocol version to be used"}, \ - {"max_protocol", OPT_S_MAXPROTO, 's', "Specify the maximum protocol version to be used"}, \ + {"record_padding", OPT_S_RECORD_PADDING, 's', \ + "Block size to pad TLS 1.3 records to."}, \ {"debug_broken_protocol", OPT_S_DEBUGBROKE, '-', \ - "Perform all sorts of protocol violations for testing purposes"} + "Perform all sorts of protocol violations for testing purposes"}, \ + {"no_middlebox", OPT_S_NO_MIDDLEBOX, '-', "Disable TLSv1.3 middlebox compat mode" } + # define OPT_S_CASES \ OPT_S__FIRST: case OPT_S__LAST: break; \ @@ -261,6 +280,7 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, case OPT_S_NOTLS1: \ case OPT_S_NOTLS1_1: \ case OPT_S_NOTLS1_2: \ + case OPT_S_NOTLS1_3: \ case OPT_S_BUGS: \ case OPT_S_NO_COMP: \ case OPT_S_COMP: \ @@ -270,20 +290,37 @@ int set_cert_times(X509 *x, const char *startdate, const char *enddate, case OPT_S_LEGACYCONN: \ case OPT_S_ONRESUMP: \ case OPT_S_NOLEGACYCONN: \ + case OPT_S_ALLOW_NO_DHE_KEX: \ + case OPT_S_PRIORITIZE_CHACHA: \ case OPT_S_STRICT: \ case OPT_S_SIGALGS: \ case OPT_S_CLIENTSIGALGS: \ + case OPT_S_GROUPS: \ case OPT_S_CURVES: \ case OPT_S_NAMEDCURVE: \ case OPT_S_CIPHER: \ - case OPT_S_MINPROTO: \ - case OPT_S_MAXPROTO: \ + case OPT_S_RECORD_PADDING: \ case OPT_S_NO_RENEGOTIATION: \ - case OPT_S_DEBUGBROKE + case OPT_S_DEBUGBROKE: \ + case OPT_S_NO_MIDDLEBOX #define IS_NO_PROT_FLAG(o) \ (o == OPT_S_NOSSL3 || o == OPT_S_NOTLS1 || o == OPT_S_NOTLS1_1 \ - || o == OPT_S_NOTLS1_2) + || o == OPT_S_NOTLS1_2 || o == OPT_S_NOTLS1_3) + +/* + * Random state options. + */ +# define OPT_R_ENUM \ + OPT_R__FIRST=1500, OPT_R_RAND, OPT_R_WRITERAND, OPT_R__LAST + +# define OPT_R_OPTIONS \ + {"rand", OPT_R_RAND, 's', "Load the file(s) into the random number generator"}, \ + {"writerand", OPT_R_WRITERAND, '>', "Write random data to the specified file"} + +# define OPT_R_CASES \ + OPT_R__FIRST: case OPT_R__LAST: break; \ + case OPT_R_RAND: case OPT_R_WRITERAND /* * Option parsing. @@ -296,7 +333,7 @@ typedef struct options_st { /* * value type: - no value (also the value zero), n number, p positive * number, u unsigned, l long, s string, < input file, > output file, - * f any format, F der/pem format , E der/pem/engine format identifier. + * f any format, F der/pem format, E der/pem/engine format identifier. * l, n and u include zero; p does not. */ int valtype; @@ -355,10 +392,10 @@ int opt_md(const char *name, const EVP_MD **mdp); char *opt_arg(void); char *opt_flag(void); char *opt_unknown(void); -char *opt_reset(void); char **opt_rest(void); int opt_num_rest(void); int opt_verify(int i, X509_VERIFY_PARAM *vpm); +int opt_rand(int i); void opt_help(const OPTIONS * list); int opt_format_error(const char *s, unsigned long flags); @@ -391,6 +428,7 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_data); int setup_ui_method(void); void destroy_ui_method(void); +const UI_METHOD *get_ui_method(void); int chopup_args(ARGS *arg, char *buf); # ifdef HEADER_X509_H @@ -401,6 +439,8 @@ void print_name(BIO *out, const char *title, X509_NAME *nm, void print_bignum_var(BIO *, const BIGNUM *, const char*, int, unsigned char *); void print_array(BIO *, const char *, int, const unsigned char *); +int set_nameopt(const char *arg); +unsigned long get_nameopt(void); int set_cert_ex(unsigned long *flags, const char *arg); int set_name_ex(unsigned long *flags, const char *arg); int set_ext_copy(int *copy_type, const char *arg); @@ -458,9 +498,10 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, * disabled */ # define DB_NUMBER 6 -# define DB_TYPE_REV 'R' -# define DB_TYPE_EXP 'E' -# define DB_TYPE_VAL 'V' +# define DB_TYPE_REV 'R' /* Revoked */ +# define DB_TYPE_EXP 'E' /* Expired */ +# define DB_TYPE_VAL 'V' /* Valid ; inserted with: ca ... -valid */ +# define DB_TYPE_SUSP 'S' /* Suspended */ typedef struct db_attr_st { int unique_subject; @@ -490,8 +531,6 @@ int index_name_cmp(const OPENSSL_CSTRING *a, const OPENSSL_CSTRING *b); int parse_yesno(const char *str, int def); X509_NAME *parse_name(const char *str, long chtype, int multirdn); -int args_verify(char ***pargs, int *pargc, - int *badarg, X509_VERIFY_PARAM **pm); void policies_print(X509_STORE_CTX *ctx); int bio_to_mem(unsigned char **out, int maxlen, BIO *in); int pkey_ctrl_string(EVP_PKEY_CTX *ctx, const char *value); @@ -503,9 +542,9 @@ int do_X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts); int do_X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md, STACK_OF(OPENSSL_STRING) *sigopts); -# ifndef OPENSSL_NO_PSK + extern char *psk_key; -# endif + unsigned char *next_protos_parse(size_t *outlen, const char *in); @@ -546,7 +585,12 @@ void store_setup_crl_download(X509_STORE *st); # define APP_PASS_LEN 1024 -# define SERIAL_RAND_BITS 64 +/* + * IETF RFC 5280 says serial number must be <= 20 bytes. Use 159 bits + * so that the first bit will never be one, so that the DER encoding + * rules won't force a leading octet. + */ +# define SERIAL_RAND_BITS 159 int app_isdir(const char *); int app_access(const char *, int flag); @@ -559,6 +603,8 @@ int raw_write_stdout(const void *, int); # define TM_STOP 1 double app_tminterval(int stop, int usertime); +void make_uppercase(char *string); + typedef struct verify_options_st { int depth; int quiet; @@ -568,6 +614,4 @@ typedef struct verify_options_st { extern VERIFY_CB_ARGS verify_args; -# include "progs.h" - #endif diff --git a/apps/asn1pars.c b/apps/asn1pars.c index 1ac261c7..a391e0a6 100644 --- a/apps/asn1pars.c +++ b/apps/asn1pars.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,28 +7,26 @@ * https://www.openssl.org/source/license.html */ -/* - * A nice addition from Dr Stephen Henson to add the - * -strparse option which parses nested binary structures - */ - #include #include #include #include "apps.h" +#include "progs.h" #include #include #include #include +#include typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_IN, OPT_OUT, OPT_INDENT, OPT_NOOUT, OPT_OID, OPT_OFFSET, OPT_LENGTH, OPT_DUMP, OPT_DLIMIT, - OPT_STRPARSE, OPT_GENSTR, OPT_GENCONF, OPT_STRICTPEM + OPT_STRPARSE, OPT_GENSTR, OPT_GENCONF, OPT_STRICTPEM, + OPT_ITEM } OPTION_CHOICE; -OPTIONS asn1parse_options[] = { +const OPTIONS asn1parse_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "input format - one of DER PEM"}, {"in", OPT_IN, '<', "input file"}, @@ -49,6 +47,7 @@ OPTIONS asn1parse_options[] = { {OPT_MORE_STR, 0, 0, "(-inform will be ignored)"}, {"strictpem", OPT_STRICTPEM, 0, "do not attempt base64 decode outside PEM markers"}, + {"item", OPT_ITEM, 's', "item to parse and print"}, {NULL} }; @@ -71,6 +70,7 @@ int asn1parse_main(int argc, char **argv) unsigned char *tmpbuf; unsigned int length = 0; OPTION_CHOICE o; + const ASN1_ITEM *it = NULL; prog = opt_init(argc, argv, asn1parse_options); @@ -134,6 +134,22 @@ int asn1parse_main(int argc, char **argv) strictpem = 1; informat = FORMAT_PEM; break; + case OPT_ITEM: + it = ASN1_ITEM_lookup(opt_arg()); + if (it == NULL) { + size_t tmp; + + BIO_printf(bio_err, "Unknown item name %s\n", opt_arg()); + BIO_puts(bio_err, "Supported types:\n"); + for (tmp = 0;; tmp++) { + it = ASN1_ITEM_get(tmp); + if (it == NULL) + break; + BIO_printf(bio_err, " %s\n", it->sname); + } + goto end; + } + break; } } argc = opt_num_rest(); @@ -174,9 +190,7 @@ int asn1parse_main(int argc, char **argv) ERR_print_errors(bio_err); goto end; } - } - - else { + } else { if (informat == FORMAT_PEM) { BIO *tmp; @@ -253,18 +267,31 @@ int asn1parse_main(int argc, char **argv) if ((length == 0) || ((long)length > num)) length = (unsigned int)num; - if (derout) { + if (derout != NULL) { if (BIO_write(derout, str + offset, length) != (int)length) { BIO_printf(bio_err, "Error writing output\n"); ERR_print_errors(bio_err); goto end; } } - if (!noout && - !ASN1_parse_dump(bio_out, &(str[offset]), length, - indent, dump)) { - ERR_print_errors(bio_err); - goto end; + if (!noout) { + const unsigned char *p = str + offset; + + if (it != NULL) { + ASN1_VALUE *value = ASN1_item_d2i(NULL, &p, length, it); + if (value == NULL) { + BIO_printf(bio_err, "Error parsing item %s\n", it->sname); + ERR_print_errors(bio_err); + goto end; + } + ASN1_item_print(bio_out, value, 0, it, NULL); + ASN1_item_free(value, it); + } else { + if (!ASN1_parse_dump(bio_out, p, length, indent, dump)) { + ERR_print_errors(bio_err); + goto end; + } + } } ret = 0; end: @@ -280,7 +307,7 @@ int asn1parse_main(int argc, char **argv) OPENSSL_free(str); ASN1_TYPE_free(at); sk_OPENSSL_STRING_free(osk); - return (ret); + return ret; } static int do_generate(char *genstr, const char *genconf, BUF_MEM *buf) @@ -290,12 +317,12 @@ static int do_generate(char *genstr, const char *genconf, BUF_MEM *buf) unsigned char *p; ASN1_TYPE *atyp = NULL; - if (genconf) { + if (genconf != NULL) { if ((cnf = app_load_config(genconf)) == NULL) goto err; - if (!genstr) + if (genstr == NULL) genstr = NCONF_get_string(cnf, "default", "asn1"); - if (!genstr) { + if (genstr == NULL) { BIO_printf(bio_err, "Can't find 'asn1' in '%s'\n", genconf); goto err; } @@ -305,7 +332,7 @@ static int do_generate(char *genstr, const char *genconf, BUF_MEM *buf) NCONF_free(cnf); cnf = NULL; - if (!atyp) + if (atyp == NULL) return -1; len = i2d_ASN1_TYPE(atyp, NULL); diff --git a/apps/bf_prefix.c b/apps/bf_prefix.c new file mode 100644 index 00000000..bae3c91b --- /dev/null +++ b/apps/bf_prefix.c @@ -0,0 +1,177 @@ +/* + * 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 + */ + +#include +#include +#include +#include +#include "apps.h" + +static int prefix_write(BIO *b, const char *out, size_t outl, + size_t *numwritten); +static int prefix_read(BIO *b, char *buf, size_t size, size_t *numread); +static int prefix_puts(BIO *b, const char *str); +static int prefix_gets(BIO *b, char *str, int size); +static long prefix_ctrl(BIO *b, int cmd, long arg1, void *arg2); +static int prefix_create(BIO *b); +static int prefix_destroy(BIO *b); +static long prefix_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); + +static BIO_METHOD *prefix_meth = NULL; + +BIO_METHOD *apps_bf_prefix(void) +{ + if (prefix_meth == NULL) { + if ((prefix_meth = + BIO_meth_new(BIO_TYPE_FILTER, "Prefix filter")) == NULL + || !BIO_meth_set_create(prefix_meth, prefix_create) + || !BIO_meth_set_destroy(prefix_meth, prefix_destroy) + || !BIO_meth_set_write_ex(prefix_meth, prefix_write) + || !BIO_meth_set_read_ex(prefix_meth, prefix_read) + || !BIO_meth_set_puts(prefix_meth, prefix_puts) + || !BIO_meth_set_gets(prefix_meth, prefix_gets) + || !BIO_meth_set_ctrl(prefix_meth, prefix_ctrl) + || !BIO_meth_set_callback_ctrl(prefix_meth, prefix_callback_ctrl)) { + BIO_meth_free(prefix_meth); + prefix_meth = NULL; + } + } + return prefix_meth; +} + +typedef struct prefix_ctx_st { + char *prefix; + int linestart; /* flag to indicate we're at the line start */ +} PREFIX_CTX; + +static int prefix_create(BIO *b) +{ + PREFIX_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx)); + + if (ctx == NULL) + return 0; + + ctx->prefix = NULL; + ctx->linestart = 1; + BIO_set_data(b, ctx); + BIO_set_init(b, 1); + return 1; +} + +static int prefix_destroy(BIO *b) +{ + PREFIX_CTX *ctx = BIO_get_data(b); + + OPENSSL_free(ctx->prefix); + OPENSSL_free(ctx); + return 1; +} + +static int prefix_read(BIO *b, char *in, size_t size, size_t *numread) +{ + return BIO_read_ex(BIO_next(b), in, size, numread); +} + +static int prefix_write(BIO *b, const char *out, size_t outl, + size_t *numwritten) +{ + PREFIX_CTX *ctx = BIO_get_data(b); + + if (ctx == NULL) + return 0; + + /* If no prefix is set or if it's empty, we've got nothing to do here */ + if (ctx->prefix == NULL || *ctx->prefix == '\0') { + /* We do note if what comes next will be a new line, though */ + if (outl > 0) + ctx->linestart = (out[outl-1] == '\n'); + return BIO_write_ex(BIO_next(b), out, outl, numwritten); + } + + *numwritten = 0; + + while (outl > 0) { + size_t i; + char c; + + /* If we know that we're at the start of the line, output the prefix */ + if (ctx->linestart) { + size_t dontcare; + + if (!BIO_write_ex(BIO_next(b), ctx->prefix, strlen(ctx->prefix), + &dontcare)) + return 0; + ctx->linestart = 0; + } + + /* Now, go look for the next LF, or the end of the string */ + for (i = 0, c = '\0'; i < outl && (c = out[i]) != '\n'; i++) + continue; + if (c == '\n') + i++; + + /* Output what we found so far */ + while (i > 0) { + size_t num = 0; + + if (!BIO_write_ex(BIO_next(b), out, i, &num)) + return 0; + out += num; + outl -= num; + *numwritten += num; + i -= num; + } + + /* If we found a LF, what follows is a new line, so take note */ + if (c == '\n') + ctx->linestart = 1; + } + + return 1; +} + +static long prefix_ctrl(BIO *b, int cmd, long num, void *ptr) +{ + long ret = 0; + + switch (cmd) { + case PREFIX_CTRL_SET_PREFIX: + { + PREFIX_CTX *ctx = BIO_get_data(b); + + if (ctx == NULL) + break; + + OPENSSL_free(ctx->prefix); + ctx->prefix = OPENSSL_strdup((const char *)ptr); + ret = ctx->prefix != NULL; + } + break; + default: + if (BIO_next(b) != NULL) + ret = BIO_ctrl(BIO_next(b), cmd, num, ptr); + break; + } + return ret; +} + +static long prefix_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) +{ + return BIO_callback_ctrl(BIO_next(b), cmd, fp); +} + +static int prefix_gets(BIO *b, char *buf, int size) +{ + return BIO_gets(BIO_next(b), buf, size); +} + +static int prefix_puts(BIO *b, const char *str) +{ + return BIO_write(b, str, strlen(str)); +} diff --git a/apps/build.info b/apps/build.info index e2ddd2b5..e7243733 100644 --- a/apps/build.info +++ b/apps/build.info @@ -1,21 +1,27 @@ {- our $tsget_name = $config{target} =~ /^(VC|vms)-/ ? "tsget.pl" : "tsget"; our @apps_openssl_src = - ( qw(openssl.c - asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dhparam.c - dsa.c dsaparam.c ec.c ecparam.c enc.c engine.c errstr.c gendsa.c - genpkey.c genrsa.c nseq.c ocsp.c passwd.c pkcs12.c pkcs7.c pkcs8.c - pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c rsautl.c - s_client.c s_server.c s_time.c sess_id.c smime.c speed.c spkac.c - srp.c ts.c verify.c version.c x509.c rehash.c - apps.c opt.c s_cb.c s_socket.c - app_rand.c), - split(/\s+/, $target{apps_aux_src}) ); + qw(openssl.c + asn1pars.c ca.c ciphers.c cms.c crl.c crl2p7.c dgst.c dhparam.c + dsa.c dsaparam.c ec.c ecparam.c enc.c engine.c errstr.c gendsa.c + genpkey.c genrsa.c nseq.c ocsp.c passwd.c pkcs12.c pkcs7.c pkcs8.c + pkey.c pkeyparam.c pkeyutl.c prime.c rand.c req.c rsa.c rsautl.c + s_client.c s_server.c s_time.c sess_id.c smime.c speed.c spkac.c + srp.c ts.c verify.c version.c x509.c rehash.c storeutl.c); + our @apps_lib_src = + ( qw(apps.c opt.c s_cb.c s_socket.c app_rand.c bf_prefix.c), + split(/\s+/, $target{apps_aux_src}) ); + our @apps_init_src = split(/\s+/, $target{apps_init_src}); "" -} IF[{- !$disabled{apps} -}] + LIBS_NO_INST=libapps.a + SOURCE[libapps.a]={- join(" ", @apps_lib_src) -} + INCLUDE[libapps.a]=.. ../include + PROGRAMS=openssl + SOURCE[openssl]={- join(" ", @apps_init_src) -} SOURCE[openssl]={- join(" ", @apps_openssl_src) -} INCLUDE[openssl]=.. ../include - DEPEND[openssl]=../libssl + DEPEND[openssl]=libapps.a ../libssl {- join("\n ", map { (my $x = $_) =~ s|\.c$|.o|; "DEPEND[$x]=progs.h" } @apps_openssl_src) -} diff --git a/apps/ca.c b/apps/ca.c index d474a2b6..2819fead 100644 --- a/apps/ca.c +++ b/apps/ca.c @@ -6,9 +6,6 @@ * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ - -/* The PPKI stuff has been donated by Jeff Barber */ - #include #include #include @@ -28,27 +25,24 @@ #ifndef W_OK # ifdef OPENSSL_SYS_VMS -# if defined(__DECC) -# include -# else -# include -# endif +# include # elif !defined(OPENSSL_SYS_VXWORKS) && !defined(OPENSSL_SYS_WINDOWS) # include # endif #endif #include "apps.h" +#include "progs.h" #ifndef W_OK # define F_OK 0 -# define X_OK 1 # define W_OK 2 # define R_OK 4 #endif -#undef BSIZE -#define BSIZE 256 +#ifndef PATH_MAX +# define PATH_MAX 4096 +#endif #define BASE_SECTION "ca" @@ -60,6 +54,7 @@ #define ENV_NEW_CERTS_DIR "new_certs_dir" #define ENV_CERTIFICATE "certificate" #define ENV_SERIAL "serial" +#define ENV_RAND_SERIAL "rand_serial" #define ENV_CRLNUMBER "crlnumber" #define ENV_PRIVATE_KEY "private_key" #define ENV_DEFAULT_DAYS "default_days" @@ -82,12 +77,14 @@ #define ENV_DATABASE "database" /* Additional revocation information types */ - -#define REV_NONE 0 /* No additional information */ -#define REV_CRL_REASON 1 /* Value is CRL reason code */ -#define REV_HOLD 2 /* Value is hold instruction */ -#define REV_KEY_COMPROMISE 3 /* Value is cert key compromise time */ -#define REV_CA_COMPROMISE 4 /* Value is CA key compromise time */ +typedef enum { + REV_VALID = -1, /* Valid (not-revoked) status */ + REV_NONE = 0, /* No additional information */ + REV_CRL_REASON = 1, /* Value is CRL reason code */ + REV_HOLD = 2, /* Value is hold instruction */ + REV_KEY_COMPROMISE = 3, /* Value is cert key compromise time */ + REV_CA_COMPROMISE = 4 /* Value is CA key compromise time */ +} REVINFO_TYPE; static char *lookup_conf(const CONF *conf, const char *group, const char *tag); @@ -117,7 +114,6 @@ static int certify_spkac(X509 **xret, const char *infile, EVP_PKEY *pkey, const char *enddate, long days, const char *ext_sect, CONF *conf, int verbose, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy); -static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext); static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, const EVP_MD *dgst, STACK_OF(OPENSSL_STRING) *sigopts, STACK_OF(CONF_VALUE) *policy, CA_DB *db, BIGNUM *serial, @@ -126,13 +122,15 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, int batch, int verbose, X509_REQ *req, const char *ext_sect, CONF *conf, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy, int selfsign); -static int do_revoke(X509 *x509, CA_DB *db, int ext, char *extval); static int get_certificate_status(const char *ser_status, CA_DB *db); static int do_updatedb(CA_DB *db); static int check_time_format(const char *str); -char *make_revocation_str(int rev_type, char *rev_arg); -int make_revoked(X509_REVOKED *rev, const char *str); +static int do_revoke(X509 *x509, CA_DB *db, REVINFO_TYPE rev_type, + const char *extval); +static char *make_revocation_str(REVINFO_TYPE rev_type, const char *rev_arg); +static int make_revoked(X509_REVOKED *rev, const char *str); static int old_entry_print(const ASN1_OBJECT *obj, const ASN1_STRING *str); +static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext); static CONF *extconf = NULL; static int preserve = 0; @@ -148,11 +146,13 @@ typedef enum OPTION_choice { OPT_GENCRL, OPT_MSIE_HACK, OPT_CRLDAYS, OPT_CRLHOURS, OPT_CRLSEC, OPT_INFILES, OPT_SS_CERT, OPT_SPKAC, OPT_REVOKE, OPT_VALID, OPT_EXTENSIONS, OPT_EXTFILE, OPT_STATUS, OPT_UPDATEDB, OPT_CRLEXTS, - OPT_CRL_REASON, OPT_CRL_HOLD, OPT_CRL_COMPROMISE, - OPT_CRL_CA_COMPROMISE + OPT_RAND_SERIAL, + OPT_R_ENUM, + /* Do not change the order here; see related case statements below */ + OPT_CRL_REASON, OPT_CRL_HOLD, OPT_CRL_COMPROMISE, OPT_CRL_CA_COMPROMISE } OPTION_CHOICE; -OPTIONS ca_options[] = { +const OPTIONS ca_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"verbose", OPT_VERBOSE, '-', "Verbose output during processing"}, {"config", OPT_CONFIG, 's', "A config file"}, @@ -161,6 +161,8 @@ OPTIONS ca_options[] = { {"utf8", OPT_UTF8, '-', "Input characters are UTF8 (default ASCII)"}, {"create_serial", OPT_CREATE_SERIAL, '-', "If reading serial fails, create a new random serial"}, + {"rand_serial", OPT_RAND_SERIAL, '-', + "Always create a random serial; do not store it"}, {"multivalue-rdn", OPT_MULTIVALUE_RDN, '-', "Enable support for multivalued RDNs"}, {"startdate", OPT_STARTDATE, 's', "Cert notBefore, YYMMDDHHMMSSZ"}, @@ -212,6 +214,7 @@ OPTIONS ca_options[] = { "sets compromise time to val and the revocation reason to keyCompromise"}, {"crl_CA_compromise", OPT_CRL_CA_COMPROMISE, 's', "sets compromise time to val and the revocation reason to CACompromise"}, + OPT_R_OPTIONS, #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, #endif @@ -242,18 +245,21 @@ int ca_main(int argc, char **argv) char *outdir = NULL, *outfile = NULL, *rev_arg = NULL, *ser_status = NULL; const char *serialfile = NULL, *subj = NULL; char *prog, *startdate = NULL, *enddate = NULL; - char *dbfile = NULL, *f, *randfile = NULL; - char buf[3][BSIZE]; + char *dbfile = NULL, *f; + char new_cert[PATH_MAX]; + char tmp[10 + 1] = "\0"; char *const *pp; const char *p; + size_t outdirlen = 0; int create_ser = 0, free_key = 0, total = 0, total_done = 0; int batch = 0, default_op = 1, doupdatedb = 0, ext_copy = EXT_COPY_NONE; int keyformat = FORMAT_PEM, multirdn = 0, notext = 0, output_der = 0; int ret = 1, email_dn = 1, req = 0, verbose = 0, gencrl = 0, dorevoke = 0; - int i, j, rev_type = REV_NONE, selfsign = 0; + int rand_ser = 0, i, j, selfsign = 0; long crldays = 0, crlhours = 0, crlsec = 0, days = 0; - unsigned long chtype = MBSTRING_ASC, nameopt = 0, certopt = 0; + unsigned long chtype = MBSTRING_ASC, certopt = 0; X509 *x509 = NULL, *x509p = NULL, *x = NULL; + REVINFO_TYPE rev_type = REV_NONE; X509_REVOKED *r = NULL; OPTION_CHOICE o; @@ -292,6 +298,9 @@ opthelp: case OPT_UTF8: chtype = MBSTRING_UTF8; break; + case OPT_RAND_SERIAL: + rand_ser = 1; + break; case OPT_CREATE_SERIAL: create_ser = 1; break; @@ -323,6 +332,10 @@ opthelp: case OPT_PASSIN: passinarg = opt_arg(); break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; case OPT_KEY: key = opt_arg(); break; @@ -338,8 +351,7 @@ opthelp: case OPT_SIGOPT: if (sigopts == NULL) sigopts = sk_OPENSSL_STRING_new_null(); - if (sigopts == NULL - || !sk_OPENSSL_STRING_push(sigopts, opt_arg())) + if (sigopts == NULL || !sk_OPENSSL_STRING_push(sigopts, opt_arg())) goto end; break; case OPT_NOTEXT: @@ -403,21 +415,12 @@ opthelp: case OPT_CRLEXTS: crl_ext = opt_arg(); break; - case OPT_CRL_REASON: - rev_arg = opt_arg(); - rev_type = REV_CRL_REASON; - break; + case OPT_CRL_REASON: /* := REV_CRL_REASON */ case OPT_CRL_HOLD: - rev_arg = opt_arg(); - rev_type = REV_HOLD; - break; case OPT_CRL_COMPROMISE: - rev_arg = opt_arg(); - rev_type = REV_KEY_COMPROMISE; - break; case OPT_CRL_CA_COMPROMISE: rev_arg = opt_arg(); - rev_type = REV_CA_COMPROMISE; + rev_type = (o - OPT_CRL_REASON) + REV_CRL_REASON; break; case OPT_ENGINE: e = setup_engine(opt_arg(), 0); @@ -458,23 +461,20 @@ end_of_options: goto end; } - randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE"); - if (randfile == NULL) - ERR_clear_error(); - app_RAND_load_file(randfile, 0); + app_RAND_load_conf(conf, BASE_SECTION); f = NCONF_get_string(conf, section, STRING_MASK); - if (!f) + if (f == NULL) ERR_clear_error(); - if (f && !ASN1_STRING_set_default_mask_asc(f)) { + if (f != NULL && !ASN1_STRING_set_default_mask_asc(f)) { BIO_printf(bio_err, "Invalid global string mask setting %s\n", f); goto end; } if (chtype != MBSTRING_UTF8) { f = NCONF_get_string(conf, section, UTF8_IN); - if (!f) + if (f == NULL) ERR_clear_error(); else if (strcmp(f, "yes") == 0) chtype = MBSTRING_UTF8; @@ -482,9 +482,9 @@ end_of_options: db_attr.unique_subject = 1; p = NCONF_get_string(conf, section, ENV_UNIQUE_SUBJECT); - if (p) { + if (p != NULL) db_attr.unique_subject = parse_yesno(p, 1); - } else + else ERR_clear_error(); /*****************************************************************/ @@ -513,7 +513,7 @@ end_of_options: && (keyfile = lookup_conf(conf, section, ENV_PRIVATE_KEY)) == NULL) goto end; - if (!key) { + if (key == NULL) { free_key = 1; if (!app_passwd(passinarg, NULL, &key, NULL)) { BIO_printf(bio_err, "Error getting password\n"); @@ -521,12 +521,11 @@ end_of_options: } } pkey = load_key(keyfile, keyformat, 0, key, e, "CA private key"); - if (key) + if (key != NULL) OPENSSL_cleanse(key, strlen(key)); - if (pkey == NULL) { + if (pkey == NULL) /* load_key() has already printed an appropriate message */ goto end; - } /*****************************************************************/ /* we need a certificate */ @@ -561,37 +560,36 @@ end_of_options: f = NCONF_get_string(conf, section, ENV_NAMEOPT); - if (f) { - if (!set_name_ex(&nameopt, f)) { + if (f != NULL) { + if (!set_nameopt(f)) { BIO_printf(bio_err, "Invalid name options: \"%s\"\n", f); goto end; } default_op = 0; - } else { - nameopt = XN_FLAG_ONELINE; - ERR_clear_error(); } f = NCONF_get_string(conf, section, ENV_CERTOPT); - if (f) { + if (f != NULL) { if (!set_cert_ex(&certopt, f)) { BIO_printf(bio_err, "Invalid certificate options: \"%s\"\n", f); goto end; } default_op = 0; - } else + } else { ERR_clear_error(); + } f = NCONF_get_string(conf, section, ENV_EXTCOPY); - if (f) { + if (f != NULL) { if (!set_ext_copy(&ext_copy, f)) { BIO_printf(bio_err, "Invalid extension copy option: \"%s\"\n", f); goto end; } - } else + } else { ERR_clear_error(); + } /*****************************************************************/ /* lookup where to write new certificates */ @@ -666,6 +664,10 @@ end_of_options: goto end; } } + if (pp[DB_name][0] == '\0') { + BIO_printf(bio_err, "entry %d: bad Subject\n", i + 1); + goto end; + } } if (verbose) { TXT_DB_write(bio_out, db->db); @@ -698,8 +700,7 @@ end_of_options: goto end; if (verbose) - BIO_printf(bio_err, - "Done. %d entries marked as expired\n", i); + BIO_printf(bio_err, "Done. %d entries marked as expired\n", i); } } @@ -731,8 +732,7 @@ end_of_options: goto end; } - if (md == NULL - && (md = lookup_conf(conf, section, ENV_DEFAULT_MD)) == NULL) + if (md == NULL && (md = lookup_conf(conf, section, ENV_DEFAULT_MD)) == NULL) goto end; if (strcmp(md, "default") == 0) { @@ -766,21 +766,25 @@ end_of_options: if (verbose) BIO_printf(bio_err, "policy is %s\n", policy); - serialfile = lookup_conf(conf, section, ENV_SERIAL); - if (serialfile == NULL) - goto end; + if (NCONF_get_string(conf, section, ENV_RAND_SERIAL) != NULL) { + rand_ser = 1; + } else { + serialfile = lookup_conf(conf, section, ENV_SERIAL); + if (serialfile == NULL) + goto end; + } - if (!extconf) { + if (extconf == NULL) { /* * no '-extfile' option, so we look for extensions in the main * configuration file */ - if (!extensions) { + if (extensions == NULL) { extensions = NCONF_get_string(conf, section, ENV_EXTENSIONS); - if (!extensions) + if (extensions == NULL) ERR_clear_error(); } - if (extensions) { + if (extensions != NULL) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); @@ -796,12 +800,11 @@ end_of_options: } if (startdate == NULL) { - startdate = NCONF_get_string(conf, section, - ENV_DEFAULT_STARTDATE); + startdate = NCONF_get_string(conf, section, ENV_DEFAULT_STARTDATE); if (startdate == NULL) ERR_clear_error(); } - if (startdate && !ASN1_TIME_set_string(NULL, startdate)) { + if (startdate != NULL && !ASN1_TIME_set_string_X509(NULL, startdate)) { BIO_printf(bio_err, "start date is invalid, it should be YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ\n"); goto end; @@ -814,7 +817,7 @@ end_of_options: if (enddate == NULL) ERR_clear_error(); } - if (enddate && !ASN1_TIME_set_string(NULL, enddate)) { + if (enddate != NULL && !ASN1_TIME_set_string_X509(NULL, enddate)) { BIO_printf(bio_err, "end date is invalid, it should be YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ\n"); goto end; @@ -824,24 +827,30 @@ end_of_options: if (!NCONF_get_number(conf, section, ENV_DEFAULT_DAYS, &days)) days = 0; } - if (!enddate && (days == 0)) { - BIO_printf(bio_err, - "cannot lookup how many days to certify for\n"); + if (enddate == NULL && days == 0) { + BIO_printf(bio_err, "cannot lookup how many days to certify for\n"); goto end; } - if ((serial = load_serial(serialfile, create_ser, NULL)) == NULL) { - BIO_printf(bio_err, "error while loading serial number\n"); - goto end; - } - if (verbose) { - if (BN_is_zero(serial)) - BIO_printf(bio_err, "next serial number is 00\n"); - else { - if ((f = BN_bn2hex(serial)) == NULL) - goto end; - BIO_printf(bio_err, "next serial number is %s\n", f); - OPENSSL_free(f); + if (rand_ser) { + if ((serial = BN_new()) == NULL || !rand_serial(serial, NULL)) { + BIO_printf(bio_err, "error generating serial number\n"); + goto end; + } + } else { + if ((serial = load_serial(serialfile, create_ser, NULL)) == NULL) { + BIO_printf(bio_err, "error while loading serial number\n"); + goto end; + } + if (verbose) { + if (BN_is_zero(serial)) { + BIO_printf(bio_err, "next serial number is 00\n"); + } else { + if ((f = BN_bn2hex(serial)) == NULL) + goto end; + BIO_printf(bio_err, "next serial number is %s\n", f); + OPENSSL_free(f); + } } } @@ -859,7 +868,7 @@ end_of_options: j = certify_spkac(&x, spkac_file, pkey, x509, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, extensions, - conf, verbose, certopt, nameopt, default_op, + conf, verbose, certopt, get_nameopt(), default_op, ext_copy); if (j < 0) goto end; @@ -884,7 +893,7 @@ end_of_options: attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, extensions, - conf, verbose, certopt, nameopt, default_op, + conf, verbose, certopt, get_nameopt(), default_op, ext_copy); if (j < 0) goto end; @@ -904,7 +913,7 @@ end_of_options: j = certify(&x, infile, pkey, x509p, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, extensions, conf, verbose, - certopt, nameopt, default_op, ext_copy, selfsign); + certopt, get_nameopt(), default_op, ext_copy, selfsign); if (j < 0) goto end; if (j > 0) { @@ -923,7 +932,7 @@ end_of_options: j = certify(&x, argv[i], pkey, x509p, dgst, sigopts, attribs, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, extensions, conf, verbose, - certopt, nameopt, default_op, ext_copy, selfsign); + certopt, get_nameopt(), default_op, ext_copy, selfsign); if (j < 0) goto end; if (j > 0) { @@ -948,14 +957,13 @@ end_of_options: "\n%d out of %d certificate requests certified, commit? [y/n]", total_done, total); (void)BIO_flush(bio_err); - buf[0][0] = '\0'; - if (!fgets(buf[0], 10, stdin)) { - BIO_printf(bio_err, - "CERTIFICATION CANCELED: I/O error\n"); + tmp[0] = '\0'; + if (fgets(tmp, sizeof(tmp), stdin) == NULL) { + BIO_printf(bio_err, "CERTIFICATION CANCELED: I/O error\n"); ret = 0; goto end; } - if ((buf[0][0] != 'y') && (buf[0][0] != 'Y')) { + if (tmp[0] != 'y' && tmp[0] != 'Y') { BIO_printf(bio_err, "CERTIFICATION CANCELED\n"); ret = 0; goto end; @@ -965,45 +973,42 @@ end_of_options: BIO_printf(bio_err, "Write out database with %d new entries\n", sk_X509_num(cert_sk)); - if (!save_serial(serialfile, "new", serial, NULL)) + if (!rand_ser + && !save_serial(serialfile, "new", serial, NULL)) goto end; if (!save_index(dbfile, "new", db)) goto end; } + outdirlen = OPENSSL_strlcpy(new_cert, outdir, sizeof(new_cert)); +#ifndef OPENSSL_SYS_VMS + outdirlen = OPENSSL_strlcat(new_cert, "/", sizeof(new_cert)); +#endif + if (verbose) BIO_printf(bio_err, "writing new certificates\n"); + for (i = 0; i < sk_X509_num(cert_sk); i++) { BIO *Cout = NULL; X509 *xi = sk_X509_value(cert_sk, i); ASN1_INTEGER *serialNumber = X509_get_serialNumber(xi); - int k; - char *n; + const unsigned char *psn = ASN1_STRING_get0_data(serialNumber); + const int snl = ASN1_STRING_length(serialNumber); + const int filen_len = 2 * (snl > 0 ? snl : 1) + sizeof(".pem"); + char *n = new_cert + outdirlen; - j = ASN1_STRING_length(serialNumber); - p = (const char *)ASN1_STRING_get0_data(serialNumber); - - if (strlen(outdir) >= (size_t)(j ? BSIZE - j * 2 - 6 : BSIZE - 8)) { + if (outdirlen + filen_len > PATH_MAX) { BIO_printf(bio_err, "certificate file name too long\n"); goto end; } - strcpy(buf[2], outdir); + if (snl > 0) { + static const char HEX_DIGITS[] = "0123456789ABCDEF"; -#ifndef OPENSSL_SYS_VMS - OPENSSL_strlcat(buf[2], "/", sizeof(buf[2])); -#endif - - n = (char *)&(buf[2][strlen(buf[2])]); - if (j > 0) { - for (k = 0; k < j; k++) { - if (n >= &(buf[2][sizeof(buf[2])])) - break; - BIO_snprintf(n, - &buf[2][0] + sizeof(buf[2]) - n, - "%02X", (unsigned char)*(p++)); - n += 2; + for (j = 0; j < snl; j++, psn++) { + *n++ = HEX_DIGITS[*psn >> 4]; + *n++ = HEX_DIGITS[*psn & 0x0F]; } } else { *(n++) = '0'; @@ -1013,13 +1018,13 @@ end_of_options: *(n++) = 'p'; *(n++) = 'e'; *(n++) = 'm'; - *n = '\0'; + *n = '\0'; /* closing new_cert */ if (verbose) - BIO_printf(bio_err, "writing %s\n", buf[2]); + BIO_printf(bio_err, "writing %s\n", new_cert); - Cout = BIO_new_file(buf[2], "w"); + Cout = BIO_new_file(new_cert, "w"); if (Cout == NULL) { - perror(buf[2]); + perror(new_cert); goto end; } write_new_certificate(Cout, xi, 0, notext); @@ -1042,20 +1047,19 @@ end_of_options: /*****************************************************************/ if (gencrl) { int crl_v2 = 0; - if (!crl_ext) { + if (crl_ext == NULL) { crl_ext = NCONF_get_string(conf, section, ENV_CRLEXT); - if (!crl_ext) + if (crl_ext == NULL) ERR_clear_error(); } - if (crl_ext) { + if (crl_ext != NULL) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); X509V3_set_nconf(&ctx, conf); if (!X509V3_EXT_add_nconf(conf, &ctx, crl_ext, NULL)) { BIO_printf(bio_err, - "Error Loading CRL extension section %s\n", - crl_ext); + "Error Loading CRL extension section %s\n", crl_ext); ret = 1; goto end; } @@ -1138,12 +1142,12 @@ end_of_options: /* Add any extensions asked for */ - if (crl_ext || crlnumberfile != NULL) { + if (crl_ext != NULL || crlnumberfile != NULL) { X509V3_CTX crlctx; X509V3_set_ctx(&crlctx, x509, NULL, NULL, crl, 0); X509V3_set_nconf(&crlctx, conf); - if (crl_ext) + if (crl_ext != NULL) if (!X509V3_EXT_CRL_add_nconf(conf, &crlctx, crl_ext, crl)) goto end; if (crlnumberfile != NULL) { @@ -1157,14 +1161,15 @@ end_of_options: goto end; } } - if (crl_ext || crl_v2) { + if (crl_ext != NULL || crl_v2) { if (!X509_CRL_set_version(crl, 1)) goto end; /* version 2 CRL */ } /* we have a CRL number that need updating */ if (crlnumberfile != NULL) - if (!save_serial(crlnumberfile, "new", crlnumber, NULL)) + if (!rand_ser + && !save_serial(crlnumberfile, "new", crlnumber, NULL)) goto end; BN_free(crlnumber); @@ -1191,7 +1196,7 @@ end_of_options: if (revcert == NULL) goto end; if (dorevoke == 2) - rev_type = -1; + rev_type = REV_VALID; j = do_revoke(revcert, db, rev_type, rev_arg); if (j <= 0) goto end; @@ -1206,17 +1211,16 @@ end_of_options: BIO_printf(bio_err, "Data Base Updated\n"); } } - /*****************************************************************/ ret = 0; + end: + if (ret) + ERR_print_errors(bio_err); BIO_free_all(Sout); BIO_free_all(out); BIO_free_all(in); sk_X509_pop_free(cert_sk, X509_free); - if (ret) - ERR_print_errors(bio_err); - app_RAND_write_file(randfile); if (free_key) OPENSSL_free(key); BN_free(serial); @@ -1229,7 +1233,7 @@ end_of_options: NCONF_free(conf); NCONF_free(extconf); release_engine(e); - return (ret); + return ret; } static char *lookup_conf(const CONF *conf, const char *section, const char *tag) @@ -1266,7 +1270,7 @@ static int certify(X509 **xret, const char *infile, EVP_PKEY *pkey, X509 *x509, goto end; } if (verbose) - X509_REQ_print(bio_err, req); + X509_REQ_print_ex(bio_err, req, nameopt, X509_FLAG_COMPAT); BIO_printf(bio_err, "Check that the request matches the signature\n"); @@ -1294,8 +1298,9 @@ static int certify(X509 **xret, const char *infile, EVP_PKEY *pkey, X509 *x509, "Signature did not match the certificate request\n"); ERR_print_errors(bio_err); goto end; - } else + } else { BIO_printf(bio_err, "Signature ok\n"); + } ok = do_body(xret, pkey, x509, dgst, sigopts, policy, db, serial, subj, chtype, multirdn, email_dn, startdate, enddate, days, batch, @@ -1305,7 +1310,7 @@ static int certify(X509 **xret, const char *infile, EVP_PKEY *pkey, X509 *x509, end: X509_REQ_free(req); BIO_free(in); - return (ok); + return ok; } static int certify_cert(X509 **xret, const char *infile, EVP_PKEY *pkey, X509 *x509, @@ -1343,8 +1348,9 @@ static int certify_cert(X509 **xret, const char *infile, EVP_PKEY *pkey, X509 *x ok = 0; BIO_printf(bio_err, "Signature did not match the certificate\n"); goto end; - } else + } else { BIO_printf(bio_err, "Signature ok\n"); + } if ((rreq = X509_to_X509_REQ(req, NULL, NULL)) == NULL) goto end; @@ -1357,7 +1363,7 @@ static int certify_cert(X509 **xret, const char *infile, EVP_PKEY *pkey, X509 *x end: X509_REQ_free(rreq); X509_free(req); - return (ok); + return ok; } static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, @@ -1369,13 +1375,12 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, CONF *lconf, unsigned long certopt, unsigned long nameopt, int default_op, int ext_copy, int selfsign) { - X509_NAME *name = NULL, *CAname = NULL, *subject = NULL; + X509_NAME *name = NULL, *CAname = NULL, *subject = NULL, *dn_subject = NULL; const ASN1_TIME *tm; ASN1_STRING *str, *str2; ASN1_OBJECT *obj; X509 *ret = NULL; - X509_NAME_ENTRY *ne; - X509_NAME_ENTRY *tne, *push; + X509_NAME_ENTRY *ne, *tne; EVP_PKEY *pktmp; int ok = -1, i, j, last, nid; const char *p; @@ -1400,49 +1405,48 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, } if (default_op) - BIO_printf(bio_err, - "The Subject's Distinguished Name is as follows\n"); + BIO_printf(bio_err, "The Subject's Distinguished Name is as follows\n"); name = X509_REQ_get_subject_name(req); + if (X509_NAME_entry_count(name) == 0) { + BIO_printf(bio_err, "Error: The supplied Subject is empty\n"); + goto end; + } for (i = 0; i < X509_NAME_entry_count(name); i++) { ne = X509_NAME_get_entry(name, i); str = X509_NAME_ENTRY_get_data(ne); obj = X509_NAME_ENTRY_get_object(ne); + nid = OBJ_obj2nid(obj); if (msie_hack) { /* assume all type should be strings */ - nid = OBJ_obj2nid(X509_NAME_ENTRY_get_object(ne)); if (str->type == V_ASN1_UNIVERSALSTRING) ASN1_UNIVERSALSTRING_to_string(str); - if ((str->type == V_ASN1_IA5STRING) && - (nid != NID_pkcs9_emailAddress)) + if (str->type == V_ASN1_IA5STRING && nid != NID_pkcs9_emailAddress) str->type = V_ASN1_T61STRING; - if ((nid == NID_pkcs9_emailAddress) && - (str->type == V_ASN1_PRINTABLESTRING)) + if (nid == NID_pkcs9_emailAddress + && str->type == V_ASN1_PRINTABLESTRING) str->type = V_ASN1_IA5STRING; } /* If no EMAIL is wanted in the subject */ - if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && (!email_dn)) + if (nid == NID_pkcs9_emailAddress && !email_dn) continue; /* check some things */ - if ((OBJ_obj2nid(obj) == NID_pkcs9_emailAddress) && - (str->type != V_ASN1_IA5STRING)) { + if (nid == NID_pkcs9_emailAddress && str->type != V_ASN1_IA5STRING) { BIO_printf(bio_err, "\nemailAddress type needs to be of type IA5STRING\n"); goto end; } - if ((str->type != V_ASN1_BMPSTRING) - && (str->type != V_ASN1_UTF8STRING)) { + if (str->type != V_ASN1_BMPSTRING && str->type != V_ASN1_UTF8STRING) { j = ASN1_PRINTABLE_type(str->data, str->length); - if (((j == V_ASN1_T61STRING) && - (str->type != V_ASN1_T61STRING)) || - ((j == V_ASN1_IA5STRING) && - (str->type == V_ASN1_PRINTABLESTRING))) { + if ((j == V_ASN1_T61STRING && str->type != V_ASN1_T61STRING) || + (j == V_ASN1_IA5STRING && str->type == V_ASN1_PRINTABLESTRING)) + { BIO_printf(bio_err, "\nThe string contains characters that are illegal for the ASN.1 type\n"); goto end; @@ -1480,6 +1484,8 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, last = -1; for (;;) { + X509_NAME_ENTRY *push = NULL; + /* lookup the object in the supplied name list */ j = X509_NAME_get_index_by_OBJ(name, obj, last); if (j < 0) { @@ -1492,7 +1498,6 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, last = j; /* depending on the 'policy', decide what to do. */ - push = NULL; if (strcmp(cv->value, "optional") == 0) { if (tne != NULL) push = tne; @@ -1502,8 +1507,9 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, "The %s field needed to be supplied and was missing\n", cv->name); goto end; - } else + } else { push = tne; + } } else if (strcmp(cv->value, "match") == 0) { int last2; @@ -1521,8 +1527,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, if ((j < 0) && (last2 == -1)) { BIO_printf(bio_err, "The %s field does not exist in the CA certificate,\n" - "the 'policy' is misconfigured\n", - cv->name); + "the 'policy' is misconfigured\n", cv->name); goto end; } if (j >= 0) { @@ -1568,124 +1573,25 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, goto end; } - /* We are now totally happy, lets make and sign the certificate */ - if (verbose) + if (X509_NAME_entry_count(subject) == 0) { BIO_printf(bio_err, - "Everything appears to be ok, creating and signing the certificate\n"); - - if ((ret = X509_new()) == NULL) + "Error: After applying policy the Subject is empty\n"); goto end; - -#ifdef X509_V3 - /* Make it an X509 v3 certificate. */ - if (!X509_set_version(ret, 2)) - goto end; -#endif - - if (BN_to_ASN1_INTEGER(serial, X509_get_serialNumber(ret)) == NULL) - goto end; - if (selfsign) { - if (!X509_set_issuer_name(ret, subject)) - goto end; - } else { - if (!X509_set_issuer_name(ret, X509_get_subject_name(x509))) - goto end; - } - - if (!set_cert_times(ret, startdate, enddate, days)) - goto end; - - if (enddate != NULL) { - int tdays; - - if (!ASN1_TIME_diff(&tdays, NULL, NULL, X509_get0_notAfter(ret))) - goto end; - days = tdays; - } - - if (!X509_set_subject_name(ret, subject)) - goto end; - - pktmp = X509_REQ_get0_pubkey(req); - i = X509_set_pubkey(ret, pktmp); - if (!i) - goto end; - - /* Lets add the extensions, if there are any */ - if (ext_sect) { - X509V3_CTX ctx; - - /* Initialize the context structure */ - if (selfsign) - X509V3_set_ctx(&ctx, ret, ret, req, NULL, 0); - else - X509V3_set_ctx(&ctx, x509, ret, req, NULL, 0); - - if (extconf) { - if (verbose) - BIO_printf(bio_err, "Extra configuration file found\n"); - - /* Use the extconf configuration db LHASH */ - X509V3_set_nconf(&ctx, extconf); - - /* Test the structure (needed?) */ - /* X509V3_set_ctx_test(&ctx); */ - - /* Adds exts contained in the configuration file */ - if (!X509V3_EXT_add_nconf(extconf, &ctx, ext_sect, ret)) { - BIO_printf(bio_err, - "ERROR: adding extensions in section %s\n", - ext_sect); - ERR_print_errors(bio_err); - goto end; - } - if (verbose) - BIO_printf(bio_err, - "Successfully added extensions from file.\n"); - } else if (ext_sect) { - /* We found extensions to be set from config file */ - X509V3_set_nconf(&ctx, lconf); - - if (!X509V3_EXT_add_nconf(lconf, &ctx, ext_sect, ret)) { - BIO_printf(bio_err, - "ERROR: adding extensions in section %s\n", - ext_sect); - ERR_print_errors(bio_err); - goto end; - } - - if (verbose) - BIO_printf(bio_err, - "Successfully added extensions from config\n"); - } - } - - /* Copy extensions from request (if any) */ - - if (!copy_extensions(ret, req, ext_copy)) { - BIO_printf(bio_err, "ERROR: adding extensions from request\n"); - ERR_print_errors(bio_err); - goto end; - } - - { - const STACK_OF(X509_EXTENSION) *exts = X509_get0_extensions(ret); - - if (exts != NULL && sk_X509_EXTENSION_num(exts) > 0) - /* Make it an X509 v3 certificate. */ - if (!X509_set_version(ret, 2)) - goto end; } if (verbose) BIO_printf(bio_err, "The subject name appears to be ok, checking data base for clashes\n"); - /* Build the correct Subject if no e-mail is wanted in the subject. */ - if (!email_dn) { - X509_NAME_ENTRY *tmpne; - X509_NAME *dn_subject; + /* + * Build the correct Subject if no e-mail is wanted in the subject. + * And add it later on because of the method extensions are added (altName) + */ + if (email_dn) { + dn_subject = subject; + } else { + X509_NAME_ENTRY *tmpne; /* * Its best to dup the subject DN and then delete any email addresses * because this retains its structure. @@ -1701,18 +1607,6 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, X509_NAME_delete_entry(dn_subject, i); X509_NAME_ENTRY_free(tmpne); } - - if (!X509_set_subject_name(ret, dn_subject)) { - X509_NAME_free(dn_subject); - goto end; - } - X509_NAME_free(dn_subject); - } - - row[DB_name] = X509_NAME_oneline(X509_get_subject_name(ret), NULL, 0); - if (row[DB_name] == NULL) { - BIO_printf(bio_err, "Memory allocation failure\n"); - goto end; } if (BN_is_zero(serial)) @@ -1724,20 +1618,6 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, goto end; } - if (row[DB_name][0] == '\0') { - /* - * An empty subject! We'll use the serial number instead. If - * unique_subject is in use then we don't want different entries with - * empty subjects matching each other. - */ - OPENSSL_free(row[DB_name]); - row[DB_name] = OPENSSL_strdup(row[DB_serial]); - if (row[DB_name] == NULL) { - BIO_printf(bio_err, "Memory allocation failure\n"); - goto end; - } - } - if (db->attributes.unique_subject) { OPENSSL_STRING *crow = row; @@ -1796,6 +1676,121 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, goto end; } + /* We are now totally happy, lets make and sign the certificate */ + if (verbose) + BIO_printf(bio_err, + "Everything appears to be ok, creating and signing the certificate\n"); + + if ((ret = X509_new()) == NULL) + goto end; + +#ifdef X509_V3 + /* Make it an X509 v3 certificate. */ + if (!X509_set_version(ret, 2)) + goto end; +#endif + + if (BN_to_ASN1_INTEGER(serial, X509_get_serialNumber(ret)) == NULL) + goto end; + if (selfsign) { + if (!X509_set_issuer_name(ret, subject)) + goto end; + } else { + if (!X509_set_issuer_name(ret, X509_get_subject_name(x509))) + goto end; + } + + if (!set_cert_times(ret, startdate, enddate, days)) + goto end; + + if (enddate != NULL) { + int tdays; + + if (!ASN1_TIME_diff(&tdays, NULL, NULL, X509_get0_notAfter(ret))) + goto end; + days = tdays; + } + + if (!X509_set_subject_name(ret, subject)) + goto end; + + pktmp = X509_REQ_get0_pubkey(req); + i = X509_set_pubkey(ret, pktmp); + if (!i) + goto end; + + /* Lets add the extensions, if there are any */ + if (ext_sect) { + X509V3_CTX ctx; + + /* Initialize the context structure */ + if (selfsign) + X509V3_set_ctx(&ctx, ret, ret, req, NULL, 0); + else + X509V3_set_ctx(&ctx, x509, ret, req, NULL, 0); + + if (extconf != NULL) { + if (verbose) + BIO_printf(bio_err, "Extra configuration file found\n"); + + /* Use the extconf configuration db LHASH */ + X509V3_set_nconf(&ctx, extconf); + + /* Test the structure (needed?) */ + /* X509V3_set_ctx_test(&ctx); */ + + /* Adds exts contained in the configuration file */ + if (!X509V3_EXT_add_nconf(extconf, &ctx, ext_sect, ret)) { + BIO_printf(bio_err, + "ERROR: adding extensions in section %s\n", + ext_sect); + ERR_print_errors(bio_err); + goto end; + } + if (verbose) + BIO_printf(bio_err, + "Successfully added extensions from file.\n"); + } else if (ext_sect) { + /* We found extensions to be set from config file */ + X509V3_set_nconf(&ctx, lconf); + + if (!X509V3_EXT_add_nconf(lconf, &ctx, ext_sect, ret)) { + BIO_printf(bio_err, + "ERROR: adding extensions in section %s\n", + ext_sect); + ERR_print_errors(bio_err); + goto end; + } + + if (verbose) + BIO_printf(bio_err, + "Successfully added extensions from config\n"); + } + } + + /* Copy extensions from request (if any) */ + + if (!copy_extensions(ret, req, ext_copy)) { + BIO_printf(bio_err, "ERROR: adding extensions from request\n"); + ERR_print_errors(bio_err); + goto end; + } + + { + const STACK_OF(X509_EXTENSION) *exts = X509_get0_extensions(ret); + + if (exts != NULL && sk_X509_EXTENSION_num(exts) > 0) + /* Make it an X509 v3 certificate. */ + if (!X509_set_version(ret, 2)) + goto end; + } + + /* Set the right value for the noemailDN option */ + if (email_dn == 0) { + if (!X509_set_subject_name(ret, dn_subject)) + goto end; + } + if (!default_op) { BIO_printf(bio_err, "Certificate Details:\n"); /* @@ -1816,13 +1811,13 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, BIO_printf(bio_err, "Sign the certificate? [y/n]:"); (void)BIO_flush(bio_err); buf[0] = '\0'; - if (!fgets(buf, sizeof(buf) - 1, stdin)) { + if (fgets(buf, sizeof(buf), stdin) == NULL) { BIO_printf(bio_err, "CERTIFICATE WILL NOT BE CERTIFIED: I/O error\n"); ok = 0; goto end; } - if (!((buf[0] == 'y') || (buf[0] == 'Y'))) { + if (!(buf[0] == 'y' || buf[0] == 'Y')) { BIO_printf(bio_err, "CERTIFICATE WILL NOT BE CERTIFIED\n"); ok = 0; goto end; @@ -1837,7 +1832,7 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, if (!do_X509_sign(ret, pkey, dgst, sigopts)) goto end; - /* We now just add it to the database */ + /* We now just add it to the database as DB_TYPE_VAL('V') */ row[DB_type] = OPENSSL_strdup("V"); tm = X509_get0_notAfter(ret); row[DB_exp_date] = app_malloc(tm->length + 1, "row expdate"); @@ -1845,6 +1840,8 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, row[DB_exp_date][tm->length] = '\0'; row[DB_rev_date] = NULL; row[DB_file] = OPENSSL_strdup("unknown"); + row[DB_name] = X509_NAME_oneline(X509_get_subject_name(ret), NULL, 0); + if ((row[DB_type] == NULL) || (row[DB_exp_date] == NULL) || (row[DB_file] == NULL) || (row[DB_name] == NULL)) { BIO_printf(bio_err, "Memory allocation failure\n"); @@ -1864,23 +1861,24 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509, irow = NULL; ok = 1; end: - if (ok != 1) { + if (irow != NULL) { for (i = 0; i < DB_NUMBER; i++) OPENSSL_free(row[i]); + OPENSSL_free(irow); } - OPENSSL_free(irow); X509_NAME_free(CAname); X509_NAME_free(subject); + if (dn_subject != subject) + X509_NAME_free(dn_subject); if (ok <= 0) X509_free(ret); else *xret = ret; - return (ok); + return ok; } -static void write_new_certificate(BIO *bp, X509 *x, int output_der, - int notext) +static void write_new_certificate(BIO *bp, X509 *x, int output_der, int notext) { if (output_der) { @@ -1996,8 +1994,7 @@ static int certify_spkac(X509 **xret, const char *infile, EVP_PKEY *pkey, * Now extract the key from the SPKI structure. */ - BIO_printf(bio_err, - "Check that the SPKAC request matches the signature\n"); + BIO_printf(bio_err, "Check that the SPKAC request matches the signature\n"); if ((pktmp = NETSCAPE_SPKI_get_pubkey(spki)) == NULL) { BIO_printf(bio_err, "error unpacking SPKAC public key\n"); @@ -2025,7 +2022,7 @@ static int certify_spkac(X509 **xret, const char *infile, EVP_PKEY *pkey, NETSCAPE_SPKI_free(spki); X509_NAME_ENTRY_free(ne); - return (ok); + return ok; } static int check_time_format(const char *str) @@ -2033,7 +2030,8 @@ static int check_time_format(const char *str) return ASN1_TIME_set_string(NULL, str); } -static int do_revoke(X509 *x509, CA_DB *db, int type, char *value) +static int do_revoke(X509 *x509, CA_DB *db, REVINFO_TYPE rev_type, + const char *value) { const ASN1_TIME *tm = NULL; char *row[DB_NUMBER], **rrow, **irow; @@ -2052,11 +2050,6 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value) else row[DB_serial] = BN_bn2hex(bn); BN_free(bn); - if (row[DB_name] != NULL && row[DB_name][0] == '\0') { - /* Entries with empty Subjects actually use the serial number instead */ - OPENSSL_free(row[DB_name]); - row[DB_name] = OPENSSL_strdup(row[DB_serial]); - } if ((row[DB_name] == NULL) || (row[DB_serial] == NULL)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto end; @@ -2071,7 +2064,7 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value) "Adding Entry with serial number %s to DB for %s\n", row[DB_serial], row[DB_name]); - /* We now just add it to the database */ + /* We now just add it to the database as DB_TYPE_REV('V') */ row[DB_type] = OPENSSL_strdup("V"); tm = X509_get0_notAfter(x509); row[DB_exp_date] = app_malloc(tm->length + 1, "row exp_data"); @@ -2101,32 +2094,33 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value) row[i] = NULL; /* Revoke Certificate */ - if (type == -1) + if (rev_type == REV_VALID) ok = 1; else - ok = do_revoke(x509, db, type, value); + /* Retry revocation after DB insertion */ + ok = do_revoke(x509, db, rev_type, value); goto end; } else if (index_name_cmp_noconst(row, rrow)) { BIO_printf(bio_err, "ERROR:name does not match %s\n", row[DB_name]); goto end; - } else if (type == -1) { + } else if (rev_type == REV_VALID) { BIO_printf(bio_err, "ERROR:Already present, serial number %s\n", row[DB_serial]); goto end; - } else if (rrow[DB_type][0] == 'R') { + } else if (rrow[DB_type][0] == DB_TYPE_REV) { BIO_printf(bio_err, "ERROR:Already revoked, serial number %s\n", row[DB_serial]); goto end; } else { BIO_printf(bio_err, "Revoking Certificate %s.\n", rrow[DB_serial]); - rev_str = make_revocation_str(type, value); + rev_str = make_revocation_str(rev_type, value); if (!rev_str) { BIO_printf(bio_err, "Error in revocation arguments\n"); goto end; } - rrow[DB_type][0] = 'R'; + rrow[DB_type][0] = DB_TYPE_REV; rrow[DB_type][1] = '\0'; rrow[DB_rev_date] = rev_str; } @@ -2134,7 +2128,7 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value) end: for (i = 0; i < DB_NUMBER; i++) OPENSSL_free(row[i]); - return (ok); + return ok; } static int get_certificate_status(const char *serial, CA_DB *db) @@ -2153,7 +2147,7 @@ static int get_certificate_status(const char *serial, CA_DB *db) if (serial_len % 2) { /* * Set the first char to 0 - */ ; + */ row[DB_serial][0] = '0'; /* Copy String from serial to row[DB_serial] */ @@ -2166,8 +2160,7 @@ static int get_certificate_status(const char *serial, CA_DB *db) } /* Make it Upper Case */ - for (i = 0; row[DB_serial][i] != '\0'; i++) - row[DB_serial][i] = toupper((unsigned char)row[DB_serial][i]); + make_uppercase(row[DB_serial]); ok = 1; @@ -2177,19 +2170,19 @@ static int get_certificate_status(const char *serial, CA_DB *db) BIO_printf(bio_err, "Serial %s not present in db.\n", row[DB_serial]); ok = -1; goto end; - } else if (rrow[DB_type][0] == 'V') { + } else if (rrow[DB_type][0] == DB_TYPE_VAL) { BIO_printf(bio_err, "%s=Valid (%c)\n", row[DB_serial], rrow[DB_type][0]); goto end; - } else if (rrow[DB_type][0] == 'R') { + } else if (rrow[DB_type][0] == DB_TYPE_REV) { BIO_printf(bio_err, "%s=Revoked (%c)\n", row[DB_serial], rrow[DB_type][0]); goto end; - } else if (rrow[DB_type][0] == 'E') { + } else if (rrow[DB_type][0] == DB_TYPE_EXP) { BIO_printf(bio_err, "%s=Expired (%c)\n", row[DB_serial], rrow[DB_type][0]); goto end; - } else if (rrow[DB_type][0] == 'S') { + } else if (rrow[DB_type][0] == DB_TYPE_SUSP) { BIO_printf(bio_err, "%s=Suspended (%c)\n", row[DB_serial], rrow[DB_type][0]); goto end; @@ -2202,7 +2195,7 @@ static int get_certificate_status(const char *serial, CA_DB *db) for (i = 0; i < DB_NUMBER; i++) { OPENSSL_free(row[i]); } - return (ok); + return ok; } static int do_updatedb(CA_DB *db) @@ -2234,7 +2227,7 @@ static int do_updatedb(CA_DB *db) for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { rrow = sk_OPENSSL_PSTRING_value(db->db->data, i); - if (rrow[DB_type][0] == 'V') { + if (rrow[DB_type][0] == DB_TYPE_VAL) { /* ignore entries that are not valid */ if (strncmp(rrow[DB_exp_date], "49", 2) <= 0) db_y2k = 1; @@ -2244,14 +2237,14 @@ static int do_updatedb(CA_DB *db) if (db_y2k == a_y2k) { /* all on the same y2k side */ if (strcmp(rrow[DB_exp_date], a_tm_s) <= 0) { - rrow[DB_type][0] = 'E'; + rrow[DB_type][0] = DB_TYPE_EXP; rrow[DB_type][1] = '\0'; cnt++; BIO_printf(bio_err, "%s=Expired\n", rrow[DB_serial]); } } else if (db_y2k < a_y2k) { - rrow[DB_type][0] = 'E'; + rrow[DB_type][0] = DB_TYPE_EXP; rrow[DB_type][1] = '\0'; cnt++; @@ -2263,7 +2256,7 @@ static int do_updatedb(CA_DB *db) ASN1_UTCTIME_free(a_tm); OPENSSL_free(a_tm_s); - return (cnt); + return cnt; } static const char *crl_reasons[] = { @@ -2291,16 +2284,17 @@ static const char *crl_reasons[] = { * additional argument */ -char *make_revocation_str(int rev_type, char *rev_arg) +static char *make_revocation_str(REVINFO_TYPE rev_type, const char *rev_arg) { char *str; - const char *other = NULL; - const char *reason = NULL; + const char *reason = NULL, *other = NULL; ASN1_OBJECT *otmp; ASN1_UTCTIME *revtm = NULL; int i; + switch (rev_type) { case REV_NONE: + case REV_VALID: break; case REV_CRL_REASON: @@ -2318,7 +2312,6 @@ char *make_revocation_str(int rev_type, char *rev_arg) case REV_HOLD: /* Argument is an OID */ - otmp = OBJ_txt2obj(rev_arg, 0); ASN1_OBJECT_free(otmp); @@ -2333,7 +2326,6 @@ char *make_revocation_str(int rev_type, char *rev_arg) case REV_KEY_COMPROMISE: case REV_CA_COMPROMISE: - /* Argument is the key compromise time */ if (!ASN1_GENERALIZEDTIME_set_string(NULL, rev_arg)) { BIO_printf(bio_err, @@ -2348,7 +2340,6 @@ char *make_revocation_str(int rev_type, char *rev_arg) reason = "CAkeyTime"; break; - } revtm = X509_gmtime_adj(NULL, 0); @@ -2385,7 +2376,7 @@ char *make_revocation_str(int rev_type, char *rev_arg) * 2 OK and some extensions added (i.e. V2 CRL) */ -int make_revoked(X509_REVOKED *rev, const char *str) +static int make_revoked(X509_REVOKED *rev, const char *str) { char *tmp = NULL; int reason_code = -1; @@ -2535,9 +2526,9 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, goto end; } - if (reason_code == 7) + if (reason_code == 7) { reason_code = OCSP_REVOKED_STATUS_REMOVEFROMCRL; - else if (reason_code == 8) { /* Hold instruction */ + } else if (reason_code == 8) { /* Hold instruction */ if (!arg_str) { BIO_printf(bio_err, "missing hold instruction\n"); goto end; @@ -2546,8 +2537,7 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold, hold = OBJ_txt2obj(arg_str, 0); if (!hold) { - BIO_printf(bio_err, "invalid object identifier %s\n", - arg_str); + BIO_printf(bio_err, "invalid object identifier %s\n", arg_str); goto end; } if (phold) diff --git a/apps/ciphers.c b/apps/ciphers.c index e1b5b255..4e8ffd13 100644 --- a/apps/ciphers.c +++ b/apps/ciphers.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,22 +11,25 @@ #include #include #include "apps.h" +#include "progs.h" #include #include typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_STDNAME, + OPT_CONVERT, OPT_SSL3, OPT_TLS1, OPT_TLS1_1, OPT_TLS1_2, + OPT_TLS1_3, OPT_PSK, OPT_SRP, OPT_V, OPT_UPPER_V, OPT_S } OPTION_CHOICE; -OPTIONS ciphers_options[] = { +const OPTIONS ciphers_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"v", OPT_V, '-', "Verbose listing of the SSL/TLS ciphers"}, {"V", OPT_UPPER_V, '-', "Even more verbose"}, @@ -43,15 +46,17 @@ OPTIONS ciphers_options[] = { #ifndef OPENSSL_NO_TLS1_2 {"tls1_2", OPT_TLS1_2, '-', "TLS1.2 mode"}, #endif -#ifndef OPENSSL_NO_SSL_TRACE - {"stdname", OPT_STDNAME, '-', "Show standard cipher names"}, +#ifndef OPENSSL_NO_TLS1_3 + {"tls1_3", OPT_TLS1_3, '-', "TLS1.3 mode"}, #endif + {"stdname", OPT_STDNAME, '-', "Show standard cipher names"}, #ifndef OPENSSL_NO_PSK {"psk", OPT_PSK, '-', "include ciphersuites requiring PSK"}, #endif #ifndef OPENSSL_NO_SRP {"srp", OPT_SRP, '-', "include ciphersuites requiring SRP"}, #endif + {"convert", OPT_CONVERT, 's', "Convert standard name into OpenSSL name"}, {NULL} }; @@ -78,9 +83,7 @@ int ciphers_main(int argc, char **argv) STACK_OF(SSL_CIPHER) *sk = NULL; const SSL_METHOD *meth = TLS_server_method(); int ret = 1, i, verbose = 0, Verbose = 0, use_supported = 0; -#ifndef OPENSSL_NO_SSL_TRACE int stdname = 0; -#endif #ifndef OPENSSL_NO_PSK int psk = 0; #endif @@ -88,7 +91,7 @@ int ciphers_main(int argc, char **argv) int srp = 0; #endif const char *p; - char *ciphers = NULL, *prog; + char *ciphers = NULL, *prog, *convert = NULL; char buf[512]; OPTION_CHOICE o; int min_version = 0, max_version = 0; @@ -115,9 +118,10 @@ int ciphers_main(int argc, char **argv) use_supported = 1; break; case OPT_STDNAME: -#ifndef OPENSSL_NO_SSL_TRACE stdname = verbose = 1; -#endif + break; + case OPT_CONVERT: + convert = opt_arg(); break; case OPT_SSL3: min_version = SSL3_VERSION; @@ -135,6 +139,10 @@ int ciphers_main(int argc, char **argv) min_version = TLS1_2_VERSION; max_version = TLS1_2_VERSION; break; + case OPT_TLS1_3: + min_version = TLS1_3_VERSION; + max_version = TLS1_3_VERSION; + break; case OPT_PSK: #ifndef OPENSSL_NO_PSK psk = 1; @@ -155,6 +163,12 @@ int ciphers_main(int argc, char **argv) else if (argc != 0) goto opthelp; + if (convert != NULL) { + BIO_printf(bio_out, "OpenSSL cipher name: %s\n", + OPENSSL_cipher_name(convert)); + goto end; + } + ctx = SSL_CTX_new(meth); if (ctx == NULL) goto err; @@ -217,14 +231,12 @@ int ciphers_main(int argc, char **argv) else BIO_printf(bio_out, "0x%02X,0x%02X,0x%02X,0x%02X - ", id0, id1, id2, id3); /* whatever */ } -#ifndef OPENSSL_NO_SSL_TRACE if (stdname) { const char *nm = SSL_CIPHER_standard_name(c); if (nm == NULL) nm = "UNKNOWN"; BIO_printf(bio_out, "%s - ", nm); } -#endif BIO_puts(bio_out, SSL_CIPHER_description(c, buf, sizeof(buf))); } } @@ -238,5 +250,5 @@ int ciphers_main(int argc, char **argv) sk_SSL_CIPHER_free(sk); SSL_CTX_free(ctx); SSL_free(ssl); - return (ret); + return ret; } diff --git a/apps/cms.c b/apps/cms.c index 640f92eb..e9d760c9 100644 --- a/apps/cms.c +++ b/apps/cms.c @@ -12,6 +12,7 @@ #include #include #include "apps.h" +#include "progs.h" #ifndef OPENSSL_NO_CMS @@ -76,15 +77,16 @@ typedef enum OPTION_choice { OPT_RR_ALL, OPT_RR_FIRST, OPT_RCTFORM, OPT_CERTFILE, OPT_CAFILE, OPT_CAPATH, OPT_NOCAPATH, OPT_NOCAFILE,OPT_CONTENT, OPT_PRINT, OPT_SECRETKEY, OPT_SECRETKEYID, OPT_PWRI_PASSWORD, OPT_ECONTENT_TYPE, - OPT_RAND, OPT_PASSIN, OPT_TO, OPT_FROM, OPT_SUBJECT, OPT_SIGNER, OPT_RECIP, + OPT_PASSIN, OPT_TO, OPT_FROM, OPT_SUBJECT, OPT_SIGNER, OPT_RECIP, OPT_CERTSOUT, OPT_MD, OPT_INKEY, OPT_KEYFORM, OPT_KEYOPT, OPT_RR_FROM, OPT_RR_TO, OPT_AES128_WRAP, OPT_AES192_WRAP, OPT_AES256_WRAP, OPT_3DES_WRAP, OPT_ENGINE, + OPT_R_ENUM, OPT_V_ENUM, OPT_CIPHER } OPTION_CHOICE; -OPTIONS cms_options[] = { +const OPTIONS cms_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] cert.pem...\n"}, {OPT_HELP_STR, 1, '-', " cert.pem... recipient certs for encryption\n"}, @@ -146,14 +148,12 @@ OPTIONS cms_options[] = { "Do not load certificates from the default certificates directory"}, {"content", OPT_CONTENT, '<', "Supply or override content for detached signature"}, - {"print", OPT_PRINT, '-', + {"print", OPT_PRINT, '-', "For the -cmsout operation print out all fields of the CMS structure"}, {"secretkey", OPT_SECRETKEY, 's'}, {"secretkeyid", OPT_SECRETKEYID, 's'}, {"pwri_password", OPT_PWRI_PASSWORD, 's'}, {"econtent_type", OPT_ECONTENT_TYPE, 's'}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, {"to", OPT_TO, 's', "To address"}, {"from", OPT_FROM, 's', "From address"}, @@ -169,6 +169,7 @@ OPTIONS cms_options[] = { {"receipt_request_from", OPT_RR_FROM, 's'}, {"receipt_request_to", OPT_RR_TO, 's'}, {"", OPT_CIPHER, '-', "Any supported cipher"}, + OPT_R_OPTIONS, OPT_V_OPTIONS, {"aes128-wrap", OPT_AES128_WRAP, '-', "Use AES128 to wrap key"}, {"aes192-wrap", OPT_AES192_WRAP, '-', "Use AES192 to wrap key"}, @@ -202,16 +203,13 @@ int cms_main(int argc, char **argv) const char *CAfile = NULL, *CApath = NULL; char *certsoutfile = NULL; int noCAfile = 0, noCApath = 0; - char *infile = NULL, *outfile = NULL, *rctfile = NULL, *inrand = NULL; - char *passinarg = NULL, *passin = NULL, *signerfile = NULL, *recipfile = - NULL; + char *infile = NULL, *outfile = NULL, *rctfile = NULL; + char *passinarg = NULL, *passin = NULL, *signerfile = NULL, *recipfile = NULL; char *to = NULL, *from = NULL, *subject = NULL, *prog; cms_key_param *key_first = NULL, *key_param = NULL; - int flags = CMS_DETACHED, noout = 0, print = 0, keyidx = -1, vpmtouched = - 0; + int flags = CMS_DETACHED, noout = 0, print = 0, keyidx = -1, vpmtouched = 0; int informat = FORMAT_SMIME, outformat = FORMAT_SMIME; - int need_rand = 0, operation = 0, ret = 1, rr_print = 0, rr_allorfirst = - -1; + int operation = 0, ret = 1, rr_print = 0, rr_allorfirst = -1; int verify_retcode = 0, rctformat = FORMAT_SMIME, keyform = FORMAT_PEM; size_t secret_keylen = 0, secret_keyidlen = 0; unsigned char *pwri_pass = NULL, *pwri_tmp = NULL; @@ -449,10 +447,6 @@ int cms_main(int argc, char **argv) goto opthelp; } break; - case OPT_RAND: - inrand = opt_arg(); - need_rand = 1; - break; case OPT_ENGINE: e = setup_engine(opt_arg(), 0); break; @@ -477,7 +471,7 @@ int cms_main(int argc, char **argv) break; case OPT_SIGNER: /* If previous -signer argument add signer to list */ - if (signerfile) { + if (signerfile != NULL) { if (sksigners == NULL && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) goto end; @@ -494,7 +488,7 @@ int cms_main(int argc, char **argv) break; case OPT_INKEY: /* If previous -inkey argument add signer to list */ - if (keyfile) { + if (keyfile != NULL) { if (signerfile == NULL) { BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto end; @@ -525,8 +519,9 @@ int cms_main(int argc, char **argv) goto end; sk_X509_push(encerts, cert); cert = NULL; - } else + } else { recipfile = opt_arg(); + } break; case OPT_CIPHER: if (!opt_cipher(opt_unknown(), &cipher)) @@ -535,12 +530,12 @@ int cms_main(int argc, char **argv) case OPT_KEYOPT: keyidx = -1; if (operation == SMIME_ENCRYPT) { - if (encerts) + if (encerts != NULL) keyidx += sk_X509_num(encerts); } else { - if (keyfile || signerfile) + if (keyfile != NULL || signerfile != NULL) keyidx++; - if (skkeys) + if (skkeys != NULL) keyidx += sk_OPENSSL_STRING_num(skkeys); } if (keyidx < 0) { @@ -567,6 +562,10 @@ int cms_main(int argc, char **argv) goto end; vpmtouched++; break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; case OPT_3DES_WRAP: # ifndef OPENSSL_NO_DES wrap_cipher = EVP_des_ede3_wrap(); @@ -586,87 +585,77 @@ int cms_main(int argc, char **argv) argc = opt_num_rest(); argv = opt_rest(); - if (((rr_allorfirst != -1) || rr_from) && !rr_to) { + if ((rr_allorfirst != -1 || rr_from != NULL) && rr_to == NULL) { BIO_puts(bio_err, "No Signed Receipts Recipients\n"); goto opthelp; } - if (!(operation & SMIME_SIGNERS) && (rr_to || rr_from)) { + if (!(operation & SMIME_SIGNERS) && (rr_to != NULL || rr_from != NULL)) { BIO_puts(bio_err, "Signed receipts only allowed with -sign\n"); goto opthelp; } - if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners)) { + if (!(operation & SMIME_SIGNERS) && (skkeys != NULL || sksigners != NULL)) { BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); goto opthelp; } if (operation & SMIME_SIGNERS) { - if (keyfile && !signerfile) { + if (keyfile != NULL && signerfile == NULL) { BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto opthelp; } /* Check to see if any final signer needs to be appended */ - if (signerfile) { - if (!sksigners + if (signerfile != NULL) { + if (sksigners == NULL && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) goto end; sk_OPENSSL_STRING_push(sksigners, signerfile); - if (!skkeys && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) + if (skkeys == NULL && (skkeys = sk_OPENSSL_STRING_new_null()) == NULL) goto end; - if (!keyfile) + if (keyfile == NULL) keyfile = signerfile; sk_OPENSSL_STRING_push(skkeys, keyfile); } - if (!sksigners) { + if (sksigners == NULL) { BIO_printf(bio_err, "No signer certificate specified\n"); goto opthelp; } signerfile = NULL; keyfile = NULL; - need_rand = 1; - } - - else if (operation == SMIME_DECRYPT) { - if (!recipfile && !keyfile && !secret_key && !pwri_pass) { + } else if (operation == SMIME_DECRYPT) { + if (recipfile == NULL && keyfile == NULL + && secret_key == NULL && pwri_pass == NULL) { BIO_printf(bio_err, "No recipient certificate or key specified\n"); goto opthelp; } } else if (operation == SMIME_ENCRYPT) { - if (*argv == NULL && !secret_key && !pwri_pass && !encerts) { + if (*argv == NULL && secret_key == NULL + && pwri_pass == NULL && encerts == NULL) { BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); goto opthelp; } - need_rand = 1; - } else if (!operation) + } else if (!operation) { goto opthelp; + } if (!app_passwd(passinarg, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } - if (need_rand) { - app_RAND_load_file(NULL, (inrand != NULL)); - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - } - ret = 2; if (!(operation & SMIME_SIGNERS)) flags &= ~CMS_DETACHED; - if (!(operation & SMIME_OP)) { + if (!(operation & SMIME_OP)) if (flags & CMS_BINARY) outformat = FORMAT_BINARY; - } - if (!(operation & SMIME_IP)) { + if (!(operation & SMIME_IP)) if (flags & CMS_BINARY) informat = FORMAT_BINARY; - } if (operation == SMIME_ENCRYPT) { if (!cipher) { @@ -683,7 +672,7 @@ int cms_main(int argc, char **argv) goto end; } - if (*argv && !encerts) + if (*argv && encerts == NULL) if ((encerts = sk_X509_new_null()) == NULL) goto end; while (*argv) { @@ -696,7 +685,7 @@ int cms_main(int argc, char **argv) } } - if (certfile) { + if (certfile != NULL) { if (!load_certs(certfile, &other, FORMAT_PEM, NULL, "certificate file")) { ERR_print_errors(bio_err); @@ -704,7 +693,7 @@ int cms_main(int argc, char **argv) } } - if (recipfile && (operation == SMIME_DECRYPT)) { + if (recipfile != NULL && (operation == SMIME_DECRYPT)) { if ((recip = load_cert(recipfile, FORMAT_PEM, "recipient certificate file")) == NULL) { ERR_print_errors(bio_err); @@ -721,17 +710,18 @@ int cms_main(int argc, char **argv) } if (operation == SMIME_DECRYPT) { - if (!keyfile) + if (keyfile == NULL) keyfile = recipfile; } else if ((operation == SMIME_SIGN) || (operation == SMIME_SIGN_RECEIPT)) { - if (!keyfile) + if (keyfile == NULL) keyfile = signerfile; - } else + } else { keyfile = NULL; + } - if (keyfile) { + if (keyfile != NULL) { key = load_key(keyfile, keyform, 0, passin, e, "signing key file"); - if (!key) + if (key == NULL) goto end; } @@ -740,29 +730,29 @@ int cms_main(int argc, char **argv) goto end; if (operation & SMIME_IP) { - if (informat == FORMAT_SMIME) + if (informat == FORMAT_SMIME) { cms = SMIME_read_CMS(in, &indata); - else if (informat == FORMAT_PEM) + } else if (informat == FORMAT_PEM) { cms = PEM_read_bio_CMS(in, NULL, NULL, NULL); - else if (informat == FORMAT_ASN1) + } else if (informat == FORMAT_ASN1) { cms = d2i_CMS_bio(in, NULL); - else { + } else { BIO_printf(bio_err, "Bad input format for CMS file\n"); goto end; } - if (!cms) { + if (cms == NULL) { BIO_printf(bio_err, "Error reading S/MIME message\n"); goto end; } - if (contfile) { + if (contfile != NULL) { BIO_free(indata); if ((indata = BIO_new_file(contfile, "rb")) == NULL) { BIO_printf(bio_err, "Can't read content file %s\n", contfile); goto end; } } - if (certsoutfile) { + if (certsoutfile != NULL) { STACK_OF(X509) *allcerts; allcerts = CMS_get1_certs(cms); if (!save_certs(certsoutfile, allcerts)) { @@ -775,25 +765,25 @@ int cms_main(int argc, char **argv) } } - if (rctfile) { + if (rctfile != NULL) { char *rctmode = (rctformat == FORMAT_ASN1) ? "rb" : "r"; if ((rctin = BIO_new_file(rctfile, rctmode)) == NULL) { BIO_printf(bio_err, "Can't open receipt file %s\n", rctfile); goto end; } - if (rctformat == FORMAT_SMIME) + if (rctformat == FORMAT_SMIME) { rcms = SMIME_read_CMS(rctin, NULL); - else if (rctformat == FORMAT_PEM) + } else if (rctformat == FORMAT_PEM) { rcms = PEM_read_bio_CMS(rctin, NULL, NULL, NULL); - else if (rctformat == FORMAT_ASN1) + } else if (rctformat == FORMAT_ASN1) { rcms = d2i_CMS_bio(rctin, NULL); - else { + } else { BIO_printf(bio_err, "Bad input format for receipt\n"); goto end; } - if (!rcms) { + if (rcms == NULL) { BIO_printf(bio_err, "Error reading receipt\n"); goto end; } @@ -823,7 +813,7 @@ int cms_main(int argc, char **argv) int i; flags |= CMS_PARTIAL; cms = CMS_encrypt(NULL, in, cipher, flags); - if (!cms) + if (cms == NULL) goto end; for (i = 0; i < sk_X509_num(encerts); i++) { CMS_RecipientInfo *ri; @@ -837,9 +827,9 @@ int cms_main(int argc, char **argv) } } ri = CMS_add1_recipient_cert(cms, x, tflags); - if (!ri) + if (ri == NULL) goto end; - if (kparam) { + if (kparam != NULL) { EVP_PKEY_CTX *pctx; pctx = CMS_RecipientInfo_get0_pkey_ctx(ri); if (!cms_set_pkey_param(pctx, kparam->param)) @@ -853,7 +843,7 @@ int cms_main(int argc, char **argv) } } - if (secret_key) { + if (secret_key != NULL) { if (!CMS_add0_recipient_key(cms, NID_undef, secret_key, secret_keylen, secret_keyid, secret_keyidlen, @@ -863,13 +853,13 @@ int cms_main(int argc, char **argv) secret_key = NULL; secret_keyid = NULL; } - if (pwri_pass) { + if (pwri_pass != NULL) { pwri_tmp = (unsigned char *)OPENSSL_strdup((char *)pwri_pass); - if (!pwri_tmp) + if (pwri_tmp == NULL) goto end; - if (!CMS_add0_recipient_password(cms, - -1, NID_undef, NID_undef, - pwri_tmp, -1, NULL)) + if (CMS_add0_recipient_password(cms, + -1, NID_undef, NID_undef, + pwri_tmp, -1, NULL) == NULL) goto end; pwri_tmp = NULL; } @@ -886,11 +876,11 @@ int cms_main(int argc, char **argv) STACK_OF(CMS_SignerInfo) *sis; CMS_SignerInfo *si; sis = CMS_get0_SignerInfos(cms); - if (!sis) + if (sis == NULL) goto end; si = sk_CMS_SignerInfo_value(sis, 0); srcms = CMS_sign_receipt(si, signer, key, other, flags); - if (!srcms) + if (srcms == NULL) goto end; CMS_ContentInfo_free(cms); cms = srcms; @@ -908,21 +898,22 @@ int cms_main(int argc, char **argv) } flags |= CMS_PARTIAL; cms = CMS_sign(NULL, NULL, other, in, flags); - if (!cms) + if (cms == NULL) goto end; - if (econtent_type) + if (econtent_type != NULL) CMS_set1_eContentType(cms, econtent_type); - if (rr_to) { + if (rr_to != NULL) { rr = make_receipt_request(rr_to, rr_allorfirst, rr_from); - if (!rr) { + if (rr == NULL) { BIO_puts(bio_err, "Signed Receipt Request Creation Error\n"); goto end; } } - } else + } else { flags |= CMS_REUSE_DIGEST; + } for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) { CMS_SignerInfo *si; cms_key_param *kparam; @@ -931,12 +922,12 @@ int cms_main(int argc, char **argv) keyfile = sk_OPENSSL_STRING_value(skkeys, i); signer = load_cert(signerfile, FORMAT_PEM, "signer certificate"); - if (!signer) { + if (signer == NULL) { ret = 2; goto end; } key = load_key(keyfile, keyform, 0, passin, e, "signing key file"); - if (!key) { + if (key == NULL) { ret = 2; goto end; } @@ -947,15 +938,15 @@ int cms_main(int argc, char **argv) } } si = CMS_add1_signer(cms, signer, key, sign_md, tflags); - if (!si) + if (si == NULL) goto end; - if (kparam) { + if (kparam != NULL) { EVP_PKEY_CTX *pctx; pctx = CMS_SignerInfo_get0_pkey_ctx(si); if (!cms_set_pkey_param(pctx, kparam->param)) goto end; } - if (rr && !CMS_add1_ReceiptRequest(si, rr)) + if (rr != NULL && !CMS_add1_ReceiptRequest(si, rr)) goto end; X509_free(signer); signer = NULL; @@ -969,7 +960,7 @@ int cms_main(int argc, char **argv) } } - if (!cms) { + if (cms == NULL) { BIO_printf(bio_err, "Error creating CMS structure\n"); goto end; } @@ -979,7 +970,7 @@ int cms_main(int argc, char **argv) if (flags & CMS_DEBUG_DECRYPT) CMS_decrypt(cms, NULL, NULL, NULL, NULL, flags); - if (secret_key) { + if (secret_key != NULL) { if (!CMS_decrypt_set1_key(cms, secret_key, secret_keylen, secret_keyid, secret_keyidlen)) { @@ -988,14 +979,14 @@ int cms_main(int argc, char **argv) } } - if (key) { + if (key != NULL) { if (!CMS_decrypt_set1_pkey(cms, key, recip)) { BIO_puts(bio_err, "Error decrypting CMS using private key\n"); goto end; } } - if (pwri_pass) { + if (pwri_pass != NULL) { if (!CMS_decrypt_set1_password(cms, pwri_pass, -1)) { BIO_puts(bio_err, "Error decrypting CMS using password\n"); goto end; @@ -1013,9 +1004,9 @@ int cms_main(int argc, char **argv) if (!CMS_uncompress(cms, indata, out, flags)) goto end; } else if (operation == SMIME_DIGEST_VERIFY) { - if (CMS_digest_verify(cms, indata, out, flags) > 0) + if (CMS_digest_verify(cms, indata, out, flags) > 0) { BIO_printf(bio_err, "Verification successful\n"); - else { + } else { BIO_printf(bio_err, "Verification failure\n"); goto end; } @@ -1024,15 +1015,15 @@ int cms_main(int argc, char **argv) indata, out, flags)) goto end; } else if (operation == SMIME_VERIFY) { - if (CMS_verify(cms, other, store, indata, out, flags) > 0) + if (CMS_verify(cms, other, store, indata, out, flags) > 0) { BIO_printf(bio_err, "Verification successful\n"); - else { + } else { BIO_printf(bio_err, "Verification failure\n"); if (verify_retcode) ret = verify_err + 32; goto end; } - if (signerfile) { + if (signerfile != NULL) { STACK_OF(X509) *signers; signers = CMS_get0_signers(cms); if (!save_certs(signerfile, signers)) { @@ -1047,9 +1038,9 @@ int cms_main(int argc, char **argv) receipt_request_print(cms); } else if (operation == SMIME_VERIFY_RECEIPT) { - if (CMS_verify_receipt(rcms, cms, other, store, flags) > 0) + if (CMS_verify_receipt(rcms, cms, other, store, flags) > 0) { BIO_printf(bio_err, "Verification successful\n"); - else { + } else { BIO_printf(bio_err, "Verification failure\n"); goto end; } @@ -1068,11 +1059,11 @@ int cms_main(int argc, char **argv) ret = SMIME_write_CMS(out, cms, indata, flags); else ret = SMIME_write_CMS(out, cms, in, flags); - } else if (outformat == FORMAT_PEM) + } else if (outformat == FORMAT_PEM) { ret = PEM_write_bio_CMS_stream(out, cms, in, flags); - else if (outformat == FORMAT_ASN1) + } else if (outformat == FORMAT_ASN1) { ret = i2d_CMS_bio_stream(out, cms, in, flags); - else { + } else { BIO_printf(bio_err, "Bad output format for CMS file\n"); goto end; } @@ -1085,8 +1076,6 @@ int cms_main(int argc, char **argv) end: if (ret) ERR_print_errors(bio_err); - if (need_rand) - app_RAND_write_file(NULL); sk_X509_pop_free(encerts, X509_free); sk_X509_pop_free(other, X509_free); X509_VERIFY_PARAM_free(vpm); @@ -1119,17 +1108,17 @@ int cms_main(int argc, char **argv) BIO_free(indata); BIO_free_all(out); OPENSSL_free(passin); - return (ret); + return ret; } static int save_certs(char *signerfile, STACK_OF(X509) *signers) { int i; BIO *tmp; - if (!signerfile) + if (signerfile == NULL) return 1; tmp = BIO_new_file(signerfile, "w"); - if (!tmp) + if (tmp == NULL) return 0; for (i = 0; i < sk_X509_num(signers); i++) PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); @@ -1189,9 +1178,9 @@ static void receipt_request_print(CMS_ContentInfo *cms) si = sk_CMS_SignerInfo_value(sis, i); rv = CMS_get1_ReceiptRequest(si, &rr); BIO_printf(bio_err, "Signer %d:\n", i + 1); - if (rv == 0) + if (rv == 0) { BIO_puts(bio_err, " No Receipt Request\n"); - else if (rv < 0) { + } else if (rv < 0) { BIO_puts(bio_err, " Receipt Request Parse Error\n"); ERR_print_errors(bio_err); } else { @@ -1204,15 +1193,16 @@ static void receipt_request_print(CMS_ContentInfo *cms) id = (const char *)ASN1_STRING_get0_data(scid); BIO_dump_indent(bio_err, id, idlen, 4); BIO_puts(bio_err, " Receipts From"); - if (rlist) { + if (rlist != NULL) { BIO_puts(bio_err, " List:\n"); gnames_stack_print(rlist); - } else if (allorfirst == 1) + } else if (allorfirst == 1) { BIO_puts(bio_err, ": First Tier\n"); - else if (allorfirst == 0) + } else if (allorfirst == 0) { BIO_puts(bio_err, ": All\n"); - else + } else { BIO_printf(bio_err, " Unknown (%d)\n", allorfirst); + } BIO_puts(bio_err, " Receipts To:\n"); gnames_stack_print(rto); } @@ -1227,12 +1217,12 @@ static STACK_OF(GENERAL_NAMES) *make_names_stack(STACK_OF(OPENSSL_STRING) *ns) GENERAL_NAMES *gens = NULL; GENERAL_NAME *gen = NULL; ret = sk_GENERAL_NAMES_new_null(); - if (!ret) + if (ret == NULL) goto err; for (i = 0; i < sk_OPENSSL_STRING_num(ns); i++) { char *str = sk_OPENSSL_STRING_value(ns, i); gen = a2i_GENERAL_NAME(NULL, NULL, NULL, GEN_EMAIL, str, 0); - if (!gen) + if (gen == NULL) goto err; gens = GENERAL_NAMES_new(); if (gens == NULL) @@ -1261,14 +1251,15 @@ static CMS_ReceiptRequest *make_receipt_request(STACK_OF(OPENSSL_STRING) STACK_OF(GENERAL_NAMES) *rct_to = NULL, *rct_from = NULL; CMS_ReceiptRequest *rr; rct_to = make_names_stack(rr_to); - if (!rct_to) + if (rct_to == NULL) goto err; - if (rr_from) { + if (rr_from != NULL) { rct_from = make_names_stack(rr_from); - if (!rct_from) + if (rct_from == NULL) goto err; - } else + } else { rct_from = NULL; + } rr = CMS_ReceiptRequest_create0(NULL, -1, rr_allorfirst, rct_from, rct_to); return rr; diff --git a/apps/crl.c b/apps/crl.c index 06b6e5b9..031fada1 100644 --- a/apps/crl.c +++ b/apps/crl.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -26,7 +27,7 @@ typedef enum OPTION_choice { OPT_NOOUT, OPT_NAMEOPT, OPT_MD } OPTION_CHOICE; -OPTIONS crl_options[] = { +const OPTIONS crl_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format; default PEM"}, {"in", OPT_IN, '<', "Input file - default stdin"}, @@ -69,8 +70,6 @@ int crl_main(int argc, char **argv) X509_OBJECT *xobj = NULL; EVP_PKEY *pkey; const EVP_MD *digest = EVP_sha1(); - unsigned long nmflag = 0; - char nmflag_set = 0; char *infile = NULL, *outfile = NULL, *crldiff = NULL, *keyfile = NULL; const char *CAfile = NULL, *CApath = NULL, *prog; OPTION_CHOICE o; @@ -169,8 +168,7 @@ int crl_main(int argc, char **argv) badsig = 1; break; case OPT_NAMEOPT: - nmflag_set = 1; - if (!set_name_ex(&nmflag, opt_arg())) + if (!set_nameopt(opt_arg())) goto opthelp; break; case OPT_MD: @@ -182,9 +180,6 @@ int crl_main(int argc, char **argv) if (argc != 0) goto opthelp; - if (!nmflag_set) - nmflag = XN_FLAG_ONELINE; - x = load_crl(infile, informat); if (x == NULL) goto end; @@ -260,7 +255,7 @@ int crl_main(int argc, char **argv) for (i = 1; i <= num; i++) { if (issuer == i) { print_name(bio_out, "issuer=", X509_CRL_get_issuer(x), - nmflag); + get_nameopt()); } if (crlnumber == i) { ASN1_INTEGER *crlnum; @@ -319,7 +314,7 @@ int crl_main(int argc, char **argv) goto end; if (text) - X509_CRL_print(out, x); + X509_CRL_print_ex(out, x, get_nameopt()); if (noout) { ret = 0; @@ -343,5 +338,5 @@ int crl_main(int argc, char **argv) X509_CRL_free(x); X509_STORE_CTX_free(ctx); X509_STORE_free(store); - return (ret); + return ret; } diff --git a/apps/crl2p7.c b/apps/crl2p7.c index 9c5f79f9..88fabcb2 100644 --- a/apps/crl2p7.c +++ b/apps/crl2p7.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -25,7 +26,7 @@ typedef enum OPTION_choice { OPT_INFORM, OPT_OUTFORM, OPT_IN, OPT_OUT, OPT_NOCRL, OPT_CERTFILE } OPTION_CHOICE; -OPTIONS crl2pkcs7_options[] = { +const OPTIONS crl2pkcs7_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format - DER or PEM"}, {"outform", OPT_OUTFORM, 'F', "Output format - DER or PEM"}, @@ -131,7 +132,7 @@ int crl2pkcs7_main(int argc, char **argv) goto end; p7s->cert = cert_stack; - if (certflst) + if (certflst != NULL) for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) { certfile = sk_OPENSSL_STRING_value(certflst, i); if (add_certs_from_file(cert_stack, certfile) < 0) { @@ -162,7 +163,7 @@ int crl2pkcs7_main(int argc, char **argv) PKCS7_free(p7); X509_CRL_free(crl); - return (ret); + return ret; } /*- @@ -212,5 +213,5 @@ static int add_certs_from_file(STACK_OF(X509) *stack, char *certfile) /* never need to OPENSSL_free x */ BIO_free(in); sk_X509_INFO_free(sk); - return (ret); + return ret; } diff --git a/apps/ct_log_list.cnf b/apps/ct_log_list.cnf index 24348745..650aa22d 100644 --- a/apps/ct_log_list.cnf +++ b/apps/ct_log_list.cnf @@ -1,34 +1,9 @@ -enabled_logs=pilot,aviator,rocketeer,digicert,certly,izempe,symantec,venafi - -[pilot] -description = Google Pilot Log -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfahLEimAoz2t01p3uMziiLOl/fHTDM0YDOhBRuiBARsV4UvxG2LdNgoIGLrtCzWE0J5APC2em4JlvR8EEEFMoA== - -[aviator] -description = Google Aviator log -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1/TMabLkDpCjiupacAlP7xNi0I1JYP8bQFAHDG1xhtolSY1l4QgNRzRrvSe8liE+NPWHdjGxfx3JhTsN9x8/6Q== - -[rocketeer] -description = Google Rocketeer log -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEIFsYyDzBi7MxCAC/oJBXK7dHjG+1aLCOkHjpoHPqTyghLpzA9BYbqvnV16mAw04vUjyYASVGJCUoI3ctBcJAeg== - -[digicert] -description = DigiCert Log Server -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAkbFvhu7gkAW6MHSrBlpE1n4+HCFRkC5OLAjgqhkTH+/uzSfSl8ois8ZxAD2NgaTZe1M9akhYlrYkes4JECs6A== - -[certly] -description = Certly.IO log -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECyPLhWKYYUgEc+tUXfPQB4wtGS2MNvXrjwFCCnyYJifBtd2Sk7Cu+Js9DNhMTh35FftHaHu6ZrclnNBKwmbbSA== - -[izempe] -description = Izempe log -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ2Q5DC3cUBj4IQCiDu0s6j51up+TZAkAEcQRF6tczw90rLWXkJMAW7jr9yc92bIKgV8vDXU4lDeZHvYHduDuvg== - -[symantec] -description = Symantec log -key = MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEluqsHEYMG1XcDfy1lCdGV0JwOmkY4r87xNuroPS2bMBTP01CEDPwWJePa75y9CrsHEKqAy8afig1dpkIPSEUhg== - -[venafi] -description = Venafi log -key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAolpIHxdSlTXLo1s6H1OCdpSj/4DyHDc8wLG9wVmLqy1lk9fz4ATVmm+/1iN2Nk8jmctUKK2MFUtlWXZBSpym97M7frGlSaQXUWyA3CqQUEuIJOmlEjKTBEiQAvpfDjCHjlV2Be4qTM6jamkJbiWtgnYPhJL6ONaGTiSPm7Byy57iaz/hbckldSOIoRhYBiMzeNoA0DiRZ9KmfSeXZ1rB8y8X5urSW+iBzf2SaOfzBvDpcoTuAaWx2DPazoOl28fP1hZ+kHUYvxbcMjttjauCFx+JII0dmuZNIwjfeG/GBb9frpSX219k1O4Wi6OEbHEr8at/XQ0y7gTikOxBn/s5wQIDAQAB +# 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/apps/demoCA/cacert.pem b/apps/demoCA/cacert.pem deleted file mode 100644 index affbce3b..00000000 --- a/apps/demoCA/cacert.pem +++ /dev/null @@ -1,14 +0,0 @@ -subject=/C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server -issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA ------BEGIN X509 CERTIFICATE----- - -MIIBgjCCASwCAQQwDQYJKoZIhvcNAQEEBQAwODELMAkGA1UEBhMCQVUxDDAKBgNV -BAgTA1FMRDEbMBkGA1UEAxMSU1NMZWF5L3JzYSB0ZXN0IENBMB4XDTk1MTAwOTIz -MzIwNVoXDTk4MDcwNTIzMzIwNVowYDELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA1FM -RDEZMBcGA1UEChMQTWluY29tIFB0eS4gTHRkLjELMAkGA1UECxMCQ1MxGzAZBgNV -BAMTElNTTGVheSBkZW1vIHNlcnZlcjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC3 -LCXcScWua0PFLkHBLm2VejqpA1F4RQ8q0VjRiPafjx/Z/aWH3ipdMVvuJGa/wFXb -/nDFLDlfWp+oCPwhBtVPAgMBAAEwDQYJKoZIhvcNAQEEBQADQQArNFsihWIjBzb0 -DCsU0BvL2bvSwJrPEqFlkDq3F4M6EGutL9axEcANWgbbEdAvNJD1dmEmoWny27Pn -IMs6ZOZB ------END X509 CERTIFICATE----- diff --git a/apps/demoCA/index.txt b/apps/demoCA/index.txt deleted file mode 100644 index 2cdd252d..00000000 --- a/apps/demoCA/index.txt +++ /dev/null @@ -1,39 +0,0 @@ -R 980705233205Z 951009233205Z 01 certs/00000001 /CN=Eric Young -E 951009233205Z 02 certs/00000002 /CN=Duncan Young -R 980705233205Z 951201010000Z 03 certs/00000003 /CN=Tim Hudson -V 980705233205Z 04 certs/00000004 /CN=Eric Young4 -V 980705233205Z 05 certs/00000004 /CN=Eric Young5 -V 980705233205Z 06 certs/00000004 /CN=Eric Young6 -V 980705233205Z 07 certs/00000004 /CN=Eric Young7 -V 980705233205Z 08 certs/00000004 /CN=Eric Young8 -V 980705233205Z 09 certs/00000004 /CN=Eric Young9 -V 980705233205Z 0A certs/00000004 /CN=Eric YoungA -V 980705233205Z 0B certs/00000004 /CN=Eric YoungB -V 980705233205Z 0C certs/00000004 /CN=Eric YoungC -V 980705233205Z 0D certs/00000004 /CN=Eric YoungD -V 980705233205Z 0E certs/00000004 /CN=Eric YoungE -V 980705233205Z 0F certs/00000004 /CN=Eric YoungF -V 980705233205Z 10 certs/00000004 /CN=Eric Young10 -V 980705233205Z 11 certs/00000004 /CN=Eric Young11 -V 980705233205Z 12 certs/00000004 /CN=Eric Young12 -V 980705233205Z 13 certs/00000004 /CN=Eric Young13 -V 980705233205Z 14 certs/00000004 /CN=Eric Young14 -V 980705233205Z 15 certs/00000004 /CN=Eric Young15 -V 980705233205Z 16 certs/00000004 /CN=Eric Young16 -V 980705233205Z 17 certs/00000004 /CN=Eric Young17 -V 961206150305Z 010C unknown /C=AU/SP=QLD/O=Mincom Pty. Ltd./OU=MTR/CN=Eric Young/Email=eay@mincom.oz.au -V 961206153245Z 010D unknown /C=AU/SP=Queensland/O=Mincom Pty Ltd/OU=MTR/CN=Eric Young/Email=eay@mincom.oz.au -V 970322074816Z 010E unknown /CN=Eric Young/Email=eay@mincom.oz.au -V 970322075152Z 010F unknown /CN=Eric Young -V 970322075906Z 0110 unknown /CN=Eric Youngg -V 970324092238Z 0111 unknown /C=AU/SP=Queensland/CN=Eric Young -V 970324221931Z 0112 unknown /CN=Fred -V 970324224934Z 0113 unknown /C=AU/CN=eay -V 971001005237Z 0114 unknown /C=AU/SP=QLD/O=Mincom Pty Ltd/OU=MTR/CN=x509v3 test -V 971001010331Z 0115 unknown /C=AU/SP=Queensland/O=Mincom Pty Ltd/OU=MTR/CN=test again - x509v3 -V 971001013945Z 0117 unknown /C=AU/SP=Queensland/O=Mincom Pty Ltd/OU=MTR/CN=x509v3 test -V 971014225415Z 0118 unknown /C=AU/SP=Queensland/CN=test -V 971015004448Z 0119 unknown /C=AU/SP=Queensland/O=Mincom Pty Ltd/OU=MTR/CN=test2 -V 971016035001Z 011A unknown /C=AU/SP=Queensland/O=Mincom Pty Ltd/OU=MTR/CN=test64 -V 971016080129Z 011B unknown /C=FR/O=ALCATEL/OU=Alcatel Mobile Phones/CN=bourque/Email=bourque@art.alcatel.fr -V 971016224000Z 011D unknown /L=Bedford/O=Cranfield University/OU=Computer Centre/CN=Peter R Lister/Email=P.Lister@cranfield.ac.uk diff --git a/apps/demoCA/private/cakey.pem b/apps/demoCA/private/cakey.pem deleted file mode 100644 index 48fb18c7..00000000 --- a/apps/demoCA/private/cakey.pem +++ /dev/null @@ -1,24 +0,0 @@ -issuer= /C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=CA -subject=/C=AU/SOP=QLD/O=Mincom Pty. Ltd./OU=CS/CN=SSLeay demo server ------BEGIN X509 CERTIFICATE----- - -MIIBgjCCASwCAQQwDQYJKoZIhvcNAQEEBQAwODELMAkGA1UEBhMCQVUxDDAKBgNV -BAgTA1FMRDEbMBkGA1UEAxMSU1NMZWF5L3JzYSB0ZXN0IENBMB4XDTk1MTAwOTIz -MzIwNVoXDTk4MDcwNTIzMzIwNVowYDELMAkGA1UEBhMCQVUxDDAKBgNVBAgTA1FM -RDEZMBcGA1UEChMQTWluY29tIFB0eS4gTHRkLjELMAkGA1UECxMCQ1MxGzAZBgNV -BAMTElNTTGVheSBkZW1vIHNlcnZlcjBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC3 -LCXcScWua0PFLkHBLm2VejqpA1F4RQ8q0VjRiPafjx/Z/aWH3ipdMVvuJGa/wFXb -/nDFLDlfWp+oCPwhBtVPAgMBAAEwDQYJKoZIhvcNAQEEBQADQQArNFsihWIjBzb0 -DCsU0BvL2bvSwJrPEqFlkDq3F4M6EGutL9axEcANWgbbEdAvNJD1dmEmoWny27Pn -IMs6ZOZB ------END X509 CERTIFICATE----- ------BEGIN RSA PRIVATE KEY----- - -MIIBPAIBAAJBALcsJdxJxa5rQ8UuQcEubZV6OqkDUXhFDyrRWNGI9p+PH9n9pYfe -Kl0xW+4kZr/AVdv+cMUsOV9an6gI/CEG1U8CAwEAAQJAXJMBZ34ZXHd1vtgL/3hZ -hexKbVTx/djZO4imXO/dxPGRzG2ylYZpHmG32/T1kaHpZlCHoEPgHoSzmxYXfxjG -sQIhAPmZ/bQOjmRUHM/VM2X5zrjjM6z18R1P6l3ObFwt9FGdAiEAu943Yh9SqMRw -tL0xHGxKmM/YJueUw1gB6sLkETN71NsCIQCeT3RhoqXfrpXDoEcEU+gwzjI1bpxq -agiNTOLfqGoA5QIhAIQFYjgzONxex7FLrsKBm16N2SFl5pXsN9SpRqqL2n63AiEA -g9VNIQ3xwpw7og3IbONifeku+J9qGMGQJMKwSTwrFtI= ------END RSA PRIVATE KEY----- diff --git a/apps/demoCA/serial b/apps/demoCA/serial deleted file mode 100644 index 69fa0ffe..00000000 --- a/apps/demoCA/serial +++ /dev/null @@ -1 +0,0 @@ -011E diff --git a/apps/dgst.c b/apps/dgst.c index 08182e2a..45745507 100644 --- a/apps/dgst.c +++ b/apps/dgst.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -29,22 +30,21 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_C, OPT_R, OPT_RAND, OPT_OUT, OPT_SIGN, OPT_PASSIN, OPT_VERIFY, + OPT_C, OPT_R, OPT_OUT, OPT_SIGN, OPT_PASSIN, OPT_VERIFY, OPT_PRVERIFY, OPT_SIGNATURE, OPT_KEYFORM, OPT_ENGINE, OPT_ENGINE_IMPL, OPT_HEX, OPT_BINARY, OPT_DEBUG, OPT_FIPS_FINGERPRINT, OPT_HMAC, OPT_MAC, OPT_SIGOPT, OPT_MACOPT, - OPT_DIGEST + OPT_DIGEST, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS dgst_options[] = { +const OPTIONS dgst_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] [file...]\n"}, {OPT_HELP_STR, 1, '-', " file... files to digest (default is stdin)\n"}, {"help", OPT_HELP, '-', "Display this summary"}, {"c", OPT_C, '-', "Print the digest with separating colons"}, {"r", OPT_R, '-', "Print the digest in coreutils format"}, - {"rand", OPT_RAND, 's', - "Use file(s) containing random data to seed RNG or an EGD sock"}, {"out", OPT_OUT, '>', "Output to filename rather than stdout"}, {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, {"sign", OPT_SIGN, 's', "Sign digest using private key"}, @@ -65,6 +65,7 @@ OPTIONS dgst_options[] = { {"sigopt", OPT_SIGOPT, 's', "Signature parameter in n:v form"}, {"macopt", OPT_MACOPT, 's', "MAC algorithm parameters in n:v form or key"}, {"", OPT_DIGEST, '-', "Any supported digest"}, + OPT_R_OPTIONS, #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine e, possibly a hardware device"}, {"engine_impl", OPT_ENGINE_IMPL, '-', @@ -84,7 +85,7 @@ int dgst_main(int argc, char **argv) char *passinarg = NULL, *passin = NULL; const EVP_MD *md = NULL, *m; const char *outfile = NULL, *keyfile = NULL, *prog = NULL; - const char *sigfile = NULL, *randfile = NULL; + const char *sigfile = NULL; OPTION_CHOICE o; int separator = 0, debug = 0, keyform = FORMAT_PEM, siglen = 0; int i, ret = 1, out_bin = -1, want_pub = 0, do_verify = 0; @@ -113,8 +114,9 @@ int dgst_main(int argc, char **argv) case OPT_R: separator = 2; break; - case OPT_RAND: - randfile = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_OUT: outfile = opt_arg(); @@ -190,7 +192,7 @@ int dgst_main(int argc, char **argv) goto end; } - if (do_verify && !sigfile) { + if (do_verify && sigfile == NULL) { BIO_printf(bio_err, "No signature to verify: use the -signature option\n"); goto end; @@ -217,30 +219,27 @@ int dgst_main(int argc, char **argv) } if (out_bin == -1) { - if (keyfile) + if (keyfile != NULL) out_bin = 1; else out_bin = 0; } - if (randfile) - app_RAND_load_file(randfile, 0); - out = bio_open_default(outfile, 'w', out_bin ? FORMAT_BINARY : FORMAT_TEXT); if (out == NULL) goto end; - if ((! !mac_name + ! !keyfile + ! !hmac_key) > 1) { + if ((!(mac_name == NULL) + !(keyfile == NULL) + !(hmac_key == NULL)) > 1) { BIO_printf(bio_err, "MAC and Signing key cannot both be specified\n"); goto end; } - if (keyfile) { + if (keyfile != NULL) { if (want_pub) sigkey = load_pubkey(keyfile, keyform, 0, NULL, e, "key file"); else sigkey = load_key(keyfile, keyform, 0, passin, e, "key file"); - if (!sigkey) { + if (sigkey == NULL) { /* * load_[pub]key() has already printed an appropriate message */ @@ -248,12 +247,12 @@ int dgst_main(int argc, char **argv) } } - if (mac_name) { + if (mac_name != NULL) { EVP_PKEY_CTX *mac_ctx = NULL; int r = 0; if (!init_gen_str(&mac_ctx, mac_name, impl, 0)) goto mac_end; - if (macopts) { + if (macopts != NULL) { char *macopt; for (i = 0; i < sk_OPENSSL_STRING_num(macopts); i++) { macopt = sk_OPENSSL_STRING_value(macopts, i); @@ -277,14 +276,14 @@ int dgst_main(int argc, char **argv) goto end; } - if (hmac_key) { + if (hmac_key != NULL) { sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, impl, (unsigned char *)hmac_key, -1); - if (!sigkey) + if (sigkey == NULL) goto end; } - if (sigkey) { + if (sigkey != NULL) { EVP_MD_CTX *mctx = NULL; EVP_PKEY_CTX *pctx = NULL; int r; @@ -302,7 +301,7 @@ int dgst_main(int argc, char **argv) ERR_print_errors(bio_err); goto end; } - if (sigopts) { + if (sigopts != NULL) { char *sigopt; for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) { sigopt = sk_OPENSSL_STRING_value(sigopts, i); @@ -331,9 +330,9 @@ int dgst_main(int argc, char **argv) } } - if (sigfile && sigkey) { + if (sigfile != NULL && sigkey != NULL) { BIO *sigbio = BIO_new_file(sigfile, "rb"); - if (!sigbio) { + if (sigbio == NULL) { BIO_printf(bio_err, "Error opening signature file %s\n", sigfile); ERR_print_errors(bio_err); goto end; @@ -363,14 +362,14 @@ int dgst_main(int argc, char **argv) } else { const char *md_name = NULL, *sig_name = NULL; if (!out_bin) { - if (sigkey) { + if (sigkey != NULL) { const EVP_PKEY_ASN1_METHOD *ameth; ameth = EVP_PKEY_get0_asn1(sigkey); if (ameth) EVP_PKEY_asn1_get0_info(NULL, NULL, NULL, NULL, &sig_name, ameth); } - if (md) + if (md != NULL) md_name = EVP_MD_name(md); } ret = 0; @@ -380,9 +379,10 @@ int dgst_main(int argc, char **argv) perror(argv[i]); ret++; continue; - } else + } else { r = do_fp(out, buf, inp, separator, out_bin, sigkey, sigbuf, siglen, sig_name, md_name, argv[i]); + } if (r) ret = r; (void)BIO_reset(bmd); @@ -399,7 +399,7 @@ int dgst_main(int argc, char **argv) OPENSSL_free(sigbuf); BIO_free(bmd); release_engine(e); - return (ret); + return ret; } int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, @@ -420,13 +420,13 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, if (i == 0) break; } - if (sigin) { + if (sigin != NULL) { EVP_MD_CTX *ctx; BIO_get_md_ctx(bp, &ctx); i = EVP_DigestVerifyFinal(ctx, sigin, (unsigned int)siglen); - if (i > 0) + if (i > 0) { BIO_printf(out, "Verified OK\n"); - else if (i == 0) { + } else if (i == 0) { BIO_printf(out, "Verification Failure\n"); return 1; } else { @@ -436,7 +436,7 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, } return 0; } - if (key) { + if (key != NULL) { EVP_MD_CTX *ctx; BIO_get_md_ctx(bp, &ctx); len = BUFSIZE; @@ -453,22 +453,23 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout, } } - if (binout) + if (binout) { BIO_write(out, buf, len); - else if (sep == 2) { + } else if (sep == 2) { for (i = 0; i < (int)len; i++) BIO_printf(out, "%02x", buf[i]); BIO_printf(out, " *%s\n", file); } else { - if (sig_name) { + if (sig_name != NULL) { BIO_puts(out, sig_name); - if (md_name) + if (md_name != NULL) BIO_printf(out, "-%s", md_name); BIO_printf(out, "(%s)= ", file); - } else if (md_name) + } else if (md_name != NULL) { BIO_printf(out, "%s(%s)= ", md_name, file); - else + } else { BIO_printf(out, "(%s)= ", file); + } for (i = 0; i < (int)len; i++) { if (sep && (i != 0)) BIO_printf(out, ":"); diff --git a/apps/dhparam.c b/apps/dhparam.c index 94322e37..8a3a3891 100644 --- a/apps/dhparam.c +++ b/apps/dhparam.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,6 +17,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -36,10 +37,11 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_OUTFORM, OPT_IN, OPT_OUT, OPT_ENGINE, OPT_CHECK, OPT_TEXT, OPT_NOOUT, - OPT_RAND, OPT_DSAPARAM, OPT_C, OPT_2, OPT_5 + OPT_DSAPARAM, OPT_C, OPT_2, OPT_5, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS dhparam_options[] = { +const OPTIONS dhparam_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [flags] [numbits]\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {"help", OPT_HELP, '-', "Display this summary"}, @@ -50,8 +52,7 @@ OPTIONS dhparam_options[] = { {"check", OPT_CHECK, '-', "Check the DH parameters"}, {"text", OPT_TEXT, '-', "Print a text form of the DH parameters"}, {"noout", OPT_NOOUT, '-', "Don't output any DH parameters"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"C", OPT_C, '-', "Print C code"}, {"2", OPT_2, '-', "Generate parameters using 2 as the generator value"}, {"5", OPT_5, '-', "Generate parameters using 5 as the generator value"}, @@ -69,7 +70,7 @@ int dhparam_main(int argc, char **argv) { BIO *in = NULL, *out = NULL; DH *dh = NULL; - char *infile = NULL, *outfile = NULL, *prog, *inrand = NULL; + char *infile = NULL, *outfile = NULL, *prog; ENGINE *e = NULL; #ifndef OPENSSL_NO_DSA int dsaparam = 0; @@ -130,15 +131,16 @@ int dhparam_main(int argc, char **argv) case OPT_NOOUT: noout = 1; break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; } } argc = opt_num_rest(); argv = opt_rest(); - if (argv[0] && (!opt_int(argv[0], &num) || num <= 0)) + if (argv[0] != NULL && (!opt_int(argv[0], &num) || num <= 0)) goto end; if (g && !num) @@ -165,13 +167,6 @@ int dhparam_main(int argc, char **argv) } BN_GENCB_set(cb, dh_cb, bio_err); - if (!app_RAND_load_file(NULL, 1) && inrand == NULL) { - BIO_printf(bio_err, - "warning, not much extra random data, consider using the -rand option\n"); - } - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); # ifndef OPENSSL_NO_DSA if (dsaparam) { @@ -211,7 +206,6 @@ int dhparam_main(int argc, char **argv) } BN_GENCB_free(cb); - app_RAND_write_file(NULL); } else { in = bio_open_default(infile, 'r', informat); @@ -354,10 +348,11 @@ int dhparam_main(int argc, char **argv) i = i2d_DHxparams_bio(out, dh); else i = i2d_DHparams_bio(out, dh); - } else if (q != NULL) + } else if (q != NULL) { i = PEM_write_bio_DHxparams(out, dh); - else + } else { i = PEM_write_bio_DHparams(out, dh); + } if (!i) { BIO_printf(bio_err, "unable to write DH parameters\n"); ERR_print_errors(bio_err); @@ -370,7 +365,7 @@ int dhparam_main(int argc, char **argv) BIO_free_all(out); DH_free(dh); release_engine(e); - return (ret); + return ret; } static int dh_cb(int p, int n, BN_GENCB *cb) diff --git a/apps/dsa.c b/apps/dsa.c index 8454b2e9..6022e64c 100644 --- a/apps/dsa.c +++ b/apps/dsa.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,6 +17,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -34,7 +35,7 @@ typedef enum OPTION_choice { OPT_PUBOUT, OPT_CIPHER, OPT_PASSIN, OPT_PASSOUT } OPTION_CHOICE; -OPTIONS dsa_options[] = { +const OPTIONS dsa_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'f', "Input format, DER PEM PVK"}, {"outform", OPT_OUTFORM, 'f', "Output format, DER PEM PVK"}, @@ -161,7 +162,7 @@ int dsa_main(int argc, char **argv) else pkey = load_key(infile, informat, 1, passin, e, "Private Key"); - if (pkey) { + if (pkey != NULL) { dsa = EVP_PKEY_get1_DSA(pkey); EVP_PKEY_free(pkey); } @@ -199,16 +200,16 @@ int dsa_main(int argc, char **argv) } BIO_printf(bio_err, "writing DSA key\n"); if (outformat == FORMAT_ASN1) { - if (pubin || pubout) + if (pubin || pubout) { i = i2d_DSA_PUBKEY_bio(out, dsa); - else { + } else { assert(private); i = i2d_DSAPrivateKey_bio(out, dsa); } } else if (outformat == FORMAT_PEM) { - if (pubin || pubout) + if (pubin || pubout) { i = PEM_write_bio_DSA_PUBKEY(out, dsa); - else { + } else { assert(private); i = PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout); @@ -235,10 +236,9 @@ int dsa_main(int argc, char **argv) # else i = i2b_PVK_bio(out, pk, pvk_encr, 0, passout); # endif - } - else if (pubin || pubout) + } else if (pubin || pubout) { i = i2b_PublicKey_bio(out, pk); - else { + } else { assert(private); i = i2b_PrivateKey_bio(out, pk); } @@ -260,6 +260,6 @@ int dsa_main(int argc, char **argv) release_engine(e); OPENSSL_free(passin); OPENSSL_free(passout); - return (ret); + return ret; } #endif diff --git a/apps/dsaparam.c b/apps/dsaparam.c index 5c3c8f80..2c1cc610 100644 --- a/apps/dsaparam.c +++ b/apps/dsaparam.c @@ -17,6 +17,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -24,27 +25,15 @@ NON_EMPTY_TRANSLATION_UNIT # include # include -# ifdef GENCB_TEST - -static int stop_keygen_flag = 0; - -static void timebomb_sigalarm(int foo) -{ - stop_keygen_flag = 1; -} - -# endif - static int dsa_cb(int p, int n, BN_GENCB *cb); typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_OUTFORM, OPT_IN, OPT_OUT, OPT_TEXT, OPT_C, - OPT_NOOUT, OPT_GENKEY, OPT_RAND, OPT_ENGINE, - OPT_TIMEBOMB + OPT_NOOUT, OPT_GENKEY, OPT_ENGINE, OPT_R_ENUM } OPTION_CHOICE; -OPTIONS dsaparam_options[] = { +const OPTIONS dsaparam_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format - DER or PEM"}, {"in", OPT_IN, '<', "Input file"}, @@ -54,10 +43,7 @@ OPTIONS dsaparam_options[] = { {"C", OPT_C, '-', "Output C code"}, {"noout", OPT_NOOUT, '-', "No output"}, {"genkey", OPT_GENKEY, '-', "Generate a DSA key"}, - {"rand", OPT_RAND, 's', "Files to use for random number input"}, -# ifdef GENCB_TEST - {"timebomb", OPT_TIMEBOMB, 'p', "Interrupt keygen after 'pnum' seconds"}, -# endif + OPT_R_OPTIONS, # ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine e, possibly a hardware device"}, # endif @@ -70,13 +56,10 @@ int dsaparam_main(int argc, char **argv) DSA *dsa = NULL; BIO *in = NULL, *out = NULL; BN_GENCB *cb = NULL; - int numbits = -1, num = 0, genkey = 0, need_rand = 0; + int numbits = -1, num = 0, genkey = 0; int informat = FORMAT_PEM, outformat = FORMAT_PEM, noout = 0, C = 0; int ret = 1, i, text = 0, private = 0; -# ifdef GENCB_TEST - int timebomb = 0; -# endif - char *infile = NULL, *outfile = NULL, *prog, *inrand = NULL; + char *infile = NULL, *outfile = NULL, *prog; OPTION_CHOICE o; prog = opt_init(argc, argv, dsaparam_options); @@ -108,11 +91,6 @@ int dsaparam_main(int argc, char **argv) case OPT_ENGINE: e = setup_engine(opt_arg(), 0); break; - case OPT_TIMEBOMB: -# ifdef GENCB_TEST - timebomb = atoi(opt_arg()); - break; -# endif case OPT_TEXT: text = 1; break; @@ -120,11 +98,11 @@ int dsaparam_main(int argc, char **argv) C = 1; break; case OPT_GENKEY: - genkey = need_rand = 1; + genkey = 1; break; - case OPT_RAND: - inrand = opt_arg(); - need_rand = 1; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_NOOUT: noout = 1; @@ -139,7 +117,6 @@ int dsaparam_main(int argc, char **argv) goto end; /* generate a key */ numbits = num; - need_rand = 1; } private = genkey ? 1 : 0; @@ -150,13 +127,6 @@ int dsaparam_main(int argc, char **argv) if (out == NULL) goto end; - if (need_rand) { - app_RAND_load_file(NULL, (inrand != NULL)); - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - } - if (numbits > 0) { cb = BN_GENCB_new(); if (cb == NULL) { @@ -164,7 +134,6 @@ int dsaparam_main(int argc, char **argv) goto end; } BN_GENCB_set(cb, dsa_cb, bio_err); - assert(need_rand); dsa = DSA_new(); if (dsa == NULL) { BIO_printf(bio_err, "Error allocating DSA object\n"); @@ -173,38 +142,16 @@ int dsaparam_main(int argc, char **argv) BIO_printf(bio_err, "Generating DSA parameters, %d bit long prime\n", num); BIO_printf(bio_err, "This could take some time\n"); -# ifdef GENCB_TEST - if (timebomb > 0) { - struct sigaction act; - act.sa_handler = timebomb_sigalarm; - act.sa_flags = 0; - BIO_printf(bio_err, - "(though I'll stop it if not done within %d secs)\n", - timebomb); - if (sigaction(SIGALRM, &act, NULL) != 0) { - BIO_printf(bio_err, "Error, couldn't set SIGALRM handler\n"); - goto end; - } - alarm(timebomb); - } -# endif if (!DSA_generate_parameters_ex(dsa, num, NULL, 0, NULL, NULL, cb)) { -# ifdef GENCB_TEST - if (stop_keygen_flag) { - BIO_printf(bio_err, "DSA key generation time-stopped\n"); - /* This is an asked-for behaviour! */ - ret = 0; - goto end; - } -# endif ERR_print_errors(bio_err); BIO_printf(bio_err, "Error, DSA key generation failed\n"); goto end; } - } else if (informat == FORMAT_ASN1) + } else if (informat == FORMAT_ASN1) { dsa = d2i_DSAparams_bio(in, NULL); - else + } else { dsa = PEM_read_bio_DSAparams(in, NULL, NULL, NULL); + } if (dsa == NULL) { BIO_printf(bio_err, "unable to load DSA parameters\n"); ERR_print_errors(bio_err); @@ -248,9 +195,6 @@ int dsaparam_main(int argc, char **argv) OPENSSL_free(data); } - if (outformat == FORMAT_ASN1 && genkey) - noout = 1; - if (!noout) { if (outformat == FORMAT_ASN1) i = i2d_DSAparams_bio(out, dsa); @@ -265,7 +209,6 @@ int dsaparam_main(int argc, char **argv) if (genkey) { DSA *dsakey; - assert(need_rand); if ((dsakey = DSAparams_dup(dsa)) == NULL) goto end; if (!DSA_generate_key(dsakey)) { @@ -281,8 +224,6 @@ int dsaparam_main(int argc, char **argv) NULL); DSA_free(dsakey); } - if (need_rand) - app_RAND_write_file(NULL); ret = 0; end: BN_GENCB_free(cb); @@ -290,7 +231,7 @@ int dsaparam_main(int argc, char **argv) BIO_free_all(out); DSA_free(dsa); release_engine(e); - return (ret); + return ret; } static int dsa_cb(int p, int n, BN_GENCB *cb) @@ -307,10 +248,6 @@ static int dsa_cb(int p, int n, BN_GENCB *cb) c = '\n'; BIO_write(BN_GENCB_get_arg(cb), &c, 1); (void)BIO_flush(BN_GENCB_get_arg(cb)); -# ifdef GENCB_TEST - if (stop_keygen_flag) - return 0; -# endif return 1; } #endif diff --git a/apps/ec.c b/apps/ec.c index 2516c032..03abb006 100644 --- a/apps/ec.c +++ b/apps/ec.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,6 +16,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -42,7 +43,7 @@ typedef enum OPTION_choice { OPT_NO_PUBLIC, OPT_CHECK } OPTION_CHOICE; -OPTIONS ec_options[] = { +const OPTIONS ec_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"in", OPT_IN, 's', "Input file"}, {"inform", OPT_INFORM, 'f', "Input format - DER or PEM"}, @@ -185,7 +186,7 @@ int ec_main(int argc, char **argv) } else if (informat == FORMAT_ENGINE) { EVP_PKEY *pkey; if (pubin) - pkey = load_pubkey(infile, informat , 1, passin, e, "Public Key"); + pkey = load_pubkey(infile, informat, 1, passin, e, "Public Key"); else pkey = load_key(infile, informat, 1, passin, e, "Private Key"); if (pkey != NULL) { @@ -244,20 +245,20 @@ int ec_main(int argc, char **argv) BIO_printf(bio_err, "writing EC key\n"); if (outformat == FORMAT_ASN1) { - if (param_out) + if (param_out) { i = i2d_ECPKParameters_bio(out, group); - else if (pubin || pubout) + } else if (pubin || pubout) { i = i2d_EC_PUBKEY_bio(out, eckey); - else { + } else { assert(private); i = i2d_ECPrivateKey_bio(out, eckey); } } else { - if (param_out) + if (param_out) { i = PEM_write_bio_ECPKParameters(out, group); - else if (pubin || pubout) + } else if (pubin || pubout) { i = PEM_write_bio_EC_PUBKEY(out, eckey); - else { + } else { assert(private); i = PEM_write_bio_ECPrivateKey(out, eckey, enc, NULL, 0, NULL, passout); @@ -267,8 +268,9 @@ int ec_main(int argc, char **argv) if (!i) { BIO_printf(bio_err, "unable to write private key\n"); ERR_print_errors(bio_err); - } else + } else { ret = 0; + } end: BIO_free(in); BIO_free_all(out); @@ -276,6 +278,6 @@ int ec_main(int argc, char **argv) release_engine(e); OPENSSL_free(passin); OPENSSL_free(passout); - return (ret); + return ret; } #endif diff --git a/apps/ecparam.c b/apps/ecparam.c index 999f7487..51877f59 100644 --- a/apps/ecparam.c +++ b/apps/ecparam.c @@ -1,5 +1,6 @@ /* * Copyright 2002-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 @@ -7,20 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #ifdef OPENSSL_NO_EC NON_EMPTY_TRANSLATION_UNIT @@ -31,6 +18,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -42,10 +30,11 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_OUTFORM, OPT_IN, OPT_OUT, OPT_TEXT, OPT_C, OPT_CHECK, OPT_LIST_CURVES, OPT_NO_SEED, OPT_NOOUT, OPT_NAME, - OPT_CONV_FORM, OPT_PARAM_ENC, OPT_GENKEY, OPT_RAND, OPT_ENGINE + OPT_CONV_FORM, OPT_PARAM_ENC, OPT_GENKEY, OPT_ENGINE, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS ecparam_options[] = { +const OPTIONS ecparam_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format - default PEM (DER or PEM)"}, {"outform", OPT_OUTFORM, 'F', "Output format - default PEM"}, @@ -65,7 +54,7 @@ OPTIONS ecparam_options[] = { {"param_enc", OPT_PARAM_ENC, 's', "Specifies the way the ec parameters are encoded"}, {"genkey", OPT_GENKEY, '-', "Generate ec key"}, - {"rand", OPT_RAND, 's', "Files to use for random number input"}, + OPT_R_OPTIONS, # ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, # endif @@ -93,7 +82,7 @@ int ecparam_main(int argc, char **argv) BIO *in = NULL, *out = NULL; EC_GROUP *group = NULL; point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED; - char *curve_name = NULL, *inrand = NULL; + char *curve_name = NULL; char *infile = NULL, *outfile = NULL, *prog; unsigned char *buffer = NULL; OPTION_CHOICE o; @@ -101,7 +90,7 @@ int ecparam_main(int argc, char **argv) int informat = FORMAT_PEM, outformat = FORMAT_PEM, noout = 0, C = 0; int ret = 1, private = 0; int list_curves = 0, no_seed = 0, check = 0, new_form = 0; - int text = 0, i, need_rand = 0, genkey = 0; + int text = 0, i, genkey = 0; prog = opt_init(argc, argv, ecparam_options); while ((o = opt_next()) != OPT_EOF) { @@ -162,11 +151,11 @@ int ecparam_main(int argc, char **argv) new_asn1_flag = 1; break; case OPT_GENKEY: - genkey = need_rand = 1; + genkey = 1; break; - case OPT_RAND: - inrand = opt_arg(); - need_rand = 1; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_ENGINE: e = setup_engine(opt_arg(), 0); @@ -232,8 +221,9 @@ int ecparam_main(int argc, char **argv) BIO_printf(bio_err, "using curve name prime256v1 " "instead of secp256r1\n"); nid = NID_X9_62_prime256v1; - } else + } else { nid = OBJ_sn2nid(curve_name); + } if (nid == 0) nid = EC_curve_nist2nid(curve_name); @@ -250,10 +240,11 @@ int ecparam_main(int argc, char **argv) } EC_GROUP_set_asn1_flag(group, asn1_flag); EC_GROUP_set_point_conversion_form(group, form); - } else if (informat == FORMAT_ASN1) + } else if (informat == FORMAT_ASN1) { group = d2i_ECPKParameters_bio(in, NULL); - else + } else { group = PEM_read_bio_ECPKParameters(in, NULL, NULL, NULL); + } if (group == NULL) { BIO_printf(bio_err, "unable to load elliptic curve parameters\n"); ERR_print_errors(bio_err); @@ -393,9 +384,6 @@ int ecparam_main(int argc, char **argv) "}\n"); } - if (outformat == FORMAT_ASN1 && genkey) - noout = 1; - if (!noout) { if (outformat == FORMAT_ASN1) i = i2d_ECPKParameters_bio(out, group); @@ -409,21 +397,12 @@ int ecparam_main(int argc, char **argv) } } - if (need_rand) { - app_RAND_load_file(NULL, (inrand != NULL)); - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - } - if (genkey) { EC_KEY *eckey = EC_KEY_new(); if (eckey == NULL) goto end; - assert(need_rand); - if (EC_KEY_set_group(eckey, group) == 0) { BIO_printf(bio_err, "unable to set group when generating key\n"); EC_KEY_free(eckey); @@ -431,9 +410,6 @@ int ecparam_main(int argc, char **argv) goto end; } - if (new_form) - EC_KEY_set_conv_form(eckey, form); - if (!EC_KEY_generate_key(eckey)) { BIO_printf(bio_err, "unable to generate key\n"); EC_KEY_free(eckey); @@ -449,9 +425,6 @@ int ecparam_main(int argc, char **argv) EC_KEY_free(eckey); } - if (need_rand) - app_RAND_write_file(NULL); - ret = 0; end: BN_free(ec_p); @@ -465,7 +438,7 @@ int ecparam_main(int argc, char **argv) release_engine(e); BIO_free(in); BIO_free_all(out); - return (ret); + return ret; } #endif diff --git a/apps/enc.c b/apps/enc.c index df553811..8e5a57d3 100644 --- a/apps/enc.c +++ b/apps/enc.c @@ -12,6 +12,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -29,7 +30,7 @@ #define SIZE (512) #define BSIZE (8*1024) -static int set_hex(char *in, unsigned char *out, int size); +static int set_hex(const char *in, unsigned char *out, int size); static void show_ciphers(const OBJ_NAME *name, void *bio_); struct doall_enc_ciphers { @@ -43,10 +44,11 @@ typedef enum OPTION_choice { OPT_E, OPT_IN, OPT_OUT, OPT_PASS, OPT_ENGINE, OPT_D, OPT_P, OPT_V, OPT_NOPAD, OPT_SALT, OPT_NOSALT, OPT_DEBUG, OPT_UPPER_P, OPT_UPPER_A, OPT_A, OPT_Z, OPT_BUFSIZE, OPT_K, OPT_KFILE, OPT_UPPER_K, OPT_NONE, - OPT_UPPER_S, OPT_IV, OPT_MD, OPT_CIPHER + OPT_UPPER_S, OPT_IV, OPT_MD, OPT_ITER, OPT_PBKDF2, OPT_CIPHER, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS enc_options[] = { +const OPTIONS enc_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"ciphers", OPT_LIST, '-', "List ciphers"}, {"in", OPT_IN, '<', "Input file"}, @@ -72,8 +74,11 @@ OPTIONS enc_options[] = { {"S", OPT_UPPER_S, 's', "Salt, in hex"}, {"iv", OPT_IV, 's', "IV in hex"}, {"md", OPT_MD, 's', "Use specified digest to create a key from the passphrase"}, + {"iter", OPT_ITER, 'p', "Specify the iteration count and force use of PBKDF2"}, + {"pbkdf2", OPT_PBKDF2, '-', "Use password-based key derivation function 2"}, {"none", OPT_NONE, '-', "Don't encrypt"}, {"", OPT_CIPHER, '-', "Any supported cipher"}, + OPT_R_OPTIONS, #ifdef ZLIB {"z", OPT_Z, '-', "Use zlib as the 'encryption'"}, #endif @@ -104,6 +109,8 @@ int enc_main(int argc, char **argv) int ret = 1, inl, nopad = 0; unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; unsigned char *buff = NULL, salt[PKCS5_SALT_LEN]; + int pbkdf2 = 0; + int iter = 0; long n; struct doall_enc_ciphers dec; #ifdef ZLIB @@ -113,13 +120,13 @@ int enc_main(int argc, char **argv) /* first check the program name */ prog = opt_progname(argv[0]); - if (strcmp(prog, "base64") == 0) + if (strcmp(prog, "base64") == 0) { base64 = 1; #ifdef ZLIB - else if (strcmp(prog, "zlib") == 0) + } else if (strcmp(prog, "zlib") == 0) { do_zlib = 1; #endif - else { + } else { cipher = EVP_get_cipherbyname(prog); if (cipher == NULL && strcmp(prog, "enc") != 0) { BIO_printf(bio_err, "%s is not a known cipher\n", prog); @@ -252,9 +259,23 @@ int enc_main(int argc, char **argv) goto opthelp; cipher = c; break; + case OPT_ITER: + if (!opt_int(opt_arg(), &iter)) + goto opthelp; + pbkdf2 = 1; + break; + case OPT_PBKDF2: + pbkdf2 = 1; + if (iter == 0) /* do not overwrite a chosen value */ + iter = 10000; + break; case OPT_NONE: cipher = NULL; break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; } } if (opt_num_rest() != 0) { @@ -275,6 +296,9 @@ int enc_main(int argc, char **argv) if (dgst == NULL) dgst = EVP_sha256(); + if (iter == 0) + iter = 1; + /* It must be large enough for a base64 encoded line */ if (base64 && bsize < 80) bsize = 80; @@ -296,12 +320,13 @@ int enc_main(int argc, char **argv) if (infile == NULL) { in = dup_bio_in(informat); - } else + } else { in = bio_open_default(infile, 'r', informat); + } if (in == NULL) goto end; - if (!str && passarg) { + if (str == NULL && passarg != NULL) { if (!app_passwd(passarg, NULL, &pass, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; @@ -311,13 +336,13 @@ int enc_main(int argc, char **argv) if ((str == NULL) && (cipher != NULL) && (hkey == NULL)) { if (1) { -#ifndef OPENSSL_NO_UI +#ifndef OPENSSL_NO_UI_CONSOLE for (;;) { char prompt[200]; BIO_snprintf(prompt, sizeof(prompt), "enter %s %s password:", - OBJ_nid2ln(EVP_CIPHER_nid(cipher)), - (enc) ? "encryption" : "decryption"); + OBJ_nid2ln(EVP_CIPHER_nid(cipher)), + (enc) ? "encryption" : "decryption"); strbuf[0] = '\0'; i = EVP_read_pw_string((char *)strbuf, SIZE, prompt, enc); if (i == 0) { @@ -397,17 +422,18 @@ int enc_main(int argc, char **argv) unsigned char *sptr; size_t str_len = strlen(str); - if (nosalt) + if (nosalt) { sptr = NULL; - else { + } else { if (enc) { if (hsalt) { if (!set_hex(hsalt, salt, sizeof(salt))) { BIO_printf(bio_err, "invalid hex salt value\n"); goto end; } - } else if (RAND_bytes(salt, sizeof(salt)) <= 0) + } else if (RAND_bytes(salt, sizeof(salt)) <= 0) { goto end; + } /* * If -P option then don't bother writing */ @@ -430,19 +456,41 @@ int enc_main(int argc, char **argv) BIO_printf(bio_err, "bad magic number\n"); goto end; } - sptr = salt; } - if (!EVP_BytesToKey(cipher, dgst, sptr, - (unsigned char *)str, - str_len, 1, key, iv)) { - BIO_printf(bio_err, "EVP_BytesToKey failed\n"); - goto end; + if (pbkdf2 == 1) { + /* + * derive key and default iv + * concatenated into a temporary buffer + */ + unsigned char tmpkeyiv[EVP_MAX_KEY_LENGTH + EVP_MAX_IV_LENGTH]; + int iklen = EVP_CIPHER_key_length(cipher); + int ivlen = EVP_CIPHER_iv_length(cipher); + /* not needed if HASH_UPDATE() is fixed : */ + int islen = (sptr != NULL ? sizeof(salt) : 0); + if (!PKCS5_PBKDF2_HMAC(str, str_len, sptr, islen, + iter, dgst, iklen+ivlen, tmpkeyiv)) { + BIO_printf(bio_err, "PKCS5_PBKDF2_HMAC failed\n"); + goto end; + } + /* split and move data back to global buffer */ + memcpy(key, tmpkeyiv, iklen); + memcpy(iv, tmpkeyiv+iklen, ivlen); + } else { + BIO_printf(bio_err, "*** WARNING : " + "deprecated key derivation used.\n" + "Using -iter or -pbkdf2 would be better.\n"); + if (!EVP_BytesToKey(cipher, dgst, sptr, + (unsigned char *)str, str_len, + 1, key, iv)) { + BIO_printf(bio_err, "EVP_BytesToKey failed\n"); + goto end; + } } /* * zero the complete buffer or the string passed from the command - * line bug picked up by Larry J. Hughes Jr. + * line. */ if (str == strbuf) OPENSSL_cleanse(str, SIZE); @@ -453,7 +501,7 @@ int enc_main(int argc, char **argv) int siz = EVP_CIPHER_iv_length(cipher); if (siz == 0) { BIO_printf(bio_err, "warning: iv not use by this cipher\n"); - } else if (!set_hex(hiv, iv, sizeof(iv))) { + } else if (!set_hex(hiv, iv, siz)) { BIO_printf(bio_err, "invalid hex iv value\n"); goto end; } @@ -461,16 +509,19 @@ int enc_main(int argc, char **argv) if ((hiv == NULL) && (str == NULL) && EVP_CIPHER_iv_length(cipher) != 0) { /* - * No IV was explicitly set and no IV was generated during - * EVP_BytesToKey. Hence the IV is undefined, making correct - * decryption impossible. + * No IV was explicitly set and no IV was generated. + * Hence the IV is undefined, making correct decryption impossible. */ BIO_printf(bio_err, "iv undefined\n"); goto end; } - if ((hkey != NULL) && !set_hex(hkey, key, EVP_CIPHER_key_length(cipher))) { - BIO_printf(bio_err, "invalid hex key value\n"); - goto end; + if (hkey != NULL) { + if (!set_hex(hkey, key, EVP_CIPHER_key_length(cipher))) { + BIO_printf(bio_err, "invalid hex key value\n"); + goto end; + } + /* wiping secret data as we no longer need it */ + OPENSSL_cleanse(hkey, strlen(hkey)); } if ((benc = BIO_new(BIO_f_cipher())) == NULL) @@ -551,8 +602,8 @@ int enc_main(int argc, char **argv) ret = 0; if (verbose) { - BIO_printf(bio_err, "bytes read :%8"BIO_PRI64"u\n", BIO_number_read(in)); - BIO_printf(bio_err, "bytes written:%8"BIO_PRI64"u\n", BIO_number_written(out)); + BIO_printf(bio_err, "bytes read : %8ju\n", BIO_number_read(in)); + BIO_printf(bio_err, "bytes written: %8ju\n", BIO_number_written(out)); } end: ERR_print_errors(bio_err); @@ -567,7 +618,7 @@ int enc_main(int argc, char **argv) #endif release_engine(e); OPENSSL_free(pass); - return (ret); + return ret; } static void show_ciphers(const OBJ_NAME *name, void *arg) @@ -593,25 +644,26 @@ static void show_ciphers(const OBJ_NAME *name, void *arg) BIO_printf(dec->bio, " "); } -static int set_hex(char *in, unsigned char *out, int size) +static int set_hex(const char *in, unsigned char *out, int size) { int i, n; unsigned char j; + i = size * 2; n = strlen(in); - if (n > (size * 2)) { - BIO_printf(bio_err, "hex string is too long\n"); - return (0); + if (n > i) { + BIO_printf(bio_err, "hex string is too long, ignoring excess\n"); + n = i; /* ignore exceeding part */ + } else if (n < i) { + BIO_printf(bio_err, "hex string is too short, padding with zero bytes to length\n"); } + memset(out, 0, size); for (i = 0; i < n; i++) { - j = (unsigned char)*in; - *(in++) = '\0'; - if (j == 0) - break; + j = (unsigned char)*in++; if (!isxdigit(j)) { BIO_printf(bio_err, "non-hex digit\n"); - return (0); + return 0; } j = (unsigned char)OPENSSL_hexchar2int(j); if (i & 1) @@ -619,5 +671,5 @@ static int set_hex(char *in, unsigned char *out, int size) else out[i / 2] = (j << 4); } - return (1); + return 1; } diff --git a/apps/engine.c b/apps/engine.c index 4eeb6424..83f9588a 100644 --- a/apps/engine.c +++ b/apps/engine.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -13,12 +13,14 @@ NON_EMPTY_TRANSLATION_UNIT #else # include "apps.h" +# include "progs.h" # include # include # include # include # include # include +# include typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, @@ -26,7 +28,7 @@ typedef enum OPTION_choice { OPT_V = 100, OPT_VV, OPT_VVV, OPT_VVVV } OPTION_CHOICE; -OPTIONS engine_options[] = { +const OPTIONS engine_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] engine...\n"}, {OPT_HELP_STR, 1, '-', " engine... Engines to load\n"}, @@ -47,28 +49,38 @@ OPTIONS engine_options[] = { static int append_buf(char **buf, int *size, const char *s) { - if (*buf == NULL) { - *size = 256; - *buf = app_malloc(*size, "engine buffer"); - **buf = '\0'; - } + const int expand = 256; + int len = strlen(s) + 1; + char *p = *buf; - if (strlen(*buf) + strlen(s) >= (unsigned int)*size) { - char *tmp; - *size += 256; - tmp = OPENSSL_realloc(*buf, *size); - if (tmp == NULL) { - OPENSSL_free(*buf); - *buf = NULL; - return 0; + if (p == NULL) { + *size = ((len + expand - 1) / expand) * expand; + p = *buf = app_malloc(*size, "engine buffer"); + } else { + const int blen = strlen(p); + + if (blen > 0) + len += 2 + blen; + + if (len > *size) { + *size = ((len + expand - 1) / expand) * expand; + p = OPENSSL_realloc(p, *size); + if (p == NULL) { + OPENSSL_free(*buf); + *buf = NULL; + return 0; + } + *buf = p; + } + + if (blen > 0) { + p += blen; + *p++ = ','; + *p++ = ' '; } - *buf = tmp; } - if (**buf != '\0') - OPENSSL_strlcat(*buf, ", ", *size); - OPENSSL_strlcat(*buf, s, *size); - + strcpy(p, s); return 1; } @@ -147,7 +159,7 @@ static int util_verbose(ENGINE *e, int verbose, BIO *out, const char *indent) } cmds = sk_OPENSSL_STRING_new_null(); - if (!cmds) + if (cmds == NULL) goto err; do { @@ -249,15 +261,34 @@ static void util_do_cmds(ENGINE *e, STACK_OF(OPENSSL_STRING) *cmds, if (!ENGINE_ctrl_cmd_string(e, buf, arg, 0)) res = 0; } - if (res) + if (res) { BIO_printf(out, "[Success]: %s\n", cmd); - else { + } else { BIO_printf(out, "[Failure]: %s\n", cmd); ERR_print_errors(out); } } } +struct util_store_cap_data { + ENGINE *engine; + char **cap_buf; + int *cap_size; + int ok; +}; +static void util_store_cap(const OSSL_STORE_LOADER *loader, void *arg) +{ + struct util_store_cap_data *ctx = arg; + + if (OSSL_STORE_LOADER_get0_engine(loader) == ctx->engine) { + char buf[256]; + BIO_snprintf(buf, sizeof(buf), "STORE(%s)", + OSSL_STORE_LOADER_get0_scheme(loader)); + if (!append_buf(ctx->cap_buf, ctx->cap_size, buf)) + ctx->ok = 0; + } +} + int engine_main(int argc, char **argv) { int ret = 1, i; @@ -380,7 +411,7 @@ int engine_main(int argc, char **argv) goto end; fn_c = ENGINE_get_ciphers(e); - if (!fn_c) + if (fn_c == NULL) goto skip_ciphers; n = fn_c(e, NULL, &nids, 0); for (k = 0; k < n; ++k) @@ -389,7 +420,7 @@ int engine_main(int argc, char **argv) skip_ciphers: fn_d = ENGINE_get_digests(e); - if (!fn_d) + if (fn_d == NULL) goto skip_digests; n = fn_d(e, NULL, &nids, 0); for (k = 0; k < n; ++k) @@ -398,14 +429,26 @@ int engine_main(int argc, char **argv) skip_digests: fn_pk = ENGINE_get_pkey_meths(e); - if (!fn_pk) + if (fn_pk == NULL) goto skip_pmeths; n = fn_pk(e, NULL, &nids, 0); for (k = 0; k < n; ++k) if (!append_buf(&cap_buf, &cap_size, OBJ_nid2sn(nids[k]))) goto end; skip_pmeths: - if (cap_buf && (*cap_buf != '\0')) + { + struct util_store_cap_data store_ctx; + + store_ctx.engine = e; + store_ctx.cap_buf = &cap_buf; + store_ctx.cap_size = &cap_size; + store_ctx.ok = 1; + + OSSL_STORE_do_all_loaders(util_store_cap, &store_ctx); + if (!store_ctx.ok) + goto end; + } + if (cap_buf != NULL && (*cap_buf != '\0')) BIO_printf(out, " [%s]\n", cap_buf); OPENSSL_free(cap_buf); @@ -441,6 +484,6 @@ int engine_main(int argc, char **argv) sk_OPENSSL_STRING_free(pre_cmds); sk_OPENSSL_STRING_free(post_cmds); BIO_free_all(out); - return (ret); + return ret; } #endif diff --git a/apps/errstr.c b/apps/errstr.c index 79d83ee4..3ef01f07 100644 --- a/apps/errstr.c +++ b/apps/errstr.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,8 +11,8 @@ #include #include #include "apps.h" +#include "progs.h" #include -#include #include #include @@ -20,7 +20,7 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP } OPTION_CHOICE; -OPTIONS errstr_options[] = { +const OPTIONS errstr_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] errnum...\n"}, {OPT_HELP_STR, 1, '-', " errnum Error number\n"}, {"help", OPT_HELP, '-', "Display this summary"}, @@ -50,9 +50,9 @@ int errstr_main(int argc, char **argv) ret = 0; for (argv = opt_rest(); *argv; argv++) { - if (sscanf(*argv, "%lx", &l) == 0) + if (sscanf(*argv, "%lx", &l) == 0) { ret++; - else { + } else { /* We're not really an SSL application so this won't auto-init, but * we're still interested in SSL error strings */ @@ -63,5 +63,5 @@ int errstr_main(int argc, char **argv) } } end: - return (ret); + return ret; } diff --git a/apps/gendsa.c b/apps/gendsa.c index bdef022c..06e37924 100644 --- a/apps/gendsa.c +++ b/apps/gendsa.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,6 +17,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -26,17 +27,17 @@ NON_EMPTY_TRANSLATION_UNIT typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_OUT, OPT_PASSOUT, OPT_ENGINE, OPT_RAND, OPT_CIPHER + OPT_OUT, OPT_PASSOUT, OPT_ENGINE, OPT_CIPHER, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS gendsa_options[] = { +const OPTIONS gendsa_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [args] dsaparam-file\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {"help", OPT_HELP, '-', "Display this summary"}, {"out", OPT_OUT, '>', "Output the key to the specified file"}, {"passout", OPT_PASSOUT, 's', "Output file pass phrase source"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"", OPT_CIPHER, '-', "Encrypt the output with any supported cipher"}, # ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, @@ -50,7 +51,7 @@ int gendsa_main(int argc, char **argv) BIO *out = NULL, *in = NULL; DSA *dsa = NULL; const EVP_CIPHER *enc = NULL; - char *inrand = NULL, *dsaparams = NULL; + char *dsaparams = NULL; char *outfile = NULL, *passoutarg = NULL, *passout = NULL, *prog; OPTION_CHOICE o; int ret = 1, private = 0; @@ -77,8 +78,9 @@ int gendsa_main(int argc, char **argv) case OPT_ENGINE: e = setup_engine(opt_arg(), 0); break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_CIPHER: if (!opt_cipher(opt_unknown(), &enc)) @@ -114,21 +116,11 @@ int gendsa_main(int argc, char **argv) if (out == NULL) goto end2; - if (!app_RAND_load_file(NULL, 1) && inrand == NULL) { - BIO_printf(bio_err, - "warning, not much extra random data, consider using the -rand option\n"); - } - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - DSA_get0_pqg(dsa, &p, NULL, NULL); BIO_printf(bio_err, "Generating DSA key, %d bits\n", BN_num_bits(p)); if (!DSA_generate_key(dsa)) goto end; - app_RAND_write_file(NULL); - assert(private); if (!PEM_write_bio_DSAPrivateKey(out, dsa, enc, NULL, 0, NULL, passout)) goto end; @@ -142,6 +134,6 @@ int gendsa_main(int argc, char **argv) DSA_free(dsa); release_engine(e); OPENSSL_free(passout); - return (ret); + return ret; } #endif diff --git a/apps/genpkey.c b/apps/genpkey.c index 9e379772..ce6de94f 100644 --- a/apps/genpkey.c +++ b/apps/genpkey.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,6 +10,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -26,7 +27,7 @@ typedef enum OPTION_choice { OPT_ALGORITHM, OPT_PKEYOPT, OPT_GENPARAM, OPT_TEXT, OPT_CIPHER } OPTION_CHOICE; -OPTIONS genpkey_options[] = { +const OPTIONS genpkey_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"out", OPT_OUT, '>', "Output file"}, {"outform", OPT_OUTFORM, 'F', "output format (DER or PEM)"}, @@ -156,9 +157,9 @@ int genpkey_main(int argc, char **argv) } } - if (do_param) + if (do_param) { rv = PEM_write_bio_Parameters(out, pkey); - else if (outformat == FORMAT_PEM) { + } else if (outformat == FORMAT_PEM) { assert(private); rv = PEM_write_bio_PrivateKey(out, pkey, cipher, NULL, 0, NULL, pass); } else if (outformat == FORMAT_ASN1) { diff --git a/apps/genrsa.c b/apps/genrsa.c index 19bc7535..464657c2 100644 --- a/apps/genrsa.c +++ b/apps/genrsa.c @@ -17,6 +17,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -27,28 +28,30 @@ NON_EMPTY_TRANSLATION_UNIT # include # define DEFBITS 2048 +# define DEFPRIMES 2 static int genrsa_cb(int p, int n, BN_GENCB *cb); typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_3, OPT_F4, OPT_ENGINE, - OPT_OUT, OPT_RAND, OPT_PASSOUT, OPT_CIPHER + OPT_OUT, OPT_PASSOUT, OPT_CIPHER, OPT_PRIMES, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS genrsa_options[] = { +const OPTIONS genrsa_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"3", OPT_3, '-', "Use 3 for the E value"}, {"F4", OPT_F4, '-', "Use F4 (0x10001) for the E value"}, {"f4", OPT_F4, '-', "Use F4 (0x10001) for the E value"}, {"out", OPT_OUT, 's', "Output the key to specified file"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"passout", OPT_PASSOUT, 's', "Output file pass phrase source"}, {"", OPT_CIPHER, '-', "Encrypt the output with any supported cipher"}, # ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, # endif + {"primes", OPT_PRIMES, 'p', "Specify number of primes"}, {NULL} }; @@ -62,10 +65,10 @@ int genrsa_main(int argc, char **argv) const BIGNUM *e; RSA *rsa = NULL; const EVP_CIPHER *enc = NULL; - int ret = 1, num = DEFBITS, private = 0; + int ret = 1, num = DEFBITS, private = 0, primes = DEFPRIMES; unsigned long f4 = RSA_F4; char *outfile = NULL, *passoutarg = NULL, *passout = NULL; - char *inrand = NULL, *prog, *hexe, *dece; + char *prog, *hexe, *dece; OPTION_CHOICE o; if (bn == NULL || cb == NULL) @@ -97,8 +100,9 @@ opthelp: case OPT_ENGINE: eng = setup_engine(opt_arg(), 0); break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_PASSOUT: passoutarg = opt_arg(); @@ -107,6 +111,10 @@ opthelp: if (!opt_cipher(opt_unknown(), &enc)) goto end; break; + case OPT_PRIMES: + if (!opt_int(opt_arg(), &primes)) + goto end; + break; } } argc = opt_num_rest(); @@ -130,26 +138,16 @@ opthelp: if (out == NULL) goto end; - if (!app_RAND_load_file(NULL, 1) && inrand == NULL - && !RAND_status()) { - BIO_printf(bio_err, - "warning, not much extra random data, consider using the -rand option\n"); - } - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - - BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus\n", - num); + BIO_printf(bio_err, "Generating RSA private key, %d bit long modulus (%d primes)\n", + num, primes); rsa = eng ? RSA_new_method(eng) : RSA_new(); if (rsa == NULL) goto end; - if (!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, cb)) + if (!BN_set_word(bn, f4) + || !RSA_generate_multi_prime_key(rsa, num, primes, bn, cb)) goto end; - app_RAND_write_file(NULL); - RSA_get0_key(rsa, NULL, &e, NULL); hexe = BN_bn2hex(e); dece = BN_bn2dec(e); @@ -176,7 +174,7 @@ opthelp: OPENSSL_free(passout); if (ret != 0) ERR_print_errors(bio_err); - return (ret); + return ret; } static int genrsa_cb(int p, int n, BN_GENCB *cb) diff --git a/apps/nseq.c b/apps/nseq.c index 018d5ebd..a067c915 100644 --- a/apps/nseq.c +++ b/apps/nseq.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,6 +10,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include @@ -18,7 +19,7 @@ typedef enum OPTION_choice { OPT_TOSEQ, OPT_IN, OPT_OUT } OPTION_CHOICE; -OPTIONS nseq_options[] = { +const OPTIONS nseq_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"toseq", OPT_TOSEQ, '-', "Output NS Sequence file"}, {"in", OPT_IN, '<', "Input file"}, @@ -109,5 +110,5 @@ int nseq_main(int argc, char **argv) BIO_free_all(out); NETSCAPE_CERT_SEQUENCE_free(seq); - return (ret); + return ret; } diff --git a/apps/ocsp.c b/apps/ocsp.c index 4b533348..bd16a5b8 100644 --- a/apps/ocsp.c +++ b/apps/ocsp.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,8 +17,6 @@ NON_EMPTY_TRANSLATION_UNIT * on OpenVMS */ # endif -# define USE_SOCKETS - # include # include # include @@ -27,6 +25,7 @@ NON_EMPTY_TRANSLATION_UNIT /* Needs to be included before the openssl headers */ # include "apps.h" +# include "progs.h" # include # include # include @@ -35,21 +34,6 @@ NON_EMPTY_TRANSLATION_UNIT # include # include -# if defined(NETWARE_CLIB) -# ifdef NETWARE_BSDSOCK -# include -# include -# else -# include -# endif -# elif defined(NETWARE_LIBC) -# ifdef NETWARE_BSDSOCK -# include -# else -# include -# endif -# endif - /* Maximum leeway in validity period: default 5 minutes */ # define MAX_VALIDITY_PERIOD (5 * 60) @@ -63,9 +47,10 @@ static void print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, STACK_OF(OPENSSL_STRING) *names, STACK_OF(OCSP_CERTID) *ids, long nsec, long maxage); -static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, - CA_DB *db, X509 *ca, X509 *rcert, +static void make_ocsp_response(BIO *err, OCSP_RESPONSE **resp, OCSP_REQUEST *req, + CA_DB *db, STACK_OF(X509) *ca, X509 *rcert, EVP_PKEY *rkey, const EVP_MD *md, + STACK_OF(OPENSSL_STRING) *sigopts, STACK_OF(X509) *rother, unsigned long flags, int nmin, int ndays, int badsig); @@ -94,12 +79,12 @@ typedef enum OPTION_choice { OPT_VALIDITY_PERIOD, OPT_STATUS_AGE, OPT_SIGNKEY, OPT_REQOUT, OPT_RESPOUT, OPT_PATH, OPT_ISSUER, OPT_CERT, OPT_SERIAL, OPT_INDEX, OPT_CA, OPT_NMIN, OPT_REQUEST, OPT_NDAYS, OPT_RSIGNER, - OPT_RKEY, OPT_ROTHER, OPT_RMD, OPT_HEADER, + OPT_RKEY, OPT_ROTHER, OPT_RMD, OPT_RSIGOPT, OPT_HEADER, OPT_V_ENUM, OPT_MD } OPTION_CHOICE; -OPTIONS ocsp_options[] = { +const OPTIONS ocsp_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"out", OPT_OUTFILE, '>', "Output filename"}, {"timeout", OPT_TIMEOUT, 'p', @@ -108,7 +93,7 @@ OPTIONS ocsp_options[] = { {"host", OPT_HOST, 's', "TCP/IP hostname:port to connect to"}, {"port", OPT_PORT, 'p', "Port to run responder on"}, {"ignore_err", OPT_IGNORE_ERR, '-', - "Ignore Error response from OCSP responder, and retry "}, + "Ignore error on OCSP request or response and continue running"}, {"noverify", OPT_NOVERIFY, '-', "Don't verify response at all"}, {"nonce", OPT_NONCE, '-', "Add OCSP nonce to request"}, {"no_nonce", OPT_NO_NONCE, '-', "Don't add OCSP nonce to request"}, @@ -171,6 +156,7 @@ OPTIONS ocsp_options[] = { {"rkey", OPT_RKEY, '<', "Responder key to sign responses with"}, {"rother", OPT_ROTHER, '<', "Other certificates to include in response"}, {"rmd", OPT_RMD, 's', "Digest Algorithm to use in signature of OCSP response"}, + {"rsigopt", OPT_RSIGOPT, 's', "OCSP response signature parameter in n:v form"}, {"header", OPT_HEADER, 's', "key=value header to add"}, {"", OPT_MD, '-', "Any supported digest algorithm (sha1,sha256, ... )"}, OPT_V_OPTIONS, @@ -181,6 +167,7 @@ int ocsp_main(int argc, char **argv) { BIO *acbio = NULL, *cbio = NULL, *derbio = NULL, *out = NULL; const EVP_MD *cert_id_md = NULL, *rsign_md = NULL; + STACK_OF(OPENSSL_STRING) *rsign_sigopts = NULL; int trailing_md = 0; CA_DB *rdb = NULL; EVP_PKEY *key = NULL, *rkey = NULL; @@ -192,7 +179,8 @@ int ocsp_main(int argc, char **argv) STACK_OF(OPENSSL_STRING) *reqnames = NULL; STACK_OF(X509) *sign_other = NULL, *verify_other = NULL, *rother = NULL; STACK_OF(X509) *issuers = NULL; - X509 *issuer = NULL, *cert = NULL, *rca_cert = NULL; + X509 *issuer = NULL, *cert = NULL; + STACK_OF(X509) *rca_cert = NULL; X509 *signer = NULL, *rsigner = NULL; X509_STORE *store = NULL; X509_VERIFY_PARAM *vpm = NULL; @@ -218,10 +206,10 @@ int ocsp_main(int argc, char **argv) char *prog; reqnames = sk_OPENSSL_STRING_new_null(); - if (!reqnames) + if (reqnames == NULL) goto end; ids = sk_OCSP_CERTID_new_null(); - if (!ids) + if (ids == NULL) goto end; if ((vpm = X509_VERIFY_PARAM_new()) == NULL) return 1; @@ -435,6 +423,12 @@ int ocsp_main(int argc, char **argv) if (!opt_md(opt_arg(), &rsign_md)) goto end; break; + case OPT_RSIGOPT: + if (rsign_sigopts == NULL) + rsign_sigopts = sk_OPENSSL_STRING_new_null(); + if (rsign_sigopts == NULL || !sk_OPENSSL_STRING_push(rsign_sigopts, opt_arg())) + goto end; + break; case OPT_HEADER: header = opt_arg(); value = strchr(header, '='); @@ -470,62 +464,65 @@ int ocsp_main(int argc, char **argv) goto opthelp; /* Have we anything to do? */ - if (!req && !reqin && !respin && !(port && ridx_filename)) + if (req == NULL&& reqin == NULL + && respin == NULL && !(port != NULL && ridx_filename != NULL)) goto opthelp; out = bio_open_default(outfile, 'w', FORMAT_TEXT); if (out == NULL) goto end; - if (!req && (add_nonce != 2)) + if (req == NULL && (add_nonce != 2)) add_nonce = 0; - if (!req && reqin) { + if (req == NULL && reqin != NULL) { derbio = bio_open_default(reqin, 'r', FORMAT_ASN1); if (derbio == NULL) goto end; req = d2i_OCSP_REQUEST_bio(derbio, NULL); BIO_free(derbio); - if (!req) { + if (req == NULL) { BIO_printf(bio_err, "Error reading OCSP request\n"); goto end; } } - if (!req && port) { + if (req == NULL && port != NULL) { acbio = init_responder(port); - if (!acbio) + if (acbio == NULL) goto end; } - if (rsignfile) { - if (!rkeyfile) + if (rsignfile != NULL) { + if (rkeyfile == NULL) rkeyfile = rsignfile; rsigner = load_cert(rsignfile, FORMAT_PEM, "responder certificate"); - if (!rsigner) { + if (rsigner == NULL) { BIO_printf(bio_err, "Error loading responder certificate\n"); goto end; } - rca_cert = load_cert(rca_filename, FORMAT_PEM, "CA certificate"); - if (rcertfile) { + if (!load_certs(rca_filename, &rca_cert, FORMAT_PEM, + NULL, "CA certificate")) + goto end; + if (rcertfile != NULL) { if (!load_certs(rcertfile, &rother, FORMAT_PEM, NULL, "responder other certificates")) goto end; } rkey = load_key(rkeyfile, FORMAT_PEM, 0, NULL, NULL, "responder private key"); - if (!rkey) + if (rkey == NULL) goto end; } - if (acbio) + if (acbio != NULL) BIO_printf(bio_err, "Waiting for OCSP client connections...\n"); - redo_accept: +redo_accept: - if (acbio) { + if (acbio != NULL) { if (!do_responder(&req, &cbio, acbio)) goto end; - if (!req) { + if (req == NULL) { resp = OCSP_response_create(OCSP_RESPONSE_STATUS_MALFORMEDREQUEST, NULL); @@ -534,30 +531,32 @@ int ocsp_main(int argc, char **argv) } } - if (!req && (signfile || reqout || host || add_nonce || ridx_filename)) { + if (req == NULL + && (signfile != NULL || reqout != NULL + || host != NULL || add_nonce || ridx_filename != NULL)) { BIO_printf(bio_err, "Need an OCSP request for this operation!\n"); goto end; } - if (req && add_nonce) + if (req != NULL && add_nonce) OCSP_request_add1_nonce(req, NULL, -1); - if (signfile) { - if (!keyfile) + if (signfile != NULL) { + if (keyfile == NULL) keyfile = signfile; signer = load_cert(signfile, FORMAT_PEM, "signer certificate"); - if (!signer) { + if (signer == NULL) { BIO_printf(bio_err, "Error loading signer certificate\n"); goto end; } - if (sign_certfile) { + if (sign_certfile != NULL) { if (!load_certs(sign_certfile, &sign_other, FORMAT_PEM, NULL, "signer certificates")) goto end; } key = load_key(keyfile, FORMAT_PEM, 0, NULL, NULL, "signer private key"); - if (!key) + if (key == NULL) goto end; if (!OCSP_request_sign @@ -567,10 +566,10 @@ int ocsp_main(int argc, char **argv) } } - if (req_text && req) + if (req_text && req != NULL) OCSP_REQUEST_print(out, req, 0); - if (reqout) { + if (reqout != NULL) { derbio = bio_open_default(reqout, 'w', FORMAT_ASN1); if (derbio == NULL) goto end; @@ -578,43 +577,44 @@ int ocsp_main(int argc, char **argv) BIO_free(derbio); } - if (ridx_filename && (!rkey || !rsigner || !rca_cert)) { + if (ridx_filename != NULL + && (rkey == NULL || rsigner == NULL || rca_cert == NULL)) { BIO_printf(bio_err, "Need a responder certificate, key and CA for this operation!\n"); goto end; } - if (ridx_filename && !rdb) { + if (ridx_filename != NULL && rdb == NULL) { rdb = load_index(ridx_filename, NULL); - if (!rdb) + if (rdb == NULL) goto end; if (!index_index(rdb)) goto end; } - if (rdb) { - make_ocsp_response(&resp, req, rdb, rca_cert, rsigner, rkey, - rsign_md, rother, rflags, nmin, ndays, badsig); - if (cbio) + if (rdb != NULL) { + make_ocsp_response(bio_err, &resp, req, rdb, rca_cert, rsigner, rkey, + rsign_md, rsign_sigopts, rother, rflags, nmin, ndays, badsig); + if (cbio != NULL) send_ocsp_response(cbio, resp); - } else if (host) { + } else if (host != NULL) { # ifndef OPENSSL_NO_SOCK resp = process_responder(req, host, path, port, use_ssl, headers, req_timeout); - if (!resp) + if (resp == NULL) goto end; # else BIO_printf(bio_err, "Error creating connect BIO - sockets not supported.\n"); goto end; # endif - } else if (respin) { + } else if (respin != NULL) { derbio = bio_open_default(respin, 'r', FORMAT_ASN1); if (derbio == NULL) goto end; resp = d2i_OCSP_RESPONSE_bio(derbio, NULL); BIO_free(derbio); - if (!resp) { + if (resp == NULL) { BIO_printf(bio_err, "Error reading OCSP response\n"); goto end; } @@ -625,7 +625,7 @@ int ocsp_main(int argc, char **argv) done_resp: - if (respout) { + if (respout != NULL) { derbio = bio_open_default(respout, 'w', FORMAT_ASN1); if (derbio == NULL) goto end; @@ -647,7 +647,7 @@ int ocsp_main(int argc, char **argv) OCSP_RESPONSE_print(out, resp, 0); /* If running as responder don't verify our own response */ - if (cbio) { + if (cbio != NULL) { /* If not unlimited, see if we took all we should. */ if (accept_count != -1 && --accept_count <= 0) { ret = 0; @@ -661,26 +661,26 @@ int ocsp_main(int argc, char **argv) resp = NULL; goto redo_accept; } - if (ridx_filename) { + if (ridx_filename != NULL) { ret = 0; goto end; } - if (!store) { + if (store == NULL) { store = setup_verify(CAfile, CApath, noCAfile, noCApath); if (!store) goto end; } if (vpmtouched) X509_STORE_set1_param(store, vpm); - if (verify_certfile) { + if (verify_certfile != NULL) { if (!load_certs(verify_certfile, &verify_other, FORMAT_PEM, NULL, "validator certificate")) goto end; } bs = OCSP_response_get1_basic(resp); - if (!bs) { + if (bs == NULL) { BIO_printf(bio_err, "Error parsing response\n"); goto end; } @@ -688,7 +688,7 @@ int ocsp_main(int argc, char **argv) ret = 0; if (!noverify) { - if (req && ((i = OCSP_check_nonce(req, bs)) <= 0)) { + if (req != NULL && ((i = OCSP_check_nonce(req, bs)) <= 0)) { if (i == -1) BIO_printf(bio_err, "WARNING: no nonce in response\n"); else { @@ -708,9 +708,9 @@ int ocsp_main(int argc, char **argv) BIO_printf(bio_err, "Response Verify Failure\n"); ERR_print_errors(bio_err); ret = 1; - } else + } else { BIO_printf(bio_err, "Response verify OK\n"); - + } } print_ocsp_summary(out, bs, req, reqnames, ids, nsec, maxage); @@ -720,16 +720,17 @@ int ocsp_main(int argc, char **argv) X509_free(signer); X509_STORE_free(store); X509_VERIFY_PARAM_free(vpm); + sk_OPENSSL_STRING_free(rsign_sigopts); EVP_PKEY_free(key); EVP_PKEY_free(rkey); X509_free(cert); sk_X509_pop_free(issuers, X509_free); X509_free(rsigner); - X509_free(rca_cert); + sk_X509_pop_free(rca_cert, X509_free); free_index(rdb); BIO_free_all(cbio); BIO_free_all(acbio); - BIO_free(out); + BIO_free_all(out); OCSP_REQUEST_free(req); OCSP_RESPONSE_free(resp); OCSP_BASICRESP_free(bs); @@ -742,7 +743,7 @@ int ocsp_main(int argc, char **argv) OPENSSL_free(tport); OPENSSL_free(tpath); - return (ret); + return ret; } static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, @@ -750,7 +751,8 @@ static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, STACK_OF(OCSP_CERTID) *ids) { OCSP_CERTID *id; - if (!issuer) { + + if (issuer == NULL) { BIO_printf(bio_err, "No issuer certificate specified\n"); return 0; } @@ -759,7 +761,7 @@ static int add_ocsp_cert(OCSP_REQUEST **req, X509 *cert, if (*req == NULL) goto err; id = OCSP_cert_to_id(cert_id_md, cert, issuer); - if (!id || !sk_OCSP_CERTID_push(ids, id)) + if (id == NULL || !sk_OCSP_CERTID_push(ids, id)) goto err; if (!OCSP_request_add0_id(*req, id)) goto err; @@ -778,7 +780,8 @@ static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, X509_NAME *iname; ASN1_BIT_STRING *ikey; ASN1_INTEGER *sno; - if (!issuer) { + + if (issuer == NULL) { BIO_printf(bio_err, "No issuer certificate specified\n"); return 0; } @@ -789,7 +792,7 @@ static int add_ocsp_serial(OCSP_REQUEST **req, char *serial, iname = X509_get_subject_name(issuer); ikey = X509_get0_pubkey_bitstr(issuer); sno = s2i_ASN1_INTEGER(NULL, serial); - if (!sno) { + if (sno == NULL) { BIO_printf(bio_err, "Error converting serial number %s\n", serial); return 0; } @@ -816,7 +819,7 @@ static void print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, int i, status, reason; ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd; - if (!bs || !req || !sk_OPENSSL_STRING_num(names) + if (bs == NULL || req == NULL || !sk_OPENSSL_STRING_num(names) || !sk_OCSP_CERTID_num(ids)) return; @@ -863,16 +866,19 @@ static void print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, } } -static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, - CA_DB *db, X509 *ca, X509 *rcert, +static void make_ocsp_response(BIO *err, OCSP_RESPONSE **resp, OCSP_REQUEST *req, + CA_DB *db, STACK_OF(X509) *ca, X509 *rcert, EVP_PKEY *rkey, const EVP_MD *rmd, + STACK_OF(OPENSSL_STRING) *sigopts, STACK_OF(X509) *rother, unsigned long flags, int nmin, int ndays, int badsig) { ASN1_TIME *thisupd = NULL, *nextupd = NULL; - OCSP_CERTID *cid, *ca_id = NULL; + OCSP_CERTID *cid; OCSP_BASICRESP *bs = NULL; int i, id_count; + EVP_MD_CTX *mctx = NULL; + EVP_PKEY_CTX *pkctx = NULL; id_count = OCSP_request_onereq_count(req); @@ -892,6 +898,8 @@ static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, OCSP_ONEREQ *one; ASN1_INTEGER *serial; char **inf; + int jj; + int found = 0; ASN1_OBJECT *cert_id_md_oid; const EVP_MD *cert_id_md; one = OCSP_request_onereq_get0(req, i); @@ -900,16 +908,22 @@ static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, OCSP_id_get0_info(NULL, &cert_id_md_oid, NULL, NULL, cid); cert_id_md = EVP_get_digestbyobj(cert_id_md_oid); - if (!cert_id_md) { + if (cert_id_md == NULL) { *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR, NULL); goto end; } - OCSP_CERTID_free(ca_id); - ca_id = OCSP_cert_to_id(cert_id_md, NULL, ca); + for (jj = 0; jj < sk_X509_num(ca) && !found; jj++) { + X509 *ca_cert = sk_X509_value(ca, jj); + OCSP_CERTID *ca_id = OCSP_cert_to_id(cert_id_md, NULL, ca_cert); - /* Is this request about our CA? */ - if (OCSP_id_issuer_cmp(ca_id, cid)) { + if (OCSP_id_issuer_cmp(ca_id, cid) == 0) + found = 1; + + OCSP_CERTID_free(ca_id); + } + + if (!found) { OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_UNKNOWN, 0, NULL, thisupd, nextupd); @@ -917,15 +931,15 @@ static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, } OCSP_id_get0_info(NULL, NULL, NULL, &serial, cid); inf = lookup_serial(db, serial); - if (!inf) + if (inf == NULL) { OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_UNKNOWN, 0, NULL, thisupd, nextupd); - else if (inf[DB_type][0] == DB_TYPE_VAL) + } else if (inf[DB_type][0] == DB_TYPE_VAL) { OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_GOOD, 0, NULL, thisupd, nextupd); - else if (inf[DB_type][0] == DB_TYPE_REV) { + } else if (inf[DB_type][0] == DB_TYPE_REV) { ASN1_OBJECT *inst = NULL; ASN1_TIME *revtm = NULL; ASN1_GENERALIZEDTIME *invtm = NULL; @@ -935,10 +949,10 @@ static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, single = OCSP_basic_add1_status(bs, cid, V_OCSP_CERTSTATUS_REVOKED, reason, revtm, thisupd, nextupd); - if (invtm) + if (invtm != NULL) OCSP_SINGLERESP_add1_ext_i2d(single, NID_invalidity_date, invtm, 0, 0); - else if (inst) + else if (inst != NULL) OCSP_SINGLERESP_add1_ext_i2d(single, NID_hold_instruction_code, inst, 0, 0); @@ -950,7 +964,23 @@ static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, OCSP_copy_nonce(bs, req); - OCSP_basic_sign(bs, rcert, rkey, rmd, rother, flags); + mctx = EVP_MD_CTX_new(); + if ( mctx == NULL || !EVP_DigestSignInit(mctx, &pkctx, rmd, NULL, rkey)) { + *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR, NULL); + goto end; + } + for (i = 0; i < sk_OPENSSL_STRING_num(sigopts); i++) { + char *sigopt = sk_OPENSSL_STRING_value(sigopts, i); + + if (pkey_ctrl_string(pkctx, sigopt) <= 0) { + BIO_printf(err, "parameter error \"%s\"\n", sigopt); + ERR_print_errors(bio_err); + *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_INTERNALERROR, + NULL); + goto end; + } + } + OCSP_basic_sign_ctx(bs, rcert, mctx, rother, flags); if (badsig) { const ASN1_OCTET_STRING *sig = OCSP_resp_get0_signature(bs); @@ -960,9 +990,9 @@ static void make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req, *resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs); end: + EVP_MD_CTX_free(mctx); ASN1_TIME_free(thisupd); ASN1_TIME_free(nextupd); - OCSP_CERTID_free(ca_id); OCSP_BASICRESP_free(bs); } @@ -1092,7 +1122,7 @@ static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio) if (*q == ' ') break; if (strncmp(q, " HTTP/1.", 8) != 0) { - BIO_printf(bio_err, "Invalid request -- bad HTTP vesion\n"); + BIO_printf(bio_err, "Invalid request -- bad HTTP version\n"); return 1; } *q = '\0'; @@ -1124,13 +1154,14 @@ static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio) } /* Try to read OCSP request */ - if (getbio) { + if (getbio != NULL) { req = d2i_OCSP_REQUEST_bio(getbio, NULL); BIO_free_all(getbio); - } else + } else { req = d2i_OCSP_REQUEST_bio(cbio, NULL); + } - if (!req) { + if (req == NULL) { BIO_printf(bio_err, "Error parsing OCSP request\n"); ERR_print_errors(bio_err); } @@ -1146,7 +1177,7 @@ static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp) char http_resp[] = "HTTP/1.0 200 OK\r\nContent-type: application/ocsp-response\r\n" "Content-Length: %d\r\n\r\n"; - if (!cbio) + if (cbio == NULL) return 0; BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL)); i2d_OCSP_RESPONSE_bio(cbio, resp); @@ -1224,11 +1255,11 @@ static OCSP_RESPONSE *query_responder(BIO *cbio, const char *host, openssl_fdset(fd, &confds); tv.tv_usec = 0; tv.tv_sec = req_timeout; - if (BIO_should_read(cbio)) + if (BIO_should_read(cbio)) { rv = select(fd + 1, (void *)&confds, NULL, NULL, &tv); - else if (BIO_should_write(cbio)) + } else if (BIO_should_write(cbio)) { rv = select(fd + 1, NULL, (void *)&confds, NULL, &tv); - else { + } else { BIO_puts(bio_err, "Unexpected retry condition\n"); goto err; } @@ -1259,11 +1290,11 @@ OCSP_RESPONSE *process_responder(OCSP_REQUEST *req, OCSP_RESPONSE *resp = NULL; cbio = BIO_new_connect(host); - if (!cbio) { + if (cbio == NULL) { BIO_printf(bio_err, "Error creating connect BIO\n"); goto end; } - if (port) + if (port != NULL) BIO_set_conn_port(cbio, port); if (use_ssl == 1) { BIO *sbio; @@ -1278,7 +1309,7 @@ OCSP_RESPONSE *process_responder(OCSP_REQUEST *req, } resp = query_responder(cbio, host, path, headers, req, req_timeout); - if (!resp) + if (resp == NULL) BIO_printf(bio_err, "Error querying OCSP responder\n"); end: BIO_free_all(cbio); diff --git a/apps/openssl-vms.cnf b/apps/openssl-vms.cnf index 0092a650..a3ca3930 100644 --- a/apps/openssl-vms.cnf +++ b/apps/openssl-vms.cnf @@ -344,3 +344,5 @@ 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/apps/openssl.c b/apps/openssl.c index 2607694f..39b4f2ce 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -7,6 +7,7 @@ * https://www.openssl.org/source/license.html */ +#include #include #include #include @@ -21,26 +22,22 @@ # include #endif #include -#ifdef OPENSSL_FIPS -# include -#endif -#define USE_SOCKETS /* needed for the _O_BINARY defs in the MS world */ #include "s_apps.h" /* Needed to get the other O_xxx flags. */ #ifdef OPENSSL_SYS_VMS # include #endif -#define INCLUDE_FUNCTION_TABLE #include "apps.h" +#define INCLUDE_FUNCTION_TABLE +#include "progs.h" - -#ifdef OPENSSL_NO_CAMELLIA -# define FORMAT "%-15s" -# define COLUMNS 5 -#else -# define FORMAT "%-18s" -# define COLUMNS 4 -#endif +/* Structure to hold the number of columns to be displayed and the + * field width used to display them. + */ +typedef struct { + int columns; + int width; +} DISPLAY_COLUMNS; /* Special sentinel to exit the program. */ #define EXIT_THE_PROGRAM (-1) @@ -54,7 +51,8 @@ static LHASH_OF(FUNCTION) *prog_init(void); static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]); static void list_pkey(void); -static void list_type(FUNC_TYPE ft); +static void list_pkey_meth(void); +static void list_type(FUNC_TYPE ft, int one); static void list_disabled(void); char *default_config_file = NULL; @@ -62,6 +60,20 @@ BIO *bio_in = NULL; BIO *bio_out = NULL; BIO *bio_err = NULL; +static void calculate_columns(DISPLAY_COLUMNS *dc) +{ + FUNCTION *f; + int len, maxlen = 0; + + for (f = functions; f->name != NULL; ++f) + if (f->type == FT_general || f->type == FT_md || f->type == FT_cipher) + if ((len = strlen(f->name)) > maxlen) + maxlen = len; + + dc->width = maxlen + 2; + dc->columns = (80 - 1) / dc->width; +} + static int apps_startup() { #ifdef SIGPIPE @@ -73,18 +85,15 @@ static int apps_startup() | OPENSSL_INIT_LOAD_CONFIG, NULL)) return 0; -#ifndef OPENSSL_NO_UI setup_ui_method(); -#endif return 1; } static void apps_shutdown() { -#ifndef OPENSSL_NO_UI destroy_ui_method(); -#endif + destroy_prefix_method(); } static char *make_config_name() @@ -143,15 +152,8 @@ int main(int argc, char *argv[]) CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); if (getenv("OPENSSL_FIPS")) { -#ifdef OPENSSL_FIPS - if (!FIPS_mode_set(1)) { - ERR_print_errors(bio_err); - return 1; - } -#else BIO_printf(bio_err, "FIPS mode not supported.\n"); return 1; -#endif } if (!apps_startup()) { @@ -254,6 +256,7 @@ int main(int argc, char *argv[]) OPENSSL_free(default_config_file); lh_FUNCTION_free(prog); OPENSSL_free(arg.argv); + app_RAND_write(); BIO_free(bio_in); BIO_free_all(bio_out); @@ -266,19 +269,15 @@ int main(int argc, char *argv[]) EXIT(ret); } -OPTIONS exit_options[] = { - {NULL} -}; - static void list_cipher_fn(const EVP_CIPHER *c, const char *from, const char *to, void *arg) { - if (c) + if (c != NULL) { BIO_printf(arg, "%s\n", EVP_CIPHER_name(c)); - else { - if (!from) + } else { + if (from == NULL) from = ""; - if (!to) + if (to == NULL) to = ""; BIO_printf(arg, "%s => %s\n", from, to); } @@ -287,27 +286,74 @@ static void list_cipher_fn(const EVP_CIPHER *c, static void list_md_fn(const EVP_MD *m, const char *from, const char *to, void *arg) { - if (m) + if (m != NULL) { BIO_printf(arg, "%s\n", EVP_MD_name(m)); - else { - if (!from) + } else { + if (from == NULL) from = ""; - if (!to) + if (to == NULL) to = ""; BIO_printf((BIO *)arg, "%s => %s\n", from, to); } } +static void list_missing_help(void) +{ + const FUNCTION *fp; + const OPTIONS *o; + + for (fp = functions; fp->name != NULL; fp++) { + if ((o = fp->help) != NULL) { + /* If there is help, list what flags are not documented. */ + for ( ; o->name != NULL; o++) { + if (o->helpstr == NULL) + BIO_printf(bio_out, "%s %s\n", fp->name, o->name); + } + } else if (fp->func != dgst_main) { + /* If not aliased to the dgst command, */ + BIO_printf(bio_out, "%s *\n", fp->name); + } + } +} + +static void list_options_for_command(const char *command) +{ + const FUNCTION *fp; + const OPTIONS *o; + + for (fp = functions; fp->name != NULL; fp++) + if (strcmp(fp->name, command) == 0) + break; + if (fp->name == NULL) { + BIO_printf(bio_err, "Invalid command '%s'; type \"help\" for a list.\n", + command); + return; + } + + if ((o = fp->help) == NULL) + return; + + for ( ; o->name != NULL; o++) { + if (o->name == OPT_HELP_STR + || o->name == OPT_MORE_STR + || o->name[0] == '\0') + continue; + BIO_printf(bio_out, "%s %c\n", o->name, o->valtype); + } +} + + /* Unified enum for help and list commands. */ typedef enum HELPLIST_CHOICE { - OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_COMMANDS, OPT_DIGEST_COMMANDS, + OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ONE, + OPT_COMMANDS, OPT_DIGEST_COMMANDS, OPT_OPTIONS, OPT_DIGEST_ALGORITHMS, OPT_CIPHER_COMMANDS, OPT_CIPHER_ALGORITHMS, - OPT_PK_ALGORITHMS, OPT_DISABLED + OPT_PK_ALGORITHMS, OPT_PK_METHOD, OPT_DISABLED, OPT_MISSING_HELP } HELPLIST_CHOICE; -OPTIONS list_options[] = { +const OPTIONS list_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, + {"1", OPT_ONE, '-', "List in one column"}, {"commands", OPT_COMMANDS, '-', "List of standard commands"}, {"digest-commands", OPT_DIGEST_COMMANDS, '-', "List of message digest commands"}, @@ -318,8 +364,14 @@ OPTIONS list_options[] = { "List of cipher algorithms"}, {"public-key-algorithms", OPT_PK_ALGORITHMS, '-', "List of public key algorithms"}, + {"public-key-methods", OPT_PK_METHOD, '-', + "List of public key methods"}, {"disabled", OPT_DISABLED, '-', "List of disabled features"}, + {"missing-help", OPT_MISSING_HELP, '-', + "List missing detailed help strings"}, + {"options", OPT_OPTIONS, 's', + "List options for specified command"}, {NULL} }; @@ -327,7 +379,7 @@ int list_main(int argc, char **argv) { char *prog; HELPLIST_CHOICE o; - int done = 0; + int one = 0, done = 0; prog = opt_init(argc, argv, list_options); while ((o = opt_next()) != OPT_EOF) { @@ -340,17 +392,20 @@ opthelp: case OPT_HELP: opt_help(list_options); break; + case OPT_ONE: + one = 1; + break; case OPT_COMMANDS: - list_type(FT_general); + list_type(FT_general, one); break; case OPT_DIGEST_COMMANDS: - list_type(FT_md); + list_type(FT_md, one); break; case OPT_DIGEST_ALGORITHMS: EVP_MD_do_all_sorted(list_md_fn, bio_out); break; case OPT_CIPHER_COMMANDS: - list_type(FT_cipher); + list_type(FT_cipher, one); break; case OPT_CIPHER_ALGORITHMS: EVP_CIPHER_do_all_sorted(list_cipher_fn, bio_out); @@ -358,9 +413,18 @@ opthelp: case OPT_PK_ALGORITHMS: list_pkey(); break; + case OPT_PK_METHOD: + list_pkey_meth(); + break; case OPT_DISABLED: list_disabled(); break; + case OPT_MISSING_HELP: + list_missing_help(); + break; + case OPT_OPTIONS: + list_options_for_command(opt_arg()); + break; } done = 1; } @@ -375,42 +439,60 @@ opthelp: return 0; } -OPTIONS help_options[] = { - {"help", OPT_HELP, '-', "Display this summary"}, +typedef enum HELP_CHOICE { + OPT_hERR = -1, OPT_hEOF = 0, OPT_hHELP +} HELP_CHOICE; + +const OPTIONS help_options[] = { + {OPT_HELP_STR, 1, '-', "Usage: help [options]\n"}, + {OPT_HELP_STR, 1, '-', " help [command]\n"}, + {"help", OPT_hHELP, '-', "Display this summary"}, {NULL} }; + int help_main(int argc, char **argv) { FUNCTION *fp; int i, nl; FUNC_TYPE tp; char *prog; - HELPLIST_CHOICE o; + HELP_CHOICE o; + DISPLAY_COLUMNS dc; prog = opt_init(argc, argv, help_options); - while ((o = opt_next()) != OPT_EOF) { + while ((o = opt_next()) != OPT_hEOF) { switch (o) { - default: + case OPT_hERR: + case OPT_hEOF: BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); return 1; - case OPT_HELP: + case OPT_hHELP: opt_help(help_options); return 0; } } + if (opt_num_rest() == 1) { + char *new_argv[3]; + + new_argv[0] = opt_rest()[0]; + new_argv[1] = "--help"; + new_argv[2] = NULL; + return do_cmd(prog_init(), 2, new_argv); + } if (opt_num_rest() != 0) { BIO_printf(bio_err, "Usage: %s\n", prog); return 1; } - BIO_printf(bio_err, "\nStandard commands"); + calculate_columns(&dc); + BIO_printf(bio_err, "Standard commands"); i = 0; tp = FT_none; for (fp = functions; fp->name != NULL; fp++) { nl = 0; - if (((i++) % COLUMNS) == 0) { + if (i++ % dc.columns == 0) { BIO_printf(bio_err, "\n"); nl = 1; } @@ -428,29 +510,35 @@ int help_main(int argc, char **argv) "\nCipher commands (see the `enc' command for more details)\n"); } } - BIO_printf(bio_err, FORMAT, fp->name); + BIO_printf(bio_err, "%-*s", dc.width, fp->name); } BIO_printf(bio_err, "\n\n"); return 0; } -int exit_main(int argc, char **argv) -{ - return EXIT_THE_PROGRAM; -} - -static void list_type(FUNC_TYPE ft) +static void list_type(FUNC_TYPE ft, int one) { FUNCTION *fp; int i = 0; + DISPLAY_COLUMNS dc = {0}; - for (fp = functions; fp->name != NULL; fp++) - if (fp->type == ft) { - if ((i++ % COLUMNS) == 0) + if (!one) + calculate_columns(&dc); + + for (fp = functions; fp->name != NULL; fp++) { + if (fp->type != ft) + continue; + if (one) { + BIO_printf(bio_out, "%s\n", fp->name); + } else { + if (i % dc.columns == 0 && i > 0) BIO_printf(bio_out, "\n"); - BIO_printf(bio_out, FORMAT, fp->name); + BIO_printf(bio_out, "%-*s", dc.width, fp->name); + i++; } - BIO_printf(bio_out, "\n"); + } + if (!one) + BIO_printf(bio_out, "\n\n"); } static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) @@ -458,7 +546,7 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) FUNCTION f, *fp; if (argc <= 0 || argv[0] == NULL) - return (0); + return 0; f.name = argv[0]; fp = lh_FUNCTION_retrieve(prog, &f); if (fp == NULL) { @@ -473,7 +561,7 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) } } if (fp != NULL) { - return (fp->func(argc, argv)); + return fp->func(argc, argv); } if ((strncmp(argv[0], "no-", 3)) == 0) { /* @@ -483,7 +571,7 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) f.name = argv[0] + 3; if (lh_FUNCTION_retrieve(prog, &f) == NULL) { BIO_printf(bio_out, "%s\n", argv[0]); - return (0); + return 0; } BIO_printf(bio_out, "%s\n", argv[0] + 3); return 1; @@ -495,7 +583,7 @@ static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[]) BIO_printf(bio_err, "Invalid command '%s'; type \"help\" for a list.\n", argv[0]); - return (1); + return 1; } static void list_pkey(void) @@ -527,6 +615,22 @@ static void list_pkey(void) } } +static void list_pkey_meth(void) +{ + size_t i; + size_t meth_count = EVP_PKEY_meth_get_count(); + + for (i = 0; i < meth_count; i++) { + const EVP_PKEY_METHOD *pmeth = EVP_PKEY_meth_get0(i); + int pkey_id, pkey_flags; + + EVP_PKEY_meth_get0_info(&pkey_id, &pkey_flags, pmeth); + BIO_printf(bio_out, "%s\n", OBJ_nid2ln(pkey_id)); + BIO_printf(bio_out, "\tType: %s Algorithm\n", + pkey_flags & ASN1_PKEY_DYNAMIC ? "External" : "Builtin"); + } +} + static int function_cmp(const FUNCTION * a, const FUNCTION * b) { return strncmp(a->name, b->name, 8); @@ -550,6 +654,9 @@ static int SortFnByName(const void *_f1, const void *_f2) static void list_disabled(void) { BIO_puts(bio_out, "Disabled algorithms:\n"); +#ifdef OPENSSL_NO_ARIA + BIO_puts(bio_out, "ARIA\n"); +#endif #ifdef OPENSSL_NO_BF BIO_puts(bio_out, "BF\n"); #endif @@ -655,6 +762,12 @@ static void list_disabled(void) #ifdef OPENSSL_NO_SEED BIO_puts(bio_out, "SEED\n"); #endif +#ifdef OPENSSL_NO_SM3 + BIO_puts(bio_out, "SM3\n"); +#endif +#ifdef OPENSSL_NO_SM4 + BIO_puts(bio_out, "SM4\n"); +#endif #ifdef OPENSSL_NO_SOCK BIO_puts(bio_out, "SOCK\n"); #endif @@ -686,18 +799,25 @@ static void list_disabled(void) static LHASH_OF(FUNCTION) *prog_init(void) { - LHASH_OF(FUNCTION) *ret; + static LHASH_OF(FUNCTION) *ret = NULL; + static int prog_inited = 0; FUNCTION *f; size_t i; + if (prog_inited) + return ret; + + prog_inited = 1; + /* Sort alphabetically within category. For nicer help displays. */ - for (i = 0, f = functions; f->name != NULL; ++f, ++i) ; + for (i = 0, f = functions; f->name != NULL; ++f, ++i) + ; qsort(functions, i, sizeof(*functions), SortFnByName); if ((ret = lh_FUNCTION_new(function_hash, function_cmp)) == NULL) - return (NULL); + return NULL; for (f = functions; f->name != NULL; f++) (void)lh_FUNCTION_insert(ret, f); - return (ret); + return ret; } diff --git a/apps/openssl.cnf b/apps/openssl.cnf index b3e7444e..32ee9e9f 100644 --- a/apps/openssl.cnf +++ b/apps/openssl.cnf @@ -344,3 +344,5 @@ 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/apps/opt.c b/apps/opt.c index 6e40f648..a9d163a4 100644 --- a/apps/opt.c +++ b/apps/opt.c @@ -1,13 +1,11 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 */ - -/* #define COMPILE_STANDALONE_TEST_DRIVER */ #include "apps.h" #include #if !defined(OPENSSL_SYS_MSDOS) @@ -183,10 +181,10 @@ int opt_format_error(const char *s, unsigned long flags) { OPT_PAIR *ap; - if (flags == OPT_FMT_PEMDER) + if (flags == OPT_FMT_PEMDER) { BIO_printf(bio_err, "%s: Bad format \"%s\"; must be pem or der\n", prog, s); - else { + } else { BIO_printf(bio_err, "%s: Bad format \"%s\"; must be one of:\n", prog, s); for (ap = formats; ap->name; ap++) @@ -266,8 +264,9 @@ int opt_format(const char *s, unsigned long flags, int *result) if ((flags & OPT_FMT_PKCS12) == 0) return opt_format_error(s, flags); *result = FORMAT_PKCS12; - } else + } else { return 0; + } break; } return 1; @@ -277,9 +276,9 @@ int opt_format(const char *s, unsigned long flags, int *result) int opt_cipher(const char *name, const EVP_CIPHER **cipherp) { *cipherp = EVP_get_cipherbyname(name); - if (*cipherp) + if (*cipherp != NULL) return 1; - BIO_printf(bio_err, "%s: Unknown cipher %s\n", prog, name); + BIO_printf(bio_err, "%s: Unrecognized flag %s\n", prog, name); return 0; } @@ -289,9 +288,9 @@ int opt_cipher(const char *name, const EVP_CIPHER **cipherp) int opt_md(const char *name, const EVP_MD **mdp) { *mdp = EVP_get_digestbyname(name); - if (*mdp) + if (*mdp != NULL) return 1; - BIO_printf(bio_err, "%s: Unknown digest %s\n", prog, name); + BIO_printf(bio_err, "%s: Unrecognized flag %s\n", prog, name); return 0; } @@ -327,6 +326,30 @@ int opt_int(const char *value, int *result) return 1; } +static void opt_number_error(const char *v) +{ + size_t i = 0; + struct strstr_pair_st { + char *prefix; + char *name; + } b[] = { + {"0x", "a hexadecimal"}, + {"0X", "a hexadecimal"}, + {"0", "an octal"} + }; + + for (i = 0; i < OSSL_NELEM(b); i++) { + if (strncmp(v, b[i].prefix, strlen(b[i].prefix)) == 0) { + BIO_printf(bio_err, + "%s: Can't parse \"%s\" as %s number\n", + prog, v, b[i].name); + return; + } + } + BIO_printf(bio_err, "%s: Can't parse \"%s\" as a number\n", prog, v); + return; +} + /* Parse a long, put it into *result; return 0 on failure, else 1. */ int opt_long(const char *value, long *result) { @@ -340,8 +363,7 @@ int opt_long(const char *value, long *result) || endp == value || ((l == LONG_MAX || l == LONG_MIN) && errno == ERANGE) || (l == 0 && errno != 0)) { - BIO_printf(bio_err, "%s: Can't parse \"%s\" as a number\n", - prog, value); + opt_number_error(value); errno = oerrno; return 0; } @@ -366,8 +388,7 @@ int opt_imax(const char *value, intmax_t *result) || endp == value || ((m == INTMAX_MAX || m == INTMAX_MIN) && errno == ERANGE) || (m == 0 && errno != 0)) { - BIO_printf(bio_err, "%s: Can't parse \"%s\" as a number\n", - prog, value); + opt_number_error(value); errno = oerrno; return 0; } @@ -389,8 +410,7 @@ int opt_umax(const char *value, uintmax_t *result) || endp == value || (m == UINTMAX_MAX && errno == ERANGE) || (m == 0 && errno != 0)) { - BIO_printf(bio_err, "%s: Can't parse \"%s\" as a number\n", - prog, value); + opt_number_error(value); errno = oerrno; return 0; } @@ -415,8 +435,7 @@ int opt_ulong(const char *value, unsigned long *result) || endptr == value || ((l == ULONG_MAX) && errno == ERANGE) || (l == 0 && errno != 0)) { - BIO_printf(bio_err, "%s: Can't parse \"%s\" as an unsigned number\n", - prog, value); + opt_number_error(value); errno = oerrno; return 0; } @@ -888,90 +907,3 @@ void opt_help(const OPTIONS *list) BIO_printf(bio_err, "%s %s\n", start, help); } } - -#ifdef COMPILE_STANDALONE_TEST_DRIVER -# include - -typedef enum OPTION_choice { - OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_IN, OPT_INFORM, OPT_OUT, OPT_COUNT, OPT_U, OPT_FLAG, - OPT_STR, OPT_NOTUSED -} OPTION_CHOICE; - -static OPTIONS options[] = { - {OPT_HELP_STR, 1, '-', "Usage: %s flags\n"}, - {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, - {"help", OPT_HELP, '-', "Display this summary"}, - {"in", OPT_IN, '<', "input file"}, - {OPT_MORE_STR, 1, '-', "more detail about input"}, - {"inform", OPT_INFORM, 'f', "input file format; defaults to pem"}, - {"out", OPT_OUT, '>', "output file"}, - {"count", OPT_COUNT, 'p', "a counter greater than zero"}, - {"u", OPT_U, 'u', "an unsigned number"}, - {"flag", OPT_FLAG, 0, "just some flag"}, - {"str", OPT_STR, 's', "the magic word"}, - {"areallyverylongoption", OPT_HELP, '-', "long way for help"}, - {NULL} -}; - -BIO *bio_err; - -int app_isdir(const char *name) -{ - struct stat sb; - - return name != NULL && stat(name, &sb) >= 0 && S_ISDIR(sb.st_mode); -} - -int main(int ac, char **av) -{ - OPTION_CHOICE o; - char **rest; - char *prog; - - bio_err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT); - - prog = opt_init(ac, av, options); - while ((o = opt_next()) != OPT_EOF) { - switch (c) { - case OPT_NOTUSED: - case OPT_EOF: - case OPT_ERR: - printf("%s: Usage error; try -help.\n", prog); - return 1; - case OPT_HELP: - opt_help(options); - return 0; - case OPT_IN: - printf("in %s\n", opt_arg()); - break; - case OPT_INFORM: - printf("inform %s\n", opt_arg()); - break; - case OPT_OUT: - printf("out %s\n", opt_arg()); - break; - case OPT_COUNT: - printf("count %s\n", opt_arg()); - break; - case OPT_U: - printf("u %s\n", opt_arg()); - break; - case OPT_FLAG: - printf("flag\n"); - break; - case OPT_STR: - printf("str %s\n", opt_arg()); - break; - } - } - argc = opt_num_rest(); - argv = opt_rest(); - - printf("args = %d\n", argc); - if (argc) - while (*argv) - printf(" %s\n", *argv++); - return 0; -} -#endif diff --git a/apps/passwd.c b/apps/passwd.c index f2b0d9a2..aa516c87 100644 --- a/apps/passwd.c +++ b/apps/passwd.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,26 +7,20 @@ * https://www.openssl.org/source/license.html */ -#if defined OPENSSL_NO_MD5 || defined CHARSET_EBCDIC -# define NO_MD5CRYPT_1 +#include + +#include "apps.h" +#include "progs.h" + +#include +#include +#include +#include +#ifndef OPENSSL_NO_DES +# include #endif - -#if !defined(OPENSSL_NO_DES) || !defined(NO_MD5CRYPT_1) - -# include - -# include "apps.h" - -# include -# include -# include -# include -# ifndef OPENSSL_NO_DES -# include -# endif -# ifndef NO_MD5CRYPT_1 -# include -# endif +#include +#include static unsigned const char cov_2char[64] = { /* from crypto/des/fcrypt.c */ @@ -40,19 +34,31 @@ static unsigned const char cov_2char[64] = { 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A }; +static const char ascii_dollar[] = { 0x24, 0x00 }; + +typedef enum { + passwd_unset = 0, + passwd_crypt, + passwd_md5, + passwd_apr1, + passwd_sha256, + passwd_sha512, + passwd_aixmd5 +} passwd_modes; + static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, char *passwd, BIO *out, int quiet, int table, - int reverse, size_t pw_maxlen, int usecrypt, int use1, - int useapr1); + int reverse, size_t pw_maxlen, passwd_modes mode); typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_IN, OPT_NOVERIFY, OPT_QUIET, OPT_TABLE, OPT_REVERSE, OPT_APR1, - OPT_1, OPT_CRYPT, OPT_SALT, OPT_STDIN + OPT_1, OPT_5, OPT_6, OPT_CRYPT, OPT_AIXMD5, OPT_SALT, OPT_STDIN, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS passwd_options[] = { +const OPTIONS passwd_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"in", OPT_IN, '<', "Read passwords from file"}, {"noverify", OPT_NOVERIFY, '-', @@ -62,13 +68,15 @@ OPTIONS passwd_options[] = { {"reverse", OPT_REVERSE, '-', "Switch table columns"}, {"salt", OPT_SALT, 's', "Use provided salt"}, {"stdin", OPT_STDIN, '-', "Read passwords from stdin"}, -# ifndef NO_MD5CRYPT_1 + {"6", OPT_6, '-', "SHA512-based password algorithm"}, + {"5", OPT_5, '-', "SHA256-based password algorithm"}, {"apr1", OPT_APR1, '-', "MD5-based password algorithm, Apache variant"}, {"1", OPT_1, '-', "MD5-based password algorithm"}, -# endif -# ifndef OPENSSL_NO_DES + {"aixmd5", OPT_AIXMD5, '-', "AIX MD5-based password algorithm"}, +#ifndef OPENSSL_NO_DES {"crypt", OPT_CRYPT, '-', "Standard Unix password algorithm (default)"}, -# endif +#endif + OPT_R_OPTIONS, {NULL} }; @@ -79,12 +87,15 @@ int passwd_main(int argc, char **argv) char *salt_malloc = NULL, *passwd_malloc = NULL, *prog; OPTION_CHOICE o; int in_stdin = 0, pw_source_defined = 0; -# ifndef OPENSSL_NO_UI +#ifndef OPENSSL_NO_UI_CONSOLE int in_noverify = 0; -# endif +#endif int passed_salt = 0, quiet = 0, table = 0, reverse = 0; - int ret = 1, usecrypt = 0, use1 = 0, useapr1 = 0; - size_t passwd_malloc_size = 0, pw_maxlen = 256; + int ret = 1; + passwd_modes mode = passwd_unset; + size_t passwd_malloc_size = 0; + size_t pw_maxlen = 256; /* arbitrary limit, should be enough for most + * passwords */ prog = opt_init(argc, argv, passwd_options); while ((o = opt_next()) != OPT_EOF) { @@ -105,9 +116,9 @@ int passwd_main(int argc, char **argv) pw_source_defined = 1; break; case OPT_NOVERIFY: -# ifndef OPENSSL_NO_UI +#ifndef OPENSSL_NO_UI_CONSOLE in_noverify = 1; -# endif +#endif break; case OPT_QUIET: quiet = 1; @@ -119,13 +130,36 @@ int passwd_main(int argc, char **argv) reverse = 1; break; case OPT_1: - use1 = 1; + if (mode != passwd_unset) + goto opthelp; + mode = passwd_md5; + break; + case OPT_5: + if (mode != passwd_unset) + goto opthelp; + mode = passwd_sha256; + break; + case OPT_6: + if (mode != passwd_unset) + goto opthelp; + mode = passwd_sha512; break; case OPT_APR1: - useapr1 = 1; + if (mode != passwd_unset) + goto opthelp; + mode = passwd_apr1; + break; + case OPT_AIXMD5: + if (mode != passwd_unset) + goto opthelp; + mode = passwd_aixmd5; break; case OPT_CRYPT: - usecrypt = 1; +#ifndef OPENSSL_NO_DES + if (mode != passwd_unset) + goto opthelp; + mode = passwd_crypt; +#endif break; case OPT_SALT: passed_salt = 1; @@ -137,35 +171,31 @@ int passwd_main(int argc, char **argv) in_stdin = 1; pw_source_defined = 1; break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; } } argc = opt_num_rest(); argv = opt_rest(); - if (*argv) { + if (*argv != NULL) { if (pw_source_defined) goto opthelp; pw_source_defined = 1; passwds = argv; } - if (!usecrypt && !use1 && !useapr1) { + if (mode == passwd_unset) { /* use default */ - usecrypt = 1; - } - if (usecrypt + use1 + useapr1 > 1) { - /* conflict */ - goto opthelp; + mode = passwd_crypt; } -# ifdef OPENSSL_NO_DES - if (usecrypt) +#ifdef OPENSSL_NO_DES + if (mode == passwd_crypt) goto opthelp; -# endif -# ifdef NO_MD5CRYPT_1 - if (use1 || useapr1) - goto opthelp; -# endif +#endif if (infile != NULL && in_stdin) { BIO_printf(bio_err, "%s: Can't combine -in and -stdin\n", prog); @@ -182,11 +212,8 @@ int passwd_main(int argc, char **argv) goto end; } - if (usecrypt) + if (mode == passwd_crypt) pw_maxlen = 8; - else if (use1 || useapr1) - pw_maxlen = 256; /* arbitrary limit, should be enough for most - * passwords */ if (passwds == NULL) { /* no passwords on the command line */ @@ -204,7 +231,7 @@ int passwd_main(int argc, char **argv) * avoid rot of not-frequently-used code. */ if (1) { -# ifndef OPENSSL_NO_UI +#ifndef OPENSSL_NO_UI_CONSOLE /* build a null-terminated list */ static char *passwds_static[2] = { NULL, NULL }; @@ -217,7 +244,7 @@ int passwd_main(int argc, char **argv) } passwds[0] = passwd_malloc; } else { -# endif +#endif BIO_printf(bio_err, "password required\n"); goto end; } @@ -230,8 +257,7 @@ int passwd_main(int argc, char **argv) do { /* loop over list of passwords */ passwd = *passwds++; if (!do_passwd(passed_salt, &salt, &salt_malloc, passwd, bio_out, - quiet, table, reverse, pw_maxlen, usecrypt, use1, - useapr1)) + quiet, table, reverse, pw_maxlen, mode)) goto end; } while (*passwds != NULL); } else { @@ -255,7 +281,7 @@ int passwd_main(int argc, char **argv) if (!do_passwd (passed_salt, &salt, &salt_malloc, passwd, bio_out, quiet, - table, reverse, pw_maxlen, usecrypt, use1, useapr1)) + table, reverse, pw_maxlen, mode)) goto end; } done = (r <= 0); @@ -264,14 +290,15 @@ int passwd_main(int argc, char **argv) ret = 0; end: +#if 0 ERR_print_errors(bio_err); +#endif OPENSSL_free(salt_malloc); OPENSSL_free(passwd_malloc); BIO_free(in); - return (ret); + return ret; } -# ifndef NO_MD5CRYPT_1 /* * MD5-based password algorithm (should probably be available as a library * function; then the static buffer would not be acceptable). For magic @@ -286,6 +313,9 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) /* "$apr1$..salt..$.......md5hash..........\0" */ static char out_buf[6 + 9 + 24 + 2]; unsigned char buf[MD5_DIGEST_LENGTH]; + char ascii_magic[5]; /* "apr1" plus '\0' */ + char ascii_salt[9]; /* Max 8 chars plus '\0' */ + char *ascii_passwd = NULL; char *salt_out; int n; unsigned int i; @@ -293,41 +323,72 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) size_t passwd_len, salt_len, magic_len; passwd_len = strlen(passwd); - out_buf[0] = '$'; - out_buf[1] = 0; + + out_buf[0] = 0; magic_len = strlen(magic); + OPENSSL_strlcpy(ascii_magic, magic, sizeof(ascii_magic)); +#ifdef CHARSET_EBCDIC + if ((magic[0] & 0x80) != 0) /* High bit is 1 in EBCDIC alnums */ + ebcdic2ascii(ascii_magic, ascii_magic, magic_len); +#endif - if (magic_len > 4) /* assert it's "1" or "apr1" */ + /* The salt gets truncated to 8 chars */ + OPENSSL_strlcpy(ascii_salt, salt, sizeof(ascii_salt)); + salt_len = strlen(ascii_salt); +#ifdef CHARSET_EBCDIC + ebcdic2ascii(ascii_salt, ascii_salt, salt_len); +#endif + +#ifdef CHARSET_EBCDIC + ascii_passwd = OPENSSL_strdup(passwd); + if (ascii_passwd == NULL) return NULL; + ebcdic2ascii(ascii_passwd, ascii_passwd, passwd_len); + passwd = ascii_passwd; +#endif - OPENSSL_strlcat(out_buf, magic, sizeof(out_buf)); - OPENSSL_strlcat(out_buf, "$", sizeof(out_buf)); - OPENSSL_strlcat(out_buf, salt, sizeof(out_buf)); + if (magic_len > 0) { + OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf)); + + if (magic_len > 4) /* assert it's "1" or "apr1" */ + goto err; + + OPENSSL_strlcat(out_buf, ascii_magic, sizeof(out_buf)); + OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf)); + } + + OPENSSL_strlcat(out_buf, ascii_salt, sizeof(out_buf)); if (strlen(out_buf) > 6 + 8) /* assert "$apr1$..salt.." */ - return NULL; + goto err; - salt_out = out_buf + 2 + magic_len; - salt_len = strlen(salt_out); + salt_out = out_buf; + if (magic_len > 0) + salt_out += 2 + magic_len; if (salt_len > 8) - return NULL; + goto err; md = EVP_MD_CTX_new(); if (md == NULL || !EVP_DigestInit_ex(md, EVP_md5(), NULL) - || !EVP_DigestUpdate(md, passwd, passwd_len) - || !EVP_DigestUpdate(md, "$", 1) - || !EVP_DigestUpdate(md, magic, magic_len) - || !EVP_DigestUpdate(md, "$", 1) - || !EVP_DigestUpdate(md, salt_out, salt_len)) + || !EVP_DigestUpdate(md, passwd, passwd_len)) + goto err; + + if (magic_len > 0) + if (!EVP_DigestUpdate(md, ascii_dollar, 1) + || !EVP_DigestUpdate(md, ascii_magic, magic_len) + || !EVP_DigestUpdate(md, ascii_dollar, 1)) + goto err; + + if (!EVP_DigestUpdate(md, ascii_salt, salt_len)) goto err; md2 = EVP_MD_CTX_new(); if (md2 == NULL || !EVP_DigestInit_ex(md2, EVP_md5(), NULL) || !EVP_DigestUpdate(md2, passwd, passwd_len) - || !EVP_DigestUpdate(md2, salt_out, salt_len) + || !EVP_DigestUpdate(md2, ascii_salt, salt_len) || !EVP_DigestUpdate(md2, passwd, passwd_len) || !EVP_DigestFinal_ex(md2, buf, NULL)) goto err; @@ -356,7 +417,7 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) (i & 1) ? passwd_len : sizeof(buf))) goto err; if (i % 3) { - if (!EVP_DigestUpdate(md2, salt_out, salt_len)) + if (!EVP_DigestUpdate(md2, ascii_salt, salt_len)) goto err; } if (i % 7) { @@ -387,15 +448,15 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) buf_perm[dest] = buf[source]; buf_perm[14] = buf[5]; buf_perm[15] = buf[11]; -# ifndef PEDANTIC /* Unfortunately, this generates a "no +# ifndef PEDANTIC /* Unfortunately, this generates a "no * effect" warning */ assert(16 == sizeof(buf_perm)); -# endif +# endif output = salt_out + salt_len; assert(output == out_buf + strlen(out_buf)); - *output++ = '$'; + *output++ = ascii_dollar[0]; for (i = 0; i < 15; i += 3) { *output++ = cov_2char[buf_perm[i + 2] & 0x3f]; @@ -410,21 +471,309 @@ static char *md5crypt(const char *passwd, const char *magic, const char *salt) *output++ = cov_2char[buf_perm[i] >> 6]; *output = 0; assert(strlen(out_buf) < sizeof(out_buf)); +#ifdef CHARSET_EBCDIC + ascii2ebcdic(out_buf, out_buf, strlen(out_buf)); +#endif } return out_buf; + err: + OPENSSL_free(ascii_passwd); + EVP_MD_CTX_free(md2); + EVP_MD_CTX_free(md); + return NULL; +} + +/* + * SHA based password algorithm, describe by Ulrich Drepper here: + * https://www.akkadia.org/drepper/SHA-crypt.txt + * (note that it's in the public domain) + */ +static char *shacrypt(const char *passwd, const char *magic, const char *salt) +{ + /* Prefix for optional rounds specification. */ + static const char rounds_prefix[] = "rounds="; + /* Maximum salt string length. */ +# define SALT_LEN_MAX 16 + /* Default number of rounds if not explicitly specified. */ +# define ROUNDS_DEFAULT 5000 + /* Minimum number of rounds. */ +# define ROUNDS_MIN 1000 + /* Maximum number of rounds. */ +# define ROUNDS_MAX 999999999 + + /* "$6$rounds=$......salt......$...shahash(up to 86 chars)...\0" */ + static char out_buf[3 + 17 + 17 + 86 + 1]; + unsigned char buf[SHA512_DIGEST_LENGTH]; + unsigned char temp_buf[SHA512_DIGEST_LENGTH]; + size_t buf_size = 0; + char ascii_magic[2]; + char ascii_salt[17]; /* Max 16 chars plus '\0' */ + char *ascii_passwd = NULL; + size_t n; + EVP_MD_CTX *md = NULL, *md2 = NULL; + const EVP_MD *sha = NULL; + size_t passwd_len, salt_len, magic_len; + unsigned int rounds = 5000; /* Default */ + char rounds_custom = 0; + char *p_bytes = NULL; + char *s_bytes = NULL; + char *cp = NULL; + + passwd_len = strlen(passwd); + magic_len = strlen(magic); + + /* assert it's "5" or "6" */ + if (magic_len != 1) + return NULL; + + switch (magic[0]) { + case '5': + sha = EVP_sha256(); + buf_size = 32; + break; + case '6': + sha = EVP_sha512(); + buf_size = 64; + break; + default: + return NULL; + } + + if (strncmp(salt, rounds_prefix, sizeof(rounds_prefix) - 1) == 0) { + const char *num = salt + sizeof(rounds_prefix) - 1; + char *endp; + unsigned long int srounds = strtoul (num, &endp, 10); + if (*endp == '$') { + salt = endp + 1; + if (srounds > ROUNDS_MAX) + rounds = ROUNDS_MAX; + else if (srounds < ROUNDS_MIN) + rounds = ROUNDS_MIN; + else + rounds = (unsigned int)srounds; + rounds_custom = 1; + } else { + return NULL; + } + } + + OPENSSL_strlcpy(ascii_magic, magic, sizeof(ascii_magic)); +#ifdef CHARSET_EBCDIC + if ((magic[0] & 0x80) != 0) /* High bit is 1 in EBCDIC alnums */ + ebcdic2ascii(ascii_magic, ascii_magic, magic_len); +#endif + + /* The salt gets truncated to 16 chars */ + OPENSSL_strlcpy(ascii_salt, salt, sizeof(ascii_salt)); + salt_len = strlen(ascii_salt); +#ifdef CHARSET_EBCDIC + ebcdic2ascii(ascii_salt, ascii_salt, salt_len); +#endif + +#ifdef CHARSET_EBCDIC + ascii_passwd = OPENSSL_strdup(passwd); + if (ascii_passwd == NULL) + return NULL; + ebcdic2ascii(ascii_passwd, ascii_passwd, passwd_len); + passwd = ascii_passwd; +#endif + + out_buf[0] = 0; + OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf)); + OPENSSL_strlcat(out_buf, ascii_magic, sizeof(out_buf)); + OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf)); + if (rounds_custom) { + char tmp_buf[80]; /* "rounds=999999999" */ + sprintf(tmp_buf, "rounds=%u", rounds); +#ifdef CHARSET_EBCDIC + /* In case we're really on a ASCII based platform and just pretend */ + if (tmp_buf[0] != 0x72) /* ASCII 'r' */ + ebcdic2ascii(tmp_buf, tmp_buf, strlen(tmp_buf)); +#endif + OPENSSL_strlcat(out_buf, tmp_buf, sizeof(out_buf)); + OPENSSL_strlcat(out_buf, ascii_dollar, sizeof(out_buf)); + } + OPENSSL_strlcat(out_buf, ascii_salt, sizeof(out_buf)); + + /* assert "$5$rounds=999999999$......salt......" */ + if (strlen(out_buf) > 3 + 17 * rounds_custom + salt_len ) + goto err; + + md = EVP_MD_CTX_new(); + if (md == NULL + || !EVP_DigestInit_ex(md, sha, NULL) + || !EVP_DigestUpdate(md, passwd, passwd_len) + || !EVP_DigestUpdate(md, ascii_salt, salt_len)) + goto err; + + md2 = EVP_MD_CTX_new(); + if (md2 == NULL + || !EVP_DigestInit_ex(md2, sha, NULL) + || !EVP_DigestUpdate(md2, passwd, passwd_len) + || !EVP_DigestUpdate(md2, ascii_salt, salt_len) + || !EVP_DigestUpdate(md2, passwd, passwd_len) + || !EVP_DigestFinal_ex(md2, buf, NULL)) + goto err; + + for (n = passwd_len; n > buf_size; n -= buf_size) { + if (!EVP_DigestUpdate(md, buf, buf_size)) + goto err; + } + if (!EVP_DigestUpdate(md, buf, n)) + goto err; + + n = passwd_len; + while (n) { + if (!EVP_DigestUpdate(md, + (n & 1) ? buf : (unsigned const char *)passwd, + (n & 1) ? buf_size : passwd_len)) + goto err; + n >>= 1; + } + if (!EVP_DigestFinal_ex(md, buf, NULL)) + return NULL; + + /* P sequence */ + if (!EVP_DigestInit_ex(md2, sha, NULL)) + goto err; + + for (n = passwd_len; n > 0; n--) + if (!EVP_DigestUpdate(md2, passwd, passwd_len)) + goto err; + + if (!EVP_DigestFinal_ex(md2, temp_buf, NULL)) + return NULL; + + if ((p_bytes = OPENSSL_zalloc(passwd_len)) == NULL) + goto err; + for (cp = p_bytes, n = passwd_len; n > buf_size; n -= buf_size, cp += buf_size) + memcpy(cp, temp_buf, buf_size); + memcpy(cp, temp_buf, n); + + /* S sequence */ + if (!EVP_DigestInit_ex(md2, sha, NULL)) + goto err; + + for (n = 16 + buf[0]; n > 0; n--) + if (!EVP_DigestUpdate(md2, ascii_salt, salt_len)) + goto err; + + if (!EVP_DigestFinal_ex(md2, temp_buf, NULL)) + return NULL; + + if ((s_bytes = OPENSSL_zalloc(salt_len)) == NULL) + goto err; + for (cp = s_bytes, n = salt_len; n > buf_size; n -= buf_size, cp += buf_size) + memcpy(cp, temp_buf, buf_size); + memcpy(cp, temp_buf, n); + + for (n = 0; n < rounds; n++) { + if (!EVP_DigestInit_ex(md2, sha, NULL)) + goto err; + if (!EVP_DigestUpdate(md2, + (n & 1) ? (unsigned const char *)p_bytes : buf, + (n & 1) ? passwd_len : buf_size)) + goto err; + if (n % 3) { + if (!EVP_DigestUpdate(md2, s_bytes, salt_len)) + goto err; + } + if (n % 7) { + if (!EVP_DigestUpdate(md2, p_bytes, passwd_len)) + goto err; + } + if (!EVP_DigestUpdate(md2, + (n & 1) ? buf : (unsigned const char *)p_bytes, + (n & 1) ? buf_size : passwd_len)) + goto err; + if (!EVP_DigestFinal_ex(md2, buf, NULL)) + goto err; + } + EVP_MD_CTX_free(md2); + EVP_MD_CTX_free(md); + md2 = NULL; + md = NULL; + OPENSSL_free(p_bytes); + OPENSSL_free(s_bytes); + p_bytes = NULL; + s_bytes = NULL; + + cp = out_buf + strlen(out_buf); + *cp++ = ascii_dollar[0]; + +# define b64_from_24bit(B2, B1, B0, N) \ + do { \ + unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ + int i = (N); \ + while (i-- > 0) \ + { \ + *cp++ = cov_2char[w & 0x3f]; \ + w >>= 6; \ + } \ + } while (0) + + switch (magic[0]) { + case '5': + b64_from_24bit (buf[0], buf[10], buf[20], 4); + b64_from_24bit (buf[21], buf[1], buf[11], 4); + b64_from_24bit (buf[12], buf[22], buf[2], 4); + b64_from_24bit (buf[3], buf[13], buf[23], 4); + b64_from_24bit (buf[24], buf[4], buf[14], 4); + b64_from_24bit (buf[15], buf[25], buf[5], 4); + b64_from_24bit (buf[6], buf[16], buf[26], 4); + b64_from_24bit (buf[27], buf[7], buf[17], 4); + b64_from_24bit (buf[18], buf[28], buf[8], 4); + b64_from_24bit (buf[9], buf[19], buf[29], 4); + b64_from_24bit (0, buf[31], buf[30], 3); + break; + case '6': + b64_from_24bit (buf[0], buf[21], buf[42], 4); + b64_from_24bit (buf[22], buf[43], buf[1], 4); + b64_from_24bit (buf[44], buf[2], buf[23], 4); + b64_from_24bit (buf[3], buf[24], buf[45], 4); + b64_from_24bit (buf[25], buf[46], buf[4], 4); + b64_from_24bit (buf[47], buf[5], buf[26], 4); + b64_from_24bit (buf[6], buf[27], buf[48], 4); + b64_from_24bit (buf[28], buf[49], buf[7], 4); + b64_from_24bit (buf[50], buf[8], buf[29], 4); + b64_from_24bit (buf[9], buf[30], buf[51], 4); + b64_from_24bit (buf[31], buf[52], buf[10], 4); + b64_from_24bit (buf[53], buf[11], buf[32], 4); + b64_from_24bit (buf[12], buf[33], buf[54], 4); + b64_from_24bit (buf[34], buf[55], buf[13], 4); + b64_from_24bit (buf[56], buf[14], buf[35], 4); + b64_from_24bit (buf[15], buf[36], buf[57], 4); + b64_from_24bit (buf[37], buf[58], buf[16], 4); + b64_from_24bit (buf[59], buf[17], buf[38], 4); + b64_from_24bit (buf[18], buf[39], buf[60], 4); + b64_from_24bit (buf[40], buf[61], buf[19], 4); + b64_from_24bit (buf[62], buf[20], buf[41], 4); + b64_from_24bit (0, 0, buf[63], 2); + break; + default: + goto err; + } + *cp = '\0'; +#ifdef CHARSET_EBCDIC + ascii2ebcdic(out_buf, out_buf, strlen(out_buf)); +#endif + + return out_buf; + err: EVP_MD_CTX_free(md2); EVP_MD_CTX_free(md); + OPENSSL_free(p_bytes); + OPENSSL_free(s_bytes); + OPENSSL_free(ascii_passwd); return NULL; } -# endif static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, char *passwd, BIO *out, int quiet, int table, - int reverse, size_t pw_maxlen, int usecrypt, int use1, - int useapr1) + int reverse, size_t pw_maxlen, passwd_modes mode) { char *hash = NULL; @@ -433,36 +782,34 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, /* first make sure we have a salt */ if (!passed_salt) { -# ifndef OPENSSL_NO_DES - if (usecrypt) { - if (*salt_malloc_p == NULL) - *salt_p = *salt_malloc_p = app_malloc(3, "salt buffer"); - if (RAND_bytes((unsigned char *)*salt_p, 2) <= 0) - goto end; - (*salt_p)[0] = cov_2char[(*salt_p)[0] & 0x3f]; /* 6 bits */ - (*salt_p)[1] = cov_2char[(*salt_p)[1] & 0x3f]; /* 6 bits */ - (*salt_p)[2] = 0; -# ifdef CHARSET_EBCDIC - ascii2ebcdic(*salt_p, *salt_p, 2); /* des_crypt will convert back - * to ASCII */ -# endif - } -# endif /* !OPENSSL_NO_DES */ + size_t saltlen = 0; + size_t i; -# ifndef NO_MD5CRYPT_1 - if (use1 || useapr1) { - int i; +#ifndef OPENSSL_NO_DES + if (mode == passwd_crypt) + saltlen = 2; +#endif /* !OPENSSL_NO_DES */ - if (*salt_malloc_p == NULL) - *salt_p = *salt_malloc_p = app_malloc(9, "salt buffer"); - if (RAND_bytes((unsigned char *)*salt_p, 8) <= 0) - goto end; + if (mode == passwd_md5 || mode == passwd_apr1 || mode == passwd_aixmd5) + saltlen = 8; - for (i = 0; i < 8; i++) - (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */ - (*salt_p)[8] = 0; - } -# endif /* !NO_MD5CRYPT_1 */ + if (mode == passwd_sha256 || mode == passwd_sha512) + saltlen = 16; + + assert(saltlen != 0); + + if (*salt_malloc_p == NULL) + *salt_p = *salt_malloc_p = app_malloc(saltlen + 1, "salt buffer"); + if (RAND_bytes((unsigned char *)*salt_p, saltlen) <= 0) + goto end; + + for (i = 0; i < saltlen; i++) + (*salt_p)[i] = cov_2char[(*salt_p)[i] & 0x3f]; /* 6 bits */ + (*salt_p)[i] = 0; +# ifdef CHARSET_EBCDIC + /* The password encryption funtion will convert back to ASCII */ + ascii2ebcdic(*salt_p, *salt_p, saltlen); +# endif } assert(*salt_p != NULL); @@ -481,14 +828,16 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, assert(strlen(passwd) <= pw_maxlen); /* now compute password hash */ -# ifndef OPENSSL_NO_DES - if (usecrypt) +#ifndef OPENSSL_NO_DES + if (mode == passwd_crypt) hash = DES_crypt(passwd, *salt_p); -# endif -# ifndef NO_MD5CRYPT_1 - if (use1 || useapr1) - hash = md5crypt(passwd, (use1 ? "1" : "apr1"), *salt_p); -# endif +#endif + if (mode == passwd_md5 || mode == passwd_apr1) + hash = md5crypt(passwd, (mode == passwd_md5 ? "1" : "apr1"), *salt_p); + if (mode == passwd_aixmd5) + hash = md5crypt(passwd, "", *salt_p); + if (mode == passwd_sha256 || mode == passwd_sha512) + hash = shacrypt(passwd, (mode == passwd_sha256 ? "5" : "6"), *salt_p); assert(hash != NULL); if (table && !reverse) @@ -502,11 +851,3 @@ static int do_passwd(int passed_salt, char **salt_p, char **salt_malloc_p, end: return 0; } -#else - -int passwd_main(int argc, char **argv) -{ - BIO_printf(bio_err, "Program not available.\n"); - return (1); -} -#endif diff --git a/apps/pkcs12.c b/apps/pkcs12.c index 85f649d8..c8fc452e 100644 --- a/apps/pkcs12.c +++ b/apps/pkcs12.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,6 +16,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -27,6 +28,8 @@ NON_EMPTY_TRANSLATION_UNIT # define CLCERTS 0x8 # define CACERTS 0x10 +#define PASSWD_BUF_SIZE 2048 + static int get_cert_chain(X509 *cert, X509_STORE *store, STACK_OF(X509) **chain); int dump_certs_keys_p12(BIO *out, const PKCS12 *p12, @@ -51,12 +54,13 @@ typedef enum OPTION_choice { OPT_CACERTS, OPT_NOOUT, OPT_INFO, OPT_CHAIN, OPT_TWOPASS, OPT_NOMACVER, OPT_DESCERT, OPT_EXPORT, OPT_NOITER, OPT_MACITER, OPT_NOMACITER, OPT_NOMAC, OPT_LMK, OPT_NODES, OPT_MACALG, OPT_CERTPBE, OPT_KEYPBE, - OPT_RAND, OPT_INKEY, OPT_CERTFILE, OPT_NAME, OPT_CSP, OPT_CANAME, + OPT_INKEY, OPT_CERTFILE, OPT_NAME, OPT_CSP, OPT_CANAME, OPT_IN, OPT_OUT, OPT_PASSIN, OPT_PASSOUT, OPT_PASSWORD, OPT_CAPATH, - OPT_CAFILE, OPT_NOCAPATH, OPT_NOCAFILE, OPT_ENGINE + OPT_CAFILE, OPT_NOCAPATH, OPT_NOCAFILE, OPT_ENGINE, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS pkcs12_options[] = { +const OPTIONS pkcs12_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"nokeys", OPT_NOKEYS, '-', "Don't output private keys"}, {"keyex", OPT_KEYEX, '-', "Set MS key exchange type"}, @@ -89,8 +93,7 @@ OPTIONS pkcs12_options[] = { {"macalg", OPT_MACALG, 's', "Digest algorithm used in MAC (default SHA1)"}, {"keypbe", OPT_KEYPBE, 's', "Private key PBE algorithm (default 3DES)"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"inkey", OPT_INKEY, 's', "Private key if not infile"}, {"certfile", OPT_CERTFILE, '<', "Load certs from file"}, {"name", OPT_NAME, 's', "Use name as friendly name"}, @@ -119,7 +122,7 @@ int pkcs12_main(int argc, char **argv) { char *infile = NULL, *outfile = NULL, *keyname = NULL, *certfile = NULL; char *name = NULL, *csp_name = NULL; - char pass[2048] = "", macpass[2048] = ""; + char pass[PASSWD_BUF_SIZE] = "", macpass[PASSWD_BUF_SIZE] = ""; int export_cert = 0, options = 0, chain = 0, twopass = 0, keytype = 0; int iter = PKCS12_DEFAULT_ITER, maciter = PKCS12_DEFAULT_ITER; # ifndef OPENSSL_NO_RC2 @@ -131,7 +134,7 @@ int pkcs12_main(int argc, char **argv) int ret = 1, macver = 1, add_lmk = 0, private = 0; int noprompt = 0; char *passinarg = NULL, *passoutarg = NULL, *passarg = NULL; - char *passin = NULL, *passout = NULL, *inrand = NULL, *macalg = NULL; + char *passin = NULL, *passout = NULL, *macalg = NULL; char *cpass = NULL, *mpass = NULL, *badpass = NULL; const char *CApath = NULL, *CAfile = NULL, *prog; int noCApath = 0, noCAfile = 0; @@ -223,8 +226,9 @@ int pkcs12_main(int argc, char **argv) if (!set_pbe(&key_pbe, opt_arg())) goto opthelp; break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_INKEY: keyname = opt_arg(); @@ -285,7 +289,7 @@ int pkcs12_main(int argc, char **argv) private = 1; - if (passarg) { + if (passarg != NULL) { if (export_cert) passoutarg = passarg; else @@ -297,14 +301,14 @@ int pkcs12_main(int argc, char **argv) goto end; } - if (!cpass) { + if (cpass == NULL) { if (export_cert) cpass = passout; else cpass = passin; } - if (cpass) { + if (cpass != NULL) { mpass = cpass; noprompt = 1; } else { @@ -312,18 +316,12 @@ int pkcs12_main(int argc, char **argv) mpass = macpass; } - if (export_cert || inrand) { - app_RAND_load_file(NULL, (inrand != NULL)); - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - } - if (twopass) { + /* To avoid bit rot */ if (1) { -#ifndef OPENSSL_NO_UI - if (EVP_read_pw_string - (macpass, sizeof(macpass), "Enter MAC Password:", export_cert)) { +#ifndef OPENSSL_NO_UI_CONSOLE + if (EVP_read_pw_string( + macpass, sizeof(macpass), "Enter MAC Password:", export_cert)) { BIO_printf(bio_err, "Can't read Password\n"); goto end; } @@ -353,7 +351,7 @@ int pkcs12_main(int argc, char **argv) if (!(options & NOKEYS)) { key = load_key(keyname ? keyname : infile, FORMAT_PEM, 1, passin, e, "private key"); - if (!key) + if (key == NULL) goto export_end; } @@ -363,7 +361,7 @@ int pkcs12_main(int argc, char **argv) "certificates")) goto export_end; - if (key) { + if (key != NULL) { /* Look for matching private key */ for (i = 0; i < sk_X509_num(certs); i++) { x = sk_X509_value(certs, i); @@ -377,7 +375,7 @@ int pkcs12_main(int argc, char **argv) break; } } - if (!ucert) { + if (ucert == NULL) { BIO_printf(bio_err, "No certificate matches private key\n"); goto export_end; @@ -387,7 +385,7 @@ int pkcs12_main(int argc, char **argv) } /* Add any more certificates asked for */ - if (certfile) { + if (certfile != NULL) { if (!load_certs(certfile, &certs, FORMAT_PEM, NULL, "certificates from certfile")) goto export_end; @@ -429,19 +427,20 @@ int pkcs12_main(int argc, char **argv) X509_alias_set1(sk_X509_value(certs, i), catmp, -1); } - if (csp_name && key) + if (csp_name != NULL && key != NULL) EVP_PKEY_add1_attr_by_NID(key, NID_ms_csp_name, MBSTRING_ASC, (unsigned char *)csp_name, -1); - if (add_lmk && key) + if (add_lmk && key != NULL) EVP_PKEY_add1_attr_by_NID(key, NID_LocalKeySet, 0, NULL, -1); if (!noprompt) { + /* To avoid bit rot */ if (1) { -#ifndef OPENSSL_NO_UI - if (EVP_read_pw_string(pass, sizeof(pass), "Enter Export Password:", - 1)) { +#ifndef OPENSSL_NO_UI_CONSOLE + if (EVP_read_pw_string(pass, sizeof(pass), + "Enter Export Password:", 1)) { BIO_printf(bio_err, "Can't read Password\n"); goto export_end; } @@ -505,7 +504,7 @@ int pkcs12_main(int argc, char **argv) if (!noprompt) { if (1) { -#ifndef OPENSSL_NO_UI +#ifndef OPENSSL_NO_UI_CONSOLE if (EVP_read_pw_string(pass, sizeof(pass), "Enter Import Password:", 0)) { BIO_printf(bio_err, "Can't read Password\n"); @@ -525,12 +524,20 @@ int pkcs12_main(int argc, char **argv) const ASN1_INTEGER *tmaciter; const X509_ALGOR *macalgid; const ASN1_OBJECT *macobj; - PKCS12_get0_mac(NULL, &macalgid, NULL, &tmaciter, p12); + const ASN1_OCTET_STRING *tmac; + const ASN1_OCTET_STRING *tsalt; + + PKCS12_get0_mac(&tmac, &macalgid, &tsalt, &tmaciter, p12); + /* current hash algorithms do not use parameters so extract just name, + in future alg_print() may be needed */ X509_ALGOR_get0(&macobj, NULL, NULL, macalgid); - BIO_puts(bio_err, "MAC:"); + BIO_puts(bio_err, "MAC: "); i2a_ASN1_OBJECT(bio_err, macobj); - BIO_printf(bio_err, " Iteration %ld\n", - tmaciter != NULL ? ASN1_INTEGER_get(tmaciter) : 1L); + BIO_printf(bio_err, ", Iteration %ld\n", + tmaciter != NULL ? ASN1_INTEGER_get(tmaciter) : 1L); + BIO_printf(bio_err, "MAC length: %ld, salt length: %ld\n", + tmac != NULL ? ASN1_STRING_length(tmac) : 0L, + tsalt != NULL ? ASN1_STRING_length(tsalt) : 0L); } if (macver) { /* If we enter empty password try no password first */ @@ -572,8 +579,6 @@ int pkcs12_main(int argc, char **argv) ret = 0; end: PKCS12_free(p12); - if (export_cert || inrand) - app_RAND_write_file(NULL); release_engine(e); BIO_free(in); BIO_free_all(out); @@ -581,7 +586,7 @@ int pkcs12_main(int argc, char **argv) OPENSSL_free(badpass); OPENSSL_free(passin); OPENSSL_free(passout); - return (ret); + return ret; } int dump_certs_keys_p12(BIO *out, const PKCS12 *p12, const char *pass, @@ -609,8 +614,9 @@ int dump_certs_keys_p12(BIO *out, const PKCS12 *p12, const char *pass, alg_print(p7->d.encrypted->enc_data->algorithm); } bags = PKCS12_unpack_p7encdata(p7, pass, passlen); - } else + } else { continue; + } if (!bags) goto err; if (!dump_certs_pkeys_bags(out, bags, pass, passlen, @@ -785,7 +791,7 @@ static int alg_print(const X509_ALGOR *alg) if (aparamtype == V_ASN1_SEQUENCE) pbe2 = ASN1_item_unpack(aparam, ASN1_ITEM_rptr(PBE2PARAM)); if (pbe2 == NULL) { - BIO_puts(bio_err, ""); + BIO_puts(bio_err, ", "); goto done; } X509_ALGOR_get0(&aoid, &aparamtype, &aparam, pbe2->keyfunc); @@ -801,7 +807,7 @@ static int alg_print(const X509_ALGOR *alg) if (aparamtype == V_ASN1_SEQUENCE) kdf = ASN1_item_unpack(aparam, ASN1_ITEM_rptr(PBKDF2PARAM)); if (kdf == NULL) { - BIO_puts(bio_err, ""); + BIO_puts(bio_err, ", "); goto done; } @@ -814,13 +820,31 @@ static int alg_print(const X509_ALGOR *alg) BIO_printf(bio_err, ", Iteration %ld, PRF %s", ASN1_INTEGER_get(kdf->iter), OBJ_nid2sn(prfnid)); PBKDF2PARAM_free(kdf); +#ifndef OPENSSL_NO_SCRYPT + } else if (pbenid == NID_id_scrypt) { + SCRYPT_PARAMS *kdf = NULL; + + if (aparamtype == V_ASN1_SEQUENCE) + kdf = ASN1_item_unpack(aparam, ASN1_ITEM_rptr(SCRYPT_PARAMS)); + if (kdf == NULL) { + BIO_puts(bio_err, ", "); + goto done; + } + BIO_printf(bio_err, ", Salt length: %d, Cost(N): %ld, " + "Block size(r): %ld, Paralelizm(p): %ld", + ASN1_STRING_length(kdf->salt), + ASN1_INTEGER_get(kdf->costParameter), + ASN1_INTEGER_get(kdf->blockSize), + ASN1_INTEGER_get(kdf->parallelizationParameter)); + SCRYPT_PARAMS_free(kdf); +#endif } PBE2PARAM_free(pbe2); } else { if (aparamtype == V_ASN1_SEQUENCE) pbe = ASN1_item_unpack(aparam, ASN1_ITEM_rptr(PBEPARAM)); if (pbe == NULL) { - BIO_puts(bio_err, ""); + BIO_puts(bio_err, ", "); goto done; } BIO_printf(bio_err, ", Iteration %ld", ASN1_INTEGER_get(pbe->iter)); @@ -874,8 +898,9 @@ int print_attribs(BIO *out, const STACK_OF(X509_ATTRIBUTE) *attrlst, if (attr_nid == NID_undef) { i2a_ASN1_OBJECT(out, attr_obj); BIO_printf(out, ": "); - } else + } else { BIO_printf(out, "%s: ", OBJ_nid2ln(attr_nid)); + } if (X509_ATTRIBUTE_count(attr)) { av = X509_ATTRIBUTE_get0_type(attr, 0); @@ -903,8 +928,9 @@ int print_attribs(BIO *out, const STACK_OF(X509_ATTRIBUTE) *attrlst, BIO_printf(out, "\n", av->type); break; } - } else + } else { BIO_printf(out, "\n"); + } } return 1; } diff --git a/apps/pkcs7.c b/apps/pkcs7.c index 209e30d6..c3e9f5c6 100644 --- a/apps/pkcs7.c +++ b/apps/pkcs7.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,6 +12,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -25,7 +26,7 @@ typedef enum OPTION_choice { OPT_TEXT, OPT_PRINT, OPT_PRINT_CERTS, OPT_ENGINE } OPTION_CHOICE; -OPTIONS pkcs7_options[] = { +const OPTIONS pkcs7_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format - DER or PEM"}, {"in", OPT_IN, '<', "Input file"}, @@ -163,7 +164,7 @@ int pkcs7_main(int argc, char **argv) for (i = 0; i < sk_X509_CRL_num(crls); i++) { crl = sk_X509_CRL_value(crls, i); - X509_CRL_print(out, crl); + X509_CRL_print_ex(out, crl, get_nameopt()); if (!noout) PEM_write_bio_X509_CRL(out, crl); @@ -193,5 +194,5 @@ int pkcs7_main(int argc, char **argv) release_engine(e); BIO_free(in); BIO_free_all(out); - return (ret); + return ret; } diff --git a/apps/pkcs8.c b/apps/pkcs8.c index 0874370d..20553656 100644 --- a/apps/pkcs8.c +++ b/apps/pkcs8.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -24,10 +25,11 @@ typedef enum OPTION_choice { OPT_SCRYPT, OPT_SCRYPT_N, OPT_SCRYPT_R, OPT_SCRYPT_P, #endif OPT_V2, OPT_V1, OPT_V2PRF, OPT_ITER, OPT_PASSIN, OPT_PASSOUT, - OPT_TRADITIONAL + OPT_TRADITIONAL, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS pkcs8_options[] = { +const OPTIONS pkcs8_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format (DER or PEM)"}, {"outform", OPT_OUTFORM, 'F', "Output format (DER or PEM)"}, @@ -36,6 +38,7 @@ OPTIONS pkcs8_options[] = { {"topk8", OPT_TOPK8, '-', "Output PKCS8 file"}, {"noiter", OPT_NOITER, '-', "Use 1 as iteration count"}, {"nocrypt", OPT_NOCRYPT, '-', "Use or expect unencrypted private key"}, + OPT_R_OPTIONS, {"v2", OPT_V2, 's', "Use PKCS#5 v2.0 and cipher"}, {"v1", OPT_V1, 's', "Use PKCS#5 v1.5 and cipher"}, {"v2prf", OPT_V2PRF, 's', "Set the PRF algorithm to use with PKCS#5 v2.0"}, @@ -65,7 +68,7 @@ int pkcs8_main(int argc, char **argv) const EVP_CIPHER *cipher = NULL; char *infile = NULL, *outfile = NULL; char *passinarg = NULL, *passoutarg = NULL, *prog; -#ifndef OPENSSL_NO_UI +#ifndef OPENSSL_NO_UI_CONSOLE char pass[APP_PASS_LEN]; #endif char *passin = NULL, *passout = NULL, *p8pass = NULL; @@ -112,6 +115,10 @@ int pkcs8_main(int argc, char **argv) case OPT_NOCRYPT: nocrypt = 1; break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; case OPT_TRADITIONAL: traditional = 1; break; @@ -196,7 +203,7 @@ int pkcs8_main(int argc, char **argv) if (topk8) { pkey = load_key(infile, informat, 1, passin, e, "key"); - if (!pkey) + if (pkey == NULL) goto end; if ((p8inf = EVP_PKEY2PKCS8(pkey)) == NULL) { BIO_printf(bio_err, "Error converting key\n"); @@ -205,11 +212,11 @@ int pkcs8_main(int argc, char **argv) } if (nocrypt) { assert(private); - if (outformat == FORMAT_PEM) + if (outformat == FORMAT_PEM) { PEM_write_bio_PKCS8_PRIV_KEY_INFO(out, p8inf); - else if (outformat == FORMAT_ASN1) + } else if (outformat == FORMAT_ASN1) { i2d_PKCS8_PRIV_KEY_INFO_bio(out, p8inf); - else { + } else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } @@ -232,10 +239,11 @@ int pkcs8_main(int argc, char **argv) ERR_print_errors(bio_err); goto end; } - if (passout) + if (passout != NULL) { p8pass = passout; - else if (1) { -#ifndef OPENSSL_NO_UI + } else if (1) { + /* To avoid bit rot */ +#ifndef OPENSSL_NO_UI_CONSOLE p8pass = pass; if (EVP_read_pw_string (pass, sizeof(pass), "Enter Encryption Password:", 1)) { @@ -247,7 +255,6 @@ int pkcs8_main(int argc, char **argv) BIO_printf(bio_err, "Password required\n"); goto end; } - app_RAND_load_file(NULL, 0); p8 = PKCS8_set0_pbe(p8pass, strlen(p8pass), p8inf, pbe); if (p8 == NULL) { X509_ALGOR_free(pbe); @@ -255,7 +262,6 @@ int pkcs8_main(int argc, char **argv) ERR_print_errors(bio_err); goto end; } - app_RAND_write_file(NULL); assert(private); if (outformat == FORMAT_PEM) PEM_write_bio_PKCS8(out, p8); @@ -272,33 +278,33 @@ int pkcs8_main(int argc, char **argv) } if (nocrypt) { - if (informat == FORMAT_PEM) + if (informat == FORMAT_PEM) { p8inf = PEM_read_bio_PKCS8_PRIV_KEY_INFO(in, NULL, NULL, NULL); - else if (informat == FORMAT_ASN1) + } else if (informat == FORMAT_ASN1) { p8inf = d2i_PKCS8_PRIV_KEY_INFO_bio(in, NULL); - else { + } else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } } else { - if (informat == FORMAT_PEM) + if (informat == FORMAT_PEM) { p8 = PEM_read_bio_PKCS8(in, NULL, NULL, NULL); - else if (informat == FORMAT_ASN1) + } else if (informat == FORMAT_ASN1) { p8 = d2i_PKCS8_bio(in, NULL); - else { + } else { BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } - if (!p8) { + if (p8 == NULL) { BIO_printf(bio_err, "Error reading key\n"); ERR_print_errors(bio_err); goto end; } - if (passin) + if (passin != NULL) { p8pass = passin; - else if (1) { -#ifndef OPENSSL_NO_UI + } else if (1) { +#ifndef OPENSSL_NO_UI_CONSOLE p8pass = pass; if (EVP_read_pw_string(pass, sizeof(pass), "Enter Password:", 0)) { BIO_printf(bio_err, "Can't read Password\n"); @@ -312,7 +318,7 @@ int pkcs8_main(int argc, char **argv) p8inf = PKCS8_decrypt(p8, p8pass, strlen(p8pass)); } - if (!p8inf) { + if (p8inf == NULL) { BIO_printf(bio_err, "Error decrypting key\n"); ERR_print_errors(bio_err); goto end; diff --git a/apps/pkey.c b/apps/pkey.c index ad1a3b10..760fc1bb 100644 --- a/apps/pkey.c +++ b/apps/pkey.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,6 +10,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -18,10 +19,10 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_OUTFORM, OPT_PASSIN, OPT_PASSOUT, OPT_ENGINE, OPT_IN, OPT_OUT, OPT_PUBIN, OPT_PUBOUT, OPT_TEXT_PUB, - OPT_TEXT, OPT_NOOUT, OPT_MD, OPT_TRADITIONAL + OPT_TEXT, OPT_NOOUT, OPT_MD, OPT_TRADITIONAL, OPT_CHECK, OPT_PUB_CHECK } OPTION_CHOICE; -OPTIONS pkey_options[] = { +const OPTIONS pkey_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'f', "Input format (DER or PEM)"}, {"outform", OPT_OUTFORM, 'F', "Output format (DER or PEM)"}, @@ -41,6 +42,8 @@ OPTIONS pkey_options[] = { #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, #endif + {"check", OPT_CHECK, '-', "Check key consistency"}, + {"pubcheck", OPT_PUB_CHECK, '-', "Check public key consistency"}, {NULL} }; @@ -55,7 +58,7 @@ int pkey_main(int argc, char **argv) OPTION_CHOICE o; int informat = FORMAT_PEM, outformat = FORMAT_PEM; int pubin = 0, pubout = 0, pubtext = 0, text = 0, noout = 0, ret = 1; - int private = 0, traditional = 0; + int private = 0, traditional = 0, check = 0, pub_check = 0; prog = opt_init(argc, argv, pkey_options); while ((o = opt_next()) != OPT_EOF) { @@ -110,6 +113,12 @@ int pkey_main(int argc, char **argv) case OPT_TRADITIONAL: traditional = 1; break; + case OPT_CHECK: + check = 1; + break; + case OPT_PUB_CHECK: + pub_check = 1; + break; case OPT_MD: if (!opt_cipher(opt_unknown(), &cipher)) goto opthelp; @@ -136,14 +145,49 @@ int pkey_main(int argc, char **argv) pkey = load_pubkey(infile, informat, 1, passin, e, "Public Key"); else pkey = load_key(infile, informat, 1, passin, e, "key"); - if (!pkey) + if (pkey == NULL) goto end; + if (check || pub_check) { + int r; + EVP_PKEY_CTX *ctx; + + ctx = EVP_PKEY_CTX_new(pkey, e); + if (ctx == NULL) { + ERR_print_errors(bio_err); + goto end; + } + + if (check) + r = EVP_PKEY_check(ctx); + else + r = EVP_PKEY_public_check(ctx); + + if (r == 1) { + BIO_printf(out, "Key is valid\n"); + } else { + /* + * Note: at least for RSA keys if this function returns + * -1, there will be no error reasons. + */ + unsigned long err; + + BIO_printf(out, "Key is invalid\n"); + + while ((err = ERR_peek_error()) != 0) { + BIO_printf(out, "Detailed error: %s\n", + ERR_reason_error_string(err)); + ERR_get_error(); /* remove err from error stack */ + } + } + EVP_PKEY_CTX_free(ctx); + } + if (!noout) { if (outformat == FORMAT_PEM) { - if (pubout) + if (pubout) { PEM_write_bio_PUBKEY(out, pkey); - else { + } else { assert(private); if (traditional) PEM_write_bio_PrivateKey_traditional(out, pkey, cipher, @@ -154,9 +198,9 @@ int pkey_main(int argc, char **argv) NULL, 0, NULL, passout); } } else if (outformat == FORMAT_ASN1) { - if (pubout) + if (pubout) { i2d_PUBKEY_bio(out, pkey); - else { + } else { assert(private); i2d_PrivateKey_bio(out, pkey); } @@ -164,13 +208,12 @@ int pkey_main(int argc, char **argv) BIO_printf(bio_err, "Bad format specified for key\n"); goto end; } - } if (text) { - if (pubtext) + if (pubtext) { EVP_PKEY_print_public(out, pkey, 0, NULL); - else { + } else { assert(private); EVP_PKEY_print_private(out, pkey, 0, NULL); } @@ -179,6 +222,8 @@ int pkey_main(int argc, char **argv) ret = 0; end: + if (ret != 0) + ERR_print_errors(bio_err); EVP_PKEY_free(pkey); release_engine(e); BIO_free_all(out); diff --git a/apps/pkeyparam.c b/apps/pkeyparam.c index 0a1b2d12..41c3f532 100644 --- a/apps/pkeyparam.c +++ b/apps/pkeyparam.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,16 +10,18 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_IN, OPT_OUT, OPT_TEXT, OPT_NOOUT, OPT_ENGINE + OPT_IN, OPT_OUT, OPT_TEXT, OPT_NOOUT, + OPT_ENGINE, OPT_CHECK } OPTION_CHOICE; -OPTIONS pkeyparam_options[] = { +const OPTIONS pkeyparam_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"in", OPT_IN, '<', "Input file"}, {"out", OPT_OUT, '>', "Output file"}, @@ -28,6 +30,7 @@ OPTIONS pkeyparam_options[] = { #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, #endif + {"check", OPT_CHECK, '-', "Check key param consistency"}, {NULL} }; @@ -36,7 +39,7 @@ int pkeyparam_main(int argc, char **argv) ENGINE *e = NULL; BIO *in = NULL, *out = NULL; EVP_PKEY *pkey = NULL; - int text = 0, noout = 0, ret = 1; + int text = 0, noout = 0, ret = 1, check = 0; OPTION_CHOICE o; char *infile = NULL, *outfile = NULL, *prog; @@ -67,6 +70,9 @@ int pkeyparam_main(int argc, char **argv) case OPT_NOOUT: noout = 1; break; + case OPT_CHECK: + check = 1; + break; } } argc = opt_num_rest(); @@ -80,12 +86,44 @@ int pkeyparam_main(int argc, char **argv) if (out == NULL) goto end; pkey = PEM_read_bio_Parameters(in, NULL); - if (!pkey) { + if (pkey == NULL) { BIO_printf(bio_err, "Error reading parameters\n"); ERR_print_errors(bio_err); goto end; } + if (check) { + int r; + EVP_PKEY_CTX *ctx; + + ctx = EVP_PKEY_CTX_new(pkey, e); + if (ctx == NULL) { + ERR_print_errors(bio_err); + goto end; + } + + r = EVP_PKEY_param_check(ctx); + + if (r == 1) { + BIO_printf(out, "Parameters are valid\n"); + } else { + /* + * Note: at least for RSA keys if this function returns + * -1, there will be no error reasons. + */ + unsigned long err; + + BIO_printf(out, "Parameters are invalid\n"); + + while ((err = ERR_peek_error()) != 0) { + BIO_printf(out, "Detailed error: %s\n", + ERR_reason_error_string(err)); + ERR_get_error(); /* remove err from error stack */ + } + } + EVP_PKEY_CTX_free(ctx); + } + if (!noout) PEM_write_bio_Parameters(out, pkey); diff --git a/apps/pkeyutl.c b/apps/pkeyutl.c index bbb1274f..77926de1 100644 --- a/apps/pkeyutl.c +++ b/apps/pkeyutl.c @@ -8,6 +8,7 @@ */ #include "apps.h" +#include "progs.h" #include #include #include @@ -36,10 +37,11 @@ typedef enum OPTION_choice { OPT_PUBIN, OPT_CERTIN, OPT_ASN1PARSE, OPT_HEXDUMP, OPT_SIGN, OPT_VERIFY, OPT_VERIFYRECOVER, OPT_REV, OPT_ENCRYPT, OPT_DECRYPT, OPT_DERIVE, OPT_SIGFILE, OPT_INKEY, OPT_PEERKEY, OPT_PASSIN, - OPT_PEERFORM, OPT_KEYFORM, OPT_PKEYOPT, OPT_KDF, OPT_KDFLEN + OPT_PEERFORM, OPT_KEYFORM, OPT_PKEYOPT, OPT_KDF, OPT_KDFLEN, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS pkeyutl_options[] = { +const OPTIONS pkeyutl_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"in", OPT_IN, '<', "Input file - default stdin"}, {"out", OPT_OUT, '>', "Output file - default stdout"}, @@ -64,6 +66,7 @@ OPTIONS pkeyutl_options[] = { {"peerform", OPT_PEERFORM, 'E', "Peer key format - default PEM"}, {"keyform", OPT_KEYFORM, 'E', "Private key format - default PEM"}, {"pkeyopt", OPT_PKEYOPT, 's', "Public key options as opt:value"}, + OPT_R_OPTIONS, #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, {"engine_impl", OPT_ENGINE_IMPL, '-', @@ -81,7 +84,8 @@ int pkeyutl_main(int argc, char **argv) char hexdump = 0, asn1parse = 0, rev = 0, *prog; unsigned char *buf_in = NULL, *buf_out = NULL, *sig = NULL; OPTION_CHOICE o; - int buf_inlen = 0, siglen = -1, keyform = FORMAT_PEM, peerform = FORMAT_PEM; + int buf_inlen = 0, siglen = -1, keyform = FORMAT_PEM, peerform = + FORMAT_PEM; int keysize = -1, pkey_op = EVP_PKEY_OP_SIGN, key_type = KEY_PRIVKEY; int engine_impl = 0; int ret = 1, rv = -1; @@ -133,6 +137,10 @@ int pkeyutl_main(int argc, char **argv) if (!opt_format(opt_arg(), OPT_FMT_PDE, &keyform)) goto opthelp; break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; case OPT_ENGINE: e = setup_engine(opt_arg(), 0); break; @@ -192,18 +200,10 @@ int pkeyutl_main(int argc, char **argv) goto opthelp; if (kdfalg != NULL) { - if (kdflen == 0) { - BIO_printf(bio_err, - "%s: no KDF length given (-kdflen parameter).\n", prog); + if (kdflen == 0) goto opthelp; - } - } else if (inkey == NULL) { - BIO_printf(bio_err, - "%s: no private key given (-inkey parameter).\n", prog); - goto opthelp; - } else if (peerkey != NULL && pkey_op != EVP_PKEY_OP_DERIVE) { - BIO_printf(bio_err, - "%s: no peer key given (-peerkey parameter).\n", prog); + } else if ((inkey == NULL) + || (peerkey != NULL && pkey_op != EVP_PKEY_OP_DERIVE)) { goto opthelp; } ctx = init_ctx(kdfalg, &keysize, inkey, keyform, key_type, @@ -226,29 +226,25 @@ int pkeyutl_main(int argc, char **argv) const char *opt = sk_OPENSSL_STRING_value(pkeyopts, i); if (pkey_ctrl_string(ctx, opt) <= 0) { - BIO_printf(bio_err, "%s: Can't set parameter \"%s\":\n", - prog, opt); + BIO_printf(bio_err, "%s: Can't set parameter:\n", prog); ERR_print_errors(bio_err); goto end; } } } - if (sigfile && (pkey_op != EVP_PKEY_OP_VERIFY)) { + if (sigfile != NULL && (pkey_op != EVP_PKEY_OP_VERIFY)) { BIO_printf(bio_err, "%s: Signature file specified for non verify\n", prog); goto end; } - if (!sigfile && (pkey_op == EVP_PKEY_OP_VERIFY)) { + if (sigfile == NULL && (pkey_op == EVP_PKEY_OP_VERIFY)) { BIO_printf(bio_err, "%s: No signature file specified for verify\n", prog); goto end; } -/* FIXME: seed PRNG only if needed */ - app_RAND_load_file(NULL, 0); - if (pkey_op != EVP_PKEY_OP_DERIVE) { in = bio_open_default(infile, 'r', FORMAT_BINARY); if (in == NULL) @@ -258,9 +254,10 @@ int pkeyutl_main(int argc, char **argv) if (out == NULL) goto end; - if (sigfile) { + if (sigfile != NULL) { BIO *sigbio = BIO_new_file(sigfile, "rb"); - if (!sigbio) { + + if (sigbio == NULL) { BIO_printf(bio_err, "Can't open signature file %s\n", sigfile); goto end; } @@ -272,7 +269,7 @@ int pkeyutl_main(int argc, char **argv) } } - if (in) { + if (in != NULL) { /* Read the input data */ buf_inlen = bio_to_mem(&buf_in, keysize * 10, in); if (buf_inlen < 0) { @@ -297,8 +294,9 @@ int pkeyutl_main(int argc, char **argv) if (rv == 1) { BIO_puts(out, "Signature Verified Successfully\n"); ret = 0; - } else + } else { BIO_puts(out, "Signature Verification Failure\n"); + } goto end; } if (kdflen != 0) { @@ -315,11 +313,7 @@ int pkeyutl_main(int argc, char **argv) buf_in, (size_t)buf_inlen); } if (rv <= 0) { - if (pkey_op != EVP_PKEY_OP_DERIVE) { - BIO_puts(bio_err, "Public Key operation error\n"); - } else { - BIO_puts(bio_err, "Key derivation failed\n"); - } + BIO_puts(bio_err, "Public Key operation error\n"); ERR_print_errors(bio_err); goto end; } @@ -328,10 +322,11 @@ int pkeyutl_main(int argc, char **argv) if (asn1parse) { if (!ASN1_parse_dump(out, buf_out, buf_outlen, 1, -1)) ERR_print_errors(bio_err); - } else if (hexdump) + } else if (hexdump) { BIO_dump(out, (char *)buf_out, buf_outlen); - else + } else { BIO_write(out, buf_out, buf_outlen); + } end: EVP_PKEY_CTX_free(ctx); @@ -393,16 +388,13 @@ static EVP_PKEY_CTX *init_ctx(const char *kdfalg, int *pkeysize, impl = e; #endif - if (kdfalg) { + if (kdfalg != NULL) { int kdfnid = OBJ_sn2nid(kdfalg); if (kdfnid == NID_undef) { kdfnid = OBJ_ln2nid(kdfalg); - if (kdfnid == NID_undef) { - BIO_printf(bio_err, "The given KDF \"%s\" is unknown.\n", - kdfalg); + if (kdfnid == NID_undef) goto end; - } } ctx = EVP_PKEY_CTX_new_id(kdfnid, impl); } else { @@ -454,16 +446,16 @@ static EVP_PKEY_CTX *init_ctx(const char *kdfalg, int *pkeysize, } static int setup_peer(EVP_PKEY_CTX *ctx, int peerform, const char *file, - ENGINE *e) + ENGINE* e) { EVP_PKEY *peer = NULL; - ENGINE *engine = NULL; + ENGINE* engine = NULL; int ret; if (peerform == FORMAT_ENGINE) engine = e; peer = load_pubkey(file, peerform, 0, NULL, engine, "Peer Key"); - if (!peer) { + if (peer == NULL) { BIO_printf(bio_err, "Error reading peer key %s\n", file); ERR_print_errors(bio_err); return 0; diff --git a/apps/prime.c b/apps/prime.c index c12463d8..69447976 100644 --- a/apps/prime.c +++ b/apps/prime.c @@ -10,6 +10,7 @@ #include #include "apps.h" +#include "progs.h" #include typedef enum OPTION_choice { @@ -17,7 +18,7 @@ typedef enum OPTION_choice { OPT_HEX, OPT_GENERATE, OPT_BITS, OPT_SAFE, OPT_CHECKS } OPTION_CHOICE; -OPTIONS prime_options[] = { +const OPTIONS prime_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] [number...]\n"}, {OPT_HELP_STR, 1, '-', " number Number to check for primality\n"}, @@ -112,7 +113,7 @@ opthelp: else r = BN_dec2bn(&bn, argv[0]); - if(!r) { + if (!r) { BIO_printf(bio_err, "Failed to process value (%s)\n", argv[0]); goto end; } diff --git a/apps/progs.pl b/apps/progs.pl index 0d3b4469..f832467b 100644 --- a/apps/progs.pl +++ b/apps/progs.pl @@ -14,24 +14,24 @@ use warnings; use lib '.'; use configdata qw/@disablables %unified_info/; -my %commands = (); -my $cmdre = qr/^\s*int\s+([a-z_][a-z0-9_]*)_main\(\s*int\s+argc\s*,/; - +my %commands = (); +my $cmdre = qr/^\s*int\s+([a-z_][a-z0-9_]*)_main\(\s*int\s+argc\s*,/; my $apps_openssl = shift @ARGV; + # because the program apps/openssl has object files as sources, and # they then have the corresponding C files as source, we need to chain # the lookups in %unified_info my @openssl_source = map { @{$unified_info{sources}->{$_}} } - @{$unified_info{sources}->{$apps_openssl}}; + @{$unified_info{sources}->{$apps_openssl}}; foreach my $filename (@openssl_source) { - open F, $filename or die "Couldn't open $filename: $!\n"; - foreach (grep /$cmdre/, ) { - my @foo = /$cmdre/; - $commands{$1} = 1; - } - close F; + open F, $filename or die "Couldn't open $filename: $!\n"; + foreach ( grep /$cmdre/, ) { + my @foo = /$cmdre/; + $commands{$1} = 1; + } + close F; } @ARGV = sort keys %commands; @@ -66,17 +66,15 @@ DEFINE_LHASH_OF(FUNCTION); EOF foreach (@ARGV) { - printf "extern int %s_main(int argc, char *argv[]);\n", $_; + printf "extern int %s_main(int argc, char *argv[]);\n", $_; } - print "\n"; foreach (@ARGV) { - printf "extern OPTIONS %s_options[];\n", $_; + printf "extern const OPTIONS %s_options[];\n", $_; } +print "\n"; -print "\n#ifdef INCLUDE_FUNCTION_TABLE\n"; -print "static FUNCTION functions[] = {\n"; my %cmd_disabler = ( ciphers => "sock", genrsa => "rsa", @@ -87,78 +85,92 @@ my %cmd_disabler = ( dhparam => "dh", ecparam => "ec", pkcs12 => "des", - ); -foreach my $cmd (@ARGV) { - my $str=" { FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options },\n"; - if ($cmd =~ /^s_/) { - print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n"; - } elsif (grep { $cmd eq $_ } @disablables) { - print "#ifndef OPENSSL_NO_".uc($cmd)."\n${str}#endif\n"; - } elsif (my $disabler = $cmd_disabler{$cmd}) { - print "#ifndef OPENSSL_NO_".uc($disabler)."\n${str}#endif\n"; - } else { - print $str; - } +); + +print "#ifdef INCLUDE_FUNCTION_TABLE\n"; +print "static FUNCTION functions[] = {\n"; +foreach my $cmd ( @ARGV ) { + my $str = " {FT_general, \"$cmd\", ${cmd}_main, ${cmd}_options},\n"; + if ($cmd =~ /^s_/) { + print "#ifndef OPENSSL_NO_SOCK\n${str}#endif\n"; + } elsif (grep { $cmd eq $_ } @disablables) { + print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n"; + } elsif (my $disabler = $cmd_disabler{$cmd}) { + print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n"; + } else { + print $str; + } } my %md_disabler = ( blake2b512 => "blake2", blake2s256 => "blake2", - ); +); foreach my $cmd ( - "md2", "md4", "md5", - "gost", - "sha1", "sha224", "sha256", "sha384", "sha512", - "mdc2", "rmd160", "blake2b512", "blake2s256" + "md2", "md4", "md5", + "gost", + "sha1", "sha224", "sha256", "sha384", "sha512", + "mdc2", "rmd160", "blake2b512", "blake2s256", + "sm3" ) { - my $str = " { FT_md, \"".$cmd."\", dgst_main},\n"; - if (grep { $cmd eq $_ } @disablables) { - print "#ifndef OPENSSL_NO_".uc($cmd)."\n${str}#endif\n"; - } elsif (my $disabler = $md_disabler{$cmd}) { - print "#ifndef OPENSSL_NO_".uc($disabler)."\n${str}#endif\n"; - } else { - print $str; - } + my $str = " {FT_md, \"$cmd\", dgst_main},\n"; + if (grep { $cmd eq $_ } @disablables) { + print "#ifndef OPENSSL_NO_" . uc($cmd) . "\n${str}#endif\n"; + } elsif (my $disabler = $md_disabler{$cmd}) { + print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n"; + } else { + print $str; + } } my %cipher_disabler = ( des3 => "des", desx => "des", cast5 => "cast", - ); +); foreach my $cmd ( - "aes-128-cbc", "aes-128-ecb", - "aes-192-cbc", "aes-192-ecb", - "aes-256-cbc", "aes-256-ecb", - "camellia-128-cbc", "camellia-128-ecb", - "camellia-192-cbc", "camellia-192-ecb", - "camellia-256-cbc", "camellia-256-ecb", - "base64", "zlib", - "des", "des3", "desx", "idea", "seed", "rc4", "rc4-40", - "rc2", "bf", "cast", "rc5", - "des-ecb", "des-ede", "des-ede3", - "des-cbc", "des-ede-cbc","des-ede3-cbc", - "des-cfb", "des-ede-cfb","des-ede3-cfb", - "des-ofb", "des-ede-ofb","des-ede3-ofb", - "idea-cbc","idea-ecb", "idea-cfb", "idea-ofb", - "seed-cbc","seed-ecb", "seed-cfb", "seed-ofb", - "rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc", - "bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb", - "cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb", - "cast-cbc", "rc5-cbc", "rc5-ecb", "rc5-cfb", "rc5-ofb" + "aes-128-cbc", "aes-128-ecb", + "aes-192-cbc", "aes-192-ecb", + "aes-256-cbc", "aes-256-ecb", + "aria-128-cbc", "aria-128-cfb", + "aria-128-ctr", "aria-128-ecb", "aria-128-ofb", + "aria-128-cfb1", "aria-128-cfb8", + "aria-192-cbc", "aria-192-cfb", + "aria-192-ctr", "aria-192-ecb", "aria-192-ofb", + "aria-192-cfb1", "aria-192-cfb8", + "aria-256-cbc", "aria-256-cfb", + "aria-256-ctr", "aria-256-ecb", "aria-256-ofb", + "aria-256-cfb1", "aria-256-cfb8", + "camellia-128-cbc", "camellia-128-ecb", + "camellia-192-cbc", "camellia-192-ecb", + "camellia-256-cbc", "camellia-256-ecb", + "base64", "zlib", + "des", "des3", "desx", "idea", "seed", "rc4", "rc4-40", + "rc2", "bf", "cast", "rc5", + "des-ecb", "des-ede", "des-ede3", + "des-cbc", "des-ede-cbc","des-ede3-cbc", + "des-cfb", "des-ede-cfb","des-ede3-cfb", + "des-ofb", "des-ede-ofb","des-ede3-ofb", + "idea-cbc","idea-ecb", "idea-cfb", "idea-ofb", + "seed-cbc","seed-ecb", "seed-cfb", "seed-ofb", + "rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc", + "bf-cbc", "bf-ecb", "bf-cfb", "bf-ofb", + "cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb", + "cast-cbc", "rc5-cbc", "rc5-ecb", "rc5-cfb", "rc5-ofb", + "sm4-cbc", "sm4-ecb", "sm4-cfb", "sm4-ofb", "sm4-ctr" ) { - my $str=" { FT_cipher, \"$cmd\", enc_main, enc_options },\n"; - (my $algo= $cmd) =~ s/-.*//g; - if ($cmd eq "zlib") { - print "#ifdef ZLIB\n${str}#endif\n"; - } elsif (grep { $algo eq $_ } @disablables) { - print "#ifndef OPENSSL_NO_".uc($algo)."\n${str}#endif\n"; - } elsif (my $disabler = $cipher_disabler{$algo}) { - print "#ifndef OPENSSL_NO_".uc($disabler)."\n${str}#endif\n"; - } else { - print $str; - } + my $str = " {FT_cipher, \"$cmd\", enc_main, enc_options},\n"; + (my $algo = $cmd) =~ s/-.*//g; + if ($cmd eq "zlib") { + print "#ifdef ZLIB\n${str}#endif\n"; + } elsif (grep { $algo eq $_ } @disablables) { + print "#ifndef OPENSSL_NO_" . uc($algo) . "\n${str}#endif\n"; + } elsif (my $disabler = $cipher_disabler{$algo}) { + print "#ifndef OPENSSL_NO_" . uc($disabler) . "\n${str}#endif\n"; + } else { + print $str; + } } -print " { 0, NULL, NULL}\n};\n"; +print " {0, NULL, NULL}\n};\n"; print "#endif\n"; diff --git a/apps/rand.c b/apps/rand.c index b3ec70a7..4c618150 100644 --- a/apps/rand.c +++ b/apps/rand.c @@ -8,6 +8,7 @@ */ #include "apps.h" +#include "progs.h" #include #include @@ -19,16 +20,16 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_OUT, OPT_ENGINE, OPT_RAND, OPT_BASE64, OPT_HEX + OPT_OUT, OPT_ENGINE, OPT_BASE64, OPT_HEX, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS rand_options[] = { +const OPTIONS rand_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [flags] num\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {"help", OPT_HELP, '-', "Display this summary"}, {"out", OPT_OUT, '>', "Output file"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"base64", OPT_BASE64, '-', "Base64 encode output"}, {"hex", OPT_HEX, '-', "Hex encode output"}, #ifndef OPENSSL_NO_ENGINE @@ -41,7 +42,7 @@ int rand_main(int argc, char **argv) { ENGINE *e = NULL; BIO *out = NULL; - char *inrand = NULL, *outfile = NULL, *prog; + char *outfile = NULL, *prog; OPTION_CHOICE o; int format = FORMAT_BINARY, i, num = -1, r, ret = 1; @@ -63,8 +64,9 @@ int rand_main(int argc, char **argv) case OPT_ENGINE: e = setup_engine(opt_arg(), 0); break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_BASE64: format = FORMAT_BASE64; @@ -84,11 +86,6 @@ int rand_main(int argc, char **argv) goto opthelp; } - app_RAND_load_file(NULL, (inrand != NULL)); - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - out = bio_open_default(outfile, 'w', format); if (out == NULL) goto end; @@ -122,7 +119,7 @@ int rand_main(int argc, char **argv) } if (format == FORMAT_TEXT) BIO_puts(out, "\n"); - if (BIO_flush(out) <= 0 || !app_RAND_write_file(NULL)) + if (BIO_flush(out) <= 0) goto end; ret = 0; @@ -132,5 +129,5 @@ int rand_main(int argc, char **argv) ERR_print_errors(bio_err); release_engine(e); BIO_free_all(out); - return (ret); + return ret; } diff --git a/apps/rehash.c b/apps/rehash.c index 273ad749..d918ac89 100644 --- a/apps/rehash.c +++ b/apps/rehash.c @@ -1,5 +1,6 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2013-2014 Timo Teräs * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,13 +8,8 @@ * https://www.openssl.org/source/license.html */ -/* - * C implementation based on the original Perl and shell versions - * - * Copyright (c) 2013-2014 Timo Teräs - */ - #include "apps.h" +#include "progs.h" #if defined(OPENSSL_SYS_UNIX) || defined(__APPLE__) || \ (defined(__VMS) && defined(__DECC) && __CRTL_VER >= 80300000) @@ -254,11 +250,11 @@ static int do_file(const char *filename, const char *fullpath, enum Hash h) goto end; } x = sk_X509_INFO_value(inf, 0); - if (x->x509) { + if (x->x509 != NULL) { type = TYPE_CERT; name = X509_get_subject_name(x->x509); X509_digest(x->x509, evpmd, digest, NULL); - } else if (x->crl) { + } else if (x->crl != NULL) { type = TYPE_CRL; name = X509_CRL_get_issuer(x->crl); X509_CRL_digest(x->crl, evpmd, digest, NULL); @@ -266,7 +262,7 @@ static int do_file(const char *filename, const char *fullpath, enum Hash h) ++errs; goto end; } - if (name) { + if (name != NULL) { if ((h == HASH_NEW) || (h == HASH_BOTH)) errs += add_entry(type, X509_NAME_hash(name), filename, digest, 1, ~0); if ((h == HASH_OLD) || (h == HASH_BOTH)) @@ -448,7 +444,7 @@ typedef enum OPTION_choice { OPT_COMPAT, OPT_OLD, OPT_N, OPT_VERBOSE } OPTION_CHOICE; -OPTIONS rehash_options[] = { +const OPTIONS rehash_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] [cert-directory...]\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {"help", OPT_HELP, '-', "Display this summary"}, @@ -499,8 +495,8 @@ int rehash_main(int argc, char **argv) evpmd = EVP_sha1(); evpmdsize = EVP_MD_size(evpmd); - if (*argv) { - while (*argv) + if (*argv != NULL) { + while (*argv != NULL) errs += do_dir(*argv++, h); } else if ((env = getenv("SSL_CERT_DIR")) != NULL) { m = OPENSSL_strdup(env); @@ -516,14 +512,14 @@ int rehash_main(int argc, char **argv) } #else -OPTIONS rehash_options[] = { +const OPTIONS rehash_options[] = { {NULL} }; int rehash_main(int argc, char **argv) { BIO_printf(bio_err, "Not available; use c_rehash script\n"); - return (1); + return 1; } #endif /* defined(OPENSSL_SYS_UNIX) || defined(__APPLE__) */ diff --git a/apps/req.c b/apps/req.c index 2a215695..ac14fdb8 100644 --- a/apps/req.c +++ b/apps/req.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,6 +12,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -64,25 +65,29 @@ static int add_DN_object(X509_NAME *n, char *text, const char *def, static int genpkey_cb(EVP_PKEY_CTX *ctx); static int req_check_len(int len, int n_min, int n_max); static int check_end(const char *str, const char *end); +static int join(char buf[], size_t buf_size, const char *name, + const char *tail, const char *desc); static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, int *pkey_type, long *pkeylen, char **palgnam, ENGINE *keygen_engine); static CONF *req_conf = NULL; +static CONF *addext_conf = NULL; static int batch = 0; typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_INFORM, OPT_OUTFORM, OPT_ENGINE, OPT_KEYGEN_ENGINE, OPT_KEY, OPT_PUBKEY, OPT_NEW, OPT_CONFIG, OPT_KEYFORM, OPT_IN, OPT_OUT, - OPT_KEYOUT, OPT_PASSIN, OPT_PASSOUT, OPT_RAND, OPT_NEWKEY, + OPT_KEYOUT, OPT_PASSIN, OPT_PASSOUT, OPT_NEWKEY, OPT_PKEYOPT, OPT_SIGOPT, OPT_BATCH, OPT_NEWHDR, OPT_MODULUS, OPT_VERIFY, OPT_NODES, OPT_NOOUT, OPT_VERBOSE, OPT_UTF8, OPT_NAMEOPT, OPT_REQOPT, OPT_SUBJ, OPT_SUBJECT, OPT_TEXT, OPT_X509, - OPT_MULTIVALUE_RDN, OPT_DAYS, OPT_SET_SERIAL, OPT_EXTENSIONS, - OPT_REQEXTS, OPT_MD + OPT_MULTIVALUE_RDN, OPT_DAYS, OPT_SET_SERIAL, OPT_ADDEXT, OPT_EXTENSIONS, + OPT_REQEXTS, OPT_PRECERT, OPT_MD, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS req_options[] = { +const OPTIONS req_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format - DER or PEM"}, {"outform", OPT_OUTFORM, 'F', "Output format - DER or PEM"}, @@ -96,8 +101,7 @@ OPTIONS req_options[] = { {"keyout", OPT_KEYOUT, '>', "File to send the key to"}, {"passin", OPT_PASSIN, 's', "Private key password source"}, {"passout", OPT_PASSOUT, 's', "Output file pass phrase source"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"newkey", OPT_NEWKEY, 's', "Specify as type:bits"}, {"pkeyopt", OPT_PKEYOPT, 's', "Public key options as opt:value"}, {"sigopt", OPT_SIGOPT, 's', "Signature parameter in n:v form"}, @@ -122,10 +126,13 @@ OPTIONS req_options[] = { "Enable support for multivalued RDNs"}, {"days", OPT_DAYS, 'p', "Number of days cert is valid for"}, {"set_serial", OPT_SET_SERIAL, 's', "Serial number to use"}, + {"addext", OPT_ADDEXT, 's', + "Additional cert extension key=value pair (may be given more than once)"}, {"extensions", OPT_EXTENSIONS, 's', "Cert extension section (override value in config file)"}, {"reqexts", OPT_REQEXTS, 's', "Request extension section (override value in config file)"}, + {"precert", OPT_PRECERT, '-', "Add a poison extension (implies -new)"}, {"", OPT_MD, '-', "Any supported digest"}, #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, @@ -147,8 +154,9 @@ int req_main(int argc, char **argv) X509_REQ *req = NULL; const EVP_CIPHER *cipher = NULL; const EVP_MD *md_alg = NULL, *digest = NULL; + BIO *addext_bio = NULL; char *extensions = NULL, *infile = NULL; - char *outfile = NULL, *keyfile = NULL, *inrand = NULL; + char *outfile = NULL, *keyfile = NULL; char *keyalgstr = NULL, *p, *prog, *passargin = NULL, *passargout = NULL; char *passin = NULL, *passout = NULL; char *nofree_passin = NULL, *nofree_passout = NULL; @@ -156,14 +164,13 @@ int req_main(int argc, char **argv) char *template = default_config_file, *keyout = NULL; const char *keyalg = NULL; OPTION_CHOICE o; - int ret = 1, x509 = 0, days = 30, i = 0, newreq = 0, verbose = 0; + int ret = 1, x509 = 0, days = 0, i = 0, newreq = 0, verbose = 0; int pkey_type = -1, private = 0; int informat = FORMAT_PEM, outformat = FORMAT_PEM, keyform = FORMAT_PEM; int modulus = 0, multirdn = 0, verify = 0, noout = 0, text = 0; - int nodes = 0, newhdr = 0, subject = 0, pubkey = 0; + int nodes = 0, newhdr = 0, subject = 0, pubkey = 0, precert = 0; long newkey = -1; - unsigned long chtype = MBSTRING_ASC, nmflag = 0, reqflag = 0; - char nmflag_set = 0; + unsigned long chtype = MBSTRING_ASC, reqflag = 0; #ifndef OPENSSL_NO_DES cipher = EVP_des_ede3_cbc(); @@ -232,8 +239,9 @@ int req_main(int argc, char **argv) case OPT_PASSOUT: passargout = opt_arg(); break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_NEWKEY: keyalg = opt_arg(); @@ -276,8 +284,7 @@ int req_main(int argc, char **argv) chtype = MBSTRING_UTF8; break; case OPT_NAMEOPT: - nmflag_set = 1; - if (!set_name_ex(&nmflag, opt_arg())) + if (!set_nameopt(opt_arg())) goto opthelp; break; case OPT_REQOPT: @@ -311,12 +318,23 @@ int req_main(int argc, char **argv) case OPT_MULTIVALUE_RDN: multirdn = 1; break; + case OPT_ADDEXT: + if (addext_bio == NULL) { + addext_bio = BIO_new(BIO_s_mem()); + } + if (addext_bio == NULL + || BIO_printf(addext_bio, "%s\n", opt_arg()) < 0) + goto end; + break; case OPT_EXTENSIONS: extensions = opt_arg(); break; case OPT_REQEXTS: req_exts = opt_arg(); break; + case OPT_PRECERT: + newreq = precert = 1; + break; case OPT_MD: if (!opt_md(opt_unknown(), &md_alg)) goto opthelp; @@ -328,12 +346,11 @@ int req_main(int argc, char **argv) if (argc != 0) goto opthelp; + if (days && !x509) + BIO_printf(bio_err, "Ignoring -days; not generating a certificate\n"); if (x509 && infile == NULL) newreq = 1; - if (!nmflag_set) - nmflag = XN_FLAG_ONELINE; - /* TODO: simplify this as pkey is still always NULL here */ private = newreq && (pkey == NULL) ? 1 : 0; @@ -345,6 +362,12 @@ int req_main(int argc, char **argv) if (verbose) BIO_printf(bio_err, "Using configuration from %s\n", template); req_conf = app_load_config(template); + if (addext_bio) { + if (verbose) + BIO_printf(bio_err, + "Using additional configuraton from command line\n"); + addext_conf = app_load_config_bio(addext_bio, NULL); + } if (template != default_config_file && !app_load_modules(req_conf)) goto end; @@ -372,21 +395,21 @@ int req_main(int argc, char **argv) if (md_alg == NULL) { p = NCONF_get_string(req_conf, SECTION, "default_md"); - if (p == NULL) + if (p == NULL) { ERR_clear_error(); - else { + } else { if (!opt_md(p, &md_alg)) goto opthelp; digest = md_alg; } } - if (!extensions) { + if (extensions == NULL) { extensions = NCONF_get_string(req_conf, SECTION, V3_EXTENSIONS); - if (!extensions) + if (extensions == NULL) ERR_clear_error(); } - if (extensions) { + if (extensions != NULL) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); @@ -397,6 +420,16 @@ int req_main(int argc, char **argv) goto end; } } + if (addext_conf != NULL) { + /* Check syntax of command line extensions */ + X509V3_CTX ctx; + X509V3_set_ctx_test(&ctx); + X509V3_set_nconf(&ctx, addext_conf); + if (!X509V3_EXT_add_nconf(addext_conf, &ctx, "default", NULL)) { + BIO_printf(bio_err, "Error Loading command line extensions\n"); + goto end; + } + } if (passin == NULL) { passin = nofree_passin = @@ -413,28 +446,28 @@ int req_main(int argc, char **argv) } p = NCONF_get_string(req_conf, SECTION, STRING_MASK); - if (!p) + if (p == NULL) ERR_clear_error(); - if (p && !ASN1_STRING_set_default_mask_asc(p)) { + if (p != NULL && !ASN1_STRING_set_default_mask_asc(p)) { BIO_printf(bio_err, "Invalid global string mask setting %s\n", p); goto end; } if (chtype != MBSTRING_UTF8) { p = NCONF_get_string(req_conf, SECTION, UTF8_IN); - if (!p) + if (p == NULL) ERR_clear_error(); else if (strcmp(p, "yes") == 0) chtype = MBSTRING_UTF8; } - if (!req_exts) { + if (req_exts == NULL) { req_exts = NCONF_get_string(req_conf, SECTION, REQ_EXTENSIONS); - if (!req_exts) + if (req_exts == NULL) ERR_clear_error(); } - if (req_exts) { + if (req_exts != NULL) { /* Check syntax of file */ X509V3_CTX ctx; X509V3_set_ctx_test(&ctx); @@ -449,33 +482,25 @@ int req_main(int argc, char **argv) if (keyfile != NULL) { pkey = load_key(keyfile, keyform, 0, passin, e, "Private Key"); - if (!pkey) { + if (pkey == NULL) { /* load_key() has already printed an appropriate message */ goto end; } else { - char *randfile = NCONF_get_string(req_conf, SECTION, "RANDFILE"); - if (randfile == NULL) - ERR_clear_error(); - app_RAND_load_file(randfile, 0); + app_RAND_load_conf(req_conf, SECTION); } } if (newreq && (pkey == NULL)) { - char *randfile = NCONF_get_string(req_conf, SECTION, "RANDFILE"); - if (randfile == NULL) - ERR_clear_error(); - app_RAND_load_file(randfile, 0); - if (inrand) - app_RAND_load_files(inrand); + app_RAND_load_conf(req_conf, SECTION); if (!NCONF_get_number(req_conf, SECTION, BITS, &newkey)) { newkey = DEFAULT_KEY_LENGTH; } - if (keyalg) { + if (keyalg != NULL) { genctx = set_keygen_ctx(keyalg, &pkey_type, &newkey, &keyalgstr, gen_eng); - if (!genctx) + if (genctx == NULL) goto end; } @@ -487,14 +512,14 @@ int req_main(int argc, char **argv) goto end; } - if (!genctx) { + if (genctx == NULL) { genctx = set_keygen_ctx(NULL, &pkey_type, &newkey, &keyalgstr, gen_eng); if (!genctx) goto end; } - if (pkeyopts) { + if (pkeyopts != NULL) { char *genopt; for (i = 0; i < sk_OPENSSL_STRING_num(pkeyopts); i++) { genopt = sk_OPENSSL_STRING_value(pkeyopts, i); @@ -524,8 +549,6 @@ int req_main(int argc, char **argv) EVP_PKEY_CTX_free(genctx); genctx = NULL; - app_RAND_write_file(randfile); - if (keyout == NULL) { keyout = NCONF_get_string(req_conf, SECTION, KEYFILE); if (keyout == NULL) @@ -611,9 +634,10 @@ int req_main(int argc, char **argv) goto end; /* Set version to V3 */ - if (extensions && !X509_set_version(x509ss, 2)) + if ((extensions != NULL || addext_conf != NULL) + && !X509_set_version(x509ss, 2)) goto end; - if (serial) { + if (serial != NULL) { if (!X509_set_serialNumber(x509ss, serial)) goto end; } else { @@ -623,6 +647,10 @@ int req_main(int argc, char **argv) if (!X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))) goto end; + if (days == 0) { + /* set default days if it's not specified */ + days = 30; + } if (!set_cert_times(x509ss, NULL, NULL, days)) goto end; if (!X509_set_subject_name @@ -638,13 +666,28 @@ int req_main(int argc, char **argv) X509V3_set_nconf(&ext_ctx, req_conf); /* Add extensions */ - if (extensions && !X509V3_EXT_add_nconf(req_conf, - &ext_ctx, extensions, - x509ss)) { + if (extensions != NULL && !X509V3_EXT_add_nconf(req_conf, + &ext_ctx, extensions, + x509ss)) { BIO_printf(bio_err, "Error Loading extension section %s\n", extensions); goto end; } + if (addext_conf != NULL + && !X509V3_EXT_add_nconf(addext_conf, &ext_ctx, "default", + x509ss)) { + BIO_printf(bio_err, "Error Loading command line extensions\n"); + goto end; + } + + /* If a pre-cert was requested, we need to add a poison extension */ + if (precert) { + if (X509_add1_ext_i2d(x509ss, NID_ct_precert_poison, NULL, 1, 0) + != 1) { + BIO_printf(bio_err, "Error adding poison extension\n"); + goto end; + } + } i = do_X509_sign(x509ss, pkey, digest, sigopts); if (!i) { @@ -660,13 +703,19 @@ int req_main(int argc, char **argv) X509V3_set_nconf(&ext_ctx, req_conf); /* Add extensions */ - if (req_exts && !X509V3_EXT_REQ_add_nconf(req_conf, - &ext_ctx, req_exts, - req)) { + if (req_exts != NULL + && !X509V3_EXT_REQ_add_nconf(req_conf, &ext_ctx, + req_exts, req)) { BIO_printf(bio_err, "Error Loading extension section %s\n", req_exts); goto end; } + if (addext_conf != NULL + && !X509V3_EXT_REQ_add_nconf(addext_conf, &ext_ctx, "default", + req)) { + BIO_printf(bio_err, "Error Loading command line extensions\n"); + goto end; + } i = do_X509_REQ_sign(req, pkey, digest, sigopts); if (!i) { ERR_print_errors(bio_err); @@ -684,7 +733,7 @@ int req_main(int argc, char **argv) if (verbose) { BIO_printf(bio_err, "Modifying Request's Subject\n"); print_name(bio_err, "old subject=", - X509_REQ_get_subject_name(req), nmflag); + X509_REQ_get_subject_name(req), get_nameopt()); } if (build_subject(req, subj, chtype, multirdn) == 0) { @@ -695,7 +744,7 @@ int req_main(int argc, char **argv) if (verbose) { print_name(bio_err, "new subject=", - X509_REQ_get_subject_name(req), nmflag); + X509_REQ_get_subject_name(req), get_nameopt()); } } @@ -715,8 +764,9 @@ int req_main(int argc, char **argv) } else if (i == 0) { BIO_printf(bio_err, "verify failure\n"); ERR_print_errors(bio_err); - } else /* if (i > 0) */ + } else { /* if (i > 0) */ BIO_printf(bio_err, "verify OK\n"); + } } if (noout && !text && !modulus && !subject && !pubkey) { @@ -744,18 +794,18 @@ int req_main(int argc, char **argv) if (text) { if (x509) - X509_print_ex(out, x509ss, nmflag, reqflag); + X509_print_ex(out, x509ss, get_nameopt(), reqflag); else - X509_REQ_print_ex(out, req, nmflag, reqflag); + X509_REQ_print_ex(out, req, get_nameopt(), reqflag); } if (subject) { if (x509) print_name(out, "subject=", X509_get_subject_name(x509ss), - nmflag); + get_nameopt()); else print_name(out, "subject=", X509_REQ_get_subject_name(req), - nmflag); + get_nameopt()); } if (modulus) { @@ -809,6 +859,7 @@ int req_main(int argc, char **argv) ERR_print_errors(bio_err); } NCONF_free(req_conf); + BIO_free(addext_bio); BIO_free(in); BIO_free_all(out); EVP_PKEY_free(pkey); @@ -827,7 +878,7 @@ int req_main(int argc, char **argv) OPENSSL_free(passin); if (passout != nofree_passout) OPENSSL_free(passout); - return (ret); + return ret; } static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int multirdn, @@ -887,7 +938,7 @@ static int make_REQ(X509_REQ *req, EVP_PKEY *pkey, char *subj, int multirdn, ret = 1; err: - return (ret); + return ret; } /* @@ -943,7 +994,8 @@ static int prompt_info(X509_REQ *req, if (sk_CONF_VALUE_num(dn_sk)) { i = -1; - start:for (;;) { + start: + for ( ; ; ) { i++; if (sk_CONF_VALUE_num(dn_sk) <= i) break; @@ -968,35 +1020,36 @@ static int prompt_info(X509_REQ *req, if (*type == '+') { mval = -1; type++; - } else + } else { mval = 0; + } /* If OBJ not recognised ignore it */ if ((nid = OBJ_txt2nid(type)) == NID_undef) goto start; - if (BIO_snprintf(buf, sizeof(buf), "%s_default", v->name) - >= (int)sizeof(buf)) { - BIO_printf(bio_err, "Name '%s' too long\n", v->name); + if (!join(buf, sizeof(buf), v->name, "_default", "Name")) return 0; - } - if ((def = NCONF_get_string(req_conf, dn_sect, buf)) == NULL) { ERR_clear_error(); def = ""; } - BIO_snprintf(buf, sizeof(buf), "%s_value", v->name); + if (!join(buf, sizeof(buf), v->name, "_value", "Name")) + return 0; if ((value = NCONF_get_string(req_conf, dn_sect, buf)) == NULL) { ERR_clear_error(); value = NULL; } - BIO_snprintf(buf, sizeof(buf), "%s_min", v->name); + if (!join(buf, sizeof(buf), v->name, "_min", "Name")) + return 0; if (!NCONF_get_number(req_conf, dn_sect, buf, &n_min)) { ERR_clear_error(); n_min = -1; } - BIO_snprintf(buf, sizeof(buf), "%s_max", v->name); + + if (!join(buf, sizeof(buf), v->name, "_max", "Name")) + return 0; if (!NCONF_get_number(req_conf, dn_sect, buf, &n_max)) { ERR_clear_error(); n_max = -1; @@ -1022,7 +1075,8 @@ static int prompt_info(X509_REQ *req, } i = -1; - start2: for (;;) { + start2: + for ( ; ; ) { i++; if ((attr_sk == NULL) || (sk_CONF_VALUE_num(attr_sk) <= i)) break; @@ -1032,32 +1086,31 @@ static int prompt_info(X509_REQ *req, if ((nid = OBJ_txt2nid(type)) == NID_undef) goto start2; - if (BIO_snprintf(buf, sizeof(buf), "%s_default", type) - >= (int)sizeof(buf)) { - BIO_printf(bio_err, "Name '%s' too long\n", v->name); + if (!join(buf, sizeof(buf), type, "_default", "Name")) return 0; - } - if ((def = NCONF_get_string(req_conf, attr_sect, buf)) == NULL) { ERR_clear_error(); def = ""; } - BIO_snprintf(buf, sizeof(buf), "%s_value", type); + if (!join(buf, sizeof(buf), type, "_value", "Name")) + return 0; if ((value = NCONF_get_string(req_conf, attr_sect, buf)) == NULL) { ERR_clear_error(); value = NULL; } - BIO_snprintf(buf, sizeof(buf), "%s_min", type); + if (!join(buf, sizeof(buf), type,"_min", "Name")) + return 0; if (!NCONF_get_number(req_conf, attr_sect, buf, &n_min)) { ERR_clear_error(); n_min = -1; } - BIO_snprintf(buf, sizeof(buf), "%s_max", type); + if (!join(buf, sizeof(buf), type, "_max", "Name")) + return 0; if (!NCONF_get_number(req_conf, attr_sect, buf, &n_max)) { ERR_clear_error(); n_max = -1; @@ -1120,8 +1173,9 @@ static int auto_info(X509_REQ *req, STACK_OF(CONF_VALUE) *dn_sk, if (plus_char) { type++; mval = -1; - } else + } else { mval = 0; + } if (!X509_NAME_add_entry_by_txt(subj, type, chtype, (unsigned char *)v->value, -1, -1, mval)) @@ -1155,8 +1209,8 @@ static int add_DN_object(X509_NAME *n, char *text, const char *def, BIO_printf(bio_err, "%s [%s]:", text, def); (void)BIO_flush(bio_err); if (value != NULL) { - OPENSSL_strlcpy(buf, value, sizeof(buf)); - OPENSSL_strlcat(buf, "\n", sizeof(buf)); + if (!join(buf, sizeof(buf), value, "\n", "DN value")) + return 0; BIO_printf(bio_err, "%s\n", value); } else { buf[0] = '\0'; @@ -1170,19 +1224,20 @@ static int add_DN_object(X509_NAME *n, char *text, const char *def, } if (buf[0] == '\0') - return (0); - else if (buf[0] == '\n') { + return 0; + if (buf[0] == '\n') { if ((def == NULL) || (def[0] == '\0')) - return (1); - OPENSSL_strlcpy(buf, def, sizeof(buf)); - OPENSSL_strlcat(buf, "\n", sizeof(buf)); - } else if ((buf[0] == '.') && (buf[1] == '\n')) - return (1); + return 1; + if (!join(buf, sizeof(buf), def, "\n", "DN default")) + return 0; + } else if ((buf[0] == '.') && (buf[1] == '\n')) { + return 1; + } i = strlen(buf); if (buf[i - 1] != '\n') { BIO_printf(bio_err, "weird input :-(\n"); - return (0); + return 0; } buf[--i] = '\0'; #ifdef CHARSET_EBCDIC @@ -1199,7 +1254,7 @@ static int add_DN_object(X509_NAME *n, char *text, const char *def, goto err; ret = 1; err: - return (ret); + return ret; } static int add_attribute_object(X509_REQ *req, char *text, const char *def, @@ -1214,8 +1269,8 @@ static int add_attribute_object(X509_REQ *req, char *text, const char *def, BIO_printf(bio_err, "%s [%s]:", text, def); (void)BIO_flush(bio_err); if (value != NULL) { - OPENSSL_strlcpy(buf, value, sizeof(buf)); - OPENSSL_strlcat(buf, "\n", sizeof(buf)); + if (!join(buf, sizeof(buf), value, "\n", "Attribute value")) + return 0; BIO_printf(bio_err, "%s\n", value); } else { buf[0] = '\0'; @@ -1229,19 +1284,20 @@ static int add_attribute_object(X509_REQ *req, char *text, const char *def, } if (buf[0] == '\0') - return (0); - else if (buf[0] == '\n') { + return 0; + if (buf[0] == '\n') { if ((def == NULL) || (def[0] == '\0')) - return (1); - OPENSSL_strlcpy(buf, def, sizeof(buf)); - OPENSSL_strlcat(buf, "\n", sizeof(buf)); - } else if ((buf[0] == '.') && (buf[1] == '\n')) - return (1); + return 1; + if (!join(buf, sizeof(buf), def, "\n", "Attribute default")) + return 0; + } else if ((buf[0] == '.') && (buf[1] == '\n')) { + return 1; + } i = strlen(buf); if (buf[i - 1] != '\n') { BIO_printf(bio_err, "weird input :-(\n"); - return (0); + return 0; } buf[--i] = '\0'; #ifdef CHARSET_EBCDIC @@ -1260,9 +1316,9 @@ static int add_attribute_object(X509_REQ *req, char *text, const char *def, goto err; } - return (1); + return 1; err: - return (0); + return 0; } static int req_check_len(int len, int n_min, int n_max) @@ -1271,22 +1327,23 @@ static int req_check_len(int len, int n_min, int n_max) BIO_printf(bio_err, "string is too short, it needs to be at least %d bytes long\n", n_min); - return (0); + return 0; } if ((n_max >= 0) && (len > n_max)) { BIO_printf(bio_err, "string is too long, it needs to be no more than %d bytes long\n", n_max); - return (0); + return 0; } - return (1); + return 1; } /* Check if the end of a string matches 'end' */ static int check_end(const char *str, const char *end) { - int elen, slen; + size_t elen, slen; const char *tmp; + elen = strlen(end); slen = strlen(str); if (elen > slen) @@ -1295,6 +1352,24 @@ static int check_end(const char *str, const char *end) return strcmp(tmp, end); } +/* + * Merge the two strings together into the result buffer checking for + * overflow and producing an error message if there is. + */ +static int join(char buf[], size_t buf_size, const char *name, + const char *tail, const char *desc) +{ + const size_t name_len = strlen(name), tail_len = strlen(tail); + + if (name_len + tail_len + 1 > buf_size) { + BIO_printf(bio_err, "%s '%s' too long\n", desc, name); + return 0; + } + memcpy(buf, name, name_len); + memcpy(buf + name_len, tail, tail_len + 1); + return 1; +} + static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, int *pkey_type, long *pkeylen, char **palgnam, ENGINE *keygen_engine) @@ -1312,15 +1387,15 @@ static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, *pkey_type = EVP_PKEY_RSA; keylen = atol(gstr); *pkeylen = keylen; - } else if (strncmp(gstr, "param:", 6) == 0) + } else if (strncmp(gstr, "param:", 6) == 0) { paramfile = gstr + 6; - else { + } else { const char *p = strchr(gstr, ':'); int len; ENGINE *tmpeng; const EVP_PKEY_ASN1_METHOD *ameth; - if (p) + if (p != NULL) len = p - gstr; else len = strlen(gstr); @@ -1331,7 +1406,7 @@ static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, ameth = EVP_PKEY_asn1_find_str(&tmpeng, gstr, len); - if (!ameth) { + if (ameth == NULL) { BIO_printf(bio_err, "Unknown algorithm %.*s\n", len, gstr); return NULL; } @@ -1341,28 +1416,31 @@ static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, ENGINE_finish(tmpeng); #endif if (*pkey_type == EVP_PKEY_RSA) { - if (p) { + if (p != NULL) { keylen = atol(p + 1); *pkeylen = keylen; - } else + } else { keylen = *pkeylen; - } else if (p) + } + } else if (p != NULL) { paramfile = p + 1; + } } - if (paramfile) { + if (paramfile != NULL) { pbio = BIO_new_file(paramfile, "r"); - if (!pbio) { + if (pbio == NULL) { BIO_printf(bio_err, "Can't open parameter file %s\n", paramfile); return NULL; } param = PEM_read_bio_Parameters(pbio, NULL); - if (!param) { + if (param == NULL) { X509 *x; + (void)BIO_reset(pbio); x = PEM_read_bio_X509(pbio, NULL, NULL, NULL); - if (x) { + if (x != NULL) { param = X509_get_pubkey(x); X509_free(x); } @@ -1370,25 +1448,26 @@ static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, BIO_free(pbio); - if (!param) { + if (param == NULL) { BIO_printf(bio_err, "Error reading parameter file %s\n", paramfile); return NULL; } - if (*pkey_type == -1) + if (*pkey_type == -1) { *pkey_type = EVP_PKEY_id(param); - else if (*pkey_type != EVP_PKEY_base_id(param)) { + } else if (*pkey_type != EVP_PKEY_base_id(param)) { BIO_printf(bio_err, "Key Type does not match parameters\n"); EVP_PKEY_free(param); return NULL; } } - if (palgnam) { + if (palgnam != NULL) { const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *tmpeng; const char *anam; + ameth = EVP_PKEY_asn1_find(&tmpeng, *pkey_type); - if (!ameth) { + if (ameth == NULL) { BIO_puts(bio_err, "Internal error: can't find key algorithm\n"); return NULL; } @@ -1399,12 +1478,13 @@ static EVP_PKEY_CTX *set_keygen_ctx(const char *gstr, #endif } - if (param) { + if (param != NULL) { gctx = EVP_PKEY_CTX_new(param, keygen_engine); *pkeylen = EVP_PKEY_bits(param); EVP_PKEY_free(param); - } else + } else { gctx = EVP_PKEY_CTX_new_id(*pkey_type, keygen_engine); + } if (gctx == NULL) { BIO_puts(bio_err, "Error allocating keygen context\n"); diff --git a/apps/rsa.c b/apps/rsa.c index 8b15fcba..6458b3d9 100644 --- a/apps/rsa.c +++ b/apps/rsa.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,6 +17,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -35,7 +36,7 @@ typedef enum OPTION_choice { OPT_NOOUT, OPT_TEXT, OPT_MODULUS, OPT_CHECK, OPT_CIPHER } OPTION_CHOICE; -OPTIONS rsa_options[] = { +const OPTIONS rsa_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'f', "Input format, one of DER NET PEM"}, {"outform", OPT_OUTFORM, 'f', "Output format, one of DER NET PEM PVK"}, @@ -176,12 +177,14 @@ int rsa_main(int argc, char **argv) tmpformat = FORMAT_PEMRSA; else if (informat == FORMAT_ASN1) tmpformat = FORMAT_ASN1RSA; - } else + } else { tmpformat = informat; + } pkey = load_pubkey(infile, tmpformat, 1, passin, e, "Public Key"); - } else + } else { pkey = load_key(infile, informat, 1, passin, e, "Private Key"); + } if (pkey != NULL) rsa = EVP_PKEY_get1_RSA(pkey); @@ -217,9 +220,9 @@ int rsa_main(int argc, char **argv) if (check) { int r = RSA_check_key_ex(rsa, NULL); - if (r == 1) + if (r == 1) { BIO_printf(out, "RSA key ok\n"); - else if (r == 0) { + } else if (r == 0) { unsigned long err; while ((err = ERR_peek_error()) != 0 && @@ -228,7 +231,7 @@ int rsa_main(int argc, char **argv) ERR_GET_REASON(err) != ERR_R_MALLOC_FAILURE) { BIO_printf(out, "RSA key error: %s\n", ERR_reason_error_string(err)); - ERR_get_error(); /* remove e from error stack */ + ERR_get_error(); /* remove err from error stack */ } } else if (r == -1) { ERR_print_errors(bio_err); @@ -251,8 +254,7 @@ int rsa_main(int argc, char **argv) assert(private); i = i2d_RSAPrivateKey_bio(out, rsa); } - } - else if (outformat == FORMAT_PEM) { + } else if (outformat == FORMAT_PEM) { if (pubout || pubin) { if (pubout == 2) i = PEM_write_bio_RSAPublicKey(out, rsa); @@ -297,14 +299,15 @@ int rsa_main(int argc, char **argv) if (i <= 0) { BIO_printf(bio_err, "unable to write key\n"); ERR_print_errors(bio_err); - } else + } else { ret = 0; + } end: release_engine(e); BIO_free_all(out); RSA_free(rsa); OPENSSL_free(passin); OPENSSL_free(passout); - return (ret); + return ret; } #endif diff --git a/apps/rsautl.c b/apps/rsautl.c index d527bf4d..5da8504d 100644 --- a/apps/rsautl.c +++ b/apps/rsautl.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -13,6 +13,7 @@ NON_EMPTY_TRANSLATION_UNIT #else # include "apps.h" +# include "progs.h" # include # include # include @@ -32,10 +33,11 @@ typedef enum OPTION_choice { OPT_ENGINE, OPT_IN, OPT_OUT, OPT_ASN1PARSE, OPT_HEXDUMP, OPT_RAW, OPT_OAEP, OPT_SSL, OPT_PKCS, OPT_X931, OPT_SIGN, OPT_VERIFY, OPT_REV, OPT_ENCRYPT, OPT_DECRYPT, - OPT_PUBIN, OPT_CERTIN, OPT_INKEY, OPT_PASSIN, OPT_KEYFORM + OPT_PUBIN, OPT_CERTIN, OPT_INKEY, OPT_PASSIN, OPT_KEYFORM, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS rsautl_options[] = { +const OPTIONS rsautl_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"in", OPT_IN, '<', "Input file"}, {"out", OPT_OUT, '>', "Output file"}, @@ -57,6 +59,7 @@ OPTIONS rsautl_options[] = { {"encrypt", OPT_ENCRYPT, '-', "Encrypt with public key"}, {"decrypt", OPT_DECRYPT, '-', "Decrypt with private key"}, {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, + OPT_R_OPTIONS, # ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, # endif @@ -153,6 +156,10 @@ int rsautl_main(int argc, char **argv) case OPT_PASSIN: passinarg = opt_arg(); break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; } } argc = opt_num_rest(); @@ -169,9 +176,6 @@ int rsautl_main(int argc, char **argv) goto end; } -/* FIXME: seed PRNG only if needed */ - app_RAND_load_file(NULL, 0); - switch (key_type) { case KEY_PRIVKEY: pkey = load_key(keyfile, keyformat, 0, passin, e, "Private Key"); @@ -190,14 +194,13 @@ int rsautl_main(int argc, char **argv) break; } - if (!pkey) { + if (pkey == NULL) return 1; - } rsa = EVP_PKEY_get1_RSA(pkey); EVP_PKEY_free(pkey); - if (!rsa) { + if (rsa == NULL) { BIO_printf(bio_err, "Error getting RSA key\n"); ERR_print_errors(bio_err); goto end; @@ -261,10 +264,11 @@ int rsautl_main(int argc, char **argv) if (!ASN1_parse_dump(out, rsa_out, rsa_outlen, 1, -1)) { ERR_print_errors(bio_err); } - } else if (hexdump) + } else if (hexdump) { BIO_dump(out, (char *)rsa_out, rsa_outlen); - else + } else { BIO_write(out, rsa_out, rsa_outlen); + } end: RSA_free(rsa); release_engine(e); diff --git a/apps/s_apps.h b/apps/s_apps.h index c47932bf..614aab80 100644 --- a/apps/s_apps.h +++ b/apps/s_apps.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,37 +17,12 @@ # define _kbhit kbhit #endif -#if defined(OPENSSL_SYS_VMS) && !defined(FD_SET) -/* - * VAX C does not defined fd_set and friends, but it's actually quite simple - */ -/* These definitions are borrowed from SOCKETSHR. /Richard Levitte */ -# define MAX_NOFILE 32 -# define NBBY 8 /* number of bits in a byte */ - -# ifndef FD_SETSIZE -# define FD_SETSIZE MAX_NOFILE -# endif /* FD_SETSIZE */ - -/* How many things we'll allow select to use. 0 if unlimited */ -# define MAXSELFD MAX_NOFILE -typedef int fd_mask; /* int here! VMS prototypes int, not long */ -# define NFDBITS (sizeof(fd_mask) * NBBY)/* bits per mask (power of 2!) */ -# define NFDSHIFT 5 /* Shift based on above */ - -typedef fd_mask fd_set; -# define FD_SET(n, p) (*(p) |= (1 << ((n) % NFDBITS))) -# define FD_CLR(n, p) (*(p) &= ~(1 << ((n) % NFDBITS))) -# define FD_ISSET(n, p) (*(p) & (1 << ((n) % NFDBITS))) -# define FD_ZERO(p) memset((p), 0, sizeof(*(p))) -#endif - #define PORT "4433" #define PROTOCOL "tcp" -typedef int (*do_server_cb)(int s, int stype, unsigned char *context); +typedef int (*do_server_cb)(int s, int stype, int prot, unsigned char *context); int do_server(int *accept_sock, const char *host, const char *port, - int family, int type, + int family, int type, int protocol, do_server_cb cb, unsigned char *context, int naccept); #ifdef HEADER_X509_H @@ -59,11 +34,12 @@ int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key, STACK_OF(X509) *chain, int build_chain); int ssl_print_sigalgs(BIO *out, SSL *s); int ssl_print_point_formats(BIO *out, SSL *s); -int ssl_print_curves(BIO *out, SSL *s, int noshared); +int ssl_print_groups(BIO *out, SSL *s, int noshared); #endif int ssl_print_tmp_key(BIO *out, SSL *s); int init_client(int *sock, const char *host, const char *port, - int family, int type); + const char *bindhost, const char *bindport, + int family, int type, int protocol); int should_retry(int i); long bio_dump_callback(BIO *bio, int cmd, const char *argp, @@ -99,4 +75,6 @@ int ssl_load_stores(SSL_CTX *ctx, const char *vfyCApath, const char *chCAfile, STACK_OF(X509_CRL) *crls, int crl_download); void ssl_ctx_security_debug(SSL_CTX *ctx, int verbose); +int set_keylog_file(SSL_CTX *ctx, const char *keylog_file); +void print_ca_names(BIO *bio, SSL *s); #endif diff --git a/apps/s_cb.c b/apps/s_cb.c index afa30654..23031092 100644 --- a/apps/s_cb.c +++ b/apps/s_cb.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,9 +11,7 @@ #include #include #include /* for memcpy() and strcmp() */ -#define USE_SOCKETS #include "apps.h" -#undef USE_SOCKETS #include #include #include @@ -32,6 +30,7 @@ VERIFY_CB_ARGS verify_args = { 0, 0, X509_V_OK, 0 }; static unsigned char cookie_secret[COOKIE_SECRET_LENGTH]; static int cookie_initialized = 0; #endif +static BIO *bio_keylog = NULL; static const char *lookup(int val, const STRINT_PAIR* list, const char* def) { @@ -52,13 +51,14 @@ int verify_callback(int ok, X509_STORE_CTX *ctx) if (!verify_args.quiet || !ok) { BIO_printf(bio_err, "depth=%d ", depth); - if (err_cert) { + if (err_cert != NULL) { X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert), - 0, XN_FLAG_ONELINE); + 0, get_nameopt()); BIO_puts(bio_err, "\n"); - } else + } else { BIO_puts(bio_err, "\n"); + } } if (!ok) { BIO_printf(bio_err, "verify error:num=%d:%s\n", err, @@ -76,7 +76,7 @@ int verify_callback(int ok, X509_STORE_CTX *ctx) 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); + 0, get_nameopt()); BIO_puts(bio_err, "\n"); break; case X509_V_ERR_CERT_NOT_YET_VALID: @@ -100,7 +100,7 @@ int verify_callback(int ok, X509_STORE_CTX *ctx) policies_print(ctx); if (ok && !verify_args.quiet) BIO_printf(bio_err, "verify return:%d\n", ok); - return (ok); + return ok; } int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) @@ -111,7 +111,7 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) BIO_printf(bio_err, "unable to get certificate from '%s'\n", cert_file); ERR_print_errors(bio_err); - return (0); + return 0; } if (key_file == NULL) key_file = cert_file; @@ -119,7 +119,7 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) BIO_printf(bio_err, "unable to get private key from '%s'\n", key_file); ERR_print_errors(bio_err); - return (0); + return 0; } /* @@ -134,10 +134,10 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file) if (!SSL_CTX_check_private_key(ctx)) { BIO_printf(bio_err, "Private key does not match the certificate public key\n"); - return (0); + return 0; } } - return (1); + return 1; } int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key, @@ -205,7 +205,7 @@ static void ssl_print_client_cert_types(BIO *bio, SSL *s) if (i) BIO_puts(bio, ", "); - if (cname) + if (cname != NULL) BIO_puts(bio, cname); else BIO_printf(bio, "UNKNOWN (%d),", cert_type); @@ -213,12 +213,35 @@ static void ssl_print_client_cert_types(BIO *bio, SSL *s) BIO_puts(bio, "\n"); } +static const char *get_sigtype(int nid) +{ + switch (nid) { + case EVP_PKEY_RSA: + return "RSA"; + + case EVP_PKEY_RSA_PSS: + return "RSA-PSS"; + + case EVP_PKEY_DSA: + return "DSA"; + + case EVP_PKEY_EC: + return "ECDSA"; + + case NID_ED25519: + return "Ed25519"; + + default: + return NULL; + } +} + static int do_print_sigalgs(BIO *out, SSL *s, int shared) { int i, nsig, client; client = SSL_is_server(s) ? 0 : 1; if (shared) - nsig = SSL_get_shared_sigalgs(s, -1, NULL, NULL, NULL, NULL, NULL); + nsig = SSL_get_shared_sigalgs(s, 0, NULL, NULL, NULL, NULL, NULL); else nsig = SSL_get_sigalgs(s, -1, NULL, NULL, NULL, NULL, NULL); if (nsig == 0) @@ -241,20 +264,15 @@ static int do_print_sigalgs(BIO *out, SSL *s, int shared) SSL_get_sigalgs(s, i, &sign_nid, &hash_nid, NULL, &rsign, &rhash); if (i) BIO_puts(out, ":"); - if (sign_nid == EVP_PKEY_RSA) - sstr = "RSA"; - else if (sign_nid == EVP_PKEY_DSA) - sstr = "DSA"; - else if (sign_nid == EVP_PKEY_EC) - sstr = "ECDSA"; + sstr = get_sigtype(sign_nid); if (sstr) - BIO_printf(out, "%s+", sstr); + BIO_printf(out, "%s", sstr); else - BIO_printf(out, "0x%02X+", (int)rsign); + BIO_printf(out, "0x%02X", (int)rsign); if (hash_nid != NID_undef) - BIO_printf(out, "%s", OBJ_nid2sn(hash_nid)); - else - BIO_printf(out, "0x%02X", (int)rhash); + BIO_printf(out, "+%s", OBJ_nid2sn(hash_nid)); + else if (sstr == NULL) + BIO_printf(out, "+0x%02X", (int)rhash); } BIO_puts(out, "\n"); return 1; @@ -262,13 +280,15 @@ static int do_print_sigalgs(BIO *out, SSL *s, int shared) int ssl_print_sigalgs(BIO *out, SSL *s) { - int mdnid; + int nid; if (!SSL_is_server(s)) ssl_print_client_cert_types(out, s); do_print_sigalgs(out, s, 0); do_print_sigalgs(out, s, 1); - if (SSL_get_peer_signature_nid(s, &mdnid)) - BIO_printf(out, "Peer signing digest: %s\n", OBJ_nid2sn(mdnid)); + if (SSL_get_peer_signature_nid(s, &nid) && nid != NID_undef) + BIO_printf(out, "Peer signing digest: %s\n", OBJ_nid2sn(nid)); + if (SSL_get_peer_signature_type_nid(s, &nid)) + BIO_printf(out, "Peer signature type: %s\n", get_sigtype(nid)); return 1; } @@ -307,55 +327,58 @@ int ssl_print_point_formats(BIO *out, SSL *s) return 1; } -int ssl_print_curves(BIO *out, SSL *s, int noshared) +int ssl_print_groups(BIO *out, SSL *s, int noshared) { - int i, ncurves, *curves, nid; - const char *cname; + int i, ngroups, *groups, nid; + const char *gname; - ncurves = SSL_get1_curves(s, NULL); - if (ncurves <= 0) + ngroups = SSL_get1_groups(s, NULL); + if (ngroups <= 0) return 1; - curves = app_malloc(ncurves * sizeof(int), "curves to print"); - SSL_get1_curves(s, curves); + groups = app_malloc(ngroups * sizeof(int), "groups to print"); + SSL_get1_groups(s, groups); - BIO_puts(out, "Supported Elliptic Curves: "); - for (i = 0; i < ncurves; i++) { + BIO_puts(out, "Supported Elliptic Groups: "); + for (i = 0; i < ngroups; i++) { if (i) BIO_puts(out, ":"); - nid = curves[i]; + nid = groups[i]; /* If unrecognised print out hex version */ - if (nid & TLSEXT_nid_unknown) + if (nid & TLSEXT_nid_unknown) { BIO_printf(out, "0x%04X", nid & 0xFFFF); - else { + } else { + /* TODO(TLS1.3): Get group name here */ /* Use NIST name for curve if it exists */ - cname = EC_curve_nid2nist(nid); - if (!cname) - cname = OBJ_nid2sn(nid); - BIO_printf(out, "%s", cname); + gname = EC_curve_nid2nist(nid); + if (gname == NULL) + gname = OBJ_nid2sn(nid); + BIO_printf(out, "%s", gname); } } - OPENSSL_free(curves); + OPENSSL_free(groups); if (noshared) { BIO_puts(out, "\n"); return 1; } - BIO_puts(out, "\nShared Elliptic curves: "); - ncurves = SSL_get_shared_curve(s, -1); - for (i = 0; i < ncurves; i++) { + BIO_puts(out, "\nShared Elliptic groups: "); + ngroups = SSL_get_shared_group(s, -1); + for (i = 0; i < ngroups; i++) { if (i) BIO_puts(out, ":"); - nid = SSL_get_shared_curve(s, i); - cname = EC_curve_nid2nist(nid); - if (!cname) - cname = OBJ_nid2sn(nid); - BIO_printf(out, "%s", cname); + nid = SSL_get_shared_group(s, i); + /* TODO(TLS1.3): Convert for DH groups */ + gname = EC_curve_nid2nist(nid); + if (gname == NULL) + gname = OBJ_nid2sn(nid); + BIO_printf(out, "%s", gname); } - if (ncurves == 0) + if (ngroups == 0) BIO_puts(out, "NONE"); BIO_puts(out, "\n"); return 1; } #endif + int ssl_print_tmp_key(BIO *out, SSL *s) { EVP_PKEY *key; @@ -379,7 +402,7 @@ int ssl_print_tmp_key(BIO *out, SSL *s) nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(ec)); EC_KEY_free(ec); cname = EC_curve_nid2nist(nid); - if (!cname) + if (cname == NULL) cname = OBJ_nid2sn(nid); BIO_printf(out, "ECDH, %s, %d bits\n", cname, EVP_PKEY_bits(key)); } @@ -400,19 +423,19 @@ long bio_dump_callback(BIO *bio, int cmd, const char *argp, out = (BIO *)BIO_get_callback_arg(bio); if (out == NULL) - return (ret); + return ret; if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) { BIO_printf(out, "read from %p [%p] (%lu bytes => %ld (0x%lX))\n", (void *)bio, (void *)argp, (unsigned long)argi, ret, ret); BIO_dump(out, argp, (int)ret); - return (ret); + return ret; } else if (cmd == (BIO_CB_WRITE | BIO_CB_RETURN)) { BIO_printf(out, "write to %p [%p] (%lu bytes => %ld (0x%lX))\n", (void *)bio, (void *)argp, (unsigned long)argi, ret, ret); BIO_dump(out, argp, (int)ret); } - return (ret); + return ret; } void apps_ssl_info_callback(const SSL *s, int where, int ret) @@ -441,10 +464,9 @@ void apps_ssl_info_callback(const SSL *s, int where, int ret) if (ret == 0) BIO_printf(bio_err, "%s:failed in %s\n", str, SSL_state_string_long(s)); - else if (ret < 0) { + else if (ret < 0) BIO_printf(bio_err, "%s:error in %s\n", str, SSL_state_string_long(s)); - } } } @@ -453,12 +475,15 @@ static STRINT_PAIR ssl_versions[] = { {"TLS 1.0", TLS1_VERSION}, {"TLS 1.1", TLS1_1_VERSION}, {"TLS 1.2", TLS1_2_VERSION}, + {"TLS 1.3", TLS1_3_VERSION}, {"DTLS 1.0", DTLS1_VERSION}, {"DTLS 1.0 (bad)", DTLS1_BAD_VER}, {NULL} }; + static STRINT_PAIR alert_types[] = { {" close_notify", 0}, + {" end_of_early_data", 1}, {" unexpected_message", 10}, {" bad_record_mac", 20}, {" decryption_failed", 21}, @@ -479,33 +504,43 @@ static STRINT_PAIR alert_types[] = { {" protocol_version", 70}, {" insufficient_security", 71}, {" internal_error", 80}, + {" inappropriate_fallback", 86}, {" user_canceled", 90}, {" no_renegotiation", 100}, + {" missing_extension", 109}, {" unsupported_extension", 110}, {" certificate_unobtainable", 111}, {" unrecognized_name", 112}, {" bad_certificate_status_response", 113}, {" bad_certificate_hash_value", 114}, {" unknown_psk_identity", 115}, + {" certificate_required", 116}, {NULL} }; static STRINT_PAIR handshakes[] = { - {", HelloRequest", 0}, - {", ClientHello", 1}, - {", ServerHello", 2}, - {", HelloVerifyRequest", 3}, - {", NewSessionTicket", 4}, - {", Certificate", 11}, - {", ServerKeyExchange", 12}, - {", CertificateRequest", 13}, - {", ServerHelloDone", 14}, - {", CertificateVerify", 15}, - {", ClientKeyExchange", 16}, - {", Finished", 20}, + {", HelloRequest", SSL3_MT_HELLO_REQUEST}, + {", ClientHello", SSL3_MT_CLIENT_HELLO}, + {", ServerHello", SSL3_MT_SERVER_HELLO}, + {", HelloVerifyRequest", DTLS1_MT_HELLO_VERIFY_REQUEST}, + {", NewSessionTicket", SSL3_MT_NEWSESSION_TICKET}, + {", EndOfEarlyData", SSL3_MT_END_OF_EARLY_DATA}, + {", EncryptedExtensions", SSL3_MT_ENCRYPTED_EXTENSIONS}, + {", Certificate", SSL3_MT_CERTIFICATE}, + {", ServerKeyExchange", SSL3_MT_SERVER_KEY_EXCHANGE}, + {", CertificateRequest", SSL3_MT_CERTIFICATE_REQUEST}, + {", ServerHelloDone", SSL3_MT_SERVER_DONE}, + {", CertificateVerify", SSL3_MT_CERTIFICATE_VERIFY}, + {", ClientKeyExchange", SSL3_MT_CLIENT_KEY_EXCHANGE}, + {", Finished", SSL3_MT_FINISHED}, {", CertificateUrl", 21}, - {", CertificateStatus", 22}, + {", CertificateStatus", SSL3_MT_CERTIFICATE_STATUS}, {", SupplementalData", 23}, + {", KeyUpdate", SSL3_MT_KEY_UPDATE}, +#ifndef OPENSSL_NO_NEXTPROTONEG + {", NextProto", SSL3_MT_NEXT_PROTO}, +#endif + {", MessageHash", SSL3_MT_MESSAGE_HASH}, {NULL} }; @@ -522,13 +557,14 @@ void msg_cb(int write_p, int version, int content_type, const void *buf, version == TLS1_VERSION || version == TLS1_1_VERSION || version == TLS1_2_VERSION || + version == TLS1_3_VERSION || version == DTLS1_VERSION || version == DTLS1_BAD_VER) { switch (content_type) { case 20: - str_content_type = "ChangeCipherSpec"; + str_content_type = ", ChangeCipherSpec"; break; case 21: - str_content_type = "Alert"; + str_content_type = ", Alert"; str_details1 = ", ???"; if (len == 2) { switch (bp[0]) { @@ -543,13 +579,13 @@ void msg_cb(int write_p, int version, int content_type, const void *buf, } break; case 22: - str_content_type = "Handshake"; + str_content_type = ", Handshake"; str_details1 = "???"; if (len > 0) str_details1 = lookup((int)bp[0], handshakes, "???"); break; case 23: - str_content_type = "ApplicationData"; + str_content_type = ", ApplicationData"; break; #ifndef OPENSSL_NO_HEARTBEATS case 24: @@ -602,7 +638,7 @@ static STRINT_PAIR tlsext_types[] = { {"client authz", TLSEXT_TYPE_client_authz}, {"server authz", TLSEXT_TYPE_server_authz}, {"cert type", TLSEXT_TYPE_cert_type}, - {"elliptic curves", TLSEXT_TYPE_elliptic_curves}, + {"supported_groups", TLSEXT_TYPE_supported_groups}, {"EC point formats", TLSEXT_TYPE_ec_point_formats}, {"SRP", TLSEXT_TYPE_srp}, {"signature algorithms", TLSEXT_TYPE_signature_algorithms}, @@ -625,6 +661,12 @@ static STRINT_PAIR tlsext_types[] = { #ifdef TLSEXT_TYPE_extended_master_secret {"extended master secret", TLSEXT_TYPE_extended_master_secret}, #endif + {"key share", TLSEXT_TYPE_key_share}, + {"supported versions", TLSEXT_TYPE_supported_versions}, + {"psk", TLSEXT_TYPE_psk}, + {"psk kex modes", TLSEXT_TYPE_psk_kex_modes}, + {"certificate authorities", TLSEXT_TYPE_certificate_authorities}, + {"post handshake auth", TLSEXT_TYPE_post_handshake_auth}, {NULL} }; @@ -645,9 +687,9 @@ int generate_cookie_callback(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len) { unsigned char *buffer; - size_t length; + size_t length = 0; unsigned short port; - BIO_ADDR *peer = NULL; + BIO_ADDR *lpeer = NULL, *peer = NULL; /* Initialize a random secret */ if (!cookie_initialized) { @@ -658,17 +700,24 @@ int generate_cookie_callback(SSL *ssl, unsigned char *cookie, cookie_initialized = 1; } - peer = BIO_ADDR_new(); - if (peer == NULL) { - BIO_printf(bio_err, "memory full\n"); - return 0; + if (SSL_is_dtls(ssl)) { + lpeer = peer = BIO_ADDR_new(); + if (peer == NULL) { + BIO_printf(bio_err, "memory full\n"); + return 0; + } + + /* Read peer information */ + (void)BIO_dgram_get_peer(SSL_get_rbio(ssl), peer); + } else { + peer = ourpeer; } - /* Read peer information */ - (void)BIO_dgram_get_peer(SSL_get_rbio(ssl), peer); - /* Create buffer with peer's address and port */ - BIO_ADDR_rawaddress(peer, NULL, &length); + if (!BIO_ADDR_rawaddress(peer, NULL, &length)) { + BIO_printf(bio_err, "Failed getting peer address\n"); + return 0; + } OPENSSL_assert(length != 0); port = BIO_ADDR_rawport(peer); length += sizeof(port); @@ -682,7 +731,7 @@ int generate_cookie_callback(SSL *ssl, unsigned char *cookie, buffer, length, cookie, cookie_len); OPENSSL_free(buffer); - BIO_ADDR_free(peer); + BIO_ADDR_free(lpeer); return 1; } @@ -774,24 +823,24 @@ static int set_cert_cb(SSL *ssl, void *arg) #endif SSL_certs_clear(ssl); - if (!exc) + if (exc == NULL) return 1; /* * Go to end of list and traverse backwards since we prepend newer * entries this retains the original order. */ - while (exc->next) + while (exc->next != NULL) exc = exc->next; i = 0; - while (exc) { + while (exc != NULL) { i++; rv = SSL_check_chain(ssl, exc->cert, exc->key, exc->chain); BIO_printf(bio_err, "Checking cert chain %d:\nSubject: ", i); X509_NAME_print_ex(bio_err, X509_get_subject_name(exc->cert), 0, - XN_FLAG_ONELINE); + get_nameopt()); BIO_puts(bio_err, "\n"); print_chain_flags(ssl, rv); if (rv & CERT_PKEY_VALID) { @@ -807,8 +856,9 @@ static int set_cert_cb(SSL *ssl, void *arg) if (exc->build_chain) { if (!SSL_build_cert_chain(ssl, 0)) return 0; - } else if (exc->chain) + } else if (exc->chain != NULL) { SSL_set1_chain(ssl, exc->chain); + } } exc = exc->prev; } @@ -845,7 +895,7 @@ void ssl_excert_free(SSL_EXCERT *exc) { SSL_EXCERT *curr; - if (!exc) + if (exc == NULL) return; while (exc) { X509_free(exc->cert); @@ -860,33 +910,33 @@ void ssl_excert_free(SSL_EXCERT *exc) int load_excert(SSL_EXCERT **pexc) { SSL_EXCERT *exc = *pexc; - if (!exc) + if (exc == NULL) return 1; /* If nothing in list, free and set to NULL */ - if (!exc->certfile && !exc->next) { + if (exc->certfile == NULL && exc->next == NULL) { ssl_excert_free(exc); *pexc = NULL; return 1; } for (; exc; exc = exc->next) { - if (!exc->certfile) { + if (exc->certfile == NULL) { BIO_printf(bio_err, "Missing filename\n"); return 0; } exc->cert = load_cert(exc->certfile, exc->certform, "Server Certificate"); - if (!exc->cert) + if (exc->cert == NULL) return 0; - if (exc->keyfile) { + if (exc->keyfile != NULL) { exc->key = load_key(exc->keyfile, exc->keyform, 0, NULL, NULL, "Server Key"); } else { exc->key = load_key(exc->certfile, exc->certform, 0, NULL, NULL, "Server Key"); } - if (!exc->key) + if (exc->key == NULL) return 0; - if (exc->chainfile) { + if (exc->chainfile != NULL) { if (!load_certs(exc->chainfile, &exc->chain, FORMAT_PEM, NULL, "Server Chain")) return 0; @@ -918,7 +968,7 @@ int args_excert(int opt, SSL_EXCERT **pexc) case OPT_X__LAST: return 0; case OPT_X_CERT: - if (exc->certfile && !ssl_excert_prepend(&exc)) { + if (exc->certfile != NULL && !ssl_excert_prepend(&exc)) { BIO_printf(bio_err, "%s: Error adding xcert\n", opt_getprog()); goto err; } @@ -926,14 +976,14 @@ int args_excert(int opt, SSL_EXCERT **pexc) exc->certfile = opt_arg(); break; case OPT_X_KEY: - if (exc->keyfile) { + if (exc->keyfile != NULL) { BIO_printf(bio_err, "%s: Key already specified\n", opt_getprog()); goto err; } exc->keyfile = opt_arg(); break; case OPT_X_CHAIN: - if (exc->chainfile) { + if (exc->chainfile != NULL) { BIO_printf(bio_err, "%s: Chain already specified\n", opt_getprog()); goto err; @@ -976,11 +1026,11 @@ static void print_raw_cipherlist(SSL *s) const SSL_CIPHER *c = SSL_CIPHER_find(s, rlist); if (i) BIO_puts(bio_err, ":"); - if (c) + if (c != NULL) { BIO_puts(bio_err, SSL_CIPHER_get_name(c)); - else if (!memcmp(rlist, scsv_id, num)) + } else if (memcmp(rlist, scsv_id, num) == 0) { BIO_puts(bio_err, "SCSV"); - else { + } else { size_t j; BIO_puts(bio_err, "0x"); for (j = 0; j < num; j++) @@ -1002,8 +1052,8 @@ static char *hexencode(const unsigned char *data, size_t len) int ilen = (int) outlen; if (outlen < len || ilen < 0 || outlen != (size_t)ilen) { - BIO_printf(bio_err, "%s: %"BIO_PRI64"u-byte buffer too large to hexencode\n", - opt_getprog(), (uint64_t)len); + BIO_printf(bio_err, "%s: %zu-byte buffer too large to hexencode\n", + opt_getprog(), len); exit(1); } cp = out = app_malloc(ilen, "TLSA hex data buffer"); @@ -1068,7 +1118,6 @@ void print_ssl_summary(SSL *s) { const SSL_CIPHER *c; X509 *peer; - /* const char *pnam = SSL_is_server(s) ? "client" : "server"; */ BIO_printf(bio_err, "Protocol version: %s\n", SSL_get_version(s)); print_raw_cipherlist(s); @@ -1076,23 +1125,26 @@ void print_ssl_summary(SSL *s) BIO_printf(bio_err, "Ciphersuite: %s\n", SSL_CIPHER_get_name(c)); do_print_sigalgs(bio_err, s, 0); peer = SSL_get_peer_certificate(s); - if (peer) { + if (peer != NULL) { int nid; BIO_puts(bio_err, "Peer certificate: "); X509_NAME_print_ex(bio_err, X509_get_subject_name(peer), - 0, XN_FLAG_ONELINE); + 0, get_nameopt()); BIO_puts(bio_err, "\n"); if (SSL_get_peer_signature_nid(s, &nid)) BIO_printf(bio_err, "Hash used: %s\n", OBJ_nid2sn(nid)); + if (SSL_get_peer_signature_type_nid(s, &nid)) + BIO_printf(bio_err, "Signature type: %s\n", get_sigtype(nid)); print_verify_detail(s, bio_err); - } else + } else { BIO_puts(bio_err, "No peer certificate\n"); + } X509_free(peer); #ifndef OPENSSL_NO_EC ssl_print_point_formats(bio_err, s); if (SSL_is_server(s)) - ssl_print_curves(bio_err, s, 1); + ssl_print_groups(bio_err, s, 1); else ssl_print_tmp_key(bio_err, s); #else @@ -1111,7 +1163,7 @@ int config_ctx(SSL_CONF_CTX *cctx, STACK_OF(OPENSSL_STRING) *str, const char *flag = sk_OPENSSL_STRING_value(str, i); const char *arg = sk_OPENSSL_STRING_value(str, i + 1); if (SSL_CONF_cmd(cctx, flag, arg) <= 0) { - if (arg) + if (arg != NULL) BIO_printf(bio_err, "Error with command: \"%s %s\"\n", flag, arg); else @@ -1245,7 +1297,7 @@ static int security_callback_debug(const SSL *s, const SSL_CTX *ctx, cert_md = 1; break; } - if (nm) + if (nm != NULL) BIO_printf(sdb->out, "%s=", nm); switch (op & SSL_SECOP_OTHER_TYPE) { @@ -1333,3 +1385,68 @@ void ssl_ctx_security_debug(SSL_CTX *ctx, int verbose) SSL_CTX_set_security_callback(ctx, security_callback_debug); SSL_CTX_set0_security_ex_data(ctx, &sdb); } + +static void keylog_callback(const SSL *ssl, const char *line) +{ + if (bio_keylog == NULL) { + BIO_printf(bio_err, "Keylog callback is invoked without valid file!\n"); + return; + } + + /* + * There might be concurrent writers to the keylog file, so we must ensure + * that the given line is written at once. + */ + BIO_printf(bio_keylog, "%s\n", line); + (void)BIO_flush(bio_keylog); +} + +int set_keylog_file(SSL_CTX *ctx, const char *keylog_file) +{ + /* Close any open files */ + BIO_free_all(bio_keylog); + bio_keylog = NULL; + + if (ctx == NULL || keylog_file == NULL) { + /* Keylogging is disabled, OK. */ + return 0; + } + + /* + * Append rather than write in order to allow concurrent modification. + * Furthermore, this preserves existing keylog files which is useful when + * the tool is run multiple times. + */ + bio_keylog = BIO_new_file(keylog_file, "a"); + if (bio_keylog == NULL) { + BIO_printf(bio_err, "Error writing keylog file %s\n", keylog_file); + return 1; + } + + /* Write a header for seekable, empty files (this excludes pipes). */ + if (BIO_tell(bio_keylog) == 0) { + BIO_puts(bio_keylog, + "# SSL/TLS secrets log file, generated by OpenSSL\n"); + (void)BIO_flush(bio_keylog); + } + SSL_CTX_set_keylog_callback(ctx, keylog_callback); + return 0; +} + +void print_ca_names(BIO *bio, SSL *s) +{ + const char *cs = SSL_is_server(s) ? "server" : "client"; + const STACK_OF(X509_NAME) *sk = SSL_get0_peer_CA_list(s); + int i; + + if (sk == NULL || sk_X509_NAME_num(sk) == 0) { + BIO_printf(bio, "---\nNo %s certificate CA names sent\n", cs); + return; + } + + BIO_printf(bio, "---\nAcceptable %s certificate CA names\n",cs); + for (i = 0; i < sk_X509_NAME_num(sk); i++) { + X509_NAME_print_ex(bio, sk_X509_NAME_value(sk, i), 0, get_nameopt()); + BIO_write(bio, "\n", 1); + } +} diff --git a/apps/s_client.c b/apps/s_client.c index fb89f0cd..a319d217 100644 --- a/apps/s_client.c +++ b/apps/s_client.c @@ -1,5 +1,6 @@ /* * Copyright 1995-2018 The OpenSSL Project Authors. 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 @@ -7,33 +8,7 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - +#include "e_os.h" #include #include #include @@ -54,8 +29,8 @@ typedef unsigned int u_int; #endif -#define USE_SOCKETS #include "apps.h" +#include "progs.h" #include #include #include @@ -72,6 +47,7 @@ typedef unsigned int u_int; #endif #include "s_apps.h" #include "timeouts.h" +#include "internal/sockets.h" #if defined(__has_feature) # if __has_feature(memory_sanitizer) @@ -90,11 +66,14 @@ static char *keymatexportlabel = NULL; static int keymatexportlen = 20; static BIO *bio_c_out = NULL; static int c_quiet = 0; +static char *sess_out = NULL; +static SSL_SESSION *psksess = NULL; static void print_stuff(BIO *berr, SSL *con, int full); #ifndef OPENSSL_NO_OCSP static int ocsp_resp_cb(SSL *s, void *arg); #endif +static int ldap_ExtendedResponse_parse(const char *buf, long rem); static int saved_errno; @@ -132,13 +111,10 @@ static void do_ssl_shutdown(SSL *ssl) } while (ret < 0); } -#ifndef OPENSSL_NO_PSK /* Default PSK identity and key */ static char *psk_identity = "Client_identity"; -/* - * char *psk_key=NULL; by default PSK is not used - */ +#ifndef OPENSSL_NO_PSK static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, @@ -155,8 +131,9 @@ static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *identity, if (c_debug) BIO_printf(bio_c_out, "NULL received PSK identity hint, continuing anyway\n"); - } else if (c_debug) + } else if (c_debug) { BIO_printf(bio_c_out, "Received PSK identity hint '%s'\n", hint); + } /* * lookup PSK identity and PSK key based on the given identity hint here @@ -197,6 +174,76 @@ static unsigned int psk_client_cb(SSL *ssl, const char *hint, char *identity, } #endif +const unsigned char tls13_aes128gcmsha256_id[] = { 0x13, 0x01 }; +const unsigned char tls13_aes256gcmsha384_id[] = { 0x13, 0x02 }; + +static int psk_use_session_cb(SSL *s, const EVP_MD *md, + const unsigned char **id, size_t *idlen, + SSL_SESSION **sess) +{ + SSL_SESSION *usesess = NULL; + const SSL_CIPHER *cipher = NULL; + + if (psksess != NULL) { + SSL_SESSION_up_ref(psksess); + usesess = psksess; + } else { + long key_len; + unsigned char *key = OPENSSL_hexstr2buf(psk_key, &key_len); + + if (key == NULL) { + BIO_printf(bio_err, "Could not convert PSK key '%s' to buffer\n", + psk_key); + return 0; + } + + if (key_len == EVP_MD_size(EVP_sha256())) + cipher = SSL_CIPHER_find(s, tls13_aes128gcmsha256_id); + else if (key_len == EVP_MD_size(EVP_sha384())) + cipher = SSL_CIPHER_find(s, tls13_aes256gcmsha384_id); + + if (cipher == NULL) { + /* Doesn't look like a suitable TLSv1.3 key. Ignore it */ + OPENSSL_free(key); + *id = NULL; + *idlen = 0; + *sess = NULL; + return 1; + } + usesess = SSL_SESSION_new(); + if (usesess == NULL + || !SSL_SESSION_set1_master_key(usesess, key, key_len) + || !SSL_SESSION_set_cipher(usesess, cipher) + || !SSL_SESSION_set_protocol_version(usesess, TLS1_3_VERSION)) { + OPENSSL_free(key); + goto err; + } + OPENSSL_free(key); + } + + cipher = SSL_SESSION_get0_cipher(usesess); + if (cipher == NULL) + goto err; + + if (md != NULL && SSL_CIPHER_get_handshake_digest(cipher) != md) { + /* PSK not usable, ignore it */ + *id = NULL; + *idlen = 0; + *sess = NULL; + SSL_SESSION_free(usesess); + } else { + *sess = usesess; + *id = (unsigned char *)psk_identity; + *idlen = strlen(psk_identity); + } + + return 1; + + err: + SSL_SESSION_free(usesess); + return 0; +} + /* This is a context that we pass to callbacks */ typedef struct tlsextctx_st { BIO *biodebug; @@ -371,10 +418,11 @@ static int serverinfo_cli_parse_cb(SSL *s, unsigned int ext_type, unsigned char ext_buf[4 + 65536]; /* Reconstruct the type/len fields prior to extension data */ - ext_buf[0] = ext_type >> 8; - ext_buf[1] = ext_type & 0xFF; - ext_buf[2] = inlen >> 8; - ext_buf[3] = inlen & 0xFF; + inlen &= 0xffff; /* for formal memcmpy correctness */ + ext_buf[0] = (unsigned char)(ext_type >> 8); + ext_buf[1] = (unsigned char)(ext_type); + ext_buf[2] = (unsigned char)(inlen >> 8); + ext_buf[3] = (unsigned char)(inlen); memcpy(ext_buf + 4, in, inlen); BIO_snprintf(pem_name, sizeof(pem_name), "SERVERINFO FOR EXTENSION %d", @@ -522,32 +570,30 @@ static int tlsa_import_rrset(SSL *con, STACK_OF(OPENSSL_STRING) *rrset) typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_4, OPT_6, OPT_HOST, OPT_PORT, OPT_CONNECT, OPT_UNIX, - OPT_XMPPHOST, OPT_VERIFY, + OPT_4, OPT_6, OPT_HOST, OPT_PORT, OPT_CONNECT, OPT_BIND, OPT_UNIX, + OPT_XMPPHOST, OPT_VERIFY, OPT_NAMEOPT, OPT_CERT, OPT_CRL, OPT_CRL_DOWNLOAD, OPT_SESS_OUT, OPT_SESS_IN, OPT_CERTFORM, OPT_CRLFORM, OPT_VERIFY_RET_ERROR, OPT_VERIFY_QUIET, OPT_BRIEF, OPT_PREXIT, OPT_CRLF, OPT_QUIET, OPT_NBIO, - OPT_SSL_CLIENT_ENGINE, OPT_RAND, OPT_IGN_EOF, OPT_NO_IGN_EOF, + OPT_SSL_CLIENT_ENGINE, OPT_IGN_EOF, OPT_NO_IGN_EOF, OPT_DEBUG, OPT_TLSEXTDEBUG, OPT_STATUS, OPT_WDEBUG, OPT_MSG, OPT_MSGFILE, OPT_ENGINE, OPT_TRACE, OPT_SECURITY_DEBUG, OPT_SECURITY_DEBUG_VERBOSE, OPT_SHOWCERTS, OPT_NBIO_TEST, OPT_STATE, -#ifndef OPENSSL_NO_PSK - OPT_PSK_IDENTITY, OPT_PSK, -#endif + OPT_PSK_IDENTITY, OPT_PSK, OPT_PSK_SESS, #ifndef OPENSSL_NO_SRP OPT_SRPUSER, OPT_SRPPASS, OPT_SRP_STRENGTH, OPT_SRP_LATEUSER, OPT_SRP_MOREGROUPS, #endif OPT_SSL3, OPT_SSL_CONFIG, - OPT_TLS1_2, OPT_TLS1_1, OPT_TLS1, OPT_DTLS, OPT_DTLS1, - OPT_DTLS1_2, OPT_TIMEOUT, OPT_MTU, OPT_KEYFORM, OPT_PASS, - OPT_CERT_CHAIN, OPT_CAPATH, OPT_NOCAPATH, OPT_CHAINCAPATH, - OPT_VERIFYCAPATH, + OPT_TLS1_3, OPT_TLS1_2, OPT_TLS1_1, OPT_TLS1, OPT_DTLS, OPT_DTLS1, + OPT_DTLS1_2, OPT_SCTP, OPT_TIMEOUT, OPT_MTU, OPT_KEYFORM, OPT_PASS, + OPT_CERT_CHAIN, OPT_CAPATH, OPT_NOCAPATH, OPT_CHAINCAPATH, OPT_VERIFYCAPATH, OPT_KEY, OPT_RECONNECT, OPT_BUILD_CHAIN, OPT_CAFILE, OPT_NOCAFILE, OPT_CHAINCAFILE, OPT_VERIFYCAFILE, OPT_NEXTPROTONEG, OPT_ALPN, - OPT_SERVERINFO, OPT_STARTTLS, OPT_SERVERNAME, - OPT_USE_SRTP, OPT_KEYMATEXPORT, OPT_KEYMATEXPORTLEN, OPT_SMTPHOST, - OPT_ASYNC, OPT_SPLIT_SEND_FRAG, OPT_MAX_PIPELINES, OPT_READ_BUF, + OPT_SERVERINFO, OPT_STARTTLS, OPT_SERVERNAME, OPT_NOSERVERNAME, OPT_ASYNC, + OPT_USE_SRTP, OPT_KEYMATEXPORT, OPT_KEYMATEXPORTLEN, OPT_PROTOHOST, + OPT_MAXFRAGLEN, OPT_MAX_SEND_FRAG, OPT_SPLIT_SEND_FRAG, OPT_MAX_PIPELINES, + OPT_READ_BUF, OPT_KEYLOG_FILE, OPT_EARLY_DATA, OPT_REQCAFILE, OPT_V_ENUM, OPT_X_ENUM, OPT_S_ENUM, @@ -555,15 +601,18 @@ typedef enum OPTION_choice { #ifndef OPENSSL_NO_CT OPT_CT, OPT_NOCT, OPT_CTLOG_FILE, #endif - OPT_DANE_TLSA_RRDATA, OPT_DANE_EE_NO_NAME + OPT_DANE_TLSA_RRDATA, OPT_DANE_EE_NO_NAME, + OPT_FORCE_PHA, + OPT_R_ENUM } OPTION_CHOICE; -OPTIONS s_client_options[] = { +const OPTIONS s_client_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"host", OPT_HOST, 's', "Use -connect instead"}, {"port", OPT_PORT, 'p', "Use -connect instead"}, {"connect", OPT_CONNECT, 's', "TCP/IP where to connect (default is :" PORT ")"}, + {"bind", OPT_BIND, 's', "bind local address for connection"}, {"proxy", OPT_PROXY, 's', "Connect to via specified proxy to the real server"}, #ifdef AF_UNIX @@ -577,6 +626,7 @@ OPTIONS s_client_options[] = { {"cert", OPT_CERT, '<', "Certificate file to use, PEM format assumed"}, {"certform", OPT_CERTFORM, 'F', "Certificate format (PEM or DER) PEM default"}, + {"nameopt", OPT_NAMEOPT, 's', "Various certificate name options"}, {"key", OPT_KEY, 's', "Private key file to use, if not in -cert file"}, {"keyform", OPT_KEYFORM, 'E', "Key format (PEM, DER or engine) PEM default"}, {"pass", OPT_PASS, 's', "Private key file pass phrase source"}, @@ -586,6 +636,8 @@ OPTIONS s_client_options[] = { "Do not load the default certificates file"}, {"no-CApath", OPT_NOCAPATH, '-', "Do not load certificates from the default certificates directory"}, + {"requestCAfile", OPT_REQCAFILE, '<', + "PEM format file of CA names to send to the server"}, {"dane_tlsa_domain", OPT_DANE_TLSA_DOMAIN, 's', "DANE TLSA base domain"}, {"dane_tlsa_rrdata", OPT_DANE_TLSA_RRDATA, 's', "DANE TLSA rrdata presentation form"}, @@ -607,9 +659,8 @@ OPTIONS s_client_options[] = { {"starttls", OPT_STARTTLS, 's', "Use the appropriate STARTTLS command before starting TLS"}, {"xmpphost", OPT_XMPPHOST, 's', - "Host to use with \"-starttls xmpp[-server]\""}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + "Alias of -name option for \"-starttls xmpp[-server]\""}, + OPT_R_OPTIONS, {"sess_out", OPT_SESS_OUT, '>', "File to write SSL session to"}, {"sess_in", OPT_SESS_IN, '<', "File to read SSL session from"}, {"use_srtp", OPT_USE_SRTP, 's', @@ -618,8 +669,11 @@ OPTIONS s_client_options[] = { "Export keying material using label"}, {"keymatexportlen", OPT_KEYMATEXPORTLEN, 'p', "Export len bytes of keying material (default 20)"}, + {"maxfraglen", OPT_MAXFRAGLEN, 'p', + "Enable Maximum Fragment Length Negotiation (len values: 512, 1024, 2048 and 4096)"}, {"fallback_scsv", OPT_FALLBACKSCSV, '-', "Send the fallback SCSV"}, - {"name", OPT_SMTPHOST, 's', "Hostname to use for \"-starttls smtp\""}, + {"name", OPT_PROTOHOST, 's', + "Hostname to use for \"-starttls lmtp\", \"-starttls smtp\" or \"-starttls xmpp[-server]\""}, {"CRL", OPT_CRL, '<', "CRL file to use"}, {"crl_download", OPT_CRL_DOWNLOAD, '-', "Download CRL from distribution points"}, {"CRLform", OPT_CRLFORM, 'F', "CRL format (PEM or DER) PEM is default"}, @@ -647,7 +701,9 @@ OPTIONS s_client_options[] = { "CA file for certificate verification (PEM format)"}, {"nocommands", OPT_NOCMDS, '-', "Do not use interactive command letters"}, {"servername", OPT_SERVERNAME, 's', - "Set TLS extension servername in ClientHello"}, + "Set TLS extension servername (SNI) in ClientHello (default)"}, + {"noservername", OPT_NOSERVERNAME, '-', + "Do not send the server name (SNI) extension in the ClientHello"}, {"tlsextdebug", OPT_TLSEXTDEBUG, '-', "Hex dump of all TLS extensions received"}, #ifndef OPENSSL_NO_OCSP @@ -659,11 +715,12 @@ OPTIONS s_client_options[] = { "Enable ALPN extension, considering named protocols supported (comma-separated list)"}, {"async", OPT_ASYNC, '-', "Support asynchronous operation"}, {"ssl_config", OPT_SSL_CONFIG, 's', "Use specified configuration file"}, - {"split_send_frag", OPT_SPLIT_SEND_FRAG, 'n', + {"max_send_frag", OPT_MAX_SEND_FRAG, 'p', "Maximum Size of send frames "}, + {"split_send_frag", OPT_SPLIT_SEND_FRAG, 'p', "Size used to split data for encrypt pipelines"}, - {"max_pipelines", OPT_MAX_PIPELINES, 'n', + {"max_pipelines", OPT_MAX_PIPELINES, 'p', "Maximum number of encrypt/decrypt pipelines to be used"}, - {"read_buf", OPT_READ_BUF, 'n', + {"read_buf", OPT_READ_BUF, 'p', "Default read buffer size to be used for connections"}, OPT_S_OPTIONS, OPT_V_OPTIONS, @@ -680,6 +737,9 @@ OPTIONS s_client_options[] = { #ifndef OPENSSL_NO_TLS1_2 {"tls1_2", OPT_TLS1_2, '-', "Just use TLSv1.2"}, #endif +#ifndef OPENSSL_NO_TLS1_3 + {"tls1_3", OPT_TLS1_3, '-', "Just use TLSv1.3"}, +#endif #ifndef OPENSSL_NO_DTLS {"dtls", OPT_DTLS, '-', "Use any version of DTLS"}, {"timeout", OPT_TIMEOUT, '-', @@ -692,6 +752,9 @@ OPTIONS s_client_options[] = { #ifndef OPENSSL_NO_DTLS1_2 {"dtls1_2", OPT_DTLS1_2, '-', "Just use DTLSv1.2"}, #endif +#ifndef OPENSSL_NO_SCTP + {"sctp", OPT_SCTP, '-', "Use SCTP"}, +#endif #ifndef OPENSSL_NO_SSL_TRACE {"trace", OPT_TRACE, '-', "Show trace output of protocol messages"}, #endif @@ -699,10 +762,9 @@ OPTIONS s_client_options[] = { {"wdebug", OPT_WDEBUG, '-', "WATT-32 tcp debugging"}, #endif {"nbio", OPT_NBIO, '-', "Use non-blocking IO"}, -#ifndef OPENSSL_NO_PSK {"psk_identity", OPT_PSK_IDENTITY, 's', "PSK identity"}, {"psk", OPT_PSK, 's', "PSK in hex (without 0x)"}, -#endif + {"psk_session", OPT_PSK_SESS, '<', "File to read PSK SSL session from"}, #ifndef OPENSSL_NO_SRP {"srpuser", OPT_SRPUSER, 's', "SRP authentication for 'user'"}, {"srppass", OPT_SRPPASS, 's', "Password for 'user'"}, @@ -726,6 +788,9 @@ OPTIONS s_client_options[] = { {"noct", OPT_NOCT, '-', "Do not request or parse SCTs (default)"}, {"ctlogfile", OPT_CTLOG_FILE, '<', "CT log list CONF file"}, #endif + {"keylogfile", OPT_KEYLOG_FILE, '>', "Write TLS secrets to file"}, + {"early_data", OPT_EARLY_DATA, '<', "File to send as early data"}, + {"force_pha", OPT_FORCE_PHA, '-', "Force-enable post-handshake-authentication"}, {NULL, OPT_EOF, 0x00, NULL} }; @@ -739,7 +804,13 @@ typedef enum PROTOCOL_choice { PROTO_XMPP, PROTO_XMPP_SERVER, PROTO_CONNECT, - PROTO_IRC + PROTO_IRC, + PROTO_MYSQL, + PROTO_POSTGRES, + PROTO_LMTP, + PROTO_NNTP, + PROTO_SIEVE, + PROTO_LDAP } PROTOCOL_CHOICE; static const OPT_PAIR services[] = { @@ -751,6 +822,12 @@ static const OPT_PAIR services[] = { {"xmpp-server", PROTO_XMPP_SERVER}, {"telnet", PROTO_TELNET}, {"irc", PROTO_IRC}, + {"mysql", PROTO_MYSQL}, + {"postgres", PROTO_POSTGRES}, + {"lmtp", PROTO_LMTP}, + {"nntp", PROTO_NNTP}, + {"sieve", PROTO_SIEVE}, + {"ldap", PROTO_LDAP}, {NULL, 0} }; @@ -760,7 +837,7 @@ static const OPT_PAIR services[] = { #define IS_PROT_FLAG(o) \ (o == OPT_SSL3 || o == OPT_TLS1 || o == OPT_TLS1_1 || o == OPT_TLS1_2 \ - || o == OPT_DTLS || o == OPT_DTLS1 || o == OPT_DTLS1_2) + || o == OPT_TLS1_3 || o == OPT_DTLS || o == OPT_DTLS1 || o == OPT_DTLS1_2) /* Free |*dest| and optionally set it to a copy of |source|. */ static void freeandcopy(char **dest, const char *source) @@ -771,6 +848,24 @@ static void freeandcopy(char **dest, const char *source) *dest = OPENSSL_strdup(source); } +static int new_session_cb(SSL *S, SSL_SESSION *sess) +{ + BIO *stmp = BIO_new_file(sess_out, "w"); + + if (stmp == NULL) { + BIO_printf(bio_err, "Error writing session file %s\n", sess_out); + } else { + PEM_write_bio_SSL_SESSION(stmp, sess); + BIO_free(stmp); + } + + /* + * We always return a "fail" response so that the session gets freed again + * because we haven't used the reference. + */ + return 0; +} + int s_client_main(int argc, char **argv) { BIO *sbio; @@ -790,15 +885,15 @@ int s_client_main(int argc, char **argv) const SSL_METHOD *meth = TLS_client_method(); const char *CApath = NULL, *CAfile = NULL; char *cbuf = NULL, *sbuf = NULL; - char *mbuf = NULL, *proxystr = NULL, *connectstr = NULL; + char *mbuf = NULL, *proxystr = NULL, *connectstr = NULL, *bindstr = NULL; char *cert_file = NULL, *key_file = NULL, *chain_file = NULL; char *chCApath = NULL, *chCAfile = NULL, *host = NULL; char *port = OPENSSL_strdup(PORT); - char *inrand = NULL; + char *bindhost = NULL, *bindport = NULL; char *passarg = NULL, *pass = NULL, *vfyCApath = NULL, *vfyCAfile = NULL; - char *sess_in = NULL, *sess_out = NULL, *crl_file = NULL, *p; - char *xmpphost = NULL; - const char *ehlo = "mail.example.com"; + char *ReqCAfile = NULL; + char *sess_in = NULL, *crl_file = NULL, *p; + const char *protohost = NULL; struct timeval timeout, *timeoutp; fd_set readfds, writefds; int noCApath = 0, noCAfile = 0; @@ -809,7 +904,7 @@ int s_client_main(int argc, char **argv) int reconnect = 0, verify = SSL_VERIFY_NONE, vpmtouched = 0; int ret = 1, in_init = 1, i, nbio_test = 0, s = -1, k, width, state = 0; int sbuf_len, sbuf_off, cmdletters = 1; - int socket_family = AF_UNSPEC, socket_type = SOCK_STREAM; + int socket_family = AF_UNSPEC, socket_type = SOCK_STREAM, protocol = 0; int starttls_proto = PROTO_OFF, crl_format = FORMAT_PEM, crl_download = 0; int write_tty, read_tty, write_ssl, read_ssl, tty_on, ssl_pending; #if !defined(OPENSSL_SYS_WINDOWS) && !defined(OPENSSL_SYS_MSDOS) @@ -817,7 +912,6 @@ int s_client_main(int argc, char **argv) #endif int read_buf_len = 0; int fallback_scsv = 0; - long randamt = 0; OPTION_CHOICE o; #ifndef OPENSSL_NO_DTLS int enable_timeouts = 0; @@ -830,7 +924,8 @@ int s_client_main(int argc, char **argv) #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) struct timeval tv; #endif - char *servername = NULL; + const char *servername = NULL; + int noservername = 0; const char *alpn_in = NULL; tlsextctx tlsextcbp = { NULL, 0 }; const char *ssl_config = NULL; @@ -851,16 +946,23 @@ int s_client_main(int argc, char **argv) #endif int min_version = 0, max_version = 0, prot_opt = 0, no_prot_opt = 0; int async = 0; - unsigned int split_send_fragment = 0; - unsigned int max_pipelines = 0; + unsigned int max_send_fragment = 0; + unsigned int split_send_fragment = 0, max_pipelines = 0; enum { use_inet, use_unix, use_unknown } connect_type = use_unknown; int count4or6 = 0; + uint8_t maxfraglen = 0; int c_nbio = 0, c_msg = 0, c_ign_eof = 0, c_brief = 0; int c_tlsextdebug = 0; #ifndef OPENSSL_NO_OCSP int c_status_req = 0; #endif BIO *bio_c_msg = NULL; + const char *keylog_file = NULL, *early_data_file = NULL; +#ifndef OPENSSL_NO_DTLS + int isdtls = 0; +#endif + char *psksessf = NULL; + int force_pha = 0; FD_ZERO(&readfds); FD_ZERO(&writefds); @@ -953,6 +1055,9 @@ int s_client_main(int argc, char **argv) connect_type = use_inet; freeandcopy(&connectstr, opt_arg()); break; + case OPT_BIND: + freeandcopy(&bindstr, opt_arg()); + break; case OPT_PROXY: proxystr = opt_arg(); starttls_proto = PROTO_CONNECT; @@ -965,10 +1070,9 @@ int s_client_main(int argc, char **argv) break; #endif case OPT_XMPPHOST: - xmpphost = opt_arg(); - break; - case OPT_SMTPHOST: - ehlo = opt_arg(); + /* fall through, since this is an alias */ + case OPT_PROTOHOST: + protohost = opt_arg(); break; case OPT_VERIFY: verify = SSL_VERIFY_PEER; @@ -979,6 +1083,10 @@ int s_client_main(int argc, char **argv) case OPT_CERT: cert_file = opt_arg(); break; + case OPT_NAMEOPT: + if (!set_nameopt(opt_arg())) + goto end; + break; case OPT_CRL: crl_file = opt_arg(); break; @@ -1054,8 +1162,9 @@ int s_client_main(int argc, char **argv) } #endif break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_IGN_EOF: c_ign_eof = 1; @@ -1105,7 +1214,6 @@ int s_client_main(int argc, char **argv) case OPT_STATE: state = 1; break; -#ifndef OPENSSL_NO_PSK case OPT_PSK_IDENTITY: psk_identity = opt_arg(); break; @@ -1117,7 +1225,9 @@ int s_client_main(int argc, char **argv) goto end; } break; -#endif + case OPT_PSK_SESS: + psksessf = opt_arg(); + break; #ifndef OPENSSL_NO_SRP case OPT_SRPUSER: srp_arg.srplogin = opt_arg(); @@ -1154,6 +1264,10 @@ int s_client_main(int argc, char **argv) min_version = SSL3_VERSION; max_version = SSL3_VERSION; break; + case OPT_TLS1_3: + min_version = TLS1_3_VERSION; + max_version = TLS1_3_VERSION; + break; case OPT_TLS1_2: min_version = TLS1_2_VERSION; max_version = TLS1_2_VERSION; @@ -1170,6 +1284,7 @@ int s_client_main(int argc, char **argv) #ifndef OPENSSL_NO_DTLS meth = DTLS_client_method(); socket_type = SOCK_DGRAM; + isdtls = 1; #endif break; case OPT_DTLS1: @@ -1178,6 +1293,7 @@ int s_client_main(int argc, char **argv) min_version = DTLS1_VERSION; max_version = DTLS1_VERSION; socket_type = SOCK_DGRAM; + isdtls = 1; #endif break; case OPT_DTLS1_2: @@ -1186,6 +1302,12 @@ int s_client_main(int argc, char **argv) min_version = DTLS1_2_VERSION; max_version = DTLS1_2_VERSION; socket_type = SOCK_DGRAM; + isdtls = 1; +#endif + break; + case OPT_SCTP: +#ifndef OPENSSL_NO_SCTP + protocol = IPPROTO_SCTP; #endif break; case OPT_TIMEOUT: @@ -1232,6 +1354,9 @@ int s_client_main(int argc, char **argv) case OPT_BUILD_CHAIN: build_chain = 1; break; + case OPT_REQCAFILE: + ReqCAfile = opt_arg(); + break; case OPT_CAFILE: CAfile = opt_arg(); break; @@ -1297,6 +1422,9 @@ int s_client_main(int argc, char **argv) case OPT_SERVERNAME: servername = opt_arg(); break; + case OPT_NOSERVERNAME: + noservername = 1; + break; case OPT_USE_SRTP: srtp_profiles = opt_arg(); break; @@ -1309,15 +1437,33 @@ int s_client_main(int argc, char **argv) case OPT_ASYNC: async = 1; break; + case OPT_MAXFRAGLEN: + len = atoi(opt_arg()); + switch (len) { + case 512: + maxfraglen = TLSEXT_max_fragment_length_512; + break; + case 1024: + maxfraglen = TLSEXT_max_fragment_length_1024; + break; + case 2048: + maxfraglen = TLSEXT_max_fragment_length_2048; + break; + case 4096: + maxfraglen = TLSEXT_max_fragment_length_4096; + break; + default: + BIO_printf(bio_err, + "%s: Max Fragment Len %u is out of permitted values", + prog, len); + goto opthelp; + } + break; + case OPT_MAX_SEND_FRAG: + max_send_fragment = atoi(opt_arg()); + break; case OPT_SPLIT_SEND_FRAG: split_send_fragment = atoi(opt_arg()); - if (split_send_fragment == 0) { - /* - * Not allowed - set to a deliberately bad value so we get an - * error message below - */ - split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH + 1; - } break; case OPT_MAX_PIPELINES: max_pipelines = atoi(opt_arg()); @@ -1325,21 +1471,64 @@ int s_client_main(int argc, char **argv) case OPT_READ_BUF: read_buf_len = atoi(opt_arg()); break; + case OPT_KEYLOG_FILE: + keylog_file = opt_arg(); + break; + case OPT_EARLY_DATA: + early_data_file = opt_arg(); + break; + case OPT_FORCE_PHA: + force_pha = 1; + break; } } if (count4or6 >= 2) { BIO_printf(bio_err, "%s: Can't use both -4 and -6\n", prog); goto opthelp; } + if (noservername) { + if (servername != NULL) { + BIO_printf(bio_err, + "%s: Can't use -servername and -noservername together\n", + prog); + goto opthelp; + } + if (dane_tlsa_domain != NULL) { + BIO_printf(bio_err, + "%s: Can't use -dane_tlsa_domain and -noservername together\n", + prog); + goto opthelp; + } + } argc = opt_num_rest(); - if (argc != 0) + if (argc == 1) { + /* If there's a positional argument, it's the equivalent of + * OPT_CONNECT. + * Don't allow -connect and a separate argument. + */ + if (connectstr != NULL) { + BIO_printf(bio_err, + "%s: must not provide both -connect option and target parameter\n", + prog); + goto opthelp; + } + connect_type = use_inet; + freeandcopy(&connectstr, *opt_rest()); + } else if (argc != 0) { goto opthelp; + } - if (proxystr) { +#ifndef OPENSSL_NO_NEXTPROTONEG + if (min_version == TLS1_3_VERSION && next_proto_neg_in != NULL) { + BIO_printf(bio_err, "Cannot supply -nextprotoneg with TLSv1.3\n"); + goto opthelp; + } +#endif + if (proxystr != NULL) { int res; char *tmp_host = host, *tmp_port = port; if (connectstr == NULL) { - BIO_printf(bio_err, "%s: -proxy requires use of -connect\n", prog); + BIO_printf(bio_err, "%s: -proxy requires use of -connect or target parameter\n", prog); goto opthelp; } res = BIO_parse_hostserv(proxystr, &host, &port, BIO_PARSE_PRIO_HOST); @@ -1364,7 +1553,19 @@ int s_client_main(int argc, char **argv) OPENSSL_free(tmp_port); if (!res) { BIO_printf(bio_err, - "%s: -connect argument malformed or ambiguous\n", + "%s: -connect argument or target parameter malformed or ambiguous\n", + prog); + goto end; + } + } + + if (bindstr != NULL) { + int res; + res = BIO_parse_hostserv(bindstr, &bindhost, &bindport, + BIO_PARSE_PRIO_HOST); + if (!res) { + BIO_printf(bio_err, + "%s: -bind argument parameter malformed or ambiguous\n", prog); goto end; } @@ -1378,15 +1579,16 @@ int s_client_main(int argc, char **argv) } #endif - if (split_send_fragment > SSL3_RT_MAX_PLAIN_LENGTH) { - BIO_printf(bio_err, "Bad split send fragment size\n"); - goto end; - } - - if (max_pipelines > SSL_MAX_PIPELINES) { - BIO_printf(bio_err, "Bad max pipelines value\n"); - goto end; +#ifndef OPENSSL_NO_SCTP + if (protocol == IPPROTO_SCTP) { + if (socket_type != SOCK_DGRAM) { + BIO_printf(bio_err, "Can't use -sctp without DTLS\n"); + goto end; + } + /* SCTP is unusual. It uses DTLS over a SOCK_STREAM protocol */ + socket_type = SOCK_STREAM; } +#endif #if !defined(OPENSSL_NO_NEXTPROTONEG) next_proto.status = -1; @@ -1409,7 +1611,7 @@ int s_client_main(int argc, char **argv) if (key_file == NULL) key_file = cert_file; - if (key_file) { + if (key_file != NULL) { key = load_key(key_file, key_format, 0, pass, e, "client certificate private key file"); if (key == NULL) { @@ -1418,7 +1620,7 @@ int s_client_main(int argc, char **argv) } } - if (cert_file) { + if (cert_file != NULL) { cert = load_cert(cert_file, cert_format, "client certificate file"); if (cert == NULL) { ERR_print_errors(bio_err); @@ -1426,13 +1628,13 @@ int s_client_main(int argc, char **argv) } } - if (chain_file) { + if (chain_file != NULL) { if (!load_certs(chain_file, &chain, FORMAT_PEM, NULL, "client certificate chain")) goto end; } - if (crl_file) { + if (crl_file != NULL) { X509_CRL *crl; crl = load_crl(crl_file, crl_format); if (crl == NULL) { @@ -1452,20 +1654,10 @@ int s_client_main(int argc, char **argv) if (!load_excert(&exc)) goto end; - if (!app_RAND_load_file(NULL, 1) && inrand == NULL - && !RAND_status()) { - BIO_printf(bio_err, - "warning, not much extra random data, consider using the -rand option\n"); - } - if (inrand != NULL) { - randamt = app_RAND_load_files(inrand); - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", randamt); - } - if (bio_c_out == NULL) { if (c_quiet && !c_debug) { bio_c_out = BIO_new(BIO_s_null()); - if (c_msg && !bio_c_msg) + if (c_msg && bio_c_msg == NULL) bio_c_msg = dup_bio_out(FORMAT_TEXT); } else if (bio_c_out == NULL) bio_c_out = dup_bio_out(FORMAT_TEXT); @@ -1486,10 +1678,7 @@ int s_client_main(int argc, char **argv) if (sdebug) ssl_ctx_security_debug(ctx, sdebug); - if (!config_ctx(cctx, ssl_args, ctx)) - goto end; - - if (ssl_config) { + if (ssl_config != NULL) { if (SSL_CTX_config(ctx, ssl_config) == 0) { BIO_printf(bio_err, "Error using configuration \"%s\"\n", ssl_config); @@ -1498,11 +1687,9 @@ int s_client_main(int argc, char **argv) } } - if (min_version != 0 - && SSL_CTX_set_min_proto_version(ctx, min_version) == 0) + if (SSL_CTX_set_min_proto_version(ctx, min_version) == 0) goto end; - if (max_version != 0 - && SSL_CTX_set_max_proto_version(ctx, max_version) == 0) + if (SSL_CTX_set_max_proto_version(ctx, max_version) == 0) goto end; if (vpmtouched && !SSL_CTX_set1_param(ctx, vpm)) { @@ -1514,23 +1701,60 @@ int s_client_main(int argc, char **argv) if (async) { SSL_CTX_set_mode(ctx, SSL_MODE_ASYNC); } - if (split_send_fragment > 0) { - SSL_CTX_set_split_send_fragment(ctx, split_send_fragment); + + if (max_send_fragment > 0 + && !SSL_CTX_set_max_send_fragment(ctx, max_send_fragment)) { + BIO_printf(bio_err, "%s: Max send fragment size %u is out of permitted range\n", + prog, max_send_fragment); + goto end; } - if (max_pipelines > 0) { - SSL_CTX_set_max_pipelines(ctx, max_pipelines); + + if (split_send_fragment > 0 + && !SSL_CTX_set_split_send_fragment(ctx, split_send_fragment)) { + BIO_printf(bio_err, "%s: Split send fragment size %u is out of permitted range\n", + prog, split_send_fragment); + goto end; + } + + if (max_pipelines > 0 + && !SSL_CTX_set_max_pipelines(ctx, max_pipelines)) { + BIO_printf(bio_err, "%s: Max pipelines %u is out of permitted range\n", + prog, max_pipelines); + goto end; } if (read_buf_len > 0) { SSL_CTX_set_default_read_buffer_len(ctx, read_buf_len); } + if (maxfraglen > 0 + && !SSL_CTX_set_tlsext_max_fragment_length(ctx, maxfraglen)) { + BIO_printf(bio_err, + "%s: Max Fragment Length code %u is out of permitted values" + "\n", prog, maxfraglen); + goto end; + } + + if (!config_ctx(cctx, ssl_args, ctx)) + goto end; + if (!ssl_load_stores(ctx, vfyCApath, vfyCAfile, chCApath, chCAfile, crls, crl_download)) { BIO_printf(bio_err, "Error loading store locations\n"); ERR_print_errors(bio_err); goto end; } + if (ReqCAfile != NULL) { + STACK_OF(X509_NAME) *nm = sk_X509_NAME_new_null(); + + if (nm == NULL || !SSL_add_file_cert_subjects_to_stack(nm, ReqCAfile)) { + sk_X509_NAME_pop_free(nm, X509_NAME_free); + BIO_printf(bio_err, "Error loading CA names\n"); + ERR_print_errors(bio_err); + goto end; + } + SSL_CTX_set0_CA_list(ctx, nm); + } #ifndef OPENSSL_NO_ENGINE if (ssl_client_engine) { if (!SSL_CTX_set_client_cert_engine(ctx, ssl_client_engine)) { @@ -1550,6 +1774,25 @@ int s_client_main(int argc, char **argv) SSL_CTX_set_psk_client_callback(ctx, psk_client_cb); } #endif + if (psksessf != NULL) { + BIO *stmp = BIO_new_file(psksessf, "r"); + + if (stmp == NULL) { + BIO_printf(bio_err, "Can't open PSK session file %s\n", psksessf); + ERR_print_errors(bio_err); + goto end; + } + psksess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL); + BIO_free(stmp); + if (psksess == NULL) { + BIO_printf(bio_err, "Can't read PSK session file %s\n", psksessf); + ERR_print_errors(bio_err); + goto end; + } + } + if (psk_key != NULL || psksess != NULL) + SSL_CTX_set_psk_use_session_callback(ctx, psk_use_session_cb); + #ifndef OPENSSL_NO_SRTP if (srtp_profiles != NULL) { /* Returns 0 on success! */ @@ -1561,11 +1804,11 @@ int s_client_main(int argc, char **argv) } #endif - if (exc) + if (exc != NULL) ssl_ctx_set_excert(ctx, exc); #if !defined(OPENSSL_NO_NEXTPROTONEG) - if (next_proto.data) + if (next_proto.data != NULL) SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto); #endif if (alpn_in) { @@ -1634,7 +1877,7 @@ int s_client_main(int argc, char **argv) if (!set_cert_key_stuff(ctx, cert, key, chain, build_chain)) goto end; - if (servername != NULL) { + if (!noservername) { tlsextcbp.biodebug = bio_err; SSL_CTX_set_tlsext_servername_callback(ctx, ssl_servername_cb); SSL_CTX_set_tlsext_servername_arg(ctx, &tlsextcbp); @@ -1666,18 +1909,38 @@ int s_client_main(int argc, char **argv) } } + /* + * In TLSv1.3 NewSessionTicket messages arrive after the handshake and can + * come at any time. Therefore we use a callback to write out the session + * when we know about it. This approach works for < TLSv1.3 as well. + */ + if (sess_out != NULL) { + SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_CLIENT + | SSL_SESS_CACHE_NO_INTERNAL_STORE); + SSL_CTX_sess_set_new_cb(ctx, new_session_cb); + } + + if (set_keylog_file(ctx, keylog_file)) + goto end; + con = SSL_new(ctx); - if (sess_in) { + if (con == NULL) + goto end; + + if (force_pha) + SSL_force_post_handshake_auth(con); + + if (sess_in != NULL) { SSL_SESSION *sess; BIO *stmp = BIO_new_file(sess_in, "r"); - if (!stmp) { + if (stmp == NULL) { BIO_printf(bio_err, "Can't open session file %s\n", sess_in); ERR_print_errors(bio_err); goto end; } sess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL); BIO_free(stmp); - if (!sess) { + if (sess == NULL) { BIO_printf(bio_err, "Can't open session file %s\n", sess_in); ERR_print_errors(bio_err); goto end; @@ -1687,13 +1950,16 @@ int s_client_main(int argc, char **argv) ERR_print_errors(bio_err); goto end; } + SSL_SESSION_free(sess); } if (fallback_scsv) SSL_set_mode(con, SSL_MODE_SEND_FALLBACK_SCSV); - if (servername != NULL) { + if (!noservername && (servername != NULL || dane_tlsa_domain == NULL)) { + if (servername == NULL) + servername = (host == NULL) ? "localhost" : host; if (!SSL_set_tlsext_host_name(con, servername)) { BIO_printf(bio_err, "Unable to set TLS servername extension.\n"); ERR_print_errors(bio_err); @@ -1727,7 +1993,8 @@ int s_client_main(int argc, char **argv) } re_start: - if (init_client(&s, host, port, socket_family, socket_type) == 0) { + if (init_client(&s, host, port, bindhost, bindport, socket_family, + socket_type, protocol) == 0) { BIO_printf(bio_err, "connect:errno=%d\n", get_last_socket_error()); BIO_closesocket(s); goto end; @@ -1742,10 +2009,16 @@ int s_client_main(int argc, char **argv) BIO_printf(bio_c_out, "Turned on non blocking io\n"); } #ifndef OPENSSL_NO_DTLS - if (socket_type == SOCK_DGRAM) { + if (isdtls) { union BIO_sock_info_u peer_info; - sbio = BIO_new_dgram(s, BIO_NOCLOSE); +#ifndef OPENSSL_NO_SCTP + if (protocol == IPPROTO_SCTP) + sbio = BIO_new_dgram_sctp(s, BIO_NOCLOSE); + else +#endif + sbio = BIO_new_dgram(s, BIO_NOCLOSE); + if ((peer_info.addr = BIO_ADDR_new()) == NULL) { BIO_printf(bio_err, "memory allocation failure\n"); BIO_closesocket(s); @@ -1786,9 +2059,10 @@ int s_client_main(int argc, char **argv) BIO_free(sbio); goto shut; } - } else + } else { /* want to do MTU discovery */ BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); + } } else #endif /* OPENSSL_NO_DTLS */ sbio = BIO_new_socket(s, BIO_NOCLOSE); @@ -1849,6 +2123,7 @@ int s_client_main(int argc, char **argv) switch ((PROTOCOL_CHOICE) starttls_proto) { case PROTO_OFF: break; + case PROTO_LMTP: case PROTO_SMTP: { /* @@ -1861,27 +2136,34 @@ int s_client_main(int argc, char **argv) */ int foundit = 0; BIO *fbio = BIO_new(BIO_f_buffer()); + BIO_push(fbio, sbio); - /* wait for multi-line response to end from SMTP */ + /* Wait for multi-line response to end from LMTP or SMTP */ do { mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); - } - while (mbuf_len > 3 && mbuf[3] == '-'); - BIO_printf(fbio, "EHLO %s\r\n", ehlo); + } while (mbuf_len > 3 && mbuf[3] == '-'); + if (protohost == NULL) + protohost = "mail.example.com"; + if (starttls_proto == (int)PROTO_LMTP) + BIO_printf(fbio, "LHLO %s\r\n", protohost); + else + BIO_printf(fbio, "EHLO %s\r\n", protohost); (void)BIO_flush(fbio); - /* wait for multi-line response to end EHLO SMTP response */ + /* + * Wait for multi-line response to end LHLO LMTP or EHLO SMTP + * response. + */ do { mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); if (strstr(mbuf, "STARTTLS")) foundit = 1; - } - while (mbuf_len > 3 && mbuf[3] == '-'); + } while (mbuf_len > 3 && mbuf[3] == '-'); (void)BIO_flush(fbio); BIO_pop(fbio); BIO_free(fbio); if (!foundit) BIO_printf(bio_err, - "didn't find starttls in server response," + "Didn't find STARTTLS in server response," " trying anyway...\n"); BIO_printf(sbio, "STARTTLS\r\n"); BIO_read(sbio, sbuf, BUFSIZZ); @@ -1902,6 +2184,7 @@ int s_client_main(int argc, char **argv) { int foundit = 0; BIO *fbio = BIO_new(BIO_f_buffer()); + BIO_push(fbio, sbio); BIO_gets(fbio, mbuf, BUFSIZZ); /* STARTTLS command requires CAPABILITY... */ @@ -1919,7 +2202,7 @@ int s_client_main(int argc, char **argv) BIO_free(fbio); if (!foundit) BIO_printf(bio_err, - "didn't find STARTTLS in server response," + "Didn't find STARTTLS in server response," " trying anyway...\n"); BIO_printf(sbio, ". STARTTLS\r\n"); BIO_read(sbio, sbuf, BUFSIZZ); @@ -1928,6 +2211,7 @@ int s_client_main(int argc, char **argv) case PROTO_FTP: { BIO *fbio = BIO_new(BIO_f_buffer()); + BIO_push(fbio, sbio); /* wait for multi-line response to end from FTP */ do { @@ -1949,9 +2233,13 @@ int s_client_main(int argc, char **argv) "xmlns:stream='http://etherx.jabber.org/streams' " "xmlns='jabber:%s' to='%s' version='1.0'>", starttls_proto == PROTO_XMPP ? "client" : "server", - xmpphost ? xmpphost : host); + protohost ? protohost : host); seen = BIO_read(sbio, mbuf, BUFSIZZ); - mbuf[seen] = 0; + if (seen < 0) { + BIO_printf(bio_err, "BIO_read failed\n"); + goto end; + } + mbuf[seen] = '\0'; while (!strstr (mbuf, ""); seen = BIO_read(sbio, sbuf, BUFSIZZ); - sbuf[seen] = 0; + if (seen < 0) { + BIO_printf(bio_err, "BIO_read failed\n"); + goto shut; + } + sbuf[seen] = '\0'; if (!strstr(sbuf, "= bytes) { + BIO_printf(bio_err, "Cannot confirm server version. "); + goto shut; + } else if (packet[pos++] == '\0') { + break; + } + } + + /* make sure we have at least 15 bytes left in the packet */ + if (pos + 15 > bytes) { + BIO_printf(bio_err, + "MySQL server handshake packet is broken.\n"); + goto shut; + } + + pos += 12; /* skip over conn id[4] + SALT[8] */ + if (packet[pos++] != '\0') { /* verify filler */ + BIO_printf(bio_err, + "MySQL packet is broken.\n"); + goto shut; + } + + /* capability flags[2] */ + if (!((packet[pos] + (packet[pos + 1] << 8)) & ssl_flg)) { + BIO_printf(bio_err, "MySQL server does not support SSL.\n"); + goto shut; + } + + /* Sending SSL Handshake packet. */ + BIO_write(sbio, ssl_req, sizeof(ssl_req)); + (void)BIO_flush(sbio); + } + break; + case PROTO_POSTGRES: + { + static const unsigned char ssl_request[] = { + /* Length SSLRequest */ + 0, 0, 0, 8, 4, 210, 22, 47 + }; + int bytes; + + /* Send SSLRequest packet */ + BIO_write(sbio, ssl_request, 8); + (void)BIO_flush(sbio); + + /* Reply will be a single S if SSL is enabled */ + bytes = BIO_read(sbio, sbuf, BUFSIZZ); + if (bytes != 1 || sbuf[0] != 'S') + goto shut; + } + break; + case PROTO_NNTP: + { + int foundit = 0; + BIO *fbio = BIO_new(BIO_f_buffer()); + + BIO_push(fbio, sbio); + BIO_gets(fbio, mbuf, BUFSIZZ); + /* STARTTLS command requires CAPABILITIES... */ + BIO_printf(fbio, "CAPABILITIES\r\n"); + (void)BIO_flush(fbio); + /* wait for multi-line CAPABILITIES response */ + do { + mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); + if (strstr(mbuf, "STARTTLS")) + foundit = 1; + } while (mbuf_len > 1 && mbuf[0] != '.'); + (void)BIO_flush(fbio); + BIO_pop(fbio); + BIO_free(fbio); + if (!foundit) + BIO_printf(bio_err, + "Didn't find STARTTLS in server response," + " trying anyway...\n"); + BIO_printf(sbio, "STARTTLS\r\n"); + mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); + if (mbuf_len < 0) { + BIO_printf(bio_err, "BIO_read failed\n"); + goto end; + } + mbuf[mbuf_len] = '\0'; + if (strstr(mbuf, "382") == NULL) { + BIO_printf(bio_err, "STARTTLS failed: %s", mbuf); + goto shut; + } + } + break; + case PROTO_SIEVE: + { + int foundit = 0; + BIO *fbio = BIO_new(BIO_f_buffer()); + + BIO_push(fbio, sbio); + /* wait for multi-line response to end from Sieve */ + do { + mbuf_len = BIO_gets(fbio, mbuf, BUFSIZZ); + /* + * According to RFC 5804 § 1.7, capability + * is case-insensitive, make it uppercase + */ + if (mbuf_len > 1 && mbuf[0] == '"') { + make_uppercase(mbuf); + if (strncmp(mbuf, "\"STARTTLS\"", 10) == 0) + foundit = 1; + } + } while (mbuf_len > 1 && mbuf[0] == '"'); + (void)BIO_flush(fbio); + BIO_pop(fbio); + BIO_free(fbio); + if (!foundit) + BIO_printf(bio_err, + "Didn't find STARTTLS in server response," + " trying anyway...\n"); + BIO_printf(sbio, "STARTTLS\r\n"); + mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); + if (mbuf_len < 0) { + BIO_printf(bio_err, "BIO_read failed\n"); + goto end; + } + mbuf[mbuf_len] = '\0'; + if (mbuf_len < 2) { + BIO_printf(bio_err, "STARTTLS failed: %s", mbuf); + goto shut; + } + /* + * According to RFC 5804 § 2.2, response codes are case- + * insensitive, make it uppercase but preserve the response. + */ + strncpy(sbuf, mbuf, 2); + make_uppercase(sbuf); + if (strncmp(sbuf, "OK", 2) != 0) { + BIO_printf(bio_err, "STARTTLS not supported: %s", mbuf); + goto shut; + } + } + break; + case PROTO_LDAP: + { + /* StartTLS Operation according to RFC 4511 */ + static char ldap_tls_genconf[] = "asn1=SEQUENCE:LDAPMessage\n" + "[LDAPMessage]\n" + "messageID=INTEGER:1\n" + "extendedReq=EXPLICIT:23A,IMPLICIT:0C," + "FORMAT:ASCII,OCT:1.3.6.1.4.1.1466.20037\n"; + long errline = -1; + char *genstr = NULL; + int result = -1; + ASN1_TYPE *atyp = NULL; + BIO *ldapbio = BIO_new(BIO_s_mem()); + CONF *cnf = NCONF_new(NULL); + + if (cnf == NULL) { + BIO_free(ldapbio); + goto end; + } + BIO_puts(ldapbio, ldap_tls_genconf); + if (NCONF_load_bio(cnf, ldapbio, &errline) <= 0) { + BIO_free(ldapbio); + NCONF_free(cnf); + if (errline <= 0) { + BIO_printf(bio_err, "NCONF_load_bio failed\n"); + goto end; + } else { + BIO_printf(bio_err, "Error on line %ld\n", errline); + goto end; + } + } + BIO_free(ldapbio); + genstr = NCONF_get_string(cnf, "default", "asn1"); + if (genstr == NULL) { + NCONF_free(cnf); + BIO_printf(bio_err, "NCONF_get_string failed\n"); + goto end; + } + atyp = ASN1_generate_nconf(genstr, cnf); + if (atyp == NULL) { + NCONF_free(cnf); + BIO_printf(bio_err, "ASN1_generate_nconf failed\n"); + goto end; + } + NCONF_free(cnf); + + /* Send SSLRequest packet */ + BIO_write(sbio, atyp->value.sequence->data, + atyp->value.sequence->length); + (void)BIO_flush(sbio); + ASN1_TYPE_free(atyp); + + mbuf_len = BIO_read(sbio, mbuf, BUFSIZZ); + if (mbuf_len < 0) { + BIO_printf(bio_err, "BIO_read failed\n"); + goto end; + } + result = ldap_ExtendedResponse_parse(mbuf, mbuf_len); + if (result < 0) { + BIO_printf(bio_err, "ldap_ExtendedResponse_parse failed\n"); + goto shut; + } else if (result > 0) { + BIO_printf(bio_err, "STARTTLS failed, LDAP Result Code: %i\n", + result); + goto shut; + } + mbuf_len = 0; + } + break; + } + + if (early_data_file != NULL + && ((SSL_get0_session(con) != NULL + && SSL_SESSION_get_max_early_data(SSL_get0_session(con)) > 0) + || (psksess != NULL + && SSL_SESSION_get_max_early_data(psksess) > 0))) { + BIO *edfile = BIO_new_file(early_data_file, "r"); + size_t readbytes, writtenbytes; + int finish = 0; + + if (edfile == NULL) { + BIO_printf(bio_err, "Cannot open early data file\n"); + goto shut; + } + + while (!finish) { + if (!BIO_read_ex(edfile, cbuf, BUFSIZZ, &readbytes)) + finish = 1; + + while (!SSL_write_early_data(con, cbuf, readbytes, &writtenbytes)) { + switch (SSL_get_error(con, 0)) { + case SSL_ERROR_WANT_WRITE: + case SSL_ERROR_WANT_ASYNC: + case SSL_ERROR_WANT_READ: + /* Just keep trying - busy waiting */ + continue; + default: + BIO_printf(bio_err, "Error writing early data\n"); + BIO_free(edfile); + ERR_print_errors(bio_err); + goto shut; + } + } + } + + BIO_free(edfile); } for (;;) { @@ -2120,7 +2711,8 @@ int s_client_main(int argc, char **argv) else timeoutp = NULL; - if (SSL_in_init(con) && !SSL_total_renegotiations(con)) { + if (!SSL_is_init_finished(con) && SSL_total_renegotiations(con) == 0 + && SSL_get_key_update_type(con) == SSL_KEY_UPDATE_NONE) { in_init = 1; tty_on = 0; } else { @@ -2128,15 +2720,6 @@ int s_client_main(int argc, char **argv) if (in_init) { in_init = 0; - if (sess_out) { - BIO *stmp = BIO_new_file(sess_out, "w"); - if (stmp) { - PEM_write_bio_SSL_SESSION(stmp, SSL_get_session(con)); - BIO_free(stmp); - } else - BIO_printf(bio_err, "Error writing session file %s\n", - sess_out); - } if (c_brief) { BIO_puts(bio_err, "CONNECTION ESTABLISHED\n"); print_ssl_summary(con); @@ -2231,7 +2814,6 @@ int s_client_main(int argc, char **argv) BIO_printf(bio_err, "bad select %d\n", get_last_socket_error()); goto shut; - /* goto end; */ } } @@ -2322,10 +2904,9 @@ int s_client_main(int argc, char **argv) BIO_printf(bio_c_out, "DONE\n"); ret = 0; goto shut; - /* goto end; */ } - sbuf_len -= i;; + sbuf_len -= i; sbuf_off += i; if (sbuf_len <= 0) { read_ssl = 1; @@ -2392,7 +2973,6 @@ int s_client_main(int argc, char **argv) case SSL_ERROR_SSL: ERR_print_errors(bio_err); goto shut; - /* break; */ } } /* OPENSSL_SYS_MSDOS includes OPENSSL_SYS_WINDOWS */ @@ -2438,6 +3018,15 @@ int s_client_main(int argc, char **argv) SSL_renegotiate(con); cbuf_len = 0; } + + if (!c_ign_eof && (cbuf[0] == 'K' || cbuf[0] == 'k' ) + && cmdletters) { + BIO_printf(bio_err, "KEYUPDATE\n"); + SSL_key_update(con, + cbuf[0] == 'K' ? SSL_KEY_UPDATE_REQUESTED + : SSL_KEY_UPDATE_NOT_REQUESTED); + cbuf_len = 0; + } #ifndef OPENSSL_NO_HEARTBEATS else if ((!c_ign_eof) && (cbuf[0] == 'B' && cmdletters)) { BIO_printf(bio_err, "HEARTBEATING\n"); @@ -2495,10 +3084,12 @@ int s_client_main(int argc, char **argv) print_stuff(bio_c_out, con, 1); SSL_free(con); } + SSL_SESSION_free(psksess); #if !defined(OPENSSL_NO_NEXTPROTONEG) OPENSSL_free(next_proto.data); #endif SSL_CTX_free(ctx); + set_keylog_file(NULL, NULL); X509_free(cert); sk_X509_CRL_pop_free(crls, X509_CRL_free); EVP_PKEY_free(key); @@ -2508,6 +3099,7 @@ int s_client_main(int argc, char **argv) OPENSSL_free(srp_arg.srppassin); #endif OPENSSL_free(connectstr); + OPENSSL_free(bindstr); OPENSSL_free(host); OPENSSL_free(port); X509_VERIFY_PARAM_free(vpm); @@ -2523,17 +3115,14 @@ int s_client_main(int argc, char **argv) bio_c_out = NULL; BIO_free(bio_c_msg); bio_c_msg = NULL; - return (ret); + return ret; } static void print_stuff(BIO *bio, SSL *s, int full) { X509 *peer = NULL; - char buf[BUFSIZ]; STACK_OF(X509) *sk; - STACK_OF(X509_NAME) *sk2; const SSL_CIPHER *c; - X509_NAME *xn; int i; #ifndef OPENSSL_NO_COMP const COMP_METHOD *comp, *expansion; @@ -2552,12 +3141,12 @@ static void print_stuff(BIO *bio, SSL *s, int full) BIO_printf(bio, "---\nCertificate chain\n"); for (i = 0; i < sk_X509_num(sk); i++) { - X509_NAME_oneline(X509_get_subject_name(sk_X509_value(sk, i)), - buf, sizeof(buf)); - BIO_printf(bio, "%2d s:%s\n", i, buf); - X509_NAME_oneline(X509_get_issuer_name(sk_X509_value(sk, i)), - buf, sizeof(buf)); - BIO_printf(bio, " i:%s\n", buf); + BIO_printf(bio, "%2d s:", i); + X509_NAME_print_ex(bio, X509_get_subject_name(sk_X509_value(sk, i)), 0, get_nameopt()); + BIO_puts(bio, "\n"); + BIO_printf(bio, " i:"); + X509_NAME_print_ex(bio, X509_get_issuer_name(sk_X509_value(sk, i)), 0, get_nameopt()); + BIO_puts(bio, "\n"); if (c_showcerts) PEM_write_bio_X509(bio, sk_X509_value(sk, i)); } @@ -2571,25 +3160,11 @@ static void print_stuff(BIO *bio, SSL *s, int full) /* Redundant if we showed the whole chain */ if (!(c_showcerts && got_a_chain)) PEM_write_bio_X509(bio, peer); - X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof(buf)); - BIO_printf(bio, "subject=%s\n", buf); - X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof(buf)); - BIO_printf(bio, "issuer=%s\n", buf); - } else - BIO_printf(bio, "no peer certificate available\n"); - - sk2 = SSL_get_client_CA_list(s); - if ((sk2 != NULL) && (sk_X509_NAME_num(sk2) > 0)) { - BIO_printf(bio, "---\nAcceptable client certificate CA names\n"); - for (i = 0; i < sk_X509_NAME_num(sk2); i++) { - xn = sk_X509_NAME_value(sk2, i); - X509_NAME_oneline(xn, buf, sizeof(buf)); - BIO_write(bio, buf, strlen(buf)); - BIO_write(bio, "\n", 1); - } + dump_cert_text(bio, peer); } else { - BIO_printf(bio, "---\nNo client certificate CA names sent\n"); + BIO_printf(bio, "no peer certificate available\n"); } + print_ca_names(bio, s); ssl_print_sigalgs(bio, s); ssl_print_tmp_key(bio, s); @@ -2628,8 +3203,8 @@ static void print_stuff(BIO *bio, SSL *s, int full) #endif BIO_printf(bio, - "---\nSSL handshake has read %"BIO_PRI64"u" - " bytes and written %"BIO_PRI64"u bytes\n", + "---\nSSL handshake has read %ju bytes " + "and written %ju bytes\n", BIO_number_read(SSL_get_rbio(s)), BIO_number_written(SSL_get_wbio(s))); } @@ -2705,6 +3280,23 @@ static void print_stuff(BIO *bio, SSL *s, int full) } #endif + if (SSL_version(s) == TLS1_3_VERSION) { + switch (SSL_get_early_data_status(s)) { + case SSL_EARLY_DATA_NOT_SENT: + BIO_printf(bio, "Early data was not sent\n"); + break; + + case SSL_EARLY_DATA_REJECTED: + BIO_printf(bio, "Early data was rejected\n"); + break; + + case SSL_EARLY_DATA_ACCEPTED: + BIO_printf(bio, "Early data was accepted\n"); + break; + + } + } + SSL_SESSION_print(bio, SSL_get_session(s)); if (SSL_get_session(s) != NULL && keymatexportlabel != NULL) { BIO_printf(bio, "Keying material exporter:\n"); @@ -2739,12 +3331,12 @@ static int ocsp_resp_cb(SSL *s, void *arg) OCSP_RESPONSE *rsp; len = SSL_get_tlsext_status_ocsp_resp(s, &p); BIO_puts(arg, "OCSP response: "); - if (!p) { + if (p == NULL) { BIO_puts(arg, "no response sent\n"); return 1; } rsp = d2i_OCSP_RESPONSE(NULL, &p, len); - if (!rsp) { + if (rsp == NULL) { BIO_puts(arg, "response parse error\n"); BIO_dump_indent(arg, (char *)p, len, 4); return 0; @@ -2757,4 +3349,88 @@ static int ocsp_resp_cb(SSL *s, void *arg) } # endif +static int ldap_ExtendedResponse_parse(const char *buf, long rem) +{ + const unsigned char *cur, *end; + long len; + int tag, xclass, inf, ret = -1; + + cur = (const unsigned char *)buf; + end = cur + rem; + + /* + * From RFC 4511: + * + * LDAPMessage ::= SEQUENCE { + * messageID MessageID, + * protocolOp CHOICE { + * ... + * extendedResp ExtendedResponse, + * ... }, + * controls [0] Controls OPTIONAL } + * + * ExtendedResponse ::= [APPLICATION 24] SEQUENCE { + * COMPONENTS OF LDAPResult, + * responseName [10] LDAPOID OPTIONAL, + * responseValue [11] OCTET STRING OPTIONAL } + * + * LDAPResult ::= SEQUENCE { + * resultCode ENUMERATED { + * success (0), + * ... + * other (80), + * ... }, + * matchedDN LDAPDN, + * diagnosticMessage LDAPString, + * referral [3] Referral OPTIONAL } + */ + + /* pull SEQUENCE */ + inf = ASN1_get_object(&cur, &len, &tag, &xclass, rem); + if (inf != V_ASN1_CONSTRUCTED || tag != V_ASN1_SEQUENCE || + (rem = end - cur, len > rem)) { + BIO_printf(bio_err, "Unexpected LDAP response\n"); + goto end; + } + + rem = len; /* ensure that we don't overstep the SEQUENCE */ + + /* pull MessageID */ + inf = ASN1_get_object(&cur, &len, &tag, &xclass, rem); + if (inf != V_ASN1_UNIVERSAL || tag != V_ASN1_INTEGER || + (rem = end - cur, len > rem)) { + BIO_printf(bio_err, "No MessageID\n"); + goto end; + } + + cur += len; /* shall we check for MessageId match or just skip? */ + + /* pull [APPLICATION 24] */ + rem = end - cur; + inf = ASN1_get_object(&cur, &len, &tag, &xclass, rem); + if (inf != V_ASN1_CONSTRUCTED || xclass != V_ASN1_APPLICATION || + tag != 24) { + BIO_printf(bio_err, "Not ExtendedResponse\n"); + goto end; + } + + /* pull resultCode */ + rem = end - cur; + inf = ASN1_get_object(&cur, &len, &tag, &xclass, rem); + if (inf != V_ASN1_UNIVERSAL || tag != V_ASN1_ENUMERATED || len == 0 || + (rem = end - cur, len > rem)) { + BIO_printf(bio_err, "Not LDAPResult\n"); + goto end; + } + + /* len should always be one, but just in case... */ + for (ret = 0, inf = 0; inf < len; inf++) { + ret <<= 8; + ret |= cur[inf]; + } + /* There is more data, but we don't care... */ + end: + return ret; +} + #endif /* OPENSSL_NO_SOCK */ diff --git a/apps/s_server.c b/apps/s_server.c index 31c90fdd..c772069a 100644 --- a/apps/s_server.c +++ b/apps/s_server.c @@ -1,5 +1,7 @@ /* * Copyright 1995-2018 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 @@ -7,38 +9,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECC cipher suite support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ -/* ==================================================================== - * Copyright 2005 Nokia. All rights reserved. - * - * The portions of the attached software ("Contribution") is developed by - * Nokia Corporation and is licensed pursuant to the OpenSSL open source - * license. - * - * The Contribution, originally written by Mika Kousa and Pasi Eronen of - * Nokia Corporation, consists of the "PSK" (Pre-Shared Key) ciphersuites - * support (see RFC 4279) to OpenSSL. - * - * No patent licenses or other rights except those expressly stated in - * the OpenSSL open source license shall be deemed granted or received - * expressly, by implication, estoppel, or otherwise. - * - * No assurances are provided by Nokia that the Contribution does not - * infringe the patent or other intellectual property rights of any third - * party or that the license provides you with all the necessary rights - * to make use of the Contribution. - * - * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. IN - * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA - * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY - * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR - * OTHERWISE. - */ - #include #include #include @@ -65,10 +35,9 @@ typedef unsigned int u_int; #endif -#include #include -#define USE_SOCKETS #include "apps.h" +#include "progs.h" #include #include #include @@ -89,21 +58,23 @@ typedef unsigned int u_int; #ifdef CHARSET_EBCDIC #include #endif +#include "internal/sockets.h" static int not_resumable_sess_cb(SSL *s, int is_forward_secure); -static int sv_body(int s, int stype, unsigned char *context); -static int www_body(int s, int stype, unsigned char *context); -static int rev_body(int s, int stype, unsigned char *context); +static int sv_body(int s, int stype, int prot, unsigned char *context); +static int www_body(int s, int stype, int prot, unsigned char *context); +static int rev_body(int s, int stype, int prot, unsigned char *context); static void close_accept_socket(void); static int init_ssl_connection(SSL *s); static void print_stats(BIO *bp, SSL_CTX *ctx); -static int generate_session_id(const SSL *ssl, unsigned char *id, +static int generate_session_id(SSL *ssl, unsigned char *id, unsigned int *id_len); static void init_session_cache_ctx(SSL_CTX *sctx); static void free_sessions(void); #ifndef OPENSSL_NO_DH static DH *load_dh_param(const char *dhfile); #endif +static void print_connection_info(SSL *con); static const int bufsize = 16 * 1024; static int accept_socket = -1; @@ -144,11 +115,15 @@ static long socket_mtu; * code. */ static int dtlslisten = 0; +static int stateless = 0; -#ifndef OPENSSL_NO_PSK -static const char psk_identity[] = "Client_identity"; +static int early_data = 0; +static SSL_SESSION *psksess = NULL; + +static char *psk_identity = "Client_identity"; char *psk_key = NULL; /* by default PSK is not used */ +#ifndef OPENSSL_NO_PSK static unsigned int psk_server_cb(SSL *ssl, const char *identity, unsigned char *psk, unsigned int max_psk_len) @@ -158,7 +133,7 @@ static unsigned int psk_server_cb(SSL *ssl, const char *identity, if (s_debug) BIO_printf(bio_s_out, "psk_server_cb\n"); - if (!identity) { + if (identity == NULL) { BIO_printf(bio_err, "Error: client did not send PSK identity\n"); goto out_err; } @@ -168,12 +143,12 @@ static unsigned int psk_server_cb(SSL *ssl, const char *identity, /* here we could lookup the given identity e.g. from a database */ if (strcmp(identity, psk_identity) != 0) { - BIO_printf(bio_s_out, "PSK error: client identity not found" + BIO_printf(bio_s_out, "PSK warning: client identity not what we expected" " (got '%s' expected '%s')\n", identity, psk_identity); - goto out_err; - } - if (s_debug) + } else { + if (s_debug) BIO_printf(bio_s_out, "PSK client identity found\n"); + } /* convert the PSK key to binary */ key = OPENSSL_hexstr2buf(psk_key, &key_len); @@ -205,6 +180,59 @@ static unsigned int psk_server_cb(SSL *ssl, const char *identity, } #endif +#define TLS13_AES_128_GCM_SHA256_BYTES ((const unsigned char *)"\x13\x01") +#define TLS13_AES_256_GCM_SHA384_BYTES ((const unsigned char *)"\x13\x02") + +static int psk_find_session_cb(SSL *ssl, const unsigned char *identity, + size_t identity_len, SSL_SESSION **sess) +{ + SSL_SESSION *tmpsess = NULL; + unsigned char *key; + long key_len; + const SSL_CIPHER *cipher = NULL; + + if (strlen(psk_identity) != identity_len + || memcmp(psk_identity, identity, identity_len) != 0) + return 0; + + if (psksess != NULL) { + SSL_SESSION_up_ref(psksess); + *sess = psksess; + return 1; + } + + key = OPENSSL_hexstr2buf(psk_key, &key_len); + if (key == NULL) { + BIO_printf(bio_err, "Could not convert PSK key '%s' to buffer\n", + psk_key); + return 0; + } + + if (key_len == EVP_MD_size(EVP_sha256())) + cipher = SSL_CIPHER_find(ssl, tls13_aes128gcmsha256_id); + else if (key_len == EVP_MD_size(EVP_sha384())) + cipher = SSL_CIPHER_find(ssl, tls13_aes256gcmsha384_id); + + if (cipher == NULL) { + /* Doesn't look like a suitable TLSv1.3 key. Ignore it */ + OPENSSL_free(key); + return 0; + } + + tmpsess = SSL_SESSION_new(); + if (tmpsess == NULL + || !SSL_SESSION_set1_master_key(tmpsess, key, key_len) + || !SSL_SESSION_set_cipher(tmpsess, cipher) + || !SSL_SESSION_set_protocol_version(tmpsess, SSL_version(ssl))) { + OPENSSL_free(key); + return 0; + } + OPENSSL_free(key); + *sess = tmpsess; + + return 1; +} + #ifndef OPENSSL_NO_SRP /* This is a context that we pass to callbacks */ typedef struct srpsrvparm_st { @@ -229,7 +257,7 @@ static int ssl_srp_server_param_cb(SSL *s, int *ad, void *arg) if (p->login == NULL && p->user == NULL) { p->login = SSL_get_srp_username(s); BIO_printf(bio_err, "SRP username = \"%s\"\n", p->login); - return (-1); + return -1; } if (p->user == NULL) { @@ -329,9 +357,9 @@ static int ebcdic_read(BIO *b, char *out, int outl) BIO *next = BIO_next(b); if (out == NULL || outl == 0) - return (0); + return 0; if (next == NULL) - return (0); + return 0; ret = BIO_read(next, out, outl); if (ret > 0) @@ -347,7 +375,7 @@ static int ebcdic_write(BIO *b, const char *in, int inl) int num; if ((in == NULL) || (inl <= 0)) - return (0); + return 0; if (next == NULL) return 0; @@ -370,7 +398,7 @@ static int ebcdic_write(BIO *b, const char *in, int inl) ret = BIO_write(next, wbuf->buff, inl); - return (ret); + return ret; } static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -379,7 +407,7 @@ static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr) BIO *next = BIO_next(b); if (next == NULL) - return (0); + return 0; switch (cmd) { case BIO_CTRL_DUP: ret = 0L; @@ -388,7 +416,7 @@ static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr) ret = BIO_ctrl(next, cmd, num, ptr); break; } - return (ret); + return ret; } static int ebcdic_gets(BIO *bp, char *buf, int size) @@ -432,17 +460,25 @@ static int ssl_servername_cb(SSL *s, int *ad, void *arg) { tlsextctx *p = (tlsextctx *) arg; const char *servername = SSL_get_servername(s, TLSEXT_NAMETYPE_host_name); - if (servername && p->biodebug) - BIO_printf(p->biodebug, "Hostname in TLS extension: \"%s\"\n", - servername); - if (!p->servername) + if (servername != NULL && p->biodebug != NULL) { + const char *cp = servername; + unsigned char uc; + + BIO_printf(p->biodebug, "Hostname in TLS extension: \""); + while ((uc = *cp++) != 0) + BIO_printf(p->biodebug, + isascii(uc) && isprint(uc) ? "%c" : "\\x%02x", uc); + BIO_printf(p->biodebug, "\"\n"); + } + + if (p->servername == NULL) return SSL_TLSEXT_ERR_NOACK; - if (servername) { + if (servername != NULL) { if (strcasecmp(servername, p->servername)) return p->extension_error; - if (ctx2) { + if (ctx2 != NULL) { BIO_printf(p->biodebug, "Switching server context.\n"); SSL_set_SSL_CTX(s, ctx2); } @@ -452,49 +488,45 @@ static int ssl_servername_cb(SSL *s, int *ad, void *arg) /* Structure passed to cert status callback */ typedef struct tlsextstatusctx_st { + int timeout; + /* File to load OCSP Response from (or NULL if no file) */ + char *respin; /* Default responder to use */ char *host, *path, *port; int use_ssl; - int timeout; int verbose; } tlsextstatusctx; -static tlsextstatusctx tlscstatp = { NULL, NULL, NULL, 0, -1, 0 }; +static tlsextstatusctx tlscstatp = { -1 }; #ifndef OPENSSL_NO_OCSP -/* - * Certificate Status callback. This is called when a client includes a - * certificate status request extension. This is a simplified version. It - * examines certificates each time and makes one OCSP responder query for - * each request. A full version would store details such as the OCSP - * certificate IDs and minimise the number of OCSP responses by caching them - * until they were considered "expired". - */ -static int cert_status_cb(SSL *s, void *arg) +/* + * Helper function to get an OCSP_RESPONSE from a responder. This is a + * simplified version. It examines certificates each time and makes one OCSP + * responder query for each request. A full version would store details such as + * the OCSP certificate IDs and minimise the number of OCSP responses by caching + * them until they were considered "expired". + */ +static int get_ocsp_resp_from_responder(SSL *s, tlsextstatusctx *srctx, + OCSP_RESPONSE **resp) { - tlsextstatusctx *srctx = arg; char *host = NULL, *port = NULL, *path = NULL; int use_ssl; - unsigned char *rspder = NULL; - int rspderlen; STACK_OF(OPENSSL_STRING) *aia = NULL; X509 *x = NULL; X509_STORE_CTX *inctx = NULL; X509_OBJECT *obj; OCSP_REQUEST *req = NULL; - OCSP_RESPONSE *resp = NULL; OCSP_CERTID *id = NULL; STACK_OF(X509_EXTENSION) *exts; int ret = SSL_TLSEXT_ERR_NOACK; int i; - if (srctx->verbose) - BIO_puts(bio_err, "cert_status: callback called\n"); /* Build up OCSP query from server certificate */ x = SSL_get_certificate(s); aia = X509_get1_ocsp(x); - if (aia) { + if (aia != NULL) { if (!OCSP_parse_url(sk_OPENSSL_STRING_value(aia, 0), &host, &port, &path, &use_ssl)) { BIO_puts(bio_err, "cert_status: can't parse AIA URL\n"); @@ -504,7 +536,7 @@ static int cert_status_cb(SSL *s, void *arg) BIO_printf(bio_err, "cert_status: AIA URL: %s\n", sk_OPENSSL_STRING_value(aia, 0)); } else { - if (!srctx->host) { + if (srctx->host == NULL) { BIO_puts(bio_err, "cert_status: no AIA and no default responder URL\n"); goto done; @@ -530,7 +562,7 @@ static int cert_status_cb(SSL *s, void *arg) } id = OCSP_cert_to_id(NULL, x, X509_OBJECT_get0_X509(obj)); X509_OBJECT_free(obj); - if (!id) + if (id == NULL) goto err; req = OCSP_REQUEST_new(); if (req == NULL) @@ -545,29 +577,24 @@ static int cert_status_cb(SSL *s, void *arg) if (!OCSP_REQUEST_add_ext(req, ext, -1)) goto err; } - resp = process_responder(req, host, path, port, use_ssl, NULL, + *resp = process_responder(req, host, path, port, use_ssl, NULL, srctx->timeout); - if (!resp) { + if (*resp == NULL) { BIO_puts(bio_err, "cert_status: error querying responder\n"); goto done; } - rspderlen = i2d_OCSP_RESPONSE(resp, &rspder); - if (rspderlen <= 0) - goto err; - SSL_set_tlsext_status_ocsp_resp(s, rspder, rspderlen); - if (srctx->verbose) { - BIO_puts(bio_err, "cert_status: ocsp response sent:\n"); - OCSP_RESPONSE_print(bio_err, resp, 2); - } + ret = SSL_TLSEXT_ERR_OK; goto done; err: ret = SSL_TLSEXT_ERR_ALERT_FATAL; done: - if (ret != SSL_TLSEXT_ERR_OK) - ERR_print_errors(bio_err); - if (aia) { + /* + * If we parsed aia we need to free; otherwise they were copied and we + * don't + */ + if (aia != NULL) { OPENSSL_free(host); OPENSSL_free(path); OPENSSL_free(port); @@ -575,10 +602,64 @@ static int cert_status_cb(SSL *s, void *arg) } OCSP_CERTID_free(id); OCSP_REQUEST_free(req); - OCSP_RESPONSE_free(resp); X509_STORE_CTX_free(inctx); return ret; } + +/* + * Certificate Status callback. This is called when a client includes a + * certificate status request extension. The response is either obtained from a + * file, or from an OCSP responder. + */ +static int cert_status_cb(SSL *s, void *arg) +{ + tlsextstatusctx *srctx = arg; + OCSP_RESPONSE *resp = NULL; + unsigned char *rspder = NULL; + int rspderlen; + int ret = SSL_TLSEXT_ERR_ALERT_FATAL; + + if (srctx->verbose) + BIO_puts(bio_err, "cert_status: callback called\n"); + + if (srctx->respin != NULL) { + BIO *derbio = bio_open_default(srctx->respin, 'r', FORMAT_ASN1); + if (derbio == NULL) { + BIO_puts(bio_err, "cert_status: Cannot open OCSP response file\n"); + goto err; + } + resp = d2i_OCSP_RESPONSE_bio(derbio, NULL); + BIO_free(derbio); + if (resp == NULL) { + BIO_puts(bio_err, "cert_status: Error reading OCSP response\n"); + goto err; + } + } else { + ret = get_ocsp_resp_from_responder(s, srctx, &resp); + if (ret != SSL_TLSEXT_ERR_OK) + goto err; + } + + rspderlen = i2d_OCSP_RESPONSE(resp, &rspder); + if (rspderlen <= 0) + goto err; + + SSL_set_tlsext_status_ocsp_resp(s, rspder, rspderlen); + if (srctx->verbose) { + BIO_puts(bio_err, "cert_status: ocsp response sent:\n"); + OCSP_RESPONSE_print(bio_err, resp, 2); + } + + ret = SSL_TLSEXT_ERR_OK; + + err: + if (ret != SSL_TLSEXT_ERR_OK) + ERR_print_errors(bio_err); + + OCSP_RESPONSE_free(resp); + + return ret; +} #endif #ifndef OPENSSL_NO_NEXTPROTONEG @@ -655,7 +736,7 @@ static char *srtp_profiles = NULL; typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ENGINE, OPT_4, OPT_6, OPT_ACCEPT, OPT_PORT, OPT_UNIX, OPT_UNLINK, OPT_NACCEPT, - OPT_VERIFY, OPT_UPPER_V_VERIFY, OPT_CONTEXT, OPT_CERT, OPT_CRL, + OPT_VERIFY, OPT_NAMEOPT, OPT_UPPER_V_VERIFY, OPT_CONTEXT, OPT_CERT, OPT_CRL, OPT_CRL_DOWNLOAD, OPT_SERVERINFO, OPT_CERTFORM, OPT_KEY, OPT_KEYFORM, OPT_PASS, OPT_CERT_CHAIN, OPT_DHPARAM, OPT_DCERTFORM, OPT_DCERT, OPT_DKEYFORM, OPT_DPASS, OPT_DKEY, OPT_DCERT_CHAIN, OPT_NOCERT, @@ -664,23 +745,26 @@ typedef enum OPTION_choice { OPT_BUILD_CHAIN, OPT_CAFILE, OPT_NOCAFILE, OPT_CHAINCAFILE, OPT_VERIFYCAFILE, OPT_NBIO, OPT_NBIO_TEST, OPT_IGN_EOF, OPT_NO_IGN_EOF, OPT_DEBUG, OPT_TLSEXTDEBUG, OPT_STATUS, OPT_STATUS_VERBOSE, - OPT_STATUS_TIMEOUT, OPT_STATUS_URL, OPT_MSG, OPT_MSGFILE, OPT_TRACE, - OPT_SECURITY_DEBUG, OPT_SECURITY_DEBUG_VERBOSE, OPT_STATE, OPT_CRLF, - OPT_QUIET, OPT_BRIEF, OPT_NO_DHE, - OPT_NO_RESUME_EPHEMERAL, OPT_PSK_HINT, OPT_PSK, OPT_SRPVFILE, - OPT_SRPUSERSEED, OPT_REV, OPT_WWW, OPT_UPPER_WWW, OPT_HTTP, OPT_ASYNC, - OPT_SSL_CONFIG, OPT_SPLIT_SEND_FRAG, OPT_MAX_PIPELINES, OPT_READ_BUF, - OPT_SSL3, OPT_TLS1_2, OPT_TLS1_1, OPT_TLS1, OPT_DTLS, OPT_DTLS1, - OPT_DTLS1_2, OPT_TIMEOUT, OPT_MTU, OPT_LISTEN, - OPT_ID_PREFIX, OPT_RAND, OPT_SERVERNAME, OPT_SERVERNAME_FATAL, + OPT_STATUS_TIMEOUT, OPT_STATUS_URL, OPT_STATUS_FILE, OPT_MSG, OPT_MSGFILE, + OPT_TRACE, OPT_SECURITY_DEBUG, OPT_SECURITY_DEBUG_VERBOSE, OPT_STATE, + OPT_CRLF, OPT_QUIET, OPT_BRIEF, OPT_NO_DHE, + OPT_NO_RESUME_EPHEMERAL, OPT_PSK_IDENTITY, OPT_PSK_HINT, OPT_PSK, + OPT_PSK_SESS, OPT_SRPVFILE, OPT_SRPUSERSEED, OPT_REV, OPT_WWW, + OPT_UPPER_WWW, OPT_HTTP, OPT_ASYNC, OPT_SSL_CONFIG, + OPT_MAX_SEND_FRAG, OPT_SPLIT_SEND_FRAG, OPT_MAX_PIPELINES, OPT_READ_BUF, + OPT_SSL3, OPT_TLS1_3, OPT_TLS1_2, OPT_TLS1_1, OPT_TLS1, OPT_DTLS, OPT_DTLS1, + OPT_DTLS1_2, OPT_SCTP, OPT_TIMEOUT, OPT_MTU, OPT_LISTEN, OPT_STATELESS, + OPT_ID_PREFIX, OPT_SERVERNAME, OPT_SERVERNAME_FATAL, OPT_CERT2, OPT_KEY2, OPT_NEXTPROTONEG, OPT_ALPN, OPT_SRTP_PROFILES, OPT_KEYMATEXPORT, OPT_KEYMATEXPORTLEN, + OPT_KEYLOG_FILE, OPT_MAX_EARLY, OPT_EARLY_DATA, + OPT_R_ENUM, OPT_S_ENUM, OPT_V_ENUM, OPT_X_ENUM } OPTION_CHOICE; -OPTIONS s_server_options[] = { +const OPTIONS s_server_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"port", OPT_PORT, 'p', "TCP/IP port to listen on for connections (default is " PORT ")"}, @@ -699,6 +783,7 @@ OPTIONS s_server_options[] = { {"Verify", OPT_UPPER_V_VERIFY, 'n', "Turn on peer certificate verification, must have a cert"}, {"cert", OPT_CERT, '<', "Certificate file to use; default is " TEST_CERT}, + {"nameopt", OPT_NAMEOPT, 's', "Various certificate name options"}, {"naccept", OPT_NACCEPT, 'p', "Terminate after #num connections"}, {"serverinfo", OPT_SERVERINFO, 's', "PEM serverinfo file for certificate"}, @@ -751,8 +836,7 @@ OPTIONS s_server_options[] = { {"HTTP", OPT_HTTP, '-', "Like -WWW but ./path includes HTTP headers"}, {"id_prefix", OPT_ID_PREFIX, 's', "Generate SSL/TLS session IDs prefixed by arg"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"keymatexport", OPT_KEYMATEXPORT, 's', "Export keying material using label"}, {"keymatexportlen", OPT_KEYMATEXPORTLEN, 'p', @@ -790,6 +874,8 @@ OPTIONS s_server_options[] = { {"status_timeout", OPT_STATUS_TIMEOUT, 'n', "Status request responder timeout"}, {"status_url", OPT_STATUS_URL, 's', "Status request fallback URL"}, + {"status_file", OPT_STATUS_FILE, '<', + "File containing DER encoded OCSP Response"}, #endif #ifndef OPENSSL_NO_SSL_TRACE {"trace", OPT_TRACE, '-', "trace protocol messages"}, @@ -805,20 +891,23 @@ OPTIONS s_server_options[] = { {"async", OPT_ASYNC, '-', "Operate in asynchronous mode"}, {"ssl_config", OPT_SSL_CONFIG, 's', "Configure SSL_CTX using the configuration 'val'"}, - {"split_send_frag", OPT_SPLIT_SEND_FRAG, 'n', + {"max_send_frag", OPT_MAX_SEND_FRAG, 'p', "Maximum Size of send frames "}, + {"split_send_frag", OPT_SPLIT_SEND_FRAG, 'p', "Size used to split data for encrypt pipelines"}, - {"max_pipelines", OPT_MAX_PIPELINES, 'n', + {"max_pipelines", OPT_MAX_PIPELINES, 'p', "Maximum number of encrypt/decrypt pipelines to be used"}, - {"read_buf", OPT_READ_BUF, 'n', + {"read_buf", OPT_READ_BUF, 'p', "Default read buffer size to be used for connections"}, OPT_S_OPTIONS, OPT_V_OPTIONS, OPT_X_OPTIONS, {"nbio", OPT_NBIO, '-', "Use non-blocking IO"}, + {"psk_identity", OPT_PSK_IDENTITY, 's', "PSK identity to expect"}, #ifndef OPENSSL_NO_PSK {"psk_hint", OPT_PSK_HINT, 's', "PSK identity hint to use"}, - {"psk", OPT_PSK, 's', "PSK in hex (without 0x)"}, #endif + {"psk", OPT_PSK, 's', "PSK in hex (without 0x)"}, + {"psk_session", OPT_PSK_SESS, '<', "File to read PSK SSL session from"}, #ifndef OPENSSL_NO_SRP {"srpvfile", OPT_SRPVFILE, '<', "The verifier file for SRP"}, {"srpuserseed", OPT_SRPUSERSEED, 's', @@ -836,6 +925,9 @@ OPTIONS s_server_options[] = { #ifndef OPENSSL_NO_TLS1_2 {"tls1_2", OPT_TLS1_2, '-', "just talk TLSv1.2"}, #endif +#ifndef OPENSSL_NO_TLS1_3 + {"tls1_3", OPT_TLS1_3, '-', "just talk TLSv1.3"}, +#endif #ifndef OPENSSL_NO_DTLS {"dtls", OPT_DTLS, '-', "Use any DTLS version"}, {"timeout", OPT_TIMEOUT, '-', "Enable timeouts"}, @@ -843,12 +935,16 @@ OPTIONS s_server_options[] = { {"listen", OPT_LISTEN, '-', "Listen for a DTLS ClientHello with a cookie and then connect"}, #endif + {"stateless", OPT_STATELESS, '-', "Require TLSv1.3 cookies"}, #ifndef OPENSSL_NO_DTLS1 {"dtls1", OPT_DTLS1, '-', "Just talk DTLSv1"}, #endif #ifndef OPENSSL_NO_DTLS1_2 {"dtls1_2", OPT_DTLS1_2, '-', "Just talk DTLSv1.2"}, #endif +#ifndef OPENSSL_NO_SCTP + {"sctp", OPT_SCTP, '-', "Use SCTP"}, +#endif #ifndef OPENSSL_NO_DH {"no_dhe", OPT_NO_DHE, '-', "Disable ephemeral DH"}, #endif @@ -865,12 +961,16 @@ OPTIONS s_server_options[] = { #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, #endif + {"keylogfile", OPT_KEYLOG_FILE, '>', "Write TLS secrets to file"}, + {"max_early_data", OPT_MAX_EARLY, 'n', + "The maximum number of bytes of early data"}, + {"early_data", OPT_EARLY_DATA, '-', "Attempt to read early data"}, {NULL, OPT_EOF, 0, NULL} }; #define IS_PROT_FLAG(o) \ (o == OPT_SSL3 || o == OPT_TLS1 || o == OPT_TLS1_1 || o == OPT_TLS1_2 \ - || o == OPT_DTLS || o == OPT_DTLS1 || o == OPT_DTLS1_2) + || o == OPT_TLS1_3 || o == OPT_DTLS || o == OPT_DTLS1 || o == OPT_DTLS1_2) int s_server_main(int argc, char *argv[]) { @@ -885,7 +985,7 @@ int s_server_main(int argc, char *argv[]) X509 *s_cert = NULL, *s_dcert = NULL; X509_VERIFY_PARAM *vpm = NULL; const char *CApath = NULL, *CAfile = NULL, *chCApath = NULL, *chCAfile = NULL; - char *dpassarg = NULL, *dpass = NULL, *inrand = NULL; + char *dpassarg = NULL, *dpass = NULL; char *passarg = NULL, *pass = NULL, *vfyCApath = NULL, *vfyCAfile = NULL; char *crl_file = NULL, *prog; #ifdef AF_UNIX @@ -902,7 +1002,7 @@ int s_server_main(int argc, char *argv[]) int s_cert_format = FORMAT_PEM, s_key_format = FORMAT_PEM; int s_dcert_format = FORMAT_PEM, s_dkey_format = FORMAT_PEM; int rev = 0, naccept = -1, sdebug = 0; - int socket_family = AF_UNSPEC, socket_type = SOCK_STREAM; + int socket_family = AF_UNSPEC, socket_type = SOCK_STREAM, protocol = 0; int state = 0, crl_format = FORMAT_PEM, crl_download = 0; char *host = NULL; char *port = BUF_strdup(PORT); @@ -922,8 +1022,8 @@ int s_server_main(int argc, char *argv[]) #ifndef OPENSSL_NO_PSK /* by default do not send a PSK identity hint */ char *psk_identity_hint = NULL; - char *p; #endif + char *p; #ifndef OPENSSL_NO_SRP char *srpuserseed = NULL; char *srp_verifier_file = NULL; @@ -938,8 +1038,12 @@ int s_server_main(int argc, char *argv[]) int s_tlsextstatus = 0; #endif int no_resume_ephemeral = 0; + unsigned int max_send_fragment = 0; unsigned int split_send_fragment = 0, max_pipelines = 0; const char *s_serverinfo_file = NULL; + const char *keylog_file = NULL; + int max_early_data = -1; + char *psksessf = NULL; /* Init of few remaining global variables */ local_argc = argc; @@ -1076,6 +1180,10 @@ int s_server_main(int argc, char *argv[]) case OPT_CERT: s_cert_file = opt_arg(); break; + case OPT_NAMEOPT: + if (!set_nameopt(opt_arg())) + goto end; + break; case OPT_CRL: crl_file = opt_arg(); break; @@ -1236,6 +1344,12 @@ int s_server_main(int argc, char *argv[]) BIO_printf(bio_err, "Error parsing URL\n"); goto end; } +#endif + break; + case OPT_STATUS_FILE: +#ifndef OPENSSL_NO_OCSP + s_tlsextstatus = 1; + tlscstatp.respin = opt_arg(); #endif break; case OPT_MSG: @@ -1275,20 +1389,24 @@ int s_server_main(int argc, char *argv[]) case OPT_NO_RESUME_EPHEMERAL: no_resume_ephemeral = 1; break; + case OPT_PSK_IDENTITY: + psk_identity = opt_arg(); + break; case OPT_PSK_HINT: #ifndef OPENSSL_NO_PSK psk_identity_hint = opt_arg(); #endif break; case OPT_PSK: -#ifndef OPENSSL_NO_PSK for (p = psk_key = opt_arg(); *p; p++) { if (isxdigit(_UC(*p))) continue; BIO_printf(bio_err, "Not a hex number '%s'\n", *argv); goto end; } -#endif + break; + case OPT_PSK_SESS: + psksessf = opt_arg(); break; case OPT_SRPVFILE: #ifndef OPENSSL_NO_SRP @@ -1323,6 +1441,10 @@ int s_server_main(int argc, char *argv[]) min_version = SSL3_VERSION; max_version = SSL3_VERSION; break; + case OPT_TLS1_3: + min_version = TLS1_3_VERSION; + max_version = TLS1_3_VERSION; + break; case OPT_TLS1_2: min_version = TLS1_2_VERSION; max_version = TLS1_2_VERSION; @@ -1355,6 +1477,11 @@ int s_server_main(int argc, char *argv[]) min_version = DTLS1_2_VERSION; max_version = DTLS1_2_VERSION; socket_type = SOCK_DGRAM; +#endif + break; + case OPT_SCTP: +#ifndef OPENSSL_NO_SCTP + protocol = IPPROTO_SCTP; #endif break; case OPT_TIMEOUT: @@ -1372,14 +1499,18 @@ int s_server_main(int argc, char *argv[]) dtlslisten = 1; #endif break; + case OPT_STATELESS: + stateless = 1; + break; case OPT_ID_PREFIX: session_id_prefix = opt_arg(); break; case OPT_ENGINE: engine = setup_engine(opt_arg(), 1); break; - case OPT_RAND: - inrand = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_SERVERNAME: tlsextcbp.servername = opt_arg(); @@ -1415,15 +1546,11 @@ int s_server_main(int argc, char *argv[]) case OPT_ASYNC: async = 1; break; + case OPT_MAX_SEND_FRAG: + max_send_fragment = atoi(opt_arg()); + break; case OPT_SPLIT_SEND_FRAG: split_send_fragment = atoi(opt_arg()); - if (split_send_fragment == 0) { - /* - * Not allowed - set to a deliberately bad value so we get an - * error message below - */ - split_send_fragment = SSL3_RT_MAX_PLAIN_LENGTH + 1; - } break; case OPT_MAX_PIPELINES: max_pipelines = atoi(opt_arg()); @@ -1431,12 +1558,30 @@ int s_server_main(int argc, char *argv[]) case OPT_READ_BUF: read_buf_len = atoi(opt_arg()); break; - + case OPT_KEYLOG_FILE: + keylog_file = opt_arg(); + break; + case OPT_MAX_EARLY: + max_early_data = atoi(opt_arg()); + if (max_early_data < 0) { + BIO_printf(bio_err, "Invalid value for max_early_data\n"); + goto end; + } + break; + case OPT_EARLY_DATA: + early_data = 1; + break; } } argc = opt_num_rest(); argv = opt_rest(); +#ifndef OPENSSL_NO_NEXTPROTONEG + if (min_version == TLS1_3_VERSION && next_proto_neg_in != NULL) { + BIO_printf(bio_err, "Cannot supply -nextprotoneg with TLSv1.3\n"); + goto opthelp; + } +#endif #ifndef OPENSSL_NO_DTLS if (www && socket_type == SOCK_DGRAM) { BIO_printf(bio_err, "Can't use -HTTP, -www or -WWW with DTLS\n"); @@ -1449,6 +1594,11 @@ int s_server_main(int argc, char *argv[]) } #endif + if (stateless && socket_type != SOCK_STREAM) { + BIO_printf(bio_err, "Can only use --stateless with TLS\n"); + goto end; + } + #ifdef AF_UNIX if (socket_family == AF_UNIX && socket_type != SOCK_STREAM) { BIO_printf(bio_err, @@ -1457,15 +1607,16 @@ int s_server_main(int argc, char *argv[]) } #endif - if (split_send_fragment > SSL3_RT_MAX_PLAIN_LENGTH) { - BIO_printf(bio_err, "Bad split send fragment size\n"); - goto end; - } - - if (max_pipelines > SSL_MAX_PIPELINES) { - BIO_printf(bio_err, "Bad max pipelines value\n"); - goto end; +#ifndef OPENSSL_NO_SCTP + if (protocol == IPPROTO_SCTP) { + if (socket_type != SOCK_DGRAM) { + BIO_printf(bio_err, "Can't use -sctp without DTLS\n"); + goto end; + } + /* SCTP is unusual. It uses DTLS over a SOCK_STREAM protocol */ + socket_type = SOCK_STREAM; } +#endif if (!app_passwd(passarg, dpassarg, &pass, &dpass)) { BIO_printf(bio_err, "Error getting password\n"); @@ -1484,7 +1635,7 @@ int s_server_main(int argc, char *argv[]) if (nocert == 0) { s_key = load_key(s_key_file, s_key_format, 0, pass, engine, "server certificate private key file"); - if (!s_key) { + if (s_key == NULL) { ERR_print_errors(bio_err); goto end; } @@ -1492,20 +1643,20 @@ int s_server_main(int argc, char *argv[]) s_cert = load_cert(s_cert_file, s_cert_format, "server certificate file"); - if (!s_cert) { + if (s_cert == NULL) { ERR_print_errors(bio_err); goto end; } - if (s_chain_file) { + if (s_chain_file != NULL) { if (!load_certs(s_chain_file, &s_chain, FORMAT_PEM, NULL, "server certificate chain")) goto end; } - if (tlsextcbp.servername) { + if (tlsextcbp.servername != NULL) { s_key2 = load_key(s_key_file2, s_key_format, 0, pass, engine, "second server certificate private key file"); - if (!s_key2) { + if (s_key2 == NULL) { ERR_print_errors(bio_err); goto end; } @@ -1513,7 +1664,7 @@ int s_server_main(int argc, char *argv[]) s_cert2 = load_cert(s_cert_file2, s_cert_format, "second server certificate file"); - if (!s_cert2) { + if (s_cert2 == NULL) { ERR_print_errors(bio_err); goto end; } @@ -1533,16 +1684,16 @@ int s_server_main(int argc, char *argv[]) goto end; } - if (crl_file) { + if (crl_file != NULL) { X509_CRL *crl; crl = load_crl(crl_file, crl_format); - if (!crl) { + if (crl == NULL) { BIO_puts(bio_err, "Error loading CRL\n"); ERR_print_errors(bio_err); goto end; } crls = sk_X509_CRL_new_null(); - if (!crls || !sk_X509_CRL_push(crls, crl)) { + if (crls == NULL || !sk_X509_CRL_push(crls, crl)) { BIO_puts(bio_err, "Error adding CRL\n"); ERR_print_errors(bio_err); X509_CRL_free(crl); @@ -1550,14 +1701,14 @@ int s_server_main(int argc, char *argv[]) } } - if (s_dcert_file) { + if (s_dcert_file != NULL) { if (s_dkey_file == NULL) s_dkey_file = s_dcert_file; s_dkey = load_key(s_dkey_file, s_dkey_format, 0, dpass, engine, "second certificate private key file"); - if (!s_dkey) { + if (s_dkey == NULL) { ERR_print_errors(bio_err); goto end; } @@ -1565,11 +1716,11 @@ int s_server_main(int argc, char *argv[]) s_dcert = load_cert(s_dcert_file, s_dcert_format, "second server certificate file"); - if (!s_dcert) { + if (s_dcert == NULL) { ERR_print_errors(bio_err); goto end; } - if (s_dchain_file) { + if (s_dchain_file != NULL) { if (!load_certs(s_dchain_file, &s_dchain, FORMAT_PEM, NULL, "second server certificate chain")) goto end; @@ -1577,19 +1728,10 @@ int s_server_main(int argc, char *argv[]) } - if (!app_RAND_load_file(NULL, 1) && inrand == NULL - && !RAND_status()) { - BIO_printf(bio_err, - "warning, not much extra random data, consider using the -rand option\n"); - } - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - if (bio_s_out == NULL) { if (s_quiet && !s_debug) { bio_s_out = BIO_new(BIO_s_null()); - if (s_msg && !bio_s_msg) + if (s_msg && bio_s_msg == NULL) bio_s_msg = dup_bio_out(FORMAT_TEXT); } else { if (bio_s_out == NULL) @@ -1615,10 +1757,6 @@ int s_server_main(int argc, char *argv[]) } if (sdebug) ssl_ctx_security_debug(ctx, sdebug); - - if (!config_ctx(cctx, ssl_args, ctx)) - goto end; - if (ssl_config) { if (SSL_CTX_config(ctx, ssl_config) == 0) { BIO_printf(bio_err, "Error using configuration \"%s\"\n", @@ -1627,11 +1765,9 @@ int s_server_main(int argc, char *argv[]) goto end; } } - if (min_version != 0 - && SSL_CTX_set_min_proto_version(ctx, min_version) == 0) + if (SSL_CTX_set_min_proto_version(ctx, min_version) == 0) goto end; - if (max_version != 0 - && SSL_CTX_set_max_proto_version(ctx, max_version) == 0) + if (SSL_CTX_set_max_proto_version(ctx, max_version) == 0) goto end; if (session_id_prefix) { @@ -1646,7 +1782,7 @@ int s_server_main(int argc, char *argv[]) BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix); } SSL_CTX_set_quiet_shutdown(ctx, 1); - if (exc) + if (exc != NULL) ssl_ctx_set_excert(ctx, exc); if (state) @@ -1661,11 +1797,25 @@ int s_server_main(int argc, char *argv[]) if (async) { SSL_CTX_set_mode(ctx, SSL_MODE_ASYNC); } - if (split_send_fragment > 0) { - SSL_CTX_set_split_send_fragment(ctx, split_send_fragment); + + if (max_send_fragment > 0 + && !SSL_CTX_set_max_send_fragment(ctx, max_send_fragment)) { + BIO_printf(bio_err, "%s: Max send fragment size %u is out of permitted range\n", + prog, max_send_fragment); + goto end; } - if (max_pipelines > 0) { - SSL_CTX_set_max_pipelines(ctx, max_pipelines); + + if (split_send_fragment > 0 + && !SSL_CTX_set_split_send_fragment(ctx, split_send_fragment)) { + BIO_printf(bio_err, "%s: Split send fragment size %u is out of permitted range\n", + prog, split_send_fragment); + goto end; + } + if (max_pipelines > 0 + && !SSL_CTX_set_max_pipelines(ctx, max_pipelines)) { + BIO_printf(bio_err, "%s: Max pipelines %u is out of permitted range\n", + prog, max_pipelines); + goto end; } if (read_buf_len > 0) { @@ -1693,6 +1843,8 @@ int s_server_main(int argc, char *argv[]) } ssl_ctx_add_crls(ctx, crls, 0); + if (!config_ctx(cctx, ssl_args, ctx)) + goto end; if (!ssl_load_stores(ctx, vfyCApath, vfyCAfile, chCApath, chCAfile, crls, crl_download)) { @@ -1709,7 +1861,7 @@ int s_server_main(int argc, char *argv[]) } } - if (ctx2) { + if (ctx2 != NULL) { BIO_printf(bio_s_out, "Setting secondary ctx parameters\n"); if (sdebug) @@ -1727,7 +1879,7 @@ int s_server_main(int argc, char *argv[]) BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix); } SSL_CTX_set_quiet_shutdown(ctx2, 1); - if (exc) + if (exc != NULL) ssl_ctx_set_excert(ctx2, exc); if (state) @@ -1770,9 +1922,9 @@ int s_server_main(int argc, char *argv[]) if (!no_dhe) { DH *dh = NULL; - if (dhfile) + if (dhfile != NULL) dh = load_dh_param(dhfile); - else if (s_cert_file) + else if (s_cert_file != NULL) dh = load_dh_param(s_cert_file); if (dh != NULL) { @@ -1782,16 +1934,16 @@ int s_server_main(int argc, char *argv[]) } (void)BIO_flush(bio_s_out); - if (dh == NULL) + if (dh == NULL) { SSL_CTX_set_dh_auto(ctx, 1); - else if (!SSL_CTX_set_tmp_dh(ctx, dh)) { + } else if (!SSL_CTX_set_tmp_dh(ctx, dh)) { BIO_puts(bio_err, "Error setting temp DH parameters\n"); ERR_print_errors(bio_err); DH_free(dh); goto end; } - if (ctx2) { + if (ctx2 != NULL) { if (!dhfile) { DH *dh2 = load_dh_param(s_cert_file2); if (dh2 != NULL) { @@ -1802,9 +1954,9 @@ int s_server_main(int argc, char *argv[]) dh = dh2; } } - if (dh == NULL) + if (dh == NULL) { SSL_CTX_set_dh_auto(ctx2, 1); - else if (!SSL_CTX_set_tmp_dh(ctx2, dh)) { + } else if (!SSL_CTX_set_tmp_dh(ctx2, dh)) { BIO_puts(bio_err, "Error setting temp DH parameters\n"); ERR_print_errors(bio_err); DH_free(dh); @@ -1824,7 +1976,8 @@ int s_server_main(int argc, char *argv[]) goto end; } - if (ctx2 && !set_cert_key_stuff(ctx2, s_cert2, s_key2, NULL, build_chain)) + if (ctx2 != NULL + && !set_cert_key_stuff(ctx2, s_cert2, s_key2, NULL, build_chain)) goto end; if (s_dcert != NULL) { @@ -1836,7 +1989,7 @@ int s_server_main(int argc, char *argv[]) SSL_CTX_set_not_resumable_session_callback(ctx, not_resumable_sess_cb); - if (ctx2) + if (ctx2 != NULL) SSL_CTX_set_not_resumable_session_callback(ctx2, not_resumable_sess_cb); } @@ -1853,6 +2006,26 @@ int s_server_main(int argc, char *argv[]) goto end; } #endif + if (psksessf != NULL) { + BIO *stmp = BIO_new_file(psksessf, "r"); + + if (stmp == NULL) { + BIO_printf(bio_err, "Can't open PSK session file %s\n", psksessf); + ERR_print_errors(bio_err); + goto end; + } + psksess = PEM_read_bio_SSL_SESSION(stmp, NULL, 0, NULL); + BIO_free(stmp); + if (psksess == NULL) { + BIO_printf(bio_err, "Can't read PSK session file %s\n", psksessf); + ERR_print_errors(bio_err); + goto end; + } + + } + + if (psk_key != NULL || psksess != NULL) + SSL_CTX_set_psk_find_session_callback(ctx, psk_find_session_cb); SSL_CTX_set_verify(ctx, s_server_verify, verify_callback); if (!SSL_CTX_set_session_id_context(ctx, @@ -1867,7 +2040,7 @@ int s_server_main(int argc, char *argv[]) SSL_CTX_set_cookie_generate_cb(ctx, generate_cookie_callback); SSL_CTX_set_cookie_verify_cb(ctx, verify_cookie_callback); - if (ctx2) { + if (ctx2 != NULL) { SSL_CTX_set_verify(ctx2, s_server_verify, verify_callback); if (!SSL_CTX_set_session_id_context(ctx2, (void *)&s_server_session_id_context, @@ -1917,6 +2090,11 @@ int s_server_main(int argc, char *argv[]) } } #endif + if (set_keylog_file(ctx, keylog_file)) + goto end; + + if (max_early_data >= 0) + SSL_CTX_set_max_early_data(ctx, max_early_data); BIO_printf(bio_s_out, "ACCEPT\n"); (void)BIO_flush(bio_s_out); @@ -1931,12 +2109,14 @@ int s_server_main(int argc, char *argv[]) && unlink_unix_path) unlink(host); #endif - do_server(&accept_socket, host, port, socket_family, socket_type, + do_server(&accept_socket, host, port, socket_family, socket_type, protocol, server_cb, context, naccept); print_stats(bio_s_out, ctx); ret = 0; end: SSL_CTX_free(ctx); + SSL_SESSION_free(psksess); + set_keylog_file(NULL, NULL); X509_free(s_cert); sk_X509_CRL_pop_free(crls, X509_CRL_free); X509_free(s_dcert); @@ -1971,7 +2151,7 @@ int s_server_main(int argc, char *argv[]) #ifdef CHARSET_EBCDIC BIO_meth_free(methods_ebcdic); #endif - return (ret); + return ret; } static void print_stats(BIO *bio, SSL_CTX *ssl_ctx) @@ -2002,7 +2182,7 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx) SSL_CTX_sess_get_cache_size(ssl_ctx)); } -static int sv_body(int s, int stype, unsigned char *context) +static int sv_body(int s, int stype, int prot, unsigned char *context) { char *buf = NULL; fd_set readfds; @@ -2016,6 +2196,13 @@ static int sv_body(int s, int stype, unsigned char *context) struct timeval tv; #else struct timeval *timeoutp; +#endif +#ifndef OPENSSL_NO_DTLS +# ifndef OPENSSL_NO_SCTP + int isdtls = (stype == SOCK_DGRAM || prot == IPPROTO_SCTP); +# else + int isdtls = (stype == SOCK_DGRAM); +# endif #endif buf = app_malloc(bufsize, "server buffer"); @@ -2026,31 +2213,38 @@ static int sv_body(int s, int stype, unsigned char *context) BIO_printf(bio_err, "Turned on non blocking io\n"); } + con = SSL_new(ctx); if (con == NULL) { - con = SSL_new(ctx); - - if (s_tlsextdebug) { - SSL_set_tlsext_debug_callback(con, tlsext_cb); - SSL_set_tlsext_debug_arg(con, bio_s_out); - } - - if (context - && !SSL_set_session_id_context(con, - context, strlen((char *)context))) { - BIO_printf(bio_err, "Error setting session id context\n"); - ret = -1; - goto err; - } + ret = -1; + goto err; } + + if (s_tlsextdebug) { + SSL_set_tlsext_debug_callback(con, tlsext_cb); + SSL_set_tlsext_debug_arg(con, bio_s_out); + } + + if (context != NULL + && !SSL_set_session_id_context(con, context, + strlen((char *)context))) { + BIO_printf(bio_err, "Error setting session id context\n"); + ret = -1; + goto err; + } + if (!SSL_clear(con)) { BIO_printf(bio_err, "Error clearing SSL connection\n"); ret = -1; goto err; } #ifndef OPENSSL_NO_DTLS - if (stype == SOCK_DGRAM) { - - sbio = BIO_new_dgram(s, BIO_NOCLOSE); + if (isdtls) { +# ifndef OPENSSL_NO_SCTP + if (prot == IPPROTO_SCTP) + sbio = BIO_new_dgram_sctp(s, BIO_NOCLOSE); + else +# endif + sbio = BIO_new_dgram(s, BIO_NOCLOSE); if (enable_timeouts) { timeout.tv_sec = 0; @@ -2081,12 +2275,21 @@ static int sv_body(int s, int stype, unsigned char *context) /* want to do MTU discovery */ BIO_ctrl(sbio, BIO_CTRL_DGRAM_MTU_DISCOVER, 0, NULL); - /* turn on cookie exchange */ - SSL_set_options(con, SSL_OP_COOKIE_EXCHANGE); +# ifndef OPENSSL_NO_SCTP + if (prot != IPPROTO_SCTP) +# endif + /* Turn on cookie exchange. Not necessary for SCTP */ + SSL_set_options(con, SSL_OP_COOKIE_EXCHANGE); } else #endif sbio = BIO_new_socket(s, BIO_NOCLOSE); + if (sbio == NULL) { + BIO_printf(bio_err, "Unable to create BIO\n"); + ERR_print_errors(bio_err); + goto err; + } + if (s_nbio_test) { BIO *test; @@ -2117,6 +2320,49 @@ static int sv_body(int s, int stype, unsigned char *context) SSL_set_tlsext_debug_arg(con, bio_s_out); } + if (early_data) { + int write_header = 1, edret = SSL_READ_EARLY_DATA_ERROR; + size_t readbytes; + + while (edret != SSL_READ_EARLY_DATA_FINISH) { + for (;;) { + edret = SSL_read_early_data(con, buf, bufsize, &readbytes); + if (edret != SSL_READ_EARLY_DATA_ERROR) + break; + + switch (SSL_get_error(con, 0)) { + case SSL_ERROR_WANT_WRITE: + case SSL_ERROR_WANT_ASYNC: + case SSL_ERROR_WANT_READ: + /* Just keep trying - busy waiting */ + continue; + default: + BIO_printf(bio_err, "Error reading early data\n"); + ERR_print_errors(bio_err); + goto err; + } + } + if (readbytes > 0) { + if (write_header) { + BIO_printf(bio_s_out, "Early data received:\n"); + write_header = 0; + } + raw_write_stdout(buf, (unsigned int)readbytes); + (void)BIO_flush(bio_s_out); + } + } + if (write_header) { + if (SSL_get_early_data_status(con) == SSL_EARLY_DATA_NOT_SENT) + BIO_printf(bio_s_out, "No early data received\n"); + else + BIO_printf(bio_s_out, "Early data was rejected\n"); + } else { + BIO_printf(bio_s_out, "\nEnd of early data\n"); + } + if (SSL_is_init_finished(con)) + print_connection_info(con); + } + if (fileno_stdin() > s) width = fileno_stdin() + 1; else @@ -2197,8 +2443,9 @@ static int sv_body(int s, int stype, unsigned char *context) } } assert(lf_num == 0); - } else + } else { i = raw_read_stdin(buf, bufsize); + } if (!s_quiet && !s_brief) { if ((i <= 0) || (buf[0] == 'Q')) { @@ -2233,9 +2480,6 @@ static int sv_body(int s, int stype, unsigned char *context) printf("SSL_do_handshake -> %d\n", i); i = 0; /* 13; */ continue; - /* - * strcpy(buf,"server side RE-NEGOTIATE\n"); - */ } if ((buf[0] == 'R') && ((buf[1] == '\n') || (buf[1] == '\r'))) { SSL_set_verify(con, @@ -2246,10 +2490,29 @@ static int sv_body(int s, int stype, unsigned char *context) printf("SSL_do_handshake -> %d\n", i); i = 0; /* 13; */ continue; - /* - * strcpy(buf,"server side RE-NEGOTIATE asking for client - * cert\n"); - */ + } + if ((buf[0] == 'K' || buf[0] == 'k') + && ((buf[1] == '\n') || (buf[1] == '\r'))) { + SSL_key_update(con, buf[0] == 'K' ? + SSL_KEY_UPDATE_REQUESTED + : SSL_KEY_UPDATE_NOT_REQUESTED); + i = SSL_do_handshake(con); + printf("SSL_do_handshake -> %d\n", i); + i = 0; + continue; + } + if (buf[0] == 'c' && ((buf[1] == '\n') || (buf[1] == '\r'))) { + SSL_set_verify(con, SSL_VERIFY_PEER, NULL); + i = SSL_verify_client_post_handshake(con); + if (i == 0) { + printf("Failed to initiate request\n"); + ERR_print_errors(bio_err); + } else { + i = SSL_do_handshake(con); + printf("SSL_do_handshake -> %d\n", i); + i = 0; + } + continue; } if (buf[0] == 'P') { static const char *str = "Lets print some clear text\n"; @@ -2414,7 +2677,7 @@ static int sv_body(int s, int stype, unsigned char *context) if (ret >= 0) BIO_printf(bio_s_out, "ACCEPT\n"); (void)BIO_flush(bio_s_out); - return (ret); + return ret; } static void close_accept_socket(void) @@ -2425,97 +2688,105 @@ static void close_accept_socket(void) } } +static int is_retryable(SSL *con, int i) +{ + int err = SSL_get_error(con, i); + + /* If it's not a fatal error, it must be retryable */ + return (err != SSL_ERROR_SSL) + && (err != SSL_ERROR_SYSCALL) + && (err != SSL_ERROR_ZERO_RETURN); +} + static int init_ssl_connection(SSL *con) { int i; - const char *str; - X509 *peer; long verify_err; - char buf[BUFSIZ]; -#if !defined(OPENSSL_NO_NEXTPROTONEG) - const unsigned char *next_proto_neg; - unsigned next_proto_neg_len; -#endif - unsigned char *exportedkeymat; int retry = 0; -#ifndef OPENSSL_NO_DTLS - if (dtlslisten) { + if (dtlslisten || stateless) { BIO_ADDR *client = NULL; - if ((client = BIO_ADDR_new()) == NULL) { - BIO_printf(bio_err, "ERROR - memory\n"); - return 0; + if (dtlslisten) { + if ((client = BIO_ADDR_new()) == NULL) { + BIO_printf(bio_err, "ERROR - memory\n"); + return 0; + } + i = DTLSv1_listen(con, client); + } else { + i = SSL_stateless(con); } - i = DTLSv1_listen(con, client); if (i > 0) { BIO *wbio; int fd = -1; - wbio = SSL_get_wbio(con); - if (wbio) { - BIO_get_fd(wbio, &fd); - } + if (dtlslisten) { + wbio = SSL_get_wbio(con); + if (wbio) { + BIO_get_fd(wbio, &fd); + } - if (!wbio || BIO_connect(fd, client, 0) == 0) { - BIO_printf(bio_err, "ERROR - unable to connect\n"); + if (!wbio || BIO_connect(fd, client, 0) == 0) { + BIO_printf(bio_err, "ERROR - unable to connect\n"); + BIO_ADDR_free(client); + return 0; + } BIO_ADDR_free(client); - return 0; + dtlslisten = 0; + } else { + stateless = 0; } - BIO_ADDR_free(client); - dtlslisten = 0; i = SSL_accept(con); } else { BIO_ADDR_free(client); } - } else -#endif + } else { + do { + i = SSL_accept(con); - do { - i = SSL_accept(con); - - if (i <= 0) - retry = BIO_sock_should_retry(i); + if (i <= 0) + retry = is_retryable(con, i); #ifdef CERT_CB_TEST_RETRY - { - while (i <= 0 - && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP - && SSL_get_state(con) == TLS_ST_SR_CLNT_HELLO) { - BIO_printf(bio_err, - "LOOKUP from certificate callback during accept\n"); - i = SSL_accept(con); - if (i <= 0) - retry = BIO_sock_should_retry(i); + { + while (i <= 0 + && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP + && SSL_get_state(con) == TLS_ST_SR_CLNT_HELLO) { + BIO_printf(bio_err, + "LOOKUP from certificate callback during accept\n"); + i = SSL_accept(con); + if (i <= 0) + retry = is_retryable(con, i); + } } - } #endif #ifndef OPENSSL_NO_SRP - while (i <= 0 - && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) { - BIO_printf(bio_s_out, "LOOKUP during accept %s\n", - srp_callback_parm.login); - SRP_user_pwd_free(srp_callback_parm.user); - srp_callback_parm.user = - SRP_VBASE_get1_by_user(srp_callback_parm.vb, - srp_callback_parm.login); - if (srp_callback_parm.user) - BIO_printf(bio_s_out, "LOOKUP done %s\n", - srp_callback_parm.user->info); - else - BIO_printf(bio_s_out, "LOOKUP not successful\n"); - i = SSL_accept(con); - if (i <= 0) - retry = BIO_sock_should_retry(i); - } + while (i <= 0 + && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) { + BIO_printf(bio_s_out, "LOOKUP during accept %s\n", + srp_callback_parm.login); + SRP_user_pwd_free(srp_callback_parm.user); + srp_callback_parm.user = + SRP_VBASE_get1_by_user(srp_callback_parm.vb, + srp_callback_parm.login); + if (srp_callback_parm.user) + BIO_printf(bio_s_out, "LOOKUP done %s\n", + srp_callback_parm.user->info); + else + BIO_printf(bio_s_out, "LOOKUP not successful\n"); + i = SSL_accept(con); + if (i <= 0) + retry = is_retryable(con, i); + } #endif - } while (i < 0 && SSL_waiting_for_async(con)); + } while (i < 0 && SSL_waiting_for_async(con)); + } if (i <= 0) { - if ((dtlslisten && i == 0) - || (!dtlslisten && retry)) { + if (((dtlslisten || stateless) && i == 0) + || (!dtlslisten && !stateless && retry)) { BIO_printf(bio_s_out, "DELAY\n"); - return (1); + return 1; } BIO_printf(bio_err, "ERROR\n"); @@ -2527,9 +2798,25 @@ static int init_ssl_connection(SSL *con) } /* Always print any error messages */ ERR_print_errors(bio_err); - return (0); + return 0; } + print_connection_info(con); + return 1; +} + +static void print_connection_info(SSL *con) +{ + const char *str; + X509 *peer; + char buf[BUFSIZ]; +#if !defined(OPENSSL_NO_NEXTPROTONEG) + const unsigned char *next_proto_neg; + unsigned next_proto_neg_len; +#endif + unsigned char *exportedkeymat; + int i; + if (s_brief) print_ssl_summary(con); @@ -2539,10 +2826,7 @@ static int init_ssl_connection(SSL *con) if (peer != NULL) { BIO_printf(bio_s_out, "Client certificate\n"); PEM_write_bio_X509(bio_s_out, peer); - X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof(buf)); - BIO_printf(bio_s_out, "subject=%s\n", buf); - X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof(buf)); - BIO_printf(bio_s_out, "issuer=%s\n", buf); + dump_cert_text(bio_s_out, peer); X509_free(peer); peer = NULL; } @@ -2553,8 +2837,9 @@ static int init_ssl_connection(SSL *con) ssl_print_sigalgs(bio_s_out, con); #ifndef OPENSSL_NO_EC ssl_print_point_formats(bio_s_out, con); - ssl_print_curves(bio_s_out, con, 0); + ssl_print_groups(bio_s_out, con, 0); #endif + print_ca_names(bio_s_out, con); BIO_printf(bio_s_out, "CIPHER is %s\n", (str != NULL) ? str : "(NONE)"); #if !defined(OPENSSL_NO_NEXTPROTONEG) @@ -2603,7 +2888,6 @@ static int init_ssl_connection(SSL *con) } (void)BIO_flush(bio_s_out); - return (1); } #ifndef OPENSSL_NO_DH @@ -2617,11 +2901,11 @@ static DH *load_dh_param(const char *dhfile) ret = PEM_read_bio_DHparams(bio, NULL, NULL, NULL); err: BIO_free(bio); - return (ret); + return ret; } #endif -static int www_body(int s, int stype, unsigned char *context) +static int www_body(int s, int stype, int prot, unsigned char *context) { char *buf = NULL; int ret = 1; @@ -2663,7 +2947,7 @@ static int www_body(int s, int stype, unsigned char *context) SSL_set_tlsext_debug_arg(con, bio_s_out); } - if (context + if (context != NULL && !SSL_set_session_id_context(con, context, strlen((char *)context))) goto err; @@ -2843,8 +3127,9 @@ static int www_body(int s, int stype, unsigned char *context) } ssl_print_sigalgs(io, con); #ifndef OPENSSL_NO_EC - ssl_print_curves(io, con, 0); + ssl_print_groups(io, con, 0); #endif + print_ca_names(io, con); BIO_printf(io, (SSL_session_reused(con) ? "---\nReused, " : "---\nNew, ")); c = SSL_get_current_cipher(con); @@ -3004,10 +3289,10 @@ static int www_body(int s, int stype, unsigned char *context) BIO_printf(bio_s_out, "ACCEPT\n"); OPENSSL_free(buf); BIO_free_all(io); - return (ret); + return ret; } -static int rev_body(int s, int stype, unsigned char *context) +static int rev_body(int s, int stype, int prot, unsigned char *context) { char *buf = NULL; int i; @@ -3032,7 +3317,7 @@ static int rev_body(int s, int stype, unsigned char *context) SSL_set_tlsext_debug_callback(con, tlsext_cb); SSL_set_tlsext_debug_arg(con, bio_s_out); } - if (context + if (context != NULL && !SSL_set_session_id_context(con, context, strlen((char *)context))) { ERR_print_errors(bio_err); @@ -3157,11 +3442,11 @@ static int rev_body(int s, int stype, unsigned char *context) OPENSSL_free(buf); BIO_free_all(io); - return (ret); + return ret; } #define MAX_SESSION_ID_ATTEMPTS 10 -static int generate_session_id(const SSL *ssl, unsigned char *id, +static int generate_session_id(SSL *ssl, unsigned char *id, unsigned int *id_len) { unsigned int count = 0; diff --git a/apps/s_socket.c b/apps/s_socket.c index 458aa862..4b82011a 100644 --- a/apps/s_socket.c +++ b/apps/s_socket.c @@ -28,22 +28,27 @@ typedef unsigned int u_int; #ifndef OPENSSL_NO_SOCK -# define USE_SOCKETS # include "apps.h" -# undef USE_SOCKETS # include "s_apps.h" +# include "internal/sockets.h" # include # include +/* Keep track of our peer's address for the cookie callback */ +BIO_ADDR *ourpeer = NULL; + /* * init_client - helper routine to set up socket communication * @sock: pointer to storage of resulting socket. * @host: the host name or path (for AF_UNIX) to connect to. * @port: the port to connect to (ignored for AF_UNIX). + * @bindhost: source host or path (for AF_UNIX). + * @bindport: source port (ignored for AF_UNIX). * @family: desired socket family, may be AF_INET, AF_INET6, AF_UNIX or * AF_UNSPEC * @type: socket type, must be SOCK_STREAM or SOCK_DGRAM + * @protocol: socket protocol, e.g. IPPROTO_TCP or IPPROTO_UDP (or 0 for any) * * This will create a socket and use it to connect to a host:port, or if * family == AF_UNIX, to the path found in host. @@ -55,21 +60,35 @@ typedef unsigned int u_int; * Returns 1 on success, 0 on failure. */ int init_client(int *sock, const char *host, const char *port, - int family, int type) + const char *bindhost, const char *bindport, + int family, int type, int protocol) { BIO_ADDRINFO *res = NULL; + BIO_ADDRINFO *bindaddr = NULL; const BIO_ADDRINFO *ai = NULL; + const BIO_ADDRINFO *bi = NULL; + int found = 0; int ret; - if (!BIO_sock_init()) + if (BIO_sock_init() != 1) return 0; - ret = BIO_lookup(host, port, BIO_LOOKUP_CLIENT, family, type, &res); + ret = BIO_lookup_ex(host, port, BIO_LOOKUP_CLIENT, family, type, protocol, + &res); if (ret == 0) { ERR_print_errors(bio_err); return 0; } + if (bindhost != NULL || bindport != NULL) { + ret = BIO_lookup_ex(bindhost, bindport, BIO_LOOKUP_CLIENT, + family, type, protocol, &bindaddr); + if (ret == 0) { + ERR_print_errors (bio_err); + goto out; + } + } + ret = 0; for (ai = res; ai != NULL; ai = BIO_ADDRINFO_next(ai)) { /* Admittedly, these checks are quite paranoid, we should not get @@ -77,7 +96,19 @@ int init_client(int *sock, const char *host, const char *port, * asked for. */ OPENSSL_assert((family == AF_UNSPEC || family == BIO_ADDRINFO_family(ai)) - && (type == 0 || type == BIO_ADDRINFO_socktype(ai))); + && (type == 0 || type == BIO_ADDRINFO_socktype(ai)) + && (protocol == 0 + || protocol == BIO_ADDRINFO_protocol(ai))); + + if (bindaddr != NULL) { + for (bi = bindaddr; bi != NULL; bi = BIO_ADDRINFO_next(bi)) { + if (BIO_ADDRINFO_family(bi) == BIO_ADDRINFO_family(ai)) + break; + } + if (bi == NULL) + continue; + ++found; + } *sock = BIO_socket(BIO_ADDRINFO_family(ai), BIO_ADDRINFO_socktype(ai), BIO_ADDRINFO_protocol(ai), 0); @@ -87,6 +118,34 @@ int init_client(int *sock, const char *host, const char *port, */ continue; } + + if (bi != NULL) { + if (!BIO_bind(*sock, BIO_ADDRINFO_address(bi), + BIO_SOCK_REUSEADDR)) { + BIO_closesocket(*sock); + *sock = INVALID_SOCKET; + break; + } + } + +#ifndef OPENSSL_NO_SCTP + if (protocol == IPPROTO_SCTP) { + /* + * For SCTP we have to set various options on the socket prior to + * connecting. This is done automatically by BIO_new_dgram_sctp(). + * We don't actually need the created BIO though so we free it again + * immediately. + */ + BIO *tmpbio = BIO_new_dgram_sctp(*sock, BIO_NOCLOSE); + + if (tmpbio == NULL) { + ERR_print_errors(bio_err); + return 0; + } + BIO_free(tmpbio); + } +#endif + if (!BIO_connect(*sock, BIO_ADDRINFO_address(ai), 0)) { BIO_closesocket(*sock); *sock = INVALID_SOCKET; @@ -98,12 +157,27 @@ int init_client(int *sock, const char *host, const char *port, } if (*sock == INVALID_SOCKET) { + if (bindaddr != NULL && !found) { + BIO_printf(bio_err, "Can't bind %saddress for %s%s%s\n", + BIO_ADDRINFO_family(res) == AF_INET6 ? "IPv6 " : + BIO_ADDRINFO_family(res) == AF_INET ? "IPv4 " : + BIO_ADDRINFO_family(res) == AF_UNIX ? "unix " : "", + bindhost != NULL ? bindhost : "", + bindport != NULL ? ":" : "", + bindport != NULL ? bindport : ""); + ERR_clear_error(); + ret = 0; + } ERR_print_errors(bio_err); } else { /* Remove any stale errors from previous connection attempts */ ERR_clear_error(); ret = 1; } +out: + if (bindaddr != NULL) { + BIO_ADDRINFO_free (bindaddr); + } BIO_ADDRINFO_free(res); return ret; } @@ -129,7 +203,7 @@ int init_client(int *sock, const char *host, const char *port, * 0 on failure, something other on success. */ int do_server(int *accept_sock, const char *host, const char *port, - int family, int type, do_server_cb cb, + int family, int type, int protocol, do_server_cb cb, unsigned char *context, int naccept) { int asock = 0; @@ -142,10 +216,11 @@ int do_server(int *accept_sock, const char *host, const char *port, int sock_options = BIO_SOCK_REUSEADDR; int ret = 0; - if (!BIO_sock_init()) + if (BIO_sock_init() != 1) return 0; - if (!BIO_lookup(host, port, BIO_LOOKUP_SERVER, family, type, &res)) { + if (!BIO_lookup_ex(host, port, BIO_LOOKUP_SERVER, family, type, protocol, + &res)) { ERR_print_errors(bio_err); return 0; } @@ -153,7 +228,8 @@ int do_server(int *accept_sock, const char *host, const char *port, /* Admittedly, these checks are quite paranoid, we should not get * anything in the BIO_ADDRINFO chain that we haven't asked for */ OPENSSL_assert((family == AF_UNSPEC || family == BIO_ADDRINFO_family(res)) - && (type == 0 || type == BIO_ADDRINFO_socktype(res))); + && (type == 0 || type == BIO_ADDRINFO_socktype(res)) + && (protocol == 0 || protocol == BIO_ADDRINFO_protocol(res))); sock_family = BIO_ADDRINFO_family(res); sock_type = BIO_ADDRINFO_socktype(res); @@ -185,6 +261,25 @@ int do_server(int *accept_sock, const char *host, const char *port, goto end; } +#ifndef OPENSSL_NO_SCTP + if (protocol == IPPROTO_SCTP) { + /* + * For SCTP we have to set various options on the socket prior to + * accepting. This is done automatically by BIO_new_dgram_sctp(). + * We don't actually need the created BIO though so we free it again + * immediately. + */ + BIO *tmpbio = BIO_new_dgram_sctp(asock, BIO_NOCLOSE); + + if (tmpbio == NULL) { + BIO_closesocket(asock); + ERR_print_errors(bio_err); + goto end; + } + BIO_free(tmpbio); + } +#endif + BIO_ADDRINFO_free(res); res = NULL; @@ -192,15 +287,22 @@ int do_server(int *accept_sock, const char *host, const char *port, *accept_sock = asock; for (;;) { if (type == SOCK_STREAM) { + BIO_ADDR_free(ourpeer); + ourpeer = BIO_ADDR_new(); + if (ourpeer == NULL) { + BIO_closesocket(asock); + ERR_print_errors(bio_err); + goto end; + } do { - sock = BIO_accept_ex(asock, NULL, 0); + sock = BIO_accept_ex(asock, ourpeer, 0); } while (sock < 0 && BIO_sock_should_retry(sock)); if (sock < 0) { ERR_print_errors(bio_err); BIO_closesocket(asock); break; } - i = (*cb)(sock, type, context); + i = (*cb)(sock, type, protocol, context); /* * Give the socket time to send its last data before we close it. @@ -228,7 +330,7 @@ int do_server(int *accept_sock, const char *host, const char *port, shutdown(sock, 1); /* SHUT_WR */ BIO_closesocket(sock); } else { - i = (*cb)(asock, type, context); + i = (*cb)(asock, type, protocol, context); } if (naccept != -1) @@ -244,6 +346,8 @@ int do_server(int *accept_sock, const char *host, const char *port, if (family == AF_UNIX) unlink(host); # endif + BIO_ADDR_free(ourpeer); + ourpeer = NULL; return ret; } diff --git a/apps/s_time.c b/apps/s_time.c index dc0ec4af..149107c5 100644 --- a/apps/s_time.c +++ b/apps/s_time.c @@ -7,6 +7,8 @@ * https://www.openssl.org/source/license.html */ +#define NO_SHUTDOWN + #include #include #include @@ -15,8 +17,8 @@ #ifndef OPENSSL_NO_SOCK -#define USE_SOCKETS #include "apps.h" +#include "progs.h" #include #include #include @@ -26,29 +28,50 @@ # include OPENSSL_UNISTD #endif +#undef ioctl +#define ioctl ioctlsocket + #define SSL_CONNECT_NAME "localhost:4433" +/* no default cert. */ +/* + * #define TEST_CERT "client.pem" + */ + +#undef min +#undef max +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#define max(a,b) (((a) > (b)) ? (a) : (b)) + +#undef SECONDS #define SECONDS 30 #define SECONDSSTR "30" static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx); +/* + * Define a HTTP get command globally. + * Also define the size of the command, this is two bytes less than + * the size of the string because the %s is replaced by the URL. + */ static const char fmt_http_get_cmd[] = "GET %s HTTP/1.0\r\n\r\n"; +static const size_t fmt_http_get_cmd_size = sizeof(fmt_http_get_cmd) - 2; typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_CONNECT, OPT_CIPHER, OPT_CERT, OPT_KEY, OPT_CAPATH, + OPT_CONNECT, OPT_CIPHER, OPT_CERT, OPT_NAMEOPT, OPT_KEY, OPT_CAPATH, OPT_CAFILE, OPT_NOCAPATH, OPT_NOCAFILE, OPT_NEW, OPT_REUSE, OPT_BUGS, OPT_VERIFY, OPT_TIME, OPT_SSL3, OPT_WWW } OPTION_CHOICE; -OPTIONS s_time_options[] = { +const OPTIONS s_time_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"connect", OPT_CONNECT, 's', "Where to connect as post:port (default is " SSL_CONNECT_NAME ")"}, {"cipher", OPT_CIPHER, 's', "Cipher to use, see 'openssl ciphers'"}, {"cert", OPT_CERT, '<', "Cert file to use, PEM format assumed"}, + {"nameopt", OPT_NAMEOPT, 's', "Various certificate name options"}, {"key", OPT_KEY, '<', "File with key, PEM; default is -cert file"}, {"CApath", OPT_CAPATH, '/', "PEM format directory of CA's"}, {"cafile", OPT_CAFILE, '<', "PEM format file of CA's"}, @@ -125,6 +148,10 @@ int s_time_main(int argc, char **argv) case OPT_CERT: certfile = opt_arg(); break; + case OPT_NAMEOPT: + if (!set_nameopt(opt_arg())) + goto end; + break; case OPT_KEY: keyfile = opt_arg(); break; @@ -152,7 +179,7 @@ int s_time_main(int argc, char **argv) break; case OPT_WWW: www_path = opt_arg(); - buf_size = strlen(www_path) + sizeof(fmt_http_get_cmd) - 2; /* 2 is for %s */ + buf_size = strlen(www_path) + fmt_http_get_cmd_size; if (buf_size > sizeof(buf)) { BIO_printf(bio_err, "%s: -www option is too long\n", prog); goto end; @@ -169,20 +196,21 @@ int s_time_main(int argc, char **argv) if (cipher == NULL) cipher = getenv("SSL_CIPHER"); - if (cipher == NULL) + if (cipher == NULL) { BIO_printf(bio_err, "No CIPHER specified\n"); + goto end; + } if ((ctx = SSL_CTX_new(meth)) == NULL) goto end; - SSL_CTX_set_mode(ctx, SSL_MODE_AUTO_RETRY); SSL_CTX_set_quiet_shutdown(ctx, 1); if (SSL_CTX_set_max_proto_version(ctx, max_version) == 0) goto end; if (st_bugs) SSL_CTX_set_options(ctx, SSL_OP_ALL); - if (cipher != NULL && !SSL_CTX_set_cipher_list(ctx, cipher)) + if (!SSL_CTX_set_cipher_list(ctx, cipher)) goto end; if (!set_cert_stuff(ctx, certfile, keyfile)) goto end; @@ -208,20 +236,26 @@ int s_time_main(int argc, char **argv) goto end; if (www_path != NULL) { - buf_len = BIO_snprintf(buf, sizeof(buf), - fmt_http_get_cmd, www_path); - if (SSL_write(scon, buf, buf_len) <= 0) + buf_len = BIO_snprintf(buf, sizeof(buf), fmt_http_get_cmd, + www_path); + if (buf_len <= 0 || SSL_write(scon, buf, buf_len) <= 0) goto end; - while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) - bytes_read += i; + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0 || + SSL_get_error(scon, i) == SSL_ERROR_WANT_READ || + SSL_get_error(scon, i) == SSL_ERROR_WANT_WRITE) + if (i > 0) bytes_read += i; } +#ifdef NO_SHUTDOWN SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); +#else + SSL_shutdown(scon); +#endif BIO_closesocket(SSL_get_fd(scon)); nConn += 1; - if (SSL_session_reused(scon)) + if (SSL_session_reused(scon)) { ver = 'r'; - else { + } else { ver = SSL_version(scon); if (ver == TLS1_VERSION) ver = 't'; @@ -262,14 +296,19 @@ int s_time_main(int argc, char **argv) } if (www_path != NULL) { - buf_len = BIO_snprintf(buf, sizeof(buf), - fmt_http_get_cmd, www_path); - if (SSL_write(scon, buf, buf_len) <= 0) + buf_len = BIO_snprintf(buf, sizeof(buf), fmt_http_get_cmd, www_path); + if (buf_len <= 0 || SSL_write(scon, buf, buf_len) <= 0) goto end; - while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0 || + SSL_get_error(scon, i) == SSL_ERROR_WANT_READ || + SSL_get_error(scon, i) == SSL_ERROR_WANT_WRITE) continue; } +#ifdef NO_SHUTDOWN SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); +#else + SSL_shutdown(scon); +#endif BIO_closesocket(SSL_get_fd(scon)); nConn = 0; @@ -288,21 +327,27 @@ int s_time_main(int argc, char **argv) if ((doConnection(scon, host, ctx)) == NULL) goto end; - if (www_path) { - BIO_snprintf(buf, sizeof(buf), "GET %s HTTP/1.0\r\n\r\n", - www_path); - if (SSL_write(scon, buf, strlen(buf)) <= 0) + if (www_path != NULL) { + buf_len = BIO_snprintf(buf, sizeof(buf), fmt_http_get_cmd, + www_path); + if (buf_len <= 0 || SSL_write(scon, buf, buf_len) <= 0) goto end; - while ((i = SSL_read(scon, buf, sizeof(buf))) > 0) - bytes_read += i; + while ((i = SSL_read(scon, buf, sizeof(buf))) > 0 || + SSL_get_error(scon, i) == SSL_ERROR_WANT_READ || + SSL_get_error(scon, i) == SSL_ERROR_WANT_WRITE) + if (i > 0) bytes_read += i; } +#ifdef NO_SHUTDOWN SSL_set_shutdown(scon, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN); +#else + SSL_shutdown(scon); +#endif BIO_closesocket(SSL_get_fd(scon)); nConn += 1; - if (SSL_session_reused(scon)) + if (SSL_session_reused(scon)) { ver = 'r'; - else { + } else { ver = SSL_version(scon); if (ver == TLS1_VERSION) ver = 't'; @@ -328,7 +373,7 @@ int s_time_main(int argc, char **argv) end: SSL_free(scon); SSL_CTX_free(ctx); - return (ret); + return ret; } /*- @@ -338,13 +383,13 @@ static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx) { BIO *conn; SSL *serverCon; - int i; + int width, i; + fd_set readfds; if ((conn = BIO_new(BIO_s_connect())) == NULL) return NULL; BIO_set_conn_hostname(conn, host); - BIO_set_conn_mode(conn, BIO_SOCK_NODELAY); if (scon == NULL) serverCon = SSL_new(ctx); @@ -356,7 +401,26 @@ static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx) SSL_set_bio(serverCon, conn, conn); /* ok, lets connect */ - i = SSL_connect(serverCon); + for (;;) { + i = SSL_connect(serverCon); + if (BIO_sock_should_retry(i)) { + BIO_printf(bio_err, "DELAY\n"); + + i = SSL_get_fd(serverCon); + width = i + 1; + FD_ZERO(&readfds); + openssl_fdset(i, &readfds); + /* + * Note: under VMS with SOCKETSHR the 2nd parameter is currently + * of type (int *) whereas under other systems it is (void *) if + * you don't have a cast it will choke the compiler: if you do + * have a cast then you can either go for (int *) or (void *). + */ + select(width, (void *)&readfds, NULL, NULL, NULL); + continue; + } + break; + } if (i <= 0) { BIO_printf(bio_err, "ERROR\n"); if (verify_args.error != X509_V_OK) @@ -369,17 +433,6 @@ static SSL *doConnection(SSL *scon, const char *host, SSL_CTX *ctx) return NULL; } -#if defined(SOL_SOCKET) && defined(SO_LINGER) - { - struct linger no_linger; - - no_linger.l_onoff = 1; - no_linger.l_linger = 0; - (void) setsockopt(SSL_get_fd(serverCon), SOL_SOCKET, SO_LINGER, - (char*)&no_linger, sizeof(no_linger)); - } -#endif - return serverCon; } #endif /* OPENSSL_NO_SOCK */ diff --git a/apps/sess_id.c b/apps/sess_id.c index 2b63e69c..70966de3 100644 --- a/apps/sess_id.c +++ b/apps/sess_id.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -23,7 +24,7 @@ typedef enum OPTION_choice { OPT_TEXT, OPT_CERT, OPT_NOOUT, OPT_CONTEXT } OPTION_CHOICE; -OPTIONS sess_id_options[] = { +const OPTIONS sess_id_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'F', "Input format - default PEM (DER or PEM)"}, {"outform", OPT_OUTFORM, 'f', @@ -100,14 +101,14 @@ int sess_id_main(int argc, char **argv) } peer = SSL_SESSION_get0_peer(x); - if (context) { + if (context != NULL) { size_t ctx_len = strlen(context); if (ctx_len > SSL_MAX_SID_CTX_LENGTH) { BIO_printf(bio_err, "Context too long\n"); goto end; } if (!SSL_SESSION_set1_id_context(x, (unsigned char *)context, - ctx_len)) { + ctx_len)) { BIO_printf(bio_err, "Error setting id context\n"); goto end; } @@ -131,13 +132,13 @@ int sess_id_main(int argc, char **argv) } if (!noout && !cert) { - if (outformat == FORMAT_ASN1) + if (outformat == FORMAT_ASN1) { i = i2d_SSL_SESSION_bio(out, x); - else if (outformat == FORMAT_PEM) + } else if (outformat == FORMAT_PEM) { i = PEM_write_bio_SSL_SESSION(out, x); - else if (outformat == FORMAT_NSS) + } else if (outformat == FORMAT_NSS) { i = SSL_SESSION_print_keylog(out, x); - else { + } else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } @@ -146,11 +147,11 @@ int sess_id_main(int argc, char **argv) goto end; } } else if (!noout && (peer != NULL)) { /* just print the certificate */ - if (outformat == FORMAT_ASN1) + if (outformat == FORMAT_ASN1) { i = (int)i2d_X509_bio(out, peer); - else if (outformat == FORMAT_PEM) + } else if (outformat == FORMAT_PEM) { i = PEM_write_bio_X509(out, peer); - else { + } else { BIO_printf(bio_err, "bad output format specified for outfile\n"); goto end; } @@ -163,7 +164,7 @@ int sess_id_main(int argc, char **argv) end: BIO_free_all(out); SSL_SESSION_free(x); - return (ret); + return ret; } static SSL_SESSION *load_sess_id(char *infile, int format) @@ -186,5 +187,5 @@ static SSL_SESSION *load_sess_id(char *infile, int format) end: BIO_free(in); - return (x); + return x; } diff --git a/apps/smime.c b/apps/smime.c index e18d7de7..6fd47377 100644 --- a/apps/smime.c +++ b/apps/smime.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,6 +12,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -37,15 +38,16 @@ typedef enum OPTION_choice { OPT_PK7OUT, OPT_TEXT, OPT_NOINTERN, OPT_NOVERIFY, OPT_NOCHAIN, OPT_NOCERTS, OPT_NOATTR, OPT_NODETACH, OPT_NOSMIMECAP, OPT_BINARY, OPT_NOSIGS, OPT_STREAM, OPT_INDEF, OPT_NOINDEF, - OPT_CRLFEOL, OPT_RAND, OPT_ENGINE, OPT_PASSIN, + OPT_CRLFEOL, OPT_ENGINE, OPT_PASSIN, OPT_TO, OPT_FROM, OPT_SUBJECT, OPT_SIGNER, OPT_RECIP, OPT_MD, OPT_CIPHER, OPT_INKEY, OPT_KEYFORM, OPT_CERTFILE, OPT_CAFILE, + OPT_R_ENUM, OPT_V_ENUM, OPT_CAPATH, OPT_NOCAFILE, OPT_NOCAPATH, OPT_IN, OPT_INFORM, OPT_OUT, OPT_OUTFORM, OPT_CONTENT } OPTION_CHOICE; -OPTIONS smime_options[] = { +const OPTIONS smime_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] cert.pem...\n"}, {OPT_HELP_STR, 1, '-', " cert.pem... recipient certs for encryption\n"}, @@ -89,15 +91,14 @@ OPTIONS smime_options[] = { {"no-CApath", OPT_NOCAPATH, '-', "Do not load certificates from the default certificates directory"}, {"resign", OPT_RESIGN, '-', "Resign a signed message"}, - {"nochain", OPT_NOCHAIN, '-', + {"nochain", OPT_NOCHAIN, '-', "set PKCS7_NOCHAIN so certificates contained in the message are not used as untrusted CAs" }, {"nosmimecap", OPT_NOSMIMECAP, '-', "Omit the SMIMECapabilities attribute"}, {"stream", OPT_STREAM, '-', "Enable CMS streaming" }, {"indef", OPT_INDEF, '-', "Same as -stream" }, {"noindef", OPT_NOINDEF, '-', "Disable CMS streaming"}, {"crlfeol", OPT_CRLFEOL, '-', "Use CRLF as EOL termination instead of CR only"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, {"md", OPT_MD, 's', "Digest algorithm to use when signing or resigning"}, {"", OPT_CIPHER, '-', "Any supported cipher"}, @@ -121,15 +122,12 @@ int smime_main(int argc, char **argv) const EVP_CIPHER *cipher = NULL; const EVP_MD *sign_md = NULL; const char *CAfile = NULL, *CApath = NULL, *prog = NULL; - char *certfile = NULL, *keyfile = NULL, *contfile = NULL, *inrand = NULL; - char *infile = NULL, *outfile = NULL, *signerfile = NULL, *recipfile = - NULL; - char *passinarg = NULL, *passin = NULL, *to = NULL, *from = - NULL, *subject = NULL; + char *certfile = NULL, *keyfile = NULL, *contfile = NULL; + char *infile = NULL, *outfile = NULL, *signerfile = NULL, *recipfile = NULL; + char *passinarg = NULL, *passin = NULL, *to = NULL, *from = NULL, *subject = NULL; OPTION_CHOICE o; int noCApath = 0, noCAfile = 0; - int flags = PKCS7_DETACHED, operation = 0, ret = 0, need_rand = 0, indef = - 0; + int flags = PKCS7_DETACHED, operation = 0, ret = 0, indef = 0; int informat = FORMAT_SMIME, outformat = FORMAT_SMIME, keyform = FORMAT_PEM; int vpmtouched = 0, rv = 0; @@ -224,9 +222,9 @@ int smime_main(int argc, char **argv) flags |= PKCS7_CRLFEOL; mime_eol = "\r\n"; break; - case OPT_RAND: - inrand = opt_arg(); - need_rand = 1; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_ENGINE: e = setup_engine(opt_arg(), 0); @@ -245,7 +243,7 @@ int smime_main(int argc, char **argv) break; case OPT_SIGNER: /* If previous -signer argument add signer to list */ - if (signerfile) { + if (signerfile != NULL) { if (sksigners == NULL && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) goto end; @@ -273,7 +271,7 @@ int smime_main(int argc, char **argv) break; case OPT_INKEY: /* If previous -inkey argument add signer to list */ - if (keyfile) { + if (keyfile != NULL) { if (signerfile == NULL) { BIO_printf(bio_err, "%s: Must have -signer before -inkey\n", prog); @@ -323,7 +321,7 @@ int smime_main(int argc, char **argv) argc = opt_num_rest(); argv = opt_rest(); - if (!(operation & SMIME_SIGNERS) && (skkeys || sksigners)) { + if (!(operation & SMIME_SIGNERS) && (skkeys != NULL || sksigners != NULL)) { BIO_puts(bio_err, "Multiple signers or keys not allowed\n"); goto opthelp; } @@ -334,8 +332,8 @@ int smime_main(int argc, char **argv) BIO_puts(bio_err, "Illegal -inkey without -signer\n"); goto opthelp; } - if (signerfile) { - if (!sksigners + if (signerfile != NULL) { + if (sksigners == NULL && (sksigners = sk_OPENSSL_STRING_new_null()) == NULL) goto end; sk_OPENSSL_STRING_push(sksigners, signerfile); @@ -345,15 +343,14 @@ int smime_main(int argc, char **argv) keyfile = signerfile; sk_OPENSSL_STRING_push(skkeys, keyfile); } - if (!sksigners) { + if (sksigners == NULL) { BIO_printf(bio_err, "No signer certificate specified\n"); goto opthelp; } signerfile = NULL; keyfile = NULL; - need_rand = 1; } else if (operation == SMIME_DECRYPT) { - if (!recipfile && !keyfile) { + if (recipfile == NULL && keyfile == NULL) { BIO_printf(bio_err, "No recipient certificate or key specified\n"); goto opthelp; @@ -363,22 +360,15 @@ int smime_main(int argc, char **argv) BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n"); goto opthelp; } - need_rand = 1; - } else if (!operation) + } else if (!operation) { goto opthelp; + } if (!app_passwd(passinarg, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); goto end; } - if (need_rand) { - app_RAND_load_file(NULL, (inrand != NULL)); - if (inrand != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(inrand)); - } - ret = 2; if (!(operation & SMIME_SIGNERS)) @@ -395,7 +385,7 @@ int smime_main(int argc, char **argv) } if (operation == SMIME_ENCRYPT) { - if (!cipher) { + if (cipher == NULL) { #ifndef OPENSSL_NO_DES cipher = EVP_des_ede3_cbc(); #else @@ -404,9 +394,9 @@ int smime_main(int argc, char **argv) #endif } encerts = sk_X509_new_null(); - if (!encerts) + if (encerts == NULL) goto end; - while (*argv) { + while (*argv != NULL) { cert = load_cert(*argv, FORMAT_PEM, "recipient certificate file"); if (cert == NULL) @@ -417,7 +407,7 @@ int smime_main(int argc, char **argv) } } - if (certfile) { + if (certfile != NULL) { if (!load_certs(certfile, &other, FORMAT_PEM, NULL, "certificate file")) { ERR_print_errors(bio_err); @@ -425,7 +415,7 @@ int smime_main(int argc, char **argv) } } - if (recipfile && (operation == SMIME_DECRYPT)) { + if (recipfile != NULL && (operation == SMIME_DECRYPT)) { if ((recip = load_cert(recipfile, FORMAT_PEM, "recipient certificate file")) == NULL) { ERR_print_errors(bio_err); @@ -434,17 +424,18 @@ int smime_main(int argc, char **argv) } if (operation == SMIME_DECRYPT) { - if (!keyfile) + if (keyfile == NULL) keyfile = recipfile; } else if (operation == SMIME_SIGN) { - if (!keyfile) + if (keyfile == NULL) keyfile = signerfile; - } else + } else { keyfile = NULL; + } - if (keyfile) { + if (keyfile != NULL) { key = load_key(keyfile, keyform, 0, passin, e, "signing key file"); - if (!key) + if (key == NULL) goto end; } @@ -453,22 +444,22 @@ int smime_main(int argc, char **argv) goto end; if (operation & SMIME_IP) { - if (informat == FORMAT_SMIME) + if (informat == FORMAT_SMIME) { p7 = SMIME_read_PKCS7(in, &indata); - else if (informat == FORMAT_PEM) + } else if (informat == FORMAT_PEM) { p7 = PEM_read_bio_PKCS7(in, NULL, NULL, NULL); - else if (informat == FORMAT_ASN1) + } else if (informat == FORMAT_ASN1) { p7 = d2i_PKCS7_bio(in, NULL); - else { + } else { BIO_printf(bio_err, "Bad input format for PKCS#7 file\n"); goto end; } - if (!p7) { + if (p7 == NULL) { BIO_printf(bio_err, "Error reading S/MIME message\n"); goto end; } - if (contfile) { + if (contfile != NULL) { BIO_free(indata); if ((indata = BIO_new_file(contfile, "rb")) == NULL) { BIO_printf(bio_err, "Can't read content file %s\n", contfile); @@ -505,11 +496,12 @@ int smime_main(int argc, char **argv) if (flags & PKCS7_DETACHED) { if (outformat == FORMAT_SMIME) flags |= PKCS7_STREAM; - } else if (indef) + } else if (indef) { flags |= PKCS7_STREAM; + } flags |= PKCS7_PARTIAL; p7 = PKCS7_sign(NULL, NULL, other, in, flags); - if (!p7) + if (p7 == NULL) goto end; if (flags & PKCS7_NOCERTS) { for (i = 0; i < sk_X509_num(other); i++) { @@ -517,17 +509,18 @@ int smime_main(int argc, char **argv) PKCS7_add_certificate(p7, x); } } - } else + } else { flags |= PKCS7_REUSE_DIGEST; + } for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) { signerfile = sk_OPENSSL_STRING_value(sksigners, i); keyfile = sk_OPENSSL_STRING_value(skkeys, i); signer = load_cert(signerfile, FORMAT_PEM, "signer certificate"); - if (!signer) + if (signer == NULL) goto end; key = load_key(keyfile, keyform, 0, passin, e, "signing key file"); - if (!key) + if (key == NULL) goto end; if (!PKCS7_sign_add_signer(p7, signer, key, sign_md, flags)) goto end; @@ -543,7 +536,7 @@ int smime_main(int argc, char **argv) } } - if (!p7) { + if (p7 == NULL) { BIO_printf(bio_err, "Error creating PKCS#7 structure\n"); goto end; } @@ -569,9 +562,9 @@ int smime_main(int argc, char **argv) goto end; } sk_X509_free(signers); - } else if (operation == SMIME_PK7OUT) + } else if (operation == SMIME_PK7OUT) { PEM_write_bio_PKCS7(out, p7); - else { + } else { if (to) BIO_printf(out, "To: %s%s", to, mime_eol); if (from) @@ -583,11 +576,11 @@ int smime_main(int argc, char **argv) rv = SMIME_write_PKCS7(out, p7, indata, flags); else rv = SMIME_write_PKCS7(out, p7, in, flags); - } else if (outformat == FORMAT_PEM) + } else if (outformat == FORMAT_PEM) { rv = PEM_write_bio_PKCS7_stream(out, p7, in, flags); - else if (outformat == FORMAT_ASN1) + } else if (outformat == FORMAT_ASN1) { rv = i2d_PKCS7_bio_stream(out, p7, in, flags); - else { + } else { BIO_printf(bio_err, "Bad output format for PKCS#7 file\n"); goto end; } @@ -599,8 +592,6 @@ int smime_main(int argc, char **argv) } ret = 0; end: - if (need_rand) - app_RAND_write_file(NULL); if (ret) ERR_print_errors(bio_err); sk_X509_pop_free(encerts, X509_free); @@ -619,17 +610,18 @@ int smime_main(int argc, char **argv) BIO_free(indata); BIO_free_all(out); OPENSSL_free(passin); - return (ret); + return ret; } static int save_certs(char *signerfile, STACK_OF(X509) *signers) { int i; BIO *tmp; - if (!signerfile) + + if (signerfile == NULL) return 1; tmp = BIO_new_file(signerfile, "w"); - if (!tmp) + if (tmp == NULL) return 0; for (i = 0; i < sk_X509_num(signers); i++) PEM_write_bio_X509(tmp, sk_X509_value(signers, i)); @@ -652,5 +644,4 @@ static int smime_cb(int ok, X509_STORE_CTX *ctx) policies_print(ctx); return ok; - } diff --git a/apps/speed.c b/apps/speed.c index b0a7b6ec..c59f266f 100644 --- a/apps/speed.c +++ b/apps/speed.c @@ -1,5 +1,6 @@ /* * 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 @@ -7,23 +8,8 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The ECDH and ECDSA speed test software is originally written by - * Sumit Gupta of Sun Microsystems Laboratories. - * - */ - #undef SECONDS #define SECONDS 3 -#define PRIME_SECONDS 10 #define RSA_SECONDS 10 #define DSA_SECONDS 10 #define ECDSA_SECONDS 10 @@ -34,6 +20,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -125,13 +112,9 @@ # define NO_FORK #endif -#undef BUFSIZE -#define BUFSIZE (1024*16+1) #define MAX_MISALIGNMENT 63 -#define ALGOR_NUM 30 -#define SIZE_NUM 6 -#define PRIME_NUM 3 +#define ALGOR_NUM 31 #define RSA_NUM 7 #define DSA_NUM 3 @@ -139,14 +122,19 @@ #define MAX_ECDH_SIZE 256 #define MISALIGN 64 +typedef struct openssl_speed_sec_st { + int sym; + int rsa; + int dsa; + int ecdsa; + int ecdh; +} openssl_speed_sec_t; + static volatile int run = 0; static int mr = 0; static int usertime = 1; -typedef void *(*kdf_fn) ( - const void *in, size_t inlen, void *out, size_t *xoutlen); - typedef struct loopargs_st { ASYNC_JOB *inprogress_job; ASYNC_WAIT_CTX *wait_ctx; @@ -154,6 +142,7 @@ typedef struct loopargs_st { unsigned char *buf2; unsigned char *buf_malloc; unsigned char *buf2_malloc; + unsigned char *key; unsigned int siglen; #ifndef OPENSSL_NO_RSA RSA *rsa_key[RSA_NUM]; @@ -163,12 +152,10 @@ typedef struct loopargs_st { #endif #ifndef OPENSSL_NO_EC EC_KEY *ecdsa[EC_NUM]; - EC_KEY *ecdh_a[EC_NUM]; - EC_KEY *ecdh_b[EC_NUM]; + EVP_PKEY_CTX *ecdh_ctx[EC_NUM]; unsigned char *secret_a; unsigned char *secret_b; - size_t outlen; - kdf_fn kdf; + size_t outlen[EC_NUM]; #endif EVP_CIPHER_CTX *ctx; HMAC_CTX *hctx; @@ -212,7 +199,9 @@ static int AES_cbc_256_encrypt_loop(void *args); static int AES_ige_192_encrypt_loop(void *args); static int AES_ige_256_encrypt_loop(void *args); static int CRYPTO_gcm128_aad_loop(void *args); +static int RAND_bytes_loop(void *args); static int EVP_Update_loop(void *args); +static int EVP_Update_loop_ccm(void *args); static int EVP_Digest_loop(void *args); #ifndef OPENSSL_NO_RSA static int RSA_sign_loop(void *args); @@ -225,19 +214,26 @@ static int DSA_verify_loop(void *args); #ifndef OPENSSL_NO_EC static int ECDSA_sign_loop(void *args); static int ECDSA_verify_loop(void *args); -static int ECDH_compute_key_loop(void *args); #endif -static int run_benchmark(int async_jobs, int (*loop_function)(void *), loopargs_t *loopargs); +static int run_benchmark(int async_jobs, int (*loop_function) (void *), + loopargs_t * loopargs); static double Time_F(int s); -static void print_message(const char *s, long num, int length); +static void print_message(const char *s, long num, int length, int tm); static void pkey_print_message(const char *str, const char *str2, long num, int bits, int sec); static void print_result(int alg, int run_no, int count, double time_used); #ifndef NO_FORK -static int do_multi(int multi); +static int do_multi(int multi, int size_num); #endif +static const int lengths_list[] = { + 16, 64, 256, 1024, 8 * 1024, 16 * 1024 +}; +static int lengths_single = 0; + +static const int *lengths = lengths_list; + static const char *names[ALGOR_NUM] = { "md2", "mdc2", "md4", "md5", "hmac(md5)", "sha1", "rmd160", "rc4", "des cbc", "des ede3", "idea cbc", "seed cbc", @@ -245,14 +241,11 @@ static const char *names[ALGOR_NUM] = { "aes-128 cbc", "aes-192 cbc", "aes-256 cbc", "camellia-128 cbc", "camellia-192 cbc", "camellia-256 cbc", "evp", "sha256", "sha512", "whirlpool", - "aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash" + "aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash", + "rand" }; -static double results[ALGOR_NUM][SIZE_NUM]; - -static const int lengths[SIZE_NUM] = { - 16, 64, 256, 1024, 8 * 1024, 16 * 1024 -}; +static double results[ALGOR_NUM][OSSL_NELEM(lengths_list)]; #ifndef OPENSSL_NO_RSA static double rsa_results[RSA_NUM][2]; @@ -265,11 +258,6 @@ static double ecdsa_results[EC_NUM][2]; static double ecdh_results[EC_NUM][1]; #endif -#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_EC) -static const char rnd_seed[] = - "string to make the random number generator think it has entropy"; -#endif - #ifdef SIGALRM # if defined(__STDC__) || defined(sgi) || defined(_AIX) # define SIGRETTYPE void @@ -346,7 +334,8 @@ static double Time_F(int s) } #endif -static void multiblock_speed(const EVP_CIPHER *evp_cipher); +static void multiblock_speed(const EVP_CIPHER *evp_cipher, + const openssl_speed_sec_t *seconds); static int found(const char *name, const OPT_PAIR *pairs, int *result) { @@ -361,10 +350,11 @@ static int found(const char *name, const OPT_PAIR *pairs, int *result) typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ELAPSED, OPT_EVP, OPT_DECRYPT, OPT_ENGINE, OPT_MULTI, - OPT_MR, OPT_MB, OPT_MISALIGN, OPT_ASYNCJOBS + OPT_MR, OPT_MB, OPT_MISALIGN, OPT_ASYNCJOBS, OPT_R_ENUM, + OPT_PRIMES, OPT_SECONDS, OPT_BYTES } OPTION_CHOICE; -OPTIONS speed_options[] = { +const OPTIONS speed_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] ciphers...\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {"help", OPT_HELP, '-', "Display this summary"}, @@ -384,9 +374,15 @@ OPTIONS speed_options[] = { {"async_jobs", OPT_ASYNCJOBS, 'p', "Enable async mode and start pnum jobs"}, #endif + OPT_R_OPTIONS, #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, #endif + {"primes", OPT_PRIMES, 'p', "Specify number of primes (for RSA only)"}, + {"seconds", OPT_SECONDS, 'p', + "Run benchmarks for pnum seconds"}, + {"bytes", OPT_BYTES, 'p', + "Run cipher, digest and rand benchmarks on pnum bytes"}, {NULL}, }; @@ -420,6 +416,7 @@ OPTIONS speed_options[] = { #define D_IGE_192_AES 27 #define D_IGE_256_AES 28 #define D_GHASH 29 +#define D_RAND 30 static OPT_PAIR doit_choices[] = { #ifndef OPENSSL_NO_MD2 {"md2", D_MD2}, @@ -485,6 +482,7 @@ static OPT_PAIR doit_choices[] = { {"cast5", D_CBC_CAST}, #endif {"ghash", D_GHASH}, + {"rand", D_RAND}, {NULL} }; @@ -584,24 +582,24 @@ static OPT_PAIR ecdh_choices[] = { #else # define COND(unused_cond) (run && count<0x7fffffff) # define COUNT(d) (count) -#endif /* SIGALRM */ +#endif /* SIGALRM */ static int testnum; /* Nb of iterations to do per algorithm and key-size */ -static long c[ALGOR_NUM][SIZE_NUM]; +static long c[ALGOR_NUM][OSSL_NELEM(lengths_list)]; #ifndef OPENSSL_NO_MD2 static int EVP_Digest_MD2_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char md2[MD2_DIGEST_LENGTH]; int count; for (count = 0; COND(c[D_MD2][testnum]); count++) { if (!EVP_Digest(buf, (size_t)lengths[testnum], md2, NULL, EVP_md2(), - NULL)) + NULL)) return -1; } return count; @@ -611,14 +609,14 @@ static int EVP_Digest_MD2_loop(void *args) #ifndef OPENSSL_NO_MDC2 static int EVP_Digest_MDC2_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char mdc2[MDC2_DIGEST_LENGTH]; int count; for (count = 0; COND(c[D_MDC2][testnum]); count++) { if (!EVP_Digest(buf, (size_t)lengths[testnum], mdc2, NULL, EVP_mdc2(), - NULL)) + NULL)) return -1; } return count; @@ -628,14 +626,14 @@ static int EVP_Digest_MDC2_loop(void *args) #ifndef OPENSSL_NO_MD4 static int EVP_Digest_MD4_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char md4[MD4_DIGEST_LENGTH]; int count; for (count = 0; COND(c[D_MD4][testnum]); count++) { if (!EVP_Digest(buf, (size_t)lengths[testnum], md4, NULL, EVP_md4(), - NULL)) + NULL)) return -1; } return count; @@ -645,7 +643,7 @@ static int EVP_Digest_MD4_loop(void *args) #ifndef OPENSSL_NO_MD5 static int MD5_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char md5[MD5_DIGEST_LENGTH]; int count; @@ -656,7 +654,7 @@ static int MD5_loop(void *args) static int HMAC_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; HMAC_CTX *hctx = tempargs->hctx; unsigned char hmac[MD5_DIGEST_LENGTH]; @@ -673,7 +671,7 @@ static int HMAC_loop(void *args) static int SHA1_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char sha[SHA_DIGEST_LENGTH]; int count; @@ -684,7 +682,7 @@ static int SHA1_loop(void *args) static int SHA256_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char sha256[SHA256_DIGEST_LENGTH]; int count; @@ -695,7 +693,7 @@ static int SHA256_loop(void *args) static int SHA512_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char sha512[SHA512_DIGEST_LENGTH]; int count; @@ -707,7 +705,7 @@ static int SHA512_loop(void *args) #ifndef OPENSSL_NO_WHIRLPOOL static int WHIRLPOOL_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char whirlpool[WHIRLPOOL_DIGEST_LENGTH]; int count; @@ -720,13 +718,13 @@ static int WHIRLPOOL_loop(void *args) #ifndef OPENSSL_NO_RMD160 static int EVP_Digest_RMD160_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char rmd160[RIPEMD160_DIGEST_LENGTH]; int count; for (count = 0; COND(c[D_RMD160][testnum]); count++) { if (!EVP_Digest(buf, (size_t)lengths[testnum], &(rmd160[0]), - NULL, EVP_ripemd160(), NULL)) + NULL, EVP_ripemd160(), NULL)) return -1; } return count; @@ -737,7 +735,7 @@ static int EVP_Digest_RMD160_loop(void *args) static RC4_KEY rc4_ks; static int RC4_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; int count; for (count = 0; COND(c[D_RC4][testnum]); count++) @@ -753,24 +751,23 @@ static DES_key_schedule sch2; static DES_key_schedule sch3; static int DES_ncbc_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; int count; for (count = 0; COND(c[D_CBC_DES][testnum]); count++) DES_ncbc_encrypt(buf, buf, lengths[testnum], &sch, - &DES_iv, DES_ENCRYPT); + &DES_iv, DES_ENCRYPT); return count; } static int DES_ede3_cbc_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; int count; for (count = 0; COND(c[D_EDE3_DES][testnum]); count++) DES_ede3_cbc_encrypt(buf, buf, lengths[testnum], - &sch, &sch2, &sch3, - &DES_iv, DES_ENCRYPT); + &sch, &sch2, &sch3, &DES_iv, DES_ENCRYPT); return count; } #endif @@ -781,82 +778,76 @@ static unsigned char iv[2 * MAX_BLOCK_SIZE / 8]; static AES_KEY aes_ks1, aes_ks2, aes_ks3; static int AES_cbc_128_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; int count; for (count = 0; COND(c[D_CBC_128_AES][testnum]); count++) AES_cbc_encrypt(buf, buf, - (size_t)lengths[testnum], &aes_ks1, - iv, AES_ENCRYPT); + (size_t)lengths[testnum], &aes_ks1, iv, AES_ENCRYPT); return count; } static int AES_cbc_192_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; int count; for (count = 0; COND(c[D_CBC_192_AES][testnum]); count++) AES_cbc_encrypt(buf, buf, - (size_t)lengths[testnum], &aes_ks2, - iv, AES_ENCRYPT); + (size_t)lengths[testnum], &aes_ks2, iv, AES_ENCRYPT); return count; } static int AES_cbc_256_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; int count; for (count = 0; COND(c[D_CBC_256_AES][testnum]); count++) AES_cbc_encrypt(buf, buf, - (size_t)lengths[testnum], &aes_ks3, - iv, AES_ENCRYPT); + (size_t)lengths[testnum], &aes_ks3, iv, AES_ENCRYPT); return count; } static int AES_ige_128_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; int count; for (count = 0; COND(c[D_IGE_128_AES][testnum]); count++) AES_ige_encrypt(buf, buf2, - (size_t)lengths[testnum], &aes_ks1, - iv, AES_ENCRYPT); + (size_t)lengths[testnum], &aes_ks1, iv, AES_ENCRYPT); return count; } static int AES_ige_192_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; int count; for (count = 0; COND(c[D_IGE_192_AES][testnum]); count++) AES_ige_encrypt(buf, buf2, - (size_t)lengths[testnum], &aes_ks2, - iv, AES_ENCRYPT); + (size_t)lengths[testnum], &aes_ks2, iv, AES_ENCRYPT); return count; } static int AES_ige_256_encrypt_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; int count; for (count = 0; COND(c[D_IGE_256_AES][testnum]); count++) AES_ige_encrypt(buf, buf2, - (size_t)lengths[testnum], &aes_ks3, - iv, AES_ENCRYPT); + (size_t)lengths[testnum], &aes_ks3, iv, AES_ENCRYPT); return count; } static int CRYPTO_gcm128_aad_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; GCM128_CONTEXT *gcm_ctx = tempargs->gcm_ctx; int count; @@ -865,34 +856,85 @@ static int CRYPTO_gcm128_aad_loop(void *args) return count; } +static int RAND_bytes_loop(void *args) +{ + loopargs_t *tempargs = *(loopargs_t **) args; + unsigned char *buf = tempargs->buf; + int count; + + for (count = 0; COND(c[D_RAND][testnum]); count++) + RAND_bytes(buf, lengths[testnum]); + return count; +} + static long save_count = 0; static int decrypt = 0; static int EVP_Update_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; EVP_CIPHER_CTX *ctx = tempargs->ctx; - int outl, count; + int outl, count, rc; #ifndef SIGALRM int nb_iter = save_count * 4 * lengths[0] / lengths[testnum]; #endif - if (decrypt) - for (count = 0; COND(nb_iter); count++) - EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); - else - for (count = 0; COND(nb_iter); count++) - EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + if (decrypt) { + for (count = 0; COND(nb_iter); count++) { + rc = EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + if (rc != 1) + EVP_CipherInit_ex(ctx, NULL, NULL, NULL, iv, -1); + } + } else { + for (count = 0; COND(nb_iter); count++) { + rc = EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + if (rc != 1) + EVP_CipherInit_ex(ctx, NULL, NULL, NULL, iv, -1); + } + } if (decrypt) EVP_DecryptFinal_ex(ctx, buf, &outl); else EVP_EncryptFinal_ex(ctx, buf, &outl); return count; } +/* + * CCM does not support streaming. For the purpose of performance measurement, + * each message is encrypted using the same (key,iv)-pair. Do not use this + * code in your application. + */ +static int EVP_Update_loop_ccm(void *args) +{ + loopargs_t *tempargs = *(loopargs_t **) args; + unsigned char *buf = tempargs->buf; + EVP_CIPHER_CTX *ctx = tempargs->ctx; + int outl, count; + unsigned char tag[12]; +#ifndef SIGALRM + int nb_iter = save_count * 4 * lengths[0] / lengths[testnum]; +#endif + if (decrypt) { + for (count = 0; COND(nb_iter); count++) { + EVP_DecryptInit_ex(ctx, NULL, NULL, NULL, iv); + EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, sizeof(tag), tag); + EVP_DecryptUpdate(ctx, NULL, &outl, NULL, lengths[testnum]); + EVP_DecryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + EVP_DecryptFinal_ex(ctx, buf, &outl); + } + } else { + for (count = 0; COND(nb_iter); count++) { + EVP_EncryptInit_ex(ctx, NULL, NULL, NULL, iv); + EVP_EncryptUpdate(ctx, NULL, &outl, NULL, lengths[testnum]); + EVP_EncryptUpdate(ctx, buf, &outl, buf, lengths[testnum]); + EVP_EncryptFinal_ex(ctx, buf, &outl); + } + } + return count; +} static const EVP_MD *evp_md = NULL; static int EVP_Digest_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char md[EVP_MAX_MD_SIZE]; int count; @@ -912,7 +954,7 @@ static long rsa_c[RSA_NUM][2]; /* # RSA iteration test */ static int RSA_sign_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; unsigned int *rsa_num = &tempargs->siglen; @@ -932,14 +974,15 @@ static int RSA_sign_loop(void *args) static int RSA_verify_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; unsigned int rsa_num = tempargs->siglen; RSA **rsa_key = tempargs->rsa_key; int ret, count; for (count = 0; COND(rsa_c[testnum][1]); count++) { - ret = RSA_verify(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[testnum]); + ret = + RSA_verify(NID_md5_sha1, buf, 36, buf2, rsa_num, rsa_key[testnum]); if (ret <= 0) { BIO_printf(bio_err, "RSA verify failure\n"); ERR_print_errors(bio_err); @@ -955,7 +998,7 @@ static int RSA_verify_loop(void *args) static long dsa_c[DSA_NUM][2]; static int DSA_sign_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; DSA **dsa_key = tempargs->dsa_key; @@ -975,7 +1018,7 @@ static int DSA_sign_loop(void *args) static int DSA_verify_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; unsigned char *buf2 = tempargs->buf2; DSA **dsa_key = tempargs->dsa_key; @@ -998,15 +1041,14 @@ static int DSA_verify_loop(void *args) static long ecdsa_c[EC_NUM][2]; static int ECDSA_sign_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; EC_KEY **ecdsa = tempargs->ecdsa; unsigned char *ecdsasig = tempargs->buf2; unsigned int *ecdsasiglen = &tempargs->siglen; int ret, count; for (count = 0; COND(ecdsa_c[testnum][0]); count++) { - ret = ECDSA_sign(0, buf, 20, - ecdsasig, ecdsasiglen, ecdsa[testnum]); + ret = ECDSA_sign(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[testnum]); if (ret == 0) { BIO_printf(bio_err, "ECDSA sign failure\n"); ERR_print_errors(bio_err); @@ -1019,15 +1061,14 @@ static int ECDSA_sign_loop(void *args) static int ECDSA_verify_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; + loopargs_t *tempargs = *(loopargs_t **) args; unsigned char *buf = tempargs->buf; EC_KEY **ecdsa = tempargs->ecdsa; unsigned char *ecdsasig = tempargs->buf2; unsigned int ecdsasiglen = tempargs->siglen; int ret, count; for (count = 0; COND(ecdsa_c[testnum][1]); count++) { - ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, - ecdsa[testnum]); + ret = ECDSA_verify(0, buf, 20, ecdsasig, ecdsasiglen, ecdsa[testnum]); if (ret != 1) { BIO_printf(bio_err, "ECDSA verify failure\n"); ERR_print_errors(bio_err); @@ -1041,37 +1082,24 @@ static int ECDSA_verify_loop(void *args) /* ******************************************************************** */ static long ecdh_c[EC_NUM][1]; -static int ECDH_compute_key_loop(void *args) +static int ECDH_EVP_derive_key_loop(void *args) { - loopargs_t *tempargs = *(loopargs_t **)args; - EC_KEY **ecdh_a = tempargs->ecdh_a; - EC_KEY **ecdh_b = tempargs->ecdh_b; - unsigned char *secret_a = tempargs->secret_a; + loopargs_t *tempargs = *(loopargs_t **) args; + EVP_PKEY_CTX *ctx = tempargs->ecdh_ctx[testnum]; + unsigned char *derived_secret = tempargs->secret_a; int count; - size_t outlen = tempargs->outlen; - kdf_fn kdf = tempargs->kdf; + size_t *outlen = &(tempargs->outlen[testnum]); + + for (count = 0; COND(ecdh_c[testnum][0]); count++) + EVP_PKEY_derive(ctx, derived_secret, outlen); - for (count = 0; COND(ecdh_c[testnum][0]); count++) { - ECDH_compute_key(secret_a, outlen, - EC_KEY_get0_public_key(ecdh_b[testnum]), - ecdh_a[testnum], kdf); - } return count; } -static const size_t KDF1_SHA1_len = 20; -static void *KDF1_SHA1(const void *in, size_t inlen, void *out, - size_t *outlen) -{ - if (*outlen < SHA_DIGEST_LENGTH) - return NULL; - *outlen = SHA_DIGEST_LENGTH; - return SHA1(in, inlen, out); -} #endif /* OPENSSL_NO_EC */ static int run_benchmark(int async_jobs, - int (*loop_function)(void *), loopargs_t *loopargs) + int (*loop_function) (void *), loopargs_t * loopargs) { int job_op_count = 0; int total_op_count = 0; @@ -1127,14 +1155,16 @@ static int run_benchmark(int async_jobs, if (loopargs[i].inprogress_job == NULL) continue; - if (!ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, NULL, &num_job_fds) - || num_job_fds > 1) { + if (!ASYNC_WAIT_CTX_get_all_fds + (loopargs[i].wait_ctx, NULL, &num_job_fds) + || num_job_fds > 1) { BIO_printf(bio_err, "Too many fds in ASYNC_WAIT_CTX\n"); ERR_print_errors(bio_err); error = 1; break; } - ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, &job_fd, &num_job_fds); + ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, &job_fd, + &num_job_fds); FD_SET(job_fd, &waitfdset); if (job_fd > max_fd) max_fd = job_fd; @@ -1142,9 +1172,9 @@ static int run_benchmark(int async_jobs, if (max_fd >= (OSSL_ASYNC_FD)FD_SETSIZE) { BIO_printf(bio_err, - "Error: max_fd (%d) must be smaller than FD_SETSIZE (%d). " - "Decrease the value of async_jobs\n", - max_fd, FD_SETSIZE); + "Error: max_fd (%d) must be smaller than FD_SETSIZE (%d). " + "Decrease the value of async_jobs\n", + max_fd, FD_SETSIZE); ERR_print_errors(bio_err); error = 1; break; @@ -1169,14 +1199,16 @@ static int run_benchmark(int async_jobs, if (loopargs[i].inprogress_job == NULL) continue; - if (!ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, NULL, &num_job_fds) - || num_job_fds > 1) { + if (!ASYNC_WAIT_CTX_get_all_fds + (loopargs[i].wait_ctx, NULL, &num_job_fds) + || num_job_fds > 1) { BIO_printf(bio_err, "Too many fds in ASYNC_WAIT_CTX\n"); ERR_print_errors(bio_err); error = 1; break; } - ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, &job_fd, &num_job_fds); + ASYNC_WAIT_CTX_get_all_fds(loopargs[i].wait_ctx, &job_fd, + &num_job_fds); #if defined(OPENSSL_SYS_UNIX) if (num_job_fds == 1 && !FD_ISSET(job_fd, &waitfdset)) @@ -1188,9 +1220,10 @@ static int run_benchmark(int async_jobs, continue; #endif - ret = ASYNC_start_job(&loopargs[i].inprogress_job, - loopargs[i].wait_ctx, &job_op_count, loop_function, - (void *)(loopargs + i), sizeof(loopargs_t)); + ret = ASYNC_start_job(&loopargs[i].inprogress_job, + loopargs[i].wait_ctx, &job_op_count, + loop_function, (void *)(loopargs + i), + sizeof(loopargs_t)); switch (ret) { case ASYNC_PAUSE: break; @@ -1221,6 +1254,7 @@ static int run_benchmark(int async_jobs, int speed_main(int argc, char **argv) { ENGINE *e = NULL; + int (*loopfunc)(void *args); loopargs_t *loopargs = NULL; int async_init = 0; int loopargs_len = 0; @@ -1233,6 +1267,9 @@ int speed_main(int argc, char **argv) int doit[ALGOR_NUM] = { 0 }; int ret = 1, i, k, misalign = 0; long count = 0; + int size_num = OSSL_NELEM(lengths_list); + int keylen; + int buflen; #ifndef NO_FORK int multi = 0; #endif @@ -1241,7 +1278,9 @@ int speed_main(int argc, char **argv) || !defined(OPENSSL_NO_EC) long rsa_count = 1; #endif +#ifndef OPENSSL_NO_EC size_t loop; +#endif /* What follows are the buffers and key material. */ #ifndef OPENSSL_NO_RC5 @@ -1316,6 +1355,7 @@ int speed_main(int argc, char **argv) sizeof(test15360) }; int rsa_doit[RSA_NUM] = { 0 }; + int primes = RSA_DEFAULT_PRIME_NUM; #endif #ifndef OPENSSL_NO_DSA static const unsigned int dsa_bits[DSA_NUM] = { 512, 1024, 2048 }; @@ -1357,13 +1397,16 @@ int speed_main(int argc, char **argv) 163, 233, 283, 409, 571, 163, 233, 283, 409, - 571, 253 /* X25519 */ + 571, 253 /* X25519 */ }; int ecdsa_doit[EC_NUM] = { 0 }; int ecdh_doit[EC_NUM] = { 0 }; #endif /* ndef OPENSSL_NO_EC */ + openssl_speed_sec_t seconds = { SECONDS, RSA_SECONDS, DSA_SECONDS, + ECDSA_SECONDS, ECDH_SECONDS }; + prog = opt_init(argc, argv, speed_options); while ((o = opt_next()) != OPT_EOF) { switch (o) { @@ -1446,13 +1489,30 @@ int speed_main(int argc, char **argv) goto end; #endif break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; + case OPT_PRIMES: + if (!opt_int(opt_arg(), &primes)) + goto end; + break; + case OPT_SECONDS: + seconds.sym = seconds.rsa = seconds.dsa = seconds.ecdsa + = seconds.ecdh = atoi(opt_arg()); + break; + case OPT_BYTES: + lengths_single = atoi(opt_arg()); + lengths = &lengths_single; + size_num = 1; + break; } } argc = opt_num_rest(); argv = opt_rest(); /* Remaining arguments are algorithms. */ - for ( ; *argv; argv++) { + for (; *argv; argv++) { if (found(*argv, doit_choices, &i)) { doit[i] = 1; continue; @@ -1494,14 +1554,12 @@ int speed_main(int argc, char **argv) } #endif if (strcmp(*argv, "aes") == 0) { - doit[D_CBC_128_AES] = doit[D_CBC_192_AES] = - doit[D_CBC_256_AES] = 1; + doit[D_CBC_128_AES] = doit[D_CBC_192_AES] = doit[D_CBC_256_AES] = 1; continue; } #ifndef OPENSSL_NO_CAMELLIA if (strcmp(*argv, "camellia") == 0) { - doit[D_CBC_128_CML] = doit[D_CBC_192_CML] = - doit[D_CBC_256_CML] = 1; + doit[D_CBC_128_CML] = doit[D_CBC_192_CML] = doit[D_CBC_256_CML] = 1; continue; } #endif @@ -1539,7 +1597,8 @@ int speed_main(int argc, char **argv) } loopargs_len = (async_jobs == 0 ? 1 : async_jobs); - loopargs = app_malloc(loopargs_len * sizeof(loopargs_t), "array of loopargs"); + loopargs = + app_malloc(loopargs_len * sizeof(loopargs_t), "array of loopargs"); memset(loopargs, 0, loopargs_len * sizeof(loopargs_t)); for (i = 0; i < loopargs_len; i++) { @@ -1551,8 +1610,12 @@ int speed_main(int argc, char **argv) } } - loopargs[i].buf_malloc = app_malloc((int)BUFSIZE + MAX_MISALIGNMENT + 1, "input buffer"); - loopargs[i].buf2_malloc = app_malloc((int)BUFSIZE + MAX_MISALIGNMENT + 1, "input buffer"); + buflen = lengths[size_num - 1] + MAX_MISALIGNMENT + 1; + loopargs[i].buf_malloc = app_malloc(buflen, "input buffer"); + loopargs[i].buf2_malloc = app_malloc(buflen, "input buffer"); + memset(loopargs[i].buf_malloc, 0, buflen); + memset(loopargs[i].buf2_malloc, 0, buflen); + /* Align the start of buffers on a 64 byte boundary */ loopargs[i].buf = loopargs[i].buf_malloc + misalign; loopargs[i].buf2 = loopargs[i].buf2_malloc + misalign; @@ -1563,7 +1626,7 @@ int speed_main(int argc, char **argv) } #ifndef NO_FORK - if (multi && do_multi(multi)) + if (multi && do_multi(multi, size_num)) goto show_res; #endif @@ -1601,14 +1664,19 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_RSA for (i = 0; i < loopargs_len; i++) { + if (primes > RSA_DEFAULT_PRIME_NUM) { + /* for multi-prime RSA, skip this */ + break; + } for (k = 0; k < RSA_NUM; k++) { const unsigned char *p; p = rsa_data[k]; - loopargs[i].rsa_key[k] = d2i_RSAPrivateKey(NULL, &p, rsa_data_length[k]); + loopargs[i].rsa_key[k] = + d2i_RSAPrivateKey(NULL, &p, rsa_data_length[k]); if (loopargs[i].rsa_key[k] == NULL) { - BIO_printf(bio_err, "internal error loading RSA key number %d\n", - k); + BIO_printf(bio_err, + "internal error loading RSA key number %d\n", k); goto end; } } @@ -1616,9 +1684,9 @@ int speed_main(int argc, char **argv) #endif #ifndef OPENSSL_NO_DSA for (i = 0; i < loopargs_len; i++) { - loopargs[i].dsa_key[0] = get_dsa512(); - loopargs[i].dsa_key[1] = get_dsa1024(); - loopargs[i].dsa_key[2] = get_dsa2048(); + loopargs[i].dsa_key[0] = get_dsa(512); + loopargs[i].dsa_key[1] = get_dsa(1024); + loopargs[i].dsa_key[2] = get_dsa(2048); } #endif #ifndef OPENSSL_NO_DES @@ -1698,8 +1766,9 @@ int speed_main(int argc, char **argv) c[D_IGE_192_AES][0] = count; c[D_IGE_256_AES][0] = count; c[D_GHASH][0] = count; + c[D_RAND][0] = count; - for (i = 1; i < SIZE_NUM; i++) { + for (i = 1; i < size_num; i++) { long l0, l1; l0 = (long)lengths[0]; @@ -1716,6 +1785,7 @@ int speed_main(int argc, char **argv) c[D_SHA512][i] = c[D_SHA512][0] * 4 * l0 / l1; c[D_WHIRLPOOL][i] = c[D_WHIRLPOOL][0] * 4 * l0 / l1; c[D_GHASH][i] = c[D_GHASH][0] * 4 * l0 / l1; + c[D_RAND][i] = c[D_RAND][0] * 4 * l0 / l1; l0 = (long)lengths[i - 1]; @@ -1749,7 +1819,7 @@ int speed_main(int argc, char **argv) rsa_doit[i] = 0; else { if (rsa_c[i][0] == 0) { - rsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */ + rsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */ rsa_c[i][1] = 20; } } @@ -1766,7 +1836,7 @@ int speed_main(int argc, char **argv) dsa_doit[i] = 0; else { if (dsa_c[i][0] == 0) { - dsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */ + dsa_c[i][0] = 1; /* Set minimum iteration Nb to 1. */ dsa_c[i][1] = 1; } } @@ -1855,17 +1925,18 @@ int speed_main(int argc, char **argv) # else /* not worth fixing */ # error "You cannot disable DES on systems without SIGALRM." -# endif /* OPENSSL_NO_DES */ +# endif /* OPENSSL_NO_DES */ #else # ifndef _WIN32 signal(SIGALRM, sig_done); # endif -#endif /* SIGALRM */ +#endif /* SIGALRM */ #ifndef OPENSSL_NO_MD2 if (doit[D_MD2]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_MD2], c[D_MD2][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_MD2], c[D_MD2][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, EVP_Digest_MD2_loop, loopargs); d = Time_F(STOP); @@ -1875,8 +1946,9 @@ int speed_main(int argc, char **argv) #endif #ifndef OPENSSL_NO_MDC2 if (doit[D_MDC2]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_MDC2], c[D_MDC2][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_MDC2], c[D_MDC2][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, EVP_Digest_MDC2_loop, loopargs); d = Time_F(STOP); @@ -1887,8 +1959,9 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_MD4 if (doit[D_MD4]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_MD4], c[D_MD4][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_MD4], c[D_MD4][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, EVP_Digest_MD4_loop, loopargs); d = Time_F(STOP); @@ -1899,8 +1972,9 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_MD5 if (doit[D_MD5]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_MD5], c[D_MD5][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_MD5], c[D_MD5][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, MD5_loop, loopargs); d = Time_F(STOP); @@ -1921,8 +1995,9 @@ int speed_main(int argc, char **argv) HMAC_Init_ex(loopargs[i].hctx, hmac_key, len, EVP_md5(), NULL); } - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_HMAC], c[D_HMAC][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_HMAC], c[D_HMAC][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, HMAC_loop, loopargs); d = Time_F(STOP); @@ -1934,8 +2009,9 @@ int speed_main(int argc, char **argv) } #endif if (doit[D_SHA1]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_SHA1], c[D_SHA1][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_SHA1], c[D_SHA1][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, SHA1_loop, loopargs); d = Time_F(STOP); @@ -1943,8 +2019,9 @@ int speed_main(int argc, char **argv) } } if (doit[D_SHA256]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_SHA256], c[D_SHA256][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_SHA256], c[D_SHA256][testnum], + lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, SHA256_loop, loopargs); d = Time_F(STOP); @@ -1952,19 +2029,20 @@ int speed_main(int argc, char **argv) } } if (doit[D_SHA512]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_SHA512], c[D_SHA512][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_SHA512], c[D_SHA512][testnum], + lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, SHA512_loop, loopargs); d = Time_F(STOP); print_result(D_SHA512, testnum, count, d); } } - #ifndef OPENSSL_NO_WHIRLPOOL if (doit[D_WHIRLPOOL]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_WHIRLPOOL], c[D_WHIRLPOOL][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_WHIRLPOOL], c[D_WHIRLPOOL][testnum], + lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, WHIRLPOOL_loop, loopargs); d = Time_F(STOP); @@ -1975,8 +2053,9 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_RMD160 if (doit[D_RMD160]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_RMD160], c[D_RMD160][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_RMD160], c[D_RMD160][testnum], + lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, EVP_Digest_RMD160_loop, loopargs); d = Time_F(STOP); @@ -1986,8 +2065,9 @@ int speed_main(int argc, char **argv) #endif #ifndef OPENSSL_NO_RC4 if (doit[D_RC4]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_RC4], c[D_RC4][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_RC4], c[D_RC4][testnum], lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, RC4_loop, loopargs); d = Time_F(STOP); @@ -1997,8 +2077,9 @@ int speed_main(int argc, char **argv) #endif #ifndef OPENSSL_NO_DES if (doit[D_CBC_DES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_CBC_DES], c[D_CBC_DES][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_CBC_DES], c[D_CBC_DES][testnum], + lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, DES_ncbc_encrypt_loop, loopargs); d = Time_F(STOP); @@ -2007,10 +2088,12 @@ int speed_main(int argc, char **argv) } if (doit[D_EDE3_DES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_EDE3_DES], c[D_EDE3_DES][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_EDE3_DES], c[D_EDE3_DES][testnum], + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, DES_ede3_cbc_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, DES_ede3_cbc_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_EDE3_DES, testnum, count, d); } @@ -2018,74 +2101,83 @@ int speed_main(int argc, char **argv) #endif if (doit[D_CBC_128_AES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { print_message(names[D_CBC_128_AES], c[D_CBC_128_AES][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, AES_cbc_128_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, AES_cbc_128_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_CBC_128_AES, testnum, count, d); } } if (doit[D_CBC_192_AES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { print_message(names[D_CBC_192_AES], c[D_CBC_192_AES][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, AES_cbc_192_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, AES_cbc_192_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_CBC_192_AES, testnum, count, d); } } if (doit[D_CBC_256_AES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { print_message(names[D_CBC_256_AES], c[D_CBC_256_AES][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, AES_cbc_256_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, AES_cbc_256_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_CBC_256_AES, testnum, count, d); } } if (doit[D_IGE_128_AES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { print_message(names[D_IGE_128_AES], c[D_IGE_128_AES][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, AES_ige_128_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, AES_ige_128_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_IGE_128_AES, testnum, count, d); } } if (doit[D_IGE_192_AES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { print_message(names[D_IGE_192_AES], c[D_IGE_192_AES][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, AES_ige_192_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, AES_ige_192_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_IGE_192_AES, testnum, count, d); } } if (doit[D_IGE_256_AES]) { - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { print_message(names[D_IGE_256_AES], c[D_IGE_256_AES][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); - count = run_benchmark(async_jobs, AES_ige_256_encrypt_loop, loopargs); + count = + run_benchmark(async_jobs, AES_ige_256_encrypt_loop, loopargs); d = Time_F(STOP); print_result(D_IGE_256_AES, testnum, count, d); } } if (doit[D_GHASH]) { for (i = 0; i < loopargs_len; i++) { - loopargs[i].gcm_ctx = CRYPTO_gcm128_new(&aes_ks1, (block128_f) AES_encrypt); - CRYPTO_gcm128_setiv(loopargs[i].gcm_ctx, (unsigned char *)"0123456789ab", 12); + loopargs[i].gcm_ctx = + CRYPTO_gcm128_new(&aes_ks1, (block128_f) AES_encrypt); + CRYPTO_gcm128_setiv(loopargs[i].gcm_ctx, + (unsigned char *)"0123456789ab", 12); } - for (testnum = 0; testnum < SIZE_NUM; testnum++) { - print_message(names[D_GHASH], c[D_GHASH][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_GHASH], c[D_GHASH][testnum], + lengths[testnum], seconds.sym); Time_F(START); count = run_benchmark(async_jobs, CRYPTO_gcm128_aad_loop, loopargs); d = Time_F(STOP); @@ -2094,7 +2186,6 @@ int speed_main(int argc, char **argv) for (i = 0; i < loopargs_len; i++) CRYPTO_gcm128_release(loopargs[i].gcm_ctx); } - #ifndef OPENSSL_NO_CAMELLIA if (doit[D_CBC_128_CML]) { if (async_jobs > 0) { @@ -2102,9 +2193,9 @@ int speed_main(int argc, char **argv) names[D_CBC_128_CML]); doit[D_CBC_128_CML] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { print_message(names[D_CBC_128_CML], c[D_CBC_128_CML][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_128_CML][testnum]); count++) Camellia_cbc_encrypt(loopargs[0].buf, loopargs[0].buf, @@ -2120,9 +2211,9 @@ int speed_main(int argc, char **argv) names[D_CBC_192_CML]); doit[D_CBC_192_CML] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { print_message(names[D_CBC_192_CML], c[D_CBC_192_CML][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); if (async_jobs > 0) { BIO_printf(bio_err, "Async mode is not supported, exiting..."); exit(1); @@ -2142,9 +2233,9 @@ int speed_main(int argc, char **argv) names[D_CBC_256_CML]); doit[D_CBC_256_CML] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { print_message(names[D_CBC_256_CML], c[D_CBC_256_CML][testnum], - lengths[testnum]); + lengths[testnum], seconds.sym); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_256_CML][testnum]); count++) Camellia_cbc_encrypt(loopargs[0].buf, loopargs[0].buf, @@ -2162,8 +2253,9 @@ int speed_main(int argc, char **argv) names[D_CBC_IDEA]); doit[D_CBC_IDEA] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { - print_message(names[D_CBC_IDEA], c[D_CBC_IDEA][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { + print_message(names[D_CBC_IDEA], c[D_CBC_IDEA][testnum], + lengths[testnum], seconds.sym); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_IDEA][testnum]); count++) IDEA_cbc_encrypt(loopargs[0].buf, loopargs[0].buf, @@ -2181,8 +2273,9 @@ int speed_main(int argc, char **argv) names[D_CBC_SEED]); doit[D_CBC_SEED] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { - print_message(names[D_CBC_SEED], c[D_CBC_SEED][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { + print_message(names[D_CBC_SEED], c[D_CBC_SEED][testnum], + lengths[testnum], seconds.sym); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_SEED][testnum]); count++) SEED_cbc_encrypt(loopargs[0].buf, loopargs[0].buf, @@ -2199,8 +2292,9 @@ int speed_main(int argc, char **argv) names[D_CBC_RC2]); doit[D_CBC_RC2] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { - print_message(names[D_CBC_RC2], c[D_CBC_RC2][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { + print_message(names[D_CBC_RC2], c[D_CBC_RC2][testnum], + lengths[testnum], seconds.sym); if (async_jobs > 0) { BIO_printf(bio_err, "Async mode is not supported, exiting..."); exit(1); @@ -2222,8 +2316,9 @@ int speed_main(int argc, char **argv) names[D_CBC_RC5]); doit[D_CBC_RC5] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { - print_message(names[D_CBC_RC5], c[D_CBC_RC5][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { + print_message(names[D_CBC_RC5], c[D_CBC_RC5][testnum], + lengths[testnum], seconds.sym); if (async_jobs > 0) { BIO_printf(bio_err, "Async mode is not supported, exiting..."); exit(1); @@ -2245,8 +2340,9 @@ int speed_main(int argc, char **argv) names[D_CBC_BF]); doit[D_CBC_BF] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { - print_message(names[D_CBC_BF], c[D_CBC_BF][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { + print_message(names[D_CBC_BF], c[D_CBC_BF][testnum], + lengths[testnum], seconds.sym); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_BF][testnum]); count++) BF_cbc_encrypt(loopargs[0].buf, loopargs[0].buf, @@ -2264,8 +2360,9 @@ int speed_main(int argc, char **argv) names[D_CBC_CAST]); doit[D_CBC_CAST] = 0; } - for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) { - print_message(names[D_CBC_CAST], c[D_CBC_CAST][testnum], lengths[testnum]); + for (testnum = 0; testnum < size_num && async_init == 0; testnum++) { + print_message(names[D_CBC_CAST], c[D_CBC_CAST][testnum], + lengths[testnum], seconds.sym); Time_F(START); for (count = 0, run = 1; COND(c[D_CBC_CAST][testnum]); count++) CAST_cbc_encrypt(loopargs[0].buf, loopargs[0].buf, @@ -2276,6 +2373,16 @@ int speed_main(int argc, char **argv) } } #endif + if (doit[D_RAND]) { + for (testnum = 0; testnum < size_num; testnum++) { + print_message(names[D_RAND], c[D_RAND][testnum], lengths[testnum], + seconds.sym); + Time_F(START); + count = run_benchmark(async_jobs, RAND_bytes_loop, loopargs); + d = Time_F(STOP); + print_result(D_RAND, testnum, count, d); + } + } if (doit[D_EVP]) { if (multiblock && evp_cipher) { @@ -2290,11 +2397,11 @@ int speed_main(int argc, char **argv) BIO_printf(bio_err, "Async mode is not supported, exiting..."); exit(1); } - multiblock_speed(evp_cipher); + multiblock_speed(evp_cipher, &seconds); ret = 0; goto end; } - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { if (evp_cipher) { names[D_EVP] = OBJ_nid2ln(EVP_CIPHER_nid(evp_cipher)); @@ -2302,19 +2409,33 @@ int speed_main(int argc, char **argv) * -O3 -fschedule-insns messes up an optimization here! * names[D_EVP] somehow becomes NULL */ - print_message(names[D_EVP], save_count, lengths[testnum]); + print_message(names[D_EVP], save_count, lengths[testnum], + seconds.sym); for (k = 0; k < loopargs_len; k++) { loopargs[k].ctx = EVP_CIPHER_CTX_new(); - if (decrypt) - EVP_DecryptInit_ex(loopargs[k].ctx, evp_cipher, NULL, key16, iv); - else - EVP_EncryptInit_ex(loopargs[k].ctx, evp_cipher, NULL, key16, iv); + EVP_CipherInit_ex(loopargs[k].ctx, evp_cipher, NULL, NULL, + iv, decrypt ? 0 : 1); + EVP_CIPHER_CTX_set_padding(loopargs[k].ctx, 0); + + keylen = EVP_CIPHER_CTX_key_length(loopargs[k].ctx); + loopargs[k].key = app_malloc(keylen, "evp_cipher key"); + EVP_CIPHER_CTX_rand_key(loopargs[k].ctx, loopargs[k].key); + EVP_CipherInit_ex(loopargs[k].ctx, NULL, NULL, + loopargs[k].key, NULL, -1); + OPENSSL_clear_free(loopargs[k].key, keylen); + } + switch (EVP_CIPHER_mode(evp_cipher)) { + case EVP_CIPH_CCM_MODE: + loopfunc = EVP_Update_loop_ccm; + break; + default: + loopfunc = EVP_Update_loop; } Time_F(START); - count = run_benchmark(async_jobs, EVP_Update_loop, loopargs); + count = run_benchmark(async_jobs, loopfunc, loopargs); d = Time_F(STOP); for (k = 0; k < loopargs_len; k++) { EVP_CIPHER_CTX_free(loopargs[k].ctx); @@ -2322,7 +2443,8 @@ int speed_main(int argc, char **argv) } if (evp_md) { names[D_EVP] = OBJ_nid2ln(EVP_MD_type(evp_md)); - print_message(names[D_EVP], save_count, lengths[testnum]); + print_message(names[D_EVP], save_count, lengths[testnum], + seconds.sym); Time_F(START); count = run_benchmark(async_jobs, EVP_Digest_loop, loopargs); d = Time_F(STOP); @@ -2340,6 +2462,34 @@ int speed_main(int argc, char **argv) if (!rsa_doit[testnum]) continue; for (i = 0; i < loopargs_len; i++) { + if (primes > 2) { + /* we haven't set keys yet, generate multi-prime RSA keys */ + BIGNUM *bn = BN_new(); + + if (bn == NULL) + goto end; + if (!BN_set_word(bn, RSA_F4)) { + BN_free(bn); + goto end; + } + + BIO_printf(bio_err, "Generate multi-prime RSA key for %s\n", + rsa_choices[testnum].name); + + loopargs[i].rsa_key[testnum] = RSA_new(); + if (loopargs[i].rsa_key[testnum] == NULL) { + BN_free(bn); + goto end; + } + + if (!RSA_generate_multi_prime_key(loopargs[i].rsa_key[testnum], + rsa_bits[testnum], + primes, bn, NULL)) { + BN_free(bn); + goto end; + } + BN_free(bn); + } st = RSA_sign(NID_md5_sha1, loopargs[i].buf, 36, loopargs[i].buf2, &loopargs[i].siglen, loopargs[i].rsa_key[testnum]); if (st == 0) @@ -2352,7 +2502,8 @@ int speed_main(int argc, char **argv) rsa_count = 1; } else { pkey_print_message("private", "rsa", - rsa_c[testnum][0], rsa_bits[testnum], RSA_SECONDS); + rsa_c[testnum][0], rsa_bits[testnum], + seconds.rsa); /* RSA_blinding_on(rsa_key[testnum],NULL); */ Time_F(START); count = run_benchmark(async_jobs, RSA_sign_loop, loopargs); @@ -2361,7 +2512,7 @@ int speed_main(int argc, char **argv) mr ? "+R1:%ld:%d:%.2f\n" : "%ld %d bit private RSA's in %.2fs\n", count, rsa_bits[testnum], d); - rsa_results[testnum][0] = d / (double)count; + rsa_results[testnum][0] = (double)count / d; rsa_count = count; } @@ -2378,7 +2529,8 @@ int speed_main(int argc, char **argv) rsa_doit[testnum] = 0; } else { pkey_print_message("public", "rsa", - rsa_c[testnum][1], rsa_bits[testnum], RSA_SECONDS); + rsa_c[testnum][1], rsa_bits[testnum], + seconds.rsa); Time_F(START); count = run_benchmark(async_jobs, RSA_verify_loop, loopargs); d = Time_F(STOP); @@ -2386,7 +2538,7 @@ int speed_main(int argc, char **argv) mr ? "+R2:%ld:%d:%.2f\n" : "%ld %d bit public RSA's in %.2fs\n", count, rsa_bits[testnum], d); - rsa_results[testnum][1] = d / (double)count; + rsa_results[testnum][1] = (double)count / d; } if (rsa_count <= 1) { @@ -2401,9 +2553,6 @@ int speed_main(int argc, char **argv) RAND_bytes(loopargs[i].buf, 36); #ifndef OPENSSL_NO_DSA - if (RAND_status() != 1) { - RAND_seed(rnd_seed, sizeof(rnd_seed)); - } for (testnum = 0; testnum < DSA_NUM; testnum++) { int st = 0; if (!dsa_doit[testnum]) @@ -2424,7 +2573,8 @@ int speed_main(int argc, char **argv) rsa_count = 1; } else { pkey_print_message("sign", "dsa", - dsa_c[testnum][0], dsa_bits[testnum], DSA_SECONDS); + dsa_c[testnum][0], dsa_bits[testnum], + seconds.dsa); Time_F(START); count = run_benchmark(async_jobs, DSA_sign_loop, loopargs); d = Time_F(STOP); @@ -2432,7 +2582,7 @@ int speed_main(int argc, char **argv) mr ? "+R3:%ld:%d:%.2f\n" : "%ld %d bit DSA signs in %.2fs\n", count, dsa_bits[testnum], d); - dsa_results[testnum][0] = d / (double)count; + dsa_results[testnum][0] = (double)count / d; rsa_count = count; } @@ -2449,7 +2599,8 @@ int speed_main(int argc, char **argv) dsa_doit[testnum] = 0; } else { pkey_print_message("verify", "dsa", - dsa_c[testnum][1], dsa_bits[testnum], DSA_SECONDS); + dsa_c[testnum][1], dsa_bits[testnum], + seconds.dsa); Time_F(START); count = run_benchmark(async_jobs, DSA_verify_loop, loopargs); d = Time_F(STOP); @@ -2457,7 +2608,7 @@ int speed_main(int argc, char **argv) mr ? "+R4:%ld:%d:%.2f\n" : "%ld %d bit DSA verify in %.2fs\n", count, dsa_bits[testnum], d); - dsa_results[testnum][1] = d / (double)count; + dsa_results[testnum][1] = (double)count / d; } if (rsa_count <= 1) { @@ -2469,16 +2620,14 @@ int speed_main(int argc, char **argv) #endif /* OPENSSL_NO_DSA */ #ifndef OPENSSL_NO_EC - if (RAND_status() != 1) { - RAND_seed(rnd_seed, sizeof(rnd_seed)); - } for (testnum = 0; testnum < EC_NUM; testnum++) { int st = 1; if (!ecdsa_doit[testnum]) continue; /* Ignore Curve */ for (i = 0; i < loopargs_len; i++) { - loopargs[i].ecdsa[testnum] = EC_KEY_new_by_curve_name(test_curves[testnum]); + loopargs[i].ecdsa[testnum] = + EC_KEY_new_by_curve_name(test_curves[testnum]); if (loopargs[i].ecdsa[testnum] == NULL) { st = 0; break; @@ -2494,7 +2643,8 @@ int speed_main(int argc, char **argv) /* Perform ECDSA signature test */ EC_KEY_generate_key(loopargs[i].ecdsa[testnum]); st = ECDSA_sign(0, loopargs[i].buf, 20, loopargs[i].buf2, - &loopargs[i].siglen, loopargs[i].ecdsa[testnum]); + &loopargs[i].siglen, + loopargs[i].ecdsa[testnum]); if (st == 0) break; } @@ -2506,7 +2656,8 @@ int speed_main(int argc, char **argv) } else { pkey_print_message("sign", "ecdsa", ecdsa_c[testnum][0], - test_curves_bits[testnum], ECDSA_SECONDS); + test_curves_bits[testnum], + seconds.ecdsa); Time_F(START); count = run_benchmark(async_jobs, ECDSA_sign_loop, loopargs); d = Time_F(STOP); @@ -2515,14 +2666,15 @@ int speed_main(int argc, char **argv) mr ? "+R5:%ld:%d:%.2f\n" : "%ld %d bit ECDSA signs in %.2fs \n", count, test_curves_bits[testnum], d); - ecdsa_results[testnum][0] = d / (double)count; + ecdsa_results[testnum][0] = (double)count / d; rsa_count = count; } /* Perform ECDSA verification test */ for (i = 0; i < loopargs_len; i++) { st = ECDSA_verify(0, loopargs[i].buf, 20, loopargs[i].buf2, - loopargs[i].siglen, loopargs[i].ecdsa[testnum]); + loopargs[i].siglen, + loopargs[i].ecdsa[testnum]); if (st != 1) break; } @@ -2534,7 +2686,8 @@ int speed_main(int argc, char **argv) } else { pkey_print_message("verify", "ecdsa", ecdsa_c[testnum][1], - test_curves_bits[testnum], ECDSA_SECONDS); + test_curves_bits[testnum], + seconds.ecdsa); Time_F(START); count = run_benchmark(async_jobs, ECDSA_verify_loop, loopargs); d = Time_F(STOP); @@ -2542,7 +2695,7 @@ int speed_main(int argc, char **argv) mr ? "+R6:%ld:%d:%.2f\n" : "%ld %d bit ECDSA verify in %.2fs\n", count, test_curves_bits[testnum], d); - ecdsa_results[testnum][1] = d / (double)count; + ecdsa_results[testnum][1] = (double)count / d; } if (rsa_count <= 1) { @@ -2553,93 +2706,159 @@ int speed_main(int argc, char **argv) } } - if (RAND_status() != 1) { - RAND_seed(rnd_seed, sizeof(rnd_seed)); - } for (testnum = 0; testnum < EC_NUM; testnum++) { int ecdh_checks = 1; if (!ecdh_doit[testnum]) continue; + for (i = 0; i < loopargs_len; i++) { - loopargs[i].ecdh_a[testnum] = EC_KEY_new_by_curve_name(test_curves[testnum]); - loopargs[i].ecdh_b[testnum] = EC_KEY_new_by_curve_name(test_curves[testnum]); - if (loopargs[i].ecdh_a[testnum] == NULL || - loopargs[i].ecdh_b[testnum] == NULL) { + EVP_PKEY_CTX *kctx = NULL; + EVP_PKEY_CTX *test_ctx = NULL; + EVP_PKEY_CTX *ctx = NULL; + EVP_PKEY *key_A = NULL; + EVP_PKEY *key_B = NULL; + size_t outlen; + size_t test_outlen; + + /* Ensure that the error queue is empty */ + if (ERR_peek_error()) { + BIO_printf(bio_err, + "WARNING: the error queue contains previous unhandled errors.\n"); + ERR_print_errors(bio_err); + } + + /* Let's try to create a ctx directly from the NID: this works for + * curves like Curve25519 that are not implemented through the low + * level EC interface. + * If this fails we try creating a EVP_PKEY_EC generic param ctx, + * then we set the curve by NID before deriving the actual keygen + * ctx for that specific curve. */ + kctx = EVP_PKEY_CTX_new_id(test_curves[testnum], NULL); /* keygen ctx from NID */ + if (!kctx) { + EVP_PKEY_CTX *pctx = NULL; + EVP_PKEY *params = NULL; + + /* If we reach this code EVP_PKEY_CTX_new_id() failed and a + * "int_ctx_new:unsupported algorithm" error was added to the + * error queue. + * We remove it from the error queue as we are handling it. */ + unsigned long error = ERR_peek_error(); /* peek the latest error in the queue */ + if (error == ERR_peek_last_error() && /* oldest and latest errors match */ + /* check that the error origin matches */ + ERR_GET_LIB(error) == ERR_LIB_EVP && + ERR_GET_FUNC(error) == EVP_F_INT_CTX_NEW && + ERR_GET_REASON(error) == EVP_R_UNSUPPORTED_ALGORITHM) + ERR_get_error(); /* pop error from queue */ + if (ERR_peek_error()) { + BIO_printf(bio_err, + "Unhandled error in the error queue during ECDH init.\n"); + ERR_print_errors(bio_err); + rsa_count = 1; + break; + } + + if ( /* Create the context for parameter generation */ + !(pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)) || + /* Initialise the parameter generation */ + !EVP_PKEY_paramgen_init(pctx) || + /* Set the curve by NID */ + !EVP_PKEY_CTX_set_ec_paramgen_curve_nid(pctx, + test_curves + [testnum]) || + /* Create the parameter object params */ + !EVP_PKEY_paramgen(pctx, ¶ms)) { + ecdh_checks = 0; + BIO_printf(bio_err, "ECDH EC params init failure.\n"); + ERR_print_errors(bio_err); + rsa_count = 1; + break; + } + /* Create the context for the key generation */ + kctx = EVP_PKEY_CTX_new(params, NULL); + + EVP_PKEY_free(params); + params = NULL; + EVP_PKEY_CTX_free(pctx); + pctx = NULL; + } + if (kctx == NULL || /* keygen ctx is not null */ + !EVP_PKEY_keygen_init(kctx) /* init keygen ctx */ ) { ecdh_checks = 0; + BIO_printf(bio_err, "ECDH keygen failure.\n"); + ERR_print_errors(bio_err); + rsa_count = 1; break; } + + if (!EVP_PKEY_keygen(kctx, &key_A) || /* generate secret key A */ + !EVP_PKEY_keygen(kctx, &key_B) || /* generate secret key B */ + !(ctx = EVP_PKEY_CTX_new(key_A, NULL)) || /* derivation ctx from skeyA */ + !EVP_PKEY_derive_init(ctx) || /* init derivation ctx */ + !EVP_PKEY_derive_set_peer(ctx, key_B) || /* set peer pubkey in ctx */ + !EVP_PKEY_derive(ctx, NULL, &outlen) || /* determine max length */ + outlen == 0 || /* ensure outlen is a valid size */ + outlen > MAX_ECDH_SIZE /* avoid buffer overflow */ ) { + ecdh_checks = 0; + BIO_printf(bio_err, "ECDH key generation failure.\n"); + ERR_print_errors(bio_err); + rsa_count = 1; + break; + } + + /* Here we perform a test run, comparing the output of a*B and b*A; + * we try this here and assume that further EVP_PKEY_derive calls + * never fail, so we can skip checks in the actually benchmarked + * code, for maximum performance. */ + if (!(test_ctx = EVP_PKEY_CTX_new(key_B, NULL)) || /* test ctx from skeyB */ + !EVP_PKEY_derive_init(test_ctx) || /* init derivation test_ctx */ + !EVP_PKEY_derive_set_peer(test_ctx, key_A) || /* set peer pubkey in test_ctx */ + !EVP_PKEY_derive(test_ctx, NULL, &test_outlen) || /* determine max length */ + !EVP_PKEY_derive(ctx, loopargs[i].secret_a, &outlen) || /* compute a*B */ + !EVP_PKEY_derive(test_ctx, loopargs[i].secret_b, &test_outlen) || /* compute b*A */ + test_outlen != outlen /* compare output length */ ) { + ecdh_checks = 0; + BIO_printf(bio_err, "ECDH computation failure.\n"); + ERR_print_errors(bio_err); + rsa_count = 1; + break; + } + + /* Compare the computation results: CRYPTO_memcmp() returns 0 if equal */ + if (CRYPTO_memcmp(loopargs[i].secret_a, + loopargs[i].secret_b, outlen)) { + ecdh_checks = 0; + BIO_printf(bio_err, "ECDH computations don't match.\n"); + ERR_print_errors(bio_err); + rsa_count = 1; + break; + } + + loopargs[i].ecdh_ctx[testnum] = ctx; + loopargs[i].outlen[testnum] = outlen; + + EVP_PKEY_free(key_A); + EVP_PKEY_free(key_B); + EVP_PKEY_CTX_free(kctx); + kctx = NULL; + EVP_PKEY_CTX_free(test_ctx); + test_ctx = NULL; } - if (ecdh_checks == 0) { - BIO_printf(bio_err, "ECDH failure.\n"); - ERR_print_errors(bio_err); - rsa_count = 1; - } else { - for (i = 0; i < loopargs_len; i++) { - /* generate two ECDH key pairs */ - if (!EC_KEY_generate_key(loopargs[i].ecdh_a[testnum]) || - !EC_KEY_generate_key(loopargs[i].ecdh_b[testnum])) { - BIO_printf(bio_err, "ECDH key generation failure.\n"); - ERR_print_errors(bio_err); - ecdh_checks = 0; - rsa_count = 1; - } else { - int secret_size_a, secret_size_b; - /* - * If field size is not more than 24 octets, then use SHA-1 - * hash of result; otherwise, use result (see section 4.8 of - * draft-ietf-tls-ecc-03.txt). - */ - int field_size = EC_GROUP_get_degree( - EC_KEY_get0_group(loopargs[i].ecdh_a[testnum])); - - if (field_size <= 24 * 8) { /* 192 bits */ - loopargs[i].outlen = KDF1_SHA1_len; - loopargs[i].kdf = KDF1_SHA1; - } else { - loopargs[i].outlen = (field_size + 7) / 8; - loopargs[i].kdf = NULL; - } - secret_size_a = - ECDH_compute_key(loopargs[i].secret_a, loopargs[i].outlen, - EC_KEY_get0_public_key(loopargs[i].ecdh_b[testnum]), - loopargs[i].ecdh_a[testnum], loopargs[i].kdf); - secret_size_b = - ECDH_compute_key(loopargs[i].secret_b, loopargs[i].outlen, - EC_KEY_get0_public_key(loopargs[i].ecdh_a[testnum]), - loopargs[i].ecdh_b[testnum], loopargs[i].kdf); - if (secret_size_a != secret_size_b) - ecdh_checks = 0; - else - ecdh_checks = 1; - - for (k = 0; k < secret_size_a && ecdh_checks == 1; k++) { - if (loopargs[i].secret_a[k] != loopargs[i].secret_b[k]) - ecdh_checks = 0; - } - - if (ecdh_checks == 0) { - BIO_printf(bio_err, "ECDH computations don't match.\n"); - ERR_print_errors(bio_err); - rsa_count = 1; - break; - } - } - } - if (ecdh_checks != 0) { - pkey_print_message("", "ecdh", - ecdh_c[testnum][0], - test_curves_bits[testnum], ECDH_SECONDS); - Time_F(START); - count = run_benchmark(async_jobs, ECDH_compute_key_loop, loopargs); - d = Time_F(STOP); - BIO_printf(bio_err, - mr ? "+R7:%ld:%d:%.2f\n" : - "%ld %d-bit ECDH ops in %.2fs\n", count, - test_curves_bits[testnum], d); - ecdh_results[testnum][0] = d / (double)count; - rsa_count = count; - } + if (ecdh_checks != 0) { + pkey_print_message("", "ecdh", + ecdh_c[testnum][0], + test_curves_bits[testnum], + seconds.ecdh); + Time_F(START); + count = + run_benchmark(async_jobs, ECDH_EVP_derive_key_loop, loopargs); + d = Time_F(STOP); + BIO_printf(bio_err, + mr ? "+R7:%ld:%d:%.2f\n" : + "%ld %d-bit ECDH ops in %.2fs\n", count, + test_curves_bits[testnum], d); + ecdh_results[testnum][0] = (double)count / d; + rsa_count = count; } if (rsa_count <= 1) { @@ -2684,7 +2903,7 @@ int speed_main(int argc, char **argv) ("The 'numbers' are in 1000s of bytes per second processed.\n"); printf("type "); } - for (testnum = 0; testnum < SIZE_NUM; testnum++) + for (testnum = 0; testnum < size_num; testnum++) printf(mr ? ":%d" : "%7d bytes", lengths[testnum]); printf("\n"); } @@ -2696,7 +2915,7 @@ int speed_main(int argc, char **argv) printf("+F:%d:%s", k, names[k]); else printf("%-13s", names[k]); - for (testnum = 0; testnum < SIZE_NUM; testnum++) { + for (testnum = 0; testnum < size_num; testnum++) { if (results[k][testnum] > 10000 && !mr) printf(" %11.2fk", results[k][testnum] / 1e3); else @@ -2718,8 +2937,8 @@ int speed_main(int argc, char **argv) k, rsa_bits[k], rsa_results[k][0], rsa_results[k][1]); else printf("rsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", - rsa_bits[k], rsa_results[k][0], rsa_results[k][1], - 1.0 / rsa_results[k][0], 1.0 / rsa_results[k][1]); + rsa_bits[k], 1.0 / rsa_results[k][0], 1.0 / rsa_results[k][1], + rsa_results[k][0], rsa_results[k][1]); } #endif #ifndef OPENSSL_NO_DSA @@ -2736,8 +2955,8 @@ int speed_main(int argc, char **argv) k, dsa_bits[k], dsa_results[k][0], dsa_results[k][1]); else printf("dsa %4u bits %8.6fs %8.6fs %8.1f %8.1f\n", - dsa_bits[k], dsa_results[k][0], dsa_results[k][1], - 1.0 / dsa_results[k][0], 1.0 / dsa_results[k][1]); + dsa_bits[k], 1.0 / dsa_results[k][0], 1.0 / dsa_results[k][1], + dsa_results[k][0], dsa_results[k][1]); } #endif #ifndef OPENSSL_NO_EC @@ -2758,8 +2977,8 @@ int speed_main(int argc, char **argv) printf("%4u bit ecdsa (%s) %8.4fs %8.4fs %8.1f %8.1f\n", test_curves_bits[k], test_curves_names[k], - ecdsa_results[k][0], ecdsa_results[k][1], - 1.0 / ecdsa_results[k][0], 1.0 / ecdsa_results[k][1]); + 1.0 / ecdsa_results[k][0], 1.0 / ecdsa_results[k][1], + ecdsa_results[k][0], ecdsa_results[k][1]); } testnum = 1; @@ -2779,7 +2998,7 @@ int speed_main(int argc, char **argv) printf("%4u bit ecdh (%s) %8.4fs %8.1f\n", test_curves_bits[k], test_curves_names[k], - ecdh_results[k][0], 1.0 / ecdh_results[k][0]); + 1.0 / ecdh_results[k][0], ecdh_results[k][0]); } #endif @@ -2802,8 +3021,7 @@ int speed_main(int argc, char **argv) #ifndef OPENSSL_NO_EC for (k = 0; k < EC_NUM; k++) { EC_KEY_free(loopargs[i].ecdsa[k]); - EC_KEY_free(loopargs[i].ecdh_a[k]); - EC_KEY_free(loopargs[i].ecdh_b[k]); + EVP_PKEY_CTX_free(loopargs[i].ecdh_ctx[k]); } OPENSSL_free(loopargs[i].secret_a); OPENSSL_free(loopargs[i].secret_b); @@ -2820,17 +3038,17 @@ int speed_main(int argc, char **argv) } OPENSSL_free(loopargs); release_engine(e); - return (ret); + return ret; } -static void print_message(const char *s, long num, int length) +static void print_message(const char *s, long num, int length, int tm) { #ifdef SIGALRM BIO_printf(bio_err, mr ? "+DT:%s:%d:%d\n" - : "Doing %s for %ds on %d size blocks: ", s, SECONDS, length); + : "Doing %s for %ds on %d size blocks: ", s, tm, length); (void)BIO_flush(bio_err); - alarm(SECONDS); + alarm(tm); #else BIO_printf(bio_err, mr ? "+DN:%s:%ld:%d\n" @@ -2897,7 +3115,7 @@ static char *sstrsep(char **string, const char *delim) return token; } -static int do_multi(int multi) +static int do_multi(int multi, int size_num) { int n; int fd[2]; @@ -2943,8 +3161,9 @@ static int do_multi(int multi) if (p) *p = '\0'; if (buf[0] != '+') { - BIO_printf(bio_err, "Don't understand line '%s' from child %d\n", - buf, n); + BIO_printf(bio_err, + "Don't understand line '%s' from child %d\n", buf, + n); continue; } printf("Got: %s from %d\n", buf, n); @@ -2955,7 +3174,7 @@ static int do_multi(int multi) p = buf + 3; alg = atoi(sstrsep(&p, sep)); sstrsep(&p, sep); - for (j = 0; j < SIZE_NUM; ++j) + for (j = 0; j < size_num; ++j) results[alg][j] += atof(sstrsep(&p, sep)); } else if (strncmp(buf, "+F2:", 4) == 0) { int k; @@ -2966,16 +3185,10 @@ static int do_multi(int multi) sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); - if (n) - rsa_results[k][0] = 1 / (1 / rsa_results[k][0] + 1 / d); - else - rsa_results[k][0] = d; + rsa_results[k][0] += d; d = atof(sstrsep(&p, sep)); - if (n) - rsa_results[k][1] = 1 / (1 / rsa_results[k][1] + 1 / d); - else - rsa_results[k][1] = d; + rsa_results[k][1] += d; } # ifndef OPENSSL_NO_DSA else if (strncmp(buf, "+F3:", 4) == 0) { @@ -2987,16 +3200,10 @@ static int do_multi(int multi) sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); - if (n) - dsa_results[k][0] = 1 / (1 / dsa_results[k][0] + 1 / d); - else - dsa_results[k][0] = d; + dsa_results[k][0] += d; d = atof(sstrsep(&p, sep)); - if (n) - dsa_results[k][1] = 1 / (1 / dsa_results[k][1] + 1 / d); - else - dsa_results[k][1] = d; + dsa_results[k][1] += d; } # endif # ifndef OPENSSL_NO_EC @@ -3009,18 +3216,10 @@ static int do_multi(int multi) sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); - if (n) - ecdsa_results[k][0] = - 1 / (1 / ecdsa_results[k][0] + 1 / d); - else - ecdsa_results[k][0] = d; + ecdsa_results[k][0] += d; d = atof(sstrsep(&p, sep)); - if (n) - ecdsa_results[k][1] = - 1 / (1 / ecdsa_results[k][1] + 1 / d); - else - ecdsa_results[k][1] = d; + ecdsa_results[k][1] += d; } else if (strncmp(buf, "+F5:", 4) == 0) { int k; double d; @@ -3030,18 +3229,15 @@ static int do_multi(int multi) sstrsep(&p, sep); d = atof(sstrsep(&p, sep)); - if (n) - ecdh_results[k][0] = 1 / (1 / ecdh_results[k][0] + 1 / d); - else - ecdh_results[k][0] = d; - + ecdh_results[k][0] += d; } # endif else if (strncmp(buf, "+H:", 3) == 0) { ; } else - BIO_printf(bio_err, "Unknown type '%s' from child %d\n", buf, n); + BIO_printf(bio_err, "Unknown type '%s' from child %d\n", buf, + n); } fclose(f); @@ -3051,26 +3247,39 @@ static int do_multi(int multi) } #endif -static void multiblock_speed(const EVP_CIPHER *evp_cipher) +static void multiblock_speed(const EVP_CIPHER *evp_cipher, + const openssl_speed_sec_t *seconds) { - static int mblengths[] = + static const int mblengths_list[] = { 8 * 1024, 2 * 8 * 1024, 4 * 8 * 1024, 8 * 8 * 1024, 8 * 16 * 1024 }; - int j, count, num = OSSL_NELEM(mblengths); + const int *mblengths = mblengths_list; + int j, count, keylen, num = OSSL_NELEM(mblengths_list); const char *alg_name; - unsigned char *inp, *out, no_key[32], no_iv[16]; + unsigned char *inp, *out, *key, no_key[32], no_iv[16]; EVP_CIPHER_CTX *ctx; double d = 0.0; + if (lengths_single) { + mblengths = &lengths_single; + num = 1; + } + inp = app_malloc(mblengths[num - 1], "multiblock input buffer"); out = app_malloc(mblengths[num - 1] + 1024, "multiblock output buffer"); ctx = EVP_CIPHER_CTX_new(); - EVP_EncryptInit_ex(ctx, evp_cipher, NULL, no_key, no_iv); - EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_MAC_KEY, sizeof(no_key), - no_key); + EVP_EncryptInit_ex(ctx, evp_cipher, NULL, NULL, no_iv); + + keylen = EVP_CIPHER_CTX_key_length(ctx); + key = app_malloc(keylen, "evp_cipher key"); + EVP_CIPHER_CTX_rand_key(ctx, key); + EVP_EncryptInit_ex(ctx, NULL, NULL, key, NULL); + OPENSSL_clear_free(key, keylen); + + EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_MAC_KEY, sizeof(no_key), no_key); alg_name = OBJ_nid2ln(EVP_CIPHER_nid(evp_cipher)); for (j = 0; j < num; j++) { - print_message(alg_name, 0, mblengths[j]); + print_message(alg_name, 0, mblengths[j], seconds->sym); Time_F(START); for (count = 0, run = 1; run && count < 0x7fffffff; count++) { unsigned char aad[EVP_AEAD_TLS1_AAD_LEN]; @@ -3103,8 +3312,8 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher) RAND_bytes(out, 16); len += 16; - aad[11] = len >> 8; - aad[12] = len; + aad[11] = (unsigned char)(len >> 8); + aad[12] = (unsigned char)(len); pad = EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_TLS1_AAD, EVP_AEAD_TLS1_AAD_LEN, aad); EVP_Cipher(ctx, out, inp, len + pad); diff --git a/apps/spkac.c b/apps/spkac.c index 34490679..8ed9dd92 100644 --- a/apps/spkac.c +++ b/apps/spkac.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2017 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,11 +12,11 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include #include -#include #include #include @@ -24,14 +24,15 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_NOOUT, OPT_PUBKEY, OPT_VERIFY, OPT_IN, OPT_OUT, OPT_ENGINE, OPT_KEY, OPT_CHALLENGE, OPT_PASSIN, OPT_SPKAC, - OPT_SPKSECT + OPT_SPKSECT, OPT_KEYFORM } OPTION_CHOICE; -OPTIONS spkac_options[] = { +const OPTIONS spkac_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"in", OPT_IN, '<', "Input file"}, {"out", OPT_OUT, '>', "Output file"}, {"key", OPT_KEY, '<', "Create SPKAC using private key"}, + {"keyform", OPT_KEYFORM, 'f', "Private key file format - default PEM (PEM, DER, or ENGINE)"}, {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, {"challenge", OPT_CHALLENGE, 's', "Challenge string"}, {"spkac", OPT_SPKAC, 's', "Alternative SPKAC name"}, @@ -58,6 +59,7 @@ int spkac_main(int argc, char **argv) char *spkstr = NULL, *prog; const char *spkac = "SPKAC", *spksect = "default"; int i, ret = 1, verify = 0, noout = 0, pubkey = 0; + int keyformat = FORMAT_PEM; OPTION_CHOICE o; prog = opt_init(argc, argv, spkac_options); @@ -93,6 +95,10 @@ int spkac_main(int argc, char **argv) case OPT_KEY: keyfile = opt_arg(); break; + case OPT_KEYFORM: + if (!opt_format(opt_arg(), OPT_FMT_ANY, &keyformat)) + goto opthelp; + break; case OPT_CHALLENGE: challenge = opt_arg(); break; @@ -118,7 +124,7 @@ int spkac_main(int argc, char **argv) if (keyfile != NULL) { pkey = load_key(strcmp(keyfile, "-") ? keyfile : NULL, - FORMAT_PEM, 1, passin, e, "private key"); + keyformat, 1, passin, e, "private key"); if (pkey == NULL) goto end; spki = NETSCAPE_SPKI_new(); @@ -192,5 +198,5 @@ int spkac_main(int argc, char **argv) EVP_PKEY_free(pkey); release_engine(e); OPENSSL_free(passin); - return (ret); + return ret; } diff --git a/apps/srp.c b/apps/srp.c index 0ead68e8..5e7f3b9f 100644 --- a/apps/srp.c +++ b/apps/srp.c @@ -22,11 +22,11 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # define BASE_SECTION "srp" # define CONFIG_FILE "openssl.cnf" -# define ENV_RANDFILE "RANDFILE" # define ENV_DATABASE "srpvfile" # define ENV_DEFAULT_SRP "default_srp" @@ -139,8 +139,8 @@ static char *srp_verify_user(const char *user, const char *srp_verifier, BIO_printf(bio_err, "Pass %s\n", password); OPENSSL_assert(srp_usersalt != NULL); - if (!(gNid = SRP_create_verifier(user, password, &srp_usersalt, - &verifier, N, g)) ) { + if ((gNid = SRP_create_verifier(user, password, &srp_usersalt, + &verifier, N, g)) == NULL) { BIO_printf(bio_err, "Internal error validating SRP verifier\n"); } else { if (strcmp(verifier, srp_verifier)) @@ -170,8 +170,8 @@ static char *srp_create_user(char *user, char **srp_verifier, if (verbose) BIO_printf(bio_err, "Creating\n user=\"%s\"\n g=\"%s\"\n N=\"%s\"\n", user, g, N); - if (!(gNid = SRP_create_verifier(user, password, &salt, - srp_verifier, N, g)) ) { + if ((gNid = SRP_create_verifier(user, password, &salt, + srp_verifier, N, g)) == NULL) { BIO_printf(bio_err, "Internal error creating SRP verifier\n"); } else { *srp_usersalt = salt; @@ -189,10 +189,10 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_VERBOSE, OPT_CONFIG, OPT_NAME, OPT_SRPVFILE, OPT_ADD, OPT_DELETE, OPT_MODIFY, OPT_LIST, OPT_GN, OPT_USERINFO, - OPT_PASSIN, OPT_PASSOUT, OPT_ENGINE + OPT_PASSIN, OPT_PASSOUT, OPT_ENGINE, OPT_R_ENUM } OPTION_CHOICE; -OPTIONS srp_options[] = { +const OPTIONS srp_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"verbose", OPT_VERBOSE, '-', "Talk a lot while doing things"}, {"config", OPT_CONFIG, '<', "A config file"}, @@ -207,6 +207,7 @@ OPTIONS srp_options[] = { {"userinfo", OPT_USERINFO, 's', "Additional info to be set for user"}, {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, {"passout", OPT_PASSOUT, 's', "Output file pass phrase source"}, + OPT_R_OPTIONS, # ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, # endif @@ -222,7 +223,7 @@ int srp_main(int argc, char **argv) int doupdatedb = 0, mode = OPT_ERR; char *user = NULL, *passinarg = NULL, *passoutarg = NULL; char *passin = NULL, *passout = NULL, *gN = NULL, *userinfo = NULL; - char *randfile = NULL, *section = NULL; + char *section = NULL; char **gNrow = NULL, *configfile = NULL; char *srpvfile = NULL, **pp, *prog; OPTION_CHOICE o; @@ -278,12 +279,16 @@ int srp_main(int argc, char **argv) case OPT_ENGINE: e = setup_engine(opt_arg(), 0); break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; } } argc = opt_num_rest(); argv = opt_rest(); - if (srpvfile && configfile) { + if (srpvfile != NULL && configfile != NULL) { BIO_printf(bio_err, "-srpvfile and -configfile cannot be specified together.\n"); goto end; @@ -300,7 +305,7 @@ int srp_main(int argc, char **argv) } user = *argv++; } - if ((passinarg || passoutarg) && argc != 1) { + if ((passinarg != NULL || passoutarg != NULL) && argc != 1) { BIO_printf(bio_err, "-passin, -passout arguments only valid with one user.\n"); goto opthelp; @@ -311,8 +316,8 @@ int srp_main(int argc, char **argv) goto end; } - if (!srpvfile) { - if (!configfile) + if (srpvfile == NULL) { + if (configfile == NULL) configfile = default_config_file; if (verbose) @@ -336,8 +341,7 @@ int srp_main(int argc, char **argv) goto end; } - if (randfile == NULL) - randfile = NCONF_get_string(conf, BASE_SECTION, "RANDFILE"); + app_RAND_load_conf(conf, BASE_SECTION); if (verbose) BIO_printf(bio_err, @@ -348,10 +352,6 @@ int srp_main(int argc, char **argv) if (srpvfile == NULL) goto end; } - if (randfile == NULL) - ERR_clear_error(); - else - app_RAND_load_file(randfile, 0); if (verbose) BIO_printf(bio_err, "Trying to read SRP verifier file \"%s\"\n", @@ -397,17 +397,15 @@ int srp_main(int argc, char **argv) if (user != NULL && verbose > 1) BIO_printf(bio_err, "Processing user \"%s\"\n", user); - if ((userindex = get_index(db, user, 'U')) >= 0) { + if ((userindex = get_index(db, user, 'U')) >= 0) print_user(db, userindex, (verbose > 0) || mode == OPT_LIST); - } if (mode == OPT_LIST) { if (user == NULL) { BIO_printf(bio_err, "List all users\n"); - for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { + for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) print_user(db, i, 1); - } } else if (userindex < 0) { BIO_printf(bio_err, "user \"%s\" does not exist, ignored. t\n", user); @@ -603,11 +601,9 @@ int srp_main(int argc, char **argv) OPENSSL_free(passout); if (ret) ERR_print_errors(bio_err); - if (randfile) - app_RAND_write_file(randfile); NCONF_free(conf); free_index(db); release_engine(e); - return (ret); + return ret; } #endif diff --git a/apps/storeutl.c b/apps/storeutl.c new file mode 100644 index 00000000..d40d263e --- /dev/null +++ b/apps/storeutl.c @@ -0,0 +1,471 @@ +/* + * 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 + +#include "apps.h" +#include "progs.h" +#include +#include +#include + +static int process(const char *uri, const UI_METHOD *uimeth, PW_CB_DATA *uidata, + int expected, int criterion, OSSL_STORE_SEARCH *search, + int text, int noout, int recursive, int indent, BIO *out, + const char *prog); + +typedef enum OPTION_choice { + OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ENGINE, OPT_OUT, OPT_PASSIN, + OPT_NOOUT, OPT_TEXT, OPT_RECURSIVE, + OPT_SEARCHFOR_CERTS, OPT_SEARCHFOR_KEYS, OPT_SEARCHFOR_CRLS, + OPT_CRITERION_SUBJECT, OPT_CRITERION_ISSUER, OPT_CRITERION_SERIAL, + OPT_CRITERION_FINGERPRINT, OPT_CRITERION_ALIAS, + OPT_MD +} OPTION_CHOICE; + +const OPTIONS storeutl_options[] = { + {OPT_HELP_STR, 1, '-', "Usage: %s [options] uri\nValid options are:\n"}, + {"help", OPT_HELP, '-', "Display this summary"}, + {"out", OPT_OUT, '>', "Output file - default stdout"}, + {"passin", OPT_PASSIN, 's', "Input file pass phrase source"}, + {"text", OPT_TEXT, '-', "Print a text form of the objects"}, + {"noout", OPT_NOOUT, '-', "No PEM output, just status"}, + {"certs", OPT_SEARCHFOR_CERTS, '-', "Search for certificates only"}, + {"keys", OPT_SEARCHFOR_KEYS, '-', "Search for keys only"}, + {"crls", OPT_SEARCHFOR_CRLS, '-', "Search for CRLs only"}, + {"subject", OPT_CRITERION_SUBJECT, 's', "Search by subject"}, + {"issuer", OPT_CRITERION_ISSUER, 's', "Search by issuer and serial, issuer name"}, + {"serial", OPT_CRITERION_SERIAL, 's', "Search by issuer and serial, serial number"}, + {"fingerprint", OPT_CRITERION_FINGERPRINT, 's', "Search by public key fingerprint, given in hex"}, + {"alias", OPT_CRITERION_ALIAS, 's', "Search by alias"}, + {"", OPT_MD, '-', "Any supported digest"}, +#ifndef OPENSSL_NO_ENGINE + {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, +#endif + {"r", OPT_RECURSIVE, '-', "Recurse through names"}, + {NULL} +}; + +int storeutl_main(int argc, char *argv[]) +{ + int ret = 1, noout = 0, text = 0, recursive = 0; + char *outfile = NULL, *passin = NULL, *passinarg = NULL; + BIO *out = NULL; + ENGINE *e = NULL; + OPTION_CHOICE o; + char *prog = opt_init(argc, argv, storeutl_options); + PW_CB_DATA pw_cb_data; + int expected = 0; + int criterion = 0; + X509_NAME *subject = NULL, *issuer = NULL; + ASN1_INTEGER *serial = NULL; + unsigned char *fingerprint = NULL; + size_t fingerprintlen = 0; + char *alias = NULL; + OSSL_STORE_SEARCH *search = NULL; + const EVP_MD *digest = NULL; + + while ((o = opt_next()) != OPT_EOF) { + switch (o) { + case OPT_EOF: + case OPT_ERR: + opthelp: + BIO_printf(bio_err, "%s: Use -help for summary.\n", prog); + goto end; + case OPT_HELP: + opt_help(storeutl_options); + ret = 0; + goto end; + case OPT_OUT: + outfile = opt_arg(); + break; + case OPT_PASSIN: + passinarg = opt_arg(); + break; + case OPT_NOOUT: + noout = 1; + break; + case OPT_TEXT: + text = 1; + break; + case OPT_RECURSIVE: + recursive = 1; + break; + case OPT_SEARCHFOR_CERTS: + case OPT_SEARCHFOR_KEYS: + case OPT_SEARCHFOR_CRLS: + if (expected != 0) { + BIO_printf(bio_err, "%s: only one search type can be given.\n", + prog); + goto end; + } + { + static const struct { + enum OPTION_choice choice; + int type; + } map[] = { + {OPT_SEARCHFOR_CERTS, OSSL_STORE_INFO_CERT}, + {OPT_SEARCHFOR_KEYS, OSSL_STORE_INFO_PKEY}, + {OPT_SEARCHFOR_CRLS, OSSL_STORE_INFO_CRL}, + }; + size_t i; + + for (i = 0; i < OSSL_NELEM(map); i++) { + if (o == map[i].choice) { + expected = map[i].type; + break; + } + } + /* + * If expected wasn't set at this point, it means the map + * isn't syncronised with the possible options leading here. + */ + OPENSSL_assert(expected != 0); + } + break; + case OPT_CRITERION_SUBJECT: + if (criterion != 0) { + BIO_printf(bio_err, "%s: criterion already given.\n", + prog); + goto end; + } + criterion = OSSL_STORE_SEARCH_BY_NAME; + if (subject != NULL) { + BIO_printf(bio_err, "%s: subject already given.\n", + prog); + goto end; + } + if ((subject = parse_name(opt_arg(), MBSTRING_UTF8, 1)) == NULL) { + BIO_printf(bio_err, "%s: can't parse subject argument.\n", + prog); + goto end; + } + break; + case OPT_CRITERION_ISSUER: + if (criterion != 0 + || (criterion == OSSL_STORE_SEARCH_BY_ISSUER_SERIAL + && issuer != NULL)) { + BIO_printf(bio_err, "%s: criterion already given.\n", + prog); + goto end; + } + criterion = OSSL_STORE_SEARCH_BY_ISSUER_SERIAL; + if (issuer != NULL) { + BIO_printf(bio_err, "%s: issuer already given.\n", + prog); + goto end; + } + if ((issuer = parse_name(opt_arg(), MBSTRING_UTF8, 1)) == NULL) { + BIO_printf(bio_err, "%s: can't parse issuer argument.\n", + prog); + goto end; + } + break; + case OPT_CRITERION_SERIAL: + if (criterion != 0 + || (criterion == OSSL_STORE_SEARCH_BY_ISSUER_SERIAL + && serial != NULL)) { + BIO_printf(bio_err, "%s: criterion already given.\n", + prog); + goto end; + } + criterion = OSSL_STORE_SEARCH_BY_ISSUER_SERIAL; + if (serial != NULL) { + BIO_printf(bio_err, "%s: serial number already given.\n", + prog); + goto end; + } + if ((serial = s2i_ASN1_INTEGER(NULL, opt_arg())) == NULL) { + BIO_printf(bio_err, "%s: can't parse serial number argument.\n", + prog); + goto end; + } + break; + case OPT_CRITERION_FINGERPRINT: + if (criterion != 0 + || (criterion == OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT + && fingerprint != NULL)) { + BIO_printf(bio_err, "%s: criterion already given.\n", + prog); + goto end; + } + criterion = OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT; + if (fingerprint != NULL) { + BIO_printf(bio_err, "%s: fingerprint already given.\n", + prog); + goto end; + } + { + long tmplen = 0; + + if ((fingerprint = OPENSSL_hexstr2buf(opt_arg(), &tmplen)) + == NULL) { + BIO_printf(bio_err, + "%s: can't parse fingerprint argument.\n", + prog); + goto end; + } + fingerprintlen = (size_t)tmplen; + } + break; + case OPT_CRITERION_ALIAS: + if (criterion != 0) { + BIO_printf(bio_err, "%s: criterion already given.\n", + prog); + goto end; + } + criterion = OSSL_STORE_SEARCH_BY_ALIAS; + if (alias != NULL) { + BIO_printf(bio_err, "%s: alias already given.\n", + prog); + goto end; + } + if ((alias = OPENSSL_strdup(opt_arg())) == NULL) { + BIO_printf(bio_err, "%s: can't parse alias argument.\n", + prog); + goto end; + } + break; + case OPT_ENGINE: + e = setup_engine(opt_arg(), 0); + break; + case OPT_MD: + if (!opt_md(opt_unknown(), &digest)) + goto opthelp; + } + } + argc = opt_num_rest(); + argv = opt_rest(); + + if (argc == 0) { + BIO_printf(bio_err, "%s: No URI given, nothing to do...\n", prog); + goto opthelp; + } + if (argc > 1) { + BIO_printf(bio_err, "%s: Unknown extra parameters after URI\n", prog); + goto opthelp; + } + + if (criterion != 0) { + switch (criterion) { + case OSSL_STORE_SEARCH_BY_NAME: + if ((search = OSSL_STORE_SEARCH_by_name(subject)) == NULL) { + ERR_print_errors(bio_err); + goto end; + } + break; + case OSSL_STORE_SEARCH_BY_ISSUER_SERIAL: + if (issuer == NULL || serial == NULL) { + BIO_printf(bio_err, + "%s: both -issuer and -serial must be given.\n", + prog); + goto end; + } + if ((search = OSSL_STORE_SEARCH_by_issuer_serial(issuer, serial)) + == NULL) { + ERR_print_errors(bio_err); + goto end; + } + break; + case OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT: + if ((search = OSSL_STORE_SEARCH_by_key_fingerprint(digest, + fingerprint, + fingerprintlen)) + == NULL) { + ERR_print_errors(bio_err); + goto end; + } + break; + case OSSL_STORE_SEARCH_BY_ALIAS: + if ((search = OSSL_STORE_SEARCH_by_alias(alias)) == NULL) { + ERR_print_errors(bio_err); + goto end; + } + break; + } + } + + if (!app_passwd(passinarg, NULL, &passin, NULL)) { + BIO_printf(bio_err, "Error getting passwords\n"); + goto end; + } + pw_cb_data.password = passin; + pw_cb_data.prompt_info = argv[0]; + + out = bio_open_default(outfile, 'w', FORMAT_TEXT); + if (out == NULL) + goto end; + + ret = process(argv[0], get_ui_method(), &pw_cb_data, + expected, criterion, search, + text, noout, recursive, 0, out, prog); + + end: + OPENSSL_free(alias); + ASN1_INTEGER_free(serial); + X509_NAME_free(subject); + X509_NAME_free(issuer); + OSSL_STORE_SEARCH_free(search); + BIO_free_all(out); + OPENSSL_free(passin); + release_engine(e); + return ret; +} + +static int indent_printf(int indent, BIO *bio, const char *format, ...) +{ + va_list args; + int ret; + + va_start(args, format); + + ret = BIO_printf(bio, "%*s", indent, "") + BIO_vprintf(bio, format, args); + + va_end(args); + return ret; +} + +static int process(const char *uri, const UI_METHOD *uimeth, PW_CB_DATA *uidata, + int expected, int criterion, OSSL_STORE_SEARCH *search, + int text, int noout, int recursive, int indent, BIO *out, + const char *prog) +{ + OSSL_STORE_CTX *store_ctx = NULL; + int ret = 1, items = 0; + + if ((store_ctx = OSSL_STORE_open(uri, uimeth, uidata, NULL, NULL)) + == NULL) { + BIO_printf(bio_err, "Couldn't open file or uri %s\n", uri); + ERR_print_errors(bio_err); + return ret; + } + + if (expected != 0) { + if (!OSSL_STORE_expect(store_ctx, expected)) { + ERR_print_errors(bio_err); + goto end2; + } + } + + if (criterion != 0) { + if (!OSSL_STORE_supports_search(store_ctx, criterion)) { + BIO_printf(bio_err, + "%s: the store scheme doesn't support the given search criteria.\n", + prog); + goto end2; + } + + if (!OSSL_STORE_find(store_ctx, search)) { + ERR_print_errors(bio_err); + goto end2; + } + } + + /* From here on, we count errors, and we'll return the count at the end */ + ret = 0; + + for (;;) { + OSSL_STORE_INFO *info = OSSL_STORE_load(store_ctx); + int type = info == NULL ? 0 : OSSL_STORE_INFO_get_type(info); + const char *infostr = + info == NULL ? NULL : OSSL_STORE_INFO_type_string(type); + + if (info == NULL) { + if (OSSL_STORE_eof(store_ctx)) + break; + + if (OSSL_STORE_error(store_ctx)) { + if (recursive) + ERR_clear_error(); + else + ERR_print_errors(bio_err); + ret++; + continue; + } + + BIO_printf(bio_err, + "ERROR: OSSL_STORE_load() returned NULL without " + "eof or error indications\n"); + BIO_printf(bio_err, " This is an error in the loader\n"); + ERR_print_errors(bio_err); + ret++; + break; + } + + if (type == OSSL_STORE_INFO_NAME) { + const char *name = OSSL_STORE_INFO_get0_NAME(info); + const char *desc = OSSL_STORE_INFO_get0_NAME_description(info); + indent_printf(indent, bio_out, "%d: %s: %s\n", items, infostr, + name); + if (desc != NULL) + indent_printf(indent, bio_out, "%s\n", desc); + } else { + indent_printf(indent, bio_out, "%d: %s\n", items, infostr); + } + + /* + * Unfortunately, PEM_X509_INFO_write_bio() is sorely lacking in + * functionality, so we must figure out how exactly to write things + * ourselves... + */ + switch (type) { + case OSSL_STORE_INFO_NAME: + if (recursive) { + const char *suburi = OSSL_STORE_INFO_get0_NAME(info); + ret += process(suburi, uimeth, uidata, + expected, criterion, search, + text, noout, recursive, indent + 2, out, prog); + } + break; + case OSSL_STORE_INFO_PARAMS: + if (text) + EVP_PKEY_print_params(out, OSSL_STORE_INFO_get0_PARAMS(info), + 0, NULL); + if (!noout) + PEM_write_bio_Parameters(out, + OSSL_STORE_INFO_get0_PARAMS(info)); + break; + case OSSL_STORE_INFO_PKEY: + if (text) + EVP_PKEY_print_private(out, OSSL_STORE_INFO_get0_PKEY(info), + 0, NULL); + if (!noout) + PEM_write_bio_PrivateKey(out, OSSL_STORE_INFO_get0_PKEY(info), + NULL, NULL, 0, NULL, NULL); + break; + case OSSL_STORE_INFO_CERT: + if (text) + X509_print(out, OSSL_STORE_INFO_get0_CERT(info)); + if (!noout) + PEM_write_bio_X509(out, OSSL_STORE_INFO_get0_CERT(info)); + break; + case OSSL_STORE_INFO_CRL: + if (text) + X509_CRL_print(out, OSSL_STORE_INFO_get0_CRL(info)); + if (!noout) + PEM_write_bio_X509_CRL(out, OSSL_STORE_INFO_get0_CRL(info)); + break; + default: + BIO_printf(bio_err, "!!! Unknown code\n"); + ret++; + break; + } + items++; + OSSL_STORE_INFO_free(info); + } + indent_printf(indent, out, "Total found: %d\n", items); + + end2: + if (!OSSL_STORE_close(store_ctx)) { + ERR_print_errors(bio_err); + ret++; + } + + return ret; +} diff --git a/apps/testdsa.h b/apps/testdsa.h index 1e4502a1..3c4b459d 100644 --- a/apps/testdsa.h +++ b/apps/testdsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-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 @@ -8,9 +8,7 @@ */ /* used by speed.c */ -DSA *get_dsa512(void); -DSA *get_dsa1024(void); -DSA *get_dsa2048(void); +DSA *get_dsa(int); static unsigned char dsa512_priv[] = { 0x65, 0xe5, 0xc7, 0x38, 0x60, 0x24, 0xb5, 0x89, 0xd4, 0x9c, 0xeb, 0x4c, @@ -49,40 +47,6 @@ static unsigned char dsa512_g[] = { 0xA2, 0x03, 0x9D, 0x20, }; -DSA *get_dsa512() -{ - DSA *dsa; - BIGNUM *priv_key, *pub_key, *p, *q, *g; - - if ((dsa = DSA_new()) == NULL) - return (NULL); - priv_key = BN_bin2bn(dsa512_priv, sizeof(dsa512_priv), NULL); - pub_key = BN_bin2bn(dsa512_pub, sizeof(dsa512_pub), NULL); - p = BN_bin2bn(dsa512_p, sizeof(dsa512_p), NULL); - q = BN_bin2bn(dsa512_q, sizeof(dsa512_q), NULL); - g = BN_bin2bn(dsa512_g, sizeof(dsa512_g), NULL); - if ((priv_key == NULL) || (pub_key == NULL) || (p == NULL) || (q == NULL) - || (g == NULL)) { - goto err; - } - if (!DSA_set0_pqg(dsa, p, q, g)) - goto err; - p = q = g = NULL; - - if (!DSA_set0_key(dsa, pub_key, priv_key)) - goto err; - - return dsa; - err: - DSA_free(dsa); - BN_free(priv_key); - BN_free(pub_key); - BN_free(p); - BN_free(q); - BN_free(g); - return NULL; -} - static unsigned char dsa1024_priv[] = { 0x7d, 0x21, 0xda, 0xbb, 0x62, 0x15, 0x47, 0x36, 0x07, 0x67, 0x12, 0xe8, 0x8c, 0xaa, 0x1c, 0xcd, 0x38, 0x12, 0x61, 0x18, @@ -135,40 +99,6 @@ static unsigned char dsa1024_g[] = { 0x6A, 0x7E, 0xD8, 0x32, 0xED, 0x0E, 0x02, 0xB8, }; -DSA *get_dsa1024() -{ - DSA *dsa; - BIGNUM *priv_key, *pub_key, *p, *q, *g; - - if ((dsa = DSA_new()) == NULL) - return (NULL); - priv_key = BN_bin2bn(dsa1024_priv, sizeof(dsa1024_priv), NULL); - pub_key = BN_bin2bn(dsa1024_pub, sizeof(dsa1024_pub), NULL); - p = BN_bin2bn(dsa1024_p, sizeof(dsa1024_p), NULL); - q = BN_bin2bn(dsa1024_q, sizeof(dsa1024_q), NULL); - g = BN_bin2bn(dsa1024_g, sizeof(dsa1024_g), NULL); - if ((priv_key == NULL) || (pub_key == NULL) || (p == NULL) || (q == NULL) - || (g == NULL)) { - goto err; - } - if (!DSA_set0_pqg(dsa, p, q, g)) - goto err; - p = q = g = NULL; - - if (!DSA_set0_key(dsa, pub_key, priv_key)) - goto err; - - return dsa; - err: - DSA_free(dsa); - BN_free(priv_key); - BN_free(pub_key); - BN_free(p); - BN_free(q); - BN_free(g); - return NULL; -} - static unsigned char dsa2048_priv[] = { 0x32, 0x67, 0x92, 0xf6, 0xc4, 0xe2, 0xe2, 0xe8, 0xa0, 0x8b, 0x6b, 0x45, 0x0c, 0x8a, 0x76, 0xb0, 0xee, 0xcf, 0x91, 0xa7, @@ -254,25 +184,66 @@ static unsigned char dsa2048_g[] = { 0xF8, 0xB2, 0xE5, 0x38, }; -DSA *get_dsa2048() +typedef struct testdsa_st { + unsigned char *priv; + unsigned char *pub; + unsigned char *p; + unsigned char *g; + unsigned char *q; + int priv_l; + int pub_l; + int p_l; + int g_l; + int q_l; +} testdsa; + +#define set_dsa_ptr(st, bits) \ + do { \ + st.priv = dsa##bits##_priv; \ + st.pub = dsa##bits##_pub; \ + st.p = dsa##bits##_p; \ + st.g = dsa##bits##_g; \ + st.q = dsa##bits##_q; \ + st.priv_l = sizeof(dsa##bits##_priv); \ + st.pub_l = sizeof(dsa##bits##_pub); \ + st.p_l = sizeof(dsa##bits##_p); \ + st.g_l = sizeof(dsa##bits##_g); \ + st.q_l = sizeof(dsa##bits##_q); \ + } while (0) + +DSA *get_dsa(int dsa_bits) { DSA *dsa; BIGNUM *priv_key, *pub_key, *p, *q, *g; + testdsa dsa_t; + + switch (dsa_bits) { + case 512: + set_dsa_ptr(dsa_t, 512); + break; + case 1024: + set_dsa_ptr(dsa_t, 1024); + break; + case 2048: + set_dsa_ptr(dsa_t, 2048); + break; + default: + return NULL; + } if ((dsa = DSA_new()) == NULL) - return (NULL); - priv_key = BN_bin2bn(dsa2048_priv, sizeof(dsa2048_priv), NULL); - pub_key = BN_bin2bn(dsa2048_pub, sizeof(dsa2048_pub), NULL); - p = BN_bin2bn(dsa2048_p, sizeof(dsa2048_p), NULL); - q = BN_bin2bn(dsa2048_q, sizeof(dsa2048_q), NULL); - g = BN_bin2bn(dsa2048_g, sizeof(dsa2048_g), NULL); + return NULL; + priv_key = BN_bin2bn(dsa_t.priv, dsa_t.priv_l, NULL); + pub_key = BN_bin2bn(dsa_t.pub, dsa_t.pub_l, NULL); + p = BN_bin2bn(dsa_t.p, dsa_t.p_l, NULL); + q = BN_bin2bn(dsa_t.q, dsa_t.q_l, NULL); + g = BN_bin2bn(dsa_t.g, dsa_t.g_l, NULL); if ((priv_key == NULL) || (pub_key == NULL) || (p == NULL) || (q == NULL) - || (g == NULL)) { + || (g == NULL)) { goto err; } if (!DSA_set0_pqg(dsa, p, q, g)) goto err; - p = q = g = NULL; if (!DSA_set0_key(dsa, pub_key, priv_key)) goto err; @@ -287,4 +258,3 @@ DSA *get_dsa2048() BN_free(g); return NULL; } - diff --git a/apps/ts.c b/apps/ts.c index 0e07c088..930c1daa 100644 --- a/apps/ts.c +++ b/apps/ts.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,6 +15,7 @@ NON_EMPTY_TRANSLATION_UNIT # include # include # include "apps.h" +# include "progs.h" # include # include # include @@ -79,22 +80,21 @@ static int verify_cb(int ok, X509_STORE_CTX *ctx); typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ENGINE, OPT_CONFIG, OPT_SECTION, OPT_QUERY, OPT_DATA, - OPT_DIGEST, OPT_RAND, OPT_TSPOLICY, OPT_NO_NONCE, OPT_CERT, + OPT_DIGEST, OPT_TSPOLICY, OPT_NO_NONCE, OPT_CERT, OPT_IN, OPT_TOKEN_IN, OPT_OUT, OPT_TOKEN_OUT, OPT_TEXT, OPT_REPLY, OPT_QUERYFILE, OPT_PASSIN, OPT_INKEY, OPT_SIGNER, OPT_CHAIN, OPT_VERIFY, OPT_CAPATH, OPT_CAFILE, OPT_UNTRUSTED, - OPT_MD, OPT_V_ENUM + OPT_MD, OPT_V_ENUM, OPT_R_ENUM } OPTION_CHOICE; -OPTIONS ts_options[] = { +const OPTIONS ts_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"config", OPT_CONFIG, '<', "Configuration file"}, {"section", OPT_SECTION, 's', "Section to use within config file"}, {"query", OPT_QUERY, '-', "Generate a TS query"}, {"data", OPT_DATA, '<', "File to hash"}, {"digest", OPT_DIGEST, 's', "Digest (as a hex string)"}, - {"rand", OPT_RAND, 's', - "Load the file(s) into the random number generator"}, + OPT_R_OPTIONS, {"tspolicy", OPT_TSPOLICY, 's', "Policy OID to use"}, {"no_nonce", OPT_NO_NONCE, '-', "Do not include a nonce"}, {"cert", OPT_CERT, '-', "Put cert request into query"}, @@ -158,7 +158,7 @@ int ts_main(int argc, char **argv) const char *section = NULL; char **helpp; char *password = NULL; - char *data = NULL, *digest = NULL, *rnd = NULL, *policy = NULL; + char *data = NULL, *digest = NULL, *policy = NULL; char *in = NULL, *out = NULL, *queryfile = NULL, *passin = NULL; char *inkey = NULL, *signer = NULL, *chain = NULL, *CApath = NULL; const EVP_MD *md = NULL; @@ -207,8 +207,9 @@ int ts_main(int argc, char **argv) case OPT_DIGEST: digest = opt_arg(); break; - case OPT_RAND: - rnd = opt_arg(); + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; break; case OPT_TSPOLICY: policy = opt_arg(); @@ -275,16 +276,6 @@ int ts_main(int argc, char **argv) if (mode == OPT_ERR || opt_num_rest() != 0) goto opthelp; - /* Seed the random number generator if it is going to be used. */ - if (mode == OPT_QUERY && !no_nonce) { - if (!app_RAND_load_file(NULL, 1) && rnd == NULL) - BIO_printf(bio_err, "warning, not much extra random " - "data, consider using the -rand option\n"); - if (rnd != NULL) - BIO_printf(bio_err, "%ld semi-random bytes loaded\n", - app_RAND_load_files(rnd)); - } - if (mode == OPT_REPLY && passin && !app_passwd(passin, NULL, &password, NULL)) { BIO_printf(bio_err, "Error getting password.\n"); @@ -296,19 +287,14 @@ int ts_main(int argc, char **argv) goto end; /* Check parameter consistency and execute the appropriate function. */ - switch (mode) { - default: - case OPT_ERR: - goto opthelp; - case OPT_QUERY: + if (mode == OPT_QUERY) { if (vpmtouched) goto opthelp; if ((data != NULL) && (digest != NULL)) goto opthelp; ret = !query_command(data, digest, md, policy, no_nonce, cert, in, out, text); - break; - case OPT_REPLY: + } else if (mode == OPT_REPLY) { if (vpmtouched) goto opthelp; if ((in != NULL) && (queryfile != NULL)) @@ -320,21 +306,22 @@ int ts_main(int argc, char **argv) ret = !reply_command(conf, section, engine, queryfile, password, inkey, md, signer, chain, policy, in, token_in, out, token_out, text); - break; - case OPT_VERIFY: + + } else if (mode == OPT_VERIFY) { if ((in == NULL) || !EXACTLY_ONE(queryfile, data, digest)) goto opthelp; ret = !verify_command(data, digest, queryfile, in, token_in, CApath, CAfile, untrusted, vpmtouched ? vpm : NULL); + } else { + goto opthelp; } end: X509_VERIFY_PARAM_free(vpm); - app_RAND_write_file(NULL); NCONF_free(conf); OPENSSL_free(password); - return (ret); + return ret; } /* @@ -501,7 +488,7 @@ static int create_digest(BIO *input, const char *digest, const EVP_MD *md, if (md_value_len < 0) return 0; - if (input) { + if (input != NULL) { unsigned char buffer[4096]; int length; @@ -593,7 +580,7 @@ static int reply_command(CONF *conf, const char *section, const char *engine, } else { response = create_response(conf, section, engine, queryfile, passin, inkey, md, signer, chain, policy); - if (response) + if (response != NULL) BIO_printf(bio_err, "Response has been generated.\n"); else BIO_printf(bio_err, "Response is not generated.\n"); @@ -712,6 +699,8 @@ static TS_RESP *create_response(CONF *conf, const char *section, const char *eng goto end; } + if (!TS_CONF_set_ess_cert_id_digest(conf, section, resp_ctx)) + goto end; if (!TS_CONF_set_def_policy(conf, section, policy, resp_ctx)) goto end; if (!TS_CONF_set_policies(conf, section, resp_ctx)) @@ -747,13 +736,14 @@ static ASN1_INTEGER *serial_cb(TS_RESP_CTX *ctx, void *data) const char *serial_file = (const char *)data; ASN1_INTEGER *serial = next_serial(serial_file); - if (!serial) { + if (serial == NULL) { TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, "Error during serial number " "generation."); TS_RESP_CTX_add_failure_info(ctx, TS_INFO_ADD_INFO_NOT_AVAILABLE); - } else + } else { save_ts_serial(serial_file, serial); + } return serial; } @@ -916,8 +906,9 @@ static TS_VERIFY_CTX *create_verify_ctx(const char *data, const char *digest, goto err; if ((ctx = TS_REQ_to_TS_VERIFY_CTX(request, NULL)) == NULL) goto err; - } else + } else { return NULL; + } /* Add the signature verification flag and arguments. */ TS_VERIFY_CTX_add_flags(ctx, f | TS_VFY_SIGNATURE); diff --git a/apps/tsget.in b/apps/tsget.in index c6193e57..71bcc245 100644 --- a/apps/tsget.in +++ b/apps/tsget.in @@ -1,6 +1,6 @@ #!{- $config{hashbangperl} -} -# Copyright (c) 2002 The OpenTSA Project. All rights reserved. # Copyright 2002-2016 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 diff --git a/apps/verify.c b/apps/verify.c index 0925ee62..5ad6ef41 100644 --- a/apps/verify.c +++ b/apps/verify.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -27,11 +28,11 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, OPT_ENGINE, OPT_CAPATH, OPT_CAFILE, OPT_NOCAPATH, OPT_NOCAFILE, OPT_UNTRUSTED, OPT_TRUSTED, OPT_CRLFILE, OPT_CRL_DOWNLOAD, OPT_SHOW_CHAIN, - OPT_V_ENUM, + OPT_V_ENUM, OPT_NAMEOPT, OPT_VERBOSE } OPTION_CHOICE; -OPTIONS verify_options[] = { +const OPTIONS verify_options[] = { {OPT_HELP_STR, 1, '-', "Usage: %s [options] cert.pem...\n"}, {OPT_HELP_STR, 1, '-', "Valid options are:\n"}, {"help", OPT_HELP, '-', "Display this summary"}, @@ -51,6 +52,7 @@ OPTIONS verify_options[] = { "Attempt to download CRL information for this certificate"}, {"show_chain", OPT_SHOW_CHAIN, '-', "Display information about the certificate chain"}, + {"nameopt", OPT_NAMEOPT, 's', "Various certificate name options"}, OPT_V_OPTIONS, #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, @@ -149,6 +151,10 @@ int verify_main(int argc, char **argv) case OPT_SHOW_CHAIN: show_chain = 1; break; + case OPT_NAMEOPT: + if (!set_nameopt(opt_arg())) + goto end; + break; case OPT_VERBOSE: v_verbose = 1; break; @@ -223,9 +229,9 @@ static int check(X509_STORE *ctx, const char *file, (file == NULL) ? "stdin" : file); goto end; } - if (tchain) + if (tchain != NULL) X509_STORE_CTX_set0_trusted_stack(csc, tchain); - if (crls) + if (crls != NULL) X509_STORE_CTX_set0_crls(csc, crls); i = X509_verify_cert(csc); if (i > 0 && X509_STORE_CTX_get_error(csc) == X509_V_OK) { @@ -242,7 +248,7 @@ static int check(X509_STORE *ctx, const char *file, printf("depth=%d: ", j); X509_NAME_print_ex_fp(stdout, X509_get_subject_name(cert), - 0, XN_FLAG_ONELINE); + 0, get_nameopt()); if (j < num_untrusted) printf(" (untrusted)"); printf("\n"); @@ -268,10 +274,10 @@ static int cb(int ok, X509_STORE_CTX *ctx) X509 *current_cert = X509_STORE_CTX_get_current_cert(ctx); if (!ok) { - if (current_cert) { + if (current_cert != NULL) { X509_NAME_print_ex(bio_err, X509_get_subject_name(current_cert), - 0, XN_FLAG_ONELINE); + 0, get_nameopt()); BIO_printf(bio_err, "\n"); } BIO_printf(bio_err, "%serror %d at %d depth lookup: %s\n", @@ -308,5 +314,5 @@ static int cb(int ok, X509_STORE_CTX *ctx) policies_print(ctx); if (!v_verbose) ERR_clear_error(); - return (ok); + return ok; } diff --git a/apps/version.c b/apps/version.c index 2f8be364..0ff0299d 100644 --- a/apps/version.c +++ b/apps/version.c @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -32,10 +33,10 @@ typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, - OPT_B, OPT_D, OPT_E, OPT_F, OPT_O, OPT_P, OPT_V, OPT_A + OPT_B, OPT_D, OPT_E, OPT_F, OPT_O, OPT_P, OPT_V, OPT_A, OPT_R } OPTION_CHOICE; -OPTIONS version_options[] = { +const OPTIONS version_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"a", OPT_A, '-', "Show all data"}, {"b", OPT_B, '-', "Show build date"}, @@ -44,13 +45,24 @@ OPTIONS version_options[] = { {"f", OPT_F, '-', "Show compiler flags used"}, {"o", OPT_O, '-', "Show some internal datatype options"}, {"p", OPT_P, '-', "Show target build platform"}, + {"r", OPT_R, '-', "Show random seeding options"}, {"v", OPT_V, '-', "Show library version"}, {NULL} }; +#if defined(OPENSSL_RAND_SEED_DEVRANDOM) || defined(OPENSSL_RAND_SEED_EGD) +static void printlist(const char *prefix, const char **dev) +{ + printf("%s (", prefix); + for ( ; *dev != NULL; dev++) + printf(" \"%s\"", *dev); + printf(" )"); +} +#endif + int version_main(int argc, char **argv) { - int ret = 1, dirty = 0; + int ret = 1, dirty = 0, seed = 0; int cflags = 0, version = 0, date = 0, options = 0, platform = 0, dir = 0; int engdir = 0; char *prog; @@ -86,11 +98,14 @@ opthelp: case OPT_P: dirty = platform = 1; break; + case OPT_R: + dirty = seed = 1; + break; case OPT_V: dirty = version = 1; break; case OPT_A: - options = cflags = version = date = platform = dir = engdir = 1; + seed = cflags = version = date = platform = dir = engdir = 1; break; } } @@ -102,12 +117,11 @@ opthelp: version = 1; if (version) { - if (OpenSSL_version_num() == OPENSSL_VERSION_NUMBER) { + if (OpenSSL_version_num() == OPENSSL_VERSION_NUMBER) printf("%s\n", OpenSSL_version(OPENSSL_VERSION)); - } else { + else printf("%s (Library: %s)\n", OPENSSL_VERSION_TEXT, OpenSSL_version(OPENSSL_VERSION)); - } } if (date) printf("%s\n", OpenSSL_version(OPENSSL_BUILT_ON)); @@ -139,7 +153,41 @@ opthelp: printf("%s\n", OpenSSL_version(OPENSSL_DIR)); if (engdir) printf("%s\n", OpenSSL_version(OPENSSL_ENGINES_DIR)); + if (seed) { + printf("Seeding source:"); +#ifdef OPENSSL_RAND_SEED_RTDSC + printf(" rtdsc"); +#endif +#ifdef OPENSSL_RAND_SEED_RDCPU + printf(" rdrand ( rdseed rdrand )"); +#endif +#ifdef OPENSSL_RAND_SEED_LIBRANDOM + printf(" C-library-random"); +#endif +#ifdef OPENSSL_RAND_SEED_GETRANDOM + printf(" getrandom-syscall"); +#endif +#ifdef OPENSSL_RAND_SEED_DEVRANDOM + { + static const char *dev[] = { DEVRANDOM, NULL }; + printlist(" random-device", dev); + } +#endif +#ifdef OPENSSL_RAND_SEED_EGD + { + static const char *dev[] = { DEVRANDOM_EGD, NULL }; + printlist(" EGD", dev); + } +#endif +#ifdef OPENSSL_RAND_SEED_NONE + printf(" none"); +#endif +#ifdef OPENSSL_RAND_SEED_OS + printf(" os-specific"); +#endif + printf("\n"); + } ret = 0; end: - return (ret); + return ret; } diff --git a/apps/vms_term_sock.c b/apps/vms_term_sock.c index bc0c173e..9a90a1e7 100644 --- a/apps/vms_term_sock.c +++ b/apps/vms_term_sock.c @@ -1,4 +1,5 @@ /* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2016 VMS Software, Inc. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -183,7 +184,7 @@ int TerminalSocket (int FunctionCode, int *ReturnSocket) close (TerminalSocketPair[0]); if (TerminalSocketPair[1]) close (TerminalSocketPair[1]); - return (TERM_SOCK_FAILURE); + return TERM_SOCK_FAILURE; } /* @@ -196,7 +197,7 @@ int TerminalSocket (int FunctionCode, int *ReturnSocket) LogMessage ("TerminalSocket: SYS$ASSIGN () - %08X", status); close (TerminalSocketPair[0]); close (TerminalSocketPair[1]); - return (TERM_SOCK_FAILURE); + return TERM_SOCK_FAILURE; } /* @@ -215,7 +216,7 @@ int TerminalSocket (int FunctionCode, int *ReturnSocket) LogMessage ("TerminalSocket: SYS$QIO () - %08X", status); close (TerminalSocketPair[0]); close (TerminalSocketPair[1]); - return (TERM_SOCK_FAILURE); + return TERM_SOCK_FAILURE; } /* @@ -233,7 +234,7 @@ int TerminalSocket (int FunctionCode, int *ReturnSocket) LogMessage ("TerminalSocket: SYS$CANCEL () - %08X", status); close (TerminalSocketPair[0]); close (TerminalSocketPair[1]); - return (TERM_SOCK_FAILURE); + return TERM_SOCK_FAILURE; } /* @@ -244,7 +245,7 @@ int TerminalSocket (int FunctionCode, int *ReturnSocket) LogMessage ("TerminalSocket: SYS$DASSGN () - %08X", status); close (TerminalSocketPair[0]); close (TerminalSocketPair[1]); - return (TERM_SOCK_FAILURE); + return TERM_SOCK_FAILURE; } /* @@ -264,14 +265,14 @@ int TerminalSocket (int FunctionCode, int *ReturnSocket) ** Invalid function code */ LogMessage ("TerminalSocket: Invalid Function Code - %d", FunctionCode); - return (TERM_SOCK_FAILURE); + return TERM_SOCK_FAILURE; break; } /* ** Return success */ - return (TERM_SOCK_SUCCESS); + return TERM_SOCK_SUCCESS; } @@ -311,7 +312,7 @@ static int CreateSocketPair (int SocketFamily, SockDesc1 = socket (SocketFamily, SocketType, 0); if (SockDesc1 < 0) { LogMessage ("CreateSocketPair: socket () - %d", errno); - return (-1); + return -1; } /* @@ -330,7 +331,7 @@ static int CreateSocketPair (int SocketFamily, if (status < 0) { LogMessage ("CreateSocketPair: bind () - %d", errno); close (SockDesc1); - return (-1); + return -1; } /* @@ -340,7 +341,7 @@ static int CreateSocketPair (int SocketFamily, if (status < 0) { LogMessage ("CreateSocketPair: getsockname () - %d", errno); close (SockDesc1); - return (-1); + return -1; } else LocalHostPort = sin.sin_port; @@ -359,7 +360,7 @@ static int CreateSocketPair (int SocketFamily, if (! (status & 1)) { LogMessage ("CreateSocketPair: SYS$BINTIM () - %08X", status); close (SockDesc1); - return (-1); + return -1; } /* @@ -370,7 +371,7 @@ static int CreateSocketPair (int SocketFamily, if (! (status & 1)) { LogMessage ("CreateSocketPair: SYS$ASSIGN () - %08X", status); close (SockDesc1); - return (-1); + return -1; } /* @@ -392,7 +393,7 @@ static int CreateSocketPair (int SocketFamily, LogMessage ("CreateSocketPair: SYS$QIO () - %08X", status); close (SockDesc1); sys$dassgn (TcpDeviceChan); - return (-1); + return -1; } /* @@ -428,7 +429,7 @@ static int CreateSocketPair (int SocketFamily, close (SockDesc1); close (SockDesc2); sys$dassgn (TcpDeviceChan); - return (-1); + return -1; } /* @@ -447,7 +448,7 @@ static int CreateSocketPair (int SocketFamily, close (SockDesc1); close (SockDesc2); sys$dassgn (TcpDeviceChan); - return (-1); + return -1; } /* @@ -467,7 +468,7 @@ static int CreateSocketPair (int SocketFamily, close (SockDesc1); close (SockDesc2); sys$dassgn (TcpDeviceChan); - return (-1); + return -1; } /* @@ -513,7 +514,7 @@ static int TerminalDeviceAst (int astparm) strcat (TerminalDeviceBuff, "\n"); /* - ** Send the data read from the terminal device throught the socket pair + ** Send the data read from the terminal device through the socket pair */ send (TerminalSocketPair[0], TerminalDeviceBuff, TerminalDeviceIosb.iosb$w_bcnt + 1, 0); diff --git a/apps/vms_term_sock.h b/apps/vms_term_sock.h index 662fa0ad..c4d1702d 100644 --- a/apps/vms_term_sock.h +++ b/apps/vms_term_sock.h @@ -1,4 +1,5 @@ /* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2016 VMS Software, Inc. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use diff --git a/apps/win32_init.c b/apps/win32_init.c index ebe92bcd..df4bff41 100644 --- a/apps/win32_init.c +++ b/apps/win32_init.c @@ -302,6 +302,6 @@ void win32_utf8argv(int *argc, char **argv[]) return; } #else -void win32_utf8argv(int &argc, char **argv[]) +void win32_utf8argv(int *argc, char **argv[]) { return; } #endif diff --git a/apps/x509.c b/apps/x509.c index 7a66ea66..1bb9ceff 100644 --- a/apps/x509.c +++ b/apps/x509.c @@ -11,6 +11,7 @@ #include #include #include "apps.h" +#include "progs.h" #include #include #include @@ -33,13 +34,16 @@ static int callb(int ok, X509_STORE_CTX *ctx); static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, - const EVP_MD *digest, CONF *conf, const char *section); + const EVP_MD *digest, CONF *conf, const char *section, + int preserve_dates); static int x509_certify(X509_STORE *ctx, const char *CAfile, const EVP_MD *digest, X509 *x, X509 *xca, EVP_PKEY *pkey, STACK_OF(OPENSSL_STRING) *sigopts, const char *serialfile, int create, int days, int clrext, CONF *conf, - const char *section, ASN1_INTEGER *sno, int reqfile); + const char *section, ASN1_INTEGER *sno, int reqfile, + int preserve_dates); static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt); +static int print_x509v3_exts(BIO *bio, X509 *x, const char *exts); typedef enum OPTION_choice { OPT_ERR = -1, OPT_EOF = 0, OPT_HELP, @@ -56,10 +60,11 @@ typedef enum OPTION_choice { OPT_CLRREJECT, OPT_ALIAS, OPT_CACREATESERIAL, OPT_CLREXT, OPT_OCSPID, OPT_SUBJECT_HASH_OLD, OPT_ISSUER_HASH_OLD, - OPT_BADSIG, OPT_MD, OPT_ENGINE, OPT_NOCERT + OPT_BADSIG, OPT_MD, OPT_ENGINE, OPT_NOCERT, OPT_PRESERVE_DATES, + OPT_R_ENUM, OPT_EXT } OPTION_CHOICE; -OPTIONS x509_options[] = { +const OPTIONS x509_options[] = { {"help", OPT_HELP, '-', "Display this summary"}, {"inform", OPT_INFORM, 'f', "Input format - default PEM (one of DER, NET or PEM)"}, @@ -114,8 +119,10 @@ OPTIONS x509_options[] = { {"CAserial", OPT_CASERIAL, 's', "Serial file"}, {"set_serial", OPT_SET_SERIAL, 's', "Serial number to use"}, {"text", OPT_TEXT, '-', "Print the certificate in text form"}, + {"ext", OPT_EXT, 's', "Print various X509V3 extensions"}, {"C", OPT_C, '-', "Print out C code forms"}, {"extfile", OPT_EXTFILE, '<', "File with X509V3 extensions to add"}, + OPT_R_OPTIONS, {"extensions", OPT_EXTENSIONS, 's', "Section from config file to use"}, {"nameopt", OPT_NAMEOPT, 's', "Various certificate name options"}, {"certopt", OPT_CERTOPT, 's', "Various certificate text options"}, @@ -140,6 +147,7 @@ OPTIONS x509_options[] = { #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, #endif + {"preserve_dates", OPT_PRESERVE_DATES, '-', "preserve existing dates when signing"}, {NULL} }; @@ -157,23 +165,23 @@ int x509_main(int argc, char **argv) X509_STORE *ctx = NULL; const EVP_MD *digest = NULL; char *CAkeyfile = NULL, *CAserial = NULL, *fkeyfile = NULL, *alias = NULL; - char *checkhost = NULL, *checkemail = NULL, *checkip = NULL; + char *checkhost = NULL, *checkemail = NULL, *checkip = NULL, *exts = NULL; char *extsect = NULL, *extfile = NULL, *passin = NULL, *passinarg = NULL; char *infile = NULL, *outfile = NULL, *keyfile = NULL, *CAfile = NULL; - char buf[256], *prog; + char *prog; int x509req = 0, days = DEF_DAYS, modulus = 0, pubkey = 0, pprint = 0; int C = 0, CAformat = FORMAT_PEM, CAkeyformat = FORMAT_PEM; - int fingerprint = 0, reqfile = 0, need_rand = 0, checkend = 0; + int fingerprint = 0, reqfile = 0, checkend = 0; int informat = FORMAT_PEM, outformat = FORMAT_PEM, keyformat = FORMAT_PEM; int next_serial = 0, subject_hash = 0, issuer_hash = 0, ocspid = 0; int noout = 0, sign_flag = 0, CA_flag = 0, CA_createserial = 0, email = 0; int ocsp_uri = 0, trustout = 0, clrtrust = 0, clrreject = 0, aliasout = 0; int ret = 1, i, num = 0, badsig = 0, clrext = 0, nocert = 0; - int text = 0, serial = 0, subject = 0, issuer = 0, startdate = 0; + int text = 0, serial = 0, subject = 0, issuer = 0, startdate = 0, ext = 0; int enddate = 0; time_t checkoffset = 0; - unsigned long nmflag = 0, certflag = 0; - char nmflag_set = 0; + unsigned long certflag = 0; + int preserve_dates = 0; OPTION_CHOICE o; ENGINE *e = NULL; #ifndef OPENSSL_NO_MD5 @@ -224,7 +232,7 @@ int x509_main(int argc, char **argv) outfile = opt_arg(); break; case OPT_REQ: - reqfile = need_rand = 1; + reqfile = 1; break; case OPT_SIGOPT: @@ -234,6 +242,8 @@ int x509_main(int argc, char **argv) goto opthelp; break; case OPT_DAYS: + if (preserve_dates) + goto opthelp; days = atoi(opt_arg()); break; case OPT_PASSIN: @@ -242,18 +252,20 @@ int x509_main(int argc, char **argv) case OPT_EXTFILE: extfile = opt_arg(); break; + case OPT_R_CASES: + if (!opt_rand(o)) + goto end; + break; case OPT_EXTENSIONS: extsect = opt_arg(); break; case OPT_SIGNKEY: keyfile = opt_arg(); sign_flag = ++num; - need_rand = 1; break; case OPT_CA: CAfile = opt_arg(); CA_flag = ++num; - need_rand = 1; break; case OPT_CAKEY: CAkeyfile = opt_arg(); @@ -308,8 +320,7 @@ int x509_main(int argc, char **argv) goto opthelp; break; case OPT_NAMEOPT: - nmflag_set = 1; - if (!set_name_ex(&nmflag, opt_arg())) + if (!set_nameopt(opt_arg())) goto opthelp; break; case OPT_ENGINE: @@ -369,6 +380,10 @@ int x509_main(int argc, char **argv) case OPT_NOOUT: noout = ++num; break; + case OPT_EXT: + ext = ++num; + exts = opt_arg(); + break; case OPT_NOCERT: nocert = 1; break; @@ -435,6 +450,11 @@ int x509_main(int argc, char **argv) case OPT_CHECKIP: checkip = opt_arg(); break; + case OPT_PRESERVE_DATES: + if (days != DEF_DAYS) + goto opthelp; + preserve_dates = 1; + break; case OPT_MD: if (!opt_md(opt_unknown(), &digest)) goto opthelp; @@ -447,11 +467,9 @@ int x509_main(int argc, char **argv) goto opthelp; } - if (!nmflag_set) - nmflag = XN_FLAG_ONELINE; - - if (need_rand) - app_RAND_load_file(NULL, 0); + out = bio_open_default(outfile, 'w', outformat); + if (out == NULL) + goto end; if (!app_passwd(passinarg, NULL, &passin, NULL)) { BIO_printf(bio_err, "Error getting password\n"); @@ -463,7 +481,7 @@ int x509_main(int argc, char **argv) goto end; } - if (fkeyfile) { + if (fkeyfile != NULL) { fkey = load_pubkey(fkeyfile, keyformat, 0, NULL, e, "Forced key"); if (fkey == NULL) goto end; @@ -477,13 +495,13 @@ int x509_main(int argc, char **argv) goto end; } - if (extfile) { + if (extfile != NULL) { X509V3_CTX ctx2; if ((extconf = app_load_config(extfile)) == NULL) goto end; - if (!extsect) { + if (extsect == NULL) { extsect = NCONF_get_string(extconf, "default", "extensions"); - if (!extsect) { + if (extsect == NULL) { ERR_clear_error(); extsect = "default"; } @@ -531,11 +549,12 @@ int x509_main(int argc, char **argv) BIO_printf(bio_err, "Signature did not match the certificate request\n"); goto end; - } else + } else { BIO_printf(bio_err, "Signature ok\n"); + } print_name(bio_err, "subject=", X509_REQ_get_subject_name(req), - nmflag); + get_nameopt()); if ((x = X509_new()) == NULL) goto end; @@ -548,8 +567,9 @@ int x509_main(int argc, char **argv) goto end; ASN1_INTEGER_free(sno); sno = NULL; - } else if (!X509_set_serialNumber(x, sno)) + } else if (!X509_set_serialNumber(x, sno)) { goto end; + } if (!X509_set_issuer_name(x, X509_REQ_get_subject_name(req))) goto end; @@ -558,14 +578,15 @@ int x509_main(int argc, char **argv) if (!set_cert_times(x, NULL, NULL, days)) goto end; - if (fkey) + if (fkey != NULL) { X509_set_pubkey(x, fkey); - else { + } else { pkey = X509_REQ_get0_pubkey(req); X509_set_pubkey(x, pkey); } - } else + } else { x = load_cert(infile, informat, "Certificate"); + } if (x == NULL) goto end; @@ -575,13 +596,11 @@ int x509_main(int argc, char **argv) goto end; } - out = bio_open_default(outfile, 'w', outformat); - if (out == NULL) - goto end; - - if (!noout || text || next_serial) + if (!noout || text || next_serial) { OBJ_create("2.99999.3", "SET.ex3", "SET x509v3 extension 3"); + } + if (alias) X509_alias_set1(x, (unsigned char *)alias, -1); @@ -590,7 +609,7 @@ int x509_main(int argc, char **argv) if (clrreject) X509_reject_clear(x); - if (trust) { + if (trust != NULL) { for (i = 0; i < sk_ASN1_OBJECT_num(trust); i++) { objtmp = sk_ASN1_OBJECT_value(trust, i); X509_add1_trust_object(x, objtmp); @@ -598,7 +617,7 @@ int x509_main(int argc, char **argv) objtmp = NULL; } - if (reject) { + if (reject != NULL) { for (i = 0; i < sk_ASN1_OBJECT_num(reject); i++) { objtmp = sk_ASN1_OBJECT_value(reject, i); X509_add1_reject_object(x, objtmp); @@ -616,10 +635,10 @@ int x509_main(int argc, char **argv) if (num) { for (i = 1; i <= num; i++) { if (issuer == i) { - print_name(out, "issuer=", X509_get_issuer_name(x), nmflag); + print_name(out, "issuer=", X509_get_issuer_name(x), get_nameopt()); } else if (subject == i) { print_name(out, "subject=", - X509_get_subject_name(x), nmflag); + X509_get_subject_name(x), get_nameopt()); } else if (serial == i) { BIO_printf(out, "serial="); i2a_ASN1_INTEGER(out, X509_get_serialNumber(x)); @@ -724,13 +743,10 @@ int x509_main(int argc, char **argv) char *m; int len; - X509_NAME_oneline(X509_get_subject_name(x), buf, sizeof(buf)); - BIO_printf(out, "/*\n" - " * Subject: %s\n", buf); - - X509_NAME_oneline(X509_get_issuer_name(x), buf, sizeof(buf)); - BIO_printf(out, " * Issuer: %s\n" - " */\n", buf); + print_name(out, "/*\n" + " * Subject: ", X509_get_subject_name(x), get_nameopt()); + print_name(out, " * Issuer: ", X509_get_issuer_name(x), get_nameopt()); + BIO_puts(out, " */\n"); len = i2d_X509(x, NULL); m = app_malloc(len, "x509 name buffer"); @@ -745,7 +761,7 @@ int x509_main(int argc, char **argv) print_array(out, "the_certificate", len, (unsigned char *)m); OPENSSL_free(m); } else if (text == i) { - X509_print_ex(out, x, nmflag, certflag); + X509_print_ex(out, x, get_nameopt(), certflag); } else if (startdate == i) { BIO_puts(out, "notBefore="); ASN1_TIME_print(out, X509_get0_notBefore(x)); @@ -760,7 +776,7 @@ int x509_main(int argc, char **argv) unsigned char md[EVP_MAX_MD_SIZE]; const EVP_MD *fdig = digest; - if (!fdig) + if (fdig == NULL) fdig = EVP_sha1(); if (!X509_digest(x, fdig, md, &n)) { @@ -785,8 +801,7 @@ int x509_main(int argc, char **argv) goto end; } - assert(need_rand); - if (!sign(x, Upkey, days, clrext, digest, extconf, extsect)) + if (!sign(x, Upkey, days, clrext, digest, extconf, extsect, preserve_dates)) goto end; } else if (CA_flag == i) { BIO_printf(bio_err, "Getting CA Private Key\n"); @@ -797,11 +812,10 @@ int x509_main(int argc, char **argv) goto end; } - assert(need_rand); if (!x509_certify(ctx, CAfile, digest, x, xca, CApkey, sigopts, CAserial, CA_createserial, days, clrext, - extconf, extsect, sno, reqfile)) + extconf, extsect, sno, reqfile, preserve_dates)) goto end; } else if (x509req == i) { EVP_PKEY *pk; @@ -826,12 +840,14 @@ int x509_main(int argc, char **argv) goto end; } if (!noout) { - X509_REQ_print(out, rq); + X509_REQ_print_ex(out, rq, get_nameopt(), X509_FLAG_COMPAT); PEM_write_bio_X509_REQ(out, rq); } noout = 1; } else if (ocspid == i) { X509_ocspid_print(out, x); + } else if (ext == i) { + print_x509v3_exts(out, x, exts); } } } @@ -856,9 +872,9 @@ int x509_main(int argc, char **argv) goto end; } - if (outformat == FORMAT_ASN1) + if (outformat == FORMAT_ASN1) { i = i2d_X509_bio(out, x); - else if (outformat == FORMAT_PEM) { + } else if (outformat == FORMAT_PEM) { if (trustout) i = PEM_write_bio_X509_AUX(out, x); else @@ -874,8 +890,6 @@ int x509_main(int argc, char **argv) } ret = 0; end: - if (need_rand) - app_RAND_write_file(NULL); NCONF_free(extconf); BIO_free_all(out); X509_STORE_free(ctx); @@ -893,33 +907,27 @@ int x509_main(int argc, char **argv) ASN1_OBJECT_free(objtmp); release_engine(e); OPENSSL_free(passin); - return (ret); + return ret; } -static ASN1_INTEGER *x509_load_serial(const char *CAfile, const char *serialfile, - int create) +static ASN1_INTEGER *x509_load_serial(const char *CAfile, + const char *serialfile, int create) { - char *buf = NULL, *p; + char *buf = NULL; ASN1_INTEGER *bs = NULL; BIGNUM *serial = NULL; - size_t len; - len = ((serialfile == NULL) - ? (strlen(CAfile) + strlen(POSTFIX) + 1) - : (strlen(serialfile))) + 1; - buf = app_malloc(len, "serial# buffer"); if (serialfile == NULL) { - OPENSSL_strlcpy(buf, CAfile, len); - for (p = buf; *p; p++) - if (*p == '.') { - *p = '\0'; - break; - } - OPENSSL_strlcat(buf, POSTFIX, len); - } else - OPENSSL_strlcpy(buf, serialfile, len); + const char *p = strchr(CAfile, '.'); + size_t len = p != NULL ? (size_t)(p - CAfile) : strlen(CAfile); - serial = load_serial(buf, create, NULL); + buf = app_malloc(len + sizeof(POSTFIX), "serial# buffer"); + memcpy(buf, CAfile, len); + memcpy(buf + len, POSTFIX, sizeof(POSTFIX)); + serialfile = buf; + } + + serial = load_serial(serialfile, create, NULL); if (serial == NULL) goto end; @@ -928,7 +936,7 @@ static ASN1_INTEGER *x509_load_serial(const char *CAfile, const char *serialfile goto end; } - if (!save_serial(buf, NULL, serial, &bs)) + if (!save_serial(serialfile, NULL, serial, &bs)) goto end; end: @@ -942,7 +950,7 @@ static int x509_certify(X509_STORE *ctx, const char *CAfile, const EVP_MD *diges STACK_OF(OPENSSL_STRING) *sigopts, const char *serialfile, int create, int days, int clrext, CONF *conf, const char *section, - ASN1_INTEGER *sno, int reqfile) + ASN1_INTEGER *sno, int reqfile, int preserve_dates) { int ret = 0; ASN1_INTEGER *bs = NULL; @@ -986,7 +994,7 @@ static int x509_certify(X509_STORE *ctx, const char *CAfile, const EVP_MD *diges if (!X509_set_serialNumber(x, bs)) goto end; - if (!set_cert_times(x, NULL, NULL, days)) + if (!preserve_dates && !set_cert_times(x, NULL, NULL, days)) goto end; if (clrext) { @@ -994,7 +1002,7 @@ static int x509_certify(X509_STORE *ctx, const char *CAfile, const EVP_MD *diges X509_delete_ext(x, 0); } - if (conf) { + if (conf != NULL) { X509V3_CTX ctx2; X509_set_version(x, 2); /* version 3 certificate */ X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0); @@ -1050,12 +1058,13 @@ static int callb(int ok, X509_STORE_CTX *ctx) /* self sign */ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, - const EVP_MD *digest, CONF *conf, const char *section) + const EVP_MD *digest, CONF *conf, const char *section, + int preserve_dates) { if (!X509_set_issuer_name(x, X509_get_subject_name(x))) goto err; - if (!set_cert_times(x, NULL, NULL, days)) + if (!preserve_dates && !set_cert_times(x, NULL, NULL, days)) goto err; if (!X509_set_pubkey(x, pkey)) goto err; @@ -1063,7 +1072,7 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext, while (X509_get_ext_count(x) > 0) X509_delete_ext(x, 0); } - if (conf) { + if (conf != NULL) { X509V3_CTX ctx; X509_set_version(x, 2); /* version 3 certificate */ X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0); @@ -1097,3 +1106,93 @@ static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt) } return 1; } + +static int parse_ext_names(char *names, const char **result) +{ + char *p, *q; + int cnt = 0, len = 0; + + p = q = names; + len = strlen(names); + + while (q - names <= len) { + if (*q != ',' && *q != '\0') { + q++; + continue; + } + if (p != q) { + /* found */ + if (result != NULL) { + result[cnt] = p; + *q = '\0'; + } + cnt++; + } + p = ++q; + } + + return cnt; +} + +static int print_x509v3_exts(BIO *bio, X509 *x, const char *ext_names) +{ + const STACK_OF(X509_EXTENSION) *exts = NULL; + STACK_OF(X509_EXTENSION) *exts2 = NULL; + X509_EXTENSION *ext = NULL; + ASN1_OBJECT *obj; + int i, j, ret = 0, num, nn = 0; + const char *sn, **names = NULL; + char *tmp_ext_names = NULL; + + exts = X509_get0_extensions(x); + if ((num = sk_X509_EXTENSION_num(exts)) <= 0) { + BIO_printf(bio, "No extensions in certificate\n"); + ret = 1; + goto end; + } + + /* parse comma separated ext name string */ + if ((tmp_ext_names = OPENSSL_strdup(ext_names)) == NULL) + goto end; + if ((nn = parse_ext_names(tmp_ext_names, NULL)) == 0) { + BIO_printf(bio, "Invalid extension names: %s\n", ext_names); + goto end; + } + if ((names = OPENSSL_malloc(sizeof(char *) * nn)) == NULL) + goto end; + parse_ext_names(tmp_ext_names, names); + + for (i = 0; i < num; i++) { + ext = sk_X509_EXTENSION_value(exts, i); + + /* check if this ext is what we want */ + obj = X509_EXTENSION_get_object(ext); + sn = OBJ_nid2sn(OBJ_obj2nid(obj)); + if (sn == NULL || strcmp(sn, "UNDEF") == 0) + continue; + + for (j = 0; j < nn; j++) { + if (strcmp(sn, names[j]) == 0) { + /* push the extension into a new stack */ + if (exts2 == NULL + && (exts2 = sk_X509_EXTENSION_new_null()) == NULL) + goto end; + if (!sk_X509_EXTENSION_push(exts2, ext)) + goto end; + } + } + } + + if (!sk_X509_EXTENSION_num(exts2)) { + BIO_printf(bio, "No extensions matched with %s\n", ext_names); + ret = 1; + goto end; + } + + ret = X509V3_extensions_print(bio, NULL, exts2, 0, 0); + end: + sk_X509_EXTENSION_free(exts2); + OPENSSL_free(names); + OPENSSL_free(tmp_ext_names); + return ret; +} diff --git a/appveyor.yml b/appveyor.yml index 8dd6cb6f..5074a311 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,45 +1,65 @@ platform: - - x86 - x64 + - x86 environment: + fast_finish: true matrix: - VSVER: 14 configuration: - - plain - shared + - plain before_build: - ps: >- If ($env:Platform -Match "x86") { $env:VCVARS_PLATFORM="x86" - $env:TARGET="VC-WIN32" + $env:TARGET="VC-WIN32 no-asm" } Else { $env:VCVARS_PLATFORM="amd64" - $env:TARGET="VC-WIN64A" + $env:TARGET="VC-WIN64A-masm" } - ps: >- If ($env:Configuration -Match "shared") { - $env:SHARED="" + $env:SHARED="no-makedepend" } Else { - $env:SHARED="no-shared" + $env:SHARED="no-shared no-makedepend" } - ps: $env:VSCOMNTOOLS=(Get-Content ("env:VS" + "$env:VSVER" + "0COMNTOOLS")) - call "%VSCOMNTOOLS%\..\..\VC\vcvarsall.bat" %VCVARS_PLATFORM% - mkdir _build - cd _build - - perl ..\Configure %TARGET% no-asm %SHARED% + - perl ..\Configure %TARGET% %SHARED% + - perl configdata.pm --dump - cd .. + - ps: >- + if (-not $env:APPVEYOR_PULL_REQUEST_NUMBER` + -or (&git log -2 | Select-String "\[extended tests\]") ) { + $env:EXTENDED_TESTS="yes" + } build_script: - cd _build - - nmake + - ps: >- + If ($env:Configuration -Match "shared" -or $env:EXTENDED_TESTS) { + cmd /c "nmake 2>&1" + } - cd .. test_script: - cd _build - - nmake test - - mkdir ..\_install - - nmake install install_docs DESTDIR=..\_install + - ps: >- + If ($env:Configuration -Match "shared" -or $env:EXTENDED_TESTS) { + if ($env:EXTENDED_TESTS) { + cmd /c "nmake test V=1 2>&1" + } Else { + cmd /c "nmake test V=1 TESTS=-test_fuzz 2>&1" + } + } + - ps: >- + if ($env:EXTENDED_TESTS) { + mkdir ..\_install + cmd /c "nmake install install_docs DESTDIR=..\_install 2>&1" + } - cd .. diff --git a/build.info b/build.info index fa136dc4..13ca90d3 100644 --- a/build.info +++ b/build.info @@ -1,6 +1,14 @@ +{- + our $sover = $config{shlib_version_number}; + our $sover_filename = $sover; + $sover_filename =~ s|\.|_|g + if $config{target} =~ /^mingw/ || $config{target} =~ /^VC-/; + $sover_filename = + sprintf "%02d%02d", split m|\.|, $config{shlib_version_number} + if $config{target} =~ /^vms/; + ""; +-} LIBS=libcrypto libssl -ORDINALS[libcrypto]=crypto -ORDINALS[libssl]=ssl INCLUDE[libcrypto]=. crypto/include include INCLUDE[libssl]=. include DEPEND[libssl]=libcrypto @@ -16,16 +24,62 @@ GENERATE[crypto/include/internal/bn_conf.h]=crypto/include/internal/bn_conf.h.in DEPEND[crypto/include/internal/dso_conf.h]=configdata.pm GENERATE[crypto/include/internal/dso_conf.h]=crypto/include/internal/dso_conf.h.in +IF[{- defined $target{shared_defflag} -}] + IF[{- $config{target} =~ /^mingw/ -}] + GENERATE[libcrypto.def]=util/mkdef.pl crypto 32 + DEPEND[libcrypto.def]=util/libcrypto.num + GENERATE[libssl.def]=util/mkdef.pl ssl 32 + DEPEND[libssl.def]=util/libssl.num + + SHARED_SOURCE[libcrypto]=libcrypto.def + SHARED_SOURCE[libssl]=libssl.def + ELSE + GENERATE[libcrypto.map]=util/mkdef.pl crypto linux + DEPEND[libcrypto.map]=util/libcrypto.num + GENERATE[libssl.map]=util/mkdef.pl ssl linux + DEPEND[libssl.map]=util/libssl.num + + SHARED_SOURCE[libcrypto]=libcrypto.map + SHARED_SOURCE[libssl]=libssl.map + ENDIF +ENDIF +# VMS and VC don't have parametrised .def / .symvec generation, so they get +# special treatment, since we know they do use these files +IF[{- $config{target} =~ /^VC-/ -}] + GENERATE[libcrypto.def]=util/mkdef.pl crypto 32 + DEPEND[libcrypto.def]=util/libcrypto.num + GENERATE[libssl.def]=util/mkdef.pl ssl 32 + DEPEND[libssl.def]=util/libssl.num + + SHARED_SOURCE[libcrypto]=libcrypto.def + SHARED_SOURCE[libssl]=libssl.def +ELSIF[{- $config{target} =~ /^vms/ -}] + GENERATE[libcrypto.opt]=util/mkdef.pl crypto "VMS" + DEPEND[libcrypto.opt]=util/libcrypto.num + GENERATE[libssl.opt]=util/mkdef.pl ssl "VMS" + DEPEND[libssl.opt]=util/libssl.num + + SHARED_SOURCE[libcrypto]=libcrypto.opt + SHARED_SOURCE[libssl]=libssl.opt +ENDIF + +IF[{- $config{target} =~ /^(?:Cygwin|mingw|VC-)/ -}] + GENERATE[libcrypto.rc]=util/mkrc.pl libcrypto + GENERATE[libssl.rc]=util/mkrc.pl libssl + + SHARED_SOURCE[libcrypto]=libcrypto.rc + SHARED_SOURCE[libssl]=libssl.rc +ENDIF IF[{- $config{target} =~ /^Cygwin/ -}] - SHARED_NAME[libcrypto]=cygcrypto-{- $config{shlib_major}.".".$config{shlib_minor} -} - SHARED_NAME[libssl]=cygssl-{- $config{shlib_major}.".".$config{shlib_minor} -} + SHARED_NAME[libcrypto]=cygcrypto-{- $sover_filename -} + SHARED_NAME[libssl]=cygssl-{- $sover_filename -} ELSIF[{- $config{target} =~ /^mingw/ -}] - SHARED_NAME[libcrypto]=libcrypto-{- $config{shlib_major}."_".$config{shlib_minor} -}{- $config{target} eq "mingw64" ? "-x64" : "" -} - SHARED_NAME[libssl]=libssl-{- $config{shlib_major}."_".$config{shlib_minor} -}{- $config{target} eq "mingw64" ? "-x64" : "" -} + SHARED_NAME[libcrypto]=libcrypto-{- $sover_filename -}{- $config{target} eq "mingw64" ? "-x64" : "" -} + SHARED_NAME[libssl]=libssl-{- $sover_filename -}{- $config{target} eq "mingw64" ? "-x64" : "" -} ELSIF[{- $config{target} =~ /^VC-/ -}] - SHARED_NAME[libcrypto]=libcrypto-{- $config{shlib_major}."_".$config{shlib_minor} -}{- $target{multilib} -} - SHARED_NAME[libssl]=libssl-{- $config{shlib_major}."_".$config{shlib_minor} -}{- $target{multilib} -} + SHARED_NAME[libcrypto]=libcrypto-{- $sover_filename -}{- $target{multilib} -} + SHARED_NAME[libssl]=libssl-{- $sover_filename -}{- $target{multilib} -} ENDIF # VMS has a cultural standard where all libraries are prefixed. @@ -36,6 +90,6 @@ ENDIF IF[{- $config{target} =~ /^vms/ -}] RENAME[libcrypto]=ossl$libcrypto{- $target{pointer_size} -} RENAME[libssl]=ossl$libssl{- $target{pointer_size} -} - SHARED_NAME[libcrypto]=ossl$libcrypto{- sprintf "%02d%02d", $config{shlib_major}, $config{shlib_minor} -}_shr{- $target{pointer_size} -} - SHARED_NAME[libssl]=ossl$libssl{- sprintf "%02d%02d", $config{shlib_major}, $config{shlib_minor} -}_shr{- $target{pointer_size} -} + SHARED_NAME[libcrypto]=ossl$libcrypto{- $sover_filename -}_shr{- $target{pointer_size} -} + SHARED_NAME[libssl]=ossl$libssl{- $sover_filename -}_shr{- $target{pointer_size} -} ENDIF diff --git a/config b/config index 35e849a9..00f90876 100755 --- a/config +++ b/config @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 1998-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 @@ -35,7 +35,8 @@ See INSTALL for instructions. EOF ;; -*) options=$options" $i" ;; +*) i=`echo "$i" | sed -e "s|'|'\\\\\\''|g"` + options="$options '$i'" ;; esac done @@ -187,6 +188,10 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in echo "${MACH}-${ARCH}-freebsd${VERS}"; exit 0 ;; + DragonFly:*) + echo "${MACHINE}-whatever-dragonfly"; exit 0 + ;; + FreeBSD:*) echo "${MACHINE}-whatever-freebsd"; exit 0 ;; @@ -450,13 +455,6 @@ case "$GUESSOS" in OUT=uClinux-dist ;; mips3-sgi-irix) - #CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'` - #CPU=${CPU:-0} - #if [ $CPU -ge 5000 ]; then - # options="$options -mips4" - #else - # options="$options -mips3" - #fi OUT="irix-mips3-$CC" ;; mips4-sgi-irix64) @@ -466,13 +464,6 @@ case "$GUESSOS" in echo " You have about 5 seconds to press Ctrl-C to abort." (trap "stty `stty -g`; exit 0" 2 0; stty -icanon min 0 time 50; read waste) <&1 fi - #CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'` - #CPU=${CPU:-0} - #if [ $CPU -ge 5000 ]; then - # options="$options -mips4" - #else - # options="$options -mips3" - #fi OUT="irix-mips3-$CC" ;; ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;; @@ -498,9 +489,7 @@ case "$GUESSOS" in echo " invoke 'KERNEL_BITS=64 $THERE/config $options'." if [ "$DRYRUN" = "false" -a -t 1 ]; then echo " You have about 5 seconds to press Ctrl-C to abort." - # The stty technique used elsewhere doesn't work on - # MacOS. At least, right now on this Mac. - sleep 5 + (trap "stty `stty -g`; exit 1" 2; stty -icanon min 0 time 50; read waste; exit 0) <&1 || exit fi fi if [ "$ISA64" = "1" -a "$KERNEL_BITS" = "64" ]; then @@ -509,16 +498,6 @@ case "$GUESSOS" in OUT="darwin-i386-cc" fi ;; x86_64-apple-darwin*) - if [ -z "$KERNEL_BITS" ]; then - echo "WARNING! If you wish to build 32-bit library, then you have to" - echo " invoke 'KERNEL_BITS=32 $THERE/config $options'." - if [ "$DRYRUN" = "false" -a -t 1 ]; then - echo " You have about 5 seconds to press Ctrl-C to abort." - # The stty technique used elsewhere doesn't work on - # MacOS. At least, right now on this Mac. - sleep 5 - fi - fi if [ "$KERNEL_BITS" = "32" ]; then OUT="darwin-i386-cc" else @@ -713,6 +692,7 @@ case "$GUESSOS" in powerpc64-*-*bsd*) OUT="BSD-generic64"; options="$options -DB_ENDIAN" ;; sparc64-*-*bsd*) OUT="BSD-sparc64" ;; ia64-*-*bsd*) OUT="BSD-ia64" ;; + x86_64-*-dragonfly*) OUT="BSD-x86_64" ;; amd64-*-*bsd*) OUT="BSD-x86_64" ;; *86*-*-*bsd*) # mimic ld behaviour when it's looking for libc... if [ -L /usr/lib/libc.so ]; then # [Free|Net]BSD @@ -869,7 +849,7 @@ case "$GUESSOS" in i386-*) options="$options 386" ;; esac -for i in aes bf camellia cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 ripemd rsa seed sha +for i in aes aria bf camellia cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 ripemd rsa seed sha sm3 sm4 do if [ ! -d $THERE/crypto/$i ] then @@ -919,15 +899,21 @@ OUT="$OUT" $PERL $THERE/Configure LIST | grep "$OUT" > /dev/null if [ $? = "0" ]; then - echo Configuring for $OUT - if [ "$VERBOSE" = "true" ]; then echo $PERL $THERE/Configure $OUT $options fi if [ "$DRYRUN" = "false" ]; then - $PERL $THERE/Configure $OUT $options + # eval to make sure quoted options, possibly with spaces inside, + # are treated right + eval $PERL $THERE/Configure $OUT $options fi else echo "This system ($OUT) is not supported. See file INSTALL for details." + exit 1 +fi + +if [ "$OUT" = "darwin64-x86_64-cc" ]; then + echo "WARNING! If you wish to build 32-bit libraries, then you have to" + echo " invoke 'KERNEL_BITS=32 $THERE/config $options'." fi ) diff --git a/crypto/LPdir_nyi.c b/crypto/LPdir_nyi.c index 049044c4..b02449f7 100644 --- a/crypto/LPdir_nyi.c +++ b/crypto/LPdir_nyi.c @@ -8,6 +8,9 @@ */ /* + * This file is dual-licensed and is also available under the following + * terms: + * * Copyright (c) 2004, Richard Levitte * All rights reserved. * diff --git a/crypto/LPdir_unix.c b/crypto/LPdir_unix.c index 1bb2940b..6648a60c 100644 --- a/crypto/LPdir_unix.c +++ b/crypto/LPdir_unix.c @@ -8,6 +8,9 @@ */ /* + * This file is dual-licensed and is also available under the following + * terms: + * * Copyright (c) 2004, Richard Levitte * All rights reserved. * diff --git a/crypto/LPdir_vms.c b/crypto/LPdir_vms.c index 1a5b60fe..e35363fd 100644 --- a/crypto/LPdir_vms.c +++ b/crypto/LPdir_vms.c @@ -8,6 +8,9 @@ */ /* + * This file is dual-licensed and is also available under the following + * terms: + * * Copyright (c) 2004, Richard Levitte * All rights reserved. * diff --git a/crypto/LPdir_win.c b/crypto/LPdir_win.c index 8f674d30..1dc1ef12 100644 --- a/crypto/LPdir_win.c +++ b/crypto/LPdir_win.c @@ -8,6 +8,9 @@ */ /* + * This file is dual-licensed and is also available under the following + * terms: + * * Copyright (c) 2004, Richard Levitte * All rights reserved. * diff --git a/crypto/LPdir_win32.c b/crypto/LPdir_win32.c index 59ed4857..edceb98d 100644 --- a/crypto/LPdir_win32.c +++ b/crypto/LPdir_win32.c @@ -8,6 +8,9 @@ */ /* + * This file is dual-licensed and is also available under the following + * terms: + * * Copyright (c) 2004, Richard Levitte * All rights reserved. * diff --git a/crypto/LPdir_wince.c b/crypto/LPdir_wince.c index dbc10529..a24e7382 100644 --- a/crypto/LPdir_wince.c +++ b/crypto/LPdir_wince.c @@ -8,6 +8,9 @@ */ /* + * This file is dual-licensed and is also available under the following + * terms: + * * Copyright (c) 2004, Richard Levitte * All rights reserved. * diff --git a/crypto/aes/aes_core.c b/crypto/aes/aes_core.c index bd5c7793..f1f11fd8 100644 --- a/crypto/aes/aes_core.c +++ b/crypto/aes/aes_core.c @@ -14,9 +14,9 @@ * * Optimised ANSI C code for the Rijndael cipher (now AES) * - * @author Vincent Rijmen - * @author Antoon Bosselaers - * @author Paulo Barreto + * @author Vincent Rijmen + * @author Antoon Bosselaers + * @author Paulo Barreto * * This code is hereby placed in the public domain. * diff --git a/crypto/aes/aes_x86core.c b/crypto/aes/aes_x86core.c index 95b49bba..1b660d71 100644 --- a/crypto/aes/aes_x86core.c +++ b/crypto/aes/aes_x86core.c @@ -7,6 +7,14 @@ * https://www.openssl.org/source/license.html */ +/* + * This is experimental x86[_64] derivative. It assumes little-endian + * byte order and expects CPU to sustain unaligned memory references. + * It is used as playground for cache-time attack mitigations and + * serves as reference C implementation for x86[_64] as well as some + * other assembly modules. + */ + /** * rijndael-alg-fst.c * @@ -14,9 +22,9 @@ * * Optimised ANSI C code for the Rijndael cipher (now AES) * - * @author Vincent Rijmen - * @author Antoon Bosselaers - * @author Paulo Barreto + * @author Vincent Rijmen + * @author Antoon Bosselaers + * @author Paulo Barreto * * This code is hereby placed in the public domain. * @@ -33,15 +41,6 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * This is experimental x86[_64] derivative. It assumes little-endian - * byte order and expects CPU to sustain unaligned memory references. - * It is used as playground for cache-time attack mitigations and - * serves as reference C implementation for x86[_64] assembler. - * - * - */ - #include diff --git a/crypto/aes/asm/aes-586.pl b/crypto/aes/asm/aes-586.pl index 1ba35650..29059edf 100755 --- a/crypto/aes/asm/aes-586.pl +++ b/crypto/aes/asm/aes-586.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -39,7 +39,7 @@ # for scaling too, I [try to] avoid the latter by favoring off-by-2 # shifts and masking the result with 0xFF<<2 instead of "boring" 0xFF. # -# As was shown by Dean Gaudet , the above note turned +# As was shown by Dean Gaudet, the above note turned out to be # void. Performance improvement with off-by-2 shifts was observed on # intermediate implementation, which was spilling yet another register # to stack... Final offset*4 code below runs just a tad faster on P4, @@ -55,8 +55,8 @@ # better performance on most recent µ-archs... # # Third version adds AES_cbc_encrypt implementation, which resulted in -# up to 40% performance imrovement of CBC benchmark results. 40% was -# observed on P4 core, where "overall" imrovement coefficient, i.e. if +# up to 40% performance improvement of CBC benchmark results. 40% was +# observed on P4 core, where "overall" improvement coefficient, i.e. if # compared to PIC generated by GCC and in CBC mode, was observed to be # as large as 4x:-) CBC performance is virtually identical to ECB now # and on some platforms even better, e.g. 17.6 "small" cycles/byte on @@ -123,7 +123,7 @@ # words every cache-line is *guaranteed* to be accessed within ~50 # cycles window. Why just SSE? Because it's needed on hyper-threading # CPU! Which is also why it's prefetched with 64 byte stride. Best -# part is that it has no negative effect on performance:-) +# part is that it has no negative effect on performance:-) # # Version 4.3 implements switch between compact and non-compact block # functions in AES_cbc_encrypt depending on how much data was asked @@ -159,7 +159,7 @@ # combinations then attack becomes infeasible. This is why revised # AES_cbc_encrypt "dares" to switch to larger S-box when larger chunk # of data is to be processed in one stroke. The current size limit of -# 512 bytes is chosen to provide same [diminishigly low] probability +# 512 bytes is chosen to provide same [diminishingly low] probability # for cache-line to remain untouched in large chunk operation with # large S-box as for single block operation with compact S-box and # surely needs more careful consideration... @@ -171,12 +171,12 @@ # yield execution to process performing AES just before timer fires # off the scheduler, immediately regain control of CPU and analyze the # cache state. For this attack to be efficient attacker would have to -# effectively slow down the operation by several *orders* of magnitute, +# effectively slow down the operation by several *orders* of magnitude, # by ratio of time slice to duration of handful of AES rounds, which # unlikely to remain unnoticed. Not to mention that this also means -# that he would spend correspondigly more time to collect enough +# that he would spend correspondingly more time to collect enough # statistical data to mount the attack. It's probably appropriate to -# say that if adeversary reckons that this attack is beneficial and +# say that if adversary reckons that this attack is beneficial and # risks to be noticed, you probably have larger problems having him # mere opportunity. In other words suggested code design expects you # to preclude/mitigate this attack by overall system security design. @@ -202,7 +202,7 @@ $output = pop; open OUT,">$output"; *STDOUT=*OUT; -&asm_init($ARGV[0],"aes-586.pl",$x86only = $ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); &static_label("AES_Te"); &static_label("AES_Td"); @@ -240,7 +240,7 @@ $small_footprint=1; # $small_footprint=1 code is ~5% slower [on # contention and in hope to "collect" 5% back # in real-life applications... -$vertical_spin=0; # shift "verticaly" defaults to 0, because of +$vertical_spin=0; # shift "vertically" defaults to 0, because of # its proof-of-concept status... # Note that there is no decvert(), as well as last encryption round is # performed with "horizontal" shifts. This is because this "vertical" @@ -585,7 +585,7 @@ sub enctransform() # +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ # | mm4 | mm0 | # +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ -# | s3 | s2 | s1 | s0 | +# | s3 | s2 | s1 | s0 | # +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ # |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0| # +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ @@ -805,7 +805,7 @@ sub encstep() if ($i==3) { $tmp=$s[3]; &mov ($s[2],$__s1); }##%ecx elsif($i==2){ &movz ($tmp,&HB($s[3])); }#%ebx[2] - else { &mov ($tmp,$s[3]); + else { &mov ($tmp,$s[3]); &shr ($tmp,24) } &xor ($out,&DWP(1,$te,$tmp,8)); if ($i<2) { &mov (&DWP(4+4*$i,"esp"),$out); } @@ -1558,7 +1558,7 @@ sub sse_deccompact() &pxor ("mm1","mm3"); &pxor ("mm5","mm7"); # tp4 &pshufw ("mm3","mm1",0xb1); &pshufw ("mm7","mm5",0xb1); &pxor ("mm0","mm1"); &pxor ("mm4","mm5"); # ^= tp4 - &pxor ("mm0","mm3"); &pxor ("mm4","mm7"); # ^= ROTATE(tp4,16) + &pxor ("mm0","mm3"); &pxor ("mm4","mm7"); # ^= ROTATE(tp4,16) &pxor ("mm3","mm3"); &pxor ("mm7","mm7"); &pcmpgtb("mm3","mm1"); &pcmpgtb("mm7","mm5"); @@ -1606,7 +1606,7 @@ sub decstep() # no instructions are reordered, as performance appears # optimal... or rather that all attempts to reorder didn't # result in better performance [which by the way is not a - # bit lower than ecryption]. + # bit lower than encryption]. if($i==3) { &mov ($key,$__key); } else { &mov ($out,$s[0]); } &and ($out,0xFF); @@ -2028,7 +2028,7 @@ sub declast() { # stack frame layout # -4(%esp) # return address 0(%esp) -# 0(%esp) # s0 backing store 4(%esp) +# 0(%esp) # s0 backing store 4(%esp) # 4(%esp) # s1 backing store 8(%esp) # 8(%esp) # s2 backing store 12(%esp) # 12(%esp) # s3 backing store 16(%esp) @@ -2738,7 +2738,7 @@ sub enckey() &mov (&DWP(80,"edi"),10); # setup number of rounds &xor ("eax","eax"); &jmp (&label("exit")); - + &set_label("12rounds"); &mov ("eax",&DWP(0,"esi")); # copy first 6 dwords &mov ("ebx",&DWP(4,"esi")); diff --git a/crypto/aes/asm/aes-armv4.pl b/crypto/aes/asm/aes-armv4.pl index 99815899..c6474b8a 100644 --- a/crypto/aes/asm/aes-armv4.pl +++ b/crypto/aes/asm/aes-armv4.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -203,7 +203,7 @@ AES_encrypt: adr r3,. #endif stmdb sp!,{r1,r4-r12,lr} -#if defined(__thumb2__) || defined(__APPLE__) +#ifdef __APPLE__ adr $tbl,AES_Te #else sub $tbl,r3,#AES_encrypt-AES_Te @ Te @@ -481,7 +481,7 @@ _armv4_AES_set_encrypt_key: mov lr,r1 @ bits mov $key,r2 @ key -#if defined(__thumb2__) || defined(__APPLE__) +#ifdef __APPLE__ adr $tbl,AES_Te+1024 @ Te4 #else sub $tbl,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4 @@ -979,7 +979,7 @@ AES_decrypt: adr r3,. #endif stmdb sp!,{r1,r4-r12,lr} -#if defined(__thumb2__) || defined(__APPLE__) +#ifdef __APPLE__ adr $tbl,AES_Td #else sub $tbl,r3,#AES_decrypt-AES_Td @ Td diff --git a/crypto/aes/asm/aes-ia64.S b/crypto/aes/asm/aes-ia64.S index f7f1f63c..03f79b7a 100644 --- a/crypto/aes/asm/aes-ia64.S +++ b/crypto/aes/asm/aes-ia64.S @@ -6,7 +6,7 @@ // https://www.openssl.org/source/license.html // // ==================================================================== -// Written by Andy Polyakov for the OpenSSL +// Written by Andy Polyakov for the OpenSSL // project. Rights for redistribution and usage in source and binary // forms are granted according to the OpenSSL license. // ==================================================================== @@ -33,7 +33,7 @@ // 64 bytes line size and L2 - 128 bytes... .ident "aes-ia64.S, version 1.2" -.ident "IA-64 ISA artwork by Andy Polyakov " +.ident "IA-64 ISA artwork by Andy Polyakov " .explicit .text diff --git a/crypto/aes/asm/aes-mips.pl b/crypto/aes/asm/aes-mips.pl index 439578d9..d81d76d7 100644 --- a/crypto/aes/asm/aes-mips.pl +++ b/crypto/aes/asm/aes-mips.pl @@ -65,8 +65,8 @@ $flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64 if ($flavour =~ /64|n32/i) { $PTR_LA="dla"; - $PTR_ADD="dadd"; # incidentally works even on n32 - $PTR_SUB="dsub"; # incidentally works even on n32 + $PTR_ADD="daddu"; # incidentally works even on n32 + $PTR_SUB="dsubu"; # incidentally works even on n32 $PTR_INS="dins"; $REG_S="sd"; $REG_L="ld"; @@ -74,8 +74,8 @@ if ($flavour =~ /64|n32/i) { $SZREG=8; } else { $PTR_LA="la"; - $PTR_ADD="add"; - $PTR_SUB="sub"; + $PTR_ADD="addu"; + $PTR_SUB="subu"; $PTR_INS="ins"; $REG_S="sw"; $REG_L="lw"; @@ -102,15 +102,9 @@ open STDOUT,">$output"; my ($MSB,$LSB)=(0,3); # automatically converted to little-endian $code.=<<___; +#include "mips_arch.h" + .text -#ifdef OPENSSL_FIPSCANISTER -# include -#endif - -#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2) -#define _MIPS_ARCH_MIPS32R2 -#endif - #if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__)) .option pic2 #endif @@ -126,7 +120,7 @@ my ($i0,$i1,$i2,$i3)=($at,$t0,$t1,$t2); my ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7,$t8,$t9,$t10,$t11) = map("\$$_",(12..23)); my ($key0,$cnt)=($gp,$fp); -# instuction ordering is "stolen" from output from MIPSpro assembler +# instruction ordering is "stolen" from output from MIPSpro assembler # invoked with -mips3 -O3 arguments... $code.=<<___; .align 5 @@ -146,7 +140,7 @@ _mips_AES_encrypt: xor $s2,$t2 xor $s3,$t3 - sub $cnt,1 + subu $cnt,1 #if defined(__mips_smartmips) ext $i0,$s1,16,8 .Loop_enc: @@ -218,7 +212,7 @@ _mips_AES_encrypt: xor $t2,$t6 xor $t3,$t7 - sub $cnt,1 + subu $cnt,1 $PTR_ADD $key0,16 xor $s0,$t0 xor $s1,$t1 @@ -409,7 +403,7 @@ _mips_AES_encrypt: xor $t2,$t6 xor $t3,$t7 - sub $cnt,1 + subu $cnt,1 $PTR_ADD $key0,16 xor $s0,$t0 xor $s1,$t1 @@ -657,6 +651,12 @@ $code.=<<___; .set reorder $PTR_LA $Tbl,AES_Te # PIC-ified 'load address' +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lw $s0,0($inp) + lw $s1,4($inp) + lw $s2,8($inp) + lw $s3,12($inp) +#else lwl $s0,0+$MSB($inp) lwl $s1,4+$MSB($inp) lwl $s2,8+$MSB($inp) @@ -665,9 +665,16 @@ $code.=<<___; lwr $s1,4+$LSB($inp) lwr $s2,8+$LSB($inp) lwr $s3,12+$LSB($inp) +#endif bal _mips_AES_encrypt +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + sw $s0,0($out) + sw $s1,4($out) + sw $s2,8($out) + sw $s3,12($out) +#else swr $s0,0+$LSB($out) swr $s1,4+$LSB($out) swr $s2,8+$LSB($out) @@ -676,6 +683,7 @@ $code.=<<___; swl $s1,4+$MSB($out) swl $s2,8+$MSB($out) swl $s3,12+$MSB($out) +#endif .set noreorder $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) @@ -720,7 +728,7 @@ _mips_AES_decrypt: xor $s2,$t2 xor $s3,$t3 - sub $cnt,1 + subu $cnt,1 #if defined(__mips_smartmips) ext $i0,$s3,16,8 .Loop_dec: @@ -792,7 +800,7 @@ _mips_AES_decrypt: xor $t2,$t6 xor $t3,$t7 - sub $cnt,1 + subu $cnt,1 $PTR_ADD $key0,16 xor $s0,$t0 xor $s1,$t1 @@ -985,7 +993,7 @@ _mips_AES_decrypt: xor $t2,$t6 xor $t3,$t7 - sub $cnt,1 + subu $cnt,1 $PTR_ADD $key0,16 xor $s0,$t0 xor $s1,$t1 @@ -1228,6 +1236,12 @@ $code.=<<___; .set reorder $PTR_LA $Tbl,AES_Td # PIC-ified 'load address' +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lw $s0,0($inp) + lw $s1,4($inp) + lw $s2,8($inp) + lw $s3,12($inp) +#else lwl $s0,0+$MSB($inp) lwl $s1,4+$MSB($inp) lwl $s2,8+$MSB($inp) @@ -1236,9 +1250,16 @@ $code.=<<___; lwr $s1,4+$LSB($inp) lwr $s2,8+$LSB($inp) lwr $s3,12+$LSB($inp) +#endif bal _mips_AES_decrypt +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + sw $s0,0($out) + sw $s1,4($out) + sw $s2,8($out) + sw $s3,12($out) +#else swr $s0,0+$LSB($out) swr $s1,4+$LSB($out) swr $s2,8+$LSB($out) @@ -1247,6 +1268,7 @@ $code.=<<___; swl $s1,4+$MSB($out) swl $s2,8+$MSB($out) swl $s3,12+$MSB($out) +#endif .set noreorder $REG_L $ra,$FRAMESIZE-1*$SZREG($sp) @@ -1295,35 +1317,52 @@ _mips_AES_set_encrypt_key: $PTR_ADD $rcon,$Tbl,256 .set reorder +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lw $rk0,0($inp) # load 128 bits + lw $rk1,4($inp) + lw $rk2,8($inp) + lw $rk3,12($inp) +#else lwl $rk0,0+$MSB($inp) # load 128 bits lwl $rk1,4+$MSB($inp) lwl $rk2,8+$MSB($inp) lwl $rk3,12+$MSB($inp) - li $at,128 lwr $rk0,0+$LSB($inp) lwr $rk1,4+$LSB($inp) lwr $rk2,8+$LSB($inp) lwr $rk3,12+$LSB($inp) +#endif + li $at,128 .set noreorder beq $bits,$at,.L128bits li $cnt,10 .set reorder +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lw $rk4,16($inp) # load 192 bits + lw $rk5,20($inp) +#else lwl $rk4,16+$MSB($inp) # load 192 bits lwl $rk5,20+$MSB($inp) - li $at,192 lwr $rk4,16+$LSB($inp) lwr $rk5,20+$LSB($inp) +#endif + li $at,192 .set noreorder beq $bits,$at,.L192bits li $cnt,8 .set reorder +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lw $rk6,24($inp) # load 256 bits + lw $rk7,28($inp) +#else lwl $rk6,24+$MSB($inp) # load 256 bits lwl $rk7,28+$MSB($inp) - li $at,256 lwr $rk6,24+$LSB($inp) lwr $rk7,28+$LSB($inp) +#endif + li $at,256 .set noreorder beq $bits,$at,.L256bits li $cnt,7 @@ -1353,7 +1392,7 @@ _mips_AES_set_encrypt_key: sw $rk1,4($key) sw $rk2,8($key) sw $rk3,12($key) - sub $cnt,1 + subu $cnt,1 $PTR_ADD $key,16 _bias $i0,24 @@ -1410,7 +1449,7 @@ _mips_AES_set_encrypt_key: sw $rk3,12($key) sw $rk4,16($key) sw $rk5,20($key) - sub $cnt,1 + subu $cnt,1 $PTR_ADD $key,24 _bias $i0,24 @@ -1471,7 +1510,7 @@ _mips_AES_set_encrypt_key: sw $rk5,20($key) sw $rk6,24($key) sw $rk7,28($key) - sub $cnt,1 + subu $cnt,1 _bias $i0,24 _bias $i1,16 @@ -1653,7 +1692,7 @@ $code.=<<___; lw $tp1,16($key) # modulo-scheduled lui $x80808080,0x8080 - sub $cnt,1 + subu $cnt,1 or $x80808080,0x8080 sll $cnt,2 $PTR_ADD $key,16 @@ -1716,7 +1755,7 @@ $code.=<<___; lw $tp1,4($key) # modulo-scheduled xor $tpe,$tp2 #endif - sub $cnt,1 + subu $cnt,1 sw $tpe,0($key) $PTR_ADD $key,4 bnez $cnt,.Lmix diff --git a/crypto/aes/asm/aes-parisc.pl b/crypto/aes/asm/aes-parisc.pl index 2c785bc5..b688ab30 100644 --- a/crypto/aes/asm/aes-parisc.pl +++ b/crypto/aes/asm/aes-parisc.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -1015,7 +1015,7 @@ ___ foreach (split("\n",$code)) { s/\`([^\`]*)\`/eval $1/ge; - # translate made up instructons: _ror, _srm + # translate made up instructions: _ror, _srm s/_ror(\s+)(%r[0-9]+),/shd$1$2,$2,/ or s/_srm(\s+%r[0-9]+),([0-9]+),/ diff --git a/crypto/aes/asm/aes-ppc.pl b/crypto/aes/asm/aes-ppc.pl index 1558d8e4..ca69df4c 100644 --- a/crypto/aes/asm/aes-ppc.pl +++ b/crypto/aes/asm/aes-ppc.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -1433,10 +1433,10 @@ $code.=<<___; xor $s1,$s1,$acc05 xor $s2,$s2,$acc06 xor $s3,$s3,$acc07 - xor $s0,$s0,$acc08 # ^= ROTATE(r8,8) - xor $s1,$s1,$acc09 - xor $s2,$s2,$acc10 - xor $s3,$s3,$acc11 + xor $s0,$s0,$acc08 # ^= ROTATE(r8,8) + xor $s1,$s1,$acc09 + xor $s2,$s2,$acc10 + xor $s3,$s3,$acc11 b Ldec_compact_loop .align 4 diff --git a/crypto/aes/asm/aes-s390x.pl b/crypto/aes/asm/aes-s390x.pl index fd8a7371..0c400590 100644 --- a/crypto/aes/asm/aes-s390x.pl +++ b/crypto/aes/asm/aes-s390x.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2007-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 @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -44,7 +44,7 @@ # minimize/avoid Address Generation Interlock hazard and to favour # dual-issue z10 pipeline. This gave ~25% improvement on z10 and # almost 50% on z9. The gain is smaller on z10, because being dual- -# issue z10 makes it improssible to eliminate the interlock condition: +# issue z10 makes it impossible to eliminate the interlock condition: # critial path is not long enough. Yet it spends ~24 cycles per byte # processed with 128-bit key. # @@ -129,6 +129,8 @@ sub _data_word() } $code=<<___; +#include "s390x_arch.h" + .text .type AES_Te,\@object @@ -404,7 +406,7 @@ _s390x_AES_encrypt: or $s1,$t1 or $t2,$i2 or $t3,$i3 - + srlg $i1,$s2,`8-3` # i0 srlg $i2,$s2,`16-3` # i1 nr $i1,$mask @@ -457,7 +459,7 @@ _s390x_AES_encrypt: x $s2,24($key) x $s3,28($key) - br $ra + br $ra .size _s390x_AES_encrypt,.-_s390x_AES_encrypt ___ @@ -779,7 +781,7 @@ _s390x_AES_decrypt: x $s2,24($key) x $s3,28($key) - br $ra + br $ra .size _s390x_AES_decrypt,.-_s390x_AES_decrypt ___ @@ -823,8 +825,8 @@ $code.=<<___ if (!$softonly); larl %r1,OPENSSL_s390xcap_P llihh %r0,0x8000 srlg %r0,%r0,0(%r5) - ng %r0,32(%r1) # check availability of both km... - ng %r0,48(%r1) # ...and kmc support for given key length + ng %r0,S390X_KM(%r1) # check availability of both km... + ng %r0,S390X_KMC(%r1) # ...and kmc support for given key length jz .Lekey_internal lmg %r0,%r1,0($inp) # just copy 128 bits... @@ -1084,7 +1086,7 @@ $code.=<<___ if (!$softonly); lhi $t1,16 cr $t0,$t1 jl .Lgo - oill $t0,0x80 # set "decrypt" bit + oill $t0,S390X_DECRYPT # set "decrypt" bit st $t0,240($key) br $ra ___ @@ -1223,7 +1225,7 @@ $code.=<<___ if (!$softonly); .align 16 .Lkmc_truncated: ahi $key,-1 # it's the way it's encoded in mvc - tmll %r0,0x80 + tmll %r0,S390X_DECRYPT jnz .Lkmc_truncated_dec lghi %r1,0 stg %r1,16*$SIZE_T($sp) @@ -1294,7 +1296,7 @@ $code.=<<___; .Lcbc_enc_done: l${g} $ivp,6*$SIZE_T($sp) st $s0,0($ivp) - st $s1,4($ivp) + st $s1,4($ivp) st $s2,8($ivp) st $s3,12($ivp) @@ -1403,7 +1405,61 @@ $code.=<<___ if (!$softonly); clr %r0,%r1 jl .Lctr32_software - stm${g} %r6,$s3,6*$SIZE_T($sp) + st${g} $s2,10*$SIZE_T($sp) + st${g} $s3,11*$SIZE_T($sp) + + clr $len,%r1 # does work even in 64-bit mode + jle .Lctr32_nokma # kma is slower for <= 16 blocks + + larl %r1,OPENSSL_s390xcap_P + lr $s2,%r0 + llihh $s3,0x8000 + srlg $s3,$s3,0($s2) + ng $s3,S390X_KMA(%r1) # check kma capability vector + jz .Lctr32_nokma + + l${g}hi %r1,-$stdframe-112 + l${g}r $s3,$sp + la $sp,0(%r1,$sp) # prepare parameter block + + lhi %r1,0x0600 + sllg $len,$len,4 + or %r0,%r1 # set HS and LAAD flags + + st${g} $s3,0($sp) # backchain + la %r1,$stdframe($sp) + + lmg $s2,$s3,0($key) # copy key + stg $s2,$stdframe+80($sp) + stg $s3,$stdframe+88($sp) + lmg $s2,$s3,16($key) + stg $s2,$stdframe+96($sp) + stg $s3,$stdframe+104($sp) + + lmg $s2,$s3,0($ivp) # copy iv + stg $s2,$stdframe+64($sp) + ahi $s3,-1 # kma requires counter-1 + stg $s3,$stdframe+72($sp) + st $s3,$stdframe+12($sp) # copy counter + + lghi $s2,0 # no AAD + lghi $s3,0 + + .long 0xb929a042 # kma $out,$s2,$inp + brc 1,.-4 # pay attention to "partial completion" + + stg %r0,$stdframe+80($sp) # wipe key + stg %r0,$stdframe+88($sp) + stg %r0,$stdframe+96($sp) + stg %r0,$stdframe+104($sp) + la $sp,$stdframe+112($sp) + + lm${g} $s2,$s3,10*$SIZE_T($sp) + br $ra + +.align 16 +.Lctr32_nokma: + stm${g} %r6,$s1,6*$SIZE_T($sp) slgr $out,$inp la %r1,0($key) # %r1 is permanent copy of $key @@ -1442,7 +1498,7 @@ $code.=<<___ if (!$softonly && 0);# kmctr code was measured to be ~12% slower larl %r1,OPENSSL_s390xcap_P llihh %r0,0x8000 # check if kmctr supports the function code srlg %r0,%r0,0($s0) - ng %r0,64(%r1) # check kmctr capability vector + ng %r0,S390X_KMCTR(%r1) # check kmctr capability vector lgr %r0,$s0 lgr %r1,$s1 jz .Lctr32_km_loop @@ -1567,8 +1623,8 @@ ___ } ######################################################################## -# void AES_xts_encrypt(const char *inp,char *out,size_t len, -# const AES_KEY *key1, const AES_KEY *key2, +# void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, +# size_t len, const AES_KEY *key1, const AES_KEY *key2, # const unsigned char iv[16]); # { @@ -1592,7 +1648,7 @@ $code.=<<___ if(1); larl %r1,OPENSSL_s390xcap_P llihh %r0,0x8000 srlg %r0,%r0,32($s1) # check for 32+function code - ng %r0,32(%r1) # check km capability vector + ng %r0,S390X_KM(%r1) # check km capability vector lgr %r0,$s0 # restore the function code la %r1,0($key1) # restore $key1 jz .Lxts_km_vanilla @@ -1627,7 +1683,7 @@ $code.=<<___ if(1); llgc $len,2*$SIZE_T-1($sp) nill $len,0x0f # $len%=16 br $ra - + .align 16 .Lxts_km_vanilla: ___ @@ -1854,7 +1910,7 @@ $code.=<<___; xgr $s1,%r1 lrvgr $s1,$s1 # flip byte order lrvgr $s3,$s3 - srlg $s0,$s1,32 # smash the tweak to 4x32-bits + srlg $s0,$s1,32 # smash the tweak to 4x32-bits stg $s1,$tweak+0($sp) # save the tweak llgfr $s1,$s1 srlg $s2,$s3,32 @@ -1905,7 +1961,7 @@ $code.=<<___; xgr $s1,%r1 lrvgr $s1,$s1 # flip byte order lrvgr $s3,$s3 - srlg $s0,$s1,32 # smash the tweak to 4x32-bits + srlg $s0,$s1,32 # smash the tweak to 4x32-bits stg $s1,$tweak+0($sp) # save the tweak llgfr $s1,$s1 srlg $s2,$s3,32 @@ -1936,8 +1992,8 @@ $code.=<<___; br $ra .size AES_xts_encrypt,.-AES_xts_encrypt ___ -# void AES_xts_decrypt(const char *inp,char *out,size_t len, -# const AES_KEY *key1, const AES_KEY *key2, +# void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, +# size_t len, const AES_KEY *key1, const AES_KEY *key2, # const unsigned char iv[16]); # $code.=<<___; @@ -2097,7 +2153,7 @@ $code.=<<___; xgr $s1,%r1 lrvgr $s1,$s1 # flip byte order lrvgr $s3,$s3 - srlg $s0,$s1,32 # smash the tweak to 4x32-bits + srlg $s0,$s1,32 # smash the tweak to 4x32-bits stg $s1,$tweak+0($sp) # save the tweak llgfr $s1,$s1 srlg $s2,$s3,32 diff --git a/crypto/aes/asm/aes-sparcv9.pl b/crypto/aes/asm/aes-sparcv9.pl index 883fae82..40d1f94c 100755 --- a/crypto/aes/asm/aes-sparcv9.pl +++ b/crypto/aes/asm/aes-sparcv9.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. Rights for redistribution and usage in source and binary # forms are granted according to the OpenSSL license. # ==================================================================== diff --git a/crypto/aes/asm/aes-x86_64.pl b/crypto/aes/asm/aes-x86_64.pl index ce4ca30b..4d1dc9c7 100755 --- a/crypto/aes/asm/aes-x86_64.pl +++ b/crypto/aes/asm/aes-x86_64.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -599,15 +599,23 @@ $code.=<<___; .hidden asm_AES_encrypt asm_AES_encrypt: AES_encrypt: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 # allocate frame "above" key schedule - mov %rsp,%r10 lea -63(%rdx),%rcx # %rdx is key argument and \$-64,%rsp sub %rsp,%rcx @@ -617,7 +625,8 @@ AES_encrypt: sub \$32,%rsp mov %rsi,16(%rsp) # save out - mov %r10,24(%rsp) # save real stack pointer + mov %rax,24(%rsp) # save original stack pointer +.cfi_cfa_expression %rsp+24,deref,+8 .Lenc_prologue: mov %rdx,$key @@ -644,20 +653,29 @@ AES_encrypt: mov 16(%rsp),$out # restore out mov 24(%rsp),%rsi # restore saved stack pointer +.cfi_def_cfa %rsi,8 mov $s0,0($out) # write output vector mov $s1,4($out) mov $s2,8($out) mov $s3,12($out) - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lenc_epilogue: ret +.cfi_endproc .size AES_encrypt,.-AES_encrypt ___ @@ -1197,15 +1215,23 @@ $code.=<<___; .hidden asm_AES_decrypt asm_AES_decrypt: AES_decrypt: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 # allocate frame "above" key schedule - mov %rsp,%r10 lea -63(%rdx),%rcx # %rdx is key argument and \$-64,%rsp sub %rsp,%rcx @@ -1215,7 +1241,8 @@ AES_decrypt: sub \$32,%rsp mov %rsi,16(%rsp) # save out - mov %r10,24(%rsp) # save real stack pointer + mov %rax,24(%rsp) # save original stack pointer +.cfi_cfa_expression %rsp+24,deref,+8 .Ldec_prologue: mov %rdx,$key @@ -1244,20 +1271,29 @@ AES_decrypt: mov 16(%rsp),$out # restore out mov 24(%rsp),%rsi # restore saved stack pointer +.cfi_def_cfa %rsi,8 mov $s0,0($out) # write output vector mov $s1,4($out) mov $s2,8($out) mov $s3,12($out) - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Ldec_epilogue: ret +.cfi_endproc .size AES_decrypt,.-AES_decrypt ___ #------------------------------------------------------------------# @@ -1296,22 +1332,34 @@ $code.=<<___; .type AES_set_encrypt_key,\@function,3 .align 16 AES_set_encrypt_key: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp - push %r12 # redundant, but allows to share +.cfi_push %rbp + push %r12 # redundant, but allows to share +.cfi_push %r12 push %r13 # exception handler... +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 sub \$8,%rsp +.cfi_adjust_cfa_offset 8 .Lenc_key_prologue: call _x86_64_AES_set_encrypt_key mov 40(%rsp),%rbp +.cfi_restore %rbp mov 48(%rsp),%rbx +.cfi_restore %rbx add \$56,%rsp +.cfi_adjust_cfa_offset -56 .Lenc_key_epilogue: ret +.cfi_endproc .size AES_set_encrypt_key,.-AES_set_encrypt_key .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent @@ -1424,7 +1472,7 @@ $code.=<<___; xor %rax,%rax jmp .Lexit -.L14rounds: +.L14rounds: mov 0(%rsi),%rax # copy first 8 dwords mov 8(%rsi),%rbx mov 16(%rsi),%rcx @@ -1562,13 +1610,21 @@ $code.=<<___; .type AES_set_decrypt_key,\@function,3 .align 16 AES_set_decrypt_key: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 push %rdx # save key schedule +.cfi_adjust_cfa_offset 8 .Ldec_key_prologue: call _x86_64_AES_set_encrypt_key @@ -1622,14 +1678,22 @@ $code.=<<___; xor %rax,%rax .Labort: mov 8(%rsp),%r15 +.cfi_restore %r15 mov 16(%rsp),%r14 +.cfi_restore %r14 mov 24(%rsp),%r13 +.cfi_restore %r13 mov 32(%rsp),%r12 +.cfi_restore %r12 mov 40(%rsp),%rbp +.cfi_restore %rbp mov 48(%rsp),%rbx +.cfi_restore %rbx add \$56,%rsp +.cfi_adjust_cfa_offset -56 .Ldec_key_epilogue: ret +.cfi_endproc .size AES_set_decrypt_key,.-AES_set_decrypt_key ___ @@ -1660,25 +1724,32 @@ $code.=<<___; .hidden asm_AES_cbc_encrypt asm_AES_cbc_encrypt: AES_cbc_encrypt: +.cfi_startproc cmp \$0,%rdx # check length je .Lcbc_epilogue pushfq +.cfi_push 49 # %rflags push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lcbc_prologue: cld mov %r9d,%r9d # clear upper half of enc lea .LAES_Te(%rip),$sbox + lea .LAES_Td(%rip),%r10 cmp \$0,%r9 - jne .Lcbc_picked_te - lea .LAES_Td(%rip),$sbox -.Lcbc_picked_te: + cmoveq %r10,$sbox mov OPENSSL_ia32cap_P(%rip),%r10d cmp \$$speed_limit,%rdx @@ -1714,8 +1785,10 @@ AES_cbc_encrypt: .Lcbc_te_ok: xchg %rsp,$key +.cfi_def_cfa_register $key #add \$8,%rsp # reserve for return address! mov $key,$_rsp # save %rsp +.cfi_cfa_expression $_rsp,deref,+64 .Lcbc_fast_body: mov %rdi,$_inp # save copy of inp mov %rsi,$_out # save copy of out @@ -1945,7 +2018,7 @@ AES_cbc_encrypt: lea ($key,%rax),%rax mov %rax,$keyend - # pick Te4 copy which can't "overlap" with stack frame or key scdedule + # pick Te4 copy which can't "overlap" with stack frame or key schedule lea 2048($sbox),$sbox lea 768-8(%rsp),%rax sub $sbox,%rax @@ -2097,17 +2170,27 @@ AES_cbc_encrypt: .align 16 .Lcbc_exit: mov $_rsp,%rsi +.cfi_def_cfa %rsi,64 mov (%rsi),%r15 +.cfi_restore %r15 mov 8(%rsi),%r14 +.cfi_restore %r14 mov 16(%rsi),%r13 +.cfi_restore %r13 mov 24(%rsi),%r12 +.cfi_restore %r12 mov 32(%rsi),%rbp +.cfi_restore %rbp mov 40(%rsi),%rbx +.cfi_restore %rbx lea 48(%rsi),%rsp +.cfi_def_cfa %rsp,16 .Lcbc_popfq: popfq +.cfi_pop 49 # %rflags .Lcbc_epilogue: ret +.cfi_endproc .size AES_cbc_encrypt,.-AES_cbc_encrypt ___ } @@ -2580,7 +2663,6 @@ block_se_handler: jae .Lin_block_prologue mov 24(%rax),%rax # pull saved real stack pointer - lea 48(%rax),%rax # adjust... mov -8(%rax),%rbx mov -16(%rax),%rbp diff --git a/crypto/aes/asm/aesfx-sparcv9.pl b/crypto/aes/asm/aesfx-sparcv9.pl index 04b3cf71..9ddf0b4b 100644 --- a/crypto/aes/asm/aesfx-sparcv9.pl +++ b/crypto/aes/asm/aesfx-sparcv9.pl @@ -22,7 +22,7 @@ # April 2016 # # Add "teaser" CBC and CTR mode-specific subroutines. "Teaser" means -# that parallelizeable nature of CBC decrypt and CTR is not utilized +# that parallelizable nature of CBC decrypt and CTR is not utilized # yet. CBC encrypt on the other hand is as good as it can possibly # get processing one byte in 4.1 cycles with 128-bit key on SPARC64 X. # This is ~6x faster than pure software implementation... diff --git a/crypto/aes/asm/aesni-mb-x86_64.pl b/crypto/aes/asm/aesni-mb-x86_64.pl index aa2735e0..1f356d2d 100644 --- a/crypto/aes/asm/aesni-mb-x86_64.pl +++ b/crypto/aes/asm/aesni-mb-x86_64.pl @@ -105,6 +105,7 @@ $code.=<<___; .type aesni_multi_cbc_encrypt,\@function,3 .align 32 aesni_multi_cbc_encrypt: +.cfi_startproc ___ $code.=<<___ if ($avx); cmp \$2,$num @@ -118,12 +119,19 @@ $code.=<<___ if ($avx); ___ $code.=<<___; mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -134,7 +142,7 @@ $code.=<<___ if ($win64); movaps %xmm10,0x40(%rsp) movaps %xmm11,0x50(%rsp) movaps %xmm12,0x60(%rsp) - movaps %xmm13,-0x68(%rax) # not used, saved to share se_handler + movaps %xmm13,-0x68(%rax) # not used, saved to share se_handler movaps %xmm14,-0x58(%rax) movaps %xmm15,-0x48(%rax) ___ @@ -148,6 +156,7 @@ $code.=<<___; sub \$48,%rsp and \$-64,%rsp mov %rax,16(%rsp) # original %rsp +.cfi_cfa_expression %rsp+16,deref,+8 .Lenc4x_body: movdqu ($key),$zero # 0-round key @@ -308,9 +317,9 @@ $code.=<<___; movups @out[0],-16(@outptr[0],$offset) pxor @inp[0],@out[0] - movups @out[1],-16(@outptr[1],$offset) + movups @out[1],-16(@outptr[1],$offset) pxor @inp[1],@out[1] - movups @out[2],-16(@outptr[2],$offset) + movups @out[2],-16(@outptr[2],$offset) pxor @inp[2],@out[2] movups @out[3],-16(@outptr[3],$offset) pxor @inp[3],@out[3] @@ -319,6 +328,7 @@ $code.=<<___; jnz .Loop_enc4x mov 16(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 mov 24(%rsp),$num #pxor @inp[0],@out[0] @@ -350,20 +360,29 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lenc4x_epilogue: ret +.cfi_endproc .size aesni_multi_cbc_encrypt,.-aesni_multi_cbc_encrypt .globl aesni_multi_cbc_decrypt .type aesni_multi_cbc_decrypt,\@function,3 .align 32 aesni_multi_cbc_decrypt: +.cfi_startproc ___ $code.=<<___ if ($avx); cmp \$2,$num @@ -377,12 +396,19 @@ $code.=<<___ if ($avx); ___ $code.=<<___; mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -393,7 +419,7 @@ $code.=<<___ if ($win64); movaps %xmm10,0x40(%rsp) movaps %xmm11,0x50(%rsp) movaps %xmm12,0x60(%rsp) - movaps %xmm13,-0x68(%rax) # not used, saved to share se_handler + movaps %xmm13,-0x68(%rax) # not used, saved to share se_handler movaps %xmm14,-0x58(%rax) movaps %xmm15,-0x48(%rax) ___ @@ -407,6 +433,7 @@ $code.=<<___; sub \$48,%rsp and \$-64,%rsp mov %rax,16(%rsp) # original %rsp +.cfi_cfa_expression %rsp+16,deref,+8 .Ldec4x_body: movdqu ($key),$zero # 0-round key @@ -563,10 +590,10 @@ $code.=<<___; movups @out[0],-16(@outptr[0],$offset) movdqu (@inptr[0],$offset),@out[0] - movups @out[1],-16(@outptr[1],$offset) + movups @out[1],-16(@outptr[1],$offset) movdqu (@inptr[1],$offset),@out[1] pxor $zero,@out[0] - movups @out[2],-16(@outptr[2],$offset) + movups @out[2],-16(@outptr[2],$offset) movdqu (@inptr[2],$offset),@out[2] pxor $zero,@out[1] movups @out[3],-16(@outptr[3],$offset) @@ -578,6 +605,7 @@ $code.=<<___; jnz .Loop_dec4x mov 16(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 mov 24(%rsp),$num lea `40*4`($inp),$inp @@ -600,14 +628,22 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Ldec4x_epilogue: ret +.cfi_endproc .size aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt ___ @@ -623,14 +659,22 @@ $code.=<<___; .type aesni_multi_cbc_encrypt_avx,\@function,3 .align 32 aesni_multi_cbc_encrypt_avx: +.cfi_startproc _avx_cbc_enc_shortcut: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -657,6 +701,7 @@ $code.=<<___; sub \$192,%rsp and \$-128,%rsp mov %rax,16(%rsp) # original %rsp +.cfi_cfa_expression %rsp+16,deref,+8 .Lenc8x_body: vzeroupper @@ -835,10 +880,10 @@ $code.=<<___; vmovups @out[0],-16(@ptr[0]) # write output sub $offset,@ptr[0] # switch to input vpxor 0x00($offload),@out[0],@out[0] - vmovups @out[1],-16(@ptr[1]) + vmovups @out[1],-16(@ptr[1]) sub `64+1*8`(%rsp),@ptr[1] vpxor 0x10($offload),@out[1],@out[1] - vmovups @out[2],-16(@ptr[2]) + vmovups @out[2],-16(@ptr[2]) sub `64+2*8`(%rsp),@ptr[2] vpxor 0x20($offload),@out[2],@out[2] vmovups @out[3],-16(@ptr[3]) @@ -847,10 +892,10 @@ $code.=<<___; vmovups @out[4],-16(@ptr[4]) sub `64+4*8`(%rsp),@ptr[4] vpxor @inp[0],@out[4],@out[4] - vmovups @out[5],-16(@ptr[5]) + vmovups @out[5],-16(@ptr[5]) sub `64+5*8`(%rsp),@ptr[5] vpxor @inp[1],@out[5],@out[5] - vmovups @out[6],-16(@ptr[6]) + vmovups @out[6],-16(@ptr[6]) sub `64+6*8`(%rsp),@ptr[6] vpxor @inp[2],@out[6],@out[6] vmovups @out[7],-16(@ptr[7]) @@ -861,6 +906,7 @@ $code.=<<___; jnz .Loop_enc8x mov 16(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 #mov 24(%rsp),$num #lea `40*8`($inp),$inp #dec $num @@ -883,27 +929,43 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lenc8x_epilogue: ret +.cfi_endproc .size aesni_multi_cbc_encrypt_avx,.-aesni_multi_cbc_encrypt_avx .type aesni_multi_cbc_decrypt_avx,\@function,3 .align 32 aesni_multi_cbc_decrypt_avx: +.cfi_startproc _avx_cbc_dec_shortcut: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -932,6 +994,7 @@ $code.=<<___; and \$-256,%rsp sub \$192,%rsp mov %rax,16(%rsp) # original %rsp +.cfi_cfa_expression %rsp+16,deref,+8 .Ldec8x_body: vzeroupper @@ -1128,12 +1191,12 @@ $code.=<<___; sub $offset,@ptr[0] # switch to input vmovdqu 128+0(%rsp),@out[0] vpxor 0x70($offload),@out[7],@out[7] - vmovups @out[1],-16(@ptr[1]) + vmovups @out[1],-16(@ptr[1]) sub `64+1*8`(%rsp),@ptr[1] vmovdqu @out[0],0x00($offload) vpxor $zero,@out[0],@out[0] vmovdqu 128+16(%rsp),@out[1] - vmovups @out[2],-16(@ptr[2]) + vmovups @out[2],-16(@ptr[2]) sub `64+2*8`(%rsp),@ptr[2] vmovdqu @out[1],0x10($offload) vpxor $zero,@out[1],@out[1] @@ -1149,11 +1212,11 @@ $code.=<<___; vpxor $zero,@out[3],@out[3] vmovdqu @inp[0],0x40($offload) vpxor @inp[0],$zero,@out[4] - vmovups @out[5],-16(@ptr[5]) + vmovups @out[5],-16(@ptr[5]) sub `64+5*8`(%rsp),@ptr[5] vmovdqu @inp[1],0x50($offload) vpxor @inp[1],$zero,@out[5] - vmovups @out[6],-16(@ptr[6]) + vmovups @out[6],-16(@ptr[6]) sub `64+6*8`(%rsp),@ptr[6] vmovdqu @inp[2],0x60($offload) vpxor @inp[2],$zero,@out[6] @@ -1167,6 +1230,7 @@ $code.=<<___; jnz .Loop_dec8x mov 16(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 #mov 24(%rsp),$num #lea `40*8`($inp),$inp #dec $num @@ -1189,14 +1253,22 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Ldec8x_epilogue: ret +.cfi_endproc .size aesni_multi_cbc_decrypt_avx,.-aesni_multi_cbc_decrypt_avx ___ }}} @@ -1253,10 +1325,10 @@ se_handler: mov -48(%rax),%r15 mov %rbx,144($context) # restore context->Rbx mov %rbp,160($context) # restore context->Rbp - mov %r12,216($context) # restore cotnext->R12 - mov %r13,224($context) # restore cotnext->R13 - mov %r14,232($context) # restore cotnext->R14 - mov %r15,240($context) # restore cotnext->R15 + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 lea -56-10*16(%rax),%rsi lea 512($context),%rdi # &context.Xmm6 diff --git a/crypto/aes/asm/aesni-sha1-x86_64.pl b/crypto/aes/asm/aesni-sha1-x86_64.pl index 33a7f0cf..b01a4c55 100644 --- a/crypto/aes/asm/aesni-sha1-x86_64.pl +++ b/crypto/aes/asm/aesni-sha1-x86_64.pl @@ -191,16 +191,24 @@ $code.=<<___; .type aesni_cbc_sha1_enc_ssse3,\@function,6 .align 32 aesni_cbc_sha1_enc_ssse3: +.cfi_startproc mov `($win64?56:8)`(%rsp),$inp # load 7th argument #shr \$6,$len # debugging artefact #jz .Lepilogue_ssse3 # debugging artefact push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea `-104-($win64?10*16:0)`(%rsp),%rsp +.cfi_adjust_cfa_offset `104+($win64?10*16:0)` #mov $in0,$inp # debugging artefact #lea 64(%rsp),$ctx # debugging artefact ___ @@ -726,15 +734,24 @@ $code.=<<___ if ($win64); ___ $code.=<<___; lea `104+($win64?10*16:0)`(%rsp),%rsi +.cfi_def_cfa %rsi,56 mov 0(%rsi),%r15 +.cfi_restore %r15 mov 8(%rsi),%r14 +.cfi_restore %r14 mov 16(%rsi),%r13 +.cfi_restore %r13 mov 24(%rsi),%r12 +.cfi_restore %r12 mov 32(%rsi),%rbp +.cfi_restore %rbp mov 40(%rsi),%rbx +.cfi_restore %rbx lea 48(%rsi),%rsp +.cfi_def_cfa %rsp,8 .Lepilogue_ssse3: ret +.cfi_endproc .size aesni_cbc_sha1_enc_ssse3,.-aesni_cbc_sha1_enc_ssse3 ___ @@ -798,7 +815,7 @@ sub body_00_19_dec () { # ((c^d)&b)^d sub body_20_39_dec () { # b^d^c # on entry @T[0]=b^d return &body_40_59_dec() if ($rx==39); - + my @r=@body_20_39; unshift (@r,@aes256_dec[$rx]) if (@aes256_dec[$rx]); @@ -842,14 +859,22 @@ $code.=<<___; .type aesni256_cbc_sha1_dec_ssse3,\@function,6 .align 32 aesni256_cbc_sha1_dec_ssse3: +.cfi_startproc mov `($win64?56:8)`(%rsp),$inp # load 7th argument push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea `-104-($win64?10*16:0)`(%rsp),%rsp +.cfi_adjust_cfa_offset `104+($win64?10*16:0)` ___ $code.=<<___ if ($win64); movaps %xmm6,96+0(%rsp) @@ -997,15 +1022,24 @@ $code.=<<___ if ($win64); ___ $code.=<<___; lea `104+($win64?10*16:0)`(%rsp),%rsi +.cfi_cfa_def %rsi,56 mov 0(%rsi),%r15 +.cfi_restore %r15 mov 8(%rsi),%r14 +.cfi_restore %r14 mov 16(%rsi),%r13 +.cfi_restore %r13 mov 24(%rsi),%r12 +.cfi_restore %r12 mov 32(%rsi),%rbp +.cfi_restore %rbp mov 40(%rsi),%rbx +.cfi_restore %rbx lea 48(%rsi),%rsp +.cfi_cfa_def %rsp,8 .Lepilogue_dec_ssse3: ret +.cfi_endproc .size aesni256_cbc_sha1_dec_ssse3,.-aesni256_cbc_sha1_dec_ssse3 ___ }}} @@ -1031,16 +1065,24 @@ $code.=<<___; .type aesni_cbc_sha1_enc_avx,\@function,6 .align 32 aesni_cbc_sha1_enc_avx: +.cfi_startproc mov `($win64?56:8)`(%rsp),$inp # load 7th argument #shr \$6,$len # debugging artefact #jz .Lepilogue_avx # debugging artefact push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea `-104-($win64?10*16:0)`(%rsp),%rsp +.cfi_adjust_cfa_offset `104+($win64?10*16:0)` #mov $in0,$inp # debugging artefact #lea 64(%rsp),$ctx # debugging artefact ___ @@ -1439,15 +1481,24 @@ $code.=<<___ if ($win64); ___ $code.=<<___; lea `104+($win64?10*16:0)`(%rsp),%rsi +.cfi_def_cfa %rsi,56 mov 0(%rsi),%r15 +.cfi_restore %r15 mov 8(%rsi),%r14 +.cfi_restore %r14 mov 16(%rsi),%r13 +.cfi_restore %r13 mov 24(%rsi),%r12 +.cfi_restore %r12 mov 32(%rsi),%rbp +.cfi_restore %rbp mov 40(%rsi),%rbx +.cfi_restore %rbx lea 48(%rsi),%rsp +.cfi_def_cfa %rsp,8 .Lepilogue_avx: ret +.cfi_endproc .size aesni_cbc_sha1_enc_avx,.-aesni_cbc_sha1_enc_avx ___ @@ -1496,14 +1547,22 @@ $code.=<<___; .type aesni256_cbc_sha1_dec_avx,\@function,6 .align 32 aesni256_cbc_sha1_dec_avx: +.cfi_startproc mov `($win64?56:8)`(%rsp),$inp # load 7th argument push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea `-104-($win64?10*16:0)`(%rsp),%rsp +.cfi_adjust_cfa_offset `104+($win64?10*16:0)` ___ $code.=<<___ if ($win64); movaps %xmm6,96+0(%rsp) @@ -1650,15 +1709,24 @@ $code.=<<___ if ($win64); ___ $code.=<<___; lea `104+($win64?10*16:0)`(%rsp),%rsi +.cfi_def_cfa %rsi,56 mov 0(%rsi),%r15 +.cfi_restore %r15 mov 8(%rsi),%r14 +.cfi_restore %r14 mov 16(%rsi),%r13 +.cfi_restore %r13 mov 24(%rsi),%r12 +.cfi_restore %r12 mov 32(%rsi),%rbp +.cfi_restore %rbp mov 40(%rsi),%rbx +.cfi_restore %rbx lea 48(%rsi),%rsp +.cfi_def_cfa %rsp,8 .Lepilogue_dec_avx: ret +.cfi_endproc .size aesni256_cbc_sha1_dec_avx,.-aesni256_cbc_sha1_dec_avx ___ }}} diff --git a/crypto/aes/asm/aesni-sha256-x86_64.pl b/crypto/aes/asm/aesni-sha256-x86_64.pl index 0e49f26f..ef460237 100644 --- a/crypto/aes/asm/aesni-sha256-x86_64.pl +++ b/crypto/aes/asm/aesni-sha256-x86_64.pl @@ -112,7 +112,7 @@ $_key="16*$SZ+3*8(%rsp)"; $_ivp="16*$SZ+4*8(%rsp)"; $_ctx="16*$SZ+5*8(%rsp)"; $_in0="16*$SZ+6*8(%rsp)"; -$_rsp="16*$SZ+7*8(%rsp)"; +$_rsp="`16*$SZ+7*8`(%rsp)"; $framesz=16*$SZ+8*8; $code=<<___; @@ -342,15 +342,23 @@ $code.=<<___; .type ${func}_xop,\@function,6 .align 64 ${func}_xop: +.cfi_startproc .Lxop_shortcut: mov `($win64?56:8)`(%rsp),$in0 # load 7th parameter + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 sub \$`$framesz+$win64*16*10`,%rsp and \$-64,%rsp # align stack frame @@ -366,7 +374,8 @@ ${func}_xop: mov $ivp,$_ivp mov $ctx,$_ctx mov $in0,$_in0 - mov %r11,$_rsp + mov %rax,$_rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,`$framesz+16*0`(%rsp) @@ -604,6 +613,7 @@ $code.=<<___; mov $_ivp,$ivp mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 vmovdqu $iv,($ivp) # output IV vzeroall ___ @@ -620,15 +630,23 @@ $code.=<<___ if ($win64); movaps `$framesz+16*9`(%rsp),%xmm15 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_xop: ret +.cfi_endproc .size ${func}_xop,.-${func}_xop ___ ###################################################################### @@ -640,15 +658,23 @@ $code.=<<___; .type ${func}_avx,\@function,6 .align 64 ${func}_avx: +.cfi_startproc .Lavx_shortcut: mov `($win64?56:8)`(%rsp),$in0 # load 7th parameter + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 sub \$`$framesz+$win64*16*10`,%rsp and \$-64,%rsp # align stack frame @@ -664,7 +690,8 @@ ${func}_avx: mov $ivp,$_ivp mov $ctx,$_ctx mov $in0,$_in0 - mov %r11,$_rsp + mov %rax,$_rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,`$framesz+16*0`(%rsp) @@ -855,6 +882,7 @@ $code.=<<___; mov $_ivp,$ivp mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 vmovdqu $iv,($ivp) # output IV vzeroall ___ @@ -871,15 +899,23 @@ $code.=<<___ if ($win64); movaps `$framesz+16*9`(%rsp),%xmm15 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx: ret +.cfi_endproc .size ${func}_avx,.-${func}_avx ___ @@ -887,7 +923,7 @@ if ($avx>1) {{ ###################################################################### # AVX2+BMI code path # -my $a5=$SZ==4?"%esi":"%rsi"; # zap $inp +my $a5=$SZ==4?"%esi":"%rsi"; # zap $inp my $PUSH8=8*2*$SZ; use integer; @@ -936,15 +972,23 @@ $code.=<<___; .type ${func}_avx2,\@function,6 .align 64 ${func}_avx2: +.cfi_startproc .Lavx2_shortcut: mov `($win64?56:8)`(%rsp),$in0 # load 7th parameter + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 sub \$`2*$SZ*$rounds+8*8+$win64*16*10`,%rsp and \$-256*$SZ,%rsp # align stack frame add \$`2*$SZ*($rounds-8)`,%rsp @@ -961,7 +1005,8 @@ ${func}_avx2: mov $ivp,$_ivp mov $ctx,$_ctx mov $in0,$_in0 - mov %r11,$_rsp + mov %rax,$_rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,`$framesz+16*0`(%rsp) @@ -1192,6 +1237,7 @@ $code.=<<___; lea ($Tbl),%rsp mov $_ivp,$ivp mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 vmovdqu $iv,($ivp) # output IV vzeroall ___ @@ -1208,15 +1254,23 @@ $code.=<<___ if ($win64); movaps `$framesz+16*9`(%rsp),%xmm15 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx2: ret +.cfi_endproc .size ${func}_avx2,.-${func}_avx2 ___ }} @@ -1573,7 +1627,6 @@ ___ $code.=<<___; mov %rax,%rsi # put aside Rsp mov 16*$SZ+7*8(%rax),%rax # pull $_rsp - lea 48(%rax),%rax mov -8(%rax),%rbx mov -16(%rax),%rbp diff --git a/crypto/aes/asm/aesni-x86.pl b/crypto/aes/asm/aesni-x86.pl index ed1a47c3..b351fca2 100644 --- a/crypto/aes/asm/aesni-x86.pl +++ b/crypto/aes/asm/aesni-x86.pl @@ -62,7 +62,9 @@ # Westmere 3.77/1.37 1.37 1.52 1.27 # * Bridge 5.07/0.98 0.99 1.09 0.91 1.10 # Haswell 4.44/0.80 0.97 1.03 0.72 0.76 +# Skylake 2.68/0.65 0.65 0.66 0.64 0.66 # Silvermont 5.77/3.56 3.67 4.03 3.46 4.03 +# Goldmont 3.84/1.39 1.39 1.63 1.31 1.70 # Bulldozer 5.80/0.98 1.05 1.24 0.93 1.23 $PREFIX="aesni"; # if $PREFIX is set to "AES", the script @@ -78,7 +80,7 @@ $output = pop; open OUT,">$output"; *STDOUT=*OUT; -&asm_init($ARGV[0],$0); +&asm_init($ARGV[0]); &external_label("OPENSSL_ia32cap_P"); &static_label("key_const"); @@ -237,7 +239,7 @@ sub aesni_generate1 # fully unrolled loop # can schedule aes[enc|dec] every cycle optimal interleave factor # equals to corresponding instructions latency. 8x is optimal for # * Bridge, but it's unfeasible to accommodate such implementation -# in XMM registers addreassable in 32-bit mode and therefore maximum +# in XMM registers addressable in 32-bit mode and therefore maximum # of 6x is used instead... sub aesni_generate2 @@ -1051,7 +1053,7 @@ if ($PREFIX eq "aesni") { &set_label("ctr32_one_shortcut",16); &movups ($inout0,&QWP(0,$rounds_)); # load ivec &mov ($rounds,&DWP(240,$key)); - + &set_label("ctr32_one"); if ($inline) { &aesni_inline_generate1("enc"); } diff --git a/crypto/aes/asm/aesni-x86_64.pl b/crypto/aes/asm/aesni-x86_64.pl index 98ca1799..2a202c53 100644 --- a/crypto/aes/asm/aesni-x86_64.pl +++ b/crypto/aes/asm/aesni-x86_64.pl @@ -34,7 +34,7 @@ # ECB 4.25/4.25 1.38/1.38 1.28/1.28 1.26/1.26 1.26/1.26 # CTR 5.42/5.42 1.92/1.92 1.44/1.44 1.28/1.28 1.26/1.26 # CBC 4.38/4.43 4.15/1.43 4.07/1.32 4.07/1.29 4.06/1.28 -# CCM 5.66/9.42 4.42/5.41 4.16/4.40 4.09/4.15 4.06/4.07 +# CCM 5.66/9.42 4.42/5.41 4.16/4.40 4.09/4.15 4.06/4.07 # OFB 5.42/5.42 4.64/4.64 4.44/4.44 4.39/4.39 4.38/4.38 # CFB 5.73/5.85 5.56/5.62 5.48/5.56 5.47/5.55 5.47/5.55 # @@ -60,7 +60,7 @@ # identical to CBC, because CBC-MAC is essentially CBC encrypt without # saving output. CCM CTR "stays invisible," because it's neatly # interleaved wih CBC-MAC. This provides ~30% improvement over -# "straghtforward" CCM implementation with CTR and CBC-MAC performed +# "straightforward" CCM implementation with CTR and CBC-MAC performed # disjointly. Parallelizable modes practically achieve the theoretical # limit. # @@ -118,7 +118,7 @@ # performance is achieved by interleaving instructions working on # independent blocks. In which case asymptotic limit for such modes # can be obtained by dividing above mentioned numbers by AES -# instructions' interleave factor. Westmere can execute at most 3 +# instructions' interleave factor. Westmere can execute at most 3 # instructions at a time, meaning that optimal interleave factor is 3, # and that's where the "magic" number of 1.25 come from. "Optimal # interleave factor" means that increase of interleave factor does @@ -143,14 +143,14 @@ # asymptotic, if it can be surpassed, isn't it? What happens there? # Rewind to CBC paragraph for the answer. Yes, out-of-order execution # magic is responsible for this. Processor overlaps not only the -# additional instructions with AES ones, but even AES instuctions +# additional instructions with AES ones, but even AES instructions # processing adjacent triplets of independent blocks. In the 6x case # additional instructions still claim disproportionally small amount # of additional cycles, but in 8x case number of instructions must be # a tad too high for out-of-order logic to cope with, and AES unit # remains underutilized... As you can see 8x interleave is hardly # justifiable, so there no need to feel bad that 32-bit aesni-x86.pl -# utilizies 6x interleave because of limited register bank capacity. +# utilizes 6x interleave because of limited register bank capacity. # # Higher interleave factors do have negative impact on Westmere # performance. While for ECB mode it's negligible ~1.5%, other @@ -179,8 +179,10 @@ # Haswell 4.44/0.63 0.63 0.73 0.63 0.70 # Skylake 2.62/0.63 0.63 0.63 0.63 # Silvermont 5.75/3.54 3.56 4.12 3.87(*) 4.11 +# Knights L 2.54/0.77 0.78 0.85 - 1.50 # Goldmont 3.82/1.26 1.26 1.29 1.29 1.50 # Bulldozer 5.77/0.70 0.72 0.90 0.70 0.95 +# Ryzen 2.71/0.35 0.35 0.44 0.38 0.49 # # (*) Atom Silvermont ECB result is suboptimal because of penalties # incurred by operations on %xmm8-15. As ECB is not considered @@ -313,7 +315,7 @@ ___ # on 2x subroutine on Atom Silvermont account. For processors that # can schedule aes[enc|dec] every cycle optimal interleave factor # equals to corresponding instructions latency. 8x is optimal for -# * Bridge and "super-optimal" for other Intel CPUs... +# * Bridge and "super-optimal" for other Intel CPUs... sub aesni_generate2 { my $dir=shift; @@ -1172,7 +1174,7 @@ ___ # with zero-round key xor. { my ($in0,$in1,$in2,$in3,$in4,$in5)=map("%xmm$_",(10..15)); -my ($key0,$ctr)=("${key_}d","${ivp}d"); +my ($key0,$ctr)=("%ebp","${ivp}d"); my $frame_size = 0x80 + ($win64?160:0); $code.=<<___; @@ -1180,6 +1182,7 @@ $code.=<<___; .type aesni_ctr32_encrypt_blocks,\@function,5 .align 16 aesni_ctr32_encrypt_blocks: +.cfi_startproc cmp \$1,$len jne .Lctr32_bulk @@ -1201,26 +1204,27 @@ $code.=<<___; .align 16 .Lctr32_bulk: - lea (%rsp),%rax + lea (%rsp),$key_ # use $key_ as frame pointer +.cfi_def_cfa_register $key_ push %rbp +.cfi_push %rbp sub \$$frame_size,%rsp and \$-16,%rsp # Linux kernel stack can be incorrectly seeded ___ $code.=<<___ if ($win64); - movaps %xmm6,-0xa8(%rax) # offload everything - movaps %xmm7,-0x98(%rax) - movaps %xmm8,-0x88(%rax) - movaps %xmm9,-0x78(%rax) - movaps %xmm10,-0x68(%rax) - movaps %xmm11,-0x58(%rax) - movaps %xmm12,-0x48(%rax) - movaps %xmm13,-0x38(%rax) - movaps %xmm14,-0x28(%rax) - movaps %xmm15,-0x18(%rax) + movaps %xmm6,-0xa8($key_) # offload everything + movaps %xmm7,-0x98($key_) + movaps %xmm8,-0x88($key_) + movaps %xmm9,-0x78($key_) + movaps %xmm10,-0x68($key_) + movaps %xmm11,-0x58($key_) + movaps %xmm12,-0x48($key_) + movaps %xmm13,-0x38($key_) + movaps %xmm14,-0x28($key_) + movaps %xmm15,-0x18($key_) .Lctr32_body: ___ $code.=<<___; - lea -8(%rax),%rbp # 8 16-byte words on top of stack are counter values # xor-ed with zero-round key @@ -1272,7 +1276,7 @@ $code.=<<___; lea 7($ctr),%r9 mov %r10d,0x60+12(%rsp) bswap %r9d - mov OPENSSL_ia32cap_P+4(%rip),%r10d + mov OPENSSL_ia32cap_P+4(%rip),%r10d xor $key0,%r9d and \$`1<<26|1<<22`,%r10d # isolate XSAVE+MOVBE mov %r9d,0x70+12(%rsp) @@ -1546,13 +1550,13 @@ $code.=<<___; sub \$8,$len jnc .Lctr32_loop8 # loop if $len-=8 didn't borrow - add \$8,$len # restore real remainig $len + add \$8,$len # restore real remaining $len jz .Lctr32_done # done if ($len==0) lea -0x80($key),$key .Lctr32_tail: # note that at this point $inout0..5 are populated with - # counter values xor-ed with 0-round key + # counter values xor-ed with 0-round key lea 16($key),$key cmp \$4,$len jb .Lctr32_loop3 @@ -1663,7 +1667,7 @@ $code.=<<___; movups $inout2,0x20($out) # $len was 3, stop store .Lctr32_done: - xorps %xmm0,%xmm0 # clear regiser bank + xorps %xmm0,%xmm0 # clear register bank xor $key0,$key0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -1692,26 +1696,26 @@ $code.=<<___ if (!$win64); pxor %xmm15,%xmm15 ___ $code.=<<___ if ($win64); - movaps -0xa0(%rbp),%xmm6 - movaps %xmm0,-0xa0(%rbp) # clear stack - movaps -0x90(%rbp),%xmm7 - movaps %xmm0,-0x90(%rbp) - movaps -0x80(%rbp),%xmm8 - movaps %xmm0,-0x80(%rbp) - movaps -0x70(%rbp),%xmm9 - movaps %xmm0,-0x70(%rbp) - movaps -0x60(%rbp),%xmm10 - movaps %xmm0,-0x60(%rbp) - movaps -0x50(%rbp),%xmm11 - movaps %xmm0,-0x50(%rbp) - movaps -0x40(%rbp),%xmm12 - movaps %xmm0,-0x40(%rbp) - movaps -0x30(%rbp),%xmm13 - movaps %xmm0,-0x30(%rbp) - movaps -0x20(%rbp),%xmm14 - movaps %xmm0,-0x20(%rbp) - movaps -0x10(%rbp),%xmm15 - movaps %xmm0,-0x10(%rbp) + movaps -0xa8($key_),%xmm6 + movaps %xmm0,-0xa8($key_) # clear stack + movaps -0x98($key_),%xmm7 + movaps %xmm0,-0x98($key_) + movaps -0x88($key_),%xmm8 + movaps %xmm0,-0x88($key_) + movaps -0x78($key_),%xmm9 + movaps %xmm0,-0x78($key_) + movaps -0x68($key_),%xmm10 + movaps %xmm0,-0x68($key_) + movaps -0x58($key_),%xmm11 + movaps %xmm0,-0x58($key_) + movaps -0x48($key_),%xmm12 + movaps %xmm0,-0x48($key_) + movaps -0x38($key_),%xmm13 + movaps %xmm0,-0x38($key_) + movaps -0x28($key_),%xmm14 + movaps %xmm0,-0x28($key_) + movaps -0x18($key_),%xmm15 + movaps %xmm0,-0x18($key_) movaps %xmm0,0x00(%rsp) movaps %xmm0,0x10(%rsp) movaps %xmm0,0x20(%rsp) @@ -1722,10 +1726,13 @@ $code.=<<___ if ($win64); movaps %xmm0,0x70(%rsp) ___ $code.=<<___; - lea (%rbp),%rsp - pop %rbp + mov -8($key_),%rbp +.cfi_restore %rbp + lea ($key_),%rsp +.cfi_def_cfa_register %rsp .Lctr32_epilogue: ret +.cfi_endproc .size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks ___ } @@ -1740,32 +1747,35 @@ my @tweak=map("%xmm$_",(10..15)); my ($twmask,$twres,$twtmp)=("%xmm8","%xmm9",@tweak[4]); my ($key2,$ivp,$len_)=("%r8","%r9","%r9"); my $frame_size = 0x70 + ($win64?160:0); +my $key_ = "%rbp"; # override so that we can use %r11 as FP $code.=<<___; .globl aesni_xts_encrypt .type aesni_xts_encrypt,\@function,6 .align 16 aesni_xts_encrypt: - lea (%rsp),%rax +.cfi_startproc + lea (%rsp),%r11 # frame pointer +.cfi_def_cfa_register %r11 push %rbp +.cfi_push %rbp sub \$$frame_size,%rsp and \$-16,%rsp # Linux kernel stack can be incorrectly seeded ___ $code.=<<___ if ($win64); - movaps %xmm6,-0xa8(%rax) # offload everything - movaps %xmm7,-0x98(%rax) - movaps %xmm8,-0x88(%rax) - movaps %xmm9,-0x78(%rax) - movaps %xmm10,-0x68(%rax) - movaps %xmm11,-0x58(%rax) - movaps %xmm12,-0x48(%rax) - movaps %xmm13,-0x38(%rax) - movaps %xmm14,-0x28(%rax) - movaps %xmm15,-0x18(%rax) + movaps %xmm6,-0xa8(%r11) # offload everything + movaps %xmm7,-0x98(%r11) + movaps %xmm8,-0x88(%r11) + movaps %xmm9,-0x78(%r11) + movaps %xmm10,-0x68(%r11) + movaps %xmm11,-0x58(%r11) + movaps %xmm12,-0x48(%r11) + movaps %xmm13,-0x38(%r11) + movaps %xmm14,-0x28(%r11) + movaps %xmm15,-0x18(%r11) .Lxts_enc_body: ___ $code.=<<___; - lea -8(%rax),%rbp movups ($ivp),$inout0 # load clear-text tweak mov 240(%r8),$rounds # key2->rounds mov 240($key),$rnds_ # key1->rounds @@ -1846,7 +1856,7 @@ $code.=<<___; lea `16*6`($inp),$inp pxor $twmask,$inout5 - pxor $twres,@tweak[0] # calclulate tweaks^round[last] + pxor $twres,@tweak[0] # calculate tweaks^round[last] aesenc $rndkey1,$inout4 pxor $twres,@tweak[1] movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^round[last] @@ -2183,26 +2193,26 @@ $code.=<<___ if (!$win64); pxor %xmm15,%xmm15 ___ $code.=<<___ if ($win64); - movaps -0xa0(%rbp),%xmm6 - movaps %xmm0,-0xa0(%rbp) # clear stack - movaps -0x90(%rbp),%xmm7 - movaps %xmm0,-0x90(%rbp) - movaps -0x80(%rbp),%xmm8 - movaps %xmm0,-0x80(%rbp) - movaps -0x70(%rbp),%xmm9 - movaps %xmm0,-0x70(%rbp) - movaps -0x60(%rbp),%xmm10 - movaps %xmm0,-0x60(%rbp) - movaps -0x50(%rbp),%xmm11 - movaps %xmm0,-0x50(%rbp) - movaps -0x40(%rbp),%xmm12 - movaps %xmm0,-0x40(%rbp) - movaps -0x30(%rbp),%xmm13 - movaps %xmm0,-0x30(%rbp) - movaps -0x20(%rbp),%xmm14 - movaps %xmm0,-0x20(%rbp) - movaps -0x10(%rbp),%xmm15 - movaps %xmm0,-0x10(%rbp) + movaps -0xa8(%r11),%xmm6 + movaps %xmm0,-0xa8(%r11) # clear stack + movaps -0x98(%r11),%xmm7 + movaps %xmm0,-0x98(%r11) + movaps -0x88(%r11),%xmm8 + movaps %xmm0,-0x88(%r11) + movaps -0x78(%r11),%xmm9 + movaps %xmm0,-0x78(%r11) + movaps -0x68(%r11),%xmm10 + movaps %xmm0,-0x68(%r11) + movaps -0x58(%r11),%xmm11 + movaps %xmm0,-0x58(%r11) + movaps -0x48(%r11),%xmm12 + movaps %xmm0,-0x48(%r11) + movaps -0x38(%r11),%xmm13 + movaps %xmm0,-0x38(%r11) + movaps -0x28(%r11),%xmm14 + movaps %xmm0,-0x28(%r11) + movaps -0x18(%r11),%xmm15 + movaps %xmm0,-0x18(%r11) movaps %xmm0,0x00(%rsp) movaps %xmm0,0x10(%rsp) movaps %xmm0,0x20(%rsp) @@ -2212,10 +2222,13 @@ $code.=<<___ if ($win64); movaps %xmm0,0x60(%rsp) ___ $code.=<<___; - lea (%rbp),%rsp - pop %rbp + mov -8(%r11),%rbp +.cfi_restore %rbp + lea (%r11),%rsp +.cfi_def_cfa_register %rsp .Lxts_enc_epilogue: ret +.cfi_endproc .size aesni_xts_encrypt,.-aesni_xts_encrypt ___ @@ -2224,26 +2237,28 @@ $code.=<<___; .type aesni_xts_decrypt,\@function,6 .align 16 aesni_xts_decrypt: - lea (%rsp),%rax +.cfi_startproc + lea (%rsp),%r11 # frame pointer +.cfi_def_cfa_register %r11 push %rbp +.cfi_push %rbp sub \$$frame_size,%rsp and \$-16,%rsp # Linux kernel stack can be incorrectly seeded ___ $code.=<<___ if ($win64); - movaps %xmm6,-0xa8(%rax) # offload everything - movaps %xmm7,-0x98(%rax) - movaps %xmm8,-0x88(%rax) - movaps %xmm9,-0x78(%rax) - movaps %xmm10,-0x68(%rax) - movaps %xmm11,-0x58(%rax) - movaps %xmm12,-0x48(%rax) - movaps %xmm13,-0x38(%rax) - movaps %xmm14,-0x28(%rax) - movaps %xmm15,-0x18(%rax) + movaps %xmm6,-0xa8(%r11) # offload everything + movaps %xmm7,-0x98(%r11) + movaps %xmm8,-0x88(%r11) + movaps %xmm9,-0x78(%r11) + movaps %xmm10,-0x68(%r11) + movaps %xmm11,-0x58(%r11) + movaps %xmm12,-0x48(%r11) + movaps %xmm13,-0x38(%r11) + movaps %xmm14,-0x28(%r11) + movaps %xmm15,-0x18(%r11) .Lxts_dec_body: ___ $code.=<<___; - lea -8(%rax),%rbp movups ($ivp),$inout0 # load clear-text tweak mov 240($key2),$rounds # key2->rounds mov 240($key),$rnds_ # key1->rounds @@ -2327,7 +2342,7 @@ $code.=<<___; lea `16*6`($inp),$inp pxor $twmask,$inout5 - pxor $twres,@tweak[0] # calclulate tweaks^round[last] + pxor $twres,@tweak[0] # calculate tweaks^round[last] aesdec $rndkey1,$inout4 pxor $twres,@tweak[1] movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^last round key @@ -2687,26 +2702,26 @@ $code.=<<___ if (!$win64); pxor %xmm15,%xmm15 ___ $code.=<<___ if ($win64); - movaps -0xa0(%rbp),%xmm6 - movaps %xmm0,-0xa0(%rbp) # clear stack - movaps -0x90(%rbp),%xmm7 - movaps %xmm0,-0x90(%rbp) - movaps -0x80(%rbp),%xmm8 - movaps %xmm0,-0x80(%rbp) - movaps -0x70(%rbp),%xmm9 - movaps %xmm0,-0x70(%rbp) - movaps -0x60(%rbp),%xmm10 - movaps %xmm0,-0x60(%rbp) - movaps -0x50(%rbp),%xmm11 - movaps %xmm0,-0x50(%rbp) - movaps -0x40(%rbp),%xmm12 - movaps %xmm0,-0x40(%rbp) - movaps -0x30(%rbp),%xmm13 - movaps %xmm0,-0x30(%rbp) - movaps -0x20(%rbp),%xmm14 - movaps %xmm0,-0x20(%rbp) - movaps -0x10(%rbp),%xmm15 - movaps %xmm0,-0x10(%rbp) + movaps -0xa8(%r11),%xmm6 + movaps %xmm0,-0xa8(%r11) # clear stack + movaps -0x98(%r11),%xmm7 + movaps %xmm0,-0x98(%r11) + movaps -0x88(%r11),%xmm8 + movaps %xmm0,-0x88(%r11) + movaps -0x78(%r11),%xmm9 + movaps %xmm0,-0x78(%r11) + movaps -0x68(%r11),%xmm10 + movaps %xmm0,-0x68(%r11) + movaps -0x58(%r11),%xmm11 + movaps %xmm0,-0x58(%r11) + movaps -0x48(%r11),%xmm12 + movaps %xmm0,-0x48(%r11) + movaps -0x38(%r11),%xmm13 + movaps %xmm0,-0x38(%r11) + movaps -0x28(%r11),%xmm14 + movaps %xmm0,-0x28(%r11) + movaps -0x18(%r11),%xmm15 + movaps %xmm0,-0x18(%r11) movaps %xmm0,0x00(%rsp) movaps %xmm0,0x10(%rsp) movaps %xmm0,0x20(%rsp) @@ -2716,10 +2731,13 @@ $code.=<<___ if ($win64); movaps %xmm0,0x60(%rsp) ___ $code.=<<___; - lea (%rbp),%rsp - pop %rbp + mov -8(%r11),%rbp +.cfi_restore %rbp + lea (%r11),%rsp +.cfi_def_cfa_register %rsp .Lxts_dec_epilogue: ret +.cfi_endproc .size aesni_xts_decrypt,.-aesni_xts_decrypt ___ } @@ -2744,12 +2762,18 @@ $code.=<<___; .type aesni_ocb_encrypt,\@function,6 .align 32 aesni_ocb_encrypt: +.cfi_startproc lea (%rsp),%rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 ___ $code.=<<___ if ($win64); lea -0xa0(%rsp),%rsp @@ -2943,6 +2967,8 @@ $code.=<<___ if (!$win64); pxor %xmm13,%xmm13 pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 + lea 0x28(%rsp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x00(%rsp),%xmm6 @@ -2967,16 +2993,23 @@ $code.=<<___ if ($win64); movaps %xmm0,0x90(%rsp) lea 0xa0+0x28(%rsp),%rax .Locb_enc_pop: - lea 0xa0(%rsp),%rsp ___ $code.=<<___; - pop %r14 - pop %r13 - pop %r12 - pop %rbp - pop %rbx + mov -40(%rax),%r14 +.cfi_restore %r14 + mov -32(%rax),%r13 +.cfi_restore %r13 + mov -24(%rax),%r12 +.cfi_restore %r12 + mov -16(%rax),%rbp +.cfi_restore %rbp + mov -8(%rax),%rbx +.cfi_restore %rbx + lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Locb_enc_epilogue: ret +.cfi_endproc .size aesni_ocb_encrypt,.-aesni_ocb_encrypt .type __ocb_encrypt6,\@abi-omnipotent @@ -3189,12 +3222,18 @@ __ocb_encrypt1: .type aesni_ocb_decrypt,\@function,6 .align 32 aesni_ocb_decrypt: +.cfi_startproc lea (%rsp),%rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 ___ $code.=<<___ if ($win64); lea -0xa0(%rsp),%rsp @@ -3410,6 +3449,8 @@ $code.=<<___ if (!$win64); pxor %xmm13,%xmm13 pxor %xmm14,%xmm14 pxor %xmm15,%xmm15 + lea 0x28(%rsp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x00(%rsp),%xmm6 @@ -3434,16 +3475,23 @@ $code.=<<___ if ($win64); movaps %xmm0,0x90(%rsp) lea 0xa0+0x28(%rsp),%rax .Locb_dec_pop: - lea 0xa0(%rsp),%rsp ___ $code.=<<___; - pop %r14 - pop %r13 - pop %r12 - pop %rbp - pop %rbx + mov -40(%rax),%r14 +.cfi_restore %r14 + mov -32(%rax),%r13 +.cfi_restore %r13 + mov -24(%rax),%r12 +.cfi_restore %r12 + mov -16(%rax),%rbp +.cfi_restore %rbp + mov -8(%rax),%rbx +.cfi_restore %rbx + lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Locb_dec_epilogue: ret +.cfi_endproc .size aesni_ocb_decrypt,.-aesni_ocb_decrypt .type __ocb_decrypt6,\@abi-omnipotent @@ -3650,13 +3698,13 @@ ___ { my $frame_size = 0x10 + ($win64?0xa0:0); # used in decrypt my ($iv,$in0,$in1,$in2,$in3,$in4)=map("%xmm$_",(10..15)); -my $inp_=$key_; $code.=<<___; .globl ${PREFIX}_cbc_encrypt .type ${PREFIX}_cbc_encrypt,\@function,6 .align 16 ${PREFIX}_cbc_encrypt: +.cfi_startproc test $len,$len # check length jz .Lcbc_ret @@ -3732,8 +3780,10 @@ $code.=<<___; jmp .Lcbc_ret .align 16 .Lcbc_decrypt_bulk: - lea (%rsp),%rax + lea (%rsp),%r11 # frame pointer +.cfi_def_cfa_register %r11 push %rbp +.cfi_push %rbp sub \$$frame_size,%rsp and \$-16,%rsp # Linux kernel stack can be incorrectly seeded ___ @@ -3750,8 +3800,11 @@ $code.=<<___ if ($win64); movaps %xmm15,0xa0(%rsp) .Lcbc_decrypt_body: ___ + +my $inp_=$key_="%rbp"; # reassign $key_ + $code.=<<___; - lea -8(%rax),%rbp + mov $key,$key_ # [re-]backup $key [after reassignment] movups ($ivp),$iv mov $rnds_,$rounds cmp \$0x50,$len @@ -3791,7 +3844,7 @@ $code.=<<___; pxor $rndkey0,$inout1 $movkey 0x10-0x70($key),$rndkey1 pxor $rndkey0,$inout2 - xor $inp_,$inp_ + mov \$-1,$inp_ cmp \$0x70,$len # is there at least 0x60 bytes ahead? pxor $rndkey0,$inout3 pxor $rndkey0,$inout4 @@ -3807,8 +3860,8 @@ $code.=<<___; aesdec $rndkey1,$inout4 aesdec $rndkey1,$inout5 aesdec $rndkey1,$inout6 - setnc ${inp_}b - shl \$7,$inp_ + adc \$0,$inp_ + and \$128,$inp_ aesdec $rndkey1,$inout7 add $inp,$inp_ $movkey 0x30-0x70($key),$rndkey1 @@ -4172,10 +4225,13 @@ $code.=<<___ if ($win64); movaps %xmm0,0xa0(%rsp) ___ $code.=<<___; - lea (%rbp),%rsp - pop %rbp + mov -8(%r11),%rbp +.cfi_restore %rbp + lea (%r11),%rsp +.cfi_def_cfa_register %rsp .Lcbc_ret: ret +.cfi_endproc .size ${PREFIX}_cbc_encrypt,.-${PREFIX}_cbc_encrypt ___ } @@ -4196,7 +4252,9 @@ $code.=<<___; .type ${PREFIX}_set_decrypt_key,\@abi-omnipotent .align 16 ${PREFIX}_set_decrypt_key: +.cfi_startproc .byte 0x48,0x83,0xEC,0x08 # sub rsp,8 +.cfi_adjust_cfa_offset 8 call __aesni_set_encrypt_key shl \$4,$bits # rounds-1 after _aesni_set_encrypt_key test %eax,%eax @@ -4229,15 +4287,16 @@ ${PREFIX}_set_decrypt_key: pxor %xmm0,%xmm0 .Ldec_key_ret: add \$8,%rsp +.cfi_adjust_cfa_offset -8 ret +.cfi_endproc .LSEH_end_set_decrypt_key: .size ${PREFIX}_set_decrypt_key,.-${PREFIX}_set_decrypt_key ___ -# This is based on submission by -# -# Huang Ying -# Vinodh Gopal +# This is based on submission from Intel by +# Huang Ying +# Vinodh Gopal # Kahraman Akdemir # # Aggressively optimized in respect to aeskeygenassist's critical path @@ -4265,7 +4324,9 @@ $code.=<<___; .align 16 ${PREFIX}_set_encrypt_key: __aesni_set_encrypt_key: +.cfi_startproc .byte 0x48,0x83,0xEC,0x08 # sub rsp,8 +.cfi_adjust_cfa_offset 8 mov \$-1,%rax test $inp,$inp jz .Lenc_key_ret @@ -4454,7 +4515,7 @@ __aesni_set_encrypt_key: .align 16 .L14rounds: - movups 16($inp),%xmm2 # remaning half of *userKey + movups 16($inp),%xmm2 # remaining half of *userKey mov \$13,$bits # 14 rounds for 256 lea 16(%rax),%rax cmp \$`1<<28`,%r10d # AVX, but no XOP @@ -4558,7 +4619,9 @@ __aesni_set_encrypt_key: pxor %xmm4,%xmm4 pxor %xmm5,%xmm5 add \$8,%rsp +.cfi_adjust_cfa_offset -8 ret +.cfi_endproc .LSEH_end_set_encrypt_key: .align 16 @@ -4744,13 +4807,16 @@ ctr_xts_se_handler: cmp %r10,%rbx # context->Rip>=epilogue label jae .Lcommon_seh_tail - mov 160($context),%rax # pull context->Rbp - lea -0xa0(%rax),%rsi # %xmm save area + mov 208($context),%rax # pull context->R11 + + lea -0xa8(%rax),%rsi # %xmm save area lea 512($context),%rdi # & context.Xmm6 mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax) .long 0xa548f3fc # cld; rep movsq - jmp .Lcommon_rbp_tail + mov -8(%rax),%rbp # restore saved %rbp + mov %rbp,160($context) # restore context->Rbp + jmp .Lcommon_seh_tail .size ctr_xts_se_handler,.-ctr_xts_se_handler .type ocb_se_handler,\@abi-omnipotent @@ -4834,9 +4900,13 @@ cbc_se_handler: cmp %r10,%rbx # context->Rip<"prologue" label jb .Lcommon_seh_tail + mov 120($context),%rax # pull context->Rax + lea .Lcbc_decrypt_body(%rip),%r10 cmp %r10,%rbx # context->RipRsp lea .Lcbc_ret(%rip),%r10 cmp %r10,%rbx # context->Rip>="epilogue" label @@ -4847,15 +4917,10 @@ cbc_se_handler: mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax) .long 0xa548f3fc # cld; rep movsq -.Lcommon_rbp_tail: - mov 160($context),%rax # pull context->Rbp - mov (%rax),%rbp # restore saved %rbp - lea 8(%rax),%rax # adjust stack pointer - mov %rbp,160($context) # restore context->Rbp - jmp .Lcommon_seh_tail + mov 208($context),%rax # pull context->R11 -.Lrestore_cbc_rax: - mov 120($context),%rax + mov -8(%rax),%rbp # restore saved %rbp + mov %rbp,160($context) # restore context->Rbp .Lcommon_seh_tail: mov 8(%rax),%rdi diff --git a/crypto/aes/asm/aesp8-ppc.pl b/crypto/aes/asm/aesp8-ppc.pl index b7e92f65..7463df6c 100755 --- a/crypto/aes/asm/aesp8-ppc.pl +++ b/crypto/aes/asm/aesp8-ppc.pl @@ -3773,7 +3773,7 @@ foreach(split("\n",$code)) { if ($flavour =~ /le$/o) { SWITCH: for($conv) { /\?inv/ && do { @bytes=map($_^0xf,@bytes); last; }; - /\?rev/ && do { @bytes=reverse(@bytes); last; }; + /\?rev/ && do { @bytes=reverse(@bytes); last; }; } } diff --git a/crypto/aes/asm/aest4-sparcv9.pl b/crypto/aes/asm/aest4-sparcv9.pl index bf479c60..54d0c588 100644 --- a/crypto/aes/asm/aest4-sparcv9.pl +++ b/crypto/aes/asm/aest4-sparcv9.pl @@ -8,9 +8,9 @@ # ==================================================================== -# Written by David S. Miller and Andy Polyakov -# . The module is licensed under 2-clause BSD -# license. October 2012. All rights reserved. +# Written by David S. Miller and Andy Polyakov. +# The module is licensed under 2-clause BSD license. October 2012. +# All rights reserved. # ==================================================================== ###################################################################### @@ -44,7 +44,7 @@ # instructions with those on critical path. Amazing! # # As with Intel AES-NI, question is if it's possible to improve -# performance of parallelizeable modes by interleaving round +# performance of parallelizable modes by interleaving round # instructions. Provided round instruction latency and throughput # optimal interleave factor is 2. But can we expect 2x performance # improvement? Well, as round instructions can be issued one per diff --git a/crypto/aes/asm/aesv8-armx.pl b/crypto/aes/asm/aesv8-armx.pl index 1782d5b4..8b37cfc4 100755 --- a/crypto/aes/asm/aesv8-armx.pl +++ b/crypto/aes/asm/aesv8-armx.pl @@ -35,6 +35,7 @@ # Cortex-A57(*) 1.95 0.85 0.93 # Denver 1.96 0.86 0.80 # Mongoose 1.33 1.20 1.20 +# Kryo 1.26 0.94 1.00 # # (*) original 3.64/1.34/1.32 results were for r0p0 revision # and are still same even for updated module; @@ -929,7 +930,7 @@ if ($flavour =~ /64/) { ######## 64-bit code s/^(\s+)v/$1/o or # strip off v prefix s/\bbx\s+lr\b/ret/o; - # fix up remainig legacy suffixes + # fix up remaining legacy suffixes s/\.[ui]?8//o; m/\],#8/o and s/\.16b/\.8b/go; s/\.[ui]?32//o and s/\.16b/\.4s/go; @@ -964,21 +965,21 @@ if ($flavour =~ /64/) { ######## 64-bit code $arg =~ m/q([0-9]+),\s*\{q([0-9]+)\},\s*q([0-9]+)/o && sprintf "vtbl.8 d%d,{q%d},d%d\n\t". - "vtbl.8 d%d,{q%d},d%d", 2*$1,$2,2*$3, 2*$1+1,$2,2*$3+1; + "vtbl.8 d%d,{q%d},d%d", 2*$1,$2,2*$3, 2*$1+1,$2,2*$3+1; } sub unvdup32 { my $arg=shift; $arg =~ m/q([0-9]+),\s*q([0-9]+)\[([0-3])\]/o && - sprintf "vdup.32 q%d,d%d[%d]",$1,2*$2+($3>>1),$3&1; + sprintf "vdup.32 q%d,d%d[%d]",$1,2*$2+($3>>1),$3&1; } sub unvmov32 { my $arg=shift; $arg =~ m/q([0-9]+)\[([0-3])\],(.*)/o && - sprintf "vmov.32 d%d[%d],%s",2*$1+($2>>1),$2&1,$3; + sprintf "vmov.32 d%d[%d],%s",2*$1+($2>>1),$2&1,$3; } foreach(split("\n",$code)) { @@ -988,7 +989,7 @@ if ($flavour =~ /64/) { ######## 64-bit code s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers s/\/\/\s?/@ /o; # new->old style commentary - # fix up remainig new-style suffixes + # fix up remaining new-style suffixes s/\{q([0-9]+)\},\s*\[(.+)\],#8/sprintf "{d%d},[$2]!",2*$1/eo or s/\],#[0-9]+/]!/o; diff --git a/crypto/aes/asm/bsaes-armv7.pl b/crypto/aes/asm/bsaes-armv7.pl index 7af38afc..0c5e762a 100644 --- a/crypto/aes/asm/bsaes-armv7.pl +++ b/crypto/aes/asm/bsaes-armv7.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2012-2018 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -14,8 +14,7 @@ # details see http://www.openssl.org/~appro/cryptogams/. # # Specific modes and adaptation for Linux kernel by Ard Biesheuvel -# . Permission to use under GPL terms is -# granted. +# of Linaro. Permission to use under GPL terms is granted. # ==================================================================== # Bit-sliced AES for ARM NEON @@ -49,10 +48,7 @@ # # April-August 2013 -# -# Add CBC, CTR and XTS subroutines, adapt for kernel use. -# -# +# Add CBC, CTR and XTS subroutines and adapt for kernel use; courtesy of Ard. $flavour = shift; if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; } @@ -91,7 +87,7 @@ my @s=@_[12..15]; sub InBasisChange { # input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb -# output in lsb > [b6, b5, b0, b3, b7, b1, b4, b2] < msb +# output in lsb > [b6, b5, b0, b3, b7, b1, b4, b2] < msb my @b=@_[0..7]; $code.=<<___; veor @b[2], @b[2], @b[1] @@ -746,7 +742,7 @@ $code.=<<___; _bsaes_decrypt8: adr $const,. vldmia $key!, {@XMM[9]} @ round 0 key -#if defined(__thumb2__) || defined(__APPLE__) +#ifdef __APPLE__ adr $const,.LM0ISR #else add $const,$const,#.LM0ISR-_bsaes_decrypt8 @@ -845,7 +841,7 @@ _bsaes_const: _bsaes_encrypt8: adr $const,. vldmia $key!, {@XMM[9]} @ round 0 key -#if defined(__thumb2__) || defined(__APPLE__) +#ifdef __APPLE__ adr $const,.LM0SR #else sub $const,$const,#_bsaes_encrypt8-.LM0SR @@ -953,7 +949,7 @@ $code.=<<___; _bsaes_key_convert: adr $const,. vld1.8 {@XMM[7]}, [$inp]! @ load round 0 key -#if defined(__thumb2__) || defined(__APPLE__) +#ifdef __APPLE__ adr $const,.LM0 #else sub $const,$const,#_bsaes_key_convert-.LM0 diff --git a/crypto/aes/asm/bsaes-x86_64.pl b/crypto/aes/asm/bsaes-x86_64.pl index 921d870e..2c79c2b6 100644 --- a/crypto/aes/asm/bsaes-x86_64.pl +++ b/crypto/aes/asm/bsaes-x86_64.pl @@ -131,7 +131,7 @@ my @s=@_[12..15]; sub InBasisChange { # input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb -# output in lsb > [b6, b5, b0, b3, b7, b1, b4, b2] < msb +# output in lsb > [b6, b5, b0, b3, b7, b1, b4, b2] < msb my @b=@_[0..7]; $code.=<<___; pxor @b[6], @b[5] @@ -381,7 +381,7 @@ $code.=<<___; pxor @s[0], @t[3] pxor @s[1], @t[2] pxor @s[2], @t[1] - pxor @s[3], @t[0] + pxor @s[3], @t[0] #Inv_GF16 \t0, \t1, \t2, \t3, \s0, \s1, \s2, \s3 @@ -1165,15 +1165,23 @@ $code.=<<___; .type bsaes_ecb_encrypt_blocks,\@abi-omnipotent .align 16 bsaes_ecb_encrypt_blocks: +.cfi_startproc mov %rsp, %rax .Lecb_enc_prologue: push %rbp +.cfi_push %rbp push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea -0x48(%rsp),%rsp +.cfi_adjust_cfa_offset 0x48 ___ $code.=<<___ if ($win64); lea -0xa0(%rsp), %rsp @@ -1191,6 +1199,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rsp,%rbp # backup %rsp +.cfi_def_cfa_register %rbp mov 240($arg4),%eax # rounds mov $arg1,$inp # backup arguments mov $arg2,$out @@ -1334,7 +1343,8 @@ $code.=<<___; cmp %rax, %rbp jb .Lecb_enc_bzero - lea (%rbp),%rsp # restore %rsp + lea 0x78(%rbp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x40(%rbp), %xmm6 @@ -1347,34 +1357,50 @@ $code.=<<___ if ($win64); movaps 0xb0(%rbp), %xmm13 movaps 0xc0(%rbp), %xmm14 movaps 0xd0(%rbp), %xmm15 - lea 0xa0(%rbp), %rsp + lea 0xa0(%rax), %rax +.Lecb_enc_tail: ___ $code.=<<___; - mov 0x48(%rsp), %r15 - mov 0x50(%rsp), %r14 - mov 0x58(%rsp), %r13 - mov 0x60(%rsp), %r12 - mov 0x68(%rsp), %rbx - mov 0x70(%rsp), %rax - lea 0x78(%rsp), %rsp - mov %rax, %rbp + mov -48(%rax), %r15 +.cfi_restore %r15 + mov -40(%rax), %r14 +.cfi_restore %r14 + mov -32(%rax), %r13 +.cfi_restore %r13 + mov -24(%rax), %r12 +.cfi_restore %r12 + mov -16(%rax), %rbx +.cfi_restore %rbx + mov -8(%rax), %rbp +.cfi_restore %rbp + lea (%rax), %rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lecb_enc_epilogue: ret +.cfi_endproc .size bsaes_ecb_encrypt_blocks,.-bsaes_ecb_encrypt_blocks .globl bsaes_ecb_decrypt_blocks .type bsaes_ecb_decrypt_blocks,\@abi-omnipotent .align 16 bsaes_ecb_decrypt_blocks: +.cfi_startproc mov %rsp, %rax .Lecb_dec_prologue: push %rbp +.cfi_push %rbp push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea -0x48(%rsp),%rsp +.cfi_adjust_cfa_offset 0x48 ___ $code.=<<___ if ($win64); lea -0xa0(%rsp), %rsp @@ -1392,6 +1418,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rsp,%rbp # backup %rsp +.cfi_def_cfa_register %rbp mov 240($arg4),%eax # rounds mov $arg1,$inp # backup arguments mov $arg2,$out @@ -1536,7 +1563,8 @@ $code.=<<___; cmp %rax, %rbp jb .Lecb_dec_bzero - lea (%rbp),%rsp # restore %rsp + lea 0x78(%rbp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x40(%rbp), %xmm6 @@ -1549,19 +1577,27 @@ $code.=<<___ if ($win64); movaps 0xb0(%rbp), %xmm13 movaps 0xc0(%rbp), %xmm14 movaps 0xd0(%rbp), %xmm15 - lea 0xa0(%rbp), %rsp + lea 0xa0(%rax), %rax +.Lecb_dec_tail: ___ $code.=<<___; - mov 0x48(%rsp), %r15 - mov 0x50(%rsp), %r14 - mov 0x58(%rsp), %r13 - mov 0x60(%rsp), %r12 - mov 0x68(%rsp), %rbx - mov 0x70(%rsp), %rax - lea 0x78(%rsp), %rsp - mov %rax, %rbp + mov -48(%rax), %r15 +.cfi_restore %r15 + mov -40(%rax), %r14 +.cfi_restore %r14 + mov -32(%rax), %r13 +.cfi_restore %r13 + mov -24(%rax), %r12 +.cfi_restore %r12 + mov -16(%rax), %rbx +.cfi_restore %rbx + mov -8(%rax), %rbp +.cfi_restore %rbp + lea (%rax), %rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lecb_dec_epilogue: ret +.cfi_endproc .size bsaes_ecb_decrypt_blocks,.-bsaes_ecb_decrypt_blocks ___ } @@ -1571,6 +1607,7 @@ $code.=<<___; .type bsaes_cbc_encrypt,\@abi-omnipotent .align 16 bsaes_cbc_encrypt: +.cfi_startproc ___ $code.=<<___ if ($win64); mov 48(%rsp),$arg6 # pull direction flag @@ -1584,12 +1621,19 @@ $code.=<<___; mov %rsp, %rax .Lcbc_dec_prologue: push %rbp +.cfi_push %rbp push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea -0x48(%rsp), %rsp +.cfi_adjust_cfa_offset 0x48 ___ $code.=<<___ if ($win64); mov 0xa0(%rsp),$arg5 # pull ivp @@ -1608,6 +1652,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rsp, %rbp # backup %rsp +.cfi_def_cfa_register %rbp mov 240($arg4), %eax # rounds mov $arg1, $inp # backup arguments mov $arg2, $out @@ -1826,7 +1871,8 @@ $code.=<<___; cmp %rax, %rbp ja .Lcbc_dec_bzero - lea (%rbp),%rsp # restore %rsp + lea 0x78(%rbp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x40(%rbp), %xmm6 @@ -1839,34 +1885,50 @@ $code.=<<___ if ($win64); movaps 0xb0(%rbp), %xmm13 movaps 0xc0(%rbp), %xmm14 movaps 0xd0(%rbp), %xmm15 - lea 0xa0(%rbp), %rsp + lea 0xa0(%rax), %rax +.Lcbc_dec_tail: ___ $code.=<<___; - mov 0x48(%rsp), %r15 - mov 0x50(%rsp), %r14 - mov 0x58(%rsp), %r13 - mov 0x60(%rsp), %r12 - mov 0x68(%rsp), %rbx - mov 0x70(%rsp), %rax - lea 0x78(%rsp), %rsp - mov %rax, %rbp + mov -48(%rax), %r15 +.cfi_restore %r15 + mov -40(%rax), %r14 +.cfi_restore %r14 + mov -32(%rax), %r13 +.cfi_restore %r13 + mov -24(%rax), %r12 +.cfi_restore %r12 + mov -16(%rax), %rbx +.cfi_restore %rbx + mov -8(%rax), %rbp +.cfi_restore %rbp + lea (%rax), %rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lcbc_dec_epilogue: ret +.cfi_endproc .size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt .globl bsaes_ctr32_encrypt_blocks .type bsaes_ctr32_encrypt_blocks,\@abi-omnipotent .align 16 bsaes_ctr32_encrypt_blocks: +.cfi_startproc mov %rsp, %rax .Lctr_enc_prologue: push %rbp +.cfi_push %rbp push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea -0x48(%rsp), %rsp +.cfi_adjust_cfa_offset 0x48 ___ $code.=<<___ if ($win64); mov 0xa0(%rsp),$arg5 # pull ivp @@ -1885,6 +1947,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rsp, %rbp # backup %rsp +.cfi_def_cfa_register %rbp movdqu ($arg5), %xmm0 # load counter mov 240($arg4), %eax # rounds mov $arg1, $inp # backup arguments @@ -2058,7 +2121,8 @@ $code.=<<___; cmp %rax, %rbp ja .Lctr_enc_bzero - lea (%rbp),%rsp # restore %rsp + lea 0x78(%rbp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x40(%rbp), %xmm6 @@ -2071,19 +2135,27 @@ $code.=<<___ if ($win64); movaps 0xb0(%rbp), %xmm13 movaps 0xc0(%rbp), %xmm14 movaps 0xd0(%rbp), %xmm15 - lea 0xa0(%rbp), %rsp + lea 0xa0(%rax), %rax +.Lctr_enc_tail: ___ $code.=<<___; - mov 0x48(%rsp), %r15 - mov 0x50(%rsp), %r14 - mov 0x58(%rsp), %r13 - mov 0x60(%rsp), %r12 - mov 0x68(%rsp), %rbx - mov 0x70(%rsp), %rax - lea 0x78(%rsp), %rsp - mov %rax, %rbp + mov -48(%rax), %r15 +.cfi_restore %r15 + mov -40(%rax), %r14 +.cfi_restore %r14 + mov -32(%rax), %r13 +.cfi_restore %r13 + mov -24(%rax), %r12 +.cfi_restore %r12 + mov -16(%rax), %rbx +.cfi_restore %rbx + mov -8(%rax), %rbp +.cfi_restore %rbp + lea (%rax), %rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lctr_enc_epilogue: ret +.cfi_endproc .size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks ___ ###################################################################### @@ -2099,15 +2171,23 @@ $code.=<<___; .type bsaes_xts_encrypt,\@abi-omnipotent .align 16 bsaes_xts_encrypt: +.cfi_startproc mov %rsp, %rax .Lxts_enc_prologue: push %rbp +.cfi_push %rbp push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea -0x48(%rsp), %rsp +.cfi_adjust_cfa_offset 0x48 ___ $code.=<<___ if ($win64); mov 0xa0(%rsp),$arg5 # pull key2 @@ -2127,6 +2207,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rsp, %rbp # backup %rsp +.cfi_def_cfa_register %rbp mov $arg1, $inp # backup arguments mov $arg2, $out mov $arg3, $len @@ -2448,7 +2529,8 @@ $code.=<<___; cmp %rax, %rbp ja .Lxts_enc_bzero - lea (%rbp),%rsp # restore %rsp + lea 0x78(%rbp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x40(%rbp), %xmm6 @@ -2461,34 +2543,50 @@ $code.=<<___ if ($win64); movaps 0xb0(%rbp), %xmm13 movaps 0xc0(%rbp), %xmm14 movaps 0xd0(%rbp), %xmm15 - lea 0xa0(%rbp), %rsp + lea 0xa0(%rax), %rax +.Lxts_enc_tail: ___ $code.=<<___; - mov 0x48(%rsp), %r15 - mov 0x50(%rsp), %r14 - mov 0x58(%rsp), %r13 - mov 0x60(%rsp), %r12 - mov 0x68(%rsp), %rbx - mov 0x70(%rsp), %rax - lea 0x78(%rsp), %rsp - mov %rax, %rbp + mov -48(%rax), %r15 +.cfi_restore %r15 + mov -40(%rax), %r14 +.cfi_restore %r14 + mov -32(%rax), %r13 +.cfi_restore %r13 + mov -24(%rax), %r12 +.cfi_restore %r12 + mov -16(%rax), %rbx +.cfi_restore %rbx + mov -8(%rax), %rbp +.cfi_restore %rbp + lea (%rax), %rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lxts_enc_epilogue: ret +.cfi_endproc .size bsaes_xts_encrypt,.-bsaes_xts_encrypt .globl bsaes_xts_decrypt .type bsaes_xts_decrypt,\@abi-omnipotent .align 16 bsaes_xts_decrypt: +.cfi_startproc mov %rsp, %rax .Lxts_dec_prologue: push %rbp +.cfi_push %rbp push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 lea -0x48(%rsp), %rsp +.cfi_adjust_cfa_offset 0x48 ___ $code.=<<___ if ($win64); mov 0xa0(%rsp),$arg5 # pull key2 @@ -2855,7 +2953,8 @@ $code.=<<___; cmp %rax, %rbp ja .Lxts_dec_bzero - lea (%rbp),%rsp # restore %rsp + lea 0x78(%rbp),%rax +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps 0x40(%rbp), %xmm6 @@ -2868,19 +2967,27 @@ $code.=<<___ if ($win64); movaps 0xb0(%rbp), %xmm13 movaps 0xc0(%rbp), %xmm14 movaps 0xd0(%rbp), %xmm15 - lea 0xa0(%rbp), %rsp + lea 0xa0(%rax), %rax +.Lxts_dec_tail: ___ $code.=<<___; - mov 0x48(%rsp), %r15 - mov 0x50(%rsp), %r14 - mov 0x58(%rsp), %r13 - mov 0x60(%rsp), %r12 - mov 0x68(%rsp), %rbx - mov 0x70(%rsp), %rax - lea 0x78(%rsp), %rsp - mov %rax, %rbp + mov -48(%rax), %r15 +.cfi_restore %r15 + mov -40(%rax), %r14 +.cfi_restore %r14 + mov -32(%rax), %r13 +.cfi_restore %r13 + mov -24(%rax), %r12 +.cfi_restore %r12 + mov -16(%rax), %rbx +.cfi_restore %rbx + mov -8(%rax), %rbp +.cfi_restore %rbp + lea (%rax), %rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lxts_dec_epilogue: ret +.cfi_endproc .size bsaes_xts_decrypt,.-bsaes_xts_decrypt ___ } @@ -2974,31 +3081,34 @@ se_handler: mov 0(%r11),%r10d # HandlerData[0] lea (%rsi,%r10),%r10 # prologue label - cmp %r10,%rbx # context->RipRsp + cmp %r10,%rbx # context->Rip<=prologue label + jbe .Lin_prologue mov 4(%r11),%r10d # HandlerData[1] lea (%rsi,%r10),%r10 # epilogue label cmp %r10,%rbx # context->Rip>=epilogue label jae .Lin_prologue + mov 8(%r11),%r10d # HandlerData[2] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=tail label + jae .Lin_tail + mov 160($context),%rax # pull context->Rbp lea 0x40(%rax),%rsi # %xmm save area lea 512($context),%rdi # &context.Xmm6 mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax) .long 0xa548f3fc # cld; rep movsq - lea 0xa0(%rax),%rax # adjust stack pointer + lea 0xa0+0x78(%rax),%rax # adjust stack pointer - mov 0x70(%rax),%rbp - mov 0x68(%rax),%rbx - mov 0x60(%rax),%r12 - mov 0x58(%rax),%r13 - mov 0x50(%rax),%r14 - mov 0x48(%rax),%r15 - lea 0x78(%rax),%rax # adjust stack pointer +.Lin_tail: + mov -48(%rax),%rbp + mov -40(%rax),%rbx + mov -32(%rax),%r12 + mov -24(%rax),%r13 + mov -16(%rax),%r14 + mov -8(%rax),%r15 mov %rbx,144($context) # restore context->Rbx mov %rbp,160($context) # restore context->Rbp mov %r12,216($context) # restore context->R12 @@ -3079,28 +3189,40 @@ $code.=<<___ if ($ecb); .byte 9,0,0,0 .rva se_handler .rva .Lecb_enc_body,.Lecb_enc_epilogue # HandlerData[] + .rva .Lecb_enc_tail + .long 0 .Lecb_dec_info: .byte 9,0,0,0 .rva se_handler .rva .Lecb_dec_body,.Lecb_dec_epilogue # HandlerData[] + .rva .Lecb_dec_tail + .long 0 ___ $code.=<<___; .Lcbc_dec_info: .byte 9,0,0,0 .rva se_handler .rva .Lcbc_dec_body,.Lcbc_dec_epilogue # HandlerData[] + .rva .Lcbc_dec_tail + .long 0 .Lctr_enc_info: .byte 9,0,0,0 .rva se_handler .rva .Lctr_enc_body,.Lctr_enc_epilogue # HandlerData[] + .rva .Lctr_enc_tail + .long 0 .Lxts_enc_info: .byte 9,0,0,0 .rva se_handler .rva .Lxts_enc_body,.Lxts_enc_epilogue # HandlerData[] + .rva .Lxts_enc_tail + .long 0 .Lxts_dec_info: .byte 9,0,0,0 .rva se_handler .rva .Lxts_dec_body,.Lxts_dec_epilogue # HandlerData[] + .rva .Lxts_dec_tail + .long 0 ___ } diff --git a/crypto/aes/asm/vpaes-armv8.pl b/crypto/aes/asm/vpaes-armv8.pl index d6b5f561..5131e13a 100755 --- a/crypto/aes/asm/vpaes-armv8.pl +++ b/crypto/aes/asm/vpaes-armv8.pl @@ -31,7 +31,7 @@ # Apple A7(***) 22.7(**) 10.9/14.3 [8.45/10.0 ] # Mongoose(***) 26.3(**) 21.0/25.0(**) [13.3/16.8 ] # -# (*) ECB denotes approximate result for parallelizeable modes +# (*) ECB denotes approximate result for parallelizable modes # such as CBC decrypt, CTR, etc.; # (**) these results are worse than scalar compiler-generated # code, but it's constant-time and therefore preferred; @@ -137,7 +137,7 @@ _vpaes_consts: .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 -.asciz "Vector Permutaion AES for ARMv8, Mike Hamburg (Stanford University)" +.asciz "Vector Permutation AES for ARMv8, Mike Hamburg (Stanford University)" .size _vpaes_consts,.-_vpaes_consts .align 6 ___ @@ -769,7 +769,7 @@ _vpaes_schedule_core: ld1 {v0.16b}, [$inp] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) bl _vpaes_schedule_transform // input transform mov $inp, #7 // mov \$7, %esi - + .Loop_schedule_256: sub $inp, $inp, #1 // dec %esi bl _vpaes_schedule_mangle // output low result @@ -778,7 +778,7 @@ _vpaes_schedule_core: // high round bl _vpaes_schedule_round cbz $inp, .Lschedule_mangle_last - bl _vpaes_schedule_mangle + bl _vpaes_schedule_mangle // low round. swap xmm7 and xmm6 dup v0.4s, v0.s[3] // vpshufd \$0xFF, %xmm0, %xmm0 @@ -787,7 +787,7 @@ _vpaes_schedule_core: mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7 bl _vpaes_schedule_low_round mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7 - + b .Loop_schedule_256 ## @@ -814,7 +814,7 @@ _vpaes_schedule_core: .Lschedule_mangle_last_dec: ld1 {v20.2d-v21.2d}, [x11] // reload constants - sub $out, $out, #16 // add \$-16, %rdx + sub $out, $out, #16 // add \$-16, %rdx eor v0.16b, v0.16b, v16.16b // vpxor .Lk_s63(%rip), %xmm0, %xmm0 bl _vpaes_schedule_transform // output transform st1 {v0.2d}, [$out] // vmovdqu %xmm0, (%rdx) # save last key diff --git a/crypto/aes/asm/vpaes-ppc.pl b/crypto/aes/asm/vpaes-ppc.pl index bb38fbe6..3c771a7e 100644 --- a/crypto/aes/asm/vpaes-ppc.pl +++ b/crypto/aes/asm/vpaes-ppc.pl @@ -1075,7 +1075,7 @@ Loop_schedule_256: # high round bl _vpaes_schedule_round bdz Lschedule_mangle_last # dec %esi - bl _vpaes_schedule_mangle + bl _vpaes_schedule_mangle # low round. swap xmm7 and xmm6 ?vspltw v0, v0, 3 # vpshufd \$0xFF, %xmm0, %xmm0 @@ -1083,7 +1083,7 @@ Loop_schedule_256: vmr v7, v6 # vmovdqa %xmm6, %xmm7 bl _vpaes_schedule_low_round vmr v7, v5 # vmovdqa %xmm5, %xmm7 - + b Loop_schedule_256 ## ## .aes_schedule_mangle_last @@ -1131,7 +1131,7 @@ Lschedule_mangle_last: Lschedule_mangle_last_dec: lvx $iptlo, r11, r12 # reload $ipt lvx $ipthi, r9, r12 - addi $out, $out, -16 # add \$-16, %rdx + addi $out, $out, -16 # add \$-16, %rdx vxor v0, v0, v26 # vpxor .Lk_s63(%rip), %xmm0, %xmm0 bl _vpaes_schedule_transform # output transform @@ -1566,7 +1566,7 @@ foreach (split("\n",$code)) { if ($flavour =~ /le$/o) { SWITCH: for($conv) { /\?inv/ && do { @bytes=map($_^0xf,@bytes); last; }; - /\?rev/ && do { @bytes=reverse(@bytes); last; }; + /\?rev/ && do { @bytes=reverse(@bytes); last; }; } } diff --git a/crypto/aes/asm/vpaes-x86.pl b/crypto/aes/asm/vpaes-x86.pl index 47615c07..7d57edc0 100644 --- a/crypto/aes/asm/vpaes-x86.pl +++ b/crypto/aes/asm/vpaes-x86.pl @@ -62,7 +62,7 @@ $output = pop; open OUT,">$output"; *STDOUT=*OUT; -&asm_init($ARGV[0],"vpaes-x86.pl",$x86only = $ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); $PREFIX="vpaes"; @@ -445,7 +445,7 @@ $k_dsbo=0x2c0; # decryption sbox final output ## &set_label("schedule_192",16); &movdqu ("xmm0",&QWP(8,$inp)); # load key part 2 (very unaligned) - &call ("_vpaes_schedule_transform"); # input transform + &call ("_vpaes_schedule_transform"); # input transform &movdqa ("xmm6","xmm0"); # save short part &pxor ("xmm4","xmm4"); # clear 4 &movhlps("xmm6","xmm4"); # clobber low side with zeros @@ -476,7 +476,7 @@ $k_dsbo=0x2c0; # decryption sbox final output ## &set_label("schedule_256",16); &movdqu ("xmm0",&QWP(16,$inp)); # load key part 2 (unaligned) - &call ("_vpaes_schedule_transform"); # input transform + &call ("_vpaes_schedule_transform"); # input transform &mov ($round,7); &set_label("loop_schedule_256"); @@ -487,7 +487,7 @@ $k_dsbo=0x2c0; # decryption sbox final output &call ("_vpaes_schedule_round"); &dec ($round); &jz (&label("schedule_mangle_last")); - &call ("_vpaes_schedule_mangle"); + &call ("_vpaes_schedule_mangle"); # low round. swap xmm7 and xmm6 &pshufd ("xmm0","xmm0",0xFF); @@ -610,7 +610,7 @@ $k_dsbo=0x2c0; # decryption sbox final output # subbyte &movdqa ("xmm4",&QWP($k_s0F,$const)); &movdqa ("xmm5",&QWP($k_inv,$const)); # 4 : 1/j - &movdqa ("xmm1","xmm4"); + &movdqa ("xmm1","xmm4"); &pandn ("xmm1","xmm0"); &psrld ("xmm1",4); # 1 = i &pand ("xmm0","xmm4"); # 0 = k diff --git a/crypto/aes/asm/vpaes-x86_64.pl b/crypto/aes/asm/vpaes-x86_64.pl index 422e8ee4..b715aca1 100644 --- a/crypto/aes/asm/vpaes-x86_64.pl +++ b/crypto/aes/asm/vpaes-x86_64.pl @@ -172,7 +172,7 @@ _vpaes_encrypt_core: pshufb %xmm1, %xmm0 ret .size _vpaes_encrypt_core,.-_vpaes_encrypt_core - + ## ## Decryption core ## @@ -333,7 +333,7 @@ _vpaes_schedule_core: ## .Lschedule_128: mov \$10, %esi - + .Loop_schedule_128: call _vpaes_schedule_round dec %rsi @@ -367,7 +367,7 @@ _vpaes_schedule_core: .Loop_schedule_192: call _vpaes_schedule_round - palignr \$8,%xmm6,%xmm0 + palignr \$8,%xmm6,%xmm0 call _vpaes_schedule_mangle # save key n call _vpaes_schedule_192_smear call _vpaes_schedule_mangle # save key n+1 @@ -393,7 +393,7 @@ _vpaes_schedule_core: movdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) call _vpaes_schedule_transform # input transform mov \$7, %esi - + .Loop_schedule_256: call _vpaes_schedule_mangle # output low result movdqa %xmm0, %xmm6 # save cur_lo in xmm6 @@ -402,7 +402,7 @@ _vpaes_schedule_core: call _vpaes_schedule_round dec %rsi jz .Lschedule_mangle_last - call _vpaes_schedule_mangle + call _vpaes_schedule_mangle # low round. swap xmm7 and xmm6 pshufd \$0xFF, %xmm0, %xmm0 @@ -410,10 +410,10 @@ _vpaes_schedule_core: movdqa %xmm6, %xmm7 call _vpaes_schedule_low_round movdqa %xmm5, %xmm7 - + jmp .Loop_schedule_256 - + ## ## .aes_schedule_mangle_last ## @@ -512,9 +512,9 @@ _vpaes_schedule_round: # rotate pshufd \$0xFF, %xmm0, %xmm0 palignr \$1, %xmm0, %xmm0 - + # fall through... - + # low round: same as high round, but no rotation and no rcon. _vpaes_schedule_low_round: # smear xmm7 @@ -553,7 +553,7 @@ _vpaes_schedule_low_round: pxor %xmm4, %xmm0 # 0 = sbox output # add in smeared stuff - pxor %xmm7, %xmm0 + pxor %xmm7, %xmm0 movdqa %xmm0, %xmm7 ret .size _vpaes_schedule_round,.-_vpaes_schedule_round diff --git a/crypto/aes/build.info b/crypto/aes/build.info index cf6cb5ec..0f048636 100644 --- a/crypto/aes/build.info +++ b/crypto/aes/build.info @@ -5,11 +5,14 @@ SOURCE[../../libcrypto]=\ GENERATE[aes-ia64.s]=asm/aes-ia64.S -GENERATE[aes-586.s]=asm/aes-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[aes-586.s]=asm/aes-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[aes-586.s]=../perlasm/x86asm.pl -GENERATE[vpaes-x86.s]=asm/vpaes-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[vpaes-x86.s]=asm/vpaes-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[vpaes-586.s]=../perlasm/x86asm.pl -GENERATE[aesni-x86.s]=asm/aesni-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[aesni-x86.s]=asm/aesni-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[aesni-586.s]=../perlasm/x86asm.pl GENERATE[aes-x86_64.s]=asm/aes-x86_64.pl $(PERLASM_SCHEME) @@ -35,6 +38,7 @@ GENERATE[aesp8-ppc.s]=asm/aesp8-ppc.pl $(PERLASM_SCHEME) GENERATE[aes-parisc.s]=asm/aes-parisc.pl $(PERLASM_SCHEME) GENERATE[aes-mips.S]=asm/aes-mips.pl $(PERLASM_SCHEME) +INCLUDE[aes-mips.o]=.. GENERATE[aesv8-armx.S]=asm/aesv8-armx.pl $(PERLASM_SCHEME) INCLUDE[aesv8-armx.o]=.. @@ -45,6 +49,9 @@ INCLUDE[aes-armv4.o]=.. GENERATE[bsaes-armv7.S]=asm/bsaes-armv7.pl $(PERLASM_SCHEME) INCLUDE[bsaes-armv7.o]=.. +GENERATE[aes-s390x.S]=asm/aes-s390x.pl $(PERLASM_SCHEME) +INCLUDE[aes-s390x.o]=.. + BEGINRAW[Makefile] ##### AES assembler implementations diff --git a/crypto/aria/aria.c b/crypto/aria/aria.c new file mode 100644 index 00000000..293bcc72 --- /dev/null +++ b/crypto/aria/aria.c @@ -0,0 +1,1212 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2017, 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 + */ + +/* + * Copyright (C) 2017 National Security Research Institute. All Rights Reserved. + * + * Information for ARIA + * http://210.104.33.10/ARIA/index-e.html (English) + * http://seed.kisa.or.kr/ (Korean) + * + * Public domain version is distributed above. + */ + +#include +#include "internal/aria.h" + +#include +#include + +#ifndef OPENSSL_SMALL_FOOTPRINT + +/* Begin macro */ + +/* rotation */ +#define rotl32(v, r) (((uint32_t)(v) << (r)) | ((uint32_t)(v) >> (32 - r))) +#define rotr32(v, r) (((uint32_t)(v) >> (r)) | ((uint32_t)(v) << (32 - r))) + +#define bswap32(v) \ + (((v) << 24) ^ ((v) >> 24) ^ \ + (((v) & 0x0000ff00) << 8) ^ (((v) & 0x00ff0000) >> 8)) + +#define GET_U8_BE(X, Y) ((uint8_t)((X) >> ((3 - Y) * 8))) +#define GET_U32_BE(X, Y) ( \ + ((uint32_t)((const uint8_t *)(X))[Y * 4 ] << 24) ^ \ + ((uint32_t)((const uint8_t *)(X))[Y * 4 + 1] << 16) ^ \ + ((uint32_t)((const uint8_t *)(X))[Y * 4 + 2] << 8) ^ \ + ((uint32_t)((const uint8_t *)(X))[Y * 4 + 3] ) ) + +#define PUT_U32_BE(DEST, IDX, VAL) \ + do { \ + ((uint8_t *)(DEST))[IDX * 4 ] = GET_U8_BE(VAL, 0); \ + ((uint8_t *)(DEST))[IDX * 4 + 1] = GET_U8_BE(VAL, 1); \ + ((uint8_t *)(DEST))[IDX * 4 + 2] = GET_U8_BE(VAL, 2); \ + ((uint8_t *)(DEST))[IDX * 4 + 3] = GET_U8_BE(VAL, 3); \ + } while(0) + +#define MAKE_U32(V0, V1, V2, V3) ( \ + ((uint32_t)((uint8_t)(V0)) << 24) | \ + ((uint32_t)((uint8_t)(V1)) << 16) | \ + ((uint32_t)((uint8_t)(V2)) << 8) | \ + ((uint32_t)((uint8_t)(V3)) ) ) + +/* End Macro*/ + +/* Key Constant + * 128bit : 0, 1, 2 + * 192bit : 1, 2, 3(0) + * 256bit : 2, 3(0), 4(1) + */ +static const uint32_t Key_RC[5][4] = { + { 0x517cc1b7, 0x27220a94, 0xfe13abe8, 0xfa9a6ee0 }, + { 0x6db14acc, 0x9e21c820, 0xff28b1d5, 0xef5de2b0 }, + { 0xdb92371d, 0x2126e970, 0x03249775, 0x04e8c90e }, + { 0x517cc1b7, 0x27220a94, 0xfe13abe8, 0xfa9a6ee0 }, + { 0x6db14acc, 0x9e21c820, 0xff28b1d5, 0xef5de2b0 } +}; + +/* 32bit expanded s-box */ +static const uint32_t S1[256] = { + 0x00636363, 0x007c7c7c, 0x00777777, 0x007b7b7b, + 0x00f2f2f2, 0x006b6b6b, 0x006f6f6f, 0x00c5c5c5, + 0x00303030, 0x00010101, 0x00676767, 0x002b2b2b, + 0x00fefefe, 0x00d7d7d7, 0x00ababab, 0x00767676, + 0x00cacaca, 0x00828282, 0x00c9c9c9, 0x007d7d7d, + 0x00fafafa, 0x00595959, 0x00474747, 0x00f0f0f0, + 0x00adadad, 0x00d4d4d4, 0x00a2a2a2, 0x00afafaf, + 0x009c9c9c, 0x00a4a4a4, 0x00727272, 0x00c0c0c0, + 0x00b7b7b7, 0x00fdfdfd, 0x00939393, 0x00262626, + 0x00363636, 0x003f3f3f, 0x00f7f7f7, 0x00cccccc, + 0x00343434, 0x00a5a5a5, 0x00e5e5e5, 0x00f1f1f1, + 0x00717171, 0x00d8d8d8, 0x00313131, 0x00151515, + 0x00040404, 0x00c7c7c7, 0x00232323, 0x00c3c3c3, + 0x00181818, 0x00969696, 0x00050505, 0x009a9a9a, + 0x00070707, 0x00121212, 0x00808080, 0x00e2e2e2, + 0x00ebebeb, 0x00272727, 0x00b2b2b2, 0x00757575, + 0x00090909, 0x00838383, 0x002c2c2c, 0x001a1a1a, + 0x001b1b1b, 0x006e6e6e, 0x005a5a5a, 0x00a0a0a0, + 0x00525252, 0x003b3b3b, 0x00d6d6d6, 0x00b3b3b3, + 0x00292929, 0x00e3e3e3, 0x002f2f2f, 0x00848484, + 0x00535353, 0x00d1d1d1, 0x00000000, 0x00ededed, + 0x00202020, 0x00fcfcfc, 0x00b1b1b1, 0x005b5b5b, + 0x006a6a6a, 0x00cbcbcb, 0x00bebebe, 0x00393939, + 0x004a4a4a, 0x004c4c4c, 0x00585858, 0x00cfcfcf, + 0x00d0d0d0, 0x00efefef, 0x00aaaaaa, 0x00fbfbfb, + 0x00434343, 0x004d4d4d, 0x00333333, 0x00858585, + 0x00454545, 0x00f9f9f9, 0x00020202, 0x007f7f7f, + 0x00505050, 0x003c3c3c, 0x009f9f9f, 0x00a8a8a8, + 0x00515151, 0x00a3a3a3, 0x00404040, 0x008f8f8f, + 0x00929292, 0x009d9d9d, 0x00383838, 0x00f5f5f5, + 0x00bcbcbc, 0x00b6b6b6, 0x00dadada, 0x00212121, + 0x00101010, 0x00ffffff, 0x00f3f3f3, 0x00d2d2d2, + 0x00cdcdcd, 0x000c0c0c, 0x00131313, 0x00ececec, + 0x005f5f5f, 0x00979797, 0x00444444, 0x00171717, + 0x00c4c4c4, 0x00a7a7a7, 0x007e7e7e, 0x003d3d3d, + 0x00646464, 0x005d5d5d, 0x00191919, 0x00737373, + 0x00606060, 0x00818181, 0x004f4f4f, 0x00dcdcdc, + 0x00222222, 0x002a2a2a, 0x00909090, 0x00888888, + 0x00464646, 0x00eeeeee, 0x00b8b8b8, 0x00141414, + 0x00dedede, 0x005e5e5e, 0x000b0b0b, 0x00dbdbdb, + 0x00e0e0e0, 0x00323232, 0x003a3a3a, 0x000a0a0a, + 0x00494949, 0x00060606, 0x00242424, 0x005c5c5c, + 0x00c2c2c2, 0x00d3d3d3, 0x00acacac, 0x00626262, + 0x00919191, 0x00959595, 0x00e4e4e4, 0x00797979, + 0x00e7e7e7, 0x00c8c8c8, 0x00373737, 0x006d6d6d, + 0x008d8d8d, 0x00d5d5d5, 0x004e4e4e, 0x00a9a9a9, + 0x006c6c6c, 0x00565656, 0x00f4f4f4, 0x00eaeaea, + 0x00656565, 0x007a7a7a, 0x00aeaeae, 0x00080808, + 0x00bababa, 0x00787878, 0x00252525, 0x002e2e2e, + 0x001c1c1c, 0x00a6a6a6, 0x00b4b4b4, 0x00c6c6c6, + 0x00e8e8e8, 0x00dddddd, 0x00747474, 0x001f1f1f, + 0x004b4b4b, 0x00bdbdbd, 0x008b8b8b, 0x008a8a8a, + 0x00707070, 0x003e3e3e, 0x00b5b5b5, 0x00666666, + 0x00484848, 0x00030303, 0x00f6f6f6, 0x000e0e0e, + 0x00616161, 0x00353535, 0x00575757, 0x00b9b9b9, + 0x00868686, 0x00c1c1c1, 0x001d1d1d, 0x009e9e9e, + 0x00e1e1e1, 0x00f8f8f8, 0x00989898, 0x00111111, + 0x00696969, 0x00d9d9d9, 0x008e8e8e, 0x00949494, + 0x009b9b9b, 0x001e1e1e, 0x00878787, 0x00e9e9e9, + 0x00cecece, 0x00555555, 0x00282828, 0x00dfdfdf, + 0x008c8c8c, 0x00a1a1a1, 0x00898989, 0x000d0d0d, + 0x00bfbfbf, 0x00e6e6e6, 0x00424242, 0x00686868, + 0x00414141, 0x00999999, 0x002d2d2d, 0x000f0f0f, + 0x00b0b0b0, 0x00545454, 0x00bbbbbb, 0x00161616 +}; + +static const uint32_t S2[256] = { + 0xe200e2e2, 0x4e004e4e, 0x54005454, 0xfc00fcfc, + 0x94009494, 0xc200c2c2, 0x4a004a4a, 0xcc00cccc, + 0x62006262, 0x0d000d0d, 0x6a006a6a, 0x46004646, + 0x3c003c3c, 0x4d004d4d, 0x8b008b8b, 0xd100d1d1, + 0x5e005e5e, 0xfa00fafa, 0x64006464, 0xcb00cbcb, + 0xb400b4b4, 0x97009797, 0xbe00bebe, 0x2b002b2b, + 0xbc00bcbc, 0x77007777, 0x2e002e2e, 0x03000303, + 0xd300d3d3, 0x19001919, 0x59005959, 0xc100c1c1, + 0x1d001d1d, 0x06000606, 0x41004141, 0x6b006b6b, + 0x55005555, 0xf000f0f0, 0x99009999, 0x69006969, + 0xea00eaea, 0x9c009c9c, 0x18001818, 0xae00aeae, + 0x63006363, 0xdf00dfdf, 0xe700e7e7, 0xbb00bbbb, + 0x00000000, 0x73007373, 0x66006666, 0xfb00fbfb, + 0x96009696, 0x4c004c4c, 0x85008585, 0xe400e4e4, + 0x3a003a3a, 0x09000909, 0x45004545, 0xaa00aaaa, + 0x0f000f0f, 0xee00eeee, 0x10001010, 0xeb00ebeb, + 0x2d002d2d, 0x7f007f7f, 0xf400f4f4, 0x29002929, + 0xac00acac, 0xcf00cfcf, 0xad00adad, 0x91009191, + 0x8d008d8d, 0x78007878, 0xc800c8c8, 0x95009595, + 0xf900f9f9, 0x2f002f2f, 0xce00cece, 0xcd00cdcd, + 0x08000808, 0x7a007a7a, 0x88008888, 0x38003838, + 0x5c005c5c, 0x83008383, 0x2a002a2a, 0x28002828, + 0x47004747, 0xdb00dbdb, 0xb800b8b8, 0xc700c7c7, + 0x93009393, 0xa400a4a4, 0x12001212, 0x53005353, + 0xff00ffff, 0x87008787, 0x0e000e0e, 0x31003131, + 0x36003636, 0x21002121, 0x58005858, 0x48004848, + 0x01000101, 0x8e008e8e, 0x37003737, 0x74007474, + 0x32003232, 0xca00caca, 0xe900e9e9, 0xb100b1b1, + 0xb700b7b7, 0xab00abab, 0x0c000c0c, 0xd700d7d7, + 0xc400c4c4, 0x56005656, 0x42004242, 0x26002626, + 0x07000707, 0x98009898, 0x60006060, 0xd900d9d9, + 0xb600b6b6, 0xb900b9b9, 0x11001111, 0x40004040, + 0xec00ecec, 0x20002020, 0x8c008c8c, 0xbd00bdbd, + 0xa000a0a0, 0xc900c9c9, 0x84008484, 0x04000404, + 0x49004949, 0x23002323, 0xf100f1f1, 0x4f004f4f, + 0x50005050, 0x1f001f1f, 0x13001313, 0xdc00dcdc, + 0xd800d8d8, 0xc000c0c0, 0x9e009e9e, 0x57005757, + 0xe300e3e3, 0xc300c3c3, 0x7b007b7b, 0x65006565, + 0x3b003b3b, 0x02000202, 0x8f008f8f, 0x3e003e3e, + 0xe800e8e8, 0x25002525, 0x92009292, 0xe500e5e5, + 0x15001515, 0xdd00dddd, 0xfd00fdfd, 0x17001717, + 0xa900a9a9, 0xbf00bfbf, 0xd400d4d4, 0x9a009a9a, + 0x7e007e7e, 0xc500c5c5, 0x39003939, 0x67006767, + 0xfe00fefe, 0x76007676, 0x9d009d9d, 0x43004343, + 0xa700a7a7, 0xe100e1e1, 0xd000d0d0, 0xf500f5f5, + 0x68006868, 0xf200f2f2, 0x1b001b1b, 0x34003434, + 0x70007070, 0x05000505, 0xa300a3a3, 0x8a008a8a, + 0xd500d5d5, 0x79007979, 0x86008686, 0xa800a8a8, + 0x30003030, 0xc600c6c6, 0x51005151, 0x4b004b4b, + 0x1e001e1e, 0xa600a6a6, 0x27002727, 0xf600f6f6, + 0x35003535, 0xd200d2d2, 0x6e006e6e, 0x24002424, + 0x16001616, 0x82008282, 0x5f005f5f, 0xda00dada, + 0xe600e6e6, 0x75007575, 0xa200a2a2, 0xef00efef, + 0x2c002c2c, 0xb200b2b2, 0x1c001c1c, 0x9f009f9f, + 0x5d005d5d, 0x6f006f6f, 0x80008080, 0x0a000a0a, + 0x72007272, 0x44004444, 0x9b009b9b, 0x6c006c6c, + 0x90009090, 0x0b000b0b, 0x5b005b5b, 0x33003333, + 0x7d007d7d, 0x5a005a5a, 0x52005252, 0xf300f3f3, + 0x61006161, 0xa100a1a1, 0xf700f7f7, 0xb000b0b0, + 0xd600d6d6, 0x3f003f3f, 0x7c007c7c, 0x6d006d6d, + 0xed00eded, 0x14001414, 0xe000e0e0, 0xa500a5a5, + 0x3d003d3d, 0x22002222, 0xb300b3b3, 0xf800f8f8, + 0x89008989, 0xde00dede, 0x71007171, 0x1a001a1a, + 0xaf00afaf, 0xba00baba, 0xb500b5b5, 0x81008181 +}; + +static const uint32_t X1[256] = { + 0x52520052, 0x09090009, 0x6a6a006a, 0xd5d500d5, + 0x30300030, 0x36360036, 0xa5a500a5, 0x38380038, + 0xbfbf00bf, 0x40400040, 0xa3a300a3, 0x9e9e009e, + 0x81810081, 0xf3f300f3, 0xd7d700d7, 0xfbfb00fb, + 0x7c7c007c, 0xe3e300e3, 0x39390039, 0x82820082, + 0x9b9b009b, 0x2f2f002f, 0xffff00ff, 0x87870087, + 0x34340034, 0x8e8e008e, 0x43430043, 0x44440044, + 0xc4c400c4, 0xdede00de, 0xe9e900e9, 0xcbcb00cb, + 0x54540054, 0x7b7b007b, 0x94940094, 0x32320032, + 0xa6a600a6, 0xc2c200c2, 0x23230023, 0x3d3d003d, + 0xeeee00ee, 0x4c4c004c, 0x95950095, 0x0b0b000b, + 0x42420042, 0xfafa00fa, 0xc3c300c3, 0x4e4e004e, + 0x08080008, 0x2e2e002e, 0xa1a100a1, 0x66660066, + 0x28280028, 0xd9d900d9, 0x24240024, 0xb2b200b2, + 0x76760076, 0x5b5b005b, 0xa2a200a2, 0x49490049, + 0x6d6d006d, 0x8b8b008b, 0xd1d100d1, 0x25250025, + 0x72720072, 0xf8f800f8, 0xf6f600f6, 0x64640064, + 0x86860086, 0x68680068, 0x98980098, 0x16160016, + 0xd4d400d4, 0xa4a400a4, 0x5c5c005c, 0xcccc00cc, + 0x5d5d005d, 0x65650065, 0xb6b600b6, 0x92920092, + 0x6c6c006c, 0x70700070, 0x48480048, 0x50500050, + 0xfdfd00fd, 0xeded00ed, 0xb9b900b9, 0xdada00da, + 0x5e5e005e, 0x15150015, 0x46460046, 0x57570057, + 0xa7a700a7, 0x8d8d008d, 0x9d9d009d, 0x84840084, + 0x90900090, 0xd8d800d8, 0xabab00ab, 0x00000000, + 0x8c8c008c, 0xbcbc00bc, 0xd3d300d3, 0x0a0a000a, + 0xf7f700f7, 0xe4e400e4, 0x58580058, 0x05050005, + 0xb8b800b8, 0xb3b300b3, 0x45450045, 0x06060006, + 0xd0d000d0, 0x2c2c002c, 0x1e1e001e, 0x8f8f008f, + 0xcaca00ca, 0x3f3f003f, 0x0f0f000f, 0x02020002, + 0xc1c100c1, 0xafaf00af, 0xbdbd00bd, 0x03030003, + 0x01010001, 0x13130013, 0x8a8a008a, 0x6b6b006b, + 0x3a3a003a, 0x91910091, 0x11110011, 0x41410041, + 0x4f4f004f, 0x67670067, 0xdcdc00dc, 0xeaea00ea, + 0x97970097, 0xf2f200f2, 0xcfcf00cf, 0xcece00ce, + 0xf0f000f0, 0xb4b400b4, 0xe6e600e6, 0x73730073, + 0x96960096, 0xacac00ac, 0x74740074, 0x22220022, + 0xe7e700e7, 0xadad00ad, 0x35350035, 0x85850085, + 0xe2e200e2, 0xf9f900f9, 0x37370037, 0xe8e800e8, + 0x1c1c001c, 0x75750075, 0xdfdf00df, 0x6e6e006e, + 0x47470047, 0xf1f100f1, 0x1a1a001a, 0x71710071, + 0x1d1d001d, 0x29290029, 0xc5c500c5, 0x89890089, + 0x6f6f006f, 0xb7b700b7, 0x62620062, 0x0e0e000e, + 0xaaaa00aa, 0x18180018, 0xbebe00be, 0x1b1b001b, + 0xfcfc00fc, 0x56560056, 0x3e3e003e, 0x4b4b004b, + 0xc6c600c6, 0xd2d200d2, 0x79790079, 0x20200020, + 0x9a9a009a, 0xdbdb00db, 0xc0c000c0, 0xfefe00fe, + 0x78780078, 0xcdcd00cd, 0x5a5a005a, 0xf4f400f4, + 0x1f1f001f, 0xdddd00dd, 0xa8a800a8, 0x33330033, + 0x88880088, 0x07070007, 0xc7c700c7, 0x31310031, + 0xb1b100b1, 0x12120012, 0x10100010, 0x59590059, + 0x27270027, 0x80800080, 0xecec00ec, 0x5f5f005f, + 0x60600060, 0x51510051, 0x7f7f007f, 0xa9a900a9, + 0x19190019, 0xb5b500b5, 0x4a4a004a, 0x0d0d000d, + 0x2d2d002d, 0xe5e500e5, 0x7a7a007a, 0x9f9f009f, + 0x93930093, 0xc9c900c9, 0x9c9c009c, 0xefef00ef, + 0xa0a000a0, 0xe0e000e0, 0x3b3b003b, 0x4d4d004d, + 0xaeae00ae, 0x2a2a002a, 0xf5f500f5, 0xb0b000b0, + 0xc8c800c8, 0xebeb00eb, 0xbbbb00bb, 0x3c3c003c, + 0x83830083, 0x53530053, 0x99990099, 0x61610061, + 0x17170017, 0x2b2b002b, 0x04040004, 0x7e7e007e, + 0xbaba00ba, 0x77770077, 0xd6d600d6, 0x26260026, + 0xe1e100e1, 0x69690069, 0x14140014, 0x63630063, + 0x55550055, 0x21210021, 0x0c0c000c, 0x7d7d007d +}; + +static const uint32_t X2[256] = { + 0x30303000, 0x68686800, 0x99999900, 0x1b1b1b00, + 0x87878700, 0xb9b9b900, 0x21212100, 0x78787800, + 0x50505000, 0x39393900, 0xdbdbdb00, 0xe1e1e100, + 0x72727200, 0x09090900, 0x62626200, 0x3c3c3c00, + 0x3e3e3e00, 0x7e7e7e00, 0x5e5e5e00, 0x8e8e8e00, + 0xf1f1f100, 0xa0a0a000, 0xcccccc00, 0xa3a3a300, + 0x2a2a2a00, 0x1d1d1d00, 0xfbfbfb00, 0xb6b6b600, + 0xd6d6d600, 0x20202000, 0xc4c4c400, 0x8d8d8d00, + 0x81818100, 0x65656500, 0xf5f5f500, 0x89898900, + 0xcbcbcb00, 0x9d9d9d00, 0x77777700, 0xc6c6c600, + 0x57575700, 0x43434300, 0x56565600, 0x17171700, + 0xd4d4d400, 0x40404000, 0x1a1a1a00, 0x4d4d4d00, + 0xc0c0c000, 0x63636300, 0x6c6c6c00, 0xe3e3e300, + 0xb7b7b700, 0xc8c8c800, 0x64646400, 0x6a6a6a00, + 0x53535300, 0xaaaaaa00, 0x38383800, 0x98989800, + 0x0c0c0c00, 0xf4f4f400, 0x9b9b9b00, 0xededed00, + 0x7f7f7f00, 0x22222200, 0x76767600, 0xafafaf00, + 0xdddddd00, 0x3a3a3a00, 0x0b0b0b00, 0x58585800, + 0x67676700, 0x88888800, 0x06060600, 0xc3c3c300, + 0x35353500, 0x0d0d0d00, 0x01010100, 0x8b8b8b00, + 0x8c8c8c00, 0xc2c2c200, 0xe6e6e600, 0x5f5f5f00, + 0x02020200, 0x24242400, 0x75757500, 0x93939300, + 0x66666600, 0x1e1e1e00, 0xe5e5e500, 0xe2e2e200, + 0x54545400, 0xd8d8d800, 0x10101000, 0xcecece00, + 0x7a7a7a00, 0xe8e8e800, 0x08080800, 0x2c2c2c00, + 0x12121200, 0x97979700, 0x32323200, 0xababab00, + 0xb4b4b400, 0x27272700, 0x0a0a0a00, 0x23232300, + 0xdfdfdf00, 0xefefef00, 0xcacaca00, 0xd9d9d900, + 0xb8b8b800, 0xfafafa00, 0xdcdcdc00, 0x31313100, + 0x6b6b6b00, 0xd1d1d100, 0xadadad00, 0x19191900, + 0x49494900, 0xbdbdbd00, 0x51515100, 0x96969600, + 0xeeeeee00, 0xe4e4e400, 0xa8a8a800, 0x41414100, + 0xdadada00, 0xffffff00, 0xcdcdcd00, 0x55555500, + 0x86868600, 0x36363600, 0xbebebe00, 0x61616100, + 0x52525200, 0xf8f8f800, 0xbbbbbb00, 0x0e0e0e00, + 0x82828200, 0x48484800, 0x69696900, 0x9a9a9a00, + 0xe0e0e000, 0x47474700, 0x9e9e9e00, 0x5c5c5c00, + 0x04040400, 0x4b4b4b00, 0x34343400, 0x15151500, + 0x79797900, 0x26262600, 0xa7a7a700, 0xdedede00, + 0x29292900, 0xaeaeae00, 0x92929200, 0xd7d7d700, + 0x84848400, 0xe9e9e900, 0xd2d2d200, 0xbababa00, + 0x5d5d5d00, 0xf3f3f300, 0xc5c5c500, 0xb0b0b000, + 0xbfbfbf00, 0xa4a4a400, 0x3b3b3b00, 0x71717100, + 0x44444400, 0x46464600, 0x2b2b2b00, 0xfcfcfc00, + 0xebebeb00, 0x6f6f6f00, 0xd5d5d500, 0xf6f6f600, + 0x14141400, 0xfefefe00, 0x7c7c7c00, 0x70707000, + 0x5a5a5a00, 0x7d7d7d00, 0xfdfdfd00, 0x2f2f2f00, + 0x18181800, 0x83838300, 0x16161600, 0xa5a5a500, + 0x91919100, 0x1f1f1f00, 0x05050500, 0x95959500, + 0x74747400, 0xa9a9a900, 0xc1c1c100, 0x5b5b5b00, + 0x4a4a4a00, 0x85858500, 0x6d6d6d00, 0x13131300, + 0x07070700, 0x4f4f4f00, 0x4e4e4e00, 0x45454500, + 0xb2b2b200, 0x0f0f0f00, 0xc9c9c900, 0x1c1c1c00, + 0xa6a6a600, 0xbcbcbc00, 0xececec00, 0x73737300, + 0x90909000, 0x7b7b7b00, 0xcfcfcf00, 0x59595900, + 0x8f8f8f00, 0xa1a1a100, 0xf9f9f900, 0x2d2d2d00, + 0xf2f2f200, 0xb1b1b100, 0x00000000, 0x94949400, + 0x37373700, 0x9f9f9f00, 0xd0d0d000, 0x2e2e2e00, + 0x9c9c9c00, 0x6e6e6e00, 0x28282800, 0x3f3f3f00, + 0x80808000, 0xf0f0f000, 0x3d3d3d00, 0xd3d3d300, + 0x25252500, 0x8a8a8a00, 0xb5b5b500, 0xe7e7e700, + 0x42424200, 0xb3b3b300, 0xc7c7c700, 0xeaeaea00, + 0xf7f7f700, 0x4c4c4c00, 0x11111100, 0x33333300, + 0x03030300, 0xa2a2a200, 0xacacac00, 0x60606000 +}; + +/* Key XOR Layer */ +#define ARIA_ADD_ROUND_KEY(RK, T0, T1, T2, T3) \ + do { \ + (T0) ^= (RK)->u[0]; \ + (T1) ^= (RK)->u[1]; \ + (T2) ^= (RK)->u[2]; \ + (T3) ^= (RK)->u[3]; \ + } while(0) + +/* S-Box Layer 1 + M */ +#define ARIA_SBOX_LAYER1_WITH_PRE_DIFF(T0, T1, T2, T3) \ + do { \ + (T0) = \ + S1[GET_U8_BE(T0, 0)] ^ \ + S2[GET_U8_BE(T0, 1)] ^ \ + X1[GET_U8_BE(T0, 2)] ^ \ + X2[GET_U8_BE(T0, 3)]; \ + (T1) = \ + S1[GET_U8_BE(T1, 0)] ^ \ + S2[GET_U8_BE(T1, 1)] ^ \ + X1[GET_U8_BE(T1, 2)] ^ \ + X2[GET_U8_BE(T1, 3)]; \ + (T2) = \ + S1[GET_U8_BE(T2, 0)] ^ \ + S2[GET_U8_BE(T2, 1)] ^ \ + X1[GET_U8_BE(T2, 2)] ^ \ + X2[GET_U8_BE(T2, 3)]; \ + (T3) = \ + S1[GET_U8_BE(T3, 0)] ^ \ + S2[GET_U8_BE(T3, 1)] ^ \ + X1[GET_U8_BE(T3, 2)] ^ \ + X2[GET_U8_BE(T3, 3)]; \ + } while(0) + +/* S-Box Layer 2 + M */ +#define ARIA_SBOX_LAYER2_WITH_PRE_DIFF(T0, T1, T2, T3) \ + do { \ + (T0) = \ + X1[GET_U8_BE(T0, 0)] ^ \ + X2[GET_U8_BE(T0, 1)] ^ \ + S1[GET_U8_BE(T0, 2)] ^ \ + S2[GET_U8_BE(T0, 3)]; \ + (T1) = \ + X1[GET_U8_BE(T1, 0)] ^ \ + X2[GET_U8_BE(T1, 1)] ^ \ + S1[GET_U8_BE(T1, 2)] ^ \ + S2[GET_U8_BE(T1, 3)]; \ + (T2) = \ + X1[GET_U8_BE(T2, 0)] ^ \ + X2[GET_U8_BE(T2, 1)] ^ \ + S1[GET_U8_BE(T2, 2)] ^ \ + S2[GET_U8_BE(T2, 3)]; \ + (T3) = \ + X1[GET_U8_BE(T3, 0)] ^ \ + X2[GET_U8_BE(T3, 1)] ^ \ + S1[GET_U8_BE(T3, 2)] ^ \ + S2[GET_U8_BE(T3, 3)]; \ + } while(0) + +/* Word-level diffusion */ +#define ARIA_DIFF_WORD(T0,T1,T2,T3) \ + do { \ + (T1) ^= (T2); \ + (T2) ^= (T3); \ + (T0) ^= (T1); \ + \ + (T3) ^= (T1); \ + (T2) ^= (T0); \ + (T1) ^= (T2); \ + } while(0) + +/* Byte-level diffusion */ +#define ARIA_DIFF_BYTE(T0, T1, T2, T3) \ + do { \ + (T1) = (((T1) << 8) & 0xff00ff00) ^ (((T1) >> 8) & 0x00ff00ff); \ + (T2) = rotr32(T2, 16); \ + (T3) = bswap32(T3); \ + } while(0) + +/* Odd round Substitution & Diffusion */ +#define ARIA_SUBST_DIFF_ODD(T0, T1, T2, T3) \ + do { \ + ARIA_SBOX_LAYER1_WITH_PRE_DIFF(T0, T1, T2, T3); \ + ARIA_DIFF_WORD(T0, T1, T2, T3); \ + ARIA_DIFF_BYTE(T0, T1, T2, T3); \ + ARIA_DIFF_WORD(T0, T1, T2, T3); \ + } while(0) + +/* Even round Substitution & Diffusion */ +#define ARIA_SUBST_DIFF_EVEN(T0, T1, T2, T3) \ + do { \ + ARIA_SBOX_LAYER2_WITH_PRE_DIFF(T0, T1, T2, T3); \ + ARIA_DIFF_WORD(T0, T1, T2, T3); \ + ARIA_DIFF_BYTE(T2, T3, T0, T1); \ + ARIA_DIFF_WORD(T0, T1, T2, T3); \ + } while(0) + +/* Q, R Macro expanded ARIA GSRK */ +#define _ARIA_GSRK(RK, X, Y, Q, R) \ + do { \ + (RK)->u[0] = \ + ((X)[0]) ^ \ + (((Y)[((Q) ) % 4]) >> (R)) ^ \ + (((Y)[((Q) + 3) % 4]) << (32 - (R))); \ + (RK)->u[1] = \ + ((X)[1]) ^ \ + (((Y)[((Q) + 1) % 4]) >> (R)) ^ \ + (((Y)[((Q) ) % 4]) << (32 - (R))); \ + (RK)->u[2] = \ + ((X)[2]) ^ \ + (((Y)[((Q) + 2) % 4]) >> (R)) ^ \ + (((Y)[((Q) + 1) % 4]) << (32 - (R))); \ + (RK)->u[3] = \ + ((X)[3]) ^ \ + (((Y)[((Q) + 3) % 4]) >> (R)) ^ \ + (((Y)[((Q) + 2) % 4]) << (32 - (R))); \ + } while(0) + +#define ARIA_GSRK(RK, X, Y, N) _ARIA_GSRK(RK, X, Y, 4 - ((N) / 32), (N) % 32) + +#define ARIA_DEC_DIFF_BYTE(X, Y, TMP, TMP2) \ + do { \ + (TMP) = (X); \ + (TMP2) = rotr32((TMP), 8); \ + (Y) = (TMP2) ^ rotr32((TMP) ^ (TMP2), 16); \ + } while(0) + +void aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key) +{ + register uint32_t reg0, reg1, reg2, reg3; + int Nr; + const ARIA_u128 *rk; + + if (in == NULL || out == NULL || key == NULL) { + return; + } + + rk = key->rd_key; + Nr = key->rounds; + + if (Nr != 12 && Nr != 14 && Nr != 16) { + return; + } + + reg0 = GET_U32_BE(in, 0); + reg1 = GET_U32_BE(in, 1); + reg2 = GET_U32_BE(in, 2); + reg3 = GET_U32_BE(in, 3); + + ARIA_ADD_ROUND_KEY(rk, reg0, reg1, reg2, reg3); + rk++; + + ARIA_SUBST_DIFF_ODD(reg0, reg1, reg2, reg3); + ARIA_ADD_ROUND_KEY(rk, reg0, reg1, reg2, reg3); + rk++; + + while(Nr -= 2){ + ARIA_SUBST_DIFF_EVEN(reg0, reg1, reg2, reg3); + ARIA_ADD_ROUND_KEY(rk, reg0, reg1, reg2, reg3); + rk++; + + ARIA_SUBST_DIFF_ODD(reg0, reg1, reg2, reg3); + ARIA_ADD_ROUND_KEY(rk, reg0, reg1, reg2, reg3); + rk++; + } + + reg0 = rk->u[0] ^ MAKE_U32( + (uint8_t)(X1[GET_U8_BE(reg0, 0)] ), + (uint8_t)(X2[GET_U8_BE(reg0, 1)] >> 8), + (uint8_t)(S1[GET_U8_BE(reg0, 2)] ), + (uint8_t)(S2[GET_U8_BE(reg0, 3)] )); + reg1 = rk->u[1] ^ MAKE_U32( + (uint8_t)(X1[GET_U8_BE(reg1, 0)] ), + (uint8_t)(X2[GET_U8_BE(reg1, 1)] >> 8), + (uint8_t)(S1[GET_U8_BE(reg1, 2)] ), + (uint8_t)(S2[GET_U8_BE(reg1, 3)] )); + reg2 = rk->u[2] ^ MAKE_U32( + (uint8_t)(X1[GET_U8_BE(reg2, 0)] ), + (uint8_t)(X2[GET_U8_BE(reg2, 1)] >> 8), + (uint8_t)(S1[GET_U8_BE(reg2, 2)] ), + (uint8_t)(S2[GET_U8_BE(reg2, 3)] )); + reg3 = rk->u[3] ^ MAKE_U32( + (uint8_t)(X1[GET_U8_BE(reg3, 0)] ), + (uint8_t)(X2[GET_U8_BE(reg3, 1)] >> 8), + (uint8_t)(S1[GET_U8_BE(reg3, 2)] ), + (uint8_t)(S2[GET_U8_BE(reg3, 3)] )); + + PUT_U32_BE(out, 0, reg0); + PUT_U32_BE(out, 1, reg1); + PUT_U32_BE(out, 2, reg2); + PUT_U32_BE(out, 3, reg3); +} + +int aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key) +{ + register uint32_t reg0, reg1, reg2, reg3; + uint32_t w0[4], w1[4], w2[4], w3[4]; + const uint32_t *ck; + + ARIA_u128 *rk; + int Nr = (bits + 256) / 32; + + if (userKey == NULL || key == NULL) { + return -1; + } + if (bits != 128 && bits != 192 && bits != 256) { + return -2; + } + + rk = key->rd_key; + key->rounds = Nr; + ck = &Key_RC[(bits - 128) / 64][0]; + + w0[0] = GET_U32_BE(userKey, 0); + w0[1] = GET_U32_BE(userKey, 1); + w0[2] = GET_U32_BE(userKey, 2); + w0[3] = GET_U32_BE(userKey, 3); + + reg0 = w0[0] ^ ck[0]; + reg1 = w0[1] ^ ck[1]; + reg2 = w0[2] ^ ck[2]; + reg3 = w0[3] ^ ck[3]; + + ARIA_SUBST_DIFF_ODD(reg0, reg1, reg2, reg3); + + if (bits > 128) { + w1[0] = GET_U32_BE(userKey, 4); + w1[1] = GET_U32_BE(userKey, 5); + if (bits > 192) { + w1[2] = GET_U32_BE(userKey, 6); + w1[3] = GET_U32_BE(userKey, 7); + } + else { + w1[2] = w1[3] = 0; + } + } + else { + w1[0] = w1[1] = w1[2] = w1[3] = 0; + } + + w1[0] ^= reg0; + w1[1] ^= reg1; + w1[2] ^= reg2; + w1[3] ^= reg3; + + reg0 = w1[0]; + reg1 = w1[1]; + reg2 = w1[2]; + reg3 = w1[3]; + + reg0 ^= ck[4]; + reg1 ^= ck[5]; + reg2 ^= ck[6]; + reg3 ^= ck[7]; + + ARIA_SUBST_DIFF_EVEN(reg0, reg1, reg2, reg3); + + reg0 ^= w0[0]; + reg1 ^= w0[1]; + reg2 ^= w0[2]; + reg3 ^= w0[3]; + + w2[0] = reg0; + w2[1] = reg1; + w2[2] = reg2; + w2[3] = reg3; + + reg0 ^= ck[8]; + reg1 ^= ck[9]; + reg2 ^= ck[10]; + reg3 ^= ck[11]; + + ARIA_SUBST_DIFF_ODD(reg0, reg1, reg2, reg3); + + w3[0] = reg0 ^ w1[0]; + w3[1] = reg1 ^ w1[1]; + w3[2] = reg2 ^ w1[2]; + w3[3] = reg3 ^ w1[3]; + + ARIA_GSRK(rk, w0, w1, 19); + rk++; + ARIA_GSRK(rk, w1, w2, 19); + rk++; + ARIA_GSRK(rk, w2, w3, 19); + rk++; + ARIA_GSRK(rk, w3, w0, 19); + + rk++; + ARIA_GSRK(rk, w0, w1, 31); + rk++; + ARIA_GSRK(rk, w1, w2, 31); + rk++; + ARIA_GSRK(rk, w2, w3, 31); + rk++; + ARIA_GSRK(rk, w3, w0, 31); + + rk++; + ARIA_GSRK(rk, w0, w1, 67); + rk++; + ARIA_GSRK(rk, w1, w2, 67); + rk++; + ARIA_GSRK(rk, w2, w3, 67); + rk++; + ARIA_GSRK(rk, w3, w0, 67); + + rk++; + ARIA_GSRK(rk, w0, w1, 97); + if (bits > 128) { + rk++; + ARIA_GSRK(rk, w1, w2, 97); + rk++; + ARIA_GSRK(rk, w2, w3, 97); + } + if (bits > 192) { + rk++; + ARIA_GSRK(rk, w3, w0, 97); + + rk++; + ARIA_GSRK(rk, w0, w1, 109); + } + + return 0; +} + +int aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key) +{ + ARIA_u128 *rk_head; + ARIA_u128 *rk_tail; + register uint32_t w1, w2; + register uint32_t reg0, reg1, reg2, reg3; + uint32_t s0, s1, s2, s3; + + const int r = aria_set_encrypt_key(userKey, bits, key); + + if (r != 0) { + return r; + } + + rk_head = key->rd_key; + rk_tail = rk_head + key->rounds; + + reg0 = rk_head->u[0]; + reg1 = rk_head->u[1]; + reg2 = rk_head->u[2]; + reg3 = rk_head->u[3]; + + memcpy(rk_head, rk_tail, ARIA_BLOCK_SIZE); + + rk_tail->u[0] = reg0; + rk_tail->u[1] = reg1; + rk_tail->u[2] = reg2; + rk_tail->u[3] = reg3; + + rk_head++; + rk_tail--; + + for (; rk_head < rk_tail; rk_head++, rk_tail--) { + ARIA_DEC_DIFF_BYTE(rk_head->u[0], reg0, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_head->u[1], reg1, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_head->u[2], reg2, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_head->u[3], reg3, w1, w2); + + ARIA_DIFF_WORD(reg0, reg1, reg2, reg3); + ARIA_DIFF_BYTE(reg0, reg1, reg2, reg3); + ARIA_DIFF_WORD(reg0, reg1, reg2, reg3); + + s0 = reg0; + s1 = reg1; + s2 = reg2; + s3 = reg3; + + ARIA_DEC_DIFF_BYTE(rk_tail->u[0], reg0, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_tail->u[1], reg1, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_tail->u[2], reg2, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_tail->u[3], reg3, w1, w2); + + ARIA_DIFF_WORD(reg0, reg1, reg2, reg3); + ARIA_DIFF_BYTE(reg0, reg1, reg2, reg3); + ARIA_DIFF_WORD(reg0, reg1, reg2, reg3); + + rk_head->u[0] = reg0; + rk_head->u[1] = reg1; + rk_head->u[2] = reg2; + rk_head->u[3] = reg3; + + rk_tail->u[0] = s0; + rk_tail->u[1] = s1; + rk_tail->u[2] = s2; + rk_tail->u[3] = s3; + } + ARIA_DEC_DIFF_BYTE(rk_head->u[0], reg0, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_head->u[1], reg1, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_head->u[2], reg2, w1, w2); + ARIA_DEC_DIFF_BYTE(rk_head->u[3], reg3, w1, w2); + + ARIA_DIFF_WORD(reg0, reg1, reg2, reg3); + ARIA_DIFF_BYTE(reg0, reg1, reg2, reg3); + ARIA_DIFF_WORD(reg0, reg1, reg2, reg3); + + rk_tail->u[0] = reg0; + rk_tail->u[1] = reg1; + rk_tail->u[2] = reg2; + rk_tail->u[3] = reg3; + + return 0; +} + +#else + +static const unsigned char sb1[256] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, + 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, + 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, + 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, + 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, + 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, + 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, + 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, + 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, + 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, + 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, + 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +}; + +static const unsigned char sb2[256] = { + 0xe2, 0x4e, 0x54, 0xfc, 0x94, 0xc2, 0x4a, 0xcc, + 0x62, 0x0d, 0x6a, 0x46, 0x3c, 0x4d, 0x8b, 0xd1, + 0x5e, 0xfa, 0x64, 0xcb, 0xb4, 0x97, 0xbe, 0x2b, + 0xbc, 0x77, 0x2e, 0x03, 0xd3, 0x19, 0x59, 0xc1, + 0x1d, 0x06, 0x41, 0x6b, 0x55, 0xf0, 0x99, 0x69, + 0xea, 0x9c, 0x18, 0xae, 0x63, 0xdf, 0xe7, 0xbb, + 0x00, 0x73, 0x66, 0xfb, 0x96, 0x4c, 0x85, 0xe4, + 0x3a, 0x09, 0x45, 0xaa, 0x0f, 0xee, 0x10, 0xeb, + 0x2d, 0x7f, 0xf4, 0x29, 0xac, 0xcf, 0xad, 0x91, + 0x8d, 0x78, 0xc8, 0x95, 0xf9, 0x2f, 0xce, 0xcd, + 0x08, 0x7a, 0x88, 0x38, 0x5c, 0x83, 0x2a, 0x28, + 0x47, 0xdb, 0xb8, 0xc7, 0x93, 0xa4, 0x12, 0x53, + 0xff, 0x87, 0x0e, 0x31, 0x36, 0x21, 0x58, 0x48, + 0x01, 0x8e, 0x37, 0x74, 0x32, 0xca, 0xe9, 0xb1, + 0xb7, 0xab, 0x0c, 0xd7, 0xc4, 0x56, 0x42, 0x26, + 0x07, 0x98, 0x60, 0xd9, 0xb6, 0xb9, 0x11, 0x40, + 0xec, 0x20, 0x8c, 0xbd, 0xa0, 0xc9, 0x84, 0x04, + 0x49, 0x23, 0xf1, 0x4f, 0x50, 0x1f, 0x13, 0xdc, + 0xd8, 0xc0, 0x9e, 0x57, 0xe3, 0xc3, 0x7b, 0x65, + 0x3b, 0x02, 0x8f, 0x3e, 0xe8, 0x25, 0x92, 0xe5, + 0x15, 0xdd, 0xfd, 0x17, 0xa9, 0xbf, 0xd4, 0x9a, + 0x7e, 0xc5, 0x39, 0x67, 0xfe, 0x76, 0x9d, 0x43, + 0xa7, 0xe1, 0xd0, 0xf5, 0x68, 0xf2, 0x1b, 0x34, + 0x70, 0x05, 0xa3, 0x8a, 0xd5, 0x79, 0x86, 0xa8, + 0x30, 0xc6, 0x51, 0x4b, 0x1e, 0xa6, 0x27, 0xf6, + 0x35, 0xd2, 0x6e, 0x24, 0x16, 0x82, 0x5f, 0xda, + 0xe6, 0x75, 0xa2, 0xef, 0x2c, 0xb2, 0x1c, 0x9f, + 0x5d, 0x6f, 0x80, 0x0a, 0x72, 0x44, 0x9b, 0x6c, + 0x90, 0x0b, 0x5b, 0x33, 0x7d, 0x5a, 0x52, 0xf3, + 0x61, 0xa1, 0xf7, 0xb0, 0xd6, 0x3f, 0x7c, 0x6d, + 0xed, 0x14, 0xe0, 0xa5, 0x3d, 0x22, 0xb3, 0xf8, + 0x89, 0xde, 0x71, 0x1a, 0xaf, 0xba, 0xb5, 0x81 +}; + +static const unsigned char sb3[256] = { + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, + 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, + 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, + 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, + 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, + 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, + 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, + 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, + 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, + 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, + 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, + 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +}; + +static const unsigned char sb4[256] = { + 0x30, 0x68, 0x99, 0x1b, 0x87, 0xb9, 0x21, 0x78, + 0x50, 0x39, 0xdb, 0xe1, 0x72, 0x09, 0x62, 0x3c, + 0x3e, 0x7e, 0x5e, 0x8e, 0xf1, 0xa0, 0xcc, 0xa3, + 0x2a, 0x1d, 0xfb, 0xb6, 0xd6, 0x20, 0xc4, 0x8d, + 0x81, 0x65, 0xf5, 0x89, 0xcb, 0x9d, 0x77, 0xc6, + 0x57, 0x43, 0x56, 0x17, 0xd4, 0x40, 0x1a, 0x4d, + 0xc0, 0x63, 0x6c, 0xe3, 0xb7, 0xc8, 0x64, 0x6a, + 0x53, 0xaa, 0x38, 0x98, 0x0c, 0xf4, 0x9b, 0xed, + 0x7f, 0x22, 0x76, 0xaf, 0xdd, 0x3a, 0x0b, 0x58, + 0x67, 0x88, 0x06, 0xc3, 0x35, 0x0d, 0x01, 0x8b, + 0x8c, 0xc2, 0xe6, 0x5f, 0x02, 0x24, 0x75, 0x93, + 0x66, 0x1e, 0xe5, 0xe2, 0x54, 0xd8, 0x10, 0xce, + 0x7a, 0xe8, 0x08, 0x2c, 0x12, 0x97, 0x32, 0xab, + 0xb4, 0x27, 0x0a, 0x23, 0xdf, 0xef, 0xca, 0xd9, + 0xb8, 0xfa, 0xdc, 0x31, 0x6b, 0xd1, 0xad, 0x19, + 0x49, 0xbd, 0x51, 0x96, 0xee, 0xe4, 0xa8, 0x41, + 0xda, 0xff, 0xcd, 0x55, 0x86, 0x36, 0xbe, 0x61, + 0x52, 0xf8, 0xbb, 0x0e, 0x82, 0x48, 0x69, 0x9a, + 0xe0, 0x47, 0x9e, 0x5c, 0x04, 0x4b, 0x34, 0x15, + 0x79, 0x26, 0xa7, 0xde, 0x29, 0xae, 0x92, 0xd7, + 0x84, 0xe9, 0xd2, 0xba, 0x5d, 0xf3, 0xc5, 0xb0, + 0xbf, 0xa4, 0x3b, 0x71, 0x44, 0x46, 0x2b, 0xfc, + 0xeb, 0x6f, 0xd5, 0xf6, 0x14, 0xfe, 0x7c, 0x70, + 0x5a, 0x7d, 0xfd, 0x2f, 0x18, 0x83, 0x16, 0xa5, + 0x91, 0x1f, 0x05, 0x95, 0x74, 0xa9, 0xc1, 0x5b, + 0x4a, 0x85, 0x6d, 0x13, 0x07, 0x4f, 0x4e, 0x45, + 0xb2, 0x0f, 0xc9, 0x1c, 0xa6, 0xbc, 0xec, 0x73, + 0x90, 0x7b, 0xcf, 0x59, 0x8f, 0xa1, 0xf9, 0x2d, + 0xf2, 0xb1, 0x00, 0x94, 0x37, 0x9f, 0xd0, 0x2e, + 0x9c, 0x6e, 0x28, 0x3f, 0x80, 0xf0, 0x3d, 0xd3, + 0x25, 0x8a, 0xb5, 0xe7, 0x42, 0xb3, 0xc7, 0xea, + 0xf7, 0x4c, 0x11, 0x33, 0x03, 0xa2, 0xac, 0x60 +}; + +static const ARIA_u128 c1 = {{ + 0x51, 0x7c, 0xc1, 0xb7, 0x27, 0x22, 0x0a, 0x94, + 0xfe, 0x13, 0xab, 0xe8, 0xfa, 0x9a, 0x6e, 0xe0 +}}; + +static const ARIA_u128 c2 = {{ + 0x6d, 0xb1, 0x4a, 0xcc, 0x9e, 0x21, 0xc8, 0x20, + 0xff, 0x28, 0xb1, 0xd5, 0xef, 0x5d, 0xe2, 0xb0 +}}; + +static const ARIA_u128 c3 = {{ + 0xdb, 0x92, 0x37, 0x1d, 0x21, 0x26, 0xe9, 0x70, + 0x03, 0x24, 0x97, 0x75, 0x04, 0xe8, 0xc9, 0x0e +}}; + +/* + * Exclusive or two 128 bit values into the result. + * It is safe for the result to be the same as the either input. + */ +static void xor128(ARIA_c128 o, const ARIA_c128 x, const ARIA_u128 *y) +{ + int i; + + for (i = 0; i < ARIA_BLOCK_SIZE; i++) + o[i] = x[i] ^ y->c[i]; +} + +/* + * Generalised circular rotate right and exclusive or function. + * It is safe for the output to overlap either input. + */ +static ossl_inline void rotnr(unsigned int n, ARIA_u128 *o, + const ARIA_u128 *xor, const ARIA_u128 *z) +{ + const unsigned int bytes = n / 8, bits = n % 8; + unsigned int i; + ARIA_u128 t; + + for (i = 0; i < ARIA_BLOCK_SIZE; i++) + t.c[(i + bytes) % ARIA_BLOCK_SIZE] = z->c[i]; + for (i = 0; i < ARIA_BLOCK_SIZE; i++) + o->c[i] = ((t.c[i] >> bits) | + (t.c[i ? i - 1 : ARIA_BLOCK_SIZE - 1] << (8 - bits))) ^ + xor->c[i]; +} + +/* + * Circular rotate 19 bits right and xor. + * It is safe for the output to overlap either input. + */ +static void rot19r(ARIA_u128 *o, const ARIA_u128 *xor, const ARIA_u128 *z) +{ + rotnr(19, o, xor, z); +} + +/* + * Circular rotate 31 bits right and xor. + * It is safe for the output to overlap either input. + */ +static void rot31r(ARIA_u128 *o, const ARIA_u128 *xor, const ARIA_u128 *z) +{ + rotnr(31, o, xor, z); +} + +/* + * Circular rotate 61 bits left and xor. + * It is safe for the output to overlap either input. + */ +static void rot61l(ARIA_u128 *o, const ARIA_u128 *xor, const ARIA_u128 *z) +{ + rotnr(8 * ARIA_BLOCK_SIZE - 61, o, xor, z); +} + +/* + * Circular rotate 31 bits left and xor. + * It is safe for the output to overlap either input. + */ +static void rot31l(ARIA_u128 *o, const ARIA_u128 *xor, const ARIA_u128 *z) +{ + rotnr(8 * ARIA_BLOCK_SIZE - 31, o, xor, z); +} + +/* + * Circular rotate 19 bits left and xor. + * It is safe for the output to overlap either input. + */ +static void rot19l(ARIA_u128 *o, const ARIA_u128 *xor, const ARIA_u128 *z) +{ + rotnr(8 * ARIA_BLOCK_SIZE - 19, o, xor, z); +} + +/* + * First substitution and xor layer, used for odd steps. + * It is safe for the input and output to be the same. + */ +static void sl1(ARIA_u128 *o, const ARIA_u128 *x, const ARIA_u128 *y) +{ + unsigned int i; + for (i = 0; i < ARIA_BLOCK_SIZE; i += 4) { + o->c[i ] = sb1[x->c[i ] ^ y->c[i ]]; + o->c[i + 1] = sb2[x->c[i + 1] ^ y->c[i + 1]]; + o->c[i + 2] = sb3[x->c[i + 2] ^ y->c[i + 2]]; + o->c[i + 3] = sb4[x->c[i + 3] ^ y->c[i + 3]]; + } +} + +/* + * Second substitution and xor layer, used for even steps. + * It is safe for the input and output to be the same. + */ +static void sl2(ARIA_c128 o, const ARIA_u128 *x, const ARIA_u128 *y) +{ + unsigned int i; + for (i = 0; i < ARIA_BLOCK_SIZE; i += 4) { + o[i ] = sb3[x->c[i ] ^ y->c[i ]]; + o[i + 1] = sb4[x->c[i + 1] ^ y->c[i + 1]]; + o[i + 2] = sb1[x->c[i + 2] ^ y->c[i + 2]]; + o[i + 3] = sb2[x->c[i + 3] ^ y->c[i + 3]]; + } +} + +/* + * Diffusion layer step + * It is NOT safe for the input and output to overlap. + */ +static void a(ARIA_u128 *y, const ARIA_u128 *x) +{ + y->c[ 0] = x->c[ 3] ^ x->c[ 4] ^ x->c[ 6] ^ x->c[ 8] ^ + x->c[ 9] ^ x->c[13] ^ x->c[14]; + y->c[ 1] = x->c[ 2] ^ x->c[ 5] ^ x->c[ 7] ^ x->c[ 8] ^ + x->c[ 9] ^ x->c[12] ^ x->c[15]; + y->c[ 2] = x->c[ 1] ^ x->c[ 4] ^ x->c[ 6] ^ x->c[10] ^ + x->c[11] ^ x->c[12] ^ x->c[15]; + y->c[ 3] = x->c[ 0] ^ x->c[ 5] ^ x->c[ 7] ^ x->c[10] ^ + x->c[11] ^ x->c[13] ^ x->c[14]; + y->c[ 4] = x->c[ 0] ^ x->c[ 2] ^ x->c[ 5] ^ x->c[ 8] ^ + x->c[11] ^ x->c[14] ^ x->c[15]; + y->c[ 5] = x->c[ 1] ^ x->c[ 3] ^ x->c[ 4] ^ x->c[ 9] ^ + x->c[10] ^ x->c[14] ^ x->c[15]; + y->c[ 6] = x->c[ 0] ^ x->c[ 2] ^ x->c[ 7] ^ x->c[ 9] ^ + x->c[10] ^ x->c[12] ^ x->c[13]; + y->c[ 7] = x->c[ 1] ^ x->c[ 3] ^ x->c[ 6] ^ x->c[ 8] ^ + x->c[11] ^ x->c[12] ^ x->c[13]; + y->c[ 8] = x->c[ 0] ^ x->c[ 1] ^ x->c[ 4] ^ x->c[ 7] ^ + x->c[10] ^ x->c[13] ^ x->c[15]; + y->c[ 9] = x->c[ 0] ^ x->c[ 1] ^ x->c[ 5] ^ x->c[ 6] ^ + x->c[11] ^ x->c[12] ^ x->c[14]; + y->c[10] = x->c[ 2] ^ x->c[ 3] ^ x->c[ 5] ^ x->c[ 6] ^ + x->c[ 8] ^ x->c[13] ^ x->c[15]; + y->c[11] = x->c[ 2] ^ x->c[ 3] ^ x->c[ 4] ^ x->c[ 7] ^ + x->c[ 9] ^ x->c[12] ^ x->c[14]; + y->c[12] = x->c[ 1] ^ x->c[ 2] ^ x->c[ 6] ^ x->c[ 7] ^ + x->c[ 9] ^ x->c[11] ^ x->c[12]; + y->c[13] = x->c[ 0] ^ x->c[ 3] ^ x->c[ 6] ^ x->c[ 7] ^ + x->c[ 8] ^ x->c[10] ^ x->c[13]; + y->c[14] = x->c[ 0] ^ x->c[ 3] ^ x->c[ 4] ^ x->c[ 5] ^ + x->c[ 9] ^ x->c[11] ^ x->c[14]; + y->c[15] = x->c[ 1] ^ x->c[ 2] ^ x->c[ 4] ^ x->c[ 5] ^ + x->c[ 8] ^ x->c[10] ^ x->c[15]; +} + +/* + * Odd round function + * Apply the first substitution layer and then a diffusion step. + * It is safe for the input and output to overlap. + */ +static ossl_inline void FO(ARIA_u128 *o, const ARIA_u128 *d, + const ARIA_u128 *rk) +{ + ARIA_u128 y; + + sl1(&y, d, rk); + a(o, &y); +} + +/* + * Even round function + * Apply the second substitution layer and then a diffusion step. + * It is safe for the input and output to overlap. + */ +static ossl_inline void FE(ARIA_u128 *o, const ARIA_u128 *d, + const ARIA_u128 *rk) +{ + ARIA_u128 y; + + sl2(y.c, d, rk); + a(o, &y); +} + +/* + * Encrypt or decrypt a single block + * in and out can overlap + */ +static void do_encrypt(unsigned char *o, const unsigned char *pin, + unsigned int rounds, const ARIA_u128 *keys) +{ + ARIA_u128 p; + unsigned int i; + + memcpy(&p, pin, sizeof(p)); + for (i = 0; i < rounds - 2; i += 2) { + FO(&p, &p, &keys[i]); + FE(&p, &p, &keys[i + 1]); + } + FO(&p, &p, &keys[rounds - 2]); + sl2(o, &p, &keys[rounds - 1]); + xor128(o, o, &keys[rounds]); +} + +/* + * Encrypt a single block + * in and out can overlap + */ +void aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key) +{ + assert(in != NULL && out != NULL && key != NULL); + do_encrypt(out, in, key->rounds, key->rd_key); +} + + +/* + * Expand the cipher key into the encryption key schedule. + * We short circuit execution of the last two + * or four rotations based on the key size. + */ +int aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key) +{ + const ARIA_u128 *ck1, *ck2, *ck3; + ARIA_u128 kr, w0, w1, w2, w3; + + if (!userKey || !key) + return -1; + memcpy(w0.c, userKey, sizeof(w0)); + switch (bits) { + default: + return -2; + case 128: + key->rounds = 12; + ck1 = &c1; + ck2 = &c2; + ck3 = &c3; + memset(kr.c, 0, sizeof(kr)); + break; + + case 192: + key->rounds = 14; + ck1 = &c2; + ck2 = &c3; + ck3 = &c1; + memcpy(kr.c, userKey + ARIA_BLOCK_SIZE, sizeof(kr) / 2); + memset(kr.c + ARIA_BLOCK_SIZE / 2, 0, sizeof(kr) / 2); + break; + + case 256: + key->rounds = 16; + ck1 = &c3; + ck2 = &c1; + ck3 = &c2; + memcpy(kr.c, userKey + ARIA_BLOCK_SIZE, sizeof(kr)); + break; + } + + FO(&w3, &w0, ck1); xor128(w1.c, w3.c, &kr); + FE(&w3, &w1, ck2); xor128(w2.c, w3.c, &w0); + FO(&kr, &w2, ck3); xor128(w3.c, kr.c, &w1); + + rot19r(&key->rd_key[ 0], &w0, &w1); + rot19r(&key->rd_key[ 1], &w1, &w2); + rot19r(&key->rd_key[ 2], &w2, &w3); + rot19r(&key->rd_key[ 3], &w3, &w0); + + rot31r(&key->rd_key[ 4], &w0, &w1); + rot31r(&key->rd_key[ 5], &w1, &w2); + rot31r(&key->rd_key[ 6], &w2, &w3); + rot31r(&key->rd_key[ 7], &w3, &w0); + + rot61l(&key->rd_key[ 8], &w0, &w1); + rot61l(&key->rd_key[ 9], &w1, &w2); + rot61l(&key->rd_key[10], &w2, &w3); + rot61l(&key->rd_key[11], &w3, &w0); + + rot31l(&key->rd_key[12], &w0, &w1); + if (key->rounds > 12) { + rot31l(&key->rd_key[13], &w1, &w2); + rot31l(&key->rd_key[14], &w2, &w3); + + if (key->rounds > 14) { + rot31l(&key->rd_key[15], &w3, &w0); + rot19l(&key->rd_key[16], &w0, &w1); + } + } + return 0; +} + +/* + * Expand the cipher key into the decryption key schedule. + */ +int aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key) +{ + ARIA_KEY ek; + const int r = aria_set_encrypt_key(userKey, bits, &ek); + unsigned int i, rounds = ek.rounds; + + if (r == 0) { + key->rounds = rounds; + memcpy(&key->rd_key[0], &ek.rd_key[rounds], sizeof(key->rd_key[0])); + for (i = 1; i < rounds; i++) + a(&key->rd_key[i], &ek.rd_key[rounds - i]); + memcpy(&key->rd_key[rounds], &ek.rd_key[0], sizeof(key->rd_key[rounds])); + } + return r; +} + +#endif diff --git a/crypto/aria/build.info b/crypto/aria/build.info new file mode 100644 index 00000000..218d0612 --- /dev/null +++ b/crypto/aria/build.info @@ -0,0 +1,4 @@ +LIBS=../../libcrypto +SOURCE[../../libcrypto]=\ + aria.c + diff --git a/crypto/arm64cpuid.pl b/crypto/arm64cpuid.pl index caa33875..daa2b17a 100755 --- a/crypto/arm64cpuid.pl +++ b/crypto/arm64cpuid.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -63,6 +63,7 @@ _armv8_sha256_probe: sha256su0 v0.4s, v0.4s ret .size _armv8_sha256_probe,.-_armv8_sha256_probe + .globl _armv8_pmull_probe .type _armv8_pmull_probe,%function _armv8_pmull_probe: @@ -70,6 +71,13 @@ _armv8_pmull_probe: ret .size _armv8_pmull_probe,.-_armv8_pmull_probe +.globl _armv8_sha512_probe +.type _armv8_sha512_probe,%function +_armv8_sha512_probe: + .long 0xcec08000 // sha512su0 v0.2d,v0.2d + ret +.size _armv8_sha512_probe,.-_armv8_sha512_probe + .globl OPENSSL_cleanse .type OPENSSL_cleanse,%function .align 5 diff --git a/crypto/arm_arch.h b/crypto/arm_arch.h index 3fc9e69b..547ec958 100644 --- a/crypto/arm_arch.h +++ b/crypto/arm_arch.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -28,7 +28,7 @@ # endif /* * Why doesn't gcc define __ARM_ARCH__? Instead it defines - * bunch of below macros. See all_architectires[] table in + * bunch of below macros. See all_architectures[] table in * gcc/config/arm/arm.c. On a side note it defines * __ARMEL__/__ARMEB__ for little-/big-endian. */ @@ -79,5 +79,6 @@ extern unsigned int OPENSSL_armcap_P; # define ARMV8_SHA1 (1<<3) # define ARMV8_SHA256 (1<<4) # define ARMV8_PMULL (1<<5) +# define ARMV8_SHA512 (1<<6) #endif diff --git a/crypto/armcap.c b/crypto/armcap.c index 432a06c0..d6707330 100644 --- a/crypto/armcap.c +++ b/crypto/armcap.c @@ -1,5 +1,5 @@ /* - * Copyright 2011-2017 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -13,6 +13,7 @@ #include #include #include +#include "internal/cryptlib.h" #include "arm_arch.h" @@ -23,7 +24,7 @@ void OPENSSL_cpuid_setup(void) { } -unsigned long OPENSSL_rdtsc(void) +uint32_t OPENSSL_rdtsc(void) { return 0; } @@ -45,9 +46,12 @@ void _armv8_aes_probe(void); void _armv8_sha1_probe(void); void _armv8_sha256_probe(void); void _armv8_pmull_probe(void); -unsigned long _armv7_tick(void); +# ifdef __aarch64__ +void _armv8_sha512_probe(void); +# endif +uint32_t _armv7_tick(void); -unsigned long OPENSSL_rdtsc(void) +uint32_t OPENSSL_rdtsc(void) { if (OPENSSL_armcap_P & ARMV7_TICK) return _armv7_tick(); @@ -93,11 +97,12 @@ static unsigned long (*getauxval) (unsigned long) = NULL; # define HWCAP_CE_PMULL (1 << 4) # define HWCAP_CE_SHA1 (1 << 5) # define HWCAP_CE_SHA256 (1 << 6) +# define HWCAP_CE_SHA512 (1 << 21) # endif void OPENSSL_cpuid_setup(void) { - char *e; + const char *e; struct sigaction ill_oact, ill_act; sigset_t oset; static int trigger = 0; @@ -162,6 +167,11 @@ void OPENSSL_cpuid_setup(void) if (hwcap & HWCAP_CE_SHA256) OPENSSL_armcap_P |= ARMV8_SHA256; + +# ifdef __aarch64__ + if (hwcap & HWCAP_CE_SHA512) + OPENSSL_armcap_P |= ARMV8_SHA512; +# endif } } else if (sigsetjmp(ill_jmp, 1) == 0) { _armv7_neon_probe(); @@ -181,6 +191,12 @@ void OPENSSL_cpuid_setup(void) _armv8_sha256_probe(); OPENSSL_armcap_P |= ARMV8_SHA256; } +# ifdef __aarch64__ + if (sigsetjmp(ill_jmp, 1) == 0) { + _armv8_sha512_probe(); + OPENSSL_armcap_P |= ARMV8_SHA512; + } +# endif } if (sigsetjmp(ill_jmp, 1) == 0) { _armv7_tick(); diff --git a/crypto/asn1/a_bitstr.c b/crypto/asn1/a_bitstr.c index b2e0fb68..bffbd160 100644 --- a/crypto/asn1/a_bitstr.c +++ b/crypto/asn1/a_bitstr.c @@ -24,7 +24,7 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp) unsigned char *p, *d; if (a == NULL) - return (0); + return 0; len = a->length; @@ -61,7 +61,7 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp) ret = 1 + len; if (pp == NULL) - return (ret); + return ret; p = *pp; @@ -73,7 +73,7 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp) p[-1] &= (0xff << bits); } *pp = p; - return (ret); + return ret; } ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, @@ -96,7 +96,7 @@ ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, if ((a == NULL) || ((*a) == NULL)) { if ((ret = ASN1_BIT_STRING_new()) == NULL) - return (NULL); + return NULL; } else ret = (*a); @@ -132,16 +132,16 @@ ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, if (a != NULL) (*a) = ret; *pp = p; - return (ret); + return ret; err: ASN1err(ASN1_F_C2I_ASN1_BIT_STRING, i); if ((a == NULL) || (*a != ret)) ASN1_BIT_STRING_free(ret); - return (NULL); + return NULL; } /* - * These next 2 functions from Goetz Babin-Ebell + * These next 2 functions from Goetz Babin-Ebell. */ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) { @@ -161,7 +161,7 @@ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) if ((a->length < (w + 1)) || (a->data == NULL)) { if (!value) - return (1); /* Don't need to set */ + return 1; /* Don't need to set */ c = OPENSSL_clear_realloc(a->data, a->length, w + 1); if (c == NULL) { ASN1err(ASN1_F_ASN1_BIT_STRING_SET_BIT, ERR_R_MALLOC_FAILURE); @@ -175,7 +175,7 @@ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) a->data[w] = ((a->data[w]) & iv) | v; while ((a->length > 0) && (a->data[a->length - 1] == 0)) a->length--; - return (1); + return 1; } int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n) @@ -185,7 +185,7 @@ int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n) w = n / 8; v = 1 << (7 - (n & 0x07)); if ((a == NULL) || (a->length < (w + 1)) || (a->data == NULL)) - return (0); + return 0; return ((a->data[w] & v) != 0); } diff --git a/crypto/asn1/a_d2i_fp.c b/crypto/asn1/a_d2i_fp.c index e5c1d0ed..a1a17901 100644 --- a/crypto/asn1/a_d2i_fp.c +++ b/crypto/asn1/a_d2i_fp.c @@ -13,8 +13,7 @@ #include "internal/numbers.h" #include #include - -static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); +#include "internal/asn1_int.h" #ifndef NO_OLD_ASN1 # ifndef OPENSSL_NO_STDIO @@ -26,12 +25,12 @@ void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x) if ((b = BIO_new(BIO_s_file())) == NULL) { ASN1err(ASN1_F_ASN1_D2I_FP, ERR_R_BUF_LIB); - return (NULL); + return NULL; } BIO_set_fp(b, in, BIO_NOCLOSE); ret = ASN1_d2i_bio(xnew, d2i, b, x); BIO_free(b); - return (ret); + return ret; } # endif @@ -50,7 +49,7 @@ void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x) ret = d2i(x, &p, len); err: BUF_MEM_free(b); - return (ret); + return ret; } #endif @@ -70,7 +69,7 @@ void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x) ret = ASN1_item_d2i(x, &p, len, it); err: BUF_MEM_free(b); - return (ret); + return ret; } #ifndef OPENSSL_NO_STDIO @@ -81,18 +80,18 @@ void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x) if ((b = BIO_new(BIO_s_file())) == NULL) { ASN1err(ASN1_F_ASN1_ITEM_D2I_FP, ERR_R_BUF_LIB); - return (NULL); + return NULL; } BIO_set_fp(b, in, BIO_NOCLOSE); ret = ASN1_item_d2i_bio(it, b, x); BIO_free(b); - return (ret); + return ret; } #endif #define HEADER_SIZE 8 #define ASN1_CHUNK_INITIAL_SIZE (16 * 1024) -static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) +int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb) { BUF_MEM *b; unsigned char *p; diff --git a/crypto/asn1/a_digest.c b/crypto/asn1/a_digest.c index c84ecc9b..f4cc1f2e 100644 --- a/crypto/asn1/a_digest.c +++ b/crypto/asn1/a_digest.c @@ -29,7 +29,7 @@ int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, i = i2d(data, NULL); if ((str = OPENSSL_malloc(i)) == NULL) { ASN1err(ASN1_F_ASN1_DIGEST, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } p = str; i2d(data, &p); @@ -39,7 +39,7 @@ int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, return 0; } OPENSSL_free(str); - return (1); + return 1; } #endif @@ -52,12 +52,12 @@ int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *asn, i = ASN1_item_i2d(asn, &str, it); if (!str) - return (0); + return 0; if (!EVP_Digest(str, i, md, len, type, NULL)) { OPENSSL_free(str); return 0; } OPENSSL_free(str); - return (1); + return 1; } diff --git a/crypto/asn1/a_dup.c b/crypto/asn1/a_dup.c index d9a57b2c..50af6b00 100644 --- a/crypto/asn1/a_dup.c +++ b/crypto/asn1/a_dup.c @@ -21,20 +21,20 @@ void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x) char *ret; if (x == NULL) - return (NULL); + return NULL; i = i2d(x, NULL); b = OPENSSL_malloc(i + 10); if (b == NULL) { ASN1err(ASN1_F_ASN1_DUP, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } p = b; i = i2d(x, &p); p2 = b; ret = d2i(NULL, &p2, i); OPENSSL_free(b); - return (ret); + return ret; } #endif @@ -54,15 +54,15 @@ void *ASN1_item_dup(const ASN1_ITEM *it, void *x) void *ret; if (x == NULL) - return (NULL); + return NULL; i = ASN1_item_i2d(x, &b, it); if (b == NULL) { ASN1err(ASN1_F_ASN1_ITEM_DUP, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } p = b; ret = ASN1_item_d2i(NULL, &p, i, it); OPENSSL_free(b); - return (ret); + return ret; } diff --git a/crypto/asn1/a_gentm.c b/crypto/asn1/a_gentm.c index ff1b6954..d3878d6e 100644 --- a/crypto/asn1/a_gentm.c +++ b/crypto/asn1/a_gentm.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,121 +17,13 @@ #include #include "asn1_locl.h" +/* This is the primary function used to parse ASN1_GENERALIZEDTIME */ int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d) { - static const int min[9] = { 0, 0, 1, 1, 0, 0, 0, 0, 0 }; - static const int max[9] = { 99, 99, 12, 31, 23, 59, 59, 12, 59 }; - char *a; - int n, i, l, o; - + /* wrapper around asn1_time_to_tm */ if (d->type != V_ASN1_GENERALIZEDTIME) - return (0); - l = d->length; - a = (char *)d->data; - o = 0; - /* - * GENERALIZEDTIME is similar to UTCTIME except the year is represented - * as YYYY. This stuff treats everything as a two digit field so make - * first two fields 00 to 99 - */ - if (l < 13) - goto err; - for (i = 0; i < 7; i++) { - if ((i == 6) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) { - i++; - if (tm) - tm->tm_sec = 0; - break; - } - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = a[o] - '0'; - if (++o > l) - goto err; - - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = (n * 10) + a[o] - '0'; - if (++o > l) - goto err; - - if ((n < min[i]) || (n > max[i])) - goto err; - if (tm) { - switch (i) { - case 0: - tm->tm_year = n * 100 - 1900; - break; - case 1: - tm->tm_year += n; - break; - case 2: - tm->tm_mon = n - 1; - break; - case 3: - tm->tm_mday = n; - break; - case 4: - tm->tm_hour = n; - break; - case 5: - tm->tm_min = n; - break; - case 6: - tm->tm_sec = n; - break; - } - } - } - /* - * Optional fractional seconds: decimal point followed by one or more - * digits. - */ - if (a[o] == '.') { - if (++o > l) - goto err; - i = o; - while ((a[o] >= '0') && (a[o] <= '9') && (o <= l)) - o++; - /* Must have at least one digit after decimal point */ - if (i == o) - goto err; - } - - if (a[o] == 'Z') - o++; - else if ((a[o] == '+') || (a[o] == '-')) { - int offsign = a[o] == '-' ? 1 : -1, offset = 0; - o++; - if (o + 4 > l) - goto err; - for (i = 7; i < 9; i++) { - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = a[o] - '0'; - o++; - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = (n * 10) + a[o] - '0'; - if ((n < min[i]) || (n > max[i])) - goto err; - if (tm) { - if (i == 7) - offset = n * 3600; - else if (i == 8) - offset += n * 60; - } - o++; - } - if (offset && !OPENSSL_gmtime_adj(tm, 0, offset * offsign)) - return 0; - } else if (a[o]) { - /* Missing time zone information. */ - goto err; - } - return (o == l); - err: - return (0); + return 0; + return asn1_time_to_tm(tm, d); } int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *d) @@ -146,15 +38,15 @@ int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str) t.type = V_ASN1_GENERALIZEDTIME; t.length = strlen(str); t.data = (unsigned char *)str; - if (ASN1_GENERALIZEDTIME_check(&t)) { - if (s != NULL) { - if (!ASN1_STRING_set((ASN1_STRING *)s, str, t.length)) - return 0; - s->type = V_ASN1_GENERALIZEDTIME; - } - return (1); - } else - return (0); + t.flags = 0; + + if (!ASN1_GENERALIZEDTIME_check(&t)) + return 0; + + if (s != NULL && !ASN1_STRING_copy(s, &t)) + return 0; + + return 1; } ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, @@ -167,107 +59,24 @@ ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, time_t t, int offset_day, long offset_sec) { - char *p; struct tm *ts; struct tm data; - size_t len = 20; - ASN1_GENERALIZEDTIME *tmps = NULL; - - if (s == NULL) - tmps = ASN1_GENERALIZEDTIME_new(); - else - tmps = s; - if (tmps == NULL) - return NULL; ts = OPENSSL_gmtime(&t, &data); if (ts == NULL) - goto err; + return NULL; if (offset_day || offset_sec) { if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec)) - goto err; + return NULL; } - p = (char *)tmps->data; - if ((p == NULL) || ((size_t)tmps->length < len)) { - p = OPENSSL_malloc(len); - if (p == NULL) { - ASN1err(ASN1_F_ASN1_GENERALIZEDTIME_ADJ, ERR_R_MALLOC_FAILURE); - goto err; - } - OPENSSL_free(tmps->data); - tmps->data = (unsigned char *)p; - } - - BIO_snprintf(p, len, "%04d%02d%02d%02d%02d%02dZ", ts->tm_year + 1900, - ts->tm_mon + 1, ts->tm_mday, ts->tm_hour, ts->tm_min, - ts->tm_sec); - tmps->length = strlen(p); - tmps->type = V_ASN1_GENERALIZEDTIME; -#ifdef CHARSET_EBCDIC_not - ebcdic2ascii(tmps->data, tmps->data, tmps->length); -#endif - return tmps; - err: - if (s == NULL) - ASN1_GENERALIZEDTIME_free(tmps); - return NULL; + return asn1_time_from_tm(s, ts, V_ASN1_GENERALIZEDTIME); } -const char *_asn1_mon[12] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" -}; - int ASN1_GENERALIZEDTIME_print(BIO *bp, const ASN1_GENERALIZEDTIME *tm) { - char *v; - int gmt = 0; - int i; - int y = 0, M = 0, d = 0, h = 0, m = 0, s = 0; - char *f = NULL; - int f_len = 0; - - i = tm->length; - v = (char *)tm->data; - - if (i < 12) - goto err; - if (v[i - 1] == 'Z') - gmt = 1; - for (i = 0; i < 12; i++) - if ((v[i] > '9') || (v[i] < '0')) - goto err; - y = (v[0] - '0') * 1000 + (v[1] - '0') * 100 - + (v[2] - '0') * 10 + (v[3] - '0'); - M = (v[4] - '0') * 10 + (v[5] - '0'); - if ((M > 12) || (M < 1)) - goto err; - d = (v[6] - '0') * 10 + (v[7] - '0'); - h = (v[8] - '0') * 10 + (v[9] - '0'); - m = (v[10] - '0') * 10 + (v[11] - '0'); - if (tm->length >= 14 && - (v[12] >= '0') && (v[12] <= '9') && - (v[13] >= '0') && (v[13] <= '9')) { - s = (v[12] - '0') * 10 + (v[13] - '0'); - /* Check for fractions of seconds. */ - if (tm->length >= 15 && v[14] == '.') { - int l = tm->length; - f = &v[14]; /* The decimal point. */ - f_len = 1; - while (14 + f_len < l && f[f_len] >= '0' && f[f_len] <= '9') - ++f_len; - } - } - - if (BIO_printf(bp, "%s %2d %02d:%02d:%02d%.*s %d%s", - _asn1_mon[M - 1], d, h, m, s, f_len, f, y, - (gmt) ? " GMT" : "") <= 0) - return (0); - else - return (1); - err: - BIO_write(bp, "Bad time value", 14); - return (0); + if (tm->type != V_ASN1_GENERALIZEDTIME) + return 0; + return ASN1_TIME_print(bp, tm); } diff --git a/crypto/asn1/a_i2d_fp.c b/crypto/asn1/a_i2d_fp.c index 3b3f713c..980c65a2 100644 --- a/crypto/asn1/a_i2d_fp.c +++ b/crypto/asn1/a_i2d_fp.c @@ -22,12 +22,12 @@ int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x) if ((b = BIO_new(BIO_s_file())) == NULL) { ASN1err(ASN1_F_ASN1_I2D_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, out, BIO_NOCLOSE); ret = ASN1_i2d_bio(i2d, b, x); BIO_free(b); - return (ret); + return ret; } # endif @@ -44,7 +44,7 @@ int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x) b = OPENSSL_malloc(n); if (b == NULL) { ASN1err(ASN1_F_ASN1_I2D_BIO, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } p = (unsigned char *)b; @@ -62,7 +62,7 @@ int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x) n -= i; } OPENSSL_free(b); - return (ret); + return ret; } #endif @@ -75,12 +75,12 @@ int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x) if ((b = BIO_new(BIO_s_file())) == NULL) { ASN1err(ASN1_F_ASN1_ITEM_I2D_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, out, BIO_NOCLOSE); ret = ASN1_item_i2d_bio(it, b, x); BIO_free(b); - return (ret); + return ret; } #endif @@ -92,7 +92,7 @@ int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x) n = ASN1_item_i2d(x, &b, it); if (b == NULL) { ASN1err(ASN1_F_ASN1_ITEM_I2D_BIO, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } for (;;) { @@ -107,5 +107,5 @@ int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x) n -= i; } OPENSSL_free(b); - return (ret); + return ret; } diff --git a/crypto/asn1/a_int.c b/crypto/asn1/a_int.c index 217650a0..70a45cb3 100644 --- a/crypto/asn1/a_int.c +++ b/crypto/asn1/a_int.c @@ -396,7 +396,7 @@ ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, if ((a == NULL) || ((*a) == NULL)) { if ((ret = ASN1_INTEGER_new()) == NULL) - return (NULL); + return NULL; ret->type = V_ASN1_INTEGER; } else ret = (*a); @@ -438,12 +438,12 @@ ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, if (a != NULL) (*a) = ret; *pp = p; - return (ret); + return ret; err: ASN1err(ASN1_F_D2I_ASN1_UINTEGER, i); if ((a == NULL) || (*a != ret)) ASN1_INTEGER_free(ret); - return (NULL); + return NULL; } static ASN1_STRING *bn_to_asn1_string(const BIGNUM *bn, ASN1_STRING *ai, @@ -487,7 +487,7 @@ static ASN1_STRING *bn_to_asn1_string(const BIGNUM *bn, ASN1_STRING *ai, err: if (ret != ai) ASN1_INTEGER_free(ret); - return (NULL); + return NULL; } static BIGNUM *asn1_string_to_bn(const ASN1_INTEGER *ai, BIGNUM *bn, diff --git a/crypto/asn1/a_mbstr.c b/crypto/asn1/a_mbstr.c index 7a035afb..949fe6c1 100644 --- a/crypto/asn1/a_mbstr.c +++ b/crypto/asn1/a_mbstr.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include @@ -22,8 +22,6 @@ static int cpy_asc(unsigned long value, void *arg); static int cpy_bmp(unsigned long value, void *arg); static int cpy_univ(unsigned long value, void *arg); static int cpy_utf8(unsigned long value, void *arg); -static int is_numeric(unsigned long value); -static int is_printable(unsigned long value); /* * These functions take a string in UTF8, ASCII or multibyte form and a mask @@ -271,13 +269,15 @@ static int out_utf8(unsigned long value, void *arg) static int type_str(unsigned long value, void *arg) { - unsigned long types; - types = *((unsigned long *)arg); - if ((types & B_ASN1_NUMERICSTRING) && !is_numeric(value)) + unsigned long types = *((unsigned long *)arg); + const int native = value > INT_MAX ? INT_MAX : ossl_fromascii(value); + + if ((types & B_ASN1_NUMERICSTRING) && !(ossl_isdigit(native) + || native == ' ')) types &= ~B_ASN1_NUMERICSTRING; - if ((types & B_ASN1_PRINTABLESTRING) && !is_printable(value)) + if ((types & B_ASN1_PRINTABLESTRING) && !ossl_isasn1print(native)) types &= ~B_ASN1_PRINTABLESTRING; - if ((types & B_ASN1_IA5STRING) && (value > 127)) + if ((types & B_ASN1_IA5STRING) && !ossl_isascii(native)) types &= ~B_ASN1_IA5STRING; if ((types & B_ASN1_T61STRING) && (value > 0xff)) types &= ~B_ASN1_T61STRING; @@ -341,55 +341,3 @@ static int cpy_utf8(unsigned long value, void *arg) *p += ret; return 1; } - -/* Return 1 if the character is permitted in a PrintableString */ -static int is_printable(unsigned long value) -{ - int ch; - if (value > 0x7f) - return 0; - ch = (int)value; - /* - * Note: we can't use 'isalnum' because certain accented characters may - * count as alphanumeric in some environments. - */ -#ifndef CHARSET_EBCDIC - if ((ch >= 'a') && (ch <= 'z')) - return 1; - if ((ch >= 'A') && (ch <= 'Z')) - return 1; - if ((ch >= '0') && (ch <= '9')) - return 1; - if ((ch == ' ') || strchr("'()+,-./:=?", ch)) - return 1; -#else /* CHARSET_EBCDIC */ - if ((ch >= os_toascii['a']) && (ch <= os_toascii['z'])) - return 1; - if ((ch >= os_toascii['A']) && (ch <= os_toascii['Z'])) - return 1; - if ((ch >= os_toascii['0']) && (ch <= os_toascii['9'])) - return 1; - if ((ch == os_toascii[' ']) || strchr("'()+,-./:=?", os_toebcdic[ch])) - return 1; -#endif /* CHARSET_EBCDIC */ - return 0; -} - -/* Return 1 if the character is a digit or space */ -static int is_numeric(unsigned long value) -{ - int ch; - if (value > 0x7f) - return 0; - ch = (int)value; -#ifndef CHARSET_EBCDIC - if (!isdigit(ch) && ch != ' ') - return 0; -#else - if (ch > os_toascii['9']) - return 0; - if (ch < os_toascii['0'] && ch != os_toascii[' ']) - return 0; -#endif - return 1; -} diff --git a/crypto/asn1/a_object.c b/crypto/asn1/a_object.c index 1ec7a7e1..b5e90a5a 100644 --- a/crypto/asn1/a_object.c +++ b/crypto/asn1/a_object.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,6 +9,7 @@ #include #include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include @@ -23,7 +24,7 @@ int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) int objsize; if ((a == NULL) || (a->data == NULL)) - return (0); + return 0; objsize = ASN1_object_size(0, a->length, V_ASN1_OBJECT); if (pp == NULL || objsize == -1) @@ -35,7 +36,7 @@ int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) p += a->length; *pp = p; - return (objsize); + return objsize; } int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) @@ -48,7 +49,7 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) BIGNUM *bl = NULL; if (num == 0) - return (0); + return 0; else if (num == -1) num = strlen(buf); @@ -84,7 +85,7 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) c = *(p++); if ((c == ' ') || (c == '.')) break; - if ((c < '0') || (c > '9')) { + if (!ossl_isdigit(c)) { ASN1err(ASN1_F_A2D_ASN1_OBJECT, ASN1_R_INVALID_DIGIT); goto err; } @@ -157,12 +158,12 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) if (tmp != ftmp) OPENSSL_free(tmp); BN_free(bl); - return (len); + return len; err: if (tmp != ftmp) OPENSSL_free(tmp); BN_free(bl); - return (0); + return 0; } int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a) @@ -176,7 +177,7 @@ int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a) int i; if ((a == NULL) || (a->data == NULL)) - return (BIO_write(bp, "NULL", 4)); + return BIO_write(bp, "NULL", 4); i = i2t_ASN1_OBJECT(buf, sizeof(buf), a); if (i > (int)(sizeof(buf) - 1)) { p = OPENSSL_malloc(i + 1); @@ -192,7 +193,7 @@ int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a) BIO_write(bp, p, i); if (p != buf) OPENSSL_free(p); - return (i); + return i; } ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, @@ -220,7 +221,7 @@ ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, return ret; err: ASN1err(ASN1_F_D2I_ASN1_OBJECT, i); - return (NULL); + return NULL; } ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, @@ -280,7 +281,7 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, if ((a == NULL) || ((*a) == NULL) || !((*a)->flags & ASN1_OBJECT_FLAG_DYNAMIC)) { if ((ret = ASN1_OBJECT_new()) == NULL) - return (NULL); + return NULL; } else ret = (*a); @@ -311,12 +312,12 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, if (a != NULL) (*a) = ret; *pp = p; - return (ret); + return ret; err: ASN1err(ASN1_F_C2I_ASN1_OBJECT, i); if ((a == NULL) || (*a != ret)) ASN1_OBJECT_free(ret); - return (NULL); + return NULL; } ASN1_OBJECT *ASN1_OBJECT_new(void) @@ -326,10 +327,10 @@ ASN1_OBJECT *ASN1_OBJECT_new(void) ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { ASN1err(ASN1_F_ASN1_OBJECT_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } ret->flags = ASN1_OBJECT_FLAG_DYNAMIC; - return (ret); + return ret; } void ASN1_OBJECT_free(ASN1_OBJECT *a) @@ -366,5 +367,5 @@ ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, o.length = len; o.flags = ASN1_OBJECT_FLAG_DYNAMIC | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS | ASN1_OBJECT_FLAG_DYNAMIC_DATA; - return (OBJ_dup(&o)); + return OBJ_dup(&o); } diff --git a/crypto/asn1/a_print.c b/crypto/asn1/a_print.c index 1aafe7c8..8a373d9d 100644 --- a/crypto/asn1/a_print.c +++ b/crypto/asn1/a_print.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include @@ -21,34 +21,20 @@ int ASN1_PRINTABLE_type(const unsigned char *s, int len) if (len <= 0) len = -1; if (s == NULL) - return (V_ASN1_PRINTABLESTRING); + return V_ASN1_PRINTABLESTRING; while ((*s) && (len-- != 0)) { c = *(s++); -#ifndef CHARSET_EBCDIC - if (!(((c >= 'a') && (c <= 'z')) || - ((c >= 'A') && (c <= 'Z')) || - ((c >= '0') && (c <= '9')) || - (c == ' ') || (c == '\'') || - (c == '(') || (c == ')') || - (c == '+') || (c == ',') || - (c == '-') || (c == '.') || - (c == '/') || (c == ':') || (c == '=') || (c == '?'))) + if (!ossl_isasn1print(c)) ia5 = 1; - if (c & 0x80) + if (!ossl_isascii(c)) t61 = 1; -#else - if (!isalnum(c) && (c != ' ') && strchr("'()+,-./:=?", c) == NULL) - ia5 = 1; - if (os_toascii[c] & 0x80) - t61 = 1; -#endif } if (t61) - return (V_ASN1_T61STRING); + return V_ASN1_T61STRING; if (ia5) - return (V_ASN1_IA5STRING); - return (V_ASN1_PRINTABLESTRING); + return V_ASN1_IA5STRING; + return V_ASN1_PRINTABLESTRING; } int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s) @@ -57,9 +43,9 @@ int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s) unsigned char *p; if (s->type != V_ASN1_UNIVERSALSTRING) - return (0); + return 0; if ((s->length % 4) != 0) - return (0); + return 0; p = s->data; for (i = 0; i < s->length; i += 4) { if ((p[0] != '\0') || (p[1] != '\0') || (p[2] != '\0')) @@ -68,7 +54,7 @@ int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s) p += 4; } if (i < s->length) - return (0); + return 0; p = s->data; for (i = 3; i < s->length; i += 4) { *(p++) = s->data[i]; @@ -76,7 +62,7 @@ int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s) *(p) = '\0'; s->length /= 4; s->type = ASN1_PRINTABLE_type(s->data, s->length); - return (1); + return 1; } int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v) @@ -86,7 +72,7 @@ int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v) const char *p; if (v == NULL) - return (0); + return 0; n = 0; p = (const char *)v->data; for (i = 0; i < v->length; i++) { @@ -98,12 +84,12 @@ int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v) n++; if (n >= 80) { if (BIO_write(bp, buf, n) <= 0) - return (0); + return 0; n = 0; } } if (n > 0) if (BIO_write(bp, buf, n) <= 0) - return (0); - return (1); + return 0; + return 1; } diff --git a/crypto/asn1/a_sign.c b/crypto/asn1/a_sign.c index 3b261eba..130e23ea 100644 --- a/crypto/asn1/a_sign.c +++ b/crypto/asn1/a_sign.c @@ -103,7 +103,7 @@ int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, X509_ALGOR *algor2, EVP_MD_CTX_free(ctx); OPENSSL_clear_free((char *)buf_in, (unsigned int)inl); OPENSSL_clear_free((char *)buf_out, outll); - return (outl); + return outl; } #endif @@ -144,7 +144,7 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, type = EVP_MD_CTX_md(ctx); pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); - if (type == NULL || pkey == NULL) { + if (pkey == NULL) { ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ASN1_R_CONTEXT_NOT_INITIALISED); goto err; } @@ -169,10 +169,15 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_EVP_LIB); if (rv <= 1) goto err; - } else + } else { rv = 2; + } if (rv == 2) { + if (type == NULL) { + ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ASN1_R_CONTEXT_NOT_INITIALISED); + goto err; + } if (!OBJ_find_sigid_by_algs(&signid, EVP_MD_nid(type), pkey->ameth->pkey_id)) { @@ -202,8 +207,7 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, goto err; } - if (!EVP_DigestSignUpdate(ctx, buf_in, inl) - || !EVP_DigestSignFinal(ctx, buf_out, &outl)) { + if (!EVP_DigestSign(ctx, buf_out, &outl, buf_in, inl)) { outl = 0; ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_EVP_LIB); goto err; @@ -221,5 +225,5 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, err: OPENSSL_clear_free((char *)buf_in, (unsigned int)inl); OPENSSL_clear_free((char *)buf_out, outll); - return (outl); + return outl; } diff --git a/crypto/asn1/a_strnid.c b/crypto/asn1/a_strnid.c index ecf178e2..a7d6b0e3 100644 --- a/crypto/asn1/a_strnid.c +++ b/crypto/asn1/a_strnid.c @@ -8,7 +8,6 @@ */ #include -#include #include "internal/cryptlib.h" #include #include @@ -50,6 +49,7 @@ int ASN1_STRING_set_default_mask_asc(const char *p) { unsigned long mask; char *end; + if (strncmp(p, "MASK:", 5) == 0) { if (!p[5]) return 0; @@ -84,19 +84,20 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, ASN1_STRING *str = NULL; unsigned long mask; int ret; - if (!out) + + if (out == NULL) out = &str; tbl = ASN1_STRING_TABLE_get(nid); - if (tbl) { + if (tbl != NULL) { mask = tbl->mask; if (!(tbl->flags & STABLE_NO_MASK)) mask &= global_mask; ret = ASN1_mbstring_ncopy(out, in, inlen, inform, mask, tbl->minsize, tbl->maxsize); - } else - ret = - ASN1_mbstring_copy(out, in, inlen, inform, - DIRSTRING_TYPE & global_mask); + } else { + ret = ASN1_mbstring_copy(out, in, inlen, inform, + DIRSTRING_TYPE & global_mask); + } if (ret <= 0) return NULL; return *out; @@ -106,54 +107,7 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, * Now the tables and helper functions for the string table: */ -/* size limits: this stuff is taken straight from RFC3280 */ - -#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 -#define ub_serial_number 64 - -/* From RFC4524 */ - -#define ub_rfc822_mailbox 256 - -/* This table must be kept in NID order */ - -static const ASN1_STRING_TABLE tbl_standard[] = { - {NID_commonName, 1, ub_common_name, DIRSTRING_TYPE, 0}, - {NID_countryName, 2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, - {NID_localityName, 1, ub_locality_name, DIRSTRING_TYPE, 0}, - {NID_stateOrProvinceName, 1, ub_state_name, DIRSTRING_TYPE, 0}, - {NID_organizationName, 1, ub_organization_name, DIRSTRING_TYPE, 0}, - {NID_organizationalUnitName, 1, ub_organization_unit_name, DIRSTRING_TYPE, - 0}, - {NID_pkcs9_emailAddress, 1, ub_email_address, B_ASN1_IA5STRING, - STABLE_NO_MASK}, - {NID_pkcs9_unstructuredName, 1, -1, PKCS9STRING_TYPE, 0}, - {NID_pkcs9_challengePassword, 1, -1, PKCS9STRING_TYPE, 0}, - {NID_pkcs9_unstructuredAddress, 1, -1, DIRSTRING_TYPE, 0}, - {NID_givenName, 1, ub_name, DIRSTRING_TYPE, 0}, - {NID_surname, 1, ub_name, DIRSTRING_TYPE, 0}, - {NID_initials, 1, ub_name, DIRSTRING_TYPE, 0}, - {NID_serialNumber, 1, ub_serial_number, B_ASN1_PRINTABLESTRING, - STABLE_NO_MASK}, - {NID_friendlyName, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}, - {NID_name, 1, ub_name, DIRSTRING_TYPE, 0}, - {NID_dnQualifier, -1, -1, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, - {NID_domainComponent, 1, -1, B_ASN1_IA5STRING, STABLE_NO_MASK}, - {NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}, - {NID_rfc822Mailbox, 1, ub_rfc822_mailbox, B_ASN1_IA5STRING, - STABLE_NO_MASK}, - {NID_jurisdictionCountryName, 2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, - {NID_INN, 1, 12, B_ASN1_NUMERICSTRING, STABLE_NO_MASK}, - {NID_OGRN, 1, 13, B_ASN1_NUMERICSTRING, STABLE_NO_MASK}, - {NID_SNILS, 1, 11, B_ASN1_NUMERICSTRING, STABLE_NO_MASK} -}; +#include "tbl_standard.h" static int sk_table_cmp(const ASN1_STRING_TABLE *const *a, const ASN1_STRING_TABLE *const *b) @@ -174,6 +128,7 @@ ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid) { int idx; ASN1_STRING_TABLE fnd; + fnd.nid = nid; if (stable) { idx = sk_ASN1_STRING_TABLE_find(stable, &fnd); @@ -191,6 +146,7 @@ ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid) static ASN1_STRING_TABLE *stable_get(int nid) { ASN1_STRING_TABLE *tmp, *rv; + /* Always need a string table so allocate one if NULL */ if (stable == NULL) { stable = sk_ASN1_STRING_TABLE_new(sk_table_cmp); @@ -198,7 +154,7 @@ static ASN1_STRING_TABLE *stable_get(int nid) return NULL; } tmp = ASN1_STRING_TABLE_get(nid); - if (tmp && tmp->flags & STABLE_FLAGS_MALLOC) + if (tmp != NULL && tmp->flags & STABLE_FLAGS_MALLOC) return tmp; rv = OPENSSL_zalloc(sizeof(*rv)); if (rv == NULL) @@ -207,7 +163,7 @@ static ASN1_STRING_TABLE *stable_get(int nid) OPENSSL_free(rv); return NULL; } - if (tmp) { + if (tmp != NULL) { rv->nid = tmp->nid; rv->minsize = tmp->minsize; rv->maxsize = tmp->maxsize; @@ -227,8 +183,9 @@ int ASN1_STRING_TABLE_add(int nid, unsigned long flags) { ASN1_STRING_TABLE *tmp; + tmp = stable_get(nid); - if (!tmp) { + if (tmp == NULL) { ASN1err(ASN1_F_ASN1_STRING_TABLE_ADD, ERR_R_MALLOC_FAILURE); return 0; } @@ -246,8 +203,9 @@ int ASN1_STRING_TABLE_add(int nid, void ASN1_STRING_TABLE_cleanup(void) { STACK_OF(ASN1_STRING_TABLE) *tmp; + tmp = stable; - if (!tmp) + if (tmp == NULL) return; stable = NULL; sk_ASN1_STRING_TABLE_pop_free(tmp, st_free); @@ -258,32 +216,3 @@ static void st_free(ASN1_STRING_TABLE *tbl) if (tbl->flags & STABLE_FLAGS_MALLOC) OPENSSL_free(tbl); } - - -#ifdef STRING_TABLE_TEST - -main() -{ - ASN1_STRING_TABLE *tmp; - int i, last_nid = -1; - - for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) { - if (tmp->nid < last_nid) { - last_nid = 0; - break; - } - last_nid = tmp->nid; - } - - if (last_nid != 0) { - printf("Table order OK\n"); - exit(0); - } - - for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) - printf("Index %d, NID %d, Name=%s\n", i, tmp->nid, - OBJ_nid2ln(tmp->nid)); - -} - -#endif diff --git a/crypto/asn1/a_time.c b/crypto/asn1/a_time.c index 46f539cb..1babb963 100644 --- a/crypto/asn1/a_time.c +++ b/crypto/asn1/a_time.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -16,6 +16,7 @@ #include #include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include "asn1_locl.h" @@ -24,6 +25,291 @@ IMPLEMENT_ASN1_MSTRING(ASN1_TIME, B_ASN1_TIME) IMPLEMENT_ASN1_FUNCTIONS(ASN1_TIME) +static int is_utc(const int year) +{ + if (50 <= year && year <= 149) + return 1; + return 0; +} + +static int leap_year(const int year) +{ + if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) + return 1; + return 0; +} + +/* + * Compute the day of the week and the day of the year from the year, month + * and day. The day of the year is straightforward, the day of the week uses + * a form of Zeller's congruence. For this months start with March and are + * numbered 4 through 15. + */ +static void determine_days(struct tm *tm) +{ + static const int ydays[12] = { + 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 + }; + int y = tm->tm_year + 1900; + int m = tm->tm_mon; + int d = tm->tm_mday; + int c; + + tm->tm_yday = ydays[m] + d - 1; + if (m >= 2) { + /* March and onwards can be one day further into the year */ + tm->tm_yday += leap_year(y); + m += 2; + } else { + /* Treat January and February as part of the previous year */ + m += 14; + y--; + } + c = y / 100; + y %= 100; + /* Zeller's congruance */ + tm->tm_wday = (d + (13 * m) / 5 + y + y / 4 + c / 4 + 5 * c + 6) % 7; +} + +int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *d) +{ + static const int min[9] = { 0, 0, 1, 1, 0, 0, 0, 0, 0 }; + static const int max[9] = { 99, 99, 12, 31, 23, 59, 59, 12, 59 }; + static const int mdays[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + char *a; + int n, i, i2, l, o, min_l = 11, strict = 0, end = 6, btz = 5, md; + struct tm tmp; + + /* + * ASN1_STRING_FLAG_X509_TIME is used to enforce RFC 5280 + * time string format, in which: + * + * 1. "seconds" is a 'MUST' + * 2. "Zulu" timezone is a 'MUST' + * 3. "+|-" is not allowed to indicate a time zone + */ + if (d->type == V_ASN1_UTCTIME) { + if (d->flags & ASN1_STRING_FLAG_X509_TIME) { + min_l = 13; + strict = 1; + } + } else if (d->type == V_ASN1_GENERALIZEDTIME) { + end = 7; + btz = 6; + if (d->flags & ASN1_STRING_FLAG_X509_TIME) { + min_l = 15; + strict = 1; + } else { + min_l = 13; + } + } else { + return 0; + } + + l = d->length; + a = (char *)d->data; + o = 0; + memset(&tmp, 0, sizeof(tmp)); + + /* + * GENERALIZEDTIME is similar to UTCTIME except the year is represented + * as YYYY. This stuff treats everything as a two digit field so make + * first two fields 00 to 99 + */ + + if (l < min_l) + goto err; + for (i = 0; i < end; i++) { + if (!strict && (i == btz) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) { + i++; + break; + } + if (!ossl_isdigit(a[o])) + goto err; + n = a[o] - '0'; + /* incomplete 2-digital number */ + if (++o == l) + goto err; + + if (!ossl_isdigit(a[o])) + goto err; + n = (n * 10) + a[o] - '0'; + /* no more bytes to read, but we haven't seen time-zone yet */ + if (++o == l) + goto err; + + i2 = (d->type == V_ASN1_UTCTIME) ? i + 1 : i; + + if ((n < min[i2]) || (n > max[i2])) + goto err; + switch (i2) { + case 0: + /* UTC will never be here */ + tmp.tm_year = n * 100 - 1900; + break; + case 1: + if (d->type == V_ASN1_UTCTIME) + tmp.tm_year = n < 50 ? n + 100 : n; + else + tmp.tm_year += n; + break; + case 2: + tmp.tm_mon = n - 1; + break; + case 3: + /* check if tm_mday is valid in tm_mon */ + if (tmp.tm_mon == 1) { + /* it's February */ + md = mdays[1] + leap_year(tmp.tm_year + 1900); + } else { + md = mdays[tmp.tm_mon]; + } + if (n > md) + goto err; + tmp.tm_mday = n; + determine_days(&tmp); + break; + case 4: + tmp.tm_hour = n; + break; + case 5: + tmp.tm_min = n; + break; + case 6: + tmp.tm_sec = n; + break; + } + } + + /* + * Optional fractional seconds: decimal point followed by one or more + * digits. + */ + if (d->type == V_ASN1_GENERALIZEDTIME && a[o] == '.') { + if (strict) + /* RFC 5280 forbids fractional seconds */ + goto err; + if (++o == l) + goto err; + i = o; + while ((o < l) && ossl_isdigit(a[o])) + o++; + /* Must have at least one digit after decimal point */ + if (i == o) + goto err; + /* no more bytes to read, but we haven't seen time-zone yet */ + if (o == l) + goto err; + } + + /* + * 'o' will never point to '\0' at this point, the only chance + * 'o' can point to '\0' is either the subsequent if or the first + * else if is true. + */ + if (a[o] == 'Z') { + o++; + } else if (!strict && ((a[o] == '+') || (a[o] == '-'))) { + int offsign = a[o] == '-' ? 1 : -1; + int offset = 0; + + o++; + /* + * if not equal, no need to do subsequent checks + * since the following for-loop will add 'o' by 4 + * and the final return statement will check if 'l' + * and 'o' are equal. + */ + if (o + 4 != l) + goto err; + for (i = end; i < end + 2; i++) { + if (!ossl_isdigit(a[o])) + goto err; + n = a[o] - '0'; + o++; + if (!ossl_isdigit(a[o])) + goto err; + n = (n * 10) + a[o] - '0'; + i2 = (d->type == V_ASN1_UTCTIME) ? i + 1 : i; + if ((n < min[i2]) || (n > max[i2])) + goto err; + /* if tm is NULL, no need to adjust */ + if (tm != NULL) { + if (i == end) + offset = n * 3600; + else if (i == end + 1) + offset += n * 60; + } + o++; + } + if (offset && !OPENSSL_gmtime_adj(&tmp, 0, offset * offsign)) + goto err; + } else { + /* not Z, or not +/- in non-strict mode */ + goto err; + } + if (o == l) { + /* success, check if tm should be filled */ + if (tm != NULL) + *tm = tmp; + return 1; + } + err: + return 0; +} + +ASN1_TIME *asn1_time_from_tm(ASN1_TIME *s, struct tm *ts, int type) +{ + char* p; + ASN1_TIME *tmps = NULL; + const size_t len = 20; + + if (type == V_ASN1_UNDEF) { + if (is_utc(ts->tm_year)) + type = V_ASN1_UTCTIME; + else + type = V_ASN1_GENERALIZEDTIME; + } else if (type == V_ASN1_UTCTIME) { + if (!is_utc(ts->tm_year)) + goto err; + } else if (type != V_ASN1_GENERALIZEDTIME) { + goto err; + } + + if (s == NULL) + tmps = ASN1_STRING_new(); + else + tmps = s; + if (tmps == NULL) + return NULL; + + if (!ASN1_STRING_set(tmps, NULL, len)) + goto err; + + tmps->type = type; + p = (char*)tmps->data; + + if (type == V_ASN1_GENERALIZEDTIME) + tmps->length = BIO_snprintf(p, len, "%04d%02d%02d%02d%02d%02dZ", + ts->tm_year + 1900, ts->tm_mon + 1, + ts->tm_mday, ts->tm_hour, ts->tm_min, + ts->tm_sec); + else + tmps->length = BIO_snprintf(p, len, "%02d%02d%02d%02d%02d%02dZ", + ts->tm_year % 100, ts->tm_mon + 1, + ts->tm_mday, ts->tm_hour, ts->tm_min, + ts->tm_sec); + +#ifdef CHARSET_EBCDIC_not + ebcdic2ascii(tmps->data, tmps->data, tmps->length); +#endif + return tmps; + err: + if (tmps != s) + ASN1_STRING_free(tmps); + return NULL; +} + ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t) { return ASN1_TIME_adj(s, t, 0, 0); @@ -44,9 +330,7 @@ ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec)) return NULL; } - if ((ts->tm_year >= 50) && (ts->tm_year < 150)) - return ASN1_UTCTIME_adj(s, t, offset_day, offset_sec); - return ASN1_GENERALIZEDTIME_adj(s, t, offset_day, offset_sec); + return asn1_time_from_tm(s, ts, V_ASN1_UNDEF); } int ASN1_TIME_check(const ASN1_TIME *t) @@ -63,108 +347,207 @@ ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, ASN1_GENERALIZEDTIME **out) { ASN1_GENERALIZEDTIME *ret = NULL; - char *str; - int newlen; + struct tm tm; - if (!ASN1_TIME_check(t)) + if (!ASN1_TIME_to_tm(t, &tm)) return NULL; - if (out == NULL || *out == NULL) { - if ((ret = ASN1_GENERALIZEDTIME_new()) == NULL) - goto err; - } else + if (out != NULL) ret = *out; - /* If already GeneralizedTime just copy across */ - if (t->type == V_ASN1_GENERALIZEDTIME) { - if (!ASN1_STRING_set(ret, t->data, t->length)) - goto err; - goto done; - } + ret = asn1_time_from_tm(ret, &tm, V_ASN1_GENERALIZEDTIME); - /* grow the string */ - if (!ASN1_STRING_set(ret, NULL, t->length + 2)) - goto err; - /* ASN1_STRING_set() allocated 'len + 1' bytes. */ - newlen = t->length + 2 + 1; - str = (char *)ret->data; - /* Work out the century and prepend */ - if (t->data[0] >= '5') - OPENSSL_strlcpy(str, "19", newlen); - else - OPENSSL_strlcpy(str, "20", newlen); + if (out != NULL && ret != NULL) + *out = ret; - OPENSSL_strlcat(str, (const char *)t->data, newlen); - - done: - if (out != NULL && *out == NULL) - *out = ret; - return ret; - - err: - if (out == NULL || *out != ret) - ASN1_GENERALIZEDTIME_free(ret); - return NULL; + return ret; } - int ASN1_TIME_set_string(ASN1_TIME *s, const char *str) +{ + /* Try UTC, if that fails, try GENERALIZED */ + if (ASN1_UTCTIME_set_string(s, str)) + return 1; + return ASN1_GENERALIZEDTIME_set_string(s, str); +} + +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str) { ASN1_TIME t; + struct tm tm; + int rv = 0; t.length = strlen(str); t.data = (unsigned char *)str; - t.flags = 0; + t.flags = ASN1_STRING_FLAG_X509_TIME; t.type = V_ASN1_UTCTIME; if (!ASN1_TIME_check(&t)) { t.type = V_ASN1_GENERALIZEDTIME; if (!ASN1_TIME_check(&t)) - return 0; + goto out; } - if (s && !ASN1_STRING_copy((ASN1_STRING *)s, (ASN1_STRING *)&t)) - return 0; + /* + * Per RFC 5280 (section 4.1.2.5.), the valid input time + * strings should be encoded with the following rules: + * + * 1. UTC: YYMMDDHHMMSSZ, if YY < 50 (20YY) --> UTC: YYMMDDHHMMSSZ + * 2. UTC: YYMMDDHHMMSSZ, if YY >= 50 (19YY) --> UTC: YYMMDDHHMMSSZ + * 3. G'd: YYYYMMDDHHMMSSZ, if YYYY >= 2050 --> G'd: YYYYMMDDHHMMSSZ + * 4. G'd: YYYYMMDDHHMMSSZ, if YYYY < 2050 --> UTC: YYMMDDHHMMSSZ + * + * Only strings of the 4th rule should be reformatted, but since a + * UTC can only present [1950, 2050), so if the given time string + * is less than 1950 (e.g. 19230419000000Z), we do nothing... + */ - return 1; + if (s != NULL && t.type == V_ASN1_GENERALIZEDTIME) { + if (!asn1_time_to_tm(&tm, &t)) + goto out; + if (is_utc(tm.tm_year)) { + t.length -= 2; + /* + * it's OK to let original t.data go since that's assigned + * to a piece of memory allocated outside of this function. + * new t.data would be freed after ASN1_STRING_copy is done. + */ + t.data = OPENSSL_zalloc(t.length + 1); + if (t.data == NULL) + goto out; + memcpy(t.data, str + 2, t.length); + t.type = V_ASN1_UTCTIME; + } + } + + if (s == NULL || ASN1_STRING_copy((ASN1_STRING *)s, (ASN1_STRING *)&t)) + rv = 1; + + if (t.data != (unsigned char *)str) + OPENSSL_free(t.data); +out: + return rv; } -static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t) +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm) { - if (t == NULL) { + if (s == NULL) { time_t now_t; + time(&now_t); - if (OPENSSL_gmtime(&now_t, tm)) + memset(tm, 0, sizeof(*tm)); + if (OPENSSL_gmtime(&now_t, tm) != NULL) return 1; return 0; } - if (t->type == V_ASN1_UTCTIME) - return asn1_utctime_to_tm(tm, t); - else if (t->type == V_ASN1_GENERALIZEDTIME) - return asn1_generalizedtime_to_tm(tm, t); - - return 0; + return asn1_time_to_tm(tm, s); } int ASN1_TIME_diff(int *pday, int *psec, const ASN1_TIME *from, const ASN1_TIME *to) { struct tm tm_from, tm_to; - if (!asn1_time_to_tm(&tm_from, from)) + + if (!ASN1_TIME_to_tm(from, &tm_from)) return 0; - if (!asn1_time_to_tm(&tm_to, to)) + if (!ASN1_TIME_to_tm(to, &tm_to)) return 0; return OPENSSL_gmtime_diff(pday, psec, &tm_from, &tm_to); } +static const char _asn1_mon[12][4] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" +}; + int ASN1_TIME_print(BIO *bp, const ASN1_TIME *tm) { - if (tm->type == V_ASN1_UTCTIME) - return ASN1_UTCTIME_print(bp, tm); - if (tm->type == V_ASN1_GENERALIZEDTIME) - return ASN1_GENERALIZEDTIME_print(bp, tm); + char *v; + int gmt = 0, l; + struct tm stm; + + if (!asn1_time_to_tm(&stm, tm)) { + /* asn1_time_to_tm will check the time type */ + goto err; + } + + l = tm->length; + v = (char *)tm->data; + if (v[l - 1] == 'Z') + gmt = 1; + + if (tm->type == V_ASN1_GENERALIZEDTIME) { + char *f = NULL; + int f_len = 0; + + /* + * Try to parse fractional seconds. '14' is the place of + * 'fraction point' in a GeneralizedTime string. + */ + if (tm->length > 15 && v[14] == '.') { + f = &v[14]; + f_len = 1; + while (14 + f_len < l && ossl_isdigit(f[f_len])) + ++f_len; + } + + return BIO_printf(bp, "%s %2d %02d:%02d:%02d%.*s %d%s", + _asn1_mon[stm.tm_mon], stm.tm_mday, stm.tm_hour, + stm.tm_min, stm.tm_sec, f_len, f, stm.tm_year + 1900, + (gmt ? " GMT" : "")) > 0; + } else { + return BIO_printf(bp, "%s %2d %02d:%02d:%02d %d%s", + _asn1_mon[stm.tm_mon], stm.tm_mday, stm.tm_hour, + stm.tm_min, stm.tm_sec, stm.tm_year + 1900, + (gmt ? " GMT" : "")) > 0; + } + err: BIO_write(bp, "Bad time value", 14); - return (0); + return 0; +} + +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t) +{ + struct tm stm, ttm; + int day, sec; + + if (!ASN1_TIME_to_tm(s, &stm)) + return -2; + + if (!OPENSSL_gmtime(&t, &ttm)) + return -2; + + if (!OPENSSL_gmtime_diff(&day, &sec, &ttm, &stm)) + return -2; + + if (day > 0 || sec > 0) + return 1; + if (day < 0 || sec < 0) + return -1; + return 0; +} + +int ASN1_TIME_normalize(ASN1_TIME *t) +{ + struct tm tm; + + if (!ASN1_TIME_to_tm(t, &tm)) + return 0; + + return asn1_time_from_tm(t, &tm, V_ASN1_UNDEF) != NULL; +} + +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b) +{ + int day, sec; + + if (!ASN1_TIME_diff(&day, &sec, b, a)) + return -2; + if (day > 0 || sec > 0) + return 1; + if (day < 0 || sec < 0) + return -1; + return 0; } diff --git a/crypto/asn1/a_type.c b/crypto/asn1/a_type.c index df42360e..0c7aebe3 100644 --- a/crypto/asn1/a_type.c +++ b/crypto/asn1/a_type.c @@ -16,9 +16,9 @@ int ASN1_TYPE_get(const ASN1_TYPE *a) { if ((a->value.ptr != NULL) || (a->type == V_ASN1_NULL)) - return (a->type); + return a->type; else - return (0); + return 0; } void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value) diff --git a/crypto/asn1/a_utctm.c b/crypto/asn1/a_utctm.c index 9797aa8a..b224991a 100644 --- a/crypto/asn1/a_utctm.c +++ b/crypto/asn1/a_utctm.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -13,96 +13,13 @@ #include #include "asn1_locl.h" +/* This is the primary function used to parse ASN1_UTCTIME */ int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d) { - static const int min[8] = { 0, 1, 1, 0, 0, 0, 0, 0 }; - static const int max[8] = { 99, 12, 31, 23, 59, 59, 12, 59 }; - char *a; - int n, i, l, o; - + /* wrapper around ans1_time_to_tm */ if (d->type != V_ASN1_UTCTIME) - return (0); - l = d->length; - a = (char *)d->data; - o = 0; - - if (l < 11) - goto err; - for (i = 0; i < 6; i++) { - if ((i == 5) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) { - i++; - if (tm) - tm->tm_sec = 0; - break; - } - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = a[o] - '0'; - if (++o > l) - goto err; - - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = (n * 10) + a[o] - '0'; - if (++o > l) - goto err; - - if ((n < min[i]) || (n > max[i])) - goto err; - if (tm) { - switch (i) { - case 0: - tm->tm_year = n < 50 ? n + 100 : n; - break; - case 1: - tm->tm_mon = n - 1; - break; - case 2: - tm->tm_mday = n; - break; - case 3: - tm->tm_hour = n; - break; - case 4: - tm->tm_min = n; - break; - case 5: - tm->tm_sec = n; - break; - } - } - } - if (a[o] == 'Z') - o++; - else if ((a[o] == '+') || (a[o] == '-')) { - int offsign = a[o] == '-' ? 1 : -1, offset = 0; - o++; - if (o + 4 > l) - goto err; - for (i = 6; i < 8; i++) { - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = a[o] - '0'; - o++; - if ((a[o] < '0') || (a[o] > '9')) - goto err; - n = (n * 10) + a[o] - '0'; - if ((n < min[i]) || (n > max[i])) - goto err; - if (tm) { - if (i == 6) - offset = n * 3600; - else if (i == 7) - offset += n * 60; - } - o++; - } - if (offset && !OPENSSL_gmtime_adj(tm, 0, offset * offsign)) - return 0; - } - return o == l; - err: - return 0; + return 0; + return asn1_time_to_tm(tm, d); } int ASN1_UTCTIME_check(const ASN1_UTCTIME *d) @@ -110,6 +27,7 @@ int ASN1_UTCTIME_check(const ASN1_UTCTIME *d) return asn1_utctime_to_tm(NULL, d); } +/* Sets the string via simple copy without cleaning it up */ int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str) { ASN1_UTCTIME t; @@ -117,15 +35,15 @@ int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str) t.type = V_ASN1_UTCTIME; t.length = strlen(str); t.data = (unsigned char *)str; - if (ASN1_UTCTIME_check(&t)) { - if (s != NULL) { - if (!ASN1_STRING_set((ASN1_STRING *)s, str, t.length)) - return 0; - s->type = V_ASN1_UTCTIME; - } - return (1); - } else - return (0); + t.flags = 0; + + if (!ASN1_UTCTIME_check(&t)) + return 0; + + if (s != NULL && !ASN1_STRING_copy(s, &t)) + return 0; + + return 1; } ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t) @@ -136,55 +54,19 @@ 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) { - char *p; struct tm *ts; struct tm data; - size_t len = 20; - int free_s = 0; - - if (s == NULL) { - s = ASN1_UTCTIME_new(); - if (s == NULL) - goto err; - free_s = 1; - } ts = OPENSSL_gmtime(&t, &data); if (ts == NULL) - goto err; + return NULL; if (offset_day || offset_sec) { if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec)) - goto err; + return NULL; } - if ((ts->tm_year < 50) || (ts->tm_year >= 150)) - goto err; - - p = (char *)s->data; - if ((p == NULL) || ((size_t)s->length < len)) { - p = OPENSSL_malloc(len); - if (p == NULL) { - ASN1err(ASN1_F_ASN1_UTCTIME_ADJ, ERR_R_MALLOC_FAILURE); - goto err; - } - OPENSSL_free(s->data); - s->data = (unsigned char *)p; - } - - BIO_snprintf(p, len, "%02d%02d%02d%02d%02d%02dZ", ts->tm_year % 100, - ts->tm_mon + 1, ts->tm_mday, ts->tm_hour, ts->tm_min, - ts->tm_sec); - s->length = strlen(p); - s->type = V_ASN1_UTCTIME; -#ifdef CHARSET_EBCDIC_not - ebcdic2ascii(s->data, s->data, s->length); -#endif - return (s); - err: - if (free_s) - ASN1_UTCTIME_free(s); - return NULL; + return asn1_time_from_tm(s, ts, V_ASN1_UTCTIME); } int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t) @@ -195,60 +77,22 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t) if (!asn1_utctime_to_tm(&stm, s)) return -2; - if (!OPENSSL_gmtime(&t, &ttm)) + if (OPENSSL_gmtime(&t, &ttm) == NULL) return -2; if (!OPENSSL_gmtime_diff(&day, &sec, &ttm, &stm)) return -2; - if (day > 0) + if (day > 0 || sec > 0) return 1; - if (day < 0) - return -1; - if (sec > 0) - return 1; - if (sec < 0) + if (day < 0 || sec < 0) return -1; return 0; } int ASN1_UTCTIME_print(BIO *bp, const ASN1_UTCTIME *tm) { - const char *v; - int gmt = 0; - int i; - int y = 0, M = 0, d = 0, h = 0, m = 0, s = 0; - - i = tm->length; - v = (const char *)tm->data; - - if (i < 10) - goto err; - if (v[i - 1] == 'Z') - gmt = 1; - for (i = 0; i < 10; i++) - if ((v[i] > '9') || (v[i] < '0')) - goto err; - y = (v[0] - '0') * 10 + (v[1] - '0'); - if (y < 50) - y += 100; - M = (v[2] - '0') * 10 + (v[3] - '0'); - if ((M > 12) || (M < 1)) - goto err; - d = (v[4] - '0') * 10 + (v[5] - '0'); - h = (v[6] - '0') * 10 + (v[7] - '0'); - m = (v[8] - '0') * 10 + (v[9] - '0'); - if (tm->length >= 12 && - (v[10] >= '0') && (v[10] <= '9') && (v[11] >= '0') && (v[11] <= '9')) - s = (v[10] - '0') * 10 + (v[11] - '0'); - - if (BIO_printf(bp, "%s %2d %02d:%02d:%02d %d%s", - _asn1_mon[M - 1], d, h, m, s, y + 1900, - (gmt) ? " GMT" : "") <= 0) - return (0); - else - return (1); - err: - BIO_write(bp, "Bad time value", 14); - return (0); + if (tm->type != V_ASN1_UTCTIME) + return 0; + return ASN1_TIME_print(bp, tm); } diff --git a/crypto/asn1/a_verify.c b/crypto/asn1/a_verify.c index fb3607cb..973d50d2 100644 --- a/crypto/asn1/a_verify.c +++ b/crypto/asn1/a_verify.c @@ -76,7 +76,7 @@ int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *a, ASN1_BIT_STRING *signature, ret = 1; err: EVP_MD_CTX_free(ctx); - return (ret); + return ret; } #endif @@ -86,7 +86,7 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, { EVP_MD_CTX *ctx = NULL; unsigned char *buf_in = NULL; - int ret = -1, inl; + int ret = -1, inl = 0; int mdnid, pknid; @@ -156,24 +156,15 @@ int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *a, goto err; } - ret = EVP_DigestVerifyUpdate(ctx, buf_in, inl); - - OPENSSL_clear_free(buf_in, (unsigned int)inl); - - if (!ret) { + ret = EVP_DigestVerify(ctx, signature->data, (size_t)signature->length, + buf_in, inl); + if (ret <= 0) { ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); goto err; } - ret = -1; - - if (EVP_DigestVerifyFinal(ctx, signature->data, - (size_t)signature->length) <= 0) { - ASN1err(ASN1_F_ASN1_ITEM_VERIFY, ERR_R_EVP_LIB); - ret = 0; - goto err; - } ret = 1; err: + OPENSSL_clear_free(buf_in, (unsigned int)inl); EVP_MD_CTX_free(ctx); - return (ret); + return ret; } diff --git a/crypto/asn1/ameth_lib.c b/crypto/asn1/ameth_lib.c index b8ba0678..f8171986 100644 --- a/crypto/asn1/ameth_lib.c +++ b/crypto/asn1/ameth_lib.c @@ -7,59 +7,20 @@ * https://www.openssl.org/source/license.html */ -#include +#include "e_os.h" /* for strncasecmp */ #include "internal/cryptlib.h" +#include #include #include #include #include "internal/asn1_int.h" #include "internal/evp_int.h" -/* Keep this sorted in type order !! */ -static const EVP_PKEY_ASN1_METHOD *standard_methods[] = { -#ifndef OPENSSL_NO_RSA - &rsa_asn1_meths[0], - &rsa_asn1_meths[1], -#endif -#ifndef OPENSSL_NO_DH - &dh_asn1_meth, -#endif -#ifndef OPENSSL_NO_DSA - &dsa_asn1_meths[0], - &dsa_asn1_meths[1], - &dsa_asn1_meths[2], - &dsa_asn1_meths[3], - &dsa_asn1_meths[4], -#endif -#ifndef OPENSSL_NO_EC - &eckey_asn1_meth, -#endif - &hmac_asn1_meth, -#ifndef OPENSSL_NO_CMAC - &cmac_asn1_meth, -#endif -#ifndef OPENSSL_NO_DH - &dhx_asn1_meth, -#endif -#ifndef OPENSSL_NO_EC - &ecx25519_asn1_meth -#endif -}; +#include "standard_methods.h" typedef int sk_cmp_fn_type(const char *const *a, const char *const *b); static STACK_OF(EVP_PKEY_ASN1_METHOD) *app_methods = NULL; -#ifdef TEST -void main() -{ - int i; - for (i = 0; i < OSSL_NELEM(standard_methods); i++) - fprintf(stderr, "Number %d id=%d (%s)\n", i, - standard_methods[i]->pkey_id, - OBJ_nid2sn(standard_methods[i]->pkey_id)); -} -#endif - DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_ASN1_METHOD *, const EVP_PKEY_ASN1_METHOD *, ameth); @@ -301,6 +262,10 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, dst->item_sign = src->item_sign; dst->item_verify = src->item_verify; + dst->siginf_set = src->siginf_set; + + dst->pkey_check = src->pkey_check; + } void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth) @@ -409,3 +374,29 @@ void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, ameth->item_sign = item_sign; ameth->item_verify = item_verify; } + +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)) +{ + ameth->siginf_set = siginf_set; +} + +void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_check) (const EVP_PKEY *pk)) +{ + ameth->pkey_check = pkey_check; +} + +void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_pub_check) (const EVP_PKEY *pk)) +{ + ameth->pkey_public_check = pkey_pub_check; +} + +void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_param_check) (const EVP_PKEY *pk)) +{ + ameth->pkey_param_check = pkey_param_check; +} diff --git a/crypto/asn1/asn1_err.c b/crypto/asn1/asn1_err.c index 8602c408..da856b27 100644 --- a/crypto/asn1/asn1_err.c +++ b/crypto/asn1/asn1_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-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 @@ -8,251 +8,312 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_ASN1,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_ASN1,0,reason) - -static ERR_STRING_DATA ASN1_str_functs[] = { - {ERR_FUNC(ASN1_F_A2D_ASN1_OBJECT), "a2d_ASN1_OBJECT"}, - {ERR_FUNC(ASN1_F_A2I_ASN1_INTEGER), "a2i_ASN1_INTEGER"}, - {ERR_FUNC(ASN1_F_A2I_ASN1_STRING), "a2i_ASN1_STRING"}, - {ERR_FUNC(ASN1_F_APPEND_EXP), "append_exp"}, - {ERR_FUNC(ASN1_F_ASN1_BIT_STRING_SET_BIT), "ASN1_BIT_STRING_set_bit"}, - {ERR_FUNC(ASN1_F_ASN1_CB), "asn1_cb"}, - {ERR_FUNC(ASN1_F_ASN1_CHECK_TLEN), "asn1_check_tlen"}, - {ERR_FUNC(ASN1_F_ASN1_COLLECT), "asn1_collect"}, - {ERR_FUNC(ASN1_F_ASN1_D2I_EX_PRIMITIVE), "asn1_d2i_ex_primitive"}, - {ERR_FUNC(ASN1_F_ASN1_D2I_FP), "ASN1_d2i_fp"}, - {ERR_FUNC(ASN1_F_ASN1_D2I_READ_BIO), "asn1_d2i_read_bio"}, - {ERR_FUNC(ASN1_F_ASN1_DIGEST), "ASN1_digest"}, - {ERR_FUNC(ASN1_F_ASN1_DO_ADB), "asn1_do_adb"}, - {ERR_FUNC(ASN1_F_ASN1_DO_LOCK), "asn1_do_lock"}, - {ERR_FUNC(ASN1_F_ASN1_DUP), "ASN1_dup"}, - {ERR_FUNC(ASN1_F_ASN1_EX_C2I), "asn1_ex_c2i"}, - {ERR_FUNC(ASN1_F_ASN1_FIND_END), "asn1_find_end"}, - {ERR_FUNC(ASN1_F_ASN1_GENERALIZEDTIME_ADJ), "ASN1_GENERALIZEDTIME_adj"}, - {ERR_FUNC(ASN1_F_ASN1_GENERATE_V3), "ASN1_generate_v3"}, - {ERR_FUNC(ASN1_F_ASN1_GET_INT64), "asn1_get_int64"}, - {ERR_FUNC(ASN1_F_ASN1_GET_OBJECT), "ASN1_get_object"}, - {ERR_FUNC(ASN1_F_ASN1_GET_UINT64), "asn1_get_uint64"}, - {ERR_FUNC(ASN1_F_ASN1_I2D_BIO), "ASN1_i2d_bio"}, - {ERR_FUNC(ASN1_F_ASN1_I2D_FP), "ASN1_i2d_fp"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_D2I_FP), "ASN1_item_d2i_fp"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_DUP), "ASN1_item_dup"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_EMBED_D2I), "asn1_item_embed_d2i"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_EMBED_NEW), "asn1_item_embed_new"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_I2D_BIO), "ASN1_item_i2d_bio"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_I2D_FP), "ASN1_item_i2d_fp"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_PACK), "ASN1_item_pack"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_SIGN), "ASN1_item_sign"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_SIGN_CTX), "ASN1_item_sign_ctx"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_UNPACK), "ASN1_item_unpack"}, - {ERR_FUNC(ASN1_F_ASN1_ITEM_VERIFY), "ASN1_item_verify"}, - {ERR_FUNC(ASN1_F_ASN1_MBSTRING_NCOPY), "ASN1_mbstring_ncopy"}, - {ERR_FUNC(ASN1_F_ASN1_OBJECT_NEW), "ASN1_OBJECT_new"}, - {ERR_FUNC(ASN1_F_ASN1_OUTPUT_DATA), "asn1_output_data"}, - {ERR_FUNC(ASN1_F_ASN1_PCTX_NEW), "ASN1_PCTX_new"}, - {ERR_FUNC(ASN1_F_ASN1_SCTX_NEW), "ASN1_SCTX_new"}, - {ERR_FUNC(ASN1_F_ASN1_SIGN), "ASN1_sign"}, - {ERR_FUNC(ASN1_F_ASN1_STR2TYPE), "asn1_str2type"}, - {ERR_FUNC(ASN1_F_ASN1_STRING_GET_INT64), "asn1_string_get_int64"}, - {ERR_FUNC(ASN1_F_ASN1_STRING_GET_UINT64), "asn1_string_get_uint64"}, - {ERR_FUNC(ASN1_F_ASN1_STRING_SET), "ASN1_STRING_set"}, - {ERR_FUNC(ASN1_F_ASN1_STRING_TABLE_ADD), "ASN1_STRING_TABLE_add"}, - {ERR_FUNC(ASN1_F_ASN1_STRING_TO_BN), "asn1_string_to_bn"}, - {ERR_FUNC(ASN1_F_ASN1_STRING_TYPE_NEW), "ASN1_STRING_type_new"}, - {ERR_FUNC(ASN1_F_ASN1_TEMPLATE_EX_D2I), "asn1_template_ex_d2i"}, - {ERR_FUNC(ASN1_F_ASN1_TEMPLATE_NEW), "asn1_template_new"}, - {ERR_FUNC(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I), "asn1_template_noexp_d2i"}, - {ERR_FUNC(ASN1_F_ASN1_TIME_ADJ), "ASN1_TIME_adj"}, - {ERR_FUNC(ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING), +static const ERR_STRING_DATA ASN1_str_functs[] = { + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_A2D_ASN1_OBJECT, 0), "a2d_ASN1_OBJECT"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_A2I_ASN1_INTEGER, 0), "a2i_ASN1_INTEGER"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_A2I_ASN1_STRING, 0), "a2i_ASN1_STRING"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_APPEND_EXP, 0), "append_exp"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_BIT_STRING_SET_BIT, 0), + "ASN1_BIT_STRING_set_bit"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_CB, 0), "asn1_cb"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_CHECK_TLEN, 0), "asn1_check_tlen"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_COLLECT, 0), "asn1_collect"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_D2I_EX_PRIMITIVE, 0), + "asn1_d2i_ex_primitive"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_D2I_FP, 0), "ASN1_d2i_fp"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_D2I_READ_BIO, 0), "asn1_d2i_read_bio"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_DIGEST, 0), "ASN1_digest"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_DO_ADB, 0), "asn1_do_adb"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_DO_LOCK, 0), "asn1_do_lock"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_DUP, 0), "ASN1_dup"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_EX_C2I, 0), "asn1_ex_c2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_FIND_END, 0), "asn1_find_end"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_GENERALIZEDTIME_ADJ, 0), + "ASN1_GENERALIZEDTIME_adj"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_GENERATE_V3, 0), "ASN1_generate_v3"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_GET_INT64, 0), "asn1_get_int64"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_GET_OBJECT, 0), "ASN1_get_object"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_GET_UINT64, 0), "asn1_get_uint64"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_I2D_BIO, 0), "ASN1_i2d_bio"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_I2D_FP, 0), "ASN1_i2d_fp"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_D2I_FP, 0), "ASN1_item_d2i_fp"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_DUP, 0), "ASN1_item_dup"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_EMBED_D2I, 0), + "asn1_item_embed_d2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_EMBED_NEW, 0), + "asn1_item_embed_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_I2D_BIO, 0), "ASN1_item_i2d_bio"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_I2D_FP, 0), "ASN1_item_i2d_fp"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_PACK, 0), "ASN1_item_pack"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_SIGN, 0), "ASN1_item_sign"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_SIGN_CTX, 0), + "ASN1_item_sign_ctx"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_UNPACK, 0), "ASN1_item_unpack"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_VERIFY, 0), "ASN1_item_verify"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_MBSTRING_NCOPY, 0), + "ASN1_mbstring_ncopy"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_OBJECT_NEW, 0), "ASN1_OBJECT_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_OUTPUT_DATA, 0), "asn1_output_data"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_PCTX_NEW, 0), "ASN1_PCTX_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_SCTX_NEW, 0), "ASN1_SCTX_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_SIGN, 0), "ASN1_sign"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STR2TYPE, 0), "asn1_str2type"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_GET_INT64, 0), + "asn1_string_get_int64"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_GET_UINT64, 0), + "asn1_string_get_uint64"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_SET, 0), "ASN1_STRING_set"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_TABLE_ADD, 0), + "ASN1_STRING_TABLE_add"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_TO_BN, 0), "asn1_string_to_bn"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_STRING_TYPE_NEW, 0), + "ASN1_STRING_type_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TEMPLATE_EX_D2I, 0), + "asn1_template_ex_d2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TEMPLATE_NEW, 0), "asn1_template_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, 0), + "asn1_template_noexp_d2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TIME_ADJ, 0), "ASN1_TIME_adj"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING, 0), "ASN1_TYPE_get_int_octetstring"}, - {ERR_FUNC(ASN1_F_ASN1_TYPE_GET_OCTETSTRING), "ASN1_TYPE_get_octetstring"}, - {ERR_FUNC(ASN1_F_ASN1_UTCTIME_ADJ), "ASN1_UTCTIME_adj"}, - {ERR_FUNC(ASN1_F_ASN1_VERIFY), "ASN1_verify"}, - {ERR_FUNC(ASN1_F_B64_READ_ASN1), "b64_read_asn1"}, - {ERR_FUNC(ASN1_F_B64_WRITE_ASN1), "B64_write_ASN1"}, - {ERR_FUNC(ASN1_F_BIO_NEW_NDEF), "BIO_new_NDEF"}, - {ERR_FUNC(ASN1_F_BITSTR_CB), "bitstr_cb"}, - {ERR_FUNC(ASN1_F_BN_TO_ASN1_STRING), "bn_to_asn1_string"}, - {ERR_FUNC(ASN1_F_C2I_ASN1_BIT_STRING), "c2i_ASN1_BIT_STRING"}, - {ERR_FUNC(ASN1_F_C2I_ASN1_INTEGER), "c2i_ASN1_INTEGER"}, - {ERR_FUNC(ASN1_F_C2I_ASN1_OBJECT), "c2i_ASN1_OBJECT"}, - {ERR_FUNC(ASN1_F_C2I_IBUF), "c2i_ibuf"}, - {ERR_FUNC(ASN1_F_C2I_UINT64_INT), "c2i_uint64_int"}, - {ERR_FUNC(ASN1_F_COLLECT_DATA), "collect_data"}, - {ERR_FUNC(ASN1_F_D2I_ASN1_OBJECT), "d2i_ASN1_OBJECT"}, - {ERR_FUNC(ASN1_F_D2I_ASN1_UINTEGER), "d2i_ASN1_UINTEGER"}, - {ERR_FUNC(ASN1_F_D2I_AUTOPRIVATEKEY), "d2i_AutoPrivateKey"}, - {ERR_FUNC(ASN1_F_D2I_PRIVATEKEY), "d2i_PrivateKey"}, - {ERR_FUNC(ASN1_F_D2I_PUBLICKEY), "d2i_PublicKey"}, - {ERR_FUNC(ASN1_F_DO_TCREATE), "do_tcreate"}, - {ERR_FUNC(ASN1_F_I2D_ASN1_BIO_STREAM), "i2d_ASN1_bio_stream"}, - {ERR_FUNC(ASN1_F_I2D_DSA_PUBKEY), "i2d_DSA_PUBKEY"}, - {ERR_FUNC(ASN1_F_I2D_EC_PUBKEY), "i2d_EC_PUBKEY"}, - {ERR_FUNC(ASN1_F_I2D_PRIVATEKEY), "i2d_PrivateKey"}, - {ERR_FUNC(ASN1_F_I2D_PUBLICKEY), "i2d_PublicKey"}, - {ERR_FUNC(ASN1_F_I2D_RSA_PUBKEY), "i2d_RSA_PUBKEY"}, - {ERR_FUNC(ASN1_F_LONG_C2I), "long_c2i"}, - {ERR_FUNC(ASN1_F_OID_MODULE_INIT), "oid_module_init"}, - {ERR_FUNC(ASN1_F_PARSE_TAGGING), "parse_tagging"}, - {ERR_FUNC(ASN1_F_PKCS5_PBE2_SET_IV), "PKCS5_pbe2_set_iv"}, - {ERR_FUNC(ASN1_F_PKCS5_PBE2_SET_SCRYPT), "PKCS5_pbe2_set_scrypt"}, - {ERR_FUNC(ASN1_F_PKCS5_PBE_SET), "PKCS5_pbe_set"}, - {ERR_FUNC(ASN1_F_PKCS5_PBE_SET0_ALGOR), "PKCS5_pbe_set0_algor"}, - {ERR_FUNC(ASN1_F_PKCS5_PBKDF2_SET), "PKCS5_pbkdf2_set"}, - {ERR_FUNC(ASN1_F_PKCS5_SCRYPT_SET), "pkcs5_scrypt_set"}, - {ERR_FUNC(ASN1_F_SMIME_READ_ASN1), "SMIME_read_ASN1"}, - {ERR_FUNC(ASN1_F_SMIME_TEXT), "SMIME_text"}, - {ERR_FUNC(ASN1_F_STBL_MODULE_INIT), "stbl_module_init"}, - {ERR_FUNC(ASN1_F_UINT32_C2I), "uint32_c2i"}, - {ERR_FUNC(ASN1_F_UINT64_C2I), "uint64_c2i"}, - {ERR_FUNC(ASN1_F_X509_CRL_ADD0_REVOKED), "X509_CRL_add0_revoked"}, - {ERR_FUNC(ASN1_F_X509_INFO_NEW), "X509_INFO_new"}, - {ERR_FUNC(ASN1_F_X509_NAME_ENCODE), "x509_name_encode"}, - {ERR_FUNC(ASN1_F_X509_NAME_EX_D2I), "x509_name_ex_d2i"}, - {ERR_FUNC(ASN1_F_X509_NAME_EX_NEW), "x509_name_ex_new"}, - {ERR_FUNC(ASN1_F_X509_PKEY_NEW), "X509_PKEY_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_TYPE_GET_OCTETSTRING, 0), + "ASN1_TYPE_get_octetstring"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_UTCTIME_ADJ, 0), "ASN1_UTCTIME_adj"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_VERIFY, 0), "ASN1_verify"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_B64_READ_ASN1, 0), "b64_read_asn1"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_B64_WRITE_ASN1, 0), "B64_write_ASN1"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_BIO_NEW_NDEF, 0), "BIO_new_NDEF"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_BITSTR_CB, 0), "bitstr_cb"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_BN_TO_ASN1_STRING, 0), "bn_to_asn1_string"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_C2I_ASN1_BIT_STRING, 0), + "c2i_ASN1_BIT_STRING"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_C2I_ASN1_INTEGER, 0), "c2i_ASN1_INTEGER"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_C2I_ASN1_OBJECT, 0), "c2i_ASN1_OBJECT"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_C2I_IBUF, 0), "c2i_ibuf"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_C2I_UINT64_INT, 0), "c2i_uint64_int"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_COLLECT_DATA, 0), "collect_data"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_D2I_ASN1_OBJECT, 0), "d2i_ASN1_OBJECT"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_D2I_ASN1_UINTEGER, 0), "d2i_ASN1_UINTEGER"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_D2I_AUTOPRIVATEKEY, 0), + "d2i_AutoPrivateKey"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_D2I_PRIVATEKEY, 0), "d2i_PrivateKey"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_D2I_PUBLICKEY, 0), "d2i_PublicKey"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_DO_TCREATE, 0), "do_tcreate"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_I2D_ASN1_BIO_STREAM, 0), + "i2d_ASN1_bio_stream"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_I2D_DSA_PUBKEY, 0), "i2d_DSA_PUBKEY"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_I2D_EC_PUBKEY, 0), "i2d_EC_PUBKEY"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_I2D_PRIVATEKEY, 0), "i2d_PrivateKey"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_I2D_PUBLICKEY, 0), "i2d_PublicKey"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_I2D_RSA_PUBKEY, 0), "i2d_RSA_PUBKEY"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_LONG_C2I, 0), "long_c2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_OID_MODULE_INIT, 0), "oid_module_init"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PARSE_TAGGING, 0), "parse_tagging"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PKCS5_PBE2_SET_IV, 0), "PKCS5_pbe2_set_iv"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PKCS5_PBE2_SET_SCRYPT, 0), + "PKCS5_pbe2_set_scrypt"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PKCS5_PBE_SET, 0), "PKCS5_pbe_set"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PKCS5_PBE_SET0_ALGOR, 0), + "PKCS5_pbe_set0_algor"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PKCS5_PBKDF2_SET, 0), "PKCS5_pbkdf2_set"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_PKCS5_SCRYPT_SET, 0), "pkcs5_scrypt_set"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_SMIME_READ_ASN1, 0), "SMIME_read_ASN1"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_SMIME_TEXT, 0), "SMIME_text"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_STBL_MODULE_INIT, 0), "stbl_module_init"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_UINT32_C2I, 0), "uint32_c2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_UINT64_C2I, 0), "uint64_c2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_X509_CRL_ADD0_REVOKED, 0), + "X509_CRL_add0_revoked"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_X509_INFO_NEW, 0), "X509_INFO_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_X509_NAME_ENCODE, 0), "x509_name_encode"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_X509_NAME_EX_D2I, 0), "x509_name_ex_d2i"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_X509_NAME_EX_NEW, 0), "x509_name_ex_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_X509_PKEY_NEW, 0), "X509_PKEY_new"}, {0, NULL} }; -static ERR_STRING_DATA ASN1_str_reasons[] = { - {ERR_REASON(ASN1_R_ADDING_OBJECT), "adding object"}, - {ERR_REASON(ASN1_R_ASN1_PARSE_ERROR), "asn1 parse error"}, - {ERR_REASON(ASN1_R_ASN1_SIG_PARSE_ERROR), "asn1 sig parse error"}, - {ERR_REASON(ASN1_R_AUX_ERROR), "aux error"}, - {ERR_REASON(ASN1_R_BAD_OBJECT_HEADER), "bad object header"}, - {ERR_REASON(ASN1_R_BMPSTRING_IS_WRONG_LENGTH), - "bmpstring is wrong length"}, - {ERR_REASON(ASN1_R_BN_LIB), "bn lib"}, - {ERR_REASON(ASN1_R_BOOLEAN_IS_WRONG_LENGTH), "boolean is wrong length"}, - {ERR_REASON(ASN1_R_BUFFER_TOO_SMALL), "buffer too small"}, - {ERR_REASON(ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER), - "cipher has no object identifier"}, - {ERR_REASON(ASN1_R_CONTEXT_NOT_INITIALISED), "context not initialised"}, - {ERR_REASON(ASN1_R_DATA_IS_WRONG), "data is wrong"}, - {ERR_REASON(ASN1_R_DECODE_ERROR), "decode error"}, - {ERR_REASON(ASN1_R_DEPTH_EXCEEDED), "depth exceeded"}, - {ERR_REASON(ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED), - "digest and key type not supported"}, - {ERR_REASON(ASN1_R_ENCODE_ERROR), "encode error"}, - {ERR_REASON(ASN1_R_ERROR_GETTING_TIME), "error getting time"}, - {ERR_REASON(ASN1_R_ERROR_LOADING_SECTION), "error loading section"}, - {ERR_REASON(ASN1_R_ERROR_SETTING_CIPHER_PARAMS), - "error setting cipher params"}, - {ERR_REASON(ASN1_R_EXPECTING_AN_INTEGER), "expecting an integer"}, - {ERR_REASON(ASN1_R_EXPECTING_AN_OBJECT), "expecting an object"}, - {ERR_REASON(ASN1_R_EXPLICIT_LENGTH_MISMATCH), "explicit length mismatch"}, - {ERR_REASON(ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED), - "explicit tag not constructed"}, - {ERR_REASON(ASN1_R_FIELD_MISSING), "field missing"}, - {ERR_REASON(ASN1_R_FIRST_NUM_TOO_LARGE), "first num too large"}, - {ERR_REASON(ASN1_R_HEADER_TOO_LONG), "header too long"}, - {ERR_REASON(ASN1_R_ILLEGAL_BITSTRING_FORMAT), "illegal bitstring format"}, - {ERR_REASON(ASN1_R_ILLEGAL_BOOLEAN), "illegal boolean"}, - {ERR_REASON(ASN1_R_ILLEGAL_CHARACTERS), "illegal characters"}, - {ERR_REASON(ASN1_R_ILLEGAL_FORMAT), "illegal format"}, - {ERR_REASON(ASN1_R_ILLEGAL_HEX), "illegal hex"}, - {ERR_REASON(ASN1_R_ILLEGAL_IMPLICIT_TAG), "illegal implicit tag"}, - {ERR_REASON(ASN1_R_ILLEGAL_INTEGER), "illegal integer"}, - {ERR_REASON(ASN1_R_ILLEGAL_NEGATIVE_VALUE), "illegal negative value"}, - {ERR_REASON(ASN1_R_ILLEGAL_NESTED_TAGGING), "illegal nested tagging"}, - {ERR_REASON(ASN1_R_ILLEGAL_NULL), "illegal null"}, - {ERR_REASON(ASN1_R_ILLEGAL_NULL_VALUE), "illegal null value"}, - {ERR_REASON(ASN1_R_ILLEGAL_OBJECT), "illegal object"}, - {ERR_REASON(ASN1_R_ILLEGAL_OPTIONAL_ANY), "illegal optional any"}, - {ERR_REASON(ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE), - "illegal options on item template"}, - {ERR_REASON(ASN1_R_ILLEGAL_PADDING), "illegal padding"}, - {ERR_REASON(ASN1_R_ILLEGAL_TAGGED_ANY), "illegal tagged any"}, - {ERR_REASON(ASN1_R_ILLEGAL_TIME_VALUE), "illegal time value"}, - {ERR_REASON(ASN1_R_ILLEGAL_ZERO_CONTENT), "illegal zero content"}, - {ERR_REASON(ASN1_R_INTEGER_NOT_ASCII_FORMAT), "integer not ascii format"}, - {ERR_REASON(ASN1_R_INTEGER_TOO_LARGE_FOR_LONG), - "integer too large for long"}, - {ERR_REASON(ASN1_R_INVALID_BIT_STRING_BITS_LEFT), - "invalid bit string bits left"}, - {ERR_REASON(ASN1_R_INVALID_BMPSTRING_LENGTH), "invalid bmpstring length"}, - {ERR_REASON(ASN1_R_INVALID_DIGIT), "invalid digit"}, - {ERR_REASON(ASN1_R_INVALID_MIME_TYPE), "invalid mime type"}, - {ERR_REASON(ASN1_R_INVALID_MODIFIER), "invalid modifier"}, - {ERR_REASON(ASN1_R_INVALID_NUMBER), "invalid number"}, - {ERR_REASON(ASN1_R_INVALID_OBJECT_ENCODING), "invalid object encoding"}, - {ERR_REASON(ASN1_R_INVALID_SCRYPT_PARAMETERS), - "invalid scrypt parameters"}, - {ERR_REASON(ASN1_R_INVALID_SEPARATOR), "invalid separator"}, - {ERR_REASON(ASN1_R_INVALID_STRING_TABLE_VALUE), - "invalid string table value"}, - {ERR_REASON(ASN1_R_INVALID_UNIVERSALSTRING_LENGTH), - "invalid universalstring length"}, - {ERR_REASON(ASN1_R_INVALID_UTF8STRING), "invalid utf8string"}, - {ERR_REASON(ASN1_R_INVALID_VALUE), "invalid value"}, - {ERR_REASON(ASN1_R_LIST_ERROR), "list error"}, - {ERR_REASON(ASN1_R_MIME_NO_CONTENT_TYPE), "mime no content type"}, - {ERR_REASON(ASN1_R_MIME_PARSE_ERROR), "mime parse error"}, - {ERR_REASON(ASN1_R_MIME_SIG_PARSE_ERROR), "mime sig parse error"}, - {ERR_REASON(ASN1_R_MISSING_EOC), "missing eoc"}, - {ERR_REASON(ASN1_R_MISSING_SECOND_NUMBER), "missing second number"}, - {ERR_REASON(ASN1_R_MISSING_VALUE), "missing value"}, - {ERR_REASON(ASN1_R_MSTRING_NOT_UNIVERSAL), "mstring not universal"}, - {ERR_REASON(ASN1_R_MSTRING_WRONG_TAG), "mstring wrong tag"}, - {ERR_REASON(ASN1_R_NESTED_ASN1_STRING), "nested asn1 string"}, - {ERR_REASON(ASN1_R_NESTED_TOO_DEEP), "nested too deep"}, - {ERR_REASON(ASN1_R_NON_HEX_CHARACTERS), "non hex characters"}, - {ERR_REASON(ASN1_R_NOT_ASCII_FORMAT), "not ascii format"}, - {ERR_REASON(ASN1_R_NOT_ENOUGH_DATA), "not enough data"}, - {ERR_REASON(ASN1_R_NO_CONTENT_TYPE), "no content type"}, - {ERR_REASON(ASN1_R_NO_MATCHING_CHOICE_TYPE), "no matching choice type"}, - {ERR_REASON(ASN1_R_NO_MULTIPART_BODY_FAILURE), - "no multipart body failure"}, - {ERR_REASON(ASN1_R_NO_MULTIPART_BOUNDARY), "no multipart boundary"}, - {ERR_REASON(ASN1_R_NO_SIG_CONTENT_TYPE), "no sig content type"}, - {ERR_REASON(ASN1_R_NULL_IS_WRONG_LENGTH), "null is wrong length"}, - {ERR_REASON(ASN1_R_OBJECT_NOT_ASCII_FORMAT), "object not ascii format"}, - {ERR_REASON(ASN1_R_ODD_NUMBER_OF_CHARS), "odd number of chars"}, - {ERR_REASON(ASN1_R_SECOND_NUMBER_TOO_LARGE), "second number too large"}, - {ERR_REASON(ASN1_R_SEQUENCE_LENGTH_MISMATCH), "sequence length mismatch"}, - {ERR_REASON(ASN1_R_SEQUENCE_NOT_CONSTRUCTED), "sequence not constructed"}, - {ERR_REASON(ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG), - "sequence or set needs config"}, - {ERR_REASON(ASN1_R_SHORT_LINE), "short line"}, - {ERR_REASON(ASN1_R_SIG_INVALID_MIME_TYPE), "sig invalid mime type"}, - {ERR_REASON(ASN1_R_STREAMING_NOT_SUPPORTED), "streaming not supported"}, - {ERR_REASON(ASN1_R_STRING_TOO_LONG), "string too long"}, - {ERR_REASON(ASN1_R_STRING_TOO_SHORT), "string too short"}, - {ERR_REASON(ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD), - "the asn1 object identifier is not known for this md"}, - {ERR_REASON(ASN1_R_TIME_NOT_ASCII_FORMAT), "time not ascii format"}, - {ERR_REASON(ASN1_R_TOO_LARGE), "too large"}, - {ERR_REASON(ASN1_R_TOO_LONG), "too long"}, - {ERR_REASON(ASN1_R_TOO_SMALL), "too small"}, - {ERR_REASON(ASN1_R_TYPE_NOT_CONSTRUCTED), "type not constructed"}, - {ERR_REASON(ASN1_R_TYPE_NOT_PRIMITIVE), "type not primitive"}, - {ERR_REASON(ASN1_R_UNEXPECTED_EOC), "unexpected eoc"}, - {ERR_REASON(ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH), - "universalstring is wrong length"}, - {ERR_REASON(ASN1_R_UNKNOWN_FORMAT), "unknown format"}, - {ERR_REASON(ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM), - "unknown message digest algorithm"}, - {ERR_REASON(ASN1_R_UNKNOWN_OBJECT_TYPE), "unknown object type"}, - {ERR_REASON(ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE), "unknown public key type"}, - {ERR_REASON(ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM), - "unknown signature algorithm"}, - {ERR_REASON(ASN1_R_UNKNOWN_TAG), "unknown tag"}, - {ERR_REASON(ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE), - "unsupported any defined by type"}, - {ERR_REASON(ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE), - "unsupported public key type"}, - {ERR_REASON(ASN1_R_UNSUPPORTED_TYPE), "unsupported type"}, - {ERR_REASON(ASN1_R_WRONG_INTEGER_TYPE), "wrong integer type"}, - {ERR_REASON(ASN1_R_WRONG_PUBLIC_KEY_TYPE), "wrong public key type"}, - {ERR_REASON(ASN1_R_WRONG_TAG), "wrong tag"}, +static const ERR_STRING_DATA ASN1_str_reasons[] = { + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ADDING_OBJECT), "adding object"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ASN1_PARSE_ERROR), "asn1 parse error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ASN1_SIG_PARSE_ERROR), + "asn1 sig parse error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_AUX_ERROR), "aux error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_OBJECT_HEADER), "bad object header"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BMPSTRING_IS_WRONG_LENGTH), + "bmpstring is wrong length"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BN_LIB), "bn lib"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BOOLEAN_IS_WRONG_LENGTH), + "boolean is wrong length"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER), + "cipher has no object identifier"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_CONTEXT_NOT_INITIALISED), + "context not initialised"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DATA_IS_WRONG), "data is wrong"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DECODE_ERROR), "decode error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DEPTH_EXCEEDED), "depth exceeded"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED), + "digest and key type not supported"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ENCODE_ERROR), "encode error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_GETTING_TIME), + "error getting time"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_LOADING_SECTION), + "error loading section"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ERROR_SETTING_CIPHER_PARAMS), + "error setting cipher params"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_AN_INTEGER), + "expecting an integer"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPECTING_AN_OBJECT), + "expecting an object"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPLICIT_LENGTH_MISMATCH), + "explicit length mismatch"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED), + "explicit tag not constructed"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_FIELD_MISSING), "field missing"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_FIRST_NUM_TOO_LARGE), + "first num too large"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_HEADER_TOO_LONG), "header too long"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_BITSTRING_FORMAT), + "illegal bitstring format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_BOOLEAN), "illegal boolean"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_CHARACTERS), + "illegal characters"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_FORMAT), "illegal format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_HEX), "illegal hex"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_IMPLICIT_TAG), + "illegal implicit tag"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_INTEGER), "illegal integer"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NEGATIVE_VALUE), + "illegal negative value"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NESTED_TAGGING), + "illegal nested tagging"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NULL), "illegal null"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_NULL_VALUE), + "illegal null value"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_OBJECT), "illegal object"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_OPTIONAL_ANY), + "illegal optional any"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE), + "illegal options on item template"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_PADDING), "illegal padding"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_TAGGED_ANY), + "illegal tagged any"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_TIME_VALUE), + "illegal time value"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ILLEGAL_ZERO_CONTENT), + "illegal zero content"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INTEGER_NOT_ASCII_FORMAT), + "integer not ascii format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG), + "integer too large for long"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_BIT_STRING_BITS_LEFT), + "invalid bit string bits left"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_BMPSTRING_LENGTH), + "invalid bmpstring length"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_DIGIT), "invalid digit"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_MIME_TYPE), "invalid mime type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_MODIFIER), "invalid modifier"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_NUMBER), "invalid number"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_OBJECT_ENCODING), + "invalid object encoding"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_SCRYPT_PARAMETERS), + "invalid scrypt parameters"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_SEPARATOR), "invalid separator"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_STRING_TABLE_VALUE), + "invalid string table value"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_UNIVERSALSTRING_LENGTH), + "invalid universalstring length"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_UTF8STRING), + "invalid utf8string"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_INVALID_VALUE), "invalid value"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_LIST_ERROR), "list error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MIME_NO_CONTENT_TYPE), + "mime no content type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MIME_PARSE_ERROR), "mime parse error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MIME_SIG_PARSE_ERROR), + "mime sig parse error"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_EOC), "missing eoc"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_SECOND_NUMBER), + "missing second number"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MISSING_VALUE), "missing value"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MSTRING_NOT_UNIVERSAL), + "mstring not universal"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_MSTRING_WRONG_TAG), "mstring wrong tag"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NESTED_ASN1_STRING), + "nested asn1 string"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NON_HEX_CHARACTERS), + "non hex characters"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NOT_ASCII_FORMAT), "not ascii format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NOT_ENOUGH_DATA), "not enough data"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_CONTENT_TYPE), "no content type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_MATCHING_CHOICE_TYPE), + "no matching choice type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_MULTIPART_BODY_FAILURE), + "no multipart body failure"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_MULTIPART_BOUNDARY), + "no multipart boundary"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NO_SIG_CONTENT_TYPE), + "no sig content type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_NULL_IS_WRONG_LENGTH), + "null is wrong length"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_OBJECT_NOT_ASCII_FORMAT), + "object not ascii format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_ODD_NUMBER_OF_CHARS), + "odd number of chars"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SECOND_NUMBER_TOO_LARGE), + "second number too large"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SEQUENCE_LENGTH_MISMATCH), + "sequence length mismatch"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SEQUENCE_NOT_CONSTRUCTED), + "sequence not constructed"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG), + "sequence or set needs config"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SHORT_LINE), "short line"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_SIG_INVALID_MIME_TYPE), + "sig invalid mime type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_STREAMING_NOT_SUPPORTED), + "streaming not supported"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_STRING_TOO_LONG), "string too long"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_STRING_TOO_SHORT), "string too short"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD), + "the asn1 object identifier is not known for this md"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TIME_NOT_ASCII_FORMAT), + "time not ascii format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TOO_LARGE), "too large"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TOO_LONG), "too long"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TOO_SMALL), "too small"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TYPE_NOT_CONSTRUCTED), + "type not constructed"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_TYPE_NOT_PRIMITIVE), + "type not primitive"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNEXPECTED_EOC), "unexpected eoc"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH), + "universalstring is wrong length"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_FORMAT), "unknown format"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM), + "unknown message digest algorithm"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_OBJECT_TYPE), + "unknown object type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE), + "unknown public key type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM), + "unknown signature algorithm"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNKNOWN_TAG), "unknown tag"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE), + "unsupported any defined by type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE), + "unsupported public key type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_UNSUPPORTED_TYPE), "unsupported type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_WRONG_INTEGER_TYPE), + "wrong integer type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_WRONG_PUBLIC_KEY_TYPE), + "wrong public key type"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_WRONG_TAG), "wrong tag"}, {0, NULL} }; @@ -261,10 +322,9 @@ static ERR_STRING_DATA ASN1_str_reasons[] = { int ERR_load_ASN1_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(ASN1_str_functs[0].error) == NULL) { - ERR_load_strings(0, ASN1_str_functs); - ERR_load_strings(0, ASN1_str_reasons); + ERR_load_strings_const(ASN1_str_functs); + ERR_load_strings_const(ASN1_str_reasons); } #endif return 1; diff --git a/crypto/asn1/asn1_item_list.c b/crypto/asn1/asn1_item_list.c new file mode 100644 index 00000000..9798192f --- /dev/null +++ b/crypto/asn1/asn1_item_list.c @@ -0,0 +1,42 @@ +/* + * 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 + */ + +#include +#include "internal/cryptlib.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "asn1_item_list.h" + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name) +{ + size_t i; + + for (i = 0; i < OSSL_NELEM(asn1_item_list); i++) { + const ASN1_ITEM *it = ASN1_ITEM_ptr(asn1_item_list[i]); + + if (strcmp(it->sname, name) == 0) + return it; + } + return NULL; +} + +const ASN1_ITEM *ASN1_ITEM_get(size_t i) +{ + if (i >= OSSL_NELEM(asn1_item_list)) + return NULL; + return ASN1_ITEM_ptr(asn1_item_list[i]); +} diff --git a/crypto/asn1/asn1_item_list.h b/crypto/asn1/asn1_item_list.h new file mode 100644 index 00000000..db8107ed --- /dev/null +++ b/crypto/asn1/asn1_item_list.h @@ -0,0 +1,178 @@ +/* + * 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 + */ + +static ASN1_ITEM_EXP *asn1_item_list[] = { + + ASN1_ITEM_ref(ACCESS_DESCRIPTION), +#ifndef OPENSSL_NO_RFC3779 + ASN1_ITEM_ref(ASIdOrRange), + ASN1_ITEM_ref(ASIdentifierChoice), + ASN1_ITEM_ref(ASIdentifiers), +#endif + ASN1_ITEM_ref(ASN1_ANY), + ASN1_ITEM_ref(ASN1_BIT_STRING), + ASN1_ITEM_ref(ASN1_BMPSTRING), + ASN1_ITEM_ref(ASN1_BOOLEAN), + ASN1_ITEM_ref(ASN1_ENUMERATED), + ASN1_ITEM_ref(ASN1_FBOOLEAN), + ASN1_ITEM_ref(ASN1_GENERALIZEDTIME), + ASN1_ITEM_ref(ASN1_GENERALSTRING), + ASN1_ITEM_ref(ASN1_IA5STRING), + ASN1_ITEM_ref(ASN1_INTEGER), + ASN1_ITEM_ref(ASN1_NULL), + ASN1_ITEM_ref(ASN1_OBJECT), + ASN1_ITEM_ref(ASN1_OCTET_STRING_NDEF), + ASN1_ITEM_ref(ASN1_OCTET_STRING), + ASN1_ITEM_ref(ASN1_PRINTABLESTRING), + ASN1_ITEM_ref(ASN1_PRINTABLE), + ASN1_ITEM_ref(ASN1_SEQUENCE_ANY), + ASN1_ITEM_ref(ASN1_SEQUENCE), + ASN1_ITEM_ref(ASN1_SET_ANY), + ASN1_ITEM_ref(ASN1_T61STRING), + ASN1_ITEM_ref(ASN1_TBOOLEAN), + ASN1_ITEM_ref(ASN1_TIME), + ASN1_ITEM_ref(ASN1_UNIVERSALSTRING), + ASN1_ITEM_ref(ASN1_UTCTIME), + ASN1_ITEM_ref(ASN1_UTF8STRING), + ASN1_ITEM_ref(ASN1_VISIBLESTRING), +#ifndef OPENSSL_NO_RFC3779 + ASN1_ITEM_ref(ASRange), +#endif + ASN1_ITEM_ref(AUTHORITY_INFO_ACCESS), + ASN1_ITEM_ref(AUTHORITY_KEYID), + ASN1_ITEM_ref(BASIC_CONSTRAINTS), + ASN1_ITEM_ref(BIGNUM), + ASN1_ITEM_ref(CBIGNUM), + ASN1_ITEM_ref(CERTIFICATEPOLICIES), +#ifndef OPENSSL_NO_CMS + ASN1_ITEM_ref(CMS_ContentInfo), + ASN1_ITEM_ref(CMS_ReceiptRequest), +#endif + ASN1_ITEM_ref(CRL_DIST_POINTS), +#ifndef OPENSSL_NO_DH + ASN1_ITEM_ref(DHparams), +#endif + ASN1_ITEM_ref(DIRECTORYSTRING), + ASN1_ITEM_ref(DISPLAYTEXT), + ASN1_ITEM_ref(DIST_POINT_NAME), + ASN1_ITEM_ref(DIST_POINT), +#ifndef OPENSSL_NO_EC + ASN1_ITEM_ref(ECPARAMETERS), + ASN1_ITEM_ref(ECPKPARAMETERS), +#endif + ASN1_ITEM_ref(EDIPARTYNAME), + ASN1_ITEM_ref(EXTENDED_KEY_USAGE), + ASN1_ITEM_ref(GENERAL_NAMES), + ASN1_ITEM_ref(GENERAL_NAME), + ASN1_ITEM_ref(GENERAL_SUBTREE), +#ifndef OPENSSL_NO_RFC3779 + ASN1_ITEM_ref(IPAddressChoice), + ASN1_ITEM_ref(IPAddressFamily), + ASN1_ITEM_ref(IPAddressOrRange), + ASN1_ITEM_ref(IPAddressRange), +#endif + ASN1_ITEM_ref(ISSUING_DIST_POINT), +#if OPENSSL_API_COMPAT < 0x10200000L + ASN1_ITEM_ref(LONG), +#endif + ASN1_ITEM_ref(NAME_CONSTRAINTS), + ASN1_ITEM_ref(NETSCAPE_CERT_SEQUENCE), + ASN1_ITEM_ref(NETSCAPE_SPKAC), + ASN1_ITEM_ref(NETSCAPE_SPKI), + ASN1_ITEM_ref(NOTICEREF), +#ifndef OPENSSL_NO_OCSP + ASN1_ITEM_ref(OCSP_BASICRESP), + ASN1_ITEM_ref(OCSP_CERTID), + ASN1_ITEM_ref(OCSP_CERTSTATUS), + ASN1_ITEM_ref(OCSP_CRLID), + ASN1_ITEM_ref(OCSP_ONEREQ), + ASN1_ITEM_ref(OCSP_REQINFO), + ASN1_ITEM_ref(OCSP_REQUEST), + ASN1_ITEM_ref(OCSP_RESPBYTES), + ASN1_ITEM_ref(OCSP_RESPDATA), + ASN1_ITEM_ref(OCSP_RESPID), + ASN1_ITEM_ref(OCSP_RESPONSE), + ASN1_ITEM_ref(OCSP_REVOKEDINFO), + ASN1_ITEM_ref(OCSP_SERVICELOC), + ASN1_ITEM_ref(OCSP_SIGNATURE), + ASN1_ITEM_ref(OCSP_SINGLERESP), +#endif + ASN1_ITEM_ref(OTHERNAME), + ASN1_ITEM_ref(PBE2PARAM), + ASN1_ITEM_ref(PBEPARAM), + ASN1_ITEM_ref(PBKDF2PARAM), + ASN1_ITEM_ref(PKCS12_AUTHSAFES), + ASN1_ITEM_ref(PKCS12_BAGS), + ASN1_ITEM_ref(PKCS12_MAC_DATA), + ASN1_ITEM_ref(PKCS12_SAFEBAGS), + ASN1_ITEM_ref(PKCS12_SAFEBAG), + ASN1_ITEM_ref(PKCS12), + ASN1_ITEM_ref(PKCS7_ATTR_SIGN), + ASN1_ITEM_ref(PKCS7_ATTR_VERIFY), + ASN1_ITEM_ref(PKCS7_DIGEST), + ASN1_ITEM_ref(PKCS7_ENCRYPT), + ASN1_ITEM_ref(PKCS7_ENC_CONTENT), + ASN1_ITEM_ref(PKCS7_ENVELOPE), + ASN1_ITEM_ref(PKCS7_ISSUER_AND_SERIAL), + ASN1_ITEM_ref(PKCS7_RECIP_INFO), + ASN1_ITEM_ref(PKCS7_SIGNED), + ASN1_ITEM_ref(PKCS7_SIGNER_INFO), + ASN1_ITEM_ref(PKCS7_SIGN_ENVELOPE), + ASN1_ITEM_ref(PKCS7), + ASN1_ITEM_ref(PKCS8_PRIV_KEY_INFO), + ASN1_ITEM_ref(PKEY_USAGE_PERIOD), + ASN1_ITEM_ref(POLICYINFO), + ASN1_ITEM_ref(POLICYQUALINFO), + ASN1_ITEM_ref(POLICY_CONSTRAINTS), + ASN1_ITEM_ref(POLICY_MAPPINGS), + ASN1_ITEM_ref(POLICY_MAPPING), + ASN1_ITEM_ref(PROXY_CERT_INFO_EXTENSION), + ASN1_ITEM_ref(PROXY_POLICY), +#ifndef OPENSSL_NO_RSA + ASN1_ITEM_ref(RSAPrivateKey), + ASN1_ITEM_ref(RSAPublicKey), + ASN1_ITEM_ref(RSA_OAEP_PARAMS), + ASN1_ITEM_ref(RSA_PSS_PARAMS), +#endif +#ifndef OPENSSL_NO_SCRYPT + ASN1_ITEM_ref(SCRYPT_PARAMS), +#endif + ASN1_ITEM_ref(SXNETID), + ASN1_ITEM_ref(SXNET), + ASN1_ITEM_ref(USERNOTICE), + ASN1_ITEM_ref(X509_ALGORS), + ASN1_ITEM_ref(X509_ALGOR), + ASN1_ITEM_ref(X509_ATTRIBUTE), + ASN1_ITEM_ref(X509_CERT_AUX), + ASN1_ITEM_ref(X509_CINF), + ASN1_ITEM_ref(X509_CRL_INFO), + ASN1_ITEM_ref(X509_CRL), + ASN1_ITEM_ref(X509_EXTENSIONS), + ASN1_ITEM_ref(X509_EXTENSION), + ASN1_ITEM_ref(X509_NAME_ENTRY), + ASN1_ITEM_ref(X509_NAME), + ASN1_ITEM_ref(X509_PUBKEY), + ASN1_ITEM_ref(X509_REQ_INFO), + ASN1_ITEM_ref(X509_REQ), + ASN1_ITEM_ref(X509_REVOKED), + ASN1_ITEM_ref(X509_SIG), + ASN1_ITEM_ref(X509_VAL), + ASN1_ITEM_ref(X509), +#if OPENSSL_API_COMPAT < 0x10200000L + ASN1_ITEM_ref(ZLONG), +#endif + ASN1_ITEM_ref(INT32), + ASN1_ITEM_ref(UINT32), + ASN1_ITEM_ref(ZINT32), + ASN1_ITEM_ref(ZUINT32), + ASN1_ITEM_ref(INT64), + ASN1_ITEM_ref(UINT64), + ASN1_ITEM_ref(ZINT64), + ASN1_ITEM_ref(ZUINT64), +}; diff --git a/crypto/asn1/asn1_lib.c b/crypto/asn1/asn1_lib.c index 8ca53b4c..88c4b539 100644 --- a/crypto/asn1/asn1_lib.c +++ b/crypto/asn1/asn1_lib.c @@ -23,12 +23,12 @@ static int _asn1_check_infinite_end(const unsigned char **p, long len) * If there is 0 or 1 byte left, the length check should pick things up */ if (len <= 0) - return (1); + return 1; else if ((len >= 2) && ((*p)[0] == 0) && ((*p)[1] == 0)) { (*p) += 2; - return (1); + return 1; } - return (0); + return 0; } int ASN1_check_infinite_end(unsigned char **p, long len) @@ -96,47 +96,54 @@ int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, ret |= 0x80; } *pp = p; - return (ret | inf); + return ret | inf; err: ASN1err(ASN1_F_ASN1_GET_OBJECT, ASN1_R_HEADER_TOO_LONG); - return (0x80); + return 0x80; } +/* + * Decode a length field. + * The short form is a single byte defining a length 0 - 127. + * The long form is a byte 0 - 127 with the top bit set and this indicates + * the number of following octets that contain the length. These octets + * are stored most significant digit first. + */ static int asn1_get_length(const unsigned char **pp, int *inf, long *rl, long max) { const unsigned char *p = *pp; unsigned long ret = 0; - unsigned long i; + int i; if (max-- < 1) return 0; if (*p == 0x80) { *inf = 1; - ret = 0; p++; } else { *inf = 0; i = *p & 0x7f; - if (*(p++) & 0x80) { - if (max < (long)i + 1) + if (*p++ & 0x80) { + if (max < i + 1) return 0; /* Skip leading zeroes */ - while (i && *p == 0) { + while (i > 0 && *p == 0) { p++; i--; } - if (i > sizeof(long)) + if (i > (int)sizeof(long)) return 0; - while (i-- > 0) { - ret <<= 8L; - ret |= *(p++); + while (i > 0) { + ret <<= 8; + ret |= *p++; + i--; } + if (ret > LONG_MAX) + return 0; } else ret = i; } - if (ret > LONG_MAX) - return 0; *pp = p; *rl = (long)ret; return 1; @@ -268,7 +275,7 @@ int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) if (len < 0) { if (data == NULL) - return (0); + return 0; else len = strlen(data); } @@ -278,7 +285,7 @@ int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) if (str->data == NULL) { ASN1err(ASN1_F_ASN1_STRING_SET, ERR_R_MALLOC_FAILURE); str->data = c; - return (0); + return 0; } } str->length = len; @@ -287,7 +294,7 @@ int ASN1_STRING_set(ASN1_STRING *str, const void *_data, int len) /* an allowance for strings :-) */ str->data[len] = '\0'; } - return (1); + return 1; } void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) @@ -299,7 +306,7 @@ void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len) ASN1_STRING *ASN1_STRING_new(void) { - return (ASN1_STRING_type_new(V_ASN1_OCTET_STRING)); + return ASN1_STRING_type_new(V_ASN1_OCTET_STRING); } ASN1_STRING *ASN1_STRING_type_new(int type) @@ -309,10 +316,10 @@ ASN1_STRING *ASN1_STRING_type_new(int type) ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { ASN1err(ASN1_F_ASN1_STRING_TYPE_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } ret->type = type; - return (ret); + return ret; } void asn1_string_embed_free(ASN1_STRING *a, int embed) @@ -349,11 +356,11 @@ int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b) if (i == 0) { i = memcmp(a->data, b->data, a->length); if (i == 0) - return (a->type - b->type); + return a->type - b->type; else - return (i); + return i; } else - return (i); + return i; } int ASN1_STRING_length(const ASN1_STRING *x) diff --git a/crypto/asn1/asn1_locl.h b/crypto/asn1/asn1_locl.h index 9a47b1ef..cec14172 100644 --- a/crypto/asn1/asn1_locl.h +++ b/crypto/asn1/asn1_locl.h @@ -9,6 +9,7 @@ /* Internal ASN1 structures and functions: not for application use */ +int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *d); int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d); int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d); @@ -42,9 +43,6 @@ DEFINE_STACK_OF(MIME_PARAM) typedef struct mime_header_st MIME_HEADER; DEFINE_STACK_OF(MIME_HEADER) -/* Month values for printing out times */ -extern const char *_asn1_mon[12]; - void asn1_string_embed_free(ASN1_STRING *a, int embed); int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it); @@ -81,3 +79,5 @@ ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp, /* Internal functions used by x_int64.c */ int c2i_uint64_int(uint64_t *ret, int *neg, const unsigned char **pp, long len); int i2c_uint64_int(unsigned char *p, uint64_t r, int neg); + +ASN1_TIME *asn1_time_from_tm(ASN1_TIME *s, struct tm *ts, int type); diff --git a/crypto/asn1/asn1_par.c b/crypto/asn1/asn1_par.c index fabc8d6f..4b60c615 100644 --- a/crypto/asn1/asn1_par.c +++ b/crypto/asn1/asn1_par.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -50,20 +50,20 @@ static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed, if (BIO_printf(bp, fmt, p) <= 0) goto err; - return (1); + return 1; err: - return (0); + return 0; } int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent) { - return (asn1_parse2(bp, &pp, len, 0, 0, indent, 0)); + return asn1_parse2(bp, &pp, len, 0, 0, indent, 0); } int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, int dump) { - return (asn1_parse2(bp, &pp, len, 0, 0, indent, dump)); + return asn1_parse2(bp, &pp, len, 0, 0, indent, dump); } static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, @@ -342,7 +342,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, ASN1_OBJECT_free(o); ASN1_OCTET_STRING_free(os); *pp = p; - return (ret); + return ret; } const char *ASN1_tag2str(int tag) diff --git a/crypto/asn1/asn_mime.c b/crypto/asn1/asn_mime.c index 84475e94..7f4db6a2 100644 --- a/crypto/asn1/asn_mime.c +++ b/crypto/asn1/asn_mime.c @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include @@ -635,7 +635,7 @@ static STACK_OF(MIME_HEADER) *mime_parse_hdr(BIO *bio) return NULL; while ((len = BIO_gets(bio, linebuf, MAX_SMLEN)) > 0) { /* If whitespace at line start then continuation line */ - if (mhdr && isspace((unsigned char)linebuf[0])) + if (mhdr && ossl_isspace(linebuf[0])) state = MIME_NAME; else state = MIME_START; @@ -759,7 +759,7 @@ static char *strip_start(char *name) /* Else null string */ return NULL; } - if (!isspace((unsigned char)c)) + if (!ossl_isspace(c)) return p; } return NULL; @@ -780,7 +780,7 @@ static char *strip_end(char *name) *p = 0; return name; } - if (isspace((unsigned char)c)) + if (ossl_isspace(c)) *p = 0; else return name; @@ -792,29 +792,18 @@ static MIME_HEADER *mime_hdr_new(const char *name, const char *value) { MIME_HEADER *mhdr = NULL; char *tmpname = NULL, *tmpval = NULL, *p; - int c; if (name) { if ((tmpname = OPENSSL_strdup(name)) == NULL) return NULL; - for (p = tmpname; *p; p++) { - c = (unsigned char)*p; - if (isupper(c)) { - c = tolower(c); - *p = c; - } - } + for (p = tmpname; *p; p++) + *p = ossl_tolower(*p); } if (value) { if ((tmpval = OPENSSL_strdup(value)) == NULL) goto err; - for (p = tmpval; *p; p++) { - c = (unsigned char)*p; - if (isupper(c)) { - c = tolower(c); - *p = c; - } - } + for (p = tmpval; *p; p++) + *p = ossl_tolower(*p); } mhdr = OPENSSL_malloc(sizeof(*mhdr)); if (mhdr == NULL) @@ -835,19 +824,14 @@ static MIME_HEADER *mime_hdr_new(const char *name, const char *value) static int mime_hdr_addparam(MIME_HEADER *mhdr, const char *name, const char *value) { char *tmpname = NULL, *tmpval = NULL, *p; - int c; MIME_PARAM *mparam = NULL; + if (name) { tmpname = OPENSSL_strdup(name); if (!tmpname) goto err; - for (p = tmpname; *p; p++) { - c = (unsigned char)*p; - if (isupper(c)) { - c = tolower(c); - *p = c; - } - } + for (p = tmpname; *p; p++) + *p = ossl_tolower(*p); } if (value) { tmpval = OPENSSL_strdup(value); @@ -876,7 +860,7 @@ static int mime_hdr_cmp(const MIME_HEADER *const *a, if (!(*a)->name || !(*b)->name) return ! !(*a)->name - ! !(*b)->name; - return (strcmp((*a)->name, (*b)->name)); + return strcmp((*a)->name, (*b)->name); } static int mime_param_cmp(const MIME_PARAM *const *a, @@ -884,7 +868,7 @@ static int mime_param_cmp(const MIME_PARAM *const *a, { if (!(*a)->param_name || !(*b)->param_name) return ! !(*a)->param_name - ! !(*b)->param_name; - return (strcmp((*a)->param_name, (*b)->param_name)); + return strcmp((*a)->param_name, (*b)->param_name); } /* Find a header with a given name (if possible) */ @@ -966,7 +950,7 @@ static int strip_eol(char *linebuf, int *plen, int flags) int len = *plen; char *p, c; int is_eol = 0; - p = linebuf + len - 1; + for (p = linebuf + len - 1; len > 0; len--, p--) { c = *p; if (c == '\n') diff --git a/crypto/asn1/asn_moid.c b/crypto/asn1/asn_moid.c index 8176b760..ed8517c3 100644 --- a/crypto/asn1/asn_moid.c +++ b/crypto/asn1/asn_moid.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include #include "internal/cryptlib.h" #include @@ -72,7 +72,7 @@ static int do_create(const char *value, const char *name) ostr = p + 1; if (!*ostr) return 0; - while (isspace((unsigned char)*ostr)) + while (ossl_isspace(*ostr)) ostr++; } @@ -83,10 +83,10 @@ static int do_create(const char *value, const char *name) if (p) { ln = value; - while (isspace((unsigned char)*ln)) + while (ossl_isspace(*ln)) ln++; p--; - while (isspace((unsigned char)*p)) { + while (ossl_isspace(*p)) { if (p == ln) return 0; p--; diff --git a/crypto/asn1/asn_mstbl.c b/crypto/asn1/asn_mstbl.c index 82609390..ddcbcd07 100644 --- a/crypto/asn1/asn_mstbl.c +++ b/crypto/asn1/asn_mstbl.c @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2012-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 @@ -8,7 +8,6 @@ */ #include -#include #include #include "internal/cryptlib.h" #include diff --git a/crypto/asn1/bio_asn1.c b/crypto/asn1/bio_asn1.c index 2a8a41f5..3c7c1229 100644 --- a/crypto/asn1/bio_asn1.c +++ b/crypto/asn1/bio_asn1.c @@ -14,8 +14,9 @@ */ #include -#include +#include "internal/bio.h" #include +#include "internal/cryptlib.h" /* Must be large enough for biggest tag+length */ #define DEFAULT_ASN1_BUF_SIZE 20 @@ -78,7 +79,11 @@ static int asn1_bio_setup_ex(BIO *b, BIO_ASN1_BUF_CTX *ctx, static const BIO_METHOD methods_asn1 = { BIO_TYPE_ASN1, "asn1", + /* TODO: Convert to new style write function */ + bwrite_conv, asn1_bio_write, + /* TODO: Convert to new style read function */ + bread_conv, asn1_bio_read, asn1_bio_puts, asn1_bio_gets, @@ -90,7 +95,7 @@ static const BIO_METHOD methods_asn1 = { const BIO_METHOD *BIO_f_asn1(void) { - return (&methods_asn1); + return &methods_asn1; } static int asn1_bio_new(BIO *b) @@ -157,7 +162,6 @@ static int asn1_bio_write(BIO *b, const char *in, int inl) for (;;) { switch (ctx->state) { - /* Setup prefix data, call it */ case ASN1_STATE_START: if (!asn1_bio_setup_ex(b, ctx, ctx->prefix, @@ -178,7 +182,8 @@ static int asn1_bio_write(BIO *b, const char *in, int inl) case ASN1_STATE_HEADER: ctx->buflen = ASN1_object_size(0, inl, ctx->asn1_tag) - inl; - OPENSSL_assert(ctx->buflen <= ctx->bufsize); + if (!ossl_assert(ctx->buflen <= ctx->bufsize)) + return 0; p = ctx->buf; ASN1_put_object(&p, 0, inl, ctx->asn1_tag, ctx->asn1_class); ctx->copylen = inl; @@ -223,7 +228,8 @@ static int asn1_bio_write(BIO *b, const char *in, int inl) break; - default: + case ASN1_STATE_POST_COPY: + case ASN1_STATE_DONE: BIO_clear_retry_flags(b); return 0; diff --git a/crypto/asn1/build.info b/crypto/asn1/build.info index c1afb71a..d3e92c81 100644 --- a/crypto/asn1/build.info +++ b/crypto/asn1/build.info @@ -13,4 +13,4 @@ SOURCE[../../libcrypto]=\ x_pkey.c bio_asn1.c bio_ndef.c asn_mime.c \ asn1_gen.c asn1_par.c asn1_lib.c asn1_err.c a_strnid.c \ evp_asn1.c asn_pack.c p5_pbe.c p5_pbev2.c p5_scrypt.c p8_pkey.c \ - asn_moid.c asn_mstbl.c + asn_moid.c asn_mstbl.c asn1_item_list.c diff --git a/crypto/asn1/charmap.h b/crypto/asn1/charmap.h index 2a75925c..bfccac2c 100644 --- a/crypto/asn1/charmap.h +++ b/crypto/asn1/charmap.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/asn1/charmap.pl * - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/crypto/asn1/charmap.pl b/crypto/asn1/charmap.pl index 26ca3252..fbab1f3b 100644 --- a/crypto/asn1/charmap.pl +++ b/crypto/asn1/charmap.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -82,12 +82,14 @@ $arr[ord("?")] |= $PSTRING_CHAR; # Now generate the C code +# Output year depends on the year of the script. +my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; print <type != V_ASN1_OCTET_STRING) || (a->value.octet_string == NULL)) { ASN1err(ASN1_F_ASN1_TYPE_GET_OCTETSTRING, ASN1_R_DATA_IS_WRONG); - return (-1); + return -1; } p = ASN1_STRING_get0_data(a->value.octet_string); ret = ASN1_STRING_length(a->value.octet_string); @@ -43,16 +43,16 @@ int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_l else num = max_len; memcpy(data, p, num); - return (ret); + return ret; } typedef struct { - long num; + int32_t num; ASN1_OCTET_STRING *oct; } asn1_int_oct; ASN1_SEQUENCE(asn1_int_oct) = { - ASN1_SIMPLE(asn1_int_oct, num, LONG), + ASN1_EMBED(asn1_int_oct, num, INT32), ASN1_SIMPLE(asn1_int_oct, oct, ASN1_OCTET_STRING) } static_ASN1_SEQUENCE_END(asn1_int_oct) diff --git a/crypto/asn1/f_int.c b/crypto/asn1/f_int.c index ec556c92..6d6bddc6 100644 --- a/crypto/asn1/f_int.c +++ b/crypto/asn1/f_int.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include @@ -20,7 +20,7 @@ int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a) char buf[2]; if (a == NULL) - return (0); + return 0; if (a->type & V_ASN1_NEG) { if (BIO_write(bp, "-", 1) != 1) @@ -46,9 +46,9 @@ int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a) n += 2; } } - return (n); + return n; err: - return (-1); + return -1; } int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size) @@ -76,18 +76,7 @@ int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size) again = (buf[i - 1] == '\\'); for (j = 0; j < i; j++) { -#ifndef CHARSET_EBCDIC - if (!(((buf[j] >= '0') && (buf[j] <= '9')) || - ((buf[j] >= 'a') && (buf[j] <= 'f')) || - ((buf[j] >= 'A') && (buf[j] <= 'F')))) -#else - /* - * This #ifdef is not strictly necessary, since the characters - * A...F a...f 0...9 are contiguous (yes, even in EBCDIC - but - * not the whole alphabet). Nevertheless, isxdigit() is faster. - */ - if (!isxdigit(buf[j])) -#endif + if (!ossl_isxdigit(buf[j])) { i = j; break; diff --git a/crypto/asn1/f_string.c b/crypto/asn1/f_string.c index b9258bba..f893489a 100644 --- a/crypto/asn1/f_string.c +++ b/crypto/asn1/f_string.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include @@ -20,7 +20,7 @@ int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type) char buf[2]; if (a == NULL) - return (0); + return 0; if (a->length == 0) { if (BIO_write(bp, "0", 1) != 1) @@ -40,14 +40,14 @@ int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type) n += 2; } } - return (n); + return n; err: - return (-1); + return -1; } int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size) { - int i, j, k, m, n, again, bufsize, spec_char; + int i, j, k, m, n, again, bufsize; unsigned char *s = NULL, *sp; unsigned char *bufp; int num = 0, slen = 0, first = 1; @@ -74,19 +74,7 @@ int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size) again = (buf[i - 1] == '\\'); for (j = i - 1; j > 0; j--) { -#ifndef CHARSET_EBCDIC - spec_char = (!(((buf[j] >= '0') && (buf[j] <= '9')) || - ((buf[j] >= 'a') && (buf[j] <= 'f')) || - ((buf[j] >= 'A') && (buf[j] <= 'F')))); -#else - /* - * This #ifdef is not strictly necessary, since the characters - * A...F a...f 0...9 are contiguous (yes, even in EBCDIC - but - * not the whole alphabet). Nevertheless, isxdigit() is faster. - */ - spec_char = (!isxdigit(buf[j])); -#endif - if (spec_char) { + if (!ossl_isxdigit(buf[j])) { i = j; break; } diff --git a/crypto/asn1/n_pkey.c b/crypto/asn1/n_pkey.c index 267ce601..d1fb8a14 100644 --- a/crypto/asn1/n_pkey.c +++ b/crypto/asn1/n_pkey.c @@ -23,7 +23,7 @@ NON_EMPTY_TRANSLATION_UNIT # ifndef OPENSSL_NO_RC4 typedef struct netscape_pkey_st { - long version; + int32_t version; X509_ALGOR *algor; ASN1_OCTET_STRING *private_key; } NETSCAPE_PKEY; @@ -48,7 +48,7 @@ DECLARE_ASN1_ENCODE_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY,NETSCAPE_ENCRYPTED_P IMPLEMENT_ASN1_FUNCTIONS_const(NETSCAPE_ENCRYPTED_PKEY) ASN1_SEQUENCE(NETSCAPE_PKEY) = { - ASN1_SIMPLE(NETSCAPE_PKEY, version, LONG), + ASN1_EMBED(NETSCAPE_PKEY, version, INT32), ASN1_SIMPLE(NETSCAPE_PKEY, algor, X509_ALGOR), ASN1_SIMPLE(NETSCAPE_PKEY, private_key, ASN1_OCTET_STRING) } static_ASN1_SEQUENCE_END(NETSCAPE_PKEY) diff --git a/crypto/asn1/p5_scrypt.c b/crypto/asn1/p5_scrypt.c index 4cb78374..c556d017 100644 --- a/crypto/asn1/p5_scrypt.c +++ b/crypto/asn1/p5_scrypt.c @@ -18,24 +18,15 @@ #ifndef OPENSSL_NO_SCRYPT /* PKCS#5 scrypt password based encryption structures */ -typedef struct { - ASN1_OCTET_STRING *salt; - ASN1_INTEGER *costParameter; - ASN1_INTEGER *blockSize; - ASN1_INTEGER *parallelizationParameter; - ASN1_INTEGER *keyLength; -} SCRYPT_PARAMS; - ASN1_SEQUENCE(SCRYPT_PARAMS) = { ASN1_SIMPLE(SCRYPT_PARAMS, salt, ASN1_OCTET_STRING), ASN1_SIMPLE(SCRYPT_PARAMS, costParameter, ASN1_INTEGER), ASN1_SIMPLE(SCRYPT_PARAMS, blockSize, ASN1_INTEGER), ASN1_SIMPLE(SCRYPT_PARAMS, parallelizationParameter, ASN1_INTEGER), ASN1_OPT(SCRYPT_PARAMS, keyLength, ASN1_INTEGER), -} static_ASN1_SEQUENCE_END(SCRYPT_PARAMS) +} ASN1_SEQUENCE_END(SCRYPT_PARAMS) -DECLARE_ASN1_ALLOC_FUNCTIONS(SCRYPT_PARAMS) -IMPLEMENT_ASN1_ALLOC_FUNCTIONS(SCRYPT_PARAMS) +IMPLEMENT_ASN1_FUNCTIONS(SCRYPT_PARAMS) static X509_ALGOR *pkcs5_scrypt_set(const unsigned char *salt, size_t saltlen, size_t keylen, uint64_t N, uint64_t r, diff --git a/crypto/asn1/standard_methods.h b/crypto/asn1/standard_methods.h new file mode 100644 index 00000000..d366aa09 --- /dev/null +++ b/crypto/asn1/standard_methods.h @@ -0,0 +1,56 @@ +/* + * 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 + */ + +/* + * This table MUST be kept in ascending order of the NID each method + * represents (corresponding to the pkey_id field) as OBJ_bsearch + * is used to search it. + */ +static const EVP_PKEY_ASN1_METHOD *standard_methods[] = { +#ifndef OPENSSL_NO_RSA + &rsa_asn1_meths[0], + &rsa_asn1_meths[1], +#endif +#ifndef OPENSSL_NO_DH + &dh_asn1_meth, +#endif +#ifndef OPENSSL_NO_DSA + &dsa_asn1_meths[0], + &dsa_asn1_meths[1], + &dsa_asn1_meths[2], + &dsa_asn1_meths[3], + &dsa_asn1_meths[4], +#endif +#ifndef OPENSSL_NO_EC + &eckey_asn1_meth, +#endif + &hmac_asn1_meth, +#ifndef OPENSSL_NO_CMAC + &cmac_asn1_meth, +#endif +#ifndef OPENSSL_NO_RSA + &rsa_pss_asn1_meth, +#endif +#ifndef OPENSSL_NO_DH + &dhx_asn1_meth, +#endif +#ifndef OPENSSL_NO_EC + &ecx25519_asn1_meth, +#endif +#ifndef OPENSSL_NO_POLY1305 + &poly1305_asn1_meth, +#endif +#ifndef OPENSSL_NO_SIPHASH + &siphash_asn1_meth, +#endif +#ifndef OPENSSL_NO_EC + &ed25519_asn1_meth, +#endif +}; + diff --git a/crypto/asn1/tasn_dec.c b/crypto/asn1/tasn_dec.c index af8641e3..8667bec7 100644 --- a/crypto/asn1/tasn_dec.c +++ b/crypto/asn1/tasn_dec.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,18 +17,9 @@ #include "internal/numbers.h" #include "asn1_locl.h" -/* - * Constructed types with a recursive definition (such as can be found in PKCS7) - * could eventually exceed the stack given malicious input with excessive - * recursion. Therefore we limit the stack depth. This is the maximum number of - * recursive invocations of asn1_item_embed_d2i(). - */ -#define ASN1_MAX_CONSTRUCTED_NEST 30 - static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, - int tag, int aclass, char opt, ASN1_TLC *ctx, - int depth); + int tag, int aclass, char opt, ASN1_TLC *ctx); static int asn1_check_eoc(const unsigned char **in, long len); static int asn1_find_end(const unsigned char **in, long len, char inf); @@ -46,11 +37,11 @@ static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass, static int asn1_template_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx, int depth); + ASN1_TLC *ctx); static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx, int depth); + ASN1_TLC *ctx); static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, @@ -120,7 +111,7 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, int tag, int aclass, char opt, ASN1_TLC *ctx) { int rv; - rv = asn1_item_embed_d2i(pval, in, len, it, tag, aclass, opt, ctx, 0); + rv = asn1_item_embed_d2i(pval, in, len, it, tag, aclass, opt, ctx); if (rv <= 0) ASN1_item_ex_free(pval, it); return rv; @@ -133,8 +124,7 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it, - int tag, int aclass, char opt, ASN1_TLC *ctx, - int depth) + int tag, int aclass, char opt, ASN1_TLC *ctx) { const ASN1_TEMPLATE *tt, *errtt = NULL; const ASN1_EXTERN_FUNCS *ef; @@ -155,11 +145,6 @@ static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, else asn1_cb = 0; - if (++depth > ASN1_MAX_CONSTRUCTED_NEST) { - ASN1err(ASN1_F_ASN1_ITEM_EMBED_D2I, ASN1_R_NESTED_TOO_DEEP); - goto err; - } - switch (it->itype) { case ASN1_ITYPE_PRIMITIVE: if (it->templates) { @@ -175,7 +160,7 @@ static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, goto err; } return asn1_template_ex_d2i(pval, in, len, - it->templates, opt, ctx, depth); + it->templates, opt, ctx); } return asn1_d2i_ex_primitive(pval, in, len, it, tag, aclass, opt, ctx); @@ -236,7 +221,7 @@ static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, /* * We mark field as OPTIONAL so its absence can be recognised. */ - ret = asn1_template_ex_d2i(pchptr, &p, len, tt, 1, ctx, depth); + ret = asn1_template_ex_d2i(pchptr, &p, len, tt, 1, ctx); /* If field not present, try the next one */ if (ret == -1) continue; @@ -359,8 +344,7 @@ static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, * attempt to read in field, allowing each to be OPTIONAL */ - ret = asn1_template_ex_d2i(pseqval, &p, len, seqtt, isopt, ctx, - depth); + ret = asn1_template_ex_d2i(pseqval, &p, len, seqtt, isopt, ctx); if (!ret) { errtt = seqtt; goto err; @@ -436,7 +420,7 @@ static int asn1_item_embed_d2i(ASN1_VALUE **pval, const unsigned char **in, static int asn1_template_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long inlen, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx, int depth) + ASN1_TLC *ctx) { int flags, aclass; int ret; @@ -471,7 +455,7 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, return 0; } /* We've found the field so it can't be OPTIONAL now */ - ret = asn1_template_noexp_d2i(val, &p, len, tt, 0, ctx, depth); + ret = asn1_template_noexp_d2i(val, &p, len, tt, 0, ctx); if (!ret) { ASN1err(ASN1_F_ASN1_TEMPLATE_EX_D2I, ERR_R_NESTED_ASN1_ERROR); return 0; @@ -495,7 +479,7 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, } } } else - return asn1_template_noexp_d2i(val, in, inlen, tt, opt, ctx, depth); + return asn1_template_noexp_d2i(val, in, inlen, tt, opt, ctx); *in = p; return 1; @@ -507,7 +491,7 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, - ASN1_TLC *ctx, int depth) + ASN1_TLC *ctx) { int flags, aclass; int ret; @@ -554,7 +538,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, } else if (ret == -1) return -1; if (!*val) - *val = (ASN1_VALUE *)OPENSSL_sk_new_null(); + *val = (ASN1_VALUE *)sk_ASN1_VALUE_new_null(); else { /* * We've got a valid STACK: free up any items present @@ -589,8 +573,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, } skfield = NULL; if (!asn1_item_embed_d2i(&skfield, &p, len, - ASN1_ITEM_ptr(tt->item), -1, 0, 0, ctx, - depth)) { + ASN1_ITEM_ptr(tt->item), -1, 0, 0, ctx)) { ASN1err(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, ERR_R_NESTED_ASN1_ERROR); /* |skfield| may be partially allocated despite failure. */ @@ -612,7 +595,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, /* IMPLICIT tagging */ ret = asn1_item_embed_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), tt->tag, aclass, opt, - ctx, depth); + ctx); if (!ret) { ASN1err(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, ERR_R_NESTED_ASN1_ERROR); goto err; @@ -621,7 +604,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, } else { /* Nothing special */ ret = asn1_item_embed_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), - -1, 0, opt, ctx, depth); + -1, 0, opt, ctx); if (!ret) { ASN1err(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, ERR_R_NESTED_ASN1_ERROR); goto err; diff --git a/crypto/asn1/tasn_prn.c b/crypto/asn1/tasn_prn.c index 53a9ee8e..1fb66f10 100644 --- a/crypto/asn1/tasn_prn.c +++ b/crypto/asn1/tasn_prn.c @@ -315,7 +315,8 @@ static int asn1_template_print_ctx(BIO *out, ASN1_VALUE **fld, int indent, pctx)) return 0; } - if (!i && BIO_printf(out, "%*s\n", indent + 2, "") <= 0) + if (i == 0 && BIO_printf(out, "%*s<%s>\n", indent + 2, "", + stack == NULL ? "ABSENT" : "EMPTY") <= 0) return 0; if (pctx->flags & ASN1_PCTX_FLAGS_SHOW_SEQUENCE) { if (BIO_printf(out, "%*s}\n", indent, "") <= 0) diff --git a/crypto/asn1/tasn_utl.c b/crypto/asn1/tasn_utl.c index f79d7d6b..cf434aa2 100644 --- a/crypto/asn1/tasn_utl.c +++ b/crypto/asn1/tasn_utl.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,8 @@ #include #include -#include +#include "internal/cryptlib.h" +#include "internal/refcount.h" #include #include #include diff --git a/crypto/asn1/tbl_standard.h b/crypto/asn1/tbl_standard.h new file mode 100644 index 00000000..777a7344 --- /dev/null +++ b/crypto/asn1/tbl_standard.h @@ -0,0 +1,61 @@ +/* + * 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 + */ + +/* size limits: this stuff is taken straight from RFC3280 */ + +#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 +#define ub_serial_number 64 + +/* From RFC4524 */ + +#define ub_rfc822_mailbox 256 + +/* This table must be kept in NID order */ + +static const ASN1_STRING_TABLE tbl_standard[] = { + {NID_commonName, 1, ub_common_name, DIRSTRING_TYPE, 0}, + {NID_countryName, 2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, + {NID_localityName, 1, ub_locality_name, DIRSTRING_TYPE, 0}, + {NID_stateOrProvinceName, 1, ub_state_name, DIRSTRING_TYPE, 0}, + {NID_organizationName, 1, ub_organization_name, DIRSTRING_TYPE, 0}, + {NID_organizationalUnitName, 1, ub_organization_unit_name, DIRSTRING_TYPE, + 0}, + {NID_pkcs9_emailAddress, 1, ub_email_address, B_ASN1_IA5STRING, + STABLE_NO_MASK}, + {NID_pkcs9_unstructuredName, 1, -1, PKCS9STRING_TYPE, 0}, + {NID_pkcs9_challengePassword, 1, -1, PKCS9STRING_TYPE, 0}, + {NID_pkcs9_unstructuredAddress, 1, -1, DIRSTRING_TYPE, 0}, + {NID_givenName, 1, ub_name, DIRSTRING_TYPE, 0}, + {NID_surname, 1, ub_name, DIRSTRING_TYPE, 0}, + {NID_initials, 1, ub_name, DIRSTRING_TYPE, 0}, + {NID_serialNumber, 1, ub_serial_number, B_ASN1_PRINTABLESTRING, + STABLE_NO_MASK}, + {NID_friendlyName, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}, + {NID_name, 1, ub_name, DIRSTRING_TYPE, 0}, + {NID_dnQualifier, -1, -1, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, + {NID_domainComponent, 1, -1, B_ASN1_IA5STRING, STABLE_NO_MASK}, + {NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}, + {NID_rfc822Mailbox, 1, ub_rfc822_mailbox, B_ASN1_IA5STRING, + STABLE_NO_MASK}, + {NID_jurisdictionCountryName, 2, 2, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, + {NID_INN, 1, 12, B_ASN1_NUMERICSTRING, STABLE_NO_MASK}, + {NID_OGRN, 1, 13, B_ASN1_NUMERICSTRING, STABLE_NO_MASK}, + {NID_SNILS, 1, 11, B_ASN1_NUMERICSTRING, STABLE_NO_MASK}, + {NID_countryCode3c, 3, 3, B_ASN1_PRINTABLESTRING, STABLE_NO_MASK}, + {NID_countryCode3n, 3, 3, B_ASN1_NUMERICSTRING, STABLE_NO_MASK}, + {NID_dnsName, 0, -1, B_ASN1_UTF8STRING, STABLE_NO_MASK} +}; + diff --git a/crypto/asn1/x_algor.c b/crypto/asn1/x_algor.c index 72378db9..853d45b8 100644 --- a/crypto/asn1/x_algor.c +++ b/crypto/asn1/x_algor.c @@ -28,18 +28,19 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509_ALGOR) int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) { - if (!alg) + if (alg == NULL) return 0; + if (ptype != V_ASN1_UNDEF) { if (alg->parameter == NULL) alg->parameter = ASN1_TYPE_new(); if (alg->parameter == NULL) return 0; } - if (alg) { - ASN1_OBJECT_free(alg->algorithm); - alg->algorithm = aobj; - } + + ASN1_OBJECT_free(alg->algorithm); + alg->algorithm = aobj; + if (ptype == 0) return 1; if (ptype == V_ASN1_UNDEF) { diff --git a/crypto/asn1/x_int64.c b/crypto/asn1/x_int64.c index 4433167a..714e2f70 100644 --- a/crypto/asn1/x_int64.c +++ b/crypto/asn1/x_int64.c @@ -9,8 +9,8 @@ #include #include "internal/cryptlib.h" -#include "internal/asn1t.h" #include "internal/numbers.h" +#include #include #include "asn1_locl.h" @@ -102,8 +102,8 @@ static int uint64_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx) { if ((it->size & INTxx_FLAG_SIGNED) == INTxx_FLAG_SIGNED) - return BIO_printf(out, "%"BIO_PRI64"d\n", **(int64_t **)pval); - return BIO_printf(out, "%"BIO_PRI64"u\n", **(uint64_t **)pval); + return BIO_printf(out, "%jd\n", **(int64_t **)pval); + return BIO_printf(out, "%ju\n", **(uint64_t **)pval); } /* 32-bit variants */ diff --git a/crypto/asn1/x_long.c b/crypto/asn1/x_long.c index 5895345f..bf9371ef 100644 --- a/crypto/asn1/x_long.c +++ b/crypto/asn1/x_long.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,12 @@ #include "internal/cryptlib.h" #include +#if !(OPENSSL_API_COMPAT < 0x10200000L) +NON_EMPTY_TRANSLATION_UNIT +#else + +#define COPY_SIZE(a, b) (sizeof(a) < sizeof(b) ? sizeof(a) : sizeof(b)) + /* * Custom primitive type for long handling. This converts between an * ASN1_INTEGER and a long directly. @@ -46,13 +52,13 @@ ASN1_ITEM_end(ZLONG) static int long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) { - *(long *)pval = it->size; + memcpy(pval, &it->size, COPY_SIZE(*pval, it->size)); return 1; } static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) { - *(long *)pval = it->size; + memcpy(pval, &it->size, COPY_SIZE(*pval, it->size)); } /* @@ -86,12 +92,8 @@ static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, long ltmp; unsigned long utmp, sign; int clen, pad, i; - /* this exists to bypass broken gcc optimization */ - char *cp = (char *)pval; - - /* use memcpy, because we may not be long aligned */ - memcpy(<mp, cp, sizeof(long)); + memcpy(<mp, pval, COPY_SIZE(*pval, ltmp)); if (ltmp == it->size) return -1; /* @@ -133,7 +135,6 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int i; long ltmp; unsigned long utmp = 0, sign = 0x100; - char *cp = (char *)pval; if (len > 1) { /* @@ -185,12 +186,16 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); return 0; } - memcpy(cp, <mp, sizeof(long)); + memcpy(pval, <mp, COPY_SIZE(*pval, ltmp)); return 1; } static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, const ASN1_PCTX *pctx) { - return BIO_printf(out, "%ld\n", *(long *)pval); + long l; + + memcpy(&l, pval, COPY_SIZE(*pval, l)); + return BIO_printf(out, "%ld\n", l); } +#endif diff --git a/crypto/asn1/x_spki.c b/crypto/asn1/x_spki.c index c45400b4..0d72a3f3 100644 --- a/crypto/asn1/x_spki.c +++ b/crypto/asn1/x_spki.c @@ -7,11 +7,6 @@ * https://www.openssl.org/source/license.html */ - /* - * This module was send to me my Pat Richards who wrote it. - * It is under my Copyright with his permission - */ - #include #include "internal/cryptlib.h" #include diff --git a/crypto/async/arch/async_posix.h b/crypto/async/arch/async_posix.h index 76937a9e..b07c2cb0 100644 --- a/crypto/async/arch/async_posix.h +++ b/crypto/async/arch/async_posix.h @@ -26,7 +26,6 @@ # include # include -# include "e_os.h" typedef struct async_fibre_st { ucontext_t fibre; diff --git a/crypto/async/async.c b/crypto/async/async.c index 9a4e6b26..28747907 100644 --- a/crypto/async/async.c +++ b/crypto/async/async.c @@ -19,7 +19,7 @@ #include "async_locl.h" #include -#include +#include "internal/cryptlib_int.h" #include #define ASYNC_JOB_RUNNING 0 @@ -36,7 +36,7 @@ static async_ctx *async_ctx_new(void) { async_ctx *nctx = NULL; - nctx = OPENSSL_malloc(sizeof(async_ctx)); + nctx = OPENSSL_malloc(sizeof(*nctx)); if (nctx == NULL) { ASYNCerr(ASYNC_F_ASYNC_CTX_NEW, ERR_R_MALLOC_FAILURE); goto err; @@ -81,7 +81,7 @@ static ASYNC_JOB *async_job_new(void) { ASYNC_JOB *job = NULL; - job = OPENSSL_zalloc(sizeof(ASYNC_JOB)); + job = OPENSSL_zalloc(sizeof(*job)); if (job == NULL) { ASYNCerr(ASYNC_F_ASYNC_JOB_NEW, ERR_R_MALLOC_FAILURE); return NULL; @@ -336,7 +336,7 @@ int ASYNC_init_thread(size_t max_size, size_t init_size) return 0; } - pool->jobs = sk_ASYNC_JOB_new_null(); + pool->jobs = sk_ASYNC_JOB_new_reserve(NULL, init_size); if (pool->jobs == NULL) { ASYNCerr(ASYNC_F_ASYNC_INIT_THREAD, ERR_R_MALLOC_FAILURE); OPENSSL_free(pool); @@ -358,7 +358,7 @@ int ASYNC_init_thread(size_t max_size, size_t init_size) break; } job->funcargs = NULL; - sk_ASYNC_JOB_push(pool->jobs, job); + sk_ASYNC_JOB_push(pool->jobs, job); /* Cannot fail due to reserve */ curr_size++; } pool->curr_size = curr_size; diff --git a/crypto/async/async_err.c b/crypto/async/async_err.c index ae97e965..d2d1011c 100644 --- a/crypto/async/async_err.c +++ b/crypto/async/async_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,31 +8,30 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_ASYNC,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_ASYNC,0,reason) - -static ERR_STRING_DATA ASYNC_str_functs[] = { - {ERR_FUNC(ASYNC_F_ASYNC_CTX_NEW), "async_ctx_new"}, - {ERR_FUNC(ASYNC_F_ASYNC_INIT_THREAD), "ASYNC_init_thread"}, - {ERR_FUNC(ASYNC_F_ASYNC_JOB_NEW), "async_job_new"}, - {ERR_FUNC(ASYNC_F_ASYNC_PAUSE_JOB), "ASYNC_pause_job"}, - {ERR_FUNC(ASYNC_F_ASYNC_START_FUNC), "async_start_func"}, - {ERR_FUNC(ASYNC_F_ASYNC_START_JOB), "ASYNC_start_job"}, +static const ERR_STRING_DATA ASYNC_str_functs[] = { + {ERR_PACK(ERR_LIB_ASYNC, ASYNC_F_ASYNC_CTX_NEW, 0), "async_ctx_new"}, + {ERR_PACK(ERR_LIB_ASYNC, ASYNC_F_ASYNC_INIT_THREAD, 0), + "ASYNC_init_thread"}, + {ERR_PACK(ERR_LIB_ASYNC, ASYNC_F_ASYNC_JOB_NEW, 0), "async_job_new"}, + {ERR_PACK(ERR_LIB_ASYNC, ASYNC_F_ASYNC_PAUSE_JOB, 0), "ASYNC_pause_job"}, + {ERR_PACK(ERR_LIB_ASYNC, ASYNC_F_ASYNC_START_FUNC, 0), "async_start_func"}, + {ERR_PACK(ERR_LIB_ASYNC, ASYNC_F_ASYNC_START_JOB, 0), "ASYNC_start_job"}, {0, NULL} }; -static ERR_STRING_DATA ASYNC_str_reasons[] = { - {ERR_REASON(ASYNC_R_FAILED_TO_SET_POOL), "failed to set pool"}, - {ERR_REASON(ASYNC_R_FAILED_TO_SWAP_CONTEXT), "failed to swap context"}, - {ERR_REASON(ASYNC_R_INIT_FAILED), "init failed"}, - {ERR_REASON(ASYNC_R_INVALID_POOL_SIZE), "invalid pool size"}, +static const ERR_STRING_DATA ASYNC_str_reasons[] = { + {ERR_PACK(ERR_LIB_ASYNC, 0, ASYNC_R_FAILED_TO_SET_POOL), + "failed to set pool"}, + {ERR_PACK(ERR_LIB_ASYNC, 0, ASYNC_R_FAILED_TO_SWAP_CONTEXT), + "failed to swap context"}, + {ERR_PACK(ERR_LIB_ASYNC, 0, ASYNC_R_INIT_FAILED), "init failed"}, + {ERR_PACK(ERR_LIB_ASYNC, 0, ASYNC_R_INVALID_POOL_SIZE), + "invalid pool size"}, {0, NULL} }; @@ -41,10 +40,9 @@ static ERR_STRING_DATA ASYNC_str_reasons[] = { int ERR_load_ASYNC_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(ASYNC_str_functs[0].error) == NULL) { - ERR_load_strings(0, ASYNC_str_functs); - ERR_load_strings(0, ASYNC_str_reasons); + ERR_load_strings_const(ASYNC_str_functs); + ERR_load_strings_const(ASYNC_str_reasons); } #endif return 1; diff --git a/crypto/async/async_locl.h b/crypto/async/async_locl.h index f0ac05a3..d7790293 100644 --- a/crypto/async/async_locl.h +++ b/crypto/async/async_locl.h @@ -20,7 +20,7 @@ # include #endif -#include +#include "internal/async.h" #include typedef struct async_ctx_st async_ctx; diff --git a/crypto/async/async_wait.c b/crypto/async/async_wait.c index 0a0bf873..d6d46952 100644 --- a/crypto/async/async_wait.c +++ b/crypto/async/async_wait.c @@ -145,6 +145,7 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key) while (curr != NULL) { if (curr->del == 1) { /* This one has been marked deleted already so do nothing */ + prev = curr; curr = curr->next; continue; } diff --git a/crypto/bf/asm/bf-586.pl b/crypto/bf/asm/bf-586.pl index ebc24f48..4e913aec 100644 --- a/crypto/bf/asm/bf-586.pl +++ b/crypto/bf/asm/bf-586.pl @@ -15,7 +15,7 @@ require "cbc.pl"; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"bf-586.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $BF_ROUNDS=16; $BF_OFF=($BF_ROUNDS+2)*4; diff --git a/crypto/bf/bf_cbc.c b/crypto/bf/bf_cbc.c deleted file mode 100644 index 6ed62578..00000000 --- a/crypto/bf/bf_cbc.c +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 - */ - -#include -#include "bf_locl.h" - -void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, - const BF_KEY *schedule, unsigned char *ivec, int encrypt) -{ - register BF_LONG tin0, tin1; - register BF_LONG tout0, tout1, xor0, xor1; - register long l = length; - BF_LONG tin[2]; - - if (encrypt) { - n2l(ivec, tout0); - n2l(ivec, tout1); - ivec -= 8; - for (l -= 8; l >= 0; l -= 8) { - n2l(in, tin0); - n2l(in, tin1); - tin0 ^= tout0; - tin1 ^= tout1; - tin[0] = tin0; - tin[1] = tin1; - BF_encrypt(tin, schedule); - tout0 = tin[0]; - tout1 = tin[1]; - l2n(tout0, out); - l2n(tout1, out); - } - if (l != -8) { - n2ln(in, tin0, tin1, l + 8); - tin0 ^= tout0; - tin1 ^= tout1; - tin[0] = tin0; - tin[1] = tin1; - BF_encrypt(tin, schedule); - tout0 = tin[0]; - tout1 = tin[1]; - l2n(tout0, out); - l2n(tout1, out); - } - l2n(tout0, ivec); - l2n(tout1, ivec); - } else { - n2l(ivec, xor0); - n2l(ivec, xor1); - ivec -= 8; - for (l -= 8; l >= 0; l -= 8) { - n2l(in, tin0); - n2l(in, tin1); - tin[0] = tin0; - tin[1] = tin1; - BF_decrypt(tin, schedule); - tout0 = tin[0] ^ xor0; - tout1 = tin[1] ^ xor1; - l2n(tout0, out); - l2n(tout1, out); - xor0 = tin0; - xor1 = tin1; - } - if (l != -8) { - n2l(in, tin0); - n2l(in, tin1); - tin[0] = tin0; - tin[1] = tin1; - BF_decrypt(tin, schedule); - tout0 = tin[0] ^ xor0; - tout1 = tin[1] ^ xor1; - l2nn(tout0, tout1, out, l + 8); - xor0 = tin0; - xor1 = tin1; - } - l2n(xor0, ivec); - l2n(xor1, ivec); - } - tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0; - tin[0] = tin[1] = 0; -} diff --git a/crypto/bf/bf_ecb.c b/crypto/bf/bf_ecb.c index aa73540f..dc1becdb 100644 --- a/crypto/bf/bf_ecb.c +++ b/crypto/bf/bf_ecb.c @@ -19,7 +19,7 @@ const char *BF_options(void) { - return ("blowfish(ptr)"); + return "blowfish(ptr)"; } void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, diff --git a/crypto/bf/bf_enc.c b/crypto/bf/bf_enc.c index 9f80c56d..67c0d78a 100644 --- a/crypto/bf/bf_enc.c +++ b/crypto/bf/bf_enc.c @@ -60,8 +60,6 @@ void BF_encrypt(BF_LONG *data, const BF_KEY *key) data[0] = r & 0xffffffffU; } -#ifndef BF_DEFAULT_OPTIONS - void BF_decrypt(BF_LONG *data, const BF_KEY *key) { register BF_LONG l, r; @@ -175,5 +173,3 @@ void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0; tin[0] = tin[1] = 0; } - -#endif diff --git a/crypto/bf/build.info b/crypto/bf/build.info index 37a004ea..29adc8ce 100644 --- a/crypto/bf/build.info +++ b/crypto/bf/build.info @@ -2,5 +2,6 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=bf_skey.c bf_ecb.c bf_cfb64.c bf_ofb64.c \ {- $target{bf_asm_src} -} -GENERATE[bf-586.s]=asm/bf-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[bf-586.s]=asm/bf-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[bf-586.s]=../perlasm/x86asm.pl ../perlasm/cbc.pl diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index aea843a7..ca9a7102 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,6 +7,7 @@ * https://www.openssl.org/source/license.html */ +#include #include #include "bio_lcl.h" @@ -15,8 +16,7 @@ #ifndef OPENSSL_NO_SOCK #include #include -#include -#include +#include "internal/thread_once.h" CRYPTO_RWLOCK *bio_lookup_lock; static CRYPTO_ONCE bio_lookup_init = CRYPTO_ONCE_STATIC_INIT; @@ -565,8 +565,6 @@ static int addrinfo_wrap(int family, int socktype, unsigned short port, BIO_ADDRINFO **bai) { - OPENSSL_assert(bai != NULL); - *bai = OPENSSL_zalloc(sizeof(**bai)); if (*bai == NULL) return 0; @@ -609,8 +607,15 @@ DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) return bio_lookup_lock != NULL; } +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res) +{ + return BIO_lookup_ex(host, service, lookup_type, family, socktype, 0, res); +} + /*- - * BIO_lookup - look up the node and service you want to connect to. + * BIO_lookup_ex - look up the node and service you want to connect to. * @node: the node you want to connect to. * @service: the service you want to connect to. * @lookup_type: declare intent with the result, client or server. @@ -618,6 +623,10 @@ DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) * AF_INET, AF_INET6 or AF_UNIX. * @socktype: The socket type you want to use. Can be SOCK_STREAM, SOCK_DGRAM * or 0 for all. + * @protocol: The protocol to use, e.g. IPPROTO_TCP or IPPROTO_UDP or 0 for all. + * Note that some platforms may not return IPPROTO_SCTP without + * explicitly requesting it (i.e. IPPROTO_SCTP may not be returned + * with 0 for the protocol) * @res: Storage place for the resulting list of returned addresses * * This will do a lookup of the node and service that you want to connect to. @@ -627,9 +636,8 @@ DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init) * * The return value is 1 on success or 0 in case of error. */ -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 ret = 0; /* Assume failure */ @@ -646,7 +654,7 @@ int BIO_lookup(const char *host, const char *service, #endif break; default: - BIOerr(BIO_F_BIO_LOOKUP, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY); + BIOerr(BIO_F_BIO_LOOKUP_EX, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY); return 0; } @@ -655,7 +663,7 @@ int BIO_lookup(const char *host, const char *service, if (addrinfo_wrap(family, socktype, host, strlen(host), 0, res)) return 1; else - BIOerr(BIO_F_BIO_LOOKUP, ERR_R_MALLOC_FAILURE); + BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_MALLOC_FAILURE); return 0; } #endif @@ -672,6 +680,7 @@ int BIO_lookup(const char *host, const char *service, hints.ai_family = family; hints.ai_socktype = socktype; + hints.ai_protocol = protocol; if (lookup_type == BIO_LOOKUP_SERVER) hints.ai_flags |= AI_PASSIVE; @@ -683,14 +692,14 @@ int BIO_lookup(const char *host, const char *service, # ifdef EAI_SYSTEM case EAI_SYSTEM: SYSerr(SYS_F_GETADDRINFO, get_last_socket_error()); - BIOerr(BIO_F_BIO_LOOKUP, ERR_R_SYS_LIB); + BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB); break; # endif case 0: ret = 1; /* Success */ break; default: - BIOerr(BIO_F_BIO_LOOKUP, ERR_R_SYS_LIB); + BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB); ERR_add_error_data(1, gai_strerror(gai_ret)); break; } @@ -732,7 +741,7 @@ int BIO_lookup(const char *host, const char *service, #endif if (!RUN_ONCE(&bio_lookup_init, do_bio_lookup_init)) { - BIOerr(BIO_F_BIO_LOOKUP, ERR_R_MALLOC_FAILURE); + BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_MALLOC_FAILURE); ret = 0; goto err; } @@ -749,8 +758,11 @@ int BIO_lookup(const char *host, const char *service, he_fallback_address = INADDR_ANY; break; default: - OPENSSL_assert(("We forgot to handle a lookup type!" == 0)); - break; + /* We forgot to handle a lookup type! */ + assert("We forgot to handle a lookup type!" == NULL); + BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_INTERNAL_ERROR); + ret = 0; + goto err; } } else { he = gethostbyname(host); @@ -809,7 +821,7 @@ int BIO_lookup(const char *host, const char *service, if (endp != service && *endp == '\0' && portnum > 0 && portnum < 65536) { - se_fallback.s_port = htons(portnum); + se_fallback.s_port = htons((unsigned short)portnum); se_fallback.s_proto = proto; se = &se_fallback; } else if (endp == service) { @@ -824,7 +836,7 @@ int BIO_lookup(const char *host, const char *service, goto err; } } else { - BIOerr(BIO_F_BIO_LOOKUP, BIO_R_MALFORMED_HOST_OR_SERVICE); + BIOerr(BIO_F_BIO_LOOKUP_EX, BIO_R_MALFORMED_HOST_OR_SERVICE); goto err; } } @@ -866,7 +878,7 @@ int BIO_lookup(const char *host, const char *service, addrinfo_malloc_err: BIO_ADDRINFO_free(*res); *res = NULL; - BIOerr(BIO_F_BIO_LOOKUP, ERR_R_MALLOC_FAILURE); + BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_MALLOC_FAILURE); ret = 0; goto err; } diff --git a/crypto/bio/b_dump.c b/crypto/bio/b_dump.c index 424195e1..0d06414e 100644 --- a/crypto/bio/b_dump.c +++ b/crypto/bio/b_dump.c @@ -15,7 +15,9 @@ #include "bio_lcl.h" #define DUMP_WIDTH 16 -#define DUMP_WIDTH_LESS_INDENT(i) (DUMP_WIDTH-((i-(i>6?6:i)+3)/4)) +#define DUMP_WIDTH_LESS_INDENT(i) (DUMP_WIDTH - ((i - (i > 6 ? 6 : i) + 3) / 4)) + +#define SPACE(buf, pos, n) (sizeof(buf) - (pos) > (n)) int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), void *u, const char *s, int len) @@ -27,60 +29,63 @@ 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 ret = 0; - char buf[288 + 1], tmp[20], str[128 + 1]; - int i, j, rows; + char buf[288 + 1]; + int i, j, rows, n; unsigned char ch; int dump_width; if (indent < 0) indent = 0; - if (indent) { - if (indent > 128) - indent = 128; - memset(str, ' ', indent); - } - str[indent] = '\0'; + else if (indent > 128) + indent = 128; dump_width = DUMP_WIDTH_LESS_INDENT(indent); - rows = (len / dump_width); + rows = len / dump_width; if ((rows * dump_width) < len) rows++; for (i = 0; i < rows; i++) { - OPENSSL_strlcpy(buf, str, sizeof(buf)); - BIO_snprintf(tmp, sizeof(tmp), "%04x - ", i * dump_width); - OPENSSL_strlcat(buf, tmp, sizeof(buf)); + n = BIO_snprintf(buf, sizeof(buf), "%*s%04x - ", indent, "", + i * dump_width); for (j = 0; j < dump_width; j++) { - if (((i * dump_width) + j) >= len) { - OPENSSL_strlcat(buf, " ", sizeof(buf)); - } else { - ch = ((unsigned char)*(s + i * dump_width + j)) & 0xff; - BIO_snprintf(tmp, sizeof(tmp), "%02x%c", ch, - j == 7 ? '-' : ' '); - OPENSSL_strlcat(buf, tmp, sizeof(buf)); + if (SPACE(buf, n, 3)) { + if (((i * dump_width) + j) >= len) { + strcpy(buf + n, " "); + } else { + ch = ((unsigned char)*(s + i * dump_width + j)) & 0xff; + BIO_snprintf(buf + n, 4, "%02x%c", ch, + j == 7 ? '-' : ' '); + } + n += 3; } } - OPENSSL_strlcat(buf, " ", sizeof(buf)); + if (SPACE(buf, n, 2)) { + strcpy(buf + n, " "); + n += 2; + } for (j = 0; j < dump_width; j++) { if (((i * dump_width) + j) >= len) break; - ch = ((unsigned char)*(s + i * dump_width + j)) & 0xff; + if (SPACE(buf, n, 1)) { + ch = ((unsigned char)*(s + i * dump_width + j)) & 0xff; #ifndef CHARSET_EBCDIC - BIO_snprintf(tmp, sizeof(tmp), "%c", - ((ch >= ' ') && (ch <= '~')) ? ch : '.'); + buf[n++] = ((ch >= ' ') && (ch <= '~')) ? ch : '.'; #else - BIO_snprintf(tmp, sizeof(tmp), "%c", - ((ch >= os_toascii[' ']) && (ch <= os_toascii['~'])) - ? os_toebcdic[ch] - : '.'); + buf[n++] = ((ch >= os_toascii[' ']) && (ch <= os_toascii['~'])) + ? os_toebcdic[ch] + : '.'; #endif - OPENSSL_strlcat(buf, tmp, sizeof(buf)); + buf[n] = '\0'; + } + } + if (SPACE(buf, n, 1)) { + buf[n++] = '\n'; + buf[n] = '\0'; } - OPENSSL_strlcat(buf, "\n", sizeof(buf)); /* * if this is the last call then update the ddt_dump thing so that we * will move the selection point in the debug window */ - ret += cb((void *)buf, strlen(buf), u); + ret += cb((void *)buf, n, u); } return ret; } diff --git a/crypto/bio/b_print.c b/crypto/bio/b_print.c index cdfe05f9..1ef85479 100644 --- a/crypto/bio/b_print.c +++ b/crypto/bio/b_print.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,9 +9,9 @@ #include #include -#include -#include "internal/numbers.h" #include "internal/cryptlib.h" +#include "internal/ctype.h" +#include "internal/numbers.h" #include /* @@ -69,6 +69,7 @@ static int _dopr(char **sbuffer, char **buffer, #define DP_C_LONG 2 #define DP_C_LDOUBLE 3 #define DP_C_LLONG 4 +#define DP_C_SIZE 5 /* Floating point formats */ #define F_FORMAT 0 @@ -110,7 +111,7 @@ _dopr(char **sbuffer, if (ch == '%') state = DP_S_FLAGS; else - if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch)) + if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch)) return 0; ch = *format++; break; @@ -142,7 +143,7 @@ _dopr(char **sbuffer, } break; case DP_S_MIN: - if (isdigit((unsigned char)ch)) { + if (ossl_isdigit(ch)) { min = 10 * min + char_to_int(ch); ch = *format++; } else if (ch == '*') { @@ -160,7 +161,7 @@ _dopr(char **sbuffer, state = DP_S_MOD; break; case DP_S_MAX: - if (isdigit((unsigned char)ch)) { + if (ossl_isdigit(ch)) { if (max < 0) max = 0; max = 10 * max + char_to_int(ch); @@ -187,6 +188,7 @@ _dopr(char **sbuffer, ch = *format++; break; case 'q': + case 'j': cflags = DP_C_LLONG; ch = *format++; break; @@ -194,6 +196,10 @@ _dopr(char **sbuffer, cflags = DP_C_LDOUBLE; ch = *format++; break; + case 'z': + cflags = DP_C_SIZE; + ch = *format++; + break; default: break; } @@ -213,6 +219,9 @@ _dopr(char **sbuffer, case DP_C_LLONG: value = va_arg(args, int64_t); break; + case DP_C_SIZE: + value = va_arg(args, ossl_ssize_t); + break; default: value = va_arg(args, int); break; @@ -238,6 +247,9 @@ _dopr(char **sbuffer, case DP_C_LLONG: value = va_arg(args, uint64_t); break; + case DP_C_SIZE: + value = va_arg(args, size_t); + break; default: value = va_arg(args, unsigned int); break; @@ -281,8 +293,8 @@ _dopr(char **sbuffer, return 0; break; case 'c': - if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, - va_arg(args, int))) + if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, + va_arg(args, int))) return 0; break; case 's': @@ -303,27 +315,15 @@ _dopr(char **sbuffer, value, 16, min, max, flags | DP_F_NUM)) return 0; break; - case 'n': /* XXX */ - if (cflags == DP_C_SHORT) { - short int *num; - num = va_arg(args, short int *); - *num = currlen; - } else if (cflags == DP_C_LONG) { /* XXX */ - long int *num; - num = va_arg(args, long int *); - *num = (long int)currlen; - } else if (cflags == DP_C_LLONG) { /* XXX */ - int64_t *num; - num = va_arg(args, int64_t *); - *num = (int64_t)currlen; - } else { + case 'n': + { int *num; num = va_arg(args, int *); *num = currlen; } break; case '%': - if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch)) + if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, ch)) return 0; break; case 'w': @@ -354,7 +354,7 @@ _dopr(char **sbuffer, if (*truncated) currlen = *maxlen - 1; } - if(!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0')) + if (!doapr_outch(sbuffer, buffer, &currlen, maxlen, '\0')) return 0; *retlen = currlen - 1; return 1; @@ -392,19 +392,19 @@ fmtstr(char **sbuffer, padlen = -padlen; while ((padlen > 0) && (max < 0 || cnt < max)) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, ' ')) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' ')) return 0; --padlen; ++cnt; } while (strln > 0 && (max < 0 || cnt < max)) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, *value++)) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, *value++)) return 0; --strln; ++cnt; } while ((padlen < 0) && (max < 0 || cnt < max)) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, ' ')) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' ')) return 0; ++padlen; ++cnt; @@ -472,19 +472,19 @@ fmtint(char **sbuffer, /* spaces */ while (spadlen > 0) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, ' ')) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, ' ')) return 0; --spadlen; } /* sign */ if (signvalue) - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue)) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, signvalue)) return 0; /* prefix */ while (*prefix) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, *prefix)) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, *prefix)) return 0; prefix++; } @@ -492,7 +492,7 @@ fmtint(char **sbuffer, /* zeros */ if (zpadlen > 0) { while (zpadlen > 0) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, '0')) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, '0')) return 0; --zpadlen; } @@ -758,8 +758,8 @@ fmtfp(char **sbuffer, return 0; while (fplace > 0) { - if(!doapr_outch(sbuffer, buffer, currlen, maxlen, - fconvert[--fplace])) + if (!doapr_outch(sbuffer, buffer, currlen, maxlen, + fconvert[--fplace])) return 0; } } @@ -805,11 +805,13 @@ static int doapr_outch(char **sbuffer, char **buffer, size_t *currlen, size_t *maxlen, int c) { - /* If we haven't at least one buffer, someone has doe a big booboo */ - OPENSSL_assert(*sbuffer != NULL || buffer != NULL); + /* If we haven't at least one buffer, someone has done a big booboo */ + if (!ossl_assert(*sbuffer != NULL || buffer != NULL)) + return 0; /* |currlen| must always be <= |*maxlen| */ - OPENSSL_assert(*currlen <= *maxlen); + if (!ossl_assert(*currlen <= *maxlen)) + return 0; if (buffer && *currlen == *maxlen) { if (*maxlen > INT_MAX - BUFFER_INC) @@ -821,7 +823,8 @@ doapr_outch(char **sbuffer, if (*buffer == NULL) return 0; if (*currlen > 0) { - OPENSSL_assert(*sbuffer != NULL); + if (!ossl_assert(*sbuffer != NULL)) + return 0; memcpy(*buffer, *sbuffer, *currlen); } *sbuffer = NULL; @@ -856,7 +859,7 @@ int BIO_printf(BIO *bio, const char *format, ...) ret = BIO_vprintf(bio, format, args); va_end(args); - return (ret); + return ret; } int BIO_vprintf(BIO *bio, const char *format, va_list args) @@ -883,7 +886,7 @@ int BIO_vprintf(BIO *bio, const char *format, va_list args) } else { ret = BIO_write(bio, hugebuf, (int)retlen); } - return (ret); + return ret; } /* @@ -902,7 +905,7 @@ int BIO_snprintf(char *buf, size_t n, const char *format, ...) ret = BIO_vsnprintf(buf, n, format, args); va_end(args); - return (ret); + return ret; } int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) @@ -910,7 +913,7 @@ int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) size_t retlen; int truncated; - if(!_dopr(&buf, NULL, &n, &retlen, &truncated, format, args)) + if (!_dopr(&buf, NULL, &n, &retlen, &truncated, format, args)) return -1; if (truncated) diff --git a/crypto/bio/b_sock.c b/crypto/bio/b_sock.c index 97dcc700..740ff174 100644 --- a/crypto/bio/b_sock.c +++ b/crypto/bio/b_sock.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,10 +11,6 @@ #include #include #include "bio_lcl.h" -#if defined(NETWARE_CLIB) -# include -NETDB_DEFINE_CONTEXT -#endif #ifndef OPENSSL_NO_SOCK # define SOCKET_PROTOCOL IPPROTO_TCP # ifdef SO_MAXCONN @@ -43,14 +39,13 @@ int BIO_get_host_ip(const char *str, unsigned char *ip) if (BIO_ADDRINFO_family(res) != AF_INET) { BIOerr(BIO_F_BIO_GET_HOST_IP, BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET); - } else { - BIO_ADDR_rawaddress(BIO_ADDRINFO_address(res), NULL, &l); - /* Because only AF_INET addresses will reach this far, - we can assert that l should be 4 */ - OPENSSL_assert(l == 4); - - BIO_ADDR_rawaddress(BIO_ADDRINFO_address(res), ip, &l); - ret = 1; + } else if (BIO_ADDR_rawaddress(BIO_ADDRINFO_address(res), NULL, &l)) { + /* + * Because only AF_INET addresses will reach this far, we can assert + * that l should be 4 + */ + if (ossl_assert(l == 4)) + ret = BIO_ADDR_rawaddress(BIO_ADDRINFO_address(res), ip, &l); } BIO_ADDRINFO_free(res); } else { @@ -67,7 +62,7 @@ int BIO_get_port(const char *str, unsigned short *port_ptr) if (str == NULL) { BIOerr(BIO_F_BIO_GET_PORT, BIO_R_NO_PORT_DEFINED); - return (0); + return 0; } if (BIO_sock_init() != 1) @@ -103,9 +98,9 @@ int BIO_sock_error(int sock) */ i = getsockopt(sock, SOL_SOCKET, SO_ERROR, (void *)&j, &size); if (i < 0) - return (get_last_socket_error()); + return get_last_socket_error(); else - return (j); + return j; } # if OPENSSL_API_COMPAT < 0x10100000L @@ -115,11 +110,7 @@ struct hostent *BIO_gethostbyname(const char *name) * Caching gethostbyname() results forever is wrong, so we have to let * the true gethostbyname() worry about this */ -# if (defined(NETWARE_BSDSOCK) && !defined(__NOVELL_LIBC__)) - return gethostbyname((char *)name); -# else return gethostbyname(name); -# endif } # endif @@ -143,7 +134,7 @@ int BIO_sock_init(void) err = WSAGetLastError(); SYSerr(SYS_F_WSASTARTUP, err); BIOerr(BIO_F_BIO_SOCK_INIT, BIO_R_WSASTARTUP); - return (-1); + return -1; } } # endif /* OPENSSL_SYS_WINDOWS */ @@ -151,10 +142,10 @@ int BIO_sock_init(void) extern int _watt_do_exit; _watt_do_exit = 0; /* don't make sock_init() call exit() */ if (sock_init()) - return (-1); + return -1; # endif - return (1); + return 1; } void bio_sock_cleanup_int(void) @@ -202,7 +193,7 @@ int BIO_socket_ioctl(int fd, long type, void *arg) # endif /* __DJGPP__ */ if (i < 0) SYSerr(SYS_F_IOCTLSOCKET, get_last_socket_error()); - return (i); + return i; } # if OPENSSL_API_COMPAT < 0x10100000L diff --git a/crypto/bio/b_sock2.c b/crypto/bio/b_sock2.c index d8b49d02..823732d6 100644 --- a/crypto/bio/b_sock2.c +++ b/crypto/bio/b_sock2.c @@ -76,7 +76,7 @@ int BIO_socket(int domain, int socktype, int protocol, int options) */ int BIO_connect(int sock, const BIO_ADDR *addr, int options) { - int on = 1; + const int on = 1; if (sock == -1) { BIOerr(BIO_F_BIO_CONNECT, BIO_R_INVALID_SOCKET); @@ -87,7 +87,8 @@ int BIO_connect(int sock, const BIO_ADDR *addr, int options) return 0; if (options & BIO_SOCK_KEEPALIVE) { - if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)) != 0) { + if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, + (const void *)&on, sizeof(on)) != 0) { SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); BIOerr(BIO_F_BIO_CONNECT, BIO_R_UNABLE_TO_KEEPALIVE); return 0; @@ -95,7 +96,8 @@ int BIO_connect(int sock, const BIO_ADDR *addr, int options) } if (options & BIO_SOCK_NODELAY) { - if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) != 0) { + if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, + (const void *)&on, sizeof(on)) != 0) { SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); BIOerr(BIO_F_BIO_CONNECT, BIO_R_UNABLE_TO_NODELAY); return 0; @@ -113,6 +115,55 @@ int BIO_connect(int sock, const BIO_ADDR *addr, int options) return 1; } +/*- + * BIO_bind - bind socket to address + * @sock: the socket to set + * @addr: local address to bind to + * @options: BIO socket options + * + * Binds to the address using the given socket and options. + * + * Options can be a combination of the following: + * - BIO_SOCK_REUSEADDR: Try to reuse the address and port combination + * for a recently closed port. + * + * When restarting the program it could be that the port is still in use. If + * you set to BIO_SOCK_REUSEADDR option it will try to reuse the port anyway. + * It's recommended that you use this. + */ +int BIO_bind(int sock, const BIO_ADDR *addr, int options) +{ + int on = 1; + + if (sock == -1) { + BIOerr(BIO_F_BIO_BIND, BIO_R_INVALID_SOCKET); + return 0; + } + +# ifndef OPENSSL_SYS_WINDOWS + /* + * SO_REUSEADDR has different behavior on Windows than on + * other operating systems, don't set it there. + */ + if (options & BIO_SOCK_REUSEADDR) { + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, + (const void *)&on, sizeof(on)) != 0) { + SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); + BIOerr(BIO_F_BIO_BIND, BIO_R_UNABLE_TO_REUSEADDR); + return 0; + } + } +# endif + + if (bind(sock, BIO_ADDR_sockaddr(addr), BIO_ADDR_sockaddr_size(addr)) != 0) { + SYSerr(SYS_F_BIND, get_last_socket_error()); + BIOerr(BIO_F_BIO_BIND, BIO_R_UNABLE_TO_BIND_SOCKET); + return 0; + } + + return 1; +} + /*- * BIO_listen - Creates a listen socket * @sock: the socket to listen with @@ -161,7 +212,8 @@ int BIO_listen(int sock, const BIO_ADDR *addr, int options) return 0; } - if (getsockopt(sock, SOL_SOCKET, SO_TYPE, &socktype, &socktype_len) != 0 + if (getsockopt(sock, SOL_SOCKET, SO_TYPE, + (void *)&socktype, &socktype_len) != 0 || socktype_len != sizeof(socktype)) { SYSerr(SYS_F_GETSOCKOPT, get_last_socket_error()); BIOerr(BIO_F_BIO_LISTEN, BIO_R_GETTING_SOCKTYPE); @@ -171,22 +223,9 @@ int BIO_listen(int sock, const BIO_ADDR *addr, int options) if (!BIO_socket_nbio(sock, (options & BIO_SOCK_NONBLOCK) != 0)) return 0; -# ifndef OPENSSL_SYS_WINDOWS - /* - * SO_REUSEADDR has different behavior on Windows than on - * other operating systems, don't set it there. - */ - if (options & BIO_SOCK_REUSEADDR) { - if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) { - SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); - BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_REUSEADDR); - return 0; - } - } -# endif - if (options & BIO_SOCK_KEEPALIVE) { - if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)) != 0) { + if (setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, + (const void *)&on, sizeof(on)) != 0) { SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_KEEPALIVE); return 0; @@ -194,7 +233,8 @@ int BIO_listen(int sock, const BIO_ADDR *addr, int options) } if (options & BIO_SOCK_NODELAY) { - if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) != 0) { + if (setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, + (const void *)&on, sizeof(on)) != 0) { SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_NODELAY); return 0; @@ -208,7 +248,8 @@ int BIO_listen(int sock, const BIO_ADDR *addr, int options) * Therefore we always have to use setsockopt here. */ on = options & BIO_SOCK_V6_ONLY ? 1 : 0; - if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) != 0) { + if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, + (const void *)&on, sizeof(on)) != 0) { SYSerr(SYS_F_SETSOCKOPT, get_last_socket_error()); BIOerr(BIO_F_BIO_LISTEN, BIO_R_LISTEN_V6_ONLY); return 0; @@ -216,11 +257,8 @@ int BIO_listen(int sock, const BIO_ADDR *addr, int options) } # endif - if (bind(sock, BIO_ADDR_sockaddr(addr), BIO_ADDR_sockaddr_size(addr)) != 0) { - SYSerr(SYS_F_BIND, get_last_socket_error()); - BIOerr(BIO_F_BIO_LISTEN, BIO_R_UNABLE_TO_BIND_SOCKET); + if (!BIO_bind(sock, addr, options)) return 0; - } if (socktype != SOCK_DGRAM && listen(sock, MAX_LISTEN) == -1) { SYSerr(SYS_F_LISTEN, get_last_socket_error()); diff --git a/crypto/bio/bf_buff.c b/crypto/bio/bf_buff.c index 85099561..8e87a629 100644 --- a/crypto/bio/bf_buff.c +++ b/crypto/bio/bf_buff.c @@ -25,7 +25,11 @@ static long buffer_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static const BIO_METHOD methods_buffer = { BIO_TYPE_BUFFER, "buffer", + /* TODO: Convert to new style write function */ + bwrite_conv, buffer_write, + /* TODO: Convert to new style read function */ + bread_conv, buffer_read, buffer_puts, buffer_gets, @@ -37,7 +41,7 @@ static const BIO_METHOD methods_buffer = { const BIO_METHOD *BIO_f_buffer(void) { - return (&methods_buffer); + return &methods_buffer; } static int buffer_new(BIO *bi) @@ -45,25 +49,25 @@ static int buffer_new(BIO *bi) BIO_F_BUFFER_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx)); if (ctx == NULL) - return (0); + return 0; ctx->ibuf_size = DEFAULT_BUFFER_SIZE; ctx->ibuf = OPENSSL_malloc(DEFAULT_BUFFER_SIZE); if (ctx->ibuf == NULL) { OPENSSL_free(ctx); - return (0); + return 0; } ctx->obuf_size = DEFAULT_BUFFER_SIZE; ctx->obuf = OPENSSL_malloc(DEFAULT_BUFFER_SIZE); if (ctx->obuf == NULL) { OPENSSL_free(ctx->ibuf); OPENSSL_free(ctx); - return (0); + return 0; } bi->init = 1; bi->ptr = (char *)ctx; bi->flags = 0; - return (1); + return 1; } static int buffer_free(BIO *a) @@ -71,7 +75,7 @@ static int buffer_free(BIO *a) BIO_F_BUFFER_CTX *b; if (a == NULL) - return (0); + return 0; b = (BIO_F_BUFFER_CTX *)a->ptr; OPENSSL_free(b->ibuf); OPENSSL_free(b->obuf); @@ -79,7 +83,7 @@ static int buffer_free(BIO *a) a->ptr = NULL; a->init = 0; a->flags = 0; - return (1); + return 1; } static int buffer_read(BIO *b, char *out, int outl) @@ -88,11 +92,11 @@ static int buffer_read(BIO *b, char *out, int outl) BIO_F_BUFFER_CTX *ctx; if (out == NULL) - return (0); + return 0; ctx = (BIO_F_BUFFER_CTX *)b->ptr; if ((ctx == NULL) || (b->next_bio == NULL)) - return (0); + return 0; num = 0; BIO_clear_retry_flags(b); @@ -107,7 +111,7 @@ static int buffer_read(BIO *b, char *out, int outl) ctx->ibuf_len -= i; num += i; if (outl == i) - return (num); + return num; outl -= i; out += i; } @@ -126,11 +130,11 @@ static int buffer_read(BIO *b, char *out, int outl) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } num += i; if (outl == i) - return (num); + return num; out += i; outl -= i; } @@ -144,7 +148,7 @@ static int buffer_read(BIO *b, char *out, int outl) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } ctx->ibuf_off = 0; ctx->ibuf_len = i; @@ -159,10 +163,10 @@ static int buffer_write(BIO *b, const char *in, int inl) BIO_F_BUFFER_CTX *ctx; if ((in == NULL) || (inl <= 0)) - return (0); + return 0; ctx = (BIO_F_BUFFER_CTX *)b->ptr; if ((ctx == NULL) || (b->next_bio == NULL)) - return (0); + return 0; BIO_clear_retry_flags(b); start: @@ -193,7 +197,7 @@ static int buffer_write(BIO *b, const char *in, int inl) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } ctx->obuf_off += i; ctx->obuf_len -= i; @@ -215,13 +219,13 @@ static int buffer_write(BIO *b, const char *in, int inl) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } num += i; in += i; inl -= i; if (inl == 0) - return (num); + return num; } /* @@ -248,7 +252,12 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) ctx->obuf_off = 0; ctx->obuf_len = 0; if (b->next_bio == NULL) - return (0); + return 0; + ret = BIO_ctrl(b->next_bio, cmd, num, ptr); + break; + case BIO_CTRL_EOF: + if (ctx->ibuf_len > 0) + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; case BIO_CTRL_INFO: @@ -266,7 +275,7 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) ret = (long)ctx->obuf_len; if (ret == 0) { if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); } break; @@ -274,7 +283,7 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) ret = (long)ctx->ibuf_len; if (ret == 0) { if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); } break; @@ -338,7 +347,7 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) break; case BIO_C_DO_STATE_MACHINE: if (b->next_bio == NULL) - return (0); + return 0; BIO_clear_retry_flags(b); ret = BIO_ctrl(b->next_bio, cmd, num, ptr); BIO_copy_next_retry(b); @@ -346,7 +355,7 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) case BIO_CTRL_FLUSH: if (b->next_bio == NULL) - return (0); + return 0; if (ctx->obuf_len <= 0) { ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; @@ -359,7 +368,7 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) &(ctx->obuf[ctx->obuf_off]), ctx->obuf_len); BIO_copy_next_retry(b); if (r <= 0) - return ((long)r); + return (long)r; ctx->obuf_off += r; ctx->obuf_len -= r; } else { @@ -376,16 +385,27 @@ static long buffer_ctrl(BIO *b, int cmd, long num, void *ptr) !BIO_set_write_buffer_size(dbio, ctx->obuf_size)) ret = 0; break; + case BIO_CTRL_PEEK: + /* Ensure there's stuff in the input buffer */ + { + char fake_buf[1]; + (void)buffer_read(b, fake_buf, 0); + } + if (num > ctx->ibuf_len) + num = ctx->ibuf_len; + memcpy(ptr, &(ctx->ibuf[ctx->ibuf_off]), num); + ret = num; + break; default: if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; } - return (ret); + return ret; malloc_error: BIOerr(BIO_F_BUFFER_CTRL, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } static long buffer_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -393,13 +413,13 @@ static long buffer_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) long ret = 1; if (b->next_bio == NULL) - return (0); + return 0; switch (cmd) { default: ret = BIO_callback_ctrl(b->next_bio, cmd, fp); break; } - return (ret); + return ret; } static int buffer_gets(BIO *b, char *buf, int size) @@ -430,7 +450,7 @@ static int buffer_gets(BIO *b, char *buf, int size) ctx->ibuf_off += i; if (flag || size == 0) { *buf = '\0'; - return (num); + return num; } } else { /* read another chunk */ @@ -441,7 +461,7 @@ static int buffer_gets(BIO *b, char *buf, int size) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } ctx->ibuf_len = i; ctx->ibuf_off = 0; @@ -451,5 +471,5 @@ static int buffer_gets(BIO *b, char *buf, int size) static int buffer_puts(BIO *b, const char *str) { - return (buffer_write(b, str, strlen(str))); + return buffer_write(b, str, strlen(str)); } diff --git a/crypto/bio/bf_lbuf.c b/crypto/bio/bf_lbuf.c index a80f899a..2dac3d72 100644 --- a/crypto/bio/bf_lbuf.c +++ b/crypto/bio/bf_lbuf.c @@ -30,7 +30,11 @@ static long linebuffer_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static const BIO_METHOD methods_linebuffer = { BIO_TYPE_LINEBUFFER, "linebuffer", + /* TODO: Convert to new style write function */ + bwrite_conv, linebuffer_write, + /* TODO: Convert to new style read function */ + bread_conv, linebuffer_read, linebuffer_puts, linebuffer_gets, @@ -42,7 +46,7 @@ static const BIO_METHOD methods_linebuffer = { const BIO_METHOD *BIO_f_linebuffer(void) { - return (&methods_linebuffer); + return &methods_linebuffer; } typedef struct bio_linebuffer_ctx_struct { @@ -57,11 +61,11 @@ static int linebuffer_new(BIO *bi) ctx = OPENSSL_malloc(sizeof(*ctx)); if (ctx == NULL) - return (0); + return 0; ctx->obuf = OPENSSL_malloc(DEFAULT_LINEBUFFER_SIZE); if (ctx->obuf == NULL) { OPENSSL_free(ctx); - return (0); + return 0; } ctx->obuf_size = DEFAULT_LINEBUFFER_SIZE; ctx->obuf_len = 0; @@ -69,7 +73,7 @@ static int linebuffer_new(BIO *bi) bi->init = 1; bi->ptr = (char *)ctx; bi->flags = 0; - return (1); + return 1; } static int linebuffer_free(BIO *a) @@ -77,14 +81,14 @@ static int linebuffer_free(BIO *a) BIO_LINEBUFFER_CTX *b; if (a == NULL) - return (0); + return 0; b = (BIO_LINEBUFFER_CTX *)a->ptr; OPENSSL_free(b->obuf); OPENSSL_free(a->ptr); a->ptr = NULL; a->init = 0; a->flags = 0; - return (1); + return 1; } static int linebuffer_read(BIO *b, char *out, int outl) @@ -92,13 +96,13 @@ static int linebuffer_read(BIO *b, char *out, int outl) int ret = 0; if (out == NULL) - return (0); + return 0; if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_read(b->next_bio, out, outl); BIO_clear_retry_flags(b); BIO_copy_next_retry(b); - return (ret); + return ret; } static int linebuffer_write(BIO *b, const char *in, int inl) @@ -107,10 +111,10 @@ static int linebuffer_write(BIO *b, const char *in, int inl) BIO_LINEBUFFER_CTX *ctx; if ((in == NULL) || (inl <= 0)) - return (0); + return 0; ctx = (BIO_LINEBUFFER_CTX *)b->ptr; if ((ctx == NULL) || (b->next_bio == NULL)) - return (0); + return 0; BIO_clear_retry_flags(b); @@ -157,7 +161,7 @@ static int linebuffer_write(BIO *b, const char *in, int inl) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } if (i < ctx->obuf_len) memmove(ctx->obuf, ctx->obuf + i, ctx->obuf_len - i); @@ -175,7 +179,7 @@ static int linebuffer_write(BIO *b, const char *in, int inl) if (i < 0) return ((num > 0) ? num : i); if (i == 0) - return (num); + return num; } num += i; in += i; @@ -211,7 +215,7 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) case BIO_CTRL_RESET: ctx->obuf_len = 0; if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; case BIO_CTRL_INFO: @@ -221,7 +225,7 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) ret = (long)ctx->obuf_len; if (ret == 0) { if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); } break; @@ -245,7 +249,7 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) break; case BIO_C_DO_STATE_MACHINE: if (b->next_bio == NULL) - return (0); + return 0; BIO_clear_retry_flags(b); ret = BIO_ctrl(b->next_bio, cmd, num, ptr); BIO_copy_next_retry(b); @@ -253,7 +257,7 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) case BIO_CTRL_FLUSH: if (b->next_bio == NULL) - return (0); + return 0; if (ctx->obuf_len <= 0) { ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; @@ -265,7 +269,7 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) r = BIO_write(b->next_bio, ctx->obuf, ctx->obuf_len); BIO_copy_next_retry(b); if (r <= 0) - return ((long)r); + return (long)r; if (r < ctx->obuf_len) memmove(ctx->obuf, ctx->obuf + r, ctx->obuf_len - r); ctx->obuf_len -= r; @@ -283,14 +287,14 @@ static long linebuffer_ctrl(BIO *b, int cmd, long num, void *ptr) break; default: if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; } - return (ret); + return ret; malloc_error: BIOerr(BIO_F_LINEBUFFER_CTRL, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } static long linebuffer_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -298,23 +302,23 @@ static long linebuffer_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) long ret = 1; if (b->next_bio == NULL) - return (0); + return 0; switch (cmd) { default: ret = BIO_callback_ctrl(b->next_bio, cmd, fp); break; } - return (ret); + return ret; } static int linebuffer_gets(BIO *b, char *buf, int size) { if (b->next_bio == NULL) - return (0); - return (BIO_gets(b->next_bio, buf, size)); + return 0; + return BIO_gets(b->next_bio, buf, size); } static int linebuffer_puts(BIO *b, const char *str) { - return (linebuffer_write(b, str, strlen(str))); + return linebuffer_write(b, str, strlen(str)); } diff --git a/crypto/bio/bf_nbio.c b/crypto/bio/bf_nbio.c index 3328506d..c41b5d58 100644 --- a/crypto/bio/bf_nbio.c +++ b/crypto/bio/bf_nbio.c @@ -34,7 +34,11 @@ typedef struct nbio_test_st { static const BIO_METHOD methods_nbiof = { BIO_TYPE_NBIO_TEST, "non-blocking IO test filter", + /* TODO: Convert to new style write function */ + bwrite_conv, nbiof_write, + /* TODO: Convert to new style read function */ + bread_conv, nbiof_read, nbiof_puts, nbiof_gets, @@ -46,7 +50,7 @@ static const BIO_METHOD methods_nbiof = { const BIO_METHOD *BIO_f_nbio_test(void) { - return (&methods_nbiof); + return &methods_nbiof; } static int nbiof_new(BIO *bi) @@ -54,23 +58,23 @@ static int nbiof_new(BIO *bi) NBIO_TEST *nt; if ((nt = OPENSSL_zalloc(sizeof(*nt))) == NULL) - return (0); + return 0; nt->lrn = -1; nt->lwn = -1; bi->ptr = (char *)nt; bi->init = 1; - return (1); + return 1; } static int nbiof_free(BIO *a) { if (a == NULL) - return (0); + return 0; OPENSSL_free(a->ptr); a->ptr = NULL; a->init = 0; a->flags = 0; - return (1); + return 1; } static int nbiof_read(BIO *b, char *out, int outl) @@ -80,9 +84,9 @@ static int nbiof_read(BIO *b, char *out, int outl) unsigned char n; if (out == NULL) - return (0); + return 0; if (b->next_bio == NULL) - return (0); + return 0; BIO_clear_retry_flags(b); if (RAND_bytes(&n, 1) <= 0) @@ -100,7 +104,7 @@ static int nbiof_read(BIO *b, char *out, int outl) if (ret < 0) BIO_copy_next_retry(b); } - return (ret); + return ret; } static int nbiof_write(BIO *b, const char *in, int inl) @@ -111,9 +115,9 @@ static int nbiof_write(BIO *b, const char *in, int inl) unsigned char n; if ((in == NULL) || (inl <= 0)) - return (0); + return 0; if (b->next_bio == NULL) - return (0); + return 0; nt = (NBIO_TEST *)b->ptr; BIO_clear_retry_flags(b); @@ -140,7 +144,7 @@ static int nbiof_write(BIO *b, const char *in, int inl) nt->lwn = inl; } } - return (ret); + return ret; } static long nbiof_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -148,7 +152,7 @@ static long nbiof_ctrl(BIO *b, int cmd, long num, void *ptr) long ret; if (b->next_bio == NULL) - return (0); + return 0; switch (cmd) { case BIO_C_DO_STATE_MACHINE: BIO_clear_retry_flags(b); @@ -162,7 +166,7 @@ static long nbiof_ctrl(BIO *b, int cmd, long num, void *ptr) ret = BIO_ctrl(b->next_bio, cmd, num, ptr); break; } - return (ret); + return ret; } static long nbiof_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -170,25 +174,25 @@ static long nbiof_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) long ret = 1; if (b->next_bio == NULL) - return (0); + return 0; switch (cmd) { default: ret = BIO_callback_ctrl(b->next_bio, cmd, fp); break; } - return (ret); + return ret; } static int nbiof_gets(BIO *bp, char *buf, int size) { if (bp->next_bio == NULL) - return (0); - return (BIO_gets(bp->next_bio, buf, size)); + return 0; + return BIO_gets(bp->next_bio, buf, size); } static int nbiof_puts(BIO *bp, const char *str) { if (bp->next_bio == NULL) - return (0); - return (BIO_puts(bp->next_bio, str)); + return 0; + return BIO_puts(bp->next_bio, str); } diff --git a/crypto/bio/bf_null.c b/crypto/bio/bf_null.c index 6b86aa55..613fb2e0 100644 --- a/crypto/bio/bf_null.c +++ b/crypto/bio/bf_null.c @@ -25,7 +25,11 @@ static long nullf_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static const BIO_METHOD methods_nullf = { BIO_TYPE_NULL_FILTER, "NULL filter", + /* TODO: Convert to new style write function */ + bwrite_conv, nullf_write, + /* TODO: Convert to new style read function */ + bread_conv, nullf_read, nullf_puts, nullf_gets, @@ -37,7 +41,7 @@ static const BIO_METHOD methods_nullf = { const BIO_METHOD *BIO_f_null(void) { - return (&methods_nullf); + return &methods_nullf; } static int nullf_read(BIO *b, char *out, int outl) @@ -45,13 +49,13 @@ static int nullf_read(BIO *b, char *out, int outl) int ret = 0; if (out == NULL) - return (0); + return 0; if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_read(b->next_bio, out, outl); BIO_clear_retry_flags(b); BIO_copy_next_retry(b); - return (ret); + return ret; } static int nullf_write(BIO *b, const char *in, int inl) @@ -59,13 +63,13 @@ static int nullf_write(BIO *b, const char *in, int inl) int ret = 0; if ((in == NULL) || (inl <= 0)) - return (0); + return 0; if (b->next_bio == NULL) - return (0); + return 0; ret = BIO_write(b->next_bio, in, inl); BIO_clear_retry_flags(b); BIO_copy_next_retry(b); - return (ret); + return ret; } static long nullf_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -73,7 +77,7 @@ static long nullf_ctrl(BIO *b, int cmd, long num, void *ptr) long ret; if (b->next_bio == NULL) - return (0); + return 0; switch (cmd) { case BIO_C_DO_STATE_MACHINE: BIO_clear_retry_flags(b); @@ -86,7 +90,7 @@ static long nullf_ctrl(BIO *b, int cmd, long num, void *ptr) default: ret = BIO_ctrl(b->next_bio, cmd, num, ptr); } - return (ret); + return ret; } static long nullf_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -94,25 +98,25 @@ static long nullf_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) long ret = 1; if (b->next_bio == NULL) - return (0); + return 0; switch (cmd) { default: ret = BIO_callback_ctrl(b->next_bio, cmd, fp); break; } - return (ret); + return ret; } static int nullf_gets(BIO *bp, char *buf, int size) { if (bp->next_bio == NULL) - return (0); - return (BIO_gets(bp->next_bio, buf, size)); + return 0; + return BIO_gets(bp->next_bio, buf, size); } static int nullf_puts(BIO *bp, const char *str) { if (bp->next_bio == NULL) - return (0); - return (BIO_puts(bp->next_bio, str)); + return 0; + return BIO_puts(bp->next_bio, str); } diff --git a/crypto/bio/bio_cb.c b/crypto/bio/bio_cb.c index 412387b6..1154c233 100644 --- a/crypto/bio/bio_cb.c +++ b/crypto/bio/bio_cb.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -21,8 +21,7 @@ long BIO_debug_callback(BIO *bio, int cmd, const char *argp, char buf[256]; char *p; long r = 1; - int len; - size_t p_maxlen; + int len, left; if (BIO_CB_RETURN & cmd) r = ret; @@ -33,58 +32,58 @@ long BIO_debug_callback(BIO *bio, int cmd, const char *argp, if (len < 0) len = 0; p = buf + len; - p_maxlen = sizeof(buf) - len; + left = sizeof(buf) - len; switch (cmd) { case BIO_CB_FREE: - BIO_snprintf(p, p_maxlen, "Free - %s\n", bio->method->name); + BIO_snprintf(p, left, "Free - %s\n", bio->method->name); break; case BIO_CB_READ: if (bio->method->type & BIO_TYPE_DESCRIPTOR) - BIO_snprintf(p, p_maxlen, "read(%d,%lu) - %s fd=%d\n", + BIO_snprintf(p, left, "read(%d,%lu) - %s fd=%d\n", bio->num, (unsigned long)argi, bio->method->name, bio->num); else - BIO_snprintf(p, p_maxlen, "read(%d,%lu) - %s\n", - bio->num, (unsigned long)argi, bio->method->name); + BIO_snprintf(p, left, "read(%d,%lu) - %s\n", + bio->num, (unsigned long)argi, bio->method->name); break; case BIO_CB_WRITE: if (bio->method->type & BIO_TYPE_DESCRIPTOR) - BIO_snprintf(p, p_maxlen, "write(%d,%lu) - %s fd=%d\n", + BIO_snprintf(p, left, "write(%d,%lu) - %s fd=%d\n", bio->num, (unsigned long)argi, bio->method->name, bio->num); else - BIO_snprintf(p, p_maxlen, "write(%d,%lu) - %s\n", + BIO_snprintf(p, left, "write(%d,%lu) - %s\n", bio->num, (unsigned long)argi, bio->method->name); break; case BIO_CB_PUTS: - BIO_snprintf(p, p_maxlen, "puts() - %s\n", bio->method->name); + BIO_snprintf(p, left, "puts() - %s\n", bio->method->name); break; case BIO_CB_GETS: - BIO_snprintf(p, p_maxlen, "gets(%lu) - %s\n", (unsigned long)argi, + BIO_snprintf(p, left, "gets(%lu) - %s\n", (unsigned long)argi, bio->method->name); break; case BIO_CB_CTRL: - BIO_snprintf(p, p_maxlen, "ctrl(%lu) - %s\n", (unsigned long)argi, + BIO_snprintf(p, left, "ctrl(%lu) - %s\n", (unsigned long)argi, bio->method->name); break; case BIO_CB_RETURN | BIO_CB_READ: - BIO_snprintf(p, p_maxlen, "read return %ld\n", ret); + BIO_snprintf(p, left, "read return %ld\n", ret); break; case BIO_CB_RETURN | BIO_CB_WRITE: - BIO_snprintf(p, p_maxlen, "write return %ld\n", ret); + BIO_snprintf(p, left, "write return %ld\n", ret); break; case BIO_CB_RETURN | BIO_CB_GETS: - BIO_snprintf(p, p_maxlen, "gets return %ld\n", ret); + BIO_snprintf(p, left, "gets return %ld\n", ret); break; case BIO_CB_RETURN | BIO_CB_PUTS: - BIO_snprintf(p, p_maxlen, "puts return %ld\n", ret); + BIO_snprintf(p, left, "puts return %ld\n", ret); break; case BIO_CB_RETURN | BIO_CB_CTRL: - BIO_snprintf(p, p_maxlen, "ctrl return %ld\n", ret); + BIO_snprintf(p, left, "ctrl return %ld\n", ret); break; default: - BIO_snprintf(p, p_maxlen, "bio callback - unknown type (%d)\n", cmd); + BIO_snprintf(p, left, "bio callback - unknown type (%d)\n", cmd); break; } @@ -95,5 +94,5 @@ long BIO_debug_callback(BIO *bio, int cmd, const char *argp, else fputs(buf, stderr); #endif - return (r); + return r; } diff --git a/crypto/bio/bio_err.c b/crypto/bio/bio_err.c index c914dcff..594013dd 100644 --- a/crypto/bio/bio_err.c +++ b/crypto/bio/bio_err.c @@ -8,106 +8,118 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_BIO,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_BIO,0,reason) - -static ERR_STRING_DATA BIO_str_functs[] = { - {ERR_FUNC(BIO_F_ACPT_STATE), "acpt_state"}, - {ERR_FUNC(BIO_F_ADDR_STRINGS), "addr_strings"}, - {ERR_FUNC(BIO_F_BIO_ACCEPT), "BIO_accept"}, - {ERR_FUNC(BIO_F_BIO_ACCEPT_EX), "BIO_accept_ex"}, - {ERR_FUNC(BIO_F_BIO_ADDR_NEW), "BIO_ADDR_new"}, - {ERR_FUNC(BIO_F_BIO_CALLBACK_CTRL), "BIO_callback_ctrl"}, - {ERR_FUNC(BIO_F_BIO_CONNECT), "BIO_connect"}, - {ERR_FUNC(BIO_F_BIO_CTRL), "BIO_ctrl"}, - {ERR_FUNC(BIO_F_BIO_GETS), "BIO_gets"}, - {ERR_FUNC(BIO_F_BIO_GET_HOST_IP), "BIO_get_host_ip"}, - {ERR_FUNC(BIO_F_BIO_GET_NEW_INDEX), "BIO_get_new_index"}, - {ERR_FUNC(BIO_F_BIO_GET_PORT), "BIO_get_port"}, - {ERR_FUNC(BIO_F_BIO_LISTEN), "BIO_listen"}, - {ERR_FUNC(BIO_F_BIO_LOOKUP), "BIO_lookup"}, - {ERR_FUNC(BIO_F_BIO_MAKE_PAIR), "bio_make_pair"}, - {ERR_FUNC(BIO_F_BIO_METH_NEW), "BIO_meth_new"}, - {ERR_FUNC(BIO_F_BIO_NEW), "BIO_new"}, - {ERR_FUNC(BIO_F_BIO_NEW_FILE), "BIO_new_file"}, - {ERR_FUNC(BIO_F_BIO_NEW_MEM_BUF), "BIO_new_mem_buf"}, - {ERR_FUNC(BIO_F_BIO_NREAD), "BIO_nread"}, - {ERR_FUNC(BIO_F_BIO_NREAD0), "BIO_nread0"}, - {ERR_FUNC(BIO_F_BIO_NWRITE), "BIO_nwrite"}, - {ERR_FUNC(BIO_F_BIO_NWRITE0), "BIO_nwrite0"}, - {ERR_FUNC(BIO_F_BIO_PARSE_HOSTSERV), "BIO_parse_hostserv"}, - {ERR_FUNC(BIO_F_BIO_PUTS), "BIO_puts"}, - {ERR_FUNC(BIO_F_BIO_READ), "BIO_read"}, - {ERR_FUNC(BIO_F_BIO_SOCKET), "BIO_socket"}, - {ERR_FUNC(BIO_F_BIO_SOCKET_NBIO), "BIO_socket_nbio"}, - {ERR_FUNC(BIO_F_BIO_SOCK_INFO), "BIO_sock_info"}, - {ERR_FUNC(BIO_F_BIO_SOCK_INIT), "BIO_sock_init"}, - {ERR_FUNC(BIO_F_BIO_WRITE), "BIO_write"}, - {ERR_FUNC(BIO_F_BUFFER_CTRL), "buffer_ctrl"}, - {ERR_FUNC(BIO_F_CONN_CTRL), "conn_ctrl"}, - {ERR_FUNC(BIO_F_CONN_STATE), "conn_state"}, - {ERR_FUNC(BIO_F_DGRAM_SCTP_READ), "dgram_sctp_read"}, - {ERR_FUNC(BIO_F_DGRAM_SCTP_WRITE), "dgram_sctp_write"}, - {ERR_FUNC(BIO_F_FILE_CTRL), "file_ctrl"}, - {ERR_FUNC(BIO_F_FILE_READ), "file_read"}, - {ERR_FUNC(BIO_F_LINEBUFFER_CTRL), "linebuffer_ctrl"}, - {ERR_FUNC(BIO_F_MEM_WRITE), "mem_write"}, - {ERR_FUNC(BIO_F_SSL_NEW), "SSL_new"}, +static const ERR_STRING_DATA BIO_str_functs[] = { + {ERR_PACK(ERR_LIB_BIO, BIO_F_ACPT_STATE, 0), "acpt_state"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_ADDR_STRINGS, 0), "addr_strings"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_ACCEPT, 0), "BIO_accept"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_ACCEPT_EX, 0), "BIO_accept_ex"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_ADDR_NEW, 0), "BIO_ADDR_new"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_BIND, 0), "BIO_bind"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_CALLBACK_CTRL, 0), "BIO_callback_ctrl"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_CONNECT, 0), "BIO_connect"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_CTRL, 0), "BIO_ctrl"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_GETS, 0), "BIO_gets"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_GET_HOST_IP, 0), "BIO_get_host_ip"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_GET_NEW_INDEX, 0), "BIO_get_new_index"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_GET_PORT, 0), "BIO_get_port"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LISTEN, 0), "BIO_listen"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LOOKUP, 0), "BIO_lookup"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LOOKUP_EX, 0), "BIO_lookup_ex"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_MAKE_PAIR, 0), "bio_make_pair"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_METH_NEW, 0), "BIO_meth_new"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW, 0), "BIO_new"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_DGRAM_SCTP, 0), "BIO_new_dgram_sctp"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_FILE, 0), "BIO_new_file"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_MEM_BUF, 0), "BIO_new_mem_buf"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NREAD, 0), "BIO_nread"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NREAD0, 0), "BIO_nread0"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NWRITE, 0), "BIO_nwrite"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NWRITE0, 0), "BIO_nwrite0"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_PARSE_HOSTSERV, 0), "BIO_parse_hostserv"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_PUTS, 0), "BIO_puts"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_READ, 0), "BIO_read"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_READ_EX, 0), "BIO_read_ex"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_READ_INTERN, 0), "bio_read_intern"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_SOCKET, 0), "BIO_socket"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_SOCKET_NBIO, 0), "BIO_socket_nbio"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_SOCK_INFO, 0), "BIO_sock_info"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_SOCK_INIT, 0), "BIO_sock_init"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_WRITE, 0), "BIO_write"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_WRITE_EX, 0), "BIO_write_ex"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_WRITE_INTERN, 0), "bio_write_intern"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BUFFER_CTRL, 0), "buffer_ctrl"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_CONN_CTRL, 0), "conn_ctrl"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_CONN_STATE, 0), "conn_state"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_DGRAM_SCTP_READ, 0), "dgram_sctp_read"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_DGRAM_SCTP_WRITE, 0), "dgram_sctp_write"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_FILE_CTRL, 0), "file_ctrl"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_FILE_READ, 0), "file_read"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_LINEBUFFER_CTRL, 0), "linebuffer_ctrl"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_MEM_WRITE, 0), "mem_write"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_SSL_NEW, 0), "SSL_new"}, {0, NULL} }; -static ERR_STRING_DATA BIO_str_reasons[] = { - {ERR_REASON(BIO_R_ACCEPT_ERROR), "accept error"}, - {ERR_REASON(BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET), - "addrinfo addr is not af inet"}, - {ERR_REASON(BIO_R_AMBIGUOUS_HOST_OR_SERVICE), - "ambiguous host or service"}, - {ERR_REASON(BIO_R_BAD_FOPEN_MODE), "bad fopen mode"}, - {ERR_REASON(BIO_R_BROKEN_PIPE), "broken pipe"}, - {ERR_REASON(BIO_R_CONNECT_ERROR), "connect error"}, - {ERR_REASON(BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET), - "gethostbyname addr is not af inet"}, - {ERR_REASON(BIO_R_GETSOCKNAME_ERROR), "getsockname error"}, - {ERR_REASON(BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS), - "getsockname truncated address"}, - {ERR_REASON(BIO_R_GETTING_SOCKTYPE), "getting socktype"}, - {ERR_REASON(BIO_R_INVALID_ARGUMENT), "invalid argument"}, - {ERR_REASON(BIO_R_INVALID_SOCKET), "invalid socket"}, - {ERR_REASON(BIO_R_IN_USE), "in use"}, - {ERR_REASON(BIO_R_LISTEN_V6_ONLY), "listen v6 only"}, - {ERR_REASON(BIO_R_LOOKUP_RETURNED_NOTHING), "lookup returned nothing"}, - {ERR_REASON(BIO_R_MALFORMED_HOST_OR_SERVICE), - "malformed host or service"}, - {ERR_REASON(BIO_R_NBIO_CONNECT_ERROR), "nbio connect error"}, - {ERR_REASON(BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED), - "no accept addr or service specified"}, - {ERR_REASON(BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED), - "no hostname or service specified"}, - {ERR_REASON(BIO_R_NO_PORT_DEFINED), "no port defined"}, - {ERR_REASON(BIO_R_NO_SUCH_FILE), "no such file"}, - {ERR_REASON(BIO_R_NULL_PARAMETER), "null parameter"}, - {ERR_REASON(BIO_R_UNABLE_TO_BIND_SOCKET), "unable to bind socket"}, - {ERR_REASON(BIO_R_UNABLE_TO_CREATE_SOCKET), "unable to create socket"}, - {ERR_REASON(BIO_R_UNABLE_TO_KEEPALIVE), "unable to keepalive"}, - {ERR_REASON(BIO_R_UNABLE_TO_LISTEN_SOCKET), "unable to listen socket"}, - {ERR_REASON(BIO_R_UNABLE_TO_NODELAY), "unable to nodelay"}, - {ERR_REASON(BIO_R_UNABLE_TO_REUSEADDR), "unable to reuseaddr"}, - {ERR_REASON(BIO_R_UNAVAILABLE_IP_FAMILY), "unavailable ip family"}, - {ERR_REASON(BIO_R_UNINITIALIZED), "uninitialized"}, - {ERR_REASON(BIO_R_UNKNOWN_INFO_TYPE), "unknown info type"}, - {ERR_REASON(BIO_R_UNSUPPORTED_IP_FAMILY), "unsupported ip family"}, - {ERR_REASON(BIO_R_UNSUPPORTED_METHOD), "unsupported method"}, - {ERR_REASON(BIO_R_UNSUPPORTED_PROTOCOL_FAMILY), - "unsupported protocol family"}, - {ERR_REASON(BIO_R_WRITE_TO_READ_ONLY_BIO), "write to read only BIO"}, - {ERR_REASON(BIO_R_WSASTARTUP), "WSAStartup"}, +static const ERR_STRING_DATA BIO_str_reasons[] = { + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_ACCEPT_ERROR), "accept error"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET), + "addrinfo addr is not af inet"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_AMBIGUOUS_HOST_OR_SERVICE), + "ambiguous host or service"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_BAD_FOPEN_MODE), "bad fopen mode"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_BROKEN_PIPE), "broken pipe"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_CONNECT_ERROR), "connect error"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET), + "gethostbyname addr is not af inet"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_GETSOCKNAME_ERROR), "getsockname error"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS), + "getsockname truncated address"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_GETTING_SOCKTYPE), "getting socktype"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_INVALID_ARGUMENT), "invalid argument"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_INVALID_SOCKET), "invalid socket"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_IN_USE), "in use"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_LENGTH_TOO_LONG), "length too long"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_LISTEN_V6_ONLY), "listen v6 only"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_LOOKUP_RETURNED_NOTHING), + "lookup returned nothing"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_MALFORMED_HOST_OR_SERVICE), + "malformed host or service"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NBIO_CONNECT_ERROR), "nbio connect error"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED), + "no accept addr or service specified"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED), + "no hostname or service specified"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_PORT_DEFINED), "no port defined"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NO_SUCH_FILE), "no such file"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_NULL_PARAMETER), "null parameter"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_BIND_SOCKET), + "unable to bind socket"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_CREATE_SOCKET), + "unable to create socket"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_KEEPALIVE), + "unable to keepalive"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_LISTEN_SOCKET), + "unable to listen socket"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_NODELAY), "unable to nodelay"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNABLE_TO_REUSEADDR), + "unable to reuseaddr"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNAVAILABLE_IP_FAMILY), + "unavailable ip family"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNINITIALIZED), "uninitialized"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNKNOWN_INFO_TYPE), "unknown info type"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNSUPPORTED_IP_FAMILY), + "unsupported ip family"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNSUPPORTED_METHOD), "unsupported method"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_UNSUPPORTED_PROTOCOL_FAMILY), + "unsupported protocol family"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_WRITE_TO_READ_ONLY_BIO), + "write to read only BIO"}, + {ERR_PACK(ERR_LIB_BIO, 0, BIO_R_WSASTARTUP), "WSAStartup"}, {0, NULL} }; @@ -116,10 +128,9 @@ static ERR_STRING_DATA BIO_str_reasons[] = { int ERR_load_BIO_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(BIO_str_functs[0].error) == NULL) { - ERR_load_strings(0, BIO_str_functs); - ERR_load_strings(0, BIO_str_reasons); + ERR_load_strings_const(BIO_str_functs); + ERR_load_strings_const(BIO_str_reasons); } #endif return 1; diff --git a/crypto/bio/bio_lcl.h b/crypto/bio/bio_lcl.h index 39178cf5..e2c05a20 100644 --- a/crypto/bio/bio_lcl.h +++ b/crypto/bio/bio_lcl.h @@ -7,8 +7,9 @@ * https://www.openssl.org/source/license.html */ -#define USE_SOCKETS #include "e_os.h" +#include "internal/sockets.h" +#include "internal/refcount.h" /* BEGIN BIO_ADDRINFO/BIO_ADDR stuff. */ @@ -86,7 +87,7 @@ union bio_addr_st { /* END BIO_ADDRINFO/BIO_ADDR stuff. */ #include "internal/cryptlib.h" -#include +#include "internal/bio.h" typedef struct bio_f_buffer_ctx_struct { /*- @@ -114,7 +115,8 @@ typedef struct bio_f_buffer_ctx_struct { struct bio_st { const BIO_METHOD *method; /* bio, mode, argp, argi, argl, ret */ - long (*callback) (struct bio_st *, int, const char *, int, long, long); + BIO_callback_fn callback; + BIO_callback_fn_ex callback_ex; char *cb_arg; /* first argument for the callback */ int init; int shutdown; @@ -124,7 +126,7 @@ struct bio_st { void *ptr; struct bio_st *next_bio; /* used by filter BIOs */ struct bio_st *prev_bio; /* used by filter BIOs */ - int references; + CRYPTO_REF_COUNT references; uint64_t num_read; uint64_t num_write; CRYPTO_EX_DATA ex_data; diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c index 7b98dc93..557d609c 100644 --- a/crypto/bio/bio_lib.c +++ b/crypto/bio/bio_lib.c @@ -13,13 +13,69 @@ #include "bio_lcl.h" #include "internal/cryptlib.h" + +/* + * Helper macro for the callback to determine whether an operator expects a + * len parameter or not + */ +#define HAS_LEN_OPER(o) ((o) == BIO_CB_READ || (o) == BIO_CB_WRITE || \ + (o) == BIO_CB_GETS) + +/* + * Helper function to work out whether to call the new style callback or the old + * one, and translate between the two. + * + * This has a long return type for consistency with the old callback. Similarly + * for the "long" used for "inret" + */ +static long bio_call_callback(BIO *b, int oper, const char *argp, size_t len, + int argi, long argl, long inret, size_t *processed) +{ + long ret; + int bareoper; + + if (b->callback_ex != NULL) { + return b->callback_ex(b, oper, argp, len, argi, argl, inret, processed); + } + + /* Strip off any BIO_CB_RETURN flag */ + bareoper = oper & ~BIO_CB_RETURN; + + /* + * We have an old style callback, so we will have to do nasty casts and + * check for overflows. + */ + if (HAS_LEN_OPER(bareoper)) { + /* In this case |len| is set, and should be used instead of |argi| */ + if (len > INT_MAX) + return -1; + + argi = (int)len; + + if (inret && (oper & BIO_CB_RETURN)) { + if (*processed > INT_MAX) + return -1; + inret = *processed; + } + } + + ret = b->callback(b, oper, argp, argi, argl, inret); + + if (ret >= 0 && (HAS_LEN_OPER(bareoper) || bareoper == BIO_CB_PUTS)) { + *processed = (size_t)ret; + ret = 1; + } + + return ret; +} + BIO *BIO_new(const BIO_METHOD *method) { BIO *bio = OPENSSL_zalloc(sizeof(*bio)); if (bio == NULL) { BIOerr(BIO_F_BIO_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } bio->method = method; @@ -54,21 +110,24 @@ err: int BIO_free(BIO *a) { - int i; + int ret; if (a == NULL) return 0; - if (CRYPTO_atomic_add(&a->references, -1, &i, a->lock) <= 0) + if (CRYPTO_DOWN_REF(&a->references, &ret, a->lock) <= 0) return 0; REF_PRINT_COUNT("BIO", a); - if (i > 0) + if (ret > 0) return 1; - REF_ASSERT_ISNT(i < 0); - if ((a->callback != NULL) && - ((i = (int)a->callback(a, BIO_CB_FREE, NULL, 0, 0L, 1L)) <= 0)) - return i; + REF_ASSERT_ISNT(ret < 0); + + if (a->callback != NULL || a->callback_ex != NULL) { + ret = (int)bio_call_callback(a, BIO_CB_FREE, NULL, 0, 0, 0L, 1L, NULL); + if (ret <= 0) + return ret; + } if ((a->method != NULL) && (a->method->destroy != NULL)) a->method->destroy(a); @@ -121,7 +180,7 @@ int BIO_up_ref(BIO *a) { int i; - if (CRYPTO_atomic_add(&a->references, 1, &i, a->lock) <= 0) + if (CRYPTO_UP_REF(&a->references, &i, a->lock) <= 0) return 0; REF_PRINT_COUNT("BIO", a); @@ -144,18 +203,26 @@ void BIO_set_flags(BIO *b, int flags) b->flags |= flags; } -long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *, - int, long, long) { +BIO_callback_fn BIO_get_callback(const BIO *b) +{ return b->callback; } -void BIO_set_callback(BIO *b, - long (*cb) (struct bio_st *, int, const char *, int, - long, long)) +void BIO_set_callback(BIO *b, BIO_callback_fn cb) { b->callback = cb; } +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b) +{ + return b->callback_ex; +} + +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex cb) +{ + b->callback_ex = cb; +} + void BIO_set_callback_arg(BIO *b, char *arg) { b->cb_arg = arg; @@ -176,124 +243,239 @@ int BIO_method_type(const BIO *b) return b->method->type; } -int BIO_read(BIO *b, void *out, int outl) +/* + * This is essentially the same as BIO_read_ex() except that it allows + * 0 or a negative value to indicate failure (retryable or not) in the return. + * This is for compatibility with the old style BIO_read(), where existing code + * may make assumptions about the return value that it might get. + */ +static int bio_read_intern(BIO *b, void *data, size_t dlen, size_t *readbytes) { - int i; - long (*cb) (BIO *, int, const char *, int, long, long); + int ret; if ((b == NULL) || (b->method == NULL) || (b->method->bread == NULL)) { - BIOerr(BIO_F_BIO_READ, BIO_R_UNSUPPORTED_METHOD); - return (-2); + BIOerr(BIO_F_BIO_READ_INTERN, BIO_R_UNSUPPORTED_METHOD); + return -2; } - cb = b->callback; - if ((cb != NULL) && - ((i = (int)cb(b, BIO_CB_READ, out, outl, 0L, 1L)) <= 0)) - return (i); + if ((b->callback != NULL || b->callback_ex != NULL) && + ((ret = (int)bio_call_callback(b, BIO_CB_READ, data, dlen, 0, 0L, 1L, + readbytes)) <= 0)) + return ret; if (!b->init) { - BIOerr(BIO_F_BIO_READ, BIO_R_UNINITIALIZED); - return (-2); + BIOerr(BIO_F_BIO_READ_INTERN, BIO_R_UNINITIALIZED); + return -2; } - i = b->method->bread(b, out, outl); + ret = b->method->bread(b, data, dlen, readbytes); - if (i > 0) - b->num_read += (uint64_t)i; + if (ret > 0) + b->num_read += (uint64_t)*readbytes; - if (cb != NULL) - i = (int)cb(b, BIO_CB_READ | BIO_CB_RETURN, out, outl, 0L, (long)i); - return (i); + if (b->callback != NULL || b->callback_ex != NULL) + ret = (int)bio_call_callback(b, BIO_CB_READ | BIO_CB_RETURN, data, + dlen, 0, 0L, ret, readbytes); + + /* Shouldn't happen */ + if (ret > 0 && *readbytes > dlen) { + BIOerr(BIO_F_BIO_READ_INTERN, ERR_R_INTERNAL_ERROR); + return -1; + } + + return ret; } -int BIO_write(BIO *b, const void *in, int inl) +int BIO_read(BIO *b, void *data, int dlen) { - int i; - long (*cb) (BIO *, int, const char *, int, long, long); + size_t readbytes; + int ret; + + if (dlen < 0) + return 0; + + ret = bio_read_intern(b, data, (size_t)dlen, &readbytes); + + if (ret > 0) { + /* *readbytes should always be <= dlen */ + ret = (int)readbytes; + } + + return ret; +} + +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes) +{ + int ret; + + ret = bio_read_intern(b, data, dlen, readbytes); + + if (ret > 0) + ret = 1; + else + ret = 0; + + return ret; +} + +static int bio_write_intern(BIO *b, const void *data, size_t dlen, + size_t *written) +{ + int ret; if (b == NULL) - return (0); + return 0; - cb = b->callback; if ((b->method == NULL) || (b->method->bwrite == NULL)) { - BIOerr(BIO_F_BIO_WRITE, BIO_R_UNSUPPORTED_METHOD); - return (-2); + BIOerr(BIO_F_BIO_WRITE_INTERN, BIO_R_UNSUPPORTED_METHOD); + return -2; } - if ((cb != NULL) && - ((i = (int)cb(b, BIO_CB_WRITE, in, inl, 0L, 1L)) <= 0)) - return (i); + if ((b->callback != NULL || b->callback_ex != NULL) && + ((ret = (int)bio_call_callback(b, BIO_CB_WRITE, data, dlen, 0, 0L, 1L, + written)) <= 0)) + return ret; if (!b->init) { - BIOerr(BIO_F_BIO_WRITE, BIO_R_UNINITIALIZED); - return (-2); + BIOerr(BIO_F_BIO_WRITE_INTERN, BIO_R_UNINITIALIZED); + return -2; } - i = b->method->bwrite(b, in, inl); + ret = b->method->bwrite(b, data, dlen, written); - if (i > 0) - b->num_write += (uint64_t)i; + if (ret > 0) + b->num_write += (uint64_t)*written; - if (cb != NULL) - i = (int)cb(b, BIO_CB_WRITE | BIO_CB_RETURN, in, inl, 0L, (long)i); - return (i); + if (b->callback != NULL || b->callback_ex != NULL) + ret = (int)bio_call_callback(b, BIO_CB_WRITE | BIO_CB_RETURN, data, + dlen, 0, 0L, ret, written); + + return ret; } -int BIO_puts(BIO *b, const char *in) +int BIO_write(BIO *b, const void *data, int dlen) { - int i; - long (*cb) (BIO *, int, const char *, int, long, long); + size_t written; + int ret; + + if (dlen < 0) + return 0; + + ret = bio_write_intern(b, data, (size_t)dlen, &written); + + if (ret > 0) { + /* *written should always be <= dlen */ + ret = (int)written; + } + + return ret; +} + +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written) +{ + int ret; + + ret = bio_write_intern(b, data, dlen, written); + + if (ret > 0) + ret = 1; + else + ret = 0; + + return ret; +} + +int BIO_puts(BIO *b, const char *buf) +{ + int ret; + size_t written = 0; if ((b == NULL) || (b->method == NULL) || (b->method->bputs == NULL)) { BIOerr(BIO_F_BIO_PUTS, BIO_R_UNSUPPORTED_METHOD); - return (-2); + return -2; } - cb = b->callback; - - if ((cb != NULL) && ((i = (int)cb(b, BIO_CB_PUTS, in, 0, 0L, 1L)) <= 0)) - return (i); + if (b->callback != NULL || b->callback_ex != NULL) { + ret = (int)bio_call_callback(b, BIO_CB_PUTS, buf, 0, 0, 0L, 1L, NULL); + if (ret <= 0) + return ret; + } if (!b->init) { BIOerr(BIO_F_BIO_PUTS, BIO_R_UNINITIALIZED); - return (-2); + return -2; } - i = b->method->bputs(b, in); + ret = b->method->bputs(b, buf); - if (i > 0) - b->num_write += (uint64_t)i; + if (ret > 0) { + b->num_write += (uint64_t)ret; + written = ret; + ret = 1; + } - if (cb != NULL) - i = (int)cb(b, BIO_CB_PUTS | BIO_CB_RETURN, in, 0, 0L, (long)i); - return (i); + if (b->callback != NULL || b->callback_ex != NULL) + ret = (int)bio_call_callback(b, BIO_CB_PUTS | BIO_CB_RETURN, buf, 0, 0, + 0L, ret, &written); + + if (ret > 0) { + if (written > INT_MAX) { + BIOerr(BIO_F_BIO_PUTS, BIO_R_LENGTH_TOO_LONG); + ret = -1; + } else { + ret = (int)written; + } + } + + return ret; } -int BIO_gets(BIO *b, char *in, int inl) +int BIO_gets(BIO *b, char *buf, int size) { - int i; - long (*cb) (BIO *, int, const char *, int, long, long); + int ret; + size_t readbytes = 0; if ((b == NULL) || (b->method == NULL) || (b->method->bgets == NULL)) { BIOerr(BIO_F_BIO_GETS, BIO_R_UNSUPPORTED_METHOD); - return (-2); + return -2; } - cb = b->callback; + if (size < 0) { + BIOerr(BIO_F_BIO_GETS, BIO_R_INVALID_ARGUMENT); + return 0; + } - if ((cb != NULL) && ((i = (int)cb(b, BIO_CB_GETS, in, inl, 0L, 1L)) <= 0)) - return (i); + if (b->callback != NULL || b->callback_ex != NULL) { + ret = (int)bio_call_callback(b, BIO_CB_GETS, buf, size, 0, 0L, 1, NULL); + if (ret <= 0) + return ret; + } if (!b->init) { BIOerr(BIO_F_BIO_GETS, BIO_R_UNINITIALIZED); - return (-2); + return -2; } - i = b->method->bgets(b, in, inl); + ret = b->method->bgets(b, buf, size); - if (cb != NULL) - i = (int)cb(b, BIO_CB_GETS | BIO_CB_RETURN, in, inl, 0L, (long)i); - return (i); + if (ret > 0) { + readbytes = ret; + ret = 1; + } + + if (b->callback != NULL || b->callback_ex != NULL) + ret = (int)bio_call_callback(b, BIO_CB_GETS | BIO_CB_RETURN, buf, size, + 0, 0L, ret, &readbytes); + + if (ret > 0) { + /* Shouldn't happen */ + if (readbytes > (size_t)size) + ret = -1; + else + ret = (int)readbytes; + } + + return ret; } int BIO_indent(BIO *b, int indent, int max) @@ -313,7 +495,7 @@ long BIO_int_ctrl(BIO *b, int cmd, long larg, int iarg) int i; i = iarg; - return (BIO_ctrl(b, cmd, larg, (char *)&i)); + return BIO_ctrl(b, cmd, larg, (char *)&i); } void *BIO_ptr_ctrl(BIO *b, int cmd, long larg) @@ -321,61 +503,64 @@ void *BIO_ptr_ctrl(BIO *b, int cmd, long larg) void *p = NULL; if (BIO_ctrl(b, cmd, larg, (char *)&p) <= 0) - return (NULL); + return NULL; else - return (p); + return p; } long BIO_ctrl(BIO *b, int cmd, long larg, void *parg) { long ret; - long (*cb) (BIO *, int, const char *, int, long, long); if (b == NULL) - return (0); + return 0; if ((b->method == NULL) || (b->method->ctrl == NULL)) { BIOerr(BIO_F_BIO_CTRL, BIO_R_UNSUPPORTED_METHOD); - return (-2); + return -2; } - cb = b->callback; - - if ((cb != NULL) && - ((ret = cb(b, BIO_CB_CTRL, parg, cmd, larg, 1L)) <= 0)) - return (ret); + if (b->callback != NULL || b->callback_ex != NULL) { + ret = bio_call_callback(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1L, NULL); + if (ret <= 0) + return ret; + } ret = b->method->ctrl(b, cmd, larg, parg); - if (cb != NULL) - ret = cb(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, cmd, larg, ret); - return (ret); + if (b->callback != NULL || b->callback_ex != NULL) + ret = bio_call_callback(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, 0, cmd, + larg, ret, NULL); + + return ret; } long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) { long ret; - long (*cb) (BIO *, int, const char *, int, long, long); if (b == NULL) - return (0); + return 0; if ((b->method == NULL) || (b->method->callback_ctrl == NULL)) { BIOerr(BIO_F_BIO_CALLBACK_CTRL, BIO_R_UNSUPPORTED_METHOD); - return (-2); + return -2; } - cb = b->callback; - - if ((cb != NULL) && - ((ret = cb(b, BIO_CB_CTRL, (void *)&fp, cmd, 0, 1L)) <= 0)) - return (ret); + if (b->callback != NULL || b->callback_ex != NULL) { + ret = bio_call_callback(b, BIO_CB_CTRL, (void *)&fp, 0, cmd, 0, 1L, + NULL); + if (ret <= 0) + return ret; + } ret = b->method->callback_ctrl(b, cmd, fp); - if (cb != NULL) - ret = cb(b, BIO_CB_CTRL | BIO_CB_RETURN, (void *)&fp, cmd, 0, ret); - return (ret); + if (b->callback != NULL || b->callback_ex != NULL) + ret = bio_call_callback(b, BIO_CB_CTRL | BIO_CB_RETURN, (void *)&fp, 0, + cmd, 0, ret, NULL); + + return ret; } /* @@ -399,7 +584,7 @@ BIO *BIO_push(BIO *b, BIO *bio) BIO *lb; if (b == NULL) - return (bio); + return bio; lb = b; while (lb->next_bio != NULL) lb = lb->next_bio; @@ -408,7 +593,7 @@ BIO *BIO_push(BIO *b, BIO *bio) bio->prev_bio = lb; /* called to do internal processing */ BIO_ctrl(b, BIO_CTRL_PUSH, 0, lb); - return (b); + return b; } /* Remove the first and return the rest */ @@ -417,7 +602,7 @@ BIO *BIO_pop(BIO *b) BIO *ret; if (b == NULL) - return (NULL); + return NULL; ret = b->next_bio; BIO_ctrl(b, BIO_CTRL_POP, 0, b); @@ -429,7 +614,7 @@ BIO *BIO_pop(BIO *b) b->next_bio = NULL; b->prev_bio = NULL; - return (ret); + return ret; } BIO *BIO_get_retry_BIO(BIO *bio, int *reason) @@ -447,12 +632,12 @@ BIO *BIO_get_retry_BIO(BIO *bio, int *reason) } if (reason != NULL) *reason = last->retry_reason; - return (last); + return last; } int BIO_get_retry_reason(BIO *bio) { - return (bio->retry_reason); + return bio->retry_reason; } void BIO_set_retry_reason(BIO *bio, int reason) @@ -473,13 +658,13 @@ BIO *BIO_find_type(BIO *bio, int type) if (!mask) { if (mt & type) - return (bio); + return bio; } else if (mt == type) - return (bio); + return bio; } bio = bio->next_bio; } while (bio != NULL); - return (NULL); + return NULL; } BIO *BIO_next(BIO *b) @@ -518,6 +703,7 @@ BIO *BIO_dup_chain(BIO *in) if ((new_bio = BIO_new(bio->method)) == NULL) goto err; new_bio->callback = bio->callback; + new_bio->callback_ex = bio->callback_ex; new_bio->cb_arg = bio->cb_arg; new_bio->init = bio->init; new_bio->shutdown = bio->shutdown; @@ -546,11 +732,11 @@ BIO *BIO_dup_chain(BIO *in) eoc = new_bio; } } - return (ret); + return ret; err: BIO_free_all(ret); - return (NULL); + return NULL; } void BIO_copy_next_retry(BIO *b) @@ -561,12 +747,12 @@ void BIO_copy_next_retry(BIO *b) int BIO_set_ex_data(BIO *bio, int idx, void *data) { - return (CRYPTO_set_ex_data(&(bio->ex_data), idx, data)); + return CRYPTO_set_ex_data(&(bio->ex_data), idx, data); } void *BIO_get_ex_data(BIO *bio, int idx) { - return (CRYPTO_get_ex_data(&(bio->ex_data), idx)); + return CRYPTO_get_ex_data(&(bio->ex_data), idx); } uint64_t BIO_number_read(BIO *bio) diff --git a/crypto/bio/bio_meth.c b/crypto/bio/bio_meth.c index 1e785d34..4c157c07 100644 --- a/crypto/bio/bio_meth.c +++ b/crypto/bio/bio_meth.c @@ -8,7 +8,7 @@ */ #include "bio_lcl.h" -#include +#include "internal/thread_once.h" CRYPTO_RWLOCK *bio_type_lock = NULL; static CRYPTO_ONCE bio_type_init = CRYPTO_ONCE_STATIC_INIT; @@ -21,14 +21,14 @@ DEFINE_RUN_ONCE_STATIC(do_bio_type_init) int BIO_get_new_index() { - static int bio_count = BIO_TYPE_START; + static CRYPTO_REF_COUNT bio_count = BIO_TYPE_START; int newval; if (!RUN_ONCE(&bio_type_init, do_bio_type_init)) { BIOerr(BIO_F_BIO_GET_NEW_INDEX, ERR_R_MALLOC_FAILURE); return -1; } - if (!CRYPTO_atomic_add(&bio_count, 1, &newval, bio_type_lock)) + if (!CRYPTO_UP_REF(&bio_count, &newval, bio_type_lock)) return -1; return newval; } @@ -43,6 +43,7 @@ BIO_METHOD *BIO_meth_new(int type, const char *name) BIOerr(BIO_F_BIO_METH_NEW, ERR_R_MALLOC_FAILURE); return NULL; } + biom->type = type; return biom; } @@ -55,25 +56,94 @@ void BIO_meth_free(BIO_METHOD *biom) } int (*BIO_meth_get_write(BIO_METHOD *biom)) (BIO *, const char *, int) +{ + return biom->bwrite_old; +} + +int (*BIO_meth_get_write_ex(BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *) { return biom->bwrite; } +/* Conversion for old style bwrite to new style */ +int bwrite_conv(BIO *bio, const char *data, size_t datal, size_t *written) +{ + int ret; + + if (datal > INT_MAX) + datal = INT_MAX; + + ret = bio->method->bwrite_old(bio, data, (int)datal); + + if (ret <= 0) { + *written = 0; + return ret; + } + + *written = (size_t)ret; + + return 1; +} + int BIO_meth_set_write(BIO_METHOD *biom, int (*bwrite) (BIO *, const char *, int)) { + biom->bwrite_old = bwrite; + biom->bwrite = bwrite_conv; + return 1; +} + +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)) +{ + biom->bwrite_old = NULL; biom->bwrite = bwrite; return 1; } int (*BIO_meth_get_read(BIO_METHOD *biom)) (BIO *, char *, int) +{ + return biom->bread_old; +} + +int (*BIO_meth_get_read_ex(BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *) { return biom->bread; } +/* Conversion for old style bread to new style */ +int bread_conv(BIO *bio, char *data, size_t datal, size_t *readbytes) +{ + int ret; + + if (datal > INT_MAX) + datal = INT_MAX; + + ret = bio->method->bread_old(bio, data, (int)datal); + + if (ret <= 0) { + *readbytes = 0; + return ret; + } + + *readbytes = (size_t)ret; + + return 1; +} + int BIO_meth_set_read(BIO_METHOD *biom, int (*bread) (BIO *, char *, int)) { + biom->bread_old = bread; + biom->bread = bread_conv; + return 1; +} + +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)) +{ + biom->bread_old = NULL; biom->bread = bread; return 1; } diff --git a/crypto/bio/bss_acpt.c b/crypto/bio/bss_acpt.c index 21d21c16..b7ec0c0d 100644 --- a/crypto/bio/bss_acpt.c +++ b/crypto/bio/bss_acpt.c @@ -54,7 +54,11 @@ static void BIO_ACCEPT_free(BIO_ACCEPT *a); static const BIO_METHOD methods_acceptp = { BIO_TYPE_ACCEPT, "socket accept", + /* TODO: Convert to new style write function */ + bwrite_conv, acpt_write, + /* TODO: Convert to new style read function */ + bread_conv, acpt_read, acpt_puts, NULL, /* connect_gets, */ @@ -66,7 +70,7 @@ static const BIO_METHOD methods_acceptp = { const BIO_METHOD *BIO_s_accept(void) { - return (&methods_acceptp); + return &methods_acceptp; } static int acpt_new(BIO *bi) @@ -77,11 +81,11 @@ static int acpt_new(BIO *bi) bi->num = (int)INVALID_SOCKET; bi->flags = 0; if ((ba = BIO_ACCEPT_new()) == NULL) - return (0); + return 0; bi->ptr = (char *)ba; ba->state = ACPT_S_BEFORE; bi->shutdown = 1; - return (1); + return 1; } static BIO_ACCEPT *BIO_ACCEPT_new(void) @@ -89,10 +93,10 @@ static BIO_ACCEPT *BIO_ACCEPT_new(void) BIO_ACCEPT *ret; if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) - return (NULL); + return NULL; ret->accept_family = BIO_FAMILY_IPANY; ret->accept_sock = (int)INVALID_SOCKET; - return (ret); + return ret; } static void BIO_ACCEPT_free(BIO_ACCEPT *a) @@ -129,7 +133,7 @@ static int acpt_free(BIO *a) BIO_ACCEPT *data; if (a == NULL) - return (0); + return 0; data = (BIO_ACCEPT *)a->ptr; if (a->shutdown) { @@ -139,7 +143,7 @@ static int acpt_free(BIO *a) a->flags = 0; a->init = 0; } - return (1); + return 1; } static int acpt_state(BIO *b, BIO_ACCEPT *c) @@ -360,12 +364,12 @@ static int acpt_read(BIO *b, char *out, int outl) while (b->next_bio == NULL) { ret = acpt_state(b, data); if (ret <= 0) - return (ret); + return ret; } ret = BIO_read(b->next_bio, out, outl); BIO_copy_next_retry(b); - return (ret); + return ret; } static int acpt_write(BIO *b, const char *in, int inl) @@ -379,12 +383,12 @@ static int acpt_write(BIO *b, const char *in, int inl) while (b->next_bio == NULL) { ret = acpt_state(b, data); if (ret <= 0) - return (ret); + return ret; } ret = BIO_write(b->next_bio, in, inl); BIO_copy_next_retry(b); - return (ret); + return ret; } static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -451,7 +455,6 @@ static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr) data->accepted_mode &= ~BIO_SOCK_NONBLOCK; break; case BIO_C_SET_FD: - b->init = 1; b->num = *((int *)ptr); data->accept_sock = b->num; data->state = ACPT_S_ACCEPT; @@ -522,19 +525,13 @@ static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr) ret = (long)data->bind_mode; break; case BIO_CTRL_DUP: -/*- dbio=(BIO *)ptr; - if (data->param_port) EAY EAY - BIO_set_port(dbio,data->param_port); - if (data->param_hostname) - BIO_set_hostname(dbio,data->param_hostname); - BIO_set_nbio(dbio,data->nbio); */ break; default: ret = 0; break; } - return (ret); + return ret; } static int acpt_puts(BIO *bp, const char *str) @@ -543,7 +540,7 @@ static int acpt_puts(BIO *bp, const char *str) n = strlen(str); ret = acpt_write(bp, str, n); - return (ret); + return ret; } BIO *BIO_new_accept(const char *str) @@ -552,11 +549,11 @@ BIO *BIO_new_accept(const char *str) ret = BIO_new(BIO_s_accept()); if (ret == NULL) - return (NULL); + return NULL; if (BIO_set_accept_name(ret, str)) - return (ret); + return ret; BIO_free(ret); - return (NULL); + return NULL; } #endif diff --git a/crypto/bio/bss_bio.c b/crypto/bio/bss_bio.c index de34f6bf..e34382c5 100644 --- a/crypto/bio/bss_bio.c +++ b/crypto/bio/bss_bio.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -15,6 +15,7 @@ * See ssl/ssltest.c for some hints on how this can be used. */ +#include "e_os.h" #include #include #include @@ -24,8 +25,6 @@ #include #include -#include "e_os.h" - static int bio_new(BIO *bio); static int bio_free(BIO *bio); static int bio_read(BIO *bio, char *buf, int size); @@ -39,7 +38,11 @@ static void bio_destroy_pair(BIO *bio); static const BIO_METHOD methods_biop = { BIO_TYPE_BIO, "BIO pair", + /* TODO: Convert to new style write function */ + bwrite_conv, bio_write, + /* TODO: Convert to new style read function */ + bread_conv, bio_read, bio_puts, NULL /* no bio_gets */ , diff --git a/crypto/bio/bss_conn.c b/crypto/bio/bss_conn.c index e343bcdd..5c461ae7 100644 --- a/crypto/bio/bss_conn.c +++ b/crypto/bio/bss_conn.c @@ -58,7 +58,11 @@ void BIO_CONNECT_free(BIO_CONNECT *a); static const BIO_METHOD methods_connectp = { BIO_TYPE_CONNECT, "socket connect", + /* TODO: Convert to new style write function */ + bwrite_conv, conn_write, + /* TODO: Convert to new style read function */ + bread_conv, conn_read, conn_puts, NULL, /* conn_gets, */ @@ -212,7 +216,7 @@ static int conn_state(BIO *b, BIO_CONNECT *c) if (cb != NULL) ret = cb((BIO *)b, c->state, ret); end: - return (ret); + return ret; } BIO_CONNECT *BIO_CONNECT_new(void) @@ -220,10 +224,10 @@ BIO_CONNECT *BIO_CONNECT_new(void) BIO_CONNECT *ret; if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) - return (NULL); + return NULL; ret->state = BIO_CONN_S_BEFORE; ret->connect_family = BIO_FAMILY_IPANY; - return (ret); + return ret; } void BIO_CONNECT_free(BIO_CONNECT *a) @@ -239,7 +243,7 @@ void BIO_CONNECT_free(BIO_CONNECT *a) const BIO_METHOD *BIO_s_connect(void) { - return (&methods_connectp); + return &methods_connectp; } static int conn_new(BIO *bi) @@ -248,9 +252,9 @@ static int conn_new(BIO *bi) bi->num = (int)INVALID_SOCKET; bi->flags = 0; if ((bi->ptr = (char *)BIO_CONNECT_new()) == NULL) - return (0); + return 0; else - return (1); + return 1; } static void conn_close_socket(BIO *bio) @@ -272,7 +276,7 @@ static int conn_free(BIO *a) BIO_CONNECT *data; if (a == NULL) - return (0); + return 0; data = (BIO_CONNECT *)a->ptr; if (a->shutdown) { @@ -282,7 +286,7 @@ static int conn_free(BIO *a) a->flags = 0; a->init = 0; } - return (1); + return 1; } static int conn_read(BIO *b, char *out, int outl) @@ -294,7 +298,7 @@ static int conn_read(BIO *b, char *out, int outl) if (data->state != BIO_CONN_S_OK) { ret = conn_state(b, data); if (ret <= 0) - return (ret); + return ret; } if (out != NULL) { @@ -306,7 +310,7 @@ static int conn_read(BIO *b, char *out, int outl) BIO_set_retry_read(b); } } - return (ret); + return ret; } static int conn_write(BIO *b, const char *in, int inl) @@ -318,7 +322,7 @@ static int conn_write(BIO *b, const char *in, int inl) if (data->state != BIO_CONN_S_OK) { ret = conn_state(b, data); if (ret <= 0) - return (ret); + return ret; } clear_socket_error(); @@ -328,7 +332,7 @@ static int conn_write(BIO *b, const char *in, int inl) if (BIO_sock_should_retry(ret)) BIO_set_retry_write(b); } - return (ret); + return ret; } static long conn_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -473,15 +477,7 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr) } break; case BIO_CTRL_SET_CALLBACK: - { -# if 0 /* FIXME: Should this be used? -- Richard - * Levitte */ - BIOerr(BIO_F_CONN_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - ret = -1; -# else - ret = 0; -# endif - } + ret = 0; /* use callback ctrl */ break; case BIO_CTRL_GET_CALLBACK: { @@ -495,7 +491,7 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static long conn_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -515,7 +511,7 @@ static long conn_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) ret = 0; break; } - return (ret); + return ret; } static int conn_puts(BIO *bp, const char *str) @@ -524,7 +520,7 @@ static int conn_puts(BIO *bp, const char *str) n = strlen(str); ret = conn_write(bp, str, n); - return (ret); + return ret; } BIO *BIO_new_connect(const char *str) @@ -533,11 +529,11 @@ BIO *BIO_new_connect(const char *str) ret = BIO_new(BIO_s_connect()); if (ret == NULL) - return (NULL); + return NULL; if (BIO_set_conn_hostname(ret, str)) - return (ret); + return ret; BIO_free(ret); - return (NULL); + return NULL; } #endif diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c index c772d956..90b250eb 100644 --- a/crypto/bio/bss_dgram.c +++ b/crypto/bio/bss_dgram.c @@ -1,5 +1,5 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -13,13 +13,6 @@ #include "bio_lcl.h" #ifndef OPENSSL_NO_DGRAM -# if !(defined(_WIN32) || defined(OPENSSL_SYS_VMS)) -# include -# endif -# if defined(OPENSSL_SYS_VMS) -# include -# endif - # ifndef OPENSSL_NO_SCTP # include # include @@ -73,7 +66,11 @@ static void get_current_time(struct timeval *t); static const BIO_METHOD methods_dgramp = { BIO_TYPE_DGRAM, "datagram socket", + /* TODO: Convert to new style write function */ + bwrite_conv, dgram_write, + /* TODO: Convert to new style read function */ + bread_conv, dgram_read, dgram_puts, NULL, /* dgram_gets, */ @@ -87,7 +84,11 @@ static const BIO_METHOD methods_dgramp = { static const BIO_METHOD methods_dgramp_sctp = { BIO_TYPE_DGRAM_SCTP, "datagram sctp socket", + /* TODO: Convert to new style write function */ + bwrite_conv, dgram_sctp_write, + /* TODO: Convert to new style write function */ + bread_conv, dgram_sctp_read, dgram_sctp_puts, NULL, /* dgram_gets, */ @@ -135,7 +136,7 @@ typedef struct bio_dgram_sctp_data_st { const BIO_METHOD *BIO_s_datagram(void) { - return (&methods_dgramp); + return &methods_dgramp; } BIO *BIO_new_dgram(int fd, int close_flag) @@ -144,9 +145,9 @@ BIO *BIO_new_dgram(int fd, int close_flag) ret = BIO_new(BIO_s_datagram()); if (ret == NULL) - return (NULL); + return NULL; BIO_set_fd(ret, fd, close_flag); - return (ret); + return ret; } static int dgram_new(BIO *bi) @@ -156,7 +157,7 @@ static int dgram_new(BIO *bi) if (data == NULL) return 0; bi->ptr = data; - return (1); + return 1; } static int dgram_free(BIO *a) @@ -164,20 +165,20 @@ static int dgram_free(BIO *a) bio_dgram_data *data; if (a == NULL) - return (0); + return 0; if (!dgram_clear(a)) return 0; data = (bio_dgram_data *)a->ptr; OPENSSL_free(data); - return (1); + return 1; } static int dgram_clear(BIO *a) { if (a == NULL) - return (0); + return 0; if (a->shutdown) { if (a->init) { BIO_closesocket(a->num); @@ -185,7 +186,7 @@ static int dgram_clear(BIO *a) a->init = 0; a->flags = 0; } - return (1); + return 1; } static void dgram_adjust_rcv_timeout(BIO *b) @@ -324,7 +325,7 @@ static int dgram_read(BIO *b, char *out, int outl) dgram_reset_rcv_timeout(b); } - return (ret); + return ret; } static int dgram_write(BIO *b, const char *in, int inl) @@ -338,13 +339,8 @@ static int dgram_write(BIO *b, const char *in, int inl) else { int peerlen = BIO_ADDR_sockaddr_size(&data->peer); -# if defined(NETWARE_CLIB) && defined(NETWARE_BSDSOCK) - ret = sendto(b->num, (char *)in, inl, 0, - BIO_ADDR_sockaddr(&data->peer), peerlen); -# else ret = sendto(b->num, in, inl, 0, BIO_ADDR_sockaddr(&data->peer), peerlen); -# endif } BIO_clear_retry_flags(b); @@ -354,7 +350,7 @@ static int dgram_write(BIO *b, const char *in, int inl) data->_errno = get_last_socket_error(); } } - return (ret); + return ret; } static long dgram_get_mtu_overhead(bio_dgram_data *data) @@ -798,7 +794,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static int dgram_puts(BIO *bp, const char *str) @@ -807,13 +803,13 @@ static int dgram_puts(BIO *bp, const char *str) n = strlen(str); ret = dgram_write(bp, str, n); - return (ret); + return ret; } # ifndef OPENSSL_NO_SCTP const BIO_METHOD *BIO_s_datagram_sctp(void) { - return (&methods_dgramp_sctp); + return &methods_dgramp_sctp; } BIO *BIO_new_dgram_sctp(int fd, int close_flag) @@ -835,7 +831,7 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) bio = BIO_new(BIO_s_datagram_sctp()); if (bio == NULL) - return (NULL); + return NULL; BIO_set_fd(bio, fd, close_flag); /* Activate SCTP-AUTH for DATA and FORWARD-TSN chunks */ @@ -845,7 +841,9 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) sizeof(struct sctp_authchunk)); if (ret < 0) { BIO_vfree(bio); - return (NULL); + BIOerr(BIO_F_BIO_NEW_DGRAM_SCTP, ERR_R_SYS_LIB); + ERR_add_error_data(1, "Ensure SCTP AUTH chunks are enabled in kernel"); + return NULL; } auth.sauth_chunk = OPENSSL_SCTP_FORWARD_CUM_TSN_CHUNK_TYPE; ret = @@ -853,26 +851,29 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) sizeof(struct sctp_authchunk)); if (ret < 0) { BIO_vfree(bio); - return (NULL); + BIOerr(BIO_F_BIO_NEW_DGRAM_SCTP, ERR_R_SYS_LIB); + ERR_add_error_data(1, "Ensure SCTP AUTH chunks are enabled in kernel"); + return NULL; } /* * Test if activation was successful. When using accept(), SCTP-AUTH has * to be activated for the listening socket already, otherwise the - * connected socket won't use it. + * connected socket won't use it. Similarly with connect(): the socket + * prior to connection must be activated for SCTP-AUTH */ sockopt_len = (socklen_t) (sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t)); authchunks = OPENSSL_zalloc(sockopt_len); if (authchunks == NULL) { BIO_vfree(bio); - return (NULL); + return NULL; } ret = getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks, &sockopt_len); if (ret < 0) { OPENSSL_free(authchunks); BIO_vfree(bio); - return (NULL); + return NULL; } for (p = (unsigned char *)authchunks->gauth_chunks; @@ -886,8 +887,14 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) OPENSSL_free(authchunks); - OPENSSL_assert(auth_data); - OPENSSL_assert(auth_forward); + if (!auth_data || !auth_forward) { + BIO_vfree(bio); + BIOerr(BIO_F_BIO_NEW_DGRAM_SCTP, ERR_R_SYS_LIB); + ERR_add_error_data(1, + "Ensure SCTP AUTH chunks are enabled on the " + "underlying socket"); + return NULL; + } # ifdef SCTP_AUTHENTICATION_EVENT # ifdef SCTP_EVENT @@ -900,14 +907,14 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) sizeof(struct sctp_event)); if (ret < 0) { BIO_vfree(bio); - return (NULL); + return NULL; } # else sockopt_len = (socklen_t) sizeof(struct sctp_event_subscribe); ret = getsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &event, &sockopt_len); if (ret < 0) { BIO_vfree(bio); - return (NULL); + return NULL; } event.sctp_authentication_event = 1; @@ -917,7 +924,7 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) sizeof(struct sctp_event_subscribe)); if (ret < 0) { BIO_vfree(bio); - return (NULL); + return NULL; } # endif # endif @@ -931,10 +938,10 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag) sizeof(optval)); if (ret < 0) { BIO_vfree(bio); - return (NULL); + return NULL; } - return (bio); + return bio; } int BIO_dgram_is_sctp(BIO *bio) @@ -957,7 +964,7 @@ static int dgram_sctp_new(BIO *bi) bi->ptr = data; bi->flags = 0; - return (1); + return 1; } static int dgram_sctp_free(BIO *a) @@ -965,7 +972,7 @@ static int dgram_sctp_free(BIO *a) bio_dgram_sctp_data *data; if (a == NULL) - return (0); + return 0; if (!dgram_clear(a)) return 0; @@ -973,7 +980,7 @@ static int dgram_sctp_free(BIO *a) if (data != NULL) OPENSSL_free(data); - return (1); + return 1; } # ifdef SCTP_AUTHENTICATION_EVENT @@ -1210,7 +1217,7 @@ static int dgram_sctp_read(BIO *b, char *out, int outl) data->peer_auth_tested = 1; } } - return (ret); + return ret; } /* @@ -1326,7 +1333,7 @@ static int dgram_sctp_write(BIO *b, const char *in, int inl) data->_errno = get_last_socket_error(); } } - return (ret); + return ret; } static long dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -1562,7 +1569,7 @@ static long dgram_sctp_ctrl(BIO *b, int cmd, long num, void *ptr) ret = dgram_ctrl(b, cmd, num, ptr); break; } - return (ret); + return ret; } int BIO_dgram_sctp_notification_cb(BIO *b, @@ -1819,7 +1826,7 @@ static int dgram_sctp_puts(BIO *bp, const char *str) n = strlen(str); ret = dgram_sctp_write(bp, str, n); - return (ret); + return ret; } # endif @@ -1838,9 +1845,9 @@ static int BIO_dgram_should_retry(int i) */ # endif - return (BIO_dgram_non_fatal_error(err)); + return BIO_dgram_non_fatal_error(err); } - return (0); + return 0; } int BIO_dgram_non_fatal_error(int err) @@ -1884,12 +1891,11 @@ int BIO_dgram_non_fatal_error(int err) case EALREADY: # endif - return (1); - /* break; */ + return 1; default: break; } - return (0); + return 0; } static void get_current_time(struct timeval *t) @@ -1910,11 +1916,6 @@ static void get_current_time(struct timeval *t) # endif t->tv_sec = (long)(now.ul / 10000000); t->tv_usec = ((int)(now.ul % 10000000)) / 10; -# elif defined(OPENSSL_SYS_VMS) - struct timeb tb; - ftime(&tb); - t->tv_sec = (long)tb.time; - t->tv_usec = (long)tb.millitm * 1000; # else gettimeofday(t, NULL); # endif diff --git a/crypto/bio/bss_fd.c b/crypto/bio/bss_fd.c index 2bd3517d..5bc539c9 100644 --- a/crypto/bio/bss_fd.c +++ b/crypto/bio/bss_fd.c @@ -60,7 +60,11 @@ int BIO_fd_should_retry(int s); static const BIO_METHOD methods_fdp = { BIO_TYPE_FD, "file descriptor", + /* TODO: Convert to new style write function */ + bwrite_conv, fd_write, + /* TODO: Convert to new style read function */ + bread_conv, fd_read, fd_puts, fd_gets, @@ -72,7 +76,7 @@ static const BIO_METHOD methods_fdp = { const BIO_METHOD *BIO_s_fd(void) { - return (&methods_fdp); + return &methods_fdp; } BIO *BIO_new_fd(int fd, int close_flag) @@ -80,9 +84,9 @@ BIO *BIO_new_fd(int fd, int close_flag) BIO *ret; ret = BIO_new(BIO_s_fd()); if (ret == NULL) - return (NULL); + return NULL; BIO_set_fd(ret, fd, close_flag); - return (ret); + return ret; } static int fd_new(BIO *bi) @@ -91,13 +95,13 @@ static int fd_new(BIO *bi) bi->num = -1; bi->ptr = NULL; bi->flags = BIO_FLAGS_UPLINK; /* essentially redundant */ - return (1); + return 1; } static int fd_free(BIO *a) { if (a == NULL) - return (0); + return 0; if (a->shutdown) { if (a->init) { UP_close(a->num); @@ -105,7 +109,7 @@ static int fd_free(BIO *a) a->init = 0; a->flags = BIO_FLAGS_UPLINK; } - return (1); + return 1; } static int fd_read(BIO *b, char *out, int outl) @@ -121,7 +125,7 @@ static int fd_read(BIO *b, char *out, int outl) BIO_set_retry_read(b); } } - return (ret); + return ret; } static int fd_write(BIO *b, const char *in, int inl) @@ -134,7 +138,7 @@ static int fd_write(BIO *b, const char *in, int inl) if (BIO_fd_should_retry(ret)) BIO_set_retry_write(b); } - return (ret); + return ret; } static long fd_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -186,7 +190,7 @@ static long fd_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static int fd_puts(BIO *bp, const char *str) @@ -195,7 +199,7 @@ static int fd_puts(BIO *bp, const char *str) n = strlen(str); ret = fd_write(bp, str, n); - return (ret); + return ret; } static int fd_gets(BIO *bp, char *buf, int size) @@ -204,14 +208,16 @@ static int fd_gets(BIO *bp, char *buf, int size) char *ptr = buf; char *end = buf + size - 1; - while ((ptr < end) && (fd_read(bp, ptr, 1) > 0) && (ptr[0] != '\n')) - ptr++; + while (ptr < end && fd_read(bp, ptr, 1) > 0) { + if (*ptr++ == '\n') + break; + } ptr[0] = '\0'; if (buf[0] != '\0') ret = strlen(buf); - return (ret); + return ret; } int BIO_fd_should_retry(int i) @@ -221,9 +227,9 @@ int BIO_fd_should_retry(int i) if ((i == 0) || (i == -1)) { err = get_last_sys_error(); - return (BIO_fd_non_fatal_error(err)); + return BIO_fd_non_fatal_error(err); } - return (0); + return 0; } int BIO_fd_non_fatal_error(int err) @@ -265,11 +271,10 @@ int BIO_fd_non_fatal_error(int err) # ifdef EALREADY case EALREADY: # endif - return (1); - /* break; */ + return 1; default: break; } - return (0); + return 0; } #endif diff --git a/crypto/bio/bss_file.c b/crypto/bio/bss_file.c index 2edf2448..8de23912 100644 --- a/crypto/bio/bss_file.c +++ b/crypto/bio/bss_file.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,12 +7,6 @@ * https://www.openssl.org/source/license.html */ -/*- - * 03-Dec-1997 rdenny@dc3.com Fix bug preventing use of stdin/stdout - * with binary data (e.g. asn1parse -inform DER < xxx) under - * Windows - */ - #ifndef HEADER_BSS_FILE_C # define HEADER_BSS_FILE_C @@ -51,7 +45,11 @@ static int file_free(BIO *data); static const BIO_METHOD methods_filep = { BIO_TYPE_FILE, "FILE pointer", + /* TODO: Convert to new style write function */ + bwrite_conv, file_write, + /* TODO: Convert to new style read function */ + bread_conv, file_read, file_puts, file_gets, @@ -81,17 +79,17 @@ BIO *BIO_new_file(const char *filename, const char *mode) BIOerr(BIO_F_BIO_NEW_FILE, BIO_R_NO_SUCH_FILE); else BIOerr(BIO_F_BIO_NEW_FILE, ERR_R_SYS_LIB); - return (NULL); + return NULL; } if ((ret = BIO_new(BIO_s_file())) == NULL) { fclose(file); - return (NULL); + return NULL; } BIO_clear_flags(ret, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage * UPLINK */ BIO_set_fp(ret, file, fp_flags); - return (ret); + return ret; } BIO *BIO_new_fp(FILE *stream, int close_flag) @@ -99,17 +97,17 @@ BIO *BIO_new_fp(FILE *stream, int close_flag) BIO *ret; if ((ret = BIO_new(BIO_s_file())) == NULL) - return (NULL); + return NULL; /* redundant flag, left for documentation purposes */ BIO_set_flags(ret, BIO_FLAGS_UPLINK); BIO_set_fp(ret, stream, close_flag); - return (ret); + return ret; } const BIO_METHOD *BIO_s_file(void) { - return (&methods_filep); + return &methods_filep; } static int file_new(BIO *bi) @@ -118,13 +116,13 @@ static int file_new(BIO *bi) bi->num = 0; bi->ptr = NULL; bi->flags = BIO_FLAGS_UPLINK; /* default to UPLINK */ - return (1); + return 1; } static int file_free(BIO *a) { if (a == NULL) - return (0); + return 0; if (a->shutdown) { if ((a->init) && (a->ptr != NULL)) { if (a->flags & BIO_FLAGS_UPLINK) @@ -136,7 +134,7 @@ static int file_free(BIO *a) } a->init = 0; } - return (1); + return 1; } static int file_read(BIO *b, char *out, int outl) @@ -156,7 +154,7 @@ static int file_read(BIO *b, char *out, int outl) ret = -1; } } - return (ret); + return ret; } static int file_write(BIO *b, const char *in, int inl) @@ -172,12 +170,12 @@ static int file_write(BIO *b, const char *in, int inl) ret = inl; /* ret=fwrite(in,1,(int)inl,(FILE *)b->ptr); */ /* - * according to Tim Hudson , the commented out + * according to Tim Hudson , the commented out * version above can cause 'inl' write calls under some stupid stdio * implementations (VMS) */ } - return (ret); + return ret; } static long file_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -283,9 +281,9 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr) } # if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32_CYGWIN) if (!(num & BIO_FP_TEXT)) - strcat(p, "b"); + OPENSSL_strlcat(p, "b", sizeof(p)); else - strcat(p, "t"); + OPENSSL_strlcat(p, "t", sizeof(p)); # endif fp = openssl_fopen(ptr, p); if (fp == NULL) { @@ -335,7 +333,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static int file_gets(BIO *bp, char *buf, int size) @@ -353,7 +351,7 @@ static int file_gets(BIO *bp, char *buf, int size) if (buf[0] != '\0') ret = strlen(buf); err: - return (ret); + return ret; } static int file_puts(BIO *bp, const char *str) @@ -362,7 +360,7 @@ static int file_puts(BIO *bp, const char *str) n = strlen(str); ret = file_write(bp, str, n); - return (ret); + return ret; } #else @@ -399,7 +397,11 @@ static int file_free(BIO *a) static const BIO_METHOD methods_filep = { BIO_TYPE_FILE, "FILE pointer", + /* TODO: Convert to new style write function */ + bwrite_conv, file_write, + /* TODO: Convert to new style read function */ + bread_conv, file_read, file_puts, file_gets, @@ -411,7 +413,7 @@ static const BIO_METHOD methods_filep = { const BIO_METHOD *BIO_s_file(void) { - return (&methods_filep); + return &methods_filep; } BIO *BIO_new_file(const char *filename, const char *mode) diff --git a/crypto/bio/bss_log.c b/crypto/bio/bss_log.c index 5221acc2..b04f7bbf 100644 --- a/crypto/bio/bss_log.c +++ b/crypto/bio/bss_log.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2017 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -39,8 +39,6 @@ void *_malloc32(__size_t); # endif /* __INITIAL_POINTER_SIZE == 64 */ # endif /* __INITIAL_POINTER_SIZE && defined * _ANSI_C_SOURCE */ -#elif defined(OPENSSL_SYS_NETWARE) -# define NO_SYSLOG #elif (!defined(MSDOS) || defined(WATT32)) && !defined(OPENSSL_SYS_VXWORKS) && !defined(NO_SYSLOG) # include #endif @@ -87,10 +85,13 @@ static void xcloselog(BIO *bp); static const BIO_METHOD methods_slg = { BIO_TYPE_MEM, "syslog", + /* TODO: Convert to new style write function */ + bwrite_conv, slg_write, + NULL, /* slg_write_old, */ NULL, /* slg_read, */ slg_puts, - NULL, /* slg_gets, */ + NULL, slg_ctrl, slg_new, slg_free, @@ -99,7 +100,7 @@ static const BIO_METHOD methods_slg = { const BIO_METHOD *BIO_s_log(void) { - return (&methods_slg); + return &methods_slg; } static int slg_new(BIO *bi) @@ -108,15 +109,15 @@ static int slg_new(BIO *bi) bi->num = 0; bi->ptr = NULL; xopenlog(bi, "application", LOG_DAEMON); - return (1); + return 1; } static int slg_free(BIO *a) { if (a == NULL) - return (0); + return 0; xcloselog(a); - return (1); + return 1; } static int slg_write(BIO *b, const char *in, int inl) @@ -194,7 +195,7 @@ static int slg_write(BIO *b, const char *in, int inl) }; if ((buf = OPENSSL_malloc(inl + 1)) == NULL) { - return (0); + return 0; } strncpy(buf, in, inl); buf[inl] = '\0'; @@ -208,7 +209,7 @@ static int slg_write(BIO *b, const char *in, int inl) xsyslog(b, priority, pp); OPENSSL_free(buf); - return (ret); + return ret; } static long slg_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -221,7 +222,7 @@ static long slg_ctrl(BIO *b, int cmd, long num, void *ptr) default: break; } - return (0); + return 0; } static int slg_puts(BIO *bp, const char *str) @@ -230,7 +231,7 @@ static int slg_puts(BIO *bp, const char *str) n = strlen(str); ret = slg_write(bp, str, n); - return (ret); + return ret; } # if defined(OPENSSL_SYS_WIN32) diff --git a/crypto/bio/bss_mem.c b/crypto/bio/bss_mem.c index ff9a3ebb..7678a1df 100644 --- a/crypto/bio/bss_mem.c +++ b/crypto/bio/bss_mem.c @@ -26,7 +26,11 @@ static int mem_buf_sync(BIO *h); static const BIO_METHOD mem_method = { BIO_TYPE_MEM, "memory buffer", + /* TODO: Convert to new style write function */ + bwrite_conv, mem_write, + /* TODO: Convert to new style read function */ + bread_conv, mem_read, mem_puts, mem_gets, @@ -39,7 +43,11 @@ static const BIO_METHOD mem_method = { static const BIO_METHOD secmem_method = { BIO_TYPE_MEM, "secure memory buffer", + /* TODO: Convert to new style write function */ + bwrite_conv, mem_write, + /* TODO: Convert to new style read function */ + bread_conv, mem_read, mem_puts, mem_gets, @@ -62,7 +70,7 @@ typedef struct bio_buf_mem_st { const BIO_METHOD *BIO_s_mem(void) { - return (&mem_method); + return &mem_method; } const BIO_METHOD *BIO_s_secmem(void) @@ -122,42 +130,38 @@ static int mem_init(BIO *bi, unsigned long flags) static int mem_new(BIO *bi) { - return (mem_init(bi, 0L)); + return mem_init(bi, 0L); } static int secmem_new(BIO *bi) { - return (mem_init(bi, BUF_MEM_FLAG_SECURE)); + return mem_init(bi, BUF_MEM_FLAG_SECURE); } static int mem_free(BIO *a) { - return (mem_buf_free(a, 1)); + return mem_buf_free(a, 1); } static int mem_buf_free(BIO *a, int free_all) { if (a == NULL) - return (0); - if (a->shutdown) { - if ((a->init) && (a->ptr != NULL)) { - BUF_MEM *b; - BIO_BUF_MEM *bb = (BIO_BUF_MEM *)a->ptr; + return 0; - if (bb != NULL) { - b = bb->buf; - if (a->flags & BIO_FLAGS_MEM_RDONLY) - b->data = NULL; - BUF_MEM_free(b); - if (free_all) { - OPENSSL_free(bb->readp); - OPENSSL_free(bb); - } - } - a->ptr = NULL; + if (a->shutdown && a->init && a->ptr != NULL) { + BIO_BUF_MEM *bb = (BIO_BUF_MEM *)a->ptr; + BUF_MEM *b = bb->buf; + + if (a->flags & BIO_FLAGS_MEM_RDONLY) + b->data = NULL; + BUF_MEM_free(b); + if (free_all) { + OPENSSL_free(bb->readp); + OPENSSL_free(bb); } + a->ptr = NULL; } - return (1); + return 1; } /* @@ -174,7 +178,7 @@ static int mem_buf_sync(BIO *b) bbm->readp->data = bbm->buf->data; } } - return (0); + return 0; } static int mem_read(BIO *b, char *out, int outl) @@ -194,7 +198,7 @@ static int mem_read(BIO *b, char *out, int outl) if (ret != 0) BIO_set_retry_read(b); } - return (ret); + return ret; } static int mem_write(BIO *b, const char *in, int inl) @@ -220,7 +224,7 @@ static int mem_write(BIO *b, const char *in, int inl) *bbm->readp = *bbm->buf; ret = inl; end: - return (ret); + return ret; } static long mem_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -297,7 +301,7 @@ static long mem_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static int mem_gets(BIO *bp, char *buf, int size) @@ -333,7 +337,7 @@ static int mem_gets(BIO *bp, char *buf, int size) if (i > 0) buf[i] = '\0'; ret = i; - return (ret); + return ret; } static int mem_puts(BIO *bp, const char *str) @@ -343,5 +347,5 @@ static int mem_puts(BIO *bp, const char *str) n = strlen(str); ret = mem_write(bp, str, n); /* memory semantics is that it will always work */ - return (ret); + return ret; } diff --git a/crypto/bio/bss_null.c b/crypto/bio/bss_null.c index 56f95f9f..08f1d2bc 100644 --- a/crypto/bio/bss_null.c +++ b/crypto/bio/bss_null.c @@ -20,7 +20,11 @@ static long null_ctrl(BIO *h, int cmd, long arg1, void *arg2); static const BIO_METHOD null_method = { BIO_TYPE_NULL, "NULL", + /* TODO: Convert to new style write function */ + bwrite_conv, null_write, + /* TODO: Convert to new style read function */ + bread_conv, null_read, null_puts, null_gets, @@ -32,17 +36,17 @@ static const BIO_METHOD null_method = { const BIO_METHOD *BIO_s_null(void) { - return (&null_method); + return &null_method; } static int null_read(BIO *b, char *out, int outl) { - return (0); + return 0; } static int null_write(BIO *b, const char *in, int inl) { - return (inl); + return inl; } static long null_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -67,17 +71,17 @@ static long null_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static int null_gets(BIO *bp, char *buf, int size) { - return (0); + return 0; } static int null_puts(BIO *bp, const char *str) { if (str == NULL) - return (0); - return (strlen(str)); + return 0; + return strlen(str); } diff --git a/crypto/bio/bss_sock.c b/crypto/bio/bss_sock.c index 992266dc..ad384532 100644 --- a/crypto/bio/bss_sock.c +++ b/crypto/bio/bss_sock.c @@ -9,7 +9,6 @@ #include #include -#define USE_SOCKETS #include "bio_lcl.h" #include "internal/cryptlib.h" @@ -38,7 +37,11 @@ int BIO_sock_should_retry(int s); static const BIO_METHOD methods_sockp = { BIO_TYPE_SOCKET, "socket", + /* TODO: Convert to new style write function */ + bwrite_conv, sock_write, + /* TODO: Convert to new style read function */ + bread_conv, sock_read, sock_puts, NULL, /* sock_gets, */ @@ -50,7 +53,7 @@ static const BIO_METHOD methods_sockp = { const BIO_METHOD *BIO_s_socket(void) { - return (&methods_sockp); + return &methods_sockp; } BIO *BIO_new_socket(int fd, int close_flag) @@ -59,9 +62,9 @@ BIO *BIO_new_socket(int fd, int close_flag) ret = BIO_new(BIO_s_socket()); if (ret == NULL) - return (NULL); + return NULL; BIO_set_fd(ret, fd, close_flag); - return (ret); + return ret; } static int sock_new(BIO *bi) @@ -70,13 +73,13 @@ static int sock_new(BIO *bi) bi->num = 0; bi->ptr = NULL; bi->flags = 0; - return (1); + return 1; } static int sock_free(BIO *a) { if (a == NULL) - return (0); + return 0; if (a->shutdown) { if (a->init) { BIO_closesocket(a->num); @@ -84,7 +87,7 @@ static int sock_free(BIO *a) a->init = 0; a->flags = 0; } - return (1); + return 1; } static int sock_read(BIO *b, char *out, int outl) @@ -100,7 +103,7 @@ static int sock_read(BIO *b, char *out, int outl) BIO_set_retry_read(b); } } - return (ret); + return ret; } static int sock_write(BIO *b, const char *in, int inl) @@ -114,7 +117,7 @@ static int sock_write(BIO *b, const char *in, int inl) if (BIO_sock_should_retry(ret)) BIO_set_retry_write(b); } - return (ret); + return ret; } static long sock_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -152,7 +155,7 @@ static long sock_ctrl(BIO *b, int cmd, long num, void *ptr) ret = 0; break; } - return (ret); + return ret; } static int sock_puts(BIO *bp, const char *str) @@ -161,7 +164,7 @@ static int sock_puts(BIO *bp, const char *str) n = strlen(str); ret = sock_write(bp, str, n); - return (ret); + return ret; } int BIO_sock_should_retry(int i) @@ -171,9 +174,9 @@ int BIO_sock_should_retry(int i) if ((i == 0) || (i == -1)) { err = get_last_socket_error(); - return (BIO_sock_non_fatal_error(err)); + return BIO_sock_non_fatal_error(err); } - return (0); + return 0; } int BIO_sock_non_fatal_error(int err) @@ -220,12 +223,11 @@ int BIO_sock_non_fatal_error(int err) # ifdef EALREADY case EALREADY: # endif - return (1); - /* break; */ + return 1; default: break; } - return (0); + return 0; } #endif /* #ifndef OPENSSL_NO_SOCK */ diff --git a/crypto/blake2/blake2_impl.h b/crypto/blake2/blake2_impl.h index 8fe5c959..80b717e7 100644 --- a/crypto/blake2/blake2_impl.h +++ b/crypto/blake2/blake2_impl.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,7 +15,6 @@ */ #include -#include "e_os.h" static ossl_inline uint32_t load32(const uint8_t *src) { diff --git a/crypto/blake2/blake2_locl.h b/crypto/blake2/blake2_locl.h index fb7beb97..926bae94 100644 --- a/crypto/blake2/blake2_locl.h +++ b/crypto/blake2/blake2_locl.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,7 +15,6 @@ */ #include -#include "e_os.h" #define BLAKE2S_BLOCKBYTES 64 #define BLAKE2S_OUTBYTES 32 diff --git a/crypto/blake2/blake2b.c b/crypto/blake2/blake2b.c index e77bd9ac..829ba5b5 100644 --- a/crypto/blake2/blake2b.c +++ b/crypto/blake2/blake2b.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,7 +17,6 @@ #include #include #include -#include "e_os.h" #include "blake2_locl.h" #include "blake2_impl.h" diff --git a/crypto/blake2/blake2s.c b/crypto/blake2/blake2s.c index 0b3503e4..8211374d 100644 --- a/crypto/blake2/blake2s.c +++ b/crypto/blake2/blake2s.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,7 +17,6 @@ #include #include #include -#include "e_os.h" #include "blake2_locl.h" #include "blake2_impl.h" @@ -219,7 +218,7 @@ int BLAKE2s_Update(BLAKE2S_CTX *c, const void *data, size_t datalen) in += fill; datalen -= fill; } - if (datalen > BLAKE2S_BLOCKBYTES) { + if (datalen > BLAKE2S_BLOCKBYTES) { size_t stashlen = datalen % BLAKE2S_BLOCKBYTES; /* * If |datalen| is a multiple of the blocksize, stash diff --git a/crypto/blake2/m_blake2b.c b/crypto/blake2/m_blake2b.c index 82c6f6bd..c493648c 100644 --- a/crypto/blake2/m_blake2b.c +++ b/crypto/blake2/m_blake2b.c @@ -54,6 +54,6 @@ static const EVP_MD blake2b_md = { const EVP_MD *EVP_blake2b512(void) { - return (&blake2b_md); + return &blake2b_md; } #endif diff --git a/crypto/blake2/m_blake2s.c b/crypto/blake2/m_blake2s.c index 467e91a8..83b2811e 100644 --- a/crypto/blake2/m_blake2s.c +++ b/crypto/blake2/m_blake2s.c @@ -54,6 +54,6 @@ static const EVP_MD blake2s_md = { const EVP_MD *EVP_blake2s256(void) { - return (&blake2s_md); + return &blake2s_md; } #endif diff --git a/crypto/bn/README.pod b/crypto/bn/README.pod index 109ab0d9..706a1403 100644 --- a/crypto/bn/README.pod +++ b/crypto/bn/README.pod @@ -6,7 +6,7 @@ bn_mul_words, bn_mul_add_words, bn_sqr_words, bn_div_words, bn_add_words, bn_sub_words, bn_mul_comba4, bn_mul_comba8, bn_sqr_comba4, bn_sqr_comba8, bn_cmp_words, bn_mul_normal, bn_mul_low_normal, bn_mul_recursive, bn_mul_part_recursive, -bn_mul_low_recursive, bn_mul_high, bn_sqr_normal, bn_sqr_recursive, +bn_mul_low_recursive, bn_sqr_normal, bn_sqr_recursive, bn_expand, bn_wexpand, bn_expand2, bn_fix_top, bn_check_top, bn_print, bn_dump, bn_set_max, bn_set_high, bn_set_low - BIGNUM library internal functions @@ -41,8 +41,6 @@ library internal functions int n, int tna, int tnb, BN_ULONG *tmp); void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2, BN_ULONG *tmp); - void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l, - int n2, BN_ULONG *tmp); void bn_sqr_normal(BN_ULONG *r, BN_ULONG *a, int n, BN_ULONG *tmp); void bn_sqr_recursive(BN_ULONG *r, BN_ULONG *a, int n2, BN_ULONG *tmp); @@ -178,10 +176,6 @@ bn_mul_low_recursive(B, B, B, B, B) operates on the B word arrays B and B and the B/2 word arrays B and B. -bn_mul_high(B, B, B, B, B, B) operates on the -B word arrays B, B, B and B (?) and the 3*B word -array B. - BN_mul() calls bn_mul_normal(), or an optimized implementation if the factors have the same size: bn_mul_comba8() is used if they are 8 words long, bn_mul_recursive() if they are larger than diff --git a/crypto/bn/asm/alpha-mont.pl b/crypto/bn/asm/alpha-mont.pl index 1d68d6d0..cd0e1fb8 100644 --- a/crypto/bn/asm/alpha-mont.pl +++ b/crypto/bn/asm/alpha-mont.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/bn/asm/armv4-gf2m.pl b/crypto/bn/asm/armv4-gf2m.pl index 0bb54330..7a0cdb2e 100644 --- a/crypto/bn/asm/armv4-gf2m.pl +++ b/crypto/bn/asm/armv4-gf2m.pl @@ -36,7 +36,7 @@ # # Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software # Polynomial Multiplication on ARM Processors using the NEON Engine. -# +# # http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf $flavour = shift; diff --git a/crypto/bn/asm/armv4-mont.pl b/crypto/bn/asm/armv4-mont.pl index 0dc4fe95..75a36f62 100644 --- a/crypto/bn/asm/armv4-mont.pl +++ b/crypto/bn/asm/armv4-mont.pl @@ -23,7 +23,7 @@ # [depending on key length, less for longer keys] on ARM920T, and # +115-80% on Intel IXP425. This is compared to pre-bn_mul_mont code # base and compiler generated code with in-lined umull and even umlal -# instructions. The latter means that this code didn't really have an +# instructions. The latter means that this code didn't really have an # "advantage" of utilizing some "secret" instruction. # # The code is interoperable with Thumb ISA and is rather compact, less diff --git a/crypto/bn/asm/bn-586.pl b/crypto/bn/asm/bn-586.pl index 1ca1bbf7..58effc88 100644 --- a/crypto/bn/asm/bn-586.pl +++ b/crypto/bn/asm/bn-586.pl @@ -14,7 +14,7 @@ require "x86asm.pl"; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],$0); +&asm_init($ARGV[0]); $sse2=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -54,7 +54,7 @@ sub bn_mul_add_words &movd("mm0",&wparam(3)); # mm0 = w &pxor("mm1","mm1"); # mm1 = carry_in &jmp(&label("maw_sse2_entry")); - + &set_label("maw_sse2_unrolled",16); &movd("mm3",&DWP(0,$r,"",0)); # mm3 = r[0] &paddq("mm1","mm3"); # mm1 = carry_in + r[0] @@ -675,20 +675,20 @@ sub bn_sub_part_words &adc($c,0); &mov(&DWP($i*4,$r,"",0),$tmp1); # *r } - + &comment(""); &add($b,32); &add($r,32); &sub($num,8); &jnz(&label("pw_neg_loop")); - + &set_label("pw_neg_finish",0); &mov($tmp2,&wparam(4)); # get dl &mov($num,0); &sub($num,$tmp2); &and($num,7); &jz(&label("pw_end")); - + for ($i=0; $i<7; $i++) { &comment("dl<0 Tail Round $i"); @@ -705,9 +705,9 @@ sub bn_sub_part_words } &jmp(&label("pw_end")); - + &set_label("pw_pos",0); - + &and($num,0xfffffff8); # num / 8 &jz(&label("pw_pos_finish")); @@ -722,18 +722,18 @@ sub bn_sub_part_words &mov(&DWP($i*4,$r,"",0),$tmp1); # *r &jnc(&label("pw_nc".$i)); } - + &comment(""); &add($a,32); &add($r,32); &sub($num,8); &jnz(&label("pw_pos_loop")); - + &set_label("pw_pos_finish",0); &mov($num,&wparam(4)); # get dl &and($num,7); &jz(&label("pw_end")); - + for ($i=0; $i<7; $i++) { &comment("dl>0 Tail Round $i"); @@ -754,17 +754,17 @@ sub bn_sub_part_words &mov(&DWP($i*4,$r,"",0),$tmp1); # *r &set_label("pw_nc".$i,0); } - + &comment(""); &add($a,32); &add($r,32); &sub($num,8); &jnz(&label("pw_nc_loop")); - + &mov($num,&wparam(4)); # get dl &and($num,7); &jz(&label("pw_nc_end")); - + for ($i=0; $i<7; $i++) { &mov($tmp1,&DWP($i*4,$a,"",0)); # *a diff --git a/crypto/bn/asm/c64xplus-gf2m.pl b/crypto/bn/asm/c64xplus-gf2m.pl index c0e54008..9c46da3a 100644 --- a/crypto/bn/asm/c64xplus-gf2m.pl +++ b/crypto/bn/asm/c64xplus-gf2m.pl @@ -43,7 +43,7 @@ $code.=<<___; SHRU $A,16, $Ahi ; smash $A to two halfwords || EXTU $A,16,16,$Alo - XORMPY $Alo,$B_2,$Alox2 ; 16x8 bits muliplication + XORMPY $Alo,$B_2,$Alox2 ; 16x8 bits multiplication || XORMPY $Ahi,$B_2,$Ahix2 || EXTU $B,16,24,$B_1 XORMPY $Alo,$B_0,$Alox0 diff --git a/crypto/bn/asm/co-586.pl b/crypto/bn/asm/co-586.pl index 60d03636..97f5e3a1 100644 --- a/crypto/bn/asm/co-586.pl +++ b/crypto/bn/asm/co-586.pl @@ -13,7 +13,7 @@ require "x86asm.pl"; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],$0); +&asm_init($ARGV[0]); &bn_mul_comba("bn_mul_comba8",8); &bn_mul_comba("bn_mul_comba4",4); @@ -47,7 +47,7 @@ sub mul_add_c &mov("edx",&DWP(($nb)*4,$b,"",0)) if $pos == 1; # laod next b ### &adc($c2,0); - # is pos > 1, it means it is the last loop + # is pos > 1, it means it is the last loop &mov(&DWP($i*4,"eax","",0),$c0) if $pos > 0; # save r[]; &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # laod next a } @@ -76,7 +76,7 @@ sub sqr_add_c &mov("edx",&DWP(($nb)*4,$a,"",0)) if ($pos == 1) && ($na != $nb); ### &adc($c2,0); - # is pos > 1, it means it is the last loop + # is pos > 1, it means it is the last loop &mov(&DWP($i*4,$r,"",0),$c0) if $pos > 0; # save r[]; &mov("eax",&DWP(($na)*4,$a,"",0)) if $pos == 1; # load next b } @@ -127,7 +127,7 @@ sub bn_mul_comba $c2="ebp"; $a="esi"; $b="edi"; - + $as=0; $ae=0; $bs=0; @@ -142,9 +142,9 @@ sub bn_mul_comba &push("ebx"); &xor($c0,$c0); - &mov("eax",&DWP(0,$a,"",0)); # load the first word + &mov("eax",&DWP(0,$a,"",0)); # load the first word &xor($c1,$c1); - &mov("edx",&DWP(0,$b,"",0)); # load the first second + &mov("edx",&DWP(0,$b,"",0)); # load the first second for ($i=0; $i<$tot; $i++) { @@ -152,7 +152,7 @@ sub bn_mul_comba $bi=$bs; $end=$be+1; - &comment("################## Calculate word $i"); + &comment("################## Calculate word $i"); for ($j=$bs; $j<$end; $j++) { diff --git a/crypto/bn/asm/ia64-mont.pl b/crypto/bn/asm/ia64-mont.pl index 5cc5c599..9d1ecf6a 100644 --- a/crypto/bn/asm/ia64-mont.pl +++ b/crypto/bn/asm/ia64-mont.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -80,7 +80,7 @@ $code=<<___; // int bn_mul_mont (BN_ULONG *rp,const BN_ULONG *ap, // const BN_ULONG *bp,const BN_ULONG *np, -// const BN_ULONG *n0p,int num); +// const BN_ULONG *n0p,int num); .align 64 .global bn_mul_mont# .proc bn_mul_mont# @@ -203,7 +203,7 @@ bn_mul_mont_general: { .mmi; .pred.rel "mutex",p39,p41 (p39) add topbit=r0,r0 (p41) add topbit=r0,r0,1 - nop.i 0 } + nop.i 0 } { .mmi; st8 [tp_1]=n[0] add tptr=16,sp add tp_1=8,sp };; diff --git a/crypto/bn/asm/ia64.S b/crypto/bn/asm/ia64.S index f2404a3c..d235c45e 100644 --- a/crypto/bn/asm/ia64.S +++ b/crypto/bn/asm/ia64.S @@ -1,9 +1,9 @@ .explicit .text .ident "ia64.S, Version 2.1" -.ident "IA-64 ISA artwork by Andy Polyakov " +.ident "IA-64 ISA artwork by Andy Polyakov " -// Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +// 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 @@ -12,7 +12,7 @@ // // ==================================================================== -// Written by Andy Polyakov for the OpenSSL +// Written by Andy Polyakov for the OpenSSL // project. // // Rights for redistribution and usage in source and binary forms are @@ -20,7 +20,7 @@ // disclaimed. // ==================================================================== // -// Version 2.x is Itanium2 re-tune. Few words about how Itanum2 is +// Version 2.x is Itanium2 re-tune. Few words about how Itanium2 is // different from Itanium to this module viewpoint. Most notably, is it // "wider" than Itanium? Can you experience loop scalability as // discussed in commentary sections? Not really:-( Itanium2 has 6 @@ -141,7 +141,7 @@ // User Mask I want to excuse the kernel from preserving upper // (f32-f128) FP register bank over process context switch, thus // minimizing bus bandwidth consumption during the switch (i.e. -// after PKI opration completes and the program is off doing +// after PKI operation completes and the program is off doing // something else like bulk symmetric encryption). Having said // this, I also want to point out that it might be good idea // to compile the whole toolkit (as well as majority of the @@ -157,12 +157,15 @@ #else #define ADDP add #endif +#ifdef __VMS +.alias abort, "decc$abort" +#endif #if 1 // // bn_[add|sub]_words routines. // -// Loops are spinning in 2*(n+5) ticks on Itanuim (provided that the +// Loops are spinning in 2*(n+5) ticks on Itanium (provided that the // data reside in L1 cache, i.e. 2 ticks away). It's possible to // compress the epilogue and get down to 2*n+6, but at the cost of // scalability (the neat feature of this implementation is that it @@ -500,7 +503,7 @@ bn_sqr_words: // possible to compress the epilogue (I'm getting tired to write this // comment over and over) and get down to 2*n+16 at the cost of // scalability. The decision will very likely be reconsidered after the -// benchmark program is profiled. I.e. if perfomance gain on Itanium +// benchmark program is profiled. I.e. if performance gain on Itanium // will appear larger than loss on "wider" IA-64, then the loop should // be explicitly split and the epilogue compressed. .L_bn_sqr_words_ctop: @@ -936,7 +939,7 @@ bn_mul_comba8: xma.hu f118=f39,f127,f117 } { .mfi; xma.lu f117=f39,f127,f117 };;// //-------------------------------------------------// -// Leaving muliplier's heaven... Quite a ride, huh? +// Leaving multiplier's heaven... Quite a ride, huh? { .mii; getf.sig r31=f47 add r25=r25,r24 @@ -1428,6 +1431,7 @@ bn_div_words: mov ar.ec=0 // don't rotate at exit mov pr.rot=0 } { .mii; mov L=r33 // save l + mov r25=r0 // needed if abort is called on VMS mov r36=r0 };; .L_divw_shift: // -vv- note signed comparison @@ -1529,9 +1533,8 @@ bn_div_words: // output: f8 = (int)(a/b) // clobbered: f8,f9,f10,f11,pred pred=p15 -// One can argue that this snippet is copyrighted to Intel -// Corporation, as it's essentially identical to one of those -// found in "Divide, Square Root and Remainder" section at +// This snippet is based on text found in the "Divide, Square +// Root and Remainder" section at // http://www.intel.com/software/products/opensource/libraries/num.htm. // Yes, I admit that the referred code was used as template, // but after I realized that there hardly is any other instruction diff --git a/crypto/bn/asm/mips-mont.pl b/crypto/bn/asm/mips-mont.pl index a907571b..56d42028 100644 --- a/crypto/bn/asm/mips-mont.pl +++ b/crypto/bn/asm/mips-mont.pl @@ -56,14 +56,14 @@ $flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64 if ($flavour =~ /64|n32/i) { - $PTR_ADD="dadd"; # incidentally works even on n32 - $PTR_SUB="dsub"; # incidentally works even on n32 + $PTR_ADD="daddu"; # incidentally works even on n32 + $PTR_SUB="dsubu"; # incidentally works even on n32 $REG_S="sd"; $REG_L="ld"; $SZREG=8; } else { - $PTR_ADD="add"; - $PTR_SUB="sub"; + $PTR_ADD="addu"; + $PTR_SUB="subu"; $REG_S="sw"; $REG_L="lw"; $SZREG=4; @@ -121,6 +121,8 @@ $m1=$s11; $FRAMESIZE=14; $code=<<___; +#include "mips_arch.h" + .text .set noat @@ -183,27 +185,27 @@ $code.=<<___; $PTR_SUB $sp,$num and $sp,$at - $MULTU $aj,$bi - $LD $alo,$BNSZ($ap) - $LD $nlo,$BNSZ($np) - mflo $lo0 - mfhi $hi0 - $MULTU $lo0,$n0 - mflo $m1 + $MULTU ($aj,$bi) + $LD $ahi,$BNSZ($ap) + $LD $nhi,$BNSZ($np) + mflo ($lo0,$aj,$bi) + mfhi ($hi0,$aj,$bi) + $MULTU ($lo0,$n0) + mflo ($m1,$lo0,$n0) - $MULTU $alo,$bi - mflo $alo - mfhi $ahi + $MULTU ($ahi,$bi) + mflo ($alo,$ahi,$bi) + mfhi ($ahi,$ahi,$bi) - $MULTU $nj,$m1 - mflo $lo1 - mfhi $hi1 - $MULTU $nlo,$m1 + $MULTU ($nj,$m1) + mflo ($lo1,$nj,$m1) + mfhi ($hi1,$nj,$m1) + $MULTU ($nhi,$m1) $ADDU $lo1,$lo0 sltu $at,$lo1,$lo0 $ADDU $hi1,$at - mflo $nlo - mfhi $nhi + mflo ($nlo,$nhi,$m1) + mfhi ($nhi,$nhi,$m1) move $tp,$sp li $j,2*$BNSZ @@ -215,25 +217,25 @@ $code.=<<___; $LD $aj,($aj) $LD $nj,($nj) - $MULTU $aj,$bi + $MULTU ($aj,$bi) $ADDU $lo0,$alo,$hi0 $ADDU $lo1,$nlo,$hi1 sltu $at,$lo0,$hi0 sltu $t0,$lo1,$hi1 $ADDU $hi0,$ahi,$at $ADDU $hi1,$nhi,$t0 - mflo $alo - mfhi $ahi + mflo ($alo,$aj,$bi) + mfhi ($ahi,$aj,$bi) $ADDU $lo1,$lo0 sltu $at,$lo1,$lo0 - $MULTU $nj,$m1 + $MULTU ($nj,$m1) $ADDU $hi1,$at addu $j,$BNSZ $ST $lo1,($tp) sltu $t0,$j,$num - mflo $nlo - mfhi $nhi + mflo ($nlo,$nj,$m1) + mfhi ($nhi,$nj,$m1) bnez $t0,.L1st $PTR_ADD $tp,$BNSZ @@ -263,34 +265,34 @@ $code.=<<___; $PTR_ADD $bi,$bp,$i $LD $bi,($bi) $LD $aj,($ap) - $LD $alo,$BNSZ($ap) + $LD $ahi,$BNSZ($ap) $LD $tj,($sp) - $MULTU $aj,$bi + $MULTU ($aj,$bi) $LD $nj,($np) - $LD $nlo,$BNSZ($np) - mflo $lo0 - mfhi $hi0 + $LD $nhi,$BNSZ($np) + mflo ($lo0,$aj,$bi) + mfhi ($hi0,$aj,$bi) $ADDU $lo0,$tj - $MULTU $lo0,$n0 + $MULTU ($lo0,$n0) sltu $at,$lo0,$tj $ADDU $hi0,$at - mflo $m1 + mflo ($m1,$lo0,$n0) - $MULTU $alo,$bi - mflo $alo - mfhi $ahi + $MULTU ($ahi,$bi) + mflo ($alo,$ahi,$bi) + mfhi ($ahi,$ahi,$bi) - $MULTU $nj,$m1 - mflo $lo1 - mfhi $hi1 + $MULTU ($nj,$m1) + mflo ($lo1,$nj,$m1) + mfhi ($hi1,$nj,$m1) - $MULTU $nlo,$m1 + $MULTU ($nhi,$m1) $ADDU $lo1,$lo0 sltu $at,$lo1,$lo0 $ADDU $hi1,$at - mflo $nlo - mfhi $nhi + mflo ($nlo,$nhi,$m1) + mfhi ($nhi,$nhi,$m1) move $tp,$sp li $j,2*$BNSZ @@ -303,19 +305,19 @@ $code.=<<___; $LD $aj,($aj) $LD $nj,($nj) - $MULTU $aj,$bi + $MULTU ($aj,$bi) $ADDU $lo0,$alo,$hi0 $ADDU $lo1,$nlo,$hi1 sltu $at,$lo0,$hi0 sltu $t0,$lo1,$hi1 $ADDU $hi0,$ahi,$at $ADDU $hi1,$nhi,$t0 - mflo $alo - mfhi $ahi + mflo ($alo,$aj,$bi) + mfhi ($ahi,$aj,$bi) $ADDU $lo0,$tj addu $j,$BNSZ - $MULTU $nj,$m1 + $MULTU ($nj,$m1) sltu $at,$lo0,$tj $ADDU $lo1,$lo0 $ADDU $hi0,$at @@ -323,8 +325,8 @@ $code.=<<___; $LD $tj,2*$BNSZ($tp) $ADDU $hi1,$t0 sltu $at,$j,$num - mflo $nlo - mfhi $nhi + mflo ($nlo,$nj,$m1) + mfhi ($nhi,$nj,$m1) $ST $lo1,($tp) bnez $at,.Linner $PTR_ADD $tp,$BNSZ diff --git a/crypto/bn/asm/mips.pl b/crypto/bn/asm/mips.pl index 420f01f3..da35ec1b 100644 --- a/crypto/bn/asm/mips.pl +++ b/crypto/bn/asm/mips.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. # # Rights for redistribution and usage in source and binary forms are @@ -42,7 +42,7 @@ # Performance improvement is astonishing! 'apps/openssl speed rsa dsa' # goes way over 3 times faster! # -# +# # October 2010 # @@ -109,6 +109,22 @@ $gp=$v1 if ($flavour =~ /nubi/i); $minus4=$v1; $code.=<<___; +#include "mips_arch.h" + +#if defined(_MIPS_ARCH_MIPS64R6) +# define ddivu(rs,rt) +# define mfqt(rd,rs,rt) ddivu rd,rs,rt +# define mfrm(rd,rs,rt) dmodu rd,rs,rt +#elif defined(_MIPS_ARCH_MIPS32R6) +# define divu(rs,rt) +# define mfqt(rd,rs,rt) divu rd,rs,rt +# define mfrm(rd,rs,rt) modu rd,rs,rt +#else +# define $DIVU(rs,rt) $DIVU $zero,rs,rt +# define mfqt(rd,rs,rt) mflo rd +# define mfrm(rd,rs,rt) mfhi rd +#endif + .rdata .asciiz "mips3.s, Version 1.2" .asciiz "MIPS II/III/IV ISA artwork by Andy Polyakov " @@ -151,7 +167,7 @@ $code.=<<___; .L_bn_mul_add_words_loop: $LD $t0,0($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) $LD $t1,0($a0) $LD $t2,$BNSZ($a1) $LD $t3,$BNSZ($a0) @@ -161,11 +177,11 @@ $code.=<<___; sltu $v0,$t1,$v0 # All manuals say it "compares 32-bit # values", but it seems to work fine # even on 64-bit registers. - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $t1,$at $ADDU $v0,$t0 - $MULTU $t2,$a3 + $MULTU ($t2,$a3) sltu $at,$t1,$at $ST $t1,0($a0) $ADDU $v0,$at @@ -174,11 +190,11 @@ $code.=<<___; $LD $ta3,3*$BNSZ($a0) $ADDU $t3,$v0 sltu $v0,$t3,$v0 - mflo $at - mfhi $t2 + mflo ($at,$t2,$a3) + mfhi ($t2,$t2,$a3) $ADDU $t3,$at $ADDU $v0,$t2 - $MULTU $ta0,$a3 + $MULTU ($ta0,$a3) sltu $at,$t3,$at $ST $t3,$BNSZ($a0) $ADDU $v0,$at @@ -188,11 +204,11 @@ $code.=<<___; $PTR_ADD $a1,4*$BNSZ $ADDU $ta1,$v0 sltu $v0,$ta1,$v0 - mflo $at - mfhi $ta0 + mflo ($at,$ta0,$a3) + mfhi ($ta0,$ta0,$a3) $ADDU $ta1,$at $ADDU $v0,$ta0 - $MULTU $ta2,$a3 + $MULTU ($ta2,$a3) sltu $at,$ta1,$at $ST $ta1,-2*$BNSZ($a0) $ADDU $v0,$at @@ -201,8 +217,8 @@ $code.=<<___; and $ta0,$a2,$minus4 $ADDU $ta3,$v0 sltu $v0,$ta3,$v0 - mflo $at - mfhi $ta2 + mflo ($at,$ta2,$a3) + mfhi ($ta2,$ta2,$a3) $ADDU $ta3,$at $ADDU $v0,$ta2 sltu $at,$ta3,$at @@ -217,13 +233,13 @@ $code.=<<___; .L_bn_mul_add_words_tail: .set reorder $LD $t0,0($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) $LD $t1,0($a0) subu $a2,1 $ADDU $t1,$v0 sltu $v0,$t1,$v0 - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $t1,$at $ADDU $v0,$t0 sltu $at,$t1,$at @@ -232,13 +248,13 @@ $code.=<<___; beqz $a2,.L_bn_mul_add_words_return $LD $t0,$BNSZ($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) $LD $t1,$BNSZ($a0) subu $a2,1 $ADDU $t1,$v0 sltu $v0,$t1,$v0 - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $t1,$at $ADDU $v0,$t0 sltu $at,$t1,$at @@ -247,12 +263,12 @@ $code.=<<___; beqz $a2,.L_bn_mul_add_words_return $LD $t0,2*$BNSZ($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) $LD $t1,2*$BNSZ($a0) $ADDU $t1,$v0 sltu $v0,$t1,$v0 - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $t1,$at $ADDU $v0,$t0 sltu $at,$t1,$at @@ -310,40 +326,40 @@ $code.=<<___; .L_bn_mul_words_loop: $LD $t0,0($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) $LD $t2,$BNSZ($a1) $LD $ta0,2*$BNSZ($a1) $LD $ta2,3*$BNSZ($a1) - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $v0,$at sltu $t1,$v0,$at - $MULTU $t2,$a3 + $MULTU ($t2,$a3) $ST $v0,0($a0) $ADDU $v0,$t1,$t0 subu $a2,4 $PTR_ADD $a0,4*$BNSZ $PTR_ADD $a1,4*$BNSZ - mflo $at - mfhi $t2 + mflo ($at,$t2,$a3) + mfhi ($t2,$t2,$a3) $ADDU $v0,$at sltu $t3,$v0,$at - $MULTU $ta0,$a3 + $MULTU ($ta0,$a3) $ST $v0,-3*$BNSZ($a0) $ADDU $v0,$t3,$t2 - mflo $at - mfhi $ta0 + mflo ($at,$ta0,$a3) + mfhi ($ta0,$ta0,$a3) $ADDU $v0,$at sltu $ta1,$v0,$at - $MULTU $ta2,$a3 + $MULTU ($ta2,$a3) $ST $v0,-2*$BNSZ($a0) $ADDU $v0,$ta1,$ta0 and $ta0,$a2,$minus4 - mflo $at - mfhi $ta2 + mflo ($at,$ta2,$a3) + mfhi ($ta2,$ta2,$a3) $ADDU $v0,$at sltu $ta3,$v0,$at $ST $v0,-$BNSZ($a0) @@ -357,10 +373,10 @@ $code.=<<___; .L_bn_mul_words_tail: .set reorder $LD $t0,0($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) subu $a2,1 - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $v0,$at sltu $t1,$v0,$at $ST $v0,0($a0) @@ -368,10 +384,10 @@ $code.=<<___; beqz $a2,.L_bn_mul_words_return $LD $t0,$BNSZ($a1) - $MULTU $t0,$a3 + $MULTU ($t0,$a3) subu $a2,1 - mflo $at - mfhi $t0 + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $v0,$at sltu $t1,$v0,$at $ST $v0,$BNSZ($a0) @@ -379,9 +395,9 @@ $code.=<<___; beqz $a2,.L_bn_mul_words_return $LD $t0,2*$BNSZ($a1) - $MULTU $t0,$a3 - mflo $at - mfhi $t0 + $MULTU ($t0,$a3) + mflo ($at,$t0,$a3) + mfhi ($t0,$t0,$a3) $ADDU $v0,$at sltu $t1,$v0,$at $ST $v0,2*$BNSZ($a0) @@ -438,35 +454,35 @@ $code.=<<___; .L_bn_sqr_words_loop: $LD $t0,0($a1) - $MULTU $t0,$t0 + $MULTU ($t0,$t0) $LD $t2,$BNSZ($a1) $LD $ta0,2*$BNSZ($a1) $LD $ta2,3*$BNSZ($a1) - mflo $t1 - mfhi $t0 + mflo ($t1,$t0,$t0) + mfhi ($t0,$t0,$t0) $ST $t1,0($a0) $ST $t0,$BNSZ($a0) - $MULTU $t2,$t2 + $MULTU ($t2,$t2) subu $a2,4 $PTR_ADD $a0,8*$BNSZ $PTR_ADD $a1,4*$BNSZ - mflo $t3 - mfhi $t2 + mflo ($t3,$t2,$t2) + mfhi ($t2,$t2,$t2) $ST $t3,-6*$BNSZ($a0) $ST $t2,-5*$BNSZ($a0) - $MULTU $ta0,$ta0 - mflo $ta1 - mfhi $ta0 + $MULTU ($ta0,$ta0) + mflo ($ta1,$ta0,$ta0) + mfhi ($ta0,$ta0,$ta0) $ST $ta1,-4*$BNSZ($a0) $ST $ta0,-3*$BNSZ($a0) - $MULTU $ta2,$ta2 + $MULTU ($ta2,$ta2) and $ta0,$a2,$minus4 - mflo $ta3 - mfhi $ta2 + mflo ($ta3,$ta2,$ta2) + mfhi ($ta2,$ta2,$ta2) $ST $ta3,-2*$BNSZ($a0) .set noreorder @@ -479,27 +495,27 @@ $code.=<<___; .L_bn_sqr_words_tail: .set reorder $LD $t0,0($a1) - $MULTU $t0,$t0 + $MULTU ($t0,$t0) subu $a2,1 - mflo $t1 - mfhi $t0 + mflo ($t1,$t0,$t0) + mfhi ($t0,$t0,$t0) $ST $t1,0($a0) $ST $t0,$BNSZ($a0) beqz $a2,.L_bn_sqr_words_return $LD $t0,$BNSZ($a1) - $MULTU $t0,$t0 + $MULTU ($t0,$t0) subu $a2,1 - mflo $t1 - mfhi $t0 + mflo ($t1,$t0,$t0) + mfhi ($t0,$t0,$t0) $ST $t1,2*$BNSZ($a0) $ST $t0,3*$BNSZ($a0) beqz $a2,.L_bn_sqr_words_return $LD $t0,2*$BNSZ($a1) - $MULTU $t0,$t0 - mflo $t1 - mfhi $t0 + $MULTU ($t0,$t0) + mflo ($t1,$t0,$t0) + mfhi ($t0,$t0,$t0) $ST $t1,4*$BNSZ($a0) $ST $t0,5*$BNSZ($a0) @@ -587,13 +603,13 @@ $code.=<<___; sltu $v0,$t2,$ta2 $ST $t2,-2*$BNSZ($a0) $ADDU $v0,$t8 - + $ADDU $ta3,$t3 sltu $t9,$ta3,$t3 $ADDU $t3,$ta3,$v0 sltu $v0,$t3,$ta3 $ST $t3,-$BNSZ($a0) - + .set noreorder bgtz $at,.L_bn_add_words_loop $ADDU $v0,$t9 @@ -792,7 +808,7 @@ bn_div_3_words: # so that we can save two arguments # and return address in registers # instead of stack:-) - + $LD $a0,($a3) move $ta2,$a1 bne $a0,$a2,bn_div_3_words_internal @@ -823,11 +839,11 @@ $code.=<<___; move $ta3,$ra bal bn_div_words_internal move $ra,$ta3 - $MULTU $ta2,$v0 + $MULTU ($ta2,$v0) $LD $t2,-2*$BNSZ($a3) move $ta0,$zero - mfhi $t1 - mflo $t0 + mfhi ($t1,$ta2,$v0) + mflo ($t0,$ta2,$v0) sltu $t8,$t1,$a1 .L_bn_div_3_words_inner_loop: bnez $t8,.L_bn_div_3_words_inner_loop_done @@ -930,15 +946,15 @@ $code.=<<___; $SRL $HH,$a0,4*$BNSZ # bits $SRL $QT,4*$BNSZ # q=0xffffffff beq $DH,$HH,.L_bn_div_words_skip_div1 - $DIVU $zero,$a0,$DH - mflo $QT + $DIVU ($a0,$DH) + mfqt ($QT,$a0,$DH) .L_bn_div_words_skip_div1: - $MULTU $a2,$QT + $MULTU ($a2,$QT) $SLL $t3,$a0,4*$BNSZ # bits $SRL $at,$a1,4*$BNSZ # bits or $t3,$at - mflo $t0 - mfhi $t1 + mflo ($t0,$a2,$QT) + mfhi ($t1,$a2,$QT) .L_bn_div_words_inner_loop1: sltu $t2,$t3,$t0 seq $t8,$HH,$t1 @@ -963,15 +979,15 @@ $code.=<<___; $SRL $HH,$a0,4*$BNSZ # bits $SRL $QT,4*$BNSZ # q=0xffffffff beq $DH,$HH,.L_bn_div_words_skip_div2 - $DIVU $zero,$a0,$DH - mflo $QT + $DIVU ($a0,$DH) + mfqt ($QT,$a0,$DH) .L_bn_div_words_skip_div2: - $MULTU $a2,$QT + $MULTU ($a2,$QT) $SLL $t3,$a0,4*$BNSZ # bits $SRL $at,$a1,4*$BNSZ # bits or $t3,$at - mflo $t0 - mfhi $t1 + mflo ($t0,$a2,$QT) + mfhi ($t1,$a2,$QT) .L_bn_div_words_inner_loop2: sltu $t2,$t3,$t0 seq $t8,$HH,$t1 @@ -1070,592 +1086,592 @@ $code.=<<___; $LD $b_0,0($a2) $LD $a_1,$BNSZ($a1) $LD $a_2,2*$BNSZ($a1) - $MULTU $a_0,$b_0 # mul_add_c(a[0],b[0],c1,c2,c3); + $MULTU ($a_0,$b_0) # mul_add_c(a[0],b[0],c1,c2,c3); $LD $a_3,3*$BNSZ($a1) $LD $b_1,$BNSZ($a2) $LD $b_2,2*$BNSZ($a2) $LD $b_3,3*$BNSZ($a2) - mflo $c_1 - mfhi $c_2 + mflo ($c_1,$a_0,$b_0) + mfhi ($c_2,$a_0,$b_0) $LD $a_4,4*$BNSZ($a1) $LD $a_5,5*$BNSZ($a1) - $MULTU $a_0,$b_1 # mul_add_c(a[0],b[1],c2,c3,c1); + $MULTU ($a_0,$b_1) # mul_add_c(a[0],b[1],c2,c3,c1); $LD $a_6,6*$BNSZ($a1) $LD $a_7,7*$BNSZ($a1) $LD $b_4,4*$BNSZ($a2) $LD $b_5,5*$BNSZ($a2) - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_1) + mfhi ($t_2,$a_0,$b_1) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_1,$b_0 # mul_add_c(a[1],b[0],c2,c3,c1); + $MULTU ($a_1,$b_0) # mul_add_c(a[1],b[0],c2,c3,c1); $ADDU $c_3,$t_2,$at $LD $b_6,6*$BNSZ($a2) $LD $b_7,7*$BNSZ($a2) $ST $c_1,0($a0) # r[0]=c1; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_0) + mfhi ($t_2,$a_1,$b_0) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$b_0 # mul_add_c(a[2],b[0],c3,c1,c2); + $MULTU ($a_2,$b_0) # mul_add_c(a[2],b[0],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 $ST $c_2,$BNSZ($a0) # r[1]=c2; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_0) + mfhi ($t_2,$a_2,$b_0) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_1,$b_1 # mul_add_c(a[1],b[1],c3,c1,c2); + $MULTU ($a_1,$b_1) # mul_add_c(a[1],b[1],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_1) + mfhi ($t_2,$a_1,$b_1) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_0,$b_2 # mul_add_c(a[0],b[2],c3,c1,c2); + $MULTU ($a_0,$b_2) # mul_add_c(a[0],b[2],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $c_2,$c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_2) + mfhi ($t_2,$a_0,$b_2) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_0,$b_3 # mul_add_c(a[0],b[3],c1,c2,c3); + $MULTU ($a_0,$b_3) # mul_add_c(a[0],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,2*$BNSZ($a0) # r[2]=c3; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_3) + mfhi ($t_2,$a_0,$b_3) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_1,$b_2 # mul_add_c(a[1],b[2],c1,c2,c3); + $MULTU ($a_1,$b_2) # mul_add_c(a[1],b[2],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $c_3,$c_2,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_2) + mfhi ($t_2,$a_1,$b_2) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_2,$b_1 # mul_add_c(a[2],b[1],c1,c2,c3); + $MULTU ($a_2,$b_1) # mul_add_c(a[2],b[1],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_1) + mfhi ($t_2,$a_2,$b_1) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_3,$b_0 # mul_add_c(a[3],b[0],c1,c2,c3); + $MULTU ($a_3,$b_0) # mul_add_c(a[3],b[0],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_0) + mfhi ($t_2,$a_3,$b_0) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_4,$b_0 # mul_add_c(a[4],b[0],c2,c3,c1); + $MULTU ($a_4,$b_0) # mul_add_c(a[4],b[0],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,3*$BNSZ($a0) # r[3]=c1; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_0) + mfhi ($t_2,$a_4,$b_0) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_3,$b_1 # mul_add_c(a[3],b[1],c2,c3,c1); + $MULTU ($a_3,$b_1) # mul_add_c(a[3],b[1],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_1) + mfhi ($t_2,$a_3,$b_1) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$b_2 # mul_add_c(a[2],b[2],c2,c3,c1); + $MULTU ($a_2,$b_2) # mul_add_c(a[2],b[2],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_2) + mfhi ($t_2,$a_2,$b_2) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_1,$b_3 # mul_add_c(a[1],b[3],c2,c3,c1); + $MULTU ($a_1,$b_3) # mul_add_c(a[1],b[3],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_3) + mfhi ($t_2,$a_1,$b_3) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_0,$b_4 # mul_add_c(a[0],b[4],c2,c3,c1); + $MULTU ($a_0,$b_4) # mul_add_c(a[0],b[4],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_4) + mfhi ($t_2,$a_0,$b_4) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_0,$b_5 # mul_add_c(a[0],b[5],c3,c1,c2); + $MULTU ($a_0,$b_5) # mul_add_c(a[0],b[5],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,4*$BNSZ($a0) # r[4]=c2; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_5) + mfhi ($t_2,$a_0,$b_5) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_1,$b_4 # mul_add_c(a[1],b[4],c3,c1,c2); + $MULTU ($a_1,$b_4) # mul_add_c(a[1],b[4],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $c_2,$c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_4) + mfhi ($t_2,$a_1,$b_4) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_2,$b_3 # mul_add_c(a[2],b[3],c3,c1,c2); + $MULTU ($a_2,$b_3) # mul_add_c(a[2],b[3],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_3) + mfhi ($t_2,$a_2,$b_3) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_3,$b_2 # mul_add_c(a[3],b[2],c3,c1,c2); + $MULTU ($a_3,$b_2) # mul_add_c(a[3],b[2],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_2) + mfhi ($t_2,$a_3,$b_2) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_4,$b_1 # mul_add_c(a[4],b[1],c3,c1,c2); + $MULTU ($a_4,$b_1) # mul_add_c(a[4],b[1],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_1) + mfhi ($t_2,$a_4,$b_1) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_5,$b_0 # mul_add_c(a[5],b[0],c3,c1,c2); + $MULTU ($a_5,$b_0) # mul_add_c(a[5],b[0],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_0) + mfhi ($t_2,$a_5,$b_0) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_6,$b_0 # mul_add_c(a[6],b[0],c1,c2,c3); + $MULTU ($a_6,$b_0) # mul_add_c(a[6],b[0],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,5*$BNSZ($a0) # r[5]=c3; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_0) + mfhi ($t_2,$a_6,$b_0) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_5,$b_1 # mul_add_c(a[5],b[1],c1,c2,c3); + $MULTU ($a_5,$b_1) # mul_add_c(a[5],b[1],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $c_3,$c_2,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_1) + mfhi ($t_2,$a_5,$b_1) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_4,$b_2 # mul_add_c(a[4],b[2],c1,c2,c3); + $MULTU ($a_4,$b_2) # mul_add_c(a[4],b[2],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_2) + mfhi ($t_2,$a_4,$b_2) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_3,$b_3 # mul_add_c(a[3],b[3],c1,c2,c3); + $MULTU ($a_3,$b_3) # mul_add_c(a[3],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_3) + mfhi ($t_2,$a_3,$b_3) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_2,$b_4 # mul_add_c(a[2],b[4],c1,c2,c3); + $MULTU ($a_2,$b_4) # mul_add_c(a[2],b[4],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_4) + mfhi ($t_2,$a_2,$b_4) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_1,$b_5 # mul_add_c(a[1],b[5],c1,c2,c3); + $MULTU ($a_1,$b_5) # mul_add_c(a[1],b[5],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_5) + mfhi ($t_2,$a_1,$b_5) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_0,$b_6 # mul_add_c(a[0],b[6],c1,c2,c3); + $MULTU ($a_0,$b_6) # mul_add_c(a[0],b[6],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_6) + mfhi ($t_2,$a_0,$b_6) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_0,$b_7 # mul_add_c(a[0],b[7],c2,c3,c1); + $MULTU ($a_0,$b_7) # mul_add_c(a[0],b[7],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,6*$BNSZ($a0) # r[6]=c1; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_7) + mfhi ($t_2,$a_0,$b_7) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_1,$b_6 # mul_add_c(a[1],b[6],c2,c3,c1); + $MULTU ($a_1,$b_6) # mul_add_c(a[1],b[6],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_6) + mfhi ($t_2,$a_1,$b_6) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$b_5 # mul_add_c(a[2],b[5],c2,c3,c1); + $MULTU ($a_2,$b_5) # mul_add_c(a[2],b[5],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_5) + mfhi ($t_2,$a_2,$b_5) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_3,$b_4 # mul_add_c(a[3],b[4],c2,c3,c1); + $MULTU ($a_3,$b_4) # mul_add_c(a[3],b[4],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_4) + mfhi ($t_2,$a_3,$b_4) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_4,$b_3 # mul_add_c(a[4],b[3],c2,c3,c1); + $MULTU ($a_4,$b_3) # mul_add_c(a[4],b[3],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_3) + mfhi ($t_2,$a_4,$b_3) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_5,$b_2 # mul_add_c(a[5],b[2],c2,c3,c1); + $MULTU ($a_5,$b_2) # mul_add_c(a[5],b[2],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_2) + mfhi ($t_2,$a_5,$b_2) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_6,$b_1 # mul_add_c(a[6],b[1],c2,c3,c1); + $MULTU ($a_6,$b_1) # mul_add_c(a[6],b[1],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_1) + mfhi ($t_2,$a_6,$b_1) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_7,$b_0 # mul_add_c(a[7],b[0],c2,c3,c1); + $MULTU ($a_7,$b_0) # mul_add_c(a[7],b[0],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_0) + mfhi ($t_2,$a_7,$b_0) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_7,$b_1 # mul_add_c(a[7],b[1],c3,c1,c2); + $MULTU ($a_7,$b_1) # mul_add_c(a[7],b[1],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,7*$BNSZ($a0) # r[7]=c2; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_1) + mfhi ($t_2,$a_7,$b_1) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_6,$b_2 # mul_add_c(a[6],b[2],c3,c1,c2); + $MULTU ($a_6,$b_2) # mul_add_c(a[6],b[2],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $c_2,$c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_2) + mfhi ($t_2,$a_6,$b_2) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_5,$b_3 # mul_add_c(a[5],b[3],c3,c1,c2); + $MULTU ($a_5,$b_3) # mul_add_c(a[5],b[3],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_3) + mfhi ($t_2,$a_5,$b_3) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_4,$b_4 # mul_add_c(a[4],b[4],c3,c1,c2); + $MULTU ($a_4,$b_4) # mul_add_c(a[4],b[4],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_4) + mfhi ($t_2,$a_4,$b_4) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_3,$b_5 # mul_add_c(a[3],b[5],c3,c1,c2); + $MULTU ($a_3,$b_5) # mul_add_c(a[3],b[5],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_5) + mfhi ($t_2,$a_3,$b_5) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_2,$b_6 # mul_add_c(a[2],b[6],c3,c1,c2); + $MULTU ($a_2,$b_6) # mul_add_c(a[2],b[6],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_6) + mfhi ($t_2,$a_2,$b_6) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_1,$b_7 # mul_add_c(a[1],b[7],c3,c1,c2); + $MULTU ($a_1,$b_7) # mul_add_c(a[1],b[7],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_7) + mfhi ($t_2,$a_1,$b_7) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_2,$b_7 # mul_add_c(a[2],b[7],c1,c2,c3); + $MULTU ($a_2,$b_7) # mul_add_c(a[2],b[7],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,8*$BNSZ($a0) # r[8]=c3; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_7) + mfhi ($t_2,$a_2,$b_7) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_3,$b_6 # mul_add_c(a[3],b[6],c1,c2,c3); + $MULTU ($a_3,$b_6) # mul_add_c(a[3],b[6],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $c_3,$c_2,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_6) + mfhi ($t_2,$a_3,$b_6) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_4,$b_5 # mul_add_c(a[4],b[5],c1,c2,c3); + $MULTU ($a_4,$b_5) # mul_add_c(a[4],b[5],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_5) + mfhi ($t_2,$a_4,$b_5) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_5,$b_4 # mul_add_c(a[5],b[4],c1,c2,c3); + $MULTU ($a_5,$b_4) # mul_add_c(a[5],b[4],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_4) + mfhi ($t_2,$a_5,$b_4) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_6,$b_3 # mul_add_c(a[6],b[3],c1,c2,c3); + $MULTU ($a_6,$b_3) # mul_add_c(a[6],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_3) + mfhi ($t_2,$a_6,$b_3) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_7,$b_2 # mul_add_c(a[7],b[2],c1,c2,c3); + $MULTU ($a_7,$b_2) # mul_add_c(a[7],b[2],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_2) + mfhi ($t_2,$a_7,$b_2) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_7,$b_3 # mul_add_c(a[7],b[3],c2,c3,c1); + $MULTU ($a_7,$b_3) # mul_add_c(a[7],b[3],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,9*$BNSZ($a0) # r[9]=c1; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_3) + mfhi ($t_2,$a_7,$b_3) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_6,$b_4 # mul_add_c(a[6],b[4],c2,c3,c1); + $MULTU ($a_6,$b_4) # mul_add_c(a[6],b[4],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_4) + mfhi ($t_2,$a_6,$b_4) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_5,$b_5 # mul_add_c(a[5],b[5],c2,c3,c1); + $MULTU ($a_5,$b_5) # mul_add_c(a[5],b[5],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_5) + mfhi ($t_2,$a_5,$b_5) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_4,$b_6 # mul_add_c(a[4],b[6],c2,c3,c1); + $MULTU ($a_4,$b_6) # mul_add_c(a[4],b[6],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_6) + mfhi ($t_2,$a_4,$b_6) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_3,$b_7 # mul_add_c(a[3],b[7],c2,c3,c1); + $MULTU ($a_3,$b_7) # mul_add_c(a[3],b[7],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_7) + mfhi ($t_2,$a_3,$b_7) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_4,$b_7 # mul_add_c(a[4],b[7],c3,c1,c2); + $MULTU ($a_4,$b_7) # mul_add_c(a[4],b[7],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,10*$BNSZ($a0) # r[10]=c2; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_4,$b_7) + mfhi ($t_2,$a_4,$b_7) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_5,$b_6 # mul_add_c(a[5],b[6],c3,c1,c2); + $MULTU ($a_5,$b_6) # mul_add_c(a[5],b[6],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $c_2,$c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_6) + mfhi ($t_2,$a_5,$b_6) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_6,$b_5 # mul_add_c(a[6],b[5],c3,c1,c2); + $MULTU ($a_6,$b_5) # mul_add_c(a[6],b[5],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_5) + mfhi ($t_2,$a_6,$b_5) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_7,$b_4 # mul_add_c(a[7],b[4],c3,c1,c2); + $MULTU ($a_7,$b_4) # mul_add_c(a[7],b[4],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_4) + mfhi ($t_2,$a_7,$b_4) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_7,$b_5 # mul_add_c(a[7],b[5],c1,c2,c3); + $MULTU ($a_7,$b_5) # mul_add_c(a[7],b[5],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,11*$BNSZ($a0) # r[11]=c3; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_5) + mfhi ($t_2,$a_7,$b_5) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_6,$b_6 # mul_add_c(a[6],b[6],c1,c2,c3); + $MULTU ($a_6,$b_6) # mul_add_c(a[6],b[6],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $c_3,$c_2,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_6) + mfhi ($t_2,$a_6,$b_6) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_5,$b_7 # mul_add_c(a[5],b[7],c1,c2,c3); + $MULTU ($a_5,$b_7) # mul_add_c(a[5],b[7],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_5,$b_7) + mfhi ($t_2,$a_5,$b_7) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_6,$b_7 # mul_add_c(a[6],b[7],c2,c3,c1); + $MULTU ($a_6,$b_7) # mul_add_c(a[6],b[7],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,12*$BNSZ($a0) # r[12]=c1; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_6,$b_7) + mfhi ($t_2,$a_6,$b_7) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_7,$b_6 # mul_add_c(a[7],b[6],c2,c3,c1); + $MULTU ($a_7,$b_6) # mul_add_c(a[7],b[6],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_6) + mfhi ($t_2,$a_7,$b_6) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_7,$b_7 # mul_add_c(a[7],b[7],c3,c1,c2); + $MULTU ($a_7,$b_7) # mul_add_c(a[7],b[7],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,13*$BNSZ($a0) # r[13]=c2; - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_7,$b_7) + mfhi ($t_2,$a_7,$b_7) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 $ADDU $t_2,$at @@ -1716,144 +1732,144 @@ $code.=<<___; $LD $b_0,0($a2) $LD $a_1,$BNSZ($a1) $LD $a_2,2*$BNSZ($a1) - $MULTU $a_0,$b_0 # mul_add_c(a[0],b[0],c1,c2,c3); + $MULTU ($a_0,$b_0) # mul_add_c(a[0],b[0],c1,c2,c3); $LD $a_3,3*$BNSZ($a1) $LD $b_1,$BNSZ($a2) $LD $b_2,2*$BNSZ($a2) $LD $b_3,3*$BNSZ($a2) - mflo $c_1 - mfhi $c_2 + mflo ($c_1,$a_0,$b_0) + mfhi ($c_2,$a_0,$b_0) $ST $c_1,0($a0) - $MULTU $a_0,$b_1 # mul_add_c(a[0],b[1],c2,c3,c1); - mflo $t_1 - mfhi $t_2 + $MULTU ($a_0,$b_1) # mul_add_c(a[0],b[1],c2,c3,c1); + mflo ($t_1,$a_0,$b_1) + mfhi ($t_2,$a_0,$b_1) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_1,$b_0 # mul_add_c(a[1],b[0],c2,c3,c1); + $MULTU ($a_1,$b_0) # mul_add_c(a[1],b[0],c2,c3,c1); $ADDU $c_3,$t_2,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_0) + mfhi ($t_2,$a_1,$b_0) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$b_0 # mul_add_c(a[2],b[0],c3,c1,c2); + $MULTU ($a_2,$b_0) # mul_add_c(a[2],b[0],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 $ST $c_2,$BNSZ($a0) - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_0) + mfhi ($t_2,$a_2,$b_0) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_1,$b_1 # mul_add_c(a[1],b[1],c3,c1,c2); + $MULTU ($a_1,$b_1) # mul_add_c(a[1],b[1],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_1) + mfhi ($t_2,$a_1,$b_1) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_0,$b_2 # mul_add_c(a[0],b[2],c3,c1,c2); + $MULTU ($a_0,$b_2) # mul_add_c(a[0],b[2],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $c_2,$c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_2) + mfhi ($t_2,$a_0,$b_2) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_0,$b_3 # mul_add_c(a[0],b[3],c1,c2,c3); + $MULTU ($a_0,$b_3) # mul_add_c(a[0],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,2*$BNSZ($a0) - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_0,$b_3) + mfhi ($t_2,$a_0,$b_3) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_1,$b_2 # mul_add_c(a[1],b[2],c1,c2,c3); + $MULTU ($a_1,$b_2) # mul_add_c(a[1],b[2],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $c_3,$c_2,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_2) + mfhi ($t_2,$a_1,$b_2) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_2,$b_1 # mul_add_c(a[2],b[1],c1,c2,c3); + $MULTU ($a_2,$b_1) # mul_add_c(a[2],b[1],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_1) + mfhi ($t_2,$a_2,$b_1) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_3,$b_0 # mul_add_c(a[3],b[0],c1,c2,c3); + $MULTU ($a_3,$b_0) # mul_add_c(a[3],b[0],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_0) + mfhi ($t_2,$a_3,$b_0) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_3,$b_1 # mul_add_c(a[3],b[1],c2,c3,c1); + $MULTU ($a_3,$b_1) # mul_add_c(a[3],b[1],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,3*$BNSZ($a0) - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_1) + mfhi ($t_2,$a_3,$b_1) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$b_2 # mul_add_c(a[2],b[2],c2,c3,c1); + $MULTU ($a_2,$b_2) # mul_add_c(a[2],b[2],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $c_1,$c_3,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_2) + mfhi ($t_2,$a_2,$b_2) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_1,$b_3 # mul_add_c(a[1],b[3],c2,c3,c1); + $MULTU ($a_1,$b_3) # mul_add_c(a[1],b[3],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_1,$b_3) + mfhi ($t_2,$a_1,$b_3) $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$b_3 # mul_add_c(a[2],b[3],c3,c1,c2); + $MULTU ($a_2,$b_3) # mul_add_c(a[2],b[3],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,4*$BNSZ($a0) - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_2,$b_3) + mfhi ($t_2,$a_2,$b_3) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_3,$b_2 # mul_add_c(a[3],b[2],c3,c1,c2); + $MULTU ($a_3,$b_2) # mul_add_c(a[3],b[2],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $c_2,$c_1,$t_2 - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_2) + mfhi ($t_2,$a_3,$b_2) $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_3,$b_3 # mul_add_c(a[3],b[3],c1,c2,c3); + $MULTU ($a_3,$b_3) # mul_add_c(a[3],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,5*$BNSZ($a0) - mflo $t_1 - mfhi $t_2 + mflo ($t_1,$a_3,$b_3) + mfhi ($t_2,$a_3,$b_3) $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 $ADDU $t_2,$at @@ -1888,11 +1904,9 @@ my ($hi,$lo,$c0,$c1,$c2, # commented as "forward multiplication" below]; )=@_; $code.=<<___; - mflo $lo - mfhi $hi $ADDU $c0,$lo sltu $at,$c0,$lo - $MULTU $an,$bn # forward multiplication + $MULTU ($an,$bn) # forward multiplication $ADDU $c0,$lo $ADDU $at,$hi sltu $lo,$c0,$lo @@ -1902,15 +1916,17 @@ ___ $code.=<<___ if (!$warm); sltu $c2,$c1,$at $ADDU $c1,$hi - sltu $hi,$c1,$hi - $ADDU $c2,$hi ___ $code.=<<___ if ($warm); sltu $at,$c1,$at $ADDU $c1,$hi $ADDU $c2,$at +___ +$code.=<<___; sltu $hi,$c1,$hi $ADDU $c2,$hi + mflo ($lo,$an,$bn) + mfhi ($hi,$an,$bn) ___ } @@ -1940,21 +1956,21 @@ $code.=<<___; $LD $a_2,2*$BNSZ($a1) $LD $a_3,3*$BNSZ($a1) - $MULTU $a_0,$a_0 # mul_add_c(a[0],b[0],c1,c2,c3); + $MULTU ($a_0,$a_0) # mul_add_c(a[0],b[0],c1,c2,c3); $LD $a_4,4*$BNSZ($a1) $LD $a_5,5*$BNSZ($a1) $LD $a_6,6*$BNSZ($a1) $LD $a_7,7*$BNSZ($a1) - mflo $c_1 - mfhi $c_2 + mflo ($c_1,$a_0,$a_0) + mfhi ($c_2,$a_0,$a_0) $ST $c_1,0($a0) - $MULTU $a_0,$a_1 # mul_add_c2(a[0],b[1],c2,c3,c1); - mflo $t_1 - mfhi $t_2 + $MULTU ($a_0,$a_1) # mul_add_c2(a[0],b[1],c2,c3,c1); + mflo ($t_1,$a_0,$a_1) + mfhi ($t_2,$a_0,$a_1) slt $c_1,$t_2,$zero $SLL $t_2,1 - $MULTU $a_2,$a_0 # mul_add_c2(a[2],b[0],c3,c1,c2); + $MULTU ($a_2,$a_0) # mul_add_c2(a[2],b[0],c3,c1,c2); slt $a2,$t_1,$zero $ADDU $t_2,$a2 $SLL $t_1,1 @@ -1962,20 +1978,22 @@ $code.=<<___; sltu $at,$c_2,$t_1 $ADDU $c_3,$t_2,$at $ST $c_2,$BNSZ($a0) + mflo ($t_1,$a_2,$a_0) + mfhi ($t_2,$a_2,$a_0) ___ &add_c2($t_2,$t_1,$c_3,$c_1,$c_2,0, $a_1,$a_1); # mul_add_c(a[1],b[1],c3,c1,c2); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_0,$a_3 # mul_add_c2(a[0],b[3],c1,c2,c3); + $MULTU ($a_0,$a_3) # mul_add_c2(a[0],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,2*$BNSZ($a0) + mflo ($t_1,$a_0,$a_3) + mfhi ($t_2,$a_0,$a_3) ___ &add_c2($t_2,$t_1,$c_1,$c_2,$c_3,0, $a_1,$a_2); # mul_add_c2(a[1],b[2],c1,c2,c3); @@ -1989,16 +2007,16 @@ ___ &add_c2($t_2,$t_1,$c_2,$c_3,$c_1,1, $a_2,$a_2); # mul_add_c(a[2],b[2],c2,c3,c1); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_0,$a_5 # mul_add_c2(a[0],b[5],c3,c1,c2); + $MULTU ($a_0,$a_5) # mul_add_c2(a[0],b[5],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,4*$BNSZ($a0) + mflo ($t_1,$a_0,$a_5) + mfhi ($t_2,$a_0,$a_5) ___ &add_c2($t_2,$t_1,$c_3,$c_1,$c_2,0, $a_1,$a_4); # mul_add_c2(a[1],b[4],c3,c1,c2); @@ -2016,16 +2034,16 @@ ___ &add_c2($t_2,$t_1,$c_1,$c_2,$c_3,1, $a_3,$a_3); # mul_add_c(a[3],b[3],c1,c2,c3); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_0,$a_7 # mul_add_c2(a[0],b[7],c2,c3,c1); + $MULTU ($a_0,$a_7) # mul_add_c2(a[0],b[7],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,6*$BNSZ($a0) + mflo ($t_1,$a_0,$a_7) + mfhi ($t_2,$a_0,$a_7) ___ &add_c2($t_2,$t_1,$c_2,$c_3,$c_1,0, $a_1,$a_6); # mul_add_c2(a[1],b[6],c2,c3,c1); @@ -2045,16 +2063,16 @@ ___ &add_c2($t_2,$t_1,$c_3,$c_1,$c_2,1, $a_4,$a_4); # mul_add_c(a[4],b[4],c3,c1,c2); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_2,$a_7 # mul_add_c2(a[2],b[7],c1,c2,c3); + $MULTU ($a_2,$a_7) # mul_add_c2(a[2],b[7],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,8*$BNSZ($a0) + mflo ($t_1,$a_2,$a_7) + mfhi ($t_2,$a_2,$a_7) ___ &add_c2($t_2,$t_1,$c_1,$c_2,$c_3,0, $a_3,$a_6); # mul_add_c2(a[3],b[6],c1,c2,c3); @@ -2070,16 +2088,16 @@ ___ &add_c2($t_2,$t_1,$c_2,$c_3,$c_1,1, $a_5,$a_5); # mul_add_c(a[5],b[5],c2,c3,c1); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_4,$a_7 # mul_add_c2(a[4],b[7],c3,c1,c2); + $MULTU ($a_4,$a_7) # mul_add_c2(a[4],b[7],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,10*$BNSZ($a0) + mflo ($t_1,$a_4,$a_7) + mfhi ($t_2,$a_4,$a_7) ___ &add_c2($t_2,$t_1,$c_3,$c_1,$c_2,0, $a_5,$a_6); # mul_add_c2(a[5],b[6],c3,c1,c2); @@ -2091,24 +2109,22 @@ ___ &add_c2($t_2,$t_1,$c_1,$c_2,$c_3,0, $a_6,$a_6); # mul_add_c(a[6],b[6],c1,c2,c3); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 - $MULTU $a_6,$a_7 # mul_add_c2(a[6],b[7],c2,c3,c1); + $MULTU ($a_6,$a_7) # mul_add_c2(a[6],b[7],c2,c3,c1); $ADDU $t_2,$at $ADDU $c_2,$t_2 sltu $at,$c_2,$t_2 $ADDU $c_3,$at $ST $c_1,12*$BNSZ($a0) + mflo ($t_1,$a_6,$a_7) + mfhi ($t_2,$a_6,$a_7) ___ &add_c2($t_2,$t_1,$c_2,$c_3,$c_1,0, $a_7,$a_7); # mul_add_c(a[7],b[7],c3,c1,c2); $code.=<<___; $ST $c_2,13*$BNSZ($a0) - mflo $t_1 - mfhi $t_2 $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 $ADDU $t_2,$at @@ -2152,19 +2168,19 @@ $code.=<<___; .set reorder $LD $a_0,0($a1) $LD $a_1,$BNSZ($a1) - $MULTU $a_0,$a_0 # mul_add_c(a[0],b[0],c1,c2,c3); + $MULTU ($a_0,$a_0) # mul_add_c(a[0],b[0],c1,c2,c3); $LD $a_2,2*$BNSZ($a1) $LD $a_3,3*$BNSZ($a1) - mflo $c_1 - mfhi $c_2 + mflo ($c_1,$a_0,$a_0) + mfhi ($c_2,$a_0,$a_0) $ST $c_1,0($a0) - $MULTU $a_0,$a_1 # mul_add_c2(a[0],b[1],c2,c3,c1); - mflo $t_1 - mfhi $t_2 + $MULTU ($a_0,$a_1) # mul_add_c2(a[0],b[1],c2,c3,c1); + mflo ($t_1,$a_0,$a_1) + mfhi ($t_2,$a_0,$a_1) slt $c_1,$t_2,$zero $SLL $t_2,1 - $MULTU $a_2,$a_0 # mul_add_c2(a[2],b[0],c3,c1,c2); + $MULTU ($a_2,$a_0) # mul_add_c2(a[2],b[0],c3,c1,c2); slt $a2,$t_1,$zero $ADDU $t_2,$a2 $SLL $t_1,1 @@ -2172,20 +2188,22 @@ $code.=<<___; sltu $at,$c_2,$t_1 $ADDU $c_3,$t_2,$at $ST $c_2,$BNSZ($a0) + mflo ($t_1,$a_2,$a_0) + mfhi ($t_2,$a_2,$a_0) ___ &add_c2($t_2,$t_1,$c_3,$c_1,$c_2,0, $a_1,$a_1); # mul_add_c(a[1],b[1],c3,c1,c2); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_3,$t_1 sltu $at,$c_3,$t_1 - $MULTU $a_0,$a_3 # mul_add_c2(a[0],b[3],c1,c2,c3); + $MULTU ($a_0,$a_3) # mul_add_c2(a[0],b[3],c1,c2,c3); $ADDU $t_2,$at $ADDU $c_1,$t_2 sltu $at,$c_1,$t_2 $ADDU $c_2,$at $ST $c_3,2*$BNSZ($a0) + mflo ($t_1,$a_0,$a_3) + mfhi ($t_2,$a_0,$a_3) ___ &add_c2($t_2,$t_1,$c_1,$c_2,$c_3,0, $a_1,$a_2); # mul_add_c2(a2[1],b[2],c1,c2,c3); @@ -2197,24 +2215,22 @@ ___ &add_c2($t_2,$t_1,$c_2,$c_3,$c_1,0, $a_2,$a_2); # mul_add_c(a[2],b[2],c2,c3,c1); $code.=<<___; - mflo $t_1 - mfhi $t_2 $ADDU $c_2,$t_1 sltu $at,$c_2,$t_1 - $MULTU $a_2,$a_3 # mul_add_c2(a[2],b[3],c3,c1,c2); + $MULTU ($a_2,$a_3) # mul_add_c2(a[2],b[3],c3,c1,c2); $ADDU $t_2,$at $ADDU $c_3,$t_2 sltu $at,$c_3,$t_2 $ADDU $c_1,$at $ST $c_2,4*$BNSZ($a0) + mflo ($t_1,$a_2,$a_3) + mfhi ($t_2,$a_2,$a_3) ___ &add_c2($t_2,$t_1,$c_3,$c_1,$c_2,0, $a_3,$a_3); # mul_add_c(a[3],b[3],c1,c2,c3); $code.=<<___; $ST $c_3,5*$BNSZ($a0) - mflo $t_1 - mfhi $t_2 $ADDU $c_1,$t_1 sltu $at,$c_1,$t_1 $ADDU $t_2,$at diff --git a/crypto/bn/asm/pa-risc2.s b/crypto/bn/asm/pa-risc2.s deleted file mode 100644 index 413eac71..00000000 --- a/crypto/bn/asm/pa-risc2.s +++ /dev/null @@ -1,1624 +0,0 @@ -; Copyright 1998-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 -; -; PA-RISC 2.0 implementation of bn_asm code, based on the -; 64-bit version of the code. This code is effectively the -; same as the 64-bit version except the register model is -; slightly different given all values must be 32-bit between -; function calls. Thus the 64-bit return values are returned -; in %ret0 and %ret1 vs just %ret0 as is done in 64-bit -; -; -; This code is approximately 2x faster than the C version -; for RSA/DSA. -; -; See http://devresource.hp.com/ for more details on the PA-RISC -; architecture. Also see the book "PA-RISC 2.0 Architecture" -; by Gerry Kane for information on the instruction set architecture. -; -; Code written by Chris Ruemmler (with some help from the HP C -; compiler). -; -; The code compiles with HP's assembler -; - - .level 2.0N - .space $TEXT$ - .subspa $CODE$,QUAD=0,ALIGN=8,ACCESS=0x2c,CODE_ONLY - -; -; Global Register definitions used for the routines. -; -; Some information about HP's runtime architecture for 32-bits. -; -; "Caller save" means the calling function must save the register -; if it wants the register to be preserved. -; "Callee save" means if a function uses the register, it must save -; the value before using it. -; -; For the floating point registers -; -; "caller save" registers: fr4-fr11, fr22-fr31 -; "callee save" registers: fr12-fr21 -; "special" registers: fr0-fr3 (status and exception registers) -; -; For the integer registers -; value zero : r0 -; "caller save" registers: r1,r19-r26 -; "callee save" registers: r3-r18 -; return register : r2 (rp) -; return values ; r28,r29 (ret0,ret1) -; Stack pointer ; r30 (sp) -; millicode return ptr ; r31 (also a caller save register) - - -; -; Arguments to the routines -; -r_ptr .reg %r26 -a_ptr .reg %r25 -b_ptr .reg %r24 -num .reg %r24 -n .reg %r23 - -; -; Note that the "w" argument for bn_mul_add_words and bn_mul_words -; is passed on the stack at a delta of -56 from the top of stack -; as the routine is entered. -; - -; -; Globals used in some routines -; - -top_overflow .reg %r23 -high_mask .reg %r22 ; value 0xffffffff80000000L - - -;------------------------------------------------------------------------------ -; -; bn_mul_add_words -; -;BN_ULONG bn_mul_add_words(BN_ULONG *r_ptr, BN_ULONG *a_ptr, -; int num, BN_ULONG w) -; -; arg0 = r_ptr -; arg1 = a_ptr -; arg3 = num -; -56(sp) = w -; -; Local register definitions -; - -fm1 .reg %fr22 -fm .reg %fr23 -ht_temp .reg %fr24 -ht_temp_1 .reg %fr25 -lt_temp .reg %fr26 -lt_temp_1 .reg %fr27 -fm1_1 .reg %fr28 -fm_1 .reg %fr29 - -fw_h .reg %fr7L -fw_l .reg %fr7R -fw .reg %fr7 - -fht_0 .reg %fr8L -flt_0 .reg %fr8R -t_float_0 .reg %fr8 - -fht_1 .reg %fr9L -flt_1 .reg %fr9R -t_float_1 .reg %fr9 - -tmp_0 .reg %r31 -tmp_1 .reg %r21 -m_0 .reg %r20 -m_1 .reg %r19 -ht_0 .reg %r1 -ht_1 .reg %r3 -lt_0 .reg %r4 -lt_1 .reg %r5 -m1_0 .reg %r6 -m1_1 .reg %r7 -rp_val .reg %r8 -rp_val_1 .reg %r9 - -bn_mul_add_words - .export bn_mul_add_words,entry,NO_RELOCATION,LONG_RETURN - .proc - .callinfo frame=128 - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - NOP ; Needed to make the loop 16-byte aligned - NOP ; needed to make the loop 16-byte aligned - - STD %r5,16(%sp) ; save r5 - NOP - STD %r6,24(%sp) ; save r6 - STD %r7,32(%sp) ; save r7 - - STD %r8,40(%sp) ; save r8 - STD %r9,48(%sp) ; save r9 - COPY %r0,%ret1 ; return 0 by default - DEPDI,Z 1,31,1,top_overflow ; top_overflow = 1 << 32 - - CMPIB,>= 0,num,bn_mul_add_words_exit ; if (num <= 0) then exit - LDO 128(%sp),%sp ; bump stack - - ; - ; The loop is unrolled twice, so if there is only 1 number - ; then go straight to the cleanup code. - ; - CMPIB,= 1,num,bn_mul_add_words_single_top - FLDD -184(%sp),fw ; (-56-128) load up w into fw (fw_h/fw_l) - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; - ; PA-RISC 2.0 chips have two fully pipelined multipliers, thus - ; two 32-bit mutiplies can be issued per cycle. - ; -bn_mul_add_words_unroll2 - - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - FLDD 8(a_ptr),t_float_1 ; load up 64-bit value (fr8L) ht(L)/lt(R) - LDD 0(r_ptr),rp_val ; rp[0] - LDD 8(r_ptr),rp_val_1 ; rp[1] - - XMPYU fht_0,fw_l,fm1 ; m1[0] = fht_0*fw_l - XMPYU fht_1,fw_l,fm1_1 ; m1[1] = fht_1*fw_l - FSTD fm1,-16(%sp) ; -16(sp) = m1[0] - FSTD fm1_1,-48(%sp) ; -48(sp) = m1[1] - - XMPYU flt_0,fw_h,fm ; m[0] = flt_0*fw_h - XMPYU flt_1,fw_h,fm_1 ; m[1] = flt_1*fw_h - FSTD fm,-8(%sp) ; -8(sp) = m[0] - FSTD fm_1,-40(%sp) ; -40(sp) = m[1] - - XMPYU fht_0,fw_h,ht_temp ; ht_temp = fht_0*fw_h - XMPYU fht_1,fw_h,ht_temp_1 ; ht_temp_1 = fht_1*fw_h - FSTD ht_temp,-24(%sp) ; -24(sp) = ht_temp - FSTD ht_temp_1,-56(%sp) ; -56(sp) = ht_temp_1 - - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - XMPYU flt_1,fw_l,lt_temp_1 ; lt_temp = lt*fw_l - FSTD lt_temp,-32(%sp) ; -32(sp) = lt_temp - FSTD lt_temp_1,-64(%sp) ; -64(sp) = lt_temp_1 - - LDD -8(%sp),m_0 ; m[0] - LDD -40(%sp),m_1 ; m[1] - LDD -16(%sp),m1_0 ; m1[0] - LDD -48(%sp),m1_1 ; m1[1] - - LDD -24(%sp),ht_0 ; ht[0] - LDD -56(%sp),ht_1 ; ht[1] - ADD,L m1_0,m_0,tmp_0 ; tmp_0 = m[0] + m1[0]; - ADD,L m1_1,m_1,tmp_1 ; tmp_1 = m[1] + m1[1]; - - LDD -32(%sp),lt_0 - LDD -64(%sp),lt_1 - CMPCLR,*>>= tmp_0,m1_0, %r0 ; if (m[0] < m1[0]) - ADD,L ht_0,top_overflow,ht_0 ; ht[0] += (1<<32) - - CMPCLR,*>>= tmp_1,m1_1,%r0 ; if (m[1] < m1[1]) - ADD,L ht_1,top_overflow,ht_1 ; ht[1] += (1<<32) - EXTRD,U tmp_0,31,32,m_0 ; m[0]>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1[0] = m[0]<<32 - - EXTRD,U tmp_1,31,32,m_1 ; m[1]>>32 - DEPD,Z tmp_1,31,32,m1_1 ; m1[1] = m[1]<<32 - ADD,L ht_0,m_0,ht_0 ; ht[0]+= (m[0]>>32) - ADD,L ht_1,m_1,ht_1 ; ht[1]+= (m[1]>>32) - - ADD lt_0,m1_0,lt_0 ; lt[0] = lt[0]+m1[0]; - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - ADD lt_1,m1_1,lt_1 ; lt[1] = lt[1]+m1[1]; - ADD,DC ht_1,%r0,ht_1 ; ht[1]++ - - ADD %ret1,lt_0,lt_0 ; lt[0] = lt[0] + c; - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - ADD lt_0,rp_val,lt_0 ; lt[0] = lt[0]+rp[0] - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - - LDO -2(num),num ; num = num - 2; - ADD ht_0,lt_1,lt_1 ; lt[1] = lt[1] + ht_0 (c); - ADD,DC ht_1,%r0,ht_1 ; ht[1]++ - STD lt_0,0(r_ptr) ; rp[0] = lt[0] - - ADD lt_1,rp_val_1,lt_1 ; lt[1] = lt[1]+rp[1] - ADD,DC ht_1,%r0,%ret1 ; ht[1]++ - LDO 16(a_ptr),a_ptr ; a_ptr += 2 - - STD lt_1,8(r_ptr) ; rp[1] = lt[1] - CMPIB,<= 2,num,bn_mul_add_words_unroll2 ; go again if more to do - LDO 16(r_ptr),r_ptr ; r_ptr += 2 - - CMPIB,=,N 0,num,bn_mul_add_words_exit ; are we done, or cleanup last one - - ; - ; Top of loop aligned on 64-byte boundary - ; -bn_mul_add_words_single_top - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - LDD 0(r_ptr),rp_val ; rp[0] - LDO 8(a_ptr),a_ptr ; a_ptr++ - XMPYU fht_0,fw_l,fm1 ; m1 = ht*fw_l - FSTD fm1,-16(%sp) ; -16(sp) = m1 - XMPYU flt_0,fw_h,fm ; m = lt*fw_h - FSTD fm,-8(%sp) ; -8(sp) = m - XMPYU fht_0,fw_h,ht_temp ; ht_temp = ht*fw_h - FSTD ht_temp,-24(%sp) ; -24(sp) = ht - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - FSTD lt_temp,-32(%sp) ; -32(sp) = lt - - LDD -8(%sp),m_0 - LDD -16(%sp),m1_0 ; m1 = temp1 - ADD,L m_0,m1_0,tmp_0 ; tmp_0 = m + m1; - LDD -24(%sp),ht_0 - LDD -32(%sp),lt_0 - - CMPCLR,*>>= tmp_0,m1_0,%r0 ; if (m < m1) - ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) - - EXTRD,U tmp_0,31,32,m_0 ; m>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 - - ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) - ADD lt_0,m1_0,tmp_0 ; tmp_0 = lt+m1; - ADD,DC ht_0,%r0,ht_0 ; ht++ - ADD %ret1,tmp_0,lt_0 ; lt = lt + c; - ADD,DC ht_0,%r0,ht_0 ; ht++ - ADD lt_0,rp_val,lt_0 ; lt = lt+rp[0] - ADD,DC ht_0,%r0,%ret1 ; ht++ - STD lt_0,0(r_ptr) ; rp[0] = lt - -bn_mul_add_words_exit - .EXIT - - EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 - LDD -80(%sp),%r9 ; restore r9 - LDD -88(%sp),%r8 ; restore r8 - LDD -96(%sp),%r7 ; restore r7 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 ; restore r3 - .PROCEND ;in=23,24,25,26,29;out=28; - -;---------------------------------------------------------------------------- -; -;BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) -; -; arg0 = rp -; arg1 = ap -; arg3 = num -; w on stack at -56(sp) - -bn_mul_words - .proc - .callinfo frame=128 - .entry - .EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - NOP - STD %r5,16(%sp) ; save r5 - - STD %r6,24(%sp) ; save r6 - STD %r7,32(%sp) ; save r7 - COPY %r0,%ret1 ; return 0 by default - DEPDI,Z 1,31,1,top_overflow ; top_overflow = 1 << 32 - - CMPIB,>= 0,num,bn_mul_words_exit - LDO 128(%sp),%sp ; bump stack - - ; - ; See if only 1 word to do, thus just do cleanup - ; - CMPIB,= 1,num,bn_mul_words_single_top - FLDD -184(%sp),fw ; (-56-128) load up w into fw (fw_h/fw_l) - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; - ; PA-RISC 2.0 chips have two fully pipelined multipliers, thus - ; two 32-bit mutiplies can be issued per cycle. - ; -bn_mul_words_unroll2 - - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - FLDD 8(a_ptr),t_float_1 ; load up 64-bit value (fr8L) ht(L)/lt(R) - XMPYU fht_0,fw_l,fm1 ; m1[0] = fht_0*fw_l - XMPYU fht_1,fw_l,fm1_1 ; m1[1] = ht*fw_l - - FSTD fm1,-16(%sp) ; -16(sp) = m1 - FSTD fm1_1,-48(%sp) ; -48(sp) = m1 - XMPYU flt_0,fw_h,fm ; m = lt*fw_h - XMPYU flt_1,fw_h,fm_1 ; m = lt*fw_h - - FSTD fm,-8(%sp) ; -8(sp) = m - FSTD fm_1,-40(%sp) ; -40(sp) = m - XMPYU fht_0,fw_h,ht_temp ; ht_temp = fht_0*fw_h - XMPYU fht_1,fw_h,ht_temp_1 ; ht_temp = ht*fw_h - - FSTD ht_temp,-24(%sp) ; -24(sp) = ht - FSTD ht_temp_1,-56(%sp) ; -56(sp) = ht - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - XMPYU flt_1,fw_l,lt_temp_1 ; lt_temp = lt*fw_l - - FSTD lt_temp,-32(%sp) ; -32(sp) = lt - FSTD lt_temp_1,-64(%sp) ; -64(sp) = lt - LDD -8(%sp),m_0 - LDD -40(%sp),m_1 - - LDD -16(%sp),m1_0 - LDD -48(%sp),m1_1 - LDD -24(%sp),ht_0 - LDD -56(%sp),ht_1 - - ADD,L m1_0,m_0,tmp_0 ; tmp_0 = m + m1; - ADD,L m1_1,m_1,tmp_1 ; tmp_1 = m + m1; - LDD -32(%sp),lt_0 - LDD -64(%sp),lt_1 - - CMPCLR,*>>= tmp_0,m1_0, %r0 ; if (m < m1) - ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) - CMPCLR,*>>= tmp_1,m1_1,%r0 ; if (m < m1) - ADD,L ht_1,top_overflow,ht_1 ; ht += (1<<32) - - EXTRD,U tmp_0,31,32,m_0 ; m>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 - EXTRD,U tmp_1,31,32,m_1 ; m>>32 - DEPD,Z tmp_1,31,32,m1_1 ; m1 = m<<32 - - ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) - ADD,L ht_1,m_1,ht_1 ; ht+= (m>>32) - ADD lt_0,m1_0,lt_0 ; lt = lt+m1; - ADD,DC ht_0,%r0,ht_0 ; ht++ - - ADD lt_1,m1_1,lt_1 ; lt = lt+m1; - ADD,DC ht_1,%r0,ht_1 ; ht++ - ADD %ret1,lt_0,lt_0 ; lt = lt + c (ret1); - ADD,DC ht_0,%r0,ht_0 ; ht++ - - ADD ht_0,lt_1,lt_1 ; lt = lt + c (ht_0) - ADD,DC ht_1,%r0,ht_1 ; ht++ - STD lt_0,0(r_ptr) ; rp[0] = lt - STD lt_1,8(r_ptr) ; rp[1] = lt - - COPY ht_1,%ret1 ; carry = ht - LDO -2(num),num ; num = num - 2; - LDO 16(a_ptr),a_ptr ; ap += 2 - CMPIB,<= 2,num,bn_mul_words_unroll2 - LDO 16(r_ptr),r_ptr ; rp++ - - CMPIB,=,N 0,num,bn_mul_words_exit ; are we done? - - ; - ; Top of loop aligned on 64-byte boundary - ; -bn_mul_words_single_top - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - - XMPYU fht_0,fw_l,fm1 ; m1 = ht*fw_l - FSTD fm1,-16(%sp) ; -16(sp) = m1 - XMPYU flt_0,fw_h,fm ; m = lt*fw_h - FSTD fm,-8(%sp) ; -8(sp) = m - XMPYU fht_0,fw_h,ht_temp ; ht_temp = ht*fw_h - FSTD ht_temp,-24(%sp) ; -24(sp) = ht - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - FSTD lt_temp,-32(%sp) ; -32(sp) = lt - - LDD -8(%sp),m_0 - LDD -16(%sp),m1_0 - ADD,L m_0,m1_0,tmp_0 ; tmp_0 = m + m1; - LDD -24(%sp),ht_0 - LDD -32(%sp),lt_0 - - CMPCLR,*>>= tmp_0,m1_0,%r0 ; if (m < m1) - ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) - - EXTRD,U tmp_0,31,32,m_0 ; m>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 - - ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) - ADD lt_0,m1_0,lt_0 ; lt= lt+m1; - ADD,DC ht_0,%r0,ht_0 ; ht++ - - ADD %ret1,lt_0,lt_0 ; lt = lt + c; - ADD,DC ht_0,%r0,ht_0 ; ht++ - - COPY ht_0,%ret1 ; copy carry - STD lt_0,0(r_ptr) ; rp[0] = lt - -bn_mul_words_exit - .EXIT - EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 - LDD -96(%sp),%r7 ; restore r7 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 ; restore r3 - .PROCEND - -;---------------------------------------------------------------------------- -; -;void bn_sqr_words(BN_ULONG *rp, BN_ULONG *ap, int num) -; -; arg0 = rp -; arg1 = ap -; arg2 = num -; - -bn_sqr_words - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - NOP - STD %r5,16(%sp) ; save r5 - - CMPIB,>= 0,num,bn_sqr_words_exit - LDO 128(%sp),%sp ; bump stack - - ; - ; If only 1, the goto straight to cleanup - ; - CMPIB,= 1,num,bn_sqr_words_single_top - DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; - -bn_sqr_words_unroll2 - FLDD 0(a_ptr),t_float_0 ; a[0] - FLDD 8(a_ptr),t_float_1 ; a[1] - XMPYU fht_0,flt_0,fm ; m[0] - XMPYU fht_1,flt_1,fm_1 ; m[1] - - FSTD fm,-24(%sp) ; store m[0] - FSTD fm_1,-56(%sp) ; store m[1] - XMPYU flt_0,flt_0,lt_temp ; lt[0] - XMPYU flt_1,flt_1,lt_temp_1 ; lt[1] - - FSTD lt_temp,-16(%sp) ; store lt[0] - FSTD lt_temp_1,-48(%sp) ; store lt[1] - XMPYU fht_0,fht_0,ht_temp ; ht[0] - XMPYU fht_1,fht_1,ht_temp_1 ; ht[1] - - FSTD ht_temp,-8(%sp) ; store ht[0] - FSTD ht_temp_1,-40(%sp) ; store ht[1] - LDD -24(%sp),m_0 - LDD -56(%sp),m_1 - - AND m_0,high_mask,tmp_0 ; m[0] & Mask - AND m_1,high_mask,tmp_1 ; m[1] & Mask - DEPD,Z m_0,30,31,m_0 ; m[0] << 32+1 - DEPD,Z m_1,30,31,m_1 ; m[1] << 32+1 - - LDD -16(%sp),lt_0 - LDD -48(%sp),lt_1 - EXTRD,U tmp_0,32,33,tmp_0 ; tmp_0 = m[0]&Mask >> 32-1 - EXTRD,U tmp_1,32,33,tmp_1 ; tmp_1 = m[1]&Mask >> 32-1 - - LDD -8(%sp),ht_0 - LDD -40(%sp),ht_1 - ADD,L ht_0,tmp_0,ht_0 ; ht[0] += tmp_0 - ADD,L ht_1,tmp_1,ht_1 ; ht[1] += tmp_1 - - ADD lt_0,m_0,lt_0 ; lt = lt+m - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - STD lt_0,0(r_ptr) ; rp[0] = lt[0] - STD ht_0,8(r_ptr) ; rp[1] = ht[1] - - ADD lt_1,m_1,lt_1 ; lt = lt+m - ADD,DC ht_1,%r0,ht_1 ; ht[1]++ - STD lt_1,16(r_ptr) ; rp[2] = lt[1] - STD ht_1,24(r_ptr) ; rp[3] = ht[1] - - LDO -2(num),num ; num = num - 2; - LDO 16(a_ptr),a_ptr ; ap += 2 - CMPIB,<= 2,num,bn_sqr_words_unroll2 - LDO 32(r_ptr),r_ptr ; rp += 4 - - CMPIB,=,N 0,num,bn_sqr_words_exit ; are we done? - - ; - ; Top of loop aligned on 64-byte boundary - ; -bn_sqr_words_single_top - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - - XMPYU fht_0,flt_0,fm ; m - FSTD fm,-24(%sp) ; store m - - XMPYU flt_0,flt_0,lt_temp ; lt - FSTD lt_temp,-16(%sp) ; store lt - - XMPYU fht_0,fht_0,ht_temp ; ht - FSTD ht_temp,-8(%sp) ; store ht - - LDD -24(%sp),m_0 ; load m - AND m_0,high_mask,tmp_0 ; m & Mask - DEPD,Z m_0,30,31,m_0 ; m << 32+1 - LDD -16(%sp),lt_0 ; lt - - LDD -8(%sp),ht_0 ; ht - EXTRD,U tmp_0,32,33,tmp_0 ; tmp_0 = m&Mask >> 32-1 - ADD m_0,lt_0,lt_0 ; lt = lt+m - ADD,L ht_0,tmp_0,ht_0 ; ht += tmp_0 - ADD,DC ht_0,%r0,ht_0 ; ht++ - - STD lt_0,0(r_ptr) ; rp[0] = lt - STD ht_0,8(r_ptr) ; rp[1] = ht - -bn_sqr_words_exit - .EXIT - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - .PROCEND ;in=23,24,25,26,29;out=28; - - -;---------------------------------------------------------------------------- -; -;BN_ULONG bn_add_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) -; -; arg0 = rp -; arg1 = ap -; arg2 = bp -; arg3 = n - -t .reg %r22 -b .reg %r21 -l .reg %r20 - -bn_add_words - .proc - .entry - .callinfo - .EXPORT bn_add_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .align 64 - - CMPIB,>= 0,n,bn_add_words_exit - COPY %r0,%ret1 ; return 0 by default - - ; - ; If 2 or more numbers do the loop - ; - CMPIB,= 1,n,bn_add_words_single_top - NOP - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; -bn_add_words_unroll2 - LDD 0(a_ptr),t - LDD 0(b_ptr),b - ADD t,%ret1,t ; t = t+c; - ADD,DC %r0,%r0,%ret1 ; set c to carry - ADD t,b,l ; l = t + b[0] - ADD,DC %ret1,%r0,%ret1 ; c+= carry - STD l,0(r_ptr) - - LDD 8(a_ptr),t - LDD 8(b_ptr),b - ADD t,%ret1,t ; t = t+c; - ADD,DC %r0,%r0,%ret1 ; set c to carry - ADD t,b,l ; l = t + b[0] - ADD,DC %ret1,%r0,%ret1 ; c+= carry - STD l,8(r_ptr) - - LDO -2(n),n - LDO 16(a_ptr),a_ptr - LDO 16(b_ptr),b_ptr - - CMPIB,<= 2,n,bn_add_words_unroll2 - LDO 16(r_ptr),r_ptr - - CMPIB,=,N 0,n,bn_add_words_exit ; are we done? - -bn_add_words_single_top - LDD 0(a_ptr),t - LDD 0(b_ptr),b - - ADD t,%ret1,t ; t = t+c; - ADD,DC %r0,%r0,%ret1 ; set c to carry (could use CMPCLR??) - ADD t,b,l ; l = t + b[0] - ADD,DC %ret1,%r0,%ret1 ; c+= carry - STD l,0(r_ptr) - -bn_add_words_exit - .EXIT - BVE (%rp) - EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 - .PROCEND ;in=23,24,25,26,29;out=28; - -;---------------------------------------------------------------------------- -; -;BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) -; -; arg0 = rp -; arg1 = ap -; arg2 = bp -; arg3 = n - -t1 .reg %r22 -t2 .reg %r21 -sub_tmp1 .reg %r20 -sub_tmp2 .reg %r19 - - -bn_sub_words - .proc - .callinfo - .EXPORT bn_sub_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - CMPIB,>= 0,n,bn_sub_words_exit - COPY %r0,%ret1 ; return 0 by default - - ; - ; If 2 or more numbers do the loop - ; - CMPIB,= 1,n,bn_sub_words_single_top - NOP - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; -bn_sub_words_unroll2 - LDD 0(a_ptr),t1 - LDD 0(b_ptr),t2 - SUB t1,t2,sub_tmp1 ; t3 = t1-t2; - SUB sub_tmp1,%ret1,sub_tmp1 ; t3 = t3- c; - - CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 - LDO 1(%r0),sub_tmp2 - - CMPCLR,*= t1,t2,%r0 - COPY sub_tmp2,%ret1 - STD sub_tmp1,0(r_ptr) - - LDD 8(a_ptr),t1 - LDD 8(b_ptr),t2 - SUB t1,t2,sub_tmp1 ; t3 = t1-t2; - SUB sub_tmp1,%ret1,sub_tmp1 ; t3 = t3- c; - CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 - LDO 1(%r0),sub_tmp2 - - CMPCLR,*= t1,t2,%r0 - COPY sub_tmp2,%ret1 - STD sub_tmp1,8(r_ptr) - - LDO -2(n),n - LDO 16(a_ptr),a_ptr - LDO 16(b_ptr),b_ptr - - CMPIB,<= 2,n,bn_sub_words_unroll2 - LDO 16(r_ptr),r_ptr - - CMPIB,=,N 0,n,bn_sub_words_exit ; are we done? - -bn_sub_words_single_top - LDD 0(a_ptr),t1 - LDD 0(b_ptr),t2 - SUB t1,t2,sub_tmp1 ; t3 = t1-t2; - SUB sub_tmp1,%ret1,sub_tmp1 ; t3 = t3- c; - CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 - LDO 1(%r0),sub_tmp2 - - CMPCLR,*= t1,t2,%r0 - COPY sub_tmp2,%ret1 - - STD sub_tmp1,0(r_ptr) - -bn_sub_words_exit - .EXIT - BVE (%rp) - EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 - .PROCEND ;in=23,24,25,26,29;out=28; - -;------------------------------------------------------------------------------ -; -; unsigned long bn_div_words(unsigned long h, unsigned long l, unsigned long d) -; -; arg0 = h -; arg1 = l -; arg2 = d -; -; This is mainly just output from the HP C compiler. -; -;------------------------------------------------------------------------------ -bn_div_words - .PROC - .EXPORT bn_div_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR,LONG_RETURN - .IMPORT BN_num_bits_word,CODE - ;--- not PIC .IMPORT __iob,DATA - ;--- not PIC .IMPORT fprintf,CODE - .IMPORT abort,CODE - .IMPORT $$div2U,MILLICODE - .CALLINFO CALLER,FRAME=144,ENTRY_GR=%r9,SAVE_RP,ARGS_SAVED,ORDERING_AWARE - .ENTRY - STW %r2,-20(%r30) ;offset 0x8ec - STW,MA %r3,192(%r30) ;offset 0x8f0 - STW %r4,-188(%r30) ;offset 0x8f4 - DEPD %r5,31,32,%r6 ;offset 0x8f8 - STD %r6,-184(%r30) ;offset 0x8fc - DEPD %r7,31,32,%r8 ;offset 0x900 - STD %r8,-176(%r30) ;offset 0x904 - STW %r9,-168(%r30) ;offset 0x908 - LDD -248(%r30),%r3 ;offset 0x90c - COPY %r26,%r4 ;offset 0x910 - COPY %r24,%r5 ;offset 0x914 - DEPD %r25,31,32,%r4 ;offset 0x918 - CMPB,*<> %r3,%r0,$0006000C ;offset 0x91c - DEPD %r23,31,32,%r5 ;offset 0x920 - MOVIB,TR -1,%r29,$00060002 ;offset 0x924 - EXTRD,U %r29,31,32,%r28 ;offset 0x928 -$0006002A - LDO -1(%r29),%r29 ;offset 0x92c - SUB %r23,%r7,%r23 ;offset 0x930 -$00060024 - SUB %r4,%r31,%r25 ;offset 0x934 - AND %r25,%r19,%r26 ;offset 0x938 - CMPB,*<>,N %r0,%r26,$00060046 ;offset 0x93c - DEPD,Z %r25,31,32,%r20 ;offset 0x940 - OR %r20,%r24,%r21 ;offset 0x944 - CMPB,*<<,N %r21,%r23,$0006002A ;offset 0x948 - SUB %r31,%r2,%r31 ;offset 0x94c -$00060046 -$0006002E - DEPD,Z %r23,31,32,%r25 ;offset 0x950 - EXTRD,U %r23,31,32,%r26 ;offset 0x954 - AND %r25,%r19,%r24 ;offset 0x958 - ADD,L %r31,%r26,%r31 ;offset 0x95c - CMPCLR,*>>= %r5,%r24,%r0 ;offset 0x960 - LDO 1(%r31),%r31 ;offset 0x964 -$00060032 - CMPB,*<<=,N %r31,%r4,$00060036 ;offset 0x968 - LDO -1(%r29),%r29 ;offset 0x96c - ADD,L %r4,%r3,%r4 ;offset 0x970 -$00060036 - ADDIB,=,N -1,%r8,$D0 ;offset 0x974 - SUB %r5,%r24,%r28 ;offset 0x978 -$0006003A - SUB %r4,%r31,%r24 ;offset 0x97c - SHRPD %r24,%r28,32,%r4 ;offset 0x980 - DEPD,Z %r29,31,32,%r9 ;offset 0x984 - DEPD,Z %r28,31,32,%r5 ;offset 0x988 -$0006001C - EXTRD,U %r4,31,32,%r31 ;offset 0x98c - CMPB,*<>,N %r31,%r2,$00060020 ;offset 0x990 - MOVB,TR %r6,%r29,$D1 ;offset 0x994 - STD %r29,-152(%r30) ;offset 0x998 -$0006000C - EXTRD,U %r3,31,32,%r25 ;offset 0x99c - COPY %r3,%r26 ;offset 0x9a0 - EXTRD,U %r3,31,32,%r9 ;offset 0x9a4 - EXTRD,U %r4,31,32,%r8 ;offset 0x9a8 - .CALL ARGW0=GR,ARGW1=GR,RTNVAL=GR ;in=25,26;out=28; - B,L BN_num_bits_word,%r2 ;offset 0x9ac - EXTRD,U %r5,31,32,%r7 ;offset 0x9b0 - LDI 64,%r20 ;offset 0x9b4 - DEPD %r7,31,32,%r5 ;offset 0x9b8 - DEPD %r8,31,32,%r4 ;offset 0x9bc - DEPD %r9,31,32,%r3 ;offset 0x9c0 - CMPB,= %r28,%r20,$00060012 ;offset 0x9c4 - COPY %r28,%r24 ;offset 0x9c8 - MTSARCM %r24 ;offset 0x9cc - DEPDI,Z -1,%sar,1,%r19 ;offset 0x9d0 - CMPB,*>>,N %r4,%r19,$D2 ;offset 0x9d4 -$00060012 - SUBI 64,%r24,%r31 ;offset 0x9d8 - CMPCLR,*<< %r4,%r3,%r0 ;offset 0x9dc - SUB %r4,%r3,%r4 ;offset 0x9e0 -$00060016 - CMPB,= %r31,%r0,$0006001A ;offset 0x9e4 - COPY %r0,%r9 ;offset 0x9e8 - MTSARCM %r31 ;offset 0x9ec - DEPD,Z %r3,%sar,64,%r3 ;offset 0x9f0 - SUBI 64,%r31,%r26 ;offset 0x9f4 - MTSAR %r26 ;offset 0x9f8 - SHRPD %r4,%r5,%sar,%r4 ;offset 0x9fc - MTSARCM %r31 ;offset 0xa00 - DEPD,Z %r5,%sar,64,%r5 ;offset 0xa04 -$0006001A - DEPDI,Z -1,31,32,%r19 ;offset 0xa08 - AND %r3,%r19,%r29 ;offset 0xa0c - EXTRD,U %r29,31,32,%r2 ;offset 0xa10 - DEPDI,Z -1,63,32,%r6 ;offset 0xa14 - MOVIB,TR 2,%r8,$0006001C ;offset 0xa18 - EXTRD,U %r3,63,32,%r7 ;offset 0xa1c -$D2 - ;--- not PIC ADDIL LR'__iob-$global$,%r27,%r1 ;offset 0xa20 - ;--- not PIC LDIL LR'C$7,%r21 ;offset 0xa24 - ;--- not PIC LDO RR'__iob-$global$+32(%r1),%r26 ;offset 0xa28 - ;--- not PIC .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR ;in=24,25,26;out=28; - ;--- not PIC B,L fprintf,%r2 ;offset 0xa2c - ;--- not PIC LDO RR'C$7(%r21),%r25 ;offset 0xa30 - .CALL ; - B,L abort,%r2 ;offset 0xa34 - NOP ;offset 0xa38 - B $D3 ;offset 0xa3c - LDW -212(%r30),%r2 ;offset 0xa40 -$00060020 - COPY %r4,%r26 ;offset 0xa44 - EXTRD,U %r4,31,32,%r25 ;offset 0xa48 - COPY %r2,%r24 ;offset 0xa4c - .CALL ;in=23,24,25,26;out=20,21,22,28,29; (MILLICALL) - B,L $$div2U,%r31 ;offset 0xa50 - EXTRD,U %r2,31,32,%r23 ;offset 0xa54 - DEPD %r28,31,32,%r29 ;offset 0xa58 -$00060022 - STD %r29,-152(%r30) ;offset 0xa5c -$D1 - AND %r5,%r19,%r24 ;offset 0xa60 - EXTRD,U %r24,31,32,%r24 ;offset 0xa64 - STW %r2,-160(%r30) ;offset 0xa68 - STW %r7,-128(%r30) ;offset 0xa6c - FLDD -152(%r30),%fr4 ;offset 0xa70 - FLDD -152(%r30),%fr7 ;offset 0xa74 - FLDW -160(%r30),%fr8L ;offset 0xa78 - FLDW -128(%r30),%fr5L ;offset 0xa7c - XMPYU %fr8L,%fr7L,%fr10 ;offset 0xa80 - FSTD %fr10,-136(%r30) ;offset 0xa84 - XMPYU %fr8L,%fr7R,%fr22 ;offset 0xa88 - FSTD %fr22,-144(%r30) ;offset 0xa8c - XMPYU %fr5L,%fr4L,%fr11 ;offset 0xa90 - XMPYU %fr5L,%fr4R,%fr23 ;offset 0xa94 - FSTD %fr11,-112(%r30) ;offset 0xa98 - FSTD %fr23,-120(%r30) ;offset 0xa9c - LDD -136(%r30),%r28 ;offset 0xaa0 - DEPD,Z %r28,31,32,%r31 ;offset 0xaa4 - LDD -144(%r30),%r20 ;offset 0xaa8 - ADD,L %r20,%r31,%r31 ;offset 0xaac - LDD -112(%r30),%r22 ;offset 0xab0 - DEPD,Z %r22,31,32,%r22 ;offset 0xab4 - LDD -120(%r30),%r21 ;offset 0xab8 - B $00060024 ;offset 0xabc - ADD,L %r21,%r22,%r23 ;offset 0xac0 -$D0 - OR %r9,%r29,%r29 ;offset 0xac4 -$00060040 - EXTRD,U %r29,31,32,%r28 ;offset 0xac8 -$00060002 -$L2 - LDW -212(%r30),%r2 ;offset 0xacc -$D3 - LDW -168(%r30),%r9 ;offset 0xad0 - LDD -176(%r30),%r8 ;offset 0xad4 - EXTRD,U %r8,31,32,%r7 ;offset 0xad8 - LDD -184(%r30),%r6 ;offset 0xadc - EXTRD,U %r6,31,32,%r5 ;offset 0xae0 - LDW -188(%r30),%r4 ;offset 0xae4 - BVE (%r2) ;offset 0xae8 - .EXIT - LDW,MB -192(%r30),%r3 ;offset 0xaec - .PROCEND ;in=23,25;out=28,29;fpin=105,107; - - - - -;---------------------------------------------------------------------------- -; -; Registers to hold 64-bit values to manipulate. The "L" part -; of the register corresponds to the upper 32-bits, while the "R" -; part corresponds to the lower 32-bits -; -; Note, that when using b6 and b7, the code must save these before -; using them because they are callee save registers -; -; -; Floating point registers to use to save values that -; are manipulated. These don't collide with ftemp1-6 and -; are all caller save registers -; -a0 .reg %fr22 -a0L .reg %fr22L -a0R .reg %fr22R - -a1 .reg %fr23 -a1L .reg %fr23L -a1R .reg %fr23R - -a2 .reg %fr24 -a2L .reg %fr24L -a2R .reg %fr24R - -a3 .reg %fr25 -a3L .reg %fr25L -a3R .reg %fr25R - -a4 .reg %fr26 -a4L .reg %fr26L -a4R .reg %fr26R - -a5 .reg %fr27 -a5L .reg %fr27L -a5R .reg %fr27R - -a6 .reg %fr28 -a6L .reg %fr28L -a6R .reg %fr28R - -a7 .reg %fr29 -a7L .reg %fr29L -a7R .reg %fr29R - -b0 .reg %fr30 -b0L .reg %fr30L -b0R .reg %fr30R - -b1 .reg %fr31 -b1L .reg %fr31L -b1R .reg %fr31R - -; -; Temporary floating point variables, these are all caller save -; registers -; -ftemp1 .reg %fr4 -ftemp2 .reg %fr5 -ftemp3 .reg %fr6 -ftemp4 .reg %fr7 - -; -; The B set of registers when used. -; - -b2 .reg %fr8 -b2L .reg %fr8L -b2R .reg %fr8R - -b3 .reg %fr9 -b3L .reg %fr9L -b3R .reg %fr9R - -b4 .reg %fr10 -b4L .reg %fr10L -b4R .reg %fr10R - -b5 .reg %fr11 -b5L .reg %fr11L -b5R .reg %fr11R - -b6 .reg %fr12 -b6L .reg %fr12L -b6R .reg %fr12R - -b7 .reg %fr13 -b7L .reg %fr13L -b7R .reg %fr13R - -c1 .reg %r21 ; only reg -temp1 .reg %r20 ; only reg -temp2 .reg %r19 ; only reg -temp3 .reg %r31 ; only reg - -m1 .reg %r28 -c2 .reg %r23 -high_one .reg %r1 -ht .reg %r6 -lt .reg %r5 -m .reg %r4 -c3 .reg %r3 - -SQR_ADD_C .macro A0L,A0R,C1,C2,C3 - XMPYU A0L,A0R,ftemp1 ; m - FSTD ftemp1,-24(%sp) ; store m - - XMPYU A0R,A0R,ftemp2 ; lt - FSTD ftemp2,-16(%sp) ; store lt - - XMPYU A0L,A0L,ftemp3 ; ht - FSTD ftemp3,-8(%sp) ; store ht - - LDD -24(%sp),m ; load m - AND m,high_mask,temp2 ; m & Mask - DEPD,Z m,30,31,temp3 ; m << 32+1 - LDD -16(%sp),lt ; lt - - LDD -8(%sp),ht ; ht - EXTRD,U temp2,32,33,temp1 ; temp1 = m&Mask >> 32-1 - ADD temp3,lt,lt ; lt = lt+m - ADD,L ht,temp1,ht ; ht += temp1 - ADD,DC ht,%r0,ht ; ht++ - - ADD C1,lt,C1 ; c1=c1+lt - ADD,DC ht,%r0,ht ; ht++ - - ADD C2,ht,C2 ; c2=c2+ht - ADD,DC C3,%r0,C3 ; c3++ -.endm - -SQR_ADD_C2 .macro A0L,A0R,A1L,A1R,C1,C2,C3 - XMPYU A0L,A1R,ftemp1 ; m1 = bl*ht - FSTD ftemp1,-16(%sp) ; - XMPYU A0R,A1L,ftemp2 ; m = bh*lt - FSTD ftemp2,-8(%sp) ; - XMPYU A0R,A1R,ftemp3 ; lt = bl*lt - FSTD ftemp3,-32(%sp) - XMPYU A0L,A1L,ftemp4 ; ht = bh*ht - FSTD ftemp4,-24(%sp) ; - - LDD -8(%sp),m ; r21 = m - LDD -16(%sp),m1 ; r19 = m1 - ADD,L m,m1,m ; m+m1 - - DEPD,Z m,31,32,temp3 ; (m+m1<<32) - LDD -24(%sp),ht ; r24 = ht - - CMPCLR,*>>= m,m1,%r0 ; if (m < m1) - ADD,L ht,high_one,ht ; ht+=high_one - - EXTRD,U m,31,32,temp1 ; m >> 32 - LDD -32(%sp),lt ; lt - ADD,L ht,temp1,ht ; ht+= m>>32 - ADD lt,temp3,lt ; lt = lt+m1 - ADD,DC ht,%r0,ht ; ht++ - - ADD ht,ht,ht ; ht=ht+ht; - ADD,DC C3,%r0,C3 ; add in carry (c3++) - - ADD lt,lt,lt ; lt=lt+lt; - ADD,DC ht,%r0,ht ; add in carry (ht++) - - ADD C1,lt,C1 ; c1=c1+lt - ADD,DC,*NUV ht,%r0,ht ; add in carry (ht++) - LDO 1(C3),C3 ; bump c3 if overflow,nullify otherwise - - ADD C2,ht,C2 ; c2 = c2 + ht - ADD,DC C3,%r0,C3 ; add in carry (c3++) -.endm - -; -;void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a) -; arg0 = r_ptr -; arg1 = a_ptr -; - -bn_sqr_comba8 - .PROC - .CALLINFO FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_sqr_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .ENTRY - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - FLDD 32(a_ptr),a4 - FLDD 40(a_ptr),a5 - FLDD 48(a_ptr),a6 - FLDD 56(a_ptr),a7 - - SQR_ADD_C a0L,a0R,c1,c2,c3 - STD c1,0(r_ptr) ; r[0] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 - STD c2,8(r_ptr) ; r[1] = c2; - COPY %r0,c2 - - SQR_ADD_C a1L,a1R,c3,c1,c2 - SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 - STD c3,16(r_ptr) ; r[2] = c3; - COPY %r0,c3 - - SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 - SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 - STD c1,24(r_ptr) ; r[3] = c1; - COPY %r0,c1 - - SQR_ADD_C a2L,a2R,c2,c3,c1 - SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 - SQR_ADD_C2 a4L,a4R,a0L,a0R,c2,c3,c1 - STD c2,32(r_ptr) ; r[4] = c2; - COPY %r0,c2 - - SQR_ADD_C2 a5L,a5R,a0L,a0R,c3,c1,c2 - SQR_ADD_C2 a4L,a4R,a1L,a1R,c3,c1,c2 - SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 - STD c3,40(r_ptr) ; r[5] = c3; - COPY %r0,c3 - - SQR_ADD_C a3L,a3R,c1,c2,c3 - SQR_ADD_C2 a4L,a4R,a2L,a2R,c1,c2,c3 - SQR_ADD_C2 a5L,a5R,a1L,a1R,c1,c2,c3 - SQR_ADD_C2 a6L,a6R,a0L,a0R,c1,c2,c3 - STD c1,48(r_ptr) ; r[6] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a7L,a7R,a0L,a0R,c2,c3,c1 - SQR_ADD_C2 a6L,a6R,a1L,a1R,c2,c3,c1 - SQR_ADD_C2 a5L,a5R,a2L,a2R,c2,c3,c1 - SQR_ADD_C2 a4L,a4R,a3L,a3R,c2,c3,c1 - STD c2,56(r_ptr) ; r[7] = c2; - COPY %r0,c2 - - SQR_ADD_C a4L,a4R,c3,c1,c2 - SQR_ADD_C2 a5L,a5R,a3L,a3R,c3,c1,c2 - SQR_ADD_C2 a6L,a6R,a2L,a2R,c3,c1,c2 - SQR_ADD_C2 a7L,a7R,a1L,a1R,c3,c1,c2 - STD c3,64(r_ptr) ; r[8] = c3; - COPY %r0,c3 - - SQR_ADD_C2 a7L,a7R,a2L,a2R,c1,c2,c3 - SQR_ADD_C2 a6L,a6R,a3L,a3R,c1,c2,c3 - SQR_ADD_C2 a5L,a5R,a4L,a4R,c1,c2,c3 - STD c1,72(r_ptr) ; r[9] = c1; - COPY %r0,c1 - - SQR_ADD_C a5L,a5R,c2,c3,c1 - SQR_ADD_C2 a6L,a6R,a4L,a4R,c2,c3,c1 - SQR_ADD_C2 a7L,a7R,a3L,a3R,c2,c3,c1 - STD c2,80(r_ptr) ; r[10] = c2; - COPY %r0,c2 - - SQR_ADD_C2 a7L,a7R,a4L,a4R,c3,c1,c2 - SQR_ADD_C2 a6L,a6R,a5L,a5R,c3,c1,c2 - STD c3,88(r_ptr) ; r[11] = c3; - COPY %r0,c3 - - SQR_ADD_C a6L,a6R,c1,c2,c3 - SQR_ADD_C2 a7L,a7R,a5L,a5R,c1,c2,c3 - STD c1,96(r_ptr) ; r[12] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a7L,a7R,a6L,a6R,c2,c3,c1 - STD c2,104(r_ptr) ; r[13] = c2; - COPY %r0,c2 - - SQR_ADD_C a7L,a7R,c3,c1,c2 - STD c3, 112(r_ptr) ; r[14] = c3 - STD c1, 120(r_ptr) ; r[15] = c1 - - .EXIT - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - -;----------------------------------------------------------------------------- -; -;void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a) -; arg0 = r_ptr -; arg1 = a_ptr -; - -bn_sqr_comba4 - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_sqr_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - FLDD 32(a_ptr),a4 - FLDD 40(a_ptr),a5 - FLDD 48(a_ptr),a6 - FLDD 56(a_ptr),a7 - - SQR_ADD_C a0L,a0R,c1,c2,c3 - - STD c1,0(r_ptr) ; r[0] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 - - STD c2,8(r_ptr) ; r[1] = c2; - COPY %r0,c2 - - SQR_ADD_C a1L,a1R,c3,c1,c2 - SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 - - STD c3,16(r_ptr) ; r[2] = c3; - COPY %r0,c3 - - SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 - SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 - - STD c1,24(r_ptr) ; r[3] = c1; - COPY %r0,c1 - - SQR_ADD_C a2L,a2R,c2,c3,c1 - SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 - - STD c2,32(r_ptr) ; r[4] = c2; - COPY %r0,c2 - - SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 - STD c3,40(r_ptr) ; r[5] = c3; - COPY %r0,c3 - - SQR_ADD_C a3L,a3R,c1,c2,c3 - STD c1,48(r_ptr) ; r[6] = c1; - STD c2,56(r_ptr) ; r[7] = c2; - - .EXIT - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - - -;--------------------------------------------------------------------------- - -MUL_ADD_C .macro A0L,A0R,B0L,B0R,C1,C2,C3 - XMPYU A0L,B0R,ftemp1 ; m1 = bl*ht - FSTD ftemp1,-16(%sp) ; - XMPYU A0R,B0L,ftemp2 ; m = bh*lt - FSTD ftemp2,-8(%sp) ; - XMPYU A0R,B0R,ftemp3 ; lt = bl*lt - FSTD ftemp3,-32(%sp) - XMPYU A0L,B0L,ftemp4 ; ht = bh*ht - FSTD ftemp4,-24(%sp) ; - - LDD -8(%sp),m ; r21 = m - LDD -16(%sp),m1 ; r19 = m1 - ADD,L m,m1,m ; m+m1 - - DEPD,Z m,31,32,temp3 ; (m+m1<<32) - LDD -24(%sp),ht ; r24 = ht - - CMPCLR,*>>= m,m1,%r0 ; if (m < m1) - ADD,L ht,high_one,ht ; ht+=high_one - - EXTRD,U m,31,32,temp1 ; m >> 32 - LDD -32(%sp),lt ; lt - ADD,L ht,temp1,ht ; ht+= m>>32 - ADD lt,temp3,lt ; lt = lt+m1 - ADD,DC ht,%r0,ht ; ht++ - - ADD C1,lt,C1 ; c1=c1+lt - ADD,DC ht,%r0,ht ; bump c3 if overflow,nullify otherwise - - ADD C2,ht,C2 ; c2 = c2 + ht - ADD,DC C3,%r0,C3 ; add in carry (c3++) -.endm - - -; -;void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) -; arg0 = r_ptr -; arg1 = a_ptr -; arg2 = b_ptr -; - -bn_mul_comba8 - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_mul_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - FSTD %fr12,32(%sp) ; save r6 - FSTD %fr13,40(%sp) ; save r7 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - FLDD 32(a_ptr),a4 - FLDD 40(a_ptr),a5 - FLDD 48(a_ptr),a6 - FLDD 56(a_ptr),a7 - - FLDD 0(b_ptr),b0 - FLDD 8(b_ptr),b1 - FLDD 16(b_ptr),b2 - FLDD 24(b_ptr),b3 - FLDD 32(b_ptr),b4 - FLDD 40(b_ptr),b5 - FLDD 48(b_ptr),b6 - FLDD 56(b_ptr),b7 - - MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 - STD c1,0(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 - STD c2,8(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 - STD c3,16(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 - MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 - STD c1,24(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a4L,a4R,b0L,b0R,c2,c3,c1 - MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 - MUL_ADD_C a0L,a0R,b4L,b4R,c2,c3,c1 - STD c2,32(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a0L,a0R,b5L,b5R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b4L,b4R,c3,c1,c2 - MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 - MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 - MUL_ADD_C a4L,a4R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a5L,a5R,b0L,b0R,c3,c1,c2 - STD c3,40(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a6L,a6R,b0L,b0R,c1,c2,c3 - MUL_ADD_C a5L,a5R,b1L,b1R,c1,c2,c3 - MUL_ADD_C a4L,a4R,b2L,b2R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a2L,a2R,b4L,b4R,c1,c2,c3 - MUL_ADD_C a1L,a1R,b5L,b5R,c1,c2,c3 - MUL_ADD_C a0L,a0R,b6L,b6R,c1,c2,c3 - STD c1,48(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a0L,a0R,b7L,b7R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b6L,b6R,c2,c3,c1 - MUL_ADD_C a2L,a2R,b5L,b5R,c2,c3,c1 - MUL_ADD_C a3L,a3R,b4L,b4R,c2,c3,c1 - MUL_ADD_C a4L,a4R,b3L,b3R,c2,c3,c1 - MUL_ADD_C a5L,a5R,b2L,b2R,c2,c3,c1 - MUL_ADD_C a6L,a6R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a7L,a7R,b0L,b0R,c2,c3,c1 - STD c2,56(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a7L,a7R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a6L,a6R,b2L,b2R,c3,c1,c2 - MUL_ADD_C a5L,a5R,b3L,b3R,c3,c1,c2 - MUL_ADD_C a4L,a4R,b4L,b4R,c3,c1,c2 - MUL_ADD_C a3L,a3R,b5L,b5R,c3,c1,c2 - MUL_ADD_C a2L,a2R,b6L,b6R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b7L,b7R,c3,c1,c2 - STD c3,64(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a2L,a2R,b7L,b7R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b6L,b6R,c1,c2,c3 - MUL_ADD_C a4L,a4R,b5L,b5R,c1,c2,c3 - MUL_ADD_C a5L,a5R,b4L,b4R,c1,c2,c3 - MUL_ADD_C a6L,a6R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a7L,a7R,b2L,b2R,c1,c2,c3 - STD c1,72(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a7L,a7R,b3L,b3R,c2,c3,c1 - MUL_ADD_C a6L,a6R,b4L,b4R,c2,c3,c1 - MUL_ADD_C a5L,a5R,b5L,b5R,c2,c3,c1 - MUL_ADD_C a4L,a4R,b6L,b6R,c2,c3,c1 - MUL_ADD_C a3L,a3R,b7L,b7R,c2,c3,c1 - STD c2,80(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a4L,a4R,b7L,b7R,c3,c1,c2 - MUL_ADD_C a5L,a5R,b6L,b6R,c3,c1,c2 - MUL_ADD_C a6L,a6R,b5L,b5R,c3,c1,c2 - MUL_ADD_C a7L,a7R,b4L,b4R,c3,c1,c2 - STD c3,88(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a7L,a7R,b5L,b5R,c1,c2,c3 - MUL_ADD_C a6L,a6R,b6L,b6R,c1,c2,c3 - MUL_ADD_C a5L,a5R,b7L,b7R,c1,c2,c3 - STD c1,96(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a6L,a6R,b7L,b7R,c2,c3,c1 - MUL_ADD_C a7L,a7R,b6L,b6R,c2,c3,c1 - STD c2,104(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a7L,a7R,b7L,b7R,c3,c1,c2 - STD c3,112(r_ptr) - STD c1,120(r_ptr) - - .EXIT - FLDD -88(%sp),%fr13 - FLDD -96(%sp),%fr12 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - -;----------------------------------------------------------------------------- -; -;void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) -; arg0 = r_ptr -; arg1 = a_ptr -; arg2 = b_ptr -; - -bn_mul_comba4 - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_mul_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - FSTD %fr12,32(%sp) ; save r6 - FSTD %fr13,40(%sp) ; save r7 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - - FLDD 0(b_ptr),b0 - FLDD 8(b_ptr),b1 - FLDD 16(b_ptr),b2 - FLDD 24(b_ptr),b3 - - MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 - STD c1,0(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 - STD c2,8(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 - STD c3,16(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 - MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 - STD c1,24(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 - STD c2,32(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 - MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 - STD c3,40(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 - STD c1,48(r_ptr) - STD c2,56(r_ptr) - - .EXIT - FLDD -88(%sp),%fr13 - FLDD -96(%sp),%fr12 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - - -;--- not PIC .SPACE $TEXT$ -;--- not PIC .SUBSPA $CODE$ -;--- not PIC .SPACE $PRIVATE$,SORT=16 -;--- not PIC .IMPORT $global$,DATA -;--- not PIC .SPACE $TEXT$ -;--- not PIC .SUBSPA $CODE$ -;--- not PIC .SUBSPA $LIT$,ACCESS=0x2c -;--- not PIC C$7 -;--- not PIC .ALIGN 8 -;--- not PIC .STRINGZ "Division would overflow (%d)\n" - .END diff --git a/crypto/bn/asm/pa-risc2W.s b/crypto/bn/asm/pa-risc2W.s deleted file mode 100644 index 97381172..00000000 --- a/crypto/bn/asm/pa-risc2W.s +++ /dev/null @@ -1,1612 +0,0 @@ -; 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 - -; -; PA-RISC 64-bit implementation of bn_asm code -; -; This code is approximately 2x faster than the C version -; for RSA/DSA. -; -; See http://devresource.hp.com/ for more details on the PA-RISC -; architecture. Also see the book "PA-RISC 2.0 Architecture" -; by Gerry Kane for information on the instruction set architecture. -; -; Code written by Chris Ruemmler (with some help from the HP C -; compiler). -; -; The code compiles with HP's assembler -; - - .level 2.0W - .space $TEXT$ - .subspa $CODE$,QUAD=0,ALIGN=8,ACCESS=0x2c,CODE_ONLY - -; -; Global Register definitions used for the routines. -; -; Some information about HP's runtime architecture for 64-bits. -; -; "Caller save" means the calling function must save the register -; if it wants the register to be preserved. -; "Callee save" means if a function uses the register, it must save -; the value before using it. -; -; For the floating point registers -; -; "caller save" registers: fr4-fr11, fr22-fr31 -; "callee save" registers: fr12-fr21 -; "special" registers: fr0-fr3 (status and exception registers) -; -; For the integer registers -; value zero : r0 -; "caller save" registers: r1,r19-r26 -; "callee save" registers: r3-r18 -; return register : r2 (rp) -; return values ; r28 (ret0,ret1) -; Stack pointer ; r30 (sp) -; global data pointer ; r27 (dp) -; argument pointer ; r29 (ap) -; millicode return ptr ; r31 (also a caller save register) - - -; -; Arguments to the routines -; -r_ptr .reg %r26 -a_ptr .reg %r25 -b_ptr .reg %r24 -num .reg %r24 -w .reg %r23 -n .reg %r23 - - -; -; Globals used in some routines -; - -top_overflow .reg %r29 -high_mask .reg %r22 ; value 0xffffffff80000000L - - -;------------------------------------------------------------------------------ -; -; bn_mul_add_words -; -;BN_ULONG bn_mul_add_words(BN_ULONG *r_ptr, BN_ULONG *a_ptr, -; int num, BN_ULONG w) -; -; arg0 = r_ptr -; arg1 = a_ptr -; arg2 = num -; arg3 = w -; -; Local register definitions -; - -fm1 .reg %fr22 -fm .reg %fr23 -ht_temp .reg %fr24 -ht_temp_1 .reg %fr25 -lt_temp .reg %fr26 -lt_temp_1 .reg %fr27 -fm1_1 .reg %fr28 -fm_1 .reg %fr29 - -fw_h .reg %fr7L -fw_l .reg %fr7R -fw .reg %fr7 - -fht_0 .reg %fr8L -flt_0 .reg %fr8R -t_float_0 .reg %fr8 - -fht_1 .reg %fr9L -flt_1 .reg %fr9R -t_float_1 .reg %fr9 - -tmp_0 .reg %r31 -tmp_1 .reg %r21 -m_0 .reg %r20 -m_1 .reg %r19 -ht_0 .reg %r1 -ht_1 .reg %r3 -lt_0 .reg %r4 -lt_1 .reg %r5 -m1_0 .reg %r6 -m1_1 .reg %r7 -rp_val .reg %r8 -rp_val_1 .reg %r9 - -bn_mul_add_words - .export bn_mul_add_words,entry,NO_RELOCATION,LONG_RETURN - .proc - .callinfo frame=128 - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - NOP ; Needed to make the loop 16-byte aligned - NOP ; Needed to make the loop 16-byte aligned - - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - STD %r7,32(%sp) ; save r7 - STD %r8,40(%sp) ; save r8 - - STD %r9,48(%sp) ; save r9 - COPY %r0,%ret0 ; return 0 by default - DEPDI,Z 1,31,1,top_overflow ; top_overflow = 1 << 32 - STD w,56(%sp) ; store w on stack - - CMPIB,>= 0,num,bn_mul_add_words_exit ; if (num <= 0) then exit - LDO 128(%sp),%sp ; bump stack - - ; - ; The loop is unrolled twice, so if there is only 1 number - ; then go straight to the cleanup code. - ; - CMPIB,= 1,num,bn_mul_add_words_single_top - FLDD -72(%sp),fw ; load up w into fp register fw (fw_h/fw_l) - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; - ; PA-RISC 2.0 chips have two fully pipelined multipliers, thus - ; two 32-bit mutiplies can be issued per cycle. - ; -bn_mul_add_words_unroll2 - - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - FLDD 8(a_ptr),t_float_1 ; load up 64-bit value (fr8L) ht(L)/lt(R) - LDD 0(r_ptr),rp_val ; rp[0] - LDD 8(r_ptr),rp_val_1 ; rp[1] - - XMPYU fht_0,fw_l,fm1 ; m1[0] = fht_0*fw_l - XMPYU fht_1,fw_l,fm1_1 ; m1[1] = fht_1*fw_l - FSTD fm1,-16(%sp) ; -16(sp) = m1[0] - FSTD fm1_1,-48(%sp) ; -48(sp) = m1[1] - - XMPYU flt_0,fw_h,fm ; m[0] = flt_0*fw_h - XMPYU flt_1,fw_h,fm_1 ; m[1] = flt_1*fw_h - FSTD fm,-8(%sp) ; -8(sp) = m[0] - FSTD fm_1,-40(%sp) ; -40(sp) = m[1] - - XMPYU fht_0,fw_h,ht_temp ; ht_temp = fht_0*fw_h - XMPYU fht_1,fw_h,ht_temp_1 ; ht_temp_1 = fht_1*fw_h - FSTD ht_temp,-24(%sp) ; -24(sp) = ht_temp - FSTD ht_temp_1,-56(%sp) ; -56(sp) = ht_temp_1 - - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - XMPYU flt_1,fw_l,lt_temp_1 ; lt_temp = lt*fw_l - FSTD lt_temp,-32(%sp) ; -32(sp) = lt_temp - FSTD lt_temp_1,-64(%sp) ; -64(sp) = lt_temp_1 - - LDD -8(%sp),m_0 ; m[0] - LDD -40(%sp),m_1 ; m[1] - LDD -16(%sp),m1_0 ; m1[0] - LDD -48(%sp),m1_1 ; m1[1] - - LDD -24(%sp),ht_0 ; ht[0] - LDD -56(%sp),ht_1 ; ht[1] - ADD,L m1_0,m_0,tmp_0 ; tmp_0 = m[0] + m1[0]; - ADD,L m1_1,m_1,tmp_1 ; tmp_1 = m[1] + m1[1]; - - LDD -32(%sp),lt_0 - LDD -64(%sp),lt_1 - CMPCLR,*>>= tmp_0,m1_0, %r0 ; if (m[0] < m1[0]) - ADD,L ht_0,top_overflow,ht_0 ; ht[0] += (1<<32) - - CMPCLR,*>>= tmp_1,m1_1,%r0 ; if (m[1] < m1[1]) - ADD,L ht_1,top_overflow,ht_1 ; ht[1] += (1<<32) - EXTRD,U tmp_0,31,32,m_0 ; m[0]>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1[0] = m[0]<<32 - - EXTRD,U tmp_1,31,32,m_1 ; m[1]>>32 - DEPD,Z tmp_1,31,32,m1_1 ; m1[1] = m[1]<<32 - ADD,L ht_0,m_0,ht_0 ; ht[0]+= (m[0]>>32) - ADD,L ht_1,m_1,ht_1 ; ht[1]+= (m[1]>>32) - - ADD lt_0,m1_0,lt_0 ; lt[0] = lt[0]+m1[0]; - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - ADD lt_1,m1_1,lt_1 ; lt[1] = lt[1]+m1[1]; - ADD,DC ht_1,%r0,ht_1 ; ht[1]++ - - ADD %ret0,lt_0,lt_0 ; lt[0] = lt[0] + c; - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - ADD lt_0,rp_val,lt_0 ; lt[0] = lt[0]+rp[0] - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - - LDO -2(num),num ; num = num - 2; - ADD ht_0,lt_1,lt_1 ; lt[1] = lt[1] + ht_0 (c); - ADD,DC ht_1,%r0,ht_1 ; ht[1]++ - STD lt_0,0(r_ptr) ; rp[0] = lt[0] - - ADD lt_1,rp_val_1,lt_1 ; lt[1] = lt[1]+rp[1] - ADD,DC ht_1,%r0,%ret0 ; ht[1]++ - LDO 16(a_ptr),a_ptr ; a_ptr += 2 - - STD lt_1,8(r_ptr) ; rp[1] = lt[1] - CMPIB,<= 2,num,bn_mul_add_words_unroll2 ; go again if more to do - LDO 16(r_ptr),r_ptr ; r_ptr += 2 - - CMPIB,=,N 0,num,bn_mul_add_words_exit ; are we done, or cleanup last one - - ; - ; Top of loop aligned on 64-byte boundary - ; -bn_mul_add_words_single_top - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - LDD 0(r_ptr),rp_val ; rp[0] - LDO 8(a_ptr),a_ptr ; a_ptr++ - XMPYU fht_0,fw_l,fm1 ; m1 = ht*fw_l - FSTD fm1,-16(%sp) ; -16(sp) = m1 - XMPYU flt_0,fw_h,fm ; m = lt*fw_h - FSTD fm,-8(%sp) ; -8(sp) = m - XMPYU fht_0,fw_h,ht_temp ; ht_temp = ht*fw_h - FSTD ht_temp,-24(%sp) ; -24(sp) = ht - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - FSTD lt_temp,-32(%sp) ; -32(sp) = lt - - LDD -8(%sp),m_0 - LDD -16(%sp),m1_0 ; m1 = temp1 - ADD,L m_0,m1_0,tmp_0 ; tmp_0 = m + m1; - LDD -24(%sp),ht_0 - LDD -32(%sp),lt_0 - - CMPCLR,*>>= tmp_0,m1_0,%r0 ; if (m < m1) - ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) - - EXTRD,U tmp_0,31,32,m_0 ; m>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 - - ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) - ADD lt_0,m1_0,tmp_0 ; tmp_0 = lt+m1; - ADD,DC ht_0,%r0,ht_0 ; ht++ - ADD %ret0,tmp_0,lt_0 ; lt = lt + c; - ADD,DC ht_0,%r0,ht_0 ; ht++ - ADD lt_0,rp_val,lt_0 ; lt = lt+rp[0] - ADD,DC ht_0,%r0,%ret0 ; ht++ - STD lt_0,0(r_ptr) ; rp[0] = lt - -bn_mul_add_words_exit - .EXIT - LDD -80(%sp),%r9 ; restore r9 - LDD -88(%sp),%r8 ; restore r8 - LDD -96(%sp),%r7 ; restore r7 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 ; restore r3 - .PROCEND ;in=23,24,25,26,29;out=28; - -;---------------------------------------------------------------------------- -; -;BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) -; -; arg0 = rp -; arg1 = ap -; arg2 = num -; arg3 = w - -bn_mul_words - .proc - .callinfo frame=128 - .entry - .EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - - STD %r7,32(%sp) ; save r7 - COPY %r0,%ret0 ; return 0 by default - DEPDI,Z 1,31,1,top_overflow ; top_overflow = 1 << 32 - STD w,56(%sp) ; w on stack - - CMPIB,>= 0,num,bn_mul_words_exit - LDO 128(%sp),%sp ; bump stack - - ; - ; See if only 1 word to do, thus just do cleanup - ; - CMPIB,= 1,num,bn_mul_words_single_top - FLDD -72(%sp),fw ; load up w into fp register fw (fw_h/fw_l) - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; - ; PA-RISC 2.0 chips have two fully pipelined multipliers, thus - ; two 32-bit mutiplies can be issued per cycle. - ; -bn_mul_words_unroll2 - - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - FLDD 8(a_ptr),t_float_1 ; load up 64-bit value (fr8L) ht(L)/lt(R) - XMPYU fht_0,fw_l,fm1 ; m1[0] = fht_0*fw_l - XMPYU fht_1,fw_l,fm1_1 ; m1[1] = ht*fw_l - - FSTD fm1,-16(%sp) ; -16(sp) = m1 - FSTD fm1_1,-48(%sp) ; -48(sp) = m1 - XMPYU flt_0,fw_h,fm ; m = lt*fw_h - XMPYU flt_1,fw_h,fm_1 ; m = lt*fw_h - - FSTD fm,-8(%sp) ; -8(sp) = m - FSTD fm_1,-40(%sp) ; -40(sp) = m - XMPYU fht_0,fw_h,ht_temp ; ht_temp = fht_0*fw_h - XMPYU fht_1,fw_h,ht_temp_1 ; ht_temp = ht*fw_h - - FSTD ht_temp,-24(%sp) ; -24(sp) = ht - FSTD ht_temp_1,-56(%sp) ; -56(sp) = ht - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - XMPYU flt_1,fw_l,lt_temp_1 ; lt_temp = lt*fw_l - - FSTD lt_temp,-32(%sp) ; -32(sp) = lt - FSTD lt_temp_1,-64(%sp) ; -64(sp) = lt - LDD -8(%sp),m_0 - LDD -40(%sp),m_1 - - LDD -16(%sp),m1_0 - LDD -48(%sp),m1_1 - LDD -24(%sp),ht_0 - LDD -56(%sp),ht_1 - - ADD,L m1_0,m_0,tmp_0 ; tmp_0 = m + m1; - ADD,L m1_1,m_1,tmp_1 ; tmp_1 = m + m1; - LDD -32(%sp),lt_0 - LDD -64(%sp),lt_1 - - CMPCLR,*>>= tmp_0,m1_0, %r0 ; if (m < m1) - ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) - CMPCLR,*>>= tmp_1,m1_1,%r0 ; if (m < m1) - ADD,L ht_1,top_overflow,ht_1 ; ht += (1<<32) - - EXTRD,U tmp_0,31,32,m_0 ; m>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 - EXTRD,U tmp_1,31,32,m_1 ; m>>32 - DEPD,Z tmp_1,31,32,m1_1 ; m1 = m<<32 - - ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) - ADD,L ht_1,m_1,ht_1 ; ht+= (m>>32) - ADD lt_0,m1_0,lt_0 ; lt = lt+m1; - ADD,DC ht_0,%r0,ht_0 ; ht++ - - ADD lt_1,m1_1,lt_1 ; lt = lt+m1; - ADD,DC ht_1,%r0,ht_1 ; ht++ - ADD %ret0,lt_0,lt_0 ; lt = lt + c (ret0); - ADD,DC ht_0,%r0,ht_0 ; ht++ - - ADD ht_0,lt_1,lt_1 ; lt = lt + c (ht_0) - ADD,DC ht_1,%r0,ht_1 ; ht++ - STD lt_0,0(r_ptr) ; rp[0] = lt - STD lt_1,8(r_ptr) ; rp[1] = lt - - COPY ht_1,%ret0 ; carry = ht - LDO -2(num),num ; num = num - 2; - LDO 16(a_ptr),a_ptr ; ap += 2 - CMPIB,<= 2,num,bn_mul_words_unroll2 - LDO 16(r_ptr),r_ptr ; rp++ - - CMPIB,=,N 0,num,bn_mul_words_exit ; are we done? - - ; - ; Top of loop aligned on 64-byte boundary - ; -bn_mul_words_single_top - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - - XMPYU fht_0,fw_l,fm1 ; m1 = ht*fw_l - FSTD fm1,-16(%sp) ; -16(sp) = m1 - XMPYU flt_0,fw_h,fm ; m = lt*fw_h - FSTD fm,-8(%sp) ; -8(sp) = m - XMPYU fht_0,fw_h,ht_temp ; ht_temp = ht*fw_h - FSTD ht_temp,-24(%sp) ; -24(sp) = ht - XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l - FSTD lt_temp,-32(%sp) ; -32(sp) = lt - - LDD -8(%sp),m_0 - LDD -16(%sp),m1_0 - ADD,L m_0,m1_0,tmp_0 ; tmp_0 = m + m1; - LDD -24(%sp),ht_0 - LDD -32(%sp),lt_0 - - CMPCLR,*>>= tmp_0,m1_0,%r0 ; if (m < m1) - ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) - - EXTRD,U tmp_0,31,32,m_0 ; m>>32 - DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 - - ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) - ADD lt_0,m1_0,lt_0 ; lt= lt+m1; - ADD,DC ht_0,%r0,ht_0 ; ht++ - - ADD %ret0,lt_0,lt_0 ; lt = lt + c; - ADD,DC ht_0,%r0,ht_0 ; ht++ - - COPY ht_0,%ret0 ; copy carry - STD lt_0,0(r_ptr) ; rp[0] = lt - -bn_mul_words_exit - .EXIT - LDD -96(%sp),%r7 ; restore r7 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 ; restore r3 - .PROCEND ;in=23,24,25,26,29;out=28; - -;---------------------------------------------------------------------------- -; -;void bn_sqr_words(BN_ULONG *rp, BN_ULONG *ap, int num) -; -; arg0 = rp -; arg1 = ap -; arg2 = num -; - -bn_sqr_words - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - NOP - STD %r5,16(%sp) ; save r5 - - CMPIB,>= 0,num,bn_sqr_words_exit - LDO 128(%sp),%sp ; bump stack - - ; - ; If only 1, the goto straight to cleanup - ; - CMPIB,= 1,num,bn_sqr_words_single_top - DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; - -bn_sqr_words_unroll2 - FLDD 0(a_ptr),t_float_0 ; a[0] - FLDD 8(a_ptr),t_float_1 ; a[1] - XMPYU fht_0,flt_0,fm ; m[0] - XMPYU fht_1,flt_1,fm_1 ; m[1] - - FSTD fm,-24(%sp) ; store m[0] - FSTD fm_1,-56(%sp) ; store m[1] - XMPYU flt_0,flt_0,lt_temp ; lt[0] - XMPYU flt_1,flt_1,lt_temp_1 ; lt[1] - - FSTD lt_temp,-16(%sp) ; store lt[0] - FSTD lt_temp_1,-48(%sp) ; store lt[1] - XMPYU fht_0,fht_0,ht_temp ; ht[0] - XMPYU fht_1,fht_1,ht_temp_1 ; ht[1] - - FSTD ht_temp,-8(%sp) ; store ht[0] - FSTD ht_temp_1,-40(%sp) ; store ht[1] - LDD -24(%sp),m_0 - LDD -56(%sp),m_1 - - AND m_0,high_mask,tmp_0 ; m[0] & Mask - AND m_1,high_mask,tmp_1 ; m[1] & Mask - DEPD,Z m_0,30,31,m_0 ; m[0] << 32+1 - DEPD,Z m_1,30,31,m_1 ; m[1] << 32+1 - - LDD -16(%sp),lt_0 - LDD -48(%sp),lt_1 - EXTRD,U tmp_0,32,33,tmp_0 ; tmp_0 = m[0]&Mask >> 32-1 - EXTRD,U tmp_1,32,33,tmp_1 ; tmp_1 = m[1]&Mask >> 32-1 - - LDD -8(%sp),ht_0 - LDD -40(%sp),ht_1 - ADD,L ht_0,tmp_0,ht_0 ; ht[0] += tmp_0 - ADD,L ht_1,tmp_1,ht_1 ; ht[1] += tmp_1 - - ADD lt_0,m_0,lt_0 ; lt = lt+m - ADD,DC ht_0,%r0,ht_0 ; ht[0]++ - STD lt_0,0(r_ptr) ; rp[0] = lt[0] - STD ht_0,8(r_ptr) ; rp[1] = ht[1] - - ADD lt_1,m_1,lt_1 ; lt = lt+m - ADD,DC ht_1,%r0,ht_1 ; ht[1]++ - STD lt_1,16(r_ptr) ; rp[2] = lt[1] - STD ht_1,24(r_ptr) ; rp[3] = ht[1] - - LDO -2(num),num ; num = num - 2; - LDO 16(a_ptr),a_ptr ; ap += 2 - CMPIB,<= 2,num,bn_sqr_words_unroll2 - LDO 32(r_ptr),r_ptr ; rp += 4 - - CMPIB,=,N 0,num,bn_sqr_words_exit ; are we done? - - ; - ; Top of loop aligned on 64-byte boundary - ; -bn_sqr_words_single_top - FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) - - XMPYU fht_0,flt_0,fm ; m - FSTD fm,-24(%sp) ; store m - - XMPYU flt_0,flt_0,lt_temp ; lt - FSTD lt_temp,-16(%sp) ; store lt - - XMPYU fht_0,fht_0,ht_temp ; ht - FSTD ht_temp,-8(%sp) ; store ht - - LDD -24(%sp),m_0 ; load m - AND m_0,high_mask,tmp_0 ; m & Mask - DEPD,Z m_0,30,31,m_0 ; m << 32+1 - LDD -16(%sp),lt_0 ; lt - - LDD -8(%sp),ht_0 ; ht - EXTRD,U tmp_0,32,33,tmp_0 ; tmp_0 = m&Mask >> 32-1 - ADD m_0,lt_0,lt_0 ; lt = lt+m - ADD,L ht_0,tmp_0,ht_0 ; ht += tmp_0 - ADD,DC ht_0,%r0,ht_0 ; ht++ - - STD lt_0,0(r_ptr) ; rp[0] = lt - STD ht_0,8(r_ptr) ; rp[1] = ht - -bn_sqr_words_exit - .EXIT - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - .PROCEND ;in=23,24,25,26,29;out=28; - - -;---------------------------------------------------------------------------- -; -;BN_ULONG bn_add_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) -; -; arg0 = rp -; arg1 = ap -; arg2 = bp -; arg3 = n - -t .reg %r22 -b .reg %r21 -l .reg %r20 - -bn_add_words - .proc - .entry - .callinfo - .EXPORT bn_add_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .align 64 - - CMPIB,>= 0,n,bn_add_words_exit - COPY %r0,%ret0 ; return 0 by default - - ; - ; If 2 or more numbers do the loop - ; - CMPIB,= 1,n,bn_add_words_single_top - NOP - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; -bn_add_words_unroll2 - LDD 0(a_ptr),t - LDD 0(b_ptr),b - ADD t,%ret0,t ; t = t+c; - ADD,DC %r0,%r0,%ret0 ; set c to carry - ADD t,b,l ; l = t + b[0] - ADD,DC %ret0,%r0,%ret0 ; c+= carry - STD l,0(r_ptr) - - LDD 8(a_ptr),t - LDD 8(b_ptr),b - ADD t,%ret0,t ; t = t+c; - ADD,DC %r0,%r0,%ret0 ; set c to carry - ADD t,b,l ; l = t + b[0] - ADD,DC %ret0,%r0,%ret0 ; c+= carry - STD l,8(r_ptr) - - LDO -2(n),n - LDO 16(a_ptr),a_ptr - LDO 16(b_ptr),b_ptr - - CMPIB,<= 2,n,bn_add_words_unroll2 - LDO 16(r_ptr),r_ptr - - CMPIB,=,N 0,n,bn_add_words_exit ; are we done? - -bn_add_words_single_top - LDD 0(a_ptr),t - LDD 0(b_ptr),b - - ADD t,%ret0,t ; t = t+c; - ADD,DC %r0,%r0,%ret0 ; set c to carry (could use CMPCLR??) - ADD t,b,l ; l = t + b[0] - ADD,DC %ret0,%r0,%ret0 ; c+= carry - STD l,0(r_ptr) - -bn_add_words_exit - .EXIT - BVE (%rp) - NOP - .PROCEND ;in=23,24,25,26,29;out=28; - -;---------------------------------------------------------------------------- -; -;BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) -; -; arg0 = rp -; arg1 = ap -; arg2 = bp -; arg3 = n - -t1 .reg %r22 -t2 .reg %r21 -sub_tmp1 .reg %r20 -sub_tmp2 .reg %r19 - - -bn_sub_words - .proc - .callinfo - .EXPORT bn_sub_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - CMPIB,>= 0,n,bn_sub_words_exit - COPY %r0,%ret0 ; return 0 by default - - ; - ; If 2 or more numbers do the loop - ; - CMPIB,= 1,n,bn_sub_words_single_top - NOP - - ; - ; This loop is unrolled 2 times (64-byte aligned as well) - ; -bn_sub_words_unroll2 - LDD 0(a_ptr),t1 - LDD 0(b_ptr),t2 - SUB t1,t2,sub_tmp1 ; t3 = t1-t2; - SUB sub_tmp1,%ret0,sub_tmp1 ; t3 = t3- c; - - CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 - LDO 1(%r0),sub_tmp2 - - CMPCLR,*= t1,t2,%r0 - COPY sub_tmp2,%ret0 - STD sub_tmp1,0(r_ptr) - - LDD 8(a_ptr),t1 - LDD 8(b_ptr),t2 - SUB t1,t2,sub_tmp1 ; t3 = t1-t2; - SUB sub_tmp1,%ret0,sub_tmp1 ; t3 = t3- c; - CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 - LDO 1(%r0),sub_tmp2 - - CMPCLR,*= t1,t2,%r0 - COPY sub_tmp2,%ret0 - STD sub_tmp1,8(r_ptr) - - LDO -2(n),n - LDO 16(a_ptr),a_ptr - LDO 16(b_ptr),b_ptr - - CMPIB,<= 2,n,bn_sub_words_unroll2 - LDO 16(r_ptr),r_ptr - - CMPIB,=,N 0,n,bn_sub_words_exit ; are we done? - -bn_sub_words_single_top - LDD 0(a_ptr),t1 - LDD 0(b_ptr),t2 - SUB t1,t2,sub_tmp1 ; t3 = t1-t2; - SUB sub_tmp1,%ret0,sub_tmp1 ; t3 = t3- c; - CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 - LDO 1(%r0),sub_tmp2 - - CMPCLR,*= t1,t2,%r0 - COPY sub_tmp2,%ret0 - - STD sub_tmp1,0(r_ptr) - -bn_sub_words_exit - .EXIT - BVE (%rp) - NOP - .PROCEND ;in=23,24,25,26,29;out=28; - -;------------------------------------------------------------------------------ -; -; unsigned long bn_div_words(unsigned long h, unsigned long l, unsigned long d) -; -; arg0 = h -; arg1 = l -; arg2 = d -; -; This is mainly just modified assembly from the compiler, thus the -; lack of variable names. -; -;------------------------------------------------------------------------------ -bn_div_words - .proc - .callinfo CALLER,FRAME=272,ENTRY_GR=%r10,SAVE_RP,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_div_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .IMPORT BN_num_bits_word,CODE,NO_RELOCATION - .IMPORT __iob,DATA - .IMPORT fprintf,CODE,NO_RELOCATION - .IMPORT abort,CODE,NO_RELOCATION - .IMPORT $$div2U,MILLICODE - .entry - STD %r2,-16(%r30) - STD,MA %r3,352(%r30) - STD %r4,-344(%r30) - STD %r5,-336(%r30) - STD %r6,-328(%r30) - STD %r7,-320(%r30) - STD %r8,-312(%r30) - STD %r9,-304(%r30) - STD %r10,-296(%r30) - - STD %r27,-288(%r30) ; save gp - - COPY %r24,%r3 ; save d - COPY %r26,%r4 ; save h (high 64-bits) - LDO -1(%r0),%ret0 ; return -1 by default - - CMPB,*= %r0,%arg2,$D3 ; if (d == 0) - COPY %r25,%r5 ; save l (low 64-bits) - - LDO -48(%r30),%r29 ; create ap - .CALL ;in=26,29;out=28; - B,L BN_num_bits_word,%r2 - COPY %r3,%r26 - LDD -288(%r30),%r27 ; restore gp - LDI 64,%r21 - - CMPB,= %r21,%ret0,$00000012 ;if (i == 64) (forward) - COPY %ret0,%r24 ; i - MTSARCM %r24 - DEPDI,Z -1,%sar,1,%r29 - CMPB,*<<,N %r29,%r4,bn_div_err_case ; if (h > 1<= d) - SUB %r4,%r3,%r4 ; h -= d - CMPB,= %r31,%r0,$0000001A ; if (i) - COPY %r0,%r10 ; ret = 0 - MTSARCM %r31 ; i to shift - DEPD,Z %r3,%sar,64,%r3 ; d <<= i; - SUBI 64,%r31,%r19 ; 64 - i; redundent - MTSAR %r19 ; (64 -i) to shift - SHRPD %r4,%r5,%sar,%r4 ; l>> (64-i) - MTSARCM %r31 ; i to shift - DEPD,Z %r5,%sar,64,%r5 ; l <<= i; - -$0000001A - DEPDI,Z -1,31,32,%r19 - EXTRD,U %r3,31,32,%r6 ; dh=(d&0xfff)>>32 - EXTRD,U %r3,63,32,%r8 ; dl = d&0xffffff - LDO 2(%r0),%r9 - STD %r3,-280(%r30) ; "d" to stack - -$0000001C - DEPDI,Z -1,63,32,%r29 ; - EXTRD,U %r4,31,32,%r31 ; h >> 32 - CMPB,*=,N %r31,%r6,$D2 ; if ((h>>32) != dh)(forward) div - COPY %r4,%r26 - EXTRD,U %r4,31,32,%r25 - COPY %r6,%r24 - .CALL ;in=23,24,25,26;out=20,21,22,28,29; (MILLICALL) - B,L $$div2U,%r2 - EXTRD,U %r6,31,32,%r23 - DEPD %r28,31,32,%r29 -$D2 - STD %r29,-272(%r30) ; q - AND %r5,%r19,%r24 ; t & 0xffffffff00000000; - EXTRD,U %r24,31,32,%r24 ; ??? - FLDD -272(%r30),%fr7 ; q - FLDD -280(%r30),%fr8 ; d - XMPYU %fr8L,%fr7L,%fr10 - FSTD %fr10,-256(%r30) - XMPYU %fr8L,%fr7R,%fr22 - FSTD %fr22,-264(%r30) - XMPYU %fr8R,%fr7L,%fr11 - XMPYU %fr8R,%fr7R,%fr23 - FSTD %fr11,-232(%r30) - FSTD %fr23,-240(%r30) - LDD -256(%r30),%r28 - DEPD,Z %r28,31,32,%r2 - LDD -264(%r30),%r20 - ADD,L %r20,%r2,%r31 - LDD -232(%r30),%r22 - DEPD,Z %r22,31,32,%r22 - LDD -240(%r30),%r21 - B $00000024 ; enter loop - ADD,L %r21,%r22,%r23 - -$0000002A - LDO -1(%r29),%r29 - SUB %r23,%r8,%r23 -$00000024 - SUB %r4,%r31,%r25 - AND %r25,%r19,%r26 - CMPB,*<>,N %r0,%r26,$00000046 ; (forward) - DEPD,Z %r25,31,32,%r20 - OR %r20,%r24,%r21 - CMPB,*<<,N %r21,%r23,$0000002A ;(backward) - SUB %r31,%r6,%r31 -;-------------Break path--------------------- - -$00000046 - DEPD,Z %r23,31,32,%r25 ;tl - EXTRD,U %r23,31,32,%r26 ;t - AND %r25,%r19,%r24 ;tl = (tl<<32)&0xfffffff0000000L - ADD,L %r31,%r26,%r31 ;th += t; - CMPCLR,*>>= %r5,%r24,%r0 ;if (l>32)); - DEPD,Z %r29,31,32,%r10 ; ret = q<<32 - b $0000001C - DEPD,Z %r28,31,32,%r5 ; l = l << 32 - -$D1 - OR %r10,%r29,%r28 ; ret |= q -$D3 - LDD -368(%r30),%r2 -$D0 - LDD -296(%r30),%r10 - LDD -304(%r30),%r9 - LDD -312(%r30),%r8 - LDD -320(%r30),%r7 - LDD -328(%r30),%r6 - LDD -336(%r30),%r5 - LDD -344(%r30),%r4 - BVE (%r2) - .EXIT - LDD,MB -352(%r30),%r3 - -bn_div_err_case - MFIA %r6 - ADDIL L'bn_div_words-bn_div_err_case,%r6,%r1 - LDO R'bn_div_words-bn_div_err_case(%r1),%r6 - ADDIL LT'__iob,%r27,%r1 - LDD RT'__iob(%r1),%r26 - ADDIL L'C$4-bn_div_words,%r6,%r1 - LDO R'C$4-bn_div_words(%r1),%r25 - LDO 64(%r26),%r26 - .CALL ;in=24,25,26,29;out=28; - B,L fprintf,%r2 - LDO -48(%r30),%r29 - LDD -288(%r30),%r27 - .CALL ;in=29; - B,L abort,%r2 - LDO -48(%r30),%r29 - LDD -288(%r30),%r27 - B $D0 - LDD -368(%r30),%r2 - .PROCEND ;in=24,25,26,29;out=28; - -;---------------------------------------------------------------------------- -; -; Registers to hold 64-bit values to manipulate. The "L" part -; of the register corresponds to the upper 32-bits, while the "R" -; part corresponds to the lower 32-bits -; -; Note, that when using b6 and b7, the code must save these before -; using them because they are callee save registers -; -; -; Floating point registers to use to save values that -; are manipulated. These don't collide with ftemp1-6 and -; are all caller save registers -; -a0 .reg %fr22 -a0L .reg %fr22L -a0R .reg %fr22R - -a1 .reg %fr23 -a1L .reg %fr23L -a1R .reg %fr23R - -a2 .reg %fr24 -a2L .reg %fr24L -a2R .reg %fr24R - -a3 .reg %fr25 -a3L .reg %fr25L -a3R .reg %fr25R - -a4 .reg %fr26 -a4L .reg %fr26L -a4R .reg %fr26R - -a5 .reg %fr27 -a5L .reg %fr27L -a5R .reg %fr27R - -a6 .reg %fr28 -a6L .reg %fr28L -a6R .reg %fr28R - -a7 .reg %fr29 -a7L .reg %fr29L -a7R .reg %fr29R - -b0 .reg %fr30 -b0L .reg %fr30L -b0R .reg %fr30R - -b1 .reg %fr31 -b1L .reg %fr31L -b1R .reg %fr31R - -; -; Temporary floating point variables, these are all caller save -; registers -; -ftemp1 .reg %fr4 -ftemp2 .reg %fr5 -ftemp3 .reg %fr6 -ftemp4 .reg %fr7 - -; -; The B set of registers when used. -; - -b2 .reg %fr8 -b2L .reg %fr8L -b2R .reg %fr8R - -b3 .reg %fr9 -b3L .reg %fr9L -b3R .reg %fr9R - -b4 .reg %fr10 -b4L .reg %fr10L -b4R .reg %fr10R - -b5 .reg %fr11 -b5L .reg %fr11L -b5R .reg %fr11R - -b6 .reg %fr12 -b6L .reg %fr12L -b6R .reg %fr12R - -b7 .reg %fr13 -b7L .reg %fr13L -b7R .reg %fr13R - -c1 .reg %r21 ; only reg -temp1 .reg %r20 ; only reg -temp2 .reg %r19 ; only reg -temp3 .reg %r31 ; only reg - -m1 .reg %r28 -c2 .reg %r23 -high_one .reg %r1 -ht .reg %r6 -lt .reg %r5 -m .reg %r4 -c3 .reg %r3 - -SQR_ADD_C .macro A0L,A0R,C1,C2,C3 - XMPYU A0L,A0R,ftemp1 ; m - FSTD ftemp1,-24(%sp) ; store m - - XMPYU A0R,A0R,ftemp2 ; lt - FSTD ftemp2,-16(%sp) ; store lt - - XMPYU A0L,A0L,ftemp3 ; ht - FSTD ftemp3,-8(%sp) ; store ht - - LDD -24(%sp),m ; load m - AND m,high_mask,temp2 ; m & Mask - DEPD,Z m,30,31,temp3 ; m << 32+1 - LDD -16(%sp),lt ; lt - - LDD -8(%sp),ht ; ht - EXTRD,U temp2,32,33,temp1 ; temp1 = m&Mask >> 32-1 - ADD temp3,lt,lt ; lt = lt+m - ADD,L ht,temp1,ht ; ht += temp1 - ADD,DC ht,%r0,ht ; ht++ - - ADD C1,lt,C1 ; c1=c1+lt - ADD,DC ht,%r0,ht ; ht++ - - ADD C2,ht,C2 ; c2=c2+ht - ADD,DC C3,%r0,C3 ; c3++ -.endm - -SQR_ADD_C2 .macro A0L,A0R,A1L,A1R,C1,C2,C3 - XMPYU A0L,A1R,ftemp1 ; m1 = bl*ht - FSTD ftemp1,-16(%sp) ; - XMPYU A0R,A1L,ftemp2 ; m = bh*lt - FSTD ftemp2,-8(%sp) ; - XMPYU A0R,A1R,ftemp3 ; lt = bl*lt - FSTD ftemp3,-32(%sp) - XMPYU A0L,A1L,ftemp4 ; ht = bh*ht - FSTD ftemp4,-24(%sp) ; - - LDD -8(%sp),m ; r21 = m - LDD -16(%sp),m1 ; r19 = m1 - ADD,L m,m1,m ; m+m1 - - DEPD,Z m,31,32,temp3 ; (m+m1<<32) - LDD -24(%sp),ht ; r24 = ht - - CMPCLR,*>>= m,m1,%r0 ; if (m < m1) - ADD,L ht,high_one,ht ; ht+=high_one - - EXTRD,U m,31,32,temp1 ; m >> 32 - LDD -32(%sp),lt ; lt - ADD,L ht,temp1,ht ; ht+= m>>32 - ADD lt,temp3,lt ; lt = lt+m1 - ADD,DC ht,%r0,ht ; ht++ - - ADD ht,ht,ht ; ht=ht+ht; - ADD,DC C3,%r0,C3 ; add in carry (c3++) - - ADD lt,lt,lt ; lt=lt+lt; - ADD,DC ht,%r0,ht ; add in carry (ht++) - - ADD C1,lt,C1 ; c1=c1+lt - ADD,DC,*NUV ht,%r0,ht ; add in carry (ht++) - LDO 1(C3),C3 ; bump c3 if overflow,nullify otherwise - - ADD C2,ht,C2 ; c2 = c2 + ht - ADD,DC C3,%r0,C3 ; add in carry (c3++) -.endm - -; -;void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a) -; arg0 = r_ptr -; arg1 = a_ptr -; - -bn_sqr_comba8 - .PROC - .CALLINFO FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_sqr_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .ENTRY - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - FLDD 32(a_ptr),a4 - FLDD 40(a_ptr),a5 - FLDD 48(a_ptr),a6 - FLDD 56(a_ptr),a7 - - SQR_ADD_C a0L,a0R,c1,c2,c3 - STD c1,0(r_ptr) ; r[0] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 - STD c2,8(r_ptr) ; r[1] = c2; - COPY %r0,c2 - - SQR_ADD_C a1L,a1R,c3,c1,c2 - SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 - STD c3,16(r_ptr) ; r[2] = c3; - COPY %r0,c3 - - SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 - SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 - STD c1,24(r_ptr) ; r[3] = c1; - COPY %r0,c1 - - SQR_ADD_C a2L,a2R,c2,c3,c1 - SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 - SQR_ADD_C2 a4L,a4R,a0L,a0R,c2,c3,c1 - STD c2,32(r_ptr) ; r[4] = c2; - COPY %r0,c2 - - SQR_ADD_C2 a5L,a5R,a0L,a0R,c3,c1,c2 - SQR_ADD_C2 a4L,a4R,a1L,a1R,c3,c1,c2 - SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 - STD c3,40(r_ptr) ; r[5] = c3; - COPY %r0,c3 - - SQR_ADD_C a3L,a3R,c1,c2,c3 - SQR_ADD_C2 a4L,a4R,a2L,a2R,c1,c2,c3 - SQR_ADD_C2 a5L,a5R,a1L,a1R,c1,c2,c3 - SQR_ADD_C2 a6L,a6R,a0L,a0R,c1,c2,c3 - STD c1,48(r_ptr) ; r[6] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a7L,a7R,a0L,a0R,c2,c3,c1 - SQR_ADD_C2 a6L,a6R,a1L,a1R,c2,c3,c1 - SQR_ADD_C2 a5L,a5R,a2L,a2R,c2,c3,c1 - SQR_ADD_C2 a4L,a4R,a3L,a3R,c2,c3,c1 - STD c2,56(r_ptr) ; r[7] = c2; - COPY %r0,c2 - - SQR_ADD_C a4L,a4R,c3,c1,c2 - SQR_ADD_C2 a5L,a5R,a3L,a3R,c3,c1,c2 - SQR_ADD_C2 a6L,a6R,a2L,a2R,c3,c1,c2 - SQR_ADD_C2 a7L,a7R,a1L,a1R,c3,c1,c2 - STD c3,64(r_ptr) ; r[8] = c3; - COPY %r0,c3 - - SQR_ADD_C2 a7L,a7R,a2L,a2R,c1,c2,c3 - SQR_ADD_C2 a6L,a6R,a3L,a3R,c1,c2,c3 - SQR_ADD_C2 a5L,a5R,a4L,a4R,c1,c2,c3 - STD c1,72(r_ptr) ; r[9] = c1; - COPY %r0,c1 - - SQR_ADD_C a5L,a5R,c2,c3,c1 - SQR_ADD_C2 a6L,a6R,a4L,a4R,c2,c3,c1 - SQR_ADD_C2 a7L,a7R,a3L,a3R,c2,c3,c1 - STD c2,80(r_ptr) ; r[10] = c2; - COPY %r0,c2 - - SQR_ADD_C2 a7L,a7R,a4L,a4R,c3,c1,c2 - SQR_ADD_C2 a6L,a6R,a5L,a5R,c3,c1,c2 - STD c3,88(r_ptr) ; r[11] = c3; - COPY %r0,c3 - - SQR_ADD_C a6L,a6R,c1,c2,c3 - SQR_ADD_C2 a7L,a7R,a5L,a5R,c1,c2,c3 - STD c1,96(r_ptr) ; r[12] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a7L,a7R,a6L,a6R,c2,c3,c1 - STD c2,104(r_ptr) ; r[13] = c2; - COPY %r0,c2 - - SQR_ADD_C a7L,a7R,c3,c1,c2 - STD c3, 112(r_ptr) ; r[14] = c3 - STD c1, 120(r_ptr) ; r[15] = c1 - - .EXIT - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - -;----------------------------------------------------------------------------- -; -;void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a) -; arg0 = r_ptr -; arg1 = a_ptr -; - -bn_sqr_comba4 - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_sqr_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - FLDD 32(a_ptr),a4 - FLDD 40(a_ptr),a5 - FLDD 48(a_ptr),a6 - FLDD 56(a_ptr),a7 - - SQR_ADD_C a0L,a0R,c1,c2,c3 - - STD c1,0(r_ptr) ; r[0] = c1; - COPY %r0,c1 - - SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 - - STD c2,8(r_ptr) ; r[1] = c2; - COPY %r0,c2 - - SQR_ADD_C a1L,a1R,c3,c1,c2 - SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 - - STD c3,16(r_ptr) ; r[2] = c3; - COPY %r0,c3 - - SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 - SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 - - STD c1,24(r_ptr) ; r[3] = c1; - COPY %r0,c1 - - SQR_ADD_C a2L,a2R,c2,c3,c1 - SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 - - STD c2,32(r_ptr) ; r[4] = c2; - COPY %r0,c2 - - SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 - STD c3,40(r_ptr) ; r[5] = c3; - COPY %r0,c3 - - SQR_ADD_C a3L,a3R,c1,c2,c3 - STD c1,48(r_ptr) ; r[6] = c1; - STD c2,56(r_ptr) ; r[7] = c2; - - .EXIT - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - - -;--------------------------------------------------------------------------- - -MUL_ADD_C .macro A0L,A0R,B0L,B0R,C1,C2,C3 - XMPYU A0L,B0R,ftemp1 ; m1 = bl*ht - FSTD ftemp1,-16(%sp) ; - XMPYU A0R,B0L,ftemp2 ; m = bh*lt - FSTD ftemp2,-8(%sp) ; - XMPYU A0R,B0R,ftemp3 ; lt = bl*lt - FSTD ftemp3,-32(%sp) - XMPYU A0L,B0L,ftemp4 ; ht = bh*ht - FSTD ftemp4,-24(%sp) ; - - LDD -8(%sp),m ; r21 = m - LDD -16(%sp),m1 ; r19 = m1 - ADD,L m,m1,m ; m+m1 - - DEPD,Z m,31,32,temp3 ; (m+m1<<32) - LDD -24(%sp),ht ; r24 = ht - - CMPCLR,*>>= m,m1,%r0 ; if (m < m1) - ADD,L ht,high_one,ht ; ht+=high_one - - EXTRD,U m,31,32,temp1 ; m >> 32 - LDD -32(%sp),lt ; lt - ADD,L ht,temp1,ht ; ht+= m>>32 - ADD lt,temp3,lt ; lt = lt+m1 - ADD,DC ht,%r0,ht ; ht++ - - ADD C1,lt,C1 ; c1=c1+lt - ADD,DC ht,%r0,ht ; bump c3 if overflow,nullify otherwise - - ADD C2,ht,C2 ; c2 = c2 + ht - ADD,DC C3,%r0,C3 ; add in carry (c3++) -.endm - - -; -;void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) -; arg0 = r_ptr -; arg1 = a_ptr -; arg2 = b_ptr -; - -bn_mul_comba8 - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_mul_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - FSTD %fr12,32(%sp) ; save r6 - FSTD %fr13,40(%sp) ; save r7 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - FLDD 32(a_ptr),a4 - FLDD 40(a_ptr),a5 - FLDD 48(a_ptr),a6 - FLDD 56(a_ptr),a7 - - FLDD 0(b_ptr),b0 - FLDD 8(b_ptr),b1 - FLDD 16(b_ptr),b2 - FLDD 24(b_ptr),b3 - FLDD 32(b_ptr),b4 - FLDD 40(b_ptr),b5 - FLDD 48(b_ptr),b6 - FLDD 56(b_ptr),b7 - - MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 - STD c1,0(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 - STD c2,8(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 - STD c3,16(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 - MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 - STD c1,24(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a4L,a4R,b0L,b0R,c2,c3,c1 - MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 - MUL_ADD_C a0L,a0R,b4L,b4R,c2,c3,c1 - STD c2,32(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a0L,a0R,b5L,b5R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b4L,b4R,c3,c1,c2 - MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 - MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 - MUL_ADD_C a4L,a4R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a5L,a5R,b0L,b0R,c3,c1,c2 - STD c3,40(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a6L,a6R,b0L,b0R,c1,c2,c3 - MUL_ADD_C a5L,a5R,b1L,b1R,c1,c2,c3 - MUL_ADD_C a4L,a4R,b2L,b2R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a2L,a2R,b4L,b4R,c1,c2,c3 - MUL_ADD_C a1L,a1R,b5L,b5R,c1,c2,c3 - MUL_ADD_C a0L,a0R,b6L,b6R,c1,c2,c3 - STD c1,48(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a0L,a0R,b7L,b7R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b6L,b6R,c2,c3,c1 - MUL_ADD_C a2L,a2R,b5L,b5R,c2,c3,c1 - MUL_ADD_C a3L,a3R,b4L,b4R,c2,c3,c1 - MUL_ADD_C a4L,a4R,b3L,b3R,c2,c3,c1 - MUL_ADD_C a5L,a5R,b2L,b2R,c2,c3,c1 - MUL_ADD_C a6L,a6R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a7L,a7R,b0L,b0R,c2,c3,c1 - STD c2,56(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a7L,a7R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a6L,a6R,b2L,b2R,c3,c1,c2 - MUL_ADD_C a5L,a5R,b3L,b3R,c3,c1,c2 - MUL_ADD_C a4L,a4R,b4L,b4R,c3,c1,c2 - MUL_ADD_C a3L,a3R,b5L,b5R,c3,c1,c2 - MUL_ADD_C a2L,a2R,b6L,b6R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b7L,b7R,c3,c1,c2 - STD c3,64(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a2L,a2R,b7L,b7R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b6L,b6R,c1,c2,c3 - MUL_ADD_C a4L,a4R,b5L,b5R,c1,c2,c3 - MUL_ADD_C a5L,a5R,b4L,b4R,c1,c2,c3 - MUL_ADD_C a6L,a6R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a7L,a7R,b2L,b2R,c1,c2,c3 - STD c1,72(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a7L,a7R,b3L,b3R,c2,c3,c1 - MUL_ADD_C a6L,a6R,b4L,b4R,c2,c3,c1 - MUL_ADD_C a5L,a5R,b5L,b5R,c2,c3,c1 - MUL_ADD_C a4L,a4R,b6L,b6R,c2,c3,c1 - MUL_ADD_C a3L,a3R,b7L,b7R,c2,c3,c1 - STD c2,80(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a4L,a4R,b7L,b7R,c3,c1,c2 - MUL_ADD_C a5L,a5R,b6L,b6R,c3,c1,c2 - MUL_ADD_C a6L,a6R,b5L,b5R,c3,c1,c2 - MUL_ADD_C a7L,a7R,b4L,b4R,c3,c1,c2 - STD c3,88(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a7L,a7R,b5L,b5R,c1,c2,c3 - MUL_ADD_C a6L,a6R,b6L,b6R,c1,c2,c3 - MUL_ADD_C a5L,a5R,b7L,b7R,c1,c2,c3 - STD c1,96(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a6L,a6R,b7L,b7R,c2,c3,c1 - MUL_ADD_C a7L,a7R,b6L,b6R,c2,c3,c1 - STD c2,104(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a7L,a7R,b7L,b7R,c3,c1,c2 - STD c3,112(r_ptr) - STD c1,120(r_ptr) - - .EXIT - FLDD -88(%sp),%fr13 - FLDD -96(%sp),%fr12 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - -;----------------------------------------------------------------------------- -; -;void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) -; arg0 = r_ptr -; arg1 = a_ptr -; arg2 = b_ptr -; - -bn_mul_comba4 - .proc - .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE - .EXPORT bn_mul_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN - .entry - .align 64 - - STD %r3,0(%sp) ; save r3 - STD %r4,8(%sp) ; save r4 - STD %r5,16(%sp) ; save r5 - STD %r6,24(%sp) ; save r6 - FSTD %fr12,32(%sp) ; save r6 - FSTD %fr13,40(%sp) ; save r7 - - ; - ; Zero out carries - ; - COPY %r0,c1 - COPY %r0,c2 - COPY %r0,c3 - - LDO 128(%sp),%sp ; bump stack - DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 - - ; - ; Load up all of the values we are going to use - ; - FLDD 0(a_ptr),a0 - FLDD 8(a_ptr),a1 - FLDD 16(a_ptr),a2 - FLDD 24(a_ptr),a3 - - FLDD 0(b_ptr),b0 - FLDD 8(b_ptr),b1 - FLDD 16(b_ptr),b2 - FLDD 24(b_ptr),b3 - - MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 - STD c1,0(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 - STD c2,8(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 - MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 - MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 - STD c3,16(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 - MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 - MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 - MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 - STD c1,24(r_ptr) - COPY %r0,c1 - - MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 - MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 - MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 - STD c2,32(r_ptr) - COPY %r0,c2 - - MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 - MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 - STD c3,40(r_ptr) - COPY %r0,c3 - - MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 - STD c1,48(r_ptr) - STD c2,56(r_ptr) - - .EXIT - FLDD -88(%sp),%fr13 - FLDD -96(%sp),%fr12 - LDD -104(%sp),%r6 ; restore r6 - LDD -112(%sp),%r5 ; restore r5 - LDD -120(%sp),%r4 ; restore r4 - BVE (%rp) - LDD,MB -128(%sp),%r3 - - .PROCEND - - - .SPACE $TEXT$ - .SUBSPA $CODE$ - .SPACE $PRIVATE$,SORT=16 - .IMPORT $global$,DATA - .SPACE $TEXT$ - .SUBSPA $CODE$ - .SUBSPA $LIT$,ACCESS=0x2c -C$4 - .ALIGN 8 - .STRINGZ "Division would overflow (%d)\n" - .END diff --git a/crypto/bn/asm/parisc-mont.pl b/crypto/bn/asm/parisc-mont.pl index 8aa94e85..a705e163 100644 --- a/crypto/bn/asm/parisc-mont.pl +++ b/crypto/bn/asm/parisc-mont.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -21,7 +21,7 @@ # optimal in respect to instruction set capabilities. Fair comparison # with vendor compiler is problematic, because OpenSSL doesn't define # BN_LLONG [presumably] for historical reasons, which drives compiler -# toward 4 times 16x16=32-bit multiplicatons [plus complementary +# toward 4 times 16x16=32-bit multiplications [plus complementary # shifts and additions] instead. This means that you should observe # several times improvement over code generated by vendor compiler # for PA-RISC 1.1, but the "baseline" is far from optimal. The actual @@ -546,7 +546,7 @@ L\$copy ldd $idx($np),$hi0 std,ma %r0,8($tp) addib,<> 8,$idx,.-8 ; L\$copy - std,ma $hi0,8($rp) + std,ma $hi0,8($rp) ___ if ($BN_SZ==4) { # PA-RISC 1.1 code-path @@ -868,7 +868,7 @@ L\$copy_pa11 ldwx $idx($np),$hi0 stws,ma %r0,4($tp) addib,<> 4,$idx,L\$copy_pa11 - stws,ma $hi0,4($rp) + stws,ma $hi0,4($rp) nop ; alignment L\$done diff --git a/crypto/bn/asm/ppc-mont.pl b/crypto/bn/asm/ppc-mont.pl index 5802260c..9aa96c8e 100644 --- a/crypto/bn/asm/ppc-mont.pl +++ b/crypto/bn/asm/ppc-mont.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -26,11 +26,21 @@ # So far RSA *sign* performance improvement over pre-bn_mul_mont asm # for 64-bit application running on PPC970/G5 is: # -# 512-bit +65% +# 512-bit +65% # 1024-bit +35% # 2048-bit +18% # 4096-bit +4% +# September 2016 +# +# Add multiplication procedure operating on lengths divisible by 4 +# and squaring procedure operating on lengths divisible by 8. Length +# is expressed in number of limbs. RSA private key operations are +# ~35-50% faster (more for longer keys) on contemporary high-end POWER +# processors in 64-bit builds, [mysteriously enough] more in 32-bit +# builds. On low-end 32-bit processors performance improvement turned +# to be marginal... + $flavour = shift; if ($flavour =~ /32/) { @@ -49,7 +59,8 @@ if ($flavour =~ /32/) { $UMULL= "mullw"; # unsigned multiply low $UMULH= "mulhwu"; # unsigned multiply high $UCMP= "cmplw"; # unsigned compare - $SHRI= "srwi"; # unsigned shift right by immediate + $SHRI= "srwi"; # unsigned shift right by immediate + $SHLI= "slwi"; # unsigned shift left by immediate $PUSH= $ST; $POP= $LD; } elsif ($flavour =~ /64/) { @@ -69,7 +80,8 @@ if ($flavour =~ /32/) { $UMULL= "mulld"; # unsigned multiply low $UMULH= "mulhdu"; # unsigned multiply high $UCMP= "cmpld"; # unsigned compare - $SHRI= "srdi"; # unsigned shift right by immediate + $SHRI= "srdi"; # unsigned shift right by immediate + $SHLI= "sldi"; # unsigned shift left by immediate $PUSH= $ST; $POP= $LD; } else { die "nonsense $flavour"; } @@ -86,43 +98,44 @@ open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!"; $sp="r1"; $toc="r2"; -$rp="r3"; $ovf="r3"; +$rp="r3"; $ap="r4"; $bp="r5"; $np="r6"; $n0="r7"; $num="r8"; -$rp="r9"; # $rp is reassigned -$aj="r10"; -$nj="r11"; -$tj="r12"; + +{ +my $ovf=$rp; +my $rp="r9"; # $rp is reassigned +my $aj="r10"; +my $nj="r11"; +my $tj="r12"; # non-volatile registers -$i="r20"; -$j="r21"; -$tp="r22"; -$m0="r23"; -$m1="r24"; -$lo0="r25"; -$hi0="r26"; -$lo1="r27"; -$hi1="r28"; -$alo="r29"; -$ahi="r30"; -$nlo="r31"; +my $i="r20"; +my $j="r21"; +my $tp="r22"; +my $m0="r23"; +my $m1="r24"; +my $lo0="r25"; +my $hi0="r26"; +my $lo1="r27"; +my $hi1="r28"; +my $alo="r29"; +my $ahi="r30"; +my $nlo="r31"; # -$nhi="r0"; +my $nhi="r0"; $code=<<___; .machine "any" .text .globl .bn_mul_mont_int -.align 4 +.align 5 .bn_mul_mont_int: - cmpwi $num,4 mr $rp,r3 ; $rp is reassigned li r3,0 - bltlr ___ $code.=<<___ if ($BNSZ==4); cmpwi $num,32 ; longer key performance is not better @@ -333,7 +346,1641 @@ Lcopy: ; copy or in-place refresh .byte 0,12,4,0,0x80,12,6,0 .long 0 .size .bn_mul_mont_int,.-.bn_mul_mont_int +___ +} +if (1) { +my ($a0,$a1,$a2,$a3, + $t0,$t1,$t2,$t3, + $m0,$m1,$m2,$m3, + $acc0,$acc1,$acc2,$acc3,$acc4, + $bi,$mi,$tp,$ap_end,$cnt) = map("r$_",(9..12,14..31)); +my ($carry,$zero) = ($rp,"r0"); +# sp----------->+-------------------------------+ +# | saved sp | +# +-------------------------------+ +# . . +# +8*size_t +-------------------------------+ +# | 4 "n0*t0" | +# . . +# . . +# +12*size_t +-------------------------------+ +# | size_t tmp[num] | +# . . +# . . +# . . +# +-------------------------------+ +# | topmost carry | +# . . +# -18*size_t +-------------------------------+ +# | 18 saved gpr, r14-r31 | +# . . +# . . +# +-------------------------------+ +$code.=<<___; +.globl .bn_mul4x_mont_int +.align 5 +.bn_mul4x_mont_int: + andi. r0,$num,7 + bne .Lmul4x_do + $UCMP $ap,$bp + bne .Lmul4x_do + b .Lsqr8x_do +.Lmul4x_do: + slwi $num,$num,`log($SIZE_T)/log(2)` + mr $a0,$sp + li $a1,-32*$SIZE_T + sub $a1,$a1,$num + $STUX $sp,$sp,$a1 # alloca + + $PUSH r14,-$SIZE_T*18($a0) + $PUSH r15,-$SIZE_T*17($a0) + $PUSH r16,-$SIZE_T*16($a0) + $PUSH r17,-$SIZE_T*15($a0) + $PUSH r18,-$SIZE_T*14($a0) + $PUSH r19,-$SIZE_T*13($a0) + $PUSH r20,-$SIZE_T*12($a0) + $PUSH r21,-$SIZE_T*11($a0) + $PUSH r22,-$SIZE_T*10($a0) + $PUSH r23,-$SIZE_T*9($a0) + $PUSH r24,-$SIZE_T*8($a0) + $PUSH r25,-$SIZE_T*7($a0) + $PUSH r26,-$SIZE_T*6($a0) + $PUSH r27,-$SIZE_T*5($a0) + $PUSH r28,-$SIZE_T*4($a0) + $PUSH r29,-$SIZE_T*3($a0) + $PUSH r30,-$SIZE_T*2($a0) + $PUSH r31,-$SIZE_T*1($a0) + + subi $ap,$ap,$SIZE_T # bias by -1 + subi $np,$np,$SIZE_T # bias by -1 + subi $rp,$rp,$SIZE_T # bias by -1 + $LD $n0,0($n0) # *n0 + + add $t0,$bp,$num + add $ap_end,$ap,$num + subi $t0,$t0,$SIZE_T*4 # &b[num-4] + + $LD $bi,$SIZE_T*0($bp) # b[0] + li $acc0,0 + $LD $a0,$SIZE_T*1($ap) # a[0..3] + li $acc1,0 + $LD $a1,$SIZE_T*2($ap) + li $acc2,0 + $LD $a2,$SIZE_T*3($ap) + li $acc3,0 + $LDU $a3,$SIZE_T*4($ap) + $LD $m0,$SIZE_T*1($np) # n[0..3] + $LD $m1,$SIZE_T*2($np) + $LD $m2,$SIZE_T*3($np) + $LDU $m3,$SIZE_T*4($np) + + $PUSH $rp,$SIZE_T*6($sp) # offload rp and &b[num-4] + $PUSH $t0,$SIZE_T*7($sp) + li $carry,0 + addic $tp,$sp,$SIZE_T*7 # &t[-1], clear carry bit + li $cnt,0 + li $zero,0 + b .Loop_mul4x_1st_reduction + +.align 5 +.Loop_mul4x_1st_reduction: + $UMULL $t0,$a0,$bi # lo(a[0..3]*b[0]) + addze $carry,$carry # modulo-scheduled + $UMULL $t1,$a1,$bi + addi $cnt,$cnt,$SIZE_T + $UMULL $t2,$a2,$bi + andi. $cnt,$cnt,$SIZE_T*4-1 + $UMULL $t3,$a3,$bi + addc $acc0,$acc0,$t0 + $UMULH $t0,$a0,$bi # hi(a[0..3]*b[0]) + adde $acc1,$acc1,$t1 + $UMULH $t1,$a1,$bi + adde $acc2,$acc2,$t2 + $UMULL $mi,$acc0,$n0 # t[0]*n0 + adde $acc3,$acc3,$t3 + $UMULH $t2,$a2,$bi + addze $acc4,$zero + $UMULH $t3,$a3,$bi + $LDX $bi,$bp,$cnt # next b[i] (or b[0]) + addc $acc1,$acc1,$t0 + # (*) mul $t0,$m0,$mi # lo(n[0..3]*t[0]*n0) + $STU $mi,$SIZE_T($tp) # put aside t[0]*n0 for tail processing + adde $acc2,$acc2,$t1 + $UMULL $t1,$m1,$mi + adde $acc3,$acc3,$t2 + $UMULL $t2,$m2,$mi + adde $acc4,$acc4,$t3 # can't overflow + $UMULL $t3,$m3,$mi + # (*) addc $acc0,$acc0,$t0 + # (*) As for removal of first multiplication and addition + # instructions. The outcome of first addition is + # guaranteed to be zero, which leaves two computationally + # significant outcomes: it either carries or not. Then + # question is when does it carry? Is there alternative + # way to deduce it? If you follow operations, you can + # observe that condition for carry is quite simple: + # $acc0 being non-zero. So that carry can be calculated + # by adding -1 to $acc0. That's what next instruction does. + addic $acc0,$acc0,-1 # (*), discarded + $UMULH $t0,$m0,$mi # hi(n[0..3]*t[0]*n0) + adde $acc0,$acc1,$t1 + $UMULH $t1,$m1,$mi + adde $acc1,$acc2,$t2 + $UMULH $t2,$m2,$mi + adde $acc2,$acc3,$t3 + $UMULH $t3,$m3,$mi + adde $acc3,$acc4,$carry + addze $carry,$zero + addc $acc0,$acc0,$t0 + adde $acc1,$acc1,$t1 + adde $acc2,$acc2,$t2 + adde $acc3,$acc3,$t3 + #addze $carry,$carry + bne .Loop_mul4x_1st_reduction + + $UCMP $ap_end,$ap + beq .Lmul4x4_post_condition + + $LD $a0,$SIZE_T*1($ap) # a[4..7] + $LD $a1,$SIZE_T*2($ap) + $LD $a2,$SIZE_T*3($ap) + $LDU $a3,$SIZE_T*4($ap) + $LD $mi,$SIZE_T*8($sp) # a[0]*n0 + $LD $m0,$SIZE_T*1($np) # n[4..7] + $LD $m1,$SIZE_T*2($np) + $LD $m2,$SIZE_T*3($np) + $LDU $m3,$SIZE_T*4($np) + b .Loop_mul4x_1st_tail + +.align 5 +.Loop_mul4x_1st_tail: + $UMULL $t0,$a0,$bi # lo(a[4..7]*b[i]) + addze $carry,$carry # modulo-scheduled + $UMULL $t1,$a1,$bi + addi $cnt,$cnt,$SIZE_T + $UMULL $t2,$a2,$bi + andi. $cnt,$cnt,$SIZE_T*4-1 + $UMULL $t3,$a3,$bi + addc $acc0,$acc0,$t0 + $UMULH $t0,$a0,$bi # hi(a[4..7]*b[i]) + adde $acc1,$acc1,$t1 + $UMULH $t1,$a1,$bi + adde $acc2,$acc2,$t2 + $UMULH $t2,$a2,$bi + adde $acc3,$acc3,$t3 + $UMULH $t3,$a3,$bi + addze $acc4,$zero + $LDX $bi,$bp,$cnt # next b[i] (or b[0]) + addc $acc1,$acc1,$t0 + $UMULL $t0,$m0,$mi # lo(n[4..7]*a[0]*n0) + adde $acc2,$acc2,$t1 + $UMULL $t1,$m1,$mi + adde $acc3,$acc3,$t2 + $UMULL $t2,$m2,$mi + adde $acc4,$acc4,$t3 # can't overflow + $UMULL $t3,$m3,$mi + addc $acc0,$acc0,$t0 + $UMULH $t0,$m0,$mi # hi(n[4..7]*a[0]*n0) + adde $acc1,$acc1,$t1 + $UMULH $t1,$m1,$mi + adde $acc2,$acc2,$t2 + $UMULH $t2,$m2,$mi + adde $acc3,$acc3,$t3 + adde $acc4,$acc4,$carry + $UMULH $t3,$m3,$mi + addze $carry,$zero + addi $mi,$sp,$SIZE_T*8 + $LDX $mi,$mi,$cnt # next t[0]*n0 + $STU $acc0,$SIZE_T($tp) # word of result + addc $acc0,$acc1,$t0 + adde $acc1,$acc2,$t1 + adde $acc2,$acc3,$t2 + adde $acc3,$acc4,$t3 + #addze $carry,$carry + bne .Loop_mul4x_1st_tail + + sub $t1,$ap_end,$num # rewinded $ap + $UCMP $ap_end,$ap # done yet? + beq .Lmul4x_proceed + + $LD $a0,$SIZE_T*1($ap) + $LD $a1,$SIZE_T*2($ap) + $LD $a2,$SIZE_T*3($ap) + $LDU $a3,$SIZE_T*4($ap) + $LD $m0,$SIZE_T*1($np) + $LD $m1,$SIZE_T*2($np) + $LD $m2,$SIZE_T*3($np) + $LDU $m3,$SIZE_T*4($np) + b .Loop_mul4x_1st_tail + +.align 5 +.Lmul4x_proceed: + $LDU $bi,$SIZE_T*4($bp) # *++b + addze $carry,$carry # topmost carry + $LD $a0,$SIZE_T*1($t1) + $LD $a1,$SIZE_T*2($t1) + $LD $a2,$SIZE_T*3($t1) + $LD $a3,$SIZE_T*4($t1) + addi $ap,$t1,$SIZE_T*4 + sub $np,$np,$num # rewind np + + $ST $acc0,$SIZE_T*1($tp) # result + $ST $acc1,$SIZE_T*2($tp) + $ST $acc2,$SIZE_T*3($tp) + $ST $acc3,$SIZE_T*4($tp) + $ST $carry,$SIZE_T*5($tp) # save topmost carry + $LD $acc0,$SIZE_T*12($sp) # t[0..3] + $LD $acc1,$SIZE_T*13($sp) + $LD $acc2,$SIZE_T*14($sp) + $LD $acc3,$SIZE_T*15($sp) + + $LD $m0,$SIZE_T*1($np) # n[0..3] + $LD $m1,$SIZE_T*2($np) + $LD $m2,$SIZE_T*3($np) + $LDU $m3,$SIZE_T*4($np) + addic $tp,$sp,$SIZE_T*7 # &t[-1], clear carry bit + li $carry,0 + b .Loop_mul4x_reduction + +.align 5 +.Loop_mul4x_reduction: + $UMULL $t0,$a0,$bi # lo(a[0..3]*b[4]) + addze $carry,$carry # modulo-scheduled + $UMULL $t1,$a1,$bi + addi $cnt,$cnt,$SIZE_T + $UMULL $t2,$a2,$bi + andi. $cnt,$cnt,$SIZE_T*4-1 + $UMULL $t3,$a3,$bi + addc $acc0,$acc0,$t0 + $UMULH $t0,$a0,$bi # hi(a[0..3]*b[4]) + adde $acc1,$acc1,$t1 + $UMULH $t1,$a1,$bi + adde $acc2,$acc2,$t2 + $UMULL $mi,$acc0,$n0 # t[0]*n0 + adde $acc3,$acc3,$t3 + $UMULH $t2,$a2,$bi + addze $acc4,$zero + $UMULH $t3,$a3,$bi + $LDX $bi,$bp,$cnt # next b[i] + addc $acc1,$acc1,$t0 + # (*) mul $t0,$m0,$mi + $STU $mi,$SIZE_T($tp) # put aside t[0]*n0 for tail processing + adde $acc2,$acc2,$t1 + $UMULL $t1,$m1,$mi # lo(n[0..3]*t[0]*n0 + adde $acc3,$acc3,$t2 + $UMULL $t2,$m2,$mi + adde $acc4,$acc4,$t3 # can't overflow + $UMULL $t3,$m3,$mi + # (*) addc $acc0,$acc0,$t0 + addic $acc0,$acc0,-1 # (*), discarded + $UMULH $t0,$m0,$mi # hi(n[0..3]*t[0]*n0 + adde $acc0,$acc1,$t1 + $UMULH $t1,$m1,$mi + adde $acc1,$acc2,$t2 + $UMULH $t2,$m2,$mi + adde $acc2,$acc3,$t3 + $UMULH $t3,$m3,$mi + adde $acc3,$acc4,$carry + addze $carry,$zero + addc $acc0,$acc0,$t0 + adde $acc1,$acc1,$t1 + adde $acc2,$acc2,$t2 + adde $acc3,$acc3,$t3 + #addze $carry,$carry + bne .Loop_mul4x_reduction + + $LD $t0,$SIZE_T*5($tp) # t[4..7] + addze $carry,$carry + $LD $t1,$SIZE_T*6($tp) + $LD $t2,$SIZE_T*7($tp) + $LD $t3,$SIZE_T*8($tp) + $LD $a0,$SIZE_T*1($ap) # a[4..7] + $LD $a1,$SIZE_T*2($ap) + $LD $a2,$SIZE_T*3($ap) + $LDU $a3,$SIZE_T*4($ap) + addc $acc0,$acc0,$t0 + adde $acc1,$acc1,$t1 + adde $acc2,$acc2,$t2 + adde $acc3,$acc3,$t3 + #addze $carry,$carry + + $LD $mi,$SIZE_T*8($sp) # t[0]*n0 + $LD $m0,$SIZE_T*1($np) # n[4..7] + $LD $m1,$SIZE_T*2($np) + $LD $m2,$SIZE_T*3($np) + $LDU $m3,$SIZE_T*4($np) + b .Loop_mul4x_tail + +.align 5 +.Loop_mul4x_tail: + $UMULL $t0,$a0,$bi # lo(a[4..7]*b[4]) + addze $carry,$carry # modulo-scheduled + $UMULL $t1,$a1,$bi + addi $cnt,$cnt,$SIZE_T + $UMULL $t2,$a2,$bi + andi. $cnt,$cnt,$SIZE_T*4-1 + $UMULL $t3,$a3,$bi + addc $acc0,$acc0,$t0 + $UMULH $t0,$a0,$bi # hi(a[4..7]*b[4]) + adde $acc1,$acc1,$t1 + $UMULH $t1,$a1,$bi + adde $acc2,$acc2,$t2 + $UMULH $t2,$a2,$bi + adde $acc3,$acc3,$t3 + $UMULH $t3,$a3,$bi + addze $acc4,$zero + $LDX $bi,$bp,$cnt # next b[i] + addc $acc1,$acc1,$t0 + $UMULL $t0,$m0,$mi # lo(n[4..7]*t[0]*n0) + adde $acc2,$acc2,$t1 + $UMULL $t1,$m1,$mi + adde $acc3,$acc3,$t2 + $UMULL $t2,$m2,$mi + adde $acc4,$acc4,$t3 # can't overflow + $UMULL $t3,$m3,$mi + addc $acc0,$acc0,$t0 + $UMULH $t0,$m0,$mi # hi(n[4..7]*t[0]*n0) + adde $acc1,$acc1,$t1 + $UMULH $t1,$m1,$mi + adde $acc2,$acc2,$t2 + $UMULH $t2,$m2,$mi + adde $acc3,$acc3,$t3 + $UMULH $t3,$m3,$mi + adde $acc4,$acc4,$carry + addi $mi,$sp,$SIZE_T*8 + $LDX $mi,$mi,$cnt # next a[0]*n0 + addze $carry,$zero + $STU $acc0,$SIZE_T($tp) # word of result + addc $acc0,$acc1,$t0 + adde $acc1,$acc2,$t1 + adde $acc2,$acc3,$t2 + adde $acc3,$acc4,$t3 + #addze $carry,$carry + bne .Loop_mul4x_tail + + $LD $t0,$SIZE_T*5($tp) # next t[i] or topmost carry + sub $t1,$np,$num # rewinded np? + addze $carry,$carry + $UCMP $ap_end,$ap # done yet? + beq .Loop_mul4x_break + + $LD $t1,$SIZE_T*6($tp) + $LD $t2,$SIZE_T*7($tp) + $LD $t3,$SIZE_T*8($tp) + $LD $a0,$SIZE_T*1($ap) + $LD $a1,$SIZE_T*2($ap) + $LD $a2,$SIZE_T*3($ap) + $LDU $a3,$SIZE_T*4($ap) + addc $acc0,$acc0,$t0 + adde $acc1,$acc1,$t1 + adde $acc2,$acc2,$t2 + adde $acc3,$acc3,$t3 + #addze $carry,$carry + + $LD $m0,$SIZE_T*1($np) # n[4..7] + $LD $m1,$SIZE_T*2($np) + $LD $m2,$SIZE_T*3($np) + $LDU $m3,$SIZE_T*4($np) + b .Loop_mul4x_tail + +.align 5 +.Loop_mul4x_break: + $POP $t2,$SIZE_T*6($sp) # pull rp and &b[num-4] + $POP $t3,$SIZE_T*7($sp) + addc $a0,$acc0,$t0 # accumulate topmost carry + $LD $acc0,$SIZE_T*12($sp) # t[0..3] + addze $a1,$acc1 + $LD $acc1,$SIZE_T*13($sp) + addze $a2,$acc2 + $LD $acc2,$SIZE_T*14($sp) + addze $a3,$acc3 + $LD $acc3,$SIZE_T*15($sp) + addze $carry,$carry # topmost carry + $ST $a0,$SIZE_T*1($tp) # result + sub $ap,$ap_end,$num # rewind ap + $ST $a1,$SIZE_T*2($tp) + $ST $a2,$SIZE_T*3($tp) + $ST $a3,$SIZE_T*4($tp) + $ST $carry,$SIZE_T*5($tp) # store topmost carry + + $LD $m0,$SIZE_T*1($t1) # n[0..3] + $LD $m1,$SIZE_T*2($t1) + $LD $m2,$SIZE_T*3($t1) + $LD $m3,$SIZE_T*4($t1) + addi $np,$t1,$SIZE_T*4 + $UCMP $bp,$t3 # done yet? + beq .Lmul4x_post + + $LDU $bi,$SIZE_T*4($bp) + $LD $a0,$SIZE_T*1($ap) # a[0..3] + $LD $a1,$SIZE_T*2($ap) + $LD $a2,$SIZE_T*3($ap) + $LDU $a3,$SIZE_T*4($ap) + li $carry,0 + addic $tp,$sp,$SIZE_T*7 # &t[-1], clear carry bit + b .Loop_mul4x_reduction + +.align 5 +.Lmul4x_post: + # Final step. We see if result is larger than modulus, and + # if it is, subtract the modulus. But comparison implies + # subtraction. So we subtract modulus, see if it borrowed, + # and conditionally copy original value. + srwi $cnt,$num,`log($SIZE_T)/log(2)+2` + mr $bp,$t2 # &rp[-1] + subi $cnt,$cnt,1 + mr $ap_end,$t2 # &rp[-1] copy + subfc $t0,$m0,$acc0 + addi $tp,$sp,$SIZE_T*15 + subfe $t1,$m1,$acc1 + + mtctr $cnt +.Lmul4x_sub: + $LD $m0,$SIZE_T*1($np) + $LD $acc0,$SIZE_T*1($tp) + subfe $t2,$m2,$acc2 + $LD $m1,$SIZE_T*2($np) + $LD $acc1,$SIZE_T*2($tp) + subfe $t3,$m3,$acc3 + $LD $m2,$SIZE_T*3($np) + $LD $acc2,$SIZE_T*3($tp) + $LDU $m3,$SIZE_T*4($np) + $LDU $acc3,$SIZE_T*4($tp) + $ST $t0,$SIZE_T*1($bp) + $ST $t1,$SIZE_T*2($bp) + subfe $t0,$m0,$acc0 + $ST $t2,$SIZE_T*3($bp) + $STU $t3,$SIZE_T*4($bp) + subfe $t1,$m1,$acc1 + bdnz .Lmul4x_sub + + $LD $a0,$SIZE_T*1($ap_end) + $ST $t0,$SIZE_T*1($bp) + $LD $t0,$SIZE_T*12($sp) + subfe $t2,$m2,$acc2 + $LD $a1,$SIZE_T*2($ap_end) + $ST $t1,$SIZE_T*2($bp) + $LD $t1,$SIZE_T*13($sp) + subfe $t3,$m3,$acc3 + subfe $carry,$zero,$carry # did it borrow? + addi $tp,$sp,$SIZE_T*12 + $LD $a2,$SIZE_T*3($ap_end) + $ST $t2,$SIZE_T*3($bp) + $LD $t2,$SIZE_T*14($sp) + $LD $a3,$SIZE_T*4($ap_end) + $ST $t3,$SIZE_T*4($bp) + $LD $t3,$SIZE_T*15($sp) + + mtctr $cnt +.Lmul4x_cond_copy: + and $t0,$t0,$carry + andc $a0,$a0,$carry + $ST $zero,$SIZE_T*0($tp) # wipe stack clean + and $t1,$t1,$carry + andc $a1,$a1,$carry + $ST $zero,$SIZE_T*1($tp) + and $t2,$t2,$carry + andc $a2,$a2,$carry + $ST $zero,$SIZE_T*2($tp) + and $t3,$t3,$carry + andc $a3,$a3,$carry + $ST $zero,$SIZE_T*3($tp) + or $acc0,$t0,$a0 + $LD $a0,$SIZE_T*5($ap_end) + $LD $t0,$SIZE_T*4($tp) + or $acc1,$t1,$a1 + $LD $a1,$SIZE_T*6($ap_end) + $LD $t1,$SIZE_T*5($tp) + or $acc2,$t2,$a2 + $LD $a2,$SIZE_T*7($ap_end) + $LD $t2,$SIZE_T*6($tp) + or $acc3,$t3,$a3 + $LD $a3,$SIZE_T*8($ap_end) + $LD $t3,$SIZE_T*7($tp) + addi $tp,$tp,$SIZE_T*4 + $ST $acc0,$SIZE_T*1($ap_end) + $ST $acc1,$SIZE_T*2($ap_end) + $ST $acc2,$SIZE_T*3($ap_end) + $STU $acc3,$SIZE_T*4($ap_end) + bdnz .Lmul4x_cond_copy + + $POP $bp,0($sp) # pull saved sp + and $t0,$t0,$carry + andc $a0,$a0,$carry + $ST $zero,$SIZE_T*0($tp) + and $t1,$t1,$carry + andc $a1,$a1,$carry + $ST $zero,$SIZE_T*1($tp) + and $t2,$t2,$carry + andc $a2,$a2,$carry + $ST $zero,$SIZE_T*2($tp) + and $t3,$t3,$carry + andc $a3,$a3,$carry + $ST $zero,$SIZE_T*3($tp) + or $acc0,$t0,$a0 + or $acc1,$t1,$a1 + $ST $zero,$SIZE_T*4($tp) + or $acc2,$t2,$a2 + or $acc3,$t3,$a3 + $ST $acc0,$SIZE_T*1($ap_end) + $ST $acc1,$SIZE_T*2($ap_end) + $ST $acc2,$SIZE_T*3($ap_end) + $ST $acc3,$SIZE_T*4($ap_end) + + b .Lmul4x_done + +.align 4 +.Lmul4x4_post_condition: + $POP $ap,$SIZE_T*6($sp) # pull &rp[-1] + $POP $bp,0($sp) # pull saved sp + addze $carry,$carry # modulo-scheduled + # $acc0-3,$carry hold result, $m0-3 hold modulus + subfc $a0,$m0,$acc0 + subfe $a1,$m1,$acc1 + subfe $a2,$m2,$acc2 + subfe $a3,$m3,$acc3 + subfe $carry,$zero,$carry # did it borrow? + + and $m0,$m0,$carry + and $m1,$m1,$carry + addc $a0,$a0,$m0 + and $m2,$m2,$carry + adde $a1,$a1,$m1 + and $m3,$m3,$carry + adde $a2,$a2,$m2 + adde $a3,$a3,$m3 + + $ST $a0,$SIZE_T*1($ap) # write result + $ST $a1,$SIZE_T*2($ap) + $ST $a2,$SIZE_T*3($ap) + $ST $a3,$SIZE_T*4($ap) + +.Lmul4x_done: + $ST $zero,$SIZE_T*8($sp) # wipe stack clean + $ST $zero,$SIZE_T*9($sp) + $ST $zero,$SIZE_T*10($sp) + $ST $zero,$SIZE_T*11($sp) + li r3,1 # signal "done" + $POP r14,-$SIZE_T*18($bp) + $POP r15,-$SIZE_T*17($bp) + $POP r16,-$SIZE_T*16($bp) + $POP r17,-$SIZE_T*15($bp) + $POP r18,-$SIZE_T*14($bp) + $POP r19,-$SIZE_T*13($bp) + $POP r20,-$SIZE_T*12($bp) + $POP r21,-$SIZE_T*11($bp) + $POP r22,-$SIZE_T*10($bp) + $POP r23,-$SIZE_T*9($bp) + $POP r24,-$SIZE_T*8($bp) + $POP r25,-$SIZE_T*7($bp) + $POP r26,-$SIZE_T*6($bp) + $POP r27,-$SIZE_T*5($bp) + $POP r28,-$SIZE_T*4($bp) + $POP r29,-$SIZE_T*3($bp) + $POP r30,-$SIZE_T*2($bp) + $POP r31,-$SIZE_T*1($bp) + mr $sp,$bp + blr + .long 0 + .byte 0,12,4,0x20,0x80,18,6,0 + .long 0 +.size .bn_mul4x_mont_int,.-.bn_mul4x_mont_int +___ +} + +if (1) { +######################################################################## +# Following is PPC adaptation of sqrx8x_mont from x86_64-mont5 module. + +my ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("r$_",(9..12,14..17)); +my ($t0,$t1,$t2,$t3)=map("r$_",(18..21)); +my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("r$_",(22..29)); +my ($cnt,$carry,$zero)=("r30","r31","r0"); +my ($tp,$ap_end,$na0)=($bp,$np,$carry); + +# sp----------->+-------------------------------+ +# | saved sp | +# +-------------------------------+ +# . . +# +12*size_t +-------------------------------+ +# | size_t tmp[2*num] | +# . . +# . . +# . . +# +-------------------------------+ +# . . +# -18*size_t +-------------------------------+ +# | 18 saved gpr, r14-r31 | +# . . +# . . +# +-------------------------------+ +$code.=<<___; +.align 5 +__bn_sqr8x_mont: +.Lsqr8x_do: + mr $a0,$sp + slwi $a1,$num,`log($SIZE_T)/log(2)+1` + li $a2,-32*$SIZE_T + sub $a1,$a2,$a1 + slwi $num,$num,`log($SIZE_T)/log(2)` + $STUX $sp,$sp,$a1 # alloca + + $PUSH r14,-$SIZE_T*18($a0) + $PUSH r15,-$SIZE_T*17($a0) + $PUSH r16,-$SIZE_T*16($a0) + $PUSH r17,-$SIZE_T*15($a0) + $PUSH r18,-$SIZE_T*14($a0) + $PUSH r19,-$SIZE_T*13($a0) + $PUSH r20,-$SIZE_T*12($a0) + $PUSH r21,-$SIZE_T*11($a0) + $PUSH r22,-$SIZE_T*10($a0) + $PUSH r23,-$SIZE_T*9($a0) + $PUSH r24,-$SIZE_T*8($a0) + $PUSH r25,-$SIZE_T*7($a0) + $PUSH r26,-$SIZE_T*6($a0) + $PUSH r27,-$SIZE_T*5($a0) + $PUSH r28,-$SIZE_T*4($a0) + $PUSH r29,-$SIZE_T*3($a0) + $PUSH r30,-$SIZE_T*2($a0) + $PUSH r31,-$SIZE_T*1($a0) + + subi $ap,$ap,$SIZE_T # bias by -1 + subi $t0,$np,$SIZE_T # bias by -1 + subi $rp,$rp,$SIZE_T # bias by -1 + $LD $n0,0($n0) # *n0 + li $zero,0 + + add $ap_end,$ap,$num + $LD $a0,$SIZE_T*1($ap) + #li $acc0,0 + $LD $a1,$SIZE_T*2($ap) + li $acc1,0 + $LD $a2,$SIZE_T*3($ap) + li $acc2,0 + $LD $a3,$SIZE_T*4($ap) + li $acc3,0 + $LD $a4,$SIZE_T*5($ap) + li $acc4,0 + $LD $a5,$SIZE_T*6($ap) + li $acc5,0 + $LD $a6,$SIZE_T*7($ap) + li $acc6,0 + $LDU $a7,$SIZE_T*8($ap) + li $acc7,0 + + addi $tp,$sp,$SIZE_T*11 # &tp[-1] + subic. $cnt,$num,$SIZE_T*8 + b .Lsqr8x_zero_start + +.align 5 +.Lsqr8x_zero: + subic. $cnt,$cnt,$SIZE_T*8 + $ST $zero,$SIZE_T*1($tp) + $ST $zero,$SIZE_T*2($tp) + $ST $zero,$SIZE_T*3($tp) + $ST $zero,$SIZE_T*4($tp) + $ST $zero,$SIZE_T*5($tp) + $ST $zero,$SIZE_T*6($tp) + $ST $zero,$SIZE_T*7($tp) + $ST $zero,$SIZE_T*8($tp) +.Lsqr8x_zero_start: + $ST $zero,$SIZE_T*9($tp) + $ST $zero,$SIZE_T*10($tp) + $ST $zero,$SIZE_T*11($tp) + $ST $zero,$SIZE_T*12($tp) + $ST $zero,$SIZE_T*13($tp) + $ST $zero,$SIZE_T*14($tp) + $ST $zero,$SIZE_T*15($tp) + $STU $zero,$SIZE_T*16($tp) + bne .Lsqr8x_zero + + $PUSH $rp,$SIZE_T*6($sp) # offload &rp[-1] + $PUSH $t0,$SIZE_T*7($sp) # offload &np[-1] + $PUSH $n0,$SIZE_T*8($sp) # offload n0 + $PUSH $tp,$SIZE_T*9($sp) # &tp[2*num-1] + $PUSH $zero,$SIZE_T*10($sp) # initial top-most carry + addi $tp,$sp,$SIZE_T*11 # &tp[-1] + + # Multiply everything but a[i]*a[i] +.align 5 +.Lsqr8x_outer_loop: + # a[1]a[0] (i) + # a[2]a[0] + # a[3]a[0] + # a[4]a[0] + # a[5]a[0] + # a[6]a[0] + # a[7]a[0] + # a[2]a[1] (ii) + # a[3]a[1] + # a[4]a[1] + # a[5]a[1] + # a[6]a[1] + # a[7]a[1] + # a[3]a[2] (iii) + # a[4]a[2] + # a[5]a[2] + # a[6]a[2] + # a[7]a[2] + # a[4]a[3] (iv) + # a[5]a[3] + # a[6]a[3] + # a[7]a[3] + # a[5]a[4] (v) + # a[6]a[4] + # a[7]a[4] + # a[6]a[5] (vi) + # a[7]a[5] + # a[7]a[6] (vii) + + $UMULL $t0,$a1,$a0 # lo(a[1..7]*a[0]) (i) + $UMULL $t1,$a2,$a0 + $UMULL $t2,$a3,$a0 + $UMULL $t3,$a4,$a0 + addc $acc1,$acc1,$t0 # t[1]+lo(a[1]*a[0]) + $UMULL $t0,$a5,$a0 + adde $acc2,$acc2,$t1 + $UMULL $t1,$a6,$a0 + adde $acc3,$acc3,$t2 + $UMULL $t2,$a7,$a0 + adde $acc4,$acc4,$t3 + $UMULH $t3,$a1,$a0 # hi(a[1..7]*a[0]) + adde $acc5,$acc5,$t0 + $UMULH $t0,$a2,$a0 + adde $acc6,$acc6,$t1 + $UMULH $t1,$a3,$a0 + adde $acc7,$acc7,$t2 + $UMULH $t2,$a4,$a0 + $ST $acc0,$SIZE_T*1($tp) # t[0] + addze $acc0,$zero # t[8] + $ST $acc1,$SIZE_T*2($tp) # t[1] + addc $acc2,$acc2,$t3 # t[2]+lo(a[1]*a[0]) + $UMULH $t3,$a5,$a0 + adde $acc3,$acc3,$t0 + $UMULH $t0,$a6,$a0 + adde $acc4,$acc4,$t1 + $UMULH $t1,$a7,$a0 + adde $acc5,$acc5,$t2 + $UMULL $t2,$a2,$a1 # lo(a[2..7]*a[1]) (ii) + adde $acc6,$acc6,$t3 + $UMULL $t3,$a3,$a1 + adde $acc7,$acc7,$t0 + $UMULL $t0,$a4,$a1 + adde $acc0,$acc0,$t1 + + $UMULL $t1,$a5,$a1 + addc $acc3,$acc3,$t2 + $UMULL $t2,$a6,$a1 + adde $acc4,$acc4,$t3 + $UMULL $t3,$a7,$a1 + adde $acc5,$acc5,$t0 + $UMULH $t0,$a2,$a1 # hi(a[2..7]*a[1]) + adde $acc6,$acc6,$t1 + $UMULH $t1,$a3,$a1 + adde $acc7,$acc7,$t2 + $UMULH $t2,$a4,$a1 + adde $acc0,$acc0,$t3 + $UMULH $t3,$a5,$a1 + $ST $acc2,$SIZE_T*3($tp) # t[2] + addze $acc1,$zero # t[9] + $ST $acc3,$SIZE_T*4($tp) # t[3] + addc $acc4,$acc4,$t0 + $UMULH $t0,$a6,$a1 + adde $acc5,$acc5,$t1 + $UMULH $t1,$a7,$a1 + adde $acc6,$acc6,$t2 + $UMULL $t2,$a3,$a2 # lo(a[3..7]*a[2]) (iii) + adde $acc7,$acc7,$t3 + $UMULL $t3,$a4,$a2 + adde $acc0,$acc0,$t0 + $UMULL $t0,$a5,$a2 + adde $acc1,$acc1,$t1 + + $UMULL $t1,$a6,$a2 + addc $acc5,$acc5,$t2 + $UMULL $t2,$a7,$a2 + adde $acc6,$acc6,$t3 + $UMULH $t3,$a3,$a2 # hi(a[3..7]*a[2]) + adde $acc7,$acc7,$t0 + $UMULH $t0,$a4,$a2 + adde $acc0,$acc0,$t1 + $UMULH $t1,$a5,$a2 + adde $acc1,$acc1,$t2 + $UMULH $t2,$a6,$a2 + $ST $acc4,$SIZE_T*5($tp) # t[4] + addze $acc2,$zero # t[10] + $ST $acc5,$SIZE_T*6($tp) # t[5] + addc $acc6,$acc6,$t3 + $UMULH $t3,$a7,$a2 + adde $acc7,$acc7,$t0 + $UMULL $t0,$a4,$a3 # lo(a[4..7]*a[3]) (iv) + adde $acc0,$acc0,$t1 + $UMULL $t1,$a5,$a3 + adde $acc1,$acc1,$t2 + $UMULL $t2,$a6,$a3 + adde $acc2,$acc2,$t3 + + $UMULL $t3,$a7,$a3 + addc $acc7,$acc7,$t0 + $UMULH $t0,$a4,$a3 # hi(a[4..7]*a[3]) + adde $acc0,$acc0,$t1 + $UMULH $t1,$a5,$a3 + adde $acc1,$acc1,$t2 + $UMULH $t2,$a6,$a3 + adde $acc2,$acc2,$t3 + $UMULH $t3,$a7,$a3 + $ST $acc6,$SIZE_T*7($tp) # t[6] + addze $acc3,$zero # t[11] + $STU $acc7,$SIZE_T*8($tp) # t[7] + addc $acc0,$acc0,$t0 + $UMULL $t0,$a5,$a4 # lo(a[5..7]*a[4]) (v) + adde $acc1,$acc1,$t1 + $UMULL $t1,$a6,$a4 + adde $acc2,$acc2,$t2 + $UMULL $t2,$a7,$a4 + adde $acc3,$acc3,$t3 + + $UMULH $t3,$a5,$a4 # hi(a[5..7]*a[4]) + addc $acc1,$acc1,$t0 + $UMULH $t0,$a6,$a4 + adde $acc2,$acc2,$t1 + $UMULH $t1,$a7,$a4 + adde $acc3,$acc3,$t2 + $UMULL $t2,$a6,$a5 # lo(a[6..7]*a[5]) (vi) + addze $acc4,$zero # t[12] + addc $acc2,$acc2,$t3 + $UMULL $t3,$a7,$a5 + adde $acc3,$acc3,$t0 + $UMULH $t0,$a6,$a5 # hi(a[6..7]*a[5]) + adde $acc4,$acc4,$t1 + + $UMULH $t1,$a7,$a5 + addc $acc3,$acc3,$t2 + $UMULL $t2,$a7,$a6 # lo(a[7]*a[6]) (vii) + adde $acc4,$acc4,$t3 + $UMULH $t3,$a7,$a6 # hi(a[7]*a[6]) + addze $acc5,$zero # t[13] + addc $acc4,$acc4,$t0 + $UCMP $ap_end,$ap # done yet? + adde $acc5,$acc5,$t1 + + addc $acc5,$acc5,$t2 + sub $t0,$ap_end,$num # rewinded ap + addze $acc6,$zero # t[14] + add $acc6,$acc6,$t3 + + beq .Lsqr8x_outer_break + + mr $n0,$a0 + $LD $a0,$SIZE_T*1($tp) + $LD $a1,$SIZE_T*2($tp) + $LD $a2,$SIZE_T*3($tp) + $LD $a3,$SIZE_T*4($tp) + $LD $a4,$SIZE_T*5($tp) + $LD $a5,$SIZE_T*6($tp) + $LD $a6,$SIZE_T*7($tp) + $LD $a7,$SIZE_T*8($tp) + addc $acc0,$acc0,$a0 + $LD $a0,$SIZE_T*1($ap) + adde $acc1,$acc1,$a1 + $LD $a1,$SIZE_T*2($ap) + adde $acc2,$acc2,$a2 + $LD $a2,$SIZE_T*3($ap) + adde $acc3,$acc3,$a3 + $LD $a3,$SIZE_T*4($ap) + adde $acc4,$acc4,$a4 + $LD $a4,$SIZE_T*5($ap) + adde $acc5,$acc5,$a5 + $LD $a5,$SIZE_T*6($ap) + adde $acc6,$acc6,$a6 + $LD $a6,$SIZE_T*7($ap) + subi $rp,$ap,$SIZE_T*7 + addze $acc7,$a7 + $LDU $a7,$SIZE_T*8($ap) + #addze $carry,$zero # moved below + li $cnt,0 + b .Lsqr8x_mul + + # a[8]a[0] + # a[9]a[0] + # a[a]a[0] + # a[b]a[0] + # a[c]a[0] + # a[d]a[0] + # a[e]a[0] + # a[f]a[0] + # a[8]a[1] + # a[f]a[1]........................ + # a[8]a[2] + # a[f]a[2]........................ + # a[8]a[3] + # a[f]a[3]........................ + # a[8]a[4] + # a[f]a[4]........................ + # a[8]a[5] + # a[f]a[5]........................ + # a[8]a[6] + # a[f]a[6]........................ + # a[8]a[7] + # a[f]a[7]........................ +.align 5 +.Lsqr8x_mul: + $UMULL $t0,$a0,$n0 + addze $carry,$zero # carry bit, modulo-scheduled + $UMULL $t1,$a1,$n0 + addi $cnt,$cnt,$SIZE_T + $UMULL $t2,$a2,$n0 + andi. $cnt,$cnt,$SIZE_T*8-1 + $UMULL $t3,$a3,$n0 + addc $acc0,$acc0,$t0 + $UMULL $t0,$a4,$n0 + adde $acc1,$acc1,$t1 + $UMULL $t1,$a5,$n0 + adde $acc2,$acc2,$t2 + $UMULL $t2,$a6,$n0 + adde $acc3,$acc3,$t3 + $UMULL $t3,$a7,$n0 + adde $acc4,$acc4,$t0 + $UMULH $t0,$a0,$n0 + adde $acc5,$acc5,$t1 + $UMULH $t1,$a1,$n0 + adde $acc6,$acc6,$t2 + $UMULH $t2,$a2,$n0 + adde $acc7,$acc7,$t3 + $UMULH $t3,$a3,$n0 + addze $carry,$carry + $STU $acc0,$SIZE_T($tp) + addc $acc0,$acc1,$t0 + $UMULH $t0,$a4,$n0 + adde $acc1,$acc2,$t1 + $UMULH $t1,$a5,$n0 + adde $acc2,$acc3,$t2 + $UMULH $t2,$a6,$n0 + adde $acc3,$acc4,$t3 + $UMULH $t3,$a7,$n0 + $LDX $n0,$rp,$cnt + adde $acc4,$acc5,$t0 + adde $acc5,$acc6,$t1 + adde $acc6,$acc7,$t2 + adde $acc7,$carry,$t3 + #addze $carry,$zero # moved above + bne .Lsqr8x_mul + # note that carry flag is guaranteed + # to be zero at this point + $UCMP $ap,$ap_end # done yet? + beq .Lsqr8x_break + + $LD $a0,$SIZE_T*1($tp) + $LD $a1,$SIZE_T*2($tp) + $LD $a2,$SIZE_T*3($tp) + $LD $a3,$SIZE_T*4($tp) + $LD $a4,$SIZE_T*5($tp) + $LD $a5,$SIZE_T*6($tp) + $LD $a6,$SIZE_T*7($tp) + $LD $a7,$SIZE_T*8($tp) + addc $acc0,$acc0,$a0 + $LD $a0,$SIZE_T*1($ap) + adde $acc1,$acc1,$a1 + $LD $a1,$SIZE_T*2($ap) + adde $acc2,$acc2,$a2 + $LD $a2,$SIZE_T*3($ap) + adde $acc3,$acc3,$a3 + $LD $a3,$SIZE_T*4($ap) + adde $acc4,$acc4,$a4 + $LD $a4,$SIZE_T*5($ap) + adde $acc5,$acc5,$a5 + $LD $a5,$SIZE_T*6($ap) + adde $acc6,$acc6,$a6 + $LD $a6,$SIZE_T*7($ap) + adde $acc7,$acc7,$a7 + $LDU $a7,$SIZE_T*8($ap) + #addze $carry,$zero # moved above + b .Lsqr8x_mul + +.align 5 +.Lsqr8x_break: + $LD $a0,$SIZE_T*8($rp) + addi $ap,$rp,$SIZE_T*15 + $LD $a1,$SIZE_T*9($rp) + sub. $t0,$ap_end,$ap # is it last iteration? + $LD $a2,$SIZE_T*10($rp) + sub $t1,$tp,$t0 + $LD $a3,$SIZE_T*11($rp) + $LD $a4,$SIZE_T*12($rp) + $LD $a5,$SIZE_T*13($rp) + $LD $a6,$SIZE_T*14($rp) + $LD $a7,$SIZE_T*15($rp) + beq .Lsqr8x_outer_loop + + $ST $acc0,$SIZE_T*1($tp) + $LD $acc0,$SIZE_T*1($t1) + $ST $acc1,$SIZE_T*2($tp) + $LD $acc1,$SIZE_T*2($t1) + $ST $acc2,$SIZE_T*3($tp) + $LD $acc2,$SIZE_T*3($t1) + $ST $acc3,$SIZE_T*4($tp) + $LD $acc3,$SIZE_T*4($t1) + $ST $acc4,$SIZE_T*5($tp) + $LD $acc4,$SIZE_T*5($t1) + $ST $acc5,$SIZE_T*6($tp) + $LD $acc5,$SIZE_T*6($t1) + $ST $acc6,$SIZE_T*7($tp) + $LD $acc6,$SIZE_T*7($t1) + $ST $acc7,$SIZE_T*8($tp) + $LD $acc7,$SIZE_T*8($t1) + mr $tp,$t1 + b .Lsqr8x_outer_loop + +.align 5 +.Lsqr8x_outer_break: + #################################################################### + # Now multiply above result by 2 and add a[n-1]*a[n-1]|...|a[0]*a[0] + $LD $a1,$SIZE_T*1($t0) # recall that $t0 is &a[-1] + $LD $a3,$SIZE_T*2($t0) + $LD $a5,$SIZE_T*3($t0) + $LD $a7,$SIZE_T*4($t0) + addi $ap,$t0,$SIZE_T*4 + # "tp[x]" comments are for num==8 case + $LD $t1,$SIZE_T*13($sp) # =tp[1], t[0] is not interesting + $LD $t2,$SIZE_T*14($sp) + $LD $t3,$SIZE_T*15($sp) + $LD $t0,$SIZE_T*16($sp) + + $ST $acc0,$SIZE_T*1($tp) # tp[8]= + srwi $cnt,$num,`log($SIZE_T)/log(2)+2` + $ST $acc1,$SIZE_T*2($tp) + subi $cnt,$cnt,1 + $ST $acc2,$SIZE_T*3($tp) + $ST $acc3,$SIZE_T*4($tp) + $ST $acc4,$SIZE_T*5($tp) + $ST $acc5,$SIZE_T*6($tp) + $ST $acc6,$SIZE_T*7($tp) + #$ST $acc7,$SIZE_T*8($tp) # tp[15] is not interesting + addi $tp,$sp,$SIZE_T*11 # &tp[-1] + $UMULL $acc0,$a1,$a1 + $UMULH $a1,$a1,$a1 + add $acc1,$t1,$t1 # <<1 + $SHRI $t1,$t1,$BITS-1 + $UMULL $a2,$a3,$a3 + $UMULH $a3,$a3,$a3 + addc $acc1,$acc1,$a1 + add $acc2,$t2,$t2 + $SHRI $t2,$t2,$BITS-1 + add $acc3,$t3,$t3 + $SHRI $t3,$t3,$BITS-1 + or $acc2,$acc2,$t1 + + mtctr $cnt +.Lsqr4x_shift_n_add: + $UMULL $a4,$a5,$a5 + $UMULH $a5,$a5,$a5 + $LD $t1,$SIZE_T*6($tp) # =tp[5] + $LD $a1,$SIZE_T*1($ap) + adde $acc2,$acc2,$a2 + add $acc4,$t0,$t0 + $SHRI $t0,$t0,$BITS-1 + or $acc3,$acc3,$t2 + $LD $t2,$SIZE_T*7($tp) # =tp[6] + adde $acc3,$acc3,$a3 + $LD $a3,$SIZE_T*2($ap) + add $acc5,$t1,$t1 + $SHRI $t1,$t1,$BITS-1 + or $acc4,$acc4,$t3 + $LD $t3,$SIZE_T*8($tp) # =tp[7] + $UMULL $a6,$a7,$a7 + $UMULH $a7,$a7,$a7 + adde $acc4,$acc4,$a4 + add $acc6,$t2,$t2 + $SHRI $t2,$t2,$BITS-1 + or $acc5,$acc5,$t0 + $LD $t0,$SIZE_T*9($tp) # =tp[8] + adde $acc5,$acc5,$a5 + $LD $a5,$SIZE_T*3($ap) + add $acc7,$t3,$t3 + $SHRI $t3,$t3,$BITS-1 + or $acc6,$acc6,$t1 + $LD $t1,$SIZE_T*10($tp) # =tp[9] + $UMULL $a0,$a1,$a1 + $UMULH $a1,$a1,$a1 + adde $acc6,$acc6,$a6 + $ST $acc0,$SIZE_T*1($tp) # tp[0]= + add $acc0,$t0,$t0 + $SHRI $t0,$t0,$BITS-1 + or $acc7,$acc7,$t2 + $LD $t2,$SIZE_T*11($tp) # =tp[10] + adde $acc7,$acc7,$a7 + $LDU $a7,$SIZE_T*4($ap) + $ST $acc1,$SIZE_T*2($tp) # tp[1]= + add $acc1,$t1,$t1 + $SHRI $t1,$t1,$BITS-1 + or $acc0,$acc0,$t3 + $LD $t3,$SIZE_T*12($tp) # =tp[11] + $UMULL $a2,$a3,$a3 + $UMULH $a3,$a3,$a3 + adde $acc0,$acc0,$a0 + $ST $acc2,$SIZE_T*3($tp) # tp[2]= + add $acc2,$t2,$t2 + $SHRI $t2,$t2,$BITS-1 + or $acc1,$acc1,$t0 + $LD $t0,$SIZE_T*13($tp) # =tp[12] + adde $acc1,$acc1,$a1 + $ST $acc3,$SIZE_T*4($tp) # tp[3]= + $ST $acc4,$SIZE_T*5($tp) # tp[4]= + $ST $acc5,$SIZE_T*6($tp) # tp[5]= + $ST $acc6,$SIZE_T*7($tp) # tp[6]= + $STU $acc7,$SIZE_T*8($tp) # tp[7]= + add $acc3,$t3,$t3 + $SHRI $t3,$t3,$BITS-1 + or $acc2,$acc2,$t1 + bdnz .Lsqr4x_shift_n_add +___ +my ($np,$np_end)=($ap,$ap_end); +$code.=<<___; + $POP $np,$SIZE_T*7($sp) # pull &np[-1] and n0 + $POP $n0,$SIZE_T*8($sp) + + $UMULL $a4,$a5,$a5 + $UMULH $a5,$a5,$a5 + $ST $acc0,$SIZE_T*1($tp) # tp[8]= + $LD $acc0,$SIZE_T*12($sp) # =tp[0] + $LD $t1,$SIZE_T*6($tp) # =tp[13] + adde $acc2,$acc2,$a2 + add $acc4,$t0,$t0 + $SHRI $t0,$t0,$BITS-1 + or $acc3,$acc3,$t2 + $LD $t2,$SIZE_T*7($tp) # =tp[14] + adde $acc3,$acc3,$a3 + add $acc5,$t1,$t1 + $SHRI $t1,$t1,$BITS-1 + or $acc4,$acc4,$t3 + $UMULL $a6,$a7,$a7 + $UMULH $a7,$a7,$a7 + adde $acc4,$acc4,$a4 + add $acc6,$t2,$t2 + $SHRI $t2,$t2,$BITS-1 + or $acc5,$acc5,$t0 + $ST $acc1,$SIZE_T*2($tp) # tp[9]= + $LD $acc1,$SIZE_T*13($sp) # =tp[1] + adde $acc5,$acc5,$a5 + or $acc6,$acc6,$t1 + $LD $a0,$SIZE_T*1($np) + $LD $a1,$SIZE_T*2($np) + adde $acc6,$acc6,$a6 + $LD $a2,$SIZE_T*3($np) + $LD $a3,$SIZE_T*4($np) + adde $acc7,$a7,$t2 + $LD $a4,$SIZE_T*5($np) + $LD $a5,$SIZE_T*6($np) + + ################################################################ + # Reduce by 8 limbs per iteration + $UMULL $na0,$n0,$acc0 # t[0]*n0 + li $cnt,8 + $LD $a6,$SIZE_T*7($np) + add $np_end,$np,$num + $LDU $a7,$SIZE_T*8($np) + $ST $acc2,$SIZE_T*3($tp) # tp[10]= + $LD $acc2,$SIZE_T*14($sp) + $ST $acc3,$SIZE_T*4($tp) # tp[11]= + $LD $acc3,$SIZE_T*15($sp) + $ST $acc4,$SIZE_T*5($tp) # tp[12]= + $LD $acc4,$SIZE_T*16($sp) + $ST $acc5,$SIZE_T*6($tp) # tp[13]= + $LD $acc5,$SIZE_T*17($sp) + $ST $acc6,$SIZE_T*7($tp) # tp[14]= + $LD $acc6,$SIZE_T*18($sp) + $ST $acc7,$SIZE_T*8($tp) # tp[15]= + $LD $acc7,$SIZE_T*19($sp) + addi $tp,$sp,$SIZE_T*11 # &tp[-1] + mtctr $cnt + b .Lsqr8x_reduction + +.align 5 +.Lsqr8x_reduction: + # (*) $UMULL $t0,$a0,$na0 # lo(n[0-7])*lo(t[0]*n0) + $UMULL $t1,$a1,$na0 + $UMULL $t2,$a2,$na0 + $STU $na0,$SIZE_T($tp) # put aside t[0]*n0 for tail processing + $UMULL $t3,$a3,$na0 + # (*) addc $acc0,$acc0,$t0 + addic $acc0,$acc0,-1 # (*) + $UMULL $t0,$a4,$na0 + adde $acc0,$acc1,$t1 + $UMULL $t1,$a5,$na0 + adde $acc1,$acc2,$t2 + $UMULL $t2,$a6,$na0 + adde $acc2,$acc3,$t3 + $UMULL $t3,$a7,$na0 + adde $acc3,$acc4,$t0 + $UMULH $t0,$a0,$na0 # hi(n[0-7])*lo(t[0]*n0) + adde $acc4,$acc5,$t1 + $UMULH $t1,$a1,$na0 + adde $acc5,$acc6,$t2 + $UMULH $t2,$a2,$na0 + adde $acc6,$acc7,$t3 + $UMULH $t3,$a3,$na0 + addze $acc7,$zero + addc $acc0,$acc0,$t0 + $UMULH $t0,$a4,$na0 + adde $acc1,$acc1,$t1 + $UMULH $t1,$a5,$na0 + adde $acc2,$acc2,$t2 + $UMULH $t2,$a6,$na0 + adde $acc3,$acc3,$t3 + $UMULH $t3,$a7,$na0 + $UMULL $na0,$n0,$acc0 # next t[0]*n0 + adde $acc4,$acc4,$t0 + adde $acc5,$acc5,$t1 + adde $acc6,$acc6,$t2 + adde $acc7,$acc7,$t3 + bdnz .Lsqr8x_reduction + + $LD $t0,$SIZE_T*1($tp) + $LD $t1,$SIZE_T*2($tp) + $LD $t2,$SIZE_T*3($tp) + $LD $t3,$SIZE_T*4($tp) + subi $rp,$tp,$SIZE_T*7 + $UCMP $np_end,$np # done yet? + addc $acc0,$acc0,$t0 + $LD $t0,$SIZE_T*5($tp) + adde $acc1,$acc1,$t1 + $LD $t1,$SIZE_T*6($tp) + adde $acc2,$acc2,$t2 + $LD $t2,$SIZE_T*7($tp) + adde $acc3,$acc3,$t3 + $LD $t3,$SIZE_T*8($tp) + adde $acc4,$acc4,$t0 + adde $acc5,$acc5,$t1 + adde $acc6,$acc6,$t2 + adde $acc7,$acc7,$t3 + #addze $carry,$zero # moved below + beq .Lsqr8x8_post_condition + + $LD $n0,$SIZE_T*0($rp) + $LD $a0,$SIZE_T*1($np) + $LD $a1,$SIZE_T*2($np) + $LD $a2,$SIZE_T*3($np) + $LD $a3,$SIZE_T*4($np) + $LD $a4,$SIZE_T*5($np) + $LD $a5,$SIZE_T*6($np) + $LD $a6,$SIZE_T*7($np) + $LDU $a7,$SIZE_T*8($np) + li $cnt,0 + +.align 5 +.Lsqr8x_tail: + $UMULL $t0,$a0,$n0 + addze $carry,$zero # carry bit, modulo-scheduled + $UMULL $t1,$a1,$n0 + addi $cnt,$cnt,$SIZE_T + $UMULL $t2,$a2,$n0 + andi. $cnt,$cnt,$SIZE_T*8-1 + $UMULL $t3,$a3,$n0 + addc $acc0,$acc0,$t0 + $UMULL $t0,$a4,$n0 + adde $acc1,$acc1,$t1 + $UMULL $t1,$a5,$n0 + adde $acc2,$acc2,$t2 + $UMULL $t2,$a6,$n0 + adde $acc3,$acc3,$t3 + $UMULL $t3,$a7,$n0 + adde $acc4,$acc4,$t0 + $UMULH $t0,$a0,$n0 + adde $acc5,$acc5,$t1 + $UMULH $t1,$a1,$n0 + adde $acc6,$acc6,$t2 + $UMULH $t2,$a2,$n0 + adde $acc7,$acc7,$t3 + $UMULH $t3,$a3,$n0 + addze $carry,$carry + $STU $acc0,$SIZE_T($tp) + addc $acc0,$acc1,$t0 + $UMULH $t0,$a4,$n0 + adde $acc1,$acc2,$t1 + $UMULH $t1,$a5,$n0 + adde $acc2,$acc3,$t2 + $UMULH $t2,$a6,$n0 + adde $acc3,$acc4,$t3 + $UMULH $t3,$a7,$n0 + $LDX $n0,$rp,$cnt + adde $acc4,$acc5,$t0 + adde $acc5,$acc6,$t1 + adde $acc6,$acc7,$t2 + adde $acc7,$carry,$t3 + #addze $carry,$zero # moved above + bne .Lsqr8x_tail + # note that carry flag is guaranteed + # to be zero at this point + $LD $a0,$SIZE_T*1($tp) + $POP $carry,$SIZE_T*10($sp) # pull top-most carry in case we break + $UCMP $np_end,$np # done yet? + $LD $a1,$SIZE_T*2($tp) + sub $t2,$np_end,$num # rewinded np + $LD $a2,$SIZE_T*3($tp) + $LD $a3,$SIZE_T*4($tp) + $LD $a4,$SIZE_T*5($tp) + $LD $a5,$SIZE_T*6($tp) + $LD $a6,$SIZE_T*7($tp) + $LD $a7,$SIZE_T*8($tp) + beq .Lsqr8x_tail_break + + addc $acc0,$acc0,$a0 + $LD $a0,$SIZE_T*1($np) + adde $acc1,$acc1,$a1 + $LD $a1,$SIZE_T*2($np) + adde $acc2,$acc2,$a2 + $LD $a2,$SIZE_T*3($np) + adde $acc3,$acc3,$a3 + $LD $a3,$SIZE_T*4($np) + adde $acc4,$acc4,$a4 + $LD $a4,$SIZE_T*5($np) + adde $acc5,$acc5,$a5 + $LD $a5,$SIZE_T*6($np) + adde $acc6,$acc6,$a6 + $LD $a6,$SIZE_T*7($np) + adde $acc7,$acc7,$a7 + $LDU $a7,$SIZE_T*8($np) + #addze $carry,$zero # moved above + b .Lsqr8x_tail + +.align 5 +.Lsqr8x_tail_break: + $POP $n0,$SIZE_T*8($sp) # pull n0 + $POP $t3,$SIZE_T*9($sp) # &tp[2*num-1] + addi $cnt,$tp,$SIZE_T*8 # end of current t[num] window + + addic $carry,$carry,-1 # "move" top-most carry to carry bit + adde $t0,$acc0,$a0 + $LD $acc0,$SIZE_T*8($rp) + $LD $a0,$SIZE_T*1($t2) # recall that $t2 is &n[-1] + adde $t1,$acc1,$a1 + $LD $acc1,$SIZE_T*9($rp) + $LD $a1,$SIZE_T*2($t2) + adde $acc2,$acc2,$a2 + $LD $a2,$SIZE_T*3($t2) + adde $acc3,$acc3,$a3 + $LD $a3,$SIZE_T*4($t2) + adde $acc4,$acc4,$a4 + $LD $a4,$SIZE_T*5($t2) + adde $acc5,$acc5,$a5 + $LD $a5,$SIZE_T*6($t2) + adde $acc6,$acc6,$a6 + $LD $a6,$SIZE_T*7($t2) + adde $acc7,$acc7,$a7 + $LD $a7,$SIZE_T*8($t2) + addi $np,$t2,$SIZE_T*8 + addze $t2,$zero # top-most carry + $UMULL $na0,$n0,$acc0 + $ST $t0,$SIZE_T*1($tp) + $UCMP $cnt,$t3 # did we hit the bottom? + $ST $t1,$SIZE_T*2($tp) + li $cnt,8 + $ST $acc2,$SIZE_T*3($tp) + $LD $acc2,$SIZE_T*10($rp) + $ST $acc3,$SIZE_T*4($tp) + $LD $acc3,$SIZE_T*11($rp) + $ST $acc4,$SIZE_T*5($tp) + $LD $acc4,$SIZE_T*12($rp) + $ST $acc5,$SIZE_T*6($tp) + $LD $acc5,$SIZE_T*13($rp) + $ST $acc6,$SIZE_T*7($tp) + $LD $acc6,$SIZE_T*14($rp) + $ST $acc7,$SIZE_T*8($tp) + $LD $acc7,$SIZE_T*15($rp) + $PUSH $t2,$SIZE_T*10($sp) # off-load top-most carry + addi $tp,$rp,$SIZE_T*7 # slide the window + mtctr $cnt + bne .Lsqr8x_reduction + + ################################################################ + # Final step. We see if result is larger than modulus, and + # if it is, subtract the modulus. But comparison implies + # subtraction. So we subtract modulus, see if it borrowed, + # and conditionally copy original value. + $POP $rp,$SIZE_T*6($sp) # pull &rp[-1] + srwi $cnt,$num,`log($SIZE_T)/log(2)+3` + mr $n0,$tp # put tp aside + addi $tp,$tp,$SIZE_T*8 + subi $cnt,$cnt,1 + subfc $t0,$a0,$acc0 + subfe $t1,$a1,$acc1 + mr $carry,$t2 + mr $ap_end,$rp # $rp copy + + mtctr $cnt + b .Lsqr8x_sub + +.align 5 +.Lsqr8x_sub: + $LD $a0,$SIZE_T*1($np) + $LD $acc0,$SIZE_T*1($tp) + $LD $a1,$SIZE_T*2($np) + $LD $acc1,$SIZE_T*2($tp) + subfe $t2,$a2,$acc2 + $LD $a2,$SIZE_T*3($np) + $LD $acc2,$SIZE_T*3($tp) + subfe $t3,$a3,$acc3 + $LD $a3,$SIZE_T*4($np) + $LD $acc3,$SIZE_T*4($tp) + $ST $t0,$SIZE_T*1($rp) + subfe $t0,$a4,$acc4 + $LD $a4,$SIZE_T*5($np) + $LD $acc4,$SIZE_T*5($tp) + $ST $t1,$SIZE_T*2($rp) + subfe $t1,$a5,$acc5 + $LD $a5,$SIZE_T*6($np) + $LD $acc5,$SIZE_T*6($tp) + $ST $t2,$SIZE_T*3($rp) + subfe $t2,$a6,$acc6 + $LD $a6,$SIZE_T*7($np) + $LD $acc6,$SIZE_T*7($tp) + $ST $t3,$SIZE_T*4($rp) + subfe $t3,$a7,$acc7 + $LDU $a7,$SIZE_T*8($np) + $LDU $acc7,$SIZE_T*8($tp) + $ST $t0,$SIZE_T*5($rp) + subfe $t0,$a0,$acc0 + $ST $t1,$SIZE_T*6($rp) + subfe $t1,$a1,$acc1 + $ST $t2,$SIZE_T*7($rp) + $STU $t3,$SIZE_T*8($rp) + bdnz .Lsqr8x_sub + + srwi $cnt,$num,`log($SIZE_T)/log(2)+2` + $LD $a0,$SIZE_T*1($ap_end) # original $rp + $LD $acc0,$SIZE_T*1($n0) # original $tp + subi $cnt,$cnt,1 + $LD $a1,$SIZE_T*2($ap_end) + $LD $acc1,$SIZE_T*2($n0) + subfe $t2,$a2,$acc2 + $LD $a2,$SIZE_T*3($ap_end) + $LD $acc2,$SIZE_T*3($n0) + subfe $t3,$a3,$acc3 + $LD $a3,$SIZE_T*4($ap_end) + $LDU $acc3,$SIZE_T*4($n0) + $ST $t0,$SIZE_T*1($rp) + subfe $t0,$a4,$acc4 + $ST $t1,$SIZE_T*2($rp) + subfe $t1,$a5,$acc5 + $ST $t2,$SIZE_T*3($rp) + subfe $t2,$a6,$acc6 + $ST $t3,$SIZE_T*4($rp) + subfe $t3,$a7,$acc7 + $ST $t0,$SIZE_T*5($rp) + subfe $carry,$zero,$carry # did it borrow? + $ST $t1,$SIZE_T*6($rp) + $ST $t2,$SIZE_T*7($rp) + $ST $t3,$SIZE_T*8($rp) + + addi $tp,$sp,$SIZE_T*11 + mtctr $cnt + +.Lsqr4x_cond_copy: + andc $a0,$a0,$carry + $ST $zero,-$SIZE_T*3($n0) # wipe stack clean + and $acc0,$acc0,$carry + $ST $zero,-$SIZE_T*2($n0) + andc $a1,$a1,$carry + $ST $zero,-$SIZE_T*1($n0) + and $acc1,$acc1,$carry + $ST $zero,-$SIZE_T*0($n0) + andc $a2,$a2,$carry + $ST $zero,$SIZE_T*1($tp) + and $acc2,$acc2,$carry + $ST $zero,$SIZE_T*2($tp) + andc $a3,$a3,$carry + $ST $zero,$SIZE_T*3($tp) + and $acc3,$acc3,$carry + $STU $zero,$SIZE_T*4($tp) + or $t0,$a0,$acc0 + $LD $a0,$SIZE_T*5($ap_end) + $LD $acc0,$SIZE_T*1($n0) + or $t1,$a1,$acc1 + $LD $a1,$SIZE_T*6($ap_end) + $LD $acc1,$SIZE_T*2($n0) + or $t2,$a2,$acc2 + $LD $a2,$SIZE_T*7($ap_end) + $LD $acc2,$SIZE_T*3($n0) + or $t3,$a3,$acc3 + $LD $a3,$SIZE_T*8($ap_end) + $LDU $acc3,$SIZE_T*4($n0) + $ST $t0,$SIZE_T*1($ap_end) + $ST $t1,$SIZE_T*2($ap_end) + $ST $t2,$SIZE_T*3($ap_end) + $STU $t3,$SIZE_T*4($ap_end) + bdnz .Lsqr4x_cond_copy + + $POP $ap,0($sp) # pull saved sp + andc $a0,$a0,$carry + and $acc0,$acc0,$carry + andc $a1,$a1,$carry + and $acc1,$acc1,$carry + andc $a2,$a2,$carry + and $acc2,$acc2,$carry + andc $a3,$a3,$carry + and $acc3,$acc3,$carry + or $t0,$a0,$acc0 + or $t1,$a1,$acc1 + or $t2,$a2,$acc2 + or $t3,$a3,$acc3 + $ST $t0,$SIZE_T*1($ap_end) + $ST $t1,$SIZE_T*2($ap_end) + $ST $t2,$SIZE_T*3($ap_end) + $ST $t3,$SIZE_T*4($ap_end) + + b .Lsqr8x_done + +.align 5 +.Lsqr8x8_post_condition: + $POP $rp,$SIZE_T*6($sp) # pull rp + $POP $ap,0($sp) # pull saved sp + addze $carry,$zero + + # $acc0-7,$carry hold result, $a0-7 hold modulus + subfc $acc0,$a0,$acc0 + subfe $acc1,$a1,$acc1 + $ST $zero,$SIZE_T*12($sp) # wipe stack clean + $ST $zero,$SIZE_T*13($sp) + subfe $acc2,$a2,$acc2 + $ST $zero,$SIZE_T*14($sp) + $ST $zero,$SIZE_T*15($sp) + subfe $acc3,$a3,$acc3 + $ST $zero,$SIZE_T*16($sp) + $ST $zero,$SIZE_T*17($sp) + subfe $acc4,$a4,$acc4 + $ST $zero,$SIZE_T*18($sp) + $ST $zero,$SIZE_T*19($sp) + subfe $acc5,$a5,$acc5 + $ST $zero,$SIZE_T*20($sp) + $ST $zero,$SIZE_T*21($sp) + subfe $acc6,$a6,$acc6 + $ST $zero,$SIZE_T*22($sp) + $ST $zero,$SIZE_T*23($sp) + subfe $acc7,$a7,$acc7 + $ST $zero,$SIZE_T*24($sp) + $ST $zero,$SIZE_T*25($sp) + subfe $carry,$zero,$carry # did it borrow? + $ST $zero,$SIZE_T*26($sp) + $ST $zero,$SIZE_T*27($sp) + + and $a0,$a0,$carry + and $a1,$a1,$carry + addc $acc0,$acc0,$a0 # add modulus back if borrowed + and $a2,$a2,$carry + adde $acc1,$acc1,$a1 + and $a3,$a3,$carry + adde $acc2,$acc2,$a2 + and $a4,$a4,$carry + adde $acc3,$acc3,$a3 + and $a5,$a5,$carry + adde $acc4,$acc4,$a4 + and $a6,$a6,$carry + adde $acc5,$acc5,$a5 + and $a7,$a7,$carry + adde $acc6,$acc6,$a6 + adde $acc7,$acc7,$a7 + $ST $acc0,$SIZE_T*1($rp) + $ST $acc1,$SIZE_T*2($rp) + $ST $acc2,$SIZE_T*3($rp) + $ST $acc3,$SIZE_T*4($rp) + $ST $acc4,$SIZE_T*5($rp) + $ST $acc5,$SIZE_T*6($rp) + $ST $acc6,$SIZE_T*7($rp) + $ST $acc7,$SIZE_T*8($rp) + +.Lsqr8x_done: + $PUSH $zero,$SIZE_T*8($sp) + $PUSH $zero,$SIZE_T*10($sp) + + $POP r14,-$SIZE_T*18($ap) + li r3,1 # signal "done" + $POP r15,-$SIZE_T*17($ap) + $POP r16,-$SIZE_T*16($ap) + $POP r17,-$SIZE_T*15($ap) + $POP r18,-$SIZE_T*14($ap) + $POP r19,-$SIZE_T*13($ap) + $POP r20,-$SIZE_T*12($ap) + $POP r21,-$SIZE_T*11($ap) + $POP r22,-$SIZE_T*10($ap) + $POP r23,-$SIZE_T*9($ap) + $POP r24,-$SIZE_T*8($ap) + $POP r25,-$SIZE_T*7($ap) + $POP r26,-$SIZE_T*6($ap) + $POP r27,-$SIZE_T*5($ap) + $POP r28,-$SIZE_T*4($ap) + $POP r29,-$SIZE_T*3($ap) + $POP r30,-$SIZE_T*2($ap) + $POP r31,-$SIZE_T*1($ap) + mr $sp,$ap + blr + .long 0 + .byte 0,12,4,0x20,0x80,18,6,0 + .long 0 +.size __bn_sqr8x_mont,.-__bn_sqr8x_mont +___ +} +$code.=<<___; .asciz "Montgomery Multiplication for PPC, CRYPTOGAMS by " ___ diff --git a/crypto/bn/asm/ppc.pl b/crypto/bn/asm/ppc.pl index 4ea534a1..39349ae8 100644 --- a/crypto/bn/asm/ppc.pl +++ b/crypto/bn/asm/ppc.pl @@ -38,7 +38,7 @@ #rsa 2048 bits 0.3036s 0.0085s 3.3 117.1 #rsa 4096 bits 2.0040s 0.0299s 0.5 33.4 #dsa 512 bits 0.0087s 0.0106s 114.3 94.5 -#dsa 1024 bits 0.0256s 0.0313s 39.0 32.0 +#dsa 1024 bits 0.0256s 0.0313s 39.0 32.0 # # Same bechmark with this assembler code: # @@ -74,7 +74,7 @@ #rsa 4096 bits 0.3700s 0.0058s 2.7 171.0 #dsa 512 bits 0.0016s 0.0020s 610.7 507.1 #dsa 1024 bits 0.0047s 0.0058s 212.5 173.2 -# +# # Again, performance increases by at about 75% # # Mac OS X, Apple G5 1.8GHz (Note this is 32 bit code) @@ -101,10 +101,7 @@ #dsa 2048 bits 0.0061s 0.0075s 163.5 132.8 # # Performance increase of ~60% -# -# If you have comments or suggestions to improve code send -# me a note at schari@us.ibm.com -# +# Based on submission from Suresh N. Chari of IBM $flavour = shift; @@ -125,7 +122,7 @@ if ($flavour =~ /32/) { $CNTLZ= "cntlzw"; # count leading zeros $SHL= "slw"; # shift left $SHR= "srw"; # unsigned shift right - $SHRI= "srwi"; # unsigned shift right by immediate + $SHRI= "srwi"; # unsigned shift right by immediate $SHLI= "slwi"; # shift left by immediate $CLRU= "clrlwi"; # clear upper bits $INSR= "insrwi"; # insert right @@ -149,10 +146,10 @@ if ($flavour =~ /32/) { $CNTLZ= "cntlzd"; # count leading zeros $SHL= "sld"; # shift left $SHR= "srd"; # unsigned shift right - $SHRI= "srdi"; # unsigned shift right by immediate + $SHRI= "srdi"; # unsigned shift right by immediate $SHLI= "sldi"; # shift left by immediate $CLRU= "clrldi"; # clear upper bits - $INSR= "insrdi"; # insert right + $INSR= "insrdi"; # insert right $ROTL= "rotldi"; # rotate left by immediate $TR= "td"; # conditional trap } else { die "nonsense $flavour"; } @@ -189,7 +186,7 @@ $data=<=d? blt Lppcasm_div3 #goto Lppcasm_div3 if not - subf r3,r5,r3 #h-=d ; + subf r3,r5,r3 #h-=d ; Lppcasm_div3: #r7 = BN_BITS2-i. so r7=i cmpi 0,0,r7,0 # is (i == 0)? beq Lppcasm_div4 @@ -1668,7 +1665,7 @@ Lppcasm_div4: # as it saves registers. li r6,2 #r6=2 mtctr r6 #counter will be in count. -Lppcasm_divouterloop: +Lppcasm_divouterloop: $SHRI r8,r3,`$BITS/2` #r8 = (h>>BN_BITS4) $SHRI r11,r4,`$BITS/2` #r11= (l&BN_MASK2h)>>BN_BITS4 # compute here for innerloop. @@ -1676,7 +1673,7 @@ Lppcasm_divouterloop: bne Lppcasm_div5 # goto Lppcasm_div5 if not li r8,-1 - $CLRU r8,r8,`$BITS/2` #q = BN_MASK2l + $CLRU r8,r8,`$BITS/2` #q = BN_MASK2l b Lppcasm_div6 Lppcasm_div5: $UDIV r8,r3,r9 #q = h/dh @@ -1684,7 +1681,7 @@ Lppcasm_div6: $UMULL r12,r9,r8 #th = q*dh $CLRU r10,r5,`$BITS/2` #r10=dl $UMULL r6,r8,r10 #tl = q*dl - + Lppcasm_divinnerloop: subf r10,r12,r3 #t = h -th $SHRI r7,r10,`$BITS/2` #r7= (t &BN_MASK2H), sort of... @@ -1761,7 +1758,7 @@ Lppcasm_div9: addi r4,r4,-$BNSZ addi r3,r3,-$BNSZ mtctr r5 -Lppcasm_sqr_mainloop: +Lppcasm_sqr_mainloop: #sqr(r[0],r[1],a[0]); $LDU r6,$BNSZ(r4) $UMULL r7,r6,r6 @@ -1769,7 +1766,7 @@ Lppcasm_sqr_mainloop: $STU r7,$BNSZ(r3) $STU r8,$BNSZ(r3) bdnz Lppcasm_sqr_mainloop -Lppcasm_sqr_adios: +Lppcasm_sqr_adios: blr .long 0 .byte 0,12,0x14,0,0,0,3,0 @@ -1783,7 +1780,7 @@ Lppcasm_sqr_adios: # done in the build # -.align 4 +.align 4 .bn_mul_words: # # BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) @@ -1797,7 +1794,7 @@ Lppcasm_sqr_adios: rlwinm. r7,r5,30,2,31 # num >> 2 beq Lppcasm_mw_REM mtctr r7 -Lppcasm_mw_LOOP: +Lppcasm_mw_LOOP: #mul(rp[0],ap[0],w,c1); $LD r8,`0*$BNSZ`(r4) $UMULL r9,r6,r8 @@ -1809,7 +1806,7 @@ Lppcasm_mw_LOOP: #using adde. $ST r9,`0*$BNSZ`(r3) #mul(rp[1],ap[1],w,c1); - $LD r8,`1*$BNSZ`(r4) + $LD r8,`1*$BNSZ`(r4) $UMULL r11,r6,r8 $UMULH r12,r6,r8 adde r11,r11,r10 @@ -1830,7 +1827,7 @@ Lppcasm_mw_LOOP: addze r12,r12 #this spin we collect carry into #r12 $ST r11,`3*$BNSZ`(r3) - + addi r3,r3,`4*$BNSZ` addi r4,r4,`4*$BNSZ` bdnz Lppcasm_mw_LOOP @@ -1846,25 +1843,25 @@ Lppcasm_mw_REM: addze r10,r10 $ST r9,`0*$BNSZ`(r3) addi r12,r10,0 - + addi r5,r5,-1 cmpli 0,0,r5,0 beq Lppcasm_mw_OVER - + #mul(rp[1],ap[1],w,c1); - $LD r8,`1*$BNSZ`(r4) + $LD r8,`1*$BNSZ`(r4) $UMULL r9,r6,r8 $UMULH r10,r6,r8 addc r9,r9,r12 addze r10,r10 $ST r9,`1*$BNSZ`(r3) addi r12,r10,0 - + addi r5,r5,-1 cmpli 0,0,r5,0 beq Lppcasm_mw_OVER - + #mul_add(rp[2],ap[2],w,c1); $LD r8,`2*$BNSZ`(r4) $UMULL r9,r6,r8 @@ -1873,14 +1870,14 @@ Lppcasm_mw_REM: addze r10,r10 $ST r9,`2*$BNSZ`(r3) addi r12,r10,0 - -Lppcasm_mw_OVER: + +Lppcasm_mw_OVER: addi r3,r12,0 blr .long 0 .byte 0,12,0x14,0,0,0,4,0 .long 0 -.size bn_mul_words,.-bn_mul_words +.size .bn_mul_words,.-.bn_mul_words # # NOTE: The following label name should be changed to @@ -1902,11 +1899,11 @@ Lppcasm_mw_OVER: # empirical evidence suggests that unrolled version performs best!! # xor r0,r0,r0 #r0 = 0 - xor r12,r12,r12 #r12 = 0 . used for carry + xor r12,r12,r12 #r12 = 0 . used for carry rlwinm. r7,r5,30,2,31 # num >> 2 beq Lppcasm_maw_leftover # if (num < 4) go LPPCASM_maw_leftover mtctr r7 -Lppcasm_maw_mainloop: +Lppcasm_maw_mainloop: #mul_add(rp[0],ap[0],w,c1); $LD r8,`0*$BNSZ`(r4) $LD r11,`0*$BNSZ`(r3) @@ -1922,9 +1919,9 @@ Lppcasm_maw_mainloop: #by multiply and will be collected #in the next spin $ST r9,`0*$BNSZ`(r3) - + #mul_add(rp[1],ap[1],w,c1); - $LD r8,`1*$BNSZ`(r4) + $LD r8,`1*$BNSZ`(r4) $LD r9,`1*$BNSZ`(r3) $UMULL r11,r6,r8 $UMULH r12,r6,r8 @@ -1933,7 +1930,7 @@ Lppcasm_maw_mainloop: addc r11,r11,r9 #addze r12,r12 $ST r11,`1*$BNSZ`(r3) - + #mul_add(rp[2],ap[2],w,c1); $LD r8,`2*$BNSZ`(r4) $UMULL r9,r6,r8 @@ -1944,7 +1941,7 @@ Lppcasm_maw_mainloop: addc r9,r9,r11 #addze r10,r10 $ST r9,`2*$BNSZ`(r3) - + #mul_add(rp[3],ap[3],w,c1); $LD r8,`3*$BNSZ`(r4) $UMULL r11,r6,r8 @@ -1958,7 +1955,7 @@ Lppcasm_maw_mainloop: addi r3,r3,`4*$BNSZ` addi r4,r4,`4*$BNSZ` bdnz Lppcasm_maw_mainloop - + Lppcasm_maw_leftover: andi. r5,r5,0x3 beq Lppcasm_maw_adios @@ -1975,10 +1972,10 @@ Lppcasm_maw_leftover: addc r9,r9,r12 addze r12,r10 $ST r9,0(r3) - + bdz Lppcasm_maw_adios #mul_add(rp[1],ap[1],w,c1); - $LDU r8,$BNSZ(r4) + $LDU r8,$BNSZ(r4) $UMULL r9,r6,r8 $UMULH r10,r6,r8 $LDU r11,$BNSZ(r3) @@ -1987,7 +1984,7 @@ Lppcasm_maw_leftover: addc r9,r9,r12 addze r12,r10 $ST r9,0(r3) - + bdz Lppcasm_maw_adios #mul_add(rp[2],ap[2],w,c1); $LDU r8,$BNSZ(r4) @@ -1999,8 +1996,8 @@ Lppcasm_maw_leftover: addc r9,r9,r12 addze r12,r10 $ST r9,0(r3) - -Lppcasm_maw_adios: + +Lppcasm_maw_adios: addi r3,r12,0 blr .long 0 diff --git a/crypto/bn/asm/ppc64-mont.pl b/crypto/bn/asm/ppc64-mont.pl index 1e19c958..0b2bb39f 100644 --- a/crypto/bn/asm/ppc64-mont.pl +++ b/crypto/bn/asm/ppc64-mont.pl @@ -35,7 +35,7 @@ # key lengths. As it's obviously inappropriate as "best all-round" # alternative, it has to be complemented with run-time CPU family # detection. Oh! It should also be noted that unlike other PowerPC -# implementation IALU ppc-mont.pl module performs *suboptimaly* on +# implementation IALU ppc-mont.pl module performs *suboptimally* on # >=1024-bit key lengths on Power 6. It should also be noted that # *everything* said so far applies to 64-bit builds! As far as 32-bit # application executed on 64-bit CPU goes, this module is likely to @@ -1353,7 +1353,7 @@ $code.=<<___; std $t3,-16($tp) ; tp[j-1] std $t5,-8($tp) ; tp[j] - add $carry,$carry,$ovf ; comsume upmost overflow + add $carry,$carry,$ovf ; consume upmost overflow add $t6,$t6,$carry ; can not overflow srdi $carry,$t6,16 add $t7,$t7,$carry diff --git a/crypto/bn/asm/rsaz-avx2.pl b/crypto/bn/asm/rsaz-avx2.pl index 46d746b7..8c56a914 100755 --- a/crypto/bn/asm/rsaz-avx2.pl +++ b/crypto/bn/asm/rsaz-avx2.pl @@ -1,68 +1,30 @@ #! /usr/bin/env perl # Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright (c) 2012, Intel Corporation. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html - - -############################################################################## -# # -# Copyright (c) 2012, Intel Corporation # -# # -# All rights reserved. # -# # -# Redistribution and use in source and binary forms, with or without # -# modification, are permitted provided that the following conditions are # -# met: # -# # -# * Redistributions of source code must retain the above copyright # -# notice, this list of conditions and the following disclaimer. # -# # -# * Redistributions in binary form must reproduce the above copyright # -# notice, this list of conditions and the following disclaimer in the # -# documentation and/or other materials provided with the # -# distribution. # -# # -# * Neither the name of the Intel Corporation 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 INTEL CORPORATION ""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 INTEL CORPORATION 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. # -# # -############################################################################## -# Developers and authors: # -# Shay Gueron (1, 2), and Vlad Krasnov (1) # -# (1) Intel Corporation, Israel Development Center, Haifa, Israel # -# (2) University of Haifa, Israel # -############################################################################## -# Reference: # -# [1] S. Gueron, V. Krasnov: "Software Implementation of Modular # -# Exponentiation, Using Advanced Vector Instructions Architectures", # -# F. Ozbudak and F. Rodriguez-Henriquez (Eds.): WAIFI 2012, LNCS 7369, # -# pp. 119?135, 2012. Springer-Verlag Berlin Heidelberg 2012 # -# [2] S. Gueron: "Efficient Software Implementations of Modular # -# Exponentiation", Journal of Cryptographic Engineering 2:31-43 (2012). # -# [3] S. Gueron, V. Krasnov: "Speeding up Big-numbers Squaring",IEEE # -# Proceedings of 9th International Conference on Information Technology: # -# New Generations (ITNG 2012), pp.821-823 (2012) # -# [4] S. Gueron, V. Krasnov: "[PATCH] Efficient and side channel analysis # -# resistant 1024-bit modular exponentiation, for optimizing RSA2048 # -# on AVX2 capable x86_64 platforms", # -# http://rt.openssl.org/Ticket/Display.html?id=2850&user=guest&pass=guest# -############################################################################## +# +# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +# (1) Intel Corporation, Israel Development Center, Haifa, Israel +# (2) University of Haifa, Israel +# +# References: +# [1] S. Gueron, V. Krasnov: "Software Implementation of Modular +# Exponentiation, Using Advanced Vector Instructions Architectures", +# F. Ozbudak and F. Rodriguez-Henriquez (Eds.): WAIFI 2012, LNCS 7369, +# pp. 119?135, 2012. Springer-Verlag Berlin Heidelberg 2012 +# [2] S. Gueron: "Efficient Software Implementations of Modular +# Exponentiation", Journal of Cryptographic Engineering 2:31-43 (2012). +# [3] S. Gueron, V. Krasnov: "Speeding up Big-numbers Squaring",IEEE +# Proceedings of 9th International Conference on Information Technology: +# New Generations (ITNG 2012), pp.821-823 (2012) +# [4] S. Gueron, V. Krasnov: "[PATCH] Efficient and side channel analysis +# resistant 1024-bit modular exponentiation, for optimizing RSA2048 +# on AVX2 capable x86_64 platforms", +# http://rt.openssl.org/Ticket/Display.html?id=2850&user=guest&pass=guest # # +13% improvement over original submission by # @@ -168,13 +130,21 @@ $code.=<<___; .type rsaz_1024_sqr_avx2,\@function,5 .align 64 rsaz_1024_sqr_avx2: # 702 cycles, 14% faster than rsaz_1024_mul_avx2 +.cfi_startproc lea (%rsp), %rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 vzeroupper ___ $code.=<<___ if ($win64); @@ -193,6 +163,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rax,%rbp +.cfi_def_cfa_register %rbp mov %rdx, $np # reassigned argument sub \$$FrameSize, %rsp mov $np, $tmp @@ -382,7 +353,7 @@ $code.=<<___; vpaddq $TEMP1, $ACC1, $ACC1 vpmuludq 32*7-128($aap), $B2, $ACC2 vpbroadcastq 32*5-128($tpa), $B2 - vpaddq 32*11-448($tp1), $ACC2, $ACC2 + vpaddq 32*11-448($tp1), $ACC2, $ACC2 vmovdqu $ACC6, 32*6-192($tp0) vmovdqu $ACC7, 32*7-192($tp0) @@ -441,7 +412,7 @@ $code.=<<___; vmovdqu $ACC7, 32*16-448($tp1) lea 8($tp1), $tp1 - dec $i + dec $i jnz .LOOP_SQR_1024 ___ $ZERO = $ACC9; @@ -786,7 +757,7 @@ $code.=<<___; vpblendd \$3, $TEMP4, $TEMP5, $TEMP4 vpaddq $TEMP3, $ACC7, $ACC7 vpaddq $TEMP4, $ACC8, $ACC8 - + vpsrlq \$29, $ACC4, $TEMP1 vpand $AND_MASK, $ACC4, $ACC4 vpsrlq \$29, $ACC5, $TEMP2 @@ -825,8 +796,10 @@ $code.=<<___; vzeroall mov %rbp, %rax +.cfi_def_cfa_register %rax ___ $code.=<<___ if ($win64); +.Lsqr_1024_in_tail: movaps -0xd8(%rax),%xmm6 movaps -0xc8(%rax),%xmm7 movaps -0xb8(%rax),%xmm8 @@ -840,14 +813,22 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lsqr_1024_epilogue: ret +.cfi_endproc .size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2 ___ } @@ -900,13 +881,21 @@ $code.=<<___; .type rsaz_1024_mul_avx2,\@function,5 .align 64 rsaz_1024_mul_avx2: +.cfi_startproc lea (%rsp), %rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); vzeroupper @@ -925,6 +914,7 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %rax,%rbp +.cfi_def_cfa_register %rbp vzeroall mov %rdx, $bp # reassigned argument sub \$64,%rsp @@ -1450,15 +1440,17 @@ $code.=<<___; vpaddq $TEMP4, $ACC8, $ACC8 vmovdqu $ACC4, 128-128($rp) - vmovdqu $ACC5, 160-128($rp) + vmovdqu $ACC5, 160-128($rp) vmovdqu $ACC6, 192-128($rp) vmovdqu $ACC7, 224-128($rp) vmovdqu $ACC8, 256-128($rp) vzeroupper mov %rbp, %rax +.cfi_def_cfa_register %rax ___ $code.=<<___ if ($win64); +.Lmul_1024_in_tail: movaps -0xd8(%rax),%xmm6 movaps -0xc8(%rax),%xmm7 movaps -0xb8(%rax),%xmm8 @@ -1472,14 +1464,22 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lmul_1024_epilogue: ret +.cfi_endproc .size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2 ___ } @@ -1598,8 +1598,10 @@ rsaz_1024_scatter5_avx2: .type rsaz_1024_gather5_avx2,\@abi-omnipotent .align 32 rsaz_1024_gather5_avx2: +.cfi_startproc vzeroupper mov %rsp,%r11 +.cfi_def_cfa_register %r11 ___ $code.=<<___ if ($win64); lea -0x88(%rsp),%rax @@ -1737,11 +1739,13 @@ $code.=<<___ if ($win64); movaps -0x38(%r11),%xmm13 movaps -0x28(%r11),%xmm14 movaps -0x18(%r11),%xmm15 -.LSEH_end_rsaz_1024_gather5: ___ $code.=<<___; lea (%r11),%rsp +.cfi_def_cfa_register %rsp ret +.cfi_endproc +.LSEH_end_rsaz_1024_gather5: .size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2 ___ } @@ -1814,14 +1818,17 @@ rsaz_se_handler: cmp %r10,%rbx # context->RipRsp - mov 4(%r11),%r10d # HandlerData[1] lea (%rsi,%r10),%r10 # epilogue label cmp %r10,%rbx # context->Rip>=epilogue label jae .Lcommon_seh_tail - mov 160($context),%rax # pull context->Rbp + mov 160($context),%rbp # pull context->Rbp + + mov 8(%r11),%r10d # HandlerData[2] + lea (%rsi,%r10),%r10 # "in tail" label + cmp %r10,%rbx # context->Rip>="in tail" label + cmovc %rbp,%rax mov -48(%rax),%r15 mov -40(%rax),%r14 @@ -1899,11 +1906,13 @@ rsaz_se_handler: .LSEH_info_rsaz_1024_sqr_avx2: .byte 9,0,0,0 .rva rsaz_se_handler - .rva .Lsqr_1024_body,.Lsqr_1024_epilogue + .rva .Lsqr_1024_body,.Lsqr_1024_epilogue,.Lsqr_1024_in_tail + .long 0 .LSEH_info_rsaz_1024_mul_avx2: .byte 9,0,0,0 .rva rsaz_se_handler - .rva .Lmul_1024_body,.Lmul_1024_epilogue + .rva .Lmul_1024_body,.Lmul_1024_epilogue,.Lmul_1024_in_tail + .long 0 .LSEH_info_rsaz_1024_gather5: .byte 0x01,0x36,0x17,0x0b .byte 0x36,0xf8,0x09,0x00 # vmovaps 0x90(rsp),xmm15 diff --git a/crypto/bn/asm/rsaz-x86_64.pl b/crypto/bn/asm/rsaz-x86_64.pl index 6f3b664f..b1797b64 100755 --- a/crypto/bn/asm/rsaz-x86_64.pl +++ b/crypto/bn/asm/rsaz-x86_64.pl @@ -1,68 +1,29 @@ #! /usr/bin/env perl # Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright (c) 2012, Intel Corporation. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html - - -############################################################################## -# # -# Copyright (c) 2012, Intel Corporation # -# # -# All rights reserved. # -# # -# Redistribution and use in source and binary forms, with or without # -# modification, are permitted provided that the following conditions are # -# met: # -# # -# * Redistributions of source code must retain the above copyright # -# notice, this list of conditions and the following disclaimer. # -# # -# * Redistributions in binary form must reproduce the above copyright # -# notice, this list of conditions and the following disclaimer in the # -# documentation and/or other materials provided with the # -# distribution. # -# # -# * Neither the name of the Intel Corporation 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 INTEL CORPORATION ""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 INTEL CORPORATION 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. # -# # -############################################################################## -# Developers and authors: # -# Shay Gueron (1, 2), and Vlad Krasnov (1) # -# (1) Intel Architecture Group, Microprocessor and Chipset Development, # -# Israel Development Center, Haifa, Israel # -# (2) University of Haifa # -############################################################################## -# Reference: # -# [1] S. Gueron, "Efficient Software Implementations of Modular # -# Exponentiation", http://eprint.iacr.org/2011/239 # -# [2] S. Gueron, V. Krasnov. "Speeding up Big-Numbers Squaring". # -# IEEE Proceedings of 9th International Conference on Information # -# Technology: New Generations (ITNG 2012), 821-823 (2012). # -# [3] S. Gueron, Efficient Software Implementations of Modular Exponentiation# -# Journal of Cryptographic Engineering 2:31-43 (2012). # -# [4] S. Gueron, V. Krasnov: "[PATCH] Efficient and side channel analysis # -# resistant 512-bit and 1024-bit modular exponentiation for optimizing # -# RSA1024 and RSA2048 on x86_64 platforms", # -# http://rt.openssl.org/Ticket/Display.html?id=2582&user=guest&pass=guest# -############################################################################## - +# +# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +# (1) Intel Corporation, Israel Development Center, Haifa, Israel +# (2) University of Haifa, Israel +# +# References: +# [1] S. Gueron, "Efficient Software Implementations of Modular +# Exponentiation", http://eprint.iacr.org/2011/239 +# [2] S. Gueron, V. Krasnov. "Speeding up Big-Numbers Squaring". +# IEEE Proceedings of 9th International Conference on Information +# Technology: New Generations (ITNG 2012), 821-823 (2012). +# [3] S. Gueron, Efficient Software Implementations of Modular Exponentiation +# Journal of Cryptographic Engineering 2:31-43 (2012). +# [4] S. Gueron, V. Krasnov: "[PATCH] Efficient and side channel analysis +# resistant 512-bit and 1024-bit modular exponentiation for optimizing +# RSA1024 and RSA2048 on x86_64 platforms", +# http://rt.openssl.org/Ticket/Display.html?id=2582&user=guest&pass=guest +# # While original submission covers 512- and 1024-bit exponentiation, # this module is limited to 512-bit version only (and as such # accelerates RSA1024 sign). This is because improvement for longer @@ -138,14 +99,22 @@ $code.=<<___; .type rsaz_512_sqr,\@function,5 .align 32 rsaz_512_sqr: # 25-29% faster than rsaz_512_mul +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 subq \$128+24, %rsp +.cfi_adjust_cfa_offset 128+24 .Lsqr_body: movq $mod, %rbp # common argument movq ($inp), %rdx @@ -282,9 +251,9 @@ $code.=<<___; movq %r9, 16(%rsp) movq %r10, 24(%rsp) shrq \$63, %rbx - + #third iteration - movq 16($inp), %r9 + movq 16($inp), %r9 movq 24($inp), %rax mulq %r9 addq %rax, %r12 @@ -532,7 +501,7 @@ $code.=<<___; movl $times,128+8(%rsp) movq $out, %xmm0 # off-load movq %rbp, %xmm1 # off-load -#first iteration +#first iteration mulx %rax, %r8, %r9 mulx 16($inp), %rcx, %r10 @@ -568,7 +537,7 @@ $code.=<<___; mov %rax, (%rsp) mov %r8, 8(%rsp) -#second iteration +#second iteration mulx 16($inp), %rax, %rbx adox %rax, %r10 adcx %rbx, %r11 @@ -607,8 +576,8 @@ $code.=<<___; mov %r9, 16(%rsp) .byte 0x4c,0x89,0x94,0x24,0x18,0x00,0x00,0x00 # mov %r10, 24(%rsp) - -#third iteration + +#third iteration .byte 0xc4,0x62,0xc3,0xf6,0x8e,0x18,0x00,0x00,0x00 # mulx 24($inp), $out, %r9 adox $out, %r12 adcx %r9, %r13 @@ -643,8 +612,8 @@ $code.=<<___; mov %r11, 32(%rsp) .byte 0x4c,0x89,0xa4,0x24,0x28,0x00,0x00,0x00 # mov %r12, 40(%rsp) - -#fourth iteration + +#fourth iteration .byte 0xc4,0xe2,0xfb,0xf6,0x9e,0x20,0x00,0x00,0x00 # mulx 32($inp), %rax, %rbx adox %rax, %r14 adcx %rbx, %r15 @@ -676,8 +645,8 @@ $code.=<<___; mov %r13, 48(%rsp) mov %r14, 56(%rsp) - -#fifth iteration + +#fifth iteration .byte 0xc4,0x62,0xc3,0xf6,0x9e,0x28,0x00,0x00,0x00 # mulx 40($inp), $out, %r11 adox $out, %r8 adcx %r11, %r9 @@ -704,8 +673,8 @@ $code.=<<___; mov %r15, 64(%rsp) mov %r8, 72(%rsp) - -#sixth iteration + +#sixth iteration .byte 0xc4,0xe2,0xfb,0xf6,0x9e,0x30,0x00,0x00,0x00 # mulx 48($inp), %rax, %rbx adox %rax, %r10 adcx %rbx, %r11 @@ -800,15 +769,24 @@ ___ $code.=<<___; leaq 128+24+48(%rsp), %rax +.cfi_def_cfa %rax,8 movq -48(%rax), %r15 +.cfi_restore %r15 movq -40(%rax), %r14 +.cfi_restore %r14 movq -32(%rax), %r13 +.cfi_restore %r13 movq -24(%rax), %r12 +.cfi_restore %r12 movq -16(%rax), %rbp +.cfi_restore %rbp movq -8(%rax), %rbx +.cfi_restore %rbx leaq (%rax), %rsp +.cfi_def_cfa_register %rsp .Lsqr_epilogue: ret +.cfi_endproc .size rsaz_512_sqr,.-rsaz_512_sqr ___ } @@ -819,14 +797,22 @@ $code.=<<___; .type rsaz_512_mul,\@function,5 .align 32 rsaz_512_mul: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 subq \$128+24, %rsp +.cfi_adjust_cfa_offset 128+24 .Lmul_body: movq $out, %xmm0 # off-load arguments movq $mod, %xmm1 @@ -896,15 +882,24 @@ $code.=<<___; call __rsaz_512_subtract leaq 128+24+48(%rsp), %rax +.cfi_def_cfa %rax,8 movq -48(%rax), %r15 +.cfi_restore %r15 movq -40(%rax), %r14 +.cfi_restore %r14 movq -32(%rax), %r13 +.cfi_restore %r13 movq -24(%rax), %r12 +.cfi_restore %r12 movq -16(%rax), %rbp +.cfi_restore %rbp movq -8(%rax), %rbx +.cfi_restore %rbx leaq (%rax), %rsp +.cfi_def_cfa_register %rsp .Lmul_epilogue: ret +.cfi_endproc .size rsaz_512_mul,.-rsaz_512_mul ___ } @@ -915,14 +910,22 @@ $code.=<<___; .type rsaz_512_mul_gather4,\@function,6 .align 32 rsaz_512_mul_gather4: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 subq \$`128+24+($win64?0xb0:0)`, %rsp +.cfi_adjust_cfa_offset `128+24+($win64?0xb0:0)` ___ $code.=<<___ if ($win64); movaps %xmm6,0xa0(%rsp) @@ -1048,7 +1051,7 @@ $code.=<<___; movq 56($ap), %rax movq %rdx, %r14 adcq \$0, %r14 - + mulq %rbx addq %rax, %r14 movq ($ap), %rax @@ -1150,7 +1153,7 @@ $code.=<<___; movq ($ap), %rax adcq \$0, %rdx addq %r15, %r14 - movq %rdx, %r15 + movq %rdx, %r15 adcq \$0, %r15 leaq 8(%rdi), %rdi @@ -1212,7 +1215,7 @@ $code.=<<___ if ($addx); mulx 48($ap), %rbx, %r14 adcx %rax, %r12 - + mulx 56($ap), %rax, %r15 adcx %rbx, %r13 adcx %rax, %r14 @@ -1348,15 +1351,24 @@ $code.=<<___ if ($win64); lea 0xb0(%rax),%rax ___ $code.=<<___; +.cfi_def_cfa %rax,8 movq -48(%rax), %r15 +.cfi_restore %r15 movq -40(%rax), %r14 +.cfi_restore %r14 movq -32(%rax), %r13 +.cfi_restore %r13 movq -24(%rax), %r12 +.cfi_restore %r12 movq -16(%rax), %rbp +.cfi_restore %rbp movq -8(%rax), %rbx +.cfi_restore %rbx leaq (%rax), %rsp +.cfi_def_cfa_register %rsp .Lmul_gather4_epilogue: ret +.cfi_endproc .size rsaz_512_mul_gather4,.-rsaz_512_mul_gather4 ___ } @@ -1367,15 +1379,23 @@ $code.=<<___; .type rsaz_512_mul_scatter4,\@function,6 .align 32 rsaz_512_mul_scatter4: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 mov $pwr, $pwr subq \$128+24, %rsp +.cfi_adjust_cfa_offset 128+24 .Lmul_scatter4_body: leaq ($tbl,$pwr,8), $tbl movq $out, %xmm0 # off-load arguments @@ -1411,7 +1431,7 @@ $code.=<<___; ___ $code.=<<___ if ($addx); jmp .Lmul_scatter_tail - + .align 32 .Lmulx_scatter: movq ($out), %rdx # pass b[0] @@ -1458,15 +1478,24 @@ $code.=<<___; movq %r15, 128*7($inp) leaq 128+24+48(%rsp), %rax +.cfi_def_cfa %rax,8 movq -48(%rax), %r15 +.cfi_restore %r15 movq -40(%rax), %r14 +.cfi_restore %r14 movq -32(%rax), %r13 +.cfi_restore %r13 movq -24(%rax), %r12 +.cfi_restore %r12 movq -16(%rax), %rbp +.cfi_restore %rbp movq -8(%rax), %rbx +.cfi_restore %rbx leaq (%rax), %rsp +.cfi_def_cfa_register %rsp .Lmul_scatter4_epilogue: ret +.cfi_endproc .size rsaz_512_mul_scatter4,.-rsaz_512_mul_scatter4 ___ } @@ -1477,14 +1506,22 @@ $code.=<<___; .type rsaz_512_mul_by_one,\@function,4 .align 32 rsaz_512_mul_by_one: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 subq \$128+24, %rsp +.cfi_adjust_cfa_offset 128+24 .Lmul_by_one_body: ___ $code.=<<___ if ($addx); @@ -1539,15 +1576,24 @@ $code.=<<___; movq %r15, 56($out) leaq 128+24+48(%rsp), %rax +.cfi_def_cfa %rax,8 movq -48(%rax), %r15 +.cfi_restore %r15 movq -40(%rax), %r14 +.cfi_restore %r14 movq -32(%rax), %r13 +.cfi_restore %r13 movq -24(%rax), %r12 +.cfi_restore %r12 movq -16(%rax), %rbp +.cfi_restore %rbp movq -8(%rax), %rbx +.cfi_restore %rbx leaq (%rax), %rsp +.cfi_def_cfa_register %rsp .Lmul_by_one_epilogue: ret +.cfi_endproc .size rsaz_512_mul_by_one,.-rsaz_512_mul_by_one ___ } @@ -1824,7 +1870,7 @@ __rsaz_512_mul: movq 56($ap), %rax movq %rdx, %r14 adcq \$0, %r14 - + mulq %rbx addq %rax, %r14 movq ($ap), %rax @@ -1901,7 +1947,7 @@ __rsaz_512_mul: movq ($ap), %rax adcq \$0, %rdx addq %r15, %r14 - movq %rdx, %r15 + movq %rdx, %r15 adcq \$0, %r15 leaq 8(%rdi), %rdi diff --git a/crypto/bn/asm/s390x-gf2m.pl b/crypto/bn/asm/s390x-gf2m.pl index cbd16f42..06181bf9 100644 --- a/crypto/bn/asm/s390x-gf2m.pl +++ b/crypto/bn/asm/s390x-gf2m.pl @@ -20,7 +20,7 @@ # in bn_gf2m.c. It's kind of low-hanging mechanical port from C for # the time being... gcc 4.3 appeared to generate poor code, therefore # the effort. And indeed, the module delivers 55%-90%(*) improvement -# on haviest ECDSA verify and ECDH benchmarks for 163- and 571-bit +# on heaviest ECDSA verify and ECDH benchmarks for 163- and 571-bit # key lengths on z990, 30%-55%(*) - on z10, and 70%-110%(*) - on z196. # This is for 64-bit build. In 32-bit "highgprs" case improvement is # even higher, for example on z990 it was measured 80%-150%. ECDSA @@ -198,7 +198,7 @@ $code.=<<___; xgr $hi,@r[1] xgr $lo,@r[0] xgr $hi,@r[2] - xgr $lo,@r[3] + xgr $lo,@r[3] xgr $hi,@r[3] xgr $lo,$hi stg $hi,16($rp) diff --git a/crypto/bn/asm/s390x-mont.pl b/crypto/bn/asm/s390x-mont.pl index 2205bc2c..0eaade3e 100644 --- a/crypto/bn/asm/s390x-mont.pl +++ b/crypto/bn/asm/s390x-mont.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/bn/asm/sparct4-mont.pl b/crypto/bn/asm/sparct4-mont.pl index 4faf66f1..6eb634d2 100755 --- a/crypto/bn/asm/sparct4-mont.pl +++ b/crypto/bn/asm/sparct4-mont.pl @@ -8,9 +8,9 @@ # ==================================================================== -# Written by David S. Miller and Andy Polyakov -# . The module is licensed under 2-clause BSD -# license. November 2012. All rights reserved. +# Written by David S. Miller and Andy Polyakov +# The module is licensed under 2-clause BSD license. +# November 2012. All rights reserved. # ==================================================================== ###################################################################### diff --git a/crypto/bn/asm/sparcv8.S b/crypto/bn/asm/sparcv8.S index 9c31073b..75d72eb9 100644 --- a/crypto/bn/asm/sparcv8.S +++ b/crypto/bn/asm/sparcv8.S @@ -1,5 +1,5 @@ .ident "sparcv8.s, Version 1.4" -.ident "SPARC v8 ISA artwork by Andy Polyakov " +.ident "SPARC v8 ISA artwork by Andy Polyakov " /* * ==================================================================== @@ -13,7 +13,7 @@ */ /* - * This is my modest contributon to OpenSSL project (see + * This is my modest contribution to OpenSSL project (see * http://www.openssl.org/ for more information about it) and is * a drop-in SuperSPARC ISA replacement for crypto/bn/bn_asm.c * module. For updates see http://fy.chalmers.se/~appro/hpe/. @@ -159,12 +159,12 @@ bn_mul_add_words: */ bn_mul_words: cmp %o2,0 - bg,a .L_bn_mul_words_proceeed + bg,a .L_bn_mul_words_proceed ld [%o1],%g2 retl clr %o0 -.L_bn_mul_words_proceeed: +.L_bn_mul_words_proceed: andcc %o2,-4,%g0 bz .L_bn_mul_words_tail clr %o5 @@ -251,12 +251,12 @@ bn_mul_words: */ bn_sqr_words: cmp %o2,0 - bg,a .L_bn_sqr_words_proceeed + bg,a .L_bn_sqr_words_proceed ld [%o1],%g2 retl clr %o0 -.L_bn_sqr_words_proceeed: +.L_bn_sqr_words_proceed: andcc %o2,-4,%g0 bz .L_bn_sqr_words_tail clr %o5 diff --git a/crypto/bn/asm/sparcv8plus.S b/crypto/bn/asm/sparcv8plus.S index 714a1366..fe4699b2 100644 --- a/crypto/bn/asm/sparcv8plus.S +++ b/crypto/bn/asm/sparcv8plus.S @@ -1,5 +1,5 @@ .ident "sparcv8plus.s, Version 1.4" -.ident "SPARC v9 ISA artwork by Andy Polyakov " +.ident "SPARC v9 ISA artwork by Andy Polyakov " /* * ==================================================================== @@ -13,7 +13,7 @@ */ /* - * This is my modest contributon to OpenSSL project (see + * This is my modest contribution to OpenSSL project (see * http://www.openssl.org/ for more information about it) and is * a drop-in UltraSPARC ISA replacement for crypto/bn/bn_asm.c * module. For updates see http://fy.chalmers.se/~appro/hpe/. @@ -144,10 +144,6 @@ * } */ -#ifdef OPENSSL_FIPSCANISTER -#include -#endif - #if defined(__SUNPRO_C) && defined(__sparcv9) /* They've said -xarch=v9 at command line */ .register %g2,#scratch @@ -282,7 +278,7 @@ bn_mul_add_words: */ bn_mul_words: sra %o2,%g0,%o2 ! signx %o2 - brgz,a %o2,.L_bn_mul_words_proceeed + brgz,a %o2,.L_bn_mul_words_proceed lduw [%o1],%g2 retl clr %o0 @@ -290,7 +286,7 @@ bn_mul_words: nop nop -.L_bn_mul_words_proceeed: +.L_bn_mul_words_proceed: srl %o3,%g0,%o3 ! clruw %o3 andcc %o2,-4,%g0 bz,pn %icc,.L_bn_mul_words_tail @@ -370,7 +366,7 @@ bn_mul_words: */ bn_sqr_words: sra %o2,%g0,%o2 ! signx %o2 - brgz,a %o2,.L_bn_sqr_words_proceeed + brgz,a %o2,.L_bn_sqr_words_proceed lduw [%o1],%g2 retl clr %o0 @@ -378,7 +374,7 @@ bn_sqr_words: nop nop -.L_bn_sqr_words_proceeed: +.L_bn_sqr_words_proceed: andcc %o2,-4,%g0 nop bz,pn %icc,.L_bn_sqr_words_tail diff --git a/crypto/bn/asm/sparcv9-mont.pl b/crypto/bn/asm/sparcv9-mont.pl index 6807c8b6..44d28ac4 100644 --- a/crypto/bn/asm/sparcv9-mont.pl +++ b/crypto/bn/asm/sparcv9-mont.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -611,7 +611,7 @@ $code.=<<___; add $tp,8,$tp .type $fname,#function .size $fname,(.-$fname) -.asciz "Montgomery Multipltication for SPARCv9, CRYPTOGAMS by " +.asciz "Montgomery Multiplication for SPARCv9, CRYPTOGAMS by " .align 32 ___ $code =~ s/\`([^\`]*)\`/eval($1)/gem; diff --git a/crypto/bn/asm/sparcv9a-mont.pl b/crypto/bn/asm/sparcv9a-mont.pl index 50b69065..c8f759df 100755 --- a/crypto/bn/asm/sparcv9a-mont.pl +++ b/crypto/bn/asm/sparcv9a-mont.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -865,7 +865,7 @@ $fname: restore .type $fname,#function .size $fname,(.-$fname) -.asciz "Montgomery Multipltication for UltraSPARC, CRYPTOGAMS by " +.asciz "Montgomery Multiplication for UltraSPARC, CRYPTOGAMS by " .align 32 ___ diff --git a/crypto/bn/asm/via-mont.pl b/crypto/bn/asm/via-mont.pl index 9f81bc82..eaac4dd6 100644 --- a/crypto/bn/asm/via-mont.pl +++ b/crypto/bn/asm/via-mont.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -76,7 +76,7 @@ # dsa 1024 bits 0.001346s 0.001595s 742.7 627.0 # dsa 2048 bits 0.004745s 0.005582s 210.7 179.1 # -# Conclusions: +# Conclusions: # - VIA SDK leaves a *lot* of room for improvement (which this # implementation successfully fills:-); # - 'rep montmul' gives up to >3x performance improvement depending on @@ -91,7 +91,7 @@ require "x86asm.pl"; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"via-mont.pl"); +&asm_init($ARGV[0]); # int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num); $func="bn_mul_mont_padlock"; diff --git a/crypto/bn/asm/vis3-mont.pl b/crypto/bn/asm/vis3-mont.pl index 64dba448..04694a4c 100644 --- a/crypto/bn/asm/vis3-mont.pl +++ b/crypto/bn/asm/vis3-mont.pl @@ -16,7 +16,7 @@ # October 2012. # -# SPARCv9 VIS3 Montgomery multiplicaion procedure suitable for T3 and +# SPARCv9 VIS3 Montgomery multiplication procedure suitable for T3 and # onward. There are three new instructions used here: umulxhi, # addxc[cc] and initializing store. On T3 RSA private key operations # are 1.54/1.87/2.11/2.26 times faster for 512/1024/2048/4096-bit key diff --git a/crypto/bn/asm/x86-gf2m.pl b/crypto/bn/asm/x86-gf2m.pl index f4643687..d03efcc7 100644 --- a/crypto/bn/asm/x86-gf2m.pl +++ b/crypto/bn/asm/x86-gf2m.pl @@ -46,7 +46,7 @@ require "x86asm.pl"; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],$0,$x86only = $ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); $sse2=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -152,7 +152,7 @@ $R="mm0"; &xor ($a4,$a2); # a2=a4^a2^a4 &mov (&DWP(5*4,"esp"),$a1); # a1^a4 &xor ($a4,$a1); # a1^a2^a4 - &sar (@i[1],31); # broardcast 30th bit + &sar (@i[1],31); # broadcast 30th bit &and ($lo,$b); &mov (&DWP(6*4,"esp"),$a2); # a2^a4 &and (@i[1],$b); diff --git a/crypto/bn/asm/x86-mont.pl b/crypto/bn/asm/x86-mont.pl index 67875036..66997e27 100755 --- a/crypto/bn/asm/x86-mont.pl +++ b/crypto/bn/asm/x86-mont.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -39,8 +39,8 @@ require "x86asm.pl"; $output = pop; open STDOUT,">$output"; - -&asm_init($ARGV[0],$0); + +&asm_init($ARGV[0]); $sse2=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -78,7 +78,7 @@ $frame=32; # size of above frame rounded up to 16n &lea ("ebp",&DWP(-$frame,"esp","edi",4)); # future alloca($frame+4*(num+2)) &neg ("edi"); - # minimize cache contention by arraning 2K window between stack + # minimize cache contention by arranging 2K window between stack # pointer and ap argument [np is also position sensitive vector, # but it's assumed to be near ap, as it's allocated at ~same # time]. diff --git a/crypto/bn/asm/x86_64-gcc.c b/crypto/bn/asm/x86_64-gcc.c index 0ff3805a..d38f3371 100644 --- a/crypto/bn/asm/x86_64-gcc.c +++ b/crypto/bn/asm/x86_64-gcc.c @@ -14,7 +14,7 @@ /*- * x86_64 BIGNUM accelerator version 0.1, December 2002. * - * Implemented by Andy Polyakov for the OpenSSL + * Implemented by Andy Polyakov for the OpenSSL * project. * * Rights for redistribution and usage in source and binary forms are @@ -120,7 +120,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG c1 = 0; if (num <= 0) - return (c1); + return c1; while (num & ~3) { mul_add(rp[0], ap[0], w, c1); @@ -142,7 +142,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, return c1; } - return (c1); + return c1; } BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) @@ -150,7 +150,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) BN_ULONG c1 = 0; if (num <= 0) - return (c1); + return c1; while (num & ~3) { mul(rp[0], ap[0], w, c1); @@ -170,7 +170,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) return c1; mul(rp[2], ap[2], w, c1); } - return (c1); + return c1; } void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n) @@ -270,7 +270,7 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) int c = 0; if (n <= 0) - return ((BN_ULONG)0); + return (BN_ULONG)0; for (;;) { t1 = a[0]; @@ -309,7 +309,7 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) b += 4; r += 4; } - return (c); + return c; } # endif diff --git a/crypto/bn/asm/x86_64-gf2m.pl b/crypto/bn/asm/x86_64-gf2m.pl index d962f620..0fd6e985 100644 --- a/crypto/bn/asm/x86_64-gf2m.pl +++ b/crypto/bn/asm/x86_64-gf2m.pl @@ -54,7 +54,9 @@ $code.=<<___; .type _mul_1x1,\@abi-omnipotent .align 16 _mul_1x1: +.cfi_startproc sub \$128+8,%rsp +.cfi_adjust_cfa_offset 128+8 mov \$-1,$a1 lea ($a,$a),$i0 shr \$3,$a1 @@ -66,7 +68,7 @@ _mul_1x1: sar \$63,$i0 # broadcast 62nd bit lea (,$a1,4),$a4 and $b,$a - sar \$63,$i1 # boardcast 61st bit + sar \$63,$i1 # broadcast 61st bit mov $a,$hi # $a is $lo shl \$63,$lo and $b,$i0 @@ -160,8 +162,10 @@ $code.=<<___; xor $i1,$hi add \$128+8,%rsp +.cfi_adjust_cfa_offset -128-8 ret .Lend_mul_1x1: +.cfi_endproc .size _mul_1x1,.-_mul_1x1 ___ @@ -174,8 +178,10 @@ $code.=<<___; .type bn_GF2m_mul_2x2,\@abi-omnipotent .align 16 bn_GF2m_mul_2x2: - mov OPENSSL_ia32cap_P(%rip),%rax - bt \$33,%rax +.cfi_startproc + mov %rsp,%rax + mov OPENSSL_ia32cap_P(%rip),%r10 + bt \$33,%r10 jnc .Lvanilla_mul_2x2 movq $a1,%xmm0 @@ -210,6 +216,7 @@ $code.=<<___; .align 16 .Lvanilla_mul_2x2: lea -8*17(%rsp),%rsp +.cfi_adjust_cfa_offset 8*17 ___ $code.=<<___ if ($win64); mov `8*17+40`(%rsp),$b0 @@ -218,10 +225,15 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov %r14,8*10(%rsp) +.cfi_rel_offset %r14,8*10 mov %r13,8*11(%rsp) +.cfi_rel_offset %r13,8*11 mov %r12,8*12(%rsp) +.cfi_rel_offset %r12,8*12 mov %rbp,8*13(%rsp) +.cfi_rel_offset %rbp,8*13 mov %rbx,8*14(%rsp) +.cfi_rel_offset %rbx,8*14 .Lbody_mul_2x2: mov $rp,32(%rsp) # save the arguments mov $a1,40(%rsp) @@ -269,10 +281,15 @@ $code.=<<___; mov $lo,8(%rbp) mov 8*10(%rsp),%r14 +.cfi_restore %r14 mov 8*11(%rsp),%r13 +.cfi_restore %r13 mov 8*12(%rsp),%r12 +.cfi_restore %r12 mov 8*13(%rsp),%rbp +.cfi_restore %rbp mov 8*14(%rsp),%rbx +.cfi_restore %rbx ___ $code.=<<___ if ($win64); mov 8*15(%rsp),%rdi @@ -280,8 +297,11 @@ $code.=<<___ if ($win64); ___ $code.=<<___; lea 8*17(%rsp),%rsp +.cfi_adjust_cfa_offset -8*17 +.Lepilogue_mul_2x2: ret .Lend_mul_2x2: +.cfi_endproc .size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2 .asciz "GF(2^m) Multiplication for x86_64, CRYPTOGAMS by " .align 16 @@ -312,13 +332,19 @@ se_handler: pushfq sub \$64,%rsp - mov 152($context),%rax # pull context->Rsp + mov 120($context),%rax # pull context->Rax mov 248($context),%rbx # pull context->Rip lea .Lbody_mul_2x2(%rip),%r10 cmp %r10,%rbx # context->Rip<"prologue" label jb .Lin_prologue + mov 152($context),%rax # pull context->Rsp + + lea .Lepilogue_mul_2x2(%rip),%r10 + cmp %r10,%rbx # context->Rip>="epilogue" label + jae .Lin_prologue + mov 8*10(%rax),%r14 # mimic epilogue mov 8*11(%rax),%r13 mov 8*12(%rax),%r12 @@ -335,8 +361,9 @@ se_handler: mov %r13,224($context) # restore context->R13 mov %r14,232($context) # restore context->R14 -.Lin_prologue: lea 8*17(%rax),%rax + +.Lin_prologue: mov %rax,152($context) # restore context->Rsp mov 40($disp),%rdi # disp->ContextRecord diff --git a/crypto/bn/asm/x86_64-mont.pl b/crypto/bn/asm/x86_64-mont.pl index df4cca5b..7e6e9027 100755 --- a/crypto/bn/asm/x86_64-mont.pl +++ b/crypto/bn/asm/x86_64-mont.pl @@ -104,8 +104,10 @@ $code=<<___; .type bn_mul_mont,\@function,6 .align 16 bn_mul_mont: +.cfi_startproc mov ${num}d,${num}d mov %rsp,%rax +.cfi_def_cfa_register %rax test \$3,${num}d jnz .Lmul_enter cmp \$8,${num}d @@ -124,11 +126,17 @@ $code.=<<___; .align 16 .Lmul_enter: push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 neg $num mov %rsp,%r11 @@ -161,6 +169,7 @@ $code.=<<___; .Lmul_page_walk_done: mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp +.cfi_cfa_expression %rsp+8,$num,8,mul,plus,deref,+8 .Lmul_body: mov $bp,%r12 # reassign $bp ___ @@ -310,7 +319,7 @@ $code.=<<___; mov %rax,($rp,$i,8) # rp[i]=tp[i]-np[i] mov 8($ap,$i,8),%rax # tp[i+1] lea 1($i),$i # i++ - dec $j # doesnn't affect CF! + dec $j # doesn't affect CF! jnz .Lsub sbb \$0,%rax # handle upmost overflow bit @@ -331,16 +340,25 @@ $code.=<<___; jnz .Lcopy mov 8(%rsp,$num,8),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lmul_epilogue: ret +.cfi_endproc .size bn_mul_mont,.-bn_mul_mont ___ {{{ @@ -350,8 +368,10 @@ $code.=<<___; .type bn_mul4x_mont,\@function,6 .align 16 bn_mul4x_mont: +.cfi_startproc mov ${num}d,${num}d mov %rsp,%rax +.cfi_def_cfa_register %rax .Lmul4x_enter: ___ $code.=<<___ if ($addx); @@ -361,11 +381,17 @@ $code.=<<___ if ($addx); ___ $code.=<<___; push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 neg $num mov %rsp,%r11 @@ -389,6 +415,7 @@ $code.=<<___; .Lmul4x_page_walk_done: mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp +.cfi_cfa_expression %rsp+8,$num,8,mul,plus,deref,+8 .Lmul4x_body: mov $rp,16(%rsp,$num,8) # tp[num+2]=$rp mov %rdx,%r12 # reassign $bp @@ -695,10 +722,11 @@ ___ my @ri=("%rax","%rdx",$m0,$m1); $code.=<<___; mov 16(%rsp,$num,8),$rp # restore $rp + lea -4($num),$j mov 0(%rsp),@ri[0] # tp[0] pxor %xmm0,%xmm0 mov 8(%rsp),@ri[1] # tp[1] - shr \$2,$num # num/=4 + shr \$2,$j # j=num/4-1 lea (%rsp),$ap # borrow ap for tp xor $i,$i # i=0 and clear CF! @@ -706,7 +734,6 @@ $code.=<<___; mov 16($ap),@ri[2] # tp[2] mov 24($ap),@ri[3] # tp[3] sbb 8($np),@ri[1] - lea -1($num),$j # j=num/4-1 jmp .Lsub4x .align 16 .Lsub4x: @@ -723,7 +750,7 @@ $code.=<<___; mov 56($ap,$i,8),@ri[3] sbb 40($np,$i,8),@ri[1] lea 4($i),$i # i++ - dec $j # doesnn't affect CF! + dec $j # doesn't affect CF! jnz .Lsub4x mov @ri[0],0($rp,$i,8) # rp[i]=tp[i]-np[i] @@ -740,8 +767,9 @@ $code.=<<___; not @ri[0] mov $rp,$np and @ri[0],$np - lea -1($num),$j + lea -4($num),$j or $np,$ap # ap=borrow?tp:rp + shr \$2,$j # j=num/4-1 movdqu ($ap),%xmm1 movdqa %xmm0,(%rsp) @@ -759,7 +787,6 @@ $code.=<<___; dec $j jnz .Lcopy4x - shl \$2,$num movdqu 16($ap,$i),%xmm2 movdqa %xmm0,16(%rsp,$i) movdqu %xmm2,16($rp,$i) @@ -767,16 +794,25 @@ ___ } $code.=<<___; mov 8(%rsp,$num,8),%rsi # restore %rsp +.cfi_def_cfa %rsi, 8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lmul4x_epilogue: ret +.cfi_endproc .size bn_mul4x_mont,.-bn_mul4x_mont ___ }}} @@ -804,14 +840,22 @@ $code.=<<___; .type bn_sqr8x_mont,\@function,6 .align 32 bn_sqr8x_mont: +.cfi_startproc mov %rsp,%rax +.cfi_def_cfa_register %rax .Lsqr8x_enter: push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lsqr8x_prologue: mov ${num}d,%r10d @@ -867,6 +911,7 @@ bn_sqr8x_mont: mov $n0, 32(%rsp) mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 .Lsqr8x_body: movq $nptr, %xmm2 # save pointer to modulus @@ -936,6 +981,7 @@ $code.=<<___; pxor %xmm0,%xmm0 pshufd \$0,%xmm1,%xmm1 mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 jmp .Lsqr8x_cond_copy .align 32 @@ -965,14 +1011,22 @@ $code.=<<___; mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lsqr8x_epilogue: ret +.cfi_endproc .size bn_sqr8x_mont,.-bn_sqr8x_mont ___ }}} @@ -984,14 +1038,22 @@ $code.=<<___; .type bn_mulx4x_mont,\@function,6 .align 32 bn_mulx4x_mont: +.cfi_startproc mov %rsp,%rax +.cfi_def_cfa_register %rax .Lmulx4x_enter: push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lmulx4x_prologue: shl \$3,${num}d # convert $num to bytes @@ -1037,6 +1099,7 @@ bn_mulx4x_mont: mov $n0, 24(%rsp) # save *n0 mov $rp, 32(%rsp) # save $rp mov %rax,40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 mov $num,48(%rsp) # inner counter jmp .Lmulx4x_body @@ -1286,6 +1349,7 @@ $code.=<<___; pxor %xmm0,%xmm0 pshufd \$0,%xmm1,%xmm1 mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 jmp .Lmulx4x_cond_copy .align 32 @@ -1315,14 +1379,22 @@ $code.=<<___; mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lmulx4x_epilogue: ret +.cfi_endproc .size bn_mulx4x_mont,.-bn_mulx4x_mont ___ }}} @@ -1401,12 +1473,12 @@ sqr_handler: mov 0(%r11),%r10d # HandlerData[0] lea (%rsi,%r10),%r10 # end of prologue label - cmp %r10,%rbx # context->Rip<.Lsqr_body + cmp %r10,%rbx # context->Rip<.Lsqr_prologue jb .Lcommon_seh_tail mov 4(%r11),%r10d # HandlerData[1] lea (%rsi,%r10),%r10 # body label - cmp %r10,%rbx # context->Rip>=.Lsqr_epilogue + cmp %r10,%rbx # context->Rip<.Lsqr_body jb .Lcommon_pop_regs mov 152($context),%rax # pull context->Rsp diff --git a/crypto/bn/asm/x86_64-mont5.pl b/crypto/bn/asm/x86_64-mont5.pl index 5779059e..26354357 100755 --- a/crypto/bn/asm/x86_64-mont5.pl +++ b/crypto/bn/asm/x86_64-mont5.pl @@ -93,8 +93,10 @@ $code=<<___; .type bn_mul_mont_gather5,\@function,6 .align 64 bn_mul_mont_gather5: +.cfi_startproc mov ${num}d,${num}d mov %rsp,%rax +.cfi_def_cfa_register %rax test \$7,${num}d jnz .Lmul_enter ___ @@ -108,11 +110,17 @@ $code.=<<___; .Lmul_enter: movd `($win64?56:8)`(%rsp),%xmm5 # load 7th argument push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 neg $num mov %rsp,%r11 @@ -145,6 +153,7 @@ $code.=<<___; lea .Linc(%rip),%r10 mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp +.cfi_cfa_expression %rsp+8,$num,8,mul,plus,deref,+8 .Lmul_body: lea 128($bp),%r12 # reassign $bp (+size optimization) @@ -410,7 +419,7 @@ $code.=<<___; mov %rax,($rp,$i,8) # rp[i]=tp[i]-np[i] mov 8($ap,$i,8),%rax # tp[i+1] lea 1($i),$i # i++ - dec $j # doesnn't affect CF! + dec $j # doesn't affect CF! jnz .Lsub sbb \$0,%rax # handle upmost overflow bit @@ -431,17 +440,26 @@ $code.=<<___; jnz .Lcopy mov 8(%rsp,$num,8),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lmul_epilogue: ret +.cfi_endproc .size bn_mul_mont_gather5,.-bn_mul_mont_gather5 ___ {{{ @@ -451,8 +469,10 @@ $code.=<<___; .type bn_mul4x_mont_gather5,\@function,6 .align 32 bn_mul4x_mont_gather5: +.cfi_startproc .byte 0x67 mov %rsp,%rax +.cfi_def_cfa_register %rax .Lmul4x_enter: ___ $code.=<<___ if ($addx); @@ -462,11 +482,17 @@ $code.=<<___ if ($addx); ___ $code.=<<___; push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lmul4x_prologue: .byte 0x67 @@ -522,22 +548,32 @@ $code.=<<___; neg $num mov %rax,40(%rsp) +.cfi_cfa_expression %rsp+40,deref,+8 .Lmul4x_body: call mul4x_internal mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lmul4x_epilogue: ret +.cfi_endproc .size bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5 .type mul4x_internal,\@abi-omnipotent @@ -1049,7 +1085,7 @@ my $bptr="%rdx"; # const void *table, my $nptr="%rcx"; # const BN_ULONG *nptr, my $n0 ="%r8"; # const BN_ULONG *n0); my $num ="%r9"; # int num, has to be divisible by 8 - # int pwr + # int pwr my ($i,$j,$tptr)=("%rbp","%rcx",$rptr); my @A0=("%r10","%r11"); @@ -1061,7 +1097,9 @@ $code.=<<___; .type bn_power5,\@function,6 .align 32 bn_power5: +.cfi_startproc mov %rsp,%rax +.cfi_def_cfa_register %rax ___ $code.=<<___ if ($addx); mov OPENSSL_ia32cap_P+8(%rip),%r11d @@ -1071,11 +1109,17 @@ $code.=<<___ if ($addx); ___ $code.=<<___; push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lpower5_prologue: shl \$3,${num}d # convert $num to bytes @@ -1126,7 +1170,7 @@ $code.=<<___; ja .Lpwr_page_walk .Lpwr_page_walk_done: - mov $num,%r10 + mov $num,%r10 neg $num ############################################################## @@ -1140,6 +1184,7 @@ $code.=<<___; # mov $n0, 32(%rsp) mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 .Lpower5_body: movq $rptr,%xmm1 # save $rptr, used in sqr8x movq $nptr,%xmm2 # save $nptr @@ -1166,16 +1211,25 @@ $code.=<<___; call mul4x_internal mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lpower5_epilogue: ret +.cfi_endproc .size bn_power5,.-bn_power5 .globl bn_sqr8x_internal @@ -2035,7 +2089,7 @@ __bn_post4x_internal: jnz .Lsqr4x_sub mov $num,%r10 # prepare for back-to-back call - neg $num # restore $num + neg $num # restore $num ret .size __bn_post4x_internal,.-__bn_post4x_internal ___ @@ -2055,14 +2109,22 @@ bn_from_montgomery: .type bn_from_mont8x,\@function,6 .align 32 bn_from_mont8x: +.cfi_startproc .byte 0x67 mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lfrom_prologue: shl \$3,${num}d # convert $num to bytes @@ -2127,6 +2189,7 @@ bn_from_mont8x: # mov $n0, 32(%rsp) mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 .Lfrom_body: mov $num,%r11 lea 48(%rsp),%rax @@ -2170,7 +2233,6 @@ $code.=<<___ if ($addx); pxor %xmm0,%xmm0 lea 48(%rsp),%rax - mov 40(%rsp),%rsi # restore %rsp jmp .Lfrom_mont_zero .align 32 @@ -2182,11 +2244,12 @@ $code.=<<___; pxor %xmm0,%xmm0 lea 48(%rsp),%rax - mov 40(%rsp),%rsi # restore %rsp jmp .Lfrom_mont_zero .align 32 .Lfrom_mont_zero: + mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 movdqa %xmm0,16*0(%rax) movdqa %xmm0,16*1(%rax) movdqa %xmm0,16*2(%rax) @@ -2197,14 +2260,22 @@ $code.=<<___; mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lfrom_epilogue: ret +.cfi_endproc .size bn_from_mont8x,.-bn_from_mont8x ___ } @@ -2217,14 +2288,22 @@ $code.=<<___; .type bn_mulx4x_mont_gather5,\@function,6 .align 32 bn_mulx4x_mont_gather5: +.cfi_startproc mov %rsp,%rax +.cfi_def_cfa_register %rax .Lmulx4x_enter: push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lmulx4x_prologue: shl \$3,${num}d # convert $num to bytes @@ -2258,7 +2337,7 @@ bn_mulx4x_mont_gather5: mov \$0,%r10 cmovc %r10,%r11 sub %r11,%rbp -.Lmulx4xsp_done: +.Lmulx4xsp_done: and \$-64,%rbp # ensure alignment mov %rsp,%r11 sub %rbp,%r11 @@ -2290,21 +2369,31 @@ bn_mulx4x_mont_gather5: # mov $n0, 32(%rsp) # save *n0 mov %rax,40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 .Lmulx4x_body: call mulx4x_internal mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lmulx4x_epilogue: ret +.cfi_endproc .size bn_mulx4x_mont_gather5,.-bn_mulx4x_mont_gather5 .type mulx4x_internal,\@abi-omnipotent @@ -2332,7 +2421,7 @@ my $N=$STRIDE/4; # should match cache line size $code.=<<___; movdqa 0(%rax),%xmm0 # 00000001000000010000000000000000 movdqa 16(%rax),%xmm1 # 00000002000000020000000200000002 - lea 88-112(%rsp,%r10),%r10 # place the mask after tp[num+1] (+ICache optimizaton) + lea 88-112(%rsp,%r10),%r10 # place the mask after tp[num+1] (+ICache optimization) lea 128($bp),$bptr # size optimization pshufd \$0,%xmm5,%xmm5 # broadcast index @@ -2682,14 +2771,22 @@ $code.=<<___; .type bn_powerx5,\@function,6 .align 32 bn_powerx5: +.cfi_startproc mov %rsp,%rax +.cfi_def_cfa_register %rax .Lpowerx5_enter: push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lpowerx5_prologue: shl \$3,${num}d # convert $num to bytes @@ -2740,7 +2837,7 @@ bn_powerx5: ja .Lpwrx_page_walk .Lpwrx_page_walk_done: - mov $num,%r10 + mov $num,%r10 neg $num ############################################################## @@ -2761,6 +2858,7 @@ bn_powerx5: movq $bptr,%xmm4 mov $n0, 32(%rsp) mov %rax, 40(%rsp) # save original %rsp +.cfi_cfa_expression %rsp+40,deref,+8 .Lpowerx5_body: call __bn_sqrx8x_internal @@ -2783,17 +2881,26 @@ bn_powerx5: call mulx4x_internal mov 40(%rsp),%rsi # restore %rsp +.cfi_def_cfa %rsi,8 mov \$1,%rax mov -48(%rsi),%r15 +.cfi_restore %r15 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lpowerx5_epilogue: ret +.cfi_endproc .size bn_powerx5,.-bn_powerx5 .globl bn_sqrx8x_internal @@ -3677,8 +3784,8 @@ mul_handler: jb .Lcommon_seh_tail mov 4(%r11),%r10d # HandlerData[1] - lea (%rsi,%r10),%r10 # epilogue label - cmp %r10,%rbx # context->Rip>=epilogue label + lea (%rsi,%r10),%r10 # beginning of body label + cmp %r10,%rbx # context->RipRsp diff --git a/crypto/bn/bn_asm.c b/crypto/bn/bn_asm.c index 39c6c213..729b2480 100644 --- a/crypto/bn/bn_asm.c +++ b/crypto/bn/bn_asm.c @@ -21,7 +21,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, assert(num >= 0); if (num <= 0) - return (c1); + return c1; # ifndef OPENSSL_SMALL_FOOTPRINT while (num & ~3) { @@ -41,7 +41,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, num--; } - return (c1); + return c1; } BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) @@ -50,7 +50,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) assert(num >= 0); if (num <= 0) - return (c1); + return c1; # ifndef OPENSSL_SMALL_FOOTPRINT while (num & ~3) { @@ -69,7 +69,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) rp++; num--; } - return (c1); + return c1; } void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n) @@ -108,7 +108,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, assert(num >= 0); if (num <= 0) - return ((BN_ULONG)0); + return (BN_ULONG)0; bl = LBITS(w); bh = HBITS(w); @@ -130,7 +130,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, rp++; num--; } - return (c); + return c; } BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) @@ -140,7 +140,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) assert(num >= 0); if (num <= 0) - return ((BN_ULONG)0); + return (BN_ULONG)0; bl = LBITS(w); bh = HBITS(w); @@ -162,7 +162,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w) rp++; num--; } - return (carry); + return carry; } void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n) @@ -210,7 +210,7 @@ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d) int i, count = 2; if (d == 0) - return (BN_MASK2); + return BN_MASK2; i = BN_num_bits_word(d); assert((i == BN_BITS2) || (h <= (BN_ULONG)1 << i)); @@ -264,7 +264,7 @@ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d) l = (l & BN_MASK2l) << BN_BITS4; } ret |= q; - return (ret); + return ret; } #endif /* !defined(BN_LLONG) && defined(BN_DIV2W) */ @@ -276,7 +276,7 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, assert(n >= 0); if (n <= 0) - return ((BN_ULONG)0); + return (BN_ULONG)0; # ifndef OPENSSL_SMALL_FOOTPRINT while (n & ~3) { @@ -307,7 +307,7 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, r++; n--; } - return ((BN_ULONG)ll); + return (BN_ULONG)ll; } #else /* !BN_LLONG */ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, @@ -317,7 +317,7 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, assert(n >= 0); if (n <= 0) - return ((BN_ULONG)0); + return (BN_ULONG)0; c = 0; # ifndef OPENSSL_SMALL_FOOTPRINT @@ -364,7 +364,7 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, r++; n--; } - return ((BN_ULONG)c); + return (BN_ULONG)c; } #endif /* !BN_LLONG */ @@ -376,7 +376,7 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, assert(n >= 0); if (n <= 0) - return ((BN_ULONG)0); + return (BN_ULONG)0; #ifndef OPENSSL_SMALL_FOOTPRINT while (n & ~3) { @@ -417,7 +417,7 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, r++; n--; } - return (c); + return c; } #if defined(BN_MUL_COMBA) && !defined(OPENSSL_SMALL_FOOTPRINT) diff --git a/crypto/bn/bn_blind.c b/crypto/bn/bn_blind.c index 24d13830..006ad6e5 100644 --- a/crypto/bn/bn_blind.c +++ b/crypto/bn/bn_blind.c @@ -119,7 +119,7 @@ int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx) err: if (b->counter == BN_BLINDING_COUNTER) b->counter = 0; - return (ret); + return ret; } int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx) @@ -135,14 +135,14 @@ int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *ctx) if ((b->A == NULL) || (b->Ai == NULL)) { BNerr(BN_F_BN_BLINDING_CONVERT_EX, BN_R_NOT_INITIALIZED); - return (0); + return 0; } if (b->counter == -1) /* Fresh blinding, doesn't need updating. */ b->counter = 0; else if (!BN_BLINDING_update(b, ctx)) - return (0); + return 0; if (r != NULL) { if (!BN_copy(r, b->Ai)) @@ -172,13 +172,13 @@ int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, else { if (b->Ai == NULL) { BNerr(BN_F_BN_BLINDING_INVERT_EX, BN_R_NOT_INITIALIZED); - return (0); + return 0; } ret = BN_mod_mul(n, n, b->Ai, b->mod, ctx); } bn_check_top(n); - return (ret); + return ret; } int BN_BLINDING_is_current_thread(BN_BLINDING *b) diff --git a/crypto/bn/bn_dh.c b/crypto/bn/bn_dh.c index 17d05597..38acdee2 100644 --- a/crypto/bn/bn_dh.c +++ b/crypto/bn/bn_dh.c @@ -1,5 +1,5 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include "bn_lcl.h" -#include "e_os.h" +#include "internal/nelem.h" #ifndef OPENSSL_NO_DH #include @@ -104,6 +104,146 @@ static const BN_ULONG dh2048_256_q[] = { 0x8CF83642A709A097ULL }; +/* Primes from RFC 7919 */ +static const BN_ULONG ffdhe2048_p[] = { + 0xFFFFFFFFFFFFFFFFULL, 0x886B423861285C97ULL, 0xC6F34A26C1B2EFFAULL, + 0xC58EF1837D1683B2ULL, 0x3BB5FCBC2EC22005ULL, 0xC3FE3B1B4C6FAD73ULL, + 0x8E4F1232EEF28183ULL, 0x9172FE9CE98583FFULL, 0xC03404CD28342F61ULL, + 0x9E02FCE1CDF7E2ECULL, 0x0B07A7C8EE0A6D70ULL, 0xAE56EDE76372BB19ULL, + 0x1D4F42A3DE394DF4ULL, 0xB96ADAB760D7F468ULL, 0xD108A94BB2C8E3FBULL, + 0xBC0AB182B324FB61ULL, 0x30ACCA4F483A797AULL, 0x1DF158A136ADE735ULL, + 0xE2A689DAF3EFE872ULL, 0x984F0C70E0E68B77ULL, 0xB557135E7F57C935ULL, + 0x856365553DED1AF3ULL, 0x2433F51F5F066ED0ULL, 0xD3DF1ED5D5FD6561ULL, + 0xF681B202AEC4617AULL, 0x7D2FE363630C75D8ULL, 0xCC939DCE249B3EF9ULL, + 0xA9E13641146433FBULL, 0xD8B9C583CE2D3695ULL, 0xAFDC5620273D3CF1ULL, + 0xADF85458A2BB4A9AULL, 0xFFFFFFFFFFFFFFFFULL +}; + +static const BN_ULONG ffdhe3072_p[] = { + 0xFFFFFFFFFFFFFFFFULL, 0x25E41D2B66C62E37ULL, 0x3C1B20EE3FD59D7CULL, + 0x0ABCD06BFA53DDEFULL, 0x1DBF9A42D5C4484EULL, 0xABC521979B0DEADAULL, + 0xE86D2BC522363A0DULL, 0x5CAE82AB9C9DF69EULL, 0x64F2E21E71F54BFFULL, + 0xF4FD4452E2D74DD3ULL, 0xB4130C93BC437944ULL, 0xAEFE130985139270ULL, + 0x598CB0FAC186D91CULL, 0x7AD91D2691F7F7EEULL, 0x61B46FC9D6E6C907ULL, + 0xBC34F4DEF99C0238ULL, 0xDE355B3B6519035BULL, 0x886B4238611FCFDCULL, + 0xC6F34A26C1B2EFFAULL, 0xC58EF1837D1683B2ULL, 0x3BB5FCBC2EC22005ULL, + 0xC3FE3B1B4C6FAD73ULL, 0x8E4F1232EEF28183ULL, 0x9172FE9CE98583FFULL, + 0xC03404CD28342F61ULL, 0x9E02FCE1CDF7E2ECULL, 0x0B07A7C8EE0A6D70ULL, + 0xAE56EDE76372BB19ULL, 0x1D4F42A3DE394DF4ULL, 0xB96ADAB760D7F468ULL, + 0xD108A94BB2C8E3FBULL, 0xBC0AB182B324FB61ULL, 0x30ACCA4F483A797AULL, + 0x1DF158A136ADE735ULL, 0xE2A689DAF3EFE872ULL, 0x984F0C70E0E68B77ULL, + 0xB557135E7F57C935ULL, 0x856365553DED1AF3ULL, 0x2433F51F5F066ED0ULL, + 0xD3DF1ED5D5FD6561ULL, 0xF681B202AEC4617AULL, 0x7D2FE363630C75D8ULL, + 0xCC939DCE249B3EF9ULL, 0xA9E13641146433FBULL, 0xD8B9C583CE2D3695ULL, + 0xAFDC5620273D3CF1ULL, 0xADF85458A2BB4A9AULL, 0xFFFFFFFFFFFFFFFFULL +}; + +static const BN_ULONG ffdhe4096_p[] = { + 0xFFFFFFFFFFFFFFFFULL, 0xC68A007E5E655F6AULL, 0x4DB5A851F44182E1ULL, + 0x8EC9B55A7F88A46BULL, 0x0A8291CDCEC97DCFULL, 0x2A4ECEA9F98D0ACCULL, + 0x1A1DB93D7140003CULL, 0x092999A333CB8B7AULL, 0x6DC778F971AD0038ULL, + 0xA907600A918130C4ULL, 0xED6A1E012D9E6832ULL, 0x7135C886EFB4318AULL, + 0x87F55BA57E31CC7AULL, 0x7763CF1D55034004ULL, 0xAC7D5F42D69F6D18ULL, + 0x7930E9E4E58857B6ULL, 0x6E6F52C3164DF4FBULL, 0x25E41D2B669E1EF1ULL, + 0x3C1B20EE3FD59D7CULL, 0x0ABCD06BFA53DDEFULL, 0x1DBF9A42D5C4484EULL, + 0xABC521979B0DEADAULL, 0xE86D2BC522363A0DULL, 0x5CAE82AB9C9DF69EULL, + 0x64F2E21E71F54BFFULL, 0xF4FD4452E2D74DD3ULL, 0xB4130C93BC437944ULL, + 0xAEFE130985139270ULL, 0x598CB0FAC186D91CULL, 0x7AD91D2691F7F7EEULL, + 0x61B46FC9D6E6C907ULL, 0xBC34F4DEF99C0238ULL, 0xDE355B3B6519035BULL, + 0x886B4238611FCFDCULL, 0xC6F34A26C1B2EFFAULL, 0xC58EF1837D1683B2ULL, + 0x3BB5FCBC2EC22005ULL, 0xC3FE3B1B4C6FAD73ULL, 0x8E4F1232EEF28183ULL, + 0x9172FE9CE98583FFULL, 0xC03404CD28342F61ULL, 0x9E02FCE1CDF7E2ECULL, + 0x0B07A7C8EE0A6D70ULL, 0xAE56EDE76372BB19ULL, 0x1D4F42A3DE394DF4ULL, + 0xB96ADAB760D7F468ULL, 0xD108A94BB2C8E3FBULL, 0xBC0AB182B324FB61ULL, + 0x30ACCA4F483A797AULL, 0x1DF158A136ADE735ULL, 0xE2A689DAF3EFE872ULL, + 0x984F0C70E0E68B77ULL, 0xB557135E7F57C935ULL, 0x856365553DED1AF3ULL, + 0x2433F51F5F066ED0ULL, 0xD3DF1ED5D5FD6561ULL, 0xF681B202AEC4617AULL, + 0x7D2FE363630C75D8ULL, 0xCC939DCE249B3EF9ULL, 0xA9E13641146433FBULL, + 0xD8B9C583CE2D3695ULL, 0xAFDC5620273D3CF1ULL, 0xADF85458A2BB4A9AULL, + 0xFFFFFFFFFFFFFFFFULL +}; + +static const BN_ULONG ffdhe6144_p[] = { + 0xFFFFFFFFFFFFFFFFULL, 0xA40E329CD0E40E65ULL, 0xA41D570D7938DAD4ULL, + 0x62A69526D43161C1ULL, 0x3FDD4A8E9ADB1E69ULL, 0x5B3B71F9DC6B80D6ULL, + 0xEC9D1810C6272B04ULL, 0x8CCF2DD5CACEF403ULL, 0xE49F5235C95B9117ULL, + 0x505DC82DB854338AULL, 0x62292C311562A846ULL, 0xD72B03746AE77F5EULL, + 0xF9C9091B462D538CULL, 0x0AE8DB5847A67CBEULL, 0xB3A739C122611682ULL, + 0xEEAAC0232A281BF6ULL, 0x94C6651E77CAF992ULL, 0x763E4E4B94B2BBC1ULL, + 0x587E38DA0077D9B4ULL, 0x7FB29F8C183023C3ULL, 0x0ABEC1FFF9E3A26EULL, + 0xA00EF092350511E3ULL, 0xB855322EDB6340D8ULL, 0xA52471F7A9A96910ULL, + 0x388147FB4CFDB477ULL, 0x9B1F5C3E4E46041FULL, 0xCDAD0657FCCFEC71ULL, + 0xB38E8C334C701C3AULL, 0x917BDD64B1C0FD4CULL, 0x3BB454329B7624C8ULL, + 0x23BA4442CAF53EA6ULL, 0x4E677D2C38532A3AULL, 0x0BFD64B645036C7AULL, + 0xC68A007E5E0DD902ULL, 0x4DB5A851F44182E1ULL, 0x8EC9B55A7F88A46BULL, + 0x0A8291CDCEC97DCFULL, 0x2A4ECEA9F98D0ACCULL, 0x1A1DB93D7140003CULL, + 0x092999A333CB8B7AULL, 0x6DC778F971AD0038ULL, 0xA907600A918130C4ULL, + 0xED6A1E012D9E6832ULL, 0x7135C886EFB4318AULL, 0x87F55BA57E31CC7AULL, + 0x7763CF1D55034004ULL, 0xAC7D5F42D69F6D18ULL, 0x7930E9E4E58857B6ULL, + 0x6E6F52C3164DF4FBULL, 0x25E41D2B669E1EF1ULL, 0x3C1B20EE3FD59D7CULL, + 0x0ABCD06BFA53DDEFULL, 0x1DBF9A42D5C4484EULL, 0xABC521979B0DEADAULL, + 0xE86D2BC522363A0DULL, 0x5CAE82AB9C9DF69EULL, 0x64F2E21E71F54BFFULL, + 0xF4FD4452E2D74DD3ULL, 0xB4130C93BC437944ULL, 0xAEFE130985139270ULL, + 0x598CB0FAC186D91CULL, 0x7AD91D2691F7F7EEULL, 0x61B46FC9D6E6C907ULL, + 0xBC34F4DEF99C0238ULL, 0xDE355B3B6519035BULL, 0x886B4238611FCFDCULL, + 0xC6F34A26C1B2EFFAULL, 0xC58EF1837D1683B2ULL, 0x3BB5FCBC2EC22005ULL, + 0xC3FE3B1B4C6FAD73ULL, 0x8E4F1232EEF28183ULL, 0x9172FE9CE98583FFULL, + 0xC03404CD28342F61ULL, 0x9E02FCE1CDF7E2ECULL, 0x0B07A7C8EE0A6D70ULL, + 0xAE56EDE76372BB19ULL, 0x1D4F42A3DE394DF4ULL, 0xB96ADAB760D7F468ULL, + 0xD108A94BB2C8E3FBULL, 0xBC0AB182B324FB61ULL, 0x30ACCA4F483A797AULL, + 0x1DF158A136ADE735ULL, 0xE2A689DAF3EFE872ULL, 0x984F0C70E0E68B77ULL, + 0xB557135E7F57C935ULL, 0x856365553DED1AF3ULL, 0x2433F51F5F066ED0ULL, + 0xD3DF1ED5D5FD6561ULL, 0xF681B202AEC4617AULL, 0x7D2FE363630C75D8ULL, + 0xCC939DCE249B3EF9ULL, 0xA9E13641146433FBULL, 0xD8B9C583CE2D3695ULL, + 0xAFDC5620273D3CF1ULL, 0xADF85458A2BB4A9AULL, 0xFFFFFFFFFFFFFFFFULL +}; + +static const BN_ULONG ffdhe8192_p[] = { + 0xFFFFFFFFFFFFFFFFULL, 0xD68C8BB7C5C6424CULL, 0x011E2A94838FF88CULL, + 0x0822E506A9F4614EULL, 0x97D11D49F7A8443DULL, 0xA6BBFDE530677F0DULL, + 0x2F741EF8C1FE86FEULL, 0xFAFABE1C5D71A87EULL, 0xDED2FBABFBE58A30ULL, + 0xB6855DFE72B0A66EULL, 0x1EFC8CE0BA8A4FE8ULL, 0x83F81D4A3F2FA457ULL, + 0xA1FE3075A577E231ULL, 0xD5B8019488D9C0A0ULL, 0x624816CDAD9A95F9ULL, + 0x99E9E31650C1217BULL, 0x51AA691E0E423CFCULL, 0x1C217E6C3826E52CULL, + 0x51A8A93109703FEEULL, 0xBB7099876A460E74ULL, 0x541FC68C9C86B022ULL, + 0x59160CC046FD8251ULL, 0x2846C0BA35C35F5CULL, 0x54504AC78B758282ULL, + 0x29388839D2AF05E4ULL, 0xCB2C0F1CC01BD702ULL, 0x555B2F747C932665ULL, + 0x86B63142A3AB8829ULL, 0x0B8CC3BDF64B10EFULL, 0x687FEB69EDD1CC5EULL, + 0xFDB23FCEC9509D43ULL, 0x1E425A31D951AE64ULL, 0x36AD004CF600C838ULL, + 0xA40E329CCFF46AAAULL, 0xA41D570D7938DAD4ULL, 0x62A69526D43161C1ULL, + 0x3FDD4A8E9ADB1E69ULL, 0x5B3B71F9DC6B80D6ULL, 0xEC9D1810C6272B04ULL, + 0x8CCF2DD5CACEF403ULL, 0xE49F5235C95B9117ULL, 0x505DC82DB854338AULL, + 0x62292C311562A846ULL, 0xD72B03746AE77F5EULL, 0xF9C9091B462D538CULL, + 0x0AE8DB5847A67CBEULL, 0xB3A739C122611682ULL, 0xEEAAC0232A281BF6ULL, + 0x94C6651E77CAF992ULL, 0x763E4E4B94B2BBC1ULL, 0x587E38DA0077D9B4ULL, + 0x7FB29F8C183023C3ULL, 0x0ABEC1FFF9E3A26EULL, 0xA00EF092350511E3ULL, + 0xB855322EDB6340D8ULL, 0xA52471F7A9A96910ULL, 0x388147FB4CFDB477ULL, + 0x9B1F5C3E4E46041FULL, 0xCDAD0657FCCFEC71ULL, 0xB38E8C334C701C3AULL, + 0x917BDD64B1C0FD4CULL, 0x3BB454329B7624C8ULL, 0x23BA4442CAF53EA6ULL, + 0x4E677D2C38532A3AULL, 0x0BFD64B645036C7AULL, 0xC68A007E5E0DD902ULL, + 0x4DB5A851F44182E1ULL, 0x8EC9B55A7F88A46BULL, 0x0A8291CDCEC97DCFULL, + 0x2A4ECEA9F98D0ACCULL, 0x1A1DB93D7140003CULL, 0x092999A333CB8B7AULL, + 0x6DC778F971AD0038ULL, 0xA907600A918130C4ULL, 0xED6A1E012D9E6832ULL, + 0x7135C886EFB4318AULL, 0x87F55BA57E31CC7AULL, 0x7763CF1D55034004ULL, + 0xAC7D5F42D69F6D18ULL, 0x7930E9E4E58857B6ULL, 0x6E6F52C3164DF4FBULL, + 0x25E41D2B669E1EF1ULL, 0x3C1B20EE3FD59D7CULL, 0x0ABCD06BFA53DDEFULL, + 0x1DBF9A42D5C4484EULL, 0xABC521979B0DEADAULL, 0xE86D2BC522363A0DULL, + 0x5CAE82AB9C9DF69EULL, 0x64F2E21E71F54BFFULL, 0xF4FD4452E2D74DD3ULL, + 0xB4130C93BC437944ULL, 0xAEFE130985139270ULL, 0x598CB0FAC186D91CULL, + 0x7AD91D2691F7F7EEULL, 0x61B46FC9D6E6C907ULL, 0xBC34F4DEF99C0238ULL, + 0xDE355B3B6519035BULL, 0x886B4238611FCFDCULL, 0xC6F34A26C1B2EFFAULL, + 0xC58EF1837D1683B2ULL, 0x3BB5FCBC2EC22005ULL, 0xC3FE3B1B4C6FAD73ULL, + 0x8E4F1232EEF28183ULL, 0x9172FE9CE98583FFULL, 0xC03404CD28342F61ULL, + 0x9E02FCE1CDF7E2ECULL, 0x0B07A7C8EE0A6D70ULL, 0xAE56EDE76372BB19ULL, + 0x1D4F42A3DE394DF4ULL, 0xB96ADAB760D7F468ULL, 0xD108A94BB2C8E3FBULL, + 0xBC0AB182B324FB61ULL, 0x30ACCA4F483A797AULL, 0x1DF158A136ADE735ULL, + 0xE2A689DAF3EFE872ULL, 0x984F0C70E0E68B77ULL, 0xB557135E7F57C935ULL, + 0x856365553DED1AF3ULL, 0x2433F51F5F066ED0ULL, 0xD3DF1ED5D5FD6561ULL, + 0xF681B202AEC4617AULL, 0x7D2FE363630C75D8ULL, 0xCC939DCE249B3EF9ULL, + 0xA9E13641146433FBULL, 0xD8B9C583CE2D3695ULL, 0xAFDC5620273D3CF1ULL, + 0xADF85458A2BB4A9AULL, 0xFFFFFFFFFFFFFFFFULL +}; + # elif BN_BITS2 == 32 static const BN_ULONG dh1024_160_p[] = { @@ -194,6 +334,147 @@ static const BN_ULONG dh2048_256_q[] = { 0xA709A097, 0x8CF83642 }; +/* Primes from RFC 7919 */ + +static const BN_ULONG ffdhe2048_p[] = { + 0xFFFFFFFF, 0xFFFFFFFF, 0x61285C97, 0x886B4238, 0xC1B2EFFA, 0xC6F34A26, + 0x7D1683B2, 0xC58EF183, 0x2EC22005, 0x3BB5FCBC, 0x4C6FAD73, 0xC3FE3B1B, + 0xEEF28183, 0x8E4F1232, 0xE98583FF, 0x9172FE9C, 0x28342F61, 0xC03404CD, + 0xCDF7E2EC, 0x9E02FCE1, 0xEE0A6D70, 0x0B07A7C8, 0x6372BB19, 0xAE56EDE7, + 0xDE394DF4, 0x1D4F42A3, 0x60D7F468, 0xB96ADAB7, 0xB2C8E3FB, 0xD108A94B, + 0xB324FB61, 0xBC0AB182, 0x483A797A, 0x30ACCA4F, 0x36ADE735, 0x1DF158A1, + 0xF3EFE872, 0xE2A689DA, 0xE0E68B77, 0x984F0C70, 0x7F57C935, 0xB557135E, + 0x3DED1AF3, 0x85636555, 0x5F066ED0, 0x2433F51F, 0xD5FD6561, 0xD3DF1ED5, + 0xAEC4617A, 0xF681B202, 0x630C75D8, 0x7D2FE363, 0x249B3EF9, 0xCC939DCE, + 0x146433FB, 0xA9E13641, 0xCE2D3695, 0xD8B9C583, 0x273D3CF1, 0xAFDC5620, + 0xA2BB4A9A, 0xADF85458, 0xFFFFFFFF, 0xFFFFFFFF +}; + +static const BN_ULONG ffdhe3072_p[] = { + 0xFFFFFFFF, 0xFFFFFFFF, 0x66C62E37, 0x25E41D2B, 0x3FD59D7C, 0x3C1B20EE, + 0xFA53DDEF, 0x0ABCD06B, 0xD5C4484E, 0x1DBF9A42, 0x9B0DEADA, 0xABC52197, + 0x22363A0D, 0xE86D2BC5, 0x9C9DF69E, 0x5CAE82AB, 0x71F54BFF, 0x64F2E21E, + 0xE2D74DD3, 0xF4FD4452, 0xBC437944, 0xB4130C93, 0x85139270, 0xAEFE1309, + 0xC186D91C, 0x598CB0FA, 0x91F7F7EE, 0x7AD91D26, 0xD6E6C907, 0x61B46FC9, + 0xF99C0238, 0xBC34F4DE, 0x6519035B, 0xDE355B3B, 0x611FCFDC, 0x886B4238, + 0xC1B2EFFA, 0xC6F34A26, 0x7D1683B2, 0xC58EF183, 0x2EC22005, 0x3BB5FCBC, + 0x4C6FAD73, 0xC3FE3B1B, 0xEEF28183, 0x8E4F1232, 0xE98583FF, 0x9172FE9C, + 0x28342F61, 0xC03404CD, 0xCDF7E2EC, 0x9E02FCE1, 0xEE0A6D70, 0x0B07A7C8, + 0x6372BB19, 0xAE56EDE7, 0xDE394DF4, 0x1D4F42A3, 0x60D7F468, 0xB96ADAB7, + 0xB2C8E3FB, 0xD108A94B, 0xB324FB61, 0xBC0AB182, 0x483A797A, 0x30ACCA4F, + 0x36ADE735, 0x1DF158A1, 0xF3EFE872, 0xE2A689DA, 0xE0E68B77, 0x984F0C70, + 0x7F57C935, 0xB557135E, 0x3DED1AF3, 0x85636555, 0x5F066ED0, 0x2433F51F, + 0xD5FD6561, 0xD3DF1ED5, 0xAEC4617A, 0xF681B202, 0x630C75D8, 0x7D2FE363, + 0x249B3EF9, 0xCC939DCE, 0x146433FB, 0xA9E13641, 0xCE2D3695, 0xD8B9C583, + 0x273D3CF1, 0xAFDC5620, 0xA2BB4A9A, 0xADF85458, 0xFFFFFFFF, 0xFFFFFFFF +}; + +static const BN_ULONG ffdhe4096_p[] = { + 0xFFFFFFFF, 0xFFFFFFFF, 0x5E655F6A, 0xC68A007E, 0xF44182E1, 0x4DB5A851, + 0x7F88A46B, 0x8EC9B55A, 0xCEC97DCF, 0x0A8291CD, 0xF98D0ACC, 0x2A4ECEA9, + 0x7140003C, 0x1A1DB93D, 0x33CB8B7A, 0x092999A3, 0x71AD0038, 0x6DC778F9, + 0x918130C4, 0xA907600A, 0x2D9E6832, 0xED6A1E01, 0xEFB4318A, 0x7135C886, + 0x7E31CC7A, 0x87F55BA5, 0x55034004, 0x7763CF1D, 0xD69F6D18, 0xAC7D5F42, + 0xE58857B6, 0x7930E9E4, 0x164DF4FB, 0x6E6F52C3, 0x669E1EF1, 0x25E41D2B, + 0x3FD59D7C, 0x3C1B20EE, 0xFA53DDEF, 0x0ABCD06B, 0xD5C4484E, 0x1DBF9A42, + 0x9B0DEADA, 0xABC52197, 0x22363A0D, 0xE86D2BC5, 0x9C9DF69E, 0x5CAE82AB, + 0x71F54BFF, 0x64F2E21E, 0xE2D74DD3, 0xF4FD4452, 0xBC437944, 0xB4130C93, + 0x85139270, 0xAEFE1309, 0xC186D91C, 0x598CB0FA, 0x91F7F7EE, 0x7AD91D26, + 0xD6E6C907, 0x61B46FC9, 0xF99C0238, 0xBC34F4DE, 0x6519035B, 0xDE355B3B, + 0x611FCFDC, 0x886B4238, 0xC1B2EFFA, 0xC6F34A26, 0x7D1683B2, 0xC58EF183, + 0x2EC22005, 0x3BB5FCBC, 0x4C6FAD73, 0xC3FE3B1B, 0xEEF28183, 0x8E4F1232, + 0xE98583FF, 0x9172FE9C, 0x28342F61, 0xC03404CD, 0xCDF7E2EC, 0x9E02FCE1, + 0xEE0A6D70, 0x0B07A7C8, 0x6372BB19, 0xAE56EDE7, 0xDE394DF4, 0x1D4F42A3, + 0x60D7F468, 0xB96ADAB7, 0xB2C8E3FB, 0xD108A94B, 0xB324FB61, 0xBC0AB182, + 0x483A797A, 0x30ACCA4F, 0x36ADE735, 0x1DF158A1, 0xF3EFE872, 0xE2A689DA, + 0xE0E68B77, 0x984F0C70, 0x7F57C935, 0xB557135E, 0x3DED1AF3, 0x85636555, + 0x5F066ED0, 0x2433F51F, 0xD5FD6561, 0xD3DF1ED5, 0xAEC4617A, 0xF681B202, + 0x630C75D8, 0x7D2FE363, 0x249B3EF9, 0xCC939DCE, 0x146433FB, 0xA9E13641, + 0xCE2D3695, 0xD8B9C583, 0x273D3CF1, 0xAFDC5620, 0xA2BB4A9A, 0xADF85458, + 0xFFFFFFFF, 0xFFFFFFFF +}; + +static const BN_ULONG ffdhe6144_p[] = { + 0xFFFFFFFF, 0xFFFFFFFF, 0xD0E40E65, 0xA40E329C, 0x7938DAD4, 0xA41D570D, + 0xD43161C1, 0x62A69526, 0x9ADB1E69, 0x3FDD4A8E, 0xDC6B80D6, 0x5B3B71F9, + 0xC6272B04, 0xEC9D1810, 0xCACEF403, 0x8CCF2DD5, 0xC95B9117, 0xE49F5235, + 0xB854338A, 0x505DC82D, 0x1562A846, 0x62292C31, 0x6AE77F5E, 0xD72B0374, + 0x462D538C, 0xF9C9091B, 0x47A67CBE, 0x0AE8DB58, 0x22611682, 0xB3A739C1, + 0x2A281BF6, 0xEEAAC023, 0x77CAF992, 0x94C6651E, 0x94B2BBC1, 0x763E4E4B, + 0x0077D9B4, 0x587E38DA, 0x183023C3, 0x7FB29F8C, 0xF9E3A26E, 0x0ABEC1FF, + 0x350511E3, 0xA00EF092, 0xDB6340D8, 0xB855322E, 0xA9A96910, 0xA52471F7, + 0x4CFDB477, 0x388147FB, 0x4E46041F, 0x9B1F5C3E, 0xFCCFEC71, 0xCDAD0657, + 0x4C701C3A, 0xB38E8C33, 0xB1C0FD4C, 0x917BDD64, 0x9B7624C8, 0x3BB45432, + 0xCAF53EA6, 0x23BA4442, 0x38532A3A, 0x4E677D2C, 0x45036C7A, 0x0BFD64B6, + 0x5E0DD902, 0xC68A007E, 0xF44182E1, 0x4DB5A851, 0x7F88A46B, 0x8EC9B55A, + 0xCEC97DCF, 0x0A8291CD, 0xF98D0ACC, 0x2A4ECEA9, 0x7140003C, 0x1A1DB93D, + 0x33CB8B7A, 0x092999A3, 0x71AD0038, 0x6DC778F9, 0x918130C4, 0xA907600A, + 0x2D9E6832, 0xED6A1E01, 0xEFB4318A, 0x7135C886, 0x7E31CC7A, 0x87F55BA5, + 0x55034004, 0x7763CF1D, 0xD69F6D18, 0xAC7D5F42, 0xE58857B6, 0x7930E9E4, + 0x164DF4FB, 0x6E6F52C3, 0x669E1EF1, 0x25E41D2B, 0x3FD59D7C, 0x3C1B20EE, + 0xFA53DDEF, 0x0ABCD06B, 0xD5C4484E, 0x1DBF9A42, 0x9B0DEADA, 0xABC52197, + 0x22363A0D, 0xE86D2BC5, 0x9C9DF69E, 0x5CAE82AB, 0x71F54BFF, 0x64F2E21E, + 0xE2D74DD3, 0xF4FD4452, 0xBC437944, 0xB4130C93, 0x85139270, 0xAEFE1309, + 0xC186D91C, 0x598CB0FA, 0x91F7F7EE, 0x7AD91D26, 0xD6E6C907, 0x61B46FC9, + 0xF99C0238, 0xBC34F4DE, 0x6519035B, 0xDE355B3B, 0x611FCFDC, 0x886B4238, + 0xC1B2EFFA, 0xC6F34A26, 0x7D1683B2, 0xC58EF183, 0x2EC22005, 0x3BB5FCBC, + 0x4C6FAD73, 0xC3FE3B1B, 0xEEF28183, 0x8E4F1232, 0xE98583FF, 0x9172FE9C, + 0x28342F61, 0xC03404CD, 0xCDF7E2EC, 0x9E02FCE1, 0xEE0A6D70, 0x0B07A7C8, + 0x6372BB19, 0xAE56EDE7, 0xDE394DF4, 0x1D4F42A3, 0x60D7F468, 0xB96ADAB7, + 0xB2C8E3FB, 0xD108A94B, 0xB324FB61, 0xBC0AB182, 0x483A797A, 0x30ACCA4F, + 0x36ADE735, 0x1DF158A1, 0xF3EFE872, 0xE2A689DA, 0xE0E68B77, 0x984F0C70, + 0x7F57C935, 0xB557135E, 0x3DED1AF3, 0x85636555, 0x5F066ED0, 0x2433F51F, + 0xD5FD6561, 0xD3DF1ED5, 0xAEC4617A, 0xF681B202, 0x630C75D8, 0x7D2FE363, + 0x249B3EF9, 0xCC939DCE, 0x146433FB, 0xA9E13641, 0xCE2D3695, 0xD8B9C583, + 0x273D3CF1, 0xAFDC5620, 0xA2BB4A9A, 0xADF85458, 0xFFFFFFFF, 0xFFFFFFFF +}; + +static const BN_ULONG ffdhe8192_p[] = { + 0xFFFFFFFF, 0xFFFFFFFF, 0xC5C6424C, 0xD68C8BB7, 0x838FF88C, 0x011E2A94, + 0xA9F4614E, 0x0822E506, 0xF7A8443D, 0x97D11D49, 0x30677F0D, 0xA6BBFDE5, + 0xC1FE86FE, 0x2F741EF8, 0x5D71A87E, 0xFAFABE1C, 0xFBE58A30, 0xDED2FBAB, + 0x72B0A66E, 0xB6855DFE, 0xBA8A4FE8, 0x1EFC8CE0, 0x3F2FA457, 0x83F81D4A, + 0xA577E231, 0xA1FE3075, 0x88D9C0A0, 0xD5B80194, 0xAD9A95F9, 0x624816CD, + 0x50C1217B, 0x99E9E316, 0x0E423CFC, 0x51AA691E, 0x3826E52C, 0x1C217E6C, + 0x09703FEE, 0x51A8A931, 0x6A460E74, 0xBB709987, 0x9C86B022, 0x541FC68C, + 0x46FD8251, 0x59160CC0, 0x35C35F5C, 0x2846C0BA, 0x8B758282, 0x54504AC7, + 0xD2AF05E4, 0x29388839, 0xC01BD702, 0xCB2C0F1C, 0x7C932665, 0x555B2F74, + 0xA3AB8829, 0x86B63142, 0xF64B10EF, 0x0B8CC3BD, 0xEDD1CC5E, 0x687FEB69, + 0xC9509D43, 0xFDB23FCE, 0xD951AE64, 0x1E425A31, 0xF600C838, 0x36AD004C, + 0xCFF46AAA, 0xA40E329C, 0x7938DAD4, 0xA41D570D, 0xD43161C1, 0x62A69526, + 0x9ADB1E69, 0x3FDD4A8E, 0xDC6B80D6, 0x5B3B71F9, 0xC6272B04, 0xEC9D1810, + 0xCACEF403, 0x8CCF2DD5, 0xC95B9117, 0xE49F5235, 0xB854338A, 0x505DC82D, + 0x1562A846, 0x62292C31, 0x6AE77F5E, 0xD72B0374, 0x462D538C, 0xF9C9091B, + 0x47A67CBE, 0x0AE8DB58, 0x22611682, 0xB3A739C1, 0x2A281BF6, 0xEEAAC023, + 0x77CAF992, 0x94C6651E, 0x94B2BBC1, 0x763E4E4B, 0x0077D9B4, 0x587E38DA, + 0x183023C3, 0x7FB29F8C, 0xF9E3A26E, 0x0ABEC1FF, 0x350511E3, 0xA00EF092, + 0xDB6340D8, 0xB855322E, 0xA9A96910, 0xA52471F7, 0x4CFDB477, 0x388147FB, + 0x4E46041F, 0x9B1F5C3E, 0xFCCFEC71, 0xCDAD0657, 0x4C701C3A, 0xB38E8C33, + 0xB1C0FD4C, 0x917BDD64, 0x9B7624C8, 0x3BB45432, 0xCAF53EA6, 0x23BA4442, + 0x38532A3A, 0x4E677D2C, 0x45036C7A, 0x0BFD64B6, 0x5E0DD902, 0xC68A007E, + 0xF44182E1, 0x4DB5A851, 0x7F88A46B, 0x8EC9B55A, 0xCEC97DCF, 0x0A8291CD, + 0xF98D0ACC, 0x2A4ECEA9, 0x7140003C, 0x1A1DB93D, 0x33CB8B7A, 0x092999A3, + 0x71AD0038, 0x6DC778F9, 0x918130C4, 0xA907600A, 0x2D9E6832, 0xED6A1E01, + 0xEFB4318A, 0x7135C886, 0x7E31CC7A, 0x87F55BA5, 0x55034004, 0x7763CF1D, + 0xD69F6D18, 0xAC7D5F42, 0xE58857B6, 0x7930E9E4, 0x164DF4FB, 0x6E6F52C3, + 0x669E1EF1, 0x25E41D2B, 0x3FD59D7C, 0x3C1B20EE, 0xFA53DDEF, 0x0ABCD06B, + 0xD5C4484E, 0x1DBF9A42, 0x9B0DEADA, 0xABC52197, 0x22363A0D, 0xE86D2BC5, + 0x9C9DF69E, 0x5CAE82AB, 0x71F54BFF, 0x64F2E21E, 0xE2D74DD3, 0xF4FD4452, + 0xBC437944, 0xB4130C93, 0x85139270, 0xAEFE1309, 0xC186D91C, 0x598CB0FA, + 0x91F7F7EE, 0x7AD91D26, 0xD6E6C907, 0x61B46FC9, 0xF99C0238, 0xBC34F4DE, + 0x6519035B, 0xDE355B3B, 0x611FCFDC, 0x886B4238, 0xC1B2EFFA, 0xC6F34A26, + 0x7D1683B2, 0xC58EF183, 0x2EC22005, 0x3BB5FCBC, 0x4C6FAD73, 0xC3FE3B1B, + 0xEEF28183, 0x8E4F1232, 0xE98583FF, 0x9172FE9C, 0x28342F61, 0xC03404CD, + 0xCDF7E2EC, 0x9E02FCE1, 0xEE0A6D70, 0x0B07A7C8, 0x6372BB19, 0xAE56EDE7, + 0xDE394DF4, 0x1D4F42A3, 0x60D7F468, 0xB96ADAB7, 0xB2C8E3FB, 0xD108A94B, + 0xB324FB61, 0xBC0AB182, 0x483A797A, 0x30ACCA4F, 0x36ADE735, 0x1DF158A1, + 0xF3EFE872, 0xE2A689DA, 0xE0E68B77, 0x984F0C70, 0x7F57C935, 0xB557135E, + 0x3DED1AF3, 0x85636555, 0x5F066ED0, 0x2433F51F, 0xD5FD6561, 0xD3DF1ED5, + 0xAEC4617A, 0xF681B202, 0x630C75D8, 0x7D2FE363, 0x249B3EF9, 0xCC939DCE, + 0x146433FB, 0xA9E13641, 0xCE2D3695, 0xD8B9C583, 0x273D3CF1, 0xAFDC5620, + 0xA2BB4A9A, 0xADF85458, 0xFFFFFFFF, 0xFFFFFFFF +}; + # else # error "unsupported BN_BITS2" # endif @@ -206,6 +487,10 @@ static const BN_ULONG dh2048_256_q[] = { OSSL_NELEM(x),\ 0, BN_FLG_STATIC_DATA }; +static const BN_ULONG value_2 = 2; + +const BIGNUM _bignum_const_2 = + { (BN_ULONG *)&value_2, 1, 1, 0, BN_FLG_STATIC_DATA }; make_dh_bn(dh1024_160_p) make_dh_bn(dh1024_160_g) @@ -217,4 +502,11 @@ make_dh_bn(dh2048_256_p) make_dh_bn(dh2048_256_g) make_dh_bn(dh2048_256_q) +make_dh_bn(ffdhe2048_p) +make_dh_bn(ffdhe3072_p) +make_dh_bn(ffdhe4096_p) +make_dh_bn(ffdhe6144_p) +make_dh_bn(ffdhe8192_p) + + #endif diff --git a/crypto/bn/bn_div.c b/crypto/bn/bn_div.c index 5e620b20..b9b85fda 100644 --- a/crypto/bn/bn_div.c +++ b/crypto/bn/bn_div.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -24,17 +24,17 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, bn_check_top(d); if (BN_is_zero(d)) { BNerr(BN_F_BN_DIV, BN_R_DIV_BY_ZERO); - return (0); + return 0; } if (BN_ucmp(m, d) < 0) { if (rem != NULL) { if (BN_copy(rem, m) == NULL) - return (0); + return 0; } if (dv != NULL) BN_zero(dv); - return (1); + return 1; } BN_CTX_start(ctx); @@ -81,7 +81,7 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, ret = 1; end: BN_CTX_end(ctx); - return (ret); + return ret; } #else @@ -97,8 +97,6 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, * understand why...); * - divl doesn't only calculate quotient, but also leaves * remainder in %edx which we can definitely use here:-) - * - * */ # undef bn_div_words # define bn_div_words(n0,n1,d0) \ @@ -113,7 +111,6 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, # elif defined(__x86_64) && defined(SIXTY_FOUR_BIT_LONG) /* * Same story here, but it's 128-bit by 64-bit division. Wow! - * */ # undef bn_div_words # define bn_div_words(n0,n1,d0) \ @@ -177,28 +174,25 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor, if (BN_is_zero(divisor)) { BNerr(BN_F_BN_DIV, BN_R_DIV_BY_ZERO); - return (0); + return 0; } if (!no_branch && BN_ucmp(num, divisor) < 0) { if (rm != NULL) { if (BN_copy(rm, num) == NULL) - return (0); + return 0; } if (dv != NULL) BN_zero(dv); - return (1); + return 1; } BN_CTX_start(ctx); + res = (dv == NULL) ? BN_CTX_get(ctx) : dv; tmp = BN_CTX_get(ctx); snum = BN_CTX_get(ctx); sdiv = BN_CTX_get(ctx); - if (dv == NULL) - res = BN_CTX_get(ctx); - else - res = dv; - if (sdiv == NULL || res == NULL || tmp == NULL || snum == NULL) + if (sdiv == NULL) goto err; /* First we normalise the numbers */ @@ -414,10 +408,10 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor, if (no_branch) bn_correct_top(res); BN_CTX_end(ctx); - return (1); + return 1; err: bn_check_top(rm); BN_CTX_end(ctx); - return (0); + return 0; } #endif diff --git a/crypto/bn/bn_err.c b/crypto/bn/bn_err.c index 5fe9db9e..e2817470 100644 --- a/crypto/bn/bn_err.c +++ b/crypto/bn/bn_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,87 +8,95 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_BN,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_BN,0,reason) - -static ERR_STRING_DATA BN_str_functs[] = { - {ERR_FUNC(BN_F_BNRAND), "bnrand"}, - {ERR_FUNC(BN_F_BN_BLINDING_CONVERT_EX), "BN_BLINDING_convert_ex"}, - {ERR_FUNC(BN_F_BN_BLINDING_CREATE_PARAM), "BN_BLINDING_create_param"}, - {ERR_FUNC(BN_F_BN_BLINDING_INVERT_EX), "BN_BLINDING_invert_ex"}, - {ERR_FUNC(BN_F_BN_BLINDING_NEW), "BN_BLINDING_new"}, - {ERR_FUNC(BN_F_BN_BLINDING_UPDATE), "BN_BLINDING_update"}, - {ERR_FUNC(BN_F_BN_BN2DEC), "BN_bn2dec"}, - {ERR_FUNC(BN_F_BN_BN2HEX), "BN_bn2hex"}, - {ERR_FUNC(BN_F_BN_COMPUTE_WNAF), "bn_compute_wNAF"}, - {ERR_FUNC(BN_F_BN_CTX_GET), "BN_CTX_get"}, - {ERR_FUNC(BN_F_BN_CTX_NEW), "BN_CTX_new"}, - {ERR_FUNC(BN_F_BN_CTX_START), "BN_CTX_start"}, - {ERR_FUNC(BN_F_BN_DIV), "BN_div"}, - {ERR_FUNC(BN_F_BN_DIV_RECP), "BN_div_recp"}, - {ERR_FUNC(BN_F_BN_EXP), "BN_exp"}, - {ERR_FUNC(BN_F_BN_EXPAND_INTERNAL), "bn_expand_internal"}, - {ERR_FUNC(BN_F_BN_GENCB_NEW), "BN_GENCB_new"}, - {ERR_FUNC(BN_F_BN_GENERATE_DSA_NONCE), "BN_generate_dsa_nonce"}, - {ERR_FUNC(BN_F_BN_GENERATE_PRIME_EX), "BN_generate_prime_ex"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD), "BN_GF2m_mod"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD_EXP), "BN_GF2m_mod_exp"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD_MUL), "BN_GF2m_mod_mul"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD), "BN_GF2m_mod_solve_quad"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR), "BN_GF2m_mod_solve_quad_arr"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD_SQR), "BN_GF2m_mod_sqr"}, - {ERR_FUNC(BN_F_BN_GF2M_MOD_SQRT), "BN_GF2m_mod_sqrt"}, - {ERR_FUNC(BN_F_BN_LSHIFT), "BN_lshift"}, - {ERR_FUNC(BN_F_BN_MOD_EXP2_MONT), "BN_mod_exp2_mont"}, - {ERR_FUNC(BN_F_BN_MOD_EXP_MONT), "BN_mod_exp_mont"}, - {ERR_FUNC(BN_F_BN_MOD_EXP_MONT_CONSTTIME), "BN_mod_exp_mont_consttime"}, - {ERR_FUNC(BN_F_BN_MOD_EXP_MONT_WORD), "BN_mod_exp_mont_word"}, - {ERR_FUNC(BN_F_BN_MOD_EXP_RECP), "BN_mod_exp_recp"}, - {ERR_FUNC(BN_F_BN_MOD_EXP_SIMPLE), "BN_mod_exp_simple"}, - {ERR_FUNC(BN_F_BN_MOD_INVERSE), "BN_mod_inverse"}, - {ERR_FUNC(BN_F_BN_MOD_INVERSE_NO_BRANCH), "BN_mod_inverse_no_branch"}, - {ERR_FUNC(BN_F_BN_MOD_LSHIFT_QUICK), "BN_mod_lshift_quick"}, - {ERR_FUNC(BN_F_BN_MOD_SQRT), "BN_mod_sqrt"}, - {ERR_FUNC(BN_F_BN_MPI2BN), "BN_mpi2bn"}, - {ERR_FUNC(BN_F_BN_NEW), "BN_new"}, - {ERR_FUNC(BN_F_BN_RAND), "BN_rand"}, - {ERR_FUNC(BN_F_BN_RAND_RANGE), "BN_rand_range"}, - {ERR_FUNC(BN_F_BN_RSHIFT), "BN_rshift"}, - {ERR_FUNC(BN_F_BN_SET_WORDS), "bn_set_words"}, - {ERR_FUNC(BN_F_BN_USUB), "BN_usub"}, +static const ERR_STRING_DATA BN_str_functs[] = { + {ERR_PACK(ERR_LIB_BN, BN_F_BNRAND, 0), "bnrand"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BNRAND_RANGE, 0), "bnrand_range"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BLINDING_CONVERT_EX, 0), + "BN_BLINDING_convert_ex"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BLINDING_CREATE_PARAM, 0), + "BN_BLINDING_create_param"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BLINDING_INVERT_EX, 0), + "BN_BLINDING_invert_ex"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BLINDING_NEW, 0), "BN_BLINDING_new"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BLINDING_UPDATE, 0), "BN_BLINDING_update"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BN2DEC, 0), "BN_bn2dec"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_BN2HEX, 0), "BN_bn2hex"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_COMPUTE_WNAF, 0), "bn_compute_wNAF"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_CTX_GET, 0), "BN_CTX_get"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_CTX_NEW, 0), "BN_CTX_new"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_CTX_START, 0), "BN_CTX_start"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_DIV, 0), "BN_div"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_DIV_RECP, 0), "BN_div_recp"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_EXP, 0), "BN_exp"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_EXPAND_INTERNAL, 0), "bn_expand_internal"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GENCB_NEW, 0), "BN_GENCB_new"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GENERATE_DSA_NONCE, 0), + "BN_generate_dsa_nonce"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GENERATE_PRIME_EX, 0), + "BN_generate_prime_ex"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD, 0), "BN_GF2m_mod"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD_EXP, 0), "BN_GF2m_mod_exp"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD_MUL, 0), "BN_GF2m_mod_mul"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD_SOLVE_QUAD, 0), + "BN_GF2m_mod_solve_quad"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR, 0), + "BN_GF2m_mod_solve_quad_arr"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD_SQR, 0), "BN_GF2m_mod_sqr"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_GF2M_MOD_SQRT, 0), "BN_GF2m_mod_sqrt"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_LSHIFT, 0), "BN_lshift"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_EXP2_MONT, 0), "BN_mod_exp2_mont"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_EXP_MONT, 0), "BN_mod_exp_mont"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_EXP_MONT_CONSTTIME, 0), + "BN_mod_exp_mont_consttime"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_EXP_MONT_WORD, 0), + "BN_mod_exp_mont_word"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_EXP_RECP, 0), "BN_mod_exp_recp"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_EXP_SIMPLE, 0), "BN_mod_exp_simple"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_INVERSE, 0), "BN_mod_inverse"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_INVERSE_NO_BRANCH, 0), + "BN_mod_inverse_no_branch"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_LSHIFT_QUICK, 0), "BN_mod_lshift_quick"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MOD_SQRT, 0), "BN_mod_sqrt"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_MPI2BN, 0), "BN_mpi2bn"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_NEW, 0), "BN_new"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_RAND, 0), "BN_rand"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_RAND_RANGE, 0), "BN_rand_range"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_RSHIFT, 0), "BN_rshift"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_SET_WORDS, 0), "bn_set_words"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_USUB, 0), "BN_usub"}, {0, NULL} }; -static ERR_STRING_DATA BN_str_reasons[] = { - {ERR_REASON(BN_R_ARG2_LT_ARG3), "arg2 lt arg3"}, - {ERR_REASON(BN_R_BAD_RECIPROCAL), "bad reciprocal"}, - {ERR_REASON(BN_R_BIGNUM_TOO_LONG), "bignum too long"}, - {ERR_REASON(BN_R_BITS_TOO_SMALL), "bits too small"}, - {ERR_REASON(BN_R_CALLED_WITH_EVEN_MODULUS), "called with even modulus"}, - {ERR_REASON(BN_R_DIV_BY_ZERO), "div by zero"}, - {ERR_REASON(BN_R_ENCODING_ERROR), "encoding error"}, - {ERR_REASON(BN_R_EXPAND_ON_STATIC_BIGNUM_DATA), - "expand on static bignum data"}, - {ERR_REASON(BN_R_INPUT_NOT_REDUCED), "input not reduced"}, - {ERR_REASON(BN_R_INVALID_LENGTH), "invalid length"}, - {ERR_REASON(BN_R_INVALID_RANGE), "invalid range"}, - {ERR_REASON(BN_R_INVALID_SHIFT), "invalid shift"}, - {ERR_REASON(BN_R_NOT_A_SQUARE), "not a square"}, - {ERR_REASON(BN_R_NOT_INITIALIZED), "not initialized"}, - {ERR_REASON(BN_R_NO_INVERSE), "no inverse"}, - {ERR_REASON(BN_R_NO_SOLUTION), "no solution"}, - {ERR_REASON(BN_R_PRIVATE_KEY_TOO_LARGE), "private key too large"}, - {ERR_REASON(BN_R_P_IS_NOT_PRIME), "p is not prime"}, - {ERR_REASON(BN_R_TOO_MANY_ITERATIONS), "too many iterations"}, - {ERR_REASON(BN_R_TOO_MANY_TEMPORARY_VARIABLES), - "too many temporary variables"}, +static const ERR_STRING_DATA BN_str_reasons[] = { + {ERR_PACK(ERR_LIB_BN, 0, BN_R_ARG2_LT_ARG3), "arg2 lt arg3"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_BAD_RECIPROCAL), "bad reciprocal"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_BIGNUM_TOO_LONG), "bignum too long"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_BITS_TOO_SMALL), "bits too small"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_CALLED_WITH_EVEN_MODULUS), + "called with even modulus"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_DIV_BY_ZERO), "div by zero"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_ENCODING_ERROR), "encoding error"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA), + "expand on static bignum data"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_INPUT_NOT_REDUCED), "input not reduced"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_INVALID_LENGTH), "invalid length"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_INVALID_RANGE), "invalid range"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_INVALID_SHIFT), "invalid shift"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_NOT_A_SQUARE), "not a square"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_NOT_INITIALIZED), "not initialized"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_NO_INVERSE), "no inverse"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_NO_SOLUTION), "no solution"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_PRIVATE_KEY_TOO_LARGE), + "private key too large"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_P_IS_NOT_PRIME), "p is not prime"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_TOO_MANY_ITERATIONS), "too many iterations"}, + {ERR_PACK(ERR_LIB_BN, 0, BN_R_TOO_MANY_TEMPORARY_VARIABLES), + "too many temporary variables"}, {0, NULL} }; @@ -97,10 +105,9 @@ static ERR_STRING_DATA BN_str_reasons[] = { int ERR_load_BN_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(BN_str_functs[0].error) == NULL) { - ERR_load_strings(0, BN_str_functs); - ERR_load_strings(0, BN_str_reasons); + ERR_load_strings_const(BN_str_functs); + ERR_load_strings_const(BN_str_reasons); } #endif return 1; diff --git a/crypto/bn/bn_exp.c b/crypto/bn/bn_exp.c index 0d2d1eca..9b2042db 100644 --- a/crypto/bn/bn_exp.c +++ b/crypto/bn/bn_exp.c @@ -51,10 +51,7 @@ int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) } BN_CTX_start(ctx); - if ((r == a) || (r == p)) - rr = BN_CTX_get(ctx); - else - rr = r; + rr = ((r == a) || (r == p)) ? BN_CTX_get(ctx) : r; v = BN_CTX_get(ctx); if (rr == NULL || v == NULL) goto err; @@ -86,7 +83,7 @@ int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) err: BN_CTX_end(ctx); bn_check_top(r); - return (ret); + return ret; } int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, @@ -134,13 +131,6 @@ int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, #define RECP_MUL_MOD #ifdef MONT_MUL_MOD - /* - * I have finally been able to take out this pre-condition of the top bit - * being set. It was caused by an error in BN_div with negatives. There - * was also another problem when for a^b%m a >= m. eay 07-May-97 - */ - /* if ((m->d[m->top-1]&BN_TBIT) && BN_is_odd(m)) */ - if (BN_is_odd(m)) { # ifdef MONT_EXP_WORD if (a->top == 1 && !a->neg @@ -165,7 +155,7 @@ int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m, #endif bn_check_top(r); - return (ret); + return ret; } int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, @@ -201,7 +191,7 @@ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX_start(ctx); aa = BN_CTX_get(ctx); val[0] = BN_CTX_get(ctx); - if (!aa || !val[0]) + if (val[0] == NULL) goto err; BN_RECP_CTX_init(&recp); @@ -300,7 +290,7 @@ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX_end(ctx); BN_RECP_CTX_free(&recp); bn_check_top(r); - return (ret); + return ret; } int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, @@ -326,7 +316,7 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, if (!BN_is_odd(m)) { BNerr(BN_F_BN_MOD_EXP_MONT, BN_R_CALLED_WITH_EVEN_MODULUS); - return (0); + return 0; } bits = BN_num_bits(p); if (bits == 0) { @@ -344,7 +334,7 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, d = BN_CTX_get(ctx); r = BN_CTX_get(ctx); val[0] = BN_CTX_get(ctx); - if (!d || !r || !val[0]) + if (val[0] == NULL) goto err; /* @@ -480,7 +470,7 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, BN_MONT_CTX_free(mont); BN_CTX_end(ctx); bn_check_top(rr); - return (ret); + return ret; } #if defined(SPARC_T4_MONT) @@ -628,7 +618,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, if (!BN_is_odd(m)) { BNerr(BN_F_BN_MOD_EXP_MONT_CONSTTIME, BN_R_CALLED_WITH_EVEN_MODULUS); - return (0); + return 0; } top = m->top; @@ -665,31 +655,33 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, } #ifdef RSAZ_ENABLED - /* - * If the size of the operands allow it, perform the optimized - * RSAZ exponentiation. For further information see - * crypto/bn/rsaz_exp.c and accompanying assembly modules. - */ - if ((16 == a->top) && (16 == p->top) && (BN_num_bits(m) == 1024) - && rsaz_avx2_eligible()) { - if (NULL == bn_wexpand(rr, 16)) + if (!a->neg) { + /* + * If the size of the operands allow it, perform the optimized + * RSAZ exponentiation. For further information see + * crypto/bn/rsaz_exp.c and accompanying assembly modules. + */ + if ((16 == a->top) && (16 == p->top) && (BN_num_bits(m) == 1024) + && rsaz_avx2_eligible()) { + if (NULL == bn_wexpand(rr, 16)) + goto err; + RSAZ_1024_mod_exp_avx2(rr->d, a->d, p->d, m->d, mont->RR.d, + mont->n0[0]); + rr->top = 16; + rr->neg = 0; + bn_correct_top(rr); + ret = 1; goto err; - RSAZ_1024_mod_exp_avx2(rr->d, a->d, p->d, m->d, mont->RR.d, - mont->n0[0]); - rr->top = 16; - rr->neg = 0; - bn_correct_top(rr); - ret = 1; - goto err; - } else if ((8 == a->top) && (8 == p->top) && (BN_num_bits(m) == 512)) { - if (NULL == bn_wexpand(rr, 8)) + } else if ((8 == a->top) && (8 == p->top) && (BN_num_bits(m) == 512)) { + if (NULL == bn_wexpand(rr, 8)) + goto err; + RSAZ_512_mod_exp(rr->d, a->d, p->d, m->d, mont->n0[0], mont->RR.d); + rr->top = 8; + rr->neg = 0; + bn_correct_top(rr); + ret = 1; goto err; - RSAZ_512_mod_exp(rr->d, a->d, p->d, m->d, mont->n0[0], mont->RR.d); - rr->top = 8; - rr->neg = 0; - bn_correct_top(rr); - ret = 1; - goto err; + } } #endif @@ -762,7 +754,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, /* prepare a^1 in Montgomery domain */ if (a->neg || BN_ucmp(a, m) >= 0) { - if (!BN_mod(&am, a, m, ctx)) + if (!BN_nnmod(&am, a, m, ctx)) goto err; if (!BN_to_montgomery(&am, &am, mont, ctx)) goto err; @@ -1103,7 +1095,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, OPENSSL_free(powerbufFree); } BN_CTX_end(ctx); - return (ret); + return ret; } int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, @@ -1113,7 +1105,7 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, int b, bits, ret = 0; int r_is_one; BN_ULONG w, next_w; - BIGNUM *d, *r, *t; + BIGNUM *r, *t; BIGNUM *swap_tmp; #define BN_MOD_MUL_WORD(r, w, m) \ (BN_mul_word(r, (w)) && \ @@ -1144,7 +1136,7 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, if (!BN_is_odd(m)) { BNerr(BN_F_BN_MOD_EXP_MONT_WORD, BN_R_CALLED_WITH_EVEN_MODULUS); - return (0); + return 0; } if (m->top == 1) a %= m->d[0]; /* make sure that 'a' is reduced */ @@ -1167,10 +1159,9 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, } BN_CTX_start(ctx); - d = BN_CTX_get(ctx); r = BN_CTX_get(ctx); t = BN_CTX_get(ctx); - if (d == NULL || r == NULL || t == NULL) + if (t == NULL) goto err; if (in_mont != NULL) @@ -1251,7 +1242,7 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p, BN_MONT_CTX_free(mont); BN_CTX_end(ctx); bn_check_top(rr); - return (ret); + return ret; } /* The old fallback, simple version :-) */ @@ -1273,7 +1264,7 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, } bits = BN_num_bits(p); - if (bits == 0) { + if (bits == 0) { /* x**0 mod 1 is still zero. */ if (BN_is_one(m)) { ret = 1; @@ -1287,7 +1278,7 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX_start(ctx); d = BN_CTX_get(ctx); val[0] = BN_CTX_get(ctx); - if (!d || !val[0]) + if (val[0] == NULL) goto err; if (!BN_nnmod(val[0], a, m, ctx)) @@ -1372,5 +1363,5 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, err: BN_CTX_end(ctx); bn_check_top(r); - return (ret); + return ret; } diff --git a/crypto/bn/bn_exp2.c b/crypto/bn/bn_exp2.c index 5141c21f..082c9286 100644 --- a/crypto/bn/bn_exp2.c +++ b/crypto/bn/bn_exp2.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -34,7 +34,7 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1, if (!(m->d[0] & 1)) { BNerr(BN_F_BN_MOD_EXP2_MONT, BN_R_CALLED_WITH_EVEN_MODULUS); - return (0); + return 0; } bits1 = BN_num_bits(p1); bits2 = BN_num_bits(p2); @@ -50,7 +50,7 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1, r = BN_CTX_get(ctx); val1[0] = BN_CTX_get(ctx); val2[0] = BN_CTX_get(ctx); - if (!d || !r || !val1[0] || !val2[0]) + if (val2[0] == NULL) goto err; if (in_mont != NULL) @@ -197,5 +197,5 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1, BN_MONT_CTX_free(mont); BN_CTX_end(ctx); bn_check_top(rr); - return (ret); + return ret; } diff --git a/crypto/bn/bn_gcd.c b/crypto/bn/bn_gcd.c index 06764264..22f80939 100644 --- a/crypto/bn/bn_gcd.c +++ b/crypto/bn/bn_gcd.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -23,7 +23,7 @@ int BN_gcd(BIGNUM *r, const BIGNUM *in_a, const BIGNUM *in_b, BN_CTX *ctx) BN_CTX_start(ctx); a = BN_CTX_get(ctx); b = BN_CTX_get(ctx); - if (a == NULL || b == NULL) + if (b == NULL) goto err; if (BN_copy(a, in_a) == NULL) @@ -48,7 +48,7 @@ int BN_gcd(BIGNUM *r, const BIGNUM *in_a, const BIGNUM *in_b, BN_CTX *ctx) err: BN_CTX_end(ctx); bn_check_top(r); - return (ret); + return ret; } static BIGNUM *euclid(BIGNUM *a, BIGNUM *b) @@ -111,9 +111,9 @@ static BIGNUM *euclid(BIGNUM *a, BIGNUM *b) goto err; } bn_check_top(a); - return (a); + return a; err: - return (NULL); + return NULL; } /* solves ax == 1 (mod n) */ @@ -441,7 +441,7 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in, BN_free(R); BN_CTX_end(ctx); bn_check_top(ret); - return (ret); + return ret; } /* @@ -612,5 +612,5 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, BN_free(R); BN_CTX_end(ctx); bn_check_top(ret); - return (ret); + return ret; } diff --git a/crypto/bn/bn_gf2m.c b/crypto/bn/bn_gf2m.c index b1987f55..16868f79 100644 --- a/crypto/bn/bn_gf2m.c +++ b/crypto/bn/bn_gf2m.c @@ -1,5 +1,6 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2017 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 @@ -7,17 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - */ - #include #include #include @@ -567,13 +557,11 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) BN_CTX_start(ctx); - if ((b = BN_CTX_get(ctx)) == NULL) - goto err; - if ((c = BN_CTX_get(ctx)) == NULL) - goto err; - if ((u = BN_CTX_get(ctx)) == NULL) - goto err; - if ((v = BN_CTX_get(ctx)) == NULL) + b = BN_CTX_get(ctx); + c = BN_CTX_get(ctx); + u = BN_CTX_get(ctx); + v = BN_CTX_get(ctx); + if (v == NULL) goto err; if (!BN_GF2m_mod(u, a, p)) @@ -916,7 +904,7 @@ int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, bn_check_top(b); if (BN_is_zero(b)) - return (BN_one(r)); + return BN_one(r); if (BN_abs_is_word(b, 1)) return (BN_copy(r, a) != NULL); @@ -1089,7 +1077,7 @@ int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a_, const int p[], if (tmp == NULL) goto err; do { - if (!BN_rand(rho, p[0], BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) + if (!BN_priv_rand(rho, p[0], BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) goto err; if (!BN_GF2m_mod_arr(rho, rho, p)) goto err; diff --git a/crypto/bn/bn_intern.c b/crypto/bn/bn_intern.c index 2c970647..2524eb2a 100644 --- a/crypto/bn/bn_intern.c +++ b/crypto/bn/bn_intern.c @@ -143,11 +143,6 @@ int bn_get_top(const BIGNUM *a) return a->top; } -void bn_set_top(BIGNUM *a, int top) -{ - a->top = top; -} - int bn_get_dmax(const BIGNUM *a) { return a->dmax; @@ -198,13 +193,3 @@ int bn_set_words(BIGNUM *a, BN_ULONG *words, int num_words) bn_correct_top(a); return 1; } - -size_t bn_sizeof_BIGNUM(void) -{ - return sizeof(BIGNUM); -} - -BIGNUM *bn_array_el(BIGNUM *base, int el) -{ - return &base[el]; -} diff --git a/crypto/bn/bn_lcl.h b/crypto/bn/bn_lcl.h index 5fb38145..bab2c9d7 100644 --- a/crypto/bn/bn_lcl.h +++ b/crypto/bn/bn_lcl.h @@ -145,13 +145,8 @@ extern "C" { */ # ifdef BN_DEBUG - +# include # ifdef BN_DEBUG_RAND -/* To avoid "make update" cvs wars due to BN_DEBUG, use some tricks */ -# ifndef RAND_bytes -int RAND_bytes(unsigned char *buf, int num); -# define BN_DEBUG_TRIX -# endif # define bn_pollute(a) \ do { \ const BIGNUM *_bnum1 = (a); \ @@ -167,9 +162,6 @@ int RAND_bytes(unsigned char *buf, int num); sizeof(*_not_const) * (_bnum1->dmax - _bnum1->top)); \ } \ } while(0) -# ifdef BN_DEBUG_TRIX -# undef RAND_bytes -# endif # else # define bn_pollute(a) # endif @@ -177,8 +169,8 @@ int RAND_bytes(unsigned char *buf, int num); do { \ const BIGNUM *_bnum2 = (a); \ if (_bnum2 != NULL) { \ - OPENSSL_assert(((_bnum2->top == 0) && !_bnum2->neg) || \ - (_bnum2->top && (_bnum2->d[_bnum2->top - 1] != 0))); \ + assert(((_bnum2->top == 0) && !_bnum2->neg) || \ + (_bnum2->top && (_bnum2->d[_bnum2->top - 1] != 0))); \ bn_pollute(_bnum2); \ } \ } while(0) @@ -189,8 +181,8 @@ int RAND_bytes(unsigned char *buf, int num); # define bn_wcheck_size(bn, words) \ do { \ const BIGNUM *_bnum2 = (bn); \ - OPENSSL_assert((words) <= (_bnum2)->dmax && \ - (words) >= (_bnum2)->top); \ + assert((words) <= (_bnum2)->dmax && \ + (words) >= (_bnum2)->top); \ /* avoid unused variable warning with NDEBUG */ \ (void)(_bnum2); \ } while(0) @@ -357,59 +349,58 @@ struct bn_gencb_st { # if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) && !defined(PEDANTIC) /* * BN_UMULT_HIGH section. - * - * No, I'm not trying to overwhelm you when stating that the - * product of N-bit numbers is 2*N bits wide:-) No, I don't expect - * you to be impressed when I say that if the compiler doesn't - * support 2*N integer type, then you have to replace every N*N - * multiplication with 4 (N/2)*(N/2) accompanied by some shifts - * and additions which unavoidably results in severe performance - * penalties. Of course provided that the hardware is capable of - * producing 2*N result... That's when you normally start - * considering assembler implementation. However! It should be - * pointed out that some CPUs (most notably Alpha, PowerPC and - * upcoming IA-64 family:-) provide *separate* instruction - * calculating the upper half of the product placing the result - * into a general purpose register. Now *if* the compiler supports - * inline assembler, then it's not impossible to implement the - * "bignum" routines (and have the compiler optimize 'em) - * exhibiting "native" performance in C. That's what BN_UMULT_HIGH - * macro is about:-) - * - * + * If the compiler doesn't support 2*N integer type, then you have to + * replace every N*N multiplication with 4 (N/2)*(N/2) accompanied by some + * shifts and additions which unavoidably results in severe performance + * penalties. Of course provided that the hardware is capable of producing + * 2*N result... That's when you normally start considering assembler + * implementation. However! It should be pointed out that some CPUs (e.g., + * PowerPC, Alpha, and IA-64) provide *separate* instruction calculating + * the upper half of the product placing the result into a general + * purpose register. Now *if* the compiler supports inline assembler, + * then it's not impossible to implement the "bignum" routines (and have + * the compiler optimize 'em) exhibiting "native" performance in C. That's + * what BN_UMULT_HIGH macro is about:-) Note that more recent compilers do + * support 2*64 integer type, which is also used here. */ -# if defined(__alpha) && (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT)) +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 && \ + (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)) +# define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64) +# define BN_UMULT_LOHI(low,high,a,b) ({ \ + __uint128_t ret=(__uint128_t)(a)*(b); \ + (high)=ret>>64; (low)=ret; }) +# elif defined(__alpha) && (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT)) # if defined(__DECC) # include # define BN_UMULT_HIGH(a,b) (BN_ULONG)asm("umulh %a0,%a1,%v0",(a),(b)) # elif defined(__GNUC__) && __GNUC__>=2 -# define BN_UMULT_HIGH(a,b) ({ \ +# define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret; \ asm ("umulh %1,%2,%0" \ : "=r"(ret) \ : "r"(a), "r"(b)); \ - ret; }) + ret; }) # endif /* compiler */ -# elif defined(_ARCH_PPC) && defined(__64BIT__) && defined(SIXTY_FOUR_BIT_LONG) +# elif defined(_ARCH_PPC64) && defined(SIXTY_FOUR_BIT_LONG) # if defined(__GNUC__) && __GNUC__>=2 -# define BN_UMULT_HIGH(a,b) ({ \ +# define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret; \ asm ("mulhdu %0,%1,%2" \ : "=r"(ret) \ : "r"(a), "r"(b)); \ - ret; }) + ret; }) # endif /* compiler */ # elif (defined(__x86_64) || defined(__x86_64__)) && \ (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT)) # if defined(__GNUC__) && __GNUC__>=2 -# define BN_UMULT_HIGH(a,b) ({ \ +# define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret,discard; \ asm ("mulq %3" \ : "=a"(discard),"=d"(ret) \ : "a"(a), "g"(b) \ : "cc"); \ - ret; }) -# define BN_UMULT_LOHI(low,high,a,b) \ + ret; }) +# define BN_UMULT_LOHI(low,high,a,b) \ asm ("mulq %3" \ : "=a"(low),"=d"(high) \ : "a"(a),"g"(b) \ @@ -426,43 +417,29 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, # endif # elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)) # if defined(__GNUC__) && __GNUC__>=2 -# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 - /* "h" constraint is not an option on R6 and was removed in 4.4 */ -# define BN_UMULT_HIGH(a,b) (((__uint128_t)(a)*(b))>>64) -# define BN_UMULT_LOHI(low,high,a,b) ({ \ - __uint128_t ret=(__uint128_t)(a)*(b); \ - (high)=ret>>64; (low)=ret; }) -# else -# define BN_UMULT_HIGH(a,b) ({ \ +# define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret; \ asm ("dmultu %1,%2" \ : "=h"(ret) \ : "r"(a), "r"(b) : "l"); \ ret; }) -# define BN_UMULT_LOHI(low,high,a,b)\ +# define BN_UMULT_LOHI(low,high,a,b) \ asm ("dmultu %2,%3" \ : "=l"(low),"=h"(high) \ : "r"(a), "r"(b)); -# endif # endif # elif defined(__aarch64__) && defined(SIXTY_FOUR_BIT_LONG) # if defined(__GNUC__) && __GNUC__>=2 -# define BN_UMULT_HIGH(a,b) ({ \ +# define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret; \ asm ("umulh %0,%1,%2" \ : "=r"(ret) \ : "r"(a), "r"(b)); \ - ret; }) + ret; }) # endif # endif /* cpu */ # endif /* OPENSSL_NO_ASM */ -/************************************************************* - * Using the long long type - */ -# define Lw(t) (((BN_ULONG)(t))&BN_MASK2) -# define Hw(t) (((BN_ULONG)((t)>>BN_BITS2))&BN_MASK2) - # ifdef BN_DEBUG_RAND # define bn_clear_top2max(a) \ { \ @@ -476,6 +453,12 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, # endif # ifdef BN_LLONG +/******************************************************************* + * Using the long long type, has to be twice as wide as BN_ULONG... + */ +# define Lw(t) (((BN_ULONG)(t))&BN_MASK2) +# define Hw(t) (((BN_ULONG)((t)>>BN_BITS2))&BN_MASK2) + # define mul_add(r,a,w,c) { \ BN_ULLONG t; \ t=(BN_ULLONG)w * (a) + (r) + (c); \ @@ -653,10 +636,6 @@ void bn_sqr_recursive(BN_ULONG *r, const BN_ULONG *a, int n2, BN_ULONG *t); void bn_mul_low_normal(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n); void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2, BN_ULONG *t); -void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l, int n2, - BN_ULONG *t); -BN_ULONG bn_add_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, - int cl, int dl); BN_ULONG bn_sub_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int cl, int dl); int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, @@ -668,8 +647,6 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in, int bn_probable_prime_dh(BIGNUM *rnd, int bits, const BIGNUM *add, const BIGNUM *rem, BN_CTX *ctx); -int bn_probable_prime_dh_retry(BIGNUM *rnd, int bits, BN_CTX *ctx); -int bn_probable_prime_dh_coprime(BIGNUM *rnd, int bits, BN_CTX *ctx); static ossl_inline BIGNUM *bn_expand(BIGNUM *a, int bits) { diff --git a/crypto/bn/bn_lib.c b/crypto/bn/bn_lib.c index 70584940..57fe4528 100644 --- a/crypto/bn/bn_lib.c +++ b/crypto/bn/bn_lib.c @@ -65,15 +65,15 @@ void BN_set_params(int mult, int high, int low, int mont) int BN_get_params(int which) { if (which == 0) - return (bn_limit_bits); + return bn_limit_bits; else if (which == 1) - return (bn_limit_bits_high); + return bn_limit_bits_high; else if (which == 2) - return (bn_limit_bits_low); + return bn_limit_bits_low; else if (which == 3) - return (bn_limit_bits_mont); + return bn_limit_bits_mont; else - return (0); + return 0; } #endif @@ -83,7 +83,7 @@ const BIGNUM *BN_value_one(void) static const BIGNUM const_one = { (BN_ULONG *)&data_one, 1, 1, 0, BN_FLG_STATIC_DATA }; - return (&const_one); + return &const_one; } int BN_num_bits_word(BN_ULONG l) @@ -152,37 +152,26 @@ static void bn_free_d(BIGNUM *a) void BN_clear_free(BIGNUM *a) { - int i; - if (a == NULL) return; - bn_check_top(a); - if (a->d != NULL) { + if (a->d != NULL && !BN_get_flags(a, BN_FLG_STATIC_DATA)) { OPENSSL_cleanse(a->d, a->dmax * sizeof(a->d[0])); - if (!BN_get_flags(a, BN_FLG_STATIC_DATA)) - bn_free_d(a); + bn_free_d(a); } - i = BN_get_flags(a, BN_FLG_MALLOCED); - OPENSSL_cleanse(a, sizeof(*a)); - if (i) + if (BN_get_flags(a, BN_FLG_MALLOCED)) { + OPENSSL_cleanse(a, sizeof(*a)); OPENSSL_free(a); + } } void BN_free(BIGNUM *a) { if (a == NULL) return; - bn_check_top(a); if (!BN_get_flags(a, BN_FLG_STATIC_DATA)) bn_free_d(a); if (a->flags & BN_FLG_MALLOCED) OPENSSL_free(a); - else { -#if OPENSSL_API_COMPAT < 0x00908000L - a->flags |= BN_FLG_FREE; -#endif - a->d = NULL; - } } void bn_init(BIGNUM *a) @@ -199,11 +188,11 @@ BIGNUM *BN_new(void) if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) { BNerr(BN_F_BN_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } ret->flags = BN_FLG_MALLOCED; bn_check_top(ret); - return (ret); + return ret; } BIGNUM *BN_secure_new(void) @@ -211,16 +200,14 @@ BIGNUM *BN_new(void) BIGNUM *ret = BN_new(); if (ret != NULL) ret->flags |= BN_FLG_SECURE; - return (ret); + return ret; } /* This is used by bn_expand2() */ /* The caller MUST check that words > b->dmax before calling this */ static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words) { - BN_ULONG *A, *a = NULL; - const BN_ULONG *B; - int i; + BN_ULONG *a = NULL; bn_check_top(b); @@ -230,62 +217,22 @@ static BN_ULONG *bn_expand_internal(const BIGNUM *b, int words) } if (BN_get_flags(b, BN_FLG_STATIC_DATA)) { BNerr(BN_F_BN_EXPAND_INTERNAL, BN_R_EXPAND_ON_STATIC_BIGNUM_DATA); - return (NULL); + return NULL; } if (BN_get_flags(b, BN_FLG_SECURE)) - a = A = OPENSSL_secure_zalloc(words * sizeof(*a)); + a = OPENSSL_secure_zalloc(words * sizeof(*a)); else - a = A = OPENSSL_zalloc(words * sizeof(*a)); - if (A == NULL) { + a = OPENSSL_zalloc(words * sizeof(*a)); + if (a == NULL) { BNerr(BN_F_BN_EXPAND_INTERNAL, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } -#if 1 - B = b->d; - /* Check if the previous number needs to be copied */ - if (B != NULL) { - for (i = b->top >> 2; i > 0; i--, A += 4, B += 4) { - /* - * The fact that the loop is unrolled - * 4-wise is a tribute to Intel. It's - * the one that doesn't have enough - * registers to accommodate more data. - * I'd unroll it 8-wise otherwise:-) - * - * - */ - BN_ULONG a0, a1, a2, a3; - a0 = B[0]; - a1 = B[1]; - a2 = B[2]; - a3 = B[3]; - A[0] = a0; - A[1] = a1; - A[2] = a2; - A[3] = a3; - } - switch (b->top & 3) { - case 3: - A[2] = B[2]; - /* fall thru */ - case 2: - A[1] = B[1]; - /* fall thru */ - case 1: - A[0] = B[0]; - /* fall thru */ - case 0: - /* Without the "case 0" some old optimizers got this wrong. */ - ; - } - } -#else - memset(A, 0, sizeof(*A) * words); - memcpy(A, b->d, sizeof(b->d[0]) * b->top); -#endif + assert(b->top <= words); + if (b->top > 0) + memcpy(a, b->d, sizeof(*a) * b->top); - return (a); + return a; } /* @@ -337,52 +284,20 @@ BIGNUM *BN_dup(const BIGNUM *a) BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b) { - int i; - BN_ULONG *A; - const BN_ULONG *B; - bn_check_top(b); if (a == b) - return (a); + return a; if (bn_wexpand(a, b->top) == NULL) - return (NULL); + return NULL; -#if 1 - A = a->d; - B = b->d; - for (i = b->top >> 2; i > 0; i--, A += 4, B += 4) { - BN_ULONG a0, a1, a2, a3; - a0 = B[0]; - a1 = B[1]; - a2 = B[2]; - a3 = B[3]; - A[0] = a0; - A[1] = a1; - A[2] = a2; - A[3] = a3; - } - /* ultrix cc workaround, see comments in bn_expand_internal */ - switch (b->top & 3) { - case 3: - A[2] = B[2]; - /* fall thru */ - case 2: - A[1] = B[1]; - /* fall thru */ - case 1: - A[0] = B[0]; - /* fall thru */ - case 0:; - } -#else - memcpy(a->d, b->d, sizeof(b->d[0]) * b->top); -#endif + if (b->top > 0) + memcpy(a->d, b->d, sizeof(b->d[0]) * b->top); a->top = b->top; a->neg = b->neg; bn_check_top(a); - return (a); + return a; } void BN_swap(BIGNUM *a, BIGNUM *b) @@ -443,12 +358,12 @@ int BN_set_word(BIGNUM *a, BN_ULONG w) { bn_check_top(a); if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL) - return (0); + return 0; a->neg = 0; a->d[0] = w; a->top = (w ? 1 : 0); bn_check_top(a); - return (1); + return 1; } BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret) @@ -461,7 +376,7 @@ BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret) if (ret == NULL) ret = bn = BN_new(); if (ret == NULL) - return (NULL); + return NULL; bn_check_top(ret); /* Skip leading zero's. */ for ( ; len > 0 && *s == 0; s++, len--) @@ -469,7 +384,7 @@ BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret) n = len; if (n == 0) { ret->top = 0; - return (ret); + return ret; } i = ((n - 1) / BN_BYTES) + 1; m = ((n - 1) % (BN_BYTES)); @@ -493,7 +408,7 @@ BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret) * bit set (-ve number) */ bn_correct_top(ret); - return (ret); + return ret; } /* ignore negative */ @@ -542,7 +457,7 @@ BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret) if (ret == NULL) ret = bn = BN_new(); if (ret == NULL) - return (NULL); + return NULL; bn_check_top(ret); s += len; /* Skip trailing zeroes. */ @@ -609,7 +524,7 @@ int BN_ucmp(const BIGNUM *a, const BIGNUM *b) i = a->top - b->top; if (i != 0) - return (i); + return i; ap = a->d; bp = b->d; for (i = a->top - 1; i >= 0; i--) { @@ -618,7 +533,7 @@ int BN_ucmp(const BIGNUM *a, const BIGNUM *b) if (t1 != t2) return ((t1 > t2) ? 1 : -1); } - return (0); + return 0; } int BN_cmp(const BIGNUM *a, const BIGNUM *b) @@ -629,11 +544,11 @@ int BN_cmp(const BIGNUM *a, const BIGNUM *b) if ((a == NULL) || (b == NULL)) { if (a != NULL) - return (-1); + return -1; else if (b != NULL) - return (1); + return 1; else - return (0); + return 0; } bn_check_top(a); @@ -641,9 +556,9 @@ int BN_cmp(const BIGNUM *a, const BIGNUM *b) if (a->neg != b->neg) { if (a->neg) - return (-1); + return -1; else - return (1); + return 1; } if (a->neg == 0) { gt = 1; @@ -654,18 +569,18 @@ int BN_cmp(const BIGNUM *a, const BIGNUM *b) } if (a->top > b->top) - return (gt); + return gt; if (a->top < b->top) - return (lt); + return lt; for (i = a->top - 1; i >= 0; i--) { t1 = a->d[i]; t2 = b->d[i]; if (t1 > t2) - return (gt); + return gt; if (t1 < t2) - return (lt); + return lt; } - return (0); + return 0; } int BN_set_bit(BIGNUM *a, int n) @@ -679,7 +594,7 @@ int BN_set_bit(BIGNUM *a, int n) j = n % BN_BITS2; if (a->top <= i) { if (bn_wexpand(a, i + 1) == NULL) - return (0); + return 0; for (k = a->top; k < i + 1; k++) a->d[k] = 0; a->top = i + 1; @@ -687,7 +602,7 @@ int BN_set_bit(BIGNUM *a, int n) a->d[i] |= (((BN_ULONG)1) << j); bn_check_top(a); - return (1); + return 1; } int BN_clear_bit(BIGNUM *a, int n) @@ -701,11 +616,11 @@ int BN_clear_bit(BIGNUM *a, int n) i = n / BN_BITS2; j = n % BN_BITS2; if (a->top <= i) - return (0); + return 0; a->d[i] &= (~(((BN_ULONG)1) << j)); bn_correct_top(a); - return (1); + return 1; } int BN_is_bit_set(const BIGNUM *a, int n) @@ -741,7 +656,7 @@ int BN_mask_bits(BIGNUM *a, int n) a->d[w] &= ~(BN_MASK2 << b); } bn_correct_top(a); - return (1); + return 1; } void BN_set_negative(BIGNUM *a, int b) @@ -767,7 +682,7 @@ int bn_cmp_words(const BN_ULONG *a, const BN_ULONG *b, int n) if (aa != bb) return ((aa > bb) ? 1 : -1); } - return (0); + return 0; } /* @@ -944,7 +859,7 @@ BN_GENCB *BN_GENCB_new(void) if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) { BNerr(BN_F_BN_GENCB_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } return ret; diff --git a/crypto/bn/bn_mod.c b/crypto/bn/bn_mod.c index 13b583f7..76adfb74 100644 --- a/crypto/bn/bn_mod.c +++ b/crypto/bn/bn_mod.c @@ -96,7 +96,7 @@ int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, ret = 1; err: BN_CTX_end(ctx); - return (ret); + return ret; } int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx) diff --git a/crypto/bn/bn_mont.c b/crypto/bn/bn_mont.c index faef5815..6357c60c 100644 --- a/crypto/bn/bn_mont.c +++ b/crypto/bn/bn_mont.c @@ -33,12 +33,12 @@ int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, if (num > 1 && a->top == num && b->top == num) { if (bn_wexpand(r, num) == NULL) - return (0); + return 0; if (bn_mul_mont(r->d, a->d, b->d, mont->N.d, mont->n0, num)) { r->neg = a->neg ^ b->neg; r->top = num; bn_correct_top(r); - return (1); + return 1; } } #endif @@ -68,7 +68,7 @@ int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, ret = 1; err: BN_CTX_end(ctx); - return (ret); + return ret; } #ifdef MONT_WORD @@ -82,12 +82,12 @@ static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont) nl = n->top; if (nl == 0) { ret->top = 0; - return (1); + return 1; } max = (2 * nl); /* carry is stored separately */ if (bn_wexpand(r, max) == NULL) - return (0); + return 0; r->neg ^= n->neg; np = n->d; @@ -115,7 +115,7 @@ static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont) } if (bn_wexpand(ret, nl) == NULL) - return (0); + return 0; ret->top = nl; ret->neg = r->neg; @@ -142,7 +142,7 @@ static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont) bn_correct_top(ret); bn_check_top(ret); - return (1); + return 1; } #endif /* MONT_WORD */ @@ -163,7 +163,7 @@ int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont, BN_CTX_start(ctx); t1 = BN_CTX_get(ctx); t2 = BN_CTX_get(ctx); - if (t1 == NULL || t2 == NULL) + if (t2 == NULL) goto err; if (!BN_copy(t1, a)) @@ -190,7 +190,7 @@ int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont, err: BN_CTX_end(ctx); #endif /* MONT_WORD */ - return (retn); + return retn; } BN_MONT_CTX *BN_MONT_CTX_new(void) @@ -198,11 +198,11 @@ BN_MONT_CTX *BN_MONT_CTX_new(void) BN_MONT_CTX *ret; if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) - return (NULL); + return NULL; BN_MONT_CTX_init(ret); ret->flags = BN_FLG_MALLOCED; - return (ret); + return ret; } void BN_MONT_CTX_init(BN_MONT_CTX *ctx) @@ -369,7 +369,7 @@ 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) { if (to == from) - return (to); + return to; if (!BN_copy(&(to->RR), &(from->RR))) return NULL; @@ -380,7 +380,7 @@ BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from) to->ri = from->ri; to->n0[0] = from->n0[0]; to->n0[1] = from->n0[1]; - return (to); + return to; } BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, diff --git a/crypto/bn/bn_mul.c b/crypto/bn/bn_mul.c index a1abc5b0..07aaf589 100644 --- a/crypto/bn/bn_mul.c +++ b/crypto/bn/bn_mul.c @@ -154,170 +154,6 @@ BN_ULONG bn_sub_part_words(BN_ULONG *r, } #endif -BN_ULONG bn_add_part_words(BN_ULONG *r, - const BN_ULONG *a, const BN_ULONG *b, - int cl, int dl) -{ - BN_ULONG c, l, t; - - assert(cl >= 0); - c = bn_add_words(r, a, b, cl); - - if (dl == 0) - return c; - - r += cl; - a += cl; - b += cl; - - if (dl < 0) { - int save_dl = dl; - while (c) { - l = (c + b[0]) & BN_MASK2; - c = (l < c); - r[0] = l; - if (++dl >= 0) - break; - - l = (c + b[1]) & BN_MASK2; - c = (l < c); - r[1] = l; - if (++dl >= 0) - break; - - l = (c + b[2]) & BN_MASK2; - c = (l < c); - r[2] = l; - if (++dl >= 0) - break; - - l = (c + b[3]) & BN_MASK2; - c = (l < c); - r[3] = l; - if (++dl >= 0) - break; - - save_dl = dl; - b += 4; - r += 4; - } - if (dl < 0) { - if (save_dl < dl) { - switch (dl - save_dl) { - case 1: - r[1] = b[1]; - if (++dl >= 0) - break; - /* fall thru */ - case 2: - r[2] = b[2]; - if (++dl >= 0) - break; - /* fall thru */ - case 3: - r[3] = b[3]; - if (++dl >= 0) - break; - } - b += 4; - r += 4; - } - } - if (dl < 0) { - for (;;) { - r[0] = b[0]; - if (++dl >= 0) - break; - r[1] = b[1]; - if (++dl >= 0) - break; - r[2] = b[2]; - if (++dl >= 0) - break; - r[3] = b[3]; - if (++dl >= 0) - break; - - b += 4; - r += 4; - } - } - } else { - int save_dl = dl; - while (c) { - t = (a[0] + c) & BN_MASK2; - c = (t < c); - r[0] = t; - if (--dl <= 0) - break; - - t = (a[1] + c) & BN_MASK2; - c = (t < c); - r[1] = t; - if (--dl <= 0) - break; - - t = (a[2] + c) & BN_MASK2; - c = (t < c); - r[2] = t; - if (--dl <= 0) - break; - - t = (a[3] + c) & BN_MASK2; - c = (t < c); - r[3] = t; - if (--dl <= 0) - break; - - save_dl = dl; - a += 4; - r += 4; - } - if (dl > 0) { - if (save_dl > dl) { - switch (save_dl - dl) { - case 1: - r[1] = a[1]; - if (--dl <= 0) - break; - /* fall thru */ - case 2: - r[2] = a[2]; - if (--dl <= 0) - break; - /* fall thru */ - case 3: - r[3] = a[3]; - if (--dl <= 0) - break; - } - a += 4; - r += 4; - } - } - if (dl > 0) { - for (;;) { - r[0] = a[0]; - if (--dl <= 0) - break; - r[1] = a[1]; - if (--dl <= 0) - break; - r[2] = a[2]; - if (--dl <= 0) - break; - r[3] = a[3]; - if (--dl <= 0) - break; - - a += 4; - r += 4; - } - } - } - return c; -} - #ifdef BN_RECURSION /* * Karatsuba recursive multiplication algorithm (cf. Knuth, The Art of @@ -505,7 +341,6 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, bn_sub_part_words(&(t[n]), b, &(b[n]), tnb, n - tnb); /* - */ break; case -3: - /* break; */ case -2: bn_sub_part_words(t, &(a[n]), a, tna, tna - n); /* - */ bn_sub_part_words(&(t[n]), &(b[n]), b, tnb, tnb - n); /* + */ @@ -514,14 +349,12 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n, case -1: case 0: case 1: - /* break; */ case 2: bn_sub_part_words(t, a, &(a[n]), tna, n - tna); /* + */ bn_sub_part_words(&(t[n]), b, &(b[n]), tnb, n - tnb); /* - */ neg = 1; break; case 3: - /* break; */ case 4: bn_sub_part_words(t, a, &(a[n]), tna, n - tna); bn_sub_part_words(&(t[n]), &(b[n]), b, tnb, tnb - n); @@ -659,176 +492,6 @@ void bn_mul_low_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n2, bn_add_words(&(r[n]), &(r[n]), &(t[n]), n); } } - -/*- - * a and b must be the same size, which is n2. - * r needs to be n2 words and t needs to be n2*2 - * l is the low words of the output. - * t needs to be n2*3 - */ -void bn_mul_high(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, BN_ULONG *l, int n2, - BN_ULONG *t) -{ - int i, n; - int c1, c2; - int neg, oneg, zero; - BN_ULONG ll, lc, *lp, *mp; - - n = n2 / 2; - - /* Calculate (al-ah)*(bh-bl) */ - neg = zero = 0; - c1 = bn_cmp_words(&(a[0]), &(a[n]), n); - c2 = bn_cmp_words(&(b[n]), &(b[0]), n); - switch (c1 * 3 + c2) { - case -4: - bn_sub_words(&(r[0]), &(a[n]), &(a[0]), n); - bn_sub_words(&(r[n]), &(b[0]), &(b[n]), n); - break; - case -3: - zero = 1; - break; - case -2: - bn_sub_words(&(r[0]), &(a[n]), &(a[0]), n); - bn_sub_words(&(r[n]), &(b[n]), &(b[0]), n); - neg = 1; - break; - case -1: - case 0: - case 1: - zero = 1; - break; - case 2: - bn_sub_words(&(r[0]), &(a[0]), &(a[n]), n); - bn_sub_words(&(r[n]), &(b[0]), &(b[n]), n); - neg = 1; - break; - case 3: - zero = 1; - break; - case 4: - bn_sub_words(&(r[0]), &(a[0]), &(a[n]), n); - bn_sub_words(&(r[n]), &(b[n]), &(b[0]), n); - break; - } - - oneg = neg; - /* t[10] = (a[0]-a[1])*(b[1]-b[0]) */ - /* r[10] = (a[1]*b[1]) */ -# ifdef BN_MUL_COMBA - if (n == 8) { - bn_mul_comba8(&(t[0]), &(r[0]), &(r[n])); - bn_mul_comba8(r, &(a[n]), &(b[n])); - } else -# endif - { - bn_mul_recursive(&(t[0]), &(r[0]), &(r[n]), n, 0, 0, &(t[n2])); - bn_mul_recursive(r, &(a[n]), &(b[n]), n, 0, 0, &(t[n2])); - } - - /*- - * s0 == low(al*bl) - * s1 == low(ah*bh)+low((al-ah)*(bh-bl))+low(al*bl)+high(al*bl) - * We know s0 and s1 so the only unknown is high(al*bl) - * high(al*bl) == s1 - low(ah*bh+s0+(al-ah)*(bh-bl)) - * high(al*bl) == s1 - (r[0]+l[0]+t[0]) - */ - if (l != NULL) { - lp = &(t[n2 + n]); - bn_add_words(lp, &(r[0]), &(l[0]), n); - } else { - lp = &(r[0]); - } - - if (neg) - neg = (int)(bn_sub_words(&(t[n2]), lp, &(t[0]), n)); - else { - bn_add_words(&(t[n2]), lp, &(t[0]), n); - neg = 0; - } - - if (l != NULL) { - bn_sub_words(&(t[n2 + n]), &(l[n]), &(t[n2]), n); - } else { - lp = &(t[n2 + n]); - mp = &(t[n2]); - for (i = 0; i < n; i++) - lp[i] = ((~mp[i]) + 1) & BN_MASK2; - } - - /*- - * s[0] = low(al*bl) - * t[3] = high(al*bl) - * t[10] = (a[0]-a[1])*(b[1]-b[0]) neg is the sign - * r[10] = (a[1]*b[1]) - */ - /*- - * R[10] = al*bl - * R[21] = al*bl + ah*bh + (a[0]-a[1])*(b[1]-b[0]) - * R[32] = ah*bh - */ - /*- - * R[1]=t[3]+l[0]+r[0](+-)t[0] (have carry/borrow) - * R[2]=r[0]+t[3]+r[1](+-)t[1] (have carry/borrow) - * R[3]=r[1]+(carry/borrow) - */ - if (l != NULL) { - lp = &(t[n2]); - c1 = (int)(bn_add_words(lp, &(t[n2 + n]), &(l[0]), n)); - } else { - lp = &(t[n2 + n]); - c1 = 0; - } - c1 += (int)(bn_add_words(&(t[n2]), lp, &(r[0]), n)); - if (oneg) - c1 -= (int)(bn_sub_words(&(t[n2]), &(t[n2]), &(t[0]), n)); - else - c1 += (int)(bn_add_words(&(t[n2]), &(t[n2]), &(t[0]), n)); - - c2 = (int)(bn_add_words(&(r[0]), &(r[0]), &(t[n2 + n]), n)); - c2 += (int)(bn_add_words(&(r[0]), &(r[0]), &(r[n]), n)); - if (oneg) - c2 -= (int)(bn_sub_words(&(r[0]), &(r[0]), &(t[n]), n)); - else - c2 += (int)(bn_add_words(&(r[0]), &(r[0]), &(t[n]), n)); - - if (c1 != 0) { /* Add starting at r[0], could be +ve or -ve */ - i = 0; - if (c1 > 0) { - lc = c1; - do { - ll = (r[i] + lc) & BN_MASK2; - r[i++] = ll; - lc = (lc > ll); - } while (lc); - } else { - lc = -c1; - do { - ll = r[i]; - r[i++] = (ll - lc) & BN_MASK2; - lc = (lc > ll); - } while (lc); - } - } - if (c2 != 0) { /* Add starting at r[1] */ - i = n; - if (c2 > 0) { - lc = c2; - do { - ll = (r[i] + lc) & BN_MASK2; - r[i++] = ll; - lc = (lc > ll); - } while (lc); - } else { - lc = -c2; - do { - ll = r[i]; - r[i++] = (ll - lc) & BN_MASK2; - lc = (lc > ll); - } while (lc); - } - } -} #endif /* BN_RECURSION */ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) @@ -853,7 +516,7 @@ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) if ((al == 0) || (bl == 0)) { BN_zero(r); - return (1); + return 1; } top = al + bl; @@ -943,7 +606,7 @@ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) err: bn_check_top(r); BN_CTX_end(ctx); - return (ret); + return ret; } void bn_mul_normal(BN_ULONG *r, BN_ULONG *a, int na, BN_ULONG *b, int nb) diff --git a/crypto/bn/bn_nist.c b/crypto/bn/bn_nist.c index 53598f97..fcc2b77f 100644 --- a/crypto/bn/bn_nist.c +++ b/crypto/bn/bn_nist.c @@ -254,7 +254,7 @@ static void nist_cp_bn_0(BN_ULONG *dst, const BN_ULONG *src, int top, int max) int i; #ifdef BN_DEBUG - OPENSSL_assert(top <= max); + assert(top <= max); #endif for (i = 0; i < top; i++) dst[i] = src[i]; diff --git a/crypto/bn/bn_prime.c b/crypto/bn/bn_prime.c index 616389cf..36d6e884 100644 --- a/crypto/bn/bn_prime.c +++ b/crypto/bn/bn_prime.c @@ -1,7 +1,5 @@ /* - * WARNING: do not edit! - * Generated by crypto/bn/bn_prime.pl - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -29,53 +27,6 @@ static int probable_prime_dh_safe(BIGNUM *rnd, int bits, const BIGNUM *add, const BIGNUM *rem, BN_CTX *ctx); -static const int prime_offsets[480] = { - 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, - 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, - 167, 169, 173, 179, 181, 191, 193, 197, 199, 211, 221, 223, 227, 229, - 233, 239, 241, 247, 251, 257, 263, 269, 271, 277, 281, 283, 289, 293, - 299, 307, 311, 313, 317, 323, 331, 337, 347, 349, 353, 359, 361, 367, - 373, 377, 379, 383, 389, 391, 397, 401, 403, 409, 419, 421, 431, 433, - 437, 439, 443, 449, 457, 461, 463, 467, 479, 481, 487, 491, 493, 499, - 503, 509, 521, 523, 527, 529, 533, 541, 547, 551, 557, 559, 563, 569, - 571, 577, 587, 589, 593, 599, 601, 607, 611, 613, 617, 619, 629, 631, - 641, 643, 647, 653, 659, 661, 667, 673, 677, 683, 689, 691, 697, 701, - 703, 709, 713, 719, 727, 731, 733, 739, 743, 751, 757, 761, 767, 769, - 773, 779, 787, 793, 797, 799, 809, 811, 817, 821, 823, 827, 829, 839, - 841, 851, 853, 857, 859, 863, 871, 877, 881, 883, 887, 893, 899, 901, - 907, 911, 919, 923, 929, 937, 941, 943, 947, 949, 953, 961, 967, 971, - 977, 983, 989, 991, 997, 1003, 1007, 1009, 1013, 1019, 1021, 1027, 1031, - 1033, 1037, 1039, 1049, 1051, 1061, 1063, 1069, 1073, 1079, 1081, 1087, - 1091, 1093, 1097, 1103, 1109, 1117, 1121, 1123, 1129, 1139, 1147, 1151, - 1153, 1157, 1159, 1163, 1171, 1181, 1187, 1189, 1193, 1201, 1207, 1213, - 1217, 1219, 1223, 1229, 1231, 1237, 1241, 1247, 1249, 1259, 1261, 1271, - 1273, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1313, 1319, - 1321, 1327, 1333, 1339, 1343, 1349, 1357, 1361, 1363, 1367, 1369, 1373, - 1381, 1387, 1391, 1399, 1403, 1409, 1411, 1417, 1423, 1427, 1429, 1433, - 1439, 1447, 1451, 1453, 1457, 1459, 1469, 1471, 1481, 1483, 1487, 1489, - 1493, 1499, 1501, 1511, 1513, 1517, 1523, 1531, 1537, 1541, 1543, 1549, - 1553, 1559, 1567, 1571, 1577, 1579, 1583, 1591, 1597, 1601, 1607, 1609, - 1613, 1619, 1621, 1627, 1633, 1637, 1643, 1649, 1651, 1657, 1663, 1667, - 1669, 1679, 1681, 1691, 1693, 1697, 1699, 1703, 1709, 1711, 1717, 1721, - 1723, 1733, 1739, 1741, 1747, 1751, 1753, 1759, 1763, 1769, 1777, 1781, - 1783, 1787, 1789, 1801, 1807, 1811, 1817, 1819, 1823, 1829, 1831, 1843, - 1847, 1849, 1853, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1891, 1901, - 1907, 1909, 1913, 1919, 1921, 1927, 1931, 1933, 1937, 1943, 1949, 1951, - 1957, 1961, 1963, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, - 2021, 2027, 2029, 2033, 2039, 2041, 2047, 2053, 2059, 2063, 2069, 2071, - 2077, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2117, 2119, 2129, 2131, - 2137, 2141, 2143, 2147, 2153, 2159, 2161, 2171, 2173, 2179, 2183, 2197, - 2201, 2203, 2207, 2209, 2213, 2221, 2227, 2231, 2237, 2239, 2243, 2249, - 2251, 2257, 2263, 2267, 2269, 2273, 2279, 2281, 2287, 2291, 2293, 2297, - 2309, 2311 -}; - -static const int prime_offset_count = 480; -static const int prime_multiplier = 2310; -static const int prime_multiplier_bits = 11; /* 2^|prime_multiplier_bits| <= - * |prime_multiplier| */ -static const int first_prime_index = 5; - int BN_GENCB_call(BN_GENCB *cb, int a, int b) { /* No callback means continue */ @@ -127,7 +78,7 @@ int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, goto err; BN_CTX_start(ctx); t = BN_CTX_get(ctx); - if (!t) + if (t == NULL) goto err; loop: /* make a random number and set the top and bottom bits */ @@ -222,7 +173,7 @@ int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed, if (mod == (BN_ULONG)-1) goto err; if (mod == 0) - return 0; + return BN_is_word(a, primes[i]); } if (!BN_GENCB_call(cb, 1, -1)) goto err; @@ -265,7 +216,7 @@ int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed, goto err; for (i = 0; i < checks; i++) { - if (!BN_pseudo_rand_range(check, A1)) + if (!BN_priv_rand_range(check, A1)) goto err; if (!BN_add_word(check, 1)) goto err; @@ -290,83 +241,6 @@ int BN_is_prime_fasttest_ex(const BIGNUM *a, int checks, BN_CTX *ctx_passed, } BN_MONT_CTX_free(mont); - return (ret); -} - -int bn_probable_prime_dh_retry(BIGNUM *rnd, int bits, BN_CTX *ctx) -{ - int i; - int ret = 0; - - loop: - if (!BN_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) - goto err; - - /* we now have a random number 'rand' to test. */ - - for (i = 1; i < NUMPRIMES; i++) { - /* check that rnd is a prime */ - BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); - if (mod == (BN_ULONG)-1) - goto err; - if (mod <= 1) { - goto loop; - } - } - ret = 1; - - err: - bn_check_top(rnd); - return (ret); -} - -int bn_probable_prime_dh_coprime(BIGNUM *rnd, int bits, BN_CTX *ctx) -{ - int i; - BIGNUM *offset_index; - BIGNUM *offset_count; - int ret = 0; - - OPENSSL_assert(bits > prime_multiplier_bits); - - BN_CTX_start(ctx); - if ((offset_index = BN_CTX_get(ctx)) == NULL) - goto err; - if ((offset_count = BN_CTX_get(ctx)) == NULL) - goto err; - - if (!BN_add_word(offset_count, prime_offset_count)) - goto err; - - loop: - if (!BN_rand(rnd, bits - prime_multiplier_bits, - BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) - goto err; - if (BN_is_bit_set(rnd, bits)) - goto loop; - if (!BN_rand_range(offset_index, offset_count)) - goto err; - - if (!BN_mul_word(rnd, prime_multiplier) - || !BN_add_word(rnd, prime_offsets[BN_get_word(offset_index)])) - goto err; - - /* we now have a random number 'rand' to test. */ - - /* skip coprimes */ - for (i = first_prime_index; i < NUMPRIMES; i++) { - /* check that rnd is a prime */ - BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); - if (mod == (BN_ULONG)-1) - goto err; - if (mod <= 1) - goto loop; - } - ret = 1; - - err: - BN_CTX_end(ctx); - bn_check_top(rnd); return ret; } @@ -405,8 +279,8 @@ static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods) char is_single_word = bits <= BN_BITS2; again: - if (!BN_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD)) - return (0); + if (!BN_priv_rand(rnd, bits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ODD)) + return 0; /* we now have a random number 'rnd' to test. */ for (i = 1; i < NUMPRIMES; i++) { BN_ULONG mod = BN_mod_word(rnd, (BN_ULONG)primes[i]); @@ -472,11 +346,11 @@ static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods) } } if (!BN_add_word(rnd, delta)) - return (0); + return 0; if (BN_num_bits(rnd) != bits) goto again; bn_check_top(rnd); - return (1); + return 1; } int bn_probable_prime_dh(BIGNUM *rnd, int bits, @@ -489,7 +363,7 @@ int bn_probable_prime_dh(BIGNUM *rnd, int bits, if ((t1 = BN_CTX_get(ctx)) == NULL) goto err; - if (!BN_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) + if (!BN_priv_rand(rnd, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) goto err; /* we need ((rnd-rem) % add) == 0 */ @@ -525,7 +399,7 @@ int bn_probable_prime_dh(BIGNUM *rnd, int bits, err: BN_CTX_end(ctx); bn_check_top(rnd); - return (ret); + return ret; } static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, @@ -545,7 +419,7 @@ static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, if (!BN_rshift1(qadd, padd)) goto err; - if (!BN_rand(q, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) + if (!BN_priv_rand(q, bits, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ODD)) goto err; /* we need ((rnd-rem) % add) == 0 */ @@ -592,5 +466,5 @@ static int probable_prime_dh_safe(BIGNUM *p, int bits, const BIGNUM *padd, err: BN_CTX_end(ctx); bn_check_top(p); - return (ret); + return ret; } diff --git a/crypto/bn/bn_prime.h b/crypto/bn/bn_prime.h index 41440fa4..a64c9630 100644 --- a/crypto/bn/bn_prime.h +++ b/crypto/bn/bn_prime.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/bn/bn_prime.pl * - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,261 +14,260 @@ typedef unsigned short prime_t; # define NUMPRIMES 2048 static const prime_t primes[2048] = { - - 2, 3, 5, 7, 11, 13, 17, 19, - 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, - 97, 101, 103, 107, 109, 113, 127, 131, - 137, 139, 149, 151, 157, 163, 167, 173, - 179, 181, 191, 193, 197, 199, 211, 223, - 227, 229, 233, 239, 241, 251, 257, 263, - 269, 271, 277, 281, 283, 293, 307, 311, - 313, 317, 331, 337, 347, 349, 353, 359, - 367, 373, 379, 383, 389, 397, 401, 409, - 419, 421, 431, 433, 439, 443, 449, 457, - 461, 463, 467, 479, 487, 491, 499, 503, - 509, 521, 523, 541, 547, 557, 563, 569, - 571, 577, 587, 593, 599, 601, 607, 613, - 617, 619, 631, 641, 643, 647, 653, 659, - 661, 673, 677, 683, 691, 701, 709, 719, - 727, 733, 739, 743, 751, 757, 761, 769, - 773, 787, 797, 809, 811, 821, 823, 827, - 829, 839, 853, 857, 859, 863, 877, 881, - 883, 887, 907, 911, 919, 929, 937, 941, - 947, 953, 967, 971, 977, 983, 991, 997, - 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, - 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, - 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, - 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, - 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, - 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, - 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, - 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, - 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, - 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, - 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, - 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, - 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, - 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, - 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, - 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, - 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, - 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, - 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, - 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, - 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, - 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, - 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, - 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, - 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, - 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, - 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, - 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, - 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, - 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, - 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, - 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, - 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, - 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, - 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, - 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, - 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, - 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, - 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, - 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, - 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, - 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, - 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, - 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, - 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, - 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, - 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, - 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, - 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, - 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, - 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, - 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, - 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, - 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, - 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, - 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, - 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, - 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, - 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, - 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, - 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, - 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, - 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, - 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, - 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, - 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, - 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, - 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, - 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, - 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, - 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, - 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, - 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, - 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, - 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, - 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, - 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, - 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, - 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, - 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, - 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, - 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, - 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, - 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, - 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, - 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, - 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, - 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, - 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, - 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, - 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, - 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, - 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, - 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, - 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, - 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, - 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, - 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, - 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, - 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, - 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, - 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, - 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, - 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, - 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, - 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, - 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, - 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, - 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, - 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, - 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, - 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, - 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, - 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, - 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, - 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, - 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, - 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, - 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, - 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, - 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, - 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, - 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, - 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, - 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, - 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, - 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, - 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, - 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, - 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, - 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, - 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, - 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037, - 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, - 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, - 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, - 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, - 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, - 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, - 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, - 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, - 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, - 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771, - 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, - 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, - 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003, - 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087, - 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161, - 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, - 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317, - 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399, - 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483, - 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551, - 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657, - 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, - 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813, - 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887, - 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941, - 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, - 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, - 12107, 12109, 12113, 12119, 12143, 12149, 12157, 12161, - 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251, - 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323, - 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, - 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473, - 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527, - 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589, - 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653, - 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, - 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, - 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907, - 12911, 12917, 12919, 12923, 12941, 12953, 12959, 12967, - 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033, - 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, - 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, - 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259, - 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337, - 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421, - 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499, - 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597, - 13613, 13619, 13627, 13633, 13649, 13669, 13679, 13681, - 13687, 13691, 13693, 13697, 13709, 13711, 13721, 13723, - 13729, 13751, 13757, 13759, 13763, 13781, 13789, 13799, - 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879, - 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933, - 13963, 13967, 13997, 13999, 14009, 14011, 14029, 14033, - 14051, 14057, 14071, 14081, 14083, 14087, 14107, 14143, - 14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221, - 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323, - 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407, - 14411, 14419, 14423, 14431, 14437, 14447, 14449, 14461, - 14479, 14489, 14503, 14519, 14533, 14537, 14543, 14549, - 14551, 14557, 14561, 14563, 14591, 14593, 14621, 14627, - 14629, 14633, 14639, 14653, 14657, 14669, 14683, 14699, - 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753, - 14759, 14767, 14771, 14779, 14783, 14797, 14813, 14821, - 14827, 14831, 14843, 14851, 14867, 14869, 14879, 14887, - 14891, 14897, 14923, 14929, 14939, 14947, 14951, 14957, - 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073, - 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137, - 15139, 15149, 15161, 15173, 15187, 15193, 15199, 15217, - 15227, 15233, 15241, 15259, 15263, 15269, 15271, 15277, - 15287, 15289, 15299, 15307, 15313, 15319, 15329, 15331, - 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401, - 15413, 15427, 15439, 15443, 15451, 15461, 15467, 15473, - 15493, 15497, 15511, 15527, 15541, 15551, 15559, 15569, - 15581, 15583, 15601, 15607, 15619, 15629, 15641, 15643, - 15647, 15649, 15661, 15667, 15671, 15679, 15683, 15727, - 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773, - 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859, - 15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919, - 15923, 15937, 15959, 15971, 15973, 15991, 16001, 16007, - 16033, 16057, 16061, 16063, 16067, 16069, 16073, 16087, - 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183, - 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249, - 16253, 16267, 16273, 16301, 16319, 16333, 16339, 16349, - 16361, 16363, 16369, 16381, 16411, 16417, 16421, 16427, - 16433, 16447, 16451, 16453, 16477, 16481, 16487, 16493, - 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603, - 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661, - 16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747, - 16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843, - 16871, 16879, 16883, 16889, 16901, 16903, 16921, 16927, - 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993, - 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053, - 17077, 17093, 17099, 17107, 17117, 17123, 17137, 17159, - 17167, 17183, 17189, 17191, 17203, 17207, 17209, 17231, - 17239, 17257, 17291, 17293, 17299, 17317, 17321, 17327, - 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389, - 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467, - 17471, 17477, 17483, 17489, 17491, 17497, 17509, 17519, - 17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599, - 17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683, - 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783, - 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863, + 2, 3, 5, 7, 11, 13, 17, 19, + 23, 29, 31, 37, 41, 43, 47, 53, + 59, 61, 67, 71, 73, 79, 83, 89, + 97, 101, 103, 107, 109, 113, 127, 131, + 137, 139, 149, 151, 157, 163, 167, 173, + 179, 181, 191, 193, 197, 199, 211, 223, + 227, 229, 233, 239, 241, 251, 257, 263, + 269, 271, 277, 281, 283, 293, 307, 311, + 313, 317, 331, 337, 347, 349, 353, 359, + 367, 373, 379, 383, 389, 397, 401, 409, + 419, 421, 431, 433, 439, 443, 449, 457, + 461, 463, 467, 479, 487, 491, 499, 503, + 509, 521, 523, 541, 547, 557, 563, 569, + 571, 577, 587, 593, 599, 601, 607, 613, + 617, 619, 631, 641, 643, 647, 653, 659, + 661, 673, 677, 683, 691, 701, 709, 719, + 727, 733, 739, 743, 751, 757, 761, 769, + 773, 787, 797, 809, 811, 821, 823, 827, + 829, 839, 853, 857, 859, 863, 877, 881, + 883, 887, 907, 911, 919, 929, 937, 941, + 947, 953, 967, 971, 977, 983, 991, 997, + 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, + 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, + 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, + 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, + 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, + 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, + 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, + 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, + 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, + 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, + 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, + 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, + 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, + 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, + 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, + 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, + 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, + 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, + 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, + 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, + 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, + 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, + 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, + 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, + 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, + 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, + 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, + 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, + 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, + 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, + 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, + 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, + 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, + 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, + 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, + 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, + 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, + 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, + 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, + 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, + 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, + 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, + 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, + 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, + 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, + 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, + 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, + 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, + 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, + 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, + 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, + 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, + 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, + 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, + 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, + 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, + 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, + 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, + 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, + 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, + 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, + 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, + 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, + 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, + 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, + 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, + 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, + 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, + 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, + 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, + 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, + 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, + 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, + 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, + 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, + 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, + 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, + 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, + 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, + 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, + 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, + 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, + 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, + 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, + 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, + 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, + 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, + 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, + 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, + 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, + 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, + 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, + 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, + 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, + 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, + 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, + 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, + 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, + 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, + 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, + 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, + 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, + 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, + 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, + 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, + 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, + 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, + 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, + 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, + 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, + 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, + 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, + 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, + 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, + 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, + 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, + 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, + 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, + 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, + 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, + 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, + 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, + 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, + 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, + 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, + 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, + 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, + 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, + 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, + 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, + 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, + 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, + 9931, 9941, 9949, 9967, 9973, 10007, 10009, 10037, + 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, + 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, + 10169, 10177, 10181, 10193, 10211, 10223, 10243, 10247, + 10253, 10259, 10267, 10271, 10273, 10289, 10301, 10303, + 10313, 10321, 10331, 10333, 10337, 10343, 10357, 10369, + 10391, 10399, 10427, 10429, 10433, 10453, 10457, 10459, + 10463, 10477, 10487, 10499, 10501, 10513, 10529, 10531, + 10559, 10567, 10589, 10597, 10601, 10607, 10613, 10627, + 10631, 10639, 10651, 10657, 10663, 10667, 10687, 10691, + 10709, 10711, 10723, 10729, 10733, 10739, 10753, 10771, + 10781, 10789, 10799, 10831, 10837, 10847, 10853, 10859, + 10861, 10867, 10883, 10889, 10891, 10903, 10909, 10937, + 10939, 10949, 10957, 10973, 10979, 10987, 10993, 11003, + 11027, 11047, 11057, 11059, 11069, 11071, 11083, 11087, + 11093, 11113, 11117, 11119, 11131, 11149, 11159, 11161, + 11171, 11173, 11177, 11197, 11213, 11239, 11243, 11251, + 11257, 11261, 11273, 11279, 11287, 11299, 11311, 11317, + 11321, 11329, 11351, 11353, 11369, 11383, 11393, 11399, + 11411, 11423, 11437, 11443, 11447, 11467, 11471, 11483, + 11489, 11491, 11497, 11503, 11519, 11527, 11549, 11551, + 11579, 11587, 11593, 11597, 11617, 11621, 11633, 11657, + 11677, 11681, 11689, 11699, 11701, 11717, 11719, 11731, + 11743, 11777, 11779, 11783, 11789, 11801, 11807, 11813, + 11821, 11827, 11831, 11833, 11839, 11863, 11867, 11887, + 11897, 11903, 11909, 11923, 11927, 11933, 11939, 11941, + 11953, 11959, 11969, 11971, 11981, 11987, 12007, 12011, + 12037, 12041, 12043, 12049, 12071, 12073, 12097, 12101, + 12107, 12109, 12113, 12119, 12143, 12149, 12157, 12161, + 12163, 12197, 12203, 12211, 12227, 12239, 12241, 12251, + 12253, 12263, 12269, 12277, 12281, 12289, 12301, 12323, + 12329, 12343, 12347, 12373, 12377, 12379, 12391, 12401, + 12409, 12413, 12421, 12433, 12437, 12451, 12457, 12473, + 12479, 12487, 12491, 12497, 12503, 12511, 12517, 12527, + 12539, 12541, 12547, 12553, 12569, 12577, 12583, 12589, + 12601, 12611, 12613, 12619, 12637, 12641, 12647, 12653, + 12659, 12671, 12689, 12697, 12703, 12713, 12721, 12739, + 12743, 12757, 12763, 12781, 12791, 12799, 12809, 12821, + 12823, 12829, 12841, 12853, 12889, 12893, 12899, 12907, + 12911, 12917, 12919, 12923, 12941, 12953, 12959, 12967, + 12973, 12979, 12983, 13001, 13003, 13007, 13009, 13033, + 13037, 13043, 13049, 13063, 13093, 13099, 13103, 13109, + 13121, 13127, 13147, 13151, 13159, 13163, 13171, 13177, + 13183, 13187, 13217, 13219, 13229, 13241, 13249, 13259, + 13267, 13291, 13297, 13309, 13313, 13327, 13331, 13337, + 13339, 13367, 13381, 13397, 13399, 13411, 13417, 13421, + 13441, 13451, 13457, 13463, 13469, 13477, 13487, 13499, + 13513, 13523, 13537, 13553, 13567, 13577, 13591, 13597, + 13613, 13619, 13627, 13633, 13649, 13669, 13679, 13681, + 13687, 13691, 13693, 13697, 13709, 13711, 13721, 13723, + 13729, 13751, 13757, 13759, 13763, 13781, 13789, 13799, + 13807, 13829, 13831, 13841, 13859, 13873, 13877, 13879, + 13883, 13901, 13903, 13907, 13913, 13921, 13931, 13933, + 13963, 13967, 13997, 13999, 14009, 14011, 14029, 14033, + 14051, 14057, 14071, 14081, 14083, 14087, 14107, 14143, + 14149, 14153, 14159, 14173, 14177, 14197, 14207, 14221, + 14243, 14249, 14251, 14281, 14293, 14303, 14321, 14323, + 14327, 14341, 14347, 14369, 14387, 14389, 14401, 14407, + 14411, 14419, 14423, 14431, 14437, 14447, 14449, 14461, + 14479, 14489, 14503, 14519, 14533, 14537, 14543, 14549, + 14551, 14557, 14561, 14563, 14591, 14593, 14621, 14627, + 14629, 14633, 14639, 14653, 14657, 14669, 14683, 14699, + 14713, 14717, 14723, 14731, 14737, 14741, 14747, 14753, + 14759, 14767, 14771, 14779, 14783, 14797, 14813, 14821, + 14827, 14831, 14843, 14851, 14867, 14869, 14879, 14887, + 14891, 14897, 14923, 14929, 14939, 14947, 14951, 14957, + 14969, 14983, 15013, 15017, 15031, 15053, 15061, 15073, + 15077, 15083, 15091, 15101, 15107, 15121, 15131, 15137, + 15139, 15149, 15161, 15173, 15187, 15193, 15199, 15217, + 15227, 15233, 15241, 15259, 15263, 15269, 15271, 15277, + 15287, 15289, 15299, 15307, 15313, 15319, 15329, 15331, + 15349, 15359, 15361, 15373, 15377, 15383, 15391, 15401, + 15413, 15427, 15439, 15443, 15451, 15461, 15467, 15473, + 15493, 15497, 15511, 15527, 15541, 15551, 15559, 15569, + 15581, 15583, 15601, 15607, 15619, 15629, 15641, 15643, + 15647, 15649, 15661, 15667, 15671, 15679, 15683, 15727, + 15731, 15733, 15737, 15739, 15749, 15761, 15767, 15773, + 15787, 15791, 15797, 15803, 15809, 15817, 15823, 15859, + 15877, 15881, 15887, 15889, 15901, 15907, 15913, 15919, + 15923, 15937, 15959, 15971, 15973, 15991, 16001, 16007, + 16033, 16057, 16061, 16063, 16067, 16069, 16073, 16087, + 16091, 16097, 16103, 16111, 16127, 16139, 16141, 16183, + 16187, 16189, 16193, 16217, 16223, 16229, 16231, 16249, + 16253, 16267, 16273, 16301, 16319, 16333, 16339, 16349, + 16361, 16363, 16369, 16381, 16411, 16417, 16421, 16427, + 16433, 16447, 16451, 16453, 16477, 16481, 16487, 16493, + 16519, 16529, 16547, 16553, 16561, 16567, 16573, 16603, + 16607, 16619, 16631, 16633, 16649, 16651, 16657, 16661, + 16673, 16691, 16693, 16699, 16703, 16729, 16741, 16747, + 16759, 16763, 16787, 16811, 16823, 16829, 16831, 16843, + 16871, 16879, 16883, 16889, 16901, 16903, 16921, 16927, + 16931, 16937, 16943, 16963, 16979, 16981, 16987, 16993, + 17011, 17021, 17027, 17029, 17033, 17041, 17047, 17053, + 17077, 17093, 17099, 17107, 17117, 17123, 17137, 17159, + 17167, 17183, 17189, 17191, 17203, 17207, 17209, 17231, + 17239, 17257, 17291, 17293, 17299, 17317, 17321, 17327, + 17333, 17341, 17351, 17359, 17377, 17383, 17387, 17389, + 17393, 17401, 17417, 17419, 17431, 17443, 17449, 17467, + 17471, 17477, 17483, 17489, 17491, 17497, 17509, 17519, + 17539, 17551, 17569, 17573, 17579, 17581, 17597, 17599, + 17609, 17623, 17627, 17657, 17659, 17669, 17681, 17683, + 17707, 17713, 17729, 17737, 17747, 17749, 17761, 17783, + 17789, 17791, 17807, 17827, 17837, 17839, 17851, 17863, }; diff --git a/crypto/bn/bn_prime.pl b/crypto/bn/bn_prime.pl index 163d4a9d..eeca475b 100644 --- a/crypto/bn/bn_prime.pl +++ b/crypto/bn/bn_prime.pl @@ -1,17 +1,19 @@ #! /usr/bin/env perl -# Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 +# Output year depends on the year of the script. +my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; print <<"EOF"; /* * WARNING: do not edit! * Generated by crypto/bn/bn_prime.pl * - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-$YEAR The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -38,9 +40,9 @@ loop: while ($#primes < $num-1) { print "typedef unsigned short prime_t;\n"; printf "# define NUMPRIMES %d\n\n", $num; -printf "static const prime_t primes[%d] = {\n", $num; +printf "static const prime_t primes[%d] = {", $num; for (my $i = 0; $i <= $#primes; $i++) { - printf "\n " if ($i % 8) == 0; - printf "%4d, ", $primes[$i]; + printf "\n " if ($i % 8) == 0; + printf " %5d,", $primes[$i]; } print "\n};\n"; diff --git a/crypto/bn/bn_print.c b/crypto/bn/bn_print.c index 5ffe2fc9..1853269d 100644 --- a/crypto/bn/bn_print.c +++ b/crypto/bn/bn_print.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include #include "internal/cryptlib.h" #include @@ -32,27 +32,27 @@ char *BN_bn2hex(const BIGNUM *a) } p = buf; if (a->neg) - *(p++) = '-'; + *p++ = '-'; for (i = a->top - 1; i >= 0; i--) { for (j = BN_BITS2 - 8; j >= 0; j -= 8) { /* strip leading zeros */ - v = ((int)(a->d[i] >> (long)j)) & 0xff; - if (z || (v != 0)) { - *(p++) = Hex[v >> 4]; - *(p++) = Hex[v & 0x0f]; + v = (int)((a->d[i] >> j) & 0xff); + if (z || v != 0) { + *p++ = Hex[v >> 4]; + *p++ = Hex[v & 0x0f]; z = 1; } } } *p = '\0'; err: - return (buf); + return buf; } /* Must 'OPENSSL_free' the returned data */ char *BN_bn2dec(const BIGNUM *a) { - int i = 0, num, ok = 0; + int i = 0, num, ok = 0, n, tbytes; char *buf = NULL; char *p; BIGNUM *t = NULL; @@ -67,22 +67,22 @@ char *BN_bn2dec(const BIGNUM *a) */ i = BN_num_bits(a) * 3; num = (i / 10 + i / 1000 + 1) + 1; + tbytes = num + 3; /* negative and terminator and one spare? */ bn_data_num = num / BN_DEC_NUM + 1; bn_data = OPENSSL_malloc(bn_data_num * sizeof(BN_ULONG)); - buf = OPENSSL_malloc(num + 3); - if ((buf == NULL) || (bn_data == NULL)) { + buf = OPENSSL_malloc(tbytes); + if (buf == NULL || bn_data == NULL) { BNerr(BN_F_BN_BN2DEC, ERR_R_MALLOC_FAILURE); goto err; } if ((t = BN_dup(a)) == NULL) goto err; -#define BUF_REMAIN (num+3 - (size_t)(p - buf)) p = buf; lp = bn_data; if (BN_is_zero(t)) { - *(p++) = '0'; - *(p++) = '\0'; + *p++ = '0'; + *p++ = '\0'; } else { if (BN_is_negative(t)) *p++ = '-'; @@ -101,14 +101,16 @@ char *BN_bn2dec(const BIGNUM *a) * the last one needs truncation. The blocks need to be reversed in * order. */ - BIO_snprintf(p, BUF_REMAIN, BN_DEC_FMT1, *lp); - while (*p) - p++; + n = BIO_snprintf(p, tbytes - (size_t)(p - buf), BN_DEC_FMT1, *lp); + if (n < 0) + goto err; + p += n; while (lp != bn_data) { lp--; - BIO_snprintf(p, BUF_REMAIN, BN_DEC_FMT2, *lp); - while (*p) - p++; + n = BIO_snprintf(p, tbytes - (size_t)(p - buf), BN_DEC_FMT2, *lp); + if (n < 0) + goto err; + p += n; } } ok = 1; @@ -128,28 +130,28 @@ int BN_hex2bn(BIGNUM **bn, const char *a) int neg = 0, h, m, i, j, k, c; int num; - if ((a == NULL) || (*a == '\0')) - return (0); + if (a == NULL || *a == '\0') + return 0; if (*a == '-') { neg = 1; a++; } - for (i = 0; i <= (INT_MAX/4) && isxdigit((unsigned char)a[i]); i++) + for (i = 0; i <= INT_MAX / 4 && ossl_isxdigit(a[i]); i++) continue; - if (i == 0 || i > INT_MAX/4) + if (i == 0 || i > INT_MAX / 4) goto err; num = i + neg; if (bn == NULL) - return (num); + return num; /* a is the start of the hex digits, and it is 'i' long */ if (*bn == NULL) { if ((ret = BN_new()) == NULL) - return (0); + return 0; } else { ret = *bn; BN_zero(ret); @@ -163,7 +165,7 @@ int BN_hex2bn(BIGNUM **bn, const char *a) m = 0; h = 0; while (j > 0) { - m = ((BN_BYTES * 2) <= j) ? (BN_BYTES * 2) : j; + m = (BN_BYTES * 2 <= j) ? BN_BYTES * 2 : j; l = 0; for (;;) { c = a[j - m]; @@ -177,7 +179,7 @@ int BN_hex2bn(BIGNUM **bn, const char *a) break; } } - j -= (BN_BYTES * 2); + j -= BN_BYTES * 2; } ret->top = h; bn_correct_top(ret); @@ -187,11 +189,11 @@ int BN_hex2bn(BIGNUM **bn, const char *a) /* Don't set the negative flag if it's zero. */ if (ret->top != 0) ret->neg = neg; - return (num); + return num; err: if (*bn == NULL) BN_free(ret); - return (0); + return 0; } int BN_dec2bn(BIGNUM **bn, const char *a) @@ -201,22 +203,22 @@ int BN_dec2bn(BIGNUM **bn, const char *a) int neg = 0, i, j; int num; - if ((a == NULL) || (*a == '\0')) - return (0); + if (a == NULL || *a == '\0') + return 0; if (*a == '-') { neg = 1; a++; } - for (i = 0; i <= (INT_MAX/4) && isdigit((unsigned char)a[i]); i++) + for (i = 0; i <= INT_MAX / 4 && ossl_isdigit(a[i]); i++) continue; - if (i == 0 || i > INT_MAX/4) + if (i == 0 || i > INT_MAX / 4) goto err; num = i + neg; if (bn == NULL) - return (num); + return num; /* * a is the start of the digits, and it is 'i' long. We chop it into @@ -224,7 +226,7 @@ int BN_dec2bn(BIGNUM **bn, const char *a) */ if (*bn == NULL) { if ((ret = BN_new()) == NULL) - return (0); + return 0; } else { ret = *bn; BN_zero(ret); @@ -234,7 +236,7 @@ int BN_dec2bn(BIGNUM **bn, const char *a) if (bn_expand(ret, i * 4) == NULL) goto err; - j = BN_DEC_NUM - (i % BN_DEC_NUM); + j = BN_DEC_NUM - i % BN_DEC_NUM; if (j == BN_DEC_NUM) j = 0; l = 0; @@ -257,11 +259,11 @@ int BN_dec2bn(BIGNUM **bn, const char *a) /* Don't set the negative flag if it's zero. */ if (ret->top != 0) ret->neg = neg; - return (num); + return num; err: if (*bn == NULL) BN_free(ret); - return (0); + return 0; } int BN_asc2bn(BIGNUM **bn, const char *a) @@ -291,11 +293,11 @@ int BN_print_fp(FILE *fp, const BIGNUM *a) int ret; if ((b = BIO_new(BIO_s_file())) == NULL) - return (0); + return 0; BIO_set_fp(b, fp, BIO_NOCLOSE); ret = BN_print(b, a); BIO_free(b); - return (ret); + return ret; } # endif @@ -304,16 +306,16 @@ int BN_print(BIO *bp, const BIGNUM *a) int i, j, v, z = 0; int ret = 0; - if ((a->neg) && (BIO_write(bp, "-", 1) != 1)) + if ((a->neg) && BIO_write(bp, "-", 1) != 1) goto end; - if (BN_is_zero(a) && (BIO_write(bp, "0", 1) != 1)) + if (BN_is_zero(a) && BIO_write(bp, "0", 1) != 1) goto end; for (i = a->top - 1; i >= 0; i--) { for (j = BN_BITS2 - 4; j >= 0; j -= 4) { /* strip leading zeros */ - v = ((int)(a->d[i] >> (long)j)) & 0x0f; - if (z || (v != 0)) { - if (BIO_write(bp, &(Hex[v]), 1) != 1) + v = (int)((a->d[i] >> j) & 0x0f); + if (z || v != 0) { + if (BIO_write(bp, &Hex[v], 1) != 1) goto end; z = 1; } @@ -321,7 +323,7 @@ int BN_print(BIO *bp, const BIGNUM *a) } ret = 1; end: - return (ret); + return ret; } char *BN_options(void) @@ -332,12 +334,12 @@ char *BN_options(void) if (!init) { init++; #ifdef BN_LLONG - BIO_snprintf(data, sizeof(data), "bn(%d,%d)", - (int)sizeof(BN_ULLONG) * 8, (int)sizeof(BN_ULONG) * 8); + BIO_snprintf(data, sizeof(data), "bn(%zu,%zu)", + sizeof(BN_ULLONG) * 8, sizeof(BN_ULONG) * 8); #else - BIO_snprintf(data, sizeof(data), "bn(%d,%d)", - (int)sizeof(BN_ULONG) * 8, (int)sizeof(BN_ULONG) * 8); + BIO_snprintf(data, sizeof(data), "bn(%zu,%zu)", + sizeof(BN_ULONG) * 8, sizeof(BN_ULONG) * 8); #endif } - return (data); + return data; } diff --git a/crypto/bn/bn_rand.c b/crypto/bn/bn_rand.c index 9ce4c5f6..0be21600 100644 --- a/crypto/bn/bn_rand.c +++ b/crypto/bn/bn_rand.c @@ -14,11 +14,14 @@ #include #include -static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) +typedef enum bnrand_flag_e { + NORMAL, TESTING, PRIVATE +} BNRAND_FLAG; + +static int bnrand(BNRAND_FLAG flag, BIGNUM *rnd, int bits, int top, int bottom) { unsigned char *buf = NULL; - int ret = 0, bit, bytes, mask; - time_t tim; + int b, ret = 0, bit, bytes, mask; if (bits == 0) { if (top != BN_RAND_TOP_ANY || bottom != BN_RAND_BOTTOM_ANY) @@ -40,13 +43,11 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) } /* make a random number and set the top and bottom bits */ - time(&tim); - RAND_add(&tim, sizeof(tim), 0.0); - - if (RAND_bytes(buf, bytes) <= 0) + b = flag == NORMAL ? RAND_bytes(buf, bytes) : RAND_priv_bytes(buf, bytes); + if (b <= 0) goto err; - if (pseudorand == 2) { + if (flag == TESTING) { /* * generate patterns that are more likely to trigger BN library bugs */ @@ -86,7 +87,7 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom) err: OPENSSL_clear_free(buf, bytes); bn_check_top(rnd); - return (ret); + return ret; toosmall: BNerr(BN_F_BNRAND, BN_R_BITS_TOO_SMALL); @@ -95,29 +96,27 @@ toosmall: int BN_rand(BIGNUM *rnd, int bits, int top, int bottom) { - return bnrand(0, rnd, bits, top, bottom); -} - -int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom) -{ - return bnrand(1, rnd, bits, top, bottom); + return bnrand(NORMAL, rnd, bits, top, bottom); } int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom) { - return bnrand(2, rnd, bits, top, bottom); + return bnrand(TESTING, rnd, bits, top, bottom); +} + +int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom) +{ + return bnrand(PRIVATE, rnd, bits, top, bottom); } /* random number r: 0 <= r < range */ -static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range) +static int bnrand_range(BNRAND_FLAG flag, BIGNUM *r, const BIGNUM *range) { - int (*bn_rand) (BIGNUM *, int, int, int) = - pseudo ? BN_pseudo_rand : BN_rand; - int n; + int b, n; int count = 100; if (range->neg || BN_is_zero(range)) { - BNerr(BN_F_BN_RAND_RANGE, BN_R_INVALID_RANGE); + BNerr(BN_F_BNRAND_RANGE, BN_R_INVALID_RANGE); return 0; } @@ -133,7 +132,10 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range) * than range */ do { - if (!bn_rand(r, n + 1, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY)) + b = flag == NORMAL + ? BN_rand(r, n + 1, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY) + : BN_priv_rand(r, n + 1, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY); + if (!b) return 0; /* * If r < 3*range, use r := r MOD range (which is either r, r - @@ -150,7 +152,7 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range) } if (!--count) { - BNerr(BN_F_BN_RAND_RANGE, BN_R_TOO_MANY_ITERATIONS); + BNerr(BN_F_BNRAND_RANGE, BN_R_TOO_MANY_ITERATIONS); return 0; } @@ -159,11 +161,11 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range) } else { do { /* range = 11..._2 or range = 101..._2 */ - if (!bn_rand(r, n, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY)) + if (!BN_rand(r, n, BN_RAND_TOP_ANY, BN_RAND_BOTTOM_ANY)) return 0; if (!--count) { - BNerr(BN_F_BN_RAND_RANGE, BN_R_TOO_MANY_ITERATIONS); + BNerr(BN_F_BNRAND_RANGE, BN_R_TOO_MANY_ITERATIONS); return 0; } } @@ -176,12 +178,22 @@ static int bn_rand_range(int pseudo, BIGNUM *r, const BIGNUM *range) int BN_rand_range(BIGNUM *r, const BIGNUM *range) { - return bn_rand_range(0, r, range); + return bnrand_range(NORMAL, r, range); +} + +int BN_priv_rand_range(BIGNUM *r, const BIGNUM *range) +{ + return bnrand_range(PRIVATE, r, range); +} + +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom) +{ + return BN_rand(rnd, bits, top, bottom); } int BN_pseudo_rand_range(BIGNUM *r, const BIGNUM *range) { - return bn_rand_range(1, r, range); + return BN_rand_range(r, range); } /* diff --git a/crypto/bn/bn_recp.c b/crypto/bn/bn_recp.c index 20585b9d..e8736991 100644 --- a/crypto/bn/bn_recp.c +++ b/crypto/bn/bn_recp.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -22,12 +22,12 @@ BN_RECP_CTX *BN_RECP_CTX_new(void) BN_RECP_CTX *ret; if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) - return (NULL); + return NULL; bn_init(&(ret->N)); bn_init(&(ret->Nr)); ret->flags = BN_FLG_MALLOCED; - return (ret); + return ret; } void BN_RECP_CTX_free(BN_RECP_CTX *recp) @@ -48,7 +48,7 @@ int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *d, BN_CTX *ctx) BN_zero(&(recp->Nr)); recp->num_bits = BN_num_bits(d); recp->shift = 0; - return (1); + return 1; } int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, @@ -77,7 +77,7 @@ int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, err: BN_CTX_end(ctx); bn_check_top(r); - return (ret); + return ret; } int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, @@ -87,17 +87,11 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, BIGNUM *a, *b, *d, *r; BN_CTX_start(ctx); + d = (dv != NULL) ? dv : BN_CTX_get(ctx); + r = (rem != NULL) ? rem : BN_CTX_get(ctx); a = BN_CTX_get(ctx); b = BN_CTX_get(ctx); - if (dv != NULL) - d = dv; - else - d = BN_CTX_get(ctx); - if (rem != NULL) - r = rem; - else - r = BN_CTX_get(ctx); - if (a == NULL || b == NULL || d == NULL || r == NULL) + if (b == NULL) goto err; if (BN_ucmp(m, &(recp->N)) < 0) { @@ -107,7 +101,7 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, return 0; } BN_CTX_end(ctx); - return (1); + return 1; } /* @@ -167,7 +161,7 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, BN_CTX_end(ctx); bn_check_top(dv); bn_check_top(rem); - return (ret); + return ret; } /* @@ -195,5 +189,5 @@ int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx) err: bn_check_top(r); BN_CTX_end(ctx); - return (ret); + return ret; } diff --git a/crypto/bn/bn_shift.c b/crypto/bn/bn_shift.c index 6a1eec80..15d4b321 100644 --- a/crypto/bn/bn_shift.c +++ b/crypto/bn/bn_shift.c @@ -21,11 +21,11 @@ int BN_lshift1(BIGNUM *r, const BIGNUM *a) if (r != a) { r->neg = a->neg; if (bn_wexpand(r, a->top + 1) == NULL) - return (0); + return 0; r->top = a->top; } else { if (bn_wexpand(r, a->top + 1) == NULL) - return (0); + return 0; } ap = a->d; rp = r->d; @@ -40,7 +40,7 @@ int BN_lshift1(BIGNUM *r, const BIGNUM *a) r->top++; } bn_check_top(r); - return (1); + return 1; } int BN_rshift1(BIGNUM *r, const BIGNUM *a) @@ -53,14 +53,14 @@ int BN_rshift1(BIGNUM *r, const BIGNUM *a) if (BN_is_zero(a)) { BN_zero(r); - return (1); + return 1; } i = a->top; ap = a->d; j = i - (ap[i - 1] == 1); if (a != r) { if (bn_wexpand(r, j) == NULL) - return (0); + return 0; r->neg = a->neg; } rp = r->d; @@ -77,7 +77,7 @@ int BN_rshift1(BIGNUM *r, const BIGNUM *a) if (!r->top) r->neg = 0; /* don't allow negative zero */ bn_check_top(r); - return (1); + return 1; } int BN_lshift(BIGNUM *r, const BIGNUM *a, int n) @@ -96,7 +96,7 @@ int BN_lshift(BIGNUM *r, const BIGNUM *a, int n) nw = n / BN_BITS2; if (bn_wexpand(r, a->top + nw + 1) == NULL) - return (0); + return 0; r->neg = a->neg; lb = n % BN_BITS2; rb = BN_BITS2 - lb; @@ -116,7 +116,7 @@ int BN_lshift(BIGNUM *r, const BIGNUM *a, int n) r->top = a->top + nw + 1; bn_correct_top(r); bn_check_top(r); - return (1); + return 1; } int BN_rshift(BIGNUM *r, const BIGNUM *a, int n) @@ -138,12 +138,12 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n) lb = BN_BITS2 - rb; if (nw >= a->top || a->top == 0) { BN_zero(r); - return (1); + return 1; } i = (BN_num_bits(a) - n + (BN_BITS2 - 1)) / BN_BITS2; if (r != a) { if (bn_wexpand(r, i) == NULL) - return (0); + return 0; r->neg = a->neg; } else { if (n == 0) @@ -171,5 +171,5 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n) if (!r->top) r->neg = 0; /* don't allow negative zero */ bn_check_top(r); - return (1); + return 1; } diff --git a/crypto/bn/bn_sqr.c b/crypto/bn/bn_sqr.c index 44e7332a..dbfe9b82 100644 --- a/crypto/bn/bn_sqr.c +++ b/crypto/bn/bn_sqr.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,7 +32,7 @@ int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) BN_CTX_start(ctx); rr = (a != r) ? r : BN_CTX_get(ctx); tmp = BN_CTX_get(ctx); - if (!rr || !tmp) + if (rr == NULL || tmp == NULL) goto err; max = 2 * al; /* Non-zero (from above) */ @@ -98,7 +98,7 @@ int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) bn_check_top(rr); bn_check_top(tmp); BN_CTX_end(ctx); - return (ret); + return ret; } /* tmp must have 2*n words */ diff --git a/crypto/bn/bn_sqrt.c b/crypto/bn/bn_sqrt.c index 84376c78..37cdaf87 100644 --- a/crypto/bn/bn_sqrt.c +++ b/crypto/bn/bn_sqrt.c @@ -39,7 +39,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) } BNerr(BN_F_BN_MOD_SQRT, BN_R_P_IS_NOT_PRIME); - return (NULL); + return NULL; } if (BN_is_zero(a) || BN_is_one(a)) { @@ -179,7 +179,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) if (!BN_set_word(y, i)) goto end; } else { - if (!BN_pseudo_rand(y, BN_num_bits(p), 0, 0)) + if (!BN_rand(y, BN_num_bits(p), 0, 0)) goto end; if (BN_ucmp(y, p) >= 0) { if (!(p->neg ? BN_add : BN_sub) (y, y, p)) diff --git a/crypto/bn/bn_srp.c b/crypto/bn/bn_srp.c index 58b1691e..27b6ebe5 100644 --- a/crypto/bn/bn_srp.c +++ b/crypto/bn/bn_srp.c @@ -1,5 +1,5 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,12 +8,12 @@ */ #include "bn_lcl.h" -#include "e_os.h" +#include "internal/nelem.h" #ifndef OPENSSL_NO_SRP #include -#include +#include "internal/bn_srp.h" # if (BN_BYTES == 8) # if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) diff --git a/crypto/bn/bn_word.c b/crypto/bn/bn_word.c index 1af13a53..262d7668 100644 --- a/crypto/bn/bn_word.c +++ b/crypto/bn/bn_word.c @@ -55,7 +55,7 @@ BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w) (BN_ULLONG) w); #endif } - return ((BN_ULONG)ret); + return (BN_ULONG)ret; } BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w) @@ -92,7 +92,7 @@ BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w) if (!a->top) a->neg = 0; /* don't allow negative zero */ bn_check_top(a); - return (ret); + return ret; } int BN_add_word(BIGNUM *a, BN_ULONG w) @@ -115,7 +115,7 @@ int BN_add_word(BIGNUM *a, BN_ULONG w) i = BN_sub_word(a, w); if (!BN_is_zero(a)) a->neg = !(a->neg); - return (i); + return i; } for (i = 0; w != 0 && i < a->top; i++) { a->d[i] = l = (a->d[i] + w) & BN_MASK2; @@ -128,7 +128,7 @@ int BN_add_word(BIGNUM *a, BN_ULONG w) a->d[i] = w; } bn_check_top(a); - return (1); + return 1; } int BN_sub_word(BIGNUM *a, BN_ULONG w) @@ -153,13 +153,13 @@ int BN_sub_word(BIGNUM *a, BN_ULONG w) a->neg = 0; i = BN_add_word(a, w); a->neg = 1; - return (i); + return i; } if ((a->top == 1) && (a->d[0] < w)) { a->d[0] = w - a->d[0]; a->neg = 1; - return (1); + return 1; } i = 0; for (;;) { @@ -175,7 +175,7 @@ int BN_sub_word(BIGNUM *a, BN_ULONG w) if ((a->d[i] == 0) && (i == (a->top - 1))) a->top--; bn_check_top(a); - return (1); + return 1; } int BN_mul_word(BIGNUM *a, BN_ULONG w) @@ -191,11 +191,11 @@ int BN_mul_word(BIGNUM *a, BN_ULONG w) ll = bn_mul_words(a->d, a->d, a->top, w); if (ll) { if (bn_wexpand(a, a->top + 1) == NULL) - return (0); + return 0; a->d[a->top++] = ll; } } } bn_check_top(a); - return (1); + return 1; } diff --git a/crypto/bn/bn_x931p.c b/crypto/bn/bn_x931p.c index 8bfbcac6..2331b019 100644 --- a/crypto/bn/bn_x931p.c +++ b/crypto/bn/bn_x931p.c @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2011-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 @@ -62,10 +62,10 @@ int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, return 0; BN_CTX_start(ctx); - if (!p1) + if (p1 == NULL) p1 = BN_CTX_get(ctx); - if (!p2) + if (p2 == NULL) p2 = BN_CTX_get(ctx); t = BN_CTX_get(ctx); @@ -173,7 +173,7 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx) * - 1. By setting the top two bits we ensure that the lower bound is * exceeded. */ - if (!BN_rand(Xp, nbits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ANY)) + if (!BN_priv_rand(Xp, nbits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ANY)) goto err; BN_CTX_start(ctx); @@ -182,7 +182,7 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx) goto err; for (i = 0; i < 1000; i++) { - if (!BN_rand(Xq, nbits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ANY)) + if (!BN_priv_rand(Xq, nbits, BN_RAND_TOP_TWO, BN_RAND_BOTTOM_ANY)) goto err; /* Check that |Xp - Xq| > 2^(nbits - 100) */ BN_sub(t, Xp, Xq); @@ -225,9 +225,9 @@ int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, if (Xp1 == NULL || Xp2 == NULL) goto error; - if (!BN_rand(Xp1, 101, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) + if (!BN_priv_rand(Xp1, 101, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) goto error; - if (!BN_rand(Xp2, 101, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) + if (!BN_priv_rand(Xp2, 101, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) goto error; if (!BN_X931_derive_prime_ex(p, p1, p2, Xp, Xp1, Xp2, e, ctx, cb)) goto error; diff --git a/crypto/bn/build.info b/crypto/bn/build.info index c608ecce..a463edda 100644 --- a/crypto/bn/build.info +++ b/crypto/bn/build.info @@ -11,16 +11,16 @@ INCLUDE[../../libcrypto]=../../crypto/include INCLUDE[bn_exp.o]=.. GENERATE[bn-586.s]=asm/bn-586.pl \ - $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[bn-586.s]=../perlasm/x86asm.pl GENERATE[co-586.s]=asm/co-586.pl \ - $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[co-586.s]=../perlasm/x86asm.pl GENERATE[x86-mont.s]=asm/x86-mont.pl \ - $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[x86-mont.s]=../perlasm/x86asm.pl GENERATE[x86-gf2m.s]=asm/x86-gf2m.pl \ - $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[x86-gf2m.s]=../perlasm/x86asm.pl GENERATE[sparcv9a-mont.S]=asm/sparcv9a-mont.pl $(PERLASM_SCHEME) @@ -34,8 +34,10 @@ INCLUDE[sparct4-mont.o]=.. GENERATE[sparcv9-gf2m.S]=asm/sparcv9-gf2m.pl $(PERLASM_SCHEME) INCLUDE[sparcv9-gf2m.o]=.. -GENERATE[bn-mips.s]=asm/mips.pl $(PERLASM_SCHEME) -GENERATE[mips-mont.s]=asm/mips-mont.pl $(PERLASM_SCHEME) +GENERATE[bn-mips.S]=asm/mips.pl $(PERLASM_SCHEME) +INCLUDE[bn-mips.o]=.. +GENERATE[mips-mont.S]=asm/mips-mont.pl $(PERLASM_SCHEME) +INCLUDE[mips-mont.o]=.. GENERATE[s390x-mont.S]=asm/s390x-mont.pl $(PERLASM_SCHEME) GENERATE[s390x-gf2m.s]=asm/s390x-gf2m.pl $(PERLASM_SCHEME) @@ -47,7 +49,7 @@ GENERATE[rsaz-x86_64.s]=asm/rsaz-x86_64.pl $(PERLASM_SCHEME) GENERATE[rsaz-avx2.s]=asm/rsaz-avx2.pl $(PERLASM_SCHEME) GENERATE[bn-ia64.s]=asm/ia64.S -GENERATE[ia64-mont.s]=asm/ia64-mont.pl $(CFLAGS) $(LIB_CFLAGS) +GENERATE[ia64-mont.s]=asm/ia64-mont.pl $(LIB_CFLAGS) $(LIB_CPPFLAGS) GENERATE[parisc-mont.s]=asm/parisc-mont.pl $(PERLASM_SCHEME) @@ -63,22 +65,3 @@ INCLUDE[armv4-mont.o]=.. GENERATE[armv4-gf2m.S]=asm/armv4-gf2m.pl $(PERLASM_SCHEME) INCLUDE[armv4-gf2m.o]=.. GENERATE[armv8-mont.S]=asm/armv8-mont.pl $(PERLASM_SCHEME) - -OVERRIDES=bn-mips3.o pa-risc2W.o pa-risc2.c -BEGINRAW[Makefile] -##### BN assembler implementations - -{- $builddir -}/bn-mips3.o: {- $sourcedir -}/asm/mips3.s - @if [ "$(CC)" = "gcc" ]; then \ - ABI=`expr "$(CFLAGS)" : ".*-mabi=\([n3264]*\)"` && \ - as -$$ABI -O -o $@ {- $sourcedir -}/asm/mips3.s; \ - else $(CC) -c $(CFLAGS) $(LIB_CFLAGS) -o $@ {- $sourcedir -}/asm/mips3.s; fi - -# GNU assembler fails to compile PA-RISC2 modules, insist on calling -# vendor assembler... -{- $builddir -}/pa-risc2W.o: {- $sourcedir -}/asm/pa-risc2W.s - CC="$(CC)" $(PERL) $(SRCDIR)/util/fipsas.pl $(SRCDIR) $< /usr/ccs/bin/as -o pa-risc2W.o {- $sourcedir -}/asm/pa-risc2W.s -{- $builddir -}/pa-risc2.o: {- $sourcedir -}/asm/pa-risc2.s - CC="$(CC)" $(PERL) $(SRCDIR)/util/fipsas.pl $(SRCDIR) $< /usr/ccs/bin/as -o pa-risc2.o {- $sourcedir -}/asm/pa-risc2.s - -ENDRAW[Makefile] diff --git a/crypto/bn/rsaz_exp.c b/crypto/bn/rsaz_exp.c index 1a70f6ca..22455b8a 100644 --- a/crypto/bn/rsaz_exp.c +++ b/crypto/bn/rsaz_exp.c @@ -1,54 +1,17 @@ /* * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2012, Intel Corporation. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html + * + * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) + * (1) Intel Corporation, Israel Development Center, Haifa, Israel + * (2) University of Haifa, Israel */ -/***************************************************************************** -* * -* Copyright (c) 2012, Intel Corporation * -* * -* All rights reserved. * -* * -* Redistribution and use in source and binary forms, with or without * -* modification, are permitted provided that the following conditions are * -* met: * -* * -* * Redistributions of source code must retain the above copyright * -* notice, this list of conditions and the following disclaimer. * -* * -* * Redistributions in binary form must reproduce the above copyright * -* notice, this list of conditions and the following disclaimer in the * -* documentation and/or other materials provided with the * -* distribution. * -* * -* * Neither the name of the Intel Corporation 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 INTEL CORPORATION ""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 INTEL CORPORATION 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. * -* * -****************************************************************************** -* Developers and authors: * -* Shay Gueron (1, 2), and Vlad Krasnov (1) * -* (1) Intel Corporation, Israel Development Center, Haifa, Israel * -* (2) University of Haifa, Israel * -*****************************************************************************/ - #include #include "rsaz_exp.h" diff --git a/crypto/bn/rsaz_exp.h b/crypto/bn/rsaz_exp.h index 9501cc80..1c5e6188 100644 --- a/crypto/bn/rsaz_exp.h +++ b/crypto/bn/rsaz_exp.h @@ -1,54 +1,17 @@ /* * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2012, Intel Corporation. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html + * + * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) + * (1) Intel Corporation, Israel Development Center, Haifa, Israel + * (2) University of Haifa, Israel */ -/***************************************************************************** -* * -* Copyright (c) 2012, Intel Corporation * -* * -* All rights reserved. * -* * -* Redistribution and use in source and binary forms, with or without * -* modification, are permitted provided that the following conditions are * -* met: * -* * -* * Redistributions of source code must retain the above copyright * -* notice, this list of conditions and the following disclaimer. * -* * -* * Redistributions in binary form must reproduce the above copyright * -* notice, this list of conditions and the following disclaimer in the * -* documentation and/or other materials provided with the * -* distribution. * -* * -* * Neither the name of the Intel Corporation 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 INTEL CORPORATION ""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 INTEL CORPORATION 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. * -* * -****************************************************************************** -* Developers and authors: * -* Shay Gueron (1, 2), and Vlad Krasnov (1) * -* (1) Intel Corporation, Israel Development Center, Haifa, Israel * -* (2) University of Haifa, Israel * -*****************************************************************************/ - #ifndef RSAZ_EXP_H # define RSAZ_EXP_H diff --git a/crypto/buffer/buf_err.c b/crypto/buffer/buf_err.c index a6a2ab88..7e6e5322 100644 --- a/crypto/buffer/buf_err.c +++ b/crypto/buffer/buf_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,24 +8,19 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_BUF,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_BUF,0,reason) - -static ERR_STRING_DATA BUF_str_functs[] = { - {ERR_FUNC(BUF_F_BUF_MEM_GROW), "BUF_MEM_grow"}, - {ERR_FUNC(BUF_F_BUF_MEM_GROW_CLEAN), "BUF_MEM_grow_clean"}, - {ERR_FUNC(BUF_F_BUF_MEM_NEW), "BUF_MEM_new"}, +static const ERR_STRING_DATA BUF_str_functs[] = { + {ERR_PACK(ERR_LIB_BUF, BUF_F_BUF_MEM_GROW, 0), "BUF_MEM_grow"}, + {ERR_PACK(ERR_LIB_BUF, BUF_F_BUF_MEM_GROW_CLEAN, 0), "BUF_MEM_grow_clean"}, + {ERR_PACK(ERR_LIB_BUF, BUF_F_BUF_MEM_NEW, 0), "BUF_MEM_new"}, {0, NULL} }; -static ERR_STRING_DATA BUF_str_reasons[] = { +static const ERR_STRING_DATA BUF_str_reasons[] = { {0, NULL} }; @@ -34,10 +29,9 @@ static ERR_STRING_DATA BUF_str_reasons[] = { int ERR_load_BUF_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(BUF_str_functs[0].error) == NULL) { - ERR_load_strings(0, BUF_str_functs); - ERR_load_strings(0, BUF_str_reasons); + ERR_load_strings_const(BUF_str_functs); + ERR_load_strings_const(BUF_str_reasons); } #endif return 1; diff --git a/crypto/buffer/buffer.c b/crypto/buffer/buffer.c index f3f8a1b5..cbd2e531 100644 --- a/crypto/buffer/buffer.c +++ b/crypto/buffer/buffer.c @@ -25,7 +25,7 @@ BUF_MEM *BUF_MEM_new_ex(unsigned long flags) ret = BUF_MEM_new(); if (ret != NULL) ret->flags = flags; - return (ret); + return ret; } BUF_MEM *BUF_MEM_new(void) @@ -35,9 +35,9 @@ BUF_MEM *BUF_MEM_new(void) ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { BUFerr(BUF_F_BUF_MEM_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } - return (ret); + return ret; } void BUF_MEM_free(BUF_MEM *a) @@ -68,7 +68,7 @@ static char *sec_alloc_realloc(BUF_MEM *str, size_t len) str->data = NULL; } } - return (ret); + return ret; } size_t BUF_MEM_grow(BUF_MEM *str, size_t len) @@ -78,13 +78,13 @@ size_t BUF_MEM_grow(BUF_MEM *str, size_t len) if (str->length >= len) { str->length = len; - return (len); + return len; } if (str->max >= len) { if (str->data != NULL) memset(&str->data[str->length], 0, len - str->length); str->length = len; - return (len); + return len; } /* This limit is sufficient to ensure (len+3)/3*4 < 2**31 */ if (len > LIMIT_BEFORE_EXPANSION) { @@ -105,7 +105,7 @@ size_t BUF_MEM_grow(BUF_MEM *str, size_t len) memset(&str->data[str->length], 0, len - str->length); str->length = len; } - return (len); + return len; } size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len) @@ -117,12 +117,12 @@ size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len) if (str->data != NULL) memset(&str->data[len], 0, str->length - len); str->length = len; - return (len); + return len; } if (str->max >= len) { memset(&str->data[str->length], 0, len - str->length); str->length = len; - return (len); + return len; } /* This limit is sufficient to ensure (len+3)/3*4 < 2**31 */ if (len > LIMIT_BEFORE_EXPANSION) { @@ -143,7 +143,7 @@ size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len) memset(&str->data[str->length], 0, len - str->length); str->length = len; } - return (len); + return len; } void BUF_reverse(unsigned char *out, const unsigned char *in, size_t size) diff --git a/crypto/build.info b/crypto/build.info index 916d24f6..0a8f6e22 100644 --- a/crypto/build.info +++ b/crypto/build.info @@ -2,7 +2,7 @@ LIBS=../libcrypto SOURCE[../libcrypto]=\ cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c cpt_err.c \ - ebcdic.c uid.c o_time.c o_str.c o_dir.c o_fopen.c \ + ebcdic.c uid.c o_time.c o_str.c o_dir.c o_fopen.c ctype.c \ threads_pthread.c threads_win.c threads_none.c \ o_init.c o_fips.c mem_sec.c init.c {- $target{cpuid_asm_src} -} \ {- $target{uplink_aux_src} -} @@ -11,14 +11,15 @@ EXTRA= ../ms/uplink-x86.pl ../ms/uplink.c ../ms/applink.c \ ppccpuid.pl pariscid.pl alphacpuid.pl arm64cpuid.pl armv4cpuid.pl DEPEND[cversion.o]=buildinf.h -GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(CFLAGS_Q)" "$(PLATFORM)" +GENERATE[buildinf.h]=../util/mkbuildinf.pl "$(CC) $(CFLAGS) $(CPPFLAGS_Q)" "$(PLATFORM)" DEPEND[buildinf.h]=../configdata.pm GENERATE[uplink-x86.s]=../ms/uplink-x86.pl $(PERLASM_SCHEME) GENERATE[uplink-x86_64.s]=../ms/uplink-x86_64.pl $(PERLASM_SCHEME) GENERATE[uplink-ia64.s]=../ms/uplink-ia64.pl $(PERLASM_SCHEME) -GENERATE[x86cpuid.s]=x86cpuid.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[x86cpuid.s]=x86cpuid.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[x86cpuid.s]=perlasm/x86asm.pl GENERATE[x86_64cpuid.s]=x86_64cpuid.pl $(PERLASM_SCHEME) @@ -31,6 +32,8 @@ GENERATE[arm64cpuid.S]=arm64cpuid.pl $(PERLASM_SCHEME) INCLUDE[arm64cpuid.o]=. GENERATE[armv4cpuid.S]=armv4cpuid.pl $(PERLASM_SCHEME) INCLUDE[armv4cpuid.o]=. +GENERATE[s390xcpuid.S]=s390xcpuid.pl $(PERLASM_SCHEME) +INCLUDE[s390xcpuid.o]=. IF[{- $config{target} =~ /^(?:Cygwin|mingw|VC-)/ -}] SHARED_SOURCE[../libcrypto]=dllmain.c diff --git a/crypto/c64xpluscpuid.pl b/crypto/c64xpluscpuid.pl index 9efe1205..b7b11d50 100644 --- a/crypto/c64xpluscpuid.pl +++ b/crypto/c64xpluscpuid.pl @@ -231,7 +231,7 @@ bus_loop1?: _OPENSSL_instrument_bus2: .asmfunc MV A6,B0 ; reassign max -|| MV B4,A6 ; reassing sizeof(output) +|| MV B4,A6 ; reassign sizeof(output) || MVK 0x00004030,A3 MV A4,B4 ; reassign output || MVK 0,A4 ; return value diff --git a/crypto/camellia/asm/cmll-x86.pl b/crypto/camellia/asm/cmll-x86.pl index 59f9ed91..55af9b4e 100644 --- a/crypto/camellia/asm/cmll-x86.pl +++ b/crypto/camellia/asm/cmll-x86.pl @@ -52,7 +52,7 @@ $OPENSSL=1; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"cmll-586.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); @T=("eax","ebx","ecx","edx"); $idx="esi"; @@ -792,9 +792,9 @@ if ($OPENSSL) { 64, 40,211,123,187,201, 67,193, 21,227,173,244,119,199,128,158); sub S1110 { my $i=shift; $i=@SBOX[$i]; return $i<<24|$i<<16|$i<<8; } -sub S4404 { my $i=shift; $i=($i<<1|$i>>7)&0xff; $i=@SBOX[$i]; return $i<<24|$i<<16|$i; } -sub S0222 { my $i=shift; $i=@SBOX[$i]; $i=($i<<1|$i>>7)&0xff; return $i<<16|$i<<8|$i; } -sub S3033 { my $i=shift; $i=@SBOX[$i]; $i=($i>>1|$i<<7)&0xff; return $i<<24|$i<<8|$i; } +sub S4404 { my $i=shift; $i=($i<<1|$i>>7)&0xff; $i=@SBOX[$i]; return $i<<24|$i<<16|$i; } +sub S0222 { my $i=shift; $i=@SBOX[$i]; $i=($i<<1|$i>>7)&0xff; return $i<<16|$i<<8|$i; } +sub S3033 { my $i=shift; $i=@SBOX[$i]; $i=($i>>1|$i<<7)&0xff; return $i<<24|$i<<8|$i; } &set_label("Camellia_SIGMA",64); &data_word( diff --git a/crypto/camellia/asm/cmll-x86_64.pl b/crypto/camellia/asm/cmll-x86_64.pl index da5ad7b7..02c52c3e 100644 --- a/crypto/camellia/asm/cmll-x86_64.pl +++ b/crypto/camellia/asm/cmll-x86_64.pl @@ -137,11 +137,17 @@ Camellia_EncryptBlock: .align 16 .Lenc_rounds: Camellia_EncryptBlock_Rounds: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lenc_prologue: #mov %rsi,$inp # put away arguments @@ -173,13 +179,20 @@ Camellia_EncryptBlock_Rounds: mov @S[3],12($out) mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%rbp +.cfi_restore %rbp mov 32(%rsp),%rbx +.cfi_restore %rbx lea 40(%rsp),%rsp +.cfi_adjust_cfa_offset -40 .Lenc_epilogue: ret +.cfi_endproc .size Camellia_EncryptBlock_Rounds,.-Camellia_EncryptBlock_Rounds .type _x86_64_Camellia_encrypt,\@abi-omnipotent @@ -247,11 +260,17 @@ Camellia_DecryptBlock: .align 16 .Ldec_rounds: Camellia_DecryptBlock_Rounds: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Ldec_prologue: #mov %rsi,$inp # put away arguments @@ -283,13 +302,20 @@ Camellia_DecryptBlock_Rounds: mov @S[3],12($out) mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%rbp +.cfi_restore %rbp mov 32(%rsp),%rbx +.cfi_restore %rbx lea 40(%rsp),%rsp +.cfi_adjust_cfa_offset -40 .Ldec_epilogue: ret +.cfi_endproc .size Camellia_DecryptBlock_Rounds,.-Camellia_DecryptBlock_Rounds .type _x86_64_Camellia_decrypt,\@abi-omnipotent @@ -409,11 +435,17 @@ $code.=<<___; .type Camellia_Ekeygen,\@function,3 .align 16 Camellia_Ekeygen: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lkey_prologue: mov %edi,${keyend}d # put away arguments, keyBitLength @@ -573,13 +605,20 @@ $code.=<<___; mov \$4,%eax .Ldone: mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%rbp +.cfi_restore %rbp mov 32(%rsp),%rbx +.cfi_restore %rbx lea 40(%rsp),%rsp +.cfi_adjust_cfa_offset -40 .Lkey_epilogue: ret +.cfi_endproc .size Camellia_Ekeygen,.-Camellia_Ekeygen ___ } @@ -637,17 +676,25 @@ $code.=<<___; .type Camellia_cbc_encrypt,\@function,6 .align 16 Camellia_cbc_encrypt: +.cfi_startproc cmp \$0,%rdx je .Lcbc_abort push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lcbc_prologue: mov %rsp,%rbp +.cfi_def_cfa_register %rbp sub \$64,%rsp and \$-64,%rsp @@ -668,6 +715,7 @@ Camellia_cbc_encrypt: mov %r8,$_ivp mov %rbp,$_rsp +.cfi_cfa_expression $_rsp,deref,+56 .Lcbc_body: lea .LCamellia_SBOX(%rip),$Tbl @@ -856,15 +904,24 @@ Camellia_cbc_encrypt: .align 16 .Lcbc_done: mov $_rsp,%rcx +.cfi_def_cfa %rcx,56 mov 0(%rcx),%r15 +.cfi_restore %r15 mov 8(%rcx),%r14 +.cfi_restore %r14 mov 16(%rcx),%r13 +.cfi_restore %r13 mov 24(%rcx),%r12 +.cfi_restore %r12 mov 32(%rcx),%rbp +.cfi_restore %rbp mov 40(%rcx),%rbx +.cfi_restore %rbx lea 48(%rcx),%rsp +.cfi_def_cfa %rsp,8 .Lcbc_abort: ret +.cfi_endproc .size Camellia_cbc_encrypt,.-Camellia_cbc_encrypt .asciz "Camellia for x86_64 by " diff --git a/crypto/camellia/asm/cmllt4-sparcv9.pl b/crypto/camellia/asm/cmllt4-sparcv9.pl index ffe4a7d9..6396679a 100644 --- a/crypto/camellia/asm/cmllt4-sparcv9.pl +++ b/crypto/camellia/asm/cmllt4-sparcv9.pl @@ -8,8 +8,8 @@ # ==================================================================== -# Written by David S. Miller and Andy Polyakov -# . The module is licensed under 2-clause BSD +# Written by David S. Miller and Andy Polyakov. +# The module is licensed under 2-clause BSD # license. October 2012. All rights reserved. # ==================================================================== @@ -17,7 +17,7 @@ # Camellia for SPARC T4. # # As with AES below results [for aligned data] are virtually identical -# to critical path lenths for 3-cycle instruction latency: +# to critical path lengths for 3-cycle instruction latency: # # 128-bit key 192/256- # CBC encrypt 4.14/4.21(*) 5.46/5.52 @@ -25,7 +25,7 @@ # misaligned data. # # As with Intel AES-NI, question is if it's possible to improve -# performance of parallelizeable modes by interleaving round +# performance of parallelizable modes by interleaving round # instructions. In Camellia every instruction is dependent on # previous, which means that there is place for 2 additional ones # in between two dependent. Can we expect 3x performance improvement? diff --git a/crypto/camellia/build.info b/crypto/camellia/build.info index fd782724..e36a19bd 100644 --- a/crypto/camellia/build.info +++ b/crypto/camellia/build.info @@ -3,7 +3,9 @@ SOURCE[../../libcrypto]=\ cmll_ecb.c cmll_ofb.c cmll_cfb.c cmll_ctr.c \ {- $target{cmll_asm_src} -} -GENERATE[cmll-x86.s]=asm/cmll-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[cmll-x86.s]=asm/cmll-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) \ + $(PROCESSOR) DEPEND[cmll-x86.s]=../perlasm/x86asm.pl GENERATE[cmll-x86_64.s]=asm/cmll-x86_64.pl $(PERLASM_SCHEME) GENERATE[cmllt4-sparcv9.S]=asm/cmllt4-sparcv9.pl $(PERLASM_SCHEME) diff --git a/crypto/cast/asm/cast-586.pl b/crypto/cast/asm/cast-586.pl index 6beb9c5f..d5d38965 100644 --- a/crypto/cast/asm/cast-586.pl +++ b/crypto/cast/asm/cast-586.pl @@ -7,7 +7,7 @@ # https://www.openssl.org/source/license.html -# This flag makes the inner loop one cycle longer, but generates +# This flag makes the inner loop one cycle longer, but generates # code that runs %30 faster on the pentium pro/II, 44% faster # of PIII, while only %7 slower on the pentium. # By default, this flag is on. @@ -21,7 +21,7 @@ require "cbc.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"cast-586.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $CAST_ROUNDS=16; $L="edi"; @@ -157,7 +157,7 @@ sub E_CAST { if ($ppro) { &xor( $tmp1, $tmp1); &mov( $tmp2, 0xff); - + &movb( &LB($tmp1), &HB($tmp4)); # A &and( $tmp2, $tmp4); @@ -166,7 +166,7 @@ sub E_CAST { } else { &mov( $tmp2, $tmp4); # B &movb( &LB($tmp1), &HB($tmp4)); # A # BAD BAD BAD - + &shr( $tmp4, 16); # &and( $tmp2, 0xff); } diff --git a/crypto/cast/build.info b/crypto/cast/build.info index f6a25c9a..b0f59f38 100644 --- a/crypto/cast/build.info +++ b/crypto/cast/build.info @@ -2,5 +2,6 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ c_skey.c c_ecb.c {- $target{cast_asm_src} -} c_cfb64.c c_ofb64.c -GENERATE[cast-586.s]=asm/cast-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[cast-586.s]=asm/cast-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[cast-586.s]=../perlasm/x86asm.pl ../perlasm/cbc.pl diff --git a/crypto/cast/cast_lcl.h b/crypto/cast/cast_lcl.h index e8cf322d..35e89930 100644 --- a/crypto/cast/cast_lcl.h +++ b/crypto/cast/cast_lcl.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,8 +7,6 @@ * https://www.openssl.org/source/license.html */ -#include "e_os.h" - #ifdef OPENSSL_SYS_WIN32 # include #endif diff --git a/crypto/cast/cast_s.h b/crypto/cast/cast_s.h index d9fd6ac4..b27415b9 100644 --- a/crypto/cast/cast_s.h +++ b/crypto/cast/cast_s.h @@ -7,7 +7,7 @@ * https://www.openssl.org/source/license.html */ -OPENSSL_GLOBAL const CAST_LONG CAST_S_table0[256] = { +const CAST_LONG CAST_S_table0[256] = { 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, @@ -74,7 +74,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table0[256] = { 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table1[256] = { +const CAST_LONG CAST_S_table1[256] = { 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, @@ -141,7 +141,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table1[256] = { 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table2[256] = { +const CAST_LONG CAST_S_table2[256] = { 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, @@ -208,7 +208,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table2[256] = { 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table3[256] = { +const CAST_LONG CAST_S_table3[256] = { 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, @@ -275,7 +275,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table3[256] = { 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table4[256] = { +const CAST_LONG CAST_S_table4[256] = { 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, @@ -342,7 +342,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table4[256] = { 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table5[256] = { +const CAST_LONG CAST_S_table5[256] = { 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, @@ -409,7 +409,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table5[256] = { 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table6[256] = { +const CAST_LONG CAST_S_table6[256] = { 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, @@ -476,7 +476,7 @@ OPENSSL_GLOBAL const CAST_LONG CAST_S_table6[256] = { 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3, }; -OPENSSL_GLOBAL const CAST_LONG CAST_S_table7[256] = { +const CAST_LONG CAST_S_table7[256] = { 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, diff --git a/crypto/chacha/asm/chacha-armv4.pl b/crypto/chacha/asm/chacha-armv4.pl index b5e21e49..d3fadcc6 100755 --- a/crypto/chacha/asm/chacha-armv4.pl +++ b/crypto/chacha/asm/chacha-armv4.pl @@ -15,7 +15,7 @@ # ==================================================================== # # December 2014 -# +# # ChaCha20 for ARMv4. # # Performance in cycles per byte out of large buffer. @@ -172,8 +172,10 @@ $code.=<<___; #include "arm_arch.h" .text -#if defined(__thumb2__) +#if defined(__thumb2__) || defined(__clang__) .syntax unified +#endif +#if defined(__thumb2__) .thumb #else .code 32 @@ -720,7 +722,7 @@ ChaCha20_neon: vadd.i32 $d2,$d1,$t0 @ counter+2 str @t[3], [sp,#4*(16+15)] mov @t[3],#10 - add @x[12],@x[12],#3 @ counter+3 + add @x[12],@x[12],#3 @ counter+3 b .Loop_neon .align 4 diff --git a/crypto/chacha/asm/chacha-armv8.pl b/crypto/chacha/asm/chacha-armv8.pl index f7e10747..4a838bc2 100755 --- a/crypto/chacha/asm/chacha-armv8.pl +++ b/crypto/chacha/asm/chacha-armv8.pl @@ -15,7 +15,7 @@ # ==================================================================== # # June 2015 -# +# # ChaCha20 for ARMv8. # # Performance in cycles per byte out of large buffer. @@ -28,6 +28,7 @@ # Denver 4.50/+82% 2.63 2.67(*) # X-Gene 9.50/+46% 8.82 8.89(*) # Mongoose 8.00/+44% 3.64 3.25 +# Kryo 8.17/+50% 4.83 4.65 # # (*) it's expected that doubling interleave factor doesn't help # all processors, only those with higher NEON latency and @@ -201,7 +202,7 @@ ChaCha20_ctr32: mov $ctr,#10 subs $len,$len,#64 .Loop: - sub $ctr,$ctr,#1 + sub $ctr,$ctr,#1 ___ foreach (&ROUND(0, 4, 8,12)) { eval; } foreach (&ROUND(0, 5,10,15)) { eval; } diff --git a/crypto/chacha/asm/chacha-c64xplus.pl b/crypto/chacha/asm/chacha-c64xplus.pl index bdb38044..266401eb 100755 --- a/crypto/chacha/asm/chacha-c64xplus.pl +++ b/crypto/chacha/asm/chacha-c64xplus.pl @@ -22,7 +22,7 @@ # faster than code generated by TI compiler. Compiler also disables # interrupts for some reason, thus making interrupt response time # dependent on input length. This module on the other hand is free -# from such limiation. +# from such limitation. $output=pop; open STDOUT,">$output"; diff --git a/crypto/chacha/asm/chacha-ppc.pl b/crypto/chacha/asm/chacha-ppc.pl index 181decda..f972ee47 100755 --- a/crypto/chacha/asm/chacha-ppc.pl +++ b/crypto/chacha/asm/chacha-ppc.pl @@ -15,7 +15,7 @@ # ==================================================================== # # October 2015 -# +# # ChaCha20 for PowerPC/AltiVec. # # Performance in cycles per byte out of large buffer. @@ -525,7 +525,7 @@ $code.=<<___; lwz @d[3],12($ctr) vadduwm @K[5],@K[4],@K[5] - vspltisw $twenty,-12 # synthesize constants + vspltisw $twenty,-12 # synthesize constants vspltisw $twelve,12 vspltisw $twenty5,-7 #vspltisw $seven,7 # synthesized in the loop diff --git a/crypto/chacha/asm/chacha-x86.pl b/crypto/chacha/asm/chacha-x86.pl index 61b32861..e177a222 100755 --- a/crypto/chacha/asm/chacha-x86.pl +++ b/crypto/chacha/asm/chacha-x86.pl @@ -28,6 +28,7 @@ # Westmere 9.50/+45% 3.35 # Sandy Bridge 10.5/+47% 3.20 # Haswell 8.15/+50% 2.83 +# Skylake 7.53/+22% 2.75 # Silvermont 17.4/+36% 8.35 # Goldmont 13.4/+40% 4.36 # Sledgehammer 10.2/+54% @@ -42,7 +43,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"chacha-x86.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $xmm=$ymm=0; for (@ARGV) { $xmm=1 if (/-DOPENSSL_IA32_SSE2/); } diff --git a/crypto/chacha/asm/chacha-x86_64.pl b/crypto/chacha/asm/chacha-x86_64.pl index 347dfcb3..51bb6a96 100755 --- a/crypto/chacha/asm/chacha-x86_64.pl +++ b/crypto/chacha/asm/chacha-x86_64.pl @@ -18,9 +18,17 @@ # # ChaCha20 for x86_64. # +# December 2016 +# +# Add AVX512F code path. +# +# December 2017 +# +# Add AVX512VL code path. +# # Performance in cycles per byte out of large buffer. # -# IALU/gcc 4.8(i) 1xSSSE3/SSE2 4xSSSE3 8xAVX2 +# IALU/gcc 4.8(i) 1xSSSE3/SSE2 4xSSSE3 NxAVX(v) # # P4 9.48/+99% -/22.7(ii) - # Core2 7.83/+55% 7.90/8.08 4.35 @@ -28,10 +36,13 @@ # Sandy Bridge 8.31/+42% 5.45/6.76 2.72 # Ivy Bridge 6.71/+46% 5.40/6.49 2.41 # Haswell 5.92/+43% 5.20/6.45 2.42 1.23 +# Skylake[-X] 5.87/+39% 4.70/- 2.31 1.19[0.80(vi)] # Silvermont 12.0/+33% 7.75/7.40 7.03(iii) +# Knights L 11.7/- - 9.60(iii) 0.80 # Goldmont 10.6/+17% 5.10/- 3.28 # Sledgehammer 7.28/+52% -/14.2(ii) - # Bulldozer 9.66/+28% 9.85/11.1 3.06(iv) +# Ryzen 5.96/+50% 5.19/- 2.40 2.09 # VIA Nano 10.5/+46% 6.72/8.60 6.05 # # (i) compared to older gcc 3.x one can observe >2x improvement on @@ -44,6 +55,9 @@ # limitations, SSE2 can do better, but gain is considered too # low to justify the [maintenance] effort; # (iv) Bulldozer actually executes 4xXOP code path that delivers 2.20; +# (v) 8xAVX2, 8xAVX512VL or 16xAVX512F, whichever best applicable; +# (vi) even though Skylake-X can execute AVX512F code and deliver 0.57 +# cpb in single thread, the corresponding capability is suppressed; $flavour = shift; $output = shift; @@ -58,12 +72,13 @@ die "can't locate x86_64-xlate.pl"; if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1` =~ /GNU assembler version ([2-9]\.[0-9]+)/) { - $avx = ($1>=2.19) + ($1>=2.22); + $avx = ($1>=2.19) + ($1>=2.22) + ($1>=2.25); } if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) && - `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) { - $avx = ($1>=2.09) + ($1>=2.10); + `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) { + $avx = ($1>=2.09) + ($1>=2.10) + ($1>=2.12); + $avx += 1 if ($1==2.11 && $2>=8); } if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && @@ -103,6 +118,17 @@ $code.=<<___; .byte 0x2,0x3,0x0,0x1, 0x6,0x7,0x4,0x5, 0xa,0xb,0x8,0x9, 0xe,0xf,0xc,0xd .Lrot24: .byte 0x3,0x0,0x1,0x2, 0x7,0x4,0x5,0x6, 0xb,0x8,0x9,0xa, 0xf,0xc,0xd,0xe +.Ltwoy: +.long 2,0,0,0, 2,0,0,0 +.align 64 +.Lzeroz: +.long 0,0,0,0, 1,0,0,0, 2,0,0,0, 3,0,0,0 +.Lfourz: +.long 4,0,0,0, 4,0,0,0, 4,0,0,0, 4,0,0,0 +.Lincz: +.long 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +.Lsixteen: +.long 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16 .Lsigma: .asciz "expand 32-byte k" .asciz "ChaCha20 for x86_64, CRYPTOGAMS by " @@ -227,19 +253,36 @@ $code.=<<___; .type ChaCha20_ctr32,\@function,5 .align 64 ChaCha20_ctr32: +.cfi_startproc cmp \$0,$len je .Lno_data mov OPENSSL_ia32cap_P+4(%rip),%r10 +___ +$code.=<<___ if ($avx>2); + bt \$48,%r10 # check for AVX512F + jc .LChaCha20_avx512 + test %r10,%r10 # check for AVX512VL + js .LChaCha20_avx512vl +___ +$code.=<<___; test \$`1<<(41-32)`,%r10d jnz .LChaCha20_ssse3 push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 sub \$64+24,%rsp +.cfi_adjust_cfa_offset 64+24 +.Lctr32_body: #movdqa .Lsigma(%rip),%xmm0 movdqu ($key),%xmm1 @@ -378,15 +421,25 @@ $code.=<<___; jnz .Loop_tail .Ldone: - add \$64+24,%rsp - pop %r15 - pop %r14 - pop %r13 - pop %r12 - pop %rbp - pop %rbx + lea 64+24+48(%rsp),%rsi +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lno_data: ret +.cfi_endproc .size ChaCha20_ctr32,.-ChaCha20_ctr32 ___ @@ -419,13 +472,16 @@ sub SSSE3ROUND { # critical path is 20 "SIMD ticks" per round &por ($b,$t); } -my $xframe = $win64 ? 32+32+8 : 24; +my $xframe = $win64 ? 32+8 : 8; $code.=<<___; .type ChaCha20_ssse3,\@function,5 .align 32 ChaCha20_ssse3: +.cfi_startproc .LChaCha20_ssse3: + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register %r9 ___ $code.=<<___ if ($avx); test \$`1<<(43-32)`,%r10d @@ -436,18 +492,12 @@ $code.=<<___; ja .LChaCha20_4x # but overall it won't be slower .Ldo_sse3_after_all: - push %rbx - push %rbp - push %r12 - push %r13 - push %r14 - push %r15 - sub \$64+$xframe,%rsp ___ $code.=<<___ if ($win64); - movaps %xmm6,64+32(%rsp) - movaps %xmm7,64+48(%rsp) + movaps %xmm6,-0x28(%r9) + movaps %xmm7,-0x18(%r9) +.Lssse3_body: ___ $code.=<<___; movdqa .Lsigma(%rip),$a @@ -461,7 +511,7 @@ $code.=<<___; movdqa $b,0x10(%rsp) movdqa $c,0x20(%rsp) movdqa $d,0x30(%rsp) - mov \$10,%ebp + mov \$10,$counter # reuse $counter jmp .Loop_ssse3 .align 32 @@ -471,7 +521,7 @@ $code.=<<___; movdqa 0x10(%rsp),$b movdqa 0x20(%rsp),$c paddd 0x30(%rsp),$d - mov \$10,%ebp + mov \$10,$counter movdqa $d,0x30(%rsp) jmp .Loop_ssse3 @@ -489,7 +539,7 @@ ___ &pshufd ($b,$b,0b10010011); &pshufd ($d,$d,0b00111001); - &dec ("%ebp"); + &dec ($counter); &jnz (".Loop_ssse3"); $code.=<<___; @@ -528,32 +578,29 @@ $code.=<<___; movdqa $b,0x10(%rsp) movdqa $c,0x20(%rsp) movdqa $d,0x30(%rsp) - xor %rbx,%rbx + xor $counter,$counter .Loop_tail_ssse3: - movzb ($inp,%rbx),%eax - movzb (%rsp,%rbx),%ecx - lea 1(%rbx),%rbx + movzb ($inp,$counter),%eax + movzb (%rsp,$counter),%ecx + lea 1($counter),$counter xor %ecx,%eax - mov %al,-1($out,%rbx) + mov %al,-1($out,$counter) dec $len jnz .Loop_tail_ssse3 .Ldone_ssse3: ___ $code.=<<___ if ($win64); - movaps 64+32(%rsp),%xmm6 - movaps 64+48(%rsp),%xmm7 + movaps -0x28(%r9),%xmm6 + movaps -0x18(%r9),%xmm7 ___ $code.=<<___; - add \$64+$xframe,%rsp - pop %r15 - pop %r14 - pop %r13 - pop %r12 - pop %rbp - pop %rbx + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.Lssse3_epilogue: ret +.cfi_endproc .size ChaCha20_ssse3,.-ChaCha20_ssse3 ___ } @@ -689,13 +736,16 @@ my @x=map("\"$_\"",@xx); ); } -my $xframe = $win64 ? 0xa0 : 0; +my $xframe = $win64 ? 0xa8 : 8; $code.=<<___; .type ChaCha20_4x,\@function,5 .align 32 ChaCha20_4x: +.cfi_startproc .LChaCha20_4x: + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register %r9 mov %r10,%r11 ___ $code.=<<___ if ($avx>1); @@ -712,8 +762,7 @@ $code.=<<___; je .Ldo_sse3_after_all # to detect Atom .Lproceed4x: - lea -0x78(%rsp),%r11 - sub \$0x148+$xframe,%rsp + sub \$0x140+$xframe,%rsp ___ ################ stack layout # +0x00 SIMD equivalent of @x[8-12] @@ -724,16 +773,17 @@ ___ # ... # +0x140 $code.=<<___ if ($win64); - movaps %xmm6,-0x30(%r11) - movaps %xmm7,-0x20(%r11) - movaps %xmm8,-0x10(%r11) - movaps %xmm9,0x00(%r11) - movaps %xmm10,0x10(%r11) - movaps %xmm11,0x20(%r11) - movaps %xmm12,0x30(%r11) - movaps %xmm13,0x40(%r11) - movaps %xmm14,0x50(%r11) - movaps %xmm15,0x60(%r11) + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L4x_body: ___ $code.=<<___; movdqa .Lsigma(%rip),$xa3 # key[0] @@ -1122,21 +1172,23 @@ $code.=<<___; .Ldone4x: ___ $code.=<<___ if ($win64); - lea 0x140+0x30(%rsp),%r11 - movaps -0x30(%r11),%xmm6 - movaps -0x20(%r11),%xmm7 - movaps -0x10(%r11),%xmm8 - movaps 0x00(%r11),%xmm9 - movaps 0x10(%r11),%xmm10 - movaps 0x20(%r11),%xmm11 - movaps 0x30(%r11),%xmm12 - movaps 0x40(%r11),%xmm13 - movaps 0x50(%r11),%xmm14 - movaps 0x60(%r11),%xmm15 + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 ___ $code.=<<___; - add \$0x148+$xframe,%rsp + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.L4x_epilogue: ret +.cfi_endproc .size ChaCha20_4x,.-ChaCha20_4x ___ } @@ -1217,15 +1269,17 @@ my @x=map("\"$_\"",@xx); ); } -my $xframe = $win64 ? 0xa0 : 0; +my $xframe = $win64 ? 0xa8 : 8; $code.=<<___; .type ChaCha20_4xop,\@function,5 .align 32 ChaCha20_4xop: +.cfi_startproc .LChaCha20_4xop: - lea -0x78(%rsp),%r11 - sub \$0x148+$xframe,%rsp + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register %r9 + sub \$0x140+$xframe,%rsp ___ ################ stack layout # +0x00 SIMD equivalent of @x[8-12] @@ -1236,16 +1290,17 @@ ___ # ... # +0x140 $code.=<<___ if ($win64); - movaps %xmm6,-0x30(%r11) - movaps %xmm7,-0x20(%r11) - movaps %xmm8,-0x10(%r11) - movaps %xmm9,0x00(%r11) - movaps %xmm10,0x10(%r11) - movaps %xmm11,0x20(%r11) - movaps %xmm12,0x30(%r11) - movaps %xmm13,0x40(%r11) - movaps %xmm14,0x50(%r11) - movaps %xmm15,0x60(%r11) + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L4xop_body: ___ $code.=<<___; vzeroupper @@ -1573,21 +1628,23 @@ $code.=<<___; vzeroupper ___ $code.=<<___ if ($win64); - lea 0x140+0x30(%rsp),%r11 - movaps -0x30(%r11),%xmm6 - movaps -0x20(%r11),%xmm7 - movaps -0x10(%r11),%xmm8 - movaps 0x00(%r11),%xmm9 - movaps 0x10(%r11),%xmm10 - movaps 0x20(%r11),%xmm11 - movaps 0x30(%r11),%xmm12 - movaps 0x40(%r11),%xmm13 - movaps 0x50(%r11),%xmm14 - movaps 0x60(%r11),%xmm15 + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 ___ $code.=<<___; - add \$0x148+$xframe,%rsp + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.L4xop_epilogue: ret +.cfi_endproc .size ChaCha20_4xop,.-ChaCha20_4xop ___ } @@ -1714,33 +1771,34 @@ my @x=map("\"$_\"",@xx); ); } -my $xframe = $win64 ? 0xb0 : 8; +my $xframe = $win64 ? 0xa8 : 8; $code.=<<___; .type ChaCha20_8x,\@function,5 .align 32 ChaCha20_8x: +.cfi_startproc .LChaCha20_8x: - mov %rsp,%r10 + mov %rsp,%r9 # frame register +.cfi_def_cfa_register %r9 sub \$0x280+$xframe,%rsp and \$-32,%rsp ___ $code.=<<___ if ($win64); - lea 0x290+0x30(%rsp),%r11 - movaps %xmm6,-0x30(%r11) - movaps %xmm7,-0x20(%r11) - movaps %xmm8,-0x10(%r11) - movaps %xmm9,0x00(%r11) - movaps %xmm10,0x10(%r11) - movaps %xmm11,0x20(%r11) - movaps %xmm12,0x30(%r11) - movaps %xmm13,0x40(%r11) - movaps %xmm14,0x50(%r11) - movaps %xmm15,0x60(%r11) + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L8x_body: ___ $code.=<<___; vzeroupper - mov %r10,0x280(%rsp) ################ stack layout # +0x00 SIMD equivalent of @x[8-12] @@ -1749,7 +1807,7 @@ $code.=<<___; # ... # +0x200 SIMD counters (with nonce smashed by lanes) # ... - # +0x280 saved %rsp + # +0x280 vbroadcasti128 .Lsigma(%rip),$xa3 # key[0] vbroadcasti128 ($key),$xb3 # key[1] @@ -2215,29 +2273,1584 @@ $code.=<<___; vzeroall ___ $code.=<<___ if ($win64); - lea 0x290+0x30(%rsp),%r11 - movaps -0x30(%r11),%xmm6 - movaps -0x20(%r11),%xmm7 - movaps -0x10(%r11),%xmm8 - movaps 0x00(%r11),%xmm9 - movaps 0x10(%r11),%xmm10 - movaps 0x20(%r11),%xmm11 - movaps 0x30(%r11),%xmm12 - movaps 0x40(%r11),%xmm13 - movaps 0x50(%r11),%xmm14 - movaps 0x60(%r11),%xmm15 + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 ___ $code.=<<___; - mov 0x280(%rsp),%rsp + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.L8x_epilogue: ret +.cfi_endproc .size ChaCha20_8x,.-ChaCha20_8x ___ } -foreach (split("\n",$code)) { - s/\`([^\`]*)\`/eval $1/geo; +######################################################################## +# AVX512 code paths +if ($avx>2) { +# This one handles shorter inputs... - s/%x#%y/%x/go; +my ($a,$b,$c,$d, $a_,$b_,$c_,$d_,$fourz) = map("%zmm$_",(0..3,16..20)); +my ($t0,$t1,$t2,$t3) = map("%xmm$_",(4..7)); + +sub vpxord() # size optimization +{ my $opcode = "vpxor"; # adhere to vpxor when possible + + foreach (@_) { + if (/%([zy])mm([0-9]+)/ && ($1 eq "z" || $2>=16)) { + $opcode = "vpxord"; + last; + } + } + + $code .= "\t$opcode\t".join(',',reverse @_)."\n"; +} + +sub AVX512ROUND { # critical path is 14 "SIMD ticks" per round + &vpaddd ($a,$a,$b); + &vpxord ($d,$d,$a); + &vprold ($d,$d,16); + + &vpaddd ($c,$c,$d); + &vpxord ($b,$b,$c); + &vprold ($b,$b,12); + + &vpaddd ($a,$a,$b); + &vpxord ($d,$d,$a); + &vprold ($d,$d,8); + + &vpaddd ($c,$c,$d); + &vpxord ($b,$b,$c); + &vprold ($b,$b,7); +} + +my $xframe = $win64 ? 32+8 : 8; + +$code.=<<___; +.type ChaCha20_avx512,\@function,5 +.align 32 +ChaCha20_avx512: +.cfi_startproc +.LChaCha20_avx512: + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register %r9 + cmp \$512,$len + ja .LChaCha20_16x + + sub \$64+$xframe,%rsp +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0x28(%r9) + movaps %xmm7,-0x18(%r9) +.Lavx512_body: +___ +$code.=<<___; + vbroadcasti32x4 .Lsigma(%rip),$a + vbroadcasti32x4 ($key),$b + vbroadcasti32x4 16($key),$c + vbroadcasti32x4 ($counter),$d + + vmovdqa32 $a,$a_ + vmovdqa32 $b,$b_ + vmovdqa32 $c,$c_ + vpaddd .Lzeroz(%rip),$d,$d + vmovdqa32 .Lfourz(%rip),$fourz + mov \$10,$counter # reuse $counter + vmovdqa32 $d,$d_ + jmp .Loop_avx512 + +.align 16 +.Loop_outer_avx512: + vmovdqa32 $a_,$a + vmovdqa32 $b_,$b + vmovdqa32 $c_,$c + vpaddd $fourz,$d_,$d + mov \$10,$counter + vmovdqa32 $d,$d_ + jmp .Loop_avx512 + +.align 32 +.Loop_avx512: +___ + &AVX512ROUND(); + &vpshufd ($c,$c,0b01001110); + &vpshufd ($b,$b,0b00111001); + &vpshufd ($d,$d,0b10010011); + + &AVX512ROUND(); + &vpshufd ($c,$c,0b01001110); + &vpshufd ($b,$b,0b10010011); + &vpshufd ($d,$d,0b00111001); + + &dec ($counter); + &jnz (".Loop_avx512"); + +$code.=<<___; + vpaddd $a_,$a,$a + vpaddd $b_,$b,$b + vpaddd $c_,$c,$c + vpaddd $d_,$d,$d + + sub \$64,$len + jb .Ltail64_avx512 + + vpxor 0x00($inp),%x#$a,$t0 # xor with input + vpxor 0x10($inp),%x#$b,$t1 + vpxor 0x20($inp),%x#$c,$t2 + vpxor 0x30($inp),%x#$d,$t3 + lea 0x40($inp),$inp # inp+=64 + + vmovdqu $t0,0x00($out) # write output + vmovdqu $t1,0x10($out) + vmovdqu $t2,0x20($out) + vmovdqu $t3,0x30($out) + lea 0x40($out),$out # out+=64 + + jz .Ldone_avx512 + + vextracti32x4 \$1,$a,$t0 + vextracti32x4 \$1,$b,$t1 + vextracti32x4 \$1,$c,$t2 + vextracti32x4 \$1,$d,$t3 + + sub \$64,$len + jb .Ltail_avx512 + + vpxor 0x00($inp),$t0,$t0 # xor with input + vpxor 0x10($inp),$t1,$t1 + vpxor 0x20($inp),$t2,$t2 + vpxor 0x30($inp),$t3,$t3 + lea 0x40($inp),$inp # inp+=64 + + vmovdqu $t0,0x00($out) # write output + vmovdqu $t1,0x10($out) + vmovdqu $t2,0x20($out) + vmovdqu $t3,0x30($out) + lea 0x40($out),$out # out+=64 + + jz .Ldone_avx512 + + vextracti32x4 \$2,$a,$t0 + vextracti32x4 \$2,$b,$t1 + vextracti32x4 \$2,$c,$t2 + vextracti32x4 \$2,$d,$t3 + + sub \$64,$len + jb .Ltail_avx512 + + vpxor 0x00($inp),$t0,$t0 # xor with input + vpxor 0x10($inp),$t1,$t1 + vpxor 0x20($inp),$t2,$t2 + vpxor 0x30($inp),$t3,$t3 + lea 0x40($inp),$inp # inp+=64 + + vmovdqu $t0,0x00($out) # write output + vmovdqu $t1,0x10($out) + vmovdqu $t2,0x20($out) + vmovdqu $t3,0x30($out) + lea 0x40($out),$out # out+=64 + + jz .Ldone_avx512 + + vextracti32x4 \$3,$a,$t0 + vextracti32x4 \$3,$b,$t1 + vextracti32x4 \$3,$c,$t2 + vextracti32x4 \$3,$d,$t3 + + sub \$64,$len + jb .Ltail_avx512 + + vpxor 0x00($inp),$t0,$t0 # xor with input + vpxor 0x10($inp),$t1,$t1 + vpxor 0x20($inp),$t2,$t2 + vpxor 0x30($inp),$t3,$t3 + lea 0x40($inp),$inp # inp+=64 + + vmovdqu $t0,0x00($out) # write output + vmovdqu $t1,0x10($out) + vmovdqu $t2,0x20($out) + vmovdqu $t3,0x30($out) + lea 0x40($out),$out # out+=64 + + jnz .Loop_outer_avx512 + + jmp .Ldone_avx512 + +.align 16 +.Ltail64_avx512: + vmovdqa %x#$a,0x00(%rsp) + vmovdqa %x#$b,0x10(%rsp) + vmovdqa %x#$c,0x20(%rsp) + vmovdqa %x#$d,0x30(%rsp) + add \$64,$len + jmp .Loop_tail_avx512 + +.align 16 +.Ltail_avx512: + vmovdqa $t0,0x00(%rsp) + vmovdqa $t1,0x10(%rsp) + vmovdqa $t2,0x20(%rsp) + vmovdqa $t3,0x30(%rsp) + add \$64,$len + +.Loop_tail_avx512: + movzb ($inp,$counter),%eax + movzb (%rsp,$counter),%ecx + lea 1($counter),$counter + xor %ecx,%eax + mov %al,-1($out,$counter) + dec $len + jnz .Loop_tail_avx512 + + vmovdqu32 $a_,0x00(%rsp) + +.Ldone_avx512: + vzeroall +___ +$code.=<<___ if ($win64); + movaps -0x28(%r9),%xmm6 + movaps -0x18(%r9),%xmm7 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.Lavx512_epilogue: + ret +.cfi_endproc +.size ChaCha20_avx512,.-ChaCha20_avx512 +___ + +map(s/%z/%y/, $a,$b,$c,$d, $a_,$b_,$c_,$d_,$fourz); + +$code.=<<___; +.type ChaCha20_avx512vl,\@function,5 +.align 32 +ChaCha20_avx512vl: +.cfi_startproc +.LChaCha20_avx512vl: + mov %rsp,%r9 # frame pointer +.cfi_def_cfa_register %r9 + cmp \$128,$len + ja .LChaCha20_8xvl + + sub \$64+$xframe,%rsp +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0x28(%r9) + movaps %xmm7,-0x18(%r9) +.Lavx512vl_body: +___ +$code.=<<___; + vbroadcasti128 .Lsigma(%rip),$a + vbroadcasti128 ($key),$b + vbroadcasti128 16($key),$c + vbroadcasti128 ($counter),$d + + vmovdqa32 $a,$a_ + vmovdqa32 $b,$b_ + vmovdqa32 $c,$c_ + vpaddd .Lzeroz(%rip),$d,$d + vmovdqa32 .Ltwoy(%rip),$fourz + mov \$10,$counter # reuse $counter + vmovdqa32 $d,$d_ + jmp .Loop_avx512vl + +.align 16 +.Loop_outer_avx512vl: + vmovdqa32 $c_,$c + vpaddd $fourz,$d_,$d + mov \$10,$counter + vmovdqa32 $d,$d_ + jmp .Loop_avx512vl + +.align 32 +.Loop_avx512vl: +___ + &AVX512ROUND(); + &vpshufd ($c,$c,0b01001110); + &vpshufd ($b,$b,0b00111001); + &vpshufd ($d,$d,0b10010011); + + &AVX512ROUND(); + &vpshufd ($c,$c,0b01001110); + &vpshufd ($b,$b,0b10010011); + &vpshufd ($d,$d,0b00111001); + + &dec ($counter); + &jnz (".Loop_avx512vl"); + +$code.=<<___; + vpaddd $a_,$a,$a + vpaddd $b_,$b,$b + vpaddd $c_,$c,$c + vpaddd $d_,$d,$d + + sub \$64,$len + jb .Ltail64_avx512vl + + vpxor 0x00($inp),%x#$a,$t0 # xor with input + vpxor 0x10($inp),%x#$b,$t1 + vpxor 0x20($inp),%x#$c,$t2 + vpxor 0x30($inp),%x#$d,$t3 + lea 0x40($inp),$inp # inp+=64 + + vmovdqu $t0,0x00($out) # write output + vmovdqu $t1,0x10($out) + vmovdqu $t2,0x20($out) + vmovdqu $t3,0x30($out) + lea 0x40($out),$out # out+=64 + + jz .Ldone_avx512vl + + vextracti128 \$1,$a,$t0 + vextracti128 \$1,$b,$t1 + vextracti128 \$1,$c,$t2 + vextracti128 \$1,$d,$t3 + + sub \$64,$len + jb .Ltail_avx512vl + + vpxor 0x00($inp),$t0,$t0 # xor with input + vpxor 0x10($inp),$t1,$t1 + vpxor 0x20($inp),$t2,$t2 + vpxor 0x30($inp),$t3,$t3 + lea 0x40($inp),$inp # inp+=64 + + vmovdqu $t0,0x00($out) # write output + vmovdqu $t1,0x10($out) + vmovdqu $t2,0x20($out) + vmovdqu $t3,0x30($out) + lea 0x40($out),$out # out+=64 + + vmovdqa32 $a_,$a + vmovdqa32 $b_,$b + jnz .Loop_outer_avx512vl + + jmp .Ldone_avx512vl + +.align 16 +.Ltail64_avx512vl: + vmovdqa %x#$a,0x00(%rsp) + vmovdqa %x#$b,0x10(%rsp) + vmovdqa %x#$c,0x20(%rsp) + vmovdqa %x#$d,0x30(%rsp) + add \$64,$len + jmp .Loop_tail_avx512vl + +.align 16 +.Ltail_avx512vl: + vmovdqa $t0,0x00(%rsp) + vmovdqa $t1,0x10(%rsp) + vmovdqa $t2,0x20(%rsp) + vmovdqa $t3,0x30(%rsp) + add \$64,$len + +.Loop_tail_avx512vl: + movzb ($inp,$counter),%eax + movzb (%rsp,$counter),%ecx + lea 1($counter),$counter + xor %ecx,%eax + mov %al,-1($out,$counter) + dec $len + jnz .Loop_tail_avx512vl + + vmovdqu32 $a_,0x00(%rsp) + vmovdqu32 $a_,0x20(%rsp) + +.Ldone_avx512vl: + vzeroall +___ +$code.=<<___ if ($win64); + movaps -0x28(%r9),%xmm6 + movaps -0x18(%r9),%xmm7 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.Lavx512vl_epilogue: + ret +.cfi_endproc +.size ChaCha20_avx512vl,.-ChaCha20_avx512vl +___ +} +if ($avx>2) { +# This one handles longer inputs... + +my ($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3)=map("%zmm$_",(0..15)); +my @xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3); +my @key=map("%zmm$_",(16..31)); +my ($xt0,$xt1,$xt2,$xt3)=@key[0..3]; + +sub AVX512_lane_ROUND { +my ($a0,$b0,$c0,$d0)=@_; +my ($a1,$b1,$c1,$d1)=map(($_&~3)+(($_+1)&3),($a0,$b0,$c0,$d0)); +my ($a2,$b2,$c2,$d2)=map(($_&~3)+(($_+1)&3),($a1,$b1,$c1,$d1)); +my ($a3,$b3,$c3,$d3)=map(($_&~3)+(($_+1)&3),($a2,$b2,$c2,$d2)); +my @x=map("\"$_\"",@xx); + + ( + "&vpaddd (@x[$a0],@x[$a0],@x[$b0])", # Q1 + "&vpaddd (@x[$a1],@x[$a1],@x[$b1])", # Q2 + "&vpaddd (@x[$a2],@x[$a2],@x[$b2])", # Q3 + "&vpaddd (@x[$a3],@x[$a3],@x[$b3])", # Q4 + "&vpxord (@x[$d0],@x[$d0],@x[$a0])", + "&vpxord (@x[$d1],@x[$d1],@x[$a1])", + "&vpxord (@x[$d2],@x[$d2],@x[$a2])", + "&vpxord (@x[$d3],@x[$d3],@x[$a3])", + "&vprold (@x[$d0],@x[$d0],16)", + "&vprold (@x[$d1],@x[$d1],16)", + "&vprold (@x[$d2],@x[$d2],16)", + "&vprold (@x[$d3],@x[$d3],16)", + + "&vpaddd (@x[$c0],@x[$c0],@x[$d0])", + "&vpaddd (@x[$c1],@x[$c1],@x[$d1])", + "&vpaddd (@x[$c2],@x[$c2],@x[$d2])", + "&vpaddd (@x[$c3],@x[$c3],@x[$d3])", + "&vpxord (@x[$b0],@x[$b0],@x[$c0])", + "&vpxord (@x[$b1],@x[$b1],@x[$c1])", + "&vpxord (@x[$b2],@x[$b2],@x[$c2])", + "&vpxord (@x[$b3],@x[$b3],@x[$c3])", + "&vprold (@x[$b0],@x[$b0],12)", + "&vprold (@x[$b1],@x[$b1],12)", + "&vprold (@x[$b2],@x[$b2],12)", + "&vprold (@x[$b3],@x[$b3],12)", + + "&vpaddd (@x[$a0],@x[$a0],@x[$b0])", + "&vpaddd (@x[$a1],@x[$a1],@x[$b1])", + "&vpaddd (@x[$a2],@x[$a2],@x[$b2])", + "&vpaddd (@x[$a3],@x[$a3],@x[$b3])", + "&vpxord (@x[$d0],@x[$d0],@x[$a0])", + "&vpxord (@x[$d1],@x[$d1],@x[$a1])", + "&vpxord (@x[$d2],@x[$d2],@x[$a2])", + "&vpxord (@x[$d3],@x[$d3],@x[$a3])", + "&vprold (@x[$d0],@x[$d0],8)", + "&vprold (@x[$d1],@x[$d1],8)", + "&vprold (@x[$d2],@x[$d2],8)", + "&vprold (@x[$d3],@x[$d3],8)", + + "&vpaddd (@x[$c0],@x[$c0],@x[$d0])", + "&vpaddd (@x[$c1],@x[$c1],@x[$d1])", + "&vpaddd (@x[$c2],@x[$c2],@x[$d2])", + "&vpaddd (@x[$c3],@x[$c3],@x[$d3])", + "&vpxord (@x[$b0],@x[$b0],@x[$c0])", + "&vpxord (@x[$b1],@x[$b1],@x[$c1])", + "&vpxord (@x[$b2],@x[$b2],@x[$c2])", + "&vpxord (@x[$b3],@x[$b3],@x[$c3])", + "&vprold (@x[$b0],@x[$b0],7)", + "&vprold (@x[$b1],@x[$b1],7)", + "&vprold (@x[$b2],@x[$b2],7)", + "&vprold (@x[$b3],@x[$b3],7)" + ); +} + +my $xframe = $win64 ? 0xa8 : 8; + +$code.=<<___; +.type ChaCha20_16x,\@function,5 +.align 32 +ChaCha20_16x: +.cfi_startproc +.LChaCha20_16x: + mov %rsp,%r9 # frame register +.cfi_def_cfa_register %r9 + sub \$64+$xframe,%rsp + and \$-64,%rsp +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L16x_body: +___ +$code.=<<___; + vzeroupper + + lea .Lsigma(%rip),%r10 + vbroadcasti32x4 (%r10),$xa3 # key[0] + vbroadcasti32x4 ($key),$xb3 # key[1] + vbroadcasti32x4 16($key),$xc3 # key[2] + vbroadcasti32x4 ($counter),$xd3 # key[3] + + vpshufd \$0x00,$xa3,$xa0 # smash key by lanes... + vpshufd \$0x55,$xa3,$xa1 + vpshufd \$0xaa,$xa3,$xa2 + vpshufd \$0xff,$xa3,$xa3 + vmovdqa64 $xa0,@key[0] + vmovdqa64 $xa1,@key[1] + vmovdqa64 $xa2,@key[2] + vmovdqa64 $xa3,@key[3] + + vpshufd \$0x00,$xb3,$xb0 + vpshufd \$0x55,$xb3,$xb1 + vpshufd \$0xaa,$xb3,$xb2 + vpshufd \$0xff,$xb3,$xb3 + vmovdqa64 $xb0,@key[4] + vmovdqa64 $xb1,@key[5] + vmovdqa64 $xb2,@key[6] + vmovdqa64 $xb3,@key[7] + + vpshufd \$0x00,$xc3,$xc0 + vpshufd \$0x55,$xc3,$xc1 + vpshufd \$0xaa,$xc3,$xc2 + vpshufd \$0xff,$xc3,$xc3 + vmovdqa64 $xc0,@key[8] + vmovdqa64 $xc1,@key[9] + vmovdqa64 $xc2,@key[10] + vmovdqa64 $xc3,@key[11] + + vpshufd \$0x00,$xd3,$xd0 + vpshufd \$0x55,$xd3,$xd1 + vpshufd \$0xaa,$xd3,$xd2 + vpshufd \$0xff,$xd3,$xd3 + vpaddd .Lincz(%rip),$xd0,$xd0 # don't save counters yet + vmovdqa64 $xd0,@key[12] + vmovdqa64 $xd1,@key[13] + vmovdqa64 $xd2,@key[14] + vmovdqa64 $xd3,@key[15] + + mov \$10,%eax + jmp .Loop16x + +.align 32 +.Loop_outer16x: + vpbroadcastd 0(%r10),$xa0 # reload key + vpbroadcastd 4(%r10),$xa1 + vpbroadcastd 8(%r10),$xa2 + vpbroadcastd 12(%r10),$xa3 + vpaddd .Lsixteen(%rip),@key[12],@key[12] # next SIMD counters + vmovdqa64 @key[4],$xb0 + vmovdqa64 @key[5],$xb1 + vmovdqa64 @key[6],$xb2 + vmovdqa64 @key[7],$xb3 + vmovdqa64 @key[8],$xc0 + vmovdqa64 @key[9],$xc1 + vmovdqa64 @key[10],$xc2 + vmovdqa64 @key[11],$xc3 + vmovdqa64 @key[12],$xd0 + vmovdqa64 @key[13],$xd1 + vmovdqa64 @key[14],$xd2 + vmovdqa64 @key[15],$xd3 + + vmovdqa64 $xa0,@key[0] + vmovdqa64 $xa1,@key[1] + vmovdqa64 $xa2,@key[2] + vmovdqa64 $xa3,@key[3] + + mov \$10,%eax + jmp .Loop16x + +.align 32 +.Loop16x: +___ + foreach (&AVX512_lane_ROUND(0, 4, 8,12)) { eval; } + foreach (&AVX512_lane_ROUND(0, 5,10,15)) { eval; } +$code.=<<___; + dec %eax + jnz .Loop16x + + vpaddd @key[0],$xa0,$xa0 # accumulate key + vpaddd @key[1],$xa1,$xa1 + vpaddd @key[2],$xa2,$xa2 + vpaddd @key[3],$xa3,$xa3 + + vpunpckldq $xa1,$xa0,$xt2 # "de-interlace" data + vpunpckldq $xa3,$xa2,$xt3 + vpunpckhdq $xa1,$xa0,$xa0 + vpunpckhdq $xa3,$xa2,$xa2 + vpunpcklqdq $xt3,$xt2,$xa1 # "a0" + vpunpckhqdq $xt3,$xt2,$xt2 # "a1" + vpunpcklqdq $xa2,$xa0,$xa3 # "a2" + vpunpckhqdq $xa2,$xa0,$xa0 # "a3" +___ + ($xa0,$xa1,$xa2,$xa3,$xt2)=($xa1,$xt2,$xa3,$xa0,$xa2); +$code.=<<___; + vpaddd @key[4],$xb0,$xb0 + vpaddd @key[5],$xb1,$xb1 + vpaddd @key[6],$xb2,$xb2 + vpaddd @key[7],$xb3,$xb3 + + vpunpckldq $xb1,$xb0,$xt2 + vpunpckldq $xb3,$xb2,$xt3 + vpunpckhdq $xb1,$xb0,$xb0 + vpunpckhdq $xb3,$xb2,$xb2 + vpunpcklqdq $xt3,$xt2,$xb1 # "b0" + vpunpckhqdq $xt3,$xt2,$xt2 # "b1" + vpunpcklqdq $xb2,$xb0,$xb3 # "b2" + vpunpckhqdq $xb2,$xb0,$xb0 # "b3" +___ + ($xb0,$xb1,$xb2,$xb3,$xt2)=($xb1,$xt2,$xb3,$xb0,$xb2); +$code.=<<___; + vshufi32x4 \$0x44,$xb0,$xa0,$xt3 # "de-interlace" further + vshufi32x4 \$0xee,$xb0,$xa0,$xb0 + vshufi32x4 \$0x44,$xb1,$xa1,$xa0 + vshufi32x4 \$0xee,$xb1,$xa1,$xb1 + vshufi32x4 \$0x44,$xb2,$xa2,$xa1 + vshufi32x4 \$0xee,$xb2,$xa2,$xb2 + vshufi32x4 \$0x44,$xb3,$xa3,$xa2 + vshufi32x4 \$0xee,$xb3,$xa3,$xb3 +___ + ($xa0,$xa1,$xa2,$xa3,$xt3)=($xt3,$xa0,$xa1,$xa2,$xa3); +$code.=<<___; + vpaddd @key[8],$xc0,$xc0 + vpaddd @key[9],$xc1,$xc1 + vpaddd @key[10],$xc2,$xc2 + vpaddd @key[11],$xc3,$xc3 + + vpunpckldq $xc1,$xc0,$xt2 + vpunpckldq $xc3,$xc2,$xt3 + vpunpckhdq $xc1,$xc0,$xc0 + vpunpckhdq $xc3,$xc2,$xc2 + vpunpcklqdq $xt3,$xt2,$xc1 # "c0" + vpunpckhqdq $xt3,$xt2,$xt2 # "c1" + vpunpcklqdq $xc2,$xc0,$xc3 # "c2" + vpunpckhqdq $xc2,$xc0,$xc0 # "c3" +___ + ($xc0,$xc1,$xc2,$xc3,$xt2)=($xc1,$xt2,$xc3,$xc0,$xc2); +$code.=<<___; + vpaddd @key[12],$xd0,$xd0 + vpaddd @key[13],$xd1,$xd1 + vpaddd @key[14],$xd2,$xd2 + vpaddd @key[15],$xd3,$xd3 + + vpunpckldq $xd1,$xd0,$xt2 + vpunpckldq $xd3,$xd2,$xt3 + vpunpckhdq $xd1,$xd0,$xd0 + vpunpckhdq $xd3,$xd2,$xd2 + vpunpcklqdq $xt3,$xt2,$xd1 # "d0" + vpunpckhqdq $xt3,$xt2,$xt2 # "d1" + vpunpcklqdq $xd2,$xd0,$xd3 # "d2" + vpunpckhqdq $xd2,$xd0,$xd0 # "d3" +___ + ($xd0,$xd1,$xd2,$xd3,$xt2)=($xd1,$xt2,$xd3,$xd0,$xd2); +$code.=<<___; + vshufi32x4 \$0x44,$xd0,$xc0,$xt3 # "de-interlace" further + vshufi32x4 \$0xee,$xd0,$xc0,$xd0 + vshufi32x4 \$0x44,$xd1,$xc1,$xc0 + vshufi32x4 \$0xee,$xd1,$xc1,$xd1 + vshufi32x4 \$0x44,$xd2,$xc2,$xc1 + vshufi32x4 \$0xee,$xd2,$xc2,$xd2 + vshufi32x4 \$0x44,$xd3,$xc3,$xc2 + vshufi32x4 \$0xee,$xd3,$xc3,$xd3 +___ + ($xc0,$xc1,$xc2,$xc3,$xt3)=($xt3,$xc0,$xc1,$xc2,$xc3); +$code.=<<___; + vshufi32x4 \$0x88,$xc0,$xa0,$xt0 # "de-interlace" further + vshufi32x4 \$0xdd,$xc0,$xa0,$xa0 + vshufi32x4 \$0x88,$xd0,$xb0,$xc0 + vshufi32x4 \$0xdd,$xd0,$xb0,$xd0 + vshufi32x4 \$0x88,$xc1,$xa1,$xt1 + vshufi32x4 \$0xdd,$xc1,$xa1,$xa1 + vshufi32x4 \$0x88,$xd1,$xb1,$xc1 + vshufi32x4 \$0xdd,$xd1,$xb1,$xd1 + vshufi32x4 \$0x88,$xc2,$xa2,$xt2 + vshufi32x4 \$0xdd,$xc2,$xa2,$xa2 + vshufi32x4 \$0x88,$xd2,$xb2,$xc2 + vshufi32x4 \$0xdd,$xd2,$xb2,$xd2 + vshufi32x4 \$0x88,$xc3,$xa3,$xt3 + vshufi32x4 \$0xdd,$xc3,$xa3,$xa3 + vshufi32x4 \$0x88,$xd3,$xb3,$xc3 + vshufi32x4 \$0xdd,$xd3,$xb3,$xd3 +___ + ($xa0,$xa1,$xa2,$xa3,$xb0,$xb1,$xb2,$xb3)= + ($xt0,$xt1,$xt2,$xt3,$xa0,$xa1,$xa2,$xa3); + + ($xa0,$xb0,$xc0,$xd0, $xa1,$xb1,$xc1,$xd1, + $xa2,$xb2,$xc2,$xd2, $xa3,$xb3,$xc3,$xd3) = + ($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3); +$code.=<<___; + cmp \$64*16,$len + jb .Ltail16x + + vpxord 0x00($inp),$xa0,$xa0 # xor with input + vpxord 0x40($inp),$xb0,$xb0 + vpxord 0x80($inp),$xc0,$xc0 + vpxord 0xc0($inp),$xd0,$xd0 + vmovdqu32 $xa0,0x00($out) + vmovdqu32 $xb0,0x40($out) + vmovdqu32 $xc0,0x80($out) + vmovdqu32 $xd0,0xc0($out) + + vpxord 0x100($inp),$xa1,$xa1 + vpxord 0x140($inp),$xb1,$xb1 + vpxord 0x180($inp),$xc1,$xc1 + vpxord 0x1c0($inp),$xd1,$xd1 + vmovdqu32 $xa1,0x100($out) + vmovdqu32 $xb1,0x140($out) + vmovdqu32 $xc1,0x180($out) + vmovdqu32 $xd1,0x1c0($out) + + vpxord 0x200($inp),$xa2,$xa2 + vpxord 0x240($inp),$xb2,$xb2 + vpxord 0x280($inp),$xc2,$xc2 + vpxord 0x2c0($inp),$xd2,$xd2 + vmovdqu32 $xa2,0x200($out) + vmovdqu32 $xb2,0x240($out) + vmovdqu32 $xc2,0x280($out) + vmovdqu32 $xd2,0x2c0($out) + + vpxord 0x300($inp),$xa3,$xa3 + vpxord 0x340($inp),$xb3,$xb3 + vpxord 0x380($inp),$xc3,$xc3 + vpxord 0x3c0($inp),$xd3,$xd3 + lea 0x400($inp),$inp + vmovdqu32 $xa3,0x300($out) + vmovdqu32 $xb3,0x340($out) + vmovdqu32 $xc3,0x380($out) + vmovdqu32 $xd3,0x3c0($out) + lea 0x400($out),$out + + sub \$64*16,$len + jnz .Loop_outer16x + + jmp .Ldone16x + +.align 32 +.Ltail16x: + xor %r10,%r10 + sub $inp,$out + cmp \$64*1,$len + jb .Less_than_64_16x + vpxord ($inp),$xa0,$xa0 # xor with input + vmovdqu32 $xa0,($out,$inp) + je .Ldone16x + vmovdqa32 $xb0,$xa0 + lea 64($inp),$inp + + cmp \$64*2,$len + jb .Less_than_64_16x + vpxord ($inp),$xb0,$xb0 + vmovdqu32 $xb0,($out,$inp) + je .Ldone16x + vmovdqa32 $xc0,$xa0 + lea 64($inp),$inp + + cmp \$64*3,$len + jb .Less_than_64_16x + vpxord ($inp),$xc0,$xc0 + vmovdqu32 $xc0,($out,$inp) + je .Ldone16x + vmovdqa32 $xd0,$xa0 + lea 64($inp),$inp + + cmp \$64*4,$len + jb .Less_than_64_16x + vpxord ($inp),$xd0,$xd0 + vmovdqu32 $xd0,($out,$inp) + je .Ldone16x + vmovdqa32 $xa1,$xa0 + lea 64($inp),$inp + + cmp \$64*5,$len + jb .Less_than_64_16x + vpxord ($inp),$xa1,$xa1 + vmovdqu32 $xa1,($out,$inp) + je .Ldone16x + vmovdqa32 $xb1,$xa0 + lea 64($inp),$inp + + cmp \$64*6,$len + jb .Less_than_64_16x + vpxord ($inp),$xb1,$xb1 + vmovdqu32 $xb1,($out,$inp) + je .Ldone16x + vmovdqa32 $xc1,$xa0 + lea 64($inp),$inp + + cmp \$64*7,$len + jb .Less_than_64_16x + vpxord ($inp),$xc1,$xc1 + vmovdqu32 $xc1,($out,$inp) + je .Ldone16x + vmovdqa32 $xd1,$xa0 + lea 64($inp),$inp + + cmp \$64*8,$len + jb .Less_than_64_16x + vpxord ($inp),$xd1,$xd1 + vmovdqu32 $xd1,($out,$inp) + je .Ldone16x + vmovdqa32 $xa2,$xa0 + lea 64($inp),$inp + + cmp \$64*9,$len + jb .Less_than_64_16x + vpxord ($inp),$xa2,$xa2 + vmovdqu32 $xa2,($out,$inp) + je .Ldone16x + vmovdqa32 $xb2,$xa0 + lea 64($inp),$inp + + cmp \$64*10,$len + jb .Less_than_64_16x + vpxord ($inp),$xb2,$xb2 + vmovdqu32 $xb2,($out,$inp) + je .Ldone16x + vmovdqa32 $xc2,$xa0 + lea 64($inp),$inp + + cmp \$64*11,$len + jb .Less_than_64_16x + vpxord ($inp),$xc2,$xc2 + vmovdqu32 $xc2,($out,$inp) + je .Ldone16x + vmovdqa32 $xd2,$xa0 + lea 64($inp),$inp + + cmp \$64*12,$len + jb .Less_than_64_16x + vpxord ($inp),$xd2,$xd2 + vmovdqu32 $xd2,($out,$inp) + je .Ldone16x + vmovdqa32 $xa3,$xa0 + lea 64($inp),$inp + + cmp \$64*13,$len + jb .Less_than_64_16x + vpxord ($inp),$xa3,$xa3 + vmovdqu32 $xa3,($out,$inp) + je .Ldone16x + vmovdqa32 $xb3,$xa0 + lea 64($inp),$inp + + cmp \$64*14,$len + jb .Less_than_64_16x + vpxord ($inp),$xb3,$xb3 + vmovdqu32 $xb3,($out,$inp) + je .Ldone16x + vmovdqa32 $xc3,$xa0 + lea 64($inp),$inp + + cmp \$64*15,$len + jb .Less_than_64_16x + vpxord ($inp),$xc3,$xc3 + vmovdqu32 $xc3,($out,$inp) + je .Ldone16x + vmovdqa32 $xd3,$xa0 + lea 64($inp),$inp + +.Less_than_64_16x: + vmovdqa32 $xa0,0x00(%rsp) + lea ($out,$inp),$out + and \$63,$len + +.Loop_tail16x: + movzb ($inp,%r10),%eax + movzb (%rsp,%r10),%ecx + lea 1(%r10),%r10 + xor %ecx,%eax + mov %al,-1($out,%r10) + dec $len + jnz .Loop_tail16x + + vpxord $xa0,$xa0,$xa0 + vmovdqa32 $xa0,0(%rsp) + +.Ldone16x: + vzeroall +___ +$code.=<<___ if ($win64); + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.L16x_epilogue: + ret +.cfi_endproc +.size ChaCha20_16x,.-ChaCha20_16x +___ + +# switch to %ymm domain +($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3)=map("%ymm$_",(0..15)); +@xx=($xa0,$xa1,$xa2,$xa3, $xb0,$xb1,$xb2,$xb3, + $xc0,$xc1,$xc2,$xc3, $xd0,$xd1,$xd2,$xd3); +@key=map("%ymm$_",(16..31)); +($xt0,$xt1,$xt2,$xt3)=@key[0..3]; + +$code.=<<___; +.type ChaCha20_8xvl,\@function,5 +.align 32 +ChaCha20_8xvl: +.cfi_startproc +.LChaCha20_8xvl: + mov %rsp,%r9 # frame register +.cfi_def_cfa_register %r9 + sub \$64+$xframe,%rsp + and \$-64,%rsp +___ +$code.=<<___ if ($win64); + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) +.L8xvl_body: +___ +$code.=<<___; + vzeroupper + + lea .Lsigma(%rip),%r10 + vbroadcasti128 (%r10),$xa3 # key[0] + vbroadcasti128 ($key),$xb3 # key[1] + vbroadcasti128 16($key),$xc3 # key[2] + vbroadcasti128 ($counter),$xd3 # key[3] + + vpshufd \$0x00,$xa3,$xa0 # smash key by lanes... + vpshufd \$0x55,$xa3,$xa1 + vpshufd \$0xaa,$xa3,$xa2 + vpshufd \$0xff,$xa3,$xa3 + vmovdqa64 $xa0,@key[0] + vmovdqa64 $xa1,@key[1] + vmovdqa64 $xa2,@key[2] + vmovdqa64 $xa3,@key[3] + + vpshufd \$0x00,$xb3,$xb0 + vpshufd \$0x55,$xb3,$xb1 + vpshufd \$0xaa,$xb3,$xb2 + vpshufd \$0xff,$xb3,$xb3 + vmovdqa64 $xb0,@key[4] + vmovdqa64 $xb1,@key[5] + vmovdqa64 $xb2,@key[6] + vmovdqa64 $xb3,@key[7] + + vpshufd \$0x00,$xc3,$xc0 + vpshufd \$0x55,$xc3,$xc1 + vpshufd \$0xaa,$xc3,$xc2 + vpshufd \$0xff,$xc3,$xc3 + vmovdqa64 $xc0,@key[8] + vmovdqa64 $xc1,@key[9] + vmovdqa64 $xc2,@key[10] + vmovdqa64 $xc3,@key[11] + + vpshufd \$0x00,$xd3,$xd0 + vpshufd \$0x55,$xd3,$xd1 + vpshufd \$0xaa,$xd3,$xd2 + vpshufd \$0xff,$xd3,$xd3 + vpaddd .Lincy(%rip),$xd0,$xd0 # don't save counters yet + vmovdqa64 $xd0,@key[12] + vmovdqa64 $xd1,@key[13] + vmovdqa64 $xd2,@key[14] + vmovdqa64 $xd3,@key[15] + + mov \$10,%eax + jmp .Loop8xvl + +.align 32 +.Loop_outer8xvl: + #vpbroadcastd 0(%r10),$xa0 # reload key + #vpbroadcastd 4(%r10),$xa1 + vpbroadcastd 8(%r10),$xa2 + vpbroadcastd 12(%r10),$xa3 + vpaddd .Leight(%rip),@key[12],@key[12] # next SIMD counters + vmovdqa64 @key[4],$xb0 + vmovdqa64 @key[5],$xb1 + vmovdqa64 @key[6],$xb2 + vmovdqa64 @key[7],$xb3 + vmovdqa64 @key[8],$xc0 + vmovdqa64 @key[9],$xc1 + vmovdqa64 @key[10],$xc2 + vmovdqa64 @key[11],$xc3 + vmovdqa64 @key[12],$xd0 + vmovdqa64 @key[13],$xd1 + vmovdqa64 @key[14],$xd2 + vmovdqa64 @key[15],$xd3 + + vmovdqa64 $xa0,@key[0] + vmovdqa64 $xa1,@key[1] + vmovdqa64 $xa2,@key[2] + vmovdqa64 $xa3,@key[3] + + mov \$10,%eax + jmp .Loop8xvl + +.align 32 +.Loop8xvl: +___ + foreach (&AVX512_lane_ROUND(0, 4, 8,12)) { eval; } + foreach (&AVX512_lane_ROUND(0, 5,10,15)) { eval; } +$code.=<<___; + dec %eax + jnz .Loop8xvl + + vpaddd @key[0],$xa0,$xa0 # accumulate key + vpaddd @key[1],$xa1,$xa1 + vpaddd @key[2],$xa2,$xa2 + vpaddd @key[3],$xa3,$xa3 + + vpunpckldq $xa1,$xa0,$xt2 # "de-interlace" data + vpunpckldq $xa3,$xa2,$xt3 + vpunpckhdq $xa1,$xa0,$xa0 + vpunpckhdq $xa3,$xa2,$xa2 + vpunpcklqdq $xt3,$xt2,$xa1 # "a0" + vpunpckhqdq $xt3,$xt2,$xt2 # "a1" + vpunpcklqdq $xa2,$xa0,$xa3 # "a2" + vpunpckhqdq $xa2,$xa0,$xa0 # "a3" +___ + ($xa0,$xa1,$xa2,$xa3,$xt2)=($xa1,$xt2,$xa3,$xa0,$xa2); +$code.=<<___; + vpaddd @key[4],$xb0,$xb0 + vpaddd @key[5],$xb1,$xb1 + vpaddd @key[6],$xb2,$xb2 + vpaddd @key[7],$xb3,$xb3 + + vpunpckldq $xb1,$xb0,$xt2 + vpunpckldq $xb3,$xb2,$xt3 + vpunpckhdq $xb1,$xb0,$xb0 + vpunpckhdq $xb3,$xb2,$xb2 + vpunpcklqdq $xt3,$xt2,$xb1 # "b0" + vpunpckhqdq $xt3,$xt2,$xt2 # "b1" + vpunpcklqdq $xb2,$xb0,$xb3 # "b2" + vpunpckhqdq $xb2,$xb0,$xb0 # "b3" +___ + ($xb0,$xb1,$xb2,$xb3,$xt2)=($xb1,$xt2,$xb3,$xb0,$xb2); +$code.=<<___; + vshufi32x4 \$0,$xb0,$xa0,$xt3 # "de-interlace" further + vshufi32x4 \$3,$xb0,$xa0,$xb0 + vshufi32x4 \$0,$xb1,$xa1,$xa0 + vshufi32x4 \$3,$xb1,$xa1,$xb1 + vshufi32x4 \$0,$xb2,$xa2,$xa1 + vshufi32x4 \$3,$xb2,$xa2,$xb2 + vshufi32x4 \$0,$xb3,$xa3,$xa2 + vshufi32x4 \$3,$xb3,$xa3,$xb3 +___ + ($xa0,$xa1,$xa2,$xa3,$xt3)=($xt3,$xa0,$xa1,$xa2,$xa3); +$code.=<<___; + vpaddd @key[8],$xc0,$xc0 + vpaddd @key[9],$xc1,$xc1 + vpaddd @key[10],$xc2,$xc2 + vpaddd @key[11],$xc3,$xc3 + + vpunpckldq $xc1,$xc0,$xt2 + vpunpckldq $xc3,$xc2,$xt3 + vpunpckhdq $xc1,$xc0,$xc0 + vpunpckhdq $xc3,$xc2,$xc2 + vpunpcklqdq $xt3,$xt2,$xc1 # "c0" + vpunpckhqdq $xt3,$xt2,$xt2 # "c1" + vpunpcklqdq $xc2,$xc0,$xc3 # "c2" + vpunpckhqdq $xc2,$xc0,$xc0 # "c3" +___ + ($xc0,$xc1,$xc2,$xc3,$xt2)=($xc1,$xt2,$xc3,$xc0,$xc2); +$code.=<<___; + vpaddd @key[12],$xd0,$xd0 + vpaddd @key[13],$xd1,$xd1 + vpaddd @key[14],$xd2,$xd2 + vpaddd @key[15],$xd3,$xd3 + + vpunpckldq $xd1,$xd0,$xt2 + vpunpckldq $xd3,$xd2,$xt3 + vpunpckhdq $xd1,$xd0,$xd0 + vpunpckhdq $xd3,$xd2,$xd2 + vpunpcklqdq $xt3,$xt2,$xd1 # "d0" + vpunpckhqdq $xt3,$xt2,$xt2 # "d1" + vpunpcklqdq $xd2,$xd0,$xd3 # "d2" + vpunpckhqdq $xd2,$xd0,$xd0 # "d3" +___ + ($xd0,$xd1,$xd2,$xd3,$xt2)=($xd1,$xt2,$xd3,$xd0,$xd2); +$code.=<<___; + vperm2i128 \$0x20,$xd0,$xc0,$xt3 # "de-interlace" further + vperm2i128 \$0x31,$xd0,$xc0,$xd0 + vperm2i128 \$0x20,$xd1,$xc1,$xc0 + vperm2i128 \$0x31,$xd1,$xc1,$xd1 + vperm2i128 \$0x20,$xd2,$xc2,$xc1 + vperm2i128 \$0x31,$xd2,$xc2,$xd2 + vperm2i128 \$0x20,$xd3,$xc3,$xc2 + vperm2i128 \$0x31,$xd3,$xc3,$xd3 +___ + ($xc0,$xc1,$xc2,$xc3,$xt3)=($xt3,$xc0,$xc1,$xc2,$xc3); + ($xb0,$xb1,$xb2,$xb3,$xc0,$xc1,$xc2,$xc3)= + ($xc0,$xc1,$xc2,$xc3,$xb0,$xb1,$xb2,$xb3); +$code.=<<___; + cmp \$64*8,$len + jb .Ltail8xvl + + mov \$0x80,%eax # size optimization + vpxord 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vpxor 0x40($inp),$xc0,$xc0 + vpxor 0x60($inp),$xd0,$xd0 + lea ($inp,%rax),$inp # size optimization + vmovdqu32 $xa0,0x00($out) + vmovdqu $xb0,0x20($out) + vmovdqu $xc0,0x40($out) + vmovdqu $xd0,0x60($out) + lea ($out,%rax),$out # size optimization + + vpxor 0x00($inp),$xa1,$xa1 + vpxor 0x20($inp),$xb1,$xb1 + vpxor 0x40($inp),$xc1,$xc1 + vpxor 0x60($inp),$xd1,$xd1 + lea ($inp,%rax),$inp # size optimization + vmovdqu $xa1,0x00($out) + vmovdqu $xb1,0x20($out) + vmovdqu $xc1,0x40($out) + vmovdqu $xd1,0x60($out) + lea ($out,%rax),$out # size optimization + + vpxord 0x00($inp),$xa2,$xa2 + vpxor 0x20($inp),$xb2,$xb2 + vpxor 0x40($inp),$xc2,$xc2 + vpxor 0x60($inp),$xd2,$xd2 + lea ($inp,%rax),$inp # size optimization + vmovdqu32 $xa2,0x00($out) + vmovdqu $xb2,0x20($out) + vmovdqu $xc2,0x40($out) + vmovdqu $xd2,0x60($out) + lea ($out,%rax),$out # size optimization + + vpxor 0x00($inp),$xa3,$xa3 + vpxor 0x20($inp),$xb3,$xb3 + vpxor 0x40($inp),$xc3,$xc3 + vpxor 0x60($inp),$xd3,$xd3 + lea ($inp,%rax),$inp # size optimization + vmovdqu $xa3,0x00($out) + vmovdqu $xb3,0x20($out) + vmovdqu $xc3,0x40($out) + vmovdqu $xd3,0x60($out) + lea ($out,%rax),$out # size optimization + + vpbroadcastd 0(%r10),%ymm0 # reload key + vpbroadcastd 4(%r10),%ymm1 + + sub \$64*8,$len + jnz .Loop_outer8xvl + + jmp .Ldone8xvl + +.align 32 +.Ltail8xvl: + vmovdqa64 $xa0,%ymm8 # size optimization +___ +$xa0 = "%ymm8"; +$code.=<<___; + xor %r10,%r10 + sub $inp,$out + cmp \$64*1,$len + jb .Less_than_64_8xvl + vpxor 0x00($inp),$xa0,$xa0 # xor with input + vpxor 0x20($inp),$xb0,$xb0 + vmovdqu $xa0,0x00($out,$inp) + vmovdqu $xb0,0x20($out,$inp) + je .Ldone8xvl + vmovdqa $xc0,$xa0 + vmovdqa $xd0,$xb0 + lea 64($inp),$inp + + cmp \$64*2,$len + jb .Less_than_64_8xvl + vpxor 0x00($inp),$xc0,$xc0 + vpxor 0x20($inp),$xd0,$xd0 + vmovdqu $xc0,0x00($out,$inp) + vmovdqu $xd0,0x20($out,$inp) + je .Ldone8xvl + vmovdqa $xa1,$xa0 + vmovdqa $xb1,$xb0 + lea 64($inp),$inp + + cmp \$64*3,$len + jb .Less_than_64_8xvl + vpxor 0x00($inp),$xa1,$xa1 + vpxor 0x20($inp),$xb1,$xb1 + vmovdqu $xa1,0x00($out,$inp) + vmovdqu $xb1,0x20($out,$inp) + je .Ldone8xvl + vmovdqa $xc1,$xa0 + vmovdqa $xd1,$xb0 + lea 64($inp),$inp + + cmp \$64*4,$len + jb .Less_than_64_8xvl + vpxor 0x00($inp),$xc1,$xc1 + vpxor 0x20($inp),$xd1,$xd1 + vmovdqu $xc1,0x00($out,$inp) + vmovdqu $xd1,0x20($out,$inp) + je .Ldone8xvl + vmovdqa32 $xa2,$xa0 + vmovdqa $xb2,$xb0 + lea 64($inp),$inp + + cmp \$64*5,$len + jb .Less_than_64_8xvl + vpxord 0x00($inp),$xa2,$xa2 + vpxor 0x20($inp),$xb2,$xb2 + vmovdqu32 $xa2,0x00($out,$inp) + vmovdqu $xb2,0x20($out,$inp) + je .Ldone8xvl + vmovdqa $xc2,$xa0 + vmovdqa $xd2,$xb0 + lea 64($inp),$inp + + cmp \$64*6,$len + jb .Less_than_64_8xvl + vpxor 0x00($inp),$xc2,$xc2 + vpxor 0x20($inp),$xd2,$xd2 + vmovdqu $xc2,0x00($out,$inp) + vmovdqu $xd2,0x20($out,$inp) + je .Ldone8xvl + vmovdqa $xa3,$xa0 + vmovdqa $xb3,$xb0 + lea 64($inp),$inp + + cmp \$64*7,$len + jb .Less_than_64_8xvl + vpxor 0x00($inp),$xa3,$xa3 + vpxor 0x20($inp),$xb3,$xb3 + vmovdqu $xa3,0x00($out,$inp) + vmovdqu $xb3,0x20($out,$inp) + je .Ldone8xvl + vmovdqa $xc3,$xa0 + vmovdqa $xd3,$xb0 + lea 64($inp),$inp + +.Less_than_64_8xvl: + vmovdqa $xa0,0x00(%rsp) + vmovdqa $xb0,0x20(%rsp) + lea ($out,$inp),$out + and \$63,$len + +.Loop_tail8xvl: + movzb ($inp,%r10),%eax + movzb (%rsp,%r10),%ecx + lea 1(%r10),%r10 + xor %ecx,%eax + mov %al,-1($out,%r10) + dec $len + jnz .Loop_tail8xvl + + vpxor $xa0,$xa0,$xa0 + vmovdqa $xa0,0x00(%rsp) + vmovdqa $xa0,0x20(%rsp) + +.Ldone8xvl: + vzeroall +___ +$code.=<<___ if ($win64); + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 +___ +$code.=<<___; + lea (%r9),%rsp +.cfi_def_cfa_register %rsp +.L8xvl_epilogue: + ret +.cfi_endproc +.size ChaCha20_8xvl,.-ChaCha20_8xvl +___ +} + +# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame, +# CONTEXT *context,DISPATCHER_CONTEXT *disp) +if ($win64) { +$rec="%rcx"; +$frame="%rdx"; +$context="%r8"; +$disp="%r9"; + +$code.=<<___; +.extern __imp_RtlVirtualUnwind +.type se_handler,\@abi-omnipotent +.align 16 +se_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + lea .Lctr32_body(%rip),%r10 + cmp %r10,%rbx # context->Rip<.Lprologue + jb .Lcommon_seh_tail + + mov 152($context),%rax # pull context->Rsp + + lea .Lno_data(%rip),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=.Lepilogue + jae .Lcommon_seh_tail + + lea 64+24+48(%rax),%rax + + mov -8(%rax),%rbx + mov -16(%rax),%rbp + mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 + mov %rbx,144($context) # restore context->Rbx + mov %rbp,160($context) # restore context->Rbp + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R14 + +.Lcommon_seh_tail: + mov 8(%rax),%rdi + mov 16(%rax),%rsi + mov %rax,152($context) # restore context->Rsp + mov %rsi,168($context) # restore context->Rsi + mov %rdi,176($context) # restore context->Rdi + + mov 40($disp),%rdi # disp->ContextRecord + mov $context,%rsi # context + mov \$154,%ecx # sizeof(CONTEXT) + .long 0xa548f3fc # cld; rep movsq + + mov $disp,%rsi + xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER + mov 8(%rsi),%rdx # arg2, disp->ImageBase + mov 0(%rsi),%r8 # arg3, disp->ControlPc + mov 16(%rsi),%r9 # arg4, disp->FunctionEntry + mov 40(%rsi),%r10 # disp->ContextRecord + lea 56(%rsi),%r11 # &disp->HandlerData + lea 24(%rsi),%r12 # &disp->EstablisherFrame + mov %r10,32(%rsp) # arg5 + mov %r11,40(%rsp) # arg6 + mov %r12,48(%rsp) # arg7 + mov %rcx,56(%rsp) # arg8, (NULL) + call *__imp_RtlVirtualUnwind(%rip) + + mov \$1,%eax # ExceptionContinueSearch + add \$64,%rsp + popfq + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %rdi + pop %rsi + ret +.size se_handler,.-se_handler + +.type ssse3_handler,\@abi-omnipotent +.align 16 +ssse3_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipR9 + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + lea -0x28(%rax),%rsi + lea 512($context),%rdi # &context.Xmm6 + mov \$4,%ecx + .long 0xa548f3fc # cld; rep movsq + + jmp .Lcommon_seh_tail +.size ssse3_handler,.-ssse3_handler + +.type full_handler,\@abi-omnipotent +.align 16 +full_handler: + push %rsi + push %rdi + push %rbx + push %rbp + push %r12 + push %r13 + push %r14 + push %r15 + pushfq + sub \$64,%rsp + + mov 120($context),%rax # pull context->Rax + mov 248($context),%rbx # pull context->Rip + + mov 8($disp),%rsi # disp->ImageBase + mov 56($disp),%r11 # disp->HandlerData + + mov 0(%r11),%r10d # HandlerData[0] + lea (%rsi,%r10),%r10 # prologue label + cmp %r10,%rbx # context->RipR9 + + mov 4(%r11),%r10d # HandlerData[1] + lea (%rsi,%r10),%r10 # epilogue label + cmp %r10,%rbx # context->Rip>=epilogue label + jae .Lcommon_seh_tail + + lea -0xa8(%rax),%rsi + lea 512($context),%rdi # &context.Xmm6 + mov \$20,%ecx + .long 0xa548f3fc # cld; rep movsq + + jmp .Lcommon_seh_tail +.size full_handler,.-full_handler + +.section .pdata +.align 4 + .rva .LSEH_begin_ChaCha20_ctr32 + .rva .LSEH_end_ChaCha20_ctr32 + .rva .LSEH_info_ChaCha20_ctr32 + + .rva .LSEH_begin_ChaCha20_ssse3 + .rva .LSEH_end_ChaCha20_ssse3 + .rva .LSEH_info_ChaCha20_ssse3 + + .rva .LSEH_begin_ChaCha20_4x + .rva .LSEH_end_ChaCha20_4x + .rva .LSEH_info_ChaCha20_4x +___ +$code.=<<___ if ($avx); + .rva .LSEH_begin_ChaCha20_4xop + .rva .LSEH_end_ChaCha20_4xop + .rva .LSEH_info_ChaCha20_4xop +___ +$code.=<<___ if ($avx>1); + .rva .LSEH_begin_ChaCha20_8x + .rva .LSEH_end_ChaCha20_8x + .rva .LSEH_info_ChaCha20_8x +___ +$code.=<<___ if ($avx>2); + .rva .LSEH_begin_ChaCha20_avx512 + .rva .LSEH_end_ChaCha20_avx512 + .rva .LSEH_info_ChaCha20_avx512 + + .rva .LSEH_begin_ChaCha20_avx512vl + .rva .LSEH_end_ChaCha20_avx512vl + .rva .LSEH_info_ChaCha20_avx512vl + + .rva .LSEH_begin_ChaCha20_16x + .rva .LSEH_end_ChaCha20_16x + .rva .LSEH_info_ChaCha20_16x + + .rva .LSEH_begin_ChaCha20_8xvl + .rva .LSEH_end_ChaCha20_8xvl + .rva .LSEH_info_ChaCha20_8xvl +___ +$code.=<<___; +.section .xdata +.align 8 +.LSEH_info_ChaCha20_ctr32: + .byte 9,0,0,0 + .rva se_handler + +.LSEH_info_ChaCha20_ssse3: + .byte 9,0,0,0 + .rva ssse3_handler + .rva .Lssse3_body,.Lssse3_epilogue + +.LSEH_info_ChaCha20_4x: + .byte 9,0,0,0 + .rva full_handler + .rva .L4x_body,.L4x_epilogue +___ +$code.=<<___ if ($avx); +.LSEH_info_ChaCha20_4xop: + .byte 9,0,0,0 + .rva full_handler + .rva .L4xop_body,.L4xop_epilogue # HandlerData[] +___ +$code.=<<___ if ($avx>1); +.LSEH_info_ChaCha20_8x: + .byte 9,0,0,0 + .rva full_handler + .rva .L8x_body,.L8x_epilogue # HandlerData[] +___ +$code.=<<___ if ($avx>2); +.LSEH_info_ChaCha20_avx512: + .byte 9,0,0,0 + .rva ssse3_handler + .rva .Lavx512_body,.Lavx512_epilogue # HandlerData[] + +.LSEH_info_ChaCha20_avx512vl: + .byte 9,0,0,0 + .rva ssse3_handler + .rva .Lavx512vl_body,.Lavx512vl_epilogue # HandlerData[] + +.LSEH_info_ChaCha20_16x: + .byte 9,0,0,0 + .rva full_handler + .rva .L16x_body,.L16x_epilogue # HandlerData[] + +.LSEH_info_ChaCha20_8xvl: + .byte 9,0,0,0 + .rva full_handler + .rva .L8xvl_body,.L8xvl_epilogue # HandlerData[] +___ +} + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/ge; + + s/%x#%[yz]/%x/g; # "down-shift" print $_,"\n"; } diff --git a/crypto/chacha/build.info b/crypto/chacha/build.info index f99114c1..02f8e518 100644 --- a/crypto/chacha/build.info +++ b/crypto/chacha/build.info @@ -1,7 +1,8 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]={- $target{chacha_asm_src} -} -GENERATE[chacha-x86.s]=asm/chacha-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[chacha-x86.s]=asm/chacha-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) GENERATE[chacha-x86_64.s]=asm/chacha-x86_64.pl $(PERLASM_SCHEME) GENERATE[chacha-ppc.s]=asm/chacha-ppc.pl $(PERLASM_SCHEME) GENERATE[chacha-armv4.S]=asm/chacha-armv4.pl $(PERLASM_SCHEME) diff --git a/crypto/cms/cms_asn1.c b/crypto/cms/cms_asn1.c index 0a594f41..993ea6b2 100644 --- a/crypto/cms/cms_asn1.c +++ b/crypto/cms/cms_asn1.c @@ -56,7 +56,7 @@ static int cms_si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, } ASN1_SEQUENCE_cb(CMS_SignerInfo, cms_si_cb) = { - ASN1_SIMPLE(CMS_SignerInfo, version, LONG), + ASN1_EMBED(CMS_SignerInfo, version, INT32), ASN1_SIMPLE(CMS_SignerInfo, sid, CMS_SignerIdentifier), ASN1_SIMPLE(CMS_SignerInfo, digestAlgorithm, X509_ALGOR), ASN1_IMP_SET_OF_OPT(CMS_SignerInfo, signedAttrs, X509_ATTRIBUTE, 0), @@ -76,7 +76,7 @@ ASN1_CHOICE(CMS_RevocationInfoChoice) = { } ASN1_CHOICE_END(CMS_RevocationInfoChoice) ASN1_NDEF_SEQUENCE(CMS_SignedData) = { - ASN1_SIMPLE(CMS_SignedData, version, LONG), + ASN1_EMBED(CMS_SignedData, version, INT32), ASN1_SET_OF(CMS_SignedData, digestAlgorithms, X509_ALGOR), ASN1_SIMPLE(CMS_SignedData, encapContentInfo, CMS_EncapsulatedContentInfo), ASN1_IMP_SET_OF_OPT(CMS_SignedData, certificates, CMS_CertificateChoices, 0), @@ -96,7 +96,7 @@ ASN1_NDEF_SEQUENCE(CMS_EncryptedContentInfo) = { } static_ASN1_NDEF_SEQUENCE_END(CMS_EncryptedContentInfo) ASN1_SEQUENCE(CMS_KeyTransRecipientInfo) = { - ASN1_SIMPLE(CMS_KeyTransRecipientInfo, version, LONG), + ASN1_EMBED(CMS_KeyTransRecipientInfo, version, INT32), ASN1_SIMPLE(CMS_KeyTransRecipientInfo, rid, CMS_SignerIdentifier), ASN1_SIMPLE(CMS_KeyTransRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR), ASN1_SIMPLE(CMS_KeyTransRecipientInfo, encryptedKey, ASN1_OCTET_STRING) @@ -162,7 +162,7 @@ static int cms_kari_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, } ASN1_SEQUENCE_cb(CMS_KeyAgreeRecipientInfo, cms_kari_cb) = { - ASN1_SIMPLE(CMS_KeyAgreeRecipientInfo, version, LONG), + ASN1_EMBED(CMS_KeyAgreeRecipientInfo, version, INT32), ASN1_EXP(CMS_KeyAgreeRecipientInfo, originator, CMS_OriginatorIdentifierOrKey, 0), ASN1_EXP_OPT(CMS_KeyAgreeRecipientInfo, ukm, ASN1_OCTET_STRING, 1), ASN1_SIMPLE(CMS_KeyAgreeRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR), @@ -176,14 +176,14 @@ ASN1_SEQUENCE(CMS_KEKIdentifier) = { } static_ASN1_SEQUENCE_END(CMS_KEKIdentifier) ASN1_SEQUENCE(CMS_KEKRecipientInfo) = { - ASN1_SIMPLE(CMS_KEKRecipientInfo, version, LONG), + ASN1_EMBED(CMS_KEKRecipientInfo, version, INT32), ASN1_SIMPLE(CMS_KEKRecipientInfo, kekid, CMS_KEKIdentifier), ASN1_SIMPLE(CMS_KEKRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR), ASN1_SIMPLE(CMS_KEKRecipientInfo, encryptedKey, ASN1_OCTET_STRING) } ASN1_SEQUENCE_END(CMS_KEKRecipientInfo) ASN1_SEQUENCE(CMS_PasswordRecipientInfo) = { - ASN1_SIMPLE(CMS_PasswordRecipientInfo, version, LONG), + ASN1_EMBED(CMS_PasswordRecipientInfo, version, INT32), ASN1_IMP_OPT(CMS_PasswordRecipientInfo, keyDerivationAlgorithm, X509_ALGOR, 0), ASN1_SIMPLE(CMS_PasswordRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR), ASN1_SIMPLE(CMS_PasswordRecipientInfo, encryptedKey, ASN1_OCTET_STRING) @@ -225,7 +225,7 @@ ASN1_CHOICE_cb(CMS_RecipientInfo, cms_ri_cb) = { } ASN1_CHOICE_END_cb(CMS_RecipientInfo, CMS_RecipientInfo, type) ASN1_NDEF_SEQUENCE(CMS_EnvelopedData) = { - ASN1_SIMPLE(CMS_EnvelopedData, version, LONG), + ASN1_EMBED(CMS_EnvelopedData, version, INT32), ASN1_IMP_OPT(CMS_EnvelopedData, originatorInfo, CMS_OriginatorInfo, 0), ASN1_SET_OF(CMS_EnvelopedData, recipientInfos, CMS_RecipientInfo), ASN1_SIMPLE(CMS_EnvelopedData, encryptedContentInfo, CMS_EncryptedContentInfo), @@ -233,20 +233,20 @@ ASN1_NDEF_SEQUENCE(CMS_EnvelopedData) = { } ASN1_NDEF_SEQUENCE_END(CMS_EnvelopedData) ASN1_NDEF_SEQUENCE(CMS_DigestedData) = { - ASN1_SIMPLE(CMS_DigestedData, version, LONG), + ASN1_EMBED(CMS_DigestedData, version, INT32), ASN1_SIMPLE(CMS_DigestedData, digestAlgorithm, X509_ALGOR), ASN1_SIMPLE(CMS_DigestedData, encapContentInfo, CMS_EncapsulatedContentInfo), ASN1_SIMPLE(CMS_DigestedData, digest, ASN1_OCTET_STRING) } ASN1_NDEF_SEQUENCE_END(CMS_DigestedData) ASN1_NDEF_SEQUENCE(CMS_EncryptedData) = { - ASN1_SIMPLE(CMS_EncryptedData, version, LONG), + ASN1_EMBED(CMS_EncryptedData, version, INT32), ASN1_SIMPLE(CMS_EncryptedData, encryptedContentInfo, CMS_EncryptedContentInfo), ASN1_IMP_SET_OF_OPT(CMS_EncryptedData, unprotectedAttrs, X509_ATTRIBUTE, 1) } ASN1_NDEF_SEQUENCE_END(CMS_EncryptedData) ASN1_NDEF_SEQUENCE(CMS_AuthenticatedData) = { - ASN1_SIMPLE(CMS_AuthenticatedData, version, LONG), + ASN1_EMBED(CMS_AuthenticatedData, version, INT32), ASN1_IMP_OPT(CMS_AuthenticatedData, originatorInfo, CMS_OriginatorInfo, 0), ASN1_SET_OF(CMS_AuthenticatedData, recipientInfos, CMS_RecipientInfo), ASN1_SIMPLE(CMS_AuthenticatedData, macAlgorithm, X509_ALGOR), @@ -258,7 +258,7 @@ ASN1_NDEF_SEQUENCE(CMS_AuthenticatedData) = { } static_ASN1_NDEF_SEQUENCE_END(CMS_AuthenticatedData) ASN1_NDEF_SEQUENCE(CMS_CompressedData) = { - ASN1_SIMPLE(CMS_CompressedData, version, LONG), + ASN1_EMBED(CMS_CompressedData, version, INT32), ASN1_SIMPLE(CMS_CompressedData, compressionAlgorithm, X509_ALGOR), ASN1_SIMPLE(CMS_CompressedData, encapContentInfo, CMS_EncapsulatedContentInfo), } ASN1_NDEF_SEQUENCE_END(CMS_CompressedData) @@ -338,7 +338,7 @@ ASN1_ITEM_TEMPLATE_END(CMS_Attributes_Verify) ASN1_CHOICE(CMS_ReceiptsFrom) = { - ASN1_IMP(CMS_ReceiptsFrom, d.allOrFirstTier, LONG, 0), + ASN1_IMP_EMBED(CMS_ReceiptsFrom, d.allOrFirstTier, INT32, 0), ASN1_IMP_SEQUENCE_OF(CMS_ReceiptsFrom, d.receiptList, GENERAL_NAMES, 1) } static_ASN1_CHOICE_END(CMS_ReceiptsFrom) @@ -349,7 +349,7 @@ ASN1_SEQUENCE(CMS_ReceiptRequest) = { } ASN1_SEQUENCE_END(CMS_ReceiptRequest) ASN1_SEQUENCE(CMS_Receipt) = { - ASN1_SIMPLE(CMS_Receipt, version, LONG), + ASN1_EMBED(CMS_Receipt, version, INT32), ASN1_SIMPLE(CMS_Receipt, contentType, ASN1_OBJECT), ASN1_SIMPLE(CMS_Receipt, signedContentIdentifier, ASN1_OCTET_STRING), ASN1_SIMPLE(CMS_Receipt, originatorSignatureValue, ASN1_OCTET_STRING) diff --git a/crypto/cms/cms_env.c b/crypto/cms/cms_env.c index 8d459435..6ca3be71 100644 --- a/crypto/cms/cms_env.c +++ b/crypto/cms/cms_env.c @@ -749,7 +749,7 @@ int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri) default: CMSerr(CMS_F_CMS_RECIPIENTINFO_DECRYPT, - CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE); + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE); return 0; } } diff --git a/crypto/cms/cms_err.c b/crypto/cms/cms_err.c index c6df1b5a..43a48b62 100644 --- a/crypto/cms/cms_err.c +++ b/crypto/cms/cms_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,238 +8,272 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CMS,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CMS,0,reason) - -static ERR_STRING_DATA CMS_str_functs[] = { - {ERR_FUNC(CMS_F_CHECK_CONTENT), "check_content"}, - {ERR_FUNC(CMS_F_CMS_ADD0_CERT), "CMS_add0_cert"}, - {ERR_FUNC(CMS_F_CMS_ADD0_RECIPIENT_KEY), "CMS_add0_recipient_key"}, - {ERR_FUNC(CMS_F_CMS_ADD0_RECIPIENT_PASSWORD), +static const ERR_STRING_DATA CMS_str_functs[] = { + {ERR_PACK(ERR_LIB_CMS, CMS_F_CHECK_CONTENT, 0), "check_content"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD0_CERT, 0), "CMS_add0_cert"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD0_RECIPIENT_KEY, 0), + "CMS_add0_recipient_key"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD0_RECIPIENT_PASSWORD, 0), "CMS_add0_recipient_password"}, - {ERR_FUNC(CMS_F_CMS_ADD1_RECEIPTREQUEST), "CMS_add1_ReceiptRequest"}, - {ERR_FUNC(CMS_F_CMS_ADD1_RECIPIENT_CERT), "CMS_add1_recipient_cert"}, - {ERR_FUNC(CMS_F_CMS_ADD1_SIGNER), "CMS_add1_signer"}, - {ERR_FUNC(CMS_F_CMS_ADD1_SIGNINGTIME), "cms_add1_signingTime"}, - {ERR_FUNC(CMS_F_CMS_COMPRESS), "CMS_compress"}, - {ERR_FUNC(CMS_F_CMS_COMPRESSEDDATA_CREATE), "cms_CompressedData_create"}, - {ERR_FUNC(CMS_F_CMS_COMPRESSEDDATA_INIT_BIO), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_RECEIPTREQUEST, 0), + "CMS_add1_ReceiptRequest"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_RECIPIENT_CERT, 0), + "CMS_add1_recipient_cert"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_SIGNER, 0), "CMS_add1_signer"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ADD1_SIGNINGTIME, 0), + "cms_add1_signingTime"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COMPRESS, 0), "CMS_compress"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COMPRESSEDDATA_CREATE, 0), + "cms_CompressedData_create"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COMPRESSEDDATA_INIT_BIO, 0), "cms_CompressedData_init_bio"}, - {ERR_FUNC(CMS_F_CMS_COPY_CONTENT), "cms_copy_content"}, - {ERR_FUNC(CMS_F_CMS_COPY_MESSAGEDIGEST), "cms_copy_messageDigest"}, - {ERR_FUNC(CMS_F_CMS_DATA), "CMS_data"}, - {ERR_FUNC(CMS_F_CMS_DATAFINAL), "CMS_dataFinal"}, - {ERR_FUNC(CMS_F_CMS_DATAINIT), "CMS_dataInit"}, - {ERR_FUNC(CMS_F_CMS_DECRYPT), "CMS_decrypt"}, - {ERR_FUNC(CMS_F_CMS_DECRYPT_SET1_KEY), "CMS_decrypt_set1_key"}, - {ERR_FUNC(CMS_F_CMS_DECRYPT_SET1_PASSWORD), "CMS_decrypt_set1_password"}, - {ERR_FUNC(CMS_F_CMS_DECRYPT_SET1_PKEY), "CMS_decrypt_set1_pkey"}, - {ERR_FUNC(CMS_F_CMS_DIGESTALGORITHM_FIND_CTX), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COPY_CONTENT, 0), "cms_copy_content"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_COPY_MESSAGEDIGEST, 0), + "cms_copy_messageDigest"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DATA, 0), "CMS_data"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DATAFINAL, 0), "CMS_dataFinal"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DATAINIT, 0), "CMS_dataInit"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT, 0), "CMS_decrypt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT_SET1_KEY, 0), + "CMS_decrypt_set1_key"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT_SET1_PASSWORD, 0), + "CMS_decrypt_set1_password"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DECRYPT_SET1_PKEY, 0), + "CMS_decrypt_set1_pkey"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGESTALGORITHM_FIND_CTX, 0), "cms_DigestAlgorithm_find_ctx"}, - {ERR_FUNC(CMS_F_CMS_DIGESTALGORITHM_INIT_BIO), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGESTALGORITHM_INIT_BIO, 0), "cms_DigestAlgorithm_init_bio"}, - {ERR_FUNC(CMS_F_CMS_DIGESTEDDATA_DO_FINAL), "cms_DigestedData_do_final"}, - {ERR_FUNC(CMS_F_CMS_DIGEST_VERIFY), "CMS_digest_verify"}, - {ERR_FUNC(CMS_F_CMS_ENCODE_RECEIPT), "cms_encode_Receipt"}, - {ERR_FUNC(CMS_F_CMS_ENCRYPT), "CMS_encrypt"}, - {ERR_FUNC(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGESTEDDATA_DO_FINAL, 0), + "cms_DigestedData_do_final"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_DIGEST_VERIFY, 0), "CMS_digest_verify"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCODE_RECEIPT, 0), "cms_encode_Receipt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPT, 0), "CMS_encrypt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 0), "cms_EncryptedContent_init_bio"}, - {ERR_FUNC(CMS_F_CMS_ENCRYPTEDDATA_DECRYPT), "CMS_EncryptedData_decrypt"}, - {ERR_FUNC(CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT), "CMS_EncryptedData_encrypt"}, - {ERR_FUNC(CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDDATA_DECRYPT, 0), + "CMS_EncryptedData_decrypt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT, 0), + "CMS_EncryptedData_encrypt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY, 0), "CMS_EncryptedData_set1_key"}, - {ERR_FUNC(CMS_F_CMS_ENVELOPEDDATA_CREATE), "CMS_EnvelopedData_create"}, - {ERR_FUNC(CMS_F_CMS_ENVELOPEDDATA_INIT_BIO), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENVELOPEDDATA_CREATE, 0), + "CMS_EnvelopedData_create"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENVELOPEDDATA_INIT_BIO, 0), "cms_EnvelopedData_init_bio"}, - {ERR_FUNC(CMS_F_CMS_ENVELOPED_DATA_INIT), "cms_enveloped_data_init"}, - {ERR_FUNC(CMS_F_CMS_ENV_ASN1_CTRL), "cms_env_asn1_ctrl"}, - {ERR_FUNC(CMS_F_CMS_FINAL), "CMS_final"}, - {ERR_FUNC(CMS_F_CMS_GET0_CERTIFICATE_CHOICES), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENVELOPED_DATA_INIT, 0), + "cms_enveloped_data_init"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_ENV_ASN1_CTRL, 0), "cms_env_asn1_ctrl"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_FINAL, 0), "CMS_final"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_CERTIFICATE_CHOICES, 0), "cms_get0_certificate_choices"}, - {ERR_FUNC(CMS_F_CMS_GET0_CONTENT), "CMS_get0_content"}, - {ERR_FUNC(CMS_F_CMS_GET0_ECONTENT_TYPE), "cms_get0_econtent_type"}, - {ERR_FUNC(CMS_F_CMS_GET0_ENVELOPED), "cms_get0_enveloped"}, - {ERR_FUNC(CMS_F_CMS_GET0_REVOCATION_CHOICES), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_CONTENT, 0), "CMS_get0_content"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_ECONTENT_TYPE, 0), + "cms_get0_econtent_type"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_ENVELOPED, 0), "cms_get0_enveloped"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_REVOCATION_CHOICES, 0), "cms_get0_revocation_choices"}, - {ERR_FUNC(CMS_F_CMS_GET0_SIGNED), "cms_get0_signed"}, - {ERR_FUNC(CMS_F_CMS_MSGSIGDIGEST_ADD1), "cms_msgSigDigest_add1"}, - {ERR_FUNC(CMS_F_CMS_RECEIPTREQUEST_CREATE0), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_GET0_SIGNED, 0), "cms_get0_signed"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_MSGSIGDIGEST_ADD1, 0), + "cms_msgSigDigest_add1"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECEIPTREQUEST_CREATE0, 0), "CMS_ReceiptRequest_create0"}, - {ERR_FUNC(CMS_F_CMS_RECEIPT_VERIFY), "cms_Receipt_verify"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_DECRYPT), "CMS_RecipientInfo_decrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_ENCRYPT), "CMS_RecipientInfo_encrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECEIPT_VERIFY, 0), "cms_Receipt_verify"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_DECRYPT, 0), + "CMS_RecipientInfo_decrypt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_ENCRYPT, 0), + "CMS_RecipientInfo_encrypt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT, 0), "cms_RecipientInfo_kari_encrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG, 0), "CMS_RecipientInfo_kari_get0_alg"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID, 0), "CMS_RecipientInfo_kari_get0_orig_id"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS, 0), "CMS_RecipientInfo_kari_get0_reks"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP, 0), "CMS_RecipientInfo_kari_orig_id_cmp"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT, 0), "cms_RecipientInfo_kekri_decrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT, 0), "cms_RecipientInfo_kekri_encrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID, 0), "CMS_RecipientInfo_kekri_get0_id"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP, 0), "CMS_RecipientInfo_kekri_id_cmp"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP, 0), "CMS_RecipientInfo_ktri_cert_cmp"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT, 0), "cms_RecipientInfo_ktri_decrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT, 0), "cms_RecipientInfo_ktri_encrypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS, 0), "CMS_RecipientInfo_ktri_get0_algs"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID, 0), "CMS_RecipientInfo_ktri_get0_signer_id"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT, 0), "cms_RecipientInfo_pwri_crypt"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_KEY), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_SET0_KEY, 0), "CMS_RecipientInfo_set0_key"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD, 0), "CMS_RecipientInfo_set0_password"}, - {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_PKEY), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_RECIPIENTINFO_SET0_PKEY, 0), "CMS_RecipientInfo_set0_pkey"}, - {ERR_FUNC(CMS_F_CMS_SD_ASN1_CTRL), "cms_sd_asn1_ctrl"}, - {ERR_FUNC(CMS_F_CMS_SET1_IAS), "cms_set1_ias"}, - {ERR_FUNC(CMS_F_CMS_SET1_KEYID), "cms_set1_keyid"}, - {ERR_FUNC(CMS_F_CMS_SET1_SIGNERIDENTIFIER), "cms_set1_SignerIdentifier"}, - {ERR_FUNC(CMS_F_CMS_SET_DETACHED), "CMS_set_detached"}, - {ERR_FUNC(CMS_F_CMS_SIGN), "CMS_sign"}, - {ERR_FUNC(CMS_F_CMS_SIGNED_DATA_INIT), "cms_signed_data_init"}, - {ERR_FUNC(CMS_F_CMS_SIGNERINFO_CONTENT_SIGN), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SD_ASN1_CTRL, 0), "cms_sd_asn1_ctrl"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET1_IAS, 0), "cms_set1_ias"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET1_KEYID, 0), "cms_set1_keyid"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET1_SIGNERIDENTIFIER, 0), + "cms_set1_SignerIdentifier"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SET_DETACHED, 0), "CMS_set_detached"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGN, 0), "CMS_sign"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNED_DATA_INIT, 0), + "cms_signed_data_init"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_CONTENT_SIGN, 0), "cms_SignerInfo_content_sign"}, - {ERR_FUNC(CMS_F_CMS_SIGNERINFO_SIGN), "CMS_SignerInfo_sign"}, - {ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY), "CMS_SignerInfo_verify"}, - {ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY_CERT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_SIGN, 0), + "CMS_SignerInfo_sign"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_VERIFY, 0), + "CMS_SignerInfo_verify"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_VERIFY_CERT, 0), "cms_signerinfo_verify_cert"}, - {ERR_FUNC(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT), + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT, 0), "CMS_SignerInfo_verify_content"}, - {ERR_FUNC(CMS_F_CMS_SIGN_RECEIPT), "CMS_sign_receipt"}, - {ERR_FUNC(CMS_F_CMS_STREAM), "CMS_stream"}, - {ERR_FUNC(CMS_F_CMS_UNCOMPRESS), "CMS_uncompress"}, - {ERR_FUNC(CMS_F_CMS_VERIFY), "CMS_verify"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_SIGN_RECEIPT, 0), "CMS_sign_receipt"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_STREAM, 0), "CMS_stream"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_UNCOMPRESS, 0), "CMS_uncompress"}, + {ERR_PACK(ERR_LIB_CMS, CMS_F_CMS_VERIFY, 0), "CMS_verify"}, {0, NULL} }; -static ERR_STRING_DATA CMS_str_reasons[] = { - {ERR_REASON(CMS_R_ADD_SIGNER_ERROR), "add signer error"}, - {ERR_REASON(CMS_R_CERTIFICATE_ALREADY_PRESENT), - "certificate already present"}, - {ERR_REASON(CMS_R_CERTIFICATE_HAS_NO_KEYID), "certificate has no keyid"}, - {ERR_REASON(CMS_R_CERTIFICATE_VERIFY_ERROR), "certificate verify error"}, - {ERR_REASON(CMS_R_CIPHER_INITIALISATION_ERROR), - "cipher initialisation error"}, - {ERR_REASON(CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR), - "cipher parameter initialisation error"}, - {ERR_REASON(CMS_R_CMS_DATAFINAL_ERROR), "cms datafinal error"}, - {ERR_REASON(CMS_R_CMS_LIB), "cms lib"}, - {ERR_REASON(CMS_R_CONTENTIDENTIFIER_MISMATCH), - "contentidentifier mismatch"}, - {ERR_REASON(CMS_R_CONTENT_NOT_FOUND), "content not found"}, - {ERR_REASON(CMS_R_CONTENT_TYPE_MISMATCH), "content type mismatch"}, - {ERR_REASON(CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA), - "content type not compressed data"}, - {ERR_REASON(CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA), - "content type not enveloped data"}, - {ERR_REASON(CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA), - "content type not signed data"}, - {ERR_REASON(CMS_R_CONTENT_VERIFY_ERROR), "content verify error"}, - {ERR_REASON(CMS_R_CTRL_ERROR), "ctrl error"}, - {ERR_REASON(CMS_R_CTRL_FAILURE), "ctrl failure"}, - {ERR_REASON(CMS_R_DECRYPT_ERROR), "decrypt error"}, - {ERR_REASON(CMS_R_ERROR_GETTING_PUBLIC_KEY), "error getting public key"}, - {ERR_REASON(CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE), - "error reading messagedigest attribute"}, - {ERR_REASON(CMS_R_ERROR_SETTING_KEY), "error setting key"}, - {ERR_REASON(CMS_R_ERROR_SETTING_RECIPIENTINFO), - "error setting recipientinfo"}, - {ERR_REASON(CMS_R_INVALID_ENCRYPTED_KEY_LENGTH), - "invalid encrypted key length"}, - {ERR_REASON(CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER), - "invalid key encryption parameter"}, - {ERR_REASON(CMS_R_INVALID_KEY_LENGTH), "invalid key length"}, - {ERR_REASON(CMS_R_MD_BIO_INIT_ERROR), "md bio init error"}, - {ERR_REASON(CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH), - "messagedigest attribute wrong length"}, - {ERR_REASON(CMS_R_MESSAGEDIGEST_WRONG_LENGTH), - "messagedigest wrong length"}, - {ERR_REASON(CMS_R_MSGSIGDIGEST_ERROR), "msgsigdigest error"}, - {ERR_REASON(CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE), - "msgsigdigest verification failure"}, - {ERR_REASON(CMS_R_MSGSIGDIGEST_WRONG_LENGTH), - "msgsigdigest wrong length"}, - {ERR_REASON(CMS_R_NEED_ONE_SIGNER), "need one signer"}, - {ERR_REASON(CMS_R_NOT_A_SIGNED_RECEIPT), "not a signed receipt"}, - {ERR_REASON(CMS_R_NOT_ENCRYPTED_DATA), "not encrypted data"}, - {ERR_REASON(CMS_R_NOT_KEK), "not kek"}, - {ERR_REASON(CMS_R_NOT_KEY_AGREEMENT), "not key agreement"}, - {ERR_REASON(CMS_R_NOT_KEY_TRANSPORT), "not key transport"}, - {ERR_REASON(CMS_R_NOT_PWRI), "not pwri"}, - {ERR_REASON(CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE), - "not supported for this key type"}, - {ERR_REASON(CMS_R_NO_CIPHER), "no cipher"}, - {ERR_REASON(CMS_R_NO_CONTENT), "no content"}, - {ERR_REASON(CMS_R_NO_CONTENT_TYPE), "no content type"}, - {ERR_REASON(CMS_R_NO_DEFAULT_DIGEST), "no default digest"}, - {ERR_REASON(CMS_R_NO_DIGEST_SET), "no digest set"}, - {ERR_REASON(CMS_R_NO_KEY), "no key"}, - {ERR_REASON(CMS_R_NO_KEY_OR_CERT), "no key or cert"}, - {ERR_REASON(CMS_R_NO_MATCHING_DIGEST), "no matching digest"}, - {ERR_REASON(CMS_R_NO_MATCHING_RECIPIENT), "no matching recipient"}, - {ERR_REASON(CMS_R_NO_MATCHING_SIGNATURE), "no matching signature"}, - {ERR_REASON(CMS_R_NO_MSGSIGDIGEST), "no msgsigdigest"}, - {ERR_REASON(CMS_R_NO_PASSWORD), "no password"}, - {ERR_REASON(CMS_R_NO_PRIVATE_KEY), "no private key"}, - {ERR_REASON(CMS_R_NO_PUBLIC_KEY), "no public key"}, - {ERR_REASON(CMS_R_NO_RECEIPT_REQUEST), "no receipt request"}, - {ERR_REASON(CMS_R_NO_SIGNERS), "no signers"}, - {ERR_REASON(CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), - "private key does not match certificate"}, - {ERR_REASON(CMS_R_RECEIPT_DECODE_ERROR), "receipt decode error"}, - {ERR_REASON(CMS_R_RECIPIENT_ERROR), "recipient error"}, - {ERR_REASON(CMS_R_SIGNER_CERTIFICATE_NOT_FOUND), - "signer certificate not found"}, - {ERR_REASON(CMS_R_SIGNFINAL_ERROR), "signfinal error"}, - {ERR_REASON(CMS_R_SMIME_TEXT_ERROR), "smime text error"}, - {ERR_REASON(CMS_R_STORE_INIT_ERROR), "store init error"}, - {ERR_REASON(CMS_R_TYPE_NOT_COMPRESSED_DATA), "type not compressed data"}, - {ERR_REASON(CMS_R_TYPE_NOT_DATA), "type not data"}, - {ERR_REASON(CMS_R_TYPE_NOT_DIGESTED_DATA), "type not digested data"}, - {ERR_REASON(CMS_R_TYPE_NOT_ENCRYPTED_DATA), "type not encrypted data"}, - {ERR_REASON(CMS_R_TYPE_NOT_ENVELOPED_DATA), "type not enveloped data"}, - {ERR_REASON(CMS_R_UNABLE_TO_FINALIZE_CONTEXT), - "unable to finalize context"}, - {ERR_REASON(CMS_R_UNKNOWN_CIPHER), "unknown cipher"}, - {ERR_REASON(CMS_R_UNKNOWN_DIGEST_ALGORIHM), "unknown digest algorihm"}, - {ERR_REASON(CMS_R_UNKNOWN_ID), "unknown id"}, - {ERR_REASON(CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM), - "unsupported compression algorithm"}, - {ERR_REASON(CMS_R_UNSUPPORTED_CONTENT_TYPE), "unsupported content type"}, - {ERR_REASON(CMS_R_UNSUPPORTED_KEK_ALGORITHM), - "unsupported kek algorithm"}, - {ERR_REASON(CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM), - "unsupported key encryption algorithm"}, - {ERR_REASON(CMS_R_UNSUPPORTED_RECIPIENT_TYPE), - "unsupported recipient type"}, - {ERR_REASON(CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE), - "unsupported recpientinfo type"}, - {ERR_REASON(CMS_R_UNSUPPORTED_TYPE), "unsupported type"}, - {ERR_REASON(CMS_R_UNWRAP_ERROR), "unwrap error"}, - {ERR_REASON(CMS_R_UNWRAP_FAILURE), "unwrap failure"}, - {ERR_REASON(CMS_R_VERIFICATION_FAILURE), "verification failure"}, - {ERR_REASON(CMS_R_WRAP_ERROR), "wrap error"}, +static const ERR_STRING_DATA CMS_str_reasons[] = { + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ADD_SIGNER_ERROR), "add signer error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CERTIFICATE_ALREADY_PRESENT), + "certificate already present"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CERTIFICATE_HAS_NO_KEYID), + "certificate has no keyid"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CERTIFICATE_VERIFY_ERROR), + "certificate verify error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CIPHER_INITIALISATION_ERROR), + "cipher initialisation error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR), + "cipher parameter initialisation error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CMS_DATAFINAL_ERROR), + "cms datafinal error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CMS_LIB), "cms lib"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENTIDENTIFIER_MISMATCH), + "contentidentifier mismatch"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENT_NOT_FOUND), "content not found"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENT_TYPE_MISMATCH), + "content type mismatch"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA), + "content type not compressed data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA), + "content type not enveloped data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA), + "content type not signed data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CONTENT_VERIFY_ERROR), + "content verify error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CTRL_ERROR), "ctrl error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_CTRL_FAILURE), "ctrl failure"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_DECRYPT_ERROR), "decrypt error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ERROR_GETTING_PUBLIC_KEY), + "error getting public key"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE), + "error reading messagedigest attribute"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ERROR_SETTING_KEY), "error setting key"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_ERROR_SETTING_RECIPIENTINFO), + "error setting recipientinfo"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_INVALID_ENCRYPTED_KEY_LENGTH), + "invalid encrypted key length"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER), + "invalid key encryption parameter"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_INVALID_KEY_LENGTH), "invalid key length"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_MD_BIO_INIT_ERROR), "md bio init error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH), + "messagedigest attribute wrong length"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_MESSAGEDIGEST_WRONG_LENGTH), + "messagedigest wrong length"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_MSGSIGDIGEST_ERROR), "msgsigdigest error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE), + "msgsigdigest verification failure"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_MSGSIGDIGEST_WRONG_LENGTH), + "msgsigdigest wrong length"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NEED_ONE_SIGNER), "need one signer"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_A_SIGNED_RECEIPT), + "not a signed receipt"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_ENCRYPTED_DATA), "not encrypted data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_KEK), "not kek"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_KEY_AGREEMENT), "not key agreement"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_KEY_TRANSPORT), "not key transport"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_PWRI), "not pwri"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE), + "not supported for this key type"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_CIPHER), "no cipher"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_CONTENT), "no content"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_CONTENT_TYPE), "no content type"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_DEFAULT_DIGEST), "no default digest"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_DIGEST_SET), "no digest set"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_KEY), "no key"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_KEY_OR_CERT), "no key or cert"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_MATCHING_DIGEST), "no matching digest"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_MATCHING_RECIPIENT), + "no matching recipient"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_MATCHING_SIGNATURE), + "no matching signature"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_MSGSIGDIGEST), "no msgsigdigest"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_PASSWORD), "no password"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_PRIVATE_KEY), "no private key"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_PUBLIC_KEY), "no public key"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_RECEIPT_REQUEST), "no receipt request"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_NO_SIGNERS), "no signers"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), + "private key does not match certificate"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_RECEIPT_DECODE_ERROR), + "receipt decode error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_RECIPIENT_ERROR), "recipient error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_SIGNER_CERTIFICATE_NOT_FOUND), + "signer certificate not found"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_SIGNFINAL_ERROR), "signfinal error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_SMIME_TEXT_ERROR), "smime text error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_STORE_INIT_ERROR), "store init error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_TYPE_NOT_COMPRESSED_DATA), + "type not compressed data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_TYPE_NOT_DATA), "type not data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_TYPE_NOT_DIGESTED_DATA), + "type not digested data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_TYPE_NOT_ENCRYPTED_DATA), + "type not encrypted data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_TYPE_NOT_ENVELOPED_DATA), + "type not enveloped data"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNABLE_TO_FINALIZE_CONTEXT), + "unable to finalize context"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNKNOWN_CIPHER), "unknown cipher"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNKNOWN_DIGEST_ALGORITHM), + "unknown digest algorithm"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNKNOWN_ID), "unknown id"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM), + "unsupported compression algorithm"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_CONTENT_TYPE), + "unsupported content type"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_KEK_ALGORITHM), + "unsupported kek algorithm"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM), + "unsupported key encryption algorithm"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE), + "unsupported recipientinfo type"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_RECIPIENT_TYPE), + "unsupported recipient type"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNSUPPORTED_TYPE), "unsupported type"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNWRAP_ERROR), "unwrap error"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_UNWRAP_FAILURE), "unwrap failure"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_VERIFICATION_FAILURE), + "verification failure"}, + {ERR_PACK(ERR_LIB_CMS, 0, CMS_R_WRAP_ERROR), "wrap error"}, {0, NULL} }; @@ -248,10 +282,9 @@ static ERR_STRING_DATA CMS_str_reasons[] = { int ERR_load_CMS_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(CMS_str_functs[0].error) == NULL) { - ERR_load_strings(0, CMS_str_functs); - ERR_load_strings(0, CMS_str_reasons); + ERR_load_strings_const(CMS_str_functs); + ERR_load_strings_const(CMS_str_reasons); } #endif return 1; diff --git a/crypto/cms/cms_lcl.h b/crypto/cms/cms_lcl.h index d0c0e813..c277f713 100644 --- a/crypto/cms/cms_lcl.h +++ b/crypto/cms/cms_lcl.h @@ -67,7 +67,7 @@ struct CMS_ContentInfo_st { DEFINE_STACK_OF(CMS_CertificateChoices) struct CMS_SignedData_st { - long version; + int32_t version; STACK_OF(X509_ALGOR) *digestAlgorithms; CMS_EncapsulatedContentInfo *encapContentInfo; STACK_OF(CMS_CertificateChoices) *certificates; @@ -83,7 +83,7 @@ struct CMS_EncapsulatedContentInfo_st { }; struct CMS_SignerInfo_st { - long version; + int32_t version; CMS_SignerIdentifier *sid; X509_ALGOR *digestAlgorithm; STACK_OF(X509_ATTRIBUTE) *signedAttrs; @@ -107,7 +107,7 @@ struct CMS_SignerIdentifier_st { }; struct CMS_EnvelopedData_st { - long version; + int32_t version; CMS_OriginatorInfo *originatorInfo; STACK_OF(CMS_RecipientInfo) *recipientInfos; CMS_EncryptedContentInfo *encryptedContentInfo; @@ -145,7 +145,7 @@ struct CMS_RecipientInfo_st { typedef CMS_SignerIdentifier CMS_RecipientIdentifier; struct CMS_KeyTransRecipientInfo_st { - long version; + int32_t version; CMS_RecipientIdentifier *rid; X509_ALGOR *keyEncryptionAlgorithm; ASN1_OCTET_STRING *encryptedKey; @@ -157,7 +157,7 @@ struct CMS_KeyTransRecipientInfo_st { }; struct CMS_KeyAgreeRecipientInfo_st { - long version; + int32_t version; CMS_OriginatorIdentifierOrKey *originator; ASN1_OCTET_STRING *ukm; X509_ALGOR *keyEncryptionAlgorithm; @@ -204,7 +204,7 @@ struct CMS_RecipientKeyIdentifier_st { }; struct CMS_KEKRecipientInfo_st { - long version; + int32_t version; CMS_KEKIdentifier *kekid; X509_ALGOR *keyEncryptionAlgorithm; ASN1_OCTET_STRING *encryptedKey; @@ -220,7 +220,7 @@ struct CMS_KEKIdentifier_st { }; struct CMS_PasswordRecipientInfo_st { - long version; + int32_t version; X509_ALGOR *keyDerivationAlgorithm; X509_ALGOR *keyEncryptionAlgorithm; ASN1_OCTET_STRING *encryptedKey; @@ -235,20 +235,20 @@ struct CMS_OtherRecipientInfo_st { }; struct CMS_DigestedData_st { - long version; + int32_t version; X509_ALGOR *digestAlgorithm; CMS_EncapsulatedContentInfo *encapContentInfo; ASN1_OCTET_STRING *digest; }; struct CMS_EncryptedData_st { - long version; + int32_t version; CMS_EncryptedContentInfo *encryptedContentInfo; STACK_OF(X509_ATTRIBUTE) *unprotectedAttrs; }; struct CMS_AuthenticatedData_st { - long version; + int32_t version; CMS_OriginatorInfo *originatorInfo; STACK_OF(CMS_RecipientInfo) *recipientInfos; X509_ALGOR *macAlgorithm; @@ -260,7 +260,7 @@ struct CMS_AuthenticatedData_st { }; struct CMS_CompressedData_st { - long version; + int32_t version; X509_ALGOR *compressionAlgorithm; STACK_OF(CMS_RecipientInfo) *recipientInfos; CMS_EncapsulatedContentInfo *encapContentInfo; @@ -332,14 +332,14 @@ struct CMS_ReceiptRequest_st { struct CMS_ReceiptsFrom_st { int type; union { - long allOrFirstTier; + int32_t allOrFirstTier; STACK_OF(GENERAL_NAMES) *receiptList; } d; }; # endif struct CMS_Receipt_st { - long version; + int32_t version; ASN1_OBJECT *contentType; ASN1_OCTET_STRING *signedContentIdentifier; ASN1_OCTET_STRING *originatorSignatureValue; diff --git a/crypto/cms/cms_lib.c b/crypto/cms/cms_lib.c index 7395684b..c2cac260 100644 --- a/crypto/cms/cms_lib.c +++ b/crypto/cms/cms_lib.c @@ -292,7 +292,7 @@ BIO *cms_DigestAlgorithm_init_bio(X509_ALGOR *digestAlgorithm) digest = EVP_get_digestbyobj(digestoid); if (!digest) { CMSerr(CMS_F_CMS_DIGESTALGORITHM_INIT_BIO, - CMS_R_UNKNOWN_DIGEST_ALGORIHM); + CMS_R_UNKNOWN_DIGEST_ALGORITHM); goto err; } mdbio = BIO_new(BIO_f_md()); diff --git a/crypto/cms/cms_sd.c b/crypto/cms/cms_sd.c index 4108fe70..ff2d540b 100644 --- a/crypto/cms/cms_sd.c +++ b/crypto/cms/cms_sd.c @@ -635,7 +635,7 @@ int cms_SignedData_final(CMS_ContentInfo *cms, BIO *chain) int CMS_SignerInfo_sign(CMS_SignerInfo *si) { EVP_MD_CTX *mctx = si->mctx; - EVP_PKEY_CTX *pctx; + EVP_PKEY_CTX *pctx = NULL; unsigned char *abuf = NULL; int alen; size_t siglen; @@ -656,6 +656,7 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si) EVP_MD_CTX_reset(mctx); if (EVP_DigestSignInit(mctx, &pctx, md, NULL, si->pkey) <= 0) goto err; + si->pctx = pctx; } if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN, diff --git a/crypto/comp/c_zlib.c b/crypto/comp/c_zlib.c index 821dc099..d688deee 100644 --- a/crypto/comp/c_zlib.c +++ b/crypto/comp/c_zlib.c @@ -256,14 +256,13 @@ COMP_METHOD *COMP_zlib(void) meth = &zlib_stateful_method; #endif - return (meth); + return meth; } void comp_zlib_cleanup_int(void) { #ifdef ZLIB_SHARED - if (zlib_dso != NULL) - DSO_free(zlib_dso); + DSO_free(zlib_dso); zlib_dso = NULL; #endif } @@ -297,7 +296,11 @@ static long bio_zlib_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); static const BIO_METHOD bio_meth_zlib = { BIO_TYPE_COMP, "zlib", + /* TODO: Convert to new style write function */ + bwrite_conv, bio_zlib_write, + /* TODO: Convert to new style read function */ + bread_conv, bio_zlib_read, NULL, /* bio_zlib_puts, */ NULL, /* bio_zlib_gets, */ diff --git a/crypto/comp/comp_err.c b/crypto/comp/comp_err.c index 8e2e6956..5aff502b 100644 --- a/crypto/comp/comp_err.c +++ b/crypto/comp/comp_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,28 +8,26 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_COMP,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_COMP,0,reason) - -static ERR_STRING_DATA COMP_str_functs[] = { - {ERR_FUNC(COMP_F_BIO_ZLIB_FLUSH), "bio_zlib_flush"}, - {ERR_FUNC(COMP_F_BIO_ZLIB_NEW), "bio_zlib_new"}, - {ERR_FUNC(COMP_F_BIO_ZLIB_READ), "bio_zlib_read"}, - {ERR_FUNC(COMP_F_BIO_ZLIB_WRITE), "bio_zlib_write"}, +static const ERR_STRING_DATA COMP_str_functs[] = { + {ERR_PACK(ERR_LIB_COMP, COMP_F_BIO_ZLIB_FLUSH, 0), "bio_zlib_flush"}, + {ERR_PACK(ERR_LIB_COMP, COMP_F_BIO_ZLIB_NEW, 0), "bio_zlib_new"}, + {ERR_PACK(ERR_LIB_COMP, COMP_F_BIO_ZLIB_READ, 0), "bio_zlib_read"}, + {ERR_PACK(ERR_LIB_COMP, COMP_F_BIO_ZLIB_WRITE, 0), "bio_zlib_write"}, {0, NULL} }; -static ERR_STRING_DATA COMP_str_reasons[] = { - {ERR_REASON(COMP_R_ZLIB_DEFLATE_ERROR), "zlib deflate error"}, - {ERR_REASON(COMP_R_ZLIB_INFLATE_ERROR), "zlib inflate error"}, - {ERR_REASON(COMP_R_ZLIB_NOT_SUPPORTED), "zlib not supported"}, +static const ERR_STRING_DATA COMP_str_reasons[] = { + {ERR_PACK(ERR_LIB_COMP, 0, COMP_R_ZLIB_DEFLATE_ERROR), + "zlib deflate error"}, + {ERR_PACK(ERR_LIB_COMP, 0, COMP_R_ZLIB_INFLATE_ERROR), + "zlib inflate error"}, + {ERR_PACK(ERR_LIB_COMP, 0, COMP_R_ZLIB_NOT_SUPPORTED), + "zlib not supported"}, {0, NULL} }; @@ -38,10 +36,9 @@ static ERR_STRING_DATA COMP_str_reasons[] = { int ERR_load_COMP_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(COMP_str_functs[0].error) == NULL) { - ERR_load_strings(0, COMP_str_functs); - ERR_load_strings(0, COMP_str_reasons); + ERR_load_strings_const(COMP_str_functs); + ERR_load_strings_const(COMP_str_reasons); } #endif return 1; diff --git a/crypto/comp/comp_lib.c b/crypto/comp/comp_lib.c index 32afd0db..137a5db7 100644 --- a/crypto/comp/comp_lib.c +++ b/crypto/comp/comp_lib.c @@ -19,13 +19,13 @@ COMP_CTX *COMP_CTX_new(COMP_METHOD *meth) COMP_CTX *ret; if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) - return (NULL); + return NULL; ret->meth = meth; if ((ret->meth->init != NULL) && !ret->meth->init(ret)) { OPENSSL_free(ret); ret = NULL; } - return (ret); + return ret; } const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx) @@ -59,14 +59,14 @@ int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, { int ret; if (ctx->meth->compress == NULL) { - return (-1); + return -1; } ret = ctx->meth->compress(ctx, out, olen, in, ilen); if (ret > 0) { ctx->compress_in += ilen; ctx->compress_out += ret; } - return (ret); + return ret; } int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, @@ -75,14 +75,14 @@ int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, int ret; if (ctx->meth->expand == NULL) { - return (-1); + return -1; } ret = ctx->meth->expand(ctx, out, olen, in, ilen); if (ret > 0) { ctx->expand_in += ilen; ctx->expand_out += ret; } - return (ret); + return ret; } int COMP_CTX_get_type(const COMP_CTX* comp) diff --git a/crypto/conf/conf_api.c b/crypto/conf/conf_api.c index 5535416a..ade54839 100644 --- a/crypto/conf/conf_api.c +++ b/crypto/conf/conf_api.c @@ -9,11 +9,11 @@ /* Part of the code in here was originally in conf.c, which is now removed */ +#include "e_os.h" #include #include #include #include -#include "e_os.h" static void value_free_hash(const CONF_VALUE *a, LHASH_OF(CONF_VALUE) *conf); static void value_free_stack_doall(CONF_VALUE *a); @@ -24,11 +24,11 @@ CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section) CONF_VALUE *v, vv; if ((conf == NULL) || (section == NULL)) - return (NULL); + return NULL; vv.name = NULL; vv.section = (char *)section; v = lh_CONF_VALUE_retrieve(conf->data, &vv); - return (v); + return v; } /* Up until OpenSSL 0.9.5a, this was CONF_get_section */ @@ -41,7 +41,7 @@ STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, if (v != NULL) return ((STACK_OF(CONF_VALUE) *)v->value); else - return (NULL); + return NULL; } int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value) @@ -73,29 +73,29 @@ char *_CONF_get_string(const CONF *conf, const char *section, char *p; if (name == NULL) - return (NULL); + return NULL; if (conf != NULL) { if (section != NULL) { vv.name = (char *)name; vv.section = (char *)section; v = lh_CONF_VALUE_retrieve(conf->data, &vv); if (v != NULL) - return (v->value); + return v->value; if (strcmp(section, "ENV") == 0) { p = getenv(name); if (p != NULL) - return (p); + return p; } } vv.section = "default"; vv.name = (char *)name; v = lh_CONF_VALUE_retrieve(conf->data, &vv); if (v != NULL) - return (v->value); + return v->value; else - return (NULL); + return NULL; } else - return (getenv(name)); + return getenv(name); } static unsigned long conf_value_hash(const CONF_VALUE *v) @@ -110,14 +110,14 @@ static int conf_value_cmp(const CONF_VALUE *a, const CONF_VALUE *b) if (a->section != b->section) { i = strcmp(a->section, b->section); if (i) - return (i); + return i; } if ((a->name != NULL) && (b->name != NULL)) { i = strcmp(a->name, b->name); - return (i); + return i; } else if (a->name == b->name) - return (0); + return 0; else return ((a->name == NULL) ? -1 : 1); } @@ -204,7 +204,8 @@ CONF_VALUE *_CONF_new_section(CONF *conf, const char *section) v->value = (char *)sk; vv = lh_CONF_VALUE_insert(conf->data, v); - OPENSSL_assert(vv == NULL); + if (vv != NULL) + goto err; return v; err: diff --git a/crypto/conf/conf_def.c b/crypto/conf/conf_def.c index b443903f..82e191ae 100644 --- a/crypto/conf/conf_def.c +++ b/crypto/conf/conf_def.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,6 @@ #include #include #include "internal/cryptlib.h" -#include #include #include #include @@ -317,13 +316,12 @@ static int def_load_bio(CONF *conf, BIO *in, long *line) } if (psection == NULL) psection = section; - v->name = OPENSSL_malloc(strlen(pname) + 1); + v->name = OPENSSL_strdup(pname); v->value = NULL; if (v->name == NULL) { CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE); goto err; } - OPENSSL_strlcpy(v->name, pname, strlen(pname) + 1); if (!str_copy(conf, psection, &(v->value), start)) goto err; @@ -347,7 +345,7 @@ static int def_load_bio(CONF *conf, BIO *in, long *line) } BUF_MEM_free(buff); OPENSSL_free(section); - return (1); + return 1; err: BUF_MEM_free(buff); OPENSSL_free(section); @@ -364,7 +362,7 @@ static int def_load_bio(CONF *conf, BIO *in, long *line) OPENSSL_free(v->value); OPENSSL_free(v); } - return (0); + return 0; } static void clear_comments(CONF *conf, char *p) @@ -411,7 +409,7 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) BUF_MEM *buf; if ((buf = BUF_MEM_new()) == NULL) - return (0); + return 0; len = strlen(from) + 1; if (!BUF_MEM_grow(buf, len)) @@ -551,17 +549,17 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) OPENSSL_free(*pto); *pto = buf->data; OPENSSL_free(buf); - return (1); + return 1; err: BUF_MEM_free(buf); - return (0); + return 0; } static char *eat_ws(CONF *conf, char *p) { while (IS_WS(conf, *p) && (!IS_EOF(conf, *p))) p++; - return (p); + return p; } static char *eat_alpha_numeric(CONF *conf, char *p) @@ -572,7 +570,7 @@ static char *eat_alpha_numeric(CONF *conf, char *p) continue; } if (!IS_ALPHA_NUMERIC_PUNCT(conf, *p)) - return (p); + return p; p++; } } @@ -586,13 +584,13 @@ static char *scan_quote(CONF *conf, char *p) if (IS_ESC(conf, *p)) { p++; if (IS_EOF(conf, *p)) - return (p); + return p; } p++; } if (*p == q) p++; - return (p); + return p; } static char *scan_dquote(CONF *conf, char *p) @@ -612,7 +610,7 @@ static char *scan_dquote(CONF *conf, char *p) } if (*p == q) p++; - return (p); + return p; } static void dump_value_doall_arg(const CONF_VALUE *a, BIO *out) diff --git a/crypto/conf/conf_def.h b/crypto/conf/conf_def.h index da4767e1..ad8894c4 100644 --- a/crypto/conf/conf_def.h +++ b/crypto/conf/conf_def.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/conf/keysets.pl * - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/crypto/conf/conf_err.c b/crypto/conf/conf_err.c index 0863bc4d..8ba243ca 100644 --- a/crypto/conf/conf_err.c +++ b/crypto/conf/conf_err.c @@ -8,61 +8,62 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CONF,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CONF,0,reason) - -static ERR_STRING_DATA CONF_str_functs[] = { - {ERR_FUNC(CONF_F_CONF_DUMP_FP), "CONF_dump_fp"}, - {ERR_FUNC(CONF_F_CONF_LOAD), "CONF_load"}, - {ERR_FUNC(CONF_F_CONF_LOAD_FP), "CONF_load_fp"}, - {ERR_FUNC(CONF_F_CONF_PARSE_LIST), "CONF_parse_list"}, - {ERR_FUNC(CONF_F_DEF_LOAD), "def_load"}, - {ERR_FUNC(CONF_F_DEF_LOAD_BIO), "def_load_bio"}, - {ERR_FUNC(CONF_F_MODULE_INIT), "module_init"}, - {ERR_FUNC(CONF_F_MODULE_LOAD_DSO), "module_load_dso"}, - {ERR_FUNC(CONF_F_MODULE_RUN), "module_run"}, - {ERR_FUNC(CONF_F_NCONF_DUMP_BIO), "NCONF_dump_bio"}, - {ERR_FUNC(CONF_F_NCONF_DUMP_FP), "NCONF_dump_fp"}, - {ERR_FUNC(CONF_F_NCONF_GET_NUMBER_E), "NCONF_get_number_e"}, - {ERR_FUNC(CONF_F_NCONF_GET_SECTION), "NCONF_get_section"}, - {ERR_FUNC(CONF_F_NCONF_GET_STRING), "NCONF_get_string"}, - {ERR_FUNC(CONF_F_NCONF_LOAD), "NCONF_load"}, - {ERR_FUNC(CONF_F_NCONF_LOAD_BIO), "NCONF_load_bio"}, - {ERR_FUNC(CONF_F_NCONF_LOAD_FP), "NCONF_load_fp"}, - {ERR_FUNC(CONF_F_NCONF_NEW), "NCONF_new"}, - {ERR_FUNC(CONF_F_STR_COPY), "str_copy"}, +static const ERR_STRING_DATA CONF_str_functs[] = { + {ERR_PACK(ERR_LIB_CONF, CONF_F_CONF_DUMP_FP, 0), "CONF_dump_fp"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_CONF_LOAD, 0), "CONF_load"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_CONF_LOAD_FP, 0), "CONF_load_fp"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_CONF_PARSE_LIST, 0), "CONF_parse_list"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_DEF_LOAD, 0), "def_load"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_DEF_LOAD_BIO, 0), "def_load_bio"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_MODULE_INIT, 0), "module_init"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_MODULE_LOAD_DSO, 0), "module_load_dso"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_MODULE_RUN, 0), "module_run"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_DUMP_BIO, 0), "NCONF_dump_bio"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_DUMP_FP, 0), "NCONF_dump_fp"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_GET_NUMBER_E, 0), + "NCONF_get_number_e"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_GET_SECTION, 0), "NCONF_get_section"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_GET_STRING, 0), "NCONF_get_string"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_LOAD, 0), "NCONF_load"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_LOAD_BIO, 0), "NCONF_load_bio"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_LOAD_FP, 0), "NCONF_load_fp"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_NCONF_NEW, 0), "NCONF_new"}, + {ERR_PACK(ERR_LIB_CONF, CONF_F_STR_COPY, 0), "str_copy"}, {0, NULL} }; -static ERR_STRING_DATA CONF_str_reasons[] = { - {ERR_REASON(CONF_R_ERROR_LOADING_DSO), "error loading dso"}, - {ERR_REASON(CONF_R_LIST_CANNOT_BE_NULL), "list cannot be null"}, - {ERR_REASON(CONF_R_MISSING_CLOSE_SQUARE_BRACKET), - "missing close square bracket"}, - {ERR_REASON(CONF_R_MISSING_EQUAL_SIGN), "missing equal sign"}, - {ERR_REASON(CONF_R_MISSING_INIT_FUNCTION), "missing init function"}, - {ERR_REASON(CONF_R_MODULE_INITIALIZATION_ERROR), - "module initialization error"}, - {ERR_REASON(CONF_R_NO_CLOSE_BRACE), "no close brace"}, - {ERR_REASON(CONF_R_NO_CONF), "no conf"}, - {ERR_REASON(CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE), - "no conf or environment variable"}, - {ERR_REASON(CONF_R_NO_SECTION), "no section"}, - {ERR_REASON(CONF_R_NO_SUCH_FILE), "no such file"}, - {ERR_REASON(CONF_R_NO_VALUE), "no value"}, - {ERR_REASON(CONF_R_UNABLE_TO_CREATE_NEW_SECTION), - "unable to create new section"}, - {ERR_REASON(CONF_R_UNKNOWN_MODULE_NAME), "unknown module name"}, - {ERR_REASON(CONF_R_VARIABLE_EXPANSION_TOO_LONG), - "variable expansion too long"}, - {ERR_REASON(CONF_R_VARIABLE_HAS_NO_VALUE), "variable has no value"}, +static const ERR_STRING_DATA CONF_str_reasons[] = { + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_ERROR_LOADING_DSO), "error loading dso"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_LIST_CANNOT_BE_NULL), + "list cannot be null"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_MISSING_CLOSE_SQUARE_BRACKET), + "missing close square bracket"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_MISSING_EQUAL_SIGN), + "missing equal sign"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_MISSING_INIT_FUNCTION), + "missing init function"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_MODULE_INITIALIZATION_ERROR), + "module initialization error"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_CLOSE_BRACE), "no close brace"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_CONF), "no conf"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE), + "no conf or environment variable"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_SECTION), "no section"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_SUCH_FILE), "no such file"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_NO_VALUE), "no value"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_UNABLE_TO_CREATE_NEW_SECTION), + "unable to create new section"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_UNKNOWN_MODULE_NAME), + "unknown module name"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_VARIABLE_EXPANSION_TOO_LONG), + "variable expansion too long"}, + {ERR_PACK(ERR_LIB_CONF, 0, CONF_R_VARIABLE_HAS_NO_VALUE), + "variable has no value"}, {0, NULL} }; @@ -71,10 +72,9 @@ static ERR_STRING_DATA CONF_str_reasons[] = { int ERR_load_CONF_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(CONF_str_functs[0].error) == NULL) { - ERR_load_strings(0, CONF_str_functs); - ERR_load_strings(0, CONF_str_reasons); + ERR_load_strings_const(CONF_str_functs); + ERR_load_strings_const(CONF_str_reasons); } #endif return 1; diff --git a/crypto/conf/conf_lib.c b/crypto/conf/conf_lib.c index 35321149..c72511ba 100644 --- a/crypto/conf/conf_lib.c +++ b/crypto/conf/conf_lib.c @@ -7,15 +7,15 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include #include -#include +#include "internal/conf.h" #include #include #include #include #include -#include "e_os.h" static CONF_METHOD *default_CONF_method = NULL; @@ -186,7 +186,7 @@ CONF *NCONF_new(CONF_METHOD *meth) ret = meth->create(meth); if (ret == NULL) { CONFerr(CONF_F_NCONF_NEW, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } return ret; diff --git a/crypto/conf/conf_mod.c b/crypto/conf/conf_mod.c index 543a8ea4..7622d8e1 100644 --- a/crypto/conf/conf_mod.c +++ b/crypto/conf/conf_mod.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,10 +7,10 @@ * https://www.openssl.org/source/license.html */ +#include "internal/cryptlib.h" #include #include #include -#include "internal/cryptlib.h" #include "internal/conf.h" #include "internal/dso.h" #include @@ -170,6 +170,7 @@ static int module_run(const CONF *cnf, const char *name, const char *value, if (ret <= 0) { if (!(flags & CONF_MFLAGS_SILENT)) { char rcode[DECIMAL_SIZE(ret) + 1]; + CONFerr(CONF_F_MODULE_RUN, CONF_R_MODULE_INITIALIZATION_ERROR); BIO_snprintf(rcode, sizeof(rcode), "%-8d", ret); ERR_add_error_data(6, "module=", name, ", value=", value, @@ -475,7 +476,7 @@ void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data) char *CONF_get1_default_config_file(void) { - char *file; + char *file, *sep = ""; int len; file = getenv("OPENSSL_CONF"); @@ -485,6 +486,7 @@ char *CONF_get1_default_config_file(void) len = strlen(X509_get_default_cert_area()); #ifndef OPENSSL_SYS_VMS len++; + sep = "/"; #endif len += strlen(OPENSSL_CONF); @@ -492,11 +494,8 @@ char *CONF_get1_default_config_file(void) if (file == NULL) return NULL; - OPENSSL_strlcpy(file, X509_get_default_cert_area(), len + 1); -#ifndef OPENSSL_SYS_VMS - OPENSSL_strlcat(file, "/", len + 1); -#endif - OPENSSL_strlcat(file, OPENSSL_CONF, len + 1); + BIO_snprintf(file, len + 1, "%s%s%s", X509_get_default_cert_area(), + sep, OPENSSL_CONF); return file; } diff --git a/crypto/conf/conf_sap.c b/crypto/conf/conf_sap.c index bed95abe..3d2e065e 100644 --- a/crypto/conf/conf_sap.c +++ b/crypto/conf/conf_sap.c @@ -10,11 +10,15 @@ #include #include #include "internal/cryptlib.h" -#include +#include "internal/conf.h" #include #include #include +#ifdef _WIN32 +# define strdup _strdup +#endif + /* * This is the automatic configuration loader: it is called automatically by * OpenSSL when any of a number of standard initialisation functions are diff --git a/crypto/conf/keysets.pl b/crypto/conf/keysets.pl index 5af08ae2..a6d25788 100644 --- a/crypto/conf/keysets.pl +++ b/crypto/conf/keysets.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -57,12 +57,14 @@ foreach (0 .. 255) push(@V_w32,$v); } +# Output year depends on the year of the script. +my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; print <<"EOF"; /* * WARNING: do not edit! * Generated by crypto/conf/keysets.pl * - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at diff --git a/crypto/cpt_err.c b/crypto/cpt_err.c index c28dcf19..d4d2878e 100644 --- a/crypto/cpt_err.c +++ b/crypto/cpt_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,35 +8,41 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CRYPTO,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CRYPTO,0,reason) - -static ERR_STRING_DATA CRYPTO_str_functs[] = { - {ERR_FUNC(CRYPTO_F_CRYPTO_DUP_EX_DATA), "CRYPTO_dup_ex_data"}, - {ERR_FUNC(CRYPTO_F_CRYPTO_FREE_EX_DATA), "CRYPTO_free_ex_data"}, - {ERR_FUNC(CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX), "CRYPTO_get_ex_new_index"}, - {ERR_FUNC(CRYPTO_F_CRYPTO_MEMDUP), "CRYPTO_memdup"}, - {ERR_FUNC(CRYPTO_F_CRYPTO_NEW_EX_DATA), "CRYPTO_new_ex_data"}, - {ERR_FUNC(CRYPTO_F_CRYPTO_SET_EX_DATA), "CRYPTO_set_ex_data"}, - {ERR_FUNC(CRYPTO_F_FIPS_MODE_SET), "FIPS_mode_set"}, - {ERR_FUNC(CRYPTO_F_GET_AND_LOCK), "get_and_lock"}, - {ERR_FUNC(CRYPTO_F_OPENSSL_BUF2HEXSTR), "OPENSSL_buf2hexstr"}, - {ERR_FUNC(CRYPTO_F_OPENSSL_HEXSTR2BUF), "OPENSSL_hexstr2buf"}, - {ERR_FUNC(CRYPTO_F_OPENSSL_INIT_CRYPTO), "OPENSSL_init_crypto"}, +static const ERR_STRING_DATA CRYPTO_str_functs[] = { + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_DUP_EX_DATA, 0), + "CRYPTO_dup_ex_data"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_FREE_EX_DATA, 0), + "CRYPTO_free_ex_data"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX, 0), + "CRYPTO_get_ex_new_index"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_MEMDUP, 0), "CRYPTO_memdup"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_NEW_EX_DATA, 0), + "CRYPTO_new_ex_data"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_CRYPTO_SET_EX_DATA, 0), + "CRYPTO_set_ex_data"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_FIPS_MODE_SET, 0), "FIPS_mode_set"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_GET_AND_LOCK, 0), "get_and_lock"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_OPENSSL_BUF2HEXSTR, 0), + "OPENSSL_buf2hexstr"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_OPENSSL_HEXSTR2BUF, 0), + "OPENSSL_hexstr2buf"}, + {ERR_PACK(ERR_LIB_CRYPTO, CRYPTO_F_OPENSSL_INIT_CRYPTO, 0), + "OPENSSL_init_crypto"}, {0, NULL} }; -static ERR_STRING_DATA CRYPTO_str_reasons[] = { - {ERR_REASON(CRYPTO_R_FIPS_MODE_NOT_SUPPORTED), "fips mode not supported"}, - {ERR_REASON(CRYPTO_R_ILLEGAL_HEX_DIGIT), "illegal hex digit"}, - {ERR_REASON(CRYPTO_R_ODD_NUMBER_OF_DIGITS), "odd number of digits"}, +static const ERR_STRING_DATA CRYPTO_str_reasons[] = { + {ERR_PACK(ERR_LIB_CRYPTO, 0, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED), + "fips mode not supported"}, + {ERR_PACK(ERR_LIB_CRYPTO, 0, CRYPTO_R_ILLEGAL_HEX_DIGIT), + "illegal hex digit"}, + {ERR_PACK(ERR_LIB_CRYPTO, 0, CRYPTO_R_ODD_NUMBER_OF_DIGITS), + "odd number of digits"}, {0, NULL} }; @@ -45,10 +51,9 @@ static ERR_STRING_DATA CRYPTO_str_reasons[] = { int ERR_load_CRYPTO_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(CRYPTO_str_functs[0].error) == NULL) { - ERR_load_strings(0, CRYPTO_str_functs); - ERR_load_strings(0, CRYPTO_str_reasons); + ERR_load_strings_const(CRYPTO_str_functs); + ERR_load_strings_const(CRYPTO_str_reasons); } #endif return 1; diff --git a/crypto/cryptlib.c b/crypto/cryptlib.c index d93bcd35..a4d96d86 100644 --- a/crypto/cryptlib.c +++ b/crypto/cryptlib.c @@ -1,5 +1,6 @@ /* * Copyright 1998-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 @@ -7,12 +8,7 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - +#include "e_os.h" #include "internal/cryptlib_int.h" #include @@ -65,16 +61,26 @@ void OPENSSL_cpuid_setup(void) } if ((env = strchr(env, ':'))) { - unsigned int vecx; + IA32CAP vecx; env++; off = (env[0] == '~') ? 1 : 0; - vecx = strtoul(env + off, NULL, 0); - if (off) - OPENSSL_ia32cap_P[2] &= ~vecx; - else - OPENSSL_ia32cap_P[2] = vecx; +# if defined(_WIN32) + if (!sscanf(env + off, "%I64i", &vecx)) + vecx = strtoul(env + off, NULL, 0); +# else + if (!sscanf(env + off, "%lli", (long long *)&vecx)) + vecx = strtoul(env + off, NULL, 0); +# endif + if (off) { + OPENSSL_ia32cap_P[2] &= ~(unsigned int)vecx; + OPENSSL_ia32cap_P[3] &= ~(unsigned int)(vecx >> 32); + } else { + OPENSSL_ia32cap_P[2] = (unsigned int)vecx; + OPENSSL_ia32cap_P[3] = (unsigned int)(vecx >> 32); + } } else { OPENSSL_ia32cap_P[2] = 0; + OPENSSL_ia32cap_P[3] = 0; } } else { vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P); @@ -182,7 +188,13 @@ void OPENSSL_showfatal(const char *fmta, ...) va_list ap; TCHAR buf[256]; const TCHAR *fmt; -# ifdef STD_ERROR_HANDLE /* what a dirty trick! */ + /* + * First check if it's a console application, in which case the + * error message would be printed to standard error. + * Windows CE does not have a concept of a console application, + * so we need to guard the check. + */ +# ifdef STD_ERROR_HANDLE HANDLE h; if ((h = GetStdHandle(STD_ERROR_HANDLE)) != NULL && @@ -322,26 +334,16 @@ void OPENSSL_die(const char *message, const char *file, int line) } #if !defined(OPENSSL_CPUID_OBJ) -/* volatile unsigned char* pointers are there because - * 1. Accessing a variable declared volatile via a pointer - * that lacks a volatile qualifier causes undefined behavior. - * 2. When the variable itself is not volatile the compiler is - * not required to keep all those reads and can convert - * this into canonical memcmp() which doesn't read the whole block. - * Pointers to volatile resolve the first problem fully. The second - * problem cannot be resolved in any Standard-compliant way but this - * works the problem around. Compilers typically react to - * pointers to volatile by preserving the reads and writes through them. - * The latter is not required by the Standard if the memory pointed to - * is not volatile. - * Pointers themselves are volatile in the function signature to work - * around a subtle bug in gcc 4.6+ which causes writes through - * pointers to volatile to not be emitted in some rare, - * never needed in real life, pieces of code. +/* + * The volatile is used to to ensure that the compiler generates code that reads + * all values from the array and doesn't try to optimize this away. The standard + * doesn't actually require this behavior if the original data pointed to is + * not volatile, but compilers do this in practice anyway. + * + * There are also assembler versions of this function. */ -int CRYPTO_memcmp(const volatile void * volatile in_a, - const volatile void * volatile in_b, - size_t len) +# undef CRYPTO_memcmp +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len) { size_t i; const volatile unsigned char *a = in_a; @@ -353,4 +355,12 @@ int CRYPTO_memcmp(const volatile void * volatile in_a, return x; } + +/* + * For systems that don't provide an instruction counter register or equivalent. + */ +uint32_t OPENSSL_rdtsc(void) +{ + return 0; +} #endif diff --git a/crypto/ct/ct_b64.c b/crypto/ct/ct_b64.c index f0bf3aff..109ffcdc 100644 --- a/crypto/ct/ct_b64.c +++ b/crypto/ct/ct_b64.c @@ -24,7 +24,7 @@ static int ct_base64_decode(const char *in, unsigned char **out) { size_t inlen = strlen(in); - int outlen; + int outlen, i; unsigned char *outbuf = NULL; if (inlen == 0) { @@ -45,9 +45,12 @@ static int ct_base64_decode(const char *in, unsigned char **out) goto err; } - /* Subtract padding bytes from |outlen| */ + /* Subtract padding bytes from |outlen|. Any more than 2 is malformed. */ + i = 0; while (in[--inlen] == '=') { --outlen; + if (++i > 2) + goto err; } *out = outbuf; @@ -132,7 +135,7 @@ SCT *SCT_new_from_base64(unsigned char version, const char *logid_base64, int CTLOG_new_from_base64(CTLOG **ct_log, const char *pkey_base64, const char *name) { unsigned char *pkey_der = NULL; - int pkey_der_len = ct_base64_decode(pkey_base64, &pkey_der); + int pkey_der_len; const unsigned char *p; EVP_PKEY *pkey = NULL; @@ -141,7 +144,8 @@ int CTLOG_new_from_base64(CTLOG **ct_log, const char *pkey_base64, const char *n return 0; } - if (pkey_der_len <= 0) { + pkey_der_len = ct_base64_decode(pkey_base64, &pkey_der); + if (pkey_der_len < 0) { CTerr(CT_F_CTLOG_NEW_FROM_BASE64, CT_R_LOG_CONF_INVALID_KEY); return 0; } diff --git a/crypto/ct/ct_err.c b/crypto/ct/ct_err.c index fe0778b2..c0c62fee 100644 --- a/crypto/ct/ct_err.c +++ b/crypto/ct/ct_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,67 +8,77 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_CT,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_CT,0,reason) - -static ERR_STRING_DATA CT_str_functs[] = { - {ERR_FUNC(CT_F_CTLOG_NEW), "CTLOG_new"}, - {ERR_FUNC(CT_F_CTLOG_NEW_FROM_BASE64), "CTLOG_new_from_base64"}, - {ERR_FUNC(CT_F_CTLOG_NEW_FROM_CONF), "ctlog_new_from_conf"}, - {ERR_FUNC(CT_F_CTLOG_STORE_LOAD_CTX_NEW), "ctlog_store_load_ctx_new"}, - {ERR_FUNC(CT_F_CTLOG_STORE_LOAD_FILE), "CTLOG_STORE_load_file"}, - {ERR_FUNC(CT_F_CTLOG_STORE_LOAD_LOG), "ctlog_store_load_log"}, - {ERR_FUNC(CT_F_CTLOG_STORE_NEW), "CTLOG_STORE_new"}, - {ERR_FUNC(CT_F_CT_BASE64_DECODE), "ct_base64_decode"}, - {ERR_FUNC(CT_F_CT_POLICY_EVAL_CTX_NEW), "CT_POLICY_EVAL_CTX_new"}, - {ERR_FUNC(CT_F_CT_V1_LOG_ID_FROM_PKEY), "ct_v1_log_id_from_pkey"}, - {ERR_FUNC(CT_F_I2O_SCT), "i2o_SCT"}, - {ERR_FUNC(CT_F_I2O_SCT_LIST), "i2o_SCT_LIST"}, - {ERR_FUNC(CT_F_I2O_SCT_SIGNATURE), "i2o_SCT_signature"}, - {ERR_FUNC(CT_F_O2I_SCT), "o2i_SCT"}, - {ERR_FUNC(CT_F_O2I_SCT_LIST), "o2i_SCT_LIST"}, - {ERR_FUNC(CT_F_O2I_SCT_SIGNATURE), "o2i_SCT_signature"}, - {ERR_FUNC(CT_F_SCT_CTX_NEW), "SCT_CTX_new"}, - {ERR_FUNC(CT_F_SCT_CTX_VERIFY), "SCT_CTX_verify"}, - {ERR_FUNC(CT_F_SCT_NEW), "SCT_new"}, - {ERR_FUNC(CT_F_SCT_NEW_FROM_BASE64), "SCT_new_from_base64"}, - {ERR_FUNC(CT_F_SCT_SET0_LOG_ID), "SCT_set0_log_id"}, - {ERR_FUNC(CT_F_SCT_SET1_EXTENSIONS), "SCT_set1_extensions"}, - {ERR_FUNC(CT_F_SCT_SET1_LOG_ID), "SCT_set1_log_id"}, - {ERR_FUNC(CT_F_SCT_SET1_SIGNATURE), "SCT_set1_signature"}, - {ERR_FUNC(CT_F_SCT_SET_LOG_ENTRY_TYPE), "SCT_set_log_entry_type"}, - {ERR_FUNC(CT_F_SCT_SET_SIGNATURE_NID), "SCT_set_signature_nid"}, - {ERR_FUNC(CT_F_SCT_SET_VERSION), "SCT_set_version"}, +static const ERR_STRING_DATA CT_str_functs[] = { + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_NEW, 0), "CTLOG_new"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_NEW_FROM_BASE64, 0), + "CTLOG_new_from_base64"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_NEW_FROM_CONF, 0), "ctlog_new_from_conf"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_STORE_LOAD_CTX_NEW, 0), + "ctlog_store_load_ctx_new"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_STORE_LOAD_FILE, 0), + "CTLOG_STORE_load_file"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_STORE_LOAD_LOG, 0), + "ctlog_store_load_log"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CTLOG_STORE_NEW, 0), "CTLOG_STORE_new"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CT_BASE64_DECODE, 0), "ct_base64_decode"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CT_POLICY_EVAL_CTX_NEW, 0), + "CT_POLICY_EVAL_CTX_new"}, + {ERR_PACK(ERR_LIB_CT, CT_F_CT_V1_LOG_ID_FROM_PKEY, 0), + "ct_v1_log_id_from_pkey"}, + {ERR_PACK(ERR_LIB_CT, CT_F_I2O_SCT, 0), "i2o_SCT"}, + {ERR_PACK(ERR_LIB_CT, CT_F_I2O_SCT_LIST, 0), "i2o_SCT_LIST"}, + {ERR_PACK(ERR_LIB_CT, CT_F_I2O_SCT_SIGNATURE, 0), "i2o_SCT_signature"}, + {ERR_PACK(ERR_LIB_CT, CT_F_O2I_SCT, 0), "o2i_SCT"}, + {ERR_PACK(ERR_LIB_CT, CT_F_O2I_SCT_LIST, 0), "o2i_SCT_LIST"}, + {ERR_PACK(ERR_LIB_CT, CT_F_O2I_SCT_SIGNATURE, 0), "o2i_SCT_signature"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_CTX_NEW, 0), "SCT_CTX_new"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_CTX_VERIFY, 0), "SCT_CTX_verify"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_NEW, 0), "SCT_new"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_NEW_FROM_BASE64, 0), "SCT_new_from_base64"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET0_LOG_ID, 0), "SCT_set0_log_id"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET1_EXTENSIONS, 0), "SCT_set1_extensions"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET1_LOG_ID, 0), "SCT_set1_log_id"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET1_SIGNATURE, 0), "SCT_set1_signature"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET_LOG_ENTRY_TYPE, 0), + "SCT_set_log_entry_type"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET_SIGNATURE_NID, 0), + "SCT_set_signature_nid"}, + {ERR_PACK(ERR_LIB_CT, CT_F_SCT_SET_VERSION, 0), "SCT_set_version"}, {0, NULL} }; -static ERR_STRING_DATA CT_str_reasons[] = { - {ERR_REASON(CT_R_BASE64_DECODE_ERROR), "base64 decode error"}, - {ERR_REASON(CT_R_INVALID_LOG_ID_LENGTH), "invalid log id length"}, - {ERR_REASON(CT_R_LOG_CONF_INVALID), "log conf invalid"}, - {ERR_REASON(CT_R_LOG_CONF_INVALID_KEY), "log conf invalid key"}, - {ERR_REASON(CT_R_LOG_CONF_MISSING_DESCRIPTION), - "log conf missing description"}, - {ERR_REASON(CT_R_LOG_CONF_MISSING_KEY), "log conf missing key"}, - {ERR_REASON(CT_R_LOG_KEY_INVALID), "log key invalid"}, - {ERR_REASON(CT_R_SCT_FUTURE_TIMESTAMP), "sct future timestamp"}, - {ERR_REASON(CT_R_SCT_INVALID), "sct invalid"}, - {ERR_REASON(CT_R_SCT_INVALID_SIGNATURE), "sct invalid signature"}, - {ERR_REASON(CT_R_SCT_LIST_INVALID), "sct list invalid"}, - {ERR_REASON(CT_R_SCT_LOG_ID_MISMATCH), "sct log id mismatch"}, - {ERR_REASON(CT_R_SCT_NOT_SET), "sct not set"}, - {ERR_REASON(CT_R_SCT_UNSUPPORTED_VERSION), "sct unsupported version"}, - {ERR_REASON(CT_R_UNRECOGNIZED_SIGNATURE_NID), - "unrecognized signature nid"}, - {ERR_REASON(CT_R_UNSUPPORTED_ENTRY_TYPE), "unsupported entry type"}, - {ERR_REASON(CT_R_UNSUPPORTED_VERSION), "unsupported version"}, +static const ERR_STRING_DATA CT_str_reasons[] = { + {ERR_PACK(ERR_LIB_CT, 0, CT_R_BASE64_DECODE_ERROR), "base64 decode error"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_INVALID_LOG_ID_LENGTH), + "invalid log id length"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_LOG_CONF_INVALID), "log conf invalid"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_LOG_CONF_INVALID_KEY), + "log conf invalid key"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_LOG_CONF_MISSING_DESCRIPTION), + "log conf missing description"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_LOG_CONF_MISSING_KEY), + "log conf missing key"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_LOG_KEY_INVALID), "log key invalid"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_FUTURE_TIMESTAMP), + "sct future timestamp"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_INVALID), "sct invalid"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_INVALID_SIGNATURE), + "sct invalid signature"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_LIST_INVALID), "sct list invalid"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_LOG_ID_MISMATCH), "sct log id mismatch"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_NOT_SET), "sct not set"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_SCT_UNSUPPORTED_VERSION), + "sct unsupported version"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_UNRECOGNIZED_SIGNATURE_NID), + "unrecognized signature nid"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_UNSUPPORTED_ENTRY_TYPE), + "unsupported entry type"}, + {ERR_PACK(ERR_LIB_CT, 0, CT_R_UNSUPPORTED_VERSION), "unsupported version"}, {0, NULL} }; @@ -77,10 +87,9 @@ static ERR_STRING_DATA CT_str_reasons[] = { int ERR_load_CT_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(CT_str_functs[0].error) == NULL) { - ERR_load_strings(0, CT_str_functs); - ERR_load_strings(0, CT_str_reasons); + ERR_load_strings_const(CT_str_functs); + ERR_load_strings_const(CT_str_reasons); } #endif return 1; diff --git a/crypto/ct/ct_sct.c b/crypto/ct/ct_sct.c index cd2cf609..1dc16857 100644 --- a/crypto/ct/ct_sct.c +++ b/crypto/ct/ct_sct.c @@ -70,10 +70,11 @@ int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type) case CT_LOG_ENTRY_TYPE_PRECERT: sct->entry_type = entry_type; return 1; - default: - CTerr(CT_F_SCT_SET_LOG_ENTRY_TYPE, CT_R_UNSUPPORTED_ENTRY_TYPE); - return 0; + case CT_LOG_ENTRY_TYPE_NOT_SET: + break; } + CTerr(CT_F_SCT_SET_LOG_ENTRY_TYPE, CT_R_UNSUPPORTED_ENTRY_TYPE); + return 0; } int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len) @@ -274,9 +275,11 @@ int SCT_set_source(SCT *sct, sct_source_t source) return SCT_set_log_entry_type(sct, CT_LOG_ENTRY_TYPE_X509); case SCT_SOURCE_X509V3_EXTENSION: return SCT_set_log_entry_type(sct, CT_LOG_ENTRY_TYPE_PRECERT); - default: /* if we aren't sure, leave the log entry type alone */ - return 1; + case SCT_SOURCE_UNKNOWN: + break; } + /* if we aren't sure, leave the log entry type alone */ + return 1; } sct_validation_status_t SCT_get_validation_status(const SCT *sct) diff --git a/crypto/ctype.c b/crypto/ctype.c new file mode 100644 index 00000000..813be25a --- /dev/null +++ b/crypto/ctype.c @@ -0,0 +1,274 @@ +/* + * 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 + */ + +#include +#include +#include "internal/ctype.h" +#include "openssl/ebcdic.h" + +/* + * Define the character classes for each character in the seven bit ASCII + * character set. This is independent of the host's character set, characters + * are converted to ASCII before being used as an index in to this table. + * Characters outside of the seven bit ASCII range are detected before indexing. + */ +static const unsigned short ctype_char_map[128] = { + /* 00 nul */ CTYPE_MASK_cntrl, + /* 01 soh */ CTYPE_MASK_cntrl, + /* 02 stx */ CTYPE_MASK_cntrl, + /* 03 etx */ CTYPE_MASK_cntrl, + /* 04 eot */ CTYPE_MASK_cntrl, + /* 05 enq */ CTYPE_MASK_cntrl, + /* 06 ack */ CTYPE_MASK_cntrl, + /* 07 \a */ CTYPE_MASK_cntrl, + /* 08 \b */ CTYPE_MASK_cntrl, + /* 09 \t */ CTYPE_MASK_blank | CTYPE_MASK_cntrl | CTYPE_MASK_space, + /* 0A \n */ CTYPE_MASK_cntrl | CTYPE_MASK_space, + /* 0B \v */ CTYPE_MASK_cntrl | CTYPE_MASK_space, + /* 0C \f */ CTYPE_MASK_cntrl | CTYPE_MASK_space, + /* 0D \r */ CTYPE_MASK_cntrl | CTYPE_MASK_space, + /* 0E so */ CTYPE_MASK_cntrl, + /* 0F si */ CTYPE_MASK_cntrl, + /* 10 dle */ CTYPE_MASK_cntrl, + /* 11 dc1 */ CTYPE_MASK_cntrl, + /* 12 dc2 */ CTYPE_MASK_cntrl, + /* 13 dc3 */ CTYPE_MASK_cntrl, + /* 14 dc4 */ CTYPE_MASK_cntrl, + /* 15 nak */ CTYPE_MASK_cntrl, + /* 16 syn */ CTYPE_MASK_cntrl, + /* 17 etb */ CTYPE_MASK_cntrl, + /* 18 can */ CTYPE_MASK_cntrl, + /* 19 em */ CTYPE_MASK_cntrl, + /* 1A sub */ CTYPE_MASK_cntrl, + /* 1B esc */ CTYPE_MASK_cntrl, + /* 1C fs */ CTYPE_MASK_cntrl, + /* 1D gs */ CTYPE_MASK_cntrl, + /* 1E rs */ CTYPE_MASK_cntrl, + /* 1F us */ CTYPE_MASK_cntrl, + /* 20 */ CTYPE_MASK_blank | CTYPE_MASK_print | CTYPE_MASK_space + | CTYPE_MASK_asn1print, + /* 21 ! */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 22 " */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 23 # */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 24 $ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 25 % */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 26 & */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 27 ' */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 28 ( */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 29 ) */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 2A * */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 2B + */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 2C , */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 2D - */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 2E . */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 2F / */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 30 0 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 31 1 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 32 2 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 33 3 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 34 4 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 35 5 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 36 6 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 37 7 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 38 8 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 39 9 */ CTYPE_MASK_digit | CTYPE_MASK_graph | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 3A : */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 3B ; */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 3C < */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 3D = */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 3E > */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 3F ? */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct + | CTYPE_MASK_asn1print, + /* 40 @ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 41 A */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 42 B */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 43 C */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 44 D */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 45 E */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 46 F */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 47 G */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 48 H */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 49 I */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 4A J */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 4B K */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 4C L */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 4D M */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 4E N */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 4F O */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 50 P */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 51 Q */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 52 R */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 53 S */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 54 T */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 55 U */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 56 V */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 57 W */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 58 X */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 59 Y */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 5A Z */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_upper + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 5B [ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 5C \ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 5D ] */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 5E ^ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 5F _ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 60 ` */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 61 a */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 62 b */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 63 c */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 64 d */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 65 e */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 66 f */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_xdigit | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 67 g */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 68 h */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 69 i */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 6A j */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 6B k */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 6C l */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 6D m */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 6E n */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 6F o */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 70 p */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 71 q */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 72 r */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 73 s */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 74 t */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 75 u */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 76 v */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 77 w */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 78 x */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 79 y */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 7A z */ CTYPE_MASK_graph | CTYPE_MASK_lower | CTYPE_MASK_print + | CTYPE_MASK_base64 | CTYPE_MASK_asn1print, + /* 7B { */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 7C | */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 7D } */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 7E ~ */ CTYPE_MASK_graph | CTYPE_MASK_print | CTYPE_MASK_punct, + /* 7F del */ CTYPE_MASK_cntrl +}; + +#ifdef CHARSET_EBCDIC +int ossl_toascii(int c) +{ + if (c < -128 || c > 256 || c == EOF) + return c; + /* + * Adjust negatively signed characters. + * This is not required for ASCII because any character that sign extends + * is not seven bit and all of the checks are on the seven bit characters. + * I.e. any check must fail on sign extension. + */ + if (c < 0) + c += 256; + return os_toascii[c]; +} + +int ossl_fromascii(int c) +{ + if (c < -128 || c > 256 || c == EOF) + return c; + if (c < 0) + c += 256; + return os_toebcdic[c]; +} +#endif + +int ossl_ctype_check(int c, unsigned int mask) +{ + const int max = sizeof(ctype_char_map) / sizeof(*ctype_char_map); + const int a = ossl_toascii(c); + + return a >= 0 && a < max && (ctype_char_map[a] & mask) != 0; +} + +#if defined(CHARSET_EBCDIC) && !defined(CHARSET_EBCDIC_TEST) +static const int case_change = 0x40; +#else +static const int case_change = 0x20; +#endif + +int ossl_tolower(int c) +{ + return ossl_isupper(c) ? c ^ case_change : c; +} + +int ossl_toupper(int c) +{ + return ossl_islower(c) ? c ^ case_change : c; +} diff --git a/crypto/cversion.c b/crypto/cversion.c index 96d8a5b5..534e7eba 100644 --- a/crypto/cversion.c +++ b/crypto/cversion.c @@ -9,9 +9,7 @@ #include "internal/cryptlib.h" -#ifndef NO_WINDOWS_BRAINDEATH -# include "buildinf.h" -#endif +#include "buildinf.h" unsigned long OpenSSL_version_num(void) { @@ -20,46 +18,27 @@ unsigned long OpenSSL_version_num(void) const char *OpenSSL_version(int t) { - if (t == OPENSSL_VERSION) + switch (t) { + case OPENSSL_VERSION: return OPENSSL_VERSION_TEXT; - if (t == OPENSSL_BUILT_ON) { -#ifdef DATE -# ifdef OPENSSL_USE_BUILD_DATE - return (DATE); -# else - return ("built on: reproducible build, date unspecified"); -# endif -#else - return ("built on: date not available"); -#endif - } - if (t == OPENSSL_CFLAGS) { -#ifdef CFLAGS - return (CFLAGS); -#else - return ("compiler: information not available"); -#endif - } - if (t == OPENSSL_PLATFORM) { -#ifdef PLATFORM - return (PLATFORM); -#else - return ("platform: information not available"); -#endif - } - if (t == OPENSSL_DIR) { + case OPENSSL_BUILT_ON: + return DATE; + case OPENSSL_CFLAGS: + return compiler_flags; + case OPENSSL_PLATFORM: + return PLATFORM; + case OPENSSL_DIR: #ifdef OPENSSLDIR return "OPENSSLDIR: \"" OPENSSLDIR "\""; #else return "OPENSSLDIR: N/A"; #endif - } - if (t == OPENSSL_ENGINES_DIR) { + case OPENSSL_ENGINES_DIR: #ifdef ENGINESDIR return "ENGINESDIR: \"" ENGINESDIR "\""; #else return "ENGINESDIR: N/A"; #endif } - return ("not available"); + return "not available"; } diff --git a/crypto/des/asm/crypt586.pl b/crypto/des/asm/crypt586.pl index d5911a18..a02d1806 100644 --- a/crypto/des/asm/crypt586.pl +++ b/crypto/des/asm/crypt586.pl @@ -7,7 +7,7 @@ # https://www.openssl.org/source/license.html # The inner loop instruction sequence and the IP/FP modifications are from -# Svend Olaf Mikkelsen +# Svend Olaf Mikkelsen $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; push(@INC,"${dir}","${dir}../../perlasm"); @@ -16,7 +16,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"crypt586.pl"); +&asm_init($ARGV[0]); $L="edi"; $R="esi"; @@ -111,7 +111,7 @@ sub D_ENCRYPT &and( $u, "0xfcfcfcfc" ); # 2 &xor( $tmp1, $tmp1); # 1 &and( $t, "0xcfcfcfcf" ); # 2 - &xor( $tmp2, $tmp2); + &xor( $tmp2, $tmp2); &movb( &LB($tmp1), &LB($u) ); &movb( &LB($tmp2), &HB($u) ); &rotr( $t, 4 ); @@ -175,7 +175,7 @@ sub IP_new &R_PERM_OP($l,$tt,$r,14,"0x33333333",$r); &R_PERM_OP($tt,$r,$l,22,"0x03fc03fc",$r); &R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r); - + if ($lr != 3) { if (($lr-3) < 0) diff --git a/crypto/des/asm/des-586.pl b/crypto/des/asm/des-586.pl index 3d7c7f1b..2bcc54ef 100644 --- a/crypto/des/asm/des-586.pl +++ b/crypto/des/asm/des-586.pl @@ -7,7 +7,7 @@ # https://www.openssl.org/source/license.html # The inner loop instruction sequence and the IP/FP modifications are from -# Svend Olaf Mikkelsen +# Svend Olaf Mikkelsen. $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; push(@INC,"${dir}","${dir}../../perlasm"); @@ -15,7 +15,7 @@ require "x86asm.pl"; require "cbc.pl"; require "desboth.pl"; -# base code is in microsft +# base code is in Microsoft # op dest, source # format. # @@ -23,7 +23,7 @@ require "desboth.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"des-586.pl"); +&asm_init($ARGV[0]); $L="edi"; $R="esi"; @@ -85,7 +85,7 @@ sub DES_encrypt_internal() &function_end_B("_x86_DES_encrypt"); } - + sub DES_decrypt_internal() { &function_begin_B("_x86_DES_decrypt"); @@ -122,7 +122,7 @@ sub DES_decrypt_internal() &function_end_B("_x86_DES_decrypt"); } - + sub DES_encrypt { local($name,$do_ip)=@_; @@ -283,7 +283,7 @@ sub IP_new &R_PERM_OP($l,$tt,$r,14,"0x33333333",$r); &R_PERM_OP($tt,$r,$l,22,"0x03fc03fc",$r); &R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r); - + if ($lr != 3) { if (($lr-3) < 0) diff --git a/crypto/des/asm/des_enc.m4 b/crypto/des/asm/des_enc.m4 index 2d794d33..4a0d1562 100644 --- a/crypto/des/asm/des_enc.m4 +++ b/crypto/des/asm/des_enc.m4 @@ -1,4 +1,4 @@ -! Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +! 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 @@ -31,10 +31,6 @@ #include -#ifdef OPENSSL_FIPSCANISTER -#include -#endif - #if defined(__SUNPRO_C) && defined(__sparcv9) # define ABI64 /* They've said -xarch=v9 at command line */ #elif defined(__GNUC__) && defined(__arch64__) @@ -116,7 +112,7 @@ changequote({,}) ! ! Loads key first round from address in parameter 5 to out0, out1. ! -! After the the original LibDES initial permutation, the resulting left +! After the original LibDES initial permutation, the resulting left ! is in the variable initially used for right and vice versa. The macro ! implements the possibility to keep the halfs in the original registers. ! @@ -532,8 +528,8 @@ $4: ! parameter 3 1 for optional store to [in0] ! parameter 4 1 for load input/output address to local5/7 ! -! The final permutation logic switches the halfes, meaning that -! left and right ends up the the registers originally used. +! The final permutation logic switches the halves, meaning that +! left and right ends up the registers originally used. define(fp_macro, { @@ -735,7 +731,7 @@ define(fp_ip_macro, { sll $4, 3, local2 xor local4, temp2, $2 - ! reload since used as temporar: + ! reload since used as temporary: ld [out2+280], out4 ! loop counter @@ -757,7 +753,7 @@ define(fp_ip_macro, { ! parameter 1 address ! parameter 2 destination left ! parameter 3 destination right -! parameter 4 temporar +! parameter 4 temporary ! parameter 5 label define(load_little_endian, { @@ -806,7 +802,7 @@ $5a: ! parameter 1 address ! parameter 2 destination left ! parameter 3 destination right -! parameter 4 temporar +! parameter 4 temporary ! parameter 4 label ! ! adds 8 to address @@ -931,7 +927,7 @@ $7.jmp.table: ! parameter 1 address ! parameter 2 source left ! parameter 3 source right -! parameter 4 temporar +! parameter 4 temporary define(store_little_endian, { @@ -1521,7 +1517,7 @@ DES_ncbc_encrypt: ! parameter 7 1 for mov in1 to in3 ! parameter 8 1 for mov in3 to in4 - ip_macro(in5, out5, out5, in5, in4, 2, 0, 1) ! include decryprion ks in4 + ip_macro(in5, out5, out5, in5, in4, 2, 0, 1) ! include decryption ks in4 fp_macro(out5, in5, 0, 1) ! 1 for input and output address to local5/7 @@ -1567,7 +1563,7 @@ DES_ncbc_encrypt: .size DES_ncbc_encrypt, .DES_ncbc_encrypt.end-DES_ncbc_encrypt -! void DES_ede3_cbc_encrypt(input, output, lenght, ks1, ks2, ks3, ivec, enc) +! void DES_ede3_cbc_encrypt(input, output, length, ks1, ks2, ks3, ivec, enc) ! ************************************************************************** @@ -1815,7 +1811,7 @@ DES_ede3_cbc_encrypt: .byte 240, 240, 240, 240, 244, 244, 244, 244 .byte 248, 248, 248, 248, 252, 252, 252, 252 - ! 5 numbers for initil/final permutation + ! 5 numbers for initial/final permutation .word 0x0f0f0f0f ! offset 256 .word 0x0000ffff ! 260 diff --git a/crypto/des/asm/desboth.pl b/crypto/des/asm/desboth.pl index 76759fb2..ef7054e2 100644 --- a/crypto/des/asm/desboth.pl +++ b/crypto/des/asm/desboth.pl @@ -34,7 +34,7 @@ sub DES_encrypt3 &IP_new($L,$R,"edx",0); # put them back - + if ($enc) { &mov(&DWP(4,"ebx","",0),$R); diff --git a/crypto/des/asm/dest4-sparcv9.pl b/crypto/des/asm/dest4-sparcv9.pl index 4a6e29fc..fe1fdc70 100644 --- a/crypto/des/asm/dest4-sparcv9.pl +++ b/crypto/des/asm/dest4-sparcv9.pl @@ -8,8 +8,8 @@ # ==================================================================== -# Written by David S. Miller and Andy Polyakov -# . The module is licensed under 2-clause BSD +# Written by David S. Miller and Andy Polyakov. +# The module is licensed under 2-clause BSD # license. March 2013. All rights reserved. # ==================================================================== diff --git a/crypto/des/build.info b/crypto/des/build.info index c0306cfd..05cb154c 100644 --- a/crypto/des/build.info +++ b/crypto/des/build.info @@ -5,13 +5,15 @@ SOURCE[../../libcrypto]=\ ofb64ede.c ofb64enc.c ofb_enc.c \ str2key.c pcbc_enc.c qud_cksm.c rand_key.c \ {- $target{des_asm_src} -} \ - fcrypt.c xcbc_enc.c rpc_enc.c cbc_cksm.c + fcrypt.c xcbc_enc.c cbc_cksm.c GENERATE[des_enc-sparc.S]=asm/des_enc.m4 GENERATE[dest4-sparcv9.S]=asm/dest4-sparcv9.pl $(PERLASM_SCHEME) INCLUDE[dest4-sparcv9.o]=.. -GENERATE[des-586.s]=asm/des-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) +GENERATE[des-586.s]=asm/des-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) DEPEND[des-586.s]=../perlasm/x86asm.pl ../perlasm/cbc.pl -GENERATE[crypt586.s]=asm/crypt586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) +GENERATE[crypt586.s]=asm/crypt586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) DEPEND[crypt586.s]=../perlasm/x86asm.pl ../perlasm/cbc.pl diff --git a/crypto/des/cbc_cksm.c b/crypto/des/cbc_cksm.c index a7bf0689..5a1f72f8 100644 --- a/crypto/des/cbc_cksm.c +++ b/crypto/des/cbc_cksm.c @@ -33,7 +33,6 @@ DES_LONG DES_cbc_cksum(const unsigned char *in, DES_cblock *output, tin1 ^= tout1; tin[1] = tin1; DES_encrypt1((DES_LONG *)tin, schedule, DES_ENCRYPT); - /* fix 15/10/91 eay - thanks to keithr@sco.COM */ tout0 = tin[0]; tout1 = tin[1]; } @@ -50,5 +49,5 @@ DES_LONG DES_cbc_cksum(const unsigned char *in, DES_cblock *output, | ((tout1 >> 8L) & 0x0000FF00) | ((tout1 << 8L) & 0x00FF0000) | ((tout1 << 24L) & 0xFF000000); - return (tout1); + return tout1; } diff --git a/crypto/des/cfb64ede.c b/crypto/des/cfb64ede.c index 5edb979e..21943f61 100644 --- a/crypto/des/cfb64ede.c +++ b/crypto/des/cfb64ede.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,6 @@ */ #include "des_locl.h" -#include "e_os.h" /* * The input and output encrypted as though 64bit cfb mode is being used. diff --git a/crypto/des/cfb_enc.c b/crypto/des/cfb_enc.c index 6c428ba6..544392e4 100644 --- a/crypto/des/cfb_enc.c +++ b/crypto/des/cfb_enc.c @@ -37,7 +37,7 @@ void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, unsigned int sh[4]; unsigned char *ovec = (unsigned char *)sh; - /* I kind of count that compiler optimizes away this assertioni, */ + /* I kind of count that compiler optimizes away this assertion, */ assert(sizeof(sh[0]) == 4); /* as this holds true for all, */ /* but 16-bit platforms... */ diff --git a/crypto/des/des_enc.c b/crypto/des/des_enc.c index 600f6df4..ed134ace 100644 --- a/crypto/des/des_enc.c +++ b/crypto/des/des_enc.c @@ -24,8 +24,7 @@ void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc) * Things have been modified so that the initial rotate is done outside * the loop. This required the DES_SPtrans values in sp.h to be rotated * 1 bit to the right. One perl script later and things have a 5% speed - * up on a sparc2. Thanks to Richard Outerbridge - * <71755.204@CompuServe.COM> for pointing this out. + * up on a sparc2. Thanks to Richard Outerbridge for pointing this out. */ /* clear the top bits on machines with 8byte longs */ /* shift left by 2 */ @@ -95,8 +94,7 @@ void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc) * Things have been modified so that the initial rotate is done outside * the loop. This required the DES_SPtrans values in sp.h to be rotated * 1 bit to the right. One perl script later and things have a 5% speed - * up on a sparc2. Thanks to Richard Outerbridge - * <71755.204@CompuServe.COM> for pointing this out. + * up on a sparc2. Thanks to Richard Outerbridge for pointing this out. */ /* clear the top bits on machines with 8byte longs */ r = ROTATE(r, 29) & 0xffffffffL; diff --git a/crypto/des/des_locl.h b/crypto/des/des_locl.h index 1fe47688..f401e6f3 100644 --- a/crypto/des/des_locl.h +++ b/crypto/des/des_locl.h @@ -26,10 +26,6 @@ # define ITERATIONS 16 # define HALF_ITERATIONS 8 -/* used in des_read and des_write */ -# define MAXWRITE (1024*16) -# define BSIZE (MAXWRITE+4) - # define c2l(c,l) (l =((DES_LONG)(*((c)++))) , \ l|=((DES_LONG)(*((c)++)))<< 8L, \ l|=((DES_LONG)(*((c)++)))<<16L, \ @@ -67,7 +63,6 @@ * replacements for htonl and ntohl since I have no idea what to do when * faced with machines with 8 byte longs. */ -# define HDRSIZE 4 # define n2l(c,l) (l =((DES_LONG)(*((c)++)))<<24L, \ l|=((DES_LONG)(*((c)++)))<<16L, \ @@ -101,7 +96,7 @@ } \ } -# if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)) +# if defined(_MSC_VER) # define ROTATE(a,n) (_lrotr(a,n)) # elif defined(__ICC) # define ROTATE(a,n) (_rotr(a,n)) diff --git a/crypto/des/ecb_enc.c b/crypto/des/ecb_enc.c index 32df4600..5ed079d1 100644 --- a/crypto/des/ecb_enc.c +++ b/crypto/des/ecb_enc.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,19 +15,16 @@ const char *DES_options(void) { static int init = 1; - static char buf[32]; + static char buf[12]; if (init) { - const char *size; - if (sizeof(DES_LONG) != sizeof(long)) - size = "int"; + OPENSSL_strlcpy(buf, "des(int)", sizeof(buf)); else - size = "long"; - BIO_snprintf(buf, sizeof(buf), "des(%s)", size); + OPENSSL_strlcpy(buf, "des(long)", sizeof(buf)); init = 0; } - return (buf); + return buf; } void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, diff --git a/crypto/des/fcrypt.c b/crypto/des/fcrypt.c index baede4fc..aaee4bf2 100644 --- a/crypto/des/fcrypt.c +++ b/crypto/des/fcrypt.c @@ -23,7 +23,7 @@ /* * Added more values to handle illegal salt values the way normal crypt() - * implementations do. The patch was sent by Bjorn Gronvall + * implementations do. */ static unsigned const char con_salt[128] = { 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, @@ -60,7 +60,7 @@ char *DES_crypt(const char *buf, const char *salt) static char buff[14]; #ifndef CHARSET_EBCDIC - return (DES_fcrypt(buf, salt, buff)); + return DES_fcrypt(buf, salt, buff); #else char e_salt[2 + 1]; char e_buf[32 + 1]; /* replace 32 by 8 ? */ @@ -145,5 +145,5 @@ char *DES_fcrypt(const char *buf, const char *salt, char *ret) ret[i] = cov_2char[c]; } ret[13] = '\0'; - return (ret); + return ret; } diff --git a/crypto/des/qud_cksm.c b/crypto/des/qud_cksm.c index 8710ceca..81e6be82 100644 --- a/crypto/des/qud_cksm.c +++ b/crypto/des/qud_cksm.c @@ -15,7 +15,6 @@ */ #include "des_locl.h" -/* bug fix for dos - 7/6/91 - Larry hughes@logos.ucs.indiana.edu */ #define Q_B0(a) (((DES_LONG)(a))) #define Q_B1(a) (((DES_LONG)(a))<<8) #define Q_B2(a) (((DES_LONG)(a))<<16) @@ -73,5 +72,5 @@ DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], *lp++ = z1; } } - return (z0); + return z0; } diff --git a/crypto/des/rand_key.c b/crypto/des/rand_key.c index 61e4f9d0..09d7e4cf 100644 --- a/crypto/des/rand_key.c +++ b/crypto/des/rand_key.c @@ -14,8 +14,8 @@ int DES_random_key(DES_cblock *ret) { do { if (RAND_bytes((unsigned char *)ret, sizeof(DES_cblock)) != 1) - return (0); + return 0; } while (DES_is_weak_key(ret)); DES_set_odd_parity(ret); - return (1); + return 1; } diff --git a/crypto/des/rpc_des.h b/crypto/des/rpc_des.h deleted file mode 100644 index fe59e224..00000000 --- a/crypto/des/rpc_des.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 - */ - -/* @(#)des.h 2.2 88/08/10 4.0 RPCSRC; from 2.7 88/02/08 SMI */ -/*- - * Sun RPC is a product of Sun Microsystems, Inc. and is provided for - * unrestricted use provided that this legend is included on all tape - * media and as a part of the software program in whole or part. Users - * may copy or modify Sun RPC without charge, but are not authorized - * to license or distribute it to anyone else except as part of a product or - * program developed by the user. - * - * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE - * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. - * - * Sun RPC is provided with no support and without any obligation on the - * part of Sun Microsystems, Inc. to assist in its use, correction, - * modification or enhancement. - * - * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE - * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC - * OR ANY PART THEREOF. - * - * In no event will Sun Microsystems, Inc. be liable for any lost revenue - * or profits or other special, indirect and consequential damages, even if - * Sun has been advised of the possibility of such damages. - * - * Sun Microsystems, Inc. - * 2550 Garcia Avenue - * Mountain View, California 94043 - */ -/* - * Generic DES driver interface - * Keep this file hardware independent! - * Copyright (c) 1986 by Sun Microsystems, Inc. - */ - -#define DES_MAXLEN 65536 /* maximum # of bytes to encrypt */ -#define DES_QUICKLEN 16 /* maximum # of bytes to encrypt quickly */ - -enum desdir { ENCRYPT, DECRYPT }; -enum desmode { CBC, ECB }; - -/* - * parameters to ioctl call - */ -struct desparams { - unsigned char des_key[8]; /* key (with low bit parity) */ - enum desdir des_dir; /* direction */ - enum desmode des_mode; /* mode */ - unsigned char des_ivec[8]; /* input vector */ - unsigned des_len; /* number of bytes to crypt */ - union { - unsigned char UDES_data[DES_QUICKLEN]; - unsigned char *UDES_buf; - } UDES; -#define des_data UDES.UDES_data /* direct data here if quick */ -#define des_buf UDES.UDES_buf /* otherwise, pointer to data */ -}; - -/* - * Encrypt an arbitrary sized buffer - */ -#define DESIOCBLOCK _IOWR('d', 6, struct desparams) - -/* - * Encrypt of small amount of data, quickly - */ -#define DESIOCQUICK _IOWR('d', 7, struct desparams) diff --git a/crypto/des/rpc_enc.c b/crypto/des/rpc_enc.c deleted file mode 100644 index bfa85115..00000000 --- a/crypto/des/rpc_enc.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - */ - -#include "rpc_des.h" -#include "des_locl.h" - -int _des_crypt(char *buf, int len, struct desparams *desp); -int _des_crypt(char *buf, int len, struct desparams *desp) -{ - DES_key_schedule ks; - int enc; - - DES_set_key_unchecked(&desp->des_key, &ks); - enc = (desp->des_dir == ENCRYPT) ? DES_ENCRYPT : DES_DECRYPT; - - if (desp->des_mode == CBC) - DES_ecb_encrypt((const_DES_cblock *)desp->UDES.UDES_buf, - (DES_cblock *)desp->UDES.UDES_buf, &ks, enc); - else { - DES_ncbc_encrypt(desp->UDES.UDES_buf, desp->UDES.UDES_buf, - len, &ks, &desp->des_ivec, enc); - } - return (1); -} diff --git a/crypto/des/set_key.c b/crypto/des/set_key.c index dc88b8d0..adbad723 100644 --- a/crypto/des/set_key.c +++ b/crypto/des/set_key.c @@ -18,10 +18,9 @@ #include #include "des_locl.h" +/* defaults to false */ OPENSSL_IMPLEMENT_GLOBAL(int, DES_check_key, 0) - /* - * defaults to false - */ + static const unsigned char odd_parity[256] = { 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, @@ -65,9 +64,9 @@ int DES_check_key_parity(const_DES_cblock *key) for (i = 0; i < DES_KEY_SZ; i++) { if ((*key)[i] != odd_parity[(*key)[i]]) - return (0); + return 0; } - return (1); + return 1; } /*- @@ -77,8 +76,6 @@ int DES_check_key_parity(const_DES_cblock *key) * %T Security for Computer Networks * %I John Wiley & Sons * %D 1984 - * Many thanks to smb@ulysses.att.com (Steven Bellovin) for the reference - * (and actual cblock values). */ #define NUM_WEAK_KEY 16 static const DES_cblock weak_keys[NUM_WEAK_KEY] = { @@ -107,15 +104,9 @@ int DES_is_weak_key(const_DES_cblock *key) int i; for (i = 0; i < NUM_WEAK_KEY; i++) - /* - * Added == 0 to comparison, I obviously don't run this section very - * often :-(, thanks to engineering@MorningStar.Com for the fix eay - * 93/06/29 Another problem, I was comparing only the first 4 bytes, - * 97/03/18 - */ if (memcmp(weak_keys[i], key, sizeof(DES_cblock)) == 0) - return (1); - return (0); + return 1; + return 0; } /*- @@ -302,9 +293,9 @@ int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule) int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule) { if (!DES_check_key_parity(key)) - return (-1); + return -1; if (DES_is_weak_key(key)) - return (-2); + return -2; DES_set_key_unchecked(key, schedule); return 0; } @@ -329,8 +320,8 @@ void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule) c2l(in, d); /* - * do PC1 in 47 simple operations :-) Thanks to John Fletcher - * (john_fletcher@lccmail.ocf.llnl.gov) for the inspiration. :-) + * do PC1 in 47 simple operations. Thanks to John Fletcher + * for the inspiration. */ PERM_OP(d, c, t, 4, 0x0f0f0f0fL); HPERM_OP(c, t, -2, 0xcccc0000L); @@ -377,13 +368,5 @@ void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule) int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule) { - return (DES_set_key(key, schedule)); + return DES_set_key(key, schedule); } - -/*- -#undef des_fixup_key_parity -void des_fixup_key_parity(des_cblock *key) - { - des_set_odd_parity(key); - } -*/ diff --git a/crypto/des/spr.h b/crypto/des/spr.h index 42adfbf6..2404e092 100644 --- a/crypto/des/spr.h +++ b/crypto/des/spr.h @@ -7,7 +7,7 @@ * https://www.openssl.org/source/license.html */ -OPENSSL_GLOBAL const DES_LONG DES_SPtrans[8][64] = { +const DES_LONG DES_SPtrans[8][64] = { { /* nibble 0 */ 0x02080800L, 0x00080000L, 0x02000002L, 0x02080802L, diff --git a/crypto/des/str2key.c b/crypto/des/str2key.c index 78998a1c..e18d7265 100644 --- a/crypto/des/str2key.c +++ b/crypto/des/str2key.c @@ -17,10 +17,6 @@ void DES_string_to_key(const char *str, DES_cblock *key) memset(key, 0, 8); length = strlen(str); -#ifdef OLD_STR_TO_KEY - for (i = 0; i < length; i++) - (*key)[i % 8] ^= (str[i] << 1); -#else /* MIT COMPATIBLE */ for (i = 0; i < length; i++) { register unsigned char j = str[i]; @@ -34,7 +30,6 @@ void DES_string_to_key(const char *str, DES_cblock *key) (*key)[7 - (i % 8)] ^= j; } } -#endif DES_set_odd_parity(key); DES_set_key_unchecked(key, &ks); DES_cbc_cksum((const unsigned char *)str, key, length, &ks, key); @@ -50,20 +45,6 @@ void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2) memset(key1, 0, 8); memset(key2, 0, 8); length = strlen(str); -#ifdef OLD_STR_TO_KEY - if (length <= 8) { - for (i = 0; i < length; i++) { - (*key2)[i] = (*key1)[i] = (str[i] << 1); - } - } else { - for (i = 0; i < length; i++) { - if ((i / 8) & 1) - (*key2)[i % 8] ^= (str[i] << 1); - else - (*key1)[i % 8] ^= (str[i] << 1); - } - } -#else /* MIT COMPATIBLE */ for (i = 0; i < length; i++) { register unsigned char j = str[i]; @@ -84,7 +65,6 @@ void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2) } if (length <= 8) memcpy(key2, key1, 8); -#endif DES_set_odd_parity(key1); DES_set_odd_parity(key2); DES_set_key_unchecked(key1, &ks); diff --git a/crypto/dh/build.info b/crypto/dh/build.info index dba93066..b19ff6db 100644 --- a/crypto/dh/build.info +++ b/crypto/dh/build.info @@ -1,4 +1,5 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ dh_asn1.c dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh_depr.c \ - dh_ameth.c dh_pmeth.c dh_prn.c dh_rfc5114.c dh_kdf.c dh_meth.c + dh_ameth.c dh_pmeth.c dh_prn.c dh_rfc5114.c dh_kdf.c dh_meth.c \ + dh_rfc7919.c diff --git a/crypto/dh/dh_ameth.c b/crypto/dh/dh_ameth.c index cd77867d..05a1d422 100644 --- a/crypto/dh/dh_ameth.c +++ b/crypto/dh/dh_ameth.c @@ -326,7 +326,7 @@ static int do_dh_print(BIO *bp, const DH *x, int indent, int ptype) goto err; } if (BIO_write(bp, "\n", 1) <= 0) - return (0); + return 0; } if (x->counter && !ASN1_bn_print(bp, "counter:", x->counter, NULL, indent)) goto err; @@ -346,7 +346,7 @@ static int do_dh_print(BIO *bp, const DH *x, int indent, int ptype) static int int_dh_size(const EVP_PKEY *pkey) { - return (DH_size(pkey->pkey.dh)); + return DH_size(pkey->pkey.dh); } static int dh_bits(const EVP_PKEY *pkey) @@ -374,13 +374,19 @@ static int dh_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) static int int_dh_bn_cpy(BIGNUM **dst, const BIGNUM *src) { BIGNUM *a; - if (src) { - a = BN_dup(src); - if (!a) - return 0; - } else + + /* + * If source is read only just copy the pointer, so + * we don't have to reallocate it. + */ + if (src == NULL) a = NULL; - BN_free(*dst); + else if (BN_get_flags(src, BN_FLG_STATIC_DATA) + && !BN_get_flags(src, BN_FLG_MALLOCED)) + a = (BIGNUM *)src; + else if ((a = BN_dup(src)) == NULL) + return 0; + BN_clear_free(*dst); *dst = a; return 1; } @@ -503,6 +509,25 @@ static int dh_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) } +static int dh_pkey_public_check(const EVP_PKEY *pkey) +{ + DH *dh = pkey->pkey.dh; + + if (dh->pub_key == NULL) { + DHerr(DH_F_DH_PKEY_PUBLIC_CHECK, DH_R_MISSING_PUBKEY); + return 0; + } + + return DH_check_pub_key_ex(dh, dh->pub_key); +} + +static int dh_pkey_param_check(const EVP_PKEY *pkey) +{ + DH *dh = pkey->pkey.dh; + + return DH_check_ex(dh); +} + const EVP_PKEY_ASN1_METHOD dh_asn1_meth = { EVP_PKEY_DH, EVP_PKEY_DH, @@ -533,7 +558,13 @@ const EVP_PKEY_ASN1_METHOD dh_asn1_meth = { 0, int_dh_free, - 0 + 0, + + 0, 0, 0, 0, 0, + + 0, + dh_pkey_public_check, + dh_pkey_param_check }; const EVP_PKEY_ASN1_METHOD dhx_asn1_meth = { @@ -566,7 +597,13 @@ const EVP_PKEY_ASN1_METHOD dhx_asn1_meth = { 0, int_dh_free, - dh_pkey_ctrl + dh_pkey_ctrl, + + 0, 0, 0, 0, 0, + + 0, + dh_pkey_public_check, + dh_pkey_param_check }; #ifndef OPENSSL_NO_CMS diff --git a/crypto/dh/dh_asn1.c b/crypto/dh/dh_asn1.c index 7c72fd64..1a40633b 100644 --- a/crypto/dh/dh_asn1.c +++ b/crypto/dh/dh_asn1.c @@ -34,7 +34,7 @@ static int dh_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, ASN1_SEQUENCE_cb(DHparams, dh_cb) = { ASN1_SIMPLE(DH, p, BIGNUM), ASN1_SIMPLE(DH, g, BIGNUM), - ASN1_OPT(DH, length, ZLONG), + ASN1_OPT_EMBED(DH, length, ZINT32), } ASN1_SEQUENCE_END_cb(DH, DHparams) IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DH, DHparams, DHparams) diff --git a/crypto/dh/dh_check.c b/crypto/dh/dh_check.c index 3b0fa590..fc455771 100644 --- a/crypto/dh/dh_check.c +++ b/crypto/dh/dh_check.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -18,6 +18,19 @@ * p is odd * 1 < g < p - 1 */ +int DH_check_params_ex(const DH *dh) +{ + int errflags = 0; + + (void)DH_check_params(dh, &errflags); + + if ((errflags & DH_CHECK_P_NOT_PRIME) != 0) + DHerr(DH_F_DH_CHECK_PARAMS_EX, DH_R_CHECK_P_NOT_PRIME); + if ((errflags & DH_NOT_SUITABLE_GENERATOR) != 0) + DHerr(DH_F_DH_CHECK_PARAMS_EX, DH_R_NOT_SUITABLE_GENERATOR); + + return errflags == 0; +} int DH_check_params(const DH *dh, int *ret) { @@ -49,7 +62,7 @@ int DH_check_params(const DH *dh, int *ret) BN_CTX_end(ctx); BN_CTX_free(ctx); } - return (ok); + return ok; } /*- @@ -61,6 +74,29 @@ int DH_check_params(const DH *dh, int *ret) * for 5, p mod 10 == 3 or 7 * should hold. */ +int DH_check_ex(const DH *dh) +{ + int errflags = 0; + + (void)DH_check(dh, &errflags); + + if ((errflags & DH_NOT_SUITABLE_GENERATOR) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_NOT_SUITABLE_GENERATOR); + if ((errflags & DH_CHECK_Q_NOT_PRIME) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_CHECK_Q_NOT_PRIME); + if ((errflags & DH_CHECK_INVALID_Q_VALUE) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_CHECK_INVALID_Q_VALUE); + if ((errflags & DH_CHECK_INVALID_J_VALUE) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_CHECK_INVALID_J_VALUE); + if ((errflags & DH_UNABLE_TO_CHECK_GENERATOR) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_UNABLE_TO_CHECK_GENERATOR); + if ((errflags & DH_CHECK_P_NOT_PRIME) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_CHECK_P_NOT_PRIME); + if ((errflags & DH_CHECK_P_NOT_SAFE_PRIME) != 0) + DHerr(DH_F_DH_CHECK_EX, DH_R_CHECK_P_NOT_SAFE_PRIME); + + return errflags == 0; +} int DH_check(const DH *dh, int *ret) { @@ -75,8 +111,6 @@ int DH_check(const DH *dh, int *ret) goto err; BN_CTX_start(ctx); t1 = BN_CTX_get(ctx); - if (t1 == NULL) - goto err; t2 = BN_CTX_get(ctx); if (t2 == NULL) goto err; @@ -132,7 +166,7 @@ int DH_check(const DH *dh, int *ret) r = BN_is_prime_ex(t1, BN_prime_checks, ctx, NULL); if (r < 0) goto err; - if (!r) + if (!r) *ret |= DH_CHECK_P_NOT_SAFE_PRIME; } ok = 1; @@ -141,7 +175,23 @@ int DH_check(const DH *dh, int *ret) BN_CTX_end(ctx); BN_CTX_free(ctx); } - return (ok); + return ok; +} + +int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key) +{ + int errflags = 0; + + (void)DH_check(dh, &errflags); + + if ((errflags & DH_CHECK_PUBKEY_TOO_SMALL) != 0) + DHerr(DH_F_DH_CHECK_PUB_KEY_EX, DH_R_CHECK_PUBKEY_TOO_SMALL); + if ((errflags & DH_CHECK_PUBKEY_TOO_LARGE) != 0) + DHerr(DH_F_DH_CHECK_PUB_KEY_EX, DH_R_CHECK_PUBKEY_TOO_LARGE); + if ((errflags & DH_CHECK_PUBKEY_INVALID) != 0) + DHerr(DH_F_DH_CHECK_PUB_KEY_EX, DH_R_CHECK_PUBKEY_INVALID); + + return errflags == 0; } int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) @@ -179,5 +229,5 @@ int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) BN_CTX_end(ctx); BN_CTX_free(ctx); } - return (ok); + return ok; } diff --git a/crypto/dh/dh_err.c b/crypto/dh/dh_err.c index 4e21f284..bbedab59 100644 --- a/crypto/dh/dh_err.c +++ b/crypto/dh/dh_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,53 +8,81 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_DH,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_DH,0,reason) - -static ERR_STRING_DATA DH_str_functs[] = { - {ERR_FUNC(DH_F_COMPUTE_KEY), "compute_key"}, - {ERR_FUNC(DH_F_DHPARAMS_PRINT_FP), "DHparams_print_fp"}, - {ERR_FUNC(DH_F_DH_BUILTIN_GENPARAMS), "dh_builtin_genparams"}, - {ERR_FUNC(DH_F_DH_CMS_DECRYPT), "dh_cms_decrypt"}, - {ERR_FUNC(DH_F_DH_CMS_SET_PEERKEY), "dh_cms_set_peerkey"}, - {ERR_FUNC(DH_F_DH_CMS_SET_SHARED_INFO), "dh_cms_set_shared_info"}, - {ERR_FUNC(DH_F_DH_METH_DUP), "DH_meth_dup"}, - {ERR_FUNC(DH_F_DH_METH_NEW), "DH_meth_new"}, - {ERR_FUNC(DH_F_DH_METH_SET1_NAME), "DH_meth_set1_name"}, - {ERR_FUNC(DH_F_DH_NEW_METHOD), "DH_new_method"}, - {ERR_FUNC(DH_F_DH_PARAM_DECODE), "dh_param_decode"}, - {ERR_FUNC(DH_F_DH_PRIV_DECODE), "dh_priv_decode"}, - {ERR_FUNC(DH_F_DH_PRIV_ENCODE), "dh_priv_encode"}, - {ERR_FUNC(DH_F_DH_PUB_DECODE), "dh_pub_decode"}, - {ERR_FUNC(DH_F_DH_PUB_ENCODE), "dh_pub_encode"}, - {ERR_FUNC(DH_F_DO_DH_PRINT), "do_dh_print"}, - {ERR_FUNC(DH_F_GENERATE_KEY), "generate_key"}, - {ERR_FUNC(DH_F_PKEY_DH_DERIVE), "pkey_dh_derive"}, - {ERR_FUNC(DH_F_PKEY_DH_KEYGEN), "pkey_dh_keygen"}, +static const ERR_STRING_DATA DH_str_functs[] = { + {ERR_PACK(ERR_LIB_DH, DH_F_COMPUTE_KEY, 0), "compute_key"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DHPARAMS_PRINT_FP, 0), "DHparams_print_fp"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_BUILTIN_GENPARAMS, 0), + "dh_builtin_genparams"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_EX, 0), "DH_check_ex"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PARAMS_EX, 0), "DH_check_params_ex"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PUB_KEY_EX, 0), "DH_check_pub_key_ex"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CMS_DECRYPT, 0), "dh_cms_decrypt"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CMS_SET_PEERKEY, 0), "dh_cms_set_peerkey"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CMS_SET_SHARED_INFO, 0), + "dh_cms_set_shared_info"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_METH_DUP, 0), "DH_meth_dup"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_METH_NEW, 0), "DH_meth_new"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_METH_SET1_NAME, 0), "DH_meth_set1_name"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_NEW_BY_NID, 0), "DH_new_by_nid"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_NEW_METHOD, 0), "DH_new_method"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_PARAM_DECODE, 0), "dh_param_decode"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_PKEY_PUBLIC_CHECK, 0), + "dh_pkey_public_check"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_PRIV_DECODE, 0), "dh_priv_decode"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_PRIV_ENCODE, 0), "dh_priv_encode"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_PUB_DECODE, 0), "dh_pub_decode"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_PUB_ENCODE, 0), "dh_pub_encode"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DO_DH_PRINT, 0), "do_dh_print"}, + {ERR_PACK(ERR_LIB_DH, DH_F_GENERATE_KEY, 0), "generate_key"}, + {ERR_PACK(ERR_LIB_DH, DH_F_PKEY_DH_CTRL_STR, 0), "pkey_dh_ctrl_str"}, + {ERR_PACK(ERR_LIB_DH, DH_F_PKEY_DH_DERIVE, 0), "pkey_dh_derive"}, + {ERR_PACK(ERR_LIB_DH, DH_F_PKEY_DH_KEYGEN, 0), "pkey_dh_keygen"}, {0, NULL} }; -static ERR_STRING_DATA DH_str_reasons[] = { - {ERR_REASON(DH_R_BAD_GENERATOR), "bad generator"}, - {ERR_REASON(DH_R_BN_DECODE_ERROR), "bn decode error"}, - {ERR_REASON(DH_R_BN_ERROR), "bn error"}, - {ERR_REASON(DH_R_DECODE_ERROR), "decode error"}, - {ERR_REASON(DH_R_INVALID_PUBKEY), "invalid public key"}, - {ERR_REASON(DH_R_KDF_PARAMETER_ERROR), "kdf parameter error"}, - {ERR_REASON(DH_R_KEYS_NOT_SET), "keys not set"}, - {ERR_REASON(DH_R_MODULUS_TOO_LARGE), "modulus too large"}, - {ERR_REASON(DH_R_NO_PARAMETERS_SET), "no parameters set"}, - {ERR_REASON(DH_R_NO_PRIVATE_VALUE), "no private value"}, - {ERR_REASON(DH_R_PARAMETER_ENCODING_ERROR), "parameter encoding error"}, - {ERR_REASON(DH_R_PEER_KEY_ERROR), "peer key error"}, - {ERR_REASON(DH_R_SHARED_INFO_ERROR), "shared info error"}, +static const ERR_STRING_DATA DH_str_reasons[] = { + {ERR_PACK(ERR_LIB_DH, 0, DH_R_BAD_GENERATOR), "bad generator"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_BN_DECODE_ERROR), "bn decode error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_BN_ERROR), "bn error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_INVALID_J_VALUE), + "check invalid j value"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_INVALID_Q_VALUE), + "check invalid q value"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_PUBKEY_INVALID), + "check pubkey invalid"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_PUBKEY_TOO_LARGE), + "check pubkey too large"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_PUBKEY_TOO_SMALL), + "check pubkey too small"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_P_NOT_PRIME), "check p not prime"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_P_NOT_SAFE_PRIME), + "check p not safe prime"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_CHECK_Q_NOT_PRIME), "check q not prime"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_DECODE_ERROR), "decode error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_INVALID_PARAMETER_NAME), + "invalid parameter name"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_INVALID_PARAMETER_NID), + "invalid parameter nid"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_INVALID_PUBKEY), "invalid public key"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_KDF_PARAMETER_ERROR), "kdf parameter error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_KEYS_NOT_SET), "keys not set"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_MISSING_PUBKEY), "missing pubkey"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_MODULUS_TOO_LARGE), "modulus too large"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_NOT_SUITABLE_GENERATOR), + "not suitable generator"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_NO_PARAMETERS_SET), "no parameters set"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_NO_PRIVATE_VALUE), "no private value"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_PARAMETER_ENCODING_ERROR), + "parameter encoding error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_PEER_KEY_ERROR), "peer key error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_SHARED_INFO_ERROR), "shared info error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_UNABLE_TO_CHECK_GENERATOR), + "unable to check generator"}, {0, NULL} }; @@ -63,10 +91,9 @@ static ERR_STRING_DATA DH_str_reasons[] = { int ERR_load_DH_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(DH_str_functs[0].error) == NULL) { - ERR_load_strings(0, DH_str_functs); - ERR_load_strings(0, DH_str_reasons); + ERR_load_strings_const(DH_str_functs); + ERR_load_strings_const(DH_str_reasons); } #endif return 1; diff --git a/crypto/dh/dh_gen.c b/crypto/dh/dh_gen.c index 27ecb983..59137e0f 100644 --- a/crypto/dh/dh_gen.c +++ b/crypto/dh/dh_gen.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -43,7 +43,7 @@ int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, * for 3, p mod 12 == 5 <<<<< does not work for safe primes. * for 5, p mod 10 == 3 or 7 * - * Thanks to Phil Karn for the pointers about the + * Thanks to Phil Karn for the pointers about the * special generators and for answering some of my questions. * * I've implemented the second simple method :-). @@ -68,7 +68,7 @@ static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_CTX_start(ctx); t1 = BN_CTX_get(ctx); t2 = BN_CTX_get(ctx); - if (t1 == NULL || t2 == NULL) + if (t2 == NULL) goto err; /* Make sure 'ret' has the necessary elements */ diff --git a/crypto/dh/dh_kdf.c b/crypto/dh/dh_kdf.c index 2782eeee..e17122bc 100644 --- a/crypto/dh/dh_kdf.c +++ b/crypto/dh/dh_kdf.c @@ -7,7 +7,7 @@ * https://www.openssl.org/source/license.html */ -#include +#include "e_os.h" #ifndef OPENSSL_NO_CMS #include diff --git a/crypto/dh/dh_key.c b/crypto/dh/dh_key.c index fce9ff47..6901548e 100644 --- a/crypto/dh/dh_key.c +++ b/crypto/dh/dh_key.c @@ -111,14 +111,14 @@ static int generate_key(DH *dh) if (generate_new_key) { if (dh->q) { do { - if (!BN_rand_range(priv_key, dh->q)) + if (!BN_priv_rand_range(priv_key, dh->q)) goto err; } while (BN_is_zero(priv_key) || BN_is_one(priv_key)); } else { /* secret exponent length */ l = dh->length ? dh->length : BN_num_bits(dh->p) - 1; - if (!BN_rand(priv_key, l, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) + if (!BN_priv_rand(priv_key, l, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY)) goto err; } } @@ -150,7 +150,7 @@ static int generate_key(DH *dh) if (priv_key != dh->priv_key) BN_free(priv_key); BN_CTX_free(ctx); - return (ok); + return ok; } static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) @@ -204,7 +204,7 @@ static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) BN_CTX_end(ctx); BN_CTX_free(ctx); } - return (ret); + return ret; } static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, @@ -217,11 +217,11 @@ static int dh_bn_mod_exp(const DH *dh, BIGNUM *r, static int dh_init(DH *dh) { dh->flags |= DH_FLAG_CACHE_MONT_P; - return (1); + return 1; } static int dh_finish(DH *dh) { BN_MONT_CTX_free(dh->method_mont_p); - return (1); + return 1; } diff --git a/crypto/dh/dh_lib.c b/crypto/dh/dh_lib.c index 716f4a4b..a33f3246 100644 --- a/crypto/dh/dh_lib.c +++ b/crypto/dh/dh_lib.c @@ -9,6 +9,7 @@ #include #include "internal/cryptlib.h" +#include "internal/refcount.h" #include #include "dh_locl.h" #include @@ -97,7 +98,7 @@ void DH_free(DH *r) if (r == NULL) return; - CRYPTO_atomic_add(&r->references, -1, &i, r->lock); + CRYPTO_DOWN_REF(&r->references, &i, r->lock); REF_PRINT_COUNT("DH", r); if (i > 0) return; @@ -128,7 +129,7 @@ int DH_up_ref(DH *r) { int i; - if (CRYPTO_atomic_add(&r->references, 1, &i, r->lock) <= 0) + if (CRYPTO_UP_REF(&r->references, &i, r->lock) <= 0) return 0; REF_PRINT_COUNT("DH", r); @@ -138,12 +139,12 @@ int DH_up_ref(DH *r) int DH_set_ex_data(DH *d, int idx, void *arg) { - return (CRYPTO_set_ex_data(&d->ex_data, idx, arg)); + return CRYPTO_set_ex_data(&d->ex_data, idx, arg); } void *DH_get_ex_data(DH *d, int idx) { - return (CRYPTO_get_ex_data(&d->ex_data, idx)); + return CRYPTO_get_ex_data(&d->ex_data, idx); } int DH_bits(const DH *dh) @@ -153,7 +154,7 @@ int DH_bits(const DH *dh) int DH_size(const DH *dh) { - return (BN_num_bytes(dh->p)); + return BN_num_bytes(dh->p); } int DH_security_bits(const DH *dh) diff --git a/crypto/dh/dh_locl.h b/crypto/dh/dh_locl.h index 19301c31..0a8391a6 100644 --- a/crypto/dh/dh_locl.h +++ b/crypto/dh/dh_locl.h @@ -8,6 +8,7 @@ */ #include +#include "internal/refcount.h" struct dh_st { /* @@ -18,7 +19,7 @@ struct dh_st { int version; BIGNUM *p; BIGNUM *g; - long length; /* optional */ + int32_t length; /* optional */ BIGNUM *pub_key; /* g^x % p */ BIGNUM *priv_key; /* x */ int flags; @@ -29,7 +30,7 @@ struct dh_st { unsigned char *seed; int seedlen; BIGNUM *counter; - int references; + CRYPTO_REF_COUNT references; CRYPTO_EX_DATA ex_data; const DH_METHOD *meth; ENGINE *engine; diff --git a/crypto/dh/dh_pmeth.c b/crypto/dh/dh_pmeth.c index c3e03c7a..bd8b8cc6 100644 --- a/crypto/dh/dh_pmeth.c +++ b/crypto/dh/dh_pmeth.c @@ -26,9 +26,11 @@ typedef struct { int generator; int use_dsa; int subprime_len; + int pad; /* message digest used for parameter generation */ const EVP_MD *md; int rfc5114_param; + int param_nid; /* Keygen callback info */ int gentmp[2]; /* KDF (if any) to use for DH */ @@ -85,8 +87,10 @@ static int pkey_dh_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) dctx->subprime_len = sctx->subprime_len; dctx->generator = sctx->generator; dctx->use_dsa = sctx->use_dsa; + dctx->pad = sctx->pad; dctx->md = sctx->md; dctx->rfc5114_param = sctx->rfc5114_param; + dctx->param_nid = sctx->param_nid; dctx->kdf_type = sctx->kdf_type; dctx->kdf_oid = OBJ_dup(sctx->kdf_oid); @@ -119,6 +123,10 @@ static int pkey_dh_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) dctx->subprime_len = p1; return 1; + case EVP_PKEY_CTRL_DH_PAD: + dctx->pad = p1; + return 1; + case EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR: if (dctx->use_dsa) return -2; @@ -137,11 +145,17 @@ static int pkey_dh_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) return 1; case EVP_PKEY_CTRL_DH_RFC5114: - if (p1 < 1 || p1 > 3) + if (p1 < 1 || p1 > 3 || dctx->param_nid != NID_undef) return -2; dctx->rfc5114_param = p1; return 1; + case EVP_PKEY_CTRL_DH_NID: + if (p1 <= 0 || dctx->rfc5114_param != 0) + return -2; + dctx->param_nid = p1; + return 1; + case EVP_PKEY_CTRL_PEER_KEY: /* Default behaviour is OK */ return 1; @@ -221,6 +235,17 @@ static int pkey_dh_ctrl_str(EVP_PKEY_CTX *ctx, dctx->rfc5114_param = len; return 1; } + if (strcmp(type, "dh_param") == 0) { + DH_PKEY_CTX *dctx = ctx->data; + int nid = OBJ_sn2nid(value); + + if (nid == NID_undef) { + DHerr(DH_F_PKEY_DH_CTRL_STR, DH_R_INVALID_PARAMETER_NAME); + return -2; + } + dctx->param_nid = nid; + return 1; + } if (strcmp(type, "dh_paramgen_generator") == 0) { int len; len = atoi(value); @@ -236,6 +261,11 @@ static int pkey_dh_ctrl_str(EVP_PKEY_CTX *ctx, typ = atoi(value); return EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ); } + if (strcmp(type, "dh_pad") == 0) { + int pad; + pad = atoi(value); + return EVP_PKEY_CTX_set_dh_pad(ctx, pad); + } return -2; } @@ -320,6 +350,13 @@ static int pkey_dh_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) return 1; } + if (dctx->param_nid != 0) { + if ((dh = DH_new_by_nid(dctx->param_nid)) == NULL) + return 0; + EVP_PKEY_assign(pkey, EVP_PKEY_DH, dh); + return 1; + } + if (ctx->pkey_gencb) { pcb = BN_GENCB_new(); if (pcb == NULL) @@ -359,17 +396,22 @@ static int pkey_dh_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) static int pkey_dh_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { + DH_PKEY_CTX *dctx = ctx->data; DH *dh = NULL; - if (ctx->pkey == NULL) { + + if (ctx->pkey == NULL && dctx->param_nid == 0) { DHerr(DH_F_PKEY_DH_KEYGEN, DH_R_NO_PARAMETERS_SET); return 0; } - dh = DH_new(); + if (dctx->param_nid != 0) + dh = DH_new_by_nid(dctx->param_nid); + else + dh = DH_new(); if (dh == NULL) return 0; EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, dh); /* Note: if error return, pkey is freed by parent routine */ - if (!EVP_PKEY_copy_parameters(pkey, ctx->pkey)) + if (ctx->pkey != NULL && !EVP_PKEY_copy_parameters(pkey, ctx->pkey)) return 0; return DH_generate_key(pkey->pkey.dh); } @@ -392,7 +434,10 @@ static int pkey_dh_derive(EVP_PKEY_CTX *ctx, unsigned char *key, *keylen = DH_size(dh); return 1; } - ret = DH_compute_key(key, dhpub, dh); + if (dctx->pad) + ret = DH_compute_key_padded(key, dhpub, dh); + else + ret = DH_compute_key(key, dhpub, dh); if (ret < 0) return ret; *keylen = ret; diff --git a/crypto/dh/dh_prn.c b/crypto/dh/dh_prn.c index 283fb0f4..aab1733d 100644 --- a/crypto/dh/dh_prn.c +++ b/crypto/dh/dh_prn.c @@ -20,11 +20,11 @@ int DHparams_print_fp(FILE *fp, const DH *x) if ((b = BIO_new(BIO_s_file())) == NULL) { DHerr(DH_F_DHPARAMS_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = DHparams_print(b, x); BIO_free(b); - return (ret); + return ret; } #endif diff --git a/crypto/dh/dh_rfc7919.c b/crypto/dh/dh_rfc7919.c new file mode 100644 index 00000000..a54b468e --- /dev/null +++ b/crypto/dh/dh_rfc7919.c @@ -0,0 +1,74 @@ +/* + * 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 + */ + +#include +#include "internal/cryptlib.h" +#include "dh_locl.h" +#include +#include +#include "internal/bn_dh.h" + +static DH *dh_param_init(const BIGNUM *p, int32_t nbits) +{ + DH *dh = DH_new(); + if (dh == NULL) + return NULL; + dh->p = (BIGNUM *)p; + dh->g = (BIGNUM *)&_bignum_const_2; + dh->length = nbits; + return dh; +} + +DH *DH_new_by_nid(int nid) +{ + switch (nid) { + case NID_ffdhe2048: + return dh_param_init(&_bignum_ffdhe2048_p, 225); + case NID_ffdhe3072: + return dh_param_init(&_bignum_ffdhe3072_p, 275); + case NID_ffdhe4096: + return dh_param_init(&_bignum_ffdhe4096_p, 325); + case NID_ffdhe6144: + return dh_param_init(&_bignum_ffdhe6144_p, 375); + case NID_ffdhe8192: + return dh_param_init(&_bignum_ffdhe8192_p, 400); + default: + DHerr(DH_F_DH_NEW_BY_NID, DH_R_INVALID_PARAMETER_NID); + return NULL; + } +} + +int DH_get_nid(const DH *dh) +{ + int nid; + + if (BN_get_word(dh->g) != 2) + return NID_undef; + if (!BN_cmp(dh->p, &_bignum_ffdhe2048_p)) + nid = NID_ffdhe2048; + else if (!BN_cmp(dh->p, &_bignum_ffdhe3072_p)) + nid = NID_ffdhe3072; + else if (!BN_cmp(dh->p, &_bignum_ffdhe4096_p)) + nid = NID_ffdhe4096; + else if (!BN_cmp(dh->p, &_bignum_ffdhe6144_p)) + nid = NID_ffdhe6144; + else if (!BN_cmp(dh->p, &_bignum_ffdhe8192_p)) + nid = NID_ffdhe8192; + else + return NID_undef; + if (dh->q != NULL) { + BIGNUM *q = BN_dup(dh->p); + + /* Check q = p * 2 + 1 we already know q is odd, so just shift right */ + if (q == NULL || !BN_rshift1(q, q) || !BN_cmp(dh->q, q)) + nid = NID_undef; + BN_free(q); + } + return nid; +} diff --git a/crypto/dllmain.c b/crypto/dllmain.c index 91904aad..81bcb2d0 100644 --- a/crypto/dllmain.c +++ b/crypto/dllmain.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,6 +7,7 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include "internal/cryptlib_int.h" #if defined(_WIN32) || defined(__CYGWIN__) @@ -54,7 +55,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) case DLL_PROCESS_DETACH: break; } - return (TRUE); + return TRUE; } #endif diff --git a/crypto/dsa/dsa_ameth.c b/crypto/dsa/dsa_ameth.c index d4e4066c..9c5b8aa0 100644 --- a/crypto/dsa/dsa_ameth.c +++ b/crypto/dsa/dsa_ameth.c @@ -254,7 +254,7 @@ static int dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) static int int_dsa_size(const EVP_PKEY *pkey) { - return (DSA_size(pkey->pkey.dsa)); + return DSA_size(pkey->pkey.dsa); } static int dsa_bits(const EVP_PKEY *pkey) @@ -369,7 +369,7 @@ static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype) goto err; ret = 1; err: - return (ret); + return ret; } static int dsa_param_decode(EVP_PKEY *pkey, diff --git a/crypto/dsa/dsa_asn1.c b/crypto/dsa/dsa_asn1.c index 551c1075..6499e87e 100644 --- a/crypto/dsa/dsa_asn1.c +++ b/crypto/dsa/dsa_asn1.c @@ -75,7 +75,7 @@ static int dsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, } ASN1_SEQUENCE_cb(DSAPrivateKey, dsa_cb) = { - ASN1_SIMPLE(DSA, version, LONG), + ASN1_EMBED(DSA, version, INT32), ASN1_SIMPLE(DSA, p, BIGNUM), ASN1_SIMPLE(DSA, q, BIGNUM), ASN1_SIMPLE(DSA, g, BIGNUM), @@ -111,15 +111,15 @@ int DSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig, unsigned int *siglen, DSA *dsa) { DSA_SIG *s; - RAND_seed(dgst, dlen); + s = DSA_do_sign(dgst, dlen, dsa); if (s == NULL) { *siglen = 0; - return (0); + return 0; } *siglen = i2d_DSA_SIG(s, &sig); DSA_SIG_free(s); - return (1); + return 1; } /* data has already been hashed (probably with SHA or SHA-1). */ @@ -140,7 +140,7 @@ int DSA_verify(int type, const unsigned char *dgst, int dgst_len, s = DSA_SIG_new(); if (s == NULL) - return (ret); + return ret; if (d2i_DSA_SIG(&s, &p, siglen) == NULL) goto err; /* Ensure signature uses DER and doesn't have trailing garbage */ @@ -151,5 +151,5 @@ int DSA_verify(int type, const unsigned char *dgst, int dgst_len, err: OPENSSL_clear_free(der, derlen); DSA_SIG_free(s); - return (ret); + return ret; } diff --git a/crypto/dsa/dsa_err.c b/crypto/dsa/dsa_err.c index b8f0af46..168dadf0 100644 --- a/crypto/dsa/dsa_err.c +++ b/crypto/dsa/dsa_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,56 +8,56 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_DSA,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_DSA,0,reason) - -static ERR_STRING_DATA DSA_str_functs[] = { - {ERR_FUNC(DSA_F_DSAPARAMS_PRINT), "DSAparams_print"}, - {ERR_FUNC(DSA_F_DSAPARAMS_PRINT_FP), "DSAparams_print_fp"}, - {ERR_FUNC(DSA_F_DSA_BUILTIN_PARAMGEN), "dsa_builtin_paramgen"}, - {ERR_FUNC(DSA_F_DSA_BUILTIN_PARAMGEN2), "dsa_builtin_paramgen2"}, - {ERR_FUNC(DSA_F_DSA_DO_SIGN), "DSA_do_sign"}, - {ERR_FUNC(DSA_F_DSA_DO_VERIFY), "DSA_do_verify"}, - {ERR_FUNC(DSA_F_DSA_METH_DUP), "DSA_meth_dup"}, - {ERR_FUNC(DSA_F_DSA_METH_NEW), "DSA_meth_new"}, - {ERR_FUNC(DSA_F_DSA_METH_SET1_NAME), "DSA_meth_set1_name"}, - {ERR_FUNC(DSA_F_DSA_NEW_METHOD), "DSA_new_method"}, - {ERR_FUNC(DSA_F_DSA_PARAM_DECODE), "dsa_param_decode"}, - {ERR_FUNC(DSA_F_DSA_PRINT_FP), "DSA_print_fp"}, - {ERR_FUNC(DSA_F_DSA_PRIV_DECODE), "dsa_priv_decode"}, - {ERR_FUNC(DSA_F_DSA_PRIV_ENCODE), "dsa_priv_encode"}, - {ERR_FUNC(DSA_F_DSA_PUB_DECODE), "dsa_pub_decode"}, - {ERR_FUNC(DSA_F_DSA_PUB_ENCODE), "dsa_pub_encode"}, - {ERR_FUNC(DSA_F_DSA_SIGN), "DSA_sign"}, - {ERR_FUNC(DSA_F_DSA_SIGN_SETUP), "DSA_sign_setup"}, - {ERR_FUNC(DSA_F_DSA_SIG_NEW), "DSA_SIG_new"}, - {ERR_FUNC(DSA_F_OLD_DSA_PRIV_DECODE), "old_dsa_priv_decode"}, - {ERR_FUNC(DSA_F_PKEY_DSA_CTRL), "pkey_dsa_ctrl"}, - {ERR_FUNC(DSA_F_PKEY_DSA_KEYGEN), "pkey_dsa_keygen"}, +static const ERR_STRING_DATA DSA_str_functs[] = { + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSAPARAMS_PRINT, 0), "DSAparams_print"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSAPARAMS_PRINT_FP, 0), "DSAparams_print_fp"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_BUILTIN_PARAMGEN, 0), + "dsa_builtin_paramgen"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_BUILTIN_PARAMGEN2, 0), + "dsa_builtin_paramgen2"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_DO_SIGN, 0), "DSA_do_sign"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_DO_VERIFY, 0), "DSA_do_verify"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_METH_DUP, 0), "DSA_meth_dup"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_METH_NEW, 0), "DSA_meth_new"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_METH_SET1_NAME, 0), "DSA_meth_set1_name"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_NEW_METHOD, 0), "DSA_new_method"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_PARAM_DECODE, 0), "dsa_param_decode"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_PRINT_FP, 0), "DSA_print_fp"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_PRIV_DECODE, 0), "dsa_priv_decode"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_PRIV_ENCODE, 0), "dsa_priv_encode"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_PUB_DECODE, 0), "dsa_pub_decode"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_PUB_ENCODE, 0), "dsa_pub_encode"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_SIGN, 0), "DSA_sign"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_SIGN_SETUP, 0), "DSA_sign_setup"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_DSA_SIG_NEW, 0), "DSA_SIG_new"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_OLD_DSA_PRIV_DECODE, 0), + "old_dsa_priv_decode"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_PKEY_DSA_CTRL, 0), "pkey_dsa_ctrl"}, + {ERR_PACK(ERR_LIB_DSA, DSA_F_PKEY_DSA_KEYGEN, 0), "pkey_dsa_keygen"}, {0, NULL} }; -static ERR_STRING_DATA DSA_str_reasons[] = { - {ERR_REASON(DSA_R_BAD_Q_VALUE), "bad q value"}, - {ERR_REASON(DSA_R_BN_DECODE_ERROR), "bn decode error"}, - {ERR_REASON(DSA_R_BN_ERROR), "bn error"}, - {ERR_REASON(DSA_R_DECODE_ERROR), "decode error"}, - {ERR_REASON(DSA_R_INVALID_DIGEST_TYPE), "invalid digest type"}, - {ERR_REASON(DSA_R_INVALID_PARAMETERS), "invalid parameters"}, - {ERR_REASON(DSA_R_MISSING_PARAMETERS), "missing parameters"}, - {ERR_REASON(DSA_R_MODULUS_TOO_LARGE), "modulus too large"}, - {ERR_REASON(DSA_R_NO_PARAMETERS_SET), "no parameters set"}, - {ERR_REASON(DSA_R_PARAMETER_ENCODING_ERROR), "parameter encoding error"}, - {ERR_REASON(DSA_R_Q_NOT_PRIME), "q not prime"}, - {ERR_REASON(DSA_R_SEED_LEN_SMALL), - "seed_len is less than the length of q"}, +static const ERR_STRING_DATA DSA_str_reasons[] = { + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_BAD_Q_VALUE), "bad q value"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_BN_DECODE_ERROR), "bn decode error"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_BN_ERROR), "bn error"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_DECODE_ERROR), "decode error"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_INVALID_DIGEST_TYPE), + "invalid digest type"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_INVALID_PARAMETERS), "invalid parameters"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_MISSING_PARAMETERS), "missing parameters"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_MODULUS_TOO_LARGE), "modulus too large"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_NO_PARAMETERS_SET), "no parameters set"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_PARAMETER_ENCODING_ERROR), + "parameter encoding error"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_Q_NOT_PRIME), "q not prime"}, + {ERR_PACK(ERR_LIB_DSA, 0, DSA_R_SEED_LEN_SMALL), + "seed_len is less than the length of q"}, {0, NULL} }; @@ -66,10 +66,9 @@ static ERR_STRING_DATA DSA_str_reasons[] = { int ERR_load_DSA_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(DSA_str_functs[0].error) == NULL) { - ERR_load_strings(0, DSA_str_functs); - ERR_load_strings(0, DSA_str_reasons); + ERR_load_strings_const(DSA_str_functs); + ERR_load_strings_const(DSA_str_reasons); } #endif return 1; diff --git a/crypto/dsa/dsa_key.c b/crypto/dsa/dsa_key.c index 31442b1c..a48af584 100644 --- a/crypto/dsa/dsa_key.c +++ b/crypto/dsa/dsa_key.c @@ -38,7 +38,7 @@ static int dsa_builtin_keygen(DSA *dsa) priv_key = dsa->priv_key; do - if (!BN_rand_range(priv_key, dsa->q)) + if (!BN_priv_rand_range(priv_key, dsa->q)) goto err; while (BN_is_zero(priv_key)) ; @@ -73,5 +73,5 @@ static int dsa_builtin_keygen(DSA *dsa) if (priv_key != dsa->priv_key) BN_free(priv_key); BN_CTX_free(ctx); - return (ok); + return ok; } diff --git a/crypto/dsa/dsa_lib.c b/crypto/dsa/dsa_lib.c index 9598846e..e730e8e6 100644 --- a/crypto/dsa/dsa_lib.c +++ b/crypto/dsa/dsa_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,10 +7,9 @@ * https://www.openssl.org/source/license.html */ -/* Original version from Steven Schoch */ - #include #include "internal/cryptlib.h" +#include "internal/refcount.h" #include #include "dsa_locl.h" #include @@ -106,7 +105,7 @@ void DSA_free(DSA *r) if (r == NULL) return; - CRYPTO_atomic_add(&r->references, -1, &i, r->lock); + CRYPTO_DOWN_REF(&r->references, &i, r->lock); REF_PRINT_COUNT("DSA", r); if (i > 0) return; @@ -134,7 +133,7 @@ int DSA_up_ref(DSA *r) { int i; - if (CRYPTO_atomic_add(&r->references, 1, &i, r->lock) <= 0) + if (CRYPTO_UP_REF(&r->references, &i, r->lock) <= 0) return 0; REF_PRINT_COUNT("DSA", r); @@ -161,17 +160,17 @@ int DSA_size(const DSA *r) i = i2d_ASN1_INTEGER(&bs, NULL); i += i; /* r and s */ ret = ASN1_object_size(1, i, V_ASN1_SEQUENCE); - return (ret); + return ret; } int DSA_set_ex_data(DSA *d, int idx, void *arg) { - return (CRYPTO_set_ex_data(&d->ex_data, idx, arg)); + return CRYPTO_set_ex_data(&d->ex_data, idx, arg); } void *DSA_get_ex_data(DSA *d, int idx) { - return (CRYPTO_get_ex_data(&d->ex_data, idx)); + return CRYPTO_get_ex_data(&d->ex_data, idx); } int DSA_security_bits(const DSA *d) diff --git a/crypto/dsa/dsa_locl.h b/crypto/dsa/dsa_locl.h index 9021fce0..a81a4b49 100644 --- a/crypto/dsa/dsa_locl.h +++ b/crypto/dsa/dsa_locl.h @@ -8,6 +8,7 @@ */ #include +#include "internal/refcount.h" struct dsa_st { /* @@ -15,7 +16,7 @@ struct dsa_st { * instead of of a EVP_PKEY */ int pad; - long version; + int32_t version; BIGNUM *p; BIGNUM *q; /* == 20 */ BIGNUM *g; @@ -24,7 +25,7 @@ struct dsa_st { int flags; /* Normally used to cache montgomery values */ BN_MONT_CTX *method_mont_p; - int references; + CRYPTO_REF_COUNT references; CRYPTO_EX_DATA ex_data; const DSA_METHOD *meth; /* functional reference if 'meth' is ENGINE-provided */ diff --git a/crypto/dsa/dsa_meth.c b/crypto/dsa/dsa_meth.c index f0188f20..51a486b2 100644 --- a/crypto/dsa/dsa_meth.c +++ b/crypto/dsa/dsa_meth.c @@ -132,7 +132,7 @@ int DSA_meth_set_sign_setup(DSA_METHOD *dsam, } int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int , DSA_SIG *, DSA *) + (const unsigned char *, int, DSA_SIG *, DSA *) { return dsam->dsa_do_verify; } diff --git a/crypto/dsa/dsa_ossl.c b/crypto/dsa/dsa_ossl.c index 7f48cf2e..d78c5f00 100644 --- a/crypto/dsa/dsa_ossl.c +++ b/crypto/dsa/dsa_ossl.c @@ -7,8 +7,6 @@ * https://www.openssl.org/source/license.html */ -/* Original version from Steven Schoch */ - #include #include "internal/cryptlib.h" #include @@ -186,7 +184,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in, if (!BN_generate_dsa_nonce(k, dsa->q, dsa->priv_key, dgst, dlen, ctx)) goto err; - } else if (!BN_rand_range(k, dsa->q)) + } else if (!BN_priv_rand_range(k, dsa->q)) goto err; } while (BN_is_zero(k)); @@ -349,17 +347,17 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len, BN_free(u1); BN_free(u2); BN_free(t1); - return (ret); + return ret; } static int dsa_init(DSA *dsa) { dsa->flags |= DSA_FLAG_CACHE_MONT_P; - return (1); + return 1; } static int dsa_finish(DSA *dsa) { BN_MONT_CTX_free(dsa->method_mont_p); - return (1); + return 1; } diff --git a/crypto/dsa/dsa_pmeth.c b/crypto/dsa/dsa_pmeth.c index 95f088a5..88744a9c 100644 --- a/crypto/dsa/dsa_pmeth.c +++ b/crypto/dsa/dsa_pmeth.c @@ -31,8 +31,8 @@ typedef struct { static int pkey_dsa_init(EVP_PKEY_CTX *ctx) { - DSA_PKEY_CTX *dctx; - dctx = OPENSSL_malloc(sizeof(*dctx)); + DSA_PKEY_CTX *dctx = OPENSSL_malloc(sizeof(*dctx)); + if (dctx == NULL) return 0; dctx->nbits = 1024; @@ -50,6 +50,7 @@ static int pkey_dsa_init(EVP_PKEY_CTX *ctx) static int pkey_dsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { DSA_PKEY_CTX *dctx, *sctx; + if (!pkey_dsa_init(dst)) return 0; sctx = src->data; @@ -116,6 +117,7 @@ static int pkey_dsa_verify(EVP_PKEY_CTX *ctx, static int pkey_dsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { DSA_PKEY_CTX *dctx = ctx->data; + switch (type) { case EVP_PKEY_CTRL_DSA_PARAMGEN_BITS: if (p1 < 256) @@ -200,6 +202,7 @@ static int pkey_dsa_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) DSA_PKEY_CTX *dctx = ctx->data; BN_GENCB *pcb; int ret; + if (ctx->pkey_gencb) { pcb = BN_GENCB_new(); if (pcb == NULL) @@ -225,6 +228,7 @@ static int pkey_dsa_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) static int pkey_dsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { DSA *dsa = NULL; + if (ctx->pkey == NULL) { DSAerr(DSA_F_PKEY_DSA_KEYGEN, DSA_R_NO_PARAMETERS_SET); return 0; diff --git a/crypto/dsa/dsa_prn.c b/crypto/dsa/dsa_prn.c index f3c20ea0..a4a1fd56 100644 --- a/crypto/dsa/dsa_prn.c +++ b/crypto/dsa/dsa_prn.c @@ -20,12 +20,12 @@ int DSA_print_fp(FILE *fp, const DSA *x, int off) if ((b = BIO_new(BIO_s_file())) == NULL) { DSAerr(DSA_F_DSA_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = DSA_print(b, x, off); BIO_free(b); - return (ret); + return ret; } int DSAparams_print_fp(FILE *fp, const DSA *x) @@ -35,12 +35,12 @@ int DSAparams_print_fp(FILE *fp, const DSA *x) if ((b = BIO_new(BIO_s_file())) == NULL) { DSAerr(DSA_F_DSAPARAMS_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = DSAparams_print(b, x); BIO_free(b); - return (ret); + return ret; } #endif diff --git a/crypto/dsa/dsa_sign.c b/crypto/dsa/dsa_sign.c index 2e29d400..7057ea5a 100644 --- a/crypto/dsa/dsa_sign.c +++ b/crypto/dsa/dsa_sign.c @@ -7,8 +7,6 @@ * https://www.openssl.org/source/license.html */ -/* Original version from Steven Schoch */ - #include "internal/cryptlib.h" #include "dsa_locl.h" #include diff --git a/crypto/dsa/dsa_vrf.c b/crypto/dsa/dsa_vrf.c index a84d5212..21f98cd9 100644 --- a/crypto/dsa/dsa_vrf.c +++ b/crypto/dsa/dsa_vrf.c @@ -7,8 +7,6 @@ * https://www.openssl.org/source/license.html */ -/* Original version from Steven Schoch */ - #include "internal/cryptlib.h" #include "dsa_locl.h" diff --git a/crypto/dso/dso_dl.c b/crypto/dso/dso_dl.c index d80bf562..290d73cf 100644 --- a/crypto/dso/dso_dl.c +++ b/crypto/dso/dso_dl.c @@ -83,13 +83,13 @@ static int dl_load(DSO *dso) * (it also serves as the indicator that we are currently loaded). */ dso->loaded_filename = filename; - return (1); + return 1; err: /* Cleanup! */ OPENSSL_free(filename); if (ptr != NULL) shl_unload(ptr); - return (0); + return 0; } static int dl_unload(DSO *dso) @@ -97,10 +97,10 @@ static int dl_unload(DSO *dso) shl_t ptr; if (dso == NULL) { DSOerr(DSO_F_DL_UNLOAD, ERR_R_PASSED_NULL_PARAMETER); - return (0); + return 0; } if (sk_num(dso->meth_data) < 1) - return (1); + return 1; /* Is this statement legal? */ ptr = (shl_t) sk_pop(dso->meth_data); if (ptr == NULL) { @@ -109,10 +109,10 @@ static int dl_unload(DSO *dso) * Should push the value back onto the stack in case of a retry. */ sk_push(dso->meth_data, (char *)ptr); - return (0); + return 0; } shl_unload(ptr); - return (1); + return 1; } static DSO_FUNC_TYPE dl_bind_func(DSO *dso, const char *symname) @@ -122,25 +122,25 @@ static DSO_FUNC_TYPE dl_bind_func(DSO *dso, const char *symname) if ((dso == NULL) || (symname == NULL)) { DSOerr(DSO_F_DL_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (sk_num(dso->meth_data) < 1) { DSOerr(DSO_F_DL_BIND_FUNC, DSO_R_STACK_ERROR); - return (NULL); + return NULL; } ptr = (shl_t) sk_value(dso->meth_data, sk_num(dso->meth_data) - 1); if (ptr == NULL) { DSOerr(DSO_F_DL_BIND_FUNC, DSO_R_NULL_HANDLE); - return (NULL); + return NULL; } if (shl_findsym(&ptr, symname, TYPE_UNDEFINED, &sym) < 0) { char errbuf[160]; DSOerr(DSO_F_DL_BIND_FUNC, DSO_R_SYM_FAILURE); if (openssl_strerror_r(errno, errbuf, sizeof(errbuf))) ERR_add_error_data(4, "symname(", symname, "): ", errbuf); - return (NULL); + return NULL; } - return ((DSO_FUNC_TYPE)sym); + return (DSO_FUNC_TYPE)sym; } static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2) @@ -149,7 +149,7 @@ static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2) if (!filespec1 && !filespec2) { DSOerr(DSO_F_DL_MERGER, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } /* * If the first file specification is a rooted path, it rules. same goes @@ -159,7 +159,7 @@ static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2) merged = OPENSSL_strdup(filespec1); if (merged == NULL) { DSOerr(DSO_F_DL_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } /* @@ -169,7 +169,7 @@ static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2) merged = OPENSSL_strdup(filespec2); if (merged == NULL) { DSOerr(DSO_F_DL_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } else /* @@ -192,13 +192,13 @@ static char *dl_merger(DSO *dso, const char *filespec1, const char *filespec2) merged = OPENSSL_malloc(len + 2); if (merged == NULL) { DSOerr(DSO_F_DL_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } strcpy(merged, filespec2); merged[spec2len] = '/'; strcpy(&merged[spec2len + 1], filespec1); } - return (merged); + return merged; } /* @@ -225,7 +225,7 @@ static char *dl_name_converter(DSO *dso, const char *filename) translated = OPENSSL_malloc(rsize); if (translated == NULL) { DSOerr(DSO_F_DL_NAME_CONVERTER, DSO_R_NAME_TRANSLATION_FAILED); - return (NULL); + return NULL; } if (transform) { if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) @@ -234,7 +234,7 @@ static char *dl_name_converter(DSO *dso, const char *filename) sprintf(translated, "%s%s", filename, DSO_EXTENSION); } else sprintf(translated, "%s", filename); - return (translated); + return translated; } static int dl_pathbyaddr(void *addr, char *path, int sz) diff --git a/crypto/dso/dso_dlfcn.c b/crypto/dso/dso_dlfcn.c index a4b0cdd9..26f98bfc 100644 --- a/crypto/dso/dso_dlfcn.c +++ b/crypto/dso/dso_dlfcn.c @@ -120,13 +120,13 @@ static int dlfcn_load(DSO *dso) } /* Success */ dso->loaded_filename = filename; - return (1); + return 1; err: /* Cleanup! */ OPENSSL_free(filename); if (ptr != NULL) dlclose(ptr); - return (0); + return 0; } static int dlfcn_unload(DSO *dso) @@ -134,10 +134,10 @@ static int dlfcn_unload(DSO *dso) void *ptr; if (dso == NULL) { DSOerr(DSO_F_DLFCN_UNLOAD, ERR_R_PASSED_NULL_PARAMETER); - return (0); + return 0; } if (sk_void_num(dso->meth_data) < 1) - return (1); + return 1; ptr = sk_void_pop(dso->meth_data); if (ptr == NULL) { DSOerr(DSO_F_DLFCN_UNLOAD, DSO_R_NULL_HANDLE); @@ -145,11 +145,11 @@ static int dlfcn_unload(DSO *dso) * Should push the value back onto the stack in case of a retry. */ sk_void_push(dso->meth_data, ptr); - return (0); + return 0; } /* For now I'm not aware of any errors associated with dlclose() */ dlclose(ptr); - return (1); + return 1; } static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname) @@ -162,22 +162,22 @@ static DSO_FUNC_TYPE dlfcn_bind_func(DSO *dso, const char *symname) if ((dso == NULL) || (symname == NULL)) { DSOerr(DSO_F_DLFCN_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (sk_void_num(dso->meth_data) < 1) { DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_STACK_ERROR); - return (NULL); + return NULL; } ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1); if (ptr == NULL) { DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_NULL_HANDLE); - return (NULL); + return NULL; } u.dlret = dlsym(ptr, symname); if (u.dlret == NULL) { DSOerr(DSO_F_DLFCN_BIND_FUNC, DSO_R_SYM_FAILURE); ERR_add_error_data(4, "symname(", symname, "): ", dlerror()); - return (NULL); + return NULL; } return u.sym; } @@ -189,7 +189,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, if (!filespec1 && !filespec2) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } /* * If the first file specification is a rooted path, it rules. same goes @@ -199,7 +199,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, merged = OPENSSL_strdup(filespec1); if (merged == NULL) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } /* @@ -209,7 +209,7 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, merged = OPENSSL_strdup(filespec2); if (merged == NULL) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } else { /* @@ -231,13 +231,13 @@ static char *dlfcn_merger(DSO *dso, const char *filespec1, merged = OPENSSL_malloc(len + 2); if (merged == NULL) { DSOerr(DSO_F_DLFCN_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } strcpy(merged, filespec2); merged[spec2len] = '/'; strcpy(&merged[spec2len + 1], filespec1); } - return (merged); + return merged; } static char *dlfcn_name_converter(DSO *dso, const char *filename) @@ -257,7 +257,7 @@ static char *dlfcn_name_converter(DSO *dso, const char *filename) translated = OPENSSL_malloc(rsize); if (translated == NULL) { DSOerr(DSO_F_DLFCN_NAME_CONVERTER, DSO_R_NAME_TRANSLATION_FAILED); - return (NULL); + return NULL; } if (transform) { if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) @@ -266,7 +266,7 @@ static char *dlfcn_name_converter(DSO *dso, const char *filename) sprintf(translated, "%s" DSO_EXTENSION, filename); } else sprintf(translated, "%s", filename); - return (translated); + return translated; } # ifdef __sgi diff --git a/crypto/dso/dso_err.c b/crypto/dso/dso_err.c index 07588d5c..613072a8 100644 --- a/crypto/dso/dso_err.c +++ b/crypto/dso/dso_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,73 +8,81 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include "internal/dso.h" +#include "internal/dsoerr.h" -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_DSO,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_DSO,0,reason) - -static ERR_STRING_DATA DSO_str_functs[] = { - {ERR_FUNC(DSO_F_DLFCN_BIND_FUNC), "dlfcn_bind_func"}, - {ERR_FUNC(DSO_F_DLFCN_LOAD), "dlfcn_load"}, - {ERR_FUNC(DSO_F_DLFCN_MERGER), "dlfcn_merger"}, - {ERR_FUNC(DSO_F_DLFCN_NAME_CONVERTER), "dlfcn_name_converter"}, - {ERR_FUNC(DSO_F_DLFCN_UNLOAD), "dlfcn_unload"}, - {ERR_FUNC(DSO_F_DL_BIND_FUNC), "dl_bind_func"}, - {ERR_FUNC(DSO_F_DL_LOAD), "dl_load"}, - {ERR_FUNC(DSO_F_DL_MERGER), "dl_merger"}, - {ERR_FUNC(DSO_F_DL_NAME_CONVERTER), "dl_name_converter"}, - {ERR_FUNC(DSO_F_DL_UNLOAD), "dl_unload"}, - {ERR_FUNC(DSO_F_DSO_BIND_FUNC), "DSO_bind_func"}, - {ERR_FUNC(DSO_F_DSO_CONVERT_FILENAME), "DSO_convert_filename"}, - {ERR_FUNC(DSO_F_DSO_CTRL), "DSO_ctrl"}, - {ERR_FUNC(DSO_F_DSO_FREE), "DSO_free"}, - {ERR_FUNC(DSO_F_DSO_GET_FILENAME), "DSO_get_filename"}, - {ERR_FUNC(DSO_F_DSO_GLOBAL_LOOKUP), "DSO_global_lookup"}, - {ERR_FUNC(DSO_F_DSO_LOAD), "DSO_load"}, - {ERR_FUNC(DSO_F_DSO_MERGE), "DSO_merge"}, - {ERR_FUNC(DSO_F_DSO_NEW_METHOD), "DSO_new_method"}, - {ERR_FUNC(DSO_F_DSO_PATHBYADDR), "DSO_pathbyaddr"}, - {ERR_FUNC(DSO_F_DSO_SET_FILENAME), "DSO_set_filename"}, - {ERR_FUNC(DSO_F_DSO_UP_REF), "DSO_up_ref"}, - {ERR_FUNC(DSO_F_VMS_BIND_SYM), "vms_bind_sym"}, - {ERR_FUNC(DSO_F_VMS_LOAD), "vms_load"}, - {ERR_FUNC(DSO_F_VMS_MERGER), "vms_merger"}, - {ERR_FUNC(DSO_F_VMS_UNLOAD), "vms_unload"}, - {ERR_FUNC(DSO_F_WIN32_BIND_FUNC), "win32_bind_func"}, - {ERR_FUNC(DSO_F_WIN32_GLOBALLOOKUP), "win32_globallookup"}, - {ERR_FUNC(DSO_F_WIN32_JOINER), "win32_joiner"}, - {ERR_FUNC(DSO_F_WIN32_LOAD), "win32_load"}, - {ERR_FUNC(DSO_F_WIN32_MERGER), "win32_merger"}, - {ERR_FUNC(DSO_F_WIN32_NAME_CONVERTER), "win32_name_converter"}, - {ERR_FUNC(DSO_F_WIN32_PATHBYADDR), "win32_pathbyaddr"}, - {ERR_FUNC(DSO_F_WIN32_SPLITTER), "win32_splitter"}, - {ERR_FUNC(DSO_F_WIN32_UNLOAD), "win32_unload"}, +static const ERR_STRING_DATA DSO_str_functs[] = { + {ERR_PACK(ERR_LIB_DSO, DSO_F_DLFCN_BIND_FUNC, 0), "dlfcn_bind_func"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DLFCN_LOAD, 0), "dlfcn_load"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DLFCN_MERGER, 0), "dlfcn_merger"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DLFCN_NAME_CONVERTER, 0), + "dlfcn_name_converter"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DLFCN_UNLOAD, 0), "dlfcn_unload"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DL_BIND_FUNC, 0), "dl_bind_func"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DL_LOAD, 0), "dl_load"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DL_MERGER, 0), "dl_merger"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DL_NAME_CONVERTER, 0), "dl_name_converter"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DL_UNLOAD, 0), "dl_unload"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_BIND_FUNC, 0), "DSO_bind_func"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_CONVERT_FILENAME, 0), + "DSO_convert_filename"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_CTRL, 0), "DSO_ctrl"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_FREE, 0), "DSO_free"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_GET_FILENAME, 0), "DSO_get_filename"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_GLOBAL_LOOKUP, 0), "DSO_global_lookup"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_LOAD, 0), "DSO_load"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_MERGE, 0), "DSO_merge"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_NEW_METHOD, 0), "DSO_new_method"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_PATHBYADDR, 0), "DSO_pathbyaddr"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_SET_FILENAME, 0), "DSO_set_filename"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_DSO_UP_REF, 0), "DSO_up_ref"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_VMS_BIND_SYM, 0), "vms_bind_sym"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_VMS_LOAD, 0), "vms_load"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_VMS_MERGER, 0), "vms_merger"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_VMS_UNLOAD, 0), "vms_unload"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_BIND_FUNC, 0), "win32_bind_func"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_GLOBALLOOKUP, 0), "win32_globallookup"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_JOINER, 0), "win32_joiner"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_LOAD, 0), "win32_load"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_MERGER, 0), "win32_merger"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_NAME_CONVERTER, 0), + "win32_name_converter"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_PATHBYADDR, 0), ""}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_SPLITTER, 0), "win32_splitter"}, + {ERR_PACK(ERR_LIB_DSO, DSO_F_WIN32_UNLOAD, 0), "win32_unload"}, {0, NULL} }; -static ERR_STRING_DATA DSO_str_reasons[] = { - {ERR_REASON(DSO_R_CTRL_FAILED), "control command failed"}, - {ERR_REASON(DSO_R_DSO_ALREADY_LOADED), "dso already loaded"}, - {ERR_REASON(DSO_R_EMPTY_FILE_STRUCTURE), "empty file structure"}, - {ERR_REASON(DSO_R_FAILURE), "failure"}, - {ERR_REASON(DSO_R_FILENAME_TOO_BIG), "filename too big"}, - {ERR_REASON(DSO_R_FINISH_FAILED), "cleanup method function failed"}, - {ERR_REASON(DSO_R_INCORRECT_FILE_SYNTAX), "incorrect file syntax"}, - {ERR_REASON(DSO_R_LOAD_FAILED), "could not load the shared library"}, - {ERR_REASON(DSO_R_NAME_TRANSLATION_FAILED), "name translation failed"}, - {ERR_REASON(DSO_R_NO_FILENAME), "no filename"}, - {ERR_REASON(DSO_R_NULL_HANDLE), "a null shared library handle was used"}, - {ERR_REASON(DSO_R_SET_FILENAME_FAILED), "set filename failed"}, - {ERR_REASON(DSO_R_STACK_ERROR), "the meth_data stack is corrupt"}, - {ERR_REASON(DSO_R_SYM_FAILURE), - "could not bind to the requested symbol name"}, - {ERR_REASON(DSO_R_UNLOAD_FAILED), "could not unload the shared library"}, - {ERR_REASON(DSO_R_UNSUPPORTED), "functionality not supported"}, +static const ERR_STRING_DATA DSO_str_reasons[] = { + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_CTRL_FAILED), "control command failed"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_DSO_ALREADY_LOADED), "dso already loaded"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_EMPTY_FILE_STRUCTURE), + "empty file structure"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_FAILURE), "failure"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_FILENAME_TOO_BIG), "filename too big"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_FINISH_FAILED), + "cleanup method function failed"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_INCORRECT_FILE_SYNTAX), + "incorrect file syntax"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_LOAD_FAILED), + "could not load the shared library"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_NAME_TRANSLATION_FAILED), + "name translation failed"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_NO_FILENAME), "no filename"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_NULL_HANDLE), + "a null shared library handle was used"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_SET_FILENAME_FAILED), + "set filename failed"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_STACK_ERROR), + "the meth_data stack is corrupt"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_SYM_FAILURE), + "could not bind to the requested symbol name"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_UNLOAD_FAILED), + "could not unload the shared library"}, + {ERR_PACK(ERR_LIB_DSO, 0, DSO_R_UNSUPPORTED), + "functionality not supported"}, {0, NULL} }; @@ -83,10 +91,9 @@ static ERR_STRING_DATA DSO_str_reasons[] = { int ERR_load_DSO_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(DSO_str_functs[0].error) == NULL) { - ERR_load_strings(0, DSO_str_functs); - ERR_load_strings(0, DSO_str_reasons); + ERR_load_strings_const(DSO_str_functs); + ERR_load_strings_const(DSO_str_reasons); } #endif return 1; diff --git a/crypto/dso/dso_lib.c b/crypto/dso/dso_lib.c index f58237d6..2e75021d 100644 --- a/crypto/dso/dso_lib.c +++ b/crypto/dso/dso_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,6 +8,7 @@ */ #include "dso_locl.h" +#include "internal/refcount.h" static DSO_METHOD *default_DSO_meth = NULL; @@ -26,14 +27,14 @@ static DSO *DSO_new_method(DSO_METHOD *meth) ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } ret->meth_data = sk_void_new_null(); if (ret->meth_data == NULL) { /* sk_new doesn't generate any errors so we do */ DSOerr(DSO_F_DSO_NEW_METHOD, ERR_R_MALLOC_FAILURE); OPENSSL_free(ret); - return (NULL); + return NULL; } ret->meth = default_DSO_meth; ret->references = 1; @@ -63,9 +64,9 @@ int DSO_free(DSO *dso) int i; if (dso == NULL) - return (1); + return 1; - if (CRYPTO_atomic_add(&dso->references, -1, &i, dso->lock) <= 0) + if (CRYPTO_DOWN_REF(&dso->references, &i, dso->lock) <= 0) return 0; REF_PRINT_COUNT("DSO", dso); @@ -107,7 +108,7 @@ int DSO_up_ref(DSO *dso) return 0; } - if (CRYPTO_atomic_add(&dso->references, 1, &i, dso->lock) <= 0) + if (CRYPTO_UP_REF(&dso->references, &i, dso->lock) <= 0) return 0; REF_PRINT_COUNT("DSO", r); @@ -162,11 +163,11 @@ DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags) goto err; } /* Load succeeded */ - return (ret); + return ret; err: if (allocated) DSO_free(ret); - return (NULL); + return NULL; } DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname) @@ -175,18 +176,18 @@ DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname) if ((dso == NULL) || (symname == NULL)) { DSOerr(DSO_F_DSO_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (dso->meth->dso_bind_func == NULL) { DSOerr(DSO_F_DSO_BIND_FUNC, DSO_R_UNSUPPORTED); - return (NULL); + return NULL; } if ((ret = dso->meth->dso_bind_func(dso, symname)) == NULL) { DSOerr(DSO_F_DSO_BIND_FUNC, DSO_R_SYM_FAILURE); - return (NULL); + return NULL; } /* Success */ - return (ret); + return ret; } /* @@ -202,7 +203,7 @@ long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg) { if (dso == NULL) { DSOerr(DSO_F_DSO_CTRL, ERR_R_PASSED_NULL_PARAMETER); - return (-1); + return -1; } /* * We should intercept certain generic commands and only pass control to @@ -213,27 +214,27 @@ long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg) return dso->flags; case DSO_CTRL_SET_FLAGS: dso->flags = (int)larg; - return (0); + return 0; case DSO_CTRL_OR_FLAGS: dso->flags |= (int)larg; - return (0); + return 0; default: break; } if ((dso->meth == NULL) || (dso->meth->dso_ctrl == NULL)) { DSOerr(DSO_F_DSO_CTRL, DSO_R_UNSUPPORTED); - return (-1); + return -1; } - return (dso->meth->dso_ctrl(dso, cmd, larg, parg)); + return dso->meth->dso_ctrl(dso, cmd, larg, parg); } const char *DSO_get_filename(DSO *dso) { if (dso == NULL) { DSOerr(DSO_F_DSO_GET_FILENAME, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } - return (dso->filename); + return dso->filename; } int DSO_set_filename(DSO *dso, const char *filename) @@ -242,21 +243,21 @@ int DSO_set_filename(DSO *dso, const char *filename) if ((dso == NULL) || (filename == NULL)) { DSOerr(DSO_F_DSO_SET_FILENAME, ERR_R_PASSED_NULL_PARAMETER); - return (0); + return 0; } if (dso->loaded_filename) { DSOerr(DSO_F_DSO_SET_FILENAME, DSO_R_DSO_ALREADY_LOADED); - return (0); + return 0; } /* We'll duplicate filename */ copied = OPENSSL_strdup(filename); if (copied == NULL) { DSOerr(DSO_F_DSO_SET_FILENAME, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } OPENSSL_free(dso->filename); dso->filename = copied; - return (1); + return 1; } char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2) @@ -265,7 +266,7 @@ char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2) if (dso == NULL || filespec1 == NULL) { DSOerr(DSO_F_DSO_MERGE, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) { if (dso->merger != NULL) @@ -273,7 +274,7 @@ char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2) else if (dso->meth->dso_merger != NULL) result = dso->meth->dso_merger(dso, filespec1, filespec2); } - return (result); + return result; } char *DSO_convert_filename(DSO *dso, const char *filename) @@ -282,13 +283,13 @@ char *DSO_convert_filename(DSO *dso, const char *filename) if (dso == NULL) { DSOerr(DSO_F_DSO_CONVERT_FILENAME, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (filename == NULL) filename = dso->filename; if (filename == NULL) { DSOerr(DSO_F_DSO_CONVERT_FILENAME, DSO_R_NO_FILENAME); - return (NULL); + return NULL; } if ((dso->flags & DSO_FLAG_NO_NAME_TRANSLATION) == 0) { if (dso->name_converter != NULL) @@ -300,10 +301,10 @@ char *DSO_convert_filename(DSO *dso, const char *filename) result = OPENSSL_strdup(filename); if (result == NULL) { DSOerr(DSO_F_DSO_CONVERT_FILENAME, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } - return (result); + return result; } int DSO_pathbyaddr(void *addr, char *path, int sz) diff --git a/crypto/dso/dso_locl.h b/crypto/dso/dso_locl.h index fbfad054..14a0ccb7 100644 --- a/crypto/dso/dso_locl.h +++ b/crypto/dso/dso_locl.h @@ -11,6 +11,7 @@ #include "internal/cryptlib.h" #include "internal/dso.h" #include "internal/dso_conf.h" +#include "internal/refcount.h" /**********************************************************************/ /* The low-level handle type used to refer to a loaded shared library */ @@ -24,7 +25,7 @@ struct dso_st { * "Handles" and such go in a STACK. */ STACK_OF(void) *meth_data; - int references; + CRYPTO_REF_COUNT references; int flags; /* * For use by applications etc ... use this for your bits'n'pieces, don't diff --git a/crypto/dso/dso_vms.c b/crypto/dso/dso_vms.c index b9a98ddd..178e7257 100644 --- a/crypto/dso/dso_vms.c +++ b/crypto/dso/dso_vms.c @@ -207,12 +207,12 @@ static int vms_load(DSO *dso) /* Success (for now, we lie. We actually do not know...) */ dso->loaded_filename = filename; - return (1); + return 1; err: /* Cleanup! */ OPENSSL_free(p); OPENSSL_free(filename); - return (0); + return 0; } /* @@ -225,18 +225,18 @@ static int vms_unload(DSO *dso) DSO_VMS_INTERNAL *p; if (dso == NULL) { DSOerr(DSO_F_VMS_UNLOAD, ERR_R_PASSED_NULL_PARAMETER); - return (0); + return 0; } if (sk_void_num(dso->meth_data) < 1) - return (1); + return 1; p = (DSO_VMS_INTERNAL *)sk_void_pop(dso->meth_data); if (p == NULL) { DSOerr(DSO_F_VMS_UNLOAD, DSO_R_NULL_HANDLE); - return (0); + return 0; } /* Cleanup */ OPENSSL_free(p); - return (1); + return 1; } /* @@ -263,15 +263,13 @@ static int do_find_symbol(DSO_VMS_INTERNAL *ptr, symname_dsc, sym, 0, flags); } +# ifndef LIB$M_FIS_MIXEDCASE +# define LIB$M_FIS_MIXEDCASE (1 << 4); +# endif void vms_bind_sym(DSO *dso, const char *symname, void **sym) { DSO_VMS_INTERNAL *ptr; - int status; -# ifdef LIB$M_FIS_MIXEDCASE - int flags = LIB$M_FIS_MIXEDCASE; -# else - int flags = (1 << 4); -# endif + int status = 0; struct dsc$descriptor_s symname_dsc; /* Arrange 32-bit pointer to (copied) string storage, if needed. */ @@ -314,10 +312,10 @@ void vms_bind_sym(DSO *dso, const char *symname, void **sym) return; } - if (dso->flags & DSO_FLAG_UPCASE_SYMBOL) - flags = 0; + status = do_find_symbol(ptr, &symname_dsc, sym, LIB$M_FIS_MIXEDCASE); - status = do_find_symbol(ptr, &symname_dsc, sym, flags); + if (!$VMS_STATUS_SUCCESS(status)) + status = do_find_symbol(ptr, &symname_dsc, sym, 0); if (!$VMS_STATUS_SUCCESS(status)) { unsigned short length; @@ -443,7 +441,7 @@ static char *vms_merger(DSO *dso, const char *filespec1, "filespec \"", filespec1, "\", ", "defaults \"", filespec2, "\": ", errstring); } - return (NULL); + return NULL; } merged = OPENSSL_malloc(nam.NAMX_ESL + 1); @@ -451,7 +449,7 @@ static char *vms_merger(DSO *dso, const char *filespec1, goto malloc_err; strncpy(merged, nam.NAMX_ESA, nam.NAMX_ESL); merged[nam.NAMX_ESL] = '\0'; - return (merged); + return merged; malloc_err: DSOerr(DSO_F_VMS_MERGER, ERR_R_MALLOC_FAILURE); } @@ -462,7 +460,7 @@ static char *vms_name_converter(DSO *dso, const char *filename) char *not_translated = OPENSSL_malloc(len + 1); if (not_translated != NULL) strcpy(not_translated, filename); - return (not_translated); + return not_translated; } #endif /* OPENSSL_SYS_VMS */ diff --git a/crypto/dso/dso_win32.c b/crypto/dso/dso_win32.c index 4a4c34ab..0bbf5b51 100644 --- a/crypto/dso/dso_win32.c +++ b/crypto/dso/dso_win32.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,6 +7,7 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include "dso_locl.h" #if defined(DSO_WIN32) @@ -119,14 +120,14 @@ static int win32_load(DSO *dso) } /* Success */ dso->loaded_filename = filename; - return (1); + return 1; err: /* Cleanup ! */ OPENSSL_free(filename); OPENSSL_free(p); if (h != NULL) FreeLibrary(h); - return (0); + return 0; } static int win32_unload(DSO *dso) @@ -134,14 +135,14 @@ static int win32_unload(DSO *dso) HINSTANCE *p; if (dso == NULL) { DSOerr(DSO_F_WIN32_UNLOAD, ERR_R_PASSED_NULL_PARAMETER); - return (0); + return 0; } if (sk_void_num(dso->meth_data) < 1) - return (1); + return 1; p = sk_void_pop(dso->meth_data); if (p == NULL) { DSOerr(DSO_F_WIN32_UNLOAD, DSO_R_NULL_HANDLE); - return (0); + return 0; } if (!FreeLibrary(*p)) { DSOerr(DSO_F_WIN32_UNLOAD, DSO_R_UNLOAD_FAILED); @@ -149,11 +150,11 @@ static int win32_unload(DSO *dso) * We should push the value back onto the stack in case of a retry. */ sk_void_push(dso->meth_data, p); - return (0); + return 0; } /* Cleanup */ OPENSSL_free(p); - return (1); + return 1; } static DSO_FUNC_TYPE win32_bind_func(DSO *dso, const char *symname) @@ -166,24 +167,24 @@ static DSO_FUNC_TYPE win32_bind_func(DSO *dso, const char *symname) if ((dso == NULL) || (symname == NULL)) { DSOerr(DSO_F_WIN32_BIND_FUNC, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (sk_void_num(dso->meth_data) < 1) { DSOerr(DSO_F_WIN32_BIND_FUNC, DSO_R_STACK_ERROR); - return (NULL); + return NULL; } ptr = sk_void_value(dso->meth_data, sk_void_num(dso->meth_data) - 1); if (ptr == NULL) { DSOerr(DSO_F_WIN32_BIND_FUNC, DSO_R_NULL_HANDLE); - return (NULL); + return NULL; } sym.f = GetProcAddress(*ptr, symname); if (sym.p == NULL) { DSOerr(DSO_F_WIN32_BIND_FUNC, DSO_R_SYM_FAILURE); ERR_add_error_data(3, "symname(", symname, ")"); - return (NULL); + return NULL; } - return ((DSO_FUNC_TYPE)sym.f); + return (DSO_FUNC_TYPE)sym.f; } struct file_st { @@ -209,16 +210,13 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, if (!filename) { DSOerr(DSO_F_WIN32_SPLITTER, DSO_R_NO_FILENAME); - /* - * goto err; - */ - return (NULL); + return NULL; } result = OPENSSL_zalloc(sizeof(*result)); if (result == NULL) { DSOerr(DSO_F_WIN32_SPLITTER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } position = IN_DEVICE; @@ -237,11 +235,8 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, case ':': if (position != IN_DEVICE) { DSOerr(DSO_F_WIN32_SPLITTER, DSO_R_INCORRECT_FILE_SYNTAX); - /* - * goto err; - */ OPENSSL_free(result); - return (NULL); + return NULL; } result->device = start; result->devicelen = (int)(filename - start); @@ -302,7 +297,7 @@ static struct file_st *win32_splitter(DSO *dso, const char *filename, if (!result->filelen) result->file = NULL; - return (result); + return result; } static char *win32_joiner(DSO *dso, const struct file_st *file_split) @@ -313,7 +308,7 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) if (!file_split) { DSOerr(DSO_F_WIN32_JOINER, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (file_split->node) { len += 2 + file_split->nodelen; /* 2 for starting \\ */ @@ -334,13 +329,13 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) if (!len) { DSOerr(DSO_F_WIN32_JOINER, DSO_R_EMPTY_FILE_STRUCTURE); - return (NULL); + return NULL; } result = OPENSSL_malloc(len + 1); if (result == NULL) { DSOerr(DSO_F_WIN32_JOINER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } if (file_split->node) { @@ -388,7 +383,7 @@ static char *win32_joiner(DSO *dso, const struct file_st *file_split) strncpy(&result[offset], file_split->file, file_split->filelen); offset += file_split->filelen; result[offset] = '\0'; - return (result); + return result; } static char *win32_merger(DSO *dso, const char *filespec1, @@ -400,33 +395,31 @@ static char *win32_merger(DSO *dso, const char *filespec1, if (!filespec1 && !filespec2) { DSOerr(DSO_F_WIN32_MERGER, ERR_R_PASSED_NULL_PARAMETER); - return (NULL); + return NULL; } if (!filespec2) { - merged = OPENSSL_malloc(strlen(filespec1) + 1); + merged = OPENSSL_strdup(filespec1); if (merged == NULL) { DSOerr(DSO_F_WIN32_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } - strcpy(merged, filespec1); } else if (!filespec1) { - merged = OPENSSL_malloc(strlen(filespec2) + 1); + merged = OPENSSL_strdup(filespec2); if (merged == NULL) { DSOerr(DSO_F_WIN32_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } - strcpy(merged, filespec2); } else { filespec1_split = win32_splitter(dso, filespec1, 0); if (!filespec1_split) { DSOerr(DSO_F_WIN32_MERGER, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } filespec2_split = win32_splitter(dso, filespec2, 1); if (!filespec2_split) { DSOerr(DSO_F_WIN32_MERGER, ERR_R_MALLOC_FAILURE); OPENSSL_free(filespec1_split); - return (NULL); + return NULL; } /* Fill in into filespec1_split */ @@ -453,7 +446,7 @@ static char *win32_merger(DSO *dso, const char *filespec1, } OPENSSL_free(filespec1_split); OPENSSL_free(filespec2_split); - return (merged); + return merged; } static char *win32_name_converter(DSO *dso, const char *filename) @@ -473,13 +466,13 @@ static char *win32_name_converter(DSO *dso, const char *filename) translated = OPENSSL_malloc(len + 1); if (translated == NULL) { DSOerr(DSO_F_WIN32_NAME_CONVERTER, DSO_R_NAME_TRANSLATION_FAILED); - return (NULL); + return NULL; } if (transform) sprintf(translated, "%s.dll", filename); else sprintf(translated, "%s", filename); - return (translated); + return translated; } static const char *openssl_strnchr(const char *string, int c, size_t len) diff --git a/crypto/ebcdic.c b/crypto/ebcdic.c index 68719538..2a8ca610 100644 --- a/crypto/ebcdic.c +++ b/crypto/ebcdic.c @@ -14,11 +14,6 @@ NON_EMPTY_TRANSLATION_UNIT # include -/*- - * Initial Port for Apache-1.3 by - * Adapted for OpenSSL-0.9.4 by - */ - # ifdef CHARSET_EBCDIC_TEST /* * Here we're looking to test the EBCDIC code on an ASCII system so we don't do diff --git a/crypto/ec/asm/ecp_nistz256-armv4.pl b/crypto/ec/asm/ecp_nistz256-armv4.pl index 2314b752..c414334d 100755 --- a/crypto/ec/asm/ecp_nistz256-armv4.pl +++ b/crypto/ec/asm/ecp_nistz256-armv4.pl @@ -233,7 +233,7 @@ __ecp_nistz256_add: @ if a+b >= modulus, subtract modulus. @ @ But since comparison implies subtraction, we subtract - @ modulus and then add it back if subraction borrowed. + @ modulus and then add it back if subtraction borrowed. subs $a0,$a0,#-1 sbcs $a1,$a1,#-1 @@ -1222,7 +1222,7 @@ __ecp_nistz256_add_self: @ if a+b >= modulus, subtract modulus. @ @ But since comparison implies subtraction, we subtract - @ modulus and then add it back if subraction borrowed. + @ modulus and then add it back if subtraction borrowed. subs $a0,$a0,#-1 sbcs $a1,$a1,#-1 diff --git a/crypto/ec/asm/ecp_nistz256-armv8.pl b/crypto/ec/asm/ecp_nistz256-armv8.pl index 5ac22825..2705d7cf 100644 --- a/crypto/ec/asm/ecp_nistz256-armv8.pl +++ b/crypto/ec/asm/ecp_nistz256-armv8.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -663,7 +663,7 @@ __ecp_nistz256_div_by_2: adc $ap,xzr,xzr // zap $ap tst $acc0,#1 // is a even? - csel $acc0,$acc0,$t0,eq // ret = even ? a : a+modulus + csel $acc0,$acc0,$t0,eq // ret = even ? a : a+modulus csel $acc1,$acc1,$t1,eq csel $acc2,$acc2,$t2,eq csel $acc3,$acc3,$t3,eq diff --git a/crypto/ec/asm/ecp_nistz256-avx2.pl b/crypto/ec/asm/ecp_nistz256-avx2.pl index 3bdd2cf1..9fbc909b 100755 --- a/crypto/ec/asm/ecp_nistz256-avx2.pl +++ b/crypto/ec/asm/ecp_nistz256-avx2.pl @@ -1,39 +1,19 @@ #! /usr/bin/env perl # Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright (c) 2014, Intel Corporation. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html - - -############################################################################## -# # -# Copyright 2014 Intel Corporation # -# # -# Licensed under the Apache License, Version 2.0 (the "License"); # -# you may not use this file except in compliance with the License. # -# You may obtain a copy of the License at # -# # -# http://www.apache.org/licenses/LICENSE-2.0 # -# # -# Unless required by applicable law or agreed to in writing, software # -# distributed under the License is distributed on an "AS IS" BASIS, # -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -# See the License for the specific language governing permissions and # -# limitations under the License. # -# # -############################################################################## -# # -# Developers and authors: # -# Shay Gueron (1, 2), and Vlad Krasnov (1) # -# (1) Intel Corporation, Israel Development Center # -# (2) University of Haifa # -# Reference: # -# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with# -# 256 Bit Primes" # -# # -############################################################################## +# +# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +# (1) Intel Corporation, Israel Development Center, Haifa, Israel +# (2) University of Haifa, Israel +# +# Reference: +# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with +# 256 Bit Primes" $flavour = shift; $output = shift; @@ -157,7 +137,7 @@ ___ { # This function receives a pointer to an array of four affine points -# (X, Y, <1>) and rearanges the data for AVX2 execution, while +# (X, Y, <1>) and rearranges the data for AVX2 execution, while # converting it to 2^29 radix redundant form my ($X0,$X1,$X2,$X3, $Y0,$Y1,$Y2,$Y3, @@ -309,7 +289,7 @@ ___ { ################################################################################ # This function receives a pointer to an array of four AVX2 formatted points -# (X, Y, Z) convert the data to normal representation, and rearanges the data +# (X, Y, Z) convert the data to normal representation, and rearranges the data my ($D0,$D1,$D2,$D3, $D4,$D5,$D6,$D7, $D8)=map("%ymm$_",(0..8)); my ($T0,$T1,$T2,$T3, $T4,$T5,$T6)=map("%ymm$_",(9..15)); diff --git a/crypto/ec/asm/ecp_nistz256-ppc64.pl b/crypto/ec/asm/ecp_nistz256-ppc64.pl new file mode 100755 index 00000000..0c3c186b --- /dev/null +++ b/crypto/ec/asm/ecp_nistz256-ppc64.pl @@ -0,0 +1,2382 @@ +#! /usr/bin/env perl +# 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 + +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# ECP_NISTZ256 module for PPC64. +# +# August 2016. +# +# Original ECP_NISTZ256 submission targeting x86_64 is detailed in +# http://eprint.iacr.org/2013/816. +# +# with/without -DECP_NISTZ256_ASM +# POWER7 +260-530% +# POWER8 +220-340% + +$flavour = shift; +while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or +die "can't locate ppc-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +my $sp="r1"; + +{ +my ($rp,$ap,$bp,$bi,$acc0,$acc1,$acc2,$acc3,$poly1,$poly3, + $acc4,$acc5,$a0,$a1,$a2,$a3,$t0,$t1,$t2,$t3) = + map("r$_",(3..12,22..31)); + +my ($acc6,$acc7)=($bp,$bi); # used in __ecp_nistz256_sqr_mont + +$code.=<<___; +.machine "any" +.text +___ +######################################################################## +# Convert ecp_nistz256_table.c to layout expected by ecp_nistz_gather_w7 +# +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +open TABLE,") { + s/TOBN\(\s*(0x[0-9a-f]+),\s*(0x[0-9a-f]+)\s*\)/push @arr,hex($2),hex($1)/geo; +} +close TABLE; + +# See ecp_nistz256_table.c for explanation for why it's 64*16*37. +# 64*16*37-1 is because $#arr returns last valid index or @arr, not +# amount of elements. +die "insane number of elements" if ($#arr != 64*16*37-1); + +$code.=<<___; +.type ecp_nistz256_precomputed,\@object +.globl ecp_nistz256_precomputed +.align 12 +ecp_nistz256_precomputed: +___ +######################################################################## +# this conversion smashes P256_POINT_AFFINE by individual bytes with +# 64 byte interval, similar to +# 1111222233334444 +# 1234123412341234 +for(1..37) { + @tbl = splice(@arr,0,64*16); + for($i=0;$i<64;$i++) { + undef @line; + for($j=0;$j<64;$j++) { + push @line,(@tbl[$j*16+$i/4]>>(($i%4)*8))&0xff; + } + $code.=".byte\t"; + $code.=join(',',map { sprintf "0x%02x",$_} @line); + $code.="\n"; + } +} + +$code.=<<___; +.size ecp_nistz256_precomputed,.-ecp_nistz256_precomputed +.asciz "ECP_NISTZ256 for PPC64, CRYPTOGAMS by " + +# void ecp_nistz256_mul_mont(BN_ULONG x0[4],const BN_ULONG x1[4], +# const BN_ULONG x2[4]); +.globl ecp_nistz256_mul_mont +.align 5 +ecp_nistz256_mul_mont: + stdu $sp,-128($sp) + mflr r0 + std r22,48($sp) + std r23,56($sp) + std r24,64($sp) + std r25,72($sp) + std r26,80($sp) + std r27,88($sp) + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $a0,0($ap) + ld $bi,0($bp) + ld $a1,8($ap) + ld $a2,16($ap) + ld $a3,24($ap) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_mul_mont + + mtlr r0 + ld r22,48($sp) + ld r23,56($sp) + ld r24,64($sp) + ld r25,72($sp) + ld r26,80($sp) + ld r27,88($sp) + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,10,3,0 + .long 0 +.size ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont + +# void ecp_nistz256_sqr_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl ecp_nistz256_sqr_mont +.align 4 +ecp_nistz256_sqr_mont: + stdu $sp,-128($sp) + mflr r0 + std r22,48($sp) + std r23,56($sp) + std r24,64($sp) + std r25,72($sp) + std r26,80($sp) + std r27,88($sp) + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $a0,0($ap) + ld $a1,8($ap) + ld $a2,16($ap) + ld $a3,24($ap) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_sqr_mont + + mtlr r0 + ld r22,48($sp) + ld r23,56($sp) + ld r24,64($sp) + ld r25,72($sp) + ld r26,80($sp) + ld r27,88($sp) + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,10,2,0 + .long 0 +.size ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont + +# void ecp_nistz256_add(BN_ULONG x0[4],const BN_ULONG x1[4], +# const BN_ULONG x2[4]); +.globl ecp_nistz256_add +.align 4 +ecp_nistz256_add: + stdu $sp,-128($sp) + mflr r0 + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $acc0,0($ap) + ld $t0, 0($bp) + ld $acc1,8($ap) + ld $t1, 8($bp) + ld $acc2,16($ap) + ld $t2, 16($bp) + ld $acc3,24($ap) + ld $t3, 24($bp) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_add + + mtlr r0 + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,4,3,0 + .long 0 +.size ecp_nistz256_add,.-ecp_nistz256_add + +# void ecp_nistz256_div_by_2(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl ecp_nistz256_div_by_2 +.align 4 +ecp_nistz256_div_by_2: + stdu $sp,-128($sp) + mflr r0 + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $acc0,0($ap) + ld $acc1,8($ap) + ld $acc2,16($ap) + ld $acc3,24($ap) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_div_by_2 + + mtlr r0 + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,4,2,0 + .long 0 +.size ecp_nistz256_div_by_2,.-ecp_nistz256_div_by_2 + +# void ecp_nistz256_mul_by_2(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl ecp_nistz256_mul_by_2 +.align 4 +ecp_nistz256_mul_by_2: + stdu $sp,-128($sp) + mflr r0 + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $acc0,0($ap) + ld $acc1,8($ap) + ld $acc2,16($ap) + ld $acc3,24($ap) + + mr $t0,$acc0 + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_add # ret = a+a // 2*a + + mtlr r0 + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,4,3,0 + .long 0 +.size ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2 + +# void ecp_nistz256_mul_by_3(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl ecp_nistz256_mul_by_3 +.align 4 +ecp_nistz256_mul_by_3: + stdu $sp,-128($sp) + mflr r0 + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $acc0,0($ap) + ld $acc1,8($ap) + ld $acc2,16($ap) + ld $acc3,24($ap) + + mr $t0,$acc0 + std $acc0,64($sp) + mr $t1,$acc1 + std $acc1,72($sp) + mr $t2,$acc2 + std $acc2,80($sp) + mr $t3,$acc3 + std $acc3,88($sp) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_add # ret = a+a // 2*a + + ld $t0,64($sp) + ld $t1,72($sp) + ld $t2,80($sp) + ld $t3,88($sp) + + bl __ecp_nistz256_add # ret += a // 2*a+a=3*a + + mtlr r0 + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,4,2,0 + .long 0 +.size ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3 + +# void ecp_nistz256_sub(BN_ULONG x0[4],const BN_ULONG x1[4], +# const BN_ULONG x2[4]); +.globl ecp_nistz256_sub +.align 4 +ecp_nistz256_sub: + stdu $sp,-128($sp) + mflr r0 + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + ld $acc0,0($ap) + ld $acc1,8($ap) + ld $acc2,16($ap) + ld $acc3,24($ap) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_sub_from + + mtlr r0 + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,4,3,0 + .long 0 +.size ecp_nistz256_sub,.-ecp_nistz256_sub + +# void ecp_nistz256_neg(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl ecp_nistz256_neg +.align 4 +ecp_nistz256_neg: + stdu $sp,-128($sp) + mflr r0 + std r28,96($sp) + std r29,104($sp) + std r30,112($sp) + std r31,120($sp) + + mr $bp,$ap + li $acc0,0 + li $acc1,0 + li $acc2,0 + li $acc3,0 + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + bl __ecp_nistz256_sub_from + + mtlr r0 + ld r28,96($sp) + ld r29,104($sp) + ld r30,112($sp) + ld r31,120($sp) + addi $sp,$sp,128 + blr + .long 0 + .byte 0,12,4,0,0x80,4,2,0 + .long 0 +.size ecp_nistz256_neg,.-ecp_nistz256_neg + +# note that __ecp_nistz256_mul_mont expects a[0-3] input pre-loaded +# to $a0-$a3 and b[0] - to $bi +.type __ecp_nistz256_mul_mont,\@function +.align 4 +__ecp_nistz256_mul_mont: + mulld $acc0,$a0,$bi # a[0]*b[0] + mulhdu $t0,$a0,$bi + + mulld $acc1,$a1,$bi # a[1]*b[0] + mulhdu $t1,$a1,$bi + + mulld $acc2,$a2,$bi # a[2]*b[0] + mulhdu $t2,$a2,$bi + + mulld $acc3,$a3,$bi # a[3]*b[0] + mulhdu $t3,$a3,$bi + ld $bi,8($bp) # b[1] + + addc $acc1,$acc1,$t0 # accumulate high parts of multiplication + sldi $t0,$acc0,32 + adde $acc2,$acc2,$t1 + srdi $t1,$acc0,32 + adde $acc3,$acc3,$t2 + addze $acc4,$t3 + li $acc5,0 +___ +for($i=1;$i<4;$i++) { + ################################################################ + # Reduction iteration is normally performed by accumulating + # result of multiplication of modulus by "magic" digit [and + # omitting least significant word, which is guaranteed to + # be 0], but thanks to special form of modulus and "magic" + # digit being equal to least significant word, it can be + # performed with additions and subtractions alone. Indeed: + # + # ffff0001.00000000.0000ffff.ffffffff + # * abcdefgh + # + xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.abcdefgh + # + # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we + # rewrite above as: + # + # xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.abcdefgh + # + abcdefgh.abcdefgh.0000abcd.efgh0000.00000000 + # - 0000abcd.efgh0000.00000000.00000000.abcdefgh + # + # or marking redundant operations: + # + # xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.-------- + # + abcdefgh.abcdefgh.0000abcd.efgh0000.-------- + # - 0000abcd.efgh0000.--------.--------.-------- + +$code.=<<___; + subfc $t2,$t0,$acc0 # "*0xffff0001" + subfe $t3,$t1,$acc0 + addc $acc0,$acc1,$t0 # +=acc[0]<<96 and omit acc[0] + adde $acc1,$acc2,$t1 + adde $acc2,$acc3,$t2 # +=acc[0]*0xffff0001 + adde $acc3,$acc4,$t3 + addze $acc4,$acc5 + + mulld $t0,$a0,$bi # lo(a[0]*b[i]) + mulld $t1,$a1,$bi # lo(a[1]*b[i]) + mulld $t2,$a2,$bi # lo(a[2]*b[i]) + mulld $t3,$a3,$bi # lo(a[3]*b[i]) + addc $acc0,$acc0,$t0 # accumulate low parts of multiplication + mulhdu $t0,$a0,$bi # hi(a[0]*b[i]) + adde $acc1,$acc1,$t1 + mulhdu $t1,$a1,$bi # hi(a[1]*b[i]) + adde $acc2,$acc2,$t2 + mulhdu $t2,$a2,$bi # hi(a[2]*b[i]) + adde $acc3,$acc3,$t3 + mulhdu $t3,$a3,$bi # hi(a[3]*b[i]) + addze $acc4,$acc4 +___ +$code.=<<___ if ($i<3); + ld $bi,8*($i+1)($bp) # b[$i+1] +___ +$code.=<<___; + addc $acc1,$acc1,$t0 # accumulate high parts of multiplication + sldi $t0,$acc0,32 + adde $acc2,$acc2,$t1 + srdi $t1,$acc0,32 + adde $acc3,$acc3,$t2 + adde $acc4,$acc4,$t3 + li $acc5,0 + addze $acc5,$acc5 +___ +} +$code.=<<___; + # last reduction + subfc $t2,$t0,$acc0 # "*0xffff0001" + subfe $t3,$t1,$acc0 + addc $acc0,$acc1,$t0 # +=acc[0]<<96 and omit acc[0] + adde $acc1,$acc2,$t1 + adde $acc2,$acc3,$t2 # +=acc[0]*0xffff0001 + adde $acc3,$acc4,$t3 + addze $acc4,$acc5 + + li $t2,0 + addic $acc0,$acc0,1 # ret -= modulus + subfe $acc1,$poly1,$acc1 + subfe $acc2,$t2,$acc2 + subfe $acc3,$poly3,$acc3 + subfe $acc4,$t2,$acc4 + + addc $acc0,$acc0,$acc4 # ret += modulus if borrow + and $t1,$poly1,$acc4 + and $t3,$poly3,$acc4 + adde $acc1,$acc1,$t1 + addze $acc2,$acc2 + adde $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,1,0 + .long 0 +.size __ecp_nistz256_mul_mont,.-__ecp_nistz256_mul_mont + +# note that __ecp_nistz256_sqr_mont expects a[0-3] input pre-loaded +# to $a0-$a3 +.type __ecp_nistz256_sqr_mont,\@function +.align 4 +__ecp_nistz256_sqr_mont: + ################################################################ + # | | | | | |a1*a0| | + # | | | | |a2*a0| | | + # | |a3*a2|a3*a0| | | | + # | | | |a2*a1| | | | + # | | |a3*a1| | | | | + # *| | | | | | | | 2| + # +|a3*a3|a2*a2|a1*a1|a0*a0| + # |--+--+--+--+--+--+--+--| + # |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is $accx, i.e. follow $accx + # + # "can't overflow" below mark carrying into high part of + # multiplication result, which can't overflow, because it + # can never be all ones. + + mulld $acc1,$a1,$a0 # a[1]*a[0] + mulhdu $t1,$a1,$a0 + mulld $acc2,$a2,$a0 # a[2]*a[0] + mulhdu $t2,$a2,$a0 + mulld $acc3,$a3,$a0 # a[3]*a[0] + mulhdu $acc4,$a3,$a0 + + addc $acc2,$acc2,$t1 # accumulate high parts of multiplication + mulld $t0,$a2,$a1 # a[2]*a[1] + mulhdu $t1,$a2,$a1 + adde $acc3,$acc3,$t2 + mulld $t2,$a3,$a1 # a[3]*a[1] + mulhdu $t3,$a3,$a1 + addze $acc4,$acc4 # can't overflow + + mulld $acc5,$a3,$a2 # a[3]*a[2] + mulhdu $acc6,$a3,$a2 + + addc $t1,$t1,$t2 # accumulate high parts of multiplication + addze $t2,$t3 # can't overflow + + addc $acc3,$acc3,$t0 # accumulate low parts of multiplication + adde $acc4,$acc4,$t1 + adde $acc5,$acc5,$t2 + addze $acc6,$acc6 # can't overflow + + addc $acc1,$acc1,$acc1 # acc[1-6]*=2 + adde $acc2,$acc2,$acc2 + adde $acc3,$acc3,$acc3 + adde $acc4,$acc4,$acc4 + adde $acc5,$acc5,$acc5 + adde $acc6,$acc6,$acc6 + li $acc7,0 + addze $acc7,$acc7 + + mulld $acc0,$a0,$a0 # a[0]*a[0] + mulhdu $a0,$a0,$a0 + mulld $t1,$a1,$a1 # a[1]*a[1] + mulhdu $a1,$a1,$a1 + mulld $t2,$a2,$a2 # a[2]*a[2] + mulhdu $a2,$a2,$a2 + mulld $t3,$a3,$a3 # a[3]*a[3] + mulhdu $a3,$a3,$a3 + addc $acc1,$acc1,$a0 # +a[i]*a[i] + sldi $t0,$acc0,32 + adde $acc2,$acc2,$t1 + srdi $t1,$acc0,32 + adde $acc3,$acc3,$a1 + adde $acc4,$acc4,$t2 + adde $acc5,$acc5,$a2 + adde $acc6,$acc6,$t3 + adde $acc7,$acc7,$a3 +___ +for($i=0;$i<3;$i++) { # reductions, see commentary in + # multiplication for details +$code.=<<___; + subfc $t2,$t0,$acc0 # "*0xffff0001" + subfe $t3,$t1,$acc0 + addc $acc0,$acc1,$t0 # +=acc[0]<<96 and omit acc[0] + sldi $t0,$acc0,32 + adde $acc1,$acc2,$t1 + srdi $t1,$acc0,32 + adde $acc2,$acc3,$t2 # +=acc[0]*0xffff0001 + addze $acc3,$t3 # can't overflow +___ +} +$code.=<<___; + subfc $t2,$t0,$acc0 # "*0xffff0001" + subfe $t3,$t1,$acc0 + addc $acc0,$acc1,$t0 # +=acc[0]<<96 and omit acc[0] + adde $acc1,$acc2,$t1 + adde $acc2,$acc3,$t2 # +=acc[0]*0xffff0001 + addze $acc3,$t3 # can't overflow + + addc $acc0,$acc0,$acc4 # accumulate upper half + adde $acc1,$acc1,$acc5 + adde $acc2,$acc2,$acc6 + adde $acc3,$acc3,$acc7 + li $t2,0 + addze $acc4,$t2 + + addic $acc0,$acc0,1 # ret -= modulus + subfe $acc1,$poly1,$acc1 + subfe $acc2,$t2,$acc2 + subfe $acc3,$poly3,$acc3 + subfe $acc4,$t2,$acc4 + + addc $acc0,$acc0,$acc4 # ret += modulus if borrow + and $t1,$poly1,$acc4 + and $t3,$poly3,$acc4 + adde $acc1,$acc1,$t1 + addze $acc2,$acc2 + adde $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,1,0 + .long 0 +.size __ecp_nistz256_sqr_mont,.-__ecp_nistz256_sqr_mont + +# Note that __ecp_nistz256_add expects both input vectors pre-loaded to +# $a0-$a3 and $t0-$t3. This is done because it's used in multiple +# contexts, e.g. in multiplication by 2 and 3... +.type __ecp_nistz256_add,\@function +.align 4 +__ecp_nistz256_add: + addc $acc0,$acc0,$t0 # ret = a+b + adde $acc1,$acc1,$t1 + adde $acc2,$acc2,$t2 + li $t2,0 + adde $acc3,$acc3,$t3 + addze $t0,$t2 + + # if a+b >= modulus, subtract modulus + # + # But since comparison implies subtraction, we subtract + # modulus and then add it back if subtraction borrowed. + + subic $acc0,$acc0,-1 + subfe $acc1,$poly1,$acc1 + subfe $acc2,$t2,$acc2 + subfe $acc3,$poly3,$acc3 + subfe $t0,$t2,$t0 + + addc $acc0,$acc0,$t0 + and $t1,$poly1,$t0 + and $t3,$poly3,$t0 + adde $acc1,$acc1,$t1 + addze $acc2,$acc2 + adde $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size __ecp_nistz256_add,.-__ecp_nistz256_add + +.type __ecp_nistz256_sub_from,\@function +.align 4 +__ecp_nistz256_sub_from: + ld $t0,0($bp) + ld $t1,8($bp) + ld $t2,16($bp) + ld $t3,24($bp) + subfc $acc0,$t0,$acc0 # ret = a-b + subfe $acc1,$t1,$acc1 + subfe $acc2,$t2,$acc2 + subfe $acc3,$t3,$acc3 + subfe $t0,$t0,$t0 # t0 = borrow ? -1 : 0 + + # if a-b borrowed, add modulus + + addc $acc0,$acc0,$t0 # ret -= modulus & t0 + and $t1,$poly1,$t0 + and $t3,$poly3,$t0 + adde $acc1,$acc1,$t1 + addze $acc2,$acc2 + adde $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size __ecp_nistz256_sub_from,.-__ecp_nistz256_sub_from + +.type __ecp_nistz256_sub_morf,\@function +.align 4 +__ecp_nistz256_sub_morf: + ld $t0,0($bp) + ld $t1,8($bp) + ld $t2,16($bp) + ld $t3,24($bp) + subfc $acc0,$acc0,$t0 # ret = b-a + subfe $acc1,$acc1,$t1 + subfe $acc2,$acc2,$t2 + subfe $acc3,$acc3,$t3 + subfe $t0,$t0,$t0 # t0 = borrow ? -1 : 0 + + # if b-a borrowed, add modulus + + addc $acc0,$acc0,$t0 # ret -= modulus & t0 + and $t1,$poly1,$t0 + and $t3,$poly3,$t0 + adde $acc1,$acc1,$t1 + addze $acc2,$acc2 + adde $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size __ecp_nistz256_sub_morf,.-__ecp_nistz256_sub_morf + +.type __ecp_nistz256_div_by_2,\@function +.align 4 +__ecp_nistz256_div_by_2: + andi. $t0,$acc0,1 + addic $acc0,$acc0,-1 # a += modulus + neg $t0,$t0 + adde $acc1,$acc1,$poly1 + not $t0,$t0 + addze $acc2,$acc2 + li $t2,0 + adde $acc3,$acc3,$poly3 + and $t1,$poly1,$t0 + addze $ap,$t2 # ap = carry + and $t3,$poly3,$t0 + + subfc $acc0,$t0,$acc0 # a -= modulus if a was even + subfe $acc1,$t1,$acc1 + subfe $acc2,$t2,$acc2 + subfe $acc3,$t3,$acc3 + subfe $ap, $t2,$ap + + srdi $acc0,$acc0,1 + sldi $t0,$acc1,63 + srdi $acc1,$acc1,1 + sldi $t1,$acc2,63 + srdi $acc2,$acc2,1 + sldi $t2,$acc3,63 + srdi $acc3,$acc3,1 + sldi $t3,$ap,63 + or $acc0,$acc0,$t0 + or $acc1,$acc1,$t1 + or $acc2,$acc2,$t2 + or $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,1,0 + .long 0 +.size __ecp_nistz256_div_by_2,.-__ecp_nistz256_div_by_2 +___ +######################################################################## +# following subroutines are "literal" implementation of those found in +# ecp_nistz256.c +# +######################################################################## +# void ecp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp); +# +if (1) { +my $FRAME=64+32*4+12*8; +my ($S,$M,$Zsqr,$tmp0)=map(64+32*$_,(0..3)); +# above map() describes stack layout with 4 temporary +# 256-bit vectors on top. +my ($rp_real,$ap_real) = map("r$_",(20,21)); + +$code.=<<___; +.globl ecp_nistz256_point_double +.align 5 +ecp_nistz256_point_double: + stdu $sp,-$FRAME($sp) + mflr r0 + std r20,$FRAME-8*12($sp) + std r21,$FRAME-8*11($sp) + std r22,$FRAME-8*10($sp) + std r23,$FRAME-8*9($sp) + std r24,$FRAME-8*8($sp) + std r25,$FRAME-8*7($sp) + std r26,$FRAME-8*6($sp) + std r27,$FRAME-8*5($sp) + std r28,$FRAME-8*4($sp) + std r29,$FRAME-8*3($sp) + std r30,$FRAME-8*2($sp) + std r31,$FRAME-8*1($sp) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 +.Ldouble_shortcut: + ld $acc0,32($ap) + ld $acc1,40($ap) + ld $acc2,48($ap) + ld $acc3,56($ap) + mr $t0,$acc0 + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + ld $a0,64($ap) # forward load for p256_sqr_mont + ld $a1,72($ap) + ld $a2,80($ap) + ld $a3,88($ap) + mr $rp_real,$rp + mr $ap_real,$ap + addi $rp,$sp,$S + bl __ecp_nistz256_add # p256_mul_by_2(S, in_y); + + addi $rp,$sp,$Zsqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Zsqr, in_z); + + ld $t0,0($ap_real) + ld $t1,8($ap_real) + ld $t2,16($ap_real) + ld $t3,24($ap_real) + mr $a0,$acc0 # put Zsqr aside for p256_sub + mr $a1,$acc1 + mr $a2,$acc2 + mr $a3,$acc3 + addi $rp,$sp,$M + bl __ecp_nistz256_add # p256_add(M, Zsqr, in_x); + + addi $bp,$ap_real,0 + mr $acc0,$a0 # restore Zsqr + mr $acc1,$a1 + mr $acc2,$a2 + mr $acc3,$a3 + ld $a0,$S+0($sp) # forward load for p256_sqr_mont + ld $a1,$S+8($sp) + ld $a2,$S+16($sp) + ld $a3,$S+24($sp) + addi $rp,$sp,$Zsqr + bl __ecp_nistz256_sub_morf # p256_sub(Zsqr, in_x, Zsqr); + + addi $rp,$sp,$S + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(S, S); + + ld $bi,32($ap_real) + ld $a0,64($ap_real) + ld $a1,72($ap_real) + ld $a2,80($ap_real) + ld $a3,88($ap_real) + addi $bp,$ap_real,32 + addi $rp,$sp,$tmp0 + bl __ecp_nistz256_mul_mont # p256_mul_mont(tmp0, in_z, in_y); + + mr $t0,$acc0 + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + ld $a0,$S+0($sp) # forward load for p256_sqr_mont + ld $a1,$S+8($sp) + ld $a2,$S+16($sp) + ld $a3,$S+24($sp) + addi $rp,$rp_real,64 + bl __ecp_nistz256_add # p256_mul_by_2(res_z, tmp0); + + addi $rp,$sp,$tmp0 + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(tmp0, S); + + ld $bi,$Zsqr($sp) # forward load for p256_mul_mont + ld $a0,$M+0($sp) + ld $a1,$M+8($sp) + ld $a2,$M+16($sp) + ld $a3,$M+24($sp) + addi $rp,$rp_real,32 + bl __ecp_nistz256_div_by_2 # p256_div_by_2(res_y, tmp0); + + addi $bp,$sp,$Zsqr + addi $rp,$sp,$M + bl __ecp_nistz256_mul_mont # p256_mul_mont(M, M, Zsqr); + + mr $t0,$acc0 # duplicate M + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + mr $a0,$acc0 # put M aside + mr $a1,$acc1 + mr $a2,$acc2 + mr $a3,$acc3 + addi $rp,$sp,$M + bl __ecp_nistz256_add + mr $t0,$a0 # restore M + mr $t1,$a1 + mr $t2,$a2 + mr $t3,$a3 + ld $bi,0($ap_real) # forward load for p256_mul_mont + ld $a0,$S+0($sp) + ld $a1,$S+8($sp) + ld $a2,$S+16($sp) + ld $a3,$S+24($sp) + bl __ecp_nistz256_add # p256_mul_by_3(M, M); + + addi $bp,$ap_real,0 + addi $rp,$sp,$S + bl __ecp_nistz256_mul_mont # p256_mul_mont(S, S, in_x); + + mr $t0,$acc0 + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + ld $a0,$M+0($sp) # forward load for p256_sqr_mont + ld $a1,$M+8($sp) + ld $a2,$M+16($sp) + ld $a3,$M+24($sp) + addi $rp,$sp,$tmp0 + bl __ecp_nistz256_add # p256_mul_by_2(tmp0, S); + + addi $rp,$rp_real,0 + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(res_x, M); + + addi $bp,$sp,$tmp0 + bl __ecp_nistz256_sub_from # p256_sub(res_x, res_x, tmp0); + + addi $bp,$sp,$S + addi $rp,$sp,$S + bl __ecp_nistz256_sub_morf # p256_sub(S, S, res_x); + + ld $bi,$M($sp) + mr $a0,$acc0 # copy S + mr $a1,$acc1 + mr $a2,$acc2 + mr $a3,$acc3 + addi $bp,$sp,$M + bl __ecp_nistz256_mul_mont # p256_mul_mont(S, S, M); + + addi $bp,$rp_real,32 + addi $rp,$rp_real,32 + bl __ecp_nistz256_sub_from # p256_sub(res_y, S, res_y); + + mtlr r0 + ld r20,$FRAME-8*12($sp) + ld r21,$FRAME-8*11($sp) + ld r22,$FRAME-8*10($sp) + ld r23,$FRAME-8*9($sp) + ld r24,$FRAME-8*8($sp) + ld r25,$FRAME-8*7($sp) + ld r26,$FRAME-8*6($sp) + ld r27,$FRAME-8*5($sp) + ld r28,$FRAME-8*4($sp) + ld r29,$FRAME-8*3($sp) + ld r30,$FRAME-8*2($sp) + ld r31,$FRAME-8*1($sp) + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,4,0,0x80,12,2,0 + .long 0 +.size ecp_nistz256_point_double,.-ecp_nistz256_point_double +___ +} + +######################################################################## +# void ecp_nistz256_point_add(P256_POINT *out,const P256_POINT *in1, +# const P256_POINT *in2); +if (1) { +my $FRAME = 64 + 32*12 + 16*8; +my ($res_x,$res_y,$res_z, + $H,$Hsqr,$R,$Rsqr,$Hcub, + $U1,$U2,$S1,$S2)=map(64+32*$_,(0..11)); +my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr); +# above map() describes stack layout with 12 temporary +# 256-bit vectors on top. +my ($rp_real,$ap_real,$bp_real,$in1infty,$in2infty,$temp)=map("r$_",(16..21)); + +$code.=<<___; +.globl ecp_nistz256_point_add +.align 5 +ecp_nistz256_point_add: + stdu $sp,-$FRAME($sp) + mflr r0 + std r16,$FRAME-8*16($sp) + std r17,$FRAME-8*15($sp) + std r18,$FRAME-8*14($sp) + std r19,$FRAME-8*13($sp) + std r20,$FRAME-8*12($sp) + std r21,$FRAME-8*11($sp) + std r22,$FRAME-8*10($sp) + std r23,$FRAME-8*9($sp) + std r24,$FRAME-8*8($sp) + std r25,$FRAME-8*7($sp) + std r26,$FRAME-8*6($sp) + std r27,$FRAME-8*5($sp) + std r28,$FRAME-8*4($sp) + std r29,$FRAME-8*3($sp) + std r30,$FRAME-8*2($sp) + std r31,$FRAME-8*1($sp) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + ld $a0,64($bp) # in2_z + ld $a1,72($bp) + ld $a2,80($bp) + ld $a3,88($bp) + mr $rp_real,$rp + mr $ap_real,$ap + mr $bp_real,$bp + or $t0,$a0,$a1 + or $t2,$a2,$a3 + or $in2infty,$t0,$t2 + neg $t0,$in2infty + or $in2infty,$in2infty,$t0 + sradi $in2infty,$in2infty,63 # !in2infty + addi $rp,$sp,$Z2sqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Z2sqr, in2_z); + + ld $a0,64($ap_real) # in1_z + ld $a1,72($ap_real) + ld $a2,80($ap_real) + ld $a3,88($ap_real) + or $t0,$a0,$a1 + or $t2,$a2,$a3 + or $in1infty,$t0,$t2 + neg $t0,$in1infty + or $in1infty,$in1infty,$t0 + sradi $in1infty,$in1infty,63 # !in1infty + addi $rp,$sp,$Z1sqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Z1sqr, in1_z); + + ld $bi,64($bp_real) + ld $a0,$Z2sqr+0($sp) + ld $a1,$Z2sqr+8($sp) + ld $a2,$Z2sqr+16($sp) + ld $a3,$Z2sqr+24($sp) + addi $bp,$bp_real,64 + addi $rp,$sp,$S1 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S1, Z2sqr, in2_z); + + ld $bi,64($ap_real) + ld $a0,$Z1sqr+0($sp) + ld $a1,$Z1sqr+8($sp) + ld $a2,$Z1sqr+16($sp) + ld $a3,$Z1sqr+24($sp) + addi $bp,$ap_real,64 + addi $rp,$sp,$S2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S2, Z1sqr, in1_z); + + ld $bi,32($ap_real) + ld $a0,$S1+0($sp) + ld $a1,$S1+8($sp) + ld $a2,$S1+16($sp) + ld $a3,$S1+24($sp) + addi $bp,$ap_real,32 + addi $rp,$sp,$S1 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S1, S1, in1_y); + + ld $bi,32($bp_real) + ld $a0,$S2+0($sp) + ld $a1,$S2+8($sp) + ld $a2,$S2+16($sp) + ld $a3,$S2+24($sp) + addi $bp,$bp_real,32 + addi $rp,$sp,$S2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S2, S2, in2_y); + + addi $bp,$sp,$S1 + ld $bi,$Z2sqr($sp) # forward load for p256_mul_mont + ld $a0,0($ap_real) + ld $a1,8($ap_real) + ld $a2,16($ap_real) + ld $a3,24($ap_real) + addi $rp,$sp,$R + bl __ecp_nistz256_sub_from # p256_sub(R, S2, S1); + + or $acc0,$acc0,$acc1 # see if result is zero + or $acc2,$acc2,$acc3 + or $temp,$acc0,$acc2 + + addi $bp,$sp,$Z2sqr + addi $rp,$sp,$U1 + bl __ecp_nistz256_mul_mont # p256_mul_mont(U1, in1_x, Z2sqr); + + ld $bi,$Z1sqr($sp) + ld $a0,0($bp_real) + ld $a1,8($bp_real) + ld $a2,16($bp_real) + ld $a3,24($bp_real) + addi $bp,$sp,$Z1sqr + addi $rp,$sp,$U2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(U2, in2_x, Z1sqr); + + addi $bp,$sp,$U1 + ld $a0,$R+0($sp) # forward load for p256_sqr_mont + ld $a1,$R+8($sp) + ld $a2,$R+16($sp) + ld $a3,$R+24($sp) + addi $rp,$sp,$H + bl __ecp_nistz256_sub_from # p256_sub(H, U2, U1); + + or $acc0,$acc0,$acc1 # see if result is zero + or $acc2,$acc2,$acc3 + or. $acc0,$acc0,$acc2 + bne .Ladd_proceed # is_equal(U1,U2)? + + and. $t0,$in1infty,$in2infty + beq .Ladd_proceed # (in1infty || in2infty)? + + cmpldi $temp,0 + beq .Ladd_double # is_equal(S1,S2)? + + xor $a0,$a0,$a0 + std $a0,0($rp_real) + std $a0,8($rp_real) + std $a0,16($rp_real) + std $a0,24($rp_real) + std $a0,32($rp_real) + std $a0,40($rp_real) + std $a0,48($rp_real) + std $a0,56($rp_real) + std $a0,64($rp_real) + std $a0,72($rp_real) + std $a0,80($rp_real) + std $a0,88($rp_real) + b .Ladd_done + +.align 4 +.Ladd_double: + ld $bp,0($sp) # back-link + mr $ap,$ap_real + mr $rp,$rp_real + ld r16,$FRAME-8*16($sp) + ld r17,$FRAME-8*15($sp) + ld r18,$FRAME-8*14($sp) + ld r19,$FRAME-8*13($sp) + stdu $bp,$FRAME-288($sp) # difference in stack frame sizes + b .Ldouble_shortcut + +.align 4 +.Ladd_proceed: + addi $rp,$sp,$Rsqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Rsqr, R); + + ld $bi,64($ap_real) + ld $a0,$H+0($sp) + ld $a1,$H+8($sp) + ld $a2,$H+16($sp) + ld $a3,$H+24($sp) + addi $bp,$ap_real,64 + addi $rp,$sp,$res_z + bl __ecp_nistz256_mul_mont # p256_mul_mont(res_z, H, in1_z); + + ld $a0,$H+0($sp) + ld $a1,$H+8($sp) + ld $a2,$H+16($sp) + ld $a3,$H+24($sp) + addi $rp,$sp,$Hsqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Hsqr, H); + + ld $bi,64($bp_real) + ld $a0,$res_z+0($sp) + ld $a1,$res_z+8($sp) + ld $a2,$res_z+16($sp) + ld $a3,$res_z+24($sp) + addi $bp,$bp_real,64 + addi $rp,$sp,$res_z + bl __ecp_nistz256_mul_mont # p256_mul_mont(res_z, res_z, in2_z); + + ld $bi,$H($sp) + ld $a0,$Hsqr+0($sp) + ld $a1,$Hsqr+8($sp) + ld $a2,$Hsqr+16($sp) + ld $a3,$Hsqr+24($sp) + addi $bp,$sp,$H + addi $rp,$sp,$Hcub + bl __ecp_nistz256_mul_mont # p256_mul_mont(Hcub, Hsqr, H); + + ld $bi,$Hsqr($sp) + ld $a0,$U1+0($sp) + ld $a1,$U1+8($sp) + ld $a2,$U1+16($sp) + ld $a3,$U1+24($sp) + addi $bp,$sp,$Hsqr + addi $rp,$sp,$U2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(U2, U1, Hsqr); + + mr $t0,$acc0 + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + addi $rp,$sp,$Hsqr + bl __ecp_nistz256_add # p256_mul_by_2(Hsqr, U2); + + addi $bp,$sp,$Rsqr + addi $rp,$sp,$res_x + bl __ecp_nistz256_sub_morf # p256_sub(res_x, Rsqr, Hsqr); + + addi $bp,$sp,$Hcub + bl __ecp_nistz256_sub_from # p256_sub(res_x, res_x, Hcub); + + addi $bp,$sp,$U2 + ld $bi,$Hcub($sp) # forward load for p256_mul_mont + ld $a0,$S1+0($sp) + ld $a1,$S1+8($sp) + ld $a2,$S1+16($sp) + ld $a3,$S1+24($sp) + addi $rp,$sp,$res_y + bl __ecp_nistz256_sub_morf # p256_sub(res_y, U2, res_x); + + addi $bp,$sp,$Hcub + addi $rp,$sp,$S2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S2, S1, Hcub); + + ld $bi,$R($sp) + ld $a0,$res_y+0($sp) + ld $a1,$res_y+8($sp) + ld $a2,$res_y+16($sp) + ld $a3,$res_y+24($sp) + addi $bp,$sp,$R + addi $rp,$sp,$res_y + bl __ecp_nistz256_mul_mont # p256_mul_mont(res_y, res_y, R); + + addi $bp,$sp,$S2 + bl __ecp_nistz256_sub_from # p256_sub(res_y, res_y, S2); + + ld $t0,0($bp_real) # in2 + ld $t1,8($bp_real) + ld $t2,16($bp_real) + ld $t3,24($bp_real) + ld $a0,$res_x+0($sp) # res + ld $a1,$res_x+8($sp) + ld $a2,$res_x+16($sp) + ld $a3,$res_x+24($sp) +___ +for($i=0;$i<64;$i+=32) { # conditional moves +$code.=<<___; + ld $acc0,$i+0($ap_real) # in1 + ld $acc1,$i+8($ap_real) + ld $acc2,$i+16($ap_real) + ld $acc3,$i+24($ap_real) + andc $t0,$t0,$in1infty + andc $t1,$t1,$in1infty + andc $t2,$t2,$in1infty + andc $t3,$t3,$in1infty + and $a0,$a0,$in1infty + and $a1,$a1,$in1infty + and $a2,$a2,$in1infty + and $a3,$a3,$in1infty + or $t0,$t0,$a0 + or $t1,$t1,$a1 + or $t2,$t2,$a2 + or $t3,$t3,$a3 + andc $acc0,$acc0,$in2infty + andc $acc1,$acc1,$in2infty + andc $acc2,$acc2,$in2infty + andc $acc3,$acc3,$in2infty + and $t0,$t0,$in2infty + and $t1,$t1,$in2infty + and $t2,$t2,$in2infty + and $t3,$t3,$in2infty + or $acc0,$acc0,$t0 + or $acc1,$acc1,$t1 + or $acc2,$acc2,$t2 + or $acc3,$acc3,$t3 + + ld $t0,$i+32($bp_real) # in2 + ld $t1,$i+40($bp_real) + ld $t2,$i+48($bp_real) + ld $t3,$i+56($bp_real) + ld $a0,$res_x+$i+32($sp) + ld $a1,$res_x+$i+40($sp) + ld $a2,$res_x+$i+48($sp) + ld $a3,$res_x+$i+56($sp) + std $acc0,$i+0($rp_real) + std $acc1,$i+8($rp_real) + std $acc2,$i+16($rp_real) + std $acc3,$i+24($rp_real) +___ +} +$code.=<<___; + ld $acc0,$i+0($ap_real) # in1 + ld $acc1,$i+8($ap_real) + ld $acc2,$i+16($ap_real) + ld $acc3,$i+24($ap_real) + andc $t0,$t0,$in1infty + andc $t1,$t1,$in1infty + andc $t2,$t2,$in1infty + andc $t3,$t3,$in1infty + and $a0,$a0,$in1infty + and $a1,$a1,$in1infty + and $a2,$a2,$in1infty + and $a3,$a3,$in1infty + or $t0,$t0,$a0 + or $t1,$t1,$a1 + or $t2,$t2,$a2 + or $t3,$t3,$a3 + andc $acc0,$acc0,$in2infty + andc $acc1,$acc1,$in2infty + andc $acc2,$acc2,$in2infty + andc $acc3,$acc3,$in2infty + and $t0,$t0,$in2infty + and $t1,$t1,$in2infty + and $t2,$t2,$in2infty + and $t3,$t3,$in2infty + or $acc0,$acc0,$t0 + or $acc1,$acc1,$t1 + or $acc2,$acc2,$t2 + or $acc3,$acc3,$t3 + std $acc0,$i+0($rp_real) + std $acc1,$i+8($rp_real) + std $acc2,$i+16($rp_real) + std $acc3,$i+24($rp_real) + +.Ladd_done: + mtlr r0 + ld r16,$FRAME-8*16($sp) + ld r17,$FRAME-8*15($sp) + ld r18,$FRAME-8*14($sp) + ld r19,$FRAME-8*13($sp) + ld r20,$FRAME-8*12($sp) + ld r21,$FRAME-8*11($sp) + ld r22,$FRAME-8*10($sp) + ld r23,$FRAME-8*9($sp) + ld r24,$FRAME-8*8($sp) + ld r25,$FRAME-8*7($sp) + ld r26,$FRAME-8*6($sp) + ld r27,$FRAME-8*5($sp) + ld r28,$FRAME-8*4($sp) + ld r29,$FRAME-8*3($sp) + ld r30,$FRAME-8*2($sp) + ld r31,$FRAME-8*1($sp) + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,4,0,0x80,16,3,0 + .long 0 +.size ecp_nistz256_point_add,.-ecp_nistz256_point_add +___ +} + +######################################################################## +# void ecp_nistz256_point_add_affine(P256_POINT *out,const P256_POINT *in1, +# const P256_POINT_AFFINE *in2); +if (1) { +my $FRAME = 64 + 32*10 + 16*8; +my ($res_x,$res_y,$res_z, + $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(64+32*$_,(0..9)); +my $Z1sqr = $S2; +# above map() describes stack layout with 10 temporary +# 256-bit vectors on top. +my ($rp_real,$ap_real,$bp_real,$in1infty,$in2infty,$temp)=map("r$_",(16..21)); + +$code.=<<___; +.globl ecp_nistz256_point_add_affine +.align 5 +ecp_nistz256_point_add_affine: + stdu $sp,-$FRAME($sp) + mflr r0 + std r16,$FRAME-8*16($sp) + std r17,$FRAME-8*15($sp) + std r18,$FRAME-8*14($sp) + std r19,$FRAME-8*13($sp) + std r20,$FRAME-8*12($sp) + std r21,$FRAME-8*11($sp) + std r22,$FRAME-8*10($sp) + std r23,$FRAME-8*9($sp) + std r24,$FRAME-8*8($sp) + std r25,$FRAME-8*7($sp) + std r26,$FRAME-8*6($sp) + std r27,$FRAME-8*5($sp) + std r28,$FRAME-8*4($sp) + std r29,$FRAME-8*3($sp) + std r30,$FRAME-8*2($sp) + std r31,$FRAME-8*1($sp) + + li $poly1,-1 + srdi $poly1,$poly1,32 # 0x00000000ffffffff + li $poly3,1 + orc $poly3,$poly3,$poly1 # 0xffffffff00000001 + + mr $rp_real,$rp + mr $ap_real,$ap + mr $bp_real,$bp + + ld $a0,64($ap) # in1_z + ld $a1,72($ap) + ld $a2,80($ap) + ld $a3,88($ap) + or $t0,$a0,$a1 + or $t2,$a2,$a3 + or $in1infty,$t0,$t2 + neg $t0,$in1infty + or $in1infty,$in1infty,$t0 + sradi $in1infty,$in1infty,63 # !in1infty + + ld $acc0,0($bp) # in2_x + ld $acc1,8($bp) + ld $acc2,16($bp) + ld $acc3,24($bp) + ld $t0,32($bp) # in2_y + ld $t1,40($bp) + ld $t2,48($bp) + ld $t3,56($bp) + or $acc0,$acc0,$acc1 + or $acc2,$acc2,$acc3 + or $acc0,$acc0,$acc2 + or $t0,$t0,$t1 + or $t2,$t2,$t3 + or $t0,$t0,$t2 + or $in2infty,$acc0,$t0 + neg $t0,$in2infty + or $in2infty,$in2infty,$t0 + sradi $in2infty,$in2infty,63 # !in2infty + + addi $rp,$sp,$Z1sqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Z1sqr, in1_z); + + mr $a0,$acc0 + mr $a1,$acc1 + mr $a2,$acc2 + mr $a3,$acc3 + ld $bi,0($bp_real) + addi $bp,$bp_real,0 + addi $rp,$sp,$U2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(U2, Z1sqr, in2_x); + + addi $bp,$ap_real,0 + ld $bi,64($ap_real) # forward load for p256_mul_mont + ld $a0,$Z1sqr+0($sp) + ld $a1,$Z1sqr+8($sp) + ld $a2,$Z1sqr+16($sp) + ld $a3,$Z1sqr+24($sp) + addi $rp,$sp,$H + bl __ecp_nistz256_sub_from # p256_sub(H, U2, in1_x); + + addi $bp,$ap_real,64 + addi $rp,$sp,$S2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S2, Z1sqr, in1_z); + + ld $bi,64($ap_real) + ld $a0,$H+0($sp) + ld $a1,$H+8($sp) + ld $a2,$H+16($sp) + ld $a3,$H+24($sp) + addi $bp,$ap_real,64 + addi $rp,$sp,$res_z + bl __ecp_nistz256_mul_mont # p256_mul_mont(res_z, H, in1_z); + + ld $bi,32($bp_real) + ld $a0,$S2+0($sp) + ld $a1,$S2+8($sp) + ld $a2,$S2+16($sp) + ld $a3,$S2+24($sp) + addi $bp,$bp_real,32 + addi $rp,$sp,$S2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S2, S2, in2_y); + + addi $bp,$ap_real,32 + ld $a0,$H+0($sp) # forward load for p256_sqr_mont + ld $a1,$H+8($sp) + ld $a2,$H+16($sp) + ld $a3,$H+24($sp) + addi $rp,$sp,$R + bl __ecp_nistz256_sub_from # p256_sub(R, S2, in1_y); + + addi $rp,$sp,$Hsqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Hsqr, H); + + ld $a0,$R+0($sp) + ld $a1,$R+8($sp) + ld $a2,$R+16($sp) + ld $a3,$R+24($sp) + addi $rp,$sp,$Rsqr + bl __ecp_nistz256_sqr_mont # p256_sqr_mont(Rsqr, R); + + ld $bi,$H($sp) + ld $a0,$Hsqr+0($sp) + ld $a1,$Hsqr+8($sp) + ld $a2,$Hsqr+16($sp) + ld $a3,$Hsqr+24($sp) + addi $bp,$sp,$H + addi $rp,$sp,$Hcub + bl __ecp_nistz256_mul_mont # p256_mul_mont(Hcub, Hsqr, H); + + ld $bi,0($ap_real) + ld $a0,$Hsqr+0($sp) + ld $a1,$Hsqr+8($sp) + ld $a2,$Hsqr+16($sp) + ld $a3,$Hsqr+24($sp) + addi $bp,$ap_real,0 + addi $rp,$sp,$U2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(U2, in1_x, Hsqr); + + mr $t0,$acc0 + mr $t1,$acc1 + mr $t2,$acc2 + mr $t3,$acc3 + addi $rp,$sp,$Hsqr + bl __ecp_nistz256_add # p256_mul_by_2(Hsqr, U2); + + addi $bp,$sp,$Rsqr + addi $rp,$sp,$res_x + bl __ecp_nistz256_sub_morf # p256_sub(res_x, Rsqr, Hsqr); + + addi $bp,$sp,$Hcub + bl __ecp_nistz256_sub_from # p256_sub(res_x, res_x, Hcub); + + addi $bp,$sp,$U2 + ld $bi,32($ap_real) # forward load for p256_mul_mont + ld $a0,$Hcub+0($sp) + ld $a1,$Hcub+8($sp) + ld $a2,$Hcub+16($sp) + ld $a3,$Hcub+24($sp) + addi $rp,$sp,$res_y + bl __ecp_nistz256_sub_morf # p256_sub(res_y, U2, res_x); + + addi $bp,$ap_real,32 + addi $rp,$sp,$S2 + bl __ecp_nistz256_mul_mont # p256_mul_mont(S2, in1_y, Hcub); + + ld $bi,$R($sp) + ld $a0,$res_y+0($sp) + ld $a1,$res_y+8($sp) + ld $a2,$res_y+16($sp) + ld $a3,$res_y+24($sp) + addi $bp,$sp,$R + addi $rp,$sp,$res_y + bl __ecp_nistz256_mul_mont # p256_mul_mont(res_y, res_y, R); + + addi $bp,$sp,$S2 + bl __ecp_nistz256_sub_from # p256_sub(res_y, res_y, S2); + + ld $t0,0($bp_real) # in2 + ld $t1,8($bp_real) + ld $t2,16($bp_real) + ld $t3,24($bp_real) + ld $a0,$res_x+0($sp) # res + ld $a1,$res_x+8($sp) + ld $a2,$res_x+16($sp) + ld $a3,$res_x+24($sp) +___ +for($i=0;$i<64;$i+=32) { # conditional moves +$code.=<<___; + ld $acc0,$i+0($ap_real) # in1 + ld $acc1,$i+8($ap_real) + ld $acc2,$i+16($ap_real) + ld $acc3,$i+24($ap_real) + andc $t0,$t0,$in1infty + andc $t1,$t1,$in1infty + andc $t2,$t2,$in1infty + andc $t3,$t3,$in1infty + and $a0,$a0,$in1infty + and $a1,$a1,$in1infty + and $a2,$a2,$in1infty + and $a3,$a3,$in1infty + or $t0,$t0,$a0 + or $t1,$t1,$a1 + or $t2,$t2,$a2 + or $t3,$t3,$a3 + andc $acc0,$acc0,$in2infty + andc $acc1,$acc1,$in2infty + andc $acc2,$acc2,$in2infty + andc $acc3,$acc3,$in2infty + and $t0,$t0,$in2infty + and $t1,$t1,$in2infty + and $t2,$t2,$in2infty + and $t3,$t3,$in2infty + or $acc0,$acc0,$t0 + or $acc1,$acc1,$t1 + or $acc2,$acc2,$t2 + or $acc3,$acc3,$t3 +___ +$code.=<<___ if ($i==0); + ld $t0,32($bp_real) # in2 + ld $t1,40($bp_real) + ld $t2,48($bp_real) + ld $t3,56($bp_real) +___ +$code.=<<___ if ($i==32); + li $t0,1 # Lone_mont + not $t1,$poly1 + li $t2,-1 + not $t3,$poly3 +___ +$code.=<<___; + ld $a0,$res_x+$i+32($sp) + ld $a1,$res_x+$i+40($sp) + ld $a2,$res_x+$i+48($sp) + ld $a3,$res_x+$i+56($sp) + std $acc0,$i+0($rp_real) + std $acc1,$i+8($rp_real) + std $acc2,$i+16($rp_real) + std $acc3,$i+24($rp_real) +___ +} +$code.=<<___; + ld $acc0,$i+0($ap_real) # in1 + ld $acc1,$i+8($ap_real) + ld $acc2,$i+16($ap_real) + ld $acc3,$i+24($ap_real) + andc $t0,$t0,$in1infty + andc $t1,$t1,$in1infty + andc $t2,$t2,$in1infty + andc $t3,$t3,$in1infty + and $a0,$a0,$in1infty + and $a1,$a1,$in1infty + and $a2,$a2,$in1infty + and $a3,$a3,$in1infty + or $t0,$t0,$a0 + or $t1,$t1,$a1 + or $t2,$t2,$a2 + or $t3,$t3,$a3 + andc $acc0,$acc0,$in2infty + andc $acc1,$acc1,$in2infty + andc $acc2,$acc2,$in2infty + andc $acc3,$acc3,$in2infty + and $t0,$t0,$in2infty + and $t1,$t1,$in2infty + and $t2,$t2,$in2infty + and $t3,$t3,$in2infty + or $acc0,$acc0,$t0 + or $acc1,$acc1,$t1 + or $acc2,$acc2,$t2 + or $acc3,$acc3,$t3 + std $acc0,$i+0($rp_real) + std $acc1,$i+8($rp_real) + std $acc2,$i+16($rp_real) + std $acc3,$i+24($rp_real) + + mtlr r0 + ld r16,$FRAME-8*16($sp) + ld r17,$FRAME-8*15($sp) + ld r18,$FRAME-8*14($sp) + ld r19,$FRAME-8*13($sp) + ld r20,$FRAME-8*12($sp) + ld r21,$FRAME-8*11($sp) + ld r22,$FRAME-8*10($sp) + ld r23,$FRAME-8*9($sp) + ld r24,$FRAME-8*8($sp) + ld r25,$FRAME-8*7($sp) + ld r26,$FRAME-8*6($sp) + ld r27,$FRAME-8*5($sp) + ld r28,$FRAME-8*4($sp) + ld r29,$FRAME-8*3($sp) + ld r30,$FRAME-8*2($sp) + ld r31,$FRAME-8*1($sp) + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,4,0,0x80,16,3,0 + .long 0 +.size ecp_nistz256_point_add_affine,.-ecp_nistz256_point_add_affine +___ +} +if (1) { +my ($ordk,$ord0,$ord1,$t4) = map("r$_",(18..21)); +my ($ord2,$ord3,$zr) = ($poly1,$poly3,"r0"); + +$code.=<<___; +######################################################################## +# void ecp_nistz256_ord_mul_mont(uint64_t res[4], uint64_t a[4], +# uint64_t b[4]); +.globl ecp_nistz256_ord_mul_mont +.align 5 +ecp_nistz256_ord_mul_mont: + stdu $sp,-160($sp) + std r18,48($sp) + std r19,56($sp) + std r20,64($sp) + std r21,72($sp) + std r22,80($sp) + std r23,88($sp) + std r24,96($sp) + std r25,104($sp) + std r26,112($sp) + std r27,120($sp) + std r28,128($sp) + std r29,136($sp) + std r30,144($sp) + std r31,152($sp) + + ld $a0,0($ap) + ld $bi,0($bp) + ld $a1,8($ap) + ld $a2,16($ap) + ld $a3,24($ap) + + lis $ordk,0xccd1 + lis $ord0,0xf3b9 + lis $ord1,0xbce6 + ori $ordk,$ordk,0xc8aa + ori $ord0,$ord0,0xcac2 + ori $ord1,$ord1,0xfaad + sldi $ordk,$ordk,32 + sldi $ord0,$ord0,32 + sldi $ord1,$ord1,32 + oris $ordk,$ordk,0xee00 + oris $ord0,$ord0,0xfc63 + oris $ord1,$ord1,0xa717 + ori $ordk,$ordk,0xbc4f # 0xccd1c8aaee00bc4f + ori $ord0,$ord0,0x2551 # 0xf3b9cac2fc632551 + ori $ord1,$ord1,0x9e84 # 0xbce6faada7179e84 + li $ord2,-1 # 0xffffffffffffffff + sldi $ord3,$ord2,32 # 0xffffffff00000000 + li $zr,0 + + mulld $acc0,$a0,$bi # a[0]*b[0] + mulhdu $t0,$a0,$bi + + mulld $acc1,$a1,$bi # a[1]*b[0] + mulhdu $t1,$a1,$bi + + mulld $acc2,$a2,$bi # a[2]*b[0] + mulhdu $t2,$a2,$bi + + mulld $acc3,$a3,$bi # a[3]*b[0] + mulhdu $acc4,$a3,$bi + + mulld $t4,$acc0,$ordk + + addc $acc1,$acc1,$t0 # accumulate high parts of multiplication + adde $acc2,$acc2,$t1 + adde $acc3,$acc3,$t2 + addze $acc4,$acc4 + li $acc5,0 +___ +for ($i=1;$i<4;$i++) { + ################################################################ + # ffff0000.ffffffff.yyyyyyyy.zzzzzzzz + # * abcdefgh + # + xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx + # + # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we + # rewrite above as: + # + # xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx + # - 0000abcd.efgh0000.abcdefgh.00000000.00000000 + # + abcdefgh.abcdefgh.yzayzbyz.cyzdyzey.zfyzgyzh +$code.=<<___; + ld $bi,8*$i($bp) # b[i] + + sldi $t0,$t4,32 + subfc $acc2,$t4,$acc2 + srdi $t1,$t4,32 + subfe $acc3,$t0,$acc3 + subfe $acc4,$t1,$acc4 + subfe $acc5,$zr,$acc5 + + addic $t0,$acc0,-1 # discarded + mulhdu $t1,$ord0,$t4 + mulld $t2,$ord1,$t4 + mulhdu $t3,$ord1,$t4 + + adde $t2,$t2,$t1 + mulld $t0,$a0,$bi + addze $t3,$t3 + mulld $t1,$a1,$bi + + addc $acc0,$acc1,$t2 + mulld $t2,$a2,$bi + adde $acc1,$acc2,$t3 + mulld $t3,$a3,$bi + adde $acc2,$acc3,$t4 + adde $acc3,$acc4,$t4 + addze $acc4,$acc5 + + addc $acc0,$acc0,$t0 # accumulate low parts + mulhdu $t0,$a0,$bi + adde $acc1,$acc1,$t1 + mulhdu $t1,$a1,$bi + adde $acc2,$acc2,$t2 + mulhdu $t2,$a2,$bi + adde $acc3,$acc3,$t3 + mulhdu $t3,$a3,$bi + addze $acc4,$acc4 + mulld $t4,$acc0,$ordk + addc $acc1,$acc1,$t0 # accumulate high parts + adde $acc2,$acc2,$t1 + adde $acc3,$acc3,$t2 + adde $acc4,$acc4,$t3 + addze $acc5,$zr +___ +} +$code.=<<___; + sldi $t0,$t4,32 # last reduction + subfc $acc2,$t4,$acc2 + srdi $t1,$t4,32 + subfe $acc3,$t0,$acc3 + subfe $acc4,$t1,$acc4 + subfe $acc5,$zr,$acc5 + + addic $t0,$acc0,-1 # discarded + mulhdu $t1,$ord0,$t4 + mulld $t2,$ord1,$t4 + mulhdu $t3,$ord1,$t4 + + adde $t2,$t2,$t1 + addze $t3,$t3 + + addc $acc0,$acc1,$t2 + adde $acc1,$acc2,$t3 + adde $acc2,$acc3,$t4 + adde $acc3,$acc4,$t4 + addze $acc4,$acc5 + + subfc $acc0,$ord0,$acc0 # ret -= modulus + subfe $acc1,$ord1,$acc1 + subfe $acc2,$ord2,$acc2 + subfe $acc3,$ord3,$acc3 + subfe $acc4,$zr,$acc4 + + and $t0,$ord0,$acc4 + and $t1,$ord1,$acc4 + addc $acc0,$acc0,$t0 # ret += modulus if borrow + and $t3,$ord3,$acc4 + adde $acc1,$acc1,$t1 + adde $acc2,$acc2,$acc4 + adde $acc3,$acc3,$t3 + + std $acc0,0($rp) + std $acc1,8($rp) + std $acc2,16($rp) + std $acc3,24($rp) + + ld r18,48($sp) + ld r19,56($sp) + ld r20,64($sp) + ld r21,72($sp) + ld r22,80($sp) + ld r23,88($sp) + ld r24,96($sp) + ld r25,104($sp) + ld r26,112($sp) + ld r27,120($sp) + ld r28,128($sp) + ld r29,136($sp) + ld r30,144($sp) + ld r31,152($sp) + addi $sp,$sp,160 + blr + .long 0 + .byte 0,12,4,0,0x80,14,3,0 + .long 0 +.size ecp_nistz256_ord_mul_mont,.-ecp_nistz256_ord_mul_mont + +################################################################################ +# void ecp_nistz256_ord_sqr_mont(uint64_t res[4], uint64_t a[4], +# int rep); +.globl ecp_nistz256_ord_sqr_mont +.align 5 +ecp_nistz256_ord_sqr_mont: + stdu $sp,-160($sp) + std r18,48($sp) + std r19,56($sp) + std r20,64($sp) + std r21,72($sp) + std r22,80($sp) + std r23,88($sp) + std r24,96($sp) + std r25,104($sp) + std r26,112($sp) + std r27,120($sp) + std r28,128($sp) + std r29,136($sp) + std r30,144($sp) + std r31,152($sp) + + mtctr $bp + + ld $a0,0($ap) + ld $a1,8($ap) + ld $a2,16($ap) + ld $a3,24($ap) + + lis $ordk,0xccd1 + lis $ord0,0xf3b9 + lis $ord1,0xbce6 + ori $ordk,$ordk,0xc8aa + ori $ord0,$ord0,0xcac2 + ori $ord1,$ord1,0xfaad + sldi $ordk,$ordk,32 + sldi $ord0,$ord0,32 + sldi $ord1,$ord1,32 + oris $ordk,$ordk,0xee00 + oris $ord0,$ord0,0xfc63 + oris $ord1,$ord1,0xa717 + ori $ordk,$ordk,0xbc4f # 0xccd1c8aaee00bc4f + ori $ord0,$ord0,0x2551 # 0xf3b9cac2fc632551 + ori $ord1,$ord1,0x9e84 # 0xbce6faada7179e84 + li $ord2,-1 # 0xffffffffffffffff + sldi $ord3,$ord2,32 # 0xffffffff00000000 + li $zr,0 + b .Loop_ord_sqr + +.align 5 +.Loop_ord_sqr: + ################################################################ + # | | | | | |a1*a0| | + # | | | | |a2*a0| | | + # | |a3*a2|a3*a0| | | | + # | | | |a2*a1| | | | + # | | |a3*a1| | | | | + # *| | | | | | | | 2| + # +|a3*a3|a2*a2|a1*a1|a0*a0| + # |--+--+--+--+--+--+--+--| + # |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is $accx, i.e. follow $accx + # + # "can't overflow" below mark carrying into high part of + # multiplication result, which can't overflow, because it + # can never be all ones. + + mulld $acc1,$a1,$a0 # a[1]*a[0] + mulhdu $t1,$a1,$a0 + mulld $acc2,$a2,$a0 # a[2]*a[0] + mulhdu $t2,$a2,$a0 + mulld $acc3,$a3,$a0 # a[3]*a[0] + mulhdu $acc4,$a3,$a0 + + addc $acc2,$acc2,$t1 # accumulate high parts of multiplication + mulld $t0,$a2,$a1 # a[2]*a[1] + mulhdu $t1,$a2,$a1 + adde $acc3,$acc3,$t2 + mulld $t2,$a3,$a1 # a[3]*a[1] + mulhdu $t3,$a3,$a1 + addze $acc4,$acc4 # can't overflow + + mulld $acc5,$a3,$a2 # a[3]*a[2] + mulhdu $acc6,$a3,$a2 + + addc $t1,$t1,$t2 # accumulate high parts of multiplication + mulld $acc0,$a0,$a0 # a[0]*a[0] + addze $t2,$t3 # can't overflow + + addc $acc3,$acc3,$t0 # accumulate low parts of multiplication + mulhdu $a0,$a0,$a0 + adde $acc4,$acc4,$t1 + mulld $t1,$a1,$a1 # a[1]*a[1] + adde $acc5,$acc5,$t2 + mulhdu $a1,$a1,$a1 + addze $acc6,$acc6 # can't overflow + + addc $acc1,$acc1,$acc1 # acc[1-6]*=2 + mulld $t2,$a2,$a2 # a[2]*a[2] + adde $acc2,$acc2,$acc2 + mulhdu $a2,$a2,$a2 + adde $acc3,$acc3,$acc3 + mulld $t3,$a3,$a3 # a[3]*a[3] + adde $acc4,$acc4,$acc4 + mulhdu $a3,$a3,$a3 + adde $acc5,$acc5,$acc5 + adde $acc6,$acc6,$acc6 + addze $acc7,$zr + + addc $acc1,$acc1,$a0 # +a[i]*a[i] + mulld $t4,$acc0,$ordk + adde $acc2,$acc2,$t1 + adde $acc3,$acc3,$a1 + adde $acc4,$acc4,$t2 + adde $acc5,$acc5,$a2 + adde $acc6,$acc6,$t3 + adde $acc7,$acc7,$a3 +___ +for($i=0; $i<4; $i++) { # reductions +$code.=<<___; + addic $t0,$acc0,-1 # discarded + mulhdu $t1,$ord0,$t4 + mulld $t2,$ord1,$t4 + mulhdu $t3,$ord1,$t4 + + adde $t2,$t2,$t1 + addze $t3,$t3 + + addc $acc0,$acc1,$t2 + adde $acc1,$acc2,$t3 + adde $acc2,$acc3,$t4 + adde $acc3,$zr,$t4 # can't overflow +___ +$code.=<<___ if ($i<3); + mulld $t3,$acc0,$ordk +___ +$code.=<<___; + sldi $t0,$t4,32 + subfc $acc1,$t4,$acc1 + srdi $t1,$t4,32 + subfe $acc2,$t0,$acc2 + subfe $acc3,$t1,$acc3 # can't borrow +___ + ($t3,$t4) = ($t4,$t3); +} +$code.=<<___; + addc $acc0,$acc0,$acc4 # accumulate upper half + adde $acc1,$acc1,$acc5 + adde $acc2,$acc2,$acc6 + adde $acc3,$acc3,$acc7 + addze $acc4,$zr + + subfc $acc0,$ord0,$acc0 # ret -= modulus + subfe $acc1,$ord1,$acc1 + subfe $acc2,$ord2,$acc2 + subfe $acc3,$ord3,$acc3 + subfe $acc4,$zr,$acc4 + + and $t0,$ord0,$acc4 + and $t1,$ord1,$acc4 + addc $a0,$acc0,$t0 # ret += modulus if borrow + and $t3,$ord3,$acc4 + adde $a1,$acc1,$t1 + adde $a2,$acc2,$acc4 + adde $a3,$acc3,$t3 + + bdnz .Loop_ord_sqr + + std $a0,0($rp) + std $a1,8($rp) + std $a2,16($rp) + std $a3,24($rp) + + ld r18,48($sp) + ld r19,56($sp) + ld r20,64($sp) + ld r21,72($sp) + ld r22,80($sp) + ld r23,88($sp) + ld r24,96($sp) + ld r25,104($sp) + ld r26,112($sp) + ld r27,120($sp) + ld r28,128($sp) + ld r29,136($sp) + ld r30,144($sp) + ld r31,152($sp) + addi $sp,$sp,160 + blr + .long 0 + .byte 0,12,4,0,0x80,14,3,0 + .long 0 +.size ecp_nistz256_ord_sqr_mont,.-ecp_nistz256_ord_sqr_mont +___ +} } + +######################################################################## +# scatter-gather subroutines +{ +my ($out,$inp,$index,$mask)=map("r$_",(3..7)); +$code.=<<___; +######################################################################## +# void ecp_nistz256_scatter_w5(void *out, const P256_POINT *inp, +# int index); +.globl ecp_nistz256_scatter_w5 +.align 4 +ecp_nistz256_scatter_w5: + slwi $index,$index,2 + add $out,$out,$index + + ld r8, 0($inp) # X + ld r9, 8($inp) + ld r10,16($inp) + ld r11,24($inp) + + stw r8, 64*0-4($out) + srdi r8, r8, 32 + stw r9, 64*1-4($out) + srdi r9, r9, 32 + stw r10,64*2-4($out) + srdi r10,r10,32 + stw r11,64*3-4($out) + srdi r11,r11,32 + stw r8, 64*4-4($out) + stw r9, 64*5-4($out) + stw r10,64*6-4($out) + stw r11,64*7-4($out) + addi $out,$out,64*8 + + ld r8, 32($inp) # Y + ld r9, 40($inp) + ld r10,48($inp) + ld r11,56($inp) + + stw r8, 64*0-4($out) + srdi r8, r8, 32 + stw r9, 64*1-4($out) + srdi r9, r9, 32 + stw r10,64*2-4($out) + srdi r10,r10,32 + stw r11,64*3-4($out) + srdi r11,r11,32 + stw r8, 64*4-4($out) + stw r9, 64*5-4($out) + stw r10,64*6-4($out) + stw r11,64*7-4($out) + addi $out,$out,64*8 + + ld r8, 64($inp) # Z + ld r9, 72($inp) + ld r10,80($inp) + ld r11,88($inp) + + stw r8, 64*0-4($out) + srdi r8, r8, 32 + stw r9, 64*1-4($out) + srdi r9, r9, 32 + stw r10,64*2-4($out) + srdi r10,r10,32 + stw r11,64*3-4($out) + srdi r11,r11,32 + stw r8, 64*4-4($out) + stw r9, 64*5-4($out) + stw r10,64*6-4($out) + stw r11,64*7-4($out) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 + +######################################################################## +# void ecp_nistz256_gather_w5(P256_POINT *out, const void *inp, +# int index); +.globl ecp_nistz256_gather_w5 +.align 4 +ecp_nistz256_gather_w5: + neg r0,$index + sradi r0,r0,63 + + add $index,$index,r0 + slwi $index,$index,2 + add $inp,$inp,$index + + lwz r5, 64*0($inp) + lwz r6, 64*1($inp) + lwz r7, 64*2($inp) + lwz r8, 64*3($inp) + lwz r9, 64*4($inp) + lwz r10,64*5($inp) + lwz r11,64*6($inp) + lwz r12,64*7($inp) + addi $inp,$inp,64*8 + sldi r9, r9, 32 + sldi r10,r10,32 + sldi r11,r11,32 + sldi r12,r12,32 + or r5,r5,r9 + or r6,r6,r10 + or r7,r7,r11 + or r8,r8,r12 + and r5,r5,r0 + and r6,r6,r0 + and r7,r7,r0 + and r8,r8,r0 + std r5,0($out) # X + std r6,8($out) + std r7,16($out) + std r8,24($out) + + lwz r5, 64*0($inp) + lwz r6, 64*1($inp) + lwz r7, 64*2($inp) + lwz r8, 64*3($inp) + lwz r9, 64*4($inp) + lwz r10,64*5($inp) + lwz r11,64*6($inp) + lwz r12,64*7($inp) + addi $inp,$inp,64*8 + sldi r9, r9, 32 + sldi r10,r10,32 + sldi r11,r11,32 + sldi r12,r12,32 + or r5,r5,r9 + or r6,r6,r10 + or r7,r7,r11 + or r8,r8,r12 + and r5,r5,r0 + and r6,r6,r0 + and r7,r7,r0 + and r8,r8,r0 + std r5,32($out) # Y + std r6,40($out) + std r7,48($out) + std r8,56($out) + + lwz r5, 64*0($inp) + lwz r6, 64*1($inp) + lwz r7, 64*2($inp) + lwz r8, 64*3($inp) + lwz r9, 64*4($inp) + lwz r10,64*5($inp) + lwz r11,64*6($inp) + lwz r12,64*7($inp) + sldi r9, r9, 32 + sldi r10,r10,32 + sldi r11,r11,32 + sldi r12,r12,32 + or r5,r5,r9 + or r6,r6,r10 + or r7,r7,r11 + or r8,r8,r12 + and r5,r5,r0 + and r6,r6,r0 + and r7,r7,r0 + and r8,r8,r0 + std r5,64($out) # Z + std r6,72($out) + std r7,80($out) + std r8,88($out) + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size ecp_nistz256_gather_w5,.-ecp_nistz256_gather_w5 + +######################################################################## +# void ecp_nistz256_scatter_w7(void *out, const P256_POINT_AFFINE *inp, +# int index); +.globl ecp_nistz256_scatter_w7 +.align 4 +ecp_nistz256_scatter_w7: + li r0,8 + mtctr r0 + add $out,$out,$index + subi $inp,$inp,8 + +.Loop_scatter_w7: + ldu r0,8($inp) + stb r0,64*0-1($out) + srdi r0,r0,8 + stb r0,64*1-1($out) + srdi r0,r0,8 + stb r0,64*2-1($out) + srdi r0,r0,8 + stb r0,64*3-1($out) + srdi r0,r0,8 + stb r0,64*4-1($out) + srdi r0,r0,8 + stb r0,64*5-1($out) + srdi r0,r0,8 + stb r0,64*6-1($out) + srdi r0,r0,8 + stb r0,64*7-1($out) + addi $out,$out,64*8 + bdnz .Loop_scatter_w7 + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 + +######################################################################## +# void ecp_nistz256_gather_w7(P256_POINT_AFFINE *out, const void *inp, +# int index); +.globl ecp_nistz256_gather_w7 +.align 4 +ecp_nistz256_gather_w7: + li r0,8 + mtctr r0 + neg r0,$index + sradi r0,r0,63 + + add $index,$index,r0 + add $inp,$inp,$index + subi $out,$out,8 + +.Loop_gather_w7: + lbz r5, 64*0($inp) + lbz r6, 64*1($inp) + lbz r7, 64*2($inp) + lbz r8, 64*3($inp) + lbz r9, 64*4($inp) + lbz r10,64*5($inp) + lbz r11,64*6($inp) + lbz r12,64*7($inp) + addi $inp,$inp,64*8 + + sldi r6, r6, 8 + sldi r7, r7, 16 + sldi r8, r8, 24 + sldi r9, r9, 32 + sldi r10,r10,40 + sldi r11,r11,48 + sldi r12,r12,56 + + or r5,r5,r6 + or r7,r7,r8 + or r9,r9,r10 + or r11,r11,r12 + or r5,r5,r7 + or r9,r9,r11 + or r5,r5,r9 + and r5,r5,r0 + stdu r5,8($out) + bdnz .Loop_gather_w7 + + blr + .long 0 + .byte 0,12,0x14,0,0,0,3,0 + .long 0 +.size ecp_nistz256_gather_w7,.-ecp_nistz256_gather_w7 +___ +} + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/ge; + + print $_,"\n"; +} +close STDOUT; # enforce flush diff --git a/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/crypto/ec/asm/ecp_nistz256-sparcv9.pl index 97201cb2..9af1fae8 100755 --- a/crypto/ec/asm/ecp_nistz256-sparcv9.pl +++ b/crypto/ec/asm/ecp_nistz256-sparcv9.pl @@ -413,7 +413,7 @@ __ecp_nistz256_add: ! if a+b >= modulus, subtract modulus. ! ! But since comparison implies subtraction, we subtract - ! modulus and then add it back if subraction borrowed. + ! modulus and then add it back if subtraction borrowed. subcc @acc[0],-1,@acc[0] subccc @acc[1],-1,@acc[1] @@ -1592,7 +1592,7 @@ ___ ######################################################################## # Following subroutines are VIS3 counterparts of those above that # implement ones found in ecp_nistz256.c. Key difference is that they -# use 128-bit muliplication and addition with 64-bit carry, and in order +# use 128-bit multiplication and addition with 64-bit carry, and in order # to do that they perform conversion from uin32_t[8] to uint64_t[4] upon # entry and vice versa on return. # @@ -1874,7 +1874,7 @@ $code.=<<___ if ($i<3); ldx [$bp+8*($i+1)],$bi ! bp[$i+1] ___ $code.=<<___; - addcc $acc1,$t0,$acc1 ! accumulate high parts of multiplication + addcc $acc1,$t0,$acc1 ! accumulate high parts of multiplication sllx $acc0,32,$t0 addxccc $acc2,$t1,$acc2 srlx $acc0,32,$t1 @@ -1977,7 +1977,7 @@ $code.=<<___; srlx $acc0,32,$t1 addxccc $acc3,$t2,$acc2 ! +=acc[0]*0xFFFFFFFF00000001 sub $acc0,$t0,$t2 ! acc0*0xFFFFFFFF00000001, low part - addxc %g0,$t3,$acc3 ! cant't overflow + addxc %g0,$t3,$acc3 ! can't overflow ___ } $code.=<<___; diff --git a/crypto/ec/asm/ecp_nistz256-x86.pl b/crypto/ec/asm/ecp_nistz256-x86.pl index 1d9e0061..a89a9f93 100755 --- a/crypto/ec/asm/ecp_nistz256-x86.pl +++ b/crypto/ec/asm/ecp_nistz256-x86.pl @@ -45,7 +45,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"ecp_nistz256-x86.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $sse2=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -443,7 +443,7 @@ for(1..37) { &mov (&DWP(20,"esp"),"eax"); &mov (&DWP(24,"esp"),"eax"); &mov (&DWP(28,"esp"),"eax"); - + &call ("_ecp_nistz256_sub"); &stack_pop(8); diff --git a/crypto/ec/asm/ecp_nistz256-x86_64.pl b/crypto/ec/asm/ecp_nistz256-x86_64.pl index e65e8297..eba6ffd4 100755 --- a/crypto/ec/asm/ecp_nistz256-x86_64.pl +++ b/crypto/ec/asm/ecp_nistz256-x86_64.pl @@ -1,15 +1,17 @@ #! /usr/bin/env perl -# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved. # Copyright (c) 2014, Intel Corporation. All Rights Reserved. +# Copyright (c) 2015 CloudFlare, Inc. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html # -# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) +# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1, 3) # (1) Intel Corporation, Israel Development Center, Haifa, Israel # (2) University of Haifa, Israel +# (3) CloudFlare, Inc. # # Reference: # S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with diff --git a/crypto/ec/asm/x25519-x86_64.pl b/crypto/ec/asm/x25519-x86_64.pl new file mode 100755 index 00000000..68a7771a --- /dev/null +++ b/crypto/ec/asm/x25519-x86_64.pl @@ -0,0 +1,818 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# X25519 lower-level primitives for x86_86. +# +# February 2018. +# +# This module implements radix 2^51 multiplication and squaring, and +# radix 2^64 multiplication, squaring, addition, subtraction and final +# reduction. Latter radix is used on ADCX/ADOX-capable processors such +# as Broadwell. On related note one should mention that there are +# vector implementations that provide significantly better performance +# on some processors(*), but they are large and overly complex. Which +# in combination with them being effectively processor-specific makes +# the undertaking hard to justify. The goal for this implementation +# is rather versatility and simplicity [and ultimately formal +# verification]. +# +# (*) For example sandy2x should provide ~30% improvement on Sandy +# Bridge, but only nominal ~5% on Haswell [and big loss on +# Broadwell and successors]. +# +###################################################################### +# Improvement coefficients: +# +# amd64-51(*) gcc-5.x(**) +# +# P4 +22% +40% +# Sandy Bridge -3% +11% +# Haswell -1% +13% +# Broadwell(***) +26% +30% +# Skylake(***) +30% +47% +# Silvermont +20% +26% +# Goldmont +40% +50% +# Bulldozer +20% +9% +# Ryzen(***) +35% +32% +# VIA +170% +120% +# +# (*) amd64-51 is popular assembly implementation with 2^51 radix, +# only multiplication and squaring subroutines were linked +# for comparison, but not complete ladder step; gain on most +# processors is because this module refrains from shld, and +# minor regression on others is because this does result in +# higher instruction count; +# (**) compiler is free to inline functions, in assembly one would +# need to implement ladder step to do that, and it will improve +# performance by several percent; +# (***) ADCX/ADOX result for 2^64 radix, there is no corresponding +# C implementation, so that comparison is always against +# 2^51 radix; + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1` + =~ /GNU assembler version ([2-9]\.[0-9]+)/) { + $addx = ($1>=2.23); +} + +if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) && + `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) { + $addx = ($1>=2.10); +} + +if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && + `ml64 2>&1` =~ /Version ([0-9]+)\./) { + $addx = ($1>=12); +} + +if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9])\.([0-9]+)/) { + my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 + $addx = ($ver>=3.03); +} + +$code.=<<___; +.text + +.globl x25519_fe51_mul +.type x25519_fe51_mul,\@function,3 +.align 32 +x25519_fe51_mul: + push %rbp + push %rbx + push %r12 + push %r13 + push %r14 + push %r15 + lea -8*5(%rsp),%rsp + + mov 8*0(%rsi),%rax # f[0] + mov 8*0(%rdx),%r11 # load g[0-4] + mov 8*1(%rdx),%r12 + mov 8*2(%rdx),%r13 + mov 8*3(%rdx),%rbp + mov 8*4(%rdx),%r14 + + mov %rdi,8*4(%rsp) # offload 1st argument + mov %rax,%rdi + mulq %r11 # f[0]*g[0] + mov %r11,8*0(%rsp) # offload g[0] + mov %rax,%rbx # %rbx:%rcx = h0 + mov %rdi,%rax + mov %rdx,%rcx + mulq %r12 # f[0]*g[1] + mov %r12,8*1(%rsp) # offload g[1] + mov %rax,%r8 # %r8:%r9 = h1 + mov %rdi,%rax + lea (%r14,%r14,8),%r15 + mov %rdx,%r9 + mulq %r13 # f[0]*g[2] + mov %r13,8*2(%rsp) # offload g[2] + mov %rax,%r10 # %r10:%r11 = h2 + mov %rdi,%rax + lea (%r14,%r15,2),%rdi # g[4]*19 + mov %rdx,%r11 + mulq %rbp # f[0]*g[3] + mov %rax,%r12 # %r12:%r13 = h3 + mov 8*0(%rsi),%rax # f[0] + mov %rdx,%r13 + mulq %r14 # f[0]*g[4] + mov %rax,%r14 # %r14:%r15 = h4 + mov 8*1(%rsi),%rax # f[1] + mov %rdx,%r15 + + mulq %rdi # f[1]*g[4]*19 + add %rax,%rbx + mov 8*2(%rsi),%rax # f[2] + adc %rdx,%rcx + mulq %rdi # f[2]*g[4]*19 + add %rax,%r8 + mov 8*3(%rsi),%rax # f[3] + adc %rdx,%r9 + mulq %rdi # f[3]*g[4]*19 + add %rax,%r10 + mov 8*4(%rsi),%rax # f[4] + adc %rdx,%r11 + mulq %rdi # f[4]*g[4]*19 + imulq \$19,%rbp,%rdi # g[3]*19 + add %rax,%r12 + mov 8*1(%rsi),%rax # f[1] + adc %rdx,%r13 + mulq %rbp # f[1]*g[3] + mov 8*2(%rsp),%rbp # g[2] + add %rax,%r14 + mov 8*2(%rsi),%rax # f[2] + adc %rdx,%r15 + + mulq %rdi # f[2]*g[3]*19 + add %rax,%rbx + mov 8*3(%rsi),%rax # f[3] + adc %rdx,%rcx + mulq %rdi # f[3]*g[3]*19 + add %rax,%r8 + mov 8*4(%rsi),%rax # f[4] + adc %rdx,%r9 + mulq %rdi # f[4]*g[3]*19 + imulq \$19,%rbp,%rdi # g[2]*19 + add %rax,%r10 + mov 8*1(%rsi),%rax # f[1] + adc %rdx,%r11 + mulq %rbp # f[1]*g[2] + add %rax,%r12 + mov 8*2(%rsi),%rax # f[2] + adc %rdx,%r13 + mulq %rbp # f[2]*g[2] + mov 8*1(%rsp),%rbp # g[1] + add %rax,%r14 + mov 8*3(%rsi),%rax # f[3] + adc %rdx,%r15 + + mulq %rdi # f[3]*g[2]*19 + add %rax,%rbx + mov 8*4(%rsi),%rax # f[3] + adc %rdx,%rcx + mulq %rdi # f[4]*g[2]*19 + add %rax,%r8 + mov 8*1(%rsi),%rax # f[1] + adc %rdx,%r9 + mulq %rbp # f[1]*g[1] + imulq \$19,%rbp,%rdi + add %rax,%r10 + mov 8*2(%rsi),%rax # f[2] + adc %rdx,%r11 + mulq %rbp # f[2]*g[1] + add %rax,%r12 + mov 8*3(%rsi),%rax # f[3] + adc %rdx,%r13 + mulq %rbp # f[3]*g[1] + mov 8*0(%rsp),%rbp # g[0] + add %rax,%r14 + mov 8*4(%rsi),%rax # f[4] + adc %rdx,%r15 + + mulq %rdi # f[4]*g[1]*19 + add %rax,%rbx + mov 8*1(%rsi),%rax # f[1] + adc %rdx,%rcx + mul %rbp # f[1]*g[0] + add %rax,%r8 + mov 8*2(%rsi),%rax # f[2] + adc %rdx,%r9 + mul %rbp # f[2]*g[0] + add %rax,%r10 + mov 8*3(%rsi),%rax # f[3] + adc %rdx,%r11 + mul %rbp # f[3]*g[0] + add %rax,%r12 + mov 8*4(%rsi),%rax # f[4] + adc %rdx,%r13 + mulq %rbp # f[4]*g[0] + add %rax,%r14 + adc %rdx,%r15 + + mov 8*4(%rsp),%rdi # restore 1st argument + jmp .Lreduce51 +.size x25519_fe51_mul,.-x25519_fe51_mul + +.globl x25519_fe51_sqr +.type x25519_fe51_sqr,\@function,2 +.align 32 +x25519_fe51_sqr: + push %rbp + push %rbx + push %r12 + push %r13 + push %r14 + push %r15 + lea -8*5(%rsp),%rsp + + mov 8*0(%rsi),%rax # g[0] + mov 8*2(%rsi),%r15 # g[2] + mov 8*4(%rsi),%rbp # g[4] + + mov %rdi,8*4(%rsp) # offload 1st argument + lea (%rax,%rax),%r14 + mulq %rax # g[0]*g[0] + mov %rax,%rbx + mov 8*1(%rsi),%rax # g[1] + mov %rdx,%rcx + mulq %r14 # 2*g[0]*g[1] + mov %rax,%r8 + mov %r15,%rax + mov %r15,8*0(%rsp) # offload g[2] + mov %rdx,%r9 + mulq %r14 # 2*g[0]*g[2] + mov %rax,%r10 + mov 8*3(%rsi),%rax + mov %rdx,%r11 + imulq \$19,%rbp,%rdi # g[4]*19 + mulq %r14 # 2*g[0]*g[3] + mov %rax,%r12 + mov %rbp,%rax + mov %rdx,%r13 + mulq %r14 # 2*g[0]*g[4] + mov %rax,%r14 + mov %rbp,%rax + mov %rdx,%r15 + + mulq %rdi # g[4]*g[4]*19 + add %rax,%r12 + mov 8*1(%rsi),%rax # g[1] + adc %rdx,%r13 + + mov 8*3(%rsi),%rsi # g[3] + lea (%rax,%rax),%rbp + mulq %rax # g[1]*g[1] + add %rax,%r10 + mov 8*0(%rsp),%rax # g[2] + adc %rdx,%r11 + mulq %rbp # 2*g[1]*g[2] + add %rax,%r12 + mov %rbp,%rax + adc %rdx,%r13 + mulq %rsi # 2*g[1]*g[3] + add %rax,%r14 + mov %rbp,%rax + adc %rdx,%r15 + imulq \$19,%rsi,%rbp # g[3]*19 + mulq %rdi # 2*g[1]*g[4]*19 + add %rax,%rbx + lea (%rsi,%rsi),%rax + adc %rdx,%rcx + + mulq %rdi # 2*g[3]*g[4]*19 + add %rax,%r10 + mov %rsi,%rax + adc %rdx,%r11 + mulq %rbp # g[3]*g[3]*19 + add %rax,%r8 + mov 8*0(%rsp),%rax # g[2] + adc %rdx,%r9 + + lea (%rax,%rax),%rsi + mulq %rax # g[2]*g[2] + add %rax,%r14 + mov %rbp,%rax + adc %rdx,%r15 + mulq %rsi # 2*g[2]*g[3]*19 + add %rax,%rbx + mov %rsi,%rax + adc %rdx,%rcx + mulq %rdi # 2*g[2]*g[4]*19 + add %rax,%r8 + adc %rdx,%r9 + + mov 8*4(%rsp),%rdi # restore 1st argument + jmp .Lreduce51 + +.align 32 +.Lreduce51: + mov \$0x7ffffffffffff,%rbp + + mov %r10,%rdx + shr \$51,%r10 + shl \$13,%r11 + and %rbp,%rdx # %rdx = g2 = h2 & mask + or %r10,%r11 # h2>>51 + add %r11,%r12 + adc \$0,%r13 # h3 += h2>>51 + + mov %rbx,%rax + shr \$51,%rbx + shl \$13,%rcx + and %rbp,%rax # %rax = g0 = h0 & mask + or %rbx,%rcx # h0>>51 + add %rcx,%r8 # h1 += h0>>51 + adc \$0,%r9 + + mov %r12,%rbx + shr \$51,%r12 + shl \$13,%r13 + and %rbp,%rbx # %rbx = g3 = h3 & mask + or %r12,%r13 # h3>>51 + add %r13,%r14 # h4 += h3>>51 + adc \$0,%r15 + + mov %r8,%rcx + shr \$51,%r8 + shl \$13,%r9 + and %rbp,%rcx # %rcx = g1 = h1 & mask + or %r8,%r9 + add %r9,%rdx # g2 += h1>>51 + + mov %r14,%r10 + shr \$51,%r14 + shl \$13,%r15 + and %rbp,%r10 # %r10 = g4 = h0 & mask + or %r14,%r15 # h0>>51 + + lea (%r15,%r15,8),%r14 + lea (%r15,%r14,2),%r15 + add %r15,%rax # g0 += (h0>>51)*19 + + mov %rdx,%r8 + and %rbp,%rdx # g2 &= mask + shr \$51,%r8 + add %r8,%rbx # g3 += g2>>51 + + mov %rax,%r9 + and %rbp,%rax # g0 &= mask + shr \$51,%r9 + add %r9,%rcx # g1 += g0>>51 + + mov %rax,8*0(%rdi) # save the result + mov %rcx,8*1(%rdi) + mov %rdx,8*2(%rdi) + mov %rbx,8*3(%rdi) + mov %r10,8*4(%rdi) + + mov 8*5(%rsp),%r15 + mov 8*6(%rsp),%r14 + mov 8*7(%rsp),%r13 + mov 8*8(%rsp),%r12 + mov 8*9(%rsp),%rbx + mov 8*10(%rsp),%rbp + lea 8*11(%rsp),%rsp + ret +.size x25519_fe51_sqr,.-x25519_fe51_sqr + +.globl x25519_fe51_mul121666 +.type x25519_fe51_mul121666,\@function,2 +.align 32 +x25519_fe51_mul121666: + push %rbp + push %rbx + push %r12 + push %r13 + push %r14 + push %r15 + mov \$121666,%eax + lea -8*5(%rsp),%rsp + + mulq 8*0(%rsi) + mov %rax,%rbx # %rbx:%rcx = h0 + mov \$121666,%eax + mov %rdx,%rcx + mulq 8*1(%rsi) + mov %rax,%r8 # %r8:%r9 = h1 + mov \$121666,%eax + mov %rdx,%r9 + mulq 8*2(%rsi) + mov %rax,%r10 # %r10:%r11 = h2 + mov \$121666,%eax + mov %rdx,%r11 + mulq 8*3(%rsi) + mov %rax,%r12 # %r12:%r13 = h3 + mov \$121666,%eax # f[0] + mov %rdx,%r13 + mulq 8*4(%rsi) + mov %rax,%r14 # %r14:%r15 = h4 + mov %rdx,%r15 + + jmp .Lreduce51 +.size x25519_fe51_mul121666,.-x25519_fe51_mul121666 +___ +######################################################################## +# Base 2^64 subroutines modulo 2*(2^255-19) +# +if ($addx) { +my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7) = map("%r$_",(8..15)); + +$code.=<<___; +.extern OPENSSL_ia32cap_P +.globl x25519_fe64_eligible +.type x25519_fe64_eligible,\@abi-omnipotent +.align 32 +x25519_fe64_eligible: + mov OPENSSL_ia32cap_P+8(%rip),%ecx + xor %eax,%eax + and \$0x80100,%ecx + cmp \$0x80100,%ecx + cmove %ecx,%eax + ret +.size x25519_fe64_eligible,.-x25519_fe64_eligible + +.globl x25519_fe64_mul +.type x25519_fe64_mul,\@function,3 +.align 32 +x25519_fe64_mul: + push %rbp + push %rbx + push %r12 + push %r13 + push %r14 + push %r15 + push %rdi # offload dst + lea -8*2(%rsp),%rsp + + mov %rdx,%rax + mov 8*0(%rdx),%rbp # b[0] + mov 8*0(%rsi),%rdx # a[0] + mov 8*1(%rax),%rcx # b[1] + mov 8*2(%rax),$acc6 # b[2] + mov 8*3(%rax),$acc7 # b[3] + + mulx %rbp,$acc0,%rax # a[0]*b[0] + xor %edi,%edi # cf=0,of=0 + mulx %rcx,$acc1,%rbx # a[0]*b[1] + adcx %rax,$acc1 + mulx $acc6,$acc2,%rax # a[0]*b[2] + adcx %rbx,$acc2 + mulx $acc7,$acc3,$acc4 # a[0]*b[3] + mov 8*1(%rsi),%rdx # a[1] + adcx %rax,$acc3 + mov $acc6,(%rsp) # offload b[2] + adcx %rdi,$acc4 # cf=0 + + mulx %rbp,%rax,%rbx # a[1]*b[0] + adox %rax,$acc1 + adcx %rbx,$acc2 + mulx %rcx,%rax,%rbx # a[1]*b[1] + adox %rax,$acc2 + adcx %rbx,$acc3 + mulx $acc6,%rax,%rbx # a[1]*b[2] + adox %rax,$acc3 + adcx %rbx,$acc4 + mulx $acc7,%rax,$acc5 # a[1]*b[3] + mov 8*2(%rsi),%rdx # a[2] + adox %rax,$acc4 + adcx %rdi,$acc5 # cf=0 + adox %rdi,$acc5 # of=0 + + mulx %rbp,%rax,%rbx # a[2]*b[0] + adcx %rax,$acc2 + adox %rbx,$acc3 + mulx %rcx,%rax,%rbx # a[2]*b[1] + adcx %rax,$acc3 + adox %rbx,$acc4 + mulx $acc6,%rax,%rbx # a[2]*b[2] + adcx %rax,$acc4 + adox %rbx,$acc5 + mulx $acc7,%rax,$acc6 # a[2]*b[3] + mov 8*3(%rsi),%rdx # a[3] + adcx %rax,$acc5 + adox %rdi,$acc6 # of=0 + adcx %rdi,$acc6 # cf=0 + + mulx %rbp,%rax,%rbx # a[3]*b[0] + adox %rax,$acc3 + adcx %rbx,$acc4 + mulx %rcx,%rax,%rbx # a[3]*b[1] + adox %rax,$acc4 + adcx %rbx,$acc5 + mulx (%rsp),%rax,%rbx # a[3]*b[2] + adox %rax,$acc5 + adcx %rbx,$acc6 + mulx $acc7,%rax,$acc7 # a[3]*b[3] + mov \$38,%edx + adox %rax,$acc6 + adcx %rdi,$acc7 # cf=0 + adox %rdi,$acc7 # of=0 + + jmp .Lreduce64 +.size x25519_fe64_mul,.-x25519_fe64_mul + +.globl x25519_fe64_sqr +.type x25519_fe64_sqr,\@function,2 +.align 32 +x25519_fe64_sqr: + push %rbp + push %rbx + push %r12 + push %r13 + push %r14 + push %r15 + push %rdi # offload dst + lea -8*2(%rsp),%rsp + + mov 8*0(%rsi),%rdx # a[0] + mov 8*1(%rsi),%rcx # a[1] + mov 8*2(%rsi),%rbp # a[2] + mov 8*3(%rsi),%rsi # a[3] + + ################################################################ + mulx %rdx,$acc0,$acc7 # a[0]*a[0] + mulx %rcx,$acc1,%rax # a[0]*a[1] + xor %edi,%edi # cf=0,of=0 + mulx %rbp,$acc2,%rbx # a[0]*a[2] + adcx %rax,$acc2 + mulx %rsi,$acc3,$acc4 # a[0]*a[3] + mov %rcx,%rdx # a[1] + adcx %rbx,$acc3 + adcx %rdi,$acc4 # cf=0 + + ################################################################ + mulx %rbp,%rax,%rbx # a[1]*a[2] + adox %rax,$acc3 + adcx %rbx,$acc4 + mulx %rsi,%rax,$acc5 # a[1]*a[3] + mov %rbp,%rdx # a[2] + adox %rax,$acc4 + adcx %rdi,$acc5 + + ################################################################ + mulx %rsi,%rax,$acc6 # a[2]*a[3] + mov %rcx,%rdx # a[1] + adox %rax,$acc5 + adcx %rdi,$acc6 # cf=0 + adox %rdi,$acc6 # of=0 + + adcx $acc1,$acc1 # acc1:6<<1 + adox $acc7,$acc1 + adcx $acc2,$acc2 + mulx %rdx,%rax,%rbx # a[1]*a[1] + mov %rbp,%rdx # a[2] + adcx $acc3,$acc3 + adox %rax,$acc2 + adcx $acc4,$acc4 + adox %rbx,$acc3 + mulx %rdx,%rax,%rbx # a[2]*a[2] + mov %rsi,%rdx # a[3] + adcx $acc5,$acc5 + adox %rax,$acc4 + adcx $acc6,$acc6 + adox %rbx,$acc5 + mulx %rdx,%rax,$acc7 # a[3]*a[3] + mov \$38,%edx + adox %rax,$acc6 + adcx %rdi,$acc7 # cf=0 + adox %rdi,$acc7 # of=0 + jmp .Lreduce64 + +.align 32 +.Lreduce64: + mulx $acc4,%rax,%rbx + adcx %rax,$acc0 + adox %rbx,$acc1 + mulx $acc5,%rax,%rbx + adcx %rax,$acc1 + adox %rbx,$acc2 + mulx $acc6,%rax,%rbx + adcx %rax,$acc2 + adox %rbx,$acc3 + mulx $acc7,%rax,$acc4 + adcx %rax,$acc3 + adox %rdi,$acc4 + adcx %rdi,$acc4 + + mov 8*2(%rsp),%rdi # restore dst + imulq %rdx,$acc4 + + add $acc4,$acc0 + adc \$0,$acc1 + adc \$0,$acc2 + adc \$0,$acc3 + + sbb %rax,%rax # cf -> mask + and \$38,%rax + + add %rax,$acc0 + adc \$0,$acc1 + mov $acc0,8*0(%rdi) + adc \$0,$acc2 + mov $acc1,8*1(%rdi) + adc \$0,$acc3 + mov $acc2,8*2(%rdi) + mov $acc3,8*3(%rdi) + + mov 8*3(%rsp),%r15 + mov 8*4(%rsp),%r14 + mov 8*5(%rsp),%r13 + mov 8*6(%rsp),%r12 + mov 8*7(%rsp),%rbx + mov 8*8(%rsp),%rbp + lea 8*9(%rsp),%rsp + ret +.size x25519_fe64_sqr,.-x25519_fe64_sqr + +.globl x25519_fe64_mul121666 +.type x25519_fe64_mul121666,\@function,2 +.align 32 +x25519_fe64_mul121666: + mov \$121666,%edx + mulx 8*0(%rsi),$acc0,%rcx + mulx 8*1(%rsi),$acc1,%rax + add %rcx,$acc1 + mulx 8*2(%rsi),$acc2,%rcx + adc %rax,$acc2 + mulx 8*3(%rsi),$acc3,%rax + adc %rcx,$acc3 + adc \$0,%rax + + imulq \$38,%rax,%rax + + add %rax,$acc0 + adc \$0,$acc1 + adc \$0,$acc2 + adc \$0,$acc3 + + sbb %rax,%rax # cf -> mask + and \$38,%rax + + add %rax,$acc0 + adc \$0,$acc1 + mov $acc0,8*0(%rdi) + adc \$0,$acc2 + mov $acc1,8*1(%rdi) + adc \$0,$acc3 + mov $acc2,8*2(%rdi) + mov $acc3,8*3(%rdi) + + ret +.size x25519_fe64_mul121666,.-x25519_fe64_mul121666 + +.globl x25519_fe64_add +.type x25519_fe64_add,\@function,3 +.align 32 +x25519_fe64_add: + mov 8*0(%rsi),$acc0 + mov 8*1(%rsi),$acc1 + mov 8*2(%rsi),$acc2 + mov 8*3(%rsi),$acc3 + + add 8*0(%rdx),$acc0 + adc 8*1(%rdx),$acc1 + adc 8*2(%rdx),$acc2 + adc 8*3(%rdx),$acc3 + + sbb %rax,%rax # cf -> mask + and \$38,%rax + + add %rax,$acc0 + adc \$0,$acc1 + mov $acc0,8*0(%rdi) + adc \$0,$acc2 + mov $acc1,8*1(%rdi) + adc \$0,$acc3 + mov $acc2,8*2(%rdi) + mov $acc3,8*3(%rdi) + + ret +.size x25519_fe64_add,.-x25519_fe64_add + +.globl x25519_fe64_sub +.type x25519_fe64_sub,\@function,3 +.align 32 +x25519_fe64_sub: + mov 8*0(%rsi),$acc0 + mov 8*1(%rsi),$acc1 + mov 8*2(%rsi),$acc2 + mov 8*3(%rsi),$acc3 + + sub 8*0(%rdx),$acc0 + sbb 8*1(%rdx),$acc1 + sbb 8*2(%rdx),$acc2 + sbb 8*3(%rdx),$acc3 + + sbb %rax,%rax # cf -> mask + and \$38,%rax + + sub %rax,$acc0 + sbb \$0,$acc1 + mov $acc0,8*0(%rdi) + sbb \$0,$acc2 + mov $acc1,8*1(%rdi) + sbb \$0,$acc3 + mov $acc2,8*2(%rdi) + mov $acc3,8*3(%rdi) + + ret +.size x25519_fe64_sub,.-x25519_fe64_sub + +.globl x25519_fe64_tobytes +.type x25519_fe64_tobytes,\@function,2 +.align 32 +x25519_fe64_tobytes: + mov 8*0(%rsi),$acc0 + mov 8*1(%rsi),$acc1 + mov 8*2(%rsi),$acc2 + mov 8*3(%rsi),$acc3 + + ################################# reduction modulo 2^255-19 + lea ($acc3,$acc3),%rax + sar \$63,$acc3 # most significant bit -> mask + shr \$1,%rax # most significant bit cleared + and \$19,$acc3 + + add $acc3,$acc0 + adc \$0,$acc1 + adc \$0,$acc2 + adc \$0,%rax + + lea (%rax,%rax),$acc3 + sar \$63,%rax # most significant bit -> mask + shr \$1,$acc3 # most significant bit cleared + and \$19,%rax + + add %rax,$acc0 + adc \$0,$acc1 + adc \$0,$acc2 + adc \$0,$acc3 + + mov $acc0,8*0(%rdi) + mov $acc1,8*1(%rdi) + mov $acc2,8*2(%rdi) + mov $acc3,8*3(%rdi) + + ret +.size x25519_fe64_tobytes,.-x25519_fe64_tobytes +___ +} else { +$code.=<<___; +.globl x25519_fe64_eligible +.type x25519_fe64_eligible,\@abi-omnipotent +.align 32 +x25519_fe64_eligible: + xor %eax,%eax + ret +.size x25519_fe64_eligible,.-x25519_fe64_eligible + +.globl x25519_fe64_mul +.type x25519_fe64_mul,\@abi-omnipotent +.globl x25519_fe64_sqr +.globl x25519_fe64_mul121666 +.globl x25519_fe64_add +.globl x25519_fe64_sub +.globl x25519_fe64_tobytes +x25519_fe64_mul: +x25519_fe64_sqr: +x25519_fe64_mul121666: +x25519_fe64_add: +x25519_fe64_sub: +x25519_fe64_tobytes: + .byte 0x0f,0x0b # ud2 + ret +.size x25519_fe64_mul,.-x25519_fe64_mul +___ +} +$code.=<<___; +.asciz "X25519 primitives for x86_64, CRYPTOGAMS by " +___ + +$code =~ s/\`([^\`]*)\`/eval $1/gem; +print $code; +close $STDOUT; diff --git a/crypto/ec/build.info b/crypto/ec/build.info index 970c2922..1e7814f2 100644 --- a/crypto/ec/build.info +++ b/crypto/ec/build.info @@ -6,9 +6,12 @@ SOURCE[../../libcrypto]=\ ecp_nistp224.c ecp_nistp256.c ecp_nistp521.c ecp_nistputil.c \ ecp_oct.c ec2_oct.c ec_oct.c ec_kmeth.c ecdh_ossl.c ecdh_kdf.c \ ecdsa_ossl.c ecdsa_sign.c ecdsa_vrf.c curve25519.c ecx_meth.c \ + curve448/arch_32/f_impl.c curve448/f_generic.c curve448/scalar.c \ + curve448/curve448_tables.c curve448/eddsa.c curve448/curve448.c \ {- $target{ec_asm_src} -} -GENERATE[ecp_nistz256-x86.s]=asm/ecp_nistz256-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[ecp_nistz256-x86.s]=asm/ecp_nistz256-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) GENERATE[ecp_nistz256-x86_64.s]=asm/ecp_nistz256-x86_64.pl $(PERLASM_SCHEME) @@ -21,8 +24,18 @@ GENERATE[ecp_nistz256-armv4.S]=asm/ecp_nistz256-armv4.pl $(PERLASM_SCHEME) INCLUDE[ecp_nistz256-armv4.o]=.. GENERATE[ecp_nistz256-armv8.S]=asm/ecp_nistz256-armv8.pl $(PERLASM_SCHEME) INCLUDE[ecp_nistz256-armv8.o]=.. +GENERATE[ecp_nistz256-ppc64.s]=asm/ecp_nistz256-ppc64.pl $(PERLASM_SCHEME) + +GENERATE[x25519-x86_64.s]=asm/x25519-x86_64.pl $(PERLASM_SCHEME) BEGINRAW[Makefile] {- $builddir -}/ecp_nistz256-%.S: {- $sourcedir -}/asm/ecp_nistz256-%.pl CC="$(CC)" $(PERL) $< $(PERLASM_SCHEME) $@ ENDRAW[Makefile] + +INCLUDE[curve448/arch_32/f_impl.o]=curve448/arch_32 curve448 +INCLUDE[curve448/f_generic.o]=curve448/arch_32 curve448 +INCLUDE[curve448/scalar.o]=curve448/arch_32 curve448 +INCLUDE[curve448/curve448_tables.o]=curve448/arch_32 curve448 +INCLUDE[curve448/eddsa.o]=curve448/arch_32 curve448 +INCLUDE[curve448/curve448.o]=curve448/arch_32 curve448 diff --git a/crypto/ec/curve25519.c b/crypto/ec/curve25519.c index c606a9b5..45525f47 100644 --- a/crypto/ec/curve25519.c +++ b/crypto/ec/curve25519.c @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,15 +11,18 @@ #include "ec_lcl.h" #include -#if !defined(PEDANTIC) && \ - (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16) +#if defined(X25519_ASM) \ + || ( (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16) \ + && !defined(__sparc__) ) /* * Base 2^51 implementation. */ # define BASE_2_51_IMPLEMENTED typedef uint64_t fe51[5]; -typedef unsigned __int128 u128; +# if !defined(X25519_ASM) +typedef __uint128_t u128; +# endif static const uint64_t MASK51 = 0x7ffffffffffff; @@ -97,40 +100,284 @@ static void fe51_tobytes(uint8_t *s, const fe51 h) h4 &= MASK51; /* smash */ - s[0] = h0 >> 0; - s[1] = h0 >> 8; - s[2] = h0 >> 16; - s[3] = h0 >> 24; - s[4] = h0 >> 32; - s[5] = h0 >> 40; - s[6] = (h0 >> 48) | ((uint32_t)h1 << 3); - s[7] = h1 >> 5; - s[8] = h1 >> 13; - s[9] = h1 >> 21; - s[10] = h1 >> 29; - s[11] = h1 >> 37; - s[12] = (h1 >> 45) | ((uint32_t)h2 << 6); - s[13] = h2 >> 2; - s[14] = h2 >> 10; - s[15] = h2 >> 18; - s[16] = h2 >> 26; - s[17] = h2 >> 34; - s[18] = h2 >> 42; - s[19] = (h2 >> 50) | ((uint32_t)h3 << 1); - s[20] = h3 >> 7; - s[21] = h3 >> 15; - s[22] = h3 >> 23; - s[23] = h3 >> 31; - s[24] = h3 >> 39; - s[25] = (h3 >> 47) | ((uint32_t)h4 << 4); - s[26] = h4 >> 4; - s[27] = h4 >> 12; - s[28] = h4 >> 20; - s[29] = h4 >> 28; - s[30] = h4 >> 36; - s[31] = h4 >> 44; + s[0] = (uint8_t)(h0 >> 0); + s[1] = (uint8_t)(h0 >> 8); + s[2] = (uint8_t)(h0 >> 16); + s[3] = (uint8_t)(h0 >> 24); + s[4] = (uint8_t)(h0 >> 32); + s[5] = (uint8_t)(h0 >> 40); + s[6] = (uint8_t)((h0 >> 48) | ((uint32_t)h1 << 3)); + s[7] = (uint8_t)(h1 >> 5); + s[8] = (uint8_t)(h1 >> 13); + s[9] = (uint8_t)(h1 >> 21); + s[10] = (uint8_t)(h1 >> 29); + s[11] = (uint8_t)(h1 >> 37); + s[12] = (uint8_t)((h1 >> 45) | ((uint32_t)h2 << 6)); + s[13] = (uint8_t)(h2 >> 2); + s[14] = (uint8_t)(h2 >> 10); + s[15] = (uint8_t)(h2 >> 18); + s[16] = (uint8_t)(h2 >> 26); + s[17] = (uint8_t)(h2 >> 34); + s[18] = (uint8_t)(h2 >> 42); + s[19] = (uint8_t)((h2 >> 50) | ((uint32_t)h3 << 1)); + s[20] = (uint8_t)(h3 >> 7); + s[21] = (uint8_t)(h3 >> 15); + s[22] = (uint8_t)(h3 >> 23); + s[23] = (uint8_t)(h3 >> 31); + s[24] = (uint8_t)(h3 >> 39); + s[25] = (uint8_t)((h3 >> 47) | ((uint32_t)h4 << 4)); + s[26] = (uint8_t)(h4 >> 4); + s[27] = (uint8_t)(h4 >> 12); + s[28] = (uint8_t)(h4 >> 20); + s[29] = (uint8_t)(h4 >> 28); + s[30] = (uint8_t)(h4 >> 36); + s[31] = (uint8_t)(h4 >> 44); } +# ifdef X25519_ASM +void x25519_fe51_mul(fe51 h, const fe51 f, const fe51 g); +void x25519_fe51_sqr(fe51 h, const fe51 f); +void x25519_fe51_mul121666(fe51 h, fe51 f); +# define fe51_mul x25519_fe51_mul +# define fe51_sq x25519_fe51_sqr +# define fe51_mul121666 x25519_fe51_mul121666 + +# if defined(__x86_64) || defined(__x86_64__) || \ + defined(_M_AMD64) || defined(_M_X64) + +# define BASE_2_64_IMPLEMENTED + +typedef uint64_t fe64[4]; + +int x25519_fe64_eligible(); + +/* + * There are no reference C implementations for this radix. + */ +void x25519_fe64_mul(fe64 h, const fe64 f, const fe64 g); +void x25519_fe64_sqr(fe64 h, const fe64 f); +void x25519_fe64_mul121666(fe64 h, fe64 f); +void x25519_fe64_add(fe64 h, const fe64 f, const fe64 g); +void x25519_fe64_sub(fe64 h, const fe64 f, const fe64 g); +void x25519_fe64_tobytes(uint8_t *s, const fe64 f); +# define fe64_mul x25519_fe64_mul +# define fe64_sqr x25519_fe64_sqr +# define fe64_mul121666 x25519_fe64_mul121666 +# define fe64_add x25519_fe64_add +# define fe64_sub x25519_fe64_sub +# define fe64_tobytes x25519_fe64_tobytes + +static uint64_t load_8(const uint8_t *in) +{ + uint64_t result; + + result = in[0]; + result |= ((uint64_t)in[1]) << 8; + result |= ((uint64_t)in[2]) << 16; + result |= ((uint64_t)in[3]) << 24; + result |= ((uint64_t)in[4]) << 32; + result |= ((uint64_t)in[5]) << 40; + result |= ((uint64_t)in[6]) << 48; + result |= ((uint64_t)in[7]) << 56; + + return result; +} + +static void fe64_frombytes(fe64 h, const uint8_t *s) +{ + h[0] = load_8(s); + h[1] = load_8(s + 8); + h[2] = load_8(s + 16); + h[3] = load_8(s + 24) & 0x7fffffffffffffff; +} + +static void fe64_0(fe64 h) +{ + h[0] = 0; + h[1] = 0; + h[2] = 0; + h[3] = 0; +} + +static void fe64_1(fe64 h) +{ + h[0] = 1; + h[1] = 0; + h[2] = 0; + h[3] = 0; +} + +static void fe64_copy(fe64 h, const fe64 f) +{ + h[0] = f[0]; + h[1] = f[1]; + h[2] = f[2]; + h[3] = f[3]; +} + +static void fe64_cswap(fe64 f, fe64 g, unsigned int b) +{ + int i; + uint64_t mask = 0 - (uint64_t)b; + + for (i = 0; i < 4; i++) { + uint64_t x = f[i] ^ g[i]; + x &= mask; + f[i] ^= x; + g[i] ^= x; + } +} + +static void fe64_invert(fe64 out, const fe64 z) +{ + fe64 t0; + fe64 t1; + fe64 t2; + fe64 t3; + int i; + + /* + * Compute z ** -1 = z ** (2 ** 255 - 19 - 2) with the exponent as + * 2 ** 255 - 21 = (2 ** 5) * (2 ** 250 - 1) + 11. + */ + + /* t0 = z ** 2 */ + fe64_sqr(t0, z); + + /* t1 = t0 ** (2 ** 2) = z ** 8 */ + fe64_sqr(t1, t0); + fe64_sqr(t1, t1); + + /* t1 = z * t1 = z ** 9 */ + fe64_mul(t1, z, t1); + /* t0 = t0 * t1 = z ** 11 -- stash t0 away for the end. */ + fe64_mul(t0, t0, t1); + + /* t2 = t0 ** 2 = z ** 22 */ + fe64_sqr(t2, t0); + + /* t1 = t1 * t2 = z ** (2 ** 5 - 1) */ + fe64_mul(t1, t1, t2); + + /* t2 = t1 ** (2 ** 5) = z ** ((2 ** 5) * (2 ** 5 - 1)) */ + fe64_sqr(t2, t1); + for (i = 1; i < 5; ++i) + fe64_sqr(t2, t2); + + /* t1 = t1 * t2 = z ** ((2 ** 5 + 1) * (2 ** 5 - 1)) = z ** (2 ** 10 - 1) */ + fe64_mul(t1, t2, t1); + + /* Continuing similarly... */ + + /* t2 = z ** (2 ** 20 - 1) */ + fe64_sqr(t2, t1); + for (i = 1; i < 10; ++i) + fe64_sqr(t2, t2); + + fe64_mul(t2, t2, t1); + + /* t2 = z ** (2 ** 40 - 1) */ + fe64_sqr(t3, t2); + for (i = 1; i < 20; ++i) + fe64_sqr(t3, t3); + + fe64_mul(t2, t3, t2); + + /* t2 = z ** (2 ** 10) * (2 ** 40 - 1) */ + for (i = 0; i < 10; ++i) + fe64_sqr(t2, t2); + + /* t1 = z ** (2 ** 50 - 1) */ + fe64_mul(t1, t2, t1); + + /* t2 = z ** (2 ** 100 - 1) */ + fe64_sqr(t2, t1); + for (i = 1; i < 50; ++i) + fe64_sqr(t2, t2); + + fe64_mul(t2, t2, t1); + + /* t2 = z ** (2 ** 200 - 1) */ + fe64_sqr(t3, t2); + for (i = 1; i < 100; ++i) + fe64_sqr(t3, t3); + + fe64_mul(t2, t3, t2); + + /* t2 = z ** ((2 ** 50) * (2 ** 200 - 1) */ + for (i = 0; i < 50; ++i) + fe64_sqr(t2, t2); + + /* t1 = z ** (2 ** 250 - 1) */ + fe64_mul(t1, t2, t1); + + /* t1 = z ** ((2 ** 5) * (2 ** 250 - 1)) */ + for (i = 0; i < 5; ++i) + fe64_sqr(t1, t1); + + /* Recall t0 = z ** 11; out = z ** (2 ** 255 - 21) */ + fe64_mul(out, t1, t0); +} + +/* + * Duplicate of original x25519_scalar_mult_generic, but using + * fe64_* subroutines. + */ +static void x25519_scalar_mulx(uint8_t out[32], const uint8_t scalar[32], + const uint8_t point[32]) +{ + fe64 x1, x2, z2, x3, z3, tmp0, tmp1; + uint8_t e[32]; + unsigned swap = 0; + int pos; + + memcpy(e, scalar, 32); + e[0] &= 0xf8; + e[31] &= 0x7f; + e[31] |= 0x40; + fe64_frombytes(x1, point); + fe64_1(x2); + fe64_0(z2); + fe64_copy(x3, x1); + fe64_1(z3); + + for (pos = 254; pos >= 0; --pos) { + unsigned int b = 1 & (e[pos / 8] >> (pos & 7)); + + swap ^= b; + fe64_cswap(x2, x3, swap); + fe64_cswap(z2, z3, swap); + swap = b; + fe64_sub(tmp0, x3, z3); + fe64_sub(tmp1, x2, z2); + fe64_add(x2, x2, z2); + fe64_add(z2, x3, z3); + fe64_mul(z3, x2, tmp0); + fe64_mul(z2, z2, tmp1); + fe64_sqr(tmp0, tmp1); + fe64_sqr(tmp1, x2); + fe64_add(x3, z3, z2); + fe64_sub(z2, z3, z2); + fe64_mul(x2, tmp1, tmp0); + fe64_sub(tmp1, tmp1, tmp0); + fe64_sqr(z2, z2); + fe64_mul121666(z3, tmp1); + fe64_sqr(x3, x3); + fe64_add(tmp0, tmp0, z3); + fe64_mul(z3, x1, z2); + fe64_mul(z2, tmp1, tmp0); + } + + fe64_invert(z2, z2); + fe64_mul(x2, x2, z2); + fe64_tobytes(out, x2); + + OPENSSL_cleanse(e, sizeof(e)); +} +# endif + +# else + static void fe51_mul(fe51 h, const fe51 f, const fe51 g) { u128 h0, h1, h2, h3, h4; @@ -191,9 +438,9 @@ static void fe51_mul(fe51 h, const fe51 f, const fe51 g) static void fe51_sq(fe51 h, const fe51 f) { -# if defined(OPENSSL_SMALL_FOOTPRINT) +# if defined(OPENSSL_SMALL_FOOTPRINT) fe51_mul(h, f, f); -# else +# else /* dedicated squaring gives 16-25% overall improvement */ uint64_t g0 = f[0]; uint64_t g1 = f[1]; @@ -221,7 +468,7 @@ static void fe51_sq(fe51 h, const fe51 f) h2 += (u128)(g0 * 2) * g4; h4 += (u128)g2 * g2; g2 *= 2; - h0 += (u128)g2 * g3; + h0 += (u128)g2 * g3; h1 += (u128)g2 * g4; /* partial [lazy] reduction */ @@ -240,9 +487,36 @@ static void fe51_sq(fe51 h, const fe51 f) h[2] = g2; h[3] = g3; h[4] = g4; -# endif +# endif } +static void fe51_mul121666(fe51 h, fe51 f) +{ + u128 h0 = f[0] * (u128)121666; + u128 h1 = f[1] * (u128)121666; + u128 h2 = f[2] * (u128)121666; + u128 h3 = f[3] * (u128)121666; + u128 h4 = f[4] * (u128)121666; + uint64_t g0, g1, g2, g3, g4; + + h3 += (uint64_t)(h2 >> 51); g2 = (uint64_t)h2 & MASK51; + h1 += (uint64_t)(h0 >> 51); g0 = (uint64_t)h0 & MASK51; + + h4 += (uint64_t)(h3 >> 51); g3 = (uint64_t)h3 & MASK51; + g2 += (uint64_t)(h1 >> 51); g1 = (uint64_t)h1 & MASK51; + + g0 += (uint64_t)(h4 >> 51) * 19; g4 = (uint64_t)h4 & MASK51; + g3 += g2 >> 51; g2 &= MASK51; + g1 += g0 >> 51; g0 &= MASK51; + + h[0] = g0; + h[1] = g1; + h[2] = g2; + h[3] = g3; + h[4] = g4; +} +# endif + static void fe51_add(fe51 h, const fe51 f, const fe51 g) { h[0] = f[0] + g[0]; @@ -258,8 +532,8 @@ static void fe51_sub(fe51 h, const fe51 f, const fe51 g) * Add 2*modulus to ensure that result remains positive * even if subtrahend is partially reduced. */ - h[0] = (f[0] + 0xfffffffffffda) - g[0]; - h[1] = (f[1] + 0xffffffffffffe) - g[1]; + h[0] = (f[0] + 0xfffffffffffda) - g[0]; + h[1] = (f[1] + 0xffffffffffffe) - g[1]; h[2] = (f[2] + 0xffffffffffffe) - g[2]; h[3] = (f[3] + 0xffffffffffffe) - g[3]; h[4] = (f[4] + 0xffffffffffffe) - g[4]; @@ -396,32 +670,6 @@ static void fe51_invert(fe51 out, const fe51 z) fe51_mul(out, t1, t0); } -static void fe51_mul121666(fe51 h, fe51 f) -{ - u128 h0 = f[0] * (u128)121666; - u128 h1 = f[1] * (u128)121666; - u128 h2 = f[2] * (u128)121666; - u128 h3 = f[3] * (u128)121666; - u128 h4 = f[4] * (u128)121666; - uint64_t g0, g1, g2, g3, g4; - - h3 += (uint64_t)(h2 >> 51); g2 = (uint64_t)h2 & MASK51; - h1 += (uint64_t)(h0 >> 51); g0 = (uint64_t)h0 & MASK51; - - h4 += (uint64_t)(h3 >> 51); g3 = (uint64_t)h3 & MASK51; - g2 += (uint64_t)(h1 >> 51); g1 = (uint64_t)h1 & MASK51; - - g0 += (uint64_t)(h4 >> 51) * 19; g4 = (uint64_t)h4 & MASK51; - g3 += g2 >> 51; g2 &= MASK51; - g1 += g0 >> 51; g0 &= MASK51; - - h[0] = g0; - h[1] = g1; - h[2] = g2; - h[3] = g3; - h[4] = g4; -} - /* * Duplicate of original x25519_scalar_mult_generic, but using * fe51_* subroutines. @@ -434,6 +682,13 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32], unsigned swap = 0; int pos; +# ifdef BASE_2_64_IMPLEMENTED + if (x25519_fe64_eligible()) { + x25519_scalar_mulx(out, scalar, point); + return; + } +# endif + memcpy(e, scalar, 32); e[0] &= 0xf8; e[31] &= 0x7f; @@ -470,8 +725,6 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32], fe51_mul(z3, x1, z2); fe51_mul(z2, tmp1, tmp0); } - fe51_cswap(x2, x3, swap); - fe51_cswap(z2, z3, swap); fe51_invert(z2, z2); fe51_mul(x2, x2, z2); @@ -554,16 +807,16 @@ static void fe_frombytes(fe h, const uint8_t *s) { carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits; carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits; - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; + h[0] = (int32_t)h0; + h[1] = (int32_t)h1; + h[2] = (int32_t)h2; + h[3] = (int32_t)h3; + h[4] = (int32_t)h4; + h[5] = (int32_t)h5; + h[6] = (int32_t)h6; + h[7] = (int32_t)h7; + h[8] = (int32_t)h8; + h[9] = (int32_t)h9; } /* Preconditions: @@ -634,38 +887,38 @@ static void fe_tobytes(uint8_t *s, const fe h) { * evidently 2^255 h10-2^255 q = 0. * Goal: Output h0+...+2^230 h9. */ - s[0] = h0 >> 0; - s[1] = h0 >> 8; - s[2] = h0 >> 16; - s[3] = (h0 >> 24) | ((uint32_t)(h1) << 2); - s[4] = h1 >> 6; - s[5] = h1 >> 14; - s[6] = (h1 >> 22) | ((uint32_t)(h2) << 3); - s[7] = h2 >> 5; - s[8] = h2 >> 13; - s[9] = (h2 >> 21) | ((uint32_t)(h3) << 5); - s[10] = h3 >> 3; - s[11] = h3 >> 11; - s[12] = (h3 >> 19) | ((uint32_t)(h4) << 6); - s[13] = h4 >> 2; - s[14] = h4 >> 10; - s[15] = h4 >> 18; - s[16] = h5 >> 0; - s[17] = h5 >> 8; - s[18] = h5 >> 16; - s[19] = (h5 >> 24) | ((uint32_t)(h6) << 1); - s[20] = h6 >> 7; - s[21] = h6 >> 15; - s[22] = (h6 >> 23) | ((uint32_t)(h7) << 3); - s[23] = h7 >> 5; - s[24] = h7 >> 13; - s[25] = (h7 >> 21) | ((uint32_t)(h8) << 4); - s[26] = h8 >> 4; - s[27] = h8 >> 12; - s[28] = (h8 >> 20) | ((uint32_t)(h9) << 6); - s[29] = h9 >> 2; - s[30] = h9 >> 10; - s[31] = h9 >> 18; + s[0] = (uint8_t)(h0 >> 0); + s[1] = (uint8_t)(h0 >> 8); + s[2] = (uint8_t)(h0 >> 16); + s[3] = (uint8_t)((h0 >> 24) | ((uint32_t)(h1) << 2)); + s[4] = (uint8_t)(h1 >> 6); + s[5] = (uint8_t)(h1 >> 14); + s[6] = (uint8_t)((h1 >> 22) | ((uint32_t)(h2) << 3)); + s[7] = (uint8_t)(h2 >> 5); + s[8] = (uint8_t)(h2 >> 13); + s[9] = (uint8_t)((h2 >> 21) | ((uint32_t)(h3) << 5)); + s[10] = (uint8_t)(h3 >> 3); + s[11] = (uint8_t)(h3 >> 11); + s[12] = (uint8_t)((h3 >> 19) | ((uint32_t)(h4) << 6)); + s[13] = (uint8_t)(h4 >> 2); + s[14] = (uint8_t)(h4 >> 10); + s[15] = (uint8_t)(h4 >> 18); + s[16] = (uint8_t)(h5 >> 0); + s[17] = (uint8_t)(h5 >> 8); + s[18] = (uint8_t)(h5 >> 16); + s[19] = (uint8_t)((h5 >> 24) | ((uint32_t)(h6) << 1)); + s[20] = (uint8_t)(h6 >> 7); + s[21] = (uint8_t)(h6 >> 15); + s[22] = (uint8_t)((h6 >> 23) | ((uint32_t)(h7) << 3)); + s[23] = (uint8_t)(h7 >> 5); + s[24] = (uint8_t)(h7 >> 13); + s[25] = (uint8_t)((h7 >> 21) | ((uint32_t)(h8) << 4)); + s[26] = (uint8_t)(h8 >> 4); + s[27] = (uint8_t)(h8 >> 12); + s[28] = (uint8_t)((h8 >> 20) | ((uint32_t)(h9) << 6)); + s[29] = (uint8_t)(h9 >> 2); + s[30] = (uint8_t)(h9 >> 10); + s[31] = (uint8_t)(h9 >> 18); } /* h = f */ @@ -945,16 +1198,16 @@ static void fe_mul(fe h, const fe f, const fe g) { /* |h0| <= 2^25; from now on fits into int32 unchanged */ /* |h1| <= 1.01*2^24 */ - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; + h[0] = (int32_t)h0; + h[1] = (int32_t)h1; + h[2] = (int32_t)h2; + h[3] = (int32_t)h3; + h[4] = (int32_t)h4; + h[5] = (int32_t)h5; + h[6] = (int32_t)h6; + h[7] = (int32_t)h7; + h[8] = (int32_t)h8; + h[9] = (int32_t)h9; } /* h = f * f @@ -1086,16 +1339,16 @@ static void fe_sq(fe h, const fe f) { carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits; - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; + h[0] = (int32_t)h0; + h[1] = (int32_t)h1; + h[2] = (int32_t)h2; + h[3] = (int32_t)h3; + h[4] = (int32_t)h4; + h[5] = (int32_t)h5; + h[6] = (int32_t)h6; + h[7] = (int32_t)h7; + h[8] = (int32_t)h8; + h[9] = (int32_t)h9; } static void fe_invert(fe out, const fe z) { @@ -1221,6 +1474,30 @@ static void fe_cmov(fe f, const fe g, unsigned b) { } } +/* return 0 if f == 0 + * return 1 if f != 0 + * + * Preconditions: + * |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ +static int fe_isnonzero(const fe f) { + uint8_t s[32]; + static const uint8_t zero[32] = {0}; + fe_tobytes(s, f); + + return CRYPTO_memcmp(s, zero, sizeof(zero)) != 0; +} + +/* return 1 if f is in {1,3,5,...,q-2} + * return 0 if f is in {0,2,4,...,q-1} + * + * Preconditions: + * |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. */ +static int fe_isnegative(const fe f) { + uint8_t s[32]; + fe_tobytes(s, f); + return s[0] & 1; +} + /* h = 2 * f * f * Can overlap h with f. * @@ -1361,16 +1638,73 @@ static void fe_sq2(fe h, const fe f) { carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits; - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; + h[0] = (int32_t)h0; + h[1] = (int32_t)h1; + h[2] = (int32_t)h2; + h[3] = (int32_t)h3; + h[4] = (int32_t)h4; + h[5] = (int32_t)h5; + h[6] = (int32_t)h6; + h[7] = (int32_t)h7; + h[8] = (int32_t)h8; + h[9] = (int32_t)h9; +} + +static void fe_pow22523(fe out, const fe z) { + fe t0; + fe t1; + fe t2; + int i; + + fe_sq(t0, z); + fe_sq(t1, t0); + for (i = 1; i < 2; ++i) { + fe_sq(t1, t1); + } + fe_mul(t1, z, t1); + fe_mul(t0, t0, t1); + fe_sq(t0, t0); + fe_mul(t0, t1, t0); + fe_sq(t1, t0); + for (i = 1; i < 5; ++i) { + fe_sq(t1, t1); + } + fe_mul(t0, t1, t0); + fe_sq(t1, t0); + for (i = 1; i < 10; ++i) { + fe_sq(t1, t1); + } + fe_mul(t1, t1, t0); + fe_sq(t2, t1); + for (i = 1; i < 20; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + fe_sq(t1, t1); + for (i = 1; i < 10; ++i) { + fe_sq(t1, t1); + } + fe_mul(t0, t1, t0); + fe_sq(t1, t0); + for (i = 1; i < 50; ++i) { + fe_sq(t1, t1); + } + fe_mul(t1, t1, t0); + fe_sq(t2, t1); + for (i = 1; i < 100; ++i) { + fe_sq(t2, t2); + } + fe_mul(t1, t2, t1); + fe_sq(t1, t1); + for (i = 1; i < 50; ++i) { + fe_sq(t1, t1); + } + fe_mul(t0, t1, t0); + fe_sq(t0, t0); + for (i = 1; i < 2; ++i) { + fe_sq(t0, t0); + } + fe_mul(out, t0, z); } /* ge means group element. @@ -1418,6 +1752,85 @@ typedef struct { fe T2d; } ge_cached; +static void ge_tobytes(uint8_t *s, const ge_p2 *h) { + fe recip; + fe x; + fe y; + + fe_invert(recip, h->Z); + fe_mul(x, h->X, recip); + fe_mul(y, h->Y, recip); + fe_tobytes(s, y); + s[31] ^= fe_isnegative(x) << 7; +} + +static void ge_p3_tobytes(uint8_t *s, const ge_p3 *h) { + fe recip; + fe x; + fe y; + + fe_invert(recip, h->Z); + fe_mul(x, h->X, recip); + fe_mul(y, h->Y, recip); + fe_tobytes(s, y); + s[31] ^= fe_isnegative(x) << 7; +} + +static const fe d = {-10913610, 13857413, -15372611, 6949391, 114729, + -8787816, -6275908, -3247719, -18696448, -12055116}; + +static const fe sqrtm1 = {-32595792, -7943725, 9377950, 3500415, 12389472, + -272473, -25146209, -2005654, 326686, 11406482}; + +static int ge_frombytes_vartime(ge_p3 *h, const uint8_t *s) { + fe u; + fe v; + fe v3; + fe vxx; + fe check; + + fe_frombytes(h->Y, s); + fe_1(h->Z); + fe_sq(u, h->Y); + fe_mul(v, u, d); + fe_sub(u, u, h->Z); /* u = y^2-1 */ + fe_add(v, v, h->Z); /* v = dy^2+1 */ + + fe_sq(v3, v); + fe_mul(v3, v3, v); /* v3 = v^3 */ + fe_sq(h->X, v3); + fe_mul(h->X, h->X, v); + fe_mul(h->X, h->X, u); /* x = uv^7 */ + + fe_pow22523(h->X, h->X); /* x = (uv^7)^((q-5)/8) */ + fe_mul(h->X, h->X, v3); + fe_mul(h->X, h->X, u); /* x = uv^3(uv^7)^((q-5)/8) */ + + fe_sq(vxx, h->X); + fe_mul(vxx, vxx, v); + fe_sub(check, vxx, u); /* vx^2-u */ + if (fe_isnonzero(check)) { + fe_add(check, vxx, u); /* vx^2+u */ + if (fe_isnonzero(check)) { + return -1; + } + fe_mul(h->X, h->X, sqrtm1); + } + + if (fe_isnegative(h->X) != (s[31] >> 7)) { + fe_neg(h->X, h->X); + } + + fe_mul(h->T, h->X, h->Y); + return 0; +} + +static void ge_p2_0(ge_p2 *h) { + fe_0(h->X); + fe_1(h->Y); + fe_1(h->Z); +} + static void ge_p3_0(ge_p3 *h) { fe_0(h->X); fe_1(h->Y); @@ -1438,6 +1851,17 @@ static void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) { fe_copy(r->Z, p->Z); } +static const fe d2 = {-21827239, -5839606, -30745221, 13898782, 229458, + 15978800, -12551817, -6495438, 29715968, 9444199}; + +/* r = p */ +static void ge_p3_to_cached(ge_cached *r, const ge_p3 *p) { + fe_add(r->YplusX, p->Y, p->X); + fe_sub(r->YminusX, p->Y, p->X); + fe_copy(r->Z, p->Z); + fe_mul(r->T2d, p->T, d2); +} + /* r = p */ static void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) { fe_mul(r->X, p->X, p->T); @@ -1491,6 +1915,56 @@ static void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) { fe_sub(r->T, t0, r->T); } +/* r = p - q */ +static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) { + fe t0; + + fe_add(r->X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->yminusx); + fe_mul(r->Y, r->Y, q->yplusx); + fe_mul(r->T, q->xy2d, p->T); + fe_add(t0, p->Z, p->Z); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_sub(r->Z, t0, r->T); + fe_add(r->T, t0, r->T); +} + +/* r = p + q */ +static void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) { + fe t0; + + fe_add(r->X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->YplusX); + fe_mul(r->Y, r->Y, q->YminusX); + fe_mul(r->T, q->T2d, p->T); + fe_mul(r->X, p->Z, q->Z); + fe_add(t0, r->X, r->X); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_add(r->Z, t0, r->T); + fe_sub(r->T, t0, r->T); +} + +/* r = p - q */ +static void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) { + fe t0; + + fe_add(r->X, p->Y, p->X); + fe_sub(r->Y, p->Y, p->X); + fe_mul(r->Z, r->X, q->YminusX); + fe_mul(r->Y, r->Y, q->YplusX); + fe_mul(r->T, q->T2d, p->T); + fe_mul(r->X, p->Z, q->Z); + fe_add(t0, r->X, r->X); + fe_sub(r->X, r->Z, r->Y); + fe_add(r->Y, r->Z, r->Y); + fe_sub(r->Z, t0, r->T); + fe_add(r->T, t0, r->T); +} + static uint8_t equal(signed char b, signed char c) { uint8_t ub = b; uint8_t uc = c; @@ -3773,16 +4247,16 @@ static void fe_mul121666(fe h, fe f) { carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits; carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits; - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; + h[0] = (int32_t)h0; + h[1] = (int32_t)h1; + h[2] = (int32_t)h2; + h[3] = (int32_t)h3; + h[4] = (int32_t)h4; + h[5] = (int32_t)h5; + h[6] = (int32_t)h6; + h[7] = (int32_t)h7; + h[8] = (int32_t)h8; + h[9] = (int32_t)h9; } static void x25519_scalar_mult_generic(uint8_t out[32], @@ -3828,8 +4302,6 @@ static void x25519_scalar_mult_generic(uint8_t out[32], fe_mul(z3, x1, z2); fe_mul(z2, tmp1, tmp0); } - fe_cswap(x2, x3, swap); - fe_cswap(z2, z3, swap); fe_invert(z2, z2); fe_mul(x2, x2, z2); @@ -3844,6 +4316,1106 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32], } #endif +static void slide(signed char *r, const uint8_t *a) { + int i; + int b; + int k; + + for (i = 0; i < 256; ++i) { + r[i] = 1 & (a[i >> 3] >> (i & 7)); + } + + for (i = 0; i < 256; ++i) { + if (r[i]) { + for (b = 1; b <= 6 && i + b < 256; ++b) { + if (r[i + b]) { + if (r[i] + (r[i + b] << b) <= 15) { + r[i] += r[i + b] << b; + r[i + b] = 0; + } else if (r[i] - (r[i + b] << b) >= -15) { + r[i] -= r[i + b] << b; + for (k = i + b; k < 256; ++k) { + if (!r[k]) { + r[k] = 1; + break; + } + r[k] = 0; + } + } else { + break; + } + } + } + } + } +} + +static const ge_precomp Bi[8] = { + { + {25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, + -11754271, -6079156, 2047605}, + {-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, + 5043384, 19500929, -15469378}, + {-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, + 11864899, -24514362, -4438546}, + }, + { + {15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, + -14772189, 28944400, -1550024}, + {16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, + -11775962, 7689662, 11199574}, + {30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, + 10017326, -17749093, -9920357}, + }, + { + {10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, + 14515107, -15438304, 10819380}, + {4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, + 12483688, -12668491, 5581306}, + {19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, + 13850243, -23678021, -15815942}, + }, + { + {5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, + 5230134, -23952439, -15175766}, + {-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, + 16520125, 30598449, 7715701}, + {28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, + 1370708, 29794553, -1409300}, + }, + { + {-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, + -1361450, -13062696, 13821877}, + {-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, + -7212327, 18853322, -14220951}, + {4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, + -10431137, 2207753, -3209784}, + }, + { + {-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, + -663000, -31111463, -16132436}, + {25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, + 15725684, 171356, 6466918}, + {23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, + -14088058, -30714912, 16193877}, + }, + { + {-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, + 4729455, -18074513, 9256800}, + {-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, + 9761698, -19827198, 630305}, + {-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, + -15960994, -2449256, -14291300}, + }, + { + {-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, + 15033784, 25105118, -7894876}, + {-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, + 1573892, -2625887, 2198790, -15804619}, + {-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, + -16236442, -32461234, -12290683}, + }, +}; + +/* r = a * A + b * B + * where a = a[0]+256*a[1]+...+256^31 a[31]. + * and b = b[0]+256*b[1]+...+256^31 b[31]. + * B is the Ed25519 base point (x,4/5) with x positive. */ +static void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a, + const ge_p3 *A, const uint8_t *b) { + signed char aslide[256]; + signed char bslide[256]; + ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */ + ge_p1p1 t; + ge_p3 u; + ge_p3 A2; + int i; + + slide(aslide, a); + slide(bslide, b); + + ge_p3_to_cached(&Ai[0], A); + ge_p3_dbl(&t, A); + ge_p1p1_to_p3(&A2, &t); + ge_add(&t, &A2, &Ai[0]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[1], &u); + ge_add(&t, &A2, &Ai[1]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[2], &u); + ge_add(&t, &A2, &Ai[2]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[3], &u); + ge_add(&t, &A2, &Ai[3]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[4], &u); + ge_add(&t, &A2, &Ai[4]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[5], &u); + ge_add(&t, &A2, &Ai[5]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[6], &u); + ge_add(&t, &A2, &Ai[6]); + ge_p1p1_to_p3(&u, &t); + ge_p3_to_cached(&Ai[7], &u); + + ge_p2_0(r); + + for (i = 255; i >= 0; --i) { + if (aslide[i] || bslide[i]) { + break; + } + } + + for (; i >= 0; --i) { + ge_p2_dbl(&t, r); + + if (aslide[i] > 0) { + ge_p1p1_to_p3(&u, &t); + ge_add(&t, &u, &Ai[aslide[i] / 2]); + } else if (aslide[i] < 0) { + ge_p1p1_to_p3(&u, &t); + ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); + } + + if (bslide[i] > 0) { + ge_p1p1_to_p3(&u, &t); + ge_madd(&t, &u, &Bi[bslide[i] / 2]); + } else if (bslide[i] < 0) { + ge_p1p1_to_p3(&u, &t); + ge_msub(&t, &u, &Bi[(-bslide[i]) / 2]); + } + + ge_p1p1_to_p2(r, &t); + } +} + +/* The set of scalars is \Z/l + * where l = 2^252 + 27742317777372353535851937790883648493. */ + +/* Input: + * s[0]+256*s[1]+...+256^63*s[63] = s + * + * Output: + * s[0]+256*s[1]+...+256^31*s[31] = s mod l + * where l = 2^252 + 27742317777372353535851937790883648493. + * Overwrites s in place. */ +static void x25519_sc_reduce(uint8_t *s) { + int64_t s0 = 2097151 & load_3(s); + int64_t s1 = 2097151 & (load_4(s + 2) >> 5); + int64_t s2 = 2097151 & (load_3(s + 5) >> 2); + int64_t s3 = 2097151 & (load_4(s + 7) >> 7); + int64_t s4 = 2097151 & (load_4(s + 10) >> 4); + int64_t s5 = 2097151 & (load_3(s + 13) >> 1); + int64_t s6 = 2097151 & (load_4(s + 15) >> 6); + int64_t s7 = 2097151 & (load_3(s + 18) >> 3); + int64_t s8 = 2097151 & load_3(s + 21); + int64_t s9 = 2097151 & (load_4(s + 23) >> 5); + int64_t s10 = 2097151 & (load_3(s + 26) >> 2); + int64_t s11 = 2097151 & (load_4(s + 28) >> 7); + int64_t s12 = 2097151 & (load_4(s + 31) >> 4); + int64_t s13 = 2097151 & (load_3(s + 34) >> 1); + int64_t s14 = 2097151 & (load_4(s + 36) >> 6); + int64_t s15 = 2097151 & (load_3(s + 39) >> 3); + int64_t s16 = 2097151 & load_3(s + 42); + int64_t s17 = 2097151 & (load_4(s + 44) >> 5); + int64_t s18 = 2097151 & (load_3(s + 47) >> 2); + int64_t s19 = 2097151 & (load_4(s + 49) >> 7); + int64_t s20 = 2097151 & (load_4(s + 52) >> 4); + int64_t s21 = 2097151 & (load_3(s + 55) >> 1); + int64_t s22 = 2097151 & (load_4(s + 57) >> 6); + int64_t s23 = (load_4(s + 60) >> 3); + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + s23 = 0; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + s22 = 0; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + s21 = 0; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + s20 = 0; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + s19 = 0; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + s18 = 0; + + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + carry12 = (s12 + (1 << 20)) >> 21; + s13 += carry12; + s12 -= carry12 * (1 << 21); + carry14 = (s14 + (1 << 20)) >> 21; + s15 += carry14; + s14 -= carry14 * (1 << 21); + carry16 = (s16 + (1 << 20)) >> 21; + s17 += carry16; + s16 -= carry16 * (1 << 21); + + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + carry13 = (s13 + (1 << 20)) >> 21; + s14 += carry13; + s13 -= carry13 * (1 << 21); + carry15 = (s15 + (1 << 20)) >> 21; + s16 += carry15; + s15 -= carry15 * (1 << 21); + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + s17 = 0; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + s16 = 0; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + s15 = 0; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + s14 = 0; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + s13 = 0; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1 << 20)) >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry2 = (s2 + (1 << 20)) >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry4 = (s4 + (1 << 20)) >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + + carry1 = (s1 + (1 << 20)) >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry3 = (s3 + (1 << 20)) >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry5 = (s5 + (1 << 20)) >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + + s[0] = (uint8_t)(s0 >> 0); + s[1] = (uint8_t)(s0 >> 8); + s[2] = (uint8_t)((s0 >> 16) | (s1 << 5)); + s[3] = (uint8_t)(s1 >> 3); + s[4] = (uint8_t)(s1 >> 11); + s[5] = (uint8_t)((s1 >> 19) | (s2 << 2)); + s[6] = (uint8_t)(s2 >> 6); + s[7] = (uint8_t)((s2 >> 14) | (s3 << 7)); + s[8] = (uint8_t)(s3 >> 1); + s[9] = (uint8_t)(s3 >> 9); + s[10] = (uint8_t)((s3 >> 17) | (s4 << 4)); + s[11] = (uint8_t)(s4 >> 4); + s[12] = (uint8_t)(s4 >> 12); + s[13] = (uint8_t)((s4 >> 20) | (s5 << 1)); + s[14] = (uint8_t)(s5 >> 7); + s[15] = (uint8_t)((s5 >> 15) | (s6 << 6)); + s[16] = (uint8_t)(s6 >> 2); + s[17] = (uint8_t)(s6 >> 10); + s[18] = (uint8_t)((s6 >> 18) | (s7 << 3)); + s[19] = (uint8_t)(s7 >> 5); + s[20] = (uint8_t)(s7 >> 13); + s[21] = (uint8_t)(s8 >> 0); + s[22] = (uint8_t)(s8 >> 8); + s[23] = (uint8_t)((s8 >> 16) | (s9 << 5)); + s[24] = (uint8_t)(s9 >> 3); + s[25] = (uint8_t)(s9 >> 11); + s[26] = (uint8_t)((s9 >> 19) | (s10 << 2)); + s[27] = (uint8_t)(s10 >> 6); + s[28] = (uint8_t)((s10 >> 14) | (s11 << 7)); + s[29] = (uint8_t)(s11 >> 1); + s[30] = (uint8_t)(s11 >> 9); + s[31] = (uint8_t)(s11 >> 17); +} + +/* Input: + * a[0]+256*a[1]+...+256^31*a[31] = a + * b[0]+256*b[1]+...+256^31*b[31] = b + * c[0]+256*c[1]+...+256^31*c[31] = c + * + * Output: + * s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l + * where l = 2^252 + 27742317777372353535851937790883648493. */ +static void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b, + const uint8_t *c) { + int64_t a0 = 2097151 & load_3(a); + int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + int64_t a8 = 2097151 & load_3(a + 21); + int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + int64_t a11 = (load_4(a + 28) >> 7); + int64_t b0 = 2097151 & load_3(b); + int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + int64_t b8 = 2097151 & load_3(b + 21); + int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + int64_t b11 = (load_4(b + 28) >> 7); + int64_t c0 = 2097151 & load_3(c); + int64_t c1 = 2097151 & (load_4(c + 2) >> 5); + int64_t c2 = 2097151 & (load_3(c + 5) >> 2); + int64_t c3 = 2097151 & (load_4(c + 7) >> 7); + int64_t c4 = 2097151 & (load_4(c + 10) >> 4); + int64_t c5 = 2097151 & (load_3(c + 13) >> 1); + int64_t c6 = 2097151 & (load_4(c + 15) >> 6); + int64_t c7 = 2097151 & (load_3(c + 18) >> 3); + int64_t c8 = 2097151 & load_3(c + 21); + int64_t c9 = 2097151 & (load_4(c + 23) >> 5); + int64_t c10 = 2097151 & (load_3(c + 26) >> 2); + int64_t c11 = (load_4(c + 28) >> 7); + int64_t s0; + int64_t s1; + int64_t s2; + int64_t s3; + int64_t s4; + int64_t s5; + int64_t s6; + int64_t s7; + int64_t s8; + int64_t s9; + int64_t s10; + int64_t s11; + int64_t s12; + int64_t s13; + int64_t s14; + int64_t s15; + int64_t s16; + int64_t s17; + int64_t s18; + int64_t s19; + int64_t s20; + int64_t s21; + int64_t s22; + int64_t s23; + int64_t carry0; + int64_t carry1; + int64_t carry2; + int64_t carry3; + int64_t carry4; + int64_t carry5; + int64_t carry6; + int64_t carry7; + int64_t carry8; + int64_t carry9; + int64_t carry10; + int64_t carry11; + int64_t carry12; + int64_t carry13; + int64_t carry14; + int64_t carry15; + int64_t carry16; + int64_t carry17; + int64_t carry18; + int64_t carry19; + int64_t carry20; + int64_t carry21; + int64_t carry22; + + s0 = c0 + a0 * b0; + s1 = c1 + a0 * b1 + a1 * b0; + s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0; + s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0; + s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0; + s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0; + s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0; + s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + + a6 * b1 + a7 * b0; + s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + + a6 * b2 + a7 * b1 + a8 * b0; + s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + + a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0; + s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + + a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0; + s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + + a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0; + s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + a7 * b5 + + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1; + s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + a8 * b5 + + a9 * b4 + a10 * b3 + a11 * b2; + s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + a9 * b5 + + a10 * b4 + a11 * b3; + s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + a10 * b5 + + a11 * b4; + s16 = a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5; + s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6; + s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7; + s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8; + s20 = a9 * b11 + a10 * b10 + a11 * b9; + s21 = a10 * b11 + a11 * b10; + s22 = a11 * b11; + s23 = 0; + + carry0 = (s0 + (1 << 20)) >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry2 = (s2 + (1 << 20)) >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry4 = (s4 + (1 << 20)) >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + carry12 = (s12 + (1 << 20)) >> 21; + s13 += carry12; + s12 -= carry12 * (1 << 21); + carry14 = (s14 + (1 << 20)) >> 21; + s15 += carry14; + s14 -= carry14 * (1 << 21); + carry16 = (s16 + (1 << 20)) >> 21; + s17 += carry16; + s16 -= carry16 * (1 << 21); + carry18 = (s18 + (1 << 20)) >> 21; + s19 += carry18; + s18 -= carry18 * (1 << 21); + carry20 = (s20 + (1 << 20)) >> 21; + s21 += carry20; + s20 -= carry20 * (1 << 21); + carry22 = (s22 + (1 << 20)) >> 21; + s23 += carry22; + s22 -= carry22 * (1 << 21); + + carry1 = (s1 + (1 << 20)) >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry3 = (s3 + (1 << 20)) >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry5 = (s5 + (1 << 20)) >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + carry13 = (s13 + (1 << 20)) >> 21; + s14 += carry13; + s13 -= carry13 * (1 << 21); + carry15 = (s15 + (1 << 20)) >> 21; + s16 += carry15; + s15 -= carry15 * (1 << 21); + carry17 = (s17 + (1 << 20)) >> 21; + s18 += carry17; + s17 -= carry17 * (1 << 21); + carry19 = (s19 + (1 << 20)) >> 21; + s20 += carry19; + s19 -= carry19 * (1 << 21); + carry21 = (s21 + (1 << 20)) >> 21; + s22 += carry21; + s21 -= carry21 * (1 << 21); + + s11 += s23 * 666643; + s12 += s23 * 470296; + s13 += s23 * 654183; + s14 -= s23 * 997805; + s15 += s23 * 136657; + s16 -= s23 * 683901; + s23 = 0; + + s10 += s22 * 666643; + s11 += s22 * 470296; + s12 += s22 * 654183; + s13 -= s22 * 997805; + s14 += s22 * 136657; + s15 -= s22 * 683901; + s22 = 0; + + s9 += s21 * 666643; + s10 += s21 * 470296; + s11 += s21 * 654183; + s12 -= s21 * 997805; + s13 += s21 * 136657; + s14 -= s21 * 683901; + s21 = 0; + + s8 += s20 * 666643; + s9 += s20 * 470296; + s10 += s20 * 654183; + s11 -= s20 * 997805; + s12 += s20 * 136657; + s13 -= s20 * 683901; + s20 = 0; + + s7 += s19 * 666643; + s8 += s19 * 470296; + s9 += s19 * 654183; + s10 -= s19 * 997805; + s11 += s19 * 136657; + s12 -= s19 * 683901; + s19 = 0; + + s6 += s18 * 666643; + s7 += s18 * 470296; + s8 += s18 * 654183; + s9 -= s18 * 997805; + s10 += s18 * 136657; + s11 -= s18 * 683901; + s18 = 0; + + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + carry12 = (s12 + (1 << 20)) >> 21; + s13 += carry12; + s12 -= carry12 * (1 << 21); + carry14 = (s14 + (1 << 20)) >> 21; + s15 += carry14; + s14 -= carry14 * (1 << 21); + carry16 = (s16 + (1 << 20)) >> 21; + s17 += carry16; + s16 -= carry16 * (1 << 21); + + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + carry13 = (s13 + (1 << 20)) >> 21; + s14 += carry13; + s13 -= carry13 * (1 << 21); + carry15 = (s15 + (1 << 20)) >> 21; + s16 += carry15; + s15 -= carry15 * (1 << 21); + + s5 += s17 * 666643; + s6 += s17 * 470296; + s7 += s17 * 654183; + s8 -= s17 * 997805; + s9 += s17 * 136657; + s10 -= s17 * 683901; + s17 = 0; + + s4 += s16 * 666643; + s5 += s16 * 470296; + s6 += s16 * 654183; + s7 -= s16 * 997805; + s8 += s16 * 136657; + s9 -= s16 * 683901; + s16 = 0; + + s3 += s15 * 666643; + s4 += s15 * 470296; + s5 += s15 * 654183; + s6 -= s15 * 997805; + s7 += s15 * 136657; + s8 -= s15 * 683901; + s15 = 0; + + s2 += s14 * 666643; + s3 += s14 * 470296; + s4 += s14 * 654183; + s5 -= s14 * 997805; + s6 += s14 * 136657; + s7 -= s14 * 683901; + s14 = 0; + + s1 += s13 * 666643; + s2 += s13 * 470296; + s3 += s13 * 654183; + s4 -= s13 * 997805; + s5 += s13 * 136657; + s6 -= s13 * 683901; + s13 = 0; + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = (s0 + (1 << 20)) >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry2 = (s2 + (1 << 20)) >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry4 = (s4 + (1 << 20)) >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry6 = (s6 + (1 << 20)) >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry8 = (s8 + (1 << 20)) >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry10 = (s10 + (1 << 20)) >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + + carry1 = (s1 + (1 << 20)) >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry3 = (s3 + (1 << 20)) >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry5 = (s5 + (1 << 20)) >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry7 = (s7 + (1 << 20)) >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry9 = (s9 + (1 << 20)) >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry11 = (s11 + (1 << 20)) >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + carry11 = s11 >> 21; + s12 += carry11; + s11 -= carry11 * (1 << 21); + + s0 += s12 * 666643; + s1 += s12 * 470296; + s2 += s12 * 654183; + s3 -= s12 * 997805; + s4 += s12 * 136657; + s5 -= s12 * 683901; + s12 = 0; + + carry0 = s0 >> 21; + s1 += carry0; + s0 -= carry0 * (1 << 21); + carry1 = s1 >> 21; + s2 += carry1; + s1 -= carry1 * (1 << 21); + carry2 = s2 >> 21; + s3 += carry2; + s2 -= carry2 * (1 << 21); + carry3 = s3 >> 21; + s4 += carry3; + s3 -= carry3 * (1 << 21); + carry4 = s4 >> 21; + s5 += carry4; + s4 -= carry4 * (1 << 21); + carry5 = s5 >> 21; + s6 += carry5; + s5 -= carry5 * (1 << 21); + carry6 = s6 >> 21; + s7 += carry6; + s6 -= carry6 * (1 << 21); + carry7 = s7 >> 21; + s8 += carry7; + s7 -= carry7 * (1 << 21); + carry8 = s8 >> 21; + s9 += carry8; + s8 -= carry8 * (1 << 21); + carry9 = s9 >> 21; + s10 += carry9; + s9 -= carry9 * (1 << 21); + carry10 = s10 >> 21; + s11 += carry10; + s10 -= carry10 * (1 << 21); + + s[0] = (uint8_t)(s0 >> 0); + s[1] = (uint8_t)(s0 >> 8); + s[2] = (uint8_t)((s0 >> 16) | (s1 << 5)); + s[3] = (uint8_t)(s1 >> 3); + s[4] = (uint8_t)(s1 >> 11); + s[5] = (uint8_t)((s1 >> 19) | (s2 << 2)); + s[6] = (uint8_t)(s2 >> 6); + s[7] = (uint8_t)((s2 >> 14) | (s3 << 7)); + s[8] = (uint8_t)(s3 >> 1); + s[9] = (uint8_t)(s3 >> 9); + s[10] = (uint8_t)((s3 >> 17) | (s4 << 4)); + s[11] = (uint8_t)(s4 >> 4); + s[12] = (uint8_t)(s4 >> 12); + s[13] = (uint8_t)((s4 >> 20) | (s5 << 1)); + s[14] = (uint8_t)(s5 >> 7); + s[15] = (uint8_t)((s5 >> 15) | (s6 << 6)); + s[16] = (uint8_t)(s6 >> 2); + s[17] = (uint8_t)(s6 >> 10); + s[18] = (uint8_t)((s6 >> 18) | (s7 << 3)); + s[19] = (uint8_t)(s7 >> 5); + s[20] = (uint8_t)(s7 >> 13); + s[21] = (uint8_t)(s8 >> 0); + s[22] = (uint8_t)(s8 >> 8); + s[23] = (uint8_t)((s8 >> 16) | (s9 << 5)); + s[24] = (uint8_t)(s9 >> 3); + s[25] = (uint8_t)(s9 >> 11); + s[26] = (uint8_t)((s9 >> 19) | (s10 << 2)); + s[27] = (uint8_t)(s10 >> 6); + s[28] = (uint8_t)((s10 >> 14) | (s11 << 7)); + s[29] = (uint8_t)(s11 >> 1); + s[30] = (uint8_t)(s11 >> 9); + s[31] = (uint8_t)(s11 >> 17); +} + +int ED25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[32], const uint8_t private_key[32]) { + uint8_t az[SHA512_DIGEST_LENGTH]; + uint8_t nonce[SHA512_DIGEST_LENGTH]; + ge_p3 R; + uint8_t hram[SHA512_DIGEST_LENGTH]; + SHA512_CTX hash_ctx; + + SHA512_Init(&hash_ctx); + SHA512_Update(&hash_ctx, private_key, 32); + SHA512_Final(az, &hash_ctx); + + az[0] &= 248; + az[31] &= 63; + az[31] |= 64; + + SHA512_Init(&hash_ctx); + SHA512_Update(&hash_ctx, az + 32, 32); + SHA512_Update(&hash_ctx, message, message_len); + SHA512_Final(nonce, &hash_ctx); + + x25519_sc_reduce(nonce); + ge_scalarmult_base(&R, nonce); + ge_p3_tobytes(out_sig, &R); + + SHA512_Init(&hash_ctx); + SHA512_Update(&hash_ctx, out_sig, 32); + SHA512_Update(&hash_ctx, public_key, 32); + SHA512_Update(&hash_ctx, message, message_len); + SHA512_Final(hram, &hash_ctx); + + x25519_sc_reduce(hram); + sc_muladd(out_sig + 32, hram, az, nonce); + + OPENSSL_cleanse(&hash_ctx, sizeof(hash_ctx)); + OPENSSL_cleanse(nonce, sizeof(nonce)); + OPENSSL_cleanse(az, sizeof(az)); + + return 1; +} + +int ED25519_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[64], const uint8_t public_key[32]) { + ge_p3 A; + uint8_t rcopy[32]; + uint8_t scopy[32]; + SHA512_CTX hash_ctx; + ge_p2 R; + uint8_t rcheck[32]; + uint8_t h[SHA512_DIGEST_LENGTH]; + + if ((signature[63] & 224) != 0 || + ge_frombytes_vartime(&A, public_key) != 0) { + return 0; + } + + fe_neg(A.X, A.X); + fe_neg(A.T, A.T); + + memcpy(rcopy, signature, 32); + memcpy(scopy, signature + 32, 32); + + SHA512_Init(&hash_ctx); + SHA512_Update(&hash_ctx, signature, 32); + SHA512_Update(&hash_ctx, public_key, 32); + SHA512_Update(&hash_ctx, message, message_len); + SHA512_Final(h, &hash_ctx); + + x25519_sc_reduce(h); + + ge_double_scalarmult_vartime(&R, h, &A, scopy); + + ge_tobytes(rcheck, &R); + + return CRYPTO_memcmp(rcheck, rcopy, sizeof(rcheck)) == 0; +} + +void ED25519_public_from_private(uint8_t out_public_key[32], + const uint8_t private_key[32]) { + uint8_t az[SHA512_DIGEST_LENGTH]; + ge_p3 A; + + SHA512(private_key, 32, az); + + az[0] &= 248; + az[31] &= 63; + az[31] |= 64; + + ge_scalarmult_base(&A, az); + ge_p3_tobytes(out_public_key, &A); + + OPENSSL_cleanse(az, sizeof(az)); +} + int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32], const uint8_t peer_public_value[32]) { static const uint8_t kZeros[32] = {0}; diff --git a/crypto/ec/curve448/arch_32/arch_intrinsics.h b/crypto/ec/curve448/arch_32/arch_intrinsics.h new file mode 100644 index 00000000..48081c77 --- /dev/null +++ b/crypto/ec/curve448/arch_32/arch_intrinsics.h @@ -0,0 +1,27 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_ARCH_32_ARCH_INTRINSICS_H +# define HEADER_ARCH_32_ARCH_INTRINSICS_H + +#include "internal/constant_time_locl.h" + +# define ARCH_WORD_BITS 32 + +#define word_is_zero(a) constant_time_is_zero_32(a) + +static ossl_inline uint64_t widemul(uint32_t a, uint32_t b) +{ + return ((uint64_t)a) * b; +} + +#endif /* HEADER_ARCH_32_ARCH_INTRINSICS_H */ diff --git a/crypto/ec/curve448/arch_32/f_impl.c b/crypto/ec/curve448/arch_32/f_impl.c new file mode 100644 index 00000000..8a89d276 --- /dev/null +++ b/crypto/ec/curve448/arch_32/f_impl.c @@ -0,0 +1,95 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#include "field.h" + +void gf_mul(gf_s * RESTRICT cs, const gf as, const gf bs) +{ + const uint32_t *a = as->limb, *b = bs->limb; + uint32_t *c = cs->limb; + uint64_t accum0 = 0, accum1 = 0, accum2 = 0; + uint32_t mask = (1 << 28) - 1; + uint32_t aa[8], bb[8]; + int i, j; + + for (i = 0; i < 8; i++) { + aa[i] = a[i] + a[i + 8]; + bb[i] = b[i] + b[i + 8]; + } + + for (j = 0; j < 8; j++) { + accum2 = 0; + for (i = 0; i < j + 1; i++) { + accum2 += widemul(a[j - i], b[i]); + accum1 += widemul(aa[j - i], bb[i]); + accum0 += widemul(a[8 + j - i], b[8 + i]); + } + accum1 -= accum2; + accum0 += accum2; + accum2 = 0; + for (i = j + 1; i < 8; i++) { + accum0 -= widemul(a[8 + j - i], b[i]); + accum2 += widemul(aa[8 + j - i], bb[i]); + accum1 += widemul(a[16 + j - i], b[8 + i]); + } + accum1 += accum2; + accum0 += accum2; + c[j] = ((uint32_t)(accum0)) & mask; + c[j + 8] = ((uint32_t)(accum1)) & mask; + accum0 >>= 28; + accum1 >>= 28; + } + + accum0 += accum1; + accum0 += c[8]; + accum1 += c[0]; + c[8] = ((uint32_t)(accum0)) & mask; + c[0] = ((uint32_t)(accum1)) & mask; + + accum0 >>= 28; + accum1 >>= 28; + c[9] += ((uint32_t)(accum0)); + c[1] += ((uint32_t)(accum1)); +} + +void gf_mulw_unsigned(gf_s * RESTRICT cs, const gf as, uint32_t b) +{ + const uint32_t *a = as->limb; + uint32_t *c = cs->limb; + uint64_t accum0 = 0, accum8 = 0; + uint32_t mask = (1 << 28) - 1; + int i; + + assert(b <= mask); + + for (i = 0; i < 8; i++) { + accum0 += widemul(b, a[i]); + accum8 += widemul(b, a[i + 8]); + c[i] = accum0 & mask; + accum0 >>= 28; + c[i + 8] = accum8 & mask; + accum8 >>= 28; + } + + accum0 += accum8 + c[8]; + c[8] = ((uint32_t)accum0) & mask; + c[9] += (uint32_t)(accum0 >> 28); + + accum8 += c[0]; + c[0] = ((uint32_t)accum8) & mask; + c[1] += (uint32_t)(accum8 >> 28); +} + +void gf_sqr(gf_s * RESTRICT cs, const gf as) +{ + gf_mul(cs, as, as); /* Performs better with a dedicated square */ +} diff --git a/crypto/ec/curve448/arch_32/f_impl.h b/crypto/ec/curve448/arch_32/f_impl.h new file mode 100644 index 00000000..bbde84a0 --- /dev/null +++ b/crypto/ec/curve448/arch_32/f_impl.h @@ -0,0 +1,60 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_ARCH_32_F_IMPL_H +# define HEADER_ARCH_32_F_IMPL_H + +# define GF_HEADROOM 2 +# define LIMB(x) ((x) & ((1 << 28) - 1)), ((x) >> 28) +# define FIELD_LITERAL(a, b, c, d, e, f, g, h) \ + {{LIMB(a), LIMB(b), LIMB(c), LIMB(d), LIMB(e), LIMB(f), LIMB(g), LIMB(h)}} + +# define LIMB_PLACE_VALUE(i) 28 + +void gf_add_RAW(gf out, const gf a, const gf b) +{ + unsigned int i; + + for (i = 0; i < NLIMBS; i++) + out->limb[i] = a->limb[i] + b->limb[i]; +} + +void gf_sub_RAW(gf out, const gf a, const gf b) +{ + unsigned int i; + + for (i = 0; i < NLIMBS; i++) + out->limb[i] = a->limb[i] - b->limb[i]; +} + +void gf_bias(gf a, int amt) +{ + unsigned int i; + uint32_t co1 = ((1 << 28) - 1) * amt, co2 = co1 - amt; + + for (i = 0; i < NLIMBS; i++) + a->limb[i] += (i == NLIMBS / 2) ? co2 : co1; +} + +void gf_weak_reduce(gf a) +{ + uint32_t mask = (1 << 28) - 1; + uint32_t tmp = a->limb[NLIMBS - 1] >> 28; + unsigned int i; + + a->limb[NLIMBS / 2] += tmp; + for (i = NLIMBS - 1; i > 0; i--) + a->limb[i] = (a->limb[i] & mask) + (a->limb[i - 1] >> 28); + a->limb[0] = (a->limb[0] & mask) + tmp; +} + +#endif /* HEADER_ARCH_32_F_IMPL_H */ diff --git a/crypto/ec/curve448/curve448.c b/crypto/ec/curve448/curve448.c new file mode 100644 index 00000000..8ced622b --- /dev/null +++ b/crypto/ec/curve448/curve448.c @@ -0,0 +1,727 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ +#include +#include "word.h" +#include "field.h" + +#include "point_448.h" +#include "ed448.h" +#include "curve448_lcl.h" + +#define COFACTOR 4 + +#define C448_WNAF_FIXED_TABLE_BITS 5 +#define C448_WNAF_VAR_TABLE_BITS 3 + +#define EDWARDS_D (-39081) + +static const curve448_scalar_t precomputed_scalarmul_adjustment = { + { + { + SC_LIMB(0xc873d6d54a7bb0cf), SC_LIMB(0xe933d8d723a70aad), + SC_LIMB(0xbb124b65129c96fd), SC_LIMB(0x00000008335dc163) + } + } +}; + +#define TWISTED_D (EDWARDS_D - 1) + +#define WBITS C448_WORD_BITS /* NB this may be different from ARCH_WORD_BITS */ + +/* Inverse. */ +static void gf_invert(gf y, const gf x, int assert_nonzero) +{ + mask_t ret; + gf t1, t2; + + gf_sqr(t1, x); /* o^2 */ + ret = gf_isr(t2, t1); /* +-1/sqrt(o^2) = +-1/o */ + (void)ret; + if (assert_nonzero) + assert(ret); + gf_sqr(t1, t2); + gf_mul(t2, t1, x); /* not direct to y in case of alias. */ + gf_copy(y, t2); +} + +/** identity = (0,1) */ +const curve448_point_t curve448_point_identity = + { {{{{0}}}, {{{1}}}, {{{1}}}, {{{0}}}} }; + +static void point_double_internal(curve448_point_t p, const curve448_point_t q, + int before_double) +{ + gf a, b, c, d; + + gf_sqr(c, q->x); + gf_sqr(a, q->y); + gf_add_nr(d, c, a); /* 2+e */ + gf_add_nr(p->t, q->y, q->x); /* 2+e */ + gf_sqr(b, p->t); + gf_subx_nr(b, b, d, 3); /* 4+e */ + gf_sub_nr(p->t, a, c); /* 3+e */ + gf_sqr(p->x, q->z); + gf_add_nr(p->z, p->x, p->x); /* 2+e */ + gf_subx_nr(a, p->z, p->t, 4); /* 6+e */ + if (GF_HEADROOM == 5) + gf_weak_reduce(a); /* or 1+e */ + gf_mul(p->x, a, b); + gf_mul(p->z, p->t, a); + gf_mul(p->y, p->t, d); + if (!before_double) + gf_mul(p->t, b, d); +} + +void curve448_point_double(curve448_point_t p, const curve448_point_t q) +{ + point_double_internal(p, q, 0); +} + +/* Operations on [p]niels */ +static ossl_inline void cond_neg_niels(niels_t n, mask_t neg) +{ + gf_cond_swap(n->a, n->b, neg); + gf_cond_neg(n->c, neg); +} + +static void pt_to_pniels(pniels_t b, const curve448_point_t a) +{ + gf_sub(b->n->a, a->y, a->x); + gf_add(b->n->b, a->x, a->y); + gf_mulw(b->n->c, a->t, 2 * TWISTED_D); + gf_add(b->z, a->z, a->z); +} + +static void pniels_to_pt(curve448_point_t e, const pniels_t d) +{ + gf eu; + + gf_add(eu, d->n->b, d->n->a); + gf_sub(e->y, d->n->b, d->n->a); + gf_mul(e->t, e->y, eu); + gf_mul(e->x, d->z, e->y); + gf_mul(e->y, d->z, eu); + gf_sqr(e->z, d->z); +} + +static void niels_to_pt(curve448_point_t e, const niels_t n) +{ + gf_add(e->y, n->b, n->a); + gf_sub(e->x, n->b, n->a); + gf_mul(e->t, e->y, e->x); + gf_copy(e->z, ONE); +} + +static void add_niels_to_pt(curve448_point_t d, const niels_t e, + int before_double) +{ + gf a, b, c; + + gf_sub_nr(b, d->y, d->x); /* 3+e */ + gf_mul(a, e->a, b); + gf_add_nr(b, d->x, d->y); /* 2+e */ + gf_mul(d->y, e->b, b); + gf_mul(d->x, e->c, d->t); + gf_add_nr(c, a, d->y); /* 2+e */ + gf_sub_nr(b, d->y, a); /* 3+e */ + gf_sub_nr(d->y, d->z, d->x); /* 3+e */ + gf_add_nr(a, d->x, d->z); /* 2+e */ + gf_mul(d->z, a, d->y); + gf_mul(d->x, d->y, b); + gf_mul(d->y, a, c); + if (!before_double) + gf_mul(d->t, b, c); +} + +static void sub_niels_from_pt(curve448_point_t d, const niels_t e, + int before_double) +{ + gf a, b, c; + + gf_sub_nr(b, d->y, d->x); /* 3+e */ + gf_mul(a, e->b, b); + gf_add_nr(b, d->x, d->y); /* 2+e */ + gf_mul(d->y, e->a, b); + gf_mul(d->x, e->c, d->t); + gf_add_nr(c, a, d->y); /* 2+e */ + gf_sub_nr(b, d->y, a); /* 3+e */ + gf_add_nr(d->y, d->z, d->x); /* 2+e */ + gf_sub_nr(a, d->z, d->x); /* 3+e */ + gf_mul(d->z, a, d->y); + gf_mul(d->x, d->y, b); + gf_mul(d->y, a, c); + if (!before_double) + gf_mul(d->t, b, c); +} + +static void add_pniels_to_pt(curve448_point_t p, const pniels_t pn, + int before_double) +{ + gf L0; + + gf_mul(L0, p->z, pn->z); + gf_copy(p->z, L0); + add_niels_to_pt(p, pn->n, before_double); +} + +static void sub_pniels_from_pt(curve448_point_t p, const pniels_t pn, + int before_double) +{ + gf L0; + + gf_mul(L0, p->z, pn->z); + gf_copy(p->z, L0); + sub_niels_from_pt(p, pn->n, before_double); +} + +c448_bool_t curve448_point_eq(const curve448_point_t p, + const curve448_point_t q) +{ + mask_t succ; + gf a, b; + + /* equality mod 2-torsion compares x/y */ + gf_mul(a, p->y, q->x); + gf_mul(b, q->y, p->x); + succ = gf_eq(a, b); + + return mask_to_bool(succ); +} + +c448_bool_t curve448_point_valid(const curve448_point_t p) +{ + mask_t out; + gf a, b, c; + + gf_mul(a, p->x, p->y); + gf_mul(b, p->z, p->t); + out = gf_eq(a, b); + gf_sqr(a, p->x); + gf_sqr(b, p->y); + gf_sub(a, b, a); + gf_sqr(b, p->t); + gf_mulw(c, b, TWISTED_D); + gf_sqr(b, p->z); + gf_add(b, b, c); + out &= gf_eq(a, b); + out &= ~gf_eq(p->z, ZERO); + return mask_to_bool(out); +} + +static ossl_inline void constant_time_lookup_niels(niels_s * RESTRICT ni, + const niels_t * table, + int nelts, int idx) +{ + constant_time_lookup(ni, table, sizeof(niels_s), nelts, idx); +} + +void curve448_precomputed_scalarmul(curve448_point_t out, + const curve448_precomputed_s * table, + const curve448_scalar_t scalar) +{ + unsigned int i, j, k; + const unsigned int n = COMBS_N, t = COMBS_T, s = COMBS_S; + niels_t ni; + curve448_scalar_t scalar1x; + + curve448_scalar_add(scalar1x, scalar, precomputed_scalarmul_adjustment); + curve448_scalar_halve(scalar1x, scalar1x); + + for (i = s; i > 0; i--) { + if (i != s) + point_double_internal(out, out, 0); + + for (j = 0; j < n; j++) { + int tab = 0; + mask_t invert; + + for (k = 0; k < t; k++) { + unsigned int bit = (i - 1) + s * (k + j * t); + + if (bit < C448_SCALAR_BITS) + tab |= + (scalar1x->limb[bit / WBITS] >> (bit % WBITS) & 1) << k; + } + + invert = (tab >> (t - 1)) - 1; + tab ^= invert; + tab &= (1 << (t - 1)) - 1; + + constant_time_lookup_niels(ni, &table->table[j << (t - 1)], + 1 << (t - 1), tab); + + cond_neg_niels(ni, invert); + if ((i != s) || j != 0) + add_niels_to_pt(out, ni, j == n - 1 && i != 1); + else + niels_to_pt(out, ni); + } + } + + OPENSSL_cleanse(ni, sizeof(ni)); + OPENSSL_cleanse(scalar1x, sizeof(scalar1x)); +} + +void curve448_point_mul_by_ratio_and_encode_like_eddsa( + uint8_t enc[EDDSA_448_PUBLIC_BYTES], + const curve448_point_t p) +{ + gf x, y, z, t; + curve448_point_t q; + + /* The point is now on the twisted curve. Move it to untwisted. */ + curve448_point_copy(q, p); + + { + /* 4-isogeny: 2xy/(y^+x^2), (y^2-x^2)/(2z^2-y^2+x^2) */ + gf u; + + gf_sqr(x, q->x); + gf_sqr(t, q->y); + gf_add(u, x, t); + gf_add(z, q->y, q->x); + gf_sqr(y, z); + gf_sub(y, y, u); + gf_sub(z, t, x); + gf_sqr(x, q->z); + gf_add(t, x, x); + gf_sub(t, t, z); + gf_mul(x, t, y); + gf_mul(y, z, u); + gf_mul(z, u, t); + OPENSSL_cleanse(u, sizeof(u)); + } + + /* Affinize */ + gf_invert(z, z, 1); + gf_mul(t, x, z); + gf_mul(x, y, z); + + /* Encode */ + enc[EDDSA_448_PRIVATE_BYTES - 1] = 0; + gf_serialize(enc, x, 1); + enc[EDDSA_448_PRIVATE_BYTES - 1] |= 0x80 & gf_lobit(t); + + OPENSSL_cleanse(x, sizeof(x)); + OPENSSL_cleanse(y, sizeof(y)); + OPENSSL_cleanse(z, sizeof(z)); + OPENSSL_cleanse(t, sizeof(t)); + curve448_point_destroy(q); +} + +c448_error_t curve448_point_decode_like_eddsa_and_mul_by_ratio( + curve448_point_t p, + const uint8_t enc[EDDSA_448_PUBLIC_BYTES]) +{ + uint8_t enc2[EDDSA_448_PUBLIC_BYTES]; + mask_t low; + mask_t succ; + + memcpy(enc2, enc, sizeof(enc2)); + + low = ~word_is_zero(enc2[EDDSA_448_PRIVATE_BYTES - 1] & 0x80); + enc2[EDDSA_448_PRIVATE_BYTES - 1] &= ~0x80; + + succ = gf_deserialize(p->y, enc2, 1, 0); + succ &= word_is_zero(enc2[EDDSA_448_PRIVATE_BYTES - 1]); + + gf_sqr(p->x, p->y); + gf_sub(p->z, ONE, p->x); /* num = 1-y^2 */ + gf_mulw(p->t, p->x, EDWARDS_D); /* dy^2 */ + gf_sub(p->t, ONE, p->t); /* denom = 1-dy^2 or 1-d + dy^2 */ + + gf_mul(p->x, p->z, p->t); + succ &= gf_isr(p->t, p->x); /* 1/sqrt(num * denom) */ + + gf_mul(p->x, p->t, p->z); /* sqrt(num / denom) */ + gf_cond_neg(p->x, gf_lobit(p->x) ^ low); + gf_copy(p->z, ONE); + + { + gf a, b, c, d; + + /* 4-isogeny 2xy/(y^2-ax^2), (y^2+ax^2)/(2-y^2-ax^2) */ + gf_sqr(c, p->x); + gf_sqr(a, p->y); + gf_add(d, c, a); + gf_add(p->t, p->y, p->x); + gf_sqr(b, p->t); + gf_sub(b, b, d); + gf_sub(p->t, a, c); + gf_sqr(p->x, p->z); + gf_add(p->z, p->x, p->x); + gf_sub(a, p->z, d); + gf_mul(p->x, a, b); + gf_mul(p->z, p->t, a); + gf_mul(p->y, p->t, d); + gf_mul(p->t, b, d); + OPENSSL_cleanse(a, sizeof(a)); + OPENSSL_cleanse(b, sizeof(b)); + OPENSSL_cleanse(c, sizeof(c)); + OPENSSL_cleanse(d, sizeof(d)); + } + + OPENSSL_cleanse(enc2, sizeof(enc2)); + assert(curve448_point_valid(p) || ~succ); + + return c448_succeed_if(mask_to_bool(succ)); +} + +c448_error_t x448_int(uint8_t out[X_PUBLIC_BYTES], + const uint8_t base[X_PUBLIC_BYTES], + const uint8_t scalar[X_PRIVATE_BYTES]) +{ + gf x1, x2, z2, x3, z3, t1, t2; + int t; + mask_t swap = 0; + mask_t nz; + + (void)gf_deserialize(x1, base, 1, 0); + gf_copy(x2, ONE); + gf_copy(z2, ZERO); + gf_copy(x3, x1); + gf_copy(z3, ONE); + + for (t = X_PRIVATE_BITS - 1; t >= 0; t--) { + uint8_t sb = scalar[t / 8]; + mask_t k_t; + + /* Scalar conditioning */ + if (t / 8 == 0) + sb &= -(uint8_t)COFACTOR; + else if (t == X_PRIVATE_BITS - 1) + sb = -1; + + k_t = (sb >> (t % 8)) & 1; + k_t = 0 - k_t; /* set to all 0s or all 1s */ + + swap ^= k_t; + gf_cond_swap(x2, x3, swap); + gf_cond_swap(z2, z3, swap); + swap = k_t; + + /* + * The "_nr" below skips coefficient reduction. In the following + * comments, "2+e" is saying that the coefficients are at most 2+epsilon + * times the reduction limit. + */ + gf_add_nr(t1, x2, z2); /* A = x2 + z2 */ /* 2+e */ + gf_sub_nr(t2, x2, z2); /* B = x2 - z2 */ /* 3+e */ + gf_sub_nr(z2, x3, z3); /* D = x3 - z3 */ /* 3+e */ + gf_mul(x2, t1, z2); /* DA */ + gf_add_nr(z2, z3, x3); /* C = x3 + z3 */ /* 2+e */ + gf_mul(x3, t2, z2); /* CB */ + gf_sub_nr(z3, x2, x3); /* DA-CB */ /* 3+e */ + gf_sqr(z2, z3); /* (DA-CB)^2 */ + gf_mul(z3, x1, z2); /* z3 = x1(DA-CB)^2 */ + gf_add_nr(z2, x2, x3); /* (DA+CB) */ /* 2+e */ + gf_sqr(x3, z2); /* x3 = (DA+CB)^2 */ + + gf_sqr(z2, t1); /* AA = A^2 */ + gf_sqr(t1, t2); /* BB = B^2 */ + gf_mul(x2, z2, t1); /* x2 = AA*BB */ + gf_sub_nr(t2, z2, t1); /* E = AA-BB */ /* 3+e */ + + gf_mulw(t1, t2, -EDWARDS_D); /* E*-d = a24*E */ + gf_add_nr(t1, t1, z2); /* AA + a24*E */ /* 2+e */ + gf_mul(z2, t2, t1); /* z2 = E(AA+a24*E) */ + } + + /* Finish */ + gf_cond_swap(x2, x3, swap); + gf_cond_swap(z2, z3, swap); + gf_invert(z2, z2, 0); + gf_mul(x1, x2, z2); + gf_serialize(out, x1, 1); + nz = ~gf_eq(x1, ZERO); + + OPENSSL_cleanse(x1, sizeof(x1)); + OPENSSL_cleanse(x2, sizeof(x2)); + OPENSSL_cleanse(z2, sizeof(z2)); + OPENSSL_cleanse(x3, sizeof(x3)); + OPENSSL_cleanse(z3, sizeof(z3)); + OPENSSL_cleanse(t1, sizeof(t1)); + OPENSSL_cleanse(t2, sizeof(t2)); + + return c448_succeed_if(mask_to_bool(nz)); +} + +void curve448_point_mul_by_ratio_and_encode_like_x448(uint8_t + out[X_PUBLIC_BYTES], + const curve448_point_t p) +{ + curve448_point_t q; + + curve448_point_copy(q, p); + gf_invert(q->t, q->x, 0); /* 1/x */ + gf_mul(q->z, q->t, q->y); /* y/x */ + gf_sqr(q->y, q->z); /* (y/x)^2 */ + gf_serialize(out, q->y, 1); + curve448_point_destroy(q); +} + +void x448_derive_public_key(uint8_t out[X_PUBLIC_BYTES], + const uint8_t scalar[X_PRIVATE_BYTES]) +{ + /* Scalar conditioning */ + uint8_t scalar2[X_PRIVATE_BYTES]; + curve448_scalar_t the_scalar; + curve448_point_t p; + unsigned int i; + + memcpy(scalar2, scalar, sizeof(scalar2)); + scalar2[0] &= -(uint8_t)COFACTOR; + + scalar2[X_PRIVATE_BYTES - 1] &= ~((0u - 1u) << ((X_PRIVATE_BITS + 7) % 8)); + scalar2[X_PRIVATE_BYTES - 1] |= 1 << ((X_PRIVATE_BITS + 7) % 8); + + curve448_scalar_decode_long(the_scalar, scalar2, sizeof(scalar2)); + + /* Compensate for the encoding ratio */ + for (i = 1; i < X448_ENCODE_RATIO; i <<= 1) + curve448_scalar_halve(the_scalar, the_scalar); + + curve448_precomputed_scalarmul(p, curve448_precomputed_base, the_scalar); + curve448_point_mul_by_ratio_and_encode_like_x448(out, p); + curve448_point_destroy(p); +} + +/* Control for variable-time scalar multiply algorithms. */ +struct smvt_control { + int power, addend; +}; + +#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)) +# define NUMTRAILINGZEROS __builtin_ctz +#else +# define NUMTRAILINGZEROS numtrailingzeros +static uint32_t numtrailingzeros(uint32_t i) +{ + uint32_t tmp; + uint32_t num = 31; + + if (i == 0) + return 32; + + tmp = i << 16; + if (tmp != 0) { + i = tmp; + num -= 16; + } + tmp = i << 8; + if (tmp != 0) { + i = tmp; + num -= 8; + } + tmp = i << 4; + if (tmp != 0) { + i = tmp; + num -= 4; + } + tmp = i << 2; + if (tmp != 0) { + i = tmp; + num -= 2; + } + tmp = i << 1; + if (tmp != 0) + num--; + + return num; +} +#endif + +static int recode_wnaf(struct smvt_control *control, + /* [nbits/(table_bits + 1) + 3] */ + const curve448_scalar_t scalar, + unsigned int table_bits) +{ + unsigned int table_size = C448_SCALAR_BITS / (table_bits + 1) + 3; + int position = table_size - 1; /* at the end */ + uint64_t current = scalar->limb[0] & 0xFFFF; + uint32_t mask = (1 << (table_bits + 1)) - 1; + unsigned int w; + const unsigned int B_OVER_16 = sizeof(scalar->limb[0]) / 2; + unsigned int n, i; + + /* place the end marker */ + control[position].power = -1; + control[position].addend = 0; + position--; + + /* + * PERF: Could negate scalar if it's large. But then would need more cases + * in the actual code that uses it, all for an expected reduction of like + * 1/5 op. Probably not worth it. + */ + + for (w = 1; w < (C448_SCALAR_BITS - 1) / 16 + 3; w++) { + if (w < (C448_SCALAR_BITS - 1) / 16 + 1) { + /* Refill the 16 high bits of current */ + current += (uint32_t)((scalar->limb[w / B_OVER_16] + >> (16 * (w % B_OVER_16))) << 16); + } + + while (current & 0xFFFF) { + uint32_t pos = NUMTRAILINGZEROS((uint32_t)current); + uint32_t odd = (uint32_t)current >> pos; + int32_t delta = odd & mask; + + assert(position >= 0); + if (odd & (1 << (table_bits + 1))) + delta -= (1 << (table_bits + 1)); + current -= delta << pos; + control[position].power = pos + 16 * (w - 1); + control[position].addend = delta; + position--; + } + current >>= 16; + } + assert(current == 0); + + position++; + n = table_size - position; + for (i = 0; i < n; i++) + control[i] = control[i + position]; + + return n - 1; +} + +static void prepare_wnaf_table(pniels_t * output, + const curve448_point_t working, + unsigned int tbits) +{ + curve448_point_t tmp; + int i; + pniels_t twop; + + pt_to_pniels(output[0], working); + + if (tbits == 0) + return; + + curve448_point_double(tmp, working); + pt_to_pniels(twop, tmp); + + add_pniels_to_pt(tmp, output[0], 0); + pt_to_pniels(output[1], tmp); + + for (i = 2; i < 1 << tbits; i++) { + add_pniels_to_pt(tmp, twop, 0); + pt_to_pniels(output[i], tmp); + } + + curve448_point_destroy(tmp); + OPENSSL_cleanse(twop, sizeof(twop)); +} + +void curve448_base_double_scalarmul_non_secret(curve448_point_t combo, + const curve448_scalar_t scalar1, + const curve448_point_t base2, + const curve448_scalar_t scalar2) +{ + const int table_bits_var = C448_WNAF_VAR_TABLE_BITS; + const int table_bits_pre = C448_WNAF_FIXED_TABLE_BITS; + struct smvt_control control_var[C448_SCALAR_BITS / + (C448_WNAF_VAR_TABLE_BITS + 1) + 3]; + struct smvt_control control_pre[C448_SCALAR_BITS / + (C448_WNAF_FIXED_TABLE_BITS + 1) + 3]; + int ncb_pre = recode_wnaf(control_pre, scalar1, table_bits_pre); + int ncb_var = recode_wnaf(control_var, scalar2, table_bits_var); + pniels_t precmp_var[1 << C448_WNAF_VAR_TABLE_BITS]; + int contp = 0, contv = 0, i; + + prepare_wnaf_table(precmp_var, base2, table_bits_var); + i = control_var[0].power; + + if (i < 0) { + curve448_point_copy(combo, curve448_point_identity); + return; + } + if (i > control_pre[0].power) { + pniels_to_pt(combo, precmp_var[control_var[0].addend >> 1]); + contv++; + } else if (i == control_pre[0].power && i >= 0) { + pniels_to_pt(combo, precmp_var[control_var[0].addend >> 1]); + add_niels_to_pt(combo, curve448_wnaf_base[control_pre[0].addend >> 1], + i); + contv++; + contp++; + } else { + i = control_pre[0].power; + niels_to_pt(combo, curve448_wnaf_base[control_pre[0].addend >> 1]); + contp++; + } + + for (i--; i >= 0; i--) { + int cv = (i == control_var[contv].power); + int cp = (i == control_pre[contp].power); + + point_double_internal(combo, combo, i && !(cv || cp)); + + if (cv) { + assert(control_var[contv].addend); + + if (control_var[contv].addend > 0) + add_pniels_to_pt(combo, + precmp_var[control_var[contv].addend >> 1], + i && !cp); + else + sub_pniels_from_pt(combo, + precmp_var[(-control_var[contv].addend) + >> 1], i && !cp); + contv++; + } + + if (cp) { + assert(control_pre[contp].addend); + + if (control_pre[contp].addend > 0) + add_niels_to_pt(combo, + curve448_wnaf_base[control_pre[contp].addend + >> 1], i); + else + sub_niels_from_pt(combo, + curve448_wnaf_base[(-control_pre + [contp].addend) >> 1], i); + contp++; + } + } + + /* This function is non-secret, but whatever this is cheap. */ + OPENSSL_cleanse(control_var, sizeof(control_var)); + OPENSSL_cleanse(control_pre, sizeof(control_pre)); + OPENSSL_cleanse(precmp_var, sizeof(precmp_var)); + + assert(contv == ncb_var); + (void)ncb_var; + assert(contp == ncb_pre); + (void)ncb_pre; +} + +void curve448_point_destroy(curve448_point_t point) +{ + OPENSSL_cleanse(point, sizeof(curve448_point_t)); +} + +int X448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]) +{ + return x448_int(out_shared_key, peer_public_value, private_key) + == C448_SUCCESS; +} + +void X448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]) +{ + x448_derive_public_key(out_public_value, private_key); +} diff --git a/crypto/ec/curve448/curve448_lcl.h b/crypto/ec/curve448/curve448_lcl.h new file mode 100644 index 00000000..2bc3bd84 --- /dev/null +++ b/crypto/ec/curve448/curve448_lcl.h @@ -0,0 +1,38 @@ +/* + * 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_CURVE448_LCL_H +# define HEADER_CURVE448_LCL_H +# include "curve448utils.h" + +int X448(uint8_t out_shared_key[56], const uint8_t private_key[56], + const uint8_t peer_public_value[56]); + +void X448_public_from_private(uint8_t out_public_value[56], + const uint8_t private_key[56]); + +int ED448_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[57], const uint8_t private_key[57], + const uint8_t *context, size_t context_len); + +int ED448_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[114], const uint8_t public_key[57], + const uint8_t *context, size_t context_len); + +int ED448ph_sign(uint8_t *out_sig, const uint8_t hash[64], + const uint8_t public_key[57], const uint8_t private_key[57], + const uint8_t *context, size_t context_len); + +int ED448ph_verify(const uint8_t hash[64], const uint8_t signature[114], + const uint8_t public_key[57], const uint8_t *context, + size_t context_len); + +int ED448_public_from_private(uint8_t out_public_key[57], + const uint8_t private_key[57]); + +#endif /* HEADER_CURVE448_LCL_H */ diff --git a/crypto/ec/curve448/curve448_tables.c b/crypto/ec/curve448/curve448_tables.c new file mode 100644 index 00000000..a1185b1e --- /dev/null +++ b/crypto/ec/curve448/curve448_tables.c @@ -0,0 +1,475 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ +#include "field.h" + +#include "point_448.h" + +static const curve448_precomputed_s curve448_precomputed_base_table = { + { + {{ + {FIELD_LITERAL(0x00cc3b062366f4cc,0x003d6e34e314aa3c,0x00d51c0a7521774d,0x0094e060eec6ab8b,0x00d21291b4d80082,0x00befed12b55ef1e,0x00c3dd2df5c94518,0x00e0a7b112b8d4e6)}, + {FIELD_LITERAL(0x0019eb5608d8723a,0x00d1bab52fb3aedb,0x00270a7311ebc90c,0x0037c12b91be7f13,0x005be16cd8b5c704,0x003e181acda888e1,0x00bc1f00fc3fc6d0,0x00d3839bfa319e20)}, + {FIELD_LITERAL(0x003caeb88611909f,0x00ea8b378c4df3d4,0x00b3295b95a5a19a,0x00a65f97514bdfb5,0x00b39efba743cab1,0x0016ba98b862fd2d,0x0001508812ee71d7,0x000a75740eea114a)}, + }}, {{ + {FIELD_LITERAL(0x00ebcf0eb649f823,0x00166d332e98ea03,0x0059ddf64f5cd5f6,0x0047763123d9471b,0x00a64065c53ef62f,0x00978e44c480153d,0x000b5b2a0265f194,0x0046a24b9f32965a)}, + {FIELD_LITERAL(0x00b9eef787034df0,0x0020bc24de3390cd,0x000022160bae99bb,0x00ae66e886e97946,0x0048d4bbe02cbb8b,0x0072ba97b34e38d4,0x00eae7ec8f03e85a,0x005ba92ecf808b2c)}, + {FIELD_LITERAL(0x00c9cfbbe74258fd,0x00843a979ea9eaa7,0x000cbb4371cfbe90,0x0059bac8f7f0a628,0x004b3dff882ff530,0x0011869df4d90733,0x00595aa71f4abfc2,0x0070e2d38990c2e6)}, + }}, {{ + {FIELD_LITERAL(0x00de2010c0a01733,0x00c739a612e24297,0x00a7212643141d7c,0x00f88444f6b67c11,0x00484b7b16ec28f2,0x009c1b8856af9c68,0x00ff4669591fe9d6,0x0054974be08a32c8)}, + {FIELD_LITERAL(0x0010de3fd682ceed,0x008c07642d83ca4e,0x0013bb064e00a1cc,0x009411ae27870e11,0x00ea8e5b4d531223,0x0032fe7d2aaece2e,0x00d989e243e7bb41,0x000fe79a508e9b8b)}, + {FIELD_LITERAL(0x005e0426b9bfc5b1,0x0041a5b1d29ee4fa,0x0015b0def7774391,0x00bc164f1f51af01,0x00d543b0942797b9,0x003c129b6398099c,0x002b114c6e5adf18,0x00b4e630e4018a7b)}, + }}, {{ + {FIELD_LITERAL(0x00d490afc95f8420,0x00b096bf50c1d9b9,0x00799fd707679866,0x007c74d9334afbea,0x00efaa8be80ff4ed,0x0075c4943bb81694,0x00c21c2fca161f36,0x00e77035d492bfee)}, + {FIELD_LITERAL(0x006658a190dd6661,0x00e0e9bab38609a6,0x0028895c802237ed,0x006a0229c494f587,0x002dcde96c9916b7,0x00d158822de16218,0x00173b917a06856f,0x00ca78a79ae07326)}, + {FIELD_LITERAL(0x00e35bfc79caced4,0x0087238a3e1fe3bb,0x00bcbf0ff4ceff5b,0x00a19c1c94099b91,0x0071e102b49db976,0x0059e3d004eada1e,0x008da78afa58a47e,0x00579c8ebf269187)}, + }}, {{ + {FIELD_LITERAL(0x00a16c2905eee75f,0x009d4bcaea2c7e1d,0x00d3bd79bfad19df,0x0050da745193342c,0x006abdb8f6b29ab1,0x00a24fe0a4fef7ef,0x0063730da1057dfb,0x00a08c312c8eb108)}, + {FIELD_LITERAL(0x00b583be005375be,0x00a40c8f8a4e3df4,0x003fac4a8f5bdbf7,0x00d4481d872cd718,0x004dc8749cdbaefe,0x00cce740d5e5c975,0x000b1c1f4241fd21,0x00a76de1b4e1cd07)}, + {FIELD_LITERAL(0x007a076500d30b62,0x000a6e117b7f090f,0x00c8712ae7eebd9a,0x000fbd6c1d5f6ff7,0x003a7977246ebf11,0x00166ed969c6600e,0x00aa42e469c98bec,0x00dc58f307cf0666)}, + }}, {{ + {FIELD_LITERAL(0x004b491f65a9a28b,0x006a10309e8a55b7,0x00b67210185187ef,0x00cf6497b12d9b8f,0x0085778c56e2b1ba,0x0015b4c07a814d85,0x00686479e62da561,0x008de5d88f114916)}, + {FIELD_LITERAL(0x00e37c88d6bba7b1,0x003e4577e1b8d433,0x0050d8ea5f510ec0,0x0042fc9f2da9ef59,0x003bd074c1141420,0x00561b8b7b68774e,0x00232e5e5d1013a3,0x006b7f2cb3d7e73f)}, + {FIELD_LITERAL(0x004bdd0f0b41e6a0,0x001773057c405d24,0x006029f99915bd97,0x006a5ba70a17fe2f,0x0046111977df7e08,0x004d8124c89fb6b7,0x00580983b2bb2724,0x00207bf330d6f3fe)}, + }}, {{ + {FIELD_LITERAL(0x007efdc93972a48b,0x002f5e50e78d5fee,0x0080dc11d61c7fe5,0x0065aa598707245b,0x009abba2300641be,0x000c68787656543a,0x00ffe0fef2dc0a17,0x00007ffbd6cb4f3a)}, + {FIELD_LITERAL(0x0036012f2b836efc,0x00458c126d6b5fbc,0x00a34436d719ad1e,0x0097be6167117dea,0x0009c219c879cff3,0x0065564493e60755,0x00993ac94a8cdec0,0x002d4885a4d0dbaf)}, + {FIELD_LITERAL(0x00598b60b4c068ba,0x00c547a0be7f1afd,0x009582164acf12af,0x00af4acac4fbbe40,0x005f6ca7c539121a,0x003b6e752ebf9d66,0x00f08a30d5cac5d4,0x00e399bb5f97c5a9)}, + }}, {{ + {FIELD_LITERAL(0x007445a0409c0a66,0x00a65c369f3829c0,0x0031d248a4f74826,0x006817f34defbe8e,0x00649741d95ebf2e,0x00d46466ab16b397,0x00fdc35703bee414,0x00343b43334525f8)}, + {FIELD_LITERAL(0x001796bea93f6401,0x00090c5a42e85269,0x00672412ba1252ed,0x001201d47b6de7de,0x006877bccfe66497,0x00b554fd97a4c161,0x009753f42dbac3cf,0x00e983e3e378270a)}, + {FIELD_LITERAL(0x00ac3eff18849872,0x00f0eea3bff05690,0x00a6d72c21dd505d,0x001b832642424169,0x00a6813017b540e5,0x00a744bd71b385cd,0x0022a7d089130a7b,0x004edeec9a133486)}, + }}, {{ + {FIELD_LITERAL(0x00b2d6729196e8a9,0x0088a9bb2031cef4,0x00579e7787dc1567,0x0030f49feb059190,0x00a0b1d69c7f7d8f,0x0040bdcc6d9d806f,0x00d76c4037edd095,0x00bbf24376415dd7)}, + {FIELD_LITERAL(0x00240465ff5a7197,0x00bb97e76caf27d0,0x004b4edbf8116d39,0x001d8586f708cbaa,0x000f8ee8ff8e4a50,0x00dde5a1945dd622,0x00e6fc1c0957e07c,0x0041c9cdabfd88a0)}, + {FIELD_LITERAL(0x005344b0bf5b548c,0x002957d0b705cc99,0x00f586a70390553d,0x0075b3229f583cc3,0x00a1aa78227490e4,0x001bf09cf7957717,0x00cf6bf344325f52,0x0065bd1c23ca3ecf)}, + }}, {{ + {FIELD_LITERAL(0x009bff3b3239363c,0x00e17368796ef7c0,0x00528b0fe0971f3a,0x0008014fc8d4a095,0x00d09f2e8a521ec4,0x006713ab5dde5987,0x0003015758e0dbb1,0x00215999f1ba212d)}, + {FIELD_LITERAL(0x002c88e93527da0e,0x0077c78f3456aad5,0x0071087a0a389d1c,0x00934dac1fb96dbd,0x008470e801162697,0x005bc2196cd4ad49,0x00e535601d5087c3,0x00769888700f497f)}, + {FIELD_LITERAL(0x00da7a4b557298ad,0x0019d2589ea5df76,0x00ef3e38be0c6497,0x00a9644e1312609a,0x004592f61b2558da,0x0082c1df510d7e46,0x0042809a535c0023,0x00215bcb5afd7757)}, + }}, {{ + {FIELD_LITERAL(0x002b9df55a1a4213,0x00dcfc3b464a26be,0x00c4f9e07a8144d5,0x00c8e0617a92b602,0x008e3c93accafae0,0x00bf1bcb95b2ca60,0x004ce2426a613bf3,0x00266cac58e40921)}, + {FIELD_LITERAL(0x008456d5db76e8f0,0x0032ca9cab2ce163,0x0059f2b8bf91abcf,0x0063c2a021712788,0x00f86155af22f72d,0x00db98b2a6c005a0,0x00ac6e416a693ac4,0x007a93572af53226)}, + {FIELD_LITERAL(0x0087767520f0de22,0x0091f64012279fb5,0x001050f1f0644999,0x004f097a2477ad3c,0x006b37913a9947bd,0x001a3d78645af241,0x0057832bbb3008a7,0x002c1d902b80dc20)}, + }}, {{ + {FIELD_LITERAL(0x001a6002bf178877,0x009bce168aa5af50,0x005fc318ff04a7f5,0x0052818f55c36461,0x008768f5d4b24afb,0x0037ffbae7b69c85,0x0018195a4b61edc0,0x001e12ea088434b2)}, + {FIELD_LITERAL(0x0047d3f804e7ab07,0x00a809ab5f905260,0x00b3ffc7cdaf306d,0x00746e8ec2d6e509,0x00d0dade8887a645,0x00acceeebde0dd37,0x009bc2579054686b,0x0023804f97f1c2bf)}, + {FIELD_LITERAL(0x0043e2e2e50b80d7,0x00143aafe4427e0f,0x005594aaecab855b,0x008b12ccaaecbc01,0x002deeb091082bc3,0x009cca4be2ae7514,0x00142b96e696d047,0x00ad2a2b1c05256a)}, + }}, {{ + {FIELD_LITERAL(0x003914f2f144b78b,0x007a95dd8bee6f68,0x00c7f4384d61c8e6,0x004e51eb60f1bdb2,0x00f64be7aa4621d8,0x006797bfec2f0ac0,0x007d17aab3c75900,0x001893e73cac8bc5)}, + {FIELD_LITERAL(0x00140360b768665b,0x00b68aca4967f977,0x0001089b66195ae4,0x00fe71122185e725,0x000bca2618d49637,0x00a54f0557d7e98a,0x00cdcd2f91d6f417,0x00ab8c13741fd793)}, + {FIELD_LITERAL(0x00725ee6b1e549e0,0x007124a0769777fa,0x000b68fdad07ae42,0x0085b909cd4952df,0x0092d2e3c81606f4,0x009f22f6cac099a0,0x00f59da57f2799a8,0x00f06c090122f777)}, + }}, {{ + {FIELD_LITERAL(0x00ce0bed0a3532bc,0x001a5048a22df16b,0x00e31db4cbad8bf1,0x00e89292120cf00e,0x007d1dd1a9b00034,0x00e2a9041ff8f680,0x006a4c837ae596e7,0x00713af1068070b3)}, + {FIELD_LITERAL(0x00c4fe64ce66d04b,0x00b095d52e09b3d7,0x00758bbecb1a3a8e,0x00f35cce8d0650c0,0x002b878aa5984473,0x0062e0a3b7544ddc,0x00b25b290ed116fe,0x007b0f6abe0bebf2)}, + {FIELD_LITERAL(0x0081d4e3addae0a8,0x003410c836c7ffcc,0x00c8129ad89e4314,0x000e3d5a23922dcd,0x00d91e46f29c31f3,0x006c728cde8c5947,0x002bc655ba2566c0,0x002ca94721533108)}, + }}, {{ + {FIELD_LITERAL(0x0051e4b3f764d8a9,0x0019792d46e904a0,0x00853bc13dbc8227,0x000840208179f12d,0x0068243474879235,0x0013856fbfe374d0,0x00bda12fe8676424,0x00bbb43635926eb2)}, + {FIELD_LITERAL(0x0012cdc880a93982,0x003c495b21cd1b58,0x00b7e5c93f22a26e,0x0044aa82dfb99458,0x009ba092cdffe9c0,0x00a14b3ab2083b73,0x000271c2f70e1c4b,0x00eea9cac0f66eb8)}, + {FIELD_LITERAL(0x001a1847c4ac5480,0x00b1b412935bb03a,0x00f74285983bf2b2,0x00624138b5b5d0f1,0x008820c0b03d38bf,0x00b94e50a18c1572,0x0060f6934841798f,0x00c52f5d66d6ebe2)}, + }}, {{ + {FIELD_LITERAL(0x00da23d59f9bcea6,0x00e0f27007a06a4b,0x00128b5b43a6758c,0x000cf50190fa8b56,0x00fc877aba2b2d72,0x00623bef52edf53f,0x00e6af6b819669e2,0x00e314dc34fcaa4f)}, + {FIELD_LITERAL(0x0066e5eddd164d1e,0x00418a7c6fe28238,0x0002e2f37e962c25,0x00f01f56b5975306,0x0048842fa503875c,0x0057b0e968078143,0x00ff683024f3d134,0x0082ae28fcad12e4)}, + {FIELD_LITERAL(0x0011ddfd21260e42,0x00d05b0319a76892,0x00183ea4368e9b8f,0x00b0815662affc96,0x00b466a5e7ce7c88,0x00db93b07506e6ee,0x0033885f82f62401,0x0086f9090ec9b419)}, + }}, {{ + {FIELD_LITERAL(0x00d95d1c5fcb435a,0x0016d1ed6b5086f9,0x00792aa0b7e54d71,0x0067b65715f1925d,0x00a219755ec6176b,0x00bc3f026b12c28f,0x00700c897ffeb93e,0x0089b83f6ec50b46)}, + {FIELD_LITERAL(0x003c97e6384da36e,0x00423d53eac81a09,0x00b70d68f3cdce35,0x00ee7959b354b92c,0x00f4e9718819c8ca,0x009349f12acbffe9,0x005aee7b62cb7da6,0x00d97764154ffc86)}, + {FIELD_LITERAL(0x00526324babb46dc,0x002ee99b38d7bf9e,0x007ea51794706ef4,0x00abeb04da6e3c39,0x006b457c1d281060,0x00fe243e9a66c793,0x00378de0fb6c6ee4,0x003e4194b9c3cb93)}, + }}, {{ + {FIELD_LITERAL(0x00fed3cd80ca2292,0x0015b043a73ca613,0x000a9fd7bf9be227,0x003b5e03de2db983,0x005af72d46904ef7,0x00c0f1b5c49faa99,0x00dc86fc3bd305e1,0x00c92f08c1cb1797)}, + {FIELD_LITERAL(0x0079680ce111ed3b,0x001a1ed82806122c,0x000c2e7466d15df3,0x002c407f6f7150fd,0x00c5e7c96b1b0ce3,0x009aa44626863ff9,0x00887b8b5b80be42,0x00b6023cec964825)}, + {FIELD_LITERAL(0x00e4a8e1048970c8,0x0062887b7830a302,0x00bcf1c8cd81402b,0x0056dbb81a68f5be,0x0014eced83f12452,0x00139e1a510150df,0x00bb81140a82d1a3,0x000febcc1aaf1aa7)}, + }}, {{ + {FIELD_LITERAL(0x00a7527958238159,0x0013ec9537a84cd6,0x001d7fee7d562525,0x00b9eefa6191d5e5,0x00dbc97db70bcb8a,0x00481affc7a4d395,0x006f73d3e70c31bb,0x00183f324ed96a61)}, + {FIELD_LITERAL(0x0039dd7ce7fc6860,0x00d64f6425653da1,0x003e037c7f57d0af,0x0063477a06e2bcf2,0x001727dbb7ac67e6,0x0049589f5efafe2e,0x00fc0fef2e813d54,0x008baa5d087fb50d)}, + {FIELD_LITERAL(0x0024fb59d9b457c7,0x00a7d4e060223e4c,0x00c118d1b555fd80,0x0082e216c732f22a,0x00cd2a2993089504,0x003638e836a3e13d,0x000d855ee89b4729,0x008ec5b7d4810c91)}, + }}, {{ + {FIELD_LITERAL(0x001bf51f7d65cdfd,0x00d14cdafa16a97d,0x002c38e60fcd10e7,0x00a27446e393efbd,0x000b5d8946a71fdd,0x0063df2cde128f2f,0x006c8679569b1888,0x0059ffc4925d732d)}, + {FIELD_LITERAL(0x00ece96f95f2b66f,0x00ece7952813a27b,0x0026fc36592e489e,0x007157d1a2de0f66,0x00759dc111d86ddf,0x0012881e5780bb0f,0x00c8ccc83ad29496,0x0012b9bd1929eb71)}, + {FIELD_LITERAL(0x000fa15a20da5df0,0x00349ddb1a46cd31,0x002c512ad1d8e726,0x00047611f669318d,0x009e68fba591e17e,0x004320dffa803906,0x00a640874951a3d3,0x00b6353478baa24f)}, + }}, {{ + {FIELD_LITERAL(0x009696510000d333,0x00ec2f788bc04826,0x000e4d02b1f67ba5,0x00659aa8dace08b6,0x00d7a38a3a3ae533,0x008856defa8c746b,0x004d7a4402d3da1a,0x00ea82e06229260f)}, + {FIELD_LITERAL(0x006a15bb20f75c0c,0x0079a144027a5d0c,0x00d19116ce0b4d70,0x0059b83bcb0b268e,0x005f58f63f16c127,0x0079958318ee2c37,0x00defbb063d07f82,0x00f1f0b931d2d446)}, + {FIELD_LITERAL(0x00cb5e4c3c35d422,0x008df885ca43577f,0x00fa50b16ca3e471,0x005a0e58e17488c8,0x00b2ceccd6d34d19,0x00f01d5d235e36e9,0x00db2e7e4be6ca44,0x00260ab77f35fccd)}, + }}, {{ + {FIELD_LITERAL(0x006f6fd9baac61d5,0x002a7710a020a895,0x009de0db7fc03d4d,0x00cdedcb1875f40b,0x00050caf9b6b1e22,0x005e3a6654456ab0,0x00775fdf8c4423d4,0x0028701ea5738b5d)}, + {FIELD_LITERAL(0x009ffd90abfeae96,0x00cba3c2b624a516,0x005ef08bcee46c91,0x00e6fde30afb6185,0x00f0b4db4f818ce4,0x006c54f45d2127f5,0x00040125035854c7,0x00372658a3287e13)}, + {FIELD_LITERAL(0x00d7070fb1beb2ab,0x0078fc845a93896b,0x006894a4b2f224a6,0x005bdd8192b9dbde,0x00b38839874b3a9e,0x00f93618b04b7a57,0x003e3ec75fd2c67e,0x00bf5e6bfc29494a)}, + }}, {{ + {FIELD_LITERAL(0x00f19224ebba2aa5,0x0074f89d358e694d,0x00eea486597135ad,0x0081579a4555c7e1,0x0010b9b872930a9d,0x00f002e87a30ecc0,0x009b9d66b6de56e2,0x00a3c4f45e8004eb)}, + {FIELD_LITERAL(0x0045e8dda9400888,0x002ff12e5fc05db7,0x00a7098d54afe69c,0x00cdbe846a500585,0x00879c1593ca1882,0x003f7a7fea76c8b0,0x002cd73dd0c8e0a1,0x00645d6ce96f51fe)}, + {FIELD_LITERAL(0x002b7e83e123d6d6,0x00398346f7419c80,0x0042922e55940163,0x005e7fc5601886a3,0x00e88f2cee1d3103,0x00e7fab135f2e377,0x00b059984dbf0ded,0x0009ce080faa5bb8)}, + }}, {{ + {FIELD_LITERAL(0x0085e78af7758979,0x00275a4ee1631a3a,0x00d26bc0ed78b683,0x004f8355ea21064f,0x00d618e1a32696e5,0x008d8d7b150e5680,0x00a74cd854b278d2,0x001dd62702203ea0)}, + {FIELD_LITERAL(0x00f89335c2a59286,0x00a0f5c905d55141,0x00b41fb836ee9382,0x00e235d51730ca43,0x00a5cb37b5c0a69a,0x009b966ffe136c45,0x00cb2ea10bf80ed1,0x00fb2b370b40dc35)}, + {FIELD_LITERAL(0x00d687d16d4ee8ba,0x0071520bdd069dff,0x00de85c60d32355d,0x0087d2e3565102f4,0x00cde391b8dfc9aa,0x00e18d69efdfefe5,0x004a9d0591954e91,0x00fa36dd8b50eee5)}, + }}, {{ + {FIELD_LITERAL(0x002e788749a865f7,0x006e4dc3116861ea,0x009f1428c37276e6,0x00e7d2e0fc1e1226,0x003aeebc6b6c45f6,0x0071a8073bf500c9,0x004b22ad986b530c,0x00f439e63c0d79d4)}, + {FIELD_LITERAL(0x006bc3d53011f470,0x00032d6e692b83e8,0x00059722f497cd0b,0x0009b4e6f0c497cc,0x0058a804b7cce6c0,0x002b71d3302bbd5d,0x00e2f82a36765fce,0x008dded99524c703)}, + {FIELD_LITERAL(0x004d058953747d64,0x00701940fe79aa6f,0x00a620ac71c760bf,0x009532b611158b75,0x00547ed7f466f300,0x003cb5ab53a8401a,0x00c7763168ce3120,0x007e48e33e4b9ab2)}, + }}, {{ + {FIELD_LITERAL(0x001b2fc57bf3c738,0x006a3f918993fb80,0x0026f7a14fdec288,0x0075a2cdccef08db,0x00d3ecbc9eecdbf1,0x0048c40f06e5bf7f,0x00d63e423009896b,0x000598bc99c056a8)}, + {FIELD_LITERAL(0x002f194eaafa46dc,0x008e38f57fe87613,0x00dc8e5ae25f4ab2,0x000a17809575e6bd,0x00d3ec7923ba366a,0x003a7e72e0ad75e3,0x0010024b88436e0a,0x00ed3c5444b64051)}, + {FIELD_LITERAL(0x00831fc1340af342,0x00c9645669466d35,0x007692b4cc5a080f,0x009fd4a47ac9259f,0x001eeddf7d45928b,0x003c0446fc45f28b,0x002c0713aa3e2507,0x0095706935f0f41e)}, + }}, {{ + {FIELD_LITERAL(0x00766ae4190ec6d8,0x0065768cabc71380,0x00b902598416cdc2,0x00380021ad38df52,0x008f0b89d6551134,0x004254d4cc62c5a5,0x000d79f4484b9b94,0x00b516732ae3c50e)}, + {FIELD_LITERAL(0x001fb73475c45509,0x00d2b2e5ea43345a,0x00cb3c3842077bd1,0x0029f90ad820946e,0x007c11b2380778aa,0x009e54ece62c1704,0x004bc60c41ca01c3,0x004525679a5a0b03)}, + {FIELD_LITERAL(0x00c64fbddbed87b3,0x0040601d11731faa,0x009c22475b6f9d67,0x0024b79dae875f15,0x00616fed3f02c3b0,0x0000cf39f6af2d3b,0x00c46bac0aa9a688,0x00ab23e2800da204)}, + }}, {{ + {FIELD_LITERAL(0x000b3a37617632b0,0x00597199fe1cfb6c,0x0042a7ccdfeafdd6,0x004cc9f15ebcea17,0x00f436e596a6b4a4,0x00168861142df0d8,0x000753edfec26af5,0x000c495d7e388116)}, + {FIELD_LITERAL(0x0017085f4a346148,0x00c7cf7a37f62272,0x001776e129bc5c30,0x009955134c9eef2a,0x001ba5bdf1df07be,0x00ec39497103a55c,0x006578354fda6cfb,0x005f02719d4f15ee)}, + {FIELD_LITERAL(0x0052b9d9b5d9655d,0x00d4ec7ba1b461c3,0x00f95df4974f280b,0x003d8e5ca11aeb51,0x00d4981eb5a70b26,0x000af9a4f6659f29,0x004598c846faeb43,0x0049d9a183a47670)}, + }}, {{ + {FIELD_LITERAL(0x000a72d23dcb3f1f,0x00a3737f84011727,0x00f870c0fbbf4a47,0x00a7aadd04b5c9ca,0x000c7715c67bd072,0x00015a136afcd74e,0x0080d5caea499634,0x0026b448ec7514b7)}, + {FIELD_LITERAL(0x00b60167d9e7d065,0x00e60ba0d07381e8,0x003a4f17b725c2d4,0x006c19fe176b64fa,0x003b57b31af86ccb,0x0021047c286180fd,0x00bdc8fb00c6dbb6,0x00fe4a9f4bab4f3f)}, + {FIELD_LITERAL(0x0088ffc3a16111f7,0x009155e4245d0bc8,0x00851d68220572d5,0x00557ace1e514d29,0x0031d7c339d91022,0x00101d0ae2eaceea,0x00246ab3f837b66a,0x00d5216d381ff530)}, + }}, {{ + {FIELD_LITERAL(0x0057e7ea35f36dae,0x00f47d7ad15de22e,0x00d757ea4b105115,0x008311457d579d7e,0x00b49b75b1edd4eb,0x0081c7ff742fd63a,0x00ddda3187433df6,0x00475727d55f9c66)}, + {FIELD_LITERAL(0x00a6295218dc136a,0x00563b3af0e9c012,0x00d3753b0145db1b,0x004550389c043dc1,0x00ea94ae27401bdf,0x002b0b949f2b7956,0x00c63f780ad8e23c,0x00e591c47d6bab15)}, + {FIELD_LITERAL(0x00416c582b058eb6,0x004107da5b2cc695,0x00b3cd2556aeec64,0x00c0b418267e57a1,0x001799293579bd2e,0x0046ed44590e4d07,0x001d7459b3630a1e,0x00c6afba8b6696aa)}, + }}, {{ + {FIELD_LITERAL(0x008d6009b26da3f8,0x00898e88ca06b1ca,0x00edb22b2ed7fe62,0x00fbc93516aabe80,0x008b4b470c42ce0d,0x00e0032ba7d0dcbb,0x00d76da3a956ecc8,0x007f20fe74e3852a)}, + {FIELD_LITERAL(0x002419222c607674,0x00a7f23af89188b3,0x00ad127284e73d1c,0x008bba582fae1c51,0x00fc6aa7ca9ecab1,0x003df5319eb6c2ba,0x002a05af8a8b199a,0x004bf8354558407c)}, + {FIELD_LITERAL(0x00ce7d4a30f0fcbf,0x00d02c272629f03d,0x0048c001f7400bc2,0x002c21368011958d,0x0098a550391e96b5,0x002d80b66390f379,0x001fa878760cc785,0x001adfce54b613d5)}, + }}, {{ + {FIELD_LITERAL(0x001ed4dc71fa2523,0x005d0bff19bf9b5c,0x00c3801cee065a64,0x001ed0b504323fbf,0x0003ab9fdcbbc593,0x00df82070178b8d2,0x00a2bcaa9c251f85,0x00c628a3674bd02e)}, + {FIELD_LITERAL(0x006b7a0674f9f8de,0x00a742414e5c7cff,0x0041cbf3c6e13221,0x00e3a64fd207af24,0x0087c05f15fbe8d1,0x004c50936d9e8a33,0x001306ec21042b6d,0x00a4f4137d1141c2)}, + {FIELD_LITERAL(0x0009e6fb921568b0,0x00b3c60120219118,0x002a6c3460dd503a,0x009db1ef11654b54,0x0063e4bf0be79601,0x00670d34bb2592b9,0x00dcee2f6c4130ce,0x00b2682e88e77f54)}, + }}, {{ + {FIELD_LITERAL(0x000d5b4b3da135ab,0x00838f3e5064d81d,0x00d44eb50f6d94ed,0x0008931ab502ac6d,0x00debe01ca3d3586,0x0025c206775f0641,0x005ad4b6ae912763,0x007e2c318ad8f247)}, + {FIELD_LITERAL(0x00ddbe0750dd1add,0x004b3c7b885844b8,0x00363e7ecf12f1ae,0x0062e953e6438f9d,0x0023cc73b076afe9,0x00b09fa083b4da32,0x00c7c3d2456c541d,0x005b591ec6b694d4)}, + {FIELD_LITERAL(0x0028656e19d62fcf,0x0052a4af03df148d,0x00122765ddd14e42,0x00f2252904f67157,0x004741965b636f3a,0x006441d296132cb9,0x005e2106f956a5b7,0x00247029592d335c)}, + }}, {{ + {FIELD_LITERAL(0x003fe038eb92f894,0x000e6da1b72e8e32,0x003a1411bfcbe0fa,0x00b55d473164a9e4,0x00b9a775ac2df48d,0x0002ddf350659e21,0x00a279a69eb19cb3,0x00f844eab25cba44)}, + {FIELD_LITERAL(0x00c41d1f9c1f1ac1,0x007b2df4e9f19146,0x00b469355fd5ba7a,0x00b5e1965afc852a,0x00388d5f1e2d8217,0x0022079e4c09ae93,0x0014268acd4ef518,0x00c1dd8d9640464c)}, + {FIELD_LITERAL(0x0038526adeed0c55,0x00dd68c607e3fe85,0x00f746ddd48a5d57,0x0042f2952b963b7c,0x001cbbd6876d5ec2,0x005e341470bca5c2,0x00871d41e085f413,0x00e53ab098f45732)}, + }}, {{ + {FIELD_LITERAL(0x004d51124797c831,0x008f5ae3750347ad,0x0070ced94c1a0c8e,0x00f6db2043898e64,0x000d00c9a5750cd0,0x000741ec59bad712,0x003c9d11aab37b7f,0x00a67ba169807714)}, + {FIELD_LITERAL(0x00adb2c1566e8b8f,0x0096c68a35771a9a,0x00869933356f334a,0x00ba9c93459f5962,0x009ec73fb6e8ca4b,0x003c3802c27202e1,0x0031f5b733e0c008,0x00f9058c19611fa9)}, + {FIELD_LITERAL(0x00238f01814a3421,0x00c325a44b6cce28,0x002136f97aeb0e73,0x000cac8268a4afe2,0x0022fd218da471b3,0x009dcd8dfff8def9,0x00cb9f8181d999bb,0x00143ae56edea349)}, + }}, {{ + {FIELD_LITERAL(0x0000623bf87622c5,0x00a1966fdd069496,0x00c315b7b812f9fc,0x00bdf5efcd128b97,0x001d464f532e3e16,0x003cd94f081bfd7e,0x00ed9dae12ce4009,0x002756f5736eee70)}, + {FIELD_LITERAL(0x00a5187e6ee7341b,0x00e6d52e82d83b6e,0x00df3c41323094a7,0x00b3324f444e9de9,0x00689eb21a35bfe5,0x00f16363becd548d,0x00e187cc98e7f60f,0x00127d9062f0ccab)}, + {FIELD_LITERAL(0x004ad71b31c29e40,0x00a5fcace12fae29,0x004425b5597280ed,0x00e7ef5d716c3346,0x0010b53ada410ac8,0x0092310226060c9b,0x0091c26128729c7e,0x0088b42900f8ec3b)}, + }}, {{ + {FIELD_LITERAL(0x00f1e26e9762d4a8,0x00d9d74082183414,0x00ffec9bd57a0282,0x000919e128fd497a,0x00ab7ae7d00fe5f8,0x0054dc442851ff68,0x00c9ebeb3b861687,0x00507f7cab8b698f)}, + {FIELD_LITERAL(0x00c13c5aae3ae341,0x009c6c9ed98373e7,0x00098f26864577a8,0x0015b886e9488b45,0x0037692c42aadba5,0x00b83170b8e7791c,0x001670952ece1b44,0x00fd932a39276da2)}, + {FIELD_LITERAL(0x0081a3259bef3398,0x005480fff416107b,0x00ce4f607d21be98,0x003ffc084b41df9b,0x0043d0bb100502d1,0x00ec35f575ba3261,0x00ca18f677300ef3,0x00e8bb0a827d8548)}, + }}, {{ + {FIELD_LITERAL(0x00df76b3328ada72,0x002e20621604a7c2,0x00f910638a105b09,0x00ef4724d96ef2cd,0x00377d83d6b8a2f7,0x00b4f48805ade324,0x001cd5da8b152018,0x0045af671a20ca7f)}, + {FIELD_LITERAL(0x009ae3b93a56c404,0x004a410b7a456699,0x00023a619355e6b2,0x009cdc7297387257,0x0055b94d4ae70d04,0x002cbd607f65b005,0x003208b489697166,0x00ea2aa058867370)}, + {FIELD_LITERAL(0x00f29d2598ee3f32,0x00b4ac5385d82adc,0x007633eaf04df19b,0x00aa2d3d77ceab01,0x004a2302fcbb778a,0x00927f225d5afa34,0x004a8e9d5047f237,0x008224ae9dbce530)}, + }}, {{ + {FIELD_LITERAL(0x001cf640859b02f8,0x00758d1d5d5ce427,0x00763c784ef4604c,0x005fa81aee205270,0x00ac537bfdfc44cb,0x004b919bd342d670,0x00238508d9bf4b7a,0x00154888795644f3)}, + {FIELD_LITERAL(0x00c845923c084294,0x00072419a201bc25,0x0045f408b5f8e669,0x00e9d6a186b74dfe,0x00e19108c68fa075,0x0017b91d874177b7,0x002f0ca2c7912c5a,0x009400aa385a90a2)}, + {FIELD_LITERAL(0x0071110b01482184,0x00cfed0044f2bef8,0x0034f2901cf4662e,0x003b4ae2a67f9834,0x00cca9b96fe94810,0x00522507ae77abd0,0x00bac7422721e73e,0x0066622b0f3a62b0)}, + }}, {{ + {FIELD_LITERAL(0x00f8ac5cf4705b6a,0x00867d82dcb457e3,0x007e13ab2ccc2ce9,0x009ee9a018d3930e,0x008370f8ecb42df8,0x002d9f019add263e,0x003302385b92d196,0x00a15654536e2c0c)}, + {FIELD_LITERAL(0x0026ef1614e160af,0x00c023f9edfc9c76,0x00cff090da5f57ba,0x0076db7a66643ae9,0x0019462f8c646999,0x008fec00b3854b22,0x00d55041692a0a1c,0x0065db894215ca00)}, + {FIELD_LITERAL(0x00a925036e0a451c,0x002a0390c36b6cc1,0x00f27020d90894f4,0x008d90d52cbd3d7f,0x00e1d0137392f3b8,0x00f017c158b51a8f,0x00cac313d3ed7dbc,0x00b99a81e3eb42d3)}, + }}, {{ + {FIELD_LITERAL(0x00b54850275fe626,0x0053a3fd1ec71140,0x00e3d2d7dbe096fa,0x00e4ac7b595cce4c,0x0077bad449c0a494,0x00b7c98814afd5b3,0x0057226f58486cf9,0x00b1557154f0cc57)}, + {FIELD_LITERAL(0x008cc9cd236315c0,0x0031d9c5b39fda54,0x00a5713ef37e1171,0x00293d5ae2886325,0x00c4aba3e05015e1,0x0003f35ef78e4fc6,0x0039d6bd3ac1527b,0x0019d7c3afb77106)}, + {FIELD_LITERAL(0x007b162931a985af,0x00ad40a2e0daa713,0x006df27c4009f118,0x00503e9f4e2e8bec,0x00751a77c82c182d,0x000298937769245b,0x00ffb1e8fabf9ee5,0x0008334706e09abe)}, + }}, {{ + {FIELD_LITERAL(0x00dbca4e98a7dcd9,0x00ee29cfc78bde99,0x00e4a3b6995f52e9,0x0045d70189ae8096,0x00fd2a8a3b9b0d1b,0x00af1793b107d8e1,0x00dbf92cbe4afa20,0x00da60f798e3681d)}, + {FIELD_LITERAL(0x004246bfcecc627a,0x004ba431246c03a4,0x00bd1d101872d497,0x003b73d3f185ee16,0x001feb2e2678c0e3,0x00ff13c5a89dec76,0x00ed06042e771d8f,0x00a4fd2a897a83dd)}, + {FIELD_LITERAL(0x009a4a3be50d6597,0x00de3165fc5a1096,0x004f3f56e345b0c7,0x00f7bf721d5ab8bc,0x004313e47b098c50,0x00e4c7d5c0e1adbb,0x002e3e3db365051e,0x00a480c2cd6a96fb)}, + }}, {{ + {FIELD_LITERAL(0x00417fa30a7119ed,0x00af257758419751,0x00d358a487b463d4,0x0089703cc720b00d,0x00ce56314ff7f271,0x0064db171ade62c1,0x00640b36d4a22fed,0x00424eb88696d23f)}, + {FIELD_LITERAL(0x004ede34af2813f3,0x00d4a8e11c9e8216,0x004796d5041de8a5,0x00c4c6b4d21cc987,0x00e8a433ee07fa1e,0x0055720b5abcc5a1,0x008873ea9c74b080,0x005b3fec1ab65d48)}, + {FIELD_LITERAL(0x0047e5277db70ec5,0x000a096c66db7d6b,0x00b4164cc1730159,0x004a9f783fe720fe,0x00a8177b94449dbc,0x0095a24ff49a599f,0x0069c1c578250cbc,0x00452019213debf4)}, + }}, {{ + {FIELD_LITERAL(0x0021ce99e09ebda3,0x00fcbd9f91875ad0,0x009bbf6b7b7a0b5f,0x00388886a69b1940,0x00926a56d0f81f12,0x00e12903c3358d46,0x005dfce4e8e1ce9d,0x0044cfa94e2f7e23)}, + {FIELD_LITERAL(0x001bd59c09e982ea,0x00f72daeb937b289,0x0018b76dca908e0e,0x00edb498512384ad,0x00ce0243b6cc9538,0x00f96ff690cb4e70,0x007c77bf9f673c8d,0x005bf704c088a528)}, + {FIELD_LITERAL(0x0093d4628dcb33be,0x0095263d51d42582,0x0049b3222458fe06,0x00e7fce73b653a7f,0x003ca2ebce60b369,0x00c5de239a32bea4,0x0063b8b3d71fb6bf,0x0039aeeb78a1a839)}, + }}, {{ + {FIELD_LITERAL(0x007dc52da400336c,0x001fded1e15b9457,0x00902e00f5568e3a,0x00219bef40456d2d,0x005684161fb3dbc9,0x004a4e9be49a76ea,0x006e685ae88b78ff,0x0021c42f13042d3c)}, + {FIELD_LITERAL(0x00fb22bb5fd3ce50,0x0017b48aada7ae54,0x00fd5c44ad19a536,0x000ccc4e4e55e45c,0x00fd637d45b4c3f5,0x0038914e023c37cf,0x00ac1881d6a8d898,0x00611ed8d3d943a8)}, + {FIELD_LITERAL(0x0056e2259d113d2b,0x00594819b284ec16,0x00c7bf794bb36696,0x00721ee75097cdc6,0x00f71be9047a2892,0x00df6ba142564edf,0x0069580b7a184e8d,0x00f056e38fca0fee)}, + }}, {{ + {FIELD_LITERAL(0x009df98566a18c6d,0x00cf3a200968f219,0x0044ba60da6d9086,0x00dbc9c0e344da03,0x000f9401c4466855,0x00d46a57c5b0a8d1,0x00875a635d7ac7c6,0x00ef4a933b7e0ae6)}, + {FIELD_LITERAL(0x005e8694077a1535,0x008bef75f71c8f1d,0x000a7c1316423511,0x00906e1d70604320,0x003fc46c1a2ffbd6,0x00d1d5022e68f360,0x002515fba37bbf46,0x00ca16234e023b44)}, + {FIELD_LITERAL(0x00787c99561f4690,0x00a857a8c1561f27,0x00a10df9223c09fe,0x00b98a9562e3b154,0x004330b8744c3ed2,0x00e06812807ec5c4,0x00e4cf6a7db9f1e3,0x00d95b089f132a34)}, + }}, {{ + {FIELD_LITERAL(0x002922b39ca33eec,0x0090d12a5f3ab194,0x00ab60c02fb5f8ed,0x00188d292abba1cf,0x00e10edec9698f6e,0x0069a4d9934133c8,0x0024aac40e6d3d06,0x001702c2177661b0)}, + {FIELD_LITERAL(0x00139078397030bd,0x000e3c447e859a00,0x0064a5b334c82393,0x00b8aabeb7358093,0x00020778bb9ae73b,0x0032ee94c7892a18,0x008215253cb41bda,0x005e2797593517ae)}, + {FIELD_LITERAL(0x0083765a5f855d4a,0x0051b6d1351b8ee2,0x00116de548b0f7bb,0x0087bd88703affa0,0x0095b2cc34d7fdd2,0x0084cd81b53f0bc8,0x008562fc995350ed,0x00a39abb193651e3)}, + }}, {{ + {FIELD_LITERAL(0x0019e23f0474b114,0x00eb94c2ad3b437e,0x006ddb34683b75ac,0x00391f9209b564c6,0x00083b3bb3bff7aa,0x00eedcd0f6dceefc,0x00b50817f794fe01,0x0036474deaaa75c9)}, + {FIELD_LITERAL(0x0091868594265aa2,0x00797accae98ca6d,0x0008d8c5f0f8a184,0x00d1f4f1c2b2fe6e,0x0036783dfb48a006,0x008c165120503527,0x0025fd780058ce9b,0x0068beb007be7d27)}, + {FIELD_LITERAL(0x00d0ff88aa7c90c2,0x00b2c60dacf53394,0x0094a7284d9666d6,0x00bed9022ce7a19d,0x00c51553f0cd7682,0x00c3fb870b124992,0x008d0bc539956c9b,0x00fc8cf258bb8885)}, + }}, {{ + {FIELD_LITERAL(0x003667bf998406f8,0x0000115c43a12975,0x001e662f3b20e8fd,0x0019ffa534cb24eb,0x00016be0dc8efb45,0x00ff76a8b26243f5,0x00ae20d241a541e3,0x0069bd6af13cd430)}, + {FIELD_LITERAL(0x0045fdc16487cda3,0x00b2d8e844cf2ed7,0x00612c50e88c1607,0x00a08aabc66c1672,0x006031fdcbb24d97,0x001b639525744b93,0x004409d62639ab17,0x00a1853d0347ab1d)}, + {FIELD_LITERAL(0x0075a1a56ebf5c21,0x00a3e72be9ac53ed,0x00efcde1629170c2,0x0004225fe91ef535,0x0088049fc73dfda7,0x004abc74857e1288,0x0024e2434657317c,0x00d98cb3d3e5543c)}, + }}, {{ + {FIELD_LITERAL(0x00b4b53eab6bdb19,0x009b22d8b43711d0,0x00d948b9d961785d,0x00cb167b6f279ead,0x00191de3a678e1c9,0x00d9dd9511095c2e,0x00f284324cd43067,0x00ed74fa535151dd)}, + {FIELD_LITERAL(0x007e32c049b5c477,0x009d2bfdbd9bcfd8,0x00636e93045938c6,0x007fde4af7687298,0x0046a5184fafa5d3,0x0079b1e7f13a359b,0x00875adf1fb927d6,0x00333e21c61bcad2)}, + {FIELD_LITERAL(0x00048014f73d8b8d,0x0075684aa0966388,0x0092be7df06dc47c,0x0097cebcd0f5568a,0x005a7004d9c4c6a9,0x00b0ecbb659924c7,0x00d90332dd492a7c,0x0057fc14df11493d)}, + }}, {{ + {FIELD_LITERAL(0x0008ed8ea0ad95be,0x0041d324b9709645,0x00e25412257a19b4,0x0058df9f3423d8d2,0x00a9ab20def71304,0x009ae0dbf8ac4a81,0x00c9565977e4392a,0x003c9269444baf55)}, + {FIELD_LITERAL(0x007df6cbb926830b,0x00d336058ae37865,0x007af47dac696423,0x0048d3011ec64ac8,0x006b87666e40049f,0x0036a2e0e51303d7,0x00ba319bd79dbc55,0x003e2737ecc94f53)}, + {FIELD_LITERAL(0x00d296ff726272d9,0x00f6d097928fcf57,0x00e0e616a55d7013,0x00deaf454ed9eac7,0x0073a56bedef4d92,0x006ccfdf6fc92e19,0x009d1ee1371a7218,0x00ee3c2ee4462d80)}, + }}, {{ + {FIELD_LITERAL(0x00437bce9bccdf9d,0x00e0c8e2f85dc0a3,0x00c91a7073995a19,0x00856ec9fe294559,0x009e4b33394b156e,0x00e245b0dc497e5c,0x006a54e687eeaeff,0x00f1cd1cd00fdb7c)}, + {FIELD_LITERAL(0x008132ae5c5d8cd1,0x00121d68324a1d9f,0x00d6be9dafcb8c76,0x00684d9070edf745,0x00519fbc96d7448e,0x00388182fdc1f27e,0x000235baed41f158,0x00bf6cf6f1a1796a)}, + {FIELD_LITERAL(0x002adc4b4d148219,0x003084ada0d3a90a,0x0046de8aab0f2e4e,0x00452d342a67b5fd,0x00d4b50f01d4de21,0x00db6d9fc0cefb79,0x008c184c86a462cd,0x00e17c83764d42da)}, + }}, {{ + {FIELD_LITERAL(0x007b2743b9a1e01a,0x007847ffd42688c4,0x006c7844d610a316,0x00f0cb8b250aa4b0,0x00a19060143b3ae6,0x0014eb10b77cfd80,0x000170905729dd06,0x00063b5b9cd72477)}, + {FIELD_LITERAL(0x00ce382dc7993d92,0x00021153e938b4c8,0x00096f7567f48f51,0x0058f81ddfe4b0d5,0x00cc379a56b355c7,0x002c760770d3e819,0x00ee22d1d26e5a40,0x00de6d93d5b082d7)}, + {FIELD_LITERAL(0x000a91a42c52e056,0x00185f6b77fce7ea,0x000803c51962f6b5,0x0022528582ba563d,0x0043f8040e9856d6,0x0085a29ec81fb860,0x005f9a611549f5ff,0x00c1f974ecbd4b06)}, + }}, {{ + {FIELD_LITERAL(0x005b64c6fd65ec97,0x00c1fdd7f877bc7f,0x000d9cc6c89f841c,0x005c97b7f1aff9ad,0x0075e3c61475d47e,0x001ecb1ba8153011,0x00fe7f1c8d71d40d,0x003fa9757a229832)}, + {FIELD_LITERAL(0x00ffc5c89d2b0cba,0x00d363d42e3e6fc3,0x0019a1a0118e2e8a,0x00f7baeff48882e1,0x001bd5af28c6b514,0x0055476ca2253cb2,0x00d8eb1977e2ddf3,0x00b173b1adb228a1)}, + {FIELD_LITERAL(0x00f2cb99dd0ad707,0x00e1e08b6859ddd8,0x000008f2d0650bcc,0x00d7ed392f8615c3,0x00976750a94da27f,0x003e83bb0ecb69ba,0x00df8e8d15c14ac6,0x00f9f7174295d9c2)}, + }}, {{ + {FIELD_LITERAL(0x00f11cc8e0e70bcb,0x00e5dc689974e7dd,0x0014e409f9ee5870,0x00826e6689acbd63,0x008a6f4e3d895d88,0x00b26a8da41fd4ad,0x000fb7723f83efd7,0x009c749db0a5f6c3)}, + {FIELD_LITERAL(0x002389319450f9ba,0x003677f31aa1250a,0x0092c3db642f38cb,0x00f8b64c0dfc9773,0x00cd49fe3505b795,0x0068105a4090a510,0x00df0ba2072a8bb6,0x00eb396143afd8be)}, + {FIELD_LITERAL(0x00a0d4ecfb24cdff,0x00ddaf8008ba6479,0x00f0b3e36d4b0f44,0x003734bd3af1f146,0x00b87e2efc75527e,0x00d230df55ddab50,0x002613257ae56c1d,0x00bc0946d135934d)}, + }}, {{ + {FIELD_LITERAL(0x00468711bd994651,0x0033108fa67561bf,0x0089d760192a54b4,0x00adc433de9f1871,0x000467d05f36e050,0x007847e0f0579f7f,0x00a2314ad320052d,0x00b3a93649f0b243)}, + {FIELD_LITERAL(0x0067f8f0c4fe26c9,0x0079c4a3cc8f67b9,0x0082b1e62f23550d,0x00f2d409caefd7f5,0x0080e67dcdb26e81,0x0087ae993ea1f98a,0x00aa108becf61d03,0x001acf11efb608a3)}, + {FIELD_LITERAL(0x008225febbab50d9,0x00f3b605e4dd2083,0x00a32b28189e23d2,0x00d507e5e5eb4c97,0x005a1a84e302821f,0x0006f54c1c5f08c7,0x00a347c8cb2843f0,0x0009f73e9544bfa5)}, + }}, {{ + {FIELD_LITERAL(0x006c59c9ae744185,0x009fc32f1b4282cd,0x004d6348ca59b1ac,0x00105376881be067,0x00af4096013147dc,0x004abfb5a5cb3124,0x000d2a7f8626c354,0x009c6ed568e07431)}, + {FIELD_LITERAL(0x00e828333c297f8b,0x009ef3cf8c3f7e1f,0x00ab45f8fff31cb9,0x00c8b4178cb0b013,0x00d0c50dd3260a3f,0x0097126ac257f5bc,0x0042376cc90c705a,0x001d96fdb4a1071e)}, + {FIELD_LITERAL(0x00542d44d89ee1a8,0x00306642e0442d98,0x0090853872b87338,0x002362cbf22dc044,0x002c222adff663b8,0x0067c924495fcb79,0x000e621d983c977c,0x00df77a9eccb66fb)}, + }}, {{ + {FIELD_LITERAL(0x002809e4bbf1814a,0x00b9e854f9fafb32,0x00d35e67c10f7a67,0x008f1bcb76e748cf,0x004224d9515687d2,0x005ba0b774e620c4,0x00b5e57db5d54119,0x00e15babe5683282)}, + {FIELD_LITERAL(0x00832d02369b482c,0x00cba52ff0d93450,0x003fa9c908d554db,0x008d1e357b54122f,0x00abd91c2dc950c6,0x007eff1df4c0ec69,0x003f6aeb13fb2d31,0x00002d6179fc5b2c)}, + {FIELD_LITERAL(0x0046c9eda81c9c89,0x00b60cb71c8f62fc,0x0022f5a683baa558,0x00f87319fccdf997,0x009ca09b51ce6a22,0x005b12baf4af7d77,0x008a46524a1e33e2,0x00035a77e988be0d)}, + }}, {{ + {FIELD_LITERAL(0x00a7efe46a7dbe2f,0x002f66fd55014fe7,0x006a428afa1ff026,0x0056caaa9604ab72,0x0033f3bcd7fac8ae,0x00ccb1aa01c86764,0x00158d1edf13bf40,0x009848ee76fcf3b4)}, + {FIELD_LITERAL(0x00a9e7730a819691,0x00d9cc73c4992b70,0x00e299bde067de5a,0x008c314eb705192a,0x00e7226f17e8a3cc,0x0029dfd956e65a47,0x0053a8e839073b12,0x006f942b2ab1597e)}, + {FIELD_LITERAL(0x001c3d780ecd5e39,0x0094f247fbdcc5fe,0x00d5c786fd527764,0x00b6f4da74f0db2a,0x0080f1f8badcd5fc,0x00f36a373ad2e23b,0x00f804f9f4343bf2,0x00d1af40ec623982)}, + }}, {{ + {FIELD_LITERAL(0x0082aeace5f1b144,0x00f68b3108cf4dd3,0x00634af01dde3020,0x000beab5df5c2355,0x00e8b790d1b49b0b,0x00e48d15854e36f4,0x0040ab2d95f3db9f,0x002711c4ed9e899a)}, + {FIELD_LITERAL(0x0039343746531ebe,0x00c8509d835d429d,0x00e79eceff6b0018,0x004abfd31e8efce5,0x007bbfaaa1e20210,0x00e3be89c193e179,0x001c420f4c31d585,0x00f414a315bef5ae)}, + {FIELD_LITERAL(0x007c296a24990df8,0x00d5d07525a75588,0x00dd8e113e94b7e7,0x007bbc58febe0cc8,0x0029f51af9bfcad3,0x007e9311ec7ab6f3,0x009a884de1676343,0x0050d5f2dce84be9)}, + }}, {{ + {FIELD_LITERAL(0x005fa020cca2450a,0x00491c29db6416d8,0x0037cefe3f9f9a85,0x003d405230647066,0x0049e835f0fdbe89,0x00feb78ac1a0815c,0x00828e4b32dc9724,0x00db84f2dc8d6fd4)}, + {FIELD_LITERAL(0x0098cddc8b39549a,0x006da37e3b05d22c,0x00ce633cfd4eb3cb,0x00fda288ef526acd,0x0025338878c5d30a,0x00f34438c4e5a1b4,0x00584efea7c310f1,0x0041a551f1b660ad)}, + {FIELD_LITERAL(0x00d7f7a8fbd6437a,0x0062872413bf3753,0x00ad4bbcb43c584b,0x007fe49be601d7e3,0x0077c659789babf4,0x00eb45fcb06a741b,0x005ce244913f9708,0x0088426401736326)}, + }}, {{ + {FIELD_LITERAL(0x007bf562ca768d7c,0x006c1f3a174e387c,0x00f024b447fee939,0x007e7af75f01143f,0x003adb70b4eed89d,0x00e43544021ad79a,0x0091f7f7042011f6,0x0093c1a1ee3a0ddc)}, + {FIELD_LITERAL(0x00a0b68ec1eb72d2,0x002c03235c0d45a0,0x00553627323fe8c5,0x006186e94b17af94,0x00a9906196e29f14,0x0025b3aee6567733,0x007e0dd840080517,0x0018eb5801a4ba93)}, + {FIELD_LITERAL(0x00d7fe7017bf6a40,0x006e3f0624be0c42,0x00ffbba205358245,0x00f9fc2cf8194239,0x008d93b37bf15b4e,0x006ddf2e38be8e95,0x002b6e79bf5fcff9,0x00ab355da425e2de)}, + }}, {{ + {FIELD_LITERAL(0x00938f97e20be973,0x0099141a36aaf306,0x0057b0ca29e545a1,0x0085db571f9fbc13,0x008b333c554b4693,0x0043ab6ef3e241cb,0x0054fb20aa1e5c70,0x00be0ff852760adf)}, + {FIELD_LITERAL(0x003973d8938971d6,0x002aca26fa80c1f5,0x00108af1faa6b513,0x00daae275d7924e6,0x0053634ced721308,0x00d2355fe0bbd443,0x00357612b2d22095,0x00f9bb9dd4136cf3)}, + {FIELD_LITERAL(0x002bff12cf5e03a5,0x001bdb1fa8a19cf8,0x00c91c6793f84d39,0x00f869f1b2eba9af,0x0059bc547dc3236b,0x00d91611d6d38689,0x00e062daaa2c0214,0x00ed3c047cc2bc82)}, + }}, {{ + {FIELD_LITERAL(0x000050d70c32b31a,0x001939d576d437b3,0x00d709e598bf9fe6,0x00a885b34bd2ee9e,0x00dd4b5c08ab1a50,0x0091bebd50b55639,0x00cf79ff64acdbc6,0x006067a39d826336)}, + {FIELD_LITERAL(0x0062dd0fb31be374,0x00fcc96b84c8e727,0x003f64f1375e6ae3,0x0057d9b6dd1af004,0x00d6a167b1103c7b,0x00dd28f3180fb537,0x004ff27ad7167128,0x008934c33461f2ac)}, + {FIELD_LITERAL(0x0065b472b7900043,0x00ba7efd2ff1064b,0x000b67d6c4c3020f,0x0012d28469f4e46d,0x0031c32939703ec7,0x00b49f0bce133066,0x00f7e10416181d47,0x005c90f51867eecc)}, + }}, {{ + {FIELD_LITERAL(0x0051207abd179101,0x00fc2a5c20d9c5da,0x00fb9d5f2701b6df,0x002dd040fdea82b8,0x00f163b0738442ff,0x00d9736bd68855b8,0x00e0d8e93005e61c,0x00df5a40b3988570)}, + {FIELD_LITERAL(0x0006918f5dfce6dc,0x00d4bf1c793c57fb,0x0069a3f649435364,0x00e89a50e5b0cd6e,0x00b9f6a237e973af,0x006d4ed8b104e41d,0x00498946a3924cd2,0x00c136ec5ac9d4f7)}, + {FIELD_LITERAL(0x0011a9c290ac5336,0x002b9a2d4a6a6533,0x009a8a68c445d937,0x00361b27b07e5e5c,0x003c043b1755b974,0x00b7eb66cf1155ee,0x0077af5909eefff2,0x0098f609877cc806)}, + }}, {{ + {FIELD_LITERAL(0x00ab13af436bf8f4,0x000bcf0a0dac8574,0x00d50c864f705045,0x00c40e611debc842,0x0085010489bd5caa,0x007c5050acec026f,0x00f67d943c8da6d1,0x00de1da0278074c6)}, + {FIELD_LITERAL(0x00b373076597455f,0x00e83f1af53ac0f5,0x0041f63c01dc6840,0x0097dea19b0c6f4b,0x007f9d63b4c1572c,0x00e692d492d0f5f0,0x00cbcb392e83b4ad,0x0069c0f39ed9b1a8)}, + {FIELD_LITERAL(0x00861030012707c9,0x009fbbdc7fd4aafb,0x008f591d6b554822,0x00df08a41ea18ade,0x009d7d83e642abea,0x0098c71bda3b78ff,0x0022c89e7021f005,0x0044d29a3fe1e3c4)}, + }}, {{ + {FIELD_LITERAL(0x00e748cd7b5c52f2,0x00ea9df883f89cc3,0x0018970df156b6c7,0x00c5a46c2a33a847,0x00cbde395e32aa09,0x0072474ebb423140,0x00fb00053086a23d,0x001dafcfe22d4e1f)}, + {FIELD_LITERAL(0x00c903ee6d825540,0x00add6c4cf98473e,0x007636efed4227f1,0x00905124ae55e772,0x00e6b38fab12ed53,0x0045e132b863fe55,0x003974662edb366a,0x00b1787052be8208)}, + {FIELD_LITERAL(0x00a614b00d775c7c,0x00d7c78941cc7754,0x00422dd68b5dabc4,0x00a6110f0167d28b,0x00685a309c252886,0x00b439ffd5143660,0x003656e29ee7396f,0x00c7c9b9ed5ad854)}, + }}, {{ + {FIELD_LITERAL(0x0040f7e7c5b37bf2,0x0064e4dc81181bba,0x00a8767ae2a366b6,0x001496b4f90546f2,0x002a28493f860441,0x0021f59513049a3a,0x00852d369a8b7ee3,0x00dd2e7d8b7d30a9)}, + {FIELD_LITERAL(0x00006e34a35d9fbc,0x00eee4e48b2f019a,0x006b344743003a5f,0x00541d514f04a7e3,0x00e81f9ee7647455,0x005e2b916c438f81,0x00116f8137b7eff0,0x009bd3decc7039d1)}, + {FIELD_LITERAL(0x0005d226f434110d,0x00af8288b8ef21d5,0x004a7a52ef181c8c,0x00be0b781b4b06de,0x00e6e3627ded07e1,0x00e43aa342272b8b,0x00e86ab424577d84,0x00fb292c566e35bb)}, + }}, {{ + {FIELD_LITERAL(0x00334f5303ea1222,0x00dfb3dbeb0a5d3e,0x002940d9592335c1,0x00706a7a63e8938a,0x005a533558bc4caf,0x00558e33192022a9,0x00970d9faf74c133,0x002979fcb63493ca)}, + {FIELD_LITERAL(0x00e38abece3c82ab,0x005a51f18a2c7a86,0x009dafa2e86d592e,0x00495a62eb688678,0x00b79df74c0eb212,0x0023e8cc78b75982,0x005998cb91075e13,0x00735aa9ba61bc76)}, + {FIELD_LITERAL(0x00d9f7a82ddbe628,0x00a1fc782889ae0f,0x0071ffda12d14b66,0x0037cf4eca7fb3d5,0x00c80bc242c58808,0x0075bf8c2d08c863,0x008d41f31afc52a7,0x00197962ecf38741)}, + }}, {{ + {FIELD_LITERAL(0x006e9f475cccf2ee,0x00454b9cd506430c,0x00224a4fb79ee479,0x0062e3347ef0b5e2,0x0034fd2a3512232a,0x00b8b3cb0f457046,0x00eb20165daa38ec,0x00128eebc2d9c0f7)}, + {FIELD_LITERAL(0x00bfc5fa1e4ea21f,0x00c21d7b6bb892e6,0x00cf043f3acf0291,0x00c13f2f849b3c90,0x00d1a97ebef10891,0x0061e130a445e7fe,0x0019513fdedbf22b,0x001d60c813bff841)}, + {FIELD_LITERAL(0x0019561c7fcf0213,0x00e3dca6843ebd77,0x0068ea95b9ca920e,0x009bdfb70f253595,0x00c68f59186aa02a,0x005aee1cca1c3039,0x00ab79a8a937a1ce,0x00b9a0e549959e6f)}, + }}, {{ + {FIELD_LITERAL(0x00c79e0b6d97dfbd,0x00917c71fd2bc6e8,0x00db7529ccfb63d8,0x00be5be957f17866,0x00a9e11fdc2cdac1,0x007b91a8e1f44443,0x00a3065e4057d80f,0x004825f5b8d5f6d4)}, + {FIELD_LITERAL(0x003e4964fa8a8fc8,0x00f6a1cdbcf41689,0x00943cb18fe7fda7,0x00606dafbf34440a,0x005d37a86399c789,0x00e79a2a69417403,0x00fe34f7e68b8866,0x0011f448ed2df10e)}, + {FIELD_LITERAL(0x00f1f57efcc1fcc4,0x00513679117de154,0x002e5b5b7c86d8c3,0x009f6486561f9cfb,0x00169e74b0170cf7,0x00900205af4af696,0x006acfddb77853f3,0x00df184c90f31068)}, + }}, {{ + {FIELD_LITERAL(0x00b37396c3320791,0x00fc7b67175c5783,0x00c36d2cd73ecc38,0x0080ebcc0b328fc5,0x0043a5b22b35d35d,0x00466c9f1713c9da,0x0026ad346dcaa8da,0x007c684e701183a6)}, + {FIELD_LITERAL(0x00fd579ffb691713,0x00b76af4f81c412d,0x00f239de96110f82,0x00e965fb437f0306,0x00ca7e9436900921,0x00e487f1325fa24a,0x00633907de476380,0x00721c62ac5b8ea0)}, + {FIELD_LITERAL(0x00c0d54e542eb4f9,0x004ed657171c8dcf,0x00b743a4f7c2a39b,0x00fd9f93ed6cc567,0x00307fae3113e58b,0x0058aa577c93c319,0x00d254556f35b346,0x00491aada2203f0d)}, + }}, {{ + {FIELD_LITERAL(0x00dff3103786ff34,0x000144553b1f20c3,0x0095613baeb930e4,0x00098058275ea5d4,0x007cd1402b046756,0x0074d74e4d58aee3,0x005f93fc343ff69b,0x00873df17296b3b0)}, + {FIELD_LITERAL(0x00c4a1fb48635413,0x00b5dd54423ad59f,0x009ff5d53fd24a88,0x003c98d267fc06a7,0x002db7cb20013641,0x00bd1d6716e191f2,0x006dbc8b29094241,0x0044bbf233dafa2c)}, + {FIELD_LITERAL(0x0055838d41f531e6,0x00bf6a2dd03c81b2,0x005827a061c4839e,0x0000de2cbb36aac3,0x002efa29d9717478,0x00f9e928cc8a77ba,0x00c134b458def9ef,0x00958a182223fc48)}, + }}, {{ + {FIELD_LITERAL(0x000a9ee23c06881f,0x002c727d3d871945,0x00f47d971512d24a,0x00671e816f9ef31a,0x00883af2cfaad673,0x00601f98583d6c9a,0x00b435f5adc79655,0x00ad87b71c04bff2)}, + {FIELD_LITERAL(0x007860d99db787cf,0x00fda8983018f4a8,0x008c8866bac4743c,0x00ef471f84c82a3f,0x00abea5976d3b8e7,0x00714882896cd015,0x00b49fae584ddac5,0x008e33a1a0b69c81)}, + {FIELD_LITERAL(0x007b6ee2c9e8a9ec,0x002455dbbd89d622,0x006490cf4eaab038,0x00d925f6c3081561,0x00153b3047de7382,0x003b421f8bdceb6f,0x00761a4a5049da78,0x00980348c5202433)}, + }}, {{ + {FIELD_LITERAL(0x007f8a43da97dd5c,0x00058539c800fc7b,0x0040f3cf5a28414a,0x00d68dd0d95283d6,0x004adce9da90146e,0x00befa41c7d4f908,0x007603bc2e3c3060,0x00bdf360ab3545db)}, + {FIELD_LITERAL(0x00eebfd4e2312cc3,0x00474b2564e4fc8c,0x003303ef14b1da9b,0x003c93e0e66beb1d,0x0013619b0566925a,0x008817c24d901bf3,0x00b62bd8898d218b,0x0075a7716f1e88a2)}, + {FIELD_LITERAL(0x0009218da1e6890f,0x0026907f5fd02575,0x004dabed5f19d605,0x003abf181870249d,0x00b52fd048cc92c4,0x00b6dd51e415a5c5,0x00d9eb82bd2b4014,0x002c865a43b46b43)}, + }}, {{ + {FIELD_LITERAL(0x0070047189452f4c,0x00f7ad12e1ce78d5,0x00af1ba51ec44a8b,0x005f39f63e667cd6,0x00058eac4648425e,0x00d7fdab42bea03b,0x0028576a5688de15,0x00af973209e77c10)}, + {FIELD_LITERAL(0x00c338b915d8fef0,0x00a893292045c39a,0x0028ab4f2eba6887,0x0060743cb519fd61,0x0006213964093ac0,0x007c0b7a43f6266d,0x008e3557c4fa5bda,0x002da976de7b8d9d)}, + {FIELD_LITERAL(0x0048729f8a8b6dcd,0x00fe23b85cc4d323,0x00e7384d16e4db0e,0x004a423970678942,0x00ec0b763345d4ba,0x00c477b9f99ed721,0x00c29dad3777b230,0x001c517b466f7df6)}, + }}, {{ + {FIELD_LITERAL(0x006366c380f7b574,0x001c7d1f09ff0438,0x003e20a7301f5b22,0x00d3efb1916d28f6,0x0049f4f81060ce83,0x00c69d91ea43ced1,0x002b6f3e5cd269ed,0x005b0fb22ce9ec65)}, + {FIELD_LITERAL(0x00aa2261022d883f,0x00ebcca4548010ac,0x002528512e28a437,0x0070ca7676b66082,0x0084bda170f7c6d3,0x00581b4747c9b8bb,0x005c96a01061c7e2,0x00fb7c4a362b5273)}, + {FIELD_LITERAL(0x00c30020eb512d02,0x0060f288283a4d26,0x00b7ed13becde260,0x0075ebb74220f6e9,0x00701079fcfe8a1f,0x001c28fcdff58938,0x002e4544b8f4df6b,0x0060c5bc4f1a7d73)}, + }}, {{ + {FIELD_LITERAL(0x00ae307cf069f701,0x005859f222dd618b,0x00212d6c46ec0b0d,0x00a0fe4642afb62d,0x00420d8e4a0a8903,0x00a80ff639bdf7b0,0x0019bee1490b5d8e,0x007439e4b9c27a86)}, + {FIELD_LITERAL(0x00a94700032a093f,0x0076e96c225216e7,0x00a63a4316e45f91,0x007d8bbb4645d3b2,0x00340a6ff22793eb,0x006f935d4572aeb7,0x00b1fb69f00afa28,0x009e8f3423161ed3)}, + {FIELD_LITERAL(0x009ef49c6b5ced17,0x00a555e6269e9f0a,0x007e6f1d79ec73b5,0x009ac78695a32ac4,0x0001d77fbbcd5682,0x008cea1fee0aaeed,0x00f42bea82a53462,0x002e46ab96cafcc9)}, + }}, {{ + {FIELD_LITERAL(0x0051cfcc5885377a,0x00dce566cb1803ca,0x00430c7643f2c7d4,0x00dce1a1337bdcc0,0x0010d5bd7283c128,0x003b1b547f9b46fe,0x000f245e37e770ab,0x007b72511f022b37)}, + {FIELD_LITERAL(0x0060db815bc4786c,0x006fab25beedc434,0x00c610d06084797c,0x000c48f08537bec0,0x0031aba51c5b93da,0x007968fa6e01f347,0x0030070da52840c6,0x00c043c225a4837f)}, + {FIELD_LITERAL(0x001bcfd00649ee93,0x006dceb47e2a0fd5,0x00f2cebda0cf8fd0,0x00b6b9d9d1fbdec3,0x00815262e6490611,0x00ef7f5ce3176760,0x00e49cd0c998d58b,0x005fc6cc269ba57c)}, + }}, {{ + {FIELD_LITERAL(0x008940211aa0d633,0x00addae28136571d,0x00d68fdbba20d673,0x003bc6129bc9e21a,0x000346cf184ebe9a,0x0068774d741ebc7f,0x0019d5e9e6966557,0x0003cbd7f981b651)}, + {FIELD_LITERAL(0x004a2902926f8d3f,0x00ad79b42637ab75,0x0088f60b90f2d4e8,0x0030f54ef0e398c4,0x00021dc9bf99681e,0x007ebf66fde74ee3,0x004ade654386e9a4,0x00e7485066be4c27)}, + {FIELD_LITERAL(0x00445f1263983be0,0x004cf371dda45e6a,0x00744a89d5a310e7,0x001f20ce4f904833,0x00e746edebe66e29,0x000912ab1f6c153d,0x00f61d77d9b2444c,0x0001499cd6647610)}, + }} + } +}; +const struct curve448_precomputed_s *curve448_precomputed_base + = &curve448_precomputed_base_table; + +static const niels_t curve448_wnaf_base_table[32] = { + {{ + {FIELD_LITERAL(0x00303cda6feea532,0x00860f1d5a3850e4,0x00226b9fa4728ccd,0x00e822938a0a0c0c,0x00263a61c9ea9216,0x001204029321b828,0x006a468360983c65,0x0002846f0a782143)}, + {FIELD_LITERAL(0x00303cda6feea532,0x00860f1d5a3850e4,0x00226b9fa4728ccd,0x006822938a0a0c0c,0x00263a61c9ea9215,0x001204029321b828,0x006a468360983c65,0x0082846f0a782143)}, + {FIELD_LITERAL(0x00ef8e22b275198d,0x00b0eb141a0b0e8b,0x001f6789da3cb38c,0x006d2ff8ed39073e,0x00610bdb69a167f3,0x00571f306c9689b4,0x00f557e6f84b2df8,0x002affd38b2c86db)}, + }}, {{ + {FIELD_LITERAL(0x00cea0fc8d2e88b5,0x00821612d69f1862,0x0074c283b3e67522,0x005a195ba05a876d,0x000cddfe557feea4,0x008046c795bcc5e5,0x00540969f4d6e119,0x00d27f96d6b143d5)}, + {FIELD_LITERAL(0x000c3b1019d474e8,0x00e19533e4952284,0x00cc9810ba7c920a,0x00f103d2785945ac,0x00bfa5696cc69b34,0x00a8d3d51e9ca839,0x005623cb459586b9,0x00eae7ce1cd52e9e)}, + {FIELD_LITERAL(0x0005a178751dd7d8,0x002cc3844c69c42f,0x00acbfe5efe10539,0x009c20f43431a65a,0x008435d96374a7b3,0x009ee57566877bd3,0x0044691725ed4757,0x001e87bb2fe2c6b2)}, + }}, {{ + {FIELD_LITERAL(0x000cedc4debf7a04,0x002ffa45000470ac,0x002e9f9678201915,0x0017da1208c4fe72,0x007d558cc7d656cb,0x0037a827287cf289,0x00142472d3441819,0x009c21f166cf8dd1)}, + {FIELD_LITERAL(0x003ef83af164b2f2,0x000949a5a0525d0d,0x00f4498186cac051,0x00e77ac09ef126d2,0x0073ae0b2c9296e9,0x001c163f6922e3ed,0x0062946159321bea,0x00cfb79b22990b39)}, + {FIELD_LITERAL(0x00b001431ca9e654,0x002d7e5eabcc9a3a,0x0052e8114c2f6747,0x0079ac4f94487f92,0x00bffd919b5d749c,0x00261f92ad15e620,0x00718397b7a97895,0x00c1443e6ebbc0c4)}, + }}, {{ + {FIELD_LITERAL(0x00eacd90c1e0a049,0x008977935b149fbe,0x0004cb9ba11c93dc,0x009fbd5b3470844d,0x004bc18c9bfc22cf,0x0057679a991839f3,0x00ef15b76fb4092e,0x0074a5173a225041)}, + {FIELD_LITERAL(0x003f5f9d7ec4777b,0x00ab2e733c919c94,0x001bb6c035245ae5,0x00a325a49a883630,0x0033e9a9ea3cea2f,0x00e442a1eaa0e844,0x00b2116d5b0e71b8,0x00c16abed6d64047)}, + {FIELD_LITERAL(0x00c560b5ed051165,0x001945adc5d65094,0x00e221865710f910,0x00cc12bc9e9b8ceb,0x004faa9518914e35,0x0017476d89d42f6d,0x00b8f637c8fa1c8b,0x0088c7d2790864b8)}, + }}, {{ + {FIELD_LITERAL(0x00ef7eafc1c69be6,0x0085d3855778fbea,0x002c8d5b450cb6f5,0x004e77de5e1e7fec,0x0047c057893abded,0x001b430b85d51e16,0x00965c7b45640c3c,0x00487b2bb1162b97)}, + {FIELD_LITERAL(0x0099c73a311beec2,0x00a3eff38d8912ad,0x002efa9d1d7e8972,0x00f717ae1e14d126,0x002833f795850c8b,0x0066c12ad71486bd,0x00ae9889da4820eb,0x00d6044309555c08)}, + {FIELD_LITERAL(0x004b1c5283d15e41,0x00669d8ea308ff75,0x0004390233f762a1,0x00e1d67b83cb6cec,0x003eebaa964c78b1,0x006b0aff965eb664,0x00b313d4470bdc37,0x008814ffcb3cb9d8)}, + }}, {{ + {FIELD_LITERAL(0x009724b8ce68db70,0x007678b5ed006f3d,0x00bdf4b89c0abd73,0x00299748e04c7c6d,0x00ddd86492c3c977,0x00c5a7febfa30a99,0x00ed84715b4b02bb,0x00319568adf70486)}, + {FIELD_LITERAL(0x0070ff2d864de5bb,0x005a37eeb637ee95,0x0033741c258de160,0x00e6ca5cb1988f46,0x001ceabd92a24661,0x0030957bd500fe40,0x001c3362afe912c5,0x005187889f678bd2)}, + {FIELD_LITERAL(0x0086835fc62bbdc7,0x009c3516ca4910a1,0x00956c71f8d00783,0x0095c78fcf63235f,0x00fc7ff6ba05c222,0x00cdd8b3f8d74a52,0x00ac5ae16de8256e,0x00e9d4be8ed48624)}, + }}, {{ + {FIELD_LITERAL(0x00c0ce11405df2d8,0x004e3f37b293d7b6,0x002410172e1ac6db,0x00b8dbff4bf8143d,0x003a7b409d56eb66,0x003e0f6a0dfef9af,0x0081c4e4d3645be1,0x00ce76076b127623)}, + {FIELD_LITERAL(0x00f6ee0f98974239,0x0042d89af07d3a4f,0x00846b7fe84346b5,0x006a21fc6a8d39a1,0x00ac8bc2541ff2d9,0x006d4e2a77732732,0x009a39b694cc3f2f,0x0085c0aa2a404c8f)}, + {FIELD_LITERAL(0x00b261101a218548,0x00c1cae96424277b,0x00869da0a77dd268,0x00bc0b09f8ec83ea,0x00d61027f8e82ba9,0x00aa4c85999dce67,0x00eac3132b9f3fe1,0x00fb9b0cf1c695d2)}, + }}, {{ + {FIELD_LITERAL(0x0043079295512f0d,0x0046a009861758e0,0x003ee2842a807378,0x0034cc9d1298e4fa,0x009744eb4d31b3ee,0x00afacec96650cd0,0x00ac891b313761ae,0x00e864d6d26e708a)}, + {FIELD_LITERAL(0x00a84d7c8a23b491,0x0088e19aa868b27f,0x0005986d43e78ce9,0x00f28012f0606d28,0x0017ded7e10249b3,0x005ed4084b23af9b,0x00b9b0a940564472,0x00ad9056cceeb1f4)}, + {FIELD_LITERAL(0x00db91b357fe755e,0x00a1aa544b15359c,0x00af4931a0195574,0x007686124fe11aef,0x00d1ead3c7b9ef7e,0x00aaf5fc580f8c15,0x00e727be147ee1ec,0x003c61c1e1577b86)}, + }}, {{ + {FIELD_LITERAL(0x009d3fca983220cf,0x00cd11acbc853dc4,0x0017590409d27f1d,0x00d2176698082802,0x00fa01251b2838c8,0x00dd297a0d9b51c6,0x00d76c92c045820a,0x00534bc7c46c9033)}, + {FIELD_LITERAL(0x0080ed9bc9b07338,0x00fceac7745d2652,0x008a9d55f5f2cc69,0x0096ce72df301ac5,0x00f53232e7974d87,0x0071728c7ae73947,0x0090507602570778,0x00cb81cfd883b1b2)}, + {FIELD_LITERAL(0x005011aadea373da,0x003a8578ec896034,0x00f20a6535fa6d71,0x005152d31e5a87cf,0x002bac1c8e68ca31,0x00b0e323db4c1381,0x00f1d596b7d5ae25,0x00eae458097cb4e0)}, + }}, {{ + {FIELD_LITERAL(0x00920ac80f9b0d21,0x00f80f7f73401246,0x0086d37849b557d6,0x0002bd4b317b752e,0x00b26463993a42bb,0x002070422a73b129,0x00341acaa0380cb3,0x00541914dd66a1b2)}, + {FIELD_LITERAL(0x00c1513cd66abe8c,0x000139e01118944d,0x0064abbcb8080bbb,0x00b3b08202473142,0x00c629ef25da2403,0x00f0aec3310d9b7f,0x0050b2227472d8cd,0x00f6c8a922d41fb4)}, + {FIELD_LITERAL(0x001075ccf26b7b1f,0x00bb6bb213170433,0x00e9491ad262da79,0x009ef4f48d2d384c,0x008992770766f09d,0x001584396b6b1101,0x00af3f8676c9feef,0x0024603c40269118)}, + }}, {{ + {FIELD_LITERAL(0x009dd7b31319527c,0x001e7ac948d873a9,0x00fa54b46ef9673a,0x0066efb8d5b02fe6,0x00754b1d3928aeae,0x0004262ac72a6f6b,0x0079b7d49a6eb026,0x003126a753540102)}, + {FIELD_LITERAL(0x009666e24f693947,0x00f714311269d45f,0x0010ffac1d0c851c,0x0066e80c37363497,0x00f1f4ad010c60b0,0x0015c87408470ff7,0x00651d5e9c7766a4,0x008138819d7116de)}, + {FIELD_LITERAL(0x003934b11c57253b,0x00ef308edf21f46e,0x00e54e99c7a16198,0x0080d57135764e63,0x00751c27b946bc24,0x00dd389ce4e9e129,0x00a1a2bfd1cd84dc,0x002fae73e5149b32)}, + }}, {{ + {FIELD_LITERAL(0x00911657dffb4cdd,0x00c100b7cc553d06,0x00449d075ec467cc,0x007062100bc64e70,0x0043cf86f7bd21e7,0x00f401dc4b797dea,0x005224afb2f62e65,0x00d1ede3fb5a42be)}, + {FIELD_LITERAL(0x00f2ba36a41aa144,0x00a0c22d946ee18f,0x008aae8ef9a14f99,0x00eef4d79b19bb36,0x008e75ce3d27b1fc,0x00a65daa03b29a27,0x00d9cc83684eb145,0x009e1ed80cc2ed74)}, + {FIELD_LITERAL(0x00bed953d1997988,0x00b93ed175a24128,0x00871c5963fb6365,0x00ca2df20014a787,0x00f5d9c1d0b34322,0x00f6f5942818db0a,0x004cc091f49c9906,0x00e8a188a60bff9f)}, + }}, {{ + {FIELD_LITERAL(0x0032c7762032fae8,0x00e4087232e0bc21,0x00f767344b6e8d85,0x00bbf369b76c2aa2,0x008a1f46c6e1570c,0x001368cd9780369f,0x007359a39d079430,0x0003646512921434)}, + {FIELD_LITERAL(0x007c4b47ca7c73e7,0x005396221039734b,0x008b64ddf0e45d7e,0x00bfad5af285e6c2,0x008ec711c5b1a1a8,0x00cf663301237f98,0x00917ee3f1655126,0x004152f337efedd8)}, + {FIELD_LITERAL(0x0007c7edc9305daa,0x000a6664f273701c,0x00f6e78795e200b1,0x005d05b9ecd2473e,0x0014f5f17c865786,0x00c7fd2d166fa995,0x004939a2d8eb80e0,0x002244ba0942c199)}, + }}, {{ + {FIELD_LITERAL(0x00321e767f0262cf,0x002e57d776caf68e,0x00bf2c94814f0437,0x00c339196acd622f,0x001db4cce71e2770,0x001ded5ddba6eee2,0x0078608ab1554c8d,0x00067fe0ab76365b)}, + {FIELD_LITERAL(0x00f09758e11e3985,0x00169efdbd64fad3,0x00e8889b7d6dacd6,0x0035cdd58ea88209,0x00bcda47586d7f49,0x003cdddcb2879088,0x0016da70187e954b,0x009556ea2e92aacd)}, + {FIELD_LITERAL(0x008cab16bd1ff897,0x00b389972cdf753f,0x00ea8ed1e46dfdc0,0x004fe7ef94c589f4,0x002b8ae9b805ecf3,0x0025c08d892874a5,0x0023938e98d44c4c,0x00f759134cabf69c)}, + }}, {{ + {FIELD_LITERAL(0x006c2a84678e4b3b,0x007a194aacd1868f,0x00ed0225af424761,0x00da0a6f293c64b8,0x001062ac5c6a7a18,0x0030f5775a8aeef4,0x0002acaad76b7af0,0x00410b8fd63a579f)}, + {FIELD_LITERAL(0x001ec59db3d9590e,0x001e9e3f1c3f182d,0x0045a9c3ec2cab14,0x0008198572aeb673,0x00773b74068bd167,0x0012535eaa395434,0x0044dba9e3bbb74a,0x002fba4d3c74bd0e)}, + {FIELD_LITERAL(0x0042bf08fe66922c,0x003318b8fbb49e8c,0x00d75946004aa14c,0x00f601586b42bf1c,0x00c74cf1d912fe66,0x00abcb36974b30ad,0x007eb78720c9d2b8,0x009f54ab7bd4df85)}, + }}, {{ + {FIELD_LITERAL(0x00db9fc948f73826,0x00fa8b3746ed8ee9,0x00132cb65aafbeb2,0x00c36ff3fe7925b8,0x00837daed353d2fe,0x00ec661be0667cf4,0x005beb8ed2e90204,0x00d77dd69e564967)}, + {FIELD_LITERAL(0x0042e6268b861751,0x0008dd0469500c16,0x00b51b57c338a3fd,0x00cc4497d85cff6b,0x002f13d6b57c34a4,0x0083652eaf301105,0x00cc344294cc93a8,0x0060f4d02810e270)}, + {FIELD_LITERAL(0x00a8954363cd518b,0x00ad171124bccb7b,0x0065f46a4adaae00,0x001b1a5b2a96e500,0x0043fe24f8233285,0x0066996d8ae1f2c3,0x00c530f3264169f9,0x00c0f92d07cf6a57)}, + }}, {{ + {FIELD_LITERAL(0x0036a55c6815d943,0x008c8d1def993db3,0x002e0e1e8ff7318f,0x00d883a4b92db00a,0x002f5e781ae33906,0x001a72adb235c06d,0x00f2e59e736e9caa,0x001a4b58e3031914)}, + {FIELD_LITERAL(0x00d73bfae5e00844,0x00bf459766fb5f52,0x0061b4f5a5313cde,0x004392d4c3b95514,0x000d3551b1077523,0x0000998840ee5d71,0x006de6e340448b7b,0x00251aa504875d6e)}, + {FIELD_LITERAL(0x003bf343427ac342,0x00adc0a78642b8c5,0x0003b893175a8314,0x0061a34ade5703bc,0x00ea3ea8bb71d632,0x00be0df9a1f198c2,0x0046dd8e7c1635fb,0x00f1523fdd25d5e5)}, + }}, {{ + {FIELD_LITERAL(0x00633f63fc9dd406,0x00e713ff80e04a43,0x0060c6e970f2d621,0x00a57cd7f0df1891,0x00f2406a550650bb,0x00b064290efdc684,0x001eab0144d17916,0x00cd15f863c293ab)}, + {FIELD_LITERAL(0x0029cec55273f70d,0x007044ee275c6340,0x0040f637a93015e2,0x00338bb78db5aae9,0x001491b2a6132147,0x00a125d6cfe6bde3,0x005f7ac561ba8669,0x001d5eaea3fbaacf)}, + {FIELD_LITERAL(0x00054e9635e3be31,0x000e43f31e2872be,0x00d05b1c9e339841,0x006fac50bd81fd98,0x00cdc7852eaebb09,0x004ff519b061991b,0x009099e8107d4c85,0x00273e24c36a4a61)}, + }}, {{ + {FIELD_LITERAL(0x00070b4441ef2c46,0x00efa5b02801a109,0x00bf0b8c3ee64adf,0x008a67e0b3452e98,0x001916b1f2fa7a74,0x00d781a78ff6cdc3,0x008682ce57e5c919,0x00cc1109dd210da3)}, + {FIELD_LITERAL(0x00cae8aaff388663,0x005e983a35dda1c7,0x007ab1030d8e37f4,0x00e48940f5d032fe,0x006a36f9ef30b331,0x009be6f03958c757,0x0086231ceba91400,0x008bd0f7b823e7aa)}, + {FIELD_LITERAL(0x00cf881ebef5a45a,0x004ebea78e7c6f2c,0x0090da9209cf26a0,0x00de2b2e4c775b84,0x0071d6031c3c15ae,0x00d9e927ef177d70,0x00894ee8c23896fd,0x00e3b3b401e41aad)}, + }}, {{ + {FIELD_LITERAL(0x00204fef26864170,0x00819269c5dee0f8,0x00bfb4713ec97966,0x0026339a6f34df78,0x001f26e64c761dc2,0x00effe3af313cb60,0x00e17b70138f601b,0x00f16e1ccd9ede5e)}, + {FIELD_LITERAL(0x005d9a8353fdb2db,0x0055cc2048c698f0,0x00f6c4ac89657218,0x00525034d73faeb2,0x00435776fbda3c7d,0x0070ea5312323cbc,0x007a105d44d069fb,0x006dbc8d6dc786aa)}, + {FIELD_LITERAL(0x0017cff19cd394ec,0x00fef7b810922587,0x00e6483970dff548,0x00ddf36ad6874264,0x00e61778523fcce2,0x0093a66c0c93b24a,0x00fd367114db7f86,0x007652d7ddce26dd)}, + }}, {{ + {FIELD_LITERAL(0x00d92ced7ba12843,0x00aea9c7771e86e7,0x0046639693354f7b,0x00a628dbb6a80c47,0x003a0b0507372953,0x00421113ab45c0d9,0x00e545f08362ab7a,0x0028ce087b4d6d96)}, + {FIELD_LITERAL(0x00a67ee7cf9f99eb,0x005713b275f2ff68,0x00f1d536a841513d,0x00823b59b024712e,0x009c46b9d0d38cec,0x00cdb1595aa2d7d4,0x008375b3423d9af8,0x000ab0b516d978f7)}, + {FIELD_LITERAL(0x00428dcb3c510b0f,0x00585607ea24bb4e,0x003736bf1603687a,0x00c47e568c4fe3c7,0x003cd00282848605,0x0043a487c3b91939,0x004ffc04e1095a06,0x00a4c989a3d4b918)}, + }}, {{ + {FIELD_LITERAL(0x00a8778d0e429f7a,0x004c02b059105a68,0x0016653b609da3ff,0x00d5107bd1a12d27,0x00b4708f9a771cab,0x00bb63b662033f69,0x0072f322240e7215,0x0019445b59c69222)}, + {FIELD_LITERAL(0x00cf4f6069a658e6,0x0053ca52859436a6,0x0064b994d7e3e117,0x00cb469b9a07f534,0x00cfb68f399e9d47,0x00f0dcb8dac1c6e7,0x00f2ab67f538b3a5,0x0055544f178ab975)}, + {FIELD_LITERAL(0x0099b7a2685d538c,0x00e2f1897b7c0018,0x003adac8ce48dae3,0x00089276d5c50c0c,0x00172fca07ad6717,0x00cb1a72f54069e5,0x004ee42f133545b3,0x00785f8651362f16)}, + }}, {{ + {FIELD_LITERAL(0x0049cbac38509e11,0x0015234505d42cdf,0x00794fb0b5840f1c,0x00496437344045a5,0x0031b6d944e4f9b0,0x00b207318ac1f5d8,0x0000c840da7f5c5d,0x00526f373a5c8814)}, + {FIELD_LITERAL(0x002c7b7742d1dfd9,0x002cabeb18623c01,0x00055f5e3e044446,0x006c20f3b4ef54ba,0x00c600141ec6b35f,0x00354f437f1a32a3,0x00bac4624a3520f9,0x00c483f734a90691)}, + {FIELD_LITERAL(0x0053a737d422918d,0x00f7fca1d8758625,0x00c360336dadb04c,0x00f38e3d9158a1b8,0x0069ce3b418e84c6,0x005d1697eca16ead,0x00f8bd6a35ece13d,0x007885dfc2b5afea)}, + }}, {{ + {FIELD_LITERAL(0x00c3617ae260776c,0x00b20dc3e96922d7,0x00a1a7802246706a,0x00ca6505a5240244,0x002246b62d919782,0x001439102d7aa9b3,0x00e8af1139e6422c,0x00c888d1b52f2b05)}, + {FIELD_LITERAL(0x005b67690ffd41d9,0x005294f28df516f9,0x00a879272412fcb9,0x00098b629a6d1c8d,0x00fabd3c8050865a,0x00cd7e5b0a3879c5,0x00153238210f3423,0x00357cac101e9f42)}, + {FIELD_LITERAL(0x008917b454444fb7,0x00f59247c97e441b,0x00a6200a6815152d,0x0009a4228601d254,0x001c0360559bd374,0x007563362039cb36,0x00bd75b48d74e32b,0x0017f515ac3499e8)}, + }}, {{ + {FIELD_LITERAL(0x001532a7ffe41c5a,0x00eb1edce358d6bf,0x00ddbacc7b678a7b,0x008a7b70f3c841a3,0x00f1923bf27d3f4c,0x000b2713ed8f7873,0x00aaf67e29047902,0x0044994a70b3976d)}, + {FIELD_LITERAL(0x00d54e802082d42c,0x00a55aa0dce7cc6c,0x006477b96073f146,0x0082efe4ceb43594,0x00a922bcba026845,0x0077f19d1ab75182,0x00c2bb2737846e59,0x0004d7eec791dd33)}, + {FIELD_LITERAL(0x0044588d1a81d680,0x00b0a9097208e4f8,0x00212605350dc57e,0x0028717cd2871123,0x00fb083c100fd979,0x0045a056ce063fdf,0x00a5d604b4dd6a41,0x001dabc08ba4e236)}, + }}, {{ + {FIELD_LITERAL(0x00c4887198d7a7fa,0x00244f98fb45784a,0x0045911e15a15d01,0x001d323d374c0966,0x00967c3915196562,0x0039373abd2f3c67,0x000d2c5614312423,0x0041cf2215442ce3)}, + {FIELD_LITERAL(0x008ede889ada7f06,0x001611e91de2e135,0x00fdb9a458a471b9,0x00563484e03710d1,0x0031cc81925e3070,0x0062c97b3af80005,0x00fa733eea28edeb,0x00e82457e1ebbc88)}, + {FIELD_LITERAL(0x006a0df5fe9b6f59,0x00a0d4ff46040d92,0x004a7cedb6f93250,0x00d1df8855b8c357,0x00e73a46086fd058,0x0048fb0add6dfe59,0x001e03a28f1b4e3d,0x00a871c993308d76)}, + }}, {{ + {FIELD_LITERAL(0x0030dbb2d1766ec8,0x00586c0ad138555e,0x00d1a34f9e91c77c,0x0063408ad0e89014,0x00d61231b05f6f5b,0x0009abf569f5fd8a,0x00aec67a110f1c43,0x0031d1a790938dd7)}, + {FIELD_LITERAL(0x006cded841e2a862,0x00198d60af0ab6fb,0x0018f09db809e750,0x004e6ac676016263,0x00eafcd1620969cb,0x002c9784ca34917d,0x0054f00079796de7,0x00d9fab5c5972204)}, + {FIELD_LITERAL(0x004bd0fee2438a83,0x00b571e62b0f83bd,0x0059287d7ce74800,0x00fb3631b645c3f0,0x00a018e977f78494,0x0091e27065c27b12,0x007696c1817165e0,0x008c40be7c45ba3a)}, + }}, {{ + {FIELD_LITERAL(0x00a0f326327cb684,0x001c7d0f672680ff,0x008c1c81ffb112d1,0x00f8f801674eddc8,0x00e926d5d48c2a9d,0x005bd6d954c6fe9a,0x004c6b24b4e33703,0x00d05eb5c09105cc)}, + {FIELD_LITERAL(0x00d61731caacf2cf,0x002df0c7609e01c5,0x00306172208b1e2b,0x00b413fe4fb2b686,0x00826d360902a221,0x003f8d056e67e7f7,0x0065025b0175e989,0x00369add117865eb)}, + {FIELD_LITERAL(0x00aaf895aec2fa11,0x000f892bc313eb52,0x005b1c794dad050b,0x003f8ec4864cec14,0x00af81058d0b90e5,0x00ebe43e183997bb,0x00a9d610f9f3e615,0x007acd8eec2e88d3)}, + }}, {{ + {FIELD_LITERAL(0x0049b2fab13812a3,0x00846db32cd60431,0x000177fa578c8d6c,0x00047d0e2ad4bc51,0x00b158ba38d1e588,0x006a45daad79e3f3,0x000997b93cab887b,0x00c47ea42fa23dc3)}, + {FIELD_LITERAL(0x0012b6fef7aeb1ca,0x009412768194b6a7,0x00ff0d351f23ab93,0x007e8a14c1aff71b,0x006c1c0170c512bc,0x0016243ea02ab2e5,0x007bb6865b303f3e,0x0015ce6b29b159f4)}, + {FIELD_LITERAL(0x009961cd02e68108,0x00e2035d3a1d0836,0x005d51f69b5e1a1d,0x004bccb4ea36edcd,0x0069be6a7aeef268,0x0063f4dd9de8d5a7,0x006283783092ca35,0x0075a31af2c35409)}, + }}, {{ + {FIELD_LITERAL(0x00c412365162e8cf,0x00012283fb34388a,0x003e6543babf39e2,0x00eead6b3a804978,0x0099c0314e8b326f,0x00e98e0a8d477a4f,0x00d2eb96b127a687,0x00ed8d7df87571bb)}, + {FIELD_LITERAL(0x00777463e308cacf,0x00c8acb93950132d,0x00ebddbf4ca48b2c,0x0026ad7ca0795a0a,0x00f99a3d9a715064,0x000d60bcf9d4dfcc,0x005e65a73a437a06,0x0019d536a8db56c8)}, + {FIELD_LITERAL(0x00192d7dd558d135,0x0027cd6a8323ffa7,0x00239f1a412dc1e7,0x0046b4b3be74fc5c,0x0020c47a2bef5bce,0x00aa17e48f43862b,0x00f7e26c96342e5f,0x0008011c530f39a9)}, + }}, {{ + {FIELD_LITERAL(0x00aad4ac569bf0f1,0x00a67adc90b27740,0x0048551369a5751a,0x0031252584a3306a,0x0084e15df770e6fc,0x00d7bba1c74b5805,0x00a80ef223af1012,0x0089c85ceb843a34)}, + {FIELD_LITERAL(0x00c4545be4a54004,0x0099e11f60357e6c,0x001f3936d19515a6,0x007793df84341a6e,0x0051061886717ffa,0x00e9b0a660b28f85,0x0044ea685892de0d,0x000257d2a1fda9d9)}, + {FIELD_LITERAL(0x007e8b01b24ac8a8,0x006cf3b0b5ca1337,0x00f1607d3e36a570,0x0039b7fab82991a1,0x00231777065840c5,0x00998e5afdd346f9,0x00b7dc3e64acc85f,0x00baacc748013ad6)}, + }}, {{ + {FIELD_LITERAL(0x008ea6a4177580bf,0x005fa1953e3f0378,0x005fe409ac74d614,0x00452327f477e047,0x00a4018507fb6073,0x007b6e71951caac8,0x0012b42ab8a6ce91,0x0080eca677294ab7)}, + {FIELD_LITERAL(0x00a53edc023ba69b,0x00c6afa83ddde2e8,0x00c3f638b307b14e,0x004a357a64414062,0x00e4d94d8b582dc9,0x001739caf71695b7,0x0012431b2ae28de1,0x003b6bc98682907c)}, + {FIELD_LITERAL(0x008a9a93be1f99d6,0x0079fa627cc699c8,0x00b0cfb134ba84c8,0x001c4b778249419a,0x00df4ab3d9c44f40,0x009f596e6c1a9e3c,0x001979c0df237316,0x00501e953a919b87)}, + }} +}; +const niels_t *curve448_wnaf_base = curve448_wnaf_base_table; diff --git a/crypto/ec/curve448/curve448utils.h b/crypto/ec/curve448/curve448utils.h new file mode 100644 index 00000000..9bf83799 --- /dev/null +++ b/crypto/ec/curve448/curve448utils.h @@ -0,0 +1,78 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_CURVE448UTILS_H +# define HEADER_CURVE448UTILS_H + +# include + +/* + * Internal word types. Somewhat tricky. This could be decided separately per + * platform. However, the structs do need to be all the same size and + * alignment on a given platform to support dynamic linking, since even if you + * header was built with eg arch_neon, you might end up linking a library built + * with arch_arm32. + */ +# ifndef C448_WORD_BITS +# if (defined(__SIZEOF_INT128__) && (__SIZEOF_INT128__ == 16)) \ + && !defined(__sparc__) +# define C448_WORD_BITS 64 /* The number of bits in a word */ +# else +# define C448_WORD_BITS 32 /* The number of bits in a word */ +# endif +# endif + +# if C448_WORD_BITS == 64 +/* Word size for internal computations */ +typedef uint64_t c448_word_t; +/* Signed word size for internal computations */ +typedef int64_t c448_sword_t; +/* "Boolean" type, will be set to all-zero or all-one (i.e. -1u) */ +typedef uint64_t c448_bool_t; +/* Double-word size for internal computations */ +typedef __uint128_t c448_dword_t; +/* Signed double-word size for internal computations */ +typedef __int128_t c448_dsword_t; +# elif C448_WORD_BITS == 32 +/* Word size for internal computations */ +typedef uint32_t c448_word_t; +/* Signed word size for internal computations */ +typedef int32_t c448_sword_t; +/* "Boolean" type, will be set to all-zero or all-one (i.e. -1u) */ +typedef uint32_t c448_bool_t; +/* Double-word size for internal computations */ +typedef uint64_t c448_dword_t; +/* Signed double-word size for internal computations */ +typedef int64_t c448_dsword_t; +# else +# error "Only supporting C448_WORD_BITS = 32 or 64 for now" +# endif + +/* C448_TRUE = -1 so that C448_TRUE & x = x */ +# define C448_TRUE (0 - (c448_bool_t)1) + +/* C448_FALSE = 0 so that C448_FALSE & x = 0 */ +# define C448_FALSE 0 + +/* Another boolean type used to indicate success or failure. */ +typedef enum { + C448_SUCCESS = -1, /**< The operation succeeded. */ + C448_FAILURE = 0 /**< The operation failed. */ +} c448_error_t; + +/* Return success if x is true */ +static ossl_inline c448_error_t c448_succeed_if(c448_bool_t x) +{ + return (c448_error_t) x; +} + +#endif /* __C448_COMMON_H__ */ diff --git a/crypto/ec/curve448/ed448.h b/crypto/ec/curve448/ed448.h new file mode 100644 index 00000000..5fe939e8 --- /dev/null +++ b/crypto/ec/curve448/ed448.h @@ -0,0 +1,195 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_ED448_H +# define HEADER_ED448_H + +# include "point_448.h" + +/* Number of bytes in an EdDSA public key. */ +# define EDDSA_448_PUBLIC_BYTES 57 + +/* Number of bytes in an EdDSA private key. */ +# define EDDSA_448_PRIVATE_BYTES EDDSA_448_PUBLIC_BYTES + +/* Number of bytes in an EdDSA private key. */ +# define EDDSA_448_SIGNATURE_BYTES (EDDSA_448_PUBLIC_BYTES + \ + EDDSA_448_PRIVATE_BYTES) + +/* EdDSA encoding ratio. */ +# define C448_EDDSA_ENCODE_RATIO 4 + +/* EdDSA decoding ratio. */ +# define C448_EDDSA_DECODE_RATIO (4 / 4) + +/* + * EdDSA key generation. This function uses a different (non-Decaf) encoding. + * + * pubkey (out): The public key. + * privkey (in): The private key. + */ +c448_error_t c448_ed448_derive_public_key( + uint8_t pubkey [EDDSA_448_PUBLIC_BYTES], + const uint8_t privkey [EDDSA_448_PRIVATE_BYTES]); + +/* + * EdDSA signing. + * + * signature (out): The signature. + * privkey (in): The private key. + * pubkey (in): The public key. + * message (in): The message to sign. + * message_len (in): The length of the message. + * prehashed (in): Nonzero if the message is actually the hash of something + * you want to sign. + * context (in): A "context" for this signature of up to 255 bytes. + * context_len (in): Length of the context. + * + * For Ed25519, it is unsafe to use the same key for both prehashed and + * non-prehashed messages, at least without some very careful protocol-level + * disambiguation. For Ed448 it is safe. + */ +c448_error_t c448_ed448_sign( + uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t privkey[EDDSA_448_PRIVATE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t *message, size_t message_len, + uint8_t prehashed, const uint8_t *context, + size_t context_len); + +/* + * EdDSA signing with prehash. + * + * signature (out): The signature. + * privkey (in): The private key. + * pubkey (in): The public key. + * hash (in): The hash of the message. This object will not be modified by the + * call. + * context (in): A "context" for this signature of up to 255 bytes. Must be the + * same as what was used for the prehash. + * context_len (in): Length of the context. + * + * For Ed25519, it is unsafe to use the same key for both prehashed and + * non-prehashed messages, at least without some very careful protocol-level + * disambiguation. For Ed448 it is safe. + */ +c448_error_t c448_ed448_sign_prehash( + uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t privkey[EDDSA_448_PRIVATE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t hash[64], + const uint8_t *context, + size_t context_len); + +/* + * EdDSA signature verification. + * + * Uses the standard (i.e. less-strict) verification formula. + * + * signature (in): The signature. + * pubkey (in): The public key. + * message (in): The message to verify. + * message_len (in): The length of the message. + * prehashed (in): Nonzero if the message is actually the hash of something you + * want to verify. + * context (in): A "context" for this signature of up to 255 bytes. + * context_len (in): Length of the context. + * + * For Ed25519, it is unsafe to use the same key for both prehashed and + * non-prehashed messages, at least without some very careful protocol-level + * disambiguation. For Ed448 it is safe. + */ +c448_error_t c448_ed448_verify(const uint8_t + signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t + pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t *message, size_t message_len, + uint8_t prehashed, const uint8_t *context, + uint8_t context_len); + +/* + * EdDSA signature verification. + * + * Uses the standard (i.e. less-strict) verification formula. + * + * signature (in): The signature. + * pubkey (in): The public key. + * hash (in): The hash of the message. This object will not be modified by the + * call. + * context (in): A "context" for this signature of up to 255 bytes. Must be the + * same as what was used for the prehash. + * context_len (in): Length of the context. + * + * For Ed25519, it is unsafe to use the same key for both prehashed and + * non-prehashed messages, at least without some very careful protocol-level + * disambiguation. For Ed448 it is safe. + */ +c448_error_t c448_ed448_verify_prehash( + const uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t hash[64], + const uint8_t *context, + uint8_t context_len); + +/* + * EdDSA point encoding. Used internally, exposed externally. + * Multiplies by C448_EDDSA_ENCODE_RATIO first. + * + * The multiplication is required because the EdDSA encoding represents + * the cofactor information, but the Decaf encoding ignores it (which + * is the whole point). So if you decode from EdDSA and re-encode to + * EdDSA, the cofactor info must get cleared, because the intermediate + * representation doesn't track it. + * + * The way we handle this is to multiply by C448_EDDSA_DECODE_RATIO when + * decoding, and by C448_EDDSA_ENCODE_RATIO when encoding. The product of + * these ratios is always exactly the cofactor 4, so the cofactor ends up + * cleared one way or another. But exactly how that shakes out depends on the + * base points specified in RFC 8032. + * + * The upshot is that if you pass the Decaf/Ristretto base point to + * this function, you will get C448_EDDSA_ENCODE_RATIO times the + * EdDSA base point. + * + * enc (out): The encoded point. + * p (in): The point. + */ +void curve448_point_mul_by_ratio_and_encode_like_eddsa( + uint8_t enc [EDDSA_448_PUBLIC_BYTES], + const curve448_point_t p); + +/* + * EdDSA point decoding. Multiplies by C448_EDDSA_DECODE_RATIO, and + * ignores cofactor information. + * + * See notes on curve448_point_mul_by_ratio_and_encode_like_eddsa + * + * enc (out): The encoded point. + * p (in): The point. + */ +c448_error_t curve448_point_decode_like_eddsa_and_mul_by_ratio( + curve448_point_t p, + const uint8_t enc[EDDSA_448_PUBLIC_BYTES]); + +/* + * EdDSA to ECDH private key conversion + * Using the appropriate hash function, hash the EdDSA private key + * and keep only the lower bytes to get the ECDH private key + * + * x (out): The ECDH private key as in RFC7748 + * ed (in): The EdDSA private key + */ +c448_error_t c448_ed448_convert_private_key_to_x448( + uint8_t x[X448_PRIVATE_BYTES], + const uint8_t ed[EDDSA_448_PRIVATE_BYTES]); + +#endif /* HEADER_ED448_H */ diff --git a/crypto/ec/curve448/eddsa.c b/crypto/ec/curve448/eddsa.c new file mode 100644 index 00000000..d3188763 --- /dev/null +++ b/crypto/ec/curve448/eddsa.c @@ -0,0 +1,353 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ +#include +#include +#include +#include "curve448_lcl.h" +#include "word.h" +#include "ed448.h" +#include "internal/numbers.h" + +#define COFACTOR 4 + +static c448_error_t oneshot_hash(uint8_t *out, size_t outlen, + const uint8_t *in, size_t inlen) +{ + EVP_MD_CTX *hashctx = EVP_MD_CTX_new(); + + if (hashctx == NULL) + return C448_FAILURE; + + if (!EVP_DigestInit_ex(hashctx, EVP_shake256(), NULL) + || !EVP_DigestUpdate(hashctx, in, inlen) + || !EVP_DigestFinalXOF(hashctx, out, outlen)) { + EVP_MD_CTX_free(hashctx); + return C448_FAILURE; + } + + EVP_MD_CTX_free(hashctx); + return C448_SUCCESS; +} + +static void clamp(uint8_t secret_scalar_ser[EDDSA_448_PRIVATE_BYTES]) +{ + secret_scalar_ser[0] &= -COFACTOR; + secret_scalar_ser[EDDSA_448_PRIVATE_BYTES - 1] = 0; + secret_scalar_ser[EDDSA_448_PRIVATE_BYTES - 2] |= 0x80; +} + +static c448_error_t hash_init_with_dom(EVP_MD_CTX *hashctx, uint8_t prehashed, + uint8_t for_prehash, + const uint8_t *context, + size_t context_len) +{ + const char *dom_s = "SigEd448"; + uint8_t dom[2]; + + if (context_len > UINT8_MAX) + return C448_FAILURE; + + dom[0] = (uint8_t)(2 - (prehashed == 0 ? 1 : 0) + - (for_prehash == 0 ? 1 : 0)); + dom[1] = (uint8_t)context_len; + + if (!EVP_DigestInit_ex(hashctx, EVP_shake256(), NULL) + || !EVP_DigestUpdate(hashctx, dom_s, strlen(dom_s)) + || !EVP_DigestUpdate(hashctx, dom, sizeof(dom)) + || (context_len > 0 + && !EVP_DigestUpdate(hashctx, context, context_len))) + return C448_FAILURE; + + return C448_SUCCESS; +} + +/* In this file because it uses the hash */ +c448_error_t c448_ed448_convert_private_key_to_x448( + uint8_t x[X448_PRIVATE_BYTES], + const uint8_t ed [EDDSA_448_PRIVATE_BYTES]) +{ + /* pass the private key through oneshot_hash function */ + /* and keep the first X448_PRIVATE_BYTES bytes */ + return oneshot_hash(x, X448_PRIVATE_BYTES, ed, + EDDSA_448_PRIVATE_BYTES); +} + +c448_error_t c448_ed448_derive_public_key( + uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t privkey[EDDSA_448_PRIVATE_BYTES]) +{ + /* only this much used for keygen */ + uint8_t secret_scalar_ser[EDDSA_448_PRIVATE_BYTES]; + curve448_scalar_t secret_scalar; + unsigned int c; + curve448_point_t p; + + if (!oneshot_hash(secret_scalar_ser, sizeof(secret_scalar_ser), privkey, + EDDSA_448_PRIVATE_BYTES)) + return C448_FAILURE; + + clamp(secret_scalar_ser); + + curve448_scalar_decode_long(secret_scalar, secret_scalar_ser, + sizeof(secret_scalar_ser)); + + /* + * Since we are going to mul_by_cofactor during encoding, divide by it + * here. However, the EdDSA base point is not the same as the decaf base + * point if the sigma isogeny is in use: the EdDSA base point is on + * Etwist_d/(1-d) and the decaf base point is on Etwist_d, and when + * converted it effectively picks up a factor of 2 from the isogenies. So + * we might start at 2 instead of 1. + */ + for (c = 1; c < C448_EDDSA_ENCODE_RATIO; c <<= 1) + curve448_scalar_halve(secret_scalar, secret_scalar); + + curve448_precomputed_scalarmul(p, curve448_precomputed_base, secret_scalar); + + curve448_point_mul_by_ratio_and_encode_like_eddsa(pubkey, p); + + /* Cleanup */ + curve448_scalar_destroy(secret_scalar); + curve448_point_destroy(p); + OPENSSL_cleanse(secret_scalar_ser, sizeof(secret_scalar_ser)); + + return C448_SUCCESS; +} + +c448_error_t c448_ed448_sign( + uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t privkey[EDDSA_448_PRIVATE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t *message, size_t message_len, + uint8_t prehashed, const uint8_t *context, + size_t context_len) +{ + curve448_scalar_t secret_scalar; + EVP_MD_CTX *hashctx = EVP_MD_CTX_new(); + c448_error_t ret = C448_FAILURE; + curve448_scalar_t nonce_scalar; + uint8_t nonce_point[EDDSA_448_PUBLIC_BYTES] = { 0 }; + unsigned int c; + curve448_scalar_t challenge_scalar; + + if (hashctx == NULL) + return C448_FAILURE; + + { + /* + * Schedule the secret key, First EDDSA_448_PRIVATE_BYTES is serialised + * secret scalar,next EDDSA_448_PRIVATE_BYTES bytes is the seed. + */ + uint8_t expanded[EDDSA_448_PRIVATE_BYTES * 2]; + + if (!oneshot_hash(expanded, sizeof(expanded), privkey, + EDDSA_448_PRIVATE_BYTES)) + goto err; + clamp(expanded); + curve448_scalar_decode_long(secret_scalar, expanded, + EDDSA_448_PRIVATE_BYTES); + + /* Hash to create the nonce */ + if (!hash_init_with_dom(hashctx, prehashed, 0, context, context_len) + || !EVP_DigestUpdate(hashctx, + expanded + EDDSA_448_PRIVATE_BYTES, + EDDSA_448_PRIVATE_BYTES) + || (message_len > 0 + && !EVP_DigestUpdate(hashctx, message, message_len))) { + OPENSSL_cleanse(expanded, sizeof(expanded)); + goto err; + } + OPENSSL_cleanse(expanded, sizeof(expanded)); + } + + /* Decode the nonce */ + { + uint8_t nonce[2 * EDDSA_448_PRIVATE_BYTES]; + + if (!EVP_DigestFinalXOF(hashctx, nonce, sizeof(nonce))) + goto err; + curve448_scalar_decode_long(nonce_scalar, nonce, sizeof(nonce)); + OPENSSL_cleanse(nonce, sizeof(nonce)); + } + + { + /* Scalarmul to create the nonce-point */ + curve448_scalar_t nonce_scalar_2; + curve448_point_t p; + + curve448_scalar_halve(nonce_scalar_2, nonce_scalar); + for (c = 2; c < C448_EDDSA_ENCODE_RATIO; c <<= 1) + curve448_scalar_halve(nonce_scalar_2, nonce_scalar_2); + + curve448_precomputed_scalarmul(p, curve448_precomputed_base, + nonce_scalar_2); + curve448_point_mul_by_ratio_and_encode_like_eddsa(nonce_point, p); + curve448_point_destroy(p); + curve448_scalar_destroy(nonce_scalar_2); + } + + { + uint8_t challenge[2 * EDDSA_448_PRIVATE_BYTES]; + + /* Compute the challenge */ + if (!hash_init_with_dom(hashctx, prehashed, 0, context, context_len) + || !EVP_DigestUpdate(hashctx, nonce_point, sizeof(nonce_point)) + || !EVP_DigestUpdate(hashctx, pubkey, EDDSA_448_PUBLIC_BYTES) + || (message_len > 0 + && !EVP_DigestUpdate(hashctx, message, message_len)) + || !EVP_DigestFinalXOF(hashctx, challenge, sizeof(challenge))) + goto err; + + curve448_scalar_decode_long(challenge_scalar, challenge, + sizeof(challenge)); + OPENSSL_cleanse(challenge, sizeof(challenge)); + } + + curve448_scalar_mul(challenge_scalar, challenge_scalar, secret_scalar); + curve448_scalar_add(challenge_scalar, challenge_scalar, nonce_scalar); + + OPENSSL_cleanse(signature, EDDSA_448_SIGNATURE_BYTES); + memcpy(signature, nonce_point, sizeof(nonce_point)); + curve448_scalar_encode(&signature[EDDSA_448_PUBLIC_BYTES], + challenge_scalar); + + curve448_scalar_destroy(secret_scalar); + curve448_scalar_destroy(nonce_scalar); + curve448_scalar_destroy(challenge_scalar); + + ret = C448_SUCCESS; + err: + EVP_MD_CTX_free(hashctx); + return ret; +} + +c448_error_t c448_ed448_sign_prehash( + uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t privkey[EDDSA_448_PRIVATE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t hash[64], const uint8_t *context, + size_t context_len) +{ + return c448_ed448_sign(signature, privkey, pubkey, hash, 64, 1, context, + context_len); +} + +c448_error_t c448_ed448_verify( + const uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t *message, size_t message_len, + uint8_t prehashed, const uint8_t *context, + uint8_t context_len) +{ + curve448_point_t pk_point, r_point; + c448_error_t error = + curve448_point_decode_like_eddsa_and_mul_by_ratio(pk_point, pubkey); + curve448_scalar_t challenge_scalar; + curve448_scalar_t response_scalar; + unsigned int c; + + if (C448_SUCCESS != error) + return error; + + error = + curve448_point_decode_like_eddsa_and_mul_by_ratio(r_point, signature); + if (C448_SUCCESS != error) + return error; + + { + /* Compute the challenge */ + EVP_MD_CTX *hashctx = EVP_MD_CTX_new(); + uint8_t challenge[2 * EDDSA_448_PRIVATE_BYTES]; + + if (hashctx == NULL + || !hash_init_with_dom(hashctx, prehashed, 0, context, + context_len) + || !EVP_DigestUpdate(hashctx, signature, EDDSA_448_PUBLIC_BYTES) + || !EVP_DigestUpdate(hashctx, pubkey, EDDSA_448_PUBLIC_BYTES) + || !EVP_DigestUpdate(hashctx, message, message_len) + || !EVP_DigestFinalXOF(hashctx, challenge, sizeof(challenge))) { + EVP_MD_CTX_free(hashctx); + return C448_FAILURE; + } + + EVP_MD_CTX_free(hashctx); + curve448_scalar_decode_long(challenge_scalar, challenge, + sizeof(challenge)); + OPENSSL_cleanse(challenge, sizeof(challenge)); + } + curve448_scalar_sub(challenge_scalar, curve448_scalar_zero, + challenge_scalar); + + curve448_scalar_decode_long(response_scalar, + &signature[EDDSA_448_PUBLIC_BYTES], + EDDSA_448_PRIVATE_BYTES); + + for (c = 1; c < C448_EDDSA_DECODE_RATIO; c <<= 1) + curve448_scalar_add(response_scalar, response_scalar, response_scalar); + + /* pk_point = -c(x(P)) + (cx + k)G = kG */ + curve448_base_double_scalarmul_non_secret(pk_point, + response_scalar, + pk_point, challenge_scalar); + return c448_succeed_if(curve448_point_eq(pk_point, r_point)); +} + +c448_error_t c448_ed448_verify_prehash( + const uint8_t signature[EDDSA_448_SIGNATURE_BYTES], + const uint8_t pubkey[EDDSA_448_PUBLIC_BYTES], + const uint8_t hash[64], const uint8_t *context, + uint8_t context_len) +{ + return c448_ed448_verify(signature, pubkey, hash, 64, 1, context, + context_len); +} + +int ED448_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[57], const uint8_t private_key[57], + const uint8_t *context, size_t context_len) +{ + return c448_ed448_sign(out_sig, private_key, public_key, message, + message_len, 0, context, context_len) + == C448_SUCCESS; +} + +int ED448_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[114], const uint8_t public_key[57], + const uint8_t *context, size_t context_len) +{ + return c448_ed448_verify(signature, public_key, message, message_len, 0, + context, (uint8_t)context_len) == C448_SUCCESS; +} + +int ED448ph_sign(uint8_t *out_sig, const uint8_t hash[64], + const uint8_t public_key[57], const uint8_t private_key[57], + const uint8_t *context, size_t context_len) +{ + return c448_ed448_sign_prehash(out_sig, private_key, public_key, hash, + context, context_len) == C448_SUCCESS; + +} + +int ED448ph_verify(const uint8_t hash[64], const uint8_t signature[114], + const uint8_t public_key[57], const uint8_t *context, + size_t context_len) +{ + return c448_ed448_verify_prehash(signature, public_key, hash, context, + (uint8_t)context_len) == C448_SUCCESS; +} + +int ED448_public_from_private(uint8_t out_public_key[57], + const uint8_t private_key[57]) +{ + return c448_ed448_derive_public_key(out_public_key, private_key) + == C448_SUCCESS; +} diff --git a/crypto/ec/curve448/f_generic.c b/crypto/ec/curve448/f_generic.c new file mode 100644 index 00000000..6babea6e --- /dev/null +++ b/crypto/ec/curve448/f_generic.c @@ -0,0 +1,204 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ +#include "field.h" + +static const gf MODULUS = { + FIELD_LITERAL(0xffffffffffffff, 0xffffffffffffff, 0xffffffffffffff, + 0xffffffffffffff, 0xfffffffffffffe, 0xffffffffffffff, + 0xffffffffffffff, 0xffffffffffffff) +}; + +/* Serialize to wire format. */ +void gf_serialize(uint8_t serial[SER_BYTES], const gf x, int with_hibit) +{ + unsigned int j = 0, fill = 0; + dword_t buffer = 0; + int i; + gf red; + + gf_copy(red, x); + gf_strong_reduce(red); + if (!with_hibit) + assert(gf_hibit(red) == 0); + + for (i = 0; i < (with_hibit ? X_SER_BYTES : SER_BYTES); i++) { + if (fill < 8 && j < NLIMBS) { + buffer |= ((dword_t) red->limb[LIMBPERM(j)]) << fill; + fill += LIMB_PLACE_VALUE(LIMBPERM(j)); + j++; + } + serial[i] = (uint8_t)buffer; + fill -= 8; + buffer >>= 8; + } +} + +/* Return high bit of x = low bit of 2x mod p */ +mask_t gf_hibit(const gf x) +{ + gf y; + + gf_add(y, x, x); + gf_strong_reduce(y); + return 0 - (y->limb[0] & 1); +} + +/* Return high bit of x = low bit of 2x mod p */ +mask_t gf_lobit(const gf x) +{ + gf y; + + gf_copy(y, x); + gf_strong_reduce(y); + return 0 - (y->limb[0] & 1); +} + +/* Deserialize from wire format; return -1 on success and 0 on failure. */ +mask_t gf_deserialize(gf x, const uint8_t serial[SER_BYTES], int with_hibit, + uint8_t hi_nmask) +{ + unsigned int j = 0, fill = 0; + dword_t buffer = 0; + dsword_t scarry = 0; + const unsigned nbytes = with_hibit ? X_SER_BYTES : SER_BYTES; + unsigned int i; + mask_t succ; + + for (i = 0; i < NLIMBS; i++) { + while (fill < LIMB_PLACE_VALUE(LIMBPERM(i)) && j < nbytes) { + uint8_t sj; + + sj = serial[j]; + if (j == nbytes - 1) + sj &= ~hi_nmask; + buffer |= ((dword_t) sj) << fill; + fill += 8; + j++; + } + x->limb[LIMBPERM(i)] = (word_t) + ((i < NLIMBS - 1) ? buffer & LIMB_MASK(LIMBPERM(i)) : buffer); + fill -= LIMB_PLACE_VALUE(LIMBPERM(i)); + buffer >>= LIMB_PLACE_VALUE(LIMBPERM(i)); + scarry = + (scarry + x->limb[LIMBPERM(i)] - + MODULUS->limb[LIMBPERM(i)]) >> (8 * sizeof(word_t)); + } + succ = with_hibit ? 0 - (mask_t) 1 : ~gf_hibit(x); + return succ & word_is_zero((word_t)buffer) & ~word_is_zero((word_t)scarry); +} + +/* Reduce to canonical form. */ +void gf_strong_reduce(gf a) +{ + dsword_t scarry; + word_t scarry_0; + dword_t carry = 0; + unsigned int i; + + /* first, clear high */ + gf_weak_reduce(a); /* Determined to have negligible perf impact. */ + + /* now the total is less than 2p */ + + /* compute total_value - p. No need to reduce mod p. */ + scarry = 0; + for (i = 0; i < NLIMBS; i++) { + scarry = scarry + a->limb[LIMBPERM(i)] - MODULUS->limb[LIMBPERM(i)]; + a->limb[LIMBPERM(i)] = scarry & LIMB_MASK(LIMBPERM(i)); + scarry >>= LIMB_PLACE_VALUE(LIMBPERM(i)); + } + + /* + * uncommon case: it was >= p, so now scarry = 0 and this = x common case: + * it was < p, so now scarry = -1 and this = x - p + 2^255 so let's add + * back in p. will carry back off the top for 2^255. + */ + assert(word_is_zero(scarry) | word_is_zero(scarry + 1)); + + scarry_0 = (word_t)scarry; + + /* add it back */ + for (i = 0; i < NLIMBS; i++) { + carry = + carry + a->limb[LIMBPERM(i)] + + (scarry_0 & MODULUS->limb[LIMBPERM(i)]); + a->limb[LIMBPERM(i)] = carry & LIMB_MASK(LIMBPERM(i)); + carry >>= LIMB_PLACE_VALUE(LIMBPERM(i)); + } + + assert(word_is_zero(carry + scarry_0)); +} + +/* Subtract two gf elements d=a-b */ +void gf_sub(gf d, const gf a, const gf b) +{ + gf_sub_RAW(d, a, b); + gf_bias(d, 2); + gf_weak_reduce(d); +} + +/* Add two field elements d = a+b */ +void gf_add(gf d, const gf a, const gf b) +{ + gf_add_RAW(d, a, b); + gf_weak_reduce(d); +} + +/* Compare a==b */ +mask_t gf_eq(const gf a, const gf b) +{ + gf c; + mask_t ret = 0; + unsigned int i; + + gf_sub(c, a, b); + gf_strong_reduce(c); + + for (i = 0; i < NLIMBS; i++) + ret |= c->limb[LIMBPERM(i)]; + + return word_is_zero(ret); +} + +mask_t gf_isr(gf a, const gf x) +{ + gf L0, L1, L2; + + gf_sqr(L1, x); + gf_mul(L2, x, L1); + gf_sqr(L1, L2); + gf_mul(L2, x, L1); + gf_sqrn(L1, L2, 3); + gf_mul(L0, L2, L1); + gf_sqrn(L1, L0, 3); + gf_mul(L0, L2, L1); + gf_sqrn(L2, L0, 9); + gf_mul(L1, L0, L2); + gf_sqr(L0, L1); + gf_mul(L2, x, L0); + gf_sqrn(L0, L2, 18); + gf_mul(L2, L1, L0); + gf_sqrn(L0, L2, 37); + gf_mul(L1, L2, L0); + gf_sqrn(L0, L1, 37); + gf_mul(L1, L2, L0); + gf_sqrn(L0, L1, 111); + gf_mul(L2, L1, L0); + gf_sqr(L0, L2); + gf_mul(L1, x, L0); + gf_sqrn(L0, L1, 223); + gf_mul(L1, L2, L0); + gf_sqr(L2, L1); + gf_mul(L0, L2, x); + gf_copy(a, L1); + return gf_eq(L0, ONE); +} diff --git a/crypto/ec/curve448/field.h b/crypto/ec/curve448/field.h new file mode 100644 index 00000000..c3bad40e --- /dev/null +++ b/crypto/ec/curve448/field.h @@ -0,0 +1,168 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_FIELD_H +# define HEADER_FIELD_H + +# include "internal/constant_time_locl.h" +# include +# include +# include "word.h" + +# define NLIMBS (64/sizeof(word_t)) +# define X_SER_BYTES 56 +# define SER_BYTES 56 + +# if defined(__GNUC__) || defined(__clang__) +# define INLINE_UNUSED __inline__ __attribute__((__unused__,__always_inline__)) +# define RESTRICT __restrict__ +# define ALIGNED __attribute__((__aligned__(32))) +# else +# define INLINE_UNUSED ossl_inline +# define RESTRICT +# define ALIGNED +# endif + +typedef struct gf_s { + word_t limb[NLIMBS]; +} ALIGNED gf_s, gf[1]; + +/* RFC 7748 support */ +# define X_PUBLIC_BYTES X_SER_BYTES +# define X_PRIVATE_BYTES X_PUBLIC_BYTES +# define X_PRIVATE_BITS 448 + +static INLINE_UNUSED void gf_copy(gf out, const gf a) +{ + *out = *a; +} + +static INLINE_UNUSED void gf_add_RAW(gf out, const gf a, const gf b); +static INLINE_UNUSED void gf_sub_RAW(gf out, const gf a, const gf b); +static INLINE_UNUSED void gf_bias(gf inout, int amount); +static INLINE_UNUSED void gf_weak_reduce(gf inout); + +void gf_strong_reduce(gf inout); +void gf_add(gf out, const gf a, const gf b); +void gf_sub(gf out, const gf a, const gf b); +void gf_mul(gf_s * RESTRICT out, const gf a, const gf b); +void gf_mulw_unsigned(gf_s * RESTRICT out, const gf a, uint32_t b); +void gf_sqr(gf_s * RESTRICT out, const gf a); +mask_t gf_isr(gf a, const gf x); /** a^2 x = 1, QNR, or 0 if x=0. Return true if successful */ +mask_t gf_eq(const gf x, const gf y); +mask_t gf_lobit(const gf x); +mask_t gf_hibit(const gf x); + +void gf_serialize(uint8_t *serial, const gf x, int with_highbit); +mask_t gf_deserialize(gf x, const uint8_t serial[SER_BYTES], int with_hibit, + uint8_t hi_nmask); + +# include "f_impl.h" /* Bring in the inline implementations */ + +# define LIMBPERM(i) (i) +# define LIMB_MASK(i) (((1)< 0); + if (n & 1) { + gf_sqr(y, x); + n--; + } else { + gf_sqr(tmp, x); + gf_sqr(y, tmp); + n -= 2; + } + for (; n; n -= 2) { + gf_sqr(tmp, y); + gf_sqr(y, tmp); + } +} + +# define gf_add_nr gf_add_RAW + +/* Subtract mod p. Bias by 2 and don't reduce */ +static ossl_inline void gf_sub_nr(gf c, const gf a, const gf b) +{ + gf_sub_RAW(c, a, b); + gf_bias(c, 2); + if (GF_HEADROOM < 3) + gf_weak_reduce(c); +} + +/* Subtract mod p. Bias by amt but don't reduce. */ +static ossl_inline void gf_subx_nr(gf c, const gf a, const gf b, int amt) +{ + gf_sub_RAW(c, a, b); + gf_bias(c, amt); + if (GF_HEADROOM < amt + 1) + gf_weak_reduce(c); +} + +/* Mul by signed int. Not constant-time WRT the sign of that int. */ +static ossl_inline void gf_mulw(gf c, const gf a, int32_t w) +{ + if (w > 0) { + gf_mulw_unsigned(c, a, w); + } else { + gf_mulw_unsigned(c, a, -w); + gf_sub(c, ZERO, c); + } +} + +/* Constant time, x = is_z ? z : y */ +static ossl_inline void gf_cond_sel(gf x, const gf y, const gf z, mask_t is_z) +{ + size_t i; + + for (i = 0; i < NLIMBS; i++) { +#if ARCH_WORD_BITS == 32 + x[0].limb[i] = constant_time_select_32(is_z, z[0].limb[i], + y[0].limb[i]); +#else + /* Must be 64 bit */ + x[0].limb[i] = constant_time_select_64(is_z, z[0].limb[i], + y[0].limb[i]); +#endif + } +} + +/* Constant time, if (neg) x=-x; */ +static ossl_inline void gf_cond_neg(gf x, mask_t neg) +{ + gf y; + + gf_sub(y, ZERO, x); + gf_cond_sel(x, x, y, neg); +} + +/* Constant time, if (swap) (x,y) = (y,x); */ +static ossl_inline void gf_cond_swap(gf x, gf_s * RESTRICT y, mask_t swap) +{ + size_t i; + + for (i = 0; i < NLIMBS; i++) { +#if ARCH_WORD_BITS == 32 + constant_time_cond_swap_32(swap, &(x[0].limb[i]), &(y->limb[i])); +#else + /* Must be 64 bit */ + constant_time_cond_swap_64(swap, &(x[0].limb[i]), &(y->limb[i])); +#endif + } +} + +#endif /* HEADER_FIELD_H */ diff --git a/crypto/ec/curve448/point_448.h b/crypto/ec/curve448/point_448.h new file mode 100644 index 00000000..0ef3b871 --- /dev/null +++ b/crypto/ec/curve448/point_448.h @@ -0,0 +1,301 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_POINT_448_H +# define HEADER_POINT_448_H + +# include "curve448utils.h" +# include "field.h" + +/* Comb config: number of combs, n, t, s. */ +#define COMBS_N 5 +#define COMBS_T 5 +#define COMBS_S 18 + +/* Projective Niels coordinates */ +typedef struct { + gf a, b, c; +} niels_s, niels_t[1]; +typedef struct { + niels_t n; + gf z; +} pniels_t[1]; + +/* Precomputed base */ +struct curve448_precomputed_s { + niels_t table[COMBS_N << (COMBS_T - 1)]; +}; + +# define C448_SCALAR_LIMBS ((446-1)/C448_WORD_BITS+1) + +/* The number of bits in a scalar */ +# define C448_SCALAR_BITS 446 + +/* Number of bytes in a serialized scalar. */ +# define C448_SCALAR_BYTES 56 + +/* X448 encoding ratio. */ +# define X448_ENCODE_RATIO 2 + +/* Number of bytes in an x448 public key */ +# define X448_PUBLIC_BYTES 56 + +/* Number of bytes in an x448 private key */ +# define X448_PRIVATE_BYTES 56 + +/* Twisted Edwards extended homogeneous coordinates */ +typedef struct curve448_point_s { + gf x, y, z, t; +} curve448_point_t[1]; + +/* Precomputed table based on a point. Can be trivial implementation. */ +struct curve448_precomputed_s; + +/* Precomputed table based on a point. Can be trivial implementation. */ +typedef struct curve448_precomputed_s curve448_precomputed_s; + +/* Scalar is stored packed, because we don't need the speed. */ +typedef struct curve448_scalar_s { + c448_word_t limb[C448_SCALAR_LIMBS]; +} curve448_scalar_t[1]; + +/* A scalar equal to 1. */ +extern const curve448_scalar_t curve448_scalar_one; + +/* A scalar equal to 0. */ +extern const curve448_scalar_t curve448_scalar_zero; + +/* The identity point on the curve. */ +extern const curve448_point_t curve448_point_identity; + +/* Precomputed table for the base point on the curve. */ +extern const struct curve448_precomputed_s *curve448_precomputed_base; +extern const niels_t *curve448_wnaf_base; + +/* + * Read a scalar from wire format or from bytes. + * + * ser (in): Serialized form of a scalar. + * out (out): Deserialized form. + * + * Returns: + * C448_SUCCESS: The scalar was correctly encoded. + * C448_FAILURE: The scalar was greater than the modulus, and has been reduced + * modulo that modulus. + */ +c448_error_t curve448_scalar_decode(curve448_scalar_t out, + const unsigned char ser[C448_SCALAR_BYTES]); + +/* + * Read a scalar from wire format or from bytes. Reduces mod scalar prime. + * + * ser (in): Serialized form of a scalar. + * ser_len (in): Length of serialized form. + * out (out): Deserialized form. + */ +void curve448_scalar_decode_long(curve448_scalar_t out, + const unsigned char *ser, size_t ser_len); + +/* + * Serialize a scalar to wire format. + * + * ser (out): Serialized form of a scalar. + * s (in): Deserialized scalar. + */ +void curve448_scalar_encode(unsigned char ser[C448_SCALAR_BYTES], + const curve448_scalar_t s); + +/* + * Add two scalars. |a|, |b| and |out| may alias each other. + * + * a (in): One scalar. + * b (in): Another scalar. + * out (out): a+b. + */ +void curve448_scalar_add(curve448_scalar_t out, + const curve448_scalar_t a, const curve448_scalar_t b); + +/* + * Subtract two scalars. |a|, |b| and |out| may alias each other. + * a (in): One scalar. + * b (in): Another scalar. + * out (out): a-b. + */ +void curve448_scalar_sub(curve448_scalar_t out, + const curve448_scalar_t a, const curve448_scalar_t b); + +/* + * Multiply two scalars. |a|, |b| and |out| may alias each other. + * + * a (in): One scalar. + * b (in): Another scalar. + * out (out): a*b. + */ +void curve448_scalar_mul(curve448_scalar_t out, + const curve448_scalar_t a, const curve448_scalar_t b); + +/* +* Halve a scalar. |a| and |out| may alias each other. +* +* a (in): A scalar. +* out (out): a/2. +*/ +void curve448_scalar_halve(curve448_scalar_t out, const curve448_scalar_t a); + +/* + * Copy a scalar. The scalars may alias each other, in which case this + * function does nothing. + * + * a (in): A scalar. + * out (out): Will become a copy of a. + */ +static ossl_inline void curve448_scalar_copy(curve448_scalar_t out, + const curve448_scalar_t a) +{ + *out = *a; +} + +/* + * Copy a point. The input and output may alias, in which case this function + * does nothing. + * + * a (out): A copy of the point. + * b (in): Any point. + */ +static ossl_inline void curve448_point_copy(curve448_point_t a, + const curve448_point_t b) +{ + *a = *b; +} + +/* + * Test whether two points are equal. If yes, return C448_TRUE, else return + * C448_FALSE. + * + * a (in): A point. + * b (in): Another point. + * + * Returns: + * C448_TRUE: The points are equal. + * C448_FALSE: The points are not equal. + */ +__owur c448_bool_t curve448_point_eq(const curve448_point_t a, + const curve448_point_t b); + +/* + * Double a point. Equivalent to curve448_point_add(two_a,a,a), but potentially + * faster. + * + * two_a (out): The sum a+a. + * a (in): A point. + */ +void curve448_point_double(curve448_point_t two_a, const curve448_point_t a); + +/* + * RFC 7748 Diffie-Hellman scalarmul. This function uses a different + * (non-Decaf) encoding. + * + * out (out): The scaled point base*scalar + * base (in): The point to be scaled. + * scalar (in): The scalar to multiply by. + * + * Returns: + * C448_SUCCESS: The scalarmul succeeded. + * C448_FAILURE: The scalarmul didn't succeed, because the base point is in a + * small subgroup. + */ +__owur c448_error_t x448_int(uint8_t out[X448_PUBLIC_BYTES], + const uint8_t base[X448_PUBLIC_BYTES], + const uint8_t scalar[X448_PRIVATE_BYTES]); + +/* + * Multiply a point by X448_ENCODE_RATIO, then encode it like RFC 7748. + * + * This function is mainly used internally, but is exported in case + * it will be useful. + * + * The ratio is necessary because the internal representation doesn't + * track the cofactor information, so on output we must clear the cofactor. + * This would multiply by the cofactor, but in fact internally points are always + * even, so it multiplies by half the cofactor instead. + * + * As it happens, this aligns with the base point definitions; that is, + * if you pass the Decaf/Ristretto base point to this function, the result + * will be X448_ENCODE_RATIO times the X448 + * base point. + * + * out (out): The scaled and encoded point. + * p (in): The point to be scaled and encoded. + */ +void curve448_point_mul_by_ratio_and_encode_like_x448( + uint8_t out[X448_PUBLIC_BYTES], + const curve448_point_t p); + +/* + * RFC 7748 Diffie-Hellman base point scalarmul. This function uses a different + * (non-Decaf) encoding. + * + * out (out): The scaled point base*scalar + * scalar (in): The scalar to multiply by. + */ +void x448_derive_public_key(uint8_t out[X448_PUBLIC_BYTES], + const uint8_t scalar[X448_PRIVATE_BYTES]); + +/* + * Multiply a precomputed base point by a scalar: out = scalar*base. + * + * scaled (out): The scaled point base*scalar + * base (in): The point to be scaled. + * scalar (in): The scalar to multiply by. + */ +void curve448_precomputed_scalarmul(curve448_point_t scaled, + const curve448_precomputed_s * base, + const curve448_scalar_t scalar); + +/* + * Multiply two base points by two scalars: + * combo = scalar1*curve448_point_base + scalar2*base2. + * + * Otherwise equivalent to curve448_point_double_scalarmul, but may be + * faster at the expense of being variable time. + * + * combo (out): The linear combination scalar1*base + scalar2*base2. + * scalar1 (in): A first scalar to multiply by. + * base2 (in): A second point to be scaled. + * scalar2 (in) A second scalar to multiply by. + * + * Warning: This function takes variable time, and may leak the scalars used. + * It is designed for signature verification. + */ +void curve448_base_double_scalarmul_non_secret(curve448_point_t combo, + const curve448_scalar_t scalar1, + const curve448_point_t base2, + const curve448_scalar_t scalar2); + +/* + * Test that a point is valid, for debugging purposes. + * + * to_test (in): The point to test. + * + * Returns: + * C448_TRUE The point is valid. + * C448_FALSE The point is invalid. + */ +__owur c448_bool_t curve448_point_valid(const curve448_point_t to_test); + +/* Overwrite scalar with zeros. */ +void curve448_scalar_destroy(curve448_scalar_t scalar); + +/* Overwrite point with zeros. */ +void curve448_point_destroy(curve448_point_t point); + +#endif /* HEADER_POINT_448_H */ diff --git a/crypto/ec/curve448/scalar.c b/crypto/ec/curve448/scalar.c new file mode 100644 index 00000000..0f14bc4b --- /dev/null +++ b/crypto/ec/curve448/scalar.c @@ -0,0 +1,235 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2016 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ +#include + +#include "word.h" +#include "point_448.h" + +static const c448_word_t MONTGOMERY_FACTOR = (c448_word_t) 0x3bd440fae918bc5; +static const curve448_scalar_t sc_p = { + { + { + SC_LIMB(0x2378c292ab5844f3), SC_LIMB(0x216cc2728dc58f55), + SC_LIMB(0xc44edb49aed63690), SC_LIMB(0xffffffff7cca23e9), + SC_LIMB(0xffffffffffffffff), SC_LIMB(0xffffffffffffffff), + SC_LIMB(0x3fffffffffffffff) + } + } +}, sc_r2 = { + { + { + + SC_LIMB(0xe3539257049b9b60), SC_LIMB(0x7af32c4bc1b195d9), + SC_LIMB(0x0d66de2388ea1859), SC_LIMB(0xae17cf725ee4d838), + SC_LIMB(0x1a9cc14ba3c47c44), SC_LIMB(0x2052bcb7e4d070af), + SC_LIMB(0x3402a939f823b729) + } + } +}; + +#define WBITS C448_WORD_BITS /* NB this may be different from ARCH_WORD_BITS */ + +const curve448_scalar_t curve448_scalar_one = {{{1}}}; +const curve448_scalar_t curve448_scalar_zero = {{{0}}}; + +/* + * {extra,accum} - sub +? p + * Must have extra <= 1 + */ +static void sc_subx(curve448_scalar_t out, + const c448_word_t accum[C448_SCALAR_LIMBS], + const curve448_scalar_t sub, + const curve448_scalar_t p, c448_word_t extra) +{ + c448_dsword_t chain = 0; + unsigned int i; + c448_word_t borrow; + + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + chain = (chain + accum[i]) - sub->limb[i]; + out->limb[i] = (c448_word_t)chain; + chain >>= WBITS; + } + borrow = (c448_word_t)chain + extra; /* = 0 or -1 */ + + chain = 0; + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + chain = (chain + out->limb[i]) + (p->limb[i] & borrow); + out->limb[i] = (c448_word_t)chain; + chain >>= WBITS; + } +} + +static void sc_montmul(curve448_scalar_t out, const curve448_scalar_t a, + const curve448_scalar_t b) +{ + unsigned int i, j; + c448_word_t accum[C448_SCALAR_LIMBS + 1] = { 0 }; + c448_word_t hi_carry = 0; + + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + c448_word_t mand = a->limb[i]; + const c448_word_t *mier = b->limb; + + c448_dword_t chain = 0; + for (j = 0; j < C448_SCALAR_LIMBS; j++) { + chain += ((c448_dword_t) mand) * mier[j] + accum[j]; + accum[j] = (c448_word_t)chain; + chain >>= WBITS; + } + accum[j] = (c448_word_t)chain; + + mand = accum[0] * MONTGOMERY_FACTOR; + chain = 0; + mier = sc_p->limb; + for (j = 0; j < C448_SCALAR_LIMBS; j++) { + chain += (c448_dword_t) mand *mier[j] + accum[j]; + if (j) + accum[j - 1] = (c448_word_t)chain; + chain >>= WBITS; + } + chain += accum[j]; + chain += hi_carry; + accum[j - 1] = (c448_word_t)chain; + hi_carry = chain >> WBITS; + } + + sc_subx(out, accum, sc_p, sc_p, hi_carry); +} + +void curve448_scalar_mul(curve448_scalar_t out, const curve448_scalar_t a, + const curve448_scalar_t b) +{ + sc_montmul(out, a, b); + sc_montmul(out, out, sc_r2); +} + +void curve448_scalar_sub(curve448_scalar_t out, const curve448_scalar_t a, + const curve448_scalar_t b) +{ + sc_subx(out, a->limb, b, sc_p, 0); +} + +void curve448_scalar_add(curve448_scalar_t out, const curve448_scalar_t a, + const curve448_scalar_t b) +{ + c448_dword_t chain = 0; + unsigned int i; + + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + chain = (chain + a->limb[i]) + b->limb[i]; + out->limb[i] = (c448_word_t)chain; + chain >>= WBITS; + } + sc_subx(out, out->limb, sc_p, sc_p, (c448_word_t)chain); +} + +static ossl_inline void scalar_decode_short(curve448_scalar_t s, + const unsigned char *ser, + unsigned int nbytes) +{ + unsigned int i, j, k = 0; + + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + c448_word_t out = 0; + + for (j = 0; j < sizeof(c448_word_t) && k < nbytes; j++, k++) + out |= ((c448_word_t) ser[k]) << (8 * j); + s->limb[i] = out; + } +} + +c448_error_t curve448_scalar_decode( + curve448_scalar_t s, + const unsigned char ser[C448_SCALAR_BYTES]) +{ + unsigned int i; + c448_dsword_t accum = 0; + + scalar_decode_short(s, ser, C448_SCALAR_BYTES); + for (i = 0; i < C448_SCALAR_LIMBS; i++) + accum = (accum + s->limb[i] - sc_p->limb[i]) >> WBITS; + /* Here accum == 0 or -1 */ + + curve448_scalar_mul(s, s, curve448_scalar_one); /* ham-handed reduce */ + + return c448_succeed_if(~word_is_zero((uint32_t)accum)); +} + +void curve448_scalar_destroy(curve448_scalar_t scalar) +{ + OPENSSL_cleanse(scalar, sizeof(curve448_scalar_t)); +} + +void curve448_scalar_decode_long(curve448_scalar_t s, + const unsigned char *ser, size_t ser_len) +{ + size_t i; + curve448_scalar_t t1, t2; + + if (ser_len == 0) { + curve448_scalar_copy(s, curve448_scalar_zero); + return; + } + + i = ser_len - (ser_len % C448_SCALAR_BYTES); + if (i == ser_len) + i -= C448_SCALAR_BYTES; + + scalar_decode_short(t1, &ser[i], ser_len - i); + + if (ser_len == sizeof(curve448_scalar_t)) { + assert(i == 0); + /* ham-handed reduce */ + curve448_scalar_mul(s, t1, curve448_scalar_one); + curve448_scalar_destroy(t1); + return; + } + + while (i) { + i -= C448_SCALAR_BYTES; + sc_montmul(t1, t1, sc_r2); + (void)curve448_scalar_decode(t2, ser + i); + curve448_scalar_add(t1, t1, t2); + } + + curve448_scalar_copy(s, t1); + curve448_scalar_destroy(t1); + curve448_scalar_destroy(t2); +} + +void curve448_scalar_encode(unsigned char ser[C448_SCALAR_BYTES], + const curve448_scalar_t s) +{ + unsigned int i, j, k = 0; + + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + for (j = 0; j < sizeof(c448_word_t); j++, k++) + ser[k] = s->limb[i] >> (8 * j); + } +} + +void curve448_scalar_halve(curve448_scalar_t out, const curve448_scalar_t a) +{ + c448_word_t mask = 0 - (a->limb[0] & 1); + c448_dword_t chain = 0; + unsigned int i; + + for (i = 0; i < C448_SCALAR_LIMBS; i++) { + chain = (chain + a->limb[i]) + (sc_p->limb[i] & mask); + out->limb[i] = (c448_word_t)chain; + chain >>= C448_WORD_BITS; + } + for (i = 0; i < C448_SCALAR_LIMBS - 1; i++) + out->limb[i] = out->limb[i] >> 1 | out->limb[i + 1] << (WBITS - 1); + out->limb[i] = out->limb[i] >> 1 | (c448_word_t)(chain << (WBITS - 1)); +} diff --git a/crypto/ec/curve448/word.h b/crypto/ec/curve448/word.h new file mode 100644 index 00000000..a48b9e05 --- /dev/null +++ b/crypto/ec/curve448/word.h @@ -0,0 +1,81 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014 Cryptography Research, Inc. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 Mike Hamburg + */ + +#ifndef HEADER_WORD_H +# define HEADER_WORD_H + +# include +# include +# include +# include +# include "arch_intrinsics.h" +# include "curve448utils.h" + +# if (ARCH_WORD_BITS == 64) +typedef uint64_t word_t, mask_t; +typedef __uint128_t dword_t; +typedef int32_t hsword_t; +typedef int64_t sword_t; +typedef __int128_t dsword_t; +# elif (ARCH_WORD_BITS == 32) +typedef uint32_t word_t, mask_t; +typedef uint64_t dword_t; +typedef int16_t hsword_t; +typedef int32_t sword_t; +typedef int64_t dsword_t; +# else +# error "For now, we only support 32- and 64-bit architectures." +# endif + +/* + * Scalar limbs are keyed off of the API word size instead of the arch word + * size. + */ +# if C448_WORD_BITS == 64 +# define SC_LIMB(x) (x) +# elif C448_WORD_BITS == 32 +# define SC_LIMB(x) ((uint32_t)(x)),((x) >> 32) +# else +# error "For now we only support 32- and 64-bit architectures." +# endif + +/* + * The plan on booleans: The external interface uses c448_bool_t, but this + * might be a different size than our particular arch's word_t (and thus + * mask_t). Also, the caller isn't guaranteed to pass it as nonzero. So + * bool_to_mask converts word sizes and checks nonzero. On the flip side, + * mask_t is always -1 or 0, but it might be a different size than + * c448_bool_t. On the third hand, we have success vs boolean types, but + * that's handled in common.h: it converts between c448_bool_t and + * c448_error_t. + */ +static ossl_inline c448_bool_t mask_to_bool(mask_t m) +{ + return (c448_sword_t)(sword_t)m; +} + +static ossl_inline mask_t bool_to_mask(c448_bool_t m) +{ + /* On most arches this will be optimized to a simple cast. */ + mask_t ret = 0; + unsigned int i; + unsigned int limit = sizeof(c448_bool_t) / sizeof(mask_t); + + if (limit < 1) + limit = 1; + for (i = 0; i < limit; i++) + ret |= ~word_is_zero(m >> (i * 8 * sizeof(word_t))); + + return ret; +} + +#endif /* HEADER_WORD_H */ diff --git a/crypto/ec/ec2_mult.c b/crypto/ec/ec2_mult.c index e4a1ec57..891e8102 100644 --- a/crypto/ec/ec2_mult.c +++ b/crypto/ec/ec2_mult.c @@ -1,5 +1,6 @@ /* * Copyright 2002-2016 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 @@ -7,21 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - * - * The software is originally written by Sheueling Chang Shantz and - * Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #include "internal/bn_int.h" diff --git a/crypto/ec/ec2_oct.c b/crypto/ec/ec2_oct.c index ea88ce86..24c32ae6 100644 --- a/crypto/ec/ec2_oct.c +++ b/crypto/ec/ec2_oct.c @@ -1,5 +1,6 @@ /* * Copyright 2011-2016 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 @@ -7,21 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - * - * The software is originally written by Sheueling Chang Shantz and - * Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #include "ec_lcl.h" diff --git a/crypto/ec/ec2_smpl.c b/crypto/ec/ec2_smpl.c index cfeef5fc..6bd5f9d8 100644 --- a/crypto/ec/ec2_smpl.c +++ b/crypto/ec/ec2_smpl.c @@ -1,5 +1,6 @@ /* * Copyright 2002-2016 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 @@ -7,21 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - * - * The software is originally written by Sheueling Chang Shantz and - * Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #include "internal/bn_int.h" @@ -617,9 +603,9 @@ int ec_GF2m_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point, if (!BN_GF2m_add(lh, lh, y2)) goto err; ret = BN_is_zero(lh); + err: - if (ctx) - BN_CTX_end(ctx); + BN_CTX_end(ctx); BN_CTX_free(new_ctx); return ret; } @@ -670,8 +656,7 @@ int ec_GF2m_simple_cmp(const EC_GROUP *group, const EC_POINT *a, ret = ((BN_cmp(aX, bX) == 0) && BN_cmp(aY, bY) == 0) ? 0 : 1; err: - if (ctx) - BN_CTX_end(ctx); + BN_CTX_end(ctx); BN_CTX_free(new_ctx); return ret; } @@ -712,8 +697,7 @@ int ec_GF2m_simple_make_affine(const EC_GROUP *group, EC_POINT *point, ret = 1; err: - if (ctx) - BN_CTX_end(ctx); + BN_CTX_end(ctx); BN_CTX_free(new_ctx); return ret; } diff --git a/crypto/ec/ec_ameth.c b/crypto/ec/ec_ameth.c index b66adf2b..0682bc3d 100644 --- a/crypto/ec/ec_ameth.c +++ b/crypto/ec/ec_ameth.c @@ -520,6 +520,48 @@ static int ec_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) } +static int ec_pkey_check(const EVP_PKEY *pkey) +{ + EC_KEY *eckey = pkey->pkey.ec; + + /* stay consistent to what EVP_PKEY_check demands */ + if (eckey->priv_key == NULL) { + ECerr(EC_F_EC_PKEY_CHECK, EC_R_MISSING_PRIVATE_KEY); + return 0; + } + + return EC_KEY_check_key(eckey); +} + +static int ec_pkey_public_check(const EVP_PKEY *pkey) +{ + EC_KEY *eckey = pkey->pkey.ec; + + /* + * Note: it unnecessary to check eckey->pub_key here since + * it will be checked in EC_KEY_check_key(). In fact, the + * EC_KEY_check_key() mainly checks the public key, and checks + * the private key optionally (only if there is one). So if + * someone passes a whole EC key (public + private), this + * will also work... + */ + + return EC_KEY_check_key(eckey); +} + +static int ec_pkey_param_check(const EVP_PKEY *pkey) +{ + EC_KEY *eckey = pkey->pkey.ec; + + /* stay consistent to what EVP_PKEY_check demands */ + if (eckey->group == NULL) { + ECerr(EC_F_EC_PKEY_PARAM_CHECK, EC_R_MISSING_PARAMETERS); + return 0; + } + + return EC_GROUP_check(eckey->group, NULL); +} + const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = { EVP_PKEY_EC, EVP_PKEY_EC, @@ -551,7 +593,13 @@ const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = { int_ec_free, ec_pkey_ctrl, old_ec_priv_decode, - old_ec_priv_encode + old_ec_priv_encode, + + 0, 0, 0, + + ec_pkey_check, + ec_pkey_public_check, + ec_pkey_param_check }; int EC_KEY_print(BIO *bp, const EC_KEY *x, int off) diff --git a/crypto/ec/ec_asn1.c b/crypto/ec/ec_asn1.c index 271178f8..c7ed01ef 100644 --- a/crypto/ec/ec_asn1.c +++ b/crypto/ec/ec_asn1.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,6 +12,7 @@ #include #include #include +#include "internal/nelem.h" int EC_GROUP_get_basis_type(const EC_GROUP *group) { @@ -87,13 +88,13 @@ int EC_GROUP_get_pentanomial_basis(const EC_GROUP *group, unsigned int *k1, /* some structures needed for the asn1 encoding */ typedef struct x9_62_pentanomial_st { - long k1; - long k2; - long k3; + int32_t k1; + int32_t k2; + int32_t k3; } X9_62_PENTANOMIAL; typedef struct x9_62_characteristic_two_st { - long m; + int32_t m; ASN1_OBJECT *type; union { char *ptr; @@ -128,7 +129,7 @@ typedef struct x9_62_curve_st { } X9_62_CURVE; struct ec_parameters_st { - long version; + int32_t version; X9_62_FIELDID *fieldID; X9_62_CURVE *curve; ASN1_OCTET_STRING *base; @@ -147,7 +148,7 @@ struct ecpk_parameters_st { /* SEC1 ECPrivateKey */ typedef struct ec_privatekey_st { - long version; + int32_t version; ASN1_OCTET_STRING *privateKey; ECPKPARAMETERS *parameters; ASN1_BIT_STRING *publicKey; @@ -155,9 +156,9 @@ typedef struct ec_privatekey_st { /* the OpenSSL ASN.1 definitions */ ASN1_SEQUENCE(X9_62_PENTANOMIAL) = { - ASN1_SIMPLE(X9_62_PENTANOMIAL, k1, LONG), - ASN1_SIMPLE(X9_62_PENTANOMIAL, k2, LONG), - ASN1_SIMPLE(X9_62_PENTANOMIAL, k3, LONG) + ASN1_EMBED(X9_62_PENTANOMIAL, k1, INT32), + ASN1_EMBED(X9_62_PENTANOMIAL, k2, INT32), + ASN1_EMBED(X9_62_PENTANOMIAL, k3, INT32) } static_ASN1_SEQUENCE_END(X9_62_PENTANOMIAL) DECLARE_ASN1_ALLOC_FUNCTIONS(X9_62_PENTANOMIAL) @@ -172,7 +173,7 @@ ASN1_ADB(X9_62_CHARACTERISTIC_TWO) = { } ASN1_ADB_END(X9_62_CHARACTERISTIC_TWO, 0, type, 0, &char_two_def_tt, NULL); ASN1_SEQUENCE(X9_62_CHARACTERISTIC_TWO) = { - ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, m, LONG), + ASN1_EMBED(X9_62_CHARACTERISTIC_TWO, m, INT32), ASN1_SIMPLE(X9_62_CHARACTERISTIC_TWO, type, ASN1_OBJECT), ASN1_ADB_OBJECT(X9_62_CHARACTERISTIC_TWO) } static_ASN1_SEQUENCE_END(X9_62_CHARACTERISTIC_TWO) @@ -199,7 +200,7 @@ ASN1_SEQUENCE(X9_62_CURVE) = { } static_ASN1_SEQUENCE_END(X9_62_CURVE) ASN1_SEQUENCE(ECPARAMETERS) = { - ASN1_SIMPLE(ECPARAMETERS, version, LONG), + ASN1_EMBED(ECPARAMETERS, version, INT32), ASN1_SIMPLE(ECPARAMETERS, fieldID, X9_62_FIELDID), ASN1_SIMPLE(ECPARAMETERS, curve, X9_62_CURVE), ASN1_SIMPLE(ECPARAMETERS, base, ASN1_OCTET_STRING), @@ -221,7 +222,7 @@ DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECPKPARAMETERS, ECPKPARAMETERS) IMPLEMENT_ASN1_FUNCTIONS_const(ECPKPARAMETERS) ASN1_SEQUENCE(EC_PRIVATEKEY) = { - ASN1_SIMPLE(EC_PRIVATEKEY, version, LONG), + ASN1_EMBED(EC_PRIVATEKEY, version, INT32), ASN1_SIMPLE(EC_PRIVATEKEY, privateKey, ASN1_OCTET_STRING), ASN1_EXP_OPT(EC_PRIVATEKEY, parameters, ECPKPARAMETERS, 0), ASN1_EXP_OPT(EC_PRIVATEKEY, publicKey, ASN1_BIT_STRING, 1) @@ -359,7 +360,7 @@ static int ec_asn1_group2fieldid(const EC_GROUP *group, X9_62_FIELDID *field) err: BN_free(tmp); - return (ok); + return ok; } static int ec_asn1_group2curve(const EC_GROUP *group, X9_62_CURVE *curve) @@ -465,7 +466,7 @@ static int ec_asn1_group2curve(const EC_GROUP *group, X9_62_CURVE *curve) OPENSSL_free(buffer_2); BN_free(tmp_1); BN_free(tmp_2); - return (ok); + return ok; } ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, @@ -571,7 +572,7 @@ ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, if (EC_GROUP_get_asn1_flag(group)) { /* - * use the asn1 OID to describe the the elliptic curve parameters + * use the asn1 OID to describe the elliptic curve parameters */ tmp = EC_GROUP_get_curve_name(group); if (tmp) { @@ -827,7 +828,7 @@ EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params) BN_free(a); BN_free(b); EC_POINT_free(point); - return (ret); + return ret; } EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params) @@ -893,7 +894,7 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len) ECPKPARAMETERS_free(params); *in = p; - return (group); + return group; } int i2d_ECPKParameters(const EC_GROUP *a, unsigned char **out) @@ -910,7 +911,7 @@ int i2d_ECPKParameters(const EC_GROUP *a, unsigned char **out) return 0; } ECPKPARAMETERS_free(tmp); - return (ret); + return ret; } /* some EC_KEY functions */ @@ -985,7 +986,7 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len) *a = ret; EC_PRIVATEKEY_free(priv_key); *in = p; - return (ret); + return ret; err: if (a == NULL || *a != ret) @@ -1233,5 +1234,5 @@ int ECDSA_size(const EC_KEY *r) i = i2d_ASN1_INTEGER(&bs, NULL); i += i; /* r and s */ ret = ASN1_object_size(1, i, V_ASN1_SEQUENCE); - return (ret); + return ret; } diff --git a/crypto/ec/ec_curve.c b/crypto/ec/ec_curve.c index f8a3846f..75fc5411 100644 --- a/crypto/ec/ec_curve.c +++ b/crypto/ec/ec_curve.c @@ -1,5 +1,6 @@ /* * Copyright 2002-2016 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 @@ -7,26 +8,12 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #include "ec_lcl.h" #include #include #include -#include "e_os.h" +#include "internal/nelem.h" typedef struct { int field_type, /* either NID_X9_62_prime_field or @@ -2217,7 +2204,7 @@ static const struct { #endif /* - * These curves were added by Annie Yousar + * These curves were added by Annie Yousar. * For the definition of RFC 5639 curves see * http://www.ietf.org/rfc/rfc5639.txt These curves are generated verifiable * at random, nevertheless the seed is omitted as parameter because the diff --git a/crypto/ec/ec_cvt.c b/crypto/ec/ec_cvt.c index bfff6d65..13218237 100644 --- a/crypto/ec/ec_cvt.c +++ b/crypto/ec/ec_cvt.c @@ -1,5 +1,6 @@ /* * Copyright 2001-2016 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 @@ -7,20 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #include "ec_lcl.h" diff --git a/crypto/ec/ec_err.c b/crypto/ec/ec_err.c index cb78bd5c..588e95c1 100644 --- a/crypto/ec/ec_err.c +++ b/crypto/ec/ec_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,272 +8,332 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_EC,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_EC,0,reason) - -static ERR_STRING_DATA EC_str_functs[] = { - {ERR_FUNC(EC_F_BN_TO_FELEM), "BN_to_felem"}, - {ERR_FUNC(EC_F_D2I_ECPARAMETERS), "d2i_ECParameters"}, - {ERR_FUNC(EC_F_D2I_ECPKPARAMETERS), "d2i_ECPKParameters"}, - {ERR_FUNC(EC_F_D2I_ECPRIVATEKEY), "d2i_ECPrivateKey"}, - {ERR_FUNC(EC_F_DO_EC_KEY_PRINT), "do_EC_KEY_print"}, - {ERR_FUNC(EC_F_ECDH_CMS_DECRYPT), "ecdh_cms_decrypt"}, - {ERR_FUNC(EC_F_ECDH_CMS_SET_SHARED_INFO), "ecdh_cms_set_shared_info"}, - {ERR_FUNC(EC_F_ECDH_COMPUTE_KEY), "ECDH_compute_key"}, - {ERR_FUNC(EC_F_ECDH_SIMPLE_COMPUTE_KEY), "ecdh_simple_compute_key"}, - {ERR_FUNC(EC_F_ECDSA_DO_SIGN_EX), "ECDSA_do_sign_ex"}, - {ERR_FUNC(EC_F_ECDSA_DO_VERIFY), "ECDSA_do_verify"}, - {ERR_FUNC(EC_F_ECDSA_SIGN_EX), "ECDSA_sign_ex"}, - {ERR_FUNC(EC_F_ECDSA_SIGN_SETUP), "ECDSA_sign_setup"}, - {ERR_FUNC(EC_F_ECDSA_SIG_NEW), "ECDSA_SIG_new"}, - {ERR_FUNC(EC_F_ECDSA_VERIFY), "ECDSA_verify"}, - {ERR_FUNC(EC_F_ECKEY_PARAM2TYPE), "eckey_param2type"}, - {ERR_FUNC(EC_F_ECKEY_PARAM_DECODE), "eckey_param_decode"}, - {ERR_FUNC(EC_F_ECKEY_PRIV_DECODE), "eckey_priv_decode"}, - {ERR_FUNC(EC_F_ECKEY_PRIV_ENCODE), "eckey_priv_encode"}, - {ERR_FUNC(EC_F_ECKEY_PUB_DECODE), "eckey_pub_decode"}, - {ERR_FUNC(EC_F_ECKEY_PUB_ENCODE), "eckey_pub_encode"}, - {ERR_FUNC(EC_F_ECKEY_TYPE2PARAM), "eckey_type2param"}, - {ERR_FUNC(EC_F_ECPARAMETERS_PRINT), "ECParameters_print"}, - {ERR_FUNC(EC_F_ECPARAMETERS_PRINT_FP), "ECParameters_print_fp"}, - {ERR_FUNC(EC_F_ECPKPARAMETERS_PRINT), "ECPKParameters_print"}, - {ERR_FUNC(EC_F_ECPKPARAMETERS_PRINT_FP), "ECPKParameters_print_fp"}, - {ERR_FUNC(EC_F_ECP_NISTZ256_GET_AFFINE), "ecp_nistz256_get_affine"}, +static const ERR_STRING_DATA EC_str_functs[] = { + {ERR_PACK(ERR_LIB_EC, EC_F_BN_TO_FELEM, 0), "BN_to_felem"}, + {ERR_PACK(ERR_LIB_EC, EC_F_D2I_ECPARAMETERS, 0), "d2i_ECParameters"}, + {ERR_PACK(ERR_LIB_EC, EC_F_D2I_ECPKPARAMETERS, 0), "d2i_ECPKParameters"}, + {ERR_PACK(ERR_LIB_EC, EC_F_D2I_ECPRIVATEKEY, 0), "d2i_ECPrivateKey"}, + {ERR_PACK(ERR_LIB_EC, EC_F_DO_EC_KEY_PRINT, 0), "do_EC_KEY_print"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDH_CMS_DECRYPT, 0), "ecdh_cms_decrypt"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDH_CMS_SET_SHARED_INFO, 0), + "ecdh_cms_set_shared_info"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDH_COMPUTE_KEY, 0), "ECDH_compute_key"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDH_SIMPLE_COMPUTE_KEY, 0), + "ecdh_simple_compute_key"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDSA_DO_SIGN_EX, 0), "ECDSA_do_sign_ex"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDSA_DO_VERIFY, 0), "ECDSA_do_verify"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDSA_SIGN_EX, 0), "ECDSA_sign_ex"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDSA_SIGN_SETUP, 0), "ECDSA_sign_setup"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDSA_SIG_NEW, 0), "ECDSA_SIG_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECDSA_VERIFY, 0), "ECDSA_verify"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECD_ITEM_VERIFY, 0), "ecd_item_verify"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_PARAM2TYPE, 0), "eckey_param2type"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_PARAM_DECODE, 0), "eckey_param_decode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_PRIV_DECODE, 0), "eckey_priv_decode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_PRIV_ENCODE, 0), "eckey_priv_encode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_PUB_DECODE, 0), "eckey_pub_decode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_PUB_ENCODE, 0), "eckey_pub_encode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECKEY_TYPE2PARAM, 0), "eckey_type2param"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECPARAMETERS_PRINT, 0), "ECParameters_print"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECPARAMETERS_PRINT_FP, 0), + "ECParameters_print_fp"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECPKPARAMETERS_PRINT, 0), + "ECPKParameters_print"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECPKPARAMETERS_PRINT_FP, 0), + "ECPKParameters_print_fp"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECP_NISTZ256_GET_AFFINE, 0), + "ecp_nistz256_get_affine"}, {ERR_PACK(ERR_LIB_EC, EC_F_ECP_NISTZ256_INV_MOD_ORD, 0), "ecp_nistz256_inv_mod_ord"}, - {ERR_FUNC(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE), + {ERR_PACK(ERR_LIB_EC, EC_F_ECP_NISTZ256_MULT_PRECOMPUTE, 0), "ecp_nistz256_mult_precompute"}, - {ERR_FUNC(EC_F_ECP_NISTZ256_POINTS_MUL), "ecp_nistz256_points_mul"}, - {ERR_FUNC(EC_F_ECP_NISTZ256_PRE_COMP_NEW), "ecp_nistz256_pre_comp_new"}, - {ERR_FUNC(EC_F_ECP_NISTZ256_WINDOWED_MUL), "ecp_nistz256_windowed_mul"}, - {ERR_FUNC(EC_F_ECX_KEY_OP), "ecx_key_op"}, - {ERR_FUNC(EC_F_ECX_PRIV_ENCODE), "ecx_priv_encode"}, - {ERR_FUNC(EC_F_ECX_PUB_ENCODE), "ecx_pub_encode"}, - {ERR_FUNC(EC_F_EC_ASN1_GROUP2CURVE), "ec_asn1_group2curve"}, - {ERR_FUNC(EC_F_EC_ASN1_GROUP2FIELDID), "ec_asn1_group2fieldid"}, - {ERR_FUNC(EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY), + {ERR_PACK(ERR_LIB_EC, EC_F_ECP_NISTZ256_POINTS_MUL, 0), + "ecp_nistz256_points_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECP_NISTZ256_PRE_COMP_NEW, 0), + "ecp_nistz256_pre_comp_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECP_NISTZ256_WINDOWED_MUL, 0), + "ecp_nistz256_windowed_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECX_KEY_OP, 0), "ecx_key_op"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECX_PRIV_ENCODE, 0), "ecx_priv_encode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_ECX_PUB_ENCODE, 0), "ecx_pub_encode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_ASN1_GROUP2CURVE, 0), "ec_asn1_group2curve"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_ASN1_GROUP2FIELDID, 0), + "ec_asn1_group2fieldid"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY, 0), "ec_GF2m_montgomery_point_multiply"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT, 0), "ec_GF2m_simple_group_check_discriminant"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE, 0), "ec_GF2m_simple_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_OCT2POINT), "ec_GF2m_simple_oct2point"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_POINT2OCT), "ec_GF2m_simple_point2oct"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_OCT2POINT, 0), + "ec_GF2m_simple_oct2point"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_POINT2OCT, 0), + "ec_GF2m_simple_point2oct"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES, 0), "ec_GF2m_simple_point_get_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES, 0), "ec_GF2m_simple_point_set_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES, 0), "ec_GF2m_simple_set_compressed_coordinates"}, - {ERR_FUNC(EC_F_EC_GFP_MONT_FIELD_DECODE), "ec_GFp_mont_field_decode"}, - {ERR_FUNC(EC_F_EC_GFP_MONT_FIELD_ENCODE), "ec_GFp_mont_field_encode"}, - {ERR_FUNC(EC_F_EC_GFP_MONT_FIELD_MUL), "ec_GFp_mont_field_mul"}, - {ERR_FUNC(EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_MONT_FIELD_DECODE, 0), + "ec_GFp_mont_field_decode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_MONT_FIELD_ENCODE, 0), + "ec_GFp_mont_field_encode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_MONT_FIELD_MUL, 0), + "ec_GFp_mont_field_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE, 0), "ec_GFp_mont_field_set_to_one"}, - {ERR_FUNC(EC_F_EC_GFP_MONT_FIELD_SQR), "ec_GFp_mont_field_sqr"}, - {ERR_FUNC(EC_F_EC_GFP_MONT_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_MONT_FIELD_SQR, 0), + "ec_GFp_mont_field_sqr"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_MONT_GROUP_SET_CURVE, 0), "ec_GFp_mont_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE, 0), "ec_GFp_nistp224_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP224_POINTS_MUL), "ec_GFp_nistp224_points_mul"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP224_POINTS_MUL, 0), + "ec_GFp_nistp224_points_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES, 0), "ec_GFp_nistp224_point_get_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE, 0), "ec_GFp_nistp256_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP256_POINTS_MUL), "ec_GFp_nistp256_points_mul"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP256_POINTS_MUL, 0), + "ec_GFp_nistp256_points_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES, 0), "ec_GFp_nistp256_point_get_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE, 0), "ec_GFp_nistp521_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP521_POINTS_MUL), "ec_GFp_nistp521_points_mul"}, - {ERR_FUNC(EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP521_POINTS_MUL, 0), + "ec_GFp_nistp521_points_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES, 0), "ec_GFp_nistp521_point_get_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GFP_NIST_FIELD_MUL), "ec_GFp_nist_field_mul"}, - {ERR_FUNC(EC_F_EC_GFP_NIST_FIELD_SQR), "ec_GFp_nist_field_sqr"}, - {ERR_FUNC(EC_F_EC_GFP_NIST_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NIST_FIELD_MUL, 0), + "ec_GFp_nist_field_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NIST_FIELD_SQR, 0), + "ec_GFp_nist_field_sqr"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_NIST_GROUP_SET_CURVE, 0), "ec_GFp_nist_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT, 0), "ec_GFp_simple_group_check_discriminant"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE, 0), "ec_GFp_simple_group_set_curve"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_MAKE_AFFINE), "ec_GFp_simple_make_affine"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_OCT2POINT), "ec_GFp_simple_oct2point"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_POINT2OCT), "ec_GFp_simple_point2oct"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_MAKE_AFFINE, 0), + "ec_GFp_simple_make_affine"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_OCT2POINT, 0), + "ec_GFp_simple_oct2point"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_POINT2OCT, 0), + "ec_GFp_simple_point2oct"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE, 0), "ec_GFp_simple_points_make_affine"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES, 0), "ec_GFp_simple_point_get_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES, 0), "ec_GFp_simple_point_set_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, 0), "ec_GFp_simple_set_compressed_coordinates"}, - {ERR_FUNC(EC_F_EC_GROUP_CHECK), "EC_GROUP_check"}, - {ERR_FUNC(EC_F_EC_GROUP_CHECK_DISCRIMINANT), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_CHECK, 0), "EC_GROUP_check"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_CHECK_DISCRIMINANT, 0), "EC_GROUP_check_discriminant"}, - {ERR_FUNC(EC_F_EC_GROUP_COPY), "EC_GROUP_copy"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_CURVE_GF2M), "EC_GROUP_get_curve_GF2m"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_CURVE_GFP), "EC_GROUP_get_curve_GFp"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_DEGREE), "EC_GROUP_get_degree"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_ECPARAMETERS), "EC_GROUP_get_ecparameters"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_ECPKPARAMETERS), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_COPY, 0), "EC_GROUP_copy"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_CURVE_GF2M, 0), + "EC_GROUP_get_curve_GF2m"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_CURVE_GFP, 0), + "EC_GROUP_get_curve_GFp"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_DEGREE, 0), "EC_GROUP_get_degree"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_ECPARAMETERS, 0), + "EC_GROUP_get_ecparameters"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_ECPKPARAMETERS, 0), "EC_GROUP_get_ecpkparameters"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS, 0), "EC_GROUP_get_pentanomial_basis"}, - {ERR_FUNC(EC_F_EC_GROUP_GET_TRINOMIAL_BASIS), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_GET_TRINOMIAL_BASIS, 0), "EC_GROUP_get_trinomial_basis"}, - {ERR_FUNC(EC_F_EC_GROUP_NEW), "EC_GROUP_new"}, - {ERR_FUNC(EC_F_EC_GROUP_NEW_BY_CURVE_NAME), "EC_GROUP_new_by_curve_name"}, - {ERR_FUNC(EC_F_EC_GROUP_NEW_FROM_DATA), "ec_group_new_from_data"}, - {ERR_FUNC(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_NEW, 0), "EC_GROUP_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_NEW_BY_CURVE_NAME, 0), + "EC_GROUP_new_by_curve_name"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_NEW_FROM_DATA, 0), + "ec_group_new_from_data"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, 0), "EC_GROUP_new_from_ecparameters"}, - {ERR_FUNC(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, 0), "EC_GROUP_new_from_ecpkparameters"}, - {ERR_FUNC(EC_F_EC_GROUP_SET_CURVE_GF2M), "EC_GROUP_set_curve_GF2m"}, - {ERR_FUNC(EC_F_EC_GROUP_SET_CURVE_GFP), "EC_GROUP_set_curve_GFp"}, - {ERR_FUNC(EC_F_EC_GROUP_SET_GENERATOR), "EC_GROUP_set_generator"}, - {ERR_FUNC(EC_F_EC_KEY_CHECK_KEY), "EC_KEY_check_key"}, - {ERR_FUNC(EC_F_EC_KEY_COPY), "EC_KEY_copy"}, - {ERR_FUNC(EC_F_EC_KEY_GENERATE_KEY), "EC_KEY_generate_key"}, - {ERR_FUNC(EC_F_EC_KEY_NEW), "EC_KEY_new"}, - {ERR_FUNC(EC_F_EC_KEY_NEW_METHOD), "EC_KEY_new_method"}, - {ERR_FUNC(EC_F_EC_KEY_OCT2PRIV), "EC_KEY_oct2priv"}, - {ERR_FUNC(EC_F_EC_KEY_PRINT), "EC_KEY_print"}, - {ERR_FUNC(EC_F_EC_KEY_PRINT_FP), "EC_KEY_print_fp"}, - {ERR_FUNC(EC_F_EC_KEY_PRIV2OCT), "EC_KEY_priv2oct"}, - {ERR_FUNC(EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_SET_CURVE_GF2M, 0), + "EC_GROUP_set_curve_GF2m"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_SET_CURVE_GFP, 0), + "EC_GROUP_set_curve_GFp"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_GROUP_SET_GENERATOR, 0), + "EC_GROUP_set_generator"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_CHECK_KEY, 0), "EC_KEY_check_key"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_COPY, 0), "EC_KEY_copy"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_GENERATE_KEY, 0), "EC_KEY_generate_key"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_NEW, 0), "EC_KEY_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_NEW_METHOD, 0), "EC_KEY_new_method"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_OCT2PRIV, 0), "EC_KEY_oct2priv"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_PRINT, 0), "EC_KEY_print"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_PRINT_FP, 0), "EC_KEY_print_fp"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_PRIV2OCT, 0), "EC_KEY_priv2oct"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES, 0), "EC_KEY_set_public_key_affine_coordinates"}, - {ERR_FUNC(EC_F_EC_KEY_SIMPLE_CHECK_KEY), "ec_key_simple_check_key"}, - {ERR_FUNC(EC_F_EC_KEY_SIMPLE_OCT2PRIV), "ec_key_simple_oct2priv"}, - {ERR_FUNC(EC_F_EC_KEY_SIMPLE_PRIV2OCT), "ec_key_simple_priv2oct"}, - {ERR_FUNC(EC_F_EC_POINTS_MAKE_AFFINE), "EC_POINTs_make_affine"}, - {ERR_FUNC(EC_F_EC_POINT_ADD), "EC_POINT_add"}, - {ERR_FUNC(EC_F_EC_POINT_CMP), "EC_POINT_cmp"}, - {ERR_FUNC(EC_F_EC_POINT_COPY), "EC_POINT_copy"}, - {ERR_FUNC(EC_F_EC_POINT_DBL), "EC_POINT_dbl"}, - {ERR_FUNC(EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_SIMPLE_CHECK_KEY, 0), + "ec_key_simple_check_key"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_SIMPLE_OCT2PRIV, 0), + "ec_key_simple_oct2priv"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_KEY_SIMPLE_PRIV2OCT, 0), + "ec_key_simple_priv2oct"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_PKEY_CHECK, 0), "ec_pkey_check"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_PKEY_PARAM_CHECK, 0), "ec_pkey_param_check"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINTS_MAKE_AFFINE, 0), + "EC_POINTs_make_affine"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_ADD, 0), "EC_POINT_add"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_CMP, 0), "EC_POINT_cmp"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_COPY, 0), "EC_POINT_copy"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_DBL, 0), "EC_POINT_dbl"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M, 0), "EC_POINT_get_affine_coordinates_GF2m"}, - {ERR_FUNC(EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP, 0), "EC_POINT_get_affine_coordinates_GFp"}, - {ERR_FUNC(EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP, 0), "EC_POINT_get_Jprojective_coordinates_GFp"}, - {ERR_FUNC(EC_F_EC_POINT_INVERT), "EC_POINT_invert"}, - {ERR_FUNC(EC_F_EC_POINT_IS_AT_INFINITY), "EC_POINT_is_at_infinity"}, - {ERR_FUNC(EC_F_EC_POINT_IS_ON_CURVE), "EC_POINT_is_on_curve"}, - {ERR_FUNC(EC_F_EC_POINT_MAKE_AFFINE), "EC_POINT_make_affine"}, - {ERR_FUNC(EC_F_EC_POINT_NEW), "EC_POINT_new"}, - {ERR_FUNC(EC_F_EC_POINT_OCT2POINT), "EC_POINT_oct2point"}, - {ERR_FUNC(EC_F_EC_POINT_POINT2OCT), "EC_POINT_point2oct"}, - {ERR_FUNC(EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_INVERT, 0), "EC_POINT_invert"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_IS_AT_INFINITY, 0), + "EC_POINT_is_at_infinity"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_IS_ON_CURVE, 0), + "EC_POINT_is_on_curve"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_MAKE_AFFINE, 0), + "EC_POINT_make_affine"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_NEW, 0), "EC_POINT_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_OCT2POINT, 0), "EC_POINT_oct2point"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_POINT2OCT, 0), "EC_POINT_point2oct"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M, 0), "EC_POINT_set_affine_coordinates_GF2m"}, - {ERR_FUNC(EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP, 0), "EC_POINT_set_affine_coordinates_GFp"}, - {ERR_FUNC(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M, 0), "EC_POINT_set_compressed_coordinates_GF2m"}, - {ERR_FUNC(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP, 0), "EC_POINT_set_compressed_coordinates_GFp"}, - {ERR_FUNC(EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP), + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP, 0), "EC_POINT_set_Jprojective_coordinates_GFp"}, - {ERR_FUNC(EC_F_EC_POINT_SET_TO_INFINITY), "EC_POINT_set_to_infinity"}, - {ERR_FUNC(EC_F_EC_PRE_COMP_NEW), "ec_pre_comp_new"}, - {ERR_FUNC(EC_F_EC_WNAF_MUL), "ec_wNAF_mul"}, - {ERR_FUNC(EC_F_EC_WNAF_PRECOMPUTE_MULT), "ec_wNAF_precompute_mult"}, - {ERR_FUNC(EC_F_I2D_ECPARAMETERS), "i2d_ECParameters"}, - {ERR_FUNC(EC_F_I2D_ECPKPARAMETERS), "i2d_ECPKParameters"}, - {ERR_FUNC(EC_F_I2D_ECPRIVATEKEY), "i2d_ECPrivateKey"}, - {ERR_FUNC(EC_F_I2O_ECPUBLICKEY), "i2o_ECPublicKey"}, - {ERR_FUNC(EC_F_NISTP224_PRE_COMP_NEW), "nistp224_pre_comp_new"}, - {ERR_FUNC(EC_F_NISTP256_PRE_COMP_NEW), "nistp256_pre_comp_new"}, - {ERR_FUNC(EC_F_NISTP521_PRE_COMP_NEW), "nistp521_pre_comp_new"}, - {ERR_FUNC(EC_F_O2I_ECPUBLICKEY), "o2i_ECPublicKey"}, - {ERR_FUNC(EC_F_OLD_EC_PRIV_DECODE), "old_ec_priv_decode"}, - {ERR_FUNC(EC_F_OSSL_ECDH_COMPUTE_KEY), "ossl_ecdh_compute_key"}, - {ERR_FUNC(EC_F_OSSL_ECDSA_SIGN_SIG), "ossl_ecdsa_sign_sig"}, - {ERR_FUNC(EC_F_OSSL_ECDSA_VERIFY_SIG), "ossl_ecdsa_verify_sig"}, - {ERR_FUNC(EC_F_PKEY_ECX_DERIVE), "pkey_ecx_derive"}, - {ERR_FUNC(EC_F_PKEY_EC_CTRL), "pkey_ec_ctrl"}, - {ERR_FUNC(EC_F_PKEY_EC_CTRL_STR), "pkey_ec_ctrl_str"}, - {ERR_FUNC(EC_F_PKEY_EC_DERIVE), "pkey_ec_derive"}, - {ERR_FUNC(EC_F_PKEY_EC_KEYGEN), "pkey_ec_keygen"}, - {ERR_FUNC(EC_F_PKEY_EC_PARAMGEN), "pkey_ec_paramgen"}, - {ERR_FUNC(EC_F_PKEY_EC_SIGN), "pkey_ec_sign"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_POINT_SET_TO_INFINITY, 0), + "EC_POINT_set_to_infinity"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_PRE_COMP_NEW, 0), "ec_pre_comp_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_WNAF_MUL, 0), "ec_wNAF_mul"}, + {ERR_PACK(ERR_LIB_EC, EC_F_EC_WNAF_PRECOMPUTE_MULT, 0), + "ec_wNAF_precompute_mult"}, + {ERR_PACK(ERR_LIB_EC, EC_F_I2D_ECPARAMETERS, 0), "i2d_ECParameters"}, + {ERR_PACK(ERR_LIB_EC, EC_F_I2D_ECPKPARAMETERS, 0), "i2d_ECPKParameters"}, + {ERR_PACK(ERR_LIB_EC, EC_F_I2D_ECPRIVATEKEY, 0), "i2d_ECPrivateKey"}, + {ERR_PACK(ERR_LIB_EC, EC_F_I2O_ECPUBLICKEY, 0), "i2o_ECPublicKey"}, + {ERR_PACK(ERR_LIB_EC, EC_F_NISTP224_PRE_COMP_NEW, 0), + "nistp224_pre_comp_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_NISTP256_PRE_COMP_NEW, 0), + "nistp256_pre_comp_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_NISTP521_PRE_COMP_NEW, 0), + "nistp521_pre_comp_new"}, + {ERR_PACK(ERR_LIB_EC, EC_F_O2I_ECPUBLICKEY, 0), "o2i_ECPublicKey"}, + {ERR_PACK(ERR_LIB_EC, EC_F_OLD_EC_PRIV_DECODE, 0), "old_ec_priv_decode"}, + {ERR_PACK(ERR_LIB_EC, EC_F_OSSL_ECDH_COMPUTE_KEY, 0), + "ossl_ecdh_compute_key"}, + {ERR_PACK(ERR_LIB_EC, EC_F_OSSL_ECDSA_SIGN_SIG, 0), "ossl_ecdsa_sign_sig"}, + {ERR_PACK(ERR_LIB_EC, EC_F_OSSL_ECDSA_VERIFY_SIG, 0), + "ossl_ecdsa_verify_sig"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_ECD_CTRL, 0), "pkey_ecd_ctrl"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_ECD_DIGESTSIGN, 0), "pkey_ecd_digestsign"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_ECX_DERIVE, 0), "pkey_ecx_derive"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_EC_CTRL, 0), "pkey_ec_ctrl"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_EC_CTRL_STR, 0), "pkey_ec_ctrl_str"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_EC_DERIVE, 0), "pkey_ec_derive"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_EC_KEYGEN, 0), "pkey_ec_keygen"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_EC_PARAMGEN, 0), "pkey_ec_paramgen"}, + {ERR_PACK(ERR_LIB_EC, EC_F_PKEY_EC_SIGN, 0), "pkey_ec_sign"}, {0, NULL} }; -static ERR_STRING_DATA EC_str_reasons[] = { - {ERR_REASON(EC_R_ASN1_ERROR), "asn1 error"}, - {ERR_REASON(EC_R_BAD_SIGNATURE), "bad signature"}, - {ERR_REASON(EC_R_BIGNUM_OUT_OF_RANGE), "bignum out of range"}, - {ERR_REASON(EC_R_BUFFER_TOO_SMALL), "buffer too small"}, - {ERR_REASON(EC_R_COORDINATES_OUT_OF_RANGE), "coordinates out of range"}, - {ERR_REASON(EC_R_CURVE_DOES_NOT_SUPPORT_ECDH), - "curve does not support ecdh"}, - {ERR_REASON(EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING), - "curve does not support signing"}, - {ERR_REASON(EC_R_D2I_ECPKPARAMETERS_FAILURE), - "d2i ecpkparameters failure"}, - {ERR_REASON(EC_R_DECODE_ERROR), "decode error"}, - {ERR_REASON(EC_R_DISCRIMINANT_IS_ZERO), "discriminant is zero"}, - {ERR_REASON(EC_R_EC_GROUP_NEW_BY_NAME_FAILURE), - "ec group new by name failure"}, - {ERR_REASON(EC_R_FIELD_TOO_LARGE), "field too large"}, - {ERR_REASON(EC_R_GF2M_NOT_SUPPORTED), "gf2m not supported"}, - {ERR_REASON(EC_R_GROUP2PKPARAMETERS_FAILURE), - "group2pkparameters failure"}, - {ERR_REASON(EC_R_I2D_ECPKPARAMETERS_FAILURE), - "i2d ecpkparameters failure"}, - {ERR_REASON(EC_R_INCOMPATIBLE_OBJECTS), "incompatible objects"}, - {ERR_REASON(EC_R_INVALID_ARGUMENT), "invalid argument"}, - {ERR_REASON(EC_R_INVALID_COMPRESSED_POINT), "invalid compressed point"}, - {ERR_REASON(EC_R_INVALID_COMPRESSION_BIT), "invalid compression bit"}, - {ERR_REASON(EC_R_INVALID_CURVE), "invalid curve"}, - {ERR_REASON(EC_R_INVALID_DIGEST), "invalid digest"}, - {ERR_REASON(EC_R_INVALID_DIGEST_TYPE), "invalid digest type"}, - {ERR_REASON(EC_R_INVALID_ENCODING), "invalid encoding"}, - {ERR_REASON(EC_R_INVALID_FIELD), "invalid field"}, - {ERR_REASON(EC_R_INVALID_FORM), "invalid form"}, - {ERR_REASON(EC_R_INVALID_GROUP_ORDER), "invalid group order"}, - {ERR_REASON(EC_R_INVALID_KEY), "invalid key"}, - {ERR_REASON(EC_R_INVALID_OUTPUT_LENGTH), "invalid output length"}, - {ERR_REASON(EC_R_INVALID_PEER_KEY), "invalid peer key"}, - {ERR_REASON(EC_R_INVALID_PENTANOMIAL_BASIS), "invalid pentanomial basis"}, - {ERR_REASON(EC_R_INVALID_PRIVATE_KEY), "invalid private key"}, - {ERR_REASON(EC_R_INVALID_TRINOMIAL_BASIS), "invalid trinomial basis"}, - {ERR_REASON(EC_R_KDF_PARAMETER_ERROR), "kdf parameter error"}, - {ERR_REASON(EC_R_KEYS_NOT_SET), "keys not set"}, - {ERR_REASON(EC_R_MISSING_PARAMETERS), "missing parameters"}, - {ERR_REASON(EC_R_MISSING_PRIVATE_KEY), "missing private key"}, - {ERR_REASON(EC_R_NEED_NEW_SETUP_VALUES), "need new setup values"}, - {ERR_REASON(EC_R_NOT_A_NIST_PRIME), "not a NIST prime"}, - {ERR_REASON(EC_R_NOT_IMPLEMENTED), "not implemented"}, - {ERR_REASON(EC_R_NOT_INITIALIZED), "not initialized"}, - {ERR_REASON(EC_R_NO_PARAMETERS_SET), "no parameters set"}, - {ERR_REASON(EC_R_NO_PRIVATE_VALUE), "no private value"}, - {ERR_REASON(EC_R_OPERATION_NOT_SUPPORTED), "operation not supported"}, - {ERR_REASON(EC_R_PASSED_NULL_PARAMETER), "passed null parameter"}, - {ERR_REASON(EC_R_PEER_KEY_ERROR), "peer key error"}, - {ERR_REASON(EC_R_PKPARAMETERS2GROUP_FAILURE), - "pkparameters2group failure"}, - {ERR_REASON(EC_R_POINT_ARITHMETIC_FAILURE), "point arithmetic failure"}, - {ERR_REASON(EC_R_POINT_AT_INFINITY), "point at infinity"}, - {ERR_REASON(EC_R_POINT_IS_NOT_ON_CURVE), "point is not on curve"}, - {ERR_REASON(EC_R_RANDOM_NUMBER_GENERATION_FAILED), - "random number generation failed"}, - {ERR_REASON(EC_R_SHARED_INFO_ERROR), "shared info error"}, - {ERR_REASON(EC_R_SLOT_FULL), "slot full"}, - {ERR_REASON(EC_R_UNDEFINED_GENERATOR), "undefined generator"}, - {ERR_REASON(EC_R_UNDEFINED_ORDER), "undefined order"}, - {ERR_REASON(EC_R_UNKNOWN_GROUP), "unknown group"}, - {ERR_REASON(EC_R_UNKNOWN_ORDER), "unknown order"}, - {ERR_REASON(EC_R_UNSUPPORTED_FIELD), "unsupported field"}, - {ERR_REASON(EC_R_WRONG_CURVE_PARAMETERS), "wrong curve parameters"}, - {ERR_REASON(EC_R_WRONG_ORDER), "wrong order"}, +static const ERR_STRING_DATA EC_str_reasons[] = { + {ERR_PACK(ERR_LIB_EC, 0, EC_R_ASN1_ERROR), "asn1 error"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_BAD_SIGNATURE), "bad signature"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_BIGNUM_OUT_OF_RANGE), "bignum out of range"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_COORDINATES_OUT_OF_RANGE), + "coordinates out of range"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_CURVE_DOES_NOT_SUPPORT_ECDH), + "curve does not support ecdh"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING), + "curve does not support signing"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_D2I_ECPKPARAMETERS_FAILURE), + "d2i ecpkparameters failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_DECODE_ERROR), "decode error"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_DISCRIMINANT_IS_ZERO), + "discriminant is zero"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_EC_GROUP_NEW_BY_NAME_FAILURE), + "ec group new by name failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_FIELD_TOO_LARGE), "field too large"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_GF2M_NOT_SUPPORTED), "gf2m not supported"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_GROUP2PKPARAMETERS_FAILURE), + "group2pkparameters failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_I2D_ECPKPARAMETERS_FAILURE), + "i2d ecpkparameters failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INCOMPATIBLE_OBJECTS), + "incompatible objects"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_ARGUMENT), "invalid argument"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_COMPRESSED_POINT), + "invalid compressed point"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_COMPRESSION_BIT), + "invalid compression bit"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_CURVE), "invalid curve"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_DIGEST), "invalid digest"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_DIGEST_TYPE), "invalid digest type"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_ENCODING), "invalid encoding"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_FIELD), "invalid field"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_FORM), "invalid form"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_GROUP_ORDER), "invalid group order"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_KEY), "invalid key"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_OUTPUT_LENGTH), + "invalid output length"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_PEER_KEY), "invalid peer key"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_PENTANOMIAL_BASIS), + "invalid pentanomial basis"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_PRIVATE_KEY), "invalid private key"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_INVALID_TRINOMIAL_BASIS), + "invalid trinomial basis"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_KDF_PARAMETER_ERROR), "kdf parameter error"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_KEYS_NOT_SET), "keys not set"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PARAMETERS), "missing parameters"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PRIVATE_KEY), "missing private key"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_NEED_NEW_SETUP_VALUES), + "need new setup values"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_NOT_A_NIST_PRIME), "not a NIST prime"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_NOT_IMPLEMENTED), "not implemented"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_NOT_INITIALIZED), "not initialized"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_NO_PARAMETERS_SET), "no parameters set"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_NO_PRIVATE_VALUE), "no private value"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_OPERATION_NOT_SUPPORTED), + "operation not supported"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_PASSED_NULL_PARAMETER), + "passed null parameter"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_PEER_KEY_ERROR), "peer key error"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_PKPARAMETERS2GROUP_FAILURE), + "pkparameters2group failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_POINT_ARITHMETIC_FAILURE), + "point arithmetic failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_POINT_AT_INFINITY), "point at infinity"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_POINT_IS_NOT_ON_CURVE), + "point is not on curve"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_RANDOM_NUMBER_GENERATION_FAILED), + "random number generation failed"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_SHARED_INFO_ERROR), "shared info error"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_SLOT_FULL), "slot full"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNDEFINED_GENERATOR), "undefined generator"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNDEFINED_ORDER), "undefined order"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNKNOWN_GROUP), "unknown group"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNKNOWN_ORDER), "unknown order"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_UNSUPPORTED_FIELD), "unsupported field"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_WRONG_CURVE_PARAMETERS), + "wrong curve parameters"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_WRONG_ORDER), "wrong order"}, {0, NULL} }; @@ -282,10 +342,9 @@ static ERR_STRING_DATA EC_str_reasons[] = { int ERR_load_EC_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(EC_str_functs[0].error) == NULL) { - ERR_load_strings(0, EC_str_functs); - ERR_load_strings(0, EC_str_reasons); + ERR_load_strings_const(EC_str_functs); + ERR_load_strings_const(EC_str_reasons); } #endif return 1; diff --git a/crypto/ec/ec_key.c b/crypto/ec/ec_key.c index f1f0afb4..38745531 100644 --- a/crypto/ec/ec_key.c +++ b/crypto/ec/ec_key.c @@ -1,5 +1,6 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2017 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 @@ -7,15 +8,10 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions originally developed by SUN MICROSYSTEMS, INC., and - * contributed to the OpenSSL project. - */ - -#include +#include "internal/cryptlib.h" #include #include "ec_lcl.h" +#include "internal/refcount.h" #include #include @@ -49,7 +45,7 @@ void EC_KEY_free(EC_KEY *r) if (r == NULL) return; - CRYPTO_atomic_add(&r->references, -1, &i, r->lock); + CRYPTO_DOWN_REF(&r->references, &i, r->lock); REF_PRINT_COUNT("EC_KEY", r); if (i > 0) return; @@ -169,7 +165,7 @@ int EC_KEY_up_ref(EC_KEY *r) { int i; - if (CRYPTO_atomic_add(&r->references, 1, &i, r->lock) <= 0) + if (CRYPTO_UP_REF(&r->references, &i, r->lock) <= 0) return 0; REF_PRINT_COUNT("EC_KEY", r); @@ -177,6 +173,11 @@ int EC_KEY_up_ref(EC_KEY *r) return ((i > 1) ? 1 : 0); } +ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey) +{ + return eckey->engine; +} + int EC_KEY_generate_key(EC_KEY *eckey) { if (eckey == NULL || eckey->group == NULL) { @@ -191,7 +192,6 @@ int EC_KEY_generate_key(EC_KEY *eckey) int ossl_ec_key_gen(EC_KEY *eckey) { - OPENSSL_assert(eckey->group->meth->keygen != NULL); return eckey->group->meth->keygen(eckey); } @@ -218,7 +218,7 @@ int ec_key_simple_generate_key(EC_KEY *eckey) goto err; do - if (!BN_rand_range(priv_key, order)) + if (!BN_priv_rand_range(priv_key, order)) goto err; while (BN_is_zero(priv_key)) ; diff --git a/crypto/ec/ec_lcl.h b/crypto/ec/ec_lcl.h index 53db327f..421cd470 100644 --- a/crypto/ec/ec_lcl.h +++ b/crypto/ec/ec_lcl.h @@ -1,5 +1,6 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-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 @@ -7,27 +8,12 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * Portions of the attached software ("Contribution") are developed by - * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project. - * - * The Contribution is licensed pursuant to the OpenSSL open source - * license provided above. - * - * The elliptic curve binary polynomial software is originally written by - * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories. - * - */ - #include #include #include #include - -#include "e_os.h" +#include "internal/refcount.h" #if defined(__SUNPRO_C) # if __SUNPRO_C >= 0x520 @@ -264,7 +250,7 @@ struct ec_key_st { BIGNUM *priv_key; unsigned int enc_flag; point_conversion_form_t conv_form; - int references; + CRYPTO_REF_COUNT references; int flags; CRYPTO_EX_DATA ex_data; CRYPTO_RWLOCK *lock; @@ -609,6 +595,13 @@ int ossl_ecdsa_verify(int type, const unsigned char *dgst, int dgst_len, int ossl_ecdsa_verify_sig(const unsigned char *dgst, int dgst_len, const ECDSA_SIG *sig, EC_KEY *eckey); +int ED25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, + const uint8_t public_key[32], const uint8_t private_key[32]); +int ED25519_verify(const uint8_t *message, size_t message_len, + const uint8_t signature[64], const uint8_t public_key[32]); +void ED25519_public_from_private(uint8_t out_public_key[32], + const uint8_t private_key[32]); + int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32], const uint8_t peer_public_value[32]); void X25519_public_from_private(uint8_t out_public_value[32], diff --git a/crypto/ec/ec_lib.c b/crypto/ec/ec_lib.c index a74a96c6..d98ffae6 100644 --- a/crypto/ec/ec_lib.c +++ b/crypto/ec/ec_lib.c @@ -1,5 +1,6 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Binary polynomial ECC support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #include #include @@ -66,13 +61,13 @@ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth) void EC_pre_comp_free(EC_GROUP *group) { switch (group->pre_comp_type) { - default: + case PCT_none: break; -#ifdef ECP_NISTZ256_REFERENCE_IMPLEMENTATION case PCT_nistz256: +#ifdef ECP_NISTZ256_ASM EC_nistz256_pre_comp_free(group->pre_comp.nistz256); - break; #endif + break; #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 case PCT_nistp224: EC_nistp224_pre_comp_free(group->pre_comp.nistp224); @@ -83,6 +78,11 @@ void EC_pre_comp_free(EC_GROUP *group) case PCT_nistp521: EC_nistp521_pre_comp_free(group->pre_comp.nistp521); break; +#else + case PCT_nistp224: + case PCT_nistp256: + case PCT_nistp521: + break; #endif case PCT_ec: EC_ec_pre_comp_free(group->pre_comp.ec); @@ -143,14 +143,14 @@ int EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src) /* Copy precomputed */ dest->pre_comp_type = src->pre_comp_type; switch (src->pre_comp_type) { - default: + case PCT_none: dest->pre_comp.ec = NULL; break; -#ifdef ECP_NISTZ256_REFERENCE_IMPLEMENTATION case PCT_nistz256: +#ifdef ECP_NISTZ256_ASM dest->pre_comp.nistz256 = EC_nistz256_pre_comp_dup(src->pre_comp.nistz256); - break; #endif + break; #ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 case PCT_nistp224: dest->pre_comp.nistp224 = EC_nistp224_pre_comp_dup(src->pre_comp.nistp224); @@ -161,6 +161,11 @@ int EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src) case PCT_nistp521: dest->pre_comp.nistp521 = EC_nistp521_pre_comp_dup(src->pre_comp.nistp521); break; +#else + case PCT_nistp224: + case PCT_nistp256: + case PCT_nistp521: + break; #endif case PCT_ec: dest->pre_comp.ec = EC_ec_pre_comp_dup(src->pre_comp.ec); @@ -232,7 +237,7 @@ EC_GROUP *EC_GROUP_dup(const EC_GROUP *a) return NULL; if ((t = EC_GROUP_new(a->meth)) == NULL) - return (NULL); + return NULL; if (!EC_GROUP_copy(t, a)) goto err; @@ -327,7 +332,6 @@ const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group) int EC_GROUP_order_bits(const EC_GROUP *group) { - OPENSSL_assert(group->meth->group_order_bits != NULL); return group->meth->group_order_bits(group); } @@ -621,7 +625,7 @@ EC_POINT *EC_POINT_dup(const EC_POINT *a, const EC_GROUP *group) t = EC_POINT_new(group); if (t == NULL) - return (NULL); + return NULL; r = EC_POINT_copy(t, a); if (!r) { EC_POINT_free(t); diff --git a/crypto/ec/ec_mult.c b/crypto/ec/ec_mult.c index b39777fb..ed26b68c 100644 --- a/crypto/ec/ec_mult.c +++ b/crypto/ec/ec_mult.c @@ -1,5 +1,6 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2017 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 @@ -7,18 +8,13 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions of this software developed by SUN MICROSYSTEMS, INC., - * and contributed to the OpenSSL project. - */ - #include #include #include "internal/cryptlib.h" #include "internal/bn_int.h" #include "ec_lcl.h" +#include "internal/refcount.h" /* * This file implements the wNAF-based interleaving multi-exponentiation method @@ -42,7 +38,7 @@ struct ec_pre_comp_st { * generator: 'num' pointers to EC_POINT * objects followed by a NULL */ size_t num; /* numblocks * 2^(w-1) */ - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -77,7 +73,7 @@ EC_PRE_COMP *EC_ec_pre_comp_dup(EC_PRE_COMP *pre) { int i; if (pre != NULL) - CRYPTO_atomic_add(&pre->references, 1, &i, pre->lock); + CRYPTO_UP_REF(&pre->references, &i, pre->lock); return pre; } @@ -88,7 +84,7 @@ void EC_ec_pre_comp_free(EC_PRE_COMP *pre) if (pre == NULL) return; - CRYPTO_atomic_add(&pre->references, -1, &i, pre->lock); + CRYPTO_DOWN_REF(&pre->references, &i, pre->lock); REF_PRINT_COUNT("EC_ec", pre); if (i > 0) return; diff --git a/crypto/ec/ec_oct.c b/crypto/ec/ec_oct.c index effc42a3..4a3e54ae 100644 --- a/crypto/ec/ec_oct.c +++ b/crypto/ec/ec_oct.c @@ -1,5 +1,6 @@ /* * Copyright 2011-2016 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Binary polynomial ECC support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #include #include diff --git a/crypto/ec/ecdh_ossl.c b/crypto/ec/ecdh_ossl.c index a8651459..3302050c 100644 --- a/crypto/ec/ecdh_ossl.c +++ b/crypto/ec/ecdh_ossl.c @@ -1,5 +1,6 @@ /* * Copyright 2002-2016 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 @@ -7,21 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * - * The Elliptic Curve Public-Key Crypto Library (ECC Code) included - * herein is developed by SUN MICROSYSTEMS, INC., and is contributed - * to the OpenSSL project. - * - * The ECC Code is licensed pursuant to the OpenSSL open source - * license provided below. - * - * The ECDH software is originally written by Douglas Stebila of - * Sun Microsystems Laboratories. - * - */ - #include #include diff --git a/crypto/ec/ecdsa_ossl.c b/crypto/ec/ecdsa_ossl.c index 8f07b16f..2c9e5a88 100644 --- a/crypto/ec/ecdsa_ossl.c +++ b/crypto/ec/ecdsa_ossl.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -20,7 +20,7 @@ int ossl_ecdsa_sign(int type, const unsigned char *dgst, int dlen, const BIGNUM *kinv, const BIGNUM *r, EC_KEY *eckey) { ECDSA_SIG *s; - RAND_seed(dgst, dlen); + s = ECDSA_do_sign_ex(dgst, dlen, kinv, r, eckey); if (s == NULL) { *siglen = 0; @@ -97,7 +97,7 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, goto err; } } else { - if (!BN_rand_range(k, order)) { + if (!BN_priv_rand_range(k, order)) { ECerr(EC_F_ECDSA_SIGN_SETUP, EC_R_RANDOM_NUMBER_GENERATION_FAILED); goto err; @@ -199,7 +199,7 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BN_CTX_free(ctx); EC_POINT_free(tmp_point); BN_clear_free(X); - return (ret); + return ret; } int ossl_ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp, @@ -301,7 +301,7 @@ ECDSA_SIG *ossl_ecdsa_sign_sig(const unsigned char *dgst, int dgst_len, } if (BN_is_zero(s)) { /* - * if kinv and r have been supplied by the caller don't to + * if kinv and r have been supplied by the caller, don't * generate new kinv and r values */ if (in_kinv != NULL && in_r != NULL) { @@ -344,7 +344,7 @@ int ossl_ecdsa_verify(int type, const unsigned char *dgst, int dgst_len, s = ECDSA_SIG_new(); if (s == NULL) - return (ret); + return ret; if (d2i_ECDSA_SIG(&s, &p, sig_len) == NULL) goto err; /* Ensure signature uses DER and doesn't have trailing garbage */ @@ -355,7 +355,7 @@ int ossl_ecdsa_verify(int type, const unsigned char *dgst, int dgst_len, err: OPENSSL_clear_free(der, derlen); ECDSA_SIG_free(s); - return (ret); + return ret; } int ossl_ecdsa_verify_sig(const unsigned char *dgst, int dgst_len, diff --git a/crypto/ec/eck_prn.c b/crypto/ec/eck_prn.c index 3e826cb1..2e501b2d 100644 --- a/crypto/ec/eck_prn.c +++ b/crypto/ec/eck_prn.c @@ -1,5 +1,6 @@ /* * Copyright 2006-2016 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions originally developed by SUN MICROSYSTEMS, INC., and - * contributed to the OpenSSL project. - */ - #include #include "internal/cryptlib.h" #include @@ -27,12 +22,12 @@ int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off) if ((b = BIO_new(BIO_s_file())) == NULL) { ECerr(EC_F_ECPKPARAMETERS_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = ECPKParameters_print(b, x, off); BIO_free(b); - return (ret); + return ret; } int EC_KEY_print_fp(FILE *fp, const EC_KEY *x, int off) @@ -42,12 +37,12 @@ int EC_KEY_print_fp(FILE *fp, const EC_KEY *x, int off) if ((b = BIO_new(BIO_s_file())) == NULL) { ECerr(EC_F_EC_KEY_PRINT_FP, ERR_R_BIO_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = EC_KEY_print(b, x, off); BIO_free(b); - return (ret); + return ret; } int ECParameters_print_fp(FILE *fp, const EC_KEY *x) @@ -57,12 +52,12 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *x) if ((b = BIO_new(BIO_s_file())) == NULL) { ECerr(EC_F_ECPARAMETERS_PRINT_FP, ERR_R_BIO_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = ECParameters_print(b, x); BIO_free(b); - return (ret); + return ret; } #endif @@ -231,7 +226,7 @@ int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off) BN_free(b); BN_free(gen); BN_CTX_free(ctx); - return (ret); + return ret; } static int print_bin(BIO *fp, const char *name, const unsigned char *buf, diff --git a/crypto/ec/ecp_mont.c b/crypto/ec/ecp_mont.c index 994cc1d0..1a760d12 100644 --- a/crypto/ec/ecp_mont.c +++ b/crypto/ec/ecp_mont.c @@ -1,5 +1,6 @@ /* * Copyright 2001-2016 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions of this software developed by SUN MICROSYSTEMS, INC., - * and contributed to the OpenSSL project. - */ - #include #include "ec_lcl.h" diff --git a/crypto/ec/ecp_nist.c b/crypto/ec/ecp_nist.c index 615563bc..16c4cce3 100644 --- a/crypto/ec/ecp_nist.c +++ b/crypto/ec/ecp_nist.c @@ -1,5 +1,6 @@ /* * Copyright 2001-2016 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions of this software developed by SUN MICROSYSTEMS, INC., - * and contributed to the OpenSSL project. - */ - #include #include diff --git a/crypto/ec/ecp_nistp224.c b/crypto/ec/ecp_nistp224.c index 0cd994fc..4ece15c9 100644 --- a/crypto/ec/ecp_nistp224.c +++ b/crypto/ec/ecp_nistp224.c @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-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 @@ -40,12 +40,12 @@ NON_EMPTY_TRANSLATION_UNIT # include # include "ec_lcl.h" -# if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 /* even with gcc, the typedef won't work for 32-bit platforms */ typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit * platforms */ # else -# error "Need GCC 3.1 or later to define type uint128_t" +# error "Need GCC 4.0 or later to define type uint128_t" # endif typedef uint8_t u8; @@ -78,7 +78,7 @@ typedef limb felem[4]; typedef widelimb widefelem[7]; /* - * Field element represented as a byte arrary. 28*8 = 224 bits is also the + * Field element represented as a byte array. 28*8 = 224 bits is also the * group order size for the elliptic curve, and we also use this type for * scalars for point multiplication. */ @@ -235,7 +235,7 @@ static const felem gmul[2][16][3] = { /* Precomputation for the group generator. */ struct nistp224_pre_comp_st { felem g_pre_comp[2][16][3]; - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -1238,7 +1238,7 @@ NISTP224_PRE_COMP *EC_nistp224_pre_comp_dup(NISTP224_PRE_COMP *p) { int i; if (p != NULL) - CRYPTO_atomic_add(&p->references, 1, &i, p->lock); + CRYPTO_UP_REF(&p->references, &i, p->lock); return p; } @@ -1249,7 +1249,7 @@ void EC_nistp224_pre_comp_free(NISTP224_PRE_COMP *p) if (p == NULL) return; - CRYPTO_atomic_add(&p->references, -1, &i, p->lock); + CRYPTO_DOWN_REF(&p->references, &i, p->lock); REF_PRINT_COUNT("EC_nistp224", x); if (i > 0) return; @@ -1284,9 +1284,10 @@ int ec_GFp_nistp224_group_set_curve(EC_GROUP *group, const BIGNUM *p, if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((curve_p = BN_CTX_get(ctx)) == NULL) || - ((curve_a = BN_CTX_get(ctx)) == NULL) || - ((curve_b = BN_CTX_get(ctx)) == NULL)) + curve_p = BN_CTX_get(ctx); + curve_a = BN_CTX_get(ctx); + curve_b = BN_CTX_get(ctx); + if (curve_b == NULL) goto err; BN_bin2bn(nistp224_curve_params[0], sizeof(felem_bytearray), curve_p); BN_bin2bn(nistp224_curve_params[1], sizeof(felem_bytearray), curve_a); @@ -1415,10 +1416,11 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r, if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((x = BN_CTX_get(ctx)) == NULL) || - ((y = BN_CTX_get(ctx)) == NULL) || - ((z = BN_CTX_get(ctx)) == NULL) || - ((tmp_scalar = BN_CTX_get(ctx)) == NULL)) + x = BN_CTX_get(ctx); + y = BN_CTX_get(ctx); + z = BN_CTX_get(ctx); + tmp_scalar = BN_CTX_get(ctx); + if (tmp_scalar == NULL) goto err; if (scalar != NULL) { @@ -1598,7 +1600,9 @@ int ec_GFp_nistp224_precompute_mult(EC_GROUP *group, BN_CTX *ctx) if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((x = BN_CTX_get(ctx)) == NULL) || ((y = BN_CTX_get(ctx)) == NULL)) + x = BN_CTX_get(ctx); + y = BN_CTX_get(ctx); + if (y == NULL) goto err; /* get the generator */ if (group->generator == NULL) diff --git a/crypto/ec/ecp_nistp256.c b/crypto/ec/ecp_nistp256.c index ffd2a7d9..5eee25cd 100644 --- a/crypto/ec/ecp_nistp256.c +++ b/crypto/ec/ecp_nistp256.c @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -41,13 +41,13 @@ NON_EMPTY_TRANSLATION_UNIT # include # include "ec_lcl.h" -# if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 /* even with gcc, the typedef won't work for 32-bit platforms */ typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit * platforms */ typedef __int128_t int128_t; # else -# error "Need GCC 3.1 or later to define type uint128_t" +# error "Need GCC 4.0 or later to define type uint128_t" # endif typedef uint8_t u8; @@ -1766,7 +1766,7 @@ static void batch_mul(felem x_out, felem y_out, felem z_out, /* Precomputation for the group generator. */ struct nistp256_pre_comp_st { smallfelem g_pre_comp[2][16][3]; - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -1856,7 +1856,7 @@ NISTP256_PRE_COMP *EC_nistp256_pre_comp_dup(NISTP256_PRE_COMP *p) { int i; if (p != NULL) - CRYPTO_atomic_add(&p->references, 1, &i, p->lock); + CRYPTO_UP_REF(&p->references, &i, p->lock); return p; } @@ -1867,7 +1867,7 @@ void EC_nistp256_pre_comp_free(NISTP256_PRE_COMP *pre) if (pre == NULL) return; - CRYPTO_atomic_add(&pre->references, -1, &i, pre->lock); + CRYPTO_DOWN_REF(&pre->references, &i, pre->lock); REF_PRINT_COUNT("EC_nistp256", x); if (i > 0) return; @@ -1902,9 +1902,10 @@ int ec_GFp_nistp256_group_set_curve(EC_GROUP *group, const BIGNUM *p, if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((curve_p = BN_CTX_get(ctx)) == NULL) || - ((curve_a = BN_CTX_get(ctx)) == NULL) || - ((curve_b = BN_CTX_get(ctx)) == NULL)) + curve_p = BN_CTX_get(ctx); + curve_a = BN_CTX_get(ctx); + curve_b = BN_CTX_get(ctx); + if (curve_b == NULL) goto err; BN_bin2bn(nistp256_curve_params[0], sizeof(felem_bytearray), curve_p); BN_bin2bn(nistp256_curve_params[1], sizeof(felem_bytearray), curve_a); @@ -2034,10 +2035,11 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r, if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((x = BN_CTX_get(ctx)) == NULL) || - ((y = BN_CTX_get(ctx)) == NULL) || - ((z = BN_CTX_get(ctx)) == NULL) || - ((tmp_scalar = BN_CTX_get(ctx)) == NULL)) + x = BN_CTX_get(ctx); + y = BN_CTX_get(ctx); + z = BN_CTX_get(ctx); + tmp_scalar = BN_CTX_get(ctx); + if (tmp_scalar == NULL) goto err; if (scalar != NULL) { @@ -2224,7 +2226,9 @@ int ec_GFp_nistp256_precompute_mult(EC_GROUP *group, BN_CTX *ctx) if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((x = BN_CTX_get(ctx)) == NULL) || ((y = BN_CTX_get(ctx)) == NULL)) + x = BN_CTX_get(ctx); + y = BN_CTX_get(ctx); + if (y == NULL) goto err; /* get the generator */ if (group->generator == NULL) diff --git a/crypto/ec/ecp_nistp521.c b/crypto/ec/ecp_nistp521.c index 133f089f..97846f85 100644 --- a/crypto/ec/ecp_nistp521.c +++ b/crypto/ec/ecp_nistp521.c @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,12 +40,12 @@ NON_EMPTY_TRANSLATION_UNIT # include # include "ec_lcl.h" -# if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 /* even with gcc, the typedef won't work for 32-bit platforms */ typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit * platforms */ # else -# error "Need GCC 3.1 or later to define type uint128_t" +# error "Need GCC 4.0 or later to define type uint128_t" # endif typedef uint8_t u8; @@ -1156,9 +1156,9 @@ static void copy_conditional(felem out, const felem in, limb mask) * adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity). * * This function includes a branch for checking whether the two input points - * are equal (while not equal to the point at infinity). This case never - * happens during single point multiplication, so there is no timing leak for - * ECDH or ECDSA signing. */ + * are equal (while not equal to the point at infinity). See comment below + * on constant-time. + */ static void point_add(felem x3, felem y3, felem z3, const felem x1, const felem y1, const felem z1, const int mixed, const felem x2, const felem y2, @@ -1252,6 +1252,22 @@ static void point_add(felem x3, felem y3, felem z3, /* ftmp5[i] < 2^61 */ if (x_equal && y_equal && !z1_is_zero && !z2_is_zero) { + /* + * This is obviously not constant-time but it will almost-never happen + * for ECDH / ECDSA. The case where it can happen is during scalar-mult + * where the intermediate value gets very close to the group order. + * Since |ec_GFp_nistp_recode_scalar_bits| produces signed digits for + * the scalar, it's possible for the intermediate value to be a small + * negative multiple of the base point, and for the final signed digit + * to be the same value. We believe that this only occurs for the scalar + * 1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + * ffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb + * 71e913863f7, in that case the penultimate intermediate is -9G and + * the final digit is also -9G. Since this only happens for a single + * scalar, the timing leak is irrelevent. (Any attacker who wanted to + * check whether a secret scalar was that exact value, can already do + * so.) + */ point_double(x3, y3, z3, x1, y1, z1); return; } @@ -1587,7 +1603,7 @@ static void batch_mul(felem x_out, felem y_out, felem z_out, /* Precomputation for the group generator. */ struct nistp521_pre_comp_st { felem g_pre_comp[16][3]; - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -1677,7 +1693,7 @@ NISTP521_PRE_COMP *EC_nistp521_pre_comp_dup(NISTP521_PRE_COMP *p) { int i; if (p != NULL) - CRYPTO_atomic_add(&p->references, 1, &i, p->lock); + CRYPTO_UP_REF(&p->references, &i, p->lock); return p; } @@ -1688,7 +1704,7 @@ void EC_nistp521_pre_comp_free(NISTP521_PRE_COMP *p) if (p == NULL) return; - CRYPTO_atomic_add(&p->references, -1, &i, p->lock); + CRYPTO_DOWN_REF(&p->references, &i, p->lock); REF_PRINT_COUNT("EC_nistp521", x); if (i > 0) return; @@ -1723,9 +1739,10 @@ int ec_GFp_nistp521_group_set_curve(EC_GROUP *group, const BIGNUM *p, if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((curve_p = BN_CTX_get(ctx)) == NULL) || - ((curve_a = BN_CTX_get(ctx)) == NULL) || - ((curve_b = BN_CTX_get(ctx)) == NULL)) + curve_p = BN_CTX_get(ctx); + curve_a = BN_CTX_get(ctx); + curve_b = BN_CTX_get(ctx); + if (curve_b == NULL) goto err; BN_bin2bn(nistp521_curve_params[0], sizeof(felem_bytearray), curve_p); BN_bin2bn(nistp521_curve_params[1], sizeof(felem_bytearray), curve_a); @@ -1854,10 +1871,11 @@ int ec_GFp_nistp521_points_mul(const EC_GROUP *group, EC_POINT *r, if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((x = BN_CTX_get(ctx)) == NULL) || - ((y = BN_CTX_get(ctx)) == NULL) || - ((z = BN_CTX_get(ctx)) == NULL) || - ((tmp_scalar = BN_CTX_get(ctx)) == NULL)) + x = BN_CTX_get(ctx); + y = BN_CTX_get(ctx); + z = BN_CTX_get(ctx); + tmp_scalar = BN_CTX_get(ctx); + if (tmp_scalar == NULL) goto err; if (scalar != NULL) { @@ -2041,7 +2059,9 @@ int ec_GFp_nistp521_precompute_mult(EC_GROUP *group, BN_CTX *ctx) if ((ctx = new_ctx = BN_CTX_new()) == NULL) return 0; BN_CTX_start(ctx); - if (((x = BN_CTX_get(ctx)) == NULL) || ((y = BN_CTX_get(ctx)) == NULL)) + x = BN_CTX_get(ctx); + y = BN_CTX_get(ctx); + if (y == NULL) goto err; /* get the generator */ if (group->generator == NULL) diff --git a/crypto/ec/ecp_nistz256.c b/crypto/ec/ecp_nistz256.c index cecc6f02..4580f70b 100644 --- a/crypto/ec/ecp_nistz256.c +++ b/crypto/ec/ecp_nistz256.c @@ -1,47 +1,29 @@ /* - * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2014, Intel Corporation. All Rights Reserved. * Copyright (c) 2015, CloudFlare, Inc. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html + * + * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1, 3) + * (1) Intel Corporation, Israel Development Center, Haifa, Israel + * (2) University of Haifa, Israel + * (3) CloudFlare, Inc. + * + * Reference: + * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with + * 256 Bit Primes" */ -/****************************************************************************** - * * - * Copyright 2014 Intel Corporation * - * * - * Licensed under the Apache License, Version 2.0 (the "License"); * - * you may not use this file except in compliance with the License. * - * You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, software * - * distributed under the License is distributed on an "AS IS" BASIS, * - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * - * See the License for the specific language governing permissions and * - * limitations under the License. * - * * - ****************************************************************************** - * * - * Developers and authors: * - * Shay Gueron (1, 2), and Vlad Krasnov (1) * - * (1) Intel Corporation, Israel Development Center * - * (2) University of Haifa * - * (3) CloudFlare, Inc. * - * Reference: * - * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with * - * 256 Bit Primes" * - * * - ******************************************************************************/ - #include #include "internal/cryptlib.h" #include "internal/bn_int.h" #include "ec_lcl.h" +#include "internal/refcount.h" #if BN_BITS2 != 64 # define TOBN(hi,lo) lo,hi @@ -86,7 +68,7 @@ struct nistz256_pre_comp_st { */ PRECOMP256_ROW *precomp; void *precomp_storage; - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -256,6 +238,16 @@ static BN_ULONG is_one(const BIGNUM *z) return res; } +/* + * For reference, this macro is used only when new ecp_nistz256 assembly + * module is being developed. For example, configure with + * -DECP_NISTZ256_REFERENCE_IMPLEMENTATION and implement only functions + * performing simplest arithmetic operations on 256-bit vectors. Then + * work on implementation of higher-level functions performing point + * operations. Then remove ECP_NISTZ256_REFERENCE_IMPLEMENTATION + * and never define it again. (The correct macro denoting presence of + * ecp_nistz256 module is ECP_NISTZ256_ASM.) + */ #ifndef ECP_NISTZ256_REFERENCE_IMPLEMENTATION void ecp_nistz256_point_double(P256_POINT *r, const P256_POINT *a); void ecp_nistz256_point_add(P256_POINT *r, @@ -1469,7 +1461,7 @@ NISTZ256_PRE_COMP *EC_nistz256_pre_comp_dup(NISTZ256_PRE_COMP *p) { int i; if (p != NULL) - CRYPTO_atomic_add(&p->references, 1, &i, p->lock); + CRYPTO_UP_REF(&p->references, &i, p->lock); return p; } @@ -1480,7 +1472,7 @@ void EC_nistz256_pre_comp_free(NISTZ256_PRE_COMP *pre) if (pre == NULL) return; - CRYPTO_atomic_add(&pre->references, -1, &i, pre->lock); + CRYPTO_DOWN_REF(&pre->references, &i, pre->lock); REF_PRINT_COUNT("EC_nistz256", x); if (i > 0) return; @@ -1538,6 +1530,10 @@ static int ecp_nistz256_inv_mod_ord(const EC_GROUP *group, BIGNUM *r, BN_ULONG table[15][P256_LIMBS]; BN_ULONG out[P256_LIMBS], t[P256_LIMBS]; int i, ret = 0; + enum { + i_1 = 0, i_10, i_11, i_101, i_111, i_1010, i_1111, + i_10101, i_101010, i_101111, i_x6, i_x8, i_x16, i_x32 + }; /* * Catch allocation failure early. @@ -1615,10 +1611,6 @@ static int ecp_nistz256_inv_mod_ord(const EC_GROUP *group, BIGNUM *r, * multiplications, 25%, on grand scale sign operation is not that * much faster, not more that 2%... */ - enum { - i_1 = 0, i_10, i_11, i_101, i_111, i_1010, i_1111, - i_10101, i_101010, i_101111, i_x6, i_x8, i_x16, i_x32 - }; /* pre-calculate powers */ ecp_nistz256_ord_sqr_mont(table[i_10], table[i_1], 1); diff --git a/crypto/ec/ecp_oct.c b/crypto/ec/ecp_oct.c index 4d142a4a..a5010bcf 100644 --- a/crypto/ec/ecp_oct.c +++ b/crypto/ec/ecp_oct.c @@ -1,5 +1,6 @@ /* * Copyright 2011-2016 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions of this software developed by SUN MICROSYSTEMS, INC., - * and contributed to the OpenSSL project. - */ - #include #include @@ -130,7 +125,7 @@ int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group, EC_R_INVALID_COMPRESSION_BIT); else /* - * BN_mod_sqrt() should have cought this error (not a square) + * BN_mod_sqrt() should have caught this error (not a square) */ ECerr(EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES, EC_R_INVALID_COMPRESSED_POINT); diff --git a/crypto/ec/ecp_smpl.c b/crypto/ec/ecp_smpl.c index abd37950..7ff5489c 100644 --- a/crypto/ec/ecp_smpl.c +++ b/crypto/ec/ecp_smpl.c @@ -1,5 +1,6 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2017 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * Portions of this software developed by SUN MICROSYSTEMS, INC., - * and contributed to the OpenSSL project. - */ - #include #include @@ -1218,7 +1213,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num, BN_CTX_start(ctx); tmp = BN_CTX_get(ctx); tmp_Z = BN_CTX_get(ctx); - if (tmp == NULL || tmp_Z == NULL) + if (tmp_Z == NULL) goto err; prod_Z = OPENSSL_malloc(num * sizeof(prod_Z[0])); diff --git a/crypto/ec/ecx_meth.c b/crypto/ec/ecx_meth.c index 018a9419..4f7cfec7 100644 --- a/crypto/ec/ecx_meth.c +++ b/crypto/ec/ecx_meth.c @@ -20,6 +20,8 @@ #define X25519_BITS 253 #define X25519_SECURITY_BITS 128 +#define ED25519_SIGSIZE 64 + typedef struct { unsigned char pubkey[X25519_KEYLEN]; unsigned char *privkey; @@ -32,7 +34,7 @@ typedef enum { } ecx_key_op_t; /* Setup EVP_PKEY using public, private or generation */ -static int ecx_key_op(EVP_PKEY *pkey, const X509_ALGOR *palg, +static int ecx_key_op(EVP_PKEY *pkey, int id, const X509_ALGOR *palg, const unsigned char *p, int plen, ecx_key_op_t op) { X25519_KEY *xkey; @@ -76,16 +78,21 @@ static int ecx_key_op(EVP_PKEY *pkey, const X509_ALGOR *palg, OPENSSL_free(xkey); return 0; } - xkey->privkey[0] &= 248; - xkey->privkey[31] &= 127; - xkey->privkey[31] |= 64; + if (id == EVP_PKEY_X25519) { + xkey->privkey[0] &= 248; + xkey->privkey[31] &= 127; + xkey->privkey[31] |= 64; + } } else { memcpy(xkey->privkey, p, X25519_KEYLEN); } - X25519_public_from_private(xkey->pubkey, xkey->privkey); + if (id == EVP_PKEY_X25519) + X25519_public_from_private(xkey->pubkey, xkey->privkey); + else + ED25519_public_from_private(xkey->pubkey, xkey->privkey); } - EVP_PKEY_assign(pkey, NID_X25519, xkey); + EVP_PKEY_assign(pkey, id, xkey); return 1; } @@ -105,8 +112,8 @@ static int ecx_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) return 0; } - if (!X509_PUBKEY_set0_param(pk, OBJ_nid2obj(NID_X25519), V_ASN1_UNDEF, - NULL, penc, X25519_KEYLEN)) { + if (!X509_PUBKEY_set0_param(pk, OBJ_nid2obj(pkey->ameth->pkey_id), + V_ASN1_UNDEF, NULL, penc, X25519_KEYLEN)) { OPENSSL_free(penc); ECerr(EC_F_ECX_PUB_ENCODE, ERR_R_MALLOC_FAILURE); return 0; @@ -122,7 +129,8 @@ static int ecx_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey) if (!X509_PUBKEY_get0_param(NULL, &p, &pklen, &palg, pubkey)) return 0; - return ecx_key_op(pkey, palg, p, pklen, X25519_PUBLIC); + return ecx_key_op(pkey, pkey->ameth->pkey_id, palg, p, pklen, + X25519_PUBLIC); } static int ecx_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) @@ -155,7 +163,7 @@ static int ecx_priv_decode(EVP_PKEY *pkey, const PKCS8_PRIV_KEY_INFO *p8) plen = ASN1_STRING_length(oct); } - rv = ecx_key_op(pkey, palg, p, plen, X25519_PRIVATE); + rv = ecx_key_op(pkey, pkey->ameth->pkey_id, palg, p, plen, X25519_PRIVATE); ASN1_OCTET_STRING_free(oct); return rv; } @@ -182,7 +190,7 @@ static int ecx_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) return 0; } - if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(NID_X25519), 0, + if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(pkey->ameth->pkey_id), 0, V_ASN1_UNDEF, NULL, penc, penclen)) { OPENSSL_clear_free(penc, penclen); ECerr(EC_F_ECX_PRIV_ENCODE, ERR_R_MALLOC_FAILURE); @@ -227,13 +235,15 @@ static int ecx_key_print(BIO *bp, const EVP_PKEY *pkey, int indent, { const X25519_KEY *xkey = pkey->pkey.ptr; + const char *nm = OBJ_nid2ln(pkey->ameth->pkey_id); + if (op == X25519_PRIVATE) { if (xkey == NULL || xkey->privkey == NULL) { if (BIO_printf(bp, "%*s\n", indent, "") <= 0) return 0; return 1; } - if (BIO_printf(bp, "%*sX25519 Private-Key:\n", indent, "") <= 0) + if (BIO_printf(bp, "%*s%s Private-Key:\n", indent, "", nm) <= 0) return 0; if (BIO_printf(bp, "%*spriv:\n", indent, "") <= 0) return 0; @@ -245,7 +255,7 @@ static int ecx_key_print(BIO *bp, const EVP_PKEY *pkey, int indent, return 0; return 1; } - if (BIO_printf(bp, "%*sX25519 Public-Key:\n", indent, "") <= 0) + if (BIO_printf(bp, "%*s%s Public-Key:\n", indent, "", nm) <= 0) return 0; } if (BIO_printf(bp, "%*spub:\n", indent, "") <= 0) @@ -272,7 +282,8 @@ static int ecx_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) switch (op) { case ASN1_PKEY_CTRL_SET1_TLS_ENCPT: - return ecx_key_op(pkey, NULL, arg2, arg1, X25519_PUBLIC); + return ecx_key_op(pkey, EVP_PKEY_X25519, NULL, arg2, arg1, + X25519_PUBLIC); case ASN1_PKEY_CTRL_GET1_TLS_ENCPT: if (pkey->pkey.ptr != NULL) { @@ -295,8 +306,8 @@ static int ecx_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) } const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth = { - NID_X25519, - NID_X25519, + EVP_PKEY_X25519, + EVP_PKEY_X25519, 0, "X25519", "OpenSSL X25519 algorithm", @@ -324,9 +335,87 @@ const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth = { NULL }; +static int ecd_size(const EVP_PKEY *pkey) +{ + return ED25519_SIGSIZE; +} + +static int ecd_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + X509_ALGOR *sigalg, ASN1_BIT_STRING *str, + EVP_PKEY *pkey) +{ + const ASN1_OBJECT *obj; + int ptype; + + X509_ALGOR_get0(&obj, &ptype, NULL, sigalg); + /* Sanity check: make sure it is ED25519 with absent parameters */ + if (OBJ_obj2nid(obj) != NID_ED25519 || ptype != V_ASN1_UNDEF) { + ECerr(EC_F_ECD_ITEM_VERIFY, EC_R_INVALID_ENCODING); + return 0; + } + + if (!EVP_DigestVerifyInit(ctx, NULL, NULL, NULL, pkey)) + return 0; + + return 2; +} + +static int ecd_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, + X509_ALGOR *alg1, X509_ALGOR *alg2, + ASN1_BIT_STRING *str) +{ + /* Set algorithms identifiers */ + X509_ALGOR_set0(alg1, OBJ_nid2obj(NID_ED25519), V_ASN1_UNDEF, NULL); + if (alg2) + X509_ALGOR_set0(alg2, OBJ_nid2obj(NID_ED25519), V_ASN1_UNDEF, NULL); + /* Algorithm idetifiers set: carry on as normal */ + return 3; +} + +static int ecd_sig_info_set(X509_SIG_INFO *siginf, const X509_ALGOR *alg, + const ASN1_STRING *sig) +{ + X509_SIG_INFO_set(siginf, NID_undef, NID_ED25519, X25519_SECURITY_BITS, + X509_SIG_INFO_TLS); + return 1; +} + +const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = { + EVP_PKEY_ED25519, + EVP_PKEY_ED25519, + 0, + "ED25519", + "OpenSSL ED25519 algorithm", + + ecx_pub_decode, + ecx_pub_encode, + ecx_pub_cmp, + ecx_pub_print, + + ecx_priv_decode, + ecx_priv_encode, + ecx_priv_print, + + ecd_size, + ecx_bits, + ecx_security_bits, + + 0, 0, 0, 0, + ecx_cmp_parameters, + 0, 0, + + ecx_free, + 0, + NULL, + NULL, + ecd_item_verify, + ecd_item_sign, + ecd_sig_info_set +}; + static int pkey_ecx_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { - return ecx_key_op(pkey, NULL, NULL, 0, X25519_KEYGEN); + return ecx_key_op(pkey, ctx->pmeth->pkey_id, NULL, NULL, 0, X25519_KEYGEN); } static int pkey_ecx_derive(EVP_PKEY_CTX *ctx, unsigned char *key, @@ -363,7 +452,7 @@ static int pkey_ecx_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) } const EVP_PKEY_METHOD ecx25519_pkey_meth = { - NID_X25519, + EVP_PKEY_X25519, 0, 0, 0, 0, 0, 0, 0, pkey_ecx_keygen, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -371,3 +460,63 @@ const EVP_PKEY_METHOD ecx25519_pkey_meth = { pkey_ecx_ctrl, 0 }; + +static int pkey_ecd_digestsign(EVP_MD_CTX *ctx, unsigned char *sig, + size_t *siglen, const unsigned char *tbs, + size_t tbslen) +{ + const X25519_KEY *edkey = EVP_MD_CTX_pkey_ctx(ctx)->pkey->pkey.ptr; + + if (sig == NULL) { + *siglen = ED25519_SIGSIZE; + return 1; + } + if (*siglen < ED25519_SIGSIZE) { + ECerr(EC_F_PKEY_ECD_DIGESTSIGN, EC_R_BUFFER_TOO_SMALL); + return 0; + } + + if (ED25519_sign(sig, tbs, tbslen, edkey->pubkey, edkey->privkey) == 0) + return 0; + *siglen = ED25519_SIGSIZE; + return 1; +} + +static int pkey_ecd_digestverify(EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen, const unsigned char *tbs, + size_t tbslen) +{ + const X25519_KEY *edkey = EVP_MD_CTX_pkey_ctx(ctx)->pkey->pkey.ptr; + + if (siglen != ED25519_SIGSIZE) + return 0; + + return ED25519_verify(tbs, tbslen, sig, edkey->pubkey); +} + +static int pkey_ecd_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) +{ + switch (type) { + case EVP_PKEY_CTRL_MD: + /* Only NULL allowed as digest */ + if (p2 == NULL) + return 1; + ECerr(EC_F_PKEY_ECD_CTRL, EC_R_INVALID_DIGEST_TYPE); + return 0; + + case EVP_PKEY_CTRL_DIGESTINIT: + return 1; + } + return -2; +} + +const EVP_PKEY_METHOD ed25519_pkey_meth = { + EVP_PKEY_ED25519, EVP_PKEY_FLAG_SIGCTX_CUSTOM, + 0, 0, 0, 0, 0, 0, + pkey_ecx_keygen, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + pkey_ecd_ctrl, + 0, + pkey_ecd_digestsign, + pkey_ecd_digestverify +}; diff --git a/crypto/engine/README b/crypto/engine/README index 41baa184..0050b9e5 100644 --- a/crypto/engine/README +++ b/crypto/engine/README @@ -161,7 +161,7 @@ actually qualitatively different depending on 'nid' (the "des_cbc" EVP_CIPHER is not an interoperable implementation of "aes_256_cbc"), RSA_METHODs are necessarily interoperable and don't have different flavours, only different implementations. In other words, the ENGINE_TABLE for RSA will either be empty, -or will have a single ENGING_PILE hashed to by the 'nid' 1 and that pile +or will have a single ENGINE_PILE hashed to by the 'nid' 1 and that pile represents ENGINEs that implement the single "type" of RSA there is. Cleanup - the registration and unregistration may pose questions about how @@ -188,7 +188,7 @@ state will be unchanged. Thus, no cleanup is required unless registration takes place. ENGINE_cleanup() will simply iterate across a list of registered cleanup callbacks calling each in turn, and will then internally delete its own storage (a STACK). When a cleanup callback is next registered (eg. if the cleanup() is -part of a gracefull restart and the application wants to cleanup all state then +part of a graceful restart and the application wants to cleanup all state then start again), the internal STACK storage will be freshly allocated. This is much the same as the situation in the ENGINE_TABLE instantiations ... NULL is the initialised state, so only modification operations (not queries) will cause that @@ -204,8 +204,8 @@ exists) - the idea of providing an ENGINE_cpy() function probably wasn't a good one and now certainly doesn't make sense in any generalised way. Some of the RSA, DSA, DH, and RAND functions that were fiddled during the original ENGINE changes have now, as a consequence, been reverted back. This is because the -hooking of ENGINE is now automatic (and passive, it can interally use a NULL +hooking of ENGINE is now automatic (and passive, it can internally use a NULL ENGINE pointer to simply ignore ENGINE from then on). -Hell, that should be enough for now ... comments welcome: geoff@openssl.org +Hell, that should be enough for now ... comments welcome. diff --git a/crypto/engine/build.info b/crypto/engine/build.info index 161dad4d..e00802a3 100644 --- a/crypto/engine/build.info +++ b/crypto/engine/build.info @@ -4,5 +4,8 @@ SOURCE[../../libcrypto]=\ eng_table.c eng_pkey.c eng_fat.c eng_all.c \ tb_rsa.c tb_dsa.c tb_dh.c tb_rand.c \ tb_cipher.c tb_digest.c tb_pkmeth.c tb_asnmth.c tb_eckey.c \ - eng_openssl.c eng_cnf.c eng_dyn.c eng_cryptodev.c \ + eng_openssl.c eng_cnf.c eng_dyn.c \ eng_rdrand.c +IF[{- !$disabled{devcryptoeng} -}] + SOURCE[../../libcrypto]=eng_devcrypto.c +ENDIF diff --git a/crypto/engine/eng_all.c b/crypto/engine/eng_all.c index ebe02773..c0d0b1cb 100644 --- a/crypto/engine/eng_all.c +++ b/crypto/engine/eng_all.c @@ -18,14 +18,8 @@ void ENGINE_load_builtin_engines(void) OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN, NULL); } -#if (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)) && !defined(OPENSSL_NO_DEPRECATED) +#if (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)) && !defined(OPENSSL_NO_DEPRECATED) void ENGINE_setup_bsd_cryptodev(void) { - static int bsd_cryptodev_default_loaded = 0; - if (!bsd_cryptodev_default_loaded) { - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL); - ENGINE_register_all_complete(); - } - bsd_cryptodev_default_loaded = 1; } #endif diff --git a/crypto/engine/eng_cryptodev.c b/crypto/engine/eng_cryptodev.c deleted file mode 100644 index 55727350..00000000 --- a/crypto/engine/eng_cryptodev.c +++ /dev/null @@ -1,1757 +0,0 @@ -/* - * 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 - */ - -/* - * Copyright (c) 2002 Bob Beck - * Copyright (c) 2002 Theo de Raadt - * Copyright (c) 2002 Markus Friedl - * 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. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE 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 THE 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. - * - */ - -#include -#include -#include -#include -#include - -#if (defined(__unix__) || defined(unix)) && !defined(USG) && \ - (defined(OpenBSD) || defined(__FreeBSD__)) -# include -# if (defined(OpenBSD) && (OpenBSD >= 200112)) || \ - (defined(__FreeBSD_version) && \ - ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || \ - __FreeBSD_version >= 500041)) -# define HAVE_CRYPTODEV -# endif -# if defined(OpenBSD) && (OpenBSD >= 200110) -# define HAVE_SYSLOG_R -# endif -#endif - -#include -#ifdef HAVE_CRYPTODEV -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -#endif -#include -#include -#include -#include - -#ifndef HAVE_CRYPTODEV - -void engine_load_cryptodev_int(void) -{ - /* This is a NOP on platforms without /dev/crypto */ - return; -} - -#else - -struct dev_crypto_state { - struct session_op d_sess; - int d_fd; -# ifdef USE_CRYPTODEV_DIGESTS - char dummy_mac_key[HASH_MAX_LEN]; - unsigned char digest_res[HASH_MAX_LEN]; - char *mac_data; - int mac_len; -# endif -}; - -static u_int32_t cryptodev_asymfeat = 0; - -static RSA_METHOD *cryptodev_rsa; -#ifndef OPENSSL_NO_DSA -static DSA_METHOD *cryptodev_dsa = NULL; -#endif -#ifndef OPENSSL_NO_DH -static DH_METHOD *cryptodev_dh; -#endif - -static int get_asym_dev_crypto(void); -static int open_dev_crypto(void); -static int get_dev_crypto(void); -static int get_cryptodev_ciphers(const int **cnids); -# ifdef USE_CRYPTODEV_DIGESTS -static int get_cryptodev_digests(const int **cnids); -# endif -static int cryptodev_usable_ciphers(const int **nids); -static int cryptodev_usable_digests(const int **nids); -static int cryptodev_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, - const unsigned char *in, size_t inl); -static int cryptodev_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, - const unsigned char *iv, int enc); -static int cryptodev_cleanup(EVP_CIPHER_CTX *ctx); -static int cryptodev_engine_ciphers(ENGINE *e, const EVP_CIPHER **cipher, - const int **nids, int nid); -static int cryptodev_engine_digests(ENGINE *e, const EVP_MD **digest, - const int **nids, int nid); -static int bn2crparam(const BIGNUM *a, struct crparam *crp); -static int crparam2bn(struct crparam *crp, BIGNUM *a); -static void zapparams(struct crypt_kop *kop); -static int cryptodev_asym(struct crypt_kop *kop, int rlen, BIGNUM *r, - int slen, BIGNUM *s); - -static int cryptodev_bn_mod_exp(BIGNUM *r, const BIGNUM *a, - const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *m_ctx); -static int cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, - BN_CTX *ctx); -static int cryptodev_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, - BN_CTX *ctx); -#ifndef OPENSSL_NO_DSA -static int cryptodev_dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, const BIGNUM *a, - const BIGNUM *p, const BIGNUM *m, - BN_CTX *ctx, BN_MONT_CTX *m_ctx); -static int cryptodev_dsa_dsa_mod_exp(DSA *dsa, BIGNUM *t1, const BIGNUM *g, - const BIGNUM *u1, const BIGNUM *pub_key, - const BIGNUM *u2, const BIGNUM *p, - BN_CTX *ctx, BN_MONT_CTX *mont); -static DSA_SIG *cryptodev_dsa_do_sign(const unsigned char *dgst, int dlen, - DSA *dsa); -static int cryptodev_dsa_verify(const unsigned char *dgst, int dgst_len, - DSA_SIG *sig, DSA *dsa); -#endif -#ifndef OPENSSL_NO_DH -static int cryptodev_mod_exp_dh(const DH *dh, BIGNUM *r, const BIGNUM *a, - const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *m_ctx); -static int cryptodev_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, - DH *dh); -#endif -static int cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p, - void (*f) (void)); -void engine_load_cryptodev_int(void); - -static const ENGINE_CMD_DEFN cryptodev_defns[] = { - {0, NULL, NULL, 0} -}; - -static struct { - int id; - int nid; - int ivmax; - int keylen; -} ciphers[] = { - { - CRYPTO_ARC4, NID_rc4, 0, 16, - }, - { - CRYPTO_DES_CBC, NID_des_cbc, 8, 8, - }, - { - CRYPTO_3DES_CBC, NID_des_ede3_cbc, 8, 24, - }, - { - CRYPTO_AES_CBC, NID_aes_128_cbc, 16, 16, - }, - { - CRYPTO_AES_CBC, NID_aes_192_cbc, 16, 24, - }, - { - CRYPTO_AES_CBC, NID_aes_256_cbc, 16, 32, - }, -# ifdef CRYPTO_AES_CTR - { - CRYPTO_AES_CTR, NID_aes_128_ctr, 14, 16, - }, - { - CRYPTO_AES_CTR, NID_aes_192_ctr, 14, 24, - }, - { - CRYPTO_AES_CTR, NID_aes_256_ctr, 14, 32, - }, -# endif - { - CRYPTO_BLF_CBC, NID_bf_cbc, 8, 16, - }, - { - CRYPTO_CAST_CBC, NID_cast5_cbc, 8, 16, - }, - { - CRYPTO_SKIPJACK_CBC, NID_undef, 0, 0, - }, - { - 0, NID_undef, 0, 0, - }, -}; - -# ifdef USE_CRYPTODEV_DIGESTS -static struct { - int id; - int nid; - int keylen; -} digests[] = { - { - CRYPTO_MD5_HMAC, NID_hmacWithMD5, 16 - }, - { - CRYPTO_SHA1_HMAC, NID_hmacWithSHA1, 20 - }, - { - CRYPTO_RIPEMD160_HMAC, NID_ripemd160, 16 - /* ? */ - }, - { - CRYPTO_MD5_KPDK, NID_undef, 0 - }, - { - CRYPTO_SHA1_KPDK, NID_undef, 0 - }, - { - CRYPTO_MD5, NID_md5, 16 - }, - { - CRYPTO_SHA1, NID_sha1, 20 - }, - { - 0, NID_undef, 0 - }, -}; -# endif - -/* - * Return a fd if /dev/crypto seems usable, 0 otherwise. - */ -static int open_dev_crypto(void) -{ - static int fd = -1; - - if (fd == -1) { - if ((fd = open("/dev/crypto", O_RDWR, 0)) == -1) - return (-1); - /* close on exec */ - if (fcntl(fd, F_SETFD, 1) == -1) { - close(fd); - fd = -1; - return (-1); - } - } - return (fd); -} - -static int get_dev_crypto(void) -{ - int fd, retfd; - - if ((fd = open_dev_crypto()) == -1) - return (-1); -# ifndef CRIOGET_NOT_NEEDED - if (ioctl(fd, CRIOGET, &retfd) == -1) - return (-1); - - /* close on exec */ - if (fcntl(retfd, F_SETFD, 1) == -1) { - close(retfd); - return (-1); - } -# else - retfd = fd; -# endif - return (retfd); -} - -static void put_dev_crypto(int fd) -{ -# ifndef CRIOGET_NOT_NEEDED - close(fd); -# endif -} - -/* Caching version for asym operations */ -static int get_asym_dev_crypto(void) -{ - static int fd = -1; - - if (fd == -1) - fd = get_dev_crypto(); - return fd; -} - -/* - * Find out what ciphers /dev/crypto will let us have a session for. - * XXX note, that some of these openssl doesn't deal with yet! - * returning them here is harmless, as long as we return NULL - * when asked for a handler in the cryptodev_engine_ciphers routine - */ -static int get_cryptodev_ciphers(const int **cnids) -{ - static int nids[CRYPTO_ALGORITHM_MAX]; - struct session_op sess; - int fd, i, count = 0; - - if ((fd = get_dev_crypto()) < 0) { - *cnids = NULL; - return (0); - } - memset(&sess, 0, sizeof(sess)); - sess.key = (caddr_t) "123456789abcdefghijklmno"; - - for (i = 0; ciphers[i].id && count < CRYPTO_ALGORITHM_MAX; i++) { - if (ciphers[i].nid == NID_undef) - continue; - sess.cipher = ciphers[i].id; - sess.keylen = ciphers[i].keylen; - sess.mac = 0; - if (ioctl(fd, CIOCGSESSION, &sess) != -1 && - ioctl(fd, CIOCFSESSION, &sess.ses) != -1) - nids[count++] = ciphers[i].nid; - } - put_dev_crypto(fd); - - if (count > 0) - *cnids = nids; - else - *cnids = NULL; - return (count); -} - -# ifdef USE_CRYPTODEV_DIGESTS -/* - * Find out what digests /dev/crypto will let us have a session for. - * XXX note, that some of these openssl doesn't deal with yet! - * returning them here is harmless, as long as we return NULL - * when asked for a handler in the cryptodev_engine_digests routine - */ -static int get_cryptodev_digests(const int **cnids) -{ - static int nids[CRYPTO_ALGORITHM_MAX]; - struct session_op sess; - int fd, i, count = 0; - - if ((fd = get_dev_crypto()) < 0) { - *cnids = NULL; - return (0); - } - memset(&sess, 0, sizeof(sess)); - sess.mackey = (caddr_t) "123456789abcdefghijklmno"; - for (i = 0; digests[i].id && count < CRYPTO_ALGORITHM_MAX; i++) { - if (digests[i].nid == NID_undef) - continue; - sess.mac = digests[i].id; - sess.mackeylen = digests[i].keylen; - sess.cipher = 0; - if (ioctl(fd, CIOCGSESSION, &sess) != -1 && - ioctl(fd, CIOCFSESSION, &sess.ses) != -1) - nids[count++] = digests[i].nid; - } - put_dev_crypto(fd); - - if (count > 0) - *cnids = nids; - else - *cnids = NULL; - return (count); -} -# endif /* 0 */ - -/* - * Find the useable ciphers|digests from dev/crypto - this is the first - * thing called by the engine init crud which determines what it - * can use for ciphers from this engine. We want to return - * only what we can do, anything else is handled by software. - * - * If we can't initialize the device to do anything useful for - * any reason, we want to return a NULL array, and 0 length, - * which forces everything to be done is software. By putting - * the initialization of the device in here, we ensure we can - * use this engine as the default, and if for whatever reason - * /dev/crypto won't do what we want it will just be done in - * software - * - * This can (should) be greatly expanded to perhaps take into - * account speed of the device, and what we want to do. - * (although the disabling of particular alg's could be controlled - * by the device driver with sysctl's.) - this is where we - * want most of the decisions made about what we actually want - * to use from /dev/crypto. - */ -static int cryptodev_usable_ciphers(const int **nids) -{ - return (get_cryptodev_ciphers(nids)); -} - -static int cryptodev_usable_digests(const int **nids) -{ -# ifdef USE_CRYPTODEV_DIGESTS - return (get_cryptodev_digests(nids)); -# else - /* - * XXXX just disable all digests for now, because it sucks. - * we need a better way to decide this - i.e. I may not - * want digests on slow cards like hifn on fast machines, - * but might want them on slow or loaded machines, etc. - * will also want them when using crypto cards that don't - * suck moose gonads - would be nice to be able to decide something - * as reasonable default without having hackery that's card dependent. - * of course, the default should probably be just do everything, - * with perhaps a sysctl to turn algorithms off (or have them off - * by default) on cards that generally suck like the hifn. - */ - *nids = NULL; - return (0); -# endif -} - -static int -cryptodev_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, - const unsigned char *in, size_t inl) -{ - struct crypt_op cryp; - struct dev_crypto_state *state = EVP_CIPHER_CTX_get_cipher_data(ctx); - struct session_op *sess = &state->d_sess; - const void *iiv; - unsigned char save_iv[EVP_MAX_IV_LENGTH]; - - if (state->d_fd < 0) - return (0); - if (!inl) - return (1); - if ((inl % EVP_CIPHER_CTX_block_size(ctx)) != 0) - return (0); - - memset(&cryp, 0, sizeof(cryp)); - - cryp.ses = sess->ses; - cryp.flags = 0; - cryp.len = inl; - cryp.src = (caddr_t) in; - cryp.dst = (caddr_t) out; - cryp.mac = 0; - - cryp.op = EVP_CIPHER_CTX_encrypting(ctx) ? COP_ENCRYPT : COP_DECRYPT; - - if (EVP_CIPHER_CTX_iv_length(ctx) > 0) { - cryp.iv = (caddr_t) EVP_CIPHER_CTX_iv(ctx); - if (!EVP_CIPHER_CTX_encrypting(ctx)) { - iiv = in + inl - EVP_CIPHER_CTX_iv_length(ctx); - memcpy(save_iv, iiv, EVP_CIPHER_CTX_iv_length(ctx)); - } - } else - cryp.iv = NULL; - - if (ioctl(state->d_fd, CIOCCRYPT, &cryp) == -1) { - /* - * XXX need better error handling this can fail for a number of - * different reasons. - */ - return (0); - } - - if (EVP_CIPHER_CTX_iv_length(ctx) > 0) { - if (EVP_CIPHER_CTX_encrypting(ctx)) - iiv = out + inl - EVP_CIPHER_CTX_iv_length(ctx); - else - iiv = save_iv; - memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iiv, - EVP_CIPHER_CTX_iv_length(ctx)); - } - return (1); -} - -static int -cryptodev_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, - const unsigned char *iv, int enc) -{ - struct dev_crypto_state *state = EVP_CIPHER_CTX_get_cipher_data(ctx); - struct session_op *sess = &state->d_sess; - int cipher = -1, i; - - for (i = 0; ciphers[i].id; i++) - if (EVP_CIPHER_CTX_nid(ctx) == ciphers[i].nid && - EVP_CIPHER_CTX_iv_length(ctx) <= ciphers[i].ivmax && - EVP_CIPHER_CTX_key_length(ctx) == ciphers[i].keylen) { - cipher = ciphers[i].id; - break; - } - - if (!ciphers[i].id) { - state->d_fd = -1; - return (0); - } - - memset(sess, 0, sizeof(*sess)); - - if ((state->d_fd = get_dev_crypto()) < 0) - return (0); - - sess->key = (caddr_t) key; - sess->keylen = EVP_CIPHER_CTX_key_length(ctx); - sess->cipher = cipher; - - if (ioctl(state->d_fd, CIOCGSESSION, sess) == -1) { - put_dev_crypto(state->d_fd); - state->d_fd = -1; - return (0); - } - return (1); -} - -/* - * free anything we allocated earlier when initing a - * session, and close the session. - */ -static int cryptodev_cleanup(EVP_CIPHER_CTX *ctx) -{ - int ret = 0; - struct dev_crypto_state *state = EVP_CIPHER_CTX_get_cipher_data(ctx); - struct session_op *sess = &state->d_sess; - - if (state->d_fd < 0) - return (0); - - /* - * XXX if this ioctl fails, something's wrong. the invoker may have called - * us with a bogus ctx, or we could have a device that for whatever - * reason just doesn't want to play ball - it's not clear what's right - * here - should this be an error? should it just increase a counter, - * hmm. For right now, we return 0 - I don't believe that to be "right". - * we could call the gorpy openssl lib error handlers that print messages - * to users of the library. hmm.. - */ - - if (ioctl(state->d_fd, CIOCFSESSION, &sess->ses) == -1) { - ret = 0; - } else { - ret = 1; - } - put_dev_crypto(state->d_fd); - state->d_fd = -1; - - return (ret); -} - -/* - * libcrypto EVP stuff - this is how we get wired to EVP so the engine - * gets called when libcrypto requests a cipher NID. - */ - -/* RC4 */ -static EVP_CIPHER *rc4_cipher = NULL; -static const EVP_CIPHER *cryptodev_rc4(void) -{ - if (rc4_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_rc4, 1, 16)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 0) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_VARIABLE_LENGTH) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state))) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - rc4_cipher = cipher; - } - return rc4_cipher; -} - -/* DES CBC EVP */ -static EVP_CIPHER *des_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_des_cbc(void) -{ - if (des_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_des_cbc, 8, 8)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 8) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - des_cbc_cipher = cipher; - } - return des_cbc_cipher; -} - -/* 3DES CBC EVP */ -static EVP_CIPHER *des3_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_3des_cbc(void) -{ - if (des3_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_des_ede3_cbc, 8, 24)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 8) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - des3_cbc_cipher = cipher; - } - return des3_cbc_cipher; -} - -static EVP_CIPHER *bf_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_bf_cbc(void) -{ - if (bf_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_bf_cbc, 8, 16)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 8) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - bf_cbc_cipher = cipher; - } - return bf_cbc_cipher; -} - -static EVP_CIPHER *cast_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_cast_cbc(void) -{ - if (cast_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_cast5_cbc, 8, 16)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 8) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - cast_cbc_cipher = cipher; - } - return cast_cbc_cipher; -} - -static EVP_CIPHER *aes_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_aes_cbc(void) -{ - if (aes_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_aes_128_cbc, 16, 16)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 16) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - aes_cbc_cipher = cipher; - } - return aes_cbc_cipher; -} - -static EVP_CIPHER *aes_192_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_aes_192_cbc(void) -{ - if (aes_192_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_aes_192_cbc, 16, 24)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 16) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - aes_192_cbc_cipher = cipher; - } - return aes_192_cbc_cipher; -} - -static EVP_CIPHER *aes_256_cbc_cipher = NULL; -static const EVP_CIPHER *cryptodev_aes_256_cbc(void) -{ - if (aes_256_cbc_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_aes_256_cbc, 16, 32)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 16) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CBC_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - aes_256_cbc_cipher = cipher; - } - return aes_256_cbc_cipher; -} - -# ifdef CRYPTO_AES_CTR -static EVP_CIPHER *aes_ctr_cipher = NULL; -static const EVP_CIPHER *cryptodev_aes_ctr(void) -{ - if (aes_ctr_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_aes_128_ctr, 16, 16)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 14) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CTR_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - aes_ctr_cipher = cipher; - } - return aes_ctr_cipher; -} - -static EVP_CIPHER *aes_192_ctr_cipher = NULL; -static const EVP_CIPHER *cryptodev_aes_192_ctr(void) -{ - if (aes_192_ctr_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_aes_192_ctr, 16, 24)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 14) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CTR_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - aes_192_ctr_cipher = cipher; - } - return aes_192_ctr_cipher; -} - -static EVP_CIPHER *aes_256_ctr_cipher = NULL; -static const EVP_CIPHER *cryptodev_aes_256_ctr(void) -{ - if (aes_256_ctr_cipher == NULL) { - EVP_CIPHER *cipher; - - if ((cipher = EVP_CIPHER_meth_new(NID_aes_256_ctr, 16, 32)) == NULL - || !EVP_CIPHER_meth_set_iv_length(cipher, 14) - || !EVP_CIPHER_meth_set_flags(cipher, EVP_CIPH_CTR_MODE) - || !EVP_CIPHER_meth_set_init(cipher, cryptodev_init_key) - || !EVP_CIPHER_meth_set_do_cipher(cipher, cryptodev_cipher) - || !EVP_CIPHER_meth_set_cleanup(cipher, cryptodev_cleanup) - || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, sizeof(struct dev_crypto_state)) - || !EVP_CIPHER_meth_set_set_asn1_params(cipher, EVP_CIPHER_set_asn1_iv) - || !EVP_CIPHER_meth_set_get_asn1_params(cipher, EVP_CIPHER_get_asn1_iv)) { - EVP_CIPHER_meth_free(cipher); - cipher = NULL; - } - aes_256_ctr_cipher = cipher; - } - return aes_256_ctr_cipher; -} -# endif -/* - * Registered by the ENGINE when used to find out how to deal with - * a particular NID in the ENGINE. this says what we'll do at the - * top level - note, that list is restricted by what we answer with - */ -static int -cryptodev_engine_ciphers(ENGINE *e, const EVP_CIPHER **cipher, - const int **nids, int nid) -{ - if (!cipher) - return (cryptodev_usable_ciphers(nids)); - - switch (nid) { - case NID_rc4: - *cipher = cryptodev_rc4(); - break; - case NID_des_ede3_cbc: - *cipher = cryptodev_3des_cbc(); - break; - case NID_des_cbc: - *cipher = cryptodev_des_cbc(); - break; - case NID_bf_cbc: - *cipher = cryptodev_bf_cbc(); - break; - case NID_cast5_cbc: - *cipher = cryptodev_cast_cbc(); - break; - case NID_aes_128_cbc: - *cipher = cryptodev_aes_cbc(); - break; - case NID_aes_192_cbc: - *cipher = cryptodev_aes_192_cbc(); - break; - case NID_aes_256_cbc: - *cipher = cryptodev_aes_256_cbc(); - break; -# ifdef CRYPTO_AES_CTR - case NID_aes_128_ctr: - *cipher = cryptodev_aes_ctr(); - break; - case NID_aes_192_ctr: - *cipher = cryptodev_aes_192_ctr(); - break; - case NID_aes_256_ctr: - *cipher = cryptodev_aes_256_ctr(); - break; -# endif - default: - *cipher = NULL; - break; - } - return (*cipher != NULL); -} - -# ifdef USE_CRYPTODEV_DIGESTS - -/* convert digest type to cryptodev */ -static int digest_nid_to_cryptodev(int nid) -{ - int i; - - for (i = 0; digests[i].id; i++) - if (digests[i].nid == nid) - return (digests[i].id); - return (0); -} - -static int digest_key_length(int nid) -{ - int i; - - for (i = 0; digests[i].id; i++) - if (digests[i].nid == nid) - return digests[i].keylen; - return (0); -} - -static int cryptodev_digest_init(EVP_MD_CTX *ctx) -{ - struct dev_crypto_state *state = EVP_MD_CTX_md_data(ctx); - struct session_op *sess = &state->d_sess; - int digest; - - if ((digest = digest_nid_to_cryptodev(EVP_MD_CTX_type(ctx))) == NID_undef) { - printf("cryptodev_digest_init: Can't get digest \n"); - return (0); - } - - memset(state, 0, sizeof(*state)); - - if ((state->d_fd = get_dev_crypto()) < 0) { - printf("cryptodev_digest_init: Can't get Dev \n"); - return (0); - } - - sess->mackey = state->dummy_mac_key; - sess->mackeylen = digest_key_length(EVP_MD_CTX_type(ctx)); - sess->mac = digest; - - if (ioctl(state->d_fd, CIOCGSESSION, sess) < 0) { - put_dev_crypto(state->d_fd); - state->d_fd = -1; - printf("cryptodev_digest_init: Open session failed\n"); - return (0); - } - - return (1); -} - -static int cryptodev_digest_update(EVP_MD_CTX *ctx, const void *data, - size_t count) -{ - struct crypt_op cryp; - struct dev_crypto_state *state = EVP_MD_CTX_md_data(ctx); - struct session_op *sess = &state->d_sess; - char *new_mac_data; - - if (!data || state->d_fd < 0) { - printf("cryptodev_digest_update: illegal inputs \n"); - return (0); - } - - if (!count) { - return (0); - } - - if (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_ONESHOT)) { - /* if application doesn't support one buffer */ - new_mac_data = - OPENSSL_realloc(state->mac_data, state->mac_len + count); - - if (!new_mac_data) { - printf("cryptodev_digest_update: realloc failed\n"); - return (0); - } - state->mac_data = new_mac_data; - - memcpy(state->mac_data + state->mac_len, data, count); - state->mac_len += count; - - return (1); - } - - memset(&cryp, 0, sizeof(cryp)); - - cryp.ses = sess->ses; - cryp.flags = 0; - cryp.len = count; - cryp.src = (caddr_t) data; - cryp.dst = NULL; - cryp.mac = (caddr_t) state->digest_res; - if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) { - printf("cryptodev_digest_update: digest failed\n"); - return (0); - } - return (1); -} - -static int cryptodev_digest_final(EVP_MD_CTX *ctx, unsigned char *md) -{ - struct crypt_op cryp; - struct dev_crypto_state *state = EVP_MD_CTX_md_data(ctx); - struct session_op *sess = &state->d_sess; - - int ret = 1; - - if (!md || state->d_fd < 0) { - printf("cryptodev_digest_final: illegal input\n"); - return (0); - } - - if (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_ONESHOT)) { - /* if application doesn't support one buffer */ - memset(&cryp, 0, sizeof(cryp)); - cryp.ses = sess->ses; - cryp.flags = 0; - cryp.len = state->mac_len; - cryp.src = state->mac_data; - cryp.dst = NULL; - cryp.mac = (caddr_t) md; - if (ioctl(state->d_fd, CIOCCRYPT, &cryp) < 0) { - printf("cryptodev_digest_final: digest failed\n"); - return (0); - } - - return 1; - } - - memcpy(md, state->digest_res, EVP_MD_CTX_size(ctx)); - - return (ret); -} - -static int cryptodev_digest_cleanup(EVP_MD_CTX *ctx) -{ - int ret = 1; - struct dev_crypto_state *state = EVP_MD_CTX_md_data(ctx); - struct session_op *sess = &state->d_sess; - - if (state == NULL) - return 0; - - if (state->d_fd < 0) { - printf("cryptodev_digest_cleanup: illegal input\n"); - return (0); - } - - OPENSSL_free(state->mac_data); - state->mac_data = NULL; - state->mac_len = 0; - - if (ioctl(state->d_fd, CIOCFSESSION, &sess->ses) < 0) { - printf("cryptodev_digest_cleanup: failed to close session\n"); - ret = 0; - } else { - ret = 1; - } - put_dev_crypto(state->d_fd); - state->d_fd = -1; - - return (ret); -} - -static int cryptodev_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) -{ - struct dev_crypto_state *fstate = EVP_MD_CTX_md_data(from); - struct dev_crypto_state *dstate = EVP_MD_CTX_md_data(to); - struct session_op *sess; - int digest; - - if (dstate == NULL || fstate == NULL) - return 1; - - memcpy(dstate, fstate, sizeof(struct dev_crypto_state)); - - sess = &dstate->d_sess; - - digest = digest_nid_to_cryptodev(EVP_MD_CTX_type(to)); - - sess->mackey = dstate->dummy_mac_key; - sess->mackeylen = digest_key_length(EVP_MD_CTX_type(to)); - sess->mac = digest; - - dstate->d_fd = get_dev_crypto(); - - if (ioctl(dstate->d_fd, CIOCGSESSION, sess) < 0) { - put_dev_crypto(dstate->d_fd); - dstate->d_fd = -1; - printf("cryptodev_digest_copy: Open session failed\n"); - return (0); - } - - if (fstate->mac_len != 0) { - if (fstate->mac_data != NULL) { - dstate->mac_data = OPENSSL_malloc(fstate->mac_len); - if (dstate->mac_data == NULL) { - printf("cryptodev_digest_copy: mac_data allocation failed\n"); - return (0); - } - memcpy(dstate->mac_data, fstate->mac_data, fstate->mac_len); - dstate->mac_len = fstate->mac_len; - } - } - - return 1; -} - -static EVP_MD *sha1_md = NULL; -static const EVP_MD *cryptodev_sha1(void) -{ - if (sha1_md == NULL) { - EVP_MD *md; - - if ((md = EVP_MD_meth_new(NID_sha1, NID_undef)) == NULL - || !EVP_MD_meth_set_result_size(md, SHA_DIGEST_LENGTH) - || !EVP_MD_meth_set_flags(md, EVP_MD_FLAG_ONESHOT) - || !EVP_MD_meth_set_input_blocksize(md, SHA_CBLOCK) - || !EVP_MD_meth_set_app_datasize(md, - sizeof(struct dev_crypto_state)) - || !EVP_MD_meth_set_init(md, cryptodev_digest_init) - || !EVP_MD_meth_set_update(md, cryptodev_digest_update) - || !EVP_MD_meth_set_final(md, cryptodev_digest_final) - || !EVP_MD_meth_set_copy(md, cryptodev_digest_copy) - || !EVP_MD_meth_set_cleanup(md, cryptodev_digest_cleanup)) { - EVP_MD_meth_free(md); - md = NULL; - } - sha1_md = md; - } - return sha1_md; -} - -static EVP_MD *md5_md = NULL; -static const EVP_MD *cryptodev_md5(void) -{ - if (md5_md == NULL) { - EVP_MD *md; - - if ((md = EVP_MD_meth_new(NID_md5, NID_undef)) == NULL - || !EVP_MD_meth_set_result_size(md, 16 /* MD5_DIGEST_LENGTH */) - || !EVP_MD_meth_set_flags(md, EVP_MD_FLAG_ONESHOT) - || !EVP_MD_meth_set_input_blocksize(md, 64 /* MD5_CBLOCK */) - || !EVP_MD_meth_set_app_datasize(md, - sizeof(struct dev_crypto_state)) - || !EVP_MD_meth_set_init(md, cryptodev_digest_init) - || !EVP_MD_meth_set_update(md, cryptodev_digest_update) - || !EVP_MD_meth_set_final(md, cryptodev_digest_final) - || !EVP_MD_meth_set_copy(md, cryptodev_digest_copy) - || !EVP_MD_meth_set_cleanup(md, cryptodev_digest_cleanup)) { - EVP_MD_meth_free(md); - md = NULL; - } - md5_md = md; - } - return md5_md; -} - -# endif /* USE_CRYPTODEV_DIGESTS */ - -static int -cryptodev_engine_digests(ENGINE *e, const EVP_MD **digest, - const int **nids, int nid) -{ - if (!digest) - return (cryptodev_usable_digests(nids)); - - switch (nid) { -# ifdef USE_CRYPTODEV_DIGESTS - case NID_md5: - *digest = cryptodev_md5(); - break; - case NID_sha1: - *digest = cryptodev_sha1(); - break; - default: -# endif /* USE_CRYPTODEV_DIGESTS */ - *digest = NULL; - break; - } - return (*digest != NULL); -} - -static int cryptodev_engine_destroy(ENGINE *e) -{ - EVP_CIPHER_meth_free(rc4_cipher); - rc4_cipher = NULL; - EVP_CIPHER_meth_free(des_cbc_cipher); - des_cbc_cipher = NULL; - EVP_CIPHER_meth_free(des3_cbc_cipher); - des3_cbc_cipher = NULL; - EVP_CIPHER_meth_free(bf_cbc_cipher); - bf_cbc_cipher = NULL; - EVP_CIPHER_meth_free(cast_cbc_cipher); - cast_cbc_cipher = NULL; - EVP_CIPHER_meth_free(aes_cbc_cipher); - aes_cbc_cipher = NULL; - EVP_CIPHER_meth_free(aes_192_cbc_cipher); - aes_192_cbc_cipher = NULL; - EVP_CIPHER_meth_free(aes_256_cbc_cipher); - aes_256_cbc_cipher = NULL; -# ifdef CRYPTO_AES_CTR - EVP_CIPHER_meth_free(aes_ctr_cipher); - aes_ctr_cipher = NULL; - EVP_CIPHER_meth_free(aes_192_ctr_cipher); - aes_192_ctr_cipher = NULL; - EVP_CIPHER_meth_free(aes_256_ctr_cipher); - aes_256_ctr_cipher = NULL; -# endif -# ifdef USE_CRYPTODEV_DIGESTS - EVP_MD_meth_free(sha1_md); - sha1_md = NULL; - EVP_MD_meth_free(md5_md); - md5_md = NULL; -# endif - RSA_meth_free(cryptodev_rsa); - cryptodev_rsa = NULL; -#ifndef OPENSSL_NO_DSA - DSA_meth_free(cryptodev_dsa); - cryptodev_dsa = NULL; -#endif -#ifndef OPENSSL_NO_DH - DH_meth_free(cryptodev_dh); - cryptodev_dh = NULL; -#endif - return 1; -} - -/* - * Convert a BIGNUM to the representation that /dev/crypto needs. - * Upon completion of use, the caller is responsible for freeing - * crp->crp_p. - */ -static int bn2crparam(const BIGNUM *a, struct crparam *crp) -{ - ssize_t bytes, bits; - u_char *b; - - crp->crp_p = NULL; - crp->crp_nbits = 0; - - bits = BN_num_bits(a); - bytes = BN_num_bytes(a); - - b = OPENSSL_zalloc(bytes); - if (b == NULL) - return (1); - - crp->crp_p = (caddr_t) b; - crp->crp_nbits = bits; - - BN_bn2bin(a, b); - return (0); -} - -/* Convert a /dev/crypto parameter to a BIGNUM */ -static int crparam2bn(struct crparam *crp, BIGNUM *a) -{ - u_int8_t *pd; - int i, bytes; - - bytes = (crp->crp_nbits + 7) / 8; - - if (bytes == 0) - return (-1); - - if ((pd = OPENSSL_malloc(bytes)) == NULL) - return (-1); - - for (i = 0; i < bytes; i++) - pd[i] = crp->crp_p[bytes - i - 1]; - - BN_bin2bn(pd, bytes, a); - free(pd); - - return (0); -} - -static void zapparams(struct crypt_kop *kop) -{ - int i; - - for (i = 0; i < kop->crk_iparams + kop->crk_oparams; i++) { - OPENSSL_free(kop->crk_param[i].crp_p); - kop->crk_param[i].crp_p = NULL; - kop->crk_param[i].crp_nbits = 0; - } -} - -static int -cryptodev_asym(struct crypt_kop *kop, int rlen, BIGNUM *r, int slen, - BIGNUM *s) -{ - int fd, ret = -1; - - if ((fd = get_asym_dev_crypto()) < 0) - return ret; - - if (r) { - kop->crk_param[kop->crk_iparams].crp_p = OPENSSL_zalloc(rlen); - if (kop->crk_param[kop->crk_iparams].crp_p == NULL) - return ret; - kop->crk_param[kop->crk_iparams].crp_nbits = rlen * 8; - kop->crk_oparams++; - } - if (s) { - kop->crk_param[kop->crk_iparams + 1].crp_p = - OPENSSL_zalloc(slen); - /* No need to free the kop->crk_iparams parameter if it was allocated, - * callers of this routine have to free allocated parameters through - * zapparams both in case of success and failure - */ - if (kop->crk_param[kop->crk_iparams+1].crp_p == NULL) - return ret; - kop->crk_param[kop->crk_iparams + 1].crp_nbits = slen * 8; - kop->crk_oparams++; - } - - if (ioctl(fd, CIOCKEY, kop) == 0) { - if (r) - crparam2bn(&kop->crk_param[kop->crk_iparams], r); - if (s) - crparam2bn(&kop->crk_param[kop->crk_iparams + 1], s); - ret = 0; - } - - return ret; -} - -static int -cryptodev_bn_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont) -{ - struct crypt_kop kop; - int ret = 1; - - /* - * Currently, we know we can do mod exp iff we can do any asymmetric - * operations at all. - */ - if (cryptodev_asymfeat == 0) { - ret = BN_mod_exp(r, a, p, m, ctx); - return (ret); - } - - memset(&kop, 0, sizeof(kop)); - kop.crk_op = CRK_MOD_EXP; - - /* inputs: a^p % m */ - if (bn2crparam(a, &kop.crk_param[0])) - goto err; - if (bn2crparam(p, &kop.crk_param[1])) - goto err; - if (bn2crparam(m, &kop.crk_param[2])) - goto err; - kop.crk_iparams = 3; - - if (cryptodev_asym(&kop, BN_num_bytes(m), r, 0, NULL)) { - const RSA_METHOD *meth = RSA_PKCS1_OpenSSL(); - printf("OCF asym process failed, Running in software\n"); - ret = RSA_meth_get_bn_mod_exp(meth)(r, a, p, m, ctx, in_mont); - - } else if (ECANCELED == kop.crk_status) { - const RSA_METHOD *meth = RSA_PKCS1_OpenSSL(); - printf("OCF hardware operation cancelled. Running in Software\n"); - ret = RSA_meth_get_bn_mod_exp(meth)(r, a, p, m, ctx, in_mont); - } - /* else cryptodev operation worked ok ==> ret = 1 */ - - err: - zapparams(&kop); - return (ret); -} - -static int -cryptodev_rsa_nocrt_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, - BN_CTX *ctx) -{ - int r; - const BIGNUM *n = NULL; - const BIGNUM *d = NULL; - - ctx = BN_CTX_new(); - RSA_get0_key(rsa, &n, NULL, &d); - r = cryptodev_bn_mod_exp(r0, I, d, n, ctx, NULL); - BN_CTX_free(ctx); - return (r); -} - -static int -cryptodev_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) -{ - struct crypt_kop kop; - int ret = 1; - const BIGNUM *p = NULL; - const BIGNUM *q = NULL; - const BIGNUM *dmp1 = NULL; - const BIGNUM *dmq1 = NULL; - const BIGNUM *iqmp = NULL; - const BIGNUM *n = NULL; - - RSA_get0_factors(rsa, &p, &q); - RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); - RSA_get0_key(rsa, &n, NULL, NULL); - - if (!p || !q || !dmp1 || !dmq1 || !iqmp) { - /* XXX 0 means failure?? */ - return (0); - } - - memset(&kop, 0, sizeof(kop)); - kop.crk_op = CRK_MOD_EXP_CRT; - /* inputs: rsa->p rsa->q I rsa->dmp1 rsa->dmq1 rsa->iqmp */ - if (bn2crparam(p, &kop.crk_param[0])) - goto err; - if (bn2crparam(q, &kop.crk_param[1])) - goto err; - if (bn2crparam(I, &kop.crk_param[2])) - goto err; - if (bn2crparam(dmp1, &kop.crk_param[3])) - goto err; - if (bn2crparam(dmq1, &kop.crk_param[4])) - goto err; - if (bn2crparam(iqmp, &kop.crk_param[5])) - goto err; - kop.crk_iparams = 6; - - if (cryptodev_asym(&kop, BN_num_bytes(n), r0, 0, NULL)) { - const RSA_METHOD *meth = RSA_PKCS1_OpenSSL(); - printf("OCF asym process failed, running in Software\n"); - ret = RSA_meth_get_mod_exp(meth)(r0, I, rsa, ctx); - - } else if (ECANCELED == kop.crk_status) { - const RSA_METHOD *meth = RSA_PKCS1_OpenSSL(); - printf("OCF hardware operation cancelled. Running in Software\n"); - ret = RSA_meth_get_mod_exp(meth)(r0, I, rsa, ctx); - } - /* else cryptodev operation worked ok ==> ret = 1 */ - - err: - zapparams(&kop); - return (ret); -} - -#ifndef OPENSSL_NO_DSA -static int -cryptodev_dsa_bn_mod_exp(DSA *dsa, BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx) -{ - return cryptodev_bn_mod_exp(r, a, p, m, ctx, m_ctx); -} - -static int -cryptodev_dsa_dsa_mod_exp(DSA *dsa, BIGNUM *t1, const BIGNUM *g, - const BIGNUM *u1, const BIGNUM *pub_key, - const BIGNUM *u2, const BIGNUM *p, BN_CTX *ctx, - BN_MONT_CTX *mont) -{ - const BIGNUM *dsag, *dsap, *dsapub_key; - BIGNUM *t2; - int ret = 0; - const DSA_METHOD *meth; - int (*bn_mod_exp)(DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, - BN_CTX *, BN_MONT_CTX *); - - t2 = BN_new(); - if (t2 == NULL) - goto err; - - /* v = ( g^u1 * y^u2 mod p ) mod q */ - /* let t1 = g ^ u1 mod p */ - ret = 0; - - DSA_get0_pqg(dsa, &dsap, NULL, &dsag); - DSA_get0_key(dsa, &dsapub_key, NULL); - - meth = DSA_get_method(dsa); - if (meth == NULL) - goto err; - bn_mod_exp = DSA_meth_get_bn_mod_exp(meth); - if (bn_mod_exp == NULL) - goto err; - - if (!bn_mod_exp(dsa, t1, dsag, u1, dsap, ctx, mont)) - goto err; - - /* let t2 = y ^ u2 mod p */ - if (!bn_mod_exp(dsa, t2, dsapub_key, u2, dsap, ctx, mont)) - goto err; - /* let t1 = t1 * t2 mod p */ - if (!BN_mod_mul(t1, t1, t2, dsap, ctx)) - goto err; - - ret = 1; - err: - BN_free(t2); - return (ret); -} - -static DSA_SIG *cryptodev_dsa_do_sign(const unsigned char *dgst, int dlen, - DSA *dsa) -{ - struct crypt_kop kop; - BIGNUM *r, *s; - const BIGNUM *dsap = NULL, *dsaq = NULL, *dsag = NULL; - const BIGNUM *priv_key = NULL; - DSA_SIG *dsasig, *dsaret = NULL; - - dsasig = DSA_SIG_new(); - if (dsasig == NULL) - goto err; - - memset(&kop, 0, sizeof(kop)); - kop.crk_op = CRK_DSA_SIGN; - - /* inputs: dgst dsa->p dsa->q dsa->g dsa->priv_key */ - kop.crk_param[0].crp_p = (caddr_t) dgst; - kop.crk_param[0].crp_nbits = dlen * 8; - DSA_get0_pqg(dsa, &dsap, &dsaq, &dsag); - DSA_get0_key(dsa, NULL, &priv_key); - if (bn2crparam(dsap, &kop.crk_param[1])) - goto err; - if (bn2crparam(dsaq, &kop.crk_param[2])) - goto err; - if (bn2crparam(dsag, &kop.crk_param[3])) - goto err; - if (bn2crparam(priv_key, &kop.crk_param[4])) - goto err; - kop.crk_iparams = 5; - - r = BN_new(); - if (r == NULL) - goto err; - s = BN_new(); - if (s == NULL) - goto err; - if (cryptodev_asym(&kop, BN_num_bytes(dsaq), r, - BN_num_bytes(dsaq), s) == 0) { - DSA_SIG_set0(dsasig, r, s); - dsaret = dsasig; - } else { - dsaret = DSA_meth_get_sign(DSA_OpenSSL())(dgst, dlen, dsa); - } - err: - if (dsaret != dsasig) - DSA_SIG_free(dsasig); - kop.crk_param[0].crp_p = NULL; - zapparams(&kop); - return dsaret; -} - -static int -cryptodev_dsa_verify(const unsigned char *dgst, int dlen, - DSA_SIG *sig, DSA *dsa) -{ - struct crypt_kop kop; - int dsaret = 1; - const BIGNUM *pr, *ps, *p = NULL, *q = NULL, *g = NULL, *pub_key = NULL; - - memset(&kop, 0, sizeof(kop)); - kop.crk_op = CRK_DSA_VERIFY; - - /* inputs: dgst dsa->p dsa->q dsa->g dsa->pub_key sig->r sig->s */ - kop.crk_param[0].crp_p = (caddr_t) dgst; - kop.crk_param[0].crp_nbits = dlen * 8; - DSA_get0_pqg(dsa, &p, &q, &g); - if (bn2crparam(p, &kop.crk_param[1])) - goto err; - if (bn2crparam(q, &kop.crk_param[2])) - goto err; - if (bn2crparam(g, &kop.crk_param[3])) - goto err; - DSA_get0_key(dsa, &pub_key, NULL); - if (bn2crparam(pub_key, &kop.crk_param[4])) - goto err; - DSA_SIG_get0(sig, &pr, &ps); - if (bn2crparam(pr, &kop.crk_param[5])) - goto err; - if (bn2crparam(ps, &kop.crk_param[6])) - goto err; - kop.crk_iparams = 7; - - if (cryptodev_asym(&kop, 0, NULL, 0, NULL) == 0) { - /* - * OCF success value is 0, if not zero, change dsaret to fail - */ - if (0 != kop.crk_status) - dsaret = 0; - } else { - dsaret = DSA_meth_get_verify(DSA_OpenSSL())(dgst, dlen, sig, dsa); - } - err: - kop.crk_param[0].crp_p = NULL; - zapparams(&kop); - return (dsaret); -} -#endif - -#ifndef OPENSSL_NO_DH -static int -cryptodev_mod_exp_dh(const DH *dh, BIGNUM *r, const BIGNUM *a, - const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *m_ctx) -{ - return (cryptodev_bn_mod_exp(r, a, p, m, ctx, m_ctx)); -} - -static int -cryptodev_dh_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) -{ - struct crypt_kop kop; - int dhret = 1; - int fd, keylen; - const BIGNUM *p = NULL; - const BIGNUM *priv_key = NULL; - - if ((fd = get_asym_dev_crypto()) < 0) { - const DH_METHOD *meth = DH_OpenSSL(); - - return DH_meth_get_compute_key(meth)(key, pub_key, dh); - } - - DH_get0_pqg(dh, &p, NULL, NULL); - DH_get0_key(dh, NULL, &priv_key); - - keylen = BN_num_bits(p); - - memset(&kop, 0, sizeof(kop)); - kop.crk_op = CRK_DH_COMPUTE_KEY; - - /* inputs: dh->priv_key pub_key dh->p key */ - if (bn2crparam(priv_key, &kop.crk_param[0])) - goto err; - if (bn2crparam(pub_key, &kop.crk_param[1])) - goto err; - if (bn2crparam(p, &kop.crk_param[2])) - goto err; - kop.crk_iparams = 3; - - kop.crk_param[3].crp_p = (caddr_t) key; - kop.crk_param[3].crp_nbits = keylen * 8; - kop.crk_oparams = 1; - - if (ioctl(fd, CIOCKEY, &kop) == -1) { - const DH_METHOD *meth = DH_OpenSSL(); - - dhret = DH_meth_get_compute_key(meth)(key, pub_key, dh); - } - err: - kop.crk_param[3].crp_p = NULL; - zapparams(&kop); - return (dhret); -} - -#endif /* ndef OPENSSL_NO_DH */ - -/* - * ctrl right now is just a wrapper that doesn't do much - * but I expect we'll want some options soon. - */ -static int -cryptodev_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)) -{ -# ifdef HAVE_SYSLOG_R - struct syslog_data sd = SYSLOG_DATA_INIT; -# endif - - switch (cmd) { - default: -# ifdef HAVE_SYSLOG_R - syslog_r(LOG_ERR, &sd, "cryptodev_ctrl: unknown command %d", cmd); -# else - syslog(LOG_ERR, "cryptodev_ctrl: unknown command %d", cmd); -# endif - break; - } - return (1); -} - -void engine_load_cryptodev_int(void) -{ - ENGINE *engine = ENGINE_new(); - int fd; - - if (engine == NULL) - return; - if ((fd = get_dev_crypto()) < 0) { - ENGINE_free(engine); - return; - } - - /* - * find out what asymmetric crypto algorithms we support - */ - if (ioctl(fd, CIOCASYMFEAT, &cryptodev_asymfeat) == -1) { - put_dev_crypto(fd); - ENGINE_free(engine); - return; - } - put_dev_crypto(fd); - - if (!ENGINE_set_id(engine, "cryptodev") || - !ENGINE_set_name(engine, "BSD cryptodev engine") || - !ENGINE_set_destroy_function(engine, cryptodev_engine_destroy) || - !ENGINE_set_ciphers(engine, cryptodev_engine_ciphers) || - !ENGINE_set_digests(engine, cryptodev_engine_digests) || - !ENGINE_set_ctrl_function(engine, cryptodev_ctrl) || - !ENGINE_set_cmd_defns(engine, cryptodev_defns)) { - ENGINE_free(engine); - return; - } - - cryptodev_rsa = RSA_meth_dup(RSA_PKCS1_OpenSSL()); - if (cryptodev_rsa != NULL) { - RSA_meth_set1_name(cryptodev_rsa, "cryptodev RSA method"); - RSA_meth_set_flags(cryptodev_rsa, 0); - if (ENGINE_set_RSA(engine, cryptodev_rsa)) { - if (cryptodev_asymfeat & CRF_MOD_EXP) { - RSA_meth_set_bn_mod_exp(cryptodev_rsa, cryptodev_bn_mod_exp); - if (cryptodev_asymfeat & CRF_MOD_EXP_CRT) - RSA_meth_set_mod_exp(cryptodev_rsa, cryptodev_rsa_mod_exp); - else - RSA_meth_set_mod_exp(cryptodev_rsa, - cryptodev_rsa_nocrt_mod_exp); - } - } - } else { - ENGINE_free(engine); - return; - } - -#ifndef OPENSSL_NO_DSA - cryptodev_dsa = DSA_meth_dup(DSA_OpenSSL()); - if (cryptodev_dsa != NULL) { - DSA_meth_set1_name(cryptodev_dsa, "cryptodev DSA method"); - DSA_meth_set_flags(cryptodev_dsa, 0); - if (ENGINE_set_DSA(engine, cryptodev_dsa)) { - if (cryptodev_asymfeat & CRF_DSA_SIGN) - DSA_meth_set_sign(cryptodev_dsa, cryptodev_dsa_do_sign); - if (cryptodev_asymfeat & CRF_MOD_EXP) { - DSA_meth_set_bn_mod_exp(cryptodev_dsa, - cryptodev_dsa_bn_mod_exp); - DSA_meth_set_mod_exp(cryptodev_dsa, cryptodev_dsa_dsa_mod_exp); - } - if (cryptodev_asymfeat & CRF_DSA_VERIFY) - DSA_meth_set_verify(cryptodev_dsa, cryptodev_dsa_verify); - } - } else { - ENGINE_free(engine); - return; - } -#endif - -#ifndef OPENSSL_NO_DH - cryptodev_dh = DH_meth_dup(DH_OpenSSL()); - if (cryptodev_dh != NULL) { - DH_meth_set1_name(cryptodev_dh, "cryptodev DH method"); - DH_meth_set_flags(cryptodev_dh, 0); - if (ENGINE_set_DH(engine, cryptodev_dh)) { - if (cryptodev_asymfeat & CRF_MOD_EXP) { - DH_meth_set_bn_mod_exp(cryptodev_dh, cryptodev_mod_exp_dh); - if (cryptodev_asymfeat & CRF_DH_COMPUTE_KEY) - DH_meth_set_compute_key(cryptodev_dh, - cryptodev_dh_compute_key); - } - } - } else { - ENGINE_free(engine); - return; - } -#endif - - ENGINE_add(engine); - ENGINE_free(engine); - ERR_clear_error(); -} - -#endif /* HAVE_CRYPTODEV */ diff --git a/crypto/engine/eng_ctrl.c b/crypto/engine/eng_ctrl.c index 7925f4fa..3bc4aab1 100644 --- a/crypto/engine/eng_ctrl.c +++ b/crypto/engine/eng_ctrl.c @@ -63,6 +63,8 @@ static int int_ctrl_helper(ENGINE *e, int cmd, long i, void *p, { int idx; char *s = (char *)p; + const ENGINE_CMD_DEFN *cdp; + /* Take care of the easy one first (eg. it requires no searches) */ if (cmd == ENGINE_CTRL_GET_FIRST_CMD_TYPE) { if ((e->cmd_defns == NULL) || int_ctrl_cmd_is_null(e->cmd_defns)) @@ -91,39 +93,29 @@ static int int_ctrl_helper(ENGINE *e, int cmd, long i, void *p, * For the rest of the commands, the 'long' argument must specify a valid * command number - so we need to conduct a search. */ - if ((e->cmd_defns == NULL) || ((idx = int_ctrl_cmd_by_num(e->cmd_defns, - (unsigned int) - i)) < 0)) { + if ((e->cmd_defns == NULL) + || ((idx = int_ctrl_cmd_by_num(e->cmd_defns, (unsigned int)i)) < 0)) { ENGINEerr(ENGINE_F_INT_CTRL_HELPER, ENGINE_R_INVALID_CMD_NUMBER); return -1; } /* Now the logic splits depending on command type */ + cdp = &e->cmd_defns[idx]; switch (cmd) { case ENGINE_CTRL_GET_NEXT_CMD_TYPE: - idx++; - if (int_ctrl_cmd_is_null(e->cmd_defns + idx)) - /* end-of-list */ - return 0; - else - return e->cmd_defns[idx].cmd_num; + cdp++; + return int_ctrl_cmd_is_null(cdp) ? 0 : cdp->cmd_num; case ENGINE_CTRL_GET_NAME_LEN_FROM_CMD: - return strlen(e->cmd_defns[idx].cmd_name); + return strlen(cdp->cmd_name); case ENGINE_CTRL_GET_NAME_FROM_CMD: - return BIO_snprintf(s, strlen(e->cmd_defns[idx].cmd_name) + 1, - "%s", e->cmd_defns[idx].cmd_name); + return strlen(strcpy(s, cdp->cmd_name)); case ENGINE_CTRL_GET_DESC_LEN_FROM_CMD: - if (e->cmd_defns[idx].cmd_desc) - return strlen(e->cmd_defns[idx].cmd_desc); - return strlen(int_no_description); + return strlen(cdp->cmd_desc == NULL ? int_no_description + : cdp->cmd_desc); case ENGINE_CTRL_GET_DESC_FROM_CMD: - if (e->cmd_defns[idx].cmd_desc) - return BIO_snprintf(s, - strlen(e->cmd_defns[idx].cmd_desc) + 1, - "%s", e->cmd_defns[idx].cmd_desc); - return BIO_snprintf(s, strlen(int_no_description) + 1, "%s", - int_no_description); + return strlen(strcpy(s, cdp->cmd_desc == NULL ? int_no_description + : cdp->cmd_desc)); case ENGINE_CTRL_GET_CMD_FLAGS: - return e->cmd_defns[idx].cmd_flags; + return cdp->cmd_flags; } /* Shouldn't really be here ... */ ENGINEerr(ENGINE_F_INT_CTRL_HELPER, ENGINE_R_INTERNAL_LIST_ERROR); diff --git a/crypto/engine/eng_devcrypto.c b/crypto/engine/eng_devcrypto.c new file mode 100644 index 00000000..235e84b4 --- /dev/null +++ b/crypto/engine/eng_devcrypto.c @@ -0,0 +1,678 @@ +/* + * 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 + */ + +#include "e_os.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "internal/engine.h" + +#ifdef CRYPTO_ALGORITHM_MIN +# define CHECK_BSD_STYLE_MACROS +#endif + +/****************************************************************************** + * + * Ciphers + * + * Because they all do the same basic operation, we have only one set of + * method functions for them all to share, and a mapping table between + * NIDs and cryptodev IDs, with all the necessary size data. + * + *****/ + +struct cipher_ctx { + int cfd; + struct session_op sess; + + /* to pass from init to do_cipher */ + const unsigned char *iv; + int op; /* COP_ENCRYPT or COP_DECRYPT */ +}; + +static const struct cipher_data_st { + int nid; + int blocksize; + int keylen; + int ivlen; + int flags; + int devcryptoid; +} cipher_data[] = { +#ifndef OPENSSL_NO_DES + { NID_des_cbc, 8, 8, 8, EVP_CIPH_CBC_MODE, CRYPTO_DES_CBC }, + { NID_des_ede3_cbc, 8, 24, 8, EVP_CIPH_CBC_MODE, CRYPTO_3DES_CBC }, +#endif +#ifndef OPENSSL_NO_BF + { NID_bf_cbc, 8, 16, 8, EVP_CIPH_CBC_MODE, CRYPTO_BLF_CBC }, +#endif +#ifndef OPENSSL_NO_CAST + { NID_cast5_cbc, 8, 16, 8, EVP_CIPH_CBC_MODE, CRYPTO_CAST_CBC }, +#endif + { NID_aes_128_cbc, 16, 128 / 8, 16, EVP_CIPH_CBC_MODE, CRYPTO_AES_CBC }, + { NID_aes_192_cbc, 16, 192 / 8, 16, EVP_CIPH_CBC_MODE, CRYPTO_AES_CBC }, + { NID_aes_256_cbc, 16, 256 / 8, 16, EVP_CIPH_CBC_MODE, CRYPTO_AES_CBC }, +#ifndef OPENSSL_NO_RC4 + { NID_rc4, 1, 16, 0, CRYPTO_ARC4 }, +#endif +#if !defined(CHECK_BSD_STYLE_MACROS) || defined(CRYPTO_AES_CTR) + { NID_aes_128_ctr, 16, 128 / 8, 16, EVP_CIPH_CTR_MODE, CRYPTO_AES_CTR }, + { NID_aes_192_ctr, 16, 192 / 8, 16, EVP_CIPH_CTR_MODE, CRYPTO_AES_CTR }, + { NID_aes_256_ctr, 16, 256 / 8, 16, EVP_CIPH_CTR_MODE, CRYPTO_AES_CTR }, +#endif +#if 0 /* Not yet supported */ + { NID_aes_128_xts, 16, 128 / 8 * 2, 16, EVP_CIPH_XTS_MODE, CRYPTO_AES_XTS }, + { NID_aes_256_xts, 16, 256 / 8 * 2, 16, EVP_CIPH_XTS_MODE, CRYPTO_AES_XTS }, +#endif +#if !defined(CHECK_BSD_STYLE_MACROS) || defined(CRYPTO_AES_ECB) + { NID_aes_128_ecb, 16, 128 / 8, 16, EVP_CIPH_ECB_MODE, CRYPTO_AES_ECB }, + { NID_aes_192_ecb, 16, 192 / 8, 16, EVP_CIPH_ECB_MODE, CRYPTO_AES_ECB }, + { NID_aes_256_ecb, 16, 256 / 8, 16, EVP_CIPH_ECB_MODE, CRYPTO_AES_ECB }, +#endif +#if 0 /* Not yet supported */ + { NID_aes_128_gcm, 16, 128 / 8, 16, EVP_CIPH_GCM_MODE, CRYPTO_AES_GCM }, + { NID_aes_192_gcm, 16, 192 / 8, 16, EVP_CIPH_GCM_MODE, CRYPTO_AES_GCM }, + { NID_aes_256_gcm, 16, 256 / 8, 16, EVP_CIPH_GCM_MODE, CRYPTO_AES_GCM }, +#endif +#ifndef OPENSSL_NO_CAMELLIA + { NID_camellia_128_cbc, 16, 128 / 8, 16, EVP_CIPH_CBC_MODE, + CRYPTO_CAMELLIA_CBC }, + { NID_camellia_192_cbc, 16, 192 / 8, 16, EVP_CIPH_CBC_MODE, + CRYPTO_CAMELLIA_CBC }, + { NID_camellia_256_cbc, 16, 256 / 8, 16, EVP_CIPH_CBC_MODE, + CRYPTO_CAMELLIA_CBC }, +#endif +}; + +static size_t get_cipher_data_index(int nid) +{ + size_t i; + + for (i = 0; i < OSSL_NELEM(cipher_data); i++) + if (nid == cipher_data[i].nid) + return i; + + /* + * Code further down must make sure that only NIDs in the table above + * are used. If any other NID reaches this function, there's a grave + * coding error further down. + */ + assert("Code that never should be reached" == NULL); + return -1; +} + +static const struct cipher_data_st *get_cipher_data(int nid) +{ + return &cipher_data[get_cipher_data_index(nid)]; +} + +/* + * Following are the three necessary functions to map OpenSSL functionality + * with cryptodev. + */ + +static int cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc) +{ + struct cipher_ctx *cipher_ctx = + (struct cipher_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); + const struct cipher_data_st *cipher_d = + get_cipher_data(EVP_CIPHER_CTX_nid(ctx)); + + if ((cipher_ctx->cfd = open("/dev/crypto", O_RDWR, 0)) < 0) { + SYSerr(SYS_F_OPEN, errno); + return 0; + } + + memset(&cipher_ctx->sess, 0, sizeof(cipher_ctx->sess)); + cipher_ctx->sess.cipher = cipher_d->devcryptoid; + cipher_ctx->sess.keylen = cipher_d->keylen; + cipher_ctx->sess.key = (void *)key; + cipher_ctx->op = enc ? COP_ENCRYPT : COP_DECRYPT; + if (ioctl(cipher_ctx->cfd, CIOCGSESSION, &cipher_ctx->sess) < 0) { + SYSerr(SYS_F_IOCTL, errno); + close(cipher_ctx->cfd); + return 0; + } + + return 1; +} + +static int cipher_do_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t inl) +{ + struct cipher_ctx *cipher_ctx = + (struct cipher_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); + struct crypt_op cryp; +#if !defined(COP_FLAG_WRITE_IV) + unsigned char saved_iv[EVP_MAX_IV_LENGTH]; +#endif + + memset(&cryp, 0, sizeof(cryp)); + cryp.ses = cipher_ctx->sess.ses; + cryp.len = inl; + cryp.src = (void *)in; + cryp.dst = (void *)out; + cryp.iv = (void *)EVP_CIPHER_CTX_iv_noconst(ctx); + cryp.op = cipher_ctx->op; +#if !defined(COP_FLAG_WRITE_IV) + cryp.flags = 0; + + if (EVP_CIPHER_CTX_iv_length(ctx) > 0) { + assert(inl >= EVP_CIPHER_CTX_iv_length(ctx)); + if (!EVP_CIPHER_CTX_encrypting(ctx)) { + unsigned char *ivptr = in + inl - EVP_CIPHER_CTX_iv_length(ctx); + + memcpy(saved_iv, ivptr, EVP_CIPHER_CTX_iv_length(ctx)); + } + } +#else + cryp.flags = COP_FLAG_WRITE_IV; +#endif + + if (ioctl(cipher_ctx->cfd, CIOCCRYPT, &cryp) < 0) { + SYSerr(SYS_F_IOCTL, errno); + return 0; + } + +#if !defined(COP_FLAG_WRITE_IV) + if (EVP_CIPHER_CTX_iv_length(ctx) > 0) { + unsigned char *ivptr = saved_iv; + + assert(inl >= EVP_CIPHER_CTX_iv_length(ctx)); + if (!EVP_CIPHER_CTX_encrypting(ctx)) + ivptr = out + inl - EVP_CIPHER_CTX_iv_length(ctx); + + memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), ivptr, + EVP_CIPHER_CTX_iv_length(ctx)); + } +#endif + + return 1; +} + +static int cipher_cleanup(EVP_CIPHER_CTX *ctx) +{ + struct cipher_ctx *cipher_ctx = + (struct cipher_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); + + if (ioctl(cipher_ctx->cfd, CIOCFSESSION, &cipher_ctx->sess) < 0) { + SYSerr(SYS_F_IOCTL, errno); + return 0; + } + if (close(cipher_ctx->cfd) < 0) { + SYSerr(SYS_F_CLOSE, errno); + return 0; + } + + return 1; +} + +/* + * Keep a table of known nids and associated methods. + * Note that known_cipher_nids[] isn't necessarily indexed the same way as + * cipher_data[] above, which known_cipher_methods[] is. + */ +static int known_cipher_nids[OSSL_NELEM(cipher_data)]; +static int known_cipher_nids_amount = -1; /* -1 indicates not yet initialised */ +static EVP_CIPHER *known_cipher_methods[OSSL_NELEM(cipher_data)] = { NULL, }; + +static void prepare_cipher_methods() +{ + size_t i; + struct session_op sess; + int cfd; + + if ((cfd = open("/dev/crypto", O_RDWR, 0)) < 0) + return; + + memset(&sess, 0, sizeof(sess)); + sess.key = (void *)"01234567890123456789012345678901234567890123456789"; + + for (i = 0, known_cipher_nids_amount = 0; + i < OSSL_NELEM(cipher_data); i++) { + + /* + * Check that the algo is really availably by trying to open and close + * a session. + */ + sess.cipher = cipher_data[i].devcryptoid; + sess.keylen = cipher_data[i].keylen; + if (ioctl(cfd, CIOCGSESSION, &sess) < 0 + || ioctl(cfd, CIOCFSESSION, &sess) < 0) + continue; + + if ((known_cipher_methods[i] = + EVP_CIPHER_meth_new(cipher_data[i].nid, + cipher_data[i].blocksize, + cipher_data[i].keylen)) == NULL + || !EVP_CIPHER_meth_set_iv_length(known_cipher_methods[i], + cipher_data[i].ivlen) + || !EVP_CIPHER_meth_set_flags(known_cipher_methods[i], + cipher_data[i].flags + | EVP_CIPH_FLAG_DEFAULT_ASN1) + || !EVP_CIPHER_meth_set_init(known_cipher_methods[i], cipher_init) + || !EVP_CIPHER_meth_set_do_cipher(known_cipher_methods[i], + cipher_do_cipher) + || !EVP_CIPHER_meth_set_cleanup(known_cipher_methods[i], + cipher_cleanup) + || !EVP_CIPHER_meth_set_impl_ctx_size(known_cipher_methods[i], + sizeof(struct cipher_ctx))) { + EVP_CIPHER_meth_free(known_cipher_methods[i]); + known_cipher_methods[i] = NULL; + } else { + known_cipher_nids[known_cipher_nids_amount++] = + cipher_data[i].nid; + } + } + + close(cfd); +} + +static const EVP_CIPHER *get_cipher_method(int nid) +{ + size_t i = get_cipher_data_index(nid); + + if (i == (size_t)-1) + return NULL; + return known_cipher_methods[i]; +} + +static int get_cipher_nids(const int **nids) +{ + *nids = known_cipher_nids; + return known_cipher_nids_amount; +} + +static void destroy_cipher_method(int nid) +{ + size_t i = get_cipher_data_index(nid); + + EVP_CIPHER_meth_free(known_cipher_methods[i]); + known_cipher_methods[i] = NULL; +} + +static void destroy_all_cipher_methods() +{ + size_t i; + + for (i = 0; i < OSSL_NELEM(cipher_data); i++) + destroy_cipher_method(cipher_data[i].nid); +} + +static int devcrypto_ciphers(ENGINE *e, const EVP_CIPHER **cipher, + const int **nids, int nid) +{ + if (cipher == NULL) + return get_cipher_nids(nids); + + *cipher = get_cipher_method(nid); + + return *cipher != NULL; +} + +/* + * We only support digests if the cryptodev implementation supports multiple + * data updates. Otherwise, we would be forced to maintain a cache, which is + * perilous if there's a lot of data coming in (if someone wants to checksum + * an OpenSSL tarball, for example). + */ +#if defined(COP_FLAG_UPDATE) && defined(COP_FLAG_FINAL) + +/****************************************************************************** + * + * Digests + * + * Because they all do the same basic operation, we have only one set of + * method functions for them all to share, and a mapping table between + * NIDs and cryptodev IDs, with all the necessary size data. + * + *****/ + +struct digest_ctx { + int cfd; + struct session_op sess; + int init; +}; + +static const struct digest_data_st { + int nid; + int digestlen; + int devcryptoid; +} digest_data[] = { +#ifndef OPENSSL_NO_MD5 + { NID_md5, 16, CRYPTO_MD5 }, +#endif + { NID_sha1, 20, CRYPTO_SHA1 }, +#ifndef OPENSSL_NO_RMD160 +# if !defined(CHECK_BSD_STYLE_MACROS) && defined(CRYPTO_RIPEMD160) + { NID_ripemd160, 20, CRYPTO_RIPEMD160 }, +# endif +#endif +#if !defined(CHECK_BSD_STYLE_MACROS) && defined(CRYPTO_SHA2_224) + { NID_sha224, 224 / 8, CRYPTO_SHA2_224 }, +#endif +#if !defined(CHECK_BSD_STYLE_MACROS) && defined(CRYPTO_SHA2_256) + { NID_sha256, 256 / 8, CRYPTO_SHA2_256 }, +#endif +#if !defined(CHECK_BSD_STYLE_MACROS) && defined(CRYPTO_SHA2_384) + { NID_sha384, 384 / 8, CRYPTO_SHA2_384 }, +#endif +#if !defined(CHECK_BSD_STYLE_MACROS) && defined(CRYPTO_SHA2_512) + { NID_sha512, 512 / 8, CRYPTO_SHA2_512 }, +#endif +}; + +static size_t get_digest_data_index(int nid) +{ + size_t i; + + for (i = 0; i < OSSL_NELEM(digest_data); i++) + if (nid == digest_data[i].nid) + return i; + + /* + * Code further down must make sure that only NIDs in the table above + * are used. If any other NID reaches this function, there's a grave + * coding error further down. + */ + assert("Code that never should be reached" == NULL); + return -1; +} + +static const struct digest_data_st *get_digest_data(int nid) +{ + return &digest_data[get_digest_data_index(nid)]; +} + +/* + * Following are the four necessary functions to map OpenSSL functionality + * with cryptodev. + */ + +static int digest_init(EVP_MD_CTX *ctx) +{ + struct digest_ctx *digest_ctx = + (struct digest_ctx *)EVP_MD_CTX_md_data(ctx); + const struct digest_data_st *digest_d = + get_digest_data(EVP_MD_CTX_type(ctx)); + + if (digest_ctx->init == 0 + && (digest_ctx->cfd = open("/dev/crypto", O_RDWR, 0)) < 0) { + SYSerr(SYS_F_OPEN, errno); + return 0; + } + + digest_ctx->init = 1; + + memset(&digest_ctx->sess, 0, sizeof(digest_ctx->sess)); + digest_ctx->sess.mac = digest_d->devcryptoid; + if (ioctl(digest_ctx->cfd, CIOCGSESSION, &digest_ctx->sess) < 0) { + SYSerr(SYS_F_IOCTL, errno); + close(digest_ctx->cfd); + return 0; + } + + return 1; +} + +static int digest_op(struct digest_ctx *ctx, const void *src, size_t srclen, + void *res, unsigned int flags) +{ + struct crypt_op cryp; + + memset(&cryp, 0, sizeof(cryp)); + cryp.ses = ctx->sess.ses; + cryp.len = srclen; + cryp.src = (void *)src; + cryp.dst = NULL; + cryp.mac = res; + cryp.flags = flags; + return ioctl(ctx->cfd, CIOCCRYPT, &cryp); +} + +static int digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) +{ + struct digest_ctx *digest_ctx = + (struct digest_ctx *)EVP_MD_CTX_md_data(ctx); + + if (count == 0) + return 1; + + if (digest_op(digest_ctx, data, count, NULL, COP_FLAG_UPDATE) < 0) { + SYSerr(SYS_F_IOCTL, errno); + return 0; + } + + return 1; +} + +static int digest_final(EVP_MD_CTX *ctx, unsigned char *md) +{ + struct digest_ctx *digest_ctx = + (struct digest_ctx *)EVP_MD_CTX_md_data(ctx); + + if (digest_op(digest_ctx, NULL, 0, md, COP_FLAG_FINAL) < 0) { + SYSerr(SYS_F_IOCTL, errno); + return 0; + } + if (ioctl(digest_ctx->cfd, CIOCFSESSION, &digest_ctx->sess) < 0) { + SYSerr(SYS_F_IOCTL, errno); + return 0; + } + + return 1; +} + +static int digest_cleanup(EVP_MD_CTX *ctx) +{ + struct digest_ctx *digest_ctx = + (struct digest_ctx *)EVP_MD_CTX_md_data(ctx); + + if (close(digest_ctx->cfd) < 0) { + SYSerr(SYS_F_CLOSE, errno); + return 0; + } + + return 1; +} + +/* + * Keep a table of known nids and associated methods. + * Note that known_digest_nids[] isn't necessarily indexed the same way as + * digest_data[] above, which known_digest_methods[] is. + */ +static int known_digest_nids[OSSL_NELEM(digest_data)]; +static int known_digest_nids_amount = -1; /* -1 indicates not yet initialised */ +static EVP_MD *known_digest_methods[OSSL_NELEM(digest_data)] = { NULL, }; + +static void prepare_digest_methods() +{ + size_t i; + struct session_op sess; + int cfd; + + if ((cfd = open("/dev/crypto", O_RDWR, 0)) < 0) + return; + + memset(&sess, 0, sizeof(sess)); + + for (i = 0, known_digest_nids_amount = 0; i < OSSL_NELEM(digest_data); + i++) { + + /* + * Check that the algo is really availably by trying to open and close + * a session. + */ + sess.mac = digest_data[i].devcryptoid; + if (ioctl(cfd, CIOCGSESSION, &sess) < 0 + || ioctl(cfd, CIOCFSESSION, &sess) < 0) + continue; + + if ((known_digest_methods[i] = EVP_MD_meth_new(digest_data[i].nid, + NID_undef)) == NULL + || !EVP_MD_meth_set_result_size(known_digest_methods[i], + digest_data[i].digestlen) + || !EVP_MD_meth_set_init(known_digest_methods[i], digest_init) + || !EVP_MD_meth_set_update(known_digest_methods[i], digest_update) + || !EVP_MD_meth_set_final(known_digest_methods[i], digest_final) + || !EVP_MD_meth_set_cleanup(known_digest_methods[i], digest_cleanup) + || !EVP_MD_meth_set_app_datasize(known_digest_methods[i], + sizeof(struct digest_ctx))) { + EVP_MD_meth_free(known_digest_methods[i]); + known_digest_methods[i] = NULL; + } else { + known_digest_nids[known_digest_nids_amount++] = digest_data[i].nid; + } + } + + close(cfd); +} + +static const EVP_MD *get_digest_method(int nid) +{ + size_t i = get_digest_data_index(nid); + + if (i == (size_t)-1) + return NULL; + return known_digest_methods[i]; +} + +static int get_digest_nids(const int **nids) +{ + *nids = known_digest_nids; + return known_digest_nids_amount; +} + +static void destroy_digest_method(int nid) +{ + size_t i = get_digest_data_index(nid); + + EVP_MD_meth_free(known_digest_methods[i]); + known_digest_methods[i] = NULL; +} + +static void destroy_all_digest_methods() +{ + size_t i; + + for (i = 0; i < OSSL_NELEM(digest_data); i++) + destroy_digest_method(digest_data[i].nid); +} + +static int devcrypto_digests(ENGINE *e, const EVP_MD **digest, + const int **nids, int nid) +{ + if (digest == NULL) + return get_digest_nids(nids); + + *digest = get_digest_method(nid); + + return *digest != NULL; +} + +#endif + +/****************************************************************************** + * + * LOAD / UNLOAD + * + *****/ + +static int devcrypto_unload(ENGINE *e) +{ + destroy_all_cipher_methods(); +#if defined(COP_FLAG_UPDATE) && defined(COP_FLAG_FINAL) + destroy_all_digest_methods(); +#endif + return 1; +} +/* + * This engine is always built into libcrypto, so it doesn't offer any + * ability to be dynamically loadable. + */ +void engine_load_devcrypto_int() +{ + ENGINE *e = NULL; + + if (access("/dev/crypto", R_OK | W_OK) < 0) { + fprintf(stderr, + "/dev/crypto not present, not enabling devcrypto engine\n"); + return; + } + + prepare_cipher_methods(); +#if defined(COP_FLAG_UPDATE) && defined(COP_FLAG_FINAL) + prepare_digest_methods(); +#endif + + if ((e = ENGINE_new()) == NULL) + return; + + if (!ENGINE_set_id(e, "devcrypto") + || !ENGINE_set_name(e, "/dev/crypto engine") + || !ENGINE_set_destroy_function(e, devcrypto_unload) + +/* + * Asymmetric ciphers aren't well supported with /dev/crypto. Among the BSD + * implementations, it seems to only exist in FreeBSD, and regarding the + * parameters in its crypt_kop, the manual crypto(4) has this to say: + * + * The semantics of these arguments are currently undocumented. + * + * Reading through the FreeBSD source code doesn't give much more than + * their CRK_MOD_EXP implementation for ubsec. + * + * It doesn't look much better with cryptodev-linux. They have the crypt_kop + * structure as well as the command (CRK_*) in cryptodev.h, but no support + * seems to be implemented at all for the moment. + * + * At the time of writing, it seems impossible to write proper support for + * FreeBSD's asym features without some very deep knowledge and access to + * specific kernel modules. + * + * /Richard Levitte, 2017-05-11 + */ +#if 0 +# ifndef OPENSSL_NO_RSA + || !ENGINE_set_RSA(e, devcrypto_rsa) +# endif +# ifndef OPENSSL_NO_DSA + || !ENGINE_set_DSA(e, devcrypto_dsa) +# endif +# ifndef OPENSSL_NO_DH + || !ENGINE_set_DH(e, devcrypto_dh) +# endif +# ifndef OPENSSL_NO_EC + || !ENGINE_set_EC(e, devcrypto_ec) +# endif +#endif + || !ENGINE_set_ciphers(e, devcrypto_ciphers) +#if defined(COP_FLAG_UPDATE) && defined(COP_FLAG_FINAL) + || !ENGINE_set_digests(e, devcrypto_digests) +#endif + ) { + ENGINE_free(e); + return; + } + + ENGINE_add(e); + ENGINE_free(e); /* Loose our local reference */ + ERR_clear_error(); +} diff --git a/crypto/engine/eng_err.c b/crypto/engine/eng_err.c index 5e9d16f3..5f24e998 100644 --- a/crypto/engine/eng_err.c +++ b/crypto/engine/eng_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,103 +8,132 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_ENGINE,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_ENGINE,0,reason) - -static ERR_STRING_DATA ENGINE_str_functs[] = { - {ERR_FUNC(ENGINE_F_DYNAMIC_CTRL), "dynamic_ctrl"}, - {ERR_FUNC(ENGINE_F_DYNAMIC_GET_DATA_CTX), "dynamic_get_data_ctx"}, - {ERR_FUNC(ENGINE_F_DYNAMIC_LOAD), "dynamic_load"}, - {ERR_FUNC(ENGINE_F_DYNAMIC_SET_DATA_CTX), "dynamic_set_data_ctx"}, - {ERR_FUNC(ENGINE_F_ENGINE_ADD), "ENGINE_add"}, - {ERR_FUNC(ENGINE_F_ENGINE_BY_ID), "ENGINE_by_id"}, - {ERR_FUNC(ENGINE_F_ENGINE_CMD_IS_EXECUTABLE), "ENGINE_cmd_is_executable"}, - {ERR_FUNC(ENGINE_F_ENGINE_CTRL), "ENGINE_ctrl"}, - {ERR_FUNC(ENGINE_F_ENGINE_CTRL_CMD), "ENGINE_ctrl_cmd"}, - {ERR_FUNC(ENGINE_F_ENGINE_CTRL_CMD_STRING), "ENGINE_ctrl_cmd_string"}, - {ERR_FUNC(ENGINE_F_ENGINE_FINISH), "ENGINE_finish"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_CIPHER), "ENGINE_get_cipher"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_DIGEST), "ENGINE_get_digest"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_FIRST), "ENGINE_get_first"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_LAST), "ENGINE_get_last"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_NEXT), "ENGINE_get_next"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_PKEY_ASN1_METH), +static const ERR_STRING_DATA ENGINE_str_functs[] = { + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_DIGEST_UPDATE, 0), "digest_update"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_DYNAMIC_CTRL, 0), "dynamic_ctrl"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_DYNAMIC_GET_DATA_CTX, 0), + "dynamic_get_data_ctx"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_DYNAMIC_LOAD, 0), "dynamic_load"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_DYNAMIC_SET_DATA_CTX, 0), + "dynamic_set_data_ctx"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_ADD, 0), "ENGINE_add"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_BY_ID, 0), "ENGINE_by_id"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_CMD_IS_EXECUTABLE, 0), + "ENGINE_cmd_is_executable"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_CTRL, 0), "ENGINE_ctrl"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_CTRL_CMD, 0), "ENGINE_ctrl_cmd"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_CTRL_CMD_STRING, 0), + "ENGINE_ctrl_cmd_string"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_FINISH, 0), "ENGINE_finish"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_CIPHER, 0), + "ENGINE_get_cipher"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_DIGEST, 0), + "ENGINE_get_digest"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_FIRST, 0), + "ENGINE_get_first"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_LAST, 0), "ENGINE_get_last"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_NEXT, 0), "ENGINE_get_next"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_PKEY_ASN1_METH, 0), "ENGINE_get_pkey_asn1_meth"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_PKEY_METH), "ENGINE_get_pkey_meth"}, - {ERR_FUNC(ENGINE_F_ENGINE_GET_PREV), "ENGINE_get_prev"}, - {ERR_FUNC(ENGINE_F_ENGINE_INIT), "ENGINE_init"}, - {ERR_FUNC(ENGINE_F_ENGINE_LIST_ADD), "engine_list_add"}, - {ERR_FUNC(ENGINE_F_ENGINE_LIST_REMOVE), "engine_list_remove"}, - {ERR_FUNC(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY), "ENGINE_load_private_key"}, - {ERR_FUNC(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY), "ENGINE_load_public_key"}, - {ERR_FUNC(ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT), + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_PKEY_METH, 0), + "ENGINE_get_pkey_meth"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_GET_PREV, 0), "ENGINE_get_prev"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_INIT, 0), "ENGINE_init"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_LIST_ADD, 0), "engine_list_add"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_LIST_REMOVE, 0), + "engine_list_remove"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, 0), + "ENGINE_load_private_key"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, 0), + "ENGINE_load_public_key"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT, 0), "ENGINE_load_ssl_client_cert"}, - {ERR_FUNC(ENGINE_F_ENGINE_NEW), "ENGINE_new"}, - {ERR_FUNC(ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR), + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_NEW, 0), "ENGINE_new"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR, 0), "ENGINE_pkey_asn1_find_str"}, - {ERR_FUNC(ENGINE_F_ENGINE_REMOVE), "ENGINE_remove"}, - {ERR_FUNC(ENGINE_F_ENGINE_SET_DEFAULT_STRING), + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_REMOVE, 0), "ENGINE_remove"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_SET_DEFAULT_STRING, 0), "ENGINE_set_default_string"}, - {ERR_FUNC(ENGINE_F_ENGINE_SET_ID), "ENGINE_set_id"}, - {ERR_FUNC(ENGINE_F_ENGINE_SET_NAME), "ENGINE_set_name"}, - {ERR_FUNC(ENGINE_F_ENGINE_TABLE_REGISTER), "engine_table_register"}, - {ERR_FUNC(ENGINE_F_ENGINE_UNLOCKED_FINISH), "engine_unlocked_finish"}, - {ERR_FUNC(ENGINE_F_ENGINE_UP_REF), "ENGINE_up_ref"}, - {ERR_FUNC(ENGINE_F_INT_CTRL_HELPER), "int_ctrl_helper"}, - {ERR_FUNC(ENGINE_F_INT_ENGINE_CONFIGURE), "int_engine_configure"}, - {ERR_FUNC(ENGINE_F_INT_ENGINE_MODULE_INIT), "int_engine_module_init"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_SET_ID, 0), "ENGINE_set_id"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_SET_NAME, 0), "ENGINE_set_name"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_TABLE_REGISTER, 0), + "engine_table_register"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_UNLOCKED_FINISH, 0), + "engine_unlocked_finish"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_ENGINE_UP_REF, 0), "ENGINE_up_ref"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_INT_CTRL_HELPER, 0), "int_ctrl_helper"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_INT_ENGINE_CONFIGURE, 0), + "int_engine_configure"}, + {ERR_PACK(ERR_LIB_ENGINE, ENGINE_F_INT_ENGINE_MODULE_INIT, 0), + "int_engine_module_init"}, {0, NULL} }; -static ERR_STRING_DATA ENGINE_str_reasons[] = { - {ERR_REASON(ENGINE_R_ALREADY_LOADED), "already loaded"}, - {ERR_REASON(ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER), - "argument is not a number"}, - {ERR_REASON(ENGINE_R_CMD_NOT_EXECUTABLE), "cmd not executable"}, - {ERR_REASON(ENGINE_R_COMMAND_TAKES_INPUT), "command takes input"}, - {ERR_REASON(ENGINE_R_COMMAND_TAKES_NO_INPUT), "command takes no input"}, - {ERR_REASON(ENGINE_R_CONFLICTING_ENGINE_ID), "conflicting engine id"}, - {ERR_REASON(ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED), - "ctrl command not implemented"}, - {ERR_REASON(ENGINE_R_DSO_FAILURE), "DSO failure"}, - {ERR_REASON(ENGINE_R_DSO_NOT_FOUND), "dso not found"}, - {ERR_REASON(ENGINE_R_ENGINES_SECTION_ERROR), "engines section error"}, - {ERR_REASON(ENGINE_R_ENGINE_CONFIGURATION_ERROR), - "engine configuration error"}, - {ERR_REASON(ENGINE_R_ENGINE_IS_NOT_IN_LIST), "engine is not in the list"}, - {ERR_REASON(ENGINE_R_ENGINE_SECTION_ERROR), "engine section error"}, - {ERR_REASON(ENGINE_R_FAILED_LOADING_PRIVATE_KEY), - "failed loading private key"}, - {ERR_REASON(ENGINE_R_FAILED_LOADING_PUBLIC_KEY), - "failed loading public key"}, - {ERR_REASON(ENGINE_R_FINISH_FAILED), "finish failed"}, - {ERR_REASON(ENGINE_R_ID_OR_NAME_MISSING), "'id' or 'name' missing"}, - {ERR_REASON(ENGINE_R_INIT_FAILED), "init failed"}, - {ERR_REASON(ENGINE_R_INTERNAL_LIST_ERROR), "internal list error"}, - {ERR_REASON(ENGINE_R_INVALID_ARGUMENT), "invalid argument"}, - {ERR_REASON(ENGINE_R_INVALID_CMD_NAME), "invalid cmd name"}, - {ERR_REASON(ENGINE_R_INVALID_CMD_NUMBER), "invalid cmd number"}, - {ERR_REASON(ENGINE_R_INVALID_INIT_VALUE), "invalid init value"}, - {ERR_REASON(ENGINE_R_INVALID_STRING), "invalid string"}, - {ERR_REASON(ENGINE_R_NOT_INITIALISED), "not initialised"}, - {ERR_REASON(ENGINE_R_NOT_LOADED), "not loaded"}, - {ERR_REASON(ENGINE_R_NO_CONTROL_FUNCTION), "no control function"}, - {ERR_REASON(ENGINE_R_NO_INDEX), "no index"}, - {ERR_REASON(ENGINE_R_NO_LOAD_FUNCTION), "no load function"}, - {ERR_REASON(ENGINE_R_NO_REFERENCE), "no reference"}, - {ERR_REASON(ENGINE_R_NO_SUCH_ENGINE), "no such engine"}, - {ERR_REASON(ENGINE_R_UNIMPLEMENTED_CIPHER), "unimplemented cipher"}, - {ERR_REASON(ENGINE_R_UNIMPLEMENTED_DIGEST), "unimplemented digest"}, - {ERR_REASON(ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD), - "unimplemented public key method"}, - {ERR_REASON(ENGINE_R_VERSION_INCOMPATIBILITY), "version incompatibility"}, +static const ERR_STRING_DATA ENGINE_str_reasons[] = { + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ALREADY_LOADED), "already loaded"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER), + "argument is not a number"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_CMD_NOT_EXECUTABLE), + "cmd not executable"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_COMMAND_TAKES_INPUT), + "command takes input"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_COMMAND_TAKES_NO_INPUT), + "command takes no input"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_CONFLICTING_ENGINE_ID), + "conflicting engine id"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED), + "ctrl command not implemented"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_DSO_FAILURE), "DSO failure"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_DSO_NOT_FOUND), "dso not found"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ENGINES_SECTION_ERROR), + "engines section error"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ENGINE_CONFIGURATION_ERROR), + "engine configuration error"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ENGINE_IS_NOT_IN_LIST), + "engine is not in the list"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ENGINE_SECTION_ERROR), + "engine section error"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_FAILED_LOADING_PRIVATE_KEY), + "failed loading private key"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_FAILED_LOADING_PUBLIC_KEY), + "failed loading public key"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_FINISH_FAILED), "finish failed"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_ID_OR_NAME_MISSING), + "'id' or 'name' missing"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INIT_FAILED), "init failed"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INTERNAL_LIST_ERROR), + "internal list error"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INVALID_ARGUMENT), + "invalid argument"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INVALID_CMD_NAME), + "invalid cmd name"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INVALID_CMD_NUMBER), + "invalid cmd number"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INVALID_INIT_VALUE), + "invalid init value"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_INVALID_STRING), "invalid string"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NOT_INITIALISED), "not initialised"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NOT_LOADED), "not loaded"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NO_CONTROL_FUNCTION), + "no control function"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NO_INDEX), "no index"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NO_LOAD_FUNCTION), + "no load function"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NO_REFERENCE), "no reference"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_NO_SUCH_ENGINE), "no such engine"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_UNIMPLEMENTED_CIPHER), + "unimplemented cipher"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_UNIMPLEMENTED_DIGEST), + "unimplemented digest"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD), + "unimplemented public key method"}, + {ERR_PACK(ERR_LIB_ENGINE, 0, ENGINE_R_VERSION_INCOMPATIBILITY), + "version incompatibility"}, {0, NULL} }; @@ -113,10 +142,9 @@ static ERR_STRING_DATA ENGINE_str_reasons[] = { int ERR_load_ENGINE_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(ENGINE_str_functs[0].error) == NULL) { - ERR_load_strings(0, ENGINE_str_functs); - ERR_load_strings(0, ENGINE_str_reasons); + ERR_load_strings_const(ENGINE_str_functs); + ERR_load_strings_const(ENGINE_str_reasons); } #endif return 1; diff --git a/crypto/engine/eng_fat.c b/crypto/engine/eng_fat.c index 5cb81874..591fddc8 100644 --- a/crypto/engine/eng_fat.c +++ b/crypto/engine/eng_fat.c @@ -1,5 +1,6 @@ /* * Copyright 2001-2016 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 @@ -7,12 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #include "eng_int.h" #include diff --git a/crypto/engine/eng_init.c b/crypto/engine/eng_init.c index 8be7c6fc..7c235fc4 100644 --- a/crypto/engine/eng_init.c +++ b/crypto/engine/eng_init.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,6 +7,7 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include "eng_int.h" /* diff --git a/crypto/engine/eng_int.h b/crypto/engine/eng_int.h index c604fadd..60fdf820 100644 --- a/crypto/engine/eng_int.h +++ b/crypto/engine/eng_int.h @@ -1,5 +1,6 @@ /* * Copyright 2001-2016 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 @@ -7,18 +8,13 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #ifndef HEADER_ENGINE_INT_H # define HEADER_ENGINE_INT_H # include "internal/cryptlib.h" -# include -# include +# include "internal/engine.h" +# include "internal/thread_once.h" +# include "internal/refcount.h" #ifdef __cplusplus extern "C" { @@ -103,7 +99,7 @@ void engine_table_doall(ENGINE_TABLE *table, engine_table_doall_cb *cb, */ int engine_unlocked_init(ENGINE *e); int engine_unlocked_finish(ENGINE *e, int unlock_for_handlers); -int engine_free_util(ENGINE *e, int locked); +int engine_free_util(ENGINE *e, int not_locked); /* * This function will reset all "set"able values in an ENGINE to NULL. This @@ -156,7 +152,7 @@ struct engine_st { const ENGINE_CMD_DEFN *cmd_defns; int flags; /* reference count on the structure itself */ - int struct_ref; + CRYPTO_REF_COUNT struct_ref; /* * reference count on usability of the engine type. NB: This controls the * loading and initialisation of any functionality required by this diff --git a/crypto/engine/eng_lib.c b/crypto/engine/eng_lib.c index cbefc7eb..48d86b95 100644 --- a/crypto/engine/eng_lib.c +++ b/crypto/engine/eng_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,8 +7,10 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include "eng_int.h" #include +#include "internal/refcount.h" CRYPTO_RWLOCK *global_engine_lock; @@ -66,17 +68,21 @@ void engine_set_all_null(ENGINE *e) e->flags = 0; } -int engine_free_util(ENGINE *e, int locked) +int engine_free_util(ENGINE *e, int not_locked) { int i; if (e == NULL) return 1; - if (locked) +#ifdef HAVE_ATOMICS + CRYPTO_DOWN_REF(&e->struct_ref, &i, global_engine_lock); +#else + if (not_locked) CRYPTO_atomic_add(&e->struct_ref, -1, &i, global_engine_lock); else i = --e->struct_ref; - engine_ref_debug(e, 0, -1) +#endif + engine_ref_debug(e, 0, -1); if (i > 0) return 1; REF_ASSERT_ISNT(i < 0); @@ -168,12 +174,12 @@ void engine_cleanup_int(void) int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg) { - return (CRYPTO_set_ex_data(&e->ex_data, idx, arg)); + return CRYPTO_set_ex_data(&e->ex_data, idx, arg); } void *ENGINE_get_ex_data(const ENGINE *e, int idx) { - return (CRYPTO_get_ex_data(&e->ex_data, idx)); + return CRYPTO_get_ex_data(&e->ex_data, idx); } /* diff --git a/crypto/engine/eng_list.c b/crypto/engine/eng_list.c index 934389f7..bfd91e23 100644 --- a/crypto/engine/eng_list.c +++ b/crypto/engine/eng_list.c @@ -1,5 +1,6 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-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 @@ -7,19 +8,13 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #include "eng_int.h" /* * The linked-list of pointers to engine types. engine_list_head incorporates * an implicit structural reference but engine_list_tail does not - the - * latter is a computational niceity and only points to something that is - * already pointed to by its predecessor in the list (or engine_list_head + * latter is a computational optimization and only points to something that + * is already pointed to by its predecessor in the list (or engine_list_head * itself). In the same way, the use of the "prev" pointer in each ENGINE is * to save excessive list iteration, it doesn't correspond to an extra * structural reference. Hence, engine_list_head, and each non-null "next" @@ -322,7 +317,7 @@ ENGINE *ENGINE_by_id(const char *id) * Prevent infinite recursion if we're looking for the dynamic engine. */ if (strcmp(id, "dynamic")) { - if ((load_dir = getenv("OPENSSL_ENGINES")) == 0) + if ((load_dir = getenv("OPENSSL_ENGINES")) == NULL) load_dir = ENGINESDIR; iterator = ENGINE_by_id("dynamic"); if (!iterator || !ENGINE_ctrl_cmd_string(iterator, "ID", id, 0) || @@ -349,6 +344,6 @@ int ENGINE_up_ref(ENGINE *e) ENGINEerr(ENGINE_F_ENGINE_UP_REF, ERR_R_PASSED_NULL_PARAMETER); return 0; } - CRYPTO_atomic_add(&e->struct_ref, 1, &i, global_engine_lock); + CRYPTO_UP_REF(&e->struct_ref, &i, global_engine_lock); return 1; } diff --git a/crypto/engine/eng_openssl.c b/crypto/engine/eng_openssl.c index 9208f7ea..02885f46 100644 --- a/crypto/engine/eng_openssl.c +++ b/crypto/engine/eng_openssl.c @@ -1,5 +1,6 @@ /* * Copyright 2001-2016 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 @@ -7,16 +8,10 @@ * https://www.openssl.org/source/license.html */ -/* ==================================================================== - * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. - * ECDH support in OpenSSL originally developed by - * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project. - */ - #include #include #include "internal/cryptlib.h" -#include +#include "internal/engine.h" #include #include #include diff --git a/crypto/engine/eng_rdrand.c b/crypto/engine/eng_rdrand.c index b3defcbe..7be64e3f 100644 --- a/crypto/engine/eng_rdrand.c +++ b/crypto/engine/eng_rdrand.c @@ -11,7 +11,7 @@ #include #include -#include +#include "internal/engine.h" #include #include #include diff --git a/crypto/engine/eng_table.c b/crypto/engine/eng_table.c index ac4b02fc..219253a3 100644 --- a/crypto/engine/eng_table.c +++ b/crypto/engine/eng_table.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -109,11 +109,6 @@ int engine_table_register(ENGINE_TABLE **table, ENGINE_CLEANUP_CB *cleanup, } fnd->funct = NULL; (void)lh_ENGINE_PILE_insert(&(*table)->piles, fnd); - if (lh_ENGINE_PILE_retrieve(&(*table)->piles, &tmplate) != fnd) { - sk_ENGINE_free(fnd->sk); - OPENSSL_free(fnd); - goto end; - } } /* A registration shouldn't add duplicate entries */ (void)sk_ENGINE_delete_ptr(fnd->sk, e); diff --git a/crypto/engine/tb_asnmth.c b/crypto/engine/tb_asnmth.c index 480267da..bc6e91cc 100644 --- a/crypto/engine/tb_asnmth.c +++ b/crypto/engine/tb_asnmth.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,6 +7,7 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include "eng_int.h" #include #include "internal/asn1_int.h" diff --git a/crypto/err/err.c b/crypto/err/err.c index c4399285..d69fbf87 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,17 +10,17 @@ #include #include #include -#include -#include -#include -#include +#include "internal/cryptlib_int.h" +#include "internal/err.h" +#include "internal/err_int.h" +#include #include #include #include #include -#include +#include "internal/thread_once.h" -static void err_load_strings(int lib, ERR_STRING_DATA *str); +static int err_load_strings(const ERR_STRING_DATA *str); static void ERR_STATE_free(ERR_STATE *s); #ifndef OPENSSL_NO_ERR @@ -59,6 +59,7 @@ static ERR_STRING_DATA ERR_str_libraries[] = { {ERR_PACK(ERR_LIB_CT, 0, 0), "CT routines"}, {ERR_PACK(ERR_LIB_ASYNC, 0, 0), "ASYNC routines"}, {ERR_PACK(ERR_LIB_KDF, 0, 0), "KDF routines"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, 0), "STORE routines"}, {0, NULL}, }; @@ -83,6 +84,11 @@ static ERR_STRING_DATA ERR_str_functs[] = { {ERR_PACK(0, SYS_F_GETSOCKNAME, 0), "getsockname"}, {ERR_PACK(0, SYS_F_GETHOSTBYNAME, 0), "gethostbyname"}, {ERR_PACK(0, SYS_F_FFLUSH, 0), "fflush"}, + {ERR_PACK(0, SYS_F_OPEN, 0), "open"}, + {ERR_PACK(0, SYS_F_CLOSE, 0), "close"}, + {ERR_PACK(0, SYS_F_IOCTL, 0), "ioctl"}, + {ERR_PACK(0, SYS_F_STAT, 0), "stat"}, + {ERR_PACK(0, SYS_F_FCNTL, 0), "fcntl"}, {0, NULL}, }; @@ -103,6 +109,8 @@ static ERR_STRING_DATA ERR_str_reasons[] = { {ERR_R_PKCS7_LIB, "PKCS7 lib"}, {ERR_R_X509V3_LIB, "X509V3 lib"}, {ERR_R_ENGINE_LIB, "ENGINE lib"}, + {ERR_R_UI_LIB, "UI lib"}, + {ERR_R_OSSL_STORE_LIB, "STORE lib"}, {ERR_R_ECDSA_LIB, "ECDSA lib"}, {ERR_R_NESTED_ASN1_ERROR, "nested asn1 error"}, @@ -116,6 +124,7 @@ static ERR_STRING_DATA ERR_str_reasons[] = { {ERR_R_INTERNAL_ERROR, "internal error"}, {ERR_R_DISABLED, "called a function that was disabled at compile-time"}, {ERR_R_INIT_FAIL, "init fail"}, + {ERR_R_OPERATION_FAIL, "operation fail"}, {0, NULL}, }; @@ -153,7 +162,9 @@ static unsigned long err_string_data_hash(const ERR_STRING_DATA *a) static int err_string_data_cmp(const ERR_STRING_DATA *a, const ERR_STRING_DATA *b) { - return (int)(a->error - b->error); + if (a->error == b->error) + return 0; + return a->error > b->error ? 1 : -1; } static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *d) @@ -161,8 +172,7 @@ static ERR_STRING_DATA *int_err_get_item(const ERR_STRING_DATA *d) ERR_STRING_DATA *p = NULL; CRYPTO_THREAD_read_lock(err_string_lock); - if (int_error_hash != NULL) - p = lh_ERR_STRING_DATA_retrieve(int_error_hash, d); + p = lh_ERR_STRING_DATA_retrieve(int_error_hash, d); CRYPTO_THREAD_unlock(err_string_lock); return p; @@ -199,7 +209,7 @@ static void build_SYS_str_reasons(void) for (i = 1; i <= NUM_SYS_STR_REASONS; i++) { ERR_STRING_DATA *str = &SYS_str_reasons[i - 1]; - str->error = (unsigned long)i; + str->error = ERR_PACK(ERR_LIB_SYS, 0, i); if (str->string == NULL) { char (*dest)[LEN_SYS_STR_REASON] = &(strerror_tab[i - 1]); if (openssl_strerror_r(i, *dest, sizeof(*dest))) @@ -217,6 +227,7 @@ static void build_SYS_str_reasons(void) init = 0; CRYPTO_THREAD_unlock(err_string_lock); + err_load_strings(SYS_str_reasons); } #endif @@ -256,7 +267,9 @@ DEFINE_RUN_ONCE_STATIC(do_err_strings_init) { OPENSSL_init_crypto(0, NULL); err_string_lock = CRYPTO_THREAD_lock_new(); - return err_string_lock != NULL; + int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash, + err_string_data_cmp); + return err_string_lock != NULL && int_error_hash != NULL; } void err_cleanup(void) @@ -265,6 +278,32 @@ void err_cleanup(void) CRYPTO_THREAD_cleanup_local(&err_thread_local); CRYPTO_THREAD_lock_free(err_string_lock); err_string_lock = NULL; + lh_ERR_STRING_DATA_free(int_error_hash); + int_error_hash = NULL; +} + +/* + * Legacy; pack in the library. + */ +static void err_patch(int lib, ERR_STRING_DATA *str) +{ + unsigned long plib = ERR_PACK(lib, 0, 0); + + for (; str->error != 0; str++) + str->error |= plib; +} + +/* + * Hash in |str| error strings. Assumes the URN_ONCE was done. + */ +static int err_load_strings(const ERR_STRING_DATA *str) +{ + CRYPTO_THREAD_write_lock(err_string_lock); + for (; str->error; str++) + (void)lh_ERR_STRING_DATA_insert(int_error_hash, + (ERR_STRING_DATA *)str); + CRYPTO_THREAD_unlock(err_string_lock); + return 1; } int ERR_load_ERR_strings(void) @@ -273,36 +312,30 @@ int ERR_load_ERR_strings(void) if (!RUN_ONCE(&err_string_init, do_err_strings_init)) return 0; - err_load_strings(0, ERR_str_libraries); - err_load_strings(0, ERR_str_reasons); - err_load_strings(ERR_LIB_SYS, ERR_str_functs); + err_load_strings(ERR_str_libraries); + err_load_strings(ERR_str_reasons); + err_patch(ERR_LIB_SYS, ERR_str_functs); + err_load_strings(ERR_str_functs); build_SYS_str_reasons(); - err_load_strings(ERR_LIB_SYS, SYS_str_reasons); #endif return 1; } -static void err_load_strings(int lib, ERR_STRING_DATA *str) -{ - CRYPTO_THREAD_write_lock(err_string_lock); - if (int_error_hash == NULL) - int_error_hash = lh_ERR_STRING_DATA_new(err_string_data_hash, - err_string_data_cmp); - if (int_error_hash != NULL) { - for (; str->error; str++) { - if (lib) - str->error |= ERR_PACK(lib, 0, 0); - (void)lh_ERR_STRING_DATA_insert(int_error_hash, str); - } - } - CRYPTO_THREAD_unlock(err_string_lock); -} - int ERR_load_strings(int lib, ERR_STRING_DATA *str) { if (ERR_load_ERR_strings() == 0) return 0; - err_load_strings(lib, str); + + err_patch(lib, str); + err_load_strings(str); + return 1; +} + +int ERR_load_strings_const(const ERR_STRING_DATA *str) +{ + if (ERR_load_ERR_strings() == 0) + return 0; + err_load_strings(str); return 1; } @@ -312,13 +345,12 @@ int ERR_unload_strings(int lib, ERR_STRING_DATA *str) return 0; CRYPTO_THREAD_write_lock(err_string_lock); - if (int_error_hash != NULL) { - for (; str->error; str++) { - if (lib) - str->error |= ERR_PACK(lib, 0, 0); - (void)lh_ERR_STRING_DATA_delete(int_error_hash, str); - } - } + /* + * We don't need to ERR_PACK the lib, since that was done (to + * the table) when it was loaded. + */ + for (; str->error; str++) + (void)lh_ERR_STRING_DATA_delete(int_error_hash, str); CRYPTO_THREAD_unlock(err_string_lock); return 1; @@ -328,11 +360,6 @@ void err_free_strings_int(void) { if (!RUN_ONCE(&err_string_init, do_err_strings_init)) return; - - CRYPTO_THREAD_write_lock(err_string_lock); - lh_ERR_STRING_DATA_free(int_error_hash); - int_error_hash = NULL; - CRYPTO_THREAD_unlock(err_string_lock); } /********************************************************/ @@ -391,50 +418,50 @@ void ERR_clear_error(void) unsigned long ERR_get_error(void) { - return (get_error_values(1, 0, NULL, NULL, NULL, NULL)); + return get_error_values(1, 0, NULL, NULL, NULL, NULL); } unsigned long ERR_get_error_line(const char **file, int *line) { - return (get_error_values(1, 0, file, line, NULL, NULL)); + return get_error_values(1, 0, file, line, NULL, NULL); } unsigned long ERR_get_error_line_data(const char **file, int *line, const char **data, int *flags) { - return (get_error_values(1, 0, file, line, data, flags)); + return get_error_values(1, 0, file, line, data, flags); } unsigned long ERR_peek_error(void) { - return (get_error_values(0, 0, NULL, NULL, NULL, NULL)); + return get_error_values(0, 0, NULL, NULL, NULL, NULL); } unsigned long ERR_peek_error_line(const char **file, int *line) { - return (get_error_values(0, 0, file, line, NULL, NULL)); + return get_error_values(0, 0, file, line, NULL, NULL); } unsigned long ERR_peek_error_line_data(const char **file, int *line, const char **data, int *flags) { - return (get_error_values(0, 0, file, line, data, flags)); + return get_error_values(0, 0, file, line, data, flags); } unsigned long ERR_peek_last_error(void) { - return (get_error_values(0, 1, NULL, NULL, NULL, NULL)); + return get_error_values(0, 1, NULL, NULL, NULL, NULL); } unsigned long ERR_peek_last_error_line(const char **file, int *line) { - return (get_error_values(0, 1, file, line, NULL, NULL)); + return get_error_values(0, 1, file, line, NULL, NULL); } unsigned long ERR_peek_last_error_line_data(const char **file, int *line, const char **data, int *flags) { - return (get_error_values(0, 1, file, line, data, flags)); + return get_error_values(0, 1, file, line, data, flags); } static unsigned long get_error_values(int inc, int top, const char **file, @@ -475,15 +502,13 @@ static unsigned long get_error_values(int inc, int top, const char **file, es->err_buffer[i] = 0; } - if ((file != NULL) && (line != NULL)) { + if (file != NULL && line != NULL) { if (es->err_file[i] == NULL) { *file = "NA"; - if (line != NULL) - *line = 0; + *line = 0; } else { *file = es->err_file[i]; - if (line != NULL) - *line = es->err_line[i]; + *line = es->err_line[i]; } } @@ -515,45 +540,30 @@ void ERR_error_string_n(unsigned long e, char *buf, size_t len) return; l = ERR_GET_LIB(e); - f = ERR_GET_FUNC(e); - r = ERR_GET_REASON(e); - ls = ERR_lib_error_string(e); - fs = ERR_func_error_string(e); - rs = ERR_reason_error_string(e); - - if (ls == NULL) + if (ls == NULL) { BIO_snprintf(lsbuf, sizeof(lsbuf), "lib(%lu)", l); - if (fs == NULL) + ls = lsbuf; + } + + fs = ERR_func_error_string(e); + f = ERR_GET_FUNC(e); + if (fs == NULL) { BIO_snprintf(fsbuf, sizeof(fsbuf), "func(%lu)", f); - if (rs == NULL) + fs = fsbuf; + } + + rs = ERR_reason_error_string(e); + r = ERR_GET_REASON(e); + if (rs == NULL) { BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)", r); + rs = rsbuf; + } - BIO_snprintf(buf, len, "error:%08lX:%s:%s:%s", e, ls ? ls : lsbuf, - fs ? fs : fsbuf, rs ? rs : rsbuf); + BIO_snprintf(buf, len, "error:%08lX:%s:%s:%s", e, ls, fs, rs); if (strlen(buf) == len - 1) { - /* - * output may be truncated; make sure we always have 5 - * colon-separated fields, i.e. 4 colons ... - */ -#define NUM_COLONS 4 - if (len > NUM_COLONS) { /* ... if possible */ - int i; - char *s = buf; - - for (i = 0; i < NUM_COLONS; i++) { - char *colon = strchr(s, ':'); - if (colon == NULL || colon > &buf[len - 1] - NUM_COLONS + i) { - /* - * set colon no. i at last possible position (buf[len-1] - * is the terminating 0) - */ - colon = &buf[len - 1] - NUM_COLONS + i; - *colon = ':'; - } - s = colon + 1; - } - } + /* Didn't fit; use a minimal format. */ + BIO_snprintf(buf, len, "err:%lx:%lx:%lx:%lx", e, l, f, r); } } @@ -567,8 +577,7 @@ char *ERR_error_string(unsigned long e, char *ret) if (ret == NULL) ret = buf; - ERR_error_string_n(e, ret, 256); - + ERR_error_string_n(e, ret, (int)sizeof(buf)); return ret; } @@ -738,20 +747,19 @@ void ERR_add_error_vdata(int num, va_list args) n = 0; for (i = 0; i < num; i++) { a = va_arg(args, char *); - /* ignore NULLs, thanks to Bob Beck */ - if (a != NULL) { - n += strlen(a); - if (n > s) { - s = n + 20; - p = OPENSSL_realloc(str, s + 1); - if (p == NULL) { - OPENSSL_free(str); - return; - } - str = p; + if (a == NULL) + a = ""; + n += strlen(a); + if (n > s) { + s = n + 20; + p = OPENSSL_realloc(str, s + 1); + if (p == NULL) { + OPENSSL_free(str); + return; } - OPENSSL_strlcat(str, a, (size_t)s + 1); + str = p; } + OPENSSL_strlcat(str, a, (size_t)s + 1); } ERR_set_error_data(str, ERR_TXT_MALLOCED | ERR_TXT_STRING); } @@ -781,9 +789,7 @@ int ERR_pop_to_mark(void) while (es->bottom != es->top && (es->err_flags[es->top] & ERR_FLAG_MARK) == 0) { err_clear(es, es->top); - es->top -= 1; - if (es->top == -1) - es->top = ERR_NUM_ERRORS - 1; + es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1; } if (es->bottom == es->top) @@ -791,3 +797,24 @@ int ERR_pop_to_mark(void) es->err_flags[es->top] &= ~ERR_FLAG_MARK; return 1; } + +int ERR_clear_last_mark(void) +{ + ERR_STATE *es; + int top; + + es = ERR_get_state(); + if (es == NULL) + return 0; + + top = es->top; + while (es->bottom != top + && (es->err_flags[top] & ERR_FLAG_MARK) == 0) { + top = top > 0 ? top - 1 : ERR_NUM_ERRORS - 1; + } + + if (es->bottom == top) + return 0; + es->err_flags[top] &= ~ERR_FLAG_MARK; + return 1; +} diff --git a/crypto/err/err_all.c b/crypto/err/err_all.c index 3b1304f8..d9ec04b6 100644 --- a/crypto/err/err_all.c +++ b/crypto/err/err_all.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,43 +9,39 @@ #include #include "internal/err_int.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "internal/dso.h" -#include -#include -#include +#include +#include +#include #include -#ifdef OPENSSL_FIPS -# include -#endif -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include int err_load_crypto_strings_int(void) { if ( -#ifdef OPENSSL_FIPS - FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata) == 0 || -#endif #ifndef OPENSSL_NO_ERR ERR_load_ERR_strings() == 0 || /* include error strings for SYSerr */ ERR_load_BN_strings() == 0 || @@ -88,12 +84,7 @@ int err_load_crypto_strings_int(void) # ifndef OPENSSL_NO_OCSP ERR_load_OCSP_strings() == 0 || # endif -#ifndef OPENSSL_NO_UI ERR_load_UI_strings() == 0 || -#endif -# ifdef OPENSSL_FIPS - ERR_load_FIPS_strings() == 0 || -# endif # ifndef OPENSSL_NO_CMS ERR_load_CMS_strings() == 0 || # endif @@ -102,7 +93,8 @@ int err_load_crypto_strings_int(void) # endif ERR_load_ASYNC_strings() == 0 || #endif - ERR_load_KDF_strings() == 0) + ERR_load_KDF_strings() == 0 || + ERR_load_OSSL_STORE_strings() == 0) return 0; return 1; diff --git a/crypto/err/err_prn.c b/crypto/err/err_prn.c index 6ae12515..c82e6294 100644 --- a/crypto/err/err_prn.c +++ b/crypto/err/err_prn.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include diff --git a/crypto/err/openssl.ec b/crypto/err/openssl.ec index 15d151f3..be84c7cb 100644 --- a/crypto/err/openssl.ec +++ b/crypto/err/openssl.ec @@ -1,99 +1,75 @@ -# crypto/err/openssl.ec - # configuration file for util/mkerr.pl -# files that may have to be rewritten by util/mkerr.pl -L ERR NONE NONE -L BN include/openssl/bn.h crypto/bn/bn_err.c -L RSA include/openssl/rsa.h crypto/rsa/rsa_err.c -L DH include/openssl/dh.h crypto/dh/dh_err.c -L EVP include/openssl/evp.h crypto/evp/evp_err.c -L BUF include/openssl/buffer.h crypto/buffer/buf_err.c -L OBJ include/openssl/objects.h crypto/objects/obj_err.c -L PEM include/openssl/pem.h crypto/pem/pem_err.c -L DSA include/openssl/dsa.h crypto/dsa/dsa_err.c -L X509 include/openssl/x509.h crypto/x509/x509_err.c -L ASN1 include/openssl/asn1.h crypto/asn1/asn1_err.c -L CONF include/openssl/conf.h crypto/conf/conf_err.c -L CRYPTO include/openssl/crypto.h crypto/cpt_err.c -L EC include/openssl/ec.h crypto/ec/ec_err.c -L SSL include/openssl/ssl.h ssl/ssl_err.c -L BIO include/openssl/bio.h crypto/bio/bio_err.c -L PKCS7 include/openssl/pkcs7.h crypto/pkcs7/pkcs7err.c -L X509V3 include/openssl/x509v3.h crypto/x509v3/v3err.c -L PKCS12 include/openssl/pkcs12.h crypto/pkcs12/pk12err.c -L RAND include/openssl/rand.h crypto/rand/rand_err.c -L DSO include/internal/dso.h crypto/dso/dso_err.c -L ENGINE include/openssl/engine.h crypto/engine/eng_err.c -L OCSP include/openssl/ocsp.h crypto/ocsp/ocsp_err.c -L UI include/openssl/ui.h crypto/ui/ui_err.c -L COMP include/openssl/comp.h crypto/comp/comp_err.c -L TS include/openssl/ts.h crypto/ts/ts_err.c -#L HMAC include/openssl/hmac.h crypto/hmac/hmac_err.c -L CMS include/openssl/cms.h crypto/cms/cms_err.c -#L FIPS include/openssl/fips.h crypto/fips_err.h -L CT include/openssl/ct.h crypto/ct/ct_err.c -L ASYNC include/openssl/async.h crypto/async/async_err.c -L KDF include/openssl/kdf.h crypto/kdf/kdf_err.c +# The INPUT HEADER is scanned for declarations +# LIBNAME INPUT HEADER ERROR-TABLE FILE +L ERR NONE NONE +L BN include/openssl/bn.h crypto/bn/bn_err.c +L RSA include/openssl/rsa.h crypto/rsa/rsa_err.c +L DH include/openssl/dh.h crypto/dh/dh_err.c +L EVP include/openssl/evp.h crypto/evp/evp_err.c +L BUF include/openssl/buffer.h crypto/buffer/buf_err.c +L OBJ include/openssl/objects.h crypto/objects/obj_err.c +L PEM include/openssl/pem.h crypto/pem/pem_err.c +L DSA include/openssl/dsa.h crypto/dsa/dsa_err.c +L X509 include/openssl/x509.h crypto/x509/x509_err.c +L ASN1 include/openssl/asn1.h crypto/asn1/asn1_err.c +L CONF include/openssl/conf.h crypto/conf/conf_err.c +L CRYPTO include/openssl/crypto.h crypto/cpt_err.c +L EC include/openssl/ec.h crypto/ec/ec_err.c +L SSL include/openssl/ssl.h ssl/ssl_err.c +L BIO include/openssl/bio.h crypto/bio/bio_err.c +L PKCS7 include/openssl/pkcs7.h crypto/pkcs7/pkcs7err.c +L X509V3 include/openssl/x509v3.h crypto/x509v3/v3err.c +L PKCS12 include/openssl/pkcs12.h crypto/pkcs12/pk12err.c +L RAND include/openssl/rand.h crypto/rand/rand_err.c +L DSO include/internal/dso.h crypto/dso/dso_err.c +L ENGINE include/openssl/engine.h crypto/engine/eng_err.c +L OCSP include/openssl/ocsp.h crypto/ocsp/ocsp_err.c +L UI include/openssl/ui.h crypto/ui/ui_err.c +L COMP include/openssl/comp.h crypto/comp/comp_err.c +L TS include/openssl/ts.h crypto/ts/ts_err.c +L CMS include/openssl/cms.h crypto/cms/cms_err.c +L CT include/openssl/ct.h crypto/ct/ct_err.c +L ASYNC include/openssl/async.h crypto/async/async_err.c +L KDF include/openssl/kdf.h crypto/kdf/kdf_err.c +L OSSL_STORE include/openssl/store.h crypto/store/store_err.c # additional header files to be scanned for function names -L NONE include/openssl/x509_vfy.h NONE -L NONE crypto/ec/ec_lcl.h NONE -L NONE crypto/cms/cms_lcl.h NONE -L NONE crypto/ct/ct_locl.h NONE -#L NONE fips/rand/fips_rand.h NONE -L NONE ssl/ssl_locl.h NONE - -F RSAREF_F_RSA_BN2BIN -F RSAREF_F_RSA_PRIVATE_DECRYPT -F RSAREF_F_RSA_PRIVATE_ENCRYPT -F RSAREF_F_RSA_PUBLIC_DECRYPT -F RSAREF_F_RSA_PUBLIC_ENCRYPT - -R SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -R SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -R SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -R SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -R SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -R SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -R SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -R SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -R SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -R SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -R SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -R SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -R SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -R SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -R SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -R SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -R SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -R SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -R SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -R SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -R SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -R SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -R SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -R SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -R SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 -R SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 -R SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 -R SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -R SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -R TLS1_AD_UNKNOWN_PSK_IDENTITY 1115 -R TLS1_AD_NO_APPLICATION_PROTOCOL 1120 - -R RSAREF_R_CONTENT_ENCODING 0x0400 -R RSAREF_R_DATA 0x0401 -R RSAREF_R_DIGEST_ALGORITHM 0x0402 -R RSAREF_R_ENCODING 0x0403 -R RSAREF_R_KEY 0x0404 -R RSAREF_R_KEY_ENCODING 0x0405 -R RSAREF_R_LEN 0x0406 -R RSAREF_R_MODULUS_LEN 0x0407 -R RSAREF_R_NEED_RANDOM 0x0408 -R RSAREF_R_PRIVATE_KEY 0x0409 -R RSAREF_R_PUBLIC_KEY 0x040a -R RSAREF_R_SIGNATURE 0x040b -R RSAREF_R_SIGNATURE_ENCODING 0x040c -R RSAREF_R_ENCRYPTION_ALGORITHM 0x040d +L NONE include/openssl/x509_vfy.h NONE +L NONE crypto/ec/ec_lcl.h NONE +L NONE crypto/cms/cms_lcl.h NONE +L NONE crypto/ct/ct_locl.h NONE +L NONE ssl/ssl_locl.h NONE +# SSL/TLS alerts +R SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 +R SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 +R SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 +R SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 +R SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 +R SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 +R SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 +R SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 +R SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 +R SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 +R SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 +R SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 +R SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 +R SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +R SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 +R SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 +R SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 +R SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 +R SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 +R SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 +R SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +R SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 +R SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 +R SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 +R SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 +R SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 +R SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 +R SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 +R SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 +R TLS1_AD_UNKNOWN_PSK_IDENTITY 1115 +R TLS1_AD_NO_APPLICATION_PROTOCOL 1120 diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt new file mode 100644 index 00000000..e406becd --- /dev/null +++ b/crypto/err/openssl.txt @@ -0,0 +1,2827 @@ +# 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 + +# Function codes +ASN1_F_A2D_ASN1_OBJECT:100:a2d_ASN1_OBJECT +ASN1_F_A2I_ASN1_INTEGER:102:a2i_ASN1_INTEGER +ASN1_F_A2I_ASN1_STRING:103:a2i_ASN1_STRING +ASN1_F_APPEND_EXP:176:append_exp +ASN1_F_ASN1_BIT_STRING_SET_BIT:183:ASN1_BIT_STRING_set_bit +ASN1_F_ASN1_CB:177:asn1_cb +ASN1_F_ASN1_CHECK_TLEN:104:asn1_check_tlen +ASN1_F_ASN1_COLLECT:106:asn1_collect +ASN1_F_ASN1_D2I_EX_PRIMITIVE:108:asn1_d2i_ex_primitive +ASN1_F_ASN1_D2I_FP:109:ASN1_d2i_fp +ASN1_F_ASN1_D2I_READ_BIO:107:asn1_d2i_read_bio +ASN1_F_ASN1_DIGEST:184:ASN1_digest +ASN1_F_ASN1_DO_ADB:110:asn1_do_adb +ASN1_F_ASN1_DO_LOCK:233:asn1_do_lock +ASN1_F_ASN1_DUP:111:ASN1_dup +ASN1_F_ASN1_EX_C2I:204:asn1_ex_c2i +ASN1_F_ASN1_FIND_END:190:asn1_find_end +ASN1_F_ASN1_GENERALIZEDTIME_ADJ:216:ASN1_GENERALIZEDTIME_adj +ASN1_F_ASN1_GENERATE_V3:178:ASN1_generate_v3 +ASN1_F_ASN1_GET_INT64:224:asn1_get_int64 +ASN1_F_ASN1_GET_OBJECT:114:ASN1_get_object +ASN1_F_ASN1_GET_UINT64:225:asn1_get_uint64 +ASN1_F_ASN1_I2D_BIO:116:ASN1_i2d_bio +ASN1_F_ASN1_I2D_FP:117:ASN1_i2d_fp +ASN1_F_ASN1_ITEM_D2I_FP:206:ASN1_item_d2i_fp +ASN1_F_ASN1_ITEM_DUP:191:ASN1_item_dup +ASN1_F_ASN1_ITEM_EMBED_D2I:120:asn1_item_embed_d2i +ASN1_F_ASN1_ITEM_EMBED_NEW:121:asn1_item_embed_new +ASN1_F_ASN1_ITEM_I2D_BIO:192:ASN1_item_i2d_bio +ASN1_F_ASN1_ITEM_I2D_FP:193:ASN1_item_i2d_fp +ASN1_F_ASN1_ITEM_PACK:198:ASN1_item_pack +ASN1_F_ASN1_ITEM_SIGN:195:ASN1_item_sign +ASN1_F_ASN1_ITEM_SIGN_CTX:220:ASN1_item_sign_ctx +ASN1_F_ASN1_ITEM_UNPACK:199:ASN1_item_unpack +ASN1_F_ASN1_ITEM_VERIFY:197:ASN1_item_verify +ASN1_F_ASN1_MBSTRING_NCOPY:122:ASN1_mbstring_ncopy +ASN1_F_ASN1_OBJECT_NEW:123:ASN1_OBJECT_new +ASN1_F_ASN1_OUTPUT_DATA:214:asn1_output_data +ASN1_F_ASN1_PCTX_NEW:205:ASN1_PCTX_new +ASN1_F_ASN1_SCTX_NEW:221:ASN1_SCTX_new +ASN1_F_ASN1_SIGN:128:ASN1_sign +ASN1_F_ASN1_STR2TYPE:179:asn1_str2type +ASN1_F_ASN1_STRING_GET_INT64:227:asn1_string_get_int64 +ASN1_F_ASN1_STRING_GET_UINT64:230:asn1_string_get_uint64 +ASN1_F_ASN1_STRING_SET:186:ASN1_STRING_set +ASN1_F_ASN1_STRING_TABLE_ADD:129:ASN1_STRING_TABLE_add +ASN1_F_ASN1_STRING_TO_BN:228:asn1_string_to_bn +ASN1_F_ASN1_STRING_TYPE_NEW:130:ASN1_STRING_type_new +ASN1_F_ASN1_TEMPLATE_EX_D2I:132:asn1_template_ex_d2i +ASN1_F_ASN1_TEMPLATE_NEW:133:asn1_template_new +ASN1_F_ASN1_TEMPLATE_NOEXP_D2I:131:asn1_template_noexp_d2i +ASN1_F_ASN1_TIME_ADJ:217:ASN1_TIME_adj +ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING:134:ASN1_TYPE_get_int_octetstring +ASN1_F_ASN1_TYPE_GET_OCTETSTRING:135:ASN1_TYPE_get_octetstring +ASN1_F_ASN1_UTCTIME_ADJ:218:ASN1_UTCTIME_adj +ASN1_F_ASN1_VERIFY:137:ASN1_verify +ASN1_F_B64_READ_ASN1:209:b64_read_asn1 +ASN1_F_B64_WRITE_ASN1:210:B64_write_ASN1 +ASN1_F_BIO_NEW_NDEF:208:BIO_new_NDEF +ASN1_F_BITSTR_CB:180:bitstr_cb +ASN1_F_BN_TO_ASN1_STRING:229:bn_to_asn1_string +ASN1_F_C2I_ASN1_BIT_STRING:189:c2i_ASN1_BIT_STRING +ASN1_F_C2I_ASN1_INTEGER:194:c2i_ASN1_INTEGER +ASN1_F_C2I_ASN1_OBJECT:196:c2i_ASN1_OBJECT +ASN1_F_C2I_IBUF:226:c2i_ibuf +ASN1_F_C2I_UINT64_INT:101:c2i_uint64_int +ASN1_F_COLLECT_DATA:140:collect_data +ASN1_F_D2I_ASN1_OBJECT:147:d2i_ASN1_OBJECT +ASN1_F_D2I_ASN1_UINTEGER:150:d2i_ASN1_UINTEGER +ASN1_F_D2I_AUTOPRIVATEKEY:207:d2i_AutoPrivateKey +ASN1_F_D2I_PRIVATEKEY:154:d2i_PrivateKey +ASN1_F_D2I_PUBLICKEY:155:d2i_PublicKey +ASN1_F_DO_TCREATE:222:do_tcreate +ASN1_F_I2D_ASN1_BIO_STREAM:211:i2d_ASN1_bio_stream +ASN1_F_I2D_DSA_PUBKEY:161:i2d_DSA_PUBKEY +ASN1_F_I2D_EC_PUBKEY:181:i2d_EC_PUBKEY +ASN1_F_I2D_PRIVATEKEY:163:i2d_PrivateKey +ASN1_F_I2D_PUBLICKEY:164:i2d_PublicKey +ASN1_F_I2D_RSA_PUBKEY:165:i2d_RSA_PUBKEY +ASN1_F_LONG_C2I:166:long_c2i +ASN1_F_OID_MODULE_INIT:174:oid_module_init +ASN1_F_PARSE_TAGGING:182:parse_tagging +ASN1_F_PKCS5_PBE2_SET_IV:167:PKCS5_pbe2_set_iv +ASN1_F_PKCS5_PBE2_SET_SCRYPT:231:PKCS5_pbe2_set_scrypt +ASN1_F_PKCS5_PBE_SET:202:PKCS5_pbe_set +ASN1_F_PKCS5_PBE_SET0_ALGOR:215:PKCS5_pbe_set0_algor +ASN1_F_PKCS5_PBKDF2_SET:219:PKCS5_pbkdf2_set +ASN1_F_PKCS5_SCRYPT_SET:232:pkcs5_scrypt_set +ASN1_F_SMIME_READ_ASN1:212:SMIME_read_ASN1 +ASN1_F_SMIME_TEXT:213:SMIME_text +ASN1_F_STBL_MODULE_INIT:223:stbl_module_init +ASN1_F_UINT32_C2I:105:uint32_c2i +ASN1_F_UINT64_C2I:112:uint64_c2i +ASN1_F_X509_CRL_ADD0_REVOKED:169:X509_CRL_add0_revoked +ASN1_F_X509_INFO_NEW:170:X509_INFO_new +ASN1_F_X509_NAME_ENCODE:203:x509_name_encode +ASN1_F_X509_NAME_EX_D2I:158:x509_name_ex_d2i +ASN1_F_X509_NAME_EX_NEW:171:x509_name_ex_new +ASN1_F_X509_PKEY_NEW:173:X509_PKEY_new +ASYNC_F_ASYNC_CTX_NEW:100:async_ctx_new +ASYNC_F_ASYNC_INIT_THREAD:101:ASYNC_init_thread +ASYNC_F_ASYNC_JOB_NEW:102:async_job_new +ASYNC_F_ASYNC_PAUSE_JOB:103:ASYNC_pause_job +ASYNC_F_ASYNC_START_FUNC:104:async_start_func +ASYNC_F_ASYNC_START_JOB:105:ASYNC_start_job +BIO_F_ACPT_STATE:100:acpt_state +BIO_F_ADDR_STRINGS:134:addr_strings +BIO_F_BIO_ACCEPT:101:BIO_accept +BIO_F_BIO_ACCEPT_EX:137:BIO_accept_ex +BIO_F_BIO_ADDR_NEW:144:BIO_ADDR_new +BIO_F_BIO_BIND:147:BIO_bind +BIO_F_BIO_CALLBACK_CTRL:131:BIO_callback_ctrl +BIO_F_BIO_CONNECT:138:BIO_connect +BIO_F_BIO_CTRL:103:BIO_ctrl +BIO_F_BIO_GETS:104:BIO_gets +BIO_F_BIO_GET_HOST_IP:106:BIO_get_host_ip +BIO_F_BIO_GET_NEW_INDEX:102:BIO_get_new_index +BIO_F_BIO_GET_PORT:107:BIO_get_port +BIO_F_BIO_LISTEN:139:BIO_listen +BIO_F_BIO_LOOKUP:135:BIO_lookup +BIO_F_BIO_LOOKUP_EX:143:BIO_lookup_ex +BIO_F_BIO_MAKE_PAIR:121:bio_make_pair +BIO_F_BIO_METH_NEW:146:BIO_meth_new +BIO_F_BIO_NEW:108:BIO_new +BIO_F_BIO_NEW_DGRAM_SCTP:145:BIO_new_dgram_sctp +BIO_F_BIO_NEW_FILE:109:BIO_new_file +BIO_F_BIO_NEW_MEM_BUF:126:BIO_new_mem_buf +BIO_F_BIO_NREAD:123:BIO_nread +BIO_F_BIO_NREAD0:124:BIO_nread0 +BIO_F_BIO_NWRITE:125:BIO_nwrite +BIO_F_BIO_NWRITE0:122:BIO_nwrite0 +BIO_F_BIO_PARSE_HOSTSERV:136:BIO_parse_hostserv +BIO_F_BIO_PUTS:110:BIO_puts +BIO_F_BIO_READ:111:BIO_read +BIO_F_BIO_READ_EX:105:BIO_read_ex +BIO_F_BIO_READ_INTERN:120:bio_read_intern +BIO_F_BIO_SOCKET:140:BIO_socket +BIO_F_BIO_SOCKET_NBIO:142:BIO_socket_nbio +BIO_F_BIO_SOCK_INFO:141:BIO_sock_info +BIO_F_BIO_SOCK_INIT:112:BIO_sock_init +BIO_F_BIO_WRITE:113:BIO_write +BIO_F_BIO_WRITE_EX:119:BIO_write_ex +BIO_F_BIO_WRITE_INTERN:128:bio_write_intern +BIO_F_BUFFER_CTRL:114:buffer_ctrl +BIO_F_CONN_CTRL:127:conn_ctrl +BIO_F_CONN_STATE:115:conn_state +BIO_F_DGRAM_SCTP_READ:132:dgram_sctp_read +BIO_F_DGRAM_SCTP_WRITE:133:dgram_sctp_write +BIO_F_FILE_CTRL:116:file_ctrl +BIO_F_FILE_READ:130:file_read +BIO_F_LINEBUFFER_CTRL:129:linebuffer_ctrl +BIO_F_MEM_WRITE:117:mem_write +BIO_F_SSL_NEW:118:SSL_new +BN_F_BNRAND:127:bnrand +BN_F_BNRAND_RANGE:138:bnrand_range +BN_F_BN_BLINDING_CONVERT_EX:100:BN_BLINDING_convert_ex +BN_F_BN_BLINDING_CREATE_PARAM:128:BN_BLINDING_create_param +BN_F_BN_BLINDING_INVERT_EX:101:BN_BLINDING_invert_ex +BN_F_BN_BLINDING_NEW:102:BN_BLINDING_new +BN_F_BN_BLINDING_UPDATE:103:BN_BLINDING_update +BN_F_BN_BN2DEC:104:BN_bn2dec +BN_F_BN_BN2HEX:105:BN_bn2hex +BN_F_BN_COMPUTE_WNAF:142:bn_compute_wNAF +BN_F_BN_CTX_GET:116:BN_CTX_get +BN_F_BN_CTX_NEW:106:BN_CTX_new +BN_F_BN_CTX_START:129:BN_CTX_start +BN_F_BN_DIV:107:BN_div +BN_F_BN_DIV_RECP:130:BN_div_recp +BN_F_BN_EXP:123:BN_exp +BN_F_BN_EXPAND_INTERNAL:120:bn_expand_internal +BN_F_BN_GENCB_NEW:143:BN_GENCB_new +BN_F_BN_GENERATE_DSA_NONCE:140:BN_generate_dsa_nonce +BN_F_BN_GENERATE_PRIME_EX:141:BN_generate_prime_ex +BN_F_BN_GF2M_MOD:131:BN_GF2m_mod +BN_F_BN_GF2M_MOD_EXP:132:BN_GF2m_mod_exp +BN_F_BN_GF2M_MOD_MUL:133:BN_GF2m_mod_mul +BN_F_BN_GF2M_MOD_SOLVE_QUAD:134:BN_GF2m_mod_solve_quad +BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR:135:BN_GF2m_mod_solve_quad_arr +BN_F_BN_GF2M_MOD_SQR:136:BN_GF2m_mod_sqr +BN_F_BN_GF2M_MOD_SQRT:137:BN_GF2m_mod_sqrt +BN_F_BN_LSHIFT:145:BN_lshift +BN_F_BN_MOD_EXP2_MONT:118:BN_mod_exp2_mont +BN_F_BN_MOD_EXP_MONT:109:BN_mod_exp_mont +BN_F_BN_MOD_EXP_MONT_CONSTTIME:124:BN_mod_exp_mont_consttime +BN_F_BN_MOD_EXP_MONT_WORD:117:BN_mod_exp_mont_word +BN_F_BN_MOD_EXP_RECP:125:BN_mod_exp_recp +BN_F_BN_MOD_EXP_SIMPLE:126:BN_mod_exp_simple +BN_F_BN_MOD_INVERSE:110:BN_mod_inverse +BN_F_BN_MOD_INVERSE_NO_BRANCH:139:BN_mod_inverse_no_branch +BN_F_BN_MOD_LSHIFT_QUICK:119:BN_mod_lshift_quick +BN_F_BN_MOD_SQRT:121:BN_mod_sqrt +BN_F_BN_MPI2BN:112:BN_mpi2bn +BN_F_BN_NEW:113:BN_new +BN_F_BN_RAND:114:BN_rand +BN_F_BN_RAND_RANGE:122:BN_rand_range +BN_F_BN_RSHIFT:146:BN_rshift +BN_F_BN_SET_WORDS:144:bn_set_words +BN_F_BN_USUB:115:BN_usub +BUF_F_BUF_MEM_GROW:100:BUF_MEM_grow +BUF_F_BUF_MEM_GROW_CLEAN:105:BUF_MEM_grow_clean +BUF_F_BUF_MEM_NEW:101:BUF_MEM_new +CMS_F_CHECK_CONTENT:99:check_content +CMS_F_CMS_ADD0_CERT:164:CMS_add0_cert +CMS_F_CMS_ADD0_RECIPIENT_KEY:100:CMS_add0_recipient_key +CMS_F_CMS_ADD0_RECIPIENT_PASSWORD:165:CMS_add0_recipient_password +CMS_F_CMS_ADD1_RECEIPTREQUEST:158:CMS_add1_ReceiptRequest +CMS_F_CMS_ADD1_RECIPIENT_CERT:101:CMS_add1_recipient_cert +CMS_F_CMS_ADD1_SIGNER:102:CMS_add1_signer +CMS_F_CMS_ADD1_SIGNINGTIME:103:cms_add1_signingTime +CMS_F_CMS_COMPRESS:104:CMS_compress +CMS_F_CMS_COMPRESSEDDATA_CREATE:105:cms_CompressedData_create +CMS_F_CMS_COMPRESSEDDATA_INIT_BIO:106:cms_CompressedData_init_bio +CMS_F_CMS_COPY_CONTENT:107:cms_copy_content +CMS_F_CMS_COPY_MESSAGEDIGEST:108:cms_copy_messageDigest +CMS_F_CMS_DATA:109:CMS_data +CMS_F_CMS_DATAFINAL:110:CMS_dataFinal +CMS_F_CMS_DATAINIT:111:CMS_dataInit +CMS_F_CMS_DECRYPT:112:CMS_decrypt +CMS_F_CMS_DECRYPT_SET1_KEY:113:CMS_decrypt_set1_key +CMS_F_CMS_DECRYPT_SET1_PASSWORD:166:CMS_decrypt_set1_password +CMS_F_CMS_DECRYPT_SET1_PKEY:114:CMS_decrypt_set1_pkey +CMS_F_CMS_DIGESTALGORITHM_FIND_CTX:115:cms_DigestAlgorithm_find_ctx +CMS_F_CMS_DIGESTALGORITHM_INIT_BIO:116:cms_DigestAlgorithm_init_bio +CMS_F_CMS_DIGESTEDDATA_DO_FINAL:117:cms_DigestedData_do_final +CMS_F_CMS_DIGEST_VERIFY:118:CMS_digest_verify +CMS_F_CMS_ENCODE_RECEIPT:161:cms_encode_Receipt +CMS_F_CMS_ENCRYPT:119:CMS_encrypt +CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO:120:cms_EncryptedContent_init_bio +CMS_F_CMS_ENCRYPTEDDATA_DECRYPT:121:CMS_EncryptedData_decrypt +CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT:122:CMS_EncryptedData_encrypt +CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY:123:CMS_EncryptedData_set1_key +CMS_F_CMS_ENVELOPEDDATA_CREATE:124:CMS_EnvelopedData_create +CMS_F_CMS_ENVELOPEDDATA_INIT_BIO:125:cms_EnvelopedData_init_bio +CMS_F_CMS_ENVELOPED_DATA_INIT:126:cms_enveloped_data_init +CMS_F_CMS_ENV_ASN1_CTRL:171:cms_env_asn1_ctrl +CMS_F_CMS_FINAL:127:CMS_final +CMS_F_CMS_GET0_CERTIFICATE_CHOICES:128:cms_get0_certificate_choices +CMS_F_CMS_GET0_CONTENT:129:CMS_get0_content +CMS_F_CMS_GET0_ECONTENT_TYPE:130:cms_get0_econtent_type +CMS_F_CMS_GET0_ENVELOPED:131:cms_get0_enveloped +CMS_F_CMS_GET0_REVOCATION_CHOICES:132:cms_get0_revocation_choices +CMS_F_CMS_GET0_SIGNED:133:cms_get0_signed +CMS_F_CMS_MSGSIGDIGEST_ADD1:162:cms_msgSigDigest_add1 +CMS_F_CMS_RECEIPTREQUEST_CREATE0:159:CMS_ReceiptRequest_create0 +CMS_F_CMS_RECEIPT_VERIFY:160:cms_Receipt_verify +CMS_F_CMS_RECIPIENTINFO_DECRYPT:134:CMS_RecipientInfo_decrypt +CMS_F_CMS_RECIPIENTINFO_ENCRYPT:169:CMS_RecipientInfo_encrypt +CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT:178:cms_RecipientInfo_kari_encrypt +CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG:175:CMS_RecipientInfo_kari_get0_alg +CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID:173:\ + CMS_RecipientInfo_kari_get0_orig_id +CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS:172:CMS_RecipientInfo_kari_get0_reks +CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP:174:CMS_RecipientInfo_kari_orig_id_cmp +CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT:135:cms_RecipientInfo_kekri_decrypt +CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT:136:cms_RecipientInfo_kekri_encrypt +CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID:137:CMS_RecipientInfo_kekri_get0_id +CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP:138:CMS_RecipientInfo_kekri_id_cmp +CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP:139:CMS_RecipientInfo_ktri_cert_cmp +CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT:140:cms_RecipientInfo_ktri_decrypt +CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT:141:cms_RecipientInfo_ktri_encrypt +CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS:142:CMS_RecipientInfo_ktri_get0_algs +CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID:143:\ + CMS_RecipientInfo_ktri_get0_signer_id +CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT:167:cms_RecipientInfo_pwri_crypt +CMS_F_CMS_RECIPIENTINFO_SET0_KEY:144:CMS_RecipientInfo_set0_key +CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD:168:CMS_RecipientInfo_set0_password +CMS_F_CMS_RECIPIENTINFO_SET0_PKEY:145:CMS_RecipientInfo_set0_pkey +CMS_F_CMS_SD_ASN1_CTRL:170:cms_sd_asn1_ctrl +CMS_F_CMS_SET1_IAS:176:cms_set1_ias +CMS_F_CMS_SET1_KEYID:177:cms_set1_keyid +CMS_F_CMS_SET1_SIGNERIDENTIFIER:146:cms_set1_SignerIdentifier +CMS_F_CMS_SET_DETACHED:147:CMS_set_detached +CMS_F_CMS_SIGN:148:CMS_sign +CMS_F_CMS_SIGNED_DATA_INIT:149:cms_signed_data_init +CMS_F_CMS_SIGNERINFO_CONTENT_SIGN:150:cms_SignerInfo_content_sign +CMS_F_CMS_SIGNERINFO_SIGN:151:CMS_SignerInfo_sign +CMS_F_CMS_SIGNERINFO_VERIFY:152:CMS_SignerInfo_verify +CMS_F_CMS_SIGNERINFO_VERIFY_CERT:153:cms_signerinfo_verify_cert +CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT:154:CMS_SignerInfo_verify_content +CMS_F_CMS_SIGN_RECEIPT:163:CMS_sign_receipt +CMS_F_CMS_STREAM:155:CMS_stream +CMS_F_CMS_UNCOMPRESS:156:CMS_uncompress +CMS_F_CMS_VERIFY:157:CMS_verify +COMP_F_BIO_ZLIB_FLUSH:99:bio_zlib_flush +COMP_F_BIO_ZLIB_NEW:100:bio_zlib_new +COMP_F_BIO_ZLIB_READ:101:bio_zlib_read +COMP_F_BIO_ZLIB_WRITE:102:bio_zlib_write +CONF_F_CONF_DUMP_FP:104:CONF_dump_fp +CONF_F_CONF_LOAD:100:CONF_load +CONF_F_CONF_LOAD_FP:103:CONF_load_fp +CONF_F_CONF_PARSE_LIST:119:CONF_parse_list +CONF_F_DEF_LOAD:120:def_load +CONF_F_DEF_LOAD_BIO:121:def_load_bio +CONF_F_MODULE_INIT:115:module_init +CONF_F_MODULE_LOAD_DSO:117:module_load_dso +CONF_F_MODULE_RUN:118:module_run +CONF_F_NCONF_DUMP_BIO:105:NCONF_dump_bio +CONF_F_NCONF_DUMP_FP:106:NCONF_dump_fp +CONF_F_NCONF_GET_NUMBER_E:112:NCONF_get_number_e +CONF_F_NCONF_GET_SECTION:108:NCONF_get_section +CONF_F_NCONF_GET_STRING:109:NCONF_get_string +CONF_F_NCONF_LOAD:113:NCONF_load +CONF_F_NCONF_LOAD_BIO:110:NCONF_load_bio +CONF_F_NCONF_LOAD_FP:114:NCONF_load_fp +CONF_F_NCONF_NEW:111:NCONF_new +CONF_F_STR_COPY:101:str_copy +CRYPTO_F_CRYPTO_DUP_EX_DATA:110:CRYPTO_dup_ex_data +CRYPTO_F_CRYPTO_FREE_EX_DATA:111:CRYPTO_free_ex_data +CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX:100:CRYPTO_get_ex_new_index +CRYPTO_F_CRYPTO_MEMDUP:115:CRYPTO_memdup +CRYPTO_F_CRYPTO_NEW_EX_DATA:112:CRYPTO_new_ex_data +CRYPTO_F_CRYPTO_SET_EX_DATA:102:CRYPTO_set_ex_data +CRYPTO_F_FIPS_MODE_SET:109:FIPS_mode_set +CRYPTO_F_GET_AND_LOCK:113:get_and_lock +CRYPTO_F_OPENSSL_BUF2HEXSTR:117:OPENSSL_buf2hexstr +CRYPTO_F_OPENSSL_HEXSTR2BUF:118:OPENSSL_hexstr2buf +CRYPTO_F_OPENSSL_INIT_CRYPTO:116:OPENSSL_init_crypto +CT_F_CTLOG_NEW:117:CTLOG_new +CT_F_CTLOG_NEW_FROM_BASE64:118:CTLOG_new_from_base64 +CT_F_CTLOG_NEW_FROM_CONF:119:ctlog_new_from_conf +CT_F_CTLOG_STORE_LOAD_CTX_NEW:122:ctlog_store_load_ctx_new +CT_F_CTLOG_STORE_LOAD_FILE:123:CTLOG_STORE_load_file +CT_F_CTLOG_STORE_LOAD_LOG:130:ctlog_store_load_log +CT_F_CTLOG_STORE_NEW:131:CTLOG_STORE_new +CT_F_CT_BASE64_DECODE:124:ct_base64_decode +CT_F_CT_POLICY_EVAL_CTX_NEW:133:CT_POLICY_EVAL_CTX_new +CT_F_CT_V1_LOG_ID_FROM_PKEY:125:ct_v1_log_id_from_pkey +CT_F_I2O_SCT:107:i2o_SCT +CT_F_I2O_SCT_LIST:108:i2o_SCT_LIST +CT_F_I2O_SCT_SIGNATURE:109:i2o_SCT_signature +CT_F_O2I_SCT:110:o2i_SCT +CT_F_O2I_SCT_LIST:111:o2i_SCT_LIST +CT_F_O2I_SCT_SIGNATURE:112:o2i_SCT_signature +CT_F_SCT_CTX_NEW:126:SCT_CTX_new +CT_F_SCT_CTX_VERIFY:128:SCT_CTX_verify +CT_F_SCT_NEW:100:SCT_new +CT_F_SCT_NEW_FROM_BASE64:127:SCT_new_from_base64 +CT_F_SCT_SET0_LOG_ID:101:SCT_set0_log_id +CT_F_SCT_SET1_EXTENSIONS:114:SCT_set1_extensions +CT_F_SCT_SET1_LOG_ID:115:SCT_set1_log_id +CT_F_SCT_SET1_SIGNATURE:116:SCT_set1_signature +CT_F_SCT_SET_LOG_ENTRY_TYPE:102:SCT_set_log_entry_type +CT_F_SCT_SET_SIGNATURE_NID:103:SCT_set_signature_nid +CT_F_SCT_SET_VERSION:104:SCT_set_version +DH_F_COMPUTE_KEY:102:compute_key +DH_F_DHPARAMS_PRINT_FP:101:DHparams_print_fp +DH_F_DH_BUILTIN_GENPARAMS:106:dh_builtin_genparams +DH_F_DH_CHECK_EX:121:DH_check_ex +DH_F_DH_CHECK_PARAMS_EX:122:DH_check_params_ex +DH_F_DH_CHECK_PUB_KEY_EX:123:DH_check_pub_key_ex +DH_F_DH_CMS_DECRYPT:114:dh_cms_decrypt +DH_F_DH_CMS_SET_PEERKEY:115:dh_cms_set_peerkey +DH_F_DH_CMS_SET_SHARED_INFO:116:dh_cms_set_shared_info +DH_F_DH_METH_DUP:117:DH_meth_dup +DH_F_DH_METH_NEW:118:DH_meth_new +DH_F_DH_METH_SET1_NAME:119:DH_meth_set1_name +DH_F_DH_NEW_BY_NID:104:DH_new_by_nid +DH_F_DH_NEW_METHOD:105:DH_new_method +DH_F_DH_PARAM_DECODE:107:dh_param_decode +DH_F_DH_PKEY_PUBLIC_CHECK:124:dh_pkey_public_check +DH_F_DH_PRIV_DECODE:110:dh_priv_decode +DH_F_DH_PRIV_ENCODE:111:dh_priv_encode +DH_F_DH_PUB_DECODE:108:dh_pub_decode +DH_F_DH_PUB_ENCODE:109:dh_pub_encode +DH_F_DO_DH_PRINT:100:do_dh_print +DH_F_GENERATE_KEY:103:generate_key +DH_F_PKEY_DH_CTRL_STR:120:pkey_dh_ctrl_str +DH_F_PKEY_DH_DERIVE:112:pkey_dh_derive +DH_F_PKEY_DH_KEYGEN:113:pkey_dh_keygen +DSA_F_DSAPARAMS_PRINT:100:DSAparams_print +DSA_F_DSAPARAMS_PRINT_FP:101:DSAparams_print_fp +DSA_F_DSA_BUILTIN_PARAMGEN:125:dsa_builtin_paramgen +DSA_F_DSA_BUILTIN_PARAMGEN2:126:dsa_builtin_paramgen2 +DSA_F_DSA_DO_SIGN:112:DSA_do_sign +DSA_F_DSA_DO_VERIFY:113:DSA_do_verify +DSA_F_DSA_METH_DUP:127:DSA_meth_dup +DSA_F_DSA_METH_NEW:128:DSA_meth_new +DSA_F_DSA_METH_SET1_NAME:129:DSA_meth_set1_name +DSA_F_DSA_NEW_METHOD:103:DSA_new_method +DSA_F_DSA_PARAM_DECODE:119:dsa_param_decode +DSA_F_DSA_PRINT_FP:105:DSA_print_fp +DSA_F_DSA_PRIV_DECODE:115:dsa_priv_decode +DSA_F_DSA_PRIV_ENCODE:116:dsa_priv_encode +DSA_F_DSA_PUB_DECODE:117:dsa_pub_decode +DSA_F_DSA_PUB_ENCODE:118:dsa_pub_encode +DSA_F_DSA_SIGN:106:DSA_sign +DSA_F_DSA_SIGN_SETUP:107:DSA_sign_setup +DSA_F_DSA_SIG_NEW:102:DSA_SIG_new +DSA_F_OLD_DSA_PRIV_DECODE:122:old_dsa_priv_decode +DSA_F_PKEY_DSA_CTRL:120:pkey_dsa_ctrl +DSA_F_PKEY_DSA_KEYGEN:121:pkey_dsa_keygen +DSO_F_DLFCN_BIND_FUNC:100:dlfcn_bind_func +DSO_F_DLFCN_LOAD:102:dlfcn_load +DSO_F_DLFCN_MERGER:130:dlfcn_merger +DSO_F_DLFCN_NAME_CONVERTER:123:dlfcn_name_converter +DSO_F_DLFCN_UNLOAD:103:dlfcn_unload +DSO_F_DL_BIND_FUNC:104:dl_bind_func +DSO_F_DL_LOAD:106:dl_load +DSO_F_DL_MERGER:131:dl_merger +DSO_F_DL_NAME_CONVERTER:124:dl_name_converter +DSO_F_DL_UNLOAD:107:dl_unload +DSO_F_DSO_BIND_FUNC:108:DSO_bind_func +DSO_F_DSO_CONVERT_FILENAME:126:DSO_convert_filename +DSO_F_DSO_CTRL:110:DSO_ctrl +DSO_F_DSO_FREE:111:DSO_free +DSO_F_DSO_GET_FILENAME:127:DSO_get_filename +DSO_F_DSO_GLOBAL_LOOKUP:139:DSO_global_lookup +DSO_F_DSO_LOAD:112:DSO_load +DSO_F_DSO_MERGE:132:DSO_merge +DSO_F_DSO_NEW_METHOD:113:DSO_new_method +DSO_F_DSO_PATHBYADDR:105:DSO_pathbyaddr +DSO_F_DSO_SET_FILENAME:129:DSO_set_filename +DSO_F_DSO_UP_REF:114:DSO_up_ref +DSO_F_VMS_BIND_SYM:115:vms_bind_sym +DSO_F_VMS_LOAD:116:vms_load +DSO_F_VMS_MERGER:133:vms_merger +DSO_F_VMS_UNLOAD:117:vms_unload +DSO_F_WIN32_BIND_FUNC:101:win32_bind_func +DSO_F_WIN32_GLOBALLOOKUP:142:win32_globallookup +DSO_F_WIN32_JOINER:135:win32_joiner +DSO_F_WIN32_LOAD:120:win32_load +DSO_F_WIN32_MERGER:134:win32_merger +DSO_F_WIN32_NAME_CONVERTER:125:win32_name_converter +DSO_F_WIN32_PATHBYADDR:109:* +DSO_F_WIN32_SPLITTER:136:win32_splitter +DSO_F_WIN32_UNLOAD:121:win32_unload +EC_F_BN_TO_FELEM:224:BN_to_felem +EC_F_D2I_ECPARAMETERS:144:d2i_ECParameters +EC_F_D2I_ECPKPARAMETERS:145:d2i_ECPKParameters +EC_F_D2I_ECPRIVATEKEY:146:d2i_ECPrivateKey +EC_F_DO_EC_KEY_PRINT:221:do_EC_KEY_print +EC_F_ECDH_CMS_DECRYPT:238:ecdh_cms_decrypt +EC_F_ECDH_CMS_SET_SHARED_INFO:239:ecdh_cms_set_shared_info +EC_F_ECDH_COMPUTE_KEY:246:ECDH_compute_key +EC_F_ECDH_SIMPLE_COMPUTE_KEY:257:ecdh_simple_compute_key +EC_F_ECDSA_DO_SIGN_EX:251:ECDSA_do_sign_ex +EC_F_ECDSA_DO_VERIFY:252:ECDSA_do_verify +EC_F_ECDSA_SIGN_EX:254:ECDSA_sign_ex +EC_F_ECDSA_SIGN_SETUP:248:ECDSA_sign_setup +EC_F_ECDSA_SIG_NEW:265:ECDSA_SIG_new +EC_F_ECDSA_VERIFY:253:ECDSA_verify +EC_F_ECD_ITEM_VERIFY:270:ecd_item_verify +EC_F_ECKEY_PARAM2TYPE:223:eckey_param2type +EC_F_ECKEY_PARAM_DECODE:212:eckey_param_decode +EC_F_ECKEY_PRIV_DECODE:213:eckey_priv_decode +EC_F_ECKEY_PRIV_ENCODE:214:eckey_priv_encode +EC_F_ECKEY_PUB_DECODE:215:eckey_pub_decode +EC_F_ECKEY_PUB_ENCODE:216:eckey_pub_encode +EC_F_ECKEY_TYPE2PARAM:220:eckey_type2param +EC_F_ECPARAMETERS_PRINT:147:ECParameters_print +EC_F_ECPARAMETERS_PRINT_FP:148:ECParameters_print_fp +EC_F_ECPKPARAMETERS_PRINT:149:ECPKParameters_print +EC_F_ECPKPARAMETERS_PRINT_FP:150:ECPKParameters_print_fp +EC_F_ECP_NISTZ256_GET_AFFINE:240:ecp_nistz256_get_affine +EC_F_ECP_NISTZ256_INV_MOD_ORD:275:ecp_nistz256_inv_mod_ord +EC_F_ECP_NISTZ256_MULT_PRECOMPUTE:243:ecp_nistz256_mult_precompute +EC_F_ECP_NISTZ256_POINTS_MUL:241:ecp_nistz256_points_mul +EC_F_ECP_NISTZ256_PRE_COMP_NEW:244:ecp_nistz256_pre_comp_new +EC_F_ECP_NISTZ256_WINDOWED_MUL:242:ecp_nistz256_windowed_mul +EC_F_ECX_KEY_OP:266:ecx_key_op +EC_F_ECX_PRIV_ENCODE:267:ecx_priv_encode +EC_F_ECX_PUB_ENCODE:268:ecx_pub_encode +EC_F_EC_ASN1_GROUP2CURVE:153:ec_asn1_group2curve +EC_F_EC_ASN1_GROUP2FIELDID:154:ec_asn1_group2fieldid +EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY:208:ec_GF2m_montgomery_point_multiply +EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT:159:\ + ec_GF2m_simple_group_check_discriminant +EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE:195:ec_GF2m_simple_group_set_curve +EC_F_EC_GF2M_SIMPLE_OCT2POINT:160:ec_GF2m_simple_oct2point +EC_F_EC_GF2M_SIMPLE_POINT2OCT:161:ec_GF2m_simple_point2oct +EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES:162:\ + ec_GF2m_simple_point_get_affine_coordinates +EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES:163:\ + ec_GF2m_simple_point_set_affine_coordinates +EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES:164:\ + ec_GF2m_simple_set_compressed_coordinates +EC_F_EC_GFP_MONT_FIELD_DECODE:133:ec_GFp_mont_field_decode +EC_F_EC_GFP_MONT_FIELD_ENCODE:134:ec_GFp_mont_field_encode +EC_F_EC_GFP_MONT_FIELD_MUL:131:ec_GFp_mont_field_mul +EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE:209:ec_GFp_mont_field_set_to_one +EC_F_EC_GFP_MONT_FIELD_SQR:132:ec_GFp_mont_field_sqr +EC_F_EC_GFP_MONT_GROUP_SET_CURVE:189:ec_GFp_mont_group_set_curve +EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE:225:ec_GFp_nistp224_group_set_curve +EC_F_EC_GFP_NISTP224_POINTS_MUL:228:ec_GFp_nistp224_points_mul +EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES:226:\ + ec_GFp_nistp224_point_get_affine_coordinates +EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE:230:ec_GFp_nistp256_group_set_curve +EC_F_EC_GFP_NISTP256_POINTS_MUL:231:ec_GFp_nistp256_points_mul +EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES:232:\ + ec_GFp_nistp256_point_get_affine_coordinates +EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE:233:ec_GFp_nistp521_group_set_curve +EC_F_EC_GFP_NISTP521_POINTS_MUL:234:ec_GFp_nistp521_points_mul +EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES:235:\ + ec_GFp_nistp521_point_get_affine_coordinates +EC_F_EC_GFP_NIST_FIELD_MUL:200:ec_GFp_nist_field_mul +EC_F_EC_GFP_NIST_FIELD_SQR:201:ec_GFp_nist_field_sqr +EC_F_EC_GFP_NIST_GROUP_SET_CURVE:202:ec_GFp_nist_group_set_curve +EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT:165:\ + ec_GFp_simple_group_check_discriminant +EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE:166:ec_GFp_simple_group_set_curve +EC_F_EC_GFP_SIMPLE_MAKE_AFFINE:102:ec_GFp_simple_make_affine +EC_F_EC_GFP_SIMPLE_OCT2POINT:103:ec_GFp_simple_oct2point +EC_F_EC_GFP_SIMPLE_POINT2OCT:104:ec_GFp_simple_point2oct +EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE:137:ec_GFp_simple_points_make_affine +EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES:167:\ + ec_GFp_simple_point_get_affine_coordinates +EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES:168:\ + ec_GFp_simple_point_set_affine_coordinates +EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES:169:\ + ec_GFp_simple_set_compressed_coordinates +EC_F_EC_GROUP_CHECK:170:EC_GROUP_check +EC_F_EC_GROUP_CHECK_DISCRIMINANT:171:EC_GROUP_check_discriminant +EC_F_EC_GROUP_COPY:106:EC_GROUP_copy +EC_F_EC_GROUP_GET_CURVE_GF2M:172:EC_GROUP_get_curve_GF2m +EC_F_EC_GROUP_GET_CURVE_GFP:130:EC_GROUP_get_curve_GFp +EC_F_EC_GROUP_GET_DEGREE:173:EC_GROUP_get_degree +EC_F_EC_GROUP_GET_ECPARAMETERS:261:EC_GROUP_get_ecparameters +EC_F_EC_GROUP_GET_ECPKPARAMETERS:262:EC_GROUP_get_ecpkparameters +EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS:193:EC_GROUP_get_pentanomial_basis +EC_F_EC_GROUP_GET_TRINOMIAL_BASIS:194:EC_GROUP_get_trinomial_basis +EC_F_EC_GROUP_NEW:108:EC_GROUP_new +EC_F_EC_GROUP_NEW_BY_CURVE_NAME:174:EC_GROUP_new_by_curve_name +EC_F_EC_GROUP_NEW_FROM_DATA:175:ec_group_new_from_data +EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS:263:EC_GROUP_new_from_ecparameters +EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS:264:EC_GROUP_new_from_ecpkparameters +EC_F_EC_GROUP_SET_CURVE_GF2M:176:EC_GROUP_set_curve_GF2m +EC_F_EC_GROUP_SET_CURVE_GFP:109:EC_GROUP_set_curve_GFp +EC_F_EC_GROUP_SET_GENERATOR:111:EC_GROUP_set_generator +EC_F_EC_KEY_CHECK_KEY:177:EC_KEY_check_key +EC_F_EC_KEY_COPY:178:EC_KEY_copy +EC_F_EC_KEY_GENERATE_KEY:179:EC_KEY_generate_key +EC_F_EC_KEY_NEW:182:EC_KEY_new +EC_F_EC_KEY_NEW_METHOD:245:EC_KEY_new_method +EC_F_EC_KEY_OCT2PRIV:255:EC_KEY_oct2priv +EC_F_EC_KEY_PRINT:180:EC_KEY_print +EC_F_EC_KEY_PRINT_FP:181:EC_KEY_print_fp +EC_F_EC_KEY_PRIV2OCT:256:EC_KEY_priv2oct +EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES:229:\ + EC_KEY_set_public_key_affine_coordinates +EC_F_EC_KEY_SIMPLE_CHECK_KEY:258:ec_key_simple_check_key +EC_F_EC_KEY_SIMPLE_OCT2PRIV:259:ec_key_simple_oct2priv +EC_F_EC_KEY_SIMPLE_PRIV2OCT:260:ec_key_simple_priv2oct +EC_F_EC_PKEY_CHECK:273:ec_pkey_check +EC_F_EC_PKEY_PARAM_CHECK:274:ec_pkey_param_check +EC_F_EC_POINTS_MAKE_AFFINE:136:EC_POINTs_make_affine +EC_F_EC_POINT_ADD:112:EC_POINT_add +EC_F_EC_POINT_CMP:113:EC_POINT_cmp +EC_F_EC_POINT_COPY:114:EC_POINT_copy +EC_F_EC_POINT_DBL:115:EC_POINT_dbl +EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M:183:\ + EC_POINT_get_affine_coordinates_GF2m +EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP:116:EC_POINT_get_affine_coordinates_GFp +EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP:117:\ + EC_POINT_get_Jprojective_coordinates_GFp +EC_F_EC_POINT_INVERT:210:EC_POINT_invert +EC_F_EC_POINT_IS_AT_INFINITY:118:EC_POINT_is_at_infinity +EC_F_EC_POINT_IS_ON_CURVE:119:EC_POINT_is_on_curve +EC_F_EC_POINT_MAKE_AFFINE:120:EC_POINT_make_affine +EC_F_EC_POINT_NEW:121:EC_POINT_new +EC_F_EC_POINT_OCT2POINT:122:EC_POINT_oct2point +EC_F_EC_POINT_POINT2OCT:123:EC_POINT_point2oct +EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M:185:\ + EC_POINT_set_affine_coordinates_GF2m +EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP:124:EC_POINT_set_affine_coordinates_GFp +EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M:186:\ + EC_POINT_set_compressed_coordinates_GF2m +EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP:125:\ + EC_POINT_set_compressed_coordinates_GFp +EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP:126:\ + EC_POINT_set_Jprojective_coordinates_GFp +EC_F_EC_POINT_SET_TO_INFINITY:127:EC_POINT_set_to_infinity +EC_F_EC_PRE_COMP_NEW:196:ec_pre_comp_new +EC_F_EC_WNAF_MUL:187:ec_wNAF_mul +EC_F_EC_WNAF_PRECOMPUTE_MULT:188:ec_wNAF_precompute_mult +EC_F_I2D_ECPARAMETERS:190:i2d_ECParameters +EC_F_I2D_ECPKPARAMETERS:191:i2d_ECPKParameters +EC_F_I2D_ECPRIVATEKEY:192:i2d_ECPrivateKey +EC_F_I2O_ECPUBLICKEY:151:i2o_ECPublicKey +EC_F_NISTP224_PRE_COMP_NEW:227:nistp224_pre_comp_new +EC_F_NISTP256_PRE_COMP_NEW:236:nistp256_pre_comp_new +EC_F_NISTP521_PRE_COMP_NEW:237:nistp521_pre_comp_new +EC_F_O2I_ECPUBLICKEY:152:o2i_ECPublicKey +EC_F_OLD_EC_PRIV_DECODE:222:old_ec_priv_decode +EC_F_OSSL_ECDH_COMPUTE_KEY:247:ossl_ecdh_compute_key +EC_F_OSSL_ECDSA_SIGN_SIG:249:ossl_ecdsa_sign_sig +EC_F_OSSL_ECDSA_VERIFY_SIG:250:ossl_ecdsa_verify_sig +EC_F_PKEY_ECD_CTRL:271:pkey_ecd_ctrl +EC_F_PKEY_ECD_DIGESTSIGN:272:pkey_ecd_digestsign +EC_F_PKEY_ECX_DERIVE:269:pkey_ecx_derive +EC_F_PKEY_EC_CTRL:197:pkey_ec_ctrl +EC_F_PKEY_EC_CTRL_STR:198:pkey_ec_ctrl_str +EC_F_PKEY_EC_DERIVE:217:pkey_ec_derive +EC_F_PKEY_EC_KEYGEN:199:pkey_ec_keygen +EC_F_PKEY_EC_PARAMGEN:219:pkey_ec_paramgen +EC_F_PKEY_EC_SIGN:218:pkey_ec_sign +ENGINE_F_DIGEST_UPDATE:198:digest_update +ENGINE_F_DYNAMIC_CTRL:180:dynamic_ctrl +ENGINE_F_DYNAMIC_GET_DATA_CTX:181:dynamic_get_data_ctx +ENGINE_F_DYNAMIC_LOAD:182:dynamic_load +ENGINE_F_DYNAMIC_SET_DATA_CTX:183:dynamic_set_data_ctx +ENGINE_F_ENGINE_ADD:105:ENGINE_add +ENGINE_F_ENGINE_BY_ID:106:ENGINE_by_id +ENGINE_F_ENGINE_CMD_IS_EXECUTABLE:170:ENGINE_cmd_is_executable +ENGINE_F_ENGINE_CTRL:142:ENGINE_ctrl +ENGINE_F_ENGINE_CTRL_CMD:178:ENGINE_ctrl_cmd +ENGINE_F_ENGINE_CTRL_CMD_STRING:171:ENGINE_ctrl_cmd_string +ENGINE_F_ENGINE_FINISH:107:ENGINE_finish +ENGINE_F_ENGINE_GET_CIPHER:185:ENGINE_get_cipher +ENGINE_F_ENGINE_GET_DIGEST:186:ENGINE_get_digest +ENGINE_F_ENGINE_GET_FIRST:195:ENGINE_get_first +ENGINE_F_ENGINE_GET_LAST:196:ENGINE_get_last +ENGINE_F_ENGINE_GET_NEXT:115:ENGINE_get_next +ENGINE_F_ENGINE_GET_PKEY_ASN1_METH:193:ENGINE_get_pkey_asn1_meth +ENGINE_F_ENGINE_GET_PKEY_METH:192:ENGINE_get_pkey_meth +ENGINE_F_ENGINE_GET_PREV:116:ENGINE_get_prev +ENGINE_F_ENGINE_INIT:119:ENGINE_init +ENGINE_F_ENGINE_LIST_ADD:120:engine_list_add +ENGINE_F_ENGINE_LIST_REMOVE:121:engine_list_remove +ENGINE_F_ENGINE_LOAD_PRIVATE_KEY:150:ENGINE_load_private_key +ENGINE_F_ENGINE_LOAD_PUBLIC_KEY:151:ENGINE_load_public_key +ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT:194:ENGINE_load_ssl_client_cert +ENGINE_F_ENGINE_NEW:122:ENGINE_new +ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR:197:ENGINE_pkey_asn1_find_str +ENGINE_F_ENGINE_REMOVE:123:ENGINE_remove +ENGINE_F_ENGINE_SET_DEFAULT_STRING:189:ENGINE_set_default_string +ENGINE_F_ENGINE_SET_ID:129:ENGINE_set_id +ENGINE_F_ENGINE_SET_NAME:130:ENGINE_set_name +ENGINE_F_ENGINE_TABLE_REGISTER:184:engine_table_register +ENGINE_F_ENGINE_UNLOCKED_FINISH:191:engine_unlocked_finish +ENGINE_F_ENGINE_UP_REF:190:ENGINE_up_ref +ENGINE_F_INT_CTRL_HELPER:172:int_ctrl_helper +ENGINE_F_INT_ENGINE_CONFIGURE:188:int_engine_configure +ENGINE_F_INT_ENGINE_MODULE_INIT:187:int_engine_module_init +EVP_F_AESNI_INIT_KEY:165:aesni_init_key +EVP_F_AES_INIT_KEY:133:aes_init_key +EVP_F_AES_OCB_CIPHER:169:aes_ocb_cipher +EVP_F_AES_T4_INIT_KEY:178:aes_t4_init_key +EVP_F_AES_WRAP_CIPHER:170:aes_wrap_cipher +EVP_F_ALG_MODULE_INIT:177:alg_module_init +EVP_F_ARIA_CCM_INIT_KEY:175:aria_ccm_init_key +EVP_F_ARIA_GCM_INIT_KEY:176:aria_gcm_init_key +EVP_F_ARIA_INIT_KEY:185:aria_init_key +EVP_F_CAMELLIA_INIT_KEY:159:camellia_init_key +EVP_F_CHACHA20_POLY1305_CTRL:182:chacha20_poly1305_ctrl +EVP_F_CMLL_T4_INIT_KEY:179:cmll_t4_init_key +EVP_F_DES_EDE3_WRAP_CIPHER:171:des_ede3_wrap_cipher +EVP_F_DO_SIGVER_INIT:161:do_sigver_init +EVP_F_EVP_CIPHERINIT_EX:123:EVP_CipherInit_ex +EVP_F_EVP_CIPHER_CTX_COPY:163:EVP_CIPHER_CTX_copy +EVP_F_EVP_CIPHER_CTX_CTRL:124:EVP_CIPHER_CTX_ctrl +EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH:122:EVP_CIPHER_CTX_set_key_length +EVP_F_EVP_DECRYPTFINAL_EX:101:EVP_DecryptFinal_ex +EVP_F_EVP_DECRYPTUPDATE:166:EVP_DecryptUpdate +EVP_F_EVP_DIGESTFINALXOF:174:EVP_DigestFinalXOF +EVP_F_EVP_DIGESTINIT_EX:128:EVP_DigestInit_ex +EVP_F_EVP_ENCRYPTFINAL_EX:127:EVP_EncryptFinal_ex +EVP_F_EVP_ENCRYPTUPDATE:167:EVP_EncryptUpdate +EVP_F_EVP_MD_CTX_COPY_EX:110:EVP_MD_CTX_copy_ex +EVP_F_EVP_MD_SIZE:162:EVP_MD_size +EVP_F_EVP_OPENINIT:102:EVP_OpenInit +EVP_F_EVP_PBE_ALG_ADD:115:EVP_PBE_alg_add +EVP_F_EVP_PBE_ALG_ADD_TYPE:160:EVP_PBE_alg_add_type +EVP_F_EVP_PBE_CIPHERINIT:116:EVP_PBE_CipherInit +EVP_F_EVP_PBE_SCRYPT:181:EVP_PBE_scrypt +EVP_F_EVP_PKCS82PKEY:111:EVP_PKCS82PKEY +EVP_F_EVP_PKEY2PKCS8:113:EVP_PKEY2PKCS8 +EVP_F_EVP_PKEY_ASN1_ADD0:188:EVP_PKEY_asn1_add0 +EVP_F_EVP_PKEY_CHECK:186:EVP_PKEY_check +EVP_F_EVP_PKEY_COPY_PARAMETERS:103:EVP_PKEY_copy_parameters +EVP_F_EVP_PKEY_CTX_CTRL:137:EVP_PKEY_CTX_ctrl +EVP_F_EVP_PKEY_CTX_CTRL_STR:150:EVP_PKEY_CTX_ctrl_str +EVP_F_EVP_PKEY_CTX_DUP:156:EVP_PKEY_CTX_dup +EVP_F_EVP_PKEY_CTX_MD:168:EVP_PKEY_CTX_md +EVP_F_EVP_PKEY_DECRYPT:104:EVP_PKEY_decrypt +EVP_F_EVP_PKEY_DECRYPT_INIT:138:EVP_PKEY_decrypt_init +EVP_F_EVP_PKEY_DECRYPT_OLD:151:EVP_PKEY_decrypt_old +EVP_F_EVP_PKEY_DERIVE:153:EVP_PKEY_derive +EVP_F_EVP_PKEY_DERIVE_INIT:154:EVP_PKEY_derive_init +EVP_F_EVP_PKEY_DERIVE_SET_PEER:155:EVP_PKEY_derive_set_peer +EVP_F_EVP_PKEY_ENCRYPT:105:EVP_PKEY_encrypt +EVP_F_EVP_PKEY_ENCRYPT_INIT:139:EVP_PKEY_encrypt_init +EVP_F_EVP_PKEY_ENCRYPT_OLD:152:EVP_PKEY_encrypt_old +EVP_F_EVP_PKEY_GET0_DH:119:EVP_PKEY_get0_DH +EVP_F_EVP_PKEY_GET0_DSA:120:EVP_PKEY_get0_DSA +EVP_F_EVP_PKEY_GET0_EC_KEY:131:EVP_PKEY_get0_EC_KEY +EVP_F_EVP_PKEY_GET0_HMAC:183:EVP_PKEY_get0_hmac +EVP_F_EVP_PKEY_GET0_POLY1305:184:EVP_PKEY_get0_poly1305 +EVP_F_EVP_PKEY_GET0_RSA:121:EVP_PKEY_get0_RSA +EVP_F_EVP_PKEY_GET0_SIPHASH:172:EVP_PKEY_get0_siphash +EVP_F_EVP_PKEY_KEYGEN:146:EVP_PKEY_keygen +EVP_F_EVP_PKEY_KEYGEN_INIT:147:EVP_PKEY_keygen_init +EVP_F_EVP_PKEY_NEW:106:EVP_PKEY_new +EVP_F_EVP_PKEY_PARAMGEN:148:EVP_PKEY_paramgen +EVP_F_EVP_PKEY_PARAMGEN_INIT:149:EVP_PKEY_paramgen_init +EVP_F_EVP_PKEY_PARAM_CHECK:189:EVP_PKEY_param_check +EVP_F_EVP_PKEY_PUBLIC_CHECK:190:EVP_PKEY_public_check +EVP_F_EVP_PKEY_SET1_ENGINE:187:EVP_PKEY_set1_engine +EVP_F_EVP_PKEY_SIGN:140:EVP_PKEY_sign +EVP_F_EVP_PKEY_SIGN_INIT:141:EVP_PKEY_sign_init +EVP_F_EVP_PKEY_VERIFY:142:EVP_PKEY_verify +EVP_F_EVP_PKEY_VERIFY_INIT:143:EVP_PKEY_verify_init +EVP_F_EVP_PKEY_VERIFY_RECOVER:144:EVP_PKEY_verify_recover +EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT:145:EVP_PKEY_verify_recover_init +EVP_F_EVP_SIGNFINAL:107:EVP_SignFinal +EVP_F_EVP_VERIFYFINAL:108:EVP_VerifyFinal +EVP_F_INT_CTX_NEW:157:int_ctx_new +EVP_F_PKCS5_PBE_KEYIVGEN:117:PKCS5_PBE_keyivgen +EVP_F_PKCS5_V2_PBE_KEYIVGEN:118:PKCS5_v2_PBE_keyivgen +EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN:164:PKCS5_v2_PBKDF2_keyivgen +EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN:180:PKCS5_v2_scrypt_keyivgen +EVP_F_PKEY_SET_TYPE:158:pkey_set_type +EVP_F_RC2_MAGIC_TO_METH:109:rc2_magic_to_meth +EVP_F_RC5_CTRL:125:rc5_ctrl +EVP_F_UPDATE:173:update +KDF_F_PKEY_HKDF_CTRL_STR:103:pkey_hkdf_ctrl_str +KDF_F_PKEY_HKDF_DERIVE:102:pkey_hkdf_derive +KDF_F_PKEY_SCRYPT_CTRL_STR:104:pkey_scrypt_ctrl_str +KDF_F_PKEY_SCRYPT_CTRL_UINT64:105:pkey_scrypt_ctrl_uint64 +KDF_F_PKEY_SCRYPT_DERIVE:109:pkey_scrypt_derive +KDF_F_PKEY_TLS1_PRF_CTRL_STR:100:pkey_tls1_prf_ctrl_str +KDF_F_PKEY_TLS1_PRF_DERIVE:101:pkey_tls1_prf_derive +OBJ_F_OBJ_ADD_OBJECT:105:OBJ_add_object +OBJ_F_OBJ_CREATE:100:OBJ_create +OBJ_F_OBJ_DUP:101:OBJ_dup +OBJ_F_OBJ_NAME_NEW_INDEX:106:OBJ_NAME_new_index +OBJ_F_OBJ_NID2LN:102:OBJ_nid2ln +OBJ_F_OBJ_NID2OBJ:103:OBJ_nid2obj +OBJ_F_OBJ_NID2SN:104:OBJ_nid2sn +OCSP_F_D2I_OCSP_NONCE:102:d2i_ocsp_nonce +OCSP_F_OCSP_BASIC_ADD1_STATUS:103:OCSP_basic_add1_status +OCSP_F_OCSP_BASIC_SIGN:104:OCSP_basic_sign +OCSP_F_OCSP_BASIC_SIGN_CTX:119:OCSP_basic_sign_ctx +OCSP_F_OCSP_BASIC_VERIFY:105:OCSP_basic_verify +OCSP_F_OCSP_CERT_ID_NEW:101:OCSP_cert_id_new +OCSP_F_OCSP_CHECK_DELEGATED:106:ocsp_check_delegated +OCSP_F_OCSP_CHECK_IDS:107:ocsp_check_ids +OCSP_F_OCSP_CHECK_ISSUER:108:ocsp_check_issuer +OCSP_F_OCSP_CHECK_VALIDITY:115:OCSP_check_validity +OCSP_F_OCSP_MATCH_ISSUERID:109:ocsp_match_issuerid +OCSP_F_OCSP_PARSE_URL:114:OCSP_parse_url +OCSP_F_OCSP_REQUEST_SIGN:110:OCSP_request_sign +OCSP_F_OCSP_REQUEST_VERIFY:116:OCSP_request_verify +OCSP_F_OCSP_RESPONSE_GET1_BASIC:111:OCSP_response_get1_basic +OCSP_F_PARSE_HTTP_LINE1:118:parse_http_line1 +OSSL_STORE_F_FILE_CTRL:129:file_ctrl +OSSL_STORE_F_FILE_FIND:138:file_find +OSSL_STORE_F_FILE_GET_PASS:118:file_get_pass +OSSL_STORE_F_FILE_LOAD:119:file_load +OSSL_STORE_F_FILE_LOAD_TRY_DECODE:124:file_load_try_decode +OSSL_STORE_F_FILE_NAME_TO_URI:126:file_name_to_uri +OSSL_STORE_F_FILE_OPEN:120:file_open +OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO:127:ossl_store_attach_pem_bio +OSSL_STORE_F_OSSL_STORE_EXPECT:130:OSSL_STORE_expect +OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT:128:\ + ossl_store_file_attach_pem_bio_int +OSSL_STORE_F_OSSL_STORE_FIND:131:OSSL_STORE_find +OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT:100:ossl_store_get0_loader_int +OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT:101:OSSL_STORE_INFO_get1_CERT +OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL:102:OSSL_STORE_INFO_get1_CRL +OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME:103:OSSL_STORE_INFO_get1_NAME +OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION:135:\ + OSSL_STORE_INFO_get1_NAME_description +OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS:104:OSSL_STORE_INFO_get1_PARAMS +OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY:105:OSSL_STORE_INFO_get1_PKEY +OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT:106:OSSL_STORE_INFO_new_CERT +OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL:107:OSSL_STORE_INFO_new_CRL +OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED:123:ossl_store_info_new_EMBEDDED +OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME:109:OSSL_STORE_INFO_new_NAME +OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS:110:OSSL_STORE_INFO_new_PARAMS +OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY:111:OSSL_STORE_INFO_new_PKEY +OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION:134:\ + OSSL_STORE_INFO_set0_NAME_description +OSSL_STORE_F_OSSL_STORE_INIT_ONCE:112:ossl_store_init_once +OSSL_STORE_F_OSSL_STORE_LOADER_NEW:113:OSSL_STORE_LOADER_new +OSSL_STORE_F_OSSL_STORE_OPEN:114:OSSL_STORE_open +OSSL_STORE_F_OSSL_STORE_OPEN_INT:115:* +OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT:117:ossl_store_register_loader_int +OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS:132:OSSL_STORE_SEARCH_by_alias +OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL:133:\ + OSSL_STORE_SEARCH_by_issuer_serial +OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT:136:\ + OSSL_STORE_SEARCH_by_key_fingerprint +OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME:137:OSSL_STORE_SEARCH_by_name +OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT:116:\ + ossl_store_unregister_loader_int +OSSL_STORE_F_TRY_DECODE_PARAMS:121:try_decode_params +OSSL_STORE_F_TRY_DECODE_PKCS12:122:try_decode_PKCS12 +OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED:125:try_decode_PKCS8Encrypted +PEM_F_B2I_DSS:127:b2i_dss +PEM_F_B2I_PVK_BIO:128:b2i_PVK_bio +PEM_F_B2I_RSA:129:b2i_rsa +PEM_F_CHECK_BITLEN_DSA:130:check_bitlen_dsa +PEM_F_CHECK_BITLEN_RSA:131:check_bitlen_rsa +PEM_F_D2I_PKCS8PRIVATEKEY_BIO:120:d2i_PKCS8PrivateKey_bio +PEM_F_D2I_PKCS8PRIVATEKEY_FP:121:d2i_PKCS8PrivateKey_fp +PEM_F_DO_B2I:132:do_b2i +PEM_F_DO_B2I_BIO:133:do_b2i_bio +PEM_F_DO_BLOB_HEADER:134:do_blob_header +PEM_F_DO_PK8PKEY:126:do_pk8pkey +PEM_F_DO_PK8PKEY_FP:125:do_pk8pkey_fp +PEM_F_DO_PVK_BODY:135:do_PVK_body +PEM_F_DO_PVK_HEADER:136:do_PVK_header +PEM_F_GET_HEADER_AND_DATA:143:get_header_and_data +PEM_F_GET_NAME:144:get_name +PEM_F_I2B_PVK:137:i2b_PVK +PEM_F_I2B_PVK_BIO:138:i2b_PVK_bio +PEM_F_LOAD_IV:101:load_iv +PEM_F_PEM_ASN1_READ:102:PEM_ASN1_read +PEM_F_PEM_ASN1_READ_BIO:103:PEM_ASN1_read_bio +PEM_F_PEM_ASN1_WRITE:104:PEM_ASN1_write +PEM_F_PEM_ASN1_WRITE_BIO:105:PEM_ASN1_write_bio +PEM_F_PEM_DEF_CALLBACK:100:PEM_def_callback +PEM_F_PEM_DO_HEADER:106:PEM_do_header +PEM_F_PEM_GET_EVP_CIPHER_INFO:107:PEM_get_EVP_CIPHER_INFO +PEM_F_PEM_READ:108:PEM_read +PEM_F_PEM_READ_BIO:109:PEM_read_bio +PEM_F_PEM_READ_BIO_DHPARAMS:141:PEM_read_bio_DHparams +PEM_F_PEM_READ_BIO_EX:145:PEM_read_bio_ex +PEM_F_PEM_READ_BIO_PARAMETERS:140:PEM_read_bio_Parameters +PEM_F_PEM_READ_BIO_PRIVATEKEY:123:PEM_read_bio_PrivateKey +PEM_F_PEM_READ_DHPARAMS:142:PEM_read_DHparams +PEM_F_PEM_READ_PRIVATEKEY:124:PEM_read_PrivateKey +PEM_F_PEM_SIGNFINAL:112:PEM_SignFinal +PEM_F_PEM_WRITE:113:PEM_write +PEM_F_PEM_WRITE_BIO:114:PEM_write_bio +PEM_F_PEM_WRITE_PRIVATEKEY:139:PEM_write_PrivateKey +PEM_F_PEM_X509_INFO_READ:115:PEM_X509_INFO_read +PEM_F_PEM_X509_INFO_READ_BIO:116:PEM_X509_INFO_read_bio +PEM_F_PEM_X509_INFO_WRITE_BIO:117:PEM_X509_INFO_write_bio +PKCS12_F_PKCS12_CREATE:105:PKCS12_create +PKCS12_F_PKCS12_GEN_MAC:107:PKCS12_gen_mac +PKCS12_F_PKCS12_INIT:109:PKCS12_init +PKCS12_F_PKCS12_ITEM_DECRYPT_D2I:106:PKCS12_item_decrypt_d2i +PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT:108:PKCS12_item_i2d_encrypt +PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG:117:PKCS12_item_pack_safebag +PKCS12_F_PKCS12_KEY_GEN_ASC:110:PKCS12_key_gen_asc +PKCS12_F_PKCS12_KEY_GEN_UNI:111:PKCS12_key_gen_uni +PKCS12_F_PKCS12_KEY_GEN_UTF8:116:PKCS12_key_gen_utf8 +PKCS12_F_PKCS12_NEWPASS:128:PKCS12_newpass +PKCS12_F_PKCS12_PACK_P7DATA:114:PKCS12_pack_p7data +PKCS12_F_PKCS12_PACK_P7ENCDATA:115:PKCS12_pack_p7encdata +PKCS12_F_PKCS12_PARSE:118:PKCS12_parse +PKCS12_F_PKCS12_PBE_CRYPT:119:PKCS12_pbe_crypt +PKCS12_F_PKCS12_PBE_KEYIVGEN:120:PKCS12_PBE_keyivgen +PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF:112:PKCS12_SAFEBAG_create0_p8inf +PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8:113:PKCS12_SAFEBAG_create0_pkcs8 +PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT:133:\ + PKCS12_SAFEBAG_create_pkcs8_encrypt +PKCS12_F_PKCS12_SETUP_MAC:122:PKCS12_setup_mac +PKCS12_F_PKCS12_SET_MAC:123:PKCS12_set_mac +PKCS12_F_PKCS12_UNPACK_AUTHSAFES:130:PKCS12_unpack_authsafes +PKCS12_F_PKCS12_UNPACK_P7DATA:131:PKCS12_unpack_p7data +PKCS12_F_PKCS12_VERIFY_MAC:126:PKCS12_verify_mac +PKCS12_F_PKCS8_ENCRYPT:125:PKCS8_encrypt +PKCS12_F_PKCS8_SET0_PBE:132:PKCS8_set0_pbe +PKCS7_F_DO_PKCS7_SIGNED_ATTRIB:136:do_pkcs7_signed_attrib +PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME:135:PKCS7_add0_attrib_signing_time +PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP:118:PKCS7_add_attrib_smimecap +PKCS7_F_PKCS7_ADD_CERTIFICATE:100:PKCS7_add_certificate +PKCS7_F_PKCS7_ADD_CRL:101:PKCS7_add_crl +PKCS7_F_PKCS7_ADD_RECIPIENT_INFO:102:PKCS7_add_recipient_info +PKCS7_F_PKCS7_ADD_SIGNATURE:131:PKCS7_add_signature +PKCS7_F_PKCS7_ADD_SIGNER:103:PKCS7_add_signer +PKCS7_F_PKCS7_BIO_ADD_DIGEST:125:PKCS7_bio_add_digest +PKCS7_F_PKCS7_COPY_EXISTING_DIGEST:138:pkcs7_copy_existing_digest +PKCS7_F_PKCS7_CTRL:104:PKCS7_ctrl +PKCS7_F_PKCS7_DATADECODE:112:PKCS7_dataDecode +PKCS7_F_PKCS7_DATAFINAL:128:PKCS7_dataFinal +PKCS7_F_PKCS7_DATAINIT:105:PKCS7_dataInit +PKCS7_F_PKCS7_DATAVERIFY:107:PKCS7_dataVerify +PKCS7_F_PKCS7_DECRYPT:114:PKCS7_decrypt +PKCS7_F_PKCS7_DECRYPT_RINFO:133:pkcs7_decrypt_rinfo +PKCS7_F_PKCS7_ENCODE_RINFO:132:pkcs7_encode_rinfo +PKCS7_F_PKCS7_ENCRYPT:115:PKCS7_encrypt +PKCS7_F_PKCS7_FINAL:134:PKCS7_final +PKCS7_F_PKCS7_FIND_DIGEST:127:PKCS7_find_digest +PKCS7_F_PKCS7_GET0_SIGNERS:124:PKCS7_get0_signers +PKCS7_F_PKCS7_RECIP_INFO_SET:130:PKCS7_RECIP_INFO_set +PKCS7_F_PKCS7_SET_CIPHER:108:PKCS7_set_cipher +PKCS7_F_PKCS7_SET_CONTENT:109:PKCS7_set_content +PKCS7_F_PKCS7_SET_DIGEST:126:PKCS7_set_digest +PKCS7_F_PKCS7_SET_TYPE:110:PKCS7_set_type +PKCS7_F_PKCS7_SIGN:116:PKCS7_sign +PKCS7_F_PKCS7_SIGNATUREVERIFY:113:PKCS7_signatureVerify +PKCS7_F_PKCS7_SIGNER_INFO_SET:129:PKCS7_SIGNER_INFO_set +PKCS7_F_PKCS7_SIGNER_INFO_SIGN:139:PKCS7_SIGNER_INFO_sign +PKCS7_F_PKCS7_SIGN_ADD_SIGNER:137:PKCS7_sign_add_signer +PKCS7_F_PKCS7_SIMPLE_SMIMECAP:119:PKCS7_simple_smimecap +PKCS7_F_PKCS7_VERIFY:117:PKCS7_verify +RAND_F_DRBG_BYTES:101:drbg_bytes +RAND_F_DRBG_GET_ENTROPY:105:drbg_get_entropy +RAND_F_DRBG_SETUP:117:drbg_setup +RAND_F_GET_ENTROPY:106:get_entropy +RAND_F_RAND_BYTES:100:RAND_bytes +RAND_F_RAND_DRBG_ENABLE_LOCKING:119:rand_drbg_enable_locking +RAND_F_RAND_DRBG_GENERATE:107:RAND_DRBG_generate +RAND_F_RAND_DRBG_INSTANTIATE:108:RAND_DRBG_instantiate +RAND_F_RAND_DRBG_NEW:109:RAND_DRBG_new +RAND_F_RAND_DRBG_RESEED:110:RAND_DRBG_reseed +RAND_F_RAND_DRBG_RESTART:102:rand_drbg_restart +RAND_F_RAND_DRBG_SET:104:RAND_DRBG_set +RAND_F_RAND_DRBG_UNINSTANTIATE:118:RAND_DRBG_uninstantiate +RAND_F_RAND_LOAD_FILE:111:RAND_load_file +RAND_F_RAND_POOL_ADD:103:RAND_POOL_add +RAND_F_RAND_POOL_ADD_BEGIN:113:RAND_POOL_add_begin +RAND_F_RAND_POOL_ADD_END:114:RAND_POOL_add_end +RAND_F_RAND_POOL_BYTES_NEEDED:115:RAND_POOL_bytes_needed +RAND_F_RAND_POOL_NEW:116:RAND_POOL_new +RAND_F_RAND_WRITE_FILE:112:RAND_write_file +RSA_F_CHECK_PADDING_MD:140:check_padding_md +RSA_F_ENCODE_PKCS1:146:encode_pkcs1 +RSA_F_INT_RSA_VERIFY:145:int_rsa_verify +RSA_F_OLD_RSA_PRIV_DECODE:147:old_rsa_priv_decode +RSA_F_PKEY_PSS_INIT:165:pkey_pss_init +RSA_F_PKEY_RSA_CTRL:143:pkey_rsa_ctrl +RSA_F_PKEY_RSA_CTRL_STR:144:pkey_rsa_ctrl_str +RSA_F_PKEY_RSA_SIGN:142:pkey_rsa_sign +RSA_F_PKEY_RSA_VERIFY:149:pkey_rsa_verify +RSA_F_PKEY_RSA_VERIFYRECOVER:141:pkey_rsa_verifyrecover +RSA_F_RSA_ALGOR_TO_MD:156:rsa_algor_to_md +RSA_F_RSA_BUILTIN_KEYGEN:129:rsa_builtin_keygen +RSA_F_RSA_CHECK_KEY:123:RSA_check_key +RSA_F_RSA_CHECK_KEY_EX:160:RSA_check_key_ex +RSA_F_RSA_CMS_DECRYPT:159:rsa_cms_decrypt +RSA_F_RSA_CMS_VERIFY:158:rsa_cms_verify +RSA_F_RSA_ITEM_VERIFY:148:rsa_item_verify +RSA_F_RSA_METH_DUP:161:RSA_meth_dup +RSA_F_RSA_METH_NEW:162:RSA_meth_new +RSA_F_RSA_METH_SET1_NAME:163:RSA_meth_set1_name +RSA_F_RSA_MGF1_TO_MD:157:* +RSA_F_RSA_NEW_METHOD:106:RSA_new_method +RSA_F_RSA_NULL:124:* +RSA_F_RSA_NULL_PRIVATE_DECRYPT:132:* +RSA_F_RSA_NULL_PRIVATE_ENCRYPT:133:* +RSA_F_RSA_NULL_PUBLIC_DECRYPT:134:* +RSA_F_RSA_NULL_PUBLIC_ENCRYPT:135:* +RSA_F_RSA_OSSL_PRIVATE_DECRYPT:101:rsa_ossl_private_decrypt +RSA_F_RSA_OSSL_PRIVATE_ENCRYPT:102:rsa_ossl_private_encrypt +RSA_F_RSA_OSSL_PUBLIC_DECRYPT:103:rsa_ossl_public_decrypt +RSA_F_RSA_OSSL_PUBLIC_ENCRYPT:104:rsa_ossl_public_encrypt +RSA_F_RSA_PADDING_ADD_NONE:107:RSA_padding_add_none +RSA_F_RSA_PADDING_ADD_PKCS1_OAEP:121:RSA_padding_add_PKCS1_OAEP +RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1:154:RSA_padding_add_PKCS1_OAEP_mgf1 +RSA_F_RSA_PADDING_ADD_PKCS1_PSS:125:RSA_padding_add_PKCS1_PSS +RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1:152:RSA_padding_add_PKCS1_PSS_mgf1 +RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1:108:RSA_padding_add_PKCS1_type_1 +RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2:109:RSA_padding_add_PKCS1_type_2 +RSA_F_RSA_PADDING_ADD_SSLV23:110:RSA_padding_add_SSLv23 +RSA_F_RSA_PADDING_ADD_X931:127:RSA_padding_add_X931 +RSA_F_RSA_PADDING_CHECK_NONE:111:RSA_padding_check_none +RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP:122:RSA_padding_check_PKCS1_OAEP +RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1:153:RSA_padding_check_PKCS1_OAEP_mgf1 +RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1:112:RSA_padding_check_PKCS1_type_1 +RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2:113:RSA_padding_check_PKCS1_type_2 +RSA_F_RSA_PADDING_CHECK_SSLV23:114:RSA_padding_check_SSLv23 +RSA_F_RSA_PADDING_CHECK_X931:128:RSA_padding_check_X931 +RSA_F_RSA_PARAM_DECODE:164:rsa_param_decode +RSA_F_RSA_PRINT:115:RSA_print +RSA_F_RSA_PRINT_FP:116:RSA_print_fp +RSA_F_RSA_PRIV_DECODE:150:rsa_priv_decode +RSA_F_RSA_PRIV_ENCODE:138:rsa_priv_encode +RSA_F_RSA_PSS_GET_PARAM:151:rsa_pss_get_param +RSA_F_RSA_PSS_TO_CTX:155:rsa_pss_to_ctx +RSA_F_RSA_PUB_DECODE:139:rsa_pub_decode +RSA_F_RSA_SETUP_BLINDING:136:RSA_setup_blinding +RSA_F_RSA_SIGN:117:RSA_sign +RSA_F_RSA_SIGN_ASN1_OCTET_STRING:118:RSA_sign_ASN1_OCTET_STRING +RSA_F_RSA_VERIFY:119:RSA_verify +RSA_F_RSA_VERIFY_ASN1_OCTET_STRING:120:RSA_verify_ASN1_OCTET_STRING +RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1:126:RSA_verify_PKCS1_PSS_mgf1 +SSL_F_ADD_CLIENT_KEY_SHARE_EXT:438:* +SSL_F_ADD_KEY_SHARE:512:add_key_share +SSL_F_BYTES_TO_CIPHER_LIST:519:bytes_to_cipher_list +SSL_F_CHECK_SUITEB_CIPHER_LIST:331:check_suiteb_cipher_list +SSL_F_CONSTRUCT_CA_NAMES:552:construct_ca_names +SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS:553:construct_key_exchange_tbs +SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH:539:create_synthetic_message_hash +SSL_F_CT_MOVE_SCTS:345:ct_move_scts +SSL_F_CT_STRICT:349:ct_strict +SSL_F_CUSTOM_EXT_ADD:554:custom_ext_add +SSL_F_CUSTOM_EXT_PARSE:555:custom_ext_parse +SSL_F_D2I_SSL_SESSION:103:d2i_SSL_SESSION +SSL_F_DANE_CTX_ENABLE:347:dane_ctx_enable +SSL_F_DANE_MTYPE_SET:393:dane_mtype_set +SSL_F_DANE_TLSA_ADD:394:dane_tlsa_add +SSL_F_DERIVE_SECRET_KEY_AND_IV:514:derive_secret_key_and_iv +SSL_F_DO_DTLS1_WRITE:245:do_dtls1_write +SSL_F_DO_SSL3_WRITE:104:do_ssl3_write +SSL_F_DTLS1_BUFFER_RECORD:247:dtls1_buffer_record +SSL_F_DTLS1_CHECK_TIMEOUT_NUM:318:dtls1_check_timeout_num +SSL_F_DTLS1_HEARTBEAT:305:* +SSL_F_DTLS1_PREPROCESS_FRAGMENT:288:dtls1_preprocess_fragment +SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS:424:dtls1_process_buffered_records +SSL_F_DTLS1_PROCESS_RECORD:257:dtls1_process_record +SSL_F_DTLS1_READ_BYTES:258:dtls1_read_bytes +SSL_F_DTLS1_READ_FAILED:339:dtls1_read_failed +SSL_F_DTLS1_RETRANSMIT_MESSAGE:390:dtls1_retransmit_message +SSL_F_DTLS1_WRITE_APP_DATA_BYTES:268:dtls1_write_app_data_bytes +SSL_F_DTLS1_WRITE_BYTES:545:dtls1_write_bytes +SSL_F_DTLSV1_LISTEN:350:DTLSv1_listen +SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC:371:dtls_construct_change_cipher_spec +SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST:385:\ + dtls_construct_hello_verify_request +SSL_F_DTLS_GET_REASSEMBLED_MESSAGE:370:dtls_get_reassembled_message +SSL_F_DTLS_PROCESS_HELLO_VERIFY:386:dtls_process_hello_verify +SSL_F_DTLS_WAIT_FOR_DRY:592:dtls_wait_for_dry +SSL_F_EARLY_DATA_COUNT_OK:532:early_data_count_ok +SSL_F_FINAL_EARLY_DATA:556:final_early_data +SSL_F_FINAL_EC_PT_FORMATS:485:final_ec_pt_formats +SSL_F_FINAL_EMS:486:final_ems +SSL_F_FINAL_KEY_SHARE:503:final_key_share +SSL_F_FINAL_MAXFRAGMENTLEN:557:final_maxfragmentlen +SSL_F_FINAL_RENEGOTIATE:483:final_renegotiate +SSL_F_FINAL_SERVER_NAME:558:final_server_name +SSL_F_FINAL_SIG_ALGS:497:final_sig_algs +SSL_F_GET_CERT_VERIFY_TBS_DATA:588:get_cert_verify_tbs_data +SSL_F_NSS_KEYLOG_INT:500:nss_keylog_int +SSL_F_OPENSSL_INIT_SSL:342:OPENSSL_init_ssl +SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION:436:* +SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION:598:\ + ossl_statem_client13_write_transition +SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE:430:* +SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE:593:\ + ossl_statem_client_post_process_message +SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE:594:ossl_statem_client_process_message +SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION:417:ossl_statem_client_read_transition +SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION:599:\ + ossl_statem_client_write_transition +SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION:437:* +SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION:600:\ + ossl_statem_server13_write_transition +SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE:431:* +SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE:601:\ + ossl_statem_server_post_process_message +SSL_F_OSSL_STATEM_SERVER_POST_WORK:602:ossl_statem_server_post_work +SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE:603:ossl_statem_server_process_message +SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION:418:ossl_statem_server_read_transition +SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION:604:\ + ossl_statem_server_write_transition +SSL_F_PARSE_CA_NAMES:541:parse_ca_names +SSL_F_PROCESS_KEY_SHARE_EXT:439:* +SSL_F_READ_STATE_MACHINE:352:read_state_machine +SSL_F_SET_CLIENT_CIPHERSUITE:540:set_client_ciphersuite +SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET:595:srp_generate_client_master_secret +SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET:589:srp_generate_server_master_secret +SSL_F_SRP_VERIFY_SERVER_PARAM:596:srp_verify_server_param +SSL_F_SSL3_CHANGE_CIPHER_STATE:129:ssl3_change_cipher_state +SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM:130:ssl3_check_cert_and_algorithm +SSL_F_SSL3_CTRL:213:ssl3_ctrl +SSL_F_SSL3_CTX_CTRL:133:ssl3_ctx_ctrl +SSL_F_SSL3_DIGEST_CACHED_RECORDS:293:ssl3_digest_cached_records +SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC:292:ssl3_do_change_cipher_spec +SSL_F_SSL3_ENC:608:ssl3_enc +SSL_F_SSL3_FINAL_FINISH_MAC:285:ssl3_final_finish_mac +SSL_F_SSL3_FINISH_MAC:587:ssl3_finish_mac +SSL_F_SSL3_GENERATE_KEY_BLOCK:238:ssl3_generate_key_block +SSL_F_SSL3_GENERATE_MASTER_SECRET:388:ssl3_generate_master_secret +SSL_F_SSL3_GET_RECORD:143:ssl3_get_record +SSL_F_SSL3_INIT_FINISHED_MAC:397:ssl3_init_finished_mac +SSL_F_SSL3_OUTPUT_CERT_CHAIN:147:ssl3_output_cert_chain +SSL_F_SSL3_READ_BYTES:148:ssl3_read_bytes +SSL_F_SSL3_READ_N:149:ssl3_read_n +SSL_F_SSL3_SETUP_KEY_BLOCK:157:ssl3_setup_key_block +SSL_F_SSL3_SETUP_READ_BUFFER:156:ssl3_setup_read_buffer +SSL_F_SSL3_SETUP_WRITE_BUFFER:291:ssl3_setup_write_buffer +SSL_F_SSL3_WRITE_BYTES:158:ssl3_write_bytes +SSL_F_SSL3_WRITE_PENDING:159:ssl3_write_pending +SSL_F_SSL_ADD_CERT_CHAIN:316:ssl_add_cert_chain +SSL_F_SSL_ADD_CERT_TO_BUF:319:* +SSL_F_SSL_ADD_CERT_TO_WPACKET:493:ssl_add_cert_to_wpacket +SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT:298:* +SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT:277:* +SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT:307:* +SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK:215:SSL_add_dir_cert_subjects_to_stack +SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK:216:\ + SSL_add_file_cert_subjects_to_stack +SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT:299:* +SSL_F_SSL_ADD_SERVERHELLO_TLSEXT:278:* +SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT:308:* +SSL_F_SSL_BAD_METHOD:160:ssl_bad_method +SSL_F_SSL_BUILD_CERT_CHAIN:332:ssl_build_cert_chain +SSL_F_SSL_BYTES_TO_CIPHER_LIST:161:SSL_bytes_to_cipher_list +SSL_F_SSL_CACHE_CIPHERLIST:520:ssl_cache_cipherlist +SSL_F_SSL_CERT_ADD0_CHAIN_CERT:346:ssl_cert_add0_chain_cert +SSL_F_SSL_CERT_DUP:221:ssl_cert_dup +SSL_F_SSL_CERT_NEW:162:ssl_cert_new +SSL_F_SSL_CERT_SET0_CHAIN:340:ssl_cert_set0_chain +SSL_F_SSL_CHECK_PRIVATE_KEY:163:SSL_check_private_key +SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT:280:* +SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO:606:ssl_check_srp_ext_ClientHello +SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG:279:ssl_check_srvr_ecc_cert_and_alg +SSL_F_SSL_CHOOSE_CLIENT_VERSION:607:ssl_choose_client_version +SSL_F_SSL_CIPHER_LIST_TO_BYTES:425:ssl_cipher_list_to_bytes +SSL_F_SSL_CIPHER_PROCESS_RULESTR:230:ssl_cipher_process_rulestr +SSL_F_SSL_CIPHER_STRENGTH_SORT:231:ssl_cipher_strength_sort +SSL_F_SSL_CLEAR:164:SSL_clear +SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD:165:SSL_COMP_add_compression_method +SSL_F_SSL_CONF_CMD:334:SSL_CONF_cmd +SSL_F_SSL_CREATE_CIPHER_LIST:166:ssl_create_cipher_list +SSL_F_SSL_CTRL:232:SSL_ctrl +SSL_F_SSL_CTX_CHECK_PRIVATE_KEY:168:SSL_CTX_check_private_key +SSL_F_SSL_CTX_ENABLE_CT:398:SSL_CTX_enable_ct +SSL_F_SSL_CTX_MAKE_PROFILES:309:ssl_ctx_make_profiles +SSL_F_SSL_CTX_NEW:169:SSL_CTX_new +SSL_F_SSL_CTX_SET_ALPN_PROTOS:343:SSL_CTX_set_alpn_protos +SSL_F_SSL_CTX_SET_CIPHER_LIST:269:SSL_CTX_set_cipher_list +SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE:290:SSL_CTX_set_client_cert_engine +SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK:396:SSL_CTX_set_ct_validation_callback +SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT:219:SSL_CTX_set_session_id_context +SSL_F_SSL_CTX_SET_SSL_VERSION:170:SSL_CTX_set_ssl_version +SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH:551:\ + SSL_CTX_set_tlsext_max_fragment_length +SSL_F_SSL_CTX_USE_CERTIFICATE:171:SSL_CTX_use_certificate +SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1:172:SSL_CTX_use_certificate_ASN1 +SSL_F_SSL_CTX_USE_CERTIFICATE_FILE:173:SSL_CTX_use_certificate_file +SSL_F_SSL_CTX_USE_PRIVATEKEY:174:SSL_CTX_use_PrivateKey +SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1:175:SSL_CTX_use_PrivateKey_ASN1 +SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE:176:SSL_CTX_use_PrivateKey_file +SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT:272:SSL_CTX_use_psk_identity_hint +SSL_F_SSL_CTX_USE_RSAPRIVATEKEY:177:SSL_CTX_use_RSAPrivateKey +SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1:178:SSL_CTX_use_RSAPrivateKey_ASN1 +SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE:179:SSL_CTX_use_RSAPrivateKey_file +SSL_F_SSL_CTX_USE_SERVERINFO:336:SSL_CTX_use_serverinfo +SSL_F_SSL_CTX_USE_SERVERINFO_EX:543:SSL_CTX_use_serverinfo_ex +SSL_F_SSL_CTX_USE_SERVERINFO_FILE:337:SSL_CTX_use_serverinfo_file +SSL_F_SSL_DANE_DUP:403:ssl_dane_dup +SSL_F_SSL_DANE_ENABLE:395:SSL_dane_enable +SSL_F_SSL_DERIVE:590:ssl_derive +SSL_F_SSL_DO_CONFIG:391:ssl_do_config +SSL_F_SSL_DO_HANDSHAKE:180:SSL_do_handshake +SSL_F_SSL_DUP_CA_LIST:408:SSL_dup_CA_list +SSL_F_SSL_ENABLE_CT:402:SSL_enable_ct +SSL_F_SSL_GENERATE_PKEY_GROUP:559:ssl_generate_pkey_group +SSL_F_SSL_GENERATE_SESSION_ID:547:ssl_generate_session_id +SSL_F_SSL_GET_NEW_SESSION:181:ssl_get_new_session +SSL_F_SSL_GET_PREV_SESSION:217:ssl_get_prev_session +SSL_F_SSL_GET_SERVER_CERT_INDEX:322:* +SSL_F_SSL_GET_SIGN_PKEY:183:* +SSL_F_SSL_HANDSHAKE_HASH:560:ssl_handshake_hash +SSL_F_SSL_INIT_WBIO_BUFFER:184:ssl_init_wbio_buffer +SSL_F_SSL_KEY_UPDATE:515:SSL_key_update +SSL_F_SSL_LOAD_CLIENT_CA_FILE:185:SSL_load_client_CA_file +SSL_F_SSL_LOG_MASTER_SECRET:498:* +SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE:499:ssl_log_rsa_client_key_exchange +SSL_F_SSL_MODULE_INIT:392:ssl_module_init +SSL_F_SSL_NEW:186:SSL_new +SSL_F_SSL_NEXT_PROTO_VALIDATE:565:ssl_next_proto_validate +SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT:300:* +SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT:302:* +SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT:310:* +SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT:301:* +SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT:303:* +SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT:311:* +SSL_F_SSL_PEEK:270:SSL_peek +SSL_F_SSL_PEEK_EX:432:SSL_peek_ex +SSL_F_SSL_PEEK_INTERNAL:522:ssl_peek_internal +SSL_F_SSL_READ:223:SSL_read +SSL_F_SSL_READ_EARLY_DATA:529:SSL_read_early_data +SSL_F_SSL_READ_EX:434:SSL_read_ex +SSL_F_SSL_READ_INTERNAL:523:ssl_read_internal +SSL_F_SSL_RENEGOTIATE:516:SSL_renegotiate +SSL_F_SSL_RENEGOTIATE_ABBREVIATED:546:SSL_renegotiate_abbreviated +SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT:320:* +SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT:321:* +SSL_F_SSL_SESSION_DUP:348:ssl_session_dup +SSL_F_SSL_SESSION_NEW:189:SSL_SESSION_new +SSL_F_SSL_SESSION_PRINT_FP:190:SSL_SESSION_print_fp +SSL_F_SSL_SESSION_SET1_ID:423:SSL_SESSION_set1_id +SSL_F_SSL_SESSION_SET1_ID_CONTEXT:312:SSL_SESSION_set1_id_context +SSL_F_SSL_SET_ALPN_PROTOS:344:SSL_set_alpn_protos +SSL_F_SSL_SET_CERT:191:ssl_set_cert +SSL_F_SSL_SET_CIPHER_LIST:271:SSL_set_cipher_list +SSL_F_SSL_SET_CT_VALIDATION_CALLBACK:399:SSL_set_ct_validation_callback +SSL_F_SSL_SET_FD:192:SSL_set_fd +SSL_F_SSL_SET_PKEY:193:ssl_set_pkey +SSL_F_SSL_SET_RFD:194:SSL_set_rfd +SSL_F_SSL_SET_SESSION:195:SSL_set_session +SSL_F_SSL_SET_SESSION_ID_CONTEXT:218:SSL_set_session_id_context +SSL_F_SSL_SET_SESSION_TICKET_EXT:294:SSL_set_session_ticket_ext +SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH:550:SSL_set_tlsext_max_fragment_length +SSL_F_SSL_SET_WFD:196:SSL_set_wfd +SSL_F_SSL_SHUTDOWN:224:SSL_shutdown +SSL_F_SSL_SRP_CTX_INIT:313:SSL_SRP_CTX_init +SSL_F_SSL_START_ASYNC_JOB:389:ssl_start_async_job +SSL_F_SSL_UNDEFINED_FUNCTION:197:ssl_undefined_function +SSL_F_SSL_UNDEFINED_VOID_FUNCTION:244:ssl_undefined_void_function +SSL_F_SSL_USE_CERTIFICATE:198:SSL_use_certificate +SSL_F_SSL_USE_CERTIFICATE_ASN1:199:SSL_use_certificate_ASN1 +SSL_F_SSL_USE_CERTIFICATE_FILE:200:SSL_use_certificate_file +SSL_F_SSL_USE_PRIVATEKEY:201:SSL_use_PrivateKey +SSL_F_SSL_USE_PRIVATEKEY_ASN1:202:SSL_use_PrivateKey_ASN1 +SSL_F_SSL_USE_PRIVATEKEY_FILE:203:SSL_use_PrivateKey_file +SSL_F_SSL_USE_PSK_IDENTITY_HINT:273:SSL_use_psk_identity_hint +SSL_F_SSL_USE_RSAPRIVATEKEY:204:SSL_use_RSAPrivateKey +SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1:205:SSL_use_RSAPrivateKey_ASN1 +SSL_F_SSL_USE_RSAPRIVATEKEY_FILE:206:SSL_use_RSAPrivateKey_file +SSL_F_SSL_VALIDATE_CT:400:ssl_validate_ct +SSL_F_SSL_VERIFY_CERT_CHAIN:207:ssl_verify_cert_chain +SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE:616:SSL_verify_client_post_handshake +SSL_F_SSL_WRITE:208:SSL_write +SSL_F_SSL_WRITE_EARLY_DATA:526:SSL_write_early_data +SSL_F_SSL_WRITE_EARLY_FINISH:527:* +SSL_F_SSL_WRITE_EX:433:SSL_write_ex +SSL_F_SSL_WRITE_INTERNAL:524:ssl_write_internal +SSL_F_STATE_MACHINE:353:state_machine +SSL_F_TLS12_CHECK_PEER_SIGALG:333:tls12_check_peer_sigalg +SSL_F_TLS12_COPY_SIGALGS:533:tls12_copy_sigalgs +SSL_F_TLS13_CHANGE_CIPHER_STATE:440:tls13_change_cipher_state +SSL_F_TLS13_ENC:609:tls13_enc +SSL_F_TLS13_FINAL_FINISH_MAC:605:tls13_final_finish_mac +SSL_F_TLS13_GENERATE_SECRET:591:tls13_generate_secret +SSL_F_TLS13_HKDF_EXPAND:561:tls13_hkdf_expand +SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA:617:\ + tls13_restore_handshake_digest_for_pha +SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA:618:\ + tls13_save_handshake_digest_for_pha +SSL_F_TLS13_SETUP_KEY_BLOCK:441:tls13_setup_key_block +SSL_F_TLS1_CHANGE_CIPHER_STATE:209:tls1_change_cipher_state +SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS:341:* +SSL_F_TLS1_ENC:401:tls1_enc +SSL_F_TLS1_EXPORT_KEYING_MATERIAL:314:tls1_export_keying_material +SSL_F_TLS1_GET_CURVELIST:338:tls1_get_curvelist +SSL_F_TLS1_PRF:284:tls1_PRF +SSL_F_TLS1_SETUP_KEY_BLOCK:211:tls1_setup_key_block +SSL_F_TLS1_SET_SERVER_SIGALGS:335:tls1_set_server_sigalgs +SSL_F_TLS_CHOOSE_SIGALG:513:tls_choose_sigalg +SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK:354:tls_client_key_exchange_post_work +SSL_F_TLS_COLLECT_EXTENSIONS:435:tls_collect_extensions +SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES:542:\ + tls_construct_certificate_authorities +SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST:372:tls_construct_certificate_request +SSL_F_TLS_CONSTRUCT_CERT_STATUS:429:* +SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY:494:tls_construct_cert_status_body +SSL_F_TLS_CONSTRUCT_CERT_VERIFY:496:tls_construct_cert_verify +SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC:427:tls_construct_change_cipher_spec +SSL_F_TLS_CONSTRUCT_CKE_DHE:404:tls_construct_cke_dhe +SSL_F_TLS_CONSTRUCT_CKE_ECDHE:405:tls_construct_cke_ecdhe +SSL_F_TLS_CONSTRUCT_CKE_GOST:406:tls_construct_cke_gost +SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE:407:tls_construct_cke_psk_preamble +SSL_F_TLS_CONSTRUCT_CKE_RSA:409:tls_construct_cke_rsa +SSL_F_TLS_CONSTRUCT_CKE_SRP:410:tls_construct_cke_srp +SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE:484:tls_construct_client_certificate +SSL_F_TLS_CONSTRUCT_CLIENT_HELLO:487:tls_construct_client_hello +SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE:488:tls_construct_client_key_exchange +SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY:489:* +SSL_F_TLS_CONSTRUCT_CTOS_ALPN:466:tls_construct_ctos_alpn +SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE:355:* +SSL_F_TLS_CONSTRUCT_CTOS_COOKIE:535:tls_construct_ctos_cookie +SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA:530:tls_construct_ctos_early_data +SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS:467:tls_construct_ctos_ec_pt_formats +SSL_F_TLS_CONSTRUCT_CTOS_EMS:468:tls_construct_ctos_ems +SSL_F_TLS_CONSTRUCT_CTOS_ETM:469:tls_construct_ctos_etm +SSL_F_TLS_CONSTRUCT_CTOS_HELLO:356:* +SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE:357:* +SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE:470:tls_construct_ctos_key_share +SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN:549:tls_construct_ctos_maxfragmentlen +SSL_F_TLS_CONSTRUCT_CTOS_NPN:471:tls_construct_ctos_npn +SSL_F_TLS_CONSTRUCT_CTOS_PADDING:472:tls_construct_ctos_padding +SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH:619:\ + tls_construct_ctos_post_handshake_auth +SSL_F_TLS_CONSTRUCT_CTOS_PSK:501:tls_construct_ctos_psk +SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES:509:tls_construct_ctos_psk_kex_modes +SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE:473:tls_construct_ctos_renegotiate +SSL_F_TLS_CONSTRUCT_CTOS_SCT:474:tls_construct_ctos_sct +SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME:475:tls_construct_ctos_server_name +SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET:476:tls_construct_ctos_session_ticket +SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS:477:tls_construct_ctos_sig_algs +SSL_F_TLS_CONSTRUCT_CTOS_SRP:478:tls_construct_ctos_srp +SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST:479:tls_construct_ctos_status_request +SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS:480:\ + tls_construct_ctos_supported_groups +SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS:481:\ + tls_construct_ctos_supported_versions +SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP:482:tls_construct_ctos_use_srtp +SSL_F_TLS_CONSTRUCT_CTOS_VERIFY:358:* +SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS:443:tls_construct_encrypted_extensions +SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA:536:tls_construct_end_of_early_data +SSL_F_TLS_CONSTRUCT_EXTENSIONS:447:tls_construct_extensions +SSL_F_TLS_CONSTRUCT_FINISHED:359:tls_construct_finished +SSL_F_TLS_CONSTRUCT_HELLO_REQUEST:373:* +SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST:510:tls_construct_hello_retry_request +SSL_F_TLS_CONSTRUCT_KEY_UPDATE:517:tls_construct_key_update +SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET:428:tls_construct_new_session_ticket +SSL_F_TLS_CONSTRUCT_NEXT_PROTO:426:tls_construct_next_proto +SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE:490:tls_construct_server_certificate +SSL_F_TLS_CONSTRUCT_SERVER_HELLO:491:tls_construct_server_hello +SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE:492:tls_construct_server_key_exchange +SSL_F_TLS_CONSTRUCT_STOC_ALPN:451:tls_construct_stoc_alpn +SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE:374:* +SSL_F_TLS_CONSTRUCT_STOC_COOKIE:613:tls_construct_stoc_cookie +SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG:452:tls_construct_stoc_cryptopro_bug +SSL_F_TLS_CONSTRUCT_STOC_DONE:375:* +SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA:531:tls_construct_stoc_early_data +SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO:525:* +SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS:453:tls_construct_stoc_ec_pt_formats +SSL_F_TLS_CONSTRUCT_STOC_EMS:454:tls_construct_stoc_ems +SSL_F_TLS_CONSTRUCT_STOC_ETM:455:tls_construct_stoc_etm +SSL_F_TLS_CONSTRUCT_STOC_HELLO:376:* +SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE:377:* +SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE:456:tls_construct_stoc_key_share +SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN:548:tls_construct_stoc_maxfragmentlen +SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG:457:tls_construct_stoc_next_proto_neg +SSL_F_TLS_CONSTRUCT_STOC_PSK:504:tls_construct_stoc_psk +SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE:458:tls_construct_stoc_renegotiate +SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME:459:tls_construct_stoc_server_name +SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET:460:tls_construct_stoc_session_ticket +SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST:461:tls_construct_stoc_status_request +SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS:544:\ + tls_construct_stoc_supported_groups +SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS:611:\ + tls_construct_stoc_supported_versions +SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP:462:tls_construct_stoc_use_srtp +SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO:521:\ + tls_early_post_process_client_hello +SSL_F_TLS_FINISH_HANDSHAKE:597:tls_finish_handshake +SSL_F_TLS_GET_MESSAGE_BODY:351:tls_get_message_body +SSL_F_TLS_GET_MESSAGE_HEADER:387:tls_get_message_header +SSL_F_TLS_HANDLE_ALPN:562:tls_handle_alpn +SSL_F_TLS_HANDLE_STATUS_REQUEST:563:tls_handle_status_request +SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES:566:tls_parse_certificate_authorities +SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT:449:* +SSL_F_TLS_PARSE_CTOS_ALPN:567:tls_parse_ctos_alpn +SSL_F_TLS_PARSE_CTOS_COOKIE:614:tls_parse_ctos_cookie +SSL_F_TLS_PARSE_CTOS_EARLY_DATA:568:tls_parse_ctos_early_data +SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS:569:tls_parse_ctos_ec_pt_formats +SSL_F_TLS_PARSE_CTOS_EMS:570:tls_parse_ctos_ems +SSL_F_TLS_PARSE_CTOS_KEY_SHARE:463:tls_parse_ctos_key_share +SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN:571:tls_parse_ctos_maxfragmentlen +SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH:620:tls_parse_ctos_post_handshake_auth +SSL_F_TLS_PARSE_CTOS_PSK:505:tls_parse_ctos_psk +SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES:572:tls_parse_ctos_psk_kex_modes +SSL_F_TLS_PARSE_CTOS_RENEGOTIATE:464:tls_parse_ctos_renegotiate +SSL_F_TLS_PARSE_CTOS_SERVER_NAME:573:tls_parse_ctos_server_name +SSL_F_TLS_PARSE_CTOS_SESSION_TICKET:574:tls_parse_ctos_session_ticket +SSL_F_TLS_PARSE_CTOS_SIG_ALGS:575:tls_parse_ctos_sig_algs +SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT:615:tls_parse_ctos_sig_algs_cert +SSL_F_TLS_PARSE_CTOS_SRP:576:tls_parse_ctos_srp +SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST:577:tls_parse_ctos_status_request +SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS:578:tls_parse_ctos_supported_groups +SSL_F_TLS_PARSE_CTOS_USE_SRTP:465:tls_parse_ctos_use_srtp +SSL_F_TLS_PARSE_STOC_ALPN:579:tls_parse_stoc_alpn +SSL_F_TLS_PARSE_STOC_COOKIE:534:tls_parse_stoc_cookie +SSL_F_TLS_PARSE_STOC_EARLY_DATA:538:tls_parse_stoc_early_data +SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO:528:* +SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS:580:tls_parse_stoc_ec_pt_formats +SSL_F_TLS_PARSE_STOC_KEY_SHARE:445:tls_parse_stoc_key_share +SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN:581:tls_parse_stoc_maxfragmentlen +SSL_F_TLS_PARSE_STOC_NPN:582:tls_parse_stoc_npn +SSL_F_TLS_PARSE_STOC_PSK:502:tls_parse_stoc_psk +SSL_F_TLS_PARSE_STOC_RENEGOTIATE:448:tls_parse_stoc_renegotiate +SSL_F_TLS_PARSE_STOC_SCT:564:tls_parse_stoc_sct +SSL_F_TLS_PARSE_STOC_SERVER_NAME:583:tls_parse_stoc_server_name +SSL_F_TLS_PARSE_STOC_SESSION_TICKET:584:tls_parse_stoc_session_ticket +SSL_F_TLS_PARSE_STOC_STATUS_REQUEST:585:tls_parse_stoc_status_request +SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS:612:tls_parse_stoc_supported_versions +SSL_F_TLS_PARSE_STOC_USE_SRTP:446:tls_parse_stoc_use_srtp +SSL_F_TLS_POST_PROCESS_CLIENT_HELLO:378:tls_post_process_client_hello +SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE:384:\ + tls_post_process_client_key_exchange +SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE:360:tls_prepare_client_certificate +SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST:610:tls_process_as_hello_retry_request +SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST:361:tls_process_certificate_request +SSL_F_TLS_PROCESS_CERT_STATUS:362:* +SSL_F_TLS_PROCESS_CERT_STATUS_BODY:495:tls_process_cert_status_body +SSL_F_TLS_PROCESS_CERT_VERIFY:379:tls_process_cert_verify +SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC:363:tls_process_change_cipher_spec +SSL_F_TLS_PROCESS_CKE_DHE:411:tls_process_cke_dhe +SSL_F_TLS_PROCESS_CKE_ECDHE:412:tls_process_cke_ecdhe +SSL_F_TLS_PROCESS_CKE_GOST:413:tls_process_cke_gost +SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE:414:tls_process_cke_psk_preamble +SSL_F_TLS_PROCESS_CKE_RSA:415:tls_process_cke_rsa +SSL_F_TLS_PROCESS_CKE_SRP:416:tls_process_cke_srp +SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE:380:tls_process_client_certificate +SSL_F_TLS_PROCESS_CLIENT_HELLO:381:tls_process_client_hello +SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE:382:tls_process_client_key_exchange +SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS:444:tls_process_encrypted_extensions +SSL_F_TLS_PROCESS_END_OF_EARLY_DATA:537:tls_process_end_of_early_data +SSL_F_TLS_PROCESS_FINISHED:364:tls_process_finished +SSL_F_TLS_PROCESS_HELLO_REQ:507:tls_process_hello_req +SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST:511:tls_process_hello_retry_request +SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT:442:tls_process_initial_server_flight +SSL_F_TLS_PROCESS_KEY_EXCHANGE:365:tls_process_key_exchange +SSL_F_TLS_PROCESS_KEY_UPDATE:518:tls_process_key_update +SSL_F_TLS_PROCESS_NEW_SESSION_TICKET:366:tls_process_new_session_ticket +SSL_F_TLS_PROCESS_NEXT_PROTO:383:tls_process_next_proto +SSL_F_TLS_PROCESS_SERVER_CERTIFICATE:367:tls_process_server_certificate +SSL_F_TLS_PROCESS_SERVER_DONE:368:tls_process_server_done +SSL_F_TLS_PROCESS_SERVER_HELLO:369:tls_process_server_hello +SSL_F_TLS_PROCESS_SKE_DHE:419:tls_process_ske_dhe +SSL_F_TLS_PROCESS_SKE_ECDHE:420:tls_process_ske_ecdhe +SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE:421:tls_process_ske_psk_preamble +SSL_F_TLS_PROCESS_SKE_SRP:422:tls_process_ske_srp +SSL_F_TLS_PSK_DO_BINDER:506:tls_psk_do_binder +SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT:450:* +SSL_F_TLS_SETUP_HANDSHAKE:508:tls_setup_handshake +SSL_F_USE_CERTIFICATE_CHAIN_FILE:220:use_certificate_chain_file +SSL_F_WRITE_STATE_MACHINE:586:write_state_machine +TS_F_DEF_SERIAL_CB:110:def_serial_cb +TS_F_DEF_TIME_CB:111:def_time_cb +TS_F_ESS_ADD_SIGNING_CERT:112:ess_add_signing_cert +TS_F_ESS_ADD_SIGNING_CERT_V2:147:ess_add_signing_cert_v2 +TS_F_ESS_CERT_ID_NEW_INIT:113:ess_CERT_ID_new_init +TS_F_ESS_CERT_ID_V2_NEW_INIT:156:ess_cert_id_v2_new_init +TS_F_ESS_SIGNING_CERT_NEW_INIT:114:ess_SIGNING_CERT_new_init +TS_F_ESS_SIGNING_CERT_V2_NEW_INIT:157:ess_signing_cert_v2_new_init +TS_F_INT_TS_RESP_VERIFY_TOKEN:149:int_ts_RESP_verify_token +TS_F_PKCS7_TO_TS_TST_INFO:148:PKCS7_to_TS_TST_INFO +TS_F_TS_ACCURACY_SET_MICROS:115:TS_ACCURACY_set_micros +TS_F_TS_ACCURACY_SET_MILLIS:116:TS_ACCURACY_set_millis +TS_F_TS_ACCURACY_SET_SECONDS:117:TS_ACCURACY_set_seconds +TS_F_TS_CHECK_IMPRINTS:100:ts_check_imprints +TS_F_TS_CHECK_NONCES:101:ts_check_nonces +TS_F_TS_CHECK_POLICY:102:ts_check_policy +TS_F_TS_CHECK_SIGNING_CERTS:103:ts_check_signing_certs +TS_F_TS_CHECK_STATUS_INFO:104:ts_check_status_info +TS_F_TS_COMPUTE_IMPRINT:145:ts_compute_imprint +TS_F_TS_CONF_INVALID:151:ts_CONF_invalid +TS_F_TS_CONF_LOAD_CERT:153:TS_CONF_load_cert +TS_F_TS_CONF_LOAD_CERTS:154:TS_CONF_load_certs +TS_F_TS_CONF_LOAD_KEY:155:TS_CONF_load_key +TS_F_TS_CONF_LOOKUP_FAIL:152:ts_CONF_lookup_fail +TS_F_TS_CONF_SET_DEFAULT_ENGINE:146:TS_CONF_set_default_engine +TS_F_TS_GET_STATUS_TEXT:105:ts_get_status_text +TS_F_TS_MSG_IMPRINT_SET_ALGO:118:TS_MSG_IMPRINT_set_algo +TS_F_TS_REQ_SET_MSG_IMPRINT:119:TS_REQ_set_msg_imprint +TS_F_TS_REQ_SET_NONCE:120:TS_REQ_set_nonce +TS_F_TS_REQ_SET_POLICY_ID:121:TS_REQ_set_policy_id +TS_F_TS_RESP_CREATE_RESPONSE:122:TS_RESP_create_response +TS_F_TS_RESP_CREATE_TST_INFO:123:ts_RESP_create_tst_info +TS_F_TS_RESP_CTX_ADD_FAILURE_INFO:124:TS_RESP_CTX_add_failure_info +TS_F_TS_RESP_CTX_ADD_MD:125:TS_RESP_CTX_add_md +TS_F_TS_RESP_CTX_ADD_POLICY:126:TS_RESP_CTX_add_policy +TS_F_TS_RESP_CTX_NEW:127:TS_RESP_CTX_new +TS_F_TS_RESP_CTX_SET_ACCURACY:128:TS_RESP_CTX_set_accuracy +TS_F_TS_RESP_CTX_SET_CERTS:129:TS_RESP_CTX_set_certs +TS_F_TS_RESP_CTX_SET_DEF_POLICY:130:TS_RESP_CTX_set_def_policy +TS_F_TS_RESP_CTX_SET_SIGNER_CERT:131:TS_RESP_CTX_set_signer_cert +TS_F_TS_RESP_CTX_SET_STATUS_INFO:132:TS_RESP_CTX_set_status_info +TS_F_TS_RESP_GET_POLICY:133:ts_RESP_get_policy +TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION:134:TS_RESP_set_genTime_with_precision +TS_F_TS_RESP_SET_STATUS_INFO:135:TS_RESP_set_status_info +TS_F_TS_RESP_SET_TST_INFO:150:TS_RESP_set_tst_info +TS_F_TS_RESP_SIGN:136:ts_RESP_sign +TS_F_TS_RESP_VERIFY_SIGNATURE:106:TS_RESP_verify_signature +TS_F_TS_TST_INFO_SET_ACCURACY:137:TS_TST_INFO_set_accuracy +TS_F_TS_TST_INFO_SET_MSG_IMPRINT:138:TS_TST_INFO_set_msg_imprint +TS_F_TS_TST_INFO_SET_NONCE:139:TS_TST_INFO_set_nonce +TS_F_TS_TST_INFO_SET_POLICY_ID:140:TS_TST_INFO_set_policy_id +TS_F_TS_TST_INFO_SET_SERIAL:141:TS_TST_INFO_set_serial +TS_F_TS_TST_INFO_SET_TIME:142:TS_TST_INFO_set_time +TS_F_TS_TST_INFO_SET_TSA:143:TS_TST_INFO_set_tsa +TS_F_TS_VERIFY:108:* +TS_F_TS_VERIFY_CERT:109:ts_verify_cert +TS_F_TS_VERIFY_CTX_NEW:144:TS_VERIFY_CTX_new +UI_F_CLOSE_CONSOLE:115:close_console +UI_F_ECHO_CONSOLE:116:echo_console +UI_F_GENERAL_ALLOCATE_BOOLEAN:108:general_allocate_boolean +UI_F_GENERAL_ALLOCATE_PROMPT:109:general_allocate_prompt +UI_F_NOECHO_CONSOLE:117:noecho_console +UI_F_OPEN_CONSOLE:114:open_console +UI_F_UI_CREATE_METHOD:112:UI_create_method +UI_F_UI_CTRL:111:UI_ctrl +UI_F_UI_DUP_ERROR_STRING:101:UI_dup_error_string +UI_F_UI_DUP_INFO_STRING:102:UI_dup_info_string +UI_F_UI_DUP_INPUT_BOOLEAN:110:UI_dup_input_boolean +UI_F_UI_DUP_INPUT_STRING:103:UI_dup_input_string +UI_F_UI_DUP_USER_DATA:118:UI_dup_user_data +UI_F_UI_DUP_VERIFY_STRING:106:UI_dup_verify_string +UI_F_UI_GET0_RESULT:107:UI_get0_result +UI_F_UI_GET_RESULT_LENGTH:119:UI_get_result_length +UI_F_UI_NEW_METHOD:104:UI_new_method +UI_F_UI_PROCESS:113:UI_process +UI_F_UI_SET_RESULT:105:UI_set_result +UI_F_UI_SET_RESULT_EX:120:UI_set_result_ex +X509V3_F_A2I_GENERAL_NAME:164:a2i_GENERAL_NAME +X509V3_F_ADDR_VALIDATE_PATH_INTERNAL:166:addr_validate_path_internal +X509V3_F_ASIDENTIFIERCHOICE_CANONIZE:161:ASIdentifierChoice_canonize +X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL:162:ASIdentifierChoice_is_canonical +X509V3_F_BIGNUM_TO_STRING:167:bignum_to_string +X509V3_F_COPY_EMAIL:122:copy_email +X509V3_F_COPY_ISSUER:123:copy_issuer +X509V3_F_DO_DIRNAME:144:do_dirname +X509V3_F_DO_EXT_I2D:135:do_ext_i2d +X509V3_F_DO_EXT_NCONF:151:do_ext_nconf +X509V3_F_GNAMES_FROM_SECTNAME:156:gnames_from_sectname +X509V3_F_I2S_ASN1_ENUMERATED:121:i2s_ASN1_ENUMERATED +X509V3_F_I2S_ASN1_IA5STRING:149:i2s_ASN1_IA5STRING +X509V3_F_I2S_ASN1_INTEGER:120:i2s_ASN1_INTEGER +X509V3_F_I2V_AUTHORITY_INFO_ACCESS:138:i2v_AUTHORITY_INFO_ACCESS +X509V3_F_NOTICE_SECTION:132:notice_section +X509V3_F_NREF_NOS:133:nref_nos +X509V3_F_POLICY_SECTION:131:policy_section +X509V3_F_PROCESS_PCI_VALUE:150:process_pci_value +X509V3_F_R2I_CERTPOL:130:r2i_certpol +X509V3_F_R2I_PCI:155:r2i_pci +X509V3_F_S2I_ASN1_IA5STRING:100:s2i_ASN1_IA5STRING +X509V3_F_S2I_ASN1_INTEGER:108:s2i_ASN1_INTEGER +X509V3_F_S2I_ASN1_OCTET_STRING:112:s2i_ASN1_OCTET_STRING +X509V3_F_S2I_SKEY_ID:115:s2i_skey_id +X509V3_F_SET_DIST_POINT_NAME:158:set_dist_point_name +X509V3_F_SXNET_ADD_ID_ASC:125:SXNET_add_id_asc +X509V3_F_SXNET_ADD_ID_INTEGER:126:SXNET_add_id_INTEGER +X509V3_F_SXNET_ADD_ID_ULONG:127:SXNET_add_id_ulong +X509V3_F_SXNET_GET_ID_ASC:128:SXNET_get_id_asc +X509V3_F_SXNET_GET_ID_ULONG:129:SXNET_get_id_ulong +X509V3_F_V2I_ASIDENTIFIERS:163:v2i_ASIdentifiers +X509V3_F_V2I_ASN1_BIT_STRING:101:v2i_ASN1_BIT_STRING +X509V3_F_V2I_AUTHORITY_INFO_ACCESS:139:v2i_AUTHORITY_INFO_ACCESS +X509V3_F_V2I_AUTHORITY_KEYID:119:v2i_AUTHORITY_KEYID +X509V3_F_V2I_BASIC_CONSTRAINTS:102:v2i_BASIC_CONSTRAINTS +X509V3_F_V2I_CRLD:134:v2i_crld +X509V3_F_V2I_EXTENDED_KEY_USAGE:103:v2i_EXTENDED_KEY_USAGE +X509V3_F_V2I_GENERAL_NAMES:118:v2i_GENERAL_NAMES +X509V3_F_V2I_GENERAL_NAME_EX:117:v2i_GENERAL_NAME_ex +X509V3_F_V2I_IDP:157:v2i_idp +X509V3_F_V2I_IPADDRBLOCKS:159:v2i_IPAddrBlocks +X509V3_F_V2I_ISSUER_ALT:153:v2i_issuer_alt +X509V3_F_V2I_NAME_CONSTRAINTS:147:v2i_NAME_CONSTRAINTS +X509V3_F_V2I_POLICY_CONSTRAINTS:146:v2i_POLICY_CONSTRAINTS +X509V3_F_V2I_POLICY_MAPPINGS:145:v2i_POLICY_MAPPINGS +X509V3_F_V2I_SUBJECT_ALT:154:v2i_subject_alt +X509V3_F_V2I_TLS_FEATURE:165:v2i_TLS_FEATURE +X509V3_F_V3_GENERIC_EXTENSION:116:v3_generic_extension +X509V3_F_X509V3_ADD1_I2D:140:X509V3_add1_i2d +X509V3_F_X509V3_ADD_VALUE:105:X509V3_add_value +X509V3_F_X509V3_EXT_ADD:104:X509V3_EXT_add +X509V3_F_X509V3_EXT_ADD_ALIAS:106:X509V3_EXT_add_alias +X509V3_F_X509V3_EXT_I2D:136:X509V3_EXT_i2d +X509V3_F_X509V3_EXT_NCONF:152:X509V3_EXT_nconf +X509V3_F_X509V3_GET_SECTION:142:X509V3_get_section +X509V3_F_X509V3_GET_STRING:143:X509V3_get_string +X509V3_F_X509V3_GET_VALUE_BOOL:110:X509V3_get_value_bool +X509V3_F_X509V3_PARSE_LIST:109:X509V3_parse_list +X509V3_F_X509_PURPOSE_ADD:137:X509_PURPOSE_add +X509V3_F_X509_PURPOSE_SET:141:X509_PURPOSE_set +X509_F_ADD_CERT_DIR:100:add_cert_dir +X509_F_BUILD_CHAIN:106:build_chain +X509_F_BY_FILE_CTRL:101:by_file_ctrl +X509_F_CHECK_NAME_CONSTRAINTS:149:check_name_constraints +X509_F_CHECK_POLICY:145:check_policy +X509_F_DANE_I2D:107:dane_i2d +X509_F_DIR_CTRL:102:dir_ctrl +X509_F_GET_CERT_BY_SUBJECT:103:get_cert_by_subject +X509_F_NETSCAPE_SPKI_B64_DECODE:129:NETSCAPE_SPKI_b64_decode +X509_F_NETSCAPE_SPKI_B64_ENCODE:130:NETSCAPE_SPKI_b64_encode +X509_F_X509AT_ADD1_ATTR:135:X509at_add1_attr +X509_F_X509V3_ADD_EXT:104:X509v3_add_ext +X509_F_X509_ATTRIBUTE_CREATE_BY_NID:136:X509_ATTRIBUTE_create_by_NID +X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ:137:X509_ATTRIBUTE_create_by_OBJ +X509_F_X509_ATTRIBUTE_CREATE_BY_TXT:140:X509_ATTRIBUTE_create_by_txt +X509_F_X509_ATTRIBUTE_GET0_DATA:139:X509_ATTRIBUTE_get0_data +X509_F_X509_ATTRIBUTE_SET1_DATA:138:X509_ATTRIBUTE_set1_data +X509_F_X509_CHECK_PRIVATE_KEY:128:X509_check_private_key +X509_F_X509_CRL_DIFF:105:X509_CRL_diff +X509_F_X509_CRL_PRINT_FP:147:X509_CRL_print_fp +X509_F_X509_EXTENSION_CREATE_BY_NID:108:X509_EXTENSION_create_by_NID +X509_F_X509_EXTENSION_CREATE_BY_OBJ:109:X509_EXTENSION_create_by_OBJ +X509_F_X509_GET_PUBKEY_PARAMETERS:110:X509_get_pubkey_parameters +X509_F_X509_LOAD_CERT_CRL_FILE:132:X509_load_cert_crl_file +X509_F_X509_LOAD_CERT_FILE:111:X509_load_cert_file +X509_F_X509_LOAD_CRL_FILE:112:X509_load_crl_file +X509_F_X509_NAME_ADD_ENTRY:113:X509_NAME_add_entry +X509_F_X509_NAME_ENTRY_CREATE_BY_NID:114:X509_NAME_ENTRY_create_by_NID +X509_F_X509_NAME_ENTRY_CREATE_BY_TXT:131:X509_NAME_ENTRY_create_by_txt +X509_F_X509_NAME_ENTRY_SET_OBJECT:115:X509_NAME_ENTRY_set_object +X509_F_X509_NAME_ONELINE:116:X509_NAME_oneline +X509_F_X509_NAME_PRINT:117:X509_NAME_print +X509_F_X509_OBJECT_NEW:150:X509_OBJECT_new +X509_F_X509_PRINT_EX_FP:118:X509_print_ex_fp +X509_F_X509_PUBKEY_DECODE:148:x509_pubkey_decode +X509_F_X509_PUBKEY_GET0:119:X509_PUBKEY_get0 +X509_F_X509_PUBKEY_SET:120:X509_PUBKEY_set +X509_F_X509_REQ_CHECK_PRIVATE_KEY:144:X509_REQ_check_private_key +X509_F_X509_REQ_PRINT_EX:121:X509_REQ_print_ex +X509_F_X509_REQ_PRINT_FP:122:X509_REQ_print_fp +X509_F_X509_REQ_TO_X509:123:X509_REQ_to_X509 +X509_F_X509_STORE_ADD_CERT:124:X509_STORE_add_cert +X509_F_X509_STORE_ADD_CRL:125:X509_STORE_add_crl +X509_F_X509_STORE_CTX_GET1_ISSUER:146:X509_STORE_CTX_get1_issuer +X509_F_X509_STORE_CTX_INIT:143:X509_STORE_CTX_init +X509_F_X509_STORE_CTX_NEW:142:X509_STORE_CTX_new +X509_F_X509_STORE_CTX_PURPOSE_INHERIT:134:X509_STORE_CTX_purpose_inherit +X509_F_X509_TO_X509_REQ:126:X509_to_X509_REQ +X509_F_X509_TRUST_ADD:133:X509_TRUST_add +X509_F_X509_TRUST_SET:141:X509_TRUST_set +X509_F_X509_VERIFY_CERT:127:X509_verify_cert + +#Reason codes +ASN1_R_ADDING_OBJECT:171:adding object +ASN1_R_ASN1_PARSE_ERROR:203:asn1 parse error +ASN1_R_ASN1_SIG_PARSE_ERROR:204:asn1 sig parse error +ASN1_R_AUX_ERROR:100:aux error +ASN1_R_BAD_OBJECT_HEADER:102:bad object header +ASN1_R_BMPSTRING_IS_WRONG_LENGTH:214:bmpstring is wrong length +ASN1_R_BN_LIB:105:bn lib +ASN1_R_BOOLEAN_IS_WRONG_LENGTH:106:boolean is wrong length +ASN1_R_BUFFER_TOO_SMALL:107:buffer too small +ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER:108:cipher has no object identifier +ASN1_R_CONTEXT_NOT_INITIALISED:217:context not initialised +ASN1_R_DATA_IS_WRONG:109:data is wrong +ASN1_R_DECODE_ERROR:110:decode error +ASN1_R_DEPTH_EXCEEDED:174:depth exceeded +ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED:198:digest and key type not supported +ASN1_R_ENCODE_ERROR:112:encode error +ASN1_R_ERROR_GETTING_TIME:173:error getting time +ASN1_R_ERROR_LOADING_SECTION:172:error loading section +ASN1_R_ERROR_SETTING_CIPHER_PARAMS:114:error setting cipher params +ASN1_R_EXPECTING_AN_INTEGER:115:expecting an integer +ASN1_R_EXPECTING_AN_OBJECT:116:expecting an object +ASN1_R_EXPLICIT_LENGTH_MISMATCH:119:explicit length mismatch +ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED:120:explicit tag not constructed +ASN1_R_FIELD_MISSING:121:field missing +ASN1_R_FIRST_NUM_TOO_LARGE:122:first num too large +ASN1_R_HEADER_TOO_LONG:123:header too long +ASN1_R_ILLEGAL_BITSTRING_FORMAT:175:illegal bitstring format +ASN1_R_ILLEGAL_BOOLEAN:176:illegal boolean +ASN1_R_ILLEGAL_CHARACTERS:124:illegal characters +ASN1_R_ILLEGAL_FORMAT:177:illegal format +ASN1_R_ILLEGAL_HEX:178:illegal hex +ASN1_R_ILLEGAL_IMPLICIT_TAG:179:illegal implicit tag +ASN1_R_ILLEGAL_INTEGER:180:illegal integer +ASN1_R_ILLEGAL_NEGATIVE_VALUE:226:illegal negative value +ASN1_R_ILLEGAL_NESTED_TAGGING:181:illegal nested tagging +ASN1_R_ILLEGAL_NULL:125:illegal null +ASN1_R_ILLEGAL_NULL_VALUE:182:illegal null value +ASN1_R_ILLEGAL_OBJECT:183:illegal object +ASN1_R_ILLEGAL_OPTIONAL_ANY:126:illegal optional any +ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE:170:illegal options on item template +ASN1_R_ILLEGAL_PADDING:221:illegal padding +ASN1_R_ILLEGAL_TAGGED_ANY:127:illegal tagged any +ASN1_R_ILLEGAL_TIME_VALUE:184:illegal time value +ASN1_R_ILLEGAL_ZERO_CONTENT:222:illegal zero content +ASN1_R_INTEGER_NOT_ASCII_FORMAT:185:integer not ascii format +ASN1_R_INTEGER_TOO_LARGE_FOR_LONG:128:integer too large for long +ASN1_R_INVALID_BIT_STRING_BITS_LEFT:220:invalid bit string bits left +ASN1_R_INVALID_BMPSTRING_LENGTH:129:invalid bmpstring length +ASN1_R_INVALID_DIGIT:130:invalid digit +ASN1_R_INVALID_MIME_TYPE:205:invalid mime type +ASN1_R_INVALID_MODIFIER:186:invalid modifier +ASN1_R_INVALID_NUMBER:187:invalid number +ASN1_R_INVALID_OBJECT_ENCODING:216:invalid object encoding +ASN1_R_INVALID_SCRYPT_PARAMETERS:227:invalid scrypt parameters +ASN1_R_INVALID_SEPARATOR:131:invalid separator +ASN1_R_INVALID_STRING_TABLE_VALUE:218:invalid string table value +ASN1_R_INVALID_UNIVERSALSTRING_LENGTH:133:invalid universalstring length +ASN1_R_INVALID_UTF8STRING:134:invalid utf8string +ASN1_R_INVALID_VALUE:219:invalid value +ASN1_R_LIST_ERROR:188:list error +ASN1_R_MIME_NO_CONTENT_TYPE:206:mime no content type +ASN1_R_MIME_PARSE_ERROR:207:mime parse error +ASN1_R_MIME_SIG_PARSE_ERROR:208:mime sig parse error +ASN1_R_MISSING_EOC:137:missing eoc +ASN1_R_MISSING_SECOND_NUMBER:138:missing second number +ASN1_R_MISSING_VALUE:189:missing value +ASN1_R_MSTRING_NOT_UNIVERSAL:139:mstring not universal +ASN1_R_MSTRING_WRONG_TAG:140:mstring wrong tag +ASN1_R_NESTED_ASN1_STRING:197:nested asn1 string +ASN1_R_NON_HEX_CHARACTERS:141:non hex characters +ASN1_R_NOT_ASCII_FORMAT:190:not ascii format +ASN1_R_NOT_ENOUGH_DATA:142:not enough data +ASN1_R_NO_CONTENT_TYPE:209:no content type +ASN1_R_NO_MATCHING_CHOICE_TYPE:143:no matching choice type +ASN1_R_NO_MULTIPART_BODY_FAILURE:210:no multipart body failure +ASN1_R_NO_MULTIPART_BOUNDARY:211:no multipart boundary +ASN1_R_NO_SIG_CONTENT_TYPE:212:no sig content type +ASN1_R_NULL_IS_WRONG_LENGTH:144:null is wrong length +ASN1_R_OBJECT_NOT_ASCII_FORMAT:191:object not ascii format +ASN1_R_ODD_NUMBER_OF_CHARS:145:odd number of chars +ASN1_R_SECOND_NUMBER_TOO_LARGE:147:second number too large +ASN1_R_SEQUENCE_LENGTH_MISMATCH:148:sequence length mismatch +ASN1_R_SEQUENCE_NOT_CONSTRUCTED:149:sequence not constructed +ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG:192:sequence or set needs config +ASN1_R_SHORT_LINE:150:short line +ASN1_R_SIG_INVALID_MIME_TYPE:213:sig invalid mime type +ASN1_R_STREAMING_NOT_SUPPORTED:202:streaming not supported +ASN1_R_STRING_TOO_LONG:151:string too long +ASN1_R_STRING_TOO_SHORT:152:string too short +ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD:154:\ + the asn1 object identifier is not known for this md +ASN1_R_TIME_NOT_ASCII_FORMAT:193:time not ascii format +ASN1_R_TOO_LARGE:223:too large +ASN1_R_TOO_LONG:155:too long +ASN1_R_TOO_SMALL:224:too small +ASN1_R_TYPE_NOT_CONSTRUCTED:156:type not constructed +ASN1_R_TYPE_NOT_PRIMITIVE:195:type not primitive +ASN1_R_UNEXPECTED_EOC:159:unexpected eoc +ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH:215:universalstring is wrong length +ASN1_R_UNKNOWN_FORMAT:160:unknown format +ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM:161:unknown message digest algorithm +ASN1_R_UNKNOWN_OBJECT_TYPE:162:unknown object type +ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE:163:unknown public key type +ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM:199:unknown signature algorithm +ASN1_R_UNKNOWN_TAG:194:unknown tag +ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE:164:unsupported any defined by type +ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE:167:unsupported public key type +ASN1_R_UNSUPPORTED_TYPE:196:unsupported type +ASN1_R_WRONG_INTEGER_TYPE:225:wrong integer type +ASN1_R_WRONG_PUBLIC_KEY_TYPE:200:wrong public key type +ASN1_R_WRONG_TAG:168:wrong tag +ASYNC_R_FAILED_TO_SET_POOL:101:failed to set pool +ASYNC_R_FAILED_TO_SWAP_CONTEXT:102:failed to swap context +ASYNC_R_INIT_FAILED:105:init failed +ASYNC_R_INVALID_POOL_SIZE:103:invalid pool size +BIO_R_ACCEPT_ERROR:100:accept error +BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET:141:addrinfo addr is not af inet +BIO_R_AMBIGUOUS_HOST_OR_SERVICE:129:ambiguous host or service +BIO_R_BAD_FOPEN_MODE:101:bad fopen mode +BIO_R_BROKEN_PIPE:124:broken pipe +BIO_R_CONNECT_ERROR:103:connect error +BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET:107:gethostbyname addr is not af inet +BIO_R_GETSOCKNAME_ERROR:132:getsockname error +BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS:133:getsockname truncated address +BIO_R_GETTING_SOCKTYPE:134:getting socktype +BIO_R_INVALID_ARGUMENT:125:invalid argument +BIO_R_INVALID_SOCKET:135:invalid socket +BIO_R_IN_USE:123:in use +BIO_R_LENGTH_TOO_LONG:102:length too long +BIO_R_LISTEN_V6_ONLY:136:listen v6 only +BIO_R_LOOKUP_RETURNED_NOTHING:142:lookup returned nothing +BIO_R_MALFORMED_HOST_OR_SERVICE:130:malformed host or service +BIO_R_NBIO_CONNECT_ERROR:110:nbio connect error +BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED:143:\ + no accept addr or service specified +BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED:144:no hostname or service specified +BIO_R_NO_PORT_DEFINED:113:no port defined +BIO_R_NO_SUCH_FILE:128:no such file +BIO_R_NULL_PARAMETER:115:null parameter +BIO_R_UNABLE_TO_BIND_SOCKET:117:unable to bind socket +BIO_R_UNABLE_TO_CREATE_SOCKET:118:unable to create socket +BIO_R_UNABLE_TO_KEEPALIVE:137:unable to keepalive +BIO_R_UNABLE_TO_LISTEN_SOCKET:119:unable to listen socket +BIO_R_UNABLE_TO_NODELAY:138:unable to nodelay +BIO_R_UNABLE_TO_REUSEADDR:139:unable to reuseaddr +BIO_R_UNAVAILABLE_IP_FAMILY:145:unavailable ip family +BIO_R_UNINITIALIZED:120:uninitialized +BIO_R_UNKNOWN_INFO_TYPE:140:unknown info type +BIO_R_UNSUPPORTED_IP_FAMILY:146:unsupported ip family +BIO_R_UNSUPPORTED_METHOD:121:unsupported method +BIO_R_UNSUPPORTED_PROTOCOL_FAMILY:131:unsupported protocol family +BIO_R_WRITE_TO_READ_ONLY_BIO:126:write to read only BIO +BIO_R_WSASTARTUP:122:WSAStartup +BN_R_ARG2_LT_ARG3:100:arg2 lt arg3 +BN_R_BAD_RECIPROCAL:101:bad reciprocal +BN_R_BIGNUM_TOO_LONG:114:bignum too long +BN_R_BITS_TOO_SMALL:118:bits too small +BN_R_CALLED_WITH_EVEN_MODULUS:102:called with even modulus +BN_R_DIV_BY_ZERO:103:div by zero +BN_R_ENCODING_ERROR:104:encoding error +BN_R_EXPAND_ON_STATIC_BIGNUM_DATA:105:expand on static bignum data +BN_R_INPUT_NOT_REDUCED:110:input not reduced +BN_R_INVALID_LENGTH:106:invalid length +BN_R_INVALID_RANGE:115:invalid range +BN_R_INVALID_SHIFT:119:invalid shift +BN_R_NOT_A_SQUARE:111:not a square +BN_R_NOT_INITIALIZED:107:not initialized +BN_R_NO_INVERSE:108:no inverse +BN_R_NO_SOLUTION:116:no solution +BN_R_PRIVATE_KEY_TOO_LARGE:117:private key too large +BN_R_P_IS_NOT_PRIME:112:p is not prime +BN_R_TOO_MANY_ITERATIONS:113:too many iterations +BN_R_TOO_MANY_TEMPORARY_VARIABLES:109:too many temporary variables +CMS_R_ADD_SIGNER_ERROR:99:add signer error +CMS_R_CERTIFICATE_ALREADY_PRESENT:175:certificate already present +CMS_R_CERTIFICATE_HAS_NO_KEYID:160:certificate has no keyid +CMS_R_CERTIFICATE_VERIFY_ERROR:100:certificate verify error +CMS_R_CIPHER_INITIALISATION_ERROR:101:cipher initialisation error +CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR:102:\ + cipher parameter initialisation error +CMS_R_CMS_DATAFINAL_ERROR:103:cms datafinal error +CMS_R_CMS_LIB:104:cms lib +CMS_R_CONTENTIDENTIFIER_MISMATCH:170:contentidentifier mismatch +CMS_R_CONTENT_NOT_FOUND:105:content not found +CMS_R_CONTENT_TYPE_MISMATCH:171:content type mismatch +CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA:106:content type not compressed data +CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA:107:content type not enveloped data +CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA:108:content type not signed data +CMS_R_CONTENT_VERIFY_ERROR:109:content verify error +CMS_R_CTRL_ERROR:110:ctrl error +CMS_R_CTRL_FAILURE:111:ctrl failure +CMS_R_DECRYPT_ERROR:112:decrypt error +CMS_R_ERROR_GETTING_PUBLIC_KEY:113:error getting public key +CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE:114:\ + error reading messagedigest attribute +CMS_R_ERROR_SETTING_KEY:115:error setting key +CMS_R_ERROR_SETTING_RECIPIENTINFO:116:error setting recipientinfo +CMS_R_INVALID_ENCRYPTED_KEY_LENGTH:117:invalid encrypted key length +CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER:176:invalid key encryption parameter +CMS_R_INVALID_KEY_LENGTH:118:invalid key length +CMS_R_MD_BIO_INIT_ERROR:119:md bio init error +CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH:120:\ + messagedigest attribute wrong length +CMS_R_MESSAGEDIGEST_WRONG_LENGTH:121:messagedigest wrong length +CMS_R_MSGSIGDIGEST_ERROR:172:msgsigdigest error +CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE:162:msgsigdigest verification failure +CMS_R_MSGSIGDIGEST_WRONG_LENGTH:163:msgsigdigest wrong length +CMS_R_NEED_ONE_SIGNER:164:need one signer +CMS_R_NOT_A_SIGNED_RECEIPT:165:not a signed receipt +CMS_R_NOT_ENCRYPTED_DATA:122:not encrypted data +CMS_R_NOT_KEK:123:not kek +CMS_R_NOT_KEY_AGREEMENT:181:not key agreement +CMS_R_NOT_KEY_TRANSPORT:124:not key transport +CMS_R_NOT_PWRI:177:not pwri +CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE:125:not supported for this key type +CMS_R_NO_CIPHER:126:no cipher +CMS_R_NO_CONTENT:127:no content +CMS_R_NO_CONTENT_TYPE:173:no content type +CMS_R_NO_DEFAULT_DIGEST:128:no default digest +CMS_R_NO_DIGEST_SET:129:no digest set +CMS_R_NO_KEY:130:no key +CMS_R_NO_KEY_OR_CERT:174:no key or cert +CMS_R_NO_MATCHING_DIGEST:131:no matching digest +CMS_R_NO_MATCHING_RECIPIENT:132:no matching recipient +CMS_R_NO_MATCHING_SIGNATURE:166:no matching signature +CMS_R_NO_MSGSIGDIGEST:167:no msgsigdigest +CMS_R_NO_PASSWORD:178:no password +CMS_R_NO_PRIVATE_KEY:133:no private key +CMS_R_NO_PUBLIC_KEY:134:no public key +CMS_R_NO_RECEIPT_REQUEST:168:no receipt request +CMS_R_NO_SIGNERS:135:no signers +CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:136:\ + private key does not match certificate +CMS_R_RECEIPT_DECODE_ERROR:169:receipt decode error +CMS_R_RECIPIENT_ERROR:137:recipient error +CMS_R_SIGNER_CERTIFICATE_NOT_FOUND:138:signer certificate not found +CMS_R_SIGNFINAL_ERROR:139:signfinal error +CMS_R_SMIME_TEXT_ERROR:140:smime text error +CMS_R_STORE_INIT_ERROR:141:store init error +CMS_R_TYPE_NOT_COMPRESSED_DATA:142:type not compressed data +CMS_R_TYPE_NOT_DATA:143:type not data +CMS_R_TYPE_NOT_DIGESTED_DATA:144:type not digested data +CMS_R_TYPE_NOT_ENCRYPTED_DATA:145:type not encrypted data +CMS_R_TYPE_NOT_ENVELOPED_DATA:146:type not enveloped data +CMS_R_UNABLE_TO_FINALIZE_CONTEXT:147:unable to finalize context +CMS_R_UNKNOWN_CIPHER:148:unknown cipher +CMS_R_UNKNOWN_DIGEST_ALGORITHM:149:unknown digest algorithm +CMS_R_UNKNOWN_ID:150:unknown id +CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM:151:unsupported compression algorithm +CMS_R_UNSUPPORTED_CONTENT_TYPE:152:unsupported content type +CMS_R_UNSUPPORTED_KEK_ALGORITHM:153:unsupported kek algorithm +CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM:179:\ + unsupported key encryption algorithm +CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE:155:unsupported recipientinfo type +CMS_R_UNSUPPORTED_RECIPIENT_TYPE:154:unsupported recipient type +CMS_R_UNSUPPORTED_TYPE:156:unsupported type +CMS_R_UNWRAP_ERROR:157:unwrap error +CMS_R_UNWRAP_FAILURE:180:unwrap failure +CMS_R_VERIFICATION_FAILURE:158:verification failure +CMS_R_WRAP_ERROR:159:wrap error +COMP_R_ZLIB_DEFLATE_ERROR:99:zlib deflate error +COMP_R_ZLIB_INFLATE_ERROR:100:zlib inflate error +COMP_R_ZLIB_NOT_SUPPORTED:101:zlib not supported +CONF_R_ERROR_LOADING_DSO:110:error loading dso +CONF_R_LIST_CANNOT_BE_NULL:115:list cannot be null +CONF_R_MISSING_CLOSE_SQUARE_BRACKET:100:missing close square bracket +CONF_R_MISSING_EQUAL_SIGN:101:missing equal sign +CONF_R_MISSING_INIT_FUNCTION:112:missing init function +CONF_R_MODULE_INITIALIZATION_ERROR:109:module initialization error +CONF_R_NO_CLOSE_BRACE:102:no close brace +CONF_R_NO_CONF:105:no conf +CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE:106:no conf or environment variable +CONF_R_NO_SECTION:107:no section +CONF_R_NO_SUCH_FILE:114:no such file +CONF_R_NO_VALUE:108:no value +CONF_R_UNABLE_TO_CREATE_NEW_SECTION:103:unable to create new section +CONF_R_UNKNOWN_MODULE_NAME:113:unknown module name +CONF_R_VARIABLE_EXPANSION_TOO_LONG:116:variable expansion too long +CONF_R_VARIABLE_HAS_NO_VALUE:104:variable has no value +CRYPTO_R_FIPS_MODE_NOT_SUPPORTED:101:fips mode not supported +CRYPTO_R_ILLEGAL_HEX_DIGIT:102:illegal hex digit +CRYPTO_R_ODD_NUMBER_OF_DIGITS:103:odd number of digits +CT_R_BASE64_DECODE_ERROR:108:base64 decode error +CT_R_INVALID_LOG_ID_LENGTH:100:invalid log id length +CT_R_LOG_CONF_INVALID:109:log conf invalid +CT_R_LOG_CONF_INVALID_KEY:110:log conf invalid key +CT_R_LOG_CONF_MISSING_DESCRIPTION:111:log conf missing description +CT_R_LOG_CONF_MISSING_KEY:112:log conf missing key +CT_R_LOG_KEY_INVALID:113:log key invalid +CT_R_SCT_FUTURE_TIMESTAMP:116:sct future timestamp +CT_R_SCT_INVALID:104:sct invalid +CT_R_SCT_INVALID_SIGNATURE:107:sct invalid signature +CT_R_SCT_LIST_INVALID:105:sct list invalid +CT_R_SCT_LOG_ID_MISMATCH:114:sct log id mismatch +CT_R_SCT_NOT_SET:106:sct not set +CT_R_SCT_UNSUPPORTED_VERSION:115:sct unsupported version +CT_R_UNRECOGNIZED_SIGNATURE_NID:101:unrecognized signature nid +CT_R_UNSUPPORTED_ENTRY_TYPE:102:unsupported entry type +CT_R_UNSUPPORTED_VERSION:103:unsupported version +DH_R_BAD_GENERATOR:101:bad generator +DH_R_BN_DECODE_ERROR:109:bn decode error +DH_R_BN_ERROR:106:bn error +DH_R_CHECK_INVALID_J_VALUE:115:check invalid j value +DH_R_CHECK_INVALID_Q_VALUE:116:check invalid q value +DH_R_CHECK_PUBKEY_INVALID:122:check pubkey invalid +DH_R_CHECK_PUBKEY_TOO_LARGE:123:check pubkey too large +DH_R_CHECK_PUBKEY_TOO_SMALL:124:check pubkey too small +DH_R_CHECK_P_NOT_PRIME:117:check p not prime +DH_R_CHECK_P_NOT_SAFE_PRIME:118:check p not safe prime +DH_R_CHECK_Q_NOT_PRIME:119:check q not prime +DH_R_DECODE_ERROR:104:decode error +DH_R_INVALID_PARAMETER_NAME:110:invalid parameter name +DH_R_INVALID_PARAMETER_NID:114:invalid parameter nid +DH_R_INVALID_PUBKEY:102:invalid public key +DH_R_KDF_PARAMETER_ERROR:112:kdf parameter error +DH_R_KEYS_NOT_SET:108:keys not set +DH_R_MISSING_PUBKEY:125:missing pubkey +DH_R_MODULUS_TOO_LARGE:103:modulus too large +DH_R_NOT_SUITABLE_GENERATOR:120:not suitable generator +DH_R_NO_PARAMETERS_SET:107:no parameters set +DH_R_NO_PRIVATE_VALUE:100:no private value +DH_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error +DH_R_PEER_KEY_ERROR:111:peer key error +DH_R_SHARED_INFO_ERROR:113:shared info error +DH_R_UNABLE_TO_CHECK_GENERATOR:121:unable to check generator +DSA_R_BAD_Q_VALUE:102:bad q value +DSA_R_BN_DECODE_ERROR:108:bn decode error +DSA_R_BN_ERROR:109:bn error +DSA_R_DECODE_ERROR:104:decode error +DSA_R_INVALID_DIGEST_TYPE:106:invalid digest type +DSA_R_INVALID_PARAMETERS:112:invalid parameters +DSA_R_MISSING_PARAMETERS:101:missing parameters +DSA_R_MODULUS_TOO_LARGE:103:modulus too large +DSA_R_NO_PARAMETERS_SET:107:no parameters set +DSA_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error +DSA_R_Q_NOT_PRIME:113:q not prime +DSA_R_SEED_LEN_SMALL:110:seed_len is less than the length of q +DSO_R_CTRL_FAILED:100:control command failed +DSO_R_DSO_ALREADY_LOADED:110:dso already loaded +DSO_R_EMPTY_FILE_STRUCTURE:113:empty file structure +DSO_R_FAILURE:114:failure +DSO_R_FILENAME_TOO_BIG:101:filename too big +DSO_R_FINISH_FAILED:102:cleanup method function failed +DSO_R_INCORRECT_FILE_SYNTAX:115:incorrect file syntax +DSO_R_LOAD_FAILED:103:could not load the shared library +DSO_R_NAME_TRANSLATION_FAILED:109:name translation failed +DSO_R_NO_FILENAME:111:no filename +DSO_R_NULL_HANDLE:104:a null shared library handle was used +DSO_R_SET_FILENAME_FAILED:112:set filename failed +DSO_R_STACK_ERROR:105:the meth_data stack is corrupt +DSO_R_SYM_FAILURE:106:could not bind to the requested symbol name +DSO_R_UNLOAD_FAILED:107:could not unload the shared library +DSO_R_UNSUPPORTED:108:functionality not supported +EC_R_ASN1_ERROR:115:asn1 error +EC_R_BAD_SIGNATURE:156:bad signature +EC_R_BIGNUM_OUT_OF_RANGE:144:bignum out of range +EC_R_BUFFER_TOO_SMALL:100:buffer too small +EC_R_COORDINATES_OUT_OF_RANGE:146:coordinates out of range +EC_R_CURVE_DOES_NOT_SUPPORT_ECDH:160:curve does not support ecdh +EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING:159:curve does not support signing +EC_R_D2I_ECPKPARAMETERS_FAILURE:117:d2i ecpkparameters failure +EC_R_DECODE_ERROR:142:decode error +EC_R_DISCRIMINANT_IS_ZERO:118:discriminant is zero +EC_R_EC_GROUP_NEW_BY_NAME_FAILURE:119:ec group new by name failure +EC_R_FIELD_TOO_LARGE:143:field too large +EC_R_GF2M_NOT_SUPPORTED:147:gf2m not supported +EC_R_GROUP2PKPARAMETERS_FAILURE:120:group2pkparameters failure +EC_R_I2D_ECPKPARAMETERS_FAILURE:121:i2d ecpkparameters failure +EC_R_INCOMPATIBLE_OBJECTS:101:incompatible objects +EC_R_INVALID_ARGUMENT:112:invalid argument +EC_R_INVALID_COMPRESSED_POINT:110:invalid compressed point +EC_R_INVALID_COMPRESSION_BIT:109:invalid compression bit +EC_R_INVALID_CURVE:141:invalid curve +EC_R_INVALID_DIGEST:151:invalid digest +EC_R_INVALID_DIGEST_TYPE:138:invalid digest type +EC_R_INVALID_ENCODING:102:invalid encoding +EC_R_INVALID_FIELD:103:invalid field +EC_R_INVALID_FORM:104:invalid form +EC_R_INVALID_GROUP_ORDER:122:invalid group order +EC_R_INVALID_KEY:116:invalid key +EC_R_INVALID_OUTPUT_LENGTH:161:invalid output length +EC_R_INVALID_PEER_KEY:133:invalid peer key +EC_R_INVALID_PENTANOMIAL_BASIS:132:invalid pentanomial basis +EC_R_INVALID_PRIVATE_KEY:123:invalid private key +EC_R_INVALID_TRINOMIAL_BASIS:137:invalid trinomial basis +EC_R_KDF_PARAMETER_ERROR:148:kdf parameter error +EC_R_KEYS_NOT_SET:140:keys not set +EC_R_MISSING_PARAMETERS:124:missing parameters +EC_R_MISSING_PRIVATE_KEY:125:missing private key +EC_R_NEED_NEW_SETUP_VALUES:157:need new setup values +EC_R_NOT_A_NIST_PRIME:135:not a NIST prime +EC_R_NOT_IMPLEMENTED:126:not implemented +EC_R_NOT_INITIALIZED:111:not initialized +EC_R_NO_PARAMETERS_SET:139:no parameters set +EC_R_NO_PRIVATE_VALUE:154:no private value +EC_R_OPERATION_NOT_SUPPORTED:152:operation not supported +EC_R_PASSED_NULL_PARAMETER:134:passed null parameter +EC_R_PEER_KEY_ERROR:149:peer key error +EC_R_PKPARAMETERS2GROUP_FAILURE:127:pkparameters2group failure +EC_R_POINT_ARITHMETIC_FAILURE:155:point arithmetic failure +EC_R_POINT_AT_INFINITY:106:point at infinity +EC_R_POINT_IS_NOT_ON_CURVE:107:point is not on curve +EC_R_RANDOM_NUMBER_GENERATION_FAILED:158:random number generation failed +EC_R_SHARED_INFO_ERROR:150:shared info error +EC_R_SLOT_FULL:108:slot full +EC_R_UNDEFINED_GENERATOR:113:undefined generator +EC_R_UNDEFINED_ORDER:128:undefined order +EC_R_UNKNOWN_GROUP:129:unknown group +EC_R_UNKNOWN_ORDER:114:unknown order +EC_R_UNSUPPORTED_FIELD:131:unsupported field +EC_R_WRONG_CURVE_PARAMETERS:145:wrong curve parameters +EC_R_WRONG_ORDER:130:wrong order +ENGINE_R_ALREADY_LOADED:100:already loaded +ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER:133:argument is not a number +ENGINE_R_CMD_NOT_EXECUTABLE:134:cmd not executable +ENGINE_R_COMMAND_TAKES_INPUT:135:command takes input +ENGINE_R_COMMAND_TAKES_NO_INPUT:136:command takes no input +ENGINE_R_CONFLICTING_ENGINE_ID:103:conflicting engine id +ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED:119:ctrl command not implemented +ENGINE_R_DSO_FAILURE:104:DSO failure +ENGINE_R_DSO_NOT_FOUND:132:dso not found +ENGINE_R_ENGINES_SECTION_ERROR:148:engines section error +ENGINE_R_ENGINE_CONFIGURATION_ERROR:102:engine configuration error +ENGINE_R_ENGINE_IS_NOT_IN_LIST:105:engine is not in the list +ENGINE_R_ENGINE_SECTION_ERROR:149:engine section error +ENGINE_R_FAILED_LOADING_PRIVATE_KEY:128:failed loading private key +ENGINE_R_FAILED_LOADING_PUBLIC_KEY:129:failed loading public key +ENGINE_R_FINISH_FAILED:106:finish failed +ENGINE_R_ID_OR_NAME_MISSING:108:'id' or 'name' missing +ENGINE_R_INIT_FAILED:109:init failed +ENGINE_R_INTERNAL_LIST_ERROR:110:internal list error +ENGINE_R_INVALID_ARGUMENT:143:invalid argument +ENGINE_R_INVALID_CMD_NAME:137:invalid cmd name +ENGINE_R_INVALID_CMD_NUMBER:138:invalid cmd number +ENGINE_R_INVALID_INIT_VALUE:151:invalid init value +ENGINE_R_INVALID_STRING:150:invalid string +ENGINE_R_NOT_INITIALISED:117:not initialised +ENGINE_R_NOT_LOADED:112:not loaded +ENGINE_R_NO_CONTROL_FUNCTION:120:no control function +ENGINE_R_NO_INDEX:144:no index +ENGINE_R_NO_LOAD_FUNCTION:125:no load function +ENGINE_R_NO_REFERENCE:130:no reference +ENGINE_R_NO_SUCH_ENGINE:116:no such engine +ENGINE_R_UNIMPLEMENTED_CIPHER:146:unimplemented cipher +ENGINE_R_UNIMPLEMENTED_DIGEST:147:unimplemented digest +ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD:101:unimplemented public key method +ENGINE_R_VERSION_INCOMPATIBILITY:145:version incompatibility +EVP_R_AES_KEY_SETUP_FAILED:143:aes key setup failed +EVP_R_ARIA_KEY_SETUP_FAILED:176:aria key setup failed +EVP_R_BAD_DECRYPT:100:bad decrypt +EVP_R_BUFFER_TOO_SMALL:155:buffer too small +EVP_R_CAMELLIA_KEY_SETUP_FAILED:157:camellia key setup failed +EVP_R_CIPHER_PARAMETER_ERROR:122:cipher parameter error +EVP_R_COMMAND_NOT_SUPPORTED:147:command not supported +EVP_R_COPY_ERROR:173:copy error +EVP_R_CTRL_NOT_IMPLEMENTED:132:ctrl not implemented +EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED:133:ctrl operation not implemented +EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH:138:data not multiple of block length +EVP_R_DECODE_ERROR:114:decode error +EVP_R_DIFFERENT_KEY_TYPES:101:different key types +EVP_R_DIFFERENT_PARAMETERS:153:different parameters +EVP_R_ERROR_LOADING_SECTION:165:error loading section +EVP_R_ERROR_SETTING_FIPS_MODE:166:error setting fips mode +EVP_R_EXPECTING_AN_HMAC_KEY:174:expecting an hmac key +EVP_R_EXPECTING_AN_RSA_KEY:127:expecting an rsa key +EVP_R_EXPECTING_A_DH_KEY:128:expecting a dh key +EVP_R_EXPECTING_A_DSA_KEY:129:expecting a dsa key +EVP_R_EXPECTING_A_EC_KEY:142:expecting a ec key +EVP_R_EXPECTING_A_POLY1305_KEY:164:expecting a poly1305 key +EVP_R_EXPECTING_A_SIPHASH_KEY:175:expecting a siphash key +EVP_R_FIPS_MODE_NOT_SUPPORTED:167:fips mode not supported +EVP_R_ILLEGAL_SCRYPT_PARAMETERS:171:illegal scrypt parameters +EVP_R_INITIALIZATION_ERROR:134:initialization error +EVP_R_INPUT_NOT_INITIALIZED:111:input not initialized +EVP_R_INVALID_DIGEST:152:invalid digest +EVP_R_INVALID_FIPS_MODE:168:invalid fips mode +EVP_R_INVALID_KEY:163:invalid key +EVP_R_INVALID_KEY_LENGTH:130:invalid key length +EVP_R_INVALID_OPERATION:148:invalid operation +EVP_R_KEYGEN_FAILURE:120:keygen failure +EVP_R_MEMORY_LIMIT_EXCEEDED:172:memory limit exceeded +EVP_R_MESSAGE_DIGEST_IS_NULL:159:message digest is null +EVP_R_METHOD_NOT_SUPPORTED:144:method not supported +EVP_R_MISSING_PARAMETERS:103:missing parameters +EVP_R_NOT_XOF_OR_INVALID_LENGTH:178:not XOF or invalid length +EVP_R_NO_CIPHER_SET:131:no cipher set +EVP_R_NO_DEFAULT_DIGEST:158:no default digest +EVP_R_NO_DIGEST_SET:139:no digest set +EVP_R_NO_KEY_SET:154:no key set +EVP_R_NO_OPERATION_SET:149:no operation set +EVP_R_ONLY_ONESHOT_SUPPORTED:177:only oneshot supported +EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE:150:\ + operation not supported for this keytype +EVP_R_OPERATON_NOT_INITIALIZED:151:operaton not initialized +EVP_R_PARTIALLY_OVERLAPPING:162:partially overlapping buffers +EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED:179:\ + pkey application asn1 method already registered +EVP_R_PRIVATE_KEY_DECODE_ERROR:145:private key decode error +EVP_R_PRIVATE_KEY_ENCODE_ERROR:146:private key encode error +EVP_R_PUBLIC_KEY_NOT_RSA:106:public key not rsa +EVP_R_UNKNOWN_CIPHER:160:unknown cipher +EVP_R_UNKNOWN_DIGEST:161:unknown digest +EVP_R_UNKNOWN_OPTION:169:unknown option +EVP_R_UNKNOWN_PBE_ALGORITHM:121:unknown pbe algorithm +EVP_R_UNSUPPORTED_ALGORITHM:156:unsupported algorithm +EVP_R_UNSUPPORTED_CIPHER:107:unsupported cipher +EVP_R_UNSUPPORTED_KEYLENGTH:123:unsupported keylength +EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION:124:\ + unsupported key derivation function +EVP_R_UNSUPPORTED_KEY_SIZE:108:unsupported key size +EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS:135:unsupported number of rounds +EVP_R_UNSUPPORTED_PRF:125:unsupported prf +EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM:118:unsupported private key algorithm +EVP_R_UNSUPPORTED_SALT_TYPE:126:unsupported salt type +EVP_R_WRAP_MODE_NOT_ALLOWED:170:wrap mode not allowed +EVP_R_WRONG_FINAL_BLOCK_LENGTH:109:wrong final block length +KDF_R_INVALID_DIGEST:100:invalid digest +KDF_R_MISSING_ITERATION_COUNT:109:missing iteration count +KDF_R_MISSING_KEY:104:missing key +KDF_R_MISSING_MESSAGE_DIGEST:105:missing message digest +KDF_R_MISSING_PARAMETER:101:missing parameter +KDF_R_MISSING_PASS:110:missing pass +KDF_R_MISSING_SALT:111:missing salt +KDF_R_MISSING_SECRET:107:missing secret +KDF_R_MISSING_SEED:106:missing seed +KDF_R_UNKNOWN_PARAMETER_TYPE:103:unknown parameter type +KDF_R_VALUE_ERROR:108:value error +KDF_R_VALUE_MISSING:102:value missing +OBJ_R_OID_EXISTS:102:oid exists +OBJ_R_UNKNOWN_NID:101:unknown nid +OCSP_R_CERTIFICATE_VERIFY_ERROR:101:certificate verify error +OCSP_R_DIGEST_ERR:102:digest err +OCSP_R_ERROR_IN_NEXTUPDATE_FIELD:122:error in nextupdate field +OCSP_R_ERROR_IN_THISUPDATE_FIELD:123:error in thisupdate field +OCSP_R_ERROR_PARSING_URL:121:error parsing url +OCSP_R_MISSING_OCSPSIGNING_USAGE:103:missing ocspsigning usage +OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE:124:nextupdate before thisupdate +OCSP_R_NOT_BASIC_RESPONSE:104:not basic response +OCSP_R_NO_CERTIFICATES_IN_CHAIN:105:no certificates in chain +OCSP_R_NO_RESPONSE_DATA:108:no response data +OCSP_R_NO_REVOKED_TIME:109:no revoked time +OCSP_R_NO_SIGNER_KEY:130:no signer key +OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:110:\ + private key does not match certificate +OCSP_R_REQUEST_NOT_SIGNED:128:request not signed +OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA:111:\ + response contains no revocation data +OCSP_R_ROOT_CA_NOT_TRUSTED:112:root ca not trusted +OCSP_R_SERVER_RESPONSE_ERROR:114:server response error +OCSP_R_SERVER_RESPONSE_PARSE_ERROR:115:server response parse error +OCSP_R_SIGNATURE_FAILURE:117:signature failure +OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND:118:signer certificate not found +OCSP_R_STATUS_EXPIRED:125:status expired +OCSP_R_STATUS_NOT_YET_VALID:126:status not yet valid +OCSP_R_STATUS_TOO_OLD:127:status too old +OCSP_R_UNKNOWN_MESSAGE_DIGEST:119:unknown message digest +OCSP_R_UNKNOWN_NID:120:unknown nid +OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE:129:unsupported requestorname type +OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE:107:ambiguous content type +OSSL_STORE_R_BAD_PASSWORD_READ:115:bad password read +OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC:113:error verifying pkcs12 mac +OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST:121:\ + fingerprint size does not match digest +OSSL_STORE_R_INVALID_SCHEME:106:invalid scheme +OSSL_STORE_R_IS_NOT_A:112:is not a +OSSL_STORE_R_LOADER_INCOMPLETE:116:loader incomplete +OSSL_STORE_R_LOADING_STARTED:117:loading started +OSSL_STORE_R_NOT_A_CERTIFICATE:100:not a certificate +OSSL_STORE_R_NOT_A_CRL:101:not a crl +OSSL_STORE_R_NOT_A_KEY:102:not a key +OSSL_STORE_R_NOT_A_NAME:103:not a name +OSSL_STORE_R_NOT_PARAMETERS:104:not parameters +OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR:114:passphrase callback error +OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE:108:path must be absolute +OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES:119:\ + search only supported for directories +OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED:109:\ + ui process interrupted or cancelled +OSSL_STORE_R_UNREGISTERED_SCHEME:105:unregistered scheme +OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE:110:unsupported content type +OSSL_STORE_R_UNSUPPORTED_OPERATION:118:unsupported operation +OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE:120:unsupported search type +OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED:111:uri authority unsupported +PEM_R_BAD_BASE64_DECODE:100:bad base64 decode +PEM_R_BAD_DECRYPT:101:bad decrypt +PEM_R_BAD_END_LINE:102:bad end line +PEM_R_BAD_IV_CHARS:103:bad iv chars +PEM_R_BAD_MAGIC_NUMBER:116:bad magic number +PEM_R_BAD_PASSWORD_READ:104:bad password read +PEM_R_BAD_VERSION_NUMBER:117:bad version number +PEM_R_BIO_WRITE_FAILURE:118:bio write failure +PEM_R_CIPHER_IS_NULL:127:cipher is null +PEM_R_ERROR_CONVERTING_PRIVATE_KEY:115:error converting private key +PEM_R_EXPECTING_PRIVATE_KEY_BLOB:119:expecting private key blob +PEM_R_EXPECTING_PUBLIC_KEY_BLOB:120:expecting public key blob +PEM_R_HEADER_TOO_LONG:128:header too long +PEM_R_INCONSISTENT_HEADER:121:inconsistent header +PEM_R_KEYBLOB_HEADER_PARSE_ERROR:122:keyblob header parse error +PEM_R_KEYBLOB_TOO_SHORT:123:keyblob too short +PEM_R_MISSING_DEK_IV:129:missing dek iv +PEM_R_NOT_DEK_INFO:105:not dek info +PEM_R_NOT_ENCRYPTED:106:not encrypted +PEM_R_NOT_PROC_TYPE:107:not proc type +PEM_R_NO_START_LINE:108:no start line +PEM_R_PROBLEMS_GETTING_PASSWORD:109:problems getting password +PEM_R_PVK_DATA_TOO_SHORT:124:pvk data too short +PEM_R_PVK_TOO_SHORT:125:pvk too short +PEM_R_READ_KEY:111:read key +PEM_R_SHORT_HEADER:112:short header +PEM_R_UNEXPECTED_DEK_IV:130:unexpected dek iv +PEM_R_UNSUPPORTED_CIPHER:113:unsupported cipher +PEM_R_UNSUPPORTED_ENCRYPTION:114:unsupported encryption +PEM_R_UNSUPPORTED_KEY_COMPONENTS:126:unsupported key components +PKCS12_R_CANT_PACK_STRUCTURE:100:cant pack structure +PKCS12_R_CONTENT_TYPE_NOT_DATA:121:content type not data +PKCS12_R_DECODE_ERROR:101:decode error +PKCS12_R_ENCODE_ERROR:102:encode error +PKCS12_R_ENCRYPT_ERROR:103:encrypt error +PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE:120:error setting encrypted data type +PKCS12_R_INVALID_NULL_ARGUMENT:104:invalid null argument +PKCS12_R_INVALID_NULL_PKCS12_POINTER:105:invalid null pkcs12 pointer +PKCS12_R_IV_GEN_ERROR:106:iv gen error +PKCS12_R_KEY_GEN_ERROR:107:key gen error +PKCS12_R_MAC_ABSENT:108:mac absent +PKCS12_R_MAC_GENERATION_ERROR:109:mac generation error +PKCS12_R_MAC_SETUP_ERROR:110:mac setup error +PKCS12_R_MAC_STRING_SET_ERROR:111:mac string set error +PKCS12_R_MAC_VERIFY_FAILURE:113:mac verify failure +PKCS12_R_PARSE_ERROR:114:parse error +PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR:115:pkcs12 algor cipherinit error +PKCS12_R_PKCS12_CIPHERFINAL_ERROR:116:pkcs12 cipherfinal error +PKCS12_R_PKCS12_PBE_CRYPT_ERROR:117:pkcs12 pbe crypt error +PKCS12_R_UNKNOWN_DIGEST_ALGORITHM:118:unknown digest algorithm +PKCS12_R_UNSUPPORTED_PKCS12_MODE:119:unsupported pkcs12 mode +PKCS7_R_CERTIFICATE_VERIFY_ERROR:117:certificate verify error +PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER:144:cipher has no object identifier +PKCS7_R_CIPHER_NOT_INITIALIZED:116:cipher not initialized +PKCS7_R_CONTENT_AND_DATA_PRESENT:118:content and data present +PKCS7_R_CTRL_ERROR:152:ctrl error +PKCS7_R_DECRYPT_ERROR:119:decrypt error +PKCS7_R_DIGEST_FAILURE:101:digest failure +PKCS7_R_ENCRYPTION_CTRL_FAILURE:149:encryption ctrl failure +PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE:150:\ + encryption not supported for this key type +PKCS7_R_ERROR_ADDING_RECIPIENT:120:error adding recipient +PKCS7_R_ERROR_SETTING_CIPHER:121:error setting cipher +PKCS7_R_INVALID_NULL_POINTER:143:invalid null pointer +PKCS7_R_INVALID_SIGNED_DATA_TYPE:155:invalid signed data type +PKCS7_R_NO_CONTENT:122:no content +PKCS7_R_NO_DEFAULT_DIGEST:151:no default digest +PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND:154:no matching digest type found +PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE:115:no recipient matches certificate +PKCS7_R_NO_SIGNATURES_ON_DATA:123:no signatures on data +PKCS7_R_NO_SIGNERS:142:no signers +PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE:104:\ + operation not supported on this type +PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR:124:pkcs7 add signature error +PKCS7_R_PKCS7_ADD_SIGNER_ERROR:153:pkcs7 add signer error +PKCS7_R_PKCS7_DATASIGN:145:pkcs7 datasign +PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:127:\ + private key does not match certificate +PKCS7_R_SIGNATURE_FAILURE:105:signature failure +PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND:128:signer certificate not found +PKCS7_R_SIGNING_CTRL_FAILURE:147:signing ctrl failure +PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE:148:\ + signing not supported for this key type +PKCS7_R_SMIME_TEXT_ERROR:129:smime text error +PKCS7_R_UNABLE_TO_FIND_CERTIFICATE:106:unable to find certificate +PKCS7_R_UNABLE_TO_FIND_MEM_BIO:107:unable to find mem bio +PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST:108:unable to find message digest +PKCS7_R_UNKNOWN_DIGEST_TYPE:109:unknown digest type +PKCS7_R_UNKNOWN_OPERATION:110:unknown operation +PKCS7_R_UNSUPPORTED_CIPHER_TYPE:111:unsupported cipher type +PKCS7_R_UNSUPPORTED_CONTENT_TYPE:112:unsupported content type +PKCS7_R_WRONG_CONTENT_TYPE:113:wrong content type +PKCS7_R_WRONG_PKCS7_TYPE:114:wrong pkcs7 type +RAND_R_ADDITIONAL_INPUT_TOO_LONG:102:additional input too long +RAND_R_ALREADY_INSTANTIATED:103:already instantiated +RAND_R_ARGUMENT_OUT_OF_RANGE:105:argument out of range +RAND_R_CANNOT_OPEN_FILE:121:Cannot open file +RAND_R_DRBG_ALREADY_INITIALIZED:129:drbg already initialized +RAND_R_DRBG_NOT_INITIALISED:104:drbg not initialised +RAND_R_ENTROPY_INPUT_TOO_LONG:106:entropy input too long +RAND_R_ENTROPY_OUT_OF_RANGE:124:entropy out of range +RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED:127:error entropy pool was ignored +RAND_R_ERROR_INITIALISING_DRBG:107:error initialising drbg +RAND_R_ERROR_INSTANTIATING_DRBG:108:error instantiating drbg +RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT:109:error retrieving additional input +RAND_R_ERROR_RETRIEVING_ENTROPY:110:error retrieving entropy +RAND_R_ERROR_RETRIEVING_NONCE:111:error retrieving nonce +RAND_R_FAILED_TO_CREATE_LOCK:126:failed to create lock +RAND_R_FUNC_NOT_IMPLEMENTED:101:Function not implemented +RAND_R_FWRITE_ERROR:123:Error writing file +RAND_R_GENERATE_ERROR:112:generate error +RAND_R_INTERNAL_ERROR:113:internal error +RAND_R_IN_ERROR_STATE:114:in error state +RAND_R_NOT_A_REGULAR_FILE:122:Not a regular file +RAND_R_NOT_INSTANTIATED:115:not instantiated +RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED:128:no drbg implementation selected +RAND_R_PARENT_LOCKING_NOT_ENABLED:130:parent locking not enabled +RAND_R_PERSONALISATION_STRING_TOO_LONG:116:personalisation string too long +RAND_R_PRNG_NOT_SEEDED:100:PRNG not seeded +RAND_R_RANDOM_POOL_OVERFLOW:125:random pool overflow +RAND_R_REQUEST_TOO_LARGE_FOR_DRBG:117:request too large for drbg +RAND_R_RESEED_ERROR:118:reseed error +RAND_R_SELFTEST_FAILURE:119:selftest failure +RAND_R_UNSUPPORTED_DRBG_TYPE:120:unsupported drbg type +RSA_R_ALGORITHM_MISMATCH:100:algorithm mismatch +RSA_R_BAD_E_VALUE:101:bad e value +RSA_R_BAD_FIXED_HEADER_DECRYPT:102:bad fixed header decrypt +RSA_R_BAD_PAD_BYTE_COUNT:103:bad pad byte count +RSA_R_BAD_SIGNATURE:104:bad signature +RSA_R_BLOCK_TYPE_IS_NOT_01:106:block type is not 01 +RSA_R_BLOCK_TYPE_IS_NOT_02:107:block type is not 02 +RSA_R_DATA_GREATER_THAN_MOD_LEN:108:data greater than mod len +RSA_R_DATA_TOO_LARGE:109:data too large +RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE:110:data too large for key size +RSA_R_DATA_TOO_LARGE_FOR_MODULUS:132:data too large for modulus +RSA_R_DATA_TOO_SMALL:111:data too small +RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE:122:data too small for key size +RSA_R_DIGEST_DOES_NOT_MATCH:158:digest does not match +RSA_R_DIGEST_NOT_ALLOWED:145:digest not allowed +RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY:112:digest too big for rsa key +RSA_R_DMP1_NOT_CONGRUENT_TO_D:124:dmp1 not congruent to d +RSA_R_DMQ1_NOT_CONGRUENT_TO_D:125:dmq1 not congruent to d +RSA_R_D_E_NOT_CONGRUENT_TO_1:123:d e not congruent to 1 +RSA_R_FIRST_OCTET_INVALID:133:first octet invalid +RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE:144:\ + illegal or unsupported padding mode +RSA_R_INVALID_DIGEST:157:invalid digest +RSA_R_INVALID_DIGEST_LENGTH:143:invalid digest length +RSA_R_INVALID_HEADER:137:invalid header +RSA_R_INVALID_LABEL:160:invalid label +RSA_R_INVALID_MESSAGE_LENGTH:131:invalid message length +RSA_R_INVALID_MGF1_MD:156:invalid mgf1 md +RSA_R_INVALID_MULTI_PRIME_KEY:167:invalid multi prime key +RSA_R_INVALID_OAEP_PARAMETERS:161:invalid oaep parameters +RSA_R_INVALID_PADDING:138:invalid padding +RSA_R_INVALID_PADDING_MODE:141:invalid padding mode +RSA_R_INVALID_PSS_PARAMETERS:149:invalid pss parameters +RSA_R_INVALID_PSS_SALTLEN:146:invalid pss saltlen +RSA_R_INVALID_SALT_LENGTH:150:invalid salt length +RSA_R_INVALID_TRAILER:139:invalid trailer +RSA_R_INVALID_X931_DIGEST:142:invalid x931 digest +RSA_R_IQMP_NOT_INVERSE_OF_Q:126:iqmp not inverse of q +RSA_R_KEY_PRIME_NUM_INVALID:165:key prime num invalid +RSA_R_KEY_SIZE_TOO_SMALL:120:key size too small +RSA_R_LAST_OCTET_INVALID:134:last octet invalid +RSA_R_MGF1_DIGEST_NOT_ALLOWED:152:mgf1 digest not allowed +RSA_R_MODULUS_TOO_LARGE:105:modulus too large +RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R:168:mp coefficient not inverse of r +RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D:169:mp exponent not congruent to d +RSA_R_MP_R_NOT_PRIME:170:mp r not prime +RSA_R_NO_PUBLIC_EXPONENT:140:no public exponent +RSA_R_NULL_BEFORE_BLOCK_MISSING:113:null before block missing +RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES:172:n does not equal product of primes +RSA_R_N_DOES_NOT_EQUAL_P_Q:127:n does not equal p q +RSA_R_OAEP_DECODING_ERROR:121:oaep decoding error +RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE:148:\ + operation not supported for this keytype +RSA_R_PADDING_CHECK_FAILED:114:padding check failed +RSA_R_PKCS_DECODING_ERROR:159:pkcs decoding error +RSA_R_PSS_SALTLEN_TOO_SMALL:164:pss saltlen too small +RSA_R_P_NOT_PRIME:128:p not prime +RSA_R_Q_NOT_PRIME:129:q not prime +RSA_R_RSA_OPERATIONS_NOT_SUPPORTED:130:rsa operations not supported +RSA_R_SLEN_CHECK_FAILED:136:salt length check failed +RSA_R_SLEN_RECOVERY_FAILED:135:salt length recovery failed +RSA_R_SSLV3_ROLLBACK_ATTACK:115:sslv3 rollback attack +RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD:116:\ + the asn1 object identifier is not known for this md +RSA_R_UNKNOWN_ALGORITHM_TYPE:117:unknown algorithm type +RSA_R_UNKNOWN_DIGEST:166:unknown digest +RSA_R_UNKNOWN_MASK_DIGEST:151:unknown mask digest +RSA_R_UNKNOWN_PADDING_TYPE:118:unknown padding type +RSA_R_UNSUPPORTED_ENCRYPTION_TYPE:162:unsupported encryption type +RSA_R_UNSUPPORTED_LABEL_SOURCE:163:unsupported label source +RSA_R_UNSUPPORTED_MASK_ALGORITHM:153:unsupported mask algorithm +RSA_R_UNSUPPORTED_MASK_PARAMETER:154:unsupported mask parameter +RSA_R_UNSUPPORTED_SIGNATURE_TYPE:155:unsupported signature type +RSA_R_VALUE_MISSING:147:value missing +RSA_R_WRONG_SIGNATURE_LENGTH:119:wrong signature length +SSL_R_APP_DATA_IN_HANDSHAKE:100:app data in handshake +SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT:272:\ + attempt to reuse session in different context +SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE:143:\ + at least TLS 1.0 needed in FIPS mode +SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE:158:\ + at least (D)TLS 1.2 needed in Suite B mode +SSL_R_BAD_CHANGE_CIPHER_SPEC:103:bad change cipher spec +SSL_R_BAD_CIPHER:186:bad cipher +SSL_R_BAD_DATA:390:bad data +SSL_R_BAD_DATA_RETURNED_BY_CALLBACK:106:bad data returned by callback +SSL_R_BAD_DECOMPRESSION:107:bad decompression +SSL_R_BAD_DH_VALUE:102:bad dh value +SSL_R_BAD_DIGEST_LENGTH:111:bad digest length +SSL_R_BAD_EARLY_DATA:233:bad early data +SSL_R_BAD_ECC_CERT:304:bad ecc cert +SSL_R_BAD_ECPOINT:306:bad ecpoint +SSL_R_BAD_EXTENSION:110:bad extension +SSL_R_BAD_HANDSHAKE_LENGTH:332:bad handshake length +SSL_R_BAD_HANDSHAKE_STATE:236:bad handshake state +SSL_R_BAD_HELLO_REQUEST:105:bad hello request +SSL_R_BAD_HRR_VERSION:263:bad hrr version +SSL_R_BAD_KEY_SHARE:108:bad key share +SSL_R_BAD_KEY_UPDATE:122:bad key update +SSL_R_BAD_LENGTH:271:bad length +SSL_R_BAD_PACKET:240:bad packet +SSL_R_BAD_PACKET_LENGTH:115:bad packet length +SSL_R_BAD_PROTOCOL_VERSION_NUMBER:116:bad protocol version number +SSL_R_BAD_PSK:219:bad psk +SSL_R_BAD_PSK_IDENTITY:114:bad psk identity +SSL_R_BAD_RECORD_TYPE:443:bad record type +SSL_R_BAD_RSA_ENCRYPT:119:bad rsa encrypt +SSL_R_BAD_SIGNATURE:123:bad signature +SSL_R_BAD_SRP_A_LENGTH:347:bad srp a length +SSL_R_BAD_SRP_PARAMETERS:371:bad srp parameters +SSL_R_BAD_SRTP_MKI_VALUE:352:bad srtp mki value +SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST:353:bad srtp protection profile list +SSL_R_BAD_SSL_FILETYPE:124:bad ssl filetype +SSL_R_BAD_VALUE:384:bad value +SSL_R_BAD_WRITE_RETRY:127:bad write retry +SSL_R_BINDER_DOES_NOT_VERIFY:253:binder does not verify +SSL_R_BIO_NOT_SET:128:bio not set +SSL_R_BLOCK_CIPHER_PAD_IS_WRONG:129:block cipher pad is wrong +SSL_R_BN_LIB:130:bn lib +SSL_R_CALLBACK_FAILED:234:callback failed +SSL_R_CANNOT_CHANGE_CIPHER:109:cannot change cipher +SSL_R_CA_DN_LENGTH_MISMATCH:131:ca dn length mismatch +SSL_R_CA_KEY_TOO_SMALL:397:ca key too small +SSL_R_CA_MD_TOO_WEAK:398:ca md too weak +SSL_R_CCS_RECEIVED_EARLY:133:ccs received early +SSL_R_CERTIFICATE_VERIFY_FAILED:134:certificate verify failed +SSL_R_CERT_CB_ERROR:377:cert cb error +SSL_R_CERT_LENGTH_MISMATCH:135:cert length mismatch +SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED:218:ciphersuite digest has changed +SSL_R_CIPHER_CODE_WRONG_LENGTH:137:cipher code wrong length +SSL_R_CIPHER_OR_HASH_UNAVAILABLE:138:cipher or hash unavailable +SSL_R_CLIENTHELLO_TLSEXT:226:clienthello tlsext +SSL_R_COMPRESSED_LENGTH_TOO_LONG:140:compressed length too long +SSL_R_COMPRESSION_DISABLED:343:compression disabled +SSL_R_COMPRESSION_FAILURE:141:compression failure +SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE:307:\ + compression id not within private range +SSL_R_COMPRESSION_LIBRARY_ERROR:142:compression library error +SSL_R_CONNECTION_TYPE_NOT_SET:144:connection type not set +SSL_R_CONTEXT_NOT_DANE_ENABLED:167:context not dane enabled +SSL_R_COOKIE_GEN_CALLBACK_FAILURE:400:cookie gen callback failure +SSL_R_COOKIE_MISMATCH:308:cookie mismatch +SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED:206:\ + custom ext handler already installed +SSL_R_DANE_ALREADY_ENABLED:172:dane already enabled +SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL:173:dane cannot override mtype full +SSL_R_DANE_NOT_ENABLED:175:dane not enabled +SSL_R_DANE_TLSA_BAD_CERTIFICATE:180:dane tlsa bad certificate +SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE:184:dane tlsa bad certificate usage +SSL_R_DANE_TLSA_BAD_DATA_LENGTH:189:dane tlsa bad data length +SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH:192:dane tlsa bad digest length +SSL_R_DANE_TLSA_BAD_MATCHING_TYPE:200:dane tlsa bad matching type +SSL_R_DANE_TLSA_BAD_PUBLIC_KEY:201:dane tlsa bad public key +SSL_R_DANE_TLSA_BAD_SELECTOR:202:dane tlsa bad selector +SSL_R_DANE_TLSA_NULL_DATA:203:dane tlsa null data +SSL_R_DATA_BETWEEN_CCS_AND_FINISHED:145:data between ccs and finished +SSL_R_DATA_LENGTH_TOO_LONG:146:data length too long +SSL_R_DECRYPTION_FAILED:147:decryption failed +SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC:281:\ + decryption failed or bad record mac +SSL_R_DH_KEY_TOO_SMALL:394:dh key too small +SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG:148:dh public value length is wrong +SSL_R_DIGEST_CHECK_FAILED:149:digest check failed +SSL_R_DTLS_MESSAGE_TOO_BIG:334:dtls message too big +SSL_R_DUPLICATE_COMPRESSION_ID:309:duplicate compression id +SSL_R_ECC_CERT_NOT_FOR_SIGNING:318:ecc cert not for signing +SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE:374:ecdh required for suiteb mode +SSL_R_EE_KEY_TOO_SMALL:399:ee key too small +SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST:354:empty srtp protection profile list +SSL_R_ENCRYPTED_LENGTH_TOO_LONG:150:encrypted length too long +SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST:151:error in received cipher list +SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN:204:error setting tlsa base domain +SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE:194:exceeds max fragment size +SSL_R_EXCESSIVE_MESSAGE_SIZE:152:excessive message size +SSL_R_EXTENSION_NOT_RECEIVED:279:extension not received +SSL_R_EXTRA_DATA_IN_MESSAGE:153:extra data in message +SSL_R_EXT_LENGTH_MISMATCH:163:ext length mismatch +SSL_R_FAILED_TO_INIT_ASYNC:405:failed to init async +SSL_R_FRAGMENTED_CLIENT_HELLO:401:fragmented client hello +SSL_R_GOT_A_FIN_BEFORE_A_CCS:154:got a fin before a ccs +SSL_R_HTTPS_PROXY_REQUEST:155:https proxy request +SSL_R_HTTP_REQUEST:156:http request +SSL_R_ILLEGAL_POINT_COMPRESSION:162:illegal point compression +SSL_R_ILLEGAL_SUITEB_DIGEST:380:illegal Suite B digest +SSL_R_INAPPROPRIATE_FALLBACK:373:inappropriate fallback +SSL_R_INCONSISTENT_COMPRESSION:340:inconsistent compression +SSL_R_INCONSISTENT_EARLY_DATA_ALPN:222:inconsistent early data alpn +SSL_R_INCONSISTENT_EARLY_DATA_SNI:231:inconsistent early data sni +SSL_R_INCONSISTENT_EXTMS:104:inconsistent extms +SSL_R_INSUFFICIENT_SECURITY:241:insufficient security +SSL_R_INVALID_ALERT:205:invalid alert +SSL_R_INVALID_CCS_MESSAGE:260:invalid ccs message +SSL_R_INVALID_CERTIFICATE_OR_ALG:238:invalid certificate or alg +SSL_R_INVALID_COMMAND:280:invalid command +SSL_R_INVALID_COMPRESSION_ALGORITHM:341:invalid compression algorithm +SSL_R_INVALID_CONFIG:283:invalid config +SSL_R_INVALID_CONFIGURATION_NAME:113:invalid configuration name +SSL_R_INVALID_CONTEXT:282:invalid context +SSL_R_INVALID_CT_VALIDATION_TYPE:212:invalid ct validation type +SSL_R_INVALID_KEY_UPDATE_TYPE:120:invalid key update type +SSL_R_INVALID_MAX_EARLY_DATA:174:invalid max early data +SSL_R_INVALID_NULL_CMD_NAME:385:invalid null cmd name +SSL_R_INVALID_SEQUENCE_NUMBER:402:invalid sequence number +SSL_R_INVALID_SERVERINFO_DATA:388:invalid serverinfo data +SSL_R_INVALID_SESSION_ID:999:invalid session id +SSL_R_INVALID_SRP_USERNAME:357:invalid srp username +SSL_R_INVALID_STATUS_RESPONSE:328:invalid status response +SSL_R_INVALID_TICKET_KEYS_LENGTH:325:invalid ticket keys length +SSL_R_LENGTH_MISMATCH:159:length mismatch +SSL_R_LENGTH_TOO_LONG:404:length too long +SSL_R_LENGTH_TOO_SHORT:160:length too short +SSL_R_LIBRARY_BUG:274:library bug +SSL_R_LIBRARY_HAS_NO_CIPHERS:161:library has no ciphers +SSL_R_MISSING_DSA_SIGNING_CERT:165:missing dsa signing cert +SSL_R_MISSING_ECDSA_SIGNING_CERT:381:missing ecdsa signing cert +SSL_R_MISSING_FATAL:256:missing fatal +SSL_R_MISSING_RSA_CERTIFICATE:168:missing rsa certificate +SSL_R_MISSING_RSA_ENCRYPTING_CERT:169:missing rsa encrypting cert +SSL_R_MISSING_RSA_SIGNING_CERT:170:missing rsa signing cert +SSL_R_MISSING_SIGALGS_EXTENSION:112:missing sigalgs extension +SSL_R_MISSING_SIGNING_CERT:221:missing signing cert +SSL_R_MISSING_SRP_PARAM:358:can't find SRP server param +SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION:209:missing supported groups extension +SSL_R_MISSING_TMP_DH_KEY:171:missing tmp dh key +SSL_R_MISSING_TMP_ECDH_KEY:311:missing tmp ecdh key +SSL_R_NOT_ON_RECORD_BOUNDARY:182:not on record boundary +SSL_R_NOT_SERVER:284:not server +SSL_R_NO_APPLICATION_PROTOCOL:235:no application protocol +SSL_R_NO_CERTIFICATES_RETURNED:176:no certificates returned +SSL_R_NO_CERTIFICATE_ASSIGNED:177:no certificate assigned +SSL_R_NO_CERTIFICATE_SET:179:no certificate set +SSL_R_NO_CHANGE_FOLLOWING_HRR:214:no change following hrr +SSL_R_NO_CIPHERS_AVAILABLE:181:no ciphers available +SSL_R_NO_CIPHERS_SPECIFIED:183:no ciphers specified +SSL_R_NO_CIPHER_MATCH:185:no cipher match +SSL_R_NO_CLIENT_CERT_METHOD:331:no client cert method +SSL_R_NO_COMPRESSION_SPECIFIED:187:no compression specified +SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER:330:\ + Peer haven't sent GOST certificate, required for selected ciphersuite +SSL_R_NO_METHOD_SPECIFIED:188:no method specified +SSL_R_NO_PEM_EXTENSIONS:389:no pem extensions +SSL_R_NO_PRIVATE_KEY_ASSIGNED:190:no private key assigned +SSL_R_NO_PROTOCOLS_AVAILABLE:191:no protocols available +SSL_R_NO_RENEGOTIATION:339:no renegotiation +SSL_R_NO_REQUIRED_DIGEST:324:no required digest +SSL_R_NO_SHARED_CIPHER:193:no shared cipher +SSL_R_NO_SHARED_GROUPS:410:no shared groups +SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS:376:no shared signature algorithms +SSL_R_NO_SRTP_PROFILES:359:no srtp profiles +SSL_R_NO_SUITABLE_KEY_SHARE:101:no suitable key share +SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM:118:no suitable signature algorithm +SSL_R_NO_VALID_SCTS:216:no valid scts +SSL_R_NO_VERIFY_COOKIE_CALLBACK:403:no verify cookie callback +SSL_R_NULL_SSL_CTX:195:null ssl ctx +SSL_R_NULL_SSL_METHOD_PASSED:196:null ssl method passed +SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED:197:old session cipher not returned +SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED:344:\ + old session compression algorithm not returned +SSL_R_OVERFLOW_ERROR:237:overflow error +SSL_R_PACKET_LENGTH_TOO_LONG:198:packet length too long +SSL_R_PARSE_TLSEXT:227:parse tlsext +SSL_R_PATH_TOO_LONG:270:path too long +SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE:199:peer did not return a certificate +SSL_R_PEM_NAME_BAD_PREFIX:391:pem name bad prefix +SSL_R_PEM_NAME_TOO_SHORT:392:pem name too short +SSL_R_PIPELINE_FAILURE:406:pipeline failure +SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR:278:post handshake auth encoding err +SSL_R_PROTOCOL_IS_SHUTDOWN:207:protocol is shutdown +SSL_R_PSK_IDENTITY_NOT_FOUND:223:psk identity not found +SSL_R_PSK_NO_CLIENT_CB:224:psk no client cb +SSL_R_PSK_NO_SERVER_CB:225:psk no server cb +SSL_R_READ_BIO_NOT_SET:211:read bio not set +SSL_R_READ_TIMEOUT_EXPIRED:312:read timeout expired +SSL_R_RECORD_LENGTH_MISMATCH:213:record length mismatch +SSL_R_RECORD_TOO_SMALL:298:record too small +SSL_R_RENEGOTIATE_EXT_TOO_LONG:335:renegotiate ext too long +SSL_R_RENEGOTIATION_ENCODING_ERR:336:renegotiation encoding err +SSL_R_RENEGOTIATION_MISMATCH:337:renegotiation mismatch +SSL_R_REQUEST_PENDING:285:request pending +SSL_R_REQUEST_SENT:286:request sent +SSL_R_REQUIRED_CIPHER_MISSING:215:required cipher missing +SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING:342:\ + required compression algorithm missing +SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING:345:scsv received when renegotiating +SSL_R_SCT_VERIFICATION_FAILED:208:sct verification failed +SSL_R_SERVERHELLO_TLSEXT:275:serverhello tlsext +SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED:277:session id context uninitialized +SSL_R_SHUTDOWN_WHILE_IN_INIT:407:shutdown while in init +SSL_R_SIGNATURE_ALGORITHMS_ERROR:360:signature algorithms error +SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE:220:\ + signature for non signing certificate +SSL_R_SRP_A_CALC:361:error with the srp params +SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES:362:srtp could not allocate profiles +SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG:363:\ + srtp protection profile list too long +SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE:364:srtp unknown protection profile +SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH:232:\ + ssl3 ext invalid max fragment length +SSL_R_SSL3_EXT_INVALID_SERVERNAME:319:ssl3 ext invalid servername +SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE:320:ssl3 ext invalid servername type +SSL_R_SSL3_SESSION_ID_TOO_LONG:300:ssl3 session id too long +SSL_R_SSL_COMMAND_SECTION_EMPTY:117:ssl command section empty +SSL_R_SSL_COMMAND_SECTION_NOT_FOUND:125:ssl command section not found +SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION:228:ssl ctx has no default ssl version +SSL_R_SSL_HANDSHAKE_FAILURE:229:ssl handshake failure +SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS:230:ssl library has no ciphers +SSL_R_SSL_NEGATIVE_LENGTH:372:ssl negative length +SSL_R_SSL_SECTION_EMPTY:126:ssl section empty +SSL_R_SSL_SECTION_NOT_FOUND:136:ssl section not found +SSL_R_SSL_SESSION_ID_CALLBACK_FAILED:301:ssl session id callback failed +SSL_R_SSL_SESSION_ID_CONFLICT:302:ssl session id conflict +SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG:273:ssl session id context too long +SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH:303:ssl session id has bad length +SSL_R_SSL_SESSION_ID_TOO_LONG:408:ssl session id too long +SSL_R_SSL_SESSION_VERSION_MISMATCH:210:ssl session version mismatch +SSL_R_STILL_IN_INIT:121:still in init +SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT:365:peer does not accept heartbeats +SSL_R_TLS_HEARTBEAT_PENDING:366:heartbeat request already pending +SSL_R_TLS_ILLEGAL_EXPORTER_LABEL:367:tls illegal exporter label +SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST:157:tls invalid ecpointformat list +SSL_R_TOO_MANY_KEY_UPDATES:132:too many key updates +SSL_R_TOO_MANY_WARN_ALERTS:409:too many warn alerts +SSL_R_TOO_MUCH_EARLY_DATA:164:too much early data +SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS:314:unable to find ecdh parameters +SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS:239:\ + unable to find public key parameters +SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES:242:unable to load ssl3 md5 routines +SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES:243:unable to load ssl3 sha1 routines +SSL_R_UNEXPECTED_CCS_MESSAGE:262:unexpected ccs message +SSL_R_UNEXPECTED_END_OF_EARLY_DATA:178:unexpected end of early data +SSL_R_UNEXPECTED_MESSAGE:244:unexpected message +SSL_R_UNEXPECTED_RECORD:245:unexpected record +SSL_R_UNINITIALIZED:276:uninitialized +SSL_R_UNKNOWN_ALERT_TYPE:246:unknown alert type +SSL_R_UNKNOWN_CERTIFICATE_TYPE:247:unknown certificate type +SSL_R_UNKNOWN_CIPHER_RETURNED:248:unknown cipher returned +SSL_R_UNKNOWN_CIPHER_TYPE:249:unknown cipher type +SSL_R_UNKNOWN_CMD_NAME:386:unknown cmd name +SSL_R_UNKNOWN_COMMAND:139:unknown command +SSL_R_UNKNOWN_DIGEST:368:unknown digest +SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE:250:unknown key exchange type +SSL_R_UNKNOWN_PKEY_TYPE:251:unknown pkey type +SSL_R_UNKNOWN_PROTOCOL:252:unknown protocol +SSL_R_UNKNOWN_SSL_VERSION:254:unknown ssl version +SSL_R_UNKNOWN_STATE:255:unknown state +SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED:338:\ + unsafe legacy renegotiation disabled +SSL_R_UNSOLICITED_EXTENSION:217:unsolicited extension +SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM:257:unsupported compression algorithm +SSL_R_UNSUPPORTED_ELLIPTIC_CURVE:315:unsupported elliptic curve +SSL_R_UNSUPPORTED_PROTOCOL:258:unsupported protocol +SSL_R_UNSUPPORTED_SSL_VERSION:259:unsupported ssl version +SSL_R_UNSUPPORTED_STATUS_TYPE:329:unsupported status type +SSL_R_USE_SRTP_NOT_NEGOTIATED:369:use srtp not negotiated +SSL_R_VERSION_TOO_HIGH:166:version too high +SSL_R_VERSION_TOO_LOW:396:version too low +SSL_R_WRONG_CERTIFICATE_TYPE:383:wrong certificate type +SSL_R_WRONG_CIPHER_RETURNED:261:wrong cipher returned +SSL_R_WRONG_CURVE:378:wrong curve +SSL_R_WRONG_SIGNATURE_LENGTH:264:wrong signature length +SSL_R_WRONG_SIGNATURE_SIZE:265:wrong signature size +SSL_R_WRONG_SIGNATURE_TYPE:370:wrong signature type +SSL_R_WRONG_SSL_VERSION:266:wrong ssl version +SSL_R_WRONG_VERSION_NUMBER:267:wrong version number +SSL_R_X509_LIB:268:x509 lib +SSL_R_X509_VERIFICATION_SETUP_PROBLEMS:269:x509 verification setup problems +TS_R_BAD_PKCS7_TYPE:132:bad pkcs7 type +TS_R_BAD_TYPE:133:bad type +TS_R_CANNOT_LOAD_CERT:137:cannot load certificate +TS_R_CANNOT_LOAD_KEY:138:cannot load private key +TS_R_CERTIFICATE_VERIFY_ERROR:100:certificate verify error +TS_R_COULD_NOT_SET_ENGINE:127:could not set engine +TS_R_COULD_NOT_SET_TIME:115:could not set time +TS_R_DETACHED_CONTENT:134:detached content +TS_R_ESS_ADD_SIGNING_CERT_ERROR:116:ess add signing cert error +TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR:139:ess add signing cert v2 error +TS_R_ESS_SIGNING_CERTIFICATE_ERROR:101:ess signing certificate error +TS_R_INVALID_NULL_POINTER:102:invalid null pointer +TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE:117:invalid signer certificate purpose +TS_R_MESSAGE_IMPRINT_MISMATCH:103:message imprint mismatch +TS_R_NONCE_MISMATCH:104:nonce mismatch +TS_R_NONCE_NOT_RETURNED:105:nonce not returned +TS_R_NO_CONTENT:106:no content +TS_R_NO_TIME_STAMP_TOKEN:107:no time stamp token +TS_R_PKCS7_ADD_SIGNATURE_ERROR:118:pkcs7 add signature error +TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR:119:pkcs7 add signed attr error +TS_R_PKCS7_TO_TS_TST_INFO_FAILED:129:pkcs7 to ts tst info failed +TS_R_POLICY_MISMATCH:108:policy mismatch +TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE:120:\ + private key does not match certificate +TS_R_RESPONSE_SETUP_ERROR:121:response setup error +TS_R_SIGNATURE_FAILURE:109:signature failure +TS_R_THERE_MUST_BE_ONE_SIGNER:110:there must be one signer +TS_R_TIME_SYSCALL_ERROR:122:time syscall error +TS_R_TOKEN_NOT_PRESENT:130:token not present +TS_R_TOKEN_PRESENT:131:token present +TS_R_TSA_NAME_MISMATCH:111:tsa name mismatch +TS_R_TSA_UNTRUSTED:112:tsa untrusted +TS_R_TST_INFO_SETUP_ERROR:123:tst info setup error +TS_R_TS_DATASIGN:124:ts datasign +TS_R_UNACCEPTABLE_POLICY:125:unacceptable policy +TS_R_UNSUPPORTED_MD_ALGORITHM:126:unsupported md algorithm +TS_R_UNSUPPORTED_VERSION:113:unsupported version +TS_R_VAR_BAD_VALUE:135:var bad value +TS_R_VAR_LOOKUP_FAILURE:136:cannot find config variable +TS_R_WRONG_CONTENT_TYPE:114:wrong content type +UI_R_COMMON_OK_AND_CANCEL_CHARACTERS:104:common ok and cancel characters +UI_R_INDEX_TOO_LARGE:102:index too large +UI_R_INDEX_TOO_SMALL:103:index too small +UI_R_NO_RESULT_BUFFER:105:no result buffer +UI_R_PROCESSING_ERROR:107:processing error +UI_R_RESULT_TOO_LARGE:100:result too large +UI_R_RESULT_TOO_SMALL:101:result too small +UI_R_SYSASSIGN_ERROR:109:sys$assign error +UI_R_SYSDASSGN_ERROR:110:sys$dassgn error +UI_R_SYSQIOW_ERROR:111:sys$qiow error +UI_R_UNKNOWN_CONTROL_COMMAND:106:unknown control command +UI_R_UNKNOWN_TTYGET_ERRNO_VALUE:108:unknown ttyget errno value +UI_R_USER_DATA_DUPLICATION_UNSUPPORTED:112:user data duplication unsupported +X509V3_R_BAD_IP_ADDRESS:118:bad ip address +X509V3_R_BAD_OBJECT:119:bad object +X509V3_R_BN_DEC2BN_ERROR:100:bn dec2bn error +X509V3_R_BN_TO_ASN1_INTEGER_ERROR:101:bn to asn1 integer error +X509V3_R_DIRNAME_ERROR:149:dirname error +X509V3_R_DISTPOINT_ALREADY_SET:160:distpoint already set +X509V3_R_DUPLICATE_ZONE_ID:133:duplicate zone id +X509V3_R_ERROR_CONVERTING_ZONE:131:error converting zone +X509V3_R_ERROR_CREATING_EXTENSION:144:error creating extension +X509V3_R_ERROR_IN_EXTENSION:128:error in extension +X509V3_R_EXPECTED_A_SECTION_NAME:137:expected a section name +X509V3_R_EXTENSION_EXISTS:145:extension exists +X509V3_R_EXTENSION_NAME_ERROR:115:extension name error +X509V3_R_EXTENSION_NOT_FOUND:102:extension not found +X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED:103:extension setting not supported +X509V3_R_EXTENSION_VALUE_ERROR:116:extension value error +X509V3_R_ILLEGAL_EMPTY_EXTENSION:151:illegal empty extension +X509V3_R_INCORRECT_POLICY_SYNTAX_TAG:152:incorrect policy syntax tag +X509V3_R_INVALID_ASNUMBER:162:invalid asnumber +X509V3_R_INVALID_ASRANGE:163:invalid asrange +X509V3_R_INVALID_BOOLEAN_STRING:104:invalid boolean string +X509V3_R_INVALID_EXTENSION_STRING:105:invalid extension string +X509V3_R_INVALID_INHERITANCE:165:invalid inheritance +X509V3_R_INVALID_IPADDRESS:166:invalid ipaddress +X509V3_R_INVALID_MULTIPLE_RDNS:161:invalid multiple rdns +X509V3_R_INVALID_NAME:106:invalid name +X509V3_R_INVALID_NULL_ARGUMENT:107:invalid null argument +X509V3_R_INVALID_NULL_NAME:108:invalid null name +X509V3_R_INVALID_NULL_VALUE:109:invalid null value +X509V3_R_INVALID_NUMBER:140:invalid number +X509V3_R_INVALID_NUMBERS:141:invalid numbers +X509V3_R_INVALID_OBJECT_IDENTIFIER:110:invalid object identifier +X509V3_R_INVALID_OPTION:138:invalid option +X509V3_R_INVALID_POLICY_IDENTIFIER:134:invalid policy identifier +X509V3_R_INVALID_PROXY_POLICY_SETTING:153:invalid proxy policy setting +X509V3_R_INVALID_PURPOSE:146:invalid purpose +X509V3_R_INVALID_SAFI:164:invalid safi +X509V3_R_INVALID_SECTION:135:invalid section +X509V3_R_INVALID_SYNTAX:143:invalid syntax +X509V3_R_ISSUER_DECODE_ERROR:126:issuer decode error +X509V3_R_MISSING_VALUE:124:missing value +X509V3_R_NEED_ORGANIZATION_AND_NUMBERS:142:need organization and numbers +X509V3_R_NO_CONFIG_DATABASE:136:no config database +X509V3_R_NO_ISSUER_CERTIFICATE:121:no issuer certificate +X509V3_R_NO_ISSUER_DETAILS:127:no issuer details +X509V3_R_NO_POLICY_IDENTIFIER:139:no policy identifier +X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED:154:\ + no proxy cert policy language defined +X509V3_R_NO_PUBLIC_KEY:114:no public key +X509V3_R_NO_SUBJECT_DETAILS:125:no subject details +X509V3_R_OPERATION_NOT_DEFINED:148:operation not defined +X509V3_R_OTHERNAME_ERROR:147:othername error +X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED:155:policy language already defined +X509V3_R_POLICY_PATH_LENGTH:156:policy path length +X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED:157:\ + policy path length already defined +X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY:159:\ + policy when proxy language requires no policy +X509V3_R_SECTION_NOT_FOUND:150:section not found +X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS:122:unable to get issuer details +X509V3_R_UNABLE_TO_GET_ISSUER_KEYID:123:unable to get issuer keyid +X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT:111:unknown bit string argument +X509V3_R_UNKNOWN_EXTENSION:129:unknown extension +X509V3_R_UNKNOWN_EXTENSION_NAME:130:unknown extension name +X509V3_R_UNKNOWN_OPTION:120:unknown option +X509V3_R_UNSUPPORTED_OPTION:117:unsupported option +X509V3_R_UNSUPPORTED_TYPE:167:unsupported type +X509V3_R_USER_TOO_LONG:132:user too long +X509_R_AKID_MISMATCH:110:akid mismatch +X509_R_BAD_SELECTOR:133:bad selector +X509_R_BAD_X509_FILETYPE:100:bad x509 filetype +X509_R_BASE64_DECODE_ERROR:118:base64 decode error +X509_R_CANT_CHECK_DH_KEY:114:cant check dh key +X509_R_CERT_ALREADY_IN_HASH_TABLE:101:cert already in hash table +X509_R_CRL_ALREADY_DELTA:127:crl already delta +X509_R_CRL_VERIFY_FAILURE:131:crl verify failure +X509_R_IDP_MISMATCH:128:idp mismatch +X509_R_INVALID_DIRECTORY:113:invalid directory +X509_R_INVALID_FIELD_NAME:119:invalid field name +X509_R_INVALID_TRUST:123:invalid trust +X509_R_ISSUER_MISMATCH:129:issuer mismatch +X509_R_KEY_TYPE_MISMATCH:115:key type mismatch +X509_R_KEY_VALUES_MISMATCH:116:key values mismatch +X509_R_LOADING_CERT_DIR:103:loading cert dir +X509_R_LOADING_DEFAULTS:104:loading defaults +X509_R_METHOD_NOT_SUPPORTED:124:method not supported +X509_R_NAME_TOO_LONG:134:name too long +X509_R_NEWER_CRL_NOT_NEWER:132:newer crl not newer +X509_R_NO_CERTIFICATE_FOUND:135:no certificate found +X509_R_NO_CERTIFICATE_OR_CRL_FOUND:136:no certificate or crl found +X509_R_NO_CERT_SET_FOR_US_TO_VERIFY:105:no cert set for us to verify +X509_R_NO_CRL_FOUND:137:no crl found +X509_R_NO_CRL_NUMBER:130:no crl number +X509_R_PUBLIC_KEY_DECODE_ERROR:125:public key decode error +X509_R_PUBLIC_KEY_ENCODE_ERROR:126:public key encode error +X509_R_SHOULD_RETRY:106:should retry +X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN:107:unable to find parameters in chain +X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY:108:unable to get certs public key +X509_R_UNKNOWN_KEY_TYPE:117:unknown key type +X509_R_UNKNOWN_NID:109:unknown nid +X509_R_UNKNOWN_PURPOSE_ID:121:unknown purpose id +X509_R_UNKNOWN_TRUST_ID:120:unknown trust id +X509_R_UNSUPPORTED_ALGORITHM:111:unsupported algorithm +X509_R_WRONG_LOOKUP_TYPE:112:wrong lookup type +X509_R_WRONG_TYPE:122:wrong type diff --git a/crypto/evp/bio_b64.c b/crypto/evp/bio_b64.c index a86e8db0..cade6f8f 100644 --- a/crypto/evp/bio_b64.c +++ b/crypto/evp/bio_b64.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,9 +17,6 @@ static int b64_write(BIO *h, const char *buf, int num); static int b64_read(BIO *h, char *buf, int size); static int b64_puts(BIO *h, const char *str); -/* - * static int b64_gets(BIO *h, char *str, int size); - */ static long b64_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int b64_new(BIO *h); static int b64_free(BIO *data); @@ -49,7 +46,11 @@ typedef struct b64_struct { static const BIO_METHOD methods_b64 = { BIO_TYPE_BASE64, "base64 encoding", + /* TODO: Convert to new style write function */ + bwrite_conv, b64_write, + /* TODO: Convert to new style read function */ + bread_conv, b64_read, b64_puts, NULL, /* b64_gets, */ @@ -113,7 +114,7 @@ static int b64_read(BIO *b, char *out, int outl) BIO *next; if (out == NULL) - return (0); + return 0; ctx = (BIO_B64_CTX *)BIO_get_data(b); next = BIO_next(b); @@ -288,14 +289,6 @@ static int b64_read(BIO *b, char *out, int outl) (unsigned char *)ctx->tmp, i); ctx->tmp_len = 0; } - /* - * If eof or an error was signalled, then the condition - * 'ctx->cont <= 0' will prevent b64_read() from reading - * more data on subsequent calls. This assignment was - * deleted accidentally in commit 5562cfaca4f3. - */ - ctx->cont = i; - ctx->buf_off = 0; if (i < 0) { ret_code = 0; @@ -354,7 +347,7 @@ static int b64_write(BIO *b, const char *in, int inl) i = BIO_write(next, &(ctx->buf[ctx->buf_off]), n); if (i <= 0) { BIO_copy_next_retry(b); - return (i); + return i; } OPENSSL_assert(i <= n); ctx->buf_off += i; @@ -367,7 +360,7 @@ static int b64_write(BIO *b, const char *in, int inl) ctx->buf_len = 0; if ((in == NULL) || (inl <= 0)) - return (0); + return 0; while (inl > 0) { n = (inl > B64_BLOCK_SIZE) ? B64_BLOCK_SIZE : inl; @@ -440,7 +433,7 @@ static int b64_write(BIO *b, const char *in, int inl) ctx->buf_len = 0; ctx->buf_off = 0; } - return (ret); + return ret; } static long b64_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -542,7 +535,7 @@ static long b64_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) ret = BIO_callback_ctrl(next, cmd, fp); break; } - return (ret); + return ret; } static int b64_puts(BIO *b, const char *str) diff --git a/crypto/evp/bio_enc.c b/crypto/evp/bio_enc.c index e62d1dfd..30f09e6d 100644 --- a/crypto/evp/bio_enc.c +++ b/crypto/evp/bio_enc.c @@ -16,12 +16,6 @@ static int enc_write(BIO *h, const char *buf, int num); static int enc_read(BIO *h, char *buf, int size); -/* - * static int enc_puts(BIO *h, const char *str); - */ -/* - * static int enc_gets(BIO *h, char *str, int size); - */ static long enc_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int enc_new(BIO *h); static int enc_free(BIO *data); @@ -48,7 +42,11 @@ typedef struct enc_struct { static const BIO_METHOD methods_enc = { BIO_TYPE_CIPHER, "cipher", + /* TODO: Convert to new style write function */ + bwrite_conv, enc_write, + /* TODO: Convert to new style read function */ + bread_conv, enc_read, NULL, /* enc_puts, */ NULL, /* enc_gets, */ @@ -60,7 +58,7 @@ static const BIO_METHOD methods_enc = { const BIO_METHOD *BIO_f_cipher(void) { - return (&methods_enc); + return &methods_enc; } static int enc_new(BIO *bi) @@ -111,7 +109,7 @@ static int enc_read(BIO *b, char *out, int outl) BIO *next; if (out == NULL) - return (0); + return 0; ctx = BIO_get_data(b); next = BIO_next(b); @@ -251,7 +249,7 @@ static int enc_write(BIO *b, const char *in, int inl) i = BIO_write(next, &(ctx->buf[ctx->buf_off]), n); if (i <= 0) { BIO_copy_next_retry(b); - return (i); + return i; } ctx->buf_off += i; n -= i; @@ -259,7 +257,7 @@ static int enc_write(BIO *b, const char *in, int inl) /* at this point all pending data has been written */ if ((in == NULL) || (inl <= 0)) - return (0); + return 0; ctx->buf_off = 0; while (inl > 0) { @@ -289,7 +287,7 @@ static int enc_write(BIO *b, const char *in, int inl) ctx->buf_off = 0; } BIO_copy_next_retry(b); - return (ret); + return ret; } static long enc_ctrl(BIO *b, int cmd, long num, void *ptr) @@ -384,7 +382,7 @@ static long enc_ctrl(BIO *b, int cmd, long num, void *ptr) ret = BIO_ctrl(next, cmd, num, ptr); break; } - return (ret); + return ret; } static long enc_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -393,35 +391,15 @@ static long enc_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) BIO *next = BIO_next(b); if (next == NULL) - return (0); + return 0; switch (cmd) { default: ret = BIO_callback_ctrl(next, cmd, fp); break; } - return (ret); + return ret; } -/*- -void BIO_set_cipher_ctx(b,c) -BIO *b; -EVP_CIPHER_ctx *c; - { - if (b == NULL) return; - - if ((b->callback != NULL) && - (b->callback(b,BIO_CB_CTRL,(char *)c,BIO_CTRL_SET,e,0L) <= 0)) - return; - - b->init=1; - ctx=(BIO_ENC_CTX *)b->ptr; - memcpy(ctx->cipher,c,sizeof(EVP_CIPHER_CTX)); - - if (b->callback != NULL) - b->callback(b,BIO_CB_CTRL,(char *)c,BIO_CTRL_SET,e,1L); - } -*/ - int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, const unsigned char *i, int e) { diff --git a/crypto/evp/bio_md.c b/crypto/evp/bio_md.c index 2f0f2831..288dee01 100644 --- a/crypto/evp/bio_md.c +++ b/crypto/evp/bio_md.c @@ -22,9 +22,6 @@ static int md_write(BIO *h, char const *buf, int num); static int md_read(BIO *h, char *buf, int size); -/* - * static int md_puts(BIO *h, const char *str); - */ static int md_gets(BIO *h, char *str, int size); static long md_ctrl(BIO *h, int cmd, long arg1, void *arg2); static int md_new(BIO *h); @@ -34,7 +31,11 @@ static long md_callback_ctrl(BIO *h, int cmd, BIO_info_cb *fp); static const BIO_METHOD methods_md = { BIO_TYPE_MD, "message digest", + /* TODO: Convert to new style write function */ + bwrite_conv, md_write, + /* TODO: Convert to new style read function */ + bread_conv, md_read, NULL, /* md_puts, */ md_gets, @@ -46,7 +47,7 @@ static const BIO_METHOD methods_md = { const BIO_METHOD *BIO_f_md(void) { - return (&methods_md); + return &methods_md; } static int md_new(BIO *bi) @@ -55,7 +56,7 @@ static int md_new(BIO *bi) ctx = EVP_MD_CTX_new(); if (ctx == NULL) - return (0); + return 0; BIO_set_init(bi, 1); BIO_set_data(bi, ctx); @@ -66,7 +67,7 @@ static int md_new(BIO *bi) static int md_free(BIO *a) { if (a == NULL) - return (0); + return 0; EVP_MD_CTX_free(BIO_get_data(a)); BIO_set_data(a, NULL); BIO_set_init(a, 0); @@ -81,25 +82,25 @@ static int md_read(BIO *b, char *out, int outl) BIO *next; if (out == NULL) - return (0); + return 0; ctx = BIO_get_data(b); next = BIO_next(b); if ((ctx == NULL) || (next == NULL)) - return (0); + return 0; ret = BIO_read(next, out, outl); if (BIO_get_init(b)) { if (ret > 0) { if (EVP_DigestUpdate(ctx, (unsigned char *)out, (unsigned int)ret) <= 0) - return (-1); + return -1; } } BIO_clear_retry_flags(b); BIO_copy_next_retry(b); - return (ret); + return ret; } static int md_write(BIO *b, const char *in, int inl) @@ -194,7 +195,7 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr) ret = BIO_ctrl(next, cmd, num, ptr); break; } - return (ret); + return ret; } static long md_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) @@ -212,7 +213,7 @@ static long md_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp) ret = BIO_callback_ctrl(next, cmd, fp); break; } - return (ret); + return ret; } static int md_gets(BIO *bp, char *buf, int size) @@ -228,5 +229,5 @@ static int md_gets(BIO *bp, char *buf, int size) if (EVP_DigestFinal_ex(ctx, (unsigned char *)buf, &ret) <= 0) return -1; - return ((int)ret); + return (int)ret; } diff --git a/crypto/evp/bio_ok.c b/crypto/evp/bio_ok.c index b156e62e..5871e632 100644 --- a/crypto/evp/bio_ok.c +++ b/crypto/evp/bio_ok.c @@ -8,7 +8,7 @@ */ /*- - From: Arne Ansper + From: Arne Ansper Why BIO_f_reliable? @@ -110,7 +110,11 @@ typedef struct ok_struct { static const BIO_METHOD methods_ok = { BIO_TYPE_CIPHER, "reliable", + /* TODO: Convert to new style write function */ + bwrite_conv, ok_write, + /* TODO: Convert to new style read function */ + bread_conv, ok_read, NULL, /* ok_puts, */ NULL, /* ok_gets, */ @@ -122,7 +126,7 @@ static const BIO_METHOD methods_ok = { const BIO_METHOD *BIO_f_reliable(void) { - return (&methods_ok); + return &methods_ok; } static int ok_new(BIO *bi) @@ -263,7 +267,7 @@ static int ok_write(BIO *b, const char *in, int inl) ret = inl; if ((ctx == NULL) || (next == NULL) || (BIO_get_init(b) == 0)) - return (0); + return 0; if (ctx->sigio && !sig_out(b)) return 0; @@ -277,7 +281,7 @@ static int ok_write(BIO *b, const char *in, int inl) BIO_copy_next_retry(b); if (!BIO_should_retry(b)) ctx->cont = 0; - return (i); + return i; } ctx->buf_off += i; n -= i; @@ -291,7 +295,7 @@ static int ok_write(BIO *b, const char *in, int inl) } if ((in == NULL) || (inl <= 0)) - return (0); + return 0; n = (inl + ctx->buf_len > OK_BLOCK_SIZE + OK_BLOCK_BLOCK) ? (int)(OK_BLOCK_SIZE + OK_BLOCK_BLOCK - ctx->buf_len) : inl; @@ -311,7 +315,7 @@ static int ok_write(BIO *b, const char *in, int inl) BIO_clear_retry_flags(b); BIO_copy_next_retry(b); - return (ret); + return ret; } static long ok_ctrl(BIO *b, int cmd, long num, void *ptr) diff --git a/crypto/evp/build.info b/crypto/evp/build.info index bf633dc7..03057380 100644 --- a/crypto/evp/build.info +++ b/crypto/evp/build.info @@ -2,14 +2,14 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ encode.c digest.c evp_enc.c evp_key.c evp_cnf.c \ e_des.c e_bf.c e_idea.c e_des3.c e_camellia.c\ - e_rc4.c e_aes.c names.c e_seed.c \ + e_rc4.c e_aes.c names.c e_seed.c e_aria.c e_sm4.c \ e_xcbc_d.c e_rc2.c e_cast.c e_rc5.c \ m_null.c m_md2.c m_md4.c m_md5.c m_sha1.c m_wp.c \ - m_md5_sha1.c m_mdc2.c m_ripemd.c \ + m_md5_sha1.c m_mdc2.c m_ripemd.c m_sha3.c \ p_open.c p_seal.c p_sign.c p_verify.c p_lib.c p_enc.c p_dec.c \ bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c \ c_allc.c c_alld.c evp_lib.c bio_ok.c \ - evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c scrypt.c \ + evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c pbe_scrypt.c \ e_old.c pmeth_lib.c pmeth_fn.c pmeth_gn.c m_sigver.c \ e_aes_cbc_hmac_sha1.c e_aes_cbc_hmac_sha256.c e_rc4_hmac_md5.c \ e_chacha20_poly1305.c cmeth_lib.c @@ -17,6 +17,8 @@ SOURCE[../../libcrypto]=\ INCLUDE[e_aes.o]=.. ../modes INCLUDE[e_aes_cbc_hmac_sha1.o]=../modes INCLUDE[e_aes_cbc_hmac_sha256.o]=../modes +INCLUDE[e_aria.o]=.. ../modes INCLUDE[e_camellia.o]=.. ../modes +INCLUDE[e_sm4.o]=.. ../modes INCLUDE[e_des.o]=.. INCLUDE[e_des3.o]=.. diff --git a/crypto/evp/c_allc.c b/crypto/evp/c_allc.c index 6ed31edb..086b3c4d 100644 --- a/crypto/evp/c_allc.c +++ b/crypto/evp/c_allc.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,7 +10,7 @@ #include #include "internal/cryptlib.h" #include -#include +#include "internal/evp_int.h" #include #include @@ -79,6 +79,16 @@ void openssl_add_all_ciphers_int(void) EVP_add_cipher_alias(SN_seed_cbc, "seed"); #endif +#ifndef OPENSSL_NO_SM4 + EVP_add_cipher(EVP_sm4_ecb()); + EVP_add_cipher(EVP_sm4_cbc()); + EVP_add_cipher(EVP_sm4_cfb()); + EVP_add_cipher(EVP_sm4_ofb()); + EVP_add_cipher(EVP_sm4_ctr()); + EVP_add_cipher_alias(SN_sm4_cbc, "SM4"); + EVP_add_cipher_alias(SN_sm4_cbc, "sm4"); +#endif + #ifndef OPENSSL_NO_RC2 EVP_add_cipher(EVP_rc2_ecb()); EVP_add_cipher(EVP_rc2_cfb()); @@ -181,6 +191,42 @@ void openssl_add_all_ciphers_int(void) EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256()); EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256()); +#ifndef OPENSSL_NO_ARIA + EVP_add_cipher(EVP_aria_128_ecb()); + EVP_add_cipher(EVP_aria_128_cbc()); + EVP_add_cipher(EVP_aria_128_cfb()); + EVP_add_cipher(EVP_aria_128_cfb1()); + EVP_add_cipher(EVP_aria_128_cfb8()); + EVP_add_cipher(EVP_aria_128_ctr()); + EVP_add_cipher(EVP_aria_128_ofb()); + EVP_add_cipher(EVP_aria_128_gcm()); + EVP_add_cipher(EVP_aria_128_ccm()); + EVP_add_cipher_alias(SN_aria_128_cbc, "ARIA128"); + EVP_add_cipher_alias(SN_aria_128_cbc, "aria128"); + EVP_add_cipher(EVP_aria_192_ecb()); + EVP_add_cipher(EVP_aria_192_cbc()); + EVP_add_cipher(EVP_aria_192_cfb()); + EVP_add_cipher(EVP_aria_192_cfb1()); + EVP_add_cipher(EVP_aria_192_cfb8()); + EVP_add_cipher(EVP_aria_192_ctr()); + EVP_add_cipher(EVP_aria_192_ofb()); + EVP_add_cipher(EVP_aria_192_gcm()); + EVP_add_cipher(EVP_aria_192_ccm()); + EVP_add_cipher_alias(SN_aria_192_cbc, "ARIA192"); + EVP_add_cipher_alias(SN_aria_192_cbc, "aria192"); + EVP_add_cipher(EVP_aria_256_ecb()); + EVP_add_cipher(EVP_aria_256_cbc()); + EVP_add_cipher(EVP_aria_256_cfb()); + EVP_add_cipher(EVP_aria_256_cfb1()); + EVP_add_cipher(EVP_aria_256_cfb8()); + EVP_add_cipher(EVP_aria_256_ctr()); + EVP_add_cipher(EVP_aria_256_ofb()); + EVP_add_cipher(EVP_aria_256_gcm()); + EVP_add_cipher(EVP_aria_256_ccm()); + EVP_add_cipher_alias(SN_aria_256_cbc, "ARIA256"); + EVP_add_cipher_alias(SN_aria_256_cbc, "aria256"); +#endif + #ifndef OPENSSL_NO_CAMELLIA EVP_add_cipher(EVP_camellia_128_ecb()); EVP_add_cipher(EVP_camellia_128_cbc()); diff --git a/crypto/evp/c_alld.c b/crypto/evp/c_alld.c index ec79734e..1267531a 100644 --- a/crypto/evp/c_alld.c +++ b/crypto/evp/c_alld.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,7 +10,7 @@ #include #include "internal/cryptlib.h" #include -#include +#include "internal/evp_int.h" #include #include @@ -39,11 +39,22 @@ void openssl_add_all_digests_int(void) EVP_add_digest(EVP_sha256()); EVP_add_digest(EVP_sha384()); EVP_add_digest(EVP_sha512()); + EVP_add_digest(EVP_sha512_224()); + EVP_add_digest(EVP_sha512_256()); #ifndef OPENSSL_NO_WHIRLPOOL EVP_add_digest(EVP_whirlpool()); #endif +#ifndef OPENSSL_NO_SM3 + EVP_add_digest(EVP_sm3()); +#endif #ifndef OPENSSL_NO_BLAKE2 EVP_add_digest(EVP_blake2b512()); EVP_add_digest(EVP_blake2s256()); #endif + EVP_add_digest(EVP_sha3_224()); + EVP_add_digest(EVP_sha3_256()); + EVP_add_digest(EVP_sha3_384()); + EVP_add_digest(EVP_sha3_512()); + EVP_add_digest(EVP_shake128()); + EVP_add_digest(EVP_shake256()); } diff --git a/crypto/evp/digest.c b/crypto/evp/digest.c index 65eff7c8..c380dca0 100644 --- a/crypto/evp/digest.c +++ b/crypto/evp/digest.c @@ -174,6 +174,27 @@ int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) return ret; } +int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t size) +{ + int ret = 0; + + if (ctx->digest->flags & EVP_MD_FLAG_XOF + && size <= INT_MAX + && ctx->digest->md_ctrl(ctx, EVP_MD_CTRL_XOF_LEN, (int)size, NULL)) { + ret = ctx->digest->final(ctx, md); + + if (ctx->digest->cleanup != NULL) { + ctx->digest->cleanup(ctx); + EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); + } + OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); + } else { + EVPerr(EVP_F_EVP_DIGESTFINALXOF, EVP_R_NOT_XOF_OR_INVALID_LENGTH); + } + + return ret; +} + int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in) { EVP_MD_CTX_reset(out); diff --git a/crypto/evp/e_aes.c b/crypto/evp/e_aes.c index 3f36d707..1d5007ac 100644 --- a/crypto/evp/e_aes.c +++ b/crypto/evp/e_aes.c @@ -136,10 +136,10 @@ void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, const unsigned char ivec[AES_BLOCK_SIZE]); #endif #ifdef AES_XTS_ASM -void AES_xts_encrypt(const char *inp, char *out, size_t len, +void AES_xts_encrypt(const unsigned char *inp, unsigned char *out, size_t len, const AES_KEY *key1, const AES_KEY *key2, const unsigned char iv[16]); -void AES_xts_decrypt(const char *inp, char *out, size_t len, +void AES_xts_decrypt(const unsigned char *inp, unsigned char *out, size_t len, const AES_KEY *key1, const AES_KEY *key2, const unsigned char iv[16]); #endif @@ -950,6 +950,1287 @@ static const EVP_CIPHER aes_##keylen##_##mode = { \ const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ { return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; } +#elif defined(OPENSSL_CPUID_OBJ) && defined(__s390__) +/* + * IBM S390X support + */ +# include "s390x_arch.h" + +typedef struct { + union { + double align; + /*- + * KMA-GCM-AES parameter block - begin + * (see z/Architecture Principles of Operation >= SA22-7832-11) + */ + struct { + unsigned char reserved[12]; + union { + unsigned int w; + unsigned char b[4]; + } cv; + union { + unsigned long long g[2]; + unsigned char b[16]; + } t; + unsigned char h[16]; + unsigned long long taadl; + unsigned long long tpcl; + union { + unsigned long long g[2]; + unsigned int w[4]; + } j0; + unsigned char k[32]; + } param; + /* KMA-GCM-AES parameter block - end */ + } kma; + unsigned int fc; + int key_set; + + unsigned char *iv; + int ivlen; + int iv_set; + int iv_gen; + + int taglen; + + unsigned char ares[16]; + unsigned char mres[16]; + unsigned char kres[16]; + int areslen; + int mreslen; + int kreslen; + + int tls_aad_len; +} S390X_AES_GCM_CTX; + +typedef struct { + union { + double align; + /*- + * Padding is chosen so that ccm.kmac_param.k overlaps with key.k and + * ccm.fc with key.k.rounds. Remember that on s390x, an AES_KEY's + * rounds field is used to store the function code and that the key + * schedule is not stored (if aes hardware support is detected). + */ + struct { + unsigned char pad[16]; + AES_KEY k; + } key; + + struct { + /*- + * KMAC-AES parameter block - begin + * (see z/Architecture Principles of Operation >= SA22-7832-08) + */ + struct { + union { + unsigned long long g[2]; + unsigned char b[16]; + } icv; + unsigned char k[32]; + } kmac_param; + /* KMAC-AES paramater block - end */ + + union { + unsigned long long g[2]; + unsigned char b[16]; + } nonce; + union { + unsigned long long g[2]; + unsigned char b[16]; + } buf; + + unsigned long long blocks; + int l; + int m; + int tls_aad_len; + int iv_set; + int tag_set; + int len_set; + int key_set; + + unsigned char pad[140]; + unsigned int fc; + } ccm; + } aes; +} S390X_AES_CCM_CTX; + +# define S390X_aes_128_CAPABLE ((OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_128)) &&\ + (OPENSSL_s390xcap_P.kmc[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_CAPABLE ((OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_192)) &&\ + (OPENSSL_s390xcap_P.kmc[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_CAPABLE ((OPENSSL_s390xcap_P.km[0] & \ + S390X_CAPBIT(S390X_AES_256)) &&\ + (OPENSSL_s390xcap_P.kmc[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define s390x_aes_init_key aes_init_key +static int s390x_aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc); + +# define S390X_aes_128_cbc_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_cbc_CAPABLE 1 +# define S390X_aes_256_cbc_CAPABLE 1 + +# define s390x_aes_cbc_cipher aes_cbc_cipher +static int s390x_aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_ecb_CAPABLE 0 +# define S390X_aes_192_ecb_CAPABLE 0 +# define S390X_aes_256_ecb_CAPABLE 0 + +# define s390x_aes_ecb_cipher aes_ecb_cipher +static int s390x_aes_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_ofb_CAPABLE 0 +# define S390X_aes_192_ofb_CAPABLE 0 +# define S390X_aes_256_ofb_CAPABLE 0 + +# define s390x_aes_ofb_cipher aes_ofb_cipher +static int s390x_aes_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_cfb_CAPABLE 0 +# define S390X_aes_192_cfb_CAPABLE 0 +# define S390X_aes_256_cfb_CAPABLE 0 + +# define s390x_aes_cfb_cipher aes_cfb_cipher +static int s390x_aes_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_cfb8_CAPABLE 0 +# define S390X_aes_192_cfb8_CAPABLE 0 +# define S390X_aes_256_cfb8_CAPABLE 0 + +# define s390x_aes_cfb8_cipher aes_cfb8_cipher +static int s390x_aes_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_cfb1_CAPABLE 0 +# define S390X_aes_192_cfb1_CAPABLE 0 +# define S390X_aes_256_cfb1_CAPABLE 0 + +# define s390x_aes_cfb1_cipher aes_cfb1_cipher +static int s390x_aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_ctr_CAPABLE 1 /* checked by callee */ +# define S390X_aes_192_ctr_CAPABLE 1 +# define S390X_aes_256_ctr_CAPABLE 1 + +# define s390x_aes_ctr_cipher aes_ctr_cipher +static int s390x_aes_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); + +# define S390X_aes_128_gcm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_gcm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_gcm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kma[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +/* iv + padding length for iv lenghts != 12 */ +# define S390X_gcm_ivpadlen(i) ((((i) + 15) >> 4 << 4) + 16) + +/*- + * Process additional authenticated data. Returns 0 on success. Code is + * big-endian. + */ +static int s390x_aes_gcm_aad(S390X_AES_GCM_CTX *ctx, const unsigned char *aad, + size_t len) +{ + unsigned long long alen; + int n, rem; + + if (ctx->kma.param.tpcl) + return -2; + + alen = ctx->kma.param.taadl + len; + if (alen > (U64(1) << 61) || (sizeof(len) == 8 && alen < len)) + return -1; + ctx->kma.param.taadl = alen; + + n = ctx->areslen; + if (n) { + while (n && len) { + ctx->ares[n] = *aad; + n = (n + 1) & 0xf; + ++aad; + --len; + } + /* ctx->ares contains a complete block if offset has wrapped around */ + if (!n) { + s390x_kma(ctx->ares, 16, NULL, 0, NULL, ctx->fc, &ctx->kma.param); + ctx->fc |= S390X_KMA_HS; + } + ctx->areslen = n; + } + + rem = len & 0xf; + + len &= ~0xf; + if (len) { + s390x_kma(aad, len, NULL, 0, NULL, ctx->fc, &ctx->kma.param); + aad += len; + ctx->fc |= S390X_KMA_HS; + } + + if (rem) { + ctx->areslen = rem; + + do { + --rem; + ctx->ares[rem] = aad[rem]; + } while (rem); + } + return 0; +} + +/*- + * En/de-crypt plain/cipher-text and authenticate ciphertext. Returns 0 for + * success. Code is big-endian. + */ +static int s390x_aes_gcm(S390X_AES_GCM_CTX *ctx, const unsigned char *in, + unsigned char *out, size_t len) +{ + const unsigned char *inptr; + unsigned long long mlen; + union { + unsigned int w[4]; + unsigned char b[16]; + } buf; + size_t inlen; + int n, rem, i; + + mlen = ctx->kma.param.tpcl + len; + if (mlen > ((U64(1) << 36) - 32) || (sizeof(len) == 8 && mlen < len)) + return -1; + ctx->kma.param.tpcl = mlen; + + n = ctx->mreslen; + if (n) { + inptr = in; + inlen = len; + while (n && inlen) { + ctx->mres[n] = *inptr; + n = (n + 1) & 0xf; + ++inptr; + --inlen; + } + /* ctx->mres contains a complete block if offset has wrapped around */ + if (!n) { + s390x_kma(ctx->ares, ctx->areslen, ctx->mres, 16, buf.b, + ctx->fc | S390X_KMA_LAAD, &ctx->kma.param); + ctx->fc |= S390X_KMA_HS; + ctx->areslen = 0; + + /* previous call already encrypted/decrypted its remainder, + * see comment below */ + n = ctx->mreslen; + while (n) { + *out = buf.b[n]; + n = (n + 1) & 0xf; + ++out; + ++in; + --len; + } + ctx->mreslen = 0; + } + } + + rem = len & 0xf; + + len &= ~0xf; + if (len) { + s390x_kma(ctx->ares, ctx->areslen, in, len, out, + ctx->fc | S390X_KMA_LAAD, &ctx->kma.param); + in += len; + out += len; + ctx->fc |= S390X_KMA_HS; + ctx->areslen = 0; + } + + /*- + * If there is a remainder, it has to be saved such that it can be + * processed by kma later. However, we also have to do the for-now + * unauthenticated encryption/decryption part here and now... + */ + if (rem) { + if (!ctx->mreslen) { + buf.w[0] = ctx->kma.param.j0.w[0]; + buf.w[1] = ctx->kma.param.j0.w[1]; + buf.w[2] = ctx->kma.param.j0.w[2]; + buf.w[3] = ctx->kma.param.cv.w + 1; + s390x_km(buf.b, 16, ctx->kres, ctx->fc & 0x1f, &ctx->kma.param.k); + } + + n = ctx->mreslen; + for (i = 0; i < rem; i++) { + ctx->mres[n + i] = in[i]; + out[i] = in[i] ^ ctx->kres[n + i]; + } + + ctx->mreslen += rem; + } + return 0; +} + +/*- + * Initialize context structure. Code is big-endian. + */ +static void s390x_aes_gcm_setiv(S390X_AES_GCM_CTX *ctx, + const unsigned char *iv) +{ + ctx->kma.param.t.g[0] = 0; + ctx->kma.param.t.g[1] = 0; + ctx->kma.param.tpcl = 0; + ctx->kma.param.taadl = 0; + ctx->mreslen = 0; + ctx->areslen = 0; + ctx->kreslen = 0; + + if (ctx->ivlen == 12) { + memcpy(&ctx->kma.param.j0, iv, ctx->ivlen); + ctx->kma.param.j0.w[3] = 1; + ctx->kma.param.cv.w = 1; + } else { + /* ctx->iv has the right size and is already padded. */ + memcpy(ctx->iv, iv, ctx->ivlen); + s390x_kma(ctx->iv, S390X_gcm_ivpadlen(ctx->ivlen), NULL, 0, NULL, + ctx->fc, &ctx->kma.param); + ctx->fc |= S390X_KMA_HS; + + ctx->kma.param.j0.g[0] = ctx->kma.param.t.g[0]; + ctx->kma.param.j0.g[1] = ctx->kma.param.t.g[1]; + ctx->kma.param.cv.w = ctx->kma.param.j0.w[3]; + ctx->kma.param.t.g[0] = 0; + ctx->kma.param.t.g[1] = 0; + } +} + +/*- + * Performs various operations on the context structure depending on control + * type. Returns 1 for success, 0 for failure and -1 for unknown control type. + * Code is big-endian. + */ +static int s390x_aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) +{ + S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c); + S390X_AES_GCM_CTX *gctx_out; + EVP_CIPHER_CTX *out; + unsigned char *buf, *iv; + int ivlen, enc, len; + + switch (type) { + case EVP_CTRL_INIT: + ivlen = EVP_CIPHER_CTX_iv_length(c); + iv = EVP_CIPHER_CTX_iv_noconst(c); + gctx->key_set = 0; + gctx->iv_set = 0; + gctx->ivlen = ivlen; + gctx->iv = iv; + gctx->taglen = -1; + gctx->iv_gen = 0; + gctx->tls_aad_len = -1; + return 1; + + case EVP_CTRL_AEAD_SET_IVLEN: + if (arg <= 0) + return 0; + + if (arg != 12) { + iv = EVP_CIPHER_CTX_iv_noconst(c); + len = S390X_gcm_ivpadlen(arg); + + /* Allocate memory for iv if needed. */ + if (gctx->ivlen == 12 || len > S390X_gcm_ivpadlen(gctx->ivlen)) { + if (gctx->iv != iv) + OPENSSL_free(gctx->iv); + + gctx->iv = OPENSSL_malloc(len); + if (gctx->iv == NULL) + return 0; + } + /* Add padding. */ + memset(gctx->iv + arg, 0, len - arg - 8); + *((unsigned long long *)(gctx->iv + len - 8)) = arg << 3; + } + gctx->ivlen = arg; + return 1; + + case EVP_CTRL_AEAD_SET_TAG: + buf = EVP_CIPHER_CTX_buf_noconst(c); + enc = EVP_CIPHER_CTX_encrypting(c); + if (arg <= 0 || arg > 16 || enc) + return 0; + + memcpy(buf, ptr, arg); + gctx->taglen = arg; + return 1; + + case EVP_CTRL_AEAD_GET_TAG: + enc = EVP_CIPHER_CTX_encrypting(c); + if (arg <= 0 || arg > 16 || !enc || gctx->taglen < 0) + return 0; + + memcpy(ptr, gctx->kma.param.t.b, arg); + return 1; + + case EVP_CTRL_GCM_SET_IV_FIXED: + /* Special case: -1 length restores whole iv */ + if (arg == -1) { + memcpy(gctx->iv, ptr, gctx->ivlen); + gctx->iv_gen = 1; + return 1; + } + /* + * Fixed field must be at least 4 bytes and invocation field at least + * 8. + */ + if ((arg < 4) || (gctx->ivlen - arg) < 8) + return 0; + + if (arg) + memcpy(gctx->iv, ptr, arg); + + enc = EVP_CIPHER_CTX_encrypting(c); + if (enc && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0) + return 0; + + gctx->iv_gen = 1; + return 1; + + case EVP_CTRL_GCM_IV_GEN: + if (gctx->iv_gen == 0 || gctx->key_set == 0) + return 0; + + s390x_aes_gcm_setiv(gctx, gctx->iv); + + if (arg <= 0 || arg > gctx->ivlen) + arg = gctx->ivlen; + + memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg); + /* + * Invocation field will be at least 8 bytes in size and so no need + * to check wrap around or increment more than last 8 bytes. + */ + (*(unsigned long long *)(gctx->iv + gctx->ivlen - 8))++; + gctx->iv_set = 1; + return 1; + + case EVP_CTRL_GCM_SET_IV_INV: + enc = EVP_CIPHER_CTX_encrypting(c); + if (gctx->iv_gen == 0 || gctx->key_set == 0 || enc) + return 0; + + memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg); + s390x_aes_gcm_setiv(gctx, gctx->iv); + gctx->iv_set = 1; + return 1; + + case EVP_CTRL_AEAD_TLS1_AAD: + /* Save the aad for later use. */ + if (arg != EVP_AEAD_TLS1_AAD_LEN) + return 0; + + buf = EVP_CIPHER_CTX_buf_noconst(c); + memcpy(buf, ptr, arg); + gctx->tls_aad_len = arg; + + len = buf[arg - 2] << 8 | buf[arg - 1]; + /* Correct length for explicit iv. */ + if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN) + return 0; + len -= EVP_GCM_TLS_EXPLICIT_IV_LEN; + + /* If decrypting correct for tag too. */ + enc = EVP_CIPHER_CTX_encrypting(c); + if (!enc) { + if (len < EVP_GCM_TLS_TAG_LEN) + return 0; + len -= EVP_GCM_TLS_TAG_LEN; + } + buf[arg - 2] = len >> 8; + buf[arg - 1] = len & 0xff; + /* Extra padding: tag appended to record. */ + return EVP_GCM_TLS_TAG_LEN; + + case EVP_CTRL_COPY: + out = ptr; + gctx_out = EVP_C_DATA(S390X_AES_GCM_CTX, out); + iv = EVP_CIPHER_CTX_iv_noconst(c); + + if (gctx->iv == iv) { + gctx_out->iv = EVP_CIPHER_CTX_iv_noconst(out); + } else { + len = S390X_gcm_ivpadlen(gctx->ivlen); + + gctx_out->iv = OPENSSL_malloc(len); + if (gctx_out->iv == NULL) + return 0; + + memcpy(gctx_out->iv, gctx->iv, len); + } + return 1; + + default: + return -1; + } +} + +/*- + * Set key and/or iv. Returns 1 on success. Otherwise 0 is returned. + */ +static int s390x_aes_gcm_init_key(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, int enc) +{ + S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); + int keylen; + + if (iv == NULL && key == NULL) + return 1; + + if (key != NULL) { + keylen = EVP_CIPHER_CTX_key_length(ctx); + memcpy(&gctx->kma.param.k, key, keylen); + + /* Convert key size to function code. */ + gctx->fc = S390X_AES_128 + (((keylen << 3) - 128) >> 6); + if (!enc) + gctx->fc |= S390X_DECRYPT; + + if (iv == NULL && gctx->iv_set) + iv = gctx->iv; + + if (iv != NULL) { + s390x_aes_gcm_setiv(gctx, iv); + gctx->iv_set = 1; + } + gctx->key_set = 1; + } else { + if (gctx->key_set) + s390x_aes_gcm_setiv(gctx, iv); + else + memcpy(gctx->iv, iv, gctx->ivlen); + + gctx->iv_set = 1; + gctx->iv_gen = 0; + } + return 1; +} + +/*- + * En/de-crypt and authenticate TLS packet. Returns the number of bytes written + * if successful. Otherwise -1 is returned. Code is big-endian. + */ +static int s390x_aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); + const unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); + const int enc = EVP_CIPHER_CTX_encrypting(ctx); + int rv = -1; + + if (out != in || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN)) + return -1; + + if (EVP_CIPHER_CTX_ctrl(ctx, enc ? EVP_CTRL_GCM_IV_GEN + : EVP_CTRL_GCM_SET_IV_INV, + EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0) + goto err; + + in += EVP_GCM_TLS_EXPLICIT_IV_LEN; + out += EVP_GCM_TLS_EXPLICIT_IV_LEN; + len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; + + gctx->kma.param.taadl = gctx->tls_aad_len << 3; + gctx->kma.param.tpcl = len << 3; + s390x_kma(buf, gctx->tls_aad_len, in, len, out, + gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param); + + if (enc) { + memcpy(out + len, gctx->kma.param.t.b, EVP_GCM_TLS_TAG_LEN); + rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; + } else { + if (CRYPTO_memcmp(gctx->kma.param.t.b, in + len, + EVP_GCM_TLS_TAG_LEN)) { + OPENSSL_cleanse(out, len); + goto err; + } + rv = len; + } +err: + gctx->iv_set = 0; + gctx->tls_aad_len = -1; + return rv; +} + +/*- + * Called from EVP layer to initialize context, process additional + * authenticated data, en/de-crypt plain/cipher-text and authenticate + * ciphertext or process a TLS packet, depending on context. Returns bytes + * written on success. Otherwise -1 is returned. Code is big-endian. + */ +static int s390x_aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); + unsigned char *buf, tmp[16]; + int enc; + + if (!gctx->key_set) + return -1; + + if (gctx->tls_aad_len >= 0) + return s390x_aes_gcm_tls_cipher(ctx, out, in, len); + + if (!gctx->iv_set) + return -1; + + if (in != NULL) { + if (out == NULL) { + if (s390x_aes_gcm_aad(gctx, in, len)) + return -1; + } else { + if (s390x_aes_gcm(gctx, in, out, len)) + return -1; + } + return len; + } else { + gctx->kma.param.taadl <<= 3; + gctx->kma.param.tpcl <<= 3; + s390x_kma(gctx->ares, gctx->areslen, gctx->mres, gctx->mreslen, tmp, + gctx->fc | S390X_KMA_LAAD | S390X_KMA_LPC, &gctx->kma.param); + /* recall that we already did en-/decrypt gctx->mres + * and returned it to caller... */ + OPENSSL_cleanse(tmp, gctx->mreslen); + gctx->iv_set = 0; + + enc = EVP_CIPHER_CTX_encrypting(ctx); + if (enc) { + gctx->taglen = 16; + } else { + if (gctx->taglen < 0) + return -1; + + buf = EVP_CIPHER_CTX_buf_noconst(ctx); + if (CRYPTO_memcmp(buf, gctx->kma.param.t.b, gctx->taglen)) + return -1; + } + return 0; + } +} + +static int s390x_aes_gcm_cleanup(EVP_CIPHER_CTX *c) +{ + S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, c); + const unsigned char *iv; + + if (gctx == NULL) + return 0; + + iv = EVP_CIPHER_CTX_iv(c); + if (iv != gctx->iv) + OPENSSL_free(gctx->iv); + + OPENSSL_cleanse(gctx, sizeof(*gctx)); + return 1; +} + +# define S390X_AES_XTS_CTX EVP_AES_XTS_CTX +# define S390X_aes_128_xts_CAPABLE 1 /* checked by callee */ +# define S390X_aes_256_xts_CAPABLE 1 + +# define s390x_aes_xts_init_key aes_xts_init_key +static int s390x_aes_xts_init_key(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, int enc); +# define s390x_aes_xts_cipher aes_xts_cipher +static int s390x_aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); +# define s390x_aes_xts_ctrl aes_xts_ctrl +static int s390x_aes_xts_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr); +# define s390x_aes_xts_cleanup aes_xts_cleanup + +# define S390X_aes_128_ccm_CAPABLE (S390X_aes_128_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_128))) +# define S390X_aes_192_ccm_CAPABLE (S390X_aes_192_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_192))) +# define S390X_aes_256_ccm_CAPABLE (S390X_aes_256_CAPABLE && \ + (OPENSSL_s390xcap_P.kmac[0] & \ + S390X_CAPBIT(S390X_AES_256))) + +# define S390X_CCM_AAD_FLAG 0x40 + +/*- + * Set nonce and length fields. Code is big-endian. + */ +static inline void s390x_aes_ccm_setiv(S390X_AES_CCM_CTX *ctx, + const unsigned char *nonce, + size_t mlen) +{ + ctx->aes.ccm.nonce.b[0] &= ~S390X_CCM_AAD_FLAG; + ctx->aes.ccm.nonce.g[1] = mlen; + memcpy(ctx->aes.ccm.nonce.b + 1, nonce, 15 - ctx->aes.ccm.l); +} + +/*- + * Process additional authenticated data. Code is big-endian. + */ +static void s390x_aes_ccm_aad(S390X_AES_CCM_CTX *ctx, const unsigned char *aad, + size_t alen) +{ + unsigned char *ptr; + int i, rem; + + if (!alen) + return; + + ctx->aes.ccm.nonce.b[0] |= S390X_CCM_AAD_FLAG; + + /* Suppress 'type-punned pointer dereference' warning. */ + ptr = ctx->aes.ccm.buf.b; + + if (alen < ((1 << 16) - (1 << 8))) { + *(uint16_t *)ptr = alen; + i = 2; + } else if (sizeof(alen) == 8 + && alen >= (size_t)1 << (32 % (sizeof(alen) * 8))) { + *(uint16_t *)ptr = 0xffff; + *(uint64_t *)(ptr + 2) = alen; + i = 10; + } else { + *(uint16_t *)ptr = 0xfffe; + *(uint32_t *)(ptr + 2) = alen; + i = 6; + } + + while (i < 16 && alen) { + ctx->aes.ccm.buf.b[i] = *aad; + ++aad; + --alen; + ++i; + } + while (i < 16) { + ctx->aes.ccm.buf.b[i] = 0; + ++i; + } + + ctx->aes.ccm.kmac_param.icv.g[0] = 0; + ctx->aes.ccm.kmac_param.icv.g[1] = 0; + s390x_kmac(ctx->aes.ccm.nonce.b, 32, ctx->aes.ccm.fc, + &ctx->aes.ccm.kmac_param); + ctx->aes.ccm.blocks += 2; + + rem = alen & 0xf; + alen &= ~0xf; + if (alen) { + s390x_kmac(aad, alen, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param); + ctx->aes.ccm.blocks += alen >> 4; + aad += alen; + } + if (rem) { + for (i = 0; i < rem; i++) + ctx->aes.ccm.kmac_param.icv.b[i] ^= aad[i]; + + s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16, + ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc, + ctx->aes.ccm.kmac_param.k); + ctx->aes.ccm.blocks++; + } +} + +/*- + * En/de-crypt plain/cipher-text. Compute tag from plaintext. Returns 0 for + * success. + */ +static int s390x_aes_ccm(S390X_AES_CCM_CTX *ctx, const unsigned char *in, + unsigned char *out, size_t len, int enc) +{ + size_t n, rem; + unsigned int i, l, num; + unsigned char flags; + + flags = ctx->aes.ccm.nonce.b[0]; + if (!(flags & S390X_CCM_AAD_FLAG)) { + s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.kmac_param.icv.b, + ctx->aes.ccm.fc, ctx->aes.ccm.kmac_param.k); + ctx->aes.ccm.blocks++; + } + l = flags & 0x7; + ctx->aes.ccm.nonce.b[0] = l; + + /*- + * Reconstruct length from encoded length field + * and initialize it with counter value. + */ + n = 0; + for (i = 15 - l; i < 15; i++) { + n |= ctx->aes.ccm.nonce.b[i]; + ctx->aes.ccm.nonce.b[i] = 0; + n <<= 8; + } + n |= ctx->aes.ccm.nonce.b[15]; + ctx->aes.ccm.nonce.b[15] = 1; + + if (n != len) + return -1; /* length mismatch */ + + if (enc) { + /* Two operations per block plus one for tag encryption */ + ctx->aes.ccm.blocks += (((len + 15) >> 4) << 1) + 1; + if (ctx->aes.ccm.blocks > (1ULL << 61)) + return -2; /* too much data */ + } + + num = 0; + rem = len & 0xf; + len &= ~0xf; + + if (enc) { + /* mac-then-encrypt */ + if (len) + s390x_kmac(in, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param); + if (rem) { + for (i = 0; i < rem; i++) + ctx->aes.ccm.kmac_param.icv.b[i] ^= in[len + i]; + + s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16, + ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc, + ctx->aes.ccm.kmac_param.k); + } + + CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k, + ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b, + &num, (ctr128_f)AES_ctr32_encrypt); + } else { + /* decrypt-then-mac */ + CRYPTO_ctr128_encrypt_ctr32(in, out, len + rem, &ctx->aes.key.k, + ctx->aes.ccm.nonce.b, ctx->aes.ccm.buf.b, + &num, (ctr128_f)AES_ctr32_encrypt); + + if (len) + s390x_kmac(out, len, ctx->aes.ccm.fc, &ctx->aes.ccm.kmac_param); + if (rem) { + for (i = 0; i < rem; i++) + ctx->aes.ccm.kmac_param.icv.b[i] ^= out[len + i]; + + s390x_km(ctx->aes.ccm.kmac_param.icv.b, 16, + ctx->aes.ccm.kmac_param.icv.b, ctx->aes.ccm.fc, + ctx->aes.ccm.kmac_param.k); + } + } + /* encrypt tag */ + for (i = 15 - l; i < 16; i++) + ctx->aes.ccm.nonce.b[i] = 0; + + s390x_km(ctx->aes.ccm.nonce.b, 16, ctx->aes.ccm.buf.b, ctx->aes.ccm.fc, + ctx->aes.ccm.kmac_param.k); + ctx->aes.ccm.kmac_param.icv.g[0] ^= ctx->aes.ccm.buf.g[0]; + ctx->aes.ccm.kmac_param.icv.g[1] ^= ctx->aes.ccm.buf.g[1]; + + ctx->aes.ccm.nonce.b[0] = flags; /* restore flags field */ + return 0; +} + +/*- + * En/de-crypt and authenticate TLS packet. Returns the number of bytes written + * if successful. Otherwise -1 is returned. + */ +static int s390x_aes_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); + unsigned char *ivec = EVP_CIPHER_CTX_iv_noconst(ctx); + unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); + const int enc = EVP_CIPHER_CTX_encrypting(ctx); + + if (out != in + || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->aes.ccm.m)) + return -1; + + if (enc) { + /* Set explicit iv (sequence number). */ + memcpy(out, buf, EVP_CCM_TLS_EXPLICIT_IV_LEN); + } + + len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m; + /*- + * Get explicit iv (sequence number). We already have fixed iv + * (server/client_write_iv) here. + */ + memcpy(ivec + EVP_CCM_TLS_FIXED_IV_LEN, in, EVP_CCM_TLS_EXPLICIT_IV_LEN); + s390x_aes_ccm_setiv(cctx, ivec, len); + + /* Process aad (sequence number|type|version|length) */ + s390x_aes_ccm_aad(cctx, buf, cctx->aes.ccm.tls_aad_len); + + in += EVP_CCM_TLS_EXPLICIT_IV_LEN; + out += EVP_CCM_TLS_EXPLICIT_IV_LEN; + + if (enc) { + if (s390x_aes_ccm(cctx, in, out, len, enc)) + return -1; + + memcpy(out + len, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m); + return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->aes.ccm.m; + } else { + if (!s390x_aes_ccm(cctx, in, out, len, enc)) { + if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, in + len, + cctx->aes.ccm.m)) + return len; + } + + OPENSSL_cleanse(out, len); + return -1; + } +} + +/*- + * Set key and flag field and/or iv. Returns 1 if successful. Otherwise 0 is + * returned. + */ +static int s390x_aes_ccm_init_key(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, int enc) +{ + S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); + unsigned char *ivec; + int keylen; + + if (iv == NULL && key == NULL) + return 1; + + if (key != NULL) { + keylen = EVP_CIPHER_CTX_key_length(ctx); + /* Convert key size to function code. */ + cctx->aes.ccm.fc = S390X_AES_128 + (((keylen << 3) - 128) >> 6); + memcpy(cctx->aes.ccm.kmac_param.k, key, keylen); + + /* Store encoded m and l. */ + cctx->aes.ccm.nonce.b[0] = ((cctx->aes.ccm.l - 1) & 0x7) + | (((cctx->aes.ccm.m - 2) >> 1) & 0x7) << 3; + memset(cctx->aes.ccm.nonce.b + 1, 0, + sizeof(cctx->aes.ccm.nonce.b)); + cctx->aes.ccm.blocks = 0; + + cctx->aes.ccm.key_set = 1; + } + + if (iv != NULL) { + ivec = EVP_CIPHER_CTX_iv_noconst(ctx); + memcpy(ivec, iv, 15 - cctx->aes.ccm.l); + + cctx->aes.ccm.iv_set = 1; + } + + return 1; +} + +/*- + * Called from EVP layer to initialize context, process additional + * authenticated data, en/de-crypt plain/cipher-text and authenticate + * plaintext or process a TLS packet, depending on context. Returns bytes + * written on success. Otherwise -1 is returned. + */ +static int s390x_aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); + const int enc = EVP_CIPHER_CTX_encrypting(ctx); + int rv; + unsigned char *buf, *ivec; + + if (!cctx->aes.ccm.key_set) + return -1; + + if (cctx->aes.ccm.tls_aad_len >= 0) + return s390x_aes_ccm_tls_cipher(ctx, out, in, len); + + /*- + * Final(): Does not return any data. Recall that ccm is mac-then-encrypt + * so integrity must be checked already at Update() i.e., before + * potentially corrupted data is output. + */ + if (in == NULL && out != NULL) + return 0; + + if (!cctx->aes.ccm.iv_set) + return -1; + + if (!enc && !cctx->aes.ccm.tag_set) + return -1; + + if (out == NULL) { + /* Update(): Pass message length. */ + if (in == NULL) { + ivec = EVP_CIPHER_CTX_iv_noconst(ctx); + s390x_aes_ccm_setiv(cctx, ivec, len); + + cctx->aes.ccm.len_set = 1; + return len; + } + + /* Update(): Process aad. */ + if (!cctx->aes.ccm.len_set && len) + return -1; + + s390x_aes_ccm_aad(cctx, in, len); + return len; + } + + /* Update(): Process message. */ + + if (!cctx->aes.ccm.len_set) { + /*- + * In case message length was not previously set explicitely via + * Update(), set it now. + */ + ivec = EVP_CIPHER_CTX_iv_noconst(ctx); + s390x_aes_ccm_setiv(cctx, ivec, len); + + cctx->aes.ccm.len_set = 1; + } + + if (enc) { + if (s390x_aes_ccm(cctx, in, out, len, enc)) + return -1; + + cctx->aes.ccm.tag_set = 1; + return len; + } else { + rv = -1; + + if (!s390x_aes_ccm(cctx, in, out, len, enc)) { + buf = EVP_CIPHER_CTX_buf_noconst(ctx); + if (!CRYPTO_memcmp(cctx->aes.ccm.kmac_param.icv.b, buf, + cctx->aes.ccm.m)) + rv = len; + } + + if (rv == -1) + OPENSSL_cleanse(out, len); + + cctx->aes.ccm.iv_set = 0; + cctx->aes.ccm.tag_set = 0; + cctx->aes.ccm.len_set = 0; + return rv; + } +} + +/*- + * Performs various operations on the context structure depending on control + * type. Returns 1 for success, 0 for failure and -1 for unknown control type. + * Code is big-endian. + */ +static int s390x_aes_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) +{ + S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, c); + unsigned char *buf, *iv; + int enc, len; + + switch (type) { + case EVP_CTRL_INIT: + cctx->aes.ccm.key_set = 0; + cctx->aes.ccm.iv_set = 0; + cctx->aes.ccm.l = 8; + cctx->aes.ccm.m = 12; + cctx->aes.ccm.tag_set = 0; + cctx->aes.ccm.len_set = 0; + cctx->aes.ccm.tls_aad_len = -1; + return 1; + + case EVP_CTRL_AEAD_TLS1_AAD: + if (arg != EVP_AEAD_TLS1_AAD_LEN) + return 0; + + /* Save the aad for later use. */ + buf = EVP_CIPHER_CTX_buf_noconst(c); + memcpy(buf, ptr, arg); + cctx->aes.ccm.tls_aad_len = arg; + + len = *(uint16_t *)(buf + arg - 2); + if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN) + return 0; + + /* Correct length for explicit iv. */ + len -= EVP_CCM_TLS_EXPLICIT_IV_LEN; + + enc = EVP_CIPHER_CTX_encrypting(c); + if (!enc) { + if (len < cctx->aes.ccm.m) + return 0; + + /* Correct length for tag. */ + len -= cctx->aes.ccm.m; + } + + *(uint16_t *)(buf + arg - 2) = len; + /* Extra padding: tag appended to record. */ + return cctx->aes.ccm.m; + + case EVP_CTRL_CCM_SET_IV_FIXED: + if (arg != EVP_CCM_TLS_FIXED_IV_LEN) + return 0; + + /* Copy to first part of the iv. */ + iv = EVP_CIPHER_CTX_iv_noconst(c); + memcpy(iv, ptr, arg); + return 1; + + case EVP_CTRL_AEAD_SET_IVLEN: + arg = 15 - arg; + /* fall-through */ + + case EVP_CTRL_CCM_SET_L: + if (arg < 2 || arg > 8) + return 0; + + cctx->aes.ccm.l = arg; + return 1; + + case EVP_CTRL_AEAD_SET_TAG: + if ((arg & 1) || arg < 4 || arg > 16) + return 0; + + enc = EVP_CIPHER_CTX_encrypting(c); + if (enc && ptr) + return 0; + + if (ptr) { + cctx->aes.ccm.tag_set = 1; + buf = EVP_CIPHER_CTX_buf_noconst(c); + memcpy(buf, ptr, arg); + } + + cctx->aes.ccm.m = arg; + return 1; + + case EVP_CTRL_AEAD_GET_TAG: + enc = EVP_CIPHER_CTX_encrypting(c); + if (!enc || !cctx->aes.ccm.tag_set) + return 0; + + if(arg < cctx->aes.ccm.m) + return 0; + + memcpy(ptr, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m); + cctx->aes.ccm.tag_set = 0; + cctx->aes.ccm.iv_set = 0; + cctx->aes.ccm.len_set = 0; + return 1; + + case EVP_CTRL_COPY: + return 1; + + default: + return -1; + } +} + +# define s390x_aes_ccm_cleanup aes_ccm_cleanup + +# ifndef OPENSSL_NO_OCB +# define S390X_AES_OCB_CTX EVP_AES_OCB_CTX +# define S390X_aes_128_ocb_CAPABLE 0 +# define S390X_aes_192_ocb_CAPABLE 0 +# define S390X_aes_256_ocb_CAPABLE 0 + +# define s390x_aes_ocb_init_key aes_ocb_init_key +static int s390x_aes_ocb_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc); +# define s390x_aes_ocb_cipher aes_ocb_cipher +static int s390x_aes_ocb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len); +# define s390x_aes_ocb_cleanup aes_ocb_cleanup +static int s390x_aes_ocb_cleanup(EVP_CIPHER_CTX *); +# define s390x_aes_ocb_ctrl aes_ocb_ctrl +static int s390x_aes_ocb_ctrl(EVP_CIPHER_CTX *, int type, int arg, void *ptr); +# endif + +# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode, \ + MODE,flags) \ +static const EVP_CIPHER s390x_aes_##keylen##_##mode = { \ + nid##_##keylen##_##nmode,blocksize, \ + keylen / 8, \ + ivlen, \ + flags | EVP_CIPH_##MODE##_MODE, \ + s390x_aes_init_key, \ + s390x_aes_##mode##_cipher, \ + NULL, \ + sizeof(EVP_AES_KEY), \ + NULL, \ + NULL, \ + NULL, \ + NULL \ +}; \ +static const EVP_CIPHER aes_##keylen##_##mode = { \ + nid##_##keylen##_##nmode, \ + blocksize, \ + keylen / 8, \ + ivlen, \ + flags | EVP_CIPH_##MODE##_MODE, \ + aes_init_key, \ + aes_##mode##_cipher, \ + NULL, \ + sizeof(EVP_AES_KEY), \ + NULL,NULL,NULL,NULL \ +}; \ +const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ +{ \ + return S390X_aes_##keylen##_##mode##_CAPABLE ? \ + &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode; \ +} + +# define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags)\ +static const EVP_CIPHER s390x_aes_##keylen##_##mode = { \ + nid##_##keylen##_##mode, \ + blocksize, \ + (EVP_CIPH_##MODE##_MODE == EVP_CIPH_XTS_MODE ? 2 : 1) * keylen / 8, \ + ivlen, \ + flags | EVP_CIPH_##MODE##_MODE, \ + s390x_aes_##mode##_init_key, \ + s390x_aes_##mode##_cipher, \ + s390x_aes_##mode##_cleanup, \ + sizeof(S390X_AES_##MODE##_CTX), \ + NULL, \ + NULL, \ + s390x_aes_##mode##_ctrl, \ + NULL \ +}; \ +static const EVP_CIPHER aes_##keylen##_##mode = { \ + nid##_##keylen##_##mode,blocksize, \ + (EVP_CIPH_##MODE##_MODE == EVP_CIPH_XTS_MODE ? 2 : 1) * keylen / 8, \ + ivlen, \ + flags | EVP_CIPH_##MODE##_MODE, \ + aes_##mode##_init_key, \ + aes_##mode##_cipher, \ + aes_##mode##_cleanup, \ + sizeof(EVP_AES_##MODE##_CTX), \ + NULL, \ + NULL, \ + aes_##mode##_ctrl, \ + NULL \ +}; \ +const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \ +{ \ + return S390X_aes_##keylen##_##mode##_CAPABLE ? \ + &s390x_aes_##keylen##_##mode : &aes_##keylen##_##mode; \ +} + #else # define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \ @@ -2132,6 +3413,10 @@ static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, if (cctx->tls_aad_len >= 0) return aes_ccm_tls_cipher(ctx, out, in, len); + /* EVP_*Final() doesn't return any data */ + if (in == NULL && out != NULL) + return 0; + if (!cctx->iv_set) return -1; @@ -2151,9 +3436,6 @@ static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, CRYPTO_ccm128_aad(ccm, in, len); return len; } - /* EVP_*Final() doesn't return any data */ - if (!in) - return 0; /* If not set length yet do it */ if (!cctx->len_set) { if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx), diff --git a/crypto/evp/e_aes_cbc_hmac_sha1.c b/crypto/evp/e_aes_cbc_hmac_sha1.c index f30f722e..09d24dc3 100644 --- a/crypto/evp/e_aes_cbc_hmac_sha1.c +++ b/crypto/evp/e_aes_cbc_hmac_sha1.c @@ -570,7 +570,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, } # endif -# if 1 +# if 1 /* see original reference version in #else */ len -= SHA_DIGEST_LENGTH; /* amend mac */ if (len >= (256 + SHA_CBLOCK)) { j = (len - (256 + SHA_CBLOCK)) & (0 - SHA_CBLOCK); @@ -664,7 +664,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, } # endif len += SHA_DIGEST_LENGTH; -# else +# else /* pre-lucky-13 reference version of above */ SHA1_Update(&key->md, out, inp_len); res = key->md.num; SHA1_Final(pmac->c, &key->md); @@ -691,7 +691,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, /* verify HMAC */ out += inp_len; len -= inp_len; -# if 1 +# if 1 /* see original reference version in #else */ { unsigned char *p = out + len - 1 - maxpad - SHA_DIGEST_LENGTH; size_t off = out - p; @@ -713,7 +713,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, res = 0 - ((0 - res) >> (sizeof(res) * 8 - 1)); ret &= (int)~res; } -# else +# else /* pre-lucky-13 reference version of above */ for (res = 0, i = 0; i < SHA_DIGEST_LENGTH; i++) res |= out[i] ^ pmac->c[i]; res = 0 - ((0 - res) >> (sizeof(res) * 8 - 1)); diff --git a/crypto/evp/e_aes_cbc_hmac_sha256.c b/crypto/evp/e_aes_cbc_hmac_sha256.c index 13973f11..caac0c9d 100644 --- a/crypto/evp/e_aes_cbc_hmac_sha256.c +++ b/crypto/evp/e_aes_cbc_hmac_sha256.c @@ -559,7 +559,7 @@ static int aesni_cbc_hmac_sha256_cipher(EVP_CIPHER_CTX *ctx, key->md = key->head; SHA256_Update(&key->md, key->aux.tls_aad, plen); -# if 1 +# if 1 /* see original reference version in #else */ len -= SHA256_DIGEST_LENGTH; /* amend mac */ if (len >= (256 + SHA256_CBLOCK)) { j = (len - (256 + SHA256_CBLOCK)) & (0 - SHA256_CBLOCK); @@ -687,7 +687,7 @@ static int aesni_cbc_hmac_sha256_cipher(EVP_CIPHER_CTX *ctx, for (; inp_blocks < pad_blocks; inp_blocks++) sha1_block_data_order(&key->md, data, 1); } -# endif +# endif /* pre-lucky-13 reference version of above */ key->md = key->tail; SHA256_Update(&key->md, pmac->c, SHA256_DIGEST_LENGTH); SHA256_Final(pmac->c, &key->md); @@ -695,7 +695,7 @@ static int aesni_cbc_hmac_sha256_cipher(EVP_CIPHER_CTX *ctx, /* verify HMAC */ out += inp_len; len -= inp_len; -# if 1 +# if 1 /* see original reference version in #else */ { unsigned char *p = out + len - 1 - maxpad - SHA256_DIGEST_LENGTH; @@ -718,7 +718,7 @@ static int aesni_cbc_hmac_sha256_cipher(EVP_CIPHER_CTX *ctx, res = 0 - ((0 - res) >> (sizeof(res) * 8 - 1)); ret &= (int)~res; } -# else +# else /* pre-lucky-13 reference version of above */ for (res = 0, i = 0; i < SHA256_DIGEST_LENGTH; i++) res |= out[i] ^ pmac->c[i]; res = 0 - ((0 - res) >> (sizeof(res) * 8 - 1)); diff --git a/crypto/evp/e_aria.c b/crypto/evp/e_aria.c new file mode 100644 index 00000000..00e008a3 --- /dev/null +++ b/crypto/evp/e_aria.c @@ -0,0 +1,753 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2017, 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 + */ + +#include "internal/cryptlib.h" +#ifndef OPENSSL_NO_ARIA +# include +# include +# include +# include "internal/aria.h" +# include "internal/evp_int.h" +# include "modes_lcl.h" +# include "evp_locl.h" + +/* ARIA subkey Structure */ +typedef struct { + ARIA_KEY ks; +} EVP_ARIA_KEY; + +/* ARIA GCM context */ +typedef struct { + union { + double align; + ARIA_KEY ks; + } ks; /* ARIA subkey to use */ + int key_set; /* Set if key initialised */ + int iv_set; /* Set if an iv is set */ + GCM128_CONTEXT gcm; + unsigned char *iv; /* Temporary IV store */ + int ivlen; /* IV length */ + int taglen; + int iv_gen; /* It is OK to generate IVs */ + int tls_aad_len; /* TLS AAD length */ +} EVP_ARIA_GCM_CTX; + +/* ARIA CCM context */ +typedef struct { + union { + double align; + ARIA_KEY ks; + } ks; /* ARIA key schedule to use */ + int key_set; /* Set if key initialised */ + int iv_set; /* Set if an iv is set */ + int tag_set; /* Set if tag is valid */ + int len_set; /* Set if message length set */ + int L, M; /* L and M parameters from RFC3610 */ + int tls_aad_len; /* TLS AAD length */ + CCM128_CONTEXT ccm; + ccm128_f str; +} EVP_ARIA_CCM_CTX; + +/* The subkey for ARIA is generated. */ +static int aria_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc) +{ + int ret; + int mode = EVP_CIPHER_CTX_mode(ctx); + + if (enc || (mode != EVP_CIPH_ECB_MODE && mode != EVP_CIPH_CBC_MODE)) + ret = aria_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8, + EVP_CIPHER_CTX_get_cipher_data(ctx)); + else + ret = aria_set_decrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8, + EVP_CIPHER_CTX_get_cipher_data(ctx)); + if (ret < 0) { + EVPerr(EVP_F_ARIA_INIT_KEY,EVP_R_ARIA_KEY_SETUP_FAILED); + return 0; + } + return 1; +} + +static void aria_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const ARIA_KEY *key, + unsigned char *ivec, const int enc) +{ + + if (enc) + CRYPTO_cbc128_encrypt(in, out, len, key, ivec, + (block128_f) aria_encrypt); + else + CRYPTO_cbc128_decrypt(in, out, len, key, ivec, + (block128_f) aria_encrypt); +} + +static void aria_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const ARIA_KEY *key, + unsigned char *ivec, int *num, const int enc) +{ + + CRYPTO_cfb128_encrypt(in, out, length, key, ivec, num, enc, + (block128_f) aria_encrypt); +} + +static void aria_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const ARIA_KEY *key, + unsigned char *ivec, int *num, const int enc) +{ + CRYPTO_cfb128_1_encrypt(in, out, length, key, ivec, num, enc, + (block128_f) aria_encrypt); +} + +static void aria_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const ARIA_KEY *key, + unsigned char *ivec, int *num, const int enc) +{ + CRYPTO_cfb128_8_encrypt(in, out, length, key, ivec, num, enc, + (block128_f) aria_encrypt); +} + +static void aria_ecb_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key, const int enc) +{ + aria_encrypt(in, out, key); +} + +static void aria_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const ARIA_KEY *key, + unsigned char *ivec, int *num) +{ + CRYPTO_ofb128_encrypt(in, out, length, key, ivec, num, + (block128_f) aria_encrypt); +} + +IMPLEMENT_BLOCK_CIPHER(aria_128, ks, aria, EVP_ARIA_KEY, + NID_aria_128, 16, 16, 16, 128, + 0, aria_init_key, NULL, + EVP_CIPHER_set_asn1_iv, + EVP_CIPHER_get_asn1_iv, + NULL) +IMPLEMENT_BLOCK_CIPHER(aria_192, ks, aria, EVP_ARIA_KEY, + NID_aria_192, 16, 24, 16, 128, + 0, aria_init_key, NULL, + EVP_CIPHER_set_asn1_iv, + EVP_CIPHER_get_asn1_iv, + NULL) +IMPLEMENT_BLOCK_CIPHER(aria_256, ks, aria, EVP_ARIA_KEY, + NID_aria_256, 16, 32, 16, 128, + 0, aria_init_key, NULL, + EVP_CIPHER_set_asn1_iv, + EVP_CIPHER_get_asn1_iv, + NULL) + +# define IMPLEMENT_ARIA_CFBR(ksize,cbits) \ + IMPLEMENT_CFBR(aria,aria,EVP_ARIA_KEY,ks,ksize,cbits,16,0) +IMPLEMENT_ARIA_CFBR(128,1) +IMPLEMENT_ARIA_CFBR(192,1) +IMPLEMENT_ARIA_CFBR(256,1) +IMPLEMENT_ARIA_CFBR(128,8) +IMPLEMENT_ARIA_CFBR(192,8) +IMPLEMENT_ARIA_CFBR(256,8) + +# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \ +static const EVP_CIPHER aria_##keylen##_##mode = { \ + nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \ + flags|EVP_CIPH_##MODE##_MODE, \ + aria_init_key, \ + aria_##mode##_cipher, \ + NULL, \ + sizeof(EVP_ARIA_KEY), \ + NULL,NULL,NULL,NULL }; \ +const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \ +{ return &aria_##keylen##_##mode; } + +static int aria_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + unsigned int num = EVP_CIPHER_CTX_num(ctx); + EVP_ARIA_KEY *dat = EVP_C_DATA(EVP_ARIA_KEY,ctx); + + CRYPTO_ctr128_encrypt(in, out, len, &dat->ks, + EVP_CIPHER_CTX_iv_noconst(ctx), + EVP_CIPHER_CTX_buf_noconst(ctx), &num, + (block128_f) aria_encrypt); + EVP_CIPHER_CTX_set_num(ctx, num); + return 1; +} + +BLOCK_CIPHER_generic(NID_aria, 128, 1, 16, ctr, ctr, CTR, 0) +BLOCK_CIPHER_generic(NID_aria, 192, 1, 16, ctr, ctr, CTR, 0) +BLOCK_CIPHER_generic(NID_aria, 256, 1, 16, ctr, ctr, CTR, 0) + +/* Authenticated cipher modes (GCM/CCM) */ + +/* increment counter (64-bit int) by 1 */ +static void ctr64_inc(unsigned char *counter) +{ + int n = 8; + unsigned char c; + + do { + --n; + c = counter[n]; + ++c; + counter[n] = c; + if (c) + return; + } while (n); +} + +static int aria_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc) +{ + int ret; + EVP_ARIA_GCM_CTX *gctx = EVP_C_DATA(EVP_ARIA_GCM_CTX,ctx); + + if (!iv && !key) + return 1; + if (key) { + ret = aria_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8, + &gctx->ks.ks); + CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, + (block128_f) aria_encrypt); + if (ret < 0) { + EVPerr(EVP_F_ARIA_GCM_INIT_KEY,EVP_R_ARIA_KEY_SETUP_FAILED); + return 0; + } + + /* + * If we have an iv can set it directly, otherwise use saved IV. + */ + if (iv == NULL && gctx->iv_set) + iv = gctx->iv; + if (iv) { + CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); + gctx->iv_set = 1; + } + gctx->key_set = 1; + } else { + /* If key set use IV, otherwise copy */ + if (gctx->key_set) + CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen); + else + memcpy(gctx->iv, iv, gctx->ivlen); + gctx->iv_set = 1; + gctx->iv_gen = 0; + } + return 1; +} + +static int aria_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) +{ + EVP_ARIA_GCM_CTX *gctx = EVP_C_DATA(EVP_ARIA_GCM_CTX,c); + + switch (type) { + case EVP_CTRL_INIT: + gctx->key_set = 0; + gctx->iv_set = 0; + gctx->ivlen = EVP_CIPHER_CTX_iv_length(c); + gctx->iv = EVP_CIPHER_CTX_iv_noconst(c); + gctx->taglen = -1; + gctx->iv_gen = 0; + gctx->tls_aad_len = -1; + return 1; + + case EVP_CTRL_AEAD_SET_IVLEN: + if (arg <= 0) + return 0; + /* Allocate memory for IV if needed */ + if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) { + if (gctx->iv != EVP_CIPHER_CTX_iv_noconst(c)) + OPENSSL_free(gctx->iv); + gctx->iv = OPENSSL_malloc(arg); + if (gctx->iv == NULL) + return 0; + } + gctx->ivlen = arg; + return 1; + + case EVP_CTRL_AEAD_SET_TAG: + if (arg <= 0 || arg > 16 || EVP_CIPHER_CTX_encrypting(c)) + return 0; + memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg); + gctx->taglen = arg; + return 1; + + case EVP_CTRL_AEAD_GET_TAG: + if (arg <= 0 || arg > 16 || !EVP_CIPHER_CTX_encrypting(c) + || gctx->taglen < 0) + return 0; + memcpy(ptr, EVP_CIPHER_CTX_buf_noconst(c), arg); + return 1; + + case EVP_CTRL_GCM_SET_IV_FIXED: + /* Special case: -1 length restores whole IV */ + if (arg == -1) { + memcpy(gctx->iv, ptr, gctx->ivlen); + gctx->iv_gen = 1; + return 1; + } + /* + * Fixed field must be at least 4 bytes and invocation field at least + * 8. + */ + if ((arg < 4) || (gctx->ivlen - arg) < 8) + return 0; + if (arg) + memcpy(gctx->iv, ptr, arg); + if (EVP_CIPHER_CTX_encrypting(c) + && RAND_bytes(gctx->iv + arg, gctx->ivlen - arg) <= 0) + return 0; + gctx->iv_gen = 1; + return 1; + + case EVP_CTRL_GCM_IV_GEN: + if (gctx->iv_gen == 0 || gctx->key_set == 0) + return 0; + CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen); + if (arg <= 0 || arg > gctx->ivlen) + arg = gctx->ivlen; + memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg); + /* + * Invocation field will be at least 8 bytes in size and so no need + * to check wrap around or increment more than last 8 bytes. + */ + ctr64_inc(gctx->iv + gctx->ivlen - 8); + gctx->iv_set = 1; + return 1; + + case EVP_CTRL_GCM_SET_IV_INV: + if (gctx->iv_gen == 0 || gctx->key_set == 0 + || EVP_CIPHER_CTX_encrypting(c)) + return 0; + memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg); + CRYPTO_gcm128_setiv(&gctx->gcm, gctx->iv, gctx->ivlen); + gctx->iv_set = 1; + return 1; + + case EVP_CTRL_AEAD_TLS1_AAD: + /* Save the AAD for later use */ + if (arg != EVP_AEAD_TLS1_AAD_LEN) + return 0; + memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg); + gctx->tls_aad_len = arg; + { + unsigned int len = + EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8 + | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1]; + /* Correct length for explicit IV */ + if (len < EVP_GCM_TLS_EXPLICIT_IV_LEN) + return 0; + len -= EVP_GCM_TLS_EXPLICIT_IV_LEN; + /* If decrypting correct for tag too */ + if (!EVP_CIPHER_CTX_encrypting(c)) { + if (len < EVP_GCM_TLS_TAG_LEN) + return 0; + len -= EVP_GCM_TLS_TAG_LEN; + } + EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8; + EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff; + } + /* Extra padding: tag appended to record */ + return EVP_GCM_TLS_TAG_LEN; + + case EVP_CTRL_COPY: + { + EVP_CIPHER_CTX *out = ptr; + EVP_ARIA_GCM_CTX *gctx_out = EVP_C_DATA(EVP_ARIA_GCM_CTX,out); + if (gctx->gcm.key) { + if (gctx->gcm.key != &gctx->ks) + return 0; + gctx_out->gcm.key = &gctx_out->ks; + } + if (gctx->iv == EVP_CIPHER_CTX_iv_noconst(c)) + gctx_out->iv = EVP_CIPHER_CTX_iv_noconst(out); + else { + gctx_out->iv = OPENSSL_malloc(gctx->ivlen); + if (gctx_out->iv == NULL) + return 0; + memcpy(gctx_out->iv, gctx->iv, gctx->ivlen); + } + return 1; + } + + default: + return -1; + + } +} + +static int aria_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + EVP_ARIA_GCM_CTX *gctx = EVP_C_DATA(EVP_ARIA_GCM_CTX,ctx); + int rv = -1; + + /* Encrypt/decrypt must be performed in place */ + if (out != in + || len < (EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN)) + return -1; + /* + * Set IV from start of buffer or generate IV and write to start of + * buffer. + */ + if (EVP_CIPHER_CTX_ctrl(ctx, EVP_CIPHER_CTX_encrypting(ctx) ? + EVP_CTRL_GCM_IV_GEN : EVP_CTRL_GCM_SET_IV_INV, + EVP_GCM_TLS_EXPLICIT_IV_LEN, out) <= 0) + goto err; + /* Use saved AAD */ + if (CRYPTO_gcm128_aad(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx), + gctx->tls_aad_len)) + goto err; + /* Fix buffer and length to point to payload */ + in += EVP_GCM_TLS_EXPLICIT_IV_LEN; + out += EVP_GCM_TLS_EXPLICIT_IV_LEN; + len -= EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; + if (EVP_CIPHER_CTX_encrypting(ctx)) { + /* Encrypt payload */ + if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, len)) + goto err; + out += len; + /* Finally write tag */ + CRYPTO_gcm128_tag(&gctx->gcm, out, EVP_GCM_TLS_TAG_LEN); + rv = len + EVP_GCM_TLS_EXPLICIT_IV_LEN + EVP_GCM_TLS_TAG_LEN; + } else { + /* Decrypt */ + if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, len)) + goto err; + /* Retrieve tag */ + CRYPTO_gcm128_tag(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx), + EVP_GCM_TLS_TAG_LEN); + /* If tag mismatch wipe buffer */ + if (CRYPTO_memcmp(EVP_CIPHER_CTX_buf_noconst(ctx), in + len, + EVP_GCM_TLS_TAG_LEN)) { + OPENSSL_cleanse(out, len); + goto err; + } + rv = len; + } + + err: + gctx->iv_set = 0; + gctx->tls_aad_len = -1; + return rv; +} + +static int aria_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + EVP_ARIA_GCM_CTX *gctx = EVP_C_DATA(EVP_ARIA_GCM_CTX,ctx); + + /* If not set up, return error */ + if (!gctx->key_set) + return -1; + + if (gctx->tls_aad_len >= 0) + return aria_gcm_tls_cipher(ctx, out, in, len); + + if (!gctx->iv_set) + return -1; + if (in) { + if (out == NULL) { + if (CRYPTO_gcm128_aad(&gctx->gcm, in, len)) + return -1; + } else if (EVP_CIPHER_CTX_encrypting(ctx)) { + if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, len)) + return -1; + } else { + if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, len)) + return -1; + } + return len; + } + if (!EVP_CIPHER_CTX_encrypting(ctx)) { + if (gctx->taglen < 0) + return -1; + if (CRYPTO_gcm128_finish(&gctx->gcm, + EVP_CIPHER_CTX_buf_noconst(ctx), + gctx->taglen) != 0) + return -1; + gctx->iv_set = 0; + return 0; + } + CRYPTO_gcm128_tag(&gctx->gcm, EVP_CIPHER_CTX_buf_noconst(ctx), 16); + gctx->taglen = 16; + /* Don't reuse the IV */ + gctx->iv_set = 0; + return 0; +} + +static int aria_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc) +{ + int ret; + EVP_ARIA_CCM_CTX *cctx = EVP_C_DATA(EVP_ARIA_CCM_CTX,ctx); + + if (!iv && !key) + return 1; + + if (key) { + ret = aria_set_encrypt_key(key, EVP_CIPHER_CTX_key_length(ctx) * 8, + &cctx->ks.ks); + CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L, + &cctx->ks, (block128_f) aria_encrypt); + if (ret < 0) { + EVPerr(EVP_F_ARIA_CCM_INIT_KEY,EVP_R_ARIA_KEY_SETUP_FAILED); + return 0; + } + cctx->str = NULL; + cctx->key_set = 1; + } + if (iv) { + memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, 15 - cctx->L); + cctx->iv_set = 1; + } + return 1; +} + +static int aria_ccm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) +{ + EVP_ARIA_CCM_CTX *cctx = EVP_C_DATA(EVP_ARIA_CCM_CTX,c); + + switch (type) { + case EVP_CTRL_INIT: + cctx->key_set = 0; + cctx->iv_set = 0; + cctx->L = 8; + cctx->M = 12; + cctx->tag_set = 0; + cctx->len_set = 0; + cctx->tls_aad_len = -1; + return 1; + + case EVP_CTRL_AEAD_TLS1_AAD: + /* Save the AAD for later use */ + if (arg != EVP_AEAD_TLS1_AAD_LEN) + return 0; + memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg); + cctx->tls_aad_len = arg; + { + uint16_t len = + EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] << 8 + | EVP_CIPHER_CTX_buf_noconst(c)[arg - 1]; + /* Correct length for explicit IV */ + if (len < EVP_CCM_TLS_EXPLICIT_IV_LEN) + return 0; + len -= EVP_CCM_TLS_EXPLICIT_IV_LEN; + /* If decrypting correct for tag too */ + if (!EVP_CIPHER_CTX_encrypting(c)) { + if (len < cctx->M) + return 0; + len -= cctx->M; + } + EVP_CIPHER_CTX_buf_noconst(c)[arg - 2] = len >> 8; + EVP_CIPHER_CTX_buf_noconst(c)[arg - 1] = len & 0xff; + } + /* Extra padding: tag appended to record */ + return cctx->M; + + case EVP_CTRL_CCM_SET_IV_FIXED: + /* Sanity check length */ + if (arg != EVP_CCM_TLS_FIXED_IV_LEN) + return 0; + /* Just copy to first part of IV */ + memcpy(EVP_CIPHER_CTX_iv_noconst(c), ptr, arg); + return 1; + + case EVP_CTRL_AEAD_SET_IVLEN: + arg = 15 - arg; + /* fall thru */ + case EVP_CTRL_CCM_SET_L: + if (arg < 2 || arg > 8) + return 0; + cctx->L = arg; + return 1; + case EVP_CTRL_AEAD_SET_TAG: + if ((arg & 1) || arg < 4 || arg > 16) + return 0; + if (EVP_CIPHER_CTX_encrypting(c) && ptr) + return 0; + if (ptr) { + cctx->tag_set = 1; + memcpy(EVP_CIPHER_CTX_buf_noconst(c), ptr, arg); + } + cctx->M = arg; + return 1; + + case EVP_CTRL_AEAD_GET_TAG: + if (!EVP_CIPHER_CTX_encrypting(c) || !cctx->tag_set) + return 0; + if (!CRYPTO_ccm128_tag(&cctx->ccm, ptr, (size_t)arg)) + return 0; + cctx->tag_set = 0; + cctx->iv_set = 0; + cctx->len_set = 0; + return 1; + + case EVP_CTRL_COPY: + { + EVP_CIPHER_CTX *out = ptr; + EVP_ARIA_CCM_CTX *cctx_out = EVP_C_DATA(EVP_ARIA_CCM_CTX,out); + if (cctx->ccm.key) { + if (cctx->ccm.key != &cctx->ks) + return 0; + cctx_out->ccm.key = &cctx_out->ks; + } + return 1; + } + + default: + return -1; + } +} + +static int aria_ccm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + EVP_ARIA_CCM_CTX *cctx = EVP_C_DATA(EVP_ARIA_CCM_CTX,ctx); + CCM128_CONTEXT *ccm = &cctx->ccm; + + /* Encrypt/decrypt must be performed in place */ + if (out != in || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->M)) + return -1; + /* If encrypting set explicit IV from sequence number (start of AAD) */ + if (EVP_CIPHER_CTX_encrypting(ctx)) + memcpy(out, EVP_CIPHER_CTX_buf_noconst(ctx), + EVP_CCM_TLS_EXPLICIT_IV_LEN); + /* Get rest of IV from explicit IV */ + memcpy(EVP_CIPHER_CTX_iv_noconst(ctx) + EVP_CCM_TLS_FIXED_IV_LEN, in, + EVP_CCM_TLS_EXPLICIT_IV_LEN); + /* Correct length value */ + len -= EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M; + if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx), 15 - cctx->L, + len)) + return -1; + /* Use saved AAD */ + CRYPTO_ccm128_aad(ccm, EVP_CIPHER_CTX_buf_noconst(ctx), cctx->tls_aad_len); + /* Fix buffer to point to payload */ + in += EVP_CCM_TLS_EXPLICIT_IV_LEN; + out += EVP_CCM_TLS_EXPLICIT_IV_LEN; + if (EVP_CIPHER_CTX_encrypting(ctx)) { + if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len, cctx->str) + : CRYPTO_ccm128_encrypt(ccm, in, out, len)) + return -1; + if (!CRYPTO_ccm128_tag(ccm, out + len, cctx->M)) + return -1; + return len + EVP_CCM_TLS_EXPLICIT_IV_LEN + cctx->M; + } else { + if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len, cctx->str) + : !CRYPTO_ccm128_decrypt(ccm, in, out, len)) { + unsigned char tag[16]; + if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) { + if (!CRYPTO_memcmp(tag, in + len, cctx->M)) + return len; + } + } + OPENSSL_cleanse(out, len); + return -1; + } +} + +static int aria_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + EVP_ARIA_CCM_CTX *cctx = EVP_C_DATA(EVP_ARIA_CCM_CTX,ctx); + CCM128_CONTEXT *ccm = &cctx->ccm; + + /* If not set up, return error */ + if (!cctx->key_set) + return -1; + + if (cctx->tls_aad_len >= 0) + return aria_ccm_tls_cipher(ctx, out, in, len); + + /* EVP_*Final() doesn't return any data */ + if (in == NULL && out != NULL) + return 0; + + if (!cctx->iv_set) + return -1; + + if (!EVP_CIPHER_CTX_encrypting(ctx) && !cctx->tag_set) + return -1; + if (!out) { + if (!in) { + if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx), + 15 - cctx->L, len)) + return -1; + cctx->len_set = 1; + return len; + } + /* If have AAD need message length */ + if (!cctx->len_set && len) + return -1; + CRYPTO_ccm128_aad(ccm, in, len); + return len; + } + /* If not set length yet do it */ + if (!cctx->len_set) { + if (CRYPTO_ccm128_setiv(ccm, EVP_CIPHER_CTX_iv_noconst(ctx), + 15 - cctx->L, len)) + return -1; + cctx->len_set = 1; + } + if (EVP_CIPHER_CTX_encrypting(ctx)) { + if (cctx->str ? CRYPTO_ccm128_encrypt_ccm64(ccm, in, out, len, cctx->str) + : CRYPTO_ccm128_encrypt(ccm, in, out, len)) + return -1; + cctx->tag_set = 1; + return len; + } else { + int rv = -1; + if (cctx->str ? !CRYPTO_ccm128_decrypt_ccm64(ccm, in, out, len, + cctx->str) : + !CRYPTO_ccm128_decrypt(ccm, in, out, len)) { + unsigned char tag[16]; + if (CRYPTO_ccm128_tag(ccm, tag, cctx->M)) { + if (!CRYPTO_memcmp(tag, EVP_CIPHER_CTX_buf_noconst(ctx), + cctx->M)) + rv = len; + } + } + if (rv == -1) + OPENSSL_cleanse(out, len); + cctx->iv_set = 0; + cctx->tag_set = 0; + cctx->len_set = 0; + return rv; + } +} + +#define ARIA_AUTH_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 \ + | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \ + | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \ + | EVP_CIPH_CUSTOM_COPY | EVP_CIPH_FLAG_AEAD_CIPHER) + +#define BLOCK_CIPHER_aead(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \ +static const EVP_CIPHER aria_##keylen##_##mode = { \ + nid##_##keylen##_##nmode, \ + blocksize, keylen/8, ivlen, \ + ARIA_AUTH_FLAGS|EVP_CIPH_##MODE##_MODE, \ + aria_##mode##_init_key, \ + aria_##mode##_cipher, \ + NULL, \ + sizeof(EVP_ARIA_##MODE##_CTX), \ + NULL,NULL,aria_##mode##_ctrl,NULL }; \ +const EVP_CIPHER *EVP_aria_##keylen##_##mode(void) \ +{ return (EVP_CIPHER*)&aria_##keylen##_##mode; } + +BLOCK_CIPHER_aead(NID_aria, 128, 1, 12, gcm, gcm, GCM, 0) +BLOCK_CIPHER_aead(NID_aria, 192, 1, 12, gcm, gcm, GCM, 0) +BLOCK_CIPHER_aead(NID_aria, 256, 1, 12, gcm, gcm, GCM, 0) + +BLOCK_CIPHER_aead(NID_aria, 128, 1, 12, ccm, ccm, CCM, 0) +BLOCK_CIPHER_aead(NID_aria, 192, 1, 12, ccm, ccm, CCM, 0) +BLOCK_CIPHER_aead(NID_aria, 256, 1, 12, ccm, ccm, CCM, 0) + +#endif diff --git a/crypto/evp/e_chacha20_poly1305.c b/crypto/evp/e_chacha20_poly1305.c index 7fd4f8df..9bf98f16 100644 --- a/crypto/evp/e_chacha20_poly1305.c +++ b/crypto/evp/e_chacha20_poly1305.c @@ -140,7 +140,7 @@ static const EVP_CIPHER chacha20 = { const EVP_CIPHER *EVP_chacha20(void) { - return (&chacha20); + return &chacha20; } # ifndef OPENSSL_NO_POLY1305 diff --git a/crypto/evp/e_null.c b/crypto/evp/e_null.c index 0dfc48ab..18a84682 100644 --- a/crypto/evp/e_null.c +++ b/crypto/evp/e_null.c @@ -32,7 +32,7 @@ static const EVP_CIPHER n_cipher = { const EVP_CIPHER *EVP_enc_null(void) { - return (&n_cipher); + return &n_cipher; } static int null_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, diff --git a/crypto/evp/e_rc2.c b/crypto/evp/e_rc2.c index ed10bb33..80afe316 100644 --- a/crypto/evp/e_rc2.c +++ b/crypto/evp/e_rc2.c @@ -72,12 +72,12 @@ static const EVP_CIPHER r2_40_cbc_cipher = { const EVP_CIPHER *EVP_rc2_64_cbc(void) { - return (&r2_64_cbc_cipher); + return &r2_64_cbc_cipher; } const EVP_CIPHER *EVP_rc2_40_cbc(void) { - return (&r2_40_cbc_cipher); + return &r2_40_cbc_cipher; } static int rc2_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, @@ -94,13 +94,13 @@ static int rc2_meth_to_magic(EVP_CIPHER_CTX *e) EVP_CIPHER_CTX_ctrl(e, EVP_CTRL_GET_RC2_KEY_BITS, 0, &i); if (i == 128) - return (RC2_128_MAGIC); + return RC2_128_MAGIC; else if (i == 64) - return (RC2_64_MAGIC); + return RC2_64_MAGIC; else if (i == 40) - return (RC2_40_MAGIC); + return RC2_40_MAGIC; else - return (0); + return 0; } static int rc2_magic_to_meth(int i) @@ -113,7 +113,7 @@ static int rc2_magic_to_meth(int i) return 40; else { EVPerr(EVP_F_RC2_MAGIC_TO_METH, EVP_R_UNSUPPORTED_KEY_SIZE); - return (0); + return 0; } } @@ -155,7 +155,7 @@ static int rc2_set_asn1_type_and_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type) (unsigned char *)EVP_CIPHER_CTX_original_iv(c), j); } - return (i); + return i; } static int rc2_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) diff --git a/crypto/evp/e_rc4.c b/crypto/evp/e_rc4.c index ea95deab..d16abdd0 100644 --- a/crypto/evp/e_rc4.c +++ b/crypto/evp/e_rc4.c @@ -58,12 +58,12 @@ static const EVP_CIPHER r4_40_cipher = { const EVP_CIPHER *EVP_rc4(void) { - return (&r4_cipher); + return &r4_cipher; } const EVP_CIPHER *EVP_rc4_40(void) { - return (&r4_40_cipher); + return &r4_40_cipher; } static int rc4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, diff --git a/crypto/evp/e_rc4_hmac_md5.c b/crypto/evp/e_rc4_hmac_md5.c index 8ab18c14..b1e8ccd6 100644 --- a/crypto/evp/e_rc4_hmac_md5.c +++ b/crypto/evp/e_rc4_hmac_md5.c @@ -257,6 +257,6 @@ static EVP_CIPHER r4_hmac_md5_cipher = { const EVP_CIPHER *EVP_rc4_hmac_md5(void) { - return (&r4_hmac_md5_cipher); + return &r4_hmac_md5_cipher; } #endif diff --git a/crypto/evp/e_rc5.c b/crypto/evp/e_rc5.c index f69ba5b2..a2f26d8c 100644 --- a/crypto/evp/e_rc5.c +++ b/crypto/evp/e_rc5.c @@ -13,7 +13,7 @@ #ifndef OPENSSL_NO_RC5 # include -# include +# include "internal/evp_int.h" # include # include "evp_locl.h" # include diff --git a/crypto/evp/e_sm4.c b/crypto/evp/e_sm4.c new file mode 100644 index 00000000..79deb656 --- /dev/null +++ b/crypto/evp/e_sm4.c @@ -0,0 +1,100 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017 Ribose Inc. All Rights Reserved. + * Ported from Ribose contributions from Botan. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 "internal/cryptlib.h" +#ifndef OPENSSL_NO_SM4 +# include +# include +# include "internal/sm4.h" +# include "internal/evp_int.h" + +typedef struct { + SM4_KEY ks; +} EVP_SM4_KEY; + +static int sm4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, + const unsigned char *iv, int enc) +{ + SM4_set_key(key, EVP_CIPHER_CTX_get_cipher_data(ctx)); + return 1; +} + +static void sm4_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SM4_KEY *key, + unsigned char *ivec, const int enc) +{ + if (enc) + CRYPTO_cbc128_encrypt(in, out, len, key, ivec, + (block128_f)SM4_encrypt); + else + CRYPTO_cbc128_decrypt(in, out, len, key, ivec, + (block128_f)SM4_decrypt); +} + +static void sm4_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, int *num, const int enc) +{ + CRYPTO_cfb128_encrypt(in, out, length, key, ivec, num, enc, + (block128_f)SM4_encrypt); +} + +static void sm4_ecb_encrypt(const unsigned char *in, unsigned char *out, + const SM4_KEY *key, const int enc) +{ + if (enc) + SM4_encrypt(in, out, key); + else + SM4_decrypt(in, out, key); +} + +static void sm4_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const SM4_KEY *key, + unsigned char *ivec, int *num) +{ + CRYPTO_ofb128_encrypt(in, out, length, key, ivec, num, + (block128_f)SM4_encrypt); +} + +IMPLEMENT_BLOCK_CIPHER(sm4, ks, sm4, EVP_SM4_KEY, NID_sm4, + 16, 16, 16, 128, EVP_CIPH_FLAG_DEFAULT_ASN1, + sm4_init_key, 0, 0, 0, 0) + +static int sm4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, + const unsigned char *in, size_t len) +{ + unsigned int num = EVP_CIPHER_CTX_num(ctx); + EVP_SM4_KEY *dat = EVP_C_DATA(EVP_SM4_KEY, ctx); + + CRYPTO_ctr128_encrypt(in, out, len, &dat->ks, + EVP_CIPHER_CTX_iv_noconst(ctx), + EVP_CIPHER_CTX_buf_noconst(ctx), &num, + (block128_f)SM4_encrypt); + EVP_CIPHER_CTX_set_num(ctx, num); + return 1; +} + +static const EVP_CIPHER sm4_ctr_mode = { + NID_sm4_ctr, 1, 16, 16, + EVP_CIPH_CTR_MODE, + sm4_init_key, + sm4_ctr_cipher, + NULL, + sizeof(EVP_SM4_KEY), + NULL, NULL, NULL, NULL +}; + +const EVP_CIPHER *EVP_sm4_ctr(void) +{ + return &sm4_ctr_mode; +} + +#endif diff --git a/crypto/evp/e_xcbc_d.c b/crypto/evp/e_xcbc_d.c index effaf5cc..57ce813d 100644 --- a/crypto/evp/e_xcbc_d.c +++ b/crypto/evp/e_xcbc_d.c @@ -46,7 +46,7 @@ static const EVP_CIPHER d_xcbc_cipher = { const EVP_CIPHER *EVP_desx_cbc(void) { - return (&d_xcbc_cipher); + return &d_xcbc_cipher; } static int desx_cbc_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, diff --git a/crypto/evp/encode.c b/crypto/evp/encode.c index abb10443..17198ff6 100644 --- a/crypto/evp/encode.c +++ b/crypto/evp/encode.c @@ -212,7 +212,7 @@ int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen) } *t = '\0'; - return (ret); + return ret; } void EVP_DecodeInit(EVP_ENCODE_CTX *ctx) @@ -345,7 +345,7 @@ end: /* Legacy behaviour. This should probably rather be zeroed on error. */ *outl = ret; ctx->num = n; - return (rv); + return rv; } int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n) @@ -367,7 +367,7 @@ int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n) n--; if (n % 4 != 0) - return (-1); + return -1; for (i = 0; i < n; i += 4) { a = conv_ascii2bin(*(f++)); @@ -375,7 +375,7 @@ int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n) c = conv_ascii2bin(*(f++)); d = conv_ascii2bin(*(f++)); if ((a & 0x80) || (b & 0x80) || (c & 0x80) || (d & 0x80)) - return (-1); + return -1; l = ((((unsigned long)a) << 18L) | (((unsigned long)b) << 12L) | (((unsigned long)c) << 6L) | (((unsigned long)d))); @@ -384,7 +384,7 @@ int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n) *(t++) = (unsigned char)(l) & 0xff; ret += 3; } - return (ret); + return ret; } int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl) @@ -395,10 +395,10 @@ int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl) if (ctx->num != 0) { i = EVP_DecodeBlock(out, ctx->enc_data, ctx->num); if (i < 0) - return (-1); + return -1; ctx->num = 0; *outl = i; - return (1); + return 1; } else - return (1); + return 1; } diff --git a/crypto/evp/evp_cnf.c b/crypto/evp/evp_cnf.c index 71d13b8d..8df2c06e 100644 --- a/crypto/evp/evp_cnf.c +++ b/crypto/evp/evp_cnf.c @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2012-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 @@ -8,7 +8,6 @@ */ #include -#include #include #include "internal/cryptlib.h" #include @@ -38,16 +37,8 @@ static int alg_module_init(CONF_IMODULE *md, const CONF *cnf) return 0; } if (m > 0) { -#ifdef OPENSSL_FIPS - if (!FIPS_mode() && !FIPS_mode_set(1)) { - EVPerr(EVP_F_ALG_MODULE_INIT, - EVP_R_ERROR_SETTING_FIPS_MODE); - return 0; - } -#else EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_FIPS_MODE_NOT_SUPPORTED); return 0; -#endif } } else { EVPerr(EVP_F_ALG_MODULE_INIT, EVP_R_UNKNOWN_OPTION); diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c index e5807edd..2c4a2db6 100644 --- a/crypto/evp/evp_enc.c +++ b/crypto/evp/evp_enc.c @@ -523,7 +523,7 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) if (b > 1) { if (ctx->buf_len || !ctx->final_used) { EVPerr(EVP_F_EVP_DECRYPTFINAL_EX, EVP_R_WRONG_FINAL_BLOCK_LENGTH); - return (0); + return 0; } OPENSSL_assert(b <= sizeof(ctx->final)); @@ -534,12 +534,12 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) n = ctx->final[b - 1]; if (n == 0 || n > (int)b) { EVPerr(EVP_F_EVP_DECRYPTFINAL_EX, EVP_R_BAD_DECRYPT); - return (0); + return 0; } for (i = 0; i < n; i++) { if (ctx->final[--b] != n) { EVPerr(EVP_F_EVP_DECRYPTFINAL_EX, EVP_R_BAD_DECRYPT); - return (0); + return 0; } } n = ctx->cipher->block_size - n; @@ -548,7 +548,7 @@ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) *outl = n; } else *outl = 0; - return (1); + return 1; } int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *c, int keylen) diff --git a/crypto/evp/evp_err.c b/crypto/evp/evp_err.c index c4b163f0..a43de746 100644 --- a/crypto/evp/evp_err.c +++ b/crypto/evp/evp_err.c @@ -8,166 +8,235 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_EVP,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_EVP,0,reason) - -static ERR_STRING_DATA EVP_str_functs[] = { - {ERR_FUNC(EVP_F_AESNI_INIT_KEY), "aesni_init_key"}, - {ERR_FUNC(EVP_F_AES_INIT_KEY), "aes_init_key"}, - {ERR_FUNC(EVP_F_AES_OCB_CIPHER), "aes_ocb_cipher"}, - {ERR_FUNC(EVP_F_AES_T4_INIT_KEY), "aes_t4_init_key"}, - {ERR_FUNC(EVP_F_AES_WRAP_CIPHER), "aes_wrap_cipher"}, - {ERR_FUNC(EVP_F_ALG_MODULE_INIT), "alg_module_init"}, - {ERR_FUNC(EVP_F_CAMELLIA_INIT_KEY), "camellia_init_key"}, - {ERR_FUNC(EVP_F_CHACHA20_POLY1305_CTRL), "chacha20_poly1305_ctrl"}, - {ERR_FUNC(EVP_F_CMLL_T4_INIT_KEY), "cmll_t4_init_key"}, - {ERR_FUNC(EVP_F_DES_EDE3_WRAP_CIPHER), "des_ede3_wrap_cipher"}, - {ERR_FUNC(EVP_F_DO_SIGVER_INIT), "do_sigver_init"}, - {ERR_FUNC(EVP_F_EVP_CIPHERINIT_EX), "EVP_CipherInit_ex"}, - {ERR_FUNC(EVP_F_EVP_CIPHER_CTX_COPY), "EVP_CIPHER_CTX_copy"}, - {ERR_FUNC(EVP_F_EVP_CIPHER_CTX_CTRL), "EVP_CIPHER_CTX_ctrl"}, - {ERR_FUNC(EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH), +static const ERR_STRING_DATA EVP_str_functs[] = { + {ERR_PACK(ERR_LIB_EVP, EVP_F_AESNI_INIT_KEY, 0), "aesni_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_AES_INIT_KEY, 0), "aes_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_AES_OCB_CIPHER, 0), "aes_ocb_cipher"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_AES_T4_INIT_KEY, 0), "aes_t4_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_AES_WRAP_CIPHER, 0), "aes_wrap_cipher"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_ALG_MODULE_INIT, 0), "alg_module_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_ARIA_CCM_INIT_KEY, 0), "aria_ccm_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_ARIA_GCM_INIT_KEY, 0), "aria_gcm_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_ARIA_INIT_KEY, 0), "aria_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_CAMELLIA_INIT_KEY, 0), "camellia_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_CHACHA20_POLY1305_CTRL, 0), + "chacha20_poly1305_ctrl"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_CMLL_T4_INIT_KEY, 0), "cmll_t4_init_key"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_DES_EDE3_WRAP_CIPHER, 0), + "des_ede3_wrap_cipher"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_DO_SIGVER_INIT, 0), "do_sigver_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_CIPHERINIT_EX, 0), "EVP_CipherInit_ex"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_CIPHER_CTX_COPY, 0), + "EVP_CIPHER_CTX_copy"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_CIPHER_CTX_CTRL, 0), + "EVP_CIPHER_CTX_ctrl"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH, 0), "EVP_CIPHER_CTX_set_key_length"}, - {ERR_FUNC(EVP_F_EVP_DECRYPTFINAL_EX), "EVP_DecryptFinal_ex"}, - {ERR_FUNC(EVP_F_EVP_DECRYPTUPDATE), "EVP_DecryptUpdate"}, - {ERR_FUNC(EVP_F_EVP_DIGESTINIT_EX), "EVP_DigestInit_ex"}, - {ERR_FUNC(EVP_F_EVP_ENCRYPTFINAL_EX), "EVP_EncryptFinal_ex"}, - {ERR_FUNC(EVP_F_EVP_ENCRYPTUPDATE), "EVP_EncryptUpdate"}, - {ERR_FUNC(EVP_F_EVP_MD_CTX_COPY_EX), "EVP_MD_CTX_copy_ex"}, - {ERR_FUNC(EVP_F_EVP_MD_SIZE), "EVP_MD_size"}, - {ERR_FUNC(EVP_F_EVP_OPENINIT), "EVP_OpenInit"}, - {ERR_FUNC(EVP_F_EVP_PBE_ALG_ADD), "EVP_PBE_alg_add"}, - {ERR_FUNC(EVP_F_EVP_PBE_ALG_ADD_TYPE), "EVP_PBE_alg_add_type"}, - {ERR_FUNC(EVP_F_EVP_PBE_CIPHERINIT), "EVP_PBE_CipherInit"}, - {ERR_FUNC(EVP_F_EVP_PBE_SCRYPT), "EVP_PBE_scrypt"}, - {ERR_FUNC(EVP_F_EVP_PKCS82PKEY), "EVP_PKCS82PKEY"}, - {ERR_FUNC(EVP_F_EVP_PKEY2PKCS8), "EVP_PKEY2PKCS8"}, - {ERR_FUNC(EVP_F_EVP_PKEY_ASN1_ADD0), "EVP_PKEY_asn1_add0"}, - {ERR_FUNC(EVP_F_EVP_PKEY_COPY_PARAMETERS), "EVP_PKEY_copy_parameters"}, - {ERR_FUNC(EVP_F_EVP_PKEY_CTX_CTRL), "EVP_PKEY_CTX_ctrl"}, - {ERR_FUNC(EVP_F_EVP_PKEY_CTX_CTRL_STR), "EVP_PKEY_CTX_ctrl_str"}, - {ERR_FUNC(EVP_F_EVP_PKEY_CTX_DUP), "EVP_PKEY_CTX_dup"}, - {ERR_FUNC(EVP_F_EVP_PKEY_DECRYPT), "EVP_PKEY_decrypt"}, - {ERR_FUNC(EVP_F_EVP_PKEY_DECRYPT_INIT), "EVP_PKEY_decrypt_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_DECRYPT_OLD), "EVP_PKEY_decrypt_old"}, - {ERR_FUNC(EVP_F_EVP_PKEY_DERIVE), "EVP_PKEY_derive"}, - {ERR_FUNC(EVP_F_EVP_PKEY_DERIVE_INIT), "EVP_PKEY_derive_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_DERIVE_SET_PEER), "EVP_PKEY_derive_set_peer"}, - {ERR_FUNC(EVP_F_EVP_PKEY_ENCRYPT), "EVP_PKEY_encrypt"}, - {ERR_FUNC(EVP_F_EVP_PKEY_ENCRYPT_INIT), "EVP_PKEY_encrypt_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_ENCRYPT_OLD), "EVP_PKEY_encrypt_old"}, - {ERR_FUNC(EVP_F_EVP_PKEY_GET0_DH), "EVP_PKEY_get0_DH"}, - {ERR_FUNC(EVP_F_EVP_PKEY_GET0_DSA), "EVP_PKEY_get0_DSA"}, - {ERR_FUNC(EVP_F_EVP_PKEY_GET0_EC_KEY), "EVP_PKEY_get0_EC_KEY"}, - {ERR_FUNC(EVP_F_EVP_PKEY_GET0_HMAC), "EVP_PKEY_get0_hmac"}, - {ERR_FUNC(EVP_F_EVP_PKEY_GET0_RSA), "EVP_PKEY_get0_RSA"}, - {ERR_FUNC(EVP_F_EVP_PKEY_KEYGEN), "EVP_PKEY_keygen"}, - {ERR_FUNC(EVP_F_EVP_PKEY_KEYGEN_INIT), "EVP_PKEY_keygen_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_NEW), "EVP_PKEY_new"}, - {ERR_FUNC(EVP_F_EVP_PKEY_PARAMGEN), "EVP_PKEY_paramgen"}, - {ERR_FUNC(EVP_F_EVP_PKEY_PARAMGEN_INIT), "EVP_PKEY_paramgen_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_SET1_ENGINE), "EVP_PKEY_set1_engine"}, - {ERR_FUNC(EVP_F_EVP_PKEY_SIGN), "EVP_PKEY_sign"}, - {ERR_FUNC(EVP_F_EVP_PKEY_SIGN_INIT), "EVP_PKEY_sign_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_VERIFY), "EVP_PKEY_verify"}, - {ERR_FUNC(EVP_F_EVP_PKEY_VERIFY_INIT), "EVP_PKEY_verify_init"}, - {ERR_FUNC(EVP_F_EVP_PKEY_VERIFY_RECOVER), "EVP_PKEY_verify_recover"}, - {ERR_FUNC(EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT), + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DECRYPTFINAL_EX, 0), + "EVP_DecryptFinal_ex"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DECRYPTUPDATE, 0), "EVP_DecryptUpdate"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DIGESTFINALXOF, 0), "EVP_DigestFinalXOF"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DIGESTINIT_EX, 0), "EVP_DigestInit_ex"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_ENCRYPTFINAL_EX, 0), + "EVP_EncryptFinal_ex"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_ENCRYPTUPDATE, 0), "EVP_EncryptUpdate"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_MD_CTX_COPY_EX, 0), "EVP_MD_CTX_copy_ex"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_MD_SIZE, 0), "EVP_MD_size"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_OPENINIT, 0), "EVP_OpenInit"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PBE_ALG_ADD, 0), "EVP_PBE_alg_add"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PBE_ALG_ADD_TYPE, 0), + "EVP_PBE_alg_add_type"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PBE_CIPHERINIT, 0), "EVP_PBE_CipherInit"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PBE_SCRYPT, 0), "EVP_PBE_scrypt"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKCS82PKEY, 0), "EVP_PKCS82PKEY"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY2PKCS8, 0), "EVP_PKEY2PKCS8"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_ASN1_ADD0, 0), "EVP_PKEY_asn1_add0"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CHECK, 0), "EVP_PKEY_check"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_COPY_PARAMETERS, 0), + "EVP_PKEY_copy_parameters"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CTX_CTRL, 0), "EVP_PKEY_CTX_ctrl"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CTX_CTRL_STR, 0), + "EVP_PKEY_CTX_ctrl_str"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CTX_DUP, 0), "EVP_PKEY_CTX_dup"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_CTX_MD, 0), "EVP_PKEY_CTX_md"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_DECRYPT, 0), "EVP_PKEY_decrypt"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_DECRYPT_INIT, 0), + "EVP_PKEY_decrypt_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_DECRYPT_OLD, 0), + "EVP_PKEY_decrypt_old"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_DERIVE, 0), "EVP_PKEY_derive"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_DERIVE_INIT, 0), + "EVP_PKEY_derive_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_DERIVE_SET_PEER, 0), + "EVP_PKEY_derive_set_peer"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_ENCRYPT, 0), "EVP_PKEY_encrypt"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_ENCRYPT_INIT, 0), + "EVP_PKEY_encrypt_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_ENCRYPT_OLD, 0), + "EVP_PKEY_encrypt_old"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_DH, 0), "EVP_PKEY_get0_DH"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_DSA, 0), "EVP_PKEY_get0_DSA"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_EC_KEY, 0), + "EVP_PKEY_get0_EC_KEY"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_HMAC, 0), "EVP_PKEY_get0_hmac"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_POLY1305, 0), + "EVP_PKEY_get0_poly1305"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_RSA, 0), "EVP_PKEY_get0_RSA"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_GET0_SIPHASH, 0), + "EVP_PKEY_get0_siphash"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_KEYGEN, 0), "EVP_PKEY_keygen"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_KEYGEN_INIT, 0), + "EVP_PKEY_keygen_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_NEW, 0), "EVP_PKEY_new"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_PARAMGEN, 0), "EVP_PKEY_paramgen"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_PARAMGEN_INIT, 0), + "EVP_PKEY_paramgen_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_PARAM_CHECK, 0), + "EVP_PKEY_param_check"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_PUBLIC_CHECK, 0), + "EVP_PKEY_public_check"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_SET1_ENGINE, 0), + "EVP_PKEY_set1_engine"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_SIGN, 0), "EVP_PKEY_sign"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_SIGN_INIT, 0), "EVP_PKEY_sign_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_VERIFY, 0), "EVP_PKEY_verify"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_VERIFY_INIT, 0), + "EVP_PKEY_verify_init"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_VERIFY_RECOVER, 0), + "EVP_PKEY_verify_recover"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT, 0), "EVP_PKEY_verify_recover_init"}, - {ERR_FUNC(EVP_F_EVP_SIGNFINAL), "EVP_SignFinal"}, - {ERR_FUNC(EVP_F_EVP_VERIFYFINAL), "EVP_VerifyFinal"}, - {ERR_FUNC(EVP_F_INT_CTX_NEW), "int_ctx_new"}, - {ERR_FUNC(EVP_F_PKCS5_PBE_KEYIVGEN), "PKCS5_PBE_keyivgen"}, - {ERR_FUNC(EVP_F_PKCS5_V2_PBE_KEYIVGEN), "PKCS5_v2_PBE_keyivgen"}, - {ERR_FUNC(EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN), "PKCS5_v2_PBKDF2_keyivgen"}, - {ERR_FUNC(EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN), "PKCS5_v2_scrypt_keyivgen"}, - {ERR_FUNC(EVP_F_PKEY_SET_TYPE), "pkey_set_type"}, - {ERR_FUNC(EVP_F_RC2_MAGIC_TO_METH), "rc2_magic_to_meth"}, - {ERR_FUNC(EVP_F_RC5_CTRL), "rc5_ctrl"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_SIGNFINAL, 0), "EVP_SignFinal"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_VERIFYFINAL, 0), "EVP_VerifyFinal"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_INT_CTX_NEW, 0), "int_ctx_new"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_PKCS5_PBE_KEYIVGEN, 0), "PKCS5_PBE_keyivgen"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_PKCS5_V2_PBE_KEYIVGEN, 0), + "PKCS5_v2_PBE_keyivgen"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN, 0), + "PKCS5_v2_PBKDF2_keyivgen"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN, 0), + "PKCS5_v2_scrypt_keyivgen"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_PKEY_SET_TYPE, 0), "pkey_set_type"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_RC2_MAGIC_TO_METH, 0), "rc2_magic_to_meth"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_RC5_CTRL, 0), "rc5_ctrl"}, + {ERR_PACK(ERR_LIB_EVP, EVP_F_UPDATE, 0), "update"}, {0, NULL} }; -static ERR_STRING_DATA EVP_str_reasons[] = { - {ERR_REASON(EVP_R_AES_KEY_SETUP_FAILED), "aes key setup failed"}, - {ERR_REASON(EVP_R_BAD_DECRYPT), "bad decrypt"}, - {ERR_REASON(EVP_R_BUFFER_TOO_SMALL), "buffer too small"}, - {ERR_REASON(EVP_R_CAMELLIA_KEY_SETUP_FAILED), - "camellia key setup failed"}, - {ERR_REASON(EVP_R_CIPHER_PARAMETER_ERROR), "cipher parameter error"}, - {ERR_REASON(EVP_R_COMMAND_NOT_SUPPORTED), "command not supported"}, - {ERR_REASON(EVP_R_COPY_ERROR), "copy error"}, - {ERR_REASON(EVP_R_CTRL_NOT_IMPLEMENTED), "ctrl not implemented"}, - {ERR_REASON(EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED), - "ctrl operation not implemented"}, - {ERR_REASON(EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH), - "data not multiple of block length"}, - {ERR_REASON(EVP_R_DECODE_ERROR), "decode error"}, - {ERR_REASON(EVP_R_DIFFERENT_KEY_TYPES), "different key types"}, - {ERR_REASON(EVP_R_DIFFERENT_PARAMETERS), "different parameters"}, - {ERR_REASON(EVP_R_ERROR_LOADING_SECTION), "error loading section"}, - {ERR_REASON(EVP_R_ERROR_SETTING_FIPS_MODE), "error setting fips mode"}, - {ERR_REASON(EVP_R_EXPECTING_AN_HMAC_KEY), "expecting an hmac key"}, - {ERR_REASON(EVP_R_EXPECTING_AN_RSA_KEY), "expecting an rsa key"}, - {ERR_REASON(EVP_R_EXPECTING_A_DH_KEY), "expecting a dh key"}, - {ERR_REASON(EVP_R_EXPECTING_A_DSA_KEY), "expecting a dsa key"}, - {ERR_REASON(EVP_R_EXPECTING_A_EC_KEY), "expecting a ec key"}, - {ERR_REASON(EVP_R_FIPS_MODE_NOT_SUPPORTED), "fips mode not supported"}, - {ERR_REASON(EVP_R_ILLEGAL_SCRYPT_PARAMETERS), - "illegal scrypt parameters"}, - {ERR_REASON(EVP_R_INITIALIZATION_ERROR), "initialization error"}, - {ERR_REASON(EVP_R_INPUT_NOT_INITIALIZED), "input not initialized"}, - {ERR_REASON(EVP_R_INVALID_DIGEST), "invalid digest"}, - {ERR_REASON(EVP_R_INVALID_FIPS_MODE), "invalid fips mode"}, - {ERR_REASON(EVP_R_INVALID_KEY), "invalid key"}, - {ERR_REASON(EVP_R_INVALID_KEY_LENGTH), "invalid key length"}, - {ERR_REASON(EVP_R_INVALID_OPERATION), "invalid operation"}, - {ERR_REASON(EVP_R_KEYGEN_FAILURE), "keygen failure"}, - {ERR_REASON(EVP_R_MEMORY_LIMIT_EXCEEDED), "memory limit exceeded"}, - {ERR_REASON(EVP_R_MESSAGE_DIGEST_IS_NULL), "message digest is null"}, - {ERR_REASON(EVP_R_METHOD_NOT_SUPPORTED), "method not supported"}, - {ERR_REASON(EVP_R_MISSING_PARAMETERS), "missing parameters"}, - {ERR_REASON(EVP_R_NO_CIPHER_SET), "no cipher set"}, - {ERR_REASON(EVP_R_NO_DEFAULT_DIGEST), "no default digest"}, - {ERR_REASON(EVP_R_NO_DIGEST_SET), "no digest set"}, - {ERR_REASON(EVP_R_NO_KEY_SET), "no key set"}, - {ERR_REASON(EVP_R_NO_OPERATION_SET), "no operation set"}, - {ERR_REASON(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE), - "operation not supported for this keytype"}, - {ERR_REASON(EVP_R_OPERATON_NOT_INITIALIZED), "operaton not initialized"}, - {ERR_REASON(EVP_R_PARTIALLY_OVERLAPPING), - "partially overlapping buffers"}, - {ERR_REASON(EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED), - "pkey application asn1 method already registered"}, - {ERR_REASON(EVP_R_PKEY_ASN1_METHOD_ALREADY_REGISTERED), - "pkey asn1 method already registered"}, - {ERR_REASON(EVP_R_PRIVATE_KEY_DECODE_ERROR), "private key decode error"}, - {ERR_REASON(EVP_R_PRIVATE_KEY_ENCODE_ERROR), "private key encode error"}, - {ERR_REASON(EVP_R_PUBLIC_KEY_NOT_RSA), "public key not rsa"}, - {ERR_REASON(EVP_R_UNKNOWN_CIPHER), "unknown cipher"}, - {ERR_REASON(EVP_R_UNKNOWN_DIGEST), "unknown digest"}, - {ERR_REASON(EVP_R_UNKNOWN_OPTION), "unknown option"}, - {ERR_REASON(EVP_R_UNKNOWN_PBE_ALGORITHM), "unknown pbe algorithm"}, - {ERR_REASON(EVP_R_UNSUPPORTED_ALGORITHM), "unsupported algorithm"}, - {ERR_REASON(EVP_R_UNSUPPORTED_CIPHER), "unsupported cipher"}, - {ERR_REASON(EVP_R_UNSUPPORTED_KEYLENGTH), "unsupported keylength"}, - {ERR_REASON(EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION), - "unsupported key derivation function"}, - {ERR_REASON(EVP_R_UNSUPPORTED_KEY_SIZE), "unsupported key size"}, - {ERR_REASON(EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS), - "unsupported number of rounds"}, - {ERR_REASON(EVP_R_UNSUPPORTED_PRF), "unsupported prf"}, - {ERR_REASON(EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM), - "unsupported private key algorithm"}, - {ERR_REASON(EVP_R_UNSUPPORTED_SALT_TYPE), "unsupported salt type"}, - {ERR_REASON(EVP_R_WRAP_MODE_NOT_ALLOWED), "wrap mode not allowed"}, - {ERR_REASON(EVP_R_WRONG_FINAL_BLOCK_LENGTH), "wrong final block length"}, +static const ERR_STRING_DATA EVP_str_reasons[] = { + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_AES_KEY_SETUP_FAILED), + "aes key setup failed"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ARIA_KEY_SETUP_FAILED), + "aria key setup failed"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_BAD_DECRYPT), "bad decrypt"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_BUFFER_TOO_SMALL), "buffer too small"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_CAMELLIA_KEY_SETUP_FAILED), + "camellia key setup failed"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_CIPHER_PARAMETER_ERROR), + "cipher parameter error"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_COMMAND_NOT_SUPPORTED), + "command not supported"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_COPY_ERROR), "copy error"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_CTRL_NOT_IMPLEMENTED), + "ctrl not implemented"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED), + "ctrl operation not implemented"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH), + "data not multiple of block length"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DECODE_ERROR), "decode error"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DIFFERENT_KEY_TYPES), + "different key types"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_DIFFERENT_PARAMETERS), + "different parameters"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ERROR_LOADING_SECTION), + "error loading section"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ERROR_SETTING_FIPS_MODE), + "error setting fips mode"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_AN_HMAC_KEY), + "expecting an hmac key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_AN_RSA_KEY), + "expecting an rsa key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_DH_KEY), "expecting a dh key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_DSA_KEY), + "expecting a dsa key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_EC_KEY), "expecting a ec key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_POLY1305_KEY), + "expecting a poly1305 key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_EXPECTING_A_SIPHASH_KEY), + "expecting a siphash key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_FIPS_MODE_NOT_SUPPORTED), + "fips mode not supported"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ILLEGAL_SCRYPT_PARAMETERS), + "illegal scrypt parameters"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INITIALIZATION_ERROR), + "initialization error"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INPUT_NOT_INITIALIZED), + "input not initialized"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_DIGEST), "invalid digest"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_FIPS_MODE), "invalid fips mode"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_KEY), "invalid key"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_KEY_LENGTH), "invalid key length"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_OPERATION), "invalid operation"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_KEYGEN_FAILURE), "keygen failure"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_MEMORY_LIMIT_EXCEEDED), + "memory limit exceeded"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_MESSAGE_DIGEST_IS_NULL), + "message digest is null"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_METHOD_NOT_SUPPORTED), + "method not supported"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_MISSING_PARAMETERS), "missing parameters"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NOT_XOF_OR_INVALID_LENGTH), + "not XOF or invalid length"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_CIPHER_SET), "no cipher set"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_DEFAULT_DIGEST), "no default digest"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_DIGEST_SET), "no digest set"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_KEY_SET), "no key set"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_NO_OPERATION_SET), "no operation set"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_ONLY_ONESHOT_SUPPORTED), + "only oneshot supported"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE), + "operation not supported for this keytype"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_OPERATON_NOT_INITIALIZED), + "operaton not initialized"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PARTIALLY_OVERLAPPING), + "partially overlapping buffers"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED), + "pkey application asn1 method already registered"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PRIVATE_KEY_DECODE_ERROR), + "private key decode error"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PRIVATE_KEY_ENCODE_ERROR), + "private key encode error"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PUBLIC_KEY_NOT_RSA), "public key not rsa"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_CIPHER), "unknown cipher"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_DIGEST), "unknown digest"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_OPTION), "unknown option"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNKNOWN_PBE_ALGORITHM), + "unknown pbe algorithm"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_ALGORITHM), + "unsupported algorithm"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_CIPHER), "unsupported cipher"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_KEYLENGTH), + "unsupported keylength"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION), + "unsupported key derivation function"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_KEY_SIZE), + "unsupported key size"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS), + "unsupported number of rounds"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_PRF), "unsupported prf"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM), + "unsupported private key algorithm"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_UNSUPPORTED_SALT_TYPE), + "unsupported salt type"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_WRAP_MODE_NOT_ALLOWED), + "wrap mode not allowed"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_WRONG_FINAL_BLOCK_LENGTH), + "wrong final block length"}, {0, NULL} }; @@ -176,10 +245,9 @@ static ERR_STRING_DATA EVP_str_reasons[] = { int ERR_load_EVP_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(EVP_str_functs[0].error) == NULL) { - ERR_load_strings(0, EVP_str_functs); - ERR_load_strings(0, EVP_str_reasons); + ERR_load_strings_const(EVP_str_functs); + ERR_load_strings_const(EVP_str_reasons); } #endif return 1; diff --git a/crypto/evp/evp_key.c b/crypto/evp/evp_key.c index 52011307..e5ac107c 100644 --- a/crypto/evp/evp_key.c +++ b/crypto/evp/evp_key.c @@ -14,7 +14,6 @@ #include #include -#ifndef OPENSSL_NO_UI /* should be init to zeros. */ static char prompt_string[80]; @@ -31,9 +30,9 @@ void EVP_set_pw_prompt(const char *prompt) char *EVP_get_pw_prompt(void) { if (prompt_string[0] == '\0') - return (NULL); + return NULL; else - return (prompt_string); + return prompt_string; } /* @@ -71,7 +70,6 @@ int EVP_read_pw_string_min(char *buf, int min, int len, const char *prompt, UI_free(ui); return ret; } -#endif /* OPENSSL_NO_UI */ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, const unsigned char *salt, const unsigned char *data, @@ -89,7 +87,7 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, OPENSSL_assert(niv <= EVP_MAX_IV_LENGTH); if (data == NULL) - return (nkey); + return nkey; c = EVP_MD_CTX_new(); if (c == NULL) diff --git a/crypto/evp/evp_lib.c b/crypto/evp/evp_lib.c index 0c76db5a..c337dca6 100644 --- a/crypto/evp/evp_lib.c +++ b/crypto/evp/evp_lib.c @@ -40,7 +40,7 @@ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type) } } else ret = -1; - return (ret); + return ret; } int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type) @@ -69,7 +69,7 @@ int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type) } } else ret = -1; - return (ret); + return ret; } int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type) @@ -82,11 +82,11 @@ int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type) OPENSSL_assert(l <= sizeof(c->iv)); i = ASN1_TYPE_get_octetstring(type, c->oiv, l); if (i != (int)l) - return (-1); + return -1; else if (i > 0) memcpy(c->iv, c->oiv, l); } - return (i); + return i; } int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type) @@ -99,7 +99,7 @@ int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type) OPENSSL_assert(j <= sizeof(c->iv)); i = ASN1_TYPE_set_octetstring(type, c->oiv, j); } - return (i); + return i; } /* Convert the various cipher NIDs and dummies to a proper OID NID */ diff --git a/crypto/evp/evp_pbe.c b/crypto/evp/evp_pbe.c index eb7344c2..7a3c61d6 100644 --- a/crypto/evp/evp_pbe.c +++ b/crypto/evp/evp_pbe.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -61,6 +61,8 @@ static const EVP_PBE_CTL builtin_pbe[] = { NID_des_cbc, NID_sha1, PKCS5_PBE_keyivgen}, {EVP_PBE_TYPE_PRF, NID_hmacWithSHA1, -1, NID_sha1, 0}, + {EVP_PBE_TYPE_PRF, NID_hmac_md5, -1, NID_md5, 0}, + {EVP_PBE_TYPE_PRF, NID_hmac_sha1, -1, NID_sha1, 0}, {EVP_PBE_TYPE_PRF, NID_hmacWithMD5, -1, NID_md5, 0}, {EVP_PBE_TYPE_PRF, NID_hmacWithSHA224, -1, NID_sha224, 0}, {EVP_PBE_TYPE_PRF, NID_hmacWithSHA256, -1, NID_sha256, 0}, diff --git a/crypto/evp/evp_pkey.c b/crypto/evp/evp_pkey.c index 81bffa6d..e61a8761 100644 --- a/crypto/evp/evp_pkey.c +++ b/crypto/evp/evp_pkey.c @@ -80,7 +80,6 @@ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey) EVPerr(EVP_F_EVP_PKEY2PKCS8, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM); goto error; } - RAND_add(p8->pkey->data, p8->pkey->length, 0.0); return p8; error: PKCS8_PRIV_KEY_INFO_free(p8); diff --git a/crypto/evp/m_md4.c b/crypto/evp/m_md4.c index f3decaaf..0efc586d 100644 --- a/crypto/evp/m_md4.c +++ b/crypto/evp/m_md4.c @@ -50,6 +50,6 @@ static const EVP_MD md4_md = { const EVP_MD *EVP_md4(void) { - return (&md4_md); + return &md4_md; } #endif diff --git a/crypto/evp/m_md5.c b/crypto/evp/m_md5.c index f4dc0c43..3d96ae93 100644 --- a/crypto/evp/m_md5.c +++ b/crypto/evp/m_md5.c @@ -50,6 +50,6 @@ static const EVP_MD md5_md = { const EVP_MD *EVP_md5(void) { - return (&md5_md); + return &md5_md; } #endif diff --git a/crypto/evp/m_mdc2.c b/crypto/evp/m_mdc2.c index b7f0fd8c..1051a907 100644 --- a/crypto/evp/m_mdc2.c +++ b/crypto/evp/m_mdc2.c @@ -50,6 +50,6 @@ static const EVP_MD mdc2_md = { const EVP_MD *EVP_mdc2(void) { - return (&mdc2_md); + return &mdc2_md; } #endif diff --git a/crypto/evp/m_null.c b/crypto/evp/m_null.c index 6c4daf56..5dce1d51 100644 --- a/crypto/evp/m_null.c +++ b/crypto/evp/m_null.c @@ -45,5 +45,5 @@ static const EVP_MD null_md = { const EVP_MD *EVP_md_null(void) { - return (&null_md); + return &null_md; } diff --git a/crypto/evp/m_ripemd.c b/crypto/evp/m_ripemd.c index 07b46bd5..7ab32084 100644 --- a/crypto/evp/m_ripemd.c +++ b/crypto/evp/m_ripemd.c @@ -50,6 +50,6 @@ static const EVP_MD ripemd160_md = { const EVP_MD *EVP_ripemd160(void) { - return (&ripemd160_md); + return &ripemd160_md; } #endif diff --git a/crypto/evp/m_sha1.c b/crypto/evp/m_sha1.c index e68f32a0..ac524178 100644 --- a/crypto/evp/m_sha1.c +++ b/crypto/evp/m_sha1.c @@ -15,6 +15,7 @@ #include #include #include "internal/evp_int.h" +#include "internal/sha.h" static int init(EVP_MD_CTX *ctx) { @@ -107,7 +108,7 @@ static const EVP_MD sha1_md = { const EVP_MD *EVP_sha1(void) { - return (&sha1_md); + return &sha1_md; } static int init224(EVP_MD_CTX *ctx) @@ -156,7 +157,7 @@ static const EVP_MD sha224_md = { const EVP_MD *EVP_sha224(void) { - return (&sha224_md); + return &sha224_md; } static const EVP_MD sha256_md = { @@ -175,7 +176,17 @@ static const EVP_MD sha256_md = { const EVP_MD *EVP_sha256(void) { - return (&sha256_md); + return &sha256_md; +} + +static int init512_224(EVP_MD_CTX *ctx) +{ + return sha512_224_init(EVP_MD_CTX_md_data(ctx)); +} + +static int init512_256(EVP_MD_CTX *ctx) +{ + return sha512_256_init(EVP_MD_CTX_md_data(ctx)); } static int init384(EVP_MD_CTX *ctx) @@ -209,6 +220,44 @@ static int final512(EVP_MD_CTX *ctx, unsigned char *md) return SHA512_Final(md, EVP_MD_CTX_md_data(ctx)); } +static const EVP_MD sha512_224_md = { + NID_sha512_224, + NID_sha512_224WithRSAEncryption, + SHA224_DIGEST_LENGTH, + EVP_MD_FLAG_DIGALGID_ABSENT, + init512_224, + update512, + final512, + NULL, + NULL, + SHA512_CBLOCK, + sizeof(EVP_MD *) + sizeof(SHA512_CTX), +}; + +const EVP_MD *EVP_sha512_224(void) +{ + return &sha512_224_md; +} + +static const EVP_MD sha512_256_md = { + NID_sha512_256, + NID_sha512_256WithRSAEncryption, + SHA256_DIGEST_LENGTH, + EVP_MD_FLAG_DIGALGID_ABSENT, + init512_256, + update512, + final512, + NULL, + NULL, + SHA512_CBLOCK, + sizeof(EVP_MD *) + sizeof(SHA512_CTX), +}; + +const EVP_MD *EVP_sha512_256(void) +{ + return &sha512_256_md; +} + static const EVP_MD sha384_md = { NID_sha384, NID_sha384WithRSAEncryption, @@ -225,7 +274,7 @@ static const EVP_MD sha384_md = { const EVP_MD *EVP_sha384(void) { - return (&sha384_md); + return &sha384_md; } static const EVP_MD sha512_md = { @@ -244,5 +293,5 @@ static const EVP_MD sha512_md = { const EVP_MD *EVP_sha512(void) { - return (&sha512_md); + return &sha512_md; } diff --git a/crypto/evp/m_sha3.c b/crypto/evp/m_sha3.c new file mode 100644 index 00000000..cf902e74 --- /dev/null +++ b/crypto/evp/m_sha3.c @@ -0,0 +1,182 @@ +/* + * 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 + */ + +#include +#include + +#include +#include +#include "internal/evp_int.h" +#include "evp_locl.h" + +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r); +void SHA3_squeeze(uint64_t A[5][5], unsigned char *out, size_t len, size_t r); + +#define KECCAK1600_WIDTH 1600 + +typedef struct { + uint64_t A[5][5]; + size_t block_size; /* cached ctx->digest->block_size */ + size_t md_size; /* output length, variable in XOF */ + size_t num; /* used bytes in below buffer */ + unsigned char buf[KECCAK1600_WIDTH / 8 - 32]; + unsigned char pad; +} KECCAK1600_CTX; + +static int init(EVP_MD_CTX *evp_ctx, unsigned char pad) +{ + KECCAK1600_CTX *ctx = evp_ctx->md_data; + size_t bsz = evp_ctx->digest->block_size; + + if (bsz <= sizeof(ctx->buf)) { + memset(ctx->A, 0, sizeof(ctx->A)); + + ctx->num = 0; + ctx->block_size = bsz; + ctx->md_size = evp_ctx->digest->md_size; + ctx->pad = pad; + + return 1; + } + + return 0; +} + +static int sha3_init(EVP_MD_CTX *evp_ctx) +{ + return init(evp_ctx, '\x06'); +} + +static int shake_init(EVP_MD_CTX *evp_ctx) +{ + return init(evp_ctx, '\x1f'); +} + +static int sha3_update(EVP_MD_CTX *evp_ctx, const void *_inp, size_t len) +{ + KECCAK1600_CTX *ctx = evp_ctx->md_data; + const unsigned char *inp = _inp; + size_t bsz = ctx->block_size; + size_t num, rem; + + if ((num = ctx->num) != 0) { /* process intermediate buffer? */ + rem = bsz - num; + + if (len < rem) { + memcpy(ctx->buf + num, inp, len); + ctx->num += len; + return 1; + } + /* + * We have enough data to fill or overflow the intermediate + * buffer. So we append |rem| bytes and process the block, + * leaving the rest for later processing... + */ + memcpy(ctx->buf + num, inp, rem); + inp += rem, len -= rem; + (void)SHA3_absorb(ctx->A, ctx->buf, bsz, bsz); + ctx->num = 0; + /* ctx->buf is processed, ctx->num is guaranteed to be zero */ + } + + if (len >= bsz) + rem = SHA3_absorb(ctx->A, inp, len, bsz); + else + rem = len; + + if (rem) { + memcpy(ctx->buf, inp + len - rem, rem); + ctx->num = rem; + } + + return 1; +} + +static int sha3_final(EVP_MD_CTX *evp_ctx, unsigned char *md) +{ + KECCAK1600_CTX *ctx = evp_ctx->md_data; + size_t bsz = ctx->block_size; + size_t num = ctx->num; + + /* + * Pad the data with 10*1. Note that |num| can be |bsz - 1| + * in which case both byte operations below are performed on + * same byte... + */ + memset(ctx->buf + num, 0, bsz - num); + ctx->buf[num] = ctx->pad; + ctx->buf[bsz - 1] |= 0x80; + + (void)SHA3_absorb(ctx->A, ctx->buf, bsz, bsz); + + SHA3_squeeze(ctx->A, md, ctx->md_size, bsz); + + return 1; +} + +static int shake_ctrl(EVP_MD_CTX *evp_ctx, int cmd, int p1, void *p2) +{ + KECCAK1600_CTX *ctx = evp_ctx->md_data; + + switch (cmd) { + case EVP_MD_CTRL_XOF_LEN: + ctx->md_size = p1; + return 1; + default: + return 0; + } +} + +#define EVP_MD_SHA3(bitlen) \ +const EVP_MD *EVP_sha3_##bitlen(void) \ +{ \ + static const EVP_MD sha3_##bitlen##_md = { \ + NID_sha3_##bitlen, \ + NID_RSA_SHA3_##bitlen, \ + bitlen / 8, \ + EVP_MD_FLAG_DIGALGID_ABSENT, \ + sha3_init, \ + sha3_update, \ + sha3_final, \ + NULL, \ + NULL, \ + (KECCAK1600_WIDTH - bitlen * 2) / 8, \ + sizeof(KECCAK1600_CTX), \ + }; \ + return &sha3_##bitlen##_md; \ +} + +EVP_MD_SHA3(224) +EVP_MD_SHA3(256) +EVP_MD_SHA3(384) +EVP_MD_SHA3(512) + +#define EVP_MD_SHAKE(bitlen) \ +const EVP_MD *EVP_shake##bitlen(void) \ +{ \ + static const EVP_MD shake##bitlen##_md = { \ + NID_shake##bitlen, \ + 0, \ + bitlen / 8, \ + EVP_MD_FLAG_XOF, \ + shake_init, \ + sha3_update, \ + sha3_final, \ + NULL, \ + NULL, \ + (KECCAK1600_WIDTH - bitlen * 2) / 8, \ + sizeof(KECCAK1600_CTX), \ + shake_ctrl \ + }; \ + return &shake##bitlen##_md; \ +} + +EVP_MD_SHAKE(128) +EVP_MD_SHAKE(256) diff --git a/crypto/evp/m_sigver.c b/crypto/evp/m_sigver.c index 582e563d..2377944f 100644 --- a/crypto/evp/m_sigver.c +++ b/crypto/evp/m_sigver.c @@ -15,6 +15,12 @@ #include "internal/evp_int.h" #include "evp_locl.h" +static int update(EVP_MD_CTX *ctx, const void *data, size_t datalen) +{ + EVPerr(EVP_F_UPDATE, EVP_R_ONLY_ONESHOT_SUPPORTED); + return 0; +} + static int do_sigver_init(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey, int ver) @@ -43,15 +49,23 @@ static int do_sigver_init(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, if (ctx->pctx->pmeth->verifyctx_init(ctx->pctx, ctx) <= 0) return 0; ctx->pctx->operation = EVP_PKEY_OP_VERIFYCTX; - } else if (EVP_PKEY_verify_init(ctx->pctx) <= 0) + } else if (ctx->pctx->pmeth->digestverify != 0) { + ctx->pctx->operation = EVP_PKEY_OP_VERIFY; + ctx->update = update; + } else if (EVP_PKEY_verify_init(ctx->pctx) <= 0) { return 0; + } } else { if (ctx->pctx->pmeth->signctx_init) { if (ctx->pctx->pmeth->signctx_init(ctx->pctx, ctx) <= 0) return 0; ctx->pctx->operation = EVP_PKEY_OP_SIGNCTX; - } else if (EVP_PKEY_sign_init(ctx->pctx) <= 0) + } else if (ctx->pctx->pmeth->digestsign != 0) { + ctx->pctx->operation = EVP_PKEY_OP_SIGN; + ctx->update = update; + } else if (EVP_PKEY_sign_init(ctx->pctx) <= 0) { return 0; + } } if (EVP_PKEY_CTX_set_signature_md(ctx->pctx, type) <= 0) return 0; @@ -139,6 +153,16 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, return 1; } +int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen, + const unsigned char *tbs, size_t tbslen) +{ + if (ctx->pctx->pmeth->digestsign != NULL) + return ctx->pctx->pmeth->digestsign(ctx, sigret, siglen, tbs, tbslen); + if (sigret != NULL && EVP_DigestSignUpdate(ctx, tbs, tbslen) <= 0) + return 0; + return EVP_DigestSignFinal(ctx, sigret, siglen); +} + int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen) { @@ -175,3 +199,13 @@ int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, return r; return EVP_PKEY_verify(ctx->pctx, sig, siglen, md, mdlen); } + +int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, + size_t siglen, const unsigned char *tbs, size_t tbslen) +{ + if (ctx->pctx->pmeth->digestverify != NULL) + return ctx->pctx->pmeth->digestverify(ctx, sigret, siglen, tbs, tbslen); + if (EVP_DigestVerifyUpdate(ctx, tbs, tbslen) <= 0) + return -1; + return EVP_DigestVerifyFinal(ctx, sigret, siglen); +} diff --git a/crypto/evp/m_wp.c b/crypto/evp/m_wp.c index 94fac226..27e2b3c5 100644 --- a/crypto/evp/m_wp.c +++ b/crypto/evp/m_wp.c @@ -49,6 +49,6 @@ static const EVP_MD whirlpool_md = { const EVP_MD *EVP_whirlpool(void) { - return (&whirlpool_md); + return &whirlpool_md; } #endif diff --git a/crypto/evp/names.c b/crypto/evp/names.c index a92be1fe..077c2a6c 100644 --- a/crypto/evp/names.c +++ b/crypto/evp/names.c @@ -10,7 +10,7 @@ #include #include "internal/cryptlib.h" #include -#include +#include "internal/objects.h" #include #include "internal/evp_int.h" @@ -24,10 +24,10 @@ int EVP_add_cipher(const EVP_CIPHER *c) r = OBJ_NAME_add(OBJ_nid2sn(c->nid), OBJ_NAME_TYPE_CIPHER_METH, (const char *)c); if (r == 0) - return (0); + return 0; r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH, (const char *)c); - return (r); + return r; } int EVP_add_digest(const EVP_MD *md) @@ -38,21 +38,21 @@ int EVP_add_digest(const EVP_MD *md) name = OBJ_nid2sn(md->type); r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md); if (r == 0) - return (0); + return 0; r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH, (const char *)md); if (r == 0) - return (0); + return 0; if (md->pkey_type && md->type != md->pkey_type) { r = OBJ_NAME_add(OBJ_nid2sn(md->pkey_type), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name); if (r == 0) - return (0); + return 0; r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type), OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name); } - return (r); + return r; } const EVP_CIPHER *EVP_get_cipherbyname(const char *name) @@ -63,7 +63,7 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name) return NULL; cp = (const EVP_CIPHER *)OBJ_NAME_get(name, OBJ_NAME_TYPE_CIPHER_METH); - return (cp); + return cp; } const EVP_MD *EVP_get_digestbyname(const char *name) @@ -74,7 +74,7 @@ const EVP_MD *EVP_get_digestbyname(const char *name) return NULL; cp = (const EVP_MD *)OBJ_NAME_get(name, OBJ_NAME_TYPE_MD_METH); - return (cp); + return cp; } void evp_cleanup_int(void) @@ -90,6 +90,8 @@ void evp_cleanup_int(void) EVP_PBE_cleanup(); OBJ_sigid_free(); + + evp_app_cleanup_int(); } struct doall_cipher { diff --git a/crypto/evp/p5_crpt2.c b/crypto/evp/p5_crpt2.c index 6d5f289b..e819eb9b 100644 --- a/crypto/evp/p5_crpt2.c +++ b/crypto/evp/p5_crpt2.c @@ -25,8 +25,7 @@ static void h__dump(const unsigned char *p, int len); /* * This is an implementation of PKCS#5 v2.0 password based encryption key * derivation function PBKDF2. SHA1 version verified against test vectors - * posted by Peter Gutmann to the PKCS-TNG - * mailing list. + * posted by Peter Gutmann to the PKCS-TNG mailing list. */ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, @@ -88,7 +87,6 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, HMAC_CTX_free(hctx_tpl); return 0; } - HMAC_CTX_reset(hctx); memcpy(p, digtmp, cplen); for (j = 1; j < iter; j++) { if (!HMAC_CTX_copy(hctx, hctx_tpl)) { @@ -102,7 +100,6 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, HMAC_CTX_free(hctx_tpl); return 0; } - HMAC_CTX_reset(hctx); for (k = 0; k < cplen; k++) p[k] ^= digtmp[k]; } @@ -132,18 +129,6 @@ int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, keylen, out); } -# ifdef DO_TEST -main() -{ - unsigned char out[4]; - unsigned char salt[] = { 0x12, 0x34, 0x56, 0x78 }; - PKCS5_PBKDF2_HMAC_SHA1("password", -1, salt, 4, 5, 4, out); - fprintf(stderr, "Out %02X %02X %02X %02X\n", - out[0], out[1], out[2], out[3]); -} - -# endif - /* * Now the key derivation function itself. This is a bit evil because it has * to check the ASN1 parameters are valid: and there are quite a few of diff --git a/crypto/evp/p_dec.c b/crypto/evp/p_dec.c index 6bec4062..a150a26e 100644 --- a/crypto/evp/p_dec.c +++ b/crypto/evp/p_dec.c @@ -32,5 +32,5 @@ int EVP_PKEY_decrypt_old(unsigned char *key, const unsigned char *ek, int ekl, RSA_PKCS1_PADDING); err: #endif - return (ret); + return ret; } diff --git a/crypto/evp/p_enc.c b/crypto/evp/p_enc.c index 3277fbb0..04d67cb5 100644 --- a/crypto/evp/p_enc.c +++ b/crypto/evp/p_enc.c @@ -31,5 +31,5 @@ int EVP_PKEY_encrypt_old(unsigned char *ek, const unsigned char *key, RSA_PKCS1_PADDING); err: #endif - return (ret); + return ret; } diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c index d7372aa1..6177e044 100644 --- a/crypto/evp/p_lib.c +++ b/crypto/evp/p_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,6 +9,7 @@ #include #include "internal/cryptlib.h" +#include "internal/refcount.h" #include #include #include @@ -55,7 +56,7 @@ int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode) if (mode >= 0) pkey->save_parameters = mode; - return (ret); + return ret; } #endif #ifndef OPENSSL_NO_EC @@ -64,10 +65,10 @@ int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode) if (mode >= 0) pkey->save_parameters = mode; - return (ret); + return ret; } #endif - return (0); + return 0; } int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from) @@ -160,7 +161,7 @@ int EVP_PKEY_up_ref(EVP_PKEY *pkey) { int i; - if (CRYPTO_atomic_add(&pkey->references, 1, &i, pkey->lock) <= 0) + if (CRYPTO_UP_REF(&pkey->references, &i, pkey->lock) <= 0) return 0; REF_PRINT_COUNT("EVP_PKEY", pkey); @@ -269,6 +270,35 @@ const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len) return os->data; } +#ifndef OPENSSL_NO_POLY1305 +const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len) +{ + ASN1_OCTET_STRING *os = NULL; + if (pkey->type != EVP_PKEY_POLY1305) { + EVPerr(EVP_F_EVP_PKEY_GET0_POLY1305, EVP_R_EXPECTING_A_POLY1305_KEY); + return NULL; + } + os = EVP_PKEY_get0(pkey); + *len = os->length; + return os->data; +} +#endif + +#ifndef OPENSSL_NO_SIPHASH +const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len) +{ + ASN1_OCTET_STRING *os = NULL; + + if (pkey->type != EVP_PKEY_SIPHASH) { + EVPerr(EVP_F_EVP_PKEY_GET0_SIPHASH, EVP_R_EXPECTING_A_SIPHASH_KEY); + return NULL; + } + os = EVP_PKEY_get0(pkey); + *len = os->length; + return os->data; +} +#endif + #ifndef OPENSSL_NO_RSA int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, RSA *key) { @@ -412,7 +442,7 @@ void EVP_PKEY_free(EVP_PKEY *x) if (x == NULL) return; - CRYPTO_atomic_add(&x->references, -1, &i, x->lock); + CRYPTO_DOWN_REF(&x->references, &i, x->lock); REF_PRINT_COUNT("EVP_PKEY", x); if (i > 0) return; diff --git a/crypto/evp/p_open.c b/crypto/evp/p_open.c index b65bc74e..f2976f8a 100644 --- a/crypto/evp/p_open.c +++ b/crypto/evp/p_open.c @@ -58,7 +58,7 @@ int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, ret = 1; err: OPENSSL_clear_free(key, size); - return (ret); + return ret; } int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) @@ -68,6 +68,6 @@ int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) i = EVP_DecryptFinal_ex(ctx, out, outl); if (i) i = EVP_DecryptInit_ex(ctx, NULL, NULL, NULL, NULL); - return (i); + return i; } #endif diff --git a/crypto/evp/p_seal.c b/crypto/evp/p_seal.c index faa24648..50ea6023 100644 --- a/crypto/evp/p_seal.c +++ b/crypto/evp/p_seal.c @@ -43,23 +43,11 @@ int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, EVP_PKEY_encrypt_old(ek[i], key, EVP_CIPHER_CTX_key_length(ctx), pubk[i]); if (ekl[i] <= 0) - return (-1); + return -1; } - return (npubk); + return npubk; } -/*- MACRO -void EVP_SealUpdate(ctx,out,outl,in,inl) -EVP_CIPHER_CTX *ctx; -unsigned char *out; -int *outl; -unsigned char *in; -int inl; - { - EVP_EncryptUpdate(ctx,out,outl,in,inl); - } -*/ - int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) { int i; diff --git a/crypto/evp/pbe_scrypt.c b/crypto/evp/pbe_scrypt.c new file mode 100644 index 00000000..fddabc9a --- /dev/null +++ b/crypto/evp/pbe_scrypt.c @@ -0,0 +1,253 @@ +/* + * 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 + */ + +#include +#include +#include +#include +#include +#include "internal/numbers.h" + +#ifndef OPENSSL_NO_SCRYPT + +#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) +static void salsa208_word_specification(uint32_t inout[16]) +{ + int i; + uint32_t x[16]; + memcpy(x, inout, sizeof(x)); + for (i = 8; i > 0; i -= 2) { + x[4] ^= R(x[0] + x[12], 7); + x[8] ^= R(x[4] + x[0], 9); + x[12] ^= R(x[8] + x[4], 13); + x[0] ^= R(x[12] + x[8], 18); + x[9] ^= R(x[5] + x[1], 7); + x[13] ^= R(x[9] + x[5], 9); + x[1] ^= R(x[13] + x[9], 13); + x[5] ^= R(x[1] + x[13], 18); + x[14] ^= R(x[10] + x[6], 7); + x[2] ^= R(x[14] + x[10], 9); + x[6] ^= R(x[2] + x[14], 13); + x[10] ^= R(x[6] + x[2], 18); + x[3] ^= R(x[15] + x[11], 7); + x[7] ^= R(x[3] + x[15], 9); + x[11] ^= R(x[7] + x[3], 13); + x[15] ^= R(x[11] + x[7], 18); + x[1] ^= R(x[0] + x[3], 7); + x[2] ^= R(x[1] + x[0], 9); + x[3] ^= R(x[2] + x[1], 13); + x[0] ^= R(x[3] + x[2], 18); + x[6] ^= R(x[5] + x[4], 7); + x[7] ^= R(x[6] + x[5], 9); + x[4] ^= R(x[7] + x[6], 13); + x[5] ^= R(x[4] + x[7], 18); + x[11] ^= R(x[10] + x[9], 7); + x[8] ^= R(x[11] + x[10], 9); + x[9] ^= R(x[8] + x[11], 13); + x[10] ^= R(x[9] + x[8], 18); + x[12] ^= R(x[15] + x[14], 7); + x[13] ^= R(x[12] + x[15], 9); + x[14] ^= R(x[13] + x[12], 13); + x[15] ^= R(x[14] + x[13], 18); + } + for (i = 0; i < 16; ++i) + inout[i] += x[i]; + OPENSSL_cleanse(x, sizeof(x)); +} + +static void scryptBlockMix(uint32_t *B_, uint32_t *B, uint64_t r) +{ + uint64_t i, j; + uint32_t X[16], *pB; + + memcpy(X, B + (r * 2 - 1) * 16, sizeof(X)); + pB = B; + for (i = 0; i < r * 2; i++) { + for (j = 0; j < 16; j++) + X[j] ^= *pB++; + salsa208_word_specification(X); + memcpy(B_ + (i / 2 + (i & 1) * r) * 16, X, sizeof(X)); + } + OPENSSL_cleanse(X, sizeof(X)); +} + +static void scryptROMix(unsigned char *B, uint64_t r, uint64_t N, + uint32_t *X, uint32_t *T, uint32_t *V) +{ + unsigned char *pB; + uint32_t *pV; + uint64_t i, k; + + /* Convert from little endian input */ + for (pV = V, i = 0, pB = B; i < 32 * r; i++, pV++) { + *pV = *pB++; + *pV |= *pB++ << 8; + *pV |= *pB++ << 16; + *pV |= (uint32_t)*pB++ << 24; + } + + for (i = 1; i < N; i++, pV += 32 * r) + scryptBlockMix(pV, pV - 32 * r, r); + + scryptBlockMix(X, V + (N - 1) * 32 * r, r); + + for (i = 0; i < N; i++) { + uint32_t j; + j = X[16 * (2 * r - 1)] % N; + pV = V + 32 * r * j; + for (k = 0; k < 32 * r; k++) + T[k] = X[k] ^ *pV++; + scryptBlockMix(X, T, r); + } + /* Convert output to little endian */ + for (i = 0, pB = B; i < 32 * r; i++) { + uint32_t xtmp = X[i]; + *pB++ = xtmp & 0xff; + *pB++ = (xtmp >> 8) & 0xff; + *pB++ = (xtmp >> 16) & 0xff; + *pB++ = (xtmp >> 24) & 0xff; + } +} + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t)-1) +#endif + +/* + * Maximum power of two that will fit in uint64_t: this should work on + * most (all?) platforms. + */ + +#define LOG2_UINT64_MAX (sizeof(uint64_t) * 8 - 1) + +/* + * Maximum value of p * r: + * p <= ((2^32-1) * hLen) / MFLen => + * p <= ((2^32-1) * 32) / (128 * r) => + * p * r <= (2^30-1) + * + */ + +#define SCRYPT_PR_MAX ((1 << 30) - 1) + +/* + * Maximum permitted memory allow this to be overridden with Configuration + * option: e.g. -DSCRYPT_MAX_MEM=0 for maximum possible. + */ + +#ifdef SCRYPT_MAX_MEM +# if SCRYPT_MAX_MEM == 0 +# undef SCRYPT_MAX_MEM +/* + * Although we could theoretically allocate SIZE_MAX memory that would leave + * no memory available for anything else so set limit as half that. + */ +# define SCRYPT_MAX_MEM (SIZE_MAX/2) +# endif +#else +/* Default memory limit: 32 MB */ +# define SCRYPT_MAX_MEM (1024 * 1024 * 32) +#endif + +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 rv = 0; + unsigned char *B; + uint32_t *X, *V, *T; + uint64_t i, Blen, Vlen; + + /* Sanity check parameters */ + /* initial check, r,p must be non zero, N >= 2 and a power of 2 */ + if (r == 0 || p == 0 || N < 2 || (N & (N - 1))) + return 0; + /* Check p * r < SCRYPT_PR_MAX avoiding overflow */ + if (p > SCRYPT_PR_MAX / r) + return 0; + + /* + * Need to check N: if 2^(128 * r / 8) overflows limit this is + * automatically satisfied since N <= UINT64_MAX. + */ + + if (16 * r <= LOG2_UINT64_MAX) { + if (N >= (((uint64_t)1) << (16 * r))) + return 0; + } + + /* Memory checks: check total allocated buffer size fits in uint64_t */ + + /* + * B size in section 5 step 1.S + * Note: we know p * 128 * r < UINT64_MAX because we already checked + * p * r < SCRYPT_PR_MAX + */ + Blen = p * 128 * r; + /* + * Yet we pass it as integer to PKCS5_PBKDF2_HMAC... [This would + * have to be revised when/if PKCS5_PBKDF2_HMAC accepts size_t.] + */ + if (Blen > INT_MAX) { + EVPerr(EVP_F_EVP_PBE_SCRYPT, EVP_R_MEMORY_LIMIT_EXCEEDED); + return 0; + } + + /* + * Check 32 * r * (N + 2) * sizeof(uint32_t) fits in uint64_t + * This is combined size V, X and T (section 4) + */ + i = UINT64_MAX / (32 * sizeof(uint32_t)); + if (N + 2 > i / r) + return 0; + Vlen = 32 * r * (N + 2) * sizeof(uint32_t); + + /* check total allocated size fits in uint64_t */ + if (Blen > UINT64_MAX - Vlen) + return 0; + + if (maxmem == 0) + maxmem = SCRYPT_MAX_MEM; + + /* Check that the maximum memory doesn't exceed a size_t limits */ + if (maxmem > SIZE_MAX) + maxmem = SIZE_MAX; + + if (Blen + Vlen > maxmem) { + EVPerr(EVP_F_EVP_PBE_SCRYPT, EVP_R_MEMORY_LIMIT_EXCEEDED); + return 0; + } + + /* If no key return to indicate parameters are OK */ + if (key == NULL) + return 1; + + B = OPENSSL_malloc((size_t)(Blen + Vlen)); + if (B == NULL) + return 0; + X = (uint32_t *)(B + Blen); + T = X + 32 * r; + V = T + 32 * r; + if (PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, 1, EVP_sha256(), + (int)Blen, B) == 0) + goto err; + + for (i = 0; i < p; i++) + scryptROMix(B + 128 * r * i, r, N, X, T, V); + + if (PKCS5_PBKDF2_HMAC(pass, passlen, B, (int)Blen, 1, EVP_sha256(), + keylen, key) == 0) + goto err; + rv = 1; + err: + OPENSSL_clear_free(B, (size_t)(Blen + Vlen)); + return rv; +} +#endif diff --git a/crypto/evp/pmeth_fn.c b/crypto/evp/pmeth_fn.c index eb638019..de1c07e1 100644 --- a/crypto/evp/pmeth_fn.c +++ b/crypto/evp/pmeth_fn.c @@ -255,7 +255,7 @@ int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer) } /* - * ran@cryptocom.ru: For clarity. The error is if parameters in peer are + * For clarity. The error is if parameters in peer are * present (!missing) but don't match. EVP_PKEY_cmp_parameters may return * 1 (match), 0 (don't match) and -2 (comparison is not defined). -1 * (different key types) is impossible here because it is checked earlier. diff --git a/crypto/evp/pmeth_gn.c b/crypto/evp/pmeth_gn.c index 6adc3a9c..e14965f3 100644 --- a/crypto/evp/pmeth_gn.c +++ b/crypto/evp/pmeth_gn.c @@ -13,6 +13,7 @@ #include #include #include "internal/bn_int.h" +#include "internal/asn1_int.h" #include "internal/evp_int.h" int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx) @@ -167,3 +168,72 @@ EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, EVP_PKEY_CTX_free(mac_ctx); return mac_key; } + +int EVP_PKEY_check(EVP_PKEY_CTX *ctx) +{ + EVP_PKEY *pkey = ctx->pkey; + + if (pkey == NULL) { + EVPerr(EVP_F_EVP_PKEY_CHECK, EVP_R_NO_KEY_SET); + return 0; + } + + /* call customized check function first */ + if (ctx->pmeth->check != NULL) + return ctx->pmeth->check(pkey); + + /* use default check function in ameth */ + if (pkey->ameth == NULL || pkey->ameth->pkey_check == NULL) { + EVPerr(EVP_F_EVP_PKEY_CHECK, + EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); + return -2; + } + + return pkey->ameth->pkey_check(pkey); +} + +int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx) +{ + EVP_PKEY *pkey = ctx->pkey; + + if (pkey == NULL) { + EVPerr(EVP_F_EVP_PKEY_PUBLIC_CHECK, EVP_R_NO_KEY_SET); + return 0; + } + + /* call customized public key check function first */ + if (ctx->pmeth->public_check != NULL) + return ctx->pmeth->public_check(pkey); + + /* use default public key check function in ameth */ + if (pkey->ameth == NULL || pkey->ameth->pkey_public_check == NULL) { + EVPerr(EVP_F_EVP_PKEY_PUBLIC_CHECK, + EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); + return -2; + } + + return pkey->ameth->pkey_public_check(pkey); +} + +int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx) +{ + EVP_PKEY *pkey = ctx->pkey; + + if (pkey == NULL) { + EVPerr(EVP_F_EVP_PKEY_PARAM_CHECK, EVP_R_NO_KEY_SET); + return 0; + } + + /* call customized param check function first */ + if (ctx->pmeth->param_check != NULL) + return ctx->pmeth->param_check(pkey); + + /* use default param check function in ameth */ + if (pkey->ameth == NULL || pkey->ameth->pkey_param_check == NULL) { + EVPerr(EVP_F_EVP_PKEY_PARAM_CHECK, + EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); + return -2; + } + + return pkey->ameth->pkey_param_check(pkey); +} diff --git a/crypto/evp/pmeth_lib.c b/crypto/evp/pmeth_lib.c index 5e650a9d..2d9f4fc6 100644 --- a/crypto/evp/pmeth_lib.c +++ b/crypto/evp/pmeth_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -21,6 +21,7 @@ typedef int sk_cmp_fn_type(const char *const *a, const char *const *b); static STACK_OF(EVP_PKEY_METHOD) *app_pkey_methods = NULL; +/* This array needs to be in order of NIDs */ static const EVP_PKEY_METHOD *standard_methods[] = { #ifndef OPENSSL_NO_RSA &rsa_pkey_meth, @@ -38,14 +39,29 @@ static const EVP_PKEY_METHOD *standard_methods[] = { #ifndef OPENSSL_NO_CMAC &cmac_pkey_meth, #endif +#ifndef OPENSSL_NO_RSA + &rsa_pss_pkey_meth, +#endif #ifndef OPENSSL_NO_DH &dhx_pkey_meth, +#endif +#ifndef OPENSSL_NO_SCRYPT + &scrypt_pkey_meth, #endif &tls1_prf_pkey_meth, #ifndef OPENSSL_NO_EC &ecx25519_pkey_meth, #endif - &hkdf_pkey_meth + &hkdf_pkey_meth, +#ifndef OPENSSL_NO_POLY1305 + &poly1305_pkey_meth, +#endif +#ifndef OPENSSL_NO_SIPHASH + &siphash_pkey_meth, +#endif +#ifndef OPENSSL_NO_EC + &ed25519_pkey_meth, +#endif }; DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *, @@ -207,6 +223,8 @@ void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src) dst->ctrl = src->ctrl; dst->ctrl_str = src->ctrl_str; + + dst->check = src->check; } void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth) @@ -282,6 +300,42 @@ int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth) return 1; } +void evp_app_cleanup_int(void) +{ + if (app_pkey_methods != NULL) + sk_EVP_PKEY_METHOD_pop_free(app_pkey_methods, EVP_PKEY_meth_free); +} + +int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth) +{ + const EVP_PKEY_METHOD *ret; + + ret = sk_EVP_PKEY_METHOD_delete_ptr(app_pkey_methods, pmeth); + + return ret == NULL ? 0 : 1; +} + +size_t EVP_PKEY_meth_get_count(void) +{ + size_t rv = OSSL_NELEM(standard_methods); + + if (app_pkey_methods) + rv += sk_EVP_PKEY_METHOD_num(app_pkey_methods); + return rv; +} + +const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx) +{ + if (idx < OSSL_NELEM(standard_methods)) + return standard_methods[idx]; + if (app_pkey_methods == NULL) + return NULL; + idx -= OSSL_NELEM(standard_methods); + if (idx >= (size_t)sk_EVP_PKEY_METHOD_num(app_pkey_methods)) + return NULL; + return sk_EVP_PKEY_METHOD_value(app_pkey_methods, idx); +} + void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx) { if (ctx == NULL) @@ -326,6 +380,12 @@ int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, } +int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, uint64_t value) +{ + return EVP_PKEY_CTX_ctrl(ctx, keytype, optype, cmd, 0, &value); +} + int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *name, const char *value) { @@ -333,14 +393,9 @@ int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, EVPerr(EVP_F_EVP_PKEY_CTX_CTRL_STR, EVP_R_COMMAND_NOT_SUPPORTED); return -2; } - if (strcmp(name, "digest") == 0) { - const EVP_MD *md; - if (value == NULL || (md = EVP_get_digestbyname(value)) == NULL) { - EVPerr(EVP_F_EVP_PKEY_CTX_CTRL_STR, EVP_R_INVALID_DIGEST); - return 0; - } - return EVP_PKEY_CTX_set_signature_md(ctx, md); - } + if (strcmp(name, "digest") == 0) + return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_TYPE_SIG, EVP_PKEY_CTRL_MD, + value); return ctx->pmeth->ctrl_str(ctx, name, value); } @@ -371,6 +426,18 @@ int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex) return rv; } +/* Pass a message digest to a ctrl */ +int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md) +{ + const EVP_MD *m; + + if (md == NULL || (m = EVP_get_digestbyname(md)) == NULL) { + EVPerr(EVP_F_EVP_PKEY_CTX_MD, EVP_R_INVALID_DIGEST); + return 0; + } + return EVP_PKEY_CTX_ctrl(ctx, -1, optype, cmd, 0, (void *)m); +} + int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx) { return ctx->operation; @@ -557,6 +624,24 @@ void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, pmeth->ctrl_str = ctrl_str; } +void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)) +{ + pmeth->check = check; +} + +void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)) +{ + pmeth->public_check = check; +} + +void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)) +{ + pmeth->param_check = check; +} + void EVP_PKEY_meth_get_init(EVP_PKEY_METHOD *pmeth, int (**pinit) (EVP_PKEY_CTX *ctx)) { @@ -723,3 +808,24 @@ void EVP_PKEY_meth_get_ctrl(EVP_PKEY_METHOD *pmeth, if (pctrl_str) *pctrl_str = pmeth->ctrl_str; } + +void EVP_PKEY_meth_get_check(EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)) +{ + if (*pcheck) + *pcheck = pmeth->check; +} + +void EVP_PKEY_meth_get_public_check(EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)) +{ + if (*pcheck) + *pcheck = pmeth->public_check; +} + +void EVP_PKEY_meth_get_param_check(EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)) +{ + if (*pcheck) + *pcheck = pmeth->param_check; +} diff --git a/crypto/evp/scrypt.c b/crypto/evp/scrypt.c deleted file mode 100644 index 101bb1ed..00000000 --- a/crypto/evp/scrypt.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * 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 - */ - -#include -#include -#include -#include -#include -#include - -#ifndef OPENSSL_NO_SCRYPT - -#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) -static void salsa208_word_specification(uint32_t inout[16]) -{ - int i; - uint32_t x[16]; - memcpy(x, inout, sizeof(x)); - for (i = 8; i > 0; i -= 2) { - x[4] ^= R(x[0] + x[12], 7); - x[8] ^= R(x[4] + x[0], 9); - x[12] ^= R(x[8] + x[4], 13); - x[0] ^= R(x[12] + x[8], 18); - x[9] ^= R(x[5] + x[1], 7); - x[13] ^= R(x[9] + x[5], 9); - x[1] ^= R(x[13] + x[9], 13); - x[5] ^= R(x[1] + x[13], 18); - x[14] ^= R(x[10] + x[6], 7); - x[2] ^= R(x[14] + x[10], 9); - x[6] ^= R(x[2] + x[14], 13); - x[10] ^= R(x[6] + x[2], 18); - x[3] ^= R(x[15] + x[11], 7); - x[7] ^= R(x[3] + x[15], 9); - x[11] ^= R(x[7] + x[3], 13); - x[15] ^= R(x[11] + x[7], 18); - x[1] ^= R(x[0] + x[3], 7); - x[2] ^= R(x[1] + x[0], 9); - x[3] ^= R(x[2] + x[1], 13); - x[0] ^= R(x[3] + x[2], 18); - x[6] ^= R(x[5] + x[4], 7); - x[7] ^= R(x[6] + x[5], 9); - x[4] ^= R(x[7] + x[6], 13); - x[5] ^= R(x[4] + x[7], 18); - x[11] ^= R(x[10] + x[9], 7); - x[8] ^= R(x[11] + x[10], 9); - x[9] ^= R(x[8] + x[11], 13); - x[10] ^= R(x[9] + x[8], 18); - x[12] ^= R(x[15] + x[14], 7); - x[13] ^= R(x[12] + x[15], 9); - x[14] ^= R(x[13] + x[12], 13); - x[15] ^= R(x[14] + x[13], 18); - } - for (i = 0; i < 16; ++i) - inout[i] += x[i]; - OPENSSL_cleanse(x, sizeof(x)); -} - -static void scryptBlockMix(uint32_t *B_, uint32_t *B, uint64_t r) -{ - uint64_t i, j; - uint32_t X[16], *pB; - - memcpy(X, B + (r * 2 - 1) * 16, sizeof(X)); - pB = B; - for (i = 0; i < r * 2; i++) { - for (j = 0; j < 16; j++) - X[j] ^= *pB++; - salsa208_word_specification(X); - memcpy(B_ + (i / 2 + (i & 1) * r) * 16, X, sizeof(X)); - } - OPENSSL_cleanse(X, sizeof(X)); -} - -static void scryptROMix(unsigned char *B, uint64_t r, uint64_t N, - uint32_t *X, uint32_t *T, uint32_t *V) -{ - unsigned char *pB; - uint32_t *pV; - uint64_t i, k; - - /* Convert from little endian input */ - for (pV = V, i = 0, pB = B; i < 32 * r; i++, pV++) { - *pV = *pB++; - *pV |= *pB++ << 8; - *pV |= *pB++ << 16; - *pV |= (uint32_t)*pB++ << 24; - } - - for (i = 1; i < N; i++, pV += 32 * r) - scryptBlockMix(pV, pV - 32 * r, r); - - scryptBlockMix(X, V + (N - 1) * 32 * r, r); - - for (i = 0; i < N; i++) { - uint32_t j; - j = X[16 * (2 * r - 1)] % N; - pV = V + 32 * r * j; - for (k = 0; k < 32 * r; k++) - T[k] = X[k] ^ *pV++; - scryptBlockMix(X, T, r); - } - /* Convert output to little endian */ - for (i = 0, pB = B; i < 32 * r; i++) { - uint32_t xtmp = X[i]; - *pB++ = xtmp & 0xff; - *pB++ = (xtmp >> 8) & 0xff; - *pB++ = (xtmp >> 16) & 0xff; - *pB++ = (xtmp >> 24) & 0xff; - } -} - -#ifndef SIZE_MAX -# define SIZE_MAX ((size_t)-1) -#endif - -/* - * Maximum power of two that will fit in uint64_t: this should work on - * most (all?) platforms. - */ - -#define LOG2_UINT64_MAX (sizeof(uint64_t) * 8 - 1) - -/* - * Maximum value of p * r: - * p <= ((2^32-1) * hLen) / MFLen => - * p <= ((2^32-1) * 32) / (128 * r) => - * p * r <= (2^30-1) - * - */ - -#define SCRYPT_PR_MAX ((1 << 30) - 1) - -/* - * Maximum permitted memory allow this to be overridden with Configuration - * option: e.g. -DSCRYPT_MAX_MEM=0 for maximum possible. - */ - -#ifdef SCRYPT_MAX_MEM -# if SCRYPT_MAX_MEM == 0 -# undef SCRYPT_MAX_MEM -/* - * Although we could theoretically allocate SIZE_MAX memory that would leave - * no memory available for anything else so set limit as half that. - */ -# define SCRYPT_MAX_MEM (SIZE_MAX/2) -# endif -#else -/* Default memory limit: 32 MB */ -# define SCRYPT_MAX_MEM (1024 * 1024 * 32) -#endif - -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 rv = 0; - unsigned char *B; - uint32_t *X, *V, *T; - uint64_t i, Blen, Vlen; - size_t allocsize; - - /* Sanity check parameters */ - /* initial check, r,p must be non zero, N >= 2 and a power of 2 */ - if (r == 0 || p == 0 || N < 2 || (N & (N - 1))) - return 0; - /* Check p * r < SCRYPT_PR_MAX avoiding overflow */ - if (p > SCRYPT_PR_MAX / r) - return 0; - - /* - * Need to check N: if 2^(128 * r / 8) overflows limit this is - * automatically satisfied since N <= UINT64_MAX. - */ - - if (16 * r <= LOG2_UINT64_MAX) { - if (N >= (((uint64_t)1) << (16 * r))) - return 0; - } - - /* Memory checks: check total allocated buffer size fits in uint64_t */ - - /* - * B size in section 5 step 1.S - * Note: we know p * 128 * r < UINT64_MAX because we already checked - * p * r < SCRYPT_PR_MAX - */ - Blen = p * 128 * r; - - /* - * Check 32 * r * (N + 2) * sizeof(uint32_t) fits in - * uint64_t and also size_t (their sizes are unrelated). - * This is combined size V, X and T (section 4) - */ - i = UINT64_MAX / (32 * sizeof(uint32_t)); - if (N + 2 > i / r) - return 0; - Vlen = 32 * r * (N + 2) * sizeof(uint32_t); - - /* check total allocated size fits in uint64_t */ - if (Blen > UINT64_MAX - Vlen) - return 0; - /* check total allocated size fits in size_t */ - if (Blen > SIZE_MAX - Vlen) - return 0; - - allocsize = (size_t)(Blen + Vlen); - - if (maxmem == 0) - maxmem = SCRYPT_MAX_MEM; - - if (allocsize > maxmem) { - EVPerr(EVP_F_EVP_PBE_SCRYPT, EVP_R_MEMORY_LIMIT_EXCEEDED); - return 0; - } - - /* If no key return to indicate parameters are OK */ - if (key == NULL) - return 1; - - B = OPENSSL_malloc(allocsize); - if (B == NULL) - return 0; - X = (uint32_t *)(B + Blen); - T = X + 32 * r; - V = T + 32 * r; - if (PKCS5_PBKDF2_HMAC(pass, passlen, salt, saltlen, 1, EVP_sha256(), - Blen, B) == 0) - goto err; - - for (i = 0; i < p; i++) - scryptROMix(B + 128 * r * i, r, N, X, T, V); - - if (PKCS5_PBKDF2_HMAC(pass, passlen, B, Blen, 1, EVP_sha256(), - keylen, key) == 0) - goto err; - rv = 1; - err: - OPENSSL_clear_free(B, allocsize); - return rv; -} -#endif diff --git a/crypto/ex_data.c b/crypto/ex_data.c index 22c4d3d9..ed9820cf 100644 --- a/crypto/ex_data.c +++ b/crypto/ex_data.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,6 @@ #include "internal/cryptlib_int.h" #include "internal/thread_once.h" -#include /* * Each structure type (sometimes called a class), that supports diff --git a/crypto/hmac/hm_ameth.c b/crypto/hmac/hm_ameth.c index 78ae0ea6..4d830b8d 100644 --- a/crypto/hmac/hm_ameth.c +++ b/crypto/hmac/hm_ameth.c @@ -12,8 +12,6 @@ #include #include "internal/asn1_int.h" -#define HMAC_TEST_PRIVATE_KEY_FORMAT - /* * HMAC "ASN1" method. This is just here to indicate the maximum HMAC output * length and to free up an HMAC key. @@ -51,53 +49,6 @@ static int hmac_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b) return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)); } -#ifdef HMAC_TEST_PRIVATE_KEY_FORMAT -/* - * A bogus private key format for test purposes. This is simply the HMAC key - * with "HMAC PRIVATE KEY" in the headers. When enabled the genpkey utility - * can be used to "generate" HMAC keys. - */ - -static int old_hmac_decode(EVP_PKEY *pkey, - const unsigned char **pder, int derlen) -{ - ASN1_OCTET_STRING *os; - os = ASN1_OCTET_STRING_new(); - if (os == NULL || !ASN1_OCTET_STRING_set(os, *pder, derlen)) - goto err; - if (!EVP_PKEY_assign(pkey, EVP_PKEY_HMAC, os)) - goto err; - return 1; - - err: - ASN1_OCTET_STRING_free(os); - return 0; -} - -static int old_hmac_encode(const EVP_PKEY *pkey, unsigned char **pder) -{ - int inc; - ASN1_OCTET_STRING *os = EVP_PKEY_get0(pkey); - if (pder) { - if (!*pder) { - *pder = OPENSSL_malloc(os->length); - if (*pder == NULL) - return -1; - inc = 0; - } else - inc = 1; - - memcpy(*pder, os->data, os->length); - - if (inc) - *pder += os->length; - } - - return os->length; -} - -#endif - const EVP_PKEY_ASN1_METHOD hmac_asn1_meth = { EVP_PKEY_HMAC, EVP_PKEY_HMAC, @@ -116,10 +67,5 @@ const EVP_PKEY_ASN1_METHOD hmac_asn1_meth = { hmac_key_free, hmac_pkey_ctrl, -#ifdef HMAC_TEST_PRIVATE_KEY_FORMAT - old_hmac_decode, - old_hmac_encode -#else 0, 0 -#endif }; diff --git a/crypto/hmac/hmac.c b/crypto/hmac/hmac.c index 3374105c..156725ea 100644 --- a/crypto/hmac/hmac.c +++ b/crypto/hmac/hmac.c @@ -37,7 +37,8 @@ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, if (key != NULL) { reset = 1; j = EVP_MD_block_size(md); - OPENSSL_assert(j <= (int)sizeof(ctx->key)); + if (!ossl_assert(j <= (int)sizeof(ctx->key))) + goto err; if (j < len) { if (!EVP_DigestInit_ex(ctx->md_ctx, md, impl)) goto err; @@ -118,7 +119,9 @@ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len) size_t HMAC_size(const HMAC_CTX *ctx) { - return EVP_MD_size((ctx)->md); + int size = EVP_MD_size((ctx)->md); + + return (size < 0) ? 0 : size; } HMAC_CTX *HMAC_CTX_new(void) @@ -155,31 +158,36 @@ void HMAC_CTX_free(HMAC_CTX *ctx) } } -int HMAC_CTX_reset(HMAC_CTX *ctx) +static int hmac_ctx_alloc_mds(HMAC_CTX *ctx) { - hmac_ctx_cleanup(ctx); if (ctx->i_ctx == NULL) ctx->i_ctx = EVP_MD_CTX_new(); if (ctx->i_ctx == NULL) - goto err; + return 0; if (ctx->o_ctx == NULL) ctx->o_ctx = EVP_MD_CTX_new(); if (ctx->o_ctx == NULL) - goto err; + return 0; if (ctx->md_ctx == NULL) ctx->md_ctx = EVP_MD_CTX_new(); if (ctx->md_ctx == NULL) - goto err; - ctx->md = NULL; + return 0; return 1; - err: +} + +int HMAC_CTX_reset(HMAC_CTX *ctx) +{ hmac_ctx_cleanup(ctx); - return 0; + if (!hmac_ctx_alloc_mds(ctx)) { + hmac_ctx_cleanup(ctx); + return 0; + } + return 1; } int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx) { - if (!HMAC_CTX_reset(dctx)) + if (!hmac_ctx_alloc_mds(dctx)) goto err; if (!EVP_MD_CTX_copy_ex(dctx->i_ctx, sctx->i_ctx)) goto err; diff --git a/crypto/idea/i_ecb.c b/crypto/idea/i_ecb.c index 2208287e..058d0c14 100644 --- a/crypto/idea/i_ecb.c +++ b/crypto/idea/i_ecb.c @@ -13,7 +13,7 @@ const char *IDEA_options(void) { - return ("idea(int)"); + return "idea(int)"; } void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, diff --git a/crypto/idea/i_skey.c b/crypto/idea/i_skey.c index 02853246..9d914558 100644 --- a/crypto/idea/i_skey.c +++ b/crypto/idea/i_skey.c @@ -108,5 +108,5 @@ static IDEA_INT inverse(unsigned int xin) } } while (r != 0); } - return ((IDEA_INT) b2); + return (IDEA_INT)b2; } diff --git a/crypto/idea/idea_lcl.h b/crypto/idea/idea_lcl.h index 825d0006..50f81dfd 100644 --- a/crypto/idea/idea_lcl.h +++ b/crypto/idea/idea_lcl.h @@ -7,11 +7,6 @@ * https://www.openssl.org/source/license.html */ -/* - * The new form of this macro (check if the a*b == 0) was suggested by Colin - * Plumb - */ -/* Removal of the inner if from from Wei Dai 24/4/96 */ #define idea_mul(r,a,b,ul) \ ul=(unsigned long)a*b; \ if (ul != 0) \ @@ -22,16 +17,6 @@ if (ul != 0) \ else \ r=(-(int)a-b+1); /* assuming a or b is 0 and in range */ -/* - * 7/12/95 - Many thanks to Rhys Weatherley for - * pointing out that I was assuming little endian byte order for all - * quantities what idea actually used bigendian. No where in the spec does - * it mention this, it is all in terms of 16 bit numbers and even the example - * does not use byte streams for the input example :-(. If you byte swap each - * pair of input, keys and iv, the functions would produce the output as the - * old version :-(. - */ - /* NOTE - c is not incremented as per n2l */ #define n2ln(c,l1,l2,n) { \ c+=n; \ diff --git a/crypto/include/internal/__DECC_INCLUDE_EPILOGUE.H b/crypto/include/internal/__DECC_INCLUDE_EPILOGUE.H new file mode 100644 index 00000000..c350018a --- /dev/null +++ b/crypto/include/internal/__DECC_INCLUDE_EPILOGUE.H @@ -0,0 +1,16 @@ +/* + * 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 + */ + +/* + * This file is only used by HP C on VMS, and is included automatically + * after each header file from this directory + */ + +/* restore state. Must correspond to the save in __decc_include_prologue.h */ +#pragma names restore diff --git a/crypto/include/internal/__DECC_INCLUDE_PROLOGUE.H b/crypto/include/internal/__DECC_INCLUDE_PROLOGUE.H new file mode 100644 index 00000000..9a9c777f --- /dev/null +++ b/crypto/include/internal/__DECC_INCLUDE_PROLOGUE.H @@ -0,0 +1,20 @@ +/* + * 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 + */ + +/* + * This file is only used by HP C on VMS, and is included automatically + * after each header file from this directory + */ + +/* save state */ +#pragma names save +/* have the compiler shorten symbols larger than 31 chars to 23 chars + * followed by a 8 hex char CRC + */ +#pragma names as_is,shortened diff --git a/crypto/include/internal/aria.h b/crypto/include/internal/aria.h new file mode 100644 index 00000000..07382718 --- /dev/null +++ b/crypto/include/internal/aria.h @@ -0,0 +1,58 @@ +/* + * Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2017, 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 + */ + + /* Copyright (c) 2017 National Security Research Institute. All rights reserved. */ + +#ifndef HEADER_ARIA_H +# define HEADER_ARIA_H + +# include + +# ifdef OPENSSL_NO_ARIA +# error ARIA is disabled. +# endif + +# define ARIA_ENCRYPT 1 +# define ARIA_DECRYPT 0 + +# define ARIA_BLOCK_SIZE 16 /* Size of each encryption/decryption block */ +# define ARIA_MAX_KEYS 17 /* Number of keys needed in the worst case */ + +# ifdef __cplusplus +extern "C" { +# endif + +typedef union { + unsigned char c[ARIA_BLOCK_SIZE]; + unsigned int u[ARIA_BLOCK_SIZE / sizeof(unsigned int)]; +} ARIA_u128; + +typedef unsigned char ARIA_c128[ARIA_BLOCK_SIZE]; + +struct aria_key_st { + ARIA_u128 rd_key[ARIA_MAX_KEYS]; + unsigned int rounds; +}; +typedef struct aria_key_st ARIA_KEY; + + +int aria_set_encrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); +int aria_set_decrypt_key(const unsigned char *userKey, const int bits, + ARIA_KEY *key); + +void aria_encrypt(const unsigned char *in, unsigned char *out, + const ARIA_KEY *key); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/crypto/include/internal/asn1_int.h b/crypto/include/internal/asn1_int.h index f70e3b47..90d525aa 100644 --- a/crypto/include/internal/asn1_int.h +++ b/crypto/include/internal/asn1_int.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -52,6 +52,12 @@ struct evp_pkey_asn1_method_st { int (*item_sign) (EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); + int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, + const ASN1_STRING *sig); + /* Check */ + int (*pkey_check) (const EVP_PKEY *pk); + int (*pkey_public_check) (const EVP_PKEY *pk); + int (*pkey_param_check) (const EVP_PKEY *pk); } /* EVP_PKEY_ASN1_METHOD */ ; DEFINE_STACK_OF_CONST(EVP_PKEY_ASN1_METHOD) @@ -62,8 +68,13 @@ extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth; extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[5]; extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth; extern const EVP_PKEY_ASN1_METHOD ecx25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth; + extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth; extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2]; +extern const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth; +extern const EVP_PKEY_ASN1_METHOD siphash_asn1_meth; /* * These are used internally in the ASN1_OBJECT to keep track of whether the @@ -92,3 +103,4 @@ struct asn1_pctx_st { } /* ASN1_PCTX */ ; int asn1_valid_host(const ASN1_STRING *host); +int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb); diff --git a/crypto/include/internal/bn_dh.h b/crypto/include/internal/bn_dh.h index f49f0398..70ebca28 100644 --- a/crypto/include/internal/bn_dh.h +++ b/crypto/include/internal/bn_dh.h @@ -15,3 +15,10 @@ declare_dh_bn(1024_160) declare_dh_bn(2048_224) declare_dh_bn(2048_256) + +extern const BIGNUM _bignum_ffdhe2048_p; +extern const BIGNUM _bignum_ffdhe3072_p; +extern const BIGNUM _bignum_ffdhe4096_p; +extern const BIGNUM _bignum_ffdhe6144_p; +extern const BIGNUM _bignum_ffdhe8192_p; +extern const BIGNUM _bignum_const_2; diff --git a/crypto/include/internal/bn_int.h b/crypto/include/internal/bn_int.h index 9c984ba7..ac49d1ea 100644 --- a/crypto/include/internal/bn_int.h +++ b/crypto/include/internal/bn_int.h @@ -34,8 +34,6 @@ signed char *bn_compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len); int bn_get_top(const BIGNUM *a); -void bn_set_top(BIGNUM *a, int top); - int bn_get_dmax(const BIGNUM *a); /* Set all words to zero */ @@ -66,15 +64,6 @@ void bn_set_static_words(BIGNUM *a, BN_ULONG *words, int size); */ int bn_set_words(BIGNUM *a, BN_ULONG *words, int num_words); -size_t bn_sizeof_BIGNUM(void); - -/* - * Return element el from an array of BIGNUMs starting at base (required - * because callers do not know the size of BIGNUM at compilation time) - */ -BIGNUM *bn_array_el(BIGNUM *base, int el); - - #ifdef __cplusplus } #endif diff --git a/crypto/include/internal/cryptlib_int.h b/crypto/include/internal/cryptlib_int.h index 8e2a7199..3dddf082 100644 --- a/crypto/include/internal/cryptlib_int.h +++ b/crypto/include/internal/cryptlib_int.h @@ -7,7 +7,7 @@ * https://www.openssl.org/source/license.html */ -#include +#include "internal/cryptlib.h" /* This file is not scanned by mkdef.pl, whereas cryptlib.h is */ @@ -29,3 +29,4 @@ int ossl_init_thread_start(uint64_t opts); # define OPENSSL_INIT_THREAD_ASYNC 0x01 # define OPENSSL_INIT_THREAD_ERR_STATE 0x02 +void ossl_malloc_setup_failures(void); diff --git a/crypto/include/internal/ctype.h b/crypto/include/internal/ctype.h new file mode 100644 index 00000000..a35b12bf --- /dev/null +++ b/crypto/include/internal/ctype.h @@ -0,0 +1,80 @@ +/* + * 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 + */ + +/* + * This version of ctype.h provides a standardised and platform + * independent implementation that supports seven bit ASCII characters. + * The specific intent is to not pass extended ASCII characters (> 127) + * even if the host operating system would. + * + * There is EBCDIC support included for machines which use this. However, + * there are a number of concerns about how well EBCDIC is supported + * throughout the rest of the source code. Refer to issue #4154 for + * details. + */ +#ifndef INTERNAL_CTYPE_H +# define INTERNAL_CTYPE_H + +# define CTYPE_MASK_lower 0x1 +# define CTYPE_MASK_upper 0x2 +# define CTYPE_MASK_digit 0x4 +# define CTYPE_MASK_space 0x8 +# define CTYPE_MASK_xdigit 0x10 +# define CTYPE_MASK_blank 0x20 +# define CTYPE_MASK_cntrl 0x40 +# define CTYPE_MASK_graph 0x80 +# define CTYPE_MASK_print 0x100 +# define CTYPE_MASK_punct 0x200 +# define CTYPE_MASK_base64 0x400 +# define CTYPE_MASK_asn1print 0x800 + +# define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper) +# define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit) + +/* + * The ascii mask assumes that any other classification implies that + * the character is ASCII and that there are no ASCII characters + * that aren't in any of the classifications. + * + * This assumption holds at the moment, but it might not in the future. + */ +# define CTYPE_MASK_ascii (~0) + +# ifdef CHARSET_EBCDIC +int ossl_toascii(int c); +int ossl_fromascii(int c); +# else +# define ossl_toascii(c) (c) +# define ossl_fromascii(c) (c) +# endif +int ossl_ctype_check(int c, unsigned int mask); +int ossl_tolower(int c); +int ossl_toupper(int c); + +# define ossl_isalnum(c) (ossl_ctype_check((c), CTYPE_MASK_alnum)) +# define ossl_isalpha(c) (ossl_ctype_check((c), CTYPE_MASK_alpha)) +# ifdef CHARSET_EBCDIC +# define ossl_isascii(c) (ossl_ctype_check((c), CTYPE_MASK_ascii)) +# else +# define ossl_isascii(c) (((c) & ~127) == 0) +# endif +# define ossl_isblank(c) (ossl_ctype_check((c), CTYPE_MASK_blank)) +# define ossl_iscntrl(c) (ossl_ctype_check((c), CTYPE_MASK_cntrl)) +# define ossl_isdigit(c) (ossl_ctype_check((c), CTYPE_MASK_digit)) +# define ossl_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) +# define ossl_islower(c) (ossl_ctype_check((c), CTYPE_MASK_lower)) +# define ossl_isprint(c) (ossl_ctype_check((c), CTYPE_MASK_print)) +# define ossl_ispunct(c) (ossl_ctype_check((c), CTYPE_MASK_punct)) +# define ossl_isspace(c) (ossl_ctype_check((c), CTYPE_MASK_space)) +# define ossl_isupper(c) (ossl_ctype_check((c), CTYPE_MASK_upper)) +# define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) +# define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) +# define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) + +#endif diff --git a/crypto/include/internal/engine.h b/crypto/include/internal/engine.h index 977cf06d..f80ae3ec 100644 --- a/crypto/include/internal/engine.h +++ b/crypto/include/internal/engine.h @@ -10,7 +10,7 @@ #include void engine_load_openssl_int(void); -void engine_load_cryptodev_int(void); +void engine_load_devcrypto_int(void); void engine_load_rdrand_int(void); void engine_load_dynamic_int(void); void engine_load_padlock_int(void); diff --git a/crypto/include/internal/evp_int.h b/crypto/include/internal/evp_int.h index f34699bf..a838a2a3 100644 --- a/crypto/include/internal/evp_int.h +++ b/crypto/include/internal/evp_int.h @@ -7,6 +7,8 @@ * https://www.openssl.org/source/license.html */ +#include "internal/refcount.h" + struct evp_pkey_ctx_st { /* Method associated with this operation */ const EVP_PKEY_METHOD *pmeth; @@ -68,6 +70,14 @@ struct evp_pkey_method_st { int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); 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); + 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); + int (*check) (EVP_PKEY *pkey); + int (*public_check) (EVP_PKEY *pkey); + int (*param_check) (EVP_PKEY *pkey); } /* EVP_PKEY_METHOD */ ; DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) @@ -80,10 +90,15 @@ extern const EVP_PKEY_METHOD dhx_pkey_meth; extern const EVP_PKEY_METHOD dsa_pkey_meth; extern const EVP_PKEY_METHOD ec_pkey_meth; extern const EVP_PKEY_METHOD ecx25519_pkey_meth; +extern const EVP_PKEY_METHOD ed25519_pkey_meth; extern const EVP_PKEY_METHOD hmac_pkey_meth; extern const EVP_PKEY_METHOD rsa_pkey_meth; +extern const EVP_PKEY_METHOD rsa_pss_pkey_meth; +extern const EVP_PKEY_METHOD scrypt_pkey_meth; extern const EVP_PKEY_METHOD tls1_prf_pkey_meth; extern const EVP_PKEY_METHOD hkdf_pkey_meth; +extern const EVP_PKEY_METHOD poly1305_pkey_meth; +extern const EVP_PKEY_METHOD siphash_pkey_meth; struct evp_md_st { int type; @@ -353,7 +368,7 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } struct evp_pkey_st { int type; int save_type; - int references; + CRYPTO_REF_COUNT references; const EVP_PKEY_ASN1_METHOD *ameth; ENGINE *engine; ENGINE *pmeth_engine; /* If not NULL public key ENGINE to use */ @@ -381,8 +396,9 @@ struct evp_pkey_st { void openssl_add_all_ciphers_int(void); void openssl_add_all_digests_int(void); void evp_cleanup_int(void); +void evp_app_cleanup_int(void); -/* Pulling defines out of C soure files */ +/* Pulling defines out of C source files */ #define EVP_RC4_KEY_SIZE 16 #ifndef TLS1_1_VERSION diff --git a/crypto/include/internal/md32_common.h b/crypto/include/internal/md32_common.h index 6e4ce14e..e498cf37 100644 --- a/crypto/include/internal/md32_common.h +++ b/crypto/include/internal/md32_common.h @@ -22,7 +22,7 @@ * HASH_CBLOCK * size of a unit chunk HASH_BLOCK operates on. * HASH_LONG - * has to be at lest 32 bit wide. + * has to be at least 32 bit wide. * HASH_CTX * context structure that at least contains following * members: @@ -48,7 +48,7 @@ * name of "block" function capable of treating *unaligned* input * message in original (data) byte order, implemented externally. * HASH_MAKE_STRING - * macro convering context variables to an ASCII hash string. + * macro converting context variables to an ASCII hash string. * * MD5 example: * @@ -61,8 +61,6 @@ * #define HASH_TRANSFORM MD5_Transform * #define HASH_FINAL MD5_Final * #define HASH_BLOCK_DATA_ORDER md5_block_data_order - * - * */ #include @@ -109,7 +107,6 @@ * Some GNU C inline assembler templates. Note that these are * rotates by *constant* number of bits! But that's exactly * what we need here... - * */ # if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__) # define ROTATE(a,n) ({ register unsigned int ret; \ @@ -243,7 +240,7 @@ #endif /* - * Time for some action:-) + * Time for some action :-) */ int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) @@ -257,10 +254,6 @@ int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) return 1; l = (c->Nl + (((HASH_LONG) len) << 3)) & 0xffffffffUL; - /* - * 95-05-24 eay Fixed a bug with the overflow handling, thanks to Wei Dai - * for pointing it out. - */ if (l < c->Nl) /* overflow */ c->Nh++; c->Nh += (HASH_LONG) (len >> 29); /* might cause compiler warning on @@ -368,7 +361,6 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) * improvement under SPARC Solaris7/64 and 5% under AlphaLinux. * Well, to be honest it should say that this *prevents* * performance degradation. - * */ # else /* @@ -376,7 +368,6 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) * generate better code if MD32_REG_T is defined int. The above * pre-processor condition reflects the circumstances under which * the conclusion was made and is subject to further extension. - * */ # define MD32_REG_T int # endif diff --git a/crypto/include/internal/poly1305.h b/crypto/include/internal/poly1305.h index 1bc8716f..5fef239d 100644 --- a/crypto/include/internal/poly1305.h +++ b/crypto/include/internal/poly1305.h @@ -9,7 +9,9 @@ #include -#define POLY1305_BLOCK_SIZE 16 +#define POLY1305_BLOCK_SIZE 16 +#define POLY1305_DIGEST_SIZE 16 +#define POLY1305_KEY_SIZE 32 typedef struct poly1305_context POLY1305; diff --git a/crypto/include/internal/rand.h b/crypto/include/internal/rand.h deleted file mode 100644 index 30887c4a..00000000 --- a/crypto/include/internal/rand.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 - */ - -/* - * Licensed under the OpenSSL licenses, (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * https://www.openssl.org/source/license.html - * or in the file LICENSE in the source distribution. - */ - -#include - -void rand_cleanup_int(void); diff --git a/crypto/include/internal/rand_int.h b/crypto/include/internal/rand_int.h new file mode 100644 index 00000000..fc1abd97 --- /dev/null +++ b/crypto/include/internal/rand_int.h @@ -0,0 +1,22 @@ +/* + * 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 + */ + +/* + * Licensed under the OpenSSL licenses, (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * https://www.openssl.org/source/license.html + * or in the file LICENSE in the source distribution. + */ + +#include + +void rand_cleanup_int(void); +void rand_drbg_cleanup_int(void); +void rand_fork(void); diff --git a/crypto/include/internal/sha.h b/crypto/include/internal/sha.h new file mode 100644 index 00000000..458a75e8 --- /dev/null +++ b/crypto/include/internal/sha.h @@ -0,0 +1,19 @@ +/* + * Copyright 2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2018, 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_INTERNAL_SHA_H +# define HEADER_INTERNAL_SHA_H + +# include + +int sha512_224_init(SHA512_CTX *); +int sha512_256_init(SHA512_CTX *); + +#endif diff --git a/crypto/include/internal/siphash.h b/crypto/include/internal/siphash.h new file mode 100644 index 00000000..e0868596 --- /dev/null +++ b/crypto/include/internal/siphash.h @@ -0,0 +1,24 @@ +/* + * 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 + */ + +#include + +#define SIPHASH_BLOCK_SIZE 8 +#define SIPHASH_KEY_SIZE 16 +#define SIPHASH_MIN_DIGEST_SIZE 8 +#define SIPHASH_MAX_DIGEST_SIZE 16 + +typedef struct siphash_st SIPHASH; + +size_t SipHash_ctx_size(void); +size_t SipHash_hash_size(SIPHASH *ctx); +int SipHash_Init(SIPHASH *ctx, const unsigned char *k, int hash_size, + int crounds, int drounds); +void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen); +int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen); diff --git a/crypto/include/internal/sm3.h b/crypto/include/internal/sm3.h new file mode 100644 index 00000000..27eb471c --- /dev/null +++ b/crypto/include/internal/sm3.h @@ -0,0 +1,39 @@ +/* + * Copyright 2017 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 + */ + +#ifndef HEADER_SM3_H +# define HEADER_SM3_H + +# include + +# ifdef OPENSSL_NO_SM3 +# error SM3 is disabled. +# endif + +# define SM3_DIGEST_LENGTH 32 +# define SM3_WORD unsigned int + +# define SM3_CBLOCK 64 +# define SM3_LBLOCK (SM3_CBLOCK/4) + +typedef struct SM3state_st { + SM3_WORD A, B, C, D, E, F, G, H; + SM3_WORD Nl, Nh; + SM3_WORD data[SM3_LBLOCK]; + unsigned int num; +} SM3_CTX; + +int sm3_init(SM3_CTX *c); +int sm3_update(SM3_CTX *c, const void *data, size_t len); +int sm3_final(unsigned char *md, SM3_CTX *c); + +void sm3_block_data_order(SM3_CTX *c, const void *p, size_t num); + +#endif diff --git a/crypto/include/internal/sm4.h b/crypto/include/internal/sm4.h new file mode 100644 index 00000000..f1f157ef --- /dev/null +++ b/crypto/include/internal/sm4.h @@ -0,0 +1,37 @@ +/* + * Copyright 2017 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 + */ + +#ifndef HEADER_SM4_H +# define HEADER_SM4_H + +# include +# include + +# ifdef OPENSSL_NO_SM4 +# error SM4 is disabled. +# endif + +# define SM4_ENCRYPT 1 +# define SM4_DECRYPT 0 + +# define SM4_BLOCK_SIZE 16 +# define SM4_KEY_SCHEDULE 32 + +typedef struct SM4_KEY_st { + uint32_t rk[SM4_KEY_SCHEDULE]; +} SM4_KEY; + +int SM4_set_key(const uint8_t *key, SM4_KEY *ks); + +void SM4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); + +void SM4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks); + +#endif diff --git a/crypto/include/internal/store.h b/crypto/include/internal/store.h new file mode 100644 index 00000000..f5013dc3 --- /dev/null +++ b/crypto/include/internal/store.h @@ -0,0 +1,10 @@ +/* + * 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 + */ + +void ossl_store_cleanup_int(void); diff --git a/crypto/include/internal/store_int.h b/crypto/include/internal/store_int.h new file mode 100644 index 00000000..9966aefa --- /dev/null +++ b/crypto/include/internal/store_int.h @@ -0,0 +1,33 @@ +/* + * 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 + */ + +#ifndef HEADER_STORE_INT_H +# define HEADER_STORE_INT_H + +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Two functions to read PEM data off an already opened BIO. To be used + * instead of OSSLSTORE_open() and OSSLSTORE_close(). Everything is done + * as usual with OSSLSTORE_load() and OSSLSTORE_eof(). + */ +OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method, + void *ui_data); +int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/crypto/include/internal/x509_int.h b/crypto/include/internal/x509_int.h index 2845026d..124cc533 100644 --- a/crypto/include/internal/x509_int.h +++ b/crypto/include/internal/x509_int.h @@ -7,6 +7,8 @@ * https://www.openssl.org/source/license.html */ +#include "internal/refcount.h" + /* Internal X509 structures and functions: not for application use */ /* Note: unless otherwise stated a field pointer is mandatory and should @@ -35,6 +37,19 @@ struct X509_name_st { int canon_enclen; } /* X509_NAME */ ; +/* Signature info structure */ + +struct x509_sig_info_st { + /* NID of message digest */ + int mdnid; + /* NID of public key algorithm */ + int pknid; + /* Security bits */ + int secbits; + /* Various flags */ + uint32_t flags; +}; + /* PKCS#10 certificate request */ struct X509_req_info_st { @@ -54,7 +69,7 @@ struct X509_req_st { X509_REQ_INFO req_info; /* signed certificate request data */ X509_ALGOR sig_alg; /* signature algorithm */ ASN1_BIT_STRING *signature; /* signature */ - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -73,7 +88,7 @@ struct X509_crl_st { X509_CRL_INFO crl; /* signed CRL data */ X509_ALGOR sig_alg; /* CRL signature algorithm */ ASN1_BIT_STRING signature; /* CRL signature */ - int references; + CRYPTO_REF_COUNT references; int flags; /* * Cached copies of decoded extension values, since extensions @@ -144,7 +159,8 @@ struct x509_st { X509_CINF cert_info; X509_ALGOR sig_alg; ASN1_BIT_STRING signature; - int references; + X509_SIG_INFO siginf; + CRYPTO_REF_COUNT references; CRYPTO_EX_DATA ex_data; /* These contain copies of various extension values */ long ex_pathlen; @@ -265,3 +281,5 @@ struct x509_object_st { int a2i_ipadd(unsigned char *ipout, const char *ipasc); int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); + +void x509_init_sig_info(X509 *x); diff --git a/crypto/init.c b/crypto/init.c index 173eac37..4a88e9cc 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -1,5 +1,5 @@ /* - * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,23 +7,25 @@ * https://www.openssl.org/source/license.html */ -#include +#include "e_os.h" +#include "internal/cryptlib_int.h" #include -#include -#include +#include "internal/rand_int.h" +#include "internal/bio.h" #include -#include -#include -#include -#include -#include -#include -#include -#include +#include "internal/evp_int.h" +#include "internal/conf.h" +#include "internal/async.h" +#include "internal/engine.h" +#include "internal/comp.h" +#include "internal/err.h" +#include "internal/err_int.h" +#include "internal/objects.h" #include #include -#include -#include +#include "internal/thread_once.h" +#include "internal/dso.h" +#include "internal/store.h" static int stopped = 0; @@ -70,6 +72,9 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_base) { #ifdef OPENSSL_INIT_DEBUG fprintf(stderr, "OPENSSL_INIT: ossl_init_base: Setting up stop handlers\n"); +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG + ossl_malloc_setup_failures(); #endif /* * We use a dummy thread local key here. We use the destructor to detect @@ -145,7 +150,7 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_load_crypto_strings) # endif ret = err_load_crypto_strings_int(); load_crypto_strings_inited = 1; -#endif +#endif return ret; } @@ -238,16 +243,15 @@ DEFINE_RUN_ONCE_STATIC(ossl_init_engine_openssl) engine_load_openssl_int(); return 1; } -# if !defined(OPENSSL_NO_HW) && \ - (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)) -static CRYPTO_ONCE engine_cryptodev = CRYPTO_ONCE_STATIC_INIT; -DEFINE_RUN_ONCE_STATIC(ossl_init_engine_cryptodev) +# ifndef OPENSSL_NO_DEVCRYPTOENG +static CRYPTO_ONCE engine_devcrypto = CRYPTO_ONCE_STATIC_INIT; +DEFINE_RUN_ONCE_STATIC(ossl_init_engine_devcrypto) { # ifdef OPENSSL_INIT_DEBUG - fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_cryptodev: " - "engine_load_cryptodev_int()\n"); + fprintf(stderr, "OPENSSL_INIT: ossl_init_engine_devcrypto: " + "engine_load_devcrypto_int()\n"); # endif - engine_load_cryptodev_int(); + engine_load_devcrypto_int(); return 1; } # endif @@ -417,6 +421,7 @@ void OPENSSL_cleanup(void) stop_handlers = NULL; CRYPTO_THREAD_lock_free(init_lock); + init_lock = NULL; /* * We assume we are single-threaded for this function, i.e. no race @@ -485,16 +490,20 @@ void OPENSSL_cleanup(void) * obj_cleanup_int() must be called last */ rand_cleanup_int(); + rand_drbg_cleanup_int(); conf_modules_free_int(); #ifndef OPENSSL_NO_ENGINE engine_cleanup_int(); #endif + ossl_store_cleanup_int(); crypto_cleanup_all_ex_data_int(); bio_cleanup(); evp_cleanup_int(); obj_cleanup_int(); err_cleanup(); + CRYPTO_secure_malloc_done(); + base_inited = 0; } @@ -548,6 +557,10 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) && !RUN_ONCE(&add_all_digests, ossl_init_add_all_digests)) return 0; + if ((opts & OPENSSL_INIT_ATFORK) + && !openssl_init_fork_handlers()) + return 0; + if ((opts & OPENSSL_INIT_NO_LOAD_CONFIG) && !RUN_ONCE(&config, ossl_init_no_config)) return 0; @@ -570,10 +583,9 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) if ((opts & OPENSSL_INIT_ENGINE_OPENSSL) && !RUN_ONCE(&engine_openssl, ossl_init_engine_openssl)) return 0; -# if !defined(OPENSSL_NO_HW) && \ - (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)) +# if !defined(OPENSSL_NO_HW) && !defined(OPENSSL_NO_DEVCRYPTOENG) if ((opts & OPENSSL_INIT_ENGINE_CRYPTODEV) - && !RUN_ONCE(&engine_cryptodev, ossl_init_engine_cryptodev)) + && !RUN_ONCE(&engine_devcrypto, ossl_init_engine_devcrypto)) return 0; # endif # ifndef OPENSSL_NO_RDRAND @@ -674,3 +686,29 @@ int OPENSSL_atexit(void (*handler)(void)) return 1; } + +#ifdef OPENSSL_SYS_UNIX +/* + * The following three functions are for OpenSSL developers. This is + * where we set/reset state across fork (called via pthread_atfork when + * it exists, or manually by the application when it doesn't). + * + * WARNING! If you put code in either OPENSSL_fork_parent or + * OPENSSL_fork_child, you MUST MAKE SURE that they are async-signal- + * safe. See this link, for example: + * http://man7.org/linux/man-pages/man7/signal-safety.7.html + */ + +void OPENSSL_fork_prepare(void) +{ +} + +void OPENSSL_fork_parent(void) +{ +} + +void OPENSSL_fork_child(void) +{ + rand_fork(); +} +#endif diff --git a/crypto/kdf/build.info b/crypto/kdf/build.info index cbe2080e..c166399d 100644 --- a/crypto/kdf/build.info +++ b/crypto/kdf/build.info @@ -1,3 +1,3 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ - tls1_prf.c kdf_err.c hkdf.c + tls1_prf.c kdf_err.c hkdf.c scrypt.c diff --git a/crypto/kdf/hkdf.c b/crypto/kdf/hkdf.c index 00b95b5a..63c3523c 100644 --- a/crypto/kdf/hkdf.c +++ b/crypto/kdf/hkdf.c @@ -34,6 +34,7 @@ static unsigned char *HKDF_Expand(const EVP_MD *evp_md, unsigned char *okm, size_t okm_len); typedef struct { + int mode; const EVP_MD *md; unsigned char *salt; size_t salt_len; @@ -77,6 +78,10 @@ static int pkey_hkdf_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) kctx->md = p2; return 1; + case EVP_PKEY_CTRL_HKDF_MODE: + kctx->mode = p1; + return 1; + case EVP_PKEY_CTRL_HKDF_SALT: if (p1 == 0 || p2 == NULL) return 1; @@ -128,8 +133,24 @@ static int pkey_hkdf_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) static int pkey_hkdf_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { + if (strcmp(type, "mode") == 0) { + int mode; + + if (strcmp(value, "EXTRACT_AND_EXPAND") == 0) + mode = EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND; + else if (strcmp(value, "EXTRACT_ONLY") == 0) + mode = EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY; + else if (strcmp(value, "EXPAND_ONLY") == 0) + mode = EVP_PKEY_HKDEF_MODE_EXPAND_ONLY; + else + return 0; + + return EVP_PKEY_CTX_hkdf_mode(ctx, mode); + } + if (strcmp(type, "md") == 0) - return EVP_PKEY_CTX_set_hkdf_md(ctx, EVP_get_digestbyname(value)); + return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_DERIVE, + EVP_PKEY_CTRL_HKDF_MD, value); if (strcmp(type, "salt") == 0) return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_HKDF_SALT, value); @@ -149,6 +170,7 @@ static int pkey_hkdf_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, if (strcmp(type, "hexinfo") == 0) return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_HKDF_INFO, value); + KDFerr(KDF_F_PKEY_HKDF_CTRL_STR, KDF_R_UNKNOWN_PARAMETER_TYPE); return -2; } @@ -157,16 +179,36 @@ static int pkey_hkdf_derive(EVP_PKEY_CTX *ctx, unsigned char *key, { HKDF_PKEY_CTX *kctx = ctx->data; - if (kctx->md == NULL || kctx->key == NULL) + if (kctx->md == NULL) { + KDFerr(KDF_F_PKEY_HKDF_DERIVE, KDF_R_MISSING_MESSAGE_DIGEST); return 0; - - if (HKDF(kctx->md, kctx->salt, kctx->salt_len, kctx->key, kctx->key_len, - kctx->info, kctx->info_len, key, *keylen) == NULL) - { + } + if (kctx->key == NULL) { + KDFerr(KDF_F_PKEY_HKDF_DERIVE, KDF_R_MISSING_KEY); return 0; } - return 1; + switch (kctx->mode) { + case EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND: + return HKDF(kctx->md, kctx->salt, kctx->salt_len, kctx->key, + kctx->key_len, kctx->info, kctx->info_len, key, + *keylen) != NULL; + + case EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY: + if (key == NULL) { + *keylen = EVP_MD_size(kctx->md); + return 1; + } + return HKDF_Extract(kctx->md, kctx->salt, kctx->salt_len, kctx->key, + kctx->key_len, key, keylen) != NULL; + + case EVP_PKEY_HKDEF_MODE_EXPAND_ONLY: + return HKDF_Expand(kctx->md, kctx->key, kctx->key_len, kctx->info, + kctx->info_len, key, *keylen) != NULL; + + default: + return 0; + } } const EVP_PKEY_METHOD hkdf_pkey_meth = { @@ -206,12 +248,16 @@ static unsigned char *HKDF(const EVP_MD *evp_md, unsigned char *okm, size_t okm_len) { unsigned char prk[EVP_MAX_MD_SIZE]; + unsigned char *ret; size_t prk_len; if (!HKDF_Extract(evp_md, salt, salt_len, key, key_len, prk, &prk_len)) return NULL; - return HKDF_Expand(evp_md, prk, prk_len, info, info_len, okm, okm_len); + ret = HKDF_Expand(evp_md, prk, prk_len, info, info_len, okm, okm_len); + OPENSSL_cleanse(prk, sizeof(prk)); + + return ret; } static unsigned char *HKDF_Extract(const EVP_MD *evp_md, @@ -245,7 +291,7 @@ static unsigned char *HKDF_Expand(const EVP_MD *evp_md, if (okm_len % dig_len) n++; - if (n > 255) + if (n > 255 || okm == NULL) return NULL; if ((hmac = HMAC_CTX_new()) == NULL) diff --git a/crypto/kdf/kdf_err.c b/crypto/kdf/kdf_err.c index d7d71b35..c7b84b0f 100644 --- a/crypto/kdf/kdf_err.c +++ b/crypto/kdf/kdf_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,26 +8,42 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_KDF,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_KDF,0,reason) - -static ERR_STRING_DATA KDF_str_functs[] = { - {ERR_FUNC(KDF_F_PKEY_TLS1_PRF_CTRL_STR), "pkey_tls1_prf_ctrl_str"}, - {ERR_FUNC(KDF_F_PKEY_TLS1_PRF_DERIVE), "pkey_tls1_prf_derive"}, +static const ERR_STRING_DATA KDF_str_functs[] = { + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_HKDF_CTRL_STR, 0), "pkey_hkdf_ctrl_str"}, + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_HKDF_DERIVE, 0), "pkey_hkdf_derive"}, + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_SCRYPT_CTRL_STR, 0), + "pkey_scrypt_ctrl_str"}, + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_SCRYPT_CTRL_UINT64, 0), + "pkey_scrypt_ctrl_uint64"}, + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_SCRYPT_DERIVE, 0), "pkey_scrypt_derive"}, + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_TLS1_PRF_CTRL_STR, 0), + "pkey_tls1_prf_ctrl_str"}, + {ERR_PACK(ERR_LIB_KDF, KDF_F_PKEY_TLS1_PRF_DERIVE, 0), + "pkey_tls1_prf_derive"}, {0, NULL} }; -static ERR_STRING_DATA KDF_str_reasons[] = { - {ERR_REASON(KDF_R_INVALID_DIGEST), "invalid digest"}, - {ERR_REASON(KDF_R_MISSING_PARAMETER), "missing parameter"}, - {ERR_REASON(KDF_R_VALUE_MISSING), "value missing"}, +static const ERR_STRING_DATA KDF_str_reasons[] = { + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_INVALID_DIGEST), "invalid digest"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_ITERATION_COUNT), + "missing iteration count"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_KEY), "missing key"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_MESSAGE_DIGEST), + "missing message digest"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_PARAMETER), "missing parameter"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_PASS), "missing pass"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_SALT), "missing salt"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_SECRET), "missing secret"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_MISSING_SEED), "missing seed"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_UNKNOWN_PARAMETER_TYPE), + "unknown parameter type"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_VALUE_ERROR), "value error"}, + {ERR_PACK(ERR_LIB_KDF, 0, KDF_R_VALUE_MISSING), "value missing"}, {0, NULL} }; @@ -36,10 +52,9 @@ static ERR_STRING_DATA KDF_str_reasons[] = { int ERR_load_KDF_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(KDF_str_functs[0].error) == NULL) { - ERR_load_strings(0, KDF_str_functs); - ERR_load_strings(0, KDF_str_reasons); + ERR_load_strings_const(KDF_str_functs); + ERR_load_strings_const(KDF_str_reasons); } #endif return 1; diff --git a/crypto/kdf/scrypt.c b/crypto/kdf/scrypt.c new file mode 100644 index 00000000..3f4cf385 --- /dev/null +++ b/crypto/kdf/scrypt.c @@ -0,0 +1,262 @@ +/* + * 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 + */ + +#include +#include +#include +#include +#include +#include "internal/cryptlib.h" +#include "internal/evp_int.h" + +#ifndef OPENSSL_NO_SCRYPT + +static int atou64(const char *nptr, uint64_t *result); + +typedef struct { + unsigned char *pass; + size_t pass_len; + unsigned char *salt; + size_t salt_len; + uint64_t N, r, p; + uint64_t maxmem_bytes; +} SCRYPT_PKEY_CTX; + +/* Custom uint64_t parser since we do not have strtoull */ +static int atou64(const char *nptr, uint64_t *result) +{ + uint64_t value = 0; + + while (*nptr) { + unsigned int digit; + uint64_t new_value; + + if ((*nptr < '0') || (*nptr > '9')) { + return 0; + } + digit = (unsigned int)(*nptr - '0'); + new_value = (value * 10) + digit; + if ((new_value < digit) || ((new_value - digit) / 10 != value)) { + /* Overflow */ + return 0; + } + value = new_value; + nptr++; + } + *result = value; + return 1; +} + +static int pkey_scrypt_init(EVP_PKEY_CTX *ctx) +{ + SCRYPT_PKEY_CTX *kctx; + + kctx = OPENSSL_zalloc(sizeof(*kctx)); + if (kctx == NULL) + return 0; + + /* Default values are the most conservative recommendation given in the + * original paper of C. Percival. Derivation uses roughly 1 GiB of memory + * for this parameter choice (approx. 128 * r * (N + p) bytes). + */ + kctx->N = 1 << 20; + kctx->r = 8; + kctx->p = 1; + kctx->maxmem_bytes = 1025 * 1024 * 1024; + + ctx->data = kctx; + + return 1; +} + +static void pkey_scrypt_cleanup(EVP_PKEY_CTX *ctx) +{ + SCRYPT_PKEY_CTX *kctx = ctx->data; + + OPENSSL_clear_free(kctx->salt, kctx->salt_len); + OPENSSL_clear_free(kctx->pass, kctx->pass_len); + OPENSSL_free(kctx); +} + +static int pkey_scrypt_set_membuf(unsigned char **buffer, size_t *buflen, + const unsigned char *new_buffer, + const int new_buflen) +{ + if (new_buffer == NULL) + return 1; + + if (new_buflen < 0) + return 0; + + if (*buffer != NULL) + OPENSSL_clear_free(*buffer, *buflen); + + if (new_buflen > 0) { + *buffer = OPENSSL_memdup(new_buffer, new_buflen); + } else { + *buffer = OPENSSL_malloc(1); + } + if (*buffer == NULL) + return 0; + + *buflen = new_buflen; + return 1; +} + +static int is_power_of_two(uint64_t value) +{ + return (value != 0) && ((value & (value - 1)) == 0); +} + +static int pkey_scrypt_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) +{ + SCRYPT_PKEY_CTX *kctx = ctx->data; + uint64_t u64_value; + + switch (type) { + case EVP_PKEY_CTRL_PASS: + return pkey_scrypt_set_membuf(&kctx->pass, &kctx->pass_len, p2, p1); + + case EVP_PKEY_CTRL_SCRYPT_SALT: + return pkey_scrypt_set_membuf(&kctx->salt, &kctx->salt_len, p2, p1); + + case EVP_PKEY_CTRL_SCRYPT_N: + u64_value = *((uint64_t *)p2); + if ((u64_value <= 1) || !is_power_of_two(u64_value)) + return 0; + kctx->N = u64_value; + return 1; + + case EVP_PKEY_CTRL_SCRYPT_R: + u64_value = *((uint64_t *)p2); + if (u64_value < 1) + return 0; + kctx->r = u64_value; + return 1; + + case EVP_PKEY_CTRL_SCRYPT_P: + u64_value = *((uint64_t *)p2); + if (u64_value < 1) + return 0; + kctx->p = u64_value; + return 1; + + case EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES: + u64_value = *((uint64_t *)p2); + if (u64_value < 1) + return 0; + kctx->maxmem_bytes = u64_value; + return 1; + + default: + return -2; + + } +} + +static int pkey_scrypt_ctrl_uint64(EVP_PKEY_CTX *ctx, int type, + const char *value) +{ + uint64_t int_value; + + if (!atou64(value, &int_value)) { + KDFerr(KDF_F_PKEY_SCRYPT_CTRL_UINT64, KDF_R_VALUE_ERROR); + return 0; + } + return pkey_scrypt_ctrl(ctx, type, 0, &int_value); +} + +static int pkey_scrypt_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, + const char *value) +{ + if (value == NULL) { + KDFerr(KDF_F_PKEY_SCRYPT_CTRL_STR, KDF_R_VALUE_MISSING); + return 0; + } + + if (strcmp(type, "pass") == 0) + return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_PASS, value); + + if (strcmp(type, "hexpass") == 0) + return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_PASS, value); + + if (strcmp(type, "salt") == 0) + return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_SCRYPT_SALT, value); + + if (strcmp(type, "hexsalt") == 0) + return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_SCRYPT_SALT, value); + + if (strcmp(type, "N") == 0) + return pkey_scrypt_ctrl_uint64(ctx, EVP_PKEY_CTRL_SCRYPT_N, value); + + if (strcmp(type, "r") == 0) + return pkey_scrypt_ctrl_uint64(ctx, EVP_PKEY_CTRL_SCRYPT_R, value); + + if (strcmp(type, "p") == 0) + return pkey_scrypt_ctrl_uint64(ctx, EVP_PKEY_CTRL_SCRYPT_P, value); + + if (strcmp(type, "maxmem_bytes") == 0) + return pkey_scrypt_ctrl_uint64(ctx, EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, + value); + + KDFerr(KDF_F_PKEY_SCRYPT_CTRL_STR, KDF_R_UNKNOWN_PARAMETER_TYPE); + return -2; +} + +static int pkey_scrypt_derive(EVP_PKEY_CTX *ctx, unsigned char *key, + size_t *keylen) +{ + SCRYPT_PKEY_CTX *kctx = ctx->data; + + if (kctx->pass == NULL) { + KDFerr(KDF_F_PKEY_SCRYPT_DERIVE, KDF_R_MISSING_PASS); + return 0; + } + + if (kctx->salt == NULL) { + KDFerr(KDF_F_PKEY_SCRYPT_DERIVE, KDF_R_MISSING_SALT); + return 0; + } + + return EVP_PBE_scrypt((char *)kctx->pass, kctx->pass_len, kctx->salt, + kctx->salt_len, kctx->N, kctx->r, kctx->p, + kctx->maxmem_bytes, key, *keylen); +} + +const EVP_PKEY_METHOD scrypt_pkey_meth = { + EVP_PKEY_SCRYPT, + 0, + pkey_scrypt_init, + 0, + pkey_scrypt_cleanup, + + 0, 0, + 0, 0, + + 0, + 0, + + 0, + 0, + + 0, 0, + + 0, 0, 0, 0, + + 0, 0, + + 0, 0, + + 0, + pkey_scrypt_derive, + pkey_scrypt_ctrl, + pkey_scrypt_ctrl_str +}; + +#endif diff --git a/crypto/kdf/tls1_prf.c b/crypto/kdf/tls1_prf.c index fa13732b..339e10c1 100644 --- a/crypto/kdf/tls1_prf.c +++ b/crypto/kdf/tls1_prf.c @@ -115,6 +115,8 @@ static int pkey_tls1_prf_ctrl_str(EVP_PKEY_CTX *ctx, return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_TLS_SEED, value); if (strcmp(type, "hexseed") == 0) return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_TLS_SEED, value); + + KDFerr(KDF_F_PKEY_TLS1_PRF_CTRL_STR, KDF_R_UNKNOWN_PARAMETER_TYPE); return -2; } @@ -122,8 +124,16 @@ static int pkey_tls1_prf_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen) { TLS1_PRF_PKEY_CTX *kctx = ctx->data; - if (kctx->md == NULL || kctx->sec == NULL || kctx->seedlen == 0) { - KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_PARAMETER); + if (kctx->md == NULL) { + KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_MESSAGE_DIGEST); + return 0; + } + if (kctx->sec == NULL) { + KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_SECRET); + return 0; + } + if (kctx->seedlen == 0) { + KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_SEED); return 0; } return tls1_prf_alg(kctx->md, kctx->sec, kctx->seclen, @@ -174,7 +184,8 @@ static int tls1_prf_P_hash(const EVP_MD *md, int ret = 0; chunk = EVP_MD_size(md); - OPENSSL_assert(chunk >= 0); + if (!ossl_assert(chunk > 0)) + goto err; ctx = EVP_MD_CTX_new(); ctx_tmp = EVP_MD_CTX_new(); diff --git a/crypto/lhash/lh_stats.c b/crypto/lhash/lh_stats.c index 5586afa0..65b91e1e 100644 --- a/crypto/lhash/lh_stats.c +++ b/crypto/lhash/lh_stats.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,35 +61,22 @@ void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp) void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out) { - OPENSSL_LHASH *lh_mut = (OPENSSL_LHASH *) lh; - int ret; - BIO_printf(out, "num_items = %lu\n", lh->num_items); - BIO_printf(out, "num_nodes = %u\n", lh->num_nodes); - BIO_printf(out, "num_alloc_nodes = %u\n", lh->num_alloc_nodes); + BIO_printf(out, "num_nodes = %u\n", lh->num_nodes); + BIO_printf(out, "num_alloc_nodes = %u\n", lh->num_alloc_nodes); BIO_printf(out, "num_expands = %lu\n", lh->num_expands); BIO_printf(out, "num_expand_reallocs = %lu\n", lh->num_expand_reallocs); BIO_printf(out, "num_contracts = %lu\n", lh->num_contracts); - BIO_printf(out, "num_contract_reallocs = %lu\n", - lh->num_contract_reallocs); - CRYPTO_atomic_add(&lh_mut->num_hash_calls, 0, &ret, - lh->retrieve_stats_lock); - BIO_printf(out, "num_hash_calls = %d\n", ret); - CRYPTO_atomic_add(&lh_mut->num_comp_calls, 0, &ret, - lh->retrieve_stats_lock); - BIO_printf(out, "num_comp_calls = %d\n", ret); + BIO_printf(out, "num_contract_reallocs = %lu\n", lh->num_contract_reallocs); + BIO_printf(out, "num_hash_calls = %lu\n", lh->num_hash_calls); + BIO_printf(out, "num_comp_calls = %lu\n", lh->num_comp_calls); BIO_printf(out, "num_insert = %lu\n", lh->num_insert); BIO_printf(out, "num_replace = %lu\n", lh->num_replace); BIO_printf(out, "num_delete = %lu\n", lh->num_delete); BIO_printf(out, "num_no_delete = %lu\n", lh->num_no_delete); - CRYPTO_atomic_add(&lh_mut->num_retrieve, 0, &ret, lh->retrieve_stats_lock); - BIO_printf(out, "num_retrieve = %d\n", ret); - CRYPTO_atomic_add(&lh_mut->num_retrieve_miss, 0, &ret, - lh->retrieve_stats_lock); - BIO_printf(out, "num_retrieve_miss = %d\n", ret); - CRYPTO_atomic_add(&lh_mut->num_hash_comps, 0, &ret, - lh->retrieve_stats_lock); - BIO_printf(out, "num_hash_comps = %d\n", ret); + BIO_printf(out, "num_retrieve = %lu\n", lh->num_retrieve); + BIO_printf(out, "num_retrieve_miss = %lu\n", lh->num_retrieve_miss); + BIO_printf(out, "num_hash_comps = %lu\n", lh->num_hash_comps); } void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out) diff --git a/crypto/lhash/lhash.c b/crypto/lhash/lhash.c index f4854117..38c084d1 100644 --- a/crypto/lhash/lhash.c +++ b/crypto/lhash/lhash.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,7 +16,7 @@ /* * A hashing implementation that appears to be based on the linear hashing - * algorithm: + * alogrithm: * https://en.wikipedia.org/wiki/Linear_hashing * * Litwin, Witold (1980), "Linear hashing: A new tool for file and table @@ -49,8 +49,6 @@ OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c) return NULL; if ((ret->b = OPENSSL_zalloc(sizeof(*ret->b) * MIN_NODES)) == NULL) goto err; - if ((ret->retrieve_stats_lock = CRYPTO_THREAD_lock_new()) == NULL) - goto err; ret->comp = ((c == NULL) ? (OPENSSL_LH_COMPFUNC)strcmp : c); ret->hash = ((h == NULL) ? (OPENSSL_LH_HASHFUNC)OPENSSL_LH_strhash : h); ret->num_nodes = MIN_NODES / 2; @@ -58,7 +56,7 @@ OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c) ret->pmax = MIN_NODES / 2; ret->up_load = UP_LOAD; ret->down_load = DOWN_LOAD; - return (ret); + return ret; err: OPENSSL_free(ret->b); @@ -82,7 +80,6 @@ void OPENSSL_LH_free(OPENSSL_LHASH *lh) n = nn; } } - CRYPTO_THREAD_lock_free(lh->retrieve_stats_lock); OPENSSL_free(lh->b); OPENSSL_free(lh); } @@ -102,7 +99,7 @@ void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data) if (*rn == NULL) { if ((nn = OPENSSL_malloc(sizeof(*nn))) == NULL) { lh->error++; - return (NULL); + return NULL; } nn->data = data; nn->next = NULL; @@ -112,12 +109,11 @@ void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data) lh->num_insert++; lh->num_items++; } else { /* replace same key */ - ret = (*rn)->data; (*rn)->data = data; lh->num_replace++; } - return (ret); + return ret; } void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data) @@ -131,7 +127,7 @@ void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data) if (*rn == NULL) { lh->num_no_delete++; - return (NULL); + return NULL; } else { nn = *rn; *rn = nn->next; @@ -145,7 +141,7 @@ void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data) (lh->down_load >= (lh->num_items * LH_LOAD_MULT / lh->num_nodes))) contract(lh); - return (ret); + return ret; } void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data) @@ -153,17 +149,16 @@ void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data) unsigned long hash; OPENSSL_LH_NODE **rn; void *ret; - int scratch; lh->error = 0; rn = getrn(lh, data, &hash); if (*rn == NULL) { - CRYPTO_atomic_add(&lh->num_retrieve_miss, 1, &scratch, lh->retrieve_stats_lock); + lh->num_retrieve_miss++; return NULL; } else { ret = (*rn)->data; - CRYPTO_atomic_add(&lh->num_retrieve, 1, &scratch, lh->retrieve_stats_lock); + lh->num_retrieve++; } return ret; } @@ -292,10 +287,9 @@ static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, OPENSSL_LH_NODE **ret, *n1; unsigned long hash, nn; OPENSSL_LH_COMPFUNC cf; - int scratch; hash = (*(lh->hash)) (data); - CRYPTO_atomic_add(&lh->num_hash_calls, 1, &scratch, lh->retrieve_stats_lock); + lh->num_hash_calls++; *rhash = hash; nn = hash % lh->pmax; @@ -305,17 +299,17 @@ static OPENSSL_LH_NODE **getrn(OPENSSL_LHASH *lh, cf = lh->comp; ret = &(lh->b[(int)nn]); for (n1 = *ret; n1 != NULL; n1 = n1->next) { - CRYPTO_atomic_add(&lh->num_hash_comps, 1, &scratch, lh->retrieve_stats_lock); + lh->num_hash_comps++; if (n1->hash != hash) { ret = &(n1->next); continue; } - CRYPTO_atomic_add(&lh->num_comp_calls, 1, &scratch, lh->retrieve_stats_lock); + lh->num_comp_calls++; if (cf(n1->data, data) == 0) break; ret = &(n1->next); } - return (ret); + return ret; } /* @@ -331,12 +325,7 @@ unsigned long OPENSSL_LH_strhash(const char *c) int r; if ((c == NULL) || (*c == '\0')) - return (ret); -/*- - unsigned char b[16]; - MD5(c,strlen(c),b); - return(b[0]|(b[1]<<8)|(b[2]<<16)|(b[3]<<24)); -*/ + return ret; n = 0x100; while (*c) { @@ -348,7 +337,7 @@ unsigned long OPENSSL_LH_strhash(const char *c) ret ^= v * v; c++; } - return ((ret >> 16) ^ ret); + return (ret >> 16) ^ ret; } unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh) diff --git a/crypto/lhash/lhash_lcl.h b/crypto/lhash/lhash_lcl.h index 01d463fb..78691eb6 100644 --- a/crypto/lhash/lhash_lcl.h +++ b/crypto/lhash/lhash_lcl.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -18,13 +18,6 @@ struct lhash_st { OPENSSL_LH_NODE **b; OPENSSL_LH_COMPFUNC comp; OPENSSL_LH_HASHFUNC hash; - /* - * some stats are updated on lookup, which callers aren't expecting to have - * to take an exclusive lock around. This lock protects them on platforms - * without atomics, and their types are int rather than unsigned long below - * so they can be adjusted with CRYPTO_atomic_add. - */ - CRYPTO_RWLOCK *retrieve_stats_lock; unsigned int num_nodes; unsigned int num_alloc_nodes; unsigned int p; @@ -36,14 +29,14 @@ struct lhash_st { unsigned long num_expand_reallocs; unsigned long num_contracts; unsigned long num_contract_reallocs; - int num_hash_calls; - int num_comp_calls; + unsigned long num_hash_calls; + unsigned long num_comp_calls; unsigned long num_insert; unsigned long num_replace; unsigned long num_delete; unsigned long num_no_delete; - int num_retrieve; - int num_retrieve_miss; - int num_hash_comps; + unsigned long num_retrieve; + unsigned long num_retrieve_miss; + unsigned long num_hash_comps; int error; }; diff --git a/crypto/lhash/num.pl b/crypto/lhash/num.pl deleted file mode 100644 index 8a8c42c8..00000000 --- a/crypto/lhash/num.pl +++ /dev/null @@ -1,23 +0,0 @@ -#! /usr/bin/env perl -# 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 - -#node 10 -> 4 - -while (<>) - { - next unless /^node/; - s|\R$||; # Better chomp - @a=split; - $num{$a[3]}++; - } - -@a=sort {$a <=> $b } keys %num; -foreach (0 .. $a[$#a]) - { - printf "%4d:%4d\n",$_,$num{$_}; - } diff --git a/crypto/md2/md2_dgst.c b/crypto/md2/md2_dgst.c index ff062fd4..faa9393f 100644 --- a/crypto/md2/md2_dgst.c +++ b/crypto/md2/md2_dgst.c @@ -63,9 +63,9 @@ static const MD2_INT S[256] = { const char *MD2_options(void) { if (sizeof(MD2_INT) == 1) - return ("md2(char)"); + return "md2(char)"; else - return ("md2(int)"); + return "md2(int)"; } int MD2_Init(MD2_CTX *c) diff --git a/crypto/md2/md2_one.c b/crypto/md2/md2_one.c index 460f96e4..5502b216 100644 --- a/crypto/md2/md2_one.c +++ b/crypto/md2/md2_one.c @@ -43,5 +43,5 @@ unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md) #endif MD2_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); /* Security consideration */ - return (md); + return md; } diff --git a/crypto/md4/md4_locl.h b/crypto/md4/md4_locl.h index 6aec5562..a6c4003f 100644 --- a/crypto/md4/md4_locl.h +++ b/crypto/md4/md4_locl.h @@ -39,9 +39,9 @@ void md4_block_data_order(MD4_CTX *c, const void *p, size_t num); */ /* - * As pointed out by Wei Dai , the above can be simplified - * to the code below. Wei attributes these optimizations to Peter Gutmann's - * SHS code, and he attributes it to Rich Schroeppel. + * As pointed out by Wei Dai, the above can be simplified to the code + * below. Wei attributes these optimizations to Peter Gutmann's SHS code, + * and he attributes it to Rich Schroeppel. */ #define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d)) #define G(b,c,d) (((b) & (c)) | ((b) & (d)) | ((c) & (d))) diff --git a/crypto/md4/md4_one.c b/crypto/md4/md4_one.c index 9f0989fa..9e52303c 100644 --- a/crypto/md4/md4_one.c +++ b/crypto/md4/md4_one.c @@ -43,5 +43,5 @@ unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md) #endif MD4_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); /* security consideration */ - return (md); + return md; } diff --git a/crypto/md5/asm/md5-586.pl b/crypto/md5/asm/md5-586.pl index 24f68af5..15e14864 100644 --- a/crypto/md5/asm/md5-586.pl +++ b/crypto/md5/asm/md5-586.pl @@ -21,7 +21,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],$0); +&asm_init($ARGV[0]); $A="eax"; $B="ebx"; @@ -57,7 +57,7 @@ sub R0 local($pos,$a,$b,$c,$d,$K,$ki,$s,$t)=@_; &mov($tmp1,$C) if $pos < 0; - &mov($tmp2,&DWP($xo[$ki]*4,$K,"",0)) if $pos < 0; # very first one + &mov($tmp2,&DWP($xo[$ki]*4,$K,"",0)) if $pos < 0; # very first one # body proper diff --git a/crypto/md5/asm/md5-ia64.S b/crypto/md5/asm/md5-ia64.S deleted file mode 100644 index c20467b4..00000000 --- a/crypto/md5/asm/md5-ia64.S +++ /dev/null @@ -1,1002 +0,0 @@ -/* - * - * 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 - */ - -/* Copyright (c) 2005 Hewlett-Packard Development Company, L.P. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -// Common registers are assigned as follows: -// -// COMMON -// -// t0 Const Tbl Ptr TPtr -// t1 Round Constant TRound -// t4 Block residual LenResid -// t5 Residual Data DTmp -// -// {in,out}0 Block 0 Cycle RotateM0 -// {in,out}1 Block Value 12 M12 -// {in,out}2 Block Value 8 M8 -// {in,out}3 Block Value 4 M4 -// {in,out}4 Block Value 0 M0 -// {in,out}5 Block 1 Cycle RotateM1 -// {in,out}6 Block Value 13 M13 -// {in,out}7 Block Value 9 M9 -// {in,out}8 Block Value 5 M5 -// {in,out}9 Block Value 1 M1 -// {in,out}10 Block 2 Cycle RotateM2 -// {in,out}11 Block Value 14 M14 -// {in,out}12 Block Value 10 M10 -// {in,out}13 Block Value 6 M6 -// {in,out}14 Block Value 2 M2 -// {in,out}15 Block 3 Cycle RotateM3 -// {in,out}16 Block Value 15 M15 -// {in,out}17 Block Value 11 M11 -// {in,out}18 Block Value 7 M7 -// {in,out}19 Block Value 3 M3 -// {in,out}20 Scratch Z -// {in,out}21 Scratch Y -// {in,out}22 Scratch X -// {in,out}23 Scratch W -// {in,out}24 Digest A A -// {in,out}25 Digest B B -// {in,out}26 Digest C C -// {in,out}27 Digest D D -// {in,out}28 Active Data Ptr DPtr -// in28 Dummy Value - -// out28 Dummy Value - -// bt0 Coroutine Link QUICK_RTN -// -/// These predicates are used for computing the padding block(s) and -/// are shared between the driver and digest co-routines -// -// pt0 Extra Pad Block pExtra -// pt1 Load next word pLoad -// pt2 Skip next word pSkip -// pt3 Search for Pad pNoPad -// pt4 Pad Word 0 pPad0 -// pt5 Pad Word 1 pPad1 -// pt6 Pad Word 2 pPad2 -// pt7 Pad Word 3 pPad3 - -#define DTmp r19 -#define LenResid r18 -#define QUICK_RTN b6 -#define TPtr r14 -#define TRound r15 -#define pExtra p6 -#define pLoad p7 -#define pNoPad p9 -#define pPad0 p10 -#define pPad1 p11 -#define pPad2 p12 -#define pPad3 p13 -#define pSkip p8 - -#define A_ out24 -#define B_ out25 -#define C_ out26 -#define D_ out27 -#define DPtr_ out28 -#define M0_ out4 -#define M1_ out9 -#define M10_ out12 -#define M11_ out17 -#define M12_ out1 -#define M13_ out6 -#define M14_ out11 -#define M15_ out16 -#define M2_ out14 -#define M3_ out19 -#define M4_ out3 -#define M5_ out8 -#define M6_ out13 -#define M7_ out18 -#define M8_ out2 -#define M9_ out7 -#define RotateM0_ out0 -#define RotateM1_ out5 -#define RotateM2_ out10 -#define RotateM3_ out15 -#define W_ out23 -#define X_ out22 -#define Y_ out21 -#define Z_ out20 - -#define A in24 -#define B in25 -#define C in26 -#define D in27 -#define DPtr in28 -#define M0 in4 -#define M1 in9 -#define M10 in12 -#define M11 in17 -#define M12 in1 -#define M13 in6 -#define M14 in11 -#define M15 in16 -#define M2 in14 -#define M3 in19 -#define M4 in3 -#define M5 in8 -#define M6 in13 -#define M7 in18 -#define M8 in2 -#define M9 in7 -#define RotateM0 in0 -#define RotateM1 in5 -#define RotateM2 in10 -#define RotateM3 in15 -#define W in23 -#define X in22 -#define Y in21 -#define Z in20 - -/* register stack configuration for md5_block_asm_data_order(): */ -#define MD5_NINP 3 -#define MD5_NLOC 0 -#define MD5_NOUT 29 -#define MD5_NROT 0 - -/* register stack configuration for helpers: */ -#define _NINPUTS MD5_NOUT -#define _NLOCALS 0 -#define _NOUTPUT 0 -#define _NROTATE 24 /* this must be <= _NINPUTS */ - -#if defined(_HPUX_SOURCE) && !defined(_LP64) -#define ADDP addp4 -#else -#define ADDP add -#endif - -#if defined(_HPUX_SOURCE) || defined(B_ENDIAN) -#define HOST_IS_BIG_ENDIAN -#endif - -// Macros for getting the left and right portions of little-endian words - -#define GETLW(dst, src, align) dep.z dst = src, 32 - 8 * align, 8 * align -#define GETRW(dst, src, align) extr.u dst = src, 8 * align, 32 - 8 * align - -// MD5 driver -// -// Reads an input block, then calls the digest block -// subroutine and adds the results to the accumulated -// digest. It allocates 32 outs which the subroutine -// uses as it's inputs and rotating -// registers. Initializes the round constant pointer and -// takes care of saving/restoring ar.lc -// -/// INPUT -// -// in0 Context Ptr CtxPtr0 -// in1 Input Data Ptr DPtrIn -// in2 Integral Blocks BlockCount -// rp Return Address - -// -/// CODE -// -// v2 Input Align InAlign -// t0 Shared w/digest - -// t1 Shared w/digest - -// t2 Shared w/digest - -// t3 Shared w/digest - -// t4 Shared w/digest - -// t5 Shared w/digest - -// t6 PFS Save PFSSave -// t7 ar.lc Save LCSave -// t8 Saved PR PRSave -// t9 2nd CtxPtr CtxPtr1 -// t10 Table Base CTable -// t11 Table[0] CTable0 -// t13 Accumulator A AccumA -// t14 Accumulator B AccumB -// t15 Accumulator C AccumC -// t16 Accumulator D AccumD -// pt0 Shared w/digest - -// pt1 Shared w/digest - -// pt2 Shared w/digest - -// pt3 Shared w/digest - -// pt4 Shared w/digest - -// pt5 Shared w/digest - -// pt6 Shared w/digest - -// pt7 Shared w/digest - -// pt8 Not Aligned pOff -// pt8 Blocks Left pAgain - -#define AccumA r27 -#define AccumB r28 -#define AccumC r29 -#define AccumD r30 -#define CTable r24 -#define CTable0 r25 -#define CtxPtr0 in0 -#define CtxPtr1 r23 -#define DPtrIn in1 -#define BlockCount in2 -#define InAlign r10 -#define LCSave r21 -#define PFSSave r20 -#define PRSave r22 -#define pAgain p63 -#define pOff p63 - - .text - -/* md5_block_asm_data_order(MD5_CTX *c, const void *data, size_t num) - - where: - c: a pointer to a structure of this type: - - typedef struct MD5state_st - { - MD5_LONG A,B,C,D; - MD5_LONG Nl,Nh; - MD5_LONG data[MD5_LBLOCK]; - unsigned int num; - } - MD5_CTX; - - data: a pointer to the input data (may be misaligned) - num: the number of 16-byte blocks to hash (i.e., the length - of DATA is 16*NUM. - - */ - - .type md5_block_asm_data_order, @function - .global md5_block_asm_data_order - .align 32 - .proc md5_block_asm_data_order -md5_block_asm_data_order: -.md5_block: - .prologue -{ .mmi - .save ar.pfs, PFSSave - alloc PFSSave = ar.pfs, MD5_NINP, MD5_NLOC, MD5_NOUT, MD5_NROT - ADDP CtxPtr1 = 8, CtxPtr0 - mov CTable = ip -} -{ .mmi - ADDP DPtrIn = 0, DPtrIn - ADDP CtxPtr0 = 0, CtxPtr0 - .save ar.lc, LCSave - mov LCSave = ar.lc -} -;; -{ .mmi - add CTable = .md5_tbl_data_order#-.md5_block#, CTable - and InAlign = 0x3, DPtrIn -} - -{ .mmi - ld4 AccumA = [CtxPtr0], 4 - ld4 AccumC = [CtxPtr1], 4 - .save pr, PRSave - mov PRSave = pr - .body -} -;; -{ .mmi - ld4 AccumB = [CtxPtr0] - ld4 AccumD = [CtxPtr1] - dep DPtr_ = 0, DPtrIn, 0, 2 -} ;; -#ifdef HOST_IS_BIG_ENDIAN - rum psr.be;; // switch to little-endian -#endif -{ .mmb - ld4 CTable0 = [CTable], 4 - cmp.ne pOff, p0 = 0, InAlign -(pOff) br.cond.spnt.many .md5_unaligned -} ;; - -// The FF load/compute loop rotates values three times, so that -// loading into M12 here produces the M0 value, M13 -> M1, etc. - -.md5_block_loop0: -{ .mmi - ld4 M12_ = [DPtr_], 4 - mov TPtr = CTable - mov TRound = CTable0 -} ;; -{ .mmi - ld4 M13_ = [DPtr_], 4 - mov A_ = AccumA - mov B_ = AccumB -} ;; -{ .mmi - ld4 M14_ = [DPtr_], 4 - mov C_ = AccumC - mov D_ = AccumD -} ;; -{ .mmb - ld4 M15_ = [DPtr_], 4 - add BlockCount = -1, BlockCount - br.call.sptk.many QUICK_RTN = md5_digest_block0 -} ;; - -// Now, we add the new digest values and do some clean-up -// before checking if there's another full block to process - -{ .mmi - add AccumA = AccumA, A_ - add AccumB = AccumB, B_ - cmp.ne pAgain, p0 = 0, BlockCount -} -{ .mib - add AccumC = AccumC, C_ - add AccumD = AccumD, D_ -(pAgain) br.cond.dptk.many .md5_block_loop0 -} ;; - -.md5_exit: -#ifdef HOST_IS_BIG_ENDIAN - sum psr.be;; // switch back to big-endian mode -#endif -{ .mmi - st4 [CtxPtr0] = AccumB, -4 - st4 [CtxPtr1] = AccumD, -4 - mov pr = PRSave, 0x1ffff ;; -} -{ .mmi - st4 [CtxPtr0] = AccumA - st4 [CtxPtr1] = AccumC - mov ar.lc = LCSave -} ;; -{ .mib - mov ar.pfs = PFSSave - br.ret.sptk.few rp -} ;; - -#define MD5UNALIGNED(offset) \ -.md5_process##offset: \ -{ .mib ; \ - nop 0x0 ; \ - GETRW(DTmp, DTmp, offset) ; \ -} ;; \ -.md5_block_loop##offset: \ -{ .mmi ; \ - ld4 Y_ = [DPtr_], 4 ; \ - mov TPtr = CTable ; \ - mov TRound = CTable0 ; \ -} ;; \ -{ .mmi ; \ - ld4 M13_ = [DPtr_], 4 ; \ - mov A_ = AccumA ; \ - mov B_ = AccumB ; \ -} ;; \ -{ .mii ; \ - ld4 M14_ = [DPtr_], 4 ; \ - GETLW(W_, Y_, offset) ; \ - mov C_ = AccumC ; \ -} \ -{ .mmi ; \ - mov D_ = AccumD ;; \ - or M12_ = W_, DTmp ; \ - GETRW(DTmp, Y_, offset) ; \ -} \ -{ .mib ; \ - ld4 M15_ = [DPtr_], 4 ; \ - add BlockCount = -1, BlockCount ; \ - br.call.sptk.many QUICK_RTN = md5_digest_block##offset; \ -} ;; \ -{ .mmi ; \ - add AccumA = AccumA, A_ ; \ - add AccumB = AccumB, B_ ; \ - cmp.ne pAgain, p0 = 0, BlockCount ; \ -} \ -{ .mib ; \ - add AccumC = AccumC, C_ ; \ - add AccumD = AccumD, D_ ; \ -(pAgain) br.cond.dptk.many .md5_block_loop##offset ; \ -} ;; \ -{ .mib ; \ - nop 0x0 ; \ - nop 0x0 ; \ - br.cond.sptk.many .md5_exit ; \ -} ;; - - .align 32 -.md5_unaligned: -// -// Because variable shifts are expensive, we special case each of -// the four alignements. In practice, this won't hurt too much -// since only one working set of code will be loaded. -// -{ .mib - ld4 DTmp = [DPtr_], 4 - cmp.eq pOff, p0 = 1, InAlign -(pOff) br.cond.dpnt.many .md5_process1 -} ;; -{ .mib - cmp.eq pOff, p0 = 2, InAlign - nop 0x0 -(pOff) br.cond.dpnt.many .md5_process2 -} ;; - MD5UNALIGNED(3) - MD5UNALIGNED(1) - MD5UNALIGNED(2) - - .endp md5_block_asm_data_order - - -// MD5 Perform the F function and load -// -// Passed the first 4 words (M0 - M3) and initial (A, B, C, D) values, -// computes the FF() round of functions, then branches to the common -// digest code to finish up with GG(), HH, and II(). -// -// INPUT -// -// rp Return Address - -// -// CODE -// -// v0 PFS bit bucket PFS -// v1 Loop Trip Count LTrip -// pt0 Load next word pMore - -/* For F round: */ -#define LTrip r9 -#define PFS r8 -#define pMore p6 - -/* For GHI rounds: */ -#define T r9 -#define U r10 -#define V r11 - -#define COMPUTE(a, b, s, M, R) \ -{ \ - .mii ; \ - ld4 TRound = [TPtr], 4 ; \ - dep.z Y = Z, 32, 32 ;; \ - shrp Z = Z, Y, 64 - s ; \ -} ;; \ -{ \ - .mmi ; \ - add a = Z, b ; \ - mov R = M ; \ - nop 0x0 ; \ -} ;; - -#define LOOP(a, b, s, M, R, label) \ -{ .mii ; \ - ld4 TRound = [TPtr], 4 ; \ - dep.z Y = Z, 32, 32 ;; \ - shrp Z = Z, Y, 64 - s ; \ -} ;; \ -{ .mib ; \ - add a = Z, b ; \ - mov R = M ; \ - br.ctop.sptk.many label ; \ -} ;; - -// G(B, C, D) = (B & D) | (C & ~D) - -#define G(a, b, c, d, M) \ -{ .mmi ; \ - add Z = M, TRound ; \ - and Y = b, d ; \ - andcm X = c, d ; \ -} ;; \ -{ .mii ; \ - add Z = Z, a ; \ - or Y = Y, X ;; \ - add Z = Z, Y ; \ -} ;; - -// H(B, C, D) = B ^ C ^ D - -#define H(a, b, c, d, M) \ -{ .mmi ; \ - add Z = M, TRound ; \ - xor Y = b, c ; \ - nop 0x0 ; \ -} ;; \ -{ .mii ; \ - add Z = Z, a ; \ - xor Y = Y, d ;; \ - add Z = Z, Y ; \ -} ;; - -// I(B, C, D) = C ^ (B | ~D) -// -// However, since we have an andcm operator, we use the fact that -// -// Y ^ Z == ~Y ^ ~Z -// -// to rewrite the expression as -// -// I(B, C, D) = ~C ^ (~B & D) - -#define I(a, b, c, d, M) \ -{ .mmi ; \ - add Z = M, TRound ; \ - andcm Y = d, b ; \ - andcm X = -1, c ; \ -} ;; \ -{ .mii ; \ - add Z = Z, a ; \ - xor Y = Y, X ;; \ - add Z = Z, Y ; \ -} ;; - -#define GG4(label) \ - G(A, B, C, D, M0) \ - COMPUTE(A, B, 5, M0, RotateM0) \ - G(D, A, B, C, M1) \ - COMPUTE(D, A, 9, M1, RotateM1) \ - G(C, D, A, B, M2) \ - COMPUTE(C, D, 14, M2, RotateM2) \ - G(B, C, D, A, M3) \ - LOOP(B, C, 20, M3, RotateM3, label) - -#define HH4(label) \ - H(A, B, C, D, M0) \ - COMPUTE(A, B, 4, M0, RotateM0) \ - H(D, A, B, C, M1) \ - COMPUTE(D, A, 11, M1, RotateM1) \ - H(C, D, A, B, M2) \ - COMPUTE(C, D, 16, M2, RotateM2) \ - H(B, C, D, A, M3) \ - LOOP(B, C, 23, M3, RotateM3, label) - -#define II4(label) \ - I(A, B, C, D, M0) \ - COMPUTE(A, B, 6, M0, RotateM0) \ - I(D, A, B, C, M1) \ - COMPUTE(D, A, 10, M1, RotateM1) \ - I(C, D, A, B, M2) \ - COMPUTE(C, D, 15, M2, RotateM2) \ - I(B, C, D, A, M3) \ - LOOP(B, C, 21, M3, RotateM3, label) - -#define FFLOAD(a, b, c, d, M, N, s) \ -{ .mii ; \ -(pMore) ld4 N = [DPtr], 4 ; \ - add Z = M, TRound ; \ - and Y = c, b ; \ -} \ -{ .mmi ; \ - andcm X = d, b ;; \ - add Z = Z, a ; \ - or Y = Y, X ; \ -} ;; \ -{ .mii ; \ - ld4 TRound = [TPtr], 4 ; \ - add Z = Z, Y ;; \ - dep.z Y = Z, 32, 32 ; \ -} ;; \ -{ .mii ; \ - nop 0x0 ; \ - shrp Z = Z, Y, 64 - s ;; \ - add a = Z, b ; \ -} ;; - -#define FFLOOP(a, b, c, d, M, N, s, dest) \ -{ .mii ; \ -(pMore) ld4 N = [DPtr], 4 ; \ - add Z = M, TRound ; \ - and Y = c, b ; \ -} \ -{ .mmi ; \ - andcm X = d, b ;; \ - add Z = Z, a ; \ - or Y = Y, X ; \ -} ;; \ -{ .mii ; \ - ld4 TRound = [TPtr], 4 ; \ - add Z = Z, Y ;; \ - dep.z Y = Z, 32, 32 ; \ -} ;; \ -{ .mii ; \ - nop 0x0 ; \ - shrp Z = Z, Y, 64 - s ;; \ - add a = Z, b ; \ -} \ -{ .mib ; \ - cmp.ne pMore, p0 = 0, LTrip ; \ - add LTrip = -1, LTrip ; \ - br.ctop.dptk.many dest ; \ -} ;; - - .type md5_digest_block0, @function - .align 32 - - .proc md5_digest_block0 - .prologue -md5_digest_block0: - .altrp QUICK_RTN - .body -{ .mmi - alloc PFS = ar.pfs, _NINPUTS, _NLOCALS, _NOUTPUT, _NROTATE - mov LTrip = 2 - mov ar.lc = 3 -} ;; -{ .mii - cmp.eq pMore, p0 = r0, r0 - mov ar.ec = 0 - nop 0x0 -} ;; - -.md5_FF_round0: - FFLOAD(A, B, C, D, M12, RotateM0, 7) - FFLOAD(D, A, B, C, M13, RotateM1, 12) - FFLOAD(C, D, A, B, M14, RotateM2, 17) - FFLOOP(B, C, D, A, M15, RotateM3, 22, .md5_FF_round0) - // - // !!! Fall through to md5_digest_GHI - // - .endp md5_digest_block0 - - .type md5_digest_GHI, @function - .align 32 - - .proc md5_digest_GHI - .prologue - .regstk _NINPUTS, _NLOCALS, _NOUTPUT, _NROTATE -md5_digest_GHI: - .altrp QUICK_RTN - .body -// -// The following sequence shuffles the block counstants round for the -// next round: -// -// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -// 1 6 11 0 5 10 14 4 9 14 3 8 13 2 7 12 -// -{ .mmi - mov Z = M0 - mov Y = M15 - mov ar.lc = 3 -} -{ .mmi - mov X = M2 - mov W = M9 - mov V = M4 -} ;; - -{ .mmi - mov M0 = M1 - mov M15 = M12 - mov ar.ec = 1 -} -{ .mmi - mov M2 = M11 - mov M9 = M14 - mov M4 = M5 -} ;; - -{ .mmi - mov M1 = M6 - mov M12 = M13 - mov U = M3 -} -{ .mmi - mov M11 = M8 - mov M14 = M7 - mov M5 = M10 -} ;; - -{ .mmi - mov M6 = Y - mov M13 = X - mov M3 = Z -} -{ .mmi - mov M8 = W - mov M7 = V - mov M10 = U -} ;; - -.md5_GG_round: - GG4(.md5_GG_round) - -// The following sequence shuffles the block constants round for the -// next round: -// -// 1 6 11 0 5 10 14 4 9 14 3 8 13 2 7 12 -// 5 8 11 14 1 4 7 10 13 0 3 6 9 12 15 2 - -{ .mmi - mov Z = M0 - mov Y = M1 - mov ar.lc = 3 -} -{ .mmi - mov X = M3 - mov W = M5 - mov V = M6 -} ;; - -{ .mmi - mov M0 = M4 - mov M1 = M11 - mov ar.ec = 1 -} -{ .mmi - mov M3 = M9 - mov U = M8 - mov T = M13 -} ;; - -{ .mmi - mov M4 = Z - mov M11 = Y - mov M5 = M7 -} -{ .mmi - mov M6 = M14 - mov M8 = M12 - mov M13 = M15 -} ;; - -{ .mmi - mov M7 = W - mov M14 = V - nop 0x0 -} -{ .mmi - mov M9 = X - mov M12 = U - mov M15 = T -} ;; - -.md5_HH_round: - HH4(.md5_HH_round) - -// The following sequence shuffles the block constants round for the -// next round: -// -// 5 8 11 14 1 4 7 10 13 0 3 6 9 12 15 2 -// 0 7 14 5 12 3 10 1 8 15 6 13 4 11 2 9 - -{ .mmi - mov Z = M0 - mov Y = M15 - mov ar.lc = 3 -} -{ .mmi - mov X = M10 - mov W = M1 - mov V = M4 -} ;; - -{ .mmi - mov M0 = M9 - mov M15 = M12 - mov ar.ec = 1 -} -{ .mmi - mov M10 = M11 - mov M1 = M6 - mov M4 = M13 -} ;; - -{ .mmi - mov M9 = M14 - mov M12 = M5 - mov U = M3 -} -{ .mmi - mov M11 = M8 - mov M6 = M7 - mov M13 = M2 -} ;; - -{ .mmi - mov M14 = Y - mov M5 = X - mov M3 = Z -} -{ .mmi - mov M8 = W - mov M7 = V - mov M2 = U -} ;; - -.md5_II_round: - II4(.md5_II_round) - -{ .mib - nop 0x0 - nop 0x0 - br.ret.sptk.many QUICK_RTN -} ;; - - .endp md5_digest_GHI - -#define FFLOADU(a, b, c, d, M, P, N, s, offset) \ -{ .mii ; \ -(pMore) ld4 N = [DPtr], 4 ; \ - add Z = M, TRound ; \ - and Y = c, b ; \ -} \ -{ .mmi ; \ - andcm X = d, b ;; \ - add Z = Z, a ; \ - or Y = Y, X ; \ -} ;; \ -{ .mii ; \ - ld4 TRound = [TPtr], 4 ; \ - GETLW(W, P, offset) ; \ - add Z = Z, Y ; \ -} ;; \ -{ .mii ; \ - or W = W, DTmp ; \ - dep.z Y = Z, 32, 32 ;; \ - shrp Z = Z, Y, 64 - s ; \ -} ;; \ -{ .mii ; \ - add a = Z, b ; \ - GETRW(DTmp, P, offset) ; \ - mov P = W ; \ -} ;; - -#define FFLOOPU(a, b, c, d, M, P, N, s, offset) \ -{ .mii ; \ -(pMore) ld4 N = [DPtr], 4 ; \ - add Z = M, TRound ; \ - and Y = c, b ; \ -} \ -{ .mmi ; \ - andcm X = d, b ;; \ - add Z = Z, a ; \ - or Y = Y, X ; \ -} ;; \ -{ .mii ; \ - ld4 TRound = [TPtr], 4 ; \ -(pMore) GETLW(W, P, offset) ; \ - add Z = Z, Y ; \ -} ;; \ -{ .mii ; \ -(pMore) or W = W, DTmp ; \ - dep.z Y = Z, 32, 32 ;; \ - shrp Z = Z, Y, 64 - s ; \ -} ;; \ -{ .mii ; \ - add a = Z, b ; \ -(pMore) GETRW(DTmp, P, offset) ; \ -(pMore) mov P = W ; \ -} \ -{ .mib ; \ - cmp.ne pMore, p0 = 0, LTrip ; \ - add LTrip = -1, LTrip ; \ - br.ctop.sptk.many .md5_FF_round##offset ; \ -} ;; - -#define MD5FBLOCK(offset) \ - .type md5_digest_block##offset, @function ; \ - \ - .align 32 ; \ - .proc md5_digest_block##offset ; \ - .prologue ; \ - .altrp QUICK_RTN ; \ - .body ; \ -md5_digest_block##offset: \ -{ .mmi ; \ - alloc PFS = ar.pfs, _NINPUTS, _NLOCALS, _NOUTPUT, _NROTATE ; \ - mov LTrip = 2 ; \ - mov ar.lc = 3 ; \ -} ;; \ -{ .mii ; \ - cmp.eq pMore, p0 = r0, r0 ; \ - mov ar.ec = 0 ; \ - nop 0x0 ; \ -} ;; \ - \ - .pred.rel "mutex", pLoad, pSkip ; \ -.md5_FF_round##offset: \ - FFLOADU(A, B, C, D, M12, M13, RotateM0, 7, offset) \ - FFLOADU(D, A, B, C, M13, M14, RotateM1, 12, offset) \ - FFLOADU(C, D, A, B, M14, M15, RotateM2, 17, offset) \ - FFLOOPU(B, C, D, A, M15, RotateM0, RotateM3, 22, offset) \ - \ -{ .mib ; \ - nop 0x0 ; \ - nop 0x0 ; \ - br.cond.sptk.many md5_digest_GHI ; \ -} ;; \ - .endp md5_digest_block##offset - -MD5FBLOCK(1) -MD5FBLOCK(2) -MD5FBLOCK(3) - - .align 64 - .type md5_constants, @object -md5_constants: -.md5_tbl_data_order: // To ensure little-endian data - // order, code as bytes. - data1 0x78, 0xa4, 0x6a, 0xd7 // 0 - data1 0x56, 0xb7, 0xc7, 0xe8 // 1 - data1 0xdb, 0x70, 0x20, 0x24 // 2 - data1 0xee, 0xce, 0xbd, 0xc1 // 3 - data1 0xaf, 0x0f, 0x7c, 0xf5 // 4 - data1 0x2a, 0xc6, 0x87, 0x47 // 5 - data1 0x13, 0x46, 0x30, 0xa8 // 6 - data1 0x01, 0x95, 0x46, 0xfd // 7 - data1 0xd8, 0x98, 0x80, 0x69 // 8 - data1 0xaf, 0xf7, 0x44, 0x8b // 9 - data1 0xb1, 0x5b, 0xff, 0xff // 10 - data1 0xbe, 0xd7, 0x5c, 0x89 // 11 - data1 0x22, 0x11, 0x90, 0x6b // 12 - data1 0x93, 0x71, 0x98, 0xfd // 13 - data1 0x8e, 0x43, 0x79, 0xa6 // 14 - data1 0x21, 0x08, 0xb4, 0x49 // 15 - data1 0x62, 0x25, 0x1e, 0xf6 // 16 - data1 0x40, 0xb3, 0x40, 0xc0 // 17 - data1 0x51, 0x5a, 0x5e, 0x26 // 18 - data1 0xaa, 0xc7, 0xb6, 0xe9 // 19 - data1 0x5d, 0x10, 0x2f, 0xd6 // 20 - data1 0x53, 0x14, 0x44, 0x02 // 21 - data1 0x81, 0xe6, 0xa1, 0xd8 // 22 - data1 0xc8, 0xfb, 0xd3, 0xe7 // 23 - data1 0xe6, 0xcd, 0xe1, 0x21 // 24 - data1 0xd6, 0x07, 0x37, 0xc3 // 25 - data1 0x87, 0x0d, 0xd5, 0xf4 // 26 - data1 0xed, 0x14, 0x5a, 0x45 // 27 - data1 0x05, 0xe9, 0xe3, 0xa9 // 28 - data1 0xf8, 0xa3, 0xef, 0xfc // 29 - data1 0xd9, 0x02, 0x6f, 0x67 // 30 - data1 0x8a, 0x4c, 0x2a, 0x8d // 31 - data1 0x42, 0x39, 0xfa, 0xff // 32 - data1 0x81, 0xf6, 0x71, 0x87 // 33 - data1 0x22, 0x61, 0x9d, 0x6d // 34 - data1 0x0c, 0x38, 0xe5, 0xfd // 35 - data1 0x44, 0xea, 0xbe, 0xa4 // 36 - data1 0xa9, 0xcf, 0xde, 0x4b // 37 - data1 0x60, 0x4b, 0xbb, 0xf6 // 38 - data1 0x70, 0xbc, 0xbf, 0xbe // 39 - data1 0xc6, 0x7e, 0x9b, 0x28 // 40 - data1 0xfa, 0x27, 0xa1, 0xea // 41 - data1 0x85, 0x30, 0xef, 0xd4 // 42 - data1 0x05, 0x1d, 0x88, 0x04 // 43 - data1 0x39, 0xd0, 0xd4, 0xd9 // 44 - data1 0xe5, 0x99, 0xdb, 0xe6 // 45 - data1 0xf8, 0x7c, 0xa2, 0x1f // 46 - data1 0x65, 0x56, 0xac, 0xc4 // 47 - data1 0x44, 0x22, 0x29, 0xf4 // 48 - data1 0x97, 0xff, 0x2a, 0x43 // 49 - data1 0xa7, 0x23, 0x94, 0xab // 50 - data1 0x39, 0xa0, 0x93, 0xfc // 51 - data1 0xc3, 0x59, 0x5b, 0x65 // 52 - data1 0x92, 0xcc, 0x0c, 0x8f // 53 - data1 0x7d, 0xf4, 0xef, 0xff // 54 - data1 0xd1, 0x5d, 0x84, 0x85 // 55 - data1 0x4f, 0x7e, 0xa8, 0x6f // 56 - data1 0xe0, 0xe6, 0x2c, 0xfe // 57 - data1 0x14, 0x43, 0x01, 0xa3 // 58 - data1 0xa1, 0x11, 0x08, 0x4e // 59 - data1 0x82, 0x7e, 0x53, 0xf7 // 60 - data1 0x35, 0xf2, 0x3a, 0xbd // 61 - data1 0xbb, 0xd2, 0xd7, 0x2a // 62 - data1 0x91, 0xd3, 0x86, 0xeb // 63 -.size md5_constants#,64*4 diff --git a/crypto/md5/asm/md5-sparcv9.pl b/crypto/md5/asm/md5-sparcv9.pl index 09e6d713..6a62c625 100644 --- a/crypto/md5/asm/md5-sparcv9.pl +++ b/crypto/md5/asm/md5-sparcv9.pl @@ -13,7 +13,7 @@ # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. # -# Hardware SPARC T4 support by David S. Miller . +# Hardware SPARC T4 support by David S. Miller. # ==================================================================== # MD5 for SPARCv9, 6.9 cycles per byte on UltraSPARC, >40% faster than @@ -242,7 +242,7 @@ md5_block_asm_data_order: ldd [%o1 + 0x20], %f16 ldd [%o1 + 0x28], %f18 ldd [%o1 + 0x30], %f20 - subcc %o2, 1, %o2 ! done yet? + subcc %o2, 1, %o2 ! done yet? ldd [%o1 + 0x38], %f22 add %o1, 0x40, %o1 prefetch [%o1 + 63], 20 diff --git a/crypto/md5/asm/md5-x86_64.pl b/crypto/md5/asm/md5-x86_64.pl index 3f656dc0..386d8048 100755 --- a/crypto/md5/asm/md5-x86_64.pl +++ b/crypto/md5/asm/md5-x86_64.pl @@ -140,11 +140,17 @@ $code .= <D = D mov (%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r12 +.cfi_restore %r12 mov 24(%rsp),%rbx +.cfi_restore %rbx mov 32(%rsp),%rbp +.cfi_restore %rbp add \$40,%rsp +.cfi_adjust_cfa_offset -40 .Lepilogue: ret +.cfi_endproc .size md5_block_asm_data_order,.-md5_block_asm_data_order EOF diff --git a/crypto/md5/build.info b/crypto/md5/build.info index 38323a3f..e641fecd 100644 --- a/crypto/md5/build.info +++ b/crypto/md5/build.info @@ -2,21 +2,10 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ md5_dgst.c md5_one.c {- $target{md5_asm_src} -} -GENERATE[md5-586.s]=asm/md5-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) +GENERATE[md5-586.s]=asm/md5-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) GENERATE[md5-x86_64.s]=asm/md5-x86_64.pl $(PERLASM_SCHEME) GENERATE[md5-sparcv9.S]=asm/md5-sparcv9.pl $(PERLASM_SCHEME) INCLUDE[md5-sparcv9.o]=.. - -BEGINRAW[makefile(windows)] -{- $builddir -}\md5-ia64.asm: {- $sourcedir -}\asm\md5-ia64.S - $(CC) $(CFLAGS) -EP {- $sourcedir -}\asm\md5-ia64.S > $@.i && move /Y $@.i $@ -ENDRAW[makefile(windows)] - -BEGINRAW[Makefile] -{- $builddir -}/md5-ia64.s: {- $sourcedir -}/asm/md5-ia64.S - $(CC) $(CFLAGS) -E {- $sourcedir -}/asm/md5-ia64.S | \ - $(PERL) -ne 's/;\s+/;\n/g; print;' > $@ - -ENDRAW[Makefile] diff --git a/crypto/md5/md5_locl.h b/crypto/md5/md5_locl.h index 9c7aade8..4eb7e50e 100644 --- a/crypto/md5/md5_locl.h +++ b/crypto/md5/md5_locl.h @@ -50,8 +50,8 @@ void md5_block_data_order(MD5_CTX *c, const void *p, size_t num); */ /* - * As pointed out by Wei Dai , the above can be simplified - * to the code below. Wei attributes these optimizations to Peter Gutmann's + * As pointed out by Wei Dai, the above can be simplified to the code + * below. Wei attributes these optimizations to Peter Gutmann's * SHS code, and he attributes it to Rich Schroeppel. */ #define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d)) diff --git a/crypto/md5/md5_one.c b/crypto/md5/md5_one.c index becd87e4..c3bf2f88 100644 --- a/crypto/md5/md5_one.c +++ b/crypto/md5/md5_one.c @@ -43,5 +43,5 @@ unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md) #endif MD5_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); /* security consideration */ - return (md); + return md; } diff --git a/crypto/mdc2/mdc2_one.c b/crypto/mdc2/mdc2_one.c index 472a5ec2..58e1e0fd 100644 --- a/crypto/mdc2/mdc2_one.c +++ b/crypto/mdc2/mdc2_one.c @@ -23,5 +23,5 @@ unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md) MDC2_Update(&c, d, n); MDC2_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); /* security consideration */ - return (md); + return md; } diff --git a/crypto/mdc2/mdc2dgst.c b/crypto/mdc2/mdc2dgst.c index 37d99f48..14233b9a 100644 --- a/crypto/mdc2/mdc2dgst.c +++ b/crypto/mdc2/mdc2dgst.c @@ -124,24 +124,3 @@ int MDC2_Final(unsigned char *md, MDC2_CTX *c) memcpy(&(md[MDC2_BLOCK]), (char *)c->hh, MDC2_BLOCK); return 1; } - -#undef TEST - -#ifdef TEST -main() -{ - unsigned char md[MDC2_DIGEST_LENGTH]; - int i; - MDC2_CTX c; - static char *text = "Now is the time for all "; - - MDC2_Init(&c); - MDC2_Update(&c, text, strlen(text)); - MDC2_Final(&(md[0]), &c); - - for (i = 0; i < MDC2_DIGEST_LENGTH; i++) - printf("%02X", md[i]); - printf("\n"); -} - -#endif diff --git a/crypto/mem.c b/crypto/mem.c index 72b04c82..b3f7a1fa 100644 --- a/crypto/mem.c +++ b/crypto/mem.c @@ -7,11 +7,16 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" +#include "internal/cryptlib.h" +#include "internal/cryptlib_int.h" #include #include #include #include -#include "internal/cryptlib.h" +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# include +#endif /* * the following pointers may be changed as long as 'allow_customize' is set @@ -26,9 +31,30 @@ static void (*free_impl)(void *, const char *, int) = CRYPTO_free; #ifndef OPENSSL_NO_CRYPTO_MDEBUG +static int malloc_count; +static int realloc_count; +static int free_count; +static int dummy; + +# define INCREMENT(x) CRYPTO_atomic_add(&x, 1, &dummy, memdbg_lock) +# define GET(ret, val) CRYPTO_atomic_read(&val, ret, memdbg_lock) + +static char *md_failstring; +static long md_count; +static int md_fail_percent = 0; +static int md_tracefd = -1; static int call_malloc_debug = 1; + +static void parseit(void); +static int shouldfail(void); + +# define FAILTEST() if (shouldfail()) return NULL + #else static int call_malloc_debug = 0; + +# define INCREMENT(x) /* empty */ +# define FAILTEST() /* empty */ #endif int CRYPTO_set_mem_functions( @@ -68,24 +94,114 @@ void CRYPTO_get_mem_functions( *f = free_impl; } +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount) +{ + if (mcount != NULL) + GET(mcount, malloc_count); + if (rcount != NULL) + GET(rcount, realloc_count); + if (fcount != NULL) + GET(fcount, free_count); +} + +/* + * Parse a "malloc failure spec" string. This likes like a set of fields + * separated by semicolons. Each field has a count and an optional failure + * percentage. For example: + * 100@0;100@25;0@0 + * or 100;100@25;0 + * This means 100 mallocs succeed, then next 100 fail 25% of the time, and + * all remaining (count is zero) succeed. + */ +static void parseit(void) +{ + char *semi = strchr(md_failstring, ';'); + char *atsign; + + if (semi != NULL) + *semi++ = '\0'; + + /* Get the count (atol will stop at the @ if there), and percentage */ + md_count = atol(md_failstring); + atsign = strchr(md_failstring, '@'); + md_fail_percent = atsign == NULL ? 0 : atoi(atsign + 1); + + if (semi != NULL) + md_failstring = semi; +} + +/* + * Windows doesn't have random(), but it has rand() + * Some rand() implementations aren't good, but we're not + * dealing with secure randomness here. + */ +# ifdef _WIN32 +# define random() rand() +# endif +/* + * See if the current malloc should fail. + */ +static int shouldfail(void) +{ + int roll = (int)(random() % 100); + int shoulditfail = roll < md_fail_percent; +# ifndef _WIN32 +/* suppressed on Windows as POSIX-like file descriptors are non-inheritable */ + int len; + char buff[80]; + + if (md_tracefd > 0) { + BIO_snprintf(buff, sizeof(buff), + "%c C%ld %%%d R%d\n", + shoulditfail ? '-' : '+', md_count, md_fail_percent, roll); + len = strlen(buff); + if (write(md_tracefd, buff, len) != len) + perror("shouldfail write failed"); +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE + if (shoulditfail) { + void *addrs[30]; + int num = backtrace(addrs, OSSL_NELEM(addrs)); + + backtrace_symbols_fd(addrs, num, md_tracefd); + } +# endif + } +# endif + + if (md_count) { + /* If we used up this one, go to the next. */ + if (--md_count == 0) + parseit(); + } + + return shoulditfail; +} + +void ossl_malloc_setup_failures(void) +{ + const char *cp = getenv("OPENSSL_MALLOC_FAILURES"); + + if (cp != NULL && (md_failstring = strdup(cp)) != NULL) + parseit(); + if ((cp = getenv("OPENSSL_MALLOC_FD")) != NULL) + md_tracefd = atoi(cp); +} +#endif + void *CRYPTO_malloc(size_t num, const char *file, int line) { void *ret = NULL; + INCREMENT(malloc_count); if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc) return malloc_impl(num, file, line); if (num == 0) return NULL; - if (allow_customize) { - /* - * Disallow customization after the first allocation. We only set this - * if necessary to avoid a store to the same cache line on every - * allocation. - */ - allow_customize = 0; - } + FAILTEST(); + allow_customize = 0; #ifndef OPENSSL_NO_CRYPTO_MDEBUG if (call_malloc_debug) { CRYPTO_mem_debug_malloc(NULL, num, 0, file, line); @@ -95,7 +211,7 @@ void *CRYPTO_malloc(size_t num, const char *file, int line) ret = malloc(num); } #else - osslargused(file); osslargused(line); + (void)(file); (void)(line); ret = malloc(num); #endif @@ -106,6 +222,7 @@ void *CRYPTO_zalloc(size_t num, const char *file, int line) { void *ret = CRYPTO_malloc(num, file, line); + FAILTEST(); if (ret != NULL) memset(ret, 0, num); return ret; @@ -113,9 +230,11 @@ void *CRYPTO_zalloc(size_t num, const char *file, int line) void *CRYPTO_realloc(void *str, size_t num, const char *file, int line) { + INCREMENT(realloc_count); if (realloc_impl != NULL && realloc_impl != &CRYPTO_realloc) return realloc_impl(str, num, file, line); + FAILTEST(); if (str == NULL) return CRYPTO_malloc(num, file, line); @@ -124,6 +243,7 @@ void *CRYPTO_realloc(void *str, size_t num, const char *file, int line) return NULL; } + allow_customize = 0; #ifndef OPENSSL_NO_CRYPTO_MDEBUG if (call_malloc_debug) { void *ret; @@ -133,7 +253,7 @@ void *CRYPTO_realloc(void *str, size_t num, const char *file, int line) return ret; } #else - osslargused(file); osslargused(line); + (void)(file); (void)(line); #endif return realloc(str, num); @@ -168,6 +288,7 @@ void *CRYPTO_clear_realloc(void *str, size_t old_len, size_t num, void CRYPTO_free(void *str, const char *file, int line) { + INCREMENT(free_count); if (free_impl != NULL && free_impl != &CRYPTO_free) { free_impl(str, file, line); return; diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index c884078e..0489e97a 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -56,8 +56,8 @@ struct app_mem_info_st { }; static CRYPTO_ONCE memdbg_init = CRYPTO_ONCE_STATIC_INIT; -static CRYPTO_RWLOCK *malloc_lock = NULL; -static CRYPTO_RWLOCK *long_malloc_lock = NULL; +CRYPTO_RWLOCK *memdbg_lock; +static CRYPTO_RWLOCK *long_memdbg_lock; static CRYPTO_THREAD_LOCAL appinfokey; /* memory-block description */ @@ -76,28 +76,31 @@ struct mem_st { #endif }; -static LHASH_OF(MEM) *mh = NULL; /* hash-table of memory requests (address as - * key); access requires MALLOC2 lock */ +/* + * hash-table of memory requests (address as * key); access requires + * long_memdbg_lock lock + */ +static LHASH_OF(MEM) *mh = NULL; /* num_disable > 0 iff mh_mode == CRYPTO_MEM_CHECK_ON (w/o ..._ENABLE) */ static unsigned int num_disable = 0; /* - * Valid iff num_disable > 0. long_malloc_lock is locked exactly in this + * Valid iff num_disable > 0. long_memdbg_lock is locked exactly in this * case (by the thread named in disabling_thread). */ static CRYPTO_THREAD_ID disabling_threadid; DEFINE_RUN_ONCE_STATIC(do_memdbg_init) { - malloc_lock = CRYPTO_THREAD_lock_new(); - long_malloc_lock = CRYPTO_THREAD_lock_new(); - if (malloc_lock == NULL || long_malloc_lock == NULL + memdbg_lock = CRYPTO_THREAD_lock_new(); + long_memdbg_lock = CRYPTO_THREAD_lock_new(); + if (memdbg_lock == NULL || long_memdbg_lock == NULL || !CRYPTO_THREAD_init_local(&appinfokey, NULL)) { - CRYPTO_THREAD_lock_free(malloc_lock); - malloc_lock = NULL; - CRYPTO_THREAD_lock_free(long_malloc_lock); - long_malloc_lock = NULL; + CRYPTO_THREAD_lock_free(memdbg_lock); + memdbg_lock = NULL; + CRYPTO_THREAD_lock_free(long_memdbg_lock); + long_memdbg_lock = NULL; return 0; } return 1; @@ -105,7 +108,7 @@ DEFINE_RUN_ONCE_STATIC(do_memdbg_init) static void app_info_free(APP_INFO *inf) { - if (!inf) + if (inf == NULL) return; if (--(inf->references) <= 0) { app_info_free(inf->next); @@ -124,7 +127,7 @@ int CRYPTO_mem_ctrl(int mode) if (!RUN_ONCE(&memdbg_init, do_memdbg_init)) return -1; - CRYPTO_THREAD_write_lock(malloc_lock); + CRYPTO_THREAD_write_lock(memdbg_lock); switch (mode) { default: break; @@ -143,26 +146,26 @@ int CRYPTO_mem_ctrl(int mode) case CRYPTO_MEM_CHECK_DISABLE: if (mh_mode & CRYPTO_MEM_CHECK_ON) { CRYPTO_THREAD_ID cur = CRYPTO_THREAD_get_current_id(); - /* see if we don't have long_malloc_lock already */ + /* see if we don't have long_memdbg_lock already */ if (!num_disable || !CRYPTO_THREAD_compare_id(disabling_threadid, cur)) { /* - * Long-time lock long_malloc_lock must not be claimed - * while we're holding malloc_lock, or we'll deadlock - * if somebody else holds long_malloc_lock (and cannot + * Long-time lock long_memdbg_lock must not be claimed + * while we're holding memdbg_lock, or we'll deadlock + * if somebody else holds long_memdbg_lock (and cannot * release it because we block entry to this function). Give * them a chance, first, and then claim the locks in * appropriate order (long-time lock first). */ - CRYPTO_THREAD_unlock(malloc_lock); + CRYPTO_THREAD_unlock(memdbg_lock); /* - * Note that after we have waited for long_malloc_lock and - * malloc_lock, we'll still be in the right "case" and + * Note that after we have waited for long_memdbg_lock and + * memdbg_lock, we'll still be in the right "case" and * "if" branch because MemCheck_start and MemCheck_stop may * never be used while there are multiple OpenSSL threads. */ - CRYPTO_THREAD_write_lock(long_malloc_lock); - CRYPTO_THREAD_write_lock(malloc_lock); + CRYPTO_THREAD_write_lock(long_memdbg_lock); + CRYPTO_THREAD_write_lock(memdbg_lock); mh_mode &= ~CRYPTO_MEM_CHECK_ENABLE; disabling_threadid = cur; } @@ -176,14 +179,14 @@ int CRYPTO_mem_ctrl(int mode) num_disable--; if (num_disable == 0) { mh_mode |= CRYPTO_MEM_CHECK_ENABLE; - CRYPTO_THREAD_unlock(long_malloc_lock); + CRYPTO_THREAD_unlock(long_memdbg_lock); } } } break; } - CRYPTO_THREAD_unlock(malloc_lock); - return (ret); + CRYPTO_THREAD_unlock(memdbg_lock); + return ret; #endif } @@ -199,14 +202,14 @@ static int mem_check_on(void) return 0; cur = CRYPTO_THREAD_get_current_id(); - CRYPTO_THREAD_read_lock(malloc_lock); + CRYPTO_THREAD_read_lock(memdbg_lock); ret = (mh_mode & CRYPTO_MEM_CHECK_ENABLE) || !CRYPTO_THREAD_compare_id(disabling_threadid, cur); - CRYPTO_THREAD_unlock(malloc_lock); + CRYPTO_THREAD_unlock(memdbg_lock); } - return (ret); + return ret; } static int mem_cmp(const MEM *a, const MEM *b) @@ -231,7 +234,7 @@ static unsigned long mem_hash(const MEM *a) ret = (size_t)a->addr; ret = ret * 17851 + (ret >> 14) * 7 + (ret >> 4) * 251; - return (ret); + return ret; } /* returns 1 if there was an info to pop, 0 if the stack was empty. */ @@ -292,7 +295,7 @@ int CRYPTO_mem_debug_push(const char *info, const char *file, int line) CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); } - return (ret); + return ret; } int CRYPTO_mem_debug_pop(void) @@ -304,7 +307,7 @@ int CRYPTO_mem_debug_pop(void) ret = pop_info(); CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); } - return (ret); + return ret; } static unsigned long break_order_num = 0; @@ -443,7 +446,8 @@ void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, } typedef struct mem_leak_st { - BIO *bio; + int (*print_cb) (const char *str, size_t len, void *u); + void *print_cb_arg; int chunks; long bytes; } MEM_LEAK; @@ -452,8 +456,9 @@ static void print_leak(const MEM *m, MEM_LEAK *l) { char buf[1024]; char *bufp = buf; + size_t len = sizeof(buf), ami_cnt; APP_INFO *amip; - int ami_cnt; + int n; struct tm *lcl = NULL; /* * Convert between CRYPTO_THREAD_ID (which could be anything at all) and @@ -466,27 +471,38 @@ static void print_leak(const MEM *m, MEM_LEAK *l) } tid; CRYPTO_THREAD_ID ti; -#define BUF_REMAIN (sizeof(buf) - (size_t)(bufp - buf)) - lcl = localtime(&m->time); - BIO_snprintf(bufp, BUF_REMAIN, "[%02d:%02d:%02d] ", - lcl->tm_hour, lcl->tm_min, lcl->tm_sec); - bufp += strlen(bufp); + n = BIO_snprintf(bufp, len, "[%02d:%02d:%02d] ", + lcl->tm_hour, lcl->tm_min, lcl->tm_sec); + if (n <= 0) { + bufp[0] = '\0'; + return; + } + bufp += n; + len -= n; - BIO_snprintf(bufp, BUF_REMAIN, "%5lu file=%s, line=%d, ", - m->order, m->file, m->line); - bufp += strlen(bufp); + n = BIO_snprintf(bufp, len, "%5lu file=%s, line=%d, ", + m->order, m->file, m->line); + if (n <= 0) + return; + bufp += n; + len -= n; tid.ltid = 0; tid.tid = m->threadid; - BIO_snprintf(bufp, BUF_REMAIN, "thread=%lu, ", tid.ltid); - bufp += strlen(bufp); + n = BIO_snprintf(bufp, len, "thread=%lu, ", tid.ltid); + if (n <= 0) + return; + bufp += n; + len -= n; - BIO_snprintf(bufp, BUF_REMAIN, "number=%d, address=%p\n", - m->num, m->addr); - bufp += strlen(bufp); + n = BIO_snprintf(bufp, len, "number=%d, address=%p\n", m->num, m->addr); + if (n <= 0) + return; + bufp += n; + len -= n; - BIO_puts(l->bio, buf); + l->print_cb(buf, (size_t)(bufp - buf), l->print_cb_arg); l->chunks++; l->bytes += m->num; @@ -502,25 +518,34 @@ static void print_leak(const MEM *m, MEM_LEAK *l) int info_len; ami_cnt++; + if (ami_cnt >= sizeof(buf) - 1) + break; memset(buf, '>', ami_cnt); + buf[ami_cnt] = '\0'; tid.ltid = 0; tid.tid = amip->threadid; - BIO_snprintf(buf + ami_cnt, sizeof(buf) - ami_cnt, - " thread=%lu, file=%s, line=%d, info=\"", - tid.ltid, amip->file, - amip->line); - buf_len = strlen(buf); + n = BIO_snprintf(buf + ami_cnt, sizeof(buf) - ami_cnt, + " thread=%lu, file=%s, line=%d, info=\"", + tid.ltid, amip->file, amip->line); + if (n <= 0) + break; + buf_len = ami_cnt + n; info_len = strlen(amip->info); if (128 - buf_len - 3 < info_len) { memcpy(buf + buf_len, amip->info, 128 - buf_len - 3); buf_len = 128 - 3; } else { - OPENSSL_strlcpy(buf + buf_len, amip->info, sizeof(buf) - buf_len); - buf_len = strlen(buf); + n = BIO_snprintf(buf + buf_len, sizeof(buf) - buf_len, "%s", + amip->info); + if (n < 0) + break; + buf_len += n; } - BIO_snprintf(buf + buf_len, sizeof(buf) - buf_len, "\"\n"); + n = BIO_snprintf(buf + buf_len, sizeof(buf) - buf_len, "\"\n"); + if (n <= 0) + break; - BIO_puts(l->bio, buf); + l->print_cb(buf, buf_len + n, l->print_cb_arg); amip = amip->next; } @@ -541,16 +566,11 @@ static void print_leak(const MEM *m, MEM_LEAK *l) IMPLEMENT_LHASH_DOALL_ARG_CONST(MEM, MEM_LEAK); -int CRYPTO_mem_leaks(BIO *b) +int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), + void *u) { MEM_LEAK ml; - /* - * OPENSSL_cleanup() will free the ex_data locks so we can't have any - * ex_data hanging around - */ - bio_free_ex_data(b); - /* Ensure all resources are released */ OPENSSL_cleanup(); @@ -559,14 +579,19 @@ int CRYPTO_mem_leaks(BIO *b) CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE); - ml.bio = b; + ml.print_cb = cb; + ml.print_cb_arg = u; ml.bytes = 0; ml.chunks = 0; if (mh != NULL) lh_MEM_doall_MEM_LEAK(mh, print_leak, &ml); if (ml.chunks != 0) { - BIO_printf(b, "%ld bytes leaked in %d chunks\n", ml.bytes, ml.chunks); + char buf[256]; + + BIO_snprintf(buf, sizeof(buf), "%ld bytes leaked in %d chunks\n", + ml.bytes, ml.chunks); + cb(buf, strlen(buf), u); } else { /* * Make sure that, if we found no leaks, memory-leak debugging itself @@ -576,7 +601,7 @@ int CRYPTO_mem_leaks(BIO *b) */ int old_mh_mode; - CRYPTO_THREAD_write_lock(malloc_lock); + CRYPTO_THREAD_write_lock(memdbg_lock); /* * avoid deadlock when lh_free() uses CRYPTO_mem_debug_free(), which uses @@ -589,20 +614,36 @@ int CRYPTO_mem_leaks(BIO *b) mh = NULL; mh_mode = old_mh_mode; - CRYPTO_THREAD_unlock(malloc_lock); + CRYPTO_THREAD_unlock(memdbg_lock); } CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF); /* Clean up locks etc */ CRYPTO_THREAD_cleanup_local(&appinfokey); - CRYPTO_THREAD_lock_free(malloc_lock); - CRYPTO_THREAD_lock_free(long_malloc_lock); - malloc_lock = NULL; - long_malloc_lock = NULL; + CRYPTO_THREAD_lock_free(memdbg_lock); + CRYPTO_THREAD_lock_free(long_memdbg_lock); + memdbg_lock = NULL; + long_memdbg_lock = NULL; return ml.chunks == 0 ? 1 : 0; } +static int print_bio(const char *str, size_t len, void *b) +{ + return BIO_write((BIO *)b, str, len); +} + +int CRYPTO_mem_leaks(BIO *b) +{ + /* + * OPENSSL_cleanup() will free the ex_data locks so we can't have any + * ex_data hanging around + */ + bio_free_ex_data(b); + + return CRYPTO_mem_leaks_cb(print_bio, b); +} + # ifndef OPENSSL_NO_STDIO int CRYPTO_mem_leaks_fp(FILE *fp) { @@ -620,7 +661,7 @@ int CRYPTO_mem_leaks_fp(FILE *fp) if (b == NULL) return -1; BIO_set_fp(b, fp, BIO_NOCLOSE); - ret = CRYPTO_mem_leaks(b); + ret = CRYPTO_mem_leaks_cb(print_bio, b); BIO_free(b); return ret; } diff --git a/crypto/mem_sec.c b/crypto/mem_sec.c index 25cdb47d..77bf165f 100644 --- a/crypto/mem_sec.c +++ b/crypto/mem_sec.c @@ -1,5 +1,6 @@ /* * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2014, Akamai Technologies. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,11 +8,6 @@ * https://www.openssl.org/source/license.html */ -/* - * Copyright 2004-2014, Akamai Technologies. All Rights Reserved. - * This file is distributed under the terms of the OpenSSL license. - */ - /* * This file is in two halves. The first half implements the public API * to be used by external consumers, and to be used by OpenSSL to store @@ -19,8 +15,8 @@ * For details on that implementation, see below (look for uppercase * "SECURE HEAP IMPLEMENTATION"). */ +#include "e_os.h" #include -#include #include @@ -35,6 +31,11 @@ # include # include # include +# if defined(OPENSSL_SYS_LINUX) +# include +# include +# include +# endif # include # include # include @@ -44,9 +45,6 @@ #ifndef PAGE_SIZE # define PAGE_SIZE 4096 #endif -#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) -# define MAP_ANON MAP_ANONYMOUS -#endif #ifdef IMPLEMENTED static size_t secure_mem_used; @@ -59,8 +57,8 @@ static CRYPTO_RWLOCK *sec_malloc_lock = NULL; * These are the functions that must be implemented by a secure heap (sh). */ static int sh_init(size_t size, int minsize); -static char *sh_malloc(size_t size); -static void sh_free(char *ptr); +static void *sh_malloc(size_t size); +static void sh_free(void *ptr); static void sh_done(void); static size_t sh_actual_size(char *ptr); static int sh_allocated(const char *ptr); @@ -472,8 +470,19 @@ static int sh_init(size_t size, int minsize) if (mprotect(sh.map_result + aligned, pgsize, PROT_NONE) < 0) ret = 2; +#if defined(OPENSSL_SYS_LINUX) && defined(MLOCK_ONFAULT) && defined(SYS_mlock2) + if (syscall(SYS_mlock2, sh.arena, sh.arena_size, MLOCK_ONFAULT) < 0) { + if (errno == ENOSYS) { + if (mlock(sh.arena, sh.arena_size) < 0) + ret = 2; + } else { + ret = 2; + } + } +#else if (mlock(sh.arena, sh.arena_size) < 0) ret = 2; +#endif #ifdef MADV_DONTDUMP if (madvise(sh.arena, sh.arena_size, MADV_DONTDUMP) < 0) ret = 2; @@ -515,7 +524,7 @@ static char *sh_find_my_buddy(char *ptr, int list) return chunk; } -static char *sh_malloc(size_t size) +static void *sh_malloc(size_t size) { ossl_ssize_t list, slist; size_t i; @@ -577,10 +586,10 @@ static char *sh_malloc(size_t size) return chunk; } -static void sh_free(char *ptr) +static void sh_free(void *ptr) { size_t list; - char *buddy; + void *buddy; if (ptr == NULL) return; diff --git a/crypto/mips_arch.h b/crypto/mips_arch.h new file mode 100644 index 00000000..75043e79 --- /dev/null +++ b/crypto/mips_arch.h @@ -0,0 +1,40 @@ +/* + * 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 + */ + +#ifndef __MIPS_ARCH_H__ +# define __MIPS_ARCH_H__ + +# if (defined(__mips_smartmips) || defined(_MIPS_ARCH_MIPS32R3) || \ + defined(_MIPS_ARCH_MIPS32R5) || defined(_MIPS_ARCH_MIPS32R6)) + && !defined(_MIPS_ARCH_MIPS32R2) +# define _MIPS_ARCH_MIPS32R2 +# endif + +# if (defined(_MIPS_ARCH_MIPS64R3) || defined(_MIPS_ARCH_MIPS64R5) || \ + defined(_MIPS_ARCH_MIPS64R6)) \ + && !defined(_MIPS_ARCH_MIPS64R2) +# define _MIPS_ARCH_MIPS64R2 +# endif + +# if defined(_MIPS_ARCH_MIPS64R6) +# define dmultu(rs,rt) +# define mflo(rd,rs,rt) dmulu rd,rs,rt +# define mfhi(rd,rs,rt) dmuhu rd,rs,rt +# elif defined(_MIPS_ARCH_MIPS32R6) +# define multu(rs,rt) +# define mflo(rd,rs,rt) mulu rd,rs,rt +# define mfhi(rd,rs,rt) muhu rd,rs,rt +# else +# define dmultu(rs,rt) dmultu rs,rt +# define multu(rs,rt) multu rs,rt +# define mflo(rd,rs,rt) mflo rd +# define mfhi(rd,rs,rt) mfhi rd +# endif + +#endif diff --git a/crypto/modes/asm/aesni-gcm-x86_64.pl b/crypto/modes/asm/aesni-gcm-x86_64.pl index 5ad62b39..b4201610 100644 --- a/crypto/modes/asm/aesni-gcm-x86_64.pl +++ b/crypto/modes/asm/aesni-gcm-x86_64.pl @@ -35,6 +35,8 @@ # Applications using the EVP interface will observe a few percent # worse performance.] # +# Knights Landing processes 1 byte in 1.25 cycles (measured with EVP). +# # [1] http://rt.openssl.org/Ticket/Display.html?id=2900&user=guest&pass=guest # [2] http://www.intel.com/content/dam/www/public/us/en/documents/software-support/enabling-high-performance-gcm.pdf @@ -116,23 +118,6 @@ _aesni_ctr32_ghash_6x: vpxor $rndkey,$inout3,$inout3 vmovups 0x10-0x80($key),$T2 # borrow $T2 for $rndkey vpclmulqdq \$0x01,$Hkey,$Z3,$Z2 - - # At this point, the current block of 96 (0x60) bytes has already been - # loaded into registers. Concurrently with processing it, we want to - # load the next 96 bytes of input for the next round. Obviously, we can - # only do this if there are at least 96 more bytes of input beyond the - # input we're currently processing, or else we'd read past the end of - # the input buffer. Here, we set |%r12| to 96 if there are at least 96 - # bytes of input beyond the 96 bytes we're already processing, and we - # set |%r12| to 0 otherwise. In the case where we set |%r12| to 96, - # we'll read in the next block so that it is in registers for the next - # loop iteration. In the case where we set |%r12| to 0, we'll re-read - # the current block and then ignore what we re-read. - # - # At this point, |$in0| points to the current (already read into - # registers) block, and |$end0| points to 2*96 bytes before the end of - # the input. Thus, |$in0| > |$end0| means that we do not have the next - # 96-byte block to read in, and |$in0| <= |$end0| means we do. xor %r12,%r12 cmp $in0,$end0 @@ -424,20 +409,25 @@ $code.=<<___; .type aesni_gcm_decrypt,\@function,6 .align 32 aesni_gcm_decrypt: +.cfi_startproc xor $ret,$ret - - # We call |_aesni_ctr32_ghash_6x|, which requires at least 96 (0x60) - # bytes of input. cmp \$0x60,$len # minimal accepted length jb .Lgcm_dec_abort lea (%rsp),%rax # save stack pointer +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -482,15 +472,7 @@ $code.=<<___; vmovdqu 0x50($inp),$Z3 # I[5] lea ($inp),$in0 vmovdqu 0x40($inp),$Z0 - - # |_aesni_ctr32_ghash_6x| requires |$end0| to point to 2*96 (0xc0) - # bytes before the end of the input. Note, in particular, that this is - # correct even if |$len| is not an even multiple of 96 or 16. XXX: This - # seems to require that |$inp| + |$len| >= 2*96 (0xc0); i.e. |$inp| must - # not be near the very beginning of the address space when |$len| < 2*96 - # (0xc0). lea -0xc0($inp,$len),$end0 - vmovdqu 0x30($inp),$Z1 shr \$4,$len xor $ret,$ret @@ -537,15 +519,23 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lgcm_dec_abort: mov $ret,%rax # return value ret +.cfi_endproc .size aesni_gcm_decrypt,.-aesni_gcm_decrypt ___ @@ -645,21 +635,25 @@ _aesni_ctr32_6x: .type aesni_gcm_encrypt,\@function,6 .align 32 aesni_gcm_encrypt: +.cfi_startproc xor $ret,$ret - - # We call |_aesni_ctr32_6x| twice, each call consuming 96 bytes of - # input. Then we call |_aesni_ctr32_ghash_6x|, which requires at - # least 96 more bytes of input. cmp \$0x60*3,$len # minimal accepted length jb .Lgcm_enc_abort lea (%rsp),%rax # save stack pointer +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -699,16 +693,7 @@ $code.=<<___; .Lenc_no_key_aliasing: lea ($out),$in0 - - # |_aesni_ctr32_ghash_6x| requires |$end0| to point to 2*96 (0xc0) - # bytes before the end of the input. Note, in particular, that this is - # correct even if |$len| is not an even multiple of 96 or 16. Unlike in - # the decryption case, there's no caveat that |$out| must not be near - # the very beginning of the address space, because we know that - # |$len| >= 3*96 from the check above, and so we know - # |$out| + |$len| >= 2*96 (0xc0). lea -0xc0($out,$len),$end0 - shr \$4,$len call _aesni_ctr32_6x @@ -931,15 +916,23 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp # restore %rsp +.cfi_def_cfa_register %rsp .Lgcm_enc_abort: mov $ret,%rax # return value ret +.cfi_endproc .size aesni_gcm_encrypt,.-aesni_gcm_encrypt ___ diff --git a/crypto/modes/asm/ghash-armv4.pl b/crypto/modes/asm/ghash-armv4.pl index 7d880c94..9cc072e7 100644 --- a/crypto/modes/asm/ghash-armv4.pl +++ b/crypto/modes/asm/ghash-armv4.pl @@ -54,7 +54,7 @@ # # Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software # Polynomial Multiplication on ARM Processors using the NEON Engine. -# +# # http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf # ==================================================================== @@ -528,7 +528,7 @@ $code.=<<___; #ifdef __ARMEL__ vrev64.8 $Xl,$Xl #endif - sub $Xi,#16 + sub $Xi,#16 vst1.64 $Xl#hi,[$Xi]! @ write out Xi vst1.64 $Xl#lo,[$Xi] diff --git a/crypto/modes/asm/ghash-ia64.pl b/crypto/modes/asm/ghash-ia64.pl index 81e75f71..eb9ded91 100755 --- a/crypto/modes/asm/ghash-ia64.pl +++ b/crypto/modes/asm/ghash-ia64.pl @@ -156,7 +156,7 @@ $code.=<<___; ___ ###################################################################### -# "528B" (well, "512B" actualy) streamed GHASH +# "528B" (well, "512B" actually) streamed GHASH # $Xip="in0"; $Htbl="in1"; diff --git a/crypto/modes/asm/ghash-parisc.pl b/crypto/modes/asm/ghash-parisc.pl index 1d625454..fef2db19 100644 --- a/crypto/modes/asm/ghash-parisc.pl +++ b/crypto/modes/asm/ghash-parisc.pl @@ -705,7 +705,7 @@ my $depd = sub { my ($mod,$args) = @_; my $orig = "depd$mod\t$args"; - # I only have ",z" completer, it's impicitly encoded... + # I only have ",z" completer, it's implicitly encoded... if ($args =~ /%r([0-9]+),([0-9]+),([0-9]+),%r([0-9]+)/) # format 16 { my $opcode=(0x3c<<26)|($4<<21)|($1<<16); my $cpos=63-$2; diff --git a/crypto/modes/asm/ghash-s390x.pl b/crypto/modes/asm/ghash-s390x.pl index 6e628d88..17dc3750 100644 --- a/crypto/modes/asm/ghash-s390x.pl +++ b/crypto/modes/asm/ghash-s390x.pl @@ -80,6 +80,8 @@ $rem_4bit="%r14"; $sp="%r15"; $code.=<<___; +#include "s390x_arch.h" + .text .globl gcm_gmult_4bit @@ -89,12 +91,13 @@ ___ $code.=<<___ if(!$softonly && 0); # hardware is slow for single block... larl %r1,OPENSSL_s390xcap_P lghi %r0,0 - lg %r1,24(%r1) # load second word of kimd capabilities vector + lg %r1,S390X_KIMD+8(%r1) # load second word of kimd capabilities + # vector tmhh %r1,0x4000 # check for function 65 jz .Lsoft_gmult stg %r0,16($sp) # arrange 16 bytes of zero input stg %r0,24($sp) - lghi %r0,65 # function 65 + lghi %r0,S390X_GHASH # function 65 la %r1,0($Xi) # H lies right after Xi in gcm128_context la $inp,16($sp) lghi $len,16 @@ -123,10 +126,11 @@ gcm_ghash_4bit: ___ $code.=<<___ if(!$softonly); larl %r1,OPENSSL_s390xcap_P - lg %r0,24(%r1) # load second word of kimd capabilities vector + lg %r0,S390X_KIMD+8(%r1) # load second word of kimd capabilities + # vector tmhh %r0,0x4000 # check for function 65 jz .Lsoft_ghash - lghi %r0,65 # function 65 + lghi %r0,S390X_GHASH # function 65 la %r1,0($Xi) # H lies right after Xi in gcm128_context .long 0xb93e0004 # kimd %r0,$inp brc 1,.-4 # pay attention to "partial completion" @@ -149,7 +153,7 @@ $code.=<<___; lg $Zhi,0+1($Xi) lghi $tmp,0 .Louter: - xg $Zhi,0($inp) # Xi ^= inp + xg $Zhi,0($inp) # Xi ^= inp xg $Zlo,8($inp) xgr $Zhi,$tmp stg $Zlo,8+1($Xi) diff --git a/crypto/modes/asm/ghash-x86.pl b/crypto/modes/asm/ghash-x86.pl index cd845825..bcbe6e39 100644 --- a/crypto/modes/asm/ghash-x86.pl +++ b/crypto/modes/asm/ghash-x86.pl @@ -103,14 +103,13 @@ # # Does it make sense to increase Naggr? To start with it's virtually # impossible in 32-bit mode, because of limited register bank -# capacity. Otherwise improvement has to be weighed agiainst slower +# capacity. Otherwise improvement has to be weighed against slower # setup, as well as code size and complexity increase. As even # optimistic estimate doesn't promise 30% performance improvement, # there are currently no plans to increase Naggr. # -# Special thanks to David Woodhouse for -# providing access to a Westmere-based system on behalf of Intel -# Open Source Technology Centre. +# Special thanks to David Woodhouse for providing access to a +# Westmere-based system on behalf of Intel Open Source Technology Centre. # January 2010 # @@ -139,7 +138,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"ghash-x86.pl",$x86only = $ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); $sse2=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -811,7 +810,7 @@ sub mmx_loop() { &bswap ($dat); &pshufw ($Zhi,$Zhi,0b00011011); # 76543210 &bswap ("ebx"); - + &cmp ("ecx",&DWP(528+16+8,"esp")); # are we done? &jne (&label("outer")); } @@ -915,7 +914,7 @@ my ($Xhi,$Xi) = @_; &psllq ($Xi,57); # &movdqa ($T1,$Xi); # &pslldq ($Xi,8); - &psrldq ($T1,8); # + &psrldq ($T1,8); # &pxor ($Xi,$T2); &pxor ($Xhi,$T1); # @@ -1085,7 +1084,7 @@ my ($Xhi,$Xi) = @_; &psllq ($Xi,57); # &movdqa ($T1,$Xi); # &pslldq ($Xi,8); - &psrldq ($T1,8); # + &psrldq ($T1,8); # &pxor ($Xi,$T2); &pxor ($Xhi,$T1); # &pshufd ($T1,$Xhn,0b01001110); diff --git a/crypto/modes/asm/ghash-x86_64.pl b/crypto/modes/asm/ghash-x86_64.pl index 387e3f85..afc30c3e 100644 --- a/crypto/modes/asm/ghash-x86_64.pl +++ b/crypto/modes/asm/ghash-x86_64.pl @@ -44,9 +44,8 @@ # See ghash-x86.pl for background information and details about coding # techniques. # -# Special thanks to David Woodhouse for -# providing access to a Westmere-based system on behalf of Intel -# Open Source Technology Centre. +# Special thanks to David Woodhouse for providing access to a +# Westmere-based system on behalf of Intel Open Source Technology Centre. # December 2012 # @@ -74,6 +73,7 @@ # Skylake 0.44(+110%)(if system doesn't support AVX) # Bulldozer 1.49(+27%) # Silvermont 2.88(+13%) +# Knights L 2.12(-) (if system doesn't support AVX) # Goldmont 1.08(+24%) # March 2013 @@ -86,6 +86,8 @@ # it performs in 0.41 cycles per byte on Haswell processor, in # 0.29 on Broadwell, and in 0.36 on Skylake. # +# Knights Landing achieves 1.09 cpb. +# # [1] http://rt.openssl.org/Ticket/Display.html?id=2900&user=guest&pass=guest $flavour = shift; @@ -236,9 +238,21 @@ $code=<<___; .type gcm_gmult_4bit,\@function,2 .align 16 gcm_gmult_4bit: +.cfi_startproc push %rbx - push %rbp # %rbp and %r12 are pushed exclusively in +.cfi_push %rbx + push %rbp # %rbp and others are pushed exclusively in +.cfi_push %rbp push %r12 # order to reuse Win64 exception handler... +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + sub \$280,%rsp +.cfi_adjust_cfa_offset 280 .Lgmult_prologue: movzb 15($Xi),$Zlo @@ -249,10 +263,15 @@ $code.=<<___; mov $Zlo,8($Xi) mov $Zhi,($Xi) - mov 16(%rsp),%rbx - lea 24(%rsp),%rsp + lea 280+48(%rsp),%rsi +.cfi_def_cfa %rsi,8 + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lgmult_epilogue: ret +.cfi_endproc .size gcm_gmult_4bit,.-gcm_gmult_4bit ___ @@ -266,13 +285,21 @@ $code.=<<___; .type gcm_ghash_4bit,\@function,4 .align 16 gcm_ghash_4bit: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 sub \$280,%rsp +.cfi_adjust_cfa_offset 280 .Lghash_prologue: mov $inp,%r14 # reassign couple of args mov $len,%r15 @@ -400,16 +427,25 @@ $code.=<<___; mov $Zlo,8($Xi) mov $Zhi,($Xi) - lea 280(%rsp),%rsi - mov 0(%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + lea 280+48(%rsp),%rsi +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea 0(%rsi),%rsp +.cfi_def_cfa_register %rsp .Lghash_epilogue: ret +.cfi_endproc .size gcm_ghash_4bit,.-gcm_ghash_4bit ___ @@ -469,7 +505,7 @@ $code.=<<___; psllq \$57,$Xi # movdqa $Xi,$T1 # pslldq \$8,$Xi - psrldq \$8,$T1 # + psrldq \$8,$T1 # pxor $T2,$Xi pxor $T1,$Xhi # @@ -583,7 +619,7 @@ ___ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$T2); $code.=<<___ if (0 || (&reduction_alg9($Xhi,$Xi)&&0)); # experimental alternative. special thing about is that there - # no dependency between the two multiplications... + # no dependency between the two multiplications... mov \$`0xE1<<1`,%eax mov \$0xA040608020C0E000,%r10 # ((7..0)·0xE0)&0xff mov \$0x07,%r11d @@ -758,7 +794,7 @@ $code.=<<___; movdqa $T2,$T1 # pslldq \$8,$T2 pclmulqdq \$0x00,$Hkey2,$Xln - psrldq \$8,$T1 # + psrldq \$8,$T1 # pxor $T2,$Xi pxor $T1,$Xhi # movdqu 0($inp),$T1 @@ -894,7 +930,7 @@ $code.=<<___; psllq \$57,$Xi # movdqa $Xi,$T1 # pslldq \$8,$Xi - psrldq \$8,$T1 # + psrldq \$8,$T1 # pxor $T2,$Xi pshufd \$0b01001110,$Xhn,$Xmn pxor $T1,$Xhi # @@ -1648,14 +1684,20 @@ se_handler: cmp %r10,%rbx # context->Rip>=epilogue label jae .Lin_prologue - lea 24(%rax),%rax # adjust "rsp" + lea 48+280(%rax),%rax # adjust "rsp" mov -8(%rax),%rbx mov -16(%rax),%rbp mov -24(%rax),%r12 + mov -32(%rax),%r13 + mov -40(%rax),%r14 + mov -48(%rax),%r15 mov %rbx,144($context) # restore context->Rbx mov %rbp,160($context) # restore context->Rbp mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 .Lin_prologue: mov 8(%rax),%rdi diff --git a/crypto/modes/asm/ghashp8-ppc.pl b/crypto/modes/asm/ghashp8-ppc.pl index f0598cb2..45c64384 100755 --- a/crypto/modes/asm/ghashp8-ppc.pl +++ b/crypto/modes/asm/ghashp8-ppc.pl @@ -23,7 +23,7 @@ # Relative comparison is therefore more informative. This initial # version is ~2.1x slower than hardware-assisted AES-128-CTR, ~12x # faster than "4-bit" integer-only compiler-generated 64-bit code. -# "Initial version" means that there is room for futher improvement. +# "Initial version" means that there is room for further improvement. # May 2016 # diff --git a/crypto/modes/asm/ghashv8-armx.pl b/crypto/modes/asm/ghashv8-armx.pl index dcd5f595..7e572387 100644 --- a/crypto/modes/asm/ghashv8-armx.pl +++ b/crypto/modes/asm/ghashv8-armx.pl @@ -19,23 +19,29 @@ # June 2014 # # Initial version was developed in tight cooperation with Ard -# Biesheuvel from bits-n-pieces from -# other assembly modules. Just like aesv8-armx.pl this module -# supports both AArch32 and AArch64 execution modes. +# Biesheuvel of Linaro from bits-n-pieces from other assembly modules. +# Just like aesv8-armx.pl this module supports both AArch32 and +# AArch64 execution modes. # # July 2014 # # Implement 2x aggregated reduction [see ghash-x86.pl for background # information]. # +# November 2017 +# +# AArch64 register bank to "accommodate" 4x aggregated reduction and +# improve performance by 20-70% depending on processor. +# # Current performance in cycles per processed byte: # -# PMULL[2] 32-bit NEON(*) -# Apple A7 0.92 5.62 -# Cortex-A53 1.01 8.39 -# Cortex-A57 1.17 7.61 -# Denver 0.71 6.02 -# Mongoose 1.10 8.06 +# 64-bit PMULL 32-bit PMULL 32-bit NEON(*) +# Apple A7 0.58 0.92 5.62 +# Cortex-A53 0.85 1.01 8.39 +# Cortex-A57 0.73 1.17 7.61 +# Denver 0.51 0.65 6.02 +# Mongoose 0.65 1.10 8.06 +# Kryo 0.76 1.16 8.00 # # (*) presented for reference/comparison purposes; @@ -130,8 +136,56 @@ gcm_init_v8: vext.8 $t1,$H2,$H2,#8 @ Karatsuba pre-processing veor $t1,$t1,$H2 vext.8 $Hhl,$t0,$t1,#8 @ pack Karatsuba pre-processed - vst1.64 {$Hhl-$H2},[x0] @ store Htable[1..2] + vst1.64 {$Hhl-$H2},[x0],#32 @ store Htable[1..2] +___ +if ($flavour =~ /64/) { +my ($t3,$Yl,$Ym,$Yh) = map("q$_",(4..7)); +$code.=<<___; + @ calculate H^3 and H^4 + vpmull.p64 $Xl,$H, $H2 + vpmull.p64 $Yl,$H2,$H2 + vpmull2.p64 $Xh,$H, $H2 + vpmull2.p64 $Yh,$H2,$H2 + vpmull.p64 $Xm,$t0,$t1 + vpmull.p64 $Ym,$t1,$t1 + + vext.8 $t0,$Xl,$Xh,#8 @ Karatsuba post-processing + vext.8 $t1,$Yl,$Yh,#8 + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t0 + veor $t3,$Yl,$Yh + veor $Ym,$Ym,$t1 + veor $Xm,$Xm,$t2 + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase + veor $Ym,$Ym,$t3 + vpmull.p64 $t3,$Yl,$xC2 + + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Yh#lo,$Ym#hi + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + vmov $Ym#hi,$Yl#lo + veor $Xl,$Xm,$t2 + veor $Yl,$Ym,$t3 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase + vext.8 $t3,$Yl,$Yl,#8 + vpmull.p64 $Xl,$Xl,$xC2 + vpmull.p64 $Yl,$Yl,$xC2 + veor $t2,$t2,$Xh + veor $t3,$t3,$Yh + veor $H, $Xl,$t2 @ H^3 + veor $H2,$Yl,$t3 @ H^4 + + vext.8 $t0,$H, $H,#8 @ Karatsuba pre-processing + vext.8 $t1,$H2,$H2,#8 + veor $t0,$t0,$H + veor $t1,$t1,$H2 + vext.8 $Hhl,$t0,$t1,#8 @ pack Karatsuba pre-processed + vst1.64 {$H-$H2},[x0] @ store Htable[3..5] +___ +} +$code.=<<___; ret .size gcm_init_v8,.-gcm_init_v8 ___ @@ -200,6 +254,10 @@ $code.=<<___; .align 4 gcm_ghash_v8: ___ +$code.=<<___ if ($flavour =~ /64/); + cmp $len,#64 + b.hs .Lgcm_ghash_v8_4x +___ $code.=<<___ if ($flavour !~ /64/); vstmdb sp!,{d8-d15} @ 32-bit ABI says so ___ @@ -209,13 +267,13 @@ $code.=<<___; @ loaded value would have @ to be rotated in order to @ make it appear as in - @ alorithm specification + @ algorithm specification subs $len,$len,#32 @ see if $len is 32 or larger mov $inc,#16 @ $inc is used as post- @ increment for input pointer; @ as loop is modulo-scheduled @ $inc is zeroed just in time - @ to preclude oversteping + @ to preclude overstepping @ inp[len], which means that @ last block[s] are actually @ loaded twice, but last @@ -347,7 +405,297 @@ $code.=<<___; ret .size gcm_ghash_v8,.-gcm_ghash_v8 ___ + +if ($flavour =~ /64/) { # 4x subroutine +my ($I0,$j1,$j2,$j3, + $I1,$I2,$I3,$H3,$H34,$H4,$Yl,$Ym,$Yh) = map("q$_",(4..7,15..23)); + +$code.=<<___; +.type gcm_ghash_v8_4x,%function +.align 4 +gcm_ghash_v8_4x: +.Lgcm_ghash_v8_4x: + vld1.64 {$Xl},[$Xi] @ load [rotated] Xi + vld1.64 {$H-$H2},[$Htbl],#48 @ load twisted H, ..., H^2 + vmov.i8 $xC2,#0xe1 + vld1.64 {$H3-$H4},[$Htbl] @ load twisted H^3, ..., H^4 + vshl.u64 $xC2,$xC2,#57 @ compose 0xc2.0 constant + + vld1.64 {$I0-$j3},[$inp],#64 +#ifndef __ARMEB__ + vrev64.8 $Xl,$Xl + vrev64.8 $j1,$j1 + vrev64.8 $j2,$j2 + vrev64.8 $j3,$j3 + vrev64.8 $I0,$I0 +#endif + vext.8 $I3,$j3,$j3,#8 + vext.8 $I2,$j2,$j2,#8 + vext.8 $I1,$j1,$j1,#8 + + vpmull.p64 $Yl,$H,$I3 @ H·Ii+3 + veor $j3,$j3,$I3 + vpmull2.p64 $Yh,$H,$I3 + vpmull.p64 $Ym,$Hhl,$j3 + + vpmull.p64 $t0,$H2,$I2 @ H^2·Ii+2 + veor $j2,$j2,$I2 + vpmull2.p64 $I2,$H2,$I2 + vpmull2.p64 $j2,$Hhl,$j2 + + veor $Yl,$Yl,$t0 + veor $Yh,$Yh,$I2 + veor $Ym,$Ym,$j2 + + vpmull.p64 $j3,$H3,$I1 @ H^3·Ii+1 + veor $j1,$j1,$I1 + vpmull2.p64 $I1,$H3,$I1 + vpmull.p64 $j1,$H34,$j1 + + veor $Yl,$Yl,$j3 + veor $Yh,$Yh,$I1 + veor $Ym,$Ym,$j1 + + subs $len,$len,#128 + b.lo .Ltail4x + + b .Loop4x + +.align 4 +.Loop4x: + veor $t0,$I0,$Xl + vld1.64 {$I0-$j3},[$inp],#64 + vext.8 $IN,$t0,$t0,#8 +#ifndef __ARMEB__ + vrev64.8 $j1,$j1 + vrev64.8 $j2,$j2 + vrev64.8 $j3,$j3 + vrev64.8 $I0,$I0 +#endif + + vpmull.p64 $Xl,$H4,$IN @ H^4·(Xi+Ii) + veor $t0,$t0,$IN + vpmull2.p64 $Xh,$H4,$IN + vext.8 $I3,$j3,$j3,#8 + vpmull2.p64 $Xm,$H34,$t0 + + veor $Xl,$Xl,$Yl + veor $Xh,$Xh,$Yh + vext.8 $I2,$j2,$j2,#8 + veor $Xm,$Xm,$Ym + vext.8 $I1,$j1,$j1,#8 + + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + vpmull.p64 $Yl,$H,$I3 @ H·Ii+3 + veor $j3,$j3,$I3 + veor $Xm,$Xm,$t1 + vpmull2.p64 $Yh,$H,$I3 + veor $Xm,$Xm,$t2 + vpmull.p64 $Ym,$Hhl,$j3 + + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + vpmull.p64 $t0,$H2,$I2 @ H^2·Ii+2 + veor $j2,$j2,$I2 + vpmull2.p64 $I2,$H2,$I2 + veor $Xl,$Xm,$t2 + vpmull2.p64 $j2,$Hhl,$j2 + + veor $Yl,$Yl,$t0 + veor $Yh,$Yh,$I2 + veor $Ym,$Ym,$j2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + vpmull.p64 $j3,$H3,$I1 @ H^3·Ii+1 + veor $j1,$j1,$I1 + veor $t2,$t2,$Xh + vpmull2.p64 $I1,$H3,$I1 + vpmull.p64 $j1,$H34,$j1 + + veor $Xl,$Xl,$t2 + veor $Yl,$Yl,$j3 + veor $Yh,$Yh,$I1 + vext.8 $Xl,$Xl,$Xl,#8 + veor $Ym,$Ym,$j1 + + subs $len,$len,#64 + b.hs .Loop4x + +.Ltail4x: + veor $t0,$I0,$Xl + vext.8 $IN,$t0,$t0,#8 + + vpmull.p64 $Xl,$H4,$IN @ H^4·(Xi+Ii) + veor $t0,$t0,$IN + vpmull2.p64 $Xh,$H4,$IN + vpmull2.p64 $Xm,$H34,$t0 + + veor $Xl,$Xl,$Yl + veor $Xh,$Xh,$Yh + veor $Xm,$Xm,$Ym + + adds $len,$len,#64 + b.eq .Ldone4x + + cmp $len,#32 + b.lo .Lone + b.eq .Ltwo +.Lthree: + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + vld1.64 {$I0-$j2},[$inp] + veor $Xm,$Xm,$t2 +#ifndef __ARMEB__ + vrev64.8 $j1,$j1 + vrev64.8 $j2,$j2 + vrev64.8 $I0,$I0 +#endif + + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + vext.8 $I2,$j2,$j2,#8 + vext.8 $I1,$j1,$j1,#8 + veor $Xl,$Xm,$t2 + + vpmull.p64 $Yl,$H,$I2 @ H·Ii+2 + veor $j2,$j2,$I2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + vpmull2.p64 $Yh,$H,$I2 + vpmull.p64 $Ym,$Hhl,$j2 + veor $Xl,$Xl,$t2 + vpmull.p64 $j3,$H2,$I1 @ H^2·Ii+1 + veor $j1,$j1,$I1 + vext.8 $Xl,$Xl,$Xl,#8 + + vpmull2.p64 $I1,$H2,$I1 + veor $t0,$I0,$Xl + vpmull2.p64 $j1,$Hhl,$j1 + vext.8 $IN,$t0,$t0,#8 + + veor $Yl,$Yl,$j3 + veor $Yh,$Yh,$I1 + veor $Ym,$Ym,$j1 + + vpmull.p64 $Xl,$H3,$IN @ H^3·(Xi+Ii) + veor $t0,$t0,$IN + vpmull2.p64 $Xh,$H3,$IN + vpmull.p64 $Xm,$H34,$t0 + + veor $Xl,$Xl,$Yl + veor $Xh,$Xh,$Yh + veor $Xm,$Xm,$Ym + b .Ldone4x + +.align 4 +.Ltwo: + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + vld1.64 {$I0-$j1},[$inp] + veor $Xm,$Xm,$t2 +#ifndef __ARMEB__ + vrev64.8 $j1,$j1 + vrev64.8 $I0,$I0 +#endif + + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + vext.8 $I1,$j1,$j1,#8 + veor $Xl,$Xm,$t2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + veor $Xl,$Xl,$t2 + vext.8 $Xl,$Xl,$Xl,#8 + + vpmull.p64 $Yl,$H,$I1 @ H·Ii+1 + veor $j1,$j1,$I1 + + veor $t0,$I0,$Xl + vext.8 $IN,$t0,$t0,#8 + + vpmull2.p64 $Yh,$H,$I1 + vpmull.p64 $Ym,$Hhl,$j1 + + vpmull.p64 $Xl,$H2,$IN @ H^2·(Xi+Ii) + veor $t0,$t0,$IN + vpmull2.p64 $Xh,$H2,$IN + vpmull2.p64 $Xm,$Hhl,$t0 + + veor $Xl,$Xl,$Yl + veor $Xh,$Xh,$Yh + veor $Xm,$Xm,$Ym + b .Ldone4x + +.align 4 +.Lone: + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + vld1.64 {$I0},[$inp] + veor $Xm,$Xm,$t2 +#ifndef __ARMEB__ + vrev64.8 $I0,$I0 +#endif + + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + veor $Xl,$Xm,$t2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + veor $Xl,$Xl,$t2 + vext.8 $Xl,$Xl,$Xl,#8 + + veor $t0,$I0,$Xl + vext.8 $IN,$t0,$t0,#8 + + vpmull.p64 $Xl,$H,$IN + veor $t0,$t0,$IN + vpmull2.p64 $Xh,$H,$IN + vpmull.p64 $Xm,$Hhl,$t0 + +.Ldone4x: + vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing + veor $t2,$Xl,$Xh + veor $Xm,$Xm,$t1 + veor $Xm,$Xm,$t2 + + vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction + vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result + vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl + veor $Xl,$Xm,$t2 + + vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction + vpmull.p64 $Xl,$Xl,$xC2 + veor $t2,$t2,$Xh + veor $Xl,$Xl,$t2 + vext.8 $Xl,$Xl,$Xl,#8 + +#ifndef __ARMEB__ + vrev64.8 $Xl,$Xl +#endif + vst1.64 {$Xl},[$Xi] @ write out Xi + + ret +.size gcm_ghash_v8_4x,.-gcm_ghash_v8_4x +___ + } +} + $code.=<<___; .asciz "GHASH for ARMv8, CRYPTOGAMS by " .align 2 @@ -358,7 +706,8 @@ if ($flavour =~ /64/) { ######## 64-bit code my $arg=shift; $arg =~ m/q([0-9]+)#(lo|hi),\s*q([0-9]+)#(lo|hi)/o && - sprintf "ins v%d.d[%d],v%d.d[%d]",$1,($2 eq "lo")?0:1,$3,($4 eq "lo")?0:1; + sprintf "ins v%d.d[%d],v%d.d[%d]",$1<8?$1:$1+8,($2 eq "lo")?0:1, + $3<8?$3:$3+8,($4 eq "lo")?0:1; } foreach(split("\n",$code)) { s/cclr\s+([wx])([^,]+),\s*([a-z]+)/csel $1$2,$1zr,$1$2,$3/o or @@ -373,7 +722,7 @@ if ($flavour =~ /64/) { ######## 64-bit code s/\bq([0-9]+)\b/"v".($1<8?$1:$1+8).".16b"/geo; # old->new registers s/@\s/\/\//o; # old->new style commentary - # fix up remainig legacy suffixes + # fix up remaining legacy suffixes s/\.[ui]?8(\s)/$1/o; s/\.[uis]?32//o and s/\.16b/\.4s/go; m/\.p64/o and s/\.16b/\.1q/o; # 1st pmull argument @@ -413,7 +762,7 @@ if ($flavour =~ /64/) { ######## 64-bit code s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers s/\/\/\s?/@ /o; # new->old style commentary - # fix up remainig new-style suffixes + # fix up remaining new-style suffixes s/\],#[0-9]+/]!/o; s/cclr\s+([^,]+),\s*([a-z]+)/mov$2 $1,#0/o or diff --git a/crypto/modes/build.info b/crypto/modes/build.info index 38195c44..821340eb 100644 --- a/crypto/modes/build.info +++ b/crypto/modes/build.info @@ -6,8 +6,9 @@ SOURCE[../../libcrypto]=\ INCLUDE[gcm128.o]=.. -GENERATE[ghash-ia64.s]=asm/ghash-ia64.pl $(CFLAGS) $(LIB_CFLAGS) -GENERATE[ghash-x86.s]=asm/ghash-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[ghash-ia64.s]=asm/ghash-ia64.pl $(LIB_CFLAGS) $(LIB_CPPFLAGS) +GENERATE[ghash-x86.s]=asm/ghash-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) GENERATE[ghash-x86_64.s]=asm/ghash-x86_64.pl $(PERLASM_SCHEME) GENERATE[aesni-gcm-x86_64.s]=asm/aesni-gcm-x86_64.pl $(PERLASM_SCHEME) GENERATE[ghash-sparcv9.S]=asm/ghash-sparcv9.pl $(PERLASM_SCHEME) @@ -19,6 +20,8 @@ GENERATE[ghash-armv4.S]=asm/ghash-armv4.pl $(PERLASM_SCHEME) INCLUDE[ghash-armv4.o]=.. GENERATE[ghashv8-armx.S]=asm/ghashv8-armx.pl $(PERLASM_SCHEME) INCLUDE[ghashv8-armx.o]=.. +GENERATE[ghash-s390x.S]=asm/ghash-s390x.pl $(PERLASM_SCHEME) +INCLUDE[ghash-s390x.o]=.. BEGINRAW[Makefile] # GNU make "catch all" diff --git a/crypto/modes/cts128.c b/crypto/modes/cts128.c index 77ec994b..93826a1e 100644 --- a/crypto/modes/cts128.c +++ b/crypto/modes/cts128.c @@ -328,196 +328,3 @@ size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, #endif return 16 + len + residue; } - -#if defined(SELFTEST) -# include -# include - -/* test vectors from RFC 3962 */ -static const unsigned char test_key[16] = "chicken teriyaki"; -static const unsigned char test_input[64] = - "I would like the" " General Gau's C" - "hicken, please, " "and wonton soup."; -static const unsigned char test_iv[16] = - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - -static const unsigned char vector_17[17] = { - 0xc6, 0x35, 0x35, 0x68, 0xf2, 0xbf, 0x8c, 0xb4, - 0xd8, 0xa5, 0x80, 0x36, 0x2d, 0xa7, 0xff, 0x7f, - 0x97 -}; - -static const unsigned char vector_31[31] = { - 0xfc, 0x00, 0x78, 0x3e, 0x0e, 0xfd, 0xb2, 0xc1, - 0xd4, 0x45, 0xd4, 0xc8, 0xef, 0xf7, 0xed, 0x22, - 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, - 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5 -}; - -static const unsigned char vector_32[32] = { - 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, - 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8, - 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, - 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84 -}; - -static const unsigned char vector_47[47] = { - 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, - 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, - 0xb3, 0xff, 0xfd, 0x94, 0x0c, 0x16, 0xa1, 0x8c, - 0x1b, 0x55, 0x49, 0xd2, 0xf8, 0x38, 0x02, 0x9e, - 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, - 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5 -}; - -static const unsigned char vector_48[48] = { - 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, - 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, - 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0, - 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8, - 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, - 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8 -}; - -static const unsigned char vector_64[64] = { - 0x97, 0x68, 0x72, 0x68, 0xd6, 0xec, 0xcc, 0xc0, - 0xc0, 0x7b, 0x25, 0xe2, 0x5e, 0xcf, 0xe5, 0x84, - 0x39, 0x31, 0x25, 0x23, 0xa7, 0x86, 0x62, 0xd5, - 0xbe, 0x7f, 0xcb, 0xcc, 0x98, 0xeb, 0xf5, 0xa8, - 0x48, 0x07, 0xef, 0xe8, 0x36, 0xee, 0x89, 0xa5, - 0x26, 0x73, 0x0d, 0xbc, 0x2f, 0x7b, 0xc8, 0x40, - 0x9d, 0xad, 0x8b, 0xbb, 0x96, 0xc4, 0xcd, 0xc0, - 0x3b, 0xc1, 0x03, 0xe1, 0xa1, 0x94, 0xbb, 0xd8 -}; - -static AES_KEY encks, decks; - -void test_vector(const unsigned char *vector, size_t len) -{ - unsigned char iv[sizeof(test_iv)]; - unsigned char cleartext[64], ciphertext[64]; - size_t tail; - - printf("vector_%d\n", len); - fflush(stdout); - - if ((tail = len % 16) == 0) - tail = 16; - tail += 16; - - /* test block-based encryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_cts128_encrypt_block(test_input, ciphertext, len, &encks, iv, - (block128_f) AES_encrypt); - if (memcmp(ciphertext, vector, len)) - fprintf(stderr, "output_%d mismatch\n", len), exit(1); - if (memcmp(iv, vector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(1); - - /* test block-based decryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_cts128_decrypt_block(ciphertext, cleartext, len, &decks, iv, - (block128_f) AES_decrypt); - if (memcmp(cleartext, test_input, len)) - fprintf(stderr, "input_%d mismatch\n", len), exit(2); - if (memcmp(iv, vector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(2); - - /* test streamed encryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_cts128_encrypt(test_input, ciphertext, len, &encks, iv, - (cbc128_f) AES_cbc_encrypt); - if (memcmp(ciphertext, vector, len)) - fprintf(stderr, "output_%d mismatch\n", len), exit(3); - if (memcmp(iv, vector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(3); - - /* test streamed decryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_cts128_decrypt(ciphertext, cleartext, len, &decks, iv, - (cbc128_f) AES_cbc_encrypt); - if (memcmp(cleartext, test_input, len)) - fprintf(stderr, "input_%d mismatch\n", len), exit(4); - if (memcmp(iv, vector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(4); -} - -void test_nistvector(const unsigned char *vector, size_t len) -{ - unsigned char iv[sizeof(test_iv)]; - unsigned char cleartext[64], ciphertext[64], nistvector[64]; - size_t tail; - - printf("nistvector_%d\n", len); - fflush(stdout); - - if ((tail = len % 16) == 0) - tail = 16; - - len -= 16 + tail; - memcpy(nistvector, vector, len); - /* flip two last blocks */ - memcpy(nistvector + len, vector + len + 16, tail); - memcpy(nistvector + len + tail, vector + len, 16); - len += 16 + tail; - tail = 16; - - /* test block-based encryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_nistcts128_encrypt_block(test_input, ciphertext, len, &encks, iv, - (block128_f) AES_encrypt); - if (memcmp(ciphertext, nistvector, len)) - fprintf(stderr, "output_%d mismatch\n", len), exit(1); - if (memcmp(iv, nistvector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(1); - - /* test block-based decryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_nistcts128_decrypt_block(ciphertext, cleartext, len, &decks, iv, - (block128_f) AES_decrypt); - if (memcmp(cleartext, test_input, len)) - fprintf(stderr, "input_%d mismatch\n", len), exit(2); - if (memcmp(iv, nistvector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(2); - - /* test streamed encryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_nistcts128_encrypt(test_input, ciphertext, len, &encks, iv, - (cbc128_f) AES_cbc_encrypt); - if (memcmp(ciphertext, nistvector, len)) - fprintf(stderr, "output_%d mismatch\n", len), exit(3); - if (memcmp(iv, nistvector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(3); - - /* test streamed decryption */ - memcpy(iv, test_iv, sizeof(test_iv)); - CRYPTO_nistcts128_decrypt(ciphertext, cleartext, len, &decks, iv, - (cbc128_f) AES_cbc_encrypt); - if (memcmp(cleartext, test_input, len)) - fprintf(stderr, "input_%d mismatch\n", len), exit(4); - if (memcmp(iv, nistvector + len - tail, sizeof(iv))) - fprintf(stderr, "iv_%d mismatch\n", len), exit(4); -} - -int main() -{ - AES_set_encrypt_key(test_key, 128, &encks); - AES_set_decrypt_key(test_key, 128, &decks); - - test_vector(vector_17, sizeof(vector_17)); - test_vector(vector_31, sizeof(vector_31)); - test_vector(vector_32, sizeof(vector_32)); - test_vector(vector_47, sizeof(vector_47)); - test_vector(vector_48, sizeof(vector_48)); - test_vector(vector_64, sizeof(vector_64)); - - test_nistvector(vector_17, sizeof(vector_17)); - test_nistvector(vector_31, sizeof(vector_31)); - test_nistvector(vector_32, sizeof(vector_32)); - test_nistvector(vector_47, sizeof(vector_47)); - test_nistvector(vector_48, sizeof(vector_48)); - test_nistvector(vector_64, sizeof(vector_64)); - - return 0; -} -#endif diff --git a/crypto/modes/gcm128.c b/crypto/modes/gcm128.c index a2b05c4d..4c8ae910 100644 --- a/crypto/modes/gcm128.c +++ b/crypto/modes/gcm128.c @@ -209,7 +209,7 @@ static void gcm_gmult_8bit(u64 Xi[2], const u128 Htable[256]) } } -# define GCM_MUL(ctx,Xi) gcm_gmult_8bit(ctx->Xi.u,ctx->Htable) +# define GCM_MUL(ctx) gcm_gmult_8bit(ctx->Xi.u,ctx->Htable) #elif TABLE_BITS==4 @@ -550,7 +550,7 @@ void gcm_ghash_4bit(u64 Xi[2], const u128 Htable[16], const u8 *inp, size_t len); # endif -# define GCM_MUL(ctx,Xi) gcm_gmult_4bit(ctx->Xi.u,ctx->Htable) +# define GCM_MUL(ctx) gcm_gmult_4bit(ctx->Xi.u,ctx->Htable) # if defined(GHASH_ASM) || !defined(OPENSSL_SMALL_FOOTPRINT) # define GHASH(ctx,in,len) gcm_ghash_4bit((ctx)->Xi.u,(ctx)->Htable,in,len) /* @@ -624,7 +624,7 @@ static void gcm_gmult_1bit(u64 Xi[2], const u64 H[2]) } } -# define GCM_MUL(ctx,Xi) gcm_gmult_1bit(ctx->Xi.u,ctx->H.u) +# define GCM_MUL(ctx) gcm_gmult_1bit(ctx->Xi.u,ctx->H.u) #endif @@ -703,7 +703,7 @@ void gcm_ghash_p8(u64 Xi[2], const u128 Htable[16], const u8 *inp, #ifdef GCM_FUNCREF_4BIT # undef GCM_MUL -# define GCM_MUL(ctx,Xi) (*gcm_gmult_p)(ctx->Xi.u,ctx->Htable) +# define GCM_MUL(ctx) (*gcm_gmult_p)(ctx->Xi.u,ctx->Htable) # ifdef GHASH # undef GHASH # define GHASH(ctx,in,len) (*gcm_ghash_p)(ctx->Xi.u,ctx->Htable,in,len) @@ -836,10 +836,6 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, void (*gcm_gmult_p) (u64 Xi[2], const u128 Htable[16]) = ctx->gmult; #endif - ctx->Yi.u[0] = 0; - ctx->Yi.u[1] = 0; - ctx->Xi.u[0] = 0; - ctx->Xi.u[1] = 0; ctx->len.u[0] = 0; /* AAD length */ ctx->len.u[1] = 0; /* message length */ ctx->ares = 0; @@ -847,53 +843,68 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, if (len == 12) { memcpy(ctx->Yi.c, iv, 12); + ctx->Yi.c[12] = 0; + ctx->Yi.c[13] = 0; + ctx->Yi.c[14] = 0; ctx->Yi.c[15] = 1; ctr = 1; } else { size_t i; u64 len0 = len; + /* Borrow ctx->Xi to calculate initial Yi */ + ctx->Xi.u[0] = 0; + ctx->Xi.u[1] = 0; + while (len >= 16) { for (i = 0; i < 16; ++i) - ctx->Yi.c[i] ^= iv[i]; - GCM_MUL(ctx, Yi); + ctx->Xi.c[i] ^= iv[i]; + GCM_MUL(ctx); iv += 16; len -= 16; } if (len) { for (i = 0; i < len; ++i) - ctx->Yi.c[i] ^= iv[i]; - GCM_MUL(ctx, Yi); + ctx->Xi.c[i] ^= iv[i]; + GCM_MUL(ctx); } len0 <<= 3; if (is_endian.little) { #ifdef BSWAP8 - ctx->Yi.u[1] ^= BSWAP8(len0); + ctx->Xi.u[1] ^= BSWAP8(len0); #else - ctx->Yi.c[8] ^= (u8)(len0 >> 56); - ctx->Yi.c[9] ^= (u8)(len0 >> 48); - ctx->Yi.c[10] ^= (u8)(len0 >> 40); - ctx->Yi.c[11] ^= (u8)(len0 >> 32); - ctx->Yi.c[12] ^= (u8)(len0 >> 24); - ctx->Yi.c[13] ^= (u8)(len0 >> 16); - ctx->Yi.c[14] ^= (u8)(len0 >> 8); - ctx->Yi.c[15] ^= (u8)(len0); + ctx->Xi.c[8] ^= (u8)(len0 >> 56); + ctx->Xi.c[9] ^= (u8)(len0 >> 48); + ctx->Xi.c[10] ^= (u8)(len0 >> 40); + ctx->Xi.c[11] ^= (u8)(len0 >> 32); + ctx->Xi.c[12] ^= (u8)(len0 >> 24); + ctx->Xi.c[13] ^= (u8)(len0 >> 16); + ctx->Xi.c[14] ^= (u8)(len0 >> 8); + ctx->Xi.c[15] ^= (u8)(len0); #endif - } else - ctx->Yi.u[1] ^= len0; + } else { + ctx->Xi.u[1] ^= len0; + } - GCM_MUL(ctx, Yi); + GCM_MUL(ctx); if (is_endian.little) #ifdef BSWAP4 - ctr = BSWAP4(ctx->Yi.d[3]); + ctr = BSWAP4(ctx->Xi.d[3]); #else - ctr = GETU32(ctx->Yi.c + 12); + ctr = GETU32(ctx->Xi.c + 12); #endif else - ctr = ctx->Yi.d[3]; + ctr = ctx->Xi.d[3]; + + /* Copy borrowed Xi to Yi */ + ctx->Yi.u[0] = ctx->Xi.u[0]; + ctx->Yi.u[1] = ctx->Xi.u[1]; } + ctx->Xi.u[0] = 0; + ctx->Xi.u[1] = 0; + (*ctx->block) (ctx->Yi.c, ctx->EK0.c, ctx->key); ++ctr; if (is_endian.little) @@ -936,7 +947,7 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, n = (n + 1) % 16; } if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); else { ctx->ares = n; return 0; @@ -952,7 +963,7 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, while (len >= 16) { for (i = 0; i < 16; ++i) ctx->Xi.c[i] ^= aad[i]; - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); aad += 16; len -= 16; } @@ -995,7 +1006,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, if (ctx->ares) { /* First call to encrypt finalizes GHASH(AAD) */ - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); ctx->ares = 0; } @@ -1019,7 +1030,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, n = (n + 1) % 16; } if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); else { ctx->mres = n; return 0; @@ -1100,7 +1111,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, ctx->Yi.d[3] = ctr; for (i = 0; i < 16 / sizeof(size_t); ++i) ctx->Xi.t[i] ^= out_t[i] = in_t[i] ^ ctx->EKi.t[i]; - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); out += 16; in += 16; len -= 16; @@ -1144,7 +1155,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, ctx->Xi.c[n] ^= out[i] = in[i] ^ ctx->EKi.c[n]; n = (n + 1) % 16; if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); } ctx->mres = n; @@ -1179,7 +1190,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, if (ctx->ares) { /* First call to decrypt finalizes GHASH(AAD) */ - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); ctx->ares = 0; } @@ -1205,7 +1216,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, n = (n + 1) % 16; } if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); else { ctx->mres = n; return 0; @@ -1287,7 +1298,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, out[i] = c ^ ctx->EKi.t[i]; ctx->Xi.t[i] ^= c; } - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); out += 16; in += 16; len -= 16; @@ -1336,7 +1347,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, ctx->Xi.c[n] ^= c; n = (n + 1) % 16; if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); } ctx->mres = n; @@ -1373,7 +1384,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, if (ctx->ares) { /* First call to encrypt finalizes GHASH(AAD) */ - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); ctx->ares = 0; } @@ -1394,7 +1405,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, n = (n + 1) % 16; } if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); else { ctx->mres = n; return 0; @@ -1440,7 +1451,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, while (j--) { for (i = 0; i < 16; ++i) ctx->Xi.c[i] ^= out[i]; - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); out += 16; } # endif @@ -1497,7 +1508,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, if (ctx->ares) { /* First call to decrypt finalizes GHASH(AAD) */ - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); ctx->ares = 0; } @@ -1520,7 +1531,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, n = (n + 1) % 16; } if (n == 0) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); else { ctx->mres = n; return 0; @@ -1554,7 +1565,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, size_t k; for (k = 0; k < 16; ++k) ctx->Xi.c[k] ^= in[k]; - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); in += 16; } j = i / 16; @@ -1612,7 +1623,7 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, #endif if (ctx->mres || ctx->ares) - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); if (is_endian.little) { #ifdef BSWAP8 @@ -1631,7 +1642,7 @@ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, ctx->Xi.u[0] ^= alen; ctx->Xi.u[1] ^= clen; - GCM_MUL(ctx, Xi); + GCM_MUL(ctx); ctx->Xi.u[0] ^= ctx->EK0.u[0]; ctx->Xi.u[1] ^= ctx->EK0.u[1]; @@ -1663,639 +1674,3 @@ void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx) { OPENSSL_clear_free(ctx, sizeof(*ctx)); } - -#if defined(SELFTEST) -# include -# include - -/* Test Case 1 */ -static const u8 K1[16], *P1 = NULL, *A1 = NULL, IV1[12], *C1 = NULL; -static const u8 T1[] = { - 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, - 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a -}; - -/* Test Case 2 */ -# define K2 K1 -# define A2 A1 -# define IV2 IV1 -static const u8 P2[16]; -static const u8 C2[] = { - 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, - 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 -}; - -static const u8 T2[] = { - 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, - 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf -}; - -/* Test Case 3 */ -# define A3 A2 -static const u8 K3[] = { - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 -}; - -static const u8 P3[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 -}; - -static const u8 IV3[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88 -}; - -static const u8 C3[] = { - 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 -}; - -static const u8 T3[] = { - 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, - 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 -}; - -/* Test Case 4 */ -# define K4 K3 -# define IV4 IV3 -static const u8 P4[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39 -}; - -static const u8 A4[] = { - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2 -}; - -static const u8 C4[] = { - 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91 -}; - -static const u8 T4[] = { - 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, - 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 -}; - -/* Test Case 5 */ -# define K5 K4 -# define P5 P4 -# define A5 A4 -static const u8 IV5[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad -}; - -static const u8 C5[] = { - 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, - 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, - 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, - 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, - 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, - 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, - 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, - 0xc2, 0x3f, 0x45, 0x98 -}; - -static const u8 T5[] = { - 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, - 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb -}; - -/* Test Case 6 */ -# define K6 K5 -# define P6 P5 -# define A6 A5 -static const u8 IV6[] = { - 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b -}; - -static const u8 C6[] = { - 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, - 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, - 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, - 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, - 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, - 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, - 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, - 0x4c, 0x34, 0xae, 0xe5 -}; - -static const u8 T6[] = { - 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, - 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50 -}; - -/* Test Case 7 */ -static const u8 K7[24], *P7 = NULL, *A7 = NULL, IV7[12], *C7 = NULL; -static const u8 T7[] = { - 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, - 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 -}; - -/* Test Case 8 */ -# define K8 K7 -# define IV8 IV7 -# define A8 A7 -static const u8 P8[16]; -static const u8 C8[] = { - 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, - 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 -}; - -static const u8 T8[] = { - 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, - 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb -}; - -/* Test Case 9 */ -# define A9 A8 -static const u8 K9[] = { - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c -}; - -static const u8 P9[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 -}; - -static const u8 IV9[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88 -}; - -static const u8 C9[] = { - 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 -}; - -static const u8 T9[] = { - 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, - 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 -}; - -/* Test Case 10 */ -# define K10 K9 -# define IV10 IV9 -static const u8 P10[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39 -}; - -static const u8 A10[] = { - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2 -}; - -static const u8 C10[] = { - 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10 -}; - -static const u8 T10[] = { - 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, - 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c -}; - -/* Test Case 11 */ -# define K11 K10 -# define P11 P10 -# define A11 A10 -static const u8 IV11[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad }; - -static const u8 C11[] = { - 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, - 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, - 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, - 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, - 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, - 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, - 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, - 0xa0, 0xf0, 0x62, 0xf7 -}; - -static const u8 T11[] = { - 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, - 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8 -}; - -/* Test Case 12 */ -# define K12 K11 -# define P12 P11 -# define A12 A11 -static const u8 IV12[] = { - 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b -}; - -static const u8 C12[] = { - 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, - 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, - 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, - 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, - 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, - 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, - 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, - 0xe9, 0xb7, 0x37, 0x3b -}; - -static const u8 T12[] = { - 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, - 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9 -}; - -/* Test Case 13 */ -static const u8 K13[32], *P13 = NULL, *A13 = NULL, IV13[12], *C13 = NULL; -static const u8 T13[] = { - 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, - 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b -}; - -/* Test Case 14 */ -# define K14 K13 -# define A14 A13 -static const u8 P14[16], IV14[12]; -static const u8 C14[] = { - 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, - 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 -}; - -static const u8 T14[] = { - 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, - 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 -}; - -/* Test Case 15 */ -# define A15 A14 -static const u8 K15[] = { - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 -}; - -static const u8 P15[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 -}; - -static const u8 IV15[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88 -}; - -static const u8 C15[] = { - 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad -}; - -static const u8 T15[] = { - 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, - 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c -}; - -/* Test Case 16 */ -# define K16 K15 -# define IV16 IV15 -static const u8 P16[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39 -}; - -static const u8 A16[] = { - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2 -}; - -static const u8 C16[] = { - 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62 -}; - -static const u8 T16[] = { - 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, - 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b -}; - -/* Test Case 17 */ -# define K17 K16 -# define P17 P16 -# define A17 A16 -static const u8 IV17[] = { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad }; - -static const u8 C17[] = { - 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, - 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, - 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, - 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, - 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, - 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, - 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, - 0xf4, 0x7c, 0x9b, 0x1f -}; - -static const u8 T17[] = { - 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, - 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2 -}; - -/* Test Case 18 */ -# define K18 K17 -# define P18 P17 -# define A18 A17 -static const u8 IV18[] = { - 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b -}; - -static const u8 C18[] = { - 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, - 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, - 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, - 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, - 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, - 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, - 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, - 0x44, 0xae, 0x7e, 0x3f -}; - -static const u8 T18[] = { - 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, - 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a -}; - -/* Test Case 19 */ -# define K19 K1 -# define P19 P1 -# define IV19 IV1 -# define C19 C1 -static const u8 A19[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, - 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad -}; - -static const u8 T19[] = { - 0x5f, 0xea, 0x79, 0x3a, 0x2d, 0x6f, 0x97, 0x4d, - 0x37, 0xe6, 0x8e, 0x0c, 0xb8, 0xff, 0x94, 0x92 -}; - -/* Test Case 20 */ -# define K20 K1 -# define A20 A1 -/* this results in 0xff in counter LSB */ -static const u8 IV20[64] = { 0xff, 0xff, 0xff, 0xff }; - -static const u8 P20[288]; -static const u8 C20[] = { - 0x56, 0xb3, 0x37, 0x3c, 0xa9, 0xef, 0x6e, 0x4a, - 0x2b, 0x64, 0xfe, 0x1e, 0x9a, 0x17, 0xb6, 0x14, - 0x25, 0xf1, 0x0d, 0x47, 0xa7, 0x5a, 0x5f, 0xce, - 0x13, 0xef, 0xc6, 0xbc, 0x78, 0x4a, 0xf2, 0x4f, - 0x41, 0x41, 0xbd, 0xd4, 0x8c, 0xf7, 0xc7, 0x70, - 0x88, 0x7a, 0xfd, 0x57, 0x3c, 0xca, 0x54, 0x18, - 0xa9, 0xae, 0xff, 0xcd, 0x7c, 0x5c, 0xed, 0xdf, - 0xc6, 0xa7, 0x83, 0x97, 0xb9, 0xa8, 0x5b, 0x49, - 0x9d, 0xa5, 0x58, 0x25, 0x72, 0x67, 0xca, 0xab, - 0x2a, 0xd0, 0xb2, 0x3c, 0xa4, 0x76, 0xa5, 0x3c, - 0xb1, 0x7f, 0xb4, 0x1c, 0x4b, 0x8b, 0x47, 0x5c, - 0xb4, 0xf3, 0xf7, 0x16, 0x50, 0x94, 0xc2, 0x29, - 0xc9, 0xe8, 0xc4, 0xdc, 0x0a, 0x2a, 0x5f, 0xf1, - 0x90, 0x3e, 0x50, 0x15, 0x11, 0x22, 0x13, 0x76, - 0xa1, 0xcd, 0xb8, 0x36, 0x4c, 0x50, 0x61, 0xa2, - 0x0c, 0xae, 0x74, 0xbc, 0x4a, 0xcd, 0x76, 0xce, - 0xb0, 0xab, 0xc9, 0xfd, 0x32, 0x17, 0xef, 0x9f, - 0x8c, 0x90, 0xbe, 0x40, 0x2d, 0xdf, 0x6d, 0x86, - 0x97, 0xf4, 0xf8, 0x80, 0xdf, 0xf1, 0x5b, 0xfb, - 0x7a, 0x6b, 0x28, 0x24, 0x1e, 0xc8, 0xfe, 0x18, - 0x3c, 0x2d, 0x59, 0xe3, 0xf9, 0xdf, 0xff, 0x65, - 0x3c, 0x71, 0x26, 0xf0, 0xac, 0xb9, 0xe6, 0x42, - 0x11, 0xf4, 0x2b, 0xae, 0x12, 0xaf, 0x46, 0x2b, - 0x10, 0x70, 0xbe, 0xf1, 0xab, 0x5e, 0x36, 0x06, - 0x87, 0x2c, 0xa1, 0x0d, 0xee, 0x15, 0xb3, 0x24, - 0x9b, 0x1a, 0x1b, 0x95, 0x8f, 0x23, 0x13, 0x4c, - 0x4b, 0xcc, 0xb7, 0xd0, 0x32, 0x00, 0xbc, 0xe4, - 0x20, 0xa2, 0xf8, 0xeb, 0x66, 0xdc, 0xf3, 0x64, - 0x4d, 0x14, 0x23, 0xc1, 0xb5, 0x69, 0x90, 0x03, - 0xc1, 0x3e, 0xce, 0xf4, 0xbf, 0x38, 0xa3, 0xb6, - 0x0e, 0xed, 0xc3, 0x40, 0x33, 0xba, 0xc1, 0x90, - 0x27, 0x83, 0xdc, 0x6d, 0x89, 0xe2, 0xe7, 0x74, - 0x18, 0x8a, 0x43, 0x9c, 0x7e, 0xbc, 0xc0, 0x67, - 0x2d, 0xbd, 0xa4, 0xdd, 0xcf, 0xb2, 0x79, 0x46, - 0x13, 0xb0, 0xbe, 0x41, 0x31, 0x5e, 0xf7, 0x78, - 0x70, 0x8a, 0x70, 0xee, 0x7d, 0x75, 0x16, 0x5c -}; - -static const u8 T20[] = { - 0x8b, 0x30, 0x7f, 0x6b, 0x33, 0x28, 0x6d, 0x0a, - 0xb0, 0x26, 0xa9, 0xed, 0x3f, 0xe1, 0xe8, 0x5f -}; - -# define TEST_CASE(n) do { \ - u8 out[sizeof(P##n)]; \ - AES_set_encrypt_key(K##n,sizeof(K##n)*8,&key); \ - CRYPTO_gcm128_init(&ctx,&key,(block128_f)AES_encrypt); \ - CRYPTO_gcm128_setiv(&ctx,IV##n,sizeof(IV##n)); \ - memset(out,0,sizeof(out)); \ - if (A##n) CRYPTO_gcm128_aad(&ctx,A##n,sizeof(A##n)); \ - if (P##n) CRYPTO_gcm128_encrypt(&ctx,P##n,out,sizeof(out)); \ - if (CRYPTO_gcm128_finish(&ctx,T##n,16) || \ - (C##n && memcmp(out,C##n,sizeof(out)))) \ - ret++, printf ("encrypt test#%d failed.\n",n); \ - CRYPTO_gcm128_setiv(&ctx,IV##n,sizeof(IV##n)); \ - memset(out,0,sizeof(out)); \ - if (A##n) CRYPTO_gcm128_aad(&ctx,A##n,sizeof(A##n)); \ - if (C##n) CRYPTO_gcm128_decrypt(&ctx,C##n,out,sizeof(out)); \ - if (CRYPTO_gcm128_finish(&ctx,T##n,16) || \ - (P##n && memcmp(out,P##n,sizeof(out)))) \ - ret++, printf ("decrypt test#%d failed.\n",n); \ - } while(0) - -int main() -{ - GCM128_CONTEXT ctx; - AES_KEY key; - int ret = 0; - - TEST_CASE(1); - TEST_CASE(2); - TEST_CASE(3); - TEST_CASE(4); - TEST_CASE(5); - TEST_CASE(6); - TEST_CASE(7); - TEST_CASE(8); - TEST_CASE(9); - TEST_CASE(10); - TEST_CASE(11); - TEST_CASE(12); - TEST_CASE(13); - TEST_CASE(14); - TEST_CASE(15); - TEST_CASE(16); - TEST_CASE(17); - TEST_CASE(18); - TEST_CASE(19); - TEST_CASE(20); - -# ifdef OPENSSL_CPUID_OBJ - { - size_t start, stop, gcm_t, ctr_t, OPENSSL_rdtsc(); - union { - u64 u; - u8 c[1024]; - } buf; - int i; - - AES_set_encrypt_key(K1, sizeof(K1) * 8, &key); - CRYPTO_gcm128_init(&ctx, &key, (block128_f) AES_encrypt); - CRYPTO_gcm128_setiv(&ctx, IV1, sizeof(IV1)); - - CRYPTO_gcm128_encrypt(&ctx, buf.c, buf.c, sizeof(buf)); - start = OPENSSL_rdtsc(); - CRYPTO_gcm128_encrypt(&ctx, buf.c, buf.c, sizeof(buf)); - gcm_t = OPENSSL_rdtsc() - start; - - CRYPTO_ctr128_encrypt(buf.c, buf.c, sizeof(buf), - &key, ctx.Yi.c, ctx.EKi.c, &ctx.mres, - (block128_f) AES_encrypt); - start = OPENSSL_rdtsc(); - CRYPTO_ctr128_encrypt(buf.c, buf.c, sizeof(buf), - &key, ctx.Yi.c, ctx.EKi.c, &ctx.mres, - (block128_f) AES_encrypt); - ctr_t = OPENSSL_rdtsc() - start; - - printf("%.2f-%.2f=%.2f\n", - gcm_t / (double)sizeof(buf), - ctr_t / (double)sizeof(buf), - (gcm_t - ctr_t) / (double)sizeof(buf)); -# ifdef GHASH - { - void (*gcm_ghash_p) (u64 Xi[2], const u128 Htable[16], - const u8 *inp, size_t len) = ctx.ghash; - - GHASH((&ctx), buf.c, sizeof(buf)); - start = OPENSSL_rdtsc(); - for (i = 0; i < 100; ++i) - GHASH((&ctx), buf.c, sizeof(buf)); - gcm_t = OPENSSL_rdtsc() - start; - printf("%.2f\n", gcm_t / (double)sizeof(buf) / (double)i); - } -# endif - } -# endif - - return ret; -} -#endif diff --git a/crypto/modes/modes_lcl.h b/crypto/modes/modes_lcl.h index 7a1603bf..16dcf4e1 100644 --- a/crypto/modes/modes_lcl.h +++ b/crypto/modes/modes_lcl.h @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-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 @@ -73,6 +73,7 @@ typedef unsigned char u8; # endif # elif defined(_MSC_VER) # if _MSC_VER>=1300 +# include # pragma intrinsic(_byteswap_uint64,_byteswap_ulong) # define BSWAP8(x) _byteswap_uint64((u64)(x)) # define BSWAP4(x) _byteswap_ulong((u32)(x)) diff --git a/crypto/o_dir.c b/crypto/o_dir.c index 7019383d..fca9c75e 100644 --- a/crypto/o_dir.c +++ b/crypto/o_dir.c @@ -7,8 +7,8 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include -#include /* * The routines really come from the Levitte Programming, so to make life diff --git a/crypto/o_fips.c b/crypto/o_fips.c index bf6db65f..050ea9c2 100644 --- a/crypto/o_fips.c +++ b/crypto/o_fips.c @@ -8,27 +8,17 @@ */ #include "internal/cryptlib.h" -#ifdef OPENSSL_FIPS -# include -#endif int FIPS_mode(void) { -#ifdef OPENSSL_FIPS - return FIPS_module_mode(); -#else + /* This version of the library does not support FIPS mode. */ return 0; -#endif } int FIPS_mode_set(int r) { -#ifdef OPENSSL_FIPS - return FIPS_module_mode_set(r); -#else if (r == 0) return 1; CRYPTOerr(CRYPTO_F_FIPS_MODE_SET, CRYPTO_R_FIPS_MODE_NOT_SUPPORTED); return 0; -#endif } diff --git a/crypto/o_init.c b/crypto/o_init.c index 2e0c1260..ed6b1303 100644 --- a/crypto/o_init.c +++ b/crypto/o_init.c @@ -7,28 +7,15 @@ * https://www.openssl.org/source/license.html */ -#include +#include "e_os.h" #include -#ifdef OPENSSL_FIPS -# include -# include -#endif /* - * Perform any essential OpenSSL initialization operations. Currently only - * sets FIPS callbacks + * Perform any essential OpenSSL initialization operations. Currently does + * nothing. */ void OPENSSL_init(void) { - static int done = 0; - if (done) - return; - done = 1; -#ifdef OPENSSL_FIPS - FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock); - FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata); - FIPS_set_malloc_callbacks(CRYPTO_malloc, CRYPTO_free); - RAND_init_fips(); -#endif + return; } diff --git a/crypto/o_str.c b/crypto/o_str.c index 528655aa..a8357691 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -1,5 +1,5 @@ /* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,9 +7,8 @@ * https://www.openssl.org/source/license.html */ -#include +#include "e_os.h" #include -#include #include #include "internal/cryptlib.h" #include "internal/o_str.h" @@ -28,14 +27,12 @@ int OPENSSL_memcmp(const void *v1, const void *v2, size_t n) char *CRYPTO_strdup(const char *str, const char* file, int line) { char *ret; - size_t size; if (str == NULL) return NULL; - size = strlen(str) + 1; - ret = CRYPTO_malloc(size, file, line); + ret = CRYPTO_malloc(strlen(str) + 1, file, line); if (ret != NULL) - memcpy(ret, str, size); + strcpy(ret, str); return ret; } diff --git a/crypto/objects/README b/crypto/objects/README index cb1d216c..700f9c5e 100644 --- a/crypto/objects/README +++ b/crypto/objects/README @@ -16,7 +16,7 @@ The basic syntax for adding an object is as follows: create the C macros SN_base, LN_base, NID_base and OBJ_base. Note that if the base name contains spaces, dashes or periods, - those will be converte to underscore. + those will be converted to underscore. Then there are some extra commands: diff --git a/crypto/objects/o_names.c b/crypto/objects/o_names.c index 15fe653d..8f7bc793 100644 --- a/crypto/objects/o_names.c +++ b/crypto/objects/o_names.c @@ -1,5 +1,5 @@ /* - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,7 +16,7 @@ #include #include #include -#include +#include "internal/thread_once.h" #include "obj_lcl.h" /* @@ -45,7 +45,7 @@ static int obj_strcmp(const char *a, const char *b) */ static LHASH_OF(OBJ_NAME) *names_lh = NULL; static int names_type_num = OBJ_NAME_TYPE_NUM; -static CRYPTO_RWLOCK *lock = NULL; +static CRYPTO_RWLOCK *obj_lock = NULL; struct name_funcs_st { unsigned long (*hash_func) (const char *name); @@ -69,9 +69,9 @@ DEFINE_RUN_ONCE_STATIC(o_names_init) { CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE); names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp); - lock = CRYPTO_THREAD_lock_new(); + obj_lock = CRYPTO_THREAD_lock_new(); CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); - return names_lh != NULL && lock != NULL; + return names_lh != NULL && obj_lock != NULL; } int OBJ_NAME_init(void) @@ -89,7 +89,7 @@ int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), if (!OBJ_NAME_init()) return 0; - CRYPTO_THREAD_write_lock(lock); + CRYPTO_THREAD_write_lock(obj_lock); if (name_funcs_stack == NULL) { CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE); @@ -134,7 +134,7 @@ int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), name_funcs->free_func = free_func; out: - CRYPTO_THREAD_unlock(lock); + CRYPTO_THREAD_unlock(obj_lock); return ret; } @@ -180,7 +180,7 @@ const char *OBJ_NAME_get(const char *name, int type) return NULL; if (!OBJ_NAME_init()) return NULL; - CRYPTO_THREAD_read_lock(lock); + CRYPTO_THREAD_read_lock(obj_lock); alias = type & OBJ_NAME_ALIAS; type &= ~OBJ_NAME_ALIAS; @@ -202,7 +202,7 @@ const char *OBJ_NAME_get(const char *name, int type) } } - CRYPTO_THREAD_unlock(lock); + CRYPTO_THREAD_unlock(obj_lock); return value; } @@ -212,9 +212,9 @@ int OBJ_NAME_add(const char *name, int type, const char *data) int alias, ok = 0; if (!OBJ_NAME_init()) - return 0; + return 0; - CRYPTO_THREAD_write_lock(lock); + CRYPTO_THREAD_write_lock(obj_lock); alias = type & OBJ_NAME_ALIAS; type &= ~OBJ_NAME_ALIAS; @@ -255,7 +255,7 @@ int OBJ_NAME_add(const char *name, int type, const char *data) ok = 1; unlock: - CRYPTO_THREAD_unlock(lock); + CRYPTO_THREAD_unlock(obj_lock); return ok; } @@ -267,7 +267,7 @@ int OBJ_NAME_remove(const char *name, int type) if (!OBJ_NAME_init()) return 0; - CRYPTO_THREAD_write_lock(lock); + CRYPTO_THREAD_write_lock(obj_lock); type &= ~OBJ_NAME_ALIAS; on.name = name; @@ -289,7 +289,7 @@ int OBJ_NAME_remove(const char *name, int type) ok = 1; } - CRYPTO_THREAD_unlock(lock); + CRYPTO_THREAD_unlock(obj_lock); return ok; } @@ -398,10 +398,10 @@ void OBJ_NAME_cleanup(int type) if (type < 0) { lh_OBJ_NAME_free(names_lh); sk_NAME_FUNCS_pop_free(name_funcs_stack, name_funcs_free); - CRYPTO_THREAD_lock_free(lock); + CRYPTO_THREAD_lock_free(obj_lock); names_lh = NULL; name_funcs_stack = NULL; - lock = NULL; + obj_lock = NULL; } else lh_OBJ_NAME_set_down_load(names_lh, down_load); } diff --git a/crypto/objects/obj_dat.c b/crypto/objects/obj_dat.c index 21a1f05b..06a3fb34 100644 --- a/crypto/objects/obj_dat.c +++ b/crypto/objects/obj_dat.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include #include "internal/cryptlib.h" #include @@ -40,14 +40,14 @@ static LHASH_OF(ADDED_OBJ) *added = NULL; static int sn_cmp(const ASN1_OBJECT *const *a, const unsigned int *b) { - return (strcmp((*a)->sn, nid_objs[*b].sn)); + return strcmp((*a)->sn, nid_objs[*b].sn); } IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, sn); static int ln_cmp(const ASN1_OBJECT *const *a, const unsigned int *b) { - return (strcmp((*a)->ln, nid_objs[*b].ln)); + return strcmp((*a)->ln, nid_objs[*b].ln); } IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, ln); @@ -82,7 +82,7 @@ static unsigned long added_obj_hash(const ADDED_OBJ *ca) } ret &= 0x3fffffffL; ret |= ((unsigned long)ca->type) << 30L; - return (ret); + return ret; } static int added_obj_cmp(const ADDED_OBJ *ca, const ADDED_OBJ *cb) @@ -92,31 +92,31 @@ static int added_obj_cmp(const ADDED_OBJ *ca, const ADDED_OBJ *cb) i = ca->type - cb->type; if (i) - return (i); + return i; a = ca->obj; b = cb->obj; switch (ca->type) { case ADDED_DATA: i = (a->length - b->length); if (i) - return (i); - return (memcmp(a->data, b->data, (size_t)a->length)); + return i; + return memcmp(a->data, b->data, (size_t)a->length); case ADDED_SNAME: if (a->sn == NULL) - return (-1); + return -1; else if (b->sn == NULL) - return (1); + return 1; else - return (strcmp(a->sn, b->sn)); + return strcmp(a->sn, b->sn); case ADDED_LNAME: if (a->ln == NULL) - return (-1); + return -1; else if (b->ln == NULL) - return (1); + return 1; else - return (strcmp(a->ln, b->ln)); + return strcmp(a->ln, b->ln); case ADDED_NID: - return (a->nid - b->nid); + return a->nid - b->nid; default: /* abort(); */ return 0; @@ -126,9 +126,9 @@ static int added_obj_cmp(const ADDED_OBJ *ca, const ADDED_OBJ *cb) static int init_added(void) { if (added != NULL) - return (1); + return 1; added = lh_ADDED_OBJ_new(added_obj_hash, added_obj_cmp); - return (added != NULL); + return added != NULL; } static void cleanup1_doall(ADDED_OBJ *a) @@ -168,7 +168,7 @@ int OBJ_new_nid(int num) i = new_nid; new_nid += num; - return (i); + return i; } int OBJ_add_object(const ASN1_OBJECT *obj) @@ -179,7 +179,7 @@ int OBJ_add_object(const ASN1_OBJECT *obj) if (added == NULL) if (!init_added()) - return (0); + return 0; if ((o = OBJ_dup(obj)) == NULL) goto err; if ((ao[ADDED_NID] = OPENSSL_malloc(sizeof(*ao[0]))) == NULL) @@ -207,13 +207,13 @@ int OBJ_add_object(const ASN1_OBJECT *obj) ~(ASN1_OBJECT_FLAG_DYNAMIC | ASN1_OBJECT_FLAG_DYNAMIC_STRINGS | ASN1_OBJECT_FLAG_DYNAMIC_DATA); - return (o->nid); + return o->nid; err2: OBJerr(OBJ_F_OBJ_ADD_OBJECT, ERR_R_MALLOC_FAILURE); err: for (i = ADDED_DATA; i <= ADDED_NID; i++) OPENSSL_free(ao[i]); - ASN1_OBJECT_free(o); + OPENSSL_free(o); return NID_undef; } @@ -225,21 +225,21 @@ ASN1_OBJECT *OBJ_nid2obj(int n) if ((n >= 0) && (n < NUM_NID)) { if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) { OBJerr(OBJ_F_OBJ_NID2OBJ, OBJ_R_UNKNOWN_NID); - return (NULL); + return NULL; } - return ((ASN1_OBJECT *)&(nid_objs[n])); + return (ASN1_OBJECT *)&(nid_objs[n]); } else if (added == NULL) - return (NULL); + return NULL; else { ad.type = ADDED_NID; ad.obj = &ob; ob.nid = n; adp = lh_ADDED_OBJ_retrieve(added, &ad); if (adp != NULL) - return (adp->obj); + return adp->obj; else { OBJerr(OBJ_F_OBJ_NID2OBJ, OBJ_R_UNKNOWN_NID); - return (NULL); + return NULL; } } } @@ -252,21 +252,21 @@ const char *OBJ_nid2sn(int n) if ((n >= 0) && (n < NUM_NID)) { if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) { OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID); - return (NULL); + return NULL; } - return (nid_objs[n].sn); + return nid_objs[n].sn; } else if (added == NULL) - return (NULL); + return NULL; else { ad.type = ADDED_NID; ad.obj = &ob; ob.nid = n; adp = lh_ADDED_OBJ_retrieve(added, &ad); if (adp != NULL) - return (adp->obj->sn); + return adp->obj->sn; else { OBJerr(OBJ_F_OBJ_NID2SN, OBJ_R_UNKNOWN_NID); - return (NULL); + return NULL; } } } @@ -279,21 +279,21 @@ const char *OBJ_nid2ln(int n) if ((n >= 0) && (n < NUM_NID)) { if ((n != NID_undef) && (nid_objs[n].nid == NID_undef)) { OBJerr(OBJ_F_OBJ_NID2LN, OBJ_R_UNKNOWN_NID); - return (NULL); + return NULL; } - return (nid_objs[n].ln); + return nid_objs[n].ln; } else if (added == NULL) - return (NULL); + return NULL; else { ad.type = ADDED_NID; ad.obj = &ob; ob.nid = n; adp = lh_ADDED_OBJ_retrieve(added, &ad); if (adp != NULL) - return (adp->obj->ln); + return adp->obj->ln; else { OBJerr(OBJ_F_OBJ_NID2LN, OBJ_R_UNKNOWN_NID); - return (NULL); + return NULL; } } } @@ -306,10 +306,10 @@ static int obj_cmp(const ASN1_OBJECT *const *ap, const unsigned int *bp) j = (a->length - b->length); if (j) - return (j); + return j; if (a->length == 0) return 0; - return (memcmp(a->data, b->data, a->length)); + return memcmp(a->data, b->data, a->length); } IMPLEMENT_OBJ_BSEARCH_CMP_FN(const ASN1_OBJECT *, unsigned int, obj); @@ -320,9 +320,9 @@ int OBJ_obj2nid(const ASN1_OBJECT *a) ADDED_OBJ ad, *adp; if (a == NULL) - return (NID_undef); + return NID_undef; if (a->nid != 0) - return (a->nid); + return a->nid; if (a->length == 0) return NID_undef; @@ -332,12 +332,12 @@ int OBJ_obj2nid(const ASN1_OBJECT *a) ad.obj = (ASN1_OBJECT *)a; /* XXX: ugly but harmless */ adp = lh_ADDED_OBJ_retrieve(added, &ad); if (adp != NULL) - return (adp->obj->nid); + return adp->obj->nid; } op = OBJ_bsearch_obj(&a, obj_objs, NUM_OBJ); if (op == NULL) - return (NID_undef); - return (nid_objs[*op].nid); + return NID_undef; + return nid_objs[*op].nid; } /* @@ -404,7 +404,7 @@ int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name) buf[0] = '\0'; if ((a == NULL) || (a->data == NULL)) - return (0); + return 0; if (!no_name && (nid = OBJ_obj2nid(a)) != NID_undef) { const char *s; @@ -548,12 +548,12 @@ int OBJ_ln2nid(const char *s) ad.obj = &o; adp = lh_ADDED_OBJ_retrieve(added, &ad); if (adp != NULL) - return (adp->obj->nid); + return adp->obj->nid; } op = OBJ_bsearch_ln(&oo, ln_objs, NUM_LN); if (op == NULL) - return (NID_undef); - return (nid_objs[*op].nid); + return NID_undef; + return nid_objs[*op].nid; } int OBJ_sn2nid(const char *s) @@ -569,12 +569,12 @@ int OBJ_sn2nid(const char *s) ad.obj = &o; adp = lh_ADDED_OBJ_retrieve(added, &ad); if (adp != NULL) - return (adp->obj->nid); + return adp->obj->nid; } op = OBJ_bsearch_sn(&oo, sn_objs, NUM_SN); if (op == NULL) - return (NID_undef); - return (nid_objs[*op].nid); + return NID_undef; + return nid_objs[*op].nid; } const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, @@ -593,7 +593,7 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base_, int num, const char *p = NULL; if (num == 0) - return (NULL); + return NULL; l = 0; h = num; while (l < h) { @@ -629,7 +629,7 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base_, int num, i--; p = &(base[i * size]); } - return (p); + return p; } /* @@ -646,26 +646,26 @@ int OBJ_create_objects(BIO *in) s = o = NULL; i = BIO_gets(in, buf, 512); if (i <= 0) - return (num); + return num; buf[i - 1] = '\0'; - if (!isalnum((unsigned char)buf[0])) - return (num); + if (!ossl_isalnum(buf[0])) + return num; o = s = buf; - while (isdigit((unsigned char)*s) || (*s == '.')) + while (ossl_isdigit(*s) || *s == '.') s++; if (*s != '\0') { *(s++) = '\0'; - while (isspace((unsigned char)*s)) + while (ossl_isspace(*s)) s++; if (*s == '\0') { s = NULL; } else { l = s; - while ((*l != '\0') && !isspace((unsigned char)*l)) + while (*l != '\0' && !ossl_isspace(*l)) l++; if (*l != '\0') { *(l++) = '\0'; - while (isspace((unsigned char)*l)) + while (ossl_isspace(*l)) l++; if (*l == '\0') { l = NULL; @@ -680,10 +680,9 @@ int OBJ_create_objects(BIO *in) if (*o == '\0') return num; if (!OBJ_create(o, s, l)) - return (num); + return num; num++; } - /* return(num); */ } int OBJ_create(const char *oid, const char *sn, const char *ln) diff --git a/crypto/objects/obj_dat.h b/crypto/objects/obj_dat.h index e1fc64f7..61b12bf0 100644 --- a/crypto/objects/obj_dat.h +++ b/crypto/objects/obj_dat.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/obj_dat.pl * - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,7 +10,7 @@ */ /* Serialized OID's */ -static const unsigned char so[6765] = { +static const unsigned char so[7342] = { 0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 0] OBJ_rsadsi */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 6] OBJ_pkcs */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02, /* [ 13] OBJ_md2 */ @@ -961,9 +961,80 @@ static const unsigned char so[6765] = { 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x10,0x01,0x13, /* [ 6731] OBJ_id_smime_ct_contentCollection */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x10,0x01,0x17, /* [ 6742] OBJ_id_smime_ct_authEnvelopedData */ 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x10,0x01,0x1C, /* [ 6753] OBJ_id_ct_xml */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x01, /* [ 6764] OBJ_aria_128_ecb */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x02, /* [ 6773] OBJ_aria_128_cbc */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x03, /* [ 6782] OBJ_aria_128_cfb128 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x04, /* [ 6791] OBJ_aria_128_ofb128 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x05, /* [ 6800] OBJ_aria_128_ctr */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x06, /* [ 6809] OBJ_aria_192_ecb */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x07, /* [ 6818] OBJ_aria_192_cbc */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x08, /* [ 6827] OBJ_aria_192_cfb128 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x09, /* [ 6836] OBJ_aria_192_ofb128 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x0A, /* [ 6845] OBJ_aria_192_ctr */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x0B, /* [ 6854] OBJ_aria_256_ecb */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x0C, /* [ 6863] OBJ_aria_256_cbc */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x0D, /* [ 6872] OBJ_aria_256_cfb128 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x0E, /* [ 6881] OBJ_aria_256_ofb128 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x0F, /* [ 6890] OBJ_aria_256_ctr */ + 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x09,0x10,0x02,0x2F, /* [ 6899] OBJ_id_smime_aa_signingCertificateV2 */ + 0x2B,0x65,0x70, /* [ 6910] OBJ_ED25519 */ + 0x2B,0x65,0x71, /* [ 6913] OBJ_ED448 */ + 0x55,0x04,0x61, /* [ 6916] OBJ_organizationIdentifier */ + 0x55,0x04,0x62, /* [ 6919] OBJ_countryCode3c */ + 0x55,0x04,0x63, /* [ 6922] OBJ_countryCode3n */ + 0x55,0x04,0x64, /* [ 6925] OBJ_dnsName */ + 0x2B,0x24,0x08,0x03,0x03, /* [ 6928] OBJ_x509ExtAdmission */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x05, /* [ 6933] OBJ_sha512_224 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x06, /* [ 6942] OBJ_sha512_256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x07, /* [ 6951] OBJ_sha3_224 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x08, /* [ 6960] OBJ_sha3_256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x09, /* [ 6969] OBJ_sha3_384 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x0A, /* [ 6978] OBJ_sha3_512 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x0B, /* [ 6987] OBJ_shake128 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x0C, /* [ 6996] OBJ_shake256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x0D, /* [ 7005] OBJ_hmac_sha3_224 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x0E, /* [ 7014] OBJ_hmac_sha3_256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x0F, /* [ 7023] OBJ_hmac_sha3_384 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x02,0x10, /* [ 7032] OBJ_hmac_sha3_512 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x03, /* [ 7041] OBJ_dsa_with_SHA384 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x04, /* [ 7050] OBJ_dsa_with_SHA512 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x05, /* [ 7059] OBJ_dsa_with_SHA3_224 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x06, /* [ 7068] OBJ_dsa_with_SHA3_256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x07, /* [ 7077] OBJ_dsa_with_SHA3_384 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x08, /* [ 7086] OBJ_dsa_with_SHA3_512 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x09, /* [ 7095] OBJ_ecdsa_with_SHA3_224 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x0A, /* [ 7104] OBJ_ecdsa_with_SHA3_256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x0B, /* [ 7113] OBJ_ecdsa_with_SHA3_384 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x0C, /* [ 7122] OBJ_ecdsa_with_SHA3_512 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x0D, /* [ 7131] OBJ_RSA_SHA3_224 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x0E, /* [ 7140] OBJ_RSA_SHA3_256 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x0F, /* [ 7149] OBJ_RSA_SHA3_384 */ + 0x60,0x86,0x48,0x01,0x65,0x03,0x04,0x03,0x10, /* [ 7158] OBJ_RSA_SHA3_512 */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x25, /* [ 7167] OBJ_aria_128_ccm */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x26, /* [ 7176] OBJ_aria_192_ccm */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x27, /* [ 7185] OBJ_aria_256_ccm */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x22, /* [ 7194] OBJ_aria_128_gcm */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x23, /* [ 7203] OBJ_aria_192_gcm */ + 0x2A,0x83,0x1A,0x8C,0x9A,0x6E,0x01,0x01,0x24, /* [ 7212] OBJ_aria_256_gcm */ + 0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x1B, /* [ 7221] OBJ_cmcCA */ + 0x2B,0x06,0x01,0x05,0x05,0x07,0x03,0x1C, /* [ 7229] OBJ_cmcRA */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x01, /* [ 7237] OBJ_sm4_ecb */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x02, /* [ 7245] OBJ_sm4_cbc */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x03, /* [ 7253] OBJ_sm4_ofb128 */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x05, /* [ 7261] OBJ_sm4_cfb1 */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x04, /* [ 7269] OBJ_sm4_cfb128 */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x06, /* [ 7277] OBJ_sm4_cfb8 */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x68,0x07, /* [ 7285] OBJ_sm4_ctr */ + 0x2A,0x81,0x1C, /* [ 7293] OBJ_ISO_CN */ + 0x2A,0x81,0x1C,0xCF,0x55, /* [ 7296] OBJ_oscca */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01, /* [ 7301] OBJ_sm_scheme */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x83,0x11, /* [ 7307] OBJ_sm3 */ + 0x2A,0x81,0x1C,0xCF,0x55,0x01,0x83,0x78, /* [ 7315] OBJ_sm3WithRSAEncryption */ + 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x0F, /* [ 7323] OBJ_sha512_224WithRSAEncryption */ + 0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x10, /* [ 7332] OBJ_sha512_256WithRSAEncryption */ }; -#define NUM_NID 1061 +#define NUM_NID 1147 static const ASN1_OBJECT nid_objs[NUM_NID] = { {"UNDEF", "undefined", NID_undef}, {"rsadsi", "RSA Data Security, Inc.", NID_rsadsi, 6, &so[0]}, @@ -1938,7 +2009,7 @@ static const ASN1_OBJECT nid_objs[NUM_NID] = { {"CAMELLIA-256-CCM", "camellia-256-ccm", NID_camellia_256_ccm, 8, &so[6330]}, {"CAMELLIA-256-CTR", "camellia-256-ctr", NID_camellia_256_ctr, 8, &so[6338]}, {"CAMELLIA-256-CMAC", "camellia-256-cmac", NID_camellia_256_cmac, 8, &so[6346]}, - {"id-scrypt", "id-scrypt", NID_id_scrypt, 9, &so[6354]}, + {"id-scrypt", "scrypt", NID_id_scrypt, 9, &so[6354]}, {"id-tc26", "id-tc26", NID_id_tc26, 5, &so[6363]}, {"gost89-cnt-12", "gost89-cnt-12", NID_gost89_cnt_12}, {"gost-mac-12", "gost-mac-12", NID_gost_mac_12}, @@ -2026,9 +2097,95 @@ static const ASN1_OBJECT nid_objs[NUM_NID] = { {"id-smime-ct-contentCollection", "id-smime-ct-contentCollection", NID_id_smime_ct_contentCollection, 11, &so[6731]}, {"id-smime-ct-authEnvelopedData", "id-smime-ct-authEnvelopedData", NID_id_smime_ct_authEnvelopedData, 11, &so[6742]}, {"id-ct-xml", "id-ct-xml", NID_id_ct_xml, 11, &so[6753]}, + {"Poly1305", "poly1305", NID_poly1305}, + {"SipHash", "siphash", NID_siphash}, + {"KxANY", "kx-any", NID_kx_any}, + {"AuthANY", "auth-any", NID_auth_any}, + {"ARIA-128-ECB", "aria-128-ecb", NID_aria_128_ecb, 9, &so[6764]}, + {"ARIA-128-CBC", "aria-128-cbc", NID_aria_128_cbc, 9, &so[6773]}, + {"ARIA-128-CFB", "aria-128-cfb", NID_aria_128_cfb128, 9, &so[6782]}, + {"ARIA-128-OFB", "aria-128-ofb", NID_aria_128_ofb128, 9, &so[6791]}, + {"ARIA-128-CTR", "aria-128-ctr", NID_aria_128_ctr, 9, &so[6800]}, + {"ARIA-192-ECB", "aria-192-ecb", NID_aria_192_ecb, 9, &so[6809]}, + {"ARIA-192-CBC", "aria-192-cbc", NID_aria_192_cbc, 9, &so[6818]}, + {"ARIA-192-CFB", "aria-192-cfb", NID_aria_192_cfb128, 9, &so[6827]}, + {"ARIA-192-OFB", "aria-192-ofb", NID_aria_192_ofb128, 9, &so[6836]}, + {"ARIA-192-CTR", "aria-192-ctr", NID_aria_192_ctr, 9, &so[6845]}, + {"ARIA-256-ECB", "aria-256-ecb", NID_aria_256_ecb, 9, &so[6854]}, + {"ARIA-256-CBC", "aria-256-cbc", NID_aria_256_cbc, 9, &so[6863]}, + {"ARIA-256-CFB", "aria-256-cfb", NID_aria_256_cfb128, 9, &so[6872]}, + {"ARIA-256-OFB", "aria-256-ofb", NID_aria_256_ofb128, 9, &so[6881]}, + {"ARIA-256-CTR", "aria-256-ctr", NID_aria_256_ctr, 9, &so[6890]}, + {"ARIA-128-CFB1", "aria-128-cfb1", NID_aria_128_cfb1}, + {"ARIA-192-CFB1", "aria-192-cfb1", NID_aria_192_cfb1}, + {"ARIA-256-CFB1", "aria-256-cfb1", NID_aria_256_cfb1}, + {"ARIA-128-CFB8", "aria-128-cfb8", NID_aria_128_cfb8}, + {"ARIA-192-CFB8", "aria-192-cfb8", NID_aria_192_cfb8}, + {"ARIA-256-CFB8", "aria-256-cfb8", NID_aria_256_cfb8}, + {"id-smime-aa-signingCertificateV2", "id-smime-aa-signingCertificateV2", NID_id_smime_aa_signingCertificateV2, 11, &so[6899]}, + {"ED25519", "ED25519", NID_ED25519, 3, &so[6910]}, + {"ED448", "ED448", NID_ED448, 3, &so[6913]}, + {"organizationIdentifier", "organizationIdentifier", NID_organizationIdentifier, 3, &so[6916]}, + {"c3", "countryCode3c", NID_countryCode3c, 3, &so[6919]}, + {"n3", "countryCode3n", NID_countryCode3n, 3, &so[6922]}, + {"dnsName", "dnsName", NID_dnsName, 3, &so[6925]}, + {"x509ExtAdmission", "Professional Information or basis for Admission", NID_x509ExtAdmission, 5, &so[6928]}, + {"SHA512-224", "sha512-224", NID_sha512_224, 9, &so[6933]}, + {"SHA512-256", "sha512-256", NID_sha512_256, 9, &so[6942]}, + {"SHA3-224", "sha3-224", NID_sha3_224, 9, &so[6951]}, + {"SHA3-256", "sha3-256", NID_sha3_256, 9, &so[6960]}, + {"SHA3-384", "sha3-384", NID_sha3_384, 9, &so[6969]}, + {"SHA3-512", "sha3-512", NID_sha3_512, 9, &so[6978]}, + {"SHAKE128", "shake128", NID_shake128, 9, &so[6987]}, + {"SHAKE256", "shake256", NID_shake256, 9, &so[6996]}, + {"id-hmacWithSHA3-224", "hmac-sha3-224", NID_hmac_sha3_224, 9, &so[7005]}, + {"id-hmacWithSHA3-256", "hmac-sha3-256", NID_hmac_sha3_256, 9, &so[7014]}, + {"id-hmacWithSHA3-384", "hmac-sha3-384", NID_hmac_sha3_384, 9, &so[7023]}, + {"id-hmacWithSHA3-512", "hmac-sha3-512", NID_hmac_sha3_512, 9, &so[7032]}, + {"id-dsa-with-sha384", "dsa_with_SHA384", NID_dsa_with_SHA384, 9, &so[7041]}, + {"id-dsa-with-sha512", "dsa_with_SHA512", NID_dsa_with_SHA512, 9, &so[7050]}, + {"id-dsa-with-sha3-224", "dsa_with_SHA3-224", NID_dsa_with_SHA3_224, 9, &so[7059]}, + {"id-dsa-with-sha3-256", "dsa_with_SHA3-256", NID_dsa_with_SHA3_256, 9, &so[7068]}, + {"id-dsa-with-sha3-384", "dsa_with_SHA3-384", NID_dsa_with_SHA3_384, 9, &so[7077]}, + {"id-dsa-with-sha3-512", "dsa_with_SHA3-512", NID_dsa_with_SHA3_512, 9, &so[7086]}, + {"id-ecdsa-with-sha3-224", "ecdsa_with_SHA3-224", NID_ecdsa_with_SHA3_224, 9, &so[7095]}, + {"id-ecdsa-with-sha3-256", "ecdsa_with_SHA3-256", NID_ecdsa_with_SHA3_256, 9, &so[7104]}, + {"id-ecdsa-with-sha3-384", "ecdsa_with_SHA3-384", NID_ecdsa_with_SHA3_384, 9, &so[7113]}, + {"id-ecdsa-with-sha3-512", "ecdsa_with_SHA3-512", NID_ecdsa_with_SHA3_512, 9, &so[7122]}, + {"id-rsassa-pkcs1-v1_5-with-sha3-224", "RSA-SHA3-224", NID_RSA_SHA3_224, 9, &so[7131]}, + {"id-rsassa-pkcs1-v1_5-with-sha3-256", "RSA-SHA3-256", NID_RSA_SHA3_256, 9, &so[7140]}, + {"id-rsassa-pkcs1-v1_5-with-sha3-384", "RSA-SHA3-384", NID_RSA_SHA3_384, 9, &so[7149]}, + {"id-rsassa-pkcs1-v1_5-with-sha3-512", "RSA-SHA3-512", NID_RSA_SHA3_512, 9, &so[7158]}, + {"ARIA-128-CCM", "aria-128-ccm", NID_aria_128_ccm, 9, &so[7167]}, + {"ARIA-192-CCM", "aria-192-ccm", NID_aria_192_ccm, 9, &so[7176]}, + {"ARIA-256-CCM", "aria-256-ccm", NID_aria_256_ccm, 9, &so[7185]}, + {"ARIA-128-GCM", "aria-128-gcm", NID_aria_128_gcm, 9, &so[7194]}, + {"ARIA-192-GCM", "aria-192-gcm", NID_aria_192_gcm, 9, &so[7203]}, + {"ARIA-256-GCM", "aria-256-gcm", NID_aria_256_gcm, 9, &so[7212]}, + {"ffdhe2048", "ffdhe2048", NID_ffdhe2048}, + {"ffdhe3072", "ffdhe3072", NID_ffdhe3072}, + {"ffdhe4096", "ffdhe4096", NID_ffdhe4096}, + {"ffdhe6144", "ffdhe6144", NID_ffdhe6144}, + {"ffdhe8192", "ffdhe8192", NID_ffdhe8192}, + {"cmcCA", "CMC Certificate Authority", NID_cmcCA, 8, &so[7221]}, + {"cmcRA", "CMC Registration Authority", NID_cmcRA, 8, &so[7229]}, + {"SM4-ECB", "sm4-ecb", NID_sm4_ecb, 8, &so[7237]}, + {"SM4-CBC", "sm4-cbc", NID_sm4_cbc, 8, &so[7245]}, + {"SM4-OFB", "sm4-ofb", NID_sm4_ofb128, 8, &so[7253]}, + {"SM4-CFB1", "sm4-cfb1", NID_sm4_cfb1, 8, &so[7261]}, + {"SM4-CFB", "sm4-cfb", NID_sm4_cfb128, 8, &so[7269]}, + {"SM4-CFB8", "sm4-cfb8", NID_sm4_cfb8, 8, &so[7277]}, + {"SM4-CTR", "sm4-ctr", NID_sm4_ctr, 8, &so[7285]}, + {"ISO-CN", "ISO CN Member Body", NID_ISO_CN, 3, &so[7293]}, + {"oscca", "oscca", NID_oscca, 5, &so[7296]}, + {"sm-scheme", "sm-scheme", NID_sm_scheme, 6, &so[7301]}, + {"SM3", "sm3", NID_sm3, 8, &so[7307]}, + {"RSA-SM3", "sm3WithRSAEncryption", NID_sm3WithRSAEncryption, 8, &so[7315]}, + {"RSA-SHA512/224", "sha512-224WithRSAEncryption", NID_sha512_224WithRSAEncryption, 9, &so[7323]}, + {"RSA-SHA512/256", "sha512-256WithRSAEncryption", NID_sha512_256WithRSAEncryption, 9, &so[7332]}, }; -#define NUM_SN 1052 +#define NUM_SN 1138 static const unsigned int sn_objs[NUM_SN] = { 364, /* "AD_DVCS" */ 419, /* "AES-128-CBC" */ @@ -2063,6 +2220,34 @@ static const unsigned int sn_objs[NUM_SN] = { 960, /* "AES-256-OCB" */ 428, /* "AES-256-OFB" */ 914, /* "AES-256-XTS" */ + 1066, /* "ARIA-128-CBC" */ + 1120, /* "ARIA-128-CCM" */ + 1067, /* "ARIA-128-CFB" */ + 1080, /* "ARIA-128-CFB1" */ + 1083, /* "ARIA-128-CFB8" */ + 1069, /* "ARIA-128-CTR" */ + 1065, /* "ARIA-128-ECB" */ + 1123, /* "ARIA-128-GCM" */ + 1068, /* "ARIA-128-OFB" */ + 1071, /* "ARIA-192-CBC" */ + 1121, /* "ARIA-192-CCM" */ + 1072, /* "ARIA-192-CFB" */ + 1081, /* "ARIA-192-CFB1" */ + 1084, /* "ARIA-192-CFB8" */ + 1074, /* "ARIA-192-CTR" */ + 1070, /* "ARIA-192-ECB" */ + 1124, /* "ARIA-192-GCM" */ + 1073, /* "ARIA-192-OFB" */ + 1076, /* "ARIA-256-CBC" */ + 1122, /* "ARIA-256-CCM" */ + 1077, /* "ARIA-256-CFB" */ + 1082, /* "ARIA-256-CFB1" */ + 1085, /* "ARIA-256-CFB8" */ + 1079, /* "ARIA-256-CTR" */ + 1075, /* "ARIA-256-ECB" */ + 1125, /* "ARIA-256-GCM" */ + 1078, /* "ARIA-256-OFB" */ + 1064, /* "AuthANY" */ 1049, /* "AuthDSS" */ 1047, /* "AuthECDSA" */ 1050, /* "AuthGOST01" */ @@ -2145,6 +2330,8 @@ static const unsigned int sn_objs[NUM_SN] = { 70, /* "DSA-SHA1-old" */ 67, /* "DSA-old" */ 297, /* "DVCS" */ + 1087, /* "ED25519" */ + 1088, /* "ED448" */ 99, /* "GN" */ 1036, /* "HKDF" */ 855, /* "HMAC" */ @@ -2157,10 +2344,12 @@ static const unsigned int sn_objs[NUM_SN] = { 46, /* "IDEA-OFB" */ 1004, /* "INN" */ 181, /* "ISO" */ + 1140, /* "ISO-CN" */ 183, /* "ISO-US" */ 645, /* "ITU-T" */ 646, /* "JOINT-ISO-ITU-T" */ 773, /* "KISA" */ + 1063, /* "KxANY" */ 1039, /* "KxDHE" */ 1041, /* "KxDHE-PSK" */ 1038, /* "KxECDHE" */ @@ -2208,6 +2397,7 @@ static const unsigned int sn_objs[NUM_SN] = { 162, /* "PBMAC1" */ 127, /* "PKIX" */ 935, /* "PSPECIFIED" */ + 1061, /* "Poly1305" */ 98, /* "RC2-40-CBC" */ 166, /* "RC2-64-CBC" */ 37, /* "RC2-CBC" */ @@ -2236,6 +2426,9 @@ static const unsigned int sn_objs[NUM_SN] = { 668, /* "RSA-SHA256" */ 669, /* "RSA-SHA384" */ 670, /* "RSA-SHA512" */ + 1145, /* "RSA-SHA512/224" */ + 1146, /* "RSA-SHA512/256" */ + 1144, /* "RSA-SM3" */ 919, /* "RSAES-OAEP" */ 912, /* "RSASSA-PSS" */ 777, /* "SEED-CBC" */ @@ -2246,14 +2439,31 @@ static const unsigned int sn_objs[NUM_SN] = { 64, /* "SHA1" */ 675, /* "SHA224" */ 672, /* "SHA256" */ + 1096, /* "SHA3-224" */ + 1097, /* "SHA3-256" */ + 1098, /* "SHA3-384" */ + 1099, /* "SHA3-512" */ 673, /* "SHA384" */ 674, /* "SHA512" */ + 1094, /* "SHA512-224" */ + 1095, /* "SHA512-256" */ + 1100, /* "SHAKE128" */ + 1101, /* "SHAKE256" */ + 1143, /* "SM3" */ + 1134, /* "SM4-CBC" */ + 1137, /* "SM4-CFB" */ + 1136, /* "SM4-CFB1" */ + 1138, /* "SM4-CFB8" */ + 1139, /* "SM4-CTR" */ + 1133, /* "SM4-ECB" */ + 1135, /* "SM4-OFB" */ 188, /* "SMIME" */ 167, /* "SMIME-CAPS" */ 100, /* "SN" */ 1006, /* "SNILS" */ 16, /* "ST" */ 143, /* "SXNetID" */ + 1062, /* "SipHash" */ 1021, /* "TLS1-PRF" */ 458, /* "UID" */ 0, /* "UNDEF" */ @@ -2323,6 +2533,7 @@ static const unsigned int sn_objs[NUM_SN] = { 696, /* "c2tnb239v3" */ 701, /* "c2tnb359v1" */ 703, /* "c2tnb431r1" */ + 1090, /* "c3" */ 881, /* "cACertificate" */ 483, /* "cNAMERecord" */ 179, /* "caIssuers" */ @@ -2339,6 +2550,8 @@ static const unsigned int sn_objs[NUM_SN] = { 407, /* "characteristic-two-field" */ 395, /* "clearance" */ 130, /* "clientAuth" */ + 1131, /* "cmcCA" */ + 1132, /* "cmcRA" */ 131, /* "codeSigning" */ 50, /* "contentType" */ 53, /* "countersignature" */ @@ -2379,6 +2592,7 @@ static const unsigned int sn_objs[NUM_SN] = { 887, /* "distinguishedName" */ 892, /* "dmdName" */ 174, /* "dnQualifier" */ + 1092, /* "dnsName" */ 447, /* "document" */ 471, /* "documentAuthor" */ 468, /* "documentIdentifier" */ @@ -2409,6 +2623,11 @@ static const unsigned int sn_objs[NUM_SN] = { 372, /* "extendedStatus" */ 867, /* "facsimileTelephoneNumber" */ 462, /* "favouriteDrink" */ + 1126, /* "ffdhe2048" */ + 1127, /* "ffdhe3072" */ + 1128, /* "ffdhe4096" */ + 1129, /* "ffdhe6144" */ + 1130, /* "ffdhe8192" */ 857, /* "freshestCRL" */ 453, /* "friendlyCountry" */ 490, /* "friendlyCountryName" */ @@ -2548,9 +2767,23 @@ static const unsigned int sn_objs[NUM_SN] = { 331, /* "id-cmc-transactionId" */ 787, /* "id-ct-asciiTextWithCRLF" */ 1060, /* "id-ct-xml" */ + 1108, /* "id-dsa-with-sha3-224" */ + 1109, /* "id-dsa-with-sha3-256" */ + 1110, /* "id-dsa-with-sha3-384" */ + 1111, /* "id-dsa-with-sha3-512" */ + 1106, /* "id-dsa-with-sha384" */ + 1107, /* "id-dsa-with-sha512" */ 408, /* "id-ecPublicKey" */ + 1112, /* "id-ecdsa-with-sha3-224" */ + 1113, /* "id-ecdsa-with-sha3-256" */ + 1114, /* "id-ecdsa-with-sha3-384" */ + 1115, /* "id-ecdsa-with-sha3-512" */ 508, /* "id-hex-multipart-message" */ 507, /* "id-hex-partial-message" */ + 1102, /* "id-hmacWithSHA3-224" */ + 1103, /* "id-hmacWithSHA3-256" */ + 1104, /* "id-hmacWithSHA3-384" */ + 1105, /* "id-hmacWithSHA3-512" */ 260, /* "id-it" */ 302, /* "id-it-caKeyUpdateInfo" */ 298, /* "id-it-caProtEncCert" */ @@ -2617,6 +2850,10 @@ static const unsigned int sn_objs[NUM_SN] = { 314, /* "id-regInfo" */ 322, /* "id-regInfo-certReq" */ 321, /* "id-regInfo-utf8Pairs" */ + 1116, /* "id-rsassa-pkcs1-v1_5-with-sha3-224" */ + 1117, /* "id-rsassa-pkcs1-v1_5-with-sha3-256" */ + 1118, /* "id-rsassa-pkcs1-v1_5-with-sha3-384" */ + 1119, /* "id-rsassa-pkcs1-v1_5-with-sha3-512" */ 973, /* "id-scrypt" */ 512, /* "id-set" */ 191, /* "id-smime-aa" */ @@ -2647,6 +2884,7 @@ static const unsigned int sn_objs[NUM_SN] = { 213, /* "id-smime-aa-securityLabel" */ 239, /* "id-smime-aa-signatureType" */ 223, /* "id-smime-aa-signingCertificate" */ + 1086, /* "id-smime-aa-signingCertificateV2" */ 224, /* "id-smime-aa-smimeEncryptCerts" */ 225, /* "id-smime-aa-timeStampToken" */ 192, /* "id-smime-alg" */ @@ -2760,6 +2998,7 @@ static const unsigned int sn_objs[NUM_SN] = { 137, /* "msSGC" */ 648, /* "msSmartcardLogin" */ 649, /* "msUPN" */ + 1091, /* "n3" */ 481, /* "nSRecord" */ 173, /* "name" */ 666, /* "nameConstraints" */ @@ -2778,7 +3017,9 @@ static const unsigned int sn_objs[NUM_SN] = { 139, /* "nsSGC" */ 77, /* "nsSslServerName" */ 681, /* "onBasis" */ + 1089, /* "organizationIdentifier" */ 491, /* "organizationalStatus" */ + 1141, /* "oscca" */ 475, /* "otherMailbox" */ 876, /* "owner" */ 489, /* "pagerTelephoneNumber" */ @@ -3033,6 +3274,7 @@ static const unsigned int sn_objs[NUM_SN] = { 52, /* "signingTime" */ 454, /* "simpleSecurityObject" */ 496, /* "singleLevelQuality" */ + 1142, /* "sm-scheme" */ 387, /* "snmpv2" */ 660, /* "street" */ 85, /* "subjectAltName" */ @@ -3082,9 +3324,10 @@ static const unsigned int sn_objs[NUM_SN] = { 503, /* "x500UniqueIdentifier" */ 158, /* "x509Certificate" */ 160, /* "x509Crl" */ + 1093, /* "x509ExtAdmission" */ }; -#define NUM_LN 1052 +#define NUM_LN 1138 static const unsigned int ln_objs[NUM_LN] = { 363, /* "AD Time Stamping" */ 405, /* "ANSI X9.62" */ @@ -3096,6 +3339,8 @@ static const unsigned int ln_objs[NUM_LN] = { 285, /* "Biometric Info" */ 179, /* "CA Issuers" */ 785, /* "CA Repository" */ + 1131, /* "CMC Certificate Authority" */ + 1132, /* "CMC Registration Authority" */ 954, /* "CT Certificate SCTs" */ 952, /* "CT Precertificate Poison" */ 951, /* "CT Precertificate SCTs" */ @@ -3107,6 +3352,8 @@ static const unsigned int ln_objs[NUM_LN] = { 382, /* "Directory" */ 392, /* "Domain" */ 132, /* "E-mail Protection" */ + 1087, /* "ED25519" */ + 1088, /* "ED448" */ 389, /* "Enterprises" */ 384, /* "Experimental" */ 372, /* "Extended OCSP Status" */ @@ -3149,6 +3396,7 @@ static const unsigned int ln_objs[NUM_LN] = { 294, /* "IPSec End System" */ 295, /* "IPSec Tunnel" */ 296, /* "IPSec User" */ + 1140, /* "ISO CN Member Body" */ 182, /* "ISO Member Body" */ 183, /* "ISO US Member Body" */ 667, /* "Independent" */ @@ -3200,9 +3448,14 @@ static const unsigned int ln_objs[NUM_LN] = { 164, /* "Policy Qualifier CPS" */ 165, /* "Policy Qualifier User Notice" */ 385, /* "Private" */ + 1093, /* "Professional Information or basis for Admission" */ 663, /* "Proxy Certificate Information" */ 1, /* "RSA Data Security, Inc." */ 2, /* "RSA Data Security, Inc. PKCS" */ + 1116, /* "RSA-SHA3-224" */ + 1117, /* "RSA-SHA3-256" */ + 1118, /* "RSA-SHA3-384" */ + 1119, /* "RSA-SHA3-512" */ 188, /* "S/MIME" */ 167, /* "S/MIME Capabilities" */ 1006, /* "SNILS" */ @@ -3303,9 +3556,37 @@ static const unsigned int ln_objs[NUM_LN] = { 428, /* "aes-256-ofb" */ 914, /* "aes-256-xts" */ 376, /* "algorithm" */ + 1066, /* "aria-128-cbc" */ + 1120, /* "aria-128-ccm" */ + 1067, /* "aria-128-cfb" */ + 1080, /* "aria-128-cfb1" */ + 1083, /* "aria-128-cfb8" */ + 1069, /* "aria-128-ctr" */ + 1065, /* "aria-128-ecb" */ + 1123, /* "aria-128-gcm" */ + 1068, /* "aria-128-ofb" */ + 1071, /* "aria-192-cbc" */ + 1121, /* "aria-192-ccm" */ + 1072, /* "aria-192-cfb" */ + 1081, /* "aria-192-cfb1" */ + 1084, /* "aria-192-cfb8" */ + 1074, /* "aria-192-ctr" */ + 1070, /* "aria-192-ecb" */ + 1124, /* "aria-192-gcm" */ + 1073, /* "aria-192-ofb" */ + 1076, /* "aria-256-cbc" */ + 1122, /* "aria-256-ccm" */ + 1077, /* "aria-256-cfb" */ + 1082, /* "aria-256-cfb1" */ + 1085, /* "aria-256-cfb8" */ + 1079, /* "aria-256-ctr" */ + 1075, /* "aria-256-ecb" */ + 1125, /* "aria-256-gcm" */ + 1078, /* "aria-256-ofb" */ 484, /* "associatedDomain" */ 485, /* "associatedName" */ 501, /* "audio" */ + 1064, /* "auth-any" */ 1049, /* "auth-dss" */ 1047, /* "auth-ecdsa" */ 1050, /* "auth-gost01" */ @@ -3409,6 +3690,8 @@ static const unsigned int ln_objs[NUM_LN] = { 513, /* "content types" */ 50, /* "contentType" */ 53, /* "countersignature" */ + 1090, /* "countryCode3c" */ + 1091, /* "countryCode3n" */ 14, /* "countryName" */ 153, /* "crlBag" */ 884, /* "crossCertificatePair" */ @@ -3458,6 +3741,7 @@ static const unsigned int ln_objs[NUM_LN] = { 887, /* "distinguishedName" */ 892, /* "dmdName" */ 174, /* "dnQualifier" */ + 1092, /* "dnsName" */ 447, /* "document" */ 471, /* "documentAuthor" */ 468, /* "documentIdentifier" */ @@ -3476,6 +3760,12 @@ static const unsigned int ln_objs[NUM_LN] = { 70, /* "dsaWithSHA1-old" */ 802, /* "dsa_with_SHA224" */ 803, /* "dsa_with_SHA256" */ + 1108, /* "dsa_with_SHA3-224" */ + 1109, /* "dsa_with_SHA3-256" */ + 1110, /* "dsa_with_SHA3-384" */ + 1111, /* "dsa_with_SHA3-512" */ + 1106, /* "dsa_with_SHA384" */ + 1107, /* "dsa_with_SHA512" */ 297, /* "dvcs" */ 791, /* "ecdsa-with-Recommended" */ 416, /* "ecdsa-with-SHA1" */ @@ -3484,12 +3774,21 @@ static const unsigned int ln_objs[NUM_LN] = { 795, /* "ecdsa-with-SHA384" */ 796, /* "ecdsa-with-SHA512" */ 792, /* "ecdsa-with-Specified" */ + 1112, /* "ecdsa_with_SHA3-224" */ + 1113, /* "ecdsa_with_SHA3-256" */ + 1114, /* "ecdsa_with_SHA3-384" */ + 1115, /* "ecdsa_with_SHA3-512" */ 48, /* "emailAddress" */ 632, /* "encrypted track 2" */ 885, /* "enhancedSearchGuide" */ 56, /* "extendedCertificateAttributes" */ 867, /* "facsimileTelephoneNumber" */ 462, /* "favouriteDrink" */ + 1126, /* "ffdhe2048" */ + 1127, /* "ffdhe3072" */ + 1128, /* "ffdhe4096" */ + 1129, /* "ffdhe6144" */ + 1130, /* "ffdhe8192" */ 453, /* "friendlyCountry" */ 490, /* "friendlyCountryName" */ 156, /* "friendlyName" */ @@ -3513,6 +3812,10 @@ static const unsigned int ln_objs[NUM_LN] = { 855, /* "hmac" */ 780, /* "hmac-md5" */ 781, /* "hmac-sha1" */ + 1102, /* "hmac-sha3-224" */ + 1103, /* "hmac-sha3-256" */ + 1104, /* "hmac-sha3-384" */ + 1105, /* "hmac-sha3-512" */ 797, /* "hmacWithMD5" */ 163, /* "hmacWithSHA1" */ 798, /* "hmacWithSHA224" */ @@ -3670,7 +3973,6 @@ static const unsigned int ln_objs[NUM_LN] = { 314, /* "id-regInfo" */ 322, /* "id-regInfo-certReq" */ 321, /* "id-regInfo-utf8Pairs" */ - 973, /* "id-scrypt" */ 191, /* "id-smime-aa" */ 215, /* "id-smime-aa-contentHint" */ 218, /* "id-smime-aa-contentIdentifier" */ @@ -3699,6 +4001,7 @@ static const unsigned int ln_objs[NUM_LN] = { 213, /* "id-smime-aa-securityLabel" */ 239, /* "id-smime-aa-signatureType" */ 223, /* "id-smime-aa-signingCertificate" */ + 1086, /* "id-smime-aa-signingCertificateV2" */ 224, /* "id-smime-aa-smimeEncryptCerts" */ 225, /* "id-smime-aa-timeStampToken" */ 192, /* "id-smime-alg" */ @@ -3779,6 +4082,7 @@ static const unsigned int ln_objs[NUM_LN] = { 956, /* "jurisdictionStateOrProvinceName" */ 150, /* "keyBag" */ 773, /* "kisa" */ + 1063, /* "kx-any" */ 1039, /* "kx-dhe" */ 1041, /* "kx-dhe-psk" */ 1038, /* "kx-ecdhe" */ @@ -3817,9 +4121,11 @@ static const unsigned int ln_objs[NUM_LN] = { 173, /* "name" */ 681, /* "onBasis" */ 379, /* "org" */ + 1089, /* "organizationIdentifier" */ 17, /* "organizationName" */ 491, /* "organizationalStatus" */ 18, /* "organizationalUnitName" */ + 1141, /* "oscca" */ 475, /* "otherMailbox" */ 876, /* "owner" */ 935, /* "pSpecified" */ @@ -3866,6 +4172,7 @@ static const unsigned int ln_objs[NUM_LN] = { 22, /* "pkcs7-signedData" */ 151, /* "pkcs8ShroudedKeyBag" */ 47, /* "pkcs9" */ + 1061, /* "poly1305" */ 862, /* "postOfficeBox" */ 861, /* "postalAddress" */ 661, /* "postalCode" */ @@ -3918,6 +4225,7 @@ static const unsigned int ln_objs[NUM_LN] = { 291, /* "sbgp-autonomousSysNum" */ 290, /* "sbgp-ipAddrBlock" */ 292, /* "sbgp-routerIdentifier" */ + 973, /* "scrypt" */ 159, /* "sdsiCertificate" */ 859, /* "searchGuide" */ 704, /* "secp112r1" */ @@ -4085,14 +4393,35 @@ static const unsigned int ln_objs[NUM_LN] = { 671, /* "sha224WithRSAEncryption" */ 672, /* "sha256" */ 668, /* "sha256WithRSAEncryption" */ + 1096, /* "sha3-224" */ + 1097, /* "sha3-256" */ + 1098, /* "sha3-384" */ + 1099, /* "sha3-512" */ 673, /* "sha384" */ 669, /* "sha384WithRSAEncryption" */ 674, /* "sha512" */ + 1094, /* "sha512-224" */ + 1145, /* "sha512-224WithRSAEncryption" */ + 1095, /* "sha512-256" */ + 1146, /* "sha512-256WithRSAEncryption" */ 670, /* "sha512WithRSAEncryption" */ 42, /* "shaWithRSAEncryption" */ + 1100, /* "shake128" */ + 1101, /* "shake256" */ 52, /* "signingTime" */ 454, /* "simpleSecurityObject" */ 496, /* "singleLevelQuality" */ + 1062, /* "siphash" */ + 1142, /* "sm-scheme" */ + 1143, /* "sm3" */ + 1144, /* "sm3WithRSAEncryption" */ + 1134, /* "sm4-cbc" */ + 1137, /* "sm4-cfb" */ + 1136, /* "sm4-cfb1" */ + 1138, /* "sm4-cfb8" */ + 1139, /* "sm4-ctr" */ + 1133, /* "sm4-ecb" */ + 1135, /* "sm4-ofb" */ 16, /* "stateOrProvinceName" */ 660, /* "streetAddress" */ 498, /* "subtreeMaximumQuality" */ @@ -4140,7 +4469,7 @@ static const unsigned int ln_objs[NUM_LN] = { 125, /* "zlib compression" */ }; -#define NUM_OBJ 956 +#define NUM_OBJ 1027 static const unsigned int obj_objs[NUM_OBJ] = { 0, /* OBJ_undef 0 */ 181, /* OBJ_iso 1 */ @@ -4161,10 +4490,13 @@ static const unsigned int obj_objs[NUM_OBJ] = { 512, /* OBJ_id_set 2 23 42 */ 678, /* OBJ_wap 2 23 43 */ 435, /* OBJ_pss 0 9 2342 */ + 1140, /* OBJ_ISO_CN 1 2 156 */ 183, /* OBJ_ISO_US 1 2 840 */ 381, /* OBJ_iana 1 3 6 1 */ 1034, /* OBJ_X25519 1 3 101 110 */ 1035, /* OBJ_X448 1 3 101 111 */ + 1087, /* OBJ_ED25519 1 3 101 112 */ + 1088, /* OBJ_ED448 1 3 101 113 */ 677, /* OBJ_certicom_arc 1 3 132 */ 394, /* OBJ_selected_attribute_types 2 5 1 5 */ 13, /* OBJ_commonName 2 5 4 3 */ @@ -4221,6 +4553,10 @@ static const unsigned int obj_objs[NUM_OBJ] = { 892, /* OBJ_dmdName 2 5 4 54 */ 510, /* OBJ_pseudonym 2 5 4 65 */ 400, /* OBJ_role 2 5 4 72 */ + 1089, /* OBJ_organizationIdentifier 2 5 4 97 */ + 1090, /* OBJ_countryCode3c 2 5 4 98 */ + 1091, /* OBJ_countryCode3n 2 5 4 99 */ + 1092, /* OBJ_dnsName 2 5 4 100 */ 769, /* OBJ_subject_directory_attributes 2 5 29 9 */ 82, /* OBJ_subject_key_identifier 2 5 29 14 */ 83, /* OBJ_key_usage 2 5 29 15 */ @@ -4378,6 +4714,7 @@ static const unsigned int obj_objs[NUM_OBJ] = { 637, /* OBJ_set_brand_Diners 2 23 42 8 30 */ 638, /* OBJ_set_brand_AmericanExpress 2 23 42 8 34 */ 639, /* OBJ_set_brand_JCB 2 23 42 8 35 */ + 1141, /* OBJ_oscca 1 2 156 10197 */ 805, /* OBJ_cryptopro 1 2 643 2 2 */ 806, /* OBJ_cryptocom 1 2 643 2 9 */ 974, /* OBJ_id_tc26 1 2 643 7 1 */ @@ -4404,6 +4741,7 @@ static const unsigned int obj_objs[NUM_OBJ] = { 70, /* OBJ_dsaWithSHA1_2 1 3 14 3 2 27 */ 115, /* OBJ_sha1WithRSA 1 3 14 3 2 29 */ 117, /* OBJ_ripemd160 1 3 36 3 2 1 */ + 1093, /* OBJ_x509ExtAdmission 1 3 36 8 3 3 */ 143, /* OBJ_sxnet 1 3 101 1 4 1 */ 721, /* OBJ_sect163k1 1 3 132 0 1 */ 722, /* OBJ_sect163r1 1 3 132 0 2 */ @@ -4456,6 +4794,7 @@ static const unsigned int obj_objs[NUM_OBJ] = { 744, /* OBJ_wap_wsg_idm_ecid_wtls11 2 23 43 1 4 11 */ 745, /* OBJ_wap_wsg_idm_ecid_wtls12 2 23 43 1 4 12 */ 804, /* OBJ_whirlpool 1 0 10118 3 0 55 */ + 1142, /* OBJ_sm_scheme 1 2 156 10197 1 */ 773, /* OBJ_kisa 1 2 410 200004 */ 807, /* OBJ_id_GostR3411_94_with_GostR3410_2001 1 2 643 2 2 3 */ 808, /* OBJ_id_GostR3411_94_with_GostR3410_94 1 2 643 2 2 4 */ @@ -4585,6 +4924,15 @@ static const unsigned int obj_objs[NUM_OBJ] = { 971, /* OBJ_camellia_256_ctr 0 3 4401 5 3 1 9 49 */ 972, /* OBJ_camellia_256_cmac 0 3 4401 5 3 1 9 50 */ 437, /* OBJ_pilot 0 9 2342 19200300 100 */ + 1133, /* OBJ_sm4_ecb 1 2 156 10197 1 104 1 */ + 1134, /* OBJ_sm4_cbc 1 2 156 10197 1 104 2 */ + 1135, /* OBJ_sm4_ofb128 1 2 156 10197 1 104 3 */ + 1137, /* OBJ_sm4_cfb128 1 2 156 10197 1 104 4 */ + 1136, /* OBJ_sm4_cfb1 1 2 156 10197 1 104 5 */ + 1138, /* OBJ_sm4_cfb8 1 2 156 10197 1 104 6 */ + 1139, /* OBJ_sm4_ctr 1 2 156 10197 1 104 7 */ + 1143, /* OBJ_sm3 1 2 156 10197 1 401 */ + 1144, /* OBJ_sm3WithRSAEncryption 1 2 156 10197 1 504 */ 776, /* OBJ_seed_ecb 1 2 410 200004 1 3 */ 777, /* OBJ_seed_cbc 1 2 410 200004 1 4 */ 779, /* OBJ_seed_cfb128 1 2 410 200004 1 5 */ @@ -4710,6 +5058,8 @@ static const unsigned int obj_objs[NUM_OBJ] = { 1028, /* OBJ_sendProxiedRouter 1 3 6 1 5 5 7 3 24 */ 1029, /* OBJ_sendOwner 1 3 6 1 5 5 7 3 25 */ 1030, /* OBJ_sendProxiedOwner 1 3 6 1 5 5 7 3 26 */ + 1131, /* OBJ_cmcCA 1 3 6 1 5 5 7 3 27 */ + 1132, /* OBJ_cmcRA 1 3 6 1 5 5 7 3 28 */ 298, /* OBJ_id_it_caProtEncCert 1 3 6 1 5 5 7 4 1 */ 299, /* OBJ_id_it_signKeyPairTypes 1 3 6 1 5 5 7 4 2 */ 300, /* OBJ_id_it_encKeyPairTypes 1 3 6 1 5 5 7 4 3 */ @@ -4785,6 +5135,27 @@ static const unsigned int obj_objs[NUM_OBJ] = { 439, /* OBJ_pilotAttributeSyntax 0 9 2342 19200300 100 3 */ 440, /* OBJ_pilotObjectClass 0 9 2342 19200300 100 4 */ 441, /* OBJ_pilotGroups 0 9 2342 19200300 100 10 */ + 1065, /* OBJ_aria_128_ecb 1 2 410 200046 1 1 1 */ + 1066, /* OBJ_aria_128_cbc 1 2 410 200046 1 1 2 */ + 1067, /* OBJ_aria_128_cfb128 1 2 410 200046 1 1 3 */ + 1068, /* OBJ_aria_128_ofb128 1 2 410 200046 1 1 4 */ + 1069, /* OBJ_aria_128_ctr 1 2 410 200046 1 1 5 */ + 1070, /* OBJ_aria_192_ecb 1 2 410 200046 1 1 6 */ + 1071, /* OBJ_aria_192_cbc 1 2 410 200046 1 1 7 */ + 1072, /* OBJ_aria_192_cfb128 1 2 410 200046 1 1 8 */ + 1073, /* OBJ_aria_192_ofb128 1 2 410 200046 1 1 9 */ + 1074, /* OBJ_aria_192_ctr 1 2 410 200046 1 1 10 */ + 1075, /* OBJ_aria_256_ecb 1 2 410 200046 1 1 11 */ + 1076, /* OBJ_aria_256_cbc 1 2 410 200046 1 1 12 */ + 1077, /* OBJ_aria_256_cfb128 1 2 410 200046 1 1 13 */ + 1078, /* OBJ_aria_256_ofb128 1 2 410 200046 1 1 14 */ + 1079, /* OBJ_aria_256_ctr 1 2 410 200046 1 1 15 */ + 1123, /* OBJ_aria_128_gcm 1 2 410 200046 1 1 34 */ + 1124, /* OBJ_aria_192_gcm 1 2 410 200046 1 1 35 */ + 1125, /* OBJ_aria_256_gcm 1 2 410 200046 1 1 36 */ + 1120, /* OBJ_aria_128_ccm 1 2 410 200046 1 1 37 */ + 1121, /* OBJ_aria_192_ccm 1 2 410 200046 1 1 38 */ + 1122, /* OBJ_aria_256_ccm 1 2 410 200046 1 1 39 */ 997, /* OBJ_id_tc26_gost_3410_2012_512_paramSetTest 1 2 643 7 1 2 1 2 0 */ 998, /* OBJ_id_tc26_gost_3410_2012_512_paramSetA 1 2 643 7 1 2 1 2 1 */ 999, /* OBJ_id_tc26_gost_3410_2012_512_paramSetB 1 2 643 7 1 2 1 2 2 */ @@ -4807,6 +5178,8 @@ static const unsigned int obj_objs[NUM_OBJ] = { 669, /* OBJ_sha384WithRSAEncryption 1 2 840 113549 1 1 12 */ 670, /* OBJ_sha512WithRSAEncryption 1 2 840 113549 1 1 13 */ 671, /* OBJ_sha224WithRSAEncryption 1 2 840 113549 1 1 14 */ + 1145, /* OBJ_sha512_224WithRSAEncryption 1 2 840 113549 1 1 15 */ + 1146, /* OBJ_sha512_256WithRSAEncryption 1 2 840 113549 1 1 16 */ 28, /* OBJ_dhKeyAgreement 1 2 840 113549 1 3 1 */ 9, /* OBJ_pbeWithMD2AndDES_CBC 1 2 840 113549 1 5 1 */ 10, /* OBJ_pbeWithMD5AndDES_CBC 1 2 840 113549 1 5 3 */ @@ -4908,8 +5281,34 @@ static const unsigned int obj_objs[NUM_OBJ] = { 673, /* OBJ_sha384 2 16 840 1 101 3 4 2 2 */ 674, /* OBJ_sha512 2 16 840 1 101 3 4 2 3 */ 675, /* OBJ_sha224 2 16 840 1 101 3 4 2 4 */ + 1094, /* OBJ_sha512_224 2 16 840 1 101 3 4 2 5 */ + 1095, /* OBJ_sha512_256 2 16 840 1 101 3 4 2 6 */ + 1096, /* OBJ_sha3_224 2 16 840 1 101 3 4 2 7 */ + 1097, /* OBJ_sha3_256 2 16 840 1 101 3 4 2 8 */ + 1098, /* OBJ_sha3_384 2 16 840 1 101 3 4 2 9 */ + 1099, /* OBJ_sha3_512 2 16 840 1 101 3 4 2 10 */ + 1100, /* OBJ_shake128 2 16 840 1 101 3 4 2 11 */ + 1101, /* OBJ_shake256 2 16 840 1 101 3 4 2 12 */ + 1102, /* OBJ_hmac_sha3_224 2 16 840 1 101 3 4 2 13 */ + 1103, /* OBJ_hmac_sha3_256 2 16 840 1 101 3 4 2 14 */ + 1104, /* OBJ_hmac_sha3_384 2 16 840 1 101 3 4 2 15 */ + 1105, /* OBJ_hmac_sha3_512 2 16 840 1 101 3 4 2 16 */ 802, /* OBJ_dsa_with_SHA224 2 16 840 1 101 3 4 3 1 */ 803, /* OBJ_dsa_with_SHA256 2 16 840 1 101 3 4 3 2 */ + 1106, /* OBJ_dsa_with_SHA384 2 16 840 1 101 3 4 3 3 */ + 1107, /* OBJ_dsa_with_SHA512 2 16 840 1 101 3 4 3 4 */ + 1108, /* OBJ_dsa_with_SHA3_224 2 16 840 1 101 3 4 3 5 */ + 1109, /* OBJ_dsa_with_SHA3_256 2 16 840 1 101 3 4 3 6 */ + 1110, /* OBJ_dsa_with_SHA3_384 2 16 840 1 101 3 4 3 7 */ + 1111, /* OBJ_dsa_with_SHA3_512 2 16 840 1 101 3 4 3 8 */ + 1112, /* OBJ_ecdsa_with_SHA3_224 2 16 840 1 101 3 4 3 9 */ + 1113, /* OBJ_ecdsa_with_SHA3_256 2 16 840 1 101 3 4 3 10 */ + 1114, /* OBJ_ecdsa_with_SHA3_384 2 16 840 1 101 3 4 3 11 */ + 1115, /* OBJ_ecdsa_with_SHA3_512 2 16 840 1 101 3 4 3 12 */ + 1116, /* OBJ_RSA_SHA3_224 2 16 840 1 101 3 4 3 13 */ + 1117, /* OBJ_RSA_SHA3_256 2 16 840 1 101 3 4 3 14 */ + 1118, /* OBJ_RSA_SHA3_384 2 16 840 1 101 3 4 3 15 */ + 1119, /* OBJ_RSA_SHA3_512 2 16 840 1 101 3 4 3 16 */ 71, /* OBJ_netscape_cert_type 2 16 840 1 113730 1 1 */ 72, /* OBJ_netscape_base_url 2 16 840 1 113730 1 2 */ 73, /* OBJ_netscape_revocation_url 2 16 840 1 113730 1 3 */ @@ -5068,6 +5467,7 @@ static const unsigned int obj_objs[NUM_OBJ] = { 238, /* OBJ_id_smime_aa_ets_archiveTimeStamp 1 2 840 113549 1 9 16 2 27 */ 239, /* OBJ_id_smime_aa_signatureType 1 2 840 113549 1 9 16 2 28 */ 240, /* OBJ_id_smime_aa_dvcs_dvc 1 2 840 113549 1 9 16 2 29 */ + 1086, /* OBJ_id_smime_aa_signingCertificateV2 1 2 840 113549 1 9 16 2 47 */ 241, /* OBJ_id_smime_alg_ESDHwith3DES 1 2 840 113549 1 9 16 3 1 */ 242, /* OBJ_id_smime_alg_ESDHwithRC2 1 2 840 113549 1 9 16 3 2 */ 243, /* OBJ_id_smime_alg_3DESwrap 1 2 840 113549 1 9 16 3 3 */ diff --git a/crypto/objects/obj_dat.pl b/crypto/objects/obj_dat.pl index 1cb3d1c9..392617c0 100644 --- a/crypto/objects/obj_dat.pl +++ b/crypto/objects/obj_dat.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -36,6 +36,10 @@ sub der_it return $ret; } +# Output year depends on the year of the script and the input file. +my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; +my $iYEAR = [localtime([stat($ARGV[0])]->[9])]->[5] + 1900; +$YEAR = $iYEAR if $iYEAR > $YEAR; # Read input, parse all #define's into OID name and value. # Populate %ln and %sn with long and short names (%dupln and %dupsn) @@ -149,12 +153,12 @@ for (my $i = 0; $i < $n; $i++) { # Finally ready to generate the output. open(OUT, ">$ARGV[1]") || die "Can't open output file $ARGV[1], $!"; -print OUT <<'EOF'; +print OUT <<"EOF"; /* * WARNING: do not edit! * Generated by crypto/objects/obj_dat.pl * - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at diff --git a/crypto/objects/obj_err.c b/crypto/objects/obj_err.c index 4677b673..ef36313c 100644 --- a/crypto/objects/obj_err.c +++ b/crypto/objects/obj_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,30 +8,25 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_OBJ,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_OBJ,0,reason) - -static ERR_STRING_DATA OBJ_str_functs[] = { - {ERR_FUNC(OBJ_F_OBJ_ADD_OBJECT), "OBJ_add_object"}, - {ERR_FUNC(OBJ_F_OBJ_CREATE), "OBJ_create"}, - {ERR_FUNC(OBJ_F_OBJ_DUP), "OBJ_dup"}, - {ERR_FUNC(OBJ_F_OBJ_NAME_NEW_INDEX), "OBJ_NAME_new_index"}, - {ERR_FUNC(OBJ_F_OBJ_NID2LN), "OBJ_nid2ln"}, - {ERR_FUNC(OBJ_F_OBJ_NID2OBJ), "OBJ_nid2obj"}, - {ERR_FUNC(OBJ_F_OBJ_NID2SN), "OBJ_nid2sn"}, +static const ERR_STRING_DATA OBJ_str_functs[] = { + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_ADD_OBJECT, 0), "OBJ_add_object"}, + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_CREATE, 0), "OBJ_create"}, + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_DUP, 0), "OBJ_dup"}, + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_NAME_NEW_INDEX, 0), "OBJ_NAME_new_index"}, + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_NID2LN, 0), "OBJ_nid2ln"}, + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_NID2OBJ, 0), "OBJ_nid2obj"}, + {ERR_PACK(ERR_LIB_OBJ, OBJ_F_OBJ_NID2SN, 0), "OBJ_nid2sn"}, {0, NULL} }; -static ERR_STRING_DATA OBJ_str_reasons[] = { - {ERR_REASON(OBJ_R_OID_EXISTS), "oid exists"}, - {ERR_REASON(OBJ_R_UNKNOWN_NID), "unknown nid"}, +static const ERR_STRING_DATA OBJ_str_reasons[] = { + {ERR_PACK(ERR_LIB_OBJ, 0, OBJ_R_OID_EXISTS), "oid exists"}, + {ERR_PACK(ERR_LIB_OBJ, 0, OBJ_R_UNKNOWN_NID), "unknown nid"}, {0, NULL} }; @@ -40,10 +35,9 @@ static ERR_STRING_DATA OBJ_str_reasons[] = { int ERR_load_OBJ_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(OBJ_str_functs[0].error) == NULL) { - ERR_load_strings(0, OBJ_str_functs); - ERR_load_strings(0, OBJ_str_reasons); + ERR_load_strings_const(OBJ_str_functs); + ERR_load_strings_const(OBJ_str_reasons); } #endif return 1; diff --git a/crypto/objects/obj_lib.c b/crypto/objects/obj_lib.c index 33075e64..acbdeec2 100644 --- a/crypto/objects/obj_lib.c +++ b/crypto/objects/obj_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include "internal/asn1_int.h" @@ -22,12 +21,12 @@ ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o) return NULL; /* If object isn't dynamic it's an internal OID which is never freed */ if (!(o->flags & ASN1_OBJECT_FLAG_DYNAMIC)) - return ((ASN1_OBJECT *)o); + return (ASN1_OBJECT *)o; r = ASN1_OBJECT_new(); if (r == NULL) { OBJerr(OBJ_F_OBJ_DUP, ERR_R_ASN1_LIB); - return (NULL); + return NULL; } /* Set dynamic flags so everything gets freed up on error */ @@ -61,6 +60,6 @@ int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b) ret = (a->length - b->length); if (ret) - return (ret); - return (memcmp(a->data, b->data, a->length)); + return ret; + return memcmp(a->data, b->data, a->length); } diff --git a/crypto/objects/obj_mac.num b/crypto/objects/obj_mac.num index a5995a51..bef6050a 100644 --- a/crypto/objects/obj_mac.num +++ b/crypto/objects/obj_mac.num @@ -1058,3 +1058,89 @@ blake2s256 1057 id_smime_ct_contentCollection 1058 id_smime_ct_authEnvelopedData 1059 id_ct_xml 1060 +poly1305 1061 +siphash 1062 +kx_any 1063 +auth_any 1064 +aria_128_ecb 1065 +aria_128_cbc 1066 +aria_128_cfb128 1067 +aria_128_ofb128 1068 +aria_128_ctr 1069 +aria_192_ecb 1070 +aria_192_cbc 1071 +aria_192_cfb128 1072 +aria_192_ofb128 1073 +aria_192_ctr 1074 +aria_256_ecb 1075 +aria_256_cbc 1076 +aria_256_cfb128 1077 +aria_256_ofb128 1078 +aria_256_ctr 1079 +aria_128_cfb1 1080 +aria_192_cfb1 1081 +aria_256_cfb1 1082 +aria_128_cfb8 1083 +aria_192_cfb8 1084 +aria_256_cfb8 1085 +id_smime_aa_signingCertificateV2 1086 +ED25519 1087 +ED448 1088 +organizationIdentifier 1089 +countryCode3c 1090 +countryCode3n 1091 +dnsName 1092 +x509ExtAdmission 1093 +sha512_224 1094 +sha512_256 1095 +sha3_224 1096 +sha3_256 1097 +sha3_384 1098 +sha3_512 1099 +shake128 1100 +shake256 1101 +hmac_sha3_224 1102 +hmac_sha3_256 1103 +hmac_sha3_384 1104 +hmac_sha3_512 1105 +dsa_with_SHA384 1106 +dsa_with_SHA512 1107 +dsa_with_SHA3_224 1108 +dsa_with_SHA3_256 1109 +dsa_with_SHA3_384 1110 +dsa_with_SHA3_512 1111 +ecdsa_with_SHA3_224 1112 +ecdsa_with_SHA3_256 1113 +ecdsa_with_SHA3_384 1114 +ecdsa_with_SHA3_512 1115 +RSA_SHA3_224 1116 +RSA_SHA3_256 1117 +RSA_SHA3_384 1118 +RSA_SHA3_512 1119 +aria_128_ccm 1120 +aria_192_ccm 1121 +aria_256_ccm 1122 +aria_128_gcm 1123 +aria_192_gcm 1124 +aria_256_gcm 1125 +ffdhe2048 1126 +ffdhe3072 1127 +ffdhe4096 1128 +ffdhe6144 1129 +ffdhe8192 1130 +cmcCA 1131 +cmcRA 1132 +sm4_ecb 1133 +sm4_cbc 1134 +sm4_ofb128 1135 +sm4_cfb1 1136 +sm4_cfb128 1137 +sm4_cfb8 1138 +sm4_ctr 1139 +ISO_CN 1140 +oscca 1141 +sm_scheme 1142 +sm3 1143 +sm3WithRSAEncryption 1144 +sha512_224WithRSAEncryption 1145 +sha512_256WithRSAEncryption 1146 diff --git a/crypto/objects/obj_xref.c b/crypto/objects/obj_xref.c index 627f5bca..05a5c862 100644 --- a/crypto/objects/obj_xref.c +++ b/crypto/objects/obj_xref.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,7 @@ #include #include "obj_xref.h" -#include "e_os.h" +#include "internal/nelem.h" static STACK_OF(nid_triple) *sig_app, *sigx_app; @@ -136,30 +136,3 @@ void OBJ_sigid_free(void) sk_nid_triple_free(sigx_app); sigx_app = NULL; } - -#ifdef OBJ_XREF_TEST - -main() -{ - int n1, n2, n3; - - int i, rv; -# ifdef OBJ_XREF_TEST2 - for (i = 0; i < OSSL_NELEM(sigoid_srt); i++) { - OBJ_add_sigid(sigoid_srt[i][0], sigoid_srt[i][1], sigoid_srt[i][2]); - } -# endif - - for (i = 0; i < OSSL_NELEM(sigoid_srt); i++) { - n1 = sigoid_srt[i][0]; - rv = OBJ_find_sigid_algs(n1, &n2, &n3); - printf("Forward: %d, %s %s %s\n", rv, - OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3)); - n1 = 0; - rv = OBJ_find_sigid_by_algs(&n1, n2, n3); - printf("Reverse: %d, %s %s %s\n", rv, - OBJ_nid2ln(n1), OBJ_nid2ln(n2), OBJ_nid2ln(n3)); - } -} - -#endif diff --git a/crypto/objects/obj_xref.h b/crypto/objects/obj_xref.h index d09aa71f..ebd5bf5a 100644 --- a/crypto/objects/obj_xref.h +++ b/crypto/objects/obj_xref.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by objxref.pl * - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -73,6 +73,11 @@ static const nid_triple sigoid_srt[] = { NID_id_GostR3410_2012_256}, {NID_id_tc26_signwithdigest_gost3410_2012_512, NID_id_GostR3411_2012_512, NID_id_GostR3410_2012_512}, + {NID_ED25519, NID_undef, NID_ED25519}, + {NID_RSA_SHA3_224, NID_sha3_224, NID_rsaEncryption}, + {NID_RSA_SHA3_256, NID_sha3_256, NID_rsaEncryption}, + {NID_RSA_SHA3_384, NID_sha3_384, NID_rsaEncryption}, + {NID_RSA_SHA3_512, NID_sha3_512, NID_rsaEncryption}, }; static const nid_triple *const sigoid_srt_xref[] = { @@ -115,4 +120,8 @@ static const nid_triple *const sigoid_srt_xref[] = { &sigoid_srt[28], &sigoid_srt[40], &sigoid_srt[41], + &sigoid_srt[43], + &sigoid_srt[44], + &sigoid_srt[45], + &sigoid_srt[46], }; diff --git a/crypto/objects/obj_xref.txt b/crypto/objects/obj_xref.txt index 981103b3..c8dee7b8 100644 --- a/crypto/objects/obj_xref.txt +++ b/crypto/objects/obj_xref.txt @@ -13,10 +13,15 @@ sha512WithRSAEncryption sha512 rsaEncryption sha224WithRSAEncryption sha224 rsaEncryption mdc2WithRSA mdc2 rsaEncryption ripemd160WithRSA ripemd160 rsaEncryption +RSA_SHA3_224 sha3_224 rsaEncryption +RSA_SHA3_256 sha3_256 rsaEncryption +RSA_SHA3_384 sha3_384 rsaEncryption +RSA_SHA3_512 sha3_512 rsaEncryption # For PSS the digest algorithm can vary and depends on the included # AlgorithmIdentifier. The digest "undef" indicates the public key # method should handle this explicitly. rsassaPss undef rsaEncryption +ED25519 undef ED25519 # Alternative deprecated OIDs. By using the older "rsa" OID this # type will be recognized by not normally used. diff --git a/crypto/objects/objects.pl b/crypto/objects/objects.pl index 3b40277a..20f726d4 100644 --- a/crypto/objects/objects.pl +++ b/crypto/objects/objects.pl @@ -1,11 +1,18 @@ #! /usr/bin/env perl -# Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 +# Output year depends on the year of the script and the input files. +my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; +my $iYEAR = [localtime([stat($ARGV[0])]->[9])]->[5] + 1900; +$YEAR = $iYEAR if $iYEAR > $YEAR; +$iYEAR = [localtime([stat($ARGV[1])]->[9])]->[5] + 1900; +$YEAR = $iYEAR if $iYEAR > $YEAR; + open (NUMIN,"$ARGV[1]") || die "Can't open number file $ARGV[1]"; $max_nid=0; $o=0; @@ -124,12 +131,12 @@ foreach (sort { $a <=> $b } keys %nidn) close NUMOUT; open (OUT,">$ARGV[2]") || die "Can't open output file $ARGV[2]"; -print OUT <<'EOF'; +print OUT <<"EOF"; /* * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-$YEAR The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at diff --git a/crypto/objects/objects.txt b/crypto/objects/objects.txt index fc0781d1..74550be2 100644 --- a/crypto/objects/objects.txt +++ b/crypto/objects/objects.txt @@ -15,6 +15,9 @@ iso 3 : identified-organization identified-organization 6 1 5 5 8 1 1 : HMAC-MD5 : hmac-md5 identified-organization 6 1 5 5 8 1 2 : HMAC-SHA1 : hmac-sha1 +# "1.3.36.8.3.3" +identified-organization 36 8 3 3 : x509ExtAdmission : Professional Information or basis for Admission + identified-organization 132 : certicom-arc joint-iso-itu-t 23 : international-organizations : International Organizations @@ -175,6 +178,8 @@ pkcs1 11 : RSA-SHA256 : sha256WithRSAEncryption pkcs1 12 : RSA-SHA384 : sha384WithRSAEncryption pkcs1 13 : RSA-SHA512 : sha512WithRSAEncryption pkcs1 14 : RSA-SHA224 : sha224WithRSAEncryption +pkcs1 15 : RSA-SHA512/224 : sha512-224WithRSAEncryption +pkcs1 16 : RSA-SHA512/256 : sha512-256WithRSAEncryption pkcs 3 : pkcs3 pkcs3 1 : : dhKeyAgreement @@ -294,6 +299,7 @@ id-smime-aa 26 : id-smime-aa-ets-certCRLTimestamp id-smime-aa 27 : id-smime-aa-ets-archiveTimeStamp id-smime-aa 28 : id-smime-aa-signatureType id-smime-aa 29 : id-smime-aa-dvcs-dvc +id-smime-aa 47 : id-smime-aa-signingCertificateV2 # S/MIME Algorithm Identifiers # obsolete @@ -367,6 +373,9 @@ rsadsi 2 5 : MD5 : md5 rsadsi 2 6 : : hmacWithMD5 rsadsi 2 7 : : hmacWithSHA1 +member-body 156 10197 1 401 : SM3 : sm3 +member-body 156 10197 1 504 : RSA-SM3 : sm3WithRSAEncryption + # From RFC4231 rsadsi 2 8 : : hmacWithSHA224 rsadsi 2 9 : : hmacWithSHA256 @@ -512,6 +521,8 @@ id-kp 23 : sendRouter : Send Router id-kp 24 : sendProxiedRouter : Send Proxied Router id-kp 25 : sendOwner : Send Owner id-kp 26 : sendProxiedOwner : Send Proxied Owner +id-kp 27 : cmcCA : CMC Certificate Authority +id-kp 28 : cmcRA : CMC Registration Authority # CMP information types id-it 1 : id-it-caProtEncCert @@ -575,7 +586,7 @@ id-cmc 19 : id-cmc-responseInfo id-cmc 21 : id-cmc-queryPending id-cmc 22 : id-cmc-popLinkRandom id-cmc 23 : id-cmc-popLinkWitness -id-cmc 24 : id-cmc-confirmCertAcceptance +id-cmc 24 : id-cmc-confirmCertAcceptance # other names id-on 1 : id-on-personalData @@ -737,6 +748,11 @@ X509 53 : : deltaRevocationList X509 54 : dmdName : X509 65 : : pseudonym X509 72 : role : role +X509 97 : : organizationIdentifier +X509 98 : c3 : countryCode3c +X509 99 : n3 : countryCode3n +X509 100 : : dnsName + X500 8 : X500algorithms : directory services - algorithms X500algorithms 1 1 : RSA : rsa @@ -841,7 +857,7 @@ internet 6 : snmpv2 : SNMPv2 # Documents refer to "internet 7" as "mail". This however leads to ambiguities # with RFC2798, Section 9.1.3, where "mail" is defined as the short name for # rfc822Mailbox. The short name is therefore here left out for a reason. -# Subclasses of "mail", e.g. "MIME MHS" don't consitute a problem, as +# Subclasses of "mail", e.g. "MIME MHS" don't constitute a problem, as # references are realized via long name "Mail" (with capital M). internet 7 : : Mail @@ -921,17 +937,52 @@ aes 48 : id-aes256-wrap-pad : DES-EDE3-CFB1 : des-ede3-cfb1 : DES-EDE3-CFB8 : des-ede3-cfb8 -# OIDs for SHA224, SHA256, SHA385 and SHA512, according to x9.84. +# OIDs for SHA224, SHA256, SHA385 and SHA512, according to x9.84 and +# http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html +# "Middle" names are specified to be id-sha256, id-sha384, etc., but +# we adhere to unprefixed capitals for backward compatibility... !Alias nist_hashalgs nistAlgorithms 2 nist_hashalgs 1 : SHA256 : sha256 nist_hashalgs 2 : SHA384 : sha384 nist_hashalgs 3 : SHA512 : sha512 nist_hashalgs 4 : SHA224 : sha224 +nist_hashalgs 5 : SHA512-224 : sha512-224 +nist_hashalgs 6 : SHA512-256 : sha512-256 +nist_hashalgs 7 : SHA3-224 : sha3-224 +nist_hashalgs 8 : SHA3-256 : sha3-256 +nist_hashalgs 9 : SHA3-384 : sha3-384 +nist_hashalgs 10 : SHA3-512 : sha3-512 +nist_hashalgs 11 : SHAKE128 : shake128 +nist_hashalgs 12 : SHAKE256 : shake256 +nist_hashalgs 13 : id-hmacWithSHA3-224 : hmac-sha3-224 +nist_hashalgs 14 : id-hmacWithSHA3-256 : hmac-sha3-256 +nist_hashalgs 15 : id-hmacWithSHA3-384 : hmac-sha3-384 +nist_hashalgs 16 : id-hmacWithSHA3-512 : hmac-sha3-512 +# Below two are incomplete OIDs, to be uncommented when we figure out +# how to handle them... +# nist_hashalgs 17 : id-shake128-len : shake128-len +# nist_hashalgs 18 : id-shake256-len : shake256-len # OIDs for dsa-with-sha224 and dsa-with-sha256 !Alias dsa_with_sha2 nistAlgorithms 3 dsa_with_sha2 1 : dsa_with_SHA224 dsa_with_sha2 2 : dsa_with_SHA256 +# Above two belong below, but kept as they are for backward compatibility +!Alias sigAlgs nistAlgorithms 3 +sigAlgs 3 : id-dsa-with-sha384 : dsa_with_SHA384 +sigAlgs 4 : id-dsa-with-sha512 : dsa_with_SHA512 +sigAlgs 5 : id-dsa-with-sha3-224 : dsa_with_SHA3-224 +sigAlgs 6 : id-dsa-with-sha3-256 : dsa_with_SHA3-256 +sigAlgs 7 : id-dsa-with-sha3-384 : dsa_with_SHA3-384 +sigAlgs 8 : id-dsa-with-sha3-512 : dsa_with_SHA3-512 +sigAlgs 9 : id-ecdsa-with-sha3-224 : ecdsa_with_SHA3-224 +sigAlgs 10 : id-ecdsa-with-sha3-256 : ecdsa_with_SHA3-256 +sigAlgs 11 : id-ecdsa-with-sha3-384 : ecdsa_with_SHA3-384 +sigAlgs 12 : id-ecdsa-with-sha3-512 : ecdsa_with_SHA3-512 +sigAlgs 13 : id-rsassa-pkcs1-v1_5-with-sha3-224 : RSA-SHA3-224 +sigAlgs 14 : id-rsassa-pkcs1-v1_5-with-sha3-256 : RSA-SHA3-256 +sigAlgs 15 : id-rsassa-pkcs1-v1_5-with-sha3-384 : RSA-SHA3-384 +sigAlgs 16 : id-rsassa-pkcs1-v1_5-with-sha3-512 : RSA-SHA3-512 # Hold instruction CRL entry extension !Cname hold-instruction-code @@ -1322,7 +1373,7 @@ member-body 643 100 112 : issuerSignTool : Signing Tool of Issuer # Definitions for Camellia cipher - ECB, CFB, OFB MODE !Alias ntt-ds 0 3 4401 5 -!Alias camellia ntt-ds 3 1 9 +!Alias camellia ntt-ds 3 1 9 camellia 1 : CAMELLIA-128-ECB : camellia-128-ecb !Cname camellia-128-ofb128 @@ -1363,6 +1414,48 @@ camellia 50 : CAMELLIA-256-CMAC : camellia-256-cmac : CAMELLIA-192-CFB8 : camellia-192-cfb8 : CAMELLIA-256-CFB8 : camellia-256-cfb8 +# Definitions for ARIA cipher + +!Alias aria 1 2 410 200046 1 1 +aria 1 : ARIA-128-ECB : aria-128-ecb +aria 2 : ARIA-128-CBC : aria-128-cbc +!Cname aria-128-cfb128 +aria 3 : ARIA-128-CFB : aria-128-cfb +!Cname aria-128-ofb128 +aria 4 : ARIA-128-OFB : aria-128-ofb +aria 5 : ARIA-128-CTR : aria-128-ctr + +aria 6 : ARIA-192-ECB : aria-192-ecb +aria 7 : ARIA-192-CBC : aria-192-cbc +!Cname aria-192-cfb128 +aria 8 : ARIA-192-CFB : aria-192-cfb +!Cname aria-192-ofb128 +aria 9 : ARIA-192-OFB : aria-192-ofb +aria 10 : ARIA-192-CTR : aria-192-ctr + +aria 11 : ARIA-256-ECB : aria-256-ecb +aria 12 : ARIA-256-CBC : aria-256-cbc +!Cname aria-256-cfb128 +aria 13 : ARIA-256-CFB : aria-256-cfb +!Cname aria-256-ofb128 +aria 14 : ARIA-256-OFB : aria-256-ofb +aria 15 : ARIA-256-CTR : aria-256-ctr + +# There are no OIDs for these ARIA modes... + : ARIA-128-CFB1 : aria-128-cfb1 + : ARIA-192-CFB1 : aria-192-cfb1 + : ARIA-256-CFB1 : aria-256-cfb1 + : ARIA-128-CFB8 : aria-128-cfb8 + : ARIA-192-CFB8 : aria-192-cfb8 + : ARIA-256-CFB8 : aria-256-cfb8 + +aria 37 : ARIA-128-CCM : aria-128-ccm +aria 38 : ARIA-192-CCM : aria-192-ccm +aria 39 : ARIA-256-CCM : aria-256-ccm +aria 34 : ARIA-128-GCM : aria-128-gcm +aria 35 : ARIA-192-GCM : aria-192-gcm +aria 36 : ARIA-256-GCM : aria-256-gcm + # Definitions for SEED cipher - ECB, CBC, OFB mode member-body 410 200004 : KISA : kisa @@ -1373,6 +1466,23 @@ kisa 1 5 : SEED-CFB : seed-cfb !Cname seed-ofb128 kisa 1 6 : SEED-OFB : seed-ofb + +# Definitions for SM4 cipher + +member-body 156 : ISO-CN : ISO CN Member Body +ISO-CN 10197 : oscca +oscca 1 : sm-scheme + +sm-scheme 104 1 : SM4-ECB : sm4-ecb +sm-scheme 104 2 : SM4-CBC : sm4-cbc +!Cname sm4-ofb128 +sm-scheme 104 3 : SM4-OFB : sm4-ofb +!Cname sm4-cfb128 +sm-scheme 104 4 : SM4-CFB : sm4-cfb +sm-scheme 104 5 : SM4-CFB1 : sm4-cfb1 +sm-scheme 104 6 : SM4-CFB8 : sm4-cfb8 +sm-scheme 104 7 : SM4-CTR : sm4-ctr + # There is no OID that just denotes "HMAC" oddly enough... : HMAC : hmac @@ -1394,7 +1504,7 @@ ISO-US 10046 2 1 : dhpublicnumber : X9.42 DH # RFC 5639 curve OIDs (see http://www.ietf.org/rfc/rfc5639.txt) # versionOne OBJECT IDENTIFIER ::= { -# iso(1) identifified-organization(3) teletrust(36) algorithm(3) +# iso(1) identified-organization(3) teletrust(36) algorithm(3) # signature-algorithm(3) ecSign(2) ecStdCurvesAndGeneration(8) # ellipticCurve(1) 1 } 1 3 36 3 3 2 8 1 1 1 : brainpoolP160r1 @@ -1410,7 +1520,7 @@ ISO-US 10046 2 1 : dhpublicnumber : X9.42 DH 1 3 36 3 3 2 8 1 1 11 : brainpoolP384r1 1 3 36 3 3 2 8 1 1 12 : brainpoolP384t1 1 3 36 3 3 2 8 1 1 13 : brainpoolP512r1 -1 3 36 3 3 2 8 1 1 14 : brainpoolP512t1 +1 3 36 3 3 2 8 1 1 14 : brainpoolP512t1 # ECDH schemes from RFC5753 !Alias x9-63-scheme 1 3 133 16 840 63 0 @@ -1445,7 +1555,8 @@ secg-scheme 14 3 : dhSinglePass-cofactorDH-sha512kdf-scheme 1 3 6 1 4 1 311 60 2 1 3 : jurisdictionC : jurisdictionCountryName # SCRYPT algorithm -1 3 6 1 4 1 11591 4 11 : id-scrypt +!Cname id-scrypt +1 3 6 1 4 1 11591 4 11 : id-scrypt : scrypt # NID for TLS1 PRF : TLS1-PRF : tls1-prf @@ -1458,9 +1569,12 @@ secg-scheme 14 3 : dhSinglePass-cofactorDH-sha512kdf-scheme id-pkinit 4 : pkInitClientAuth : PKINIT Client Auth id-pkinit 5 : pkInitKDC : Signing KDC Response -# New curves from draft-ietf-curdle-pkix-00 +# New algorithms from draft-ietf-curdle-pkix-04 1 3 101 110 : X25519 1 3 101 111 : X448 +1 3 101 112 : ED25519 +1 3 101 113 : ED448 + # NIDs for cipher key exchange : KxRSA : kx-rsa @@ -1472,6 +1586,7 @@ id-pkinit 5 : pkInitKDC : Signing KDC Response : KxPSK : kx-psk : KxSRP : kx-srp : KxGOST : kx-gost + : KxANY : kx-any # NIDs for cipher authentication : AuthRSA : auth-rsa @@ -1482,4 +1597,15 @@ id-pkinit 5 : pkInitKDC : Signing KDC Response : AuthGOST12 : auth-gost12 : AuthSRP : auth-srp : AuthNULL : auth-null + : AuthANY : auth-any +# NID for Poly1305 + : Poly1305 : poly1305 +# NID for SipHash + : SipHash : siphash +# NIDs for RFC7919 DH parameters + : ffdhe2048 + : ffdhe3072 + : ffdhe4096 + : ffdhe6144 + : ffdhe8192 diff --git a/crypto/objects/objxref.pl b/crypto/objects/objxref.pl index 53f9bd60..0ec63f06 100644 --- a/crypto/objects/objxref.pl +++ b/crypto/objects/objxref.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -14,6 +14,13 @@ my %oid_tbl; my ($mac_file, $xref_file) = @ARGV; +# Output year depends on the year of the script and the input file. +my $YEAR = [localtime([stat($0)]->[9])]->[5] + 1900; +my $iYEAR = [localtime([stat($mac_file)]->[9])]->[5] + 1900; +$YEAR = $iYEAR if $iYEAR > $YEAR; +$iYEAR = [localtime([stat($xref_file)]->[9])]->[5] + 1900; +$YEAR = $iYEAR if $iYEAR > $YEAR; + open(IN, $mac_file) || die "Can't open $mac_file, $!\n"; # Read in OID nid values for a lookup table. @@ -71,7 +78,7 @@ print < #include #include "internal/cryptlib.h" +#include #include #include #include @@ -199,9 +200,9 @@ 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) - { const OCSP_RESPID *rid = &bs->tbsResponseData.responderId; + if (rid->type == V_OCSP_RESPID_NAME) { *pname = rid->value.byName; *pid = NULL; @@ -214,6 +215,26 @@ int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, return 1; } +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname) +{ + const OCSP_RESPID *rid = &bs->tbsResponseData.responderId; + + if (rid->type == V_OCSP_RESPID_NAME) { + *pname = X509_NAME_dup(rid->value.byName); + *pid = NULL; + } else if (rid->type == V_OCSP_RESPID_KEY) { + *pid = ASN1_OCTET_STRING_dup(rid->value.byKey); + *pname = NULL; + } else { + return 0; + } + if (*pname == NULL && *pid == NULL) + return 0; + return 1; +} + /* Look single response matching a given certificate ID */ int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last) diff --git a/crypto/ocsp/ocsp_err.c b/crypto/ocsp/ocsp_err.c index a2d96e9c..660e1936 100644 --- a/crypto/ocsp/ocsp_err.c +++ b/crypto/ocsp/ocsp_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,71 +8,82 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_OCSP,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_OCSP,0,reason) - -static ERR_STRING_DATA OCSP_str_functs[] = { - {ERR_FUNC(OCSP_F_D2I_OCSP_NONCE), "d2i_ocsp_nonce"}, - {ERR_FUNC(OCSP_F_OCSP_BASIC_ADD1_STATUS), "OCSP_basic_add1_status"}, - {ERR_FUNC(OCSP_F_OCSP_BASIC_SIGN), "OCSP_basic_sign"}, - {ERR_FUNC(OCSP_F_OCSP_BASIC_VERIFY), "OCSP_basic_verify"}, - {ERR_FUNC(OCSP_F_OCSP_CERT_ID_NEW), "OCSP_cert_id_new"}, - {ERR_FUNC(OCSP_F_OCSP_CHECK_DELEGATED), "ocsp_check_delegated"}, - {ERR_FUNC(OCSP_F_OCSP_CHECK_IDS), "ocsp_check_ids"}, - {ERR_FUNC(OCSP_F_OCSP_CHECK_ISSUER), "ocsp_check_issuer"}, - {ERR_FUNC(OCSP_F_OCSP_CHECK_VALIDITY), "OCSP_check_validity"}, - {ERR_FUNC(OCSP_F_OCSP_MATCH_ISSUERID), "ocsp_match_issuerid"}, - {ERR_FUNC(OCSP_F_OCSP_PARSE_URL), "OCSP_parse_url"}, - {ERR_FUNC(OCSP_F_OCSP_REQUEST_SIGN), "OCSP_request_sign"}, - {ERR_FUNC(OCSP_F_OCSP_REQUEST_VERIFY), "OCSP_request_verify"}, - {ERR_FUNC(OCSP_F_OCSP_RESPONSE_GET1_BASIC), "OCSP_response_get1_basic"}, - {ERR_FUNC(OCSP_F_PARSE_HTTP_LINE1), "parse_http_line1"}, +static const ERR_STRING_DATA OCSP_str_functs[] = { + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_D2I_OCSP_NONCE, 0), "d2i_ocsp_nonce"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_BASIC_ADD1_STATUS, 0), + "OCSP_basic_add1_status"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_BASIC_SIGN, 0), "OCSP_basic_sign"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_BASIC_SIGN_CTX, 0), + "OCSP_basic_sign_ctx"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_BASIC_VERIFY, 0), "OCSP_basic_verify"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_CERT_ID_NEW, 0), "OCSP_cert_id_new"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_CHECK_DELEGATED, 0), + "ocsp_check_delegated"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_CHECK_IDS, 0), "ocsp_check_ids"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_CHECK_ISSUER, 0), "ocsp_check_issuer"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_CHECK_VALIDITY, 0), + "OCSP_check_validity"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_MATCH_ISSUERID, 0), + "ocsp_match_issuerid"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_PARSE_URL, 0), "OCSP_parse_url"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_REQUEST_SIGN, 0), "OCSP_request_sign"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_REQUEST_VERIFY, 0), + "OCSP_request_verify"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_OCSP_RESPONSE_GET1_BASIC, 0), + "OCSP_response_get1_basic"}, + {ERR_PACK(ERR_LIB_OCSP, OCSP_F_PARSE_HTTP_LINE1, 0), "parse_http_line1"}, {0, NULL} }; -static ERR_STRING_DATA OCSP_str_reasons[] = { - {ERR_REASON(OCSP_R_CERTIFICATE_VERIFY_ERROR), "certificate verify error"}, - {ERR_REASON(OCSP_R_DIGEST_ERR), "digest err"}, - {ERR_REASON(OCSP_R_ERROR_IN_NEXTUPDATE_FIELD), - "error in nextupdate field"}, - {ERR_REASON(OCSP_R_ERROR_IN_THISUPDATE_FIELD), - "error in thisupdate field"}, - {ERR_REASON(OCSP_R_ERROR_PARSING_URL), "error parsing url"}, - {ERR_REASON(OCSP_R_MISSING_OCSPSIGNING_USAGE), - "missing ocspsigning usage"}, - {ERR_REASON(OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE), - "nextupdate before thisupdate"}, - {ERR_REASON(OCSP_R_NOT_BASIC_RESPONSE), "not basic response"}, - {ERR_REASON(OCSP_R_NO_CERTIFICATES_IN_CHAIN), "no certificates in chain"}, - {ERR_REASON(OCSP_R_NO_RESPONSE_DATA), "no response data"}, - {ERR_REASON(OCSP_R_NO_REVOKED_TIME), "no revoked time"}, - {ERR_REASON(OCSP_R_NO_SIGNER_KEY), "no signer key"}, - {ERR_REASON(OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), - "private key does not match certificate"}, - {ERR_REASON(OCSP_R_REQUEST_NOT_SIGNED), "request not signed"}, - {ERR_REASON(OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA), - "response contains no revocation data"}, - {ERR_REASON(OCSP_R_ROOT_CA_NOT_TRUSTED), "root ca not trusted"}, - {ERR_REASON(OCSP_R_SERVER_RESPONSE_ERROR), "server response error"}, - {ERR_REASON(OCSP_R_SERVER_RESPONSE_PARSE_ERROR), - "server response parse error"}, - {ERR_REASON(OCSP_R_SIGNATURE_FAILURE), "signature failure"}, - {ERR_REASON(OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND), - "signer certificate not found"}, - {ERR_REASON(OCSP_R_STATUS_EXPIRED), "status expired"}, - {ERR_REASON(OCSP_R_STATUS_NOT_YET_VALID), "status not yet valid"}, - {ERR_REASON(OCSP_R_STATUS_TOO_OLD), "status too old"}, - {ERR_REASON(OCSP_R_UNKNOWN_MESSAGE_DIGEST), "unknown message digest"}, - {ERR_REASON(OCSP_R_UNKNOWN_NID), "unknown nid"}, - {ERR_REASON(OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE), - "unsupported requestorname type"}, +static const ERR_STRING_DATA OCSP_str_reasons[] = { + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_CERTIFICATE_VERIFY_ERROR), + "certificate verify error"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_DIGEST_ERR), "digest err"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_ERROR_IN_NEXTUPDATE_FIELD), + "error in nextupdate field"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_ERROR_IN_THISUPDATE_FIELD), + "error in thisupdate field"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_ERROR_PARSING_URL), "error parsing url"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_MISSING_OCSPSIGNING_USAGE), + "missing ocspsigning usage"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE), + "nextupdate before thisupdate"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_NOT_BASIC_RESPONSE), + "not basic response"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_NO_CERTIFICATES_IN_CHAIN), + "no certificates in chain"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_NO_RESPONSE_DATA), "no response data"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_NO_REVOKED_TIME), "no revoked time"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_NO_SIGNER_KEY), "no signer key"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), + "private key does not match certificate"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_REQUEST_NOT_SIGNED), + "request not signed"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA), + "response contains no revocation data"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_ROOT_CA_NOT_TRUSTED), + "root ca not trusted"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_SERVER_RESPONSE_ERROR), + "server response error"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_SERVER_RESPONSE_PARSE_ERROR), + "server response parse error"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_SIGNATURE_FAILURE), "signature failure"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND), + "signer certificate not found"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_STATUS_EXPIRED), "status expired"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_STATUS_NOT_YET_VALID), + "status not yet valid"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_STATUS_TOO_OLD), "status too old"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_UNKNOWN_MESSAGE_DIGEST), + "unknown message digest"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_UNKNOWN_NID), "unknown nid"}, + {ERR_PACK(ERR_LIB_OCSP, 0, OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE), + "unsupported requestorname type"}, {0, NULL} }; @@ -81,10 +92,9 @@ static ERR_STRING_DATA OCSP_str_reasons[] = { int ERR_load_OCSP_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(OCSP_str_functs[0].error) == NULL) { - ERR_load_strings(0, OCSP_str_functs); - ERR_load_strings(0, OCSP_str_reasons); + ERR_load_strings_const(OCSP_str_functs); + ERR_load_strings_const(OCSP_str_reasons); } #endif return 1; diff --git a/crypto/ocsp/ocsp_ext.c b/crypto/ocsp/ocsp_ext.c index b829b2e4..27ee2124 100644 --- a/crypto/ocsp/ocsp_ext.c +++ b/crypto/ocsp/ocsp_ext.c @@ -22,7 +22,7 @@ int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x) { - return (X509v3_get_ext_count(x->tbsRequest.requestExtensions)); + return X509v3_get_ext_count(x->tbsRequest.requestExtensions); } int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos) @@ -46,12 +46,12 @@ 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) { - return (X509v3_get_ext(x->tbsRequest.requestExtensions, loc)); + return X509v3_get_ext(x->tbsRequest.requestExtensions, loc); } X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc) { - return (X509v3_delete_ext(x->tbsRequest.requestExtensions, loc)); + return X509v3_delete_ext(x->tbsRequest.requestExtensions, loc); } void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, int *idx) @@ -76,18 +76,18 @@ int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc) int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x) { - return (X509v3_get_ext_count(x->singleRequestExtensions)); + return X509v3_get_ext_count(x->singleRequestExtensions); } int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos) { - return (X509v3_get_ext_by_NID(x->singleRequestExtensions, nid, lastpos)); + return X509v3_get_ext_by_NID(x->singleRequestExtensions, nid, lastpos); } int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos) { - return (X509v3_get_ext_by_OBJ(x->singleRequestExtensions, obj, lastpos)); + return X509v3_get_ext_by_OBJ(x->singleRequestExtensions, obj, lastpos); } int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos) @@ -98,12 +98,12 @@ 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) { - return (X509v3_get_ext(x->singleRequestExtensions, loc)); + return X509v3_get_ext(x->singleRequestExtensions, loc); } X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc) { - return (X509v3_delete_ext(x->singleRequestExtensions, loc)); + return X509v3_delete_ext(x->singleRequestExtensions, loc); } void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx) @@ -127,7 +127,7 @@ int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc) int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x) { - return (X509v3_get_ext_count(x->tbsResponseData.responseExtensions)); + return X509v3_get_ext_count(x->tbsResponseData.responseExtensions); } int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos) @@ -152,12 +152,12 @@ int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc) { - return (X509v3_get_ext(x->tbsResponseData.responseExtensions, loc)); + return X509v3_get_ext(x->tbsResponseData.responseExtensions, loc); } X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc) { - return (X509v3_delete_ext(x->tbsResponseData.responseExtensions, loc)); + return X509v3_delete_ext(x->tbsResponseData.responseExtensions, loc); } void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, @@ -184,34 +184,34 @@ int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc) int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x) { - return (X509v3_get_ext_count(x->singleExtensions)); + return X509v3_get_ext_count(x->singleExtensions); } int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos) { - return (X509v3_get_ext_by_NID(x->singleExtensions, nid, lastpos)); + return X509v3_get_ext_by_NID(x->singleExtensions, nid, lastpos); } int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, int lastpos) { - return (X509v3_get_ext_by_OBJ(x->singleExtensions, obj, lastpos)); + return X509v3_get_ext_by_OBJ(x->singleExtensions, obj, lastpos); } int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, int lastpos) { - return (X509v3_get_ext_by_critical(x->singleExtensions, crit, lastpos)); + return X509v3_get_ext_by_critical(x->singleExtensions, crit, lastpos); } X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc) { - return (X509v3_get_ext(x->singleExtensions, loc)); + return X509v3_get_ext(x->singleExtensions, loc); } X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc) { - return (X509v3_delete_ext(x->singleExtensions, loc)); + return X509v3_delete_ext(x->singleExtensions, loc); } void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, diff --git a/crypto/ocsp/ocsp_ht.c b/crypto/ocsp/ocsp_ht.c index d8796ca6..42c36864 100644 --- a/crypto/ocsp/ocsp_ht.c +++ b/crypto/ocsp/ocsp_ht.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,11 +7,11 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include #include -#include +#include "internal/ctype.h" #include -#include "e_os.h" #include #include #include @@ -209,7 +209,7 @@ static int parse_http_line1(char *line) char *p, *q, *r; /* Skip to first white space (passed protocol info) */ - for (p = line; *p && !isspace((unsigned char)*p); p++) + for (p = line; *p && !ossl_isspace(*p); p++) continue; if (!*p) { OCSPerr(OCSP_F_PARSE_HTTP_LINE1, OCSP_R_SERVER_RESPONSE_PARSE_ERROR); @@ -217,7 +217,7 @@ static int parse_http_line1(char *line) } /* Skip past white space to start of response code */ - while (*p && isspace((unsigned char)*p)) + while (*p && ossl_isspace(*p)) p++; if (!*p) { @@ -226,7 +226,7 @@ static int parse_http_line1(char *line) } /* Find end of response code: first whitespace after start of code */ - for (q = p; *q && !isspace((unsigned char)*q); q++) + for (q = p; *q && !ossl_isspace(*q); q++) continue; if (!*q) { @@ -244,7 +244,7 @@ static int parse_http_line1(char *line) return 0; /* Skip over any leading white space in message */ - while (*q && isspace((unsigned char)*q)) + while (*q && ossl_isspace(*q)) q++; if (*q) { @@ -253,7 +253,7 @@ static int parse_http_line1(char *line) */ /* We know q has a non white space character so this is OK */ - for (r = q + strlen(q) - 1; isspace((unsigned char)*r); r--) + for (r = q + strlen(q) - 1; ossl_isspace(*r); r--) *r = 0; } if (retcode != 200) { diff --git a/crypto/ocsp/ocsp_lcl.h b/crypto/ocsp/ocsp_lcl.h index d1cf1583..36646fdf 100644 --- a/crypto/ocsp/ocsp_lcl.h +++ b/crypto/ocsp/ocsp_lcl.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -224,6 +224,10 @@ struct ocsp_service_locator_st { ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),&(o)->signatureAlgorithm,\ NULL,(o)->signature,&(o)->tbsResponseData,pkey,md) +# define OCSP_BASICRESP_sign_ctx(o,ctx,d) \ + ASN1_item_sign_ctx(ASN1_ITEM_rptr(OCSP_RESPDATA),&(o)->signatureAlgorithm,\ + NULL,(o)->signature,&(o)->tbsResponseData,ctx) + # define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\ &(a)->optionalSignature->signatureAlgorithm,\ (a)->optionalSignature->signature,&(a)->tbsRequest,r) diff --git a/crypto/ocsp/ocsp_srv.c b/crypto/ocsp/ocsp_srv.c index 46a4bf78..eff6ddbd 100644 --- a/crypto/ocsp/ocsp_srv.c +++ b/crypto/ocsp/ocsp_srv.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -168,15 +168,28 @@ int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert) return 1; } -int OCSP_basic_sign(OCSP_BASICRESP *brsp, - X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, +/* + * Sign an OCSP response using the parameters contained in the digest context, + * set the responderID to the subject name in the signer's certificate, and + * include one or more optional certificates in the response. + */ + +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, STACK_OF(X509) *certs, unsigned long flags) { int i; OCSP_RESPID *rid; + EVP_PKEY *pkey; - if (!X509_check_private_key(signer, key)) { - OCSPerr(OCSP_F_OCSP_BASIC_SIGN, + if (ctx == NULL || EVP_MD_CTX_pkey_ctx(ctx) == NULL) { + OCSPerr(OCSP_F_OCSP_BASIC_SIGN_CTX, OCSP_R_NO_SIGNER_KEY); + goto err; + } + + pkey = EVP_PKEY_CTX_get0_pkey(EVP_MD_CTX_pkey_ctx(ctx)); + if (pkey == NULL || !X509_check_private_key(signer, pkey)) { + OCSPerr(OCSP_F_OCSP_BASIC_SIGN_CTX, OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE); goto err; } @@ -208,7 +221,7 @@ int OCSP_basic_sign(OCSP_BASICRESP *brsp, * -- Richard Levitte */ - if (!OCSP_BASICRESP_sign(brsp, key, dgst, 0)) + if (!OCSP_BASICRESP_sign_ctx(brsp, ctx, 0)) goto err; return 1; @@ -216,6 +229,23 @@ int OCSP_basic_sign(OCSP_BASICRESP *brsp, return 0; } +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags) +{ + EVP_MD_CTX *ctx = EVP_MD_CTX_new(); + EVP_PKEY_CTX *pkctx = NULL; + int i; + + if (!EVP_DigestSignInit(ctx, &pkctx, dgst, NULL, key)) { + EVP_MD_CTX_free(ctx); + return 0; + } + i = OCSP_basic_sign_ctx(brsp, signer, ctx, certs, flags); + EVP_MD_CTX_free(ctx); + return i; +} + int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert) { if (!X509_NAME_set(&respid->value.byName, X509_get_subject_name(cert))) @@ -265,7 +295,7 @@ int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert) return (ASN1_STRING_length(respid->value.byKey) == SHA_DIGEST_LENGTH) && (memcmp(ASN1_STRING_get0_data(respid->value.byKey), md, SHA_DIGEST_LENGTH) == 0); - } else if(respid->type == V_OCSP_RESPID_NAME) { + } else if (respid->type == V_OCSP_RESPID_NAME) { if (respid->value.byName == NULL) return 0; diff --git a/crypto/pariscid.pl b/crypto/pariscid.pl index 3d4a5f8a..f82e27ac 100644 --- a/crypto/pariscid.pl +++ b/crypto/pariscid.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2009-2018 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -160,7 +160,7 @@ L\$oop_cmp or %r29,$rv,$rv sub %r0,$rv,%r29 - extru %r29,0,1,$rv + extru %r29,31,1,$rv L\$no_data bv ($rp) .EXIT diff --git a/crypto/pem/pem_err.c b/crypto/pem/pem_err.c index f36d8932..c4c09e4c 100644 --- a/crypto/pem/pem_err.c +++ b/crypto/pem/pem_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,95 +8,106 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_PEM,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_PEM,0,reason) - -static ERR_STRING_DATA PEM_str_functs[] = { - {ERR_FUNC(PEM_F_B2I_DSS), "b2i_dss"}, - {ERR_FUNC(PEM_F_B2I_PVK_BIO), "b2i_PVK_bio"}, - {ERR_FUNC(PEM_F_B2I_RSA), "b2i_rsa"}, - {ERR_FUNC(PEM_F_CHECK_BITLEN_DSA), "check_bitlen_dsa"}, - {ERR_FUNC(PEM_F_CHECK_BITLEN_RSA), "check_bitlen_rsa"}, - {ERR_FUNC(PEM_F_D2I_PKCS8PRIVATEKEY_BIO), "d2i_PKCS8PrivateKey_bio"}, - {ERR_FUNC(PEM_F_D2I_PKCS8PRIVATEKEY_FP), "d2i_PKCS8PrivateKey_fp"}, - {ERR_FUNC(PEM_F_DO_B2I), "do_b2i"}, - {ERR_FUNC(PEM_F_DO_B2I_BIO), "do_b2i_bio"}, - {ERR_FUNC(PEM_F_DO_BLOB_HEADER), "do_blob_header"}, - {ERR_FUNC(PEM_F_DO_PK8PKEY), "do_pk8pkey"}, - {ERR_FUNC(PEM_F_DO_PK8PKEY_FP), "do_pk8pkey_fp"}, - {ERR_FUNC(PEM_F_DO_PVK_BODY), "do_PVK_body"}, - {ERR_FUNC(PEM_F_DO_PVK_HEADER), "do_PVK_header"}, - {ERR_FUNC(PEM_F_I2B_PVK), "i2b_PVK"}, - {ERR_FUNC(PEM_F_I2B_PVK_BIO), "i2b_PVK_bio"}, - {ERR_FUNC(PEM_F_LOAD_IV), "load_iv"}, - {ERR_FUNC(PEM_F_PEM_ASN1_READ), "PEM_ASN1_read"}, - {ERR_FUNC(PEM_F_PEM_ASN1_READ_BIO), "PEM_ASN1_read_bio"}, - {ERR_FUNC(PEM_F_PEM_ASN1_WRITE), "PEM_ASN1_write"}, - {ERR_FUNC(PEM_F_PEM_ASN1_WRITE_BIO), "PEM_ASN1_write_bio"}, - {ERR_FUNC(PEM_F_PEM_DEF_CALLBACK), "PEM_def_callback"}, - {ERR_FUNC(PEM_F_PEM_DO_HEADER), "PEM_do_header"}, - {ERR_FUNC(PEM_F_PEM_GET_EVP_CIPHER_INFO), "PEM_get_EVP_CIPHER_INFO"}, - {ERR_FUNC(PEM_F_PEM_READ), "PEM_read"}, - {ERR_FUNC(PEM_F_PEM_READ_BIO), "PEM_read_bio"}, - {ERR_FUNC(PEM_F_PEM_READ_BIO_DHPARAMS), "PEM_read_bio_DHparams"}, - {ERR_FUNC(PEM_F_PEM_READ_BIO_PARAMETERS), "PEM_read_bio_Parameters"}, - {ERR_FUNC(PEM_F_PEM_READ_BIO_PRIVATEKEY), "PEM_read_bio_PrivateKey"}, - {ERR_FUNC(PEM_F_PEM_READ_DHPARAMS), "PEM_read_DHparams"}, - {ERR_FUNC(PEM_F_PEM_READ_PRIVATEKEY), "PEM_read_PrivateKey"}, - {ERR_FUNC(PEM_F_PEM_SIGNFINAL), "PEM_SignFinal"}, - {ERR_FUNC(PEM_F_PEM_WRITE), "PEM_write"}, - {ERR_FUNC(PEM_F_PEM_WRITE_BIO), "PEM_write_bio"}, - {ERR_FUNC(PEM_F_PEM_WRITE_PRIVATEKEY), "PEM_write_PrivateKey"}, - {ERR_FUNC(PEM_F_PEM_X509_INFO_READ), "PEM_X509_INFO_read"}, - {ERR_FUNC(PEM_F_PEM_X509_INFO_READ_BIO), "PEM_X509_INFO_read_bio"}, - {ERR_FUNC(PEM_F_PEM_X509_INFO_WRITE_BIO), "PEM_X509_INFO_write_bio"}, +static const ERR_STRING_DATA PEM_str_functs[] = { + {ERR_PACK(ERR_LIB_PEM, PEM_F_B2I_DSS, 0), "b2i_dss"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_B2I_PVK_BIO, 0), "b2i_PVK_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_B2I_RSA, 0), "b2i_rsa"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_CHECK_BITLEN_DSA, 0), "check_bitlen_dsa"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_CHECK_BITLEN_RSA, 0), "check_bitlen_rsa"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_D2I_PKCS8PRIVATEKEY_BIO, 0), + "d2i_PKCS8PrivateKey_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_D2I_PKCS8PRIVATEKEY_FP, 0), + "d2i_PKCS8PrivateKey_fp"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_B2I, 0), "do_b2i"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_B2I_BIO, 0), "do_b2i_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_BLOB_HEADER, 0), "do_blob_header"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_PK8PKEY, 0), "do_pk8pkey"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_PK8PKEY_FP, 0), "do_pk8pkey_fp"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_PVK_BODY, 0), "do_PVK_body"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_DO_PVK_HEADER, 0), "do_PVK_header"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_GET_HEADER_AND_DATA, 0), + "get_header_and_data"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_GET_NAME, 0), "get_name"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_I2B_PVK, 0), "i2b_PVK"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_I2B_PVK_BIO, 0), "i2b_PVK_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_LOAD_IV, 0), "load_iv"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_READ, 0), "PEM_ASN1_read"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_READ_BIO, 0), "PEM_ASN1_read_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_WRITE, 0), "PEM_ASN1_write"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_ASN1_WRITE_BIO, 0), "PEM_ASN1_write_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_DEF_CALLBACK, 0), "PEM_def_callback"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_DO_HEADER, 0), "PEM_do_header"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_GET_EVP_CIPHER_INFO, 0), + "PEM_get_EVP_CIPHER_INFO"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ, 0), "PEM_read"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_BIO, 0), "PEM_read_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_BIO_DHPARAMS, 0), + "PEM_read_bio_DHparams"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_BIO_EX, 0), "PEM_read_bio_ex"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_BIO_PARAMETERS, 0), + "PEM_read_bio_Parameters"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_BIO_PRIVATEKEY, 0), + "PEM_read_bio_PrivateKey"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_DHPARAMS, 0), "PEM_read_DHparams"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_READ_PRIVATEKEY, 0), + "PEM_read_PrivateKey"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_SIGNFINAL, 0), "PEM_SignFinal"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE, 0), "PEM_write"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_BIO, 0), "PEM_write_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_PRIVATEKEY, 0), + "PEM_write_PrivateKey"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_READ, 0), "PEM_X509_INFO_read"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_READ_BIO, 0), + "PEM_X509_INFO_read_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_WRITE_BIO, 0), + "PEM_X509_INFO_write_bio"}, {0, NULL} }; -static ERR_STRING_DATA PEM_str_reasons[] = { - {ERR_REASON(PEM_R_BAD_BASE64_DECODE), "bad base64 decode"}, - {ERR_REASON(PEM_R_BAD_DECRYPT), "bad decrypt"}, - {ERR_REASON(PEM_R_BAD_END_LINE), "bad end line"}, - {ERR_REASON(PEM_R_BAD_IV_CHARS), "bad iv chars"}, - {ERR_REASON(PEM_R_BAD_MAGIC_NUMBER), "bad magic number"}, - {ERR_REASON(PEM_R_BAD_PASSWORD_READ), "bad password read"}, - {ERR_REASON(PEM_R_BAD_VERSION_NUMBER), "bad version number"}, - {ERR_REASON(PEM_R_BIO_WRITE_FAILURE), "bio write failure"}, - {ERR_REASON(PEM_R_CIPHER_IS_NULL), "cipher is null"}, - {ERR_REASON(PEM_R_ERROR_CONVERTING_PRIVATE_KEY), - "error converting private key"}, - {ERR_REASON(PEM_R_EXPECTING_PRIVATE_KEY_BLOB), - "expecting private key blob"}, - {ERR_REASON(PEM_R_EXPECTING_PUBLIC_KEY_BLOB), - "expecting public key blob"}, - {ERR_REASON(PEM_R_HEADER_TOO_LONG), "header too long"}, - {ERR_REASON(PEM_R_INCONSISTENT_HEADER), "inconsistent header"}, - {ERR_REASON(PEM_R_KEYBLOB_HEADER_PARSE_ERROR), - "keyblob header parse error"}, - {ERR_REASON(PEM_R_KEYBLOB_TOO_SHORT), "keyblob too short"}, - {ERR_REASON(PEM_R_MISSING_DEK_IV), "missing dek iv"}, - {ERR_REASON(PEM_R_NOT_DEK_INFO), "not dek info"}, - {ERR_REASON(PEM_R_NOT_ENCRYPTED), "not encrypted"}, - {ERR_REASON(PEM_R_NOT_PROC_TYPE), "not proc type"}, - {ERR_REASON(PEM_R_NO_START_LINE), "no start line"}, - {ERR_REASON(PEM_R_PROBLEMS_GETTING_PASSWORD), - "problems getting password"}, - {ERR_REASON(PEM_R_PVK_DATA_TOO_SHORT), "pvk data too short"}, - {ERR_REASON(PEM_R_PVK_TOO_SHORT), "pvk too short"}, - {ERR_REASON(PEM_R_READ_KEY), "read key"}, - {ERR_REASON(PEM_R_SHORT_HEADER), "short header"}, - {ERR_REASON(PEM_R_UNEXPECTED_DEK_IV), "unexpected dek iv"}, - {ERR_REASON(PEM_R_UNSUPPORTED_CIPHER), "unsupported cipher"}, - {ERR_REASON(PEM_R_UNSUPPORTED_ENCRYPTION), "unsupported encryption"}, - {ERR_REASON(PEM_R_UNSUPPORTED_KEY_COMPONENTS), - "unsupported key components"}, +static const ERR_STRING_DATA PEM_str_reasons[] = { + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_BASE64_DECODE), "bad base64 decode"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_DECRYPT), "bad decrypt"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_END_LINE), "bad end line"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_IV_CHARS), "bad iv chars"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_MAGIC_NUMBER), "bad magic number"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_PASSWORD_READ), "bad password read"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BAD_VERSION_NUMBER), "bad version number"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_BIO_WRITE_FAILURE), "bio write failure"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_CIPHER_IS_NULL), "cipher is null"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_ERROR_CONVERTING_PRIVATE_KEY), + "error converting private key"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_EXPECTING_PRIVATE_KEY_BLOB), + "expecting private key blob"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_EXPECTING_PUBLIC_KEY_BLOB), + "expecting public key blob"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_HEADER_TOO_LONG), "header too long"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_INCONSISTENT_HEADER), + "inconsistent header"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_KEYBLOB_HEADER_PARSE_ERROR), + "keyblob header parse error"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_KEYBLOB_TOO_SHORT), "keyblob too short"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_MISSING_DEK_IV), "missing dek iv"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NOT_DEK_INFO), "not dek info"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NOT_ENCRYPTED), "not encrypted"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NOT_PROC_TYPE), "not proc type"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_NO_START_LINE), "no start line"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PROBLEMS_GETTING_PASSWORD), + "problems getting password"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PVK_DATA_TOO_SHORT), "pvk data too short"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_PVK_TOO_SHORT), "pvk too short"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_READ_KEY), "read key"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_SHORT_HEADER), "short header"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNEXPECTED_DEK_IV), "unexpected dek iv"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_CIPHER), "unsupported cipher"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_ENCRYPTION), + "unsupported encryption"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_KEY_COMPONENTS), + "unsupported key components"}, {0, NULL} }; @@ -105,10 +116,9 @@ static ERR_STRING_DATA PEM_str_reasons[] = { int ERR_load_PEM_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(PEM_str_functs[0].error) == NULL) { - ERR_load_strings(0, PEM_str_functs); - ERR_load_strings(0, PEM_str_reasons); + ERR_load_strings_const(PEM_str_functs); + ERR_load_strings_const(PEM_str_reasons); } #endif return 1; diff --git a/crypto/pem/pem_info.c b/crypto/pem/pem_info.c index 78d4476a..a45fe830 100644 --- a/crypto/pem/pem_info.c +++ b/crypto/pem/pem_info.c @@ -26,12 +26,12 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_X509_INFO_READ, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_X509_INFO_read_bio(b, sk, cb, u); BIO_free(b); - return (ret); + return ret; } #endif @@ -240,7 +240,7 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, OPENSSL_free(name); OPENSSL_free(header); OPENSSL_free(data); - return (ret); + return ret; } /* A TJH addition */ @@ -256,7 +256,13 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, if (enc != NULL) { objstr = OBJ_nid2sn(EVP_CIPHER_nid(enc)); - if (objstr == NULL) { + if (objstr == NULL + /* + * Check "Proc-Type: 4,Encrypted\nDEK-Info: objstr,hex-iv\n" + * fits into buf + */ + || (strlen(objstr) + 23 + 2 * EVP_CIPHER_iv_length(enc) + 13) + > sizeof(buf)) { PEMerr(PEM_F_PEM_X509_INFO_WRITE_BIO, PEM_R_UNSUPPORTED_CIPHER); goto err; } @@ -291,10 +297,7 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, goto err; } - /* create the right magic header stuff */ - OPENSSL_assert(strlen(objstr) + 23 - + 2 * EVP_CIPHER_iv_length(enc) + 13 <= - sizeof(buf)); + /* Create the right magic header stuff */ buf[0] = '\0'; PEM_proc_type(buf, PEM_TYPE_ENCRYPTED); PEM_dek_info(buf, objstr, EVP_CIPHER_iv_length(enc), @@ -330,5 +333,5 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, err: OPENSSL_cleanse(buf, PEM_BUFSIZE); - return (ret); + return ret; } diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c index e9202f44..97b8a0d7 100644 --- a/crypto/pem/pem_lib.c +++ b/crypto/pem/pem_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include #include "internal/cryptlib.h" #include @@ -30,12 +30,8 @@ int pem_check_suffix(const char *pem_str, const char *suffix); int PEM_def_callback(char *buf, int num, int w, void *key) { -#if defined(OPENSSL_NO_STDIO) || defined(OPENSSL_NO_UI) - int i; -#else int i, j; const char *prompt; -#endif if (key) { i = strlen(key); @@ -44,10 +40,6 @@ int PEM_def_callback(char *buf, int num, int w, void *key) return i; } -#if defined(OPENSSL_NO_STDIO) || defined(OPENSSL_NO_UI) - PEMerr(PEM_F_PEM_DEF_CALLBACK, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); - return -1; -#else prompt = EVP_get_pw_prompt(); if (prompt == NULL) prompt = "Enter PEM pass phrase:"; @@ -74,12 +66,12 @@ int PEM_def_callback(char *buf, int num, int w, void *key) break; } return j; -#endif } void PEM_proc_type(char *buf, int type) { const char *str; + char *p = buf + strlen(buf); if (type == PEM_TYPE_ENCRYPTED) str = "ENCRYPTED"; @@ -90,29 +82,29 @@ void PEM_proc_type(char *buf, int type) else str = "BAD-TYPE"; - OPENSSL_strlcat(buf, "Proc-Type: 4,", PEM_BUFSIZE); - OPENSSL_strlcat(buf, str, PEM_BUFSIZE); - OPENSSL_strlcat(buf, "\n", PEM_BUFSIZE); + BIO_snprintf(p, PEM_BUFSIZE - (size_t)(p - buf), "Proc-Type: 4,%s\n", str); } void PEM_dek_info(char *buf, const char *type, int len, char *str) { - static const unsigned char map[17] = "0123456789ABCDEF"; long i; - int j; + char *p = buf + strlen(buf); + int j = PEM_BUFSIZE - (size_t)(p - buf), n; - OPENSSL_strlcat(buf, "DEK-Info: ", PEM_BUFSIZE); - OPENSSL_strlcat(buf, type, PEM_BUFSIZE); - OPENSSL_strlcat(buf, ",", PEM_BUFSIZE); - j = strlen(buf); - if (j + (len * 2) + 1 > PEM_BUFSIZE) - return; - for (i = 0; i < len; i++) { - buf[j + i * 2] = map[(str[i] >> 4) & 0x0f]; - buf[j + i * 2 + 1] = map[(str[i]) & 0x0f]; + n = BIO_snprintf(p, j, "DEK-Info: %s,", type); + if (n > 0) { + j -= n; + p += n; + for (i = 0; i < len; i++) { + n = BIO_snprintf(p, j, "%02X", 0xff & str[i]); + if (n <= 0) + return; + j -= n; + p += n; + } + if (j > 1) + strcpy(p, "\n"); } - buf[j + i * 2] = '\n'; - buf[j + i * 2 + 1] = '\0'; } #ifndef OPENSSL_NO_STDIO @@ -124,12 +116,12 @@ void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_ASN1_READ, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_ASN1_read_bio(d2i, name, b, x, cb, u); BIO_free(b); - return (ret); + return ret; } #endif @@ -228,28 +220,41 @@ static int check_pem(const char *nm, const char *name) return 0; } -int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u) +static void pem_free(void *p, unsigned int flags, size_t num) +{ + if (flags & PEM_FLAG_SECURE) + OPENSSL_secure_clear_free(p, num); + else + OPENSSL_free(p); +} + +static void *pem_malloc(int num, unsigned int flags) +{ + return (flags & PEM_FLAG_SECURE) ? OPENSSL_secure_malloc(num) + : OPENSSL_malloc(num); +} + +static int pem_bytes_read_bio_flags(unsigned char **pdata, long *plen, + char **pnm, const char *name, BIO *bp, + pem_password_cb *cb, void *u, + unsigned int flags) { EVP_CIPHER_INFO cipher; char *nm = NULL, *header = NULL; unsigned char *data = NULL; - long len; + long len = 0; int ret = 0; - for (;;) { - if (!PEM_read_bio(bp, &nm, &header, &data, &len)) { + do { + pem_free(nm, flags, 0); + pem_free(header, flags, 0); + pem_free(data, flags, len); + if (!PEM_read_bio_ex(bp, &nm, &header, &data, &len, flags)) { if (ERR_GET_REASON(ERR_peek_error()) == PEM_R_NO_START_LINE) ERR_add_error_data(2, "Expecting: ", name); return 0; } - if (check_pem(nm, name)) - break; - OPENSSL_free(nm); - OPENSSL_free(header); - OPENSSL_free(data); - } + } while (!check_pem(nm, name)); if (!PEM_get_EVP_CIPHER_INFO(header, &cipher)) goto err; if (!PEM_do_header(&cipher, data, &len, cb, u)) @@ -258,20 +263,34 @@ int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, *pdata = data; *plen = len; - if (pnm) + if (pnm != NULL) *pnm = nm; ret = 1; err: - if (!ret || !pnm) - OPENSSL_free(nm); - OPENSSL_free(header); + if (!ret || pnm == NULL) + pem_free(nm, flags, 0); + pem_free(header, flags, 0); if (!ret) - OPENSSL_free(data); + pem_free(data, flags, len); return ret; } +int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u) { + return pem_bytes_read_bio_flags(pdata, plen, pnm, name, bp, cb, u, + PEM_FLAG_EAY_COMPATIBLE); +} + +int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u) { + return pem_bytes_read_bio_flags(pdata, plen, pnm, name, bp, cb, u, + PEM_FLAG_SECURE | PEM_FLAG_EAY_COMPATIBLE); +} + #ifndef OPENSSL_NO_STDIO int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, void *x, const EVP_CIPHER *enc, unsigned char *kstr, @@ -282,12 +301,12 @@ int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_ASN1_WRITE, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_ASN1_write_bio(i2d, name, b, x, enc, kstr, klen, callback, u); BIO_free(b); - return (ret); + return ret; } #endif @@ -305,7 +324,14 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, if (enc != NULL) { objstr = OBJ_nid2sn(EVP_CIPHER_nid(enc)); - if (objstr == NULL || EVP_CIPHER_iv_length(enc) == 0) { + if (objstr == NULL || EVP_CIPHER_iv_length(enc) == 0 + || EVP_CIPHER_iv_length(enc) > (int)sizeof(iv) + /* + * Check "Proc-Type: 4,Encrypted\nDEK-Info: objstr,hex-iv\n" + * fits into buf + */ + || (strlen(objstr) + 23 + 2 * EVP_CIPHER_iv_length(enc) + 13) + > sizeof(buf)) { PEMerr(PEM_F_PEM_ASN1_WRITE_BIO, PEM_R_UNSUPPORTED_CIPHER); goto err; } @@ -342,8 +368,6 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, #endif kstr = (unsigned char *)buf; } - RAND_add(data, i, 0); /* put in the RSA key. */ - OPENSSL_assert(EVP_CIPHER_iv_length(enc) <= (int)sizeof(iv)); if (RAND_bytes(iv, EVP_CIPHER_iv_length(enc)) <= 0) /* Generate a salt */ goto err; /* @@ -356,9 +380,6 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, if (kstr == (unsigned char *)buf) OPENSSL_cleanse(buf, PEM_BUFSIZE); - OPENSSL_assert(strlen(objstr) + 23 + 2 * EVP_CIPHER_iv_length(enc) + 13 - <= sizeof(buf)); - buf[0] = '\0'; PEM_proc_type(buf, PEM_TYPE_ENCRYPTED); PEM_dek_info(buf, objstr, EVP_CIPHER_iv_length(enc), (char *)iv); @@ -386,7 +407,7 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, EVP_CIPHER_CTX_free(ctx); OPENSSL_cleanse(buf, PEM_BUFSIZE); OPENSSL_clear_free(data, (unsigned int)dsize); - return (ret); + return ret; } int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen, @@ -554,14 +575,14 @@ static int load_iv(char **fromp, unsigned char *to, int num) v = OPENSSL_hexchar2int(*from); if (v < 0) { PEMerr(PEM_F_LOAD_IV, PEM_R_BAD_IV_CHARS); - return (0); + return 0; } from++; to[i / 2] |= v << (long)((!(i & 1)) * 4); } *fromp = from; - return (1); + return 1; } #ifndef OPENSSL_NO_STDIO @@ -573,12 +594,12 @@ int PEM_write(FILE *fp, const char *name, const char *header, if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_WRITE, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_write_bio(b, name, header, data, len); BIO_free(b); - return (ret); + return ret; } #endif @@ -635,12 +656,12 @@ int PEM_write_bio(BIO *bp, const char *name, const char *header, goto err; OPENSSL_clear_free(buf, PEM_BUFSIZE * 8); EVP_ENCODE_CTX_free(ctx); - return (i + outl); + return i + outl; err: OPENSSL_clear_free(buf, PEM_BUFSIZE * 8); EVP_ENCODE_CTX_free(ctx); PEMerr(PEM_F_PEM_WRITE_BIO, reason); - return (0); + return 0; } #ifndef OPENSSL_NO_STDIO @@ -652,186 +673,300 @@ int PEM_read(FILE *fp, char **name, char **header, unsigned char **data, if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_READ, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_read_bio(b, name, header, data, len); BIO_free(b); - return (ret); + return ret; } #endif +/* Some helpers for PEM_read_bio_ex(). */ +static int sanitize_line(char *linebuf, int len, unsigned int flags) +{ + int i; + + if (flags & PEM_FLAG_EAY_COMPATIBLE) { + /* Strip trailing whitespace */ + while ((len >= 0) && (linebuf[len] <= ' ')) + len--; + /* Go back to whitespace before applying uniform line ending. */ + len++; + } else if (flags & PEM_FLAG_ONLY_B64) { + for (i = 0; i < len; ++i) { + if (!ossl_isbase64(linebuf[i]) || linebuf[i] == '\n' + || linebuf[i] == '\r') + break; + } + len = i; + } else { + /* EVP_DecodeBlock strips leading and trailing whitespace, so just strip + * control characters in-place and let everything through. */ + for (i = 0; i < len; ++i) { + if (linebuf[i] == '\n' || linebuf[i] == '\r') + break; + if (ossl_iscntrl(linebuf[i])) + linebuf[i] = ' '; + } + len = i; + } + /* The caller allocated LINESIZE+1, so this is safe. */ + linebuf[len++] = '\n'; + linebuf[len] = '\0'; + return len; +} + +#define LINESIZE 255 +/* Note trailing spaces for begin and end. */ +static const char beginstr[] = "-----BEGIN "; +static const char endstr[] = "-----END "; +static const char tailstr[] = "-----\n"; +#define BEGINLEN (sizeof(beginstr) - 1) +#define ENDLEN (sizeof(endstr) - 1) +#define TAILLEN (sizeof(tailstr) - 1) +static int get_name(BIO *bp, char **name, unsigned int flags) +{ + char *linebuf; + int ret = 0; + size_t len; + + /* + * Need to hold trailing NUL (accounted for by BIO_gets() and the newline + * that will be added by sanitize_line() (the extra '1'). + */ + linebuf = pem_malloc(LINESIZE + 1, flags); + if (linebuf == NULL) { + PEMerr(PEM_F_GET_NAME, ERR_R_MALLOC_FAILURE); + return 0; + } + + do { + len = BIO_gets(bp, linebuf, LINESIZE); + + if (len <= 0) { + PEMerr(PEM_F_GET_NAME, PEM_R_NO_START_LINE); + goto err; + } + + /* Strip trailing garbage and standardize ending. */ + len = sanitize_line(linebuf, len, flags & ~PEM_FLAG_ONLY_B64); + + /* Allow leading empty or non-matching lines. */ + } while (strncmp(linebuf, beginstr, BEGINLEN) != 0 + || len < TAILLEN + || strncmp(linebuf + len - TAILLEN, tailstr, TAILLEN) != 0); + linebuf[len - TAILLEN] = '\0'; + len = len - BEGINLEN - TAILLEN + 1; + *name = pem_malloc(len, flags); + if (*name == NULL) { + PEMerr(PEM_F_GET_NAME, ERR_R_MALLOC_FAILURE); + goto err; + } + memcpy(*name, linebuf + BEGINLEN, len); + ret = 1; + +err: + pem_free(linebuf, flags, LINESIZE + 1); + return ret; +} + +/* Keep track of how much of a header we've seen. */ +enum header_status { + MAYBE_HEADER, + IN_HEADER, + POST_HEADER +}; + +/** + * Extract the optional PEM header, with details on the type of content and + * any encryption used on the contents, and the bulk of the data from the bio. + * The end of the header is marked by a blank line; if the end-of-input marker + * is reached prior to a blank line, there is no header. + * + * The header and data arguments are BIO** since we may have to swap them + * if there is no header, for efficiency. + * + * We need the name of the PEM-encoded type to verify the end string. + */ +static int get_header_and_data(BIO *bp, BIO **header, BIO **data, char *name, + unsigned int flags) +{ + BIO *tmp = *header; + char *linebuf, *p; + int len, line, ret = 0, end = 0; + /* 0 if not seen (yet), 1 if reading header, 2 if finished header */ + enum header_status got_header = MAYBE_HEADER; + unsigned int flags_mask; + size_t namelen; + + /* Need to hold trailing NUL (accounted for by BIO_gets() and the newline + * that will be added by sanitize_line() (the extra '1'). */ + linebuf = pem_malloc(LINESIZE + 1, flags); + if (linebuf == NULL) { + PEMerr(PEM_F_GET_HEADER_AND_DATA, ERR_R_MALLOC_FAILURE); + return 0; + } + + for (line = 0; ; line++) { + flags_mask = ~0u; + len = BIO_gets(bp, linebuf, LINESIZE); + if (len <= 0) { + PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_SHORT_HEADER); + goto err; + } + + if (got_header == MAYBE_HEADER) { + if (memchr(linebuf, ':', len) != NULL) + got_header = IN_HEADER; + } + if (!strncmp(linebuf, endstr, ENDLEN) || got_header == IN_HEADER) + flags_mask &= ~PEM_FLAG_ONLY_B64; + len = sanitize_line(linebuf, len, flags & flags_mask); + + /* Check for end of header. */ + if (linebuf[0] == '\n') { + if (got_header == POST_HEADER) { + /* Another blank line is an error. */ + PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE); + goto err; + } + got_header = POST_HEADER; + tmp = *data; + continue; + } + + /* Check for end of stream (which means there is no header). */ + if (strncmp(linebuf, endstr, ENDLEN) == 0) { + p = linebuf + ENDLEN; + namelen = strlen(name); + if (strncmp(p, name, namelen) != 0 || + strncmp(p + namelen, tailstr, TAILLEN) != 0) { + PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE); + goto err; + } + if (got_header == MAYBE_HEADER) { + *header = *data; + *data = tmp; + } + break; + } else if (end) { + /* Malformed input; short line not at end of data. */ + PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE); + goto err; + } + /* + * Else, a line of text -- could be header or data; we don't + * know yet. Just pass it through. + */ + if (BIO_puts(tmp, linebuf) < 0) + goto err; + /* + * Only encrypted files need the line length check applied. + */ + if (got_header == POST_HEADER) { + /* 65 includes the trailing newline */ + if (len > 65) + goto err; + if (len < 65) + end = 1; + } + } + + ret = 1; +err: + pem_free(linebuf, flags, LINESIZE + 1); + return ret; +} + +/** + * Read in PEM-formatted data from the given BIO. + * + * By nature of the PEM format, all content must be printable ASCII (except + * for line endings). Other characters, or lines that are longer than 80 + * characters, are malformed input and will be rejected. + */ +int PEM_read_bio_ex(BIO *bp, char **name_out, char **header, + unsigned char **data, long *len_out, unsigned int flags) +{ + EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new(); + const BIO_METHOD *bmeth; + BIO *headerB = NULL, *dataB = NULL; + char *name = NULL; + int len, taillen, headerlen, ret = 0; + BUF_MEM * buf_mem; + + if (ctx == NULL) { + PEMerr(PEM_F_PEM_READ_BIO_EX, ERR_R_MALLOC_FAILURE); + return 0; + } + + *len_out = 0; + *name_out = *header = NULL; + *data = NULL; + if ((flags & PEM_FLAG_EAY_COMPATIBLE) && (flags & PEM_FLAG_ONLY_B64)) { + /* These two are mutually incompatible; bail out. */ + PEMerr(PEM_F_PEM_READ_BIO_EX, ERR_R_PASSED_INVALID_ARGUMENT); + goto end; + } + bmeth = (flags & PEM_FLAG_SECURE) ? BIO_s_secmem() : BIO_s_mem(); + + headerB = BIO_new(bmeth); + dataB = BIO_new(bmeth); + if (headerB == NULL || dataB == NULL) { + PEMerr(PEM_F_PEM_READ_BIO_EX, ERR_R_MALLOC_FAILURE); + goto end; + } + + if (!get_name(bp, &name, flags)) + goto end; + if (!get_header_and_data(bp, &headerB, &dataB, name, flags)) + goto end; + + EVP_DecodeInit(ctx); + BIO_get_mem_ptr(dataB, &buf_mem); + len = buf_mem->length; + if (EVP_DecodeUpdate(ctx, (unsigned char*)buf_mem->data, &len, + (unsigned char*)buf_mem->data, len) < 0 + || EVP_DecodeFinal(ctx, (unsigned char*)&(buf_mem->data[len]), + &taillen) < 0) { + PEMerr(PEM_F_PEM_READ_BIO_EX, PEM_R_BAD_BASE64_DECODE); + goto end; + } + len += taillen; + buf_mem->length = len; + + /* There was no data in the PEM file; avoid malloc(0). */ + if (len == 0) + goto end; + headerlen = BIO_get_mem_data(headerB, NULL); + *header = pem_malloc(headerlen + 1, flags); + *data = pem_malloc(len, flags); + if (*header == NULL || *data == NULL) { + pem_free(*header, flags, 0); + pem_free(*data, flags, 0); + goto end; + } + BIO_read(headerB, *header, headerlen); + (*header)[headerlen] = '\0'; + BIO_read(dataB, *data, len); + *len_out = len; + *name_out = name; + name = NULL; + ret = 1; + +end: + EVP_ENCODE_CTX_free(ctx); + pem_free(name, flags, 0); + BIO_free(headerB); + BIO_free(dataB); + return ret; +} + int PEM_read_bio(BIO *bp, char **name, char **header, unsigned char **data, long *len) { - EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new(); - int end = 0, i, k, bl = 0, hl = 0, nohead = 0; - char buf[256]; - BUF_MEM *nameB; - BUF_MEM *headerB; - BUF_MEM *dataB, *tmpB; - - if (ctx == NULL) { - PEMerr(PEM_F_PEM_READ_BIO, ERR_R_MALLOC_FAILURE); - return (0); - } - - nameB = BUF_MEM_new(); - headerB = BUF_MEM_new(); - dataB = BUF_MEM_new(); - if ((nameB == NULL) || (headerB == NULL) || (dataB == NULL)) { - goto err; - } - - buf[254] = '\0'; - for (;;) { - i = BIO_gets(bp, buf, 254); - - if (i <= 0) { - PEMerr(PEM_F_PEM_READ_BIO, PEM_R_NO_START_LINE); - goto err; - } - - while ((i >= 0) && (buf[i] <= ' ')) - i--; - buf[++i] = '\n'; - buf[++i] = '\0'; - - if (strncmp(buf, "-----BEGIN ", 11) == 0) { - i = strlen(&(buf[11])); - - if (strncmp(&(buf[11 + i - 6]), "-----\n", 6) != 0) - continue; - if (!BUF_MEM_grow(nameB, i + 9)) { - PEMerr(PEM_F_PEM_READ_BIO, ERR_R_MALLOC_FAILURE); - goto err; - } - memcpy(nameB->data, &(buf[11]), i - 6); - nameB->data[i - 6] = '\0'; - break; - } - } - hl = 0; - if (!BUF_MEM_grow(headerB, 256)) { - PEMerr(PEM_F_PEM_READ_BIO, ERR_R_MALLOC_FAILURE); - goto err; - } - headerB->data[0] = '\0'; - for (;;) { - i = BIO_gets(bp, buf, 254); - if (i <= 0) - break; - - while ((i >= 0) && (buf[i] <= ' ')) - i--; - buf[++i] = '\n'; - buf[++i] = '\0'; - - if (buf[0] == '\n') - break; - if (!BUF_MEM_grow(headerB, hl + i + 9)) { - PEMerr(PEM_F_PEM_READ_BIO, ERR_R_MALLOC_FAILURE); - goto err; - } - if (strncmp(buf, "-----END ", 9) == 0) { - nohead = 1; - break; - } - memcpy(&(headerB->data[hl]), buf, i); - headerB->data[hl + i] = '\0'; - hl += i; - } - - bl = 0; - if (!BUF_MEM_grow(dataB, 1024)) { - PEMerr(PEM_F_PEM_READ_BIO, ERR_R_MALLOC_FAILURE); - goto err; - } - dataB->data[0] = '\0'; - if (!nohead) { - for (;;) { - i = BIO_gets(bp, buf, 254); - if (i <= 0) - break; - - while ((i >= 0) && (buf[i] <= ' ')) - i--; - buf[++i] = '\n'; - buf[++i] = '\0'; - - if (i != 65) - end = 1; - if (strncmp(buf, "-----END ", 9) == 0) - break; - if (i > 65) - break; - if (!BUF_MEM_grow_clean(dataB, i + bl + 9)) { - PEMerr(PEM_F_PEM_READ_BIO, ERR_R_MALLOC_FAILURE); - goto err; - } - memcpy(&(dataB->data[bl]), buf, i); - dataB->data[bl + i] = '\0'; - bl += i; - if (end) { - buf[0] = '\0'; - i = BIO_gets(bp, buf, 254); - if (i <= 0) - break; - - while ((i >= 0) && (buf[i] <= ' ')) - i--; - buf[++i] = '\n'; - buf[++i] = '\0'; - - break; - } - } - } else { - tmpB = headerB; - headerB = dataB; - dataB = tmpB; - bl = hl; - } - i = strlen(nameB->data); - if ((strncmp(buf, "-----END ", 9) != 0) || - (strncmp(nameB->data, &(buf[9]), i) != 0) || - (strncmp(&(buf[9 + i]), "-----\n", 6) != 0)) { - PEMerr(PEM_F_PEM_READ_BIO, PEM_R_BAD_END_LINE); - goto err; - } - - EVP_DecodeInit(ctx); - i = EVP_DecodeUpdate(ctx, - (unsigned char *)dataB->data, &bl, - (unsigned char *)dataB->data, bl); - if (i < 0) { - PEMerr(PEM_F_PEM_READ_BIO, PEM_R_BAD_BASE64_DECODE); - goto err; - } - i = EVP_DecodeFinal(ctx, (unsigned char *)&(dataB->data[bl]), &k); - if (i < 0) { - PEMerr(PEM_F_PEM_READ_BIO, PEM_R_BAD_BASE64_DECODE); - goto err; - } - bl += k; - - if (bl == 0) - goto err; - *name = nameB->data; - *header = headerB->data; - *data = (unsigned char *)dataB->data; - *len = bl; - OPENSSL_free(nameB); - OPENSSL_free(headerB); - OPENSSL_free(dataB); - EVP_ENCODE_CTX_free(ctx); - return (1); - err: - BUF_MEM_free(nameB); - BUF_MEM_free(headerB); - BUF_MEM_free(dataB); - EVP_ENCODE_CTX_free(ctx); - return (0); + return PEM_read_bio_ex(bp, name, header, data, len, PEM_FLAG_EAY_COMPATIBLE); } /* diff --git a/crypto/pem/pem_oth.c b/crypto/pem/pem_oth.c index cc7a8dbe..56620533 100644 --- a/crypto/pem/pem_oth.c +++ b/crypto/pem/pem_oth.c @@ -32,5 +32,5 @@ void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, if (ret == NULL) PEMerr(PEM_F_PEM_ASN1_READ_BIO, ERR_R_ASN1_LIB); OPENSSL_free(data); - return (ret); + return ret; } diff --git a/crypto/pem/pem_pk8.c b/crypto/pem/pem_pk8.c index 5caad9fa..e2c0f3de 100644 --- a/crypto/pem/pem_pk8.c +++ b/crypto/pem/pem_pk8.c @@ -183,7 +183,7 @@ static int do_pk8pkey_fp(FILE *fp, EVP_PKEY *x, int isder, int nid, if ((bp = BIO_new_fp(fp, BIO_NOCLOSE)) == NULL) { PEMerr(PEM_F_DO_PK8PKEY_FP, ERR_R_BUF_LIB); - return (0); + return 0; } ret = do_pk8pkey(bp, x, isder, nid, enc, kstr, klen, cb, u); BIO_free(bp); diff --git a/crypto/pem/pem_pkey.c b/crypto/pem/pem_pkey.c index 671b374f..62eb91c4 100644 --- a/crypto/pem/pem_pkey.c +++ b/crypto/pem/pem_pkey.c @@ -32,7 +32,8 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, int slen; EVP_PKEY *ret = NULL; - if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_EVP_PKEY, bp, cb, u)) + if (!PEM_bytes_read_bio_secmem(&data, &len, &nm, PEM_STRING_EVP_PKEY, bp, + cb, u)) return NULL; p = data; @@ -86,9 +87,9 @@ EVP_PKEY *PEM_read_bio_PrivateKey(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, if (ret == NULL) PEMerr(PEM_F_PEM_READ_BIO_PRIVATEKEY, ERR_R_ASN1_LIB); err: - OPENSSL_free(nm); - OPENSSL_clear_free(data, len); - return (ret); + OPENSSL_secure_free(nm); + OPENSSL_secure_clear_free(data, len); + return ret; } int PEM_write_bio_PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, @@ -147,7 +148,7 @@ EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x) PEMerr(PEM_F_PEM_READ_BIO_PARAMETERS, ERR_R_ASN1_LIB); OPENSSL_free(nm); OPENSSL_free(data); - return (ret); + return ret; } int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x) @@ -170,12 +171,12 @@ EVP_PKEY *PEM_read_PrivateKey(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_READ_PRIVATEKEY, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_read_bio_PrivateKey(b, x, cb, u); BIO_free(b); - return (ret); + return ret; } int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, @@ -232,12 +233,12 @@ DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u) if ((b = BIO_new(BIO_s_file())) == NULL) { PEMerr(PEM_F_PEM_READ_DHPARAMS, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = PEM_read_bio_DHparams(b, x, cb, u); BIO_free(b); - return (ret); + return ret; } # endif diff --git a/crypto/pem/pem_sign.c b/crypto/pem/pem_sign.c index 12ad9745..9662eb14 100644 --- a/crypto/pem/pem_sign.c +++ b/crypto/pem/pem_sign.c @@ -46,5 +46,5 @@ int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, err: /* ctx has been zeroed by EVP_SignFinal() */ OPENSSL_free(m); - return (ret); + return ret; } diff --git a/crypto/pem/pvkfmt.c b/crypto/pem/pvkfmt.c index d0a42395..ebd6913c 100644 --- a/crypto/pem/pvkfmt.c +++ b/crypto/pem/pvkfmt.c @@ -1,5 +1,5 @@ /* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -285,17 +285,14 @@ static EVP_PKEY *b2i_dss(const unsigned char **in, goto memerr; BN_CTX_free(ctx); - ctx = NULL; } if (!DSA_set0_pqg(dsa, pbn, qbn, gbn)) goto memerr; pbn = qbn = gbn = NULL; if (!DSA_set0_key(dsa, pub_key, priv_key)) goto memerr; - pub_key = priv_key = NULL; - if (!EVP_PKEY_set1_DSA(ret, dsa)) - goto memerr; + EVP_PKEY_set1_DSA(ret, dsa); DSA_free(dsa); *in = p; return ret; @@ -348,19 +345,12 @@ static EVP_PKEY *b2i_rsa(const unsigned char **in, goto memerr; if (!read_lebn(&pin, nbyte, &d)) goto memerr; - if (!RSA_set0_factors(rsa, p, q)) - goto memerr; - p = q = NULL; - if (!RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp)) - goto memerr; - dmp1 = dmq1 = iqmp = NULL; + RSA_set0_factors(rsa, p, q); + RSA_set0_crt_params(rsa, dmp1, dmq1, iqmp); } - if (!RSA_set0_key(rsa, n, e, d)) - goto memerr; - n = e = d = NULL; + RSA_set0_key(rsa, n, e, d); - if (!EVP_PKEY_set1_RSA(ret, rsa)) - goto memerr; + EVP_PKEY_set1_RSA(ret, rsa); RSA_free(rsa); *in = pin; return ret; diff --git a/crypto/perlasm/README b/crypto/perlasm/README index e90bd8e0..3177c371 100644 --- a/crypto/perlasm/README +++ b/crypto/perlasm/README @@ -9,7 +9,7 @@ require "x86asm.pl"; The first thing we do is setup the file and type of assembler -&asm_init($ARGV[0],$0); +&asm_init($ARGV[0]); The first argument is the 'type'. Currently 'cpp', 'sol', 'a.out', 'elf' or 'win32'. @@ -62,7 +62,7 @@ So a very simple version of this function could be coded as push(@INC,"perlasm","../../perlasm"); require "x86asm.pl"; - &asm_init($ARGV[0],"cacl.pl"); + &asm_init($ARGV[0]); &external_label("other"); diff --git a/crypto/perlasm/cbc.pl b/crypto/perlasm/cbc.pl index ad79b240..01bafe45 100644 --- a/crypto/perlasm/cbc.pl +++ b/crypto/perlasm/cbc.pl @@ -15,7 +15,7 @@ # des_cblock (*ivec); # int enc; # -# calls +# calls # des_encrypt((DES_LONG *)tin,schedule,DES_ENCRYPT); # @@ -36,7 +36,7 @@ sub cbc # name is the function name # enc_func and dec_func and the functions to call for encrypt/decrypt # swap is true if byte order needs to be reversed - # iv_off is parameter number for the iv + # iv_off is parameter number for the iv # enc_off is parameter number for the encrypt/decrypt flag # p1,p2,p3 are the offsets for parameters to be passed to the # underlying calls. @@ -114,7 +114,7 @@ sub cbc ############################################################# &set_label("encrypt_loop"); - # encrypt start + # encrypt start # "eax" and "ebx" hold iv (or the last cipher text) &mov("ecx", &DWP(0,$in,"",0)); # load first 4 bytes @@ -208,7 +208,7 @@ sub cbc ############################################################# ############################################################# &set_label("decrypt",1); - # decrypt start + # decrypt start &and($count,0xfffffff8); # The next 2 instructions are only for if the jz is taken &mov("eax", &DWP($data_off+8,"esp","",0)); # get iv[0] @@ -350,7 +350,7 @@ sub cbc &align(64); &function_end_B($name); - + } 1; diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl index 2d46e244..ba2842fb 100755 --- a/crypto/perlasm/ppc-xlate.pl +++ b/crypto/perlasm/ppc-xlate.pl @@ -11,40 +11,65 @@ my $output = shift; open STDOUT,">$output" || die "can't open $output: $!"; my %GLOBALS; +my %TYPES; my $dotinlocallabels=($flavour=~/linux/)?1:0; ################################################################ # directives which need special treatment on different platforms ################################################################ +my $type = sub { + my ($dir,$name,$type) = @_; + + $TYPES{$name} = $type; + if ($flavour =~ /linux/) { + $name =~ s|^\.||; + ".type $name,$type"; + } else { + ""; + } +}; my $globl = sub { my $junk = shift; my $name = shift; my $global = \$GLOBALS{$name}; + my $type = \$TYPES{$name}; my $ret; - $name =~ s|^[\.\_]||; - + $name =~ s|^\.||; + SWITCH: for ($flavour) { - /aix/ && do { $name = ".$name"; + /aix/ && do { if (!$$type) { + $$type = "\@function"; + } + if ($$type =~ /function/) { + $name = ".$name"; + } last; }; /osx/ && do { $name = "_$name"; last; }; /linux.*(32|64le)/ - && do { $ret .= ".globl $name\n"; - $ret .= ".type $name,\@function"; + && do { $ret .= ".globl $name"; + if (!$$type) { + $ret .= "\n.type $name,\@function"; + $$type = "\@function"; + } last; }; - /linux.*64/ && do { $ret .= ".globl $name\n"; - $ret .= ".type $name,\@function\n"; - $ret .= ".section \".opd\",\"aw\"\n"; - $ret .= ".align 3\n"; - $ret .= "$name:\n"; - $ret .= ".quad .$name,.TOC.\@tocbase,0\n"; - $ret .= ".previous\n"; - - $name = ".$name"; + /linux.*64/ && do { $ret .= ".globl $name"; + if (!$$type) { + $ret .= "\n.type $name,\@function"; + $$type = "\@function"; + } + if ($$type =~ /function/) { + $ret .= "\n.section \".opd\",\"aw\""; + $ret .= "\n.align 3"; + $ret .= "\n$name:"; + $ret .= "\n.quad .$name,.TOC.\@tocbase,0"; + $ret .= "\n.previous"; + $name = ".$name"; + } last; }; } @@ -70,9 +95,13 @@ my $machine = sub { my $size = sub { if ($flavour =~ /linux/) { shift; - my $name = shift; $name =~ s|^[\.\_]||; - my $ret = ".size $name,.-".($flavour=~/64$/?".":"").$name; - $ret .= "\n.size .$name,.-.$name" if ($flavour=~/64$/); + my $name = shift; + my $real = $GLOBALS{$name} ? \$GLOBALS{$name} : \$name; + my $ret = ".size $$real,.-$$real"; + $name =~ s|^\.||; + if ($$real ne $name) { + $ret .= "\n.size $name,.-$$real"; + } $ret; } else @@ -187,6 +216,12 @@ my $lvdx_u = sub { vsxmem_op(@_, 588); }; # lxsdx my $stvdx_u = sub { vsxmem_op(@_, 716); }; # stxsdx my $lvx_4w = sub { vsxmem_op(@_, 780); }; # lxvw4x my $stvx_4w = sub { vsxmem_op(@_, 908); }; # stxvw4x +my $lvx_splt = sub { vsxmem_op(@_, 332); }; # lxvdsx +my $vpermdi = sub { # xxpermdi + my ($f, $vrt, $vra, $vrb, $dm) = @_; + $dm = oct($dm) if ($dm =~ /^0/); + " .long ".sprintf "0x%X",(60<<26)|($vrt<<21)|($vra<<16)|($vrb<<11)|($dm<<8)|(10<<3)|7; +}; # PowerISA 2.07 stuff sub vcrypto_op { @@ -204,7 +239,14 @@ my $vpmsumb = sub { vcrypto_op(@_, 1032); }; my $vpmsumd = sub { vcrypto_op(@_, 1224); }; my $vpmsubh = sub { vcrypto_op(@_, 1096); }; my $vpmsumw = sub { vcrypto_op(@_, 1160); }; +# These are not really crypto, but one can use vcrypto_op my $vaddudm = sub { vcrypto_op(@_, 192); }; +my $vadduqm = sub { vcrypto_op(@_, 256); }; +my $vmuleuw = sub { vcrypto_op(@_, 648); }; +my $vmulouw = sub { vcrypto_op(@_, 136); }; +my $vrld = sub { vcrypto_op(@_, 196); }; +my $vsld = sub { vcrypto_op(@_, 1476); }; +my $vsrd = sub { vcrypto_op(@_, 1732); }; my $mtsle = sub { my ($f, $arg) = @_; @@ -220,11 +262,24 @@ my $maddld = sub { my ($f, $rt, $ra, $rb, $rc) = @_; " .long ".sprintf "0x%X",(4<<26)|($rt<<21)|($ra<<16)|($rb<<11)|($rc<<6)|51; }; - my $darn = sub { my ($f, $rt, $l) = @_; " .long ".sprintf "0x%X",(31<<26)|($rt<<21)|($l<<16)|(755<<1); }; +my $iseleq = sub { + my ($f, $rt, $ra, $rb) = @_; + " .long ".sprintf "0x%X",(31<<26)|($rt<<21)|($ra<<16)|($rb<<11)|(2<<6)|30; +}; + +# PowerISA 3.0B stuff +my $addex = sub { + my ($f, $rt, $ra, $rb, $cy) = @_; # only cy==0 is specified in 3.0B + " .long ".sprintf "0x%X",(31<<26)|($rt<<21)|($ra<<16)|($rb<<11)|($cy<<9)|(170<<1); +}; +my $vmsumudm = sub { + my ($f, $vrt, $vra, $vrb, $vrc) = @_; + " .long ".sprintf "0x%X",(4<<26)|($vrt<<21)|($vra<<16)|($vrb<<11)|($vrc<<6)|35; +}; while($line=<>) { @@ -234,7 +289,7 @@ while($line=<>) { $line =~ s|\s+$||; # ... and at the end { - $line =~ s|\b\.L(\w+)|L$1|g; # common denominator for Locallabel + $line =~ s|\.L(\w+)|L$1|g; # common denominator for Locallabel $line =~ s|\bL(\w+)|\.L$1|g if ($dotinlocallabels); } @@ -242,8 +297,13 @@ while($line=<>) { $line =~ s|(^[\.\w]+)\:\s*||; my $label = $1; if ($label) { - printf "%s:",($GLOBALS{$label} or $label); - printf "\n.localentry\t$GLOBALS{$label},0" if ($GLOBALS{$label} && $flavour =~ /linux.*64le/); + my $xlated = ($GLOBALS{$label} or $label); + print "$xlated:"; + if ($flavour =~ /linux.*64le/) { + if ($TYPES{$label} =~ /function/) { + printf "\n.localentry %s,0\n",$xlated; + } + } } } @@ -254,7 +314,7 @@ while($line=<>) { my $f = $3; my $opcode = eval("\$$mnemonic"); $line =~ s/\b(c?[rf]|v|vs)([0-9]+)\b/$2/g if ($c ne "." and $flavour !~ /osx/); - if (ref($opcode) eq 'CODE') { $line = &$opcode($f,split(',',$line)); } + if (ref($opcode) eq 'CODE') { $line = &$opcode($f,split(/,\s*/,$line)); } elsif ($mnemonic) { $line = $c.$mnemonic.$f."\t".$line; } } diff --git a/crypto/perlasm/sparcv9_modes.pl b/crypto/perlasm/sparcv9_modes.pl index bfdada85..b9922e03 100644 --- a/crypto/perlasm/sparcv9_modes.pl +++ b/crypto/perlasm/sparcv9_modes.pl @@ -117,7 +117,7 @@ $::code.=<<___; brnz,pn $ooff, 2f sub $len, 1, $len - + std %f0, [$out + 0] std %f2, [$out + 8] brnz,pt $len, .L${bits}_cbc_enc_loop @@ -224,7 +224,7 @@ $::code.=<<___; call _${alg}${bits}_encrypt_1x add $inp, 16, $inp sub $len, 1, $len - + stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific add $out, 8, $out stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific @@ -339,7 +339,7 @@ $::code.=<<___; brnz,pn $ooff, 2f sub $len, 1, $len - + std %f0, [$out + 0] std %f2, [$out + 8] brnz,pt $len, .L${bits}_cbc_dec_loop2x @@ -445,7 +445,7 @@ $::code.=<<___; brnz,pn $ooff, 2f sub $len, 2, $len - + std %f0, [$out + 0] std %f2, [$out + 8] std %f4, [$out + 16] @@ -702,7 +702,7 @@ $::code.=<<___; brnz,pn $ooff, 2f sub $len, 1, $len - + std %f0, [$out + 0] std %f2, [$out + 8] brnz,pt $len, .L${bits}_ctr32_loop2x @@ -791,7 +791,7 @@ $::code.=<<___; brnz,pn $ooff, 2f sub $len, 2, $len - + std %f0, [$out + 0] std %f2, [$out + 8] std %f4, [$out + 16] @@ -1024,7 +1024,7 @@ $code.=<<___; brnz,pn $ooff, 2f sub $len, 1, $len - + std %f0, [$out + 0] std %f2, [$out + 8] brnz,pt $len, .L${bits}_xts_${dir}loop2x @@ -1135,7 +1135,7 @@ $code.=<<___; brnz,pn $ooff, 2f sub $len, 2, $len - + std %f0, [$out + 0] std %f2, [$out + 8] std %f4, [$out + 16] diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl index c4607dd9..eac21c1c 100755 --- a/crypto/perlasm/x86_64-xlate.pl +++ b/crypto/perlasm/x86_64-xlate.pl @@ -1430,4 +1430,3 @@ close STDOUT; # Unix. "Unlike" refers to the fact that on Unix signal handler # will always be invoked, core dumped and appropriate exit code # returned to parent (for user notification). - diff --git a/crypto/perlasm/x86asm.pl b/crypto/perlasm/x86asm.pl index 1ff46c92..29dc1a2c 100644 --- a/crypto/perlasm/x86asm.pl +++ b/crypto/perlasm/x86asm.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -8,7 +8,7 @@ # require 'x86asm.pl'; -# &asm_init(,"des-586.pl"[,$i386only]); +# &asm_init([,$i386only]); # &function_begin("foo"); # ... # &function_end("foo"); @@ -259,12 +259,11 @@ sub ::asm_finish } sub ::asm_init -{ my ($type,$fn,$cpu)=@_; +{ my ($type,$cpu)=@_; - $filename=$fn; $i386=$cpu; - $elf=$cpp=$coff=$aout=$macosx=$win32=$netware=$mwerks=$android=0; + $elf=$cpp=$coff=$aout=$macosx=$win32=$mwerks=$android=0; if (($type eq "elf")) { $elf=1; require "x86gas.pl"; } elsif (($type eq "elf-1")) @@ -275,10 +274,6 @@ sub ::asm_init { $coff=1; require "x86gas.pl"; } elsif (($type eq "win32n")) { $win32=1; require "x86nasm.pl"; } - elsif (($type eq "nw-nasm")) - { $netware=1; require "x86nasm.pl"; } - #elsif (($type eq "nw-mwasm")) - #{ $netware=1; $mwerks=1; require "x86nasm.pl"; } elsif (($type eq "win32")) { $win32=1; require "x86masm.pl"; } elsif (($type eq "macosx")) @@ -292,7 +287,6 @@ Pick one target type from a.out - DJGPP, elder OpenBSD, etc. coff - GAS/COFF such as Win32 targets win32n - Windows 95/Windows NT NASM format - nw-nasm - NetWare NASM format macosx - Mac OS X EOF exit(1); @@ -301,8 +295,7 @@ EOF $pic=0; for (@ARGV) { $pic=1 if (/\-[fK]PIC/i); } - $filename =~ s/\.pl$//; - &file($filename); + &file(); } sub ::hidden {} diff --git a/crypto/perlasm/x86gas.pl b/crypto/perlasm/x86gas.pl index 2c8fce07..5c7ea388 100644 --- a/crypto/perlasm/x86gas.pl +++ b/crypto/perlasm/x86gas.pl @@ -104,7 +104,7 @@ sub ::BC { @_; } sub ::DWC { @_; } sub ::file -{ push(@out,".file\t\"$_[0].s\"\n.text\n"); } +{ push(@out,".text\n"); } sub ::function_begin_B { my $func=shift; diff --git a/crypto/perlasm/x86masm.pl b/crypto/perlasm/x86masm.pl index d352f470..dffee762 100644 --- a/crypto/perlasm/x86masm.pl +++ b/crypto/perlasm/x86masm.pl @@ -85,7 +85,6 @@ sub ::DWC { "@_"; } sub ::file { my $tmp=<<___; -TITLE $_[0].asm IF \@Version LT 800 ECHO MASM version 8.00 or later is strongly recommended. ENDIF diff --git a/crypto/perlasm/x86nasm.pl b/crypto/perlasm/x86nasm.pl index 4b664a87..4e64dad9 100644 --- a/crypto/perlasm/x86nasm.pl +++ b/crypto/perlasm/x86nasm.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -12,7 +12,7 @@ package x86nasm; *out=\@::out; $::lbdecor="L\$"; # local label decoration -$nmdecor=$::netware?"":"_"; # external name decoration +$nmdecor="_"; # external name decoration $drdecor=$::mwerks?".":""; # directive decoration $initseg=""; @@ -132,7 +132,7 @@ ___ grep {s/(^extern\s+${nmdecor}OPENSSL_ia32cap_P)/\;$1/} @out; push (@out,$comm) } - push (@out,$initseg) if ($initseg); + push (@out,$initseg) if ($initseg); } sub ::comment { foreach (@_) { push(@out,"\t; $_\n"); } } diff --git a/crypto/pkcs12/p12_key.c b/crypto/pkcs12/p12_key.c index 9c13a451..ab31a612 100644 --- a/crypto/pkcs12/p12_key.c +++ b/crypto/pkcs12/p12_key.c @@ -78,10 +78,9 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, unsigned char *out, const EVP_MD *md_type) { unsigned char *B = NULL, *D = NULL, *I = NULL, *p = NULL, *Ai = NULL; - int Slen, Plen, Ilen, Ijlen; + int Slen, Plen, Ilen; int i, j, u, v; int ret = 0; - BIGNUM *Ij = NULL, *Bpl1 = NULL; /* These hold Ij and B + 1 */ EVP_MD_CTX *ctx = NULL; #ifdef OPENSSL_DEBUG_KEYGEN unsigned char *tmpout = out; @@ -114,10 +113,7 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, Plen = 0; Ilen = Slen + Plen; I = OPENSSL_malloc(Ilen); - Ij = BN_new(); - Bpl1 = BN_new(); - if (D == NULL || Ai == NULL || B == NULL || I == NULL || Ij == NULL - || Bpl1 == NULL) + if (D == NULL || Ai == NULL || B == NULL || I == NULL) goto err; for (i = 0; i < v; i++) D[i] = id; @@ -151,33 +147,17 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, out += u; for (j = 0; j < v; j++) B[j] = Ai[j % u]; - /* Work out B + 1 first then can use B as tmp space */ - if (!BN_bin2bn(B, v, Bpl1)) - goto err; - if (!BN_add_word(Bpl1, 1)) - goto err; for (j = 0; j < Ilen; j += v) { - if (!BN_bin2bn(I + j, v, Ij)) - goto err; - if (!BN_add(Ij, Ij, Bpl1)) - goto err; - if (!BN_bn2bin(Ij, B)) - goto err; - Ijlen = BN_num_bytes(Ij); - /* If more than 2^(v*8) - 1 cut off MSB */ - if (Ijlen > v) { - if (!BN_bn2bin(Ij, B)) - goto err; - memcpy(I + j, B + 1, v); -#ifndef PKCS12_BROKEN_KEYGEN - /* If less than v bytes pad with zeroes */ - } else if (Ijlen < v) { - memset(I + j, 0, v - Ijlen); - if (!BN_bn2bin(Ij, I + j + v - Ijlen)) - goto err; -#endif - } else if (!BN_bn2bin(Ij, I + j)) - goto err; + int k; + unsigned char *Ij = I + j; + uint16_t c = 1; + + /* Work out Ij = Ij + B + 1 */ + for (k = v - 1; k >= 0; k--) { + c += Ij[k] + B[k]; + Ij[k] = (unsigned char)c; + c >>= 8; + } } } @@ -189,8 +169,6 @@ int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, OPENSSL_free(B); OPENSSL_free(D); OPENSSL_free(I); - BN_free(Ij); - BN_free(Bpl1); EVP_MD_CTX_free(ctx); return ret; } diff --git a/crypto/pkcs12/pk12err.c b/crypto/pkcs12/pk12err.c index f705084a..38e7c66e 100644 --- a/crypto/pkcs12/pk12err.c +++ b/crypto/pkcs12/pk12err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,75 +8,92 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_PKCS12,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_PKCS12,0,reason) - -static ERR_STRING_DATA PKCS12_str_functs[] = { - {ERR_FUNC(PKCS12_F_PKCS12_CREATE), "PKCS12_create"}, - {ERR_FUNC(PKCS12_F_PKCS12_GEN_MAC), "PKCS12_gen_mac"}, - {ERR_FUNC(PKCS12_F_PKCS12_INIT), "PKCS12_init"}, - {ERR_FUNC(PKCS12_F_PKCS12_ITEM_DECRYPT_D2I), "PKCS12_item_decrypt_d2i"}, - {ERR_FUNC(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT), "PKCS12_item_i2d_encrypt"}, - {ERR_FUNC(PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG), "PKCS12_item_pack_safebag"}, - {ERR_FUNC(PKCS12_F_PKCS12_KEY_GEN_ASC), "PKCS12_key_gen_asc"}, - {ERR_FUNC(PKCS12_F_PKCS12_KEY_GEN_UNI), "PKCS12_key_gen_uni"}, - {ERR_FUNC(PKCS12_F_PKCS12_KEY_GEN_UTF8), "PKCS12_key_gen_utf8"}, - {ERR_FUNC(PKCS12_F_PKCS12_NEWPASS), "PKCS12_newpass"}, - {ERR_FUNC(PKCS12_F_PKCS12_PACK_P7DATA), "PKCS12_pack_p7data"}, - {ERR_FUNC(PKCS12_F_PKCS12_PACK_P7ENCDATA), "PKCS12_pack_p7encdata"}, - {ERR_FUNC(PKCS12_F_PKCS12_PARSE), "PKCS12_parse"}, - {ERR_FUNC(PKCS12_F_PKCS12_PBE_CRYPT), "PKCS12_pbe_crypt"}, - {ERR_FUNC(PKCS12_F_PKCS12_PBE_KEYIVGEN), "PKCS12_PBE_keyivgen"}, - {ERR_FUNC(PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF), +static const ERR_STRING_DATA PKCS12_str_functs[] = { + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_CREATE, 0), "PKCS12_create"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_GEN_MAC, 0), "PKCS12_gen_mac"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_INIT, 0), "PKCS12_init"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_ITEM_DECRYPT_D2I, 0), + "PKCS12_item_decrypt_d2i"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, 0), + "PKCS12_item_i2d_encrypt"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG, 0), + "PKCS12_item_pack_safebag"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_KEY_GEN_ASC, 0), + "PKCS12_key_gen_asc"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_KEY_GEN_UNI, 0), + "PKCS12_key_gen_uni"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_KEY_GEN_UTF8, 0), + "PKCS12_key_gen_utf8"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_NEWPASS, 0), "PKCS12_newpass"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_PACK_P7DATA, 0), + "PKCS12_pack_p7data"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_PACK_P7ENCDATA, 0), + "PKCS12_pack_p7encdata"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_PARSE, 0), "PKCS12_parse"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_PBE_CRYPT, 0), + "PKCS12_pbe_crypt"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_PBE_KEYIVGEN, 0), + "PKCS12_PBE_keyivgen"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF, 0), "PKCS12_SAFEBAG_create0_p8inf"}, - {ERR_FUNC(PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8), + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8, 0), "PKCS12_SAFEBAG_create0_pkcs8"}, - {ERR_FUNC(PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT), + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT, 0), "PKCS12_SAFEBAG_create_pkcs8_encrypt"}, - {ERR_FUNC(PKCS12_F_PKCS12_SETUP_MAC), "PKCS12_setup_mac"}, - {ERR_FUNC(PKCS12_F_PKCS12_SET_MAC), "PKCS12_set_mac"}, - {ERR_FUNC(PKCS12_F_PKCS12_UNPACK_AUTHSAFES), "PKCS12_unpack_authsafes"}, - {ERR_FUNC(PKCS12_F_PKCS12_UNPACK_P7DATA), "PKCS12_unpack_p7data"}, - {ERR_FUNC(PKCS12_F_PKCS12_VERIFY_MAC), "PKCS12_verify_mac"}, - {ERR_FUNC(PKCS12_F_PKCS8_ENCRYPT), "PKCS8_encrypt"}, - {ERR_FUNC(PKCS12_F_PKCS8_SET0_PBE), "PKCS8_set0_pbe"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_SETUP_MAC, 0), + "PKCS12_setup_mac"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_SET_MAC, 0), "PKCS12_set_mac"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_UNPACK_AUTHSAFES, 0), + "PKCS12_unpack_authsafes"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_UNPACK_P7DATA, 0), + "PKCS12_unpack_p7data"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS12_VERIFY_MAC, 0), + "PKCS12_verify_mac"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS8_ENCRYPT, 0), "PKCS8_encrypt"}, + {ERR_PACK(ERR_LIB_PKCS12, PKCS12_F_PKCS8_SET0_PBE, 0), "PKCS8_set0_pbe"}, {0, NULL} }; -static ERR_STRING_DATA PKCS12_str_reasons[] = { - {ERR_REASON(PKCS12_R_CANT_PACK_STRUCTURE), "cant pack structure"}, - {ERR_REASON(PKCS12_R_CONTENT_TYPE_NOT_DATA), "content type not data"}, - {ERR_REASON(PKCS12_R_DECODE_ERROR), "decode error"}, - {ERR_REASON(PKCS12_R_ENCODE_ERROR), "encode error"}, - {ERR_REASON(PKCS12_R_ENCRYPT_ERROR), "encrypt error"}, - {ERR_REASON(PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE), - "error setting encrypted data type"}, - {ERR_REASON(PKCS12_R_INVALID_NULL_ARGUMENT), "invalid null argument"}, - {ERR_REASON(PKCS12_R_INVALID_NULL_PKCS12_POINTER), - "invalid null pkcs12 pointer"}, - {ERR_REASON(PKCS12_R_IV_GEN_ERROR), "iv gen error"}, - {ERR_REASON(PKCS12_R_KEY_GEN_ERROR), "key gen error"}, - {ERR_REASON(PKCS12_R_MAC_ABSENT), "mac absent"}, - {ERR_REASON(PKCS12_R_MAC_GENERATION_ERROR), "mac generation error"}, - {ERR_REASON(PKCS12_R_MAC_SETUP_ERROR), "mac setup error"}, - {ERR_REASON(PKCS12_R_MAC_STRING_SET_ERROR), "mac string set error"}, - {ERR_REASON(PKCS12_R_MAC_VERIFY_FAILURE), "mac verify failure"}, - {ERR_REASON(PKCS12_R_PARSE_ERROR), "parse error"}, - {ERR_REASON(PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR), - "pkcs12 algor cipherinit error"}, - {ERR_REASON(PKCS12_R_PKCS12_CIPHERFINAL_ERROR), - "pkcs12 cipherfinal error"}, - {ERR_REASON(PKCS12_R_PKCS12_PBE_CRYPT_ERROR), "pkcs12 pbe crypt error"}, - {ERR_REASON(PKCS12_R_UNKNOWN_DIGEST_ALGORITHM), - "unknown digest algorithm"}, - {ERR_REASON(PKCS12_R_UNSUPPORTED_PKCS12_MODE), "unsupported pkcs12 mode"}, +static const ERR_STRING_DATA PKCS12_str_reasons[] = { + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_CANT_PACK_STRUCTURE), + "cant pack structure"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_CONTENT_TYPE_NOT_DATA), + "content type not data"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_DECODE_ERROR), "decode error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_ENCODE_ERROR), "encode error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_ENCRYPT_ERROR), "encrypt error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE), + "error setting encrypted data type"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_INVALID_NULL_ARGUMENT), + "invalid null argument"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_INVALID_NULL_PKCS12_POINTER), + "invalid null pkcs12 pointer"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_IV_GEN_ERROR), "iv gen error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_KEY_GEN_ERROR), "key gen error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_MAC_ABSENT), "mac absent"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_MAC_GENERATION_ERROR), + "mac generation error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_MAC_SETUP_ERROR), "mac setup error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_MAC_STRING_SET_ERROR), + "mac string set error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_MAC_VERIFY_FAILURE), + "mac verify failure"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_PARSE_ERROR), "parse error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR), + "pkcs12 algor cipherinit error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_PKCS12_CIPHERFINAL_ERROR), + "pkcs12 cipherfinal error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_PKCS12_PBE_CRYPT_ERROR), + "pkcs12 pbe crypt error"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_UNKNOWN_DIGEST_ALGORITHM), + "unknown digest algorithm"}, + {ERR_PACK(ERR_LIB_PKCS12, 0, PKCS12_R_UNSUPPORTED_PKCS12_MODE), + "unsupported pkcs12 mode"}, {0, NULL} }; @@ -85,10 +102,9 @@ static ERR_STRING_DATA PKCS12_str_reasons[] = { int ERR_load_PKCS12_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(PKCS12_str_functs[0].error) == NULL) { - ERR_load_strings(0, PKCS12_str_functs); - ERR_load_strings(0, PKCS12_str_reasons); + ERR_load_strings_const(PKCS12_str_functs); + ERR_load_strings_const(PKCS12_str_reasons); } #endif return 1; diff --git a/crypto/pkcs7/pk7_dgst.c b/crypto/pkcs7/pk7_dgst.c deleted file mode 100644 index 965fb37e..00000000 --- a/crypto/pkcs7/pk7_dgst.c +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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 - */ - -#include -#include "internal/cryptlib.h" -#include -#include -#include -#include diff --git a/crypto/pkcs7/pk7_doit.c b/crypto/pkcs7/pk7_doit.c index e6e80f08..c5baf046 100644 --- a/crypto/pkcs7/pk7_doit.c +++ b/crypto/pkcs7/pk7_doit.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -316,18 +316,16 @@ BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio) } if (bio == NULL) { - if (PKCS7_is_detached(p7)) { + if (PKCS7_is_detached(p7)) bio = BIO_new(BIO_s_null()); - } else if (os && os->length > 0) { + else if (os && os->length > 0) bio = BIO_new_mem_buf(os->data, os->length); - } else { + if (bio == NULL) { bio = BIO_new(BIO_s_mem()); if (bio == NULL) goto err; BIO_set_mem_eof_return(bio, 0); } - if (bio == NULL) - goto err; } if (out) BIO_push(out, bio); @@ -809,13 +807,13 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) ret = 1; err: EVP_MD_CTX_free(ctx_tmp); - return (ret); + return ret; } int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si) { EVP_MD_CTX *mctx; - EVP_PKEY_CTX *pctx; + EVP_PKEY_CTX *pctx = NULL; unsigned char *abuf = NULL; int alen; size_t siglen; @@ -1041,7 +1039,7 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, ret = 1; err: EVP_MD_CTX_free(mdc_tmp); - return (ret); + return ret; } PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx) @@ -1059,19 +1057,19 @@ PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx) if (rsk == NULL) return NULL; if (sk_PKCS7_RECIP_INFO_num(rsk) <= idx) - return (NULL); + return NULL; ri = sk_PKCS7_RECIP_INFO_value(rsk, idx); - return (ri->issuer_and_serial); + return ri->issuer_and_serial; } ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid) { - return (get_attribute(si->auth_attr, nid)); + return get_attribute(si->auth_attr, nid); } ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid) { - return (get_attribute(si->unauth_attr, nid)); + return get_attribute(si->unauth_attr, nid); } static ASN1_TYPE *get_attribute(STACK_OF(X509_ATTRIBUTE) *sk, int nid) @@ -1105,9 +1103,9 @@ int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, X509_ATTRIBUTE_dup(sk_X509_ATTRIBUTE_value (sk, i)))) == NULL) - return (0); + return 0; } - return (1); + return 1; } int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, @@ -1124,21 +1122,21 @@ int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, X509_ATTRIBUTE_dup(sk_X509_ATTRIBUTE_value (sk, i)))) == NULL) - return (0); + return 0; } - return (1); + return 1; } int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value) { - return (add_attribute(&(p7si->auth_attr), nid, atrtype, value)); + return add_attribute(&(p7si->auth_attr), nid, atrtype, value); } int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, void *value) { - return (add_attribute(&(p7si->unauth_attr), nid, atrtype, value)); + return add_attribute(&(p7si->unauth_attr), nid, atrtype, value); } static int add_attribute(STACK_OF(X509_ATTRIBUTE) **sk, int nid, int atrtype, @@ -1176,5 +1174,5 @@ static int add_attribute(STACK_OF(X509_ATTRIBUTE) **sk, int nid, int atrtype, goto new_attrib; } end: - return (1); + return 1; } diff --git a/crypto/pkcs7/pk7_enc.c b/crypto/pkcs7/pk7_enc.c deleted file mode 100644 index 3c59f9c8..00000000 --- a/crypto/pkcs7/pk7_enc.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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 - */ - -#include -#include "internal/cryptlib.h" -#include -#include -#include -#include - -PKCS7_in_bio(PKCS7 *p7, BIO *in); -PKCS7_out_bio(PKCS7 *p7, BIO *out); - -PKCS7_add_signer(PKCS7 *p7, X509 *cert, EVP_PKEY *key); -PKCS7_cipher(PKCS7 *p7, EVP_CIPHER *cipher); - -PKCS7_Init(PKCS7 *p7); -PKCS7_Update(PKCS7 *p7); -PKCS7_Finish(PKCS7 *p7); diff --git a/crypto/pkcs7/pk7_lib.c b/crypto/pkcs7/pk7_lib.c index 69c68cf5..88dd613c 100644 --- a/crypto/pkcs7/pk7_lib.c +++ b/crypto/pkcs7/pk7_lib.c @@ -57,7 +57,7 @@ long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg) PKCS7err(PKCS7_F_PKCS7_CTRL, PKCS7_R_UNKNOWN_OPERATION); ret = 0; } - return (ret); + return ret; } int PKCS7_content_new(PKCS7 *p7, int type) @@ -71,10 +71,10 @@ int PKCS7_content_new(PKCS7 *p7, int type) if (!PKCS7_set_content(p7, ret)) goto err; - return (1); + return 1; err: PKCS7_free(ret); - return (0); + return 0; } int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data) @@ -99,9 +99,9 @@ int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data) PKCS7err(PKCS7_F_PKCS7_SET_CONTENT, PKCS7_R_UNSUPPORTED_CONTENT_TYPE); goto err; } - return (1); + return 1; err: - return (0); + return 0; } int PKCS7_set_type(PKCS7 *p7, int type) @@ -171,9 +171,9 @@ int PKCS7_set_type(PKCS7 *p7, int type) PKCS7err(PKCS7_F_PKCS7_SET_TYPE, PKCS7_R_UNSUPPORTED_CONTENT_TYPE); goto err; } - return (1); + return 1; err: - return (0); + return 0; } int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other) @@ -202,7 +202,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi) break; default: PKCS7err(PKCS7_F_PKCS7_ADD_SIGNER, PKCS7_R_WRONG_CONTENT_TYPE); - return (0); + return 0; } nid = OBJ_obj2nid(psi->digest_alg->algorithm); @@ -221,7 +221,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi) || (alg->parameter = ASN1_TYPE_new()) == NULL) { X509_ALGOR_free(alg); PKCS7err(PKCS7_F_PKCS7_ADD_SIGNER, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } alg->algorithm = OBJ_nid2obj(nid); alg->parameter->type = V_ASN1_NULL; @@ -233,7 +233,7 @@ int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *psi) if (!sk_PKCS7_SIGNER_INFO_push(signer_sk, psi)) return 0; - return (1); + return 1; } int PKCS7_add_certificate(PKCS7 *p7, X509 *x509) @@ -251,7 +251,7 @@ int PKCS7_add_certificate(PKCS7 *p7, X509 *x509) break; default: PKCS7err(PKCS7_F_PKCS7_ADD_CERTIFICATE, PKCS7_R_WRONG_CONTENT_TYPE); - return (0); + return 0; } if (*sk == NULL) @@ -265,7 +265,7 @@ int PKCS7_add_certificate(PKCS7 *p7, X509 *x509) X509_free(x509); return 0; } - return (1); + return 1; } int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl) @@ -283,7 +283,7 @@ int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl) break; default: PKCS7err(PKCS7_F_PKCS7_ADD_CRL, PKCS7_R_WRONG_CONTENT_TYPE); - return (0); + return 0; } if (*sk == NULL) @@ -298,7 +298,7 @@ int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl) X509_CRL_free(crl); return 0; } - return (1); + return 1; } int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, @@ -369,10 +369,10 @@ PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, EVP_PKEY *pkey, goto err; if (!PKCS7_add_signer(p7, si)) goto err; - return (si); + return si; err: PKCS7_SIGNER_INFO_free(si); - return (NULL); + return NULL; } int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md) @@ -396,11 +396,11 @@ STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7) if (p7 == NULL || p7->d.ptr == NULL) return NULL; if (PKCS7_type_is_signed(p7)) { - return (p7->d.sign->signer_info); + return p7->d.sign->signer_info; } else if (PKCS7_type_is_signedAndEnveloped(p7)) { - return (p7->d.signed_and_enveloped->signer_info); + return p7->d.signed_and_enveloped->signer_info; } else - return (NULL); + return NULL; } void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, @@ -452,12 +452,12 @@ int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri) default: PKCS7err(PKCS7_F_PKCS7_ADD_RECIPIENT_INFO, PKCS7_R_WRONG_CONTENT_TYPE); - return (0); + return 0; } if (!sk_PKCS7_RECIP_INFO_push(sk, ri)) return 0; - return (1); + return 1; } int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509) @@ -512,7 +512,7 @@ X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si) si-> issuer_and_serial->serial)); else - return (NULL); + return NULL; } int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher) @@ -530,7 +530,7 @@ int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher) break; default: PKCS7err(PKCS7_F_PKCS7_SET_CIPHER, PKCS7_R_WRONG_CONTENT_TYPE); - return (0); + return 0; } /* Check cipher OID exists and has data in it */ @@ -538,7 +538,7 @@ int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher) if (i == NID_undef) { PKCS7err(PKCS7_F_PKCS7_SET_CIPHER, PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER); - return (0); + return 0; } ec->cipher = cipher; diff --git a/crypto/pkcs7/pk7_mime.c b/crypto/pkcs7/pk7_mime.c index 97474cf5..19e68681 100644 --- a/crypto/pkcs7/pk7_mime.c +++ b/crypto/pkcs7/pk7_mime.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -8,7 +8,6 @@ */ #include -#include #include "internal/cryptlib.h" #include #include diff --git a/crypto/pkcs7/pkcs7err.c b/crypto/pkcs7/pkcs7err.c index d5baa9b8..07490c1a 100644 --- a/crypto/pkcs7/pkcs7err.c +++ b/crypto/pkcs7/pkcs7err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,111 +8,137 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_PKCS7,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_PKCS7,0,reason) - -static ERR_STRING_DATA PKCS7_str_functs[] = { - {ERR_FUNC(PKCS7_F_DO_PKCS7_SIGNED_ATTRIB), "do_pkcs7_signed_attrib"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME), +static const ERR_STRING_DATA PKCS7_str_functs[] = { + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_DO_PKCS7_SIGNED_ATTRIB, 0), + "do_pkcs7_signed_attrib"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME, 0), "PKCS7_add0_attrib_signing_time"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP), + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP, 0), "PKCS7_add_attrib_smimecap"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD_CERTIFICATE), "PKCS7_add_certificate"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD_CRL), "PKCS7_add_crl"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD_RECIPIENT_INFO), "PKCS7_add_recipient_info"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD_SIGNATURE), "PKCS7_add_signature"}, - {ERR_FUNC(PKCS7_F_PKCS7_ADD_SIGNER), "PKCS7_add_signer"}, - {ERR_FUNC(PKCS7_F_PKCS7_BIO_ADD_DIGEST), "PKCS7_bio_add_digest"}, - {ERR_FUNC(PKCS7_F_PKCS7_COPY_EXISTING_DIGEST), + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_CERTIFICATE, 0), + "PKCS7_add_certificate"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_CRL, 0), "PKCS7_add_crl"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_RECIPIENT_INFO, 0), + "PKCS7_add_recipient_info"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_SIGNATURE, 0), + "PKCS7_add_signature"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ADD_SIGNER, 0), "PKCS7_add_signer"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_BIO_ADD_DIGEST, 0), + "PKCS7_bio_add_digest"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_COPY_EXISTING_DIGEST, 0), "pkcs7_copy_existing_digest"}, - {ERR_FUNC(PKCS7_F_PKCS7_CTRL), "PKCS7_ctrl"}, - {ERR_FUNC(PKCS7_F_PKCS7_DATADECODE), "PKCS7_dataDecode"}, - {ERR_FUNC(PKCS7_F_PKCS7_DATAFINAL), "PKCS7_dataFinal"}, - {ERR_FUNC(PKCS7_F_PKCS7_DATAINIT), "PKCS7_dataInit"}, - {ERR_FUNC(PKCS7_F_PKCS7_DATAVERIFY), "PKCS7_dataVerify"}, - {ERR_FUNC(PKCS7_F_PKCS7_DECRYPT), "PKCS7_decrypt"}, - {ERR_FUNC(PKCS7_F_PKCS7_DECRYPT_RINFO), "pkcs7_decrypt_rinfo"}, - {ERR_FUNC(PKCS7_F_PKCS7_ENCODE_RINFO), "pkcs7_encode_rinfo"}, - {ERR_FUNC(PKCS7_F_PKCS7_ENCRYPT), "PKCS7_encrypt"}, - {ERR_FUNC(PKCS7_F_PKCS7_FINAL), "PKCS7_final"}, - {ERR_FUNC(PKCS7_F_PKCS7_FIND_DIGEST), "PKCS7_find_digest"}, - {ERR_FUNC(PKCS7_F_PKCS7_GET0_SIGNERS), "PKCS7_get0_signers"}, - {ERR_FUNC(PKCS7_F_PKCS7_RECIP_INFO_SET), "PKCS7_RECIP_INFO_set"}, - {ERR_FUNC(PKCS7_F_PKCS7_SET_CIPHER), "PKCS7_set_cipher"}, - {ERR_FUNC(PKCS7_F_PKCS7_SET_CONTENT), "PKCS7_set_content"}, - {ERR_FUNC(PKCS7_F_PKCS7_SET_DIGEST), "PKCS7_set_digest"}, - {ERR_FUNC(PKCS7_F_PKCS7_SET_TYPE), "PKCS7_set_type"}, - {ERR_FUNC(PKCS7_F_PKCS7_SIGN), "PKCS7_sign"}, - {ERR_FUNC(PKCS7_F_PKCS7_SIGNATUREVERIFY), "PKCS7_signatureVerify"}, - {ERR_FUNC(PKCS7_F_PKCS7_SIGNER_INFO_SET), "PKCS7_SIGNER_INFO_set"}, - {ERR_FUNC(PKCS7_F_PKCS7_SIGNER_INFO_SIGN), "PKCS7_SIGNER_INFO_sign"}, - {ERR_FUNC(PKCS7_F_PKCS7_SIGN_ADD_SIGNER), "PKCS7_sign_add_signer"}, - {ERR_FUNC(PKCS7_F_PKCS7_SIMPLE_SMIMECAP), "PKCS7_simple_smimecap"}, - {ERR_FUNC(PKCS7_F_PKCS7_VERIFY), "PKCS7_verify"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_CTRL, 0), "PKCS7_ctrl"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATADECODE, 0), "PKCS7_dataDecode"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATAFINAL, 0), "PKCS7_dataFinal"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATAINIT, 0), "PKCS7_dataInit"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DATAVERIFY, 0), "PKCS7_dataVerify"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DECRYPT, 0), "PKCS7_decrypt"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_DECRYPT_RINFO, 0), + "pkcs7_decrypt_rinfo"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ENCODE_RINFO, 0), + "pkcs7_encode_rinfo"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_ENCRYPT, 0), "PKCS7_encrypt"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_FINAL, 0), "PKCS7_final"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_FIND_DIGEST, 0), + "PKCS7_find_digest"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_GET0_SIGNERS, 0), + "PKCS7_get0_signers"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_RECIP_INFO_SET, 0), + "PKCS7_RECIP_INFO_set"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_CIPHER, 0), "PKCS7_set_cipher"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_CONTENT, 0), + "PKCS7_set_content"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_DIGEST, 0), "PKCS7_set_digest"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SET_TYPE, 0), "PKCS7_set_type"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGN, 0), "PKCS7_sign"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGNATUREVERIFY, 0), + "PKCS7_signatureVerify"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGNER_INFO_SET, 0), + "PKCS7_SIGNER_INFO_set"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGNER_INFO_SIGN, 0), + "PKCS7_SIGNER_INFO_sign"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIGN_ADD_SIGNER, 0), + "PKCS7_sign_add_signer"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_SIMPLE_SMIMECAP, 0), + "PKCS7_simple_smimecap"}, + {ERR_PACK(ERR_LIB_PKCS7, PKCS7_F_PKCS7_VERIFY, 0), "PKCS7_verify"}, {0, NULL} }; -static ERR_STRING_DATA PKCS7_str_reasons[] = { - {ERR_REASON(PKCS7_R_CERTIFICATE_VERIFY_ERROR), - "certificate verify error"}, - {ERR_REASON(PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER), - "cipher has no object identifier"}, - {ERR_REASON(PKCS7_R_CIPHER_NOT_INITIALIZED), "cipher not initialized"}, - {ERR_REASON(PKCS7_R_CONTENT_AND_DATA_PRESENT), - "content and data present"}, - {ERR_REASON(PKCS7_R_CTRL_ERROR), "ctrl error"}, - {ERR_REASON(PKCS7_R_DECRYPT_ERROR), "decrypt error"}, - {ERR_REASON(PKCS7_R_DIGEST_FAILURE), "digest failure"}, - {ERR_REASON(PKCS7_R_ENCRYPTION_CTRL_FAILURE), "encryption ctrl failure"}, - {ERR_REASON(PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE), - "encryption not supported for this key type"}, - {ERR_REASON(PKCS7_R_ERROR_ADDING_RECIPIENT), "error adding recipient"}, - {ERR_REASON(PKCS7_R_ERROR_SETTING_CIPHER), "error setting cipher"}, - {ERR_REASON(PKCS7_R_INVALID_NULL_POINTER), "invalid null pointer"}, - {ERR_REASON(PKCS7_R_INVALID_SIGNED_DATA_TYPE), - "invalid signed data type"}, - {ERR_REASON(PKCS7_R_NO_CONTENT), "no content"}, - {ERR_REASON(PKCS7_R_NO_DEFAULT_DIGEST), "no default digest"}, - {ERR_REASON(PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND), - "no matching digest type found"}, - {ERR_REASON(PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE), - "no recipient matches certificate"}, - {ERR_REASON(PKCS7_R_NO_SIGNATURES_ON_DATA), "no signatures on data"}, - {ERR_REASON(PKCS7_R_NO_SIGNERS), "no signers"}, - {ERR_REASON(PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE), - "operation not supported on this type"}, - {ERR_REASON(PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR), - "pkcs7 add signature error"}, - {ERR_REASON(PKCS7_R_PKCS7_ADD_SIGNER_ERROR), "pkcs7 add signer error"}, - {ERR_REASON(PKCS7_R_PKCS7_DATASIGN), "pkcs7 datasign"}, - {ERR_REASON(PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), - "private key does not match certificate"}, - {ERR_REASON(PKCS7_R_SIGNATURE_FAILURE), "signature failure"}, - {ERR_REASON(PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND), - "signer certificate not found"}, - {ERR_REASON(PKCS7_R_SIGNING_CTRL_FAILURE), "signing ctrl failure"}, - {ERR_REASON(PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE), - "signing not supported for this key type"}, - {ERR_REASON(PKCS7_R_SMIME_TEXT_ERROR), "smime text error"}, - {ERR_REASON(PKCS7_R_UNABLE_TO_FIND_CERTIFICATE), - "unable to find certificate"}, - {ERR_REASON(PKCS7_R_UNABLE_TO_FIND_MEM_BIO), "unable to find mem bio"}, - {ERR_REASON(PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST), - "unable to find message digest"}, - {ERR_REASON(PKCS7_R_UNKNOWN_DIGEST_TYPE), "unknown digest type"}, - {ERR_REASON(PKCS7_R_UNKNOWN_OPERATION), "unknown operation"}, - {ERR_REASON(PKCS7_R_UNSUPPORTED_CIPHER_TYPE), "unsupported cipher type"}, - {ERR_REASON(PKCS7_R_UNSUPPORTED_CONTENT_TYPE), - "unsupported content type"}, - {ERR_REASON(PKCS7_R_WRONG_CONTENT_TYPE), "wrong content type"}, - {ERR_REASON(PKCS7_R_WRONG_PKCS7_TYPE), "wrong pkcs7 type"}, +static const ERR_STRING_DATA PKCS7_str_reasons[] = { + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_CERTIFICATE_VERIFY_ERROR), + "certificate verify error"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER), + "cipher has no object identifier"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_CIPHER_NOT_INITIALIZED), + "cipher not initialized"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_CONTENT_AND_DATA_PRESENT), + "content and data present"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_CTRL_ERROR), "ctrl error"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_DECRYPT_ERROR), "decrypt error"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_DIGEST_FAILURE), "digest failure"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_ENCRYPTION_CTRL_FAILURE), + "encryption ctrl failure"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE), + "encryption not supported for this key type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_ERROR_ADDING_RECIPIENT), + "error adding recipient"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_ERROR_SETTING_CIPHER), + "error setting cipher"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_INVALID_NULL_POINTER), + "invalid null pointer"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_INVALID_SIGNED_DATA_TYPE), + "invalid signed data type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_NO_CONTENT), "no content"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_NO_DEFAULT_DIGEST), + "no default digest"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND), + "no matching digest type found"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE), + "no recipient matches certificate"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_NO_SIGNATURES_ON_DATA), + "no signatures on data"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_NO_SIGNERS), "no signers"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE), + "operation not supported on this type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR), + "pkcs7 add signature error"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_PKCS7_ADD_SIGNER_ERROR), + "pkcs7 add signer error"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_PKCS7_DATASIGN), "pkcs7 datasign"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), + "private key does not match certificate"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_SIGNATURE_FAILURE), + "signature failure"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND), + "signer certificate not found"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_SIGNING_CTRL_FAILURE), + "signing ctrl failure"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE), + "signing not supported for this key type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_SMIME_TEXT_ERROR), "smime text error"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNABLE_TO_FIND_CERTIFICATE), + "unable to find certificate"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNABLE_TO_FIND_MEM_BIO), + "unable to find mem bio"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST), + "unable to find message digest"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNKNOWN_DIGEST_TYPE), + "unknown digest type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNKNOWN_OPERATION), + "unknown operation"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNSUPPORTED_CIPHER_TYPE), + "unsupported cipher type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_UNSUPPORTED_CONTENT_TYPE), + "unsupported content type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_WRONG_CONTENT_TYPE), + "wrong content type"}, + {ERR_PACK(ERR_LIB_PKCS7, 0, PKCS7_R_WRONG_PKCS7_TYPE), "wrong pkcs7 type"}, {0, NULL} }; @@ -121,10 +147,9 @@ static ERR_STRING_DATA PKCS7_str_reasons[] = { int ERR_load_PKCS7_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(PKCS7_str_functs[0].error) == NULL) { - ERR_load_strings(0, PKCS7_str_functs); - ERR_load_strings(0, PKCS7_str_reasons); + ERR_load_strings_const(PKCS7_str_functs); + ERR_load_strings_const(PKCS7_str_reasons); } #endif return 1; diff --git a/crypto/poly1305/asm/poly1305-armv8.pl b/crypto/poly1305/asm/poly1305-armv8.pl index 0fc8667a..ac06457b 100755 --- a/crypto/poly1305/asm/poly1305-armv8.pl +++ b/crypto/poly1305/asm/poly1305-armv8.pl @@ -28,6 +28,7 @@ # Denver 1.64/+50% 1.18(*) # X-Gene 2.13/+68% 2.27 # Mongoose 1.77/+75% 1.12 +# Kryo 2.70/+55% 1.13 # # (*) estimate based on resources availability is less than 1.0, # i.e. measured result is worse than expected, presumably binary diff --git a/crypto/poly1305/asm/poly1305-mips.pl b/crypto/poly1305/asm/poly1305-mips.pl index d2b3e90d..28b6772e 100755 --- a/crypto/poly1305/asm/poly1305-mips.pl +++ b/crypto/poly1305/asm/poly1305-mips.pl @@ -67,6 +67,8 @@ $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0x0003f000" : "0x00030000"; ($in0,$in1,$tmp0,$tmp1,$tmp2,$tmp3,$tmp4) = ($a4,$a5,$a6,$a7,$at,$t0,$t1); $code.=<<___; +#include "mips_arch.h" + #ifdef MIPSEB # define MSB 0 # define LSB 7 @@ -92,10 +94,15 @@ poly1305_init: beqz $inp,.Lno_key +#if defined(_MIPS_ARCH_MIPS64R6) + ld $in0,0($inp) + ld $in1,8($inp) +#else ldl $in0,0+MSB($inp) ldl $in1,8+MSB($inp) ldr $in0,0+LSB($inp) ldr $in1,8+LSB($inp) +#endif #ifdef MIPSEB # if defined(_MIPS_ARCH_MIPS64R2) dsbh $in0,$in0 # byte swap @@ -182,7 +189,7 @@ poly1305_blocks_internal: .frame $sp,6*8,$ra .mask $SAVED_REGS_MASK,-8 .set noreorder - dsub $sp,6*8 + dsubu $sp,6*8 sd $s5,40($sp) sd $s4,32($sp) ___ @@ -204,11 +211,16 @@ $code.=<<___; ld $s1,40($ctx) .Loop: +#if defined(_MIPS_ARCH_MIPS64R6) + ld $in0,0($inp) # load input + ld $in1,8($inp) +#else ldl $in0,0+MSB($inp) # load input ldl $in1,8+MSB($inp) ldr $in0,0+LSB($inp) - daddiu $len,-1 ldr $in1,8+LSB($inp) +#endif + daddiu $len,-1 daddiu $inp,16 #ifdef MIPSEB # if defined(_MIPS_ARCH_MIPS64R2) @@ -258,42 +270,42 @@ $code.=<<___; sltu $tmp1,$h1,$in1 daddu $h1,$tmp0 - dmultu $r0,$h0 # h0*r0 + dmultu ($r0,$h0) # h0*r0 daddu $h2,$padbit sltu $tmp0,$h1,$tmp0 - mflo $d0 - mfhi $d1 + mflo ($d0,$r0,$h0) + mfhi ($d1,$r0,$h0) - dmultu $s1,$h1 # h1*5*r1 + dmultu ($s1,$h1) # h1*5*r1 daddu $tmp0,$tmp1 daddu $h2,$tmp0 - mflo $tmp0 - mfhi $tmp1 + mflo ($tmp0,$s1,$h1) + mfhi ($tmp1,$s1,$h1) - dmultu $r1,$h0 # h0*r1 + dmultu ($r1,$h0) # h0*r1 daddu $d0,$tmp0 daddu $d1,$tmp1 - mflo $tmp2 - mfhi $d2 + mflo ($tmp2,$r1,$h0) + mfhi ($d2,$r1,$h0) sltu $tmp0,$d0,$tmp0 daddu $d1,$tmp0 - dmultu $r0,$h1 # h1*r0 + dmultu ($r0,$h1) # h1*r0 daddu $d1,$tmp2 sltu $tmp2,$d1,$tmp2 - mflo $tmp0 - mfhi $tmp1 + mflo ($tmp0,$r0,$h1) + mfhi ($tmp1,$r0,$h1) daddu $d2,$tmp2 - dmultu $s1,$h2 # h2*5*r1 + dmultu ($s1,$h2) # h2*5*r1 daddu $d1,$tmp0 daddu $d2,$tmp1 - mflo $tmp2 + mflo ($tmp2,$s1,$h2) - dmultu $r0,$h2 # h2*r0 + dmultu ($r0,$h2) # h2*r0 sltu $tmp0,$d1,$tmp0 daddu $d2,$tmp0 - mflo $tmp3 + mflo ($tmp3,$r0,$h2) daddu $d1,$tmp2 daddu $d2,$tmp3 @@ -329,7 +341,7 @@ $code.=<<___ if ($flavour =~ /nubi/i); # optimize non-nubi epilogue ___ $code.=<<___; jr $ra - dadd $sp,6*8 + daddu $sp,6*8 .end poly1305_blocks_internal ___ } diff --git a/crypto/poly1305/asm/poly1305-x86.pl b/crypto/poly1305/asm/poly1305-x86.pl index ab24dfcf..ec1efd93 100755 --- a/crypto/poly1305/asm/poly1305-x86.pl +++ b/crypto/poly1305/asm/poly1305-x86.pl @@ -29,6 +29,7 @@ # Westmere 4.58/+100% 1.43 # Sandy Bridge 3.90/+100% 1.36 # Haswell 3.88/+70% 1.18 0.72 +# Skylake 3.10/+60% 1.14 0.62 # Silvermont 11.0/+40% 4.80 # Goldmont 4.10/+200% 2.10 # VIA Nano 6.71/+90% 2.47 @@ -49,7 +50,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"poly1305-x86.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $sse2=$avx=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -729,7 +730,7 @@ my $extra = shift; &movdqa ($T0,$T1); # -> base 2^26 ... &pand ($T1,$MASK); - &paddd ($D0,$T1); # ... and accumuate + &paddd ($D0,$T1); # ... and accumulate &movdqa ($T1,$T0); &psrlq ($T0,26); diff --git a/crypto/poly1305/asm/poly1305-x86_64.pl b/crypto/poly1305/asm/poly1305-x86_64.pl index 4c22ded5..0d1c0de6 100755 --- a/crypto/poly1305/asm/poly1305-x86_64.pl +++ b/crypto/poly1305/asm/poly1305-x86_64.pl @@ -18,21 +18,39 @@ # # March 2015 # +# Initial release. +# +# December 2016 +# +# Add AVX512F+VL+BW code path. +# +# November 2017 +# +# Convert AVX512F+VL+BW code path to pure AVX512F, so that it can be +# executed even on Knights Landing. Trigger for modification was +# observation that AVX512 code paths can negatively affect overall +# Skylake-X system performance. Since we are likely to suppress +# AVX512F capability flag [at least on Skylake-X], conversion serves +# as kind of "investment protection". Note that next *lake processor, +# Cannolake, has AVX512IFMA code path to execute... +# # Numbers are cycles per processed byte with poly1305_blocks alone, # measured with rdtsc at fixed clock frequency. # -# IALU/gcc-4.8(*) AVX(**) AVX2 +# IALU/gcc-4.8(*) AVX(**) AVX2 AVX-512 # P4 4.46/+120% - # Core 2 2.41/+90% - # Westmere 1.88/+120% - # Sandy Bridge 1.39/+140% 1.10 # Haswell 1.14/+175% 1.11 0.65 -# Skylake 1.13/+120% 0.96 0.51 +# Skylake[-X] 1.13/+120% 0.96 0.51 [0.35] # Silvermont 2.83/+95% - +# Knights L 3.60/? 1.65 1.10 0.41(***) # Goldmont 1.70/+180% - # VIA Nano 1.82/+150% - # Sledgehammer 1.38/+160% - # Bulldozer 2.30/+130% 0.97 +# Ryzen 1.15/+200% 1.08 1.18 # # (*) improvement coefficients relative to clang are more modest and # are ~50% on most processors, in both cases we are comparing to @@ -42,6 +60,8 @@ # Core processors, 50-30%, less newer processor is, but slower on # contemporary ones, for example almost 2x slower on Atom, and as # former are naturally disappearing, SSE2 is deemed unnecessary; +# (***) strangely enough performance seems to vary from core to core, +# listed result is best case; $flavour = shift; $output = shift; @@ -56,12 +76,13 @@ die "can't locate x86_64-xlate.pl"; if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1` =~ /GNU assembler version ([2-9]\.[0-9]+)/) { - $avx = ($1>=2.19) + ($1>=2.22); + $avx = ($1>=2.19) + ($1>=2.22) + ($1>=2.25) + ($1>=2.26); } if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) && - `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) { - $avx = ($1>=2.09) + ($1>=2.10); + `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) { + $avx = ($1>=2.09) + ($1>=2.10) + 2 * ($1>=2.12); + $avx += 2 if ($1==2.11 && $2>=8); } if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && @@ -171,6 +192,13 @@ $code.=<<___ if ($avx>1); bt \$`5+32`,%r9 # AVX2? cmovc %rax,%r10 ___ +$code.=<<___ if ($avx>3); + mov \$`(1<<31|1<<21|1<<16)`,%rax + shr \$32,%r9 + and %rax,%r9 + cmp %rax,%r9 + je .Linit_base2_44 +___ $code.=<<___; mov \$0x0ffffffc0fffffff,%rax mov \$0x0ffffffc0ffffffc,%rcx @@ -196,16 +224,23 @@ $code.=<<___; .type poly1305_blocks,\@function,4 .align 32 poly1305_blocks: +.cfi_startproc .Lblocks: shr \$4,$len jz .Lno_data # too short push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lblocks_body: mov $len,%r15 # reassign $len @@ -241,15 +276,23 @@ $code.=<<___; mov $h2,16($ctx) mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%r12 +.cfi_restore %r12 mov 32(%rsp),%rbp +.cfi_restore %rbp mov 40(%rsp),%rbx +.cfi_restore %rbx lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 .Lno_data: .Lblocks_epilogue: ret +.cfi_endproc .size poly1305_blocks,.-poly1305_blocks .type poly1305_emit,\@function,3 @@ -265,7 +308,7 @@ poly1305_emit: mov %r9,%rcx adc \$0,%r9 adc \$0,%r10 - shr \$2,%r10 # did 130-bit value overfow? + shr \$2,%r10 # did 130-bit value overflow? cmovnz %r8,%rax cmovnz %r9,%rcx @@ -470,6 +513,7 @@ __poly1305_init_avx: .type poly1305_blocks_avx,\@function,4 .align 32 poly1305_blocks_avx: +.cfi_startproc mov 20($ctx),%r8d # is_base2_26 cmp \$128,$len jae .Lblocks_avx @@ -489,11 +533,17 @@ poly1305_blocks_avx: jz .Leven_avx push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lblocks_avx_body: mov $len,%r15 # reassign $len @@ -596,24 +646,39 @@ poly1305_blocks_avx: .align 16 .Ldone_avx: mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%r12 +.cfi_restore %r12 mov 32(%rsp),%rbp +.cfi_restore %rbp mov 40(%rsp),%rbx +.cfi_restore %rbx lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 .Lno_data_avx: .Lblocks_avx_epilogue: ret +.cfi_endproc .align 32 .Lbase2_64_avx: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lbase2_64_avx_body: mov $len,%r15 # reassign $len @@ -673,18 +738,27 @@ poly1305_blocks_avx: mov %r15,$len mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%r12 +.cfi_restore %r12 mov 32(%rsp),%rbp +.cfi_restore %rbp mov 40(%rsp),%rbx +.cfi_restore %rbx lea 48(%rsp),%rax lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 .Lbase2_64_avx_epilogue: jmp .Ldo_avx +.cfi_endproc .align 32 .Leven_avx: +.cfi_startproc vmovd 4*0($ctx),$H0 # load hash value vmovd 4*1($ctx),$H1 vmovd 4*2($ctx),$H2 @@ -695,6 +769,7 @@ poly1305_blocks_avx: ___ $code.=<<___ if (!$win64); lea -0x58(%rsp),%r11 +.cfi_def_cfa %r11,0x60 sub \$0x178,%rsp ___ $code.=<<___ if ($win64); @@ -1287,10 +1362,12 @@ $code.=<<___ if ($win64); ___ $code.=<<___ if (!$win64); lea 0x58(%r11),%rsp +.cfi_def_cfa %rsp,8 ___ $code.=<<___; vzeroupper ret +.cfi_endproc .size poly1305_blocks_avx,.-poly1305_blocks_avx .type poly1305_emit_avx,\@function,3 @@ -1336,7 +1413,7 @@ poly1305_emit_avx: mov %r9,%rcx adc \$0,%r9 adc \$0,%r10 - shr \$2,%r10 # did 130-bit value overfow? + shr \$2,%r10 # did 130-bit value overflow? cmovnz %r8,%rax cmovnz %r9,%rcx @@ -1358,6 +1435,7 @@ $code.=<<___; .type poly1305_blocks_avx2,\@function,4 .align 32 poly1305_blocks_avx2: +.cfi_startproc mov 20($ctx),%r8d # is_base2_26 cmp \$128,$len jae .Lblocks_avx2 @@ -1377,11 +1455,17 @@ poly1305_blocks_avx2: jz .Leven_avx2 push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lblocks_avx2_body: mov $len,%r15 # reassign $len @@ -1490,24 +1574,39 @@ poly1305_blocks_avx2: .align 16 .Ldone_avx2: mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%r12 +.cfi_restore %r12 mov 32(%rsp),%rbp +.cfi_restore %rbp mov 40(%rsp),%rbx +.cfi_restore %rbx lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 .Lno_data_avx2: .Lblocks_avx2_epilogue: ret +.cfi_endproc .align 32 .Lbase2_64_avx2: +.cfi_startproc push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 .Lbase2_64_avx2_body: mov $len,%r15 # reassign $len @@ -1569,21 +1668,33 @@ poly1305_blocks_avx2: call __poly1305_init_avx .Lproceed_avx2: - mov %r15,$len + mov %r15,$len # restore $len + mov OPENSSL_ia32cap_P+8(%rip),%r10d + mov \$`(1<<31|1<<30|1<<16)`,%r11d mov 0(%rsp),%r15 +.cfi_restore %r15 mov 8(%rsp),%r14 +.cfi_restore %r14 mov 16(%rsp),%r13 +.cfi_restore %r13 mov 24(%rsp),%r12 +.cfi_restore %r12 mov 32(%rsp),%rbp +.cfi_restore %rbp mov 40(%rsp),%rbx +.cfi_restore %rbx lea 48(%rsp),%rax lea 48(%rsp),%rsp +.cfi_adjust_cfa_offset -48 .Lbase2_64_avx2_epilogue: jmp .Ldo_avx2 +.cfi_endproc .align 32 .Leven_avx2: +.cfi_startproc + mov OPENSSL_ia32cap_P+8(%rip),%r10d vmovd 4*0($ctx),%x#$H0 # load hash value base 2^26 vmovd 4*1($ctx),%x#$H1 vmovd 4*2($ctx),%x#$H2 @@ -1592,8 +1703,17 @@ poly1305_blocks_avx2: .Ldo_avx2: ___ +$code.=<<___ if ($avx>2); + cmp \$512,$len + jb .Lskip_avx512 + and %r11d,%r10d + test \$`1<<16`,%r10d # check for AVX512F + jnz .Lblocks_avx512 +.Lskip_avx512: +___ $code.=<<___ if (!$win64); lea -8(%rsp),%r11 +.cfi_def_cfa %r11,16 sub \$0x128,%rsp ___ $code.=<<___ if ($win64); @@ -1612,8 +1732,9 @@ $code.=<<___ if ($win64); .Ldo_avx2_body: ___ $code.=<<___; - lea 48+64($ctx),$ctx # size optimization lea .Lconst(%rip),%rcx + lea 48+64($ctx),$ctx # size optimization + vmovdqa 96(%rcx),$T0 # .Lpermd_avx2 # expand and copy pre-calculated table to stack vmovdqu `16*0-64`($ctx),%x#$T2 @@ -1623,36 +1744,28 @@ $code.=<<___; vmovdqu `16*3-64`($ctx),%x#$D0 vmovdqu `16*4-64`($ctx),%x#$D1 vmovdqu `16*5-64`($ctx),%x#$D2 + lea 0x90(%rsp),%rax # size optimization vmovdqu `16*6-64`($ctx),%x#$D3 - vpermq \$0x15,$T2,$T2 # 00003412 -> 12343434 + vpermd $T2,$T0,$T2 # 00003412 -> 14243444 vmovdqu `16*7-64`($ctx),%x#$D4 - vpermq \$0x15,$T3,$T3 - vpshufd \$0xc8,$T2,$T2 # 12343434 -> 14243444 + vpermd $T3,$T0,$T3 vmovdqu `16*8-64`($ctx),%x#$MASK - vpermq \$0x15,$T4,$T4 - vpshufd \$0xc8,$T3,$T3 + vpermd $T4,$T0,$T4 vmovdqa $T2,0x00(%rsp) - vpermq \$0x15,$D0,$D0 - vpshufd \$0xc8,$T4,$T4 - vmovdqa $T3,0x20(%rsp) - vpermq \$0x15,$D1,$D1 - vpshufd \$0xc8,$D0,$D0 - vmovdqa $T4,0x40(%rsp) - vpermq \$0x15,$D2,$D2 - vpshufd \$0xc8,$D1,$D1 - vmovdqa $D0,0x60(%rsp) - vpermq \$0x15,$D3,$D3 - vpshufd \$0xc8,$D2,$D2 - vmovdqa $D1,0x80(%rsp) - vpermq \$0x15,$D4,$D4 - vpshufd \$0xc8,$D3,$D3 - vmovdqa $D2,0xa0(%rsp) - vpermq \$0x15,$MASK,$MASK - vpshufd \$0xc8,$D4,$D4 - vmovdqa $D3,0xc0(%rsp) - vpshufd \$0xc8,$MASK,$MASK - vmovdqa $D4,0xe0(%rsp) - vmovdqa $MASK,0x100(%rsp) + vpermd $D0,$T0,$D0 + vmovdqa $T3,0x20-0x90(%rax) + vpermd $D1,$T0,$D1 + vmovdqa $T4,0x40-0x90(%rax) + vpermd $D2,$T0,$D2 + vmovdqa $D0,0x60-0x90(%rax) + vpermd $D3,$T0,$D3 + vmovdqa $D1,0x80-0x90(%rax) + vpermd $D4,$T0,$D4 + vmovdqa $D2,0xa0-0x90(%rax) + vpermd $MASK,$T0,$MASK + vmovdqa $D3,0xc0-0x90(%rax) + vmovdqa $D4,0xe0-0x90(%rax) + vmovdqa $MASK,0x100-0x90(%rax) vmovdqa 64(%rcx),$MASK # .Lmask26 ################################################################ @@ -1679,7 +1792,6 @@ $code.=<<___; vpand $MASK,$T3,$T3 # 3 vpor 32(%rcx),$T4,$T4 # padbit, yes, always - lea 0x90(%rsp),%rax # size optimization vpaddq $H2,$T2,$H2 # accumulate input sub \$64,$len jz .Ltail_avx2 @@ -1688,11 +1800,11 @@ $code.=<<___; .align 32 .Loop_avx2: ################################################################ - # ((inp[0]*r^4+r[4])*r^4+r[8])*r^4 - # ((inp[1]*r^4+r[5])*r^4+r[9])*r^3 - # ((inp[2]*r^4+r[6])*r^4+r[10])*r^2 - # ((inp[3]*r^4+r[7])*r^4+r[11])*r^1 - # \________/\________/ + # ((inp[0]*r^4+inp[4])*r^4+inp[ 8])*r^4 + # ((inp[1]*r^4+inp[5])*r^4+inp[ 9])*r^3 + # ((inp[2]*r^4+inp[6])*r^4+inp[10])*r^2 + # ((inp[3]*r^4+inp[7])*r^4+inp[11])*r^1 + # \________/\__________/ ################################################################ #vpaddq $H2,$T2,$H2 # accumulate input vpaddq $H0,$T0,$H0 @@ -1990,13 +2102,1657 @@ $code.=<<___ if ($win64); ___ $code.=<<___ if (!$win64); lea 8(%r11),%rsp +.cfi_def_cfa %rsp,8 ___ $code.=<<___; vzeroupper ret +.cfi_endproc .size poly1305_blocks_avx2,.-poly1305_blocks_avx2 ___ +####################################################################### +if ($avx>2) { +# On entry we have input length divisible by 64. But since inner loop +# processes 128 bytes per iteration, cases when length is not divisible +# by 128 are handled by passing tail 64 bytes to .Ltail_avx2. For this +# reason stack layout is kept identical to poly1305_blocks_avx2. If not +# for this tail, we wouldn't have to even allocate stack frame... + +my ($R0,$R1,$R2,$R3,$R4, $S1,$S2,$S3,$S4) = map("%zmm$_",(16..24)); +my ($M0,$M1,$M2,$M3,$M4) = map("%zmm$_",(25..29)); +my $PADBIT="%zmm30"; + +map(s/%y/%z/,($T4,$T0,$T1,$T2,$T3)); # switch to %zmm domain +map(s/%y/%z/,($D0,$D1,$D2,$D3,$D4)); +map(s/%y/%z/,($H0,$H1,$H2,$H3,$H4)); +map(s/%y/%z/,($MASK)); + +$code.=<<___; +.type poly1305_blocks_avx512,\@function,4 +.align 32 +poly1305_blocks_avx512: +.cfi_startproc +.Lblocks_avx512: + mov \$15,%eax + kmovw %eax,%k2 +___ +$code.=<<___ if (!$win64); + lea -8(%rsp),%r11 +.cfi_def_cfa %r11,16 + sub \$0x128,%rsp +___ +$code.=<<___ if ($win64); + lea -0xf8(%rsp),%r11 + sub \$0x1c8,%rsp + vmovdqa %xmm6,0x50(%r11) + vmovdqa %xmm7,0x60(%r11) + vmovdqa %xmm8,0x70(%r11) + vmovdqa %xmm9,0x80(%r11) + vmovdqa %xmm10,0x90(%r11) + vmovdqa %xmm11,0xa0(%r11) + vmovdqa %xmm12,0xb0(%r11) + vmovdqa %xmm13,0xc0(%r11) + vmovdqa %xmm14,0xd0(%r11) + vmovdqa %xmm15,0xe0(%r11) +.Ldo_avx512_body: +___ +$code.=<<___; + lea .Lconst(%rip),%rcx + lea 48+64($ctx),$ctx # size optimization + vmovdqa 96(%rcx),%y#$T2 # .Lpermd_avx2 + + # expand pre-calculated table + vmovdqu `16*0-64`($ctx),%x#$D0 # will become expanded ${R0} + and \$-512,%rsp + vmovdqu `16*1-64`($ctx),%x#$D1 # will become ... ${R1} + mov \$0x20,%rax + vmovdqu `16*2-64`($ctx),%x#$T0 # ... ${S1} + vmovdqu `16*3-64`($ctx),%x#$D2 # ... ${R2} + vmovdqu `16*4-64`($ctx),%x#$T1 # ... ${S2} + vmovdqu `16*5-64`($ctx),%x#$D3 # ... ${R3} + vmovdqu `16*6-64`($ctx),%x#$T3 # ... ${S3} + vmovdqu `16*7-64`($ctx),%x#$D4 # ... ${R4} + vmovdqu `16*8-64`($ctx),%x#$T4 # ... ${S4} + vpermd $D0,$T2,$R0 # 00003412 -> 14243444 + vpbroadcastq 64(%rcx),$MASK # .Lmask26 + vpermd $D1,$T2,$R1 + vpermd $T0,$T2,$S1 + vpermd $D2,$T2,$R2 + vmovdqa64 $R0,0x00(%rsp){%k2} # save in case $len%128 != 0 + vpsrlq \$32,$R0,$T0 # 14243444 -> 01020304 + vpermd $T1,$T2,$S2 + vmovdqu64 $R1,0x00(%rsp,%rax){%k2} + vpsrlq \$32,$R1,$T1 + vpermd $D3,$T2,$R3 + vmovdqa64 $S1,0x40(%rsp){%k2} + vpermd $T3,$T2,$S3 + vpermd $D4,$T2,$R4 + vmovdqu64 $R2,0x40(%rsp,%rax){%k2} + vpermd $T4,$T2,$S4 + vmovdqa64 $S2,0x80(%rsp){%k2} + vmovdqu64 $R3,0x80(%rsp,%rax){%k2} + vmovdqa64 $S3,0xc0(%rsp){%k2} + vmovdqu64 $R4,0xc0(%rsp,%rax){%k2} + vmovdqa64 $S4,0x100(%rsp){%k2} + + ################################################################ + # calculate 5th through 8th powers of the key + # + # d0 = r0'*r0 + r1'*5*r4 + r2'*5*r3 + r3'*5*r2 + r4'*5*r1 + # d1 = r0'*r1 + r1'*r0 + r2'*5*r4 + r3'*5*r3 + r4'*5*r2 + # d2 = r0'*r2 + r1'*r1 + r2'*r0 + r3'*5*r4 + r4'*5*r3 + # d3 = r0'*r3 + r1'*r2 + r2'*r1 + r3'*r0 + r4'*5*r4 + # d4 = r0'*r4 + r1'*r3 + r2'*r2 + r3'*r1 + r4'*r0 + + vpmuludq $T0,$R0,$D0 # d0 = r0'*r0 + vpmuludq $T0,$R1,$D1 # d1 = r0'*r1 + vpmuludq $T0,$R2,$D2 # d2 = r0'*r2 + vpmuludq $T0,$R3,$D3 # d3 = r0'*r3 + vpmuludq $T0,$R4,$D4 # d4 = r0'*r4 + vpsrlq \$32,$R2,$T2 + + vpmuludq $T1,$S4,$M0 + vpmuludq $T1,$R0,$M1 + vpmuludq $T1,$R1,$M2 + vpmuludq $T1,$R2,$M3 + vpmuludq $T1,$R3,$M4 + vpsrlq \$32,$R3,$T3 + vpaddq $M0,$D0,$D0 # d0 += r1'*5*r4 + vpaddq $M1,$D1,$D1 # d1 += r1'*r0 + vpaddq $M2,$D2,$D2 # d2 += r1'*r1 + vpaddq $M3,$D3,$D3 # d3 += r1'*r2 + vpaddq $M4,$D4,$D4 # d4 += r1'*r3 + + vpmuludq $T2,$S3,$M0 + vpmuludq $T2,$S4,$M1 + vpmuludq $T2,$R1,$M3 + vpmuludq $T2,$R2,$M4 + vpmuludq $T2,$R0,$M2 + vpsrlq \$32,$R4,$T4 + vpaddq $M0,$D0,$D0 # d0 += r2'*5*r3 + vpaddq $M1,$D1,$D1 # d1 += r2'*5*r4 + vpaddq $M3,$D3,$D3 # d3 += r2'*r1 + vpaddq $M4,$D4,$D4 # d4 += r2'*r2 + vpaddq $M2,$D2,$D2 # d2 += r2'*r0 + + vpmuludq $T3,$S2,$M0 + vpmuludq $T3,$R0,$M3 + vpmuludq $T3,$R1,$M4 + vpmuludq $T3,$S3,$M1 + vpmuludq $T3,$S4,$M2 + vpaddq $M0,$D0,$D0 # d0 += r3'*5*r2 + vpaddq $M3,$D3,$D3 # d3 += r3'*r0 + vpaddq $M4,$D4,$D4 # d4 += r3'*r1 + vpaddq $M1,$D1,$D1 # d1 += r3'*5*r3 + vpaddq $M2,$D2,$D2 # d2 += r3'*5*r4 + + vpmuludq $T4,$S4,$M3 + vpmuludq $T4,$R0,$M4 + vpmuludq $T4,$S1,$M0 + vpmuludq $T4,$S2,$M1 + vpmuludq $T4,$S3,$M2 + vpaddq $M3,$D3,$D3 # d3 += r2'*5*r4 + vpaddq $M4,$D4,$D4 # d4 += r2'*r0 + vpaddq $M0,$D0,$D0 # d0 += r2'*5*r1 + vpaddq $M1,$D1,$D1 # d1 += r2'*5*r2 + vpaddq $M2,$D2,$D2 # d2 += r2'*5*r3 + + ################################################################ + # load input + vmovdqu64 16*0($inp),%z#$T3 + vmovdqu64 16*4($inp),%z#$T4 + lea 16*8($inp),$inp + + ################################################################ + # lazy reduction + + vpsrlq \$26,$D3,$M3 + vpandq $MASK,$D3,$D3 + vpaddq $M3,$D4,$D4 # d3 -> d4 + + vpsrlq \$26,$D0,$M0 + vpandq $MASK,$D0,$D0 + vpaddq $M0,$D1,$D1 # d0 -> d1 + + vpsrlq \$26,$D4,$M4 + vpandq $MASK,$D4,$D4 + + vpsrlq \$26,$D1,$M1 + vpandq $MASK,$D1,$D1 + vpaddq $M1,$D2,$D2 # d1 -> d2 + + vpaddq $M4,$D0,$D0 + vpsllq \$2,$M4,$M4 + vpaddq $M4,$D0,$D0 # d4 -> d0 + + vpsrlq \$26,$D2,$M2 + vpandq $MASK,$D2,$D2 + vpaddq $M2,$D3,$D3 # d2 -> d3 + + vpsrlq \$26,$D0,$M0 + vpandq $MASK,$D0,$D0 + vpaddq $M0,$D1,$D1 # d0 -> d1 + + vpsrlq \$26,$D3,$M3 + vpandq $MASK,$D3,$D3 + vpaddq $M3,$D4,$D4 # d3 -> d4 + + ################################################################ + # at this point we have 14243444 in $R0-$S4 and 05060708 in + # $D0-$D4, ... + + vpunpcklqdq $T4,$T3,$T0 # transpose input + vpunpckhqdq $T4,$T3,$T4 + + # ... since input 64-bit lanes are ordered as 73625140, we could + # "vperm" it to 76543210 (here and in each loop iteration), *or* + # we could just flow along, hence the goal for $R0-$S4 is + # 1858286838784888 ... + + vmovdqa32 128(%rcx),$M0 # .Lpermd_avx512: + mov \$0x7777,%eax + kmovw %eax,%k1 + + vpermd $R0,$M0,$R0 # 14243444 -> 1---2---3---4--- + vpermd $R1,$M0,$R1 + vpermd $R2,$M0,$R2 + vpermd $R3,$M0,$R3 + vpermd $R4,$M0,$R4 + + vpermd $D0,$M0,${R0}{%k1} # 05060708 -> 1858286838784888 + vpermd $D1,$M0,${R1}{%k1} + vpermd $D2,$M0,${R2}{%k1} + vpermd $D3,$M0,${R3}{%k1} + vpermd $D4,$M0,${R4}{%k1} + + vpslld \$2,$R1,$S1 # *5 + vpslld \$2,$R2,$S2 + vpslld \$2,$R3,$S3 + vpslld \$2,$R4,$S4 + vpaddd $R1,$S1,$S1 + vpaddd $R2,$S2,$S2 + vpaddd $R3,$S3,$S3 + vpaddd $R4,$S4,$S4 + + vpbroadcastq 32(%rcx),$PADBIT # .L129 + + vpsrlq \$52,$T0,$T2 # splat input + vpsllq \$12,$T4,$T3 + vporq $T3,$T2,$T2 + vpsrlq \$26,$T0,$T1 + vpsrlq \$14,$T4,$T3 + vpsrlq \$40,$T4,$T4 # 4 + vpandq $MASK,$T2,$T2 # 2 + vpandq $MASK,$T0,$T0 # 0 + #vpandq $MASK,$T1,$T1 # 1 + #vpandq $MASK,$T3,$T3 # 3 + #vporq $PADBIT,$T4,$T4 # padbit, yes, always + + vpaddq $H2,$T2,$H2 # accumulate input + sub \$192,$len + jbe .Ltail_avx512 + jmp .Loop_avx512 + +.align 32 +.Loop_avx512: + ################################################################ + # ((inp[0]*r^8+inp[ 8])*r^8+inp[16])*r^8 + # ((inp[1]*r^8+inp[ 9])*r^8+inp[17])*r^7 + # ((inp[2]*r^8+inp[10])*r^8+inp[18])*r^6 + # ((inp[3]*r^8+inp[11])*r^8+inp[19])*r^5 + # ((inp[4]*r^8+inp[12])*r^8+inp[20])*r^4 + # ((inp[5]*r^8+inp[13])*r^8+inp[21])*r^3 + # ((inp[6]*r^8+inp[14])*r^8+inp[22])*r^2 + # ((inp[7]*r^8+inp[15])*r^8+inp[23])*r^1 + # \________/\___________/ + ################################################################ + #vpaddq $H2,$T2,$H2 # accumulate input + + # d4 = h4*r0 + h3*r1 + h2*r2 + h1*r3 + h0*r4 + # d3 = h3*r0 + h2*r1 + h1*r2 + h0*r3 + h4*5*r4 + # d2 = h2*r0 + h1*r1 + h0*r2 + h4*5*r3 + h3*5*r4 + # d1 = h1*r0 + h0*r1 + h4*5*r2 + h3*5*r3 + h2*5*r4 + # d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4 + # + # however, as h2 is "chronologically" first one available pull + # corresponding operations up, so it's + # + # d3 = h2*r1 + h0*r3 + h1*r2 + h3*r0 + h4*5*r4 + # d4 = h2*r2 + h0*r4 + h1*r3 + h3*r1 + h4*r0 + # d0 = h2*5*r3 + h0*r0 + h1*5*r4 + h3*5*r2 + h4*5*r1 + # d1 = h2*5*r4 + h0*r1 + h1*r0 + h3*5*r3 + h4*5*r2 + # d2 = h2*r0 + h0*r2 + h1*r1 + h3*5*r4 + h4*5*r3 + + vpmuludq $H2,$R1,$D3 # d3 = h2*r1 + vpaddq $H0,$T0,$H0 + vpmuludq $H2,$R2,$D4 # d4 = h2*r2 + vpandq $MASK,$T1,$T1 # 1 + vpmuludq $H2,$S3,$D0 # d0 = h2*s3 + vpandq $MASK,$T3,$T3 # 3 + vpmuludq $H2,$S4,$D1 # d1 = h2*s4 + vporq $PADBIT,$T4,$T4 # padbit, yes, always + vpmuludq $H2,$R0,$D2 # d2 = h2*r0 + vpaddq $H1,$T1,$H1 # accumulate input + vpaddq $H3,$T3,$H3 + vpaddq $H4,$T4,$H4 + + vmovdqu64 16*0($inp),$T3 # load input + vmovdqu64 16*4($inp),$T4 + lea 16*8($inp),$inp + vpmuludq $H0,$R3,$M3 + vpmuludq $H0,$R4,$M4 + vpmuludq $H0,$R0,$M0 + vpmuludq $H0,$R1,$M1 + vpaddq $M3,$D3,$D3 # d3 += h0*r3 + vpaddq $M4,$D4,$D4 # d4 += h0*r4 + vpaddq $M0,$D0,$D0 # d0 += h0*r0 + vpaddq $M1,$D1,$D1 # d1 += h0*r1 + + vpmuludq $H1,$R2,$M3 + vpmuludq $H1,$R3,$M4 + vpmuludq $H1,$S4,$M0 + vpmuludq $H0,$R2,$M2 + vpaddq $M3,$D3,$D3 # d3 += h1*r2 + vpaddq $M4,$D4,$D4 # d4 += h1*r3 + vpaddq $M0,$D0,$D0 # d0 += h1*s4 + vpaddq $M2,$D2,$D2 # d2 += h0*r2 + + vpunpcklqdq $T4,$T3,$T0 # transpose input + vpunpckhqdq $T4,$T3,$T4 + + vpmuludq $H3,$R0,$M3 + vpmuludq $H3,$R1,$M4 + vpmuludq $H1,$R0,$M1 + vpmuludq $H1,$R1,$M2 + vpaddq $M3,$D3,$D3 # d3 += h3*r0 + vpaddq $M4,$D4,$D4 # d4 += h3*r1 + vpaddq $M1,$D1,$D1 # d1 += h1*r0 + vpaddq $M2,$D2,$D2 # d2 += h1*r1 + + vpmuludq $H4,$S4,$M3 + vpmuludq $H4,$R0,$M4 + vpmuludq $H3,$S2,$M0 + vpmuludq $H3,$S3,$M1 + vpaddq $M3,$D3,$D3 # d3 += h4*s4 + vpmuludq $H3,$S4,$M2 + vpaddq $M4,$D4,$D4 # d4 += h4*r0 + vpaddq $M0,$D0,$D0 # d0 += h3*s2 + vpaddq $M1,$D1,$D1 # d1 += h3*s3 + vpaddq $M2,$D2,$D2 # d2 += h3*s4 + + vpmuludq $H4,$S1,$M0 + vpmuludq $H4,$S2,$M1 + vpmuludq $H4,$S3,$M2 + vpaddq $M0,$D0,$H0 # h0 = d0 + h4*s1 + vpaddq $M1,$D1,$H1 # h1 = d2 + h4*s2 + vpaddq $M2,$D2,$H2 # h2 = d3 + h4*s3 + + ################################################################ + # lazy reduction (interleaved with input splat) + + vpsrlq \$52,$T0,$T2 # splat input + vpsllq \$12,$T4,$T3 + + vpsrlq \$26,$D3,$H3 + vpandq $MASK,$D3,$D3 + vpaddq $H3,$D4,$H4 # h3 -> h4 + + vporq $T3,$T2,$T2 + + vpsrlq \$26,$H0,$D0 + vpandq $MASK,$H0,$H0 + vpaddq $D0,$H1,$H1 # h0 -> h1 + + vpandq $MASK,$T2,$T2 # 2 + + vpsrlq \$26,$H4,$D4 + vpandq $MASK,$H4,$H4 + + vpsrlq \$26,$H1,$D1 + vpandq $MASK,$H1,$H1 + vpaddq $D1,$H2,$H2 # h1 -> h2 + + vpaddq $D4,$H0,$H0 + vpsllq \$2,$D4,$D4 + vpaddq $D4,$H0,$H0 # h4 -> h0 + + vpaddq $T2,$H2,$H2 # modulo-scheduled + vpsrlq \$26,$T0,$T1 + + vpsrlq \$26,$H2,$D2 + vpandq $MASK,$H2,$H2 + vpaddq $D2,$D3,$H3 # h2 -> h3 + + vpsrlq \$14,$T4,$T3 + + vpsrlq \$26,$H0,$D0 + vpandq $MASK,$H0,$H0 + vpaddq $D0,$H1,$H1 # h0 -> h1 + + vpsrlq \$40,$T4,$T4 # 4 + + vpsrlq \$26,$H3,$D3 + vpandq $MASK,$H3,$H3 + vpaddq $D3,$H4,$H4 # h3 -> h4 + + vpandq $MASK,$T0,$T0 # 0 + #vpandq $MASK,$T1,$T1 # 1 + #vpandq $MASK,$T3,$T3 # 3 + #vporq $PADBIT,$T4,$T4 # padbit, yes, always + + sub \$128,$len + ja .Loop_avx512 + +.Ltail_avx512: + ################################################################ + # while above multiplications were by r^8 in all lanes, in last + # iteration we multiply least significant lane by r^8 and most + # significant one by r, that's why table gets shifted... + + vpsrlq \$32,$R0,$R0 # 0105020603070408 + vpsrlq \$32,$R1,$R1 + vpsrlq \$32,$R2,$R2 + vpsrlq \$32,$S3,$S3 + vpsrlq \$32,$S4,$S4 + vpsrlq \$32,$R3,$R3 + vpsrlq \$32,$R4,$R4 + vpsrlq \$32,$S1,$S1 + vpsrlq \$32,$S2,$S2 + + ################################################################ + # load either next or last 64 byte of input + lea ($inp,$len),$inp + + #vpaddq $H2,$T2,$H2 # accumulate input + vpaddq $H0,$T0,$H0 + + vpmuludq $H2,$R1,$D3 # d3 = h2*r1 + vpmuludq $H2,$R2,$D4 # d4 = h2*r2 + vpmuludq $H2,$S3,$D0 # d0 = h2*s3 + vpandq $MASK,$T1,$T1 # 1 + vpmuludq $H2,$S4,$D1 # d1 = h2*s4 + vpandq $MASK,$T3,$T3 # 3 + vpmuludq $H2,$R0,$D2 # d2 = h2*r0 + vporq $PADBIT,$T4,$T4 # padbit, yes, always + vpaddq $H1,$T1,$H1 # accumulate input + vpaddq $H3,$T3,$H3 + vpaddq $H4,$T4,$H4 + + vmovdqu 16*0($inp),%x#$T0 + vpmuludq $H0,$R3,$M3 + vpmuludq $H0,$R4,$M4 + vpmuludq $H0,$R0,$M0 + vpmuludq $H0,$R1,$M1 + vpaddq $M3,$D3,$D3 # d3 += h0*r3 + vpaddq $M4,$D4,$D4 # d4 += h0*r4 + vpaddq $M0,$D0,$D0 # d0 += h0*r0 + vpaddq $M1,$D1,$D1 # d1 += h0*r1 + + vmovdqu 16*1($inp),%x#$T1 + vpmuludq $H1,$R2,$M3 + vpmuludq $H1,$R3,$M4 + vpmuludq $H1,$S4,$M0 + vpmuludq $H0,$R2,$M2 + vpaddq $M3,$D3,$D3 # d3 += h1*r2 + vpaddq $M4,$D4,$D4 # d4 += h1*r3 + vpaddq $M0,$D0,$D0 # d0 += h1*s4 + vpaddq $M2,$D2,$D2 # d2 += h0*r2 + + vinserti128 \$1,16*2($inp),%y#$T0,%y#$T0 + vpmuludq $H3,$R0,$M3 + vpmuludq $H3,$R1,$M4 + vpmuludq $H1,$R0,$M1 + vpmuludq $H1,$R1,$M2 + vpaddq $M3,$D3,$D3 # d3 += h3*r0 + vpaddq $M4,$D4,$D4 # d4 += h3*r1 + vpaddq $M1,$D1,$D1 # d1 += h1*r0 + vpaddq $M2,$D2,$D2 # d2 += h1*r1 + + vinserti128 \$1,16*3($inp),%y#$T1,%y#$T1 + vpmuludq $H4,$S4,$M3 + vpmuludq $H4,$R0,$M4 + vpmuludq $H3,$S2,$M0 + vpmuludq $H3,$S3,$M1 + vpmuludq $H3,$S4,$M2 + vpaddq $M3,$D3,$H3 # h3 = d3 + h4*s4 + vpaddq $M4,$D4,$D4 # d4 += h4*r0 + vpaddq $M0,$D0,$D0 # d0 += h3*s2 + vpaddq $M1,$D1,$D1 # d1 += h3*s3 + vpaddq $M2,$D2,$D2 # d2 += h3*s4 + + vpmuludq $H4,$S1,$M0 + vpmuludq $H4,$S2,$M1 + vpmuludq $H4,$S3,$M2 + vpaddq $M0,$D0,$H0 # h0 = d0 + h4*s1 + vpaddq $M1,$D1,$H1 # h1 = d2 + h4*s2 + vpaddq $M2,$D2,$H2 # h2 = d3 + h4*s3 + + ################################################################ + # horizontal addition + + mov \$1,%eax + vpermq \$0xb1,$H3,$D3 + vpermq \$0xb1,$D4,$H4 + vpermq \$0xb1,$H0,$D0 + vpermq \$0xb1,$H1,$D1 + vpermq \$0xb1,$H2,$D2 + vpaddq $D3,$H3,$H3 + vpaddq $D4,$H4,$H4 + vpaddq $D0,$H0,$H0 + vpaddq $D1,$H1,$H1 + vpaddq $D2,$H2,$H2 + + kmovw %eax,%k3 + vpermq \$0x2,$H3,$D3 + vpermq \$0x2,$H4,$D4 + vpermq \$0x2,$H0,$D0 + vpermq \$0x2,$H1,$D1 + vpermq \$0x2,$H2,$D2 + vpaddq $D3,$H3,$H3 + vpaddq $D4,$H4,$H4 + vpaddq $D0,$H0,$H0 + vpaddq $D1,$H1,$H1 + vpaddq $D2,$H2,$H2 + + vextracti64x4 \$0x1,$H3,%y#$D3 + vextracti64x4 \$0x1,$H4,%y#$D4 + vextracti64x4 \$0x1,$H0,%y#$D0 + vextracti64x4 \$0x1,$H1,%y#$D1 + vextracti64x4 \$0x1,$H2,%y#$D2 + vpaddq $D3,$H3,${H3}{%k3}{z} # keep single qword in case + vpaddq $D4,$H4,${H4}{%k3}{z} # it's passed to .Ltail_avx2 + vpaddq $D0,$H0,${H0}{%k3}{z} + vpaddq $D1,$H1,${H1}{%k3}{z} + vpaddq $D2,$H2,${H2}{%k3}{z} +___ +map(s/%z/%y/,($T0,$T1,$T2,$T3,$T4, $PADBIT)); +map(s/%z/%y/,($H0,$H1,$H2,$H3,$H4, $D0,$D1,$D2,$D3,$D4, $MASK)); +$code.=<<___; + ################################################################ + # lazy reduction (interleaved with input splat) + + vpsrlq \$26,$H3,$D3 + vpand $MASK,$H3,$H3 + vpsrldq \$6,$T0,$T2 # splat input + vpsrldq \$6,$T1,$T3 + vpunpckhqdq $T1,$T0,$T4 # 4 + vpaddq $D3,$H4,$H4 # h3 -> h4 + + vpsrlq \$26,$H0,$D0 + vpand $MASK,$H0,$H0 + vpunpcklqdq $T3,$T2,$T2 # 2:3 + vpunpcklqdq $T1,$T0,$T0 # 0:1 + vpaddq $D0,$H1,$H1 # h0 -> h1 + + vpsrlq \$26,$H4,$D4 + vpand $MASK,$H4,$H4 + + vpsrlq \$26,$H1,$D1 + vpand $MASK,$H1,$H1 + vpsrlq \$30,$T2,$T3 + vpsrlq \$4,$T2,$T2 + vpaddq $D1,$H2,$H2 # h1 -> h2 + + vpaddq $D4,$H0,$H0 + vpsllq \$2,$D4,$D4 + vpsrlq \$26,$T0,$T1 + vpsrlq \$40,$T4,$T4 # 4 + vpaddq $D4,$H0,$H0 # h4 -> h0 + + vpsrlq \$26,$H2,$D2 + vpand $MASK,$H2,$H2 + vpand $MASK,$T2,$T2 # 2 + vpand $MASK,$T0,$T0 # 0 + vpaddq $D2,$H3,$H3 # h2 -> h3 + + vpsrlq \$26,$H0,$D0 + vpand $MASK,$H0,$H0 + vpaddq $H2,$T2,$H2 # accumulate input for .Ltail_avx2 + vpand $MASK,$T1,$T1 # 1 + vpaddq $D0,$H1,$H1 # h0 -> h1 + + vpsrlq \$26,$H3,$D3 + vpand $MASK,$H3,$H3 + vpand $MASK,$T3,$T3 # 3 + vpor 32(%rcx),$T4,$T4 # padbit, yes, always + vpaddq $D3,$H4,$H4 # h3 -> h4 + + lea 0x90(%rsp),%rax # size optimization for .Ltail_avx2 + add \$64,$len + jnz .Ltail_avx2 + + vpsubq $T2,$H2,$H2 # undo input accumulation + vmovd %x#$H0,`4*0-48-64`($ctx)# save partially reduced + vmovd %x#$H1,`4*1-48-64`($ctx) + vmovd %x#$H2,`4*2-48-64`($ctx) + vmovd %x#$H3,`4*3-48-64`($ctx) + vmovd %x#$H4,`4*4-48-64`($ctx) + vzeroall +___ +$code.=<<___ if ($win64); + movdqa 0x50(%r11),%xmm6 + movdqa 0x60(%r11),%xmm7 + movdqa 0x70(%r11),%xmm8 + movdqa 0x80(%r11),%xmm9 + movdqa 0x90(%r11),%xmm10 + movdqa 0xa0(%r11),%xmm11 + movdqa 0xb0(%r11),%xmm12 + movdqa 0xc0(%r11),%xmm13 + movdqa 0xd0(%r11),%xmm14 + movdqa 0xe0(%r11),%xmm15 + lea 0xf8(%r11),%rsp +.Ldo_avx512_epilogue: +___ +$code.=<<___ if (!$win64); + lea 8(%r11),%rsp +.cfi_def_cfa %rsp,8 +___ +$code.=<<___; + ret +.cfi_endproc +.size poly1305_blocks_avx512,.-poly1305_blocks_avx512 +___ +if ($avx>3) { +######################################################################## +# VPMADD52 version using 2^44 radix. +# +# One can argue that base 2^52 would be more natural. Well, even though +# some operations would be more natural, one has to recognize couple of +# things. Base 2^52 doesn't provide advantage over base 2^44 if you look +# at amount of multiply-n-accumulate operations. Secondly, it makes it +# impossible to pre-compute multiples of 5 [referred to as s[]/sN in +# reference implementations], which means that more such operations +# would have to be performed in inner loop, which in turn makes critical +# path longer. In other words, even though base 2^44 reduction might +# look less elegant, overall critical path is actually shorter... + +######################################################################## +# Layout of opaque area is following. +# +# unsigned __int64 h[3]; # current hash value base 2^44 +# unsigned __int64 s[2]; # key value*20 base 2^44 +# unsigned __int64 r[3]; # key value base 2^44 +# struct { unsigned __int64 r^1, r^3, r^2, r^4; } R[4]; +# # r^n positions reflect +# # placement in register, not +# # memory, R[3] is R[1]*20 + +$code.=<<___; +.type poly1305_init_base2_44,\@function,3 +.align 32 +poly1305_init_base2_44: + xor %rax,%rax + mov %rax,0($ctx) # initialize hash value + mov %rax,8($ctx) + mov %rax,16($ctx) + +.Linit_base2_44: + lea poly1305_blocks_vpmadd52(%rip),%r10 + lea poly1305_emit_base2_44(%rip),%r11 + + mov \$0x0ffffffc0fffffff,%rax + mov \$0x0ffffffc0ffffffc,%rcx + and 0($inp),%rax + mov \$0x00000fffffffffff,%r8 + and 8($inp),%rcx + mov \$0x00000fffffffffff,%r9 + and %rax,%r8 + shrd \$44,%rcx,%rax + mov %r8,40($ctx) # r0 + and %r9,%rax + shr \$24,%rcx + mov %rax,48($ctx) # r1 + lea (%rax,%rax,4),%rax # *5 + mov %rcx,56($ctx) # r2 + shl \$2,%rax # magic <<2 + lea (%rcx,%rcx,4),%rcx # *5 + shl \$2,%rcx # magic <<2 + mov %rax,24($ctx) # s1 + mov %rcx,32($ctx) # s2 + movq \$-1,64($ctx) # write impossible value +___ +$code.=<<___ if ($flavour !~ /elf32/); + mov %r10,0(%rdx) + mov %r11,8(%rdx) +___ +$code.=<<___ if ($flavour =~ /elf32/); + mov %r10d,0(%rdx) + mov %r11d,4(%rdx) +___ +$code.=<<___; + mov \$1,%eax + ret +.size poly1305_init_base2_44,.-poly1305_init_base2_44 +___ +{ +my ($H0,$H1,$H2,$r2r1r0,$r1r0s2,$r0s2s1,$Dlo,$Dhi) = map("%ymm$_",(0..5,16,17)); +my ($T0,$inp_permd,$inp_shift,$PAD) = map("%ymm$_",(18..21)); +my ($reduc_mask,$reduc_rght,$reduc_left) = map("%ymm$_",(22..25)); + +$code.=<<___; +.type poly1305_blocks_vpmadd52,\@function,4 +.align 32 +poly1305_blocks_vpmadd52: + shr \$4,$len + jz .Lno_data_vpmadd52 # too short + + shl \$40,$padbit + mov 64($ctx),%r8 # peek on power of the key + + # if powers of the key are not calculated yet, process up to 3 + # blocks with this single-block subroutine, otherwise ensure that + # length is divisible by 2 blocks and pass the rest down to next + # subroutine... + + mov \$3,%rax + mov \$1,%r10 + cmp \$4,$len # is input long + cmovae %r10,%rax + test %r8,%r8 # is power value impossible? + cmovns %r10,%rax + + and $len,%rax # is input of favourable length? + jz .Lblocks_vpmadd52_4x + + sub %rax,$len + mov \$7,%r10d + mov \$1,%r11d + kmovw %r10d,%k7 + lea .L2_44_inp_permd(%rip),%r10 + kmovw %r11d,%k1 + + vmovq $padbit,%x#$PAD + vmovdqa64 0(%r10),$inp_permd # .L2_44_inp_permd + vmovdqa64 32(%r10),$inp_shift # .L2_44_inp_shift + vpermq \$0xcf,$PAD,$PAD + vmovdqa64 64(%r10),$reduc_mask # .L2_44_mask + + vmovdqu64 0($ctx),${Dlo}{%k7}{z} # load hash value + vmovdqu64 40($ctx),${r2r1r0}{%k7}{z} # load keys + vmovdqu64 32($ctx),${r1r0s2}{%k7}{z} + vmovdqu64 24($ctx),${r0s2s1}{%k7}{z} + + vmovdqa64 96(%r10),$reduc_rght # .L2_44_shift_rgt + vmovdqa64 128(%r10),$reduc_left # .L2_44_shift_lft + + jmp .Loop_vpmadd52 + +.align 32 +.Loop_vpmadd52: + vmovdqu32 0($inp),%x#$T0 # load input as ----3210 + lea 16($inp),$inp + + vpermd $T0,$inp_permd,$T0 # ----3210 -> --322110 + vpsrlvq $inp_shift,$T0,$T0 + vpandq $reduc_mask,$T0,$T0 + vporq $PAD,$T0,$T0 + + vpaddq $T0,$Dlo,$Dlo # accumulate input + + vpermq \$0,$Dlo,${H0}{%k7}{z} # smash hash value + vpermq \$0b01010101,$Dlo,${H1}{%k7}{z} + vpermq \$0b10101010,$Dlo,${H2}{%k7}{z} + + vpxord $Dlo,$Dlo,$Dlo + vpxord $Dhi,$Dhi,$Dhi + + vpmadd52luq $r2r1r0,$H0,$Dlo + vpmadd52huq $r2r1r0,$H0,$Dhi + + vpmadd52luq $r1r0s2,$H1,$Dlo + vpmadd52huq $r1r0s2,$H1,$Dhi + + vpmadd52luq $r0s2s1,$H2,$Dlo + vpmadd52huq $r0s2s1,$H2,$Dhi + + vpsrlvq $reduc_rght,$Dlo,$T0 # 0 in topmost qword + vpsllvq $reduc_left,$Dhi,$Dhi # 0 in topmost qword + vpandq $reduc_mask,$Dlo,$Dlo + + vpaddq $T0,$Dhi,$Dhi + + vpermq \$0b10010011,$Dhi,$Dhi # 0 in lowest qword + + vpaddq $Dhi,$Dlo,$Dlo # note topmost qword :-) + + vpsrlvq $reduc_rght,$Dlo,$T0 # 0 in topmost word + vpandq $reduc_mask,$Dlo,$Dlo + + vpermq \$0b10010011,$T0,$T0 + + vpaddq $T0,$Dlo,$Dlo + + vpermq \$0b10010011,$Dlo,${T0}{%k1}{z} + + vpaddq $T0,$Dlo,$Dlo + vpsllq \$2,$T0,$T0 + + vpaddq $T0,$Dlo,$Dlo + + dec %rax # len-=16 + jnz .Loop_vpmadd52 + + vmovdqu64 $Dlo,0($ctx){%k7} # store hash value + + test $len,$len + jnz .Lblocks_vpmadd52_4x + +.Lno_data_vpmadd52: + ret +.size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52 +___ } +{ +######################################################################## +# As implied by its name 4x subroutine processes 4 blocks in parallel +# (but handles even 4*n+2 blocks lengths). It takes up to 4th key power +# and is handled in 256-bit %ymm registers. + +my ($H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2) = map("%ymm$_",(0..5,16,17)); +my ($D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi) = map("%ymm$_",(18..23)); +my ($T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD) = map("%ymm$_",(24..31)); + +$code.=<<___; +.type poly1305_blocks_vpmadd52_4x,\@function,4 +.align 32 +poly1305_blocks_vpmadd52_4x: + shr \$4,$len + jz .Lno_data_vpmadd52_4x # too short + + shl \$40,$padbit + mov 64($ctx),%r8 # peek on power of the key + +.Lblocks_vpmadd52_4x: + vpbroadcastq $padbit,$PAD + + vmovdqa64 .Lx_mask44(%rip),$mask44 + mov \$5,%eax + vmovdqa64 .Lx_mask42(%rip),$mask42 + kmovw %eax,%k1 # used in 2x path + + test %r8,%r8 # is power value impossible? + js .Linit_vpmadd52 # if it is, then init R[4] + + vmovq 0($ctx),%x#$H0 # load current hash value + vmovq 8($ctx),%x#$H1 + vmovq 16($ctx),%x#$H2 + + test \$3,$len # is length 4*n+2? + jnz .Lblocks_vpmadd52_2x_do + +.Lblocks_vpmadd52_4x_do: + vpbroadcastq 64($ctx),$R0 # load 4th power of the key + vpbroadcastq 96($ctx),$R1 + vpbroadcastq 128($ctx),$R2 + vpbroadcastq 160($ctx),$S1 + +.Lblocks_vpmadd52_4x_key_loaded: + vpsllq \$2,$R2,$S2 # S2 = R2*5*4 + vpaddq $R2,$S2,$S2 + vpsllq \$2,$S2,$S2 + + test \$7,$len # is len 8*n? + jz .Lblocks_vpmadd52_8x + + vmovdqu64 16*0($inp),$T2 # load data + vmovdqu64 16*2($inp),$T3 + lea 16*4($inp),$inp + + vpunpcklqdq $T3,$T2,$T1 # transpose data + vpunpckhqdq $T3,$T2,$T3 + + # at this point 64-bit lanes are ordered as 3-1-2-0 + + vpsrlq \$24,$T3,$T2 # splat the data + vporq $PAD,$T2,$T2 + vpaddq $T2,$H2,$H2 # accumulate input + vpandq $mask44,$T1,$T0 + vpsrlq \$44,$T1,$T1 + vpsllq \$20,$T3,$T3 + vporq $T3,$T1,$T1 + vpandq $mask44,$T1,$T1 + + sub \$4,$len + jz .Ltail_vpmadd52_4x + jmp .Loop_vpmadd52_4x + ud2 + +.align 32 +.Linit_vpmadd52: + vmovq 24($ctx),%x#$S1 # load key + vmovq 56($ctx),%x#$H2 + vmovq 32($ctx),%x#$S2 + vmovq 40($ctx),%x#$R0 + vmovq 48($ctx),%x#$R1 + + vmovdqa $R0,$H0 + vmovdqa $R1,$H1 + vmovdqa $H2,$R2 + + mov \$2,%eax + +.Lmul_init_vpmadd52: + vpxorq $D0lo,$D0lo,$D0lo + vpmadd52luq $H2,$S1,$D0lo + vpxorq $D0hi,$D0hi,$D0hi + vpmadd52huq $H2,$S1,$D0hi + vpxorq $D1lo,$D1lo,$D1lo + vpmadd52luq $H2,$S2,$D1lo + vpxorq $D1hi,$D1hi,$D1hi + vpmadd52huq $H2,$S2,$D1hi + vpxorq $D2lo,$D2lo,$D2lo + vpmadd52luq $H2,$R0,$D2lo + vpxorq $D2hi,$D2hi,$D2hi + vpmadd52huq $H2,$R0,$D2hi + + vpmadd52luq $H0,$R0,$D0lo + vpmadd52huq $H0,$R0,$D0hi + vpmadd52luq $H0,$R1,$D1lo + vpmadd52huq $H0,$R1,$D1hi + vpmadd52luq $H0,$R2,$D2lo + vpmadd52huq $H0,$R2,$D2hi + + vpmadd52luq $H1,$S2,$D0lo + vpmadd52huq $H1,$S2,$D0hi + vpmadd52luq $H1,$R0,$D1lo + vpmadd52huq $H1,$R0,$D1hi + vpmadd52luq $H1,$R1,$D2lo + vpmadd52huq $H1,$R1,$D2hi + + ################################################################ + # partial reduction + vpsrlq \$44,$D0lo,$tmp + vpsllq \$8,$D0hi,$D0hi + vpandq $mask44,$D0lo,$H0 + vpaddq $tmp,$D0hi,$D0hi + + vpaddq $D0hi,$D1lo,$D1lo + + vpsrlq \$44,$D1lo,$tmp + vpsllq \$8,$D1hi,$D1hi + vpandq $mask44,$D1lo,$H1 + vpaddq $tmp,$D1hi,$D1hi + + vpaddq $D1hi,$D2lo,$D2lo + + vpsrlq \$42,$D2lo,$tmp + vpsllq \$10,$D2hi,$D2hi + vpandq $mask42,$D2lo,$H2 + vpaddq $tmp,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + vpsllq \$2,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + + vpsrlq \$44,$H0,$tmp # additional step + vpandq $mask44,$H0,$H0 + + vpaddq $tmp,$H1,$H1 + + dec %eax + jz .Ldone_init_vpmadd52 + + vpunpcklqdq $R1,$H1,$R1 # 1,2 + vpbroadcastq %x#$H1,%x#$H1 # 2,2 + vpunpcklqdq $R2,$H2,$R2 + vpbroadcastq %x#$H2,%x#$H2 + vpunpcklqdq $R0,$H0,$R0 + vpbroadcastq %x#$H0,%x#$H0 + + vpsllq \$2,$R1,$S1 # S1 = R1*5*4 + vpsllq \$2,$R2,$S2 # S2 = R2*5*4 + vpaddq $R1,$S1,$S1 + vpaddq $R2,$S2,$S2 + vpsllq \$2,$S1,$S1 + vpsllq \$2,$S2,$S2 + + jmp .Lmul_init_vpmadd52 + ud2 + +.align 32 +.Ldone_init_vpmadd52: + vinserti128 \$1,%x#$R1,$H1,$R1 # 1,2,3,4 + vinserti128 \$1,%x#$R2,$H2,$R2 + vinserti128 \$1,%x#$R0,$H0,$R0 + + vpermq \$0b11011000,$R1,$R1 # 1,3,2,4 + vpermq \$0b11011000,$R2,$R2 + vpermq \$0b11011000,$R0,$R0 + + vpsllq \$2,$R1,$S1 # S1 = R1*5*4 + vpaddq $R1,$S1,$S1 + vpsllq \$2,$S1,$S1 + + vmovq 0($ctx),%x#$H0 # load current hash value + vmovq 8($ctx),%x#$H1 + vmovq 16($ctx),%x#$H2 + + test \$3,$len # is length 4*n+2? + jnz .Ldone_init_vpmadd52_2x + + vmovdqu64 $R0,64($ctx) # save key powers + vpbroadcastq %x#$R0,$R0 # broadcast 4th power + vmovdqu64 $R1,96($ctx) + vpbroadcastq %x#$R1,$R1 + vmovdqu64 $R2,128($ctx) + vpbroadcastq %x#$R2,$R2 + vmovdqu64 $S1,160($ctx) + vpbroadcastq %x#$S1,$S1 + + jmp .Lblocks_vpmadd52_4x_key_loaded + ud2 + +.align 32 +.Ldone_init_vpmadd52_2x: + vmovdqu64 $R0,64($ctx) # save key powers + vpsrldq \$8,$R0,$R0 # 0-1-0-2 + vmovdqu64 $R1,96($ctx) + vpsrldq \$8,$R1,$R1 + vmovdqu64 $R2,128($ctx) + vpsrldq \$8,$R2,$R2 + vmovdqu64 $S1,160($ctx) + vpsrldq \$8,$S1,$S1 + jmp .Lblocks_vpmadd52_2x_key_loaded + ud2 + +.align 32 +.Lblocks_vpmadd52_2x_do: + vmovdqu64 128+8($ctx),${R2}{%k1}{z}# load 2nd and 1st key powers + vmovdqu64 160+8($ctx),${S1}{%k1}{z} + vmovdqu64 64+8($ctx),${R0}{%k1}{z} + vmovdqu64 96+8($ctx),${R1}{%k1}{z} + +.Lblocks_vpmadd52_2x_key_loaded: + vmovdqu64 16*0($inp),$T2 # load data + vpxorq $T3,$T3,$T3 + lea 16*2($inp),$inp + + vpunpcklqdq $T3,$T2,$T1 # transpose data + vpunpckhqdq $T3,$T2,$T3 + + # at this point 64-bit lanes are ordered as x-1-x-0 + + vpsrlq \$24,$T3,$T2 # splat the data + vporq $PAD,$T2,$T2 + vpaddq $T2,$H2,$H2 # accumulate input + vpandq $mask44,$T1,$T0 + vpsrlq \$44,$T1,$T1 + vpsllq \$20,$T3,$T3 + vporq $T3,$T1,$T1 + vpandq $mask44,$T1,$T1 + + jmp .Ltail_vpmadd52_2x + ud2 + +.align 32 +.Loop_vpmadd52_4x: + #vpaddq $T2,$H2,$H2 # accumulate input + vpaddq $T0,$H0,$H0 + vpaddq $T1,$H1,$H1 + + vpxorq $D0lo,$D0lo,$D0lo + vpmadd52luq $H2,$S1,$D0lo + vpxorq $D0hi,$D0hi,$D0hi + vpmadd52huq $H2,$S1,$D0hi + vpxorq $D1lo,$D1lo,$D1lo + vpmadd52luq $H2,$S2,$D1lo + vpxorq $D1hi,$D1hi,$D1hi + vpmadd52huq $H2,$S2,$D1hi + vpxorq $D2lo,$D2lo,$D2lo + vpmadd52luq $H2,$R0,$D2lo + vpxorq $D2hi,$D2hi,$D2hi + vpmadd52huq $H2,$R0,$D2hi + + vmovdqu64 16*0($inp),$T2 # load data + vmovdqu64 16*2($inp),$T3 + lea 16*4($inp),$inp + vpmadd52luq $H0,$R0,$D0lo + vpmadd52huq $H0,$R0,$D0hi + vpmadd52luq $H0,$R1,$D1lo + vpmadd52huq $H0,$R1,$D1hi + vpmadd52luq $H0,$R2,$D2lo + vpmadd52huq $H0,$R2,$D2hi + + vpunpcklqdq $T3,$T2,$T1 # transpose data + vpunpckhqdq $T3,$T2,$T3 + vpmadd52luq $H1,$S2,$D0lo + vpmadd52huq $H1,$S2,$D0hi + vpmadd52luq $H1,$R0,$D1lo + vpmadd52huq $H1,$R0,$D1hi + vpmadd52luq $H1,$R1,$D2lo + vpmadd52huq $H1,$R1,$D2hi + + ################################################################ + # partial reduction (interleaved with data splat) + vpsrlq \$44,$D0lo,$tmp + vpsllq \$8,$D0hi,$D0hi + vpandq $mask44,$D0lo,$H0 + vpaddq $tmp,$D0hi,$D0hi + + vpsrlq \$24,$T3,$T2 + vporq $PAD,$T2,$T2 + vpaddq $D0hi,$D1lo,$D1lo + + vpsrlq \$44,$D1lo,$tmp + vpsllq \$8,$D1hi,$D1hi + vpandq $mask44,$D1lo,$H1 + vpaddq $tmp,$D1hi,$D1hi + + vpandq $mask44,$T1,$T0 + vpsrlq \$44,$T1,$T1 + vpsllq \$20,$T3,$T3 + vpaddq $D1hi,$D2lo,$D2lo + + vpsrlq \$42,$D2lo,$tmp + vpsllq \$10,$D2hi,$D2hi + vpandq $mask42,$D2lo,$H2 + vpaddq $tmp,$D2hi,$D2hi + + vpaddq $T2,$H2,$H2 # accumulate input + vpaddq $D2hi,$H0,$H0 + vpsllq \$2,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + vporq $T3,$T1,$T1 + vpandq $mask44,$T1,$T1 + + vpsrlq \$44,$H0,$tmp # additional step + vpandq $mask44,$H0,$H0 + + vpaddq $tmp,$H1,$H1 + + sub \$4,$len # len-=64 + jnz .Loop_vpmadd52_4x + +.Ltail_vpmadd52_4x: + vmovdqu64 128($ctx),$R2 # load all key powers + vmovdqu64 160($ctx),$S1 + vmovdqu64 64($ctx),$R0 + vmovdqu64 96($ctx),$R1 + +.Ltail_vpmadd52_2x: + vpsllq \$2,$R2,$S2 # S2 = R2*5*4 + vpaddq $R2,$S2,$S2 + vpsllq \$2,$S2,$S2 + + #vpaddq $T2,$H2,$H2 # accumulate input + vpaddq $T0,$H0,$H0 + vpaddq $T1,$H1,$H1 + + vpxorq $D0lo,$D0lo,$D0lo + vpmadd52luq $H2,$S1,$D0lo + vpxorq $D0hi,$D0hi,$D0hi + vpmadd52huq $H2,$S1,$D0hi + vpxorq $D1lo,$D1lo,$D1lo + vpmadd52luq $H2,$S2,$D1lo + vpxorq $D1hi,$D1hi,$D1hi + vpmadd52huq $H2,$S2,$D1hi + vpxorq $D2lo,$D2lo,$D2lo + vpmadd52luq $H2,$R0,$D2lo + vpxorq $D2hi,$D2hi,$D2hi + vpmadd52huq $H2,$R0,$D2hi + + vpmadd52luq $H0,$R0,$D0lo + vpmadd52huq $H0,$R0,$D0hi + vpmadd52luq $H0,$R1,$D1lo + vpmadd52huq $H0,$R1,$D1hi + vpmadd52luq $H0,$R2,$D2lo + vpmadd52huq $H0,$R2,$D2hi + + vpmadd52luq $H1,$S2,$D0lo + vpmadd52huq $H1,$S2,$D0hi + vpmadd52luq $H1,$R0,$D1lo + vpmadd52huq $H1,$R0,$D1hi + vpmadd52luq $H1,$R1,$D2lo + vpmadd52huq $H1,$R1,$D2hi + + ################################################################ + # horizontal addition + + mov \$1,%eax + kmovw %eax,%k1 + vpsrldq \$8,$D0lo,$T0 + vpsrldq \$8,$D0hi,$H0 + vpsrldq \$8,$D1lo,$T1 + vpsrldq \$8,$D1hi,$H1 + vpaddq $T0,$D0lo,$D0lo + vpaddq $H0,$D0hi,$D0hi + vpsrldq \$8,$D2lo,$T2 + vpsrldq \$8,$D2hi,$H2 + vpaddq $T1,$D1lo,$D1lo + vpaddq $H1,$D1hi,$D1hi + vpermq \$0x2,$D0lo,$T0 + vpermq \$0x2,$D0hi,$H0 + vpaddq $T2,$D2lo,$D2lo + vpaddq $H2,$D2hi,$D2hi + + vpermq \$0x2,$D1lo,$T1 + vpermq \$0x2,$D1hi,$H1 + vpaddq $T0,$D0lo,${D0lo}{%k1}{z} + vpaddq $H0,$D0hi,${D0hi}{%k1}{z} + vpermq \$0x2,$D2lo,$T2 + vpermq \$0x2,$D2hi,$H2 + vpaddq $T1,$D1lo,${D1lo}{%k1}{z} + vpaddq $H1,$D1hi,${D1hi}{%k1}{z} + vpaddq $T2,$D2lo,${D2lo}{%k1}{z} + vpaddq $H2,$D2hi,${D2hi}{%k1}{z} + + ################################################################ + # partial reduction + vpsrlq \$44,$D0lo,$tmp + vpsllq \$8,$D0hi,$D0hi + vpandq $mask44,$D0lo,$H0 + vpaddq $tmp,$D0hi,$D0hi + + vpaddq $D0hi,$D1lo,$D1lo + + vpsrlq \$44,$D1lo,$tmp + vpsllq \$8,$D1hi,$D1hi + vpandq $mask44,$D1lo,$H1 + vpaddq $tmp,$D1hi,$D1hi + + vpaddq $D1hi,$D2lo,$D2lo + + vpsrlq \$42,$D2lo,$tmp + vpsllq \$10,$D2hi,$D2hi + vpandq $mask42,$D2lo,$H2 + vpaddq $tmp,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + vpsllq \$2,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + + vpsrlq \$44,$H0,$tmp # additional step + vpandq $mask44,$H0,$H0 + + vpaddq $tmp,$H1,$H1 + # at this point $len is + # either 4*n+2 or 0... + sub \$2,$len # len-=32 + ja .Lblocks_vpmadd52_4x_do + + vmovq %x#$H0,0($ctx) + vmovq %x#$H1,8($ctx) + vmovq %x#$H2,16($ctx) + vzeroall + +.Lno_data_vpmadd52_4x: + ret +.size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x +___ +} +{ +######################################################################## +# As implied by its name 8x subroutine processes 8 blocks in parallel... +# This is intermediate version, as it's used only in cases when input +# length is either 8*n, 8*n+1 or 8*n+2... + +my ($H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2) = map("%ymm$_",(0..5,16,17)); +my ($D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi) = map("%ymm$_",(18..23)); +my ($T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD) = map("%ymm$_",(24..31)); +my ($RR0,$RR1,$RR2,$SS1,$SS2) = map("%ymm$_",(6..10)); + +$code.=<<___; +.type poly1305_blocks_vpmadd52_8x,\@function,4 +.align 32 +poly1305_blocks_vpmadd52_8x: + shr \$4,$len + jz .Lno_data_vpmadd52_8x # too short + + shl \$40,$padbit + mov 64($ctx),%r8 # peek on power of the key + + vmovdqa64 .Lx_mask44(%rip),$mask44 + vmovdqa64 .Lx_mask42(%rip),$mask42 + + test %r8,%r8 # is power value impossible? + js .Linit_vpmadd52 # if it is, then init R[4] + + vmovq 0($ctx),%x#$H0 # load current hash value + vmovq 8($ctx),%x#$H1 + vmovq 16($ctx),%x#$H2 + +.Lblocks_vpmadd52_8x: + ################################################################ + # fist we calculate more key powers + + vmovdqu64 128($ctx),$R2 # load 1-3-2-4 powers + vmovdqu64 160($ctx),$S1 + vmovdqu64 64($ctx),$R0 + vmovdqu64 96($ctx),$R1 + + vpsllq \$2,$R2,$S2 # S2 = R2*5*4 + vpaddq $R2,$S2,$S2 + vpsllq \$2,$S2,$S2 + + vpbroadcastq %x#$R2,$RR2 # broadcast 4th power + vpbroadcastq %x#$R0,$RR0 + vpbroadcastq %x#$R1,$RR1 + + vpxorq $D0lo,$D0lo,$D0lo + vpmadd52luq $RR2,$S1,$D0lo + vpxorq $D0hi,$D0hi,$D0hi + vpmadd52huq $RR2,$S1,$D0hi + vpxorq $D1lo,$D1lo,$D1lo + vpmadd52luq $RR2,$S2,$D1lo + vpxorq $D1hi,$D1hi,$D1hi + vpmadd52huq $RR2,$S2,$D1hi + vpxorq $D2lo,$D2lo,$D2lo + vpmadd52luq $RR2,$R0,$D2lo + vpxorq $D2hi,$D2hi,$D2hi + vpmadd52huq $RR2,$R0,$D2hi + + vpmadd52luq $RR0,$R0,$D0lo + vpmadd52huq $RR0,$R0,$D0hi + vpmadd52luq $RR0,$R1,$D1lo + vpmadd52huq $RR0,$R1,$D1hi + vpmadd52luq $RR0,$R2,$D2lo + vpmadd52huq $RR0,$R2,$D2hi + + vpmadd52luq $RR1,$S2,$D0lo + vpmadd52huq $RR1,$S2,$D0hi + vpmadd52luq $RR1,$R0,$D1lo + vpmadd52huq $RR1,$R0,$D1hi + vpmadd52luq $RR1,$R1,$D2lo + vpmadd52huq $RR1,$R1,$D2hi + + ################################################################ + # partial reduction + vpsrlq \$44,$D0lo,$tmp + vpsllq \$8,$D0hi,$D0hi + vpandq $mask44,$D0lo,$RR0 + vpaddq $tmp,$D0hi,$D0hi + + vpaddq $D0hi,$D1lo,$D1lo + + vpsrlq \$44,$D1lo,$tmp + vpsllq \$8,$D1hi,$D1hi + vpandq $mask44,$D1lo,$RR1 + vpaddq $tmp,$D1hi,$D1hi + + vpaddq $D1hi,$D2lo,$D2lo + + vpsrlq \$42,$D2lo,$tmp + vpsllq \$10,$D2hi,$D2hi + vpandq $mask42,$D2lo,$RR2 + vpaddq $tmp,$D2hi,$D2hi + + vpaddq $D2hi,$RR0,$RR0 + vpsllq \$2,$D2hi,$D2hi + + vpaddq $D2hi,$RR0,$RR0 + + vpsrlq \$44,$RR0,$tmp # additional step + vpandq $mask44,$RR0,$RR0 + + vpaddq $tmp,$RR1,$RR1 + + ################################################################ + # At this point Rx holds 1324 powers, RRx - 5768, and the goal + # is 15263748, which reflects how data is loaded... + + vpunpcklqdq $R2,$RR2,$T2 # 3748 + vpunpckhqdq $R2,$RR2,$R2 # 1526 + vpunpcklqdq $R0,$RR0,$T0 + vpunpckhqdq $R0,$RR0,$R0 + vpunpcklqdq $R1,$RR1,$T1 + vpunpckhqdq $R1,$RR1,$R1 +___ +######## switch to %zmm +map(s/%y/%z/, $H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2); +map(s/%y/%z/, $D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi); +map(s/%y/%z/, $T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD); +map(s/%y/%z/, $RR0,$RR1,$RR2,$SS1,$SS2); + +$code.=<<___; + vshufi64x2 \$0x44,$R2,$T2,$RR2 # 15263748 + vshufi64x2 \$0x44,$R0,$T0,$RR0 + vshufi64x2 \$0x44,$R1,$T1,$RR1 + + vmovdqu64 16*0($inp),$T2 # load data + vmovdqu64 16*4($inp),$T3 + lea 16*8($inp),$inp + + vpsllq \$2,$RR2,$SS2 # S2 = R2*5*4 + vpsllq \$2,$RR1,$SS1 # S1 = R1*5*4 + vpaddq $RR2,$SS2,$SS2 + vpaddq $RR1,$SS1,$SS1 + vpsllq \$2,$SS2,$SS2 + vpsllq \$2,$SS1,$SS1 + + vpbroadcastq $padbit,$PAD + vpbroadcastq %x#$mask44,$mask44 + vpbroadcastq %x#$mask42,$mask42 + + vpbroadcastq %x#$SS1,$S1 # broadcast 8th power + vpbroadcastq %x#$SS2,$S2 + vpbroadcastq %x#$RR0,$R0 + vpbroadcastq %x#$RR1,$R1 + vpbroadcastq %x#$RR2,$R2 + + vpunpcklqdq $T3,$T2,$T1 # transpose data + vpunpckhqdq $T3,$T2,$T3 + + # at this point 64-bit lanes are ordered as 73625140 + + vpsrlq \$24,$T3,$T2 # splat the data + vporq $PAD,$T2,$T2 + vpaddq $T2,$H2,$H2 # accumulate input + vpandq $mask44,$T1,$T0 + vpsrlq \$44,$T1,$T1 + vpsllq \$20,$T3,$T3 + vporq $T3,$T1,$T1 + vpandq $mask44,$T1,$T1 + + sub \$8,$len + jz .Ltail_vpmadd52_8x + jmp .Loop_vpmadd52_8x + +.align 32 +.Loop_vpmadd52_8x: + #vpaddq $T2,$H2,$H2 # accumulate input + vpaddq $T0,$H0,$H0 + vpaddq $T1,$H1,$H1 + + vpxorq $D0lo,$D0lo,$D0lo + vpmadd52luq $H2,$S1,$D0lo + vpxorq $D0hi,$D0hi,$D0hi + vpmadd52huq $H2,$S1,$D0hi + vpxorq $D1lo,$D1lo,$D1lo + vpmadd52luq $H2,$S2,$D1lo + vpxorq $D1hi,$D1hi,$D1hi + vpmadd52huq $H2,$S2,$D1hi + vpxorq $D2lo,$D2lo,$D2lo + vpmadd52luq $H2,$R0,$D2lo + vpxorq $D2hi,$D2hi,$D2hi + vpmadd52huq $H2,$R0,$D2hi + + vmovdqu64 16*0($inp),$T2 # load data + vmovdqu64 16*4($inp),$T3 + lea 16*8($inp),$inp + vpmadd52luq $H0,$R0,$D0lo + vpmadd52huq $H0,$R0,$D0hi + vpmadd52luq $H0,$R1,$D1lo + vpmadd52huq $H0,$R1,$D1hi + vpmadd52luq $H0,$R2,$D2lo + vpmadd52huq $H0,$R2,$D2hi + + vpunpcklqdq $T3,$T2,$T1 # transpose data + vpunpckhqdq $T3,$T2,$T3 + vpmadd52luq $H1,$S2,$D0lo + vpmadd52huq $H1,$S2,$D0hi + vpmadd52luq $H1,$R0,$D1lo + vpmadd52huq $H1,$R0,$D1hi + vpmadd52luq $H1,$R1,$D2lo + vpmadd52huq $H1,$R1,$D2hi + + ################################################################ + # partial reduction (interleaved with data splat) + vpsrlq \$44,$D0lo,$tmp + vpsllq \$8,$D0hi,$D0hi + vpandq $mask44,$D0lo,$H0 + vpaddq $tmp,$D0hi,$D0hi + + vpsrlq \$24,$T3,$T2 + vporq $PAD,$T2,$T2 + vpaddq $D0hi,$D1lo,$D1lo + + vpsrlq \$44,$D1lo,$tmp + vpsllq \$8,$D1hi,$D1hi + vpandq $mask44,$D1lo,$H1 + vpaddq $tmp,$D1hi,$D1hi + + vpandq $mask44,$T1,$T0 + vpsrlq \$44,$T1,$T1 + vpsllq \$20,$T3,$T3 + vpaddq $D1hi,$D2lo,$D2lo + + vpsrlq \$42,$D2lo,$tmp + vpsllq \$10,$D2hi,$D2hi + vpandq $mask42,$D2lo,$H2 + vpaddq $tmp,$D2hi,$D2hi + + vpaddq $T2,$H2,$H2 # accumulate input + vpaddq $D2hi,$H0,$H0 + vpsllq \$2,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + vporq $T3,$T1,$T1 + vpandq $mask44,$T1,$T1 + + vpsrlq \$44,$H0,$tmp # additional step + vpandq $mask44,$H0,$H0 + + vpaddq $tmp,$H1,$H1 + + sub \$8,$len # len-=128 + jnz .Loop_vpmadd52_8x + +.Ltail_vpmadd52_8x: + #vpaddq $T2,$H2,$H2 # accumulate input + vpaddq $T0,$H0,$H0 + vpaddq $T1,$H1,$H1 + + vpxorq $D0lo,$D0lo,$D0lo + vpmadd52luq $H2,$SS1,$D0lo + vpxorq $D0hi,$D0hi,$D0hi + vpmadd52huq $H2,$SS1,$D0hi + vpxorq $D1lo,$D1lo,$D1lo + vpmadd52luq $H2,$SS2,$D1lo + vpxorq $D1hi,$D1hi,$D1hi + vpmadd52huq $H2,$SS2,$D1hi + vpxorq $D2lo,$D2lo,$D2lo + vpmadd52luq $H2,$RR0,$D2lo + vpxorq $D2hi,$D2hi,$D2hi + vpmadd52huq $H2,$RR0,$D2hi + + vpmadd52luq $H0,$RR0,$D0lo + vpmadd52huq $H0,$RR0,$D0hi + vpmadd52luq $H0,$RR1,$D1lo + vpmadd52huq $H0,$RR1,$D1hi + vpmadd52luq $H0,$RR2,$D2lo + vpmadd52huq $H0,$RR2,$D2hi + + vpmadd52luq $H1,$SS2,$D0lo + vpmadd52huq $H1,$SS2,$D0hi + vpmadd52luq $H1,$RR0,$D1lo + vpmadd52huq $H1,$RR0,$D1hi + vpmadd52luq $H1,$RR1,$D2lo + vpmadd52huq $H1,$RR1,$D2hi + + ################################################################ + # horizontal addition + + mov \$1,%eax + kmovw %eax,%k1 + vpsrldq \$8,$D0lo,$T0 + vpsrldq \$8,$D0hi,$H0 + vpsrldq \$8,$D1lo,$T1 + vpsrldq \$8,$D1hi,$H1 + vpaddq $T0,$D0lo,$D0lo + vpaddq $H0,$D0hi,$D0hi + vpsrldq \$8,$D2lo,$T2 + vpsrldq \$8,$D2hi,$H2 + vpaddq $T1,$D1lo,$D1lo + vpaddq $H1,$D1hi,$D1hi + vpermq \$0x2,$D0lo,$T0 + vpermq \$0x2,$D0hi,$H0 + vpaddq $T2,$D2lo,$D2lo + vpaddq $H2,$D2hi,$D2hi + + vpermq \$0x2,$D1lo,$T1 + vpermq \$0x2,$D1hi,$H1 + vpaddq $T0,$D0lo,$D0lo + vpaddq $H0,$D0hi,$D0hi + vpermq \$0x2,$D2lo,$T2 + vpermq \$0x2,$D2hi,$H2 + vpaddq $T1,$D1lo,$D1lo + vpaddq $H1,$D1hi,$D1hi + vextracti64x4 \$1,$D0lo,%y#$T0 + vextracti64x4 \$1,$D0hi,%y#$H0 + vpaddq $T2,$D2lo,$D2lo + vpaddq $H2,$D2hi,$D2hi + + vextracti64x4 \$1,$D1lo,%y#$T1 + vextracti64x4 \$1,$D1hi,%y#$H1 + vextracti64x4 \$1,$D2lo,%y#$T2 + vextracti64x4 \$1,$D2hi,%y#$H2 +___ +######## switch back to %ymm +map(s/%z/%y/, $H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2); +map(s/%z/%y/, $D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi); +map(s/%z/%y/, $T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD); + +$code.=<<___; + vpaddq $T0,$D0lo,${D0lo}{%k1}{z} + vpaddq $H0,$D0hi,${D0hi}{%k1}{z} + vpaddq $T1,$D1lo,${D1lo}{%k1}{z} + vpaddq $H1,$D1hi,${D1hi}{%k1}{z} + vpaddq $T2,$D2lo,${D2lo}{%k1}{z} + vpaddq $H2,$D2hi,${D2hi}{%k1}{z} + + ################################################################ + # partial reduction + vpsrlq \$44,$D0lo,$tmp + vpsllq \$8,$D0hi,$D0hi + vpandq $mask44,$D0lo,$H0 + vpaddq $tmp,$D0hi,$D0hi + + vpaddq $D0hi,$D1lo,$D1lo + + vpsrlq \$44,$D1lo,$tmp + vpsllq \$8,$D1hi,$D1hi + vpandq $mask44,$D1lo,$H1 + vpaddq $tmp,$D1hi,$D1hi + + vpaddq $D1hi,$D2lo,$D2lo + + vpsrlq \$42,$D2lo,$tmp + vpsllq \$10,$D2hi,$D2hi + vpandq $mask42,$D2lo,$H2 + vpaddq $tmp,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + vpsllq \$2,$D2hi,$D2hi + + vpaddq $D2hi,$H0,$H0 + + vpsrlq \$44,$H0,$tmp # additional step + vpandq $mask44,$H0,$H0 + + vpaddq $tmp,$H1,$H1 + + ################################################################ + + vmovq %x#$H0,0($ctx) + vmovq %x#$H1,8($ctx) + vmovq %x#$H2,16($ctx) + vzeroall + +.Lno_data_vpmadd52_8x: + ret +.size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x +___ +} +$code.=<<___; +.type poly1305_emit_base2_44,\@function,3 +.align 32 +poly1305_emit_base2_44: + mov 0($ctx),%r8 # load hash value + mov 8($ctx),%r9 + mov 16($ctx),%r10 + + mov %r9,%rax + shr \$20,%r9 + shl \$44,%rax + mov %r10,%rcx + shr \$40,%r10 + shl \$24,%rcx + + add %rax,%r8 + adc %rcx,%r9 + adc \$0,%r10 + + mov %r8,%rax + add \$5,%r8 # compare to modulus + mov %r9,%rcx + adc \$0,%r9 + adc \$0,%r10 + shr \$2,%r10 # did 130-bit value overflow? + cmovnz %r8,%rax + cmovnz %r9,%rcx + + add 0($nonce),%rax # accumulate nonce + adc 8($nonce),%rcx + mov %rax,0($mac) # write result + mov %rcx,8($mac) + + ret +.size poly1305_emit_base2_44,.-poly1305_emit_base2_44 +___ +} } } $code.=<<___; .align 64 .Lconst: @@ -2006,8 +3762,29 @@ $code.=<<___; .long `1<<24`,0,`1<<24`,0,`1<<24`,0,`1<<24`,0 .Lmask26: .long 0x3ffffff,0,0x3ffffff,0,0x3ffffff,0,0x3ffffff,0 -.Lfive: -.long 5,0,5,0,5,0,5,0 +.Lpermd_avx2: +.long 2,2,2,3,2,0,2,1 +.Lpermd_avx512: +.long 0,0,0,1, 0,2,0,3, 0,4,0,5, 0,6,0,7 + +.L2_44_inp_permd: +.long 0,1,1,2,2,3,7,7 +.L2_44_inp_shift: +.quad 0,12,24,64 +.L2_44_mask: +.quad 0xfffffffffff,0xfffffffffff,0x3ffffffffff,0xffffffffffffffff +.L2_44_shift_rgt: +.quad 44,44,42,64 +.L2_44_shift_lft: +.quad 8,8,10,64 + +.align 64 +.Lx_mask44: +.quad 0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff +.quad 0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff +.Lx_mask42: +.quad 0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff +.quad 0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff ___ } @@ -2200,6 +3977,11 @@ $code.=<<___ if ($avx>1); .rva .LSEH_end_poly1305_blocks_avx2 .rva .LSEH_info_poly1305_blocks_avx2_3 ___ +$code.=<<___ if ($avx>2); + .rva .LSEH_begin_poly1305_blocks_avx512 + .rva .LSEH_end_poly1305_blocks_avx512 + .rva .LSEH_info_poly1305_blocks_avx512 +___ $code.=<<___; .section .xdata .align 8 @@ -2255,13 +4037,19 @@ $code.=<<___ if ($avx>1); .rva avx_handler .rva .Ldo_avx2_body,.Ldo_avx2_epilogue # HandlerData[] ___ +$code.=<<___ if ($avx>2); +.LSEH_info_poly1305_blocks_avx512: + .byte 9,0,0,0 + .rva avx_handler + .rva .Ldo_avx512_body,.Ldo_avx512_epilogue # HandlerData[] +___ } foreach (split('\n',$code)) { s/\`([^\`]*)\`/eval($1)/ge; s/%r([a-z]+)#d/%e$1/g; s/%r([0-9]+)#d/%r$1d/g; - s/%x#%y/%x/g; + s/%x#%[yz]/%x/g or s/%y#%z/%y/g or s/%z#%[yz]/%z/g; print $_,"\n"; } diff --git a/crypto/poly1305/build.info b/crypto/poly1305/build.info index d575f5a6..631b32b8 100644 --- a/crypto/poly1305/build.info +++ b/crypto/poly1305/build.info @@ -1,10 +1,13 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ + poly1305_pmeth.c \ + poly1305_ameth.c \ poly1305.c {- $target{poly1305_asm_src} -} GENERATE[poly1305-sparcv9.S]=asm/poly1305-sparcv9.pl $(PERLASM_SCHEME) INCLUDE[poly1305-sparcv9.o]=.. -GENERATE[poly1305-x86.s]=asm/poly1305-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[poly1305-x86.s]=asm/poly1305-x86.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) GENERATE[poly1305-x86_64.s]=asm/poly1305-x86_64.pl $(PERLASM_SCHEME) GENERATE[poly1305-ppc.s]=asm/poly1305-ppc.pl $(PERLASM_SCHEME) GENERATE[poly1305-ppcfp.s]=asm/poly1305-ppcfp.pl $(PERLASM_SCHEME) @@ -13,6 +16,7 @@ INCLUDE[poly1305-armv4.o]=.. GENERATE[poly1305-armv8.S]=asm/poly1305-armv8.pl $(PERLASM_SCHEME) INCLUDE[poly1305-armv8.o]=.. GENERATE[poly1305-mips.S]=asm/poly1305-mips.pl $(PERLASM_SCHEME) +INCLUDE[poly1305-mips.o]=.. BEGINRAW[Makefile(unix)] {- $builddir -}/poly1305-%.S: {- $sourcedir -}/asm/poly1305-%.pl diff --git a/crypto/poly1305/poly1305.c b/crypto/poly1305/poly1305.c index eec4d67f..e3eb5da5 100644 --- a/crypto/poly1305/poly1305.c +++ b/crypto/poly1305/poly1305.c @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,25 +12,7 @@ #include #include "internal/poly1305.h" - -typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, - size_t len, unsigned int padbit); -typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], - const unsigned int nonce[4]); - -struct poly1305_context { - double opaque[24]; /* large enough to hold internal state, declared - * 'double' to ensure at least 64-bit invariant - * alignment across all platforms and - * configurations */ - unsigned int nonce[4]; - unsigned char data[POLY1305_BLOCK_SIZE]; - size_t num; - struct { - poly1305_blocks_f blocks; - poly1305_emit_f emit; - } func; -}; +#include "poly1305_local.h" size_t Poly1305_ctx_size () { @@ -113,12 +95,11 @@ poly1305_blocks(void *ctx, const unsigned char *inp, size_t len, u32 padbit); (a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1) \ ) -# if !defined(PEDANTIC) && \ - (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16) && \ +# if (defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16) && \ (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__==8) typedef unsigned long u64; -typedef unsigned __int128 u128; +typedef __uint128_t u128; typedef struct { u64 h[3]; @@ -548,490 +529,3 @@ void Poly1305_Final(POLY1305 *ctx, unsigned char mac[16]) /* zero out the state */ OPENSSL_cleanse(ctx, sizeof(*ctx)); } - -#ifdef SELFTEST -#include - -struct poly1305_test { - const char *inputhex; - const char *keyhex; - const char *outhex; -}; - -static const struct poly1305_test poly1305_tests[] = { - /* - * RFC7539 - */ - { - "43727970746f6772617068696320466f72756d2052657365617263682047726f" - "7570", - "85d6be7857556d337f4452fe42d506a8""0103808afb0db2fd4abff6af4149f51b", - "a8061dc1305136c6c22b8baf0c0127a9" - }, - /* - * test vectors from "The Poly1305-AES message-authentication code" - */ - { - "f3f6", - "851fc40c3467ac0be05cc20404f3f700""580b3b0f9447bb1e69d095b5928b6dbc", - "f4c633c3044fc145f84f335cb81953de" - }, - { - "", - "a0f3080000f46400d0c7e9076c834403""dd3fab2251f11ac759f0887129cc2ee7", - "dd3fab2251f11ac759f0887129cc2ee7" - }, - { - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136", - "48443d0bb0d21109c89a100b5ce2c208""83149c69b561dd88298a1798b10716ef", - "0ee1c16bb73f0f4fd19881753c01cdbe" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "5154ad0d2cb26e01274fc51148491f1b" - }, - /* - * self-generated vectors exercise "significant" lengths, such that - * are handled by different code paths - */ - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "812059a5da198637cac7c4a631bee466" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "5b88d7f6228b11e2e28579a5c0c1f761" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "bbb613b2b6d753ba07395b916aaece15" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "c794d7057d1778c4bbee0a39b3d97342" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "ffbcb9b371423152d7fca5ad042fbaa9" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136" - "812059a5da198637cac7c4a631bee466", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "069ed6b8ef0f207b3e243bb1019fe632" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136" - "812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "cca339d9a45fa2368c2c68b3a4179133" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136" - "812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761" - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "53f6e828a2f0fe0ee815bf0bd5841a34" - }, - { - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136" - "812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761" - "ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0" - "990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9af" - "48443d0bb0d21109c89a100b5ce2c20883149c69b561dd88298a1798b10716ef" - "663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136" - "812059a5da198637cac7c4a631bee4665b88d7f6228b11e2e28579a5c0c1f761", - "12976a08c4426d0ce8a82407c4f48207""80f8c20aa71202d1e29179cbcb555a57", - "b846d44e9bbd53cedffbfbb6b7fa4933" - }, - /* - * 4th power of the key spills to 131th bit in SIMD key setup - */ - { - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "ad628107e8351d0f2c231a05dc4a4106""00000000000000000000000000000000", - "07145a4c02fe5fa32036de68fabe9066" - }, - { - /* - * poly1305_ieee754.c failed this in final stage - */ - "842364e156336c0998b933a6237726180d9e3fdcbde4cd5d17080fc3beb49614" - "d7122c037463ff104d73f19c12704628d417c4c54a3fe30d3c3d7714382d43b0" - "382a50a5dee54be844b076e8df88201a1cd43b90eb21643fa96f39b518aa8340" - "c942ff3c31baf7c9bdbf0f31ae3fa096bf8c63030609829fe72e179824890bc8" - "e08c315c1cce2a83144dbbff09f74e3efc770b54d0984a8f19b14719e6363564" - "1d6b1eedf63efbf080e1783d32445412114c20de0b837a0dfa33d6b82825fff4" - "4c9a70ea54ce47f07df698e6b03323b53079364a5fc3e9dd034392bdde86dccd" - "da94321c5e44060489336cb65bf3989c36f7282c2f5d2b882c171e74", - "95d5c005503e510d8cd0aa072c4a4d06""6eabc52d11653df47fbf63ab198bcc26", - "f248312e578d9d58f8b7bb4d19105431" - }, - /* - * AVX2 in poly1305-x86.pl failed this with 176+32 split - */ - { - "248ac31085b6c2adaaa38259a0d7192c5c35d1bb4ef39ad94c38d1c82479e2dd" - "2159a077024b0589bc8a20101b506f0a1ad0bbab76e83a83f1b94be6beae74e8" - "74cab692c5963a75436b776121ec9f62399a3e66b2d22707dae81933b6277f3c" - "8516bcbe26dbbd86f373103d7cf4cad1888c952118fbfbd0d7b4bedc4ae4936a" - "ff91157e7aa47c54442ea78d6ac251d324a0fbe49d89cc3521b66d16e9c66a37" - "09894e4eb0a4eedc4ae19468e66b81f2" - "71351b1d921ea551047abcc6b87a901fde7db79fa1818c11336dbc07244a40eb", - "000102030405060708090a0b0c0d0e0f""00000000000000000000000000000000", - "bc939bc5281480fa99c6d68c258ec42f" - }, - /* - * test vectors from Google - */ - { - "", - "c8afaac331ee372cd6082de134943b17""4710130e9f6fea8d72293850a667d86c", - "4710130e9f6fea8d72293850a667d86c", - }, - { - "48656c6c6f20776f726c6421", - "746869732069732033322d6279746520""6b657920666f7220506f6c7931333035", - "a6f745008f81c916a20dcc74eef2b2f0" - }, - { - "0000000000000000000000000000000000000000000000000000000000000000", - "746869732069732033322d6279746520""6b657920666f7220506f6c7931333035", - "49ec78090e481ec6c26b33b91ccc0307" - }, - { - "89dab80b7717c1db5db437860a3f70218e93e1b8f461fb677f16f35f6f87e2a9" - "1c99bc3a47ace47640cc95c345be5ecca5a3523c35cc01893af0b64a62033427" - "0372ec12482d1b1e363561698a578b359803495bb4e2ef1930b17a5190b580f1" - "41300df30adbeca28f6427a8bc1a999fd51c554a017d095d8c3e3127daf9f595", - "2d773be37adb1e4d683bf0075e79c4ee""037918535a7f99ccb7040fb5f5f43aea", - "c85d15ed44c378d6b00e23064c7bcd51" - }, - { - "000000000000000b1703030200000000" - "06db1f1f368d696a810a349c0c714c9a5e7850c2407d721acded95e018d7a852" - "66a6e1289cdb4aeb18da5ac8a2b0026d24a59ad485227f3eaedbb2e7e35e1c66" - "cd60f9abf716dcc9ac42682dd7dab287a7024c4eefc321cc0574e16793e37cec" - "03c5bda42b54c114a80b57af26416c7be742005e20855c73e21dc8e2edc9d435" - "cb6f6059280011c270b71570051c1c9b3052126620bc1e2730fa066c7a509d53" - "c60e5ae1b40aa6e39e49669228c90eecb4a50db32a50bc49e90b4f4b359a1dfd" - "11749cd3867fcf2fb7bb6cd4738f6a4ad6f7ca5058f7618845af9f020f6c3b96" - "7b8f4cd4a91e2813b507ae66f2d35c18284f7292186062e10fd5510d18775351" - "ef334e7634ab4743f5b68f49adcab384d3fd75f7390f4006ef2a295c8c7a076a" - "d54546cd25d2107fbe1436c840924aaebe5b370893cd63d1325b8616fc481088" - "6bc152c53221b6df373119393255ee72bcaa880174f1717f9184fa91646f17a2" - "4ac55d16bfddca9581a92eda479201f0edbf633600d6066d1ab36d5d2415d713" - "51bbcd608a25108d25641992c1f26c531cf9f90203bc4cc19f5927d834b0a471" - "16d3884bbb164b8ec883d1ac832e56b3918a98601a08d171881541d594db399c" - "6ae6151221745aec814c45b0b05b565436fd6f137aa10a0c0b643761dbd6f9a9" - "dcb99b1a6e690854ce0769cde39761d82fcdec15f0d92d7d8e94ade8eb83fbe0", - "99e5822dd4173c995e3dae0ddefb9774""3fde3b080134b39f76e9bf8d0e88d546", - "2637408fe13086ea73f971e3425e2820" - }, - /* - * test vectors from Hanno Böck - */ - { - "cccccccccccccccccccccccccccccccccccccccccccccccccc80cccccccccccc" - "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccecccccc" - "ccccccccccccccccccccccccccccccc5cccccccccccccccccccccccccccccccc" - "cccccccccce3cccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccaccccccccccccccccccccce6cccccccccc000000afcccccccccccccc" - "ccccfffffff50000000000000000000000000000000000000000000000000000" - "00ffffffe7000000000000000000000000000000000000000000000000000000" - "0000000000000000000000000000000000000000000000000000719205a8521d" - "fc", - "7f1b0264000000000000000000000000""0000000000000000cccccccccccccccc", - "8559b876eceed66eb37798c0457baff9" - }, - { - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0000000000" - "00000000800264", - "e0001600000000000000000000000000""0000aaaaaaaaaaaaaaaaaaaaaaaaaaaa", - "00bd1258978e205444c9aaaa82006fed" - }, - { - "02fc", - "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c""0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c", - "06120c0c0c0c0c0c0c0c0c0c0c0c0c0c" - }, - { - "7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b" - "7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b" - "7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b" - "7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6e7b007b7b7b7b7b7b7b7b7b" - "7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7b7b7b7b7b7b7b7b7b7b7b7b" - "7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b5c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b" - "7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b" - "7b6e7b001300000000b300000000000000000000000000000000000000000000" - "f20000000000000000000000000000000000002000efff000900000000000000" - "0000000000100000000009000000640000000000000000000000001300000000" - "b300000000000000000000000000000000000000000000f20000000000000000" - "000000000000000000002000efff00090000000000000000007a000010000000" - "000900000064000000000000000000000000000000000000000000000000fc", - "00ff0000000000000000000000000000""00000000001e00000000000000007b7b", - "33205bbf9e9f8f7212ab9e2ab9b7e4a5" - }, - { - "7777777777777777777777777777777777777777777777777777777777777777" - "7777777777777777777777777777777777777777777777777777777777777777" - "777777777777777777777777ffffffe9e9acacacacacacacacacacac0000acac" - "ec0100acacac2caca2acacacacacacacacacacac64f2", - "0000007f0000007f0100002000000000""0000cf77777777777777777777777777", - "02ee7c8c546ddeb1a467e4c3981158b9" - }, - /* - * test vectors from Andrew Moon - */ - { /* nacl */ - "8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186a" - "c0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738" - "b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da" - "99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74" - "e355a5", - "eea6a7251c1e72916d11c2cb214d3c25""2539121d8e234e652d651fa4c8cff880", - "f3ffc7703f9400e52a7dfb4b3d3305d9" - }, - { /* wrap 2^130-5 */ - "ffffffffffffffffffffffffffffffff", - "02000000000000000000000000000000""00000000000000000000000000000000", - "03000000000000000000000000000000" - }, - { /* wrap 2^128 */ - "02000000000000000000000000000000", - "02000000000000000000000000000000""ffffffffffffffffffffffffffffffff", - "03000000000000000000000000000000" - }, - { /* limb carry */ - "fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff" - "11000000000000000000000000000000", - "01000000000000000000000000000000""00000000000000000000000000000000", - "05000000000000000000000000000000" - }, - { /* 2^130-5 */ - "fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe" - "01010101010101010101010101010101", - "01000000000000000000000000000000""00000000000000000000000000000000", - "00000000000000000000000000000000" - }, - { /* 2^130-6 */ - "fdffffffffffffffffffffffffffffff", - "02000000000000000000000000000000""00000000000000000000000000000000", - "faffffffffffffffffffffffffffffff" - }, - { /* 5*H+L reduction intermediate */ - "e33594d7505e43b900000000000000003394d7505e4379cd0100000000000000" - "0000000000000000000000000000000001000000000000000000000000000000", - "01000000000000000400000000000000""00000000000000000000000000000000", - "14000000000000005500000000000000" - }, - { /* 5*H+L reduction final */ - "e33594d7505e43b900000000000000003394d7505e4379cd0100000000000000" - "00000000000000000000000000000000", - "01000000000000000400000000000000""00000000000000000000000000000000", - "13000000000000000000000000000000" - } -}; - -static unsigned char hex_digit(char h) -{ - int i = OPENSSL_hexchar2int(h); - - if (i < 0) - abort(); - return i; -} - -static void hex_decode(unsigned char *out, const char *hex) -{ - size_t j = 0; - - while (*hex != 0) { - unsigned char v = hex_digit(*hex++); - v <<= 4; - v |= hex_digit(*hex++); - out[j++] = v; - } -} - -static void hexdump(unsigned char *a, size_t len) -{ - size_t i; - - for (i = 0; i < len; i++) - printf("%02x", a[i]); -} - -int main() -{ - static const unsigned num_tests = - sizeof(poly1305_tests) / sizeof(struct poly1305_test); - unsigned i; - unsigned char key[32], out[16], expected[16]; - POLY1305 poly1305; - - for (i = 0; i < num_tests; i++) { - const struct poly1305_test *test = &poly1305_tests[i]; - unsigned char *in; - size_t inlen = strlen(test->inputhex); - - if (strlen(test->keyhex) != sizeof(key) * 2 || - strlen(test->outhex) != sizeof(out) * 2 || (inlen & 1) == 1) - return 1; - - inlen /= 2; - - hex_decode(key, test->keyhex); - hex_decode(expected, test->outhex); - - in = malloc(inlen); - - hex_decode(in, test->inputhex); - - Poly1305_Init(&poly1305, key); - Poly1305_Update(&poly1305, in, inlen); - Poly1305_Final(&poly1305, out); - - if (memcmp(out, expected, sizeof(expected)) != 0) { - printf("Poly1305 test #%d failed.\n", i); - printf("got: "); - hexdump(out, sizeof(out)); - printf("\nexpected: "); - hexdump(expected, sizeof(expected)); - printf("\n"); - return 1; - } - - if (inlen > 16) { - Poly1305_Init(&poly1305, key); - Poly1305_Update(&poly1305, in, 1); - Poly1305_Update(&poly1305, in+1, inlen-1); - Poly1305_Final(&poly1305, out); - - if (memcmp(out, expected, sizeof(expected)) != 0) { - printf("Poly1305 test #%d/1+(N-1) failed.\n", i); - printf("got: "); - hexdump(out, sizeof(out)); - printf("\nexpected: "); - hexdump(expected, sizeof(expected)); - printf("\n"); - return 1; - } - } - - if (inlen > 32) { - size_t half = inlen / 2; - - Poly1305_Init(&poly1305, key); - Poly1305_Update(&poly1305, in, half); - Poly1305_Update(&poly1305, in+half, inlen-half); - Poly1305_Final(&poly1305, out); - - if (memcmp(out, expected, sizeof(expected)) != 0) { - printf("Poly1305 test #%d/2 failed.\n", i); - printf("got: "); - hexdump(out, sizeof(out)); - printf("\nexpected: "); - hexdump(expected, sizeof(expected)); - printf("\n"); - return 1; - } - - for (half = 16; half < inlen; half += 16) { - Poly1305_Init(&poly1305, key); - Poly1305_Update(&poly1305, in, half); - Poly1305_Update(&poly1305, in+half, inlen-half); - Poly1305_Final(&poly1305, out); - - if (memcmp(out, expected, sizeof(expected)) != 0) { - printf("Poly1305 test #%d/%d+%d failed.\n", - i, half, inlen-half); - printf("got: "); - hexdump(out, sizeof(out)); - printf("\nexpected: "); - hexdump(expected, sizeof(expected)); - printf("\n"); - return 1; - } - } - } - - free(in); - } - - printf("PASS\n"); - -# ifdef OPENSSL_CPUID_OBJ - { - unsigned char buf[8192]; - unsigned long long stopwatch; - unsigned long long OPENSSL_rdtsc(); - - memset (buf,0x55,sizeof(buf)); - memset (key,0xAA,sizeof(key)); - - Poly1305_Init(&poly1305, key); - - for (i=0;i<100000;i++) - Poly1305_Update(&poly1305,buf,sizeof(buf)); - - stopwatch = OPENSSL_rdtsc(); - for (i=0;i<10000;i++) - Poly1305_Update(&poly1305,buf,sizeof(buf)); - stopwatch = OPENSSL_rdtsc() - stopwatch; - - printf("%g\n",stopwatch/(double)(i*sizeof(buf))); - - stopwatch = OPENSSL_rdtsc(); - for (i=0;i<10000;i++) { - Poly1305_Init(&poly1305, key); - Poly1305_Update(&poly1305,buf,16); - Poly1305_Final(&poly1305,buf); - } - stopwatch = OPENSSL_rdtsc() - stopwatch; - - printf("%g\n",stopwatch/(double)(i)); - } -# endif - return 0; -} -#endif diff --git a/crypto/poly1305/poly1305_ameth.c b/crypto/poly1305/poly1305_ameth.c new file mode 100644 index 00000000..93c6bc0c --- /dev/null +++ b/crypto/poly1305/poly1305_ameth.c @@ -0,0 +1,67 @@ +/* + * Copyright 2007-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 + */ + +#include +#include "internal/cryptlib.h" +#include +#include "internal/asn1_int.h" +#include "internal/poly1305.h" +#include "poly1305_local.h" + +/* + * POLY1305 "ASN1" method. This is just here to indicate the maximum + * POLY1305 output length and to free up a POLY1305 key. + */ + +static int poly1305_size(const EVP_PKEY *pkey) +{ + return POLY1305_DIGEST_SIZE; +} + +static void poly1305_key_free(EVP_PKEY *pkey) +{ + ASN1_OCTET_STRING *os = EVP_PKEY_get0(pkey); + if (os != NULL) { + if (os->data != NULL) + OPENSSL_cleanse(os->data, os->length); + ASN1_OCTET_STRING_free(os); + } +} + +static int poly1305_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) +{ + /* nothing, (including ASN1_PKEY_CTRL_DEFAULT_MD_NID), is supported */ + return -2; +} + +static int poly1305_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b) +{ + return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)); +} + +const EVP_PKEY_ASN1_METHOD poly1305_asn1_meth = { + EVP_PKEY_POLY1305, + EVP_PKEY_POLY1305, + 0, + + "POLY1305", + "OpenSSL POLY1305 method", + + 0, 0, poly1305_pkey_public_cmp, 0, + + 0, 0, 0, + + poly1305_size, + 0, 0, + 0, 0, 0, 0, 0, 0, 0, + + poly1305_key_free, + poly1305_pkey_ctrl, + 0, 0 +}; diff --git a/crypto/poly1305/poly1305_base2_44.c b/crypto/poly1305/poly1305_base2_44.c new file mode 100644 index 00000000..b6313d01 --- /dev/null +++ b/crypto/poly1305/poly1305_base2_44.c @@ -0,0 +1,171 @@ +/* + * 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 + */ + +/* + * This module is meant to be used as template for base 2^44 assembly + * implementation[s]. On side note compiler-generated code is not + * slower than compiler-generated base 2^64 code on [high-end] x86_64, + * even though amount of multiplications is 50% higher. Go figure... + */ +#include + +typedef unsigned char u8; +typedef unsigned int u32; +typedef unsigned long u64; +typedef unsigned __int128 u128; + +typedef struct { + u64 h[3]; + u64 s[2]; + u64 r[3]; +} poly1305_internal; + +#define POLY1305_BLOCK_SIZE 16 + +/* pick 64-bit unsigned integer in little endian order */ +static u64 U8TOU64(const unsigned char *p) +{ + return (((u64)(p[0] & 0xff)) | + ((u64)(p[1] & 0xff) << 8) | + ((u64)(p[2] & 0xff) << 16) | + ((u64)(p[3] & 0xff) << 24) | + ((u64)(p[4] & 0xff) << 32) | + ((u64)(p[5] & 0xff) << 40) | + ((u64)(p[6] & 0xff) << 48) | + ((u64)(p[7] & 0xff) << 56)); +} + +/* store a 64-bit unsigned integer in little endian */ +static void U64TO8(unsigned char *p, u64 v) +{ + p[0] = (unsigned char)((v) & 0xff); + p[1] = (unsigned char)((v >> 8) & 0xff); + p[2] = (unsigned char)((v >> 16) & 0xff); + p[3] = (unsigned char)((v >> 24) & 0xff); + p[4] = (unsigned char)((v >> 32) & 0xff); + p[5] = (unsigned char)((v >> 40) & 0xff); + p[6] = (unsigned char)((v >> 48) & 0xff); + p[7] = (unsigned char)((v >> 56) & 0xff); +} + +int poly1305_init(void *ctx, const unsigned char key[16]) +{ + poly1305_internal *st = (poly1305_internal *)ctx; + u64 r0, r1; + + /* h = 0 */ + st->h[0] = 0; + st->h[1] = 0; + st->h[2] = 0; + + r0 = U8TOU64(&key[0]) & 0x0ffffffc0fffffff; + r1 = U8TOU64(&key[8]) & 0x0ffffffc0ffffffc; + + /* break r1:r0 to three 44-bit digits, masks are 1<<44-1 */ + st->r[0] = r0 & 0x0fffffffffff; + st->r[1] = ((r0 >> 44) | (r1 << 20)) & 0x0fffffffffff; + st->r[2] = (r1 >> 24); + + st->s[0] = (st->r[1] + (st->r[1] << 2)) << 2; + st->s[1] = (st->r[2] + (st->r[2] << 2)) << 2; + + return 0; +} + +void poly1305_blocks(void *ctx, const unsigned char *inp, size_t len, + u32 padbit) +{ + poly1305_internal *st = (poly1305_internal *)ctx; + u64 r0, r1, r2; + u64 s1, s2; + u64 h0, h1, h2, c; + u128 d0, d1, d2; + u64 pad = (u64)padbit << 40; + + r0 = st->r[0]; + r1 = st->r[1]; + r2 = st->r[2]; + + s1 = st->s[0]; + s2 = st->s[1]; + + h0 = st->h[0]; + h1 = st->h[1]; + h2 = st->h[2]; + + while (len >= POLY1305_BLOCK_SIZE) { + u64 m0, m1; + + m0 = U8TOU64(inp + 0); + m1 = U8TOU64(inp + 8); + + /* h += m[i], m[i] is broken to 44-bit digits */ + h0 += m0 & 0x0fffffffffff; + h1 += ((m0 >> 44) | (m1 << 20)) & 0x0fffffffffff; + h2 += (m1 >> 24) + pad; + + /* h *= r "%" p, where "%" stands for "partial remainder" */ + d0 = ((u128)h0 * r0) + ((u128)h1 * s2) + ((u128)h2 * s1); + d1 = ((u128)h0 * r1) + ((u128)h1 * r0) + ((u128)h2 * s2); + d2 = ((u128)h0 * r2) + ((u128)h1 * r1) + ((u128)h2 * r0); + + /* "lazy" reduction step */ + h0 = (u64)d0 & 0x0fffffffffff; + h1 = (u64)(d1 += (u64)(d0 >> 44)) & 0x0fffffffffff; + h2 = (u64)(d2 += (u64)(d1 >> 44)) & 0x03ffffffffff; /* last 42 bits */ + + c = (d2 >> 42); + h0 += c + (c << 2); + + inp += POLY1305_BLOCK_SIZE; + len -= POLY1305_BLOCK_SIZE; + } + + st->h[0] = h0; + st->h[1] = h1; + st->h[2] = h2; +} + +void poly1305_emit(void *ctx, unsigned char mac[16], const u32 nonce[4]) +{ + poly1305_internal *st = (poly1305_internal *) ctx; + u64 h0, h1, h2; + u64 g0, g1, g2; + u128 t; + u64 mask; + + h0 = st->h[0]; + h1 = st->h[1]; + h2 = st->h[2]; + + /* after "lazy" reduction, convert 44+bit digits to 64-bit ones */ + h0 = (u64)(t = (u128)h0 + (h1 << 44)); h1 >>= 20; + h1 = (u64)(t = (u128)h1 + (h2 << 24) + (t >> 64)); h2 >>= 40; + h2 += (u64)(t >> 64); + + /* compare to modulus by computing h + -p */ + g0 = (u64)(t = (u128)h0 + 5); + g1 = (u64)(t = (u128)h1 + (t >> 64)); + g2 = h2 + (u64)(t >> 64); + + /* if there was carry into 131st bit, h1:h0 = g1:g0 */ + mask = 0 - (g2 >> 2); + g0 &= mask; + g1 &= mask; + mask = ~mask; + h0 = (h0 & mask) | g0; + h1 = (h1 & mask) | g1; + + /* mac = (h + nonce) % (2^128) */ + h0 = (u64)(t = (u128)h0 + nonce[0] + ((u64)nonce[1]<<32)); + h1 = (u64)(t = (u128)h1 + nonce[2] + ((u64)nonce[3]<<32) + (t >> 64)); + + U64TO8(mac + 0, h0); + U64TO8(mac + 8, h1); +} diff --git a/crypto/poly1305/poly1305_ieee754.c b/crypto/poly1305/poly1305_ieee754.c index 08a5b58c..e9aaae3b 100644 --- a/crypto/poly1305/poly1305_ieee754.c +++ b/crypto/poly1305/poly1305_ieee754.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-20018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -101,6 +101,8 @@ static const u64 one = 1; static const u32 fpc = 1; #elif defined(__sparc__) static const u64 fsr = 1ULL<<30; +#elif defined(__mips__) +static const u32 fcsr = 1; #else #error "unrecognized platform" #endif @@ -147,6 +149,11 @@ int poly1305_init(void *ctx, const unsigned char key[16]) asm volatile ("stx %%fsr,%0":"=m"(fsr_orig)); asm volatile ("ldx %0,%%fsr"::"m"(fsr)); +#elif defined(__mips__) + u32 fcsr_orig; + + asm volatile ("cfc1 %0,$31":"=r"(fcsr_orig)); + asm volatile ("ctc1 %0,$31"::"r"(fcsr)); #endif /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ @@ -206,6 +213,8 @@ int poly1305_init(void *ctx, const unsigned char key[16]) asm volatile ("lfpc %0"::"m"(fpc_orig)); #elif defined(__sparc__) asm volatile ("ldx %0,%%fsr"::"m"(fsr_orig)); +#elif defined(__mips__) + asm volatile ("ctc1 %0,$31"::"r"(fcsr_orig)); #endif } @@ -262,6 +271,11 @@ void poly1305_blocks(void *ctx, const unsigned char *inp, size_t len, asm volatile ("stx %%fsr,%0":"=m"(fsr_orig)); asm volatile ("ldx %0,%%fsr"::"m"(fsr)); +#elif defined(__mips__) + u32 fcsr_orig; + + asm volatile ("cfc1 %0,$31":"=r"(fcsr_orig)); + asm volatile ("ctc1 %0,$31"::"r"(fcsr)); #endif /* @@ -408,6 +422,8 @@ void poly1305_blocks(void *ctx, const unsigned char *inp, size_t len, asm volatile ("lfpc %0"::"m"(fpc_orig)); #elif defined(__sparc__) asm volatile ("ldx %0,%%fsr"::"m"(fsr_orig)); +#elif defined(__mips__) + asm volatile ("ctc1 %0,$31"::"r"(fcsr_orig)); #endif } diff --git a/crypto/poly1305/poly1305_local.h b/crypto/poly1305/poly1305_local.h new file mode 100644 index 00000000..6d4d9dc5 --- /dev/null +++ b/crypto/poly1305/poly1305_local.h @@ -0,0 +1,27 @@ +/* + * 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 + */ + +typedef void (*poly1305_blocks_f) (void *ctx, const unsigned char *inp, + size_t len, unsigned int padbit); +typedef void (*poly1305_emit_f) (void *ctx, unsigned char mac[16], + const unsigned int nonce[4]); + +struct poly1305_context { + double opaque[24]; /* large enough to hold internal state, declared + * 'double' to ensure at least 64-bit invariant + * alignment across all platforms and + * configurations */ + unsigned int nonce[4]; + unsigned char data[POLY1305_BLOCK_SIZE]; + size_t num; + struct { + poly1305_blocks_f blocks; + poly1305_emit_f emit; + } func; +}; diff --git a/crypto/poly1305/poly1305_pmeth.c b/crypto/poly1305/poly1305_pmeth.c new file mode 100644 index 00000000..7bc6add6 --- /dev/null +++ b/crypto/poly1305/poly1305_pmeth.c @@ -0,0 +1,192 @@ +/* + * Copyright 2007-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 + */ + +#include +#include "internal/cryptlib.h" +#include +#include +#include +#include "internal/poly1305.h" +#include "poly1305_local.h" +#include "internal/evp_int.h" + +/* POLY1305 pkey context structure */ + +typedef struct { + ASN1_OCTET_STRING ktmp; /* Temp storage for key */ + POLY1305 ctx; +} POLY1305_PKEY_CTX; + +static int pkey_poly1305_init(EVP_PKEY_CTX *ctx) +{ + POLY1305_PKEY_CTX *pctx; + + pctx = OPENSSL_zalloc(sizeof(*pctx)); + if (pctx == NULL) + return 0; + pctx->ktmp.type = V_ASN1_OCTET_STRING; + + EVP_PKEY_CTX_set_data(ctx, pctx); + EVP_PKEY_CTX_set0_keygen_info(ctx, NULL, 0); + return 1; +} + +static void pkey_poly1305_cleanup(EVP_PKEY_CTX *ctx) +{ + POLY1305_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + + if (pctx != NULL) { + OPENSSL_clear_free(pctx->ktmp.data, pctx->ktmp.length); + OPENSSL_clear_free(pctx, sizeof(*pctx)); + EVP_PKEY_CTX_set_data(ctx, NULL); + } +} + +static int pkey_poly1305_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) +{ + POLY1305_PKEY_CTX *sctx, *dctx; + + /* allocate memory for dst->data and a new POLY1305_CTX in dst->data->ctx */ + if (!pkey_poly1305_init(dst)) + return 0; + sctx = EVP_PKEY_CTX_get_data(src); + dctx = EVP_PKEY_CTX_get_data(dst); + if (ASN1_STRING_get0_data(&sctx->ktmp) != NULL && + !ASN1_STRING_copy(&dctx->ktmp, &sctx->ktmp)) { + /* cleanup and free the POLY1305_PKEY_CTX in dst->data */ + pkey_poly1305_cleanup(dst); + return 0; + } + memcpy(&dctx->ctx, &sctx->ctx, sizeof(POLY1305)); + return 1; +} + +static int pkey_poly1305_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) +{ + ASN1_OCTET_STRING *key; + POLY1305_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + + if (ASN1_STRING_get0_data(&pctx->ktmp) == NULL) + return 0; + key = ASN1_OCTET_STRING_dup(&pctx->ktmp); + if (key == NULL) + return 0; + return EVP_PKEY_assign_POLY1305(pkey, key); +} + +static int int_update(EVP_MD_CTX *ctx, const void *data, size_t count) +{ + POLY1305_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(EVP_MD_CTX_pkey_ctx(ctx)); + + Poly1305_Update(&pctx->ctx, data, count); + return 1; +} + +static int poly1305_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) +{ + POLY1305_PKEY_CTX *pctx = ctx->data; + ASN1_OCTET_STRING *key = (ASN1_OCTET_STRING *)ctx->pkey->pkey.ptr; + + if (key->length != POLY1305_KEY_SIZE) + return 0; + EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_NO_INIT); + EVP_MD_CTX_set_update_fn(mctx, int_update); + Poly1305_Init(&pctx->ctx, key->data); + return 1; +} +static int poly1305_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx) +{ + POLY1305_PKEY_CTX *pctx = ctx->data; + + *siglen = POLY1305_DIGEST_SIZE; + if (sig != NULL) + Poly1305_Final(&pctx->ctx, sig); + return 1; +} + +static int pkey_poly1305_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) +{ + POLY1305_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + const unsigned char *key; + size_t len; + + switch (type) { + + case EVP_PKEY_CTRL_MD: + /* ignore */ + break; + + case EVP_PKEY_CTRL_SET_MAC_KEY: + case EVP_PKEY_CTRL_DIGESTINIT: + if (type == EVP_PKEY_CTRL_SET_MAC_KEY) { + /* user explicitly setting the key */ + key = p2; + len = p1; + } else { + /* user indirectly setting the key via EVP_DigestSignInit */ + key = EVP_PKEY_get0_poly1305(EVP_PKEY_CTX_get0_pkey(ctx), &len); + } + if (key == NULL || len != POLY1305_KEY_SIZE || + !ASN1_OCTET_STRING_set(&pctx->ktmp, key, len)) + return 0; + Poly1305_Init(&pctx->ctx, ASN1_STRING_get0_data(&pctx->ktmp)); + break; + + default: + return -2; + + } + return 1; +} + +static int pkey_poly1305_ctrl_str(EVP_PKEY_CTX *ctx, + const char *type, const char *value) +{ + if (value == NULL) + return 0; + if (strcmp(type, "key") == 0) + return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, value); + if (strcmp(type, "hexkey") == 0) + return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, value); + return -2; +} + +const EVP_PKEY_METHOD poly1305_pkey_meth = { + EVP_PKEY_POLY1305, + EVP_PKEY_FLAG_SIGCTX_CUSTOM, /* we don't deal with a separate MD */ + pkey_poly1305_init, + pkey_poly1305_copy, + pkey_poly1305_cleanup, + + 0, 0, + + 0, + pkey_poly1305_keygen, + + 0, 0, + + 0, 0, + + 0, 0, + + poly1305_signctx_init, + poly1305_signctx, + + 0, 0, + + 0, 0, + + 0, 0, + + 0, 0, + + pkey_poly1305_ctrl, + pkey_poly1305_ctrl_str +}; diff --git a/crypto/ppccap.c b/crypto/ppccap.c index 3baf9f7b..2f7cd8e6 100644 --- a/crypto/ppccap.c +++ b/crypto/ppccap.c @@ -39,38 +39,24 @@ static sigset_t all_masked; int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num) { - int bn_mul_mont_fpu64(BN_ULONG *rp, const BN_ULONG *ap, - const BN_ULONG *bp, const BN_ULONG *np, - const BN_ULONG *n0, int num); int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); + int bn_mul4x_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, + const BN_ULONG *np, const BN_ULONG *n0, int num); - if (sizeof(size_t) == 4) { -# if 1 || (defined(__APPLE__) && defined(__MACH__)) - if (num >= 8 && (num & 3) == 0 && (OPENSSL_ppccap_P & PPC_FPU64)) - return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); -# else - /* - * boundary of 32 was experimentally determined on Linux 2.6.22, - * might have to be adjusted on AIX... - */ - if (num >= 32 && (num & 3) == 0 && (OPENSSL_ppccap_P & PPC_FPU64)) { - sigset_t oset; - int ret; + if (num < 4) + return 0; - sigprocmask(SIG_SETMASK, &all_masked, &oset); - ret = bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); - sigprocmask(SIG_SETMASK, &oset, NULL); + if ((num & 3) == 0) + return bn_mul4x_mont_int(rp, ap, bp, np, n0, num); - return ret; - } -# endif - } else if ((OPENSSL_ppccap_P & PPC_FPU64)) - /* - * this is a "must" on POWER6, but run-time detection is not - * implemented yet... - */ - return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num); + /* + * There used to be [optional] call to bn_mul_mont_fpu64 here, + * but above subroutine is faster on contemporary processors. + * Formulation means that there might be old processors where + * FPU code path would be faster, POWER6 perhaps, but there was + * no opportunity to figure it out... + */ return bn_mul_mont_int(rp, ap, bp, np, n0, num); } @@ -135,6 +121,30 @@ int poly1305_init(void *ctx, const unsigned char key[16], void *func[2]) } #endif +#ifdef ECP_NISTZ256_ASM +void ecp_nistz256_mul_mont(unsigned long res[4], const unsigned long a[4], + const unsigned long b[4]); + +void ecp_nistz256_to_mont(unsigned long res[4], const unsigned long in[4]); +void ecp_nistz256_to_mont(unsigned long res[4], const unsigned long in[4]) +{ + static const unsigned long RR[] = { 0x0000000000000003U, + 0xfffffffbffffffffU, + 0xfffffffffffffffeU, + 0x00000004fffffffdU }; + + ecp_nistz256_mul_mont(res, in, RR); +} + +void ecp_nistz256_from_mont(unsigned long res[4], const unsigned long in[4]); +void ecp_nistz256_from_mont(unsigned long res[4], const unsigned long in[4]) +{ + static const unsigned long one[] = { 1, 0, 0, 0 }; + + ecp_nistz256_mul_mont(res, in, one); +} +#endif + static sigjmp_buf ill_jmp; static void ill_handler(int sig) { diff --git a/crypto/rand/build.info b/crypto/rand/build.info index 3ad50e25..df9bac67 100644 --- a/crypto/rand/build.info +++ b/crypto/rand/build.info @@ -1,4 +1,4 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ - md_rand.c randfile.c rand_lib.c rand_err.c rand_egd.c \ - rand_win.c rand_unix.c rand_vms.c + randfile.c rand_lib.c rand_err.c rand_egd.c \ + rand_win.c rand_unix.c rand_vms.c drbg_lib.c drbg_ctr.c diff --git a/crypto/rand/drbg_ctr.c b/crypto/rand/drbg_ctr.c new file mode 100644 index 00000000..99cd9976 --- /dev/null +++ b/crypto/rand/drbg_ctr.c @@ -0,0 +1,371 @@ +/* + * 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 + */ + +#include +#include +#include +#include +#include +#include "rand_lcl.h" +#include "internal/thread_once.h" + +/* + * Implementation of NIST SP 800-90A CTR DRBG. + */ + +static void inc_128(RAND_DRBG_CTR *ctr) +{ + int i; + unsigned char c; + unsigned char *p = &ctr->V[15]; + + for (i = 0; i < 16; i++, p--) { + c = *p; + c++; + *p = c; + if (c != 0) { + /* If we didn't wrap around, we're done. */ + break; + } + } +} + +static void ctr_XOR(RAND_DRBG_CTR *ctr, const unsigned char *in, size_t inlen) +{ + size_t i, n; + + if (in == NULL || inlen == 0) + return; + + /* + * Any zero padding will have no effect on the result as we + * are XORing. So just process however much input we have. + */ + n = inlen < ctr->keylen ? inlen : ctr->keylen; + for (i = 0; i < n; i++) + ctr->K[i] ^= in[i]; + if (inlen <= ctr->keylen) + return; + + n = inlen - ctr->keylen; + if (n > 16) { + /* Should never happen */ + n = 16; + } + for (i = 0; i < n; i++) + ctr->V[i] ^= in[i + ctr->keylen]; +} + +/* + * Process a complete block using BCC algorithm of SP 800-90A 10.3.3 + */ +static void ctr_BCC_block(RAND_DRBG_CTR *ctr, unsigned char *out, + const unsigned char *in) +{ + int i; + + for (i = 0; i < 16; i++) + out[i] ^= in[i]; + AES_encrypt(out, out, &ctr->df_ks); +} + + +/* + * Handle several BCC operations for as much data as we need for K and X + */ +static void ctr_BCC_blocks(RAND_DRBG_CTR *ctr, const unsigned char *in) +{ + ctr_BCC_block(ctr, ctr->KX, in); + ctr_BCC_block(ctr, ctr->KX + 16, in); + if (ctr->keylen != 16) + ctr_BCC_block(ctr, ctr->KX + 32, in); +} + +/* + * Initialise BCC blocks: these have the value 0,1,2 in leftmost positions: + * see 10.3.1 stage 7. + */ +static void ctr_BCC_init(RAND_DRBG_CTR *ctr) +{ + memset(ctr->KX, 0, 48); + memset(ctr->bltmp, 0, 16); + ctr_BCC_block(ctr, ctr->KX, ctr->bltmp); + ctr->bltmp[3] = 1; + ctr_BCC_block(ctr, ctr->KX + 16, ctr->bltmp); + if (ctr->keylen != 16) { + ctr->bltmp[3] = 2; + ctr_BCC_block(ctr, ctr->KX + 32, ctr->bltmp); + } +} + +/* + * Process several blocks into BCC algorithm, some possibly partial + */ +static void ctr_BCC_update(RAND_DRBG_CTR *ctr, + const unsigned char *in, size_t inlen) +{ + if (in == NULL || inlen == 0) + return; + + /* If we have partial block handle it first */ + if (ctr->bltmp_pos) { + size_t left = 16 - ctr->bltmp_pos; + + /* If we now have a complete block process it */ + if (inlen >= left) { + memcpy(ctr->bltmp + ctr->bltmp_pos, in, left); + ctr_BCC_blocks(ctr, ctr->bltmp); + ctr->bltmp_pos = 0; + inlen -= left; + in += left; + } + } + + /* Process zero or more complete blocks */ + for (; inlen >= 16; in += 16, inlen -= 16) { + ctr_BCC_blocks(ctr, in); + } + + /* Copy any remaining partial block to the temporary buffer */ + if (inlen > 0) { + memcpy(ctr->bltmp + ctr->bltmp_pos, in, inlen); + ctr->bltmp_pos += inlen; + } +} + +static void ctr_BCC_final(RAND_DRBG_CTR *ctr) +{ + if (ctr->bltmp_pos) { + memset(ctr->bltmp + ctr->bltmp_pos, 0, 16 - ctr->bltmp_pos); + ctr_BCC_blocks(ctr, ctr->bltmp); + } +} + +static void ctr_df(RAND_DRBG_CTR *ctr, + const unsigned char *in1, size_t in1len, + const unsigned char *in2, size_t in2len, + const unsigned char *in3, size_t in3len) +{ + static unsigned char c80 = 0x80; + size_t inlen; + unsigned char *p = ctr->bltmp; + + ctr_BCC_init(ctr); + if (in1 == NULL) + in1len = 0; + if (in2 == NULL) + in2len = 0; + if (in3 == NULL) + in3len = 0; + inlen = in1len + in2len + in3len; + /* Initialise L||N in temporary block */ + *p++ = (inlen >> 24) & 0xff; + *p++ = (inlen >> 16) & 0xff; + *p++ = (inlen >> 8) & 0xff; + *p++ = inlen & 0xff; + + /* NB keylen is at most 32 bytes */ + *p++ = 0; + *p++ = 0; + *p++ = 0; + *p = (unsigned char)((ctr->keylen + 16) & 0xff); + ctr->bltmp_pos = 8; + ctr_BCC_update(ctr, in1, in1len); + ctr_BCC_update(ctr, in2, in2len); + ctr_BCC_update(ctr, in3, in3len); + ctr_BCC_update(ctr, &c80, 1); + ctr_BCC_final(ctr); + /* Set up key K */ + AES_set_encrypt_key(ctr->KX, ctr->keylen * 8, &ctr->df_kxks); + /* X follows key K */ + AES_encrypt(ctr->KX + ctr->keylen, ctr->KX, &ctr->df_kxks); + AES_encrypt(ctr->KX, ctr->KX + 16, &ctr->df_kxks); + if (ctr->keylen != 16) + AES_encrypt(ctr->KX + 16, ctr->KX + 32, &ctr->df_kxks); +} + +/* + * NB the no-df Update in SP800-90A specifies a constant input length + * of seedlen, however other uses of this algorithm pad the input with + * zeroes if necessary and have up to two parameters XORed together, + * so we handle both cases in this function instead. + */ +static void ctr_update(RAND_DRBG *drbg, + const unsigned char *in1, size_t in1len, + const unsigned char *in2, size_t in2len, + const unsigned char *nonce, size_t noncelen) +{ + RAND_DRBG_CTR *ctr = &drbg->data.ctr; + + /* ks is already setup for correct key */ + inc_128(ctr); + AES_encrypt(ctr->V, ctr->K, &ctr->ks); + + /* If keylen longer than 128 bits need extra encrypt */ + if (ctr->keylen != 16) { + inc_128(ctr); + AES_encrypt(ctr->V, ctr->K + 16, &ctr->ks); + } + inc_128(ctr); + AES_encrypt(ctr->V, ctr->V, &ctr->ks); + + /* If 192 bit key part of V is on end of K */ + if (ctr->keylen == 24) { + memcpy(ctr->V + 8, ctr->V, 8); + memcpy(ctr->V, ctr->K + 24, 8); + } + + if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) { + /* If no input reuse existing derived value */ + if (in1 != NULL || nonce != NULL || in2 != NULL) + ctr_df(ctr, in1, in1len, nonce, noncelen, in2, in2len); + /* If this a reuse input in1len != 0 */ + if (in1len) + ctr_XOR(ctr, ctr->KX, drbg->seedlen); + } else { + ctr_XOR(ctr, in1, in1len); + ctr_XOR(ctr, in2, in2len); + } + + AES_set_encrypt_key(ctr->K, drbg->strength, &ctr->ks); +} + +static int drbg_ctr_instantiate(RAND_DRBG *drbg, + const unsigned char *entropy, size_t entropylen, + const unsigned char *nonce, size_t noncelen, + const unsigned char *pers, size_t perslen) +{ + RAND_DRBG_CTR *ctr = &drbg->data.ctr; + + if (entropy == NULL) + return 0; + + memset(ctr->K, 0, sizeof(ctr->K)); + memset(ctr->V, 0, sizeof(ctr->V)); + AES_set_encrypt_key(ctr->K, drbg->strength, &ctr->ks); + ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen); + return 1; +} + +static int drbg_ctr_reseed(RAND_DRBG *drbg, + const unsigned char *entropy, size_t entropylen, + const unsigned char *adin, size_t adinlen) +{ + if (entropy == NULL) + return 0; + ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0); + return 1; +} + +static int drbg_ctr_generate(RAND_DRBG *drbg, + unsigned char *out, size_t outlen, + const unsigned char *adin, size_t adinlen) +{ + RAND_DRBG_CTR *ctr = &drbg->data.ctr; + + if (adin != NULL && adinlen != 0) { + ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0); + /* This means we reuse derived value */ + if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) { + adin = NULL; + adinlen = 1; + } + } else { + adinlen = 0; + } + + for ( ; ; ) { + inc_128(ctr); + if (outlen < 16) { + /* Use K as temp space as it will be updated */ + AES_encrypt(ctr->V, ctr->K, &ctr->ks); + memcpy(out, ctr->K, outlen); + break; + } + AES_encrypt(ctr->V, out, &ctr->ks); + out += 16; + outlen -= 16; + if (outlen == 0) + break; + } + + ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0); + return 1; +} + +static int drbg_ctr_uninstantiate(RAND_DRBG *drbg) +{ + OPENSSL_cleanse(&drbg->data.ctr, sizeof(drbg->data.ctr)); + return 1; +} + +static RAND_DRBG_METHOD drbg_ctr_meth = { + drbg_ctr_instantiate, + drbg_ctr_reseed, + drbg_ctr_generate, + drbg_ctr_uninstantiate +}; + +int drbg_ctr_init(RAND_DRBG *drbg) +{ + RAND_DRBG_CTR *ctr = &drbg->data.ctr; + size_t keylen; + + switch (drbg->nid) { + default: + /* This can't happen, but silence the compiler warning. */ + return 0; + case NID_aes_128_ctr: + keylen = 16; + break; + case NID_aes_192_ctr: + keylen = 24; + break; + case NID_aes_256_ctr: + keylen = 32; + break; + } + + drbg->meth = &drbg_ctr_meth; + + ctr->keylen = keylen; + drbg->strength = keylen * 8; + drbg->seedlen = keylen + 16; + + if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) { + /* df initialisation */ + static unsigned char df_key[32] = { + 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07, + 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, + 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, + 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f + }; + /* Set key schedule for df_key */ + AES_set_encrypt_key(df_key, drbg->strength, &ctr->df_ks); + + drbg->min_entropylen = ctr->keylen; + drbg->max_entropylen = DRBG_MINMAX_FACTOR * drbg->min_entropylen; + drbg->min_noncelen = drbg->min_entropylen / 2; + drbg->max_noncelen = DRBG_MINMAX_FACTOR * drbg->min_noncelen; + drbg->max_perslen = DRBG_MAX_LENGTH; + drbg->max_adinlen = DRBG_MAX_LENGTH; + } else { + drbg->min_entropylen = drbg->seedlen; + drbg->max_entropylen = drbg->seedlen; + /* Nonce not used */ + drbg->min_noncelen = 0; + drbg->max_noncelen = 0; + drbg->max_perslen = drbg->seedlen; + drbg->max_adinlen = drbg->seedlen; + } + + drbg->max_request = 1 << 16; + drbg->reseed_interval = MAX_RESEED_INTERVAL; + return 1; +} diff --git a/crypto/rand/drbg_lib.c b/crypto/rand/drbg_lib.c new file mode 100644 index 00000000..c43f571d --- /dev/null +++ b/crypto/rand/drbg_lib.c @@ -0,0 +1,980 @@ +/* + * 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 + */ + +#include +#include +#include +#include +#include "rand_lcl.h" +#include "internal/thread_once.h" +#include "internal/rand_int.h" + +/* + * Support framework for NIST SP 800-90A DRBG, AES-CTR mode. + * The RAND_DRBG is OpenSSL's pointer to an instance of the DRBG. + * + * The OpenSSL model is to have new and free functions, and that new + * does all initialization. That is not the NIST model, which has + * instantiation and un-instantiate, and re-use within a new/free + * lifecycle. (No doubt this comes from the desire to support hardware + * DRBG, where allocation of resources on something like an HSM is + * a much bigger deal than just re-setting an allocated resource.) + */ + +/* + * THE THREE SHARED DRBGs + * + * There are three shared DRBGs (master, public and private), which are + * accessed concurrently by all threads. + * + * THE MASTER DRBG + * + * Not used directly by the application, only for reseeding the two other + * DRBGs. It reseeds itself by pulling either randomness from os entropy + * sources or by consuming randomnes which was added by RAND_add() + */ +static RAND_DRBG *drbg_master; +/* + * THE PUBLIC DRBG + * + * Used by default for generating random bytes using RAND_bytes(). + */ +static RAND_DRBG *drbg_public; +/* + * THE PRIVATE DRBG + * + * Used by default for generating private keys using RAND_priv_bytes() + */ +static RAND_DRBG *drbg_private; +/*+ + * DRBG HIERARCHY + * + * In addition there are DRBGs, which are not shared, but used only by a + * single thread at every time, for example the DRBGs which are owned by + * an SSL context. All DRBGs are organized in a hierarchical fashion + * with the DRBG as root. + * + * This gives the following overall picture: + * + * + * | + * RAND_add() ==> \ + * / \ | shared DRBGs (with locking) + * / + * | + * owned by an SSL context + * + * AUTOMATIC RESEEDING + * + * Before satisfying a generate request, a DRBG reseeds itself automatically, + * if one of the following two conditions holds: + * + * - 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 behaviour + * can be disabled by setting the |reseed_time_interval| to 0. + * + * MANUAL RESEEDING + * + * For the three shared DRBGs (and only for these) there is another way to + * reseed them manually by calling RAND_seed() (or RAND_add() with a positive + * |randomness| argument). This will immediately reseed the DRBG. + * The and DRBG will detect this on their next generate + * call and reseed, pulling randomness from . + * + * LOCKING + * + * The three shared DRBGs are intended to be used concurrently, so they + * support locking. The RAND methods take the locks automatically, so using + * the RAND api (in particular RAND_bytes() and RAND_priv_bytes()) is + * thread-safe. Note however that accessing the shared DRBGs directly via + * the RAND_DRBG interface is *not* thread-safe. + * + * All other DRBG instances don't support locking, because they are + * intendended 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 same shared + * DRBG (preferrably the public DRBG) as parent of DRBG instances on + * different threads is safe. + */ + + +/* NIST SP 800-90A DRBG recommends the use of a personalization string. */ +static const char ossl_pers_string[] = "OpenSSL NIST SP 800-90A DRBG"; + +static CRYPTO_ONCE rand_drbg_init = CRYPTO_ONCE_STATIC_INIT; + +static RAND_DRBG *drbg_setup(RAND_DRBG *parent); + +static RAND_DRBG *rand_drbg_new(int secure, + int type, + unsigned int flags, + RAND_DRBG *parent); + +/* + * Set/initialize |drbg| to be of type |nid|, with optional |flags|. + * + * Returns 1 on success, 0 on failure. + */ +int RAND_DRBG_set(RAND_DRBG *drbg, int nid, unsigned int flags) +{ + int ret = 1; + + drbg->state = DRBG_UNINITIALISED; + drbg->flags = flags; + drbg->nid = nid; + + switch (nid) { + default: + RANDerr(RAND_F_RAND_DRBG_SET, RAND_R_UNSUPPORTED_DRBG_TYPE); + return 0; + case 0: + /* Uninitialized; that's okay. */ + return 1; + case NID_aes_128_ctr: + case NID_aes_192_ctr: + case NID_aes_256_ctr: + ret = drbg_ctr_init(drbg); + break; + } + + if (ret == 0) + RANDerr(RAND_F_RAND_DRBG_SET, RAND_R_ERROR_INITIALISING_DRBG); + return ret; +} + +/* + * Allocate memory and initialize a new DRBG. The DRBG is allocated on + * the secure heap if |secure| is nonzero and the secure heap is enabled. + * The |parent|, if not NULL, will be used as random source for reseeding. + * + * Returns a pointer to the new DRBG instance on success, NULL on failure. + */ +static RAND_DRBG *rand_drbg_new(int secure, + int type, + unsigned int flags, + RAND_DRBG *parent) +{ + RAND_DRBG *drbg = secure ? + OPENSSL_secure_zalloc(sizeof(*drbg)) : OPENSSL_zalloc(sizeof(*drbg)); + + if (drbg == NULL) { + RANDerr(RAND_F_RAND_DRBG_NEW, ERR_R_MALLOC_FAILURE); + goto err; + } + + drbg->secure = secure && CRYPTO_secure_allocated(drbg); + drbg->fork_count = rand_fork_count; + drbg->parent = parent; + if (RAND_DRBG_set(drbg, type, flags) == 0) + goto err; + + if (!RAND_DRBG_set_callbacks(drbg, rand_drbg_get_entropy, + rand_drbg_cleanup_entropy, + NULL, NULL)) + goto err; + + return drbg; + +err: + if (drbg->secure) + OPENSSL_secure_free(drbg); + else + OPENSSL_free(drbg); + + return NULL; +} + +RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent) +{ + return rand_drbg_new(0, type, flags, parent); +} + +RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent) +{ + return rand_drbg_new(1, type, flags, parent); +} + +/* + * Uninstantiate |drbg| and free all memory. + */ +void RAND_DRBG_free(RAND_DRBG *drbg) +{ + if (drbg == NULL) + return; + + if (drbg->meth != NULL) + drbg->meth->uninstantiate(drbg); + CRYPTO_THREAD_lock_free(drbg->lock); + CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DRBG, drbg, &drbg->ex_data); + + if (drbg->secure) + OPENSSL_secure_clear_free(drbg, sizeof(*drbg)); + else + OPENSSL_clear_free(drbg, sizeof(*drbg)); +} + +/* + * Instantiate |drbg|, after it has been initialized. Use |pers| and + * |perslen| as prediction-resistance input. + * + * Requires that drbg->lock is already locked for write, if non-null. + * + * Returns 1 on success, 0 on failure. + */ +int RAND_DRBG_instantiate(RAND_DRBG *drbg, + const unsigned char *pers, size_t perslen) +{ + unsigned char *nonce = NULL, *entropy = NULL; + size_t noncelen = 0, entropylen = 0; + + if (perslen > drbg->max_perslen) { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, + RAND_R_PERSONALISATION_STRING_TOO_LONG); + goto end; + } + + if (drbg->meth == NULL) + { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, + RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED); + goto end; + } + + if (drbg->state != DRBG_UNINITIALISED) { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, + drbg->state == DRBG_ERROR ? RAND_R_IN_ERROR_STATE + : RAND_R_ALREADY_INSTANTIATED); + goto end; + } + + drbg->state = DRBG_ERROR; + if (drbg->get_entropy != NULL) + entropylen = drbg->get_entropy(drbg, &entropy, drbg->strength, + drbg->min_entropylen, drbg->max_entropylen); + if (entropylen < drbg->min_entropylen + || entropylen > drbg->max_entropylen) { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_RETRIEVING_ENTROPY); + goto end; + } + + if (drbg->max_noncelen > 0 && drbg->get_nonce != NULL) { + noncelen = drbg->get_nonce(drbg, &nonce, drbg->strength / 2, + drbg->min_noncelen, drbg->max_noncelen); + if (noncelen < drbg->min_noncelen || noncelen > drbg->max_noncelen) { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, + RAND_R_ERROR_RETRIEVING_NONCE); + goto end; + } + } + + if (!drbg->meth->instantiate(drbg, entropy, entropylen, + nonce, noncelen, pers, perslen)) { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, RAND_R_ERROR_INSTANTIATING_DRBG); + goto end; + } + + drbg->state = DRBG_READY; + drbg->generate_counter = 0; + drbg->reseed_time = time(NULL); + if (drbg->reseed_counter > 0) { + if (drbg->parent == NULL) + drbg->reseed_counter++; + else + drbg->reseed_counter = drbg->parent->reseed_counter; + } + +end: + if (entropy != NULL && drbg->cleanup_entropy != NULL) + drbg->cleanup_entropy(drbg, entropy, entropylen); + if (nonce != NULL && drbg->cleanup_nonce!= NULL ) + drbg->cleanup_nonce(drbg, nonce, noncelen); + if (drbg->pool != NULL) { + if (drbg->state == DRBG_READY) { + RANDerr(RAND_F_RAND_DRBG_INSTANTIATE, + RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED); + drbg->state = DRBG_ERROR; + } + RAND_POOL_free(drbg->pool); + drbg->pool = NULL; + } + if (drbg->state == DRBG_READY) + return 1; + return 0; +} + +/* + * Uninstantiate |drbg|. Must be instantiated before it can be used. + * + * Requires that drbg->lock is already locked for write, if non-null. + * + * Returns 1 on success, 0 on failure. + */ +int RAND_DRBG_uninstantiate(RAND_DRBG *drbg) +{ + if (drbg->meth == NULL) + { + RANDerr(RAND_F_RAND_DRBG_UNINSTANTIATE, + RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED); + return 0; + } + + /* Clear the entire drbg->ctr struct, then reset some important + * members of the drbg->ctr struct (e.g. keysize, df_ks) to their + * initial values. + */ + drbg->meth->uninstantiate(drbg); + return RAND_DRBG_set(drbg, drbg->nid, drbg->flags); +} + +/* + * Reseed |drbg|, mixing in the specified data + * + * Requires that drbg->lock is already locked for write, if non-null. + * + * Returns 1 on success, 0 on failure. + */ +int RAND_DRBG_reseed(RAND_DRBG *drbg, + const unsigned char *adin, size_t adinlen) +{ + unsigned char *entropy = NULL; + size_t entropylen = 0; + + if (drbg->state == DRBG_ERROR) { + RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_IN_ERROR_STATE); + return 0; + } + if (drbg->state == DRBG_UNINITIALISED) { + RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_NOT_INSTANTIATED); + return 0; + } + + if (adin == NULL) + adinlen = 0; + else if (adinlen > drbg->max_adinlen) { + RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_ADDITIONAL_INPUT_TOO_LONG); + return 0; + } + + drbg->state = DRBG_ERROR; + if (drbg->get_entropy != NULL) + entropylen = drbg->get_entropy(drbg, &entropy, drbg->strength, + drbg->min_entropylen, drbg->max_entropylen); + if (entropylen < drbg->min_entropylen + || entropylen > drbg->max_entropylen) { + RANDerr(RAND_F_RAND_DRBG_RESEED, RAND_R_ERROR_RETRIEVING_ENTROPY); + goto end; + } + + if (!drbg->meth->reseed(drbg, entropy, entropylen, adin, adinlen)) + goto end; + + drbg->state = DRBG_READY; + drbg->generate_counter = 0; + drbg->reseed_time = time(NULL); + if (drbg->reseed_counter > 0) { + if (drbg->parent == NULL) + drbg->reseed_counter++; + else + drbg->reseed_counter = drbg->parent->reseed_counter; + } + +end: + if (entropy != NULL && drbg->cleanup_entropy != NULL) + drbg->cleanup_entropy(drbg, entropy, entropylen); + if (drbg->state == DRBG_READY) + return 1; + return 0; +} + +/* + * Restart |drbg|, using the specified entropy or additional input + * + * Tries its best to get the drbg instantiated by all means, + * regardless of its current state. + * + * Optionally, a |buffer| of |len| random bytes can be passed, + * which is assumed to contain at least |entropy| bits of entropy. + * + * If |entropy| > 0, the buffer content is used as entropy input. + * + * If |entropy| == 0, the buffer content is used as additional input + * + * Returns 1 on success, 0 on failure. + * + * This function is used internally only. + */ +int rand_drbg_restart(RAND_DRBG *drbg, + const unsigned char *buffer, size_t len, size_t entropy) +{ + int reseeded = 0; + const unsigned char *adin = NULL; + size_t adinlen = 0; + + if (drbg->pool != NULL) { + RANDerr(RAND_F_RAND_DRBG_RESTART, ERR_R_INTERNAL_ERROR); + RAND_POOL_free(drbg->pool); + drbg->pool = NULL; + } + + if (buffer != NULL) { + if (entropy > 0) { + if (drbg->max_entropylen < len) { + RANDerr(RAND_F_RAND_DRBG_RESTART, + RAND_R_ENTROPY_INPUT_TOO_LONG); + return 0; + } + + if (entropy > 8 * len) { + RANDerr(RAND_F_RAND_DRBG_RESTART, RAND_R_ENTROPY_OUT_OF_RANGE); + return 0; + } + + /* will be picked up by the rand_drbg_get_entropy() callback */ + drbg->pool = RAND_POOL_new(entropy, len, len); + if (drbg->pool == NULL) + return 0; + + RAND_POOL_add(drbg->pool, buffer, len, entropy); + } else { + if (drbg->max_adinlen < len) { + RANDerr(RAND_F_RAND_DRBG_RESTART, + RAND_R_ADDITIONAL_INPUT_TOO_LONG); + return 0; + } + adin = buffer; + adinlen = len; + } + } + + /* repair error state */ + if (drbg->state == DRBG_ERROR) + RAND_DRBG_uninstantiate(drbg); + + /* repair uninitialized state */ + if (drbg->state == DRBG_UNINITIALISED) { + /* reinstantiate drbg */ + RAND_DRBG_instantiate(drbg, + (const unsigned char *) ossl_pers_string, + sizeof(ossl_pers_string) - 1); + /* already reseeded. prevent second reseeding below */ + reseeded = (drbg->state == DRBG_READY); + } + + /* refresh current state if entropy or additional input has been provided */ + if (drbg->state == DRBG_READY) { + if (adin != NULL) { + /* + * mix in additional input without reseeding + * + * Similar to RAND_DRBG_reseed(), but the provided additional + * data |adin| is mixed into the current state without pulling + * entropy from the trusted entropy source using get_entropy(). + * This is not a reseeding in the strict sense of NIST SP 800-90A. + */ + drbg->meth->reseed(drbg, adin, adinlen, NULL, 0); + } else if (reseeded == 0) { + /* do a full reseeding if it has not been done yet above */ + RAND_DRBG_reseed(drbg, NULL, 0); + } + } + + /* check whether a given entropy pool was cleared properly during reseed */ + if (drbg->pool != NULL) { + drbg->state = DRBG_ERROR; + RANDerr(RAND_F_RAND_DRBG_RESTART, ERR_R_INTERNAL_ERROR); + RAND_POOL_free(drbg->pool); + drbg->pool = NULL; + return 0; + } + + return drbg->state == DRBG_READY; +} + +/* + * Generate |outlen| bytes into the buffer at |out|. Reseed if we need + * to or if |prediction_resistance| is set. Additional input can be + * sent in |adin| and |adinlen|. + * + * Requires that drbg->lock is already locked for write, if non-null. + * + * Returns 1 on success, 0 on failure. + * + */ +int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, + int prediction_resistance, + const unsigned char *adin, size_t adinlen) +{ + int reseed_required = 0; + + if (drbg->state != DRBG_READY) { + /* try to recover from previous errors */ + rand_drbg_restart(drbg, NULL, 0, 0); + + if (drbg->state == DRBG_ERROR) { + RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_IN_ERROR_STATE); + return 0; + } + if (drbg->state == DRBG_UNINITIALISED) { + RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_NOT_INSTANTIATED); + return 0; + } + } + + if (outlen > drbg->max_request) { + RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG); + return 0; + } + if (adinlen > drbg->max_adinlen) { + RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_ADDITIONAL_INPUT_TOO_LONG); + return 0; + } + + if (drbg->fork_count != rand_fork_count) { + drbg->fork_count = rand_fork_count; + reseed_required = 1; + } + + if (drbg->reseed_interval > 0) { + if (drbg->generate_counter >= drbg->reseed_interval) + reseed_required = 1; + } + if (drbg->reseed_time_interval > 0) { + time_t now = time(NULL); + if (now < drbg->reseed_time + || now - drbg->reseed_time >= drbg->reseed_time_interval) + reseed_required = 1; + } + if (drbg->reseed_counter > 0 && drbg->parent != NULL) { + if (drbg->reseed_counter != drbg->parent->reseed_counter) + reseed_required = 1; + } + + if (reseed_required || prediction_resistance) { + if (!RAND_DRBG_reseed(drbg, adin, adinlen)) { + RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_RESEED_ERROR); + return 0; + } + adin = NULL; + adinlen = 0; + } + + if (!drbg->meth->generate(drbg, out, outlen, adin, adinlen)) { + drbg->state = DRBG_ERROR; + RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_GENERATE_ERROR); + return 0; + } + + drbg->generate_counter++; + + return 1; +} + +/* + * Generates |outlen| random bytes and stores them in |out|. It will + * using the given |drbg| to generate the bytes. + * + * Requires that drbg->lock is already locked for write, if non-null. + * + * Returns 1 on success 0 on failure. + */ +int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen) +{ + unsigned char *additional = NULL; + size_t additional_len; + size_t chunk; + size_t ret; + + additional_len = rand_drbg_get_additional_data(&additional, drbg->max_adinlen); + + for ( ; outlen > 0; outlen -= chunk, out += chunk) { + chunk = outlen; + if (chunk > drbg->max_request) + chunk = drbg->max_request; + ret = RAND_DRBG_generate(drbg, out, chunk, 0, additional, additional_len); + if (!ret) + goto err; + } + ret = 1; + +err: + if (additional_len != 0) + OPENSSL_secure_clear_free(additional, additional_len); + + return ret; +} + +/* + * Set the RAND_DRBG callbacks for obtaining entropy and nonce. + * + * In the following, the signature and the semantics of the + * get_entropy() and cleanup_entropy() callbacks are explained. + * + * GET_ENTROPY + * + * size_t get_entropy(RAND_DRBG *ctx, + * unsigned char **pout, + * int entropy, + * size_t min_len, size_t max_len); + * + * This is a request to allocate and fill a buffer of size + * |min_len| <= size <= |max_len| (in bytes) which contains + * at least |entropy| bits of randomness. The buffer's address is + * to be returned in |*pout| and the number of collected + * randomness bytes (which may be less than the allocated size + * of the buffer) as return value. + * + * If the callback fails to acquire at least |entropy| bits of + * randomness, it shall return a buffer length of 0. + * + * CLEANUP_ENTROPY + * + * void cleanup_entropy(RAND_DRBG *ctx, + * unsigned char *out, size_t outlen); + * + * A request to clear and free the buffer allocated by get_entropy(). + * The values |out| and |outlen| are expected to be the random buffer's + * address and length, as returned by the get_entropy() callback. + * + * GET_NONCE, CLEANUP_NONCE + * + * Signature and semantics of the get_nonce() and cleanup_nonce() + * callbacks are analogous to get_entropy() and cleanup_entropy(). + * Currently, the nonce is used only for the known answer tests. + */ +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) +{ + if (drbg->state != DRBG_UNINITIALISED) + return 0; + drbg->get_entropy = get_entropy; + drbg->cleanup_entropy = cleanup_entropy; + drbg->get_nonce = get_nonce; + drbg->cleanup_nonce = cleanup_nonce; + return 1; +} + +/* + * Set the reseed interval. + * + * The drbg will reseed automatically whenever the number of generate + * requests exceeds the given reseed interval. If the reseed interval + * is 0, then this feature is disabled. + * + * Returns 1 on success, 0 on failure. + */ +int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval) +{ + if (interval > MAX_RESEED_INTERVAL) + return 0; + drbg->reseed_interval = interval; + return 1; +} + +/* + * Set the reseed time interval. + * + * The drbg will reseed automatically whenever the time elapsed since + * the last reseeding exceeds the given reseed time interval. For safety, + * a reseeding will also occur if the clock has been reset to a smaller + * value. + * + * Returns 1 on success, 0 on failure. + */ +int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval) +{ + if (interval > MAX_RESEED_TIME_INTERVAL) + return 0; + drbg->reseed_time_interval = interval; + return 1; +} + + +/* + * Locks the given drbg. Locking a drbg which does not have locking + * enabled is considered a successful no-op. + * + * Returns 1 on success, 0 on failure. + */ +int rand_drbg_lock(RAND_DRBG *drbg) +{ + if (drbg->lock != NULL) + return CRYPTO_THREAD_write_lock(drbg->lock); + + return 1; +} + +/* + * Unlocks the given drbg. Unlocking a drbg which does not have locking + * enabled is considered a successful no-op. + * + * Returns 1 on success, 0 on failure. + */ +int rand_drbg_unlock(RAND_DRBG *drbg) +{ + if (drbg->lock != NULL) + return CRYPTO_THREAD_unlock(drbg->lock); + + return 1; +} + +/* + * Enables locking for the given drbg + * + * Locking can only be enabled if the random generator + * is in the uninitialized state. + * + * Returns 1 on success, 0 on failure. + */ +int rand_drbg_enable_locking(RAND_DRBG *drbg) +{ + if (drbg->state != DRBG_UNINITIALISED) { + RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING, + RAND_R_DRBG_ALREADY_INITIALIZED); + return 0; + } + + if (drbg->lock == NULL) { + if (drbg->parent != NULL && drbg->parent->lock == NULL) { + RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING, + RAND_R_PARENT_LOCKING_NOT_ENABLED); + return 0; + } + + drbg->lock = CRYPTO_THREAD_lock_new(); + if (drbg->lock == NULL) { + RANDerr(RAND_F_RAND_DRBG_ENABLE_LOCKING, + RAND_R_FAILED_TO_CREATE_LOCK); + return 0; + } + } + + return 1; +} + +/* + * Get and set the EXDATA + */ +int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg) +{ + return CRYPTO_set_ex_data(&drbg->ex_data, idx, arg); +} + +void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx) +{ + return CRYPTO_get_ex_data(&drbg->ex_data, idx); +} + + +/* + * The following functions provide a RAND_METHOD that works on the + * global DRBG. They lock. + */ + +/* + * Allocates a new global DRBG on the secure heap (if enabled) and + * initializes it with default settings. + * + * Returns a pointer to the new DRBG instance on success, NULL on failure. + */ +static RAND_DRBG *drbg_setup(RAND_DRBG *parent) +{ + RAND_DRBG *drbg; + + drbg = RAND_DRBG_secure_new(RAND_DRBG_NID, 0, parent); + if (drbg == NULL) + return NULL; + + if (rand_drbg_enable_locking(drbg) == 0) + goto err; + + if (parent == NULL) { + drbg->reseed_interval = MASTER_RESEED_INTERVAL; + drbg->reseed_time_interval = MASTER_RESEED_TIME_INTERVAL; + } else { + drbg->reseed_interval = SLAVE_RESEED_INTERVAL; + drbg->reseed_time_interval = SLAVE_RESEED_TIME_INTERVAL; + } + + /* enable seed propagation */ + drbg->reseed_counter = 1; + + /* + * Ignore instantiation error so support just-in-time instantiation. + * + * The state of the drbg will be checked in RAND_DRBG_generate() and + * an automatic recovery is attempted. + */ + RAND_DRBG_instantiate(drbg, + (const unsigned char *) ossl_pers_string, + sizeof(ossl_pers_string) - 1); + return drbg; + +err: + RAND_DRBG_free(drbg); + return NULL; +} + +/* + * Initialize the global DRBGs on first use. + * Returns 1 on success, 0 on failure. + */ +DEFINE_RUN_ONCE_STATIC(do_rand_drbg_init) +{ + /* + * ensure that libcrypto is initialized, otherwise the + * DRBG locks are not cleaned up properly + */ + if (!OPENSSL_init_crypto(0, NULL)) + return 0; + + drbg_master = drbg_setup(NULL); + drbg_public = drbg_setup(drbg_master); + drbg_private = drbg_setup(drbg_master); + + if (drbg_master == NULL || drbg_public == NULL || drbg_private == NULL) + return 0; + + return 1; +} + +/* Clean up the global DRBGs before exit */ +void rand_drbg_cleanup_int(void) +{ + RAND_DRBG_free(drbg_private); + RAND_DRBG_free(drbg_public); + RAND_DRBG_free(drbg_master); + + drbg_private = drbg_public = drbg_master = NULL; +} + +/* Implements the default OpenSSL RAND_bytes() method */ +static int drbg_bytes(unsigned char *out, int count) +{ + int ret; + RAND_DRBG *drbg = RAND_DRBG_get0_public(); + + if (drbg == NULL) + return 0; + + rand_drbg_lock(drbg); + ret = RAND_DRBG_bytes(drbg, out, count); + rand_drbg_unlock(drbg); + + return ret; +} + +/* Implements the default OpenSSL RAND_add() method */ +static int drbg_add(const void *buf, int num, double randomness) +{ + int ret = 0; + RAND_DRBG *drbg = RAND_DRBG_get0_master(); + + if (drbg == NULL) + return 0; + + if (num < 0 || randomness < 0.0) + return 0; + + if (randomness > (double)drbg->max_entropylen) { + /* + * The purpose of this check is to bound |randomness| by a + * relatively small value in order to prevent an integer + * overflow when multiplying by 8 in the rand_drbg_restart() + * call below. + */ + return 0; + } + + rand_drbg_lock(drbg); + ret = rand_drbg_restart(drbg, buf, + (size_t)(unsigned int)num, + (size_t)(8*randomness)); + rand_drbg_unlock(drbg); + + return ret; +} + +/* Implements the default OpenSSL RAND_seed() method */ +static int drbg_seed(const void *buf, int num) +{ + return drbg_add(buf, num, num); +} + +/* Implements the default OpenSSL RAND_status() method */ +static int drbg_status(void) +{ + int ret; + RAND_DRBG *drbg = RAND_DRBG_get0_master(); + + if (drbg == NULL) + return 0; + + rand_drbg_lock(drbg); + ret = drbg->state == DRBG_READY ? 1 : 0; + rand_drbg_unlock(drbg); + return ret; +} + +/* + * Get the master DRBG. + * Returns pointer to the DRBG on success, NULL on failure. + * + */ +RAND_DRBG *RAND_DRBG_get0_master(void) +{ + if (!RUN_ONCE(&rand_drbg_init, do_rand_drbg_init)) + return NULL; + + return drbg_master; +} + +/* + * Get the public DRBG. + * Returns pointer to the DRBG on success, NULL on failure. + */ +RAND_DRBG *RAND_DRBG_get0_public(void) +{ + if (!RUN_ONCE(&rand_drbg_init, do_rand_drbg_init)) + return NULL; + + return drbg_public; +} + +/* + * Get the private DRBG. + * Returns pointer to the DRBG on success, NULL on failure. + */ +RAND_DRBG *RAND_DRBG_get0_private(void) +{ + if (!RUN_ONCE(&rand_drbg_init, do_rand_drbg_init)) + return NULL; + + return drbg_private; +} + +RAND_METHOD rand_meth = { + drbg_seed, + drbg_bytes, + NULL, + drbg_add, + drbg_bytes, + drbg_status +}; + +RAND_METHOD *RAND_OpenSSL(void) +{ + return &rand_meth; +} diff --git a/crypto/rand/md_rand.c b/crypto/rand/md_rand.c deleted file mode 100644 index 7d5fcb7f..00000000 --- a/crypto/rand/md_rand.c +++ /dev/null @@ -1,667 +0,0 @@ -/* - * 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 - */ - -#include -#include - -#include "e_os.h" - -#if !(defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_DSPBIOS)) -# include -#endif -#if defined(OPENSSL_SYS_VXWORKS) -# include -#endif - -#include -#include -#include -#include -#include "rand_lcl.h" - -#include - -#include - -#ifdef OPENSSL_FIPS -# include -#endif - -#ifdef BN_DEBUG -# define PREDICT -#endif - -/* #define PREDICT 1 */ - -#define STATE_SIZE 1023 -static size_t state_num = 0, state_index = 0; -static unsigned char state[STATE_SIZE + MD_DIGEST_LENGTH]; -static unsigned char md[MD_DIGEST_LENGTH]; -static long md_count[2] = { 0, 0 }; - -static double entropy = 0; -static int initialized = 0; - -static CRYPTO_RWLOCK *rand_lock = NULL; -static CRYPTO_RWLOCK *rand_tmp_lock = NULL; -static CRYPTO_ONCE rand_lock_init = CRYPTO_ONCE_STATIC_INIT; - -/* May be set only when a thread holds rand_lock (to prevent double locking) */ -static unsigned int crypto_lock_rand = 0; -/* access to locking_threadid is synchronized by rand_tmp_lock */ -/* valid iff crypto_lock_rand is set */ -static CRYPTO_THREAD_ID locking_threadid; - -#ifdef PREDICT -int rand_predictable = 0; -#endif - -static int rand_hw_seed(EVP_MD_CTX *ctx); - -static void rand_cleanup(void); -static int rand_seed(const void *buf, int num); -static int rand_add(const void *buf, int num, double add_entropy); -static int rand_bytes(unsigned char *buf, int num, int pseudo); -static int rand_nopseudo_bytes(unsigned char *buf, int num); -#if OPENSSL_API_COMPAT < 0x10100000L -static int rand_pseudo_bytes(unsigned char *buf, int num); -#endif -static int rand_status(void); - -static RAND_METHOD rand_meth = { - rand_seed, - rand_nopseudo_bytes, - rand_cleanup, - rand_add, -#if OPENSSL_API_COMPAT < 0x10100000L - rand_pseudo_bytes, -#else - NULL, -#endif - rand_status -}; - -DEFINE_RUN_ONCE_STATIC(do_rand_lock_init) -{ - OPENSSL_init_crypto(0, NULL); - rand_lock = CRYPTO_THREAD_lock_new(); - rand_tmp_lock = CRYPTO_THREAD_lock_new(); - return rand_lock != NULL && rand_tmp_lock != NULL; -} - -RAND_METHOD *RAND_OpenSSL(void) -{ - return (&rand_meth); -} - -static void rand_cleanup(void) -{ - OPENSSL_cleanse(state, sizeof(state)); - state_num = 0; - state_index = 0; - OPENSSL_cleanse(md, MD_DIGEST_LENGTH); - md_count[0] = 0; - md_count[1] = 0; - entropy = 0; - initialized = 0; - CRYPTO_THREAD_lock_free(rand_lock); - CRYPTO_THREAD_lock_free(rand_tmp_lock); -} - -static int rand_add(const void *buf, int num, double add) -{ - int i, j, k, st_idx; - long md_c[2]; - unsigned char local_md[MD_DIGEST_LENGTH]; - EVP_MD_CTX *m; - int do_not_lock; - int rv = 0; - - if (!num) - return 1; - - /* - * (Based on the rand(3) manpage) - * - * The input is chopped up into units of 20 bytes (or less for - * the last block). Each of these blocks is run through the hash - * function as follows: The data passed to the hash function - * is the current 'md', the same number of bytes from the 'state' - * (the location determined by in incremented looping index) as - * the current 'block', the new key data 'block', and 'count' - * (which is incremented after each use). - * The result of this is kept in 'md' and also xored into the - * 'state' at the same locations that were used as input into the - * hash function. - */ - - m = EVP_MD_CTX_new(); - if (m == NULL) - goto err; - - if (!RUN_ONCE(&rand_lock_init, do_rand_lock_init)) - goto err; - - /* check if we already have the lock */ - if (crypto_lock_rand) { - CRYPTO_THREAD_ID cur = CRYPTO_THREAD_get_current_id(); - CRYPTO_THREAD_read_lock(rand_tmp_lock); - do_not_lock = CRYPTO_THREAD_compare_id(locking_threadid, cur); - CRYPTO_THREAD_unlock(rand_tmp_lock); - } else - do_not_lock = 0; - - if (!do_not_lock) - CRYPTO_THREAD_write_lock(rand_lock); - st_idx = state_index; - - /* - * use our own copies of the counters so that even if a concurrent thread - * seeds with exactly the same data and uses the same subarray there's - * _some_ difference - */ - md_c[0] = md_count[0]; - md_c[1] = md_count[1]; - - memcpy(local_md, md, sizeof(md)); - - /* state_index <= state_num <= STATE_SIZE */ - state_index += num; - if (state_index >= STATE_SIZE) { - state_index %= STATE_SIZE; - state_num = STATE_SIZE; - } else if (state_num < STATE_SIZE) { - if (state_index > state_num) - state_num = state_index; - } - /* state_index <= state_num <= STATE_SIZE */ - - /* - * state[st_idx], ..., state[(st_idx + num - 1) % STATE_SIZE] are what we - * will use now, but other threads may use them as well - */ - - md_count[1] += (num / MD_DIGEST_LENGTH) + (num % MD_DIGEST_LENGTH > 0); - - if (!do_not_lock) - CRYPTO_THREAD_unlock(rand_lock); - - for (i = 0; i < num; i += MD_DIGEST_LENGTH) { - j = (num - i); - j = (j > MD_DIGEST_LENGTH) ? MD_DIGEST_LENGTH : j; - - if (!MD_Init(m)) - goto err; - if (!MD_Update(m, local_md, MD_DIGEST_LENGTH)) - goto err; - k = (st_idx + j) - STATE_SIZE; - if (k > 0) { - if (!MD_Update(m, &(state[st_idx]), j - k)) - goto err; - if (!MD_Update(m, &(state[0]), k)) - goto err; - } else if (!MD_Update(m, &(state[st_idx]), j)) - goto err; - - /* DO NOT REMOVE THE FOLLOWING CALL TO MD_Update()! */ - if (!MD_Update(m, buf, j)) - goto err; - /* - * We know that line may cause programs such as purify and valgrind - * to complain about use of uninitialized data. The problem is not, - * it's with the caller. Removing that line will make sure you get - * really bad randomness and thereby other problems such as very - * insecure keys. - */ - - if (!MD_Update(m, (unsigned char *)&(md_c[0]), sizeof(md_c))) - goto err; - if (!MD_Final(m, local_md)) - goto err; - md_c[1]++; - - buf = (const char *)buf + j; - - for (k = 0; k < j; k++) { - /* - * Parallel threads may interfere with this, but always each byte - * of the new state is the XOR of some previous value of its and - * local_md (intermediate values may be lost). Alway using locking - * could hurt performance more than necessary given that - * conflicts occur only when the total seeding is longer than the - * random state. - */ - state[st_idx++] ^= local_md[k]; - if (st_idx >= STATE_SIZE) - st_idx = 0; - } - } - - if (!do_not_lock) - CRYPTO_THREAD_write_lock(rand_lock); - /* - * Don't just copy back local_md into md -- this could mean that other - * thread's seeding remains without effect (except for the incremented - * counter). By XORing it we keep at least as much entropy as fits into - * md. - */ - for (k = 0; k < (int)sizeof(md); k++) { - md[k] ^= local_md[k]; - } - if (entropy < ENTROPY_NEEDED) /* stop counting when we have enough */ - entropy += add; - if (!do_not_lock) - CRYPTO_THREAD_unlock(rand_lock); - - rv = 1; - err: - EVP_MD_CTX_free(m); - return rv; -} - -static int rand_seed(const void *buf, int num) -{ - return rand_add(buf, num, (double)num); -} - -static int rand_bytes(unsigned char *buf, int num, int pseudo) -{ - static volatile int stirred_pool = 0; - int i, j, k; - size_t num_ceil, st_idx, st_num; - int ok; - long md_c[2]; - unsigned char local_md[MD_DIGEST_LENGTH]; - EVP_MD_CTX *m; -#ifndef GETPID_IS_MEANINGLESS - pid_t curr_pid = getpid(); -#endif - time_t curr_time = time(NULL); - int do_stir_pool = 0; -/* time value for various platforms */ -#ifdef OPENSSL_SYS_WIN32 - FILETIME tv; -# ifdef _WIN32_WCE - SYSTEMTIME t; - GetSystemTime(&t); - SystemTimeToFileTime(&t, &tv); -# else - GetSystemTimeAsFileTime(&tv); -# endif -#elif defined(OPENSSL_SYS_VXWORKS) - struct timespec tv; - clock_gettime(CLOCK_REALTIME, &ts); -#elif defined(OPENSSL_SYS_DSPBIOS) - unsigned long long tv, OPENSSL_rdtsc(); - tv = OPENSSL_rdtsc(); -#else - struct timeval tv; - gettimeofday(&tv, NULL); -#endif - -#ifdef PREDICT - if (rand_predictable) { - static unsigned char val = 0; - - for (i = 0; i < num; i++) - buf[i] = val++; - return (1); - } -#endif - - if (num <= 0) - return 1; - - m = EVP_MD_CTX_new(); - if (m == NULL) - goto err_mem; - - /* round upwards to multiple of MD_DIGEST_LENGTH/2 */ - num_ceil = - (1 + (num - 1) / (MD_DIGEST_LENGTH / 2)) * (MD_DIGEST_LENGTH / 2); - - /* - * (Based on the rand(3) manpage:) - * - * For each group of 10 bytes (or less), we do the following: - * - * Input into the hash function the local 'md' (which is initialized from - * the global 'md' before any bytes are generated), the bytes that are to - * be overwritten by the random bytes, and bytes from the 'state' - * (incrementing looping index). From this digest output (which is kept - * in 'md'), the top (up to) 10 bytes are returned to the caller and the - * bottom 10 bytes are xored into the 'state'. - * - * Finally, after we have finished 'num' random bytes for the - * caller, 'count' (which is incremented) and the local and global 'md' - * are fed into the hash function and the results are kept in the - * global 'md'. - */ - - if (!RUN_ONCE(&rand_lock_init, do_rand_lock_init)) - goto err_mem; - - CRYPTO_THREAD_write_lock(rand_lock); - /* - * We could end up in an async engine while holding this lock so ensure - * we don't pause and cause a deadlock - */ - ASYNC_block_pause(); - - /* prevent rand_bytes() from trying to obtain the lock again */ - CRYPTO_THREAD_write_lock(rand_tmp_lock); - locking_threadid = CRYPTO_THREAD_get_current_id(); - CRYPTO_THREAD_unlock(rand_tmp_lock); - crypto_lock_rand = 1; - - if (!initialized) { - RAND_poll(); - initialized = 1; - } - - if (!stirred_pool) - do_stir_pool = 1; - - ok = (entropy >= ENTROPY_NEEDED); - if (!ok) { - /* - * If the PRNG state is not yet unpredictable, then seeing the PRNG - * output may help attackers to determine the new state; thus we have - * to decrease the entropy estimate. Once we've had enough initial - * seeding we don't bother to adjust the entropy count, though, - * because we're not ambitious to provide *information-theoretic* - * randomness. NOTE: This approach fails if the program forks before - * we have enough entropy. Entropy should be collected in a separate - * input pool and be transferred to the output pool only when the - * entropy limit has been reached. - */ - entropy -= num; - if (entropy < 0) - entropy = 0; - } - - if (do_stir_pool) { - /* - * In the output function only half of 'md' remains secret, so we - * better make sure that the required entropy gets 'evenly - * distributed' through 'state', our randomness pool. The input - * function (rand_add) chains all of 'md', which makes it more - * suitable for this purpose. - */ - - int n = STATE_SIZE; /* so that the complete pool gets accessed */ - while (n > 0) { -#if MD_DIGEST_LENGTH > 20 -# error "Please adjust DUMMY_SEED." -#endif -#define DUMMY_SEED "...................." /* at least MD_DIGEST_LENGTH */ - /* - * Note that the seed does not matter, it's just that - * rand_add expects to have something to hash. - */ - rand_add(DUMMY_SEED, MD_DIGEST_LENGTH, 0.0); - n -= MD_DIGEST_LENGTH; - } - if (ok) - stirred_pool = 1; - } - - st_idx = state_index; - st_num = state_num; - md_c[0] = md_count[0]; - md_c[1] = md_count[1]; - memcpy(local_md, md, sizeof(md)); - - state_index += num_ceil; - if (state_index > state_num) - state_index %= state_num; - - /* - * state[st_idx], ..., state[(st_idx + num_ceil - 1) % st_num] are now - * ours (but other threads may use them too) - */ - - md_count[0] += 1; - - /* before unlocking, we must clear 'crypto_lock_rand' */ - crypto_lock_rand = 0; - ASYNC_unblock_pause(); - CRYPTO_THREAD_unlock(rand_lock); - - while (num > 0) { - /* num_ceil -= MD_DIGEST_LENGTH/2 */ - j = (num >= MD_DIGEST_LENGTH / 2) ? MD_DIGEST_LENGTH / 2 : num; - num -= j; - if (!MD_Init(m)) - goto err; -#ifndef GETPID_IS_MEANINGLESS - if (curr_pid) { /* just in the first iteration to save time */ - if (!MD_Update(m, (unsigned char *)&curr_pid, sizeof(curr_pid))) - goto err; - curr_pid = 0; - } -#endif - if (curr_time) { /* just in the first iteration to save time */ - if (!MD_Update(m, (unsigned char *)&curr_time, sizeof(curr_time))) - goto err; - if (!MD_Update(m, (unsigned char *)&tv, sizeof(tv))) - goto err; - curr_time = 0; - if (!rand_hw_seed(m)) - goto err; - } - if (!MD_Update(m, local_md, MD_DIGEST_LENGTH)) - goto err; - if (!MD_Update(m, (unsigned char *)&(md_c[0]), sizeof(md_c))) - goto err; - - k = (st_idx + MD_DIGEST_LENGTH / 2) - st_num; - if (k > 0) { - if (!MD_Update(m, &(state[st_idx]), MD_DIGEST_LENGTH / 2 - k)) - goto err; - if (!MD_Update(m, &(state[0]), k)) - goto err; - } else if (!MD_Update(m, &(state[st_idx]), MD_DIGEST_LENGTH / 2)) - goto err; - if (!MD_Final(m, local_md)) - goto err; - - for (i = 0; i < MD_DIGEST_LENGTH / 2; i++) { - /* may compete with other threads */ - state[st_idx++] ^= local_md[i]; - if (st_idx >= st_num) - st_idx = 0; - if (i < j) - *(buf++) = local_md[i + MD_DIGEST_LENGTH / 2]; - } - } - - if (!MD_Init(m) - || !MD_Update(m, (unsigned char *)&(md_c[0]), sizeof(md_c)) - || !MD_Update(m, local_md, MD_DIGEST_LENGTH)) - goto err; - CRYPTO_THREAD_write_lock(rand_lock); - /* - * Prevent deadlocks if we end up in an async engine - */ - ASYNC_block_pause(); - if (!MD_Update(m, md, MD_DIGEST_LENGTH) || !MD_Final(m, md)) { - ASYNC_unblock_pause(); - CRYPTO_THREAD_unlock(rand_lock); - goto err; - } - ASYNC_unblock_pause(); - CRYPTO_THREAD_unlock(rand_lock); - - EVP_MD_CTX_free(m); - if (ok) - return (1); - else if (pseudo) - return 0; - else { - RANDerr(RAND_F_RAND_BYTES, RAND_R_PRNG_NOT_SEEDED); - ERR_add_error_data(1, "You need to read the OpenSSL FAQ, " - "https://www.openssl.org/docs/faq.html"); - return (0); - } - err: - RANDerr(RAND_F_RAND_BYTES, ERR_R_EVP_LIB); - EVP_MD_CTX_free(m); - return 0; - err_mem: - RANDerr(RAND_F_RAND_BYTES, ERR_R_MALLOC_FAILURE); - EVP_MD_CTX_free(m); - return 0; - -} - -static int rand_nopseudo_bytes(unsigned char *buf, int num) -{ - return rand_bytes(buf, num, 0); -} - -#if OPENSSL_API_COMPAT < 0x10100000L -/* - * pseudo-random bytes that are guaranteed to be unique but not unpredictable - */ -static int rand_pseudo_bytes(unsigned char *buf, int num) -{ - return rand_bytes(buf, num, 1); -} -#endif - -static int rand_status(void) -{ - CRYPTO_THREAD_ID cur; - int ret; - int do_not_lock; - - if (!RUN_ONCE(&rand_lock_init, do_rand_lock_init)) - return 0; - - cur = CRYPTO_THREAD_get_current_id(); - /* - * check if we already have the lock (could happen if a RAND_poll() - * implementation calls RAND_status()) - */ - if (crypto_lock_rand) { - CRYPTO_THREAD_read_lock(rand_tmp_lock); - do_not_lock = CRYPTO_THREAD_compare_id(locking_threadid, cur); - CRYPTO_THREAD_unlock(rand_tmp_lock); - } else - do_not_lock = 0; - - if (!do_not_lock) { - CRYPTO_THREAD_write_lock(rand_lock); - /* - * Prevent deadlocks in case we end up in an async engine - */ - ASYNC_block_pause(); - - /* - * prevent rand_bytes() from trying to obtain the lock again - */ - CRYPTO_THREAD_write_lock(rand_tmp_lock); - locking_threadid = cur; - CRYPTO_THREAD_unlock(rand_tmp_lock); - crypto_lock_rand = 1; - } - - if (!initialized) { - RAND_poll(); - initialized = 1; - } - - ret = entropy >= ENTROPY_NEEDED; - - if (!do_not_lock) { - /* before unlocking, we must clear 'crypto_lock_rand' */ - crypto_lock_rand = 0; - - ASYNC_unblock_pause(); - CRYPTO_THREAD_unlock(rand_lock); - } - - return ret; -} - -/* - * rand_hw_seed: get seed data from any available hardware RNG. only - * currently supports rdrand. - */ - -/* Adapted from eng_rdrand.c */ - -#if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || \ - defined(_M_AMD64) || defined (_M_X64)) && defined(OPENSSL_CPUID_OBJ) \ - && !defined(OPENSSL_NO_RDRAND) - -# define RDRAND_CALLS 4 - -size_t OPENSSL_ia32_rdrand(void); -extern unsigned int OPENSSL_ia32cap_P[]; - -static int rand_hw_seed(EVP_MD_CTX *ctx) -{ - int i; - if (!(OPENSSL_ia32cap_P[1] & (1 << (62 - 32)))) - return 1; - for (i = 0; i < RDRAND_CALLS; i++) { - size_t rnd; - rnd = OPENSSL_ia32_rdrand(); - if (rnd == 0) - return 1; - if (!MD_Update(ctx, (unsigned char *)&rnd, sizeof(size_t))) - return 0; - } - return 1; -} - -/* XOR an existing buffer with random data */ - -void rand_hw_xor(unsigned char *buf, size_t num) -{ - size_t rnd; - if (!(OPENSSL_ia32cap_P[1] & (1 << (62 - 32)))) - return; - while (num >= sizeof(size_t)) { - rnd = OPENSSL_ia32_rdrand(); - if (rnd == 0) - return; - *((size_t *)buf) ^= rnd; - buf += sizeof(size_t); - num -= sizeof(size_t); - } - if (num) { - rnd = OPENSSL_ia32_rdrand(); - if (rnd == 0) - return; - while (num) { - *buf ^= rnd & 0xff; - rnd >>= 8; - buf++; - num--; - } - } -} - -#else - -static int rand_hw_seed(EVP_MD_CTX *ctx) -{ - return 1; -} - -void rand_hw_xor(unsigned char *buf, size_t num) -{ - return; -} - -#endif diff --git a/crypto/rand/rand_egd.c b/crypto/rand/rand_egd.c index 50963b8e..5eb3225b 100644 --- a/crypto/rand/rand_egd.c +++ b/crypto/rand/rand_egd.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,59 +16,28 @@ NON_EMPTY_TRANSLATION_UNIT # include # include -/*- - * Query the EGD . - * - * This module supplies three routines: - * - * RAND_query_egd_bytes(path, buf, bytes) - * will actually query "bytes" bytes of entropy form the egd-socket located - * at path and will write them to buf (if supplied) or will directly feed - * it to RAND_seed() if buf==NULL. - * The number of bytes is not limited by the maximum chunk size of EGD, - * which is 255 bytes. If more than 255 bytes are wanted, several chunks - * of entropy bytes are requested. The connection is left open until the - * query is competed. - * RAND_query_egd_bytes() returns with - * -1 if an error occurred during connection or communication. - * num the number of bytes read from the EGD socket. This number is either - * the number of bytes requested or smaller, if the EGD pool is - * drained and the daemon signals that the pool is empty. - * This routine does not touch any RAND_status(). This is necessary, since - * PRNG functions may call it during initialization. - * - * RAND_egd_bytes(path, bytes) will query "bytes" bytes and have them - * used to seed the PRNG. - * RAND_egd_bytes() is a wrapper for RAND_query_egd_bytes() with buf=NULL. - * Unlike RAND_query_egd_bytes(), RAND_status() is used to test the - * seed status so that the return value can reflect the seed state: - * -1 if an error occurred during connection or communication _or_ - * if the PRNG has still not received the required seeding. - * num the number of bytes read from the EGD socket. This number is either - * the number of bytes requested or smaller, if the EGD pool is - * drained and the daemon signals that the pool is empty. - * - * RAND_egd(path) will query 255 bytes and use the bytes retrieved to seed - * the PRNG. - * RAND_egd() is a wrapper for RAND_egd_bytes() with numbytes=255. +/* + * Query an EGD */ # if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_VOS) || defined(OPENSSL_SYS_UEFI) int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) { - return (-1); + return -1; } int RAND_egd(const char *path) { - return (-1); + return -1; } int RAND_egd_bytes(const char *path, int bytes) { - return (-1); + return -1; } + # else + # include # include OPENSSL_UNISTD # include @@ -91,157 +60,98 @@ struct sockaddr_un { int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes) { - int ret = 0; + FILE *fp = NULL; struct sockaddr_un addr; - int len, num, numbytes; - int fd = -1; - int success; - unsigned char egdbuf[2], tempbuf[255], *retrievebuf; + int mybuffer, ret = -1, i, numbytes, fd; + unsigned char tempbuf[255]; + if (bytes > (int)sizeof(tempbuf)) + return -1; + + /* Make socket. */ memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; if (strlen(path) >= sizeof(addr.sun_path)) - return (-1); - OPENSSL_strlcpy(addr.sun_path, path, sizeof(addr.sun_path)); - len = offsetof(struct sockaddr_un, sun_path) + strlen(path); + return -1; + strcpy(addr.sun_path, path); + i = offsetof(struct sockaddr_un, sun_path) + strlen(path); fd = socket(AF_UNIX, SOCK_STREAM, 0); - if (fd == -1) - return (-1); - success = 0; - while (!success) { - if (connect(fd, (struct sockaddr *)&addr, len) == 0) - success = 1; - else { - switch (errno) { + if (fd == -1 || (fp = fdopen(fd, "r+")) == NULL) + return -1; + setbuf(fp, NULL); + + /* Try to connect */ + for ( ; ; ) { + if (connect(fd, (struct sockaddr *)&addr, i) == 0) + break; +# ifdef EISCONN + if (errno == EISCONN) + break; +# endif + switch (errno) { # ifdef EINTR - case EINTR: + case EINTR: # endif # ifdef EAGAIN - case EAGAIN: + case EAGAIN: # endif # ifdef EINPROGRESS - case EINPROGRESS: + case EINPROGRESS: # endif # ifdef EALREADY - case EALREADY: + case EALREADY: # endif - /* No error, try again */ - break; -# ifdef EISCONN - case EISCONN: - success = 1; - break; -# endif - default: - ret = -1; - goto err; /* failure */ - } + /* No error, try again */ + break; + default: + ret = -1; + goto err; } } - while (bytes > 0) { - egdbuf[0] = 1; - egdbuf[1] = bytes < 255 ? bytes : 255; - numbytes = 0; - while (numbytes != 2) { - num = write(fd, egdbuf + numbytes, 2 - numbytes); - if (num >= 0) - numbytes += num; - else { - switch (errno) { -# ifdef EINTR - case EINTR: -# endif -# ifdef EAGAIN - case EAGAIN: -# endif - /* No error, try again */ - break; - default: - ret = -1; - goto err; /* failure */ - } - } - } - numbytes = 0; - while (numbytes != 1) { - num = read(fd, egdbuf, 1); - if (num == 0) - goto err; /* descriptor closed */ - else if (num > 0) - numbytes += num; - else { - switch (errno) { -# ifdef EINTR - case EINTR: -# endif -# ifdef EAGAIN - case EAGAIN: -# endif - /* No error, try again */ - break; - default: - ret = -1; - goto err; /* failure */ - } - } - } - if (egdbuf[0] == 0) - goto err; - if (buf) - retrievebuf = buf + ret; - else - retrievebuf = tempbuf; - numbytes = 0; - while (numbytes != egdbuf[0]) { - num = read(fd, retrievebuf + numbytes, egdbuf[0] - numbytes); - if (num == 0) - goto err; /* descriptor closed */ - else if (num > 0) - numbytes += num; - else { - switch (errno) { -# ifdef EINTR - case EINTR: -# endif -# ifdef EAGAIN - case EAGAIN: -# endif - /* No error, try again */ - break; - default: - ret = -1; - goto err; /* failure */ - } - } - } - ret += egdbuf[0]; - bytes -= egdbuf[0]; - if (!buf) - RAND_seed(tempbuf, egdbuf[0]); - } + /* Make request, see how many bytes we can get back. */ + tempbuf[0] = 1; + tempbuf[1] = bytes; + if (fwrite(tempbuf, sizeof(char), 2, fp) != 2 || fflush(fp) == EOF) + goto err; + if (fread(tempbuf, sizeof(char), 1, fp) != 1 || tempbuf[0] == 0) + goto err; + numbytes = tempbuf[0]; + + /* Which buffer are we using? */ + mybuffer = buf == NULL; + if (mybuffer) + buf = tempbuf; + + /* Read bytes. */ + i = fread(buf, sizeof(char), numbytes, fp); + if (i < numbytes) + goto err; + ret = numbytes; + if (mybuffer) + RAND_add(tempbuf, i, i); + err: - if (fd != -1) - close(fd); - return (ret); + if (fp != NULL) + fclose(fp); + return ret; } int RAND_egd_bytes(const char *path, int bytes) { - int num, ret = -1; + int num; num = RAND_query_egd_bytes(path, NULL, bytes); if (num < 0) - goto err; - if (RAND_status() == 1) - ret = num; - err: - return (ret); + return -1; + if (RAND_status() != 1) + return -1; + return num; } int RAND_egd(const char *path) { - return (RAND_egd_bytes(path, 255)); + return RAND_egd_bytes(path, 255); } # endif diff --git a/crypto/rand/rand_err.c b/crypto/rand/rand_err.c index 55431264..e92c33f4 100644 --- a/crypto/rand/rand_err.c +++ b/crypto/rand/rand_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,23 +8,95 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_RAND,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_RAND,0,reason) - -static ERR_STRING_DATA RAND_str_functs[] = { - {ERR_FUNC(RAND_F_RAND_BYTES), "RAND_bytes"}, +static const ERR_STRING_DATA RAND_str_functs[] = { + {ERR_PACK(ERR_LIB_RAND, RAND_F_DRBG_BYTES, 0), "drbg_bytes"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_DRBG_GET_ENTROPY, 0), "drbg_get_entropy"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_DRBG_SETUP, 0), "drbg_setup"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_GET_ENTROPY, 0), "get_entropy"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_BYTES, 0), "RAND_bytes"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_ENABLE_LOCKING, 0), + "rand_drbg_enable_locking"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_GENERATE, 0), + "RAND_DRBG_generate"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_INSTANTIATE, 0), + "RAND_DRBG_instantiate"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_NEW, 0), "RAND_DRBG_new"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_RESEED, 0), "RAND_DRBG_reseed"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_RESTART, 0), "rand_drbg_restart"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_SET, 0), "RAND_DRBG_set"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_UNINSTANTIATE, 0), + "RAND_DRBG_uninstantiate"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_LOAD_FILE, 0), "RAND_load_file"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_POOL_ADD, 0), "RAND_POOL_add"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_POOL_ADD_BEGIN, 0), + "RAND_POOL_add_begin"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_POOL_ADD_END, 0), "RAND_POOL_add_end"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_POOL_BYTES_NEEDED, 0), + "RAND_POOL_bytes_needed"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_POOL_NEW, 0), "RAND_POOL_new"}, + {ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_WRITE_FILE, 0), "RAND_write_file"}, {0, NULL} }; -static ERR_STRING_DATA RAND_str_reasons[] = { - {ERR_REASON(RAND_R_PRNG_NOT_SEEDED), "PRNG not seeded"}, +static const ERR_STRING_DATA RAND_str_reasons[] = { + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ADDITIONAL_INPUT_TOO_LONG), + "additional input too long"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ALREADY_INSTANTIATED), + "already instantiated"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ARGUMENT_OUT_OF_RANGE), + "argument out of range"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_CANNOT_OPEN_FILE), "Cannot open file"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_DRBG_ALREADY_INITIALIZED), + "drbg already initialized"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_DRBG_NOT_INITIALISED), + "drbg not initialised"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ENTROPY_INPUT_TOO_LONG), + "entropy input too long"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ENTROPY_OUT_OF_RANGE), + "entropy out of range"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED), + "error entropy pool was ignored"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ERROR_INITIALISING_DRBG), + "error initialising drbg"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ERROR_INSTANTIATING_DRBG), + "error instantiating drbg"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT), + "error retrieving additional input"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ERROR_RETRIEVING_ENTROPY), + "error retrieving entropy"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_ERROR_RETRIEVING_NONCE), + "error retrieving nonce"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_FAILED_TO_CREATE_LOCK), + "failed to create lock"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_FUNC_NOT_IMPLEMENTED), + "Function not implemented"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_FWRITE_ERROR), "Error writing file"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_GENERATE_ERROR), "generate error"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_INTERNAL_ERROR), "internal error"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_IN_ERROR_STATE), "in error state"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_NOT_A_REGULAR_FILE), + "Not a regular file"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_NOT_INSTANTIATED), "not instantiated"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED), + "no drbg implementation selected"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PARENT_LOCKING_NOT_ENABLED), + "parent locking not enabled"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PERSONALISATION_STRING_TOO_LONG), + "personalisation string too long"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PRNG_NOT_SEEDED), "PRNG not seeded"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_RANDOM_POOL_OVERFLOW), + "random pool overflow"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG), + "request too large for drbg"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_RESEED_ERROR), "reseed error"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_SELFTEST_FAILURE), "selftest failure"}, + {ERR_PACK(ERR_LIB_RAND, 0, RAND_R_UNSUPPORTED_DRBG_TYPE), + "unsupported drbg type"}, {0, NULL} }; @@ -33,10 +105,9 @@ static ERR_STRING_DATA RAND_str_reasons[] = { int ERR_load_RAND_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(RAND_str_functs[0].error) == NULL) { - ERR_load_strings(0, RAND_str_functs); - ERR_load_strings(0, RAND_str_reasons); + ERR_load_strings_const(RAND_str_functs); + ERR_load_strings_const(RAND_str_reasons); } #endif return 1; diff --git a/crypto/rand/rand_lcl.h b/crypto/rand/rand_lcl.h index d98c90e2..ceba8bba 100644 --- a/crypto/rand/rand_lcl.h +++ b/crypto/rand/rand_lcl.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,37 +10,225 @@ #ifndef HEADER_RAND_LCL_H # define HEADER_RAND_LCL_H -# define ENTROPY_NEEDED 32 /* require 256 bits = 32 bytes of randomness */ - -# if !defined(USE_MD5_RAND) && !defined(USE_SHA1_RAND) && !defined(USE_MDC2_RAND) && !defined(USE_MD2_RAND) -# define USE_SHA1_RAND -# endif - +# include # include -# define MD_Update(a,b,c) EVP_DigestUpdate(a,b,c) -# define MD_Final(a,b) EVP_DigestFinal_ex(a,b,NULL) -# if defined(USE_MD5_RAND) -# include -# define MD_DIGEST_LENGTH MD5_DIGEST_LENGTH -# define MD_Init(a) EVP_DigestInit_ex(a,EVP_md5(), NULL) -# define MD(a,b,c) EVP_Digest(a,b,c,NULL,EVP_md5(), NULL) -# elif defined(USE_SHA1_RAND) -# include -# define MD_DIGEST_LENGTH SHA_DIGEST_LENGTH -# define MD_Init(a) EVP_DigestInit_ex(a,EVP_sha1(), NULL) -# define MD(a,b,c) EVP_Digest(a,b,c,NULL,EVP_sha1(), NULL) -# elif defined(USE_MDC2_RAND) -# include -# define MD_DIGEST_LENGTH MDC2_DIGEST_LENGTH -# define MD_Init(a) EVP_DigestInit_ex(a,EVP_mdc2(), NULL) -# define MD(a,b,c) EVP_Digest(a,b,c,NULL,EVP_mdc2(), NULL) -# elif defined(USE_MD2_RAND) -# include -# define MD_DIGEST_LENGTH MD2_DIGEST_LENGTH -# define MD_Init(a) EVP_DigestInit_ex(a,EVP_md2(), NULL) -# define MD(a,b,c) EVP_Digest(a,b,c,NULL,EVP_md2(), NULL) -# endif +# include +# include +# include +# include "internal/rand.h" -void rand_hw_xor(unsigned char *buf, size_t num); +/* How many times to read the TSC as a randomness source. */ +# define TSC_READ_COUNT 4 + +/* Maximum reseed intervals */ +# define MAX_RESEED_INTERVAL (1 << 24) +# define MAX_RESEED_TIME_INTERVAL (1 << 20) /* approx. 12 days */ + +/* Default reseed intervals */ +# define MASTER_RESEED_INTERVAL (1 << 8) +# define SLAVE_RESEED_INTERVAL (1 << 16) +# define MASTER_RESEED_TIME_INTERVAL (60*60) /* 1 hour */ +# define SLAVE_RESEED_TIME_INTERVAL (7*60) /* 7 minutes */ + + + +/* Max size of additional input and personalization string. */ +# define DRBG_MAX_LENGTH 4096 + +/* + * The quotient between max_{entropy,nonce}len and min_{entropy,nonce}len + * + * The current factor is large enough that the RAND_POOL can store a + * random input which has a lousy entropy rate of 0.0625 bits per byte. + * This input will be sent through the derivation function which 'compresses' + * the low quality input into a high quality output. + */ +# define DRBG_MINMAX_FACTOR 128 + + +/* DRBG status values */ +typedef enum drbg_status_e { + DRBG_UNINITIALISED, + DRBG_READY, + DRBG_ERROR +} DRBG_STATUS; + + +/* intantiate */ +typedef int (*RAND_DRBG_instantiate_fn)(RAND_DRBG *ctx, + const unsigned char *ent, + size_t entlen, + const unsigned char *nonce, + size_t noncelen, + const unsigned char *pers, + size_t perslen); +/* reseed */ +typedef int (*RAND_DRBG_reseed_fn)(RAND_DRBG *ctx, + const unsigned char *ent, + size_t entlen, + const unsigned char *adin, + size_t adinlen); +/* generat output */ +typedef int (*RAND_DRBG_generate_fn)(RAND_DRBG *ctx, + unsigned char *out, + size_t outlen, + const unsigned char *adin, + size_t adinlen); +/* uninstantiate */ +typedef int (*RAND_DRBG_uninstantiate_fn)(RAND_DRBG *ctx); + + +/* + * The DRBG methods + */ + +typedef struct rand_drbg_method_st { + RAND_DRBG_instantiate_fn instantiate; + RAND_DRBG_reseed_fn reseed; + RAND_DRBG_generate_fn generate; + RAND_DRBG_uninstantiate_fn uninstantiate; +} RAND_DRBG_METHOD; + + +/* + * The state of a DRBG AES-CTR. + */ +typedef struct rand_drbg_ctr_st { + AES_KEY ks; + size_t keylen; + unsigned char K[32]; + unsigned char V[16]; + /* Temp variables used by derivation function */ + AES_KEY df_ks; + AES_KEY df_kxks; + /* Temporary block storage used by ctr_df */ + unsigned char bltmp[16]; + size_t bltmp_pos; + unsigned char KX[48]; +} RAND_DRBG_CTR; + + +/* + * The state of all types of DRBGs, even though we only have CTR mode + * right now. + */ +struct rand_drbg_st { + CRYPTO_RWLOCK *lock; + RAND_DRBG *parent; + int secure; /* 1: allocated on the secure heap, 0: otherwise */ + int nid; /* the underlying algorithm */ + int fork_count; + unsigned short flags; /* various external flags */ + + /* + * The random pool is used by RAND_add()/drbg_add() to attach random + * data to the global drbg, such that the rand_drbg_get_entropy() callback + * can pull it during instantiation and reseeding. This is necessary to + * reconcile the different philosophies of the RAND and the RAND_DRBG + * with respect to how randomness is added to the RNG during reseeding + * (see PR #4328). + */ + RAND_POOL *pool; + + /* + * The following parameters are setup by the per-type "init" function. + * + * Currently the only type is CTR_DRBG, its init function is drbg_ctr_init(). + * + * The parameters are closely related to the ones described in + * section '10.2.1 CTR_DRBG' of [NIST SP 800-90Ar1], with one + * crucial difference: In the NIST standard, all counts are given + * in bits, whereas in OpenSSL entropy counts are given in bits + * and buffer lengths are given in bytes. + * + * Since this difference has lead to some confusion in the past, + * (see [GitHub Issue #2443], formerly [rt.openssl.org #4055]) + * the 'len' suffix has been added to all buffer sizes for + * clarification. + */ + + int strength; + size_t max_request; + size_t min_entropylen, max_entropylen; + size_t min_noncelen, max_noncelen; + size_t max_perslen, max_adinlen; + + /* Counts the number of generate requests since the last reseed. */ + unsigned int generate_counter; + /* + * Maximum number of generate requests until a reseed is required. + * This value is ignored if it is zero. + */ + unsigned int reseed_interval; + /* Stores the time when the last reseeding occurred */ + time_t reseed_time; + /* + * Specifies the maximum time interval (in seconds) between reseeds. + * This value is ignored if it is zero. + */ + time_t reseed_time_interval; + /* + * Counts the number of reseeds since instantiation. + * This value is ignored if it is zero. + * + * This counter is used only for seed propagation from the DRBG + * to its two children, the and DRBG. This feature is + * very special and its sole purpose is to ensure that any randomness which + * is added by RAND_add() or RAND_seed() will have an immediate effect on + * the output of RAND_bytes() resp. RAND_priv_bytes(). + */ + unsigned int reseed_counter; + + size_t seedlen; + DRBG_STATUS state; + + /* Application data, mainly used in the KATs. */ + CRYPTO_EX_DATA ex_data; + + /* Implementation specific data (currently only one implementation) */ + union { + RAND_DRBG_CTR ctr; + } data; + + /* Implementation specific methods */ + RAND_DRBG_METHOD *meth; + + /* Callback functions. See comments in rand_lib.c */ + 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; +}; + +/* The global RAND method, and the global buffer and DRBG instance. */ +extern RAND_METHOD rand_meth; + +/* How often we've forked (only incremented in child). */ +extern int rand_fork_count; + +/* Hardware-based seeding functions. */ +size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool); +size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool); + +/* DRBG entropy callbacks. */ +size_t rand_drbg_get_entropy(RAND_DRBG *drbg, + unsigned char **pout, + int entropy, size_t min_len, size_t max_len); +void rand_drbg_cleanup_entropy(RAND_DRBG *drbg, + unsigned char *out, size_t outlen); +size_t rand_drbg_get_additional_data(unsigned char **pout, size_t max_len); + +/* DRBG helpers */ +int rand_drbg_restart(RAND_DRBG *drbg, + const unsigned char *buffer, size_t len, size_t entropy); + +/* locking api */ +int rand_drbg_lock(RAND_DRBG *drbg); +int rand_drbg_unlock(RAND_DRBG *drbg); +int rand_drbg_enable_locking(RAND_DRBG *drbg); + + +/* initializes the AES-CTR DRBG implementation */ +int drbg_ctr_init(RAND_DRBG *drbg); #endif diff --git a/crypto/rand/rand_lib.c b/crypto/rand/rand_lib.c index 62770d49..b8b7b6e8 100644 --- a/crypto/rand/rand_lib.c +++ b/crypto/rand/rand_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,39 +11,697 @@ #include #include "internal/cryptlib.h" #include -#include "internal/rand.h" +#include "internal/rand_int.h" #include #include "internal/thread_once.h" +#include "rand_lcl.h" +#ifdef OPENSSL_SYS_UNIX +# include +# include +# include +#endif +#include "e_os.h" -#ifdef OPENSSL_FIPS -# include -# include +/* Macro to convert two thirty two bit values into a sixty four bit one */ +#define TWO32TO64(a, b) ((((uint64_t)(a)) << 32) + (b)) + +/* + * Check for the existence and support of POSIX timers. The standard + * says that the _POSIX_TIMERS macro will have a positive value if they + * are available. + * + * However, we want an additional constraint: that the timer support does + * not require an extra library dependency. Early versions of glibc + * require -lrt to be specified on the link line to access the timers, + * so this needs to be checked for. + * + * It is worse because some libraries define __GLIBC__ but don't + * support the version testing macro (e.g. uClibc). This means + * an extra check is needed. + * + * The final condition is: + * "have posix timers and either not glibc or glibc without -lrt" + * + * The nested #if sequences are required to avoid using a parameterised + * macro that might be undefined. + */ +#undef OSSL_POSIX_TIMER_OKAY +#if defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0 +# if defined(__GLIBC__) +# if defined(__GLIBC_PREREQ) +# if __GLIBC_PREREQ(2, 17) +# define OSSL_POSIX_TIMER_OKAY +# endif +# endif +# else +# define OSSL_POSIX_TIMER_OKAY +# endif #endif #ifndef OPENSSL_NO_ENGINE /* non-NULL if default_RAND_meth is ENGINE-provided */ -static ENGINE *funct_ref = NULL; -static CRYPTO_RWLOCK *rand_engine_lock = NULL; +static ENGINE *funct_ref; +static CRYPTO_RWLOCK *rand_engine_lock; #endif -static const RAND_METHOD *default_RAND_meth = NULL; -static CRYPTO_RWLOCK *rand_meth_lock = NULL; -static CRYPTO_ONCE rand_lock_init = CRYPTO_ONCE_STATIC_INIT; +static CRYPTO_RWLOCK *rand_meth_lock; +static const RAND_METHOD *default_RAND_meth; +static CRYPTO_ONCE rand_init = CRYPTO_ONCE_STATIC_INIT; -DEFINE_RUN_ONCE_STATIC(do_rand_lock_init) +int rand_fork_count; + +#ifdef OPENSSL_RAND_SEED_RDTSC +/* + * IMPORTANT NOTE: It is not currently possible to use this code + * because we are not sure about the amount of randomness it provides. + * Some SP900 tests have been run, but there is internal skepticism. + * So for now this code is not used. + */ +# error "RDTSC enabled? Should not be possible!" + +/* + * Acquire entropy from high-speed clock + * + * Since we get some randomness from the low-order bits of the + * high-speed clock, it can help. + * + * Returns the total entropy count, if it exceeds the requested + * entropy count. Otherwise, returns an entropy count of 0. + */ +size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool) +{ + unsigned char c; + int i; + + if ((OPENSSL_ia32cap_P[0] & (1 << 4)) != 0) { + for (i = 0; i < TSC_READ_COUNT; i++) { + c = (unsigned char)(OPENSSL_rdtsc() & 0xFF); + RAND_POOL_add(pool, &c, 1, 4); + } + } + return RAND_POOL_entropy_available(pool); +} +#endif + +#ifdef OPENSSL_RAND_SEED_RDCPU +size_t OPENSSL_ia32_rdseed_bytes(unsigned char *buf, size_t len); +size_t OPENSSL_ia32_rdrand_bytes(unsigned char *buf, size_t len); + +extern unsigned int OPENSSL_ia32cap_P[]; + +/* + * Acquire entropy using Intel-specific cpu instructions + * + * Uses the RDSEED instruction if available, otherwise uses + * RDRAND if available. + * + * For the differences between RDSEED and RDRAND, and why RDSEED + * is the preferred choice, see https://goo.gl/oK3KcN + * + * Returns the total entropy count, if it exceeds the requested + * entropy count. Otherwise, returns an entropy count of 0. + */ +size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool) +{ + size_t bytes_needed; + unsigned char *buffer; + + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + if (bytes_needed > 0) { + buffer = RAND_POOL_add_begin(pool, bytes_needed); + + if (buffer != NULL) { + + /* If RDSEED is available, use that. */ + if ((OPENSSL_ia32cap_P[2] & (1 << 18)) != 0) { + if (OPENSSL_ia32_rdseed_bytes(buffer, bytes_needed) + == bytes_needed) + return RAND_POOL_add_end(pool, + bytes_needed, + 8 * bytes_needed); + } + + /* Second choice is RDRAND. */ + if ((OPENSSL_ia32cap_P[1] & (1 << (62 - 32))) != 0) { + if (OPENSSL_ia32_rdrand_bytes(buffer, bytes_needed) + == bytes_needed) + return RAND_POOL_add_end(pool, + bytes_needed, + 8 * bytes_needed); + } + + return RAND_POOL_add_end(pool, 0, 0); + } + } + + return RAND_POOL_entropy_available(pool); +} +#endif + + +/* + * Implements the get_entropy() callback (see RAND_DRBG_set_callbacks()) + * + * If the DRBG has a parent, then the required amount of entropy input + * is fetched using the parent's RAND_DRBG_generate(). + * + * Otherwise, the entropy is polled from the system entropy sources + * using RAND_POOL_acquire_entropy(). + * + * If a random pool has been added to the DRBG using RAND_add(), then + * its entropy will be used up first. + */ +size_t rand_drbg_get_entropy(RAND_DRBG *drbg, + unsigned char **pout, + int entropy, size_t min_len, size_t max_len) +{ + size_t ret = 0; + size_t entropy_available = 0; + RAND_POOL *pool = RAND_POOL_new(entropy, min_len, max_len); + + if (pool == NULL) + return 0; + + if (drbg->pool) { + RAND_POOL_add(pool, + RAND_POOL_buffer(drbg->pool), + RAND_POOL_length(drbg->pool), + RAND_POOL_entropy(drbg->pool)); + RAND_POOL_free(drbg->pool); + drbg->pool = NULL; + } + + if (drbg->parent) { + size_t bytes_needed = RAND_POOL_bytes_needed(pool, 8); + unsigned char *buffer = RAND_POOL_add_begin(pool, bytes_needed); + + if (buffer != NULL) { + size_t bytes = 0; + + /* + * Get random from parent, include our state as additional input. + * Our lock is already held, but we need to lock our parent before + * generating bits from it. (Note: taking the lock will be a no-op + * if locking if drbg->parent->lock == NULL.) + */ + rand_drbg_lock(drbg->parent); + if (RAND_DRBG_generate(drbg->parent, + buffer, bytes_needed, + 0, + (unsigned char *)drbg, sizeof(*drbg)) != 0) + bytes = bytes_needed; + rand_drbg_unlock(drbg->parent); + + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); + } + + } else { + /* Get entropy by polling system entropy sources. */ + entropy_available = RAND_POOL_acquire_entropy(pool); + } + + if (entropy_available > 0) { + ret = RAND_POOL_length(pool); + *pout = RAND_POOL_detach(pool); + } + + RAND_POOL_free(pool); + return ret; +} + +/* + * Find a suitable source of time. Start with the highest resolution source + * and work down to the slower ones. This is added as additional data and + * isn't counted as randomness, so any result is acceptable. + * + * Returns 0 when we weren't able to find any time source + */ +static uint64_t get_timer_bits(void) +{ + uint64_t res = OPENSSL_rdtsc(); + + if (res != 0) + return res; +#if defined(_WIN32) + { + LARGE_INTEGER t; + FILETIME ft; + + if (QueryPerformanceCounter(&t) != 0) + return t.QuadPart; + GetSystemTimeAsFileTime(&ft); + return TWO32TO64(ft.dwHighDateTime, ft.dwLowDateTime); + } +#elif defined(__sun) || defined(__hpux) + return gethrtime(); +#elif defined(_AIX) + { + timebasestruct_t t; + + read_wall_time(&t, TIMEBASE_SZ); + return TWO32TO64(t.tb_high, t.tb_low); + } +#else + +# if defined(OSSL_POSIX_TIMER_OKAY) + { + struct timespec ts; + clockid_t cid; + +# ifdef CLOCK_BOOTTIME + cid = CLOCK_BOOTTIME; +# elif defined(_POSIX_MONOTONIC_CLOCK) + cid = CLOCK_MONOTONIC; +# else + cid = CLOCK_REALTIME; +# endif + + if (clock_gettime(cid, &ts) == 0) + return TWO32TO64(ts.tv_sec, ts.tv_nsec); + } +# endif +# if defined(__unix__) \ + || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) + { + struct timeval tv; + + if (gettimeofday(&tv, NULL) == 0) + return TWO32TO64(tv.tv_sec, tv.tv_usec); + } +# endif + { + time_t t = time(NULL); + if (t == (time_t)-1) + return 0; + return t; + } +#endif +} + +/* + * Generate additional data that can be used for the drbg. The data does + * not need to contain entropy, but it's useful if it contains at least + * some bits that are unpredictable. + * + * Returns 0 on failure. + * + * On success it allocates a buffer at |*pout| and returns the length of + * the data. The buffer should get freed using OPENSSL_secure_clear_free(). + */ +size_t rand_drbg_get_additional_data(unsigned char **pout, size_t max_len) +{ + RAND_POOL *pool; + CRYPTO_THREAD_ID thread_id; + size_t len; +#ifdef OPENSSL_SYS_UNIX + pid_t pid; +#elif defined(OPENSSL_SYS_WIN32) + DWORD pid; +#endif + uint64_t tbits; + + pool = RAND_POOL_new(0, 0, max_len); + if (pool == NULL) + return 0; + +#ifdef OPENSSL_SYS_UNIX + pid = getpid(); + RAND_POOL_add(pool, (unsigned char *)&pid, sizeof(pid), 0); +#elif defined(OPENSSL_SYS_WIN32) + pid = GetCurrentProcessId(); + RAND_POOL_add(pool, (unsigned char *)&pid, sizeof(pid), 0); +#endif + + thread_id = CRYPTO_THREAD_get_current_id(); + if (thread_id != 0) + RAND_POOL_add(pool, (unsigned char *)&thread_id, sizeof(thread_id), 0); + + tbits = get_timer_bits(); + if (tbits != 0) + RAND_POOL_add(pool, (unsigned char *)&tbits, sizeof(tbits), 0); + + /* TODO: Use RDSEED? */ + + len = RAND_POOL_length(pool); + if (len != 0) + *pout = RAND_POOL_detach(pool); + RAND_POOL_free(pool); + + return len; +} + +/* + * Implements the cleanup_entropy() callback (see RAND_DRBG_set_callbacks()) + * + */ +void rand_drbg_cleanup_entropy(RAND_DRBG *drbg, + unsigned char *out, size_t outlen) +{ + OPENSSL_secure_clear_free(out, outlen); +} + +void rand_fork() +{ + rand_fork_count++; +} + +DEFINE_RUN_ONCE_STATIC(do_rand_init) { int ret = 1; + #ifndef OPENSSL_NO_ENGINE rand_engine_lock = CRYPTO_THREAD_lock_new(); ret &= rand_engine_lock != NULL; #endif rand_meth_lock = CRYPTO_THREAD_lock_new(); ret &= rand_meth_lock != NULL; + return ret; } +void rand_cleanup_int(void) +{ + const RAND_METHOD *meth = default_RAND_meth; + + if (meth != NULL && meth->cleanup != NULL) + meth->cleanup(); + RAND_set_rand_method(NULL); +#ifndef OPENSSL_NO_ENGINE + CRYPTO_THREAD_lock_free(rand_engine_lock); +#endif + CRYPTO_THREAD_lock_free(rand_meth_lock); +} + +/* + * RAND_poll() reseeds the default RNG using random input + * + * The random input is obtained from polling various entropy + * sources which depend on the operating system and are + * configurable via the --with-rand-seed configure option. + */ +int RAND_poll(void) +{ + int ret = 0; + + RAND_POOL *pool = NULL; + + const RAND_METHOD *meth = RAND_get_rand_method(); + + if (meth == RAND_OpenSSL()) { + /* fill random pool and seed the master DRBG */ + RAND_DRBG *drbg = RAND_DRBG_get0_master(); + + if (drbg == NULL) + return 0; + + rand_drbg_lock(drbg); + ret = rand_drbg_restart(drbg, NULL, 0, 0); + rand_drbg_unlock(drbg); + + return ret; + + } else { + /* fill random pool and seed the current legacy RNG */ + pool = RAND_POOL_new(RAND_DRBG_STRENGTH, + RAND_DRBG_STRENGTH / 8, + DRBG_MINMAX_FACTOR * (RAND_DRBG_STRENGTH / 8)); + if (pool == NULL) + return 0; + + if (RAND_POOL_acquire_entropy(pool) == 0) + goto err; + + if (meth->add == NULL + || meth->add(RAND_POOL_buffer(pool), + RAND_POOL_length(pool), + (RAND_POOL_entropy(pool) / 8.0)) == 0) + goto err; + + ret = 1; + } + +err: + RAND_POOL_free(pool); + return ret; +} + +/* + * The 'random pool' acts as a dumb container for collecting random + * input from various entropy sources. The pool has no knowledge about + * whether its randomness is fed into a legacy RAND_METHOD via RAND_add() + * or into a new style RAND_DRBG. It is the callers duty to 1) initialize the + * random pool, 2) pass it to the polling callbacks, 3) seed the RNG, and + * 4) cleanup the random pool again. + * + * The random pool contains no locking mechanism because its scope and + * lifetime is intended to be restricted to a single stack frame. + */ +struct rand_pool_st { + unsigned char *buffer; /* points to the beginning of the random pool */ + size_t len; /* current number of random bytes contained in the pool */ + + size_t min_len; /* minimum number of random bytes requested */ + size_t max_len; /* maximum number of random bytes (allocated buffer size) */ + size_t entropy; /* current entropy count in bits */ + size_t requested_entropy; /* requested entropy count in bits */ +}; + +/* + * Allocate memory and initialize a new random pool + */ + +RAND_POOL *RAND_POOL_new(int entropy, size_t min_len, size_t max_len) +{ + RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool)); + + if (pool == NULL) { + RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE); + goto err; + } + + pool->min_len = min_len; + pool->max_len = max_len; + + pool->buffer = OPENSSL_secure_zalloc(pool->max_len); + if (pool->buffer == NULL) { + RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE); + goto err; + } + + pool->requested_entropy = entropy; + + return pool; + +err: + OPENSSL_free(pool); + return NULL; +} + +/* + * Free |pool|, securely erasing its buffer. + */ +void RAND_POOL_free(RAND_POOL *pool) +{ + if (pool == NULL) + return; + + OPENSSL_secure_clear_free(pool->buffer, pool->max_len); + OPENSSL_free(pool); +} + +/* + * Return the |pool|'s buffer to the caller (readonly). + */ +const unsigned char *RAND_POOL_buffer(RAND_POOL *pool) +{ + return pool->buffer; +} + +/* + * Return the |pool|'s entropy to the caller. + */ +size_t RAND_POOL_entropy(RAND_POOL *pool) +{ + return pool->entropy; +} + +/* + * Return the |pool|'s buffer length to the caller. + */ +size_t RAND_POOL_length(RAND_POOL *pool) +{ + return pool->len; +} + +/* + * Detach the |pool| buffer and return it to the caller. + * It's the responsibility of the caller to free the buffer + * using OPENSSL_secure_clear_free(). + */ +unsigned char *RAND_POOL_detach(RAND_POOL *pool) +{ + unsigned char *ret = pool->buffer; + pool->buffer = NULL; + return ret; +} + + +/* + * If every byte of the input contains |entropy_per_bytes| bits of entropy, + * how many bytes does one need to obtain at least |bits| bits of entropy? + */ +#define ENTROPY_TO_BYTES(bits, entropy_per_bytes) \ + (((bits) + ((entropy_per_bytes) - 1))/(entropy_per_bytes)) + + +/* + * Checks whether the |pool|'s entropy is available to the caller. + * This is the case when entropy count and buffer length are high enough. + * Returns + * + * |entropy| if the entropy count and buffer size is large enough + * 0 otherwise + */ +size_t RAND_POOL_entropy_available(RAND_POOL *pool) +{ + if (pool->entropy < pool->requested_entropy) + return 0; + + if (pool->len < pool->min_len) + return 0; + + return pool->entropy; +} + +/* + * Returns the (remaining) amount of entropy needed to fill + * the random pool. + */ + +size_t RAND_POOL_entropy_needed(RAND_POOL *pool) +{ + if (pool->entropy < pool->requested_entropy) + return pool->requested_entropy - pool->entropy; + + return 0; +} + +/* + * Returns the number of bytes needed to fill the pool, assuming + * the input has 'entropy_per_byte' entropy bits per byte. + * In case of an error, 0 is returned. + */ + +size_t RAND_POOL_bytes_needed(RAND_POOL *pool, unsigned int entropy_per_byte) +{ + size_t bytes_needed; + size_t entropy_needed = RAND_POOL_entropy_needed(pool); + + if (entropy_per_byte < 1 || entropy_per_byte > 8) { + RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_ARGUMENT_OUT_OF_RANGE); + return 0; + } + + bytes_needed = ENTROPY_TO_BYTES(entropy_needed, entropy_per_byte); + + if (bytes_needed > pool->max_len - pool->len) { + /* not enough space left */ + RANDerr(RAND_F_RAND_POOL_BYTES_NEEDED, RAND_R_RANDOM_POOL_OVERFLOW); + return 0; + } + + if (pool->len < pool->min_len && + bytes_needed < pool->min_len - pool->len) + /* to meet the min_len requirement */ + bytes_needed = pool->min_len - pool->len; + + return bytes_needed; +} + +/* Returns the remaining number of bytes available */ +size_t RAND_POOL_bytes_remaining(RAND_POOL *pool) +{ + return pool->max_len - pool->len; +} + +/* + * Add random bytes to the random pool. + * + * It is expected that the |buffer| contains |len| bytes of + * random input which contains at least |entropy| bits of + * randomness. + * + * Return available amount of entropy after this operation. + * (see RAND_POOL_entropy_available(pool)) + */ +size_t RAND_POOL_add(RAND_POOL *pool, + const unsigned char *buffer, size_t len, size_t entropy) +{ + if (len > pool->max_len - pool->len) { + RANDerr(RAND_F_RAND_POOL_ADD, RAND_R_ENTROPY_INPUT_TOO_LONG); + return 0; + } + + if (len > 0) { + memcpy(pool->buffer + pool->len, buffer, len); + pool->len += len; + pool->entropy += entropy; + } + + return RAND_POOL_entropy_available(pool); +} + +/* + * Start to add random bytes to the random pool in-place. + * + * Reserves the next |len| bytes for adding random bytes in-place + * and returns a pointer to the buffer. + * The caller is allowed to copy up to |len| bytes into the buffer. + * If |len| == 0 this is considered a no-op and a NULL pointer + * is returned without producing an error message. + * + * After updating the buffer, RAND_POOL_add_end() needs to be called + * to finish the udpate operation (see next comment). + */ +unsigned char *RAND_POOL_add_begin(RAND_POOL *pool, size_t len) +{ + if (len == 0) + return NULL; + + if (len > pool->max_len - pool->len) { + RANDerr(RAND_F_RAND_POOL_ADD_BEGIN, RAND_R_RANDOM_POOL_OVERFLOW); + return NULL; + } + + return pool->buffer + pool->len; +} + +/* + * Finish to add random bytes to the random pool in-place. + * + * Finishes an in-place update of the random pool started by + * RAND_POOL_add_begin() (see previous comment). + * It is expected that |len| bytes of random input have been added + * to the buffer which contain at least |entropy| bits of randomness. + * It is allowed to add less bytes than originally reserved. + */ +size_t RAND_POOL_add_end(RAND_POOL *pool, size_t len, size_t entropy) +{ + if (len > pool->max_len - pool->len) { + RANDerr(RAND_F_RAND_POOL_ADD_END, RAND_R_RANDOM_POOL_OVERFLOW); + return 0; + } + + if (len > 0) { + pool->len += len; + pool->entropy += entropy; + } + + return RAND_POOL_entropy_available(pool); +} + int RAND_set_rand_method(const RAND_METHOD *meth) { - if (!RUN_ONCE(&rand_lock_init, do_rand_lock_init)) + if (!RUN_ONCE(&rand_init, do_rand_init)) return 0; CRYPTO_THREAD_write_lock(rand_meth_lock); @@ -60,25 +718,26 @@ const RAND_METHOD *RAND_get_rand_method(void) { const RAND_METHOD *tmp_meth = NULL; - if (!RUN_ONCE(&rand_lock_init, do_rand_lock_init)) + if (!RUN_ONCE(&rand_init, do_rand_init)) return NULL; CRYPTO_THREAD_write_lock(rand_meth_lock); - if (!default_RAND_meth) { + if (default_RAND_meth == NULL) { #ifndef OPENSSL_NO_ENGINE - ENGINE *e = ENGINE_get_default_RAND(); - if (e) { - default_RAND_meth = ENGINE_get_RAND(e); - if (default_RAND_meth == NULL) { - ENGINE_finish(e); - e = NULL; - } - } - if (e) + ENGINE *e; + + /* If we have an engine that can do RAND, use it. */ + if ((e = ENGINE_get_default_RAND()) != NULL + && (tmp_meth = ENGINE_get_RAND(e)) != NULL) { funct_ref = e; - else + default_RAND_meth = tmp_meth; + } else { + ENGINE_finish(e); + default_RAND_meth = &rand_meth; + } +#else + default_RAND_meth = &rand_meth; #endif - default_RAND_meth = RAND_OpenSSL(); } tmp_meth = default_RAND_meth; CRYPTO_THREAD_unlock(rand_meth_lock); @@ -90,10 +749,10 @@ int RAND_set_rand_engine(ENGINE *engine) { const RAND_METHOD *tmp_meth = NULL; - if (!RUN_ONCE(&rand_lock_init, do_rand_lock_init)) + if (!RUN_ONCE(&rand_init, do_rand_init)) return 0; - if (engine) { + if (engine != NULL) { if (!ENGINE_init(engine)) return 0; tmp_meth = ENGINE_get_RAND(engine); @@ -111,54 +770,73 @@ int RAND_set_rand_engine(ENGINE *engine) } #endif -void rand_cleanup_int(void) -{ - const RAND_METHOD *meth = default_RAND_meth; - if (meth && meth->cleanup) - meth->cleanup(); - RAND_set_rand_method(NULL); - CRYPTO_THREAD_lock_free(rand_meth_lock); -#ifndef OPENSSL_NO_ENGINE - CRYPTO_THREAD_lock_free(rand_engine_lock); -#endif -} - void RAND_seed(const void *buf, int num) { const RAND_METHOD *meth = RAND_get_rand_method(); - if (meth && meth->seed) + + if (meth->seed != NULL) meth->seed(buf, num); } -void RAND_add(const void *buf, int num, double entropy) +void RAND_add(const void *buf, int num, double randomness) { const RAND_METHOD *meth = RAND_get_rand_method(); - if (meth && meth->add) - meth->add(buf, num, entropy); + + if (meth->add != NULL) + meth->add(buf, num, randomness); +} + +/* + * This function is not part of RAND_METHOD, so if we're not using + * the default method, then just call RAND_bytes(). Otherwise make + * sure we're instantiated and use the private DRBG. + */ +int RAND_priv_bytes(unsigned char *buf, int num) +{ + const RAND_METHOD *meth = RAND_get_rand_method(); + RAND_DRBG *drbg; + int ret; + + if (meth != RAND_OpenSSL()) + return RAND_bytes(buf, num); + + drbg = RAND_DRBG_get0_private(); + if (drbg == NULL) + return 0; + + /* We have to lock the DRBG before generating bits from it. */ + rand_drbg_lock(drbg); + ret = RAND_DRBG_bytes(drbg, buf, num); + rand_drbg_unlock(drbg); + return ret; } int RAND_bytes(unsigned char *buf, int num) { const RAND_METHOD *meth = RAND_get_rand_method(); - if (meth && meth->bytes) + + if (meth->bytes != NULL) return meth->bytes(buf, num); - return (-1); + RANDerr(RAND_F_RAND_BYTES, RAND_R_FUNC_NOT_IMPLEMENTED); + return -1; } #if OPENSSL_API_COMPAT < 0x10100000L int RAND_pseudo_bytes(unsigned char *buf, int num) { const RAND_METHOD *meth = RAND_get_rand_method(); - if (meth && meth->pseudorand) + + if (meth->pseudorand != NULL) return meth->pseudorand(buf, num); - return (-1); + return -1; } #endif int RAND_status(void) { const RAND_METHOD *meth = RAND_get_rand_method(); - if (meth && meth->status) + + if (meth->status != NULL) return meth->status(); return 0; } diff --git a/crypto/rand/rand_unix.c b/crypto/rand/rand_unix.c index 7a5a9484..74c82823 100644 --- a/crypto/rand/rand_unix.c +++ b/crypto/rand/rand_unix.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,91 +7,81 @@ * https://www.openssl.org/source/license.html */ -#include - -#define USE_SOCKETS #include "e_os.h" +#include #include "internal/cryptlib.h" #include #include "rand_lcl.h" +#include -#if !(defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)) +#if (defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI)) && \ + !defined(OPENSSL_RAND_SEED_NONE) +# error "UEFI and VXWorks only support seeding NONE" +#endif -# include -# include -# include -# include -# include -# include -# include -# if defined(OPENSSL_SYS_LINUX) /* should actually be available virtually - * everywhere */ -# include -# endif -# include -# ifndef FD_SETSIZE -# define FD_SETSIZE (8*sizeof(fd_set)) -# endif +#if !(defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) \ + || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VXWORKS) \ + || defined(OPENSSL_SYS_UEFI)) # if defined(OPENSSL_SYS_VOS) +# ifndef OPENSSL_RAND_SEED_OS +# error "Unsupported seeding method configured; must be os" +# endif + +# if defined(OPENSSL_SYS_VOS_HPPA) && defined(OPENSSL_SYS_VOS_IA32) +# error "Unsupported HP-PA and IA32 at the same time." +# endif +# if !defined(OPENSSL_SYS_VOS_HPPA) && !defined(OPENSSL_SYS_VOS_IA32) +# error "Must have one of HP-PA or IA32" +# endif + /* * The following algorithm repeatedly samples the real-time clock (RTC) to * generate a sequence of unpredictable data. The algorithm relies upon the * uneven execution speed of the code (due to factors such as cache misses, * interrupts, bus activity, and scheduling) and upon the rather large * relative difference between the speed of the clock and the rate at which - * it can be read. + * it can be read. If it is ported to an environment where execution speed + * is more constant or where the RTC ticks at a much slower rate, or the + * clock can be read with fewer instructions, it is likely that the results + * would be far more predictable. This should only be used for legacy + * platforms. * - * If this code is ported to an environment where execution speed is more - * constant or where the RTC ticks at a much slower rate, or the clock can be - * read with fewer instructions, it is likely that the results would be far - * more predictable. - * - * As a precaution, we generate 4 times the minimum required amount of seed - * data. + * As a precaution, we assume only 2 bits of entropy per byte. */ - -int RAND_poll(void) +size_t RAND_POOL_acquire_entropy(RAND_POOL *pool) { short int code; gid_t curr_gid; pid_t curr_pid; uid_t curr_uid; int i, k; + size_t bytes_needed; struct timespec ts; unsigned char v; - # ifdef OPENSSL_SYS_VOS_HPPA long duration; extern void s$sleep(long *_duration, short int *_code); # else -# ifdef OPENSSL_SYS_VOS_IA32 long long duration; extern void s$sleep2(long long *_duration, short int *_code); -# else -# error "Unsupported Platform." -# endif /* OPENSSL_SYS_VOS_IA32 */ -# endif /* OPENSSL_SYS_VOS_HPPA */ +# endif /* * Seed with the gid, pid, and uid, to ensure *some* variation between * different processes. */ - curr_gid = getgid(); - RAND_add(&curr_gid, sizeof(curr_gid), 1); - curr_gid = 0; - + RAND_POOL_add(pool, &curr_gid, sizeof(curr_gid), 0); curr_pid = getpid(); - RAND_add(&curr_pid, sizeof(curr_pid), 1); - curr_pid = 0; - + RAND_POOL_add(pool, &curr_pid, sizeof(curr_pid), 0); curr_uid = getuid(); - RAND_add(&curr_uid, sizeof(curr_uid), 1); - curr_uid = 0; + RAND_POOL_add(pool, &curr_uid, sizeof(curr_uid), 0); - for (i = 0; i < (ENTROPY_NEEDED * 4); i++) { + bytes_needed = RAND_POOL_bytes_needed(pool, 2 /*entropy_per_byte*/); + + for (i = 0; i < bytes_needed; i++) { /* * burn some cpu; hope for interrupts, cache collisions, bus * interference, etc. @@ -104,221 +94,163 @@ int RAND_poll(void) duration = 1; s$sleep(&duration, &code); # else -# ifdef OPENSSL_SYS_VOS_IA32 /* sleep for 1/65536 of a second (15 us). */ duration = 1; s$sleep2(&duration, &code); -# endif /* OPENSSL_SYS_VOS_IA32 */ -# endif /* OPENSSL_SYS_VOS_HPPA */ +# endif - /* get wall clock time. */ + /* Get wall clock time, take 8 bits. */ clock_gettime(CLOCK_REALTIME, &ts); - - /* take 8 bits */ - v = (unsigned char)(ts.tv_nsec % 256); - RAND_add(&v, sizeof(v), 1); - v = 0; + v = (unsigned char)(ts.tv_nsec & 0xFF); + RAND_POOL_add(pool, arg, &v, sizeof(v) , 2); } - return 1; + return RAND_POOL_entropy_available(pool); } -# elif defined __OpenBSD__ -int RAND_poll(void) -{ - u_int32_t rnd = 0, i; - unsigned char buf[ENTROPY_NEEDED]; - for (i = 0; i < sizeof(buf); i++) { - if (i % 4 == 0) - rnd = arc4random(); - buf[i] = rnd; - rnd >>= 8; +# else + +# if defined(OPENSSL_RAND_SEED_EGD) && \ + (defined(OPENSSL_NO_EGD) || !defined(DEVRANDOM_EGD)) +# error "Seeding uses EGD but EGD is turned off or no device given" +# endif + +# if defined(OPENSSL_RAND_SEED_DEVRANDOM) && !defined(DEVRANDOM) +# error "Seeding uses urandom but DEVRANDOM is not configured" +# endif + +# if defined(OPENSSL_RAND_SEED_OS) +# if !defined(DEVRANDOM) +# error "OS seeding requires DEVRANDOM to be configured" +# endif +# define OPENSSL_RAND_SEED_DEVRANDOM +# if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +# if __GLIBC_PREREQ(2, 25) +# define OPENSSL_RAND_SEED_GETRANDOM +# endif +# endif +# endif + +# ifdef OPENSSL_RAND_SEED_GETRANDOM +# include +# endif + +# if defined(OPENSSL_RAND_SEED_LIBRANDOM) +# error "librandom not (yet) supported" +# endif + +/* + * Try the various seeding methods in turn, exit when successful. + * + * TODO(DRBG): If more than one entropy source is available, is it + * preferable to stop as soon as enough entropy has been collected + * (as favored by @rsalz) or should one rather be defensive and add + * more entropy than requested and/or from different sources? + * + * Currently, the user can select multiple entropy sources in the + * configure step, yet in practice only the first available source + * will be used. A more flexible solution has been requested, but + * currently it is not clear how this can be achieved without + * overengineering the problem. There are many parameters which + * could be taken into account when selecting the order and amount + * of input from the different entropy sources (trust, quality, + * possibility of blocking). + */ +size_t RAND_POOL_acquire_entropy(RAND_POOL *pool) +{ +# ifdef OPENSSL_RAND_SEED_NONE + return RAND_POOL_entropy_available(pool); +# else + size_t bytes_needed; + size_t entropy_available = 0; + unsigned char *buffer; + +# ifdef OPENSSL_RAND_SEED_GETRANDOM + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + buffer = RAND_POOL_add_begin(pool, bytes_needed); + if (buffer != NULL) { + size_t bytes = 0; + + if (getrandom(buffer, bytes_needed, 0) == (int)bytes_needed) + bytes = bytes_needed; + + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); } - RAND_add(buf, sizeof(buf), ENTROPY_NEEDED); - OPENSSL_cleanse(buf, sizeof(buf)); - - return 1; -} -# else /* !defined(__OpenBSD__) */ -int RAND_poll(void) -{ - unsigned long l; - pid_t curr_pid = getpid(); -# if defined(DEVRANDOM) || (!defined(OPENSS_NO_EGD) && defined(DEVRANDOM_EGD)) - unsigned char tmpbuf[ENTROPY_NEEDED]; - int n = 0; -# endif -# ifdef DEVRANDOM - static const char *randomfiles[] = { DEVRANDOM }; - struct stat randomstats[OSSL_NELEM(randomfiles)]; - int fd; - unsigned int i; -# endif -# if !defined(OPENSSL_NO_EGD) && defined(DEVRANDOM_EGD) - static const char *egdsockets[] = { DEVRANDOM_EGD, NULL }; - const char **egdsocket = NULL; -# endif - -# ifdef DEVRANDOM - memset(randomstats, 0, sizeof(randomstats)); - /* - * Use a random entropy pool device. Linux, FreeBSD and OpenBSD have - * this. Use /dev/urandom if you can as /dev/random may block if it runs - * out of random entries. - */ - - for (i = 0; (i < OSSL_NELEM(randomfiles)) && (n < ENTROPY_NEEDED); i++) { - if ((fd = open(randomfiles[i], O_RDONLY -# ifdef O_NONBLOCK - | O_NONBLOCK + if (entropy_available > 0) + return entropy_available; # endif -# ifdef O_BINARY - | O_BINARY -# endif -# ifdef O_NOCTTY /* If it happens to be a TTY (god forbid), do - * not make it our controlling tty */ - | O_NOCTTY -# endif - )) >= 0) { - int usec = 10 * 1000; /* spend 10ms on each file */ - int r; - unsigned int j; - struct stat *st = &randomstats[i]; - /* - * Avoid using same input... Used to be O_NOFOLLOW above, but - * it's not universally appropriate... - */ - if (fstat(fd, st) != 0) { - close(fd); - continue; - } - for (j = 0; j < i; j++) { - if (randomstats[j].st_ino == st->st_ino && - randomstats[j].st_dev == st->st_dev) - break; - } - if (j < i) { - close(fd); +# if defined(OPENSSL_RAND_SEED_LIBRANDOM) + { + /* Not yet implemented. */ + } +# endif + +# ifdef OPENSSL_RAND_SEED_DEVRANDOM + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + if (bytes_needed > 0) { + static const char *paths[] = { DEVRANDOM, NULL }; + FILE *fp; + int i; + + for (i = 0; paths[i] != NULL; i++) { + if ((fp = fopen(paths[i], "rb")) == NULL) continue; + setbuf(fp, NULL); + buffer = RAND_POOL_add_begin(pool, bytes_needed); + if (buffer != NULL) { + size_t bytes = 0; + if (fread(buffer, 1, bytes_needed, fp) == bytes_needed) + bytes = bytes_needed; + + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); } + fclose(fp); + if (entropy_available > 0) + return entropy_available; - do { - int try_read = 0; - -# if defined(OPENSSL_SYS_LINUX) - /* use poll() */ - struct pollfd pset; - - pset.fd = fd; - pset.events = POLLIN; - pset.revents = 0; - - if (poll(&pset, 1, usec / 1000) < 0) - usec = 0; - else - try_read = (pset.revents & POLLIN) != 0; - -# else - /* use select() */ - fd_set fset; - struct timeval t; - - t.tv_sec = 0; - t.tv_usec = usec; - - if (FD_SETSIZE > 0 && (unsigned)fd >= FD_SETSIZE) { - /* - * can't use select, so just try to read once anyway - */ - try_read = 1; - } else { - FD_ZERO(&fset); - FD_SET(fd, &fset); - - if (select(fd + 1, &fset, NULL, NULL, &t) >= 0) { - usec = t.tv_usec; - if (FD_ISSET(fd, &fset)) - try_read = 1; - } else - usec = 0; - } -# endif - - if (try_read) { - r = read(fd, (unsigned char *)tmpbuf + n, - ENTROPY_NEEDED - n); - if (r > 0) - n += r; - } else - r = -1; - - /* - * Some Unixen will update t in select(), some won't. For - * those who won't, or if we didn't use select() in the first - * place, give up here, otherwise, we will do this once again - * for the remaining time. - */ - if (usec == 10 * 1000) - usec = 0; - } - while ((r > 0 || - (errno == EINTR || errno == EAGAIN)) && usec != 0 - && n < ENTROPY_NEEDED); - - close(fd); + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); } } -# endif /* defined(DEVRANDOM) */ +# endif -# if !defined(OPENSSL_NO_EGD) && defined(DEVRANDOM_EGD) - /* - * Use an EGD socket to read entropy from an EGD or PRNGD entropy - * collecting daemon. - */ +# ifdef OPENSSL_RAND_SEED_RDTSC + entropy_available = rand_acquire_entropy_from_tsc(pool); + if (entropy_available > 0) + return entropy_available; +# endif - for (egdsocket = egdsockets; *egdsocket && n < ENTROPY_NEEDED; - egdsocket++) { - int r; +# ifdef OPENSSL_RAND_SEED_RDCPU + entropy_available = rand_acquire_entropy_from_cpu(pool); + if (entropy_available > 0) + return entropy_available; +# endif - r = RAND_query_egd_bytes(*egdsocket, (unsigned char *)tmpbuf + n, - ENTROPY_NEEDED - n); - if (r > 0) - n += r; +# ifdef OPENSSL_RAND_SEED_EGD + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + if (bytes_needed > 0) { + static const char *paths[] = { DEVRANDOM_EGD, NULL }; + int i; + + for (i = 0; paths[i] != NULL; i++) { + buffer = RAND_POOL_add_begin(pool, bytes_needed); + if (buffer != NULL) { + size_t bytes = 0; + int num = RAND_query_egd_bytes(paths[i], + buffer, (int)bytes_needed); + if (num == (int)bytes_needed) + bytes = bytes_needed; + + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); + } + if (entropy_available > 0) + return entropy_available; + } } -# endif /* defined(DEVRANDOM_EGD) */ +# endif -# if defined(DEVRANDOM) || (!defined(OPENSSL_NO_EGD) && defined(DEVRANDOM_EGD)) - if (n > 0) { - RAND_add(tmpbuf, sizeof(tmpbuf), (double)n); - OPENSSL_cleanse(tmpbuf, n); - } -# endif - - /* put in some default random data, we need more than just this */ - l = curr_pid; - RAND_add(&l, sizeof(l), 0.0); - l = getuid(); - RAND_add(&l, sizeof(l), 0.0); - - l = time(NULL); - RAND_add(&l, sizeof(l), 0.0); - -# if defined(DEVRANDOM) || (!defined(OPENSSL_NO_EGD) && defined(DEVRANDOM_EGD)) - return 1; -# else - return 0; + return RAND_POOL_entropy_available(pool); # endif } +# endif -# endif /* defined(__OpenBSD__) */ -#endif /* !(defined(OPENSSL_SYS_WINDOWS) || - * defined(OPENSSL_SYS_WIN32) || - * defined(OPENSSL_SYS_VMS) || - * defined(OPENSSL_SYS_VXWORKS) */ - -#if defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) -int RAND_poll(void) -{ - return 0; -} #endif diff --git a/crypto/rand/rand_vms.c b/crypto/rand/rand_vms.c index 9c462dd3..4ec4b35b 100644 --- a/crypto/rand/rand_vms.c +++ b/crypto/rand/rand_vms.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,16 +7,11 @@ * https://www.openssl.org/source/license.html */ -/* - * Modified by VMS Software, Inc (2016) - * Eliminate looping through all processes (performance) - * Add additional randomizations using rand() function - */ - -#include -#include "rand_lcl.h" +#include "e_os.h" #if defined(OPENSSL_SYS_VMS) +# include +# include "rand_lcl.h" # include # include # include @@ -26,6 +21,10 @@ # pragma message disable DOLLARID # endif +# ifndef OPENSSL_RAND_SEED_OS +# error "Unsupported seeding method configured; must be os" +# endif + /* * Use 32-bit pointers almost everywhere. Define the type to which to cast a * pointer passed to an external function. @@ -34,9 +33,9 @@ # define PTR_T __void_ptr64 # pragma pointer_size save # pragma pointer_size 32 -# else /* __INITIAL_POINTER_SIZE == 64 */ +# else # define PTR_T void * -# endif /* __INITIAL_POINTER_SIZE == 64 [else] */ +# endif static struct items_data_st { short length, code; /* length is number of bytes */ @@ -52,27 +51,22 @@ static struct items_data_st { {4, JPI$_PPGCNT}, {4, JPI$_WSPEAK}, {4, JPI$_FINALEXC}, - {0, 0} /* zero terminated */ + {0, 0} }; -int RAND_poll(void) +size_t RAND_POOL_acquire_entropy(RAND_POOL *pool) { - /* determine the number of items in the JPI array */ - struct items_data_st item_entry; - int item_entry_count = sizeof(items_data)/sizeof(item_entry); - + int item_entry_count = OSSL_NELEM(items_data); /* Create the JPI itemlist array to hold item_data content */ - struct { short length, code; int *buffer; int *retlen; - } item[item_entry_count], *pitem; /* number of entries in items_data */ - + } item[item_entry_count], *pitem; struct items_data_st *pitems_data; - int data_buffer[(item_entry_count*2)+4]; /* 8 bytes per entry max */ + int data_buffer[(item_entry_count * 2) + 4]; /* 8 bytes per entry max */ int iosb[2]; int sys_time[2]; int *ptr; @@ -80,54 +74,52 @@ int RAND_poll(void) int tmp_length = 0; int total_length = 0; - pitems_data = items_data; - pitem = item; - - /* Setup itemlist for GETJPI */ - while (pitems_data->length) { + pitems_data = items_data; + for (pitem = item; pitems_data->length != 0; pitem++) { pitem->length = pitems_data->length; pitem->code = pitems_data->code; pitem->buffer = &data_buffer[total_length]; pitem->retlen = 0; /* total_length is in longwords */ - total_length += pitems_data->length/4; + total_length += pitems_data->length / 4; pitems_data++; - pitem ++; } pitem->length = pitem->code = 0; /* Fill data_buffer with various info bits from this process */ - /* and twist that data to seed the SSL random number init */ - - if (sys$getjpiw(EFN$C_ENF, NULL, NULL, item, &iosb, 0, 0) == SS$_NORMAL) { - for (i = 0; i < total_length; i++) { - sys$gettim((struct _generic_64 *)&sys_time[0]); - srand(sys_time[0] * data_buffer[0] * data_buffer[1] + i); - - if (i == (total_length - 1)) { /* for JPI$_FINALEXC */ - ptr = &data_buffer[i]; - for (j = 0; j < 4; j++) { - data_buffer[i + j] = ptr[j]; - /* OK to use rand() just to scramble the seed */ - data_buffer[i + j] ^= (sys_time[0] ^ rand()); - tmp_length++; - } - } else { - /* OK to use rand() just to scramble the seed */ - data_buffer[i] ^= (sys_time[0] ^ rand()); - } - } - - total_length += (tmp_length - 1); - - /* size of seed is total_length*4 bytes (64bytes) */ - RAND_add((PTR_T) data_buffer, total_length*4, total_length * 2); - } else { + if (sys$getjpiw(EFN$C_ENF, NULL, NULL, item, &iosb, 0, 0) != SS$_NORMAL) return 0; + + /* Now twist that data to seed the SSL random number init */ + for (i = 0; i < total_length; i++) { + sys$gettim((struct _generic_64 *)&sys_time[0]); + srand(sys_time[0] * data_buffer[0] * data_buffer[1] + i); + + if (i == (total_length - 1)) { /* for JPI$_FINALEXC */ + ptr = &data_buffer[i]; + for (j = 0; j < 4; j++) { + data_buffer[i + j] = ptr[j]; + /* OK to use rand() just to scramble the seed */ + data_buffer[i + j] ^= (sys_time[0] ^ rand()); + tmp_length++; + } + } else { + /* OK to use rand() just to scramble the seed */ + data_buffer[i] ^= (sys_time[0] ^ rand()); + } } - return 1; + total_length += (tmp_length - 1); + + /* + * Size of seed is total_length*4 bytes (64bytes). The original assumption + * was that it contains 4 bits of entropy per byte. This makes a total + * amount of total_length*16 bits (256bits). + */ + return RAND_POOL_add(pool, + (PTR_T)data_buffer, total_length * 4, + total_length * 16); } #endif diff --git a/crypto/rand/rand_win.c b/crypto/rand/rand_win.c index 1be0ed3c..9eff319b 100644 --- a/crypto/rand/rand_win.c +++ b/crypto/rand/rand_win.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,15 +10,19 @@ #include "internal/cryptlib.h" #include #include "rand_lcl.h" - #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) -# include -/* On Windows 7 or higher use BCrypt instead of the legacy CryptoAPI */ -# if defined(_MSC_VER) && defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0601 -# define RAND_WINDOWS_USE_BCRYPT + +# ifndef OPENSSL_RAND_SEED_OS +# error "Unsupported seeding method configured; must be os" # endif -# ifdef RAND_WINDOWS_USE_BCRYPT +# include +/* On Windows 7 or higher use BCrypt instead of the legacy CryptoAPI */ +# if defined(_MSC_VER) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0601 +# define USE_BCRYPTGENRANDOM +# endif + +# ifdef USE_BCRYPTGENRANDOM # include # pragma comment(lib, "bcrypt.lib") # ifndef STATUS_SUCCESS @@ -34,55 +38,83 @@ # define INTEL_DEF_PROV L"Intel Hardware Cryptographic Service Provider" # endif -static void readtimer(void); - -int RAND_poll(void) +size_t RAND_POOL_acquire_entropy(RAND_POOL *pool) { - MEMORYSTATUS mst; -# ifndef RAND_WINDOWS_USE_BCRYPT +# ifndef USE_BCRYPTGENRANDOM HCRYPTPROV hProvider; # endif - DWORD w; - BYTE buf[64]; + unsigned char *buffer; + size_t bytes_needed; + size_t entropy_available = 0; -# ifdef RAND_WINDOWS_USE_BCRYPT - if (BCryptGenRandom(NULL, buf, (ULONG)sizeof(buf), BCRYPT_USE_SYSTEM_PREFERRED_RNG) == STATUS_SUCCESS) { - RAND_add(buf, sizeof(buf), sizeof(buf)); - } -# else - /* poll the CryptoAPI PRNG */ - /* The CryptoAPI returns sizeof(buf) bytes of randomness */ - if (CryptAcquireContextW(&hProvider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { - if (CryptGenRandom(hProvider, (DWORD)sizeof(buf), buf) != 0) { - RAND_add(buf, sizeof(buf), sizeof(buf)); - } - CryptReleaseContext(hProvider, 0); - } - /* poll the Pentium PRG with CryptoAPI */ - if (CryptAcquireContextW(&hProvider, NULL, INTEL_DEF_PROV, PROV_INTEL_SEC, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { - if (CryptGenRandom(hProvider, (DWORD)sizeof(buf), buf) != 0) { - RAND_add(buf, sizeof(buf), sizeof(buf)); - } - CryptReleaseContext(hProvider, 0); - } +# ifdef OPENSSL_RAND_SEED_RDTSC + entropy_available = rand_acquire_entropy_from_tsc(pool); + if (entropy_available > 0) + return entropy_available; # endif - /* timer data */ - readtimer(); +# ifdef OPENSSL_RAND_SEED_RDCPU + entropy_available = rand_acquire_entropy_from_cpu(pool); + if (entropy_available > 0) + return entropy_available; +# endif - /* memory usage statistics */ - GlobalMemoryStatus(&mst); - RAND_add(&mst, sizeof(mst), 1); +# ifdef USE_BCRYPTGENRANDOM + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + buffer = RAND_POOL_add_begin(pool, bytes_needed); + if (buffer != NULL) { + size_t bytes = 0; + if (BCryptGenRandom(NULL, buffer, bytes_needed, + BCRYPT_USE_SYSTEM_PREFERRED_RNG) == STATUS_SUCCESS) + bytes = bytes_needed; - /* process ID */ - w = GetCurrentProcessId(); - RAND_add(&w, sizeof(w), 1); + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); + } + if (entropy_available > 0) + return entropy_available; +# else + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + buffer = RAND_POOL_add_begin(pool, bytes_needed); + if (buffer != NULL) { + size_t bytes = 0; + /* poll the CryptoAPI PRNG */ + if (CryptAcquireContextW(&hProvider, NULL, NULL, PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT | CRYPT_SILENT) != 0) { + if (CryptGenRandom(hProvider, bytes_needed, buffer) != 0) + bytes = bytes_needed; - return (1); + CryptReleaseContext(hProvider, 0); + } + + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); + } + if (entropy_available > 0) + return entropy_available; + + bytes_needed = RAND_POOL_bytes_needed(pool, 8 /*entropy_per_byte*/); + buffer = RAND_POOL_add_begin(pool, bytes_needed); + if (buffer != NULL) { + size_t bytes = 0; + /* poll the Pentium PRG with CryptoAPI */ + if (CryptAcquireContextW(&hProvider, NULL, + INTEL_DEF_PROV, PROV_INTEL_SEC, + CRYPT_VERIFYCONTEXT | CRYPT_SILENT) != 0) { + if (CryptGenRandom(hProvider, bytes_needed, buffer) != 0) + bytes = bytes_needed; + + CryptReleaseContext(hProvider, 0); + } + entropy_available = RAND_POOL_add_end(pool, bytes, 8 * bytes); + } + if (entropy_available > 0) + return entropy_available; +# endif + + return RAND_POOL_entropy_available(pool); } -#if OPENSSL_API_COMPAT < 0x10100000L +# if OPENSSL_API_COMPAT < 0x10100000L int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam) { RAND_poll(); @@ -93,43 +125,6 @@ void RAND_screen(void) { RAND_poll(); } -#endif - -/* feed timing information to the PRNG */ -static void readtimer(void) -{ - DWORD w; - LARGE_INTEGER l; - static int have_perfc = 1; -# if defined(_MSC_VER) && defined(_M_X86) - static int have_tsc = 1; - DWORD cyclecount; - - if (have_tsc) { - __try { - __asm { - _emit 0x0f _emit 0x31 mov cyclecount, eax} - RAND_add(&cyclecount, sizeof(cyclecount), 1); - } - __except(EXCEPTION_EXECUTE_HANDLER) { - have_tsc = 0; - } - } -# else -# define have_tsc 0 # endif - if (have_perfc) { - if (QueryPerformanceCounter(&l) == 0) - have_perfc = 0; - else - RAND_add(&l, sizeof(l), 0); - } - - if (!have_tsc && !have_perfc) { - w = GetTickCount(); - RAND_add(&w, sizeof(w), 0); - } -} - #endif diff --git a/crypto/rand/randfile.c b/crypto/rand/randfile.c index dbd03ff2..d4edc50b 100644 --- a/crypto/rand/randfile.c +++ b/crypto/rand/randfile.c @@ -25,6 +25,11 @@ #ifndef OPENSSL_NO_POSIX_IO # include # include +# ifdef _WIN32 +# include +# endif +#endif + /* * Following should not be needed, and we could have been stricter * and demand S_IS*. But some systems just don't comply... Formally @@ -32,184 +37,106 @@ * would look like ((m) & MASK == TYPE), but since MASK availability * is as questionable, we settle for this poor-man fallback... */ -# if !defined(S_ISBLK) -# if defined(_S_IFBLK) -# define S_ISBLK(m) ((m) & _S_IFBLK) -# elif defined(S_IFBLK) -# define S_ISBLK(m) ((m) & S_IFBLK) -# elif defined(_WIN32) -# define S_ISBLK(m) 0 /* no concept of block devices on Windows */ -# endif +# if !defined(S_ISREG) +# define S_ISREG(m) ((m) & S_IFREG) # endif -# if !defined(S_ISCHR) -# if defined(_S_IFCHR) -# define S_ISCHR(m) ((m) & _S_IFCHR) -# elif defined(S_IFCHR) -# define S_ISCHR(m) ((m) & S_IFCHR) -# endif -# endif -#endif #ifdef _WIN32 # define stat _stat # define chmod _chmod # define open _open # define fdopen _fdopen -# define fstat _fstat -# define fileno _fileno #endif -#undef BUFSIZE -#define BUFSIZE 1024 -#define RAND_DATA 1024 +#define RAND_FILE_SIZE 1024 +#define RFILE ".rnd" #ifdef OPENSSL_SYS_VMS /* - * Misc hacks needed for specific cases. - * * __FILE_ptr32 is a type provided by DEC C headers (types.h specifically) * to make sure the FILE* is a 32-bit pointer no matter what. We know that - * stdio function return this type (a study of stdio.h proves it). - * Additionally, we create a similar char pointer type for the sake of - * vms_setbuf below. - */ -# if __INITIAL_POINTER_SIZE == 64 -# pragma pointer_size save -# pragma pointer_size 32 -typedef char *char_ptr32; -# pragma pointer_size restore -/* - * On VMS, setbuf() will only take 32-bit pointers, and a compilation - * with /POINTER_SIZE=64 will give off a MAYLOSEDATA2 warning here. - * Since we know that the FILE* really is a 32-bit pointer expanded to - * 64 bits, we also know it's safe to convert it back to a 32-bit pointer. - * As for the buffer parameter, we only use NULL here, so that passes as - * well... - */ -# define setbuf(fp,buf) (setbuf)((__FILE_ptr32)(fp), (char_ptr32)(buf)) -# endif - -/* + * stdio functions return this type (a study of stdio.h proves it). + * * This declaration is a nasty hack to get around vms' extension to fopen for * passing in sharing options being disabled by /STANDARD=ANSI89 */ static __FILE_ptr32 (*const vms_fopen)(const char *, const char *, ...) = - (__FILE_ptr32 (*)(const char *, const char *, ...))fopen; -# define VMS_OPEN_ATTRS "shr=get,put,upd,del","ctx=bin,stm","rfm=stm","rat=none","mrs=0" - -# define openssl_fopen(fname,mode) vms_fopen((fname), (mode), VMS_OPEN_ATTRS) + (__FILE_ptr32 (*)(const char *, const char *, ...))fopen; +# define VMS_OPEN_ATTRS \ + "shr=get,put,upd,del","ctx=bin,stm","rfm=stm","rat=none","mrs=0" +# define openssl_fopen(fname, mode) vms_fopen((fname), (mode), VMS_OPEN_ATTRS) #endif -#define RFILE ".rnd" - /* * Note that these functions are intended for seed files only. Entropy - * devices and EGD sockets are handled in rand_unix.c + * devices and EGD sockets are handled in rand_unix.c If |bytes| is + * -1 read the complete file; otherwise read the specified amount. */ - int RAND_load_file(const char *file, long bytes) { - /*- - * If bytes >= 0, read up to 'bytes' bytes. - * if bytes == -1, read complete file. - */ - - unsigned char buf[BUFSIZE]; + unsigned char buf[RAND_FILE_SIZE]; #ifndef OPENSSL_NO_POSIX_IO struct stat sb; #endif - int i, ret = 0, n; - FILE *in = NULL; - - if (file == NULL) - return 0; + int i, n, ret = 0; + FILE *in; if (bytes == 0) - return ret; - - in = openssl_fopen(file, "rb"); - if (in == NULL) - goto err; + return 0; #ifndef OPENSSL_NO_POSIX_IO - /* - * struct stat can have padding and unused fields that may not be - * initialized in the call to stat(). We need to clear the entire - * structure before calling RAND_add() to avoid complaints from - * applications such as Valgrind. - */ - memset(&sb, 0, sizeof(sb)); - if (fstat(fileno(in), &sb) < 0) - goto err; - RAND_add(&sb, sizeof(sb), 0.0); - -# if defined(S_ISBLK) && defined(S_ISCHR) - if (S_ISBLK(sb.st_mode) || S_ISCHR(sb.st_mode)) { - /* - * this file is a device. we don't want read an infinite number of - * bytes from a random device, nor do we want to use buffered I/O - * because we will waste system entropy. - */ - bytes = (bytes == -1) ? 2048 : bytes; /* ok, is 2048 enough? */ - setbuf(in, NULL); /* don't do buffered reads */ + if (stat(file, &sb) < 0 || !S_ISREG(sb.st_mode)) { + RANDerr(RAND_F_RAND_LOAD_FILE, RAND_R_NOT_A_REGULAR_FILE); + ERR_add_error_data(2, "Filename=", file); + return -1; } -# endif #endif - for (;;) { + if ((in = openssl_fopen(file, "rb")) == NULL) { + RANDerr(RAND_F_RAND_LOAD_FILE, RAND_R_CANNOT_OPEN_FILE); + ERR_add_error_data(2, "Filename=", file); + return -1; + } + + for ( ; ; ) { if (bytes > 0) - n = (bytes < BUFSIZE) ? (int)bytes : BUFSIZE; + n = (bytes < RAND_FILE_SIZE) ? (int)bytes : RAND_FILE_SIZE; else - n = BUFSIZE; + n = RAND_FILE_SIZE; i = fread(buf, 1, n, in); if (i <= 0) break; - RAND_add(buf, i, (double)i); ret += i; - if (bytes > 0) { - bytes -= n; - if (bytes <= 0) - break; - } + + /* If given a bytecount, and we did it, break. */ + if (bytes > 0 && (bytes -= i) <= 0) + break; } - OPENSSL_cleanse(buf, BUFSIZE); - err: - if (in != NULL) - fclose(in); + + OPENSSL_cleanse(buf, sizeof(buf)); + fclose(in); return ret; } int RAND_write_file(const char *file) { - unsigned char buf[BUFSIZE]; - int i, ret = 0, rand_err = 0; + unsigned char buf[RAND_FILE_SIZE]; + int ret = -1; FILE *out = NULL; - int n; #ifndef OPENSSL_NO_POSIX_IO struct stat sb; -# if defined(S_ISBLK) && defined(S_ISCHR) -# ifdef _WIN32 - /* - * Check for |file| being a driver as "ASCII-safe" on Windows, - * because driver paths are always ASCII. - */ -# endif - i = stat(file, &sb); - if (i != -1) { - if (S_ISBLK(sb.st_mode) || S_ISCHR(sb.st_mode)) { - /* - * this file is a device. we don't write back to it. we - * "succeed" on the assumption this is some sort of random - * device. Otherwise attempting to write to and chmod the device - * causes problems. - */ - return 1; - } + if (stat(file, &sb) >= 0 && !S_ISREG(sb.st_mode)) { + RANDerr(RAND_F_RAND_WRITE_FILE, RAND_R_NOT_A_REGULAR_FILE); + ERR_add_error_data(2, "Filename=", file); + return -1; } -# endif #endif + /* Collect enough random data. */ + if (RAND_bytes(buf, (int)sizeof(buf)) != 1) + return -1; + #if defined(O_CREAT) && !defined(OPENSSL_NO_POSIX_IO) && \ !defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS) { @@ -244,69 +171,57 @@ int RAND_write_file(const char *file) * application level. Also consider whether or not you NEED a persistent * rand file in a concurrent use situation. */ - out = openssl_fopen(file, "rb+"); #endif + if (out == NULL) out = openssl_fopen(file, "wb"); - if (out == NULL) - goto err; - -#if !defined(NO_CHMOD) && !defined(OPENSSL_NO_POSIX_IO) - chmod(file, 0600); -#endif - n = RAND_DATA; - for (;;) { - i = (n > BUFSIZE) ? BUFSIZE : n; - n -= BUFSIZE; - if (RAND_bytes(buf, i) <= 0) - rand_err = 1; - i = fwrite(buf, 1, i, out); - if (i <= 0) { - ret = 0; - break; - } - ret += i; - if (n <= 0) - break; + if (out == NULL) { + RANDerr(RAND_F_RAND_WRITE_FILE, RAND_R_CANNOT_OPEN_FILE); + ERR_add_error_data(2, "Filename=", file); + return -1; } +#if !defined(NO_CHMOD) && !defined(OPENSSL_NO_POSIX_IO) + /* + * Yes it's late to do this (see above comment), but better than nothing. + */ + chmod(file, 0600); +#endif + + ret = fwrite(buf, 1, RAND_FILE_SIZE, out); fclose(out); - OPENSSL_cleanse(buf, BUFSIZE); - err: - return (rand_err ? -1 : ret); + OPENSSL_cleanse(buf, RAND_FILE_SIZE); + return ret; } const char *RAND_file_name(char *buf, size_t size) { char *s = NULL; + size_t len; int use_randfile = 1; -#ifdef __OpenBSD__ - struct stat sb; -#endif #if defined(_WIN32) && defined(CP_UTF8) - DWORD len; - WCHAR *var, *val; + DWORD envlen; + WCHAR *var; - if ((var = L"RANDFILE", - len = GetEnvironmentVariableW(var, NULL, 0)) == 0 - && (var = L"HOME", use_randfile = 0, - len = GetEnvironmentVariableW(var, NULL, 0)) == 0 - && (var = L"USERPROFILE", - len = GetEnvironmentVariableW(var, NULL, 0)) == 0) { - var = L"SYSTEMROOT", - len = GetEnvironmentVariableW(var, NULL, 0); + /* Look up various environment variables. */ + if ((envlen = GetEnvironmentVariableW(var = L"RANDFILE", NULL, 0)) == 0) { + use_randfile = 0; + if ((envlen = GetEnvironmentVariableW(var = L"HOME", NULL, 0)) == 0 + && (envlen = GetEnvironmentVariableW(var = L"USERPROFILE", + NULL, 0)) == 0) + envlen = GetEnvironmentVariableW(var = L"SYSTEMROOT", NULL, 0); } - if (len != 0) { + /* If we got a value, allocate space to hold it and then get it. */ + if (envlen != 0) { int sz; + WCHAR *val = _alloca(envlen * sizeof(WCHAR)); - val = _alloca(len * sizeof(WCHAR)); - - if (GetEnvironmentVariableW(var, val, len) < len - && (sz = WideCharToMultiByte(CP_UTF8, 0, val, -1, NULL, 0, - NULL, NULL)) != 0) { + if (GetEnvironmentVariableW(var, val, envlen) < envlen + && (sz = WideCharToMultiByte(CP_UTF8, 0, val, -1, NULL, 0, + NULL, NULL)) != 0) { s = _alloca(sz); if (WideCharToMultiByte(CP_UTF8, 0, val, -1, s, sz, NULL, NULL) == 0) @@ -316,49 +231,33 @@ const char *RAND_file_name(char *buf, size_t size) #else if (OPENSSL_issetugid() != 0) { use_randfile = 0; - } else { - s = getenv("RANDFILE"); - if (s == NULL || *s == '\0') { - use_randfile = 0; - s = getenv("HOME"); - } + } else if ((s = getenv("RANDFILE")) == NULL || *s == '\0') { + use_randfile = 0; + s = getenv("HOME"); } #endif + #ifdef DEFAULT_HOME - if (!use_randfile && s == NULL) { + if (!use_randfile && s == NULL) s = DEFAULT_HOME; - } #endif - if (s != NULL && *s) { - size_t len = strlen(s); + if (s == NULL || *s == '\0') + return NULL; - if (use_randfile && len + 1 < size) { - if (OPENSSL_strlcpy(buf, s, size) >= size) - return NULL; - } else if (len + strlen(RFILE) + 2 < size) { - OPENSSL_strlcpy(buf, s, size); -#ifndef OPENSSL_SYS_VMS - OPENSSL_strlcat(buf, "/", size); -#endif - OPENSSL_strlcat(buf, RFILE, size); - } - } else { - buf[0] = '\0'; /* no file name */ - } - -#ifdef __OpenBSD__ - /* - * given that all random loads just fail if the file can't be seen on a - * stat, we stat the file we're returning, if it fails, use /dev/arandom - * instead. this allows the user to use their own source for good random - * data, but defaults to something hopefully decent if that isn't - * available. - */ - - if (!buf[0] || stat(buf, &sb) == -1) - if (OPENSSL_strlcpy(buf, "/dev/arandom", size) >= size) { + len = strlen(s); + if (use_randfile) { + if (len + 1 >= size) return NULL; - } + strcpy(buf, s); + } else { + if (len + 1 + strlen(RFILE) + 1 >= size) + return NULL; + strcpy(buf, s); +#ifndef OPENSSL_SYS_VMS + strcat(buf, "/"); #endif - return buf[0] ? buf : NULL; + strcat(buf, RFILE); + } + + return buf; } diff --git a/crypto/rc2/rc2_ecb.c b/crypto/rc2/rc2_ecb.c index b87931f2..fb2f7827 100644 --- a/crypto/rc2/rc2_ecb.c +++ b/crypto/rc2/rc2_ecb.c @@ -14,7 +14,6 @@ /*- * RC2 as implemented frm a posting from * Newsgroups: sci.crypt - * Sender: pgut01@cs.auckland.ac.nz (Peter Gutmann) * Subject: Specification for Ron Rivests Cipher No.2 * Message-ID: <4fk39f$f70@net.auckland.ac.nz> * Date: 11 Feb 1996 06:45:03 GMT diff --git a/crypto/rc2/tab.c b/crypto/rc2/tab.c deleted file mode 100644 index bc95dc40..00000000 --- a/crypto/rc2/tab.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 1998-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 - -unsigned char ebits_to_num[256] = { - 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, - 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, - 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, - 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, - 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, - 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, - 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, - 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, - 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, - 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, - 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, - 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, - 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, - 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, - 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, - 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, - 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, - 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, - 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, - 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, - 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, - 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, - 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, - 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, - 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, - 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, - 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, - 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, - 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, - 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, - 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, - 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab, -}; - -unsigned char num_to_ebits[256] = { - 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, - 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, - 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, - 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, - 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, - 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, - 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, - 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, - 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, - 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, - 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, - 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, - 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, - 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, - 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, - 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, - 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, - 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, - 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, - 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, - 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, - 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, - 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, - 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, - 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, - 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, - 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, - 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, - 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, - 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, - 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, - 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd, -}; - -main() -{ - int i, j; - - for (i = 0; i < 256; i++) { - for (j = 0; j < 256; j++) - if (ebits_to_num[j] == i) { - printf("0x%02x,", j); - break; - } - } -} diff --git a/crypto/rc4/asm/rc4-586.pl b/crypto/rc4/asm/rc4-586.pl index 7d6f97c5..8c5cf87d 100644 --- a/crypto/rc4/asm/rc4-586.pl +++ b/crypto/rc4/asm/rc4-586.pl @@ -8,7 +8,7 @@ # ==================================================================== -# [Re]written by Andy Polyakov for the OpenSSL +# [Re]written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -32,8 +32,6 @@ # performance on the same Opteron machine. # (**) This number requires compressed key schedule set up by # RC4_set_key [see commentary below for further details]. -# -# # May 2011 # @@ -73,7 +71,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"rc4-586.pl",$x86only = $ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$x86only = $ARGV[$#ARGV] eq "386"); $xx="eax"; $yy="ebx"; @@ -136,7 +134,7 @@ if ($alt=0) { push (@XX,shift(@XX)) if ($i>=0); } } else { - # Using pinsrw here improves performane on Intel CPUs by 2-3%, but + # Using pinsrw here improves performance on Intel CPUs by 2-3%, but # brings down AMD by 7%... $RC4_loop_mmx = sub { my $i=shift; diff --git a/crypto/rc4/asm/rc4-c64xplus.pl b/crypto/rc4/asm/rc4-c64xplus.pl index 184922c1..9f282fe4 100644 --- a/crypto/rc4/asm/rc4-c64xplus.pl +++ b/crypto/rc4/asm/rc4-c64xplus.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved. +# 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 @@ -89,7 +89,7 @@ _RC4: || NOP 5 STB $XX,*${KEYA}[-2] ; key->x || SUB4 $YY,$TX,$YY -|| BNOP B3 +|| BNOP B3 STB $YY,*${KEYB}[-1] ; key->y || NOP 5 .endasmfunc @@ -186,7 +186,5 @@ rc4_options: .align 4 ___ -$output=pop; -open STDOUT,">$output"; print $code; close STDOUT; diff --git a/crypto/rc4/asm/rc4-ia64.pl b/crypto/rc4/asm/rc4-ia64.pl deleted file mode 100644 index 5e8f5f55..00000000 --- a/crypto/rc4/asm/rc4-ia64.pl +++ /dev/null @@ -1,767 +0,0 @@ -#! /usr/bin/env perl -# 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 - -# -# ==================================================================== -# Written by David Mosberger based on the -# Itanium optimized Crypto code which was released by HP Labs at -# http://www.hpl.hp.com/research/linux/crypto/. -# -# Copyright (c) 2005 Hewlett-Packard Development Company, L.P. -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - - -# This is a little helper program which generates a software-pipelined -# for RC4 encryption. The basic algorithm looks like this: -# -# for (counter = 0; counter < len; ++counter) -# { -# in = inp[counter]; -# SI = S[I]; -# J = (SI + J) & 0xff; -# SJ = S[J]; -# T = (SI + SJ) & 0xff; -# S[I] = SJ, S[J] = SI; -# ST = S[T]; -# outp[counter] = in ^ ST; -# I = (I + 1) & 0xff; -# } -# -# Pipelining this loop isn't easy, because the stores to the S[] array -# need to be observed in the right order. The loop generated by the -# code below has the following pipeline diagram: -# -# cycle -# | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |11 |12 |13 |14 |15 |16 |17 | -# iter -# 1: xxx LDI xxx xxx xxx LDJ xxx SWP xxx LDT xxx xxx -# 2: xxx LDI xxx xxx xxx LDJ xxx SWP xxx LDT xxx xxx -# 3: xxx LDI xxx xxx xxx LDJ xxx SWP xxx LDT xxx xxx -# -# where: -# LDI = load of S[I] -# LDJ = load of S[J] -# SWP = swap of S[I] and S[J] -# LDT = load of S[T] -# -# Note that in the above diagram, the major trouble-spot is that LDI -# of the 2nd iteration is performed BEFORE the SWP of the first -# iteration. Fortunately, this is easy to detect (I of the 1st -# iteration will be equal to J of the 2nd iteration) and when this -# happens, we simply forward the proper value from the 1st iteration -# to the 2nd one. The proper value in this case is simply the value -# of S[I] from the first iteration (thanks to the fact that SWP -# simply swaps the contents of S[I] and S[J]). -# -# Another potential trouble-spot is in cycle 7, where SWP of the 1st -# iteration issues at the same time as the LDI of the 3rd iteration. -# However, thanks to IA-64 execution semantics, this can be taken -# care of simply by placing LDI later in the instruction-group than -# SWP. IA-64 CPUs will automatically forward the value if they -# detect that the SWP and LDI are accessing the same memory-location. - -# The core-loop that can be pipelined then looks like this (annotated -# with McKinley/Madison issue port & latency numbers, assuming L1 -# cache hits for the most part): - -# operation: instruction: issue-ports: latency -# ------------------ ----------------------------- ------------- ------- - -# Data = *inp++ ld1 data = [inp], 1 M0-M1 1 cyc c0 -# shladd Iptr = I, KeyTable, 3 M0-M3, I0, I1 1 cyc -# I = (I + 1) & 0xff padd1 nextI = I, one M0-M3, I0, I1 3 cyc -# ;; -# SI = S[I] ld8 SI = [Iptr] M0-M1 1 cyc c1 * after SWAP! -# ;; -# cmp.eq.unc pBypass = I, J * after J is valid! -# J = SI + J add J = J, SI M0-M3, I0, I1 1 cyc c2 -# (pBypass) br.cond.spnt Bypass -# ;; -# --------------------------------------------------------------------------------------- -# J = J & 0xff zxt1 J = J I0, I1, 1 cyc c3 -# ;; -# shladd Jptr = J, KeyTable, 3 M0-M3, I0, I1 1 cyc c4 -# ;; -# SJ = S[J] ld8 SJ = [Jptr] M0-M1 1 cyc c5 -# ;; -# --------------------------------------------------------------------------------------- -# T = (SI + SJ) add T = SI, SJ M0-M3, I0, I1 1 cyc c6 -# ;; -# T = T & 0xff zxt1 T = T I0, I1 1 cyc -# S[I] = SJ st8 [Iptr] = SJ M2-M3 c7 -# S[J] = SI st8 [Jptr] = SI M2-M3 -# ;; -# shladd Tptr = T, KeyTable, 3 M0-M3, I0, I1 1 cyc c8 -# ;; -# --------------------------------------------------------------------------------------- -# T = S[T] ld8 T = [Tptr] M0-M1 1 cyc c9 -# ;; -# data ^= T xor data = data, T M0-M3, I0, I1 1 cyc c10 -# ;; -# *out++ = Data ^ T dep word = word, data, 8, POS I0, I1 1 cyc c11 -# ;; -# --------------------------------------------------------------------------------------- - -# There are several points worth making here: - -# - Note that due to the bypass/forwarding-path, the first two -# phases of the loop are strangly mingled together. In -# particular, note that the first stage of the pipeline is -# using the value of "J", as calculated by the second stage. -# - Each bundle-pair will have exactly 6 instructions. -# - Pipelined, the loop can execute in 3 cycles/iteration and -# 4 stages. However, McKinley/Madison can issue "st1" to -# the same bank at a rate of at most one per 4 cycles. Thus, -# instead of storing each byte, we accumulate them in a word -# and then write them back at once with a single "st8" (this -# implies that the setup code needs to ensure that the output -# buffer is properly aligned, if need be, by encoding the -# first few bytes separately). -# - There is no space for a "br.ctop" instruction. For this -# reason we can't use module-loop support in IA-64 and have -# to do a traditional, purely software-pipelined loop. -# - We can't replace any of the remaining "add/zxt1" pairs with -# "padd1" because the latency for that instruction is too high -# and would push the loop to the point where more bypasses -# would be needed, which we don't have space for. -# - The above loop runs at around 3.26 cycles/byte, or roughly -# 440 MByte/sec on a 1.5GHz Madison. This is well below the -# system bus bandwidth and hence with judicious use of -# "lfetch" this loop can run at (almost) peak speed even when -# the input and output data reside in memory. The -# max. latency that can be tolerated is (PREFETCH_DISTANCE * -# L2_LINE_SIZE * 3 cyc), or about 384 cycles assuming (at -# least) 1-ahead prefetching of 128 byte cache-lines. Note -# that we do NOT prefetch into L1, since that would only -# interfere with the S[] table values stored there. This is -# acceptable because there is a 10 cycle latency between -# load and first use of the input data. -# - We use a branch to out-of-line bypass-code of cycle-pressure: -# we calculate the next J, check for the need to activate the -# bypass path, and activate the bypass path ALL IN THE SAME -# CYCLE. If we didn't have these constraints, we could do -# the bypass with a simple conditional move instruction. -# Fortunately, the bypass paths get activated relatively -# infrequently, so the extra branches don't cost all that much -# (about 0.04 cycles/byte, measured on a 16396 byte file with -# random input data). -# - -$output = pop; -open STDOUT,">$output"; - -$phases = 4; # number of stages/phases in the pipelined-loop -$unroll_count = 6; # number of times we unrolled it -$pComI = (1 << 0); -$pComJ = (1 << 1); -$pComT = (1 << 2); -$pOut = (1 << 3); - -$NData = 4; -$NIP = 3; -$NJP = 2; -$NI = 2; -$NSI = 3; -$NSJ = 2; -$NT = 2; -$NOutWord = 2; - -# -# $threshold is the minimum length before we attempt to use the -# big software-pipelined loop. It MUST be greater-or-equal -# to: -# PHASES * (UNROLL_COUNT + 1) + 7 -# -# The "+ 7" comes from the fact we may have to encode up to -# 7 bytes separately before the output pointer is aligned. -# -$threshold = (3 * ($phases * ($unroll_count + 1)) + 7); - -sub I { - local *code = shift; - local $format = shift; - $code .= sprintf ("\t\t".$format."\n", @_); -} - -sub P { - local *code = shift; - local $format = shift; - $code .= sprintf ($format."\n", @_); -} - -sub STOP { - local *code = shift; - $code .=<<___; - ;; -___ -} - -sub emit_body { - local *c = shift; - local *bypass = shift; - local ($iteration, $p) = @_; - - local $i0 = $iteration; - local $i1 = $iteration - 1; - local $i2 = $iteration - 2; - local $i3 = $iteration - 3; - local $iw0 = ($iteration - 3) / 8; - local $iw1 = ($iteration > 3) ? ($iteration - 4) / 8 : 1; - local $byte_num = ($iteration - 3) % 8; - local $label = $iteration + 1; - local $pAny = ($p & 0xf) == 0xf; - local $pByp = (($p & $pComI) && ($iteration > 0)); - - $c.=<<___; -////////////////////////////////////////////////// -___ - - if (($p & 0xf) == 0) { - $c.="#ifdef HOST_IS_BIG_ENDIAN\n"; - &I(\$c,"shr.u OutWord[%u] = OutWord[%u], 32;;", - $iw1 % $NOutWord, $iw1 % $NOutWord); - $c.="#endif\n"; - &I(\$c, "st4 [OutPtr] = OutWord[%u], 4", $iw1 % $NOutWord); - return; - } - - # Cycle 0 - &I(\$c, "{ .mmi") if ($pAny); - &I(\$c, "ld1 Data[%u] = [InPtr], 1", $i0 % $NData) if ($p & $pComI); - &I(\$c, "padd1 I[%u] = One, I[%u]", $i0 % $NI, $i1 % $NI)if ($p & $pComI); - &I(\$c, "zxt1 J = J") if ($p & $pComJ); - &I(\$c, "}") if ($pAny); - &I(\$c, "{ .mmi") if ($pAny); - &I(\$c, "LKEY T[%u] = [T[%u]]", $i1 % $NT, $i1 % $NT) if ($p & $pOut); - &I(\$c, "add T[%u] = SI[%u], SJ[%u]", - $i0 % $NT, $i2 % $NSI, $i1 % $NSJ) if ($p & $pComT); - &I(\$c, "KEYADDR(IPr[%u], I[%u])", $i0 % $NIP, $i1 % $NI) if ($p & $pComI); - &I(\$c, "}") if ($pAny); - &STOP(\$c); - - # Cycle 1 - &I(\$c, "{ .mmi") if ($pAny); - &I(\$c, "SKEY [IPr[%u]] = SJ[%u]", $i2 % $NIP, $i1%$NSJ)if ($p & $pComT); - &I(\$c, "SKEY [JP[%u]] = SI[%u]", $i1 % $NJP, $i2%$NSI) if ($p & $pComT); - &I(\$c, "zxt1 T[%u] = T[%u]", $i0 % $NT, $i0 % $NT) if ($p & $pComT); - &I(\$c, "}") if ($pAny); - &I(\$c, "{ .mmi") if ($pAny); - &I(\$c, "LKEY SI[%u] = [IPr[%u]]", $i0 % $NSI, $i0%$NIP)if ($p & $pComI); - &I(\$c, "KEYADDR(JP[%u], J)", $i0 % $NJP) if ($p & $pComJ); - &I(\$c, "xor Data[%u] = Data[%u], T[%u]", - $i3 % $NData, $i3 % $NData, $i1 % $NT) if ($p & $pOut); - &I(\$c, "}") if ($pAny); - &STOP(\$c); - - # Cycle 2 - &I(\$c, "{ .mmi") if ($pAny); - &I(\$c, "LKEY SJ[%u] = [JP[%u]]", $i0 % $NSJ, $i0%$NJP) if ($p & $pComJ); - &I(\$c, "cmp.eq pBypass, p0 = I[%u], J", $i1 % $NI) if ($pByp); - &I(\$c, "dep OutWord[%u] = Data[%u], OutWord[%u], BYTE_POS(%u), 8", - $iw0%$NOutWord, $i3%$NData, $iw1%$NOutWord, $byte_num) if ($p & $pOut); - &I(\$c, "}") if ($pAny); - &I(\$c, "{ .mmb") if ($pAny); - &I(\$c, "add J = J, SI[%u]", $i0 % $NSI) if ($p & $pComI); - &I(\$c, "KEYADDR(T[%u], T[%u])", $i0 % $NT, $i0 % $NT) if ($p & $pComT); - &P(\$c, "(pBypass)\tbr.cond.spnt.many .rc4Bypass%u",$label)if ($pByp); - &I(\$c, "}") if ($pAny); - &STOP(\$c); - - &P(\$c, ".rc4Resume%u:", $label) if ($pByp); - if ($byte_num == 0 && $iteration >= $phases) { - &I(\$c, "st8 [OutPtr] = OutWord[%u], 8", - $iw1 % $NOutWord) if ($p & $pOut); - if ($iteration == (1 + $unroll_count) * $phases - 1) { - if ($unroll_count == 6) { - &I(\$c, "mov OutWord[%u] = OutWord[%u]", - $iw1 % $NOutWord, $iw0 % $NOutWord); - } - &I(\$c, "lfetch.nt1 [InPrefetch], %u", - $unroll_count * $phases); - &I(\$c, "lfetch.excl.nt1 [OutPrefetch], %u", - $unroll_count * $phases); - &I(\$c, "br.cloop.sptk.few .rc4Loop"); - } - } - - if ($pByp) { - &P(\$bypass, ".rc4Bypass%u:", $label); - &I(\$bypass, "sub J = J, SI[%u]", $i0 % $NSI); - &I(\$bypass, "nop 0"); - &I(\$bypass, "nop 0"); - &I(\$bypass, ";;"); - &I(\$bypass, "add J = J, SI[%u]", $i1 % $NSI); - &I(\$bypass, "mov SI[%u] = SI[%u]", $i0 % $NSI, $i1 % $NSI); - &I(\$bypass, "br.sptk.many .rc4Resume%u\n", $label); - &I(\$bypass, ";;"); - } -} - -$code=<<___; -.ident \"rc4-ia64.s, version 3.0\" -.ident \"Copyright (c) 2005 Hewlett-Packard Development Company, L.P.\" - -#define LCSave r8 -#define PRSave r9 - -/* Inputs become invalid once rotation begins! */ - -#define StateTable in0 -#define DataLen in1 -#define InputBuffer in2 -#define OutputBuffer in3 - -#define KTable r14 -#define J r15 -#define InPtr r16 -#define OutPtr r17 -#define InPrefetch r18 -#define OutPrefetch r19 -#define One r20 -#define LoopCount r21 -#define Remainder r22 -#define IFinal r23 -#define EndPtr r24 - -#define tmp0 r25 -#define tmp1 r26 - -#define pBypass p6 -#define pDone p7 -#define pSmall p8 -#define pAligned p9 -#define pUnaligned p10 - -#define pComputeI pPhase[0] -#define pComputeJ pPhase[1] -#define pComputeT pPhase[2] -#define pOutput pPhase[3] - -#define RetVal r8 -#define L_OK p7 -#define L_NOK p8 - -#define _NINPUTS 4 -#define _NOUTPUT 0 - -#define _NROTATE 24 -#define _NLOCALS (_NROTATE - _NINPUTS - _NOUTPUT) - -#ifndef SZ -# define SZ 4 // this must be set to sizeof(RC4_INT) -#endif - -#if SZ == 1 -# define LKEY ld1 -# define SKEY st1 -# define KEYADDR(dst, i) add dst = i, KTable -#elif SZ == 2 -# define LKEY ld2 -# define SKEY st2 -# define KEYADDR(dst, i) shladd dst = i, 1, KTable -#elif SZ == 4 -# define LKEY ld4 -# define SKEY st4 -# define KEYADDR(dst, i) shladd dst = i, 2, KTable -#else -# define LKEY ld8 -# define SKEY st8 -# define KEYADDR(dst, i) shladd dst = i, 3, KTable -#endif - -#if defined(_HPUX_SOURCE) && !defined(_LP64) -# define ADDP addp4 -#else -# define ADDP add -#endif - -/* Define a macro for the bit number of the n-th byte: */ - -#if defined(_HPUX_SOURCE) || defined(B_ENDIAN) -# define HOST_IS_BIG_ENDIAN -# define BYTE_POS(n) (56 - (8 * (n))) -#else -# define BYTE_POS(n) (8 * (n)) -#endif - -/* - We must perform the first phase of the pipeline explicitly since - we will always load from the stable the first time. The br.cexit - will never be taken since regardless of the number of bytes because - the epilogue count is 4. -*/ -/* MODSCHED_RC4 macro was split to _PROLOGUE and _LOOP, because HP-UX - assembler failed on original macro with syntax error. */ -#define MODSCHED_RC4_PROLOGUE \\ - { \\ - ld1 Data[0] = [InPtr], 1; \\ - add IFinal = 1, I[1]; \\ - KEYADDR(IPr[0], I[1]); \\ - } ;; \\ - { \\ - LKEY SI[0] = [IPr[0]]; \\ - mov pr.rot = 0x10000; \\ - mov ar.ec = 4; \\ - } ;; \\ - { \\ - add J = J, SI[0]; \\ - zxt1 I[0] = IFinal; \\ - br.cexit.spnt.few .+16; /* never taken */ \\ - } ;; -#define MODSCHED_RC4_LOOP(label) \\ -label: \\ - { .mmi; \\ - (pComputeI) ld1 Data[0] = [InPtr], 1; \\ - (pComputeI) add IFinal = 1, I[1]; \\ - (pComputeJ) zxt1 J = J; \\ - }{ .mmi; \\ - (pOutput) LKEY T[1] = [T[1]]; \\ - (pComputeT) add T[0] = SI[2], SJ[1]; \\ - (pComputeI) KEYADDR(IPr[0], I[1]); \\ - } ;; \\ - { .mmi; \\ - (pComputeT) SKEY [IPr[2]] = SJ[1]; \\ - (pComputeT) SKEY [JP[1]] = SI[2]; \\ - (pComputeT) zxt1 T[0] = T[0]; \\ - }{ .mmi; \\ - (pComputeI) LKEY SI[0] = [IPr[0]]; \\ - (pComputeJ) KEYADDR(JP[0], J); \\ - (pComputeI) cmp.eq.unc pBypass, p0 = I[1], J; \\ - } ;; \\ - { .mmi; \\ - (pComputeJ) LKEY SJ[0] = [JP[0]]; \\ - (pOutput) xor Data[3] = Data[3], T[1]; \\ - nop 0x0; \\ - }{ .mmi; \\ - (pComputeT) KEYADDR(T[0], T[0]); \\ - (pBypass) mov SI[0] = SI[1]; \\ - (pComputeI) zxt1 I[0] = IFinal; \\ - } ;; \\ - { .mmb; \\ - (pOutput) st1 [OutPtr] = Data[3], 1; \\ - (pComputeI) add J = J, SI[0]; \\ - br.ctop.sptk.few label; \\ - } ;; - - .text - - .align 32 - - .type RC4, \@function - .global RC4 - - .proc RC4 - .prologue - -RC4: - { - .mmi - alloc r2 = ar.pfs, _NINPUTS, _NLOCALS, _NOUTPUT, _NROTATE - - .rotr Data[4], I[2], IPr[3], SI[3], JP[2], SJ[2], T[2], \\ - OutWord[2] - .rotp pPhase[4] - - ADDP InPrefetch = 0, InputBuffer - ADDP KTable = 0, StateTable - } - { - .mmi - ADDP InPtr = 0, InputBuffer - ADDP OutPtr = 0, OutputBuffer - mov RetVal = r0 - } - ;; - { - .mmi - lfetch.nt1 [InPrefetch], 0x80 - ADDP OutPrefetch = 0, OutputBuffer - } - { // Return 0 if the input length is nonsensical - .mib - ADDP StateTable = 0, StateTable - cmp.ge.unc L_NOK, L_OK = r0, DataLen - (L_NOK) br.ret.sptk.few rp - } - ;; - { - .mib - cmp.eq.or L_NOK, L_OK = r0, InPtr - cmp.eq.or L_NOK, L_OK = r0, OutPtr - nop 0x0 - } - { - .mib - cmp.eq.or L_NOK, L_OK = r0, StateTable - nop 0x0 - (L_NOK) br.ret.sptk.few rp - } - ;; - LKEY I[1] = [KTable], SZ -/* Prefetch the state-table. It contains 256 elements of size SZ */ - -#if SZ == 1 - ADDP tmp0 = 1*128, StateTable -#elif SZ == 2 - ADDP tmp0 = 3*128, StateTable - ADDP tmp1 = 2*128, StateTable -#elif SZ == 4 - ADDP tmp0 = 7*128, StateTable - ADDP tmp1 = 6*128, StateTable -#elif SZ == 8 - ADDP tmp0 = 15*128, StateTable - ADDP tmp1 = 14*128, StateTable -#endif - ;; -#if SZ >= 8 - lfetch.fault.nt1 [tmp0], -256 // 15 - lfetch.fault.nt1 [tmp1], -256;; - lfetch.fault.nt1 [tmp0], -256 // 13 - lfetch.fault.nt1 [tmp1], -256;; - lfetch.fault.nt1 [tmp0], -256 // 11 - lfetch.fault.nt1 [tmp1], -256;; - lfetch.fault.nt1 [tmp0], -256 // 9 - lfetch.fault.nt1 [tmp1], -256;; -#endif -#if SZ >= 4 - lfetch.fault.nt1 [tmp0], -256 // 7 - lfetch.fault.nt1 [tmp1], -256;; - lfetch.fault.nt1 [tmp0], -256 // 5 - lfetch.fault.nt1 [tmp1], -256;; -#endif -#if SZ >= 2 - lfetch.fault.nt1 [tmp0], -256 // 3 - lfetch.fault.nt1 [tmp1], -256;; -#endif - { - .mii - lfetch.fault.nt1 [tmp0] // 1 - add I[1]=1,I[1];; - zxt1 I[1]=I[1] - } - { - .mmi - lfetch.nt1 [InPrefetch], 0x80 - lfetch.excl.nt1 [OutPrefetch], 0x80 - .save pr, PRSave - mov PRSave = pr - } ;; - { - .mmi - lfetch.excl.nt1 [OutPrefetch], 0x80 - LKEY J = [KTable], SZ - ADDP EndPtr = DataLen, InPtr - } ;; - { - .mmi - ADDP EndPtr = -1, EndPtr // Make it point to - // last data byte. - mov One = 1 - .save ar.lc, LCSave - mov LCSave = ar.lc - .body - } ;; - { - .mmb - sub Remainder = 0, OutPtr - cmp.gtu pSmall, p0 = $threshold, DataLen -(pSmall) br.cond.dpnt .rc4Remainder // Data too small for - // big loop. - } ;; - { - .mmi - and Remainder = 0x7, Remainder - ;; - cmp.eq pAligned, pUnaligned = Remainder, r0 - nop 0x0 - } ;; - { - .mmb -.pred.rel "mutex",pUnaligned,pAligned -(pUnaligned) add Remainder = -1, Remainder -(pAligned) sub Remainder = EndPtr, InPtr -(pAligned) br.cond.dptk.many .rc4Aligned - } ;; - { - .mmi - nop 0x0 - nop 0x0 - mov.i ar.lc = Remainder - } - -/* Do the initial few bytes via the compact, modulo-scheduled loop - until the output pointer is 8-byte-aligned. */ - - MODSCHED_RC4_PROLOGUE - MODSCHED_RC4_LOOP(.RC4AlignLoop) - - { - .mib - sub Remainder = EndPtr, InPtr - zxt1 IFinal = IFinal - clrrrb // Clear CFM.rrb.pr so - ;; // next "mov pr.rot = N" - // does the right thing. - } - { - .mmi - mov I[1] = IFinal - nop 0x0 - nop 0x0 - } ;; - - -.rc4Aligned: - -/* - Unrolled loop count = (Remainder - ($unroll_count+1)*$phases)/($unroll_count*$phases) - */ - - { - .mlx - add LoopCount = 1 - ($unroll_count + 1)*$phases, Remainder - movl Remainder = 0xaaaaaaaaaaaaaaab - } ;; - { - .mmi - setf.sig f6 = LoopCount // M2, M3 6 cyc - setf.sig f7 = Remainder // M2, M3 6 cyc - nop 0x0 - } ;; - { - .mfb - nop 0x0 - xmpy.hu f6 = f6, f7 - nop 0x0 - } ;; - { - .mmi - getf.sig LoopCount = f6;; // M2 5 cyc - nop 0x0 - shr.u LoopCount = LoopCount, 4 - } ;; - { - .mmi - nop 0x0 - nop 0x0 - mov.i ar.lc = LoopCount - } ;; - -/* Now comes the unrolled loop: */ - -.rc4Prologue: -___ - -$iteration = 0; - -# Generate the prologue: -$predicates = 1; -for ($i = 0; $i < $phases; ++$i) { - &emit_body (\$code, \$bypass, $iteration++, $predicates); - $predicates = ($predicates << 1) | 1; -} - -$code.=<<___; -.rc4Loop: -___ - -# Generate the body: -for ($i = 0; $i < $unroll_count*$phases; ++$i) { - &emit_body (\$code, \$bypass, $iteration++, $predicates); -} - -$code.=<<___; -.rc4Epilogue: -___ - -# Generate the epilogue: -for ($i = 0; $i < $phases; ++$i) { - $predicates <<= 1; - &emit_body (\$code, \$bypass, $iteration++, $predicates); -} - -$code.=<<___; - { - .mmi - lfetch.nt1 [EndPtr] // fetch line with last byte - mov IFinal = I[1] - nop 0x0 - } - -.rc4Remainder: - { - .mmi - sub Remainder = EndPtr, InPtr // Calculate - // # of bytes - // left - 1 - nop 0x0 - nop 0x0 - } ;; - { - .mib - cmp.eq pDone, p0 = -1, Remainder // done already? - mov.i ar.lc = Remainder -(pDone) br.cond.dptk.few .rc4Complete - } - -/* Do the remaining bytes via the compact, modulo-scheduled loop */ - - MODSCHED_RC4_PROLOGUE - MODSCHED_RC4_LOOP(.RC4RestLoop) - -.rc4Complete: - { - .mmi - add KTable = -SZ, KTable - add IFinal = -1, IFinal - mov ar.lc = LCSave - } ;; - { - .mii - SKEY [KTable] = J,-SZ - zxt1 IFinal = IFinal - mov pr = PRSave, 0x1FFFF - } ;; - { - .mib - SKEY [KTable] = IFinal - add RetVal = 1, r0 - br.ret.sptk.few rp - } ;; -___ - -# Last but not least, emit the code for the bypass-code of the unrolled loop: - -$code.=$bypass; - -$code.=<<___; - .endp RC4 -___ - -print $code; - -close STDOUT; diff --git a/crypto/rc4/asm/rc4-md5-x86_64.pl b/crypto/rc4/asm/rc4-md5-x86_64.pl index 890161ba..74e51910 100644 --- a/crypto/rc4/asm/rc4-md5-x86_64.pl +++ b/crypto/rc4/asm/rc4-md5-x86_64.pl @@ -51,7 +51,7 @@ my ($rc4,$md5)=(1,1); # what to generate? my $D="#" if (!$md5); # if set to "#", MD5 is stitched into RC4(), # but its result is discarded. Idea here is # to be able to use 'openssl speed rc4' for - # benchmarking the stitched subroutine... + # benchmarking the stitched subroutine... my $flavour = shift; my $output = shift; @@ -124,15 +124,23 @@ $code.=<<___; .globl $func .type $func,\@function,$nargs $func: +.cfi_startproc cmp \$0,$len je .Labort push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 sub \$40,%rsp +.cfi_adjust_cfa_offset 40 .Lbody: ___ if ($rc4) { @@ -419,7 +427,7 @@ $code.=<<___ if ($rc4 && (!$md5 || $D)); and \$63,$len # remaining bytes jnz .Loop1 jmp .Ldone - + .align 16 .Loop1: add $TX[0]#b,$YY#b @@ -444,15 +452,23 @@ $code.=<<___; #rc4# movl $YY#d,-4($dat) mov 40(%rsp),%r15 +.cfi_restore %r15 mov 48(%rsp),%r14 +.cfi_restore %r14 mov 56(%rsp),%r13 +.cfi_restore %r13 mov 64(%rsp),%r12 +.cfi_restore %r12 mov 72(%rsp),%rbp +.cfi_restore %rbp mov 80(%rsp),%rbx +.cfi_restore %rbx lea 88(%rsp),%rsp +.cfi_adjust_cfa_offset -88 .Lepilogue: .Labort: ret +.cfi_endproc .size $func,.-$func ___ diff --git a/crypto/rc4/asm/rc4-parisc.pl b/crypto/rc4/asm/rc4-parisc.pl index 006b6b01..229c6c7d 100644 --- a/crypto/rc4/asm/rc4-parisc.pl +++ b/crypto/rc4/asm/rc4-parisc.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -98,7 +98,7 @@ sub unrolledloopbody { for ($i=0;$i<4;$i++) { $code.=<<___; ldo 1($XX[0]),$XX[1] - `sprintf("$LDX %$TY(%$key),%$dat1") if ($i>0)` + `sprintf("$LDX %$TY(%$key),%$dat1") if ($i>0)` and $mask,$XX[1],$XX[1] $LDX $YY($key),$TY $MKX $YY,$key,$ix @@ -166,7 +166,7 @@ RC4 ldo `2*$SZ`($key),$key ldi 0xff,$mask - ldi 3,$dat0 + ldi 3,$dat0 ldo 1($XX[0]),$XX[0] ; warm up loop and $mask,$XX[0],$XX[0] diff --git a/crypto/rc4/asm/rc4-s390x.pl b/crypto/rc4/asm/rc4-s390x.pl index 5589503a..469f110f 100644 --- a/crypto/rc4/asm/rc4-s390x.pl +++ b/crypto/rc4/asm/rc4-s390x.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/rc4/asm/rc4-x86_64.pl b/crypto/rc4/asm/rc4-x86_64.pl index aaed2b1e..1a9cc47d 100755 --- a/crypto/rc4/asm/rc4-x86_64.pl +++ b/crypto/rc4/asm/rc4-x86_64.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -48,7 +48,7 @@ # April 2005 # -# P4 EM64T core appears to be "allergic" to 64-bit inc/dec. Replacing +# P4 EM64T core appears to be "allergic" to 64-bit inc/dec. Replacing # those with add/sub results in 50% performance improvement of folded # loop... @@ -88,7 +88,7 @@ # The only code path that was not modified is P4-specific one. Non-P4 # Intel code path optimization is heavily based on submission by Maxim # Perminov, Maxim Locktyukhin and Jim Guilford of Intel. I've used -# some of the ideas even in attempt to optmize the original RC4_INT +# some of the ideas even in attempt to optimize the original RC4_INT # code path... Current performance in cycles per processed byte (less # is better) and improvement coefficients relative to previous # version of this module are: @@ -142,9 +142,13 @@ RC4: or $len,$len jne .Lentry ret .Lentry: +.cfi_startproc push %rbx +.cfi_push %rbx push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 .Lprologue: mov $len,%r11 mov $inp,%r12 @@ -427,11 +431,16 @@ $code.=<<___; movl $YY#d,-4($dat) mov (%rsp),%r13 +.cfi_restore %r13 mov 8(%rsp),%r12 +.cfi_restore %r12 mov 16(%rsp),%rbx +.cfi_restore %rbx add \$24,%rsp +.cfi_adjust_cfa_offset -24 .Lepilogue: ret +.cfi_endproc .size RC4,.-RC4 ___ } diff --git a/crypto/rc4/build.info b/crypto/rc4/build.info index 8659526d..46ee66b6 100644 --- a/crypto/rc4/build.info +++ b/crypto/rc4/build.info @@ -2,7 +2,8 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ {- $target{rc4_asm_src} -} -GENERATE[rc4-586.s]=asm/rc4-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[rc4-586.s]=asm/rc4-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[rc4-586.s]=../perlasm/x86asm.pl GENERATE[rc4-x86_64.s]=asm/rc4-x86_64.pl $(PERLASM_SCHEME) @@ -10,23 +11,7 @@ GENERATE[rc4-md5-x86_64.s]=asm/rc4-md5-x86_64.pl $(PERLASM_SCHEME) GENERATE[rc4-parisc.s]=asm/rc4-parisc.pl $(PERLASM_SCHEME) -BEGINRAW[makefile(windows)] -{- $builddir -}\rc4-ia64.asm: {- $sourcedir -}\asm\rc4-ia64.pl - $(PERL) {- $sourcedir -}\asm\rc4-ia64.pl $@.S - $(CC) -DSZ=4 -EP $@.S > $@.i && move /Y $@.i $@ - del /Q $@.S -ENDRAW[makefile(windows)] - BEGINRAW[Makefile] -{- $builddir -}/rc4-ia64.s: {- $sourcedir -}/asm/rc4-ia64.pl - @(trap "rm $@.*" INT 0; \ - $(PERL) {- $sourcedir -}/asm/rc4-ia64.pl $(CFLAGS) $(LIB_CFLAGS) $@.S; \ - case `awk '/^#define RC4_INT/{print$$NF}' $(BLDDIR)/include/openssl/opensslconf.h` in \ - int) set -x; $(CC) $(CFLAGS) $(LIB_CFLAGS) -DSZ=4 -E $@.S > $@.i && mv -f $@.i $@;; \ - char) set -x; $(CC) $(CFLAGS) $(LIB_CFLAGS) -DSZ=1 -E $@.S > $@.i && mv -f $@.i $@;; \ - *) exit 1 ;; \ - esac ) - # GNU make "catch all" {- $builddir -}/rc4-%.s: {- $sourcedir -}/asm/rc4-%.pl CC="$(CC)" $(PERL) $< $(PERLASM_SCHEME) $@ diff --git a/crypto/rc4/rc4_enc.c b/crypto/rc4/rc4_enc.c index be11bade..638a75bb 100644 --- a/crypto/rc4/rc4_enc.c +++ b/crypto/rc4/rc4_enc.c @@ -13,7 +13,6 @@ /*- * RC4 as implemented from a posting from * Newsgroups: sci.crypt - * From: sterndark@netcom.com (David Sterndark) * Subject: RC4 Algorithm revealed. * Message-ID: * Date: Wed, 14 Sep 1994 06:35:31 GMT diff --git a/crypto/rc4/rc4_skey.c b/crypto/rc4/rc4_skey.c index 16f81a4d..e9007331 100644 --- a/crypto/rc4/rc4_skey.c +++ b/crypto/rc4/rc4_skey.c @@ -14,15 +14,14 @@ const char *RC4_options(void) { if (sizeof(RC4_INT) == 1) - return ("rc4(char)"); + return "rc4(char)"; else - return ("rc4(int)"); + return "rc4(int)"; } /*- * RC4 as implemented from a posting from * Newsgroups: sci.crypt - * From: sterndark@netcom.com (David Sterndark) * Subject: RC4 Algorithm revealed. * Message-ID: * Date: Wed, 14 Sep 1994 06:35:31 GMT diff --git a/crypto/rc5/asm/rc5-586.pl b/crypto/rc5/asm/rc5-586.pl index e3e1c642..e58a98bc 100644 --- a/crypto/rc5/asm/rc5-586.pl +++ b/crypto/rc5/asm/rc5-586.pl @@ -15,7 +15,7 @@ require "cbc.pl"; $output = pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"rc5-586.pl"); +&asm_init($ARGV[0]); $RC5_MAX_ROUNDS=16; $RC5_32_OFF=($RC5_MAX_ROUNDS+2)*4; diff --git a/crypto/rc5/build.info b/crypto/rc5/build.info index baf8a0ef..928a62cd 100644 --- a/crypto/rc5/build.info +++ b/crypto/rc5/build.info @@ -2,5 +2,6 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ rc5_skey.c rc5_ecb.c {- $target{rc5_asm_src} -} rc5cfb64.c rc5ofb64.c -GENERATE[rc5-586.s]=asm/rc5-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) +GENERATE[rc5-586.s]=asm/rc5-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) DEPEND[rc5-586.s]=../perlasm/x86asm.pl ../perlasm/cbc.pl diff --git a/crypto/ripemd/asm/rmd-586.pl b/crypto/ripemd/asm/rmd-586.pl index 544c496f..84aa7ced 100644 --- a/crypto/ripemd/asm/rmd-586.pl +++ b/crypto/ripemd/asm/rmd-586.pl @@ -19,7 +19,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],$0); +&asm_init($ARGV[0]); $A="ecx"; $B="esi"; @@ -34,7 +34,7 @@ $KL2=0x6ED9EBA1; $KL3=0x8F1BBCDC; $KL4=0xA953FD4E; $KR0=0x50A28BE6; -$KR1=0x5C4DD124; +$KR1=0x5C4DD124; $KR2=0x6D703EF3; $KR3=0x7A6D76E9; @@ -339,7 +339,6 @@ sub ripemd160_block # aligned. The good news are that gcc-2.95 # and later does keep first argument at # least double-wise aligned. - # &set_label("start") unless $normal; &comment(""); @@ -543,28 +542,28 @@ sub ripemd160_block # &mov($tmp2, &wparam(0)); # Moved into last round &mov($tmp1, &DWP( 4,$tmp2,"",0)); # ctx->B - &add($D, $tmp1); + &add($D, $tmp1); &mov($tmp1, &swtmp(16+2)); # $c &add($D, $tmp1); &mov($tmp1, &DWP( 8,$tmp2,"",0)); # ctx->C - &add($E, $tmp1); + &add($E, $tmp1); &mov($tmp1, &swtmp(16+3)); # $d &add($E, $tmp1); &mov($tmp1, &DWP(12,$tmp2,"",0)); # ctx->D - &add($A, $tmp1); + &add($A, $tmp1); &mov($tmp1, &swtmp(16+4)); # $e &add($A, $tmp1); &mov($tmp1, &DWP(16,$tmp2,"",0)); # ctx->E - &add($B, $tmp1); + &add($B, $tmp1); &mov($tmp1, &swtmp(16+0)); # $a &add($B, $tmp1); &mov($tmp1, &DWP( 0,$tmp2,"",0)); # ctx->A - &add($C, $tmp1); + &add($C, $tmp1); &mov($tmp1, &swtmp(16+1)); # $b &add($C, $tmp1); diff --git a/crypto/ripemd/build.info b/crypto/ripemd/build.info index c45050cb..a4a894e2 100644 --- a/crypto/ripemd/build.info +++ b/crypto/ripemd/build.info @@ -2,5 +2,6 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ rmd_dgst.c rmd_one.c {- $target{rmd160_asm_src} -} -GENERATE[rmd-586.s]=asm/rmd-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) +GENERATE[rmd-586.s]=asm/rmd-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) DEPEND[rmd-586.s]=../perlasm/x86asm.pl diff --git a/crypto/ripemd/rmd_locl.h b/crypto/ripemd/rmd_locl.h index 9c5ba151..f1ae4323 100644 --- a/crypto/ripemd/rmd_locl.h +++ b/crypto/ripemd/rmd_locl.h @@ -15,7 +15,6 @@ /* * DO EXAMINE COMMENTS IN crypto/md5/md5_locl.h & crypto/md5/md5_dgst.c * FOR EXPLANATIONS ON FOLLOWING "CODE." - * */ #ifdef RMD160_ASM # if defined(__i386) || defined(__i386__) || defined(_M_IX86) @@ -46,7 +45,7 @@ void ripemd160_block_data_order(RIPEMD160_CTX *c, const void *p, size_t num); #include "internal/md32_common.h" /* - * Transformed F2 and F4 are courtesy of Wei Dai + * Transformed F2 and F4 are courtesy of Wei Dai */ #define F1(x,y,z) ((x) ^ (y) ^ (z)) #define F2(x,y,z) ((((y) ^ (z)) & (x)) ^ (z)) diff --git a/crypto/ripemd/rmd_one.c b/crypto/ripemd/rmd_one.c index c3193bd7..cc01f15c 100644 --- a/crypto/ripemd/rmd_one.c +++ b/crypto/ripemd/rmd_one.c @@ -24,5 +24,5 @@ unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md) RIPEMD160_Update(&c, d, n); RIPEMD160_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); /* security consideration */ - return (md); + return md; } diff --git a/crypto/rsa/build.info b/crypto/rsa/build.info index 39b7464b..87f92492 100644 --- a/crypto/rsa/build.info +++ b/crypto/rsa/build.info @@ -1,6 +1,6 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ rsa_ossl.c rsa_gen.c rsa_lib.c rsa_sign.c rsa_saos.c rsa_err.c \ - rsa_pk1.c rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c rsa_null.c \ + rsa_pk1.c rsa_ssl.c rsa_none.c rsa_oaep.c rsa_chk.c \ rsa_pss.c rsa_x931.c rsa_asn1.c rsa_depr.c rsa_ameth.c rsa_prn.c \ - rsa_pmeth.c rsa_crpt.c rsa_x931g.c rsa_meth.c + rsa_pmeth.c rsa_crpt.c rsa_x931g.c rsa_meth.c rsa_mp.c diff --git a/crypto/rsa/rsa_ameth.c b/crypto/rsa/rsa_ameth.c index 4a12276a..98121b5e 100644 --- a/crypto/rsa/rsa_ameth.c +++ b/crypto/rsa/rsa_ameth.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -24,15 +24,68 @@ static int rsa_cms_decrypt(CMS_RecipientInfo *ri); static int rsa_cms_encrypt(CMS_RecipientInfo *ri); #endif +static RSA_PSS_PARAMS *rsa_pss_decode(const X509_ALGOR *alg); + +/* Set any parameters associated with pkey */ +static int rsa_param_encode(const EVP_PKEY *pkey, + ASN1_STRING **pstr, int *pstrtype) +{ + const RSA *rsa = pkey->pkey.rsa; + + *pstr = NULL; + /* If RSA it's just NULL type */ + if (pkey->ameth->pkey_id == EVP_PKEY_RSA) { + *pstrtype = V_ASN1_NULL; + return 1; + } + /* If no PSS parameters we omit parameters entirely */ + if (rsa->pss == NULL) { + *pstrtype = V_ASN1_UNDEF; + return 1; + } + /* Encode PSS parameters */ + if (ASN1_item_pack(rsa->pss, ASN1_ITEM_rptr(RSA_PSS_PARAMS), pstr) == NULL) + return 0; + + *pstrtype = V_ASN1_SEQUENCE; + return 1; +} +/* Decode any parameters and set them in RSA structure */ +static int rsa_param_decode(RSA *rsa, const X509_ALGOR *alg) +{ + const ASN1_OBJECT *algoid; + const void *algp; + int algptype; + + X509_ALGOR_get0(&algoid, &algptype, &algp, alg); + if (OBJ_obj2nid(algoid) == EVP_PKEY_RSA) + return 1; + if (algptype == V_ASN1_UNDEF) + return 1; + if (algptype != V_ASN1_SEQUENCE) { + RSAerr(RSA_F_RSA_PARAM_DECODE, RSA_R_INVALID_PSS_PARAMETERS); + return 0; + } + rsa->pss = rsa_pss_decode(alg); + if (rsa->pss == NULL) + return 0; + return 1; +} + static int rsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) { unsigned char *penc = NULL; int penclen; + ASN1_STRING *str; + int strtype; + + if (!rsa_param_encode(pkey, &str, &strtype)) + return 0; penclen = i2d_RSAPublicKey(pkey->pkey.rsa, &penc); if (penclen <= 0) return 0; - if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(EVP_PKEY_RSA), - V_ASN1_NULL, NULL, penc, penclen)) + if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(pkey->ameth->pkey_id), + strtype, str, penc, penclen)) return 1; OPENSSL_free(penc); @@ -43,15 +96,20 @@ static int rsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey) { const unsigned char *p; int pklen; + X509_ALGOR *alg; RSA *rsa = NULL; - if (!X509_PUBKEY_get0_param(NULL, &p, &pklen, NULL, pubkey)) + if (!X509_PUBKEY_get0_param(NULL, &p, &pklen, &alg, pubkey)) return 0; if ((rsa = d2i_RSAPublicKey(NULL, &p, pklen)) == NULL) { RSAerr(RSA_F_RSA_PUB_DECODE, ERR_R_RSA_LIB); return 0; } - EVP_PKEY_assign_RSA(pkey, rsa); + if (!rsa_param_decode(rsa, alg)) { + RSA_free(rsa); + return 0; + } + EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, rsa); return 1; } @@ -72,7 +130,7 @@ static int old_rsa_priv_decode(EVP_PKEY *pkey, RSAerr(RSA_F_OLD_RSA_PRIV_DECODE, ERR_R_RSA_LIB); return 0; } - EVP_PKEY_assign_RSA(pkey, rsa); + EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, rsa); return 1; } @@ -85,16 +143,23 @@ static int rsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) { unsigned char *rk = NULL; int rklen; + ASN1_STRING *str; + int strtype; + + if (!rsa_param_encode(pkey, &str, &strtype)) + return 0; rklen = i2d_RSAPrivateKey(pkey->pkey.rsa, &rk); if (rklen <= 0) { RSAerr(RSA_F_RSA_PRIV_ENCODE, ERR_R_MALLOC_FAILURE); + ASN1_STRING_free(str); return 0; } - if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(NID_rsaEncryption), 0, - V_ASN1_NULL, NULL, rk, rklen)) { + if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(pkey->ameth->pkey_id), 0, + strtype, str, rk, rklen)) { RSAerr(RSA_F_RSA_PRIV_ENCODE, ERR_R_MALLOC_FAILURE); + ASN1_STRING_free(str); return 0; } @@ -104,10 +169,23 @@ static int rsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) static int rsa_priv_decode(EVP_PKEY *pkey, const PKCS8_PRIV_KEY_INFO *p8) { const unsigned char *p; + RSA *rsa; int pklen; - if (!PKCS8_pkey_get0(NULL, &p, &pklen, NULL, p8)) + const X509_ALGOR *alg; + + if (!PKCS8_pkey_get0(NULL, &p, &pklen, &alg, p8)) return 0; - return old_rsa_priv_decode(pkey, &p, pklen); + rsa = d2i_RSAPrivateKey(NULL, &p, pklen); + if (rsa == NULL) { + RSAerr(RSA_F_RSA_PRIV_DECODE, ERR_R_RSA_LIB); + return 0; + } + if (!rsa_param_decode(rsa, alg)) { + RSA_free(rsa); + return 0; + } + EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, rsa); + return 1; } static int int_rsa_size(const EVP_PKEY *pkey) @@ -130,104 +208,40 @@ static void int_rsa_free(EVP_PKEY *pkey) RSA_free(pkey->pkey.rsa); } -static int do_rsa_print(BIO *bp, const RSA *x, int off, int priv) -{ - char *str; - const char *s; - int ret = 0, mod_len = 0; - - if (x->n != NULL) - mod_len = BN_num_bits(x->n); - - if (!BIO_indent(bp, off, 128)) - goto err; - - if (priv && x->d) { - if (BIO_printf(bp, "Private-Key: (%d bit)\n", mod_len) <= 0) - goto err; - str = "modulus:"; - s = "publicExponent:"; - } else { - if (BIO_printf(bp, "Public-Key: (%d bit)\n", mod_len) <= 0) - goto err; - str = "Modulus:"; - s = "Exponent:"; - } - if (!ASN1_bn_print(bp, str, x->n, NULL, off)) - goto err; - if (!ASN1_bn_print(bp, s, x->e, NULL, off)) - goto err; - if (priv) { - if (!ASN1_bn_print(bp, "privateExponent:", x->d, NULL, off)) - goto err; - if (!ASN1_bn_print(bp, "prime1:", x->p, NULL, off)) - goto err; - if (!ASN1_bn_print(bp, "prime2:", x->q, NULL, off)) - goto err; - if (!ASN1_bn_print(bp, "exponent1:", x->dmp1, NULL, off)) - goto err; - if (!ASN1_bn_print(bp, "exponent2:", x->dmq1, NULL, off)) - goto err; - if (!ASN1_bn_print(bp, "coefficient:", x->iqmp, NULL, off)) - goto err; - } - ret = 1; - err: - return (ret); -} - -static int rsa_pub_print(BIO *bp, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *ctx) -{ - return do_rsa_print(bp, pkey->pkey.rsa, indent, 0); -} - -static int rsa_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *ctx) -{ - return do_rsa_print(bp, pkey->pkey.rsa, indent, 1); -} - -/* Given an MGF1 Algorithm ID decode to an Algorithm Identifier */ static X509_ALGOR *rsa_mgf1_decode(X509_ALGOR *alg) { - if (alg == NULL) - return NULL; if (OBJ_obj2nid(alg->algorithm) != NID_mgf1) return NULL; return ASN1_TYPE_unpack_sequence(ASN1_ITEM_rptr(X509_ALGOR), alg->parameter); } -static RSA_PSS_PARAMS *rsa_pss_decode(const X509_ALGOR *alg, - X509_ALGOR **pmaskHash) -{ - RSA_PSS_PARAMS *pss; - - *pmaskHash = NULL; - - pss = ASN1_TYPE_unpack_sequence(ASN1_ITEM_rptr(RSA_PSS_PARAMS), - alg->parameter); - - if (!pss) - return NULL; - - *pmaskHash = rsa_mgf1_decode(pss->maskGenAlgorithm); - - return pss; -} - -static int rsa_pss_param_print(BIO *bp, RSA_PSS_PARAMS *pss, - X509_ALGOR *maskHash, int indent) +static int rsa_pss_param_print(BIO *bp, int pss_key, RSA_PSS_PARAMS *pss, + int indent) { int rv = 0; - if (!pss) { - if (BIO_puts(bp, " (INVALID PSS PARAMETERS)\n") <= 0) + X509_ALGOR *maskHash = NULL; + + if (!BIO_indent(bp, indent, 128)) + goto err; + if (pss_key) { + if (pss == NULL) { + if (BIO_puts(bp, "No PSS parameter restrictions\n") <= 0) + return 0; + return 1; + } else { + if (BIO_puts(bp, "PSS parameter restrictions:") <= 0) + return 0; + } + } else if (pss == NULL) { + if (BIO_puts(bp,"(INVALID PSS PARAMETERS)\n") <= 0) return 0; return 1; } if (BIO_puts(bp, "\n") <= 0) goto err; + if (pss_key) + indent += 2; if (!BIO_indent(bp, indent, 128)) goto err; if (BIO_puts(bp, "Hash Algorithm: ") <= 0) @@ -236,8 +250,9 @@ static int rsa_pss_param_print(BIO *bp, RSA_PSS_PARAMS *pss, if (pss->hashAlgorithm) { if (i2a_ASN1_OBJECT(bp, pss->hashAlgorithm->algorithm) <= 0) goto err; - } else if (BIO_puts(bp, "sha1 (default)") <= 0) + } else if (BIO_puts(bp, "sha1 (default)") <= 0) { goto err; + } if (BIO_puts(bp, "\n") <= 0) goto err; @@ -252,24 +267,28 @@ static int rsa_pss_param_print(BIO *bp, RSA_PSS_PARAMS *pss, goto err; if (BIO_puts(bp, " with ") <= 0) goto err; - if (maskHash) { + maskHash = rsa_mgf1_decode(pss->maskGenAlgorithm); + if (maskHash != NULL) { if (i2a_ASN1_OBJECT(bp, maskHash->algorithm) <= 0) goto err; - } else if (BIO_puts(bp, "INVALID") <= 0) + } else if (BIO_puts(bp, "INVALID") <= 0) { goto err; - } else if (BIO_puts(bp, "mgf1 with sha1 (default)") <= 0) + } + } else if (BIO_puts(bp, "mgf1 with sha1 (default)") <= 0) { goto err; + } BIO_puts(bp, "\n"); if (!BIO_indent(bp, indent, 128)) goto err; - if (BIO_puts(bp, "Salt Length: 0x") <= 0) + if (BIO_printf(bp, "%s Salt Length: 0x", pss_key ? "Minimum" : "") <= 0) goto err; if (pss->saltLength) { if (i2a_ASN1_INTEGER(bp, pss->saltLength) <= 0) goto err; - } else if (BIO_puts(bp, "14 (default)") <= 0) + } else if (BIO_puts(bp, "14 (default)") <= 0) { goto err; + } BIO_puts(bp, "\n"); if (!BIO_indent(bp, indent, 128)) @@ -279,32 +298,155 @@ static int rsa_pss_param_print(BIO *bp, RSA_PSS_PARAMS *pss, if (pss->trailerField) { if (i2a_ASN1_INTEGER(bp, pss->trailerField) <= 0) goto err; - } else if (BIO_puts(bp, "BC (default)") <= 0) + } else if (BIO_puts(bp, "BC (default)") <= 0) { goto err; + } BIO_puts(bp, "\n"); rv = 1; err: + X509_ALGOR_free(maskHash); return rv; } +static int pkey_rsa_print(BIO *bp, const EVP_PKEY *pkey, int off, int priv) +{ + const RSA *x = pkey->pkey.rsa; + char *str; + const char *s; + int ret = 0, mod_len = 0, ex_primes; + + if (x->n != NULL) + mod_len = BN_num_bits(x->n); + ex_primes = sk_RSA_PRIME_INFO_num(x->prime_infos); + + if (!BIO_indent(bp, off, 128)) + goto err; + + if (BIO_printf(bp, "%s ", pkey_is_pss(pkey) ? "RSA-PSS" : "RSA") <= 0) + goto err; + + if (priv && x->d) { + if (BIO_printf(bp, "Private-Key: (%d bit, %d primes)\n", + mod_len, ex_primes <= 0 ? 2 : ex_primes + 2) <= 0) + goto err; + str = "modulus:"; + s = "publicExponent:"; + } else { + if (BIO_printf(bp, "Public-Key: (%d bit)\n", mod_len) <= 0) + goto err; + str = "Modulus:"; + s = "Exponent:"; + } + if (!ASN1_bn_print(bp, str, x->n, NULL, off)) + goto err; + if (!ASN1_bn_print(bp, s, x->e, NULL, off)) + goto err; + if (priv) { + int i; + + if (!ASN1_bn_print(bp, "privateExponent:", x->d, NULL, off)) + goto err; + if (!ASN1_bn_print(bp, "prime1:", x->p, NULL, off)) + goto err; + if (!ASN1_bn_print(bp, "prime2:", x->q, NULL, off)) + goto err; + if (!ASN1_bn_print(bp, "exponent1:", x->dmp1, NULL, off)) + goto err; + if (!ASN1_bn_print(bp, "exponent2:", x->dmq1, NULL, off)) + goto err; + if (!ASN1_bn_print(bp, "coefficient:", x->iqmp, NULL, off)) + goto err; + for (i = 0; i < sk_RSA_PRIME_INFO_num(x->prime_infos); i++) { + /* print multi-prime info */ + BIGNUM *bn = NULL; + RSA_PRIME_INFO *pinfo; + int j; + + pinfo = sk_RSA_PRIME_INFO_value(x->prime_infos, i); + for (j = 0; j < 3; j++) { + if (!BIO_indent(bp, off, 128)) + goto err; + switch (j) { + case 0: + if (BIO_printf(bp, "prime%d:", i + 3) <= 0) + goto err; + bn = pinfo->r; + break; + case 1: + if (BIO_printf(bp, "exponent%d:", i + 3) <= 0) + goto err; + bn = pinfo->d; + break; + case 2: + if (BIO_printf(bp, "coefficient%d:", i + 3) <= 0) + goto err; + bn = pinfo->t; + break; + default: + break; + } + if (!ASN1_bn_print(bp, "", bn, NULL, off)) + goto err; + } + } + } + if (pkey_is_pss(pkey) && !rsa_pss_param_print(bp, 1, x->pss, off)) + goto err; + ret = 1; + err: + return ret; +} + +static int rsa_pub_print(BIO *bp, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *ctx) +{ + return pkey_rsa_print(bp, pkey, indent, 0); +} + +static int rsa_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent, + ASN1_PCTX *ctx) +{ + return pkey_rsa_print(bp, pkey, indent, 1); +} + +static RSA_PSS_PARAMS *rsa_pss_decode(const X509_ALGOR *alg) +{ + RSA_PSS_PARAMS *pss; + + pss = ASN1_TYPE_unpack_sequence(ASN1_ITEM_rptr(RSA_PSS_PARAMS), + alg->parameter); + + if (pss == NULL) + return NULL; + + if (pss->maskGenAlgorithm != NULL) { + pss->maskHash = rsa_mgf1_decode(pss->maskGenAlgorithm); + if (pss->maskHash == NULL) { + RSA_PSS_PARAMS_free(pss); + return NULL; + } + } + + return pss; +} + static int rsa_sig_print(BIO *bp, const X509_ALGOR *sigalg, const ASN1_STRING *sig, int indent, ASN1_PCTX *pctx) { - if (OBJ_obj2nid(sigalg->algorithm) == NID_rsassaPss) { + if (OBJ_obj2nid(sigalg->algorithm) == EVP_PKEY_RSA_PSS) { int rv; - RSA_PSS_PARAMS *pss; - X509_ALGOR *maskHash; - pss = rsa_pss_decode(sigalg, &maskHash); - rv = rsa_pss_param_print(bp, pss, maskHash, indent); + RSA_PSS_PARAMS *pss = rsa_pss_decode(sigalg); + + rv = rsa_pss_param_print(bp, 0, pss, indent); RSA_PSS_PARAMS_free(pss); - X509_ALGOR_free(maskHash); if (!rv) return 0; - } else if (!sig && BIO_puts(bp, "\n") <= 0) + } else if (!sig && BIO_puts(bp, "\n") <= 0) { return 0; + } if (sig) return X509_signature_dump(bp, sig, indent); return 1; @@ -313,6 +455,7 @@ static int rsa_sig_print(BIO *bp, const X509_ALGOR *sigalg, static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) { X509_ALGOR *alg = NULL; + switch (op) { case ASN1_PKEY_CTRL_PKCS7_SIGN: @@ -321,6 +464,8 @@ static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) break; case ASN1_PKEY_CTRL_PKCS7_ENCRYPT: + if (pkey_is_pss(pkey)) + return -2; if (arg1 == 0) PKCS7_RECIP_INFO_get0_alg(arg2, &alg); break; @@ -333,6 +478,8 @@ static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) break; case ASN1_PKEY_CTRL_CMS_ENVELOPE: + if (pkey_is_pss(pkey)) + return -2; if (arg1 == 0) return rsa_cms_encrypt(arg2); else if (arg1 == 1) @@ -340,6 +487,8 @@ static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) break; case ASN1_PKEY_CTRL_CMS_RI_TYPE: + if (pkey_is_pss(pkey)) + return -2; *(int *)arg2 = CMS_RECIPINFO_TRANS; return 1; #endif @@ -363,7 +512,7 @@ static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) /* allocate and set algorithm ID from EVP_MD, default SHA1 */ static int rsa_md_to_algor(X509_ALGOR **palg, const EVP_MD *md) { - if (EVP_MD_type(md) == NID_sha1) + if (md == NULL || EVP_MD_type(md) == NID_sha1) return 1; *palg = X509_ALGOR_new(); if (*palg == NULL) @@ -377,13 +526,14 @@ static int rsa_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md) { X509_ALGOR *algtmp = NULL; ASN1_STRING *stmp = NULL; + *palg = NULL; - if (EVP_MD_type(mgf1md) == NID_sha1) + if (mgf1md == NULL || EVP_MD_type(mgf1md) == NID_sha1) return 1; /* need to embed algorithm ID inside another */ if (!rsa_md_to_algor(&algtmp, mgf1md)) goto err; - if (!ASN1_item_pack(algtmp, ASN1_ITEM_rptr(X509_ALGOR), &stmp)) + if (ASN1_item_pack(algtmp, ASN1_ITEM_rptr(X509_ALGOR), &stmp) == NULL) goto err; *palg = X509_ALGOR_new(); if (*palg == NULL) @@ -402,6 +552,7 @@ static int rsa_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md) static const EVP_MD *rsa_algor_to_md(X509_ALGOR *alg) { const EVP_MD *md; + if (!alg) return EVP_sha1(); md = EVP_get_digestbyobj(alg->algorithm); @@ -410,55 +561,39 @@ static const EVP_MD *rsa_algor_to_md(X509_ALGOR *alg) return md; } -/* convert MGF1 algorithm ID to EVP_MD, default SHA1 */ -static const EVP_MD *rsa_mgf1_to_md(X509_ALGOR *alg, X509_ALGOR *maskHash) -{ - const EVP_MD *md; - if (!alg) - return EVP_sha1(); - /* Check mask and lookup mask hash algorithm */ - if (OBJ_obj2nid(alg->algorithm) != NID_mgf1) { - RSAerr(RSA_F_RSA_MGF1_TO_MD, RSA_R_UNSUPPORTED_MASK_ALGORITHM); - return NULL; - } - if (!maskHash) { - RSAerr(RSA_F_RSA_MGF1_TO_MD, RSA_R_UNSUPPORTED_MASK_PARAMETER); - return NULL; - } - md = EVP_get_digestbyobj(maskHash->algorithm); - if (md == NULL) { - RSAerr(RSA_F_RSA_MGF1_TO_MD, RSA_R_UNKNOWN_MASK_DIGEST); - return NULL; - } - return md; -} - /* - * Convert EVP_PKEY_CTX is PSS mode into corresponding algorithm parameter, + * Convert EVP_PKEY_CTX in PSS mode into corresponding algorithm parameter, * suitable for setting an AlgorithmIdentifier. */ -static ASN1_STRING *rsa_ctx_to_pss(EVP_PKEY_CTX *pkctx) +static RSA_PSS_PARAMS *rsa_ctx_to_pss(EVP_PKEY_CTX *pkctx) { const EVP_MD *sigmd, *mgf1md; - RSA_PSS_PARAMS *pss = NULL; - ASN1_STRING *os = NULL; EVP_PKEY *pk = EVP_PKEY_CTX_get0_pkey(pkctx); - int saltlen, rv = 0; + int saltlen; + if (EVP_PKEY_CTX_get_signature_md(pkctx, &sigmd) <= 0) - goto err; + return NULL; if (EVP_PKEY_CTX_get_rsa_mgf1_md(pkctx, &mgf1md) <= 0) - goto err; + return NULL; if (!EVP_PKEY_CTX_get_rsa_pss_saltlen(pkctx, &saltlen)) - goto err; - if (saltlen == -1) + return NULL; + if (saltlen == -1) { saltlen = EVP_MD_size(sigmd); - else if (saltlen == -2) { + } else if (saltlen == -2) { saltlen = EVP_PKEY_size(pk) - EVP_MD_size(sigmd) - 2; - if (((EVP_PKEY_bits(pk) - 1) & 0x7) == 0) + if ((EVP_PKEY_bits(pk) & 0x7) == 1) saltlen--; } - pss = RSA_PSS_PARAMS_new(); + + return rsa_pss_params_create(sigmd, mgf1md, saltlen); +} + +RSA_PSS_PARAMS *rsa_pss_params_create(const EVP_MD *sigmd, + const EVP_MD *mgf1md, int saltlen) +{ + RSA_PSS_PARAMS *pss = RSA_PSS_PARAMS_new(); + if (pss == NULL) goto err; if (saltlen != 20) { @@ -470,20 +605,31 @@ static ASN1_STRING *rsa_ctx_to_pss(EVP_PKEY_CTX *pkctx) } if (!rsa_md_to_algor(&pss->hashAlgorithm, sigmd)) goto err; + if (mgf1md == NULL) + mgf1md = sigmd; if (!rsa_md_to_mgf1(&pss->maskGenAlgorithm, mgf1md)) goto err; - /* Finally create string with pss parameter encoding. */ - if (!ASN1_item_pack(pss, ASN1_ITEM_rptr(RSA_PSS_PARAMS), &os)) - goto err; - rv = 1; + if (!rsa_md_to_algor(&pss->maskHash, mgf1md)) + goto err; + return pss; err: RSA_PSS_PARAMS_free(pss); - if (rv) - return os; - ASN1_STRING_free(os); return NULL; } +static ASN1_STRING *rsa_ctx_to_pss_string(EVP_PKEY_CTX *pkctx) +{ + RSA_PSS_PARAMS *pss = rsa_ctx_to_pss(pkctx); + ASN1_STRING *os; + + if (pss == NULL) + return NULL; + + os = ASN1_item_pack(pss, ASN1_ITEM_rptr(RSA_PSS_PARAMS), NULL); + RSA_PSS_PARAMS_free(pss); + return os; +} + /* * From PSS AlgorithmIdentifier set public key parameters. If pkey isn't NULL * then the EVP_MD_CTX is setup and initialised. If it is NULL parameters are @@ -497,51 +643,21 @@ static int rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, int saltlen; const EVP_MD *mgf1md = NULL, *md = NULL; RSA_PSS_PARAMS *pss; - X509_ALGOR *maskHash; + /* Sanity check: make sure it is PSS */ - if (OBJ_obj2nid(sigalg->algorithm) != NID_rsassaPss) { + if (OBJ_obj2nid(sigalg->algorithm) != EVP_PKEY_RSA_PSS) { RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_UNSUPPORTED_SIGNATURE_TYPE); return -1; } /* Decode PSS parameters */ - pss = rsa_pss_decode(sigalg, &maskHash); + pss = rsa_pss_decode(sigalg); - if (pss == NULL) { + if (!rsa_pss_get_param(pss, &md, &mgf1md, &saltlen)) { RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_INVALID_PSS_PARAMETERS); goto err; } - mgf1md = rsa_mgf1_to_md(pss->maskGenAlgorithm, maskHash); - if (!mgf1md) - goto err; - md = rsa_algor_to_md(pss->hashAlgorithm); - if (!md) - goto err; - - if (pss->saltLength) { - saltlen = ASN1_INTEGER_get(pss->saltLength); - - /* - * Could perform more salt length sanity checks but the main RSA - * routines will trap other invalid values anyway. - */ - if (saltlen < 0) { - RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_INVALID_SALT_LENGTH); - goto err; - } - } else - saltlen = 20; - - /* - * low-level routines support only trailer field 0xbc (value 1) and - * PKCS#1 says we should reject any other value anyway. - */ - if (pss->trailerField && ASN1_INTEGER_get(pss->trailerField) != 1) { - RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_INVALID_TRAILER); - goto err; - } /* We have all parameters now set up context */ - if (pkey) { if (!EVP_DigestVerifyInit(ctx, &pkctx, md, NULL, pkey)) goto err; @@ -568,22 +684,60 @@ static int rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx, err: RSA_PSS_PARAMS_free(pss); - X509_ALGOR_free(maskHash); return rv; } +int rsa_pss_get_param(const RSA_PSS_PARAMS *pss, const EVP_MD **pmd, + const EVP_MD **pmgf1md, int *psaltlen) +{ + if (pss == NULL) + return 0; + *pmd = rsa_algor_to_md(pss->hashAlgorithm); + if (*pmd == NULL) + return 0; + *pmgf1md = rsa_algor_to_md(pss->maskHash); + if (*pmgf1md == NULL) + return 0; + if (pss->saltLength) { + *psaltlen = ASN1_INTEGER_get(pss->saltLength); + if (*psaltlen < 0) { + RSAerr(RSA_F_RSA_PSS_GET_PARAM, RSA_R_INVALID_SALT_LENGTH); + return 0; + } + } else { + *psaltlen = 20; + } + + /* + * low-level routines support only trailer field 0xbc (value 1) and + * PKCS#1 says we should reject any other value anyway. + */ + if (pss->trailerField && ASN1_INTEGER_get(pss->trailerField) != 1) { + RSAerr(RSA_F_RSA_PSS_GET_PARAM, RSA_R_INVALID_TRAILER); + return 0; + } + + return 1; +} + #ifndef OPENSSL_NO_CMS static int rsa_cms_verify(CMS_SignerInfo *si) { int nid, nid2; X509_ALGOR *alg; EVP_PKEY_CTX *pkctx = CMS_SignerInfo_get0_pkey_ctx(si); + CMS_SignerInfo_get0_algs(si, NULL, NULL, NULL, &alg); nid = OBJ_obj2nid(alg->algorithm); + if (nid == EVP_PKEY_RSA_PSS) + return rsa_pss_to_ctx(NULL, pkctx, alg, NULL); + /* Only PSS allowed for PSS keys */ + if (pkey_ctx_is_pss(pkctx)) { + RSAerr(RSA_F_RSA_CMS_VERIFY, RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE); + return 0; + } if (nid == NID_rsaEncryption) return 1; - if (nid == NID_rsassaPss) - return rsa_pss_to_ctx(NULL, pkctx, alg, NULL); /* Workaround for some implementation that use a signature OID */ if (OBJ_find_sigid_algs(nid, NULL, &nid2)) { if (nid2 == NID_rsaEncryption) @@ -603,7 +757,7 @@ static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, EVP_PKEY *pkey) { /* Sanity check: make sure it is PSS */ - if (OBJ_obj2nid(sigalg->algorithm) != NID_rsassaPss) { + if (OBJ_obj2nid(sigalg->algorithm) != EVP_PKEY_RSA_PSS) { RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNSUPPORTED_SIGNATURE_TYPE); return -1; } @@ -621,6 +775,7 @@ static int rsa_cms_sign(CMS_SignerInfo *si) X509_ALGOR *alg; EVP_PKEY_CTX *pkctx = CMS_SignerInfo_get0_pkey_ctx(si); ASN1_STRING *os = NULL; + CMS_SignerInfo_get0_algs(si, NULL, NULL, NULL, &alg); if (pkctx) { if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0) @@ -633,10 +788,10 @@ static int rsa_cms_sign(CMS_SignerInfo *si) /* We don't support it */ if (pad_mode != RSA_PKCS1_PSS_PADDING) return 0; - os = rsa_ctx_to_pss(pkctx); + os = rsa_ctx_to_pss_string(pkctx); if (!os) return 0; - X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsassaPss), V_ASN1_SEQUENCE, os); + X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_PKEY_RSA_PSS), V_ASN1_SEQUENCE, os); return 1; } #endif @@ -647,13 +802,14 @@ static int rsa_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, { int pad_mode; EVP_PKEY_CTX *pkctx = EVP_MD_CTX_pkey_ctx(ctx); + if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0) return 0; if (pad_mode == RSA_PKCS1_PADDING) return 2; if (pad_mode == RSA_PKCS1_PSS_PADDING) { ASN1_STRING *os1 = NULL; - os1 = rsa_ctx_to_pss(pkctx); + os1 = rsa_ctx_to_pss_string(pkctx); if (!os1) return 0; /* Duplicate parameters if we have to */ @@ -663,33 +819,70 @@ static int rsa_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, ASN1_STRING_free(os1); return 0; } - X509_ALGOR_set0(alg2, OBJ_nid2obj(NID_rsassaPss), + X509_ALGOR_set0(alg2, OBJ_nid2obj(EVP_PKEY_RSA_PSS), V_ASN1_SEQUENCE, os2); } - X509_ALGOR_set0(alg1, OBJ_nid2obj(NID_rsassaPss), + X509_ALGOR_set0(alg1, OBJ_nid2obj(EVP_PKEY_RSA_PSS), V_ASN1_SEQUENCE, os1); return 3; } return 2; } -#ifndef OPENSSL_NO_CMS -static RSA_OAEP_PARAMS *rsa_oaep_decode(const X509_ALGOR *alg, - X509_ALGOR **pmaskHash) +static int rsa_sig_info_set(X509_SIG_INFO *siginf, const X509_ALGOR *sigalg, + const ASN1_STRING *sig) { - RSA_OAEP_PARAMS *pss; + int rv = 0; + int mdnid, saltlen; + uint32_t flags; + const EVP_MD *mgf1md = NULL, *md = NULL; + RSA_PSS_PARAMS *pss; - *pmaskHash = NULL; + /* Sanity check: make sure it is PSS */ + if (OBJ_obj2nid(sigalg->algorithm) != EVP_PKEY_RSA_PSS) + return 0; + /* Decode PSS parameters */ + pss = rsa_pss_decode(sigalg); + if (!rsa_pss_get_param(pss, &md, &mgf1md, &saltlen)) + goto err; + mdnid = EVP_MD_type(md); + /* + * For TLS need SHA256, SHA384 or SHA512, digest and MGF1 digest must + * match and salt length must equal digest size + */ + if ((mdnid == NID_sha256 || mdnid == NID_sha384 || mdnid == NID_sha512) + && mdnid == EVP_MD_type(mgf1md) && saltlen == EVP_MD_size(md)) + flags = X509_SIG_INFO_TLS; + else + flags = 0; + /* Note: security bits half number of digest bits */ + X509_SIG_INFO_set(siginf, mdnid, EVP_PKEY_RSA_PSS, EVP_MD_size(md) * 4, + flags); + rv = 1; + err: + RSA_PSS_PARAMS_free(pss); + return rv; +} - pss = ASN1_TYPE_unpack_sequence(ASN1_ITEM_rptr(RSA_OAEP_PARAMS), - alg->parameter); +#ifndef OPENSSL_NO_CMS +static RSA_OAEP_PARAMS *rsa_oaep_decode(const X509_ALGOR *alg) +{ + RSA_OAEP_PARAMS *oaep; - if (!pss) + oaep = ASN1_TYPE_unpack_sequence(ASN1_ITEM_rptr(RSA_OAEP_PARAMS), + alg->parameter); + + if (oaep == NULL) return NULL; - *pmaskHash = rsa_mgf1_decode(pss->maskGenFunc); - - return pss; + if (oaep->maskGenFunc != NULL) { + oaep->maskHash = rsa_mgf1_decode(oaep->maskGenFunc); + if (oaep->maskHash == NULL) { + RSA_OAEP_PARAMS_free(oaep); + return NULL; + } + } + return oaep; } static int rsa_cms_decrypt(CMS_RecipientInfo *ri) @@ -702,9 +895,9 @@ static int rsa_cms_decrypt(CMS_RecipientInfo *ri) int labellen = 0; const EVP_MD *mgf1md = NULL, *md = NULL; RSA_OAEP_PARAMS *oaep; - X509_ALGOR *maskHash; + pkctx = CMS_RecipientInfo_get0_pkey_ctx(ri); - if (!pkctx) + if (pkctx == NULL) return 0; if (!CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &cmsalg)) return -1; @@ -716,22 +909,23 @@ static int rsa_cms_decrypt(CMS_RecipientInfo *ri) return -1; } /* Decode OAEP parameters */ - oaep = rsa_oaep_decode(cmsalg, &maskHash); + oaep = rsa_oaep_decode(cmsalg); if (oaep == NULL) { RSAerr(RSA_F_RSA_CMS_DECRYPT, RSA_R_INVALID_OAEP_PARAMETERS); goto err; } - mgf1md = rsa_mgf1_to_md(oaep->maskGenFunc, maskHash); - if (!mgf1md) + mgf1md = rsa_algor_to_md(oaep->maskHash); + if (mgf1md == NULL) goto err; md = rsa_algor_to_md(oaep->hashFunc); - if (!md) + if (md == NULL) goto err; - if (oaep->pSourceFunc) { + if (oaep->pSourceFunc != NULL) { X509_ALGOR *plab = oaep->pSourceFunc; + if (OBJ_obj2nid(plab->algorithm) != NID_pSpecified) { RSAerr(RSA_F_RSA_CMS_DECRYPT, RSA_R_UNSUPPORTED_LABEL_SOURCE); goto err; @@ -760,7 +954,6 @@ static int rsa_cms_decrypt(CMS_RecipientInfo *ri) err: RSA_OAEP_PARAMS_free(oaep); - X509_ALGOR_free(maskHash); return rv; } @@ -773,8 +966,8 @@ static int rsa_cms_encrypt(CMS_RecipientInfo *ri) EVP_PKEY_CTX *pkctx = CMS_RecipientInfo_get0_pkey_ctx(ri); int pad_mode = RSA_PKCS1_PADDING, rv = 0, labellen; unsigned char *label; - if (CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg) <= 0) - return 0; + + CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg); if (pkctx) { if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0) return 0; @@ -828,6 +1021,11 @@ static int rsa_cms_encrypt(CMS_RecipientInfo *ri) } #endif +static int rsa_pkey_check(const EVP_PKEY *pkey) +{ + return RSA_check_key_ex(pkey->pkey.rsa, NULL); +} + const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2] = { { EVP_PKEY_RSA, @@ -858,10 +1056,46 @@ const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[2] = { old_rsa_priv_decode, old_rsa_priv_encode, rsa_item_verify, - rsa_item_sign}, + rsa_item_sign, + rsa_sig_info_set, + rsa_pkey_check + }, { EVP_PKEY_RSA2, EVP_PKEY_RSA, ASN1_PKEY_ALIAS} }; + +const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = { + EVP_PKEY_RSA_PSS, + EVP_PKEY_RSA_PSS, + ASN1_PKEY_SIGPARAM_NULL, + + "RSA-PSS", + "OpenSSL RSA-PSS method", + + rsa_pub_decode, + rsa_pub_encode, + rsa_pub_cmp, + rsa_pub_print, + + rsa_priv_decode, + rsa_priv_encode, + rsa_priv_print, + + int_rsa_size, + rsa_bits, + rsa_security_bits, + + 0, 0, 0, 0, 0, 0, + + rsa_sig_print, + int_rsa_free, + rsa_pkey_ctrl, + 0, 0, + rsa_item_verify, + rsa_item_sign, + 0, + rsa_pkey_check +}; diff --git a/crypto/rsa/rsa_asn1.c b/crypto/rsa/rsa_asn1.c index 20f8ebfa..9fe62c82 100644 --- a/crypto/rsa/rsa_asn1.c +++ b/crypto/rsa/rsa_asn1.c @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,7 +14,11 @@ #include #include "rsa_locl.h" -/* Override the default free and new methods */ +/* + * Override the default free and new methods, + * and calculate helper products for multi-prime + * RSA keys. + */ static int rsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) { @@ -27,12 +31,25 @@ static int rsa_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, RSA_free((RSA *)*pval); *pval = NULL; return 2; + } else if (operation == ASN1_OP_D2I_POST) { + if (((RSA *)*pval)->version != RSA_ASN1_VERSION_MULTI) { + /* not a multi-prime key, skip */ + return 1; + } + return (rsa_multip_calc_product((RSA *)*pval) == 1) ? 2 : 0; } return 1; } +/* Based on definitions in RFC 8017 appendix A.1.2 */ +ASN1_SEQUENCE(RSA_PRIME_INFO) = { + ASN1_SIMPLE(RSA_PRIME_INFO, r, CBIGNUM), + ASN1_SIMPLE(RSA_PRIME_INFO, d, CBIGNUM), + ASN1_SIMPLE(RSA_PRIME_INFO, t, CBIGNUM), +} ASN1_SEQUENCE_END(RSA_PRIME_INFO) + ASN1_SEQUENCE_cb(RSAPrivateKey, rsa_cb) = { - ASN1_SIMPLE(RSA, version, LONG), + ASN1_EMBED(RSA, version, INT32), ASN1_SIMPLE(RSA, n, BIGNUM), ASN1_SIMPLE(RSA, e, BIGNUM), ASN1_SIMPLE(RSA, d, CBIGNUM), @@ -40,7 +57,8 @@ ASN1_SEQUENCE_cb(RSAPrivateKey, rsa_cb) = { ASN1_SIMPLE(RSA, q, CBIGNUM), ASN1_SIMPLE(RSA, dmp1, CBIGNUM), ASN1_SIMPLE(RSA, dmq1, CBIGNUM), - ASN1_SIMPLE(RSA, iqmp, CBIGNUM) + ASN1_SIMPLE(RSA, iqmp, CBIGNUM), + ASN1_SEQUENCE_OF_OPT(RSA, prime_infos, RSA_PRIME_INFO) } ASN1_SEQUENCE_END_cb(RSA, RSAPrivateKey) @@ -49,20 +67,42 @@ ASN1_SEQUENCE_cb(RSAPublicKey, rsa_cb) = { ASN1_SIMPLE(RSA, e, BIGNUM), } ASN1_SEQUENCE_END_cb(RSA, RSAPublicKey) -ASN1_SEQUENCE(RSA_PSS_PARAMS) = { +/* Free up maskHash */ +static int rsa_pss_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, + void *exarg) +{ + if (operation == ASN1_OP_FREE_PRE) { + RSA_PSS_PARAMS *pss = (RSA_PSS_PARAMS *)*pval; + X509_ALGOR_free(pss->maskHash); + } + return 1; +} + +ASN1_SEQUENCE_cb(RSA_PSS_PARAMS, rsa_pss_cb) = { ASN1_EXP_OPT(RSA_PSS_PARAMS, hashAlgorithm, X509_ALGOR,0), ASN1_EXP_OPT(RSA_PSS_PARAMS, maskGenAlgorithm, X509_ALGOR,1), ASN1_EXP_OPT(RSA_PSS_PARAMS, saltLength, ASN1_INTEGER,2), ASN1_EXP_OPT(RSA_PSS_PARAMS, trailerField, ASN1_INTEGER,3) -} ASN1_SEQUENCE_END(RSA_PSS_PARAMS) +} ASN1_SEQUENCE_END_cb(RSA_PSS_PARAMS, RSA_PSS_PARAMS) IMPLEMENT_ASN1_FUNCTIONS(RSA_PSS_PARAMS) -ASN1_SEQUENCE(RSA_OAEP_PARAMS) = { +/* Free up maskHash */ +static int rsa_oaep_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, + void *exarg) +{ + if (operation == ASN1_OP_FREE_PRE) { + RSA_OAEP_PARAMS *oaep = (RSA_OAEP_PARAMS *)*pval; + X509_ALGOR_free(oaep->maskHash); + } + return 1; +} + +ASN1_SEQUENCE_cb(RSA_OAEP_PARAMS, rsa_oaep_cb) = { ASN1_EXP_OPT(RSA_OAEP_PARAMS, hashFunc, X509_ALGOR, 0), ASN1_EXP_OPT(RSA_OAEP_PARAMS, maskGenFunc, X509_ALGOR, 1), ASN1_EXP_OPT(RSA_OAEP_PARAMS, pSourceFunc, X509_ALGOR, 2), -} ASN1_SEQUENCE_END(RSA_OAEP_PARAMS) +} ASN1_SEQUENCE_END_cb(RSA_OAEP_PARAMS, RSA_OAEP_PARAMS) IMPLEMENT_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) diff --git a/crypto/rsa/rsa_chk.c b/crypto/rsa/rsa_chk.c index 00260fb1..1b69be30 100644 --- a/crypto/rsa/rsa_chk.c +++ b/crypto/rsa/rsa_chk.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -20,7 +20,8 @@ int RSA_check_key_ex(const RSA *key, BN_GENCB *cb) { BIGNUM *i, *j, *k, *l, *m; BN_CTX *ctx; - int ret = 1; + int ret = 1, ex_primes = 0, idx; + RSA_PRIME_INFO *pinfo; if (key->p == NULL || key->q == NULL || key->n == NULL || key->e == NULL || key->d == NULL) { @@ -28,6 +29,16 @@ int RSA_check_key_ex(const RSA *key, BN_GENCB *cb) return 0; } + /* multi-prime? */ + if (key->version == RSA_ASN1_VERSION_MULTI) { + ex_primes = sk_RSA_PRIME_INFO_num(key->prime_infos); + if (ex_primes <= 0 + || (ex_primes + 2) > rsa_multip_cap(BN_num_bits(key->n))) { + RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_INVALID_MULTI_PRIME_KEY); + return 0; + } + } + i = BN_new(); j = BN_new(); k = BN_new(); @@ -62,17 +73,37 @@ int RSA_check_key_ex(const RSA *key, BN_GENCB *cb) RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_Q_NOT_PRIME); } - /* n = p*q? */ + /* r_i prime? */ + for (idx = 0; idx < ex_primes; idx++) { + pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx); + if (BN_is_prime_ex(pinfo->r, BN_prime_checks, NULL, cb) != 1) { + ret = 0; + RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_MP_R_NOT_PRIME); + } + } + + /* n = p*q * r_3...r_i? */ if (!BN_mul(i, key->p, key->q, ctx)) { ret = -1; goto err; } + for (idx = 0; idx < ex_primes; idx++) { + pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx); + if (!BN_mul(i, i, pinfo->r, ctx)) { + ret = -1; + goto err; + } + } if (BN_cmp(i, key->n) != 0) { ret = 0; - RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_N_DOES_NOT_EQUAL_P_Q); + if (ex_primes) + RSAerr(RSA_F_RSA_CHECK_KEY_EX, + RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES); + else + RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_N_DOES_NOT_EQUAL_P_Q); } - /* d*e = 1 mod lcm(p-1,q-1)? */ + /* d*e = 1 mod \lambda(n)? */ if (!BN_sub(i, key->p, BN_value_one())) { ret = -1; goto err; @@ -82,7 +113,7 @@ int RSA_check_key_ex(const RSA *key, BN_GENCB *cb) goto err; } - /* now compute k = lcm(i,j) */ + /* now compute k = \lambda(n) = LCM(i, j, r_3 - 1...) */ if (!BN_mul(l, i, j, ctx)) { ret = -1; goto err; @@ -91,6 +122,21 @@ int RSA_check_key_ex(const RSA *key, BN_GENCB *cb) ret = -1; goto err; } + for (idx = 0; idx < ex_primes; idx++) { + pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx); + if (!BN_sub(k, pinfo->r, BN_value_one())) { + ret = -1; + goto err; + } + if (!BN_mul(l, l, k, ctx)) { + ret = -1; + goto err; + } + if (!BN_gcd(m, m, k, ctx)) { + ret = -1; + goto err; + } + } if (!BN_div(k, NULL, l, m, ctx)) { /* remainder is 0 */ ret = -1; goto err; @@ -145,6 +191,32 @@ int RSA_check_key_ex(const RSA *key, BN_GENCB *cb) } } + for (idx = 0; idx < ex_primes; idx++) { + pinfo = sk_RSA_PRIME_INFO_value(key->prime_infos, idx); + /* d_i = d mod (r_i - 1)? */ + if (!BN_sub(i, pinfo->r, BN_value_one())) { + ret = -1; + goto err; + } + if (!BN_mod(j, key->d, i, ctx)) { + ret = -1; + goto err; + } + if (BN_cmp(j, pinfo->d) != 0) { + ret = 0; + RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D); + } + /* t_i = R_i ^ -1 mod r_i ? */ + if (!BN_mod_inverse(i, pinfo->pp, pinfo->r, ctx)) { + ret = -1; + goto err; + } + if (BN_cmp(i, pinfo->t) != 0) { + ret = 0; + RSAerr(RSA_F_RSA_CHECK_KEY_EX, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R); + } + } + err: BN_free(i); BN_free(j); diff --git a/crypto/rsa/rsa_crpt.c b/crypto/rsa/rsa_crpt.c index 9cd733b2..f4ef8b43 100644 --- a/crypto/rsa/rsa_crpt.c +++ b/crypto/rsa/rsa_crpt.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,48 +10,47 @@ #include #include #include "internal/cryptlib.h" -#include #include "internal/bn_int.h" #include #include "rsa_locl.h" int RSA_bits(const RSA *r) { - return (BN_num_bits(r->n)); + return BN_num_bits(r->n); } int RSA_size(const RSA *r) { - return (BN_num_bytes(r->n)); + return BN_num_bytes(r->n); } int RSA_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding) { - return (rsa->meth->rsa_pub_enc(flen, from, to, rsa, padding)); + return rsa->meth->rsa_pub_enc(flen, from, to, rsa, padding); } int RSA_private_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding) { - return (rsa->meth->rsa_priv_enc(flen, from, to, rsa, padding)); + return rsa->meth->rsa_priv_enc(flen, from, to, rsa, padding); } int RSA_private_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding) { - return (rsa->meth->rsa_priv_dec(flen, from, to, rsa, padding)); + return rsa->meth->rsa_priv_dec(flen, from, to, rsa, padding); } int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding) { - return (rsa->meth->rsa_pub_dec(flen, from, to, rsa, padding)); + return rsa->meth->rsa_pub_dec(flen, from, to, rsa, padding); } int RSA_flags(const RSA *r) { - return ((r == NULL) ? 0 : r->meth->flags); + return r == NULL ? 0 : r->meth->flags; } void RSA_blinding_off(RSA *rsa) @@ -77,7 +76,7 @@ int RSA_blinding_on(RSA *rsa, BN_CTX *ctx) rsa->flags &= ~RSA_FLAG_NO_BLINDING; ret = 1; err: - return (ret); + return ret; } static BIGNUM *rsa_get_public_exp(const BIGNUM *d, const BIGNUM *p, @@ -117,8 +116,9 @@ BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) if (in_ctx == NULL) { if ((ctx = BN_CTX_new()) == NULL) return 0; - } else + } else { ctx = in_ctx; + } BN_CTX_start(ctx); e = BN_CTX_get(ctx); @@ -133,17 +133,8 @@ BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *in_ctx) RSAerr(RSA_F_RSA_SETUP_BLINDING, RSA_R_NO_PUBLIC_EXPONENT); goto err; } - } else + } else { e = rsa->e; - - if ((RAND_status() == 0) && rsa->d != NULL - && bn_get_words(rsa->d) != NULL) { - /* - * if PRNG is not properly seeded, resort to secret exponent as - * unpredictable seed - */ - RAND_add(bn_get_words(rsa->d), bn_get_dmax(rsa->d) * sizeof(BN_ULONG), - 0.0); } { diff --git a/crypto/rsa/rsa_err.c b/crypto/rsa/rsa_err.c index bf54095b..f7d29e19 100644 --- a/crypto/rsa/rsa_err.c +++ b/crypto/rsa/rsa_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,165 +8,224 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_RSA,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_RSA,0,reason) - -static ERR_STRING_DATA RSA_str_functs[] = { - {ERR_FUNC(RSA_F_CHECK_PADDING_MD), "check_padding_md"}, - {ERR_FUNC(RSA_F_ENCODE_PKCS1), "encode_pkcs1"}, - {ERR_FUNC(RSA_F_INT_RSA_VERIFY), "int_rsa_verify"}, - {ERR_FUNC(RSA_F_OLD_RSA_PRIV_DECODE), "old_rsa_priv_decode"}, - {ERR_FUNC(RSA_F_PKEY_RSA_CTRL), "pkey_rsa_ctrl"}, - {ERR_FUNC(RSA_F_PKEY_RSA_CTRL_STR), "pkey_rsa_ctrl_str"}, - {ERR_FUNC(RSA_F_PKEY_RSA_SIGN), "pkey_rsa_sign"}, - {ERR_FUNC(RSA_F_PKEY_RSA_VERIFY), "pkey_rsa_verify"}, - {ERR_FUNC(RSA_F_PKEY_RSA_VERIFYRECOVER), "pkey_rsa_verifyrecover"}, - {ERR_FUNC(RSA_F_RSA_ALGOR_TO_MD), "rsa_algor_to_md"}, - {ERR_FUNC(RSA_F_RSA_BUILTIN_KEYGEN), "rsa_builtin_keygen"}, - {ERR_FUNC(RSA_F_RSA_CHECK_KEY), "RSA_check_key"}, - {ERR_FUNC(RSA_F_RSA_CHECK_KEY_EX), "RSA_check_key_ex"}, - {ERR_FUNC(RSA_F_RSA_CMS_DECRYPT), "rsa_cms_decrypt"}, - {ERR_FUNC(RSA_F_RSA_ITEM_VERIFY), "rsa_item_verify"}, - {ERR_FUNC(RSA_F_RSA_METH_DUP), "RSA_meth_dup"}, - {ERR_FUNC(RSA_F_RSA_METH_NEW), "RSA_meth_new"}, - {ERR_FUNC(RSA_F_RSA_METH_SET1_NAME), "RSA_meth_set1_name"}, - {ERR_FUNC(RSA_F_RSA_MGF1_TO_MD), "rsa_mgf1_to_md"}, - {ERR_FUNC(RSA_F_RSA_NEW_METHOD), "RSA_new_method"}, - {ERR_FUNC(RSA_F_RSA_NULL), "RSA_NULL"}, - {ERR_FUNC(RSA_F_RSA_NULL_PRIVATE_DECRYPT), "RSA_null_private_decrypt"}, - {ERR_FUNC(RSA_F_RSA_NULL_PRIVATE_ENCRYPT), "RSA_null_private_encrypt"}, - {ERR_FUNC(RSA_F_RSA_NULL_PUBLIC_DECRYPT), "RSA_null_public_decrypt"}, - {ERR_FUNC(RSA_F_RSA_NULL_PUBLIC_ENCRYPT), "RSA_null_public_encrypt"}, - {ERR_FUNC(RSA_F_RSA_OSSL_PRIVATE_DECRYPT), "rsa_ossl_private_decrypt"}, - {ERR_FUNC(RSA_F_RSA_OSSL_PRIVATE_ENCRYPT), "rsa_ossl_private_encrypt"}, - {ERR_FUNC(RSA_F_RSA_OSSL_PUBLIC_DECRYPT), "rsa_ossl_public_decrypt"}, - {ERR_FUNC(RSA_F_RSA_OSSL_PUBLIC_ENCRYPT), "rsa_ossl_public_encrypt"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_NONE), "RSA_padding_add_none"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP), +static const ERR_STRING_DATA RSA_str_functs[] = { + {ERR_PACK(ERR_LIB_RSA, RSA_F_CHECK_PADDING_MD, 0), "check_padding_md"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_ENCODE_PKCS1, 0), "encode_pkcs1"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_INT_RSA_VERIFY, 0), "int_rsa_verify"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_OLD_RSA_PRIV_DECODE, 0), + "old_rsa_priv_decode"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_PKEY_PSS_INIT, 0), "pkey_pss_init"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_PKEY_RSA_CTRL, 0), "pkey_rsa_ctrl"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_PKEY_RSA_CTRL_STR, 0), "pkey_rsa_ctrl_str"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_PKEY_RSA_SIGN, 0), "pkey_rsa_sign"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_PKEY_RSA_VERIFY, 0), "pkey_rsa_verify"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_PKEY_RSA_VERIFYRECOVER, 0), + "pkey_rsa_verifyrecover"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_ALGOR_TO_MD, 0), "rsa_algor_to_md"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_BUILTIN_KEYGEN, 0), "rsa_builtin_keygen"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_CHECK_KEY, 0), "RSA_check_key"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_CHECK_KEY_EX, 0), "RSA_check_key_ex"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_CMS_DECRYPT, 0), "rsa_cms_decrypt"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_CMS_VERIFY, 0), "rsa_cms_verify"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_ITEM_VERIFY, 0), "rsa_item_verify"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_METH_DUP, 0), "RSA_meth_dup"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_METH_NEW, 0), "RSA_meth_new"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_METH_SET1_NAME, 0), "RSA_meth_set1_name"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_MGF1_TO_MD, 0), ""}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_NEW_METHOD, 0), "RSA_new_method"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_NULL, 0), ""}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_NULL_PRIVATE_DECRYPT, 0), ""}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_NULL_PRIVATE_ENCRYPT, 0), ""}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_NULL_PUBLIC_DECRYPT, 0), ""}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_NULL_PUBLIC_ENCRYPT, 0), ""}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_OSSL_PRIVATE_DECRYPT, 0), + "rsa_ossl_private_decrypt"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_OSSL_PRIVATE_ENCRYPT, 0), + "rsa_ossl_private_encrypt"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_OSSL_PUBLIC_DECRYPT, 0), + "rsa_ossl_public_decrypt"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_OSSL_PUBLIC_ENCRYPT, 0), + "rsa_ossl_public_encrypt"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_NONE, 0), + "RSA_padding_add_none"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, 0), "RSA_padding_add_PKCS1_OAEP"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1, 0), "RSA_padding_add_PKCS1_OAEP_mgf1"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_PSS), "RSA_padding_add_PKCS1_PSS"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_PKCS1_PSS, 0), + "RSA_padding_add_PKCS1_PSS"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1, 0), "RSA_padding_add_PKCS1_PSS_mgf1"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1, 0), "RSA_padding_add_PKCS1_type_1"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2, 0), "RSA_padding_add_PKCS1_type_2"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_SSLV23), "RSA_padding_add_SSLv23"}, - {ERR_FUNC(RSA_F_RSA_PADDING_ADD_X931), "RSA_padding_add_X931"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_NONE), "RSA_padding_check_none"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_SSLV23, 0), + "RSA_padding_add_SSLv23"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_ADD_X931, 0), + "RSA_padding_add_X931"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_NONE, 0), + "RSA_padding_check_none"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, 0), "RSA_padding_check_PKCS1_OAEP"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1, 0), "RSA_padding_check_PKCS1_OAEP_mgf1"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1, 0), "RSA_padding_check_PKCS1_type_1"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2, 0), "RSA_padding_check_PKCS1_type_2"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_SSLV23), "RSA_padding_check_SSLv23"}, - {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_X931), "RSA_padding_check_X931"}, - {ERR_FUNC(RSA_F_RSA_PRINT), "RSA_print"}, - {ERR_FUNC(RSA_F_RSA_PRINT_FP), "RSA_print_fp"}, - {ERR_FUNC(RSA_F_RSA_PRIV_ENCODE), "rsa_priv_encode"}, - {ERR_FUNC(RSA_F_RSA_PSS_TO_CTX), "rsa_pss_to_ctx"}, - {ERR_FUNC(RSA_F_RSA_PUB_DECODE), "rsa_pub_decode"}, - {ERR_FUNC(RSA_F_RSA_SETUP_BLINDING), "RSA_setup_blinding"}, - {ERR_FUNC(RSA_F_RSA_SIGN), "RSA_sign"}, - {ERR_FUNC(RSA_F_RSA_SIGN_ASN1_OCTET_STRING), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_SSLV23, 0), + "RSA_padding_check_SSLv23"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PADDING_CHECK_X931, 0), + "RSA_padding_check_X931"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PARAM_DECODE, 0), "rsa_param_decode"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PRINT, 0), "RSA_print"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PRINT_FP, 0), "RSA_print_fp"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PRIV_DECODE, 0), "rsa_priv_decode"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PRIV_ENCODE, 0), "rsa_priv_encode"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PSS_GET_PARAM, 0), "rsa_pss_get_param"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PSS_TO_CTX, 0), "rsa_pss_to_ctx"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_PUB_DECODE, 0), "rsa_pub_decode"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_SETUP_BLINDING, 0), "RSA_setup_blinding"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_SIGN, 0), "RSA_sign"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_SIGN_ASN1_OCTET_STRING, 0), "RSA_sign_ASN1_OCTET_STRING"}, - {ERR_FUNC(RSA_F_RSA_VERIFY), "RSA_verify"}, - {ERR_FUNC(RSA_F_RSA_VERIFY_ASN1_OCTET_STRING), + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_VERIFY, 0), "RSA_verify"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_VERIFY_ASN1_OCTET_STRING, 0), "RSA_verify_ASN1_OCTET_STRING"}, - {ERR_FUNC(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1), "RSA_verify_PKCS1_PSS_mgf1"}, + {ERR_PACK(ERR_LIB_RSA, RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, 0), + "RSA_verify_PKCS1_PSS_mgf1"}, {0, NULL} }; -static ERR_STRING_DATA RSA_str_reasons[] = { - {ERR_REASON(RSA_R_ALGORITHM_MISMATCH), "algorithm mismatch"}, - {ERR_REASON(RSA_R_BAD_E_VALUE), "bad e value"}, - {ERR_REASON(RSA_R_BAD_FIXED_HEADER_DECRYPT), "bad fixed header decrypt"}, - {ERR_REASON(RSA_R_BAD_PAD_BYTE_COUNT), "bad pad byte count"}, - {ERR_REASON(RSA_R_BAD_SIGNATURE), "bad signature"}, - {ERR_REASON(RSA_R_BLOCK_TYPE_IS_NOT_01), "block type is not 01"}, - {ERR_REASON(RSA_R_BLOCK_TYPE_IS_NOT_02), "block type is not 02"}, - {ERR_REASON(RSA_R_DATA_GREATER_THAN_MOD_LEN), - "data greater than mod len"}, - {ERR_REASON(RSA_R_DATA_TOO_LARGE), "data too large"}, - {ERR_REASON(RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE), - "data too large for key size"}, - {ERR_REASON(RSA_R_DATA_TOO_LARGE_FOR_MODULUS), - "data too large for modulus"}, - {ERR_REASON(RSA_R_DATA_TOO_SMALL), "data too small"}, - {ERR_REASON(RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE), - "data too small for key size"}, - {ERR_REASON(RSA_R_DIGEST_DOES_NOT_MATCH), "digest does not match"}, - {ERR_REASON(RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY), - "digest too big for rsa key"}, - {ERR_REASON(RSA_R_DMP1_NOT_CONGRUENT_TO_D), "dmp1 not congruent to d"}, - {ERR_REASON(RSA_R_DMQ1_NOT_CONGRUENT_TO_D), "dmq1 not congruent to d"}, - {ERR_REASON(RSA_R_D_E_NOT_CONGRUENT_TO_1), "d e not congruent to 1"}, - {ERR_REASON(RSA_R_FIRST_OCTET_INVALID), "first octet invalid"}, - {ERR_REASON(RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE), - "illegal or unsupported padding mode"}, - {ERR_REASON(RSA_R_INVALID_DIGEST), "invalid digest"}, - {ERR_REASON(RSA_R_INVALID_DIGEST_LENGTH), "invalid digest length"}, - {ERR_REASON(RSA_R_INVALID_HEADER), "invalid header"}, - {ERR_REASON(RSA_R_INVALID_LABEL), "invalid label"}, - {ERR_REASON(RSA_R_INVALID_MESSAGE_LENGTH), "invalid message length"}, - {ERR_REASON(RSA_R_INVALID_MGF1_MD), "invalid mgf1 md"}, - {ERR_REASON(RSA_R_INVALID_OAEP_PARAMETERS), "invalid oaep parameters"}, - {ERR_REASON(RSA_R_INVALID_PADDING), "invalid padding"}, - {ERR_REASON(RSA_R_INVALID_PADDING_MODE), "invalid padding mode"}, - {ERR_REASON(RSA_R_INVALID_PSS_PARAMETERS), "invalid pss parameters"}, - {ERR_REASON(RSA_R_INVALID_PSS_SALTLEN), "invalid pss saltlen"}, - {ERR_REASON(RSA_R_INVALID_SALT_LENGTH), "invalid salt length"}, - {ERR_REASON(RSA_R_INVALID_TRAILER), "invalid trailer"}, - {ERR_REASON(RSA_R_INVALID_X931_DIGEST), "invalid x931 digest"}, - {ERR_REASON(RSA_R_IQMP_NOT_INVERSE_OF_Q), "iqmp not inverse of q"}, - {ERR_REASON(RSA_R_KEY_SIZE_TOO_SMALL), "key size too small"}, - {ERR_REASON(RSA_R_LAST_OCTET_INVALID), "last octet invalid"}, - {ERR_REASON(RSA_R_MODULUS_TOO_LARGE), "modulus too large"}, - {ERR_REASON(RSA_R_NO_PUBLIC_EXPONENT), "no public exponent"}, - {ERR_REASON(RSA_R_NULL_BEFORE_BLOCK_MISSING), - "null before block missing"}, - {ERR_REASON(RSA_R_N_DOES_NOT_EQUAL_P_Q), "n does not equal p q"}, - {ERR_REASON(RSA_R_OAEP_DECODING_ERROR), "oaep decoding error"}, - {ERR_REASON(RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE), - "operation not supported for this keytype"}, - {ERR_REASON(RSA_R_PADDING_CHECK_FAILED), "padding check failed"}, - {ERR_REASON(RSA_R_PKCS_DECODING_ERROR), "pkcs decoding error"}, - {ERR_REASON(RSA_R_P_NOT_PRIME), "p not prime"}, - {ERR_REASON(RSA_R_Q_NOT_PRIME), "q not prime"}, - {ERR_REASON(RSA_R_RSA_OPERATIONS_NOT_SUPPORTED), - "rsa operations not supported"}, - {ERR_REASON(RSA_R_SLEN_CHECK_FAILED), "salt length check failed"}, - {ERR_REASON(RSA_R_SLEN_RECOVERY_FAILED), "salt length recovery failed"}, - {ERR_REASON(RSA_R_SSLV3_ROLLBACK_ATTACK), "sslv3 rollback attack"}, - {ERR_REASON(RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD), - "the asn1 object identifier is not known for this md"}, - {ERR_REASON(RSA_R_UNKNOWN_ALGORITHM_TYPE), "unknown algorithm type"}, - {ERR_REASON(RSA_R_UNKNOWN_DIGEST), "unknown digest"}, - {ERR_REASON(RSA_R_UNKNOWN_MASK_DIGEST), "unknown mask digest"}, - {ERR_REASON(RSA_R_UNKNOWN_PADDING_TYPE), "unknown padding type"}, - {ERR_REASON(RSA_R_UNSUPPORTED_ENCRYPTION_TYPE), - "unsupported encryption type"}, - {ERR_REASON(RSA_R_UNSUPPORTED_LABEL_SOURCE), "unsupported label source"}, - {ERR_REASON(RSA_R_UNSUPPORTED_MASK_ALGORITHM), - "unsupported mask algorithm"}, - {ERR_REASON(RSA_R_UNSUPPORTED_MASK_PARAMETER), - "unsupported mask parameter"}, - {ERR_REASON(RSA_R_UNSUPPORTED_SIGNATURE_TYPE), - "unsupported signature type"}, - {ERR_REASON(RSA_R_VALUE_MISSING), "value missing"}, - {ERR_REASON(RSA_R_WRONG_SIGNATURE_LENGTH), "wrong signature length"}, +static const ERR_STRING_DATA RSA_str_reasons[] = { + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_ALGORITHM_MISMATCH), "algorithm mismatch"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_E_VALUE), "bad e value"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_FIXED_HEADER_DECRYPT), + "bad fixed header decrypt"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_PAD_BYTE_COUNT), "bad pad byte count"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BAD_SIGNATURE), "bad signature"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BLOCK_TYPE_IS_NOT_01), + "block type is not 01"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_BLOCK_TYPE_IS_NOT_02), + "block type is not 02"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_GREATER_THAN_MOD_LEN), + "data greater than mod len"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_LARGE), "data too large"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE), + "data too large for key size"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_LARGE_FOR_MODULUS), + "data too large for modulus"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_SMALL), "data too small"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE), + "data too small for key size"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DIGEST_DOES_NOT_MATCH), + "digest does not match"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DIGEST_NOT_ALLOWED), "digest not allowed"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY), + "digest too big for rsa key"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DMP1_NOT_CONGRUENT_TO_D), + "dmp1 not congruent to d"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_DMQ1_NOT_CONGRUENT_TO_D), + "dmq1 not congruent to d"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_D_E_NOT_CONGRUENT_TO_1), + "d e not congruent to 1"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_FIRST_OCTET_INVALID), + "first octet invalid"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE), + "illegal or unsupported padding mode"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_DIGEST), "invalid digest"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_DIGEST_LENGTH), + "invalid digest length"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_HEADER), "invalid header"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_LABEL), "invalid label"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_MESSAGE_LENGTH), + "invalid message length"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_MGF1_MD), "invalid mgf1 md"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_MULTI_PRIME_KEY), + "invalid multi prime key"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_OAEP_PARAMETERS), + "invalid oaep parameters"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_PADDING), "invalid padding"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_PADDING_MODE), + "invalid padding mode"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_PSS_PARAMETERS), + "invalid pss parameters"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_PSS_SALTLEN), + "invalid pss saltlen"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_SALT_LENGTH), + "invalid salt length"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_TRAILER), "invalid trailer"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_INVALID_X931_DIGEST), + "invalid x931 digest"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_IQMP_NOT_INVERSE_OF_Q), + "iqmp not inverse of q"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_KEY_PRIME_NUM_INVALID), + "key prime num invalid"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_KEY_SIZE_TOO_SMALL), "key size too small"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_LAST_OCTET_INVALID), "last octet invalid"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_MGF1_DIGEST_NOT_ALLOWED), + "mgf1 digest not allowed"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_MODULUS_TOO_LARGE), "modulus too large"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R), + "mp coefficient not inverse of r"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D), + "mp exponent not congruent to d"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_MP_R_NOT_PRIME), "mp r not prime"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_NO_PUBLIC_EXPONENT), "no public exponent"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_NULL_BEFORE_BLOCK_MISSING), + "null before block missing"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES), + "n does not equal product of primes"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_N_DOES_NOT_EQUAL_P_Q), + "n does not equal p q"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_OAEP_DECODING_ERROR), + "oaep decoding error"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE), + "operation not supported for this keytype"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_PADDING_CHECK_FAILED), + "padding check failed"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_PKCS_DECODING_ERROR), + "pkcs decoding error"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_PSS_SALTLEN_TOO_SMALL), + "pss saltlen too small"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_P_NOT_PRIME), "p not prime"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_Q_NOT_PRIME), "q not prime"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED), + "rsa operations not supported"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_SLEN_CHECK_FAILED), + "salt length check failed"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_SLEN_RECOVERY_FAILED), + "salt length recovery failed"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_SSLV3_ROLLBACK_ATTACK), + "sslv3 rollback attack"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD), + "the asn1 object identifier is not known for this md"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNKNOWN_ALGORITHM_TYPE), + "unknown algorithm type"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNKNOWN_DIGEST), "unknown digest"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNKNOWN_MASK_DIGEST), + "unknown mask digest"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNKNOWN_PADDING_TYPE), + "unknown padding type"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNSUPPORTED_ENCRYPTION_TYPE), + "unsupported encryption type"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNSUPPORTED_LABEL_SOURCE), + "unsupported label source"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNSUPPORTED_MASK_ALGORITHM), + "unsupported mask algorithm"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNSUPPORTED_MASK_PARAMETER), + "unsupported mask parameter"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_UNSUPPORTED_SIGNATURE_TYPE), + "unsupported signature type"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_VALUE_MISSING), "value missing"}, + {ERR_PACK(ERR_LIB_RSA, 0, RSA_R_WRONG_SIGNATURE_LENGTH), + "wrong signature length"}, {0, NULL} }; @@ -175,10 +234,9 @@ static ERR_STRING_DATA RSA_str_reasons[] = { int ERR_load_RSA_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(RSA_str_functs[0].error) == NULL) { - ERR_load_strings(0, RSA_str_functs); - ERR_load_strings(0, RSA_str_reasons); + ERR_load_strings_const(RSA_str_functs); + ERR_load_strings_const(RSA_str_reasons); } #endif return 1; diff --git a/crypto/rsa/rsa_gen.c b/crypto/rsa/rsa_gen.c index 9af43e05..d8ef3c7e 100644 --- a/crypto/rsa/rsa_gen.c +++ b/crypto/rsa/rsa_gen.c @@ -19,7 +19,7 @@ #include #include "rsa_locl.h" -static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, +static int rsa_builtin_keygen(RSA *rsa, int bits, int primes, BIGNUM *e_value, BN_GENCB *cb); /* @@ -31,29 +31,60 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, */ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) { - if (rsa->meth->rsa_keygen) + if (rsa->meth->rsa_keygen != NULL) return rsa->meth->rsa_keygen(rsa, bits, e_value, cb); - return rsa_builtin_keygen(rsa, bits, e_value, cb); + + return RSA_generate_multi_prime_key(rsa, bits, RSA_DEFAULT_PRIME_NUM, + e_value, cb); } -static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, +int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, + BIGNUM *e_value, BN_GENCB *cb) +{ + /* multi-prime is only supported with the builtin key generation */ + if (rsa->meth->rsa_multi_prime_keygen != NULL) { + return rsa->meth->rsa_multi_prime_keygen(rsa, bits, primes, + e_value, cb); + } else if (rsa->meth->rsa_keygen != NULL) { + /* + * However, if rsa->meth implements only rsa_keygen, then we + * have to honour it in 2-prime case and assume that it wouldn't + * know what to do with multi-prime key generated by builtin + * subroutine... + */ + if (primes == 2) + return rsa->meth->rsa_keygen(rsa, bits, e_value, cb); + else + return 0; + } + + return rsa_builtin_keygen(rsa, bits, primes, e_value, cb); +} + +static int rsa_builtin_keygen(RSA *rsa, int bits, int primes, BIGNUM *e_value, BN_GENCB *cb) { - BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *r3 = NULL, *tmp; - int bitsp, bitsq, ok = -1, n = 0; + BIGNUM *r0 = NULL, *r1 = NULL, *r2 = NULL, *tmp, *prime; + int ok = -1, n = 0, bitsr[RSA_MAX_PRIME_NUM], bitse = 0; + int i = 0, quo = 0, rmd = 0, adj = 0, retries = 0; + RSA_PRIME_INFO *pinfo = NULL; + STACK_OF(RSA_PRIME_INFO) *prime_infos = NULL; BN_CTX *ctx = NULL; + BN_ULONG bitst = 0; unsigned long error = 0; - /* - * When generating ridiculously small keys, we can get stuck - * continually regenerating the same prime values. - */ - if (bits < 16) { + if (bits < RSA_MIN_MODULUS_BITS) { ok = 0; /* we set our own err */ RSAerr(RSA_F_RSA_BUILTIN_KEYGEN, RSA_R_KEY_SIZE_TOO_SMALL); goto err; } + if (primes < RSA_DEFAULT_PRIME_NUM || primes > rsa_multip_cap(bits)) { + ok = 0; /* we set our own err */ + RSAerr(RSA_F_RSA_BUILTIN_KEYGEN, RSA_R_KEY_PRIME_NUM_INVALID); + goto err; + } + ctx = BN_CTX_new(); if (ctx == NULL) goto err; @@ -61,12 +92,15 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, r0 = BN_CTX_get(ctx); r1 = BN_CTX_get(ctx); r2 = BN_CTX_get(ctx); - r3 = BN_CTX_get(ctx); - if (r3 == NULL) + if (r2 == NULL) goto err; - bitsp = (bits + 1) / 2; - bitsq = bits - bitsp; + /* divide bits into 'primes' pieces evenly */ + quo = bits / primes; + rmd = bits % primes; + + for (i = 0; i < primes; i++) + bitsr[i] = (i < rmd) ? quo + 1 : quo; /* We need the RSA components non-NULL */ if (!rsa->n && ((rsa->n = BN_new()) == NULL)) @@ -86,81 +120,201 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, if (!rsa->iqmp && ((rsa->iqmp = BN_secure_new()) == NULL)) goto err; + /* initialize multi-prime components */ + if (primes > RSA_DEFAULT_PRIME_NUM) { + rsa->version = RSA_ASN1_VERSION_MULTI; + prime_infos = sk_RSA_PRIME_INFO_new_reserve(NULL, primes - 2); + if (prime_infos == NULL) + goto err; + if (rsa->prime_infos != NULL) { + /* could this happen? */ + sk_RSA_PRIME_INFO_pop_free(rsa->prime_infos, rsa_multip_info_free); + } + rsa->prime_infos = prime_infos; + + /* prime_info from 2 to |primes| -1 */ + for (i = 2; i < primes; i++) { + pinfo = rsa_multip_info_new(); + if (pinfo == NULL) + goto err; + (void)sk_RSA_PRIME_INFO_push(prime_infos, pinfo); + } + } + if (BN_copy(rsa->e, e_value) == NULL) goto err; - BN_set_flags(r2, BN_FLG_CONSTTIME); - /* generate p and q */ - for (;;) { - if (!BN_generate_prime_ex(rsa->p, bitsp, 0, NULL, NULL, cb)) - goto err; - if (!BN_sub(r2, rsa->p, BN_value_one())) - goto err; - ERR_set_mark(); - if (BN_mod_inverse(r1, r2, rsa->e, ctx) != NULL) { - /* GCD == 1 since inverse exists */ - break; - } - error = ERR_peek_last_error(); - if (ERR_GET_LIB(error) == ERR_LIB_BN - && ERR_GET_REASON(error) == BN_R_NO_INVERSE) { - /* GCD != 1 */ - ERR_pop_to_mark(); + /* generate p, q and other primes (if any) */ + for (i = 0; i < primes; i++) { + adj = 0; + retries = 0; + + if (i == 0) { + prime = rsa->p; + } else if (i == 1) { + prime = rsa->q; } else { - goto err; + pinfo = sk_RSA_PRIME_INFO_value(prime_infos, i - 2); + prime = pinfo->r; } - if (!BN_GENCB_call(cb, 2, n++)) - goto err; - } - if (!BN_GENCB_call(cb, 3, 0)) - goto err; - for (;;) { - do { - if (!BN_generate_prime_ex(rsa->q, bitsq, 0, NULL, NULL, cb)) + + for (;;) { + redo: + if (!BN_generate_prime_ex(prime, bitsr[i] + adj, 0, NULL, NULL, cb)) + goto err; + /* + * prime should not be equal to p, q, r_3... + * (those primes prior to this one) + */ + { + int j; + + for (j = 0; j < i; j++) { + BIGNUM *prev_prime; + + if (j == 0) + prev_prime = rsa->p; + else if (j == 1) + prev_prime = rsa->q; + else + prev_prime = sk_RSA_PRIME_INFO_value(prime_infos, + j - 2)->r; + + if (!BN_cmp(prime, prev_prime)) { + goto redo; + } + } + } + if (!BN_sub(r2, prime, BN_value_one())) + goto err; + ERR_set_mark(); + BN_set_flags(r2, BN_FLG_CONSTTIME); + if (BN_mod_inverse(r1, r2, rsa->e, ctx) != NULL) { + /* GCD == 1 since inverse exists */ + break; + } + error = ERR_peek_last_error(); + if (ERR_GET_LIB(error) == ERR_LIB_BN + && ERR_GET_REASON(error) == BN_R_NO_INVERSE) { + /* GCD != 1 */ + ERR_pop_to_mark(); + } else { + goto err; + } + if (!BN_GENCB_call(cb, 2, n++)) goto err; - } while (BN_cmp(rsa->p, rsa->q) == 0); - if (!BN_sub(r2, rsa->q, BN_value_one())) - goto err; - ERR_set_mark(); - if (BN_mod_inverse(r1, r2, rsa->e, ctx) != NULL) { - /* GCD == 1 since inverse exists */ - break; } - error = ERR_peek_last_error(); - if (ERR_GET_LIB(error) == ERR_LIB_BN - && ERR_GET_REASON(error) == BN_R_NO_INVERSE) { - /* GCD != 1 */ - ERR_pop_to_mark(); + + bitse += bitsr[i]; + + /* calculate n immediately to see if it's sufficient */ + if (i == 1) { + /* we get at least 2 primes */ + if (!BN_mul(r1, rsa->p, rsa->q, ctx)) + goto err; + } else if (i != 0) { + /* modulus n = p * q * r_3 * r_4 ... */ + if (!BN_mul(r1, rsa->n, prime, ctx)) + goto err; } else { - goto err; + /* i == 0, do nothing */ + if (!BN_GENCB_call(cb, 3, i)) + goto err; + continue; } - if (!BN_GENCB_call(cb, 2, n++)) + /* + * if |r1|, product of factors so far, is not as long as expected + * (by checking the first 4 bits are less than 0x9 or greater than + * 0xF). If so, re-generate the last prime. + * + * NOTE: This actually can't happen in two-prime case, because of + * the way factors are generated. + * + * Besides, another consideration is, for multi-prime case, even the + * length modulus is as long as expected, the modulus could start at + * 0x8, which could be utilized to distinguish a multi-prime private + * key by using the modulus in a certificate. This is also covered + * by checking the length should not be less than 0x9. + */ + if (!BN_rshift(r2, r1, bitse - 4)) + goto err; + bitst = BN_get_word(r2); + + if (bitst < 0x9 || bitst > 0xF) { + /* + * For keys with more than 4 primes, we attempt longer factor to + * meet length requirement. + * + * Otherwise, we just re-generate the prime with the same length. + * + * This strategy has the following goals: + * + * 1. 1024-bit factors are effcient when using 3072 and 4096-bit key + * 2. stay the same logic with normal 2-prime key + */ + bitse -= bitsr[i]; + if (!BN_GENCB_call(cb, 2, n++)) + goto err; + if (primes > 4) { + if (bitst < 0x9) + adj++; + else + adj--; + } else if (retries == 4) { + /* + * re-generate all primes from scratch, mainly used + * in 4 prime case to avoid long loop. Max retry times + * is set to 4. + */ + i = -1; + bitse = 0; + continue; + } + retries++; + goto redo; + } + /* save product of primes for further use, for multi-prime only */ + if (i > 1 && BN_copy(pinfo->pp, rsa->n) == NULL) + goto err; + if (BN_copy(rsa->n, r1) == NULL) + goto err; + if (!BN_GENCB_call(cb, 3, i)) goto err; } - if (!BN_GENCB_call(cb, 3, 1)) - goto err; + if (BN_cmp(rsa->p, rsa->q) < 0) { tmp = rsa->p; rsa->p = rsa->q; rsa->q = tmp; } - /* calculate n */ - if (!BN_mul(rsa->n, rsa->p, rsa->q, ctx)) - goto err; - /* calculate d */ + + /* p - 1 */ if (!BN_sub(r1, rsa->p, BN_value_one())) - goto err; /* p-1 */ + goto err; + /* q - 1 */ if (!BN_sub(r2, rsa->q, BN_value_one())) - goto err; /* q-1 */ + goto err; + /* (p - 1)(q - 1) */ if (!BN_mul(r0, r1, r2, ctx)) - goto err; /* (p-1)(q-1) */ + goto err; + /* multi-prime */ + for (i = 2; i < primes; i++) { + pinfo = sk_RSA_PRIME_INFO_value(prime_infos, i - 2); + /* save r_i - 1 to pinfo->d temporarily */ + if (!BN_sub(pinfo->d, pinfo->r, BN_value_one())) + goto err; + if (!BN_mul(r0, r0, pinfo->d, ctx)) + goto err; + } + { BIGNUM *pr0 = BN_new(); if (pr0 == NULL) goto err; + BN_with_flags(pr0, r0, BN_FLG_CONSTTIME); if (!BN_mod_inverse(rsa->d, rsa->e, pr0, ctx)) { BN_free(pr0); @@ -175,15 +329,26 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, if (d == NULL) goto err; + BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME); - if ( /* calculate d mod (p-1) */ - !BN_mod(rsa->dmp1, d, r1, ctx) - /* calculate d mod (q-1) */ + /* calculate d mod (p-1) and d mod (q - 1) */ + if (!BN_mod(rsa->dmp1, d, r1, ctx) || !BN_mod(rsa->dmq1, d, r2, ctx)) { BN_free(d); goto err; } + + /* calculate CRT exponents */ + for (i = 2; i < primes; i++) { + pinfo = sk_RSA_PRIME_INFO_value(prime_infos, i - 2); + /* pinfo->d == r_i - 1 */ + if (!BN_mod(pinfo->d, d, pinfo->d, ctx)) { + BN_free(d); + goto err; + } + } + /* We MUST free d before any further use of rsa->d */ BN_free(d); } @@ -200,6 +365,17 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_free(p); goto err; } + + /* calculate CRT coefficient for other primes */ + for (i = 2; i < primes; i++) { + pinfo = sk_RSA_PRIME_INFO_value(prime_infos, i - 2); + BN_with_flags(p, pinfo->r, BN_FLG_CONSTTIME); + if (!BN_mod_inverse(pinfo->t, pinfo->pp, p, ctx)) { + BN_free(p); + goto err; + } + } + /* We MUST free p before any further use of rsa->p */ BN_free(p); } @@ -213,6 +389,5 @@ static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, if (ctx != NULL) BN_CTX_end(ctx); BN_CTX_free(ctx); - return ok; } diff --git a/crypto/rsa/rsa_lib.c b/crypto/rsa/rsa_lib.c index e1377a06..133ba218 100644 --- a/crypto/rsa/rsa_lib.c +++ b/crypto/rsa/rsa_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -10,9 +10,11 @@ #include #include #include "internal/cryptlib.h" -#include +#include "internal/refcount.h" #include "internal/bn_int.h" #include +#include +#include "internal/evp_int.h" #include "rsa_locl.h" RSA *RSA_new(void) @@ -71,8 +73,9 @@ RSA *RSA_new_method(ENGINE *engine) goto err; } ret->engine = engine; - } else + } else { ret->engine = ENGINE_get_default_RSA(); + } if (ret->engine) { ret->meth = ENGINE_get_RSA(ret->engine); if (ret->meth == NULL) { @@ -106,7 +109,7 @@ void RSA_free(RSA *r) if (r == NULL) return; - CRYPTO_atomic_add(&r->references, -1, &i, r->lock); + CRYPTO_DOWN_REF(&r->references, &i, r->lock); REF_PRINT_COUNT("RSA", r); if (i > 0) return; @@ -130,6 +133,8 @@ void RSA_free(RSA *r) BN_clear_free(r->dmp1); BN_clear_free(r->dmq1); BN_clear_free(r->iqmp); + RSA_PSS_PARAMS_free(r->pss); + sk_RSA_PRIME_INFO_pop_free(r->prime_infos, rsa_multip_info_free); BN_BLINDING_free(r->blinding); BN_BLINDING_free(r->mt_blinding); OPENSSL_free(r->bignum_data); @@ -140,27 +145,36 @@ int RSA_up_ref(RSA *r) { int i; - if (CRYPTO_atomic_add(&r->references, 1, &i, r->lock) <= 0) + if (CRYPTO_UP_REF(&r->references, &i, r->lock) <= 0) return 0; REF_PRINT_COUNT("RSA", r); REF_ASSERT_ISNT(i < 2); - return ((i > 1) ? 1 : 0); + return i > 1 ? 1 : 0; } int RSA_set_ex_data(RSA *r, int idx, void *arg) { - return (CRYPTO_set_ex_data(&r->ex_data, idx, arg)); + return CRYPTO_set_ex_data(&r->ex_data, idx, arg); } void *RSA_get_ex_data(const RSA *r, int idx) { - return (CRYPTO_get_ex_data(&r->ex_data, idx)); + return CRYPTO_get_ex_data(&r->ex_data, idx); } int RSA_security_bits(const RSA *rsa) { - return BN_security_bits(BN_num_bits(rsa->n), -1); + int bits = BN_num_bits(rsa->n); + + if (rsa->version == RSA_ASN1_VERSION_MULTI) { + /* This ought to mean that we have private key at hand. */ + int ex_primes = sk_RSA_PRIME_INFO_num(rsa->prime_infos); + + if (ex_primes <= 0 || (ex_primes + 2) > rsa_multip_cap(bits)) + return 0; + } + return BN_security_bits(bits, -1); } int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d) @@ -236,6 +250,71 @@ int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp) return 1; } +/* + * Is it better to export RSA_PRIME_INFO structure + * and related functions to let user pass a triplet? + */ +int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], + BIGNUM *coeffs[], int pnum) +{ + STACK_OF(RSA_PRIME_INFO) *prime_infos, *old = NULL; + RSA_PRIME_INFO *pinfo; + int i; + + if (primes == NULL || exps == NULL || coeffs == NULL || pnum == 0) + return 0; + + prime_infos = sk_RSA_PRIME_INFO_new_reserve(NULL, pnum); + if (prime_infos == NULL) + return 0; + + if (r->prime_infos != NULL) + old = r->prime_infos; + + for (i = 0; i < pnum; i++) { + pinfo = rsa_multip_info_new(); + if (pinfo == NULL) + goto err; + if (primes[i] != NULL && exps[i] != NULL && coeffs[i] != NULL) { + BN_free(pinfo->r); + BN_free(pinfo->d); + BN_free(pinfo->t); + pinfo->r = primes[i]; + pinfo->d = exps[i]; + pinfo->t = coeffs[i]; + } else { + rsa_multip_info_free(pinfo); + goto err; + } + (void)sk_RSA_PRIME_INFO_push(prime_infos, pinfo); + } + + r->prime_infos = prime_infos; + + if (!rsa_multip_calc_product(r)) { + r->prime_infos = old; + goto err; + } + + if (old != NULL) { + /* + * This is hard to deal with, since the old infos could + * also be set by this function and r, d, t should not + * be freed in that case. So currently, stay consistent + * with other *set0* functions: just free it... + */ + sk_RSA_PRIME_INFO_pop_free(old, rsa_multip_info_free); + } + + r->version = RSA_ASN1_VERSION_MULTI; + + return 1; + err: + /* r, d, t should not be freed */ + sk_RSA_PRIME_INFO_pop_free(prime_infos, rsa_multip_info_free_ex); + return 0; +} + void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d) { @@ -255,6 +334,36 @@ void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q) *q = r->q; } +int RSA_get_multi_prime_extra_count(const RSA *r) +{ + int pnum; + + pnum = sk_RSA_PRIME_INFO_num(r->prime_infos); + if (pnum <= 0) + pnum = 0; + return pnum; +} + +int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]) +{ + int pnum, i; + RSA_PRIME_INFO *pinfo; + + if ((pnum = RSA_get_multi_prime_extra_count(r)) == 0) + return 0; + + /* + * return other primes + * it's caller's responsibility to allocate oth_primes[pnum] + */ + for (i = 0; i < pnum; i++) { + pinfo = sk_RSA_PRIME_INFO_value(r->prime_infos, i); + primes[i] = pinfo->r; + } + + return 1; +} + void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp) @@ -267,6 +376,32 @@ void RSA_get0_crt_params(const RSA *r, *iqmp = r->iqmp; } +int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], + const BIGNUM *coeffs[]) +{ + int pnum; + + if ((pnum = RSA_get_multi_prime_extra_count(r)) == 0) + return 0; + + /* return other primes */ + if (exps != NULL || coeffs != NULL) { + RSA_PRIME_INFO *pinfo; + int i; + + /* it's the user's job to guarantee the buffer length */ + for (i = 0; i < pnum; i++) { + pinfo = sk_RSA_PRIME_INFO_value(r->prime_infos, i); + if (exps != NULL) + exps[i] = pinfo->d; + if (coeffs != NULL) + coeffs[i] = pinfo->t; + } + } + + return 1; +} + void RSA_clear_flags(RSA *r, int flags) { r->flags &= ~flags; @@ -282,7 +417,23 @@ void RSA_set_flags(RSA *r, int flags) r->flags |= flags; } +int RSA_get_version(RSA *r) +{ + /* { two-prime(0), multi(1) } */ + return r->version; +} + ENGINE *RSA_get0_engine(const RSA *r) { return r->engine; } + +int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2) +{ + /* If key type not RSA or RSA-PSS return error */ + if (ctx != NULL && ctx->pmeth != NULL + && ctx->pmeth->pkey_id != EVP_PKEY_RSA + && ctx->pmeth->pkey_id != EVP_PKEY_RSA_PSS) + return -1; + return EVP_PKEY_CTX_ctrl(ctx, -1, optype, cmd, p1, p2); +} diff --git a/crypto/rsa/rsa_locl.h b/crypto/rsa/rsa_locl.h index 5d16aa6f..2b94462a 100644 --- a/crypto/rsa/rsa_locl.h +++ b/crypto/rsa/rsa_locl.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,14 +8,30 @@ */ #include +#include "internal/refcount.h" + +#define RSA_MAX_PRIME_NUM 5 +#define RSA_MIN_MODULUS_BITS 512 + +typedef struct rsa_prime_info_st { + BIGNUM *r; + BIGNUM *d; + BIGNUM *t; + /* save product of primes prior to this one */ + BIGNUM *pp; + BN_MONT_CTX *m; +} RSA_PRIME_INFO; + +DECLARE_ASN1_ITEM(RSA_PRIME_INFO) +DEFINE_STACK_OF(RSA_PRIME_INFO) struct rsa_st { /* * The first parameter is used to pickup errors where this is passed - * instead of aEVP_PKEY, it is set to 0 + * instead of an EVP_PKEY, it is set to 0 */ int pad; - long version; + int32_t version; const RSA_METHOD *meth; /* functional reference if 'meth' is ENGINE-provided */ ENGINE *engine; @@ -27,9 +43,13 @@ struct rsa_st { BIGNUM *dmp1; BIGNUM *dmq1; BIGNUM *iqmp; + /* for multi-prime RSA, defined in RFC 8017 */ + STACK_OF(RSA_PRIME_INFO) *prime_infos; + /* If a PSS only key this contains the parameter restrictions */ + RSA_PSS_PARAMS *pss; /* be careful using this if the RSA structure is shared */ CRYPTO_EX_DATA ex_data; - int references; + CRYPTO_REF_COUNT references; int flags; /* Used to cache montgomery values */ BN_MONT_CTX *_method_mod_n; @@ -88,9 +108,25 @@ struct rsa_meth_st { * things as "builtin software" implementations. */ int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); + int (*rsa_multi_prime_keygen) (RSA *rsa, int bits, int primes, + BIGNUM *e, BN_GENCB *cb); }; extern int int_rsa_verify(int dtype, const unsigned char *m, unsigned int m_len, unsigned char *rm, size_t *prm_len, const unsigned char *sigbuf, size_t siglen, RSA *rsa); +/* Macros to test if a pkey or ctx is for a PSS key */ +#define pkey_is_pss(pkey) (pkey->ameth->pkey_id == EVP_PKEY_RSA_PSS) +#define pkey_ctx_is_pss(ctx) (ctx->pmeth->pkey_id == EVP_PKEY_RSA_PSS) + +RSA_PSS_PARAMS *rsa_pss_params_create(const EVP_MD *sigmd, + const EVP_MD *mgf1md, int saltlen); +int rsa_pss_get_param(const RSA_PSS_PARAMS *pss, const EVP_MD **pmd, + const EVP_MD **pmgf1md, int *psaltlen); +/* internal function to clear and free multi-prime parameters */ +void rsa_multip_info_free_ex(RSA_PRIME_INFO *pinfo); +void rsa_multip_info_free(RSA_PRIME_INFO *pinfo); +RSA_PRIME_INFO *rsa_multip_info_new(void); +int rsa_multip_calc_product(RSA *rsa); +int rsa_multip_cap(int bits); diff --git a/crypto/rsa/rsa_meth.c b/crypto/rsa/rsa_meth.c index 9480abd7..5dccc330 100644 --- a/crypto/rsa/rsa_meth.c +++ b/crypto/rsa/rsa_meth.c @@ -271,3 +271,17 @@ int RSA_meth_set_keygen(RSA_METHOD *meth, return 1; } +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb) +{ + return meth->rsa_multi_prime_keygen; +} + +int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, + int (*keygen) (RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb)) +{ + meth->rsa_multi_prime_keygen = keygen; + return 1; +} diff --git a/crypto/rsa/rsa_mp.c b/crypto/rsa/rsa_mp.c new file mode 100644 index 00000000..b8727fa2 --- /dev/null +++ b/crypto/rsa/rsa_mp.c @@ -0,0 +1,113 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017 BaishanCloud. All rights reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 +#include "rsa_locl.h" + +void rsa_multip_info_free_ex(RSA_PRIME_INFO *pinfo) +{ + /* free pp and pinfo only */ + BN_clear_free(pinfo->pp); + OPENSSL_free(pinfo); +} + +void rsa_multip_info_free(RSA_PRIME_INFO *pinfo) +{ + /* free a RSA_PRIME_INFO structure */ + BN_clear_free(pinfo->r); + BN_clear_free(pinfo->d); + BN_clear_free(pinfo->t); + rsa_multip_info_free_ex(pinfo); +} + +RSA_PRIME_INFO *rsa_multip_info_new(void) +{ + RSA_PRIME_INFO *pinfo; + + /* create a RSA_PRIME_INFO structure */ + pinfo = OPENSSL_zalloc(sizeof(RSA_PRIME_INFO)); + if (pinfo == NULL) + return NULL; + if ((pinfo->r = BN_secure_new()) == NULL) + goto err; + if ((pinfo->d = BN_secure_new()) == NULL) + goto err; + if ((pinfo->t = BN_secure_new()) == NULL) + goto err; + if ((pinfo->pp = BN_secure_new()) == NULL) + goto err; + + return pinfo; + + err: + BN_free(pinfo->r); + BN_free(pinfo->d); + BN_free(pinfo->t); + BN_free(pinfo->pp); + OPENSSL_free(pinfo); + return NULL; +} + +/* Refill products of primes */ +int rsa_multip_calc_product(RSA *rsa) +{ + RSA_PRIME_INFO *pinfo; + BIGNUM *p1 = NULL, *p2 = NULL; + BN_CTX *ctx = NULL; + int i, rv = 0, ex_primes; + + if ((ex_primes = sk_RSA_PRIME_INFO_num(rsa->prime_infos)) <= 0) { + /* invalid */ + goto err; + } + + if ((ctx = BN_CTX_new()) == NULL) + goto err; + + /* calculate pinfo->pp = p * q for first 'extra' prime */ + p1 = rsa->p; + p2 = rsa->q; + + for (i = 0; i < ex_primes; i++) { + pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); + if (pinfo->pp == NULL) { + pinfo->pp = BN_secure_new(); + if (pinfo->pp == NULL) + goto err; + } + if (!BN_mul(pinfo->pp, p1, p2, ctx)) + goto err; + /* save previous one */ + p1 = pinfo->pp; + p2 = pinfo->r; + } + + rv = 1; + err: + BN_CTX_free(ctx); + return rv; +} + +int rsa_multip_cap(int bits) +{ + int cap = 5; + + if (bits < 1024) + cap = 2; + else if (bits < 4096) + cap = 3; + else if (bits < 8192) + cap = 4; + + if (cap > RSA_MAX_PRIME_NUM) + cap = RSA_MAX_PRIME_NUM; + + return cap; +} diff --git a/crypto/rsa/rsa_none.c b/crypto/rsa/rsa_none.c index b78756d1..f16cc670 100644 --- a/crypto/rsa/rsa_none.c +++ b/crypto/rsa/rsa_none.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,16 +16,16 @@ int RSA_padding_add_none(unsigned char *to, int tlen, { if (flen > tlen) { RSAerr(RSA_F_RSA_PADDING_ADD_NONE, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); - return (0); + return 0; } if (flen < tlen) { RSAerr(RSA_F_RSA_PADDING_ADD_NONE, RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE); - return (0); + return 0; } memcpy(to, from, (unsigned int)flen); - return (1); + return 1; } int RSA_padding_check_none(unsigned char *to, int tlen, @@ -34,10 +34,10 @@ int RSA_padding_check_none(unsigned char *to, int tlen, if (flen > tlen) { RSAerr(RSA_F_RSA_PADDING_CHECK_NONE, RSA_R_DATA_TOO_LARGE); - return (-1); + return -1; } memset(to, 0, tlen - flen); memcpy(to + tlen - flen, from, flen); - return (tlen); + return tlen; } diff --git a/crypto/rsa/rsa_null.c b/crypto/rsa/rsa_null.c deleted file mode 100644 index d3394941..00000000 --- a/crypto/rsa/rsa_null.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * 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 - */ - -#include -#include "internal/cryptlib.h" -#include -#include "rsa_locl.h" - -/* - * This is a dummy RSA implementation that just returns errors when called. - * It is designed to allow some RSA functions to work while stopping those - * covered by the RSA patent. That is RSA, encryption, decryption, signing - * and verify is not allowed but RSA key generation, key checking and other - * operations (like storing RSA keys) are permitted. - */ - -static int RSA_null_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -static int RSA_null_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -static int RSA_null_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -static int RSA_null_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); -static int RSA_null_init(RSA *rsa); -static int RSA_null_finish(RSA *rsa); -static RSA_METHOD rsa_null_meth = { - "Null RSA", - RSA_null_public_encrypt, - RSA_null_public_decrypt, - RSA_null_private_encrypt, - RSA_null_private_decrypt, - NULL, - NULL, - RSA_null_init, - RSA_null_finish, - 0, - NULL, - NULL, - NULL, - NULL -}; - -const RSA_METHOD *RSA_null_method(void) -{ - return (&rsa_null_meth); -} - -static int RSA_null_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding) -{ - RSAerr(RSA_F_RSA_NULL_PUBLIC_ENCRYPT, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED); - return -1; -} - -static int RSA_null_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding) -{ - RSAerr(RSA_F_RSA_NULL_PRIVATE_ENCRYPT, - RSA_R_RSA_OPERATIONS_NOT_SUPPORTED); - return -1; -} - -static int RSA_null_private_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding) -{ - RSAerr(RSA_F_RSA_NULL_PRIVATE_DECRYPT, - RSA_R_RSA_OPERATIONS_NOT_SUPPORTED); - return -1; -} - -static int RSA_null_public_decrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding) -{ - RSAerr(RSA_F_RSA_NULL_PUBLIC_DECRYPT, RSA_R_RSA_OPERATIONS_NOT_SUPPORTED); - return -1; -} - -static int RSA_null_init(RSA *rsa) -{ - return (1); -} - -static int RSA_null_finish(RSA *rsa) -{ - return (1); -} diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c index 4878d495..d4de71df 100644 --- a/crypto/rsa/rsa_oaep.c +++ b/crypto/rsa/rsa_oaep.c @@ -78,11 +78,6 @@ int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, memcpy(db + emlen - flen - mdlen, from, (unsigned int)flen); if (RAND_bytes(seed, mdlen) <= 0) return 0; -#ifdef PKCS_TESTVECT - memcpy(seed, - "\xaa\xfd\x12\xf6\x59\xca\xe6\x34\x89\xb4\x79\xe5\x07\x6d\xde\xc2\xf0\x6c\xb5\x8f", - 20); -#endif dbmask = OPENSSL_malloc(emlen - mdlen); if (dbmask == NULL) { diff --git a/crypto/rsa/rsa_ossl.c b/crypto/rsa/rsa_ossl.c index 62a88959..f7b5cdca 100644 --- a/crypto/rsa/rsa_ossl.c +++ b/crypto/rsa/rsa_ossl.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -38,7 +38,8 @@ static RSA_METHOD rsa_pkcs1_ossl_meth = { NULL, 0, /* rsa_sign */ 0, /* rsa_verify */ - NULL /* rsa_keygen */ + NULL, /* rsa_keygen */ + NULL /* rsa_multi_prime_keygen */ }; static const RSA_METHOD *default_RSA_meth = &rsa_pkcs1_ossl_meth; @@ -58,6 +59,11 @@ const RSA_METHOD *RSA_PKCS1_OpenSSL(void) return &rsa_pkcs1_ossl_meth; } +const RSA_METHOD *RSA_null_method(void) +{ + return NULL; +} + static int rsa_ossl_public_encrypt(int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding) { @@ -91,7 +97,7 @@ static int rsa_ossl_public_encrypt(int flen, const unsigned char *from, ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = OPENSSL_malloc(num); - if (f == NULL || ret == NULL || buf == NULL) { + if (ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_OSSL_PUBLIC_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } @@ -150,7 +156,7 @@ static int rsa_ossl_public_encrypt(int flen, const unsigned char *from, BN_CTX_end(ctx); BN_CTX_free(ctx); OPENSSL_clear_free(buf, num); - return (r); + return r; } static BN_BLINDING *rsa_get_blinding(RSA *rsa, int *local, BN_CTX *ctx) @@ -195,12 +201,12 @@ static BN_BLINDING *rsa_get_blinding(RSA *rsa, int *local, BN_CTX *ctx) static int rsa_blinding_convert(BN_BLINDING *b, BIGNUM *f, BIGNUM *unblind, BN_CTX *ctx) { - if (unblind == NULL) + if (unblind == NULL) { /* * Local blinding: store the unblinding factor in BN_BLINDING. */ return BN_BLINDING_convert_ex(f, NULL, b, ctx); - else { + } else { /* * Shared blinding: store the unblinding factor outside BN_BLINDING. */ @@ -252,7 +258,7 @@ static int rsa_ossl_private_encrypt(int flen, const unsigned char *from, ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = OPENSSL_malloc(num); - if (f == NULL || ret == NULL || buf == NULL) { + if (ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_OSSL_PRIVATE_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } @@ -303,6 +309,7 @@ static int rsa_ossl_private_encrypt(int flen, const unsigned char *from, } if ((rsa->flags & RSA_FLAG_EXT_PKEY) || + (rsa->version == RSA_ASN1_VERSION_MULTI) || ((rsa->p != NULL) && (rsa->q != NULL) && (rsa->dmp1 != NULL) && (rsa->dmq1 != NULL) && (rsa->iqmp != NULL))) { @@ -342,8 +349,9 @@ static int rsa_ossl_private_encrypt(int flen, const unsigned char *from, res = f; else res = ret; - } else + } else { res = ret; + } /* * put in leading 0 bytes if the number is less than the length of the @@ -360,7 +368,7 @@ static int rsa_ossl_private_encrypt(int flen, const unsigned char *from, BN_CTX_end(ctx); BN_CTX_free(ctx); OPENSSL_clear_free(buf, num); - return (r); + return r; } static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, @@ -387,7 +395,7 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = OPENSSL_malloc(num); - if (f == NULL || ret == NULL || buf == NULL) { + if (ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_OSSL_PRIVATE_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } @@ -431,6 +439,7 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, /* do the decrypt */ if ((rsa->flags & RSA_FLAG_EXT_PKEY) || + (rsa->version == RSA_ASN1_VERSION_MULTI) || ((rsa->p != NULL) && (rsa->q != NULL) && (rsa->dmp1 != NULL) && (rsa->dmq1 != NULL) && (rsa->iqmp != NULL))) { @@ -491,7 +500,7 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, BN_CTX_end(ctx); BN_CTX_free(ctx); OPENSSL_clear_free(buf, num); - return (r); + return r; } /* signature verification */ @@ -529,7 +538,7 @@ static int rsa_ossl_public_decrypt(int flen, const unsigned char *from, ret = BN_CTX_get(ctx); num = BN_num_bytes(rsa->n); buf = OPENSSL_malloc(num); - if (f == NULL || ret == NULL || buf == NULL) { + if (ret == NULL || buf == NULL) { RSAerr(RSA_F_RSA_OSSL_PUBLIC_DECRYPT, ERR_R_MALLOC_FAILURE); goto err; } @@ -590,22 +599,29 @@ static int rsa_ossl_public_decrypt(int flen, const unsigned char *from, BN_CTX_end(ctx); BN_CTX_free(ctx); OPENSSL_clear_free(buf, num); - return (r); + return r; } static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) { - BIGNUM *r1, *m1, *vrfy; - int ret = 0; + BIGNUM *r1, *m1, *vrfy, *r2, *m[RSA_MAX_PRIME_NUM - 2]; + int ret = 0, i, ex_primes = 0; + RSA_PRIME_INFO *pinfo; BN_CTX_start(ctx); r1 = BN_CTX_get(ctx); + r2 = BN_CTX_get(ctx); m1 = BN_CTX_get(ctx); vrfy = BN_CTX_get(ctx); if (vrfy == NULL) goto err; + if (rsa->version == RSA_ASN1_VERSION_MULTI + && ((ex_primes = sk_RSA_PRIME_INFO_num(rsa->prime_infos)) <= 0 + || ex_primes > RSA_MAX_PRIME_NUM - 2)) + goto err; + { BIGNUM *p = BN_new(), *q = BN_new(); @@ -630,6 +646,28 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) BN_free(q); goto err; } + if (ex_primes > 0) { + /* cache BN_MONT_CTX for other primes */ + BIGNUM *r = BN_new(); + + if (r == NULL) { + BN_free(p); + BN_free(q); + goto err; + } + + for (i = 0; i < ex_primes; i++) { + pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); + BN_with_flags(r, pinfo->r, BN_FLG_CONSTTIME); + if (!BN_MONT_CTX_set_locked(&pinfo->m, rsa->lock, r, ctx)) { + BN_free(p); + BN_free(q); + BN_free(r); + goto err; + } + } + BN_free(r); + } } /* * We MUST free p and q before any further use of rsa->p and rsa->q @@ -699,6 +737,56 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) BN_free(dmp1); } + /* + * calculate m_i in multi-prime case + * + * TODO: + * 1. squash the following two loops and calculate |m_i| there. + * 2. remove cc and reuse |c|. + * 3. remove |dmq1| and |dmp1| in previous block and use |di|. + * + * If these things are done, the code will be more readable. + */ + if (ex_primes > 0) { + BIGNUM *di = BN_new(), *cc = BN_new(); + + if (cc == NULL || di == NULL) { + BN_free(cc); + BN_free(di); + goto err; + } + + for (i = 0; i < ex_primes; i++) { + /* prepare m_i */ + if ((m[i] = BN_CTX_get(ctx)) == NULL) { + BN_free(cc); + BN_free(di); + goto err; + } + + pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); + + /* prepare c and d_i */ + BN_with_flags(cc, I, BN_FLG_CONSTTIME); + BN_with_flags(di, pinfo->d, BN_FLG_CONSTTIME); + + if (!BN_mod(r1, cc, pinfo->r, ctx)) { + BN_free(cc); + BN_free(di); + goto err; + } + /* compute r1 ^ d_i mod r_i */ + if (!rsa->meth->bn_mod_exp(m[i], r1, di, pinfo->r, ctx, pinfo->m)) { + BN_free(cc); + BN_free(di); + goto err; + } + } + + BN_free(cc); + BN_free(di); + } + if (!BN_sub(r0, r0, m1)) goto err; /* @@ -741,6 +829,49 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) if (!BN_add(r0, r1, m1)) goto err; + /* add m_i to m in multi-prime case */ + if (ex_primes > 0) { + BIGNUM *pr2 = BN_new(); + + if (pr2 == NULL) + goto err; + + for (i = 0; i < ex_primes; i++) { + pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); + if (!BN_sub(r1, m[i], r0)) { + BN_free(pr2); + goto err; + } + + if (!BN_mul(r2, r1, pinfo->t, ctx)) { + BN_free(pr2); + goto err; + } + + BN_with_flags(pr2, r2, BN_FLG_CONSTTIME); + + if (!BN_mod(r1, pr2, pinfo->r, ctx)) { + BN_free(pr2); + goto err; + } + + if (BN_is_negative(r1)) + if (!BN_add(r1, r1, pinfo->r)) { + BN_free(pr2); + goto err; + } + if (!BN_mul(r1, r1, pinfo->pp, ctx)) { + BN_free(pr2); + goto err; + } + if (!BN_add(r0, r0, r1)) { + BN_free(pr2); + goto err; + } + } + BN_free(pr2); + } + if (rsa->e && rsa->n) { if (!rsa->meth->bn_mod_exp(vrfy, r0, rsa->e, rsa->n, ctx, rsa->_method_mod_n)) @@ -782,19 +913,26 @@ static int rsa_ossl_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx) ret = 1; err: BN_CTX_end(ctx); - return (ret); + return ret; } static int rsa_ossl_init(RSA *rsa) { rsa->flags |= RSA_FLAG_CACHE_PUBLIC | RSA_FLAG_CACHE_PRIVATE; - return (1); + return 1; } static int rsa_ossl_finish(RSA *rsa) { + int i; + RSA_PRIME_INFO *pinfo; + BN_MONT_CTX_free(rsa->_method_mod_n); BN_MONT_CTX_free(rsa->_method_mod_p); BN_MONT_CTX_free(rsa->_method_mod_q); - return (1); + for (i = 0; i < sk_RSA_PRIME_INFO_num(rsa->prime_infos); i++) { + pinfo = sk_RSA_PRIME_INFO_value(rsa->prime_infos, i); + BN_MONT_CTX_free(pinfo->m); + } + return 1; } diff --git a/crypto/rsa/rsa_pk1.c b/crypto/rsa/rsa_pk1.c index aeeb32c2..7d453ff9 100644 --- a/crypto/rsa/rsa_pk1.c +++ b/crypto/rsa/rsa_pk1.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -24,7 +24,7 @@ int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, if (flen > (tlen - RSA_PKCS1_PADDING_SIZE)) { RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); - return (0); + return 0; } p = (unsigned char *)to; @@ -38,7 +38,7 @@ int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, p += j; *(p++) = '\0'; memcpy(p, from, (unsigned int)flen); - return (1); + return 1; } int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, @@ -73,7 +73,7 @@ int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, if ((num != (flen + 1)) || (*(p++) != 0x01)) { RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1, RSA_R_BLOCK_TYPE_IS_NOT_01); - return (-1); + return -1; } /* scan over padding data */ @@ -86,7 +86,7 @@ int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, } else { RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1, RSA_R_BAD_FIXED_HEADER_DECRYPT); - return (-1); + return -1; } } p++; @@ -95,23 +95,23 @@ int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, if (i == j) { RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1, RSA_R_NULL_BEFORE_BLOCK_MISSING); - return (-1); + return -1; } if (i < 8) { RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1, RSA_R_BAD_PAD_BYTE_COUNT); - return (-1); + return -1; } i++; /* Skip over the '\0' */ j -= i; if (j > tlen) { RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1, RSA_R_DATA_TOO_LARGE); - return (-1); + return -1; } memcpy(to, p, (unsigned int)j); - return (j); + return j; } int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, @@ -123,7 +123,7 @@ int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, if (flen > (tlen - 11)) { RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); - return (0); + return 0; } p = (unsigned char *)to; @@ -135,12 +135,12 @@ int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, j = tlen - 3 - flen; if (RAND_bytes(p, j) <= 0) - return (0); + return 0; for (i = 0; i < j; i++) { if (*p == '\0') do { if (RAND_bytes(p, 1) <= 0) - return (0); + return 0; } while (*p == '\0'); p++; } @@ -148,7 +148,7 @@ int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, *(p++) = '\0'; memcpy(p, from, (unsigned int)flen); - return (1); + return 1; } int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, diff --git a/crypto/rsa/rsa_pmeth.c b/crypto/rsa/rsa_pmeth.c index 2d1dffbb..e11ed1f0 100644 --- a/crypto/rsa/rsa_pmeth.c +++ b/crypto/rsa/rsa_pmeth.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,6 +25,7 @@ typedef struct { /* Key gen parameters */ int nbits; BIGNUM *pub_exp; + int primes; /* Keygen callback info */ int gentmp[2]; /* RSA padding mode */ @@ -35,6 +36,8 @@ typedef struct { const EVP_MD *mgf1md; /* PSS salt length */ int saltlen; + /* Minimum salt length or -1 if no PSS parameter restriction */ + int min_saltlen; /* Temp buffer */ unsigned char *tbuf; /* OAEP label */ @@ -42,15 +45,24 @@ typedef struct { size_t oaep_labellen; } RSA_PKEY_CTX; +/* True if PSS parameters are restricted */ +#define rsa_pss_restricted(rctx) (rctx->min_saltlen != -1) + static int pkey_rsa_init(EVP_PKEY_CTX *ctx) { - RSA_PKEY_CTX *rctx; - rctx = OPENSSL_zalloc(sizeof(*rctx)); + RSA_PKEY_CTX *rctx = OPENSSL_zalloc(sizeof(*rctx)); + if (rctx == NULL) return 0; rctx->nbits = 1024; - rctx->pad_mode = RSA_PKCS1_PADDING; - rctx->saltlen = -2; + rctx->primes = RSA_DEFAULT_PRIME_NUM; + if (pkey_ctx_is_pss(ctx)) + rctx->pad_mode = RSA_PKCS1_PSS_PADDING; + else + rctx->pad_mode = RSA_PKCS1_PADDING; + /* Maximum for sign, auto for verify */ + rctx->saltlen = RSA_PSS_SALTLEN_AUTO; + rctx->min_saltlen = -1; ctx->data = rctx; ctx->keygen_info = rctx->gentmp; ctx->keygen_info_count = 2; @@ -61,6 +73,7 @@ static int pkey_rsa_init(EVP_PKEY_CTX *ctx) static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { RSA_PKEY_CTX *dctx, *sctx; + if (!pkey_rsa_init(dst)) return 0; sctx = src->data; @@ -86,7 +99,7 @@ static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) static int setup_tbuf(RSA_PKEY_CTX *ctx, EVP_PKEY_CTX *pk) { - if (ctx->tbuf) + if (ctx->tbuf != NULL) return 1; ctx->tbuf = OPENSSL_malloc(EVP_PKEY_size(pk->pkey)); if (ctx->tbuf == NULL) @@ -159,11 +172,13 @@ static int pkey_rsa_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, return -1; ret = RSA_private_encrypt(RSA_size(rsa), rctx->tbuf, sig, rsa, RSA_NO_PADDING); - } else + } else { return -1; - } else + } + } else { ret = RSA_private_encrypt(tbslen, tbs, sig, ctx->pkey->pkey.rsa, rctx->pad_mode); + } if (ret < 0) return ret; *siglen = ret; @@ -207,11 +222,13 @@ static int pkey_rsa_verifyrecover(EVP_PKEY_CTX *ctx, if (ret <= 0) return 0; ret = sltmp; - } else + } else { return -1; - } else + } + } else { ret = RSA_public_decrypt(siglen, sig, rout, ctx->pkey->pkey.rsa, rctx->pad_mode); + } if (ret < 0) return ret; *routlen = ret; @@ -225,6 +242,7 @@ static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, RSA_PKEY_CTX *rctx = ctx->data; RSA *rsa = ctx->pkey->pkey.rsa; size_t rslen; + if (rctx->md) { if (rctx->pad_mode == RSA_PKCS1_PADDING) return RSA_verify(EVP_MD_type(rctx->md), tbs, tbslen, @@ -250,8 +268,9 @@ static int pkey_rsa_verify(EVP_PKEY_CTX *ctx, if (ret <= 0) return 0; return 1; - } else + } else { return -1; + } } else { if (!setup_tbuf(rctx, ctx)) return -1; @@ -274,6 +293,7 @@ static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, { int ret; RSA_PKEY_CTX *rctx = ctx->data; + if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) { int klen = RSA_size(ctx->pkey->pkey.rsa); if (!setup_tbuf(rctx, ctx)) @@ -286,9 +306,10 @@ static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx, return -1; ret = RSA_public_encrypt(klen, rctx->tbuf, out, ctx->pkey->pkey.rsa, RSA_NO_PADDING); - } else + } else { ret = RSA_public_encrypt(inlen, in, out, ctx->pkey->pkey.rsa, rctx->pad_mode); + } if (ret < 0) return ret; *outlen = ret; @@ -301,6 +322,7 @@ static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, { int ret; RSA_PKEY_CTX *rctx = ctx->data; + if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) { if (!setup_tbuf(rctx, ctx)) return -1; @@ -313,9 +335,10 @@ static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, rctx->oaep_label, rctx->oaep_labellen, rctx->md, rctx->mgf1md); - } else + } else { ret = RSA_private_decrypt(inlen, in, out, ctx->pkey->pkey.rsa, rctx->pad_mode); + } if (ret < 0) return ret; *outlen = ret; @@ -325,6 +348,7 @@ static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, static int check_padding_md(const EVP_MD *md, int padding) { int mdnid; + if (!md) return 1; @@ -354,6 +378,10 @@ static int check_padding_md(const EVP_MD *md, int padding) case NID_md4: case NID_mdc2: case NID_ripemd160: + case NID_sha3_224: + case NID_sha3_256: + case NID_sha3_384: + case NID_sha3_512: return 1; default: @@ -369,6 +397,7 @@ static int check_padding_md(const EVP_MD *md, int padding) static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { RSA_PKEY_CTX *rctx = ctx->data; + switch (type) { case EVP_PKEY_CTRL_RSA_PADDING: if ((p1 >= RSA_PKCS1_PADDING) && (p1 <= RSA_PKCS1_PSS_PADDING)) { @@ -380,6 +409,8 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) goto bad_pad; if (!rctx->md) rctx->md = EVP_sha1(); + } else if (pkey_ctx_is_pss(ctx)) { + goto bad_pad; } if (p1 == RSA_PKCS1_OAEP_PADDING) { if (!(ctx->operation & EVP_PKEY_OP_TYPE_CRYPT)) @@ -405,17 +436,30 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PSS_SALTLEN); return -2; } - if (type == EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN) + if (type == EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN) { *(int *)p2 = rctx->saltlen; - else { - if (p1 < -2) + } else { + if (p1 < RSA_PSS_SALTLEN_MAX) return -2; + if (rsa_pss_restricted(rctx)) { + if (p1 == RSA_PSS_SALTLEN_AUTO + && ctx->operation == EVP_PKEY_OP_VERIFY) { + RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PSS_SALTLEN); + return -2; + } + if ((p1 == RSA_PSS_SALTLEN_DIGEST + && rctx->min_saltlen > EVP_MD_size(rctx->md)) + || (p1 >= 0 && p1 < rctx->min_saltlen)) { + RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_PSS_SALTLEN_TOO_SMALL); + return 0; + } + } rctx->saltlen = p1; } return 1; case EVP_PKEY_CTRL_RSA_KEYGEN_BITS: - if (p1 < 512) { + if (p1 < RSA_MIN_MODULUS_BITS) { RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_KEY_SIZE_TOO_SMALL); return -2; } @@ -431,6 +475,14 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) rctx->pub_exp = p2; return 1; + case EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES: + if (p1 < RSA_DEFAULT_PRIME_NUM || p1 > RSA_MAX_PRIME_NUM) { + RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_KEY_PRIME_NUM_INVALID); + return -2; + } + rctx->primes = p1; + return 1; + case EVP_PKEY_CTRL_RSA_OAEP_MD: case EVP_PKEY_CTRL_GET_RSA_OAEP_MD: if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) { @@ -446,6 +498,12 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) case EVP_PKEY_CTRL_MD: if (!check_padding_md(p2, rctx->pad_mode)) return 0; + if (rsa_pss_restricted(rctx)) { + if (EVP_MD_type(rctx->md) == EVP_MD_type(p2)) + return 1; + RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_DIGEST_NOT_ALLOWED); + return 0; + } rctx->md = p2; return 1; @@ -465,8 +523,15 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) *(const EVP_MD **)p2 = rctx->mgf1md; else *(const EVP_MD **)p2 = rctx->md; - } else + } else { + if (rsa_pss_restricted(rctx)) { + if (EVP_MD_type(rctx->mgf1md) == EVP_MD_type(p2)) + return 1; + RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_MGF1_DIGEST_NOT_ALLOWED); + return 0; + } rctx->mgf1md = p2; + } return 1; case EVP_PKEY_CTRL_RSA_OAEP_LABEL: @@ -493,16 +558,21 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) return rctx->oaep_labellen; case EVP_PKEY_CTRL_DIGESTINIT: + case EVP_PKEY_CTRL_PKCS7_SIGN: +#ifndef OPENSSL_NO_CMS + case EVP_PKEY_CTRL_CMS_SIGN: +#endif + return 1; + case EVP_PKEY_CTRL_PKCS7_ENCRYPT: case EVP_PKEY_CTRL_PKCS7_DECRYPT: - case EVP_PKEY_CTRL_PKCS7_SIGN: - return 1; #ifndef OPENSSL_NO_CMS case EVP_PKEY_CTRL_CMS_DECRYPT: case EVP_PKEY_CTRL_CMS_ENCRYPT: - case EVP_PKEY_CTRL_CMS_SIGN: - return 1; #endif + if (!pkey_ctx_is_pss(ctx)) + return 1; + /* fall through */ case EVP_PKEY_CTRL_PEER_KEY: RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); @@ -517,27 +587,28 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { - if (!value) { + if (value == NULL) { RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_VALUE_MISSING); return 0; } if (strcmp(type, "rsa_padding_mode") == 0) { int pm; - if (strcmp(value, "pkcs1") == 0) + + if (strcmp(value, "pkcs1") == 0) { pm = RSA_PKCS1_PADDING; - else if (strcmp(value, "sslv23") == 0) + } else if (strcmp(value, "sslv23") == 0) { pm = RSA_SSLV23_PADDING; - else if (strcmp(value, "none") == 0) + } else if (strcmp(value, "none") == 0) { pm = RSA_NO_PADDING; - else if (strcmp(value, "oeap") == 0) + } else if (strcmp(value, "oeap") == 0) { pm = RSA_PKCS1_OAEP_PADDING; - else if (strcmp(value, "oaep") == 0) + } else if (strcmp(value, "oaep") == 0) { pm = RSA_PKCS1_OAEP_PADDING; - else if (strcmp(value, "x931") == 0) + } else if (strcmp(value, "x931") == 0) { pm = RSA_X931_PADDING; - else if (strcmp(value, "pss") == 0) + } else if (strcmp(value, "pss") == 0) { pm = RSA_PKCS1_PSS_PADDING; - else { + } else { RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_UNKNOWN_PADDING_TYPE); return -2; } @@ -546,18 +617,27 @@ static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx, if (strcmp(type, "rsa_pss_saltlen") == 0) { int saltlen; - saltlen = atoi(value); + + if (!strcmp(value, "digest")) + saltlen = RSA_PSS_SALTLEN_DIGEST; + else if (!strcmp(value, "max")) + saltlen = RSA_PSS_SALTLEN_MAX; + else if (!strcmp(value, "auto")) + saltlen = RSA_PSS_SALTLEN_AUTO; + else + saltlen = atoi(value); return EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, saltlen); } if (strcmp(type, "rsa_keygen_bits") == 0) { - int nbits; - nbits = atoi(value); + int nbits = atoi(value); + return EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, nbits); } if (strcmp(type, "rsa_keygen_pubexp") == 0) { int ret; + BIGNUM *pubexp = NULL; if (!BN_asc2bn(&pubexp, value)) return 0; @@ -567,27 +647,43 @@ static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx, return ret; } - if (strcmp(type, "rsa_mgf1_md") == 0) { - const EVP_MD *md; - if ((md = EVP_get_digestbyname(value)) == NULL) { - RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_INVALID_DIGEST); - return 0; - } - return EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md); + if (strcmp(type, "rsa_keygen_primes") == 0) { + int nprimes = atoi(value); + + return EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, nprimes); } - if (strcmp(type, "rsa_oaep_md") == 0) { - const EVP_MD *md; - if ((md = EVP_get_digestbyname(value)) == NULL) { - RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_INVALID_DIGEST); - return 0; + if (strcmp(type, "rsa_mgf1_md") == 0) + return EVP_PKEY_CTX_md(ctx, + EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, + EVP_PKEY_CTRL_RSA_MGF1_MD, value); + + if (pkey_ctx_is_pss(ctx)) { + + if (strcmp(type, "rsa_pss_keygen_mgf1_md") == 0) + return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_KEYGEN, + EVP_PKEY_CTRL_RSA_MGF1_MD, value); + + if (strcmp(type, "rsa_pss_keygen_md") == 0) + return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_KEYGEN, + EVP_PKEY_CTRL_MD, value); + + if (strcmp(type, "rsa_pss_keygen_saltlen") == 0) { + int saltlen = atoi(value); + + return EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, saltlen); } - return EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md); } + + if (strcmp(type, "rsa_oaep_md") == 0) + return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_TYPE_CRYPT, + EVP_PKEY_CTRL_RSA_OAEP_MD, value); + if (strcmp(type, "rsa_oaep_label") == 0) { unsigned char *lab; long lablen; int ret; + lab = OPENSSL_hexstr2buf(value, &lablen); if (!lab) return 0; @@ -600,12 +696,30 @@ static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx, return -2; } +/* Set PSS parameters when generating a key, if necessary */ +static int rsa_set_pss_param(RSA *rsa, EVP_PKEY_CTX *ctx) +{ + RSA_PKEY_CTX *rctx = ctx->data; + + if (!pkey_ctx_is_pss(ctx)) + return 1; + /* If all parameters are default values don't set pss */ + if (rctx->md == NULL && rctx->mgf1md == NULL && rctx->saltlen == -2) + return 1; + rsa->pss = rsa_pss_params_create(rctx->md, rctx->mgf1md, + rctx->saltlen == -2 ? 0 : rctx->saltlen); + if (rsa->pss == NULL) + return 0; + return 1; +} + static int pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { RSA *rsa = NULL; RSA_PKEY_CTX *rctx = ctx->data; BN_GENCB *pcb; int ret; + if (rctx->pub_exp == NULL) { rctx->pub_exp = BN_new(); if (rctx->pub_exp == NULL || !BN_set_word(rctx->pub_exp, RSA_F4)) @@ -621,12 +735,18 @@ static int pkey_rsa_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) return 0; } evp_pkey_set_cb_translate(pcb, ctx); - } else + } else { pcb = NULL; - ret = RSA_generate_key_ex(rsa, rctx->nbits, rctx->pub_exp, pcb); + } + ret = RSA_generate_multi_prime_key(rsa, rctx->nbits, rctx->primes, + rctx->pub_exp, pcb); BN_GENCB_free(pcb); + if (ret > 0 && !rsa_set_pss_param(rsa, ctx)) { + RSA_free(rsa); + return 0; + } if (ret > 0) - EVP_PKEY_assign_RSA(pkey, rsa); + EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, rsa); else RSA_free(rsa); return ret; @@ -666,3 +786,74 @@ const EVP_PKEY_METHOD rsa_pkey_meth = { pkey_rsa_ctrl, pkey_rsa_ctrl_str }; + +/* + * Called for PSS sign or verify initialisation: checks PSS parameter + * sanity and sets any restrictions on key usage. + */ + +static int pkey_pss_init(EVP_PKEY_CTX *ctx) +{ + RSA *rsa; + RSA_PKEY_CTX *rctx = ctx->data; + const EVP_MD *md; + const EVP_MD *mgf1md; + int min_saltlen, max_saltlen; + + /* Should never happen */ + if (!pkey_ctx_is_pss(ctx)) + return 0; + rsa = ctx->pkey->pkey.rsa; + /* If no restrictions just return */ + if (rsa->pss == NULL) + return 1; + /* Get and check parameters */ + if (!rsa_pss_get_param(rsa->pss, &md, &mgf1md, &min_saltlen)) + return 0; + + /* See if minimum salt length exceeds maximum possible */ + max_saltlen = RSA_size(rsa) - EVP_MD_size(md); + if ((RSA_bits(rsa) & 0x7) == 1) + max_saltlen--; + if (min_saltlen > max_saltlen) { + RSAerr(RSA_F_PKEY_PSS_INIT, RSA_R_INVALID_SALT_LENGTH); + return 0; + } + + rctx->min_saltlen = min_saltlen; + + /* + * Set PSS restrictions as defaults: we can then block any attempt to + * use invalid values in pkey_rsa_ctrl + */ + + rctx->md = md; + rctx->mgf1md = mgf1md; + rctx->saltlen = min_saltlen; + + return 1; +} + +const EVP_PKEY_METHOD rsa_pss_pkey_meth = { + EVP_PKEY_RSA_PSS, + EVP_PKEY_FLAG_AUTOARGLEN, + pkey_rsa_init, + pkey_rsa_copy, + pkey_rsa_cleanup, + + 0, 0, + + 0, + pkey_rsa_keygen, + + pkey_pss_init, + pkey_rsa_sign, + + pkey_pss_init, + pkey_rsa_verify, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + pkey_rsa_ctrl, + pkey_rsa_ctrl_str +}; diff --git a/crypto/rsa/rsa_prn.c b/crypto/rsa/rsa_prn.c index 5e6c599e..b5f4bce2 100644 --- a/crypto/rsa/rsa_prn.c +++ b/crypto/rsa/rsa_prn.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -20,12 +20,12 @@ int RSA_print_fp(FILE *fp, const RSA *x, int off) if ((b = BIO_new(BIO_s_file())) == NULL) { RSAerr(RSA_F_RSA_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = RSA_print(b, x, off); BIO_free(b); - return (ret); + return ret; } #endif diff --git a/crypto/rsa/rsa_pss.c b/crypto/rsa/rsa_pss.c index f8143387..4484ff28 100644 --- a/crypto/rsa/rsa_pss.c +++ b/crypto/rsa/rsa_pss.c @@ -1,5 +1,5 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -41,7 +41,6 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, EVP_MD_CTX *ctx = EVP_MD_CTX_new(); unsigned char H_[EVP_MAX_MD_SIZE]; - if (ctx == NULL) goto err; @@ -55,13 +54,12 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, * Negative sLen has special meanings: * -1 sLen == hLen * -2 salt length is autorecovered from signature + * -3 salt length is maximized * -N reserved */ - if (sLen == -1) + if (sLen == RSA_PSS_SALTLEN_DIGEST) { sLen = hLen; - else if (sLen == -2) - sLen = -2; - else if (sLen < -2) { + } else if (sLen < RSA_PSS_SALTLEN_MAX) { RSAerr(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, RSA_R_SLEN_CHECK_FAILED); goto err; } @@ -80,7 +78,9 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, RSAerr(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, RSA_R_DATA_TOO_LARGE); goto err; } - if (sLen > emLen - hLen - 2) { /* sLen can be small negative */ + if (sLen == RSA_PSS_SALTLEN_MAX) { + sLen = emLen - hLen - 2; + } else if (sLen > emLen - hLen - 2) { /* sLen can be small negative */ RSAerr(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, RSA_R_DATA_TOO_LARGE); goto err; } @@ -106,7 +106,7 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, RSAerr(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, RSA_R_SLEN_RECOVERY_FAILED); goto err; } - if (sLen >= 0 && (maskedDBLen - i) != sLen) { + if (sLen != RSA_PSS_SALTLEN_AUTO && (maskedDBLen - i) != sLen) { RSAerr(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, RSA_R_SLEN_CHECK_FAILED); goto err; } @@ -123,8 +123,9 @@ int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, if (memcmp(H_, H, hLen)) { RSAerr(RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1, RSA_R_BAD_SIGNATURE); ret = 0; - } else + } else { ret = 1; + } err: OPENSSL_free(DB); @@ -162,13 +163,14 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, * Negative sLen has special meanings: * -1 sLen == hLen * -2 salt length is maximized + * -3 same as above (on signing) * -N reserved */ - if (sLen == -1) + if (sLen == RSA_PSS_SALTLEN_DIGEST) { sLen = hLen; - else if (sLen == -2) - sLen = -2; - else if (sLen < -2) { + } else if (sLen == RSA_PSS_SALTLEN_MAX_SIGN) { + sLen = RSA_PSS_SALTLEN_MAX; + } else if (sLen < RSA_PSS_SALTLEN_MAX) { RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1, RSA_R_SLEN_CHECK_FAILED); goto err; } @@ -184,7 +186,7 @@ int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); goto err; } - if (sLen == -2) { + if (sLen == RSA_PSS_SALTLEN_MAX) { sLen = emLen - hLen - 2; } else if (sLen > emLen - hLen - 2) { RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1, diff --git a/crypto/rsa/rsa_saos.c b/crypto/rsa/rsa_saos.c index 9e5fff45..8336f32f 100644 --- a/crypto/rsa/rsa_saos.c +++ b/crypto/rsa/rsa_saos.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,12 +32,12 @@ int RSA_sign_ASN1_OCTET_STRING(int type, if (i > (j - RSA_PKCS1_PADDING_SIZE)) { RSAerr(RSA_F_RSA_SIGN_ASN1_OCTET_STRING, RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY); - return (0); + return 0; } s = OPENSSL_malloc((unsigned int)j + 1); if (s == NULL) { RSAerr(RSA_F_RSA_SIGN_ASN1_OCTET_STRING, ERR_R_MALLOC_FAILURE); - return (0); + return 0; } p = s; i2d_ASN1_OCTET_STRING(&sig, &p); @@ -48,7 +48,7 @@ int RSA_sign_ASN1_OCTET_STRING(int type, *siglen = i; OPENSSL_clear_free(s, (unsigned int)j + 1); - return (ret); + return ret; } int RSA_verify_ASN1_OCTET_STRING(int dtype, @@ -64,7 +64,7 @@ int RSA_verify_ASN1_OCTET_STRING(int dtype, if (siglen != (unsigned int)RSA_size(rsa)) { RSAerr(RSA_F_RSA_VERIFY_ASN1_OCTET_STRING, RSA_R_WRONG_SIGNATURE_LENGTH); - return (0); + return 0; } s = OPENSSL_malloc((unsigned int)siglen); @@ -85,10 +85,11 @@ int RSA_verify_ASN1_OCTET_STRING(int dtype, if (((unsigned int)sig->length != m_len) || (memcmp(m, sig->data, m_len) != 0)) { RSAerr(RSA_F_RSA_VERIFY_ASN1_OCTET_STRING, RSA_R_BAD_SIGNATURE); - } else + } else { ret = 1; + } err: ASN1_OCTET_STRING_free(sig); OPENSSL_clear_free(s, (unsigned int)siglen); - return (ret); + return ret; } diff --git a/crypto/rsa/rsa_ssl.c b/crypto/rsa/rsa_ssl.c index 9ef6b80e..cd98584b 100644 --- a/crypto/rsa/rsa_ssl.c +++ b/crypto/rsa/rsa_ssl.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -22,7 +22,7 @@ int RSA_padding_add_SSLv23(unsigned char *to, int tlen, if (flen > (tlen - 11)) { RSAerr(RSA_F_RSA_PADDING_ADD_SSLV23, RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE); - return (0); + return 0; } p = (unsigned char *)to; @@ -34,12 +34,12 @@ int RSA_padding_add_SSLv23(unsigned char *to, int tlen, j = tlen - 3 - 8 - flen; if (RAND_bytes(p, j) <= 0) - return (0); + return 0; for (i = 0; i < j; i++) { if (*p == '\0') do { if (RAND_bytes(p, 1) <= 0) - return (0); + return 0; } while (*p == '\0'); p++; } @@ -49,7 +49,7 @@ int RSA_padding_add_SSLv23(unsigned char *to, int tlen, *(p++) = '\0'; memcpy(p, from, (unsigned int)flen); - return (1); + return 1; } int RSA_padding_check_SSLv23(unsigned char *to, int tlen, @@ -61,11 +61,11 @@ int RSA_padding_check_SSLv23(unsigned char *to, int tlen, p = from; if (flen < 10) { RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23, RSA_R_DATA_TOO_SMALL); - return (-1); + return -1; } if ((num != (flen + 1)) || (*(p++) != 02)) { RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23, RSA_R_BLOCK_TYPE_IS_NOT_02); - return (-1); + return -1; } /* scan over padding data */ @@ -77,7 +77,7 @@ int RSA_padding_check_SSLv23(unsigned char *to, int tlen, if ((i == j) || (i < 8)) { RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23, RSA_R_NULL_BEFORE_BLOCK_MISSING); - return (-1); + return -1; } for (k = -9; k < -1; k++) { if (p[k] != 0x03) @@ -85,16 +85,16 @@ int RSA_padding_check_SSLv23(unsigned char *to, int tlen, } if (k == -1) { RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23, RSA_R_SSLV3_ROLLBACK_ATTACK); - return (-1); + return -1; } i++; /* Skip over the '\0' */ j -= i; if (j > tlen) { RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23, RSA_R_DATA_TOO_LARGE); - return (-1); + return -1; } memcpy(to, p, (unsigned int)j); - return (j); + return j; } diff --git a/crypto/rsa/rsa_x931.c b/crypto/rsa/rsa_x931.c index b9301f37..7b0486c0 100644 --- a/crypto/rsa/rsa_x931.c +++ b/crypto/rsa/rsa_x931.c @@ -1,5 +1,5 @@ /* - * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -34,9 +34,9 @@ int RSA_padding_add_X931(unsigned char *to, int tlen, p = (unsigned char *)to; /* If no padding start and end nibbles are in one byte */ - if (j == 0) + if (j == 0) { *p++ = 0x6A; - else { + } else { *p++ = 0x6B; if (j > 1) { memset(p, 0xBB, j - 1); @@ -47,7 +47,7 @@ int RSA_padding_add_X931(unsigned char *to, int tlen, memcpy(p, from, (unsigned int)flen); p += flen; *p = 0xCC; - return (1); + return 1; } int RSA_padding_check_X931(unsigned char *to, int tlen, @@ -81,8 +81,9 @@ int RSA_padding_check_X931(unsigned char *to, int tlen, return -1; } - } else + } else { j = flen - 2; + } if (p[j] != 0xCC) { RSAerr(RSA_F_RSA_PADDING_CHECK_X931, RSA_R_INVALID_TRAILER); @@ -91,7 +92,7 @@ int RSA_padding_check_X931(unsigned char *to, int tlen, memcpy(to, p, (unsigned int)j); - return (j); + return j; } /* Translate between X931 hash ids and NIDs */ diff --git a/crypto/rsa/rsa_x931g.c b/crypto/rsa/rsa_x931g.c index 877ee221..3563670a 100644 --- a/crypto/rsa/rsa_x931g.c +++ b/crypto/rsa/rsa_x931g.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -44,8 +44,9 @@ int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, rsa->e = BN_dup(e); if (!rsa->e) goto err; - } else + } else { e = rsa->e; + } /* * If not all parameters present only calculate what we can. This allows diff --git a/crypto/s390x_arch.h b/crypto/s390x_arch.h new file mode 100644 index 00000000..57443182 --- /dev/null +++ b/crypto/s390x_arch.h @@ -0,0 +1,95 @@ +/* + * 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 S390X_ARCH_H +# define S390X_ARCH_H + +# ifndef __ASSEMBLER__ + +void s390x_km(const unsigned char *in, size_t len, unsigned char *out, + unsigned int fc, void *param); +void s390x_kmac(const unsigned char *in, size_t len, unsigned int fc, + void *param); +void s390x_kma(const unsigned char *aad, size_t alen, const unsigned char *in, + size_t len, unsigned char *out, unsigned int fc, void *param); + +/* + * The field elements of OPENSSL_s390xcap_P are the 64-bit words returned by + * the STFLE instruction followed by the 64-bit word pairs returned by + * instructions' QUERY functions. If STFLE returns fewer data or an instruction + * is not supported, the corresponding field elements are zero. + */ +struct OPENSSL_s390xcap_st { + unsigned long long stfle[4]; + unsigned long long kimd[2]; + unsigned long long klmd[2]; + unsigned long long km[2]; + unsigned long long kmc[2]; + unsigned long long kmac[2]; + unsigned long long kmctr[2]; + unsigned long long kmo[2]; + unsigned long long kmf[2]; + unsigned long long prno[2]; + unsigned long long kma[2]; +}; + +extern struct OPENSSL_s390xcap_st OPENSSL_s390xcap_P; + +/* convert facility bit number or function code to bit mask */ +# define S390X_CAPBIT(i) (1ULL << (63 - (i) % 64)) + +# endif + +/* OPENSSL_s390xcap_P offsets [bytes] */ +# define S390X_STFLE 0x00 +# define S390X_KIMD 0x20 +# define S390X_KLMD 0x30 +# define S390X_KM 0x40 +# define S390X_KMC 0x50 +# define S390X_KMAC 0x60 +# define S390X_KMCTR 0x70 +# define S390X_KMO 0x80 +# define S390X_KMF 0x90 +# define S390X_PRNO 0xa0 +# define S390X_KMA 0xb0 + +/* Facility Bit Numbers */ +# define S390X_VX 129 +# define S390X_VXD 134 +# define S390X_VXE 135 + +/* Function Codes */ + +/* all instructions */ +# define S390X_QUERY 0 + +/* kimd/klmd */ +# define S390X_SHA3_224 32 +# define S390X_SHA3_256 33 +# define S390X_SHA3_384 34 +# define S390X_SHA3_512 35 +# define S390X_SHAKE_128 36 +# define S390X_SHAKE_256 37 +# define S390X_GHASH 65 + +/* km/kmc/kmac/kmctr/kmo/kmf/kma */ +# define S390X_AES_128 18 +# define S390X_AES_192 19 +# define S390X_AES_256 20 + +/* prno */ +# define S390X_TRNG 114 + +/* Register 0 Flags */ +# define S390X_DECRYPT 0x80 +# define S390X_KMA_LPC 0x100 +# define S390X_KMA_LAAD 0x200 +# define S390X_KMA_HS 0x400 + +#endif diff --git a/crypto/s390xcap.c b/crypto/s390xcap.c index 272c5517..e7c7f0a3 100644 --- a/crypto/s390xcap.c +++ b/crypto/s390xcap.c @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-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 @@ -12,8 +12,8 @@ #include #include #include - -unsigned long long OPENSSL_s390xcap_P[10]; +#include "internal/cryptlib.h" +#include "s390x_arch.h" static sigjmp_buf ill_jmp; static void ill_handler(int sig) @@ -21,30 +21,47 @@ static void ill_handler(int sig) siglongjmp(ill_jmp, sig); } -unsigned long OPENSSL_s390x_facilities(void); +void OPENSSL_s390x_facilities(void); +void OPENSSL_vx_probe(void); + +struct OPENSSL_s390xcap_st OPENSSL_s390xcap_P; void OPENSSL_cpuid_setup(void) { sigset_t oset; struct sigaction ill_act, oact; - if (OPENSSL_s390xcap_P[0]) + if (OPENSSL_s390xcap_P.stfle[0]) return; - OPENSSL_s390xcap_P[0] = 1UL << (8 * sizeof(unsigned long) - 1); + /* set a bit that will not be tested later */ + OPENSSL_s390xcap_P.stfle[0] |= S390X_CAPBIT(0); memset(&ill_act, 0, sizeof(ill_act)); ill_act.sa_handler = ill_handler; sigfillset(&ill_act.sa_mask); sigdelset(&ill_act.sa_mask, SIGILL); + sigdelset(&ill_act.sa_mask, SIGFPE); sigdelset(&ill_act.sa_mask, SIGTRAP); sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset); sigaction(SIGILL, &ill_act, &oact); + sigaction(SIGFPE, &ill_act, &oact); /* protection against missing store-facility-list-extended */ if (sigsetjmp(ill_jmp, 1) == 0) OPENSSL_s390x_facilities(); + /* protection against disabled vector facility */ + if ((OPENSSL_s390xcap_P.stfle[2] & S390X_CAPBIT(S390X_VX)) + && (sigsetjmp(ill_jmp, 1) == 0)) { + OPENSSL_vx_probe(); + } else { + OPENSSL_s390xcap_P.stfle[2] &= ~(S390X_CAPBIT(S390X_VX) + | S390X_CAPBIT(S390X_VXD) + | S390X_CAPBIT(S390X_VXE)); + } + + sigaction(SIGFPE, &oact, NULL); sigaction(SIGILL, &oact, NULL); sigprocmask(SIG_SETMASK, &oset, NULL); } diff --git a/crypto/s390xcpuid.S b/crypto/s390xcpuid.S deleted file mode 100644 index fc141d92..00000000 --- a/crypto/s390xcpuid.S +++ /dev/null @@ -1,178 +0,0 @@ -.text -// 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 - -.globl OPENSSL_s390x_facilities -.type OPENSSL_s390x_facilities,@function -.align 16 -OPENSSL_s390x_facilities: - lghi %r0,0 - larl %r4,OPENSSL_s390xcap_P - stg %r0,8(%r4) # wipe capability vectors - stg %r0,16(%r4) - stg %r0,24(%r4) - stg %r0,32(%r4) - stg %r0,40(%r4) - stg %r0,48(%r4) - stg %r0,56(%r4) - stg %r0,64(%r4) - stg %r0,72(%r4) - - .long 0xb2b04000 # stfle 0(%r4) - brc 8,.Ldone - lghi %r0,1 - .long 0xb2b04000 # stfle 0(%r4) -.Ldone: - lmg %r2,%r3,0(%r4) - tmhl %r2,0x4000 # check for message-security-assist - jz .Lret - - lghi %r0,0 # query kimd capabilities - la %r1,16(%r4) - .long 0xb93e0002 # kimd %r0,%r2 - - lghi %r0,0 # query km capability vector - la %r1,32(%r4) - .long 0xb92e0042 # km %r4,%r2 - - lghi %r0,0 # query kmc capability vector - la %r1,48(%r4) - .long 0xb92f0042 # kmc %r4,%r2 - - tmhh %r3,0x0004 # check for message-security-assist-4 - jz .Lret - - lghi %r0,0 # query kmctr capability vector - la %r1,64(%r4) - .long 0xb92d2042 # kmctr %r4,%r2,%r2 - -.Lret: - br %r14 -.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities - -.globl OPENSSL_rdtsc -.type OPENSSL_rdtsc,@function -.align 16 -OPENSSL_rdtsc: - stck 16(%r15) - lg %r2,16(%r15) - br %r14 -.size OPENSSL_rdtsc,.-OPENSSL_rdtsc - -.globl OPENSSL_atomic_add -.type OPENSSL_atomic_add,@function -.align 16 -OPENSSL_atomic_add: - l %r1,0(%r2) -.Lspin: lr %r0,%r1 - ar %r0,%r3 - cs %r1,%r0,0(%r2) - brc 4,.Lspin - lgfr %r2,%r0 # OpenSSL expects the new value - br %r14 -.size OPENSSL_atomic_add,.-OPENSSL_atomic_add - -.globl OPENSSL_wipe_cpu -.type OPENSSL_wipe_cpu,@function -.align 16 -OPENSSL_wipe_cpu: - xgr %r0,%r0 - xgr %r1,%r1 - lgr %r2,%r15 - xgr %r3,%r3 - xgr %r4,%r4 - lzdr %f0 - lzdr %f1 - lzdr %f2 - lzdr %f3 - lzdr %f4 - lzdr %f5 - lzdr %f6 - lzdr %f7 - br %r14 -.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu - -.globl OPENSSL_cleanse -.type OPENSSL_cleanse,@function -.align 16 -OPENSSL_cleanse: -#if !defined(__s390x__) && !defined(__s390x) - llgfr %r3,%r3 -#endif - lghi %r4,15 - lghi %r0,0 - clgr %r3,%r4 - jh .Lot - clgr %r3,%r0 - bcr 8,%r14 -.Little: - stc %r0,0(%r2) - la %r2,1(%r2) - brctg %r3,.Little - br %r14 -.align 4 -.Lot: tmll %r2,7 - jz .Laligned - stc %r0,0(%r2) - la %r2,1(%r2) - brctg %r3,.Lot -.Laligned: - srlg %r4,%r3,3 -.Loop: stg %r0,0(%r2) - la %r2,8(%r2) - brctg %r4,.Loop - lghi %r4,7 - ngr %r3,%r4 - jnz .Little - br %r14 -.size OPENSSL_cleanse,.-OPENSSL_cleanse - -.globl CRYPTO_memcmp -.type CRYPTO_memcmp,@function -.align 16 -CRYPTO_memcmp: -#if !defined(__s390x__) && !defined(__s390x) - llgfr %r4,%r4 -#endif - lghi %r5,0 - clgr %r4,%r5 - je .Lno_data - -.Loop_cmp: - llgc %r0,0(%r2) - la %r2,1(%r2) - llgc %r1,0(%r3) - la %r3,1(%r3) - xr %r1,%r0 - or %r5,%r1 - brctg %r4,.Loop_cmp - - lnr %r5,%r5 - srl %r5,31 -.Lno_data: - lgr %r2,%r5 - br %r14 -.size CRYPTO_memcmp,.-CRYPTO_memcmp - -.globl OPENSSL_instrument_bus -.type OPENSSL_instrument_bus,@function -.align 16 -OPENSSL_instrument_bus: - lghi %r2,0 - br %r14 -.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus - -.globl OPENSSL_instrument_bus2 -.type OPENSSL_instrument_bus2,@function -.align 16 -OPENSSL_instrument_bus2: - lghi %r2,0 - br %r14 -.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 - -.section .init - brasl %r14,OPENSSL_cpuid_setup diff --git a/crypto/s390xcpuid.pl b/crypto/s390xcpuid.pl new file mode 100755 index 00000000..b0ed9e06 --- /dev/null +++ b/crypto/s390xcpuid.pl @@ -0,0 +1,337 @@ +#! /usr/bin/env perl +# Copyright 2009-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 + +$flavour = shift; + +if ($flavour =~ /3[12]/) { + $SIZE_T=4; + $g=""; +} else { + $SIZE_T=8; + $g="g"; +} + +while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} +open STDOUT,">$output"; + +$ra="%r14"; +$sp="%r15"; +$stdframe=16*$SIZE_T+4*8; + +$code=<<___; +#include "s390x_arch.h" + +.text + +.globl OPENSSL_s390x_facilities +.type OPENSSL_s390x_facilities,\@function +.align 16 +OPENSSL_s390x_facilities: + lghi %r0,0 + larl %r4,OPENSSL_s390xcap_P + + stg %r0,S390X_STFLE+8(%r4) # wipe capability vectors + stg %r0,S390X_STFLE+16(%r4) + stg %r0,S390X_STFLE+24(%r4) + stg %r0,S390X_KIMD(%r4) + stg %r0,S390X_KIMD+8(%r4) + stg %r0,S390X_KLMD(%r4) + stg %r0,S390X_KLMD+8(%r4) + stg %r0,S390X_KM(%r4) + stg %r0,S390X_KM+8(%r4) + stg %r0,S390X_KMC(%r4) + stg %r0,S390X_KMC+8(%r4) + stg %r0,S390X_KMAC(%r4) + stg %r0,S390X_KMAC+8(%r4) + stg %r0,S390X_KMCTR(%r4) + stg %r0,S390X_KMCTR+8(%r4) + stg %r0,S390X_KMO(%r4) + stg %r0,S390X_KMO+8(%r4) + stg %r0,S390X_KMF(%r4) + stg %r0,S390X_KMF+8(%r4) + stg %r0,S390X_PRNO(%r4) + stg %r0,S390X_PRNO+8(%r4) + stg %r0,S390X_KMA(%r4) + stg %r0,S390X_KMA+8(%r4) + + .long 0xb2b04000 # stfle 0(%r4) + brc 8,.Ldone + lghi %r0,1 + .long 0xb2b04000 # stfle 0(%r4) + brc 8,.Ldone + lghi %r0,2 + .long 0xb2b04000 # stfle 0(%r4) +.Ldone: + lmg %r2,%r3,S390X_STFLE(%r4) + tmhl %r2,0x4000 # check for message-security-assist + jz .Lret + + lghi %r0,S390X_QUERY # query kimd capabilities + la %r1,S390X_KIMD(%r4) + .long 0xb93e0002 # kimd %r0,%r2 + + lghi %r0,S390X_QUERY # query klmd capabilities + la %r1,S390X_KLMD(%r4) + .long 0xb93f0002 # klmd %r0,%r2 + + lghi %r0,S390X_QUERY # query km capability vector + la %r1,S390X_KM(%r4) + .long 0xb92e0042 # km %r4,%r2 + + lghi %r0,S390X_QUERY # query kmc capability vector + la %r1,S390X_KMC(%r4) + .long 0xb92f0042 # kmc %r4,%r2 + + lghi %r0,S390X_QUERY # query kmac capability vector + la %r1,S390X_KMAC(%r4) + .long 0xb91e0042 # kmac %r4,%r2 + + tmhh %r3,0x0004 # check for message-security-assist-4 + jz .Lret + + lghi %r0,S390X_QUERY # query kmctr capability vector + la %r1,S390X_KMCTR(%r4) + .long 0xb92d2042 # kmctr %r4,%r2,%r2 + + lghi %r0,S390X_QUERY # query kmo capability vector + la %r1,S390X_KMO(%r4) + .long 0xb92b0042 # kmo %r4,%r2 + + lghi %r0,S390X_QUERY # query kmf capability vector + la %r1,S390X_KMF(%r4) + .long 0xb92a0042 # kmf %r4,%r2 + + tml %r2,0x40 # check for message-security-assist-5 + jz .Lret + + lghi %r0,S390X_QUERY # query prno capability vector + la %r1,S390X_PRNO(%r4) + .long 0xb93c0042 # prno %r4,%r2 + + lg %r2,S390X_STFLE+16(%r4) + tmhl %r2,0x2000 # check for message-security-assist-8 + jz .Lret + + lghi %r0,S390X_QUERY # query kma capability vector + la %r1,S390X_KMA(%r4) + .long 0xb9294022 # kma %r2,%r4,%r2 + +.Lret: + br $ra +.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities + +.globl OPENSSL_rdtsc +.type OPENSSL_rdtsc,\@function +.align 16 +OPENSSL_rdtsc: + larl %r4,OPENSSL_s390xcap_P + tm S390X_STFLE+3(%r4),0x40 # check for store-clock-fast facility + jz .Lstck + + .long 0xb27cf010 # stckf 16($sp) + lg %r2,16($sp) + br $ra +.Lstck: + stck 16($sp) + lg %r2,16($sp) + br $ra +.size OPENSSL_rdtsc,.-OPENSSL_rdtsc + +.globl OPENSSL_atomic_add +.type OPENSSL_atomic_add,\@function +.align 16 +OPENSSL_atomic_add: + l %r1,0(%r2) +.Lspin: lr %r0,%r1 + ar %r0,%r3 + cs %r1,%r0,0(%r2) + brc 4,.Lspin + lgfr %r2,%r0 # OpenSSL expects the new value + br $ra +.size OPENSSL_atomic_add,.-OPENSSL_atomic_add + +.globl OPENSSL_wipe_cpu +.type OPENSSL_wipe_cpu,\@function +.align 16 +OPENSSL_wipe_cpu: + xgr %r0,%r0 + xgr %r1,%r1 + lgr %r2,$sp + xgr %r3,%r3 + xgr %r4,%r4 + lzdr %f0 + lzdr %f1 + lzdr %f2 + lzdr %f3 + lzdr %f4 + lzdr %f5 + lzdr %f6 + lzdr %f7 + br $ra +.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu + +.globl OPENSSL_cleanse +.type OPENSSL_cleanse,\@function +.align 16 +OPENSSL_cleanse: +#if !defined(__s390x__) && !defined(__s390x) + llgfr %r3,%r3 +#endif + lghi %r4,15 + lghi %r0,0 + clgr %r3,%r4 + jh .Lot + clgr %r3,%r0 + bcr 8,%r14 +.Little: + stc %r0,0(%r2) + la %r2,1(%r2) + brctg %r3,.Little + br %r14 +.align 4 +.Lot: tmll %r2,7 + jz .Laligned + stc %r0,0(%r2) + la %r2,1(%r2) + brctg %r3,.Lot +.Laligned: + srlg %r4,%r3,3 +.Loop: stg %r0,0(%r2) + la %r2,8(%r2) + brctg %r4,.Loop + lghi %r4,7 + ngr %r3,%r4 + jnz .Little + br $ra +.size OPENSSL_cleanse,.-OPENSSL_cleanse + +.globl CRYPTO_memcmp +.type CRYPTO_memcmp,\@function +.align 16 +CRYPTO_memcmp: +#if !defined(__s390x__) && !defined(__s390x) + llgfr %r4,%r4 +#endif + lghi %r5,0 + clgr %r4,%r5 + je .Lno_data + +.Loop_cmp: + llgc %r0,0(%r2) + la %r2,1(%r2) + llgc %r1,0(%r3) + la %r3,1(%r3) + xr %r1,%r0 + or %r5,%r1 + brctg %r4,.Loop_cmp + + lnr %r5,%r5 + srl %r5,31 +.Lno_data: + lgr %r2,%r5 + br $ra +.size CRYPTO_memcmp,.-CRYPTO_memcmp + +.globl OPENSSL_instrument_bus +.type OPENSSL_instrument_bus,\@function +.align 16 +OPENSSL_instrument_bus: + lghi %r2,0 + br %r14 +.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus + +.globl OPENSSL_instrument_bus2 +.type OPENSSL_instrument_bus2,\@function +.align 16 +OPENSSL_instrument_bus2: + lghi %r2,0 + br $ra +.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 + +.globl OPENSSL_vx_probe +.type OPENSSL_vx_probe,\@function +.align 16 +OPENSSL_vx_probe: + .word 0xe700,0x0000,0x0044 # vzero %v0 + br $ra +.size OPENSSL_vx_probe,.-OPENSSL_vx_probe +___ + +################ +# void s390x_km(const unsigned char *in, size_t len, unsigned char *out, +# unsigned int fc, void *param) +{ +my ($in,$len,$out,$fc,$param) = map("%r$_",(2..6)); +$code.=<<___; +.globl s390x_km +.type s390x_km,\@function +.align 16 +s390x_km: + lr %r0,$fc + l${g}r %r1,$param + + .long 0xb92e0042 # km $out,$in + brc 1,.-4 # pay attention to "partial completion" + + br $ra +.size s390x_km,.-s390x_km +___ +} + +################ +# void s390x_kmac(const unsigned char *in, size_t len, unsigned int fc, +# void *param) +{ +my ($in,$len,$fc,$param) = map("%r$_",(2..5)); +$code.=<<___; +.globl s390x_kmac +.type s390x_kmac,\@function +.align 16 +s390x_kmac: + lr %r0,$fc + l${g}r %r1,$param + + .long 0xb91e0002 # kmac %r0,$in + brc 1,.-4 # pay attention to "partial completion" + + br $ra +.size s390x_kmac,.-s390x_kmac +___ +} + +################ +# void s390x_kma(const unsigned char *aad, size_t alen, +# const unsigned char *in, size_t len, +# unsigned char *out, unsigned int fc, void *param) +{ +my ($aad,$alen,$in,$len,$out) = map("%r$_",(2..6)); +$code.=<<___; +.globl s390x_kma +.type s390x_kma,\@function +.align 16 +s390x_kma: + st${g} $out,6*$SIZE_T($sp) + lm${g} %r0,%r1,$stdframe($sp) + + .long 0xb9292064 # kma $out,$aad,$in + brc 1,.-4 # pay attention to "partial completion" + + l${g} $out,6*$SIZE_T($sp) + br $ra +.size s390x_kma,.-s390x_kma +___ +} + +$code.=<<___; +.section .init + brasl $ra,OPENSSL_cpuid_setup +___ + +$code =~ s/\`([^\`]*)\`/eval $1/gem; +print $code; +close STDOUT; # force flush diff --git a/crypto/sha/asm/keccak1600-armv4.pl b/crypto/sha/asm/keccak1600-armv4.pl new file mode 100755 index 00000000..16d23931 --- /dev/null +++ b/crypto/sha/asm/keccak1600-armv4.pl @@ -0,0 +1,1586 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for ARMv4. +# +# June 2017. +# +# Non-NEON code is KECCAK_1X variant (see sha/keccak1600.c) with bit +# interleaving. How does it compare to Keccak Code Package? It's as +# fast, but several times smaller, and is endian- and ISA-neutral. ISA +# neutrality means that minimum ISA requirement is ARMv4, yet it can +# be assembled even as Thumb-2. NEON code path is KECCAK_1X_ALT with +# register layout taken from Keccak Code Package. It's also as fast, +# in fact faster by 10-15% on some processors, and endian-neutral. +# +# August 2017. +# +# Switch to KECCAK_2X variant for non-NEON code and merge almost 1/2 +# of rotate instructions with logical ones. This resulted in ~10% +# improvement on most processors. Switch to KECCAK_2X effectively +# minimizes re-loads from temporary storage, and merged rotates just +# eliminate corresponding instructions. As for latter. When examining +# code you'll notice commented ror instructions. These are eliminated +# ones, and you should trace destination register below to see what's +# going on. Just in case, why not all rotates are eliminated. Trouble +# is that you have operations that require both inputs to be rotated, +# e.g. 'eor a,b>>>x,c>>>y'. This conundrum is resolved by using +# 'eor a,b,c>>>(x-y)' and then merge-rotating 'a' in next operation +# that takes 'a' as input. And thing is that this next operation can +# be in next round. It's totally possible to "carry" rotate "factors" +# to the next round, but it makes code more complex. And the last word +# is the keyword, i.e. "almost 1/2" is kind of complexity cap [for the +# time being]... +# +# Reduce per-round instruction count in Thumb-2 case by 16%. This is +# achieved by folding ldr/str pairs to their double-word counterparts. +# Theoretically this should have improved performance on single-issue +# cores, such as Cortex-A5/A7, by 19%. Reality is a bit different, as +# usual... +# +######################################################################## +# Numbers are cycles per processed byte. Non-NEON results account even +# for input bit interleaving. +# +# r=1088(*) Thumb-2(**) NEON +# +# ARM11xx 82/+150% +# Cortex-A5 88/+160%, 86, 36 +# Cortex-A7 78/+160%, 68, 34 +# Cortex-A8 51/+230%, 57, 30 +# Cortex-A9 53/+210%, 51, 26 +# Cortex-A15 42/+160%, 38, 18 +# Snapdragon S4 43/+210%, 38, 24 +# +# (*) Corresponds to SHA3-256. Percentage after slash is improvement +# over compiler-generated KECCAK_2X reference code. +# (**) Thumb-2 results for Cortex-A5/A7 are likely to apply even to +# Cortex-Mx, x>=3. Otherwise, non-NEON results for NEON-capable +# processors are presented mostly for reference purposes. + +my @C = map("r$_",(0..9)); +my @E = map("r$_",(10..12,14)); + +######################################################################## +# Stack layout +# ----->+-----------------------+ +# | uint64_t A[5][5] | +# | ... | +# +200->+-----------------------+ +# | uint64_t D[5] | +# | ... | +# +240->+-----------------------+ +# | uint64_t T[5][5] | +# | ... | +# +440->+-----------------------+ +# | saved lr | +# +444->+-----------------------+ +# | loop counter | +# +448->+-----------------------+ +# | ... + +my @A = map([ 8*$_, 8*($_+1), 8*($_+2), 8*($_+3), 8*($_+4) ], (0,5,10,15,20)); +my @D = map(8*$_, (25..29)); +my @T = map([ 8*$_, 8*($_+1), 8*($_+2), 8*($_+3), 8*($_+4) ], (30,35,40,45,50)); + +$code.=<<___; +.text + +#if defined(__thumb2__) +.syntax unified +.thumb +#else +.code 32 +#endif + +.type iotas32, %object +.align 5 +iotas32: + .long 0x00000001, 0x00000000 + .long 0x00000000, 0x00000089 + .long 0x00000000, 0x8000008b + .long 0x00000000, 0x80008080 + .long 0x00000001, 0x0000008b + .long 0x00000001, 0x00008000 + .long 0x00000001, 0x80008088 + .long 0x00000001, 0x80000082 + .long 0x00000000, 0x0000000b + .long 0x00000000, 0x0000000a + .long 0x00000001, 0x00008082 + .long 0x00000000, 0x00008003 + .long 0x00000001, 0x0000808b + .long 0x00000001, 0x8000000b + .long 0x00000001, 0x8000008a + .long 0x00000001, 0x80000081 + .long 0x00000000, 0x80000081 + .long 0x00000000, 0x80000008 + .long 0x00000000, 0x00000083 + .long 0x00000000, 0x80008003 + .long 0x00000001, 0x80008088 + .long 0x00000000, 0x80000088 + .long 0x00000001, 0x00008000 + .long 0x00000000, 0x80008082 +.size iotas32,.-iotas32 + +.type KeccakF1600_int, %function +.align 5 +KeccakF1600_int: + add @C[9],sp,#$A[4][2] + add @E[2],sp,#$A[0][0] + add @E[0],sp,#$A[1][0] + ldmia @C[9],{@C[4]-@C[9]} @ A[4][2..4] +KeccakF1600_enter: + str lr,[sp,#440] + eor @E[1],@E[1],@E[1] + str @E[1],[sp,#444] + b .Lround2x + +.align 4 +.Lround2x: +___ +sub Round { +my (@A,@R); (@A[0..4],@R) = @_; + +$code.=<<___; + ldmia @E[2],{@C[0]-@C[3]} @ A[0][0..1] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[1][0..1] +#ifdef __thumb2__ + eor @C[0],@C[0],@E[0] + eor @C[1],@C[1],@E[1] + eor @C[2],@C[2],@E[2] + ldrd @E[0],@E[1],[sp,#$A[1][2]] + eor @C[3],@C[3],@E[3] + ldrd @E[2],@E[3],[sp,#$A[1][3]] + eor @C[4],@C[4],@E[0] + eor @C[5],@C[5],@E[1] + eor @C[6],@C[6],@E[2] + ldrd @E[0],@E[1],[sp,#$A[1][4]] + eor @C[7],@C[7],@E[3] + ldrd @E[2],@E[3],[sp,#$A[2][0]] + eor @C[8],@C[8],@E[0] + eor @C[9],@C[9],@E[1] + eor @C[0],@C[0],@E[2] + ldrd @E[0],@E[1],[sp,#$A[2][1]] + eor @C[1],@C[1],@E[3] + ldrd @E[2],@E[3],[sp,#$A[2][2]] + eor @C[2],@C[2],@E[0] + eor @C[3],@C[3],@E[1] + eor @C[4],@C[4],@E[2] + ldrd @E[0],@E[1],[sp,#$A[2][3]] + eor @C[5],@C[5],@E[3] + ldrd @E[2],@E[3],[sp,#$A[2][4]] + eor @C[6],@C[6],@E[0] + eor @C[7],@C[7],@E[1] + eor @C[8],@C[8],@E[2] + ldrd @E[0],@E[1],[sp,#$A[3][0]] + eor @C[9],@C[9],@E[3] + ldrd @E[2],@E[3],[sp,#$A[3][1]] + eor @C[0],@C[0],@E[0] + eor @C[1],@C[1],@E[1] + eor @C[2],@C[2],@E[2] + ldrd @E[0],@E[1],[sp,#$A[3][2]] + eor @C[3],@C[3],@E[3] + ldrd @E[2],@E[3],[sp,#$A[3][3]] + eor @C[4],@C[4],@E[0] + eor @C[5],@C[5],@E[1] + eor @C[6],@C[6],@E[2] + ldrd @E[0],@E[1],[sp,#$A[3][4]] + eor @C[7],@C[7],@E[3] + ldrd @E[2],@E[3],[sp,#$A[4][0]] + eor @C[8],@C[8],@E[0] + eor @C[9],@C[9],@E[1] + eor @C[0],@C[0],@E[2] + ldrd @E[0],@E[1],[sp,#$A[4][1]] + eor @C[1],@C[1],@E[3] + ldrd @E[2],@E[3],[sp,#$A[0][2]] + eor @C[2],@C[2],@E[0] + eor @C[3],@C[3],@E[1] + eor @C[4],@C[4],@E[2] + ldrd @E[0],@E[1],[sp,#$A[0][3]] + eor @C[5],@C[5],@E[3] + ldrd @E[2],@E[3],[sp,#$A[0][4]] +#else + eor @C[0],@C[0],@E[0] + add @E[0],sp,#$A[1][2] + eor @C[1],@C[1],@E[1] + eor @C[2],@C[2],@E[2] + eor @C[3],@C[3],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[1][2..3] + eor @C[4],@C[4],@E[0] + add @E[0],sp,#$A[1][4] + eor @C[5],@C[5],@E[1] + eor @C[6],@C[6],@E[2] + eor @C[7],@C[7],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[1][4]..A[2][0] + eor @C[8],@C[8],@E[0] + add @E[0],sp,#$A[2][1] + eor @C[9],@C[9],@E[1] + eor @C[0],@C[0],@E[2] + eor @C[1],@C[1],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[2][1..2] + eor @C[2],@C[2],@E[0] + add @E[0],sp,#$A[2][3] + eor @C[3],@C[3],@E[1] + eor @C[4],@C[4],@E[2] + eor @C[5],@C[5],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[2][3..4] + eor @C[6],@C[6],@E[0] + add @E[0],sp,#$A[3][0] + eor @C[7],@C[7],@E[1] + eor @C[8],@C[8],@E[2] + eor @C[9],@C[9],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[3][0..1] + eor @C[0],@C[0],@E[0] + add @E[0],sp,#$A[3][2] + eor @C[1],@C[1],@E[1] + eor @C[2],@C[2],@E[2] + eor @C[3],@C[3],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[3][2..3] + eor @C[4],@C[4],@E[0] + add @E[0],sp,#$A[3][4] + eor @C[5],@C[5],@E[1] + eor @C[6],@C[6],@E[2] + eor @C[7],@C[7],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[3][4]..A[4][0] + eor @C[8],@C[8],@E[0] + ldr @E[0],[sp,#$A[4][1]] @ A[4][1] + eor @C[9],@C[9],@E[1] + ldr @E[1],[sp,#$A[4][1]+4] + eor @C[0],@C[0],@E[2] + ldr @E[2],[sp,#$A[0][2]] @ A[0][2] + eor @C[1],@C[1],@E[3] + ldr @E[3],[sp,#$A[0][2]+4] + eor @C[2],@C[2],@E[0] + add @E[0],sp,#$A[0][3] + eor @C[3],@C[3],@E[1] + eor @C[4],@C[4],@E[2] + eor @C[5],@C[5],@E[3] + ldmia @E[0],{@E[0]-@E[2],@E[3]} @ A[0][3..4] +#endif + eor @C[6],@C[6],@E[0] + eor @C[7],@C[7],@E[1] + eor @C[8],@C[8],@E[2] + eor @C[9],@C[9],@E[3] + + eor @E[0],@C[0],@C[5],ror#32-1 @ E[0] = ROL64(C[2], 1) ^ C[0]; + str.l @E[0],[sp,#$D[1]] @ D[1] = E[0] + eor @E[1],@C[1],@C[4] + str.h @E[1],[sp,#$D[1]+4] + eor @E[2],@C[6],@C[1],ror#32-1 @ E[1] = ROL64(C[0], 1) ^ C[3]; + eor @E[3],@C[7],@C[0] + str.l @E[2],[sp,#$D[4]] @ D[4] = E[1] + eor @C[0],@C[8],@C[3],ror#32-1 @ C[0] = ROL64(C[1], 1) ^ C[4]; + str.h @E[3],[sp,#$D[4]+4] + eor @C[1],@C[9],@C[2] + str.l @C[0],[sp,#$D[0]] @ D[0] = C[0] + eor @C[2],@C[2],@C[7],ror#32-1 @ C[1] = ROL64(C[3], 1) ^ C[1]; + ldr.l @C[7],[sp,#$A[3][3]] + eor @C[3],@C[3],@C[6] + str.h @C[1],[sp,#$D[0]+4] + ldr.h @C[6],[sp,#$A[3][3]+4] + str.l @C[2],[sp,#$D[2]] @ D[2] = C[1] + eor @C[4],@C[4],@C[9],ror#32-1 @ C[2] = ROL64(C[4], 1) ^ C[2]; + str.h @C[3],[sp,#$D[2]+4] + eor @C[5],@C[5],@C[8] + + ldr.l @C[8],[sp,#$A[4][4]] + ldr.h @C[9],[sp,#$A[4][4]+4] + str.l @C[4],[sp,#$D[3]] @ D[3] = C[2] + eor @C[7],@C[7],@C[4] + str.h @C[5],[sp,#$D[3]+4] + eor @C[6],@C[6],@C[5] + ldr.l @C[4],[sp,#$A[0][0]] + @ ror @C[7],@C[7],#32-10 @ C[3] = ROL64(A[3][3] ^ C[2], rhotates[3][3]); /* D[3] */ + @ ror @C[6],@C[6],#32-11 + ldr.h @C[5],[sp,#$A[0][0]+4] + eor @C[8],@C[8],@E[2] + eor @C[9],@C[9],@E[3] + ldr.l @E[2],[sp,#$A[2][2]] + eor @C[0],@C[0],@C[4] + ldr.h @E[3],[sp,#$A[2][2]+4] + @ ror @C[8],@C[8],#32-7 @ C[4] = ROL64(A[4][4] ^ E[1], rhotates[4][4]); /* D[4] */ + @ ror @C[9],@C[9],#32-7 + eor @C[1],@C[1],@C[5] @ C[0] = A[0][0] ^ C[0]; /* rotate by 0 */ /* D[0] */ + eor @E[2],@E[2],@C[2] + ldr.l @C[2],[sp,#$A[1][1]] + eor @E[3],@E[3],@C[3] + ldr.h @C[3],[sp,#$A[1][1]+4] + ror @C[5],@E[2],#32-21 @ C[2] = ROL64(A[2][2] ^ C[1], rhotates[2][2]); /* D[2] */ + ldr @E[2],[sp,#444] @ load counter + eor @C[2],@C[2],@E[0] + adr @E[0],iotas32 + ror @C[4],@E[3],#32-22 + add @E[3],@E[0],@E[2] + eor @C[3],@C[3],@E[1] +___ +$code.=<<___ if ($A[0][0] != $T[0][0]); + ldmia @E[3],{@E[0],@E[1]} @ iotas[i] +___ +$code.=<<___ if ($A[0][0] == $T[0][0]); + ldr.l @E[0],[@E[3],#8] @ iotas[i].lo + add @E[2],@E[2],#16 + ldr.h @E[1],[@E[3],#12] @ iotas[i].hi + cmp @E[2],#192 + str @E[2],[sp,#444] @ store counter +___ +$code.=<<___; + bic @E[2],@C[4],@C[2],ror#32-22 + bic @E[3],@C[5],@C[3],ror#32-22 + ror @C[2],@C[2],#32-22 @ C[1] = ROL64(A[1][1] ^ E[0], rhotates[1][1]); /* D[1] */ + ror @C[3],@C[3],#32-22 + eor @E[2],@E[2],@C[0] + eor @E[3],@E[3],@C[1] + eor @E[0],@E[0],@E[2] + eor @E[1],@E[1],@E[3] + str.l @E[0],[sp,#$R[0][0]] @ R[0][0] = C[0] ^ (~C[1] & C[2]) ^ iotas[i]; + bic @E[2],@C[6],@C[4],ror#11 + str.h @E[1],[sp,#$R[0][0]+4] + bic @E[3],@C[7],@C[5],ror#10 + bic @E[0],@C[8],@C[6],ror#32-(11-7) + bic @E[1],@C[9],@C[7],ror#32-(10-7) + eor @E[2],@C[2],@E[2],ror#32-11 + str.l @E[2],[sp,#$R[0][1]] @ R[0][1] = C[1] ^ (~C[2] & C[3]); + eor @E[3],@C[3],@E[3],ror#32-10 + str.h @E[3],[sp,#$R[0][1]+4] + eor @E[0],@C[4],@E[0],ror#32-7 + eor @E[1],@C[5],@E[1],ror#32-7 + str.l @E[0],[sp,#$R[0][2]] @ R[0][2] = C[2] ^ (~C[3] & C[4]); + bic @E[2],@C[0],@C[8],ror#32-7 + str.h @E[1],[sp,#$R[0][2]+4] + bic @E[3],@C[1],@C[9],ror#32-7 + eor @E[2],@E[2],@C[6],ror#32-11 + str.l @E[2],[sp,#$R[0][3]] @ R[0][3] = C[3] ^ (~C[4] & C[0]); + eor @E[3],@E[3],@C[7],ror#32-10 + str.h @E[3],[sp,#$R[0][3]+4] + bic @E[0],@C[2],@C[0] + add @E[3],sp,#$D[3] + ldr.l @C[0],[sp,#$A[0][3]] @ A[0][3] + bic @E[1],@C[3],@C[1] + ldr.h @C[1],[sp,#$A[0][3]+4] + eor @E[0],@E[0],@C[8],ror#32-7 + eor @E[1],@E[1],@C[9],ror#32-7 + str.l @E[0],[sp,#$R[0][4]] @ R[0][4] = C[4] ^ (~C[0] & C[1]); + add @C[9],sp,#$D[0] + str.h @E[1],[sp,#$R[0][4]+4] + + ldmia @E[3],{@E[0]-@E[2],@E[3]} @ D[3..4] + ldmia @C[9],{@C[6]-@C[9]} @ D[0..1] + + ldr.l @C[2],[sp,#$A[1][4]] @ A[1][4] + eor @C[0],@C[0],@E[0] + ldr.h @C[3],[sp,#$A[1][4]+4] + eor @C[1],@C[1],@E[1] + @ ror @C[0],@C[0],#32-14 @ C[0] = ROL64(A[0][3] ^ D[3], rhotates[0][3]); + ldr.l @E[0],[sp,#$A[3][1]] @ A[3][1] + @ ror @C[1],@C[1],#32-14 + ldr.h @E[1],[sp,#$A[3][1]+4] + + eor @C[2],@C[2],@E[2] + ldr.l @C[4],[sp,#$A[2][0]] @ A[2][0] + eor @C[3],@C[3],@E[3] + ldr.h @C[5],[sp,#$A[2][0]+4] + @ ror @C[2],@C[2],#32-10 @ C[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + @ ror @C[3],@C[3],#32-10 + + eor @C[6],@C[6],@C[4] + ldr.l @E[2],[sp,#$D[2]] @ D[2] + eor @C[7],@C[7],@C[5] + ldr.h @E[3],[sp,#$D[2]+4] + ror @C[5],@C[6],#32-1 @ C[2] = ROL64(A[2][0] ^ D[0], rhotates[2][0]); + ror @C[4],@C[7],#32-2 + + eor @E[0],@E[0],@C[8] + ldr.l @C[8],[sp,#$A[4][2]] @ A[4][2] + eor @E[1],@E[1],@C[9] + ldr.h @C[9],[sp,#$A[4][2]+4] + ror @C[7],@E[0],#32-22 @ C[3] = ROL64(A[3][1] ^ D[1], rhotates[3][1]); + ror @C[6],@E[1],#32-23 + + bic @E[0],@C[4],@C[2],ror#32-10 + bic @E[1],@C[5],@C[3],ror#32-10 + eor @E[2],@E[2],@C[8] + eor @E[3],@E[3],@C[9] + ror @C[9],@E[2],#32-30 @ C[4] = ROL64(A[4][2] ^ D[2], rhotates[4][2]); + ror @C[8],@E[3],#32-31 + eor @E[0],@E[0],@C[0],ror#32-14 + eor @E[1],@E[1],@C[1],ror#32-14 + str.l @E[0],[sp,#$R[1][0]] @ R[1][0] = C[0] ^ (~C[1] & C[2]) + bic @E[2],@C[6],@C[4] + str.h @E[1],[sp,#$R[1][0]+4] + bic @E[3],@C[7],@C[5] + eor @E[2],@E[2],@C[2],ror#32-10 + str.l @E[2],[sp,#$R[1][1]] @ R[1][1] = C[1] ^ (~C[2] & C[3]); + eor @E[3],@E[3],@C[3],ror#32-10 + str.h @E[3],[sp,#$R[1][1]+4] + bic @E[0],@C[8],@C[6] + bic @E[1],@C[9],@C[7] + bic @E[2],@C[0],@C[8],ror#14 + bic @E[3],@C[1],@C[9],ror#14 + eor @E[0],@E[0],@C[4] + eor @E[1],@E[1],@C[5] + str.l @E[0],[sp,#$R[1][2]] @ R[1][2] = C[2] ^ (~C[3] & C[4]); + bic @C[2],@C[2],@C[0],ror#32-(14-10) + str.h @E[1],[sp,#$R[1][2]+4] + eor @E[2],@C[6],@E[2],ror#32-14 + bic @E[1],@C[3],@C[1],ror#32-(14-10) + str.l @E[2],[sp,#$R[1][3]] @ R[1][3] = C[3] ^ (~C[4] & C[0]); + eor @E[3],@C[7],@E[3],ror#32-14 + str.h @E[3],[sp,#$R[1][3]+4] + add @E[2],sp,#$D[1] + ldr.l @C[1],[sp,#$A[0][1]] @ A[0][1] + eor @E[0],@C[8],@C[2],ror#32-10 + ldr.h @C[0],[sp,#$A[0][1]+4] + eor @E[1],@C[9],@E[1],ror#32-10 + str.l @E[0],[sp,#$R[1][4]] @ R[1][4] = C[4] ^ (~C[0] & C[1]); + str.h @E[1],[sp,#$R[1][4]+4] + + add @C[9],sp,#$D[3] + ldmia @E[2],{@E[0]-@E[2],@E[3]} @ D[1..2] + ldr.l @C[2],[sp,#$A[1][2]] @ A[1][2] + ldr.h @C[3],[sp,#$A[1][2]+4] + ldmia @C[9],{@C[6]-@C[9]} @ D[3..4] + + eor @C[1],@C[1],@E[0] + ldr.l @C[4],[sp,#$A[2][3]] @ A[2][3] + eor @C[0],@C[0],@E[1] + ldr.h @C[5],[sp,#$A[2][3]+4] + ror @C[0],@C[0],#32-1 @ C[0] = ROL64(A[0][1] ^ D[1], rhotates[0][1]); + + eor @C[2],@C[2],@E[2] + ldr.l @E[0],[sp,#$A[3][4]] @ A[3][4] + eor @C[3],@C[3],@E[3] + ldr.h @E[1],[sp,#$A[3][4]+4] + @ ror @C[2],@C[2],#32-3 @ C[1] = ROL64(A[1][2] ^ D[2], rhotates[1][2]); + ldr.l @E[2],[sp,#$D[0]] @ D[0] + @ ror @C[3],@C[3],#32-3 + ldr.h @E[3],[sp,#$D[0]+4] + + eor @C[4],@C[4],@C[6] + eor @C[5],@C[5],@C[7] + @ ror @C[5],@C[6],#32-12 @ C[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + @ ror @C[4],@C[7],#32-13 @ [track reverse order below] + + eor @E[0],@E[0],@C[8] + ldr.l @C[8],[sp,#$A[4][0]] @ A[4][0] + eor @E[1],@E[1],@C[9] + ldr.h @C[9],[sp,#$A[4][0]+4] + ror @C[6],@E[0],#32-4 @ C[3] = ROL64(A[3][4] ^ D[4], rhotates[3][4]); + ror @C[7],@E[1],#32-4 + + eor @E[2],@E[2],@C[8] + eor @E[3],@E[3],@C[9] + ror @C[8],@E[2],#32-9 @ C[4] = ROL64(A[4][0] ^ D[0], rhotates[4][0]); + ror @C[9],@E[3],#32-9 + + bic @E[0],@C[5],@C[2],ror#13-3 + bic @E[1],@C[4],@C[3],ror#12-3 + bic @E[2],@C[6],@C[5],ror#32-13 + bic @E[3],@C[7],@C[4],ror#32-12 + eor @E[0],@C[0],@E[0],ror#32-13 + eor @E[1],@C[1],@E[1],ror#32-12 + str.l @E[0],[sp,#$R[2][0]] @ R[2][0] = C[0] ^ (~C[1] & C[2]) + eor @E[2],@E[2],@C[2],ror#32-3 + str.h @E[1],[sp,#$R[2][0]+4] + eor @E[3],@E[3],@C[3],ror#32-3 + str.l @E[2],[sp,#$R[2][1]] @ R[2][1] = C[1] ^ (~C[2] & C[3]); + bic @E[0],@C[8],@C[6] + bic @E[1],@C[9],@C[7] + str.h @E[3],[sp,#$R[2][1]+4] + eor @E[0],@E[0],@C[5],ror#32-13 + eor @E[1],@E[1],@C[4],ror#32-12 + str.l @E[0],[sp,#$R[2][2]] @ R[2][2] = C[2] ^ (~C[3] & C[4]); + bic @E[2],@C[0],@C[8] + str.h @E[1],[sp,#$R[2][2]+4] + bic @E[3],@C[1],@C[9] + eor @E[2],@E[2],@C[6] + eor @E[3],@E[3],@C[7] + str.l @E[2],[sp,#$R[2][3]] @ R[2][3] = C[3] ^ (~C[4] & C[0]); + bic @E[0],@C[2],@C[0],ror#3 + str.h @E[3],[sp,#$R[2][3]+4] + bic @E[1],@C[3],@C[1],ror#3 + ldr.l @C[1],[sp,#$A[0][4]] @ A[0][4] [in reverse order] + eor @E[0],@C[8],@E[0],ror#32-3 + ldr.h @C[0],[sp,#$A[0][4]+4] + eor @E[1],@C[9],@E[1],ror#32-3 + str.l @E[0],[sp,#$R[2][4]] @ R[2][4] = C[4] ^ (~C[0] & C[1]); + add @C[9],sp,#$D[1] + str.h @E[1],[sp,#$R[2][4]+4] + + ldr.l @E[0],[sp,#$D[4]] @ D[4] + ldr.h @E[1],[sp,#$D[4]+4] + ldr.l @E[2],[sp,#$D[0]] @ D[0] + ldr.h @E[3],[sp,#$D[0]+4] + + ldmia @C[9],{@C[6]-@C[9]} @ D[1..2] + + eor @C[1],@C[1],@E[0] + ldr.l @C[2],[sp,#$A[1][0]] @ A[1][0] + eor @C[0],@C[0],@E[1] + ldr.h @C[3],[sp,#$A[1][0]+4] + @ ror @C[1],@E[0],#32-13 @ C[0] = ROL64(A[0][4] ^ D[4], rhotates[0][4]); + ldr.l @C[4],[sp,#$A[2][1]] @ A[2][1] + @ ror @C[0],@E[1],#32-14 @ [was loaded in reverse order] + ldr.h @C[5],[sp,#$A[2][1]+4] + + eor @C[2],@C[2],@E[2] + ldr.l @E[0],[sp,#$A[3][2]] @ A[3][2] + eor @C[3],@C[3],@E[3] + ldr.h @E[1],[sp,#$A[3][2]+4] + @ ror @C[2],@C[2],#32-18 @ C[1] = ROL64(A[1][0] ^ D[0], rhotates[1][0]); + ldr.l @E[2],[sp,#$D[3]] @ D[3] + @ ror @C[3],@C[3],#32-18 + ldr.h @E[3],[sp,#$D[3]+4] + + eor @C[6],@C[6],@C[4] + eor @C[7],@C[7],@C[5] + ror @C[4],@C[6],#32-5 @ C[2] = ROL64(A[2][1] ^ D[1], rhotates[2][1]); + ror @C[5],@C[7],#32-5 + + eor @E[0],@E[0],@C[8] + ldr.l @C[8],[sp,#$A[4][3]] @ A[4][3] + eor @E[1],@E[1],@C[9] + ldr.h @C[9],[sp,#$A[4][3]+4] + ror @C[7],@E[0],#32-7 @ C[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + ror @C[6],@E[1],#32-8 + + eor @E[2],@E[2],@C[8] + eor @E[3],@E[3],@C[9] + ror @C[8],@E[2],#32-28 @ C[4] = ROL64(A[4][3] ^ D[3], rhotates[4][3]); + ror @C[9],@E[3],#32-28 + + bic @E[0],@C[4],@C[2],ror#32-18 + bic @E[1],@C[5],@C[3],ror#32-18 + eor @E[0],@E[0],@C[0],ror#32-14 + eor @E[1],@E[1],@C[1],ror#32-13 + str.l @E[0],[sp,#$R[3][0]] @ R[3][0] = C[0] ^ (~C[1] & C[2]) + bic @E[2],@C[6],@C[4] + str.h @E[1],[sp,#$R[3][0]+4] + bic @E[3],@C[7],@C[5] + eor @E[2],@E[2],@C[2],ror#32-18 + str.l @E[2],[sp,#$R[3][1]] @ R[3][1] = C[1] ^ (~C[2] & C[3]); + eor @E[3],@E[3],@C[3],ror#32-18 + str.h @E[3],[sp,#$R[3][1]+4] + bic @E[0],@C[8],@C[6] + bic @E[1],@C[9],@C[7] + bic @E[2],@C[0],@C[8],ror#14 + bic @E[3],@C[1],@C[9],ror#13 + eor @E[0],@E[0],@C[4] + eor @E[1],@E[1],@C[5] + str.l @E[0],[sp,#$R[3][2]] @ R[3][2] = C[2] ^ (~C[3] & C[4]); + bic @C[2],@C[2],@C[0],ror#18-14 + str.h @E[1],[sp,#$R[3][2]+4] + eor @E[2],@C[6],@E[2],ror#32-14 + bic @E[1],@C[3],@C[1],ror#18-13 + eor @E[3],@C[7],@E[3],ror#32-13 + str.l @E[2],[sp,#$R[3][3]] @ R[3][3] = C[3] ^ (~C[4] & C[0]); + str.h @E[3],[sp,#$R[3][3]+4] + add @E[3],sp,#$D[2] + ldr.l @C[0],[sp,#$A[0][2]] @ A[0][2] + eor @E[0],@C[8],@C[2],ror#32-18 + ldr.h @C[1],[sp,#$A[0][2]+4] + eor @E[1],@C[9],@E[1],ror#32-18 + str.l @E[0],[sp,#$R[3][4]] @ R[3][4] = C[4] ^ (~C[0] & C[1]); + str.h @E[1],[sp,#$R[3][4]+4] + + ldmia @E[3],{@E[0]-@E[2],@E[3]} @ D[2..3] + ldr.l @C[2],[sp,#$A[1][3]] @ A[1][3] + ldr.h @C[3],[sp,#$A[1][3]+4] + ldr.l @C[6],[sp,#$D[4]] @ D[4] + ldr.h @C[7],[sp,#$D[4]+4] + + eor @C[0],@C[0],@E[0] + ldr.l @C[4],[sp,#$A[2][4]] @ A[2][4] + eor @C[1],@C[1],@E[1] + ldr.h @C[5],[sp,#$A[2][4]+4] + @ ror @C[0],@C[0],#32-31 @ C[0] = ROL64(A[0][2] ^ D[2], rhotates[0][2]); + ldr.l @C[8],[sp,#$D[0]] @ D[0] + @ ror @C[1],@C[1],#32-31 + ldr.h @C[9],[sp,#$D[0]+4] + + eor @E[2],@E[2],@C[2] + ldr.l @E[0],[sp,#$A[3][0]] @ A[3][0] + eor @E[3],@E[3],@C[3] + ldr.h @E[1],[sp,#$A[3][0]+4] + ror @C[3],@E[2],#32-27 @ C[1] = ROL64(A[1][3] ^ D[3], rhotates[1][3]); + ldr.l @E[2],[sp,#$D[1]] @ D[1] + ror @C[2],@E[3],#32-28 + ldr.h @E[3],[sp,#$D[1]+4] + + eor @C[6],@C[6],@C[4] + eor @C[7],@C[7],@C[5] + ror @C[5],@C[6],#32-19 @ C[2] = ROL64(A[2][4] ^ D[4], rhotates[2][4]); + ror @C[4],@C[7],#32-20 + + eor @E[0],@E[0],@C[8] + ldr.l @C[8],[sp,#$A[4][1]] @ A[4][1] + eor @E[1],@E[1],@C[9] + ldr.h @C[9],[sp,#$A[4][1]+4] + ror @C[7],@E[0],#32-20 @ C[3] = ROL64(A[3][0] ^ D[0], rhotates[3][0]); + ror @C[6],@E[1],#32-21 + + eor @C[8],@C[8],@E[2] + eor @C[9],@C[9],@E[3] + @ ror @C[8],@C[2],#32-1 @ C[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + @ ror @C[9],@C[3],#32-1 + + bic @E[0],@C[4],@C[2] + bic @E[1],@C[5],@C[3] + eor @E[0],@E[0],@C[0],ror#32-31 + str.l @E[0],[sp,#$R[4][0]] @ R[4][0] = C[0] ^ (~C[1] & C[2]) + eor @E[1],@E[1],@C[1],ror#32-31 + str.h @E[1],[sp,#$R[4][0]+4] + bic @E[2],@C[6],@C[4] + bic @E[3],@C[7],@C[5] + eor @E[2],@E[2],@C[2] + eor @E[3],@E[3],@C[3] + str.l @E[2],[sp,#$R[4][1]] @ R[4][1] = C[1] ^ (~C[2] & C[3]); + bic @E[0],@C[8],@C[6],ror#1 + str.h @E[3],[sp,#$R[4][1]+4] + bic @E[1],@C[9],@C[7],ror#1 + bic @E[2],@C[0],@C[8],ror#31-1 + bic @E[3],@C[1],@C[9],ror#31-1 + eor @C[4],@C[4],@E[0],ror#32-1 + str.l @C[4],[sp,#$R[4][2]] @ R[4][2] = C[2] ^= (~C[3] & C[4]); + eor @C[5],@C[5],@E[1],ror#32-1 + str.h @C[5],[sp,#$R[4][2]+4] + eor @C[6],@C[6],@E[2],ror#32-31 + eor @C[7],@C[7],@E[3],ror#32-31 + str.l @C[6],[sp,#$R[4][3]] @ R[4][3] = C[3] ^= (~C[4] & C[0]); + bic @E[0],@C[2],@C[0],ror#32-31 + str.h @C[7],[sp,#$R[4][3]+4] + bic @E[1],@C[3],@C[1],ror#32-31 + add @E[2],sp,#$R[0][0] + eor @C[8],@E[0],@C[8],ror#32-1 + add @E[0],sp,#$R[1][0] + eor @C[9],@E[1],@C[9],ror#32-1 + str.l @C[8],[sp,#$R[4][4]] @ R[4][4] = C[4] ^= (~C[0] & C[1]); + str.h @C[9],[sp,#$R[4][4]+4] +___ +} + Round(@A,@T); + Round(@T,@A); +$code.=<<___; + blo .Lround2x + + ldr pc,[sp,#440] +.size KeccakF1600_int,.-KeccakF1600_int + +.type KeccakF1600, %function +.align 5 +KeccakF1600: + stmdb sp!,{r0,r4-r11,lr} + sub sp,sp,#440+16 @ space for A[5][5],D[5],T[5][5],... + + add @E[0],r0,#$A[1][0] + add @E[1],sp,#$A[1][0] + ldmia r0, {@C[0]-@C[9]} @ copy A[5][5] to stack + stmia sp, {@C[0]-@C[9]} + ldmia @E[0]!,{@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} + ldmia @E[0]!,{@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} + ldmia @E[0]!,{@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} + ldmia @E[0], {@C[0]-@C[9]} + add @E[2],sp,#$A[0][0] + add @E[0],sp,#$A[1][0] + stmia @E[1], {@C[0]-@C[9]} + + bl KeccakF1600_enter + + ldr @E[1], [sp,#440+16] @ restore pointer to A + ldmia sp, {@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} @ return A[5][5] + ldmia @E[0]!,{@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} + ldmia @E[0]!,{@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} + ldmia @E[0]!,{@C[0]-@C[9]} + stmia @E[1]!,{@C[0]-@C[9]} + ldmia @E[0], {@C[0]-@C[9]} + stmia @E[1], {@C[0]-@C[9]} + + add sp,sp,#440+20 + ldmia sp!,{r4-r11,pc} +.size KeccakF1600,.-KeccakF1600 +___ +{ my ($A_flat,$inp,$len,$bsz) = map("r$_",(10..12,14)); + +######################################################################## +# Stack layout +# ----->+-----------------------+ +# | uint64_t A[5][5] | +# | ... | +# | ... | +# +456->+-----------------------+ +# | 0x55555555 | +# +460->+-----------------------+ +# | 0x33333333 | +# +464->+-----------------------+ +# | 0x0f0f0f0f | +# +468->+-----------------------+ +# | 0x00ff00ff | +# +472->+-----------------------+ +# | uint64_t *A | +# +476->+-----------------------+ +# | const void *inp | +# +480->+-----------------------+ +# | size_t len | +# +484->+-----------------------+ +# | size_t bs | +# +488->+-----------------------+ +# | .... + +$code.=<<___; +.global SHA3_absorb +.type SHA3_absorb,%function +.align 5 +SHA3_absorb: + stmdb sp!,{r0-r12,lr} + sub sp,sp,#456+16 + + add $A_flat,r0,#$A[1][0] + @ mov $inp,r1 + mov $len,r2 + mov $bsz,r3 + cmp r2,r3 + blo .Labsorb_abort + + add $inp,sp,#0 + ldmia r0, {@C[0]-@C[9]} @ copy A[5][5] to stack + stmia $inp!, {@C[0]-@C[9]} + ldmia $A_flat!,{@C[0]-@C[9]} + stmia $inp!, {@C[0]-@C[9]} + ldmia $A_flat!,{@C[0]-@C[9]} + stmia $inp!, {@C[0]-@C[9]} + ldmia $A_flat!,{@C[0]-@C[9]} + stmia $inp!, {@C[0]-@C[9]} + ldmia $A_flat!,{@C[0]-@C[9]} + stmia $inp, {@C[0]-@C[9]} + + ldr $inp,[sp,#476] @ restore $inp +#ifdef __thumb2__ + mov r9,#0x00ff00ff + mov r8,#0x0f0f0f0f + mov r7,#0x33333333 + mov r6,#0x55555555 +#else + mov r6,#0x11 @ compose constants + mov r8,#0x0f + mov r9,#0xff + orr r6,r6,r6,lsl#8 + orr r8,r8,r8,lsl#8 + orr r6,r6,r6,lsl#16 @ 0x11111111 + orr r9,r9,r9,lsl#16 @ 0x00ff00ff + orr r8,r8,r8,lsl#16 @ 0x0f0f0f0f + orr r7,r6,r6,lsl#1 @ 0x33333333 + orr r6,r6,r6,lsl#2 @ 0x55555555 +#endif + str r9,[sp,#468] + str r8,[sp,#464] + str r7,[sp,#460] + str r6,[sp,#456] + b .Loop_absorb + +.align 4 +.Loop_absorb: + subs r0,$len,$bsz + blo .Labsorbed + add $A_flat,sp,#0 + str r0,[sp,#480] @ save len - bsz + +.align 4 +.Loop_block: + ldrb r0,[$inp],#1 + ldrb r1,[$inp],#1 + ldrb r2,[$inp],#1 + ldrb r3,[$inp],#1 + ldrb r4,[$inp],#1 + orr r0,r0,r1,lsl#8 + ldrb r1,[$inp],#1 + orr r0,r0,r2,lsl#16 + ldrb r2,[$inp],#1 + orr r0,r0,r3,lsl#24 @ lo + ldrb r3,[$inp],#1 + orr r1,r4,r1,lsl#8 + orr r1,r1,r2,lsl#16 + orr r1,r1,r3,lsl#24 @ hi + + and r2,r0,r6 @ &=0x55555555 + and r0,r0,r6,lsl#1 @ &=0xaaaaaaaa + and r3,r1,r6 @ &=0x55555555 + and r1,r1,r6,lsl#1 @ &=0xaaaaaaaa + orr r2,r2,r2,lsr#1 + orr r0,r0,r0,lsl#1 + orr r3,r3,r3,lsr#1 + orr r1,r1,r1,lsl#1 + and r2,r2,r7 @ &=0x33333333 + and r0,r0,r7,lsl#2 @ &=0xcccccccc + and r3,r3,r7 @ &=0x33333333 + and r1,r1,r7,lsl#2 @ &=0xcccccccc + orr r2,r2,r2,lsr#2 + orr r0,r0,r0,lsl#2 + orr r3,r3,r3,lsr#2 + orr r1,r1,r1,lsl#2 + and r2,r2,r8 @ &=0x0f0f0f0f + and r0,r0,r8,lsl#4 @ &=0xf0f0f0f0 + and r3,r3,r8 @ &=0x0f0f0f0f + and r1,r1,r8,lsl#4 @ &=0xf0f0f0f0 + ldmia $A_flat,{r4-r5} @ A_flat[i] + orr r2,r2,r2,lsr#4 + orr r0,r0,r0,lsl#4 + orr r3,r3,r3,lsr#4 + orr r1,r1,r1,lsl#4 + and r2,r2,r9 @ &=0x00ff00ff + and r0,r0,r9,lsl#8 @ &=0xff00ff00 + and r3,r3,r9 @ &=0x00ff00ff + and r1,r1,r9,lsl#8 @ &=0xff00ff00 + orr r2,r2,r2,lsr#8 + orr r0,r0,r0,lsl#8 + orr r3,r3,r3,lsr#8 + orr r1,r1,r1,lsl#8 + + lsl r2,r2,#16 + lsr r1,r1,#16 + eor r4,r4,r3,lsl#16 + eor r5,r5,r0,lsr#16 + eor r4,r4,r2,lsr#16 + eor r5,r5,r1,lsl#16 + stmia $A_flat!,{r4-r5} @ A_flat[i++] ^= BitInterleave(inp[0..7]) + + subs $bsz,$bsz,#8 + bhi .Loop_block + + str $inp,[sp,#476] + + bl KeccakF1600_int + + add r14,sp,#456 + ldmia r14,{r6-r12,r14} @ restore constants and variables + b .Loop_absorb + +.align 4 +.Labsorbed: + add $inp,sp,#$A[1][0] + ldmia sp, {@C[0]-@C[9]} + stmia $A_flat!,{@C[0]-@C[9]} @ return A[5][5] + ldmia $inp!, {@C[0]-@C[9]} + stmia $A_flat!,{@C[0]-@C[9]} + ldmia $inp!, {@C[0]-@C[9]} + stmia $A_flat!,{@C[0]-@C[9]} + ldmia $inp!, {@C[0]-@C[9]} + stmia $A_flat!,{@C[0]-@C[9]} + ldmia $inp, {@C[0]-@C[9]} + stmia $A_flat, {@C[0]-@C[9]} + +.Labsorb_abort: + add sp,sp,#456+32 + mov r0,$len @ return value + ldmia sp!,{r4-r12,pc} +.size SHA3_absorb,.-SHA3_absorb +___ +} +{ my ($out,$len,$A_flat,$bsz) = map("r$_", (4,5,10,12)); + +$code.=<<___; +.global SHA3_squeeze +.type SHA3_squeeze,%function +.align 5 +SHA3_squeeze: + stmdb sp!,{r0,r3-r10,lr} + + mov $A_flat,r0 + mov $out,r1 + mov $len,r2 + mov $bsz,r3 + +#ifdef __thumb2__ + mov r9,#0x00ff00ff + mov r8,#0x0f0f0f0f + mov r7,#0x33333333 + mov r6,#0x55555555 +#else + mov r6,#0x11 @ compose constants + mov r8,#0x0f + mov r9,#0xff + orr r6,r6,r6,lsl#8 + orr r8,r8,r8,lsl#8 + orr r6,r6,r6,lsl#16 @ 0x11111111 + orr r9,r9,r9,lsl#16 @ 0x00ff00ff + orr r8,r8,r8,lsl#16 @ 0x0f0f0f0f + orr r7,r6,r6,lsl#1 @ 0x33333333 + orr r6,r6,r6,lsl#2 @ 0x55555555 +#endif + stmdb sp!,{r6-r9} + + mov r14,$A_flat + b .Loop_squeeze + +.align 4 +.Loop_squeeze: + ldmia $A_flat!,{r0,r1} @ A_flat[i++] + + lsl r2,r0,#16 + lsl r3,r1,#16 @ r3 = r1 << 16 + lsr r2,r2,#16 @ r2 = r0 & 0x0000ffff + lsr r1,r1,#16 + lsr r0,r0,#16 @ r0 = r0 >> 16 + lsl r1,r1,#16 @ r1 = r1 & 0xffff0000 + + orr r2,r2,r2,lsl#8 + orr r3,r3,r3,lsr#8 + orr r0,r0,r0,lsl#8 + orr r1,r1,r1,lsr#8 + and r2,r2,r9 @ &=0x00ff00ff + and r3,r3,r9,lsl#8 @ &=0xff00ff00 + and r0,r0,r9 @ &=0x00ff00ff + and r1,r1,r9,lsl#8 @ &=0xff00ff00 + orr r2,r2,r2,lsl#4 + orr r3,r3,r3,lsr#4 + orr r0,r0,r0,lsl#4 + orr r1,r1,r1,lsr#4 + and r2,r2,r8 @ &=0x0f0f0f0f + and r3,r3,r8,lsl#4 @ &=0xf0f0f0f0 + and r0,r0,r8 @ &=0x0f0f0f0f + and r1,r1,r8,lsl#4 @ &=0xf0f0f0f0 + orr r2,r2,r2,lsl#2 + orr r3,r3,r3,lsr#2 + orr r0,r0,r0,lsl#2 + orr r1,r1,r1,lsr#2 + and r2,r2,r7 @ &=0x33333333 + and r3,r3,r7,lsl#2 @ &=0xcccccccc + and r0,r0,r7 @ &=0x33333333 + and r1,r1,r7,lsl#2 @ &=0xcccccccc + orr r2,r2,r2,lsl#1 + orr r3,r3,r3,lsr#1 + orr r0,r0,r0,lsl#1 + orr r1,r1,r1,lsr#1 + and r2,r2,r6 @ &=0x55555555 + and r3,r3,r6,lsl#1 @ &=0xaaaaaaaa + and r0,r0,r6 @ &=0x55555555 + and r1,r1,r6,lsl#1 @ &=0xaaaaaaaa + + orr r2,r2,r3 + orr r0,r0,r1 + + cmp $len,#8 + blo .Lsqueeze_tail + lsr r1,r2,#8 + strb r2,[$out],#1 + lsr r3,r2,#16 + strb r1,[$out],#1 + lsr r2,r2,#24 + strb r3,[$out],#1 + strb r2,[$out],#1 + + lsr r1,r0,#8 + strb r0,[$out],#1 + lsr r3,r0,#16 + strb r1,[$out],#1 + lsr r0,r0,#24 + strb r3,[$out],#1 + strb r0,[$out],#1 + subs $len,$len,#8 + beq .Lsqueeze_done + + subs $bsz,$bsz,#8 @ bsz -= 8 + bhi .Loop_squeeze + + mov r0,r14 @ original $A_flat + + bl KeccakF1600 + + ldmia sp,{r6-r10,r12} @ restore constants and variables + mov r14,$A_flat + b .Loop_squeeze + +.align 4 +.Lsqueeze_tail: + strb r2,[$out],#1 + lsr r2,r2,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb r2,[$out],#1 + lsr r2,r2,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb r2,[$out],#1 + lsr r2,r2,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb r2,[$out],#1 + subs $len,$len,#1 + beq .Lsqueeze_done + + strb r0,[$out],#1 + lsr r0,r0,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb r0,[$out],#1 + lsr r0,r0,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb r0,[$out] + b .Lsqueeze_done + +.align 4 +.Lsqueeze_done: + add sp,sp,#24 + ldmia sp!,{r4-r10,pc} +.size SHA3_squeeze,.-SHA3_squeeze +___ +} + +$code.=<<___; +.fpu neon + +.type iotas64, %object +.align 5 +iotas64: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 +.size iotas64,.-iotas64 + +.type KeccakF1600_neon, %function +.align 5 +KeccakF1600_neon: + add r1, r0, #16 + adr r2, iotas64 + mov r3, #24 @ loop counter + b .Loop_neon + +.align 4 +.Loop_neon: + @ Theta + vst1.64 {q4}, [r0:64] @ offload A[0..1][4] + veor q13, q0, q5 @ A[0..1][0]^A[2..3][0] + vst1.64 {d18}, [r1:64] @ offload A[2][4] + veor q14, q1, q6 @ A[0..1][1]^A[2..3][1] + veor q15, q2, q7 @ A[0..1][2]^A[2..3][2] + veor d26, d26, d27 @ C[0]=A[0][0]^A[1][0]^A[2][0]^A[3][0] + veor d27, d28, d29 @ C[1]=A[0][1]^A[1][1]^A[2][1]^A[3][1] + veor q14, q3, q8 @ A[0..1][3]^A[2..3][3] + veor q4, q4, q9 @ A[0..1][4]^A[2..3][4] + veor d30, d30, d31 @ C[2]=A[0][2]^A[1][2]^A[2][2]^A[3][2] + veor d31, d28, d29 @ C[3]=A[0][3]^A[1][3]^A[2][3]^A[3][3] + veor d25, d8, d9 @ C[4]=A[0][4]^A[1][4]^A[2][4]^A[3][4] + veor q13, q13, q10 @ C[0..1]^=A[4][0..1] + veor q14, q15, q11 @ C[2..3]^=A[4][2..3] + veor d25, d25, d24 @ C[4]^=A[4][4] + + vadd.u64 q4, q13, q13 @ C[0..1]<<1 + vadd.u64 q15, q14, q14 @ C[2..3]<<1 + vadd.u64 d18, d25, d25 @ C[4]<<1 + vsri.u64 q4, q13, #63 @ ROL64(C[0..1],1) + vsri.u64 q15, q14, #63 @ ROL64(C[2..3],1) + vsri.u64 d18, d25, #63 @ ROL64(C[4],1) + veor d25, d25, d9 @ D[0] = C[4] ^= ROL64(C[1],1) + veor q13, q13, q15 @ D[1..2] = C[0..1] ^ ROL64(C[2..3],1) + veor d28, d28, d18 @ D[3] = C[2] ^= ROL64(C[4],1) + veor d29, d29, d8 @ D[4] = C[3] ^= ROL64(C[0],1) + + veor d0, d0, d25 @ A[0][0] ^= C[4] + veor d1, d1, d25 @ A[1][0] ^= C[4] + veor d10, d10, d25 @ A[2][0] ^= C[4] + veor d11, d11, d25 @ A[3][0] ^= C[4] + veor d20, d20, d25 @ A[4][0] ^= C[4] + + veor d2, d2, d26 @ A[0][1] ^= D[1] + veor d3, d3, d26 @ A[1][1] ^= D[1] + veor d12, d12, d26 @ A[2][1] ^= D[1] + veor d13, d13, d26 @ A[3][1] ^= D[1] + veor d21, d21, d26 @ A[4][1] ^= D[1] + vmov d26, d27 + + veor d6, d6, d28 @ A[0][3] ^= C[2] + veor d7, d7, d28 @ A[1][3] ^= C[2] + veor d16, d16, d28 @ A[2][3] ^= C[2] + veor d17, d17, d28 @ A[3][3] ^= C[2] + veor d23, d23, d28 @ A[4][3] ^= C[2] + vld1.64 {q4}, [r0:64] @ restore A[0..1][4] + vmov d28, d29 + + vld1.64 {d18}, [r1:64] @ restore A[2][4] + veor q2, q2, q13 @ A[0..1][2] ^= D[2] + veor q7, q7, q13 @ A[2..3][2] ^= D[2] + veor d22, d22, d27 @ A[4][2] ^= D[2] + + veor q4, q4, q14 @ A[0..1][4] ^= C[3] + veor q9, q9, q14 @ A[2..3][4] ^= C[3] + veor d24, d24, d29 @ A[4][4] ^= C[3] + + @ Rho + Pi + vmov d26, d2 @ C[1] = A[0][1] + vshl.u64 d2, d3, #44 + vmov d27, d4 @ C[2] = A[0][2] + vshl.u64 d4, d14, #43 + vmov d28, d6 @ C[3] = A[0][3] + vshl.u64 d6, d17, #21 + vmov d29, d8 @ C[4] = A[0][4] + vshl.u64 d8, d24, #14 + vsri.u64 d2, d3, #64-44 @ A[0][1] = ROL64(A[1][1], rhotates[1][1]) + vsri.u64 d4, d14, #64-43 @ A[0][2] = ROL64(A[2][2], rhotates[2][2]) + vsri.u64 d6, d17, #64-21 @ A[0][3] = ROL64(A[3][3], rhotates[3][3]) + vsri.u64 d8, d24, #64-14 @ A[0][4] = ROL64(A[4][4], rhotates[4][4]) + + vshl.u64 d3, d9, #20 + vshl.u64 d14, d16, #25 + vshl.u64 d17, d15, #15 + vshl.u64 d24, d21, #2 + vsri.u64 d3, d9, #64-20 @ A[1][1] = ROL64(A[1][4], rhotates[1][4]) + vsri.u64 d14, d16, #64-25 @ A[2][2] = ROL64(A[2][3], rhotates[2][3]) + vsri.u64 d17, d15, #64-15 @ A[3][3] = ROL64(A[3][2], rhotates[3][2]) + vsri.u64 d24, d21, #64-2 @ A[4][4] = ROL64(A[4][1], rhotates[4][1]) + + vshl.u64 d9, d22, #61 + @ vshl.u64 d16, d19, #8 + vshl.u64 d15, d12, #10 + vshl.u64 d21, d7, #55 + vsri.u64 d9, d22, #64-61 @ A[1][4] = ROL64(A[4][2], rhotates[4][2]) + vext.8 d16, d19, d19, #8-1 @ A[2][3] = ROL64(A[3][4], rhotates[3][4]) + vsri.u64 d15, d12, #64-10 @ A[3][2] = ROL64(A[2][1], rhotates[2][1]) + vsri.u64 d21, d7, #64-55 @ A[4][1] = ROL64(A[1][3], rhotates[1][3]) + + vshl.u64 d22, d18, #39 + @ vshl.u64 d19, d23, #56 + vshl.u64 d12, d5, #6 + vshl.u64 d7, d13, #45 + vsri.u64 d22, d18, #64-39 @ A[4][2] = ROL64(A[2][4], rhotates[2][4]) + vext.8 d19, d23, d23, #8-7 @ A[3][4] = ROL64(A[4][3], rhotates[4][3]) + vsri.u64 d12, d5, #64-6 @ A[2][1] = ROL64(A[1][2], rhotates[1][2]) + vsri.u64 d7, d13, #64-45 @ A[1][3] = ROL64(A[3][1], rhotates[3][1]) + + vshl.u64 d18, d20, #18 + vshl.u64 d23, d11, #41 + vshl.u64 d5, d10, #3 + vshl.u64 d13, d1, #36 + vsri.u64 d18, d20, #64-18 @ A[2][4] = ROL64(A[4][0], rhotates[4][0]) + vsri.u64 d23, d11, #64-41 @ A[4][3] = ROL64(A[3][0], rhotates[3][0]) + vsri.u64 d5, d10, #64-3 @ A[1][2] = ROL64(A[2][0], rhotates[2][0]) + vsri.u64 d13, d1, #64-36 @ A[3][1] = ROL64(A[1][0], rhotates[1][0]) + + vshl.u64 d1, d28, #28 + vshl.u64 d10, d26, #1 + vshl.u64 d11, d29, #27 + vshl.u64 d20, d27, #62 + vsri.u64 d1, d28, #64-28 @ A[1][0] = ROL64(C[3], rhotates[0][3]) + vsri.u64 d10, d26, #64-1 @ A[2][0] = ROL64(C[1], rhotates[0][1]) + vsri.u64 d11, d29, #64-27 @ A[3][0] = ROL64(C[4], rhotates[0][4]) + vsri.u64 d20, d27, #64-62 @ A[4][0] = ROL64(C[2], rhotates[0][2]) + + @ Chi + Iota + vbic q13, q2, q1 + vbic q14, q3, q2 + vbic q15, q4, q3 + veor q13, q13, q0 @ A[0..1][0] ^ (~A[0..1][1] & A[0..1][2]) + veor q14, q14, q1 @ A[0..1][1] ^ (~A[0..1][2] & A[0..1][3]) + veor q2, q2, q15 @ A[0..1][2] ^= (~A[0..1][3] & A[0..1][4]) + vst1.64 {q13}, [r0:64] @ offload A[0..1][0] + vbic q13, q0, q4 + vbic q15, q1, q0 + vmov q1, q14 @ A[0..1][1] + veor q3, q3, q13 @ A[0..1][3] ^= (~A[0..1][4] & A[0..1][0]) + veor q4, q4, q15 @ A[0..1][4] ^= (~A[0..1][0] & A[0..1][1]) + + vbic q13, q7, q6 + vmov q0, q5 @ A[2..3][0] + vbic q14, q8, q7 + vmov q15, q6 @ A[2..3][1] + veor q5, q5, q13 @ A[2..3][0] ^= (~A[2..3][1] & A[2..3][2]) + vbic q13, q9, q8 + veor q6, q6, q14 @ A[2..3][1] ^= (~A[2..3][2] & A[2..3][3]) + vbic q14, q0, q9 + veor q7, q7, q13 @ A[2..3][2] ^= (~A[2..3][3] & A[2..3][4]) + vbic q13, q15, q0 + veor q8, q8, q14 @ A[2..3][3] ^= (~A[2..3][4] & A[2..3][0]) + vmov q14, q10 @ A[4][0..1] + veor q9, q9, q13 @ A[2..3][4] ^= (~A[2..3][0] & A[2..3][1]) + + vld1.64 d25, [r2:64]! @ Iota[i++] + vbic d26, d22, d21 + vbic d27, d23, d22 + vld1.64 {q0}, [r0:64] @ restore A[0..1][0] + veor d20, d20, d26 @ A[4][0] ^= (~A[4][1] & A[4][2]) + vbic d26, d24, d23 + veor d21, d21, d27 @ A[4][1] ^= (~A[4][2] & A[4][3]) + vbic d27, d28, d24 + veor d22, d22, d26 @ A[4][2] ^= (~A[4][3] & A[4][4]) + vbic d26, d29, d28 + veor d23, d23, d27 @ A[4][3] ^= (~A[4][4] & A[4][0]) + veor d0, d0, d25 @ A[0][0] ^= Iota[i] + veor d24, d24, d26 @ A[4][4] ^= (~A[4][0] & A[4][1]) + + subs r3, r3, #1 + bne .Loop_neon + + bx lr +.size KeccakF1600_neon,.-KeccakF1600_neon + +.global SHA3_absorb_neon +.type SHA3_absorb_neon, %function +.align 5 +SHA3_absorb_neon: + stmdb sp!, {r4-r6,lr} + vstmdb sp!, {d8-d15} + + mov r4, r1 @ inp + mov r5, r2 @ len + mov r6, r3 @ bsz + + vld1.32 {d0}, [r0:64]! @ A[0][0] + vld1.32 {d2}, [r0:64]! @ A[0][1] + vld1.32 {d4}, [r0:64]! @ A[0][2] + vld1.32 {d6}, [r0:64]! @ A[0][3] + vld1.32 {d8}, [r0:64]! @ A[0][4] + + vld1.32 {d1}, [r0:64]! @ A[1][0] + vld1.32 {d3}, [r0:64]! @ A[1][1] + vld1.32 {d5}, [r0:64]! @ A[1][2] + vld1.32 {d7}, [r0:64]! @ A[1][3] + vld1.32 {d9}, [r0:64]! @ A[1][4] + + vld1.32 {d10}, [r0:64]! @ A[2][0] + vld1.32 {d12}, [r0:64]! @ A[2][1] + vld1.32 {d14}, [r0:64]! @ A[2][2] + vld1.32 {d16}, [r0:64]! @ A[2][3] + vld1.32 {d18}, [r0:64]! @ A[2][4] + + vld1.32 {d11}, [r0:64]! @ A[3][0] + vld1.32 {d13}, [r0:64]! @ A[3][1] + vld1.32 {d15}, [r0:64]! @ A[3][2] + vld1.32 {d17}, [r0:64]! @ A[3][3] + vld1.32 {d19}, [r0:64]! @ A[3][4] + + vld1.32 {d20-d23}, [r0:64]! @ A[4][0..3] + vld1.32 {d24}, [r0:64] @ A[4][4] + sub r0, r0, #24*8 @ rewind + b .Loop_absorb_neon + +.align 4 +.Loop_absorb_neon: + subs r12, r5, r6 @ len - bsz + blo .Labsorbed_neon + mov r5, r12 + + vld1.8 {d31}, [r4]! @ endian-neutral loads... + cmp r6, #8*2 + veor d0, d0, d31 @ A[0][0] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d2, d2, d31 @ A[0][1] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*4 + veor d4, d4, d31 @ A[0][2] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d6, d6, d31 @ A[0][3] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31},[r4]! + cmp r6, #8*6 + veor d8, d8, d31 @ A[0][4] ^= *inp++ + blo .Lprocess_neon + + vld1.8 {d31}, [r4]! + veor d1, d1, d31 @ A[1][0] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*8 + veor d3, d3, d31 @ A[1][1] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d5, d5, d31 @ A[1][2] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*10 + veor d7, d7, d31 @ A[1][3] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d9, d9, d31 @ A[1][4] ^= *inp++ + beq .Lprocess_neon + + vld1.8 {d31}, [r4]! + cmp r6, #8*12 + veor d10, d10, d31 @ A[2][0] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d12, d12, d31 @ A[2][1] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*14 + veor d14, d14, d31 @ A[2][2] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d16, d16, d31 @ A[2][3] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*16 + veor d18, d18, d31 @ A[2][4] ^= *inp++ + blo .Lprocess_neon + + vld1.8 {d31}, [r4]! + veor d11, d11, d31 @ A[3][0] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*18 + veor d13, d13, d31 @ A[3][1] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d15, d15, d31 @ A[3][2] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*20 + veor d17, d17, d31 @ A[3][3] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d19, d19, d31 @ A[3][4] ^= *inp++ + beq .Lprocess_neon + + vld1.8 {d31}, [r4]! + cmp r6, #8*22 + veor d20, d20, d31 @ A[4][0] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d21, d21, d31 @ A[4][1] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + cmp r6, #8*24 + veor d22, d22, d31 @ A[4][2] ^= *inp++ + blo .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d23, d23, d31 @ A[4][3] ^= *inp++ + beq .Lprocess_neon + vld1.8 {d31}, [r4]! + veor d24, d24, d31 @ A[4][4] ^= *inp++ + +.Lprocess_neon: + bl KeccakF1600_neon + b .Loop_absorb_neon + +.align 4 +.Labsorbed_neon: + vst1.32 {d0}, [r0:64]! @ A[0][0..4] + vst1.32 {d2}, [r0:64]! + vst1.32 {d4}, [r0:64]! + vst1.32 {d6}, [r0:64]! + vst1.32 {d8}, [r0:64]! + + vst1.32 {d1}, [r0:64]! @ A[1][0..4] + vst1.32 {d3}, [r0:64]! + vst1.32 {d5}, [r0:64]! + vst1.32 {d7}, [r0:64]! + vst1.32 {d9}, [r0:64]! + + vst1.32 {d10}, [r0:64]! @ A[2][0..4] + vst1.32 {d12}, [r0:64]! + vst1.32 {d14}, [r0:64]! + vst1.32 {d16}, [r0:64]! + vst1.32 {d18}, [r0:64]! + + vst1.32 {d11}, [r0:64]! @ A[3][0..4] + vst1.32 {d13}, [r0:64]! + vst1.32 {d15}, [r0:64]! + vst1.32 {d17}, [r0:64]! + vst1.32 {d19}, [r0:64]! + + vst1.32 {d20-d23}, [r0:64]! @ A[4][0..4] + vst1.32 {d24}, [r0:64] + + mov r0, r5 @ return value + vldmia sp!, {d8-d15} + ldmia sp!, {r4-r6,pc} +.size SHA3_absorb_neon,.-SHA3_absorb_neon + +.global SHA3_squeeze_neon +.type SHA3_squeeze_neon, %function +.align 5 +SHA3_squeeze_neon: + stmdb sp!, {r4-r6,lr} + + mov r4, r1 @ out + mov r5, r2 @ len + mov r6, r3 @ bsz + mov r12, r0 @ A_flat + mov r14, r3 @ bsz + b .Loop_squeeze_neon + +.align 4 +.Loop_squeeze_neon: + cmp r5, #8 + blo .Lsqueeze_neon_tail + vld1.32 {d0}, [r12]! + vst1.8 {d0}, [r4]! @ endian-neutral store + + subs r5, r5, #8 @ len -= 8 + beq .Lsqueeze_neon_done + + subs r14, r14, #8 @ bsz -= 8 + bhi .Loop_squeeze_neon + + vstmdb sp!, {d8-d15} + + vld1.32 {d0}, [r0:64]! @ A[0][0..4] + vld1.32 {d2}, [r0:64]! + vld1.32 {d4}, [r0:64]! + vld1.32 {d6}, [r0:64]! + vld1.32 {d8}, [r0:64]! + + vld1.32 {d1}, [r0:64]! @ A[1][0..4] + vld1.32 {d3}, [r0:64]! + vld1.32 {d5}, [r0:64]! + vld1.32 {d7}, [r0:64]! + vld1.32 {d9}, [r0:64]! + + vld1.32 {d10}, [r0:64]! @ A[2][0..4] + vld1.32 {d12}, [r0:64]! + vld1.32 {d14}, [r0:64]! + vld1.32 {d16}, [r0:64]! + vld1.32 {d18}, [r0:64]! + + vld1.32 {d11}, [r0:64]! @ A[3][0..4] + vld1.32 {d13}, [r0:64]! + vld1.32 {d15}, [r0:64]! + vld1.32 {d17}, [r0:64]! + vld1.32 {d19}, [r0:64]! + + vld1.32 {d20-d23}, [r0:64]! @ A[4][0..4] + vld1.32 {d24}, [r0:64] + sub r0, r0, #24*8 @ rewind + + bl KeccakF1600_neon + + mov r12, r0 @ A_flat + vst1.32 {d0}, [r0:64]! @ A[0][0..4] + vst1.32 {d2}, [r0:64]! + vst1.32 {d4}, [r0:64]! + vst1.32 {d6}, [r0:64]! + vst1.32 {d8}, [r0:64]! + + vst1.32 {d1}, [r0:64]! @ A[1][0..4] + vst1.32 {d3}, [r0:64]! + vst1.32 {d5}, [r0:64]! + vst1.32 {d7}, [r0:64]! + vst1.32 {d9}, [r0:64]! + + vst1.32 {d10}, [r0:64]! @ A[2][0..4] + vst1.32 {d12}, [r0:64]! + vst1.32 {d14}, [r0:64]! + vst1.32 {d16}, [r0:64]! + vst1.32 {d18}, [r0:64]! + + vst1.32 {d11}, [r0:64]! @ A[3][0..4] + vst1.32 {d13}, [r0:64]! + vst1.32 {d15}, [r0:64]! + vst1.32 {d17}, [r0:64]! + vst1.32 {d19}, [r0:64]! + + vst1.32 {d20-d23}, [r0:64]! @ A[4][0..4] + mov r14, r6 @ bsz + vst1.32 {d24}, [r0:64] + mov r0, r12 @ rewind + + vldmia sp!, {d8-d15} + b .Loop_squeeze_neon + +.align 4 +.Lsqueeze_neon_tail: + ldmia r12, {r2,r3} + cmp r5, #2 + strb r2, [r4],#1 @ endian-neutral store + lsr r2, r2, #8 + blo .Lsqueeze_neon_done + strb r2, [r4], #1 + lsr r2, r2, #8 + beq .Lsqueeze_neon_done + strb r2, [r4], #1 + lsr r2, r2, #8 + cmp r5, #4 + blo .Lsqueeze_neon_done + strb r2, [r4], #1 + beq .Lsqueeze_neon_done + + strb r3, [r4], #1 + lsr r3, r3, #8 + cmp r5, #6 + blo .Lsqueeze_neon_done + strb r3, [r4], #1 + lsr r3, r3, #8 + beq .Lsqueeze_neon_done + strb r3, [r4], #1 + +.Lsqueeze_neon_done: + ldmia sp!, {r4-r6,pc} +.size SHA3_squeeze_neon,.-SHA3_squeeze_neon +.asciz "Keccak-1600 absorb and squeeze for ARMv4/NEON, CRYPTOGAMS by " +.align 2 +___ + +{ + my %ldr, %str; + + sub ldrd { + my ($mnemonic,$half,$reg,$ea) = @_; + my $op = $mnemonic eq "ldr" ? \%ldr : \%str; + + if ($half eq "l") { + $$op{reg} = $reg; + $$op{ea} = $ea; + sprintf "#ifndef __thumb2__\n" . + " %s\t%s,%s\n" . + "#endif", $mnemonic,$reg,$ea; + } else { + sprintf "#ifndef __thumb2__\n" . + " %s\t%s,%s\n" . + "#else\n" . + " %sd\t%s,%s,%s\n" . + "#endif", $mnemonic,$reg,$ea, + $mnemonic,$$op{reg},$reg,$$op{ea}; + } + } +} + +foreach (split($/,$code)) { + s/\`([^\`]*)\`/eval $1/ge; + + s/^\s+(ldr|str)\.([lh])\s+(r[0-9]+),\s*(\[.*)/ldrd($1,$2,$3,$4)/ge or + s/\bret\b/bx lr/g or + s/\bbx\s+lr\b/.word\t0xe12fff1e/g; # make it possible to compile with -march=armv4 + + print $_,"\n"; +} + +close STDOUT; # enforce flush diff --git a/crypto/sha/asm/keccak1600-armv8.pl b/crypto/sha/asm/keccak1600-armv8.pl new file mode 100755 index 00000000..a32b8bae --- /dev/null +++ b/crypto/sha/asm/keccak1600-armv8.pl @@ -0,0 +1,866 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for ARMv8. +# +# June 2017. +# +# This is straightforward KECCAK_1X_ALT implementation. It makes no +# sense to attempt SIMD/NEON implementation for following reason. +# 64-bit lanes of vector registers can't be addressed as easily as in +# 32-bit mode. This means that 64-bit NEON is bound to be slower than +# 32-bit NEON, and this implementation is faster than 32-bit NEON on +# same processor. Even though it takes more scalar xor's and andn's, +# it gets compensated by availability of rotate. Not to forget that +# most processors achieve higher issue rate with scalar instructions. +# +# February 2018. +# +# Add hardware-assisted ARMv8.2 implementation. It's KECCAK_1X_ALT +# variant with register permutation/rotation twist that allows to +# eliminate copies to temporary registers. If you look closely you'll +# notice that it uses only one lane of vector registers. The new +# instructions effectively facilitate parallel hashing, which we don't +# support [yet?]. But lowest-level core procedure is prepared for it. +# The inner round is 67 [vector] instructions, so it's not actually +# obvious that it will provide performance improvement [in serial +# hash] as long as vector instructions issue rate is limited to 1 per +# cycle... +# +###################################################################### +# Numbers are cycles per processed byte. +# +# r=1088(*) +# +# Cortex-A53 13 +# Cortex-A57 12 +# X-Gene 14 +# Mongoose 10 +# Kryo 12 +# Denver 7.8 +# Apple A7 7.2 +# +# (*) Corresponds to SHA3-256. No improvement coefficients are listed +# because they vary too much from compiler to compiler. Newer +# compiler does much better and improvement varies from 5% on +# Cortex-A57 to 25% on Cortex-A53. While in comparison to older +# compiler this code is at least 2x faster... + +$flavour = shift; +$output = shift; + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or +die "can't locate arm-xlate.pl"; + +open OUT,"| \"$^X\" $xlate $flavour $output"; +*STDOUT=*OUT; + +my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 36, 44, 6, 55, 20 ], + [ 3, 10, 43, 25, 39 ], + [ 41, 45, 15, 21, 8 ], + [ 18, 2, 61, 56, 14 ]); + +$code.=<<___; +.text + +.align 8 // strategic alignment and padding that allows to use + // address value as loop termination condition... + .quad 0,0,0,0,0,0,0,0 +.type iotas,%object +iotas: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 +.size iotas,.-iotas +___ + {{{ +my @A = map([ "x$_", "x".($_+1), "x".($_+2), "x".($_+3), "x".($_+4) ], + (0, 5, 10, 15, 20)); + $A[3][3] = "x25"; # x18 is reserved + +my @C = map("x$_", (26,27,28,30)); + +$code.=<<___; +.type KeccakF1600_int,%function +.align 5 +KeccakF1600_int: + adr $C[2],iotas + stp $C[2],x30,[sp,#16] // 32 bytes on top are mine + b .Loop +.align 4 +.Loop: + ////////////////////////////////////////// Theta + eor $C[0],$A[0][0],$A[1][0] + stp $A[0][4],$A[1][4],[sp,#0] // offload pair... + eor $C[1],$A[0][1],$A[1][1] + eor $C[2],$A[0][2],$A[1][2] + eor $C[3],$A[0][3],$A[1][3] +___ + $C[4]=$A[0][4]; + $C[5]=$A[1][4]; +$code.=<<___; + eor $C[4],$A[0][4],$A[1][4] + eor $C[0],$C[0],$A[2][0] + eor $C[1],$C[1],$A[2][1] + eor $C[2],$C[2],$A[2][2] + eor $C[3],$C[3],$A[2][3] + eor $C[4],$C[4],$A[2][4] + eor $C[0],$C[0],$A[3][0] + eor $C[1],$C[1],$A[3][1] + eor $C[2],$C[2],$A[3][2] + eor $C[3],$C[3],$A[3][3] + eor $C[4],$C[4],$A[3][4] + eor $C[0],$C[0],$A[4][0] + eor $C[2],$C[2],$A[4][2] + eor $C[1],$C[1],$A[4][1] + eor $C[3],$C[3],$A[4][3] + eor $C[4],$C[4],$A[4][4] + + eor $C[5],$C[0],$C[2],ror#63 + + eor $A[0][1],$A[0][1],$C[5] + eor $A[1][1],$A[1][1],$C[5] + eor $A[2][1],$A[2][1],$C[5] + eor $A[3][1],$A[3][1],$C[5] + eor $A[4][1],$A[4][1],$C[5] + + eor $C[5],$C[1],$C[3],ror#63 + eor $C[2],$C[2],$C[4],ror#63 + eor $C[3],$C[3],$C[0],ror#63 + eor $C[4],$C[4],$C[1],ror#63 + + eor $C[1], $A[0][2],$C[5] // mov $C[1],$A[0][2] + eor $A[1][2],$A[1][2],$C[5] + eor $A[2][2],$A[2][2],$C[5] + eor $A[3][2],$A[3][2],$C[5] + eor $A[4][2],$A[4][2],$C[5] + + eor $A[0][0],$A[0][0],$C[4] + eor $A[1][0],$A[1][0],$C[4] + eor $A[2][0],$A[2][0],$C[4] + eor $A[3][0],$A[3][0],$C[4] + eor $A[4][0],$A[4][0],$C[4] +___ + $C[4]=undef; + $C[5]=undef; +$code.=<<___; + ldp $A[0][4],$A[1][4],[sp,#0] // re-load offloaded data + eor $C[0], $A[0][3],$C[2] // mov $C[0],$A[0][3] + eor $A[1][3],$A[1][3],$C[2] + eor $A[2][3],$A[2][3],$C[2] + eor $A[3][3],$A[3][3],$C[2] + eor $A[4][3],$A[4][3],$C[2] + + eor $C[2], $A[0][4],$C[3] // mov $C[2],$A[0][4] + eor $A[1][4],$A[1][4],$C[3] + eor $A[2][4],$A[2][4],$C[3] + eor $A[3][4],$A[3][4],$C[3] + eor $A[4][4],$A[4][4],$C[3] + + ////////////////////////////////////////// Rho+Pi + mov $C[3],$A[0][1] + ror $A[0][1],$A[1][1],#64-$rhotates[1][1] + //mov $C[1],$A[0][2] + ror $A[0][2],$A[2][2],#64-$rhotates[2][2] + //mov $C[0],$A[0][3] + ror $A[0][3],$A[3][3],#64-$rhotates[3][3] + //mov $C[2],$A[0][4] + ror $A[0][4],$A[4][4],#64-$rhotates[4][4] + + ror $A[1][1],$A[1][4],#64-$rhotates[1][4] + ror $A[2][2],$A[2][3],#64-$rhotates[2][3] + ror $A[3][3],$A[3][2],#64-$rhotates[3][2] + ror $A[4][4],$A[4][1],#64-$rhotates[4][1] + + ror $A[1][4],$A[4][2],#64-$rhotates[4][2] + ror $A[2][3],$A[3][4],#64-$rhotates[3][4] + ror $A[3][2],$A[2][1],#64-$rhotates[2][1] + ror $A[4][1],$A[1][3],#64-$rhotates[1][3] + + ror $A[4][2],$A[2][4],#64-$rhotates[2][4] + ror $A[3][4],$A[4][3],#64-$rhotates[4][3] + ror $A[2][1],$A[1][2],#64-$rhotates[1][2] + ror $A[1][3],$A[3][1],#64-$rhotates[3][1] + + ror $A[2][4],$A[4][0],#64-$rhotates[4][0] + ror $A[4][3],$A[3][0],#64-$rhotates[3][0] + ror $A[1][2],$A[2][0],#64-$rhotates[2][0] + ror $A[3][1],$A[1][0],#64-$rhotates[1][0] + + ror $A[1][0],$C[0],#64-$rhotates[0][3] + ror $A[2][0],$C[3],#64-$rhotates[0][1] + ror $A[3][0],$C[2],#64-$rhotates[0][4] + ror $A[4][0],$C[1],#64-$rhotates[0][2] + + ////////////////////////////////////////// Chi+Iota + bic $C[0],$A[0][2],$A[0][1] + bic $C[1],$A[0][3],$A[0][2] + bic $C[2],$A[0][0],$A[0][4] + bic $C[3],$A[0][1],$A[0][0] + eor $A[0][0],$A[0][0],$C[0] + bic $C[0],$A[0][4],$A[0][3] + eor $A[0][1],$A[0][1],$C[1] + ldr $C[1],[sp,#16] + eor $A[0][3],$A[0][3],$C[2] + eor $A[0][4],$A[0][4],$C[3] + eor $A[0][2],$A[0][2],$C[0] + ldr $C[3],[$C[1]],#8 // Iota[i++] + + bic $C[0],$A[1][2],$A[1][1] + tst $C[1],#255 // are we done? + str $C[1],[sp,#16] + bic $C[1],$A[1][3],$A[1][2] + bic $C[2],$A[1][0],$A[1][4] + eor $A[0][0],$A[0][0],$C[3] // A[0][0] ^= Iota + bic $C[3],$A[1][1],$A[1][0] + eor $A[1][0],$A[1][0],$C[0] + bic $C[0],$A[1][4],$A[1][3] + eor $A[1][1],$A[1][1],$C[1] + eor $A[1][3],$A[1][3],$C[2] + eor $A[1][4],$A[1][4],$C[3] + eor $A[1][2],$A[1][2],$C[0] + + bic $C[0],$A[2][2],$A[2][1] + bic $C[1],$A[2][3],$A[2][2] + bic $C[2],$A[2][0],$A[2][4] + bic $C[3],$A[2][1],$A[2][0] + eor $A[2][0],$A[2][0],$C[0] + bic $C[0],$A[2][4],$A[2][3] + eor $A[2][1],$A[2][1],$C[1] + eor $A[2][3],$A[2][3],$C[2] + eor $A[2][4],$A[2][4],$C[3] + eor $A[2][2],$A[2][2],$C[0] + + bic $C[0],$A[3][2],$A[3][1] + bic $C[1],$A[3][3],$A[3][2] + bic $C[2],$A[3][0],$A[3][4] + bic $C[3],$A[3][1],$A[3][0] + eor $A[3][0],$A[3][0],$C[0] + bic $C[0],$A[3][4],$A[3][3] + eor $A[3][1],$A[3][1],$C[1] + eor $A[3][3],$A[3][3],$C[2] + eor $A[3][4],$A[3][4],$C[3] + eor $A[3][2],$A[3][2],$C[0] + + bic $C[0],$A[4][2],$A[4][1] + bic $C[1],$A[4][3],$A[4][2] + bic $C[2],$A[4][0],$A[4][4] + bic $C[3],$A[4][1],$A[4][0] + eor $A[4][0],$A[4][0],$C[0] + bic $C[0],$A[4][4],$A[4][3] + eor $A[4][1],$A[4][1],$C[1] + eor $A[4][3],$A[4][3],$C[2] + eor $A[4][4],$A[4][4],$C[3] + eor $A[4][2],$A[4][2],$C[0] + + bne .Loop + + ldr x30,[sp,#24] + ret +.size KeccakF1600_int,.-KeccakF1600_int + +.type KeccakF1600,%function +.align 5 +KeccakF1600: + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#48 + + str x0,[sp,#32] // offload argument + mov $C[0],x0 + ldp $A[0][0],$A[0][1],[x0,#16*0] + ldp $A[0][2],$A[0][3],[$C[0],#16*1] + ldp $A[0][4],$A[1][0],[$C[0],#16*2] + ldp $A[1][1],$A[1][2],[$C[0],#16*3] + ldp $A[1][3],$A[1][4],[$C[0],#16*4] + ldp $A[2][0],$A[2][1],[$C[0],#16*5] + ldp $A[2][2],$A[2][3],[$C[0],#16*6] + ldp $A[2][4],$A[3][0],[$C[0],#16*7] + ldp $A[3][1],$A[3][2],[$C[0],#16*8] + ldp $A[3][3],$A[3][4],[$C[0],#16*9] + ldp $A[4][0],$A[4][1],[$C[0],#16*10] + ldp $A[4][2],$A[4][3],[$C[0],#16*11] + ldr $A[4][4],[$C[0],#16*12] + + bl KeccakF1600_int + + ldr $C[0],[sp,#32] + stp $A[0][0],$A[0][1],[$C[0],#16*0] + stp $A[0][2],$A[0][3],[$C[0],#16*1] + stp $A[0][4],$A[1][0],[$C[0],#16*2] + stp $A[1][1],$A[1][2],[$C[0],#16*3] + stp $A[1][3],$A[1][4],[$C[0],#16*4] + stp $A[2][0],$A[2][1],[$C[0],#16*5] + stp $A[2][2],$A[2][3],[$C[0],#16*6] + stp $A[2][4],$A[3][0],[$C[0],#16*7] + stp $A[3][1],$A[3][2],[$C[0],#16*8] + stp $A[3][3],$A[3][4],[$C[0],#16*9] + stp $A[4][0],$A[4][1],[$C[0],#16*10] + stp $A[4][2],$A[4][3],[$C[0],#16*11] + str $A[4][4],[$C[0],#16*12] + + ldp x19,x20,[x29,#16] + add sp,sp,#48 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 + ret +.size KeccakF1600,.-KeccakF1600 + +.globl SHA3_absorb +.type SHA3_absorb,%function +.align 5 +SHA3_absorb: + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#64 + + stp x0,x1,[sp,#32] // offload arguments + stp x2,x3,[sp,#48] + + mov $C[0],x0 // uint64_t A[5][5] + mov $C[1],x1 // const void *inp + mov $C[2],x2 // size_t len + mov $C[3],x3 // size_t bsz + ldp $A[0][0],$A[0][1],[$C[0],#16*0] + ldp $A[0][2],$A[0][3],[$C[0],#16*1] + ldp $A[0][4],$A[1][0],[$C[0],#16*2] + ldp $A[1][1],$A[1][2],[$C[0],#16*3] + ldp $A[1][3],$A[1][4],[$C[0],#16*4] + ldp $A[2][0],$A[2][1],[$C[0],#16*5] + ldp $A[2][2],$A[2][3],[$C[0],#16*6] + ldp $A[2][4],$A[3][0],[$C[0],#16*7] + ldp $A[3][1],$A[3][2],[$C[0],#16*8] + ldp $A[3][3],$A[3][4],[$C[0],#16*9] + ldp $A[4][0],$A[4][1],[$C[0],#16*10] + ldp $A[4][2],$A[4][3],[$C[0],#16*11] + ldr $A[4][4],[$C[0],#16*12] + b .Loop_absorb + +.align 4 +.Loop_absorb: + subs $C[0],$C[2],$C[3] // len - bsz + blo .Labsorbed + + str $C[0],[sp,#48] // save len - bsz +___ +for (my $i=0; $i<24; $i+=2) { +my $j = $i+1; +$code.=<<___; + ldr $C[0],[$C[1]],#8 // *inp++ +#ifdef __AARCH64EB__ + rev $C[0],$C[0] +#endif + eor $A[$i/5][$i%5],$A[$i/5][$i%5],$C[0] + cmp $C[3],#8*($i+2) + blo .Lprocess_block + ldr $C[0],[$C[1]],#8 // *inp++ +#ifdef __AARCH64EB__ + rev $C[0],$C[0] +#endif + eor $A[$j/5][$j%5],$A[$j/5][$j%5],$C[0] + beq .Lprocess_block +___ +} +$code.=<<___; + ldr $C[0],[$C[1]],#8 // *inp++ +#ifdef __AARCH64EB__ + rev $C[0],$C[0] +#endif + eor $A[4][4],$A[4][4],$C[0] + +.Lprocess_block: + str $C[1],[sp,#40] // save inp + + bl KeccakF1600_int + + ldr $C[1],[sp,#40] // restore arguments + ldp $C[2],$C[3],[sp,#48] + b .Loop_absorb + +.align 4 +.Labsorbed: + ldr $C[1],[sp,#32] + stp $A[0][0],$A[0][1],[$C[1],#16*0] + stp $A[0][2],$A[0][3],[$C[1],#16*1] + stp $A[0][4],$A[1][0],[$C[1],#16*2] + stp $A[1][1],$A[1][2],[$C[1],#16*3] + stp $A[1][3],$A[1][4],[$C[1],#16*4] + stp $A[2][0],$A[2][1],[$C[1],#16*5] + stp $A[2][2],$A[2][3],[$C[1],#16*6] + stp $A[2][4],$A[3][0],[$C[1],#16*7] + stp $A[3][1],$A[3][2],[$C[1],#16*8] + stp $A[3][3],$A[3][4],[$C[1],#16*9] + stp $A[4][0],$A[4][1],[$C[1],#16*10] + stp $A[4][2],$A[4][3],[$C[1],#16*11] + str $A[4][4],[$C[1],#16*12] + + mov x0,$C[2] // return value + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 + ret +.size SHA3_absorb,.-SHA3_absorb +___ +{ +my ($A_flat,$out,$len,$bsz) = map("x$_",(19..22)); +$code.=<<___; +.globl SHA3_squeeze +.type SHA3_squeeze,%function +.align 5 +SHA3_squeeze: + stp x29,x30,[sp,#-48]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + + mov $A_flat,x0 // put aside arguments + mov $out,x1 + mov $len,x2 + mov $bsz,x3 + +.Loop_squeeze: + ldr x4,[x0],#8 + cmp $len,#8 + blo .Lsqueeze_tail +#ifdef __AARCH64EB__ + rev x4,x4 +#endif + str x4,[$out],#8 + subs $len,$len,#8 + beq .Lsqueeze_done + + subs x3,x3,#8 + bhi .Loop_squeeze + + mov x0,$A_flat + bl KeccakF1600 + mov x0,$A_flat + mov x3,$bsz + b .Loop_squeeze + +.align 4 +.Lsqueeze_tail: + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done + strb w4,[$out],#1 + +.Lsqueeze_done: + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x29,x30,[sp],#48 + ret +.size SHA3_squeeze,.-SHA3_squeeze +___ +} }}} + {{{ +my @A = map([ "v".$_.".16b", "v".($_+1).".16b", "v".($_+2).".16b", + "v".($_+3).".16b", "v".($_+4).".16b" ], + (0, 5, 10, 15, 20)); + +my @C = map("v$_.16b", (25..31)); + +$code.=<<___; +.type KeccakF1600_ce,%function +.align 5 +KeccakF1600_ce: + mov x9,#6 + adr x10,iotas + b .Loop_ce +.align 4 +.Loop_ce: +___ +for($i=0; $i<4; $i++) { +$code.=<<___; + ////////////////////////////////////////////////// Theta + eor3 $C[0],$A[0][0],$A[1][0],$A[2][0] + eor3 $C[1],$A[0][1],$A[1][1],$A[2][1] + eor3 $C[2],$A[0][2],$A[1][2],$A[2][2] + eor3 $C[3],$A[0][3],$A[1][3],$A[2][3] + eor3 $C[4],$A[0][4],$A[1][4],$A[2][4] + eor3 $C[0],$C[0], $A[3][0],$A[4][0] + eor3 $C[1],$C[1], $A[3][1],$A[4][1] + eor3 $C[2],$C[2], $A[3][2],$A[4][2] + eor3 $C[3],$C[3], $A[3][3],$A[4][3] + eor3 $C[4],$C[4], $A[3][4],$A[4][4] + + rax1 $C[5],$C[0],$C[2] // D[1] + rax1 $C[6],$C[1],$C[3] // D[2] + rax1 $C[2],$C[2],$C[4] // D[3] + rax1 $C[3],$C[3],$C[0] // D[4] + rax1 $C[4],$C[4],$C[1] // D[0] + + ////////////////////////////////////////////////// Theta+Rho+Pi + xar $C[0], $A[1][1],$C[5],#64-$rhotates[1][1] // C[0]=A[0][1] + xar $A[1][1],$A[1][4],$C[3],#64-$rhotates[1][4] + xar $A[1][4],$A[4][2],$C[6],#64-$rhotates[4][2] + xar $A[4][2],$A[2][4],$C[3],#64-$rhotates[2][4] + xar $A[2][4],$A[4][0],$C[4],#64-$rhotates[4][0] + + xar $A[4][0],$A[0][2],$C[6],#64-$rhotates[0][2] + + xar $A[0][2],$A[2][2],$C[6],#64-$rhotates[2][2] + xar $A[2][2],$A[2][3],$C[2],#64-$rhotates[2][3] + xar $A[2][3],$A[3][4],$C[3],#64-$rhotates[3][4] + xar $A[3][4],$A[4][3],$C[2],#64-$rhotates[4][3] + xar $A[4][3],$A[3][0],$C[4],#64-$rhotates[3][0] + + xar $A[3][0],$A[0][4],$C[3],#64-$rhotates[0][4] + + eor $A[0][0],$A[0][0],$C[4] + ldr x11,[x10],#8 + + xar $C[1] ,$A[3][3],$C[2],#64-$rhotates[3][3] // C[1]=A[0][3] + xar $A[3][3],$A[3][2],$C[6],#64-$rhotates[3][2] + xar $A[3][2],$A[2][1],$C[5],#64-$rhotates[2][1] + xar $A[2][1],$A[1][2],$C[6],#64-$rhotates[1][2] + xar $A[1][2],$A[2][0],$C[4],#64-$rhotates[2][0] + + xar $A[2][0],$A[0][1],$C[5],#64-$rhotates[0][1] // * + + xar $A[0][4],$A[4][4],$C[3],#64-$rhotates[4][4] + xar $A[4][4],$A[4][1],$C[5],#64-$rhotates[4][1] + xar $A[4][1],$A[1][3],$C[2],#64-$rhotates[1][3] + xar $A[1][3],$A[3][1],$C[5],#64-$rhotates[3][1] + xar $A[3][1],$A[1][0],$C[4],#64-$rhotates[1][0] + + xar $A[1][0],$A[0][3],$C[2],#64-$rhotates[0][3] // * + + ////////////////////////////////////////////////// Chi+Iota + dup $C[6],x11 // borrow C[6] + bcax $C[3], $A[0][0],$A[0][2],$C[0] // * + bcax $A[0][1],$C[0], $C[1], $A[0][2] // * + bcax $A[0][2],$A[0][2],$A[0][4],$C[1] + bcax $A[0][3],$C[1], $A[0][0],$A[0][4] + bcax $A[0][4],$A[0][4],$C[0], $A[0][0] + + bcax $C[0], $A[1][0],$A[1][2],$A[1][1] // * + bcax $C[1], $A[1][1],$A[1][3],$A[1][2] // * + bcax $A[1][2],$A[1][2],$A[1][4],$A[1][3] + bcax $A[1][3],$A[1][3],$A[1][0],$A[1][4] + bcax $A[1][4],$A[1][4],$A[1][1],$A[1][0] + + eor $A[0][0],$C[3],$C[6] // Iota + + bcax $C[2], $A[2][0],$A[2][2],$A[2][1] // * + bcax $C[3], $A[2][1],$A[2][3],$A[2][2] // * + bcax $A[2][2],$A[2][2],$A[2][4],$A[2][3] + bcax $A[2][3],$A[2][3],$A[2][0],$A[2][4] + bcax $A[2][4],$A[2][4],$A[2][1],$A[2][0] + + bcax $A[2][0],$A[3][0],$A[3][2],$A[3][1] // * + bcax $A[2][1],$A[3][1],$A[3][3],$A[3][2] // * + bcax $A[3][2],$A[3][2],$A[3][4],$A[3][3] + bcax $A[3][3],$A[3][3],$A[3][0],$A[3][4] + bcax $A[3][4],$A[3][4],$A[3][1],$A[3][0] + + bcax $A[3][0],$A[4][0],$A[4][2],$A[4][1] // * + bcax $A[3][1],$A[4][1],$A[4][3],$A[4][2] // * + bcax $A[4][2],$A[4][2],$A[4][4],$A[4][3] + bcax $A[4][3],$A[4][3],$A[4][0],$A[4][4] + bcax $A[4][4],$A[4][4],$A[4][1],$A[4][0] +___ + ($A[1][0],$A[1][1], $C[0],$C[1]) + = ($C[0],$C[1], $A[1][0],$A[1][1]); + ($A[2][0],$A[2][1], $A[3][0],$A[3][1], $A[4][0],$A[4][1], $C[2],$C[3]) + = ($C[2],$C[3], $A[2][0],$A[2][1], $A[3][0],$A[3][1], $A[4][0],$A[4][1]); +} +$code.=<<___; + subs x9,x9,#1 + bne .Loop_ce + + ret +.size KeccakF1600_ce,.-KeccakF1600_ce + +.type KeccakF1600_cext,%function +.align 5 +KeccakF1600_cext: + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp d8,d9,[sp,#16] // per ABI requirement + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] +___ +for($i=0; $i<24; $i+=2) { # load A[5][5] +my $j=$i+1; +$code.=<<___; + ldp d$i,d$j,[x0,#8*$i] +___ +} +$code.=<<___; + ldr d24,[x0,#8*$i] + bl KeccakF1600_ce + ldr x30,[sp,#8] +___ +for($i=0; $i<24; $i+=2) { # store A[5][5] +my $j=$i+1; +$code.=<<___; + stp d$i,d$j,[x0,#8*$i] +___ +} +$code.=<<___; + str d24,[x0,#8*$i] + + ldp d8,d9,[sp,#16] + ldp d10,d11,[sp,#32] + ldp d12,d13,[sp,#48] + ldp d14,d15,[sp,#64] + ldr x29,[sp],#80 + ret +.size KeccakF1600_cext,.-KeccakF1600_cext +___ + +{ +my ($ctx,$inp,$len,$bsz) = map("x$_",(0..3)); + +$code.=<<___; +.globl SHA3_absorb_cext +.type SHA3_absorb_cext,%function +.align 5 +SHA3_absorb_cext: + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp d8,d9,[sp,#16] // per ABI requirement + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] +___ +for($i=0; $i<24; $i+=2) { # load A[5][5] +my $j=$i+1; +$code.=<<___; + ldp d$i,d$j,[x0,#8*$i] +___ +} +$code.=<<___; + ldr d24,[x0,#8*$i] + b .Loop_absorb_ce + +.align 4 +.Loop_absorb_ce: + subs $len,$len,$bsz // len - bsz + blo .Labsorbed_ce +___ +for (my $i=0; $i<24; $i+=2) { +my $j = $i+1; +$code.=<<___; + ldr d31,[$inp],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor $A[$i/5][$i%5],$A[$i/5][$i%5],v31.16b + cmp $bsz,#8*($i+2) + blo .Lprocess_block_ce + ldr d31,[$inp],#8 // *inp++ +#ifdef __AARCH64EB__ + rev v31.16b,v31.16b +#endif + eor $A[$j/5][$j%5],$A[$j/5][$j%5],v31.16b + beq .Lprocess_block_ce +___ +} +$code.=<<___; + ldr d31,[$inp],#8 // *inp++ +#ifdef __AARCH64EB__ + rev v31.16b,v31.16b +#endif + eor $A[4][4],$A[4][4],v31.16b + +.Lprocess_block_ce: + + bl KeccakF1600_ce + + b .Loop_absorb_ce + +.align 4 +.Labsorbed_ce: +___ +for($i=0; $i<24; $i+=2) { # store A[5][5] +my $j=$i+1; +$code.=<<___; + stp d$i,d$j,[x0,#8*$i] +___ +} +$code.=<<___; + str d24,[x0,#8*$i] + add x0,$len,$bsz // return value + + ldp d8,d9,[sp,#16] + ldp d10,d11,[sp,#32] + ldp d12,d13,[sp,#48] + ldp d14,d15,[sp,#64] + ldp x29,x30,[sp],#80 + ret +.size SHA3_absorb_cext,.-SHA3_absorb_cext +___ +} +{ +my ($ctx,$out,$len,$bsz) = map("x$_",(0..3)); +$code.=<<___; +.globl SHA3_squeeze_cext +.type SHA3_squeeze_cext,%function +.align 5 +SHA3_squeeze_cext: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + mov x9,$ctx + mov x10,$bsz + +.Loop_squeeze_ce: + ldr x4,[x9],#8 + cmp $len,#8 + blo .Lsqueeze_tail_ce +#ifdef __AARCH64EB__ + rev x4,x4 +#endif + str x4,[$out],#8 + beq .Lsqueeze_done_ce + + sub $len,$len,#8 + subs x10,x10,#8 + bhi .Loop_squeeze_ce + + bl KeccakF1600_cext + ldr x30,[sp,#8] + mov x9,$ctx + mov x10,$bsz + b .Loop_squeeze_ce + +.align 4 +.Lsqueeze_tail_ce: + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done_ce + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done_ce + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done_ce + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done_ce + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done_ce + strb w4,[$out],#1 + lsr x4,x4,#8 + subs $len,$len,#1 + beq .Lsqueeze_done_ce + strb w4,[$out],#1 + +.Lsqueeze_done_ce: + ldr x29,[sp],#16 + ret +.size SHA3_squeeze_cext,.-SHA3_squeeze_cext +___ +} }}} +$code.=<<___; +.asciz "Keccak-1600 absorb and squeeze for ARMv8, CRYPTOGAMS by " +___ + +{ my %opcode = ( + "rax1" => 0xce608c00, "eor3" => 0xce000000, + "bcax" => 0xce200000, "xar" => 0xce800000 ); + + sub unsha3 { + my ($mnemonic,$arg)=@_; + + $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)[^,]*(?:,\s*[qv]([0-9]+)[^,]*(?:,\s*[qv#]([0-9\-]+))?)?/ + && + sprintf ".inst\t0x%08x\t//%s %s", + $opcode{$mnemonic}|$1|($2<<5)|($3<<16)|(eval($4)<<10), + $mnemonic,$arg; + } +} + +foreach(split("\n",$code)) { + + s/\`([^\`]*)\`/eval($1)/ge; + + m/\bdup\b/ and s/\.16b/.2d/g or + s/\b(eor3|rax1|xar|bcax)\s+(v.*)/unsha3($1,$2)/ge; + + print $_,"\n"; +} + +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-avx2.pl b/crypto/sha/asm/keccak1600-avx2.pl new file mode 100755 index 00000000..82ca6728 --- /dev/null +++ b/crypto/sha/asm/keccak1600-avx2.pl @@ -0,0 +1,480 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for AVX2. +# +# July 2017. +# +# To paraphrase Gilles Van Assche, if you contemplate Fig. 2.3 on page +# 20 of The Keccak reference [or Fig. 5 of FIPS PUB 202], and load data +# other than A[0][0] in magic order into 6 [256-bit] registers, *each +# dedicated to one axis*, Pi permutation is reduced to intra-register +# shuffles... +# +# It makes other steps more intricate, but overall, is it a win? To be +# more specific index permutations organized by quadruples are: +# +# [4][4] [3][3] [2][2] [1][1]<-+ +# [0][4] [0][3] [0][2] [0][1]<-+ +# [3][0] [1][0] [4][0] [2][0] | +# [4][3] [3][1] [2][4] [1][2] | +# [3][4] [1][3] [4][2] [2][1] | +# [2][3] [4][1] [1][4] [3][2] | +# [2][2] [4][4] [1][1] [3][3] -+ +# +# This however is highly impractical for Theta and Chi. What would help +# Theta is if x indices were aligned column-wise, or in other words: +# +# [0][4] [0][3] [0][2] [0][1] +# [3][0] [1][0] [4][0] [2][0] +#vpermq([4][3] [3][1] [2][4] [1][2], 0b01110010) +# [2][4] [4][3] [1][2] [3][1] +#vpermq([4][2] [3][4] [2][1] [1][3], 0b10001101) +# [3][4] [1][3] [4][2] [2][1] +#vpermq([2][3] [4][1] [1][4] [3][2], 0b01110010) +# [1][4] [2][3] [3][2] [4][1] +#vpermq([1][1] [2][2] [3][3] [4][4], 0b00011011) +# [4][4] [3][3] [2][2] [1][1] +# +# So here we have it, lines not marked with vpermq() represent the magic +# order in which data is to be loaded and maintained. [And lines marked +# with vpermq() represent Pi circular permutation in chosen layout. Note +# that first step is permutation-free.] A[0][0] is loaded to register of +# its own, to all lanes. [A[0][0] is not part of Pi permutation or Rho.] +# Digits in variables' names denote right-most coordinates: + +my ($A00, # [0][0] [0][0] [0][0] [0][0] # %ymm0 + $A01, # [0][4] [0][3] [0][2] [0][1] # %ymm1 + $A20, # [3][0] [1][0] [4][0] [2][0] # %ymm2 + $A31, # [2][4] [4][3] [1][2] [3][1] # %ymm3 + $A21, # [3][4] [1][3] [4][2] [2][1] # %ymm4 + $A41, # [1][4] [2][3] [3][2] [4][1] # %ymm5 + $A11) = # [4][4] [3][3] [2][2] [1][1] # %ymm6 + map("%ymm$_",(0..6)); + +# We also need to map the magic order into offsets within structure: + +my @A_jagged = ([0,0], [1,0], [1,1], [1,2], [1,3], # [0][0..4] + [2,2], [6,0], [3,1], [4,2], [5,3], # [1][0..4] + [2,0], [4,0], [6,1], [5,2], [3,3], # [2][0..4] + [2,3], [3,0], [5,1], [6,2], [4,3], # [3][0..4] + [2,1], [5,0], [4,1], [3,2], [6,3]); # [4][0..4] + @A_jagged = map(8*($$_[0]*4+$$_[1]), @A_jagged); # ... and now linear + +# But on the other hand Chi is much better off if y indices were aligned +# column-wise, not x. For this reason we have to shuffle data prior +# Chi and revert it afterwards. Prior shuffle is naturally merged with +# Pi itself: +# +# [0][4] [0][3] [0][2] [0][1] +# [3][0] [1][0] [4][0] [2][0] +#vpermq([4][3] [3][1] [2][4] [1][2], 0b01110010) +#vpermq([2][4] [4][3] [1][2] [3][1], 0b00011011) = 0b10001101 +# [3][1] [1][2] [4][3] [2][4] +#vpermq([4][2] [3][4] [2][1] [1][3], 0b10001101) +#vpermq([3][4] [1][3] [4][2] [2][1], 0b11100100) = 0b10001101 +# [3][4] [1][3] [4][2] [2][1] +#vpermq([2][3] [4][1] [1][4] [3][2], 0b01110010) +#vpermq([1][4] [2][3] [3][2] [4][1], 0b01110010) = 0b00011011 +# [3][2] [1][4] [4][1] [2][3] +#vpermq([1][1] [2][2] [3][3] [4][4], 0b00011011) +#vpermq([4][4] [3][3] [2][2] [1][1], 0b10001101) = 0b01110010 +# [3][3] [1][1] [4][4] [2][2] +# +# And reverse post-Chi permutation: +# +# [0][4] [0][3] [0][2] [0][1] +# [3][0] [1][0] [4][0] [2][0] +#vpermq([3][1] [1][2] [4][3] [2][4], 0b00011011) +# [2][4] [4][3] [1][2] [3][1] +#vpermq([3][4] [1][3] [4][2] [2][1], 0b11100100) = nop :-) +# [3][4] [1][3] [4][2] [2][1] +#vpermq([3][2] [1][4] [4][1] [2][3], 0b10001101) +# [1][4] [2][3] [3][2] [4][1] +#vpermq([3][3] [1][1] [4][4] [2][2], 0b01110010) +# [4][4] [3][3] [2][2] [1][1] +# +######################################################################## +# Numbers are cycles per processed byte out of large message. +# +# r=1088(*) +# +# Haswell 8.7/+10% +# Skylake 7.8/+20% +# Ryzen 17(**) +# +# (*) Corresponds to SHA3-256. Percentage after slash is improvement +# coefficient in comparison to scalar keccak1600-x86_64.pl. +# (**) It's expected that Ryzen performs poorly, because instruction +# issue rate is limited to two AVX2 instructions per cycle and +# in addition vpblendd is reportedly bound to specific port. +# Obviously this code path should not be executed on Ryzen. + +my @T = map("%ymm$_",(7..15)); +my ($C14,$C00,$D00,$D14) = @T[5..8]; + +$code.=<<___; +.text + +.type __KeccakF1600,\@function +.align 32 +__KeccakF1600: + lea rhotates_left+96(%rip),%r8 + lea rhotates_right+96(%rip),%r9 + lea iotas(%rip),%r10 + mov \$24,%eax + jmp .Loop_avx2 + +.align 32 +.Loop_avx2: + ######################################### Theta + vpshufd \$0b01001110,$A20,$C00 + vpxor $A31,$A41,$C14 + vpxor $A11,$A21,@T[2] + vpxor $A01,$C14,$C14 + vpxor @T[2],$C14,$C14 # C[1..4] + + vpermq \$0b10010011,$C14,@T[4] + vpxor $A20,$C00,$C00 + vpermq \$0b01001110,$C00,@T[0] + + vpsrlq \$63,$C14,@T[1] + vpaddq $C14,$C14,@T[2] + vpor @T[2],@T[1],@T[1] # ROL64(C[1..4],1) + + vpermq \$0b00111001,@T[1],$D14 + vpxor @T[4],@T[1],$D00 + vpermq \$0b00000000,$D00,$D00 # D[0..0] = ROL64(C[1],1) ^ C[4] + + vpxor $A00,$C00,$C00 + vpxor @T[0],$C00,$C00 # C[0..0] + + vpsrlq \$63,$C00,@T[0] + vpaddq $C00,$C00,@T[1] + vpor @T[0],@T[1],@T[1] # ROL64(C[0..0],1) + + vpxor $D00,$A20,$A20 # ^= D[0..0] + vpxor $D00,$A00,$A00 # ^= D[0..0] + + vpblendd \$0b11000000,@T[1],$D14,$D14 + vpblendd \$0b00000011,$C00,@T[4],@T[4] + vpxor @T[4],$D14,$D14 # D[1..4] = ROL64(C[2..4,0),1) ^ C[0..3] + + ######################################### Rho + Pi + pre-Chi shuffle + vpsllvq 0*32-96(%r8),$A20,@T[3] + vpsrlvq 0*32-96(%r9),$A20,$A20 + vpor @T[3],$A20,$A20 + + vpxor $D14,$A31,$A31 # ^= D[1..4] from Theta + vpsllvq 2*32-96(%r8),$A31,@T[4] + vpsrlvq 2*32-96(%r9),$A31,$A31 + vpor @T[4],$A31,$A31 + + vpxor $D14,$A21,$A21 # ^= D[1..4] from Theta + vpsllvq 3*32-96(%r8),$A21,@T[5] + vpsrlvq 3*32-96(%r9),$A21,$A21 + vpor @T[5],$A21,$A21 + + vpxor $D14,$A41,$A41 # ^= D[1..4] from Theta + vpsllvq 4*32-96(%r8),$A41,@T[6] + vpsrlvq 4*32-96(%r9),$A41,$A41 + vpor @T[6],$A41,$A41 + + vpxor $D14,$A11,$A11 # ^= D[1..4] from Theta + vpermq \$0b10001101,$A20,@T[3] # $A20 -> future $A31 + vpermq \$0b10001101,$A31,@T[4] # $A31 -> future $A21 + vpsllvq 5*32-96(%r8),$A11,@T[7] + vpsrlvq 5*32-96(%r9),$A11,@T[1] + vpor @T[7],@T[1],@T[1] # $A11 -> future $A01 + + vpxor $D14,$A01,$A01 # ^= D[1..4] from Theta + vpermq \$0b00011011,$A21,@T[5] # $A21 -> future $A41 + vpermq \$0b01110010,$A41,@T[6] # $A41 -> future $A11 + vpsllvq 1*32-96(%r8),$A01,@T[8] + vpsrlvq 1*32-96(%r9),$A01,@T[2] + vpor @T[8],@T[2],@T[2] # $A01 -> future $A20 + + ######################################### Chi + vpsrldq \$8,@T[1],@T[7] + vpandn @T[7],@T[1],@T[0] # tgting [0][0] [0][0] [0][0] [0][0] + + vpblendd \$0b00001100,@T[6],@T[2],$A31 # [4][4] [2][0] + vpblendd \$0b00001100,@T[2],@T[4],@T[8] # [4][0] [2][1] + vpblendd \$0b00001100,@T[4],@T[3],$A41 # [4][2] [2][4] + vpblendd \$0b00001100,@T[3],@T[2],@T[7] # [4][3] [2][0] + vpblendd \$0b00110000,@T[4],$A31,$A31 # [1][3] [4][4] [2][0] + vpblendd \$0b00110000,@T[5],@T[8],@T[8] # [1][4] [4][0] [2][1] + vpblendd \$0b00110000,@T[2],$A41,$A41 # [1][0] [4][2] [2][4] + vpblendd \$0b00110000,@T[6],@T[7],@T[7] # [1][1] [4][3] [2][0] + vpblendd \$0b11000000,@T[5],$A31,$A31 # [3][2] [1][3] [4][4] [2][0] + vpblendd \$0b11000000,@T[6],@T[8],@T[8] # [3][3] [1][4] [4][0] [2][1] + vpblendd \$0b11000000,@T[6],$A41,$A41 # [3][3] [1][0] [4][2] [2][4] + vpblendd \$0b11000000,@T[4],@T[7],@T[7] # [3][4] [1][1] [4][3] [2][0] + vpandn @T[8],$A31,$A31 # tgting [3][1] [1][2] [4][3] [2][4] + vpandn @T[7],$A41,$A41 # tgting [3][2] [1][4] [4][1] [2][3] + + vpblendd \$0b00001100,@T[2],@T[5],$A11 # [4][0] [2][3] + vpblendd \$0b00001100,@T[5],@T[3],@T[8] # [4][1] [2][4] + vpxor @T[3],$A31,$A31 + vpblendd \$0b00110000,@T[3],$A11,$A11 # [1][2] [4][0] [2][3] + vpblendd \$0b00110000,@T[4],@T[8],@T[8] # [1][3] [4][1] [2][4] + vpxor @T[5],$A41,$A41 + vpblendd \$0b11000000,@T[4],$A11,$A11 # [3][4] [1][2] [4][0] [2][3] + vpblendd \$0b11000000,@T[2],@T[8],@T[8] # [3][0] [1][3] [4][1] [2][4] + vpandn @T[8],$A11,$A11 # tgting [3][3] [1][1] [4][4] [2][2] + vpxor @T[6],$A11,$A11 + + vpermq \$0b00011110,@T[1],$A21 # [0][1] [0][2] [0][4] [0][3] + vpblendd \$0b00110000,$A00,$A21,@T[8] # [0][1] [0][0] [0][4] [0][3] + vpermq \$0b00111001,@T[1],$A01 # [0][1] [0][4] [0][3] [0][2] + vpblendd \$0b11000000,$A00,$A01,$A01 # [0][0] [0][4] [0][3] [0][2] + vpandn @T[8],$A01,$A01 # tgting [0][4] [0][3] [0][2] [0][1] + + vpblendd \$0b00001100,@T[5],@T[4],$A20 # [4][1] [2][1] + vpblendd \$0b00001100,@T[4],@T[6],@T[7] # [4][2] [2][2] + vpblendd \$0b00110000,@T[6],$A20,$A20 # [1][1] [4][1] [2][1] + vpblendd \$0b00110000,@T[3],@T[7],@T[7] # [1][2] [4][2] [2][2] + vpblendd \$0b11000000,@T[3],$A20,$A20 # [3][1] [1][1] [4][1] [2][1] + vpblendd \$0b11000000,@T[5],@T[7],@T[7] # [3][2] [1][2] [4][2] [2][2] + vpandn @T[7],$A20,$A20 # tgting [3][0] [1][0] [4][0] [2][0] + vpxor @T[2],$A20,$A20 + + vpermq \$0b00000000,@T[0],@T[0] # [0][0] [0][0] [0][0] [0][0] + vpermq \$0b00011011,$A31,$A31 # post-Chi shuffle + vpermq \$0b10001101,$A41,$A41 + vpermq \$0b01110010,$A11,$A11 + + vpblendd \$0b00001100,@T[3],@T[6],$A21 # [4][3] [2][2] + vpblendd \$0b00001100,@T[6],@T[5],@T[7] # [4][4] [2][3] + vpblendd \$0b00110000,@T[5],$A21,$A21 # [1][4] [4][3] [2][2] + vpblendd \$0b00110000,@T[2],@T[7],@T[7] # [1][0] [4][4] [2][3] + vpblendd \$0b11000000,@T[2],$A21,$A21 # [3][0] [1][4] [4][3] [2][2] + vpblendd \$0b11000000,@T[3],@T[7],@T[7] # [3][1] [1][0] [4][4] [2][3] + vpandn @T[7],$A21,$A21 # tgting [3][4] [1][3] [4][2] [2][1] + + vpxor @T[0],$A00,$A00 + vpxor @T[1],$A01,$A01 + vpxor @T[4],$A21,$A21 + + ######################################### Iota + vpxor (%r10),$A00,$A00 + lea 32(%r10),%r10 + + dec %eax + jnz .Loop_avx2 + + ret +.size __KeccakF1600,.-__KeccakF1600 +___ +my ($A_flat,$inp,$len,$bsz) = ("%rdi","%rsi","%rdx","%rcx"); +my $out = $inp; # in squeeze + +$code.=<<___; +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 32 +SHA3_absorb: + mov %rsp,%r11 + + lea -240(%rsp),%rsp + and \$-32,%rsp + + lea 96($A_flat),$A_flat + lea 96($inp),$inp + lea 96(%rsp),%r10 + + vzeroupper + + vpbroadcastq -96($A_flat),$A00 # load A[5][5] + vmovdqu 8+32*0-96($A_flat),$A01 + vmovdqu 8+32*1-96($A_flat),$A20 + vmovdqu 8+32*2-96($A_flat),$A31 + vmovdqu 8+32*3-96($A_flat),$A21 + vmovdqu 8+32*4-96($A_flat),$A41 + vmovdqu 8+32*5-96($A_flat),$A11 + + vpxor @T[0],@T[0],@T[0] + vmovdqa @T[0],32*2-96(%r10) # zero transfer area on stack + vmovdqa @T[0],32*3-96(%r10) + vmovdqa @T[0],32*4-96(%r10) + vmovdqa @T[0],32*5-96(%r10) + vmovdqa @T[0],32*6-96(%r10) + +.Loop_absorb_avx2: + mov $bsz,%rax + sub $bsz,$len + jc .Ldone_absorb_avx2 + + shr \$3,%eax + vpbroadcastq 0-96($inp),@T[0] + vmovdqu 8-96($inp),@T[1] + sub \$4,%eax +___ +for(my $i=5; $i<25; $i++) { +$code.=<<___ + dec %eax + jz .Labsorved_avx2 + mov 8*$i-96($inp),%r8 + mov %r8,$A_jagged[$i]-96(%r10) +___ +} +$code.=<<___; +.Labsorved_avx2: + lea ($inp,$bsz),$inp + + vpxor @T[0],$A00,$A00 + vpxor @T[1],$A01,$A01 + vpxor 32*2-96(%r10),$A20,$A20 + vpxor 32*3-96(%r10),$A31,$A31 + vpxor 32*4-96(%r10),$A21,$A21 + vpxor 32*5-96(%r10),$A41,$A41 + vpxor 32*6-96(%r10),$A11,$A11 + + call __KeccakF1600 + + lea 96(%rsp),%r10 + jmp .Loop_absorb_avx2 + +.Ldone_absorb_avx2: + vmovq %xmm0,-96($A_flat) + vmovdqu $A01,8+32*0-96($A_flat) + vmovdqu $A20,8+32*1-96($A_flat) + vmovdqu $A31,8+32*2-96($A_flat) + vmovdqu $A21,8+32*3-96($A_flat) + vmovdqu $A41,8+32*4-96($A_flat) + vmovdqu $A11,8+32*5-96($A_flat) + + vzeroupper + + lea (%r11),%rsp + lea ($len,$bsz),%rax # return value + ret +.size SHA3_absorb,.-SHA3_absorb + +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 32 +SHA3_squeeze: + mov %rsp,%r11 + + lea 96($A_flat),$A_flat + shr \$3,$bsz + + vzeroupper + + vpbroadcastq -96($A_flat),$A00 + vpxor @T[0],@T[0],@T[0] + vmovdqu 8+32*0-96($A_flat),$A01 + vmovdqu 8+32*1-96($A_flat),$A20 + vmovdqu 8+32*2-96($A_flat),$A31 + vmovdqu 8+32*3-96($A_flat),$A21 + vmovdqu 8+32*4-96($A_flat),$A41 + vmovdqu 8+32*5-96($A_flat),$A11 + + mov $bsz,%rax + +.Loop_squeeze_avx2: + mov @A_jagged[$i]-96($A_flat),%r8 +___ +for (my $i=0; $i<25; $i++) { +$code.=<<___; + sub \$8,$len + jc .Ltail_squeeze_avx2 + mov %r8,($out) + lea 8($out),$out + je .Ldone_squeeze_avx2 + dec %eax + je .Lextend_output_avx2 + mov @A_jagged[$i+1]-120($A_flat),%r8 +___ +} +$code.=<<___; +.Lextend_output_avx2: + call __KeccakF1600 + + vmovq %xmm0,-96($A_flat) + vmovdqu $A01,8+32*0-96($A_flat) + vmovdqu $A20,8+32*1-96($A_flat) + vmovdqu $A31,8+32*2-96($A_flat) + vmovdqu $A21,8+32*3-96($A_flat) + vmovdqu $A41,8+32*4-96($A_flat) + vmovdqu $A11,8+32*5-96($A_flat) + + mov $bsz,%rax + jmp .Loop_squeeze_avx2 + + +.Ltail_squeeze_avx2: + add \$8,$len +.Loop_tail_avx2: + mov %r8b,($out) + lea 1($out),$out + shr \$8,%r8 + dec $len + jnz .Loop_tail_avx2 + +.Ldone_squeeze_avx2: + vzeroupper + + lea (%r11),%rsp + ret +.size SHA3_squeeze,.-SHA3_squeeze + +.align 64 +rhotates_left: + .quad 3, 18, 36, 41 # [2][0] [4][0] [1][0] [3][0] + .quad 1, 62, 28, 27 # [0][1] [0][2] [0][3] [0][4] + .quad 45, 6, 56, 39 # [3][1] [1][2] [4][3] [2][4] + .quad 10, 61, 55, 8 # [2][1] [4][2] [1][3] [3][4] + .quad 2, 15, 25, 20 # [4][1] [3][2] [2][3] [1][4] + .quad 44, 43, 21, 14 # [1][1] [2][2] [3][3] [4][4] +rhotates_right: + .quad 64-3, 64-18, 64-36, 64-41 + .quad 64-1, 64-62, 64-28, 64-27 + .quad 64-45, 64-6, 64-56, 64-39 + .quad 64-10, 64-61, 64-55, 64-8 + .quad 64-2, 64-15, 64-25, 64-20 + .quad 64-44, 64-43, 64-21, 64-14 +iotas: + .quad 0x0000000000000001, 0x0000000000000001, 0x0000000000000001, 0x0000000000000001 + .quad 0x0000000000008082, 0x0000000000008082, 0x0000000000008082, 0x0000000000008082 + .quad 0x800000000000808a, 0x800000000000808a, 0x800000000000808a, 0x800000000000808a + .quad 0x8000000080008000, 0x8000000080008000, 0x8000000080008000, 0x8000000080008000 + .quad 0x000000000000808b, 0x000000000000808b, 0x000000000000808b, 0x000000000000808b + .quad 0x0000000080000001, 0x0000000080000001, 0x0000000080000001, 0x0000000080000001 + .quad 0x8000000080008081, 0x8000000080008081, 0x8000000080008081, 0x8000000080008081 + .quad 0x8000000000008009, 0x8000000000008009, 0x8000000000008009, 0x8000000000008009 + .quad 0x000000000000008a, 0x000000000000008a, 0x000000000000008a, 0x000000000000008a + .quad 0x0000000000000088, 0x0000000000000088, 0x0000000000000088, 0x0000000000000088 + .quad 0x0000000080008009, 0x0000000080008009, 0x0000000080008009, 0x0000000080008009 + .quad 0x000000008000000a, 0x000000008000000a, 0x000000008000000a, 0x000000008000000a + .quad 0x000000008000808b, 0x000000008000808b, 0x000000008000808b, 0x000000008000808b + .quad 0x800000000000008b, 0x800000000000008b, 0x800000000000008b, 0x800000000000008b + .quad 0x8000000000008089, 0x8000000000008089, 0x8000000000008089, 0x8000000000008089 + .quad 0x8000000000008003, 0x8000000000008003, 0x8000000000008003, 0x8000000000008003 + .quad 0x8000000000008002, 0x8000000000008002, 0x8000000000008002, 0x8000000000008002 + .quad 0x8000000000000080, 0x8000000000000080, 0x8000000000000080, 0x8000000000000080 + .quad 0x000000000000800a, 0x000000000000800a, 0x000000000000800a, 0x000000000000800a + .quad 0x800000008000000a, 0x800000008000000a, 0x800000008000000a, 0x800000008000000a + .quad 0x8000000080008081, 0x8000000080008081, 0x8000000080008081, 0x8000000080008081 + .quad 0x8000000000008080, 0x8000000000008080, 0x8000000000008080, 0x8000000000008080 + .quad 0x0000000080000001, 0x0000000080000001, 0x0000000080000001, 0x0000000080000001 + .quad 0x8000000080008008, 0x8000000080008008, 0x8000000080008008, 0x8000000080008008 + +.asciz "Keccak-1600 absorb and squeeze for AVX2, CRYPTOGAMS by " +___ + +print $code; +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-avx512.pl b/crypto/sha/asm/keccak1600-avx512.pl new file mode 100755 index 00000000..6766f975 --- /dev/null +++ b/crypto/sha/asm/keccak1600-avx512.pl @@ -0,0 +1,549 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for AVX-512F. +# +# July 2017. +# +# Below code is KECCAK_1X_ALT implementation (see sha/keccak1600.c). +# Pretty straightforward, the only "magic" is data layout in registers. +# It's impossible to have one that is optimal for every step, hence +# it's changing as algorithm progresses. Data is saved in linear order, +# but in-register order morphs between rounds. Even rounds take in +# linear layout, and odd rounds - transposed, or "verticaly-shaped"... +# +######################################################################## +# Numbers are cycles per processed byte out of large message. +# +# r=1088(*) +# +# Knights Landing 7.6 +# Skylake-X 5.7 +# +# (*) Corresponds to SHA3-256. + +######################################################################## +# Below code is combination of two ideas. One is taken from Keccak Code +# Package, hereafter KCP, and another one from initial version of this +# module. What is common is observation that Pi's input and output are +# "mostly transposed", i.e. if input is aligned by x coordinate, then +# output is [mostly] aligned by y. Both versions, KCP and predecessor, +# were trying to use one of them from round to round, which resulted in +# some kind of transposition in each round. This version still does +# transpose data, but only every second round. Another essential factor +# is that KCP transposition has to be performed with instructions that +# turned to be rather expensive on Knights Landing, both latency- and +# throughput-wise. Not to mention that some of them have to depend on +# each other. On the other hand initial version of this module was +# relying heavily on blend instructions. There were lots of them, +# resulting in higher instruction count, yet it performed better on +# Knights Landing, because processor can execute pair of them each +# cycle and they have minimal latency. This module is an attempt to +# bring best parts together:-) +# +# Coordinates below correspond to those in sha/keccak1600.c. Input +# layout is straight linear: +# +# [0][4] [0][3] [0][2] [0][1] [0][0] +# [1][4] [1][3] [1][2] [1][1] [1][0] +# [2][4] [2][3] [2][2] [2][1] [2][0] +# [3][4] [3][3] [3][2] [3][1] [3][0] +# [4][4] [4][3] [4][2] [4][1] [4][0] +# +# It's perfect for Theta, while Pi is reduced to intra-register +# permutations which yield layout perfect for Chi: +# +# [4][0] [3][0] [2][0] [1][0] [0][0] +# [4][1] [3][1] [2][1] [1][1] [0][1] +# [4][2] [3][2] [2][2] [1][2] [0][2] +# [4][3] [3][3] [2][3] [1][3] [0][3] +# [4][4] [3][4] [2][4] [1][4] [0][4] +# +# Now instead of performing full transposition and feeding it to next +# identical round, we perform kind of diagonal transposition to layout +# from initial version of this module, and make it suitable for Theta: +# +# [4][4] [3][3] [2][2] [1][1] [0][0]>4.3.2.1.0>[4][4] [3][3] [2][2] [1][1] [0][0] +# [4][0] [3][4] [2][3] [1][2] [0][1]>3.2.1.0.4>[3][4] [2][3] [1][2] [0][1] [4][0] +# [4][1] [3][0] [2][4] [1][3] [0][2]>2.1.0.4.3>[2][4] [1][3] [0][2] [4][1] [3][0] +# [4][2] [3][1] [2][0] [1][4] [0][3]>1.0.4.3.2>[1][4] [0][3] [4][2] [3][1] [2][0] +# [4][3] [3][2] [2][1] [1][0] [0][4]>0.4.3.2.1>[0][4] [4][3] [3][2] [2][1] [1][0] +# +# Now intra-register permutations yield initial [almost] straight +# linear layout: +# +# [4][4] [3][3] [2][2] [1][1] [0][0] +##[0][4] [0][3] [0][2] [0][1] [0][0] +# [3][4] [2][3] [1][2] [0][1] [4][0] +##[2][3] [2][2] [2][1] [2][0] [2][4] +# [2][4] [1][3] [0][2] [4][1] [3][0] +##[4][2] [4][1] [4][0] [4][4] [4][3] +# [1][4] [0][3] [4][2] [3][1] [2][0] +##[1][1] [1][0] [1][4] [1][3] [1][2] +# [0][4] [4][3] [3][2] [2][1] [1][0] +##[3][0] [3][4] [3][3] [3][2] [3][1] +# +# This means that odd round Chi is performed in less suitable layout, +# with a number of additional permutations. But overall it turned to be +# a win. Permutations are fastest possible on Knights Landing and they +# are laid down to be independent of each other. In the essence I traded +# 20 blend instructions for 3 permutations. The result is 13% faster +# than KCP on Skylake-X, and >40% on Knights Landing. +# +# As implied, data is loaded in straight linear order. Digits in +# variables' names represent coordinates of right-most element of +# loaded data chunk: + +my ($A00, # [0][4] [0][3] [0][2] [0][1] [0][0] + $A10, # [1][4] [1][3] [1][2] [1][1] [1][0] + $A20, # [2][4] [2][3] [2][2] [2][1] [2][0] + $A30, # [3][4] [3][3] [3][2] [3][1] [3][0] + $A40) = # [4][4] [4][3] [4][2] [4][1] [4][0] + map("%zmm$_",(0..4)); + +# We also need to map the magic order into offsets within structure: + +my @A_jagged = ([0,0], [0,1], [0,2], [0,3], [0,4], + [1,0], [1,1], [1,2], [1,3], [1,4], + [2,0], [2,1], [2,2], [2,3], [2,4], + [3,0], [3,1], [3,2], [3,3], [3,4], + [4,0], [4,1], [4,2], [4,3], [4,4]); + @A_jagged = map(8*($$_[0]*8+$$_[1]), @A_jagged); # ... and now linear + +my @T = map("%zmm$_",(5..12)); +my @Theta = map("%zmm$_",(33,13..16)); # invalid @Theta[0] is not typo +my @Pi0 = map("%zmm$_",(17..21)); +my @Rhotate0 = map("%zmm$_",(22..26)); +my @Rhotate1 = map("%zmm$_",(27..31)); + +my ($C00,$D00) = @T[0..1]; +my ($k00001,$k00010,$k00100,$k01000,$k10000,$k11111) = map("%k$_",(1..6)); + +$code.=<<___; +.text + +.type __KeccakF1600,\@function +.align 32 +__KeccakF1600: + lea iotas(%rip),%r10 + mov \$12,%eax + jmp .Loop_avx512 + +.align 32 +.Loop_avx512: + ######################################### Theta, even round + vmovdqa64 $A00,@T[0] # put aside original A00 + vpternlogq \$0x96,$A20,$A10,$A00 # and use it as "C00" + vpternlogq \$0x96,$A40,$A30,$A00 + + vprolq \$1,$A00,$D00 + vpermq $A00,@Theta[1],$A00 + vpermq $D00,@Theta[4],$D00 + + vpternlogq \$0x96,$A00,$D00,@T[0] # T[0] is original A00 + vpternlogq \$0x96,$A00,$D00,$A10 + vpternlogq \$0x96,$A00,$D00,$A20 + vpternlogq \$0x96,$A00,$D00,$A30 + vpternlogq \$0x96,$A00,$D00,$A40 + + ######################################### Rho + vprolvq @Rhotate0[0],@T[0],$A00 # T[0] is original A00 + vprolvq @Rhotate0[1],$A10,$A10 + vprolvq @Rhotate0[2],$A20,$A20 + vprolvq @Rhotate0[3],$A30,$A30 + vprolvq @Rhotate0[4],$A40,$A40 + + ######################################### Pi + vpermq $A00,@Pi0[0],$A00 + vpermq $A10,@Pi0[1],$A10 + vpermq $A20,@Pi0[2],$A20 + vpermq $A30,@Pi0[3],$A30 + vpermq $A40,@Pi0[4],$A40 + + ######################################### Chi + vmovdqa64 $A00,@T[0] + vmovdqa64 $A10,@T[1] + vpternlogq \$0xD2,$A20,$A10,$A00 + vpternlogq \$0xD2,$A30,$A20,$A10 + vpternlogq \$0xD2,$A40,$A30,$A20 + vpternlogq \$0xD2,@T[0],$A40,$A30 + vpternlogq \$0xD2,@T[1],@T[0],$A40 + + ######################################### Iota + vpxorq (%r10),$A00,${A00}{$k00001} + lea 16(%r10),%r10 + + ######################################### Harmonize rounds + vpblendmq $A20,$A10,@{T[1]}{$k00010} + vpblendmq $A30,$A20,@{T[2]}{$k00010} + vpblendmq $A40,$A30,@{T[3]}{$k00010} + vpblendmq $A10,$A00,@{T[0]}{$k00010} + vpblendmq $A00,$A40,@{T[4]}{$k00010} + + vpblendmq $A30,@T[1],@{T[1]}{$k00100} + vpblendmq $A40,@T[2],@{T[2]}{$k00100} + vpblendmq $A20,@T[0],@{T[0]}{$k00100} + vpblendmq $A00,@T[3],@{T[3]}{$k00100} + vpblendmq $A10,@T[4],@{T[4]}{$k00100} + + vpblendmq $A40,@T[1],@{T[1]}{$k01000} + vpblendmq $A30,@T[0],@{T[0]}{$k01000} + vpblendmq $A00,@T[2],@{T[2]}{$k01000} + vpblendmq $A10,@T[3],@{T[3]}{$k01000} + vpblendmq $A20,@T[4],@{T[4]}{$k01000} + + vpblendmq $A40,@T[0],@{T[0]}{$k10000} + vpblendmq $A00,@T[1],@{T[1]}{$k10000} + vpblendmq $A10,@T[2],@{T[2]}{$k10000} + vpblendmq $A20,@T[3],@{T[3]}{$k10000} + vpblendmq $A30,@T[4],@{T[4]}{$k10000} + + #vpermq @T[0],@Theta[0],$A00 # doesn't actually change order + vpermq @T[1],@Theta[1],$A10 + vpermq @T[2],@Theta[2],$A20 + vpermq @T[3],@Theta[3],$A30 + vpermq @T[4],@Theta[4],$A40 + + ######################################### Theta, odd round + vmovdqa64 $T[0],$A00 # real A00 + vpternlogq \$0x96,$A20,$A10,$C00 # C00 is @T[0]'s alias + vpternlogq \$0x96,$A40,$A30,$C00 + + vprolq \$1,$C00,$D00 + vpermq $C00,@Theta[1],$C00 + vpermq $D00,@Theta[4],$D00 + + vpternlogq \$0x96,$C00,$D00,$A00 + vpternlogq \$0x96,$C00,$D00,$A30 + vpternlogq \$0x96,$C00,$D00,$A10 + vpternlogq \$0x96,$C00,$D00,$A40 + vpternlogq \$0x96,$C00,$D00,$A20 + + ######################################### Rho + vprolvq @Rhotate1[0],$A00,$A00 + vprolvq @Rhotate1[3],$A30,@T[1] + vprolvq @Rhotate1[1],$A10,@T[2] + vprolvq @Rhotate1[4],$A40,@T[3] + vprolvq @Rhotate1[2],$A20,@T[4] + + vpermq $A00,@Theta[4],@T[5] + vpermq $A00,@Theta[3],@T[6] + + ######################################### Iota + vpxorq -8(%r10),$A00,${A00}{$k00001} + + ######################################### Pi + vpermq @T[1],@Theta[2],$A10 + vpermq @T[2],@Theta[4],$A20 + vpermq @T[3],@Theta[1],$A30 + vpermq @T[4],@Theta[3],$A40 + + ######################################### Chi + vpternlogq \$0xD2,@T[6],@T[5],$A00 + + vpermq @T[1],@Theta[1],@T[7] + #vpermq @T[1],@Theta[0],@T[1] + vpternlogq \$0xD2,@T[1],@T[7],$A10 + + vpermq @T[2],@Theta[3],@T[0] + vpermq @T[2],@Theta[2],@T[2] + vpternlogq \$0xD2,@T[2],@T[0],$A20 + + #vpermq @T[3],@Theta[0],@T[3] + vpermq @T[3],@Theta[4],@T[1] + vpternlogq \$0xD2,@T[1],@T[3],$A30 + + vpermq @T[4],@Theta[2],@T[0] + vpermq @T[4],@Theta[1],@T[4] + vpternlogq \$0xD2,@T[4],@T[0],$A40 + + dec %eax + jnz .Loop_avx512 + + ret +.size __KeccakF1600,.-__KeccakF1600 +___ + +my ($A_flat,$inp,$len,$bsz) = ("%rdi","%rsi","%rdx","%rcx"); +my $out = $inp; # in squeeze + +$code.=<<___; +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 32 +SHA3_absorb: + mov %rsp,%r11 + + lea -320(%rsp),%rsp + and \$-64,%rsp + + lea 96($A_flat),$A_flat + lea 96($inp),$inp + lea 128(%rsp),%r9 + + lea theta_perm(%rip),%r8 + + kxnorw $k11111,$k11111,$k11111 + kshiftrw \$15,$k11111,$k00001 + kshiftrw \$11,$k11111,$k11111 + kshiftlw \$1,$k00001,$k00010 + kshiftlw \$2,$k00001,$k00100 + kshiftlw \$3,$k00001,$k01000 + kshiftlw \$4,$k00001,$k10000 + + #vmovdqa64 64*0(%r8),@Theta[0] + vmovdqa64 64*1(%r8),@Theta[1] + vmovdqa64 64*2(%r8),@Theta[2] + vmovdqa64 64*3(%r8),@Theta[3] + vmovdqa64 64*4(%r8),@Theta[4] + + vmovdqa64 64*5(%r8),@Rhotate1[0] + vmovdqa64 64*6(%r8),@Rhotate1[1] + vmovdqa64 64*7(%r8),@Rhotate1[2] + vmovdqa64 64*8(%r8),@Rhotate1[3] + vmovdqa64 64*9(%r8),@Rhotate1[4] + + vmovdqa64 64*10(%r8),@Rhotate0[0] + vmovdqa64 64*11(%r8),@Rhotate0[1] + vmovdqa64 64*12(%r8),@Rhotate0[2] + vmovdqa64 64*13(%r8),@Rhotate0[3] + vmovdqa64 64*14(%r8),@Rhotate0[4] + + vmovdqa64 64*15(%r8),@Pi0[0] + vmovdqa64 64*16(%r8),@Pi0[1] + vmovdqa64 64*17(%r8),@Pi0[2] + vmovdqa64 64*18(%r8),@Pi0[3] + vmovdqa64 64*19(%r8),@Pi0[4] + + vmovdqu64 40*0-96($A_flat),${A00}{$k11111}{z} + vpxorq @T[0],@T[0],@T[0] + vmovdqu64 40*1-96($A_flat),${A10}{$k11111}{z} + vmovdqu64 40*2-96($A_flat),${A20}{$k11111}{z} + vmovdqu64 40*3-96($A_flat),${A30}{$k11111}{z} + vmovdqu64 40*4-96($A_flat),${A40}{$k11111}{z} + + vmovdqa64 @T[0],0*64-128(%r9) # zero transfer area on stack + vmovdqa64 @T[0],1*64-128(%r9) + vmovdqa64 @T[0],2*64-128(%r9) + vmovdqa64 @T[0],3*64-128(%r9) + vmovdqa64 @T[0],4*64-128(%r9) + jmp .Loop_absorb_avx512 + +.align 32 +.Loop_absorb_avx512: + mov $bsz,%rax + sub $bsz,$len + jc .Ldone_absorb_avx512 + + shr \$3,%eax +___ +for(my $i=0; $i<25; $i++) { +$code.=<<___ + mov 8*$i-96($inp),%r8 + mov %r8,$A_jagged[$i]-128(%r9) + dec %eax + jz .Labsorved_avx512 +___ +} +$code.=<<___; +.Labsorved_avx512: + lea ($inp,$bsz),$inp + + vpxorq 64*0-128(%r9),$A00,$A00 + vpxorq 64*1-128(%r9),$A10,$A10 + vpxorq 64*2-128(%r9),$A20,$A20 + vpxorq 64*3-128(%r9),$A30,$A30 + vpxorq 64*4-128(%r9),$A40,$A40 + + call __KeccakF1600 + + jmp .Loop_absorb_avx512 + +.align 32 +.Ldone_absorb_avx512: + vmovdqu64 $A00,40*0-96($A_flat){$k11111} + vmovdqu64 $A10,40*1-96($A_flat){$k11111} + vmovdqu64 $A20,40*2-96($A_flat){$k11111} + vmovdqu64 $A30,40*3-96($A_flat){$k11111} + vmovdqu64 $A40,40*4-96($A_flat){$k11111} + + vzeroupper + + lea (%r11),%rsp + lea ($len,$bsz),%rax # return value + ret +.size SHA3_absorb,.-SHA3_absorb + +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 32 +SHA3_squeeze: + mov %rsp,%r11 + + lea 96($A_flat),$A_flat + cmp $bsz,$len + jbe .Lno_output_extension_avx512 + + lea theta_perm(%rip),%r8 + + kxnorw $k11111,$k11111,$k11111 + kshiftrw \$15,$k11111,$k00001 + kshiftrw \$11,$k11111,$k11111 + kshiftlw \$1,$k00001,$k00010 + kshiftlw \$2,$k00001,$k00100 + kshiftlw \$3,$k00001,$k01000 + kshiftlw \$4,$k00001,$k10000 + + #vmovdqa64 64*0(%r8),@Theta[0] + vmovdqa64 64*1(%r8),@Theta[1] + vmovdqa64 64*2(%r8),@Theta[2] + vmovdqa64 64*3(%r8),@Theta[3] + vmovdqa64 64*4(%r8),@Theta[4] + + vmovdqa64 64*5(%r8),@Rhotate1[0] + vmovdqa64 64*6(%r8),@Rhotate1[1] + vmovdqa64 64*7(%r8),@Rhotate1[2] + vmovdqa64 64*8(%r8),@Rhotate1[3] + vmovdqa64 64*9(%r8),@Rhotate1[4] + + vmovdqa64 64*10(%r8),@Rhotate0[0] + vmovdqa64 64*11(%r8),@Rhotate0[1] + vmovdqa64 64*12(%r8),@Rhotate0[2] + vmovdqa64 64*13(%r8),@Rhotate0[3] + vmovdqa64 64*14(%r8),@Rhotate0[4] + + vmovdqa64 64*15(%r8),@Pi0[0] + vmovdqa64 64*16(%r8),@Pi0[1] + vmovdqa64 64*17(%r8),@Pi0[2] + vmovdqa64 64*18(%r8),@Pi0[3] + vmovdqa64 64*19(%r8),@Pi0[4] + + vmovdqu64 40*0-96($A_flat),${A00}{$k11111}{z} + vmovdqu64 40*1-96($A_flat),${A10}{$k11111}{z} + vmovdqu64 40*2-96($A_flat),${A20}{$k11111}{z} + vmovdqu64 40*3-96($A_flat),${A30}{$k11111}{z} + vmovdqu64 40*4-96($A_flat),${A40}{$k11111}{z} + +.Lno_output_extension_avx512: + shr \$3,$bsz + lea -96($A_flat),%r9 + mov $bsz,%rax + jmp .Loop_squeeze_avx512 + +.align 32 +.Loop_squeeze_avx512: + cmp \$8,$len + jb .Ltail_squeeze_avx512 + + mov (%r9),%r8 + lea 8(%r9),%r9 + mov %r8,($out) + lea 8($out),$out + sub \$8,$len # len -= 8 + jz .Ldone_squeeze_avx512 + + sub \$1,%rax # bsz-- + jnz .Loop_squeeze_avx512 + + #vpermq @Theta[4],@Theta[4],@Theta[3] + #vpermq @Theta[3],@Theta[4],@Theta[2] + #vpermq @Theta[3],@Theta[3],@Theta[1] + + call __KeccakF1600 + + vmovdqu64 $A00,40*0-96($A_flat){$k11111} + vmovdqu64 $A10,40*1-96($A_flat){$k11111} + vmovdqu64 $A20,40*2-96($A_flat){$k11111} + vmovdqu64 $A30,40*3-96($A_flat){$k11111} + vmovdqu64 $A40,40*4-96($A_flat){$k11111} + + lea -96($A_flat),%r9 + mov $bsz,%rax + jmp .Loop_squeeze_avx512 + +.Ltail_squeeze_avx512: + mov $out,%rdi + mov %r9,%rsi + mov $len,%rcx + .byte 0xf3,0xa4 # rep movsb + +.Ldone_squeeze_avx512: + vzeroupper + + lea (%r11),%rsp + ret +.size SHA3_squeeze,.-SHA3_squeeze + +.align 64 +theta_perm: + .quad 0, 1, 2, 3, 4, 5, 6, 7 # [not used] + .quad 4, 0, 1, 2, 3, 5, 6, 7 + .quad 3, 4, 0, 1, 2, 5, 6, 7 + .quad 2, 3, 4, 0, 1, 5, 6, 7 + .quad 1, 2, 3, 4, 0, 5, 6, 7 + +rhotates1: + .quad 0, 44, 43, 21, 14, 0, 0, 0 # [0][0] [1][1] [2][2] [3][3] [4][4] + .quad 18, 1, 6, 25, 8, 0, 0, 0 # [4][0] [0][1] [1][2] [2][3] [3][4] + .quad 41, 2, 62, 55, 39, 0, 0, 0 # [3][0] [4][1] [0][2] [1][3] [2][4] + .quad 3, 45, 61, 28, 20, 0, 0, 0 # [2][0] [3][1] [4][2] [0][3] [1][4] + .quad 36, 10, 15, 56, 27, 0, 0, 0 # [1][0] [2][1] [3][2] [4][3] [0][4] + +rhotates0: + .quad 0, 1, 62, 28, 27, 0, 0, 0 + .quad 36, 44, 6, 55, 20, 0, 0, 0 + .quad 3, 10, 43, 25, 39, 0, 0, 0 + .quad 41, 45, 15, 21, 8, 0, 0, 0 + .quad 18, 2, 61, 56, 14, 0, 0, 0 + +pi0_perm: + .quad 0, 3, 1, 4, 2, 5, 6, 7 + .quad 1, 4, 2, 0, 3, 5, 6, 7 + .quad 2, 0, 3, 1, 4, 5, 6, 7 + .quad 3, 1, 4, 2, 0, 5, 6, 7 + .quad 4, 2, 0, 3, 1, 5, 6, 7 + + +iotas: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 + +.asciz "Keccak-1600 absorb and squeeze for AVX-512F, CRYPTOGAMS by " +___ + +print $code; +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-avx512vl.pl b/crypto/sha/asm/keccak1600-avx512vl.pl new file mode 100755 index 00000000..53f1e847 --- /dev/null +++ b/crypto/sha/asm/keccak1600-avx512vl.pl @@ -0,0 +1,390 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for AVX512VL. +# +# December 2017. +# +# This is an adaptation of AVX2 module that reuses register data +# layout, but utilizes new 256-bit AVX512VL instructions. See AVX2 +# module for further information on layout. +# +######################################################################## +# Numbers are cycles per processed byte out of large message. +# +# r=1088(*) +# +# Skylake-X 6.4/+47% +# +# (*) Corresponds to SHA3-256. Percentage after slash is improvement +# coefficient in comparison to scalar keccak1600-x86_64.pl. + +# Digits in variables' names denote right-most coordinates: + +my ($A00, # [0][0] [0][0] [0][0] [0][0] # %ymm0 + $A01, # [0][4] [0][3] [0][2] [0][1] # %ymm1 + $A20, # [3][0] [1][0] [4][0] [2][0] # %ymm2 + $A31, # [2][4] [4][3] [1][2] [3][1] # %ymm3 + $A21, # [3][4] [1][3] [4][2] [2][1] # %ymm4 + $A41, # [1][4] [2][3] [3][2] [4][1] # %ymm5 + $A11) = # [4][4] [3][3] [2][2] [1][1] # %ymm6 + map("%ymm$_",(0..6)); + +# We also need to map the magic order into offsets within structure: + +my @A_jagged = ([0,0], [1,0], [1,1], [1,2], [1,3], # [0][0..4] + [2,2], [6,0], [3,1], [4,2], [5,3], # [1][0..4] + [2,0], [4,0], [6,1], [5,2], [3,3], # [2][0..4] + [2,3], [3,0], [5,1], [6,2], [4,3], # [3][0..4] + [2,1], [5,0], [4,1], [3,2], [6,3]); # [4][0..4] + @A_jagged = map(8*($$_[0]*4+$$_[1]), @A_jagged); # ... and now linear + +my @T = map("%ymm$_",(7..15)); +my ($C14,$C00,$D00,$D14) = @T[5..8]; +my ($R20,$R01,$R31,$R21,$R41,$R11) = map("%ymm$_",(16..21)); + +$code.=<<___; +.text + +.type __KeccakF1600,\@function +.align 32 +__KeccakF1600: + lea iotas(%rip),%r10 + mov \$24,%eax + jmp .Loop_avx512vl + +.align 32 +.Loop_avx512vl: + ######################################### Theta + vpshufd \$0b01001110,$A20,$C00 + vpxor $A31,$A41,$C14 + vpxor $A11,$A21,@T[2] + vpternlogq \$0x96,$A01,$T[2],$C14 # C[1..4] + + vpxor $A20,$C00,$C00 + vpermq \$0b01001110,$C00,@T[0] + + vpermq \$0b10010011,$C14,@T[4] + vprolq \$1,$C14,@T[1] # ROL64(C[1..4],1) + + vpermq \$0b00111001,@T[1],$D14 + vpxor @T[4],@T[1],$D00 + vpermq \$0b00000000,$D00,$D00 # D[0..0] = ROL64(C[1],1) ^ C[4] + + vpternlogq \$0x96,@T[0],$A00,$C00 # C[0..0] + vprolq \$1,$C00,@T[1] # ROL64(C[0..0],1) + + vpxor $D00,$A00,$A00 # ^= D[0..0] + + vpblendd \$0b11000000,@T[1],$D14,$D14 + vpblendd \$0b00000011,$C00,@T[4],@T[0] + + ######################################### Rho + Pi + pre-Chi shuffle + vpxor $D00,$A20,$A20 # ^= D[0..0] from Theta + vprolvq $R20,$A20,$A20 + + vpternlogq \$0x96,@T[0],$D14,$A31 # ^= D[1..4] from Theta + vprolvq $R31,$A31,$A31 + + vpternlogq \$0x96,@T[0],$D14,$A21 # ^= D[1..4] from Theta + vprolvq $R21,$A21,$A21 + + vpternlogq \$0x96,@T[0],$D14,$A41 # ^= D[1..4] from Theta + vprolvq $R41,$A41,$A41 + + vpermq \$0b10001101,$A20,@T[3] # $A20 -> future $A31 + vpermq \$0b10001101,$A31,@T[4] # $A31 -> future $A21 + vpternlogq \$0x96,@T[0],$D14,$A11 # ^= D[1..4] from Theta + vprolvq $R11,$A11,@T[1] # $A11 -> future $A01 + + vpermq \$0b00011011,$A21,@T[5] # $A21 -> future $A41 + vpermq \$0b01110010,$A41,@T[6] # $A41 -> future $A11 + vpternlogq \$0x96,@T[0],$D14,$A01 # ^= D[1..4] from Theta + vprolvq $R01,$A01,@T[2] # $A01 -> future $A20 + + ######################################### Chi + vpblendd \$0b00001100,@T[6],@T[2],$A31 # [4][4] [2][0] + vpblendd \$0b00001100,@T[2],@T[4],@T[8] # [4][0] [2][1] + vpblendd \$0b00001100,@T[4],@T[3],$A41 # [4][2] [2][4] + vpblendd \$0b00001100,@T[3],@T[2],@T[7] # [4][3] [2][0] + vpblendd \$0b00110000,@T[4],$A31,$A31 # [1][3] [4][4] [2][0] + vpblendd \$0b00110000,@T[5],@T[8],@T[8] # [1][4] [4][0] [2][1] + vpblendd \$0b00110000,@T[2],$A41,$A41 # [1][0] [4][2] [2][4] + vpblendd \$0b00110000,@T[6],@T[7],@T[7] # [1][1] [4][3] [2][0] + vpblendd \$0b11000000,@T[5],$A31,$A31 # [3][2] [1][3] [4][4] [2][0] + vpblendd \$0b11000000,@T[6],@T[8],@T[8] # [3][3] [1][4] [4][0] [2][1] + vpblendd \$0b11000000,@T[6],$A41,$A41 # [3][3] [1][0] [4][2] [2][4] + vpblendd \$0b11000000,@T[4],@T[7],@T[7] # [3][4] [1][1] [4][3] [2][0] + vpternlogq \$0xC6,@T[8],@T[3],$A31 # [3][1] [1][2] [4][3] [2][4] + vpternlogq \$0xC6,@T[7],@T[5],$A41 # [3][2] [1][4] [4][1] [2][3] + + vpsrldq \$8,@T[1],@T[0] + vpandn @T[0],@T[1],@T[0] # tgting [0][0] [0][0] [0][0] [0][0] + + vpblendd \$0b00001100,@T[2],@T[5],$A11 # [4][0] [2][3] + vpblendd \$0b00001100,@T[5],@T[3],@T[8] # [4][1] [2][4] + vpblendd \$0b00110000,@T[3],$A11,$A11 # [1][2] [4][0] [2][3] + vpblendd \$0b00110000,@T[4],@T[8],@T[8] # [1][3] [4][1] [2][4] + vpblendd \$0b11000000,@T[4],$A11,$A11 # [3][4] [1][2] [4][0] [2][3] + vpblendd \$0b11000000,@T[2],@T[8],@T[8] # [3][0] [1][3] [4][1] [2][4] + vpternlogq \$0xC6,@T[8],@T[6],$A11 # [3][3] [1][1] [4][4] [2][2] + + vpermq \$0b00011110,@T[1],$A21 # [0][1] [0][2] [0][4] [0][3] + vpblendd \$0b00110000,$A00,$A21,@T[8] # [0][1] [0][0] [0][4] [0][3] + vpermq \$0b00111001,@T[1],$A01 # [0][1] [0][4] [0][3] [0][2] + vpblendd \$0b11000000,$A00,$A01,$A01 # [0][0] [0][4] [0][3] [0][2] + + vpblendd \$0b00001100,@T[5],@T[4],$A20 # [4][1] [2][1] + vpblendd \$0b00001100,@T[4],@T[6],@T[7] # [4][2] [2][2] + vpblendd \$0b00110000,@T[6],$A20,$A20 # [1][1] [4][1] [2][1] + vpblendd \$0b00110000,@T[3],@T[7],@T[7] # [1][2] [4][2] [2][2] + vpblendd \$0b11000000,@T[3],$A20,$A20 # [3][1] [1][1] [4][1] [2][1] + vpblendd \$0b11000000,@T[5],@T[7],@T[7] # [3][2] [1][2] [4][2] [2][2] + vpternlogq \$0xC6,@T[7],@T[2],$A20 # [3][0] [1][0] [4][0] [2][0] + + vpermq \$0b00000000,@T[0],@T[0] # [0][0] [0][0] [0][0] [0][0] + vpermq \$0b00011011,$A31,$A31 # post-Chi shuffle + vpermq \$0b10001101,$A41,$A41 + vpermq \$0b01110010,$A11,$A11 + + vpblendd \$0b00001100,@T[3],@T[6],$A21 # [4][3] [2][2] + vpblendd \$0b00001100,@T[6],@T[5],@T[7] # [4][4] [2][3] + vpblendd \$0b00110000,@T[5],$A21,$A21 # [1][4] [4][3] [2][2] + vpblendd \$0b00110000,@T[2],@T[7],@T[7] # [1][0] [4][4] [2][3] + vpblendd \$0b11000000,@T[2],$A21,$A21 # [3][0] [1][4] [4][3] [2][2] + vpblendd \$0b11000000,@T[3],@T[7],@T[7] # [3][1] [1][0] [4][4] [2][3] + + vpternlogq \$0xC6,@T[8],@T[1],$A01 # [0][4] [0][3] [0][2] [0][1] + vpternlogq \$0xC6,@T[7],@T[4],$A21 # [3][4] [1][3] [4][2] [2][1] + + ######################################### Iota + vpternlogq \$0x96,(%r10),@T[0],$A00 + lea 32(%r10),%r10 + + dec %eax + jnz .Loop_avx512vl + + ret +.size __KeccakF1600,.-__KeccakF1600 +___ +my ($A_flat,$inp,$len,$bsz) = ("%rdi","%rsi","%rdx","%rcx"); +my $out = $inp; # in squeeze + +$code.=<<___; +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 32 +SHA3_absorb: + mov %rsp,%r11 + + lea -240(%rsp),%rsp + and \$-32,%rsp + + lea 96($A_flat),$A_flat + lea 96($inp),$inp + lea 96(%rsp),%r10 + lea rhotates_left(%rip),%r8 + + vzeroupper + + vpbroadcastq -96($A_flat),$A00 # load A[5][5] + vmovdqu 8+32*0-96($A_flat),$A01 + vmovdqu 8+32*1-96($A_flat),$A20 + vmovdqu 8+32*2-96($A_flat),$A31 + vmovdqu 8+32*3-96($A_flat),$A21 + vmovdqu 8+32*4-96($A_flat),$A41 + vmovdqu 8+32*5-96($A_flat),$A11 + + vmovdqa64 0*32(%r8),$R20 # load "rhotate" indices + vmovdqa64 1*32(%r8),$R01 + vmovdqa64 2*32(%r8),$R31 + vmovdqa64 3*32(%r8),$R21 + vmovdqa64 4*32(%r8),$R41 + vmovdqa64 5*32(%r8),$R11 + + vpxor @T[0],@T[0],@T[0] + vmovdqa @T[0],32*2-96(%r10) # zero transfer area on stack + vmovdqa @T[0],32*3-96(%r10) + vmovdqa @T[0],32*4-96(%r10) + vmovdqa @T[0],32*5-96(%r10) + vmovdqa @T[0],32*6-96(%r10) + +.Loop_absorb_avx512vl: + mov $bsz,%rax + sub $bsz,$len + jc .Ldone_absorb_avx512vl + + shr \$3,%eax + vpbroadcastq 0-96($inp),@T[0] + vmovdqu 8-96($inp),@T[1] + sub \$4,%eax +___ +for(my $i=5; $i<25; $i++) { +$code.=<<___ + dec %eax + jz .Labsorved_avx512vl + mov 8*$i-96($inp),%r8 + mov %r8,$A_jagged[$i]-96(%r10) +___ +} +$code.=<<___; +.Labsorved_avx512vl: + lea ($inp,$bsz),$inp + + vpxor @T[0],$A00,$A00 + vpxor @T[1],$A01,$A01 + vpxor 32*2-96(%r10),$A20,$A20 + vpxor 32*3-96(%r10),$A31,$A31 + vpxor 32*4-96(%r10),$A21,$A21 + vpxor 32*5-96(%r10),$A41,$A41 + vpxor 32*6-96(%r10),$A11,$A11 + + call __KeccakF1600 + + lea 96(%rsp),%r10 + jmp .Loop_absorb_avx512vl + +.Ldone_absorb_avx512vl: + vmovq %xmm0,-96($A_flat) + vmovdqu $A01,8+32*0-96($A_flat) + vmovdqu $A20,8+32*1-96($A_flat) + vmovdqu $A31,8+32*2-96($A_flat) + vmovdqu $A21,8+32*3-96($A_flat) + vmovdqu $A41,8+32*4-96($A_flat) + vmovdqu $A11,8+32*5-96($A_flat) + + vzeroupper + + lea (%r11),%rsp + lea ($len,$bsz),%rax # return value + ret +.size SHA3_absorb,.-SHA3_absorb + +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 32 +SHA3_squeeze: + mov %rsp,%r11 + + lea 96($A_flat),$A_flat + lea rhotates_left(%rip),%r8 + shr \$3,$bsz + + vzeroupper + + vpbroadcastq -96($A_flat),$A00 + vpxor @T[0],@T[0],@T[0] + vmovdqu 8+32*0-96($A_flat),$A01 + vmovdqu 8+32*1-96($A_flat),$A20 + vmovdqu 8+32*2-96($A_flat),$A31 + vmovdqu 8+32*3-96($A_flat),$A21 + vmovdqu 8+32*4-96($A_flat),$A41 + vmovdqu 8+32*5-96($A_flat),$A11 + + vmovdqa64 0*32(%r8),$R20 # load "rhotate" indices + vmovdqa64 1*32(%r8),$R01 + vmovdqa64 2*32(%r8),$R31 + vmovdqa64 3*32(%r8),$R21 + vmovdqa64 4*32(%r8),$R41 + vmovdqa64 5*32(%r8),$R11 + + mov $bsz,%rax + +.Loop_squeeze_avx512vl: + mov @A_jagged[$i]-96($A_flat),%r8 +___ +for (my $i=0; $i<25; $i++) { +$code.=<<___; + sub \$8,$len + jc .Ltail_squeeze_avx512vl + mov %r8,($out) + lea 8($out),$out + je .Ldone_squeeze_avx512vl + dec %eax + je .Lextend_output_avx512vl + mov @A_jagged[$i+1]-120($A_flat),%r8 +___ +} +$code.=<<___; +.Lextend_output_avx512vl: + call __KeccakF1600 + + vmovq %xmm0,-96($A_flat) + vmovdqu $A01,8+32*0-96($A_flat) + vmovdqu $A20,8+32*1-96($A_flat) + vmovdqu $A31,8+32*2-96($A_flat) + vmovdqu $A21,8+32*3-96($A_flat) + vmovdqu $A41,8+32*4-96($A_flat) + vmovdqu $A11,8+32*5-96($A_flat) + + mov $bsz,%rax + jmp .Loop_squeeze_avx512vl + + +.Ltail_squeeze_avx512vl: + add \$8,$len +.Loop_tail_avx512vl: + mov %r8b,($out) + lea 1($out),$out + shr \$8,%r8 + dec $len + jnz .Loop_tail_avx512vl + +.Ldone_squeeze_avx512vl: + vzeroupper + + lea (%r11),%rsp + ret +.size SHA3_squeeze,.-SHA3_squeeze + +.align 64 +rhotates_left: + .quad 3, 18, 36, 41 # [2][0] [4][0] [1][0] [3][0] + .quad 1, 62, 28, 27 # [0][1] [0][2] [0][3] [0][4] + .quad 45, 6, 56, 39 # [3][1] [1][2] [4][3] [2][4] + .quad 10, 61, 55, 8 # [2][1] [4][2] [1][3] [3][4] + .quad 2, 15, 25, 20 # [4][1] [3][2] [2][3] [1][4] + .quad 44, 43, 21, 14 # [1][1] [2][2] [3][3] [4][4] +iotas: + .quad 0x0000000000000001, 0x0000000000000001, 0x0000000000000001, 0x0000000000000001 + .quad 0x0000000000008082, 0x0000000000008082, 0x0000000000008082, 0x0000000000008082 + .quad 0x800000000000808a, 0x800000000000808a, 0x800000000000808a, 0x800000000000808a + .quad 0x8000000080008000, 0x8000000080008000, 0x8000000080008000, 0x8000000080008000 + .quad 0x000000000000808b, 0x000000000000808b, 0x000000000000808b, 0x000000000000808b + .quad 0x0000000080000001, 0x0000000080000001, 0x0000000080000001, 0x0000000080000001 + .quad 0x8000000080008081, 0x8000000080008081, 0x8000000080008081, 0x8000000080008081 + .quad 0x8000000000008009, 0x8000000000008009, 0x8000000000008009, 0x8000000000008009 + .quad 0x000000000000008a, 0x000000000000008a, 0x000000000000008a, 0x000000000000008a + .quad 0x0000000000000088, 0x0000000000000088, 0x0000000000000088, 0x0000000000000088 + .quad 0x0000000080008009, 0x0000000080008009, 0x0000000080008009, 0x0000000080008009 + .quad 0x000000008000000a, 0x000000008000000a, 0x000000008000000a, 0x000000008000000a + .quad 0x000000008000808b, 0x000000008000808b, 0x000000008000808b, 0x000000008000808b + .quad 0x800000000000008b, 0x800000000000008b, 0x800000000000008b, 0x800000000000008b + .quad 0x8000000000008089, 0x8000000000008089, 0x8000000000008089, 0x8000000000008089 + .quad 0x8000000000008003, 0x8000000000008003, 0x8000000000008003, 0x8000000000008003 + .quad 0x8000000000008002, 0x8000000000008002, 0x8000000000008002, 0x8000000000008002 + .quad 0x8000000000000080, 0x8000000000000080, 0x8000000000000080, 0x8000000000000080 + .quad 0x000000000000800a, 0x000000000000800a, 0x000000000000800a, 0x000000000000800a + .quad 0x800000008000000a, 0x800000008000000a, 0x800000008000000a, 0x800000008000000a + .quad 0x8000000080008081, 0x8000000080008081, 0x8000000080008081, 0x8000000080008081 + .quad 0x8000000000008080, 0x8000000000008080, 0x8000000000008080, 0x8000000000008080 + .quad 0x0000000080000001, 0x0000000080000001, 0x0000000080000001, 0x0000000080000001 + .quad 0x8000000080008008, 0x8000000080008008, 0x8000000080008008, 0x8000000080008008 + +.asciz "Keccak-1600 absorb and squeeze for AVX512VL, CRYPTOGAMS by " +___ + +print $code; +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-c64x.pl b/crypto/sha/asm/keccak1600-c64x.pl new file mode 100755 index 00000000..585f64b7 --- /dev/null +++ b/crypto/sha/asm/keccak1600-c64x.pl @@ -0,0 +1,882 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# [ABI- and endian-neutral] Keccak-1600 for C64x. +# +# June 2017. +# +# This is straightforward KECCAK_1X_ALT variant (see sha/keccak1600.c) +# with bit interleaving. 64-bit values are simply split between A- and +# B-files, with A-file holding least significant halves. This works +# out perfectly, because all operations including cross-communications +# [in rotate operations] are always complementary. Performance is +# [incredible for a 32-bit processor] 10.9 cycles per processed byte +# for r=1088, which corresponds to SHA3-256. This is >15x faster than +# compiler-generated KECCAK_1X_ALT code, and >10x than other variants. +# On average processor ends up issuing ~4.5 instructions per cycle... + +my @A = map([ $_, ($_+1), ($_+2), ($_+3), ($_+4) ], (5,10,16,21,26)); + $A[1][4] = 31; # B14 is reserved, A14 is used as iota[] + ($A[3][0],$A[4][1]) = ($A[4][1],$A[3][0]); +my @C = (0..4,$A[3][0],$A[4][0]); +my $iotas = "A14"; + +my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 36, 44, 6, 55, 20 ], + [ 3, 10, 43, 25, 39 ], + [ 41, 45, 15, 21, 8 ], + [ 18, 2, 61, 56, 14 ]); + +sub ROL64 { + my ($src,$rot,$dst,$p) = @_; + + if ($rot&1) { +$code.=<<___; +$p ROTL B$src,$rot/2+1,A$dst +|| ROTL A$src,$rot/2, B$dst +___ + } else { +$code.=<<___; +$p ROTL A$src,$rot/2,A$dst +|| ROTL B$src,$rot/2,B$dst +___ + } +} + +######################################################################## +# Stack frame layout +# +# SP--->+------+------+ +# | | | +# +1--->+------+------+<- -9 below 4 slots are used by KeccakF1600_int +# | | | +# +2--->+------+------+<- -8 +# | | | +# +3--->+------+------+<- -7 +# | A2 | A3 | A3:A2 are preserved by KeccakF1600_int +# +4--->+------+------+<- -6 +# | B2 | B3 | B3:B2 are preserved by KeccakF1600_int +# +5--->+------+------+<- -5 below is ABI-compliant layout +# | A10 | A11 | +# +6--->+------+------+<- -4 +# | A12 | A13 | +# +7--->+------+------+<- -3 +# | A14 | B3 | +# +8--->+------+------+<- -2 +# | B10 | B11 | +# +9--->+------+------+<- -1 +# | B12 | B13 | +# +------+------+<---FP +# | A15 | +# +------+-- + +$code.=<<___; + .text + + .if .ASSEMBLER_VERSION<7000000 + .asg 0,__TI_EABI__ + .endif + .if __TI_EABI__ + .nocmp + .asg KeccakF1600,_KeccakF1600 + .asg SHA3_absorb,_SHA3_absorb + .asg SHA3_squeeze,_SHA3_squeeze + .endif + + .asg B3,RA + .asg A15,FP + .asg B15,SP + + .align 32 +_KeccakF1600_int: + .asmfunc + STDW A3:A2,*FP[-7] +|| STDW B3:B2,*SP[4] +_KeccakF1600_cheat: + .if __TI_EABI__ + ADDKPC _KeccakF1600_int,B0 +|| MVKL \$PCR_OFFSET(iotas,_KeccakF1600_int),$iotas + MVKH \$PCR_OFFSET(iotas,_KeccakF1600_int),$iotas + .else + ADDKPC _KeccakF1600_int,B0 +|| MVKL (iotas-_KeccakF1600_int),$iotas + MVKH (iotas-_KeccakF1600_int),$iotas + .endif + ADD B0,$iotas,$iotas +loop?: + XOR A$A[0][2],A$A[1][2],A$C[2] ; Theta +|| XOR B$A[0][2],B$A[1][2],B$C[2] +|| XOR A$A[0][3],A$A[1][3],A$C[3] +|| XOR B$A[0][3],B$A[1][3],B$C[3] +|| XOR A$A[0][0],A$A[1][0],A$C[0] +|| XOR B$A[0][0],B$A[1][0],B$C[0] + XOR A$A[2][2],A$C[2],A$C[2] +|| XOR B$A[2][2],B$C[2],B$C[2] +|| XOR A$A[2][3],A$C[3],A$C[3] +|| XOR B$A[2][3],B$C[3],B$C[3] +|| XOR A$A[2][0],A$C[0],A$C[0] +|| XOR B$A[2][0],B$C[0],B$C[0] + XOR A$A[3][2],A$C[2],A$C[2] +|| XOR B$A[3][2],B$C[2],B$C[2] +|| XOR A$A[3][3],A$C[3],A$C[3] +|| XOR B$A[3][3],B$C[3],B$C[3] +|| XOR A$A[3][0],A$C[0],A$C[0] +|| XOR B$A[3][0],B$C[0],B$C[0] + XOR A$A[4][2],A$C[2],A$C[2] +|| XOR B$A[4][2],B$C[2],B$C[2] +|| XOR A$A[4][3],A$C[3],A$C[3] +|| XOR B$A[4][3],B$C[3],B$C[3] +|| XOR A$A[4][0],A$C[0],A$C[0] +|| XOR B$A[4][0],B$C[0],B$C[0] + XOR A$A[0][4],A$A[1][4],A$C[4] +|| XOR B$A[0][4],B$A[1][4],B$C[4] +|| XOR A$A[0][1],A$A[1][1],A$C[1] +|| XOR B$A[0][1],B$A[1][1],B$C[1] +|| STDW A$A[3][0]:A$A[4][0],*SP[1] ; offload some data + STDW B$A[3][0]:B$A[4][0],*SP[2] +|| XOR A$A[2][4],A$C[4],A$C[4] +|| XOR B$A[2][4],B$C[4],B$C[4] +|| XOR A$A[2][1],A$C[1],A$C[1] +|| XOR B$A[2][1],B$C[1],B$C[1] +|| ROTL B$C[2],1,A$C[5] ; ROL64(C[2],1) +|| ROTL A$C[2],0,B$C[5] + XOR A$A[3][4],A$C[4],A$C[4] +|| XOR B$A[3][4],B$C[4],B$C[4] +|| XOR A$A[3][1],A$C[1],A$C[1] +|| XOR B$A[3][1],B$C[1],B$C[1] +|| ROTL B$C[3],1,A$C[6] ; ROL64(C[3],1) +|| ROTL A$C[3],0,B$C[6] + XOR A$A[4][4],A$C[4],A$C[4] +|| XOR B$A[4][4],B$C[4],B$C[4] +|| XOR A$A[4][1],A$C[1],A$C[1] +|| XOR B$A[4][1],B$C[1],B$C[1] +|| XOR A$C[0],A$C[5],A$C[5] ; C[0] ^ ROL64(C[2],1) +|| XOR B$C[0],B$C[5],B$C[5] + XOR A$C[5],A$A[0][1],A$A[0][1] +|| XOR B$C[5],B$A[0][1],B$A[0][1] +|| XOR A$C[5],A$A[1][1],A$A[1][1] +|| XOR B$C[5],B$A[1][1],B$A[1][1] +|| XOR A$C[5],A$A[2][1],A$A[2][1] +|| XOR B$C[5],B$A[2][1],B$A[2][1] + XOR A$C[5],A$A[3][1],A$A[3][1] +|| XOR B$C[5],B$A[3][1],B$A[3][1] +|| XOR A$C[5],A$A[4][1],A$A[4][1] +|| XOR B$C[5],B$A[4][1],B$A[4][1] +|| ROTL B$C[4],1,A$C[5] ; ROL64(C[4],1) +|| ROTL A$C[4],0,B$C[5] +|| XOR A$C[1],A$C[6],A$C[6] ; C[1] ^ ROL64(C[3],1) +|| XOR B$C[1],B$C[6],B$C[6] + XOR A$C[6],A$A[0][2],A$A[0][2] +|| XOR B$C[6],B$A[0][2],B$A[0][2] +|| XOR A$C[6],A$A[1][2],A$A[1][2] +|| XOR B$C[6],B$A[1][2],B$A[1][2] +|| XOR A$C[6],A$A[2][2],A$A[2][2] +|| XOR B$C[6],B$A[2][2],B$A[2][2] +|| ROTL B$C[1],1,A$C[1] ; ROL64(C[1],1) +|| ROTL A$C[1],0,B$C[1] + XOR A$C[6],A$A[3][2],A$A[3][2] +|| XOR B$C[6],B$A[3][2],B$A[3][2] +|| XOR A$C[6],A$A[4][2],A$A[4][2] +|| XOR B$C[6],B$A[4][2],B$A[4][2] +|| ROTL B$C[0],1,A$C[6] ; ROL64(C[0],1) +|| ROTL A$C[0],0,B$C[6] +|| XOR A$C[5],A$C[2],A$C[2] ; C[2] ^= ROL64(C[4],1) +|| XOR B$C[5],B$C[2],B$C[2] + XOR A$C[2],A$A[0][3],A$A[0][3] +|| XOR B$C[2],B$A[0][3],B$A[0][3] +|| XOR A$C[2],A$A[1][3],A$A[1][3] +|| XOR B$C[2],B$A[1][3],B$A[1][3] +|| XOR A$C[2],A$A[2][3],A$A[2][3] +|| XOR B$C[2],B$A[2][3],B$A[2][3] + XOR A$C[6],A$C[3],A$C[3] ; C[3] ^= ROL64(C[0],1) +|| XOR B$C[6],B$C[3],B$C[3] +|| LDDW *FP[-9],A$A[3][0]:A$A[4][0] ; restore offloaded data +|| LDDW *SP[2],B$A[3][0]:B$A[4][0] +|| XOR A$C[2],A$A[3][3],A$A[3][3] +|| XOR B$C[2],B$A[3][3],B$A[3][3] + XOR A$C[2],A$A[4][3],A$A[4][3] +|| XOR B$C[2],B$A[4][3],B$A[4][3] +|| XOR A$C[3],A$A[0][4],A$A[0][4] +|| XOR B$C[3],B$A[0][4],B$A[0][4] +|| XOR A$C[3],A$A[1][4],A$A[1][4] +|| XOR B$C[3],B$A[1][4],B$A[1][4] + XOR A$C[3],A$A[2][4],A$A[2][4] +|| XOR B$C[3],B$A[2][4],B$A[2][4] +|| XOR A$C[3],A$A[3][4],A$A[3][4] +|| XOR B$C[3],B$A[3][4],B$A[3][4] +|| XOR A$C[3],A$A[4][4],A$A[4][4] +|| XOR B$C[3],B$A[4][4],B$A[4][4] + XOR A$C[1],A$C[4],A$C[4] ; C[4] ^= ROL64(C[1],1) +|| XOR B$C[1],B$C[4],B$C[4] +|| MV A$A[0][1],A$C[1] ; Rho+Pi, "early start" +|| MV B$A[0][1],B$C[1] +___ + &ROL64 ($A[1][1],$rhotates[1][1],$A[0][1],"||"); +$code.=<<___; + XOR A$C[4],A$A[0][0],A$A[0][0] +|| XOR B$C[4],B$A[0][0],B$A[0][0] +|| XOR A$C[4],A$A[1][0],A$A[1][0] +|| XOR B$C[4],B$A[1][0],B$A[1][0] +|| MV A$A[0][3],A$C[3] +|| MV B$A[0][3],B$C[3] +___ + &ROL64 ($A[3][3],$rhotates[3][3],$A[0][3],"||"); +$code.=<<___; + XOR A$C[4],A$A[2][0],A$A[2][0] +|| XOR B$C[4],B$A[2][0],B$A[2][0] +|| XOR A$C[4],A$A[3][0],A$A[3][0] +|| XOR B$C[4],B$A[3][0],B$A[3][0] +|| MV A$A[0][2],A$C[2] +|| MV B$A[0][2],B$C[2] +___ + &ROL64 ($A[2][2],$rhotates[2][2],$A[0][2],"||"); +$code.=<<___; + XOR A$C[4],A$A[4][0],A$A[4][0] +|| XOR B$C[4],B$A[4][0],B$A[4][0] +|| MV A$A[0][4],A$C[4] +|| MV B$A[0][4],B$C[4] +___ + &ROL64 ($A[4][4],$rhotates[4][4],$A[0][4],"||"); + + &ROL64 ($A[1][4],$rhotates[1][4],$A[1][1]); +$code.=<<___; +|| LDW *${iotas}++[2],A$C[0] +___ + &ROL64 ($A[2][3],$rhotates[2][3],$A[2][2]); +$code.=<<___; +|| LDW *${iotas}[-1],B$C[0] +___ + &ROL64 ($A[3][2],$rhotates[3][2],$A[3][3]); + &ROL64 ($A[4][1],$rhotates[4][1],$A[4][4]); + + &ROL64 ($A[4][2],$rhotates[4][2],$A[1][4]); + &ROL64 ($A[3][4],$rhotates[3][4],$A[2][3]); + &ROL64 ($A[2][1],$rhotates[2][1],$A[3][2]); + &ROL64 ($A[1][3],$rhotates[1][3],$A[4][1]); + + &ROL64 ($A[2][4],$rhotates[2][4],$A[4][2]); + &ROL64 ($A[4][3],$rhotates[4][3],$A[3][4]); + &ROL64 ($A[1][2],$rhotates[1][2],$A[2][1]); + &ROL64 ($A[3][1],$rhotates[3][1],$A[1][3]); + + &ROL64 ($A[4][0],$rhotates[4][0],$A[2][4]); + &ROL64 ($A[3][0],$rhotates[3][0],$A[4][3]); + &ROL64 ($A[2][0],$rhotates[2][0],$A[1][2]); + &ROL64 ($A[1][0],$rhotates[1][0],$A[3][1]); + + #&ROL64 ($C[3], $rhotates[0][3],$A[1][0]); # moved below + &ROL64 ($C[1], $rhotates[0][1],$A[2][0]); + &ROL64 ($C[4], $rhotates[0][4],$A[3][0]); + &ROL64 ($C[2], $rhotates[0][2],$A[4][0]); +$code.=<<___; +|| ANDN A$A[0][2],A$A[0][1],A$C[4] ; Chi+Iota +|| ANDN B$A[0][2],B$A[0][1],B$C[4] +|| ANDN A$A[0][3],A$A[0][2],A$C[1] +|| ANDN B$A[0][3],B$A[0][2],B$C[1] +|| ANDN A$A[0][4],A$A[0][3],A$C[2] +|| ANDN B$A[0][4],B$A[0][3],B$C[2] +___ + &ROL64 ($C[3], $rhotates[0][3],$A[1][0]); +$code.=<<___; +|| ANDN A$A[0][0],A$A[0][4],A$C[3] +|| ANDN B$A[0][0],B$A[0][4],B$C[3] +|| XOR A$C[4],A$A[0][0],A$A[0][0] +|| XOR B$C[4],B$A[0][0],B$A[0][0] +|| ANDN A$A[0][1],A$A[0][0],A$C[4] +|| ANDN B$A[0][1],B$A[0][0],B$C[4] + XOR A$C[1],A$A[0][1],A$A[0][1] +|| XOR B$C[1],B$A[0][1],B$A[0][1] +|| XOR A$C[2],A$A[0][2],A$A[0][2] +|| XOR B$C[2],B$A[0][2],B$A[0][2] +|| XOR A$C[3],A$A[0][3],A$A[0][3] +|| XOR B$C[3],B$A[0][3],B$A[0][3] + XOR A$C[4],A$A[0][4],A$A[0][4] +|| XOR B$C[4],B$A[0][4],B$A[0][4] +|| XOR A$C[0],A$A[0][0],A$A[0][0] ; A[0][0] ^= iotas[i++]; +|| XOR B$C[0],B$A[0][0],B$A[0][0] +|| EXTU $iotas,24,24,A0 ; A0 is A$C[0], as we done? + + ANDN A$A[1][2],A$A[1][1],A$C[4] +|| ANDN B$A[1][2],B$A[1][1],B$C[4] +|| ANDN A$A[1][3],A$A[1][2],A$C[1] +|| ANDN B$A[1][3],B$A[1][2],B$C[1] +|| ANDN A$A[1][4],A$A[1][3],A$C[2] +|| ANDN B$A[1][4],B$A[1][3],B$C[2] + ANDN A$A[1][0],A$A[1][4],A$C[3] +|| ANDN B$A[1][0],B$A[1][4],B$C[3] +|| XOR A$C[4],A$A[1][0],A$A[1][0] +|| XOR B$C[4],B$A[1][0],B$A[1][0] +|| ANDN A$A[1][1],A$A[1][0],A$C[4] +|| ANDN B$A[1][1],B$A[1][0],B$C[4] + XOR A$C[1],A$A[1][1],A$A[1][1] +|| XOR B$C[1],B$A[1][1],B$A[1][1] +|| XOR A$C[2],A$A[1][2],A$A[1][2] +|| XOR B$C[2],B$A[1][2],B$A[1][2] +|| XOR A$C[3],A$A[1][3],A$A[1][3] +|| XOR B$C[3],B$A[1][3],B$A[1][3] + XOR A$C[4],A$A[1][4],A$A[1][4] +|| XOR B$C[4],B$A[1][4],B$A[1][4] + +|| ANDN A$A[2][2],A$A[2][1],A$C[4] +|| ANDN B$A[2][2],B$A[2][1],B$C[4] +|| ANDN A$A[2][3],A$A[2][2],A$C[1] +|| ANDN B$A[2][3],B$A[2][2],B$C[1] + ANDN A$A[2][4],A$A[2][3],A$C[2] +|| ANDN B$A[2][4],B$A[2][3],B$C[2] +|| ANDN A$A[2][0],A$A[2][4],A$C[3] +|| ANDN B$A[2][0],B$A[2][4],B$C[3] +|| XOR A$C[4],A$A[2][0],A$A[2][0] +|| XOR B$C[4],B$A[2][0],B$A[2][0] + ANDN A$A[2][1],A$A[2][0],A$C[4] +|| ANDN B$A[2][1],B$A[2][0],B$C[4] +|| XOR A$C[1],A$A[2][1],A$A[2][1] +|| XOR B$C[1],B$A[2][1],B$A[2][1] +|| XOR A$C[2],A$A[2][2],A$A[2][2] +|| XOR B$C[2],B$A[2][2],B$A[2][2] + XOR A$C[3],A$A[2][3],A$A[2][3] +|| XOR B$C[3],B$A[2][3],B$A[2][3] +|| XOR A$C[4],A$A[2][4],A$A[2][4] +|| XOR B$C[4],B$A[2][4],B$A[2][4] + + ANDN A$A[3][2],A$A[3][1],A$C[4] +|| ANDN B$A[3][2],B$A[3][1],B$C[4] +|| ANDN A$A[3][3],A$A[3][2],A$C[1] +|| ANDN B$A[3][3],B$A[3][2],B$C[1] +|| ANDN A$A[3][4],A$A[3][3],A$C[2] +|| ANDN B$A[3][4],B$A[3][3],B$C[2] + ANDN A$A[3][0],A$A[3][4],A$C[3] +|| ANDN B$A[3][0],B$A[3][4],B$C[3] +|| XOR A$C[4],A$A[3][0],A$A[3][0] +|| XOR B$C[4],B$A[3][0],B$A[3][0] +|| ANDN A$A[3][1],A$A[3][0],A$C[4] +|| ANDN B$A[3][1],B$A[3][0],B$C[4] + XOR A$C[1],A$A[3][1],A$A[3][1] +|| XOR B$C[1],B$A[3][1],B$A[3][1] +|| XOR A$C[2],A$A[3][2],A$A[3][2] +|| XOR B$C[2],B$A[3][2],B$A[3][2] +|| XOR A$C[3],A$A[3][3],A$A[3][3] +||[A0] BNOP loop? + XOR B$C[3],B$A[3][3],B$A[3][3] +|| XOR A$C[4],A$A[3][4],A$A[3][4] +|| XOR B$C[4],B$A[3][4],B$A[3][4] +||[!A0] LDDW *FP[-7],A3:A2 +||[!A0] LDDW *SP[4], RA:B2 + + ANDN A$A[4][2],A$A[4][1],A$C[4] +|| ANDN B$A[4][2],B$A[4][1],B$C[4] +|| ANDN A$A[4][3],A$A[4][2],A$C[1] +|| ANDN B$A[4][3],B$A[4][2],B$C[1] +|| ANDN A$A[4][4],A$A[4][3],A$C[2] +|| ANDN B$A[4][4],B$A[4][3],B$C[2] + ANDN A$A[4][0],A$A[4][4],A$C[3] +|| ANDN B$A[4][0],B$A[4][4],B$C[3] +|| XOR A$C[4],A$A[4][0],A$A[4][0] +|| XOR B$C[4],B$A[4][0],B$A[4][0] +|| ANDN A$A[4][1],A$A[4][0],A$C[4] +|| ANDN B$A[4][1],B$A[4][0],B$C[4] + XOR A$C[1],A$A[4][1],A$A[4][1] +|| XOR B$C[1],B$A[4][1],B$A[4][1] +|| XOR A$C[2],A$A[4][2],A$A[4][2] +|| XOR B$C[2],B$A[4][2],B$A[4][2] +|| XOR A$C[3],A$A[4][3],A$A[4][3] +|| XOR B$C[3],B$A[4][3],B$A[4][3] + XOR A$C[4],A$A[4][4],A$A[4][4] +|| XOR B$C[4],B$A[4][4],B$A[4][4] +;;===== branch to loop? is taken here + + BNOP RA,5 + .endasmfunc + + .newblock + .global _KeccakF1600 + .align 32 +_KeccakF1600: + .asmfunc stack_usage(80) + STW FP,*SP--(80) ; save frame pointer +|| MV SP,FP + STDW B13:B12,*SP[9] +|| STDW A13:A12,*FP[-4] + STDW B11:B10,*SP[8] +|| STDW A11:A10,*FP[-5] + STW RA, *SP[15] +|| STW A14,*FP[-6] +|| MV A4,A2 +|| ADD 4,A4,B2 + + LDW *A2++[2],A$A[0][0] ; load A[5][5] +|| LDW *B2++[2],B$A[0][0] + LDW *A2++[2],A$A[0][1] +|| LDW *B2++[2],B$A[0][1] + LDW *A2++[2],A$A[0][2] +|| LDW *B2++[2],B$A[0][2] + LDW *A2++[2],A$A[0][3] +|| LDW *B2++[2],B$A[0][3] + LDW *A2++[2],A$A[0][4] +|| LDW *B2++[2],B$A[0][4] + + LDW *A2++[2],A$A[1][0] +|| LDW *B2++[2],B$A[1][0] + LDW *A2++[2],A$A[1][1] +|| LDW *B2++[2],B$A[1][1] + LDW *A2++[2],A$A[1][2] +|| LDW *B2++[2],B$A[1][2] + LDW *A2++[2],A$A[1][3] +|| LDW *B2++[2],B$A[1][3] + LDW *A2++[2],A$A[1][4] +|| LDW *B2++[2],B$A[1][4] + + LDW *A2++[2],A$A[2][0] +|| LDW *B2++[2],B$A[2][0] + LDW *A2++[2],A$A[2][1] +|| LDW *B2++[2],B$A[2][1] + LDW *A2++[2],A$A[2][2] +|| LDW *B2++[2],B$A[2][2] + LDW *A2++[2],A$A[2][3] +|| LDW *B2++[2],B$A[2][3] + LDW *A2++[2],A$A[2][4] +|| LDW *B2++[2],B$A[2][4] + + LDW *A2++[2],A$A[3][0] +|| LDW *B2++[2],B$A[3][0] + LDW *A2++[2],A$A[3][1] +|| LDW *B2++[2],B$A[3][1] + LDW *A2++[2],A$A[3][2] +|| LDW *B2++[2],B$A[3][2] + LDW *A2++[2],A$A[3][3] +|| LDW *B2++[2],B$A[3][3] + LDW *A2++[2],A$A[3][4] +|| LDW *B2++[2],B$A[3][4] +|| BNOP _KeccakF1600_int + + ADDKPC ret?,RA +|| LDW *A2++[2],A$A[4][0] +|| LDW *B2++[2],B$A[4][0] + LDW *A2++[2],A$A[4][1] +|| LDW *B2++[2],B$A[4][1] + LDW *A2++[2],A$A[4][2] +|| LDW *B2++[2],B$A[4][2] + LDW *A2++[2],A$A[4][3] +|| LDW *B2++[2],B$A[4][3] + LDW *A2,A$A[4][4] +|| LDW *B2,B$A[4][4] +|| ADDK -192,A2 ; rewind +|| ADDK -192,B2 + + .align 16 +ret?: + STW A$A[0][0],*A2++[2] ; store A[5][5] +|| STW B$A[0][0],*B2++[2] + STW A$A[0][1],*A2++[2] +|| STW B$A[0][1],*B2++[2] + STW A$A[0][2],*A2++[2] +|| STW B$A[0][2],*B2++[2] + STW A$A[0][3],*A2++[2] +|| STW B$A[0][3],*B2++[2] + STW A$A[0][4],*A2++[2] +|| STW B$A[0][4],*B2++[2] + + STW A$A[1][0],*A2++[2] +|| STW B$A[1][0],*B2++[2] + STW A$A[1][1],*A2++[2] +|| STW B$A[1][1],*B2++[2] + STW A$A[1][2],*A2++[2] +|| STW B$A[1][2],*B2++[2] + STW A$A[1][3],*A2++[2] +|| STW B$A[1][3],*B2++[2] + STW A$A[1][4],*A2++[2] +|| STW B$A[1][4],*B2++[2] + + STW A$A[2][0],*A2++[2] +|| STW B$A[2][0],*B2++[2] + STW A$A[2][1],*A2++[2] +|| STW B$A[2][1],*B2++[2] + STW A$A[2][2],*A2++[2] +|| STW B$A[2][2],*B2++[2] + STW A$A[2][3],*A2++[2] +|| STW B$A[2][3],*B2++[2] + STW A$A[2][4],*A2++[2] +|| STW B$A[2][4],*B2++[2] + + STW A$A[3][0],*A2++[2] +|| STW B$A[3][0],*B2++[2] + STW A$A[3][1],*A2++[2] +|| STW B$A[3][1],*B2++[2] + STW A$A[3][2],*A2++[2] +|| STW B$A[3][2],*B2++[2] + STW A$A[3][3],*A2++[2] +|| STW B$A[3][3],*B2++[2] + STW A$A[3][4],*A2++[2] +|| STW B$A[3][4],*B2++[2] + + LDW *SP[15],RA +|| LDW *FP[-6],A14 + + STW A$A[4][0],*A2++[2] +|| STW B$A[4][0],*B2++[2] + STW A$A[4][1],*A2++[2] +|| STW B$A[4][1],*B2++[2] + STW A$A[4][2],*A2++[2] +|| STW B$A[4][2],*B2++[2] + STW A$A[4][3],*A2++[2] +|| STW B$A[4][3],*B2++[2] + STW A$A[4][4],*A2 +|| STW B$A[4][4],*B2 +|| ADDK -192,A2 ; rewind + + MV A2,A4 ; return original A4 +|| LDDW *SP[8], B11:B10 +|| LDDW *FP[-5],A11:A10 + LDDW *SP[9], B13:B12 +|| LDDW *FP[-4],A13:A12 +|| BNOP RA + LDW *++SP(80),FP ; restore frame pointer + NOP 4 ; wait till FP is committed + .endasmfunc + + .newblock + .asg B2,BSZ + .asg A2,INP + .asg A3,LEN + .global _SHA3_absorb + .align 32 +_SHA3_absorb: + .asmfunc stack_usage(80) + STW FP,*SP--(80) ; save frame pointer +|| MV SP,FP + STDW B13:B12,*SP[9] +|| STDW A13:A12,*FP[-4] + STDW B11:B10,*SP[8] +|| STDW A11:A10,*FP[-5] + STW RA, *SP[15] +|| STW A14,*FP[-6] + + STW A4,*SP[1] ; save A[][] +|| MV B4,INP ; reassign arguments +|| MV A6,LEN +|| MV B6,BSZ +|| ADD 4,A4,B4 + + LDW *A4++[2],A$A[0][0] ; load A[5][5] +|| LDW *B4++[2],B$A[0][0] + LDW *A4++[2],A$A[0][1] +|| LDW *B4++[2],B$A[0][1] + LDW *A4++[2],A$A[0][2] +|| LDW *B4++[2],B$A[0][2] + LDW *A4++[2],A$A[0][3] +|| LDW *B4++[2],B$A[0][3] + LDW *A4++[2],A$A[0][4] +|| LDW *B4++[2],B$A[0][4] + + LDW *A4++[2],A$A[1][0] +|| LDW *B4++[2],B$A[1][0] + LDW *A4++[2],A$A[1][1] +|| LDW *B4++[2],B$A[1][1] + LDW *A4++[2],A$A[1][2] +|| LDW *B4++[2],B$A[1][2] + LDW *A4++[2],A$A[1][3] +|| LDW *B4++[2],B$A[1][3] + LDW *A4++[2],A$A[1][4] +|| LDW *B4++[2],B$A[1][4] + + LDW *A4++[2],A$A[2][0] +|| LDW *B4++[2],B$A[2][0] + LDW *A4++[2],A$A[2][1] +|| LDW *B4++[2],B$A[2][1] + LDW *A4++[2],A$A[2][2] +|| LDW *B4++[2],B$A[2][2] + LDW *A4++[2],A$A[2][3] +|| LDW *B4++[2],B$A[2][3] + LDW *A4++[2],A$A[2][4] +|| LDW *B4++[2],B$A[2][4] + + LDW *A4++[2],A$A[3][0] +|| LDW *B4++[2],B$A[3][0] + LDW *A4++[2],A$A[3][1] +|| LDW *B4++[2],B$A[3][1] + LDW *A4++[2],A$A[3][2] +|| LDW *B4++[2],B$A[3][2] + LDW *A4++[2],A$A[3][3] +|| LDW *B4++[2],B$A[3][3] + LDW *A4++[2],A$A[3][4] +|| LDW *B4++[2],B$A[3][4] + + LDW *A4++[2],A$A[4][0] +|| LDW *B4++[2],B$A[4][0] + LDW *A4++[2],A$A[4][1] +|| LDW *B4++[2],B$A[4][1] + LDW *A4++[2],A$A[4][2] +|| LDW *B4++[2],B$A[4][2] + LDW *A4++[2],A$A[4][3] +|| LDW *B4++[2],B$A[4][3] + LDW *A4,A$A[4][4] +|| LDW *B4,B$A[4][4] +|| ADDKPC loop?,RA + STDW RA:BSZ,*SP[4] + +loop?: + CMPLTU LEN,BSZ,A0 ; len < bsz? +|| SHRU BSZ,3,BSZ + [A0] BNOP ret? +||[A0] ZERO BSZ +||[A0] LDW *SP[1],A2 ; pull A[][] + [BSZ] LDNDW *INP++,A1:A0 +||[BSZ] SUB LEN,8,LEN +||[BSZ] SUB BSZ,1,BSZ + NOP 4 +___ +for ($y = 0; $y < 5; $y++) { + for ($x = 0; $x < ($y<4 ? 5 : 4); $x++) { +$code.=<<___; + .if .BIG_ENDIAN + SWAP2 A0,A1 +|| SWAP2 A1,A0 + SWAP4 A0,A0 + SWAP4 A1,A1 +||[!BSZ]BNOP _KeccakF1600_cheat +||[!BSZ]STDW LEN:INP,*SP[3] +|| DEAL A0,A0 + .else + [!BSZ]BNOP _KeccakF1600_cheat +||[!BSZ]STDW LEN:INP,*SP[3] +|| DEAL A0,A0 + .endif + [BSZ] LDNDW *INP++,A1:A0 +|| DEAL A1,A1 + [BSZ] SUB LEN,8,LEN +||[BSZ] SUB BSZ,1,BSZ + PACK2 A1,A0,A0 +|| PACKH2 A1,A0,A1 + XOR A0,A$A[$y][$x],A$A[$y][$x] + XOR A1,B$A[$y][$x],B$A[$y][$x] +___ + } +} +$code.=<<___; + .if .BIG_ENDIAN + SWAP2 A0,A1 +|| SWAP2 A1,A0 + SWAP4 A0,A0 + SWAP4 A1,A1 + .endif + BNOP _KeccakF1600_cheat +|| STDW LEN:INP,*SP[3] +|| DEAL A0,A0 + DEAL A1,A1 + NOP + PACK2 A1,A0,A0 +|| PACKH2 A1,A0,A1 + XOR A0,A$A[4][4],A$A[4][4] + XOR A1,B$A[4][4],B$A[4][4] + + .align 16 +ret?: + MV LEN,A4 ; return value +|| ADD 4,A2,B2 + + STW A$A[0][0],*A2++[2] ; store A[5][5] +|| STW B$A[0][0],*B2++[2] + STW A$A[0][1],*A2++[2] +|| STW B$A[0][1],*B2++[2] + STW A$A[0][2],*A2++[2] +|| STW B$A[0][2],*B2++[2] + STW A$A[0][3],*A2++[2] +|| STW B$A[0][3],*B2++[2] + STW A$A[0][4],*A2++[2] +|| STW B$A[0][4],*B2++[2] + + STW A$A[1][0],*A2++[2] +|| STW B$A[1][0],*B2++[2] + STW A$A[1][1],*A2++[2] +|| STW B$A[1][1],*B2++[2] + STW A$A[1][2],*A2++[2] +|| STW B$A[1][2],*B2++[2] + STW A$A[1][3],*A2++[2] +|| STW B$A[1][3],*B2++[2] + STW A$A[1][4],*A2++[2] +|| STW B$A[1][4],*B2++[2] + + STW A$A[2][0],*A2++[2] +|| STW B$A[2][0],*B2++[2] + STW A$A[2][1],*A2++[2] +|| STW B$A[2][1],*B2++[2] + STW A$A[2][2],*A2++[2] +|| STW B$A[2][2],*B2++[2] + STW A$A[2][3],*A2++[2] +|| STW B$A[2][3],*B2++[2] + STW A$A[2][4],*A2++[2] +|| STW B$A[2][4],*B2++[2] + + LDW *SP[15],RA +|| LDW *FP[-6],A14 + + STW A$A[3][0],*A2++[2] +|| STW B$A[3][0],*B2++[2] + STW A$A[3][1],*A2++[2] +|| STW B$A[3][1],*B2++[2] + STW A$A[3][2],*A2++[2] +|| STW B$A[3][2],*B2++[2] + STW A$A[3][3],*A2++[2] +|| STW B$A[3][3],*B2++[2] + STW A$A[3][4],*A2++[2] +|| STW B$A[3][4],*B2++[2] + + LDDW *SP[8], B11:B10 +|| LDDW *FP[-5],A11:A10 + LDDW *SP[9], B13:B12 +|| LDDW *FP[-4],A13:A12 + BNOP RA +|| LDW *++SP(80),FP ; restore frame pointer + + STW A$A[4][0],*A2++[2] +|| STW B$A[4][0],*B2++[2] + STW A$A[4][1],*A2++[2] +|| STW B$A[4][1],*B2++[2] + STW A$A[4][2],*A2++[2] +|| STW B$A[4][2],*B2++[2] + STW A$A[4][3],*A2++[2] +|| STW B$A[4][3],*B2++[2] + STW A$A[4][4],*A2++[2] +|| STW B$A[4][4],*B2++[2] + .endasmfunc + + .newblock + .global _SHA3_squeeze + .asg A12,OUT + .asg A13,LEN + .asg A14,BSZ + .align 32 +_SHA3_squeeze: + .asmfunc stack_usage(24) + STW FP,*SP--(24) ; save frame pointer +|| MV SP,FP + STW RA, *SP[5] +|| STW A14,*FP[-2] + STDW A13:A12,*FP[-2] +|| MV B4,OUT ; reassign arguments + MV A6,LEN +|| MV B6,BSZ + +loop?: + LDW *SP[5],RA ; reload RA +|| SHRU BSZ,3,A1 +|| MV A4,A8 +|| ADD 4,A4,B8 +block?: + CMPLTU LEN,8,A0 ; len < 8? + [A0] BNOP tail? + LDW *A8++[2],A9 +|| LDW *B8++[2],B9 +|| SUB LEN,8,LEN ; len -= 8 + MV LEN,A0 +|| SUB A1,1,A1 ; bsz-- +|| NOP 4 + .if .BIG_ENDIAN + SWAP4 A9,A9 +|| SWAP4 B9,B9 + SWAP2 A9,A9 +|| SWAP2 B9,B9 + .endif + [!A0] BNOP ret? +||[!A0] ZERO A1 + PACK2 B9,A9,B7 +||[A1] BNOP block? + PACKH2 B9,A9,B9 +|| SHFL B7,B7 + SHFL B9,B9 + STNW B7,*OUT++ + STNW B9,*OUT++ + NOP + + BNOP _KeccakF1600,4 + ADDKPC loop?,RA + + .align 16 +tail?: + .if .BIG_ENDIAN + SWAP4 A9,A9 +|| SWAP4 B9,B9 + SWAP2 A9,A9 +|| SWAP2 B9,B9 + .endif + PACK2 B9,A9,B7 + PACKH2 B9,A9,B9 +|| SHFL B7,B7 + SHFL B9,B9 + + STB B7,*OUT++ +|| SHRU B7,8,B7 +|| ADD LEN,7,A0 + [A0] STB B7,*OUT++ +||[A0] SHRU B7,8,B7 +||[A0] SUB A0,1,A0 + [A0] STB B7,*OUT++ +||[A0] SHRU B7,8,B7 +||[A0] SUB A0,1,A0 + [A0] STB B7,*OUT++ +||[A0] SUB A0,1,A0 + [A0] STB B9,*OUT++ +||[A0] SHRU B9,8,B9 +||[A0] SUB A0,1,A0 + [A0] STB B9,*OUT++ +||[A0] SHRU B9,8,B9 +||[A0] SUB A0,1,A0 + [A0] STB B9,*OUT++ + +ret?: + LDDW *FP[-2],A13:A12 + BNOP RA +|| LDW *FP[-2],A14 + LDW *++SP(24),FP ; restore frame pointer + NOP 4 ; wait till FP is committed + .endasmfunc + + .if __TI_EABI__ + .sect ".text:sha_asm.const" + .else + .sect ".const:sha_asm" + .endif + .align 256 + .uword 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +iotas: + .uword 0x00000001, 0x00000000 + .uword 0x00000000, 0x00000089 + .uword 0x00000000, 0x8000008b + .uword 0x00000000, 0x80008080 + .uword 0x00000001, 0x0000008b + .uword 0x00000001, 0x00008000 + .uword 0x00000001, 0x80008088 + .uword 0x00000001, 0x80000082 + .uword 0x00000000, 0x0000000b + .uword 0x00000000, 0x0000000a + .uword 0x00000001, 0x00008082 + .uword 0x00000000, 0x00008003 + .uword 0x00000001, 0x0000808b + .uword 0x00000001, 0x8000000b + .uword 0x00000001, 0x8000008a + .uword 0x00000001, 0x80000081 + .uword 0x00000000, 0x80000081 + .uword 0x00000000, 0x80000008 + .uword 0x00000000, 0x00000083 + .uword 0x00000000, 0x80008003 + .uword 0x00000001, 0x80008088 + .uword 0x00000000, 0x80000088 + .uword 0x00000001, 0x00008000 + .uword 0x00000000, 0x80008082 + + .cstring "Keccak-1600 absorb and squeeze for C64x, CRYPTOGAMS by " + .align 4 +___ + +print $code; diff --git a/crypto/sha/asm/keccak1600-mmx.pl b/crypto/sha/asm/keccak1600-mmx.pl new file mode 100755 index 00000000..c7685add --- /dev/null +++ b/crypto/sha/asm/keccak1600-mmx.pl @@ -0,0 +1,440 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for x86 MMX. +# +# June 2017. +# +# Below code is KECCAK_2X implementation (see sha/keccak1600.c) with +# C[5] held in register bank and D[5] offloaded to memory. Though +# instead of actually unrolling the loop pair-wise I simply flip +# pointers to T[][] and A[][] and the end of round. Since number of +# rounds is even, last round writes to A[][] and everything works out. +# It's argued that MMX is the only code path meaningful to implement +# for x86. This is because non-MMX-capable processors is an extinct +# breed, and they as well can lurk executing compiler-generated code. +# For reference gcc-5.x-generated KECCAK_2X code takes 89 cycles per +# processed byte on Pentium. Which is fair result. But older compilers +# produce worse code. On the other hand one can wonder why not 128-bit +# SSE2? Well, SSE2 won't provide double improvement, rather far from +# that, if any at all on some processors, because it will take extra +# permutations and inter-bank data trasfers. Besides, contemporary +# CPUs are better off executing 64-bit code, and it makes lesser sense +# to invest into fancy 32-bit code. And the decision doesn't seem to +# be inadequate, if one compares below results to "64-bit platforms in +# 32-bit mode" SIMD data points available at +# http://keccak.noekeon.org/sw_performance.html. +# +######################################################################## +# Numbers are cycles per processed byte out of large message. +# +# r=1088(i) +# +# PIII 30/+150% +# Pentium M 27/+150% +# P4 40/+85% +# Core 2 19/+170% +# Sandy Bridge(ii) 18/+140% +# Atom 33/+180% +# Silvermont(ii) 30/+180% +# VIA Nano(ii) 43/+60% +# Sledgehammer(ii)(iii) 24/+130% +# +# (i) Corresponds to SHA3-256. Numbers after slash are improvement +# coefficients over KECCAK_2X [with bit interleave and lane +# complementing] position-independent *scalar* code generated +# by gcc-5.x. It's not exactly fair comparison, but it's a +# datapoint... +# (ii) 64-bit processor executing 32-bit code. +# (iii) Result is considered to be representative even for older AMD +# processors. + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +push(@INC,"${dir}","${dir}../../perlasm"); +require "x86asm.pl"; + +$output=pop; +open STDOUT,">$output"; + +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); + +my @C = map("mm$_",(0..4)); +my @T = map("mm$_",(5..7)); +my @A = map([ 8*$_-100, 8*($_+1)-100, 8*($_+2)-100, + 8*($_+3)-100, 8*($_+4)-100 ], (0,5,10,15,20)); +my @D = map(8*$_+4, (0..4)); +my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 36, 44, 6, 55, 20 ], + [ 3, 10, 43, 25, 39 ], + [ 41, 45, 15, 21, 8 ], + [ 18, 2, 61, 56, 14 ]); + +&static_label("iotas"); + +&function_begin_B("_KeccakF1600"); + &movq (@C[0],&QWP($A[4][0],"esi")); + &movq (@C[1],&QWP($A[4][1],"esi")); + &movq (@C[2],&QWP($A[4][2],"esi")); + &movq (@C[3],&QWP($A[4][3],"esi")); + &movq (@C[4],&QWP($A[4][4],"esi")); + + &mov ("ecx",24); # loop counter + &jmp (&label("loop")); + + &set_label("loop",16); + ######################################### Theta + &pxor (@C[0],&QWP($A[0][0],"esi")); + &pxor (@C[1],&QWP($A[0][1],"esi")); + &pxor (@C[2],&QWP($A[0][2],"esi")); + &pxor (@C[3],&QWP($A[0][3],"esi")); + &pxor (@C[4],&QWP($A[0][4],"esi")); + + &pxor (@C[0],&QWP($A[1][0],"esi")); + &pxor (@C[1],&QWP($A[1][1],"esi")); + &pxor (@C[2],&QWP($A[1][2],"esi")); + &pxor (@C[3],&QWP($A[1][3],"esi")); + &pxor (@C[4],&QWP($A[1][4],"esi")); + + &pxor (@C[0],&QWP($A[2][0],"esi")); + &pxor (@C[1],&QWP($A[2][1],"esi")); + &pxor (@C[2],&QWP($A[2][2],"esi")); + &pxor (@C[3],&QWP($A[2][3],"esi")); + &pxor (@C[4],&QWP($A[2][4],"esi")); + + &pxor (@C[2],&QWP($A[3][2],"esi")); + &pxor (@C[0],&QWP($A[3][0],"esi")); + &pxor (@C[1],&QWP($A[3][1],"esi")); + &pxor (@C[3],&QWP($A[3][3],"esi")); + &movq (@T[0],@C[2]); + &pxor (@C[4],&QWP($A[3][4],"esi")); + + &movq (@T[2],@C[2]); + &psrlq (@T[0],63); + &movq (@T[1],@C[0]); + &psllq (@T[2],1); + &pxor (@T[0],@C[0]); + &psrlq (@C[0],63); + &pxor (@T[0],@T[2]); + &psllq (@T[1],1); + &movq (@T[2],@C[1]); + &movq (&QWP(@D[1],"esp"),@T[0]); # D[1] = E[0] = ROL64(C[2], 1) ^ C[0]; + + &pxor (@T[1],@C[0]); + &psrlq (@T[2],63); + &pxor (@T[1],@C[3]); + &movq (@C[0],@C[1]); + &movq (&QWP(@D[4],"esp"),@T[1]); # D[4] = E[1] = ROL64(C[0], 1) ^ C[3]; + + &psllq (@C[0],1); + &pxor (@T[2],@C[4]); + &pxor (@C[0],@T[2]); + + &movq (@T[2],@C[3]); + &psrlq (@C[3],63); + &movq (&QWP(@D[0],"esp"),@C[0]); # D[0] = C[0] = ROL64(C[1], 1) ^ C[4]; + &psllq (@T[2],1); + &movq (@T[0],@C[4]); + &psrlq (@C[4],63); + &pxor (@C[1],@C[3]); + &psllq (@T[0],1); + &pxor (@C[1],@T[2]); + &pxor (@C[2],@C[4]); + &movq (&QWP(@D[2],"esp"),@C[1]); # D[2] = C[1] = ROL64(C[3], 1) ^ C[1]; + &pxor (@C[2],@T[0]); + + ######################################### first Rho(0) is special + &movq (@C[3],&QWP($A[3][3],"esi")); + &movq (&QWP(@D[3],"esp"),@C[2]); # D[3] = C[2] = ROL64(C[4], 1) ^ C[2]; + &pxor (@C[3],@C[2]); + &movq (@C[4],&QWP($A[4][4],"esi")); + &movq (@T[2],@C[3]); + &psrlq (@C[3],64-$rhotates[3][3]); + &pxor (@C[4],@T[1]); + &psllq (@T[2],$rhotates[3][3]); + &movq (@T[1],@C[4]); + &psrlq (@C[4],64-$rhotates[4][4]); + &por (@C[3],@T[2]); # C[3] = ROL64(A[3][3] ^ C[2], rhotates[3][3]); /* D[3] */ + &psllq (@T[1],$rhotates[4][4]); + + &movq (@C[2],&QWP($A[2][2],"esi")); + &por (@C[4],@T[1]); # C[4] = ROL64(A[4][4] ^ E[1], rhotates[4][4]); /* D[4] */ + &pxor (@C[2],@C[1]); + &movq (@C[1],&QWP($A[1][1],"esi")); + &movq (@T[1],@C[2]); + &psrlq (@C[2],64-$rhotates[2][2]); + &pxor (@C[1],&QWP(@D[1],"esp")); + &psllq (@T[1],$rhotates[2][2]); + + &movq (@T[2],@C[1]); + &psrlq (@C[1],64-$rhotates[1][1]); + &por (@C[2],@T[1]); # C[2] = ROL64(A[2][2] ^ C[1], rhotates[2][2]); /* D[2] */ + &psllq (@T[2],$rhotates[1][1]); + &pxor (@C[0],&QWP($A[0][0],"esi")); # /* rotate by 0 */ /* D[0] */ + &por (@C[1],@T[2]); # C[1] = ROL64(A[1][1] ^ D[1], rhotates[1][1]); + +sub Chi() { ######### regular Chi step + my ($y,$xrho) = @_; + + &movq (@T[0],@C[1]); + &movq (@T[1],@C[2]); + &pandn (@T[0],@C[2]); + &pandn (@C[2],@C[3]); + &pxor (@T[0],@C[0]); + &pxor (@C[2],@C[1]); + &pxor (@T[0],&QWP(0,"ebx")) if ($y == 0); + &lea ("ebx",&DWP(8,"ebx")) if ($y == 0); + + &movq (@T[2],@C[3]); + &movq (&QWP($A[$y][0],"edi"),@T[0]); # R[0][0] = C[0] ^ (~C[1] & C[2]) ^ iotas[i]; + &movq (@T[0],@C[4]); + &pandn (@C[3],@C[4]); + &pandn (@C[4],@C[0]); + &pxor (@C[3],@T[1]); + &movq (&QWP($A[$y][1],"edi"),@C[2]); # R[0][1] = C[1] ^ (~C[2] & C[3]); + &pxor (@C[4],@T[2]); + &movq (@T[2],&QWP($A[0][$xrho],"esi")) if (defined($xrho)); + + &movq (&QWP($A[$y][2],"edi"),@C[3]); # R[0][2] = C[2] ^ (~C[3] & C[4]); + &pandn (@C[0],@C[1]); + &movq (&QWP($A[$y][3],"edi"),@C[4]); # R[0][3] = C[3] ^ (~C[4] & C[0]); + &pxor (@C[0],@T[0]); + &pxor (@T[2],&QWP(@D[$xrho],"esp")) if (defined($xrho)); + &movq (&QWP($A[$y][4],"edi"),@C[0]); # R[0][4] = C[4] ^ (~C[0] & C[1]); +} + &Chi (0, 3); + +sub Rho() { ######### regular Rho step + my $x = shift; + + #&movq (@T[2],&QWP($A[0][$x],"esi")); # moved to Chi + #&pxor (@T[2],&QWP(@D[$x],"esp")); # moved to Chi + &movq (@C[0],@T[2]); + &psrlq (@T[2],64-$rhotates[0][$x]); + &movq (@C[1],&QWP($A[1][($x+1)%5],"esi")); + &psllq (@C[0],$rhotates[0][$x]); + &pxor (@C[1],&QWP(@D[($x+1)%5],"esp")); + &por (@C[0],@T[2]); # C[0] = ROL64(A[0][3] ^ D[3], rhotates[0][3]); + + &movq (@T[1],@C[1]); + &psrlq (@C[1],64-$rhotates[1][($x+1)%5]); + &movq (@C[2],&QWP($A[2][($x+2)%5],"esi")); + &psllq (@T[1],$rhotates[1][($x+1)%5]); + &pxor (@C[2],&QWP(@D[($x+2)%5],"esp")); + &por (@C[1],@T[1]); # C[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + + &movq (@T[2],@C[2]); + &psrlq (@C[2],64-$rhotates[2][($x+2)%5]); + &movq (@C[3],&QWP($A[3][($x+3)%5],"esi")); + &psllq (@T[2],$rhotates[2][($x+2)%5]); + &pxor (@C[3],&QWP(@D[($x+3)%5],"esp")); + &por (@C[2],@T[2]); # C[2] = ROL64(A[2][0] ^ D[0], rhotates[2][0]); + + &movq (@T[0],@C[3]); + &psrlq (@C[3],64-$rhotates[3][($x+3)%5]); + &movq (@C[4],&QWP($A[4][($x+4)%5],"esi")); + &psllq (@T[0],$rhotates[3][($x+3)%5]); + &pxor (@C[4],&QWP(@D[($x+4)%5],"esp")); + &por (@C[3],@T[0]); # C[3] = ROL64(A[3][1] ^ D[1], rhotates[3][1]); + + &movq (@T[1],@C[4]); + &psrlq (@C[4],64-$rhotates[4][($x+4)%5]); + &psllq (@T[1],$rhotates[4][($x+4)%5]); + &por (@C[4],@T[1]); # C[4] = ROL64(A[4][2] ^ D[2], rhotates[4][2]); +} + &Rho (3); &Chi (1, 1); + &Rho (1); &Chi (2, 4); + &Rho (4); &Chi (3, 2); + &Rho (2); ###&Chi (4); + + &movq (@T[0],@C[0]); ######### last Chi(4) is special + &xor ("edi","esi"); # &xchg ("esi","edi"); + &movq (&QWP(@D[1],"esp"),@C[1]); + &xor ("esi","edi"); + &xor ("edi","esi"); + + &movq (@T[1],@C[1]); + &movq (@T[2],@C[2]); + &pandn (@T[1],@C[2]); + &pandn (@T[2],@C[3]); + &pxor (@C[0],@T[1]); + &pxor (@C[1],@T[2]); + + &movq (@T[1],@C[3]); + &movq (&QWP($A[4][0],"esi"),@C[0]); # R[4][0] = C[0] ^= (~C[1] & C[2]); + &pandn (@T[1],@C[4]); + &movq (&QWP($A[4][1],"esi"),@C[1]); # R[4][1] = C[1] ^= (~C[2] & C[3]); + &pxor (@C[2],@T[1]); + &movq (@T[2],@C[4]); + &movq (&QWP($A[4][2],"esi"),@C[2]); # R[4][2] = C[2] ^= (~C[3] & C[4]); + + &pandn (@T[2],@T[0]); + &pandn (@T[0],&QWP(@D[1],"esp")); + &pxor (@C[3],@T[2]); + &pxor (@C[4],@T[0]); + &movq (&QWP($A[4][3],"esi"),@C[3]); # R[4][3] = C[3] ^= (~C[4] & D[0]); + &sub ("ecx",1); + &movq (&QWP($A[4][4],"esi"),@C[4]); # R[4][4] = C[4] ^= (~D[0] & D[1]); + &jnz (&label("loop")); + + &lea ("ebx",&DWP(-192,"ebx")); # rewind iotas + &ret (); +&function_end_B("_KeccakF1600"); + +&function_begin("KeccakF1600"); + &mov ("esi",&wparam(0)); + &mov ("ebp","esp"); + &sub ("esp",240); + &call (&label("pic_point")); + &set_label("pic_point"); + &blindpop("ebx"); + &lea ("ebx",&DWP(&label("iotas")."-".&label("pic_point"),"ebx")); + &and ("esp",-8); + &lea ("esi",&DWP(100,"esi")); # size optimization + &lea ("edi",&DWP(8*5+100,"esp")); # size optimization + + &call ("_KeccakF1600"); + + &mov ("esp","ebp"); + &emms (); +&function_end("KeccakF1600"); + +&function_begin("SHA3_absorb"); + &mov ("esi",&wparam(0)); # A[][] + &mov ("eax",&wparam(1)); # inp + &mov ("ecx",&wparam(2)); # len + &mov ("edx",&wparam(3)); # bsz + &mov ("ebp","esp"); + &sub ("esp",240+8); + &call (&label("pic_point")); + &set_label("pic_point"); + &blindpop("ebx"); + &lea ("ebx",&DWP(&label("iotas")."-".&label("pic_point"),"ebx")); + &and ("esp",-8); + + &mov ("edi","esi"); + &lea ("esi",&DWP(100,"esi")); # size optimization + &mov (&DWP(-4,"ebp"),"edx"); # save bsz + &jmp (&label("loop")); + +&set_label("loop",16); + &cmp ("ecx","edx"); # len < bsz? + &jc (&label("absorbed")); + + &shr ("edx",3); # bsz /= 8 +&set_label("block"); + &movq ("mm0",&QWP(0,"eax")); + &lea ("eax",&DWP(8,"eax")); + &pxor ("mm0",&QWP(0,"edi")); + &lea ("edi",&DWP(8,"edi")); + &sub ("ecx",8); # len -= 8 + &movq (&QWP(-8,"edi"),"mm0"); + &dec ("edx"); # bsz-- + &jnz (&label("block")); + + &lea ("edi",&DWP(8*5+100,"esp")); # size optimization + &mov (&DWP(-8,"ebp"),"ecx"); # save len + &call ("_KeccakF1600"); + &mov ("ecx",&DWP(-8,"ebp")); # pull len + &mov ("edx",&DWP(-4,"ebp")); # pull bsz + &lea ("edi",&DWP(-100,"esi")); + &jmp (&label("loop")); + +&set_label("absorbed",16); + &mov ("eax","ecx"); # return value + &mov ("esp","ebp"); + &emms (); +&function_end("SHA3_absorb"); + +&function_begin("SHA3_squeeze"); + &mov ("esi",&wparam(0)); # A[][] + &mov ("eax",&wparam(1)); # out + &mov ("ecx",&wparam(2)); # len + &mov ("edx",&wparam(3)); # bsz + &mov ("ebp","esp"); + &sub ("esp",240+8); + &call (&label("pic_point")); + &set_label("pic_point"); + &blindpop("ebx"); + &lea ("ebx",&DWP(&label("iotas")."-".&label("pic_point"),"ebx")); + &and ("esp",-8); + + &shr ("edx",3); # bsz /= 8 + &mov ("edi","esi"); + &lea ("esi",&DWP(100,"esi")); # size optimization + &mov (&DWP(-4,"ebp"),"edx"); # save bsz + &jmp (&label("loop")); + +&set_label("loop",16); + &cmp ("ecx",8); # len < 8? + &jc (&label("tail")); + + &movq ("mm0",&QWP(0,"edi")); + &lea ("edi",&DWP(8,"edi")); + &movq (&QWP(0,"eax"),"mm0"); + &lea ("eax",&DWP(8,"eax")); + &sub ("ecx",8); # len -= 8 + &jz (&label("done")); + + &dec ("edx"); # bsz-- + &jnz (&label("loop")); + + &lea ("edi",&DWP(8*5+100,"esp")); # size optimization + &mov (&DWP(-8,"ebp"),"ecx"); # save len + &call ("_KeccakF1600"); + &mov ("ecx",&DWP(-8,"ebp")); # pull len + &mov ("edx",&DWP(-4,"ebp")); # pull bsz + &lea ("edi",&DWP(-100,"esi")); + &jmp (&label("loop")); + +&set_label("tail",16); + &mov ("esi","edi"); + &mov ("edi","eax"); + &data_word("0xA4F39066"); # rep movsb + +&set_label("done"); + &mov ("esp","ebp"); + &emms (); +&function_end("SHA3_squeeze"); + +&set_label("iotas",32); + &data_word(0x00000001,0x00000000); + &data_word(0x00008082,0x00000000); + &data_word(0x0000808a,0x80000000); + &data_word(0x80008000,0x80000000); + &data_word(0x0000808b,0x00000000); + &data_word(0x80000001,0x00000000); + &data_word(0x80008081,0x80000000); + &data_word(0x00008009,0x80000000); + &data_word(0x0000008a,0x00000000); + &data_word(0x00000088,0x00000000); + &data_word(0x80008009,0x00000000); + &data_word(0x8000000a,0x00000000); + &data_word(0x8000808b,0x00000000); + &data_word(0x0000008b,0x80000000); + &data_word(0x00008089,0x80000000); + &data_word(0x00008003,0x80000000); + &data_word(0x00008002,0x80000000); + &data_word(0x00000080,0x80000000); + &data_word(0x0000800a,0x00000000); + &data_word(0x8000000a,0x80000000); + &data_word(0x80008081,0x80000000); + &data_word(0x00008080,0x80000000); + &data_word(0x80000001,0x00000000); + &data_word(0x80008008,0x80000000); +&asciz("Keccak-1600 absorb and squeeze for MMX, CRYPTOGAMS by "); + +&asm_finish(); + +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-ppc64.pl b/crypto/sha/asm/keccak1600-ppc64.pl new file mode 100755 index 00000000..f89f71c8 --- /dev/null +++ b/crypto/sha/asm/keccak1600-ppc64.pl @@ -0,0 +1,757 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for PPC64. +# +# June 2017. +# +# This is straightforward KECCAK_1X_ALT implementation that works on +# *any* PPC64. Then PowerISA 2.07 adds 2x64-bit vector rotate, and +# it's possible to achieve performance better than below, but that is +# naturally option only for POWER8 and successors... +# +###################################################################### +# Numbers are cycles per processed byte. +# +# r=1088(*) +# +# PPC970/G5 14.6/+120% +# POWER7 10.3/+100% +# POWER8 11.5/+85% +# +# (*) Corresponds to SHA3-256. Percentage after slash is improvement +# over gcc-4.x-generated KECCAK_1X_ALT code. Newer compilers do +# much better (but watch out for them generating code specific +# to processor they execute on). + +$flavour = shift; + +if ($flavour =~ /64/) { + $SIZE_T =8; + $LRSAVE =2*$SIZE_T; + $UCMP ="cmpld"; + $STU ="stdu"; + $POP ="ld"; + $PUSH ="std"; +} else { die "nonsense $flavour"; } + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or +die "can't locate ppc-xlate.pl"; + +open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!"; + +$FRAME=24*$SIZE_T+6*$SIZE_T+32; +$LOCALS=6*$SIZE_T; +$TEMP=$LOCALS+6*$SIZE_T; + +my $sp ="r1"; + +my @A = map([ "r$_", "r".($_+1), "r".($_+2), "r".($_+3), "r".($_+4) ], + (7, 12, 17, 22, 27)); + $A[1][1] = "r6"; # r13 is reserved + +my @C = map("r$_", (0,3,4,5)); + +my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 36, 44, 6, 55, 20 ], + [ 3, 10, 43, 25, 39 ], + [ 41, 45, 15, 21, 8 ], + [ 18, 2, 61, 56, 14 ]); + +$code.=<<___; +.text + +.type KeccakF1600_int,\@function +.align 5 +KeccakF1600_int: + li r0,24 + mtctr r0 + b .Loop +.align 4 +.Loop: + xor $C[0],$A[0][0],$A[1][0] ; Theta + std $A[0][4],`$TEMP+0`($sp) + xor $C[1],$A[0][1],$A[1][1] + std $A[1][4],`$TEMP+8`($sp) + xor $C[2],$A[0][2],$A[1][2] + std $A[2][4],`$TEMP+16`($sp) + xor $C[3],$A[0][3],$A[1][3] + std $A[3][4],`$TEMP+24`($sp) +___ + $C[4]=$A[0][4]; + $C[5]=$A[1][4]; + $C[6]=$A[2][4]; + $C[7]=$A[3][4]; +$code.=<<___; + xor $C[4],$A[0][4],$A[1][4] + xor $C[0],$C[0],$A[2][0] + xor $C[1],$C[1],$A[2][1] + xor $C[2],$C[2],$A[2][2] + xor $C[3],$C[3],$A[2][3] + xor $C[4],$C[4],$A[2][4] + xor $C[0],$C[0],$A[3][0] + xor $C[1],$C[1],$A[3][1] + xor $C[2],$C[2],$A[3][2] + xor $C[3],$C[3],$A[3][3] + xor $C[4],$C[4],$A[3][4] + xor $C[0],$C[0],$A[4][0] + xor $C[2],$C[2],$A[4][2] + xor $C[1],$C[1],$A[4][1] + xor $C[3],$C[3],$A[4][3] + rotldi $C[5],$C[2],1 + xor $C[4],$C[4],$A[4][4] + rotldi $C[6],$C[3],1 + xor $C[5],$C[5],$C[0] + rotldi $C[7],$C[4],1 + + xor $A[0][1],$A[0][1],$C[5] + xor $A[1][1],$A[1][1],$C[5] + xor $A[2][1],$A[2][1],$C[5] + xor $A[3][1],$A[3][1],$C[5] + xor $A[4][1],$A[4][1],$C[5] + + rotldi $C[5],$C[0],1 + xor $C[6],$C[6],$C[1] + xor $C[2],$C[2],$C[7] + rotldi $C[7],$C[1],1 + xor $C[3],$C[3],$C[5] + xor $C[4],$C[4],$C[7] + + xor $C[1], $A[0][2],$C[6] ;mr $C[1],$A[0][2] + xor $A[1][2],$A[1][2],$C[6] + xor $A[2][2],$A[2][2],$C[6] + xor $A[3][2],$A[3][2],$C[6] + xor $A[4][2],$A[4][2],$C[6] + + xor $A[0][0],$A[0][0],$C[4] + xor $A[1][0],$A[1][0],$C[4] + xor $A[2][0],$A[2][0],$C[4] + xor $A[3][0],$A[3][0],$C[4] + xor $A[4][0],$A[4][0],$C[4] +___ + $C[4]=undef; + $C[5]=undef; + $C[6]=undef; + $C[7]=undef; +$code.=<<___; + ld $A[0][4],`$TEMP+0`($sp) + xor $C[0], $A[0][3],$C[2] ;mr $C[0],$A[0][3] + ld $A[1][4],`$TEMP+8`($sp) + xor $A[1][3],$A[1][3],$C[2] + ld $A[2][4],`$TEMP+16`($sp) + xor $A[2][3],$A[2][3],$C[2] + ld $A[3][4],`$TEMP+24`($sp) + xor $A[3][3],$A[3][3],$C[2] + xor $A[4][3],$A[4][3],$C[2] + + xor $C[2], $A[0][4],$C[3] ;mr $C[2],$A[0][4] + xor $A[1][4],$A[1][4],$C[3] + xor $A[2][4],$A[2][4],$C[3] + xor $A[3][4],$A[3][4],$C[3] + xor $A[4][4],$A[4][4],$C[3] + + mr $C[3],$A[0][1] ; Rho+Pi + rotldi $A[0][1],$A[1][1],$rhotates[1][1] + ;mr $C[1],$A[0][2] + rotldi $A[0][2],$A[2][2],$rhotates[2][2] + ;mr $C[0],$A[0][3] + rotldi $A[0][3],$A[3][3],$rhotates[3][3] + ;mr $C[2],$A[0][4] + rotldi $A[0][4],$A[4][4],$rhotates[4][4] + + rotldi $A[1][1],$A[1][4],$rhotates[1][4] + rotldi $A[2][2],$A[2][3],$rhotates[2][3] + rotldi $A[3][3],$A[3][2],$rhotates[3][2] + rotldi $A[4][4],$A[4][1],$rhotates[4][1] + + rotldi $A[1][4],$A[4][2],$rhotates[4][2] + rotldi $A[2][3],$A[3][4],$rhotates[3][4] + rotldi $A[3][2],$A[2][1],$rhotates[2][1] + rotldi $A[4][1],$A[1][3],$rhotates[1][3] + + rotldi $A[4][2],$A[2][4],$rhotates[2][4] + rotldi $A[3][4],$A[4][3],$rhotates[4][3] + rotldi $A[2][1],$A[1][2],$rhotates[1][2] + rotldi $A[1][3],$A[3][1],$rhotates[3][1] + + rotldi $A[2][4],$A[4][0],$rhotates[4][0] + rotldi $A[4][3],$A[3][0],$rhotates[3][0] + rotldi $A[1][2],$A[2][0],$rhotates[2][0] + rotldi $A[3][1],$A[1][0],$rhotates[1][0] + + rotldi $A[1][0],$C[0],$rhotates[0][3] + rotldi $A[2][0],$C[3],$rhotates[0][1] + rotldi $A[3][0],$C[2],$rhotates[0][4] + rotldi $A[4][0],$C[1],$rhotates[0][2] + + andc $C[0],$A[0][2],$A[0][1] ; Chi+Iota + andc $C[1],$A[0][3],$A[0][2] + andc $C[2],$A[0][0],$A[0][4] + andc $C[3],$A[0][1],$A[0][0] + xor $A[0][0],$A[0][0],$C[0] + andc $C[0],$A[0][4],$A[0][3] + xor $A[0][1],$A[0][1],$C[1] + ld $C[1],`$LOCALS+4*$SIZE_T`($sp) + xor $A[0][3],$A[0][3],$C[2] + xor $A[0][4],$A[0][4],$C[3] + xor $A[0][2],$A[0][2],$C[0] + ldu $C[3],8($C[1]) ; Iota[i++] + + andc $C[0],$A[1][2],$A[1][1] + std $C[1],`$LOCALS+4*$SIZE_T`($sp) + andc $C[1],$A[1][3],$A[1][2] + andc $C[2],$A[1][0],$A[1][4] + xor $A[0][0],$A[0][0],$C[3] ; A[0][0] ^= Iota + andc $C[3],$A[1][1],$A[1][0] + xor $A[1][0],$A[1][0],$C[0] + andc $C[0],$A[1][4],$A[1][3] + xor $A[1][1],$A[1][1],$C[1] + xor $A[1][3],$A[1][3],$C[2] + xor $A[1][4],$A[1][4],$C[3] + xor $A[1][2],$A[1][2],$C[0] + + andc $C[0],$A[2][2],$A[2][1] + andc $C[1],$A[2][3],$A[2][2] + andc $C[2],$A[2][0],$A[2][4] + andc $C[3],$A[2][1],$A[2][0] + xor $A[2][0],$A[2][0],$C[0] + andc $C[0],$A[2][4],$A[2][3] + xor $A[2][1],$A[2][1],$C[1] + xor $A[2][3],$A[2][3],$C[2] + xor $A[2][4],$A[2][4],$C[3] + xor $A[2][2],$A[2][2],$C[0] + + andc $C[0],$A[3][2],$A[3][1] + andc $C[1],$A[3][3],$A[3][2] + andc $C[2],$A[3][0],$A[3][4] + andc $C[3],$A[3][1],$A[3][0] + xor $A[3][0],$A[3][0],$C[0] + andc $C[0],$A[3][4],$A[3][3] + xor $A[3][1],$A[3][1],$C[1] + xor $A[3][3],$A[3][3],$C[2] + xor $A[3][4],$A[3][4],$C[3] + xor $A[3][2],$A[3][2],$C[0] + + andc $C[0],$A[4][2],$A[4][1] + andc $C[1],$A[4][3],$A[4][2] + andc $C[2],$A[4][0],$A[4][4] + andc $C[3],$A[4][1],$A[4][0] + xor $A[4][0],$A[4][0],$C[0] + andc $C[0],$A[4][4],$A[4][3] + xor $A[4][1],$A[4][1],$C[1] + xor $A[4][3],$A[4][3],$C[2] + xor $A[4][4],$A[4][4],$C[3] + xor $A[4][2],$A[4][2],$C[0] + + bdnz .Loop + + blr + .long 0 + .byte 0,12,0x14,0,0,0,0,0 +.size KeccakF1600_int,.-KeccakF1600_int + +.type KeccakF1600,\@function +.align 5 +KeccakF1600: + $STU $sp,-$FRAME($sp) + mflr r0 + $PUSH r14,`$FRAME-$SIZE_T*18`($sp) + $PUSH r15,`$FRAME-$SIZE_T*17`($sp) + $PUSH r16,`$FRAME-$SIZE_T*16`($sp) + $PUSH r17,`$FRAME-$SIZE_T*15`($sp) + $PUSH r18,`$FRAME-$SIZE_T*14`($sp) + $PUSH r19,`$FRAME-$SIZE_T*13`($sp) + $PUSH r20,`$FRAME-$SIZE_T*12`($sp) + $PUSH r21,`$FRAME-$SIZE_T*11`($sp) + $PUSH r22,`$FRAME-$SIZE_T*10`($sp) + $PUSH r23,`$FRAME-$SIZE_T*9`($sp) + $PUSH r24,`$FRAME-$SIZE_T*8`($sp) + $PUSH r25,`$FRAME-$SIZE_T*7`($sp) + $PUSH r26,`$FRAME-$SIZE_T*6`($sp) + $PUSH r27,`$FRAME-$SIZE_T*5`($sp) + $PUSH r28,`$FRAME-$SIZE_T*4`($sp) + $PUSH r29,`$FRAME-$SIZE_T*3`($sp) + $PUSH r30,`$FRAME-$SIZE_T*2`($sp) + $PUSH r31,`$FRAME-$SIZE_T*1`($sp) + $PUSH r0,`$FRAME+$LRSAVE`($sp) + + bl PICmeup + subi r12,r12,8 ; prepare for ldu + + $PUSH r3,`$LOCALS+0*$SIZE_T`($sp) + ;$PUSH r4,`$LOCALS+1*$SIZE_T`($sp) + ;$PUSH r5,`$LOCALS+2*$SIZE_T`($sp) + ;$PUSH r6,`$LOCALS+3*$SIZE_T`($sp) + $PUSH r12,`$LOCALS+4*$SIZE_T`($sp) + + ld $A[0][0],`8*0`(r3) ; load A[5][5] + ld $A[0][1],`8*1`(r3) + ld $A[0][2],`8*2`(r3) + ld $A[0][3],`8*3`(r3) + ld $A[0][4],`8*4`(r3) + ld $A[1][0],`8*5`(r3) + ld $A[1][1],`8*6`(r3) + ld $A[1][2],`8*7`(r3) + ld $A[1][3],`8*8`(r3) + ld $A[1][4],`8*9`(r3) + ld $A[2][0],`8*10`(r3) + ld $A[2][1],`8*11`(r3) + ld $A[2][2],`8*12`(r3) + ld $A[2][3],`8*13`(r3) + ld $A[2][4],`8*14`(r3) + ld $A[3][0],`8*15`(r3) + ld $A[3][1],`8*16`(r3) + ld $A[3][2],`8*17`(r3) + ld $A[3][3],`8*18`(r3) + ld $A[3][4],`8*19`(r3) + ld $A[4][0],`8*20`(r3) + ld $A[4][1],`8*21`(r3) + ld $A[4][2],`8*22`(r3) + ld $A[4][3],`8*23`(r3) + ld $A[4][4],`8*24`(r3) + + bl KeccakF1600_int + + $POP r3,`$LOCALS+0*$SIZE_T`($sp) + std $A[0][0],`8*0`(r3) ; return A[5][5] + std $A[0][1],`8*1`(r3) + std $A[0][2],`8*2`(r3) + std $A[0][3],`8*3`(r3) + std $A[0][4],`8*4`(r3) + std $A[1][0],`8*5`(r3) + std $A[1][1],`8*6`(r3) + std $A[1][2],`8*7`(r3) + std $A[1][3],`8*8`(r3) + std $A[1][4],`8*9`(r3) + std $A[2][0],`8*10`(r3) + std $A[2][1],`8*11`(r3) + std $A[2][2],`8*12`(r3) + std $A[2][3],`8*13`(r3) + std $A[2][4],`8*14`(r3) + std $A[3][0],`8*15`(r3) + std $A[3][1],`8*16`(r3) + std $A[3][2],`8*17`(r3) + std $A[3][3],`8*18`(r3) + std $A[3][4],`8*19`(r3) + std $A[4][0],`8*20`(r3) + std $A[4][1],`8*21`(r3) + std $A[4][2],`8*22`(r3) + std $A[4][3],`8*23`(r3) + std $A[4][4],`8*24`(r3) + + $POP r0,`$FRAME+$LRSAVE`($sp) + $POP r14,`$FRAME-$SIZE_T*18`($sp) + $POP r15,`$FRAME-$SIZE_T*17`($sp) + $POP r16,`$FRAME-$SIZE_T*16`($sp) + $POP r17,`$FRAME-$SIZE_T*15`($sp) + $POP r18,`$FRAME-$SIZE_T*14`($sp) + $POP r19,`$FRAME-$SIZE_T*13`($sp) + $POP r20,`$FRAME-$SIZE_T*12`($sp) + $POP r21,`$FRAME-$SIZE_T*11`($sp) + $POP r22,`$FRAME-$SIZE_T*10`($sp) + $POP r23,`$FRAME-$SIZE_T*9`($sp) + $POP r24,`$FRAME-$SIZE_T*8`($sp) + $POP r25,`$FRAME-$SIZE_T*7`($sp) + $POP r26,`$FRAME-$SIZE_T*6`($sp) + $POP r27,`$FRAME-$SIZE_T*5`($sp) + $POP r28,`$FRAME-$SIZE_T*4`($sp) + $POP r29,`$FRAME-$SIZE_T*3`($sp) + $POP r30,`$FRAME-$SIZE_T*2`($sp) + $POP r31,`$FRAME-$SIZE_T*1`($sp) + mtlr r0 + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,4,1,0x80,18,1,0 + .long 0 +.size KeccakF1600,.-KeccakF1600 + +.type dword_le_load,\@function +.align 5 +dword_le_load: + lbzu r0,1(r3) + lbzu r4,1(r3) + lbzu r5,1(r3) + insrdi r0,r4,8,48 + lbzu r4,1(r3) + insrdi r0,r5,8,40 + lbzu r5,1(r3) + insrdi r0,r4,8,32 + lbzu r4,1(r3) + insrdi r0,r5,8,24 + lbzu r5,1(r3) + insrdi r0,r4,8,16 + lbzu r4,1(r3) + insrdi r0,r5,8,8 + insrdi r0,r4,8,0 + blr + .long 0 + .byte 0,12,0x14,0,0,0,1,0 + .long 0 +.size dword_le_load,.-dword_le_load + +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 5 +SHA3_absorb: + $STU $sp,-$FRAME($sp) + mflr r0 + $PUSH r14,`$FRAME-$SIZE_T*18`($sp) + $PUSH r15,`$FRAME-$SIZE_T*17`($sp) + $PUSH r16,`$FRAME-$SIZE_T*16`($sp) + $PUSH r17,`$FRAME-$SIZE_T*15`($sp) + $PUSH r18,`$FRAME-$SIZE_T*14`($sp) + $PUSH r19,`$FRAME-$SIZE_T*13`($sp) + $PUSH r20,`$FRAME-$SIZE_T*12`($sp) + $PUSH r21,`$FRAME-$SIZE_T*11`($sp) + $PUSH r22,`$FRAME-$SIZE_T*10`($sp) + $PUSH r23,`$FRAME-$SIZE_T*9`($sp) + $PUSH r24,`$FRAME-$SIZE_T*8`($sp) + $PUSH r25,`$FRAME-$SIZE_T*7`($sp) + $PUSH r26,`$FRAME-$SIZE_T*6`($sp) + $PUSH r27,`$FRAME-$SIZE_T*5`($sp) + $PUSH r28,`$FRAME-$SIZE_T*4`($sp) + $PUSH r29,`$FRAME-$SIZE_T*3`($sp) + $PUSH r30,`$FRAME-$SIZE_T*2`($sp) + $PUSH r31,`$FRAME-$SIZE_T*1`($sp) + $PUSH r0,`$FRAME+$LRSAVE`($sp) + + bl PICmeup + subi r4,r4,1 ; prepare for lbzu + subi r12,r12,8 ; prepare for ldu + + $PUSH r3,`$LOCALS+0*$SIZE_T`($sp) ; save A[][] + $PUSH r4,`$LOCALS+1*$SIZE_T`($sp) ; save inp + $PUSH r5,`$LOCALS+2*$SIZE_T`($sp) ; save len + $PUSH r6,`$LOCALS+3*$SIZE_T`($sp) ; save bsz + mr r0,r6 + $PUSH r12,`$LOCALS+4*$SIZE_T`($sp) + + ld $A[0][0],`8*0`(r3) ; load A[5][5] + ld $A[0][1],`8*1`(r3) + ld $A[0][2],`8*2`(r3) + ld $A[0][3],`8*3`(r3) + ld $A[0][4],`8*4`(r3) + ld $A[1][0],`8*5`(r3) + ld $A[1][1],`8*6`(r3) + ld $A[1][2],`8*7`(r3) + ld $A[1][3],`8*8`(r3) + ld $A[1][4],`8*9`(r3) + ld $A[2][0],`8*10`(r3) + ld $A[2][1],`8*11`(r3) + ld $A[2][2],`8*12`(r3) + ld $A[2][3],`8*13`(r3) + ld $A[2][4],`8*14`(r3) + ld $A[3][0],`8*15`(r3) + ld $A[3][1],`8*16`(r3) + ld $A[3][2],`8*17`(r3) + ld $A[3][3],`8*18`(r3) + ld $A[3][4],`8*19`(r3) + ld $A[4][0],`8*20`(r3) + ld $A[4][1],`8*21`(r3) + ld $A[4][2],`8*22`(r3) + ld $A[4][3],`8*23`(r3) + ld $A[4][4],`8*24`(r3) + + mr r3,r4 + mr r4,r5 + mr r5,r0 + + b .Loop_absorb + +.align 4 +.Loop_absorb: + $UCMP r4,r5 ; len < bsz? + blt .Labsorbed + + sub r4,r4,r5 ; len -= bsz + srwi r5,r5,3 + $PUSH r4,`$LOCALS+2*$SIZE_T`($sp) ; save len + mtctr r5 + bl dword_le_load ; *inp++ + xor $A[0][0],$A[0][0],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[0][1],$A[0][1],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[0][2],$A[0][2],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[0][3],$A[0][3],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[0][4],$A[0][4],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[1][0],$A[1][0],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[1][1],$A[1][1],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[1][2],$A[1][2],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[1][3],$A[1][3],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[1][4],$A[1][4],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[2][0],$A[2][0],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[2][1],$A[2][1],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[2][2],$A[2][2],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[2][3],$A[2][3],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[2][4],$A[2][4],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[3][0],$A[3][0],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[3][1],$A[3][1],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[3][2],$A[3][2],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[3][3],$A[3][3],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[3][4],$A[3][4],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[4][0],$A[4][0],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[4][1],$A[4][1],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[4][2],$A[4][2],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[4][3],$A[4][3],r0 + bdz .Lprocess_block + bl dword_le_load ; *inp++ + xor $A[4][4],$A[4][4],r0 + +.Lprocess_block: + $PUSH r3,`$LOCALS+1*$SIZE_T`($sp) ; save inp + + bl KeccakF1600_int + + $POP r0,`$LOCALS+4*$SIZE_T`($sp) ; pull iotas[24] + $POP r5,`$LOCALS+3*$SIZE_T`($sp) ; restore bsz + $POP r4,`$LOCALS+2*$SIZE_T`($sp) ; restore len + $POP r3,`$LOCALS+1*$SIZE_T`($sp) ; restore inp + addic r0,r0,`-8*24` ; rewind iotas + $PUSH r0,`$LOCALS+4*$SIZE_T`($sp) + + b .Loop_absorb + +.align 4 +.Labsorbed: + $POP r3,`$LOCALS+0*$SIZE_T`($sp) + std $A[0][0],`8*0`(r3) ; return A[5][5] + std $A[0][1],`8*1`(r3) + std $A[0][2],`8*2`(r3) + std $A[0][3],`8*3`(r3) + std $A[0][4],`8*4`(r3) + std $A[1][0],`8*5`(r3) + std $A[1][1],`8*6`(r3) + std $A[1][2],`8*7`(r3) + std $A[1][3],`8*8`(r3) + std $A[1][4],`8*9`(r3) + std $A[2][0],`8*10`(r3) + std $A[2][1],`8*11`(r3) + std $A[2][2],`8*12`(r3) + std $A[2][3],`8*13`(r3) + std $A[2][4],`8*14`(r3) + std $A[3][0],`8*15`(r3) + std $A[3][1],`8*16`(r3) + std $A[3][2],`8*17`(r3) + std $A[3][3],`8*18`(r3) + std $A[3][4],`8*19`(r3) + std $A[4][0],`8*20`(r3) + std $A[4][1],`8*21`(r3) + std $A[4][2],`8*22`(r3) + std $A[4][3],`8*23`(r3) + std $A[4][4],`8*24`(r3) + + mr r3,r4 ; return value + $POP r0,`$FRAME+$LRSAVE`($sp) + $POP r14,`$FRAME-$SIZE_T*18`($sp) + $POP r15,`$FRAME-$SIZE_T*17`($sp) + $POP r16,`$FRAME-$SIZE_T*16`($sp) + $POP r17,`$FRAME-$SIZE_T*15`($sp) + $POP r18,`$FRAME-$SIZE_T*14`($sp) + $POP r19,`$FRAME-$SIZE_T*13`($sp) + $POP r20,`$FRAME-$SIZE_T*12`($sp) + $POP r21,`$FRAME-$SIZE_T*11`($sp) + $POP r22,`$FRAME-$SIZE_T*10`($sp) + $POP r23,`$FRAME-$SIZE_T*9`($sp) + $POP r24,`$FRAME-$SIZE_T*8`($sp) + $POP r25,`$FRAME-$SIZE_T*7`($sp) + $POP r26,`$FRAME-$SIZE_T*6`($sp) + $POP r27,`$FRAME-$SIZE_T*5`($sp) + $POP r28,`$FRAME-$SIZE_T*4`($sp) + $POP r29,`$FRAME-$SIZE_T*3`($sp) + $POP r30,`$FRAME-$SIZE_T*2`($sp) + $POP r31,`$FRAME-$SIZE_T*1`($sp) + mtlr r0 + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,4,1,0x80,18,4,0 + .long 0 +.size SHA3_absorb,.-SHA3_absorb +___ +{ +my ($A_flat,$out,$len,$bsz) = map("r$_",(28..31)); +$code.=<<___; +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 5 +SHA3_squeeze: + $STU $sp,`-10*$SIZE_T`($sp) + mflr r0 + $PUSH r28,`6*$SIZE_T`($sp) + $PUSH r29,`7*$SIZE_T`($sp) + $PUSH r30,`8*$SIZE_T`($sp) + $PUSH r31,`9*$SIZE_T`($sp) + $PUSH r0,`10*$SIZE_T+$LRSAVE`($sp) + + mr $A_flat,r3 + subi r3,r3,8 ; prepare for ldu + subi $out,r4,1 ; prepare for stbu + mr $len,r5 + mr $bsz,r6 + b .Loop_squeeze + +.align 4 +.Loop_squeeze: + ldu r0,8(r3) + ${UCMP}i $len,8 + blt .Lsqueeze_tail + + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + srdi r0,r0,8 + stbu r0,1($out) + + subic. $len,$len,8 + beq .Lsqueeze_done + + subic. r6,r6,8 + bgt .Loop_squeeze + + mr r3,$A_flat + bl KeccakF1600 + subi r3,$A_flat,8 ; prepare for ldu + mr r6,$bsz + b .Loop_squeeze + +.align 4 +.Lsqueeze_tail: + mtctr $len +.Loop_tail: + stbu r0,1($out) + srdi r0,r0,8 + bdnz .Loop_tail + +.Lsqueeze_done: + $POP r0,`10*$SIZE_T+$LRSAVE`($sp) + $POP r28,`6*$SIZE_T`($sp) + $POP r29,`7*$SIZE_T`($sp) + $POP r30,`8*$SIZE_T`($sp) + $POP r31,`9*$SIZE_T`($sp) + mtlr r0 + addi $sp,$sp,`10*$SIZE_T` + blr + .long 0 + .byte 0,12,4,1,0x80,4,4,0 + .long 0 +.size SHA3_squeeze,.-SHA3_squeeze +___ +} + +# Ugly hack here, because PPC assembler syntax seem to vary too +# much from platforms to platform... +$code.=<<___; +.align 6 +PICmeup: + mflr r0 + bcl 20,31,\$+4 + mflr r12 ; vvvvvv "distance" between . and 1st data entry + addi r12,r12,`64-8` + mtlr r0 + blr + .long 0 + .byte 0,12,0x14,0,0,0,0,0 + .space `64-9*4` +.type iotas,\@object +iotas: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 +.size iotas,.-iotas +.asciz "Keccak-1600 absorb and squeeze for PPC64, CRYPTOGAMS by " +___ + +$code =~ s/\`([^\`]*)\`/eval $1/gem; +print $code; +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-s390x.pl b/crypto/sha/asm/keccak1600-s390x.pl new file mode 100755 index 00000000..4bd3619f --- /dev/null +++ b/crypto/sha/asm/keccak1600-s390x.pl @@ -0,0 +1,561 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for s390x. +# +# June 2017. +# +# Below code is [lane complementing] KECCAK_2X implementation (see +# sha/keccak1600.c) with C[5] and D[5] held in register bank. Though +# instead of actually unrolling the loop pair-wise I simply flip +# pointers to T[][] and A[][] at the end of round. Since number of +# rounds is even, last round writes to A[][] and everything works out. +# In the nutshell it's transliteration of x86_64 module, because both +# architectures have similar capabilities/limitations. Performance +# measurement is problematic as I don't have access to an idle system. +# It looks like z13 processes one byte [out of long message] in ~14 +# cycles. At least the result is consistent with estimate based on +# amount of instruction and assumed instruction issue rate. It's ~2.5x +# faster than compiler-generated code. + +$flavour = shift; + +if ($flavour =~ /3[12]/) { + $SIZE_T=4; + $g=""; +} else { + $SIZE_T=8; + $g="g"; +} + +while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} +open STDOUT,">$output"; + +my @A = map([ 8*$_, 8*($_+1), 8*($_+2), 8*($_+3), 8*($_+4) ], (0,5,10,15,20)); + +my @C = map("%r$_",(0,1,5..7)); +my @D = map("%r$_",(8..12)); +my @T = map("%r$_",(13..14)); +my ($src,$dst,$iotas) = map("%r$_",(2..4)); +my $sp = "%r15"; + +$stdframe=16*$SIZE_T+4*8; +$frame=$stdframe+25*8; + +my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 36, 44, 6, 55, 20 ], + [ 3, 10, 43, 25, 39 ], + [ 41, 45, 15, 21, 8 ], + [ 18, 2, 61, 56, 14 ]); + +{ my @C = @C; # copy, because we mess them up... + my @D = @D; + +$code.=<<___; +.text + +.type __KeccakF1600,\@function +.align 32 +__KeccakF1600: + st${g} %r14,$SIZE_T*14($sp) + lg @C[0],$A[4][0]($src) + lg @C[1],$A[4][1]($src) + lg @C[2],$A[4][2]($src) + lg @C[3],$A[4][3]($src) + lg @C[4],$A[4][4]($src) + larl $iotas,iotas + j .Loop + +.align 16 +.Loop: + lg @D[0],$A[0][0]($src) + lg @D[1],$A[1][1]($src) + lg @D[2],$A[2][2]($src) + lg @D[3],$A[3][3]($src) + + xgr @C[0],@D[0] + xg @C[1],$A[0][1]($src) + xg @C[2],$A[0][2]($src) + xg @C[3],$A[0][3]($src) + lgr @D[4],@C[4] + xg @C[4],$A[0][4]($src) + + xg @C[0],$A[1][0]($src) + xgr @C[1],@D[1] + xg @C[2],$A[1][2]($src) + xg @C[3],$A[1][3]($src) + xg @C[4],$A[1][4]($src) + + xg @C[0],$A[2][0]($src) + xg @C[1],$A[2][1]($src) + xgr @C[2],@D[2] + xg @C[3],$A[2][3]($src) + xg @C[4],$A[2][4]($src) + + xg @C[0],$A[3][0]($src) + xg @C[1],$A[3][1]($src) + xg @C[2],$A[3][2]($src) + xgr @C[3],@D[3] + xg @C[4],$A[3][4]($src) + + lgr @T[0],@C[2] + rllg @C[2],@C[2],1 + xgr @C[2],@C[0] # D[1] = ROL64(C[2], 1) ^ C[0] + + rllg @C[0],@C[0],1 + xgr @C[0],@C[3] # D[4] = ROL64(C[0], 1) ^ C[3] + + rllg @C[3],@C[3],1 + xgr @C[3],@C[1] # D[2] = ROL64(C[3], 1) ^ C[1] + + rllg @C[1],@C[1],1 + xgr @C[1],@C[4] # D[0] = ROL64(C[1], 1) ^ C[4] + + rllg @C[4],@C[4],1 + xgr @C[4],@T[0] # D[3] = ROL64(C[4], 1) ^ C[2] +___ + (@D[0..4], @C) = (@C[1..4,0], @D); +$code.=<<___; + xgr @C[1],@D[1] + xgr @C[2],@D[2] + xgr @C[3],@D[3] + rllg @C[1],@C[1],$rhotates[1][1] + xgr @C[4],@D[4] + rllg @C[2],@C[2],$rhotates[2][2] + xgr @C[0],@D[0] + + lgr @T[0],@C[1] + ogr @C[1],@C[2] + rllg @C[3],@C[3],$rhotates[3][3] + xgr @C[1],@C[0] # C[0] ^ ( C[1] | C[2]) + rllg @C[4],@C[4],$rhotates[4][4] + xg @C[1],0($iotas) + la $iotas,8($iotas) + stg @C[1],$A[0][0]($dst) # R[0][0] = C[0] ^ ( C[1] | C[2]) ^ iotas[i] + + lgr @T[1],@C[4] + ngr @C[4],@C[3] + lghi @C[1],-1 # no 'not' instruction :-( + xgr @C[4],@C[2] # C[2] ^ ( C[4] & C[3]) + xgr @C[2],@C[1] # not @C[2] + stg @C[4],$A[0][2]($dst) # R[0][2] = C[2] ^ ( C[4] & C[3]) + ogr @C[2],@C[3] + xgr @C[2],@T[0] # C[1] ^ (~C[2] | C[3]) + + ngr @T[0],@C[0] + stg @C[2],$A[0][1]($dst) # R[0][1] = C[1] ^ (~C[2] | C[3]) + xgr @T[0],@T[1] # C[4] ^ ( C[1] & C[0]) + ogr @T[1],@C[0] + stg @T[0],$A[0][4]($dst) # R[0][4] = C[4] ^ ( C[1] & C[0]) + xgr @T[1],@C[3] # C[3] ^ ( C[4] | C[0]) + stg @T[1],$A[0][3]($dst) # R[0][3] = C[3] ^ ( C[4] | C[0]) + + + lg @C[0],$A[0][3]($src) + lg @C[4],$A[4][2]($src) + lg @C[3],$A[3][1]($src) + lg @C[1],$A[1][4]($src) + lg @C[2],$A[2][0]($src) + + xgr @C[0],@D[3] + xgr @C[4],@D[2] + rllg @C[0],@C[0],$rhotates[0][3] + xgr @C[3],@D[1] + rllg @C[4],@C[4],$rhotates[4][2] + xgr @C[1],@D[4] + rllg @C[3],@C[3],$rhotates[3][1] + xgr @C[2],@D[0] + + lgr @T[0],@C[0] + ogr @C[0],@C[4] + rllg @C[1],@C[1],$rhotates[1][4] + xgr @C[0],@C[3] # C[3] ^ (C[0] | C[4]) + rllg @C[2],@C[2],$rhotates[2][0] + stg @C[0],$A[1][3]($dst) # R[1][3] = C[3] ^ (C[0] | C[4]) + + lgr @T[1],@C[1] + ngr @C[1],@T[0] + lghi @C[0],-1 # no 'not' instruction :-( + xgr @C[1],@C[4] # C[4] ^ (C[1] & C[0]) + xgr @C[4],@C[0] # not @C[4] + stg @C[1],$A[1][4]($dst) # R[1][4] = C[4] ^ (C[1] & C[0]) + + ogr @C[4],@C[3] + xgr @C[4],@C[2] # C[2] ^ (~C[4] | C[3]) + + ngr @C[3],@C[2] + stg @C[4],$A[1][2]($dst) # R[1][2] = C[2] ^ (~C[4] | C[3]) + xgr @C[3],@T[1] # C[1] ^ (C[3] & C[2]) + ogr @T[1],@C[2] + stg @C[3],$A[1][1]($dst) # R[1][1] = C[1] ^ (C[3] & C[2]) + xgr @T[1],@T[0] # C[0] ^ (C[1] | C[2]) + stg @T[1],$A[1][0]($dst) # R[1][0] = C[0] ^ (C[1] | C[2]) + + + lg @C[2],$A[2][3]($src) + lg @C[3],$A[3][4]($src) + lg @C[1],$A[1][2]($src) + lg @C[4],$A[4][0]($src) + lg @C[0],$A[0][1]($src) + + xgr @C[2],@D[3] + xgr @C[3],@D[4] + rllg @C[2],@C[2],$rhotates[2][3] + xgr @C[1],@D[2] + rllg @C[3],@C[3],$rhotates[3][4] + xgr @C[4],@D[0] + rllg @C[1],@C[1],$rhotates[1][2] + xgr @C[0],@D[1] + + lgr @T[0],@C[2] + ngr @C[2],@C[3] + rllg @C[4],@C[4],$rhotates[4][0] + xgr @C[2],@C[1] # C[1] ^ ( C[2] & C[3]) + lghi @T[1],-1 # no 'not' instruction :-( + stg @C[2],$A[2][1]($dst) # R[2][1] = C[1] ^ ( C[2] & C[3]) + + xgr @C[3],@T[1] # not @C[3] + lgr @T[1],@C[4] + ngr @C[4],@C[3] + rllg @C[0],@C[0],$rhotates[0][1] + xgr @C[4],@T[0] # C[2] ^ ( C[4] & ~C[3]) + ogr @T[0],@C[1] + stg @C[4],$A[2][2]($dst) # R[2][2] = C[2] ^ ( C[4] & ~C[3]) + xgr @T[0],@C[0] # C[0] ^ ( C[2] | C[1]) + + ngr @C[1],@C[0] + stg @T[0],$A[2][0]($dst) # R[2][0] = C[0] ^ ( C[2] | C[1]) + xgr @C[1],@T[1] # C[4] ^ ( C[1] & C[0]) + ogr @C[0],@T[1] + stg @C[1],$A[2][4]($dst) # R[2][4] = C[4] ^ ( C[1] & C[0]) + xgr @C[0],@C[3] # ~C[3] ^ ( C[0] | C[4]) + stg @C[0],$A[2][3]($dst) # R[2][3] = ~C[3] ^ ( C[0] | C[4]) + + + lg @C[2],$A[2][1]($src) + lg @C[3],$A[3][2]($src) + lg @C[1],$A[1][0]($src) + lg @C[4],$A[4][3]($src) + lg @C[0],$A[0][4]($src) + + xgr @C[2],@D[1] + xgr @C[3],@D[2] + rllg @C[2],@C[2],$rhotates[2][1] + xgr @C[1],@D[0] + rllg @C[3],@C[3],$rhotates[3][2] + xgr @C[4],@D[3] + rllg @C[1],@C[1],$rhotates[1][0] + xgr @C[0],@D[4] + rllg @C[4],@C[4],$rhotates[4][3] + + lgr @T[0],@C[2] + ogr @C[2],@C[3] + lghi @T[1],-1 # no 'not' instruction :-( + xgr @C[2],@C[1] # C[1] ^ ( C[2] | C[3]) + xgr @C[3],@T[1] # not @C[3] + stg @C[2],$A[3][1]($dst) # R[3][1] = C[1] ^ ( C[2] | C[3]) + + lgr @T[1],@C[4] + ogr @C[4],@C[3] + rllg @C[0],@C[0],$rhotates[0][4] + xgr @C[4],@T[0] # C[2] ^ ( C[4] | ~C[3]) + ngr @T[0],@C[1] + stg @C[4],$A[3][2]($dst) # R[3][2] = C[2] ^ ( C[4] | ~C[3]) + xgr @T[0],@C[0] # C[0] ^ ( C[2] & C[1]) + + ogr @C[1],@C[0] + stg @T[0],$A[3][0]($dst) # R[3][0] = C[0] ^ ( C[2] & C[1]) + xgr @C[1],@T[1] # C[4] ^ ( C[1] | C[0]) + ngr @C[0],@T[1] + stg @C[1],$A[3][4]($dst) # R[3][4] = C[4] ^ ( C[1] | C[0]) + xgr @C[0],@C[3] # ~C[3] ^ ( C[0] & C[4]) + stg @C[0],$A[3][3]($dst) # R[3][3] = ~C[3] ^ ( C[0] & C[4]) + + + xg @D[2],$A[0][2]($src) + xg @D[3],$A[1][3]($src) + xg @D[1],$A[4][1]($src) + xg @D[4],$A[2][4]($src) + xgr $dst,$src # xchg $dst,$src + rllg @D[2],@D[2],$rhotates[0][2] + xg @D[0],$A[3][0]($src) + rllg @D[3],@D[3],$rhotates[1][3] + xgr $src,$dst + rllg @D[1],@D[1],$rhotates[4][1] + xgr $dst,$src + rllg @D[4],@D[4],$rhotates[2][4] +___ + @C = @D[2..4,0,1]; +$code.=<<___; + lgr @T[0],@C[0] + ngr @C[0],@C[1] + lghi @T[1],-1 # no 'not' instruction :-( + xgr @C[0],@C[4] # C[4] ^ ( C[0] & C[1]) + xgr @C[1],@T[1] # not @C[1] + stg @C[0],$A[4][4]($src) # R[4][4] = C[4] ^ ( C[0] & C[1]) + + lgr @T[1],@C[2] + ngr @C[2],@C[1] + rllg @D[0],@D[0],$rhotates[3][0] + xgr @C[2],@T[0] # C[0] ^ ( C[2] & ~C[1]) + ogr @T[0],@C[4] + stg @C[2],$A[4][0]($src) # R[4][0] = C[0] ^ ( C[2] & ~C[1]) + xgr @T[0],@C[3] # C[3] ^ ( C[0] | C[4]) + + ngr @C[4],@C[3] + stg @T[0],$A[4][3]($src) # R[4][3] = C[3] ^ ( C[0] | C[4]) + xgr @C[4],@T[1] # C[2] ^ ( C[4] & C[3]) + ogr @C[3],@T[1] + stg @C[4],$A[4][2]($src) # R[4][2] = C[2] ^ ( C[4] & C[3]) + xgr @C[3],@C[1] # ~C[1] ^ ( C[2] | C[3]) + + lgr @C[1],@C[0] # harmonize with the loop top + lgr @C[0],@T[0] + stg @C[3],$A[4][1]($src) # R[4][1] = ~C[1] ^ ( C[2] | C[3]) + + tmll $iotas,255 + jnz .Loop + + l${g} %r14,$SIZE_T*14($sp) + br %r14 +.size __KeccakF1600,.-__KeccakF1600 +___ +} +{ +$code.=<<___; +.globl KeccakF1600 +.type KeccakF1600,\@function +.align 32 +KeccakF1600: +.LKeccakF1600: + lghi %r1,-$frame + stm${g} %r6,%r15,$SIZE_T*6($sp) + lgr %r0,$sp + la $sp,0(%r1,$sp) + st${g} %r0,0($sp) + + lghi @D[0],-1 # no 'not' instruction :-( + lghi @D[1],-1 + lghi @D[2],-1 + lghi @D[3],-1 + lghi @D[4],-1 + lghi @T[0],-1 + xg @D[0],$A[0][1]($src) + xg @D[1],$A[0][2]($src) + xg @D[2],$A[1][3]($src) + xg @D[3],$A[2][2]($src) + xg @D[4],$A[3][2]($src) + xg @T[0],$A[4][0]($src) + stmg @D[0],@D[1],$A[0][1]($src) + stg @D[2],$A[1][3]($src) + stg @D[3],$A[2][2]($src) + stg @D[4],$A[3][2]($src) + stg @T[0],$A[4][0]($src) + + la $dst,$stdframe($sp) + + bras %r14,__KeccakF1600 + + lghi @D[0],-1 # no 'not' instruction :-( + lghi @D[1],-1 + lghi @D[2],-1 + lghi @D[3],-1 + lghi @D[4],-1 + lghi @T[0],-1 + xg @D[0],$A[0][1]($src) + xg @D[1],$A[0][2]($src) + xg @D[2],$A[1][3]($src) + xg @D[3],$A[2][2]($src) + xg @D[4],$A[3][2]($src) + xg @T[0],$A[4][0]($src) + stmg @D[0],@D[1],$A[0][1]($src) + stg @D[2],$A[1][3]($src) + stg @D[3],$A[2][2]($src) + stg @D[4],$A[3][2]($src) + stg @T[0],$A[4][0]($src) + + lm${g} %r6,%r15,$frame+6*$SIZE_T($sp) + br %r14 +.size KeccakF1600,.-KeccakF1600 +___ +} +{ my ($A_flat,$inp,$len,$bsz) = map("%r$_",(2..5)); + +$code.=<<___; +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 32 +SHA3_absorb: + lghi %r1,-$frame + stm${g} %r5,%r15,$SIZE_T*5($sp) + lgr %r0,$sp + la $sp,0(%r1,$sp) + st${g} %r0,0($sp) + + lghi @D[0],-1 # no 'not' instruction :-( + lghi @D[1],-1 + lghi @D[2],-1 + lghi @D[3],-1 + lghi @D[4],-1 + lghi @T[0],-1 + xg @D[0],$A[0][1]($src) + xg @D[1],$A[0][2]($src) + xg @D[2],$A[1][3]($src) + xg @D[3],$A[2][2]($src) + xg @D[4],$A[3][2]($src) + xg @T[0],$A[4][0]($src) + stmg @D[0],@D[1],$A[0][1]($src) + stg @D[2],$A[1][3]($src) + stg @D[3],$A[2][2]($src) + stg @D[4],$A[3][2]($src) + stg @T[0],$A[4][0]($src) + +.Loop_absorb: + cl${g}r $len,$bsz + jl .Ldone_absorb + + srl${g} $bsz,3 + la %r1,0($A_flat) + +.Lblock_absorb: + lrvg %r0,0($inp) + la $inp,8($inp) + xg %r0,0(%r1) + la %r1,8(%r1) + a${g}hi $len,-8 + stg %r0,-8(%r1) + brct $bsz,.Lblock_absorb + + stm${g} $inp,$len,$frame+3*$SIZE_T($sp) + la $dst,$stdframe($sp) + bras %r14,__KeccakF1600 + lm${g} $inp,$bsz,$frame+3*$SIZE_T($sp) + j .Loop_absorb + +.align 16 +.Ldone_absorb: + lghi @D[0],-1 # no 'not' instruction :-( + lghi @D[1],-1 + lghi @D[2],-1 + lghi @D[3],-1 + lghi @D[4],-1 + lghi @T[0],-1 + xg @D[0],$A[0][1]($src) + xg @D[1],$A[0][2]($src) + xg @D[2],$A[1][3]($src) + xg @D[3],$A[2][2]($src) + xg @D[4],$A[3][2]($src) + xg @T[0],$A[4][0]($src) + stmg @D[0],@D[1],$A[0][1]($src) + stg @D[2],$A[1][3]($src) + stg @D[3],$A[2][2]($src) + stg @D[4],$A[3][2]($src) + stg @T[0],$A[4][0]($src) + + lgr %r2,$len # return value + + lm${g} %r6,%r15,$frame+6*$SIZE_T($sp) + br %r14 +.size SHA3_absorb,.-SHA3_absorb +___ +} +{ my ($A_flat,$out,$len,$bsz) = map("%r$_",(2..5)); + +$code.=<<___; +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 32 +SHA3_squeeze: + srl${g} $bsz,3 + st${g} %r14,2*$SIZE_T($sp) + lghi %r14,8 + st${g} $bsz,5*$SIZE_T($sp) + la %r1,0($A_flat) + + j .Loop_squeeze + +.align 16 +.Loop_squeeze: + cl${g}r $len,%r14 + jl .Ltail_squeeze + + lrvg %r0,0(%r1) + la %r1,8(%r1) + stg %r0,0($out) + la $out,8($out) + a${g}hi $len,-8 # len -= 8 + jz .Ldone_squeeze + + brct $bsz,.Loop_squeeze # bsz-- + + stm${g} $out,$len,3*$SIZE_T($sp) + bras %r14,.LKeccakF1600 + lm${g} $out,$bsz,3*$SIZE_T($sp) + lghi %r14,8 + la %r1,0($A_flat) + j .Loop_squeeze + +.Ltail_squeeze: + lg %r0,0(%r1) +.Loop_tail_squeeze: + stc %r0,0($out) + la $out,1($out) + srlg %r0,8 + brct $len,.Loop_tail_squeeze + +.Ldone_squeeze: + l${g} %r14,2*$SIZE_T($sp) + br %r14 +.size SHA3_squeeze,.-SHA3_squeeze +___ +} +$code.=<<___; +.align 256 + .quad 0,0,0,0,0,0,0,0 +.type iotas,\@object +iotas: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 +.size iotas,.-iotas +.asciz "Keccak-1600 absorb and squeeze for s390x, CRYPTOGAMS by " +___ + +# unlike 32-bit shift 64-bit one takes three arguments +$code =~ s/(srlg\s+)(%r[0-9]+),/$1$2,$2,/gm; + +print $code; +close STDOUT; diff --git a/crypto/sha/asm/keccak1600-x86_64.pl b/crypto/sha/asm/keccak1600-x86_64.pl new file mode 100755 index 00000000..94c9c10f --- /dev/null +++ b/crypto/sha/asm/keccak1600-x86_64.pl @@ -0,0 +1,608 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for x86_64. +# +# June 2017. +# +# Below code is [lane complementing] KECCAK_2X implementation (see +# sha/keccak1600.c) with C[5] and D[5] held in register bank. Though +# instead of actually unrolling the loop pair-wise I simply flip +# pointers to T[][] and A[][] at the end of round. Since number of +# rounds is even, last round writes to A[][] and everything works out. +# How does it compare to x86_64 assembly module in Keccak Code Package? +# Depending on processor it's either as fast or faster by up to 15%... +# +######################################################################## +# Numbers are cycles per processed byte out of large message. +# +# r=1088(*) +# +# P4 25.8 +# Core 2 12.9 +# Westmere 13.7 +# Sandy Bridge 12.9(**) +# Haswell 9.6 +# Skylake 9.4 +# Silvermont 22.8 +# Goldmont 15.8 +# VIA Nano 17.3 +# Sledgehammer 13.3 +# Bulldozer 16.5 +# Ryzen 8.8 +# +# (*) Corresponds to SHA3-256. Improvement over compiler-generate +# varies a lot, most commont coefficient is 15% in comparison to +# gcc-5.x, 50% for gcc-4.x, 90% for gcc-3.x. +# (**) Sandy Bridge has broken rotate instruction. Performance can be +# improved by 14% by replacing rotates with double-precision +# shift with same register as source and destination. + +$flavour = shift; +$output = shift; +if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } + +$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or +die "can't locate x86_64-xlate.pl"; + +open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\""; +*STDOUT=*OUT; + +my @A = map([ 8*$_-100, 8*($_+1)-100, 8*($_+2)-100, + 8*($_+3)-100, 8*($_+4)-100 ], (0,5,10,15,20)); + +my @C = ("%rax","%rbx","%rcx","%rdx","%rbp"); +my @D = map("%r$_",(8..12)); +my @T = map("%r$_",(13..14)); +my $iotas = "%r15"; + +my @rhotates = ([ 0, 1, 62, 28, 27 ], + [ 36, 44, 6, 55, 20 ], + [ 3, 10, 43, 25, 39 ], + [ 41, 45, 15, 21, 8 ], + [ 18, 2, 61, 56, 14 ]); + +$code.=<<___; +.text + +.type __KeccakF1600,\@function +.align 32 +__KeccakF1600: + mov $A[4][0](%rdi),@C[0] + mov $A[4][1](%rdi),@C[1] + mov $A[4][2](%rdi),@C[2] + mov $A[4][3](%rdi),@C[3] + mov $A[4][4](%rdi),@C[4] + jmp .Loop + +.align 32 +.Loop: + mov $A[0][0](%rdi),@D[0] + mov $A[1][1](%rdi),@D[1] + mov $A[2][2](%rdi),@D[2] + mov $A[3][3](%rdi),@D[3] + + xor $A[0][2](%rdi),@C[2] + xor $A[0][3](%rdi),@C[3] + xor @D[0], @C[0] + xor $A[0][1](%rdi),@C[1] + xor $A[1][2](%rdi),@C[2] + xor $A[1][0](%rdi),@C[0] + mov @C[4],@D[4] + xor $A[0][4](%rdi),@C[4] + + xor @D[2], @C[2] + xor $A[2][0](%rdi),@C[0] + xor $A[1][3](%rdi),@C[3] + xor @D[1], @C[1] + xor $A[1][4](%rdi),@C[4] + + xor $A[3][2](%rdi),@C[2] + xor $A[3][0](%rdi),@C[0] + xor $A[2][3](%rdi),@C[3] + xor $A[2][1](%rdi),@C[1] + xor $A[2][4](%rdi),@C[4] + + mov @C[2],@T[0] + rol \$1,@C[2] + xor @C[0],@C[2] # D[1] = ROL64(C[2], 1) ^ C[0] + xor @D[3], @C[3] + + rol \$1,@C[0] + xor @C[3],@C[0] # D[4] = ROL64(C[0], 1) ^ C[3] + xor $A[3][1](%rdi),@C[1] + + rol \$1,@C[3] + xor @C[1],@C[3] # D[2] = ROL64(C[3], 1) ^ C[1] + xor $A[3][4](%rdi),@C[4] + + rol \$1,@C[1] + xor @C[4],@C[1] # D[0] = ROL64(C[1], 1) ^ C[4] + + rol \$1,@C[4] + xor @T[0],@C[4] # D[3] = ROL64(C[4], 1) ^ C[2] +___ + (@D[0..4], @C) = (@C[1..4,0], @D); +$code.=<<___; + xor @D[1],@C[1] + xor @D[2],@C[2] + rol \$$rhotates[1][1],@C[1] + xor @D[3],@C[3] + xor @D[4],@C[4] + rol \$$rhotates[2][2],@C[2] + xor @D[0],@C[0] + mov @C[1],@T[0] + rol \$$rhotates[3][3],@C[3] + or @C[2],@C[1] + xor @C[0],@C[1] # C[0] ^ ( C[1] | C[2]) + rol \$$rhotates[4][4],@C[4] + + xor ($iotas),@C[1] + lea 8($iotas),$iotas + + mov @C[4],@T[1] + and @C[3],@C[4] + mov @C[1],$A[0][0](%rsi) # R[0][0] = C[0] ^ ( C[1] | C[2]) ^ iotas[i] + xor @C[2],@C[4] # C[2] ^ ( C[4] & C[3]) + not @C[2] + mov @C[4],$A[0][2](%rsi) # R[0][2] = C[2] ^ ( C[4] & C[3]) + + or @C[3],@C[2] + mov $A[4][2](%rdi),@C[4] + xor @T[0],@C[2] # C[1] ^ (~C[2] | C[3]) + mov @C[2],$A[0][1](%rsi) # R[0][1] = C[1] ^ (~C[2] | C[3]) + + and @C[0],@T[0] + mov $A[1][4](%rdi),@C[1] + xor @T[1],@T[0] # C[4] ^ ( C[1] & C[0]) + mov $A[2][0](%rdi),@C[2] + mov @T[0],$A[0][4](%rsi) # R[0][4] = C[4] ^ ( C[1] & C[0]) + + or @C[0],@T[1] + mov $A[0][3](%rdi),@C[0] + xor @C[3],@T[1] # C[3] ^ ( C[4] | C[0]) + mov $A[3][1](%rdi),@C[3] + mov @T[1],$A[0][3](%rsi) # R[0][3] = C[3] ^ ( C[4] | C[0]) + + + xor @D[3],@C[0] + xor @D[2],@C[4] + rol \$$rhotates[0][3],@C[0] + xor @D[1],@C[3] + xor @D[4],@C[1] + rol \$$rhotates[4][2],@C[4] + rol \$$rhotates[3][1],@C[3] + xor @D[0],@C[2] + rol \$$rhotates[1][4],@C[1] + mov @C[0],@T[0] + or @C[4],@C[0] + rol \$$rhotates[2][0],@C[2] + + xor @C[3],@C[0] # C[3] ^ (C[0] | C[4]) + mov @C[0],$A[1][3](%rsi) # R[1][3] = C[3] ^ (C[0] | C[4]) + + mov @C[1],@T[1] + and @T[0],@C[1] + mov $A[0][1](%rdi),@C[0] + xor @C[4],@C[1] # C[4] ^ (C[1] & C[0]) + not @C[4] + mov @C[1],$A[1][4](%rsi) # R[1][4] = C[4] ^ (C[1] & C[0]) + + or @C[3],@C[4] + mov $A[1][2](%rdi),@C[1] + xor @C[2],@C[4] # C[2] ^ (~C[4] | C[3]) + mov @C[4],$A[1][2](%rsi) # R[1][2] = C[2] ^ (~C[4] | C[3]) + + and @C[2],@C[3] + mov $A[4][0](%rdi),@C[4] + xor @T[1],@C[3] # C[1] ^ (C[3] & C[2]) + mov @C[3],$A[1][1](%rsi) # R[1][1] = C[1] ^ (C[3] & C[2]) + + or @C[2],@T[1] + mov $A[2][3](%rdi),@C[2] + xor @T[0],@T[1] # C[0] ^ (C[1] | C[2]) + mov $A[3][4](%rdi),@C[3] + mov @T[1],$A[1][0](%rsi) # R[1][0] = C[0] ^ (C[1] | C[2]) + + + xor @D[3],@C[2] + xor @D[4],@C[3] + rol \$$rhotates[2][3],@C[2] + xor @D[2],@C[1] + rol \$$rhotates[3][4],@C[3] + xor @D[0],@C[4] + rol \$$rhotates[1][2],@C[1] + xor @D[1],@C[0] + rol \$$rhotates[4][0],@C[4] + mov @C[2],@T[0] + and @C[3],@C[2] + rol \$$rhotates[0][1],@C[0] + + not @C[3] + xor @C[1],@C[2] # C[1] ^ ( C[2] & C[3]) + mov @C[2],$A[2][1](%rsi) # R[2][1] = C[1] ^ ( C[2] & C[3]) + + mov @C[4],@T[1] + and @C[3],@C[4] + mov $A[2][1](%rdi),@C[2] + xor @T[0],@C[4] # C[2] ^ ( C[4] & ~C[3]) + mov @C[4],$A[2][2](%rsi) # R[2][2] = C[2] ^ ( C[4] & ~C[3]) + + or @C[1],@T[0] + mov $A[4][3](%rdi),@C[4] + xor @C[0],@T[0] # C[0] ^ ( C[2] | C[1]) + mov @T[0],$A[2][0](%rsi) # R[2][0] = C[0] ^ ( C[2] | C[1]) + + and @C[0],@C[1] + xor @T[1],@C[1] # C[4] ^ ( C[1] & C[0]) + mov @C[1],$A[2][4](%rsi) # R[2][4] = C[4] ^ ( C[1] & C[0]) + + or @C[0],@T[1] + mov $A[1][0](%rdi),@C[1] + xor @C[3],@T[1] # ~C[3] ^ ( C[0] | C[4]) + mov $A[3][2](%rdi),@C[3] + mov @T[1],$A[2][3](%rsi) # R[2][3] = ~C[3] ^ ( C[0] | C[4]) + + + mov $A[0][4](%rdi),@C[0] + + xor @D[1],@C[2] + xor @D[2],@C[3] + rol \$$rhotates[2][1],@C[2] + xor @D[0],@C[1] + rol \$$rhotates[3][2],@C[3] + xor @D[3],@C[4] + rol \$$rhotates[1][0],@C[1] + xor @D[4],@C[0] + rol \$$rhotates[4][3],@C[4] + mov @C[2],@T[0] + or @C[3],@C[2] + rol \$$rhotates[0][4],@C[0] + + not @C[3] + xor @C[1],@C[2] # C[1] ^ ( C[2] | C[3]) + mov @C[2],$A[3][1](%rsi) # R[3][1] = C[1] ^ ( C[2] | C[3]) + + mov @C[4],@T[1] + or @C[3],@C[4] + xor @T[0],@C[4] # C[2] ^ ( C[4] | ~C[3]) + mov @C[4],$A[3][2](%rsi) # R[3][2] = C[2] ^ ( C[4] | ~C[3]) + + and @C[1],@T[0] + xor @C[0],@T[0] # C[0] ^ ( C[2] & C[1]) + mov @T[0],$A[3][0](%rsi) # R[3][0] = C[0] ^ ( C[2] & C[1]) + + or @C[0],@C[1] + xor @T[1],@C[1] # C[4] ^ ( C[1] | C[0]) + mov @C[1],$A[3][4](%rsi) # R[3][4] = C[4] ^ ( C[1] | C[0]) + + and @T[1],@C[0] + xor @C[3],@C[0] # ~C[3] ^ ( C[0] & C[4]) + mov @C[0],$A[3][3](%rsi) # R[3][3] = ~C[3] ^ ( C[0] & C[4]) + + + xor $A[0][2](%rdi),@D[2] + xor $A[1][3](%rdi),@D[3] + rol \$$rhotates[0][2],@D[2] + xor $A[4][1](%rdi),@D[1] + rol \$$rhotates[1][3],@D[3] + xor $A[2][4](%rdi),@D[4] + rol \$$rhotates[4][1],@D[1] + xor $A[3][0](%rdi),@D[0] + xchg %rsi,%rdi + rol \$$rhotates[2][4],@D[4] + rol \$$rhotates[3][0],@D[0] +___ + @C = @D[2..4,0,1]; +$code.=<<___; + mov @C[0],@T[0] + and @C[1],@C[0] + not @C[1] + xor @C[4],@C[0] # C[4] ^ ( C[0] & C[1]) + mov @C[0],$A[4][4](%rdi) # R[4][4] = C[4] ^ ( C[0] & C[1]) + + mov @C[2],@T[1] + and @C[1],@C[2] + xor @T[0],@C[2] # C[0] ^ ( C[2] & ~C[1]) + mov @C[2],$A[4][0](%rdi) # R[4][0] = C[0] ^ ( C[2] & ~C[1]) + + or @C[4],@T[0] + xor @C[3],@T[0] # C[3] ^ ( C[0] | C[4]) + mov @T[0],$A[4][3](%rdi) # R[4][3] = C[3] ^ ( C[0] | C[4]) + + and @C[3],@C[4] + xor @T[1],@C[4] # C[2] ^ ( C[4] & C[3]) + mov @C[4],$A[4][2](%rdi) # R[4][2] = C[2] ^ ( C[4] & C[3]) + + or @T[1],@C[3] + xor @C[1],@C[3] # ~C[1] ^ ( C[2] | C[3]) + mov @C[3],$A[4][1](%rdi) # R[4][1] = ~C[1] ^ ( C[2] | C[3]) + + mov @C[0],@C[1] # harmonize with the loop top + mov @T[0],@C[0] + + test \$255,$iotas + jnz .Loop + + lea -192($iotas),$iotas # rewind iotas + ret +.size __KeccakF1600,.-__KeccakF1600 + +.globl KeccakF1600 +.type KeccakF1600,\@function +.align 32 +KeccakF1600: +.cfi_startproc + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + + lea 100(%rdi),%rdi # size optimization + sub \$200,%rsp +.cfi_adjust_cfa_offset 200 + + notq $A[0][1](%rdi) + notq $A[0][2](%rdi) + notq $A[1][3](%rdi) + notq $A[2][2](%rdi) + notq $A[3][2](%rdi) + notq $A[4][0](%rdi) + + lea iotas(%rip),$iotas + lea 100(%rsp),%rsi # size optimization + + call __KeccakF1600 + + notq $A[0][1](%rdi) + notq $A[0][2](%rdi) + notq $A[1][3](%rdi) + notq $A[2][2](%rdi) + notq $A[3][2](%rdi) + notq $A[4][0](%rdi) + lea -100(%rdi),%rdi # preserve A[][] + + add \$200,%rsp +.cfi_adjust_cfa_offset -200 + + pop %r15 +.cfi_pop %r15 + pop %r14 +.cfi_pop %r14 + pop %r13 +.cfi_pop %r13 + pop %r12 +.cfi_pop %r12 + pop %rbp +.cfi_pop %rbp + pop %rbx +.cfi_pop %rbx + ret +.cfi_endproc +.size KeccakF1600,.-KeccakF1600 +___ + +{ my ($A_flat,$inp,$len,$bsz) = ("%rdi","%rsi","%rdx","%rcx"); + ($A_flat,$inp) = ("%r8","%r9"); +$code.=<<___; +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 32 +SHA3_absorb: +.cfi_startproc + push %rbx +.cfi_push %rbx + push %rbp +.cfi_push %rbp + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + push %r15 +.cfi_push %r15 + + lea 100(%rdi),%rdi # size optimization + sub \$232,%rsp +.cfi_adjust_cfa_offset 232 + + mov %rsi,$inp + lea 100(%rsp),%rsi # size optimization + + notq $A[0][1](%rdi) + notq $A[0][2](%rdi) + notq $A[1][3](%rdi) + notq $A[2][2](%rdi) + notq $A[3][2](%rdi) + notq $A[4][0](%rdi) + lea iotas(%rip),$iotas + + mov $bsz,216-100(%rsi) # save bsz + +.Loop_absorb: + cmp $bsz,$len + jc .Ldone_absorb + + shr \$3,$bsz + lea -100(%rdi),$A_flat + +.Lblock_absorb: + mov ($inp),%rax + lea 8($inp),$inp + xor ($A_flat),%rax + lea 8($A_flat),$A_flat + sub \$8,$len + mov %rax,-8($A_flat) + sub \$1,$bsz + jnz .Lblock_absorb + + mov $inp,200-100(%rsi) # save inp + mov $len,208-100(%rsi) # save len + call __KeccakF1600 + mov 200-100(%rsi),$inp # pull inp + mov 208-100(%rsi),$len # pull len + mov 216-100(%rsi),$bsz # pull bsz + jmp .Loop_absorb + +.align 32 +.Ldone_absorb: + mov $len,%rax # return value + + notq $A[0][1](%rdi) + notq $A[0][2](%rdi) + notq $A[1][3](%rdi) + notq $A[2][2](%rdi) + notq $A[3][2](%rdi) + notq $A[4][0](%rdi) + + add \$232,%rsp +.cfi_adjust_cfa_offset -232 + + pop %r15 +.cfi_pop %r15 + pop %r14 +.cfi_pop %r14 + pop %r13 +.cfi_pop %r13 + pop %r12 +.cfi_pop %r12 + pop %rbp +.cfi_pop %rbp + pop %rbx +.cfi_pop %rbx + ret +.cfi_endproc +.size SHA3_absorb,.-SHA3_absorb +___ +} +{ my ($A_flat,$out,$len,$bsz) = ("%rdi","%rsi","%rdx","%rcx"); + ($out,$len,$bsz) = ("%r12","%r13","%r14"); + +$code.=<<___; +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 32 +SHA3_squeeze: +.cfi_startproc + push %r12 +.cfi_push %r12 + push %r13 +.cfi_push %r13 + push %r14 +.cfi_push %r14 + + shr \$3,%rcx + mov $A_flat,%r8 + mov %rsi,$out + mov %rdx,$len + mov %rcx,$bsz + jmp .Loop_squeeze + +.align 32 +.Loop_squeeze: + cmp \$8,$len + jb .Ltail_squeeze + + mov (%r8),%rax + lea 8(%r8),%r8 + mov %rax,($out) + lea 8($out),$out + sub \$8,$len # len -= 8 + jz .Ldone_squeeze + + sub \$1,%rcx # bsz-- + jnz .Loop_squeeze + + call KeccakF1600 + mov $A_flat,%r8 + mov $bsz,%rcx + jmp .Loop_squeeze + +.Ltail_squeeze: + mov %r8, %rsi + mov $out,%rdi + mov $len,%rcx + .byte 0xf3,0xa4 # rep movsb + +.Ldone_squeeze: + pop %r14 +.cfi_pop %r14 + pop %r13 +.cfi_pop %r13 + pop %r12 +.cfi_pop %r13 + ret +.cfi_endproc +.size SHA3_squeeze,.-SHA3_squeeze +___ +} +$code.=<<___; +.align 256 + .quad 0,0,0,0,0,0,0,0 +.type iotas,\@object +iotas: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 +.size iotas,.-iotas +.asciz "Keccak-1600 absorb and squeeze for x86_64, CRYPTOGAMS by " +___ + +foreach (split("\n",$code)) { + # Below replacement results in 11.2 on Sandy Bridge, 9.4 on + # Haswell, but it hurts other processors by up to 2-3-4x... + #s/rol\s+(\$[0-9]+),(%[a-z][a-z0-9]+)/shld\t$1,$2,$2/; + # Below replacement results in 9.3 on Haswell [as well as + # on Ryzen, i.e. it *hurts* Ryzen]... + #s/rol\s+\$([0-9]+),(%[a-z][a-z0-9]+)/rorx\t\$64-$1,$2,$2/; + + print $_, "\n"; +} + +close STDOUT; diff --git a/crypto/sha/asm/keccak1600p8-ppc.pl b/crypto/sha/asm/keccak1600p8-ppc.pl new file mode 100755 index 00000000..feec6883 --- /dev/null +++ b/crypto/sha/asm/keccak1600p8-ppc.pl @@ -0,0 +1,850 @@ +#!/usr/bin/env perl +# 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 +# +# ==================================================================== +# Written by Andy Polyakov for the OpenSSL +# project. The module is, however, dual licensed under OpenSSL and +# CRYPTOGAMS licenses depending on where you obtain it. For further +# details see http://www.openssl.org/~appro/cryptogams/. +# ==================================================================== +# +# Keccak-1600 for PowerISA 2.07. +# +# June 2017. +# +# This is straightforward KECCAK_1X_ALT SIMD implementation, but with +# disjoint Rho and Pi. The module is ABI-bitness- and endian-neutral. +# POWER8 processor spends 9.8 cycles to process byte out of large +# buffer for r=1088, which matches SHA3-256. This is 17% better than +# scalar PPC64 code. It probably should be noted that if POWER8's +# successor can achieve higher scalar instruction issue rate, then +# this module will loose... + +$flavour = shift; + +if ($flavour =~ /64/) { + $SIZE_T =8; + $LRSAVE =2*$SIZE_T; + $UCMP ="cmpld"; + $STU ="stdu"; + $POP ="ld"; + $PUSH ="std"; +} elsif ($flavour =~ /32/) { + $SIZE_T =4; + $LRSAVE =$SIZE_T; + $STU ="stwu"; + $POP ="lwz"; + $PUSH ="stw"; + $UCMP ="cmplw"; +} else { die "nonsense $flavour"; } + +$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; +( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or +( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or +die "can't locate ppc-xlate.pl"; + +open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!"; + +$FRAME=6*$SIZE_T+13*16; # 13*16 is for v20-v31 offload + +my $sp ="r1"; + +my $iotas = "r12"; + +######################################################################## +# Register layout: +# +# v0 A[0][0] A[1][0] +# v1 A[0][1] A[1][1] +# v2 A[0][2] A[1][2] +# v3 A[0][3] A[1][3] +# v4 A[0][4] A[1][4] +# +# v5 A[2][0] A[3][0] +# v6 A[2][1] A[3][1] +# v7 A[2][2] A[3][2] +# v8 A[2][3] A[3][3] +# v9 A[2][4] A[3][4] +# +# v10 A[4][0] A[4][1] +# v11 A[4][2] A[4][3] +# v12 A[4][4] A[4][4] +# +# v13..25 rhotates[][] +# v26..31 volatile +# +$code.=<<___; +.machine "any" +.text + +.type KeccakF1600_int,\@function +.align 5 +KeccakF1600_int: + li r0,24 + mtctr r0 + li r0,0 + b .Loop + +.align 4 +.Loop: + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Theta + vxor v26,v0, v5 ; A[0..1][0]^A[2..3][0] + vxor v27,v1, v6 ; A[0..1][1]^A[2..3][1] + vxor v28,v2, v7 ; A[0..1][2]^A[2..3][2] + vxor v29,v3, v8 ; A[0..1][3]^A[2..3][3] + vxor v30,v4, v9 ; A[0..1][4]^A[2..3][4] + vpermdi v31,v26,v27,0b00 ; A[0][0..1]^A[2][0..1] + vpermdi v26,v26,v27,0b11 ; A[1][0..1]^A[3][0..1] + vpermdi v27,v28,v29,0b00 ; A[0][2..3]^A[2][2..3] + vpermdi v28,v28,v29,0b11 ; A[1][2..3]^A[3][2..3] + vpermdi v29,v30,v30,0b10 ; A[1..0][4]^A[3..2][4] + vxor v26,v26,v31 ; C[0..1] + vxor v27,v27,v28 ; C[2..3] + vxor v28,v29,v30 ; C[4..4] + vspltisb v31,1 + vxor v26,v26,v10 ; C[0..1] ^= A[4][0..1] + vxor v27,v27,v11 ; C[2..3] ^= A[4][2..3] + vxor v28,v28,v12 ; C[4..4] ^= A[4][4..4], low! + + vrld v29,v26,v31 ; ROL64(C[0..1],1) + vrld v30,v27,v31 ; ROL64(C[2..3],1) + vrld v31,v28,v31 ; ROL64(C[4..4],1) + vpermdi v31,v31,v29,0b10 + vxor v26,v26,v30 ; C[0..1] ^= ROL64(C[2..3],1) + vxor v27,v27,v31 ; C[2..3] ^= ROL64(C[4..0],1) + vxor v28,v28,v29 ; C[4..4] ^= ROL64(C[0..1],1), low! + + vpermdi v29,v26,v26,0b00 ; C[0..0] + vpermdi v30,v28,v26,0b10 ; C[4..0] + vpermdi v31,v28,v28,0b11 ; C[4..4] + vxor v1, v1, v29 ; A[0..1][1] ^= C[0..0] + vxor v6, v6, v29 ; A[2..3][1] ^= C[0..0] + vxor v10,v10,v30 ; A[4][0..1] ^= C[4..0] + vxor v0, v0, v31 ; A[0..1][0] ^= C[4..4] + vxor v5, v5, v31 ; A[2..3][0] ^= C[4..4] + + vpermdi v29,v27,v27,0b00 ; C[2..2] + vpermdi v30,v26,v26,0b11 ; C[1..1] + vpermdi v31,v26,v27,0b10 ; C[1..2] + vxor v3, v3, v29 ; A[0..1][3] ^= C[2..2] + vxor v8, v8, v29 ; A[2..3][3] ^= C[2..2] + vxor v2, v2, v30 ; A[0..1][2] ^= C[1..1] + vxor v7, v7, v30 ; A[2..3][2] ^= C[1..1] + vxor v11,v11,v31 ; A[4][2..3] ^= C[1..2] + + vpermdi v29,v27,v27,0b11 ; C[3..3] + vxor v4, v4, v29 ; A[0..1][4] ^= C[3..3] + vxor v9, v9, v29 ; A[2..3][4] ^= C[3..3] + vxor v12,v12,v29 ; A[4..4][4] ^= C[3..3] + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rho + vrld v26,v0, v13 ; v0 + vrld v1, v1, v14 + vrld v27,v2, v15 ; v2 + vrld v28,v3, v16 ; v3 + vrld v4, v4, v17 + vrld v5, v5, v18 + vrld v6, v6, v19 + vrld v29,v7, v20 ; v7 + vrld v8, v8, v21 + vrld v9, v9, v22 + vrld v10,v10,v23 + vrld v30,v11,v24 ; v11 + vrld v12,v12,v25 + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pi + vpermdi v0, v26,v28,0b00 ; [0][0] [1][0] < [0][0] [0][3] + vpermdi v2, v29,v5, 0b00 ; [0][2] [1][2] < [2][2] [2][0] + vpermdi v11,v9, v5, 0b01 ; [4][2] [4][3] < [2][4] [3][0] + vpermdi v5, v1, v4, 0b00 ; [2][0] [3][0] < [0][1] [0][4] + vpermdi v1, v1, v4, 0b11 ; [0][1] [1][1] < [1][1] [1][4] + vpermdi v3, v8, v6, 0b11 ; [0][3] [1][3] < [3][3] [3][1] + vpermdi v4, v12,v30,0b10 ; [0][4] [1][4] < [4][4] [4][2] + vpermdi v7, v8, v6, 0b00 ; [2][2] [3][2] < [2][3] [2][1] + vpermdi v6, v27,v26,0b11 ; [2][1] [3][1] < [1][2] [1][0] + vpermdi v8, v9, v29,0b11 ; [2][3] [3][3] < [3][4] [3][2] + vpermdi v12,v10,v10,0b11 ; [4][4] [4][4] < [4][1] [4][1] + vpermdi v9, v10,v30,0b01 ; [2][4] [3][4] < [4][0] [4][3] + vpermdi v10,v27,v28,0b01 ; [4][0] [4][1] < [0][2] [1][3] + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chi + Iota + lvx_u v31,$iotas,r0 ; iotas[index] + addic r0,r0,16 ; index++ + + vandc v26,v2, v1 ; (~A[0..1][1] & A[0..1][2]) + vandc v27,v3, v2 ; (~A[0..1][2] & A[0..1][3]) + vandc v28,v4, v3 ; (~A[0..1][3] & A[0..1][4]) + vandc v29,v0, v4 ; (~A[0..1][4] & A[0..1][0]) + vandc v30,v1, v0 ; (~A[0..1][0] & A[0..1][1]) + vxor v0, v0, v26 ; A[0..1][0] ^= (~A[0..1][1] & A[0..1][2]) + vxor v1, v1, v27 ; A[0..1][1] ^= (~A[0..1][2] & A[0..1][3]) + vxor v2, v2, v28 ; A[0..1][2] ^= (~A[0..1][3] & A[0..1][4]) + vxor v3, v3, v29 ; A[0..1][3] ^= (~A[0..1][4] & A[0..1][0]) + vxor v4, v4, v30 ; A[0..1][4] ^= (~A[0..1][0] & A[0..1][1]) + + vandc v26,v7, v6 ; (~A[2..3][1] & A[2..3][2]) + vandc v27,v8, v7 ; (~A[2..3][2] & A[2..3][3]) + vandc v28,v9, v8 ; (~A[2..3][3] & A[2..3][4]) + vandc v29,v5, v9 ; (~A[2..3][4] & A[2..3][0]) + vandc v30,v6, v5 ; (~A[2..3][0] & A[2..3][1]) + vxor v5, v5, v26 ; A[2..3][0] ^= (~A[2..3][1] & A[2..3][2]) + vxor v6, v6, v27 ; A[2..3][1] ^= (~A[2..3][2] & A[2..3][3]) + vxor v7, v7, v28 ; A[2..3][2] ^= (~A[2..3][3] & A[2..3][4]) + vxor v8, v8, v29 ; A[2..3][3] ^= (~A[2..3][4] & A[2..3][0]) + vxor v9, v9, v30 ; A[2..3][4] ^= (~A[2..3][0] & A[2..3][1]) + + vxor v0, v0, v31 ; A[0][0] ^= iotas[index++] + + vpermdi v26,v10,v11,0b10 ; A[4][1..2] + vpermdi v27,v12,v10,0b00 ; A[4][4..0] + vpermdi v28,v11,v12,0b10 ; A[4][3..4] + vpermdi v29,v10,v10,0b10 ; A[4][1..0] + vandc v26,v11,v26 ; (~A[4][1..2] & A[4][2..3]) + vandc v27,v27,v28 ; (~A[4][3..4] & A[4][4..0]) + vandc v28,v10,v29 ; (~A[4][1..0] & A[4][0..1]) + vxor v10,v10,v26 ; A[4][0..1] ^= (~A[4][1..2] & A[4][2..3]) + vxor v11,v11,v27 ; A[4][2..3] ^= (~A[4][3..4] & A[4][4..0]) + vxor v12,v12,v28 ; A[4][4..4] ^= (~A[4][0..1] & A[4][1..0]) + + bdnz .Loop + + vpermdi v12,v12,v12,0b11 ; broadcast A[4][4] + blr + .long 0 + .byte 0,12,0x14,0,0,0,0,0 +.size KeccakF1600_int,.-KeccakF1600_int + +.type KeccakF1600,\@function +.align 5 +KeccakF1600: + $STU $sp,-$FRAME($sp) + li r10,`15+6*$SIZE_T` + li r11,`31+6*$SIZE_T` + mflr r8 + mfspr r7, 256 ; save vrsave + stvx v20,r10,$sp + addi r10,r10,32 + stvx v21,r11,$sp + addi r11,r11,32 + stvx v22,r10,$sp + addi r10,r10,32 + stvx v23,r11,$sp + addi r11,r11,32 + stvx v24,r10,$sp + addi r10,r10,32 + stvx v25,r11,$sp + addi r11,r11,32 + stvx v26,r10,$sp + addi r10,r10,32 + stvx v27,r11,$sp + addi r11,r11,32 + stvx v28,r10,$sp + addi r10,r10,32 + stvx v29,r11,$sp + addi r11,r11,32 + stvx v30,r10,$sp + stvx v31,r11,$sp + stw r7,`$FRAME-4`($sp) ; save vrsave + li r0, -1 + $PUSH r8,`$FRAME+$LRSAVE`($sp) + mtspr 256, r0 ; preserve all AltiVec registers + + li r11,16 + lvx_4w v0,0,r3 ; load A[5][5] + li r10,32 + lvx_4w v1,r11,r3 + addi r11,r11,32 + lvx_4w v2,r10,r3 + addi r10,r10,32 + lvx_4w v3,r11,r3 + addi r11,r11,32 + lvx_4w v4,r10,r3 + addi r10,r10,32 + lvx_4w v5,r11,r3 + addi r11,r11,32 + lvx_4w v6,r10,r3 + addi r10,r10,32 + lvx_4w v7,r11,r3 + addi r11,r11,32 + lvx_4w v8,r10,r3 + addi r10,r10,32 + lvx_4w v9,r11,r3 + addi r11,r11,32 + lvx_4w v10,r10,r3 + addi r10,r10,32 + lvx_4w v11,r11,r3 + lvx_splt v12,r10,r3 + + bl PICmeup + + li r11,16 + lvx_u v13,0,r12 ; load rhotates + li r10,32 + lvx_u v14,r11,r12 + addi r11,r11,32 + lvx_u v15,r10,r12 + addi r10,r10,32 + lvx_u v16,r11,r12 + addi r11,r11,32 + lvx_u v17,r10,r12 + addi r10,r10,32 + lvx_u v18,r11,r12 + addi r11,r11,32 + lvx_u v19,r10,r12 + addi r10,r10,32 + lvx_u v20,r11,r12 + addi r11,r11,32 + lvx_u v21,r10,r12 + addi r10,r10,32 + lvx_u v22,r11,r12 + addi r11,r11,32 + lvx_u v23,r10,r12 + addi r10,r10,32 + lvx_u v24,r11,r12 + lvx_u v25,r10,r12 + addi r12,r12,`16*16` ; points at iotas + + bl KeccakF1600_int + + li r11,16 + stvx_4w v0,0,r3 ; return A[5][5] + li r10,32 + stvx_4w v1,r11,r3 + addi r11,r11,32 + stvx_4w v2,r10,r3 + addi r10,r10,32 + stvx_4w v3,r11,r3 + addi r11,r11,32 + stvx_4w v4,r10,r3 + addi r10,r10,32 + stvx_4w v5,r11,r3 + addi r11,r11,32 + stvx_4w v6,r10,r3 + addi r10,r10,32 + stvx_4w v7,r11,r3 + addi r11,r11,32 + stvx_4w v8,r10,r3 + addi r10,r10,32 + stvx_4w v9,r11,r3 + addi r11,r11,32 + stvx_4w v10,r10,r3 + addi r10,r10,32 + stvx_4w v11,r11,r3 + stvdx_u v12,r10,r3 + + li r10,`15+6*$SIZE_T` + li r11,`31+6*$SIZE_T` + mtlr r8 + mtspr 256, r7 ; restore vrsave + lvx v20,r10,$sp + addi r10,r10,32 + lvx v21,r11,$sp + addi r11,r11,32 + lvx v22,r10,$sp + addi r10,r10,32 + lvx v23,r11,$sp + addi r11,r11,32 + lvx v24,r10,$sp + addi r10,r10,32 + lvx v25,r11,$sp + addi r11,r11,32 + lvx v26,r10,$sp + addi r10,r10,32 + lvx v27,r11,$sp + addi r11,r11,32 + lvx v28,r10,$sp + addi r10,r10,32 + lvx v29,r11,$sp + addi r11,r11,32 + lvx v30,r10,$sp + lvx v31,r11,$sp + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,0x04,1,0x80,0,1,0 + .long 0 +.size KeccakF1600,.-KeccakF1600 +___ +{ +my ($A_jagged,$inp,$len,$bsz) = map("r$_",(3..6)); + +$code.=<<___; +.globl SHA3_absorb +.type SHA3_absorb,\@function +.align 5 +SHA3_absorb: + $STU $sp,-$FRAME($sp) + li r10,`15+6*$SIZE_T` + li r11,`31+6*$SIZE_T` + mflr r8 + mfspr r7, 256 ; save vrsave + stvx v20,r10,$sp + addi r10,r10,32 + stvx v21,r11,$sp + addi r11,r11,32 + stvx v22,r10,$sp + addi r10,r10,32 + stvx v23,r11,$sp + addi r11,r11,32 + stvx v24,r10,$sp + addi r10,r10,32 + stvx v25,r11,$sp + addi r11,r11,32 + stvx v26,r10,$sp + addi r10,r10,32 + stvx v27,r11,$sp + addi r11,r11,32 + stvx v28,r10,$sp + addi r10,r10,32 + stvx v29,r11,$sp + addi r11,r11,32 + stvx v30,r10,$sp + stvx v31,r11,$sp + stw r7,`$FRAME-4`($sp) ; save vrsave + li r0, -1 + $PUSH r8,`$FRAME+$LRSAVE`($sp) + mtspr 256, r0 ; preserve all AltiVec registers + + li r11,16 + lvx_4w v0,0,$A_jagged ; load A[5][5] + li r10,32 + lvx_4w v1,r11,$A_jagged + addi r11,r11,32 + lvx_4w v2,r10,$A_jagged + addi r10,r10,32 + lvx_4w v3,r11,$A_jagged + addi r11,r11,32 + lvx_4w v4,r10,$A_jagged + addi r10,r10,32 + lvx_4w v5,r11,$A_jagged + addi r11,r11,32 + lvx_4w v6,r10,$A_jagged + addi r10,r10,32 + lvx_4w v7,r11,$A_jagged + addi r11,r11,32 + lvx_4w v8,r10,$A_jagged + addi r10,r10,32 + lvx_4w v9,r11,$A_jagged + addi r11,r11,32 + lvx_4w v10,r10,$A_jagged + addi r10,r10,32 + lvx_4w v11,r11,$A_jagged + lvx_splt v12,r10,$A_jagged + + bl PICmeup + + li r11,16 + lvx_u v13,0,r12 ; load rhotates + li r10,32 + lvx_u v14,r11,r12 + addi r11,r11,32 + lvx_u v15,r10,r12 + addi r10,r10,32 + lvx_u v16,r11,r12 + addi r11,r11,32 + lvx_u v17,r10,r12 + addi r10,r10,32 + lvx_u v18,r11,r12 + addi r11,r11,32 + lvx_u v19,r10,r12 + addi r10,r10,32 + lvx_u v20,r11,r12 + addi r11,r11,32 + lvx_u v21,r10,r12 + addi r10,r10,32 + lvx_u v22,r11,r12 + addi r11,r11,32 + lvx_u v23,r10,r12 + addi r10,r10,32 + lvx_u v24,r11,r12 + lvx_u v25,r10,r12 + li r10,-32 + li r11,-16 + addi r12,r12,`16*16` ; points at iotas + b .Loop_absorb + +.align 4 +.Loop_absorb: + $UCMP $len,$bsz ; len < bsz? + blt .Labsorbed + + sub $len,$len,$bsz ; len -= bsz + srwi r0,$bsz,3 + mtctr r0 + + lvx_u v30,r10,r12 ; permutation masks + lvx_u v31,r11,r12 + ?vspltisb v27,7 ; prepare masks for byte swap + ?vxor v30,v30,v27 ; on big-endian + ?vxor v31,v31,v27 + + vxor v27,v27,v27 ; zero + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v0, v0, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v1, v1, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v2, v2, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v3, v3, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v4, v4, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v0, v0, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v1, v1, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v2, v2, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v3, v3, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v4, v4, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v5, v5, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v6, v6, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v7, v7, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v8, v8, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v9, v9, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v5, v5, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v6, v6, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v7, v7, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v8, v8, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v9, v9, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v10, v10, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v10, v10, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v30 + vxor v11, v11, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v11, v11, v26 + bdz .Lprocess_block + lvdx_u v26,0,$inp + addi $inp,$inp,8 + vperm v26,v26,v27,v31 + vxor v12, v12, v26 + +.Lprocess_block: + bl KeccakF1600_int + + b .Loop_absorb + +.align 4 +.Labsorbed: + li r11,16 + stvx_4w v0,0,$A_jagged ; return A[5][5] + li r10,32 + stvx_4w v1,r11,$A_jagged + addi r11,r11,32 + stvx_4w v2,r10,$A_jagged + addi r10,r10,32 + stvx_4w v3,r11,$A_jagged + addi r11,r11,32 + stvx_4w v4,r10,$A_jagged + addi r10,r10,32 + stvx_4w v5,r11,$A_jagged + addi r11,r11,32 + stvx_4w v6,r10,$A_jagged + addi r10,r10,32 + stvx_4w v7,r11,$A_jagged + addi r11,r11,32 + stvx_4w v8,r10,$A_jagged + addi r10,r10,32 + stvx_4w v9,r11,$A_jagged + addi r11,r11,32 + stvx_4w v10,r10,$A_jagged + addi r10,r10,32 + stvx_4w v11,r11,$A_jagged + stvdx_u v12,r10,$A_jagged + + mr r3,$len ; return value + li r10,`15+6*$SIZE_T` + li r11,`31+6*$SIZE_T` + mtlr r8 + mtspr 256, r7 ; restore vrsave + lvx v20,r10,$sp + addi r10,r10,32 + lvx v21,r11,$sp + addi r11,r11,32 + lvx v22,r10,$sp + addi r10,r10,32 + lvx v23,r11,$sp + addi r11,r11,32 + lvx v24,r10,$sp + addi r10,r10,32 + lvx v25,r11,$sp + addi r11,r11,32 + lvx v26,r10,$sp + addi r10,r10,32 + lvx v27,r11,$sp + addi r11,r11,32 + lvx v28,r10,$sp + addi r10,r10,32 + lvx v29,r11,$sp + addi r11,r11,32 + lvx v30,r10,$sp + lvx v31,r11,$sp + addi $sp,$sp,$FRAME + blr + .long 0 + .byte 0,12,0x04,1,0x80,0,4,0 + .long 0 +.size SHA3_absorb,.-SHA3_absorb +___ +} +{ +my ($A_jagged,$out,$len,$bsz) = map("r$_",(3..6)); + +$code.=<<___; +.globl SHA3_squeeze +.type SHA3_squeeze,\@function +.align 5 +SHA3_squeeze: + mflr r9 ; r9 is not touched by KeccakF1600 + subi $out,$out,1 ; prepare for stbu + addi r8,$A_jagged,4 ; prepare volatiles + mr r10,$bsz + li r11,0 + b .Loop_squeeze +.align 4 +.Loop_squeeze: + lwzx r7,r11,r8 ; lo + lwzx r0,r11,$A_jagged ; hi + ${UCMP}i $len,8 + blt .Lsqueeze_tail + + stbu r7,1($out) ; write lo + srwi r7,r7,8 + stbu r7,1($out) + srwi r7,r7,8 + stbu r7,1($out) + srwi r7,r7,8 + stbu r7,1($out) + stbu r0,1($out) ; write hi + srwi r0,r0,8 + stbu r0,1($out) + srwi r0,r0,8 + stbu r0,1($out) + srwi r0,r0,8 + stbu r0,1($out) + + subic. $len,$len,8 + beqlr ; return if done + + subic. r10,r10,8 + ble .Loutput_expand + + addi r11,r11,16 ; calculate jagged index + cmplwi r11,`16*5` + blt .Loop_squeeze + subi r11,r11,72 + beq .Loop_squeeze + addi r11,r11,72 + cmplwi r11,`16*5+8` + subi r11,r11,8 + beq .Loop_squeeze + addi r11,r11,8 + cmplwi r11,`16*10` + subi r11,r11,72 + beq .Loop_squeeze + addi r11,r11,72 + blt .Loop_squeeze + subi r11,r11,8 + b .Loop_squeeze + +.align 4 +.Loutput_expand: + bl KeccakF1600 + mtlr r9 + + addi r8,$A_jagged,4 ; restore volatiles + mr r10,$bsz + li r11,0 + b .Loop_squeeze + +.align 4 +.Lsqueeze_tail: + mtctr $len + subic. $len,$len,4 + ble .Loop_tail_lo + li r8,4 + mtctr r8 +.Loop_tail_lo: + stbu r7,1($out) + srdi r7,r7,8 + bdnz .Loop_tail_lo + ble .Lsqueeze_done + mtctr $len +.Loop_tail_hi: + stbu r0,1($out) + srdi r0,r0,8 + bdnz .Loop_tail_hi + +.Lsqueeze_done: + blr + .long 0 + .byte 0,12,0x14,0,0,0,4,0 + .long 0 +.size SHA3_squeeze,.-SHA3_squeeze +___ +} +$code.=<<___; +.align 6 +PICmeup: + mflr r0 + bcl 20,31,\$+4 + mflr r12 ; vvvvvv "distance" between . and 1st data entry + addi r12,r12,`64-8` + mtlr r0 + blr + .long 0 + .byte 0,12,0x14,0,0,0,0,0 + .space `64-9*4` +.type rhotates,\@object +.align 6 +rhotates: + .quad 0, 36 + .quad 1, 44 + .quad 62, 6 + .quad 28, 55 + .quad 27, 20 + .quad 3, 41 + .quad 10, 45 + .quad 43, 15 + .quad 25, 21 + .quad 39, 8 + .quad 18, 2 + .quad 61, 56 + .quad 14, 14 +.size rhotates,.-rhotates + .quad 0,0 + .quad 0x0001020304050607,0x1011121314151617 + .quad 0x1011121314151617,0x0001020304050607 +.type iotas,\@object +iotas: + .quad 0x0000000000000001,0 + .quad 0x0000000000008082,0 + .quad 0x800000000000808a,0 + .quad 0x8000000080008000,0 + .quad 0x000000000000808b,0 + .quad 0x0000000080000001,0 + .quad 0x8000000080008081,0 + .quad 0x8000000000008009,0 + .quad 0x000000000000008a,0 + .quad 0x0000000000000088,0 + .quad 0x0000000080008009,0 + .quad 0x000000008000000a,0 + .quad 0x000000008000808b,0 + .quad 0x800000000000008b,0 + .quad 0x8000000000008089,0 + .quad 0x8000000000008003,0 + .quad 0x8000000000008002,0 + .quad 0x8000000000000080,0 + .quad 0x000000000000800a,0 + .quad 0x800000008000000a,0 + .quad 0x8000000080008081,0 + .quad 0x8000000000008080,0 + .quad 0x0000000080000001,0 + .quad 0x8000000080008008,0 +.size iotas,.-iotas +.asciz "Keccak-1600 absorb and squeeze for PowerISA 2.07, CRYPTOGAMS by " +___ + +foreach (split("\n",$code)) { + s/\`([^\`]*)\`/eval $1/ge; + + if ($flavour =~ /le$/) { # little-endian + s/\?([a-z]+)/;$1/; + } else { # big-endian + s/\?([a-z]+)/$1/; + } + + print $_,"\n"; +} + +close STDOUT; diff --git a/crypto/sha/asm/sha1-586.pl b/crypto/sha/asm/sha1-586.pl index 5adca234..ca376399 100644 --- a/crypto/sha/asm/sha1-586.pl +++ b/crypto/sha/asm/sha1-586.pl @@ -35,10 +35,9 @@ # P4 +85%(!) +45% # # As you can see Pentium came out as looser:-( Yet I reckoned that -# improvement on P4 outweights the loss and incorporate this +# improvement on P4 outweighs the loss and incorporate this # re-tuned code to 0.9.7 and later. # ---------------------------------------------------------------- -# # August 2009. # @@ -104,10 +103,12 @@ # Sandy Bridge 8.8 6.2/+40% 5.1(**)/+73% # Ivy Bridge 7.2 4.8/+51% 4.7(**)/+53% # Haswell 6.5 4.3/+51% 4.1(**)/+58% +# Skylake 6.4 4.1/+55% 4.1(**)/+55% # Bulldozer 11.6 6.0/+92% # VIA Nano 10.6 7.5/+41% # Atom 12.5 9.3(*)/+35% # Silvermont 14.5 9.9(*)/+46% +# Goldmont 8.8 6.7/+30% 1.7(***)/+415% # # (*) Loop is 1056 instructions long and expected result is ~8.25. # The discrepancy is because of front-end limitations, so @@ -115,6 +116,8 @@ # limited parallelism. # # (**) As per above comment, the result is for AVX *plus* sh[rl]d. +# +# (***) SHAEXT result $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; push(@INC,"${dir}","${dir}../../perlasm"); @@ -123,7 +126,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"sha1-586.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $xmm=$ymm=0; for (@ARGV) { $xmm=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -133,7 +136,7 @@ $ymm=1 if ($xmm && =~ /GNU assembler version ([2-9]\.[0-9]+)/ && $1>=2.19); # first version supporting AVX -$ymm=1 if ($xmm && !$ymm && $ARGV[0] eq "win32n" && +$ymm=1 if ($xmm && !$ymm && $ARGV[0] eq "win32n" && `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/ && $1>=2.03); # first version supporting AVX @@ -546,7 +549,7 @@ for($i=0;$i<20-4;$i+=2) { # being implemented in SSSE3). Once 8 quadruples or 32 elements are # collected, it switches to routine proposed by Max Locktyukhin. # -# Calculations inevitably require temporary reqisters, and there are +# Calculations inevitably require temporary registers, and there are # no %xmm registers left to spare. For this reason part of the ring # buffer, X[2..4] to be specific, is offloaded to 3 quadriples ring # buffer on the stack. Keep in mind that X[2] is alias X[-6], X[3] - diff --git a/crypto/sha/asm/sha1-alpha.pl b/crypto/sha/asm/sha1-alpha.pl index 4124958f..c1a0b0c6 100644 --- a/crypto/sha/asm/sha1-alpha.pl +++ b/crypto/sha/asm/sha1-alpha.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/sha/asm/sha1-armv8.pl b/crypto/sha/asm/sha1-armv8.pl index 84a00bf2..3ba871fe 100644 --- a/crypto/sha/asm/sha1-armv8.pl +++ b/crypto/sha/asm/sha1-armv8.pl @@ -26,6 +26,7 @@ # Denver 2.13 3.97 (+0%)(**) # X-Gene 8.80 (+200%) # Mongoose 2.05 6.50 (+160%) +# Kryo 1.88 8.00 (+90%) # # (*) Software results are presented mostly for reference purposes. # (**) Keep in mind that Denver relies on binary translation, which diff --git a/crypto/sha/asm/sha1-ia64.pl b/crypto/sha/asm/sha1-ia64.pl index dec21f92..bf1d2ebe 100644 --- a/crypto/sha/asm/sha1-ia64.pl +++ b/crypto/sha/asm/sha1-ia64.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/sha/asm/sha1-mb-x86_64.pl b/crypto/sha/asm/sha1-mb-x86_64.pl index 51c73c05..443b6498 100644 --- a/crypto/sha/asm/sha1-mb-x86_64.pl +++ b/crypto/sha/asm/sha1-mb-x86_64.pl @@ -95,7 +95,7 @@ $K="%xmm15"; if (1) { # Atom-specific optimization aiming to eliminate pshufb with high - # registers [and thus get rid of 48 cycles accumulated penalty] + # registers [and thus get rid of 48 cycles accumulated penalty] @Xi=map("%xmm$_",(0..4)); ($tx,$t0,$t1,$t2,$t3)=map("%xmm$_",(5..9)); @V=($A,$B,$C,$D,$E)=map("%xmm$_",(10..14)); @@ -126,7 +126,7 @@ my $k=$i+2; # ... # $i==13: 14,15,15,15, # $i==14: 15 -# +# # Then at $i==15 Xupdate is applied one iteration in advance... $code.=<<___ if ($i==0); movd (@ptr[0]),@Xi[0] @@ -363,6 +363,7 @@ $code.=<<___; .type sha1_multi_block,\@function,3 .align 32 sha1_multi_block: +.cfi_startproc mov OPENSSL_ia32cap_P+4(%rip),%rcx bt \$61,%rcx # check SHA bit jc _shaext_shortcut @@ -373,8 +374,11 @@ $code.=<<___ if ($avx); ___ $code.=<<___; mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbx ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -393,6 +397,7 @@ $code.=<<___; sub \$`$REG_SZ*18`,%rsp and \$-256,%rsp mov %rax,`$REG_SZ*17`(%rsp) # original %rsp +.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8 .Lbody: lea K_XX_XX(%rip),$Tbl lea `$REG_SZ*16`(%rsp),%rbx @@ -439,7 +444,7 @@ for(;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } $code.=<<___; movdqa (%rbx),@Xi[0] # pull counters mov \$1,%ecx - cmp 4*0(%rbx),%ecx # examinte counters + cmp 4*0(%rbx),%ecx # examine counters pxor $t2,$t2 cmovge $Tbl,@ptr[0] # cancel input cmp 4*1(%rbx),%ecx @@ -487,6 +492,7 @@ $code.=<<___; .Ldone: mov `$REG_SZ*17`(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps -0xb8(%rax),%xmm6 @@ -502,10 +508,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: ret +.cfi_endproc .size sha1_multi_block,.-sha1_multi_block ___ {{{ @@ -517,10 +527,14 @@ $code.=<<___; .type sha1_multi_block_shaext,\@function,3 .align 32 sha1_multi_block_shaext: +.cfi_startproc _shaext_shortcut: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -756,10 +770,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_shaext: ret +.cfi_endproc .size sha1_multi_block_shaext,.-sha1_multi_block_shaext ___ }}} @@ -1002,6 +1020,7 @@ $code.=<<___; .type sha1_multi_block_avx,\@function,3 .align 32 sha1_multi_block_avx: +.cfi_startproc _avx_shortcut: ___ $code.=<<___ if ($avx>1); @@ -1016,8 +1035,11 @@ $code.=<<___ if ($avx>1); ___ $code.=<<___; mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -1036,6 +1058,7 @@ $code.=<<___; sub \$`$REG_SZ*18`, %rsp and \$-256,%rsp mov %rax,`$REG_SZ*17`(%rsp) # original %rsp +.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8 .Lbody_avx: lea K_XX_XX(%rip),$Tbl lea `$REG_SZ*16`(%rsp),%rbx @@ -1125,6 +1148,7 @@ $code.=<<___; .Ldone_avx: mov `$REG_SZ*17`(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -1141,10 +1165,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx: ret +.cfi_endproc .size sha1_multi_block_avx,.-sha1_multi_block_avx ___ @@ -1164,14 +1192,22 @@ $code.=<<___; .type sha1_multi_block_avx2,\@function,3 .align 32 sha1_multi_block_avx2: +.cfi_startproc _avx2_shortcut: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -1190,6 +1226,7 @@ $code.=<<___; sub \$`$REG_SZ*18`, %rsp and \$-256,%rsp mov %rax,`$REG_SZ*17`(%rsp) # original %rsp +.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8 .Lbody_avx2: lea K_XX_XX(%rip),$Tbl shr \$1,$num @@ -1280,6 +1317,7 @@ $code.=<<___; .Ldone_avx2: mov `$REG_SZ*17`(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -1296,14 +1334,22 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx2: ret +.cfi_endproc .size sha1_multi_block_avx2,.-sha1_multi_block_avx2 ___ } }}} @@ -1462,10 +1508,10 @@ avx2_handler: mov -48(%rax),%r15 mov %rbx,144($context) # restore context->Rbx mov %rbp,160($context) # restore context->Rbp - mov %r12,216($context) # restore cotnext->R12 - mov %r13,224($context) # restore cotnext->R13 - mov %r14,232($context) # restore cotnext->R14 - mov %r15,240($context) # restore cotnext->R15 + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 lea -56-10*16(%rax),%rsi lea 512($context),%rdi # &context.Xmm6 diff --git a/crypto/sha/asm/sha1-mips.pl b/crypto/sha/asm/sha1-mips.pl index 882f9731..71dc7225 100644 --- a/crypto/sha/asm/sha1-mips.pl +++ b/crypto/sha/asm/sha1-mips.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -56,15 +56,15 @@ $flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64 if ($flavour =~ /64|n32/i) { - $PTR_ADD="dadd"; # incidentally works even on n32 - $PTR_SUB="dsub"; # incidentally works even on n32 + $PTR_ADD="daddu"; # incidentally works even on n32 + $PTR_SUB="dsubu"; # incidentally works even on n32 $REG_S="sd"; $REG_L="ld"; $PTR_SLL="dsll"; # incidentally works even on n32 $SZREG=8; } else { - $PTR_ADD="add"; - $PTR_SUB="sub"; + $PTR_ADD="addu"; + $PTR_SUB="subu"; $REG_S="sw"; $REG_L="lw"; $PTR_SLL="sll"; @@ -126,10 +126,14 @@ $code.=<<___; addu $e,$K # $i xor $t0,$c,$d rotr $t1,$a,27 - lwl @X[$j],$j*4+$MSB($inp) and $t0,$b addu $e,$t1 +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lw @X[$j],$j*4($inp) +#else + lwl @X[$j],$j*4+$MSB($inp) lwr @X[$j],$j*4+$LSB($inp) +#endif xor $t0,$d addu $e,@X[$i] rotr $b,$b,2 @@ -336,13 +340,7 @@ $FRAMESIZE=16; # large enough to accommodate NUBI saved registers $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0xc0fff008" : "0xc0ff0000"; $code=<<___; -#ifdef OPENSSL_FIPSCANISTER -# include -#endif - -#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2) -#define _MIPS_ARCH_MIPS32R2 -#endif +#include "mips_arch.h" .text @@ -387,10 +385,16 @@ $code.=<<___; .align 4 .Loop: .set reorder +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + lui $K,0x5a82 + lw @X[0],($inp) + ori $K,0x7999 # K_00_19 +#else lwl @X[0],$MSB($inp) lui $K,0x5a82 lwr @X[0],$LSB($inp) ori $K,0x7999 # K_00_19 +#endif ___ for ($i=0;$i<15;$i++) { &BODY_00_14($i,@V); unshift(@V,pop(@V)); } for (;$i<20;$i++) { &BODY_15_19($i,@V); unshift(@V,pop(@V)); } diff --git a/crypto/sha/asm/sha1-parisc.pl b/crypto/sha/asm/sha1-parisc.pl index a85d126f..822288e6 100644 --- a/crypto/sha/asm/sha1-parisc.pl +++ b/crypto/sha/asm/sha1-parisc.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/sha/asm/sha1-ppc.pl b/crypto/sha/asm/sha1-ppc.pl index add5a9ea..0cda0a3e 100755 --- a/crypto/sha/asm/sha1-ppc.pl +++ b/crypto/sha/asm/sha1-ppc.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. diff --git a/crypto/sha/asm/sha1-s390x.pl b/crypto/sha/asm/sha1-s390x.pl index 79df1ffd..5729c308 100644 --- a/crypto/sha/asm/sha1-s390x.pl +++ b/crypto/sha/asm/sha1-s390x.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -160,6 +160,8 @@ ___ } $code.=<<___; +#include "s390x_arch.h" + .text .align 64 .type Ktable,\@object @@ -172,7 +174,7 @@ sha1_block_data_order: ___ $code.=<<___ if ($kimdfunc); larl %r1,OPENSSL_s390xcap_P - lg %r0,16(%r1) # check kimd capabilities + lg %r0,S390X_KIMD(%r1) # check kimd capabilities tmhh %r0,`0x8000>>$kimdfunc` jz .Lsoftware lghi %r0,$kimdfunc diff --git a/crypto/sha/asm/sha1-sparcv9.pl b/crypto/sha/asm/sha1-sparcv9.pl index 7437ff4f..3e612e3d 100644 --- a/crypto/sha/asm/sha1-sparcv9.pl +++ b/crypto/sha/asm/sha1-sparcv9.pl @@ -8,12 +8,12 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. # -# Hardware SPARC T4 support by David S. Miller . +# Hardware SPARC T4 support by David S. Miller # ==================================================================== # Performance improvement is not really impressive on pre-T1 CPU: +8% @@ -227,7 +227,7 @@ sha1_block_data_order: ldd [%o1 + 0x20], %f16 ldd [%o1 + 0x28], %f18 ldd [%o1 + 0x30], %f20 - subcc %o2, 1, %o2 ! done yet? + subcc %o2, 1, %o2 ! done yet? ldd [%o1 + 0x38], %f22 add %o1, 0x40, %o1 prefetch [%o1 + 63], 20 diff --git a/crypto/sha/asm/sha1-sparcv9a.pl b/crypto/sha/asm/sha1-sparcv9a.pl index f9ed5630..50d3e136 100644 --- a/crypto/sha/asm/sha1-sparcv9a.pl +++ b/crypto/sha/asm/sha1-sparcv9a.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -519,7 +519,7 @@ $code.=<<___; mov $Cctx,$C mov $Dctx,$D mov $Ectx,$E - alignaddr %g0,$tmp0,%g0 + alignaddr %g0,$tmp0,%g0 dec 1,$len ba .Loop mov $nXfer,$Xfer diff --git a/crypto/sha/asm/sha1-thumb.pl b/crypto/sha/asm/sha1-thumb.pl index 661fd9f9..ac74a25d 100644 --- a/crypto/sha/asm/sha1-thumb.pl +++ b/crypto/sha/asm/sha1-thumb.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -21,7 +21,7 @@ # The code does not present direct interest to OpenSSL, because of low # performance. Its purpose is to establish _size_ benchmark. Pretty # useless one I must say, because 30% or 88 bytes larger ARMv4 code -# [avialable on demand] is almost _twice_ as fast. It should also be +# [available on demand] is almost _twice_ as fast. It should also be # noted that in-lining of .Lcommon and .Lrotate improves performance # by over 40%, while code increases by only 10% or 32 bytes. But once # again, the goal was to establish _size_ benchmark, not performance. diff --git a/crypto/sha/asm/sha1-x86_64.pl b/crypto/sha/asm/sha1-x86_64.pl index 6a3378ba..60819f61 100755 --- a/crypto/sha/asm/sha1-x86_64.pl +++ b/crypto/sha/asm/sha1-x86_64.pl @@ -82,9 +82,11 @@ # Haswell 5.45 4.15/+31% 3.57/+53% # Skylake 5.18 4.06/+28% 3.54/+46% # Bulldozer 9.11 5.95/+53% +# Ryzen 4.75 3.80/+24% 1.93/+150%(**) # VIA Nano 9.32 7.15/+30% # Atom 10.3 9.17/+12% # Silvermont 13.1(*) 9.37/+40% +# Knights L 13.2(*) 9.68/+36% 8.30/+59% # Goldmont 8.13 6.42/+27% 1.70/+380%(**) # # (*) obviously suboptimal result, nothing was done about it, @@ -257,6 +259,7 @@ $code.=<<___; .type sha1_block_data_order,\@function,3 .align 16 sha1_block_data_order: +.cfi_startproc mov OPENSSL_ia32cap_P+0(%rip),%r9d mov OPENSSL_ia32cap_P+4(%rip),%r8d mov OPENSSL_ia32cap_P+8(%rip),%r10d @@ -264,7 +267,7 @@ sha1_block_data_order: jz .Lialu ___ $code.=<<___ if ($shaext); - test \$`1<<29`,%r10d # check SHA bit + test \$`1<<29`,%r10d # check SHA bit jnz _shaext_shortcut ___ $code.=<<___ if ($avx>1); @@ -285,17 +288,24 @@ $code.=<<___; .align 16 .Lialu: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 mov %rdi,$ctx # reassigned argument sub \$`8+16*4`,%rsp mov %rsi,$inp # reassigned argument and \$-64,%rsp mov %rdx,$num # reassigned argument mov %rax,`16*4`(%rsp) +.cfi_cfa_expression %rsp+64,deref,+8 .Lprologue: mov 0($ctx),$A @@ -329,14 +339,22 @@ $code.=<<___; jnz .Lloop mov `16*4`(%rsp),%rsi +.cfi_def_cfa %rsi,8 mov -40(%rsi),%r14 +.cfi_restore %r14 mov -32(%rsi),%r13 +.cfi_restore %r13 mov -24(%rsi),%r12 +.cfi_restore %r12 mov -16(%rsi),%rbp +.cfi_restore %rbp mov -8(%rsi),%rbx +.cfi_restore %rbx lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: ret +.cfi_endproc .size sha1_block_data_order,.-sha1_block_data_order ___ if ($shaext) {{{ @@ -352,6 +370,7 @@ $code.=<<___; .align 32 sha1_block_data_order_shaext: _shaext_shortcut: +.cfi_startproc ___ $code.=<<___ if ($win64); lea `-8-4*16`(%rsp),%rsp @@ -449,6 +468,7 @@ $code.=<<___ if ($win64); .Lepilogue_shaext: ___ $code.=<<___; +.cfi_endproc ret .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext ___ @@ -462,7 +482,8 @@ my @V=($A,$B,$C,$D,$E)=("%eax","%ebx","%ecx","%edx","%ebp"); # size optimization my @T=("%esi","%edi"); my $j=0; my $rx=0; -my $K_XX_XX="%r11"; +my $K_XX_XX="%r14"; +my $fp="%r11"; my $_rol=sub { &rol(@_) }; my $_ror=sub { &ror(@_) }; @@ -483,25 +504,31 @@ $code.=<<___; .align 16 sha1_block_data_order_ssse3: _ssse3_shortcut: - mov %rsp,%rax +.cfi_startproc + mov %rsp,$fp # frame pointer +.cfi_def_cfa_register $fp push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 # redundant, done to share Win64 SE handler +.cfi_push %r13 push %r14 +.cfi_push %r14 lea `-64-($win64?6*16:0)`(%rsp),%rsp ___ $code.=<<___ if ($win64); - movaps %xmm6,-40-6*16(%rax) - movaps %xmm7,-40-5*16(%rax) - movaps %xmm8,-40-4*16(%rax) - movaps %xmm9,-40-3*16(%rax) - movaps %xmm10,-40-2*16(%rax) - movaps %xmm11,-40-1*16(%rax) + movaps %xmm6,-40-6*16($fp) + movaps %xmm7,-40-5*16($fp) + movaps %xmm8,-40-4*16($fp) + movaps %xmm9,-40-3*16($fp) + movaps %xmm10,-40-2*16($fp) + movaps %xmm11,-40-1*16($fp) .Lprologue_ssse3: ___ $code.=<<___; - mov %rax,%r14 # original %rsp and \$-64,%rsp mov %rdi,$ctx # reassigned argument mov %rsi,$inp # reassigned argument @@ -908,23 +935,29 @@ $code.=<<___; mov $E,16($ctx) ___ $code.=<<___ if ($win64); - movaps -40-6*16(%r14),%xmm6 - movaps -40-5*16(%r14),%xmm7 - movaps -40-4*16(%r14),%xmm8 - movaps -40-3*16(%r14),%xmm9 - movaps -40-2*16(%r14),%xmm10 - movaps -40-1*16(%r14),%xmm11 + movaps -40-6*16($fp),%xmm6 + movaps -40-5*16($fp),%xmm7 + movaps -40-4*16($fp),%xmm8 + movaps -40-3*16($fp),%xmm9 + movaps -40-2*16($fp),%xmm10 + movaps -40-1*16($fp),%xmm11 ___ $code.=<<___; - lea (%r14),%rsi - mov -40(%rsi),%r14 - mov -32(%rsi),%r13 - mov -24(%rsi),%r12 - mov -16(%rsi),%rbp - mov -8(%rsi),%rbx - lea (%rsi),%rsp + mov -40($fp),%r14 +.cfi_restore %r14 + mov -32($fp),%r13 +.cfi_restore %r13 + mov -24($fp),%r12 +.cfi_restore %r12 + mov -16($fp),%rbp +.cfi_restore %rbp + mov -8($fp),%rbx +.cfi_restore %rbx + lea ($fp),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_ssse3: ret +.cfi_endproc .size sha1_block_data_order_ssse3,.-sha1_block_data_order_ssse3 ___ @@ -945,26 +978,32 @@ $code.=<<___; .align 16 sha1_block_data_order_avx: _avx_shortcut: - mov %rsp,%rax +.cfi_startproc + mov %rsp,$fp +.cfi_def_cfa_register $fp push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 # redundant, done to share Win64 SE handler +.cfi_push %r13 push %r14 +.cfi_push %r14 lea `-64-($win64?6*16:0)`(%rsp),%rsp vzeroupper ___ $code.=<<___ if ($win64); - vmovaps %xmm6,-40-6*16(%rax) - vmovaps %xmm7,-40-5*16(%rax) - vmovaps %xmm8,-40-4*16(%rax) - vmovaps %xmm9,-40-3*16(%rax) - vmovaps %xmm10,-40-2*16(%rax) - vmovaps %xmm11,-40-1*16(%rax) + vmovaps %xmm6,-40-6*16($fp) + vmovaps %xmm7,-40-5*16($fp) + vmovaps %xmm8,-40-4*16($fp) + vmovaps %xmm9,-40-3*16($fp) + vmovaps %xmm10,-40-2*16($fp) + vmovaps %xmm11,-40-1*16($fp) .Lprologue_avx: ___ $code.=<<___; - mov %rax,%r14 # original %rsp and \$-64,%rsp mov %rdi,$ctx # reassigned argument mov %rsi,$inp # reassigned argument @@ -1272,23 +1311,29 @@ $code.=<<___; mov $E,16($ctx) ___ $code.=<<___ if ($win64); - movaps -40-6*16(%r14),%xmm6 - movaps -40-5*16(%r14),%xmm7 - movaps -40-4*16(%r14),%xmm8 - movaps -40-3*16(%r14),%xmm9 - movaps -40-2*16(%r14),%xmm10 - movaps -40-1*16(%r14),%xmm11 + movaps -40-6*16($fp),%xmm6 + movaps -40-5*16($fp),%xmm7 + movaps -40-4*16($fp),%xmm8 + movaps -40-3*16($fp),%xmm9 + movaps -40-2*16($fp),%xmm10 + movaps -40-1*16($fp),%xmm11 ___ $code.=<<___; - lea (%r14),%rsi - mov -40(%rsi),%r14 - mov -32(%rsi),%r13 - mov -24(%rsi),%r12 - mov -16(%rsi),%rbp - mov -8(%rsi),%rbx - lea (%rsi),%rsp + mov -40($fp),%r14 +.cfi_restore %r14 + mov -32($fp),%r13 +.cfi_restore %r13 + mov -24($fp),%r12 +.cfi_restore %r12 + mov -16($fp),%rbp +.cfi_restore %rbp + mov -8($fp),%rbx +.cfi_restore %rbx + lea ($fp),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx: ret +.cfi_endproc .size sha1_block_data_order_avx,.-sha1_block_data_order_avx ___ @@ -1312,26 +1357,32 @@ $code.=<<___; .align 16 sha1_block_data_order_avx2: _avx2_shortcut: - mov %rsp,%rax +.cfi_startproc + mov %rsp,$fp +.cfi_def_cfa_register $fp push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 vzeroupper ___ $code.=<<___ if ($win64); lea -6*16(%rsp),%rsp - vmovaps %xmm6,-40-6*16(%rax) - vmovaps %xmm7,-40-5*16(%rax) - vmovaps %xmm8,-40-4*16(%rax) - vmovaps %xmm9,-40-3*16(%rax) - vmovaps %xmm10,-40-2*16(%rax) - vmovaps %xmm11,-40-1*16(%rax) + vmovaps %xmm6,-40-6*16($fp) + vmovaps %xmm7,-40-5*16($fp) + vmovaps %xmm8,-40-4*16($fp) + vmovaps %xmm9,-40-3*16($fp) + vmovaps %xmm10,-40-2*16($fp) + vmovaps %xmm11,-40-1*16($fp) .Lprologue_avx2: ___ $code.=<<___; - mov %rax,%r14 # original %rsp mov %rdi,$ctx # reassigned argument mov %rsi,$inp # reassigned argument mov %rdx,$num # reassigned argument @@ -1751,23 +1802,29 @@ $code.=<<___; vzeroupper ___ $code.=<<___ if ($win64); - movaps -40-6*16(%r14),%xmm6 - movaps -40-5*16(%r14),%xmm7 - movaps -40-4*16(%r14),%xmm8 - movaps -40-3*16(%r14),%xmm9 - movaps -40-2*16(%r14),%xmm10 - movaps -40-1*16(%r14),%xmm11 + movaps -40-6*16($fp),%xmm6 + movaps -40-5*16($fp),%xmm7 + movaps -40-4*16($fp),%xmm8 + movaps -40-3*16($fp),%xmm9 + movaps -40-2*16($fp),%xmm10 + movaps -40-1*16($fp),%xmm11 ___ $code.=<<___; - lea (%r14),%rsi - mov -40(%rsi),%r14 - mov -32(%rsi),%r13 - mov -24(%rsi),%r12 - mov -16(%rsi),%rbp - mov -8(%rsi),%rbx - lea (%rsi),%rsp + mov -40($fp),%r14 +.cfi_restore %r14 + mov -32($fp),%r13 +.cfi_restore %r13 + mov -24($fp),%r12 +.cfi_restore %r12 + mov -16($fp),%rbp +.cfi_restore %rbp + mov -8($fp),%rbx +.cfi_restore %rbx + lea ($fp),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx2: ret +.cfi_endproc .size sha1_block_data_order_avx2,.-sha1_block_data_order_avx2 ___ } @@ -1908,15 +1965,13 @@ ssse3_handler: cmp %r10,%rbx # context->RipRsp + mov 208($context),%rax # pull context->R11 mov 4(%r11),%r10d # HandlerData[1] lea (%rsi,%r10),%r10 # epilogue label cmp %r10,%rbx # context->Rip>=epilogue label jae .Lcommon_seh_tail - mov 232($context),%rax # pull context->R14 - lea -40-6*16(%rax),%rsi lea 512($context),%rdi # &context.Xmm6 mov \$12,%ecx @@ -1929,9 +1984,9 @@ ssse3_handler: mov -40(%rax),%r14 mov %rbx,144($context) # restore context->Rbx mov %rbp,160($context) # restore context->Rbp - mov %r12,216($context) # restore cotnext->R12 - mov %r13,224($context) # restore cotnext->R13 - mov %r14,232($context) # restore cotnext->R14 + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 .Lcommon_seh_tail: mov 8(%rax),%rdi diff --git a/crypto/sha/asm/sha256-586.pl b/crypto/sha/asm/sha256-586.pl index 6af1d84b..48830728 100644 --- a/crypto/sha/asm/sha256-586.pl +++ b/crypto/sha/asm/sha256-586.pl @@ -18,7 +18,7 @@ # # Performance improvement over compiler generated code varies from # 10% to 40% [see below]. Not very impressive on some µ-archs, but -# it's 5 times smaller and optimizies amount of writes. +# it's 5 times smaller and optimizes amount of writes. # # May 2012. # @@ -47,7 +47,7 @@ # # Performance in clock cycles per processed byte (less is better): # -# gcc icc x86 asm(*) SIMD x86_64 asm(**) +# gcc icc x86 asm(*) SIMD x86_64 asm(**) # Pentium 46 57 40/38 - - # PIII 36 33 27/24 - - # P4 41 38 28 - 17.3 @@ -57,14 +57,17 @@ # Sandy Bridge 25 - 15.9 12.4 11.6 # Ivy Bridge 24 - 15.0 11.4 10.3 # Haswell 22 - 13.9 9.46 7.80 +# Skylake 20 - 14.9 9.50 7.70 # Bulldozer 36 - 27/22 17.0 13.6 # VIA Nano 36 - 25/22 16.8 16.5 # Atom 50 - 30/25 21.9 18.9 # Silvermont 40 - 34/31 22.9 20.6 +# Goldmont 29 - 20 16.3(***) # # (*) numbers after slash are for unrolled loop, where applicable; # (**) x86_64 assembly performance is presented for reference # purposes, results are best-available; +# (***) SHAEXT result is 4.1, strangely enough better than 64-bit one; $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; push(@INC,"${dir}","${dir}../../perlasm"); @@ -73,7 +76,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"sha512-586.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $xmm=$avx=0; for (@ARGV) { $xmm=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -276,7 +279,7 @@ my $suffix=shift; &mov ($Coff,"ecx"); &mov ($Doff,"edi"); &mov (&DWP(0,"esp"),"ebx"); # magic - &mov ($E,&DWP(16,"esi")); + &mov ($E,&DWP(16,"esi")); &mov ("ebx",&DWP(20,"esi")); &mov ("ecx",&DWP(24,"esi")); &mov ("edi",&DWP(28,"esi")); @@ -385,7 +388,7 @@ my @AH=($A,$K256); &xor ($AH[1],"ecx"); # magic &mov (&DWP(8,"esp"),"ecx"); &mov (&DWP(12,"esp"),"ebx"); - &mov ($E,&DWP(16,"esi")); + &mov ($E,&DWP(16,"esi")); &mov ("ebx",&DWP(20,"esi")); &mov ("ecx",&DWP(24,"esi")); &mov ("esi",&DWP(28,"esi")); diff --git a/crypto/sha/asm/sha256-mb-x86_64.pl b/crypto/sha/asm/sha256-mb-x86_64.pl index fbcd29f2..73978dbd 100644 --- a/crypto/sha/asm/sha256-mb-x86_64.pl +++ b/crypto/sha/asm/sha256-mb-x86_64.pl @@ -36,7 +36,7 @@ # (iii) "this" is for n=8, when we gather twice as much data, result # for n=4 is 20.3+4.44=24.7; # (iv) presented improvement coefficients are asymptotic limits and -# in real-life application are somewhat lower, e.g. for 2KB +# in real-life application are somewhat lower, e.g. for 2KB # fragments they range from 75% to 130% (on Haswell); $flavour = shift; @@ -244,6 +244,7 @@ $code.=<<___; .type sha256_multi_block,\@function,3 .align 32 sha256_multi_block: +.cfi_startproc mov OPENSSL_ia32cap_P+4(%rip),%rcx bt \$61,%rcx # check SHA bit jc _shaext_shortcut @@ -254,8 +255,11 @@ $code.=<<___ if ($avx); ___ $code.=<<___; mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -274,6 +278,7 @@ $code.=<<___; sub \$`$REG_SZ*18`, %rsp and \$-256,%rsp mov %rax,`$REG_SZ*17`(%rsp) # original %rsp +.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8 .Lbody: lea K256+128(%rip),$Tbl lea `$REG_SZ*16`(%rsp),%rbx @@ -391,6 +396,7 @@ $code.=<<___; .Ldone: mov `$REG_SZ*17`(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 ___ $code.=<<___ if ($win64); movaps -0xb8(%rax),%xmm6 @@ -406,10 +412,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: ret +.cfi_endproc .size sha256_multi_block,.-sha256_multi_block ___ {{{ @@ -421,10 +431,14 @@ $code.=<<___; .type sha256_multi_block_shaext,\@function,3 .align 32 sha256_multi_block_shaext: +.cfi_startproc _shaext_shortcut: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -758,10 +772,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_shaext: ret +.cfi_endproc .size sha256_multi_block_shaext,.-sha256_multi_block_shaext ___ }}} @@ -921,6 +939,7 @@ $code.=<<___; .type sha256_multi_block_avx,\@function,3 .align 32 sha256_multi_block_avx: +.cfi_startproc _avx_shortcut: ___ $code.=<<___ if ($avx>1); @@ -935,8 +954,11 @@ $code.=<<___ if ($avx>1); ___ $code.=<<___; mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -955,6 +977,7 @@ $code.=<<___; sub \$`$REG_SZ*18`, %rsp and \$-256,%rsp mov %rax,`$REG_SZ*17`(%rsp) # original %rsp +.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8 .Lbody_avx: lea K256+128(%rip),$Tbl lea `$REG_SZ*16`(%rsp),%rbx @@ -1070,6 +1093,7 @@ $code.=<<___; .Ldone_avx: mov `$REG_SZ*17`(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -1086,10 +1110,14 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx: ret +.cfi_endproc .size sha256_multi_block_avx,.-sha256_multi_block_avx ___ if ($avx>1) { @@ -1105,14 +1133,22 @@ $code.=<<___; .type sha256_multi_block_avx2,\@function,3 .align 32 sha256_multi_block_avx2: +.cfi_startproc _avx2_shortcut: mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 ___ $code.=<<___ if ($win64); lea -0xa8(%rsp),%rsp @@ -1131,6 +1167,7 @@ $code.=<<___; sub \$`$REG_SZ*18`, %rsp and \$-256,%rsp mov %rax,`$REG_SZ*17`(%rsp) # original %rsp +.cfi_cfa_expression %rsp+`$REG_SZ*17`,deref,+8 .Lbody_avx2: lea K256+128(%rip),$Tbl lea 0x80($ctx),$ctx # size optimization @@ -1246,6 +1283,7 @@ $code.=<<___; .Ldone_avx2: mov `$REG_SZ*17`(%rsp),%rax # original %rsp +.cfi_def_cfa %rax,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -1262,14 +1300,22 @@ $code.=<<___ if ($win64); ___ $code.=<<___; mov -48(%rax),%r15 +.cfi_restore %r15 mov -40(%rax),%r14 +.cfi_restore %r14 mov -32(%rax),%r13 +.cfi_restore %r13 mov -24(%rax),%r12 +.cfi_restore %r12 mov -16(%rax),%rbp +.cfi_restore %rbp mov -8(%rax),%rbx +.cfi_restore %rbx lea (%rax),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx2: ret +.cfi_endproc .size sha256_multi_block_avx2,.-sha256_multi_block_avx2 ___ } }}} @@ -1462,10 +1508,10 @@ avx2_handler: mov -48(%rax),%r15 mov %rbx,144($context) # restore context->Rbx mov %rbp,160($context) # restore context->Rbp - mov %r12,216($context) # restore cotnext->R12 - mov %r13,224($context) # restore cotnext->R13 - mov %r14,232($context) # restore cotnext->R14 - mov %r15,240($context) # restore cotnext->R15 + mov %r12,216($context) # restore context->R12 + mov %r13,224($context) # restore context->R13 + mov %r14,232($context) # restore context->R14 + mov %r15,240($context) # restore context->R15 lea -56-10*16(%rax),%rsi lea 512($context),%rdi # &context.Xmm6 diff --git a/crypto/sha/asm/sha512-586.pl b/crypto/sha/asm/sha512-586.pl index 3873934b..867ce30b 100644 --- a/crypto/sha/asm/sha512-586.pl +++ b/crypto/sha/asm/sha512-586.pl @@ -32,6 +32,7 @@ # Sandy Bridge 58 - 35 11.9 11.2 # Ivy Bridge 50 - 33 11.5 8.17 # Haswell 46 - 29 11.3 7.66 +# Skylake 40 - 26 13.3 7.25 # Bulldozer 121 - 50 14.0 13.5 # VIA Nano 91 - 52 33 14.7 # Atom 126 - 68 48(***) 14.7 @@ -41,7 +42,7 @@ # (*) whichever best applicable. # (**) x86_64 assembler performance is presented for reference # purposes, the results are for integer-only code. -# (***) paddq is increadibly slow on Atom. +# (***) paddq is incredibly slow on Atom. # # IALU code-path is optimized for elder Pentiums. On vanilla Pentium # performance improvement over compiler generated code reaches ~60%, @@ -61,7 +62,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"sha512-586.pl",$ARGV[$#ARGV] eq "386"); +&asm_init($ARGV[0],$ARGV[$#ARGV] eq "386"); $sse2=0; for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -384,7 +385,7 @@ if ($sse2) { &set_label("16_79_sse2",16); for ($j=0;$j<2;$j++) { # 2x unroll - #&movq ("mm7",&QWP(8*(9+16-1),"esp")); # prefetched in BODY_00_15 + #&movq ("mm7",&QWP(8*(9+16-1),"esp")); # prefetched in BODY_00_15 &movq ("mm5",&QWP(8*(9+16-14),"esp")); &movq ("mm1","mm7"); &psrlq ("mm7",1); diff --git a/crypto/sha/asm/sha512-armv8.pl b/crypto/sha/asm/sha512-armv8.pl index c1aaf778..ac84ebb5 100644 --- a/crypto/sha/asm/sha512-armv8.pl +++ b/crypto/sha/asm/sha512-armv8.pl @@ -1,17 +1,18 @@ #! /usr/bin/env perl -# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +# 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 -# # ==================================================================== # Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. +# +# Permission to use under GPLv2 terms is granted. # ==================================================================== # # SHA256/512 for ARMv8. @@ -26,7 +27,8 @@ # Denver 2.01 10.5 (+26%) 6.70 (+8%) # X-Gene 20.0 (+100%) 12.8 (+300%(***)) # Mongoose 2.36 13.0 (+50%) 8.36 (+33%) -# +# Kryo 1.92 17.4 (+30%) 11.2 (+8%) +# # (*) Software SHA256 results are of lesser relevance, presented # mostly for informational purposes. # (**) The result is a trade-off: it's possible to improve it by @@ -34,19 +36,37 @@ # on Cortex-A53 (or by 4 cycles per round). # (***) Super-impressive coefficients over gcc-generated code are # indication of some compiler "pathology", most notably code -# generated with -mgeneral-regs-only is significanty faster +# generated with -mgeneral-regs-only is significantly faster # and the gap is only 40-90%. +# +# October 2016. +# +# Originally it was reckoned that it makes no sense to implement NEON +# version of SHA256 for 64-bit processors. This is because performance +# improvement on most wide-spread Cortex-A5x processors was observed +# to be marginal, same on Cortex-A53 and ~10% on A57. But then it was +# observed that 32-bit NEON SHA256 performs significantly better than +# 64-bit scalar version on *some* of the more recent processors. As +# result 64-bit NEON version of SHA256 was added to provide best +# all-round performance. For example it executes ~30% faster on X-Gene +# and Mongoose. [For reference, NEON version of SHA512 is bound to +# deliver much less improvement, likely *negative* on Cortex-A5x. +# Which is why NEON support is limited to SHA256.] -$flavour=shift; -$output=shift; +$output=pop; +$flavour=pop; -$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; -( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or -( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or -die "can't locate arm-xlate.pl"; +if ($flavour && $flavour ne "void") { + $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; + ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or + ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or + die "can't locate arm-xlate.pl"; -open OUT,"| \"$^X\" $xlate $flavour $output"; -*STDOUT=*OUT; + open OUT,"| \"$^X\" $xlate $flavour $output"; + *STDOUT=*OUT; +} else { + open STDOUT,">$output"; +} if ($output =~ /512/) { $BITS=512; @@ -83,7 +103,7 @@ my ($T0,$T1,$T2)=(@X[($i-8)&15],@X[($i-9)&15],@X[($i-10)&15]); $T0=@X[$i+3] if ($i<11); $code.=<<___ if ($i<16); -#ifndef __ARMEB__ +#ifndef __AARCH64EB__ rev @X[$i],@X[$i] // $i #endif ___ @@ -166,7 +186,9 @@ ___ } $code.=<<___; -#include "arm_arch.h" +#ifndef __KERNEL__ +# include "arm_arch.h" +#endif .text @@ -175,20 +197,28 @@ $code.=<<___; .type $func,%function .align 6 $func: -___ -$code.=<<___ if ($SZ==4); -#ifdef __ILP32__ +#ifndef __KERNEL__ +# ifdef __ILP32__ ldrsw x16,.LOPENSSL_armcap_P -#else +# else ldr x16,.LOPENSSL_armcap_P -#endif +# endif adr x17,.LOPENSSL_armcap_P add x16,x16,x17 ldr w16,[x16] +___ +$code.=<<___ if ($SZ==4); tst w16,#ARMV8_SHA256 b.ne .Lv8_entry + tst w16,#ARMV7_NEON + b.ne .Lneon_entry +___ +$code.=<<___ if ($SZ==8); + tst w16,#ARMV8_SHA512 + b.ne .Lv8_entry ___ $code.=<<___; +#endif stp x29,x30,[sp,#-128]! add x29,sp,#0 @@ -321,12 +351,14 @@ $code.=<<___ if ($SZ==4); ___ $code.=<<___; .size .LK$BITS,.-.LK$BITS +#ifndef __KERNEL__ .align 3 .LOPENSSL_armcap_P: -#ifdef __ILP32__ +# ifdef __ILP32__ .long OPENSSL_armcap_P-. -#else +# else .quad OPENSSL_armcap_P-. +# endif #endif .asciz "SHA$BITS block transform for ARMv8, CRYPTOGAMS by " .align 2 @@ -341,6 +373,7 @@ my ($W0,$W1)=("v16.4s","v17.4s"); my ($ABCD_SAVE,$EFGH_SAVE)=("v18.16b","v19.16b"); $code.=<<___; +#ifndef __KERNEL__ .type sha256_block_armv8,%function .align 6 sha256_block_armv8: @@ -409,11 +442,406 @@ $code.=<<___; ldr x29,[sp],#16 ret .size sha256_block_armv8,.-sha256_block_armv8 +#endif +___ +} + +if ($SZ==4) { ######################################### NEON stuff # +# You'll surely note a lot of similarities with sha256-armv4 module, +# and of course it's not a coincidence. sha256-armv4 was used as +# initial template, but was adapted for ARMv8 instruction set and +# extensively re-tuned for all-round performance. + +my @V = ($A,$B,$C,$D,$E,$F,$G,$H) = map("w$_",(3..10)); +my ($t0,$t1,$t2,$t3,$t4) = map("w$_",(11..15)); +my $Ktbl="x16"; +my $Xfer="x17"; +my @X = map("q$_",(0..3)); +my ($T0,$T1,$T2,$T3,$T4,$T5,$T6,$T7) = map("q$_",(4..7,16..19)); +my $j=0; + +sub AUTOLOAD() # thunk [simplified] x86-style perlasm +{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./; + my $arg = pop; + $arg = "#$arg" if ($arg*1 eq $arg); + $code .= "\t$opcode\t".join(',',@_,$arg)."\n"; +} + +sub Dscalar { shift =~ m|[qv]([0-9]+)|?"d$1":""; } +sub Dlo { shift =~ m|[qv]([0-9]+)|?"v$1.d[0]":""; } +sub Dhi { shift =~ m|[qv]([0-9]+)|?"v$1.d[1]":""; } + +sub Xupdate() +{ use integer; + my $body = shift; + my @insns = (&$body,&$body,&$body,&$body); + my ($a,$b,$c,$d,$e,$f,$g,$h); + + &ext_8 ($T0,@X[0],@X[1],4); # X[1..4] + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &ext_8 ($T3,@X[2],@X[3],4); # X[9..12] + eval(shift(@insns)); + eval(shift(@insns)); + &mov (&Dscalar($T7),&Dhi(@X[3])); # X[14..15] + eval(shift(@insns)); + eval(shift(@insns)); + &ushr_32 ($T2,$T0,$sigma0[0]); + eval(shift(@insns)); + &ushr_32 ($T1,$T0,$sigma0[2]); + eval(shift(@insns)); + &add_32 (@X[0],@X[0],$T3); # X[0..3] += X[9..12] + eval(shift(@insns)); + &sli_32 ($T2,$T0,32-$sigma0[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &ushr_32 ($T3,$T0,$sigma0[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &eor_8 ($T1,$T1,$T2); + eval(shift(@insns)); + eval(shift(@insns)); + &sli_32 ($T3,$T0,32-$sigma0[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &ushr_32 ($T4,$T7,$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &eor_8 ($T1,$T1,$T3); # sigma0(X[1..4]) + eval(shift(@insns)); + eval(shift(@insns)); + &sli_32 ($T4,$T7,32-$sigma1[0]); + eval(shift(@insns)); + eval(shift(@insns)); + &ushr_32 ($T5,$T7,$sigma1[2]); + eval(shift(@insns)); + eval(shift(@insns)); + &ushr_32 ($T3,$T7,$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &add_32 (@X[0],@X[0],$T1); # X[0..3] += sigma0(X[1..4]) + eval(shift(@insns)); + eval(shift(@insns)); + &sli_u32 ($T3,$T7,32-$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &eor_8 ($T5,$T5,$T4); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &eor_8 ($T5,$T5,$T3); # sigma1(X[14..15]) + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &add_32 (@X[0],@X[0],$T5); # X[0..1] += sigma1(X[14..15]) + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &ushr_32 ($T6,@X[0],$sigma1[0]); + eval(shift(@insns)); + &ushr_32 ($T7,@X[0],$sigma1[2]); + eval(shift(@insns)); + eval(shift(@insns)); + &sli_32 ($T6,@X[0],32-$sigma1[0]); + eval(shift(@insns)); + &ushr_32 ($T5,@X[0],$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &eor_8 ($T7,$T7,$T6); + eval(shift(@insns)); + eval(shift(@insns)); + &sli_32 ($T5,@X[0],32-$sigma1[1]); + eval(shift(@insns)); + eval(shift(@insns)); + &ld1_32 ("{$T0}","[$Ktbl], #16"); + eval(shift(@insns)); + &eor_8 ($T7,$T7,$T5); # sigma1(X[16..17]) + eval(shift(@insns)); + eval(shift(@insns)); + &eor_8 ($T5,$T5,$T5); + eval(shift(@insns)); + eval(shift(@insns)); + &mov (&Dhi($T5), &Dlo($T7)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &add_32 (@X[0],@X[0],$T5); # X[2..3] += sigma1(X[16..17]) + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &add_32 ($T0,$T0,@X[0]); + while($#insns>=1) { eval(shift(@insns)); } + &st1_32 ("{$T0}","[$Xfer], #16"); + eval(shift(@insns)); + + push(@X,shift(@X)); # "rotate" X[] +} + +sub Xpreload() +{ use integer; + my $body = shift; + my @insns = (&$body,&$body,&$body,&$body); + my ($a,$b,$c,$d,$e,$f,$g,$h); + + eval(shift(@insns)); + eval(shift(@insns)); + &ld1_8 ("{@X[0]}","[$inp],#16"); + eval(shift(@insns)); + eval(shift(@insns)); + &ld1_32 ("{$T0}","[$Ktbl],#16"); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &rev32 (@X[0],@X[0]); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + eval(shift(@insns)); + &add_32 ($T0,$T0,@X[0]); + foreach (@insns) { eval; } # remaining instructions + &st1_32 ("{$T0}","[$Xfer], #16"); + + push(@X,shift(@X)); # "rotate" X[] +} + +sub body_00_15 () { + ( + '($a,$b,$c,$d,$e,$f,$g,$h)=@V;'. + '&add ($h,$h,$t1)', # h+=X[i]+K[i] + '&add ($a,$a,$t4);'. # h+=Sigma0(a) from the past + '&and ($t1,$f,$e)', + '&bic ($t4,$g,$e)', + '&eor ($t0,$e,$e,"ror#".($Sigma1[1]-$Sigma1[0]))', + '&add ($a,$a,$t2)', # h+=Maj(a,b,c) from the past + '&orr ($t1,$t1,$t4)', # Ch(e,f,g) + '&eor ($t0,$t0,$e,"ror#".($Sigma1[2]-$Sigma1[0]))', # Sigma1(e) + '&eor ($t4,$a,$a,"ror#".($Sigma0[1]-$Sigma0[0]))', + '&add ($h,$h,$t1)', # h+=Ch(e,f,g) + '&ror ($t0,$t0,"#$Sigma1[0]")', + '&eor ($t2,$a,$b)', # a^b, b^c in next round + '&eor ($t4,$t4,$a,"ror#".($Sigma0[2]-$Sigma0[0]))', # Sigma0(a) + '&add ($h,$h,$t0)', # h+=Sigma1(e) + '&ldr ($t1,sprintf "[sp,#%d]",4*(($j+1)&15)) if (($j&15)!=15);'. + '&ldr ($t1,"[$Ktbl]") if ($j==15);'. + '&and ($t3,$t3,$t2)', # (b^c)&=(a^b) + '&ror ($t4,$t4,"#$Sigma0[0]")', + '&add ($d,$d,$h)', # d+=h + '&eor ($t3,$t3,$b)', # Maj(a,b,c) + '$j++; unshift(@V,pop(@V)); ($t2,$t3)=($t3,$t2);' + ) +} + +$code.=<<___; +#ifdef __KERNEL__ +.globl sha256_block_neon +#endif +.type sha256_block_neon,%function +.align 4 +sha256_block_neon: +.Lneon_entry: + stp x29, x30, [sp, #-16]! + mov x29, sp + sub sp,sp,#16*4 + + adr $Ktbl,.LK256 + add $num,$inp,$num,lsl#6 // len to point at the end of inp + + ld1.8 {@X[0]},[$inp], #16 + ld1.8 {@X[1]},[$inp], #16 + ld1.8 {@X[2]},[$inp], #16 + ld1.8 {@X[3]},[$inp], #16 + ld1.32 {$T0},[$Ktbl], #16 + ld1.32 {$T1},[$Ktbl], #16 + ld1.32 {$T2},[$Ktbl], #16 + ld1.32 {$T3},[$Ktbl], #16 + rev32 @X[0],@X[0] // yes, even on + rev32 @X[1],@X[1] // big-endian + rev32 @X[2],@X[2] + rev32 @X[3],@X[3] + mov $Xfer,sp + add.32 $T0,$T0,@X[0] + add.32 $T1,$T1,@X[1] + add.32 $T2,$T2,@X[2] + st1.32 {$T0-$T1},[$Xfer], #32 + add.32 $T3,$T3,@X[3] + st1.32 {$T2-$T3},[$Xfer] + sub $Xfer,$Xfer,#32 + + ldp $A,$B,[$ctx] + ldp $C,$D,[$ctx,#8] + ldp $E,$F,[$ctx,#16] + ldp $G,$H,[$ctx,#24] + ldr $t1,[sp,#0] + mov $t2,wzr + eor $t3,$B,$C + mov $t4,wzr + b .L_00_48 + +.align 4 +.L_00_48: +___ + &Xupdate(\&body_00_15); + &Xupdate(\&body_00_15); + &Xupdate(\&body_00_15); + &Xupdate(\&body_00_15); +$code.=<<___; + cmp $t1,#0 // check for K256 terminator + ldr $t1,[sp,#0] + sub $Xfer,$Xfer,#64 + bne .L_00_48 + + sub $Ktbl,$Ktbl,#256 // rewind $Ktbl + cmp $inp,$num + mov $Xfer, #64 + csel $Xfer, $Xfer, xzr, eq + sub $inp,$inp,$Xfer // avoid SEGV + mov $Xfer,sp +___ + &Xpreload(\&body_00_15); + &Xpreload(\&body_00_15); + &Xpreload(\&body_00_15); + &Xpreload(\&body_00_15); +$code.=<<___; + add $A,$A,$t4 // h+=Sigma0(a) from the past + ldp $t0,$t1,[$ctx,#0] + add $A,$A,$t2 // h+=Maj(a,b,c) from the past + ldp $t2,$t3,[$ctx,#8] + add $A,$A,$t0 // accumulate + add $B,$B,$t1 + ldp $t0,$t1,[$ctx,#16] + add $C,$C,$t2 + add $D,$D,$t3 + ldp $t2,$t3,[$ctx,#24] + add $E,$E,$t0 + add $F,$F,$t1 + ldr $t1,[sp,#0] + stp $A,$B,[$ctx,#0] + add $G,$G,$t2 + mov $t2,wzr + stp $C,$D,[$ctx,#8] + add $H,$H,$t3 + stp $E,$F,[$ctx,#16] + eor $t3,$B,$C + stp $G,$H,[$ctx,#24] + mov $t4,wzr + mov $Xfer,sp + b.ne .L_00_48 + + ldr x29,[x29] + add sp,sp,#16*4+16 + ret +.size sha256_block_neon,.-sha256_block_neon +___ +} + +if ($SZ==8) { +my $Ktbl="x3"; + +my @H = map("v$_.16b",(0..4)); +my ($fg,$de,$m9_10)=map("v$_.16b",(5..7)); +my @MSG=map("v$_.16b",(16..23)); +my ($W0,$W1)=("v24.2d","v25.2d"); +my ($AB,$CD,$EF,$GH)=map("v$_.16b",(26..29)); + +$code.=<<___; +#ifndef __KERNEL__ +.type sha512_block_armv8,%function +.align 6 +sha512_block_armv8: +.Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {@MSG[0]-@MSG[3]},[$inp],#64 // load input + ld1 {@MSG[4]-@MSG[7]},[$inp],#64 + + ld1.64 {@H[0]-@H[3]},[$ctx] // load context + adr $Ktbl,.LK512 + + rev64 @MSG[0],@MSG[0] + rev64 @MSG[1],@MSG[1] + rev64 @MSG[2],@MSG[2] + rev64 @MSG[3],@MSG[3] + rev64 @MSG[4],@MSG[4] + rev64 @MSG[5],@MSG[5] + rev64 @MSG[6],@MSG[6] + rev64 @MSG[7],@MSG[7] + b .Loop_hw + +.align 4 +.Loop_hw: + ld1.64 {$W0},[$Ktbl],#16 + subs $num,$num,#1 + sub x4,$inp,#128 + orr $AB,@H[0],@H[0] // offload + orr $CD,@H[1],@H[1] + orr $EF,@H[2],@H[2] + orr $GH,@H[3],@H[3] + csel $inp,$inp,x4,ne // conditional rewind +___ +for($i=0;$i<32;$i++) { +$code.=<<___; + add.i64 $W0,$W0,@MSG[0] + ld1.64 {$W1},[$Ktbl],#16 + ext $W0,$W0,$W0,#8 + ext $fg,@H[2],@H[3],#8 + ext $de,@H[1],@H[2],#8 + add.i64 @H[3],@H[3],$W0 // "T1 + H + K512[i]" + sha512su0 @MSG[0],@MSG[1] + ext $m9_10,@MSG[4],@MSG[5],#8 + sha512h @H[3],$fg,$de + sha512su1 @MSG[0],@MSG[7],$m9_10 + add.i64 @H[4],@H[1],@H[3] // "D + T1" + sha512h2 @H[3],$H[1],@H[0] +___ + ($W0,$W1)=($W1,$W0); push(@MSG,shift(@MSG)); + @H = (@H[3],@H[0],@H[4],@H[2],@H[1]); +} +for(;$i<40;$i++) { +$code.=<<___ if ($i<39); + ld1.64 {$W1},[$Ktbl],#16 +___ +$code.=<<___ if ($i==39); + sub $Ktbl,$Ktbl,#$rounds*$SZ // rewind +___ +$code.=<<___; + add.i64 $W0,$W0,@MSG[0] + ld1 {@MSG[0]},[$inp],#16 // load next input + ext $W0,$W0,$W0,#8 + ext $fg,@H[2],@H[3],#8 + ext $de,@H[1],@H[2],#8 + add.i64 @H[3],@H[3],$W0 // "T1 + H + K512[i]" + sha512h @H[3],$fg,$de + rev64 @MSG[0],@MSG[0] + add.i64 @H[4],@H[1],@H[3] // "D + T1" + sha512h2 @H[3],$H[1],@H[0] +___ + ($W0,$W1)=($W1,$W0); push(@MSG,shift(@MSG)); + @H = (@H[3],@H[0],@H[4],@H[2],@H[1]); +} +$code.=<<___; + add.i64 @H[0],@H[0],$AB // accumulate + add.i64 @H[1],@H[1],$CD + add.i64 @H[2],@H[2],$EF + add.i64 @H[3],@H[3],$GH + + cbnz $num,.Loop_hw + + st1.64 {@H[0]-@H[3]},[$ctx] // store context + + ldr x29,[sp],#16 + ret +.size sha512_block_armv8,.-sha512_block_armv8 +#endif ___ } $code.=<<___; +#ifndef __KERNEL__ .comm OPENSSL_armcap_P,4,4 +#endif ___ { my %opcode = ( @@ -431,14 +859,43 @@ ___ } } +{ my %opcode = ( + "sha512h" => 0xce608000, "sha512h2" => 0xce608400, + "sha512su0" => 0xcec08000, "sha512su1" => 0xce608800 ); + + sub unsha512 { + my ($mnemonic,$arg)=@_; + + $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)[^,]*(?:,\s*[qv]([0-9]+))?/o + && + sprintf ".inst\t0x%08x\t//%s %s", + $opcode{$mnemonic}|$1|($2<<5)|($3<<16), + $mnemonic,$arg; + } +} + +open SELF,$0; +while() { + next if (/^#!/); + last if (!s/^#/\/\// and !/^$/); + print; +} +close SELF; + foreach(split("\n",$code)) { - s/\`([^\`]*)\`/eval($1)/geo; + s/\`([^\`]*)\`/eval($1)/ge; - s/\b(sha256\w+)\s+([qv].*)/unsha256($1,$2)/geo; + s/\b(sha512\w+)\s+([qv].*)/unsha512($1,$2)/ge or + s/\b(sha256\w+)\s+([qv].*)/unsha256($1,$2)/ge; - s/\.\w?32\b//o and s/\.16b/\.4s/go; - m/(ld|st)1[^\[]+\[0\]/o and s/\.4s/\.s/go; + s/\bq([0-9]+)\b/v$1.16b/g; # old->new registers + + s/\.[ui]?8(\s)/$1/; + s/\.\w?64\b// and s/\.16b/\.2d/g or + s/\.\w?32\b// and s/\.16b/\.4s/g; + m/\bext\b/ and s/\.2d/\.16b/g or + m/(ld|st)1[^\[]+\[0\]/ and s/\.4s/\.s/g; print $_,"\n"; } diff --git a/crypto/sha/asm/sha512-mips.pl b/crypto/sha/asm/sha512-mips.pl index 5c2d23fa..e6fd2687 100644 --- a/crypto/sha/asm/sha512-mips.pl +++ b/crypto/sha/asm/sha512-mips.pl @@ -60,16 +60,16 @@ $flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64 if ($flavour =~ /64|n32/i) { $PTR_LA="dla"; - $PTR_ADD="dadd"; # incidentally works even on n32 - $PTR_SUB="dsub"; # incidentally works even on n32 + $PTR_ADD="daddu"; # incidentally works even on n32 + $PTR_SUB="dsubu"; # incidentally works even on n32 $REG_S="sd"; $REG_L="ld"; $PTR_SLL="dsll"; # incidentally works even on n32 $SZREG=8; } else { $PTR_LA="la"; - $PTR_ADD="add"; - $PTR_SUB="sub"; + $PTR_ADD="addu"; + $PTR_SUB="subu"; $REG_S="sw"; $REG_L="lw"; $PTR_SLL="sll"; @@ -135,8 +135,12 @@ my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_; my ($T1,$tmp0,$tmp1,$tmp2)=(@X[4],@X[5],@X[6],@X[7]); $code.=<<___ if ($i<15); +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + ${LD} @X[1],`($i+1)*$SZ`($inp) +#else ${LD}l @X[1],`($i+1)*$SZ+$MSB`($inp) ${LD}r @X[1],`($i+1)*$SZ+$LSB`($inp) +#endif ___ $code.=<<___ if (!$big_endian && $i<16 && $SZ==4); #if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2) @@ -298,13 +302,7 @@ $FRAMESIZE=16*$SZ+16*$SZREG; $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0xc0fff008" : "0xc0ff0000"; $code.=<<___; -#ifdef OPENSSL_FIPSCANISTER -# include -#endif - -#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2) -#define _MIPS_ARCH_MIPS32R2 -#endif +#include "mips_arch.h" .text .set noat @@ -369,8 +367,12 @@ $code.=<<___; .align 5 .Loop: +#if defined(_MIPS_ARCH_MIPS32R6) || defined(_MIPS_ARCH_MIPS64R6) + ${LD} @X[0],($inp) +#else ${LD}l @X[0],$MSB($inp) ${LD}r @X[0],$LSB($inp) +#endif ___ for ($i=0;$i<16;$i++) { &BODY_00_15($i,@V); unshift(@V,pop(@V)); push(@X,shift(@X)); } diff --git a/crypto/sha/asm/sha512-parisc.pl b/crypto/sha/asm/sha512-parisc.pl index fcb61579..5a082ba6 100755 --- a/crypto/sha/asm/sha512-parisc.pl +++ b/crypto/sha/asm/sha512-parisc.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -368,7 +368,7 @@ L\$parisc1 ___ @V=( $Ahi, $Alo, $Bhi, $Blo, $Chi, $Clo, $Dhi, $Dlo, - $Ehi, $Elo, $Fhi, $Flo, $Ghi, $Glo, $Hhi, $Hlo) = + $Ehi, $Elo, $Fhi, $Flo, $Ghi, $Glo, $Hhi, $Hlo) = ( "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", "%r8", "%r9","%r10","%r11","%r12","%r13","%r14","%r15","%r16"); $a0 ="%r17"; @@ -419,7 +419,7 @@ $code.=<<___; add $t0,$hlo,$hlo shd $ahi,$alo,$Sigma0[0],$t0 addc $t1,$hhi,$hhi ; h += Sigma1(e) - shd $alo,$ahi,$Sigma0[0],$t1 + shd $alo,$ahi,$Sigma0[0],$t1 add $a0,$hlo,$hlo shd $ahi,$alo,$Sigma0[1],$t2 addc $a1,$hhi,$hhi ; h += Ch(e,f,g) @@ -773,7 +773,7 @@ foreach (split("\n",$code)) { s/shd\s+(%r[0-9]+),(%r[0-9]+),([0-9]+)/ $3>31 ? sprintf("shd\t%$2,%$1,%d",$3-32) # rotation for >=32 : sprintf("shd\t%$1,%$2,%d",$3)/e or - # translate made up instructons: _ror, _shr, _align, _shl + # translate made up instructions: _ror, _shr, _align, _shl s/_ror(\s+)(%r[0-9]+),/ ($SZ==4 ? "shd" : "shrpd")."$1$2,$2,"/e or diff --git a/crypto/sha/asm/sha512-ppc.pl b/crypto/sha/asm/sha512-ppc.pl index fe95b015..71699f66 100755 --- a/crypto/sha/asm/sha512-ppc.pl +++ b/crypto/sha/asm/sha512-ppc.pl @@ -26,7 +26,7 @@ # # (*) 64-bit code in 32-bit application context, which actually is # on TODO list. It should be noted that for safe deployment in -# 32-bit *mutli-threaded* context asyncronous signals should be +# 32-bit *multi-threaded* context asynchronous signals should be # blocked upon entry to SHA512 block routine. This is because # 32-bit signaling procedure invalidates upper halves of GPRs. # Context switch procedure preserves them, but not signaling:-( diff --git a/crypto/sha/asm/sha512-s390x.pl b/crypto/sha/asm/sha512-s390x.pl index 427d6f82..4c0f4e79 100644 --- a/crypto/sha/asm/sha512-s390x.pl +++ b/crypto/sha/asm/sha512-s390x.pl @@ -8,7 +8,7 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. @@ -170,6 +170,8 @@ ___ } $code.=<<___; +#include "s390x_arch.h" + .text .align 64 .type $Table,\@object @@ -244,7 +246,7 @@ $Func: ___ $code.=<<___ if ($kimdfunc); larl %r1,OPENSSL_s390xcap_P - lg %r0,16(%r1) # check kimd capabilities + lg %r0,S390X_KIMD(%r1) # check kimd capabilities tmhh %r0,`0x8000>>$kimdfunc` jz .Lsoftware lghi %r0,$kimdfunc @@ -308,7 +310,7 @@ $code.=<<___; cl${g} $inp,`$frame+4*$SIZE_T`($sp) jne .Lloop - lm${g} %r6,%r15,`$frame+6*$SIZE_T`($sp) + lm${g} %r6,%r15,`$frame+6*$SIZE_T`($sp) br %r14 .size $Func,.-$Func .string "SHA${label} block transform for s390x, CRYPTOGAMS by " diff --git a/crypto/sha/asm/sha512-sparcv9.pl b/crypto/sha/asm/sha512-sparcv9.pl index 4a1ce5fe..4432bda6 100644 --- a/crypto/sha/asm/sha512-sparcv9.pl +++ b/crypto/sha/asm/sha512-sparcv9.pl @@ -8,12 +8,12 @@ # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. The module is, however, dual licensed under OpenSSL and # CRYPTOGAMS licenses depending on where you obtain it. For further # details see http://www.openssl.org/~appro/cryptogams/. # -# Hardware SPARC T4 support by David S. Miller . +# Hardware SPARC T4 support by David S. Miller # ==================================================================== # SHA256 performance improvement over compiler generated code varies @@ -102,7 +102,7 @@ if ($output =~ /512/) { $locals=0; # X[16] is register resident @X=("%o0","%o1","%o2","%o3","%o4","%o5","%g1","%o7"); - + $A="%l0"; $B="%l1"; $C="%l2"; @@ -254,7 +254,7 @@ $code.=<<___; $SLL $a,`$SZ*8-@Sigma0[1]`,$tmp1 xor $tmp0,$h,$h $SRL $a,@Sigma0[2],$tmp0 - xor $tmp1,$h,$h + xor $tmp1,$h,$h $SLL $a,`$SZ*8-@Sigma0[0]`,$tmp1 xor $tmp0,$h,$h xor $tmp1,$h,$h ! Sigma0(a) diff --git a/crypto/sha/asm/sha512-x86_64.pl b/crypto/sha/asm/sha512-x86_64.pl index c9b7b281..f2ebdfdb 100755 --- a/crypto/sha/asm/sha512-x86_64.pl +++ b/crypto/sha/asm/sha512-x86_64.pl @@ -95,9 +95,11 @@ # Haswell 12.2 9.28(+31%) 7.80(+56%) 7.66 5.40(+42%) # Skylake 11.4 9.03(+26%) 7.70(+48%) 7.25 5.20(+40%) # Bulldozer 21.1 13.6(+54%) 13.6(+54%(***)) 13.5 8.58(+57%) +# Ryzen 11.0 9.02(+22%) 2.05(+440%) 7.05 5.67(+20%) # VIA Nano 23.0 16.5(+39%) - 14.7 - # Atom 23.0 18.9(+22%) - 14.7 - # Silvermont 27.4 20.6(+33%) - 17.5 - +# Knights L 27.4 21.0(+30%) 19.6(+40%) 17.5 12.8(+37%) # Goldmont 18.9 14.3(+32%) 4.16(+350%) 12.0 - # # (*) whichever best applicable, including SHAEXT; @@ -176,7 +178,7 @@ $Tbl="%rbp"; $_ctx="16*$SZ+0*8(%rsp)"; $_inp="16*$SZ+1*8(%rsp)"; $_end="16*$SZ+2*8(%rsp)"; -$_rsp="16*$SZ+3*8(%rsp)"; +$_rsp="`16*$SZ+3*8`(%rsp)"; $framesz="16*$SZ+4*8"; @@ -269,6 +271,7 @@ $code=<<___; .type $func,\@function,3 .align 16 $func: +.cfi_startproc ___ $code.=<<___ if ($SZ==4 || $avx); lea OPENSSL_ia32cap_P(%rip),%r11 @@ -301,13 +304,20 @@ $code.=<<___ if ($SZ==4); jnz .Lssse3_shortcut ___ $code.=<<___; + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 shl \$4,%rdx # num*16 sub \$$framesz,%rsp lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ @@ -315,7 +325,8 @@ $code.=<<___; mov $ctx,$_ctx # save ctx, 1st arg mov $inp,$_inp # save inp, 2nd arh mov %rdx,$_end # save end pointer, "3rd" arg - mov %r11,$_rsp # save copy of %rsp + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 .Lprologue: mov $SZ*0($ctx),$A @@ -382,15 +393,24 @@ $code.=<<___; jb .Lloop mov $_rsp,%rsi - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: ret +.cfi_endproc .size $func,.-$func ___ @@ -760,14 +780,22 @@ $code.=<<___; .type ${func}_ssse3,\@function,3 .align 64 ${func}_ssse3: +.cfi_startproc .Lssse3_shortcut: + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 shl \$4,%rdx # num*16 sub \$`$framesz+$win64*16*4`,%rsp lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ @@ -775,7 +803,8 @@ ${func}_ssse3: mov $ctx,$_ctx # save ctx, 1st arg mov $inp,$_inp # save inp, 2nd arh mov %rdx,$_end # save end pointer, "3rd" arg - mov %r11,$_rsp # save copy of %rsp + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,16*$SZ+32(%rsp) @@ -1074,6 +1103,7 @@ $code.=<<___; jb .Lloop_ssse3 mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 ___ $code.=<<___ if ($win64); movaps 16*$SZ+32(%rsp),%xmm6 @@ -1082,15 +1112,23 @@ $code.=<<___ if ($win64); movaps 16*$SZ+80(%rsp),%xmm9 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_ssse3: ret +.cfi_endproc .size ${func}_ssse3,.-${func}_ssse3 ___ } @@ -1104,14 +1142,22 @@ $code.=<<___; .type ${func}_xop,\@function,3 .align 64 ${func}_xop: +.cfi_startproc .Lxop_shortcut: + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 shl \$4,%rdx # num*16 sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ @@ -1119,7 +1165,8 @@ ${func}_xop: mov $ctx,$_ctx # save ctx, 1st arg mov $inp,$_inp # save inp, 2nd arh mov %rdx,$_end # save end pointer, "3rd" arg - mov %r11,$_rsp # save copy of %rsp + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,16*$SZ+32(%rsp) @@ -1446,6 +1493,7 @@ $code.=<<___; jb .Lloop_xop mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -1459,15 +1507,23 @@ $code.=<<___ if ($win64 && $SZ>4); movaps 16*$SZ+112(%rsp),%xmm11 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_xop: ret +.cfi_endproc .size ${func}_xop,.-${func}_xop ___ } @@ -1480,14 +1536,22 @@ $code.=<<___; .type ${func}_avx,\@function,3 .align 64 ${func}_avx: +.cfi_startproc .Lavx_shortcut: + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 shl \$4,%rdx # num*16 sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ @@ -1495,7 +1559,8 @@ ${func}_avx: mov $ctx,$_ctx # save ctx, 1st arg mov $inp,$_inp # save inp, 2nd arh mov %rdx,$_end # save end pointer, "3rd" arg - mov %r11,$_rsp # save copy of %rsp + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,16*$SZ+32(%rsp) @@ -1754,6 +1819,7 @@ $code.=<<___; jb .Lloop_avx mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -1767,15 +1833,23 @@ $code.=<<___ if ($win64 && $SZ>4); movaps 16*$SZ+112(%rsp),%xmm11 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx: ret +.cfi_endproc .size ${func}_avx,.-${func}_avx ___ @@ -1783,7 +1857,7 @@ if ($avx>1) {{ ###################################################################### # AVX2+BMI code path # -my $a5=$SZ==4?"%esi":"%rsi"; # zap $inp +my $a5=$SZ==4?"%esi":"%rsi"; # zap $inp my $PUSH8=8*2*$SZ; use integer; @@ -1831,14 +1905,22 @@ $code.=<<___; .type ${func}_avx2,\@function,3 .align 64 ${func}_avx2: +.cfi_startproc .Lavx2_shortcut: + mov %rsp,%rax # copy %rsp +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 - mov %rsp,%r11 # copy %rsp +.cfi_push %r15 sub \$`2*$SZ*$rounds+4*8+$win64*16*($SZ==4?4:6)`,%rsp shl \$4,%rdx # num*16 and \$-256*$SZ,%rsp # align stack frame @@ -1847,7 +1929,8 @@ ${func}_avx2: mov $ctx,$_ctx # save ctx, 1st arg mov $inp,$_inp # save inp, 2nd arh mov %rdx,$_end # save end pointer, "3rd" arg - mov %r11,$_rsp # save copy of %rsp + mov %rax,$_rsp # save copy of %rsp +.cfi_cfa_expression $_rsp,deref,+8 ___ $code.=<<___ if ($win64); movaps %xmm6,16*$SZ+32(%rsp) @@ -2128,6 +2211,7 @@ $code.=<<___; .Ldone_avx2: lea ($Tbl),%rsp mov $_rsp,%rsi +.cfi_def_cfa %rsi,8 vzeroupper ___ $code.=<<___ if ($win64); @@ -2141,15 +2225,23 @@ $code.=<<___ if ($win64 && $SZ>4); movaps 16*$SZ+112(%rsp),%xmm11 ___ $code.=<<___; - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue_avx2: ret +.cfi_endproc .size ${func}_avx2,.-${func}_avx2 ___ }} @@ -2209,7 +2301,6 @@ ___ $code.=<<___; mov %rax,%rsi # put aside Rsp mov 16*$SZ+3*8(%rax),%rax # pull $_rsp - lea 48(%rax),%rax mov -8(%rax),%rbx mov -16(%rax),%rbp diff --git a/crypto/sha/asm/sha512p8-ppc.pl b/crypto/sha/asm/sha512p8-ppc.pl index 4d3d3b2f..93dfef20 100755 --- a/crypto/sha/asm/sha512p8-ppc.pl +++ b/crypto/sha/asm/sha512p8-ppc.pl @@ -25,11 +25,20 @@ # sha1-ppc.pl and 1.6x slower than aes-128-cbc. Another interesting # result is degree of computational resources' utilization. POWER8 is # "massively multi-threaded chip" and difference between single- and -# maximum multi-process benchmark results tells that utlization is +# maximum multi-process benchmark results tells that utilization is # whooping 94%. For sha512-ppc.pl we get [not unimpressive] 84% and # for sha1-ppc.pl - 73%. 100% means that multi-process result equals # to single-process one, given that all threads end up on the same # physical core. +# +###################################################################### +# Believed-to-be-accurate results in cycles per processed byte [on +# little-endian system]. Numbers in square brackets are for 64-bit +# build of sha512-ppc.pl, presented for reference. +# +# POWER8 +# SHA256 9.9 [15.8] +# SHA512 6.3 [10.3] $flavour=shift; $output =shift; diff --git a/crypto/sha/build.info b/crypto/sha/build.info index 5843e508..9dffec3f 100644 --- a/crypto/sha/build.info +++ b/crypto/sha/build.info @@ -1,17 +1,21 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ - sha1dgst.c sha1_one.c sha256.c sha512.c {- $target{sha1_asm_src} -} + sha1dgst.c sha1_one.c sha256.c sha512.c {- $target{sha1_asm_src} -} \ + keccak1600.c -GENERATE[sha1-586.s]=asm/sha1-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[sha1-586.s]=asm/sha1-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[sha1-586.s]=../perlasm/x86asm.pl -GENERATE[sha256-586.s]=asm/sha256-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[sha256-586.s]=asm/sha256-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[sha256-586.s]=../perlasm/x86asm.pl -GENERATE[sha512-586.s]=asm/sha512-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[sha512-586.s]=asm/sha512-586.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[sha512-586.s]=../perlasm/x86asm.pl -GENERATE[sha1-ia64.s]=asm/sha1-ia64.pl $(CFLAGS) $(LIB_CFLAGS) -GENERATE[sha256-ia64.s]=asm/sha512-ia64.pl $(CFLAGS) $(LIB_CFLAGS) -GENERATE[sha512-ia64.s]=asm/sha512-ia64.pl $(CFLAGS) $(LIB_CFLAGS) +GENERATE[sha1-ia64.s]=asm/sha1-ia64.pl $(LIB_CFLAGS) $(LIB_CPPFLAGS) +GENERATE[sha256-ia64.s]=asm/sha512-ia64.pl $(LIB_CFLAGS) $(LIB_CPPFLAGS) +GENERATE[sha512-ia64.s]=asm/sha512-ia64.pl $(LIB_CFLAGS) $(LIB_CPPFLAGS) GENERATE[sha1-alpha.S]=asm/sha1-alpha.pl $(PERLASM_SCHEME) @@ -39,8 +43,11 @@ GENERATE[sha256-parisc.s]=asm/sha512-parisc.pl $(PERLASM_SCHEME) GENERATE[sha512-parisc.s]=asm/sha512-parisc.pl $(PERLASM_SCHEME) GENERATE[sha1-mips.S]=asm/sha1-mips.pl $(PERLASM_SCHEME) +INCLUDE[sha1-mips.o]=.. GENERATE[sha256-mips.S]=asm/sha512-mips.pl $(PERLASM_SCHEME) +INCLUDE[sha256-mips.o]=.. GENERATE[sha512-mips.S]=asm/sha512-mips.pl $(PERLASM_SCHEME) +INCLUDE[sha512-mips.o]=.. GENERATE[sha1-armv4-large.S]=asm/sha1-armv4-large.pl $(PERLASM_SCHEME) INCLUDE[sha1-armv4-large.o]=.. @@ -56,6 +63,13 @@ INCLUDE[sha256-armv8.o]=.. GENERATE[sha512-armv8.S]=asm/sha512-armv8.pl $(PERLASM_SCHEME) INCLUDE[sha512-armv8.o]=.. +GENERATE[sha1-s390x.S]=asm/sha1-s390x.pl $(PERLASM_SCHEME) +INCLUDE[sha1-s390x.o]=.. +GENERATE[sha256-s390x.S]=asm/sha512-s390x.pl $(PERLASM_SCHEME) +INCLUDE[sha256-s390x.o]=.. +GENERATE[sha512-s390x.S]=asm/sha512-s390x.pl $(PERLASM_SCHEME) +INCLUDE[sha512-s390x.o]=.. + BEGINRAW[Makefile(unix)] ##### SHA assembler implementations diff --git a/crypto/sha/keccak1600.c b/crypto/sha/keccak1600.c new file mode 100644 index 00000000..e7223486 --- /dev/null +++ b/crypto/sha/keccak1600.c @@ -0,0 +1,1246 @@ +/* + * 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 + */ + +#include +#include +#include + +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r); +void SHA3_squeeze(uint64_t A[5][5], unsigned char *out, size_t len, size_t r); + +#if !defined(KECCAK1600_ASM) || !defined(SELFTEST) + +/* + * Choose some sensible defaults + */ +#if !defined(KECCAK_REF) && !defined(KECCAK_1X) && !defined(KECCAK_1X_ALT) && \ + !defined(KECCAK_2X) && !defined(KECCAK_INPLACE) +# define KECCAK_2X /* default to KECCAK_2X variant */ +#endif + +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) +# define KECCAK_COMPLEMENTING_TRANSFORM +#endif + +#if defined(__x86_64__) || defined(__aarch64__) || \ + defined(__mips64) || defined(__ia64) || \ + (defined(__VMS) && !defined(__vax)) +/* + * These are available even in ILP32 flavours, but even then they are + * capable of performing 64-bit operations as efficiently as in *P64. + * Since it's not given that we can use sizeof(void *), just shunt it. + */ +# define BIT_INTERLEAVE (0) +#else +# define BIT_INTERLEAVE (sizeof(void *) < 8) +#endif + +#define ROL32(a, offset) (((a) << (offset)) | ((a) >> ((32 - (offset)) & 31))) + +static uint64_t ROL64(uint64_t val, int offset) +{ + if (offset == 0) { + return val; + } else if (!BIT_INTERLEAVE) { + return (val << offset) | (val >> (64-offset)); + } else { + uint32_t hi = (uint32_t)(val >> 32), lo = (uint32_t)val; + + if (offset & 1) { + uint32_t tmp = hi; + + offset >>= 1; + hi = ROL32(lo, offset); + lo = ROL32(tmp, offset + 1); + } else { + offset >>= 1; + lo = ROL32(lo, offset); + hi = ROL32(hi, offset); + } + + return ((uint64_t)hi << 32) | lo; + } +} + +static const unsigned char rhotates[5][5] = { + { 0, 1, 62, 28, 27 }, + { 36, 44, 6, 55, 20 }, + { 3, 10, 43, 25, 39 }, + { 41, 45, 15, 21, 8 }, + { 18, 2, 61, 56, 14 } +}; + +static const uint64_t iotas[] = { + BIT_INTERLEAVE ? 0x0000000000000001U : 0x0000000000000001U, + BIT_INTERLEAVE ? 0x0000008900000000U : 0x0000000000008082U, + BIT_INTERLEAVE ? 0x8000008b00000000U : 0x800000000000808aU, + BIT_INTERLEAVE ? 0x8000808000000000U : 0x8000000080008000U, + BIT_INTERLEAVE ? 0x0000008b00000001U : 0x000000000000808bU, + BIT_INTERLEAVE ? 0x0000800000000001U : 0x0000000080000001U, + BIT_INTERLEAVE ? 0x8000808800000001U : 0x8000000080008081U, + BIT_INTERLEAVE ? 0x8000008200000001U : 0x8000000000008009U, + BIT_INTERLEAVE ? 0x0000000b00000000U : 0x000000000000008aU, + BIT_INTERLEAVE ? 0x0000000a00000000U : 0x0000000000000088U, + BIT_INTERLEAVE ? 0x0000808200000001U : 0x0000000080008009U, + BIT_INTERLEAVE ? 0x0000800300000000U : 0x000000008000000aU, + BIT_INTERLEAVE ? 0x0000808b00000001U : 0x000000008000808bU, + BIT_INTERLEAVE ? 0x8000000b00000001U : 0x800000000000008bU, + BIT_INTERLEAVE ? 0x8000008a00000001U : 0x8000000000008089U, + BIT_INTERLEAVE ? 0x8000008100000001U : 0x8000000000008003U, + BIT_INTERLEAVE ? 0x8000008100000000U : 0x8000000000008002U, + BIT_INTERLEAVE ? 0x8000000800000000U : 0x8000000000000080U, + BIT_INTERLEAVE ? 0x0000008300000000U : 0x000000000000800aU, + BIT_INTERLEAVE ? 0x8000800300000000U : 0x800000008000000aU, + BIT_INTERLEAVE ? 0x8000808800000001U : 0x8000000080008081U, + BIT_INTERLEAVE ? 0x8000008800000000U : 0x8000000000008080U, + BIT_INTERLEAVE ? 0x0000800000000001U : 0x0000000080000001U, + BIT_INTERLEAVE ? 0x8000808200000000U : 0x8000000080008008U +}; + +#if defined(KECCAK_REF) +/* + * This is straightforward or "maximum clarity" implementation aiming + * to resemble section 3.2 of the FIPS PUB 202 "SHA-3 Standard: + * Permutation-Based Hash and Extendible-Output Functions" as much as + * possible. With one caveat. Because of the way C stores matrices, + * references to A[x,y] in the specification are presented as A[y][x]. + * Implementation unrolls inner x-loops so that modulo 5 operations are + * explicitly pre-computed. + */ +static void Theta(uint64_t A[5][5]) +{ + uint64_t C[5], D[5]; + size_t y; + + C[0] = A[0][0]; + C[1] = A[0][1]; + C[2] = A[0][2]; + C[3] = A[0][3]; + C[4] = A[0][4]; + + for (y = 1; y < 5; y++) { + C[0] ^= A[y][0]; + C[1] ^= A[y][1]; + C[2] ^= A[y][2]; + C[3] ^= A[y][3]; + C[4] ^= A[y][4]; + } + + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + for (y = 0; y < 5; y++) { + A[y][0] ^= D[0]; + A[y][1] ^= D[1]; + A[y][2] ^= D[2]; + A[y][3] ^= D[3]; + A[y][4] ^= D[4]; + } +} + +static void Rho(uint64_t A[5][5]) +{ + size_t y; + + for (y = 0; y < 5; y++) { + A[y][0] = ROL64(A[y][0], rhotates[y][0]); + A[y][1] = ROL64(A[y][1], rhotates[y][1]); + A[y][2] = ROL64(A[y][2], rhotates[y][2]); + A[y][3] = ROL64(A[y][3], rhotates[y][3]); + A[y][4] = ROL64(A[y][4], rhotates[y][4]); + } +} + +static void Pi(uint64_t A[5][5]) +{ + uint64_t T[5][5]; + + /* + * T = A + * A[y][x] = T[x][(3*y+x)%5] + */ + memcpy(T, A, sizeof(T)); + + A[0][0] = T[0][0]; + A[0][1] = T[1][1]; + A[0][2] = T[2][2]; + A[0][3] = T[3][3]; + A[0][4] = T[4][4]; + + A[1][0] = T[0][3]; + A[1][1] = T[1][4]; + A[1][2] = T[2][0]; + A[1][3] = T[3][1]; + A[1][4] = T[4][2]; + + A[2][0] = T[0][1]; + A[2][1] = T[1][2]; + A[2][2] = T[2][3]; + A[2][3] = T[3][4]; + A[2][4] = T[4][0]; + + A[3][0] = T[0][4]; + A[3][1] = T[1][0]; + A[3][2] = T[2][1]; + A[3][3] = T[3][2]; + A[3][4] = T[4][3]; + + A[4][0] = T[0][2]; + A[4][1] = T[1][3]; + A[4][2] = T[2][4]; + A[4][3] = T[3][0]; + A[4][4] = T[4][1]; +} + +static void Chi(uint64_t A[5][5]) +{ + uint64_t C[5]; + size_t y; + + for (y = 0; y < 5; y++) { + C[0] = A[y][0] ^ (~A[y][1] & A[y][2]); + C[1] = A[y][1] ^ (~A[y][2] & A[y][3]); + C[2] = A[y][2] ^ (~A[y][3] & A[y][4]); + C[3] = A[y][3] ^ (~A[y][4] & A[y][0]); + C[4] = A[y][4] ^ (~A[y][0] & A[y][1]); + + A[y][0] = C[0]; + A[y][1] = C[1]; + A[y][2] = C[2]; + A[y][3] = C[3]; + A[y][4] = C[4]; + } +} + +static void Iota(uint64_t A[5][5], size_t i) +{ + assert(i < (sizeof(iotas) / sizeof(iotas[0]))); + A[0][0] ^= iotas[i]; +} + +static void KeccakF1600(uint64_t A[5][5]) +{ + size_t i; + + for (i = 0; i < 24; i++) { + Theta(A); + Rho(A); + Pi(A); + Chi(A); + Iota(A, i); + } +} + +#elif defined(KECCAK_1X) +/* + * This implementation is optimization of above code featuring unroll + * of even y-loops, their fusion and code motion. It also minimizes + * temporary storage. Compiler would normally do all these things for + * you, purpose of manual optimization is to provide "unobscured" + * reference for assembly implementation [in case this approach is + * chosen for implementation on some platform]. In the nutshell it's + * equivalent of "plane-per-plane processing" approach discussed in + * section 2.4 of "Keccak implementation overview". + */ +static void Round(uint64_t A[5][5], size_t i) +{ + uint64_t C[5], E[2]; /* registers */ + uint64_t D[5], T[2][5]; /* memory */ + + assert(i < (sizeof(iotas) / sizeof(iotas[0]))); + + C[0] = A[0][0] ^ A[1][0] ^ A[2][0] ^ A[3][0] ^ A[4][0]; + C[1] = A[0][1] ^ A[1][1] ^ A[2][1] ^ A[3][1] ^ A[4][1]; + C[2] = A[0][2] ^ A[1][2] ^ A[2][2] ^ A[3][2] ^ A[4][2]; + C[3] = A[0][3] ^ A[1][3] ^ A[2][3] ^ A[3][3] ^ A[4][3]; + C[4] = A[0][4] ^ A[1][4] ^ A[2][4] ^ A[3][4] ^ A[4][4]; + +#if defined(__arm__) + D[1] = E[0] = ROL64(C[2], 1) ^ C[0]; + D[4] = E[1] = ROL64(C[0], 1) ^ C[3]; + D[0] = C[0] = ROL64(C[1], 1) ^ C[4]; + D[2] = C[1] = ROL64(C[3], 1) ^ C[1]; + D[3] = C[2] = ROL64(C[4], 1) ^ C[2]; + + T[0][0] = A[3][0] ^ C[0]; /* borrow T[0][0] */ + T[0][1] = A[0][1] ^ E[0]; /* D[1] */ + T[0][2] = A[0][2] ^ C[1]; /* D[2] */ + T[0][3] = A[0][3] ^ C[2]; /* D[3] */ + T[0][4] = A[0][4] ^ E[1]; /* D[4] */ + + C[3] = ROL64(A[3][3] ^ C[2], rhotates[3][3]); /* D[3] */ + C[4] = ROL64(A[4][4] ^ E[1], rhotates[4][4]); /* D[4] */ + C[0] = A[0][0] ^ C[0]; /* rotate by 0 */ /* D[0] */ + C[2] = ROL64(A[2][2] ^ C[1], rhotates[2][2]); /* D[2] */ + C[1] = ROL64(A[1][1] ^ E[0], rhotates[1][1]); /* D[1] */ +#else + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + T[0][0] = A[3][0] ^ D[0]; /* borrow T[0][0] */ + T[0][1] = A[0][1] ^ D[1]; + T[0][2] = A[0][2] ^ D[2]; + T[0][3] = A[0][3] ^ D[3]; + T[0][4] = A[0][4] ^ D[4]; + + C[0] = A[0][0] ^ D[0]; /* rotate by 0 */ + C[1] = ROL64(A[1][1] ^ D[1], rhotates[1][1]); + C[2] = ROL64(A[2][2] ^ D[2], rhotates[2][2]); + C[3] = ROL64(A[3][3] ^ D[3], rhotates[3][3]); + C[4] = ROL64(A[4][4] ^ D[4], rhotates[4][4]); +#endif + A[0][0] = C[0] ^ (~C[1] & C[2]) ^ iotas[i]; + A[0][1] = C[1] ^ (~C[2] & C[3]); + A[0][2] = C[2] ^ (~C[3] & C[4]); + A[0][3] = C[3] ^ (~C[4] & C[0]); + A[0][4] = C[4] ^ (~C[0] & C[1]); + + T[1][0] = A[1][0] ^ (C[3] = D[0]); + T[1][1] = A[2][1] ^ (C[4] = D[1]); /* borrow T[1][1] */ + T[1][2] = A[1][2] ^ (E[0] = D[2]); + T[1][3] = A[1][3] ^ (E[1] = D[3]); + T[1][4] = A[2][4] ^ (C[2] = D[4]); /* borrow T[1][4] */ + + C[0] = ROL64(T[0][3], rhotates[0][3]); + C[1] = ROL64(A[1][4] ^ C[2], rhotates[1][4]); /* D[4] */ + C[2] = ROL64(A[2][0] ^ C[3], rhotates[2][0]); /* D[0] */ + C[3] = ROL64(A[3][1] ^ C[4], rhotates[3][1]); /* D[1] */ + C[4] = ROL64(A[4][2] ^ E[0], rhotates[4][2]); /* D[2] */ + + A[1][0] = C[0] ^ (~C[1] & C[2]); + A[1][1] = C[1] ^ (~C[2] & C[3]); + A[1][2] = C[2] ^ (~C[3] & C[4]); + A[1][3] = C[3] ^ (~C[4] & C[0]); + A[1][4] = C[4] ^ (~C[0] & C[1]); + + C[0] = ROL64(T[0][1], rhotates[0][1]); + C[1] = ROL64(T[1][2], rhotates[1][2]); + C[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + C[3] = ROL64(A[3][4] ^ D[4], rhotates[3][4]); + C[4] = ROL64(A[4][0] ^ D[0], rhotates[4][0]); + + A[2][0] = C[0] ^ (~C[1] & C[2]); + A[2][1] = C[1] ^ (~C[2] & C[3]); + A[2][2] = C[2] ^ (~C[3] & C[4]); + A[2][3] = C[3] ^ (~C[4] & C[0]); + A[2][4] = C[4] ^ (~C[0] & C[1]); + + C[0] = ROL64(T[0][4], rhotates[0][4]); + C[1] = ROL64(T[1][0], rhotates[1][0]); + C[2] = ROL64(T[1][1], rhotates[2][1]); /* originally A[2][1] */ + C[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + C[4] = ROL64(A[4][3] ^ D[3], rhotates[4][3]); + + A[3][0] = C[0] ^ (~C[1] & C[2]); + A[3][1] = C[1] ^ (~C[2] & C[3]); + A[3][2] = C[2] ^ (~C[3] & C[4]); + A[3][3] = C[3] ^ (~C[4] & C[0]); + A[3][4] = C[4] ^ (~C[0] & C[1]); + + C[0] = ROL64(T[0][2], rhotates[0][2]); + C[1] = ROL64(T[1][3], rhotates[1][3]); + C[2] = ROL64(T[1][4], rhotates[2][4]); /* originally A[2][4] */ + C[3] = ROL64(T[0][0], rhotates[3][0]); /* originally A[3][0] */ + C[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + + A[4][0] = C[0] ^ (~C[1] & C[2]); + A[4][1] = C[1] ^ (~C[2] & C[3]); + A[4][2] = C[2] ^ (~C[3] & C[4]); + A[4][3] = C[3] ^ (~C[4] & C[0]); + A[4][4] = C[4] ^ (~C[0] & C[1]); +} + +static void KeccakF1600(uint64_t A[5][5]) +{ + size_t i; + + for (i = 0; i < 24; i++) { + Round(A, i); + } +} + +#elif defined(KECCAK_1X_ALT) +/* + * This is variant of above KECCAK_1X that reduces requirement for + * temporary storage even further, but at cost of more updates to A[][]. + * It's less suitable if A[][] is memory bound, but better if it's + * register bound. + */ + +static void Round(uint64_t A[5][5], size_t i) +{ + uint64_t C[5], D[5]; + + assert(i < (sizeof(iotas) / sizeof(iotas[0]))); + + C[0] = A[0][0] ^ A[1][0] ^ A[2][0] ^ A[3][0] ^ A[4][0]; + C[1] = A[0][1] ^ A[1][1] ^ A[2][1] ^ A[3][1] ^ A[4][1]; + C[2] = A[0][2] ^ A[1][2] ^ A[2][2] ^ A[3][2] ^ A[4][2]; + C[3] = A[0][3] ^ A[1][3] ^ A[2][3] ^ A[3][3] ^ A[4][3]; + C[4] = A[0][4] ^ A[1][4] ^ A[2][4] ^ A[3][4] ^ A[4][4]; + + D[1] = C[0] ^ ROL64(C[2], 1); + D[2] = C[1] ^ ROL64(C[3], 1); + D[3] = C[2] ^= ROL64(C[4], 1); + D[4] = C[3] ^= ROL64(C[0], 1); + D[0] = C[4] ^= ROL64(C[1], 1); + + A[0][1] ^= D[1]; + A[1][1] ^= D[1]; + A[2][1] ^= D[1]; + A[3][1] ^= D[1]; + A[4][1] ^= D[1]; + + A[0][2] ^= D[2]; + A[1][2] ^= D[2]; + A[2][2] ^= D[2]; + A[3][2] ^= D[2]; + A[4][2] ^= D[2]; + + A[0][3] ^= C[2]; + A[1][3] ^= C[2]; + A[2][3] ^= C[2]; + A[3][3] ^= C[2]; + A[4][3] ^= C[2]; + + A[0][4] ^= C[3]; + A[1][4] ^= C[3]; + A[2][4] ^= C[3]; + A[3][4] ^= C[3]; + A[4][4] ^= C[3]; + + A[0][0] ^= C[4]; + A[1][0] ^= C[4]; + A[2][0] ^= C[4]; + A[3][0] ^= C[4]; + A[4][0] ^= C[4]; + + C[1] = A[0][1]; + C[2] = A[0][2]; + C[3] = A[0][3]; + C[4] = A[0][4]; + + A[0][1] = ROL64(A[1][1], rhotates[1][1]); + A[0][2] = ROL64(A[2][2], rhotates[2][2]); + A[0][3] = ROL64(A[3][3], rhotates[3][3]); + A[0][4] = ROL64(A[4][4], rhotates[4][4]); + + A[1][1] = ROL64(A[1][4], rhotates[1][4]); + A[2][2] = ROL64(A[2][3], rhotates[2][3]); + A[3][3] = ROL64(A[3][2], rhotates[3][2]); + A[4][4] = ROL64(A[4][1], rhotates[4][1]); + + A[1][4] = ROL64(A[4][2], rhotates[4][2]); + A[2][3] = ROL64(A[3][4], rhotates[3][4]); + A[3][2] = ROL64(A[2][1], rhotates[2][1]); + A[4][1] = ROL64(A[1][3], rhotates[1][3]); + + A[4][2] = ROL64(A[2][4], rhotates[2][4]); + A[3][4] = ROL64(A[4][3], rhotates[4][3]); + A[2][1] = ROL64(A[1][2], rhotates[1][2]); + A[1][3] = ROL64(A[3][1], rhotates[3][1]); + + A[2][4] = ROL64(A[4][0], rhotates[4][0]); + A[4][3] = ROL64(A[3][0], rhotates[3][0]); + A[1][2] = ROL64(A[2][0], rhotates[2][0]); + A[3][1] = ROL64(A[1][0], rhotates[1][0]); + + A[1][0] = ROL64(C[3], rhotates[0][3]); + A[2][0] = ROL64(C[1], rhotates[0][1]); + A[3][0] = ROL64(C[4], rhotates[0][4]); + A[4][0] = ROL64(C[2], rhotates[0][2]); + + C[0] = A[0][0]; + C[1] = A[1][0]; + D[0] = A[0][1]; + D[1] = A[1][1]; + + A[0][0] ^= (~A[0][1] & A[0][2]); + A[1][0] ^= (~A[1][1] & A[1][2]); + A[0][1] ^= (~A[0][2] & A[0][3]); + A[1][1] ^= (~A[1][2] & A[1][3]); + A[0][2] ^= (~A[0][3] & A[0][4]); + A[1][2] ^= (~A[1][3] & A[1][4]); + A[0][3] ^= (~A[0][4] & C[0]); + A[1][3] ^= (~A[1][4] & C[1]); + A[0][4] ^= (~C[0] & D[0]); + A[1][4] ^= (~C[1] & D[1]); + + C[2] = A[2][0]; + C[3] = A[3][0]; + D[2] = A[2][1]; + D[3] = A[3][1]; + + A[2][0] ^= (~A[2][1] & A[2][2]); + A[3][0] ^= (~A[3][1] & A[3][2]); + A[2][1] ^= (~A[2][2] & A[2][3]); + A[3][1] ^= (~A[3][2] & A[3][3]); + A[2][2] ^= (~A[2][3] & A[2][4]); + A[3][2] ^= (~A[3][3] & A[3][4]); + A[2][3] ^= (~A[2][4] & C[2]); + A[3][3] ^= (~A[3][4] & C[3]); + A[2][4] ^= (~C[2] & D[2]); + A[3][4] ^= (~C[3] & D[3]); + + C[4] = A[4][0]; + D[4] = A[4][1]; + + A[4][0] ^= (~A[4][1] & A[4][2]); + A[4][1] ^= (~A[4][2] & A[4][3]); + A[4][2] ^= (~A[4][3] & A[4][4]); + A[4][3] ^= (~A[4][4] & C[4]); + A[4][4] ^= (~C[4] & D[4]); + A[0][0] ^= iotas[i]; +} + +static void KeccakF1600(uint64_t A[5][5]) +{ + size_t i; + + for (i = 0; i < 24; i++) { + Round(A, i); + } +} + +#elif defined(KECCAK_2X) +/* + * This implementation is variant of KECCAK_1X above with outer-most + * round loop unrolled twice. This allows to take temporary storage + * out of round procedure and simplify references to it by alternating + * it with actual data (see round loop below). Originally it was meant + * rather as reference for an assembly implementation, but it seems to + * play best with compilers [as well as provide best instruction per + * processed byte ratio at minimal round unroll factor]... + */ +static void Round(uint64_t R[5][5], uint64_t A[5][5], size_t i) +{ + uint64_t C[5], D[5]; + + assert(i < (sizeof(iotas) / sizeof(iotas[0]))); + + C[0] = A[0][0] ^ A[1][0] ^ A[2][0] ^ A[3][0] ^ A[4][0]; + C[1] = A[0][1] ^ A[1][1] ^ A[2][1] ^ A[3][1] ^ A[4][1]; + C[2] = A[0][2] ^ A[1][2] ^ A[2][2] ^ A[3][2] ^ A[4][2]; + C[3] = A[0][3] ^ A[1][3] ^ A[2][3] ^ A[3][3] ^ A[4][3]; + C[4] = A[0][4] ^ A[1][4] ^ A[2][4] ^ A[3][4] ^ A[4][4]; + + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + C[0] = A[0][0] ^ D[0]; /* rotate by 0 */ + C[1] = ROL64(A[1][1] ^ D[1], rhotates[1][1]); + C[2] = ROL64(A[2][2] ^ D[2], rhotates[2][2]); + C[3] = ROL64(A[3][3] ^ D[3], rhotates[3][3]); + C[4] = ROL64(A[4][4] ^ D[4], rhotates[4][4]); + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + R[0][0] = C[0] ^ ( C[1] | C[2]) ^ iotas[i]; + R[0][1] = C[1] ^ (~C[2] | C[3]); + R[0][2] = C[2] ^ ( C[3] & C[4]); + R[0][3] = C[3] ^ ( C[4] | C[0]); + R[0][4] = C[4] ^ ( C[0] & C[1]); +#else + R[0][0] = C[0] ^ (~C[1] & C[2]) ^ iotas[i]; + R[0][1] = C[1] ^ (~C[2] & C[3]); + R[0][2] = C[2] ^ (~C[3] & C[4]); + R[0][3] = C[3] ^ (~C[4] & C[0]); + R[0][4] = C[4] ^ (~C[0] & C[1]); +#endif + + C[0] = ROL64(A[0][3] ^ D[3], rhotates[0][3]); + C[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + C[2] = ROL64(A[2][0] ^ D[0], rhotates[2][0]); + C[3] = ROL64(A[3][1] ^ D[1], rhotates[3][1]); + C[4] = ROL64(A[4][2] ^ D[2], rhotates[4][2]); + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + R[1][0] = C[0] ^ (C[1] | C[2]); + R[1][1] = C[1] ^ (C[2] & C[3]); + R[1][2] = C[2] ^ (C[3] | ~C[4]); + R[1][3] = C[3] ^ (C[4] | C[0]); + R[1][4] = C[4] ^ (C[0] & C[1]); +#else + R[1][0] = C[0] ^ (~C[1] & C[2]); + R[1][1] = C[1] ^ (~C[2] & C[3]); + R[1][2] = C[2] ^ (~C[3] & C[4]); + R[1][3] = C[3] ^ (~C[4] & C[0]); + R[1][4] = C[4] ^ (~C[0] & C[1]); +#endif + + C[0] = ROL64(A[0][1] ^ D[1], rhotates[0][1]); + C[1] = ROL64(A[1][2] ^ D[2], rhotates[1][2]); + C[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + C[3] = ROL64(A[3][4] ^ D[4], rhotates[3][4]); + C[4] = ROL64(A[4][0] ^ D[0], rhotates[4][0]); + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + R[2][0] = C[0] ^ ( C[1] | C[2]); + R[2][1] = C[1] ^ ( C[2] & C[3]); + R[2][2] = C[2] ^ (~C[3] & C[4]); + R[2][3] = ~C[3] ^ ( C[4] | C[0]); + R[2][4] = C[4] ^ ( C[0] & C[1]); +#else + R[2][0] = C[0] ^ (~C[1] & C[2]); + R[2][1] = C[1] ^ (~C[2] & C[3]); + R[2][2] = C[2] ^ (~C[3] & C[4]); + R[2][3] = C[3] ^ (~C[4] & C[0]); + R[2][4] = C[4] ^ (~C[0] & C[1]); +#endif + + C[0] = ROL64(A[0][4] ^ D[4], rhotates[0][4]); + C[1] = ROL64(A[1][0] ^ D[0], rhotates[1][0]); + C[2] = ROL64(A[2][1] ^ D[1], rhotates[2][1]); + C[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + C[4] = ROL64(A[4][3] ^ D[3], rhotates[4][3]); + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + R[3][0] = C[0] ^ ( C[1] & C[2]); + R[3][1] = C[1] ^ ( C[2] | C[3]); + R[3][2] = C[2] ^ (~C[3] | C[4]); + R[3][3] = ~C[3] ^ ( C[4] & C[0]); + R[3][4] = C[4] ^ ( C[0] | C[1]); +#else + R[3][0] = C[0] ^ (~C[1] & C[2]); + R[3][1] = C[1] ^ (~C[2] & C[3]); + R[3][2] = C[2] ^ (~C[3] & C[4]); + R[3][3] = C[3] ^ (~C[4] & C[0]); + R[3][4] = C[4] ^ (~C[0] & C[1]); +#endif + + C[0] = ROL64(A[0][2] ^ D[2], rhotates[0][2]); + C[1] = ROL64(A[1][3] ^ D[3], rhotates[1][3]); + C[2] = ROL64(A[2][4] ^ D[4], rhotates[2][4]); + C[3] = ROL64(A[3][0] ^ D[0], rhotates[3][0]); + C[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + R[4][0] = C[0] ^ (~C[1] & C[2]); + R[4][1] = ~C[1] ^ ( C[2] | C[3]); + R[4][2] = C[2] ^ ( C[3] & C[4]); + R[4][3] = C[3] ^ ( C[4] | C[0]); + R[4][4] = C[4] ^ ( C[0] & C[1]); +#else + R[4][0] = C[0] ^ (~C[1] & C[2]); + R[4][1] = C[1] ^ (~C[2] & C[3]); + R[4][2] = C[2] ^ (~C[3] & C[4]); + R[4][3] = C[3] ^ (~C[4] & C[0]); + R[4][4] = C[4] ^ (~C[0] & C[1]); +#endif +} + +static void KeccakF1600(uint64_t A[5][5]) +{ + uint64_t T[5][5]; + size_t i; + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + A[0][1] = ~A[0][1]; + A[0][2] = ~A[0][2]; + A[1][3] = ~A[1][3]; + A[2][2] = ~A[2][2]; + A[3][2] = ~A[3][2]; + A[4][0] = ~A[4][0]; +#endif + + for (i = 0; i < 24; i += 2) { + Round(T, A, i); + Round(A, T, i + 1); + } + +#ifdef KECCAK_COMPLEMENTING_TRANSFORM + A[0][1] = ~A[0][1]; + A[0][2] = ~A[0][2]; + A[1][3] = ~A[1][3]; + A[2][2] = ~A[2][2]; + A[3][2] = ~A[3][2]; + A[4][0] = ~A[4][0]; +#endif +} + +#else /* define KECCAK_INPLACE to compile this code path */ +/* + * This implementation is KECCAK_1X from above combined 4 times with + * a twist that allows to omit temporary storage and perform in-place + * processing. It's discussed in section 2.5 of "Keccak implementation + * overview". It's likely to be best suited for processors with large + * register bank... On the other hand processor with large register + * bank can as well use KECCAK_1X_ALT, it would be as fast but much + * more compact... + */ +static void FourRounds(uint64_t A[5][5], size_t i) +{ + uint64_t B[5], C[5], D[5]; + + assert(i <= (sizeof(iotas) / sizeof(iotas[0]) - 4)); + + /* Round 4*n */ + C[0] = A[0][0] ^ A[1][0] ^ A[2][0] ^ A[3][0] ^ A[4][0]; + C[1] = A[0][1] ^ A[1][1] ^ A[2][1] ^ A[3][1] ^ A[4][1]; + C[2] = A[0][2] ^ A[1][2] ^ A[2][2] ^ A[3][2] ^ A[4][2]; + C[3] = A[0][3] ^ A[1][3] ^ A[2][3] ^ A[3][3] ^ A[4][3]; + C[4] = A[0][4] ^ A[1][4] ^ A[2][4] ^ A[3][4] ^ A[4][4]; + + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + B[0] = A[0][0] ^ D[0]; /* rotate by 0 */ + B[1] = ROL64(A[1][1] ^ D[1], rhotates[1][1]); + B[2] = ROL64(A[2][2] ^ D[2], rhotates[2][2]); + B[3] = ROL64(A[3][3] ^ D[3], rhotates[3][3]); + B[4] = ROL64(A[4][4] ^ D[4], rhotates[4][4]); + + C[0] = A[0][0] = B[0] ^ (~B[1] & B[2]) ^ iotas[i]; + C[1] = A[1][1] = B[1] ^ (~B[2] & B[3]); + C[2] = A[2][2] = B[2] ^ (~B[3] & B[4]); + C[3] = A[3][3] = B[3] ^ (~B[4] & B[0]); + C[4] = A[4][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[0][3] ^ D[3], rhotates[0][3]); + B[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + B[2] = ROL64(A[2][0] ^ D[0], rhotates[2][0]); + B[3] = ROL64(A[3][1] ^ D[1], rhotates[3][1]); + B[4] = ROL64(A[4][2] ^ D[2], rhotates[4][2]); + + C[0] ^= A[2][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[3][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[4][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[0][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[1][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[0][1] ^ D[1], rhotates[0][1]); + B[1] = ROL64(A[1][2] ^ D[2], rhotates[1][2]); + B[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + B[3] = ROL64(A[3][4] ^ D[4], rhotates[3][4]); + B[4] = ROL64(A[4][0] ^ D[0], rhotates[4][0]); + + C[0] ^= A[4][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[0][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[1][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[2][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[3][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[0][4] ^ D[4], rhotates[0][4]); + B[1] = ROL64(A[1][0] ^ D[0], rhotates[1][0]); + B[2] = ROL64(A[2][1] ^ D[1], rhotates[2][1]); + B[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + B[4] = ROL64(A[4][3] ^ D[3], rhotates[4][3]); + + C[0] ^= A[1][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[2][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[3][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[4][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[0][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[0][2] ^ D[2], rhotates[0][2]); + B[1] = ROL64(A[1][3] ^ D[3], rhotates[1][3]); + B[2] = ROL64(A[2][4] ^ D[4], rhotates[2][4]); + B[3] = ROL64(A[3][0] ^ D[0], rhotates[3][0]); + B[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + + C[0] ^= A[3][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[4][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[0][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[1][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[2][4] = B[4] ^ (~B[0] & B[1]); + + /* Round 4*n+1 */ + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + B[0] = A[0][0] ^ D[0]; /* rotate by 0 */ + B[1] = ROL64(A[3][1] ^ D[1], rhotates[1][1]); + B[2] = ROL64(A[1][2] ^ D[2], rhotates[2][2]); + B[3] = ROL64(A[4][3] ^ D[3], rhotates[3][3]); + B[4] = ROL64(A[2][4] ^ D[4], rhotates[4][4]); + + C[0] = A[0][0] = B[0] ^ (~B[1] & B[2]) ^ iotas[i + 1]; + C[1] = A[3][1] = B[1] ^ (~B[2] & B[3]); + C[2] = A[1][2] = B[2] ^ (~B[3] & B[4]); + C[3] = A[4][3] = B[3] ^ (~B[4] & B[0]); + C[4] = A[2][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[3][3] ^ D[3], rhotates[0][3]); + B[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + B[2] = ROL64(A[4][0] ^ D[0], rhotates[2][0]); + B[3] = ROL64(A[2][1] ^ D[1], rhotates[3][1]); + B[4] = ROL64(A[0][2] ^ D[2], rhotates[4][2]); + + C[0] ^= A[4][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[2][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[0][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[3][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[1][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[1][1] ^ D[1], rhotates[0][1]); + B[1] = ROL64(A[4][2] ^ D[2], rhotates[1][2]); + B[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + B[3] = ROL64(A[0][4] ^ D[4], rhotates[3][4]); + B[4] = ROL64(A[3][0] ^ D[0], rhotates[4][0]); + + C[0] ^= A[3][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[1][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[4][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[2][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[0][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[4][4] ^ D[4], rhotates[0][4]); + B[1] = ROL64(A[2][0] ^ D[0], rhotates[1][0]); + B[2] = ROL64(A[0][1] ^ D[1], rhotates[2][1]); + B[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + B[4] = ROL64(A[1][3] ^ D[3], rhotates[4][3]); + + C[0] ^= A[2][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[0][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[3][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[1][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[4][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[2][2] ^ D[2], rhotates[0][2]); + B[1] = ROL64(A[0][3] ^ D[3], rhotates[1][3]); + B[2] = ROL64(A[3][4] ^ D[4], rhotates[2][4]); + B[3] = ROL64(A[1][0] ^ D[0], rhotates[3][0]); + B[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + + C[0] ^= A[1][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[4][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[2][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[0][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[3][4] = B[4] ^ (~B[0] & B[1]); + + /* Round 4*n+2 */ + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + B[0] = A[0][0] ^ D[0]; /* rotate by 0 */ + B[1] = ROL64(A[2][1] ^ D[1], rhotates[1][1]); + B[2] = ROL64(A[4][2] ^ D[2], rhotates[2][2]); + B[3] = ROL64(A[1][3] ^ D[3], rhotates[3][3]); + B[4] = ROL64(A[3][4] ^ D[4], rhotates[4][4]); + + C[0] = A[0][0] = B[0] ^ (~B[1] & B[2]) ^ iotas[i + 2]; + C[1] = A[2][1] = B[1] ^ (~B[2] & B[3]); + C[2] = A[4][2] = B[2] ^ (~B[3] & B[4]); + C[3] = A[1][3] = B[3] ^ (~B[4] & B[0]); + C[4] = A[3][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[4][3] ^ D[3], rhotates[0][3]); + B[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + B[2] = ROL64(A[3][0] ^ D[0], rhotates[2][0]); + B[3] = ROL64(A[0][1] ^ D[1], rhotates[3][1]); + B[4] = ROL64(A[2][2] ^ D[2], rhotates[4][2]); + + C[0] ^= A[3][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[0][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[2][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[4][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[1][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[3][1] ^ D[1], rhotates[0][1]); + B[1] = ROL64(A[0][2] ^ D[2], rhotates[1][2]); + B[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + B[3] = ROL64(A[4][4] ^ D[4], rhotates[3][4]); + B[4] = ROL64(A[1][0] ^ D[0], rhotates[4][0]); + + C[0] ^= A[1][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[3][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[0][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[2][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[4][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[2][4] ^ D[4], rhotates[0][4]); + B[1] = ROL64(A[4][0] ^ D[0], rhotates[1][0]); + B[2] = ROL64(A[1][1] ^ D[1], rhotates[2][1]); + B[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + B[4] = ROL64(A[0][3] ^ D[3], rhotates[4][3]); + + C[0] ^= A[4][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[1][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[3][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[0][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[2][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[1][2] ^ D[2], rhotates[0][2]); + B[1] = ROL64(A[3][3] ^ D[3], rhotates[1][3]); + B[2] = ROL64(A[0][4] ^ D[4], rhotates[2][4]); + B[3] = ROL64(A[2][0] ^ D[0], rhotates[3][0]); + B[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + + C[0] ^= A[2][0] = B[0] ^ (~B[1] & B[2]); + C[1] ^= A[4][1] = B[1] ^ (~B[2] & B[3]); + C[2] ^= A[1][2] = B[2] ^ (~B[3] & B[4]); + C[3] ^= A[3][3] = B[3] ^ (~B[4] & B[0]); + C[4] ^= A[0][4] = B[4] ^ (~B[0] & B[1]); + + /* Round 4*n+3 */ + D[0] = ROL64(C[1], 1) ^ C[4]; + D[1] = ROL64(C[2], 1) ^ C[0]; + D[2] = ROL64(C[3], 1) ^ C[1]; + D[3] = ROL64(C[4], 1) ^ C[2]; + D[4] = ROL64(C[0], 1) ^ C[3]; + + B[0] = A[0][0] ^ D[0]; /* rotate by 0 */ + B[1] = ROL64(A[0][1] ^ D[1], rhotates[1][1]); + B[2] = ROL64(A[0][2] ^ D[2], rhotates[2][2]); + B[3] = ROL64(A[0][3] ^ D[3], rhotates[3][3]); + B[4] = ROL64(A[0][4] ^ D[4], rhotates[4][4]); + + /* C[0] = */ A[0][0] = B[0] ^ (~B[1] & B[2]) ^ iotas[i + 3]; + /* C[1] = */ A[0][1] = B[1] ^ (~B[2] & B[3]); + /* C[2] = */ A[0][2] = B[2] ^ (~B[3] & B[4]); + /* C[3] = */ A[0][3] = B[3] ^ (~B[4] & B[0]); + /* C[4] = */ A[0][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[1][3] ^ D[3], rhotates[0][3]); + B[1] = ROL64(A[1][4] ^ D[4], rhotates[1][4]); + B[2] = ROL64(A[1][0] ^ D[0], rhotates[2][0]); + B[3] = ROL64(A[1][1] ^ D[1], rhotates[3][1]); + B[4] = ROL64(A[1][2] ^ D[2], rhotates[4][2]); + + /* C[0] ^= */ A[1][0] = B[0] ^ (~B[1] & B[2]); + /* C[1] ^= */ A[1][1] = B[1] ^ (~B[2] & B[3]); + /* C[2] ^= */ A[1][2] = B[2] ^ (~B[3] & B[4]); + /* C[3] ^= */ A[1][3] = B[3] ^ (~B[4] & B[0]); + /* C[4] ^= */ A[1][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[2][1] ^ D[1], rhotates[0][1]); + B[1] = ROL64(A[2][2] ^ D[2], rhotates[1][2]); + B[2] = ROL64(A[2][3] ^ D[3], rhotates[2][3]); + B[3] = ROL64(A[2][4] ^ D[4], rhotates[3][4]); + B[4] = ROL64(A[2][0] ^ D[0], rhotates[4][0]); + + /* C[0] ^= */ A[2][0] = B[0] ^ (~B[1] & B[2]); + /* C[1] ^= */ A[2][1] = B[1] ^ (~B[2] & B[3]); + /* C[2] ^= */ A[2][2] = B[2] ^ (~B[3] & B[4]); + /* C[3] ^= */ A[2][3] = B[3] ^ (~B[4] & B[0]); + /* C[4] ^= */ A[2][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[3][4] ^ D[4], rhotates[0][4]); + B[1] = ROL64(A[3][0] ^ D[0], rhotates[1][0]); + B[2] = ROL64(A[3][1] ^ D[1], rhotates[2][1]); + B[3] = ROL64(A[3][2] ^ D[2], rhotates[3][2]); + B[4] = ROL64(A[3][3] ^ D[3], rhotates[4][3]); + + /* C[0] ^= */ A[3][0] = B[0] ^ (~B[1] & B[2]); + /* C[1] ^= */ A[3][1] = B[1] ^ (~B[2] & B[3]); + /* C[2] ^= */ A[3][2] = B[2] ^ (~B[3] & B[4]); + /* C[3] ^= */ A[3][3] = B[3] ^ (~B[4] & B[0]); + /* C[4] ^= */ A[3][4] = B[4] ^ (~B[0] & B[1]); + + B[0] = ROL64(A[4][2] ^ D[2], rhotates[0][2]); + B[1] = ROL64(A[4][3] ^ D[3], rhotates[1][3]); + B[2] = ROL64(A[4][4] ^ D[4], rhotates[2][4]); + B[3] = ROL64(A[4][0] ^ D[0], rhotates[3][0]); + B[4] = ROL64(A[4][1] ^ D[1], rhotates[4][1]); + + /* C[0] ^= */ A[4][0] = B[0] ^ (~B[1] & B[2]); + /* C[1] ^= */ A[4][1] = B[1] ^ (~B[2] & B[3]); + /* C[2] ^= */ A[4][2] = B[2] ^ (~B[3] & B[4]); + /* C[3] ^= */ A[4][3] = B[3] ^ (~B[4] & B[0]); + /* C[4] ^= */ A[4][4] = B[4] ^ (~B[0] & B[1]); +} + +static void KeccakF1600(uint64_t A[5][5]) +{ + size_t i; + + for (i = 0; i < 24; i += 4) { + FourRounds(A, i); + } +} + +#endif + +static uint64_t BitInterleave(uint64_t Ai) +{ + if (BIT_INTERLEAVE) { + uint32_t hi = (uint32_t)(Ai >> 32), lo = (uint32_t)Ai; + uint32_t t0, t1; + + t0 = lo & 0x55555555; + t0 |= t0 >> 1; t0 &= 0x33333333; + t0 |= t0 >> 2; t0 &= 0x0f0f0f0f; + t0 |= t0 >> 4; t0 &= 0x00ff00ff; + t0 |= t0 >> 8; t0 &= 0x0000ffff; + + t1 = hi & 0x55555555; + t1 |= t1 >> 1; t1 &= 0x33333333; + t1 |= t1 >> 2; t1 &= 0x0f0f0f0f; + t1 |= t1 >> 4; t1 &= 0x00ff00ff; + t1 |= t1 >> 8; t1 <<= 16; + + lo &= 0xaaaaaaaa; + lo |= lo << 1; lo &= 0xcccccccc; + lo |= lo << 2; lo &= 0xf0f0f0f0; + lo |= lo << 4; lo &= 0xff00ff00; + lo |= lo << 8; lo >>= 16; + + hi &= 0xaaaaaaaa; + hi |= hi << 1; hi &= 0xcccccccc; + hi |= hi << 2; hi &= 0xf0f0f0f0; + hi |= hi << 4; hi &= 0xff00ff00; + hi |= hi << 8; hi &= 0xffff0000; + + Ai = ((uint64_t)(hi | lo) << 32) | (t1 | t0); + } + + return Ai; +} + +static uint64_t BitDeinterleave(uint64_t Ai) +{ + if (BIT_INTERLEAVE) { + uint32_t hi = (uint32_t)(Ai >> 32), lo = (uint32_t)Ai; + uint32_t t0, t1; + + t0 = lo & 0x0000ffff; + t0 |= t0 << 8; t0 &= 0x00ff00ff; + t0 |= t0 << 4; t0 &= 0x0f0f0f0f; + t0 |= t0 << 2; t0 &= 0x33333333; + t0 |= t0 << 1; t0 &= 0x55555555; + + t1 = hi << 16; + t1 |= t1 >> 8; t1 &= 0xff00ff00; + t1 |= t1 >> 4; t1 &= 0xf0f0f0f0; + t1 |= t1 >> 2; t1 &= 0xcccccccc; + t1 |= t1 >> 1; t1 &= 0xaaaaaaaa; + + lo >>= 16; + lo |= lo << 8; lo &= 0x00ff00ff; + lo |= lo << 4; lo &= 0x0f0f0f0f; + lo |= lo << 2; lo &= 0x33333333; + lo |= lo << 1; lo &= 0x55555555; + + hi &= 0xffff0000; + hi |= hi >> 8; hi &= 0xff00ff00; + hi |= hi >> 4; hi &= 0xf0f0f0f0; + hi |= hi >> 2; hi &= 0xcccccccc; + hi |= hi >> 1; hi &= 0xaaaaaaaa; + + Ai = ((uint64_t)(hi | lo) << 32) | (t1 | t0); + } + + return Ai; +} + +/* + * SHA3_absorb can be called multiple times, but at each invocation + * largest multiple of |r| out of |len| bytes are processed. Then + * remaining amount of bytes is returned. This is done to spare caller + * trouble of calculating the largest multiple of |r|. |r| can be viewed + * as blocksize. It is commonly (1600 - 256*n)/8, e.g. 168, 136, 104, + * 72, but can also be (1600 - 448)/8 = 144. All this means that message + * padding and intermediate sub-block buffering, byte- or bitwise, is + * caller's responsibility. + */ +size_t SHA3_absorb(uint64_t A[5][5], const unsigned char *inp, size_t len, + size_t r) +{ + uint64_t *A_flat = (uint64_t *)A; + size_t i, w = r / 8; + + assert(r < (25 * sizeof(A[0][0])) && (r % 8) == 0); + + while (len >= r) { + for (i = 0; i < w; i++) { + uint64_t Ai = (uint64_t)inp[0] | (uint64_t)inp[1] << 8 | + (uint64_t)inp[2] << 16 | (uint64_t)inp[3] << 24 | + (uint64_t)inp[4] << 32 | (uint64_t)inp[5] << 40 | + (uint64_t)inp[6] << 48 | (uint64_t)inp[7] << 56; + inp += 8; + + A_flat[i] ^= BitInterleave(Ai); + } + KeccakF1600(A); + len -= r; + } + + return len; +} + +/* + * SHA3_squeeze is called once at the end to generate |out| hash value + * of |len| bytes. + */ +void SHA3_squeeze(uint64_t A[5][5], unsigned char *out, size_t len, size_t r) +{ + uint64_t *A_flat = (uint64_t *)A; + size_t i, w = r / 8; + + assert(r < (25 * sizeof(A[0][0])) && (r % 8) == 0); + + while (len != 0) { + for (i = 0; i < w && len != 0; i++) { + uint64_t Ai = BitDeinterleave(A_flat[i]); + + if (len < 8) { + for (i = 0; i < len; i++) { + *out++ = (unsigned char)Ai; + Ai >>= 8; + } + return; + } + + out[0] = (unsigned char)(Ai); + out[1] = (unsigned char)(Ai >> 8); + out[2] = (unsigned char)(Ai >> 16); + out[3] = (unsigned char)(Ai >> 24); + out[4] = (unsigned char)(Ai >> 32); + out[5] = (unsigned char)(Ai >> 40); + out[6] = (unsigned char)(Ai >> 48); + out[7] = (unsigned char)(Ai >> 56); + out += 8; + len -= 8; + } + if (len) + KeccakF1600(A); + } +} +#endif + +#ifdef SELFTEST +/* + * Post-padding one-shot implementations would look as following: + * + * SHA3_224 SHA3_sponge(inp, len, out, 224/8, (1600-448)/8); + * SHA3_256 SHA3_sponge(inp, len, out, 256/8, (1600-512)/8); + * SHA3_384 SHA3_sponge(inp, len, out, 384/8, (1600-768)/8); + * SHA3_512 SHA3_sponge(inp, len, out, 512/8, (1600-1024)/8); + * SHAKE_128 SHA3_sponge(inp, len, out, d, (1600-256)/8); + * SHAKE_256 SHA3_sponge(inp, len, out, d, (1600-512)/8); + */ + +void SHA3_sponge(const unsigned char *inp, size_t len, + unsigned char *out, size_t d, size_t r) +{ + uint64_t A[5][5]; + + memset(A, 0, sizeof(A)); + SHA3_absorb(A, inp, len, r); + SHA3_squeeze(A, out, d, r); +} + +# include + +int main() +{ + /* + * This is 5-bit SHAKE128 test from http://csrc.nist.gov/groups/ST/toolkit/examples.html#aHashing + */ + unsigned char test[168] = { '\xf3', '\x3' }; + unsigned char out[512]; + size_t i; + static const unsigned char result[512] = { + 0x2E, 0x0A, 0xBF, 0xBA, 0x83, 0xE6, 0x72, 0x0B, + 0xFB, 0xC2, 0x25, 0xFF, 0x6B, 0x7A, 0xB9, 0xFF, + 0xCE, 0x58, 0xBA, 0x02, 0x7E, 0xE3, 0xD8, 0x98, + 0x76, 0x4F, 0xEF, 0x28, 0x7D, 0xDE, 0xCC, 0xCA, + 0x3E, 0x6E, 0x59, 0x98, 0x41, 0x1E, 0x7D, 0xDB, + 0x32, 0xF6, 0x75, 0x38, 0xF5, 0x00, 0xB1, 0x8C, + 0x8C, 0x97, 0xC4, 0x52, 0xC3, 0x70, 0xEA, 0x2C, + 0xF0, 0xAF, 0xCA, 0x3E, 0x05, 0xDE, 0x7E, 0x4D, + 0xE2, 0x7F, 0xA4, 0x41, 0xA9, 0xCB, 0x34, 0xFD, + 0x17, 0xC9, 0x78, 0xB4, 0x2D, 0x5B, 0x7E, 0x7F, + 0x9A, 0xB1, 0x8F, 0xFE, 0xFF, 0xC3, 0xC5, 0xAC, + 0x2F, 0x3A, 0x45, 0x5E, 0xEB, 0xFD, 0xC7, 0x6C, + 0xEA, 0xEB, 0x0A, 0x2C, 0xCA, 0x22, 0xEE, 0xF6, + 0xE6, 0x37, 0xF4, 0xCA, 0xBE, 0x5C, 0x51, 0xDE, + 0xD2, 0xE3, 0xFA, 0xD8, 0xB9, 0x52, 0x70, 0xA3, + 0x21, 0x84, 0x56, 0x64, 0xF1, 0x07, 0xD1, 0x64, + 0x96, 0xBB, 0x7A, 0xBF, 0xBE, 0x75, 0x04, 0xB6, + 0xED, 0xE2, 0xE8, 0x9E, 0x4B, 0x99, 0x6F, 0xB5, + 0x8E, 0xFD, 0xC4, 0x18, 0x1F, 0x91, 0x63, 0x38, + 0x1C, 0xBE, 0x7B, 0xC0, 0x06, 0xA7, 0xA2, 0x05, + 0x98, 0x9C, 0x52, 0x6C, 0xD1, 0xBD, 0x68, 0x98, + 0x36, 0x93, 0xB4, 0xBD, 0xC5, 0x37, 0x28, 0xB2, + 0x41, 0xC1, 0xCF, 0xF4, 0x2B, 0xB6, 0x11, 0x50, + 0x2C, 0x35, 0x20, 0x5C, 0xAB, 0xB2, 0x88, 0x75, + 0x56, 0x55, 0xD6, 0x20, 0xC6, 0x79, 0x94, 0xF0, + 0x64, 0x51, 0x18, 0x7F, 0x6F, 0xD1, 0x7E, 0x04, + 0x66, 0x82, 0xBA, 0x12, 0x86, 0x06, 0x3F, 0xF8, + 0x8F, 0xE2, 0x50, 0x8D, 0x1F, 0xCA, 0xF9, 0x03, + 0x5A, 0x12, 0x31, 0xAD, 0x41, 0x50, 0xA9, 0xC9, + 0xB2, 0x4C, 0x9B, 0x2D, 0x66, 0xB2, 0xAD, 0x1B, + 0xDE, 0x0B, 0xD0, 0xBB, 0xCB, 0x8B, 0xE0, 0x5B, + 0x83, 0x52, 0x29, 0xEF, 0x79, 0x19, 0x73, 0x73, + 0x23, 0x42, 0x44, 0x01, 0xE1, 0xD8, 0x37, 0xB6, + 0x6E, 0xB4, 0xE6, 0x30, 0xFF, 0x1D, 0xE7, 0x0C, + 0xB3, 0x17, 0xC2, 0xBA, 0xCB, 0x08, 0x00, 0x1D, + 0x34, 0x77, 0xB7, 0xA7, 0x0A, 0x57, 0x6D, 0x20, + 0x86, 0x90, 0x33, 0x58, 0x9D, 0x85, 0xA0, 0x1D, + 0xDB, 0x2B, 0x66, 0x46, 0xC0, 0x43, 0xB5, 0x9F, + 0xC0, 0x11, 0x31, 0x1D, 0xA6, 0x66, 0xFA, 0x5A, + 0xD1, 0xD6, 0x38, 0x7F, 0xA9, 0xBC, 0x40, 0x15, + 0xA3, 0x8A, 0x51, 0xD1, 0xDA, 0x1E, 0xA6, 0x1D, + 0x64, 0x8D, 0xC8, 0xE3, 0x9A, 0x88, 0xB9, 0xD6, + 0x22, 0xBD, 0xE2, 0x07, 0xFD, 0xAB, 0xC6, 0xF2, + 0x82, 0x7A, 0x88, 0x0C, 0x33, 0x0B, 0xBF, 0x6D, + 0xF7, 0x33, 0x77, 0x4B, 0x65, 0x3E, 0x57, 0x30, + 0x5D, 0x78, 0xDC, 0xE1, 0x12, 0xF1, 0x0A, 0x2C, + 0x71, 0xF4, 0xCD, 0xAD, 0x92, 0xED, 0x11, 0x3E, + 0x1C, 0xEA, 0x63, 0xB9, 0x19, 0x25, 0xED, 0x28, + 0x19, 0x1E, 0x6D, 0xBB, 0xB5, 0xAA, 0x5A, 0x2A, + 0xFD, 0xA5, 0x1F, 0xC0, 0x5A, 0x3A, 0xF5, 0x25, + 0x8B, 0x87, 0x66, 0x52, 0x43, 0x55, 0x0F, 0x28, + 0x94, 0x8A, 0xE2, 0xB8, 0xBE, 0xB6, 0xBC, 0x9C, + 0x77, 0x0B, 0x35, 0xF0, 0x67, 0xEA, 0xA6, 0x41, + 0xEF, 0xE6, 0x5B, 0x1A, 0x44, 0x90, 0x9D, 0x1B, + 0x14, 0x9F, 0x97, 0xEE, 0xA6, 0x01, 0x39, 0x1C, + 0x60, 0x9E, 0xC8, 0x1D, 0x19, 0x30, 0xF5, 0x7C, + 0x18, 0xA4, 0xE0, 0xFA, 0xB4, 0x91, 0xD1, 0xCA, + 0xDF, 0xD5, 0x04, 0x83, 0x44, 0x9E, 0xDC, 0x0F, + 0x07, 0xFF, 0xB2, 0x4D, 0x2C, 0x6F, 0x9A, 0x9A, + 0x3B, 0xFF, 0x39, 0xAE, 0x3D, 0x57, 0xF5, 0x60, + 0x65, 0x4D, 0x7D, 0x75, 0xC9, 0x08, 0xAB, 0xE6, + 0x25, 0x64, 0x75, 0x3E, 0xAC, 0x39, 0xD7, 0x50, + 0x3D, 0xA6, 0xD3, 0x7C, 0x2E, 0x32, 0xE1, 0xAF, + 0x3B, 0x8A, 0xEC, 0x8A, 0xE3, 0x06, 0x9C, 0xD9 + }; + + test[167] = '\x80'; + SHA3_sponge(test, sizeof(test), out, sizeof(out), sizeof(test)); + + /* + * Rationale behind keeping output [formatted as below] is that + * one should be able to redirect it to a file, then copy-n-paste + * final "output val" from official example to another file, and + * compare the two with diff(1). + */ + for (i = 0; i < sizeof(out);) { + printf("%02X", out[i]); + printf(++i % 16 && i != sizeof(out) ? " " : "\n"); + } + + if (memcmp(out,result,sizeof(out))) { + fprintf(stderr,"failure\n"); + return 1; + } else { + fprintf(stderr,"success\n"); + return 0; + } +} +#endif diff --git a/crypto/sha/sha1_one.c b/crypto/sha/sha1_one.c index 273ab08d..e5b38211 100644 --- a/crypto/sha/sha1_one.c +++ b/crypto/sha/sha1_one.c @@ -24,5 +24,5 @@ unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md) SHA1_Update(&c, d, n); SHA1_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); - return (md); + return md; } diff --git a/crypto/sha/sha256.c b/crypto/sha/sha256.c index 5e7ba439..bf78f075 100644 --- a/crypto/sha/sha256.c +++ b/crypto/sha/sha256.c @@ -57,7 +57,7 @@ unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md) SHA256_Update(&c, d, n); SHA256_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); - return (md); + return md; } unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) @@ -71,7 +71,7 @@ unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md) SHA256_Update(&c, d, n); SHA256_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); - return (md); + return md; } int SHA224_Update(SHA256_CTX *c, const void *data, size_t len) diff --git a/crypto/sha/sha512.c b/crypto/sha/sha512.c index e94de437..50b65ee8 100644 --- a/crypto/sha/sha512.c +++ b/crypto/sha/sha512.c @@ -1,5 +1,5 @@ /* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -41,7 +41,6 @@ * As this implementation relies on 64-bit integer type, it's totally * inappropriate for platforms which don't support it, most notably * 16-bit platforms. - * */ #include #include @@ -51,6 +50,7 @@ #include #include "internal/cryptlib.h" +#include "internal/sha.h" #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) || \ @@ -60,6 +60,42 @@ # define SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA #endif +int sha512_224_init(SHA512_CTX *c) +{ + c->h[0] = U64(0x8c3d37c819544da2); + c->h[1] = U64(0x73e1996689dcd4d6); + c->h[2] = U64(0x1dfab7ae32ff9c82); + c->h[3] = U64(0x679dd514582f9fcf); + c->h[4] = U64(0x0f6d2b697bd44da8); + c->h[5] = U64(0x77e36f7304c48942); + c->h[6] = U64(0x3f9d85a86a1d36c8); + c->h[7] = U64(0x1112e6ad91d692a1); + + c->Nl = 0; + c->Nh = 0; + c->num = 0; + c->md_len = SHA224_DIGEST_LENGTH; + return 1; +} + +int sha512_256_init(SHA512_CTX *c) +{ + c->h[0] = U64(0x22312194fc2bf72c); + c->h[1] = U64(0x9f555fa3c84c64c2); + c->h[2] = U64(0x2393b86b6f53b151); + c->h[3] = U64(0x963877195940eabd); + c->h[4] = U64(0x96283ee2a88effe3); + c->h[5] = U64(0xbe5e1e2553863992); + c->h[6] = U64(0x2b0199fc2c85b8aa); + c->h[7] = U64(0x0eb72ddc81c52ca2); + + c->Nl = 0; + c->Nh = 0; + c->num = 0; + c->md_len = SHA256_DIGEST_LENGTH; + return 1; +} + int SHA384_Init(SHA512_CTX *c) { c->h[0] = U64(0xcbbb9d5dc1059ed8); @@ -144,6 +180,46 @@ int SHA512_Final(unsigned char *md, SHA512_CTX *c) switch (c->md_len) { /* Let compiler decide if it's appropriate to unroll... */ + case SHA224_DIGEST_LENGTH: + for (n = 0; n < SHA224_DIGEST_LENGTH / 8; n++) { + SHA_LONG64 t = c->h[n]; + + *(md++) = (unsigned char)(t >> 56); + *(md++) = (unsigned char)(t >> 48); + *(md++) = (unsigned char)(t >> 40); + *(md++) = (unsigned char)(t >> 32); + *(md++) = (unsigned char)(t >> 24); + *(md++) = (unsigned char)(t >> 16); + *(md++) = (unsigned char)(t >> 8); + *(md++) = (unsigned char)(t); + } + /* + * For 224 bits, there are four bytes left over that have to be + * processed separately. + */ + { + SHA_LONG64 t = c->h[SHA224_DIGEST_LENGTH / 8]; + + *(md++) = (unsigned char)(t >> 56); + *(md++) = (unsigned char)(t >> 48); + *(md++) = (unsigned char)(t >> 40); + *(md++) = (unsigned char)(t >> 32); + } + break; + case SHA256_DIGEST_LENGTH: + for (n = 0; n < SHA256_DIGEST_LENGTH / 8; n++) { + SHA_LONG64 t = c->h[n]; + + *(md++) = (unsigned char)(t >> 56); + *(md++) = (unsigned char)(t >> 48); + *(md++) = (unsigned char)(t >> 40); + *(md++) = (unsigned char)(t >> 32); + *(md++) = (unsigned char)(t >> 24); + *(md++) = (unsigned char)(t >> 16); + *(md++) = (unsigned char)(t >> 8); + *(md++) = (unsigned char)(t); + } + break; case SHA384_DIGEST_LENGTH: for (n = 0; n < SHA384_DIGEST_LENGTH / 8; n++) { SHA_LONG64 t = c->h[n]; @@ -258,7 +334,7 @@ unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md) SHA512_Update(&c, d, n); SHA512_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); - return (md); + return md; } unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md) @@ -272,7 +348,7 @@ unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md) SHA512_Update(&c, d, n); SHA512_Final(md, &c); OPENSSL_cleanse(&c, sizeof(c)); - return (md); + return md; } #ifndef SHA512_ASM @@ -399,9 +475,6 @@ static SHA_LONG64 __fastcall __pull64be(const void *x) } # endif # define PULL64(x) __pull64be(&(x)) -# if _MSC_VER<=1200 -# pragma inline_depth(0) -# endif # endif # endif # endif diff --git a/crypto/sha/sha_locl.h b/crypto/sha/sha_locl.h index 918278a8..4e5a0903 100644 --- a/crypto/sha/sha_locl.h +++ b/crypto/sha/sha_locl.h @@ -67,11 +67,12 @@ int HASH_INIT(SHA_CTX *c) #define K_60_79 0xca62c1d6UL /* - * As pointed out by Wei Dai , F() below can be simplified - * to the code in F_00_19. Wei attributes these optimisations to Peter - * Gutmann's SHS code, and he attributes it to Rich Schroeppel. #define - * F(x,y,z) (((x) & (y)) | ((~(x)) & (z))) I've just become aware of another - * tweak to be made, again from Wei Dai, in F_40_59, (x&a)|(y&a) -> (x|y)&a + * As pointed out by Wei Dai, F() below can be simplified to the code in + * F_00_19. Wei attributes these optimizations to Peter Gutmann's SHS code, + * and he attributes it to Rich Schroeppel. + * #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z))) + * I've just become aware of another tweak to be made, again from Wei Dai, + * in F_40_59, (x&a)|(y&a) -> (x|y)&a */ #define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d)) #define F_20_39(b,c,d) ((b) ^ (c) ^ (d)) @@ -120,7 +121,6 @@ int HASH_INIT(SHA_CTX *c) * "find" this expectation reasonable:-( On order to make such * compilers generate better code I replace X[] with a bunch of * X0, X1, etc. See the function body below... - * */ # define X(i) XX##i # else diff --git a/crypto/siphash/build.info b/crypto/siphash/build.info new file mode 100644 index 00000000..4166344a --- /dev/null +++ b/crypto/siphash/build.info @@ -0,0 +1,5 @@ +LIBS=../../libcrypto +SOURCE[../../libcrypto]=\ + siphash.c \ + siphash_pmeth.c \ + siphash_ameth.c diff --git a/crypto/siphash/siphash.c b/crypto/siphash/siphash.c new file mode 100644 index 00000000..72fd5198 --- /dev/null +++ b/crypto/siphash/siphash.c @@ -0,0 +1,234 @@ +/* + * 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 + */ + +/* Based on https://131002.net/siphash C reference implementation */ +/* + SipHash reference C implementation + + Copyright (c) 2012-2016 Jean-Philippe Aumasson + Copyright (c) 2012-2014 Daniel J. Bernstein + + To the extent possible under law, the author(s) have dedicated all copyright + and related and neighboring rights to this software to the public domain + worldwide. This software is distributed without any warranty. + + You should have received a copy of the CC0 Public Domain Dedication along + with this software. If not, see + . + */ + +#include +#include +#include + +#include "internal/siphash.h" +#include "siphash_local.h" + +/* default: SipHash-2-4 */ +#define SIPHASH_C_ROUNDS 2 +#define SIPHASH_D_ROUNDS 4 + +#define ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b)))) + +#define U32TO8_LE(p, v) \ + (p)[0] = (uint8_t)((v)); \ + (p)[1] = (uint8_t)((v) >> 8); \ + (p)[2] = (uint8_t)((v) >> 16); \ + (p)[3] = (uint8_t)((v) >> 24); + +#define U64TO8_LE(p, v) \ + U32TO8_LE((p), (uint32_t)((v))); \ + U32TO8_LE((p) + 4, (uint32_t)((v) >> 32)); + +#define U8TO64_LE(p) \ + (((uint64_t)((p)[0])) | ((uint64_t)((p)[1]) << 8) | \ + ((uint64_t)((p)[2]) << 16) | ((uint64_t)((p)[3]) << 24) | \ + ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40) | \ + ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56)) + +#define SIPROUND \ + do { \ + v0 += v1; \ + v1 = ROTL(v1, 13); \ + v1 ^= v0; \ + v0 = ROTL(v0, 32); \ + v2 += v3; \ + v3 = ROTL(v3, 16); \ + v3 ^= v2; \ + v0 += v3; \ + v3 = ROTL(v3, 21); \ + v3 ^= v0; \ + v2 += v1; \ + v1 = ROTL(v1, 17); \ + v1 ^= v2; \ + v2 = ROTL(v2, 32); \ + } while (0) + +size_t SipHash_ctx_size(void) +{ + return sizeof(SIPHASH); +} + +size_t SipHash_hash_size(SIPHASH *ctx) +{ + return ctx->hash_size; +} + +/* hash_size = crounds = drounds = 0 means SipHash24 with 16-byte output */ +int SipHash_Init(SIPHASH *ctx, const unsigned char *k, int hash_size, int crounds, int drounds) +{ + uint64_t k0 = U8TO64_LE(k); + uint64_t k1 = U8TO64_LE(k + 8); + + if (hash_size == 0) + hash_size = SIPHASH_MAX_DIGEST_SIZE; + else if (hash_size != SIPHASH_MIN_DIGEST_SIZE && + hash_size != SIPHASH_MAX_DIGEST_SIZE) + return 0; + + if (drounds == 0) + drounds = SIPHASH_D_ROUNDS; + if (crounds == 0) + crounds = SIPHASH_C_ROUNDS; + + ctx->crounds = crounds; + ctx->drounds = drounds; + ctx->hash_size = hash_size; + + ctx->len = 0; + ctx->total_inlen = 0; + + ctx->v0 = 0x736f6d6570736575ULL ^ k0; + ctx->v1 = 0x646f72616e646f6dULL ^ k1; + ctx->v2 = 0x6c7967656e657261ULL ^ k0; + ctx->v3 = 0x7465646279746573ULL ^ k1; + + if (ctx->hash_size == SIPHASH_MAX_DIGEST_SIZE) + ctx->v1 ^= 0xee; + + return 1; +} + +void SipHash_Update(SIPHASH *ctx, const unsigned char *in, size_t inlen) +{ + uint64_t m; + const uint8_t *end; + int left; + int i; + uint64_t v0 = ctx->v0; + uint64_t v1 = ctx->v1; + uint64_t v2 = ctx->v2; + uint64_t v3 = ctx->v3; + + ctx->total_inlen += inlen; + + if (ctx->len) { + /* deal with leavings */ + size_t available = SIPHASH_BLOCK_SIZE - ctx->len; + + /* not enough to fill leavings */ + if (inlen < available) { + memcpy(&ctx->leavings[ctx->len], in, inlen); + ctx->len += inlen; + return; + } + + /* copy data into leavings and reduce input */ + memcpy(&ctx->leavings[ctx->len], in, available); + inlen -= available; + in += available; + + /* process leavings */ + m = U8TO64_LE(ctx->leavings); + v3 ^= m; + for (i = 0; i < ctx->crounds; ++i) + SIPROUND; + v0 ^= m; + } + left = inlen & (SIPHASH_BLOCK_SIZE-1); /* gets put into leavings */ + end = in + inlen - left; + + for (; in != end; in += 8) { + m = U8TO64_LE(in); + v3 ^= m; + for (i = 0; i < ctx->crounds; ++i) + SIPROUND; + v0 ^= m; + } + + /* save leavings and other ctx */ + if (left) + memcpy(ctx->leavings, end, left); + ctx->len = left; + + ctx->v0 = v0; + ctx->v1 = v1; + ctx->v2 = v2; + ctx->v3 = v3; +} + +int SipHash_Final(SIPHASH *ctx, unsigned char *out, size_t outlen) +{ + /* finalize hash */ + int i; + uint64_t b = ctx->total_inlen << 56; + uint64_t v0 = ctx->v0; + uint64_t v1 = ctx->v1; + uint64_t v2 = ctx->v2; + uint64_t v3 = ctx->v3; + + if (outlen != (size_t)ctx->hash_size) + return 0; + + switch (ctx->len) { + case 7: + b |= ((uint64_t)ctx->leavings[6]) << 48; + /* fall thru */ + case 6: + b |= ((uint64_t)ctx->leavings[5]) << 40; + /* fall thru */ + case 5: + b |= ((uint64_t)ctx->leavings[4]) << 32; + /* fall thru */ + case 4: + b |= ((uint64_t)ctx->leavings[3]) << 24; + /* fall thru */ + case 3: + b |= ((uint64_t)ctx->leavings[2]) << 16; + /* fall thru */ + case 2: + b |= ((uint64_t)ctx->leavings[1]) << 8; + /* fall thru */ + case 1: + b |= ((uint64_t)ctx->leavings[0]); + case 0: + break; + } + + v3 ^= b; + for (i = 0; i < ctx->crounds; ++i) + SIPROUND; + v0 ^= b; + if (ctx->hash_size == SIPHASH_MAX_DIGEST_SIZE) + v2 ^= 0xee; + else + v2 ^= 0xff; + for (i = 0; i < ctx->drounds; ++i) + SIPROUND; + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out, b); + if (ctx->hash_size == SIPHASH_MIN_DIGEST_SIZE) + return 1; + v1 ^= 0xdd; + for (i = 0; i < ctx->drounds; ++i) + SIPROUND; + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out + 8, b); + return 1; +} diff --git a/crypto/siphash/siphash_ameth.c b/crypto/siphash/siphash_ameth.c new file mode 100644 index 00000000..d819461f --- /dev/null +++ b/crypto/siphash/siphash_ameth.c @@ -0,0 +1,68 @@ +/* + * Copyright 2007-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 + */ + +#include +#include "internal/cryptlib.h" +#include +#include "internal/asn1_int.h" +#include "internal/siphash.h" +#include "siphash_local.h" + +/* + * SIPHASH "ASN1" method. This is just here to indicate the maximum + * SIPHASH output length and to free up a SIPHASH key. + */ + +static int siphash_size(const EVP_PKEY *pkey) +{ + return SIPHASH_MAX_DIGEST_SIZE; +} + +static void siphash_key_free(EVP_PKEY *pkey) +{ + ASN1_OCTET_STRING *os = EVP_PKEY_get0(pkey); + + if (os != NULL) { + if (os->data != NULL) + OPENSSL_cleanse(os->data, os->length); + ASN1_OCTET_STRING_free(os); + } +} + +static int siphash_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) +{ + /* nothing (including ASN1_PKEY_CTRL_DEFAULT_MD_NID), is supported */ + return -2; +} + +static int siphash_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b) +{ + return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)); +} + +const EVP_PKEY_ASN1_METHOD siphash_asn1_meth = { + EVP_PKEY_SIPHASH, + EVP_PKEY_SIPHASH, + 0, + + "SIPHASH", + "OpenSSL SIPHASH method", + + 0, 0, siphash_pkey_public_cmp, 0, + + 0, 0, 0, + + siphash_size, + 0, 0, + 0, 0, 0, 0, 0, 0, 0, + + siphash_key_free, + siphash_pkey_ctrl, + 0, 0 +}; diff --git a/crypto/siphash/siphash_local.h b/crypto/siphash/siphash_local.h new file mode 100644 index 00000000..5ad34764 --- /dev/null +++ b/crypto/siphash/siphash_local.h @@ -0,0 +1,23 @@ +/* + * 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 + */ + +/* Based on https://131002.net/siphash C reference implementation */ + +struct siphash_st { + uint64_t total_inlen; + uint64_t v0; + uint64_t v1; + uint64_t v2; + uint64_t v3; + unsigned int len; + int hash_size; + int crounds; + int drounds; + unsigned char leavings[SIPHASH_BLOCK_SIZE]; +}; diff --git a/crypto/siphash/siphash_pmeth.c b/crypto/siphash/siphash_pmeth.c new file mode 100644 index 00000000..ae16e558 --- /dev/null +++ b/crypto/siphash/siphash_pmeth.c @@ -0,0 +1,206 @@ +/* + * Copyright 2007-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 + */ + +#include +#include "internal/cryptlib.h" +#include +#include +#include +#include "internal/siphash.h" +#include "siphash_local.h" +#include "internal/evp_int.h" + +/* SIPHASH pkey context structure */ + +typedef struct siphash_pkey_ctx_st { + ASN1_OCTET_STRING ktmp; /* Temp storage for key */ + SIPHASH ctx; +} SIPHASH_PKEY_CTX; + +static int pkey_siphash_init(EVP_PKEY_CTX *ctx) +{ + SIPHASH_PKEY_CTX *pctx; + + pctx = OPENSSL_zalloc(sizeof(*pctx)); + if (pctx == NULL) + return 0; + pctx->ktmp.type = V_ASN1_OCTET_STRING; + + EVP_PKEY_CTX_set_data(ctx, pctx); + EVP_PKEY_CTX_set0_keygen_info(ctx, NULL, 0); + return 1; +} + +static void pkey_siphash_cleanup(EVP_PKEY_CTX *ctx) +{ + SIPHASH_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + + if (pctx != NULL) { + OPENSSL_clear_free(pctx->ktmp.data, pctx->ktmp.length); + OPENSSL_clear_free(pctx, sizeof(*pctx)); + EVP_PKEY_CTX_set_data(ctx, NULL); + } +} + +static int pkey_siphash_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) +{ + SIPHASH_PKEY_CTX *sctx, *dctx; + + /* allocate memory for dst->data and a new SIPHASH_CTX in dst->data->ctx */ + if (!pkey_siphash_init(dst)) + return 0; + sctx = EVP_PKEY_CTX_get_data(src); + dctx = EVP_PKEY_CTX_get_data(dst); + if (ASN1_STRING_get0_data(&sctx->ktmp) != NULL && + !ASN1_STRING_copy(&dctx->ktmp, &sctx->ktmp)) { + /* cleanup and free the SIPHASH_PKEY_CTX in dst->data */ + pkey_siphash_cleanup(dst); + return 0; + } + memcpy(&dctx->ctx, &sctx->ctx, sizeof(SIPHASH)); + return 1; +} + +static int pkey_siphash_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) +{ + ASN1_OCTET_STRING *key; + SIPHASH_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + + if (ASN1_STRING_get0_data(&pctx->ktmp) == NULL) + return 0; + key = ASN1_OCTET_STRING_dup(&pctx->ktmp); + if (key == NULL) + return 0; + return EVP_PKEY_assign_SIPHASH(pkey, key); +} + +static int int_update(EVP_MD_CTX *ctx, const void *data, size_t count) +{ + SIPHASH_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(EVP_MD_CTX_pkey_ctx(ctx)); + + SipHash_Update(&pctx->ctx, data, count); + return 1; +} + +static int siphash_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) +{ + SIPHASH_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + const unsigned char* key; + size_t len; + int hash_size; + + key = EVP_PKEY_get0_siphash(EVP_PKEY_CTX_get0_pkey(ctx), &len); + if (key == NULL || len != SIPHASH_KEY_SIZE) + return 0; + EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_NO_INIT); + EVP_MD_CTX_set_update_fn(mctx, int_update); + /* use default rounds (2,4) */ + hash_size = SipHash_hash_size(&pctx->ctx); + return SipHash_Init(&pctx->ctx, key, hash_size, 0, 0); +} +static int siphash_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, + EVP_MD_CTX *mctx) +{ + SIPHASH_PKEY_CTX *pctx = ctx->data; + + *siglen = SipHash_hash_size(&pctx->ctx); + if (sig != NULL) + return SipHash_Final(&pctx->ctx, sig, *siglen); + return 1; +} + +static int pkey_siphash_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) +{ + SIPHASH_PKEY_CTX *pctx = EVP_PKEY_CTX_get_data(ctx); + const unsigned char *key; + size_t len; + int hash_size; + + switch (type) { + + case EVP_PKEY_CTRL_MD: + /* ignore */ + break; + + case EVP_PKEY_CTRL_SET_DIGEST_SIZE: + if (p1 != SIPHASH_MIN_DIGEST_SIZE && + p1 != SIPHASH_MAX_DIGEST_SIZE) { + return 0; + } + /* use default rounds (2,4) */ + return SipHash_Init(&pctx->ctx, ASN1_STRING_get0_data(&pctx->ktmp), p1, 0, 0); + + case EVP_PKEY_CTRL_SET_MAC_KEY: + case EVP_PKEY_CTRL_DIGESTINIT: + if (type == EVP_PKEY_CTRL_SET_MAC_KEY) { + /* user explicitly setting the key */ + key = p2; + len = p1; + } else { + /* user indirectly setting the key via EVP_DigestSignInit */ + key = EVP_PKEY_get0_siphash(EVP_PKEY_CTX_get0_pkey(ctx), &len); + } + if (key == NULL || len != SIPHASH_KEY_SIZE || + !ASN1_OCTET_STRING_set(&pctx->ktmp, key, len)) + return 0; + /* use default rounds (2,4) */ + hash_size = SipHash_hash_size(&pctx->ctx); + return SipHash_Init(&pctx->ctx, ASN1_STRING_get0_data(&pctx->ktmp), hash_size, 0, 0); + + default: + return -2; + + } + return 1; +} + +static int pkey_siphash_ctrl_str(EVP_PKEY_CTX *ctx, + const char *type, const char *value) +{ + if (value == NULL) + return 0; + if (strcmp(type, "key") == 0) + return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, value); + if (strcmp(type, "hexkey") == 0) + return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, value); + return -2; +} + +const EVP_PKEY_METHOD siphash_pkey_meth = { + EVP_PKEY_SIPHASH, + EVP_PKEY_FLAG_SIGCTX_CUSTOM, /* we don't deal with a separate MD */ + pkey_siphash_init, + pkey_siphash_copy, + pkey_siphash_cleanup, + + 0, 0, + + 0, + pkey_siphash_keygen, + + 0, 0, + + 0, 0, + + 0, 0, + + siphash_signctx_init, + siphash_signctx, + + 0, 0, + + 0, 0, + + 0, 0, + + 0, 0, + + pkey_siphash_ctrl, + pkey_siphash_ctrl_str +}; diff --git a/crypto/sm3/build.info b/crypto/sm3/build.info new file mode 100644 index 00000000..6009b194 --- /dev/null +++ b/crypto/sm3/build.info @@ -0,0 +1,2 @@ +LIBS=../../libcrypto +SOURCE[../../libcrypto]=sm3.c m_sm3.c diff --git a/crypto/sm3/m_sm3.c b/crypto/sm3/m_sm3.c new file mode 100644 index 00000000..85538dc8 --- /dev/null +++ b/crypto/sm3/m_sm3.c @@ -0,0 +1,52 @@ +/* + * Copyright 2017 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 + */ + +#include "internal/cryptlib.h" + +#ifndef OPENSSL_NO_SM3 +# include +# include "internal/evp_int.h" +# include "internal/sm3.h" + +static int init(EVP_MD_CTX *ctx) +{ + return sm3_init(EVP_MD_CTX_md_data(ctx)); +} + +static int update(EVP_MD_CTX *ctx, const void *data, size_t count) +{ + return sm3_update(EVP_MD_CTX_md_data(ctx), data, count); +} + +static int final(EVP_MD_CTX *ctx, unsigned char *md) +{ + return sm3_final(md, EVP_MD_CTX_md_data(ctx)); +} + +static const EVP_MD sm3_md = { + NID_sm3, + NID_sm3WithRSAEncryption, + SM3_DIGEST_LENGTH, + 0, + init, + update, + final, + NULL, + NULL, + SM3_CBLOCK, + sizeof(EVP_MD *) + sizeof(SM3_CTX), +}; + +const EVP_MD *EVP_sm3(void) +{ + return &sm3_md; +} + +#endif diff --git a/crypto/sm3/sm3.c b/crypto/sm3/sm3.c new file mode 100644 index 00000000..1588dd11 --- /dev/null +++ b/crypto/sm3/sm3.c @@ -0,0 +1,196 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017 Ribose Inc. All Rights Reserved. + * Ported from Ribose contributions from Botan. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 +#include "sm3_locl.h" + +int sm3_init(SM3_CTX *c) +{ + memset(c, 0, sizeof(*c)); + c->A = SM3_A; + c->B = SM3_B; + c->C = SM3_C; + c->D = SM3_D; + c->E = SM3_E; + c->F = SM3_F; + c->G = SM3_G; + c->H = SM3_H; + return 1; +} + +void sm3_block_data_order(SM3_CTX *ctx, const void *p, size_t num) +{ + const unsigned char *data = p; + register unsigned MD32_REG_T A, B, C, D, E, F, G, H; + + unsigned MD32_REG_T W00, W01, W02, W03, W04, W05, W06, W07, + W08, W09, W10, W11, W12, W13, W14, W15; + + for (; num--;) { + + A = ctx->A; + B = ctx->B; + C = ctx->C; + D = ctx->D; + E = ctx->E; + F = ctx->F; + G = ctx->G; + H = ctx->H; + + /* + * We have to load all message bytes immediately since SM3 reads + * them slightly out of order. + */ + (void)HOST_c2l(data, W00); + (void)HOST_c2l(data, W01); + (void)HOST_c2l(data, W02); + (void)HOST_c2l(data, W03); + (void)HOST_c2l(data, W04); + (void)HOST_c2l(data, W05); + (void)HOST_c2l(data, W06); + (void)HOST_c2l(data, W07); + (void)HOST_c2l(data, W08); + (void)HOST_c2l(data, W09); + (void)HOST_c2l(data, W10); + (void)HOST_c2l(data, W11); + (void)HOST_c2l(data, W12); + (void)HOST_c2l(data, W13); + (void)HOST_c2l(data, W14); + (void)HOST_c2l(data, W15); + + R1(A, B, C, D, E, F, G, H, 0x79CC4519, W00, W00 ^ W04); + W00 = EXPAND(W00, W07, W13, W03, W10); + R1(D, A, B, C, H, E, F, G, 0xF3988A32, W01, W01 ^ W05); + W01 = EXPAND(W01, W08, W14, W04, W11); + R1(C, D, A, B, G, H, E, F, 0xE7311465, W02, W02 ^ W06); + W02 = EXPAND(W02, W09, W15, W05, W12); + R1(B, C, D, A, F, G, H, E, 0xCE6228CB, W03, W03 ^ W07); + W03 = EXPAND(W03, W10, W00, W06, W13); + R1(A, B, C, D, E, F, G, H, 0x9CC45197, W04, W04 ^ W08); + W04 = EXPAND(W04, W11, W01, W07, W14); + R1(D, A, B, C, H, E, F, G, 0x3988A32F, W05, W05 ^ W09); + W05 = EXPAND(W05, W12, W02, W08, W15); + R1(C, D, A, B, G, H, E, F, 0x7311465E, W06, W06 ^ W10); + W06 = EXPAND(W06, W13, W03, W09, W00); + R1(B, C, D, A, F, G, H, E, 0xE6228CBC, W07, W07 ^ W11); + W07 = EXPAND(W07, W14, W04, W10, W01); + R1(A, B, C, D, E, F, G, H, 0xCC451979, W08, W08 ^ W12); + W08 = EXPAND(W08, W15, W05, W11, W02); + R1(D, A, B, C, H, E, F, G, 0x988A32F3, W09, W09 ^ W13); + W09 = EXPAND(W09, W00, W06, W12, W03); + R1(C, D, A, B, G, H, E, F, 0x311465E7, W10, W10 ^ W14); + W10 = EXPAND(W10, W01, W07, W13, W04); + R1(B, C, D, A, F, G, H, E, 0x6228CBCE, W11, W11 ^ W15); + W11 = EXPAND(W11, W02, W08, W14, W05); + R1(A, B, C, D, E, F, G, H, 0xC451979C, W12, W12 ^ W00); + W12 = EXPAND(W12, W03, W09, W15, W06); + R1(D, A, B, C, H, E, F, G, 0x88A32F39, W13, W13 ^ W01); + W13 = EXPAND(W13, W04, W10, W00, W07); + R1(C, D, A, B, G, H, E, F, 0x11465E73, W14, W14 ^ W02); + W14 = EXPAND(W14, W05, W11, W01, W08); + R1(B, C, D, A, F, G, H, E, 0x228CBCE6, W15, W15 ^ W03); + W15 = EXPAND(W15, W06, W12, W02, W09); + R2(A, B, C, D, E, F, G, H, 0x9D8A7A87, W00, W00 ^ W04); + W00 = EXPAND(W00, W07, W13, W03, W10); + R2(D, A, B, C, H, E, F, G, 0x3B14F50F, W01, W01 ^ W05); + W01 = EXPAND(W01, W08, W14, W04, W11); + R2(C, D, A, B, G, H, E, F, 0x7629EA1E, W02, W02 ^ W06); + W02 = EXPAND(W02, W09, W15, W05, W12); + R2(B, C, D, A, F, G, H, E, 0xEC53D43C, W03, W03 ^ W07); + W03 = EXPAND(W03, W10, W00, W06, W13); + R2(A, B, C, D, E, F, G, H, 0xD8A7A879, W04, W04 ^ W08); + W04 = EXPAND(W04, W11, W01, W07, W14); + R2(D, A, B, C, H, E, F, G, 0xB14F50F3, W05, W05 ^ W09); + W05 = EXPAND(W05, W12, W02, W08, W15); + R2(C, D, A, B, G, H, E, F, 0x629EA1E7, W06, W06 ^ W10); + W06 = EXPAND(W06, W13, W03, W09, W00); + R2(B, C, D, A, F, G, H, E, 0xC53D43CE, W07, W07 ^ W11); + W07 = EXPAND(W07, W14, W04, W10, W01); + R2(A, B, C, D, E, F, G, H, 0x8A7A879D, W08, W08 ^ W12); + W08 = EXPAND(W08, W15, W05, W11, W02); + R2(D, A, B, C, H, E, F, G, 0x14F50F3B, W09, W09 ^ W13); + W09 = EXPAND(W09, W00, W06, W12, W03); + R2(C, D, A, B, G, H, E, F, 0x29EA1E76, W10, W10 ^ W14); + W10 = EXPAND(W10, W01, W07, W13, W04); + R2(B, C, D, A, F, G, H, E, 0x53D43CEC, W11, W11 ^ W15); + W11 = EXPAND(W11, W02, W08, W14, W05); + R2(A, B, C, D, E, F, G, H, 0xA7A879D8, W12, W12 ^ W00); + W12 = EXPAND(W12, W03, W09, W15, W06); + R2(D, A, B, C, H, E, F, G, 0x4F50F3B1, W13, W13 ^ W01); + W13 = EXPAND(W13, W04, W10, W00, W07); + R2(C, D, A, B, G, H, E, F, 0x9EA1E762, W14, W14 ^ W02); + W14 = EXPAND(W14, W05, W11, W01, W08); + R2(B, C, D, A, F, G, H, E, 0x3D43CEC5, W15, W15 ^ W03); + W15 = EXPAND(W15, W06, W12, W02, W09); + R2(A, B, C, D, E, F, G, H, 0x7A879D8A, W00, W00 ^ W04); + W00 = EXPAND(W00, W07, W13, W03, W10); + R2(D, A, B, C, H, E, F, G, 0xF50F3B14, W01, W01 ^ W05); + W01 = EXPAND(W01, W08, W14, W04, W11); + R2(C, D, A, B, G, H, E, F, 0xEA1E7629, W02, W02 ^ W06); + W02 = EXPAND(W02, W09, W15, W05, W12); + R2(B, C, D, A, F, G, H, E, 0xD43CEC53, W03, W03 ^ W07); + W03 = EXPAND(W03, W10, W00, W06, W13); + R2(A, B, C, D, E, F, G, H, 0xA879D8A7, W04, W04 ^ W08); + W04 = EXPAND(W04, W11, W01, W07, W14); + R2(D, A, B, C, H, E, F, G, 0x50F3B14F, W05, W05 ^ W09); + W05 = EXPAND(W05, W12, W02, W08, W15); + R2(C, D, A, B, G, H, E, F, 0xA1E7629E, W06, W06 ^ W10); + W06 = EXPAND(W06, W13, W03, W09, W00); + R2(B, C, D, A, F, G, H, E, 0x43CEC53D, W07, W07 ^ W11); + W07 = EXPAND(W07, W14, W04, W10, W01); + R2(A, B, C, D, E, F, G, H, 0x879D8A7A, W08, W08 ^ W12); + W08 = EXPAND(W08, W15, W05, W11, W02); + R2(D, A, B, C, H, E, F, G, 0x0F3B14F5, W09, W09 ^ W13); + W09 = EXPAND(W09, W00, W06, W12, W03); + R2(C, D, A, B, G, H, E, F, 0x1E7629EA, W10, W10 ^ W14); + W10 = EXPAND(W10, W01, W07, W13, W04); + R2(B, C, D, A, F, G, H, E, 0x3CEC53D4, W11, W11 ^ W15); + W11 = EXPAND(W11, W02, W08, W14, W05); + R2(A, B, C, D, E, F, G, H, 0x79D8A7A8, W12, W12 ^ W00); + W12 = EXPAND(W12, W03, W09, W15, W06); + R2(D, A, B, C, H, E, F, G, 0xF3B14F50, W13, W13 ^ W01); + W13 = EXPAND(W13, W04, W10, W00, W07); + R2(C, D, A, B, G, H, E, F, 0xE7629EA1, W14, W14 ^ W02); + W14 = EXPAND(W14, W05, W11, W01, W08); + R2(B, C, D, A, F, G, H, E, 0xCEC53D43, W15, W15 ^ W03); + W15 = EXPAND(W15, W06, W12, W02, W09); + R2(A, B, C, D, E, F, G, H, 0x9D8A7A87, W00, W00 ^ W04); + W00 = EXPAND(W00, W07, W13, W03, W10); + R2(D, A, B, C, H, E, F, G, 0x3B14F50F, W01, W01 ^ W05); + W01 = EXPAND(W01, W08, W14, W04, W11); + R2(C, D, A, B, G, H, E, F, 0x7629EA1E, W02, W02 ^ W06); + W02 = EXPAND(W02, W09, W15, W05, W12); + R2(B, C, D, A, F, G, H, E, 0xEC53D43C, W03, W03 ^ W07); + W03 = EXPAND(W03, W10, W00, W06, W13); + R2(A, B, C, D, E, F, G, H, 0xD8A7A879, W04, W04 ^ W08); + R2(D, A, B, C, H, E, F, G, 0xB14F50F3, W05, W05 ^ W09); + R2(C, D, A, B, G, H, E, F, 0x629EA1E7, W06, W06 ^ W10); + R2(B, C, D, A, F, G, H, E, 0xC53D43CE, W07, W07 ^ W11); + R2(A, B, C, D, E, F, G, H, 0x8A7A879D, W08, W08 ^ W12); + R2(D, A, B, C, H, E, F, G, 0x14F50F3B, W09, W09 ^ W13); + R2(C, D, A, B, G, H, E, F, 0x29EA1E76, W10, W10 ^ W14); + R2(B, C, D, A, F, G, H, E, 0x53D43CEC, W11, W11 ^ W15); + R2(A, B, C, D, E, F, G, H, 0xA7A879D8, W12, W12 ^ W00); + R2(D, A, B, C, H, E, F, G, 0x4F50F3B1, W13, W13 ^ W01); + R2(C, D, A, B, G, H, E, F, 0x9EA1E762, W14, W14 ^ W02); + R2(B, C, D, A, F, G, H, E, 0x3D43CEC5, W15, W15 ^ W03); + + ctx->A ^= A; + ctx->B ^= B; + ctx->C ^= C; + ctx->D ^= D; + ctx->E ^= E; + ctx->F ^= F; + ctx->G ^= G; + ctx->H ^= H; + } +} + diff --git a/crypto/sm3/sm3_locl.h b/crypto/sm3/sm3_locl.h new file mode 100644 index 00000000..efa6db57 --- /dev/null +++ b/crypto/sm3/sm3_locl.h @@ -0,0 +1,79 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017 Ribose Inc. All Rights Reserved. + * Ported from Ribose contributions from Botan. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 +#include "internal/sm3.h" + +#define DATA_ORDER_IS_BIG_ENDIAN + +#define HASH_LONG SM3_WORD +#define HASH_CTX SM3_CTX +#define HASH_CBLOCK SM3_CBLOCK +#define HASH_UPDATE sm3_update +#define HASH_TRANSFORM sm3_transform +#define HASH_FINAL sm3_final +#define HASH_MAKE_STRING(c, s) \ + do { \ + unsigned long ll; \ + ll=(c)->A; (void)HOST_l2c(ll, (s)); \ + ll=(c)->B; (void)HOST_l2c(ll, (s)); \ + ll=(c)->C; (void)HOST_l2c(ll, (s)); \ + ll=(c)->D; (void)HOST_l2c(ll, (s)); \ + ll=(c)->E; (void)HOST_l2c(ll, (s)); \ + ll=(c)->F; (void)HOST_l2c(ll, (s)); \ + ll=(c)->G; (void)HOST_l2c(ll, (s)); \ + ll=(c)->H; (void)HOST_l2c(ll, (s)); \ + } while (0) +#define HASH_BLOCK_DATA_ORDER sm3_block_data_order + +void sm3_transform(SM3_CTX *c, const unsigned char *data); + +#include "internal/md32_common.h" + +#define P0(X) (X ^ ROTATE(X, 9) ^ ROTATE(X, 17)) +#define P1(X) (X ^ ROTATE(X, 15) ^ ROTATE(X, 23)) + +#define FF0(X,Y,Z) (X ^ Y ^ Z) +#define GG0(X,Y,Z) (X ^ Y ^ Z) + +#define FF1(X,Y,Z) ((X & Y) | ((X | Y) & Z)) +#define GG1(X,Y,Z) ((Z ^ (X & (Y ^ Z)))) + +#define EXPAND(W0,W7,W13,W3,W10) \ + (P1(W0 ^ W7 ^ ROTATE(W13, 15)) ^ ROTATE(W3, 7) ^ W10) + +#define RND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF, GG) \ + do { \ + const SM3_WORD A12 = ROTATE(A, 12); \ + const SM3_WORD A12_SM = A12 + E + TJ; \ + const SM3_WORD SS1 = ROTATE(A12_SM, 7); \ + const SM3_WORD TT1 = FF(A, B, C) + D + (SS1 ^ A12) + (Wj); \ + const SM3_WORD TT2 = GG(E, F, G) + H + SS1 + Wi; \ + B = ROTATE(B, 9); \ + D = TT1; \ + F = ROTATE(F, 19); \ + H = P0(TT2); \ + } while(0) + +#define R1(A,B,C,D,E,F,G,H,TJ,Wi,Wj) \ + RND(A,B,C,D,E,F,G,H,TJ,Wi,Wj,FF0,GG0) + +#define R2(A,B,C,D,E,F,G,H,TJ,Wi,Wj) \ + RND(A,B,C,D,E,F,G,H,TJ,Wi,Wj,FF1,GG1) + +#define SM3_A 0x7380166fUL +#define SM3_B 0x4914b2b9UL +#define SM3_C 0x172442d7UL +#define SM3_D 0xda8a0600UL +#define SM3_E 0xa96f30bcUL +#define SM3_F 0x163138aaUL +#define SM3_G 0xe38dee4dUL +#define SM3_H 0xb0fb0e4eUL diff --git a/crypto/sm4/build.info b/crypto/sm4/build.info new file mode 100644 index 00000000..b65a7d14 --- /dev/null +++ b/crypto/sm4/build.info @@ -0,0 +1,4 @@ +LIBS=../../libcrypto +SOURCE[../../libcrypto]=\ + sm4.c + diff --git a/crypto/sm4/sm4.c b/crypto/sm4/sm4.c new file mode 100644 index 00000000..0c819a4b --- /dev/null +++ b/crypto/sm4/sm4.c @@ -0,0 +1,233 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017 Ribose Inc. All Rights Reserved. + * Ported from Ribose contributions from Botan. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with 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 +#include "internal/sm4.h" + +static const uint8_t SM4_S[256] = { + 0xD6, 0x90, 0xE9, 0xFE, 0xCC, 0xE1, 0x3D, 0xB7, 0x16, 0xB6, 0x14, 0xC2, + 0x28, 0xFB, 0x2C, 0x05, 0x2B, 0x67, 0x9A, 0x76, 0x2A, 0xBE, 0x04, 0xC3, + 0xAA, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99, 0x9C, 0x42, 0x50, 0xF4, + 0x91, 0xEF, 0x98, 0x7A, 0x33, 0x54, 0x0B, 0x43, 0xED, 0xCF, 0xAC, 0x62, + 0xE4, 0xB3, 0x1C, 0xA9, 0xC9, 0x08, 0xE8, 0x95, 0x80, 0xDF, 0x94, 0xFA, + 0x75, 0x8F, 0x3F, 0xA6, 0x47, 0x07, 0xA7, 0xFC, 0xF3, 0x73, 0x17, 0xBA, + 0x83, 0x59, 0x3C, 0x19, 0xE6, 0x85, 0x4F, 0xA8, 0x68, 0x6B, 0x81, 0xB2, + 0x71, 0x64, 0xDA, 0x8B, 0xF8, 0xEB, 0x0F, 0x4B, 0x70, 0x56, 0x9D, 0x35, + 0x1E, 0x24, 0x0E, 0x5E, 0x63, 0x58, 0xD1, 0xA2, 0x25, 0x22, 0x7C, 0x3B, + 0x01, 0x21, 0x78, 0x87, 0xD4, 0x00, 0x46, 0x57, 0x9F, 0xD3, 0x27, 0x52, + 0x4C, 0x36, 0x02, 0xE7, 0xA0, 0xC4, 0xC8, 0x9E, 0xEA, 0xBF, 0x8A, 0xD2, + 0x40, 0xC7, 0x38, 0xB5, 0xA3, 0xF7, 0xF2, 0xCE, 0xF9, 0x61, 0x15, 0xA1, + 0xE0, 0xAE, 0x5D, 0xA4, 0x9B, 0x34, 0x1A, 0x55, 0xAD, 0x93, 0x32, 0x30, + 0xF5, 0x8C, 0xB1, 0xE3, 0x1D, 0xF6, 0xE2, 0x2E, 0x82, 0x66, 0xCA, 0x60, + 0xC0, 0x29, 0x23, 0xAB, 0x0D, 0x53, 0x4E, 0x6F, 0xD5, 0xDB, 0x37, 0x45, + 0xDE, 0xFD, 0x8E, 0x2F, 0x03, 0xFF, 0x6A, 0x72, 0x6D, 0x6C, 0x5B, 0x51, + 0x8D, 0x1B, 0xAF, 0x92, 0xBB, 0xDD, 0xBC, 0x7F, 0x11, 0xD9, 0x5C, 0x41, + 0x1F, 0x10, 0x5A, 0xD8, 0x0A, 0xC1, 0x31, 0x88, 0xA5, 0xCD, 0x7B, 0xBD, + 0x2D, 0x74, 0xD0, 0x12, 0xB8, 0xE5, 0xB4, 0xB0, 0x89, 0x69, 0x97, 0x4A, + 0x0C, 0x96, 0x77, 0x7E, 0x65, 0xB9, 0xF1, 0x09, 0xC5, 0x6E, 0xC6, 0x84, + 0x18, 0xF0, 0x7D, 0xEC, 0x3A, 0xDC, 0x4D, 0x20, 0x79, 0xEE, 0x5F, 0x3E, + 0xD7, 0xCB, 0x39, 0x48 +}; + +/* + * SM4_SBOX_T[j] == L(SM4_SBOX[j]). + */ +static const uint32_t SM4_SBOX_T[256] = { + 0x8ED55B5B, 0xD0924242, 0x4DEAA7A7, 0x06FDFBFB, 0xFCCF3333, 0x65E28787, + 0xC93DF4F4, 0x6BB5DEDE, 0x4E165858, 0x6EB4DADA, 0x44145050, 0xCAC10B0B, + 0x8828A0A0, 0x17F8EFEF, 0x9C2CB0B0, 0x11051414, 0x872BACAC, 0xFB669D9D, + 0xF2986A6A, 0xAE77D9D9, 0x822AA8A8, 0x46BCFAFA, 0x14041010, 0xCFC00F0F, + 0x02A8AAAA, 0x54451111, 0x5F134C4C, 0xBE269898, 0x6D482525, 0x9E841A1A, + 0x1E061818, 0xFD9B6666, 0xEC9E7272, 0x4A430909, 0x10514141, 0x24F7D3D3, + 0xD5934646, 0x53ECBFBF, 0xF89A6262, 0x927BE9E9, 0xFF33CCCC, 0x04555151, + 0x270B2C2C, 0x4F420D0D, 0x59EEB7B7, 0xF3CC3F3F, 0x1CAEB2B2, 0xEA638989, + 0x74E79393, 0x7FB1CECE, 0x6C1C7070, 0x0DABA6A6, 0xEDCA2727, 0x28082020, + 0x48EBA3A3, 0xC1975656, 0x80820202, 0xA3DC7F7F, 0xC4965252, 0x12F9EBEB, + 0xA174D5D5, 0xB38D3E3E, 0xC33FFCFC, 0x3EA49A9A, 0x5B461D1D, 0x1B071C1C, + 0x3BA59E9E, 0x0CFFF3F3, 0x3FF0CFCF, 0xBF72CDCD, 0x4B175C5C, 0x52B8EAEA, + 0x8F810E0E, 0x3D586565, 0xCC3CF0F0, 0x7D196464, 0x7EE59B9B, 0x91871616, + 0x734E3D3D, 0x08AAA2A2, 0xC869A1A1, 0xC76AADAD, 0x85830606, 0x7AB0CACA, + 0xB570C5C5, 0xF4659191, 0xB2D96B6B, 0xA7892E2E, 0x18FBE3E3, 0x47E8AFAF, + 0x330F3C3C, 0x674A2D2D, 0xB071C1C1, 0x0E575959, 0xE99F7676, 0xE135D4D4, + 0x661E7878, 0xB4249090, 0x360E3838, 0x265F7979, 0xEF628D8D, 0x38596161, + 0x95D24747, 0x2AA08A8A, 0xB1259494, 0xAA228888, 0x8C7DF1F1, 0xD73BECEC, + 0x05010404, 0xA5218484, 0x9879E1E1, 0x9B851E1E, 0x84D75353, 0x00000000, + 0x5E471919, 0x0B565D5D, 0xE39D7E7E, 0x9FD04F4F, 0xBB279C9C, 0x1A534949, + 0x7C4D3131, 0xEE36D8D8, 0x0A020808, 0x7BE49F9F, 0x20A28282, 0xD4C71313, + 0xE8CB2323, 0xE69C7A7A, 0x42E9ABAB, 0x43BDFEFE, 0xA2882A2A, 0x9AD14B4B, + 0x40410101, 0xDBC41F1F, 0xD838E0E0, 0x61B7D6D6, 0x2FA18E8E, 0x2BF4DFDF, + 0x3AF1CBCB, 0xF6CD3B3B, 0x1DFAE7E7, 0xE5608585, 0x41155454, 0x25A38686, + 0x60E38383, 0x16ACBABA, 0x295C7575, 0x34A69292, 0xF7996E6E, 0xE434D0D0, + 0x721A6868, 0x01545555, 0x19AFB6B6, 0xDF914E4E, 0xFA32C8C8, 0xF030C0C0, + 0x21F6D7D7, 0xBC8E3232, 0x75B3C6C6, 0x6FE08F8F, 0x691D7474, 0x2EF5DBDB, + 0x6AE18B8B, 0x962EB8B8, 0x8A800A0A, 0xFE679999, 0xE2C92B2B, 0xE0618181, + 0xC0C30303, 0x8D29A4A4, 0xAF238C8C, 0x07A9AEAE, 0x390D3434, 0x1F524D4D, + 0x764F3939, 0xD36EBDBD, 0x81D65757, 0xB7D86F6F, 0xEB37DCDC, 0x51441515, + 0xA6DD7B7B, 0x09FEF7F7, 0xB68C3A3A, 0x932FBCBC, 0x0F030C0C, 0x03FCFFFF, + 0xC26BA9A9, 0xBA73C9C9, 0xD96CB5B5, 0xDC6DB1B1, 0x375A6D6D, 0x15504545, + 0xB98F3636, 0x771B6C6C, 0x13ADBEBE, 0xDA904A4A, 0x57B9EEEE, 0xA9DE7777, + 0x4CBEF2F2, 0x837EFDFD, 0x55114444, 0xBDDA6767, 0x2C5D7171, 0x45400505, + 0x631F7C7C, 0x50104040, 0x325B6969, 0xB8DB6363, 0x220A2828, 0xC5C20707, + 0xF531C4C4, 0xA88A2222, 0x31A79696, 0xF9CE3737, 0x977AEDED, 0x49BFF6F6, + 0x992DB4B4, 0xA475D1D1, 0x90D34343, 0x5A124848, 0x58BAE2E2, 0x71E69797, + 0x64B6D2D2, 0x70B2C2C2, 0xAD8B2626, 0xCD68A5A5, 0xCB955E5E, 0x624B2929, + 0x3C0C3030, 0xCE945A5A, 0xAB76DDDD, 0x867FF9F9, 0xF1649595, 0x5DBBE6E6, + 0x35F2C7C7, 0x2D092424, 0xD1C61717, 0xD66FB9B9, 0xDEC51B1B, 0x94861212, + 0x78186060, 0x30F3C3C3, 0x897CF5F5, 0x5CEFB3B3, 0xD23AE8E8, 0xACDF7373, + 0x794C3535, 0xA0208080, 0x9D78E5E5, 0x56EDBBBB, 0x235E7D7D, 0xC63EF8F8, + 0x8BD45F5F, 0xE7C82F2F, 0xDD39E4E4, 0x68492121 }; + +static ossl_inline uint32_t rotl(uint32_t a, uint8_t n) +{ + return (a << n) | (a >> (32 - n)); +} + +static ossl_inline uint32_t load_u32_be(const uint8_t *b, uint32_t n) +{ + return ((uint32_t)b[4 * n] << 24) | + ((uint32_t)b[4 * n + 1] << 16) | + ((uint32_t)b[4 * n + 2] << 8) | + ((uint32_t)b[4 * n + 3]); +} + +static ossl_inline void store_u32_be(uint32_t v, uint8_t *b) +{ + b[0] = (uint8_t)(v >> 24); + b[1] = (uint8_t)(v >> 16); + b[2] = (uint8_t)(v >> 8); + b[3] = (uint8_t)(v); +} + +static ossl_inline uint32_t SM4_T_slow(uint32_t X) +{ + uint32_t t = 0; + + t |= ((uint32_t)SM4_S[(uint8_t)(X >> 24)]) << 24; + t |= ((uint32_t)SM4_S[(uint8_t)(X >> 16)]) << 16; + t |= ((uint32_t)SM4_S[(uint8_t)(X >> 8)]) << 8; + t |= SM4_S[(uint8_t)X]; + + /* + * L linear transform + */ + return t ^ rotl(t, 2) ^ rotl(t, 10) ^ rotl(t, 18) ^ rotl(t, 24); +} + +static ossl_inline uint32_t SM4_T(uint32_t X) +{ + return SM4_SBOX_T[(uint8_t)(X >> 24)] ^ + rotl(SM4_SBOX_T[(uint8_t)(X >> 16)], 24) ^ + rotl(SM4_SBOX_T[(uint8_t)(X >> 8)], 16) ^ + rotl(SM4_SBOX_T[(uint8_t)X], 8); +} + +int SM4_set_key(const uint8_t *key, SM4_KEY *ks) +{ + /* + * Family Key + */ + static const uint32_t FK[4] = + { 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc }; + + /* + * Constant Key + */ + static const uint32_t CK[32] = { + 0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269, + 0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9, + 0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249, + 0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9, + 0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229, + 0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299, + 0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209, + 0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279 + }; + + uint32_t K[4]; + int i; + + K[0] = load_u32_be(key, 0) ^ FK[0]; + K[1] = load_u32_be(key, 1) ^ FK[1]; + K[2] = load_u32_be(key, 2) ^ FK[2]; + K[3] = load_u32_be(key, 3) ^ FK[3]; + + for (i = 0; i != SM4_KEY_SCHEDULE; ++i) { + uint32_t X = K[(i + 1) % 4] ^ K[(i + 2) % 4] ^ K[(i + 3) % 4] ^ CK[i]; + uint32_t t = 0; + + t |= ((uint32_t)SM4_S[(uint8_t)(X >> 24)]) << 24; + t |= ((uint32_t)SM4_S[(uint8_t)(X >> 16)]) << 16; + t |= ((uint32_t)SM4_S[(uint8_t)(X >> 8)]) << 8; + t |= SM4_S[(uint8_t)X]; + + t = t ^ rotl(t, 13) ^ rotl(t, 23); + K[i % 4] ^= t; + ks->rk[i] = K[i % 4]; + } + + return 1; +} + +#define SM4_RNDS(k0, k1, k2, k3, F) \ + do { \ + B0 ^= F(B1 ^ B2 ^ B3 ^ ks->rk[k0]); \ + B1 ^= F(B0 ^ B2 ^ B3 ^ ks->rk[k1]); \ + B2 ^= F(B0 ^ B1 ^ B3 ^ ks->rk[k2]); \ + B3 ^= F(B0 ^ B1 ^ B2 ^ ks->rk[k3]); \ + } while(0) + +void SM4_encrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks) +{ + uint32_t B0 = load_u32_be(in, 0); + uint32_t B1 = load_u32_be(in, 1); + uint32_t B2 = load_u32_be(in, 2); + uint32_t B3 = load_u32_be(in, 3); + + /* + * Uses byte-wise sbox in the first and last rounds to provide some + * protection from cache based side channels. + */ + SM4_RNDS( 0, 1, 2, 3, SM4_T_slow); + SM4_RNDS( 4, 5, 6, 7, SM4_T); + SM4_RNDS( 8, 9, 10, 11, SM4_T); + SM4_RNDS(12, 13, 14, 15, SM4_T); + SM4_RNDS(16, 17, 18, 19, SM4_T); + SM4_RNDS(20, 21, 22, 23, SM4_T); + SM4_RNDS(24, 25, 26, 27, SM4_T); + SM4_RNDS(28, 29, 30, 31, SM4_T_slow); + + store_u32_be(B3, out); + store_u32_be(B2, out + 4); + store_u32_be(B1, out + 8); + store_u32_be(B0, out + 12); +} + +void SM4_decrypt(const uint8_t *in, uint8_t *out, const SM4_KEY *ks) +{ + uint32_t B0 = load_u32_be(in, 0); + uint32_t B1 = load_u32_be(in, 1); + uint32_t B2 = load_u32_be(in, 2); + uint32_t B3 = load_u32_be(in, 3); + + SM4_RNDS(31, 30, 29, 28, SM4_T_slow); + SM4_RNDS(27, 26, 25, 24, SM4_T); + SM4_RNDS(23, 22, 21, 20, SM4_T); + SM4_RNDS(19, 18, 17, 16, SM4_T); + SM4_RNDS(15, 14, 13, 12, SM4_T); + SM4_RNDS(11, 10, 9, 8, SM4_T); + SM4_RNDS( 7, 6, 5, 4, SM4_T); + SM4_RNDS( 3, 2, 1, 0, SM4_T_slow); + + store_u32_be(B3, out); + store_u32_be(B2, out + 4); + store_u32_be(B1, out + 8); + store_u32_be(B0, out + 12); +} diff --git a/crypto/sparccpuid.S b/crypto/sparccpuid.S index c6ca2247..95acd2f9 100644 --- a/crypto/sparccpuid.S +++ b/crypto/sparccpuid.S @@ -5,10 +5,6 @@ ! in the file LICENSE in the source distribution or at ! https://www.openssl.org/source/license.html -#ifdef OPENSSL_FIPSCANISTER -#include -#endif - #if defined(__SUNPRO_C) && defined(__sparcv9) # define ABI64 /* They've said -xarch=v9 at command line */ #elif defined(__GNUC__) && defined(__arch64__) diff --git a/crypto/sparcv9cap.c b/crypto/sparcv9cap.c index 61d0334e..c8c56753 100644 --- a/crypto/sparcv9cap.c +++ b/crypto/sparcv9cap.c @@ -15,6 +15,7 @@ #include #include #include +#include "internal/cryptlib.h" #include "sparc_arch.h" @@ -98,7 +99,7 @@ unsigned long _sparcv9_random(void); size_t _sparcv9_vis1_instrument_bus(unsigned int *, size_t); size_t _sparcv9_vis1_instrument_bus2(unsigned int *, size_t, size_t); -unsigned long OPENSSL_rdtsc(void) +uint32_t OPENSSL_rdtsc(void) { if (OPENSSL_sparcv9cap_P[0] & SPARCV9_TICK_PRIVILEGED) #if defined(__sun) && defined(__SVR4) diff --git a/crypto/srp/srp_vfy.c b/crypto/srp/srp_vfy.c index 29b7afcb..eb4a38d4 100644 --- a/crypto/srp/srp_vfy.c +++ b/crypto/srp/srp_vfy.c @@ -19,126 +19,26 @@ # define SRP_RANDOM_SALT_LEN 20 # define MAX_LEN 2500 -static char b64table[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"; - -/* - * the following two conversion routines have been inspired by code from - * Stanford - */ - /* * Convert a base64 string into raw byte array representation. */ static int t_fromb64(unsigned char *a, size_t alen, const char *src) { - char *loc; - int i, j; - int size; + size_t size = strlen(src); - if (alen == 0 || alen > INT_MAX) + /* Four bytes in src become three bytes output. */ + if (size > INT_MAX || (size / 4) * 3 > alen) return -1; - while (*src && (*src == ' ' || *src == '\t' || *src == '\n')) - ++src; - size = strlen(src); - if (size < 0 || size >= (int)alen) - return -1; - - i = 0; - while (i < size) { - loc = strchr(b64table, src[i]); - if (loc == (char *)0) - break; - else - a[i] = loc - b64table; - ++i; - } - /* if nothing valid to process we have a zero length response */ - if (i == 0) - return 0; - size = i; - i = size - 1; - j = size; - while (1) { - a[j] = a[i]; - if (--i < 0) - break; - a[j] |= (a[i] & 3) << 6; - --j; - a[j] = (unsigned char)((a[i] & 0x3c) >> 2); - if (--i < 0) - break; - a[j] |= (a[i] & 0xf) << 4; - --j; - a[j] = (unsigned char)((a[i] & 0x30) >> 4); - if (--i < 0) - break; - a[j] |= (a[i] << 2); - - a[--j] = 0; - if (--i < 0) - break; - } - while (j <= size && a[j] == 0) - ++j; - i = 0; - while (j <= size) - a[i++] = a[j++]; - return i; + return EVP_DecodeBlock(a, (unsigned char *)src, (int)size); } /* * Convert a raw byte string into a null-terminated base64 ASCII string. */ -static char *t_tob64(char *dst, const unsigned char *src, int size) +static void t_tob64(char *dst, const unsigned char *src, int size) { - int c, pos = size % 3; - unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0; - char *olddst = dst; - - switch (pos) { - case 1: - b2 = src[0]; - break; - case 2: - b1 = src[0]; - b2 = src[1]; - break; - } - - while (1) { - c = (b0 & 0xfc) >> 2; - if (notleading || c != 0) { - *dst++ = b64table[c]; - notleading = 1; - } - c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4); - if (notleading || c != 0) { - *dst++ = b64table[c]; - notleading = 1; - } - c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6); - if (notleading || c != 0) { - *dst++ = b64table[c]; - notleading = 1; - } - c = b2 & 0x3f; - if (notleading || c != 0) { - *dst++ = b64table[c]; - notleading = 1; - } - if (pos >= size) - break; - else { - b0 = src[pos++]; - b1 = src[pos++]; - b2 = src[pos++]; - } - } - - *dst++ = '\0'; - return olddst; + EVP_EncodeBlock((unsigned char *)dst, src, size); } void SRP_user_pwd_free(SRP_user_pwd *user_pwd) @@ -474,7 +374,7 @@ static SRP_user_pwd *find_user(SRP_VBASE *vb, char *username) return NULL; } - #if OPENSSL_API_COMPAT < 0x10100000L +# if OPENSSL_API_COMPAT < 0x10100000L /* * DEPRECATED: use SRP_VBASE_get1_by_user instead. * This method ignores the configured seed and fails for an unknown user. @@ -485,7 +385,7 @@ SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username) { return find_user(vb, username); } -#endif +# endif /* * Ownership of the returned pointer is released to the caller. diff --git a/crypto/stack/stack.c b/crypto/stack/stack.c index 43ddf30a..fc755e36 100644 --- a/crypto/stack/stack.c +++ b/crypto/stack/stack.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,20 +12,25 @@ #include "internal/numbers.h" #include #include +#include +#include /* For ossl_inline */ + +/* + * The initial number of nodes in the array. + */ +static const int min_nodes = 4; +static const int max_nodes = SIZE_MAX / sizeof(void *) < INT_MAX + ? (int)(SIZE_MAX / sizeof(void *)) + : INT_MAX; struct stack_st { int num; - const char **data; + const void **data; int sorted; - size_t num_alloc; + int num_alloc; OPENSSL_sk_compfunc comp; }; -#undef MIN_NODES -#define MIN_NODES 4 - -#include - OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, OPENSSL_sk_compfunc c) { OPENSSL_sk_compfunc old = sk->comp; @@ -41,18 +46,22 @@ OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *sk) { OPENSSL_STACK *ret; - if (sk->num < 0) - return NULL; - if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) return NULL; /* direct structure assignment */ *ret = *sk; + if (sk->num == 0) { + /* postpone |ret->data| allocation */ + ret->data = NULL; + ret->num_alloc = 0; + return ret; + } + /* duplicate |sk->data| content */ if ((ret->data = OPENSSL_malloc(sizeof(*ret->data) * sk->num_alloc)) == NULL) goto err; - memcpy(ret->data, sk->data, sizeof(char *) * sk->num); + memcpy(ret->data, sk->data, sizeof(void *) * sk->num); return ret; err: OPENSSL_sk_free(ret); @@ -66,16 +75,20 @@ OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk, OPENSSL_STACK *ret; int i; - if (sk->num < 0) - return NULL; - if ((ret = OPENSSL_malloc(sizeof(*ret))) == NULL) return NULL; /* direct structure assignment */ *ret = *sk; - ret->num_alloc = sk->num > MIN_NODES ? (size_t)sk->num : MIN_NODES; + if (sk->num == 0) { + /* postpone |ret| data allocation */ + ret->data = NULL; + ret->num_alloc = 0; + return ret; + } + + ret->num_alloc = sk->num > min_nodes ? sk->num : min_nodes; ret->data = OPENSSL_zalloc(sizeof(*ret->data) * ret->num_alloc); if (ret->data == NULL) { OPENSSL_free(ret); @@ -98,52 +111,132 @@ OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *sk, OPENSSL_STACK *OPENSSL_sk_new_null(void) { - return OPENSSL_sk_new((OPENSSL_sk_compfunc)NULL); + return OPENSSL_sk_new_reserve(NULL, 0); } OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc c) { - OPENSSL_STACK *ret; + return OPENSSL_sk_new_reserve(c, 0); +} - if ((ret = OPENSSL_zalloc(sizeof(*ret))) == NULL) - goto err; - if ((ret->data = OPENSSL_zalloc(sizeof(*ret->data) * MIN_NODES)) == NULL) - goto err; - ret->comp = c; - ret->num_alloc = MIN_NODES; - return (ret); +/* + * Calculate the array growth based on the target size. + * + * The growth fraction is a rational number and is defined by a numerator + * and a denominator. According to Andrew Koenig in his paper "Why Are + * Vectors Efficient?" from JOOP 11(5) 1998, this factor should be less + * than the golden ratio (1.618...). + * + * We use 3/2 = 1.5 for simplicity of calculation and overflow checking. + * Another option 8/5 = 1.6 allows for slightly faster growth, although safe + * computation is more difficult. + * + * The limit to avoid overflow is spot on. The modulo three correction term + * ensures that the limit is the largest number than can be expanded by the + * growth factor without exceeding the hard limit. + * + * Do not call it with |current| lower than 2, or it will infinitely loop. + */ +static ossl_inline int compute_growth(int target, int current) +{ + const int limit = (max_nodes / 3) * 2 + (max_nodes % 3 ? 1 : 0); - err: - OPENSSL_free(ret); - return (NULL); + while (current < target) { + /* Check to see if we're at the hard limit */ + if (current >= max_nodes) + return 0; + + /* Expand the size by a factor of 3/2 if it is within range */ + current = current < limit ? current + current / 2 : max_nodes; + } + return current; +} + +/* internal STACK storage allocation */ +static int sk_reserve(OPENSSL_STACK *st, int n, int exact) +{ + const void **tmpdata; + int num_alloc; + + /* Check to see the reservation isn't exceeding the hard limit */ + if (n > max_nodes - st->num) + return 0; + + /* Figure out the new size */ + num_alloc = st->num + n; + if (num_alloc < min_nodes) + num_alloc = min_nodes; + + /* If |st->data| allocation was postponed */ + if (st->data == NULL) { + /* + * At this point, |st->num_alloc| and |st->num| are 0; + * so |num_alloc| value is |n| or |min_nodes| if greater than |n|. + */ + st->data = OPENSSL_zalloc(sizeof(void *) * num_alloc); + if (st->data == NULL) + return 0; + st->num_alloc = num_alloc; + return 1; + } + + if (!exact) { + if (num_alloc <= st->num_alloc) + return 1; + num_alloc = compute_growth(num_alloc, st->num_alloc); + if (num_alloc == 0) + return 0; + } else if (num_alloc == st->num_alloc) { + return 1; + } + + tmpdata = OPENSSL_realloc((void *)st->data, sizeof(void *) * num_alloc); + if (tmpdata == NULL) + return 0; + + st->data = tmpdata; + st->num_alloc = num_alloc; + return 1; +} + +OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n) +{ + OPENSSL_STACK *st = OPENSSL_zalloc(sizeof(OPENSSL_STACK)); + + if (st == NULL) + return NULL; + + st->comp = c; + + if (n <= 0) + return st; + + if (!sk_reserve(st, n, 1)) { + OPENSSL_sk_free(st); + return NULL; + } + + return st; +} + +int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n) +{ + if (st == NULL) + return 0; + + if (n < 0) + return 1; + return sk_reserve(st, n, 1); } int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc) { - if (st == NULL || st->num < 0 || st->num == INT_MAX) { + if (st == NULL || st->num == max_nodes) return 0; - } - if (st->num_alloc <= (size_t)(st->num + 1)) { - size_t doub_num_alloc = st->num_alloc * 2; - const char **tmpdata; + if (!sk_reserve(st, 1, 0)) + return 0; - /* Overflow checks */ - if (doub_num_alloc < st->num_alloc) - return 0; - - /* Avoid overflow due to multiplication by sizeof(char *) */ - if (doub_num_alloc > SIZE_MAX / sizeof(char *)) - return 0; - - tmpdata = OPENSSL_realloc((char *)st->data, - sizeof(char *) * doub_num_alloc); - if (tmpdata == NULL) - return 0; - - st->data = tmpdata; - st->num_alloc = doub_num_alloc; - } if ((loc >= st->num) || (loc < 0)) { st->data[st->num] = data; } else { @@ -156,29 +249,34 @@ int OPENSSL_sk_insert(OPENSSL_STACK *st, const void *data, int loc) return st->num; } +static ossl_inline void *internal_delete(OPENSSL_STACK *st, int loc) +{ + const void *ret = st->data[loc]; + + if (loc != st->num - 1) + memmove(&st->data[loc], &st->data[loc + 1], + sizeof(st->data[0]) * (st->num - loc - 1)); + st->num--; + + return (void *)ret; +} + void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p) { int i; for (i = 0; i < st->num; i++) if (st->data[i] == p) - return OPENSSL_sk_delete(st, i); + return internal_delete(st, i); return NULL; } void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc) { - const char *ret; - if (st == NULL || loc < 0 || loc >= st->num) return NULL; - ret = st->data[loc]; - if (loc != st->num - 1) - memmove(&st->data[loc], &st->data[loc + 1], - sizeof(st->data[0]) * (st->num - loc - 1)); - st->num--; - return (void *)ret; + return internal_delete(st, loc); } static int internal_find(OPENSSL_STACK *st, const void *data, @@ -187,23 +285,27 @@ static int internal_find(OPENSSL_STACK *st, const void *data, const void *r; int i; - if (st == NULL) + if (st == NULL || st->num == 0) return -1; if (st->comp == NULL) { for (i = 0; i < st->num; i++) if (st->data[i] == data) - return (i); - return (-1); + return i; + return -1; + } + + if (!st->sorted) { + if (st->num > 1) + qsort(st->data, st->num, sizeof(void *), st->comp); + st->sorted = 1; /* empty or single-element stack is considered sorted */ } - OPENSSL_sk_sort(st); if (data == NULL) - return (-1); + return -1; r = OBJ_bsearch_ex_(&data, st->data, st->num, sizeof(void *), st->comp, ret_val_options); - if (r == NULL) - return (-1); - return (int)((const char **)r - st->data); + + return r == NULL ? -1 : (int)((const void **)r - st->data); } int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data) @@ -218,37 +320,33 @@ int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data) int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data) { - return (OPENSSL_sk_insert(st, data, st->num)); + if (st == NULL) + return -1; + return OPENSSL_sk_insert(st, data, st->num); } int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data) { - return (OPENSSL_sk_insert(st, data, 0)); + return OPENSSL_sk_insert(st, data, 0); } void *OPENSSL_sk_shift(OPENSSL_STACK *st) { - if (st == NULL) - return (NULL); - if (st->num <= 0) - return (NULL); - return (OPENSSL_sk_delete(st, 0)); + if (st == NULL || st->num == 0) + return NULL; + return internal_delete(st, 0); } void *OPENSSL_sk_pop(OPENSSL_STACK *st) { - if (st == NULL) - return (NULL); - if (st->num <= 0) - return (NULL); - return (OPENSSL_sk_delete(st, st->num - 1)); + if (st == NULL || st->num == 0) + return NULL; + return internal_delete(st, st->num - 1); } void OPENSSL_sk_zero(OPENSSL_STACK *st) { - if (st == NULL) - return; - if (st->num <= 0) + if (st == NULL || st->num == 0) return; memset(st->data, 0, sizeof(*st->data) * st->num); st->num = 0; @@ -276,9 +374,7 @@ void OPENSSL_sk_free(OPENSSL_STACK *st) int OPENSSL_sk_num(const OPENSSL_STACK *st) { - if (st == NULL) - return -1; - return st->num; + return st == NULL ? -1 : st->num; } void *OPENSSL_sk_value(const OPENSSL_STACK *st, int i) @@ -293,20 +389,20 @@ void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data) if (st == NULL || i < 0 || i >= st->num) return NULL; st->data[i] = data; + st->sorted = 0; return (void *)st->data[i]; } void OPENSSL_sk_sort(OPENSSL_STACK *st) { - if (st && !st->sorted && st->comp != NULL) { - qsort(st->data, st->num, sizeof(char *), st->comp); - st->sorted = 1; + if (st != NULL && !st->sorted && st->comp != NULL) { + if (st->num > 1) + qsort(st->data, st->num, sizeof(void *), st->comp); + st->sorted = 1; /* empty or single-element stack is considered sorted */ } } int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st) { - if (st == NULL) - return 1; - return st->sorted; + return st == NULL ? 1 : st->sorted; } diff --git a/crypto/store/build.info b/crypto/store/build.info new file mode 100644 index 00000000..7d882f31 --- /dev/null +++ b/crypto/store/build.info @@ -0,0 +1,4 @@ +LIBS=../../libcrypto +SOURCE[../../libcrypto]=\ + store_err.c store_init.c store_lib.c store_register.c store_strings.c \ + loader_file.c diff --git a/crypto/store/loader_file.c b/crypto/store/loader_file.c new file mode 100644 index 00000000..ea1b3216 --- /dev/null +++ b/crypto/store/loader_file.c @@ -0,0 +1,1436 @@ +/* + * 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 "e_os.h" +#include +#include +#include +#include + +#include +#include /* For d2i_DSAPrivateKey */ +#include +#include +#include +#include /* For the PKCS8 stuff o.O */ +#include /* For d2i_RSAPrivateKey */ +#include +#include +#include +#include /* For the PKCS8 stuff o.O */ +#include "internal/asn1_int.h" +#include "internal/ctype.h" +#include "internal/o_dir.h" +#include "internal/cryptlib.h" +#include "internal/store_int.h" +#include "store_locl.h" + +#ifdef _WIN32 +# define stat _stat +#endif + +/*- + * Password prompting + * ------------------ + */ + +static char *file_get_pass(const UI_METHOD *ui_method, char *pass, + size_t maxsize, const char *prompt_info, void *data) +{ + UI *ui = UI_new(); + char *prompt = NULL; + + if (ui == NULL) { + OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_MALLOC_FAILURE); + return NULL; + } + + if (ui_method != NULL) + UI_set_method(ui, ui_method); + UI_add_user_data(ui, data); + + if ((prompt = UI_construct_prompt(ui, "pass phrase", + prompt_info)) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_MALLOC_FAILURE); + pass = NULL; + } else if (!UI_add_input_string(ui, prompt, UI_INPUT_FLAG_DEFAULT_PWD, + pass, 0, maxsize - 1)) { + OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_UI_LIB); + pass = NULL; + } else { + switch (UI_process(ui)) { + case -2: + OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, + OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED); + pass = NULL; + break; + case -1: + OSSL_STOREerr(OSSL_STORE_F_FILE_GET_PASS, ERR_R_UI_LIB); + pass = NULL; + break; + default: + break; + } + } + + OPENSSL_free(prompt); + UI_free(ui); + return pass; +} + +struct pem_pass_data { + const UI_METHOD *ui_method; + void *data; + const char *prompt_info; +}; + +static int file_fill_pem_pass_data(struct pem_pass_data *pass_data, + const char *prompt_info, + const UI_METHOD *ui_method, void *ui_data) +{ + if (pass_data == NULL) + return 0; + pass_data->ui_method = ui_method; + pass_data->data = ui_data; + pass_data->prompt_info = prompt_info; + return 1; +} + +/* This is used anywhere a pem_password_cb is needed */ +static int file_get_pem_pass(char *buf, int num, int w, void *data) +{ + struct pem_pass_data *pass_data = data; + char *pass = file_get_pass(pass_data->ui_method, buf, num, + pass_data->prompt_info, pass_data->data); + + return pass == NULL ? 0 : strlen(pass); +} + +/*- + * The file scheme decoders + * ------------------------ + * + * Each possible data type has its own decoder, which either operates + * through a given PEM name, or attempts to decode to see if the blob + * it's given is decodable for its data type. The assumption is that + * only the correct data type will match the content. + */ + +/*- + * The try_decode function is called to check if the blob of data can + * be used by this handler, and if it can, decodes it into a supported + * OpenSSL type and returns a OSSL_STORE_INFO with the decoded data. + * Input: + * pem_name: If this blob comes from a PEM file, this holds + * the PEM name. If it comes from another type of + * file, this is NULL. + * pem_header: If this blob comes from a PEM file, this holds + * the PEM headers. If it comes from another type of + * file, this is NULL. + * blob: The blob of data to match with what this handler + * can use. + * len: The length of the blob. + * handler_ctx: For a handler marked repeatable, this pointer can + * be used to create a context for the handler. IT IS + * THE HANDLER'S RESPONSIBILITY TO CREATE AND DESTROY + * THIS CONTEXT APPROPRIATELY, i.e. create on first call + * and destroy when about to return NULL. + * matchcount: A pointer to an int to count matches for this data. + * Usually becomes 0 (no match) or 1 (match!), but may + * be higher in the (unlikely) event that the data matches + * more than one possibility. The int will always be + * zero when the function is called. + * ui_method: Application UI method for getting a password, pin + * or any other interactive data. + * ui_data: Application data to be passed to ui_method when + * it's called. + * Output: + * a OSSL_STORE_INFO + */ +typedef OSSL_STORE_INFO *(*file_try_decode_fn)(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **handler_ctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data); +/* + * The eof function should return 1 if there's no more data to be found + * with the handler_ctx, otherwise 0. This is only used when the handler is + * marked repeatable. + */ +typedef int (*file_eof_fn)(void *handler_ctx); +/* + * The destroy_ctx function is used to destroy the handler_ctx that was + * intiated by a repeatable try_decode fuction. This is only used when + * the handler is marked repeatable. + */ +typedef void (*file_destroy_ctx_fn)(void **handler_ctx); + +typedef struct file_handler_st { + const char *name; + file_try_decode_fn try_decode; + file_eof_fn eof; + file_destroy_ctx_fn destroy_ctx; + + /* flags */ + int repeatable; +} FILE_HANDLER; + +/* + * PKCS#12 decoder. It operates by decoding all of the blob content, + * extracting all the interesting data from it and storing them internally, + * then serving them one piece at a time. + */ +static OSSL_STORE_INFO *try_decode_PKCS12(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *store_info = NULL; + STACK_OF(OSSL_STORE_INFO) *ctx = *pctx; + + if (ctx == NULL) { + /* Initial parsing */ + PKCS12 *p12; + int ok = 0; + + if (pem_name != NULL) + /* No match, there is no PEM PKCS12 tag */ + return NULL; + + if ((p12 = d2i_PKCS12(NULL, &blob, len)) != NULL) { + char *pass = NULL; + char tpass[PEM_BUFSIZE]; + EVP_PKEY *pkey = NULL; + X509 *cert = NULL; + STACK_OF(X509) *chain = NULL; + + *matchcount = 1; + + if (PKCS12_verify_mac(p12, "", 0) + || PKCS12_verify_mac(p12, NULL, 0)) { + pass = ""; + } else { + if ((pass = file_get_pass(ui_method, tpass, PEM_BUFSIZE, + "PKCS12 import password", + ui_data)) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PKCS12, + OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR); + goto p12_end; + } + if (!PKCS12_verify_mac(p12, pass, strlen(pass))) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PKCS12, + OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC); + goto p12_end; + } + } + + if (PKCS12_parse(p12, pass, &pkey, &cert, &chain)) { + OSSL_STORE_INFO *si_pkey = NULL; + OSSL_STORE_INFO *si_cert = NULL; + OSSL_STORE_INFO *si_ca = NULL; + + if ((ctx = sk_OSSL_STORE_INFO_new_null()) != NULL + && (si_pkey = OSSL_STORE_INFO_new_PKEY(pkey)) != NULL + && sk_OSSL_STORE_INFO_push(ctx, si_pkey) != 0 + && (si_cert = OSSL_STORE_INFO_new_CERT(cert)) != NULL + && sk_OSSL_STORE_INFO_push(ctx, si_cert) != 0) { + ok = 1; + si_pkey = NULL; + si_cert = NULL; + + while(sk_X509_num(chain) > 0) { + X509 *ca = sk_X509_value(chain, 0); + + if ((si_ca = OSSL_STORE_INFO_new_CERT(ca)) == NULL + || sk_OSSL_STORE_INFO_push(ctx, si_ca) == 0) { + ok = 0; + break; + } + si_ca = NULL; + (void)sk_X509_shift(chain); + } + } + if (!ok) { + OSSL_STORE_INFO_free(si_ca); + OSSL_STORE_INFO_free(si_cert); + OSSL_STORE_INFO_free(si_pkey); + sk_OSSL_STORE_INFO_pop_free(ctx, OSSL_STORE_INFO_free); + EVP_PKEY_free(pkey); + X509_free(cert); + sk_X509_pop_free(chain, X509_free); + ctx = NULL; + } + *pctx = ctx; + } + } + p12_end: + PKCS12_free(p12); + if (!ok) + return NULL; + } + + if (ctx != NULL) { + *matchcount = 1; + store_info = sk_OSSL_STORE_INFO_shift(ctx); + } + + return store_info; +} + +static int eof_PKCS12(void *ctx_) +{ + STACK_OF(OSSL_STORE_INFO) *ctx = ctx_; + + return ctx == NULL || sk_OSSL_STORE_INFO_num(ctx) == 0; +} + +static void destroy_ctx_PKCS12(void **pctx) +{ + STACK_OF(OSSL_STORE_INFO) *ctx = *pctx; + + sk_OSSL_STORE_INFO_pop_free(ctx, OSSL_STORE_INFO_free); + *pctx = NULL; +} + +static FILE_HANDLER PKCS12_handler = { + "PKCS12", + try_decode_PKCS12, + eof_PKCS12, + destroy_ctx_PKCS12, + 1 /* repeatable */ +}; + +/* + * Encrypted PKCS#8 decoder. It operates by just decrypting the given blob + * into a new blob, which is returned as an EMBEDDED STORE_INFO. The whole + * decoding process will then start over with the new blob. + */ +static OSSL_STORE_INFO *try_decode_PKCS8Encrypted(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + X509_SIG *p8 = NULL; + char kbuf[PEM_BUFSIZE]; + char *pass = NULL; + const X509_ALGOR *dalg = NULL; + const ASN1_OCTET_STRING *doct = NULL; + OSSL_STORE_INFO *store_info = NULL; + BUF_MEM *mem = NULL; + unsigned char *new_data = NULL; + int new_data_len; + + if (pem_name != NULL) { + if (strcmp(pem_name, PEM_STRING_PKCS8) != 0) + return NULL; + *matchcount = 1; + } + + if ((p8 = d2i_X509_SIG(NULL, &blob, len)) == NULL) + return NULL; + + *matchcount = 1; + + if ((mem = BUF_MEM_new()) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED, + ERR_R_MALLOC_FAILURE); + goto nop8; + } + + if ((pass = file_get_pass(ui_method, kbuf, PEM_BUFSIZE, + "PKCS8 decrypt password", ui_data)) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED, + OSSL_STORE_R_BAD_PASSWORD_READ); + goto nop8; + } + + X509_SIG_get0(p8, &dalg, &doct); + if (!PKCS12_pbe_crypt(dalg, pass, strlen(pass), doct->data, doct->length, + &new_data, &new_data_len, 0)) + goto nop8; + + mem->data = (char *)new_data; + mem->max = mem->length = (size_t)new_data_len; + X509_SIG_free(p8); + + store_info = ossl_store_info_new_EMBEDDED(PEM_STRING_PKCS8INF, mem); + if (store_info == NULL) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED, + ERR_R_MALLOC_FAILURE); + goto nop8; + } + + return store_info; + nop8: + X509_SIG_free(p8); + BUF_MEM_free(mem); + return NULL; +} + +static FILE_HANDLER PKCS8Encrypted_handler = { + "PKCS8Encrypted", + try_decode_PKCS8Encrypted +}; + +/* + * Private key decoder. Decodes all sorts of private keys, both PKCS#8 + * encoded ones and old style PEM ones (with the key type is encoded into + * the PEM name). + */ +int pem_check_suffix(const char *pem_str, const char *suffix); +static OSSL_STORE_INFO *try_decode_PrivateKey(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *store_info = NULL; + EVP_PKEY *pkey = NULL; + const EVP_PKEY_ASN1_METHOD *ameth = NULL; + + if (pem_name != NULL) { + if (strcmp(pem_name, PEM_STRING_PKCS8INF) == 0) { + PKCS8_PRIV_KEY_INFO *p8inf = + d2i_PKCS8_PRIV_KEY_INFO(NULL, &blob, len); + + *matchcount = 1; + if (p8inf != NULL) + pkey = EVP_PKCS82PKEY(p8inf); + PKCS8_PRIV_KEY_INFO_free(p8inf); + } else { + int slen; + + if ((slen = pem_check_suffix(pem_name, "PRIVATE KEY")) > 0 + && (ameth = EVP_PKEY_asn1_find_str(NULL, pem_name, + slen)) != NULL) { + *matchcount = 1; + pkey = d2i_PrivateKey(ameth->pkey_id, NULL, &blob, len); + } + } + } else { + int i; + + for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { + EVP_PKEY *tmp_pkey = NULL; + const unsigned char *tmp_blob = blob; + + ameth = EVP_PKEY_asn1_get0(i); + if (ameth->pkey_flags & ASN1_PKEY_ALIAS) + continue; + + tmp_pkey = d2i_PrivateKey(ameth->pkey_id, NULL, &tmp_blob, len); + if (tmp_pkey != NULL) { + if (pkey != NULL) + EVP_PKEY_free(tmp_pkey); + else + pkey = tmp_pkey; + (*matchcount)++; + } + } + + if (*matchcount > 1) { + EVP_PKEY_free(pkey); + pkey = NULL; + } + } + if (pkey == NULL) + /* No match */ + return NULL; + + store_info = OSSL_STORE_INFO_new_PKEY(pkey); + if (store_info == NULL) + EVP_PKEY_free(pkey); + + return store_info; +} + +static FILE_HANDLER PrivateKey_handler = { + "PrivateKey", + try_decode_PrivateKey +}; + +/* + * Public key decoder. Only supports SubjectPublicKeyInfo formated keys. + */ +static OSSL_STORE_INFO *try_decode_PUBKEY(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *store_info = NULL; + EVP_PKEY *pkey = NULL; + + if (pem_name != NULL) { + if (strcmp(pem_name, PEM_STRING_PUBLIC) != 0) + /* No match */ + return NULL; + *matchcount = 1; + } + + if ((pkey = d2i_PUBKEY(NULL, &blob, len)) != NULL) { + *matchcount = 1; + store_info = OSSL_STORE_INFO_new_PKEY(pkey); + } + + return store_info; +} + +static FILE_HANDLER PUBKEY_handler = { + "PUBKEY", + try_decode_PUBKEY +}; + +/* + * Key parameter decoder. + */ +static OSSL_STORE_INFO *try_decode_params(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *store_info = NULL; + int slen = 0; + EVP_PKEY *pkey = NULL; + const EVP_PKEY_ASN1_METHOD *ameth = NULL; + int ok = 0; + + if (pem_name != NULL) { + if ((slen = pem_check_suffix(pem_name, "PARAMETERS")) == 0) + return NULL; + *matchcount = 1; + } + + if (slen > 0) { + if ((pkey = EVP_PKEY_new()) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PARAMS, ERR_R_EVP_LIB); + return NULL; + } + + + if (EVP_PKEY_set_type_str(pkey, pem_name, slen) + && (ameth = EVP_PKEY_get0_asn1(pkey)) != NULL + && ameth->param_decode != NULL + && ameth->param_decode(pkey, &blob, len)) + ok = 1; + } else { + int i; + EVP_PKEY *tmp_pkey = NULL; + + for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { + const unsigned char *tmp_blob = blob; + + if (tmp_pkey == NULL && (tmp_pkey = EVP_PKEY_new()) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_TRY_DECODE_PARAMS, ERR_R_EVP_LIB); + break; + } + + ameth = EVP_PKEY_asn1_get0(i); + if (ameth->pkey_flags & ASN1_PKEY_ALIAS) + continue; + + if (EVP_PKEY_set_type(tmp_pkey, ameth->pkey_id) + && (ameth = EVP_PKEY_get0_asn1(tmp_pkey)) != NULL + && ameth->param_decode != NULL + && ameth->param_decode(tmp_pkey, &tmp_blob, len)) { + if (pkey != NULL) + EVP_PKEY_free(tmp_pkey); + else + pkey = tmp_pkey; + tmp_pkey = NULL; + (*matchcount)++; + } + } + + EVP_PKEY_free(tmp_pkey); + if (*matchcount == 1) { + ok = 1; + } + } + + if (ok) + store_info = OSSL_STORE_INFO_new_PARAMS(pkey); + if (store_info == NULL) + EVP_PKEY_free(pkey); + + return store_info; +} + +static FILE_HANDLER params_handler = { + "params", + try_decode_params +}; + +/* + * X.509 certificate decoder. + */ +static OSSL_STORE_INFO *try_decode_X509Certificate(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *store_info = NULL; + X509 *cert = NULL; + + /* + * In most cases, we can try to interpret the serialized data as a trusted + * cert (X509 + X509_AUX) and fall back to reading it as a normal cert + * (just X509), but if the PEM name specifically declares it as a trusted + * cert, then no fallback should be engaged. |ignore_trusted| tells if + * the fallback can be used (1) or not (0). + */ + int ignore_trusted = 1; + + if (pem_name != NULL) { + if (strcmp(pem_name, PEM_STRING_X509_TRUSTED) == 0) + ignore_trusted = 0; + else if (strcmp(pem_name, PEM_STRING_X509_OLD) != 0 + && strcmp(pem_name, PEM_STRING_X509) != 0) + /* No match */ + return NULL; + *matchcount = 1; + } + + if ((cert = d2i_X509_AUX(NULL, &blob, len)) != NULL + || (ignore_trusted && (cert = d2i_X509(NULL, &blob, len)) != NULL)) { + *matchcount = 1; + store_info = OSSL_STORE_INFO_new_CERT(cert); + } + + if (store_info == NULL) + X509_free(cert); + + return store_info; +} + +static FILE_HANDLER X509Certificate_handler = { + "X509Certificate", + try_decode_X509Certificate +}; + +/* + * X.509 CRL decoder. + */ +static OSSL_STORE_INFO *try_decode_X509CRL(const char *pem_name, + const char *pem_header, + const unsigned char *blob, + size_t len, void **pctx, + int *matchcount, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *store_info = NULL; + X509_CRL *crl = NULL; + + if (pem_name != NULL) { + if (strcmp(pem_name, PEM_STRING_X509_CRL) != 0) + /* No match */ + return NULL; + *matchcount = 1; + } + + if ((crl = d2i_X509_CRL(NULL, &blob, len)) != NULL) { + *matchcount = 1; + store_info = OSSL_STORE_INFO_new_CRL(crl); + } + + if (store_info == NULL) + X509_CRL_free(crl); + + return store_info; +} + +static FILE_HANDLER X509CRL_handler = { + "X509CRL", + try_decode_X509CRL +}; + +/* + * To finish it all off, we collect all the handlers. + */ +static const FILE_HANDLER *file_handlers[] = { + &PKCS12_handler, + &PKCS8Encrypted_handler, + &X509Certificate_handler, + &X509CRL_handler, + ¶ms_handler, + &PUBKEY_handler, + &PrivateKey_handler, +}; + + +/*- + * The loader itself + * ----------------- + */ + +struct ossl_store_loader_ctx_st { + enum { + is_raw = 0, + is_pem, + is_dir + } type; + int errcnt; +#define FILE_FLAG_SECMEM (1<<0) + unsigned int flags; + union { + struct { /* Used with is_raw and is_pem */ + BIO *file; + + /* + * The following are used when the handler is marked as + * repeatable + */ + const FILE_HANDLER *last_handler; + void *last_handler_ctx; + } file; + struct { /* Used with is_dir */ + OPENSSL_DIR_CTX *ctx; + int end_reached; + char *uri; + + /* + * When a search expression is given, these are filled in. + * |search_name| contains the file basename to look for. + * The string is exactly 8 characters long. + */ + char search_name[9]; + + /* + * The directory reading utility we have combines opening with + * reading the first name. To make sure we can detect the end + * at the right time, we read early and cache the name. + */ + const char *last_entry; + int last_errno; + } dir; + } _; + + /* Expected object type. May be unspecified */ + int expected_type; +}; + +static void OSSL_STORE_LOADER_CTX_free(OSSL_STORE_LOADER_CTX *ctx) +{ + if (ctx->type == is_dir) { + OPENSSL_free(ctx->_.dir.uri); + } else { + if (ctx->_.file.last_handler != NULL) { + ctx->_.file.last_handler->destroy_ctx(&ctx->_.file.last_handler_ctx); + ctx->_.file.last_handler_ctx = NULL; + ctx->_.file.last_handler = NULL; + } + } + OPENSSL_free(ctx); +} + +static OSSL_STORE_LOADER_CTX *file_open(const OSSL_STORE_LOADER *loader, + const char *uri, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_LOADER_CTX *ctx = NULL; + struct stat st; + struct { + const char *path; + unsigned int check_absolute:1; + } path_data[2]; + size_t path_data_n = 0, i; + const char *path; + + /* + * First step, just take the URI as is. + */ + path_data[path_data_n].check_absolute = 0; + path_data[path_data_n++].path = uri; + + /* + * Second step, if the URI appears to start with the 'file' scheme, + * extract the path and make that the second path to check. + * There's a special case if the URI also contains an authority, then + * the full URI shouldn't be used as a path anywhere. + */ + if (strncasecmp(uri, "file:", 5) == 0) { + const char *p = &uri[5]; + + if (strncmp(&uri[5], "//", 2) == 0) { + path_data_n--; /* Invalidate using the full URI */ + if (strncasecmp(&uri[7], "localhost/", 10) == 0) { + p = &uri[16]; + } else if (uri[7] == '/') { + p = &uri[7]; + } else { + OSSL_STOREerr(OSSL_STORE_F_FILE_OPEN, + OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED); + return NULL; + } + } + + path_data[path_data_n].check_absolute = 1; +#ifdef _WIN32 + /* Windows file: URIs with a drive letter start with a / */ + if (p[0] == '/' && p[2] == ':' && p[3] == '/') { + char c = ossl_tolower(p[1]); + + if (c >= 'a' && c <= 'z') { + p++; + /* We know it's absolute, so no need to check */ + path_data[path_data_n].check_absolute = 0; + } + } +#endif + path_data[path_data_n++].path = p; + } + + + for (i = 0, path = NULL; path == NULL && i < path_data_n; i++) { + /* + * If the scheme "file" was an explicit part of the URI, the path must + * be absolute. So says RFC 8089 + */ + if (path_data[i].check_absolute && path_data[i].path[0] != '/') { + OSSL_STOREerr(OSSL_STORE_F_FILE_OPEN, + OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE); + ERR_add_error_data(1, path_data[i].path); + return NULL; + } + + if (stat(path_data[i].path, &st) < 0) { + SYSerr(SYS_F_STAT, errno); + ERR_add_error_data(1, path_data[i].path); + } else { + path = path_data[i].path; + } + } + if (path == NULL) { + return NULL; + } + + /* Successfully found a working path, clear possible collected errors */ + ERR_clear_error(); + + ctx = OPENSSL_zalloc(sizeof(*ctx)); + if (ctx == NULL) { + OSSL_STOREerr(OSSL_STORE_F_FILE_OPEN, ERR_R_MALLOC_FAILURE); + return NULL; + } + + if ((st.st_mode & S_IFDIR) == S_IFDIR) { + /* + * Try to copy everything, even if we know that some of them must be + * NULL for the moment. This prevents errors in the future, when more + * components may be used. + */ + ctx->_.dir.uri = OPENSSL_strdup(uri); + ctx->type = is_dir; + + if (ctx->_.dir.uri == NULL) + goto err; + + ctx->_.dir.last_entry = OPENSSL_DIR_read(&ctx->_.dir.ctx, path); + ctx->_.dir.last_errno = errno; + if (ctx->_.dir.last_entry == NULL) { + if (ctx->_.dir.last_errno != 0) { + char errbuf[256]; + errno = ctx->_.dir.last_errno; + openssl_strerror_r(errno, errbuf, sizeof(errbuf)); + OSSL_STOREerr(OSSL_STORE_F_FILE_OPEN, ERR_R_SYS_LIB); + ERR_add_error_data(1, errbuf); + goto err; + } + ctx->_.dir.end_reached = 1; + } + } else { + BIO *buff = NULL; + char peekbuf[4096] = { 0, }; + + if ((buff = BIO_new(BIO_f_buffer())) == NULL + || (ctx->_.file.file = BIO_new_file(path, "rb")) == NULL) { + BIO_free_all(buff); + goto err; + } + + ctx->_.file.file = BIO_push(buff, ctx->_.file.file); + if (BIO_buffer_peek(ctx->_.file.file, peekbuf, sizeof(peekbuf) - 1) > 0) { + peekbuf[sizeof(peekbuf) - 1] = '\0'; + if (strstr(peekbuf, "-----BEGIN ") != NULL) + ctx->type = is_pem; + } + } + + return ctx; + err: + OSSL_STORE_LOADER_CTX_free(ctx); + return NULL; +} + +static int file_ctrl(OSSL_STORE_LOADER_CTX *ctx, int cmd, va_list args) +{ + int ret = 1; + + switch (cmd) { + case OSSL_STORE_C_USE_SECMEM: + { + int on = *(va_arg(args, int *)); + + switch (on) { + case 0: + ctx->flags &= ~FILE_FLAG_SECMEM; + break; + case 1: + ctx->flags |= FILE_FLAG_SECMEM; + break; + default: + OSSL_STOREerr(OSSL_STORE_F_FILE_CTRL, + ERR_R_PASSED_INVALID_ARGUMENT); + ret = 0; + break; + } + } + break; + default: + break; + } + + return ret; +} + +static int file_expect(OSSL_STORE_LOADER_CTX *ctx, int expected) +{ + ctx->expected_type = expected; + return 1; +} + +static int file_find(OSSL_STORE_LOADER_CTX *ctx, OSSL_STORE_SEARCH *search) +{ + /* + * If ctx == NULL, the library is looking to know if this loader supports + * the given search type. + */ + + if (OSSL_STORE_SEARCH_get_type(search) == OSSL_STORE_SEARCH_BY_NAME) { + unsigned long hash = 0; + + if (ctx == NULL) + return 1; + + if (ctx->type != is_dir) { + OSSL_STOREerr(OSSL_STORE_F_FILE_FIND, + OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES); + return 0; + } + + hash = X509_NAME_hash(OSSL_STORE_SEARCH_get0_name(search)); + BIO_snprintf(ctx->_.dir.search_name, sizeof(ctx->_.dir.search_name), + "%08lx", hash); + return 1; + } + + if (ctx != NULL) + OSSL_STOREerr(OSSL_STORE_F_FILE_FIND, + OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE); + return 0; +} + +/* Internal function to decode an already opened PEM file */ +OSSL_STORE_LOADER_CTX *ossl_store_file_attach_pem_bio_int(BIO *bp) +{ + OSSL_STORE_LOADER_CTX *ctx = OPENSSL_zalloc(sizeof(*ctx)); + + if (ctx == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + ctx->_.file.file = bp; + ctx->type = is_pem; + + return ctx; +} + +static OSSL_STORE_INFO *file_load_try_decode(OSSL_STORE_LOADER_CTX *ctx, + const char *pem_name, + const char *pem_header, + unsigned char *data, size_t len, + const UI_METHOD *ui_method, + void *ui_data, int *matchcount) +{ + OSSL_STORE_INFO *result = NULL; + BUF_MEM *new_mem = NULL; + char *new_pem_name = NULL; + int t = 0; + + again: + { + size_t i = 0; + void *handler_ctx = NULL; + const FILE_HANDLER **matching_handlers = + OPENSSL_zalloc(sizeof(*matching_handlers) + * OSSL_NELEM(file_handlers)); + + if (matching_handlers == NULL) { + OSSL_STOREerr(OSSL_STORE_F_FILE_LOAD_TRY_DECODE, + ERR_R_MALLOC_FAILURE); + goto err; + } + + *matchcount = 0; + for (i = 0; i < OSSL_NELEM(file_handlers); i++) { + const FILE_HANDLER *handler = file_handlers[i]; + int try_matchcount = 0; + void *tmp_handler_ctx = NULL; + OSSL_STORE_INFO *tmp_result = + handler->try_decode(pem_name, pem_header, data, len, + &tmp_handler_ctx, &try_matchcount, + ui_method, ui_data); + + if (try_matchcount > 0) { + + matching_handlers[*matchcount] = handler; + + if (handler_ctx) + handler->destroy_ctx(&handler_ctx); + handler_ctx = tmp_handler_ctx; + + if ((*matchcount += try_matchcount) > 1) { + /* more than one match => ambiguous, kill any result */ + OSSL_STORE_INFO_free(result); + OSSL_STORE_INFO_free(tmp_result); + if (handler->destroy_ctx != NULL) + handler->destroy_ctx(&handler_ctx); + handler_ctx = NULL; + tmp_result = NULL; + result = NULL; + } + if (result == NULL) + result = tmp_result; + } + } + + if (*matchcount == 1 && matching_handlers[0]->repeatable) { + ctx->_.file.last_handler = matching_handlers[0]; + ctx->_.file.last_handler_ctx = handler_ctx; + } + + OPENSSL_free(matching_handlers); + } + + err: + OPENSSL_free(new_pem_name); + BUF_MEM_free(new_mem); + + if (result != NULL + && (t = OSSL_STORE_INFO_get_type(result)) == OSSL_STORE_INFO_EMBEDDED) { + pem_name = new_pem_name = + ossl_store_info_get0_EMBEDDED_pem_name(result); + new_mem = ossl_store_info_get0_EMBEDDED_buffer(result); + data = (unsigned char *)new_mem->data; + len = new_mem->length; + OPENSSL_free(result); + result = NULL; + goto again; + } + + if (result != NULL) + ERR_clear_error(); + + return result; +} + +static OSSL_STORE_INFO *file_load_try_repeat(OSSL_STORE_LOADER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_INFO *result = NULL; + int try_matchcount = 0; + + if (ctx->_.file.last_handler != NULL) { + result = + ctx->_.file.last_handler->try_decode(NULL, NULL, NULL, 0, + &ctx->_.file.last_handler_ctx, + &try_matchcount, + ui_method, ui_data); + + if (result == NULL) { + ctx->_.file.last_handler->destroy_ctx(&ctx->_.file.last_handler_ctx); + ctx->_.file.last_handler_ctx = NULL; + ctx->_.file.last_handler = NULL; + } + } + return result; +} + +static void pem_free_flag(void *pem_data, int secure, size_t num) +{ + if (secure) + OPENSSL_secure_clear_free(pem_data, num); + else + OPENSSL_free(pem_data); +} +static int file_read_pem(BIO *bp, char **pem_name, char **pem_header, + unsigned char **data, long *len, + const UI_METHOD *ui_method, + void *ui_data, int secure) +{ + int i = secure + ? PEM_read_bio_ex(bp, pem_name, pem_header, data, len, + PEM_FLAG_SECURE | PEM_FLAG_EAY_COMPATIBLE) + : PEM_read_bio(bp, pem_name, pem_header, data, len); + + if (i <= 0) + return 0; + + /* + * 10 is the number of characters in "Proc-Type:", which + * PEM_get_EVP_CIPHER_INFO() requires to be present. + * If the PEM header has less characters than that, it's + * not worth spending cycles on it. + */ + if (strlen(*pem_header) > 10) { + EVP_CIPHER_INFO cipher; + struct pem_pass_data pass_data; + + if (!PEM_get_EVP_CIPHER_INFO(*pem_header, &cipher) + || !file_fill_pem_pass_data(&pass_data, "PEM", ui_method, ui_data) + || !PEM_do_header(&cipher, *data, len, file_get_pem_pass, + &pass_data)) { + return 0; + } + } + return 1; +} + +static int file_read_asn1(BIO *bp, unsigned char **data, long *len) +{ + BUF_MEM *mem = NULL; + + if (asn1_d2i_read_bio(bp, &mem) < 0) + return 0; + + *data = (unsigned char *)mem->data; + *len = (long)mem->length; + OPENSSL_free(mem); + + return 1; +} + +static int ends_with_dirsep(const char *uri) +{ + if (*uri != '\0') + uri += strlen(uri) - 1; +#if defined __VMS + if (*uri == ']' || *uri == '>' || *uri == ':') + return 1; +#elif defined _WIN32 + if (*uri == '\\') + return 1; +#endif + return *uri == '/'; +} + +static int file_name_to_uri(OSSL_STORE_LOADER_CTX *ctx, const char *name, + char **data) +{ + assert(name != NULL); + assert(data != NULL); + { + const char *pathsep = ends_with_dirsep(ctx->_.dir.uri) ? "" : "/"; + long calculated_length = strlen(ctx->_.dir.uri) + strlen(pathsep) + + strlen(name) + 1 /* \0 */; + + *data = OPENSSL_zalloc(calculated_length); + if (*data == NULL) { + OSSL_STOREerr(OSSL_STORE_F_FILE_NAME_TO_URI, ERR_R_MALLOC_FAILURE); + return 0; + } + + OPENSSL_strlcat(*data, ctx->_.dir.uri, calculated_length); + OPENSSL_strlcat(*data, pathsep, calculated_length); + OPENSSL_strlcat(*data, name, calculated_length); + } + return 1; +} + +static int file_name_check(OSSL_STORE_LOADER_CTX *ctx, const char *name) +{ + const char *p = NULL; + + /* If there are no search criteria, all names are accepted */ + if (ctx->_.dir.search_name[0] == '\0') + return 1; + + /* If the expected type isn't supported, no name is accepted */ + if (ctx->expected_type != 0 + && ctx->expected_type != OSSL_STORE_INFO_CERT + && ctx->expected_type != OSSL_STORE_INFO_CRL) + return 0; + + /* + * First, check the basename + */ + if (strncasecmp(name, ctx->_.dir.search_name, + sizeof(ctx->_.dir.search_name) - 1) != 0 + || name[sizeof(ctx->_.dir.search_name) - 1] != '.') + return 0; + p = &name[sizeof(ctx->_.dir.search_name)]; + + /* + * Then, if the expected type is a CRL, check that the extension starts + * with 'r' + */ + if (*p == 'r') { + p++; + if (ctx->expected_type != 0 + && ctx->expected_type != OSSL_STORE_INFO_CRL) + return 0; + } else if (ctx->expected_type == OSSL_STORE_INFO_CRL) { + return 0; + } + + /* + * Last, check that the rest of the extension is a decimal number, at + * least one digit long. + */ + if (!isdigit(*p)) + return 0; + while (isdigit(*p)) + p++; + +# ifdef __VMS + /* + * One extra step here, check for a possible generation number. + */ + if (*p == ';') + for (p++; *p != '\0'; p++) + if (!isdigit(*p)) + break; +# endif + + /* + * If we've reached the end of the string at this point, we've successfully + * found a fitting file name. + */ + return *p == '\0'; +} + +static int file_eof(OSSL_STORE_LOADER_CTX *ctx); +static int file_error(OSSL_STORE_LOADER_CTX *ctx); +static OSSL_STORE_INFO *file_load(OSSL_STORE_LOADER_CTX *ctx, + const UI_METHOD *ui_method, void *ui_data) +{ + OSSL_STORE_INFO *result = NULL; + + ctx->errcnt = 0; + ERR_clear_error(); + + if (ctx->type == is_dir) { + do { + char *newname = NULL; + + if (ctx->_.dir.last_entry == NULL) { + if (!ctx->_.dir.end_reached) { + char errbuf[256]; + assert(ctx->_.dir.last_errno != 0); + errno = ctx->_.dir.last_errno; + ctx->errcnt++; + openssl_strerror_r(errno, errbuf, sizeof(errbuf)); + OSSL_STOREerr(OSSL_STORE_F_FILE_LOAD, ERR_R_SYS_LIB); + ERR_add_error_data(1, errbuf); + } + return NULL; + } + + if (ctx->_.dir.last_entry[0] != '.' + && file_name_check(ctx, ctx->_.dir.last_entry) + && !file_name_to_uri(ctx, ctx->_.dir.last_entry, &newname)) + return NULL; + + /* + * On the first call (with a NULL context), OPENSSL_DIR_read() + * cares about the second argument. On the following calls, it + * only cares that it isn't NULL. Therefore, we can safely give + * it our URI here. + */ + ctx->_.dir.last_entry = OPENSSL_DIR_read(&ctx->_.dir.ctx, + ctx->_.dir.uri); + ctx->_.dir.last_errno = errno; + if (ctx->_.dir.last_entry == NULL && ctx->_.dir.last_errno == 0) + ctx->_.dir.end_reached = 1; + + if (newname != NULL + && (result = OSSL_STORE_INFO_new_NAME(newname)) == NULL) { + OPENSSL_free(newname); + OSSL_STOREerr(OSSL_STORE_F_FILE_LOAD, ERR_R_OSSL_STORE_LIB); + return NULL; + } + } while (result == NULL && !file_eof(ctx)); + } else { + int matchcount = -1; + + again: + result = file_load_try_repeat(ctx, ui_method, ui_data); + if (result != NULL) + return result; + + if (file_eof(ctx)) + return NULL; + + do { + char *pem_name = NULL; /* PEM record name */ + char *pem_header = NULL; /* PEM record header */ + unsigned char *data = NULL; /* DER encoded data */ + long len = 0; /* DER encoded data length */ + + matchcount = -1; + if (ctx->type == is_pem) { + if (!file_read_pem(ctx->_.file.file, &pem_name, &pem_header, + &data, &len, ui_method, ui_data, + (ctx->flags & FILE_FLAG_SECMEM) != 0)) { + ctx->errcnt++; + goto endloop; + } + } else { + if (!file_read_asn1(ctx->_.file.file, &data, &len)) { + ctx->errcnt++; + goto endloop; + } + } + + result = file_load_try_decode(ctx, pem_name, pem_header, data, len, + ui_method, ui_data, &matchcount); + + if (result != NULL) + goto endloop; + + /* + * If a PEM name matches more than one handler, the handlers are + * badly coded. + */ + if (!ossl_assert(pem_name == NULL || matchcount <= 1)) { + ctx->errcnt++; + goto endloop; + } + + if (matchcount > 1) { + OSSL_STOREerr(OSSL_STORE_F_FILE_LOAD, + OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE); + } else if (matchcount == 1) { + /* + * If there are other errors on the stack, they already show + * what the problem is. + */ + if (ERR_peek_error() == 0) { + OSSL_STOREerr(OSSL_STORE_F_FILE_LOAD, + OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE); + if (pem_name != NULL) + ERR_add_error_data(3, "PEM type is '", pem_name, "'"); + } + } + if (matchcount > 0) + ctx->errcnt++; + + endloop: + pem_free_flag(pem_name, (ctx->flags & FILE_FLAG_SECMEM) != 0, 0); + pem_free_flag(pem_header, (ctx->flags & FILE_FLAG_SECMEM) != 0, 0); + pem_free_flag(data, (ctx->flags & FILE_FLAG_SECMEM) != 0, len); + } while (matchcount == 0 && !file_eof(ctx) && !file_error(ctx)); + + /* We bail out on ambiguity */ + if (matchcount > 1) + return NULL; + + if (result != NULL + && ctx->expected_type != 0 + && ctx->expected_type != OSSL_STORE_INFO_get_type(result)) { + OSSL_STORE_INFO_free(result); + goto again; + } + } + + return result; +} + +static int file_error(OSSL_STORE_LOADER_CTX *ctx) +{ + return ctx->errcnt > 0; +} + +static int file_eof(OSSL_STORE_LOADER_CTX *ctx) +{ + if (ctx->type == is_dir) + return ctx->_.dir.end_reached; + + if (ctx->_.file.last_handler != NULL + && !ctx->_.file.last_handler->eof(ctx->_.file.last_handler_ctx)) + return 0; + return BIO_eof(ctx->_.file.file); +} + +static int file_close(OSSL_STORE_LOADER_CTX *ctx) +{ + if (ctx->type == is_dir) { + OPENSSL_DIR_end(&ctx->_.dir.ctx); + } else { + BIO_free_all(ctx->_.file.file); + } + OSSL_STORE_LOADER_CTX_free(ctx); + return 1; +} + +int ossl_store_file_detach_pem_bio_int(OSSL_STORE_LOADER_CTX *ctx) +{ + OSSL_STORE_LOADER_CTX_free(ctx); + return 1; +} + +static OSSL_STORE_LOADER file_loader = + { + "file", + NULL, + file_open, + file_ctrl, + file_expect, + file_find, + file_load, + file_eof, + file_error, + file_close + }; + +static void store_file_loader_deinit(void) +{ + ossl_store_unregister_loader_int(file_loader.scheme); +} + +int ossl_store_file_loader_init(void) +{ + int ret = ossl_store_register_loader_int(&file_loader); + + OPENSSL_atexit(store_file_loader_deinit); + return ret; +} diff --git a/crypto/store/store_err.c b/crypto/store/store_err.c new file mode 100644 index 00000000..5a8a8404 --- /dev/null +++ b/crypto/store/store_err.c @@ -0,0 +1,146 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * 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 + */ + +#include +#include + +#ifndef OPENSSL_NO_ERR + +static const ERR_STRING_DATA OSSL_STORE_str_functs[] = { + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_CTRL, 0), "file_ctrl"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_FIND, 0), "file_find"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_GET_PASS, 0), + "file_get_pass"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_LOAD, 0), "file_load"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_LOAD_TRY_DECODE, 0), + "file_load_try_decode"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_NAME_TO_URI, 0), + "file_name_to_uri"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_FILE_OPEN, 0), "file_open"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO, 0), + "ossl_store_attach_pem_bio"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_EXPECT, 0), + "OSSL_STORE_expect"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT, 0), + "ossl_store_file_attach_pem_bio_int"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_FIND, 0), + "OSSL_STORE_find"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT, 0), + "ossl_store_get0_loader_int"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT, 0), + "OSSL_STORE_INFO_get1_CERT"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL, 0), + "OSSL_STORE_INFO_get1_CRL"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME, 0), + "OSSL_STORE_INFO_get1_NAME"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION, 0), + "OSSL_STORE_INFO_get1_NAME_description"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS, 0), + "OSSL_STORE_INFO_get1_PARAMS"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY, 0), + "OSSL_STORE_INFO_get1_PKEY"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT, 0), + "OSSL_STORE_INFO_new_CERT"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL, 0), + "OSSL_STORE_INFO_new_CRL"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED, 0), + "ossl_store_info_new_EMBEDDED"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME, 0), + "OSSL_STORE_INFO_new_NAME"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS, 0), + "OSSL_STORE_INFO_new_PARAMS"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY, 0), + "OSSL_STORE_INFO_new_PKEY"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION, 0), + "OSSL_STORE_INFO_set0_NAME_description"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_INIT_ONCE, 0), + "ossl_store_init_once"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_LOADER_NEW, 0), + "OSSL_STORE_LOADER_new"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_OPEN, 0), + "OSSL_STORE_open"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_OPEN_INT, 0), ""}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT, 0), + "ossl_store_register_loader_int"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS, 0), + "OSSL_STORE_SEARCH_by_alias"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL, 0), + "OSSL_STORE_SEARCH_by_issuer_serial"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT, 0), + "OSSL_STORE_SEARCH_by_key_fingerprint"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME, 0), + "OSSL_STORE_SEARCH_by_name"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT, 0), + "ossl_store_unregister_loader_int"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_TRY_DECODE_PARAMS, 0), + "try_decode_params"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_TRY_DECODE_PKCS12, 0), + "try_decode_PKCS12"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED, 0), + "try_decode_PKCS8Encrypted"}, + {0, NULL} +}; + +static const ERR_STRING_DATA OSSL_STORE_str_reasons[] = { + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE), + "ambiguous content type"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_BAD_PASSWORD_READ), + "bad password read"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC), + "error verifying pkcs12 mac"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST), + "fingerprint size does not match digest"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_INVALID_SCHEME), + "invalid scheme"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_IS_NOT_A), "is not a"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_LOADER_INCOMPLETE), + "loader incomplete"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_LOADING_STARTED), + "loading started"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_NOT_A_CERTIFICATE), + "not a certificate"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_NOT_A_CRL), "not a crl"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_NOT_A_KEY), "not a key"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_NOT_A_NAME), "not a name"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_NOT_PARAMETERS), + "not parameters"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR), + "passphrase callback error"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE), + "path must be absolute"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES), + "search only supported for directories"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED), + "ui process interrupted or cancelled"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_UNREGISTERED_SCHEME), + "unregistered scheme"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE), + "unsupported content type"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_UNSUPPORTED_OPERATION), + "unsupported operation"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE), + "unsupported search type"}, + {ERR_PACK(ERR_LIB_OSSL_STORE, 0, OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED), + "uri authority unsupported"}, + {0, NULL} +}; + +#endif + +int ERR_load_OSSL_STORE_strings(void) +{ +#ifndef OPENSSL_NO_ERR + if (ERR_func_error_string(OSSL_STORE_str_functs[0].error) == NULL) { + ERR_load_strings_const(OSSL_STORE_str_functs); + ERR_load_strings_const(OSSL_STORE_str_reasons); + } +#endif + return 1; +} diff --git a/crypto/store/store_init.c b/crypto/store/store_init.c new file mode 100644 index 00000000..4b531086 --- /dev/null +++ b/crypto/store/store_init.c @@ -0,0 +1,33 @@ +/* + * 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 + */ + +#include +#include "internal/store.h" +#include "store_locl.h" + +static CRYPTO_ONCE store_init = CRYPTO_ONCE_STATIC_INIT; +DEFINE_RUN_ONCE_STATIC(do_store_init) +{ + return OPENSSL_init_crypto(0, NULL) + && ossl_store_file_loader_init(); +} + +int ossl_store_init_once() +{ + if (!RUN_ONCE(&store_init, do_store_init)) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INIT_ONCE, ERR_R_MALLOC_FAILURE); + return 0; + } + return 1; +} + +void ossl_store_cleanup_int(void) +{ + ossl_store_destroy_loaders_int(); +} diff --git a/crypto/store/store_lib.c b/crypto/store/store_lib.c new file mode 100644 index 00000000..1c435476 --- /dev/null +++ b/crypto/store/store_lib.c @@ -0,0 +1,681 @@ +/* + * 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 "e_os.h" +#include +#include +#include + +#include "e_os.h" + +#include +#include +#include +#include "internal/thread_once.h" +#include "internal/store_int.h" +#include "store_locl.h" + +struct ossl_store_ctx_st { + const OSSL_STORE_LOADER *loader; + OSSL_STORE_LOADER_CTX *loader_ctx; + const UI_METHOD *ui_method; + void *ui_data; + OSSL_STORE_post_process_info_fn post_process; + void *post_process_data; + int expected_type; + + /* 0 before the first STORE_load(), 1 otherwise */ + int loading; +}; + +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) +{ + const OSSL_STORE_LOADER *loader = NULL; + OSSL_STORE_LOADER_CTX *loader_ctx = NULL; + OSSL_STORE_CTX *ctx = NULL; + char scheme_copy[256], *p, *schemes[2]; + size_t schemes_n = 0; + size_t i; + + /* + * Put the file scheme first. If the uri does represent an existing file, + * possible device name and all, then it should be loaded. Only a failed + * attempt at loading a local file should have us try something else. + */ + schemes[schemes_n++] = "file"; + + /* + * Now, check if we have something that looks like a scheme, and add it + * as a second scheme. However, also check if there's an authority start + * (://), because that will invalidate the previous file scheme. Also, + * check that this isn't actually the file scheme, as there's no point + * going through that one twice! + */ + OPENSSL_strlcpy(scheme_copy, uri, sizeof(scheme_copy)); + if ((p = strchr(scheme_copy, ':')) != NULL) { + *p++ = '\0'; + if (strcasecmp(scheme_copy, "file") != 0) { + if (strncmp(p, "//", 2) == 0) + schemes_n--; /* Invalidate the file scheme */ + schemes[schemes_n++] = scheme_copy; + } + } + + ERR_set_mark(); + + /* Try each scheme until we find one that could open the URI */ + for (i = 0; loader_ctx == NULL && i < schemes_n; i++) { + if ((loader = ossl_store_get0_loader_int(schemes[i])) != NULL) + loader_ctx = loader->open(loader, uri, ui_method, ui_data); + } + if (loader_ctx == NULL) + goto err; + + if ((ctx = OPENSSL_zalloc(sizeof(*ctx))) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_OPEN, ERR_R_MALLOC_FAILURE); + goto err; + } + + ctx->loader = loader; + ctx->loader_ctx = loader_ctx; + ctx->ui_method = ui_method; + ctx->ui_data = ui_data; + ctx->post_process = post_process; + ctx->post_process_data = post_process_data; + + /* + * If the attempt to open with the 'file' scheme loader failed and the + * other scheme loader succeeded, the failure to open with the 'file' + * scheme loader leaves an error on the error stack. Let's remove it. + */ + ERR_pop_to_mark(); + + return ctx; + + err: + ERR_clear_last_mark(); + if (loader_ctx != NULL) { + /* + * We ignore a returned error because we will return NULL anyway in + * this case, so if something goes wrong when closing, that'll simply + * just add another entry on the error stack. + */ + (void)loader->close(loader_ctx); + } + return NULL; +} + +int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ...) +{ + va_list args; + int ret; + + va_start(args, cmd); + ret = OSSL_STORE_vctrl(ctx, cmd, args); + va_end(args); + + return ret; +} + +int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args) +{ + if (ctx->loader->ctrl != NULL) + return ctx->loader->ctrl(ctx->loader_ctx, cmd, args); + return 0; +} + +int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type) +{ + if (ctx->loading) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_EXPECT, + OSSL_STORE_R_LOADING_STARTED); + return 0; + } + + ctx->expected_type = expected_type; + if (ctx->loader->expect != NULL) + return ctx->loader->expect(ctx->loader_ctx, expected_type); + return 1; +} + +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search) +{ + if (ctx->loading) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_FIND, + OSSL_STORE_R_LOADING_STARTED); + return 0; + } + if (ctx->loader->find == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_FIND, + OSSL_STORE_R_UNSUPPORTED_OPERATION); + return 0; + } + + return ctx->loader->find(ctx->loader_ctx, search); +} + +OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx) +{ + OSSL_STORE_INFO *v = NULL; + + ctx->loading = 1; + again: + if (OSSL_STORE_eof(ctx)) + return NULL; + + v = ctx->loader->load(ctx->loader_ctx, ctx->ui_method, ctx->ui_data); + + if (ctx->post_process != NULL && v != NULL) { + v = ctx->post_process(v, ctx->post_process_data); + + /* + * By returning NULL, the callback decides that this object should + * be ignored. + */ + if (v == NULL) + goto again; + } + + if (v != NULL && ctx->expected_type != 0) { + int returned_type = OSSL_STORE_INFO_get_type(v); + + if (returned_type != OSSL_STORE_INFO_NAME && returned_type != 0) { + /* + * Soft assert here so those who want to harsly weed out faulty + * loaders can do so using a debugging version of libcrypto. + */ + if (ctx->loader->expect != NULL) + assert(ctx->expected_type == returned_type); + + if (ctx->expected_type != returned_type) { + OSSL_STORE_INFO_free(v); + goto again; + } + } + } + + return v; +} + +int OSSL_STORE_error(OSSL_STORE_CTX *ctx) +{ + return ctx->loader->error(ctx->loader_ctx); +} + +int OSSL_STORE_eof(OSSL_STORE_CTX *ctx) +{ + return ctx->loader->eof(ctx->loader_ctx); +} + +int OSSL_STORE_close(OSSL_STORE_CTX *ctx) +{ + int loader_ret = ctx->loader->close(ctx->loader_ctx); + + OPENSSL_free(ctx); + return loader_ret; +} + +/* + * 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 transfered to the OSSL_STORE_INFO + * and will therefore be freed when the OSSL_STORE_INFO is freed. + */ +static OSSL_STORE_INFO *store_info_new(int type, void *data) +{ + OSSL_STORE_INFO *info = OPENSSL_zalloc(sizeof(*info)); + + if (info == NULL) + return NULL; + + info->type = type; + info->_.data = data; + return info; +} + +OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name) +{ + OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_NAME, NULL); + + if (info == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + info->_.name.name = name; + info->_.name.desc = NULL; + + return info; +} + +int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc) +{ + if (info->type != OSSL_STORE_INFO_NAME) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION, + ERR_R_PASSED_INVALID_ARGUMENT); + return 0; + } + + info->_.name.desc = desc; + + return 1; +} +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params) +{ + OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_PARAMS, params); + + if (info == NULL) + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS, + ERR_R_MALLOC_FAILURE); + return info; +} + +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey) +{ + OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_PKEY, pkey); + + if (info == NULL) + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY, + ERR_R_MALLOC_FAILURE); + return info; +} + +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509) +{ + OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_CERT, x509); + + if (info == NULL) + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT, + ERR_R_MALLOC_FAILURE); + return info; +} + +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl) +{ + OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_CRL, crl); + + if (info == NULL) + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL, + ERR_R_MALLOC_FAILURE); + return info; +} + +/* + * Functions to try to extract data from a OSSL_STORE_INFO. + */ +int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info) +{ + return info->type; +} + +const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_NAME) + return info->_.name.name; + return NULL; +} + +char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_NAME) { + char *ret = OPENSSL_strdup(info->_.name.name); + + if (ret == NULL) + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME, + ERR_R_MALLOC_FAILURE); + return ret; + } + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME, + OSSL_STORE_R_NOT_A_NAME); + return NULL; +} + +const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_NAME) + return info->_.name.desc; + return NULL; +} + +char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_NAME) { + char *ret = OPENSSL_strdup(info->_.name.desc + ? info->_.name.desc : ""); + + if (ret == NULL) + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION, + ERR_R_MALLOC_FAILURE); + return ret; + } + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION, + OSSL_STORE_R_NOT_A_NAME); + return NULL; +} + +EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_PARAMS) + return info->_.params; + return NULL; +} + +EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_PARAMS) { + EVP_PKEY_up_ref(info->_.params); + return info->_.params; + } + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS, + OSSL_STORE_R_NOT_PARAMETERS); + return NULL; +} + +EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_PKEY) + return info->_.pkey; + return NULL; +} + +EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_PKEY) { + EVP_PKEY_up_ref(info->_.pkey); + return info->_.pkey; + } + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY, + OSSL_STORE_R_NOT_A_KEY); + return NULL; +} + +X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_CERT) + return info->_.x509; + return NULL; +} + +X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_CERT) { + X509_up_ref(info->_.x509); + return info->_.x509; + } + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT, + OSSL_STORE_R_NOT_A_CERTIFICATE); + return NULL; +} + +X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_CRL) + return info->_.crl; + return NULL; +} + +X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_CRL) { + X509_CRL_up_ref(info->_.crl); + return info->_.crl; + } + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL, + OSSL_STORE_R_NOT_A_CRL); + return NULL; +} + +/* + * Free the OSSL_STORE_INFO + */ +void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info) +{ + if (info != NULL) { + switch (info->type) { + case OSSL_STORE_INFO_EMBEDDED: + BUF_MEM_free(info->_.embedded.blob); + OPENSSL_free(info->_.embedded.pem_name); + break; + case OSSL_STORE_INFO_NAME: + OPENSSL_free(info->_.name.name); + OPENSSL_free(info->_.name.desc); + break; + case OSSL_STORE_INFO_PARAMS: + EVP_PKEY_free(info->_.params); + break; + case OSSL_STORE_INFO_PKEY: + EVP_PKEY_free(info->_.pkey); + break; + case OSSL_STORE_INFO_CERT: + X509_free(info->_.x509); + break; + case OSSL_STORE_INFO_CRL: + X509_CRL_free(info->_.crl); + break; + } + OPENSSL_free(info); + } +} + +int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type) +{ + OSSL_STORE_SEARCH tmp_search; + + if (ctx->loader->find == NULL) + return 0; + tmp_search.search_type = search_type; + return ctx->loader->find(NULL, &tmp_search); +} + +/* Search term constructors */ +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name) +{ + OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search)); + + if (search == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + search->search_type = OSSL_STORE_SEARCH_BY_NAME; + search->name = name; + return search; +} + +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, + const ASN1_INTEGER *serial) +{ + OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search)); + + if (search == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + search->search_type = OSSL_STORE_SEARCH_BY_ISSUER_SERIAL; + search->name = name; + search->serial = serial; + return search; +} + +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, + const unsigned char + *bytes, size_t len) +{ + OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search)); + + if (search == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + if (digest != NULL && len != (size_t)EVP_MD_size(digest)) { + char buf1[20], buf2[20]; + + BIO_snprintf(buf1, sizeof(buf1), "%d", EVP_MD_size(digest)); + BIO_snprintf(buf2, sizeof(buf2), "%zu", len); + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT, + OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST); + ERR_add_error_data(5, EVP_MD_name(digest), " size is ", buf1, + ", fingerprint size is ", buf2); + } + + search->search_type = OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT; + search->digest = digest; + search->string = bytes; + search->stringlength = len; + return search; +} + +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias) +{ + OSSL_STORE_SEARCH *search = OPENSSL_zalloc(sizeof(*search)); + + if (search == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + search->search_type = OSSL_STORE_SEARCH_BY_ALIAS; + search->string = (const unsigned char *)alias; + search->stringlength = strlen(alias); + return search; +} + +/* Search term destructor */ +void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search) +{ + OPENSSL_free(search); +} + +/* Search term accessors */ +int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion) +{ + return criterion->search_type; +} + +X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion) +{ + return criterion->name; +} + +const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH + *criterion) +{ + return criterion->serial; +} + +const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH + *criterion, size_t *length) +{ + *length = criterion->stringlength; + return criterion->string; +} + +const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion) +{ + return (const char *)criterion->string; +} + +const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion) +{ + return criterion->digest; +} + +/* Internal functions */ +OSSL_STORE_INFO *ossl_store_info_new_EMBEDDED(const char *new_pem_name, + BUF_MEM *embedded) +{ + OSSL_STORE_INFO *info = store_info_new(OSSL_STORE_INFO_EMBEDDED, NULL); + + if (info == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED, + ERR_R_MALLOC_FAILURE); + return NULL; + } + + info->_.embedded.blob = embedded; + info->_.embedded.pem_name = + new_pem_name == NULL ? NULL : OPENSSL_strdup(new_pem_name); + + if (new_pem_name != NULL && info->_.embedded.pem_name == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED, + ERR_R_MALLOC_FAILURE); + OSSL_STORE_INFO_free(info); + info = NULL; + } + + return info; +} + +BUF_MEM *ossl_store_info_get0_EMBEDDED_buffer(OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_EMBEDDED) + return info->_.embedded.blob; + return NULL; +} + +char *ossl_store_info_get0_EMBEDDED_pem_name(OSSL_STORE_INFO *info) +{ + if (info->type == OSSL_STORE_INFO_EMBEDDED) + return info->_.embedded.pem_name; + return NULL; +} + +OSSL_STORE_CTX *ossl_store_attach_pem_bio(BIO *bp, const UI_METHOD *ui_method, + void *ui_data) +{ + OSSL_STORE_CTX *ctx = NULL; + const OSSL_STORE_LOADER *loader = NULL; + OSSL_STORE_LOADER_CTX *loader_ctx = NULL; + + if ((loader = ossl_store_get0_loader_int("file")) == NULL + || ((loader_ctx = ossl_store_file_attach_pem_bio_int(bp)) == NULL)) + goto done; + if ((ctx = OPENSSL_zalloc(sizeof(*ctx))) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO, + ERR_R_MALLOC_FAILURE); + goto done; + } + + ctx->loader = loader; + ctx->loader_ctx = loader_ctx; + loader_ctx = NULL; + ctx->ui_method = ui_method; + ctx->ui_data = ui_data; + ctx->post_process = NULL; + ctx->post_process_data = NULL; + + done: + if (loader_ctx != NULL) + /* + * We ignore a returned error because we will return NULL anyway in + * this case, so if something goes wrong when closing, that'll simply + * just add another entry on the error stack. + */ + (void)loader->close(loader_ctx); + return ctx; +} + +int ossl_store_detach_pem_bio(OSSL_STORE_CTX *ctx) +{ + int loader_ret = ossl_store_file_detach_pem_bio_int(ctx->loader_ctx); + + OPENSSL_free(ctx); + return loader_ret; +} diff --git a/crypto/store/store_locl.h b/crypto/store/store_locl.h new file mode 100644 index 00000000..369dcb33 --- /dev/null +++ b/crypto/store/store_locl.h @@ -0,0 +1,132 @@ +/* + * 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 "internal/thread_once.h" +#include +#include +#include +#include +#include +#include + +/*- + * OSSL_STORE_INFO stuff + * --------------------- + */ + +struct ossl_store_info_st { + int type; + union { + void *data; /* used internally as generic pointer */ + + struct { + BUF_MEM *blob; + char *pem_name; + } embedded; /* when type == OSSL_STORE_INFO_EMBEDDED */ + + struct { + char *name; + char *desc; + } name; /* when type == OSSL_STORE_INFO_NAME */ + + EVP_PKEY *params; /* when type == OSSL_STORE_INFO_PARAMS */ + EVP_PKEY *pkey; /* when type == OSSL_STORE_INFO_PKEY */ + X509 *x509; /* when type == OSSL_STORE_INFO_CERT */ + X509_CRL *crl; /* when type == OSSL_STORE_INFO_CRL */ + } _; +}; + +DEFINE_STACK_OF(OSSL_STORE_INFO) + +/* + * EMBEDDED is a special type of OSSL_STORE_INFO, specially for the file + * handlers. It should never reach a calling application or any engine. + * However, it can be used by a FILE_HANDLER's try_decode function to signal + * that it has decoded the incoming blob into a new blob, and that the + * attempted decoding should be immediately restarted with the new blob, using + * the new PEM name. + */ +/* + * Because this is an internal type, we don't make it public. + */ +#define OSSL_STORE_INFO_EMBEDDED -1 +OSSL_STORE_INFO *ossl_store_info_new_EMBEDDED(const char *new_pem_name, + BUF_MEM *embedded); +BUF_MEM *ossl_store_info_get0_EMBEDDED_buffer(OSSL_STORE_INFO *info); +char *ossl_store_info_get0_EMBEDDED_pem_name(OSSL_STORE_INFO *info); + +/*- + * OSSL_STORE_SEARCH stuff + * ----------------------- + */ + +struct ossl_store_search_st { + int search_type; + + /* + * Used by OSSL_STORE_SEARCH_BY_NAME and + * OSSL_STORE_SEARCH_BY_ISSUER_SERIAL + */ + X509_NAME *name; + + /* Used by OSSL_STORE_SEARCH_BY_ISSUER_SERIAL */ + const ASN1_INTEGER *serial; + + /* Used by OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT */ + const EVP_MD *digest; + + /* + * Used by OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT and + * OSSL_STORE_SEARCH_BY_ALIAS + */ + const unsigned char *string; + size_t stringlength; +}; + +/*- + * OSSL_STORE_LOADER stuff + * ----------------------- + */ + +int ossl_store_register_loader_int(OSSL_STORE_LOADER *loader); +OSSL_STORE_LOADER *ossl_store_unregister_loader_int(const char *scheme); + +/* loader stuff */ +struct ossl_store_loader_st { + const char *scheme; + ENGINE *engine; + OSSL_STORE_open_fn open; + OSSL_STORE_ctrl_fn ctrl; + OSSL_STORE_expect_fn expect; + OSSL_STORE_find_fn find; + OSSL_STORE_load_fn load; + OSSL_STORE_eof_fn eof; + OSSL_STORE_error_fn error; + OSSL_STORE_close_fn close; +}; +DEFINE_LHASH_OF(OSSL_STORE_LOADER); + +const OSSL_STORE_LOADER *ossl_store_get0_loader_int(const char *scheme); +void ossl_store_destroy_loaders_int(void); + +/*- + * OSSL_STORE init stuff + * --------------------- + */ + +int ossl_store_init_once(void); +int ossl_store_file_loader_init(void); + +/*- + * 'file' scheme stuff + * ------------------- + */ + +OSSL_STORE_LOADER_CTX *ossl_store_file_attach_pem_bio_int(BIO *bp); +int ossl_store_file_detach_pem_bio_int(OSSL_STORE_LOADER_CTX *ctx); diff --git a/crypto/store/store_register.c b/crypto/store/store_register.c new file mode 100644 index 00000000..e68cb3c5 --- /dev/null +++ b/crypto/store/store_register.c @@ -0,0 +1,297 @@ +/* + * 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 +#include "internal/ctype.h" +#include + +#include +#include +#include "store_locl.h" + +static CRYPTO_RWLOCK *registry_lock; +static CRYPTO_ONCE registry_init = CRYPTO_ONCE_STATIC_INIT; + +DEFINE_RUN_ONCE_STATIC(do_registry_init) +{ + registry_lock = CRYPTO_THREAD_lock_new(); + return registry_lock != NULL; +} + +/* + * Functions for manipulating OSSL_STORE_LOADERs + */ + +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme) +{ + OSSL_STORE_LOADER *res = NULL; + + /* + * We usually don't check NULL arguments. For loaders, though, the + * scheme is crucial and must never be NULL, or the user will get + * mysterious errors when trying to register the created loader + * later on. + */ + if (scheme == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_LOADER_NEW, + OSSL_STORE_R_INVALID_SCHEME); + return NULL; + } + + if ((res = OPENSSL_zalloc(sizeof(*res))) == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_LOADER_NEW, ERR_R_MALLOC_FAILURE); + return NULL; + } + + res->engine = e; + res->scheme = scheme; + return res; +} + +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader) +{ + return loader->engine; +} + +const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader) +{ + return loader->scheme; +} + +int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_fn open_function) +{ + loader->open = open_function; + return 1; +} + +int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, + OSSL_STORE_ctrl_fn ctrl_function) +{ + loader->ctrl = ctrl_function; + return 1; +} + +int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, + OSSL_STORE_expect_fn expect_function) +{ + loader->expect = expect_function; + return 1; +} + +int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, + OSSL_STORE_find_fn find_function) +{ + loader->find = find_function; + return 1; +} + +int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, + OSSL_STORE_load_fn load_function) +{ + loader->load = load_function; + return 1; +} + +int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, + OSSL_STORE_eof_fn eof_function) +{ + loader->eof = eof_function; + return 1; +} + +int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, + OSSL_STORE_error_fn error_function) +{ + loader->error = error_function; + return 1; +} + +int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, + OSSL_STORE_close_fn close_function) +{ + loader->close = close_function; + return 1; +} + +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader) +{ + OPENSSL_free(loader); +} + +/* + * Functions for registering OSSL_STORE_LOADERs + */ + +static unsigned long store_loader_hash(const OSSL_STORE_LOADER *v) +{ + return OPENSSL_LH_strhash(v->scheme); +} + +static int store_loader_cmp(const OSSL_STORE_LOADER *a, + const OSSL_STORE_LOADER *b) +{ + assert(a->scheme != NULL && b->scheme != NULL); + return strcmp(a->scheme, b->scheme); +} + +static LHASH_OF(OSSL_STORE_LOADER) *loader_register = NULL; + +int ossl_store_register_loader_int(OSSL_STORE_LOADER *loader) +{ + const char *scheme = loader->scheme; + int ok = 0; + + /* + * Check that the given scheme conforms to correct scheme syntax as per + * RFC 3986: + * + * scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." ) + */ + if (ossl_isalpha(*scheme)) + while (*scheme != '\0' + && (ossl_isalpha(*scheme) + || ossl_isdigit(*scheme) + || strchr("+-.", *scheme) != NULL)) + scheme++; + if (*scheme != '\0') { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT, + OSSL_STORE_R_INVALID_SCHEME); + ERR_add_error_data(2, "scheme=", loader->scheme); + return 0; + } + + /* Check that functions we absolutely require are present */ + if (loader->open == NULL || loader->load == NULL || loader->eof == NULL + || loader->error == NULL || loader->close == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT, + OSSL_STORE_R_LOADER_INCOMPLETE); + return 0; + } + + if (!RUN_ONCE(®istry_init, do_registry_init)) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT, + ERR_R_MALLOC_FAILURE); + return 0; + } + CRYPTO_THREAD_write_lock(registry_lock); + + if (loader_register == NULL) { + loader_register = lh_OSSL_STORE_LOADER_new(store_loader_hash, + store_loader_cmp); + } + + if (loader_register != NULL + && (lh_OSSL_STORE_LOADER_insert(loader_register, loader) != NULL + || lh_OSSL_STORE_LOADER_error(loader_register) == 0)) + ok = 1; + + CRYPTO_THREAD_unlock(registry_lock); + + return ok; +} +int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader) +{ + if (!ossl_store_init_once()) + return 0; + return ossl_store_register_loader_int(loader); +} + +const OSSL_STORE_LOADER *ossl_store_get0_loader_int(const char *scheme) +{ + OSSL_STORE_LOADER template; + OSSL_STORE_LOADER *loader = NULL; + + template.scheme = scheme; + template.open = NULL; + template.load = NULL; + template.eof = NULL; + template.close = NULL; + + if (!ossl_store_init_once()) + return NULL; + + if (!RUN_ONCE(®istry_init, do_registry_init)) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT, + ERR_R_MALLOC_FAILURE); + return NULL; + } + CRYPTO_THREAD_write_lock(registry_lock); + + loader = lh_OSSL_STORE_LOADER_retrieve(loader_register, &template); + + if (loader == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT, + OSSL_STORE_R_UNREGISTERED_SCHEME); + ERR_add_error_data(2, "scheme=", scheme); + } + + CRYPTO_THREAD_unlock(registry_lock); + + return loader; +} + +OSSL_STORE_LOADER *ossl_store_unregister_loader_int(const char *scheme) +{ + OSSL_STORE_LOADER template; + OSSL_STORE_LOADER *loader = NULL; + + template.scheme = scheme; + template.open = NULL; + template.load = NULL; + template.eof = NULL; + template.close = NULL; + + if (!RUN_ONCE(®istry_init, do_registry_init)) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT, + ERR_R_MALLOC_FAILURE); + return NULL; + } + CRYPTO_THREAD_write_lock(registry_lock); + + loader = lh_OSSL_STORE_LOADER_delete(loader_register, &template); + + if (loader == NULL) { + OSSL_STOREerr(OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT, + OSSL_STORE_R_UNREGISTERED_SCHEME); + ERR_add_error_data(2, "scheme=", scheme); + } + + CRYPTO_THREAD_unlock(registry_lock); + + return loader; +} +OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme) +{ + if (!ossl_store_init_once()) + return 0; + return ossl_store_unregister_loader_int(scheme); +} + +void ossl_store_destroy_loaders_int(void) +{ + assert(lh_OSSL_STORE_LOADER_num_items(loader_register) == 0); + lh_OSSL_STORE_LOADER_free(loader_register); + loader_register = NULL; + CRYPTO_THREAD_lock_free(registry_lock); + registry_lock = NULL; +} + +/* + * Functions to list OSSL_STORE loaders + */ + +IMPLEMENT_LHASH_DOALL_ARG_CONST(OSSL_STORE_LOADER, void); +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg) +{ + lh_OSSL_STORE_LOADER_doall_void(loader_register, do_function, do_arg); + return 1; +} diff --git a/crypto/store/store_strings.c b/crypto/store/store_strings.c new file mode 100644 index 00000000..76cf3164 --- /dev/null +++ b/crypto/store/store_strings.c @@ -0,0 +1,28 @@ +/* + * 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 + */ + +#include + +static char *type_strings[] = { + "Name", /* OSSL_STORE_INFO_NAME */ + "Parameters", /* OSSL_STORE_INFO_PARAMS */ + "Pkey", /* OSSL_STORE_INFO_PKEY */ + "Certificate", /* OSSL_STORE_INFO_CERT */ + "CRL" /* OSSL_STORE_INFO_CRL */ +}; + +const char *OSSL_STORE_INFO_type_string(int type) +{ + int types = sizeof(type_strings) / sizeof(type_strings[0]); + + if (type < 1 || type > types) + return NULL; + + return type_strings[type - 1]; +} diff --git a/crypto/threads_none.c b/crypto/threads_none.c index 72bf25b0..30ed4e69 100644 --- a/crypto/threads_none.c +++ b/crypto/threads_none.c @@ -8,6 +8,7 @@ */ #include +#include "internal/cryptlib.h" #if !defined(OPENSSL_THREADS) || defined(CRYPTO_TDEBUG) @@ -24,19 +25,22 @@ CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void) int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock) { - OPENSSL_assert(*(unsigned int *)lock == 1); + if (!ossl_assert(*(unsigned int *)lock == 1)) + return 0; return 1; } int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock) { - OPENSSL_assert(*(unsigned int *)lock == 1); + if (!ossl_assert(*(unsigned int *)lock == 1)) + return 0; return 1; } int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock) { - OPENSSL_assert(*(unsigned int *)lock == 1); + if (!ossl_assert(*(unsigned int *)lock == 1)) + return 0; return 1; } @@ -121,4 +125,21 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock) return 1; } +int CRYPTO_atomic_read(int *val, int *ret, CRYPTO_RWLOCK *lock) +{ + *ret = *val; + return 1; +} + +int CRYPTO_atomic_write(int *val, int n, CRYPTO_RWLOCK *lock) +{ + *val = n; + return 1; +} + +int openssl_init_fork_handlers(void) +{ + return 0; +} + #endif diff --git a/crypto/threads_pthread.c b/crypto/threads_pthread.c index 151013e4..3aeef216 100644 --- a/crypto/threads_pthread.c +++ b/crypto/threads_pthread.c @@ -8,6 +8,7 @@ */ #include +#include "internal/cryptlib.h" #if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) && !defined(OPENSSL_SYS_WINDOWS) @@ -168,4 +169,60 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock) return 1; } +int CRYPTO_atomic_read(int *val, int *ret, CRYPTO_RWLOCK *lock) +{ +# if defined(__GNUC__) && defined(__ATOMIC_ACQUIRE) + if (__atomic_is_lock_free(sizeof(*val), val)) { + __atomic_load(val, ret, __ATOMIC_ACQUIRE); + return 1; + } +# endif + if (!CRYPTO_THREAD_read_lock(lock)) + return 0; + + *ret = *val; + + if (!CRYPTO_THREAD_unlock(lock)) + return 0; + + return 1; +} + +int CRYPTO_atomic_write(int *val, int n, CRYPTO_RWLOCK *lock) +{ +# if defined(__GNUC__) && defined(__ATOMIC_RELEASE) + if (__atomic_is_lock_free(sizeof(*val), val)) { + __atomic_store(val, &n, __ATOMIC_RELEASE); + return 1; + } +# endif + if (!CRYPTO_THREAD_write_lock(lock)) + return 0; + + *val = n; + + if (!CRYPTO_THREAD_unlock(lock)) + return 0; + + return 1; +} + +# ifdef OPENSSL_SYS_UNIX +static pthread_once_t fork_once_control = PTHREAD_ONCE_INIT; + +static void fork_once_func(void) +{ + pthread_atfork(OPENSSL_fork_prepare, + OPENSSL_fork_parent, OPENSSL_fork_child); +} +# endif + +int openssl_init_fork_handlers(void) +{ +# ifdef OPENSSL_SYS_UNIX + if (pthread_once(&fork_once_control, fork_once_func) == 0) + return 1; +# endif + return 0; +} #endif diff --git a/crypto/threads_win.c b/crypto/threads_win.c index 4e0de908..f222aa5d 100644 --- a/crypto/threads_win.c +++ b/crypto/threads_win.c @@ -133,4 +133,21 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock) return 1; } +int CRYPTO_atomic_read(int *val, int *ret, CRYPTO_RWLOCK *lock) +{ + *ret = InterlockedCompareExchange(val, 0, 0); + return 1; +} + +int CRYPTO_atomic_write(int *val, int n, CRYPTO_RWLOCK *lock) +{ + InterlockedExchange(val, n); + return 1; +} + +int openssl_init_fork_handlers(void) +{ + return 0; +} + #endif diff --git a/crypto/ts/ts_asn1.c b/crypto/ts/ts_asn1.c index e60675ab..87072070 100644 --- a/crypto/ts/ts_asn1.c +++ b/crypto/ts/ts_asn1.c @@ -225,6 +225,23 @@ ASN1_SEQUENCE(ESS_SIGNING_CERT) = { IMPLEMENT_ASN1_FUNCTIONS_const(ESS_SIGNING_CERT) IMPLEMENT_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT) +ASN1_SEQUENCE(ESS_CERT_ID_V2) = { + ASN1_OPT(ESS_CERT_ID_V2, hash_alg, X509_ALGOR), + ASN1_SIMPLE(ESS_CERT_ID_V2, hash, ASN1_OCTET_STRING), + ASN1_OPT(ESS_CERT_ID_V2, issuer_serial, ESS_ISSUER_SERIAL) +} static_ASN1_SEQUENCE_END(ESS_CERT_ID_V2) + +IMPLEMENT_ASN1_FUNCTIONS_const(ESS_CERT_ID_V2) +IMPLEMENT_ASN1_DUP_FUNCTION(ESS_CERT_ID_V2) + +ASN1_SEQUENCE(ESS_SIGNING_CERT_V2) = { + ASN1_SEQUENCE_OF(ESS_SIGNING_CERT_V2, cert_ids, ESS_CERT_ID_V2), + ASN1_SEQUENCE_OF_OPT(ESS_SIGNING_CERT_V2, policy_info, POLICYINFO) +} static_ASN1_SEQUENCE_END(ESS_SIGNING_CERT_V2) + +IMPLEMENT_ASN1_FUNCTIONS_const(ESS_SIGNING_CERT_V2) +IMPLEMENT_ASN1_DUP_FUNCTION(ESS_SIGNING_CERT_V2) + /* Getting encapsulated TS_TST_INFO object from PKCS7. */ TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token) { diff --git a/crypto/ts/ts_conf.c b/crypto/ts/ts_conf.c index f5f3934d..625089a5 100644 --- a/crypto/ts/ts_conf.c +++ b/crypto/ts/ts_conf.c @@ -37,6 +37,7 @@ #define ENV_CLOCK_PRECISION_DIGITS "clock_precision_digits" #define ENV_VALUE_YES "yes" #define ENV_VALUE_NO "no" +#define ENV_ESS_CERT_ID_ALG "ess_cert_id_alg" /* Function definitions for certificate and key loading. */ @@ -466,3 +467,27 @@ int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, return ts_CONF_add_flag(conf, section, ENV_ESS_CERT_ID_CHAIN, TS_ESS_CERT_ID_CHAIN, ctx); } + +int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, + TS_RESP_CTX *ctx) +{ + int ret = 0; + const EVP_MD *cert_md = NULL; + const char *md = NCONF_get_string(conf, section, ENV_ESS_CERT_ID_ALG); + + if (md == NULL) + md = "sha1"; + + cert_md = EVP_get_digestbyname(md); + if (cert_md == NULL) { + ts_CONF_invalid(section, ENV_ESS_CERT_ID_ALG); + goto err; + } + + if (!TS_RESP_CTX_set_ess_cert_id_digest(ctx, cert_md)) + goto err; + + ret = 1; +err: + return ret; +} diff --git a/crypto/ts/ts_err.c b/crypto/ts/ts_err.c index a6d73a17..1f3854d8 100644 --- a/crypto/ts/ts_err.c +++ b/crypto/ts/ts_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,124 +8,165 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_TS,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_TS,0,reason) - -static ERR_STRING_DATA TS_str_functs[] = { - {ERR_FUNC(TS_F_DEF_SERIAL_CB), "def_serial_cb"}, - {ERR_FUNC(TS_F_DEF_TIME_CB), "def_time_cb"}, - {ERR_FUNC(TS_F_ESS_ADD_SIGNING_CERT), "ESS_add_signing_cert"}, - {ERR_FUNC(TS_F_ESS_CERT_ID_NEW_INIT), "ess_CERT_ID_new_init"}, - {ERR_FUNC(TS_F_ESS_SIGNING_CERT_NEW_INIT), "ess_SIGNING_CERT_new_init"}, - {ERR_FUNC(TS_F_INT_TS_RESP_VERIFY_TOKEN), "int_ts_RESP_verify_token"}, - {ERR_FUNC(TS_F_PKCS7_TO_TS_TST_INFO), "PKCS7_to_TS_TST_INFO"}, - {ERR_FUNC(TS_F_TS_ACCURACY_SET_MICROS), "TS_ACCURACY_set_micros"}, - {ERR_FUNC(TS_F_TS_ACCURACY_SET_MILLIS), "TS_ACCURACY_set_millis"}, - {ERR_FUNC(TS_F_TS_ACCURACY_SET_SECONDS), "TS_ACCURACY_set_seconds"}, - {ERR_FUNC(TS_F_TS_CHECK_IMPRINTS), "ts_check_imprints"}, - {ERR_FUNC(TS_F_TS_CHECK_NONCES), "ts_check_nonces"}, - {ERR_FUNC(TS_F_TS_CHECK_POLICY), "ts_check_policy"}, - {ERR_FUNC(TS_F_TS_CHECK_SIGNING_CERTS), "ts_check_signing_certs"}, - {ERR_FUNC(TS_F_TS_CHECK_STATUS_INFO), "ts_check_status_info"}, - {ERR_FUNC(TS_F_TS_COMPUTE_IMPRINT), "ts_compute_imprint"}, - {ERR_FUNC(TS_F_TS_CONF_INVALID), "ts_CONF_invalid"}, - {ERR_FUNC(TS_F_TS_CONF_LOAD_CERT), "TS_CONF_load_cert"}, - {ERR_FUNC(TS_F_TS_CONF_LOAD_CERTS), "TS_CONF_load_certs"}, - {ERR_FUNC(TS_F_TS_CONF_LOAD_KEY), "TS_CONF_load_key"}, - {ERR_FUNC(TS_F_TS_CONF_LOOKUP_FAIL), "ts_CONF_lookup_fail"}, - {ERR_FUNC(TS_F_TS_CONF_SET_DEFAULT_ENGINE), "TS_CONF_set_default_engine"}, - {ERR_FUNC(TS_F_TS_GET_STATUS_TEXT), "ts_get_status_text"}, - {ERR_FUNC(TS_F_TS_MSG_IMPRINT_SET_ALGO), "TS_MSG_IMPRINT_set_algo"}, - {ERR_FUNC(TS_F_TS_REQ_SET_MSG_IMPRINT), "TS_REQ_set_msg_imprint"}, - {ERR_FUNC(TS_F_TS_REQ_SET_NONCE), "TS_REQ_set_nonce"}, - {ERR_FUNC(TS_F_TS_REQ_SET_POLICY_ID), "TS_REQ_set_policy_id"}, - {ERR_FUNC(TS_F_TS_RESP_CREATE_RESPONSE), "TS_RESP_create_response"}, - {ERR_FUNC(TS_F_TS_RESP_CREATE_TST_INFO), "ts_RESP_create_tst_info"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_ADD_FAILURE_INFO), +static const ERR_STRING_DATA TS_str_functs[] = { + {ERR_PACK(ERR_LIB_TS, TS_F_DEF_SERIAL_CB, 0), "def_serial_cb"}, + {ERR_PACK(ERR_LIB_TS, TS_F_DEF_TIME_CB, 0), "def_time_cb"}, + {ERR_PACK(ERR_LIB_TS, TS_F_ESS_ADD_SIGNING_CERT, 0), + "ess_add_signing_cert"}, + {ERR_PACK(ERR_LIB_TS, TS_F_ESS_ADD_SIGNING_CERT_V2, 0), + "ess_add_signing_cert_v2"}, + {ERR_PACK(ERR_LIB_TS, TS_F_ESS_CERT_ID_NEW_INIT, 0), + "ess_CERT_ID_new_init"}, + {ERR_PACK(ERR_LIB_TS, TS_F_ESS_CERT_ID_V2_NEW_INIT, 0), + "ess_cert_id_v2_new_init"}, + {ERR_PACK(ERR_LIB_TS, TS_F_ESS_SIGNING_CERT_NEW_INIT, 0), + "ess_SIGNING_CERT_new_init"}, + {ERR_PACK(ERR_LIB_TS, TS_F_ESS_SIGNING_CERT_V2_NEW_INIT, 0), + "ess_signing_cert_v2_new_init"}, + {ERR_PACK(ERR_LIB_TS, TS_F_INT_TS_RESP_VERIFY_TOKEN, 0), + "int_ts_RESP_verify_token"}, + {ERR_PACK(ERR_LIB_TS, TS_F_PKCS7_TO_TS_TST_INFO, 0), + "PKCS7_to_TS_TST_INFO"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_ACCURACY_SET_MICROS, 0), + "TS_ACCURACY_set_micros"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_ACCURACY_SET_MILLIS, 0), + "TS_ACCURACY_set_millis"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_ACCURACY_SET_SECONDS, 0), + "TS_ACCURACY_set_seconds"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CHECK_IMPRINTS, 0), "ts_check_imprints"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CHECK_NONCES, 0), "ts_check_nonces"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CHECK_POLICY, 0), "ts_check_policy"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CHECK_SIGNING_CERTS, 0), + "ts_check_signing_certs"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CHECK_STATUS_INFO, 0), + "ts_check_status_info"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_COMPUTE_IMPRINT, 0), "ts_compute_imprint"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CONF_INVALID, 0), "ts_CONF_invalid"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CONF_LOAD_CERT, 0), "TS_CONF_load_cert"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CONF_LOAD_CERTS, 0), "TS_CONF_load_certs"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CONF_LOAD_KEY, 0), "TS_CONF_load_key"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CONF_LOOKUP_FAIL, 0), "ts_CONF_lookup_fail"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_CONF_SET_DEFAULT_ENGINE, 0), + "TS_CONF_set_default_engine"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_GET_STATUS_TEXT, 0), "ts_get_status_text"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_MSG_IMPRINT_SET_ALGO, 0), + "TS_MSG_IMPRINT_set_algo"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_REQ_SET_MSG_IMPRINT, 0), + "TS_REQ_set_msg_imprint"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_REQ_SET_NONCE, 0), "TS_REQ_set_nonce"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_REQ_SET_POLICY_ID, 0), + "TS_REQ_set_policy_id"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CREATE_RESPONSE, 0), + "TS_RESP_create_response"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CREATE_TST_INFO, 0), + "ts_RESP_create_tst_info"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_ADD_FAILURE_INFO, 0), "TS_RESP_CTX_add_failure_info"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_ADD_MD), "TS_RESP_CTX_add_md"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_ADD_POLICY), "TS_RESP_CTX_add_policy"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_NEW), "TS_RESP_CTX_new"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_SET_ACCURACY), "TS_RESP_CTX_set_accuracy"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_SET_CERTS), "TS_RESP_CTX_set_certs"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_SET_DEF_POLICY), "TS_RESP_CTX_set_def_policy"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_SET_SIGNER_CERT), + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_ADD_MD, 0), "TS_RESP_CTX_add_md"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_ADD_POLICY, 0), + "TS_RESP_CTX_add_policy"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_NEW, 0), "TS_RESP_CTX_new"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_SET_ACCURACY, 0), + "TS_RESP_CTX_set_accuracy"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_SET_CERTS, 0), + "TS_RESP_CTX_set_certs"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_SET_DEF_POLICY, 0), + "TS_RESP_CTX_set_def_policy"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_SET_SIGNER_CERT, 0), "TS_RESP_CTX_set_signer_cert"}, - {ERR_FUNC(TS_F_TS_RESP_CTX_SET_STATUS_INFO), + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_CTX_SET_STATUS_INFO, 0), "TS_RESP_CTX_set_status_info"}, - {ERR_FUNC(TS_F_TS_RESP_GET_POLICY), "ts_RESP_get_policy"}, - {ERR_FUNC(TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION), + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_GET_POLICY, 0), "ts_RESP_get_policy"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION, 0), "TS_RESP_set_genTime_with_precision"}, - {ERR_FUNC(TS_F_TS_RESP_SET_STATUS_INFO), "TS_RESP_set_status_info"}, - {ERR_FUNC(TS_F_TS_RESP_SET_TST_INFO), "TS_RESP_set_tst_info"}, - {ERR_FUNC(TS_F_TS_RESP_SIGN), "ts_RESP_sign"}, - {ERR_FUNC(TS_F_TS_RESP_VERIFY_SIGNATURE), "TS_RESP_verify_signature"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_ACCURACY), "TS_TST_INFO_set_accuracy"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_MSG_IMPRINT), + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_SET_STATUS_INFO, 0), + "TS_RESP_set_status_info"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_SET_TST_INFO, 0), + "TS_RESP_set_tst_info"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_SIGN, 0), "ts_RESP_sign"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_RESP_VERIFY_SIGNATURE, 0), + "TS_RESP_verify_signature"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_ACCURACY, 0), + "TS_TST_INFO_set_accuracy"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_MSG_IMPRINT, 0), "TS_TST_INFO_set_msg_imprint"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_NONCE), "TS_TST_INFO_set_nonce"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_POLICY_ID), "TS_TST_INFO_set_policy_id"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_SERIAL), "TS_TST_INFO_set_serial"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_TIME), "TS_TST_INFO_set_time"}, - {ERR_FUNC(TS_F_TS_TST_INFO_SET_TSA), "TS_TST_INFO_set_tsa"}, - {ERR_FUNC(TS_F_TS_VERIFY), "TS_VERIFY"}, - {ERR_FUNC(TS_F_TS_VERIFY_CERT), "ts_verify_cert"}, - {ERR_FUNC(TS_F_TS_VERIFY_CTX_NEW), "TS_VERIFY_CTX_new"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_NONCE, 0), + "TS_TST_INFO_set_nonce"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_POLICY_ID, 0), + "TS_TST_INFO_set_policy_id"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_SERIAL, 0), + "TS_TST_INFO_set_serial"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_TIME, 0), + "TS_TST_INFO_set_time"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_TST_INFO_SET_TSA, 0), "TS_TST_INFO_set_tsa"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_VERIFY, 0), ""}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_VERIFY_CERT, 0), "ts_verify_cert"}, + {ERR_PACK(ERR_LIB_TS, TS_F_TS_VERIFY_CTX_NEW, 0), "TS_VERIFY_CTX_new"}, {0, NULL} }; -static ERR_STRING_DATA TS_str_reasons[] = { - {ERR_REASON(TS_R_BAD_PKCS7_TYPE), "bad pkcs7 type"}, - {ERR_REASON(TS_R_BAD_TYPE), "bad type"}, - {ERR_REASON(TS_R_CANNOT_LOAD_CERT), "cannot load certificate"}, - {ERR_REASON(TS_R_CANNOT_LOAD_KEY), "cannot load private key"}, - {ERR_REASON(TS_R_CERTIFICATE_VERIFY_ERROR), "certificate verify error"}, - {ERR_REASON(TS_R_COULD_NOT_SET_ENGINE), "could not set engine"}, - {ERR_REASON(TS_R_COULD_NOT_SET_TIME), "could not set time"}, - {ERR_REASON(TS_R_DETACHED_CONTENT), "detached content"}, - {ERR_REASON(TS_R_ESS_ADD_SIGNING_CERT_ERROR), - "ess add signing cert error"}, - {ERR_REASON(TS_R_ESS_SIGNING_CERTIFICATE_ERROR), - "ess signing certificate error"}, - {ERR_REASON(TS_R_INVALID_NULL_POINTER), "invalid null pointer"}, - {ERR_REASON(TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE), - "invalid signer certificate purpose"}, - {ERR_REASON(TS_R_MESSAGE_IMPRINT_MISMATCH), "message imprint mismatch"}, - {ERR_REASON(TS_R_NONCE_MISMATCH), "nonce mismatch"}, - {ERR_REASON(TS_R_NONCE_NOT_RETURNED), "nonce not returned"}, - {ERR_REASON(TS_R_NO_CONTENT), "no content"}, - {ERR_REASON(TS_R_NO_TIME_STAMP_TOKEN), "no time stamp token"}, - {ERR_REASON(TS_R_PKCS7_ADD_SIGNATURE_ERROR), "pkcs7 add signature error"}, - {ERR_REASON(TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR), - "pkcs7 add signed attr error"}, - {ERR_REASON(TS_R_PKCS7_TO_TS_TST_INFO_FAILED), - "pkcs7 to ts tst info failed"}, - {ERR_REASON(TS_R_POLICY_MISMATCH), "policy mismatch"}, - {ERR_REASON(TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), - "private key does not match certificate"}, - {ERR_REASON(TS_R_RESPONSE_SETUP_ERROR), "response setup error"}, - {ERR_REASON(TS_R_SIGNATURE_FAILURE), "signature failure"}, - {ERR_REASON(TS_R_THERE_MUST_BE_ONE_SIGNER), "there must be one signer"}, - {ERR_REASON(TS_R_TIME_SYSCALL_ERROR), "time syscall error"}, - {ERR_REASON(TS_R_TOKEN_NOT_PRESENT), "token not present"}, - {ERR_REASON(TS_R_TOKEN_PRESENT), "token present"}, - {ERR_REASON(TS_R_TSA_NAME_MISMATCH), "tsa name mismatch"}, - {ERR_REASON(TS_R_TSA_UNTRUSTED), "tsa untrusted"}, - {ERR_REASON(TS_R_TST_INFO_SETUP_ERROR), "tst info setup error"}, - {ERR_REASON(TS_R_TS_DATASIGN), "ts datasign"}, - {ERR_REASON(TS_R_UNACCEPTABLE_POLICY), "unacceptable policy"}, - {ERR_REASON(TS_R_UNSUPPORTED_MD_ALGORITHM), "unsupported md algorithm"}, - {ERR_REASON(TS_R_UNSUPPORTED_VERSION), "unsupported version"}, - {ERR_REASON(TS_R_VAR_BAD_VALUE), "var bad value"}, - {ERR_REASON(TS_R_VAR_LOOKUP_FAILURE), "cannot find config variable"}, - {ERR_REASON(TS_R_WRONG_CONTENT_TYPE), "wrong content type"}, +static const ERR_STRING_DATA TS_str_reasons[] = { + {ERR_PACK(ERR_LIB_TS, 0, TS_R_BAD_PKCS7_TYPE), "bad pkcs7 type"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_BAD_TYPE), "bad type"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_CANNOT_LOAD_CERT), "cannot load certificate"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_CANNOT_LOAD_KEY), "cannot load private key"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_CERTIFICATE_VERIFY_ERROR), + "certificate verify error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_COULD_NOT_SET_ENGINE), + "could not set engine"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_COULD_NOT_SET_TIME), "could not set time"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_DETACHED_CONTENT), "detached content"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_ESS_ADD_SIGNING_CERT_ERROR), + "ess add signing cert error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR), + "ess add signing cert v2 error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_ESS_SIGNING_CERTIFICATE_ERROR), + "ess signing certificate error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_INVALID_NULL_POINTER), + "invalid null pointer"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE), + "invalid signer certificate purpose"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_MESSAGE_IMPRINT_MISMATCH), + "message imprint mismatch"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_NONCE_MISMATCH), "nonce mismatch"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_NONCE_NOT_RETURNED), "nonce not returned"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_NO_CONTENT), "no content"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_NO_TIME_STAMP_TOKEN), "no time stamp token"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_PKCS7_ADD_SIGNATURE_ERROR), + "pkcs7 add signature error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR), + "pkcs7 add signed attr error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_PKCS7_TO_TS_TST_INFO_FAILED), + "pkcs7 to ts tst info failed"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_POLICY_MISMATCH), "policy mismatch"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE), + "private key does not match certificate"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_RESPONSE_SETUP_ERROR), + "response setup error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_SIGNATURE_FAILURE), "signature failure"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_THERE_MUST_BE_ONE_SIGNER), + "there must be one signer"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TIME_SYSCALL_ERROR), "time syscall error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TOKEN_NOT_PRESENT), "token not present"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TOKEN_PRESENT), "token present"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TSA_NAME_MISMATCH), "tsa name mismatch"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TSA_UNTRUSTED), "tsa untrusted"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TST_INFO_SETUP_ERROR), + "tst info setup error"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_TS_DATASIGN), "ts datasign"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_UNACCEPTABLE_POLICY), "unacceptable policy"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_UNSUPPORTED_MD_ALGORITHM), + "unsupported md algorithm"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_UNSUPPORTED_VERSION), "unsupported version"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_VAR_BAD_VALUE), "var bad value"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_VAR_LOOKUP_FAILURE), + "cannot find config variable"}, + {ERR_PACK(ERR_LIB_TS, 0, TS_R_WRONG_CONTENT_TYPE), "wrong content type"}, {0, NULL} }; @@ -134,10 +175,9 @@ static ERR_STRING_DATA TS_str_reasons[] = { int ERR_load_TS_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(TS_str_functs[0].error) == NULL) { - ERR_load_strings(0, TS_str_functs); - ERR_load_strings(0, TS_str_reasons); + ERR_load_strings_const(TS_str_functs); + ERR_load_strings_const(TS_str_reasons); } #endif return 1; diff --git a/crypto/ts/ts_lcl.h b/crypto/ts/ts_lcl.h index d0c3cf81..771784fe 100644 --- a/crypto/ts/ts_lcl.h +++ b/crypto/ts/ts_lcl.h @@ -131,11 +131,39 @@ struct ESS_signing_cert { STACK_OF(POLICYINFO) *policy_info; }; +/*- + * ESSCertIDv2 ::= SEQUENCE { + * hashAlgorithm AlgorithmIdentifier + * DEFAULT {algorithm id-sha256}, + * certHash Hash, + * issuerSerial IssuerSerial OPTIONAL + * } + */ + +struct ESS_cert_id_v2_st { + X509_ALGOR *hash_alg; /* Default: SHA-256 */ + ASN1_OCTET_STRING *hash; + ESS_ISSUER_SERIAL *issuer_serial; +}; + +/*- + * SigningCertificateV2 ::= SEQUENCE { + * certs SEQUENCE OF ESSCertIDv2, + * policies SEQUENCE OF PolicyInformation OPTIONAL + * } + */ + +struct ESS_signing_cert_v2_st { + STACK_OF(ESS_CERT_ID_V2) *cert_ids; + STACK_OF(POLICYINFO) *policy_info; +}; + struct TS_resp_ctx { X509 *signer_cert; EVP_PKEY *signer_key; const EVP_MD *signer_md; + const EVP_MD *ess_cert_id_digest; STACK_OF(X509) *certs; /* Certs to include in signed data. */ STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */ ASN1_OBJECT *default_policy; /* It may appear in policies, too. */ diff --git a/crypto/ts/ts_rsp_sign.c b/crypto/ts/ts_rsp_sign.c index aea7b922..65699562 100644 --- a/crypto/ts/ts_rsp_sign.c +++ b/crypto/ts/ts_rsp_sign.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,12 +7,9 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include "internal/cryptlib.h" -#if defined(OPENSSL_SYS_UNIX) -# include -#endif - #include #include #include @@ -35,7 +32,16 @@ static ESS_SIGNING_CERT *ess_SIGNING_CERT_new_init(X509 *signcert, STACK_OF(X509) *certs); static ESS_CERT_ID *ess_CERT_ID_new_init(X509 *cert, int issuer_needed); static int ts_TST_INFO_content_new(PKCS7 *p7); -static int ESS_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc); +static int ess_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc); + +static ESS_SIGNING_CERT_V2 *ess_signing_cert_v2_new_init(const EVP_MD *hash_alg, + X509 *signcert, + STACK_OF(X509) + *certs); +static ESS_CERT_ID_V2 *ess_cert_id_v2_new_init(const EVP_MD *hash_alg, + X509 *cert, int issuer_needed); +static int ess_add_signing_cert_v2(PKCS7_SIGNER_INFO *si, + ESS_SIGNING_CERT_V2 *sc); static ASN1_GENERALIZEDTIME *TS_RESP_set_genTime_with_precision(ASN1_GENERALIZEDTIME *, long, long, @@ -628,6 +634,7 @@ static int ts_RESP_sign(TS_RESP_CTX *ctx) PKCS7 *p7 = NULL; PKCS7_SIGNER_INFO *si; STACK_OF(X509) *certs; /* Certificates to include in sc. */ + ESS_SIGNING_CERT_V2 *sc2 = NULL; ESS_SIGNING_CERT *sc = NULL; ASN1_OBJECT *oid; BIO *p7bio = NULL; @@ -671,11 +678,24 @@ static int ts_RESP_sign(TS_RESP_CTX *ctx) } certs = ctx->flags & TS_ESS_CERT_ID_CHAIN ? ctx->certs : NULL; - if ((sc = ess_SIGNING_CERT_new_init(ctx->signer_cert, certs)) == NULL) - goto err; - if (!ESS_add_signing_cert(si, sc)) { - TSerr(TS_F_TS_RESP_SIGN, TS_R_ESS_ADD_SIGNING_CERT_ERROR); - goto err; + if (ctx->ess_cert_id_digest == EVP_sha1()) { + if ((sc = ess_SIGNING_CERT_new_init(ctx->signer_cert, certs)) == NULL) + goto err; + + if (!ess_add_signing_cert(si, sc)) { + TSerr(TS_F_TS_RESP_SIGN, TS_R_ESS_ADD_SIGNING_CERT_ERROR); + goto err; + } + } else { + sc2 = ess_signing_cert_v2_new_init(ctx->ess_cert_id_digest, + ctx->signer_cert, certs); + if (sc2 == NULL) + goto err; + + if (!ess_add_signing_cert_v2(si, sc2)) { + TSerr(TS_F_TS_RESP_SIGN, TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR); + goto err; + } } if (!ts_TST_INFO_content_new(p7)) @@ -703,6 +723,7 @@ static int ts_RESP_sign(TS_RESP_CTX *ctx) "Error during signature " "generation."); BIO_free_all(p7bio); + ESS_SIGNING_CERT_V2_free(sc2); ESS_SIGNING_CERT_free(sc); PKCS7_free(p7); return ret; @@ -806,7 +827,7 @@ static int ts_TST_INFO_content_new(PKCS7 *p7) return 0; } -static int ESS_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc) +static int ess_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc) { ASN1_STRING *seq = NULL; unsigned char *p, *pp = NULL; @@ -835,9 +856,133 @@ static int ESS_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc) return 0; } -static ASN1_GENERALIZEDTIME -*TS_RESP_set_genTime_with_precision(ASN1_GENERALIZEDTIME *asn1_time, - long sec, long usec, unsigned precision) +static ESS_SIGNING_CERT_V2 *ess_signing_cert_v2_new_init(const EVP_MD *hash_alg, + X509 *signcert, + STACK_OF(X509) *certs) +{ + ESS_CERT_ID_V2 *cid = NULL; + ESS_SIGNING_CERT_V2 *sc = NULL; + int i; + + if ((sc = ESS_SIGNING_CERT_V2_new()) == NULL) + goto err; + if ((cid = ess_cert_id_v2_new_init(hash_alg, signcert, 0)) == NULL) + goto err; + if (!sk_ESS_CERT_ID_V2_push(sc->cert_ids, cid)) + goto err; + cid = NULL; + + for (i = 0; i < sk_X509_num(certs); ++i) { + X509 *cert = sk_X509_value(certs, i); + + if ((cid = ess_cert_id_v2_new_init(hash_alg, cert, 1)) == NULL) + goto err; + if (!sk_ESS_CERT_ID_V2_push(sc->cert_ids, cid)) + goto err; + cid = NULL; + } + + return sc; + err: + ESS_SIGNING_CERT_V2_free(sc); + ESS_CERT_ID_V2_free(cid); + TSerr(TS_F_ESS_SIGNING_CERT_V2_NEW_INIT, ERR_R_MALLOC_FAILURE); + return NULL; +} + +static ESS_CERT_ID_V2 *ess_cert_id_v2_new_init(const EVP_MD *hash_alg, + X509 *cert, int issuer_needed) +{ + ESS_CERT_ID_V2 *cid = NULL; + GENERAL_NAME *name = NULL; + unsigned char hash[EVP_MAX_MD_SIZE]; + unsigned int hash_len = sizeof(hash); + X509_ALGOR *alg = NULL; + + memset(hash, 0, sizeof(hash)); + + if ((cid = ESS_CERT_ID_V2_new()) == NULL) + goto err; + + if (hash_alg != EVP_sha256()) { + alg = X509_ALGOR_new(); + if (alg == NULL) + goto err; + X509_ALGOR_set_md(alg, hash_alg); + if (alg->algorithm == NULL) + goto err; + cid->hash_alg = alg; + alg = NULL; + } else { + cid->hash_alg = NULL; + } + + if (!X509_digest(cert, hash_alg, hash, &hash_len)) + goto err; + + if (!ASN1_OCTET_STRING_set(cid->hash, hash, hash_len)) + goto err; + + if (issuer_needed) { + if ((cid->issuer_serial = ESS_ISSUER_SERIAL_new()) == NULL) + goto err; + if ((name = GENERAL_NAME_new()) == NULL) + goto err; + name->type = GEN_DIRNAME; + if ((name->d.dirn = X509_NAME_dup(X509_get_issuer_name(cert))) == NULL) + goto err; + if (!sk_GENERAL_NAME_push(cid->issuer_serial->issuer, name)) + goto err; + name = NULL; /* Ownership is lost. */ + ASN1_INTEGER_free(cid->issuer_serial->serial); + cid->issuer_serial->serial = + ASN1_INTEGER_dup(X509_get_serialNumber(cert)); + if (cid->issuer_serial->serial == NULL) + goto err; + } + + return cid; + err: + X509_ALGOR_free(alg); + GENERAL_NAME_free(name); + ESS_CERT_ID_V2_free(cid); + TSerr(TS_F_ESS_CERT_ID_V2_NEW_INIT, ERR_R_MALLOC_FAILURE); + return NULL; +} + +static int ess_add_signing_cert_v2(PKCS7_SIGNER_INFO *si, + ESS_SIGNING_CERT_V2 *sc) +{ + ASN1_STRING *seq = NULL; + unsigned char *p, *pp = NULL; + int len = i2d_ESS_SIGNING_CERT_V2(sc, NULL); + + if ((pp = OPENSSL_malloc(len)) == NULL) { + TSerr(TS_F_ESS_ADD_SIGNING_CERT_V2, ERR_R_MALLOC_FAILURE); + goto err; + } + + p = pp; + i2d_ESS_SIGNING_CERT_V2(sc, &p); + if ((seq = ASN1_STRING_new()) == NULL || !ASN1_STRING_set(seq, pp, len)) { + TSerr(TS_F_ESS_ADD_SIGNING_CERT_V2, ERR_R_MALLOC_FAILURE); + goto err; + } + + OPENSSL_free(pp); + pp = NULL; + return PKCS7_add_signed_attribute(si, + NID_id_smime_aa_signingCertificateV2, + V_ASN1_SEQUENCE, seq); + err: + ASN1_STRING_free(seq); + OPENSSL_free(pp); + return 0; +} + +static ASN1_GENERALIZEDTIME *TS_RESP_set_genTime_with_precision( + ASN1_GENERALIZEDTIME *asn1_time, long sec, long usec, + unsigned precision) { time_t time_sec = (time_t)sec; struct tm *tm = NULL; @@ -902,3 +1047,9 @@ static ASN1_GENERALIZEDTIME TSerr(TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION, TS_R_COULD_NOT_SET_TIME); return NULL; } + +int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md) +{ + ctx->ess_cert_id_digest = md; + return 1; +} diff --git a/crypto/ts/ts_rsp_verify.c b/crypto/ts/ts_rsp_verify.c index 2755dd0e..9deda81b 100644 --- a/crypto/ts/ts_rsp_verify.c +++ b/crypto/ts/ts_rsp_verify.c @@ -37,6 +37,8 @@ static int ts_check_nonces(const ASN1_INTEGER *a, TS_TST_INFO *tst_info); static int ts_check_signer_name(GENERAL_NAME *tsa_name, X509 *signer); static int ts_find_name(STACK_OF(GENERAL_NAME) *gen_names, GENERAL_NAME *name); +static int ts_find_cert_v2(STACK_OF(ESS_CERT_ID_V2) *cert_ids, X509 *cert); +static ESS_SIGNING_CERT_V2 *ess_get_signing_cert_v2(PKCS7_SIGNER_INFO *si); /* * This must be large enough to hold all values in ts_status_text (with @@ -201,34 +203,57 @@ static int ts_check_signing_certs(PKCS7_SIGNER_INFO *si, { ESS_SIGNING_CERT *ss = ess_get_signing_cert(si); STACK_OF(ESS_CERT_ID) *cert_ids = NULL; + ESS_SIGNING_CERT_V2 *ssv2 = ess_get_signing_cert_v2(si); + STACK_OF(ESS_CERT_ID_V2) *cert_ids_v2 = NULL; X509 *cert; int i = 0; int ret = 0; - if (!ss) - goto err; - cert_ids = ss->cert_ids; - cert = sk_X509_value(chain, 0); - if (ts_find_cert(cert_ids, cert) != 0) - goto err; + if (ss != NULL) { + cert_ids = ss->cert_ids; + cert = sk_X509_value(chain, 0); + if (ts_find_cert(cert_ids, cert) != 0) + goto err; - /* - * Check the other certificates of the chain if there are more than one - * certificate ids in cert_ids. - */ - if (sk_ESS_CERT_ID_num(cert_ids) > 1) { - for (i = 1; i < sk_X509_num(chain); ++i) { - cert = sk_X509_value(chain, i); - if (ts_find_cert(cert_ids, cert) < 0) - goto err; + /* + * Check the other certificates of the chain if there are more than one + * certificate ids in cert_ids. + */ + if (sk_ESS_CERT_ID_num(cert_ids) > 1) { + for (i = 1; i < sk_X509_num(chain); ++i) { + cert = sk_X509_value(chain, i); + if (ts_find_cert(cert_ids, cert) < 0) + goto err; + } } + } else if (ssv2 != NULL) { + cert_ids_v2 = ssv2->cert_ids; + cert = sk_X509_value(chain, 0); + if (ts_find_cert_v2(cert_ids_v2, cert) != 0) + goto err; + + /* + * Check the other certificates of the chain if there are more than one + * certificate ids in cert_ids. + */ + if (sk_ESS_CERT_ID_V2_num(cert_ids_v2) > 1) { + for (i = 1; i < sk_X509_num(chain); ++i) { + cert = sk_X509_value(chain, i); + if (ts_find_cert_v2(cert_ids_v2, cert) < 0) + goto err; + } + } + } else { + goto err; } + ret = 1; err: if (!ret) TSerr(TS_F_TS_CHECK_SIGNING_CERTS, TS_R_ESS_SIGNING_CERTIFICATE_ERROR); ESS_SIGNING_CERT_free(ss); + ESS_SIGNING_CERT_V2_free(ssv2); return ret; } @@ -243,6 +268,18 @@ static ESS_SIGNING_CERT *ess_get_signing_cert(PKCS7_SIGNER_INFO *si) return d2i_ESS_SIGNING_CERT(NULL, &p, attr->value.sequence->length); } +static ESS_SIGNING_CERT_V2 *ess_get_signing_cert_v2(PKCS7_SIGNER_INFO *si) +{ + ASN1_TYPE *attr; + const unsigned char *p; + + attr = PKCS7_get_signed_attribute(si, NID_id_smime_aa_signingCertificateV2); + if (attr == NULL) + return NULL; + p = attr->value.sequence->data; + return d2i_ESS_SIGNING_CERT_V2(NULL, &p, attr->value.sequence->length); +} + /* Returns < 0 if certificate is not found, certificate index otherwise. */ static int ts_find_cert(STACK_OF(ESS_CERT_ID) *cert_ids, X509 *cert) { @@ -272,6 +309,38 @@ static int ts_find_cert(STACK_OF(ESS_CERT_ID) *cert_ids, X509 *cert) return -1; } +/* Returns < 0 if certificate is not found, certificate index otherwise. */ +static int ts_find_cert_v2(STACK_OF(ESS_CERT_ID_V2) *cert_ids, X509 *cert) +{ + int i; + unsigned char cert_digest[EVP_MAX_MD_SIZE]; + unsigned int len; + + /* Look for cert in the cert_ids vector. */ + for (i = 0; i < sk_ESS_CERT_ID_V2_num(cert_ids); ++i) { + ESS_CERT_ID_V2 *cid = sk_ESS_CERT_ID_V2_value(cert_ids, i); + const EVP_MD *md; + + if (cid->hash_alg != NULL) + md = EVP_get_digestbyobj(cid->hash_alg->algorithm); + else + md = EVP_sha256(); + + X509_digest(cert, md, cert_digest, &len); + if (cid->hash->length != (int)len) + return -1; + + if (memcmp(cid->hash->data, cert_digest, cid->hash->length) == 0) { + ESS_ISSUER_SERIAL *is = cid->issuer_serial; + + if (is == NULL || !ts_issuer_serial_cmp(is, cert)) + return i; + } + } + + return -1; +} + static int ts_issuer_serial_cmp(ESS_ISSUER_SERIAL *is, X509 *cert) { GENERAL_NAME *issuer; @@ -480,7 +549,7 @@ static char *ts_get_status_text(STACK_OF(ASN1_UTF8STRING) *text) return result; } -static int ts_check_policy(const ASN1_OBJECT *req_oid, +static int ts_check_policy(const ASN1_OBJECT *req_oid, const TS_TST_INFO *tst_info) { const ASN1_OBJECT *resp_oid = tst_info->policy_id; diff --git a/crypto/txt_db/txt_db.c b/crypto/txt_db/txt_db.c index cf932a52..d6859629 100644 --- a/crypto/txt_db/txt_db.c +++ b/crypto/txt_db/txt_db.c @@ -124,7 +124,7 @@ TXT_DB *TXT_DB_read(BIO *in, int num) OPENSSL_free(ret->qual); OPENSSL_free(ret); } - return (NULL); + return NULL; } OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, @@ -135,16 +135,16 @@ OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, if (idx >= db->num_fields) { db->error = DB_ERROR_INDEX_OUT_OF_RANGE; - return (NULL); + return NULL; } lh = db->index[idx]; if (lh == NULL) { db->error = DB_ERROR_NO_INDEX; - return (NULL); + return NULL; } ret = lh_OPENSSL_STRING_retrieve(lh, value); db->error = DB_ERROR_OK; - return (ret); + return ret; } int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), @@ -156,12 +156,12 @@ int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), if (field >= db->num_fields) { db->error = DB_ERROR_INDEX_OUT_OF_RANGE; - return (0); + return 0; } /* FIXME: we lose type checking at this point */ if ((idx = (LHASH_OF(OPENSSL_STRING) *)OPENSSL_LH_new(hash, cmp)) == NULL) { db->error = DB_ERROR_MALLOC; - return (0); + return 0; } n = sk_OPENSSL_PSTRING_num(db->data); for (i = 0; i < n; i++) { @@ -173,18 +173,18 @@ int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), db->arg1 = sk_OPENSSL_PSTRING_find(db->data, k); db->arg2 = i; lh_OPENSSL_STRING_free(idx); - return (0); + return 0; } if (lh_OPENSSL_STRING_retrieve(idx, r) == NULL) { db->error = DB_ERROR_MALLOC; lh_OPENSSL_STRING_free(idx); - return (0); + return 0; } } lh_OPENSSL_STRING_free(db->index[field]); db->index[field] = idx; db->qual[field] = qual; - return (1); + return 1; } long TXT_DB_write(BIO *out, TXT_DB *db) @@ -231,7 +231,7 @@ long TXT_DB_write(BIO *out, TXT_DB *db) ret = tot; err: BUF_MEM_free(buf); - return (ret); + return ret; } int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *row) @@ -264,7 +264,7 @@ int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *row) } if (!sk_OPENSSL_PSTRING_push(db->data, row)) goto err1; - return (1); + return 1; err1: db->error = DB_ERROR_MALLOC; @@ -276,7 +276,7 @@ int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *row) } } err: - return (0); + return 0; } void TXT_DB_free(TXT_DB *db) diff --git a/crypto/ui/build.info b/crypto/ui/build.info index fcb45af7..c5d17fb7 100644 --- a/crypto/ui/build.info +++ b/crypto/ui/build.info @@ -1,3 +1,3 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=\ - ui_err.c ui_lib.c ui_openssl.c ui_util.c + ui_err.c ui_lib.c ui_openssl.c ui_null.c ui_util.c diff --git a/crypto/ui/ui_err.c b/crypto/ui/ui_err.c index c8640fea..e69163c4 100644 --- a/crypto/ui/ui_err.c +++ b/crypto/ui/ui_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,52 +8,58 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_UI,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_UI,0,reason) - -static ERR_STRING_DATA UI_str_functs[] = { - {ERR_FUNC(UI_F_CLOSE_CONSOLE), "close_console"}, - {ERR_FUNC(UI_F_ECHO_CONSOLE), "echo_console"}, - {ERR_FUNC(UI_F_GENERAL_ALLOCATE_BOOLEAN), "general_allocate_boolean"}, - {ERR_FUNC(UI_F_GENERAL_ALLOCATE_PROMPT), "general_allocate_prompt"}, - {ERR_FUNC(UI_F_NOECHO_CONSOLE), "noecho_console"}, - {ERR_FUNC(UI_F_OPEN_CONSOLE), "open_console"}, - {ERR_FUNC(UI_F_UI_CREATE_METHOD), "UI_create_method"}, - {ERR_FUNC(UI_F_UI_CTRL), "UI_ctrl"}, - {ERR_FUNC(UI_F_UI_DUP_ERROR_STRING), "UI_dup_error_string"}, - {ERR_FUNC(UI_F_UI_DUP_INFO_STRING), "UI_dup_info_string"}, - {ERR_FUNC(UI_F_UI_DUP_INPUT_BOOLEAN), "UI_dup_input_boolean"}, - {ERR_FUNC(UI_F_UI_DUP_INPUT_STRING), "UI_dup_input_string"}, - {ERR_FUNC(UI_F_UI_DUP_VERIFY_STRING), "UI_dup_verify_string"}, - {ERR_FUNC(UI_F_UI_GET0_RESULT), "UI_get0_result"}, - {ERR_FUNC(UI_F_UI_NEW_METHOD), "UI_new_method"}, - {ERR_FUNC(UI_F_UI_PROCESS), "UI_process"}, - {ERR_FUNC(UI_F_UI_SET_RESULT), "UI_set_result"}, +static const ERR_STRING_DATA UI_str_functs[] = { + {ERR_PACK(ERR_LIB_UI, UI_F_CLOSE_CONSOLE, 0), "close_console"}, + {ERR_PACK(ERR_LIB_UI, UI_F_ECHO_CONSOLE, 0), "echo_console"}, + {ERR_PACK(ERR_LIB_UI, UI_F_GENERAL_ALLOCATE_BOOLEAN, 0), + "general_allocate_boolean"}, + {ERR_PACK(ERR_LIB_UI, UI_F_GENERAL_ALLOCATE_PROMPT, 0), + "general_allocate_prompt"}, + {ERR_PACK(ERR_LIB_UI, UI_F_NOECHO_CONSOLE, 0), "noecho_console"}, + {ERR_PACK(ERR_LIB_UI, UI_F_OPEN_CONSOLE, 0), "open_console"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_CREATE_METHOD, 0), "UI_create_method"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_CTRL, 0), "UI_ctrl"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_DUP_ERROR_STRING, 0), "UI_dup_error_string"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_DUP_INFO_STRING, 0), "UI_dup_info_string"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_DUP_INPUT_BOOLEAN, 0), + "UI_dup_input_boolean"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_DUP_INPUT_STRING, 0), "UI_dup_input_string"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_DUP_USER_DATA, 0), "UI_dup_user_data"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_DUP_VERIFY_STRING, 0), + "UI_dup_verify_string"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_GET0_RESULT, 0), "UI_get0_result"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_GET_RESULT_LENGTH, 0), + "UI_get_result_length"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_NEW_METHOD, 0), "UI_new_method"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_PROCESS, 0), "UI_process"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_SET_RESULT, 0), "UI_set_result"}, + {ERR_PACK(ERR_LIB_UI, UI_F_UI_SET_RESULT_EX, 0), "UI_set_result_ex"}, {0, NULL} }; -static ERR_STRING_DATA UI_str_reasons[] = { - {ERR_REASON(UI_R_COMMON_OK_AND_CANCEL_CHARACTERS), - "common ok and cancel characters"}, - {ERR_REASON(UI_R_INDEX_TOO_LARGE), "index too large"}, - {ERR_REASON(UI_R_INDEX_TOO_SMALL), "index too small"}, - {ERR_REASON(UI_R_NO_RESULT_BUFFER), "no result buffer"}, - {ERR_REASON(UI_R_PROCESSING_ERROR), "processing error"}, - {ERR_REASON(UI_R_RESULT_TOO_LARGE), "result too large"}, - {ERR_REASON(UI_R_RESULT_TOO_SMALL), "result too small"}, - {ERR_REASON(UI_R_SYSASSIGN_ERROR), "sys$assign error"}, - {ERR_REASON(UI_R_SYSDASSGN_ERROR), "sys$dassgn error"}, - {ERR_REASON(UI_R_SYSQIOW_ERROR), "sys$qiow error"}, - {ERR_REASON(UI_R_UNKNOWN_CONTROL_COMMAND), "unknown control command"}, - {ERR_REASON(UI_R_UNKNOWN_TTYGET_ERRNO_VALUE), - "unknown ttyget errno value"}, +static const ERR_STRING_DATA UI_str_reasons[] = { + {ERR_PACK(ERR_LIB_UI, 0, UI_R_COMMON_OK_AND_CANCEL_CHARACTERS), + "common ok and cancel characters"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_INDEX_TOO_LARGE), "index too large"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_INDEX_TOO_SMALL), "index too small"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_NO_RESULT_BUFFER), "no result buffer"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_PROCESSING_ERROR), "processing error"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_RESULT_TOO_LARGE), "result too large"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_RESULT_TOO_SMALL), "result too small"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_SYSASSIGN_ERROR), "sys$assign error"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_SYSDASSGN_ERROR), "sys$dassgn error"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_SYSQIOW_ERROR), "sys$qiow error"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_UNKNOWN_CONTROL_COMMAND), + "unknown control command"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_UNKNOWN_TTYGET_ERRNO_VALUE), + "unknown ttyget errno value"}, + {ERR_PACK(ERR_LIB_UI, 0, UI_R_USER_DATA_DUPLICATION_UNSUPPORTED), + "user data duplication unsupported"}, {0, NULL} }; @@ -62,10 +68,9 @@ static ERR_STRING_DATA UI_str_reasons[] = { int ERR_load_UI_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(UI_str_functs[0].error) == NULL) { - ERR_load_strings(0, UI_str_functs); - ERR_load_strings(0, UI_str_reasons); + ERR_load_strings_const(UI_str_functs); + ERR_load_strings_const(UI_str_reasons); } #endif return 1; diff --git a/crypto/ui/ui_lib.c b/crypto/ui/ui_lib.c index 464dac42..98519877 100644 --- a/crypto/ui/ui_lib.c +++ b/crypto/ui/ui_lib.c @@ -17,7 +17,7 @@ UI *UI_new(void) { - return (UI_new_method(NULL)); + return UI_new_method(NULL); } UI *UI_new_method(const UI_METHOD *method) @@ -37,9 +37,10 @@ UI *UI_new_method(const UI_METHOD *method) } if (method == NULL) - ret->meth = UI_get_default_method(); - else - ret->meth = method; + method = UI_get_default_method(); + if (method == NULL) + method = UI_null(); + ret->meth = method; if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_UI, ret, &ret->ex_data)) { OPENSSL_free(ret); @@ -58,7 +59,11 @@ static void free_string(UI_STRING *uis) OPENSSL_free((char *)uis->_.boolean_data.ok_chars); OPENSSL_free((char *)uis->_.boolean_data.cancel_chars); break; - default: + case UIT_NONE: + case UIT_PROMPT: + case UIT_VERIFY: + case UIT_ERROR: + case UIT_INFO: break; } } @@ -69,6 +74,9 @@ void UI_free(UI *ui) { if (ui == NULL) return; + if ((ui->flags & UI_FLAG_DUPL_DATA) != 0) { + ui->meth->ui_destroy_data(ui, ui->user_data); + } sk_UI_STRING_pop_free(ui->strings, free_string); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_UI, ui, &ui->ex_data); CRYPTO_THREAD_lock_free(ui->lock); @@ -383,10 +391,38 @@ char *UI_construct_prompt(UI *ui, const char *object_desc, void *UI_add_user_data(UI *ui, void *user_data) { void *old_data = ui->user_data; + + if ((ui->flags & UI_FLAG_DUPL_DATA) != 0) { + ui->meth->ui_destroy_data(ui, old_data); + old_data = NULL; + } ui->user_data = user_data; + ui->flags &= ~UI_FLAG_DUPL_DATA; return old_data; } +int UI_dup_user_data(UI *ui, void *user_data) +{ + void *duplicate = NULL; + + if (ui->meth->ui_duplicate_data == NULL + || ui->meth->ui_destroy_data == NULL) { + UIerr(UI_F_UI_DUP_USER_DATA, UI_R_USER_DATA_DUPLICATION_UNSUPPORTED); + return -1; + } + + duplicate = ui->meth->ui_duplicate_data(ui, user_data); + if (duplicate == NULL) { + UIerr(UI_F_UI_DUP_USER_DATA, ERR_R_MALLOC_FAILURE); + return -1; + } + + (void)UI_add_user_data(ui, duplicate); + ui->flags |= UI_FLAG_DUPL_DATA; + + return 0; +} + void *UI_get0_user_data(UI *ui) { return ui->user_data; @@ -405,6 +441,19 @@ const char *UI_get0_result(UI *ui, int i) return UI_get0_result_string(sk_UI_STRING_value(ui->strings, i)); } +int UI_get_result_length(UI *ui, int i) +{ + if (i < 0) { + UIerr(UI_F_UI_GET_RESULT_LENGTH, UI_R_INDEX_TOO_SMALL); + return -1; + } + if (i >= sk_UI_STRING_num(ui->strings)) { + UIerr(UI_F_UI_GET_RESULT_LENGTH, UI_R_INDEX_TOO_LARGE); + return -1; + } + return UI_get_result_string_length(sk_UI_STRING_value(ui->strings, i)); +} + static int print_error(const char *str, size_t len, UI *ui) { UI_STRING uis; @@ -523,12 +572,12 @@ int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)) int UI_set_ex_data(UI *r, int idx, void *arg) { - return (CRYPTO_set_ex_data(&r->ex_data, idx, arg)); + return CRYPTO_set_ex_data(&r->ex_data, idx, arg); } void *UI_get_ex_data(UI *r, int idx) { - return (CRYPTO_get_ex_data(&r->ex_data, idx)); + return CRYPTO_get_ex_data(&r->ex_data, idx); } const UI_METHOD *UI_get_method(UI *ui) @@ -544,15 +593,17 @@ const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth) UI_METHOD *UI_create_method(const char *name) { - UI_METHOD *ui_method = OPENSSL_zalloc(sizeof(*ui_method)); + UI_METHOD *ui_method = NULL; - if (ui_method != NULL) { - ui_method->name = OPENSSL_strdup(name); - if (ui_method->name == NULL) { - OPENSSL_free(ui_method); - UIerr(UI_F_UI_CREATE_METHOD, ERR_R_MALLOC_FAILURE); - return NULL; - } + if ((ui_method = OPENSSL_zalloc(sizeof(*ui_method))) == NULL + || (ui_method->name = OPENSSL_strdup(name)) == NULL + || !CRYPTO_new_ex_data(CRYPTO_EX_INDEX_UI_METHOD, ui_method, + &ui_method->ex_data)) { + if (ui_method) + OPENSSL_free(ui_method->name); + OPENSSL_free(ui_method); + UIerr(UI_F_UI_CREATE_METHOD, ERR_R_MALLOC_FAILURE); + return NULL; } return ui_method; } @@ -564,6 +615,10 @@ UI_METHOD *UI_create_method(const char *name) */ void UI_destroy_method(UI_METHOD *ui_method) { + if (ui_method == NULL) + return; + CRYPTO_free_ex_data(CRYPTO_EX_INDEX_UI_METHOD, ui_method, + &ui_method->ex_data); OPENSSL_free(ui_method->name); ui_method->name = NULL; OPENSSL_free(ui_method); @@ -616,6 +671,18 @@ int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)) return -1; } +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)) +{ + if (method != NULL) { + method->ui_duplicate_data = duplicator; + method->ui_destroy_data = destructor; + return 0; + } + return -1; +} + int UI_method_set_prompt_constructor(UI_METHOD *method, char *(*prompt_constructor) (UI *ui, const char @@ -630,50 +697,73 @@ int UI_method_set_prompt_constructor(UI_METHOD *method, return -1; } -int (*UI_method_get_opener(UI_METHOD *method)) (UI *) +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data) +{ + return CRYPTO_set_ex_data(&method->ex_data, idx, data); +} + +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *) { if (method != NULL) return method->ui_open_session; return NULL; } -int (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *) +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *) { if (method != NULL) return method->ui_write_string; return NULL; } -int (*UI_method_get_flusher(UI_METHOD *method)) (UI *) +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *) { if (method != NULL) return method->ui_flush; return NULL; } -int (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *) +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *) { if (method != NULL) return method->ui_read_string; return NULL; } -int (*UI_method_get_closer(UI_METHOD *method)) (UI *) +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *) { if (method != NULL) return method->ui_close_session; return NULL; } -char *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *, - const char *, - const char *) +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *) { if (method != NULL) return method->ui_construct_prompt; return NULL; } +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *) +{ + if (method != NULL) + return method->ui_duplicate_data; + return NULL; +} + +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *) +{ + if (method != NULL) + return method->ui_destroy_data; + return NULL; +} + +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx) +{ + return CRYPTO_get_ex_data(&method->ex_data, idx); +} + enum UI_string_types UI_get_string_type(UI_STRING *uis) { return uis->type; @@ -694,9 +784,14 @@ const char *UI_get0_action_string(UI_STRING *uis) switch (uis->type) { case UIT_BOOLEAN: return uis->_.boolean_data.action_desc; - default: - return NULL; + case UIT_PROMPT: + case UIT_NONE: + case UIT_VERIFY: + case UIT_INFO: + case UIT_ERROR: + break; } + return NULL; } const char *UI_get0_result_string(UI_STRING *uis) @@ -705,9 +800,28 @@ const char *UI_get0_result_string(UI_STRING *uis) case UIT_PROMPT: case UIT_VERIFY: return uis->result_buf; - default: - return NULL; + case UIT_NONE: + case UIT_BOOLEAN: + case UIT_INFO: + case UIT_ERROR: + break; } + return NULL; +} + +int UI_get_result_string_length(UI_STRING *uis) +{ + switch (uis->type) { + case UIT_PROMPT: + case UIT_VERIFY: + return uis->result_len; + case UIT_NONE: + case UIT_BOOLEAN: + case UIT_INFO: + case UIT_ERROR: + break; + } + return -1; } const char *UI_get0_test_string(UI_STRING *uis) @@ -715,9 +829,14 @@ const char *UI_get0_test_string(UI_STRING *uis) switch (uis->type) { case UIT_VERIFY: return uis->_.string_data.test_buf; - default: - return NULL; + case UIT_NONE: + case UIT_BOOLEAN: + case UIT_INFO: + case UIT_ERROR: + case UIT_PROMPT: + break; } + return NULL; } int UI_get_result_minsize(UI_STRING *uis) @@ -726,9 +845,13 @@ int UI_get_result_minsize(UI_STRING *uis) case UIT_PROMPT: case UIT_VERIFY: return uis->_.string_data.result_minsize; - default: - return -1; + case UIT_NONE: + case UIT_INFO: + case UIT_ERROR: + case UIT_BOOLEAN: + break; } + return -1; } int UI_get_result_maxsize(UI_STRING *uis) @@ -737,15 +860,29 @@ int UI_get_result_maxsize(UI_STRING *uis) case UIT_PROMPT: case UIT_VERIFY: return uis->_.string_data.result_maxsize; - default: - return -1; + case UIT_NONE: + case UIT_INFO: + case UIT_ERROR: + case UIT_BOOLEAN: + break; } + return -1; } int UI_set_result(UI *ui, UI_STRING *uis, const char *result) { - int l = strlen(result); +#if 0 + /* + * This is placed here solely to preserve UI_F_UI_SET_RESULT + * To be removed for OpenSSL 1.2.0 + */ + UIerr(UI_F_UI_SET_RESULT, ERR_R_DISABLED); +#endif + return UI_set_result_ex(ui, uis, result, strlen(result)); +} +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len) +{ ui->flags &= ~UI_FLAG_REDOABLE; switch (uis->type) { @@ -760,16 +897,16 @@ int UI_set_result(UI *ui, UI_STRING *uis, const char *result) BIO_snprintf(number2, sizeof(number2), "%d", uis->_.string_data.result_maxsize); - if (l < uis->_.string_data.result_minsize) { + if (len < uis->_.string_data.result_minsize) { ui->flags |= UI_FLAG_REDOABLE; - UIerr(UI_F_UI_SET_RESULT, UI_R_RESULT_TOO_SMALL); + UIerr(UI_F_UI_SET_RESULT_EX, UI_R_RESULT_TOO_SMALL); ERR_add_error_data(5, "You must type in ", number1, " to ", number2, " characters"); return -1; } - if (l > uis->_.string_data.result_maxsize) { + if (len > uis->_.string_data.result_maxsize) { ui->flags |= UI_FLAG_REDOABLE; - UIerr(UI_F_UI_SET_RESULT, UI_R_RESULT_TOO_LARGE); + UIerr(UI_F_UI_SET_RESULT_EX, UI_R_RESULT_TOO_LARGE); ERR_add_error_data(5, "You must type in ", number1, " to ", number2, " characters"); return -1; @@ -777,19 +914,21 @@ int UI_set_result(UI *ui, UI_STRING *uis, const char *result) } if (uis->result_buf == NULL) { - UIerr(UI_F_UI_SET_RESULT, UI_R_NO_RESULT_BUFFER); + UIerr(UI_F_UI_SET_RESULT_EX, UI_R_NO_RESULT_BUFFER); return -1; } - OPENSSL_strlcpy(uis->result_buf, result, - uis->_.string_data.result_maxsize + 1); + memcpy(uis->result_buf, result, len); + if (len <= uis->_.string_data.result_maxsize) + uis->result_buf[len] = '\0'; + uis->result_len = len; break; case UIT_BOOLEAN: { const char *p; if (uis->result_buf == NULL) { - UIerr(UI_F_UI_SET_RESULT, UI_R_NO_RESULT_BUFFER); + UIerr(UI_F_UI_SET_RESULT_EX, UI_R_NO_RESULT_BUFFER); return -1; } @@ -805,7 +944,9 @@ int UI_set_result(UI *ui, UI_STRING *uis, const char *result) } } } - default: + case UIT_NONE: + case UIT_INFO: + case UIT_ERROR: break; } return 0; diff --git a/crypto/ui/ui_locl.h b/crypto/ui/ui_locl.h index 2953739b..19b33b8f 100644 --- a/crypto/ui/ui_locl.h +++ b/crypto/ui/ui_locl.h @@ -37,6 +37,12 @@ struct ui_method_st { int (*ui_flush) (UI *ui); int (*ui_read_string) (UI *ui, UI_STRING *uis); int (*ui_close_session) (UI *ui); + /* + * Duplicate the ui_data that often comes alongside a ui_method. This + * allows some backends to save away UI information for later use. + */ + void *(*ui_duplicate_data) (UI *ui, void *ui_data); + void (*ui_destroy_data) (UI *ui, void *ui_data); /* * Construct a prompt in a user-defined manner. object_desc is a textual * short description of the object, for example "pass phrase", and @@ -46,6 +52,10 @@ struct ui_method_st { */ char *(*ui_construct_prompt) (UI *ui, const char *object_desc, const char *object_name); + /* + * UI_METHOD specific application data. + */ + CRYPTO_EX_DATA ex_data; }; struct ui_string_st { @@ -61,6 +71,7 @@ struct ui_string_st { * Otherwise, it may be allocated by the UI * routine, meaning result_minsize is going * to be overwritten. */ + size_t result_len; union { struct { int result_minsize; /* Input: minimum required size of the @@ -88,6 +99,7 @@ struct ui_st { void *user_data; CRYPTO_EX_DATA ex_data; # define UI_FLAG_REDOABLE 0x0001 +# define UI_FLAG_DUPL_DATA 0x0002 /* user_data was duplicated */ # define UI_FLAG_PRINT_ERRORS 0x0100 int flags; diff --git a/crypto/ui/ui_null.c b/crypto/ui/ui_null.c new file mode 100644 index 00000000..9e5f6fca --- /dev/null +++ b/crypto/ui/ui_null.c @@ -0,0 +1,26 @@ +/* + * 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 + */ + +#include "ui_locl.h" + +static const UI_METHOD ui_null = { + "OpenSSL NULL UI", + NULL, /* opener */ + NULL, /* writer */ + NULL, /* flusher */ + NULL, /* reader */ + NULL, /* closer */ + NULL +}; + +/* The method with all the built-in thingies */ +const UI_METHOD *UI_null(void) +{ + return &ui_null; +} diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c index 8fa8deca..3ccd8a72 100644 --- a/crypto/ui/ui_openssl.c +++ b/crypto/ui/ui_openssl.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,66 +7,68 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" #include #include +#include +#ifndef OPENSSL_NO_UI_CONSOLE /* * need for #define _POSIX_C_SOURCE arises whenever you pass -ansi to gcc * [maybe others?], because it masks interfaces not discussed in standard, * sigaction and fileno included. -pedantic would be more appropriate for the * intended purposes, but we can't prevent users from adding -ansi. */ -#if defined(OPENSSL_SYS_VXWORKS) -# include -#endif - -#if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) -# ifndef _POSIX_C_SOURCE -# define _POSIX_C_SOURCE 2 +# if defined(OPENSSL_SYS_VXWORKS) +# include # endif -#endif -#include -#include -#include -#include -#if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) -# ifdef OPENSSL_UNISTD -# include OPENSSL_UNISTD -# else -# include +# if !defined(_POSIX_C_SOURCE) && defined(OPENSSL_SYS_VMS) +# ifndef _POSIX_C_SOURCE +# define _POSIX_C_SOURCE 2 +# endif # endif +# include +# include +# include +# include + +# if !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) +# ifdef OPENSSL_UNISTD +# include OPENSSL_UNISTD +# else +# include +# endif /* * If unistd.h defines _POSIX_VERSION, we conclude that we are on a POSIX * system and have sigaction and termios. */ -# if defined(_POSIX_VERSION) +# if defined(_POSIX_VERSION) + +# define SIGACTION +# if !defined(TERMIOS) && !defined(TERMIO) && !defined(SGTTY) +# define TERMIOS +# endif -# define SIGACTION -# if !defined(TERMIOS) && !defined(TERMIO) && !defined(SGTTY) -# define TERMIOS # endif - # endif -#endif -/* 06-Apr-92 Luke Brennan Support for VMS */ -#include "ui_locl.h" -#include "internal/cryptlib.h" +# include "ui_locl.h" +# include "internal/cryptlib.h" -#ifdef OPENSSL_SYS_VMS /* prototypes for sys$whatever */ -# include -# ifdef __DECC -# pragma message disable DOLLARID +# ifdef OPENSSL_SYS_VMS /* prototypes for sys$whatever */ +# include +# ifdef __DECC +# pragma message disable DOLLARID +# endif # endif -#endif -#ifdef WIN_CONSOLE_BUG -# include -# ifndef OPENSSL_SYS_WINCE -# include +# ifdef WIN_CONSOLE_BUG +# include +# ifndef OPENSSL_SYS_WINCE +# include +# endif # endif -#endif /* * There are 6 types of terminal interface supported, TERMIO, TERMIOS, VMS, @@ -80,81 +82,81 @@ * may eventually opt to remove it's use entirely. */ -#if !defined(TERMIOS) && !defined(TERMIO) && !defined(SGTTY) +# if !defined(TERMIOS) && !defined(TERMIO) && !defined(SGTTY) -# if defined(_LIBC) -# undef TERMIOS -# define TERMIO -# undef SGTTY +# if defined(_LIBC) +# undef TERMIOS +# define TERMIO +# undef SGTTY /* * We know that VMS, MSDOS, VXWORKS, use entirely other mechanisms. */ -# elif !defined(OPENSSL_SYS_VMS) \ +# elif !defined(OPENSSL_SYS_VMS) \ && !defined(OPENSSL_SYS_MSDOS) \ && !defined(OPENSSL_SYS_VXWORKS) -# define TERMIOS -# undef TERMIO -# undef SGTTY +# define TERMIOS +# undef TERMIO +# undef SGTTY +# endif + # endif -#endif +# ifdef TERMIOS +# include +# define TTY_STRUCT struct termios +# define TTY_FLAGS c_lflag +# define TTY_get(tty,data) tcgetattr(tty,data) +# define TTY_set(tty,data) tcsetattr(tty,TCSANOW,data) +# endif -#ifdef TERMIOS -# include -# define TTY_STRUCT struct termios -# define TTY_FLAGS c_lflag -# define TTY_get(tty,data) tcgetattr(tty,data) -# define TTY_set(tty,data) tcsetattr(tty,TCSANOW,data) -#endif +# ifdef TERMIO +# include +# define TTY_STRUCT struct termio +# define TTY_FLAGS c_lflag +# define TTY_get(tty,data) ioctl(tty,TCGETA,data) +# define TTY_set(tty,data) ioctl(tty,TCSETA,data) +# endif -#ifdef TERMIO -# include -# define TTY_STRUCT struct termio -# define TTY_FLAGS c_lflag -# define TTY_get(tty,data) ioctl(tty,TCGETA,data) -# define TTY_set(tty,data) ioctl(tty,TCSETA,data) -#endif +# ifdef SGTTY +# include +# define TTY_STRUCT struct sgttyb +# define TTY_FLAGS sg_flags +# define TTY_get(tty,data) ioctl(tty,TIOCGETP,data) +# define TTY_set(tty,data) ioctl(tty,TIOCSETP,data) +# endif -#ifdef SGTTY -# include -# define TTY_STRUCT struct sgttyb -# define TTY_FLAGS sg_flags -# define TTY_get(tty,data) ioctl(tty,TIOCGETP,data) -# define TTY_set(tty,data) ioctl(tty,TIOCSETP,data) -#endif +# if !defined(_LIBC) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) +# include +# endif -#if !defined(_LIBC) && !defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_VMS) -# include -#endif +# ifdef OPENSSL_SYS_MSDOS +# include +# endif -#ifdef OPENSSL_SYS_MSDOS -# include -#endif - -#ifdef OPENSSL_SYS_VMS -# include -# include -# include -# include +# ifdef OPENSSL_SYS_VMS +# include +# include +# include +# include struct IOSB { short iosb$w_value; short iosb$w_count; long iosb$l_info; }; -#endif +# endif -#ifndef NX509_SIG -# define NX509_SIG 32 -#endif +# ifndef NX509_SIG +# define NX509_SIG 32 +# endif /* Define globals. They are protected by a lock */ -#ifdef SIGACTION +# ifdef SIGACTION static struct sigaction savsig[NX509_SIG]; -#else +# else static void (*savsig[NX509_SIG]) (int); -#endif +# endif -#ifdef OPENSSL_SYS_VMS +# ifdef OPENSSL_SYS_VMS static struct IOSB iosb; static $DESCRIPTOR(terminal, "TT"); static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this @@ -162,26 +164,26 @@ static long tty_orig[3], tty_new[3]; /* XXX Is there any guarantee that this * structures? */ static long status; static unsigned short channel = 0; -#elif defined(_WIN32) && !defined(_WIN32_WCE) +# elif defined(_WIN32) && !defined(_WIN32_WCE) static DWORD tty_orig, tty_new; -#else -# if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) +# else +# if !defined(OPENSSL_SYS_MSDOS) || defined(__DJGPP__) static TTY_STRUCT tty_orig, tty_new; +# endif # endif -#endif static FILE *tty_in, *tty_out; static int is_a_tty; /* Declare static functions */ -#if !defined(OPENSSL_SYS_WINCE) +# if !defined(OPENSSL_SYS_WINCE) static int read_till_nl(FILE *); static void recsig(int); static void pushsig(void); static void popsig(void); -#endif -#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32) +# endif +# if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32) static int noecho_fgets(char *buf, int size, FILE *tty); -#endif +# endif static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl); static int read_string(UI *ui, UI_STRING *uis); @@ -192,34 +194,6 @@ static int echo_console(UI *ui); static int noecho_console(UI *ui); static int close_console(UI *ui); -static UI_METHOD ui_openssl = { - "OpenSSL default user interface", - open_console, - write_string, - NULL, /* No flusher is needed for command lines */ - read_string, - close_console, - NULL -}; - -static const UI_METHOD *default_UI_meth = &ui_openssl; - -void UI_set_default_method(const UI_METHOD *meth) -{ - default_UI_meth = meth; -} - -const UI_METHOD *UI_get_default_method(void) -{ - return default_UI_meth; -} - -/* The method with all the built-in thingies */ -UI_METHOD *UI_OpenSSL(void) -{ - return &ui_openssl; -} - /* * The following function makes sure that info and error strings are printed * before any prompt. @@ -232,7 +206,10 @@ static int write_string(UI *ui, UI_STRING *uis) fputs(UI_get0_output_string(uis), tty_out); fflush(tty_out); break; - default: + case UIT_NONE: + case UIT_PROMPT: + case UIT_VERIFY: + case UIT_BOOLEAN: break; } return 1; @@ -269,17 +246,19 @@ static int read_string(UI *ui, UI_STRING *uis) return 0; } break; - default: + case UIT_NONE: + case UIT_INFO: + case UIT_ERROR: break; } return 1; } -#if !defined(OPENSSL_SYS_WINCE) +# if !defined(OPENSSL_SYS_WINCE) /* Internal functions to read a string without echoing */ static int read_till_nl(FILE *in) { -# define SIZE 4 +# define SIZE 4 char buf[SIZE + 1]; do { @@ -290,7 +269,7 @@ static int read_till_nl(FILE *in) } static volatile sig_atomic_t intr_signal; -#endif +# endif static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) { @@ -298,7 +277,7 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) int ok; char result[BUFSIZ]; int maxsize = BUFSIZ - 1; -#if !defined(OPENSSL_SYS_WINCE) +# if !defined(OPENSSL_SYS_WINCE) char *p = NULL; int echo_eol = !echo; @@ -314,10 +293,10 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) ps = 2; result[0] = '\0'; -# if defined(_WIN32) +# if defined(_WIN32) if (is_a_tty) { DWORD numread; -# if defined(CP_UTF8) +# if defined(CP_UTF8) if (GetEnvironmentVariableW(L"OPENSSL_WIN32_UTF8", NULL, 0) != 0) { WCHAR wresult[BUFSIZ]; @@ -337,7 +316,7 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) OPENSSL_cleanse(wresult, sizeof(wresult)); } } else -# endif +# endif if (ReadConsoleA(GetStdHandle(STD_INPUT_HANDLE), result, maxsize, &numread, NULL)) { if (numread >= 2 && @@ -349,12 +328,12 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) p = result; } } else -# elif defined(OPENSSL_SYS_MSDOS) +# elif defined(OPENSSL_SYS_MSDOS) if (!echo) { noecho_fgets(result, maxsize, tty_in); p = result; /* FIXME: noecho_fgets doesn't return errors */ } else -# endif +# endif p = fgets(result, maxsize, tty_in); if (p == NULL) goto error; @@ -380,9 +359,9 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl) if (ps >= 1) popsig(); -#else +# else ok = 1; -#endif +# endif OPENSSL_cleanse(result, BUFSIZ); return ok; @@ -394,10 +373,10 @@ static int open_console(UI *ui) CRYPTO_THREAD_write_lock(ui->lock); is_a_tty = 1; -#if defined(OPENSSL_SYS_VXWORKS) +# if defined(OPENSSL_SYS_VXWORKS) tty_in = stdin; tty_out = stderr; -#elif defined(_WIN32) && !defined(_WIN32_WCE) +# elif defined(_WIN32) && !defined(_WIN32_WCE) if ((tty_out = fopen("conout$", "w")) == NULL) tty_out = stderr; @@ -408,35 +387,35 @@ static int open_console(UI *ui) if ((tty_in = fopen("conin$", "r")) == NULL) tty_in = stdin; } -#else -# ifdef OPENSSL_SYS_MSDOS -# define DEV_TTY "con" # else -# define DEV_TTY "/dev/tty" -# endif +# ifdef OPENSSL_SYS_MSDOS +# define DEV_TTY "con" +# else +# define DEV_TTY "/dev/tty" +# endif if ((tty_in = fopen(DEV_TTY, "r")) == NULL) tty_in = stdin; if ((tty_out = fopen(DEV_TTY, "w")) == NULL) tty_out = stderr; -#endif +# endif -#if defined(TTY_get) && !defined(OPENSSL_SYS_VMS) +# if defined(TTY_get) && !defined(OPENSSL_SYS_VMS) if (TTY_get(fileno(tty_in), &tty_orig) == -1) { -# ifdef ENOTTY +# ifdef ENOTTY if (errno == ENOTTY) is_a_tty = 0; else -# endif -# ifdef EINVAL +# endif +# ifdef EINVAL /* - * Ariel Glenn ariel@columbia.edu reports that solaris can return - * EINVAL instead. This should be ok + * Ariel Glenn reports that solaris can return EINVAL instead. + * This should be ok */ if (errno == EINVAL) is_a_tty = 0; else -# endif -# ifdef ENODEV +# endif +# ifdef ENODEV /* * MacOS X returns ENODEV (Operation not supported by device), * which seems appropriate. @@ -444,7 +423,7 @@ static int open_console(UI *ui) if (errno == ENODEV) is_a_tty = 0; else -# endif +# endif { char tmp_num[10]; BIO_snprintf(tmp_num, sizeof(tmp_num) - 1, "%d", errno); @@ -454,8 +433,8 @@ static int open_console(UI *ui) return 0; } } -#endif -#ifdef OPENSSL_SYS_VMS +# endif +# ifdef OPENSSL_SYS_VMS status = sys$assign(&terminal, &channel, 0, 0); /* if there isn't a TT device, something is very wrong */ @@ -474,22 +453,22 @@ static int open_console(UI *ui) /* If IO$_SENSEMODE doesn't work, this is not a terminal device */ if ((status != SS$_NORMAL) || (iosb.iosb$w_value != SS$_NORMAL)) is_a_tty = 0; -#endif +# endif return 1; } static int noecho_console(UI *ui) { -#ifdef TTY_FLAGS +# ifdef TTY_FLAGS memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig)); tty_new.TTY_FLAGS &= ~ECHO; -#endif +# endif -#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) +# if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) if (is_a_tty && (TTY_set(fileno(tty_in), &tty_new) == -1)) return 0; -#endif -#ifdef OPENSSL_SYS_VMS +# endif +# ifdef OPENSSL_SYS_VMS if (is_a_tty) { tty_new[0] = tty_orig[0]; tty_new[1] = tty_orig[1] | TT$M_NOECHO; @@ -509,29 +488,29 @@ static int noecho_console(UI *ui) return 0; } } -#endif -#if defined(_WIN32) && !defined(_WIN32_WCE) +# endif +# if defined(_WIN32) && !defined(_WIN32_WCE) if (is_a_tty) { tty_new = tty_orig; tty_new &= ~ENABLE_ECHO_INPUT; SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), tty_new); } -#endif +# endif return 1; } static int echo_console(UI *ui) { -#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) +# if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) memcpy(&(tty_new), &(tty_orig), sizeof(tty_orig)); tty_new.TTY_FLAGS |= ECHO; -#endif +# endif -#if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) +# if defined(TTY_set) && !defined(OPENSSL_SYS_VMS) if (is_a_tty && (TTY_set(fileno(tty_in), &tty_new) == -1)) return 0; -#endif -#ifdef OPENSSL_SYS_VMS +# endif +# ifdef OPENSSL_SYS_VMS if (is_a_tty) { tty_new[0] = tty_orig[0]; tty_new[1] = tty_orig[1] & ~TT$M_NOECHO; @@ -551,14 +530,14 @@ static int echo_console(UI *ui) return 0; } } -#endif -#if defined(_WIN32) && !defined(_WIN32_WCE) +# endif +# if defined(_WIN32) && !defined(_WIN32_WCE) if (is_a_tty) { tty_new = tty_orig; tty_new |= ENABLE_ECHO_INPUT; SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), tty_new); } -#endif +# endif return 1; } @@ -568,7 +547,7 @@ static int close_console(UI *ui) fclose(tty_in); if (tty_out != stderr) fclose(tty_out); -#ifdef OPENSSL_SYS_VMS +# ifdef OPENSSL_SYS_VMS status = sys$dassgn(channel); if (status != SS$_NORMAL) { char tmp_num[12]; @@ -578,97 +557,97 @@ static int close_console(UI *ui) ERR_add_error_data(2, "status=", tmp_num); return 0; } -#endif +# endif CRYPTO_THREAD_unlock(ui->lock); return 1; } -#if !defined(OPENSSL_SYS_WINCE) +# if !defined(OPENSSL_SYS_WINCE) /* Internal functions to handle signals and act on them */ static void pushsig(void) { -# ifndef OPENSSL_SYS_WIN32 +# ifndef OPENSSL_SYS_WIN32 int i; -# endif -# ifdef SIGACTION +# endif +# ifdef SIGACTION struct sigaction sa; memset(&sa, 0, sizeof(sa)); sa.sa_handler = recsig; -# endif +# endif -# ifdef OPENSSL_SYS_WIN32 +# ifdef OPENSSL_SYS_WIN32 savsig[SIGABRT] = signal(SIGABRT, recsig); savsig[SIGFPE] = signal(SIGFPE, recsig); savsig[SIGILL] = signal(SIGILL, recsig); savsig[SIGINT] = signal(SIGINT, recsig); savsig[SIGSEGV] = signal(SIGSEGV, recsig); savsig[SIGTERM] = signal(SIGTERM, recsig); -# else +# else for (i = 1; i < NX509_SIG; i++) { -# ifdef SIGUSR1 +# ifdef SIGUSR1 if (i == SIGUSR1) continue; -# endif -# ifdef SIGUSR2 +# endif +# ifdef SIGUSR2 if (i == SIGUSR2) continue; -# endif -# ifdef SIGKILL +# endif +# ifdef SIGKILL if (i == SIGKILL) /* We can't make any action on that. */ continue; -# endif -# ifdef SIGACTION +# endif +# ifdef SIGACTION sigaction(i, &sa, &savsig[i]); -# else +# else savsig[i] = signal(i, recsig); -# endif +# endif } -# endif +# endif -# ifdef SIGWINCH +# ifdef SIGWINCH signal(SIGWINCH, SIG_DFL); -# endif +# endif } static void popsig(void) { -# ifdef OPENSSL_SYS_WIN32 +# ifdef OPENSSL_SYS_WIN32 signal(SIGABRT, savsig[SIGABRT]); signal(SIGFPE, savsig[SIGFPE]); signal(SIGILL, savsig[SIGILL]); signal(SIGINT, savsig[SIGINT]); signal(SIGSEGV, savsig[SIGSEGV]); signal(SIGTERM, savsig[SIGTERM]); -# else +# else int i; for (i = 1; i < NX509_SIG; i++) { -# ifdef SIGUSR1 +# ifdef SIGUSR1 if (i == SIGUSR1) continue; -# endif -# ifdef SIGUSR2 +# endif +# ifdef SIGUSR2 if (i == SIGUSR2) continue; -# endif -# ifdef SIGACTION +# endif +# ifdef SIGACTION sigaction(i, &savsig[i], NULL); -# else +# else signal(i, savsig[i]); -# endif +# endif } -# endif +# endif } static void recsig(int i) { intr_signal = i; } -#endif +# endif /* Internal functions specific for Windows */ -#if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32) +# if defined(OPENSSL_SYS_MSDOS) && !defined(_WIN32) static int noecho_fgets(char *buf, int size, FILE *tty) { int i; @@ -681,11 +660,11 @@ static int noecho_fgets(char *buf, int size, FILE *tty) break; } size--; -# if defined(_WIN32) +# if defined(_WIN32) i = _getch(); -# else +# else i = getch(); -# endif +# endif if (i == '\r') i = '\n'; *(p++) = i; @@ -694,7 +673,7 @@ static int noecho_fgets(char *buf, int size, FILE *tty) break; } } -# ifdef WIN_CONSOLE_BUG +# ifdef WIN_CONSOLE_BUG /* * Win95 has several evil console bugs: one of these is that the last * character read using getch() is passed to the next read: this is @@ -706,7 +685,41 @@ static int noecho_fgets(char *buf, int size, FILE *tty) inh = GetStdHandle(STD_INPUT_HANDLE); FlushConsoleInputBuffer(inh); } -# endif - return (strlen(buf)); +# endif + return strlen(buf); } +# endif + +static UI_METHOD ui_openssl = { + "OpenSSL default user interface", + open_console, + write_string, + NULL, /* No flusher is needed for command lines */ + read_string, + close_console, + NULL +}; + +/* The method with all the built-in console thingies */ +UI_METHOD *UI_OpenSSL(void) +{ + return &ui_openssl; +} + +static const UI_METHOD *default_UI_meth = &ui_openssl; + +#else + +static const UI_METHOD *default_UI_meth = NULL; + #endif + +void UI_set_default_method(const UI_METHOD *meth) +{ + default_UI_meth = meth; +} + +const UI_METHOD *UI_get_default_method(void) +{ + return default_UI_meth; +} diff --git a/crypto/ui/ui_util.c b/crypto/ui/ui_util.c index 3b51db92..b379324f 100644 --- a/crypto/ui/ui_util.c +++ b/crypto/ui/ui_util.c @@ -8,6 +8,7 @@ */ #include +#include "internal/thread_once.h" #include "ui_locl.h" #ifndef BUFSIZ @@ -24,7 +25,7 @@ int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, UI_UTIL_read_pw(buf, buff, (length > BUFSIZ) ? BUFSIZ : length, prompt, verify); OPENSSL_cleanse(buff, BUFSIZ); - return (ret); + return ret; } int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, @@ -47,5 +48,115 @@ int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, } if (ok > 0) ok = 0; - return (ok); + return ok; +} + +/* + * Wrapper around pem_password_cb, a method to help older APIs use newer + * ones. + */ +struct pem_password_cb_data { + pem_password_cb *cb; + int rwflag; +}; + +static void ui_new_method_data(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp) +{ + /* + * Do nothing, the data is allocated externally and assigned later with + * CRYPTO_set_ex_data() + */ +} + +static int ui_dup_method_data(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp) +{ + void **pptr = (void **)from_d; + if (*pptr != NULL) + *pptr = OPENSSL_memdup(*pptr, sizeof(struct pem_password_cb_data)); + return 1; +} + +static void ui_free_method_data(void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp) +{ + OPENSSL_free(ptr); +} + +static CRYPTO_ONCE get_index_once = CRYPTO_ONCE_STATIC_INIT; +static int ui_method_data_index = -1; +DEFINE_RUN_ONCE_STATIC(ui_method_data_index_init) +{ + ui_method_data_index = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI_METHOD, + 0, NULL, ui_new_method_data, + ui_dup_method_data, + ui_free_method_data); + return 1; +} + +static int ui_open(UI *ui) +{ + return 1; +} +static int ui_read(UI *ui, UI_STRING *uis) +{ + switch (UI_get_string_type(uis)) { + case UIT_PROMPT: + { + char result[PEM_BUFSIZE + 1]; + const struct pem_password_cb_data *data = + UI_method_get_ex_data(UI_get_method(ui), ui_method_data_index); + int maxsize = UI_get_result_maxsize(uis); + int len = data->cb(result, + maxsize > PEM_BUFSIZE ? PEM_BUFSIZE : maxsize, + data->rwflag, UI_get0_user_data(ui)); + + if (len >= 0) + result[len] = '\0'; + if (len <= 0) + return len; + if (UI_set_result_ex(ui, uis, result, len) >= 0) + return 1; + return 0; + } + case UIT_VERIFY: + case UIT_NONE: + case UIT_BOOLEAN: + case UIT_INFO: + case UIT_ERROR: + break; + } + return 1; +} +static int ui_write(UI *ui, UI_STRING *uis) +{ + return 1; +} +static int ui_close(UI *ui) +{ + return 1; +} + +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag) +{ + struct pem_password_cb_data *data = NULL; + UI_METHOD *ui_method = NULL; + + if ((data = OPENSSL_zalloc(sizeof(*data))) == NULL + || (ui_method = UI_create_method("PEM password callback wrapper")) == NULL + || UI_method_set_opener(ui_method, ui_open) < 0 + || UI_method_set_reader(ui_method, ui_read) < 0 + || UI_method_set_writer(ui_method, ui_write) < 0 + || UI_method_set_closer(ui_method, ui_close) < 0 + || !RUN_ONCE(&get_index_once, ui_method_data_index_init) + || UI_method_set_ex_data(ui_method, ui_method_data_index, data) < 0) { + UI_destroy_method(ui_method); + OPENSSL_free(data); + return NULL; + } + data->rwflag = rwflag; + data->cb = cb; + + return ui_method; } diff --git a/crypto/uid.c b/crypto/uid.c index 12df8a4e..4e1890f2 100644 --- a/crypto/uid.c +++ b/crypto/uid.c @@ -10,7 +10,7 @@ #include #include -#if defined(__OpenBSD__) || (defined(__FreeBSD__) && __FreeBSD__ > 2) +#if defined(__OpenBSD__) || (defined(__FreeBSD__) && __FreeBSD__ > 2) || defined(__DragonFly__) # include OPENSSL_UNISTD @@ -19,7 +19,7 @@ int OPENSSL_issetugid(void) return issetugid(); } -#elif defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) +#elif defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_UEFI) int OPENSSL_issetugid(void) { diff --git a/crypto/whrlpool/asm/wp-mmx.pl b/crypto/whrlpool/asm/wp-mmx.pl index f63945c8..2241c6f0 100644 --- a/crypto/whrlpool/asm/wp-mmx.pl +++ b/crypto/whrlpool/asm/wp-mmx.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. Rights for redistribution and usage in source and binary # forms are granted according to the OpenSSL license. # ==================================================================== @@ -31,7 +31,7 @@ # multiplying 64 by CPU clock frequency and dividing by relevant # value from the given table: # -# $SCALE=2/8 icc8 gcc3 +# $SCALE=2/8 icc8 gcc3 # Intel P4 3200/4600 4600(*) 6400 # Intel PIII 2900/3000 4900 5400 # AMD K[78] 2500/1800 9900 8200(**) @@ -59,7 +59,7 @@ require "x86asm.pl"; $output=pop; open STDOUT,">$output"; -&asm_init($ARGV[0],"wp-mmx.pl"); +&asm_init($ARGV[0]); sub L() { &data_byte(@_); } sub LL() @@ -502,6 +502,6 @@ for($i=0;$i<8;$i++) { &L(0xca,0x2d,0xbf,0x07,0xad,0x5a,0x83,0x33); &function_end_B("whirlpool_block_mmx"); -&asm_finish(); +&asm_finish(); close STDOUT; diff --git a/crypto/whrlpool/asm/wp-x86_64.pl b/crypto/whrlpool/asm/wp-x86_64.pl index c0b21d13..fe23d8ca 100644 --- a/crypto/whrlpool/asm/wp-x86_64.pl +++ b/crypto/whrlpool/asm/wp-x86_64.pl @@ -8,7 +8,7 @@ # # ==================================================================== -# Written by Andy Polyakov for the OpenSSL +# Written by Andy Polyakov for the OpenSSL # project. Rights for redistribution and usage in source and binary # forms are granted according to the OpenSSL license. # ==================================================================== @@ -66,14 +66,22 @@ $code=<<___; .type $func,\@function,3 .align 16 $func: +.cfi_startproc + mov %rsp,%rax +.cfi_def_cfa_register %rax push %rbx +.cfi_push %rbx push %rbp +.cfi_push %rbp push %r12 +.cfi_push %r12 push %r13 +.cfi_push %r13 push %r14 +.cfi_push %r14 push %r15 +.cfi_push %r15 - mov %rsp,%r11 sub \$128+40,%rsp and \$-64,%rsp @@ -81,7 +89,8 @@ $func: mov %rdi,0(%r10) # save parameter block mov %rsi,8(%r10) mov %rdx,16(%r10) - mov %r11,32(%r10) # saved stack pointer + mov %rax,32(%r10) # saved stack pointer +.cfi_cfa_expression %rsp+`128+32`,deref,+8 .Lprologue: mov %r10,%rbx @@ -205,15 +214,24 @@ $code.=<<___; jmp .Louterloop .Lalldone: mov 32(%rbx),%rsi # restore saved pointer - mov (%rsi),%r15 - mov 8(%rsi),%r14 - mov 16(%rsi),%r13 - mov 24(%rsi),%r12 - mov 32(%rsi),%rbp - mov 40(%rsi),%rbx - lea 48(%rsi),%rsp +.cfi_def_cfa %rsi,8 + mov -48(%rsi),%r15 +.cfi_restore %r15 + mov -40(%rsi),%r14 +.cfi_restore %r14 + mov -32(%rsi),%r13 +.cfi_restore %r13 + mov -24(%rsi),%r12 +.cfi_restore %r12 + mov -16(%rsi),%rbp +.cfi_restore %rbp + mov -8(%rsi),%rbx +.cfi_restore %rbx + lea (%rsi),%rsp +.cfi_def_cfa_register %rsp .Lepilogue: ret +.cfi_endproc .size $func,.-$func .align 64 @@ -526,7 +544,6 @@ se_handler: jae .Lin_prologue mov 128+32(%rax),%rax # pull saved stack pointer - lea 48(%rax),%rax mov -8(%rax),%rbx mov -16(%rax),%rbp diff --git a/crypto/whrlpool/build.info b/crypto/whrlpool/build.info index 7f3a19ea..4b167b50 100644 --- a/crypto/whrlpool/build.info +++ b/crypto/whrlpool/build.info @@ -1,7 +1,8 @@ LIBS=../../libcrypto SOURCE[../../libcrypto]=wp_dgst.c {- $target{wp_asm_src} -} -GENERATE[wp-mmx.s]=asm/wp-mmx.pl $(PERLASM_SCHEME) $(CFLAGS) $(LIB_CFLAGS) $(PROCESSOR) +GENERATE[wp-mmx.s]=asm/wp-mmx.pl \ + $(PERLASM_SCHEME) $(LIB_CFLAGS) $(LIB_CPPFLAGS) $(PROCESSOR) DEPEND[wp-mmx.s]=../perlasm/x86asm.pl GENERATE[wp-x86_64.s]=asm/wp-x86_64.pl $(PERLASM_SCHEME) diff --git a/crypto/whrlpool/wp_block.c b/crypto/whrlpool/wp_block.c index b29f037b..0cc92a3b 100644 --- a/crypto/whrlpool/wp_block.c +++ b/crypto/whrlpool/wp_block.c @@ -10,14 +10,6 @@ /** * The Whirlpool hashing function. * - *

- * References - * - *

- * References - * - *

- * The Whirlpool algorithm was developed by - * Paulo S. L. M. Barreto and - * Vincent Rijmen. - * * See * P.S.L.M. Barreto, V. Rijmen, * ``The Whirlpool hashing function,'' @@ -67,7 +59,7 @@ int WHIRLPOOL_Init(WHIRLPOOL_CTX *c) { memset(c, 0, sizeof(*c)); - return (1); + return 1; } int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *_inp, size_t bytes) @@ -88,7 +80,7 @@ int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *_inp, size_t bytes) if (bytes) WHIRLPOOL_BitUpdate(c, inp, bytes * 8); - return (1); + return 1; } void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *_inp, size_t bits) @@ -247,9 +239,9 @@ int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c) if (md) { memcpy(md, c->H.c, WHIRLPOOL_DIGEST_LENGTH); OPENSSL_cleanse(c, sizeof(*c)); - return (1); + return 1; } - return (0); + return 0; } unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md) @@ -262,5 +254,5 @@ unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md) WHIRLPOOL_Init(&ctx); WHIRLPOOL_Update(&ctx, inp, bytes); WHIRLPOOL_Final(md, &ctx); - return (md); + return md; } diff --git a/crypto/x509/by_dir.c b/crypto/x509/by_dir.c index 21672a7e..f64cf384 100644 --- a/crypto/x509/by_dir.c +++ b/crypto/x509/by_dir.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,19 +7,17 @@ * https://www.openssl.org/source/license.html */ +#include "e_os.h" +#include "internal/cryptlib.h" #include #include #include #include -#include "internal/cryptlib.h" - #ifndef OPENSSL_NO_POSIX_IO # include #endif - -#include #include #include "internal/x509_int.h" #include "x509_lcl.h" @@ -63,7 +61,7 @@ static X509_LOOKUP_METHOD x509_dir_lookup = { X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void) { - return (&x509_dir_lookup); + return &x509_dir_lookup; } static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, @@ -91,7 +89,7 @@ static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl, ret = add_cert_dir(ld, argp, (int)argl); break; } - return (ret); + return ret; } static int new_dir(X509_LOOKUP *lu) @@ -150,7 +148,9 @@ static void free_dir(X509_LOOKUP *lu) static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) { - const char *s, *p; + int j; + size_t len; + const char *s, *ss, *p; if (dir == NULL || !*dir) { X509err(X509_F_ADD_CERT_DIR, X509_R_INVALID_DIRECTORY); @@ -162,17 +162,14 @@ static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) do { if ((*p == LIST_SEPARATOR_CHAR) || (*p == '\0')) { BY_DIR_ENTRY *ent; - int j; - size_t len; - const char *ss = s; + ss = s; s = p + 1; len = p - ss; if (len == 0) continue; for (j = 0; j < sk_BY_DIR_ENTRY_num(ctx->dirs); j++) { ent = sk_BY_DIR_ENTRY_value(ctx->dirs, j); - if (strlen(ent->dir) == len && - strncmp(ent->dir, ss, len) == 0) + if (strlen(ent->dir) == len && strncmp(ent->dir, ss, len) == 0) break; } if (j < sk_BY_DIR_ENTRY_num(ctx->dirs)) @@ -219,7 +216,7 @@ static int get_cert_by_subject(X509_LOOKUP *xl, X509_LOOKUP_TYPE type, const char *postfix = ""; if (name == NULL) - return (0); + return 0; stmp.type = type; if (type == X509_LU_X509) { @@ -371,6 +368,13 @@ static int get_cert_by_subject(X509_LOOKUP *xl, X509_LOOKUP_TYPE type, ok = 1; ret->type = tmp->type; memcpy(&ret->data, &tmp->data, sizeof(ret->data)); + + /* + * Clear any errors that might have been raised processing empty + * or malformed files. + */ + ERR_clear_error(); + /* * If we were going to up the reference count, we would need to * do it on a perl 'type' basis @@ -382,5 +386,5 @@ static int get_cert_by_subject(X509_LOOKUP *xl, X509_LOOKUP_TYPE type, } finish: BUF_MEM_free(b); - return (ok); + return ok; } diff --git a/crypto/x509/by_file.c b/crypto/x509/by_file.c index 0bcc6af3..52955b6a 100644 --- a/crypto/x509/by_file.c +++ b/crypto/x509/by_file.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include @@ -35,7 +34,7 @@ static X509_LOOKUP_METHOD x509_file_lookup = { X509_LOOKUP_METHOD *X509_LOOKUP_file(void) { - return (&x509_file_lookup); + return &x509_file_lookup; } static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, @@ -69,7 +68,7 @@ static int by_file_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, } break; } - return (ok); + return ok; } int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) @@ -79,8 +78,6 @@ int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) int i, count = 0; X509 *x = NULL; - if (file == NULL) - return (1); in = BIO_new(BIO_s_file()); if ((in == NULL) || (BIO_read_filename(in, file) <= 0)) { @@ -123,10 +120,12 @@ int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type) X509err(X509_F_X509_LOAD_CERT_FILE, X509_R_BAD_X509_FILETYPE); goto err; } + if (ret == 0) + X509err(X509_F_X509_LOAD_CERT_FILE, X509_R_NO_CERTIFICATE_FOUND); err: X509_free(x); BIO_free(in); - return (ret); + return ret; } int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type) @@ -136,8 +135,6 @@ int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type) int i, count = 0; X509_CRL *x = NULL; - if (file == NULL) - return (1); in = BIO_new(BIO_s_file()); if ((in == NULL) || (BIO_read_filename(in, file) <= 0)) { @@ -180,10 +177,12 @@ int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type) X509err(X509_F_X509_LOAD_CRL_FILE, X509_R_BAD_X509_FILETYPE); goto err; } + if (ret == 0) + X509err(X509_F_X509_LOAD_CRL_FILE, X509_R_NO_CRL_FOUND); err: X509_CRL_free(x); BIO_free(in); - return (ret); + return ret; } int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type) @@ -192,6 +191,7 @@ int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type) X509_INFO *itmp; BIO *in; int i, count = 0; + if (type != X509_FILETYPE_PEM) return X509_load_cert_file(ctx, file, type); in = BIO_new_file(file, "r"); @@ -208,14 +208,20 @@ int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type) for (i = 0; i < sk_X509_INFO_num(inf); i++) { itmp = sk_X509_INFO_value(inf, i); if (itmp->x509) { - X509_STORE_add_cert(ctx->store_ctx, itmp->x509); + if (!X509_STORE_add_cert(ctx->store_ctx, itmp->x509)) + goto err; count++; } if (itmp->crl) { - X509_STORE_add_crl(ctx->store_ctx, itmp->crl); + if (!X509_STORE_add_crl(ctx->store_ctx, itmp->crl)) + goto err; count++; } } + if (count == 0) + X509err(X509_F_X509_LOAD_CERT_CRL_FILE, + X509_R_NO_CERTIFICATE_OR_CRL_FOUND); + err: sk_X509_INFO_pop_free(inf, X509_INFO_free); return count; } diff --git a/crypto/x509/t_crl.c b/crypto/x509/t_crl.c index f3ca6db8..8e262912 100644 --- a/crypto/x509/t_crl.c +++ b/crypto/x509/t_crl.c @@ -23,16 +23,21 @@ int X509_CRL_print_fp(FILE *fp, X509_CRL *x) if ((b = BIO_new(BIO_s_file())) == NULL) { X509err(X509_F_X509_CRL_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = X509_CRL_print(b, x); BIO_free(b); - return (ret); + return ret; } #endif int X509_CRL_print(BIO *out, X509_CRL *x) +{ + return X509_CRL_print_ex(out, x, XN_FLAG_COMPAT); +} + +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag) { STACK_OF(X509_REVOKED) *rev; X509_REVOKED *r; @@ -40,7 +45,6 @@ int X509_CRL_print(BIO *out, X509_CRL *x) const ASN1_BIT_STRING *sig; long l; int i; - char *p; BIO_printf(out, "Certificate Revocation List (CRL):\n"); l = X509_CRL_get_version(x); @@ -49,10 +53,11 @@ int X509_CRL_print(BIO *out, X509_CRL *x) else BIO_printf(out, "%8sVersion unknown (%ld)\n", "", l); X509_CRL_get0_signature(x, &sig, &sig_alg); + BIO_puts(out, " "); X509_signature_print(out, sig_alg, NULL); - p = X509_NAME_oneline(X509_CRL_get_issuer(x), NULL, 0); - BIO_printf(out, "%8sIssuer: %s\n", "", p); - OPENSSL_free(p); + BIO_printf(out, "%8sIssuer: ", ""); + X509_NAME_print_ex(out, X509_CRL_get_issuer(x), 0, nmflag); + BIO_puts(out, "\n"); BIO_printf(out, "%8sLast Update: ", ""); ASN1_TIME_print(out, X509_CRL_get0_lastUpdate(x)); BIO_printf(out, "\n%8sNext Update: ", ""); diff --git a/crypto/x509/t_req.c b/crypto/x509/t_req.c index 77ce8108..2d4c591b 100644 --- a/crypto/x509/t_req.c +++ b/crypto/x509/t_req.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,12 +25,12 @@ int X509_REQ_print_fp(FILE *fp, X509_REQ *x) if ((b = BIO_new(BIO_s_file())) == NULL) { X509err(X509_F_X509_REQ_PRINT_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = X509_REQ_print(b, x); BIO_free(b); - return (ret); + return ret; } #endif @@ -93,10 +93,12 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, pkey = X509_REQ_get0_pubkey(x); if (pkey == NULL) { - BIO_printf(bp, "%12sUnable to load Public Key\n", ""); + if (BIO_printf(bp, "%12sUnable to load Public Key\n", "") <= 0) + goto err; ERR_print_errors(bp); } else { - EVP_PKEY_print_public(bp, pkey, 16, NULL); + if (EVP_PKEY_print_public(bp, pkey, 16, NULL) <= 0) + goto err; } } @@ -135,16 +137,22 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, goto err; if (BIO_puts(bp, ":") <= 0) goto err; - if ((type == V_ASN1_PRINTABLESTRING) || - (type == V_ASN1_T61STRING) || - (type == V_ASN1_UTF8STRING) || - (type == V_ASN1_IA5STRING)) { + switch (type) { + case V_ASN1_PRINTABLESTRING: + case V_ASN1_T61STRING: + case V_ASN1_NUMERICSTRING: + case V_ASN1_UTF8STRING: + case V_ASN1_IA5STRING: if (BIO_write(bp, (char *)bs->data, bs->length) - != bs->length) + != bs->length) goto err; - BIO_puts(bp, "\n"); - } else { - BIO_puts(bp, "unable to print attribute\n"); + if (BIO_puts(bp, "\n") <= 0) + goto err; + break; + default: + if (BIO_puts(bp, "unable to print attribute\n") <= 0) + goto err; + break; } if (++ii < count) goto get_next; @@ -154,7 +162,8 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, if (!(cflag & X509_FLAG_NO_EXTENSIONS)) { exts = X509_REQ_get_extensions(x); if (exts) { - BIO_printf(bp, "%8sRequested Extensions:\n", ""); + if (BIO_printf(bp, "%8sRequested Extensions:\n", "") <= 0) + goto err; for (i = 0; i < sk_X509_EXTENSION_num(exts); i++) { ASN1_OBJECT *obj; X509_EXTENSION *ex; @@ -163,13 +172,16 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, if (BIO_printf(bp, "%12s", "") <= 0) goto err; obj = X509_EXTENSION_get_object(ex); - i2a_ASN1_OBJECT(bp, obj); + if (i2a_ASN1_OBJECT(bp, obj) <= 0) + goto err; critical = X509_EXTENSION_get_critical(ex); if (BIO_printf(bp, ": %s\n", critical ? "critical" : "") <= 0) goto err; if (!X509V3_EXT_print(bp, ex, cflag, 16)) { - BIO_printf(bp, "%16s", ""); - ASN1_STRING_print(bp, X509_EXTENSION_get_data(ex)); + if (BIO_printf(bp, "%16s", "") <= 0 + || ASN1_STRING_print(bp, + X509_EXTENSION_get_data(ex)) <= 0) + goto err; } if (BIO_write(bp, "\n", 1) <= 0) goto err; @@ -186,10 +198,10 @@ int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflags, goto err; } - return (1); + return 1; err: X509err(X509_F_X509_REQ_PRINT_EX, ERR_R_BUF_LIB); - return (0); + return 0; } int X509_REQ_print(BIO *bp, X509_REQ *x) diff --git a/crypto/x509/t_x509.c b/crypto/x509/t_x509.c index c7ced67f..ccacbe7c 100644 --- a/crypto/x509/t_x509.c +++ b/crypto/x509/t_x509.c @@ -30,12 +30,12 @@ int X509_print_ex_fp(FILE *fp, X509 *x, unsigned long nmflag, if ((b = BIO_new(BIO_s_file())) == NULL) { X509err(X509_F_X509_PRINT_EX_FP, ERR_R_BUF_LIB); - return (0); + return 0; } BIO_set_fp(b, fp, BIO_NOCLOSE); ret = X509_print_ex(b, x, nmflag, cflag); BIO_free(b); - return (ret); + return ret; } #endif @@ -119,6 +119,9 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, if (!(cflag & X509_FLAG_NO_SIGNAME)) { const X509_ALGOR *tsig_alg = X509_get0_tbs_sigalg(x); + + if (BIO_puts(bp, " ") <= 0) + goto err; if (X509_signature_print(bp, tsig_alg, NULL) <= 0) goto err; } @@ -212,7 +215,7 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, ret = 1; err: OPENSSL_free(m); - return (ret); + return ret; } int X509_ocspid_print(BIO *bp, X509 *x) @@ -266,10 +269,10 @@ int X509_ocspid_print(BIO *bp, X509 *x) } BIO_printf(bp, "\n"); - return (1); + return 1; err: OPENSSL_free(der); - return (0); + return 0; } int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent) diff --git a/crypto/x509/x509_att.c b/crypto/x509/x509_att.c index 836bca50..63895efe 100644 --- a/crypto/x509/x509_att.c +++ b/crypto/x509/x509_att.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,7 @@ #include #include "internal/cryptlib.h" -#include +#include #include #include #include @@ -28,8 +28,8 @@ int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, const ASN1_OBJECT *obj = OBJ_nid2obj(nid); if (obj == NULL) - return (-2); - return (X509at_get_attr_by_OBJ(x, obj, lastpos)); + return -2; + return X509at_get_attr_by_OBJ(x, obj, lastpos); } int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, @@ -39,7 +39,7 @@ int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, X509_ATTRIBUTE *ex; if (sk == NULL) - return (-1); + return -1; lastpos++; if (lastpos < 0) lastpos = 0; @@ -47,17 +47,17 @@ int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, for (; lastpos < n; lastpos++) { ex = sk_X509_ATTRIBUTE_value(sk, lastpos); if (OBJ_cmp(ex->object, obj) == 0) - return (lastpos); + return lastpos; } - return (-1); + return -1; } X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc) { if (x == NULL || sk_X509_ATTRIBUTE_num(x) <= loc || loc < 0) return NULL; - else - return sk_X509_ATTRIBUTE_value(x, loc); + + return sk_X509_ATTRIBUTE_value(x, loc); } X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc) @@ -65,9 +65,9 @@ X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc) X509_ATTRIBUTE *ret; if (x == NULL || sk_X509_ATTRIBUTE_num(x) <= loc || loc < 0) - return (NULL); + return NULL; ret = sk_X509_ATTRIBUTE_delete(x, loc); - return (ret); + return ret; } STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, @@ -93,13 +93,13 @@ STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, goto err; if (*x == NULL) *x = sk; - return (sk); + return sk; err: X509err(X509_F_X509AT_ADD1_ATTR, ERR_R_MALLOC_FAILURE); err2: X509_ATTRIBUTE_free(new_attr); sk_X509_ATTRIBUTE_free(sk); - return (NULL); + return NULL; } STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) @@ -175,12 +175,12 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, obj = OBJ_nid2obj(nid); if (obj == NULL) { X509err(X509_F_X509_ATTRIBUTE_CREATE_BY_NID, X509_R_UNKNOWN_NID); - return (NULL); + return NULL; } ret = X509_ATTRIBUTE_create_by_OBJ(attr, obj, atrtype, data, len); if (ret == NULL) ASN1_OBJECT_free(obj); - return (ret); + return ret; } X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, @@ -194,7 +194,7 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, if ((ret = X509_ATTRIBUTE_new()) == NULL) { X509err(X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } else ret = *attr; @@ -206,11 +206,11 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, if ((attr != NULL) && (*attr == NULL)) *attr = ret; - return (ret); + return ret; err: if ((attr == NULL) || (ret != *attr)) X509_ATTRIBUTE_free(ret); - return (NULL); + return NULL; } X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, @@ -226,7 +226,7 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, X509err(X509_F_X509_ATTRIBUTE_CREATE_BY_TXT, X509_R_INVALID_FIELD_NAME); ERR_add_error_data(2, "name=", atrname); - return (NULL); + return NULL; } nattr = X509_ATTRIBUTE_create_by_OBJ(attr, obj, type, bytes, len); ASN1_OBJECT_free(obj); @@ -236,7 +236,7 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj) { if ((attr == NULL) || (obj == NULL)) - return (0); + return 0; ASN1_OBJECT_free(attr->object); attr->object = OBJ_dup(obj); return attr->object != NULL; @@ -303,8 +303,8 @@ int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr) ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr) { if (attr == NULL) - return (NULL); - return (attr->object); + return NULL; + return attr->object; } void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, diff --git a/crypto/x509/x509_cmp.c b/crypto/x509/x509_cmp.c index 01056356..3d4931be 100644 --- a/crypto/x509/x509_cmp.c +++ b/crypto/x509/x509_cmp.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,6 @@ */ #include -#include #include "internal/cryptlib.h" #include #include @@ -25,8 +24,8 @@ int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b) bi = &b->cert_info; i = ASN1_INTEGER_cmp(&ai->serialNumber, &bi->serialNumber); if (i) - return (i); - return (X509_NAME_cmp(ai->issuer, bi->issuer)); + return i; + return X509_NAME_cmp(ai->issuer, bi->issuer); } #ifndef OPENSSL_NO_MD5 @@ -56,23 +55,23 @@ unsigned long X509_issuer_and_serial_hash(X509 *a) ) & 0xffffffffL; err: EVP_MD_CTX_free(ctx); - return (ret); + return ret; } #endif int X509_issuer_name_cmp(const X509 *a, const X509 *b) { - return (X509_NAME_cmp(a->cert_info.issuer, b->cert_info.issuer)); + return X509_NAME_cmp(a->cert_info.issuer, b->cert_info.issuer); } int X509_subject_name_cmp(const X509 *a, const X509 *b) { - return (X509_NAME_cmp(a->cert_info.subject, b->cert_info.subject)); + return X509_NAME_cmp(a->cert_info.subject, b->cert_info.subject); } int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b) { - return (X509_NAME_cmp(a->crl.issuer, b->crl.issuer)); + return X509_NAME_cmp(a->crl.issuer, b->crl.issuer); } int X509_CRL_match(const X509_CRL *a, const X509_CRL *b) @@ -82,24 +81,24 @@ int X509_CRL_match(const X509_CRL *a, const X509_CRL *b) X509_NAME *X509_get_issuer_name(const X509 *a) { - return (a->cert_info.issuer); + return a->cert_info.issuer; } unsigned long X509_issuer_name_hash(X509 *x) { - return (X509_NAME_hash(x->cert_info.issuer)); + return X509_NAME_hash(x->cert_info.issuer); } #ifndef OPENSSL_NO_MD5 unsigned long X509_issuer_name_hash_old(X509 *x) { - return (X509_NAME_hash_old(x->cert_info.issuer)); + return X509_NAME_hash_old(x->cert_info.issuer); } #endif X509_NAME *X509_get_subject_name(const X509 *a) { - return (a->cert_info.subject); + return a->cert_info.subject; } ASN1_INTEGER *X509_get_serialNumber(X509 *a) @@ -114,13 +113,13 @@ const ASN1_INTEGER *X509_get0_serialNumber(const X509 *a) unsigned long X509_subject_name_hash(X509 *x) { - return (X509_NAME_hash(x->cert_info.subject)); + return X509_NAME_hash(x->cert_info.subject); } #ifndef OPENSSL_NO_MD5 unsigned long X509_subject_name_hash_old(X509 *x) { - return (X509_NAME_hash_old(x->cert_info.subject)); + return X509_NAME_hash_old(x->cert_info.subject); } #endif @@ -195,7 +194,7 @@ unsigned long X509_NAME_hash(X509_NAME *x) ret = (((unsigned long)md[0]) | ((unsigned long)md[1] << 8L) | ((unsigned long)md[2] << 16L) | ((unsigned long)md[3] << 24L) ) & 0xffffffffL; - return (ret); + return ret; } #ifndef OPENSSL_NO_MD5 @@ -224,7 +223,7 @@ unsigned long X509_NAME_hash_old(X509_NAME *x) ) & 0xffffffffL; EVP_MD_CTX_free(md_ctx); - return (ret); + return ret; } #endif @@ -244,9 +243,9 @@ X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, for (i = 0; i < sk_X509_num(sk); i++) { x509 = sk_X509_value(sk, i); if (X509_issuer_and_serial_cmp(x509, &x) == 0) - return (x509); + return x509; } - return (NULL); + return NULL; } X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name) @@ -257,9 +256,9 @@ X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name) for (i = 0; i < sk_X509_num(sk); i++) { x509 = sk_X509_value(sk, i); if (X509_NAME_cmp(X509_get_subject_name(x509), name) == 0) - return (x509); + return x509; } - return (NULL); + return NULL; } EVP_PKEY *X509_get0_pubkey(const X509 *x) diff --git a/crypto/x509/x509_d2.c b/crypto/x509/x509_d2.c index cb03dbfa..099ffda1 100644 --- a/crypto/x509/x509_d2.c +++ b/crypto/x509/x509_d2.c @@ -18,18 +18,18 @@ int X509_STORE_set_default_paths(X509_STORE *ctx) lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_file()); if (lookup == NULL) - return (0); + return 0; X509_LOOKUP_load_file(lookup, NULL, X509_FILETYPE_DEFAULT); lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_hash_dir()); if (lookup == NULL) - return (0); + return 0; X509_LOOKUP_add_dir(lookup, NULL, X509_FILETYPE_DEFAULT); /* clear any errors */ ERR_clear_error(); - return (1); + return 1; } int X509_STORE_load_locations(X509_STORE *ctx, const char *file, @@ -40,18 +40,18 @@ int X509_STORE_load_locations(X509_STORE *ctx, const char *file, if (file != NULL) { lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_file()); if (lookup == NULL) - return (0); + return 0; if (X509_LOOKUP_load_file(lookup, file, X509_FILETYPE_PEM) != 1) - return (0); + return 0; } if (path != NULL) { lookup = X509_STORE_add_lookup(ctx, X509_LOOKUP_hash_dir()); if (lookup == NULL) - return (0); + return 0; if (X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) != 1) - return (0); + return 0; } if ((path == NULL) && (file == NULL)) - return (0); - return (1); + return 0; + return 1; } diff --git a/crypto/x509/x509_def.c b/crypto/x509/x509_def.c index d11358e3..bfa8d7d8 100644 --- a/crypto/x509/x509_def.c +++ b/crypto/x509/x509_def.c @@ -14,30 +14,30 @@ const char *X509_get_default_private_dir(void) { - return (X509_PRIVATE_DIR); + return X509_PRIVATE_DIR; } const char *X509_get_default_cert_area(void) { - return (X509_CERT_AREA); + return X509_CERT_AREA; } const char *X509_get_default_cert_dir(void) { - return (X509_CERT_DIR); + return X509_CERT_DIR; } const char *X509_get_default_cert_file(void) { - return (X509_CERT_FILE); + return X509_CERT_FILE; } const char *X509_get_default_cert_dir_env(void) { - return (X509_CERT_DIR_EVP); + return X509_CERT_DIR_EVP; } const char *X509_get_default_cert_file_env(void) { - return (X509_CERT_FILE_EVP); + return X509_CERT_FILE_EVP; } diff --git a/crypto/x509/x509_err.c b/crypto/x509/x509_err.c index 3f4b8ef0..84c726f4 100644 --- a/crypto/x509/x509_err.c +++ b/crypto/x509/x509_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,122 +8,148 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509,0,reason) - -static ERR_STRING_DATA X509_str_functs[] = { - {ERR_FUNC(X509_F_ADD_CERT_DIR), "add_cert_dir"}, - {ERR_FUNC(X509_F_BUILD_CHAIN), "build_chain"}, - {ERR_FUNC(X509_F_BY_FILE_CTRL), "by_file_ctrl"}, - {ERR_FUNC(X509_F_CHECK_NAME_CONSTRAINTS), "check_name_constraints"}, - {ERR_FUNC(X509_F_CHECK_POLICY), "check_policy"}, - {ERR_FUNC(X509_F_DANE_I2D), "dane_i2d"}, - {ERR_FUNC(X509_F_DIR_CTRL), "dir_ctrl"}, - {ERR_FUNC(X509_F_GET_CERT_BY_SUBJECT), "get_cert_by_subject"}, - {ERR_FUNC(X509_F_NETSCAPE_SPKI_B64_DECODE), "NETSCAPE_SPKI_b64_decode"}, - {ERR_FUNC(X509_F_NETSCAPE_SPKI_B64_ENCODE), "NETSCAPE_SPKI_b64_encode"}, - {ERR_FUNC(X509_F_X509AT_ADD1_ATTR), "X509at_add1_attr"}, - {ERR_FUNC(X509_F_X509V3_ADD_EXT), "X509v3_add_ext"}, - {ERR_FUNC(X509_F_X509_ATTRIBUTE_CREATE_BY_NID), +static const ERR_STRING_DATA X509_str_functs[] = { + {ERR_PACK(ERR_LIB_X509, X509_F_ADD_CERT_DIR, 0), "add_cert_dir"}, + {ERR_PACK(ERR_LIB_X509, X509_F_BUILD_CHAIN, 0), "build_chain"}, + {ERR_PACK(ERR_LIB_X509, X509_F_BY_FILE_CTRL, 0), "by_file_ctrl"}, + {ERR_PACK(ERR_LIB_X509, X509_F_CHECK_NAME_CONSTRAINTS, 0), + "check_name_constraints"}, + {ERR_PACK(ERR_LIB_X509, X509_F_CHECK_POLICY, 0), "check_policy"}, + {ERR_PACK(ERR_LIB_X509, X509_F_DANE_I2D, 0), "dane_i2d"}, + {ERR_PACK(ERR_LIB_X509, X509_F_DIR_CTRL, 0), "dir_ctrl"}, + {ERR_PACK(ERR_LIB_X509, X509_F_GET_CERT_BY_SUBJECT, 0), + "get_cert_by_subject"}, + {ERR_PACK(ERR_LIB_X509, X509_F_NETSCAPE_SPKI_B64_DECODE, 0), + "NETSCAPE_SPKI_b64_decode"}, + {ERR_PACK(ERR_LIB_X509, X509_F_NETSCAPE_SPKI_B64_ENCODE, 0), + "NETSCAPE_SPKI_b64_encode"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509AT_ADD1_ATTR, 0), "X509at_add1_attr"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509V3_ADD_EXT, 0), "X509v3_add_ext"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_CREATE_BY_NID, 0), "X509_ATTRIBUTE_create_by_NID"}, - {ERR_FUNC(X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ, 0), "X509_ATTRIBUTE_create_by_OBJ"}, - {ERR_FUNC(X509_F_X509_ATTRIBUTE_CREATE_BY_TXT), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_CREATE_BY_TXT, 0), "X509_ATTRIBUTE_create_by_txt"}, - {ERR_FUNC(X509_F_X509_ATTRIBUTE_GET0_DATA), "X509_ATTRIBUTE_get0_data"}, - {ERR_FUNC(X509_F_X509_ATTRIBUTE_SET1_DATA), "X509_ATTRIBUTE_set1_data"}, - {ERR_FUNC(X509_F_X509_CHECK_PRIVATE_KEY), "X509_check_private_key"}, - {ERR_FUNC(X509_F_X509_CRL_DIFF), "X509_CRL_diff"}, - {ERR_FUNC(X509_F_X509_CRL_PRINT_FP), "X509_CRL_print_fp"}, - {ERR_FUNC(X509_F_X509_EXTENSION_CREATE_BY_NID), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_GET0_DATA, 0), + "X509_ATTRIBUTE_get0_data"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_ATTRIBUTE_SET1_DATA, 0), + "X509_ATTRIBUTE_set1_data"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_CHECK_PRIVATE_KEY, 0), + "X509_check_private_key"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_DIFF, 0), "X509_CRL_diff"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_CRL_PRINT_FP, 0), "X509_CRL_print_fp"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_EXTENSION_CREATE_BY_NID, 0), "X509_EXTENSION_create_by_NID"}, - {ERR_FUNC(X509_F_X509_EXTENSION_CREATE_BY_OBJ), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_EXTENSION_CREATE_BY_OBJ, 0), "X509_EXTENSION_create_by_OBJ"}, - {ERR_FUNC(X509_F_X509_GET_PUBKEY_PARAMETERS), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_GET_PUBKEY_PARAMETERS, 0), "X509_get_pubkey_parameters"}, - {ERR_FUNC(X509_F_X509_LOAD_CERT_CRL_FILE), "X509_load_cert_crl_file"}, - {ERR_FUNC(X509_F_X509_LOAD_CERT_FILE), "X509_load_cert_file"}, - {ERR_FUNC(X509_F_X509_LOAD_CRL_FILE), "X509_load_crl_file"}, - {ERR_FUNC(X509_F_X509_NAME_ADD_ENTRY), "X509_NAME_add_entry"}, - {ERR_FUNC(X509_F_X509_NAME_ENTRY_CREATE_BY_NID), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_LOAD_CERT_CRL_FILE, 0), + "X509_load_cert_crl_file"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_LOAD_CERT_FILE, 0), + "X509_load_cert_file"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_LOAD_CRL_FILE, 0), + "X509_load_crl_file"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ADD_ENTRY, 0), + "X509_NAME_add_entry"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_CREATE_BY_NID, 0), "X509_NAME_ENTRY_create_by_NID"}, - {ERR_FUNC(X509_F_X509_NAME_ENTRY_CREATE_BY_TXT), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_CREATE_BY_TXT, 0), "X509_NAME_ENTRY_create_by_txt"}, - {ERR_FUNC(X509_F_X509_NAME_ENTRY_SET_OBJECT), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ENTRY_SET_OBJECT, 0), "X509_NAME_ENTRY_set_object"}, - {ERR_FUNC(X509_F_X509_NAME_ONELINE), "X509_NAME_oneline"}, - {ERR_FUNC(X509_F_X509_NAME_PRINT), "X509_NAME_print"}, - {ERR_FUNC(X509_F_X509_OBJECT_NEW), "X509_OBJECT_new"}, - {ERR_FUNC(X509_F_X509_PRINT_EX_FP), "X509_print_ex_fp"}, - {ERR_FUNC(X509_F_X509_PUBKEY_DECODE), "x509_pubkey_decode"}, - {ERR_FUNC(X509_F_X509_PUBKEY_GET0), "X509_PUBKEY_get0"}, - {ERR_FUNC(X509_F_X509_PUBKEY_SET), "X509_PUBKEY_set"}, - {ERR_FUNC(X509_F_X509_REQ_CHECK_PRIVATE_KEY), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_ONELINE, 0), "X509_NAME_oneline"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_NAME_PRINT, 0), "X509_NAME_print"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_OBJECT_NEW, 0), "X509_OBJECT_new"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_PRINT_EX_FP, 0), "X509_print_ex_fp"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_DECODE, 0), + "x509_pubkey_decode"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_GET0, 0), "X509_PUBKEY_get0"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_SET, 0), "X509_PUBKEY_set"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_CHECK_PRIVATE_KEY, 0), "X509_REQ_check_private_key"}, - {ERR_FUNC(X509_F_X509_REQ_PRINT_EX), "X509_REQ_print_ex"}, - {ERR_FUNC(X509_F_X509_REQ_PRINT_FP), "X509_REQ_print_fp"}, - {ERR_FUNC(X509_F_X509_REQ_TO_X509), "X509_REQ_to_X509"}, - {ERR_FUNC(X509_F_X509_STORE_ADD_CERT), "X509_STORE_add_cert"}, - {ERR_FUNC(X509_F_X509_STORE_ADD_CRL), "X509_STORE_add_crl"}, - {ERR_FUNC(X509_F_X509_STORE_CTX_GET1_ISSUER), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_PRINT_EX, 0), "X509_REQ_print_ex"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_PRINT_FP, 0), "X509_REQ_print_fp"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_TO_X509, 0), "X509_REQ_to_X509"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_ADD_CERT, 0), + "X509_STORE_add_cert"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_ADD_CRL, 0), + "X509_STORE_add_crl"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_GET1_ISSUER, 0), "X509_STORE_CTX_get1_issuer"}, - {ERR_FUNC(X509_F_X509_STORE_CTX_INIT), "X509_STORE_CTX_init"}, - {ERR_FUNC(X509_F_X509_STORE_CTX_NEW), "X509_STORE_CTX_new"}, - {ERR_FUNC(X509_F_X509_STORE_CTX_PURPOSE_INHERIT), + {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_INIT, 0), + "X509_STORE_CTX_init"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_NEW, 0), + "X509_STORE_CTX_new"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_STORE_CTX_PURPOSE_INHERIT, 0), "X509_STORE_CTX_purpose_inherit"}, - {ERR_FUNC(X509_F_X509_TO_X509_REQ), "X509_to_X509_REQ"}, - {ERR_FUNC(X509_F_X509_TRUST_ADD), "X509_TRUST_add"}, - {ERR_FUNC(X509_F_X509_TRUST_SET), "X509_TRUST_set"}, - {ERR_FUNC(X509_F_X509_VERIFY_CERT), "X509_verify_cert"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_TO_X509_REQ, 0), "X509_to_X509_REQ"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_TRUST_ADD, 0), "X509_TRUST_add"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_TRUST_SET, 0), "X509_TRUST_set"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_VERIFY_CERT, 0), "X509_verify_cert"}, {0, NULL} }; -static ERR_STRING_DATA X509_str_reasons[] = { - {ERR_REASON(X509_R_AKID_MISMATCH), "akid mismatch"}, - {ERR_REASON(X509_R_BAD_SELECTOR), "bad selector"}, - {ERR_REASON(X509_R_BAD_X509_FILETYPE), "bad x509 filetype"}, - {ERR_REASON(X509_R_BASE64_DECODE_ERROR), "base64 decode error"}, - {ERR_REASON(X509_R_CANT_CHECK_DH_KEY), "cant check dh key"}, - {ERR_REASON(X509_R_CERT_ALREADY_IN_HASH_TABLE), - "cert already in hash table"}, - {ERR_REASON(X509_R_CRL_ALREADY_DELTA), "crl already delta"}, - {ERR_REASON(X509_R_CRL_VERIFY_FAILURE), "crl verify failure"}, - {ERR_REASON(X509_R_IDP_MISMATCH), "idp mismatch"}, - {ERR_REASON(X509_R_INVALID_DIRECTORY), "invalid directory"}, - {ERR_REASON(X509_R_INVALID_FIELD_NAME), "invalid field name"}, - {ERR_REASON(X509_R_INVALID_TRUST), "invalid trust"}, - {ERR_REASON(X509_R_ISSUER_MISMATCH), "issuer mismatch"}, - {ERR_REASON(X509_R_KEY_TYPE_MISMATCH), "key type mismatch"}, - {ERR_REASON(X509_R_KEY_VALUES_MISMATCH), "key values mismatch"}, - {ERR_REASON(X509_R_LOADING_CERT_DIR), "loading cert dir"}, - {ERR_REASON(X509_R_LOADING_DEFAULTS), "loading defaults"}, - {ERR_REASON(X509_R_METHOD_NOT_SUPPORTED), "method not supported"}, - {ERR_REASON(X509_R_NAME_TOO_LONG), "name too long"}, - {ERR_REASON(X509_R_NEWER_CRL_NOT_NEWER), "newer crl not newer"}, - {ERR_REASON(X509_R_NO_CERT_SET_FOR_US_TO_VERIFY), - "no cert set for us to verify"}, - {ERR_REASON(X509_R_NO_CRL_NUMBER), "no crl number"}, - {ERR_REASON(X509_R_PUBLIC_KEY_DECODE_ERROR), "public key decode error"}, - {ERR_REASON(X509_R_PUBLIC_KEY_ENCODE_ERROR), "public key encode error"}, - {ERR_REASON(X509_R_SHOULD_RETRY), "should retry"}, - {ERR_REASON(X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN), - "unable to find parameters in chain"}, - {ERR_REASON(X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY), - "unable to get certs public key"}, - {ERR_REASON(X509_R_UNKNOWN_KEY_TYPE), "unknown key type"}, - {ERR_REASON(X509_R_UNKNOWN_NID), "unknown nid"}, - {ERR_REASON(X509_R_UNKNOWN_PURPOSE_ID), "unknown purpose id"}, - {ERR_REASON(X509_R_UNKNOWN_TRUST_ID), "unknown trust id"}, - {ERR_REASON(X509_R_UNSUPPORTED_ALGORITHM), "unsupported algorithm"}, - {ERR_REASON(X509_R_WRONG_LOOKUP_TYPE), "wrong lookup type"}, - {ERR_REASON(X509_R_WRONG_TYPE), "wrong type"}, +static const ERR_STRING_DATA X509_str_reasons[] = { + {ERR_PACK(ERR_LIB_X509, 0, X509_R_AKID_MISMATCH), "akid mismatch"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_BAD_SELECTOR), "bad selector"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_BAD_X509_FILETYPE), "bad x509 filetype"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_BASE64_DECODE_ERROR), + "base64 decode error"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_CANT_CHECK_DH_KEY), "cant check dh key"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_CERT_ALREADY_IN_HASH_TABLE), + "cert already in hash table"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_CRL_ALREADY_DELTA), "crl already delta"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_CRL_VERIFY_FAILURE), + "crl verify failure"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_IDP_MISMATCH), "idp mismatch"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_DIRECTORY), "invalid directory"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_FIELD_NAME), + "invalid field name"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_INVALID_TRUST), "invalid trust"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_ISSUER_MISMATCH), "issuer mismatch"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_KEY_TYPE_MISMATCH), "key type mismatch"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_KEY_VALUES_MISMATCH), + "key values mismatch"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_LOADING_CERT_DIR), "loading cert dir"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_LOADING_DEFAULTS), "loading defaults"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_METHOD_NOT_SUPPORTED), + "method not supported"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NAME_TOO_LONG), "name too long"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NEWER_CRL_NOT_NEWER), + "newer crl not newer"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CERTIFICATE_FOUND), + "no certificate found"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CERTIFICATE_OR_CRL_FOUND), + "no certificate or crl found"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CERT_SET_FOR_US_TO_VERIFY), + "no cert set for us to verify"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CRL_FOUND), "no crl found"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_NO_CRL_NUMBER), "no crl number"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_PUBLIC_KEY_DECODE_ERROR), + "public key decode error"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_PUBLIC_KEY_ENCODE_ERROR), + "public key encode error"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_SHOULD_RETRY), "should retry"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN), + "unable to find parameters in chain"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY), + "unable to get certs public key"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_KEY_TYPE), "unknown key type"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_NID), "unknown nid"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_PURPOSE_ID), + "unknown purpose id"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNKNOWN_TRUST_ID), "unknown trust id"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_UNSUPPORTED_ALGORITHM), + "unsupported algorithm"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_WRONG_LOOKUP_TYPE), "wrong lookup type"}, + {ERR_PACK(ERR_LIB_X509, 0, X509_R_WRONG_TYPE), "wrong type"}, {0, NULL} }; @@ -132,10 +158,9 @@ static ERR_STRING_DATA X509_str_reasons[] = { int ERR_load_X509_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(X509_str_functs[0].error) == NULL) { - ERR_load_strings(0, X509_str_functs); - ERR_load_strings(0, X509_str_reasons); + ERR_load_strings_const(X509_str_functs); + ERR_load_strings_const(X509_str_reasons); } #endif return 1; diff --git a/crypto/x509/x509_ext.c b/crypto/x509/x509_ext.c index 3c590798..2db84376 100644 --- a/crypto/x509/x509_ext.c +++ b/crypto/x509/x509_ext.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include @@ -19,33 +18,33 @@ int X509_CRL_get_ext_count(const X509_CRL *x) { - return (X509v3_get_ext_count(x->crl.extensions)); + return X509v3_get_ext_count(x->crl.extensions); } int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos) { - return (X509v3_get_ext_by_NID(x->crl.extensions, nid, lastpos)); + return X509v3_get_ext_by_NID(x->crl.extensions, nid, lastpos); } int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, int lastpos) { - return (X509v3_get_ext_by_OBJ(x->crl.extensions, obj, lastpos)); + return X509v3_get_ext_by_OBJ(x->crl.extensions, obj, lastpos); } int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos) { - return (X509v3_get_ext_by_critical(x->crl.extensions, crit, lastpos)); + return X509v3_get_ext_by_critical(x->crl.extensions, crit, lastpos); } X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc) { - return (X509v3_get_ext(x->crl.extensions, loc)); + return X509v3_get_ext(x->crl.extensions, loc); } X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc) { - return (X509v3_delete_ext(x->crl.extensions, loc)); + return X509v3_delete_ext(x->crl.extensions, loc); } void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx) @@ -66,17 +65,17 @@ int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc) int X509_get_ext_count(const X509 *x) { - return (X509v3_get_ext_count(x->cert_info.extensions)); + return X509v3_get_ext_count(x->cert_info.extensions); } int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos) { - return (X509v3_get_ext_by_NID(x->cert_info.extensions, nid, lastpos)); + return X509v3_get_ext_by_NID(x->cert_info.extensions, nid, lastpos); } int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos) { - return (X509v3_get_ext_by_OBJ(x->cert_info.extensions, obj, lastpos)); + return X509v3_get_ext_by_OBJ(x->cert_info.extensions, obj, lastpos); } int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos) @@ -87,12 +86,12 @@ int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos) X509_EXTENSION *X509_get_ext(const X509 *x, int loc) { - return (X509v3_get_ext(x->cert_info.extensions, loc)); + return X509v3_get_ext(x->cert_info.extensions, loc); } X509_EXTENSION *X509_delete_ext(X509 *x, int loc) { - return (X509v3_delete_ext(x->cert_info.extensions, loc)); + return X509v3_delete_ext(x->cert_info.extensions, loc); } int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc) @@ -114,33 +113,33 @@ int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, int X509_REVOKED_get_ext_count(const X509_REVOKED *x) { - return (X509v3_get_ext_count(x->extensions)); + return X509v3_get_ext_count(x->extensions); } int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos) { - return (X509v3_get_ext_by_NID(x->extensions, nid, lastpos)); + return X509v3_get_ext_by_NID(x->extensions, nid, lastpos); } int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, int lastpos) { - return (X509v3_get_ext_by_OBJ(x->extensions, obj, lastpos)); + return X509v3_get_ext_by_OBJ(x->extensions, obj, lastpos); } int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, int lastpos) { - return (X509v3_get_ext_by_critical(x->extensions, crit, lastpos)); + return X509v3_get_ext_by_critical(x->extensions, crit, lastpos); } X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc) { - return (X509v3_get_ext(x->extensions, loc)); + return X509v3_get_ext(x->extensions, loc); } X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc) { - return (X509v3_delete_ext(x->extensions, loc)); + return X509v3_delete_ext(x->extensions, loc); } int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc) diff --git a/crypto/x509/x509_lcl.h b/crypto/x509/x509_lcl.h index 40bd102f..401f2e9f 100644 --- a/crypto/x509/x509_lcl.h +++ b/crypto/x509/x509_lcl.h @@ -7,6 +7,8 @@ * https://www.openssl.org/source/license.html */ +#include "internal/refcount.h" + /* * This structure holds all parameters associated with a verify operation by * including an X509_VERIFY_PARAM structure in related structures the @@ -130,7 +132,7 @@ struct x509_store_st { STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm); int (*cleanup) (X509_STORE_CTX *ctx); CRYPTO_EX_DATA ex_data; - int references; + CRYPTO_REF_COUNT references; CRYPTO_RWLOCK *lock; }; @@ -140,3 +142,6 @@ DEFINE_STACK_OF(BY_DIR_HASH) DEFINE_STACK_OF(BY_DIR_ENTRY) typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY; DEFINE_STACK_OF(STACK_OF_X509_NAME_ENTRY) + +void x509_set_signature_info(X509_SIG_INFO *siginf, const X509_ALGOR *alg, + const ASN1_STRING *sig); diff --git a/crypto/x509/x509_lu.c b/crypto/x509/x509_lu.c index 90f23520..b8845f1e 100644 --- a/crypto/x509/x509_lu.c +++ b/crypto/x509/x509_lu.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,7 @@ #include #include "internal/cryptlib.h" -#include +#include "internal/refcount.h" #include #include "internal/x509_int.h" #include @@ -132,7 +132,7 @@ static int x509_object_cmp(const X509_OBJECT *const *a, case X509_LU_CRL: ret = X509_CRL_cmp((*a)->data.crl, (*b)->data.crl); break; - default: + case X509_LU_NONE: /* abort(); */ return 0; } @@ -181,7 +181,7 @@ void X509_STORE_free(X509_STORE *vfy) if (vfy == NULL) return; - CRYPTO_atomic_add(&vfy->references, -1, &i, vfy->lock); + CRYPTO_DOWN_REF(&vfy->references, &i, vfy->lock); REF_PRINT_COUNT("X509_STORE", vfy); if (i > 0) return; @@ -206,7 +206,7 @@ int X509_STORE_up_ref(X509_STORE *vfy) { int i; - if (CRYPTO_atomic_add(&vfy->references, 1, &i, vfy->lock) <= 0) + if (CRYPTO_UP_REF(&vfy->references, &i, vfy->lock) <= 0) return 0; REF_PRINT_COUNT("X509_STORE", a); @@ -290,26 +290,29 @@ int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, return 1; } -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x) -{ +static int x509_store_add(X509_STORE *ctx, void *x, int crl) { X509_OBJECT *obj; - int ret = 1, added = 1; + int ret = 0, added = 0; if (x == NULL) return 0; obj = X509_OBJECT_new(); if (obj == NULL) return 0; - obj->type = X509_LU_X509; - obj->data.x509 = x; + + if (crl) { + obj->type = X509_LU_CRL; + obj->data.crl = (X509_CRL *)x; + } else { + obj->type = X509_LU_X509; + obj->data.x509 = (X509 *)x; + } X509_OBJECT_up_ref_count(obj); CRYPTO_THREAD_write_lock(ctx->lock); if (X509_OBJECT_retrieve_match(ctx->objs, obj)) { - X509err(X509_F_X509_STORE_ADD_CERT, - X509_R_CERT_ALREADY_IN_HASH_TABLE); - ret = 0; + ret = 1; } else { added = sk_X509_OBJECT_push(ctx->objs, obj); ret = added != 0; @@ -317,52 +320,34 @@ int X509_STORE_add_cert(X509_STORE *ctx, X509 *x) CRYPTO_THREAD_unlock(ctx->lock); - if (!ret) /* obj not pushed */ + if (added == 0) /* obj not pushed */ X509_OBJECT_free(obj); - if (!added) /* on push failure */ - X509err(X509_F_X509_STORE_ADD_CERT, ERR_R_MALLOC_FAILURE); return ret; } +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x) +{ + if (!x509_store_add(ctx, x, 0)) { + X509err(X509_F_X509_STORE_ADD_CERT, ERR_R_MALLOC_FAILURE); + return 0; + } + return 1; +} + int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x) { - X509_OBJECT *obj; - int ret = 1, added = 1; - - if (x == NULL) - return 0; - obj = X509_OBJECT_new(); - if (obj == NULL) - return 0; - obj->type = X509_LU_CRL; - obj->data.crl = x; - X509_OBJECT_up_ref_count(obj); - - CRYPTO_THREAD_write_lock(ctx->lock); - - if (X509_OBJECT_retrieve_match(ctx->objs, obj)) { - X509err(X509_F_X509_STORE_ADD_CRL, X509_R_CERT_ALREADY_IN_HASH_TABLE); - ret = 0; - } else { - added = sk_X509_OBJECT_push(ctx->objs, obj); - ret = added != 0; - } - - CRYPTO_THREAD_unlock(ctx->lock); - - if (!ret) /* obj not pushed */ - X509_OBJECT_free(obj); - if (!added) /* on push failure */ + if (!x509_store_add(ctx, x, 1)) { X509err(X509_F_X509_STORE_ADD_CRL, ERR_R_MALLOC_FAILURE); - - return ret; + return 0; + } + return 1; } int X509_OBJECT_up_ref_count(X509_OBJECT *a) { switch (a->type) { - default: + case X509_LU_NONE: break; case X509_LU_X509: return X509_up_ref(a->data.x509); @@ -409,7 +394,7 @@ void X509_OBJECT_free(X509_OBJECT *a) if (a == NULL) return; switch (a->type) { - default: + case X509_LU_NONE: break; case X509_LU_X509: X509_free(a->data.x509); @@ -439,7 +424,7 @@ static int x509_object_idx_cnt(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, stmp.data.crl = &crl_s; crl_s.crl.issuer = name; break; - default: + case X509_LU_NONE: /* abort(); */ return -1; } diff --git a/crypto/x509/x509_obj.c b/crypto/x509/x509_obj.c index 55dc778b..85c39415 100644 --- a/crypto/x509/x509_obj.c +++ b/crypto/x509/x509_obj.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include @@ -173,10 +172,10 @@ char *X509_NAME_oneline(const X509_NAME *a, char *buf, int len) p = buf; if (i == 0) *p = '\0'; - return (p); + return p; err: X509err(X509_F_X509_NAME_ONELINE, ERR_R_MALLOC_FAILURE); end: BUF_MEM_free(b); - return (NULL); + return NULL; } diff --git a/crypto/x509/x509_req.c b/crypto/x509/x509_req.c index 7b88dbcd..0bdbb81d 100644 --- a/crypto/x509/x509_req.c +++ b/crypto/x509/x509_req.c @@ -54,24 +54,24 @@ X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md) if (!X509_REQ_sign(ret, pkey, md)) goto err; } - return (ret); + return ret; err: X509_REQ_free(ret); - return (NULL); + return NULL; } EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req) { if (req == NULL) - return (NULL); - return (X509_PUBKEY_get(req->req_info.pubkey)); + return NULL; + return X509_PUBKEY_get(req->req_info.pubkey); } EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req) { if (req == NULL) return NULL; - return (X509_PUBKEY_get0(req->req_info.pubkey)); + return X509_PUBKEY_get0(req->req_info.pubkey); } X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req) @@ -115,7 +115,7 @@ int X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k) } EVP_PKEY_free(xk); - return (ok); + return ok; } /* @@ -158,7 +158,7 @@ STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req) const unsigned char *p; if ((req == NULL) || !ext_nids) - return (NULL); + return NULL; for (pnid = ext_nids; *pnid != NID_undef; pnid++) { idx = X509_REQ_get_attr_by_NID(req, *pnid, -1); if (idx == -1) diff --git a/crypto/x509/x509_set.c b/crypto/x509/x509_set.c index c0ea4188..3ab6bf35 100644 --- a/crypto/x509/x509_set.c +++ b/crypto/x509/x509_set.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,26 +9,30 @@ #include #include "internal/cryptlib.h" +#include "internal/refcount.h" #include #include #include #include +#include +#include "internal/asn1_int.h" #include "internal/x509_int.h" +#include "x509_lcl.h" int X509_set_version(X509 *x, long version) { if (x == NULL) - return (0); + return 0; if (version == 0) { ASN1_INTEGER_free(x->cert_info.version); x->cert_info.version = NULL; - return (1); + return 1; } if (x->cert_info.version == NULL) { if ((x->cert_info.version = ASN1_INTEGER_new()) == NULL) - return (0); + return 0; } - return (ASN1_INTEGER_set(x->cert_info.version, version)); + return ASN1_INTEGER_set(x->cert_info.version, version); } int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial) @@ -46,15 +50,15 @@ int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial) int X509_set_issuer_name(X509 *x, X509_NAME *name) { if (x == NULL) - return (0); - return (X509_NAME_set(&x->cert_info.issuer, name)); + return 0; + return X509_NAME_set(&x->cert_info.issuer, name); } int X509_set_subject_name(X509 *x, X509_NAME *name) { if (x == NULL) - return (0); - return (X509_NAME_set(&x->cert_info.subject, name)); + return 0; + return X509_NAME_set(&x->cert_info.subject, name); } int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm) @@ -88,15 +92,15 @@ int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm) int X509_set_pubkey(X509 *x, EVP_PKEY *pkey) { if (x == NULL) - return (0); - return (X509_PUBKEY_set(&(x->cert_info.key), pkey)); + return 0; + return X509_PUBKEY_set(&(x->cert_info.key), pkey); } int X509_up_ref(X509 *x) { int i; - if (CRYPTO_atomic_add(&x->references, 1, &i, x->lock) <= 0) + if (CRYPTO_UP_REF(&x->references, &i, x->lock) <= 0) return 0; REF_PRINT_COUNT("X509", x); @@ -157,3 +161,77 @@ const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x) { return &x->cert_info.signature; } + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags) +{ + if (mdnid != NULL) + *mdnid = siginf->mdnid; + if (pknid != NULL) + *pknid = siginf->pknid; + if (secbits != NULL) + *secbits = siginf->secbits; + if (flags != NULL) + *flags = siginf->flags; + return (siginf->flags & X509_SIG_INFO_VALID) != 0; +} + +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags) +{ + siginf->mdnid = mdnid; + siginf->pknid = pknid; + siginf->secbits = secbits; + siginf->flags = flags; +} + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags) +{ + X509_check_purpose(x, -1, -1); + return X509_SIG_INFO_get(&x->siginf, mdnid, pknid, secbits, flags); +} + +static void x509_sig_info_init(X509_SIG_INFO *siginf, const X509_ALGOR *alg, + const ASN1_STRING *sig) +{ + int pknid, mdnid; + const EVP_MD *md; + + siginf->mdnid = NID_undef; + siginf->pknid = NID_undef; + siginf->secbits = -1; + siginf->flags = 0; + if (!OBJ_find_sigid_algs(OBJ_obj2nid(alg->algorithm), &mdnid, &pknid) + || pknid == NID_undef) + return; + siginf->pknid = pknid; + if (mdnid == NID_undef) { + /* If we have one, use a custom handler for this algorithm */ + const EVP_PKEY_ASN1_METHOD *ameth = EVP_PKEY_asn1_find(NULL, pknid); + if (ameth == NULL || ameth->siginf_set == NULL + || ameth->siginf_set(siginf, alg, sig) == 0) + return; + siginf->flags |= X509_SIG_INFO_VALID; + return; + } + siginf->flags |= X509_SIG_INFO_VALID; + siginf->mdnid = mdnid; + md = EVP_get_digestbynid(mdnid); + if (md == NULL) + return; + /* Security bits: half number of bits in digest */ + siginf->secbits = EVP_MD_size(md) * 4; + switch (mdnid) { + case NID_sha1: + case NID_sha256: + case NID_sha384: + case NID_sha512: + siginf->flags |= X509_SIG_INFO_TLS; + } +} + +void x509_init_sig_info(X509 *x) +{ + x509_sig_info_init(&x->siginf, &x->sig_alg, &x->signature); +} diff --git a/crypto/x509/x509_txt.c b/crypto/x509/x509_txt.c index 66e5fcd0..4755b39e 100644 --- a/crypto/x509/x509_txt.c +++ b/crypto/x509/x509_txt.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include @@ -23,155 +22,161 @@ const char *X509_verify_cert_error_string(long n) { switch ((int)n) { case X509_V_OK: - return ("ok"); + return "ok"; case X509_V_ERR_UNSPECIFIED: - return ("unspecified certificate verification error"); + return "unspecified certificate verification error"; case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: - return ("unable to get issuer certificate"); + return "unable to get issuer certificate"; case X509_V_ERR_UNABLE_TO_GET_CRL: - return ("unable to get certificate CRL"); + return "unable to get certificate CRL"; case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: - return ("unable to decrypt certificate's signature"); + return "unable to decrypt certificate's signature"; case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: - return ("unable to decrypt CRL's signature"); + return "unable to decrypt CRL's signature"; case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: - return ("unable to decode issuer public key"); + return "unable to decode issuer public key"; case X509_V_ERR_CERT_SIGNATURE_FAILURE: - return ("certificate signature failure"); + return "certificate signature failure"; case X509_V_ERR_CRL_SIGNATURE_FAILURE: - return ("CRL signature failure"); + return "CRL signature failure"; case X509_V_ERR_CERT_NOT_YET_VALID: - return ("certificate is not yet valid"); + return "certificate is not yet valid"; case X509_V_ERR_CERT_HAS_EXPIRED: - return ("certificate has expired"); + return "certificate has expired"; case X509_V_ERR_CRL_NOT_YET_VALID: - return ("CRL is not yet valid"); + return "CRL is not yet valid"; case X509_V_ERR_CRL_HAS_EXPIRED: - return ("CRL has expired"); + return "CRL has expired"; case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: - return ("format error in certificate's notBefore field"); + return "format error in certificate's notBefore field"; case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: - return ("format error in certificate's notAfter field"); + return "format error in certificate's notAfter field"; case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: - return ("format error in CRL's lastUpdate field"); + return "format error in CRL's lastUpdate field"; case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: - return ("format error in CRL's nextUpdate field"); + return "format error in CRL's nextUpdate field"; case X509_V_ERR_OUT_OF_MEM: - return ("out of memory"); + return "out of memory"; case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: - return ("self signed certificate"); + return "self signed certificate"; case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: - return ("self signed certificate in certificate chain"); + return "self signed certificate in certificate chain"; case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: - return ("unable to get local issuer certificate"); + return "unable to get local issuer certificate"; case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: - return ("unable to verify the first certificate"); + return "unable to verify the first certificate"; case X509_V_ERR_CERT_CHAIN_TOO_LONG: - return ("certificate chain too long"); + return "certificate chain too long"; case X509_V_ERR_CERT_REVOKED: - return ("certificate revoked"); + return "certificate revoked"; case X509_V_ERR_INVALID_CA: - return ("invalid CA certificate"); + return "invalid CA certificate"; case X509_V_ERR_PATH_LENGTH_EXCEEDED: - return ("path length constraint exceeded"); + return "path length constraint exceeded"; case X509_V_ERR_INVALID_PURPOSE: - return ("unsupported certificate purpose"); + return "unsupported certificate purpose"; case X509_V_ERR_CERT_UNTRUSTED: - return ("certificate not trusted"); + return "certificate not trusted"; case X509_V_ERR_CERT_REJECTED: - return ("certificate rejected"); + return "certificate rejected"; case X509_V_ERR_SUBJECT_ISSUER_MISMATCH: - return ("subject issuer mismatch"); + return "subject issuer mismatch"; case X509_V_ERR_AKID_SKID_MISMATCH: - return ("authority and subject key identifier mismatch"); + return "authority and subject key identifier mismatch"; case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: - return ("authority and issuer serial number mismatch"); + return "authority and issuer serial number mismatch"; case X509_V_ERR_KEYUSAGE_NO_CERTSIGN: - return ("key usage does not include certificate signing"); + return "key usage does not include certificate signing"; case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: - return ("unable to get CRL issuer certificate"); + return "unable to get CRL issuer certificate"; case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: - return ("unhandled critical extension"); + return "unhandled critical extension"; case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN: - return ("key usage does not include CRL signing"); + return "key usage does not include CRL signing"; case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION: - return ("unhandled critical CRL extension"); + return "unhandled critical CRL extension"; case X509_V_ERR_INVALID_NON_CA: - return ("invalid non-CA certificate (has CA markings)"); + return "invalid non-CA certificate (has CA markings)"; case X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED: - return ("proxy path length constraint exceeded"); + return "proxy path length constraint exceeded"; case X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE: - return ("key usage does not include digital signature"); + return "key usage does not include digital signature"; case X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED: return - ("proxy certificates not allowed, please set the appropriate flag"); + "proxy certificates not allowed, please set the appropriate flag"; case X509_V_ERR_INVALID_EXTENSION: - return ("invalid or inconsistent certificate extension"); + return "invalid or inconsistent certificate extension"; case X509_V_ERR_INVALID_POLICY_EXTENSION: - return ("invalid or inconsistent certificate policy extension"); + return "invalid or inconsistent certificate policy extension"; case X509_V_ERR_NO_EXPLICIT_POLICY: - return ("no explicit policy"); + return "no explicit policy"; case X509_V_ERR_DIFFERENT_CRL_SCOPE: - return ("Different CRL scope"); + return "Different CRL scope"; case X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: - return ("Unsupported extension feature"); + return "Unsupported extension feature"; case X509_V_ERR_UNNESTED_RESOURCE: - return ("RFC 3779 resource not subset of parent's resources"); + return "RFC 3779 resource not subset of parent's resources"; case X509_V_ERR_PERMITTED_VIOLATION: - return ("permitted subtree violation"); + return "permitted subtree violation"; case X509_V_ERR_EXCLUDED_VIOLATION: - return ("excluded subtree violation"); + return "excluded subtree violation"; case X509_V_ERR_SUBTREE_MINMAX: - return ("name constraints minimum and maximum not supported"); + return "name constraints minimum and maximum not supported"; case X509_V_ERR_APPLICATION_VERIFICATION: - return ("application verification failure"); + return "application verification failure"; case X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE: - return ("unsupported name constraint type"); + return "unsupported name constraint type"; case X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX: - return ("unsupported or invalid name constraint syntax"); + return "unsupported or invalid name constraint syntax"; case X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: - return ("unsupported or invalid name syntax"); + return "unsupported or invalid name syntax"; case X509_V_ERR_CRL_PATH_VALIDATION_ERROR: - return ("CRL path validation error"); + return "CRL path validation error"; case X509_V_ERR_PATH_LOOP: - return ("Path Loop"); + return "Path Loop"; case X509_V_ERR_SUITE_B_INVALID_VERSION: - return ("Suite B: certificate version invalid"); + return "Suite B: certificate version invalid"; case X509_V_ERR_SUITE_B_INVALID_ALGORITHM: - return ("Suite B: invalid public key algorithm"); + return "Suite B: invalid public key algorithm"; case X509_V_ERR_SUITE_B_INVALID_CURVE: - return ("Suite B: invalid ECC curve"); + return "Suite B: invalid ECC curve"; case X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM: - return ("Suite B: invalid signature algorithm"); + return "Suite B: invalid signature algorithm"; case X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED: - return ("Suite B: curve not allowed for this LOS"); + return "Suite B: curve not allowed for this LOS"; case X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256: - return ("Suite B: cannot sign P-384 with P-256"); + return "Suite B: cannot sign P-384 with P-256"; case X509_V_ERR_HOSTNAME_MISMATCH: - return ("Hostname mismatch"); + return "Hostname mismatch"; case X509_V_ERR_EMAIL_MISMATCH: - return ("Email address mismatch"); + return "Email address mismatch"; case X509_V_ERR_IP_ADDRESS_MISMATCH: - return ("IP address mismatch"); + return "IP address mismatch"; case X509_V_ERR_DANE_NO_MATCH: - return ("No matching DANE TLSA records"); + return "No matching DANE TLSA records"; case X509_V_ERR_EE_KEY_TOO_SMALL: - return ("EE certificate key too weak"); + return "EE certificate key too weak"; case X509_V_ERR_CA_KEY_TOO_SMALL: - return ("CA certificate key too weak"); + return "CA certificate key too weak"; case X509_V_ERR_CA_MD_TOO_WEAK: - return ("CA signature digest algorithm too weak"); + return "CA signature digest algorithm too weak"; case X509_V_ERR_INVALID_CALL: - return ("Invalid certificate verification context"); + return "Invalid certificate verification context"; case X509_V_ERR_STORE_LOOKUP: - return ("Issuer certificate lookup error"); + return "Issuer certificate lookup error"; case X509_V_ERR_NO_VALID_SCTS: - return ("Certificate Transparency required, but no valid SCTs found"); + return "Certificate Transparency required, but no valid SCTs found"; case X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION: - return ("proxy subject name violation"); + return "proxy subject name violation"; + case X509_V_ERR_OCSP_VERIFY_NEEDED: + return "OCSP verification needed"; + case X509_V_ERR_OCSP_VERIFY_FAILED: + return "OCSP verification failed"; + case X509_V_ERR_OCSP_CERT_UNKNOWN: + return "OCSP unknown cert"; default: /* Printing an error number into a static buffer is not thread-safe */ - return ("unknown certificate verification error"); + return "unknown certificate verification error"; } } diff --git a/crypto/x509/x509_v3.c b/crypto/x509/x509_v3.c index 19016bb1..75ae767d 100644 --- a/crypto/x509/x509_v3.c +++ b/crypto/x509/x509_v3.c @@ -9,7 +9,7 @@ #include #include "internal/cryptlib.h" -#include +#include #include #include #include @@ -20,8 +20,8 @@ int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x) { if (x == NULL) - return (0); - return (sk_X509_EXTENSION_num(x)); + return 0; + return sk_X509_EXTENSION_num(x); } int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid, @@ -31,8 +31,8 @@ int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, int nid, obj = OBJ_nid2obj(nid); if (obj == NULL) - return (-2); - return (X509v3_get_ext_by_OBJ(x, obj, lastpos)); + return -2; + return X509v3_get_ext_by_OBJ(x, obj, lastpos); } int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *sk, @@ -42,7 +42,7 @@ int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *sk, X509_EXTENSION *ex; if (sk == NULL) - return (-1); + return -1; lastpos++; if (lastpos < 0) lastpos = 0; @@ -50,9 +50,9 @@ int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *sk, for (; lastpos < n; lastpos++) { ex = sk_X509_EXTENSION_value(sk, lastpos); if (OBJ_cmp(ex->object, obj) == 0) - return (lastpos); + return lastpos; } - return (-1); + return -1; } int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit, @@ -62,7 +62,7 @@ int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit, X509_EXTENSION *ex; if (sk == NULL) - return (-1); + return -1; lastpos++; if (lastpos < 0) lastpos = 0; @@ -70,9 +70,9 @@ int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *sk, int crit, for (; lastpos < n; lastpos++) { ex = sk_X509_EXTENSION_value(sk, lastpos); if (((ex->critical > 0) && crit) || ((ex->critical <= 0) && !crit)) - return (lastpos); + return lastpos; } - return (-1); + return -1; } X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc) @@ -88,9 +88,9 @@ X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc) X509_EXTENSION *ret; if (x == NULL || sk_X509_EXTENSION_num(x) <= loc || loc < 0) - return (NULL); + return NULL; ret = sk_X509_EXTENSION_delete(x, loc); - return (ret); + return ret; } STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, @@ -123,14 +123,14 @@ STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, goto err; if (*x == NULL) *x = sk; - return (sk); + return sk; err: X509err(X509_F_X509V3_ADD_EXT, ERR_R_MALLOC_FAILURE); err2: X509_EXTENSION_free(new_ex); if (x != NULL && *x == NULL) sk_X509_EXTENSION_free(sk); - return (NULL); + return NULL; } X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, int nid, @@ -143,12 +143,12 @@ X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, int nid, obj = OBJ_nid2obj(nid); if (obj == NULL) { X509err(X509_F_X509_EXTENSION_CREATE_BY_NID, X509_R_UNKNOWN_NID); - return (NULL); + return NULL; } ret = X509_EXTENSION_create_by_OBJ(ex, obj, crit, data); if (ret == NULL) ASN1_OBJECT_free(obj); - return (ret); + return ret; } X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, @@ -161,7 +161,7 @@ X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, if ((ret = X509_EXTENSION_new()) == NULL) { X509err(X509_F_X509_EXTENSION_CREATE_BY_OBJ, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } } else ret = *ex; @@ -175,17 +175,17 @@ X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, if ((ex != NULL) && (*ex == NULL)) *ex = ret; - return (ret); + return ret; err: if ((ex == NULL) || (ret != *ex)) X509_EXTENSION_free(ret); - return (NULL); + return NULL; } int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj) { if ((ex == NULL) || (obj == NULL)) - return (0); + return 0; ASN1_OBJECT_free(ex->object); ex->object = OBJ_dup(obj); return ex->object != NULL; @@ -194,9 +194,9 @@ int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj) int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit) { if (ex == NULL) - return (0); + return 0; ex->critical = (crit) ? 0xFF : -1; - return (1); + return 1; } int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data) @@ -204,31 +204,31 @@ int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data) int i; if (ex == NULL) - return (0); + return 0; i = ASN1_OCTET_STRING_set(&ex->value, data->data, data->length); if (!i) - return (0); - return (1); + return 0; + return 1; } ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex) { if (ex == NULL) - return (NULL); - return (ex->object); + return NULL; + return ex->object; } ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ex) { if (ex == NULL) - return (NULL); + return NULL; return &ex->value; } int X509_EXTENSION_get_critical(const X509_EXTENSION *ex) { if (ex == NULL) - return (0); + return 0; if (ex->critical > 0) return 1; return 0; diff --git a/crypto/x509/x509_vfy.c b/crypto/x509/x509_vfy.c index 3018c69a..9ebda1bb 100644 --- a/crypto/x509/x509_vfy.c +++ b/crypto/x509/x509_vfy.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,17 +12,17 @@ #include #include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include -#include #include #include #include #include #include #include -#include -#include +#include "internal/dane.h" +#include "internal/x509_int.h" #include "x509_lcl.h" /* CRL score values */ @@ -1756,119 +1756,67 @@ int X509_cmp_current_time(const ASN1_TIME *ctm) int X509_cmp_time(const ASN1_TIME *ctm, time_t *cmp_time) { - char *str; - ASN1_TIME atm; - long offset; - char buff1[24], buff2[24], *p; - int i, j, remaining; + static const size_t utctime_length = sizeof("YYMMDDHHMMSSZ") - 1; + static const size_t generalizedtime_length = sizeof("YYYYMMDDHHMMSSZ") - 1; + ASN1_TIME *asn1_cmp_time = NULL; + int i, day, sec, ret = 0; - p = buff1; - remaining = ctm->length; - str = (char *)ctm->data; /* - * Note that the following (historical) code allows much more slack in the - * time format than RFC5280. In RFC5280, the representation is fixed: + * Note that ASN.1 allows much more slack in the time format than RFC5280. + * In RFC5280, the representation is fixed: * UTCTime: YYMMDDHHMMSSZ * GeneralizedTime: YYYYMMDDHHMMSSZ + * + * We do NOT currently enforce the following RFC 5280 requirement: + * "CAs conforming to this profile MUST always encode certificate + * validity dates through the year 2049 as UTCTime; certificate validity + * dates in 2050 or later MUST be encoded as GeneralizedTime." */ - if (ctm->type == V_ASN1_UTCTIME) { - /* YYMMDDHHMM[SS]Z or YYMMDDHHMM[SS](+-)hhmm */ - int min_length = sizeof("YYMMDDHHMMZ") - 1; - int max_length = sizeof("YYMMDDHHMMSS+hhmm") - 1; - if (remaining < min_length || remaining > max_length) + switch (ctm->type) { + case V_ASN1_UTCTIME: + if (ctm->length != (int)(utctime_length)) return 0; - memcpy(p, str, 10); - p += 10; - str += 10; - remaining -= 10; - } else { - /* YYYYMMDDHHMM[SS[.fff]]Z or YYYYMMDDHHMM[SS[.f[f[f]]]](+-)hhmm */ - int min_length = sizeof("YYYYMMDDHHMMZ") - 1; - int max_length = sizeof("YYYYMMDDHHMMSS.fff+hhmm") - 1; - if (remaining < min_length || remaining > max_length) + break; + case V_ASN1_GENERALIZEDTIME: + if (ctm->length != (int)(generalizedtime_length)) return 0; - memcpy(p, str, 12); - p += 12; - str += 12; - remaining -= 12; - } - - if ((*str == 'Z') || (*str == '-') || (*str == '+')) { - *(p++) = '0'; - *(p++) = '0'; - } else { - /* SS (seconds) */ - if (remaining < 2) - return 0; - *(p++) = *(str++); - *(p++) = *(str++); - remaining -= 2; - /* - * Skip any (up to three) fractional seconds... - * TODO(emilia): in RFC5280, fractional seconds are forbidden. - * Can we just kill them altogether? - */ - if (remaining && *str == '.') { - str++; - remaining--; - for (i = 0; i < 3 && remaining; i++, str++, remaining--) { - if (*str < '0' || *str > '9') - break; - } - } - - } - *(p++) = 'Z'; - *(p++) = '\0'; - - /* We now need either a terminating 'Z' or an offset. */ - if (!remaining) + break; + default: return 0; - if (*str == 'Z') { - if (remaining != 1) - return 0; - offset = 0; - } else { - /* (+-)HHMM */ - if ((*str != '+') && (*str != '-')) - return 0; - /* Historical behaviour: the (+-)hhmm offset is forbidden in RFC5280. */ - if (remaining != 5) - return 0; - if (str[1] < '0' || str[1] > '9' || str[2] < '0' || str[2] > '9' || - str[3] < '0' || str[3] > '9' || str[4] < '0' || str[4] > '9') - return 0; - offset = ((str[1] - '0') * 10 + (str[2] - '0')) * 60; - offset += (str[3] - '0') * 10 + (str[4] - '0'); - if (*str == '-') - offset = -offset; } - atm.type = ctm->type; - atm.flags = 0; - atm.length = sizeof(buff2); - atm.data = (unsigned char *)buff2; - if (X509_time_adj(&atm, offset * 60, cmp_time) == NULL) + /** + * Verify the format: the ASN.1 functions we use below allow a more + * flexible format than what's mandated by RFC 5280. + * Digit and date ranges will be verified in the conversion methods. + */ + for (i = 0; i < ctm->length - 1; i++) { + if (!ossl_isdigit(ctm->data[i])) + return 0; + } + if (ctm->data[ctm->length - 1] != 'Z') return 0; - if (ctm->type == V_ASN1_UTCTIME) { - i = (buff1[0] - '0') * 10 + (buff1[1] - '0'); - if (i < 50) - i += 100; /* cf. RFC 2459 */ - j = (buff2[0] - '0') * 10 + (buff2[1] - '0'); - if (j < 50) - j += 100; + /* + * There is ASN1_UTCTIME_cmp_time_t but no + * ASN1_GENERALIZEDTIME_cmp_time_t or ASN1_TIME_cmp_time_t, + * so we go through ASN.1 + */ + asn1_cmp_time = X509_time_adj(NULL, 0, cmp_time); + if (asn1_cmp_time == NULL) + goto err; + if (!ASN1_TIME_diff(&day, &sec, ctm, asn1_cmp_time)) + goto err; - if (i < j) - return -1; - if (i > j) - return 1; - } - i = strcmp(buff1, buff2); - if (i == 0) /* wait a second then return younger :-) */ - return -1; - else - return i; + /* + * X509_cmp_time comparison is <=. + * The return value 0 is reserved for errors. + */ + ret = (day >= 0 && sec >= 0) ? -1 : 1; + + err: + ASN1_TIME_free(asn1_cmp_time); + return ret; } ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj) @@ -2896,7 +2844,11 @@ static int build_chain(X509_STORE_CTX *ctx) int i; /* Our chain starts with a single untrusted element. */ - OPENSSL_assert(num == 1 && ctx->num_untrusted == num); + if (!ossl_assert(num == 1 && ctx->num_untrusted == num)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_INTERNAL_ERROR); + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } #define S_DOUNTRUSTED (1 << 0) /* Search untrusted chain */ #define S_DOTRUSTED (1 << 1) /* Search trusted store */ @@ -3033,7 +2985,14 @@ static int build_chain(X509_STORE_CTX *ctx) * certificate among the ones from the trust store. */ if ((search & S_DOALTERNATE) != 0) { - OPENSSL_assert(num > i && i > 0 && ss == 0); + if (!ossl_assert(num > i && i > 0 && ss == 0)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_INTERNAL_ERROR); + X509_free(xtmp); + trust = X509_TRUST_REJECTED; + ctx->error = X509_V_ERR_UNSPECIFIED; + search = 0; + continue; + } search &= ~S_DOALTERNATE; for (; num > i; --num) X509_free(sk_X509_pop(ctx->chain)); @@ -3096,7 +3055,13 @@ static int build_chain(X509_STORE_CTX *ctx) * certificate with ctx->num_untrusted <= num. */ if (ok) { - OPENSSL_assert(ctx->num_untrusted <= num); + if (!ossl_assert(ctx->num_untrusted <= num)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_INTERNAL_ERROR); + trust = X509_TRUST_REJECTED; + ctx->error = X509_V_ERR_UNSPECIFIED; + search = 0; + continue; + } search &= ~S_DOUNTRUSTED; switch (trust = check_trust(ctx, num)) { case X509_TRUST_TRUSTED: @@ -3135,7 +3100,13 @@ static int build_chain(X509_STORE_CTX *ctx) */ if ((search & S_DOUNTRUSTED) != 0) { num = sk_X509_num(ctx->chain); - OPENSSL_assert(num == ctx->num_untrusted); + if (!ossl_assert(num == ctx->num_untrusted)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_INTERNAL_ERROR); + trust = X509_TRUST_REJECTED; + ctx->error = X509_V_ERR_UNSPECIFIED; + search = 0; + continue; + } x = sk_X509_value(ctx->chain, num-1); /* @@ -3254,8 +3225,6 @@ static int check_key_level(X509_STORE_CTX *ctx, X509 *cert) */ static int check_sig_level(X509_STORE_CTX *ctx, X509 *cert) { - int nid = X509_get_signature_nid(cert); - int mdnid = NID_undef; int secbits = -1; int level = ctx->param->auth_level; @@ -3264,14 +3233,8 @@ static int check_sig_level(X509_STORE_CTX *ctx, X509 *cert) if (level > NUM_AUTH_LEVELS) level = NUM_AUTH_LEVELS; - /* Lookup signature algorithm digest */ - if (nid && OBJ_find_sigid_algs(nid, &mdnid, NULL)) { - const EVP_MD *md; - - /* Assume 4 bits of collision resistance for each hash octet */ - if (mdnid != NID_undef && (md = EVP_get_digestbynid(mdnid)) != NULL) - secbits = EVP_MD_size(md) * 4; - } + if (!X509_get_signature_info(cert, NULL, NULL, &secbits, NULL)) + return 0; return secbits >= minbits_table[level - 1]; } diff --git a/crypto/x509/x509_vpm.c b/crypto/x509/x509_vpm.c index b5067220..033ec423 100644 --- a/crypto/x509/x509_vpm.c +++ b/crypto/x509/x509_vpm.c @@ -1,5 +1,5 @@ /* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-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 @@ -11,7 +11,6 @@ #include "internal/cryptlib.h" #include -#include #include #include #include @@ -79,33 +78,6 @@ static int int_x509_param_set_hosts(X509_VERIFY_PARAM *vpm, int mode, return 1; } -static void x509_verify_param_zero(X509_VERIFY_PARAM *param) -{ - if (!param) - return; - param->name = NULL; - param->purpose = 0; - param->trust = X509_TRUST_DEFAULT; - /* - * param->inh_flags = X509_VP_FLAG_DEFAULT; - */ - param->inh_flags = 0; - param->flags = 0; - param->depth = -1; - param->auth_level = -1; /* -1 means unset, 0 is explicit */ - sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free); - param->policies = NULL; - sk_OPENSSL_STRING_pop_free(param->hosts, str_free); - param->hosts = NULL; - OPENSSL_free(param->peername); - param->peername = NULL; - OPENSSL_free(param->email); - param->email = NULL; - param->emaillen = 0; - OPENSSL_free(param->ip); - param->ip = NULL; - param->iplen = 0; -} X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void) { @@ -114,15 +86,25 @@ X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void) param = OPENSSL_zalloc(sizeof(*param)); if (param == NULL) return NULL; - x509_verify_param_zero(param); + param->trust = X509_TRUST_DEFAULT; + /* + * param->inh_flags = X509_VP_FLAG_DEFAULT; + */ + param->inh_flags = 0; + param->depth = -1; + param->auth_level = -1; /* -1 means unset, 0 is explicit */ return param; } void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param) { - if (!param) + if (param == NULL) return; - x509_verify_param_zero(param); + sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free); + sk_OPENSSL_STRING_pop_free(param->hosts, str_free); + OPENSSL_free(param->peername); + OPENSSL_free(param->email); + OPENSSL_free(param->ip); OPENSSL_free(param); } diff --git a/crypto/x509/x509cset.c b/crypto/x509/x509cset.c index 20578596..7645ce37 100644 --- a/crypto/x509/x509cset.c +++ b/crypto/x509/x509cset.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,6 +9,7 @@ #include #include "internal/cryptlib.h" +#include "internal/refcount.h" #include #include #include @@ -18,19 +19,19 @@ int X509_CRL_set_version(X509_CRL *x, long version) { if (x == NULL) - return (0); + return 0; if (x->crl.version == NULL) { if ((x->crl.version = ASN1_INTEGER_new()) == NULL) - return (0); + return 0; } - return (ASN1_INTEGER_set(x->crl.version, version)); + return ASN1_INTEGER_set(x->crl.version, version); } int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name) { if (x == NULL) - return (0); - return (X509_NAME_set(&x->crl.issuer, name)); + return 0; + return X509_NAME_set(&x->crl.issuer, name); } int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm) @@ -67,7 +68,7 @@ int X509_CRL_up_ref(X509_CRL *crl) { int i; - if (CRYPTO_atomic_add(&crl->references, 1, &i, crl->lock) <= 0) + if (CRYPTO_UP_REF(&crl->references, &i, crl->lock) <= 0) return 0; REF_PRINT_COUNT("X509_CRL", crl); @@ -141,7 +142,7 @@ int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm) ASN1_TIME *in; if (x == NULL) - return (0); + return 0; in = x->revocationDate; if (in != tm) { in = ASN1_STRING_dup(tm); @@ -163,7 +164,7 @@ int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial) ASN1_INTEGER *in; if (x == NULL) - return (0); + return 0; in = &x->serialNumber; if (in != serial) return ASN1_STRING_copy(in, serial); diff --git a/crypto/x509/x509name.c b/crypto/x509/x509name.c index f87dc7db..bde5db40 100644 --- a/crypto/x509/x509name.c +++ b/crypto/x509/x509name.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,7 @@ #include #include "internal/cryptlib.h" -#include +#include #include #include #include @@ -22,8 +22,8 @@ int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len) obj = OBJ_nid2obj(nid); if (obj == NULL) - return (-1); - return (X509_NAME_get_text_by_OBJ(name, obj, buf, len)); + return -1; + return X509_NAME_get_text_by_OBJ(name, obj, buf, len); } int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, char *buf, @@ -34,21 +34,21 @@ int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, char *buf i = X509_NAME_get_index_by_OBJ(name, obj, -1); if (i < 0) - return (-1); + return -1; data = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i)); i = (data->length > (len - 1)) ? (len - 1) : data->length; if (buf == NULL) - return (data->length); + return data->length; memcpy(buf, data->data, i); buf[i] = '\0'; - return (i); + return i; } int X509_NAME_entry_count(const X509_NAME *name) { if (name == NULL) - return (0); - return (sk_X509_NAME_ENTRY_num(name->entries)); + return 0; + return sk_X509_NAME_ENTRY_num(name->entries); } int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos) @@ -57,8 +57,8 @@ int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos) obj = OBJ_nid2obj(nid); if (obj == NULL) - return (-2); - return (X509_NAME_get_index_by_OBJ(name, obj, lastpos)); + return -2; + return X509_NAME_get_index_by_OBJ(name, obj, lastpos); } /* NOTE: you should be passing -1, not 0 as lastpos */ @@ -69,7 +69,7 @@ int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int last STACK_OF(X509_NAME_ENTRY) *sk; if (name == NULL) - return (-1); + return -1; if (lastpos < 0) lastpos = -1; sk = name->entries; @@ -77,18 +77,18 @@ int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int last for (lastpos++; lastpos < n; lastpos++) { ne = sk_X509_NAME_ENTRY_value(sk, lastpos); if (OBJ_cmp(ne->object, obj) == 0) - return (lastpos); + return lastpos; } - return (-1); + return -1; } X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc) { if (name == NULL || sk_X509_NAME_ENTRY_num(name->entries) <= loc || loc < 0) - return (NULL); - else - return (sk_X509_NAME_ENTRY_value(name->entries, loc)); + return NULL; + + return sk_X509_NAME_ENTRY_value(name->entries, loc); } X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc) @@ -99,13 +99,14 @@ X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc) if (name == NULL || sk_X509_NAME_ENTRY_num(name->entries) <= loc || loc < 0) - return (NULL); + return NULL; + sk = name->entries; ret = sk_X509_NAME_ENTRY_delete(sk, loc); n = sk_X509_NAME_ENTRY_num(sk); name->modified = 1; if (loc == n) - return (ret); + return ret; /* else we need to fixup the set field */ if (loc != 0) @@ -127,7 +128,7 @@ X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc) if (set_prev + 1 < set_next) for (i = loc; i < n; i++) sk_X509_NAME_ENTRY_value(sk, i)->set--; - return (ret); + return ret; } int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, @@ -136,6 +137,7 @@ int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type { X509_NAME_ENTRY *ne; int ret; + ne = X509_NAME_ENTRY_create_by_OBJ(NULL, obj, type, bytes, len); if (!ne) return 0; @@ -184,7 +186,7 @@ int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, int loc, STACK_OF(X509_NAME_ENTRY) *sk; if (name == NULL) - return (0); + return 0; sk = name->entries; n = sk_X509_NAME_ENTRY_num(sk); if (loc > n) @@ -230,10 +232,10 @@ int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, int loc, for (i = loc + 1; i < n; i++) sk_X509_NAME_ENTRY_value(sk, i - 1)->set += 1; } - return (1); + return 1; err: X509_NAME_ENTRY_free(new_name); - return (0); + return 0; } X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, @@ -249,7 +251,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_TXT, X509_R_INVALID_FIELD_NAME); ERR_add_error_data(2, "name=", field); - return (NULL); + return NULL; } nentry = X509_NAME_ENTRY_create_by_OBJ(ne, obj, type, bytes, len); ASN1_OBJECT_free(obj); @@ -267,7 +269,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, obj = OBJ_nid2obj(nid); if (obj == NULL) { X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID, X509_R_UNKNOWN_NID); - return (NULL); + return NULL; } nentry = X509_NAME_ENTRY_create_by_OBJ(ne, obj, type, bytes, len); ASN1_OBJECT_free(obj); @@ -283,7 +285,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, if ((ne == NULL) || (*ne == NULL)) { if ((ret = X509_NAME_ENTRY_new()) == NULL) - return (NULL); + return NULL; } else ret = *ne; @@ -294,11 +296,11 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, if ((ne != NULL) && (*ne == NULL)) *ne = ret; - return (ret); + return ret; err: if ((ne == NULL) || (ret != *ne)) X509_NAME_ENTRY_free(ret); - return (NULL); + return NULL; } int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj) @@ -306,7 +308,7 @@ int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj) if ((ne == NULL) || (obj == NULL)) { X509err(X509_F_X509_NAME_ENTRY_SET_OBJECT, ERR_R_PASSED_NULL_PARAMETER); - return (0); + return 0; } ASN1_OBJECT_free(ne->object); ne->object = OBJ_dup(obj); @@ -319,7 +321,7 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, int i; if ((ne == NULL) || ((bytes == NULL) && (len != 0))) - return (0); + return 0; if ((type > 0) && (type & MBSTRING_FLAG)) return ASN1_STRING_set_by_NID(&ne->value, bytes, len, type, @@ -328,28 +330,28 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, len = strlen((const char *)bytes); i = ASN1_STRING_set(ne->value, bytes, len); if (!i) - return (0); + return 0; if (type != V_ASN1_UNDEF) { if (type == V_ASN1_APP_CHOOSE) ne->value->type = ASN1_PRINTABLE_type(bytes, len); else ne->value->type = type; } - return (1); + return 1; } ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne) { if (ne == NULL) - return (NULL); - return (ne->object); + return NULL; + return ne->object; } ASN1_STRING *X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne) { if (ne == NULL) - return (NULL); - return (ne->value); + return NULL; + return ne->value; } int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne) diff --git a/crypto/x509/x509rset.c b/crypto/x509/x509rset.c index 6dee297a..e8921b82 100644 --- a/crypto/x509/x509rset.c +++ b/crypto/x509/x509rset.c @@ -18,23 +18,23 @@ int X509_REQ_set_version(X509_REQ *x, long version) { if (x == NULL) - return (0); + return 0; x->req_info.enc.modified = 1; - return (ASN1_INTEGER_set(x->req_info.version, version)); + return ASN1_INTEGER_set(x->req_info.version, version); } int X509_REQ_set_subject_name(X509_REQ *x, X509_NAME *name) { if (x == NULL) - return (0); + return 0; x->req_info.enc.modified = 1; - return (X509_NAME_set(&x->req_info.subject, name)); + return X509_NAME_set(&x->req_info.subject, name); } int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey) { if (x == NULL) - return (0); + return 0; x->req_info.enc.modified = 1; - return (X509_PUBKEY_set(&x->req_info.pubkey, pkey)); + return X509_PUBKEY_set(&x->req_info.pubkey, pkey); } diff --git a/crypto/x509/x509spki.c b/crypto/x509/x509spki.c index b142485d..fd8162af 100644 --- a/crypto/x509/x509spki.c +++ b/crypto/x509/x509spki.c @@ -14,15 +14,15 @@ int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey) { if ((x == NULL) || (x->spkac == NULL)) - return (0); - return (X509_PUBKEY_set(&(x->spkac->pubkey), pkey)); + return 0; + return X509_PUBKEY_set(&(x->spkac->pubkey), pkey); } EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x) { if ((x == NULL) || (x->spkac == NULL)) - return (NULL); - return (X509_PUBKEY_get(x->spkac->pubkey)); + return NULL; + return X509_PUBKEY_get(x->spkac->pubkey); } /* Load a Netscape SPKI from a base64 encoded string */ diff --git a/crypto/x509/x509type.c b/crypto/x509/x509type.c index aca83552..37f4d312 100644 --- a/crypto/x509/x509type.c +++ b/crypto/x509/x509type.c @@ -19,7 +19,7 @@ int X509_certificate_type(const X509 *x, const EVP_PKEY *pkey) int ret = 0, i; if (x == NULL) - return (0); + return 0; if (pkey == NULL) pk = X509_get0_pubkey(x); @@ -27,7 +27,7 @@ int X509_certificate_type(const X509 *x, const EVP_PKEY *pkey) pk = pkey; if (pk == NULL) - return (0); + return 0; switch (EVP_PKEY_id(pk)) { case EVP_PKEY_RSA: @@ -41,6 +41,9 @@ int X509_certificate_type(const X509 *x, const EVP_PKEY *pkey) case EVP_PKEY_EC: ret = EVP_PK_EC | EVP_PKT_SIGN | EVP_PKT_EXCH; break; + case EVP_PKEY_ED25519: + ret = EVP_PKT_SIGN; + break; case EVP_PKEY_DH: ret = EVP_PK_DH | EVP_PKT_EXCH; break; @@ -73,5 +76,5 @@ int X509_certificate_type(const X509 *x, const EVP_PKEY *pkey) } } - return (ret); + return ret; } diff --git a/crypto/x509/x_all.c b/crypto/x509/x_all.c index 42bd1611..24e41146 100644 --- a/crypto/x509/x_all.c +++ b/crypto/x509/x_all.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -9,7 +9,6 @@ #include #include "internal/cryptlib.h" -#include #include #include #include diff --git a/crypto/x509/x_attrib.c b/crypto/x509/x_attrib.c index 35f4aeef..9a41e547 100644 --- a/crypto/x509/x_attrib.c +++ b/crypto/x509/x_attrib.c @@ -39,7 +39,7 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) ASN1_TYPE *val = NULL; if ((ret = X509_ATTRIBUTE_new()) == NULL) - return (NULL); + return NULL; ret->object = OBJ_nid2obj(nid); if ((val = ASN1_TYPE_new()) == NULL) goto err; @@ -47,9 +47,9 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) goto err; ASN1_TYPE_set(val, atrtype, value); - return (ret); + return ret; err: X509_ATTRIBUTE_free(ret); ASN1_TYPE_free(val); - return (NULL); + return NULL; } diff --git a/crypto/x509/x_name.c b/crypto/x509/x_name.c index 0af5df5c..d36a9d37 100644 --- a/crypto/x509/x_name.c +++ b/crypto/x509/x_name.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -8,7 +8,7 @@ */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include @@ -398,11 +398,12 @@ static int asn1_string_canon(ASN1_STRING *out, const ASN1_STRING *in) /* * Convert string in place to canonical form. Ultimately we may need to * handle a wider range of characters but for now ignore anything with - * MSB set and rely on the isspace() and tolower() functions. + * MSB set and rely on the ossl_isspace() to fail on bad characters without + * needing isascii or range checks as well. */ /* Ignore leading spaces */ - while ((len > 0) && !(*from & 0x80) && isspace(*from)) { + while (len > 0 && ossl_isspace(*from)) { from++; len--; } @@ -410,7 +411,7 @@ static int asn1_string_canon(ASN1_STRING *out, const ASN1_STRING *in) to = from + len; /* Ignore trailing spaces */ - while ((len > 0) && !(to[-1] & 0x80) && isspace(to[-1])) { + while (len > 0 && ossl_isspace(to[-1])) { to--; len--; } @@ -419,13 +420,13 @@ static int asn1_string_canon(ASN1_STRING *out, const ASN1_STRING *in) i = 0; while (i < len) { - /* If MSB set just copy across */ - if (*from & 0x80) { + /* If not ASCII set just copy across */ + if (!ossl_isascii(*from)) { *to++ = *from++; i++; } /* Collapse multiple spaces */ - else if (isspace(*from)) { + else if (ossl_isspace(*from)) { /* Copy one space across */ *to++ = ' '; /* @@ -437,9 +438,9 @@ static int asn1_string_canon(ASN1_STRING *out, const ASN1_STRING *in) from++; i++; } - while (!(*from & 0x80) && isspace(*from)); + while (ossl_isspace(*from)); } else { - *to++ = tolower(*from); + *to++ = ossl_tolower(*from); from++; i++; } @@ -497,19 +498,10 @@ int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase) c = s; for (;;) { -#ifndef CHARSET_EBCDIC if (((*s == '/') && - ((s[1] >= 'A') && (s[1] <= 'Z') && ((s[2] == '=') || - ((s[2] >= 'A') - && (s[2] <= 'Z') - && (s[3] == '=')) + (ossl_isupper(s[1]) && ((s[2] == '=') || + (ossl_isupper(s[2]) && (s[3] == '=')) ))) || (*s == '\0')) -#else - if (((*s == '/') && - (isupper(s[1]) && ((s[2] == '=') || - (isupper(s[2]) && (s[3] == '=')) - ))) || (*s == '\0')) -#endif { i = s - c; if (BIO_write(bp, c, i) != i) diff --git a/crypto/x509/x_pubkey.c b/crypto/x509/x_pubkey.c index cc692834..73977cd8 100644 --- a/crypto/x509/x_pubkey.c +++ b/crypto/x509/x_pubkey.c @@ -61,7 +61,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) X509_PUBKEY *pk = NULL; if (x == NULL) - return (0); + return 0; if ((pk = X509_PUBKEY_new()) == NULL) goto error; @@ -206,7 +206,7 @@ int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) if (!a) return 0; if (!X509_PUBKEY_set(&xpk, a)) - return 0; + return -1; ret = i2d_X509_PUBKEY(xpk, pp); X509_PUBKEY_free(xpk); return ret; @@ -246,7 +246,7 @@ int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) pktmp = EVP_PKEY_new(); if (pktmp == NULL) { ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE); - return 0; + return -1; } EVP_PKEY_set1_RSA(pktmp, a); ret = i2d_PUBKEY(pktmp, pp); @@ -286,7 +286,7 @@ int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) pktmp = EVP_PKEY_new(); if (pktmp == NULL) { ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE); - return 0; + return -1; } EVP_PKEY_set1_DSA(pktmp, a); ret = i2d_PUBKEY(pktmp, pp); @@ -304,17 +304,17 @@ EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length) q = *pp; pkey = d2i_PUBKEY(NULL, &q, length); if (!pkey) - return (NULL); + return NULL; key = EVP_PKEY_get1_EC_KEY(pkey); EVP_PKEY_free(pkey); if (!key) - return (NULL); + return NULL; *pp = q; if (a) { EC_KEY_free(*a); *a = key; } - return (key); + return key; } int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp) @@ -322,15 +322,15 @@ int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp) EVP_PKEY *pktmp; int ret; if (!a) - return (0); + return 0; if ((pktmp = EVP_PKEY_new()) == NULL) { ASN1err(ASN1_F_I2D_EC_PUBKEY, ERR_R_MALLOC_FAILURE); - return (0); + return -1; } EVP_PKEY_set1_EC_KEY(pktmp, a); ret = i2d_PUBKEY(pktmp, pp); EVP_PKEY_free(pktmp); - return (ret); + return ret; } #endif diff --git a/crypto/x509/x_x509.c b/crypto/x509/x_x509.c index 6783fd87..c28fdda7 100644 --- a/crypto/x509/x_x509.c +++ b/crypto/x509/x_x509.c @@ -89,12 +89,12 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509) int X509_set_ex_data(X509 *r, int idx, void *arg) { - return (CRYPTO_set_ex_data(&r->ex_data, idx, arg)); + return CRYPTO_set_ex_data(&r->ex_data, idx, arg); } void *X509_get_ex_data(X509 *r, int idx) { - return (CRYPTO_get_ex_data(&r->ex_data, idx)); + return CRYPTO_get_ex_data(&r->ex_data, idx); } /* @@ -145,8 +145,6 @@ static int i2d_x509_aux_internal(X509 *a, unsigned char **pp) int length, tmplen; unsigned char *start = pp != NULL ? *pp : NULL; - OPENSSL_assert(pp == NULL || *pp != NULL); - /* * This might perturb *pp on error, but fixing that belongs in i2d_X509() * not here. It should be that if a == NULL length is zero, but we check diff --git a/crypto/x509v3/build.info b/crypto/x509v3/build.info index 452a8b03..4ab64884 100644 --- a/crypto/x509v3/build.info +++ b/crypto/x509v3/build.info @@ -5,4 +5,4 @@ SOURCE[../../libcrypto]=\ v3_int.c v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c v3_purp.c v3_info.c \ v3_akeya.c v3_pmaps.c v3_pcons.c v3_ncons.c v3_pcia.c v3_pci.c \ pcy_cache.c pcy_node.c pcy_data.c pcy_map.c pcy_tree.c pcy_lib.c \ - v3_asid.c v3_addr.c v3_tlsf.c + v3_asid.c v3_addr.c v3_tlsf.c v3_admis.c diff --git a/crypto/x509v3/ext_dat.h b/crypto/x509v3/ext_dat.h index c9ede960..762e264b 100644 --- a/crypto/x509v3/ext_dat.h +++ b/crypto/x509v3/ext_dat.h @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -22,3 +22,4 @@ extern const X509V3_EXT_METHOD v3_name_constraints, v3_inhibit_anyp, v3_idp; extern const X509V3_EXT_METHOD v3_addr, v3_asid; extern const X509V3_EXT_METHOD v3_ct_scts[3]; extern const X509V3_EXT_METHOD v3_tls_feature; +extern const X509V3_EXT_METHOD v3_ext_admission; diff --git a/crypto/x509v3/pcy_data.c b/crypto/x509v3/pcy_data.c index cf1d635e..757b101d 100644 --- a/crypto/x509v3/pcy_data.c +++ b/crypto/x509v3/pcy_data.c @@ -17,7 +17,7 @@ void policy_data_free(X509_POLICY_DATA *data) { - if (!data) + if (data == NULL) return; ASN1_OBJECT_free(data->valid_policy); /* Don't free qualifiers if shared */ @@ -40,11 +40,11 @@ X509_POLICY_DATA *policy_data_new(POLICYINFO *policy, { X509_POLICY_DATA *ret; ASN1_OBJECT *id; - if (!policy && !cid) + if (policy == NULL && cid == NULL) return NULL; if (cid) { id = OBJ_dup(cid); - if (!id) + if (id == NULL) return NULL; } else id = NULL; diff --git a/crypto/x509v3/standard_exts.h b/crypto/x509v3/standard_exts.h new file mode 100644 index 00000000..944f4de0 --- /dev/null +++ b/crypto/x509v3/standard_exts.h @@ -0,0 +1,78 @@ +/* + * Copyright 1999-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 + */ + +/* + * This table will be searched using OBJ_bsearch so it *must* kept in order + * of the ext_nid values. + */ + +static const X509V3_EXT_METHOD *standard_exts[] = { + &v3_nscert, + &v3_ns_ia5_list[0], + &v3_ns_ia5_list[1], + &v3_ns_ia5_list[2], + &v3_ns_ia5_list[3], + &v3_ns_ia5_list[4], + &v3_ns_ia5_list[5], + &v3_ns_ia5_list[6], + &v3_skey_id, + &v3_key_usage, + &v3_pkey_usage_period, + &v3_alt[0], + &v3_alt[1], + &v3_bcons, + &v3_crl_num, + &v3_cpols, + &v3_akey_id, + &v3_crld, + &v3_ext_ku, + &v3_delta_crl, + &v3_crl_reason, +#ifndef OPENSSL_NO_OCSP + &v3_crl_invdate, +#endif + &v3_sxnet, + &v3_info, +#ifndef OPENSSL_NO_RFC3779 + &v3_addr, + &v3_asid, +#endif +#ifndef OPENSSL_NO_OCSP + &v3_ocsp_nonce, + &v3_ocsp_crlid, + &v3_ocsp_accresp, + &v3_ocsp_nocheck, + &v3_ocsp_acutoff, + &v3_ocsp_serviceloc, +#endif + &v3_sinfo, + &v3_policy_constraints, +#ifndef OPENSSL_NO_OCSP + &v3_crl_hold, +#endif + &v3_pci, + &v3_name_constraints, + &v3_policy_mappings, + &v3_inhibit_anyp, + &v3_idp, + &v3_alt[2], + &v3_freshest_crl, +#ifndef OPENSSL_NO_CT + &v3_ct_scts[0], + &v3_ct_scts[1], + &v3_ct_scts[2], +#endif + &v3_tls_feature, + &v3_ext_admission +}; + +/* Number of standard extensions */ + +#define STANDARD_EXTENSION_COUNT OSSL_NELEM(standard_exts) + diff --git a/crypto/x509v3/tabtest.c b/crypto/x509v3/tabtest.c deleted file mode 100644 index a33a63a7..00000000 --- a/crypto/x509v3/tabtest.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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 - */ - -/* - * Simple program to check the ext_dat.h is correct and print out problems if - * it is not. - */ - -#include - -#include - -#include "ext_dat.h" - -main() -{ - int i, prev = -1, bad = 0; - X509V3_EXT_METHOD **tmp; - i = OSSL_NELEM(standard_exts); - if (i != STANDARD_EXTENSION_COUNT) - fprintf(stderr, "Extension number invalid expecting %d\n", i); - tmp = standard_exts; - for (i = 0; i < STANDARD_EXTENSION_COUNT; i++, tmp++) { - if ((*tmp)->ext_nid < prev) - bad = 1; - prev = (*tmp)->ext_nid; - - } - if (bad) { - tmp = standard_exts; - fprintf(stderr, "Extensions out of order!\n"); - for (i = 0; i < STANDARD_EXTENSION_COUNT; i++, tmp++) - printf("%d : %s\n", (*tmp)->ext_nid, OBJ_nid2sn((*tmp)->ext_nid)); - } else - fprintf(stderr, "Order OK\n"); -} diff --git a/crypto/x509v3/v3_addr.c b/crypto/x509v3/v3_addr.c index c5183a17..bb58e048 100644 --- a/crypto/x509v3/v3_addr.c +++ b/crypto/x509v3/v3_addr.c @@ -342,7 +342,8 @@ static int range_should_be_prefix(const unsigned char *min, unsigned char mask; int i, j; - OPENSSL_assert(memcmp(min, max, length) <= 0); + if (memcmp(min, max, length) <= 0) + return -1; for (i = 0; i < length && min[i] == max[i]; i++) ; for (j = length - 1; j >= 0 && min[j] == 0x00 && max[j] == 0xFF; j--) ; if (i < j) @@ -431,7 +432,6 @@ static int make_addressRange(IPAddressOrRange **result, if ((aor = IPAddressOrRange_new()) == NULL) return 0; aor->type = IPAddressOrRange_addressRange; - OPENSSL_assert(aor->u.addressRange == NULL); if ((aor->u.addressRange = IPAddressRange_new()) == NULL) goto err; if (aor->u.addressRange->min == NULL && @@ -498,7 +498,6 @@ static IPAddressFamily *make_IPAddressFamily(IPAddrBlocks *addr, for (i = 0; i < sk_IPAddressFamily_num(addr); i++) { f = sk_IPAddressFamily_value(addr, i); - OPENSSL_assert(f->addressFamily->data != NULL); if (f->addressFamily->length == keylen && !memcmp(f->addressFamily->data, key, keylen)) return f; @@ -877,7 +876,8 @@ int X509v3_addr_canonize(IPAddrBlocks *addr) } (void)sk_IPAddressFamily_set_cmp_func(addr, IPAddressFamily_cmp); sk_IPAddressFamily_sort(addr); - OPENSSL_assert(X509v3_addr_is_canonical(addr)); + if (!ossl_assert(X509v3_addr_is_canonical(addr))) + return 0; return 1; } @@ -1182,9 +1182,13 @@ static int addr_validate_path_internal(X509_STORE_CTX *ctx, int i, j, ret = 1; X509 *x; - OPENSSL_assert(chain != NULL && sk_X509_num(chain) > 0); - OPENSSL_assert(ctx != NULL || ext != NULL); - OPENSSL_assert(ctx == NULL || ctx->verify_cb != NULL); + if (!ossl_assert(chain != NULL && sk_X509_num(chain) > 0) + || !ossl_assert(ctx != NULL || ext != NULL) + || !ossl_assert(ctx == NULL || ctx->verify_cb != NULL)) { + if (ctx != NULL) + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } /* * Figure out where to start. If we don't have an extension to @@ -1197,7 +1201,6 @@ static int addr_validate_path_internal(X509_STORE_CTX *ctx, } else { i = 0; x = sk_X509_value(chain, i); - OPENSSL_assert(x != NULL); if ((ext = x->rfc3779_addr) == NULL) goto done; } @@ -1207,7 +1210,8 @@ static int addr_validate_path_internal(X509_STORE_CTX *ctx, if ((child = sk_IPAddressFamily_dup(ext)) == NULL) { X509V3err(X509V3_F_ADDR_VALIDATE_PATH_INTERNAL, ERR_R_MALLOC_FAILURE); - ctx->error = X509_V_ERR_OUT_OF_MEM; + if (ctx != NULL) + ctx->error = X509_V_ERR_OUT_OF_MEM; ret = 0; goto done; } @@ -1218,7 +1222,6 @@ static int addr_validate_path_internal(X509_STORE_CTX *ctx, */ for (i++; i < sk_X509_num(chain); i++) { x = sk_X509_value(chain, i); - OPENSSL_assert(x != NULL); if (!X509v3_addr_is_canonical(x->rfc3779_addr)) validation_err(X509_V_ERR_INVALID_EXTENSION); if (x->rfc3779_addr == NULL) { @@ -1262,7 +1265,6 @@ static int addr_validate_path_internal(X509_STORE_CTX *ctx, /* * Trust anchor can't inherit. */ - OPENSSL_assert(x != NULL); if (x->rfc3779_addr != NULL) { for (j = 0; j < sk_IPAddressFamily_num(x->rfc3779_addr); j++) { IPAddressFamily *fp = @@ -1285,6 +1287,12 @@ static int addr_validate_path_internal(X509_STORE_CTX *ctx, */ int X509v3_addr_validate_path(X509_STORE_CTX *ctx) { + if (ctx->chain == NULL + || sk_X509_num(ctx->chain) == 0 + || ctx->verify_cb == NULL) { + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } return addr_validate_path_internal(ctx, ctx->chain, NULL); } diff --git a/crypto/x509v3/v3_admis.c b/crypto/x509v3/v3_admis.c new file mode 100644 index 00000000..c8e75191 --- /dev/null +++ b/crypto/x509v3/v3_admis.c @@ -0,0 +1,356 @@ +/* + * 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 + */ +#include +#include "internal/cryptlib.h" +#include +#include +#include +#include + +#include + +#include + +#include "v3_admis.h" +#include "ext_dat.h" + + +ASN1_SEQUENCE(NAMING_AUTHORITY) = { + ASN1_OPT(NAMING_AUTHORITY, namingAuthorityId, ASN1_OBJECT), + ASN1_OPT(NAMING_AUTHORITY, namingAuthorityUrl, ASN1_IA5STRING), + ASN1_OPT(NAMING_AUTHORITY, namingAuthorityText, DIRECTORYSTRING), +} ASN1_SEQUENCE_END(NAMING_AUTHORITY) + +ASN1_SEQUENCE(PROFESSION_INFO) = { + ASN1_EXP_OPT(PROFESSION_INFO, namingAuthority, NAMING_AUTHORITY, 0), + ASN1_SEQUENCE_OF(PROFESSION_INFO, professionItems, DIRECTORYSTRING), + ASN1_SEQUENCE_OF_OPT(PROFESSION_INFO, professionOIDs, ASN1_OBJECT), + ASN1_OPT(PROFESSION_INFO, registrationNumber, ASN1_PRINTABLESTRING), + ASN1_OPT(PROFESSION_INFO, addProfessionInfo, ASN1_OCTET_STRING), +} ASN1_SEQUENCE_END(PROFESSION_INFO) + +ASN1_SEQUENCE(ADMISSIONS) = { + ASN1_EXP_OPT(ADMISSIONS, admissionAuthority, GENERAL_NAME, 0), + ASN1_EXP_OPT(ADMISSIONS, namingAuthority, NAMING_AUTHORITY, 1), + ASN1_SEQUENCE_OF(ADMISSIONS, professionInfos, PROFESSION_INFO), +} ASN1_SEQUENCE_END(ADMISSIONS) + +ASN1_SEQUENCE(ADMISSION_SYNTAX) = { + ASN1_OPT(ADMISSION_SYNTAX, admissionAuthority, GENERAL_NAME), + ASN1_SEQUENCE_OF(ADMISSION_SYNTAX, contentsOfAdmissions, ADMISSIONS), +} ASN1_SEQUENCE_END(ADMISSION_SYNTAX) + +IMPLEMENT_ASN1_FUNCTIONS(NAMING_AUTHORITY) +IMPLEMENT_ASN1_FUNCTIONS(PROFESSION_INFO) +IMPLEMENT_ASN1_FUNCTIONS(ADMISSIONS) +IMPLEMENT_ASN1_FUNCTIONS(ADMISSION_SYNTAX) + +static int i2r_ADMISSION_SYNTAX(const struct v3_ext_method *method, void *in, + BIO *bp, int ind); + +const X509V3_EXT_METHOD v3_ext_admission = { + NID_x509ExtAdmission, /* .ext_nid = */ + 0, /* .ext_flags = */ + ASN1_ITEM_ref(ADMISSION_SYNTAX), /* .it = */ + NULL, NULL, NULL, NULL, + NULL, /* .i2s = */ + NULL, /* .s2i = */ + NULL, /* .i2v = */ + NULL, /* .v2i = */ + &i2r_ADMISSION_SYNTAX, /* .i2r = */ + NULL, /* .r2i = */ + NULL /* extension-specific data */ +}; + + +static int i2r_NAMING_AUTHORITY(const struct v3_ext_method *method, void *in, + BIO *bp, int ind) +{ + NAMING_AUTHORITY * namingAuthority = (NAMING_AUTHORITY*) in; + + if (namingAuthority == NULL) + return 0; + + if (namingAuthority->namingAuthorityId == NULL + && namingAuthority->namingAuthorityText == NULL + && namingAuthority->namingAuthorityUrl == NULL) + return 0; + + if (BIO_printf(bp, "%*snamingAuthority: ", ind, "") <= 0) + goto err; + + if (namingAuthority->namingAuthorityId != NULL) { + char objbuf[128]; + const char *ln = OBJ_nid2ln(OBJ_obj2nid(namingAuthority->namingAuthorityId)); + + if (BIO_printf(bp, "%*s admissionAuthorityId: ", ind, "") <= 0) + goto err; + + OBJ_obj2txt(objbuf, sizeof(objbuf), namingAuthority->namingAuthorityId, 1); + + if (BIO_printf(bp, "%s%s%s%s\n", ln ? ln : "", + ln ? " (" : "", objbuf, ln ? ")" : "") <= 0) + goto err; + } + if (namingAuthority->namingAuthorityText != NULL) { + if (BIO_printf(bp, "%*s namingAuthorityText: ", ind, "") <= 0 + || ASN1_STRING_print(bp, namingAuthority->namingAuthorityText) <= 0 + || BIO_printf(bp, "\n") <= 0) + goto err; + } + if (namingAuthority->namingAuthorityUrl != NULL ) { + if (BIO_printf(bp, "%*s namingAuthorityUrl: ", ind, "") <= 0 + || ASN1_STRING_print(bp, namingAuthority->namingAuthorityUrl) <= 0 + || BIO_printf(bp, "\n") <= 0) + goto err; + } + return 1; + +err: + return 0; +} + +static int i2r_ADMISSION_SYNTAX(const struct v3_ext_method *method, void *in, + BIO *bp, int ind) +{ + ADMISSION_SYNTAX * admission = (ADMISSION_SYNTAX *)in; + int i, j, k; + + if (admission->admissionAuthority != NULL) { + if (BIO_printf(bp, "%*sadmissionAuthority:\n", ind, "") <= 0 + || BIO_printf(bp, "%*s ", ind, "") <= 0 + || GENERAL_NAME_print(bp, admission->admissionAuthority) <= 0 + || BIO_printf(bp, "\n") <= 0) + goto err; + } + + for (i = 0; i < sk_ADMISSIONS_num(admission->contentsOfAdmissions); i++) { + ADMISSIONS* entry = sk_ADMISSIONS_value(admission->contentsOfAdmissions, i); + + if (BIO_printf(bp, "%*sEntry %0d:\n", ind, "", 1 + i) <= 0) goto err; + + if (entry->admissionAuthority != NULL) { + if (BIO_printf(bp, "%*s admissionAuthority:\n", ind, "") <= 0 + || BIO_printf(bp, "%*s ", ind, "") <= 0 + || GENERAL_NAME_print(bp, entry->admissionAuthority) <= 0 + || BIO_printf(bp, "\n") <= 0) + goto err; + } + + if (entry->namingAuthority != NULL) { + if (i2r_NAMING_AUTHORITY(method, entry->namingAuthority, bp, ind) <= 0) + goto err; + } + + for (j = 0; j < sk_PROFESSION_INFO_num(entry->professionInfos); j++) { + PROFESSION_INFO* pinfo = sk_PROFESSION_INFO_value(entry->professionInfos, j); + + if (BIO_printf(bp, "%*s Profession Info Entry %0d:\n", ind, "", 1 + j) <= 0) + goto err; + + if (pinfo->registrationNumber != NULL) { + if (BIO_printf(bp, "%*s registrationNumber: ", ind, "") <= 0 + || ASN1_STRING_print(bp, pinfo->registrationNumber) <= 0 + || BIO_printf(bp, "\n") <= 0) + goto err; + } + + if (pinfo->namingAuthority != NULL) { + if (i2r_NAMING_AUTHORITY(method, pinfo->namingAuthority, bp, ind + 2) <= 0) + goto err; + } + + if (pinfo->professionItems != NULL) { + + if (BIO_printf(bp, "%*s Info Entries:\n", ind, "") <= 0) + goto err; + for (k = 0; k < sk_ASN1_STRING_num(pinfo->professionItems); k++) { + ASN1_STRING* val = sk_ASN1_STRING_value(pinfo->professionItems, k); + + if (BIO_printf(bp, "%*s ", ind, "") <= 0 + || ASN1_STRING_print(bp, val) <= 0 + || BIO_printf(bp, "\n") <= 0) + goto err; + } + } + + if (pinfo->professionOIDs != NULL) { + if (BIO_printf(bp, "%*s Profession OIDs:\n", ind, "") <= 0) + goto err; + for (k = 0; k < sk_ASN1_OBJECT_num(pinfo->professionOIDs); k++) { + ASN1_OBJECT* obj = sk_ASN1_OBJECT_value(pinfo->professionOIDs, k); + const char *ln = OBJ_nid2ln(OBJ_obj2nid(obj)); + char objbuf[128]; + + OBJ_obj2txt(objbuf, sizeof(objbuf), obj, 1); + if (BIO_printf(bp, "%*s %s%s%s%s\n", ind, "", + ln ? ln : "", ln ? " (" : "", + objbuf, ln ? ")" : "") <= 0) + goto err; + } + } + } + } + return 1; + +err: + return -1; +} + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId(const NAMING_AUTHORITY *n) +{ + return n->namingAuthorityId; +} + +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, ASN1_OBJECT* id) +{ + ASN1_OBJECT_free(n->namingAuthorityId); + n->namingAuthorityId = id; +} + +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n) +{ + return n->namingAuthorityUrl; +} + +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, ASN1_IA5STRING* u) +{ + ASN1_IA5STRING_free(n->namingAuthorityUrl); + n->namingAuthorityUrl = u; +} + +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n) +{ + return n->namingAuthorityText; +} + +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, ASN1_STRING* t) +{ + ASN1_IA5STRING_free(n->namingAuthorityText); + n->namingAuthorityText = t; +} + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority(const ADMISSION_SYNTAX *as) +{ + return as->admissionAuthority; +} + +void ADMISSION_SYNTAX_set0_admissionAuthority(ADMISSION_SYNTAX *as, + GENERAL_NAME *aa) +{ + GENERAL_NAME_free(as->admissionAuthority); + as->admissionAuthority = aa; +} + +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions(const ADMISSION_SYNTAX *as) +{ + return as->contentsOfAdmissions; +} + +void ADMISSION_SYNTAX_set0_contentsOfAdmissions(ADMISSION_SYNTAX *as, + STACK_OF(ADMISSIONS) *a) +{ + sk_ADMISSIONS_pop_free(as->contentsOfAdmissions, ADMISSIONS_free); + as->contentsOfAdmissions = a; +} + +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a) +{ + return a->admissionAuthority; +} + +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa) +{ + GENERAL_NAME_free(a->admissionAuthority); + a->admissionAuthority = aa; +} + +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a) +{ + return a->namingAuthority; +} + +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na) +{ + NAMING_AUTHORITY_free(a->namingAuthority); + a->namingAuthority = na; +} + +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a) +{ + return a->professionInfos; +} + +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi) +{ + sk_PROFESSION_INFO_pop_free(a->professionInfos, PROFESSION_INFO_free); + a->professionInfos = pi; +} + +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo(const PROFESSION_INFO *pi) +{ + return pi->addProfessionInfo; +} + +void PROFESSION_INFO_set0_addProfessionInfo(PROFESSION_INFO *pi, + ASN1_OCTET_STRING *aos) +{ + ASN1_OCTET_STRING_free(pi->addProfessionInfo); + pi->addProfessionInfo = aos; +} + +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority(const PROFESSION_INFO *pi) +{ + return pi->namingAuthority; +} + +void PROFESSION_INFO_set0_namingAuthority(PROFESSION_INFO *pi, + NAMING_AUTHORITY *na) +{ + NAMING_AUTHORITY_free(pi->namingAuthority); + pi->namingAuthority = na; +} + +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems(const PROFESSION_INFO *pi) +{ + return pi->professionItems; +} + +void PROFESSION_INFO_set0_professionItems(PROFESSION_INFO *pi, + STACK_OF(ASN1_STRING) *as) +{ + sk_ASN1_STRING_pop_free(pi->professionItems, ASN1_STRING_free); + pi->professionItems = as; +} + +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs(const PROFESSION_INFO *pi) +{ + return pi->professionOIDs; +} + +void PROFESSION_INFO_set0_professionOIDs(PROFESSION_INFO *pi, + STACK_OF(ASN1_OBJECT) *po) +{ + sk_ASN1_OBJECT_pop_free(pi->professionOIDs, ASN1_OBJECT_free); + pi->professionOIDs = po; +} + +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber(const PROFESSION_INFO *pi) +{ + return pi->registrationNumber; +} + +void PROFESSION_INFO_set0_registrationNumber(PROFESSION_INFO *pi, + ASN1_PRINTABLESTRING *rn) +{ + ASN1_PRINTABLESTRING_free(pi->registrationNumber); + pi->registrationNumber = rn; +} diff --git a/crypto/x509v3/v3_admis.h b/crypto/x509v3/v3_admis.h new file mode 100644 index 00000000..2f1e76d7 --- /dev/null +++ b/crypto/x509v3/v3_admis.h @@ -0,0 +1,45 @@ +/* + * 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_V3_ADMISSION_H +# define HEADER_V3_ADMISSION_H + +#ifdef __cplusplus +extern "C" { +#endif + +struct NamingAuthority_st { + ASN1_OBJECT* namingAuthorityId; + ASN1_IA5STRING* namingAuthorityUrl; + ASN1_STRING* namingAuthorityText; /* i.e. DIRECTORYSTRING */ +}; + +struct ProfessionInfo_st { + NAMING_AUTHORITY* namingAuthority; + STACK_OF(ASN1_STRING)* professionItems; /* i.e. DIRECTORYSTRING */ + STACK_OF(ASN1_OBJECT)* professionOIDs; + ASN1_PRINTABLESTRING* registrationNumber; + ASN1_OCTET_STRING* addProfessionInfo; +}; + +struct Admissions_st { + GENERAL_NAME* admissionAuthority; + NAMING_AUTHORITY* namingAuthority; + STACK_OF(PROFESSION_INFO)* professionInfos; +}; + +struct AdmissionSyntax_st { + GENERAL_NAME* admissionAuthority; + STACK_OF(ADMISSIONS)* contentsOfAdmissions; +}; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/crypto/x509v3/v3_alt.c b/crypto/x509v3/v3_alt.c index a35d3376..832e6d12 100644 --- a/crypto/x509v3/v3_alt.c +++ b/crypto/x509v3/v3_alt.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -68,6 +68,7 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, unsigned char *p; char oline[256], htmp[5]; int i; + switch (gen->type) { case GEN_OTHERNAME: if (!X509V3_add_value("othername", "", &ret)) @@ -100,7 +101,7 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, break; case GEN_DIRNAME: - if (X509_NAME_oneline(gen->d.dirn, oline, 256) == NULL + if (X509_NAME_oneline(gen->d.dirn, oline, sizeof(oline)) == NULL || !X509V3_add_value("DirName", oline, &ret)) return NULL; break; @@ -108,8 +109,8 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, case GEN_IPADD: p = gen->d.ip->data; if (gen->d.ip->length == 4) - BIO_snprintf(oline, sizeof(oline), - "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); + BIO_snprintf(oline, sizeof(oline), "%d.%d.%d.%d", + p[0], p[1], p[2], p[3]); else if (gen->d.ip->length == 16) { oline[0] = 0; for (i = 0; i < 8; i++) { @@ -201,25 +202,28 @@ static GENERAL_NAMES *v2i_issuer_alt(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { - GENERAL_NAMES *gens = NULL; - CONF_VALUE *cnf; + const int num = sk_CONF_VALUE_num(nval); + GENERAL_NAMES *gens = sk_GENERAL_NAME_new_reserve(NULL, num); int i; - if ((gens = sk_GENERAL_NAME_new_null()) == NULL) { + if (gens == NULL) { X509V3err(X509V3_F_V2I_ISSUER_ALT, ERR_R_MALLOC_FAILURE); + sk_GENERAL_NAME_free(gens); return NULL; } - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { - cnf = sk_CONF_VALUE_value(nval, i); + for (i = 0; i < num; i++) { + CONF_VALUE *cnf = sk_CONF_VALUE_value(nval, i); + if (!name_cmp(cnf->name, "issuer") && cnf->value && strcmp(cnf->value, "copy") == 0) { if (!copy_issuer(ctx, gens)) goto err; } else { - GENERAL_NAME *gen; - if ((gen = v2i_GENERAL_NAME(method, ctx, cnf)) == NULL) + GENERAL_NAME *gen = v2i_GENERAL_NAME(method, ctx, cnf); + + if (gen == NULL) goto err; - sk_GENERAL_NAME_push(gens, gen); + sk_GENERAL_NAME_push(gens, gen); /* no failure as it was reserved */ } } return gens; @@ -235,7 +239,7 @@ static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens) GENERAL_NAMES *ialt; GENERAL_NAME *gen; X509_EXTENSION *ext; - int i; + int i, num; if (ctx && (ctx->flags == CTX_TEST)) return 1; @@ -252,12 +256,15 @@ static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens) goto err; } - for (i = 0; i < sk_GENERAL_NAME_num(ialt); i++) { + num = sk_GENERAL_NAME_num(ialt); + if (!sk_GENERAL_NAME_reserve(gens, num)) { + X509V3err(X509V3_F_COPY_ISSUER, ERR_R_MALLOC_FAILURE); + goto err; + } + + for (i = 0; i < num; i++) { gen = sk_GENERAL_NAME_value(ialt, i); - if (!sk_GENERAL_NAME_push(gens, gen)) { - X509V3err(X509V3_F_COPY_ISSUER, ERR_R_MALLOC_FAILURE); - goto err; - } + sk_GENERAL_NAME_push(gens, gen); /* no failure as it was reserved */ } sk_GENERAL_NAME_free(ialt); @@ -272,15 +279,19 @@ static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { - GENERAL_NAMES *gens = NULL; + GENERAL_NAMES *gens; CONF_VALUE *cnf; + const int num = sk_CONF_VALUE_num(nval); int i; - if ((gens = sk_GENERAL_NAME_new_null()) == NULL) { + gens = sk_GENERAL_NAME_new_reserve(NULL, num); + if (gens == NULL) { X509V3err(X509V3_F_V2I_SUBJECT_ALT, ERR_R_MALLOC_FAILURE); + sk_GENERAL_NAME_free(gens); return NULL; } - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { + + for (i = 0; i < num; i++) { cnf = sk_CONF_VALUE_value(nval, i); if (!name_cmp(cnf->name, "email") && cnf->value && strcmp(cnf->value, "copy") == 0) { @@ -294,7 +305,7 @@ static GENERAL_NAMES *v2i_subject_alt(X509V3_EXT_METHOD *method, GENERAL_NAME *gen; if ((gen = v2i_GENERAL_NAME(method, ctx, cnf)) == NULL) goto err; - sk_GENERAL_NAME_push(gens, gen); + sk_GENERAL_NAME_push(gens, gen); /* no failure as it was reserved */ } } return gens; @@ -313,10 +324,12 @@ static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p) ASN1_IA5STRING *email = NULL; X509_NAME_ENTRY *ne; GENERAL_NAME *gen = NULL; - int i; + int i = -1; + if (ctx != NULL && ctx->flags == CTX_TEST) return 1; - if (!ctx || (!ctx->subject_cert && !ctx->subject_req)) { + if (ctx == NULL + || (ctx->subject_cert == NULL && ctx->subject_req == NULL)) { X509V3err(X509V3_F_COPY_EMAIL, X509V3_R_NO_SUBJECT_DETAILS); goto err; } @@ -327,7 +340,6 @@ static int copy_email(X509V3_CTX *ctx, GENERAL_NAMES *gens, int move_p) nm = X509_REQ_get_subject_name(ctx->subject_req); /* Now add any email address(es) to STACK */ - i = -1; while ((i = X509_NAME_get_index_by_NID(nm, NID_pkcs9_emailAddress, i)) >= 0) { ne = X509_NAME_get_entry(nm, i); @@ -364,19 +376,23 @@ GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { GENERAL_NAME *gen; - GENERAL_NAMES *gens = NULL; + GENERAL_NAMES *gens; CONF_VALUE *cnf; + const int num = sk_CONF_VALUE_num(nval); int i; - if ((gens = sk_GENERAL_NAME_new_null()) == NULL) { + gens = sk_GENERAL_NAME_new_reserve(NULL, num); + if (gens == NULL) { X509V3err(X509V3_F_V2I_GENERAL_NAMES, ERR_R_MALLOC_FAILURE); + sk_GENERAL_NAME_free(gens); return NULL; } - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { + + for (i = 0; i < num; i++) { cnf = sk_CONF_VALUE_value(nval, i); if ((gen = v2i_GENERAL_NAME(method, ctx, cnf)) == NULL) goto err; - sk_GENERAL_NAME_push(gens, gen); + sk_GENERAL_NAME_push(gens, gen); /* no failure as it was reserved */ } return gens; err: diff --git a/crypto/x509v3/v3_asid.c b/crypto/x509v3/v3_asid.c index af4fcf4c..089f2ae2 100644 --- a/crypto/x509v3/v3_asid.c +++ b/crypto/x509v3/v3_asid.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,6 +11,7 @@ * Implementation of RFC 3779 section 3.2. */ +#include #include #include #include "internal/cryptlib.h" @@ -123,13 +124,13 @@ static int ASIdOrRange_cmp(const ASIdOrRange *const *a_, { const ASIdOrRange *a = *a_, *b = *b_; - OPENSSL_assert((a->type == ASIdOrRange_id && a->u.id != NULL) || - (a->type == ASIdOrRange_range && a->u.range != NULL && - a->u.range->min != NULL && a->u.range->max != NULL)); + assert((a->type == ASIdOrRange_id && a->u.id != NULL) || + (a->type == ASIdOrRange_range && a->u.range != NULL && + a->u.range->min != NULL && a->u.range->max != NULL)); - OPENSSL_assert((b->type == ASIdOrRange_id && b->u.id != NULL) || - (b->type == ASIdOrRange_range && b->u.range != NULL && - b->u.range->min != NULL && b->u.range->max != NULL)); + assert((b->type == ASIdOrRange_id && b->u.id != NULL) || + (b->type == ASIdOrRange_range && b->u.range != NULL && + b->u.range->min != NULL && b->u.range->max != NULL)); if (a->type == ASIdOrRange_id && b->type == ASIdOrRange_id) return ASN1_INTEGER_cmp(a->u.id, b->u.id); @@ -167,7 +168,6 @@ int X509v3_asid_add_inherit(ASIdentifiers *asid, int which) if (*choice == NULL) { if ((*choice = ASIdentifierChoice_new()) == NULL) return 0; - OPENSSL_assert((*choice)->u.inherit == NULL); if (((*choice)->u.inherit = ASN1_NULL_new()) == NULL) return 0; (*choice)->type = ASIdentifierChoice_inherit; @@ -200,7 +200,6 @@ int X509v3_asid_add_id_or_range(ASIdentifiers *asid, if (*choice == NULL) { if ((*choice = ASIdentifierChoice_new()) == NULL) return 0; - OPENSSL_assert((*choice)->u.asIdsOrRanges == NULL); (*choice)->u.asIdsOrRanges = sk_ASIdOrRange_new(ASIdOrRange_cmp); if ((*choice)->u.asIdsOrRanges == NULL) return 0; @@ -232,20 +231,23 @@ int X509v3_asid_add_id_or_range(ASIdentifiers *asid, /* * Extract min and max values from an ASIdOrRange. */ -static void extract_min_max(ASIdOrRange *aor, - ASN1_INTEGER **min, ASN1_INTEGER **max) +static int extract_min_max(ASIdOrRange *aor, + ASN1_INTEGER **min, ASN1_INTEGER **max) { - OPENSSL_assert(aor != NULL && min != NULL && max != NULL); + if (!ossl_assert(aor != NULL)) + return 0; switch (aor->type) { case ASIdOrRange_id: *min = aor->u.id; *max = aor->u.id; - return; + return 1; case ASIdOrRange_range: *min = aor->u.range->min; *max = aor->u.range->max; - return; + return 1; } + + return 0; } /* @@ -279,8 +281,9 @@ static int ASIdentifierChoice_is_canonical(ASIdentifierChoice *choice) ASN1_INTEGER *a_min = NULL, *a_max = NULL, *b_min = NULL, *b_max = NULL; - extract_min_max(a, &a_min, &a_max); - extract_min_max(b, &b_min, &b_max); + if (!extract_min_max(a, &a_min, &a_max) + || !extract_min_max(b, &b_min, &b_max)) + goto done; /* * Punt misordered list, overlapping start, or inverted range. @@ -318,8 +321,8 @@ static int ASIdentifierChoice_is_canonical(ASIdentifierChoice *choice) ASIdOrRange *a = sk_ASIdOrRange_value(choice->u.asIdsOrRanges, i); ASN1_INTEGER *a_min, *a_max; if (a != NULL && a->type == ASIdOrRange_range) { - extract_min_max(a, &a_min, &a_max); - if (ASN1_INTEGER_cmp(a_min, a_max) > 0) + if (!extract_min_max(a, &a_min, &a_max) + || ASN1_INTEGER_cmp(a_min, a_max) > 0) goto done; } } @@ -382,13 +385,15 @@ static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice) ASN1_INTEGER *a_min = NULL, *a_max = NULL, *b_min = NULL, *b_max = NULL; - extract_min_max(a, &a_min, &a_max); - extract_min_max(b, &b_min, &b_max); + if (!extract_min_max(a, &a_min, &a_max) + || !extract_min_max(b, &b_min, &b_max)) + goto done; /* * Make sure we're properly sorted (paranoia). */ - OPENSSL_assert(ASN1_INTEGER_cmp(a_min, b_min) <= 0); + if (!ossl_assert(ASN1_INTEGER_cmp(a_min, b_min) <= 0)) + goto done; /* * Punt inverted ranges. @@ -464,13 +469,15 @@ static int ASIdentifierChoice_canonize(ASIdentifierChoice *choice) ASIdOrRange *a = sk_ASIdOrRange_value(choice->u.asIdsOrRanges, i); ASN1_INTEGER *a_min, *a_max; if (a != NULL && a->type == ASIdOrRange_range) { - extract_min_max(a, &a_min, &a_max); - if (ASN1_INTEGER_cmp(a_min, a_max) > 0) + if (!extract_min_max(a, &a_min, &a_max) + || ASN1_INTEGER_cmp(a_min, a_max) > 0) goto done; } } - OPENSSL_assert(ASIdentifierChoice_is_canonical(choice)); /* Paranoia */ + /* Paranoia */ + if (!ossl_assert(ASIdentifierChoice_is_canonical(choice))) + goto done; ret = 1; @@ -655,11 +662,14 @@ static int asid_contains(ASIdOrRanges *parent, ASIdOrRanges *child) p = 0; for (c = 0; c < sk_ASIdOrRange_num(child); c++) { - extract_min_max(sk_ASIdOrRange_value(child, c), &c_min, &c_max); + if (!extract_min_max(sk_ASIdOrRange_value(child, c), &c_min, &c_max)) + return 0; for (;; p++) { if (p >= sk_ASIdOrRange_num(parent)) return 0; - extract_min_max(sk_ASIdOrRange_value(parent, p), &p_min, &p_max); + if (!extract_min_max(sk_ASIdOrRange_value(parent, p), &p_min, + &p_max)) + return 0; if (ASN1_INTEGER_cmp(p_max, c_max) < 0) continue; if (ASN1_INTEGER_cmp(p_min, c_min) > 0) @@ -715,9 +725,14 @@ static int asid_validate_path_internal(X509_STORE_CTX *ctx, int i, ret = 1, inherit_as = 0, inherit_rdi = 0; X509 *x; - OPENSSL_assert(chain != NULL && sk_X509_num(chain) > 0); - OPENSSL_assert(ctx != NULL || ext != NULL); - OPENSSL_assert(ctx == NULL || ctx->verify_cb != NULL); + if (!ossl_assert(chain != NULL && sk_X509_num(chain) > 0) + || !ossl_assert(ctx != NULL || ext != NULL) + || !ossl_assert(ctx == NULL || ctx->verify_cb != NULL)) { + if (ctx != NULL) + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } + /* * Figure out where to start. If we don't have an extension to @@ -730,7 +745,6 @@ static int asid_validate_path_internal(X509_STORE_CTX *ctx, } else { i = 0; x = sk_X509_value(chain, i); - OPENSSL_assert(x != NULL); if ((ext = x->rfc3779_asid) == NULL) goto done; } @@ -763,7 +777,11 @@ static int asid_validate_path_internal(X509_STORE_CTX *ctx, */ for (i++; i < sk_X509_num(chain); i++) { x = sk_X509_value(chain, i); - OPENSSL_assert(x != NULL); + if (!ossl_assert(x != NULL)) { + if (ctx != NULL) + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } if (x->rfc3779_asid == NULL) { if (child_as != NULL || child_rdi != NULL) validation_err(X509_V_ERR_UNNESTED_RESOURCE); @@ -809,7 +827,11 @@ static int asid_validate_path_internal(X509_STORE_CTX *ctx, /* * Trust anchor can't inherit. */ - OPENSSL_assert(x != NULL); + if (!ossl_assert(x != NULL)) { + if (ctx != NULL) + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } if (x->rfc3779_asid != NULL) { if (x->rfc3779_asid->asnum != NULL && x->rfc3779_asid->asnum->type == ASIdentifierChoice_inherit) @@ -830,6 +852,12 @@ static int asid_validate_path_internal(X509_STORE_CTX *ctx, */ int X509v3_asid_validate_path(X509_STORE_CTX *ctx) { + if (ctx->chain == NULL + || sk_X509_num(ctx->chain) == 0 + || ctx->verify_cb == NULL) { + ctx->error = X509_V_ERR_UNSPECIFIED; + return 0; + } return asid_validate_path_internal(ctx, ctx->chain, NULL); } diff --git a/crypto/x509v3/v3_conf.c b/crypto/x509v3/v3_conf.c index 3cc5b14d..7acaebfa 100644 --- a/crypto/x509v3/v3_conf.c +++ b/crypto/x509v3/v3_conf.c @@ -10,7 +10,7 @@ /* extension creation utilities */ #include -#include +#include "internal/ctype.h" #include "internal/cryptlib.h" #include #include @@ -192,7 +192,7 @@ static int v3_check_critical(const char **value) if ((strlen(p) < 9) || strncmp(p, "critical,", 9)) return 0; p += 9; - while (isspace((unsigned char)*p)) + while (ossl_isspace(*p)) p++; *value = p; return 1; @@ -212,7 +212,7 @@ static int v3_check_generic(const char **value) } else return 0; - while (isspace((unsigned char)*p)) + while (ossl_isspace(*p)) p++; *value = p; return gen_type; diff --git a/crypto/x509v3/v3_cpols.c b/crypto/x509v3/v3_cpols.c index 22c56ba3..51fbb1f0 100644 --- a/crypto/x509v3/v3_cpols.c +++ b/crypto/x509v3/v3_cpols.c @@ -31,6 +31,8 @@ static POLICYINFO *policy_section(X509V3_CTX *ctx, static POLICYQUALINFO *notice_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *unot, int ia5org); static int nref_nos(STACK_OF(ASN1_INTEGER) *nnums, STACK_OF(CONF_VALUE) *nos); +static int displaytext_str2tag(const char *tagstr, unsigned int *tag_len); +static int displaytext_get_tag_len(const char *tagstr); const X509V3_EXT_METHOD v3_cpols = { NID_certificate_policies, 0, ASN1_ITEM_ref(CERTIFICATEPOLICIES), @@ -86,26 +88,30 @@ IMPLEMENT_ASN1_FUNCTIONS(NOTICEREF) static STACK_OF(POLICYINFO) *r2i_certpol(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, const char *value) { - STACK_OF(POLICYINFO) *pols = NULL; + STACK_OF(POLICYINFO) *pols; char *pstr; POLICYINFO *pol; ASN1_OBJECT *pobj; - STACK_OF(CONF_VALUE) *vals; + STACK_OF(CONF_VALUE) *vals = X509V3_parse_list(value); CONF_VALUE *cnf; + const int num = sk_CONF_VALUE_num(vals); int i, ia5org; - pols = sk_POLICYINFO_new_null(); - if (pols == NULL) { - X509V3err(X509V3_F_R2I_CERTPOL, ERR_R_MALLOC_FAILURE); - return NULL; - } - vals = X509V3_parse_list(value); + if (vals == NULL) { X509V3err(X509V3_F_R2I_CERTPOL, ERR_R_X509V3_LIB); + return NULL; + } + + pols = sk_POLICYINFO_new_reserve(NULL, num); + if (pols == NULL) { + X509V3err(X509V3_F_R2I_CERTPOL, ERR_R_MALLOC_FAILURE); goto err; } + ia5org = 0; - for (i = 0; i < sk_CONF_VALUE_num(vals); i++) { + for (i = 0; i < num; i++) { cnf = sk_CONF_VALUE_value(vals, i); + if (cnf->value || !cnf->name) { X509V3err(X509V3_F_R2I_CERTPOL, X509V3_R_INVALID_POLICY_IDENTIFIER); @@ -239,16 +245,50 @@ static POLICYINFO *policy_section(X509V3_CTX *ctx, err: POLICYINFO_free(pol); return NULL; +} +static int displaytext_get_tag_len(const char *tagstr) +{ + char *colon = strchr(tagstr, ':'); + + return (colon == NULL) ? -1 : colon - tagstr; +} + +static int displaytext_str2tag(const char *tagstr, unsigned int *tag_len) +{ + int len; + + *tag_len = 0; + len = displaytext_get_tag_len(tagstr); + + if (len == -1) + return V_ASN1_VISIBLESTRING; + *tag_len = len; + if (len == sizeof("UTF8") - 1 && strncmp(tagstr, "UTF8", len) == 0) + return V_ASN1_UTF8STRING; + if (len == sizeof("UTF8String") - 1 && strncmp(tagstr, "UTF8String", len) == 0) + return V_ASN1_UTF8STRING; + if (len == sizeof("BMP") - 1 && strncmp(tagstr, "BMP", len) == 0) + return V_ASN1_BMPSTRING; + if (len == sizeof("BMPSTRING") - 1 && strncmp(tagstr, "BMPSTRING", len) == 0) + return V_ASN1_BMPSTRING; + if (len == sizeof("VISIBLE") - 1 && strncmp(tagstr, "VISIBLE", len) == 0) + return V_ASN1_VISIBLESTRING; + if (len == sizeof("VISIBLESTRING") - 1 && strncmp(tagstr, "VISIBLESTRING", len) == 0) + return V_ASN1_VISIBLESTRING; + *tag_len = 0; + return V_ASN1_VISIBLESTRING; } static POLICYQUALINFO *notice_section(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *unot, int ia5org) { - int i, ret; + int i, ret, len, tag; + unsigned int tag_len; CONF_VALUE *cnf; USERNOTICE *not; POLICYQUALINFO *qual; + char *value = NULL; if ((qual = POLICYQUALINFO_new()) == NULL) goto merr; @@ -261,11 +301,15 @@ static POLICYQUALINFO *notice_section(X509V3_CTX *ctx, qual->d.usernotice = not; for (i = 0; i < sk_CONF_VALUE_num(unot); i++) { cnf = sk_CONF_VALUE_value(unot, i); + value = cnf->value; if (strcmp(cnf->name, "explicitText") == 0) { - if ((not->exptext = ASN1_VISIBLESTRING_new()) == NULL) + tag = displaytext_str2tag(value, &tag_len); + if ((not->exptext = ASN1_STRING_type_new(tag)) == NULL) goto merr; - if (!ASN1_STRING_set(not->exptext, cnf->value, - strlen(cnf->value))) + if (tag_len != 0) + value += tag_len + 1; + len = strlen(value); + if (!ASN1_STRING_set(not->exptext, value, len)) goto merr; } else if (strcmp(cnf->name, "organization") == 0) { NOTICEREF *nref; diff --git a/crypto/x509v3/v3_crld.c b/crypto/x509v3/v3_crld.c index c4c77f18..6cba4240 100644 --- a/crypto/x509v3/v3_crld.c +++ b/crypto/x509v3/v3_crld.c @@ -205,8 +205,8 @@ static DIST_POINT *crldp_from_section(X509V3_CTX *ctx, { int i; CONF_VALUE *cnf; - DIST_POINT *point = NULL; - point = DIST_POINT_new(); + DIST_POINT *point = DIST_POINT_new(); + if (point == NULL) goto err; for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { @@ -237,16 +237,19 @@ static DIST_POINT *crldp_from_section(X509V3_CTX *ctx, static void *v2i_crld(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { - STACK_OF(DIST_POINT) *crld = NULL; + STACK_OF(DIST_POINT) *crld; GENERAL_NAMES *gens = NULL; GENERAL_NAME *gen = NULL; CONF_VALUE *cnf; + const int num = sk_CONF_VALUE_num(nval); int i; - if ((crld = sk_DIST_POINT_new_null()) == NULL) + crld = sk_DIST_POINT_new_reserve(NULL, num); + if (crld == NULL) goto merr; - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { + for (i = 0; i < num; i++) { DIST_POINT *point; + cnf = sk_CONF_VALUE_value(nval, i); if (!cnf->value) { STACK_OF(CONF_VALUE) *dpsect; @@ -257,10 +260,7 @@ static void *v2i_crld(const X509V3_EXT_METHOD *method, X509V3_section_free(ctx, dpsect); if (!point) goto err; - if (!sk_DIST_POINT_push(crld, point)) { - DIST_POINT_free(point); - goto merr; - } + sk_DIST_POINT_push(crld, point); /* no failure as it was reserved */ } else { if ((gen = v2i_GENERAL_NAME(method, ctx, cnf)) == NULL) goto err; @@ -271,10 +271,7 @@ static void *v2i_crld(const X509V3_EXT_METHOD *method, gen = NULL; if ((point = DIST_POINT_new()) == NULL) goto merr; - if (!sk_DIST_POINT_push(crld, point)) { - DIST_POINT_free(point); - goto merr; - } + sk_DIST_POINT_push(crld, point); /* no failure as it was reserved */ if ((point->distpoint = DIST_POINT_NAME_new()) == NULL) goto merr; point->distpoint->name.fullname = gens; diff --git a/crypto/x509v3/v3_enum.c b/crypto/x509v3/v3_enum.c index f39cb5ac..3b0f1974 100644 --- a/crypto/x509v3/v3_enum.c +++ b/crypto/x509v3/v3_enum.c @@ -38,7 +38,7 @@ const X509V3_EXT_METHOD v3_crl_reason = { crl_reasons }; -char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *method, +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *method, const ASN1_ENUMERATED *e) { ENUMERATED_NAMES *enam; diff --git a/crypto/x509v3/v3_extku.c b/crypto/x509v3/v3_extku.c index bae755e3..91b24376 100644 --- a/crypto/x509v3/v3_extku.c +++ b/crypto/x509v3/v3_extku.c @@ -74,14 +74,17 @@ static void *v2i_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD *method, char *extval; ASN1_OBJECT *objtmp; CONF_VALUE *val; + const int num = sk_CONF_VALUE_num(nval); int i; - if ((extku = sk_ASN1_OBJECT_new_null()) == NULL) { + extku = sk_ASN1_OBJECT_new_reserve(NULL, num); + if (extku == NULL) { X509V3err(X509V3_F_V2I_EXTENDED_KEY_USAGE, ERR_R_MALLOC_FAILURE); + sk_ASN1_OBJECT_free(extku); return NULL; } - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { + for (i = 0; i < num; i++) { val = sk_CONF_VALUE_value(nval, i); if (val->value) extval = val->value; @@ -94,7 +97,7 @@ static void *v2i_EXTENDED_KEY_USAGE(const X509V3_EXT_METHOD *method, X509V3_conf_err(val); return NULL; } - sk_ASN1_OBJECT_push(extku, objtmp); + sk_ASN1_OBJECT_push(extku, objtmp); /* no failure as it was reserved */ } return extku; } diff --git a/crypto/x509v3/v3_info.c b/crypto/x509v3/v3_info.c index a0bca5fb..7af9e23a 100644 --- a/crypto/x509v3/v3_info.c +++ b/crypto/x509v3/v3_info.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -78,16 +78,13 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS( tret = tmp; vtmp = sk_CONF_VALUE_value(tret, i); i2t_ASN1_OBJECT(objtmp, sizeof(objtmp), desc->method); - nlen = strlen(objtmp) + strlen(vtmp->name) + 5; + nlen = strlen(objtmp) + 3 + strlen(vtmp->name) + 1; ntmp = OPENSSL_malloc(nlen); if (ntmp == NULL) goto err; - OPENSSL_strlcpy(ntmp, objtmp, nlen); - OPENSSL_strlcat(ntmp, " - ", nlen); - OPENSSL_strlcat(ntmp, vtmp->name, nlen); + BIO_snprintf(ntmp, nlen, "%s - %s", objtmp, vtmp->name); OPENSSL_free(vtmp->name); vtmp->name = ntmp; - } if (ret == NULL && tret == NULL) return sk_CONF_VALUE_new_null(); @@ -110,20 +107,21 @@ static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD CONF_VALUE *cnf, ctmp; ACCESS_DESCRIPTION *acc; int i, objlen; + const int num = sk_CONF_VALUE_num(nval); char *objtmp, *ptmp; - if ((ainfo = sk_ACCESS_DESCRIPTION_new_null()) == NULL) { + if ((ainfo = sk_ACCESS_DESCRIPTION_new_reserve(NULL, num)) == NULL) { X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, ERR_R_MALLOC_FAILURE); return NULL; } - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { + for (i = 0; i < num; i++) { cnf = sk_CONF_VALUE_value(nval, i); - if ((acc = ACCESS_DESCRIPTION_new()) == NULL - || !sk_ACCESS_DESCRIPTION_push(ainfo, acc)) { + if ((acc = ACCESS_DESCRIPTION_new()) == NULL) { X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, ERR_R_MALLOC_FAILURE); goto err; } + sk_ACCESS_DESCRIPTION_push(ainfo, acc); /* Cannot fail due to reserve */ ptmp = strchr(cnf->name, ';'); if (!ptmp) { X509V3err(X509V3_F_V2I_AUTHORITY_INFO_ACCESS, diff --git a/crypto/x509v3/v3_lib.c b/crypto/x509v3/v3_lib.c index d7143086..f51aa962 100644 --- a/crypto/x509v3/v3_lib.c +++ b/crypto/x509v3/v3_lib.c @@ -47,73 +47,7 @@ DECLARE_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, IMPLEMENT_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, const X509V3_EXT_METHOD *, ext); -/* - * This table will be searched using OBJ_bsearch so it *must* kept in order - * of the ext_nid values. - */ - -static const X509V3_EXT_METHOD *standard_exts[] = { - &v3_nscert, - &v3_ns_ia5_list[0], - &v3_ns_ia5_list[1], - &v3_ns_ia5_list[2], - &v3_ns_ia5_list[3], - &v3_ns_ia5_list[4], - &v3_ns_ia5_list[5], - &v3_ns_ia5_list[6], - &v3_skey_id, - &v3_key_usage, - &v3_pkey_usage_period, - &v3_alt[0], - &v3_alt[1], - &v3_bcons, - &v3_crl_num, - &v3_cpols, - &v3_akey_id, - &v3_crld, - &v3_ext_ku, - &v3_delta_crl, - &v3_crl_reason, -#ifndef OPENSSL_NO_OCSP - &v3_crl_invdate, -#endif - &v3_sxnet, - &v3_info, -#ifndef OPENSSL_NO_RFC3779 - &v3_addr, - &v3_asid, -#endif -#ifndef OPENSSL_NO_OCSP - &v3_ocsp_nonce, - &v3_ocsp_crlid, - &v3_ocsp_accresp, - &v3_ocsp_nocheck, - &v3_ocsp_acutoff, - &v3_ocsp_serviceloc, -#endif - &v3_sinfo, - &v3_policy_constraints, -#ifndef OPENSSL_NO_OCSP - &v3_crl_hold, -#endif - &v3_pci, - &v3_name_constraints, - &v3_policy_mappings, - &v3_inhibit_anyp, - &v3_idp, - &v3_alt[2], - &v3_freshest_crl, -#ifndef OPENSSL_NO_CT - &v3_ct_scts[0], - &v3_ct_scts[1], - &v3_ct_scts[2], -#endif - &v3_tls_feature, -}; - -/* Number of standard extensions */ - -#define STANDARD_EXTENSION_COUNT OSSL_NELEM(standard_exts) +#include "standard_exts.h" const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid) { diff --git a/crypto/x509v3/v3_ncons.c b/crypto/x509v3/v3_ncons.c index 2eec405a..1f1996b6 100644 --- a/crypto/x509v3/v3_ncons.c +++ b/crypto/x509v3/v3_ncons.c @@ -1,5 +1,5 @@ /* - * Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,9 +7,9 @@ * https://www.openssl.org/source/license.html */ -#include #include "internal/cryptlib.h" #include "internal/numbers.h" +#include #include "internal/asn1_int.h" #include #include @@ -316,6 +316,7 @@ int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc) for (i = -1;;) { X509_NAME_ENTRY *ne; ASN1_STRING *hn; + i = X509_NAME_get_index_by_NID(nm, NID_commonName, i); if (i == -1) break; diff --git a/crypto/x509v3/v3_pci.c b/crypto/x509v3/v3_pci.c index 2c05edb8..3d124fa6 100644 --- a/crypto/x509v3/v3_pci.c +++ b/crypto/x509v3/v3_pci.c @@ -7,7 +7,11 @@ * https://www.openssl.org/source/license.html */ -/* Copyright (c) 2004 Kungliga Tekniska Högskolan +/* + * This file is dual-licensed and is also available under the following + * terms: + * + * Copyright (c) 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * diff --git a/crypto/x509v3/v3_pcia.c b/crypto/x509v3/v3_pcia.c index e6f7a917..8d6af60e 100644 --- a/crypto/x509v3/v3_pcia.c +++ b/crypto/x509v3/v3_pcia.c @@ -7,7 +7,11 @@ * https://www.openssl.org/source/license.html */ -/* Copyright (c) 2004 Kungliga Tekniska Högskolan +/* + * This file is dual-licensed and is also available under the following + * terms: + * + * Copyright (c) 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * diff --git a/crypto/x509v3/v3_pku.c b/crypto/x509v3/v3_pku.c index ed82bca8..5a7e7d97 100644 --- a/crypto/x509v3/v3_pku.c +++ b/crypto/x509v3/v3_pku.c @@ -17,10 +17,7 @@ static int i2r_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method, PKEY_USAGE_PERIOD *usage, BIO *out, int indent); -/* - * static PKEY_USAGE_PERIOD *v2i_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method, - * X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *values); - */ + const X509V3_EXT_METHOD v3_pkey_usage_period = { NID_private_key_usage_period, 0, ASN1_ITEM_ref(PKEY_USAGE_PERIOD), 0, 0, 0, 0, @@ -53,13 +50,3 @@ static int i2r_PKEY_USAGE_PERIOD(X509V3_EXT_METHOD *method, } return 1; } - -/*- -static PKEY_USAGE_PERIOD *v2i_PKEY_USAGE_PERIOD(method, ctx, values) -X509V3_EXT_METHOD *method; -X509V3_CTX *ctx; -STACK_OF(CONF_VALUE) *values; -{ -return NULL; -} -*/ diff --git a/crypto/x509v3/v3_pmaps.c b/crypto/x509v3/v3_pmaps.c index 73f4ec24..5b6a2af0 100644 --- a/crypto/x509v3/v3_pmaps.c +++ b/crypto/x509v3/v3_pmaps.c @@ -52,6 +52,7 @@ static STACK_OF(CONF_VALUE) *i2v_POLICY_MAPPINGS(const X509V3_EXT_METHOD int i; char obj_tmp1[80]; char obj_tmp2[80]; + for (i = 0; i < sk_POLICY_MAPPING_num(pmaps); i++) { pmap = sk_POLICY_MAPPING_value(pmaps, i); i2t_ASN1_OBJECT(obj_tmp1, 80, pmap->issuerDomainPolicy); @@ -64,18 +65,19 @@ static STACK_OF(CONF_VALUE) *i2v_POLICY_MAPPINGS(const X509V3_EXT_METHOD static void *v2i_POLICY_MAPPINGS(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { - POLICY_MAPPINGS *pmaps = NULL; POLICY_MAPPING *pmap = NULL; ASN1_OBJECT *obj1 = NULL, *obj2 = NULL; CONF_VALUE *val; + POLICY_MAPPINGS *pmaps; + const int num = sk_CONF_VALUE_num(nval); int i; - if ((pmaps = sk_POLICY_MAPPING_new_null()) == NULL) { + if ((pmaps = sk_POLICY_MAPPING_new_reserve(NULL, num)) == NULL) { X509V3err(X509V3_F_V2I_POLICY_MAPPINGS, ERR_R_MALLOC_FAILURE); return NULL; } - for (i = 0; i < sk_CONF_VALUE_num(nval); i++) { + for (i = 0; i < num; i++) { val = sk_CONF_VALUE_value(nval, i); if (!val->value || !val->name) { X509V3err(X509V3_F_V2I_POLICY_MAPPINGS, @@ -99,7 +101,7 @@ static void *v2i_POLICY_MAPPINGS(const X509V3_EXT_METHOD *method, pmap->issuerDomainPolicy = obj1; pmap->subjectDomainPolicy = obj2; obj1 = obj2 = NULL; - sk_POLICY_MAPPING_push(pmaps, pmap); + sk_POLICY_MAPPING_push(pmaps, pmap); /* no failure as it was reserved */ } return pmaps; err: diff --git a/crypto/x509v3/v3_purp.c b/crypto/x509v3/v3_purp.c index 6d2f354d..d344e2df 100644 --- a/crypto/x509v3/v3_purp.c +++ b/crypto/x509v3/v3_purp.c @@ -488,6 +488,7 @@ static void x509v3_cache_extensions(X509 *x) break; } } + x509_init_sig_info(x); x->ex_flags |= EXFLAG_SET; } diff --git a/crypto/x509v3/v3_skey.c b/crypto/x509v3/v3_skey.c index 39597dc4..749f51b2 100644 --- a/crypto/x509v3/v3_skey.c +++ b/crypto/x509v3/v3_skey.c @@ -24,7 +24,7 @@ const X509V3_EXT_METHOD v3_skey_id = { NULL }; -char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, const ASN1_OCTET_STRING *oct) { return OPENSSL_buf2hexstr(oct->data, oct->length); diff --git a/crypto/x509v3/v3_tlsf.c b/crypto/x509v3/v3_tlsf.c index fec67243..5f2d5d2c 100644 --- a/crypto/x509v3/v3_tlsf.c +++ b/crypto/x509v3/v3_tlsf.c @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -7,8 +7,9 @@ * https://www.openssl.org/source/license.html */ -#include +#include "e_os.h" #include "internal/cryptlib.h" +#include #include "internal/o_str.h" #include #include diff --git a/crypto/x509v3/v3_utl.c b/crypto/x509v3/v3_utl.c index 418ef06a..c9b40d2c 100644 --- a/crypto/x509v3/v3_utl.c +++ b/crypto/x509v3/v3_utl.c @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-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 @@ -9,9 +9,10 @@ /* X509 v3 extension utilities */ -#include -#include +#include "e_os.h" #include "internal/cryptlib.h" +#include +#include "internal/ctype.h" #include #include #include @@ -377,12 +378,12 @@ static char *strip_spaces(char *name) char *p, *q; /* Skip over leading spaces */ p = name; - while (*p && isspace((unsigned char)*p)) + while (*p && ossl_isspace(*p)) p++; if (!*p) return NULL; q = p + strlen(p) - 1; - while ((q != p) && isspace((unsigned char)*q)) + while ((q != p) && ossl_isspace(*q)) q--; if (p != q) q[1] = 0; @@ -467,11 +468,11 @@ static STACK_OF(OPENSSL_STRING) *get_email(X509_NAME *name, { STACK_OF(OPENSSL_STRING) *ret = NULL; X509_NAME_ENTRY *ne; - ASN1_IA5STRING *email; + const ASN1_IA5STRING *email; GENERAL_NAME *gen; - int i; + int i = -1; + /* Now add any email address(es) to STACK */ - i = -1; /* First supplied X509_NAME */ while ((i = X509_NAME_get_index_by_NID(name, NID_pkcs9_emailAddress, i)) >= 0) { diff --git a/crypto/x509v3/v3conf.c b/crypto/x509v3/v3conf.c deleted file mode 100644 index 966ab90b..00000000 --- a/crypto/x509v3/v3conf.c +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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 - */ - -#include -#include "internal/cryptlib.h" -#include -#include -#include -#include - -/* Test application to add extensions from a config file */ - -int main(int argc, char **argv) -{ - LHASH *conf; - X509 *cert; - FILE *inf; - char *conf_file; - int i; - int count; - X509_EXTENSION *ext; - X509V3_add_standard_extensions(); - ERR_load_crypto_strings(); - if (!argv[1]) { - fprintf(stderr, "Usage: v3conf cert.pem [file.cnf]\n"); - exit(1); - } - conf_file = argv[2]; - if (!conf_file) - conf_file = "test.cnf"; - conf = CONF_load(NULL, "test.cnf", NULL); - if (!conf) { - fprintf(stderr, "Error opening Config file %s\n", conf_file); - ERR_print_errors_fp(stderr); - exit(1); - } - - inf = fopen(argv[1], "r"); - if (!inf) { - fprintf(stderr, "Can't open certificate file %s\n", argv[1]); - exit(1); - } - cert = PEM_read_X509(inf, NULL, NULL); - if (!cert) { - fprintf(stderr, "Error reading certificate file %s\n", argv[1]); - exit(1); - } - fclose(inf); - - sk_pop_free(cert->cert_info->extensions, X509_EXTENSION_free); - cert->cert_info->extensions = NULL; - - if (!X509V3_EXT_add_conf(conf, NULL, "test_section", cert)) { - fprintf(stderr, "Error adding extensions\n"); - ERR_print_errors_fp(stderr); - exit(1); - } - - count = X509_get_ext_count(cert); - printf("%d extensions\n", count); - for (i = 0; i < count; i++) { - ext = X509_get_ext(cert, i); - printf("%s", OBJ_nid2ln(OBJ_obj2nid(ext->object))); - if (ext->critical) - printf(",critical:\n"); - else - printf(":\n"); - X509V3_EXT_print_fp(stdout, ext, 0, 0); - printf("\n"); - - } - return 0; -} diff --git a/crypto/x509v3/v3err.c b/crypto/x509v3/v3err.c index d5987913..6f30ba3a 100644 --- a/crypto/x509v3/v3err.c +++ b/crypto/x509v3/v3err.c @@ -8,168 +8,231 @@ * https://www.openssl.org/source/license.html */ -#include #include -#include +#include -/* BEGIN ERROR CODES */ #ifndef OPENSSL_NO_ERR -# define ERR_FUNC(func) ERR_PACK(ERR_LIB_X509V3,func,0) -# define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason) - -static ERR_STRING_DATA X509V3_str_functs[] = { - {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "a2i_GENERAL_NAME"}, - {ERR_FUNC(X509V3_F_ADDR_VALIDATE_PATH_INTERNAL), +static const ERR_STRING_DATA X509V3_str_functs[] = { + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_A2I_GENERAL_NAME, 0), + "a2i_GENERAL_NAME"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_ADDR_VALIDATE_PATH_INTERNAL, 0), "addr_validate_path_internal"}, - {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE), + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_ASIDENTIFIERCHOICE_CANONIZE, 0), "ASIdentifierChoice_canonize"}, - {ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL), + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL, 0), "ASIdentifierChoice_is_canonical"}, - {ERR_FUNC(X509V3_F_BIGNUM_TO_STRING), "bignum_to_string"}, - {ERR_FUNC(X509V3_F_COPY_EMAIL), "copy_email"}, - {ERR_FUNC(X509V3_F_COPY_ISSUER), "copy_issuer"}, - {ERR_FUNC(X509V3_F_DO_DIRNAME), "do_dirname"}, - {ERR_FUNC(X509V3_F_DO_EXT_I2D), "do_ext_i2d"}, - {ERR_FUNC(X509V3_F_DO_EXT_NCONF), "do_ext_nconf"}, - {ERR_FUNC(X509V3_F_GNAMES_FROM_SECTNAME), "gnames_from_sectname"}, - {ERR_FUNC(X509V3_F_I2S_ASN1_ENUMERATED), "i2s_ASN1_ENUMERATED"}, - {ERR_FUNC(X509V3_F_I2S_ASN1_IA5STRING), "i2s_ASN1_IA5STRING"}, - {ERR_FUNC(X509V3_F_I2S_ASN1_INTEGER), "i2s_ASN1_INTEGER"}, - {ERR_FUNC(X509V3_F_I2V_AUTHORITY_INFO_ACCESS), + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_BIGNUM_TO_STRING, 0), + "bignum_to_string"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_COPY_EMAIL, 0), "copy_email"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_COPY_ISSUER, 0), "copy_issuer"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_DO_DIRNAME, 0), "do_dirname"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_DO_EXT_I2D, 0), "do_ext_i2d"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_DO_EXT_NCONF, 0), "do_ext_nconf"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_GNAMES_FROM_SECTNAME, 0), + "gnames_from_sectname"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2S_ASN1_ENUMERATED, 0), + "i2s_ASN1_ENUMERATED"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2S_ASN1_IA5STRING, 0), + "i2s_ASN1_IA5STRING"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2S_ASN1_INTEGER, 0), + "i2s_ASN1_INTEGER"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2V_AUTHORITY_INFO_ACCESS, 0), "i2v_AUTHORITY_INFO_ACCESS"}, - {ERR_FUNC(X509V3_F_NOTICE_SECTION), "notice_section"}, - {ERR_FUNC(X509V3_F_NREF_NOS), "nref_nos"}, - {ERR_FUNC(X509V3_F_POLICY_SECTION), "policy_section"}, - {ERR_FUNC(X509V3_F_PROCESS_PCI_VALUE), "process_pci_value"}, - {ERR_FUNC(X509V3_F_R2I_CERTPOL), "r2i_certpol"}, - {ERR_FUNC(X509V3_F_R2I_PCI), "r2i_pci"}, - {ERR_FUNC(X509V3_F_S2I_ASN1_IA5STRING), "s2i_ASN1_IA5STRING"}, - {ERR_FUNC(X509V3_F_S2I_ASN1_INTEGER), "s2i_ASN1_INTEGER"}, - {ERR_FUNC(X509V3_F_S2I_ASN1_OCTET_STRING), "s2i_ASN1_OCTET_STRING"}, - {ERR_FUNC(X509V3_F_S2I_SKEY_ID), "s2i_skey_id"}, - {ERR_FUNC(X509V3_F_SET_DIST_POINT_NAME), "set_dist_point_name"}, - {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ASC), "SXNET_add_id_asc"}, - {ERR_FUNC(X509V3_F_SXNET_ADD_ID_INTEGER), "SXNET_add_id_INTEGER"}, - {ERR_FUNC(X509V3_F_SXNET_ADD_ID_ULONG), "SXNET_add_id_ulong"}, - {ERR_FUNC(X509V3_F_SXNET_GET_ID_ASC), "SXNET_get_id_asc"}, - {ERR_FUNC(X509V3_F_SXNET_GET_ID_ULONG), "SXNET_get_id_ulong"}, - {ERR_FUNC(X509V3_F_V2I_ASIDENTIFIERS), "v2i_ASIdentifiers"}, - {ERR_FUNC(X509V3_F_V2I_ASN1_BIT_STRING), "v2i_ASN1_BIT_STRING"}, - {ERR_FUNC(X509V3_F_V2I_AUTHORITY_INFO_ACCESS), + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_NOTICE_SECTION, 0), "notice_section"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_NREF_NOS, 0), "nref_nos"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_POLICY_SECTION, 0), "policy_section"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_PROCESS_PCI_VALUE, 0), + "process_pci_value"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_R2I_CERTPOL, 0), "r2i_certpol"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_R2I_PCI, 0), "r2i_pci"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_ASN1_IA5STRING, 0), + "s2i_ASN1_IA5STRING"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_ASN1_INTEGER, 0), + "s2i_ASN1_INTEGER"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_ASN1_OCTET_STRING, 0), + "s2i_ASN1_OCTET_STRING"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_S2I_SKEY_ID, 0), "s2i_skey_id"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SET_DIST_POINT_NAME, 0), + "set_dist_point_name"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_ADD_ID_ASC, 0), + "SXNET_add_id_asc"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_ADD_ID_INTEGER, 0), + "SXNET_add_id_INTEGER"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_ADD_ID_ULONG, 0), + "SXNET_add_id_ulong"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_GET_ID_ASC, 0), + "SXNET_get_id_asc"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_SXNET_GET_ID_ULONG, 0), + "SXNET_get_id_ulong"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_ASIDENTIFIERS, 0), + "v2i_ASIdentifiers"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_ASN1_BIT_STRING, 0), + "v2i_ASN1_BIT_STRING"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_AUTHORITY_INFO_ACCESS, 0), "v2i_AUTHORITY_INFO_ACCESS"}, - {ERR_FUNC(X509V3_F_V2I_AUTHORITY_KEYID), "v2i_AUTHORITY_KEYID"}, - {ERR_FUNC(X509V3_F_V2I_BASIC_CONSTRAINTS), "v2i_BASIC_CONSTRAINTS"}, - {ERR_FUNC(X509V3_F_V2I_CRLD), "v2i_crld"}, - {ERR_FUNC(X509V3_F_V2I_EXTENDED_KEY_USAGE), "v2i_EXTENDED_KEY_USAGE"}, - {ERR_FUNC(X509V3_F_V2I_GENERAL_NAMES), "v2i_GENERAL_NAMES"}, - {ERR_FUNC(X509V3_F_V2I_GENERAL_NAME_EX), "v2i_GENERAL_NAME_ex"}, - {ERR_FUNC(X509V3_F_V2I_IDP), "v2i_idp"}, - {ERR_FUNC(X509V3_F_V2I_IPADDRBLOCKS), "v2i_IPAddrBlocks"}, - {ERR_FUNC(X509V3_F_V2I_ISSUER_ALT), "v2i_issuer_alt"}, - {ERR_FUNC(X509V3_F_V2I_NAME_CONSTRAINTS), "v2i_NAME_CONSTRAINTS"}, - {ERR_FUNC(X509V3_F_V2I_POLICY_CONSTRAINTS), "v2i_POLICY_CONSTRAINTS"}, - {ERR_FUNC(X509V3_F_V2I_POLICY_MAPPINGS), "v2i_POLICY_MAPPINGS"}, - {ERR_FUNC(X509V3_F_V2I_SUBJECT_ALT), "v2i_subject_alt"}, - {ERR_FUNC(X509V3_F_V2I_TLS_FEATURE), "v2i_TLS_FEATURE"}, - {ERR_FUNC(X509V3_F_V3_GENERIC_EXTENSION), "v3_generic_extension"}, - {ERR_FUNC(X509V3_F_X509V3_ADD1_I2D), "X509V3_add1_i2d"}, - {ERR_FUNC(X509V3_F_X509V3_ADD_VALUE), "X509V3_add_value"}, - {ERR_FUNC(X509V3_F_X509V3_EXT_ADD), "X509V3_EXT_add"}, - {ERR_FUNC(X509V3_F_X509V3_EXT_ADD_ALIAS), "X509V3_EXT_add_alias"}, - {ERR_FUNC(X509V3_F_X509V3_EXT_I2D), "X509V3_EXT_i2d"}, - {ERR_FUNC(X509V3_F_X509V3_EXT_NCONF), "X509V3_EXT_nconf"}, - {ERR_FUNC(X509V3_F_X509V3_GET_SECTION), "X509V3_get_section"}, - {ERR_FUNC(X509V3_F_X509V3_GET_STRING), "X509V3_get_string"}, - {ERR_FUNC(X509V3_F_X509V3_GET_VALUE_BOOL), "X509V3_get_value_bool"}, - {ERR_FUNC(X509V3_F_X509V3_PARSE_LIST), "X509V3_parse_list"}, - {ERR_FUNC(X509V3_F_X509_PURPOSE_ADD), "X509_PURPOSE_add"}, - {ERR_FUNC(X509V3_F_X509_PURPOSE_SET), "X509_PURPOSE_set"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_AUTHORITY_KEYID, 0), + "v2i_AUTHORITY_KEYID"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_BASIC_CONSTRAINTS, 0), + "v2i_BASIC_CONSTRAINTS"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_CRLD, 0), "v2i_crld"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_EXTENDED_KEY_USAGE, 0), + "v2i_EXTENDED_KEY_USAGE"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_GENERAL_NAMES, 0), + "v2i_GENERAL_NAMES"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_GENERAL_NAME_EX, 0), + "v2i_GENERAL_NAME_ex"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_IDP, 0), "v2i_idp"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_IPADDRBLOCKS, 0), + "v2i_IPAddrBlocks"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_ISSUER_ALT, 0), "v2i_issuer_alt"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_NAME_CONSTRAINTS, 0), + "v2i_NAME_CONSTRAINTS"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_POLICY_CONSTRAINTS, 0), + "v2i_POLICY_CONSTRAINTS"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_POLICY_MAPPINGS, 0), + "v2i_POLICY_MAPPINGS"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_SUBJECT_ALT, 0), "v2i_subject_alt"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V2I_TLS_FEATURE, 0), "v2i_TLS_FEATURE"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V3_GENERIC_EXTENSION, 0), + "v3_generic_extension"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD1_I2D, 0), "X509V3_add1_i2d"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD_VALUE, 0), + "X509V3_add_value"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_ADD, 0), "X509V3_EXT_add"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_ADD_ALIAS, 0), + "X509V3_EXT_add_alias"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_I2D, 0), "X509V3_EXT_i2d"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_NCONF, 0), + "X509V3_EXT_nconf"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_GET_SECTION, 0), + "X509V3_get_section"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_GET_STRING, 0), + "X509V3_get_string"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_GET_VALUE_BOOL, 0), + "X509V3_get_value_bool"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_PARSE_LIST, 0), + "X509V3_parse_list"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509_PURPOSE_ADD, 0), + "X509_PURPOSE_add"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509_PURPOSE_SET, 0), + "X509_PURPOSE_set"}, {0, NULL} }; -static ERR_STRING_DATA X509V3_str_reasons[] = { - {ERR_REASON(X509V3_R_BAD_IP_ADDRESS), "bad ip address"}, - {ERR_REASON(X509V3_R_BAD_OBJECT), "bad object"}, - {ERR_REASON(X509V3_R_BN_DEC2BN_ERROR), "bn dec2bn error"}, - {ERR_REASON(X509V3_R_BN_TO_ASN1_INTEGER_ERROR), - "bn to asn1 integer error"}, - {ERR_REASON(X509V3_R_DIRNAME_ERROR), "dirname error"}, - {ERR_REASON(X509V3_R_DISTPOINT_ALREADY_SET), "distpoint already set"}, - {ERR_REASON(X509V3_R_DUPLICATE_ZONE_ID), "duplicate zone id"}, - {ERR_REASON(X509V3_R_ERROR_CONVERTING_ZONE), "error converting zone"}, - {ERR_REASON(X509V3_R_ERROR_CREATING_EXTENSION), - "error creating extension"}, - {ERR_REASON(X509V3_R_ERROR_IN_EXTENSION), "error in extension"}, - {ERR_REASON(X509V3_R_EXPECTED_A_SECTION_NAME), "expected a section name"}, - {ERR_REASON(X509V3_R_EXTENSION_EXISTS), "extension exists"}, - {ERR_REASON(X509V3_R_EXTENSION_NAME_ERROR), "extension name error"}, - {ERR_REASON(X509V3_R_EXTENSION_NOT_FOUND), "extension not found"}, - {ERR_REASON(X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED), - "extension setting not supported"}, - {ERR_REASON(X509V3_R_EXTENSION_VALUE_ERROR), "extension value error"}, - {ERR_REASON(X509V3_R_ILLEGAL_EMPTY_EXTENSION), "illegal empty extension"}, - {ERR_REASON(X509V3_R_INCORRECT_POLICY_SYNTAX_TAG), - "incorrect policy syntax tag"}, - {ERR_REASON(X509V3_R_INVALID_ASNUMBER), "invalid asnumber"}, - {ERR_REASON(X509V3_R_INVALID_ASRANGE), "invalid asrange"}, - {ERR_REASON(X509V3_R_INVALID_BOOLEAN_STRING), "invalid boolean string"}, - {ERR_REASON(X509V3_R_INVALID_EXTENSION_STRING), - "invalid extension string"}, - {ERR_REASON(X509V3_R_INVALID_INHERITANCE), "invalid inheritance"}, - {ERR_REASON(X509V3_R_INVALID_IPADDRESS), "invalid ipaddress"}, - {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS), "invalid multiple rdns"}, - {ERR_REASON(X509V3_R_INVALID_NAME), "invalid name"}, - {ERR_REASON(X509V3_R_INVALID_NULL_ARGUMENT), "invalid null argument"}, - {ERR_REASON(X509V3_R_INVALID_NULL_NAME), "invalid null name"}, - {ERR_REASON(X509V3_R_INVALID_NULL_VALUE), "invalid null value"}, - {ERR_REASON(X509V3_R_INVALID_NUMBER), "invalid number"}, - {ERR_REASON(X509V3_R_INVALID_NUMBERS), "invalid numbers"}, - {ERR_REASON(X509V3_R_INVALID_OBJECT_IDENTIFIER), - "invalid object identifier"}, - {ERR_REASON(X509V3_R_INVALID_OPTION), "invalid option"}, - {ERR_REASON(X509V3_R_INVALID_POLICY_IDENTIFIER), - "invalid policy identifier"}, - {ERR_REASON(X509V3_R_INVALID_PROXY_POLICY_SETTING), - "invalid proxy policy setting"}, - {ERR_REASON(X509V3_R_INVALID_PURPOSE), "invalid purpose"}, - {ERR_REASON(X509V3_R_INVALID_SAFI), "invalid safi"}, - {ERR_REASON(X509V3_R_INVALID_SECTION), "invalid section"}, - {ERR_REASON(X509V3_R_INVALID_SYNTAX), "invalid syntax"}, - {ERR_REASON(X509V3_R_ISSUER_DECODE_ERROR), "issuer decode error"}, - {ERR_REASON(X509V3_R_MISSING_VALUE), "missing value"}, - {ERR_REASON(X509V3_R_NEED_ORGANIZATION_AND_NUMBERS), - "need organization and numbers"}, - {ERR_REASON(X509V3_R_NO_CONFIG_DATABASE), "no config database"}, - {ERR_REASON(X509V3_R_NO_ISSUER_CERTIFICATE), "no issuer certificate"}, - {ERR_REASON(X509V3_R_NO_ISSUER_DETAILS), "no issuer details"}, - {ERR_REASON(X509V3_R_NO_POLICY_IDENTIFIER), "no policy identifier"}, - {ERR_REASON(X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED), - "no proxy cert policy language defined"}, - {ERR_REASON(X509V3_R_NO_PUBLIC_KEY), "no public key"}, - {ERR_REASON(X509V3_R_NO_SUBJECT_DETAILS), "no subject details"}, - {ERR_REASON(X509V3_R_OPERATION_NOT_DEFINED), "operation not defined"}, - {ERR_REASON(X509V3_R_OTHERNAME_ERROR), "othername error"}, - {ERR_REASON(X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED), - "policy language already defined"}, - {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH), "policy path length"}, - {ERR_REASON(X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED), - "policy path length already defined"}, - {ERR_REASON(X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY), - "policy when proxy language requires no policy"}, - {ERR_REASON(X509V3_R_SECTION_NOT_FOUND), "section not found"}, - {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS), - "unable to get issuer details"}, - {ERR_REASON(X509V3_R_UNABLE_TO_GET_ISSUER_KEYID), - "unable to get issuer keyid"}, - {ERR_REASON(X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT), - "unknown bit string argument"}, - {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION), "unknown extension"}, - {ERR_REASON(X509V3_R_UNKNOWN_EXTENSION_NAME), "unknown extension name"}, - {ERR_REASON(X509V3_R_UNKNOWN_OPTION), "unknown option"}, - {ERR_REASON(X509V3_R_UNSUPPORTED_OPTION), "unsupported option"}, - {ERR_REASON(X509V3_R_UNSUPPORTED_TYPE), "unsupported type"}, - {ERR_REASON(X509V3_R_USER_TOO_LONG), "user too long"}, +static const ERR_STRING_DATA X509V3_str_reasons[] = { + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BAD_IP_ADDRESS), "bad ip address"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BAD_OBJECT), "bad object"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BN_DEC2BN_ERROR), "bn dec2bn error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_BN_TO_ASN1_INTEGER_ERROR), + "bn to asn1 integer error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_DIRNAME_ERROR), "dirname error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_DISTPOINT_ALREADY_SET), + "distpoint already set"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_DUPLICATE_ZONE_ID), + "duplicate zone id"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ERROR_CONVERTING_ZONE), + "error converting zone"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ERROR_CREATING_EXTENSION), + "error creating extension"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ERROR_IN_EXTENSION), + "error in extension"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXPECTED_A_SECTION_NAME), + "expected a section name"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_EXISTS), + "extension exists"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_NAME_ERROR), + "extension name error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_NOT_FOUND), + "extension not found"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED), + "extension setting not supported"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_EXTENSION_VALUE_ERROR), + "extension value error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ILLEGAL_EMPTY_EXTENSION), + "illegal empty extension"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INCORRECT_POLICY_SYNTAX_TAG), + "incorrect policy syntax tag"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_ASNUMBER), + "invalid asnumber"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_ASRANGE), "invalid asrange"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_BOOLEAN_STRING), + "invalid boolean string"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_EXTENSION_STRING), + "invalid extension string"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_INHERITANCE), + "invalid inheritance"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_IPADDRESS), + "invalid ipaddress"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_MULTIPLE_RDNS), + "invalid multiple rdns"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NAME), "invalid name"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NULL_ARGUMENT), + "invalid null argument"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NULL_NAME), + "invalid null name"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NULL_VALUE), + "invalid null value"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NUMBER), "invalid number"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_NUMBERS), "invalid numbers"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_OBJECT_IDENTIFIER), + "invalid object identifier"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_OPTION), "invalid option"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_POLICY_IDENTIFIER), + "invalid policy identifier"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_PROXY_POLICY_SETTING), + "invalid proxy policy setting"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_PURPOSE), "invalid purpose"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_SAFI), "invalid safi"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_SECTION), "invalid section"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_INVALID_SYNTAX), "invalid syntax"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_ISSUER_DECODE_ERROR), + "issuer decode error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_MISSING_VALUE), "missing value"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NEED_ORGANIZATION_AND_NUMBERS), + "need organization and numbers"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_CONFIG_DATABASE), + "no config database"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_ISSUER_CERTIFICATE), + "no issuer certificate"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_ISSUER_DETAILS), + "no issuer details"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_POLICY_IDENTIFIER), + "no policy identifier"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED), + "no proxy cert policy language defined"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_PUBLIC_KEY), "no public key"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_NO_SUBJECT_DETAILS), + "no subject details"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_OPERATION_NOT_DEFINED), + "operation not defined"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_OTHERNAME_ERROR), "othername error"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED), + "policy language already defined"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_PATH_LENGTH), + "policy path length"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED), + "policy path length already defined"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY), + "policy when proxy language requires no policy"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_SECTION_NOT_FOUND), + "section not found"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS), + "unable to get issuer details"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNABLE_TO_GET_ISSUER_KEYID), + "unable to get issuer keyid"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT), + "unknown bit string argument"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_EXTENSION), + "unknown extension"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_EXTENSION_NAME), + "unknown extension name"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNKNOWN_OPTION), "unknown option"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNSUPPORTED_OPTION), + "unsupported option"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_UNSUPPORTED_TYPE), + "unsupported type"}, + {ERR_PACK(ERR_LIB_X509V3, 0, X509V3_R_USER_TOO_LONG), "user too long"}, {0, NULL} }; @@ -178,10 +241,9 @@ static ERR_STRING_DATA X509V3_str_reasons[] = { int ERR_load_X509V3_strings(void) { #ifndef OPENSSL_NO_ERR - if (ERR_func_error_string(X509V3_str_functs[0].error) == NULL) { - ERR_load_strings(0, X509V3_str_functs); - ERR_load_strings(0, X509V3_str_reasons); + ERR_load_strings_const(X509V3_str_functs); + ERR_load_strings_const(X509V3_str_reasons); } #endif return 1; diff --git a/crypto/x509v3/v3prin.c b/crypto/x509v3/v3prin.c deleted file mode 100644 index 7431a4ea..00000000 --- a/crypto/x509v3/v3prin.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 - */ - -#include -#include -#include -#include -#include - -int main(int argc, char **argv) -{ - X509 *cert; - FILE *inf; - int i, count; - X509_EXTENSION *ext; - - X509V3_add_standard_extensions(); - ERR_load_crypto_strings(); - if (!argv[1]) { - fprintf(stderr, "Usage v3prin cert.pem\n"); - exit(1); - } - if ((inf = fopen(argv[1], "r")) == NULL) { - fprintf(stderr, "Can't open %s\n", argv[1]); - exit(1); - } - if ((cert = PEM_read_X509(inf, NULL, NULL)) == NULL) { - fprintf(stderr, "Can't read certificate %s\n", argv[1]); - ERR_print_errors_fp(stderr); - exit(1); - } - fclose(inf); - count = X509_get_ext_count(cert); - printf("%d extensions\n", count); - for (i = 0; i < count; i++) { - ext = X509_get_ext(cert, i); - printf("%s\n", OBJ_nid2ln(OBJ_obj2nid(ext->object))); - if (!X509V3_EXT_print_fp(stdout, ext, 0, 0)) - ERR_print_errors_fp(stderr); - printf("\n"); - - } - return 0; -} diff --git a/crypto/x86_64cpuid.pl b/crypto/x86_64cpuid.pl index 1a6f728d..0a88c7a4 100644 --- a/crypto/x86_64cpuid.pl +++ b/crypto/x86_64cpuid.pl @@ -63,10 +63,12 @@ OPENSSL_rdtsc: .type OPENSSL_ia32_cpuid,\@function,1 .align 16 OPENSSL_ia32_cpuid: +.cfi_startproc mov %rbx,%r8 # save %rbx +.cfi_register %rbx,%r8 xor %eax,%eax - mov %eax,8(%rdi) # clear extended feature flags + mov %rax,8(%rdi) # clear extended feature flags cpuid mov %eax,%r11d # max value for standard query level @@ -137,6 +139,7 @@ OPENSSL_ia32_cpuid: .Lnocacheinfo: mov \$1,%eax cpuid + movd %eax,%xmm0 # put aside processor id and \$0xbfefffff,%edx # force reserved bits to 0 cmp \$0,%r9d jne .Lnotintel @@ -184,26 +187,45 @@ OPENSSL_ia32_cpuid: jc .Lnotknights and \$0xfff7ffff,%ebx # clear ADCX/ADOX flag .Lnotknights: + movd %xmm0,%eax # restore processor id + and \$0x0fff0ff0,%eax + cmp \$0x00050650,%eax # Skylake-X + jne .Lnotskylakex + and \$0xfffeffff,%ebx # ~(1<<16) + # suppress AVX512F flag on Skylake-X +.Lnotskylakex: mov %ebx,8(%rdi) # save extended feature flags + mov %ecx,12(%rdi) .Lno_extended_info: bt \$27,%r9d # check OSXSAVE bit jnc .Lclear_avx xor %ecx,%ecx # XCR0 .byte 0x0f,0x01,0xd0 # xgetbv + and \$0xe6,%eax # isolate XMM, YMM and ZMM state support + cmp \$0xe6,%eax + je .Ldone + andl \$0x3fdeffff,8(%rdi) # ~(1<<31|1<<30|1<<21|1<<16) + # clear AVX512F+BW+VL+FIMA, all of + # them are EVEX-encoded, which requires + # ZMM state support even if one uses + # only XMM and YMM :-( and \$6,%eax # isolate XMM and YMM state support cmp \$6,%eax je .Ldone .Lclear_avx: mov \$0xefffe7ff,%eax # ~(1<<28|1<<12|1<<11) and %eax,%r9d # clear AVX, FMA and AMD XOP bits - andl \$0xffffffdf,8(%rdi) # clear AVX2, ~(1<<5) + mov \$0x3fdeffdf,%eax # ~(1<<31|1<<30|1<<21|1<<16|1<<5) + and %eax,8(%rdi) # clear AVX2 and AVX512* bits .Ldone: shl \$32,%r9 mov %r10d,%eax mov %r8,%rbx # restore %rbx +.cfi_restore %rbx or %r9,%rax ret +.cfi_endproc .size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid .globl OPENSSL_cleanse diff --git a/crypto/x86cpuid.pl b/crypto/x86cpuid.pl index 4622a9fa..08c129a2 100644 --- a/crypto/x86cpuid.pl +++ b/crypto/x86cpuid.pl @@ -14,7 +14,7 @@ $output = pop; open OUT,">$output"; *STDOUT=*OUT; -&asm_init($ARGV[0],"x86cpuid"); +&asm_init($ARGV[0]); for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } @@ -89,7 +89,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &ja (&label("generic")); &and ("edx",0xefffffff); # clear hyper-threading bit &jmp (&label("generic")); - + &set_label("intel"); &cmp ("edi",4); &mov ("esi",-1); @@ -110,7 +110,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &cmp ("ebp",0); &jne (&label("notintel")); &or ("edx",1<<30); # set reserved bit#30 on Intel CPUs - &and (&HB("eax"),15); # familiy ID + &and (&HB("eax"),15); # family ID &cmp (&HB("eax"),15); # P4? &jne (&label("notintel")); &or ("edx",1<<20); # set reserved bit#20 to engage RC4_CHAR @@ -290,45 +290,6 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); } &ret (); &function_end_B("OPENSSL_atomic_add"); -# This function can become handy under Win32 in situations when -# we don't know which calling convention, __stdcall or __cdecl(*), -# indirect callee is using. In C it can be deployed as -# -#ifdef OPENSSL_CPUID_OBJ -# type OPENSSL_indirect_call(void *f,...); -# ... -# OPENSSL_indirect_call(func,[up to $max arguments]); -#endif -# -# (*) it's designed to work even for __fastcall if number of -# arguments is 1 or 2! -&function_begin_B("OPENSSL_indirect_call"); - { - my ($max,$i)=(7,); # $max has to be chosen as 4*n-1 - # in order to preserve eventual - # stack alignment - &push ("ebp"); - &mov ("ebp","esp"); - &sub ("esp",$max*4); - &mov ("ecx",&DWP(12,"ebp")); - &mov (&DWP(0,"esp"),"ecx"); - &mov ("edx",&DWP(16,"ebp")); - &mov (&DWP(4,"esp"),"edx"); - for($i=2;$i<$max;$i++) - { - # Some copies will be redundant/bogus... - &mov ("eax",&DWP(12+$i*4,"ebp")); - &mov (&DWP(0+$i*4,"esp"),"eax"); - } - &call_ptr (&DWP(8,"ebp"));# make the call... - &mov ("esp","ebp"); # ... and just restore the stack pointer - # without paying attention to what we called, - # (__cdecl *func) or (__stdcall *one). - &pop ("ebp"); - &ret (); - } -&function_end_B("OPENSSL_indirect_call"); - &function_begin_B("OPENSSL_cleanse"); &mov ("edx",&wparam(0)); &mov ("ecx",&wparam(1)); diff --git a/demos/bio/Makefile b/demos/bio/Makefile index 493e8a58..5a4e4a4a 100644 --- a/demos/bio/Makefile +++ b/demos/bio/Makefile @@ -27,4 +27,4 @@ server-cmod: server-cmod.o server-conf: server-conf.o client-arg client-conf saccept sconnect server-arg server-cmod server-conf: - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) diff --git a/demos/bio/saccept.c b/demos/bio/saccept.c index 66c5c617..de86ae63 100644 --- a/demos/bio/saccept.c +++ b/demos/bio/saccept.c @@ -1,5 +1,5 @@ /* - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-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 @@ -19,12 +19,13 @@ #include #include +#include #include #include #define CERT_FILE "server.pem" -static int done = 0; +static volatile int done = 0; void interrupt(int sig) { @@ -51,7 +52,7 @@ int main(int argc, char *argv[]) BIO *ssl_bio, *tmp; SSL_CTX *ctx; char buf[512]; - int ret = 1, i; + int ret = EXIT_FAILURE, i; if (argc <= 1) port = "*:4433"; @@ -111,12 +112,10 @@ int main(int argc, char *argv[]) fflush(stdout); } - ret = 0; + ret = EXIT_SUCCESS; err: - if (ret) { + if (ret != EXIT_SUCCESS) ERR_print_errors_fp(stderr); - } BIO_free(in); - exit(ret); - return (!ret); + return ret; } diff --git a/demos/bio/sconnect.c b/demos/bio/sconnect.c index 664a1e03..db71f29a 100644 --- a/demos/bio/sconnect.c +++ b/demos/bio/sconnect.c @@ -1,5 +1,5 @@ /* - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-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 @@ -18,17 +18,14 @@ #include #include #include +#include #include #include #define HOSTPORT "localhost:4433" #define CAFILE "root.pem" -extern int errno; - -int main(argc, argv) -int argc; -char *argv[]; +int main(int argc, char *argv[]) { const char *hostport = HOSTPORT; const char *CAfile = CAFILE; @@ -39,7 +36,7 @@ char *argv[]; SSL_CTX *ssl_ctx = NULL; SSL *ssl; BIO *ssl_bio; - int i, len, off, ret = 1; + int i, len, off, ret = EXIT_FAILURE; if (argc > 1) hostport = argv[1]; @@ -115,17 +112,18 @@ char *argv[]; fwrite(buf, 1, i, stdout); } - ret = 1; + ret = EXIT_SUCCESS; goto done; err: if (ERR_peek_error() == 0) { /* system call error */ fprintf(stderr, "errno=%d ", errno); perror("error"); - } else + } else { ERR_print_errors_fp(stderr); + } done: BIO_free_all(out); SSL_CTX_free(ssl_ctx); - return (ret == 1); + return ret; } diff --git a/demos/bio/server-arg.c b/demos/bio/server-arg.c index 6056969f..d80d070f 100644 --- a/demos/bio/server-arg.c +++ b/demos/bio/server-arg.c @@ -1,5 +1,5 @@ /* - * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -27,7 +28,7 @@ int main(int argc, char *argv[]) SSL_CONF_CTX *cctx; char buf[512]; BIO *in = NULL; - int ret = 1, i; + int ret = EXIT_FAILURE, i; char **args = argv + 1; int nargs = argc - 1; @@ -134,12 +135,10 @@ int main(int argc, char *argv[]) fflush(stdout); } - ret = 0; + ret = EXIT_SUCCESS; err: - if (ret) { + if (ret != EXIT_SUCCESS) ERR_print_errors_fp(stderr); - } BIO_free(in); - exit(ret); - return (!ret); + return ret; } diff --git a/demos/bio/server-cmod.c b/demos/bio/server-cmod.c index 9cb24637..f1079ad3 100644 --- a/demos/bio/server-cmod.c +++ b/demos/bio/server-cmod.c @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -25,7 +26,7 @@ int main(int argc, char *argv[]) BIO *in = NULL; BIO *ssl_bio, *tmp; SSL_CTX *ctx; - int ret = 1, i; + int ret = EXIT_FAILURE, i; ctx = SSL_CTX_new(TLS_server_method()); @@ -84,12 +85,10 @@ int main(int argc, char *argv[]) fflush(stdout); } - ret = 0; + ret = EXIT_SUCCESS; err: - if (ret) { + if (ret != EXIT_SUCCESS) ERR_print_errors_fp(stderr); - } BIO_free(in); - exit(ret); - return (!ret); + return ret; } diff --git a/demos/bio/server-conf.c b/demos/bio/server-conf.c index 41b13089..4d1655bf 100644 --- a/demos/bio/server-conf.c +++ b/demos/bio/server-conf.c @@ -1,5 +1,5 @@ /* - * Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -32,7 +33,7 @@ int main(int argc, char *argv[]) CONF_VALUE *cnf; long errline = -1; char buf[512]; - int ret = 1, i; + int ret = EXIT_FAILURE, i; ctx = SSL_CTX_new(TLS_server_method()); @@ -129,12 +130,10 @@ int main(int argc, char *argv[]) fflush(stdout); } - ret = 0; + ret = EXIT_SUCCESS; err: - if (ret) { + if (ret != EXIT_SUCCESS) ERR_print_errors_fp(stderr); - } BIO_free(in); - exit(ret); - return (!ret); + return ret; } diff --git a/demos/engines/e_chil.txt b/demos/engines/e_chil.txt new file mode 100644 index 00000000..dc7076ba --- /dev/null +++ b/demos/engines/e_chil.txt @@ -0,0 +1,12 @@ +HWCRHK_F_BIND_HELPER 110 +HWCRHK_F_HWCRHK_CTRL 100 +HWCRHK_F_HWCRHK_FINISH 101 +HWCRHK_F_HWCRHK_GET_PASS 102 +HWCRHK_F_HWCRHK_INIT 103 +HWCRHK_F_HWCRHK_INSERT_CARD 104 +HWCRHK_F_HWCRHK_LOAD_PRIVKEY 105 +HWCRHK_F_HWCRHK_LOAD_PUBKEY 106 +HWCRHK_F_HWCRHK_MOD_EXP 107 +HWCRHK_F_HWCRHK_MUTEX_INIT 111 +HWCRHK_F_HWCRHK_RAND_BYTES 108 +HWCRHK_F_HWCRHK_RSA_MOD_EXP 109 diff --git a/demos/evp/Makefile b/demos/evp/Makefile index 72c6e81d..3a85b223 100644 --- a/demos/evp/Makefile +++ b/demos/evp/Makefile @@ -17,4 +17,4 @@ aesccm: aesccm.o aesgcm: aesgcm.o aesccm aesgcm: - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< + $(CC) $(CFLAGS) -o $@ $< $(LDFLAGS) diff --git a/demos/evp/aesgcm.c b/demos/evp/aesgcm.c index df59f469..46d9a563 100644 --- a/demos/evp/aesgcm.c +++ b/demos/evp/aesgcm.c @@ -102,7 +102,7 @@ void aes_gcm_decrypt(void) printf("Plaintext:\n"); BIO_dump_fp(stdout, outbuf, outlen); /* Set expected tag value. */ - EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, sizeof(gcm_tag), + EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, sizeof(gcm_tag), (void *)gcm_tag); /* Finalise: note get no output for GCM */ rv = EVP_DecryptFinal_ex(ctx, outbuf, &outlen); diff --git a/demos/pkcs12/README b/demos/pkcs12/README deleted file mode 100644 index c87434b0..00000000 --- a/demos/pkcs12/README +++ /dev/null @@ -1,3 +0,0 @@ -PKCS#12 demo applications - -Written by Steve Henson. diff --git a/demos/pkcs12/pkread.c b/demos/pkcs12/pkread.c index 3b87d7a4..3f7913b2 100644 --- a/demos/pkcs12/pkread.c +++ b/demos/pkcs12/pkread.c @@ -15,6 +15,36 @@ /* Simple PKCS#12 file reader */ +static char *find_friendly_name(PKCS12 *p12) +{ + STACK_OF(PKCS7) *safes = PKCS12_unpack_authsafes(p12); + int n, m; + char *name = NULL; + PKCS7 *safe; + STACK_OF(PKCS12_SAFEBAG) *bags; + PKCS12_SAFEBAG *bag; + + if ((safes = PKCS12_unpack_authsafes(p12)) == NULL) + return NULL; + + for (n = 0; n < sk_PKCS7_num(safes) && name == NULL; n++) { + safe = sk_PKCS7_value(safes, n); + if (OBJ_obj2nid(safe->type) != NID_pkcs7_data + || (bags = PKCS12_unpack_p7data(safe)) == NULL) + continue; + + for (m = 0; m < sk_PKCS12_SAFEBAG_num(bags) && name == NULL; m++) { + bag = sk_PKCS12_SAFEBAG_value(bags, m); + name = PKCS12_get_friendlyname(bag); + } + sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free); + } + + sk_PKCS7_pop_free(safes, PKCS7_free); + + return name; +} + int main(int argc, char **argv) { FILE *fp; @@ -22,7 +52,9 @@ int main(int argc, char **argv) X509 *cert; STACK_OF(X509) *ca = NULL; PKCS12 *p12; + const char *name; int i; + if (argc != 4) { fprintf(stderr, "Usage: pkread p12file password opfile\n"); exit(1); @@ -45,11 +77,14 @@ int main(int argc, char **argv) ERR_print_errors_fp(stderr); exit(1); } + name = find_friendly_name(p12); PKCS12_free(p12); if ((fp = fopen(argv[3], "w")) == NULL) { fprintf(stderr, "Error opening file %s\n", argv[1]); exit(1); } + if (name) + fprintf(fp, "***Friendly Name***\n%s\n", name); if (pkey) { fprintf(fp, "***Private Key***\n"); PEM_write_PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL); diff --git a/doc/HOWTO/certificates.txt b/doc/HOWTO/certificates.txt index 65f8fc82..c2efdca8 100644 --- a/doc/HOWTO/certificates.txt +++ b/doc/HOWTO/certificates.txt @@ -90,7 +90,7 @@ Your key most definitely is if you have followed the examples above. However, some (most?) certificate authorities will encode them with things like PKCS7 or PKCS12, or something else. Depending on your applications, this may be perfectly OK, it all depends on what they -know how to decode. If not, There are a number of OpenSSL tools to +know how to decode. If not, there are a number of OpenSSL tools to convert between some (most?) formats. So, depending on your application, you may have to convert your diff --git a/doc/HOWTO/proxy_certificates.txt b/doc/HOWTO/proxy_certificates.txt index 642bec92..18b3e034 100644 --- a/doc/HOWTO/proxy_certificates.txt +++ b/doc/HOWTO/proxy_certificates.txt @@ -18,7 +18,7 @@ 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 certificate. -See http://www.ietf.org/rfc/rfc3820.txt for more information. +See https://www.ietf.org/rfc/rfc3820.txt for more information. 2. A warning about proxy certificates diff --git a/doc/README b/doc/README index cac4115f..964d8798 100644 --- a/doc/README +++ b/doc/README @@ -9,12 +9,19 @@ standards.txt HOWTO/ A few how-to documents; not necessarily up-to-date -apps/ + +man1/ The openssl command-line tools; start with openssl.pod -ssl/ - The SSL library; start with ssl.pod -crypto/ - The cryptographic library; start with crypto.pod + +man3/ + The SSL library and the crypto library + +man5/ + File formats + +man7/ + Overviews; start with crypto.pod and ssl.pod, for example + Algorithm specific EVP_PKEY documentation. Formatted versions of the manpages (apps,ssl,crypto) can be found at https://www.openssl.org/docs/manpages.html diff --git a/doc/apps/enc.pod b/doc/apps/enc.pod deleted file mode 100644 index 6338d6c8..00000000 --- a/doc/apps/enc.pod +++ /dev/null @@ -1,354 +0,0 @@ -=pod - -=head1 NAME - -openssl-enc, -enc - symmetric cipher routines - -=head1 SYNOPSIS - -B -[B<-help>] -[B<-ciphers>] -[B<-in filename>] -[B<-out filename>] -[B<-pass arg>] -[B<-e>] -[B<-d>] -[B<-a/-base64>] -[B<-A>] -[B<-k password>] -[B<-kfile filename>] -[B<-K key>] -[B<-iv IV>] -[B<-S salt>] -[B<-salt>] -[B<-nosalt>] -[B<-z>] -[B<-md digest>] -[B<-p>] -[B<-P>] -[B<-bufsize number>] -[B<-nopad>] -[B<-debug>] -[B<-none>] -[B<-engine id>] - -=head1 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. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-ciphers> - -List all supported ciphers. - -=item B<-in filename> - -the input filename, standard input by default. - -=item B<-out filename> - -the output filename, standard output by default. - -=item B<-pass arg> - -the password source. For more information about the format of B -see the B section in L. - -=item B<-e> - -encrypt the input data: this is the default. - -=item B<-d> - -decrypt the input data. - -=item B<-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. - -=item B<-base64> - -same as B<-a> - -=item B<-A> - -if the B<-a> option is set then base64 process the data on one line. - -=item B<-k password> - -the password to derive the key from. This is for compatibility with previous -versions of OpenSSL. Superseded by the B<-pass> argument. - -=item B<-kfile filename> - -read the password to derive the key from the first line of B. -This is for compatibility with previous versions of OpenSSL. Superseded by -the B<-pass> argument. - -=item B<-md digest> - -Use the specified digest to create the key from the passphrase. -The default algorithm is sha-256. - -=item B<-nosalt> - -don't use a salt in the key derivation routines. This option B be -used except for test purposes or compatibility with ancient versions of -OpenSSL. - -=item B<-salt> - -use salt (randomly generated or provide with B<-S> option) when -encrypting (this is the default). - -=item B<-S salt> - -the actual salt to use: this must be represented as a string of hex digits. - -=item B<-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 B<-iv> option. When both a key and a password are specified, the -key given with the B<-K> option will be used and the IV generated from the -password will be taken. It probably does not make much sense to specify -both key and password. - -=item B<-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 B<-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. - -=item B<-p> - -print out the key and IV used. - -=item B<-P> - -print out the key and IV used then immediately exit: don't do any encryption -or decryption. - -=item B<-bufsize number> - -set the buffer size for I/O - -=item B<-nopad> - -disable standard block padding - -=item B<-debug> - -debug the BIOs used for I/O. - -=item B<-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. - -=item B<-none> - -Use NULL cipher (no encryption or decryption of input). - -=back - -=head1 NOTES - -The program can be called either as B or -B. But 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. - -Engines which provide entirely new encryption algorithms (such as ccgost -engine which provides gost89 algorithm) should be configured in the -configuration file. Engines, specified in the command line using -engine -options can only be used for hardware-assisted implementations of -ciphers, which are supported by OpenSSL core or other engine, specified -in the configuration file. - -When 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 B<-salt> option should B be used if the key is being derived -from a password unless you want compatibility with previous versions of -OpenSSL. - -Without the B<-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 in CBC mode such as bf or des3. - -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. - -=head1 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 B command run with -unsupported options (for example B) includes a -list of ciphers, supported by your version of OpenSSL, including -ones provided by configured engines. - -The B program does not support authenticated encryption modes -like CCM and GCM. The utility does not store or retrieve the -authentication tag. - - - base64 Base 64 - - bf-cbc Blowfish in CBC mode - bf 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 - - des-cbc DES in CBC mode - des Alias for des-cbc - des-cfb DES in CBC 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 - - 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]-ecb 128/192/256 bit AES in ECB mode - aes-[128|192|256]-ofb 128/192/256 bit AES in OFB mode - -=head1 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 triple DES in CBC mode using a prompted password: - - openssl des3 -salt -in file.txt -out file.des3 - -Decrypt a file using a supplied password: - - openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword - -Encrypt a file then base64 encode it (so it can be sent via mail for example) -using Blowfish in CBC mode: - - openssl bf -a -salt -in file.txt -out file.bf - -Base64 decode a file then decrypt it: - - openssl bf -d -salt -a -in file.bf -out file.txt - -Decrypt some data using a supplied 40 bit RC4 key: - - openssl rc4-40 -in file.rc4 -out file.txt -K 0102030405 - -=head1 BUGS - -The B<-A> option when used with large files doesn't work properly. - -There should be an option to allow an iteration count to be included. - -The B 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. - -=head1 HISTORY - -The default digest was changed from MD5 to SHA256 in Openssl 1.1. - -=head1 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 -L. - -=cut diff --git a/doc/apps/genrsa.pod b/doc/apps/genrsa.pod deleted file mode 100644 index 8be06834..00000000 --- a/doc/apps/genrsa.pod +++ /dev/null @@ -1,119 +0,0 @@ -=pod - -=head1 NAME - -openssl-genrsa, -genrsa - generate an RSA private key - -=head1 SYNOPSIS - -B B -[B<-help>] -[B<-out filename>] -[B<-passout arg>] -[B<-aes128>] -[B<-aes192>] -[B<-aes256>] -[B<-aria128>] -[B<-aria192>] -[B<-aria256>] -[B<-camellia128>] -[B<-camellia192>] -[B<-camellia256>] -[B<-des>] -[B<-des3>] -[B<-idea>] -[B<-f4>] -[B<-3>] -[B<-rand file(s)>] -[B<-engine id>] -[B] - -=head1 DESCRIPTION - -The B command generates an RSA private key. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-out filename> - -Output the key to the specified file. If this argument is not specified then -standard output is used. - -=item B<-passout arg> - -the output file password source. For more information about the format of B -see the B section in L. - -=item B<-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 B<-passout> argument. - -=item B<-F4|-3> - -the public exponent to use, either 65537 or 3. The default is 65537. - -=item B<-rand file(s)> - -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). -Multiple files can be specified separated by an OS-dependent character. -The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for -all others. - -=item B<-engine id> - -specifying an engine (by its unique B string) will cause B -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. - -=item B - -the size of the private key to generate in bits. This must be the last option -specified. The default is 2048. - -=back - -=head1 NOTES - -RSA private key generation essentially involves the generation of two prime -numbers. When generating a private key various symbols will be output to -indicate the progress of the generation. A B<.> represents each number which -has passed an initial sieve test, B<+> means a number has passed a single -round of the Miller-Rabin primality test. 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. - -=head1 BUGS - -A quirk of the prime generation algorithm is that it cannot generate small -primes. Therefore the number of bits should not be less that 64. For typical -private keys this will not matter because for security reasons they will -be much larger (typically 1024 bits). - -=head1 SEE ALSO - -L - -=head1 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 -L. - -=cut diff --git a/doc/apps/passwd.pod b/doc/apps/passwd.pod deleted file mode 100644 index 46632014..00000000 --- a/doc/apps/passwd.pod +++ /dev/null @@ -1,97 +0,0 @@ -=pod - -=head1 NAME - -openssl-passwd, -passwd - compute password hashes - -=head1 SYNOPSIS - -B -[B<-help>] -[B<-crypt>] -[B<-1>] -[B<-apr1>] -[B<-salt> I] -[B<-in> I] -[B<-stdin>] -[B<-noverify>] -[B<-quiet>] -[B<-table>] -{I} - -=head1 DESCRIPTION - -The B 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 B<-in file>, from stdin for -option B<-stdin>, or from the command line, or from the terminal otherwise. -The Unix standard algorithm B and the MD5-based BSD password -algorithm B<1> and its Apache variant B are available. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-crypt> - -Use the B algorithm (default). - -=item B<-1> - -Use the MD5 based BSD password algorithm B<1>. - -=item B<-apr1> - -Use the B algorithm (Apache variant of the BSD algorithm). - -=item B<-salt> I - -Use the specified salt. -When reading a password from the terminal, this implies B<-noverify>. - -=item B<-in> I - -Read passwords from I. - -=item B<-stdin> - -Read passwords from B. - -=item B<-noverify> - -Don't verify when reading a password from the terminal. - -=item B<-quiet> - -Don't output warnings when passwords given at the command line are truncated. - -=item B<-table> - -In the output list, prepend the cleartext password and a TAB character -to each password hash. - -=back - -=head1 EXAMPLES - -B prints B. - -B prints B<$1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a.>. - -B prints B<$apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0>. - -=head1 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 -L. - -=cut diff --git a/doc/apps/pkeyutl.pod b/doc/apps/pkeyutl.pod deleted file mode 100644 index e72486de..00000000 --- a/doc/apps/pkeyutl.pod +++ /dev/null @@ -1,293 +0,0 @@ -=pod - -=head1 NAME - -openssl-pkeyutl, -pkeyutl - public key algorithm utility - -=head1 SYNOPSIS - -B B -[B<-help>] -[B<-in file>] -[B<-out file>] -[B<-sigfile file>] -[B<-inkey file>] -[B<-keyform PEM|DER|ENGINE>] -[B<-passin arg>] -[B<-peerkey file>] -[B<-peerform PEM|DER|ENGINE>] -[B<-pubin>] -[B<-certin>] -[B<-rev>] -[B<-sign>] -[B<-verify>] -[B<-verifyrecover>] -[B<-encrypt>] -[B<-decrypt>] -[B<-derive>] -[B<-kdf algorithm>] -[B<-kdflen length>] -[B<-pkeyopt opt:value>] -[B<-hexdump>] -[B<-asn1parse>] -[B<-engine id>] -[B<-engine_impl>] - -=head1 DESCRIPTION - -The B command can be used to perform public key operations using -any supported algorithm. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-in filename> - -This specifies the input filename to read data from or standard input -if this option is not specified. - -=item B<-out filename> - -specifies the output filename to write to or standard output by -default. - -=item B<-sigfile file> - -Signature file, required for B operations only - -=item B<-inkey file> - -the input key file, by default it should be a private key. - -=item B<-keyform PEM|DER|ENGINE> - -the key format PEM, DER or ENGINE. Default is PEM. - -=item B<-passin arg> - -the input key password source. For more information about the format of B -see the B section in L. - - -=item B<-peerkey file> - -the peer key file, used by key derivation (agreement) operations. - -=item B<-peerform PEM|DER|ENGINE> - -the peer key format PEM, DER or ENGINE. Default is PEM. - -=item B<-pubin> - -the input file is a public key. - -=item B<-certin> - -the input is a certificate containing a public key. - -=item B<-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. - -=item B<-sign> - -sign the input data and output the signed result. This requires -a private key. - -=item B<-verify> - -verify the input data against the signature file and indicate if the -verification succeeded or failed. - -=item B<-verifyrecover> - -verify the input data and output the recovered data. - -=item B<-encrypt> - -encrypt the input data using a public key. - -=item B<-decrypt> - -decrypt the input data using a private key. - -=item B<-derive> - -derive a shared secret using the peer key. - -=item B<-kdf algorithm> - -Use key derivation function B. The supported algorithms are -at present B and B. -Note: additional parameters and the KDF output length will normally have to be -set for this to work. -See L and L -for the supported string parameters of each algorithm. - -=item B<-kdflen length> - -Set the output length for KDF. - -=item B<-pkeyopt opt:value> - -Public key options specified as opt:value. See NOTES below for more details. - -=item B<-hexdump> - -hex dump the output data. - -=item B<-asn1parse> - -asn1parse the output data, this is useful when combined with the -B<-verifyrecover> option when an ASN1 structure is signed. - -=item B<-engine id> - -specifying an engine (by its unique B string) will cause B -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. - -=item B<-engine_impl> - -When used with the B<-engine> option, it specifies to also use -engine B for crypto operations. - -=back - -=head1 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 B option -which specifies the digest in use for sign, verify and verifyrecover operations. -The value B should represent a digest name as used in the -EVP_get_digestbyname() function for example B. -This value is used only for sanity-checking the lengths of data passed in to -the B and for creating the structures that make up the signature -(e.g. B in RSASSA PKCS#1 v1.5 signatures). -In case of RSA, ECDSA and DSA signatures, this utility -will not perform hashing on input data but rather use the data directly as -input of signature algorithm. Depending on key type, signature type and mode -of padding, the maximum acceptable lengths of input data differ. In general, -with RSA the signed data can't be longer than the key modulus, in case of ECDSA -and DSA the data shouldn't be longer than field size, otherwise it will be -silently truncated to field size. - -In other words, if the value of digest is B the input should be 20 bytes -long binary encoding of SHA-1 hash function output. - -=head1 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 -B values are supported: - -=over 4 - -=item B - -This sets the RSA padding mode. Acceptable values for B are B for -PKCS#1 padding, B for SSLv23 padding, B for no padding, B -for B mode, B for X9.31 mode and B 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 B structure. If a -digest is set then the a B structure is used and its the length -must correspond to the digest type. - -For B mode only encryption and decryption is supported. - -For B 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 B mode only sign and verify are supported and the digest type must be -specified. - -=item B - -For B mode only this option specifies the salt length. Two special values -are supported: -1 sets the salt length to the digest length. When signing -2 -sets the salt length to the maximum permissible value. When verifying -2 causes -the salt length to be automatically determined based on the B block -structure. - -=back - -=head1 DSA ALGORITHM - -The DSA algorithm supports signing and verification operations only. Currently -there are no additional options other than B. Only the SHA1 -digest can be used and this digest is assumed by default. - -=head1 DH ALGORITHM - -The DH algorithm only supports the derivation operation and no additional -options. - -=head1 EC ALGORITHM - -The EC algorithm supports sign, verify and derive operations. The sign and -verify operations use ECDSA and derive uses ECDH. Currently there are no -additional options other than B. Only the SHA1 digest can be used and -this digest is assumed by default. - -=head1 X25519 ALGORITHM - -The X25519 algorithm supports key derivation only. Currently there are no -additional options. - -=head1 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 B 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 - -=head1 SEE ALSO - -L, L, L -L, L, L, -L, L - -=head1 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 -L. - -=cut diff --git a/doc/apps/s_client.pod b/doc/apps/s_client.pod deleted file mode 100644 index 01a6c5f7..00000000 --- a/doc/apps/s_client.pod +++ /dev/null @@ -1,619 +0,0 @@ -=pod - -=head1 NAME - -openssl-s_client, -s_client - SSL/TLS client program - -=head1 SYNOPSIS - -B B -[B<-help>] -[B<-connect host:port>] -[B<-proxy host:port>] -[B<-unix path>] -[B<-4>] -[B<-6>] -[B<-servername name>] -[B<-verify depth>] -[B<-verify_return_error>] -[B<-cert filename>] -[B<-certform DER|PEM>] -[B<-key filename>] -[B<-keyform DER|PEM>] -[B<-pass arg>] -[B<-CApath directory>] -[B<-CAfile filename>] -[B<-no-CAfile>] -[B<-no-CApath>] -[B<-dane_tlsa_domain domain>] -[B<-dane_tlsa_rrdata rrdata>] -[B<-dane_ee_no_namechecks>] -[B<-attime timestamp>] -[B<-check_ss_sig>] -[B<-crl_check>] -[B<-crl_check_all>] -[B<-explicit_policy>] -[B<-extended_crl>] -[B<-ignore_critical>] -[B<-inhibit_any>] -[B<-inhibit_map>] -[B<-no_check_time>] -[B<-partial_chain>] -[B<-policy arg>] -[B<-policy_check>] -[B<-policy_print>] -[B<-purpose purpose>] -[B<-suiteB_128>] -[B<-suiteB_128_only>] -[B<-suiteB_192>] -[B<-trusted_first>] -[B<-no_alt_chains>] -[B<-use_deltas>] -[B<-auth_level num>] -[B<-verify_depth num>] -[B<-verify_email email>] -[B<-verify_hostname hostname>] -[B<-verify_ip ip>] -[B<-verify_name name>] -[B<-x509_strict>] -[B<-reconnect>] -[B<-showcerts>] -[B<-debug>] -[B<-msg>] -[B<-nbio_test>] -[B<-state>] -[B<-nbio>] -[B<-crlf>] -[B<-ign_eof>] -[B<-no_ign_eof>] -[B<-quiet>] -[B<-ssl3>] -[B<-tls1>] -[B<-tls1_1>] -[B<-tls1_2>] -[B<-no_ssl3>] -[B<-no_tls1>] -[B<-no_tls1_1>] -[B<-no_tls1_2>] -[B<-dtls>] -[B<-dtls1>] -[B<-dtls1_2>] -[B<-fallback_scsv>] -[B<-async>] -[B<-split_send_frag>] -[B<-max_pipelines>] -[B<-read_buf>] -[B<-bugs>] -[B<-comp>] -[B<-no_comp>] -[B<-sigalgs sigalglist>] -[B<-curves curvelist>] -[B<-cipher cipherlist>] -[B<-serverpref>] -[B<-starttls protocol>] -[B<-xmpphost hostname>] -[B<-engine id>] -[B<-tlsextdebug>] -[B<-no_ticket>] -[B<-sess_out filename>] -[B<-sess_in filename>] -[B<-rand file(s)>] -[B<-serverinfo types>] -[B<-status>] -[B<-alpn protocols>] -[B<-nextprotoneg protocols>] -[B<-ct|noct>] -[B<-ctlogfile>] - -=head1 DESCRIPTION - -The B command implements a generic SSL/TLS client which connects -to a remote host using SSL/TLS. It is a I useful diagnostic tool for -SSL servers. - -=head1 OPTIONS - -In addition to the options below the B utility also supports the -common and client only options documented in the -in the "Supported Command Line Commands" section of the L -manual page. - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-connect host:port> - -This specifies the host and optional port to connect to. If not specified -then an attempt is made to connect to the local host on port 4433. - -=item B<-proxy host:port> - -When used with the B<-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. - -=item B<-unix path> - -Connect over the specified Unix-domain socket. - -=item B<-4> - -Use IPv4 only. - -=item B<-6> - -Use IPv6 only. - -=item B<-servername name> - -Set the TLS SNI (Server Name Indication) extension in the ClientHello message. - -=item B<-cert certname> - -The certificate to use, if one is requested by the server. The default is -not to use a certificate. - -=item B<-certform format> - -The certificate format to use: DER or PEM. PEM is the default. - -=item B<-key keyfile> - -The private key to use. If not specified then the certificate file will -be used. - -=item B<-keyform format> - -The private format to use: DER or PEM. PEM is the default. - -=item B<-pass arg> - -the private key password source. For more information about the format of B -see the B section in L. - -=item B<-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. - -=item B<-verify_return_error> - -Return verification errors instead of continuing. This will typically -abort the handshake with a fatal error. - -=item B<-CApath directory> - -The directory to use for server certificate verification. This directory -must be in "hash format", see B for more information. These are -also used when building the client certificate chain. - -=item B<-CAfile file> - -A file containing trusted certificates to use during server authentication -and to use when attempting to build the client certificate chain. - -=item B<-no-CAfile> - -Do not load the trusted CA certificates from the default file location - -=item B<-no-CApath> - -Do not load the trusted CA certificates from the default directory location - -=item B<-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 B<-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. - -=item B<-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 B value is -specied 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 - ... - -=item B<-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. - -=item B<-attime>, B<-check_ss_sig>, B<-crl_check>, B<-crl_check_all>, -B<-explicit_policy>, B<-extended_crl>, B<-ignore_critical>, B<-inhibit_any>, -B<-inhibit_map>, B<-no_alt_chains>, B<-no_check_time>, B<-partial_chain>, B<-policy>, -B<-policy_check>, B<-policy_print>, B<-purpose>, B<-suiteB_128>, -B<-suiteB_128_only>, B<-suiteB_192>, B<-trusted_first>, B<-use_deltas>, -B<-auth_level>, B<-verify_depth>, B<-verify_email>, B<-verify_hostname>, -B<-verify_ip>, B<-verify_name>, B<-x509_strict> - -Set various certificate chain validation options. See the -L manual page for details. - -=item B<-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. - -=item B<-showcerts> - -display the whole server certificate chain: normally only the server -certificate itself is displayed. - -=item B<-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. - -=item B<-state> - -prints out the SSL session states. - -=item B<-debug> - -print extensive debugging information including a hex dump of all traffic. - -=item B<-msg> - -show all protocol messages with hex dump. - -=item B<-trace> - -show verbose trace output of protocol messages. OpenSSL needs to be compiled -with B for this option to work. - -=item B<-msgfile> - -file to send output of B<-msg> or B<-trace> to, default standard output. - -=item B<-nbio_test> - -tests non-blocking I/O - -=item B<-nbio> - -turns on non-blocking I/O - -=item B<-crlf> - -this option translated a line feed from the terminal into CR+LF as required -by some servers. - -=item B<-ign_eof> - -inhibit shutting down the connection when end of file is reached in the -input. - -=item B<-quiet> - -inhibit printing of session and certificate information. This implicitly -turns on B<-ign_eof> as well. - -=item B<-no_ign_eof> - -shut down the connection when end of file is reached in the input. -Can be used to override the implicit B<-ign_eof> after B<-quiet>. - -=item B<-psk_identity identity> - -Use the PSK identity B when using a PSK cipher suite. -The default value is "Client_identity" (without the quotes). - -=item B<-psk key> - -Use the PSK key B 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. - -=item B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2> - -These options require or disable the use of the specified SSL or TLS protocols. -By default B 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. - -=item B<-dtls>, B<-dtls1>, B<-dtls1_2> - -These options make B use DTLS protocols instead of TLS. -With B<-dtls>, B will negotiate any supported DTLS protocol version, -whilst B<-dtls1> and B<-dtls1_2> will only support DTLS1.0 and DTLS1.2 -respectively. - -=item B<-fallback_scsv> - -Send TLS_FALLBACK_SCSV in the ClientHello. - -=item B<-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 B<-engine> option. For test purposes the dummy async engine -(dasync) can be used (if available). - -=item B<-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 ciphersuite has been negotiated, an engine that supports pipelining -has been loaded, and max_pipelines is greater than 1. See -L for further information. - -=item B<-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 ciphersuite has been negotiated. The default value is 1. -See L for further information. - -=item B<-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 L for -further information). - -=item B<-bugs> - -there are several known bug in SSL and TLS implementations. Adding this -option enables various workarounds. - -=item B<-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. - -=item B<-no_comp> - -Disables support for SSL/TLS compression. -TLS compression is not recommended and is off by default as of -OpenSSL 1.1.0. - -=item B<-brief> - -only provide a brief summary of connection parameters instead of the -normal verbose output. - -=item B<-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 L - -=item B<-curves curvelist> - -Specifies the list of supported curves to be sent by the client. The curve is -is ultimately selected by the server. For a list of all curves, use: - - $ openssl ecparam -list_curves - -=item B<-cipher cipherlist> - -this allows the cipher list sent by the client to be modified. 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 B -command for more information. - -=item B<-starttls protocol> - -send the protocol-specific message(s) to switch to TLS for communication. -B is a keyword for the intended protocol. Currently, the only -supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server", -and "irc." - -=item B<-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. - -=item B<-tlsextdebug> - -print out a hex dump of any TLS extensions received from the server. - -=item B<-no_ticket> - -disable RFC4507bis session ticket support. - -=item B<-sess_out filename> - -output SSL session to B - -=item B<-sess_in sess.pem> - -load SSL session from B. The client will attempt to resume a -connection from this session. - -=item B<-engine id> - -specifying an engine (by its unique B string) will cause B -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. - -=item B<-rand file(s)> - -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). -Multiple files can be specified separated by an OS-dependent character. -The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for -all others. - -=item B<-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. - -=item B<-status> - -sends a certificate status request to the server (OCSP stapling). The server -response (if any) is printed out. - -=item B<-alpn protocols>, B<-nextprotoneg protocols> - -these flags enable the -Enable the Application-Layer Protocol Negotiation or Next Protocol -Negotiation extension, respectively. ALPN is the IETF standard and -replaces NPN. -The B list is a -comma-separated protocol names that the client should advertise -support for. The list should contain most wanted protocols first. -Protocol names are printable ASCII strings, for example "http/1.1" or -"spdy/3". -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. - -=item B<-ct|noct> - -Use one of these two options to control whether Certificate Transparency (CT) -is enabled (B<-ct>) or disabled (B<-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. - -=item B<-ctlogfile> - -A file containing a list of known Certificate Transparency logs. See -L for the expected file format. - -=back - -=head1 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. When used interactively (which means neither B<-quiet> nor B<-ign_eof> -have been given), the session will be renegotiated if the line begins with an -B, and if the line begins with a B or if end of file is reached, the -connection will be closed down. - -=head1 NOTES - -B 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 B<-bugs>, -B<-ssl3>, B<-tls1>, B<-no_ssl3>, B<-no_tls1> options can be tried -in case it is a buggy server. In particular you should play with these -options B 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 B 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 B<-prexit> option and send an HTTP request -for an appropriate page. - -If a certificate is specified on the command line using the B<-cert> -option it will not be used unless the server specifically requests -a client certificate. Therefor merely including a client certificate -on the command line is no guarantee that the certificate works. - -If there are problems verifying a server certificate then the -B<-showcerts> option can be used to show the whole chain. - -The B 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 B do this as it makes them vulnerable to a MITM -attack. This behaviour can be changed by with the B<-verify_return_error> -option: any verify errors are then returned aborting the handshake. - -=head1 BUGS - -Because this program has a lot of options and also because some of the -techniques used are rather old, the C source of B 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 B<-prexit> option is a bit of a hack. We should really report -information whenever a session is renegotiated. - -=head1 SEE ALSO - -L, -L, L, L - -=head1 HISTORY - -The -no_alt_chains options was first added to OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/apps/s_server.pod b/doc/apps/s_server.pod deleted file mode 100644 index e8ec91b4..00000000 --- a/doc/apps/s_server.pod +++ /dev/null @@ -1,616 +0,0 @@ -=pod - -=head1 NAME - -openssl-s_server, -s_server - SSL/TLS server program - -=head1 SYNOPSIS - -B B -[B<-help>] -[B<-port port>] -[B<-accept val>] -[B<-naccept count>] -[B<-unix val>] -[B<-unlink>] -[B<-4>] -[B<-6>] -[B<-context id>] -[B<-verify depth>] -[B<-Verify depth>] -[B<-crl_check>] -[B<-crl_check_all>] -[B<-cert filename>] -[B<-certform DER|PEM>] -[B<-key keyfile>] -[B<-keyform DER|PEM>] -[B<-pass arg>] -[B<-dcert filename>] -[B<-dcertform DER|PEM>] -[B<-dkey keyfile>] -[B<-dkeyform DER|PEM>] -[B<-dpass arg>] -[B<-dhparam filename>] -[B<-nbio>] -[B<-nbio_test>] -[B<-crlf>] -[B<-debug>] -[B<-msg>] -[B<-state>] -[B<-CApath directory>] -[B<-CAfile filename>] -[B<-no-CAfile>] -[B<-no-CApath>] -[B<-attime timestamp>] -[B<-check_ss_sig>] -[B<-explicit_policy>] -[B<-extended_crl>] -[B<-ignore_critical>] -[B<-inhibit_any>] -[B<-inhibit_map>] -[B<-no_check_time>] -[B<-partial_chain>] -[B<-policy arg>] -[B<-policy_check>] -[B<-policy_print>] -[B<-purpose purpose>] -[B<-suiteB_128>] -[B<-suiteB_128_only>] -[B<-suiteB_192>] -[B<-trusted_first>] -[B<-no_alt_chains>] -[B<-use_deltas>] -[B<-auth_level num>] -[B<-verify_depth num>] -[B<-verify_return_error>] -[B<-verify_email email>] -[B<-verify_hostname hostname>] -[B<-verify_ip ip>] -[B<-verify_name name>] -[B<-x509_strict>] -[B<-nocert>] -[B<-client_sigalgs sigalglist>] -[B<-named_curve curve>] -[B<-cipher cipherlist>] -[B<-serverpref>] -[B<-quiet>] -[B<-ssl3>] -[B<-tls1>] -[B<-tls1_1>] -[B<-tls1_2>] -[B<-dtls>] -[B<-dtls1>] -[B<-dtls1_2>] -[B<-listen>] -[B<-async>] -[B<-split_send_frag>] -[B<-max_pipelines>] -[B<-read_buf>] -[B<-no_ssl3>] -[B<-no_tls1>] -[B<-no_tls1_1>] -[B<-no_tls1_2>] -[B<-no_dhe>] -[B<-bugs>] -[B<-comp>] -[B<-no_comp>] -[B<-brief>] -[B<-www>] -[B<-WWW>] -[B<-HTTP>] -[B<-engine id>] -[B<-tlsextdebug>] -[B<-no_ticket>] -[B<-id_prefix arg>] -[B<-rand file(s)>] -[B<-serverinfo file>] -[B<-no_resumption_on_reneg>] -[B<-status>] -[B<-status_verbose>] -[B<-status_timeout nsec>] -[B<-status_url url>] -[B<-alpn protocols>] -[B<-nextprotoneg protocols>] - -=head1 DESCRIPTION - -The B command implements a generic SSL/TLS server which listens -for connections on a given port using SSL/TLS. - -=head1 OPTIONS - -In addition to the options below the B utility also supports the -common and server only options documented in the -in the "Supported Command Line Commands" section of the L -manual page. - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-port port> - -The TCP port to listen on for connections. If not specified 4433 is used. - -=item B<-accept val> - -The optional TCP host and port to listen on for connections. If not specified, *:4433 is used. - -=item B<-naccept count> - -The server will exit after receiving B connections, default unlimited. - -=item B<-unix val> - -Unix domain socket to accept on. - -=item B<-unlink> - -For -unix, unlink existing socket first. - -=item B<-4> - -Use IPv4 only. - -=item B<-6> - -Use IPv6 only. - -=item B<-context id> - -Sets the SSL context id. It can be given any string value. If this option -is not present a default value will be used. - -=item B<-cert certname> - -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. - -=item B<-certform format> - -The certificate format to use: DER or PEM. PEM is the default. - -=item B<-key keyfile> - -The private key to use. If not specified then the certificate file will -be used. - -=item B<-keyform format> - -The private format to use: DER or PEM. PEM is the default. - -=item B<-pass arg> - -The private key password source. For more information about the format of B -see the B section in L. - -=item B<-dcert filename>, B<-dkey keyname> - -Specify an additional certificate and private key, these behave in the -same manner as the B<-cert> and B<-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. - -=item B<-dcertform format>, B<-dkeyform format>, B<-dpass arg> - -Additional certificate and private key format and passphrase respectively. - -=item B<-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). - -=item B<-dhparam filename> - -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 B -program will be used. - -=item B<-no_dhe> - -If this option is set then no DH parameters will be loaded effectively -disabling the ephemeral DH cipher suites. - -=item B<-crl_check>, B<-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 B<-crl_check_all> -option all CRLs of all CAs in the chain are checked. - -=item B<-CApath directory> - -The directory to use for client certificate verification. This directory -must be in "hash format", see B for more information. These are -also used when building the server certificate chain. - -=item B<-CAfile file> - -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. - -=item B<-no-CAfile> - -Do not load the trusted CA certificates from the default file location - -=item B<-no-CApath> - -Do not load the trusted CA certificates from the default directory location - -=item B<-verify depth>, B<-Verify depth> - -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 B<-verify> option a certificate is requested but the -client does not have to send one, with the B<-Verify> option the client -must supply a certificate or an error occurs. - -If the ciphersuite cannot request a client certificate (for example an -anonymous ciphersuite or PSK) this option has no effect. - -=item B<-attime>, B<-check_ss_sig>, B<-crl_check>, B<-crl_check_all>, -B<-explicit_policy>, B<-extended_crl>, B<-ignore_critical>, B<-inhibit_any>, -B<-inhibit_map>, B<-no_alt_chains>, B<-no_check_time>, B<-partial_chain>, B<-policy>, -B<-policy_check>, B<-policy_print>, B<-purpose>, B<-suiteB_128>, -B<-suiteB_128_only>, B<-suiteB_192>, B<-trusted_first>, B<-use_deltas>, -B<-auth_level>, B<-verify_depth>, B<-verify_email>, B<-verify_hostname>, -B<-verify_ip>, B<-verify_name>, B<-x509_strict> - -Set different peer certificate verification options. -See the L manual page for details. - -=item B<-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. - -=item B<-state> - -Prints the SSL session states. - -=item B<-debug> - -Print extensive debugging information including a hex dump of all traffic. - -=item B<-msg> - -Show all protocol messages with hex dump. - -=item B<-trace> - -Show verbose trace output of protocol messages. OpenSSL needs to be compiled -with B for this option to work. - -=item B<-msgfile> - -File to send output of B<-msg> or B<-trace> to, default standard output. - -=item B<-nbio_test> - -Tests non blocking I/O - -=item B<-nbio> - -Turns on non blocking I/O - -=item B<-crlf> - -This option translated a line feed from the terminal into CR+LF. - -=item B<-quiet> - -Inhibit printing of session and certificate information. - -=item B<-psk_hint hint> - -Use the PSK identity hint B when using a PSK cipher suite. - -=item B<-psk key> - -Use the PSK key B 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. - -=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2> - -These options require or disable the use of the specified SSL or TLS protocols. -By default B will negotiate the highest mutually supported protocol -version. -When a specific TLS version is required, only that version will be accepted -from the client. - -=item B<-dtls>, B<-dtls1>, B<-dtls1_2> - -These options make B use DTLS protocols instead of TLS. -With B<-dtls>, B will negotiate any supported DTLS protocol version, -whilst B<-dtls1> and B<-dtls1_2> will only support DTLSv1.0 and DTLSv1.2 -respectively. - -=item B<-listen> - -This option can only be used in conjunction with one of the DTLS options above. -With this option B 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 B will connect to -that peer and complete the handshake. - -=item B<-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 B<-engine> option. For test purposes the dummy async engine -(dasync) can be used (if available). - -=item B<-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 ciphersuite has been negotiated, an engine that supports pipelining -has been loaded, and max_pipelines is greater than 1. See -L for further information. - -=item B<-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 ciphersuite has been negotiated. The default value is 1. -See L for further information. - -=item B<-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 L for -further information). - -=item B<-bugs> - -There are several known bug in SSL and TLS implementations. Adding this -option enables various workarounds. - -=item B<-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. - -=item B<-no_comp> - -Disable negotiation of TLS compression. -TLS compression is not recommended and is off by default as of -OpenSSL 1.1.0. - -=item B<-brief> - -Provide a brief summary of connection parameters instead of the normal verbose -output. - -=item B<-client_sigalgs sigalglist> - -Signature algorithms to support for client certificate authentication -(colon-separated list) - -=item B<-named_curve curve> - -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 - -=item B<-cipher cipherlist> - -This allows the cipher list used by the server to be modified. 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 irrelevant. See -the B command for more information. - -=item B<-serverpref> - -Use the server's cipher preferences, rather than the client's preferences. - -=item B<-tlsextdebug> - -Print a hex dump of any TLS extensions received from the server. - -=item B<-no_ticket> - -Disable RFC4507bis session ticket support. - -=item B<-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. - -=item B<-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. - -=item B<-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). - -=item B<-rev> - -Simple test server which just reverses the text received from the client -and sends it back to the server. Also sets B<-brief>. - -=item B<-engine id> - -Specifying an engine (by its unique B string) will cause B -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. - -=item B<-id_prefix arg> - -Generate SSL/TLS session IDs prefixed by B. 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). - -=item B<-rand file(s)> - -A file or files containing random data used to seed the random number -generator, or an EGD socket (see L). -Multiple files can be specified separated by an OS-dependent character. -The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for -all others. - -=item B<-serverinfo file> - -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. - -=item B<-no_resumption_on_reneg> - -Set the B option. - -=item B<-status> - -Enables certificate status request support (aka OCSP stapling). - -=item B<-status_verbose> - -Enables certificate status request support (aka OCSP stapling) and gives -a verbose printout of the OCSP response. - -=item B<-status_timeout nsec> - -Sets the timeout for OCSP response to B seconds. - -=item B<-status_url url> - -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. - -=item B<-alpn protocols>, B<-nextprotoneg protocols> - -these flags enable the -Enable the Application-Layer Protocol Negotiation or Next Protocol -Negotiation extension, respectively. ALPN is the IETF standard and -replaces NPN. -The B list is a -comma-separated list of supported protocol names. -The list should contain most wanted protocols first. -Protocol names are printable ASCII strings, for example "http/1.1" or -"spdy/3". - -=back - -=head1 CONNECTED COMMANDS - -If a connection request is established with an SSL client and neither the -B<-www> nor the B<-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 single letter commands are also recognized which perform special -operations: these are listed below. - -=over 4 - -=item B - -end the current SSL connection but still accept new connections. - -=item B - -end the current SSL connection and exit. - -=item B - -renegotiate the SSL session. - -=item B - -renegotiate the SSL session and request a client certificate. - -=item B

- -send some plain text down the underlying TCP connection: this should -cause the client to disconnect due to a protocol violation. - -=item B - -print out some session cache status information. - -=back - -=head1 NOTES - -B 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 B program. - -=head1 BUGS - -Because this program has a lot of options and also because some of the -techniques used are rather old, the C source of B 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 B program to print out details of any -unknown cipher suites a client says it supports. - -=head1 SEE ALSO - -L, -L, L, L - -=head1 HISTORY - -The -no_alt_chains options was first added to OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/apps/sess_id.pod b/doc/apps/sess_id.pod deleted file mode 100644 index 7766c71e..00000000 --- a/doc/apps/sess_id.pod +++ /dev/null @@ -1,164 +0,0 @@ -=pod - -=head1 NAME - -openssl-sess_id, -sess_id - SSL/TLS session handling utility - -=head1 SYNOPSIS - -B B -[B<-help>] -[B<-inform PEM|DER>] -[B<-outform PEM|DER|NSS>] -[B<-in filename>] -[B<-out filename>] -[B<-text>] -[B<-noout>] -[B<-context ID>] - -=head1 DESCRIPTION - -The B 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. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-inform DER|PEM> - -This specifies the input format. The B option uses an ASN1 DER encoded -format containing session details. The precise format can vary from one version -to the next. The B form is the default format: it consists of the B -format base64 encoded with additional header and footer lines. - -=item B<-outform DER|PEM|NSS> - -This specifies the output format. The B and B options have the same meaning -as the B<-inform> option. The B option outputs the session id and the master key -in NSS keylog format. - -=item B<-in filename> - -This specifies the input filename to read session information from or standard -input by default. - -=item B<-out filename> - -This specifies the output filename to write session information to or standard -output if this option is not specified. - -=item B<-text> - -prints out the various public or private key components in -plain text in addition to the encoded version. - -=item B<-cert> - -if a certificate is present in the session it will be output using this option, -if the B<-text> option is also present then it will be printed out in text form. - -=item B<-noout> - -this option prevents output of the encoded version of the session. - -=item B<-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. - -=back - -=head1 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) - -Theses are described below in more detail. - -=over 4 - -=item B - -this is the protocol in use TLSv1.2, TLSv1.1, TLSv1 or SSLv3. - -=item B - -the cipher used this is the actual raw SSL or TLS cipher code, see the SSL -or TLS specifications for more information. - -=item B - -the SSL session ID in hex format. - -=item B - -the session ID context in hex format. - -=item B - -this is the SSL session master key. - -=item B - -this is the session start time represented as an integer in standard Unix format. - -=item B - -the timeout in seconds. - -=item B - -this is the return code when an SSL client certificate is verified. - -=back - -=head1 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. - -=head1 BUGS - -The cipher and start time should be printed out in human readable form. - -=head1 SEE ALSO - -L, L - -=head1 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 -L. - -=cut diff --git a/doc/apps/speed.pod b/doc/apps/speed.pod deleted file mode 100644 index 4379319d..00000000 --- a/doc/apps/speed.pod +++ /dev/null @@ -1,68 +0,0 @@ -=pod - -=head1 NAME - -openssl-speed, -speed - test library performance - -=head1 SYNOPSIS - -B -[B<-help>] -[B<-engine id>] -[B<-elapsed>] -[B<-evp algo>] -[B<-decrypt>] -[B] - -=head1 DESCRIPTION - -This command is used to test the performance of cryptographic algorithms. -To see the list of supported algorithms, use the I -or I command. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-engine id> - -specifying an engine (by its unique B string) will cause B -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. - -=item B<-elapsed> - -Measure time in real time instead of CPU time. It can be useful when testing -speed of hardware engines. - -=item B<-evp algo> - -Use the specified cipher or message digest algorithm via the EVP interface. - -=item B<-decrypt> - -Time the decryption instead of encryption. Affects only the EVP testing. - -=item B<[zero or more test algorithms]> - -If any options are given, B tests those algorithms, otherwise all of -the above are tested. - -=back - -=head1 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 -L. - -=cut diff --git a/doc/apps/version.pod b/doc/apps/version.pod deleted file mode 100644 index 305a1b74..00000000 --- a/doc/apps/version.pod +++ /dev/null @@ -1,81 +0,0 @@ -=pod - -=head1 NAME - -openssl-version, -version - print OpenSSL version information - -=head1 SYNOPSIS - -B -[B<-help>] -[B<-a>] -[B<-v>] -[B<-b>] -[B<-o>] -[B<-f>] -[B<-p>] -[B<-d>] -[B<-e>] - -=head1 DESCRIPTION - -This command is used to print out version information about OpenSSL. - -=head1 OPTIONS - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-a> - -all information, this is the same as setting all the other flags. - -=item B<-v> - -the current OpenSSL version. - -=item B<-b> - -the date the current version of OpenSSL was built. - -=item B<-o> - -option information: various options set when the library was built. - -=item B<-f> - -compilation flags. - -=item B<-p> - -platform setting. - -=item B<-d> - -OPENSSLDIR setting. - -=item B<-e> - -ENGINESDIR setting. - -=back - -=head1 NOTES - -The output of B would typically be used when sending -in a bug report. - -=head1 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 -L. - -=cut diff --git a/doc/apps/x509.pod b/doc/apps/x509.pod deleted file mode 100644 index f2dcef2e..00000000 --- a/doc/apps/x509.pod +++ /dev/null @@ -1,898 +0,0 @@ -=pod - -=head1 NAME - -openssl-x509, -x509 - Certificate display and signing utility - -=head1 SYNOPSIS - -B B -[B<-help>] -[B<-inform DER|PEM|NET>] -[B<-outform DER|PEM|NET>] -[B<-keyform DER|PEM>] -[B<-CAform DER|PEM>] -[B<-CAkeyform DER|PEM>] -[B<-in filename>] -[B<-out filename>] -[B<-serial>] -[B<-hash>] -[B<-subject_hash>] -[B<-issuer_hash>] -[B<-ocspid>] -[B<-subject>] -[B<-issuer>] -[B<-nameopt option>] -[B<-email>] -[B<-ocsp_uri>] -[B<-startdate>] -[B<-enddate>] -[B<-purpose>] -[B<-dates>] -[B<-checkend num>] -[B<-modulus>] -[B<-pubkey>] -[B<-fingerprint>] -[B<-alias>] -[B<-noout>] -[B<-trustout>] -[B<-clrtrust>] -[B<-clrreject>] -[B<-addtrust arg>] -[B<-addreject arg>] -[B<-setalias arg>] -[B<-days arg>] -[B<-set_serial n>] -[B<-signkey filename>] -[B<-passin arg>] -[B<-x509toreq>] -[B<-req>] -[B<-CA filename>] -[B<-CAkey filename>] -[B<-CAcreateserial>] -[B<-CAserial filename>] -[B<-force_pubkey key>] -[B<-text>] -[B<-certopt option>] -[B<-C>] -[B<-[digest]>] -[B<-clrext>] -[B<-extfile filename>] -[B<-extensions section>] -[B<-engine id>] - -=head1 DESCRIPTION - -The B 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. - -=head1 OPTIONS - -=head2 Input, Output, and General Purpose Options - -=over 4 - -=item B<-help> - -Print out a usage message. - -=item B<-inform DER|PEM|NET> - -This specifies the input format normally the command will expect an X509 -certificate but this can change if other options such as B<-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 NET option is an obscure Netscape server format that is now -obsolete. - -=item B<-outform DER|PEM|NET> - -This specifies the output format, the options have the same meaning as the -B<-inform> option. - -=item B<-in filename> - -This specifies the input filename to read a certificate from or standard input -if this option is not specified. - -=item B<-out filename> - -This specifies the output filename to write to or standard output by -default. - -=item B<-[digest]> - -the digest to use. -This affects any signing or display option that uses a message -digest, such as the B<-fingerprint>, B<-signkey> and B<-CA> options. -Any digest supported by the OpenSSL B command can be used. -If not specified then SHA1 is used with B<-fingerprint> or -the default digest for the signing algorithm is used, typically SHA256. - -=item B<-engine id> - -specifying an engine (by its unique B string) will cause B -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. - -=back - -=head2 Display Options - -Note: the B<-alias> and B<-purpose> options are also display options -but are described in the B section. - -=over 4 - -=item B<-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. - -=item B<-certopt option> - -customise the output format used with B<-text>. The B

and B are likely enough to -be valid. -This is a lightweight check, if a more thorough check is needed, use -DH_check(). -The value of B<*codes> is updated with any problems found. -If B<*codes> is zero then no problems were found, otherwise the -following bits may be set: - -=over 4 - -=item DH_CHECK_P_NOT_PRIME - -The parameter B

has been determined to not being an odd prime. -Note that the lack of this bit doesn't guarantee that B

is a -prime. - -=item DH_NOT_SUITABLE_GENERATOR - -The generator B is not suitable. -Note that the lack of this bit doesn't guarantee that B is -suitable, unless B

is known to be a strong prime. - -=back - -DH_check() confirms that the Diffie-Hellman parameters B are valid. The -value of B<*codes> is updated with any problems found. If B<*codes> is zero then -no problems were found, otherwise the following bits may be set: - -=over 4 - -=item DH_CHECK_P_NOT_PRIME - -The parameter B

is not prime. - -=item DH_CHECK_P_NOT_SAFE_PRIME - -The parameter B

is not a safe prime and no B value is present. - -=item DH_UNABLE_TO_CHECK_GENERATOR - -The generator B cannot be checked for suitability. - -=item DH_NOT_SUITABLE_GENERATOR - -The generator B is not suitable. - -=item DH_CHECK_Q_NOT_PRIME - -The parameter B is not prime. - -=item DH_CHECK_INVALID_Q_VALUE - -The parameter B is invalid. - -=item DH_CHECK_INVALID_J_VALUE - -The parameter B is invalid. - -=back - -=head1 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() (deprecated) returns a pointer to the DH structure, or -NULL if the parameter generation fails. - -The error codes can be obtained by L. - -=head1 NOTES - -DH_generate_parameters_ex() and DH_generate_parameters() may run for several -hours before finding a suitable prime. - -The parameters generated by DH_generate_parameters_ex() and DH_generate_parameters() -are not to be used in signature schemes. - -=head1 SEE ALSO - -L, L, L, -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/DH_size.pod b/doc/crypto/DH_size.pod deleted file mode 100644 index 8c1d151f..00000000 --- a/doc/crypto/DH_size.pod +++ /dev/null @@ -1,47 +0,0 @@ -=pod - -=head1 NAME - -DH_size, DH_bits - get Diffie-Hellman prime size - -=head1 SYNOPSIS - -#include - -int DH_size(const DH *dh); - -int DH_bits(const DH *dh); - -=head1 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(). - -DH_bits() returns the number of significant bits. - -B and Bp> must not be B. - -=head1 RETURN VALUE - -The size. - -=head1 SEE ALSO - -L, L, -L - -=head1 HISTORY - -DH_bits() was added in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/DSA_meth_new.pod b/doc/crypto/DSA_meth_new.pod deleted file mode 100644 index 948ab29b..00000000 --- a/doc/crypto/DSA_meth_new.pod +++ /dev/null @@ -1,193 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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(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 *)); - -=head1 DESCRIPTION - -The B type is a structure used for the provision of custom DSA -implementations. It provides a set of of functions used by OpenSSL for the -implementation of the various DSA capabilities. See the L page for more -information. - -DSA_meth_new() creates a new B structure. It should be given a -unique B and a set of B. The B should be a NULL terminated -string, which will be duplicated and stored in the B object. It is -the callers responsibility to free the original string. The flags will be used -during the construction of a new B object based on this B. Any -new B object will have those flags set by default. - -DSA_meth_dup() creates a duplicate copy of the B object passed as a -parameter. This might be useful for creating a new B based on an -existing one, but with some differences. - -DSA_meth_free() destroys a B 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 B. 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 B and B. 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 B 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 B 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(). - -=head1 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. - -=head1 SEE ALSO - -L, L, L, L, -L, L, L, L, -L, L, L - -=head1 HISTORY - -The functions described here were added in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/DSA_size.pod b/doc/crypto/DSA_size.pod deleted file mode 100644 index 16e6f3a9..00000000 --- a/doc/crypto/DSA_size.pod +++ /dev/null @@ -1,44 +0,0 @@ -=pod - -=head1 NAME - -DSA_size, DSA_bits - get DSA signature size or key bits - -=head1 SYNOPSIS - - #include - - int DSA_size(const DSA *dsa); - int DSA_bits(const DSA *dsa); - -=head1 DESCRIPTION - -DSA_size() returns the maximum size of an ASN.1 encoded DSA signature -for key B in bytes. It can be used to determine how much memory must -be allocated for a DSA signature. - -Bq> must not be B. - -DSA_bits() returns the number of bits in key B: this is the number -of bits in the B

parameter. - -=head1 RETURN VALUE - -DSA_size() returns the size in bytes. - -DSA_bits() returns the number of bits in the key. - -=head1 SEE ALSO - -L, L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/ERR_remove_state.pod b/doc/crypto/ERR_remove_state.pod deleted file mode 100644 index 617b4b70..00000000 --- a/doc/crypto/ERR_remove_state.pod +++ /dev/null @@ -1,53 +0,0 @@ -=pod - -=head1 NAME - -ERR_remove_thread_state, ERR_remove_state - DEPRECATED - -=head1 SYNOPSIS - -Deprecated: - - #if OPENSSL_API_COMPAT < 0x10000000L - void ERR_remove_state(unsigned long pid); - #endif - - #if OPENSSL_API_COMPAT < 0x10100000L - void ERR_remove_thread_state(void *); - #endif - -=head1 DESCRIPTION - -The functions described here were used to free the error queue -associated with the current or specified thread. - -They are now deprecated and do nothing, as the OpenSSL libraries now -normally do all thread initialisation and deinitialisation -automatically (see L). - -=head1 RETURN VALUE - -The functions described here return no value. - -=head1 SEE ALSO - -LL - -=head1 HISTORY - -ERR_remove_state() was deprecated in OpenSSL 1.0.0 when -ERR_remove_thread_state() was introduced. - -ERR_remove_thread_state() was deprecated in OpenSSL 1.1.0 when the -thread handling functionality was entirely rewritten. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/EVP_DigestInit.pod b/doc/crypto/EVP_DigestInit.pod deleted file mode 100644 index bb7ef7a2..00000000 --- a/doc/crypto/EVP_DigestInit.pod +++ /dev/null @@ -1,259 +0,0 @@ -=pod - -=head1 NAME - -EVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy_ex, -EVP_DigestInit_ex, EVP_DigestUpdate, EVP_DigestFinal_ex, -EVP_DigestInit, EVP_DigestFinal, EVP_MD_CTX_copy, EVP_MD_type, -EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, -EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_md_null, EVP_md2, EVP_md5, EVP_sha1, -EVP_sha224, EVP_sha256, EVP_sha384, EVP_sha512, EVP_mdc2, -EVP_ripemd160, EVP_blake2b512, EVP_blake2s256, EVP_get_digestbyname, -EVP_get_digestbynid, EVP_get_digestbyobj - EVP digest routines - -=head1 SYNOPSIS - - #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); - - 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_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); - - const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); - int EVP_MD_CTX_size(const EVP_MD *ctx); - int EVP_MD_CTX_block_size(const EVP_MD *ctx); - int EVP_MD_CTX_type(const EVP_MD *ctx); - - const EVP_MD *EVP_md_null(void); - const EVP_MD *EVP_md2(void); - const EVP_MD *EVP_md5(void); - const EVP_MD *EVP_sha1(void); - const EVP_MD *EVP_mdc2(void); - const EVP_MD *EVP_ripemd160(void); - const EVP_MD *EVP_blake2b512(void); - const EVP_MD *EVP_blake2s256(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_get_digestbyname(const char *name); - const EVP_MD *EVP_get_digestbynid(int type); - const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o); - -=head1 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, initializes and returns a digest context. - -EVP_MD_CTX_reset() resets the digest context B. This can be used -to reuse an already existing context. - -EVP_MD_CTX_free() cleans up digest context B and frees up the -space allocated to it. - -EVP_DigestInit_ex() sets up digest context B to use a digest -B from ENGINE B. B must be initialized before calling this -function. B will typically be supplied by a function such as EVP_sha1(). -If B is NULL then the default implementation of digest B is used. - -EVP_DigestUpdate() hashes B bytes of data at B into the -digest context B. This function can be called several times on the -same B to hash additional data. - -EVP_DigestFinal_ex() retrieves the digest value from B and places -it in B. If the B 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 B, at most B 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_MD_CTX_copy_ex() can be used to copy the message digest state from -B to B. This is useful if large amounts of data are to be -hashed which only differ in the last few bytes. B must be initialized -before calling this function. - -EVP_DigestInit() behaves in the same way as EVP_DigestInit_ex() except -the passed context B does not have to be initialized, and it always -uses the default digest implementation. - -EVP_DigestFinal() is similar to EVP_DigestFinal_ex() except the digest -context B is automatically cleaned up. - -EVP_MD_CTX_copy() is similar to EVP_MD_CTX_copy_ex() except the destination -B does not have to be initialized. - -EVP_MD_size() and EVP_MD_CTX_size() return the size of the message digest -when passed an B or an B structure, i.e. the size of the -hash. - -EVP_MD_block_size() and EVP_MD_CTX_block_size() return the block size of the -message digest when passed an B or an B structure. - -EVP_MD_type() and EVP_MD_CTX_type() return the NID of the OBJECT IDENTIFIER -representing the given message digest when passed an B structure. -For example EVP_MD_type(EVP_sha1()) returns B. This function is -normally used when setting ASN1 OIDs. - -EVP_MD_CTX_md() returns the B structure corresponding to the passed -B. - -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 B. Since digests and signature algorithms -are no longer linked this function is only retained for compatibility -reasons. - -EVP_md2(), EVP_md5(), EVP_sha1(), EVP_sha224(), EVP_sha256(), -EVP_sha384(), EVP_sha512(), EVP_mdc2(), EVP_ripemd160(), EVP_blake2b512(), and -EVP_blake2s256() return B structures for the MD2, MD5, SHA1, SHA224, -SHA256, SHA384, SHA512, MDC2, RIPEMD160, BLAKE2b-512, and BLAKE2s-256 digest -algorithms respectively. - -EVP_md_null() is a "null" message digest that does nothing: i.e. the hash it -returns is of zero length. - -EVP_get_digestbyname(), EVP_get_digestbynid() and EVP_get_digestbyobj() -return an B structure when passed a digest name, a digest NID or -an ASN1_OBJECT structure respectively. - -=head1 RETURN VALUES - -EVP_DigestInit_ex(), EVP_DigestUpdate() and EVP_DigestFinal_ex() return 1 for -success and 0 for failure. - -EVP_MD_CTX_copy_ex() returns 1 if successful or 0 for failure. - -EVP_MD_type(), EVP_MD_pkey_type() and EVP_MD_type() return the NID of the -corresponding OBJECT IDENTIFIER or NID_undef if none exists. - -EVP_MD_size(), EVP_MD_block_size(), EVP_MD_CTX_size() and -EVP_MD_CTX_block_size() return the digest or block size in bytes. - -EVP_md_null(), EVP_md2(), EVP_md5(), EVP_sha1(), -EVP_mdc2(), EVP_ripemd160(), EVP_blake2b512(), and EVP_blake2s256() return -pointers to the corresponding EVP_MD structures. - -EVP_get_digestbyname(), EVP_get_digestbynid() and EVP_get_digestbyobj() -return either an B structure or NULL if an error occurs. - -=head1 NOTES - -The B 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 SHA2 digest algorithms such as SHA256. -The other digest algorithms are still in common use. - -For most applications the B 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. - - -=head1 EXAMPLE - -This example digests the data "Test Message\n" and "Hello World\n", using the -digest name passed on the command line. - - #include - #include - - 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]; - int md_len, i; - - if(!argv[1]) { - printf("Usage: mdtest digestname\n"); - exit(1); - } - - md = EVP_get_digestbyname(argv[1]); - - if(!md) { - 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); - } - -=head1 SEE ALSO - -L, -L - -=head1 HISTORY - -B became opaque in OpenSSL 1.1. Consequently, stack -allocated Bs are no longer supported. - -EVP_MD_CTX_create() and EVP_MD_CTX_destroy() were renamed to -EVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1. - -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 legacy EVP_dss1() -was removed in OpenSSL 1.1.0 - -=head1 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 -L. - -=cut diff --git a/doc/crypto/EVP_DigestVerifyInit.pod b/doc/crypto/EVP_DigestVerifyInit.pod deleted file mode 100644 index ce59422d..00000000 --- a/doc/crypto/EVP_DigestVerifyInit.pod +++ /dev/null @@ -1,91 +0,0 @@ -=pod - -=head1 NAME - -EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal - EVP signature verification functions - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -The EVP signature routines are a high level interface to digital signatures. - -EVP_DigestVerifyInit() sets up verification context B to use digest -B from ENGINE B and public key B. B must be created -with EVP_MD_CTX_new() before calling this function. If B is not NULL the -EVP_PKEY_CTX of the verification operation will be written to B<*pctx>: this -can be used to set alternative verification options. - -EVP_DigestVerifyUpdate() hashes B bytes of data at B into the -verification context B. This function can be called several times on the -same B to include additional data. This function is currently implemented -using a macro. - -EVP_DigestVerifyFinal() verifies the data in B against the signature in -B of length B. - -=head1 RETURN VALUES - -EVP_DigestVerifyInit() and EVP_DigestVerifyUpdate() return 1 for success and 0 -for failure. - -EVP_DigestVerifyFinal() returns 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 L. - -=head1 NOTES - -The B 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. - -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 -or 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_cleanup() or a memory leak -will occur. - -=head1 SEE ALSO - -L, -L, -L, L, L, -L, L, L, -L, L - -=head1 HISTORY - -EVP_DigestVerifyInit(), EVP_DigestVerifyUpdate() and EVP_DigestVerifyFinal() -were first added to OpenSSL 1.0.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/EVP_EncryptInit.pod b/doc/crypto/EVP_EncryptInit.pod deleted file mode 100644 index d1af772f..00000000 --- a/doc/crypto/EVP_EncryptInit.pod +++ /dev/null @@ -1,661 +0,0 @@ -=pod - -=head1 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_des_cbc, EVP_des_ecb, -EVP_des_cfb, EVP_des_ofb, EVP_des_ede_cbc, EVP_des_ede, EVP_des_ede_ofb, -EVP_des_ede_cfb, EVP_des_ede3_cbc, EVP_des_ede3, EVP_des_ede3_ofb, -EVP_des_ede3_cfb, EVP_desx_cbc, EVP_rc4, EVP_rc4_40, EVP_rc4_hmac_md5, -EVP_idea_cbc, EVP_idea_ecb, EVP_idea_cfb, EVP_idea_ofb, EVP_rc2_cbc, -EVP_rc2_ecb, EVP_rc2_cfb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc, -EVP_bf_cbc, EVP_bf_ecb, EVP_bf_cfb, EVP_bf_ofb, EVP_cast5_cbc, -EVP_cast5_ecb, EVP_cast5_cfb, EVP_cast5_ofb, EVP_rc5_32_12_16_cbc, -EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_ofb, -EVP_aes_128_cbc, EVP_aes_128_ecb, EVP_aes_128_cfb, EVP_aes_128_ofb, -EVP_aes_192_cbc, EVP_aes_192_ecb, EVP_aes_192_cfb, EVP_aes_192_ofb, -EVP_aes_256_cbc, EVP_aes_256_ecb, EVP_aes_256_cfb, EVP_aes_256_ofb, -EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, -EVP_aes_128_ccm, EVP_aes_192_ccm, EVP_aes_256_ccm, -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_chacha20, EVP_chacha20_poly1305 - EVP cipher routines - -=head1 SYNOPSIS - -=for comment generic - - #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); - - 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_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); - -=head1 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 B -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 B for encryption -with cipher B from ENGINE B. B must be created -before calling this function. B is normally supplied -by a function such as EVP_aes_256_cbc(). If B is NULL then the -default implementation is used. B is the symmetric key to use -and B 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 B in an initial call and supply -the remaining parameters in subsequent calls, all of which have B -set to NULL. This is done when the default cipher parameters are not -appropriate. - -EVP_EncryptUpdate() encrypts B bytes from the buffer B and -writes the encrypted version to B. This function can be called -multiple times to encrypt successive blocks of data. The amount -of data written depends on the block alignment of the encrypted data: -as a result the amount of data written may be anything from zero bytes -to (inl + cipher_block_size - 1) so B should contain sufficient -room. The actual number of bytes written is placed in B. It also -checks if B and B 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 B which should have sufficient space for -one cipher block. The number of bytes written is placed in B. 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 B -passed to EVP_DecryptUpdate() should have sufficient room for -(B + cipher_block_size) bytes unless the cipher block size is 1 in -which case B 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 B 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 B -itself. This function should be called anytime B 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 the B parameter does not need to be -initialized and 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 B, 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 B or B 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 B 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 B or B -structure. The constant B 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 B or B. -It will return zero if the cipher does not use an IV. The constant -B 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 B or B -structure. The constant B 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 -B. - -EVP_CIPHER_CTX_cipher() returns the B structure when passed -an B 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 or -EVP_CIPH_OFB_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. - -=head1 RETURN VALUES - -EVP_CIPHER_CTX_new() returns a pointer to a newly created -B for success and B 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 B 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 B structure. - -EVP_CIPHER_param_to_asn1() and EVP_CIPHER_asn1_to_param() return greater -than zero for success and zero or a negative number. - -=head1 CIPHER LISTING - -All algorithms have a fixed key length unless otherwise stated. - -=over 4 - -=item EVP_enc_null() - -Null cipher: does nothing. - -=item EVP_aes_128_cbc(), EVP_aes_128_ecb(), EVP_aes_128_cfb(), EVP_aes_128_ofb() - -AES with a 128-bit key in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_aes_192_cbc(), EVP_aes_192_ecb(), EVP_aes_192_cfb(), EVP_aes_192_ofb() - -AES with a 192-bit key in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_aes_256_cbc(), EVP_aes_256_ecb(), EVP_aes_256_cfb(), EVP_aes_256_ofb() - -AES with a 256-bit key in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_des_cbc(), EVP_des_ecb(), EVP_des_cfb(), EVP_des_ofb() - -DES in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_des_ede_cbc(), EVP_des_ede(), EVP_des_ede_ofb(), EVP_des_ede_cfb() - -Two key triple DES in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_des_ede3_cbc(), EVP_des_ede3(), EVP_des_ede3_ofb(), EVP_des_ede3_cfb() - -Three key triple DES in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_desx_cbc() - -DESX algorithm in CBC mode. - -=item EVP_rc4() - -RC4 stream cipher. This is a variable key length cipher with default key length 128 bits. - -=item EVP_rc4_40() - -RC4 stream cipher with 40 bit key length. -This is obsolete and new code should use EVP_rc4() -and the EVP_CIPHER_CTX_set_key_length() function. - -=item EVP_idea_cbc() EVP_idea_ecb(), EVP_idea_cfb(), EVP_idea_ofb() - -IDEA encryption algorithm in CBC, ECB, CFB and OFB modes respectively. - -=item EVP_rc2_cbc(), EVP_rc2_ecb(), EVP_rc2_cfb(), EVP_rc2_ofb() - -RC2 encryption algorithm in CBC, ECB, CFB 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. - -=item 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. -These are obsolete and new code should use EVP_rc2_cbc(), EVP_CIPHER_CTX_set_key_length() and -EVP_CIPHER_CTX_ctrl() to set the key length and effective key length. - -=item EVP_bf_cbc(), EVP_bf_ecb(), EVP_bf_cfb(), EVP_bf_ofb() - -Blowfish encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a variable key -length cipher. - -=item EVP_cast5_cbc(), EVP_cast5_ecb(), EVP_cast5_cfb(), EVP_cast5_ofb() - -CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a variable key -length cipher. - -=item EVP_rc5_32_12_16_cbc(), EVP_rc5_32_12_16_ecb(), EVP_rc5_32_12_16_cfb(), EVP_rc5_32_12_16_ofb() - -RC5 encryption algorithm in CBC, ECB, CFB 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. - -=item EVP_aes_128_gcm(), EVP_aes_192_gcm(), EVP_aes_256_gcm() - -AES Galois Counter Mode (GCM) for 128, 192 and 256 bit keys respectively. -These ciphers require additional control operations to function correctly: see -the L section below for details. - -=item EVP_aes_128_ocb(void), EVP_aes_192_ocb(void), EVP_aes_256_ocb(void) - -Offset Codebook Mode (OCB) for 128, 192 and 256 bit keys respectively. -These ciphers require additional control operations to function correctly: see -the L section below for details. - -=item EVP_aes_128_ccm(), EVP_aes_192_ccm(), EVP_aes_256_ccm() - -AES Counter with CBC-MAC Mode (CCM) for 128, 192 and 256 bit keys respectively. -These ciphers require additional control operations to function correctly: see -CCM mode section below for details. - -=item EVP_chacha20() - -The ChaCha20 stream cipher. The key length is 256 bits, the IV is 96 bits long. - -=item 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 -L section for more information. - -=back - -=head1 GCM and OCB Modes - -For GCM and OCB mode ciphers the behaviour of the EVP interface is subtly -altered and several additional ctrl operations are supported. - -To specify any additional authenticated data (AAD) a call to EVP_CipherUpdate(), -EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made with the output -parameter B set to B. - -When decrypting the return value of EVP_DecryptFinal() or EVP_CipherFinal() -indicates if the operation was successful. If it does not indicate success -the authentication operation has failed and any output data B -be used as it is corrupted. - -The following ctrls are supported in both 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 B bytes of the tag value to the buffer indicated by B. -This call can only be made when encrypting data and B all data has been -processed (e.g. after an EVP_EncryptFinal() call). For OCB mode the taglen must -either be 16 or the value previously set via EVP_CTRL_OCB_SET_TAGLEN. - - EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag); - -Sets the expected tag to B bytes from B. This call is only legal -when decrypting data. For OCB mode the taglen must either be 16 or the value -previously set via EVP_CTRL_AEAD_SET_TAG. - -In OCB mode calling this with B set to NULL sets the tag length. The tag -length can only be set before specifying an IV. If not called a default tag -length is used. For OCB AES the default is 16 (i.e. 128 bits). This is also the -maximum tag length for OCB. - -=head1 CCM Mode - -The behaviour of CCM mode ciphers is similar to GCM mode but with a few -additional requirements and different ctrl values. - -Like GCM and OCB modes any additional authenticated data (AAD) is passed by calling -EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output -parameter B set to B. Additionally the total plaintext or ciphertext -length B be passed to EVP_CipherUpdate(), EVP_EncryptUpdate() or -EVP_DecryptUpdate() with the output and input parameters (B and B) -set to B and the length passed in the B 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 B tag value when decrypting or -the length of the tag (with the B parameter set to NULL) when encrypting. -The tag length is often referred to as B. If not set a default value is -used (12 for AES). - - EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL); - -Sets the CCM B 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 B<15 - L> so it is 7 by default -for AES. - -=head1 NOTES - -Where possible the B 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 -B 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 B padding bytes of value B 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 B 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. - -EVP_get_cipherbynid(), and EVP_get_cipherbyobj() are implemented as macros. - -=head1 BUGS - -For RC5 the number of rounds can currently only be set to 8, 12 or 16. This is -a limitation of the current RC5 code rather than the EVP interface. - -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. - -=head1 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 */ - 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 */ - 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 null terminated and may contain embedded - * nulls. - */ - out = fopen(outfile, "wb"); - fwrite(outbuf, 1, outlen, out); - fclose(out); - return 1; - } - -The ciphertext from the above example can be decrypted using the B -utility with the command line (shown on two lines for clarity): - - openssl idea -d - -=head1 HISTORY - -Support for OCB mode was added in OpenSSL 1.1.0 - -B 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(). - -=head1 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 -L. - -=cut diff --git a/doc/crypto/EVP_PKEY_CTX_set_hkdf_md.pod b/doc/crypto/EVP_PKEY_CTX_set_hkdf_md.pod deleted file mode 100644 index 61e0eec5..00000000 --- a/doc/crypto/EVP_PKEY_CTX_set_hkdf_md.pod +++ /dev/null @@ -1,128 +0,0 @@ -=pod - -=head1 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 - -HMAC-based Extract-and-Expand key derivation algorithm - -=head1 SYNOPSIS - - #include - - 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); - -=head1 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_set_hkdf_md() sets the message digest associated with the HKDF. - -EVP_PKEY_CTX_set1_hkdf_salt() sets the salt to B bytes of the -buffer B. Any existing value is replaced. - -EVP_PKEY_CTX_set_hkdf_key() sets the key to B bytes of the buffer -B. Any existing value is replaced. - -EVP_PKEY_CTX_add1_hkdf_info() sets the info value to B bytes of the -buffer B. If a value is already set, it is appended to the existing -value. - -=head1 STRING CTRLS - -HKDF also supports string based control operations via -L. -The B parameter "md" uses the supplied B as the name of the digest -algorithm to use. -The B parameters "salt", "key" and "info" use the supplied B -parameter as a B, B or B value. -The names "hexsalt", "hexkey" and "hexinfo" are similar except they take a hex -string which is converted to binary. - -=head1 NOTES - -All these functions are implemented as macros. - -A context for HKDF can be obtained by calling: - - EVP_PKEY_CTX *pctx = EVP_PKEY_new_id(EVP_PKEY_HKDF, NULL); - -The digest, key, salt and info values must be set before a key is derived or -an error occurs. - -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 the KDF is specified via the length parameter to the -L function. -Since the HKDF output length is variable, passing a B buffer as a means -to obtain the requisite length is not meaningful with HKDF. -Instead, the caller must allocate a buffer of the desired length, and pass that -buffer to L along with (a pointer initialized to) the -desired length. - -Optimised versions of HKDF can be implemented in an ENGINE. - -=head1 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. - -=head1 EXAMPLE - -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_salt(pctx, "salt", 4) <= 0) - /* Error */ - if (EVP_PKEY_CTX_set1_key(pctx, "secret", 6) <= 0) - /* Error */ - if (EVP_PKEY_CTX_add1_hkdf_info(pctx, "label", 6) <= 0) - /* Error */ - if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) - /* Error */ - -=head1 CONFORMING TO - -RFC 5869 - -=head1 SEE ALSO - -L, -L, -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/EVP_PKEY_keygen.pod b/doc/crypto/EVP_PKEY_keygen.pod deleted file mode 100644 index b1e708fc..00000000 --- a/doc/crypto/EVP_PKEY_keygen.pod +++ /dev/null @@ -1,175 +0,0 @@ -=pod - -=head1 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 -- key and parameter generation functions - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -The EVP_PKEY_keygen_init() function initializes a public key algorithm -context using key B for a key generation operation. - -The EVP_PKEY_keygen() function performs a key generation operation, the -generated key is written to B. - -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 B. 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 B 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 -B 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". - -=head1 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. - -=head1 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. - -=head1 EXAMPLES - -Generate a 2048 bit RSA key: - - #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 */ - -Generate a key from a set of parameters: - - #include - #include - - EVP_PKEY_CTX *ctx; - EVP_PKEY *pkey = NULL, *param; - /* Assumed param is set up already */ - ctx = EVP_PKEY_CTX_new(param); - 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; - 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; - } - -=head1 SEE ALSO - -L, -L, -L, -L, -L, -L, -L - -=head1 HISTORY - -These functions were first added to OpenSSL 1.0.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/OCSP_response_status.pod b/doc/crypto/OCSP_response_status.pod deleted file mode 100644 index 180ab8d3..00000000 --- a/doc/crypto/OCSP_response_status.pod +++ /dev/null @@ -1,100 +0,0 @@ -=pod - -=head1 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 response functions - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -OCSP_response_status() returns the OCSP response status of B. It returns -one of the values: B, -B, -B, B -B, or B. - -OCSP_response_get1_basic() decodes and returns the B structure -contained in B. - -OCSP_response_create() creates and returns an B structure for -B and optionally including basic response B. - -OCSP_RESPONSE_free() frees up OCSP response B. - -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 B 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 B 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 B matches -with the X509 certificate B. - -=head1 RETURN VALUES - -OCSP_RESPONSE_status() returns a status value. - -OCSP_response_get1_basic() returns an B structure pointer or -B if an error occurred. - -OCSP_response_create() returns an B structure pointer or B -if an error occurred. - -OCSP_RESPONSE_free() does not return a value. - -OCSP_RESPID_set_by_name() and OCSP_RESPID_set_by_key() 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. - -=head1 NOTES - -OCSP_response_get1_basic() is only called if the status of a response is -B. - -=head1 SEE ALSO - -L -L -L -L -L -L -L -L - -=head1 HISTORY - -The OCSP_RESPID_set_by_name(), OCSP_RESPID_set_by_key() and OCSP_RESPID_match() -functions were added in OpenSSL 1.1.0a. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/OpenSSL_add_all_algorithms.pod b/doc/crypto/OpenSSL_add_all_algorithms.pod deleted file mode 100644 index aaa28dd6..00000000 --- a/doc/crypto/OpenSSL_add_all_algorithms.pod +++ /dev/null @@ -1,90 +0,0 @@ -=pod - -=head1 NAME - -OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup - -add algorithms to internal table - -=head1 SYNOPSIS - - #include - -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 - -=head1 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(). In -OpenSSL versions prior to 1.1.0 these functions initialised and de-initialised -this table. From OpenSSL 1.1.0 they are deprecated. No explicit initialisation -or de-initialisation is required. See L for further -information. - -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. - -=head1 RETURN VALUES - -None of the functions return a value. - -=head1 NOTES - -A typical application will call OpenSSL_add_all_algorithms() initially and -EVP_cleanup() before exiting. - -An application does not need to add algorithms to use them explicitly, for example -by EVP_sha1(). It just needs to add them if it (or any of the functions it calls) -needs to lookup algorithms. - -The cipher and digest lookup functions are used in many parts of the library. If -the table is not initialized several functions will misbehave and complain they -cannot find algorithms. This includes the PEM, PKCS#12, SSL and S/MIME libraries. -This is a common query in the OpenSSL mailing lists. - -Calling OpenSSL_add_all_algorithms() links in all algorithms: as a result a -statically linked executable can be quite large. If this is important it is possible -to just add the required ciphers and digests. - -=head1 BUGS - -Although the functions do not return error codes it is possible for them to fail. -This will only happen as a result of a memory allocation failure so this is not -too much of a problem in practice. - -=head1 SEE ALSO - -L, L, -L - -=head1 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(). - -=head1 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 -L. - -=cut diff --git a/doc/crypto/PKCS12_newpass.pod b/doc/crypto/PKCS12_newpass.pod deleted file mode 100644 index 6b22fd72..00000000 --- a/doc/crypto/PKCS12_newpass.pod +++ /dev/null @@ -1,115 +0,0 @@ -=pod - -=head1 NAME - -PKCS12_newpass - change the password of a PKCS12 structure - -=head1 SYNOPSIS - - #include - - int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); - -=head1 DESCRIPTION - -PKCS12_newpass() changes the password of a PKCS12 structure. - -B is a pointer to a PKCS12 structure. B is the existing password -and B is the new password. - -=head1 NOTES - -Each of B and B 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 -L, for example. - -=head1 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(). - -=head1 EXAMPLE - -This example loads a PKCS#12 file, changes its password and writes out -the result to a new file. - - #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\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; - } - - -=head1 NOTES - -If the PKCS#12 structure does not have a password, then you must use the empty -string "" for B. Using NULL for B will result in a -PKCS12_newpass() failure. - -If the wrong password is used for B 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. - -=head1 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. - -=head1 SEE ALSO - -L, L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RAND_add.pod b/doc/crypto/RAND_add.pod deleted file mode 100644 index 46de165a..00000000 --- a/doc/crypto/RAND_add.pod +++ /dev/null @@ -1,79 +0,0 @@ -=pod - -=head1 NAME - -RAND_add, RAND_seed, RAND_status, RAND_event, RAND_screen - add -entropy to the PRNG - -=head1 SYNOPSIS - - #include - - void RAND_seed(const void *buf, int num); - - void RAND_add(const void *buf, int num, double entropy); - - int RAND_status(void); - - #if OPENSSL_API_COMPAT < 0x10100000L - int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam); - void RAND_screen(void); - #endif - -=head1 DESCRIPTION - -RAND_add() mixes the B bytes at B into the PRNG state. Thus, -if the data at B are unpredictable to an adversary, this -increases the uncertainty about the state and makes the PRNG output -less predictable. Suitable input comes from user interaction (random -key presses, mouse movements) and certain hardware events. The -B argument is (the lower bound of) an estimate of how much -randomness is contained in B, measured in bytes. Details about -sources of randomness and how to estimate their entropy can be found -in the literature, e.g. RFC 1750. - -RAND_add() may be called with sensitive data such as user entered -passwords. The seed values cannot be recovered from the PRNG output. - -OpenSSL makes sure that the PRNG state is unique for each thread. On -systems that provide C, the randomness device is used -to seed the PRNG transparently. However, on all other systems, the -application is responsible for seeding the PRNG by calling RAND_add(), -L -or L. - -RAND_seed() is equivalent to RAND_add() when B. - -RAND_event() and RAND_screen() are deprecated and should not be called. - -=head1 RETURN VALUES - -RAND_status() returns 1 if the PRNG has been seeded -with enough data, 0 otherwise. - -RAND_event() calls RAND_poll() and returns RAND_status(). - -RAND_screen calls RAND_poll(). - -The other functions do not return values. - -=head1 HISTORY - -RAND_event() and RAND_screen() are deprecated since OpenSSL -1.1.0. Use the functions described above instead. - -=head1 SEE ALSO - -L, L, -L, L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RAND_bytes.pod b/doc/crypto/RAND_bytes.pod deleted file mode 100644 index 684215ce..00000000 --- a/doc/crypto/RAND_bytes.pod +++ /dev/null @@ -1,58 +0,0 @@ -=pod - -=head1 NAME - -RAND_bytes, RAND_pseudo_bytes - generate random data - -=head1 SYNOPSIS - - #include - - int RAND_bytes(unsigned char *buf, int num); - -Deprecated: - - #if OPENSSL_API_COMPAT < 0x10100000L - int RAND_pseudo_bytes(unsigned char *buf, int num); - #endif - -=head1 DESCRIPTION - -RAND_bytes() puts B cryptographically strong pseudo-random bytes -into B. An error occurs if the PRNG has not been seeded with -enough randomness to ensure an unpredictable byte sequence. - -RAND_pseudo_bytes() has been deprecated. Users should use RAND_bytes() instead. -RAND_pseudo_bytes() puts B pseudo-random bytes into B. -Pseudo-random byte sequences generated by RAND_pseudo_bytes() will be -unique if they are of sufficient length, but are not necessarily -unpredictable. They can be used for non-cryptographic purposes and for -certain purposes in cryptographic protocols, but usually not for key -generation etc. - -The contents of B is mixed into the entropy pool before retrieving -the new pseudo-random bytes unless disabled at compile time (see FAQ). - -=head1 RETURN VALUES - -RAND_bytes() returns 1 on success, 0 otherwise. The error code can be -obtained by L. RAND_pseudo_bytes() returns 1 if the -bytes generated are cryptographically strong, 0 otherwise. Both -functions return -1 if they are not supported by the current RAND -method. - -=head1 SEE ALSO - -L, L, -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RAND_cleanup.pod b/doc/crypto/RAND_cleanup.pod deleted file mode 100644 index 2640c7d2..00000000 --- a/doc/crypto/RAND_cleanup.pod +++ /dev/null @@ -1,42 +0,0 @@ -=pod - -=head1 NAME - -RAND_cleanup - erase the PRNG state - -=head1 SYNOPSIS - - #include - - #if OPENSSL_API_COMPAT < 0x10100000L - void RAND_cleanup(void) - #endif - -=head1 DESCRIPTION - -Prior to OpenSSL 1.1.0 RAND_cleanup() erases the memory used by the PRNG. This -function is deprecated and as of version 1.1.0 does nothing. No explicit -initialisation or de-initialisation is necessary. See L. - -=head1 RETURN VALUE - -RAND_cleanup() returns no value. - -=head1 SEE ALSO - -L - -=head1 HISTORY - -RAND_cleanup() was deprecated in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RAND_egd.pod b/doc/crypto/RAND_egd.pod deleted file mode 100644 index fcc57c06..00000000 --- a/doc/crypto/RAND_egd.pod +++ /dev/null @@ -1,87 +0,0 @@ -=pod - -=head1 NAME - -RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes - query entropy gathering daemon - -=head1 SYNOPSIS - - #include - - int RAND_egd(const char *path); - int RAND_egd_bytes(const char *path, int bytes); - - int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); - -=head1 DESCRIPTION - -RAND_egd() queries the entropy gathering daemon EGD on socket B. -It queries 255 bytes and uses L to seed the -OpenSSL built-in PRNG. RAND_egd(path) is a wrapper for -RAND_egd_bytes(path, 255); - -RAND_egd_bytes() queries the entropy gathering daemon EGD on socket B. -It queries B bytes and uses L to seed the -OpenSSL built-in PRNG. -This function is more flexible than RAND_egd(). -When only one secret key must -be generated, it is not necessary to request the full amount 255 bytes from -the EGD socket. This can be advantageous, since the amount of entropy -that can be retrieved from EGD over time is limited. - -RAND_query_egd_bytes() performs the actual query of the EGD daemon on socket -B. If B is given, B bytes are queried and written into -B. If B is NULL, B bytes are queried and used to seed the -OpenSSL built-in PRNG using L. - -=head1 NOTES - -On systems without /dev/*random devices providing entropy from the kernel, -the EGD entropy gathering daemon can be used to collect entropy. It provides -a socket interface through which entropy can be gathered in chunks up to -255 bytes. Several chunks can be queried during one connection. - -EGD is available from http://www.lothar.com/tech/crypto/ (C to install). It is run as B -I, where I is an absolute path designating a socket. When -RAND_egd() is called with that path as an argument, it tries to read -random bytes that EGD has collected. RAND_egd() retrieves entropy from the -daemon using the daemon's "non-blocking read" command which shall -be answered immediately by the daemon without waiting for additional -entropy to be collected. The write and read socket operations in the -communication are blocking. - -Alternatively, the EGD-interface compatible daemon PRNGD can be used. It is -available from -http://prngd.sourceforge.net/ . -PRNGD does employ an internal PRNG itself and can therefore never run -out of entropy. - -OpenSSL automatically queries EGD when entropy is requested via RAND_bytes() -or the status is checked via RAND_status() for the first time, if the socket -is located at /var/run/egd-pool, /dev/egd-pool or /etc/egd-pool. - -=head1 RETURN VALUE - -RAND_egd() and RAND_egd_bytes() return the number of bytes read from the -daemon on success, and -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, and -1 if the connection failed. The PRNG state is not considered. - -=head1 SEE ALSO - -L, L, -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RAND_load_file.pod b/doc/crypto/RAND_load_file.pod deleted file mode 100644 index 1053a925..00000000 --- a/doc/crypto/RAND_load_file.pod +++ /dev/null @@ -1,79 +0,0 @@ -=pod - -=head1 NAME - -RAND_load_file, RAND_write_file, RAND_file_name - PRNG seed file - -=head1 SYNOPSIS - - #include - - const char *RAND_file_name(char *buf, size_t num); - - int RAND_load_file(const char *filename, long max_bytes); - - int RAND_write_file(const char *filename); - -=head1 DESCRIPTION - -RAND_file_name() generates a default path for the random seed -file. B points to a buffer of size B in which to store the -filename. - -On all systems, if the environment variable B is set, its -value will be used as the seed file name. - -Otherwise, the file is called ".rnd", found in platform dependent locations: - -=over 4 - -=item On Windows (in order of preference) - -%HOME%, %USERPROFILE%, %SYSTEMROOT%, C:\ - -=item On VMS - -SYS$LOGIN: - -=item On all other systems - -$HOME - -=back - -If C<$HOME> (on non-Windows and non-VMS system) is not set either, or -B is too small for the path name, an error occurs. - -RAND_load_file() reads a number of bytes from file B and -adds them to the PRNG. If B is non-negative, -up to B are read; -if B is -1, the complete file is read. - -RAND_write_file() writes a number of random bytes (currently 1024) to -file B which can be used to initialize the PRNG by calling -RAND_load_file() in a later session. - -=head1 RETURN VALUES - -RAND_load_file() returns the number of bytes read or -1 on error. - -RAND_write_file() returns the number of bytes written, and -1 if the -bytes written were generated without appropriate seed. - -RAND_file_name() returns a pointer to B on success, and NULL on -error. - -=head1 SEE ALSO - -L, L, L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RAND_set_rand_method.pod b/doc/crypto/RAND_set_rand_method.pod deleted file mode 100644 index 02fe90ca..00000000 --- a/doc/crypto/RAND_set_rand_method.pod +++ /dev/null @@ -1,81 +0,0 @@ -=pod - -=head1 NAME - -RAND_set_rand_method, RAND_get_rand_method, RAND_OpenSSL - select RAND method - -=head1 SYNOPSIS - - #include - - void RAND_set_rand_method(const RAND_METHOD *meth); - - const RAND_METHOD *RAND_get_rand_method(void); - - RAND_METHOD *RAND_OpenSSL(void); - -=head1 DESCRIPTION - -A B specifies the functions that OpenSSL uses for random number -generation. By modifying the method, alternative implementations such as -hardware RNGs may be used. IMPORTANT: See the NOTES section for important -information about how these RAND API functions are affected by the use of -B API calls. - -Initially, the default RAND_METHOD is the OpenSSL internal implementation, as -returned by RAND_OpenSSL(). - -RAND_set_default_method() makes B the method for PRNG use. B: This is -true only whilst no ENGINE has been set as a default for RAND, so this function -is no longer recommended. - -RAND_get_default_method() returns a pointer to the current RAND_METHOD. -However, the meaningfulness of this result is dependent on whether the ENGINE -API is being used, so this function is no longer recommended. - -=head1 THE RAND_METHOD STRUCTURE - - typedef struct rand_meth_st - { - void (*seed)(const void *buf, int num); - int (*bytes)(unsigned char *buf, int num); - void (*cleanup)(void); - void (*add)(const void *buf, int num, int entropy); - int (*pseudorand)(unsigned char *buf, int num); - int (*status)(void); - } RAND_METHOD; - -The components point to method implementations used by (or called by), in order, -RAND_seed(), RAND_bytes(), internal RAND cleanup, RAND_add(), RAND_pseudo_rand() -and RAND_status(). -Each component may be NULL if the function is not implemented. - -=head1 RETURN VALUES - -RAND_set_rand_method() returns no value. RAND_get_rand_method() and -RAND_OpenSSL() return pointers to the respective methods. - -=head1 NOTES - -RAND_METHOD implementations are grouped together with other -algorithmic APIs (eg. RSA_METHOD, EVP_CIPHER, etc) in B modules. If a -default ENGINE is specified for RAND functionality using an ENGINE API function, -that will override any RAND defaults set using the RAND API (ie. -RAND_set_rand_method()). For this reason, the ENGINE API is the recommended way -to control default implementations for use in RAND and other cryptographic -algorithms. - -=head1 SEE ALSO - -L, L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RSA_generate_key.pod b/doc/crypto/RSA_generate_key.pod deleted file mode 100644 index e51c0b14..00000000 --- a/doc/crypto/RSA_generate_key.pod +++ /dev/null @@ -1,88 +0,0 @@ -=pod - -=head1 NAME - -RSA_generate_key_ex, RSA_generate_key - generate RSA key pair - -=head1 SYNOPSIS - - #include - - int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); - -Deprecated: - - #if OPENSSL_API_COMPAT < 0x00908000L - RSA *RSA_generate_key(int num, unsigned long e, - void (*callback)(int, int, void *), void *cb_arg); - #endif - -=head1 DESCRIPTION - -RSA_generate_key_ex() generates a key pair and stores it in the B -structure provided in B. The pseudo-random number generator must -be seeded prior to calling RSA_generate_key_ex(). - -The modulus size will be of length B, and the public exponent will be -B. Key sizes with B E 1024 should be considered insecure. -The exponent is an odd number, typically 3, 17 or 65537. - -A callback function may be used to provide feedback about the -progress of the key generation. If B is not B, it -will be called as follows using the BN_GENCB_call() function -described on the L page. - -=over 2 - -=item * - -While a random prime number is generated, it is called as -described in L. - -=item * - -When the n-th randomly generated prime is rejected as not -suitable for the key, B is called. - -=item * - -When a random p has been found with p-1 relatively prime to B, -it is called as B. - -=back - -The process is then repeated for prime q with B. - -RSA_generate_key() is deprecated (new applications should use -RSA_generate_key_ex() instead). RSA_generate_key() works in the same way as -RSA_generate_key_ex() except it uses "old style" call backs. See -L for further details. - -=head1 RETURN VALUE - -RSA_generate_key_ex() returns 1 on success or 0 on error. -RSA_generate_key() returns the key on success or B on error. - -The error codes can be obtained by L. - -=head1 BUGS - -B is used with two different meanings. - -RSA_generate_key() goes into an infinite loop for illegal input values. - -=head1 SEE ALSO - -L, L, -L, L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RSA_get0_key.pod b/doc/crypto/RSA_get0_key.pod deleted file mode 100644 index 579a2df0..00000000 --- a/doc/crypto/RSA_get0_key.pod +++ /dev/null @@ -1,112 +0,0 @@ -=pod - -=head1 NAME - -RSA_set0_key, RSA_set0_factors, RSA_set0_crt_params, RSA_get0_key, -RSA_get0_factors, RSA_get0_crt_params, RSA_clear_flags, -RSA_test_flags, RSA_set_flags, RSA_get0_engine - Routines for getting -and setting data in an RSA object - -=head1 SYNOPSIS - - #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); - 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); - -=head1 DESCRIPTION - -An RSA object contains the components for the public and private key, -B, B, B, B

, B, B, B and B. B is -the modulus common to both public and private key, B is the public -exponent and B is the private exponent. B

, B, B, -B and B are the factors for the second representation of a -private key (see PKCS#1 section 3 Key Types), where B

and B are -the first and second factor of B and B, B and B -are the exponents and coefficient for CRT calculations. - -The B, B and B parameters can be obtained by calling -RSA_get0_key(). If they have not been set yet, then B<*n>, B<*e> and -B<*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 B, B and B parameter values can be set by calling -RSA_set0_key() and passing the new values for B, B and B as -parameters to the function. The values B and B must be non-NULL -the first time this function is called on a given RSA object. The -value B 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 B

and B parameters can be obtained and -set with RSA_get0_factors() and RSA_set0_factors(), and the B, -B and B 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. - -RSA_set_flags() sets the flags in the B 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 B 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. - -=head1 NOTES - -Values retrieved with RSA_get0_key() are owned by the RSA object used -in the call and may therefore I 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(). - -=head1 RETURN VALUES - -RSA_set0_key(), RSA_set0_factors and RSA_set0_crt_params() return 1 on -success or 0 on failure. - -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. - -=head1 SEE ALSO - -L, L, L - -=head1 HISTORY - -The functions described here were added in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RSA_meth_new.pod b/doc/crypto/RSA_meth_new.pod deleted file mode 100644 index 9970aa6b..00000000 --- a/doc/crypto/RSA_meth_new.pod +++ /dev/null @@ -1,235 +0,0 @@ -=pod - -=head1 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 -- Routines to build up RSA methods - -=head1 SYNOPSIS - - #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(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)); - -=head1 DESCRIPTION - -The B type is a structure used for the provision of custom -RSA implementations. It provides a set of of functions used by OpenSSL -for the implementation of the various RSA capabilities. See the L -page for more information. - -RSA_meth_new() creates a new B structure. It should be -given a unique B and a set of B. The B should be a -NULL terminated string, which will be duplicated and stored in the -B object. It is the callers responsibility to free the -original string. The flags will be used during the construction of a -new B object based on this B. Any new B object -will have those flags set by default. - -RSA_meth_dup() creates a duplicate copy of the B object -passed as a parameter. This might be useful for creating a new -B based on an existing one, but with some differences. - -RSA_meth_free() destroys an B 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 B. 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(). The parameter for the function has the same -meaning as for RSA_generate_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. - - -=head1 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. - -=head1 SEE ALSO - -L, L, L, -L, L, L - -=head1 HISTORY - -The functions described here were added in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/RSA_size.pod b/doc/crypto/RSA_size.pod deleted file mode 100644 index eb6e4813..00000000 --- a/doc/crypto/RSA_size.pod +++ /dev/null @@ -1,46 +0,0 @@ -=pod - -=head1 NAME - -RSA_size, RSA_bits - get RSA modulus size - -=head1 SYNOPSIS - -#include - -int RSA_size(const RSA *rsa); - -int RSA_bits(const RSA *rsa); - -=head1 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. - -B and Bn> must not be B. - -=head1 RETURN VALUE - -The size. - -=head1 SEE ALSO - -L - -=head1 HISTORY - -RSA_bits() was added in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/UI_new.pod b/doc/crypto/UI_new.pod deleted file mode 100644 index 5b98cf8d..00000000 --- a/doc/crypto/UI_new.pod +++ /dev/null @@ -1,203 +0,0 @@ -=pod - -=head1 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_get0_user_data, UI_get0_result, UI_process, -UI_ctrl, UI_set_default_method, UI_get_default_method, UI_get_method, -UI_set_method, UI_OpenSSL, UI_null - user interface - -=head1 SYNOPSIS - - #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); - void *UI_get0_user_data(UI *ui); - - const char *UI_get0_result(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); - -=head1 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 L), 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. 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() to find the result -to the prompt. - -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(). - -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 necessarely 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 B 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 I argument) and one describing -the possible answers (given through the I 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 B, 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 -B, 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 I for I:". 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 piece of memory 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_get0_user_data() retrieves the data that has last been given to the -UI with UI_add_user_data(). - -UI_get0_result() returns a pointer to 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: B, which makes UI_process() -print the OpenSSL error stack as part of processing the UI, and -B, 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. - -=head1 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. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/X509_NAME_ENTRY_get_object.pod b/doc/crypto/X509_NAME_ENTRY_get_object.pod deleted file mode 100644 index 72e0f7b1..00000000 --- a/doc/crypto/X509_NAME_ENTRY_get_object.pod +++ /dev/null @@ -1,77 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -X509_NAME_ENTRY_get_object() retrieves the field name of B in -and B structure. - -X509_NAME_ENTRY_get_data() retrieves the field value of B in -and B structure. - -X509_NAME_ENTRY_set_object() sets the field name of B to B. - -X509_NAME_ENTRY_set_data() sets the field value of B to string type -B and value determined by B and B. - -X509_NAME_ENTRY_create_by_txt(), X509_NAME_ENTRY_create_by_NID() -and X509_NAME_ENTRY_create_by_OBJ() create and return an -B structure. - -=head1 NOTES - -X509_NAME_ENTRY_get_object() and X509_NAME_ENTRY_get_data() can be -used to examine an B function as returned by -X509_NAME_get_entry() for example. - -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_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 B structures -are almost always part of B structures and the -corresponding B 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 B functions such as -X509_NAME_add_entry_by_txt(). So for example B can be set to -B 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. - -=head1 SEE ALSO - -L, L, -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/X509_STORE_CTX_set_verify_cb.pod b/doc/crypto/X509_STORE_CTX_set_verify_cb.pod deleted file mode 100644 index 3be256dc..00000000 --- a/doc/crypto/X509_STORE_CTX_set_verify_cb.pod +++ /dev/null @@ -1,215 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -X509_STORE_CTX_set_verify_cb() sets the verification callback of B to -B 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 B essential and the default operation -is often sufficient. - -The B 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 -B is set then B is set to 2 to indicate the -policy checking is complete. - -The B parameter to the callback is the B 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 B mechanism. - -X509_STORE_CTX_get_verify_cb() returns the value of the current callback -for the specific B. - -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 B, please see -L for more information. - - -=head1 WARNING - -In general a verification callback should B 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 B certificate (including untrusted generated ones) will be -accepted. - -=head1 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 -B structure is created and destroyed internally and the -only way to set a custom verification callback is by inheriting it from the -associated B. - -=head1 RETURN VALUES - -X509_STORE_CTX_set_verify_cb() does not return a value. - -=head1 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 B 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 B is assumed to be -a global logging B, an alternative would to store a BIO in B using -B. - - 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, "\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); - } - -=head1 SEE ALSO - -L -L -L - -=head1 HISTORY - -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() were added in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/X509_get0_signature.pod b/doc/crypto/X509_get0_signature.pod deleted file mode 100644 index 61a2dda9..00000000 --- a/doc/crypto/X509_get0_signature.pod +++ /dev/null @@ -1,97 +0,0 @@ -=pod - -=head1 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 - signature information - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -X509_get0_signature() sets B<*psig> to the signature of B and B<*palg> -to the signature algorithm of B. The values returned are internal -pointers which B be freed up after the call. - -X509_get0_tbs_sigalg() returns the signature algorithm in the signed -portion of B. - -X509_get_signature_nid() returns the NID corresponding to the signature -algorithm of B. - -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. - -=head1 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). - -=head1 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. - -=head1 SEE ALSO - -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L - -=head1 HISTORY - -X509_get0_signature() and X509_get_signature_nid() were first added to -OpenSSL 1.0.2. - -X509_REQ_get0_signature(), X509_REQ_get_signature_nid(), -X509_CRL_get0_signature() and X509_CRL_get_signature_nid() were first added -to OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/crypto/d2i_DHparams.pod b/doc/crypto/d2i_DHparams.pod deleted file mode 100644 index cd1c162b..00000000 --- a/doc/crypto/d2i_DHparams.pod +++ /dev/null @@ -1,35 +0,0 @@ -=pod - -=head1 NAME - -d2i_DHparams, i2d_DHparams - PKCS#3 DH parameter functions - -=head1 SYNOPSIS - - #include - - DH *d2i_DHparams(DH **a, unsigned char **pp, long length); - int i2d_DHparams(DH *a, unsigned char **pp); - -=head1 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 L manual page. - -=head1 SEE ALSO - -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/d2i_Netscape_RSA.pod b/doc/crypto/d2i_Netscape_RSA.pod deleted file mode 100644 index ee39bd81..00000000 --- a/doc/crypto/d2i_Netscape_RSA.pod +++ /dev/null @@ -1,38 +0,0 @@ -=pod - -=head1 NAME - -i2d_Netscape_RSA, -d2i_Netscape_RSA -- insecure RSA public and private key encoding functions - -=head1 SYNOPSIS - - #include - - int i2d_Netscape_RSA(RSA *a, unsigned char **pp, int (*cb)()); - RSA * d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length, int (*cb)()); - -=head1 DESCRIPTION - -These functions decode and encode an RSA private -key in NET format. These functions are present to provide compatibility -with very old software. This format has some severe security weaknesses -and should be avoided if possible. - -These functions are similar to the B functions. - -=head1 SEE ALSO - -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/d2i_PKCS8PrivateKey_bio.pod b/doc/crypto/d2i_PKCS8PrivateKey_bio.pod deleted file mode 100644 index 164d93ff..00000000 --- a/doc/crypto/d2i_PKCS8PrivateKey_bio.pod +++ /dev/null @@ -1,61 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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); - -=head1 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 B function as described in L. - -=head1 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 L for details. - -=head1 SEE ALSO - -L - -=head1 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 -L. - -=cut diff --git a/doc/crypto/x509.pod b/doc/crypto/x509.pod deleted file mode 100644 index 483b0376..00000000 --- a/doc/crypto/x509.pod +++ /dev/null @@ -1,75 +0,0 @@ -=pod - -=for comment openssl_manual_section:7 - -=head1 NAME - -x509 - X.509 certificate handling - -=head1 SYNOPSIS - - #include - -=head1 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. - -BI<...>, BI<...> and BI<...> handle X.509 -certificates, with some exceptions, shown below. - -BI<...>, BI<...> and BI<...> -handle X.509 CRLs. - -BI<...>, BI<...> and BI<...> -handle PKCS#10 certificate requests. - -BI<...> handle certificate names. - -BI<...> handle certificate attributes. - -BI<...> handle certificate extensions. - -=head1 SEE ALSO - -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L - -=head1 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 -L. - -=cut diff --git a/doc/apps/CA.pl.pod b/doc/man1/CA.pl.pod similarity index 83% rename from doc/apps/CA.pl.pod rename to doc/man1/CA.pl.pod index a7f3970c..6949ec62 100644 --- a/doc/apps/CA.pl.pod +++ b/doc/man1/CA.pl.pod @@ -42,28 +42,28 @@ by the use of some simple options. =item B, B<-h>, B<-help> -prints a usage message. +Prints a usage message. =item B<-newcert> -creates a new self signed certificate. The private key is written to the file +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 B command. =item B<-newreq> -creates a new certificate request. The private key is written to the file +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 B command below the hood. =item B<-newreq-nodes> -is like B<-newreq> except that the private key will not be encrypted. +Is like B<-newreq> except that the private key will not be encrypted. Uses B command. =item B<-newca> -creates a new CA hierarchy for use with the B program (or the B<-signcert> +Creates a new CA hierarchy for use with the B program (or the B<-signcert> and B<-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 @@ -72,7 +72,7 @@ B and B commands are get invoked. =item B<-pkcs12> -create a PKCS#12 file containing the user certificate, private key and CA +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 @@ -84,31 +84,31 @@ Delegates work to B command. =item B<-sign>, B<-signcert>, B<-xsign> -calls the B program to sign a certificate request. It expects the request +Calls the B 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 B<-xsign> option when it is written to standard output. Leverages B command. =item B<-signCA> -this option is the same as the B<-signreq> option except it uses the configuration -file section B and so makes the signed request a valid CA certificate. This -is useful when creating intermediate CA from a root CA. -Extra params are passed on to B command. +This option is the same as the B<-signreq> option except it uses the +configuration file section B and so makes the signed request a +valid CA certificate. This is useful when creating intermediate CA from +a root CA. Extra params are passed on to B command. =item B<-signcert> -this option is the same as B<-sign> except it expects a self signed certificate +This option is the same as B<-sign> except it expects a self signed certificate to be present in the file "newreq.pem". Extra params are passed on to B and B commands. =item B<-crl> -generate a CRL. Executes B command. +Generate a CRL. Executes B command. =item B<-revoke certfile [reason]> -revoke the certificate contained in the specified B. An optional +Revoke the certificate contained in the specified B. An optional reason may be specified, and must be one of: B, B, B, B, B, B, B, or B. @@ -116,9 +116,9 @@ Leverages B command. =item B<-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 B command. +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 B command. =item B<-extra-req> | B<-extra-ca> | B<-extra-pkcs12> | B<-extra-x509> | B<-extra-verify> @@ -204,7 +204,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/asn1parse.pod b/doc/man1/asn1parse.pod similarity index 84% rename from doc/apps/asn1parse.pod rename to doc/man1/asn1parse.pod index 3c607e8a..0e1fcc68 100644 --- a/doc/apps/asn1parse.pod +++ b/doc/man1/asn1parse.pod @@ -23,6 +23,7 @@ B B [B<-genstr string>] [B<-genconf file>] [B<-strictpem>] +[B<-item name>] =head1 DESCRIPTION @@ -39,56 +40,56 @@ Print out a usage message. =item B<-inform> B -the input format. B is binary format and B (the default) is base64 +The input format. B is binary format and B (the default) is base64 encoded. =item B<-in filename> -the input file, default is standard input +The input file, default is standard input. =item B<-out filename> -output file to place the DER encoded data into. If this +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 B<-strparse> option. =item B<-noout> -don't output the parsed version of the input file. +Don't output the parsed version of the input file. =item B<-offset number> -starting offset to begin parsing, default is start of file. +Starting offset to begin parsing, default is start of file. =item B<-length number> -number of bytes to parse, default is until end of file. +Number of bytes to parse, default is until end of file. =item B<-i> -indents the output according to the "depth" of the structures. +Indents the output according to the "depth" of the structures. =item B<-oid filename> -a file containing additional OBJECT IDENTIFIERs (OIDs). The format of this +A file containing additional OBJECT IDENTIFIERs (OIDs). The format of this file is described in the NOTES section below. =item B<-dump> -dump unknown data in hex format. +Dump unknown data in hex format. =item B<-dlimit num> -like B<-dump>, but only the first B bytes are output. +Like B<-dump>, but only the first B bytes are output. =item B<-strparse offset> -parse the contents octets of the ASN.1 object starting at B. This +Parse the contents octets of the ASN.1 object starting at B. This option can be used multiple times to "drill down" into a nested structure. =item B<-genstr string>, B<-genconf file> -generate encoded data based on B, B or both using +Generate encoded data based on B, B or both using L format. If B only is present then the string is obtained from the default section using the name B. The encoded data is passed through the ASN1 parser and printed out as @@ -103,6 +104,11 @@ 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 B<-item name> + +Attempt to decode and print the data as B. This can be used to +print out the fields of any supported ASN.1 structure if the type is known. + =back =head2 Output @@ -199,7 +205,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/ca.pod b/doc/man1/ca.pod similarity index 79% rename from doc/apps/ca.pod rename to doc/man1/ca.pod index 9918a136..9c5af4a8 100644 --- a/doc/apps/ca.pod +++ b/doc/man1/ca.pod @@ -52,7 +52,10 @@ B B [B<-subj arg>] [B<-utf8>] [B<-create_serial>] +[B<-rand_serial>] [B<-multivalue-rdn>] +[B<-rand file...>] +[B<-writerand file>] =head1 DESCRIPTION @@ -73,73 +76,73 @@ Print out a usage message. =item B<-verbose> -this prints extra details about the operations being performed. +This prints extra details about the operations being performed. =item B<-config filename> -specifies the configuration file to use. +Specifies the configuration file to use. Optional; for a description of the default value, see L. =item B<-name section> -specifies the configuration file section to use (overrides +Specifies the configuration file section to use (overrides B in the B section). =item B<-in filename> -an input filename containing a single certificate request to be +An input filename containing a single certificate request to be signed by the CA. =item B<-ss_cert filename> -a single self-signed certificate to be signed by the CA. +A single self-signed certificate to be signed by the CA. =item B<-spkac filename> -a file containing a single Netscape signed public key and challenge +A file containing a single Netscape signed public key and challenge and additional field values to be signed by the CA. See the B section for information on the required input and output format. =item B<-infiles> -if present this should be the last option, all subsequent arguments +If present this should be the last option, all subsequent arguments are taken as the names of files containing certificate requests. =item B<-out filename> -the output file to output certificates to. The default is standard +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 B<-spkac> outputs DER format). =item B<-outdir directory> -the directory to output certificates to. The certificate will be +The directory to output certificates to. The certificate will be written to a filename consisting of the serial number in hex with ".pem" appended. =item B<-cert> -the CA certificate file. +The CA certificate file. =item B<-keyfile filename> -the private key to sign requests with. +The private key to sign requests with. =item B<-keyform PEM|DER> -the format of the data in the private key file. +The format of the data in the private key file. The default is PEM. =item B<-key password> -the password used to encrypt the private key. Since on some +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. =item B<-selfsign> -indicates the issued certificates are to be signed with the key +Indicates the issued certificates are to be signed with the key the certificate requests were signed with (given with B<-keyfile>). Certificate requests signed with a different key are ignored. If B<-spkac>, B<-ss_cert> or B<-gencrl> are given, B<-selfsign> is @@ -153,47 +156,50 @@ self-signed certificate. =item B<-passin arg> -the key password source. For more information about the format of B +The key password source. For more information about the format of B see the B section in L. =item B<-notext> -don't output the text form of a certificate to the output file. +Don't output the text form of a certificate to the output file. =item B<-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). +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. =item B<-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). +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. =item B<-days arg> -the number of days to certify the certificate for. +The number of days to certify the certificate for. =item B<-md alg> -the message digest to use. +The message digest to use. Any digest supported by the OpenSSL B command can be used. This option also applies to CRLs. =item B<-policy arg> -this option defines the CA "policy" to use. This is a section in +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 B section for more information. =item B<-msie_hack> -this is a legacy option to make B work with very old versions of +This is a deprecated option to make B 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. The newer control "Xenroll" does not -need this option. +its use is strongly discouraged. =item B<-preserveDN> @@ -214,12 +220,12 @@ used in the configuration file to enable this behaviour. =item B<-batch> -this sets the batch mode. In this mode no questions will be asked +This sets the batch mode. In this mode no questions will be asked and all certificates will be certified automatically. =item B<-extensions section> -the section of the configuration file containing certificate extensions +The section of the configuration file containing certificate extensions to be added when a certificate is issued (defaults to B unless the B<-extfile> option is used). If no extension section is present then, a V1 certificate is created. If the extension section @@ -229,35 +235,42 @@ extension section format. =item B<-extfile file> -an additional configuration file to read certificate extensions from +An additional configuration file to read certificate extensions from (using the default section unless the B<-extensions> option is also used). =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. =item B<-subj arg> -supersedes subject name given in the request. +Supersedes subject name given in the request. The arg must be formatted as I, characters may be escaped by \ (backslash), no spaces are skipped. =item B<-utf8> -this option causes field values to be interpreted as UTF8 strings, by +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. =item B<-create_serial> -if reading serial from the text file as specified in the configuration +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 B<-rand_serial> flag instead; this +should only be used for simple error-recovery. + +=item B<-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. =item B<-multivalue-rdn> @@ -268,6 +281,19 @@ I If -multi-rdn is not used then the UID value is I<123456+CN=John Doe>. +=item B<-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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for +all others. + +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =back =head1 CRL OPTIONS @@ -276,28 +302,28 @@ If -multi-rdn is not used then the UID value is I<123456+CN=John Doe>. =item B<-gencrl> -this option generates a CRL based on information in the index file. +This option generates a CRL based on information in the index file. =item B<-crldays num> -the number of days before the next CRL is due. That is the days from +The number of days before the next CRL is due. That is the days from now to place in the CRL nextUpdate field. =item B<-crlhours num> -the number of hours before the next CRL is due. +The number of hours before the next CRL is due. =item B<-revoke filename> -a filename containing a certificate to revoke. +A filename containing a certificate to revoke. =item B<-valid filename> -a filename containing a certificate to add a Valid certificate entry. +A filename containing a certificate to add a Valid certificate entry. =item B<-status serial> -displays the revocation status of the certificate with the specified +Displays the revocation status of the certificate with the specified serial number and exits. =item B<-updatedb> @@ -306,7 +332,7 @@ Updates the database index to purge expired certificates. =item B<-crl_reason reason> -revocation reason, where B is one of: B, B, +Revocation reason, where B is one of: B, B, B, B, B, B, B or B. The matching of B is case insensitive. Setting any revocation reason will make the CRL v2. @@ -333,7 +359,7 @@ B. =item B<-crlexts section> -the section of the configuration file containing CRL extensions to +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 @@ -384,58 +410,58 @@ and long names are the same when this option is used. =item B -the same as the B<-outdir> command line option. It specifies +The same as the B<-outdir> command line option. It specifies the directory where new certificates will be placed. Mandatory. =item B -the same as B<-cert>. It gives the file containing the CA +The same as B<-cert>. It gives the file containing the CA certificate. Mandatory. =item B -same as the B<-keyfile> option. The file containing the +Same as the B<-keyfile> option. The file containing the CA private key. Mandatory. =item B -a file used to read and write random number seed information, or -an EGD socket (see L). +At startup the specified file is loaded into the random number generator, +and at exit 256 bytes will be written to it. =item B -the same as the B<-days> option. The number of days to certify +The same as the B<-days> option. The number of days to certify a certificate for. =item B -the same as the B<-startdate> option. The start date to certify +The same as the B<-startdate> option. The start date to certify a certificate for. If not set the current time is used. =item B -the same as the B<-enddate> option. Either this option or +The same as the B<-enddate> option. Either this option or B (or the command line equivalents) must be present. =item B -the same as the B<-crlhours> and the B<-crldays> options. These +The same as the B<-crlhours> and the B<-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. =item B -the same as the B<-md> option. Mandatory. +The same as the B<-md> option. Mandatory. =item B -the text database file to use. Mandatory. This file must be present +The text database file to use. Mandatory. This file must be present though initially it will be empty. =item B -if the value B is given, the valid certificate entries in the +If the value B is given, the valid certificate entries in the database must have unique subjects. if the value B is given, several valid certificate entries may have the exact same subject. The default value is B, to be compatible with older (pre 0.9.8) @@ -443,51 +469,47 @@ versions of OpenSSL. However, to make CA certificate roll-over easier, it's recommended to use the value B, especially if combined with the B<-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. - =item B -a text file containing the next serial number to use in hex. Mandatory. +A text file containing the next serial number to use in hex. Mandatory. This file must be present and contain a valid serial number. =item B -a text file containing the next CRL number to use in hex. The crl number +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. =item B -the same as B<-extensions>. +The same as B<-extensions>. =item B -the same as B<-crlexts>. +The same as B<-crlexts>. =item B -the same as B<-preserveDN> +The same as B<-preserveDN> =item B -the same as B<-noemailDN>. If you want the EMAIL field to be removed +The same as B<-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. =item B -the same as B<-msie_hack> +The same as B<-msie_hack> =item B -the same as B<-policy>. Mandatory. See the B section +The same as B<-policy>. Mandatory. See the B section for more information. =item B, B -these options allow the format used to display the certificate details +These options allow the format used to display the certificate details when asking the user to confirm signing. All the options supported by the B utilities B<-nameopt> and B<-certopt> switches can be used here, except the B and B are permanently set @@ -504,7 +526,7 @@ multicharacter string types and does not display extensions. =item B -determines how extensions in certificate requests should be handled. +Determines how extensions in certificate requests should be handled. If set to B or this option is not present then extensions are ignored and not copied to the certificate. If set to B then any extensions present in the request that are not already present are copied @@ -601,6 +623,7 @@ A sample configuration file with the relevant sections for B: 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 @@ -707,6 +730,14 @@ For example if the CA certificate has: then even if a certificate is issued with CA:TRUE it will not be valid. +=head1 HISTORY + +Since OpenSSL 1.1.1, the program follows RFC5280. Specifically, +certificate validity period (specified by any of B<-startdate>, +B<-enddate> and B<-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. + =head1 SEE ALSO L, L, L, L, @@ -714,7 +745,7 @@ L, L =head1 COPYRIGHT -Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/ciphers.pod b/doc/man1/ciphers.pod similarity index 86% rename from doc/apps/ciphers.pod rename to doc/man1/ciphers.pod index 1adb0d18..129f7660 100644 --- a/doc/apps/ciphers.pod +++ b/doc/man1/ciphers.pod @@ -16,10 +16,12 @@ B B [B<-tls1>] [B<-tls1_1>] [B<-tls1_2>] +[B<-tls1_3>] [B<-s>] [B<-psk>] [B<-srp>] [B<-stdname>] +[B<-convert name>] [B] =head1 DESCRIPTION @@ -63,13 +65,18 @@ When combined with B<-s> includes cipher suites which require SRP. =item B<-v> -Verbose output: For each ciphersuite, list details as provided by +Verbose output: For each cipher suite, list details as provided by L. =item B<-V> Like B<-v>, but include the official cipher suite values in hex. +=item B<-tls1_3> + +In combination with the B<-s> option, list the ciphers which would be used if +TLSv1.3 were negotiated. + =item B<-tls1_2> In combination with the B<-s> option, list the ciphers which would be used if @@ -92,12 +99,15 @@ TLSv1.1 were negotiated. =item B<-stdname> -precede each ciphersuite by its standard name: only available is OpenSSL -is built with tracing enabled (B argument to Configure). +Precede each cipher suite by its standard name. + +=item B<-convert name> + +Convert a standard cipher B to its OpenSSL name. =item B -a cipher list to convert to a cipher preference list. If it is not included +A cipher list to convert to a cipher preference list. If it is not included then the default cipher list will be used. The format is described below. =back @@ -143,7 +153,8 @@ The cipher string B<@STRENGTH> can be used at any point to sort the current cipher list in order of encryption algorithm key length. The cipher string B<@SECLEVEL=n> can be used at any point to set the security -level to B. +level to B, which should be a number between zero and five, inclusive. +See L for a description of what each level means. =head1 CIPHER STRINGS @@ -163,7 +174,7 @@ When used, this must be the first cipherstring specified. The ciphers included in B, but not enabled by default. Currently this includes all RC4 and anonymous ciphers. Note that this rule does not cover B, which is not included by B (use B if -necessary). Note that RC4 based ciphersuites are not built into OpenSSL by +necessary). Note that RC4 based cipher suites are not built into OpenSSL by default (see the enable-weak-ssl-ciphers option to Configure). =item B @@ -178,19 +189,19 @@ The cipher suites not enabled by B, currently B. =item B -"high" encryption cipher suites. This currently means those with key lengths +"High" encryption cipher suites. This currently means those with key lengths larger than 128 bits, and some cipher suites with 128-bit keys. =item B -"medium" encryption cipher suites, currently some of those using 128 bit +"Medium" encryption cipher suites, currently some of those using 128 bit encryption. =item B -"low" encryption cipher suites, currently those using 64 or 56 bit +"Low" encryption cipher suites, currently those using 64 or 56 bit encryption algorithms but excluding export cipher suites. All these -ciphersuites have been removed as of OpenSSL 1.1.0. +cipher suites have been removed as of OpenSSL 1.1.0. =item B, B @@ -267,11 +278,11 @@ keys. =item B, B, B -Lists ciphersuites which are only supported in at least TLS v1.2, TLS v1.0 or +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 ciphersuites specific to TLS v1.1. +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 ciphersuites are available. +then both TLSv1.0 and SSLv3.0 cipher suites are available. Note: these cipher strings B change the negotiated version of SSL or TLS, they only affect the list of available cipher suites. @@ -282,28 +293,33 @@ cipher suites using 128 bit AES, 256 bit AES or either 128 or 256 bit AES. =item B -AES in Galois Counter Mode (GCM): these ciphersuites are only supported +AES in Galois Counter Mode (GCM): these cipher suites are only supported in TLS v1.2. =item B, B AES in Cipher Block Chaining - Message Authentication Mode (CCM): these -ciphersuites are only supported in TLS v1.2. B references CCM +cipher suites are only supported in TLS v1.2. B references CCM cipher suites using both 16 and 8 octet Integrity Check Value (ICV) while B only references 8 octet ICV. +=item B, B, B + +Cipher suites using 128 bit ARIA, 256 bit ARIA or either 128 or 256 bit +ARIA. + =item B, B, B -cipher suites using 128 bit CAMELLIA, 256 bit CAMELLIA or either 128 or 256 bit +Cipher suites using 128 bit CAMELLIA, 256 bit CAMELLIA or either 128 or 256 bit CAMELLIA. =item B -cipher suites using ChaCha20. +Cipher suites using ChaCha20. =item B<3DES> -cipher suites using triple DES. +Cipher suites using triple DES. =item B @@ -336,7 +352,7 @@ Cipher suites using SHA1. =item B, B -Ciphersuites using SHA256 or SHA384. +Cipher suites using SHA256 or SHA384. =item B @@ -383,27 +399,12 @@ 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 ciphersuites +used and only the two suite B compliant cipher suites (ECDHE-ECDSA-AES128-GCM-SHA256 and ECDHE-ECDSA-AES256-GCM-SHA384) are permissible. =back -=head1 EQUAL PREFERENCE GROUPS - -If configuring a server, one may also configure equal-preference groups to -partially respect the client's preferences when -B is enabled. Ciphers in an equal-preference -group have equal priority and use the client order. This may be used to -enforce that AEADs are preferred but select AES-GCM vs. ChaCha20-Poly1305 -based on client preferences. An equal-preference is specified with square -brackets, combining multiple selectors separated by |. For example: - - [ECDHE-ECDSA-CHACHA20-POLY1305|ECDHE-ECDSA-AES128-GCM-SHA256] - -Once an equal-preference group is used, future directives must be -opcode-less. - =head1 CIPHER SUITE NAMES The following lists give the SSL or TLS cipher suites names from the @@ -449,7 +450,7 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used. TLS_DH_anon_WITH_RC4_128_MD5 ADH-RC4-MD5 TLS_DH_anon_WITH_3DES_EDE_CBC_SHA ADH-DES-CBC3-SHA -=head2 AES ciphersuites from RFC3268, extending TLS v1.0 +=head2 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 @@ -467,7 +468,7 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used. TLS_DH_anon_WITH_AES_128_CBC_SHA ADH-AES128-SHA TLS_DH_anon_WITH_AES_256_CBC_SHA ADH-AES256-SHA -=head2 Camellia ciphersuites from RFC4132, extending TLS v1.0 +=head2 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 @@ -485,7 +486,7 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used. TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA ADH-CAMELLIA128-SHA TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA ADH-CAMELLIA256-SHA -=head2 SEED ciphersuites from RFC4162, extending TLS v1.0 +=head2 SEED cipher suites from RFC4162, extending TLS v1.0 TLS_RSA_WITH_SEED_CBC_SHA SEED-SHA @@ -497,7 +498,7 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used. TLS_DH_anon_WITH_SEED_CBC_SHA ADH-SEED-SHA -=head2 GOST ciphersuites from draft-chudov-cryptopro-cptls, extending TLS v1.0 +=head2 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 B engine, included in the OpenSSL distribution. @@ -590,14 +591,35 @@ Note: these ciphers can also be used in SSL v3. ECDHE_ECDSA_WITH_AES_128_CCM_8 ECDHE-ECDSA-AES128-CCM8 ECDHE_ECDSA_WITH_AES_256_CCM_8 ECDHE-ECDSA-AES256-CCM8 -=head2 Camellia HMAC-Based ciphersuites from RFC6367, extending TLS v1.2 +=head2 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 + +=head2 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 -=head2 Pre-shared keying (PSK) ciphersuites +=head2 Pre-shared keying (PSK) cipher suites PSK_WITH_NULL_SHA PSK-NULL-SHA DHE_PSK_WITH_NULL_SHA DHE-PSK-NULL-SHA @@ -681,6 +703,14 @@ Note: these ciphers can also be used in SSL v3. TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 DHE-PSK-CHACHA20-POLY1305 TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 RSA-PSK-CHACHA20-POLY1305 +=head2 TLS v1.3 cipher suites + + TLS_AES_128_GCM_SHA256 TLS13-AES-128-GCM-SHA256 + TLS_AES_256_GCM_SHA384 TLS13-AES-256-GCM-SHA384 + TLS_CHACHA20_POLY1305_SHA256 TLS13-CHACHA20-POLY1305-SHA256 + TLS_AES_128_CCM_SHA256 TLS13-AES-128-CCM-SHA256 + TLS_AES_128_CCM_8_SHA256 TLS13-AES-128-CCM-8-SHA256 + =head2 Older names used by OpenSSL The following names are accepted by older releases: @@ -734,9 +764,14 @@ L, L, L The B<-V> option for the B command was added in OpenSSL 1.0.0. +The B<-stdname> is only available if OpenSSL is built with tracing enabled +(B argument to Configure) before OpenSSL 1.1.1. + +The B<-convert> was added in OpenSSL 1.1.1. + =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/cms.pod b/doc/man1/cms.pod similarity index 85% rename from doc/apps/cms.pod rename to doc/man1/cms.pod index 96acd315..7bd1b0d3 100644 --- a/doc/apps/cms.pod +++ b/doc/man1/cms.pod @@ -68,9 +68,9 @@ B B [B<-verify_name name>] [B<-x509_strict>] [B<-md digest>] -[B<-[cipher]>] +[B<-I>] [B<-nointern>] -[B<-no_signer_cert_verify>] +[B<-noverify>] [B<-nocerts>] [B<-noattr>] [B<-nosmimecap>] @@ -93,7 +93,8 @@ B B [B<-inkey file>] [B<-keyopt name:parameter>] [B<-passin arg>] -[B<-rand file(s)>] +[B<-rand file...>] +[B<-writerand file>] [B] [B<-to addr>] [B<-from addr>] @@ -119,7 +120,7 @@ Print out a usage message. =item B<-encrypt> -encrypt mail for the given recipient certificates. Input file is the message +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 EnvelopedData. @@ -128,33 +129,33 @@ key has been compromised, others may be able to decrypt the text. =item B<-decrypt> -decrypt mail using the supplied certificate and private key. Expects an +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. =item B<-debug_decrypt> -this option sets the B flag. This option should be used +This option sets the B flag. This option should be used with caution: see the notes section below. =item B<-sign> -sign mail using the supplied certificate and private key. Input file is +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. =item B<-verify> -verify signed mail. Expects a signed mail message on input and outputs +Verify signed mail. Expects a signed mail message on input and outputs the signed data. Both clear text and opaque signing is supported. =item B<-cmsout> -takes an input message and writes out a PEM encoded CMS structure. +Takes an input message and writes out a PEM encoded CMS structure. =item B<-resign> -resign a message: take an existing message and one or more new signers. +Resign a message: take an existing message and one or more new signers. =item B<-data_create> @@ -202,12 +203,12 @@ to the B<-verify> operation. =item B<-in filename> -the input message to be encrypted or signed or the message to be decrypted +The input message to be encrypted or signed or the message to be decrypted or verified. =item B<-inform SMIME|PEM|DER> -this specifies the input format for the CMS structure. The default +This specifies the input format for the CMS structure. The default is B which reads an S/MIME format message. B and B format change this to expect PEM and DER format CMS structures instead. This currently only affects the input format of the CMS @@ -216,17 +217,17 @@ B<-encrypt> or B<-sign>) this option has no effect. =item B<-rctform SMIME|PEM|DER> -specify the format for a signed receipt for use with the B<-receipt_verify> +Specify the format for a signed receipt for use with the B<-receipt_verify> operation. =item B<-out filename> -the message text that has been decrypted or verified or the output MIME +The message text that has been decrypted or verified or the output MIME format message that has been signed or verified. =item B<-outform SMIME|PEM|DER> -this specifies the output format for the CMS structure. The default +This specifies the output format for the CMS structure. The default is B which writes an S/MIME format message. B and B format change this to write PEM and DER format CMS structures instead. This currently only affects the output format of the CMS @@ -235,7 +236,7 @@ B<-verify> or B<-decrypt>) this option has no effect. =item B<-stream -indef -noindef> -the B<-stream> and B<-indef> options are equivalent and enable streaming I/O +The B<-stream> and B<-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 @@ -244,7 +245,7 @@ other operations. =item B<-noindef> -disable streaming I/O where it would produce and indefinite length constructed +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. @@ -258,29 +259,29 @@ is S/MIME and it uses the multipart/signed MIME content type. =item B<-text> -this option adds plain text (text/plain) MIME headers to the supplied +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. =item B<-noout> -for the B<-cmsout> operation do not output the parsed CMS structure. This +For the B<-cmsout> operation do not output the parsed CMS structure. This is useful when combined with the B<-print> option or if the syntax of the CMS structure is being checked. =item B<-print> -for the B<-cmsout> operation print out all fields of the CMS structure. This +For the B<-cmsout> operation print out all fields of the CMS structure. This is mainly useful for testing purposes. =item B<-CAfile file> -a file containing trusted CA certificates, only used with B<-verify>. +A file containing trusted CA certificates, only used with B<-verify>. =item B<-CApath dir> -a directory containing trusted CA certificates, only used with +A directory containing trusted CA certificates, only used with B<-verify>. This directory must be a standard certificate directory: that is a hash of each subject name (using B) should be linked to each certificate. @@ -295,12 +296,12 @@ Do not load the trusted CA certificates from the default directory location =item B<-md digest> -digest algorithm to use when signing or resigning. If not present then the +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). -=item B<-[cipher]> +=item B<-I> -the encryption algorithm to use. For example triple DES (168 bits) - B<-des3> +The encryption algorithm to use. For example triple DES (168 bits) - B<-des3> or 256 bit AES - B<-aes256>. Any standard algorithm name (as used by the EVP_get_cipherbyname() function) can also be used preceded by a dash, for example B<-aes-128-cbc>. See L|enc(1)> for a list of ciphers @@ -311,48 +312,48 @@ B<-EncryptedData_create> commands. =item B<-nointern> -when verifying a message normally certificates (if any) included in +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 B<-certfile> option are used. The supplied certificates can still be used as untrusted CAs however. -=item B<-no_signer_cert_verify> +=item B<-noverify> -do not verify the signers certificate of a signed message. +Do not verify the signers certificate of a signed message. =item B<-nocerts> -when signing a message the signer's certificate is normally included +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 B<-certfile> option for example). =item B<-noattr> -normally when a message is signed a set of attributes are included which +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. =item B<-nosmimecap> -exclude the list of supported algorithms from signed attributes, other options +Exclude the list of supported algorithms from signed attributes, other options such as signing time and content type are still included. =item B<-binary> -normally the input message is converted to "canonical" format which is +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. =item B<-crlfeol> -normally the output file uses a single B as end of line. When this +Normally the output file uses a single B as end of line. When this option is present B is used instead. =item B<-asciicrlf> -when signing use ASCII CRLF format canonicalisation. This strips trailing +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 @@ -361,31 +362,31 @@ content format is detected. =item B<-nodetach> -when signing a message use opaque signing: this form is more resistant +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. =item B<-certfile file> -allows additional certificates to be specified. When signing these will +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. =item B<-certsout file> -any certificates contained in the message are written to B. +Any certificates contained in the message are written to B. =item B<-signer file> -a signing certificate when signing or resigning a message, this option can be +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. =item B<-recip file> -when decrypting a message this specifies the recipients certificate. The +When decrypting a message this specifies the recipients certificate. The certificate must match one of the recipients of the message or an error occurs. @@ -395,19 +396,19 @@ required (for example to specify RSA-OAEP). =item B<-keyid> -use subject key identifier to identify certificates instead of issuer name and +Use subject key identifier to identify certificates instead of issuer name and serial number. The supplied certificate B include a subject key identifier extension. Supported by B<-sign> and B<-encrypt> options. =item B<-receipt_request_all -receipt_request_first> -for B<-sign> option include a signed receipt request. Indicate requests should +For B<-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 B<-receipt_request_from> is included. =item B<-receipt_request_from emailaddress> -for B<-sign> option include a signed receipt request. Add an explicit email +For B<-sign> option include a signed receipt request. Add an explicit email address where receipts should be supplied. =item B<-receipt_request_to emailaddress> @@ -422,7 +423,7 @@ requests. =item B<-secretkey key> -specify symmetric key to use. The key must be supplied in hex format and be +Specify symmetric key to use. The key must be supplied in hex format and be consistent with the algorithm used. Supported by the B<-EncryptedData_encrypt> B<-EncryptedData_decrypt>, B<-encrypt> and B<-decrypt> options. When used with B<-encrypt> or B<-decrypt> the supplied key is used to wrap or unwrap the @@ -430,7 +431,7 @@ content encryption key using an AES key in the B type. =item B<-secretkeyid id> -the key identifier for the supplied symmetric key for B type. +The key identifier for the supplied symmetric key for B type. This option B be present if the B<-secretkey> option is used with B<-encrypt>. With B<-decrypt> operations the B is used to locate the relevant key if it is not supplied then an attempt is used to decrypt any @@ -438,13 +439,13 @@ B structures. =item B<-econtent_type type> -set the encapsulated content type to B if not supplied the B type +Set the encapsulated content type to B if not supplied the B type is used. The B argument can be any valid OID name in either text or numerical format. =item B<-inkey file> -the private key to use when signing or decrypting. This must match the +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 B<-recip> or B<-signer> file. When signing this option can be used @@ -452,32 +453,37 @@ multiple times to specify successive keys. =item B<-keyopt name:opt> -for signing and encryption this option can be used multiple times to +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. =item B<-passin arg> -the private key password source. For more information about the format of B +The private key password source. For more information about the format of B see the B section in L. -=item B<-rand file(s)> +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B -one or more certificates of message recipients: used when encrypting +One or more certificates of message recipients: used when encrypting a message. =item B<-to, -from, -subject> -the relevant mail headers. These are included outside the signed +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. @@ -549,28 +555,28 @@ with caution. For a fuller description see L). =item Z<>0 -the operation was completely successfully. +The operation was completely successfully. =item Z<>1 -an error occurred parsing the command options. +An error occurred parsing the command options. =item Z<>2 -one of the input files could not be read. +One of the input files could not be read. =item Z<>3 -an error occurred creating the CMS file or when reading the MIME +An error occurred creating the CMS file or when reading the MIME message. =item Z<>4 -an error occurred decrypting or verifying the message. +An error occurred decrypting or verifying the message. =item Z<>5 -the message was verified correctly but an error occurred writing out +The message was verified correctly but an error occurred writing out the signers certificates. =back @@ -728,7 +734,7 @@ The -no_alt_chains options was first added to OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2008-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 diff --git a/doc/apps/crl.pod b/doc/man1/crl.pod similarity index 75% rename from doc/apps/crl.pod rename to doc/man1/crl.pod index fded3972..9a009675 100644 --- a/doc/apps/crl.pod +++ b/doc/man1/crl.pod @@ -43,8 +43,8 @@ the DER form with header and footer lines. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -53,52 +53,52 @@ option is not specified. =item B<-out filename> -specifies the output filename to write to or standard output by +Specifies the output filename to write to or standard output by default. =item B<-text> -print out the CRL in text form. +Print out the CRL in text form. =item B<-nameopt option> -option which determines how the subject or issuer names are displayed. See +Option which determines how the subject or issuer names are displayed. See the description of B<-nameopt> in L. =item B<-noout> -don't output the encoded version of the CRL. +Don't output the encoded version of the CRL. =item B<-hash> -output a hash of the issuer name. This can be use to lookup CRLs in +Output a hash of the issuer name. This can be use to lookup CRLs in a directory by issuer name. =item B<-hash_old> -outputs the "hash" of the CRL issuer name using the older algorithm -as used by OpenSSL versions before 1.0.0. +Outputs the "hash" of the CRL issuer name using the older algorithm +as used by OpenSSL before version 1.0.0. =item B<-issuer> -output the issuer name. +Output the issuer name. =item B<-lastupdate> -output the lastUpdate field. +Output the lastUpdate field. =item B<-nextupdate> -output the nextUpdate field. +Output the nextUpdate field. =item B<-CAfile file> -verify the signature on a CRL by looking up the issuing certificate in -B +Verify the signature on a CRL by looking up the issuing certificate in +B. =item B<-CApath dir> -verify the signature on a CRL by looking up the issuing certificate in +Verify the signature on a CRL by looking up the issuing certificate in B

. This directory must be a standard certificate directory: that is a hash of each subject name (using B) should be linked to each certificate. @@ -133,7 +133,7 @@ L, L, L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/crl2pkcs7.pod b/doc/man1/crl2pkcs7.pod similarity index 86% rename from doc/apps/crl2pkcs7.pod rename to doc/man1/crl2pkcs7.pod index 933750ad..f58a442b 100644 --- a/doc/apps/crl2pkcs7.pod +++ b/doc/man1/crl2pkcs7.pod @@ -34,13 +34,13 @@ Print out a usage message. This specifies the CRL input format. B format is DER encoded CRL structure.B (the default) is a base64 encoded version of -the DER form with header and footer lines. +the DER form with header and footer lines. The default format is PEM. =item B<-outform DER|PEM> This specifies the PKCS#7 structure output format. B format is DER encoded PKCS#7 structure.B (the default) is a base64 encoded version of -the DER form with header and footer lines. +the DER form with header and footer lines. The default format is PEM. =item B<-in filename> @@ -49,19 +49,19 @@ option is not specified. =item B<-out filename> -specifies the output filename to write the PKCS#7 structure to or standard +Specifies the output filename to write the PKCS#7 structure to or standard output by default. =item B<-certfile filename> -specifies a filename containing one or more certificates in B format. +Specifies a filename containing one or more certificates in B 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. =item B<-nocrl> -normally a CRL is included in the output file. With this option no CRL is +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. =back @@ -96,7 +96,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/dgst.pod b/doc/man1/dgst.pod similarity index 95% rename from doc/apps/dgst.pod rename to doc/man1/dgst.pod index 59919c32..5cad2438 100644 --- a/doc/apps/dgst.pod +++ b/doc/man1/dgst.pod @@ -3,13 +3,13 @@ =head1 NAME openssl-dgst, -dgst, sha, sha1, mdc2, ripemd160, sha224, sha256, sha384, sha512, md4, md5, blake2b, blake2s - message digests +dgst - perform digest operations =head1 SYNOPSIS -B B -[B<-help>] +B [B<-I>] +[B<-help>] [B<-c>] [B<-d>] [B<-hex>] @@ -24,13 +24,12 @@ B B [B<-signature filename>] [B<-hmac key>] [B<-fips-fingerprint>] +[B<-rand file...>] [B<-engine id>] [B<-engine_impl>] [B] -B -[I] -[B<...>] +B I [B<...>] =head1 DESCRIPTION @@ -150,14 +149,19 @@ for example exactly 32 chars for gost-mac. =back -=item B<-rand file(s)> +=item B<-rand file...> A file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +generator. Multiple files can be specified separated by an OS-dependent character. The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-fips-fingerprint> Compute HMAC using a specific key for certain OpenSSL-FIPS operations. diff --git a/doc/apps/dhparam.pod b/doc/man1/dhparam.pod similarity index 84% rename from doc/apps/dhparam.pod rename to doc/man1/dhparam.pod index 52fc0df3..1b43b323 100644 --- a/doc/apps/dhparam.pod +++ b/doc/man1/dhparam.pod @@ -20,7 +20,8 @@ B [B<-C>] [B<-2>] [B<-5>] -[B<-rand> I] +[B<-rand file...>] +[B<-writerand file>] [B<-engine id>] [I] @@ -45,8 +46,8 @@ additional header and footer lines. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in> I @@ -83,17 +84,22 @@ input file is ignored and parameters are generated instead. If not present but B is present, parameters are generated with the default generator 2. -=item B<-rand> I +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item I -this option specifies that a parameter set should be generated of size +This option specifies that a parameter set should be generated of size I. 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 (B<-2> or B<-5>) is @@ -101,20 +107,20 @@ present, parameters are generated with a default length of 2048 bits. =item B<-noout> -this option inhibits the output of the encoded version of the parameters. +This option inhibits the output of the encoded version of the parameters. =item B<-text> -this option prints out the DH parameters in human readable form. +This option prints out the DH parameters in human readable form. =item B<-C> -this option converts the parameters into C code. The parameters can then +This option converts the parameters into C code. The parameters can then be loaded by calling the get_dhNNNN() function. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -150,7 +156,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/dsa.pod b/doc/man1/dsa.pod similarity index 84% rename from doc/apps/dsa.pod rename to doc/man1/dsa.pod index 37358044..2428879e 100644 --- a/doc/apps/dsa.pod +++ b/doc/man1/dsa.pod @@ -18,6 +18,9 @@ B B [B<-aes128>] [B<-aes192>] [B<-aes256>] +[B<-aria128>] +[B<-aria192>] +[B<-aria256>] [B<-camellia128>] [B<-camellia192>] [B<-camellia256>] @@ -60,8 +63,8 @@ PKCS#8 format is also accepted. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -71,7 +74,7 @@ prompted for. =item B<-passin arg> -the input file password source. For more information about the format of B +The input file password source. For more information about the format of B see the B section in L. =item B<-out filename> @@ -83,10 +86,10 @@ filename. =item B<-passout arg> -the output file password source. For more information about the format of B +The output file password source. For more information about the format of B see the B section in L. -=item B<-aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea> +=item B<-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. @@ -98,30 +101,30 @@ These options can only be used with PEM format output files. =item B<-text> -prints out the public, private key components and parameters. +Prints out the public, private key components and parameters. =item B<-noout> -this option prevents output of the encoded version of the key. +This option prevents output of the encoded version of the key. =item B<-modulus> -this option prints out the value of the public key component of the key. +This option prints out the value of the public key component of the key. =item B<-pubin> -by default a private key is read from the input file: with this option a +By default, a private key is read from the input file. With this option a public key is read instead. =item B<-pubout> -by default a private key is output. With this option a public +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. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -169,7 +172,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/dsaparam.pod b/doc/man1/dsaparam.pod similarity index 77% rename from doc/apps/dsaparam.pod rename to doc/man1/dsaparam.pod index 0dfda660..94ea435c 100644 --- a/doc/apps/dsaparam.pod +++ b/doc/man1/dsaparam.pod @@ -16,7 +16,8 @@ B [B<-noout>] [B<-text>] [B<-C>] -[B<-rand file(s)>] +[B<-rand file...>] +[B<-writerand file>] [B<-genkey>] [B<-engine id>] [B] @@ -42,8 +43,8 @@ of the B format base64 encoded with additional header and footer lines. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -59,39 +60,44 @@ as the input filename. =item B<-noout> -this option inhibits the output of the encoded version of the parameters. +This option inhibits the output of the encoded version of the parameters. =item B<-text> -this option prints out the DSA parameters in human readable form. +This option prints out the DSA parameters in human readable form. =item B<-C> -this option converts the parameters into C code. The parameters can then +This option converts the parameters into C code. The parameters can then be loaded by calling the get_dsaXXX() function. =item B<-genkey> -this option will generate a DSA either using the specified or generated +This option will generate a DSA either using the specified or generated parameters. -=item B<-rand file(s)> +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B -this option specifies that a parameter set should be generated of size +This option specifies that a parameter set should be generated of size B. It must be the last option. If this option is included then the input file (if any) is ignored. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -115,7 +121,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/ec.pod b/doc/man1/ec.pod similarity index 88% rename from doc/apps/ec.pod rename to doc/man1/ec.pod index c06005d8..0b836603 100644 --- a/doc/apps/ec.pod +++ b/doc/man1/ec.pod @@ -56,8 +56,8 @@ PKCS#8 format is also accepted. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -67,7 +67,7 @@ prompted for. =item B<-passin arg> -the input file password source. For more information about the format of B +The input file password source. For more information about the format of B see the B section in L. =item B<-out filename> @@ -79,7 +79,7 @@ filename. =item B<-passout arg> -the output file password source. For more information about the format of B +The output file password source. For more information about the format of B see the B section in L. =item B<-des|-des3|-idea> @@ -95,24 +95,24 @@ These options can only be used with PEM format output files. =item B<-text> -prints out the public, private key components and parameters. +Prints out the public, private key components and parameters. =item B<-noout> -this option prevents output of the encoded version of the key. +This option prevents output of the encoded version of the key. =item B<-modulus> -this option prints out the value of the public key component of the key. +This option prints out the value of the public key component of the key. =item B<-pubin> -by default a private key is read from the input file: with this option a +By default, a private key is read from the input file. With this option a public key is read instead. =item B<-pubout> -by default a private key is output. With this option a public +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. @@ -142,11 +142,11 @@ This option omits the public key components from the private key output. =item B<-check> -this option checks the consistency of an EC private or public key. +This option checks the consistency of an EC private or public key. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -197,7 +197,7 @@ L, L, L =head1 COPYRIGHT -Copyright 2003-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/ecparam.pod b/doc/man1/ecparam.pod similarity index 88% rename from doc/apps/ecparam.pod rename to doc/man1/ecparam.pod index 69a26319..dc07caf4 100644 --- a/doc/apps/ecparam.pod +++ b/doc/man1/ecparam.pod @@ -22,7 +22,8 @@ B [B<-conv_form arg>] [B<-param_enc arg>] [B<-no_seed>] -[B<-rand file(s)>] +[B<-rand file...>] +[B<-writerand file>] [B<-genkey>] [B<-engine id>] @@ -47,8 +48,8 @@ header and footer lines. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -91,8 +92,8 @@ currently implemented EC parameters names and exit. =item B<-conv_form> This specifies how the points on the elliptic curve are converted -into octet strings. Possible values are: B, B (the -default value) and B. For more information regarding +into octet strings. Possible values are: B (the default +value), B and B. For more information regarding the point conversion forms please read the X9.62 standard. B Due to patent issues the B option is disabled by default for binary curves and can be enabled by defining @@ -117,17 +118,22 @@ is included in the ECParameters structure (see RFC 3279). This option will generate an EC private key using the specified parameters. -=item B<-rand file(s)> +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -176,7 +182,7 @@ L, L =head1 COPYRIGHT -Copyright 2003-2018 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man1/enc.pod b/doc/man1/enc.pod new file mode 100644 index 00000000..01cca4ea --- /dev/null +++ b/doc/man1/enc.pod @@ -0,0 +1,407 @@ +=pod + +=head1 NAME + +openssl-enc, +enc - symmetric cipher routines + +=head1 SYNOPSIS + +B> +[B<-help>] +[B<-ciphers>] +[B<-in filename>] +[B<-out filename>] +[B<-pass arg>] +[B<-e>] +[B<-d>] +[B<-a>] +[B<-base64>] +[B<-A>] +[B<-k password>] +[B<-kfile filename>] +[B<-K key>] +[B<-iv IV>] +[B<-S salt>] +[B<-salt>] +[B<-nosalt>] +[B<-z>] +[B<-md digest>] +[B<-iter count>] +[B<-pbkdf2>] +[B<-p>] +[B<-P>] +[B<-bufsize number>] +[B<-nopad>] +[B<-debug>] +[B<-none>] +[B<-rand file...>] +[B<-writerand file>] +[B<-engine id>] + +B I<[cipher]> [B<...>] + +=head1 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. + +=head1 OPTIONS + +=over 4 + +=item B<-help> + +Print out a usage message. + +=item B<-ciphers> + +List all supported ciphers. + +=item B<-in filename> + +The input filename, standard input by default. + +=item B<-out filename> + +The output filename, standard output by default. + +=item B<-pass arg> + +The password source. For more information about the format of B +see the B section in L. + +=item B<-e> + +Encrypt the input data: this is the default. + +=item B<-d> + +Decrypt the input data. + +=item B<-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. + +=item B<-base64> + +Same as B<-a> + +=item B<-A> + +If the B<-a> option is set then base64 process the data on one line. + +=item B<-k password> + +The password to derive the key from. This is for compatibility with previous +versions of OpenSSL. Superseded by the B<-pass> argument. + +=item B<-kfile filename> + +Read the password to derive the key from the first line of B. +This is for compatibility with previous versions of OpenSSL. Superseded by +the B<-pass> argument. + +=item B<-md digest> + +Use the specified digest to create the key from the passphrase. +The default algorithm is sha-256. + +=item B<-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. + +=item B<-pbkdf2> + +Use PBKDF2 algorithm with default iteration count unless otherwise specified. + +=item B<-nosalt> + +Don't use a salt in the key derivation routines. This option B be +used except for test purposes or compatibility with ancient versions of +OpenSSL. + +=item B<-salt> + +Use salt (randomly generated or provide with B<-S> option) when +encrypting, this is the default. + +=item B<-S salt> + +The actual salt to use: this must be represented as a string of hex digits. + +=item B<-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 B<-iv> option. When both a key and a password are specified, the +key given with the B<-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. + +=item B<-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 B<-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. + +=item B<-p> + +Print out the key and IV used. + +=item B<-P> + +Print out the key and IV used then immediately exit: don't do any encryption +or decryption. + +=item B<-bufsize number> + +Set the buffer size for I/O. + +=item B<-nopad> + +Disable standard block padding. + +=item B<-debug> + +Debug the BIOs used for I/O. + +=item B<-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. + +=item B<-none> + +Use NULL cipher (no encryption or decryption of input). + +=item B<-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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for +all others. + +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + +=back + +=head1 NOTES + +The program can be called either as B or +B. 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 B 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 B<-salt> option should B be used if the key is being derived +from a password unless you want compatibility with previous versions of +OpenSSL. + +Without the B<-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. + +=head1 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 B command run with +the B<-ciphers> option (that is B) produces a +list of ciphers, supported by your version of OpenSSL, including +ones provided by configured engines. + +The B program does not support authenticated encryption modes +like CCM and GCM, and will not support such modes in the future. +The B interface by necessity must begin streaming output (e.g., +to standard output when B<-out> is not used before the authentication +tag could be validated, leading to the usage of B 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 B 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 B, +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, L 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 + 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 + + 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 + + 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 + + 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 + +=head1 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 triple DES in CBC mode using a prompted password: + + openssl des3 -salt -in file.txt -out file.des3 + +Decrypt a file using a supplied password: + + openssl des3 -d -salt -in file.des3 -out file.txt -k mypassword + +Encrypt a file then base64 encode it (so it can be sent via mail for example) +using Blowfish in CBC mode: + + openssl bf -a -salt -in file.txt -out file.bf + +Base64 decode a file then decrypt it: + + openssl bf -d -salt -a -in file.bf -out file.txt + +Decrypt some data using a supplied 40 bit RC4 key: + + openssl rc4-40 -in file.rc4 -out file.txt -K 0102030405 + +=head1 BUGS + +The B<-A> option when used with large files doesn't work properly. + +The B 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. + +=head1 HISTORY + +The default digest was changed from MD5 to SHA256 in Openssl 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/apps/engine.pod b/doc/man1/engine.pod similarity index 96% rename from doc/apps/engine.pod rename to doc/man1/engine.pod index 155cc629..24f1b32c 100644 --- a/doc/apps/engine.pod +++ b/doc/man1/engine.pod @@ -68,7 +68,7 @@ See the example below. To list all the commands available to a dynamic engine: - % openssl engine -t -tt -vvvv dynamic + $ openssl engine -t -tt -vvvv dynamic (dynamic) Dynamic engine loading support [ unavailable ] SO_PATH: Specifies the path to the new ENGINE shared library @@ -88,7 +88,7 @@ To list all the commands available to a dynamic engine: To list the capabilities of the I engine: - % openssl engine -c + $ openssl engine -c (rsax) RSAX engine support [RSA] (dynamic) Dynamic engine loading support @@ -103,6 +103,10 @@ The path to the engines directory. =back +=head1 SEE ALSO + +L + =head1 COPYRIGHT Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/apps/errstr.pod b/doc/man1/errstr.pod similarity index 100% rename from doc/apps/errstr.pod rename to doc/man1/errstr.pod diff --git a/doc/apps/gendsa.pod b/doc/man1/gendsa.pod similarity index 77% rename from doc/apps/gendsa.pod rename to doc/man1/gendsa.pod index 36c810a9..7984b74c 100644 --- a/doc/apps/gendsa.pod +++ b/doc/man1/gendsa.pod @@ -13,13 +13,17 @@ B B [B<-aes128>] [B<-aes192>] [B<-aes256>] +[B<-aria128>] +[B<-aria192>] +[B<-aria256>] [B<-camellia128>] [B<-camellia192>] [B<-camellia256>] [B<-des>] [B<-des3>] [B<-idea>] -[B<-rand file(s)>] +[B<-rand file...>] +[B<-writerand file>] [B<-engine id>] [B] @@ -41,23 +45,28 @@ Print out a usage message. Output the key to the specified file. If this argument is not specified then standard output is used. -=item B<-aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea> +=item B<-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. -=item B<-rand file(s)> +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -82,7 +91,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/genpkey.pod b/doc/man1/genpkey.pod similarity index 80% rename from doc/apps/genpkey.pod rename to doc/man1/genpkey.pod index d4869520..d8f1c24f 100644 --- a/doc/apps/genpkey.pod +++ b/doc/man1/genpkey.pod @@ -12,7 +12,7 @@ B B [B<-out filename>] [B<-outform PEM|DER>] [B<-pass arg>] -[B<-cipher>] +[B<-I>] [B<-engine id>] [B<-paramfile file>] [B<-algorithm alg>] @@ -39,21 +39,21 @@ standard output is used. =item B<-outform DER|PEM> -This specifies the output format DER or PEM. +This specifies the output format DER or PEM. The default format is PEM. =item B<-pass arg> -the output file password source. For more information about the format of B +The output file password source. For more information about the format of B see the B section in L. -=item B<-cipher> +=item B<-I> This option encrypts the private key with the supplied cipher. Any algorithm name accepted by EVP_get_cipherbyname() is acceptable such as B. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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 @@ -61,19 +61,19 @@ options. =item B<-algorithm alg> -public key algorithm to use such as RSA, DSA or DH. If used this option must +Public key algorithm to use such as RSA, DSA or DH. If used this option must precede any B<-pkeyopt> options. The options B<-paramfile> and B<-algorithm> are mutually exclusive. =item B<-pkeyopt opt:value> -set the public key algorithm option B to B. The precise set of +Set the public key algorithm option B to B. The precise set of options supported depends on the public key algorithm used and its implementation. See B below for more details. =item B<-genparam> -generate a set of parameters instead of a private key. If used this option must +Generate a set of parameters instead of a private key. If used this option must precede any B<-algorithm>, B<-paramfile> or B<-pkeyopt> options. =item B<-paramfile filename> @@ -105,6 +105,10 @@ below. The number of bits in the generated key. If not specified 1024 is used. +=item B + +The number of primes in the generated key. If not specified 2 is used. + =item B The RSA public exponent value. This can be a large decimal or @@ -112,6 +116,50 @@ hexadecimal value if preceded by B<0x>. Default value is 65537. =back +=head1 RSA-PSS KEY GENERATION OPTIONS + +Note: by default an B key has no parameter restrictions. + +=over 4 + +=item B, B + +These options have the same meaning as the B algorithm. + +=item B + +=item B + +The RSA public exponent value. This can be a large decimal or +hexadecimal value if preceded by B<0x>. Default value is 65537. + +=back + +=head1 RSA-PSS KEY GENERATION OPTIONS + +Note: by default an B key has no parameter restrictions. + +=over 4 + +=item B, B + +These options have the same meaning as the B algorithm. + +=item B + +If set the key is restricted and can only use B for signing. + +=item B + +If set the key is restricted and can only use B as it's MGF1 +parameter. + +=item B + +If set the key is restricted and B specifies the minimum salt length. + +=back + =head1 DSA PARAMETER GENERATION OPTIONS =over 4 @@ -155,11 +203,11 @@ key from a named curve without the need to use an explicit parameter file. =item B -the EC curve to use. OpenSSL supports NIST curve names such as "P-256". +The EC curve to use. OpenSSL supports NIST curve names such as "P-256". =item B -the encoding to use for parameters. The "encoding" parameter must be either +The encoding to use for parameters. The "encoding" parameter must be either "named_curve" or "explicit". =back @@ -268,7 +316,7 @@ were added in OpenSSL 1.0.2. =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man1/genrsa.pod b/doc/man1/genrsa.pod new file mode 100644 index 00000000..25562dc8 --- /dev/null +++ b/doc/man1/genrsa.pod @@ -0,0 +1,128 @@ +=pod + +=head1 NAME + +openssl-genrsa, +genrsa - generate an RSA private key + +=head1 SYNOPSIS + +B B +[B<-help>] +[B<-out filename>] +[B<-passout arg>] +[B<-aes128>] +[B<-aes192>] +[B<-aes256>] +[B<-aria128>] +[B<-aria192>] +[B<-aria256>] +[B<-camellia128>] +[B<-camellia192>] +[B<-camellia256>] +[B<-des>] +[B<-des3>] +[B<-idea>] +[B<-f4>] +[B<-3>] +[B<-rand file...>] +[B<-writerand file>] +[B<-engine id>] +[B<-primes num>] +[B] + +=head1 DESCRIPTION + +The B command generates an RSA private key. + +=head1 OPTIONS + +=over 4 + +=item B<-help> + +Print out a usage message. + +=item B<-out filename> + +Output the key to the specified file. If this argument is not specified then +standard output is used. + +=item B<-passout arg> + +The output file password source. For more information about the format +of B see the B section in L. + +=item B<-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 B<-passout> argument. + +=item B<-F4|-3> + +The public exponent to use, either 65537 or 3. The default is 65537. + +=item B<-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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for +all others. + +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + +=item B<-engine id> + +Specifying an engine (by its unique B string) will cause B +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. + +=item B<-primes num> + +Specify the number of primes to use while generating the RSA key. The B +parameter must be a positive integer that is greater than 1 and less than 16. +If B is greater than 2, then the generated key is called a 'multi-prime' +RSA key, which is defined in RFC 8017. + +=item B + +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. + +=back + +=head1 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 B<.> represents each number which +has passed an initial sieve test, B<+> means a number has passed a single +round of the Miller-Rabin primality test, B<*> 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. + +=head1 SEE ALSO + +L + +=head1 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 +L. + +=cut diff --git a/doc/apps/list.pod b/doc/man1/list.pod similarity index 79% rename from doc/apps/list.pod rename to doc/man1/list.pod index 10887626..bed39b0c 100644 --- a/doc/apps/list.pod +++ b/doc/man1/list.pod @@ -9,12 +9,14 @@ list - list algorithms and features B [B<-help>] +[B<-1>] [B<-commands>] [B<-digest-commands>] [B<-digest-algorithms>] [B<-cipher-commands>] [B<-cipher-algorithms>] [B<-public-key-algorithms>] +[B<-public-key-methods>] [B<-disabled>] =head1 DESCRIPTION @@ -28,7 +30,12 @@ features. =item B<-help> -Display out a usage message. +Display a usage message. + +=item B<-1> + +List the commands, digest-commands, or cipher-commands in a single column. +If used, this option must be given first. =item B<-commands> @@ -63,6 +70,11 @@ then B is an alias for the official algorithm name, B. Display a list of public key algorithms, with each algorithm as a block of multiple lines, all but the first are indented. +=item B<-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. + =item B<-disabled> Display a list of disabled features, those that were compiled out @@ -72,7 +84,7 @@ of the installation. =head1 COPYRIGHT -Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/nseq.pod b/doc/man1/nseq.pod similarity index 87% rename from doc/apps/nseq.pod rename to doc/man1/nseq.pod index 6b25e221..7d5f009a 100644 --- a/doc/apps/nseq.pod +++ b/doc/man1/nseq.pod @@ -35,11 +35,11 @@ option is not specified. =item B<-out filename> -specifies the output filename or standard output by default. +Specifies the output filename or standard output by default. =item B<-toseq> -normally a Netscape certificate sequence will be input and the output +Normally a Netscape certificate sequence will be input and the output is the certificates contained in it. With the B<-toseq> option the situation is reversed: a Netscape certificate sequence is created from a file of certificates. @@ -63,7 +63,7 @@ The B encoded form uses the same headers and footers as a certificate: -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- -A Netscape certificate sequence is a Netscape specific form that can be sent +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. @@ -75,7 +75,7 @@ output files and allowing multiple certificate files to be used. =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/ocsp.pod b/doc/man1/ocsp.pod similarity index 82% rename from doc/apps/ocsp.pod rename to doc/man1/ocsp.pod index 5e273cfe..e32a68c5 100644 --- a/doc/apps/ocsp.pod +++ b/doc/man1/ocsp.pod @@ -75,17 +75,19 @@ B B [B<-no_cert_checks>] [B<-no_explicit>] [B<-port num>] +[B<-ignore_err>] [B<-index file>] [B<-CA file>] [B<-rsigner file>] [B<-rkey file>] [B<-rother file>] +[B<-rsigopt nm:v>] [B<-resp_no_certs>] [B<-nmin n>] [B<-ndays n>] [B<-resp_key_id>] [B<-nrequest n>] -[B<-md5|-sha1|...>] +[B<-I>] =head1 DESCRIPTION @@ -154,25 +156,25 @@ a nonce is automatically added specifying B overrides this. =item B<-req_text>, B<-resp_text>, B<-text> -print out the text form of the OCSP request, response or both respectively. +Print out the text form of the OCSP request, response or both respectively. =item B<-reqout file>, B<-respout file> -write out the DER encoded certificate request or response to B. +Write out the DER encoded certificate request or response to B. =item B<-reqin file>, B<-respin file> -read OCSP request or response file from B. These option are ignored +Read OCSP request or response file from B. These option are ignored if OCSP request or response creation is implied by other options (for example with B, B and B options). =item B<-url responder_url> -specify the responder URL. Both HTTP and HTTPS (SSL/TLS) URLs can be specified. +Specify the responder URL. Both HTTP and HTTPS (SSL/TLS) URLs can be specified. =item B<-host hostname:port>, B<-path pathname> -if the B option is present then the OCSP request is sent to the host +If the B option is present then the OCSP request is sent to the host B on port B. B specifies the HTTP path name to use or "/" by default. This is equivalent to specifying B<-url> with scheme http:// and the given hostname, port, and pathname. @@ -185,11 +187,11 @@ This may be repeated. =item B<-timeout seconds> -connection timeout to the OCSP responder in seconds +Connection timeout to the OCSP responder in seconds =item B<-CAfile file>, B<-CApath pathname> -file or pathname containing trusted CA certificates. These are used to verify +File or pathname containing trusted CA certificates. These are used to verify the signature on the OCSP response. =item B<-no-CAfile> @@ -213,65 +215,66 @@ See L manual page for details. =item B<-verify_other file> -file containing additional certificates to search when attempting to locate +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. =item B<-trust_other> -the certificates specified by the B<-verify_other> option should be explicitly +The certificates specified by the B<-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. =item B<-VAfile file> -file containing explicitly trusted responder certificates. Equivalent to the +File containing explicitly trusted responder certificates. Equivalent to the B<-verify_other> and B<-trust_other> options. =item B<-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. +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. =item B<-no_intern> -ignore certificates contained in the OCSP response when searching for the +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 B<-verify_other> or B<-VAfile> options. =item B<-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. +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. =item B<-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. +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. =item B<-no_chain> -do not use certificates in the response as additional untrusted CA +Do not use certificates in the response as additional untrusted CA certificates. =item B<-no_explicit> -do not explicitly trust the root CA if it is set to be trusted for OCSP signing. +Do not explicitly trust the root CA if it is set to be trusted for OCSP signing. =item B<-no_cert_checks> -don't perform any additional checks on the OCSP response signers certificate. +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. =item B<-validity_period nsec>, B<-status_age age> -these options specify the range of times, in seconds, which will be tolerated +These options specify the range of times, in seconds, which will be tolerated in an OCSP response. Each certificate status response includes a B time and an optional B time. The current time should fall between these two values, but the interval between the two times may be only a few @@ -285,9 +288,9 @@ status information is immediately available. In this case the age of the B field is checked to see it is not older than B seconds old. By default this additional check is not performed. -=item B<-[digest]> +=item B<-I> -this option sets digest algorithm to use for certificate identification in the +This option sets digest algorithm to use for certificate identification in the OCSP request. Any digest supported by the OpenSSL B 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. @@ -300,16 +303,17 @@ digest used by subsequent certificate identifiers. =item B<-index indexfile> -B is a text index file in B format containing certificate revocation -information. +The B parameter is the name of a text index file in B +format containing certificate revocation information. -If the B option is specified the B 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 B and B options), supplied in a file (using the -B option) or via external OCSP clients (if B or B is specified). +If the B option is specified the B 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 B +and B options), supplied in a file (using the B option) +or via external OCSP clients (if B or B is specified). -If the B option is present then the B and B options must also be -present. +If the B option is present then the B and B options +must also be present. =item B<-CA file> @@ -329,17 +333,29 @@ Don't include any certificates in the OCSP response. =item B<-resp_key_id> -Identify the signer certificate using the key ID, default is to use the subject name. +Identify the signer certificate using the key ID, default is to use the +subject name. =item B<-rkey file> -The private key to sign OCSP responses with: if not present the file specified in the -B option is used. +The private key to sign OCSP responses with: if not present the file +specified in the B option is used. + +=item B<-rsigopt nm:v> + +Pass options to the signature algorithm when signing OCSP responses. +Names and values of these options are algorithm-specific. =item B<-port portnum> -Port to listen for OCSP requests on. The port may also be specified using the B -option. +Port to listen for OCSP requests on. The port may also be specified +using the B option. + +=item B<-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. =item B<-nrequest number> @@ -347,9 +363,10 @@ The OCSP server will exit after receiving B requests, default unlimited. =item B<-nmin minutes>, B<-ndays days> -Number of minutes or days when fresh revocation information is available: used in the -B field. If neither option is present then the B field -is omitted meaning fresh revocation information is immediately available. +Number of minutes or days when fresh revocation information is available: +used in the B field. If neither option is present then the +B field is omitted meaning fresh revocation information is +immediately available. =back @@ -457,7 +474,7 @@ The -no_alt_chains options was first added to OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/openssl.pod b/doc/man1/openssl.pod similarity index 96% rename from doc/apps/openssl.pod rename to doc/man1/openssl.pod index 6e822a61..bda9ecf4 100644 --- a/doc/apps/openssl.pod +++ b/doc/man1/openssl.pod @@ -198,13 +198,17 @@ Public key algorithm parameter management. Public key algorithm cryptographic operation utility. +=item L|prime(1)> + +Compute prime numbers. + =item L|rand(1)> Generate pseudo-random bytes. =item L|rehash(1)> -Create symbolic links to certificate and CRL files named by the hash values. +Create symbolic links to certficate and CRL files named by the hash values. =item L|req(1)> @@ -256,6 +260,14 @@ Algorithm Speed Measurement. SPKAC printing and generating utility. +=item L|srp(1)> + +Maintain SRP password file. + +=item L|storeutl(1)> + +Utility to list and display certificates, keys, CRLs, etc. + =item L|ts(1)> Time Stamping Authority tool (client/server). @@ -434,11 +446,11 @@ L, L, L, L, L, L, L, L, L, L, L, L, -L, L, L, +L, L, L, L, L, L, L, L, L, L, L, L, L, -L, L, L, +L, L, L, L, L, L, L, L, L, L, L, L diff --git a/doc/man1/passwd.pod b/doc/man1/passwd.pod new file mode 100644 index 00000000..6c3d811e --- /dev/null +++ b/doc/man1/passwd.pod @@ -0,0 +1,128 @@ +=pod + +=head1 NAME + +openssl-passwd, +passwd - compute password hashes + +=head1 SYNOPSIS + +B +[B<-help>] +[B<-crypt>] +[B<-1>] +[B<-apr1>] +[B<-aixmd5>] +[B<-5>] +[B<-6>] +[B<-salt> I] +[B<-in> I] +[B<-stdin>] +[B<-noverify>] +[B<-quiet>] +[B<-table>] +[B<-rand file...>] +[B<-writerand file>] +{I} + +=head1 DESCRIPTION + +The B 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 B<-in file>, from stdin for +option B<-stdin>, or from the command line, or from the terminal otherwise. +The Unix standard algorithm B and the MD5-based BSD password +algorithm B<1>, its Apache variant B, and its AIX variant are available. + +=head1 OPTIONS + +=over 4 + +=item B<-help> + +Print out a usage message. + +=item B<-crypt> + +Use the B algorithm (default). + +=item B<-1> + +Use the MD5 based BSD password algorithm B<1>. + +=item B<-apr1> + +Use the B algorithm (Apache variant of the BSD algorithm). + +=item B<-aixmd5> + +Use the B algorithm (AIX variant of the BSD algorithm). + +=item B<-5> + +=item B<-6> + +Use the B / B based algorithms defined by Ulrich Drepper. +See L. + +=item B<-salt> I + +Use the specified salt. +When reading a password from the terminal, this implies B<-noverify>. + +=item B<-in> I + +Read passwords from I. + +=item B<-stdin> + +Read passwords from B. + +=item B<-noverify> + +Don't verify when reading a password from the terminal. + +=item B<-quiet> + +Don't output warnings when passwords given at the command line are truncated. + +=item B<-table> + +In the output list, prepend the cleartext password and a TAB character +to each password hash. + +=item B<-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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for +all others. + +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + +=back + +=head1 EXAMPLES + +B prints B. + +B prints B<$1$xxxxxxxx$UYCIxa628.9qXjpQCjM4a.>. + +B prints B<$apr1$xxxxxxxx$dxHfLAsjHkDRmG83UXe8K0>. + +B prints B. + +=head1 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 +L. + +=cut diff --git a/doc/apps/pkcs12.pod b/doc/man1/pkcs12.pod similarity index 81% rename from doc/apps/pkcs12.pod rename to doc/man1/pkcs12.pod index 44ee3d4e..3389e595 100644 --- a/doc/apps/pkcs12.pod +++ b/doc/man1/pkcs12.pod @@ -24,7 +24,7 @@ B B [B<-cacerts>] [B<-nokeys>] [B<-info>] -[B<-des | -des3 | -idea | -aes128 | -aes192 | -aes256 | -camellia128 | -camellia192 | -camellia256 | -nodes>] +[B<-des | -des3 | -idea | -aes128 | -aes192 | -aes256 | -aria128 | -aria192 | -aria256 | -camellia128 | -camellia192 | -camellia256 | -nodes>] [B<-noiter>] [B<-maciter | -nomaciter | -nomac>] [B<-twopass>] @@ -37,7 +37,8 @@ B B [B<-password arg>] [B<-passin arg>] [B<-passout arg>] -[B<-rand file(s)>] +[B<-rand file...>] +[B<-writerand file>] [B<-CAfile file>] [B<-CApath dir>] [B<-no-CAfile>] @@ -76,13 +77,13 @@ default. They are all written in PEM format. =item B<-passin arg> -the PKCS#12 file (i.e. input file) password source. For more information about +The PKCS#12 file (i.e. input file) password source. For more information about the format of B see the B section in L. =item B<-passout arg> -pass phrase source to encrypt any outputted private keys with. For more +Pass phrase source to encrypt any outputted private keys with. For more information about the format of B see the B section in L. @@ -93,61 +94,65 @@ Otherwise, -password is equivalent to -passin. =item B<-noout> -this option inhibits output of the keys and certificates to the output file +This option inhibits output of the keys and certificates to the output file version of the PKCS#12 file. =item B<-clcerts> -only output client certificates (not CA certificates). +Only output client certificates (not CA certificates). =item B<-cacerts> -only output CA certificates (not client certificates). +Only output CA certificates (not client certificates). =item B<-nocerts> -no certificates at all will be output. +No certificates at all will be output. =item B<-nokeys> -no private keys will be output. +No private keys will be output. =item B<-info> -output additional information about the PKCS#12 file structure, algorithms used and -iteration counts. +Output additional information about the PKCS#12 file structure, algorithms +used and iteration counts. =item B<-des> -use DES to encrypt private keys before outputting. +Use DES to encrypt private keys before outputting. =item B<-des3> -use triple DES to encrypt private keys before outputting, this is the default. +Use triple DES to encrypt private keys before outputting, this is the default. =item B<-idea> -use IDEA to encrypt private keys before outputting. +Use IDEA to encrypt private keys before outputting. =item B<-aes128>, B<-aes192>, B<-aes256> -use AES to encrypt private keys before outputting. +Use AES to encrypt private keys before outputting. + +=item B<-aria128>, B<-aria192>, B<-aria256> + +Use ARIA to encrypt private keys before outputting. =item B<-camellia128>, B<-camellia192>, B<-camellia256> -use Camellia to encrypt private keys before outputting. +Use Camellia to encrypt private keys before outputting. =item B<-nodes> -don't encrypt the private keys at all. +Don't encrypt the private keys at all. =item B<-nomacver> -don't attempt to verify the integrity MAC before reading the file. +Don't attempt to verify the integrity MAC before reading the file. =item B<-twopass> -prompt for separate integrity and encryption passwords: most software +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. @@ -176,7 +181,7 @@ certificates are present they will also be included in the PKCS#12 file. =item B<-inkey file_or_id> -file to read private key from. If not present then a private key must be present +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. @@ -199,31 +204,31 @@ displays them. =item B<-pass arg>, B<-passout arg> -the PKCS#12 file (i.e. output file) password source. For more information about +The PKCS#12 file (i.e. output file) password source. For more information about the format of B see the B section in L. =item B<-passin password> -pass phrase source to decrypt any input private keys with. For more information +Pass phrase source to decrypt any input private keys with. For more information about the format of B see the B section in L. =item B<-chain> -if this option is present then an attempt is made to include the entire +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. =item B<-descert> -encrypt the certificate using triple DES, this may render the PKCS#12 +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. =item B<-keypbe alg>, B<-certpbe alg> -these options allow the algorithm used to encrypt the private key and +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 B section for more information). If a cipher name (as output by the B command is specified then it @@ -232,7 +237,7 @@ use PKCS#12 algorithms. =item B<-keyex|-keysig> -specifies that the private key is to be used for key exchange or just signing. +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 B<-keysig> @@ -243,11 +248,11 @@ the use of signing only keys for SSL client authentication. =item B<-macalg digest> -specify the MAC digest algorithm. If not included them SHA1 will be used. +Specify the MAC digest algorithm. If not included them SHA1 will be used. =item B<-nomaciter>, B<-noiter> -these options affect the iteration counts on the MAC and key algorithms. +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. @@ -270,16 +275,21 @@ to be needed to use MAC iterations counts but they are now used by default. =item B<-nomac> -don't attempt to provide the MAC integrity. +Don't attempt to provide the MAC integrity. -=item B<-rand file(s)> +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-CAfile file> CA storage as a file. @@ -292,15 +302,15 @@ linked to each certificate. =item B<-no-CAfile> -Do not load the trusted CA certificates from the default file location +Do not load the trusted CA certificates from the default file location. =item B<-no-CApath> -Do not load the trusted CA certificates from the default directory location +Do not load the trusted CA certificates from the default directory location. =item B<-CSP name> -write B as a Microsoft CSP name. +Write B as a Microsoft CSP name. =back @@ -371,7 +381,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/pkcs7.pod b/doc/man1/pkcs7.pod similarity index 83% rename from doc/apps/pkcs7.pod rename to doc/man1/pkcs7.pod index 340b72da..cf445b3d 100644 --- a/doc/apps/pkcs7.pod +++ b/doc/man1/pkcs7.pod @@ -38,8 +38,8 @@ the DER form with header and footer lines. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -48,27 +48,27 @@ option is not specified. =item B<-out filename> -specifies the output filename to write to or standard output by +Specifies the output filename to write to or standard output by default. =item B<-print_certs> -prints out any certificates or CRLs contained in the file. They are +Prints out any certificates or CRLs contained in the file. They are preceded by their subject and issuer names in one line format. =item B<-text> -prints out certificates details in full rather than just subject and +Prints out certificates details in full rather than just subject and issuer names. =item B<-noout> -don't output the encoded version of the PKCS#7 structure (or certificates +Don't output the encoded version of the PKCS#7 structure (or certificates is B<-print_certs> is set). =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. @@ -110,7 +110,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/pkcs8.pod b/doc/man1/pkcs8.pod similarity index 90% rename from doc/apps/pkcs8.pod rename to doc/man1/pkcs8.pod index 402e7b2b..84a10e88 100644 --- a/doc/apps/pkcs8.pod +++ b/doc/man1/pkcs8.pod @@ -18,6 +18,8 @@ B B [B<-passout arg>] [B<-iter count>] [B<-noiter>] +[B<-rand file...>] +[B<-writerand file>] [B<-nocrypt>] [B<-traditional>] [B<-v2 alg>] @@ -51,11 +53,13 @@ reversed: it reads a private key and writes a PKCS#8 format key. =item B<-inform DER|PEM> -This specifies the input format: see L for more details. +This specifies the input format: see L for more details. The default +format is PEM. =item B<-outform DER|PEM> -This specifies the output format: see L for more details. +This specifies the output format: see L for more details. The default +format is PEM. =item B<-traditional> @@ -70,7 +74,7 @@ prompted for. =item B<-passin arg> -the input file password source. For more information about the format of B +The input file password source. For more information about the format of B see the B section in L. =item B<-out filename> @@ -82,7 +86,7 @@ filename. =item B<-passout arg> -the output file password source. For more information about the format of B +The output file password source. For more information about the format of B see the B section in L. =item B<-iter count> @@ -100,6 +104,19 @@ 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. +=item B<-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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for +all others. + +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-v2 alg> This option sets the PKCS#5 v2.0 algorithm. @@ -125,21 +142,21 @@ If not specified PKCS#5 v2.0 form is used. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. =item B<-scrypt> -uses the B algorithm for private key encryption using default +Uses the B 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 B<-scrypt_N>, B<-scrypt_r>, B<-scrypt_p> and B<-v2> options. -B<-scrypt_N N> B<-scrypt_r r> B<-scrypt_p p> +=item B<-scrypt_N N> B<-scrypt_r r> B<-scrypt_p p> -sets the scrypt B, B or B

parameters. +Sets the scrypt B, B or B

parameters. =back @@ -292,7 +309,7 @@ The B<-iter> option was added to OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/pkey.pod b/doc/man1/pkey.pod similarity index 75% rename from doc/apps/pkey.pod rename to doc/man1/pkey.pod index ef2e4633..9569fe0e 100644 --- a/doc/apps/pkey.pod +++ b/doc/man1/pkey.pod @@ -16,13 +16,15 @@ B B [B<-out filename>] [B<-passout arg>] [B<-traditional>] -[B<-cipher>] +[B<-I>] [B<-text>] [B<-text_pub>] [B<-noout>] [B<-pubin>] [B<-pubout>] [B<-engine id>] +[B<-check>] +[B<-pubcheck>] =head1 DESCRIPTION @@ -39,12 +41,12 @@ Print out a usage message. =item B<-inform DER|PEM> -This specifies the input format DER or PEM. +This specifies the input format DER or PEM. The default format is PEM. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -54,7 +56,7 @@ prompted for. =item B<-passin arg> -the input file password source. For more information about the format of B +The input file password source. For more information about the format of B see the B section in L. =item B<-out filename> @@ -66,51 +68,61 @@ filename. =item B<-passout password> -the output file password source. For more information about the format of B +The output file password source. For more information about the format of B see the B section in L. =item B<-traditional> -normally a private key is written using standard format: this is PKCS#8 form +Normally a private key is written using standard format: this is PKCS#8 form with the appropriate encryption algorithm (if any). If the B<-traditional> option is specified then the older "traditional" format is used instead. -=item B<-cipher> +=item B<-I> These options encrypt the private key with the supplied cipher. Any algorithm name accepted by EVP_get_cipherbyname() is acceptable such as B. =item B<-text> -prints out the various public or private key components in +Prints out the various public or private key components in plain text in addition to the encoded version. =item B<-text_pub> -print out only public key components even if a private key is being processed. +Print out only public key components even if a private key is being processed. =item B<-noout> -do not output the encoded version of the key. +Do not output the encoded version of the key. =item B<-pubin> -by default a private key is read from the input file: with this +By default a private key is read from the input file: with this option a public key is read instead. =item B<-pubout> -by default a private key is output: with this option a public +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. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. +=item B<-check> + +This option checks the consistency of a key pair for both public and private +components. + +=item B<-pubcheck> + +This option checks the correctness of either a public key or the public component +of a key pair. + =back =head1 EXAMPLES @@ -146,7 +158,7 @@ L, L, L =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/apps/pkeyparam.pod b/doc/man1/pkeyparam.pod similarity index 76% rename from doc/apps/pkeyparam.pod rename to doc/man1/pkeyparam.pod index 309e2495..50949657 100644 --- a/doc/apps/pkeyparam.pod +++ b/doc/man1/pkeyparam.pod @@ -14,11 +14,12 @@ B B [B<-text>] [B<-noout>] [B<-engine id>] +[B<-check>] =head1 DESCRIPTION -The B command processes public or private keys. They can be converted -between various forms and their components printed out. +The B command processes public key algorithm parameters. +They can be checked for correctness and their components printed out. =head1 OPTIONS @@ -40,19 +41,23 @@ this option is not specified. =item B<-text> -prints out the parameters in plain text in addition to the encoded version. +Prints out the parameters in plain text in addition to the encoded version. =item B<-noout> -do not output the encoded version of the parameters. +Do not output the encoded version of the parameters. =item B<-engine id> -specifying an engine (by its unique B string) will cause B +Specifying an engine (by its unique B string) will cause B 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. +=item B<-check> + +This option checks the correctness of parameters. + =back =head1 EXAMPLE @@ -73,7 +78,7 @@ L, L, L =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man1/pkeyutl.pod b/doc/man1/pkeyutl.pod new file mode 100644 index 00000000..4c12f13b --- /dev/null +++ b/doc/man1/pkeyutl.pod @@ -0,0 +1,333 @@ +=pod + +=head1 NAME + +openssl-pkeyutl, +pkeyutl - public key algorithm utility + +=head1 SYNOPSIS + +B B +[B<-help>] +[B<-in file>] +[B<-out file>] +[B<-sigfile file>] +[B<-inkey file>] +[B<-keyform PEM|DER|ENGINE>] +[B<-passin arg>] +[B<-peerkey file>] +[B<-peerform PEM|DER|ENGINE>] +[B<-pubin>] +[B<-certin>] +[B<-rev>] +[B<-sign>] +[B<-verify>] +[B<-verifyrecover>] +[B<-encrypt>] +[B<-decrypt>] +[B<-derive>] +[B<-kdf algorithm>] +[B<-kdflen length>] +[B<-pkeyopt opt:value>] +[B<-hexdump>] +[B<-asn1parse>] +[B<-rand file...>] +[B<-writerand file>] +[B<-engine id>] +[B<-engine_impl>] + +=head1 DESCRIPTION + +The B command can be used to perform public key operations using +any supported algorithm. + +=head1 OPTIONS + +=over 4 + +=item B<-help> + +Print out a usage message. + +=item B<-in filename> + +This specifies the input filename to read data from or standard input +if this option is not specified. + +=item B<-out filename> + +Specifies the output filename to write to or standard output by +default. + +=item B<-sigfile file> + +Signature file, required for B operations only + +=item B<-inkey file> + +The input key file, by default it should be a private key. + +=item B<-keyform PEM|DER|ENGINE> + +The key format PEM, DER or ENGINE. Default is PEM. + +=item B<-passin arg> + +The input key password source. For more information about the format of B +see the B section in L. + +=item B<-peerkey file> + +The peer key file, used by key derivation (agreement) operations. + +=item B<-peerform PEM|DER|ENGINE> + +The peer key format PEM, DER or ENGINE. Default is PEM. + +=item B<-pubin> + +The input file is a public key. + +=item B<-certin> + +The input is a certificate containing a public key. + +=item B<-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. + +=item B<-sign> + +Sign the input data and output the signed result. This requires +a private key. + +=item B<-verify> + +Verify the input data against the signature file and indicate if the +verification succeeded or failed. + +=item B<-verifyrecover> + +Verify the input data and output the recovered data. + +=item B<-encrypt> + +Encrypt the input data using a public key. + +=item B<-decrypt> + +Decrypt the input data using a private key. + +=item B<-derive> + +Derive a shared secret using the peer key. + +=item B<-kdf algorithm> + +Use key derivation function B. The supported algorithms are +at present B and B. +Note: additional parameters and the KDF output length will normally have to be +set for this to work. +See L and L +for the supported string parameters of each algorithm. + +=item B<-kdflen length> + +Set the output length for KDF. + +=item B<-pkeyopt opt:value> + +Public key options specified as opt:value. See NOTES below for more details. + +=item B<-hexdump> + +hex dump the output data. + +=item B<-asn1parse> + +Parse the ASN.1 output data, this is useful when combined with the +B<-verifyrecover> option when an ASN1 structure is signed. + +=item B<-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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for +all others. + +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + +=item B<-engine id> + +Specifying an engine (by its unique B string) will cause B +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. + +=item B<-engine_impl> + +When used with the B<-engine> option, it specifies to also use +engine B for crypto operations. + +=back + +=head1 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 B option +which specifies the digest in use for sign, verify and verifyrecover operations. +The value B should represent a digest name as used in the +EVP_get_digestbyname() function for example B. +This value is used only for sanity-checking the lengths of data passed in to +the B and for creating the structures that make up the signature +(e.g. B in RSASSA PKCS#1 v1.5 signatures). +In case of RSA, ECDSA and DSA signatures, this utility +will not perform hashing on input data but rather use the data directly as +input of signature algorithm. Depending on key type, signature type and mode +of padding, the maximum acceptable lengths of input data differ. In general, +with RSA the signed data can't be longer than the key modulus, in case of ECDSA +and DSA the data shouldn't be longer than field size, otherwise it will be +silently truncated to field size. + +In other words, if the value of digest is B the input should be 20 bytes +long binary encoding of SHA-1 hash function output. + +=head1 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 +B values are supported: + +=over 4 + +=item B + +This sets the RSA padding mode. Acceptable values for B are B for +PKCS#1 padding, B for SSLv23 padding, B for no padding, B +for B mode, B for X9.31 mode and B 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 B structure. If a +digest is set then the a B structure is used and its the length +must correspond to the digest type. + +For B mode only encryption and decryption is supported. + +For B 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 B mode only sign and verify are supported and the digest type must be +specified. + +=item B + +For B 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 +B block structure. + +=item B + +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. + +=back + +=head1 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 B values are supported: + +=over 4 + +=item B, B, B + +These have the same meaning as the B algorithm with some additional +restrictions. The padding mode can only be set to B 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. + +=back + +=head1 DSA ALGORITHM + +The DSA algorithm supports signing and verification operations only. Currently +there are no additional options other than B. Only the SHA1 +digest can be used and this digest is assumed by default. + +=head1 DH ALGORITHM + +The DH algorithm only supports the derivation operation and no additional +options. + +=head1 EC ALGORITHM + +The EC algorithm supports sign, verify and derive operations. The sign and +verify operations use ECDSA and derive uses ECDH. Currently there are no +additional options other than B. Only the SHA1 digest can be used and +this digest is assumed by default. + +=head1 X25519 ALGORITHM + +The X25519 algorithm supports key derivation only. Currently there are no +additional options. + +=head1 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 B 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 + +=head1 SEE ALSO + +L, L, L +L, L, L, +L, L + +=head1 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 +L. + +=cut diff --git a/doc/man1/prime.pod b/doc/man1/prime.pod new file mode 100644 index 00000000..1d25954a --- /dev/null +++ b/doc/man1/prime.pod @@ -0,0 +1,68 @@ +=pod + +=head1 NAME + +openssl-prime, +prime - compute prime numbers + +=head1 SYNOPSIS + +B +[B<-help>] +[B<-hex>] +[B<-generate>] +[B<-bits>] +[B<-safe>] +[B<-checks>] +[I] + +=head1 DESCRIPTION + +The B command checks if the specified numbers are prime. + +If no numbers are given on the command line, the B<-generate> flag should +be used to generate primes according to the requirements specified by the +rest of the flags. + +=head1 OPTIONS + +=over 4 + +=item [B<-help>] + +Display an option summary. + +=item [B<-hex>] + +Generate hex output. + +=item [B<-generate>] + +Generate a prime number. + +=item [B<-bits num>] + +Generate a prime with B bits. + +=item [B<-safe>] + +When used with B<-generate>, generates a "safe" prime. If the number +generated is B, then check that B<(n-1)/2> is also prime. + +=item [B<-checks num>] + +Perform the checks B times to see that the generated number +is prime. The default is 20. + +=back + +=head1 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 +L. + +=cut diff --git a/doc/apps/rand.pod b/doc/man1/rand.pod similarity index 81% rename from doc/apps/rand.pod rename to doc/man1/rand.pod index 4cdb3705..5dd9e8e0 100644 --- a/doc/apps/rand.pod +++ b/doc/man1/rand.pod @@ -10,7 +10,8 @@ rand - generate pseudo-random bytes B [B<-help>] [B<-out> I] -[B<-rand> I] +[B<-rand file...>] +[B<-writerand file>] [B<-base64>] [B<-hex>] I @@ -32,18 +33,23 @@ seeding was obtained from these sources. Print out a usage message. -=item B<-out> I +=item B<-out file> Write to I instead of standard output. -=item B<-rand> I +=item B<-rand file...> -Use specified file or files or EGD socket (see L) -for seeding the random number generator. +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-base64> Perform base64 encoding on the output. diff --git a/doc/apps/rehash.pod b/doc/man1/rehash.pod similarity index 100% rename from doc/apps/rehash.pod rename to doc/man1/rehash.pod diff --git a/doc/apps/req.pod b/doc/man1/req.pod similarity index 83% rename from doc/apps/req.pod rename to doc/man1/req.pod index c5b5260c..db467bba 100644 --- a/doc/apps/req.pod +++ b/doc/man1/req.pod @@ -21,7 +21,8 @@ B B [B<-verify>] [B<-modulus>] [B<-new>] -[B<-rand file(s)>] +[B<-rand file...>] +[B<-writerand file>] [B<-newkey rsa:bits>] [B<-newkey alg:file>] [B<-nodes>] @@ -29,15 +30,17 @@ B B [B<-keyform PEM|DER>] [B<-keyout filename>] [B<-keygen_engine id>] -[B<-[digest]>] +[B<-I>] [B<-config filename>] [B<-multivalue-rdn>] [B<-x509>] [B<-days n>] [B<-set_serial n>] [B<-newhdr>] +[B<-addext ext>] [B<-extensions section>] [B<-reqexts section>] +[B<-precert>] [B<-utf8>] [B<-nameopt>] [B<-reqopt>] @@ -70,8 +73,8 @@ footer lines. =item B<-outform DER|PEM> -This specifies the output format, the options have the same meaning as the -B<-inform> option. +This specifies the output format, the options have the same meaning and default +as the B<-inform> option. =item B<-in filename> @@ -81,7 +84,7 @@ options (B<-new> and B<-newkey>) are not specified. =item B<-passin arg> -the input file password source. For more information about the format of B +The input file password source. For more information about the format of B see the B section in L. =item B<-out filename> @@ -91,38 +94,38 @@ default. =item B<-passout arg> -the output file password source. For more information about the format of B +The output file password source. For more information about the format of B see the B section in L. =item B<-text> -prints out the certificate request in text form. +Prints out the certificate request in text form. =item B<-subject> -prints out the request subject (or certificate subject if B<-x509> is +Prints out the request subject (or certificate subject if B<-x509> is specified) =item B<-pubkey> -outputs the public key. +Outputs the public key. =item B<-noout> -this option prevents output of the encoded version of the request. +This option prevents output of the encoded version of the request. =item B<-modulus> -this option prints out the value of the modulus of the public key +This option prints out the value of the modulus of the public key contained in the request. =item B<-verify> -verifies the signature on the request. +Verifies the signature on the request. =item B<-new> -this option generates a new certificate request. It will prompt +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. @@ -130,17 +133,22 @@ in the configuration file and any requested extensions. If the B<-key> option is not used it will generate a new RSA private key using information specified in the configuration file. -=item B<-rand file(s)> +=item B<-rand file...> -a file or files containing random data used to seed the random number -generator, or an EGD socket (see L). +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 B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for all others. +=item [B<-writerand file>] + +Writes random data to the specified I upon exit. +This can be used with a subsequent B<-rand> flag. + =item B<-newkey arg> -this option creates a new certificate request and a new private +This option creates a new certificate request and a new private key. The argument takes one of several forms. B, where B is the number of bits, generates an RSA key B in size. If B is omitted, i.e. B<-newkey rsa> specified, @@ -166,7 +174,7 @@ specified by B<-pkeyopt paramset:X> =item B<-pkeyopt opt:value> -set the public key algorithm option B to B. The precise set of +Set the public key algorithm option B to B. The precise set of options supported depends on the public key algorithm used and its implementation. See B in the B manual page for more details. @@ -178,23 +186,23 @@ accepts PKCS#8 format private keys for PEM format files. =item B<-keyform PEM|DER> -the format of the private key file specified in the B<-key> +The format of the private key file specified in the B<-key> argument. PEM is the default. =item B<-keyout filename> -this gives the filename to write the newly created private key to. +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. =item B<-nodes> -if this option is specified then if a private key is created it +If this option is specified then if a private key is created it will not be encrypted. -=item B<-[digest]> +=item B<-I> -this specifies the message digest to sign the request. +This specifies the message digest to sign the request. Any digest supported by the OpenSSL B command can be used. This overrides the digest algorithm specified in the configuration file. @@ -205,20 +213,20 @@ GOST R 34.11-94 (B<-md_gost94>). =item B<-config filename> -this allows an alternative configuration file to be specified. +This allows an alternative configuration file to be specified. Optional; for a description of the default value, see L. =item B<-subj arg> -sets subject name for new request or supersedes the subject name +Sets subject name for new request or supersedes the subject name when processing a request. The arg must be formatted as I, characters may be escaped by \ (backslash), no spaces are skipped. =item B<-multivalue-rdn> -this option causes the -subj argument to be interpreted with full +This option causes the -subj argument to be interpreted with full support for multivalued RDNs. Example: I @@ -227,7 +235,7 @@ If -multi-rdn is not used then the UID value is I<123456+CN=John Doe>. =item B<-x509> -this option outputs a self signed certificate instead of a certificate +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 @@ -239,41 +247,60 @@ to the self signed certificate otherwise new request is created. =item B<-days n> -when the B<-x509> option is being used this specifies the number of -days to certify the certificate for. The default is 30 days. +When the B<-x509> option is being used this specifies the number of +days to certify the certificate for, otherwise it is ignored. B should +be a positive integer. The default is 30 days. =item B<-set_serial n> -serial number to use when outputting a self signed certificate. This +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 B<0x>. +=item B<-addext ext> + +Add a specific extension to the certificate (if the B<-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. + =item B<-extensions section> =item B<-reqexts section> -these options specify alternative sections to include certificate +These options specify alternative sections to include certificate extensions (if the B<-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. +=item B<-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 B<-new> flag. + =item B<-utf8> -this option causes field values to be interpreted as UTF8 strings, by +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. =item B<-nameopt option> -option which determines how the subject or issuer names are displayed. The +Option which determines how the subject or issuer names are displayed. The B

+ +Send some plain text down the underlying TCP connection: this should +cause the client to disconnect due to a protocol violation. + +=item B + +Print out some session cache status information. + +=back + +=head1 NOTES + +B 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 B program. + +=head1 BUGS + +Because this program has a lot of options and also because some of the +techniques used are rather old, the C source of B 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 B program to print out details of any +unknown cipher suites a client says it supports. + +=head1 SEE ALSO + +L, L, L, L +L, L +L + +=head1 HISTORY + +The -no_alt_chains option was first added to OpenSSL 1.1.0. + +The -allow-no-dhe-kex and -prioritize_chacha options were first added to +OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/apps/s_time.pod b/doc/man1/s_time.pod similarity index 87% rename from doc/apps/s_time.pod rename to doc/man1/s_time.pod index d44dd935..ecdac17c 100644 --- a/doc/apps/s_time.pod +++ b/doc/man1/s_time.pod @@ -14,13 +14,13 @@ B B [B<-cert filename>] [B<-key filename>] [B<-CApath directory>] -[B<-CAfile filename>] +[B<-cafile filename>] [B<-no-CAfile>] [B<-no-CApath>] [B<-reuse>] [B<-new>] [B<-verify depth>] -[B<-nbio>] +[B<-nameopt option>] [B<-time seconds>] [B<-ssl3>] [B<-bugs>] @@ -71,6 +71,13 @@ 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. +=item B<-nameopt option> + +Option which determines how the subject or issuer names are displayed. The +B

and B are likely enough to +be valid. +This is a lightweight check, if a more thorough check is needed, use +DH_check(). +The value of B<*codes> is updated with any problems found. +If B<*codes> is zero then no problems were found, otherwise the +following bits may be set: + +=over 4 + +=item DH_CHECK_P_NOT_PRIME + +The parameter B

has been determined to not being an odd prime. +Note that the lack of this bit doesn't guarantee that B

is a +prime. + +=item DH_NOT_SUITABLE_GENERATOR + +The generator B is not suitable. +Note that the lack of this bit doesn't guarantee that B is +suitable, unless B

is known to be a strong prime. + +=back + +DH_check() confirms that the Diffie-Hellman parameters B are valid. The +value of B<*codes> is updated with any problems found. If B<*codes> is zero then +no problems were found, otherwise the following bits may be set: + +=over 4 + +=item DH_CHECK_P_NOT_PRIME + +The parameter B

is not prime. + +=item DH_CHECK_P_NOT_SAFE_PRIME + +The parameter B

is not a safe prime and no B value is present. + +=item DH_UNABLE_TO_CHECK_GENERATOR + +The generator B cannot be checked for suitability. + +=item DH_NOT_SUITABLE_GENERATOR + +The generator B is not suitable. + +=item DH_CHECK_Q_NOT_PRIME + +The parameter B is not prime. + +=item DH_CHECK_INVALID_Q_VALUE + +The parameter B is invalid. + +=item DH_CHECK_INVALID_J_VALUE + +The parameter B is invalid. + +=back + +DH_check_ex(), DH_check_params() and DH_check_pub_key_ex() are similiar with +DH_check() and DH_check_params() respectively, but the error reasons are set +to the OpenSSL error handling framework instead of returning by the function +parameters. + +=head1 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 L. + +=head1 SEE ALSO + +L, L, L, +L + +=head1 HISTORY + +DH_generate_parameters() was deprecated in OpenSSL 0.9.8; use +DH_generate_parameters_ex() instead. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/DH_get0_pqg.pod b/doc/man3/DH_get0_pqg.pod similarity index 98% rename from doc/crypto/DH_get0_pqg.pod rename to doc/man3/DH_get0_pqg.pod index 38098135..ec476a7d 100644 --- a/doc/crypto/DH_get0_pqg.pod +++ b/doc/man3/DH_get0_pqg.pod @@ -91,7 +91,7 @@ or zero if no such length has been explicitly set. =head1 SEE ALSO -L, L, L, L, +L, L, L, L, L, L, L =head1 HISTORY diff --git a/doc/crypto/DH_get_1024_160.pod b/doc/man3/DH_get_1024_160.pod similarity index 100% rename from doc/crypto/DH_get_1024_160.pod rename to doc/man3/DH_get_1024_160.pod diff --git a/doc/crypto/DH_meth_new.pod b/doc/man3/DH_meth_new.pod similarity index 88% rename from doc/crypto/DH_meth_new.pod rename to doc/man3/DH_meth_new.pod index d768da8c..708f389f 100644 --- a/doc/crypto/DH_meth_new.pod +++ b/doc/man3/DH_meth_new.pod @@ -15,40 +15,51 @@ DH_meth_set_generate_params - Routines to build up DH methods #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(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_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); + (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 (*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 (*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_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 *); + (DH *, int, int, BN_GENCB *); int DH_meth_set_generate_params(DH_METHOD *dhm, - int (*generate_params) (DH *, int, int, BN_GENCB *)); + int (*generate_params)(DH *, int, int, BN_GENCB *)); =head1 DESCRIPTION The B type is a structure used for the provision of custom DH -implementations. It provides a set of of functions used by OpenSSL for the +implementations. It provides a set of functions used by OpenSSL for the implementation of the various DH capabilities. DH_meth_new() creates a new B structure. It should be given a @@ -137,7 +148,7 @@ DH_meth_set1_name() and all DH_meth_set_*() functions return 1 on success or =head1 SEE ALSO -L, L, L, L, +L, L, L, L, L, L, L =head1 HISTORY @@ -146,7 +157,7 @@ The functions described here were added in OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2016-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 diff --git a/doc/crypto/DH_new.pod b/doc/man3/DH_new.pod similarity index 96% rename from doc/crypto/DH_new.pod rename to doc/man3/DH_new.pod index 959a470e..7e60c9a5 100644 --- a/doc/crypto/DH_new.pod +++ b/doc/man3/DH_new.pod @@ -30,7 +30,7 @@ DH_free() returns no value. =head1 SEE ALSO -L, L, +L, L, L, L diff --git a/doc/man3/DH_new_by_nid.pod b/doc/man3/DH_new_by_nid.pod new file mode 100644 index 00000000..73636c5d --- /dev/null +++ b/doc/man3/DH_new_by_nid.pod @@ -0,0 +1,39 @@ +=pod + +=head1 NAME + +DH_new_by_nid, DH_get_nid - get or find DH named parameters + +=head1 SYNOPSIS + + #include + DH *DH_new_by_nid(int nid); + int *DH_get_nid(const DH *dh); + +=head1 DESCRIPTION + +DH_new_by_nid() creates and returns a DH structure containing named parameters +B. Currently B must be B, B, +B, B or B. + +DH_get_nid() determines if the parameters contained in B match +any named set. It returns the NID corresponding to the matching parameters or +B if there is no match. + +=head1 RETURN VALUES + +DH_new_by_nid() returns a set of DH parameters or B if an error occurred. + +DH_get_nid() returns the NID of the matching set of parameters or +B if there is no match. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/DH_set_method.pod b/doc/man3/DH_set_method.pod similarity index 98% rename from doc/crypto/DH_set_method.pod rename to doc/man3/DH_set_method.pod index 21006086..ea45961f 100644 --- a/doc/crypto/DH_set_method.pod +++ b/doc/man3/DH_set_method.pod @@ -74,7 +74,7 @@ returns a pointer to the newly allocated structure. =head1 SEE ALSO -L, L, L +L, L, L =head1 COPYRIGHT diff --git a/doc/man3/DH_size.pod b/doc/man3/DH_size.pod new file mode 100644 index 00000000..3b65d7ea --- /dev/null +++ b/doc/man3/DH_size.pod @@ -0,0 +1,57 @@ +=pod + +=head1 NAME + +DH_size, DH_bits, DH_security_bits - get Diffie-Hellman prime size and +security bits + +=head1 SYNOPSIS + + #include + + int DH_size(const DH *dh); + + int DH_bits(const DH *dh); + + int DH_security_bits(const DH *dh); + +=head1 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 L. + +DH_bits() returns the number of significant bits. + +B and Bp> must not be B. + +DH_security_bits() returns the number of security bits of the given B +key. See L. + +=head1 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. + +=head1 SEE ALSO + +L, L, +L + +=head1 HISTORY + +DH_bits() was added in OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/DSA_SIG_new.pod b/doc/man3/DSA_SIG_new.pod similarity index 97% rename from doc/crypto/DSA_SIG_new.pod rename to doc/man3/DSA_SIG_new.pod index 7503460a..92c7bfdf 100644 --- a/doc/crypto/DSA_SIG_new.pod +++ b/doc/man3/DSA_SIG_new.pod @@ -43,7 +43,7 @@ DSA_SIG_set0() returns 1 on success or 0 on failure. =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/crypto/DSA_do_sign.pod b/doc/man3/DSA_do_sign.pod similarity index 93% rename from doc/crypto/DSA_do_sign.pod rename to doc/man3/DSA_do_sign.pod index 5e56d209..a0dd8bb2 100644 --- a/doc/crypto/DSA_do_sign.pod +++ b/doc/man3/DSA_do_sign.pod @@ -11,7 +11,7 @@ DSA_do_sign, DSA_do_verify - raw DSA signature operations 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); + DSA_SIG *sig, DSA *dsa); =head1 DESCRIPTION @@ -36,7 +36,7 @@ L. =head1 SEE ALSO -L, L, L, +L, L, L, L, L diff --git a/doc/crypto/DSA_dup_DH.pod b/doc/man3/DSA_dup_DH.pod similarity index 82% rename from doc/crypto/DSA_dup_DH.pod rename to doc/man3/DSA_dup_DH.pod index 6967ef3d..09cbf4b3 100644 --- a/doc/crypto/DSA_dup_DH.pod +++ b/doc/man3/DSA_dup_DH.pod @@ -8,7 +8,7 @@ DSA_dup_DH - create a DH structure out of DSA structure #include - DH * DSA_dup_DH(const DSA *r); + DH *DSA_dup_DH(const DSA *r); =head1 DESCRIPTION @@ -16,7 +16,7 @@ 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. -=head1 RETURN VALUE +=head1 RETURN VALUES DSA_dup_DH() returns the new B structure, and NULL on error. The error codes can be obtained by L. @@ -27,11 +27,11 @@ Be careful to avoid small subgroup attacks when using this. =head1 SEE ALSO -L, L, L +L, L, L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/DSA_generate_key.pod b/doc/man3/DSA_generate_key.pod similarity index 81% rename from doc/crypto/DSA_generate_key.pod rename to doc/man3/DSA_generate_key.pod index 4781abed..9ff75533 100644 --- a/doc/crypto/DSA_generate_key.pod +++ b/doc/man3/DSA_generate_key.pod @@ -17,19 +17,19 @@ a new key pair and stores it in Bpub_key> and Bpriv_key>. The PRNG must be seeded prior to calling DSA_generate_key(). -=head1 RETURN VALUE +=head1 RETURN VALUES DSA_generate_key() returns 1 on success, 0 otherwise. The error codes can be obtained by L. =head1 SEE ALSO -L, L, L, -L +L, L, L, +L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/DSA_generate_parameters.pod b/doc/man3/DSA_generate_parameters.pod similarity index 78% rename from doc/crypto/DSA_generate_parameters.pod rename to doc/man3/DSA_generate_parameters.pod index fc051495..970f6a6b 100644 --- a/doc/crypto/DSA_generate_parameters.pod +++ b/doc/man3/DSA_generate_parameters.pod @@ -9,15 +9,16 @@ DSA_generate_parameters_ex, DSA_generate_parameters - generate DSA parameters #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); + 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); + 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 =head1 DESCRIPTION @@ -42,6 +43,10 @@ called as shown below. For information on the BN_GENCB structure and the BN_GENCB_call function discussed below, refer to L. +DSA_generate_prime() is similar to DSA_generate_prime_ex() but +expects an old-style callback function; see +L for information on the old-style callback. + =over 2 =item * @@ -87,32 +92,31 @@ When the generator has been found, B is called. =back -DSA_generate_parameters() (deprecated) works in much the same way as for DSA_generate_parameters_ex, except that no B parameter is passed and -instead a newly allocated B structure is returned. Additionally "old -style" callbacks are used instead of the newer BN_GENCB based approach. -Refer to L for further information. - -=head1 RETURN VALUE +=head1 RETURN VALUES DSA_generate_parameters_ex() returns a 1 on success, or 0 otherwise. - -DSA_generate_parameters() returns a pointer to the DSA structure, or -B if the parameter generation fails. - The error codes can be obtained by L. +DSA_generate_parameters() returns a pointer to the DSA structure or +B if the parameter generation fails. + =head1 BUGS -Seed lengths E 20 are not supported. +Seed lengths greater than 20 are not supported. =head1 SEE ALSO L, L, L, L, L +=head1 HISTORY + +DSA_generate_parameters() was deprecated in OpenSSL 0.9.8; use +DSA_generate_parameters_ex() instead. + =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/DSA_get0_pqg.pod b/doc/man3/DSA_get0_pqg.pod similarity index 98% rename from doc/crypto/DSA_get0_pqg.pod rename to doc/man3/DSA_get0_pqg.pod index 6c1c09a5..58e3ab5b 100644 --- a/doc/crypto/DSA_get0_pqg.pod +++ b/doc/man3/DSA_get0_pqg.pod @@ -82,7 +82,7 @@ has been set. =head1 SEE ALSO -L, L, L, L, +L, L, L, L, L, L, L, L, L, L, L diff --git a/doc/man3/DSA_meth_new.pod b/doc/man3/DSA_meth_new.pod new file mode 100644 index 00000000..087a5dc6 --- /dev/null +++ b/doc/man3/DSA_meth_new.pod @@ -0,0 +1,215 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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(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 *)); + +=head1 DESCRIPTION + +The B 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 L page for more +information. + +DSA_meth_new() creates a new B structure. It should be given a +unique B and a set of B. The B should be a NULL terminated +string, which will be duplicated and stored in the B object. It is +the callers responsibility to free the original string. The flags will be used +during the construction of a new B object based on this B. Any +new B object will have those flags set by default. + +DSA_meth_dup() creates a duplicate copy of the B object passed as a +parameter. This might be useful for creating a new B based on an +existing one, but with some differences. + +DSA_meth_free() destroys a B 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 B. 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 B and B. 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 B 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 B 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(). + +=head1 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. + +=head1 SEE ALSO + +L, L, L, L, +L, L, L, L, +L, L, L + +=head1 HISTORY + +The functions described here were added in OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/DSA_new.pod b/doc/man3/DSA_new.pod similarity index 96% rename from doc/crypto/DSA_new.pod rename to doc/man3/DSA_new.pod index a967ab5d..22474251 100644 --- a/doc/crypto/DSA_new.pod +++ b/doc/man3/DSA_new.pod @@ -32,7 +32,7 @@ DSA_free() returns no value. =head1 SEE ALSO -L, L, +L, L, L, L diff --git a/doc/crypto/DSA_set_method.pod b/doc/man3/DSA_set_method.pod similarity index 98% rename from doc/crypto/DSA_set_method.pod rename to doc/man3/DSA_set_method.pod index d870f56f..f10307e6 100644 --- a/doc/crypto/DSA_set_method.pod +++ b/doc/man3/DSA_set_method.pod @@ -74,7 +74,7 @@ fails. Otherwise it returns a pointer to the newly allocated structure. =head1 SEE ALSO -L, L, L +L, L, L =head1 COPYRIGHT diff --git a/doc/crypto/DSA_sign.pod b/doc/man3/DSA_sign.pod similarity index 85% rename from doc/crypto/DSA_sign.pod rename to doc/man3/DSA_sign.pod index ba0f6b86..458e16a3 100644 --- a/doc/crypto/DSA_sign.pod +++ b/doc/man3/DSA_sign.pod @@ -8,13 +8,12 @@ DSA_sign, DSA_sign_setup, DSA_verify - DSA signatures #include - int DSA_sign(int type, const unsigned char *dgst, int len, - unsigned char *sigret, unsigned int *siglen, DSA *dsa); + 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_sign_setup(DSA *dsa, BN_CTX *ctx, BIGNUM **kinvp, BIGNUM **rp); - int DSA_verify(int type, const unsigned char *dgst, int len, + int DSA_verify(int type, const unsigned char *dgst, int len, unsigned char *sigbuf, int siglen, DSA *dsa); =head1 DESCRIPTION @@ -55,7 +54,7 @@ Standard, DSS), ANSI X9.30 =head1 SEE ALSO -L, L, L, +L, L, L, L =head1 COPYRIGHT diff --git a/doc/man3/DSA_size.pod b/doc/man3/DSA_size.pod new file mode 100644 index 00000000..ff7df3d2 --- /dev/null +++ b/doc/man3/DSA_size.pod @@ -0,0 +1,48 @@ +=pod + +=head1 NAME + +DSA_size, DSA_bits, DSA_security_bits - get DSA signature size, key bits or security bits + +=head1 SYNOPSIS + + #include + + int DSA_size(const DSA *dsa); + int DSA_bits(const DSA *dsa); + int DSA_security_bits(const DSA *dsa); + +=head1 DESCRIPTION + +DSA_size() returns the maximum size of an ASN.1 encoded DSA signature +for key B in bytes. It can be used to determine how much memory must +be allocated for a DSA signature. + +Bq> must not be B. + +DSA_bits() returns the number of bits in key B: this is the number +of bits in the B

parameter. + +DSA_security_bits() returns the number of security bits of the given B +key. See L. + +=head1 RETURN VALUES + +DSA_size() returns the signature size in bytes. + +DSA_bits() returns the number of bits in the key. + +=head1 SEE ALSO + +L, L + +=head1 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 +L. + +=cut diff --git a/doc/man3/DTLS_get_data_mtu.pod b/doc/man3/DTLS_get_data_mtu.pod new file mode 100644 index 00000000..ab714721 --- /dev/null +++ b/doc/man3/DTLS_get_data_mtu.pod @@ -0,0 +1,36 @@ +=pod + +=head1 NAME + +DTLS_get_data_mtu - Get maximum data payload size + +=head1 SYNOPSIS + + #include + + size_t DTLS_get_data_mtu(const SSL *ssl); + +=head1 DESCRIPTION + +This function obtains the maximum data payload size for the established +DTLS connection B, based on the DTLS record MTU and the overhead +of the DTLS record header, encryption and authentication currently in use. + +=head1 RETURN VALUES + +Returns the maximum data payload size on success, or 0 on failure. + +=head1 HISTORY + +This function was added in OpenSSL 1.1.1 + +=head1 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 +L. + +=cut diff --git a/doc/man3/DTLS_set_timer_cb.pod b/doc/man3/DTLS_set_timer_cb.pod new file mode 100644 index 00000000..6e134721 --- /dev/null +++ b/doc/man3/DTLS_set_timer_cb.pod @@ -0,0 +1,40 @@ +=pod + +=head1 NAME + +DTLS_timer_cb, +DTLS_set_timer_cb +- Set callback for controlling DTLS timer duration + +=head1 SYNOPSIS + + #include + + typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + + void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + +=head1 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. + +=head1 RETURN VALUES + +Returns void. + +=head1 HISTORY + +This function was added in OpenSSL 1.1.1 + +=head1 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 +L. + +=cut diff --git a/doc/man3/DTLSv1_listen.pod b/doc/man3/DTLSv1_listen.pod new file mode 100644 index 00000000..50f16bc8 --- /dev/null +++ b/doc/man3/DTLSv1_listen.pod @@ -0,0 +1,132 @@ +=pod + +=head1 NAME + +SSL_stateless, +DTLSv1_listen +- Statelessly listen for incoming connections + +=head1 SYNOPSIS + + #include + + int SSL_stateless(SSL *s); + int DTLSv1_listen(SSL *ssl, BIO_ADDR *peer); + +=head1 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()). + +=head1 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 B 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 B parameter updated into a state +where the handshake can be continued by a call to (for example) SSL_accept(). +Additionally, for DTLSv1_listen(), the B pointed to by B will be +filled in with details of the peer that sent the ClientHello. If the underlying +BIO is unable to obtain the B of the peer (for example because the BIO +does not support this), then B<*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 these functions user code must ensure that cookie generation +and verification callbacks have been set up using +SSL_CTX_set_cookie_generate_cb() and SSL_CTX_set_cookie_verify_cb() +respectively. + +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() +B 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. + +=head1 RETURN VALUES + +For SSL_stateless() a return value of 1 indicates success and the B object +will be set up ready to continue the handshake. A return value of 0 indicates +failure. User code may retry the SSL_stateless() call. + +For DTLSv1_listen() a return value of >= 1 indicates success. The B object +will be set up ready to continue the handshake. the B 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. + +=head1 SEE ALSO + +L, L, +L, L + +=head1 HISTORY + +SSL_stateless() was first added in OpenSSL 1.1.1. + +DTLSv1_listen() return codes were clarified in OpenSSL 1.1.0. The type of "peer" +also changed in OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/ECDSA_SIG_new.pod b/doc/man3/ECDSA_SIG_new.pod similarity index 94% rename from doc/crypto/ECDSA_SIG_new.pod rename to doc/man3/ECDSA_SIG_new.pod index 9e1f662c..9d3cdcee 100644 --- a/doc/crypto/ECDSA_SIG_new.pod +++ b/doc/man3/ECDSA_SIG_new.pod @@ -136,35 +136,33 @@ named curve prime256v1 (aka P-256). First step: create an EC_KEY object (note: this part is B ECDSA specific) - int ret; + int ret; ECDSA_SIG *sig; - EC_KEY *eckey; + 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 */ - } + 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 */ - } + if (sig == NULL) + /* error */ or using ECDSA_sign(): unsigned char *buffer, *pp; - int buf_len; + int buf_len; + buf_len = ECDSA_size(eckey); - buffer = OPENSSL_malloc(buf_len); + buffer = OPENSSL_malloc(buf_len); pp = buffer; - if (ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) == 0) { - /* error */ - } + if (ECDSA_sign(0, dgst, dgstlen, pp, &buf_len, eckey) == 0) + /* error */ Third step: verify the created ECDSA signature using ECDSA_do_verify(): @@ -176,13 +174,12 @@ or using ECDSA_verify(): and finally evaluate the return value: - if (ret == 1) { - /* signature ok */ - } else if (ret == 0) { - /* incorrect signature */ - } else { - /* error */ - } + if (ret == 1) + /* signature ok */ + else if (ret == 0) + /* incorrect signature */ + else + /* error */ =head1 CONFORMING TO diff --git a/doc/crypto/ECPKParameters_print.pod b/doc/man3/ECPKParameters_print.pod similarity index 100% rename from doc/crypto/ECPKParameters_print.pod rename to doc/man3/ECPKParameters_print.pod diff --git a/doc/crypto/EC_GFp_simple_method.pod b/doc/man3/EC_GFp_simple_method.pod similarity index 100% rename from doc/crypto/EC_GFp_simple_method.pod rename to doc/man3/EC_GFp_simple_method.pod diff --git a/doc/crypto/EC_GROUP_copy.pod b/doc/man3/EC_GROUP_copy.pod similarity index 98% rename from doc/crypto/EC_GROUP_copy.pod rename to doc/man3/EC_GROUP_copy.pod index fd5f58c9..ee20f952 100644 --- a/doc/crypto/EC_GROUP_copy.pod +++ b/doc/man3/EC_GROUP_copy.pod @@ -23,7 +23,8 @@ EC_GROUP_get_pentanomial_basis 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); + 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); @@ -56,7 +57,7 @@ EC_GROUP_get_pentanomial_basis 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); + unsigned int *k2, unsigned int *k3); =head1 DESCRIPTION diff --git a/doc/crypto/EC_GROUP_new.pod b/doc/man3/EC_GROUP_new.pod similarity index 89% rename from doc/crypto/EC_GROUP_new.pod rename to doc/man3/EC_GROUP_new.pod index 2f658dc2..e36c3cb3 100644 --- a/doc/crypto/EC_GROUP_new.pod +++ b/doc/man3/EC_GROUP_new.pod @@ -21,14 +21,20 @@ objects 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_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_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); + 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) diff --git a/doc/crypto/EC_KEY_get_enc_flags.pod b/doc/man3/EC_KEY_get_enc_flags.pod similarity index 100% rename from doc/crypto/EC_KEY_get_enc_flags.pod rename to doc/man3/EC_KEY_get_enc_flags.pod diff --git a/doc/crypto/EC_KEY_new.pod b/doc/man3/EC_KEY_new.pod similarity index 95% rename from doc/crypto/EC_KEY_new.pod rename to doc/man3/EC_KEY_new.pod index 591529fd..9d32d78a 100644 --- a/doc/crypto/EC_KEY_new.pod +++ b/doc/man3/EC_KEY_new.pod @@ -5,6 +5,7 @@ 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, @@ -27,6 +28,7 @@ EC_KEY objects 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); @@ -39,13 +41,11 @@ EC_KEY objects 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); + 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); + 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); @@ -78,6 +78,9 @@ EC_KEY_dup() creates a new EC_KEY object and copies B 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 B object. B must have an EC_GROUP object associated with it before calling this function. The private key is a random integer (0 < priv_key @@ -149,6 +152,8 @@ 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(), diff --git a/doc/crypto/EC_POINT_add.pod b/doc/man3/EC_POINT_add.pod similarity index 91% rename from doc/crypto/EC_POINT_add.pod rename to doc/man3/EC_POINT_add.pod index 6f3e2308..3c047e1a 100644 --- a/doc/crypto/EC_POINT_add.pod +++ b/doc/man3/EC_POINT_add.pod @@ -8,16 +8,20 @@ EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity, EC_POINT_i #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_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_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); diff --git a/doc/crypto/EC_POINT_new.pod b/doc/man3/EC_POINT_new.pod similarity index 100% rename from doc/crypto/EC_POINT_new.pod rename to doc/man3/EC_POINT_new.pod diff --git a/doc/crypto/ENGINE_add.pod b/doc/man3/ENGINE_add.pod similarity index 85% rename from doc/crypto/ENGINE_add.pod rename to doc/man3/ENGINE_add.pod index d5a7d724..b009949d 100644 --- a/doc/crypto/ENGINE_add.pod +++ b/doc/man3/ENGINE_add.pod @@ -2,10 +2,10 @@ =head1 NAME -ENGINE_get_DH, ENGINE_get_DSA, ENGINE_get_ECDH, ENGINE_get_ECDSA, +ENGINE_get_DH, ENGINE_get_DSA, ENGINE_by_id, ENGINE_get_cipher_engine, ENGINE_get_default_DH, -ENGINE_get_default_DSA, ENGINE_get_default_ECDH, -ENGINE_get_default_ECDSA, ENGINE_get_default_RAND, +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, @@ -17,15 +17,15 @@ 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_ECDH, -ENGINE_register_ECDSA, ENGINE_register_RAND, ENGINE_register_RSA, +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_ECDH, ENGINE_set_ECDSA, +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_ECDH, -ENGINE_set_default_ECDSA, ENGINE_set_default_RAND, ENGINE_set_default_RSA, +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, @@ -33,11 +33,11 @@ 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_ECDH, -ENGINE_register_all_ECDSA, ENGINE_register_all_RAND, +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_ECDH, ENGINE_unregister_ECDSA, +ENGINE_unregister_DSA, ENGINE_unregister_RAND, ENGINE_unregister_RSA, ENGINE_unregister_ciphers, ENGINE_unregister_digests - ENGINE cryptographic module support @@ -63,8 +63,6 @@ ENGINE_unregister_digests ENGINE *ENGINE_get_default_RSA(void); ENGINE *ENGINE_get_default_DSA(void); - ENGINE *ENGINE_get_default_ECDH(void); - ENGINE *ENGINE_get_default_ECDSA(void); ENGINE *ENGINE_get_default_DH(void); ENGINE *ENGINE_get_default_RAND(void); ENGINE *ENGINE_get_cipher_engine(int nid); @@ -72,8 +70,6 @@ ENGINE_unregister_digests int ENGINE_set_default_RSA(ENGINE *e); int ENGINE_set_default_DSA(ENGINE *e); - int ENGINE_set_default_ECDH(ENGINE *e); - int ENGINE_set_default_ECDSA(ENGINE *e); int ENGINE_set_default_DH(ENGINE *e); int ENGINE_set_default_RAND(ENGINE *e); int ENGINE_set_default_ciphers(ENGINE *e); @@ -91,12 +87,6 @@ ENGINE_unregister_digests int ENGINE_register_DSA(ENGINE *e); void ENGINE_unregister_DSA(ENGINE *e); void ENGINE_register_all_DSA(void); - int ENGINE_register_ECDH(ENGINE *e); - void ENGINE_unregister_ECDH(ENGINE *e); - void ENGINE_register_all_ECDH(void); - int ENGINE_register_ECDSA(ENGINE *e); - void ENGINE_unregister_ECDSA(ENGINE *e); - void ENGINE_register_all_ECDSA(void); int ENGINE_register_DH(ENGINE *e); void ENGINE_unregister_DH(ENGINE *e); void ENGINE_register_all_DH(void); @@ -115,9 +105,9 @@ ENGINE_unregister_digests 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); + 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); + int cmd_optional); ENGINE *ENGINE_new(void); int ENGINE_free(ENGINE *e); @@ -127,8 +117,6 @@ ENGINE_unregister_digests 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_ECDH(ENGINE *e, const ECDH_METHOD *dh_meth); - int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *dh_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); @@ -146,8 +134,6 @@ ENGINE_unregister_digests 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 ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e); - const ECDSA_METHOD *ENGINE_get_ECDSA(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); @@ -164,9 +150,9 @@ ENGINE_unregister_digests 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); + 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); + UI_METHOD *ui_method, void *callback_data); Deprecated: @@ -335,29 +321,6 @@ consideration is whether any/all available ENGINE implementations should be made visible to OpenSSL - this is controlled by calling the various "load" functions. -Having called any of these functions, ENGINE objects would have been -dynamically allocated and populated with these implementations and linked -into OpenSSL's internal linked list. At this point it is important to -mention an important API function; - - void ENGINE_cleanup(void) - -If no ENGINE API functions are called at all in an application, then there -are no inherent memory leaks to worry about from the ENGINE functionality. -However, prior to OpenSSL 1.1.0 if any ENGINEs are loaded, even if they are -never registered or used, it was necessary to use the ENGINE_cleanup() function -to correspondingly cleanup before program exit, if the caller wishes to avoid -memory leaks. This mechanism used an internal callback registration table -so that any ENGINE API functionality that knows it requires cleanup can -register its cleanup details to be called during ENGINE_cleanup(). This -approach allowed ENGINE_cleanup() to clean up after any ENGINE functionality -at all that your program uses, yet doesn't automatically create linker -dependencies to all possible ENGINE functionality - only the cleanup -callbacks required by the functionality you do use will be required by the -linker. From OpenSSL 1.1.0 it is no longer necessary to explicitly call -ENGINE_cleanup and this function is deprecated. Cleanup automatically takes -place at program exit. - 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 @@ -372,6 +335,11 @@ 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. + I Here we'll assume an application has been configured by its user or admin @@ -385,17 +353,19 @@ illustrates how to approach this; const char *engine_id = "ACME"; ENGINE_load_builtin_engines(); e = ENGINE_by_id(engine_id); - if(!e) + if (!e) /* the engine isn't available */ return; - if(!ENGINE_init(e)) { + 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. */ + 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); @@ -474,9 +444,9 @@ boolean success or failure. 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)) { + 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)"); + pre_cmds[0], pre_cmds[1] ? pre_cmds[1] : "(NULL)"); ENGINE_free(e); return 0; } @@ -487,13 +457,15 @@ boolean success or failure. ENGINE_free(e); return 0; } - /* ENGINE_init() returned a functional reference, so free the structural - * reference from ENGINE_by_id(). */ + /* + * 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)) { + 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)"); + post_cmds[0], post_cmds[1] ? post_cmds[1] : "(NULL)"); ENGINE_finish(e); return 0; } @@ -546,7 +518,7 @@ 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; +OpenSSL framework code will work with the following rules: if no ctrl() handler supplied; ENGINE_HAS_CTRL_FUNCTION returns FALSE (zero), @@ -599,15 +571,88 @@ The path to the engines directory. =back +=head1 RETURN VALUES + +ENGINE_get_first(), ENGINE_get_last(), ENGINE_get_next() and ENGINE_get_prev() +return a valid B 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 B 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 B 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 +B 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 B 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 B 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 B 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 B 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 B structure on success or NULL +if an error occurred. + +ENGINE_get_digest() returns a valid B 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 B structure or NULL if it's +not set. + +ENGINE_load_private_key() and ENGINE_load_public_key() return a valid B +structure on success or NULL if an error occurred. + =head1 SEE ALSO -L, L, L, L, L +L, L, L, L, +L, L =head1 HISTORY -ENGINE_cleanup(), ENGINE_load_openssl(), ENGINE_load_dynamic(), and -ENGINE_load_cryptodev() were deprecated in OpenSSL 1.1.0 by -OPENSSL_init_crypto(). +ENGINE_cleanup() was deprecated in OpenSSL 1.1.0 by the automatic cleanup +done by OPENSSL_cleanup() +and should not be used. =head1 COPYRIGHT diff --git a/doc/crypto/ERR_GET_LIB.pod b/doc/man3/ERR_GET_LIB.pod similarity index 100% rename from doc/crypto/ERR_GET_LIB.pod rename to doc/man3/ERR_GET_LIB.pod diff --git a/doc/crypto/ERR_clear_error.pod b/doc/man3/ERR_clear_error.pod similarity index 100% rename from doc/crypto/ERR_clear_error.pod rename to doc/man3/ERR_clear_error.pod diff --git a/doc/crypto/ERR_error_string.pod b/doc/man3/ERR_error_string.pod similarity index 100% rename from doc/crypto/ERR_error_string.pod rename to doc/man3/ERR_error_string.pod diff --git a/doc/crypto/ERR_get_error.pod b/doc/man3/ERR_get_error.pod similarity index 92% rename from doc/crypto/ERR_get_error.pod rename to doc/man3/ERR_get_error.pod index 3b223c99..a76df038 100644 --- a/doc/crypto/ERR_get_error.pod +++ b/doc/man3/ERR_get_error.pod @@ -20,11 +20,11 @@ ERR_peek_last_error_line_data - obtain error code and data 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); + const char **data, int *flags); unsigned long ERR_peek_error_line_data(const char **file, int *line, - const char **data, int *flags); + const char **data, int *flags); unsigned long ERR_peek_last_error_line_data(const char **file, int *line, - const char **data, int *flags); + const char **data, int *flags); =head1 DESCRIPTION diff --git a/doc/crypto/ERR_load_crypto_strings.pod b/doc/man3/ERR_load_crypto_strings.pod similarity index 76% rename from doc/crypto/ERR_load_crypto_strings.pod rename to doc/man3/ERR_load_crypto_strings.pod index 56d91d5d..c503241d 100644 --- a/doc/crypto/ERR_load_crypto_strings.pod +++ b/doc/man3/ERR_load_crypto_strings.pod @@ -24,16 +24,12 @@ Deprecated: =head1 DESCRIPTION -All of the following functions are deprecated from OpenSSL 1.1.0. No explicit -initialisation or de-initialisation is necessary. See L -and L. - ERR_load_crypto_strings() registers the error strings for all B functions. SSL_load_error_strings() does the same, but also registers the B error strings. -In versions of OpenSSL prior to 1.1.0 ERR_free_strings() freed all previously -loaded error strings. However from OpenSSL 1.1.0 it does nothing. +In versions prior to OpenSSL 1.1.0, +ERR_free_strings() releases any resources created by the above functions. =head1 RETURN VALUES @@ -48,7 +44,7 @@ L 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(). +OPENSSL_init_crypto() and OPENSSL_init_ssl() and should not be used. =head1 COPYRIGHT diff --git a/doc/crypto/ERR_load_strings.pod b/doc/man3/ERR_load_strings.pod similarity index 90% rename from doc/crypto/ERR_load_strings.pod rename to doc/man3/ERR_load_strings.pod index ee8de2c9..3167f271 100644 --- a/doc/crypto/ERR_load_strings.pod +++ b/doc/man3/ERR_load_strings.pod @@ -23,8 +23,8 @@ B is an array of error string data: typedef struct ERR_string_data_st { - unsigned long error; - char *string; + unsigned long error; + char *string; } ERR_STRING_DATA; The error code is generated from the library number and a function and @@ -36,7 +36,7 @@ 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. -=head1 RETURN VALUE +=head1 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 @@ -48,7 +48,7 @@ L =head1 COPYRIGHT -Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/ERR_print_errors.pod b/doc/man3/ERR_print_errors.pod similarity index 97% rename from doc/crypto/ERR_print_errors.pod rename to doc/man3/ERR_print_errors.pod index 134b374d..f7e612f6 100644 --- a/doc/crypto/ERR_print_errors.pod +++ b/doc/man3/ERR_print_errors.pod @@ -11,8 +11,7 @@ ERR_print_errors, ERR_print_errors_fp, ERR_print_errors_cb 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) + void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u), void *u) =head1 DESCRIPTION diff --git a/doc/crypto/ERR_put_error.pod b/doc/man3/ERR_put_error.pod similarity index 94% rename from doc/crypto/ERR_put_error.pod rename to doc/man3/ERR_put_error.pod index 14695baa..4fba618d 100644 --- a/doc/crypto/ERR_put_error.pod +++ b/doc/man3/ERR_put_error.pod @@ -2,17 +2,16 @@ =head1 NAME -ERR_put_error, ERR_add_error_data - record an error +ERR_put_error, ERR_add_error_data, ERR_add_error_vdata - record an error =head1 SYNOPSIS #include - void ERR_put_error(int lib, int func, int reason, const char *file, - int line); + 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_data(int num, va_list arg); + void ERR_add_error_vdata(int num, va_list arg); =head1 DESCRIPTION diff --git a/doc/man3/ERR_remove_state.pod b/doc/man3/ERR_remove_state.pod new file mode 100644 index 00000000..8f4d3fca --- /dev/null +++ b/doc/man3/ERR_remove_state.pod @@ -0,0 +1,49 @@ +=pod + +=head1 NAME + +ERR_remove_thread_state, ERR_remove_state - DEPRECATED + +=head1 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 + +=head1 DESCRIPTION + +ERR_remove_state() frees the error queue associated with the specified +thread, identified by B. +ERR_remove_thread_state() does the same thing, except the identifier is +an opaque pointer. + +=head1 RETURN VALUES + +ERR_remove_state() and ERR_remove_thread_state() return no value. + +=head1 SEE ALSO + +LL + +=head1 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. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/ERR_set_mark.pod b/doc/man3/ERR_set_mark.pod similarity index 100% rename from doc/crypto/ERR_set_mark.pod rename to doc/man3/ERR_set_mark.pod diff --git a/doc/crypto/EVP_BytesToKey.pod b/doc/man3/EVP_BytesToKey.pod similarity index 98% rename from doc/crypto/EVP_BytesToKey.pod rename to doc/man3/EVP_BytesToKey.pod index 728c94e9..8d49648f 100644 --- a/doc/crypto/EVP_BytesToKey.pod +++ b/doc/man3/EVP_BytesToKey.pod @@ -62,7 +62,7 @@ or 0 on error. =head1 SEE ALSO -L, L, +L, L, L, L diff --git a/doc/crypto/EVP_CIPHER_CTX_get_cipher_data.pod b/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod similarity index 100% rename from doc/crypto/EVP_CIPHER_CTX_get_cipher_data.pod rename to doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod diff --git a/doc/crypto/EVP_CIPHER_meth_new.pod b/doc/man3/EVP_CIPHER_meth_new.pod similarity index 89% rename from doc/crypto/EVP_CIPHER_meth_new.pod rename to doc/man3/EVP_CIPHER_meth_new.pod index 08e8290b..a33cb763 100644 --- a/doc/crypto/EVP_CIPHER_meth_new.pod +++ b/doc/man3/EVP_CIPHER_meth_new.pod @@ -24,26 +24,26 @@ EVP_CIPHER_meth_get_ctrl - Routines to build up EVP_CIPHER methods 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 (*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 (*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 (*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 (*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 (*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 (*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, @@ -57,7 +57,7 @@ EVP_CIPHER_meth_get_ctrl - Routines to build up EVP_CIPHER methods 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 *); + ASN1_TYPE *); int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, int type, int arg, void *ptr); @@ -148,7 +148,7 @@ Use the default EVP routines to pass IV to and from ASN.1. =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 bits instead of +decryption is to be understood as the number of bits instead of bytes for this implementation. This is only useful for CFB1 ciphers. @@ -237,8 +237,6 @@ L =head1 HISTORY -The B structure was openly available in OpenSSL before version -1.1.0. The functions described here were added in OpenSSL 1.1.0. =head1 COPYRIGHT diff --git a/doc/man3/EVP_DigestInit.pod b/doc/man3/EVP_DigestInit.pod new file mode 100644 index 00000000..187292fc --- /dev/null +++ b/doc/man3/EVP_DigestInit.pod @@ -0,0 +1,324 @@ +=pod + +=head1 NAME + +EVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_copy_ex, +EVP_MD_CTX_ctrl, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate, +EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, +EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size, +EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, +EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_md_null, +EVP_get_digestbyname, EVP_get_digestbynid, +EVP_get_digestbyobj - EVP digest routines + +=head1 SYNOPSIS + + #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); + + 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); + + const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); + int EVP_MD_CTX_size(const EVP_MD *ctx); + int EVP_MD_CTX_block_size(const EVP_MD *ctx); + int EVP_MD_CTX_type(const EVP_MD *ctx); + + 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); + +=head1 DESCRIPTION + +The EVP digest routines are a high level interface to message digests, +and should be used instead of the cipher-specific functions. + +=over 4 + +=item EVP_MD_CTX_new() + +Allocates and returns a digest context. + +=item EVP_MD_CTX_reset() + +Resets the digest context B. This can be used to reuse an already +existing context. + +=item EVP_MD_CTX_free() + +Cleans up digest context B and frees up the space allocated to it. + +=item EVP_MD_CTX_ctrl() + +Performs digest-specific control actions on context B. + +=item EVP_DigestInit_ex() + +Sets up digest context B to use a digest B from ENGINE B. +B will typically be supplied by a function such as EVP_sha1(). If +B is NULL then the default implementation of digest B is used. + +=item EVP_DigestUpdate() + +Hashes B bytes of data at B into the digest context B. This +function can be called several times on the same B to hash additional +data. + +=item EVP_DigestFinal_ex() + +Retrieves the digest value from B and places it in B. If the B +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 B, at most +B 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. + +=item EVP_DigestFinalXOF() + +Interfaces to extendable-output functions, XOFs, such as SHAKE128 and SHAKE256. +It retrieves the digest value from B and places it in B-sized 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. + +=item EVP_MD_CTX_copy_ex() + +Can be used to copy the message digest state from B to B. This is +useful if large amounts of data are to be hashed which only differ in the last +few bytes. + +=item EVP_DigestInit() + +Behaves in the same way as EVP_DigestInit_ex() except it always uses the +default digest implementation. + +=item EVP_DigestFinal() + +Similar to EVP_DigestFinal_ex() except the digest context B is +automatically cleaned up. + +=item EVP_MD_CTX_copy() + +Similar to EVP_MD_CTX_copy_ex() except the destination B does not have to +be initialized. + +=item EVP_MD_size(), +EVP_MD_CTX_size() + +Return the size of the message digest when passed an B or an +B structure, i.e. the size of the hash. + +=item EVP_MD_block_size(), +EVP_MD_CTX_block_size() + +Return the block size of the message digest when passed an B or an +B structure. + +=item EVP_MD_type(), +EVP_MD_CTX_type() + +Return the NID of the OBJECT IDENTIFIER representing the given message digest +when passed an B structure. For example, C +returns B. This function is normally used when setting ASN1 OIDs. + +=item EVP_MD_CTX_md() + +Returns the B structure corresponding to the passed B. + +=item 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 +B. Since digests and signature algorithms are no +longer linked this function is only retained for compatibility reasons. + +=item EVP_md_null() + +A "null" message digest that does nothing: i.e. the hash it returns is of zero +length. + +=item EVP_get_digestbyname(), +EVP_get_digestbynid(), +EVP_get_digestbyobj() + +Returns an B structure when passed a digest name, a digest B or an +B structure respectively. + +=back + +=head1 RETURN VALUES + +=over 4 + +=item EVP_DigestInit_ex(), +EVP_DigestUpdate(), +EVP_DigestFinal_ex() + +Returns 1 for +success and 0 for failure. + +=item EVP_MD_CTX_ctrl() + +Returns 1 if successful or 0 for failure. + +=item EVP_MD_CTX_copy_ex() + +Returns 1 if successful or 0 for failure. + +=item EVP_MD_type(), +EVP_MD_pkey_type(), +EVP_MD_type() + +Returns the NID of the corresponding OBJECT IDENTIFIER or NID_undef if none +exists. + +=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. + +=item EVP_md_null() + +Returns a pointer to the B structure of the "null" message digest. + +=item EVP_get_digestbyname(), +EVP_get_digestbynid(), +EVP_get_digestbyobj() + +Returns either an B structure or NULL if an error occurs. + +=back + +=head1 NOTES + +The B 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 L) or the SHA-3 +digest algorithms (such as L). The other digest algorithms are +still in common use. + +For most applications the B 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. + +=head1 EXAMPLE + +This example digests the data "Test Message\n" and "Hello World\n", using the +digest name passed on the command line. + + #include + #include + + 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]; + 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); + } + +=head1 SEE ALSO + +L, +L + +The full list of digest algorithms are provided below. + +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +EVP_MD_CTX_create() and EVP_MD_CTX_destroy() were renamed to +EVP_MD_CTX_new() and EVP_MD_CTX_free() in OpenSSL 1.1.0. + +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. + +EVP_dss1() was removed in OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/EVP_DigestSignInit.pod b/doc/man3/EVP_DigestSignInit.pod similarity index 76% rename from doc/crypto/EVP_DigestSignInit.pod rename to doc/man3/EVP_DigestSignInit.pod index 7ec06b7a..c3513f53 100644 --- a/doc/crypto/EVP_DigestSignInit.pod +++ b/doc/man3/EVP_DigestSignInit.pod @@ -2,7 +2,8 @@ =head1 NAME -EVP_DigestSignInit, EVP_DigestSignUpdate, EVP_DigestSignFinal - EVP signing functions +EVP_DigestSignInit, EVP_DigestSignUpdate, EVP_DigestSignFinal, +EVP_DigestSign - EVP signing functions =head1 SYNOPSIS @@ -13,12 +14,16 @@ EVP_DigestSignInit, EVP_DigestSignUpdate, EVP_DigestSignFinal - EVP signing func 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); + =head1 DESCRIPTION The EVP signature routines are a high level interface to digital signatures. EVP_DigestSignInit() sets up signing context B to use digest B from -ENGINE B and private key B. B must be created with +ENGINE B and private key B. B must be created with EVP_MD_CTX_new() before calling this function. If B is not NULL the EVP_PKEY_CTX of the signing operation will be written to B<*pctx>: this can be used to set alternative signing options. @@ -35,12 +40,16 @@ B parameter should contain the length of the B buffer, if the call is successful the signature is written to B and the amount of data written to B. +EVP_DigestSign() signs B bytes of data at B and places the +signature in B and its length in B in a similar way to +EVP_DigestSignFinal(). + =head1 RETURN VALUES -EVP_DigestSignInit() EVP_DigestSignUpdate() and EVP_DigestSignaFinal() 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_DigestSignInit(), EVP_DigestSignUpdate(), EVP_DigestSignaFinal() and +EVP_DigestSign() 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. The error codes can be obtained from L. @@ -50,6 +59,11 @@ The B 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 diff --git a/doc/man3/EVP_DigestVerifyInit.pod b/doc/man3/EVP_DigestVerifyInit.pod new file mode 100644 index 00000000..2191b9ed --- /dev/null +++ b/doc/man3/EVP_DigestVerifyInit.pod @@ -0,0 +1,104 @@ +=pod + +=head1 NAME + +EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal, +EVP_DigestVerify - EVP signature verification functions + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +The EVP signature routines are a high level interface to digital signatures. + +EVP_DigestVerifyInit() sets up verification context B to use digest +B from ENGINE B and public key B. B must be created +with EVP_MD_CTX_new() before calling this function. If B is not NULL the +EVP_PKEY_CTX of the verification operation will be written to B<*pctx>: this +can be used to set alternative verification options. + +EVP_DigestVerifyUpdate() hashes B bytes of data at B into the +verification context B. This function can be called several times on the +same B to include additional data. This function is currently implemented +using a macro. + +EVP_DigestVerifyFinal() verifies the data in B against the signature in +B of length B. + +EVP_DigestVerify() verifies B bytes at B against the signature +in B of length B. + +=head1 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, B 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 L. + +=head1 NOTES + +The B 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 +or 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_cleanup() or a memory leak +will occur. + +=head1 SEE ALSO + +L, +L, +L, L, L, +L, L, L, +L, L + +=head1 HISTORY + +EVP_DigestVerifyInit(), EVP_DigestVerifyUpdate() and EVP_DigestVerifyFinal() +were first added to OpenSSL 1.0.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/EVP_EncodeInit.pod b/doc/man3/EVP_EncodeInit.pod similarity index 98% rename from doc/crypto/EVP_EncodeInit.pod rename to doc/man3/EVP_EncodeInit.pod index d919b14b..8055b100 100644 --- a/doc/crypto/EVP_EncodeInit.pod +++ b/doc/man3/EVP_EncodeInit.pod @@ -24,8 +24,7 @@ EVP_DecodeBlock - EVP base 64 encode/decode routines 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_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); =head1 DESCRIPTION @@ -148,7 +147,7 @@ EVP_DecodeBlock() returns the length of the data decoded or -1 on error. =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/man3/EVP_EncryptInit.pod b/doc/man3/EVP_EncryptInit.pod new file mode 100644 index 00000000..619a94ec --- /dev/null +++ b/doc/man3/EVP_EncryptInit.pod @@ -0,0 +1,652 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + +=for comment generic + + #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, unsigned char *key, 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, unsigned char *key, 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, unsigned char *key, unsigned char *iv, int enc); + int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, 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, + unsigned char *key, 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, + unsigned char *key, 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, + unsigned char *key, 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_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); + +=head1 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 B +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 B for encryption +with cipher B from ENGINE B. B must be created +before calling this function. B is normally supplied +by a function such as EVP_aes_256_cbc(). If B is NULL then the +default implementation is used. B is the symmetric key to use +and B 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 B in an initial call and supply +the remaining parameters in subsequent calls, all of which have B +set to NULL. This is done when the default cipher parameters are not +appropriate. + +EVP_EncryptUpdate() encrypts B bytes from the buffer B and +writes the encrypted version to B. This function can be called +multiple times to encrypt successive blocks of data. The amount +of data written depends on the block alignment of the encrypted data: +as a result the amount of data written may be anything from zero bytes +to (inl + cipher_block_size - 1) so B should contain sufficient +room. The actual number of bytes written is placed in B. It also +checks if B and B 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 B which should have sufficient space for +one cipher block. The number of bytes written is placed in B. 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 B +passed to EVP_DecryptUpdate() should have sufficient room for +(B + cipher_block_size) bytes unless the cipher block size is 1 in +which case B 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 B 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 B +itself. This function should be called anytime B 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 B, 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 B or B 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 B 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 B or B +structure. The constant B 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 B or B. +It will return zero if the cipher does not use an IV. The constant +B 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 B or B +structure. The constant B 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 +B. + +EVP_CIPHER_CTX_cipher() returns the B structure when passed +an B 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. B must point to a +buffer at least as big as the value returned by EVP_CIPHER_CTX_key_length(). + +=head1 RETURN VALUES + +EVP_CIPHER_CTX_new() returns a pointer to a newly created +B for success and B 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 B 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 B structure. + +EVP_CIPHER_param_to_asn1() and EVP_CIPHER_asn1_to_param() return greater +than zero for success and zero or a negative number. + +EVP_CIPHER_CTX_rand_key() returns 1 for success. + +=head1 CIPHER LISTING + +All algorithms have a fixed key length unless otherwise stated. + +Refer to L for the full list of ciphers available through the EVP +interface. + +=over 4 + +=item EVP_enc_null() + +Null cipher: does nothing. + +=back + +=head1 AEAD Interface + +The EVP interface for Authenticated Encryption with Associated Data (AEAD) +modes are subtly altered and several additional I 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 B set to B. + +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 B be used +as it is corrupted. + +=head2 GCM and OCB Modes + +The following Is are supported in GCM and OCB modes. + +=over 4 + +=item 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. + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag) + +Writes C bytes of the tag value to the buffer indicated by C. +This call can only be made when encrypting data and B all data has been +processed (e.g. after an EVP_EncryptFinal() call). + +For OCB, C must either be 16 or the value previously set via +B. + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag) + +Sets the expected tag to C bytes from C. +The tag length can only be set before specifying an IV. +C 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 C set to C 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. + +=back + +=head2 CCM Mode + +The EVP interface for CCM mode is similar to that of the GCM mode but with a +few additional requirements and different I values. + +For CCM mode, the total plaintext or ciphertext length B be passed to +EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output +and input parameters (B and B) set to B and the length passed in +the B parameter. + +The following Is are supported in CCM mode. + +=over 4 + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag) + +This call is made to set the expected B tag value when decrypting or +the length of the tag (with the C parameter set to NULL) when encrypting. +The tag length is often referred to as B. If not set a default value is +used (12 for AES). + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL) + +Sets the CCM B value. If not set a default is used (8 for AES). + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL) + +Sets the CCM nonce (IV) length. This call can only be made before specifying an +nonce value. The nonce length is given by B<15 - L> so it is 7 by default for +AES. + +=back + +=head2 ChaCha20-Poly1305 + +The following Is are supported for the ChaCha20-Poly1305 AEAD algorithm. + +=over 4 + +=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 16 (B, i.e. 128-bits). + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag) + +Writes C bytes of the tag value to the buffer indicated by C. +This call can only be made when encrypting data and B all data has been +processed (e.g. after an EVP_EncryptFinal() call). + +C specified here must be 16 (B, i.e. 128-bits) or +less. + +=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag) + +Sets the expected tag to C bytes from C. +The tag length can only be set before specifying an IV. +C must be between 1 and 16 (B) inclusive. +This call is only valid when decrypting data. + +=back + +=head1 NOTES + +Where possible the B 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 +B 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 B padding bytes of value B 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 B 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. + +EVP_get_cipherbynid(), and EVP_get_cipherbyobj() are implemented as macros. + +=head1 BUGS + +B and B 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 +B 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. + +=head1 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 B +utility with the command line (shown on two lines for clarity): + + openssl idea -d \ + -K 000102030405060708090A0B0C0D0E0F -iv 0102030405060708 + +Supported ciphers are listed in: + +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +Support for OCB mode was added in OpenSSL 1.1.0 + +B 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(). + +=head1 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 +L. + +=cut diff --git a/doc/crypto/EVP_MD_meth_new.pod b/doc/man3/EVP_MD_meth_new.pod similarity index 99% rename from doc/crypto/EVP_MD_meth_new.pod rename to doc/man3/EVP_MD_meth_new.pod index 4dac6722..0265c7d5 100644 --- a/doc/crypto/EVP_MD_meth_new.pod +++ b/doc/man3/EVP_MD_meth_new.pod @@ -165,7 +165,7 @@ L, L, L =head1 HISTORY The B structure was openly available in OpenSSL before version -1.1.0. The functions described here were added in OpenSSL 1.1.0. +1.1. The functions described here were added in OpenSSL 1.1. =head1 COPYRIGHT diff --git a/doc/crypto/EVP_OpenInit.pod b/doc/man3/EVP_OpenInit.pod similarity index 90% rename from doc/crypto/EVP_OpenInit.pod rename to doc/man3/EVP_OpenInit.pod index ff84490a..61b4307b 100644 --- a/doc/crypto/EVP_OpenInit.pod +++ b/doc/man3/EVP_OpenInit.pod @@ -9,11 +9,10 @@ EVP_OpenInit, EVP_OpenUpdate, EVP_OpenFinal - EVP envelope decryption #include int EVP_OpenInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char *ek, - int ekl, unsigned char *iv, EVP_PKEY *priv); + 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); + int *outl, unsigned char *in, int inl); + int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); =head1 DESCRIPTION @@ -54,7 +53,7 @@ EVP_OpenFinal() returns 0 if the decrypt failed or 1 for success. =head1 SEE ALSO -L, L, +L, L, L, L diff --git a/doc/crypto/EVP_PKEY_ASN1_METHOD.pod b/doc/man3/EVP_PKEY_ASN1_METHOD.pod similarity index 88% rename from doc/crypto/EVP_PKEY_ASN1_METHOD.pod rename to doc/man3/EVP_PKEY_ASN1_METHOD.pod index 0eece53c..cb03b473 100644 --- a/doc/crypto/EVP_PKEY_ASN1_METHOD.pod +++ b/doc/man3/EVP_PKEY_ASN1_METHOD.pod @@ -14,6 +14,10 @@ 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_get0_asn1 - manipulating and registering EVP_PKEY_ASN1_METHOD structure @@ -90,6 +94,20 @@ EVP_PKEY_get0_asn1 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)); @@ -289,6 +307,26 @@ item_verify() and item_sign() are called by L and L, and by extension, L, L, L, L, ... + int (*siginf_set) (X509_SIG_INFO *siginf, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +The siginf_set() method is used to set custom B +parameters. +It MUST return 0 on error, or 1 on success. +It's called as part of L, L +and L. + + 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 B 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 L, L and +L respectively. + =head2 Functions EVP_PKEY_asn1_new() creates and returns a new B @@ -328,7 +366,9 @@ 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(), and +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() and EVP_PKEY_asn1_set_security_bits() set the diverse methods of the given B object. diff --git a/doc/crypto/EVP_PKEY_CTX_ctrl.pod b/doc/man3/EVP_PKEY_CTX_ctrl.pod similarity index 79% rename from doc/crypto/EVP_PKEY_CTX_ctrl.pod rename to doc/man3/EVP_PKEY_CTX_ctrl.pod index a30450bb..2ad470b5 100644 --- a/doc/crypto/EVP_PKEY_CTX_ctrl.pod +++ b/doc/man3/EVP_PKEY_CTX_ctrl.pod @@ -4,10 +4,11 @@ EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_set_rsa_padding, -EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_rsa_keygen_bits, +EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_keygen_bits, EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set_dsa_paramgen_bits, EVP_PKEY_CTX_set_dh_paramgen_prime_len, EVP_PKEY_CTX_set_dh_paramgen_generator, +EVP_PKEY_CTX_set_dh_pad, EVP_PKEY_CTX_set_dh_nid, EVP_PKEY_CTX_set_ec_paramgen_curve_nid, EVP_PKEY_CTX_set_ec_param_enc - algorithm specific control operations @@ -16,9 +17,9 @@ EVP_PKEY_CTX_set_ec_param_enc - algorithm specific control operations #include int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, int p1, void *p2); + int cmd, int p1, void *p2); int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, - const char *value); + const char *value); #include @@ -26,7 +27,7 @@ EVP_PKEY_CTX_set_ec_param_enc - algorithm specific control operations int EVP_PKEY_CTX_set_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_set_rsa_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits); + 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); #include @@ -35,6 +36,8 @@ EVP_PKEY_CTX_set_ec_param_enc - algorithm specific control operations #include int EVP_PKEY_CTX_set_dh_paramgen_prime_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_pad(EVP_PKEY_CTX *ctx, int pad); + int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); #include int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); @@ -48,6 +51,9 @@ B is a mask indicating which operations the control can be applied to. The control command is indicated in B and any additional arguments in B and B. +For B = B, B is the length of the MAC key, +and B 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. @@ -82,14 +88,15 @@ if this control is called. If it is not called then the first byte of the plaint buffer is expected to be the algorithm identifier byte. The EVP_PKEY_CTX_set_rsa_pss_saltlen() macro sets the RSA PSS salt length to -B as its name implies it is only supported for PSS padding. Two special -values are supported: -1 sets the salt length to the digest length. When -signing -2 sets the salt length to the maximum permissible value. When -verifying -2 causes the salt length to be automatically determined based on the -B block structure. If this macro is not called a salt length value of -2 -is used by default. +B 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 B 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_set_rsa_rsa_keygen_bits() macro sets the RSA key length for +The EVP_PKEY_CTX_set_rsa_keygen_bits() macro sets the RSA key length for RSA key generation to B. If not specified 1024 bits is used. The EVP_PKEY_CTX_set_rsa_keygen_pubexp() macro sets the public exponent value @@ -107,6 +114,15 @@ then 1024 is used. The EVP_PKEY_CTX_set_dh_paramgen_generator() macro sets DH generator to B for DH parameter generation. If not specified 2 is used. +The EVP_PKEY_CTX_set_dh_pad() macro sets the DH padding mode. If B is +1 the shared secret is padded with zeroes up to the size of the DH prime B

. +If B is zero (the default) then no padding is performed. + +EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to +B. The B parameter must be B, B, +B, B or B. This macro can be +called during parameter or key generation. + The EVP_PKEY_CTX_set_ec_paramgen_curve_nid() sets the EC curve for EC parameter generation to B. For EC parameter generation this macro must be called or an error occurs because there is no default curve. diff --git a/doc/crypto/EVP_PKEY_CTX_new.pod b/doc/man3/EVP_PKEY_CTX_new.pod similarity index 100% rename from doc/crypto/EVP_PKEY_CTX_new.pod rename to doc/man3/EVP_PKEY_CTX_new.pod diff --git a/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod b/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod new file mode 100644 index 00000000..333b8da0 --- /dev/null +++ b/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod @@ -0,0 +1,166 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 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: + +=over 4 + +=item EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND + +This is the default mode. Calling L 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. + +=item EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY + +In this mode calling L 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. + +=item EVP_PKEY_HKDEF_MODE_EXPAND_ONLY + +In this mode calling L 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. + +=back + +EVP_PKEY_set_hkdf_md() sets the message digest associated with the HKDF. + +EVP_PKEY_CTX_set1_hkdf_salt() sets the salt to B bytes of the +buffer B. Any existing value is replaced. + +EVP_PKEY_CTX_set_hkdf_key() sets the key to B bytes of the buffer +B. Any existing value is replaced. + +EVP_PKEY_CTX_add1_hkdf_info() sets the info value to B bytes of the +buffer B. If a value is already set, it is appended to the existing +value. + +=head1 STRING CTRLS + +HKDF also supports string based control operations via +L. +The B parameter "md" uses the supplied B as the name of the digest +algorithm to use. +The B parameter "mode" uses the values "EXTRACT_AND_EXPAND", +"EXTRACT_ONLY" and "EXPAND_ONLY" to determine the mode to use. +The B parameters "salt", "key" and "info" use the supplied B +parameter as a B, B or B value. +The names "hexsalt", "hexkey" and "hexinfo" are similar except they take a hex +string which is converted to binary. + +=head1 NOTES + +All these functions are implemented as macros. + +A context for HKDF can be obtained by calling: + + EVP_PKEY_CTX *pctx = EVP_PKEY_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 L function. +Since the HKDF output length is variable, passing a B 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 L along with (a +pointer initialized to) the desired length. Passing a B 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. + +=head1 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. + +=head1 EXAMPLE + +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 */ + +=head1 CONFORMING TO + +RFC 5869 + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/crypto/EVP_PKEY_CTX_set_tls1_prf_md.pod b/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod similarity index 95% rename from doc/crypto/EVP_PKEY_CTX_set_tls1_prf_md.pod rename to doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod index f1f0ae4f..30e50bc6 100644 --- a/doc/crypto/EVP_PKEY_CTX_set_tls1_prf_md.pod +++ b/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod @@ -50,7 +50,7 @@ All these functions are implemented as macros. A context for the TLS PRF can be obtained by calling: - EVP_PKEY_CTX *pctx = EVP_PKEY_new_id(EVP_PKEY_TLS1_PRF, NULL); + 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. @@ -78,17 +78,18 @@ 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 */ + /* Error */ if (EVP_PKEY_CTX_set_tls1_prf_md(pctx, EVP_sha256()) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, "secret", 6) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, "seed", 4) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) - /* Error */ + /* Error */ =head1 SEE ALSO diff --git a/doc/crypto/EVP_PKEY_asn1_get_count.pod b/doc/man3/EVP_PKEY_asn1_get_count.pod similarity index 100% rename from doc/crypto/EVP_PKEY_asn1_get_count.pod rename to doc/man3/EVP_PKEY_asn1_get_count.pod diff --git a/doc/crypto/EVP_PKEY_cmp.pod b/doc/man3/EVP_PKEY_cmp.pod similarity index 100% rename from doc/crypto/EVP_PKEY_cmp.pod rename to doc/man3/EVP_PKEY_cmp.pod diff --git a/doc/crypto/EVP_PKEY_decrypt.pod b/doc/man3/EVP_PKEY_decrypt.pod similarity index 85% rename from doc/crypto/EVP_PKEY_decrypt.pod rename to doc/man3/EVP_PKEY_decrypt.pod index ca732ed0..2a691a61 100644 --- a/doc/crypto/EVP_PKEY_decrypt.pod +++ b/doc/man3/EVP_PKEY_decrypt.pod @@ -10,8 +10,8 @@ EVP_PKEY_decrypt_init, EVP_PKEY_decrypt - decrypt using a public key algorithm 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); + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); =head1 DESCRIPTION @@ -49,31 +49,34 @@ Decrypt data using OAEP (for RSA keys): #include EVP_PKEY_CTX *ctx; + ENGINE *eng; unsigned char *out, *in; size_t outlen, inlen; EVP_PKEY *key; - /* NB: assumes key in, inlen are already set up + + /* + * NB: assumes key, eng, in, inlen are already set up * and that key is an RSA private key */ - ctx = EVP_PKEY_CTX_new(key); + ctx = EVP_PKEY_CTX_new(key, eng); if (!ctx) - /* Error occurred */ + /* Error occurred */ if (EVP_PKEY_decrypt_init(ctx) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0) - /* Error */ + /* Error */ /* Determine buffer length */ if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0) - /* Error */ + /* Error */ out = OPENSSL_malloc(outlen); if (!out) - /* malloc failure */ + /* malloc failure */ if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0) - /* Error */ + /* Error */ /* Decrypted data is outlen bytes written to buffer out */ @@ -92,7 +95,7 @@ These functions were first added to OpenSSL 1.0.0. =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/EVP_PKEY_derive.pod b/doc/man3/EVP_PKEY_derive.pod similarity index 89% rename from doc/crypto/EVP_PKEY_derive.pod rename to doc/man3/EVP_PKEY_derive.pod index f70a0b8d..8cd0b547 100644 --- a/doc/crypto/EVP_PKEY_derive.pod +++ b/doc/man3/EVP_PKEY_derive.pod @@ -50,30 +50,31 @@ Derive shared secret (for example DH or EC keys): #include EVP_PKEY_CTX *ctx; + ENGINE *eng; unsigned char *skey; size_t skeylen; EVP_PKEY *pkey, *peerkey; - /* NB: assumes pkey, peerkey have been already set up */ + /* NB: assumes pkey, eng, peerkey have been already set up */ - ctx = EVP_PKEY_CTX_new(pkey); + ctx = EVP_PKEY_CTX_new(pkey, eng); if (!ctx) - /* Error occurred */ + /* Error occurred */ if (EVP_PKEY_derive_init(ctx) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_derive_set_peer(ctx, peerkey) <= 0) - /* Error */ + /* Error */ /* Determine buffer length */ if (EVP_PKEY_derive(ctx, NULL, &skeylen) <= 0) - /* Error */ + /* Error */ skey = OPENSSL_malloc(skeylen); if (!skey) - /* malloc failure */ + /* malloc failure */ if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0) - /* Error */ + /* Error */ /* Shared secret is skey bytes written to buffer skey */ @@ -92,7 +93,7 @@ These functions were first added to OpenSSL 1.0.0. =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/EVP_PKEY_encrypt.pod b/doc/man3/EVP_PKEY_encrypt.pod similarity index 89% rename from doc/crypto/EVP_PKEY_encrypt.pod rename to doc/man3/EVP_PKEY_encrypt.pod index 01336e12..4e9a34e7 100644 --- a/doc/crypto/EVP_PKEY_encrypt.pod +++ b/doc/man3/EVP_PKEY_encrypt.pod @@ -10,8 +10,8 @@ EVP_PKEY_encrypt_init, EVP_PKEY_encrypt - encrypt using a public key algorithm 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); + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); =head1 DESCRIPTION @@ -56,35 +56,37 @@ set 'eng = NULL;' to start with the default OpenSSL RSA implementation: unsigned char *out, *in; size_t outlen, inlen; EVP_PKEY *key; - /* NB: assumes eng, key, in, inlen are already set up, + + /* + * 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 */ + /* Error occurred */ if (EVP_PKEY_encrypt_init(ctx) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_OAEP_PADDING) <= 0) - /* Error */ + /* Error */ /* Determine buffer length */ if (EVP_PKEY_encrypt(ctx, NULL, &outlen, in, inlen) <= 0) - /* Error */ + /* Error */ out = OPENSSL_malloc(outlen); if (!out) - /* malloc failure */ + /* malloc failure */ if (EVP_PKEY_encrypt(ctx, out, &outlen, in, inlen) <= 0) - /* Error */ + /* Error */ /* Encrypted data is outlen bytes written to buffer out */ =head1 SEE ALSO L, -L, +L, L, L, L, diff --git a/doc/crypto/EVP_PKEY_get_default_digest_nid.pod b/doc/man3/EVP_PKEY_get_default_digest_nid.pod similarity index 100% rename from doc/crypto/EVP_PKEY_get_default_digest_nid.pod rename to doc/man3/EVP_PKEY_get_default_digest_nid.pod diff --git a/doc/man3/EVP_PKEY_keygen.pod b/doc/man3/EVP_PKEY_keygen.pod new file mode 100644 index 00000000..0b86eaaa --- /dev/null +++ b/doc/man3/EVP_PKEY_keygen.pod @@ -0,0 +1,206 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +The EVP_PKEY_keygen_init() function initializes a public key algorithm +context using key B for a key generation operation. + +The EVP_PKEY_keygen() function performs a key generation operation, the +generated key is written to B. + +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 B. 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 B 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 +B 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 B. This function first tries +to use customized key check method in B if it's present; otherwise +it calls a default one defined in B. + +EVP_PKEY_public_check() validates the public component of the key-pair given by B. +This function first tries to use customized key check method in B +if it's present; otherwise it calls a default one defined in B. + +EVP_PKEY_param_check() validates the algorithm parameters of the key-pair given by B. +This function first tries to use customized key check method in B +if it's present; otherwise it calls a default one defined in B. + +=head1 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. + +=head1 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. + +=head1 EXAMPLES + +Generate a 2048 bit RSA key: + + #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 */ + +Generate a key from a set of parameters: + + #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 */ + +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; + } + +=head1 SEE ALSO + +L, +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +These functions were first added to OpenSSL 1.0.0. + +EVP_PKEY_check(), EVP_PKEY_public_check() and EVP_PKEY_param_check() were added +in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/EVP_PKEY_meth_get_count.pod b/doc/man3/EVP_PKEY_meth_get_count.pod new file mode 100644 index 00000000..4d2eab50 --- /dev/null +++ b/doc/man3/EVP_PKEY_meth_get_count.pod @@ -0,0 +1,50 @@ +=pod + +=head1 NAME + +EVP_PKEY_meth_get_count, EVP_PKEY_meth_get0, EVP_PKEY_meth_get0_info - enumerate public key methods + +=head1 SYNOPSIS + + #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); + +=head1 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 B. The value of B +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 B<*meth>. + +=head1 RETURN VALUES + +EVP_PKEY_meth_count() returns the number of available public key methods. + +EVP_PKEY_meth_get0() return a public key method or B if B is +out of range. + +EVP_PKEY_meth_get0_info() does not return a value. + +=head1 SEE ALSO + +L + +=head1 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 +L. + +=cut diff --git a/doc/man3/EVP_PKEY_meth_new.pod b/doc/man3/EVP_PKEY_meth_new.pod new file mode 100644 index 00000000..918e4fa1 --- /dev/null +++ b/doc/man3/EVP_PKEY_meth_new.pod @@ -0,0 +1,407 @@ +=pod + +=head1 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_check, +EVP_PKEY_meth_set_public_check, EVP_PKEY_meth_set_param_check, +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_check, +EVP_PKEY_meth_get_public_check, EVP_PKEY_meth_get_param_check, +EVP_PKEY_meth_remove +- manipulating EVP_PKEY_METHOD structure + +=head1 SYNOPSIS + + #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_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_get_init(EVP_PKEY_METHOD *pmeth, + int (**pinit) (EVP_PKEY_CTX *ctx)); + void EVP_PKEY_meth_get_copy(EVP_PKEY_METHOD *pmeth, + int (**pcopy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + void EVP_PKEY_meth_get_cleanup(EVP_PKEY_METHOD *pmeth, + void (**pcleanup) (EVP_PKEY_CTX *ctx)); + void EVP_PKEY_meth_get_paramgen(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(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(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(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(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(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(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(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(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(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(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_check(EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + void EVP_PKEY_meth_get_public_check(EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + void EVP_PKEY_meth_get_param_check(EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +=head1 DESCRIPTION + +B 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 B 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 L. + +The B objects are usually referenced by B +objects. + +=head2 Methods + +The methods are the underlying implementations of a particular public key +algorithm present by the B 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 +B is created. As opposed to init(), the cleanup() method is called +when an B is freed. The copy() method is called when an B +is being duplicated. Refer to L, L, +L and L. + + 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 L and L 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 L and +L. + + 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 L +and L. + + 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 L and L. + + 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 +L and L. + + 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 B object. They are called by the EVP_DigestSign functions. See +L for detail. + + 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 B object. They are called by the various +EVP_DigestVerify functions. See L for detail. + + 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 L and L. + + 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 L and L. + + 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 +L and L. + + 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 L and related functions for detail. + + 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 L +and L. + + 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 B. +They could be called by L, L and +L respectively. + +=head2 Functions + +EVP_PKEY_meth_new() creates and returns a new B object, +and associates the given B and B. The following flags are +supported: + + EVP_PKEY_FLAG_AUTOARGLEN + EVP_PKEY_FLAG_SIGCTX_CUSTOM + +If an B is set with the B 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 +L. + +The B is used to indicate the signctx() method +of an B is always called by the EVP framework while doing a +digest signing operation by calling L. + +EVP_PKEY_meth_free() frees an existing B pointed by +B. + +EVP_PKEY_meth_copy() copies an B object from B +to B. + +EVP_PKEY_meth_find() finds an B object with the B. +This function first searches through the user-defined method objects and +then the built-in objects. + +EVP_PKEY_meth_add0() adds B to the user defined stack of methods. + +EVP_PKEY_meth_remove() removes an B object added by +EVP_PKEY_meth_add0(). + +The EVP_PKEY_meth_set functions set the corresponding fields of +B structure with the arguments passed. + +The EVP_PKEY_meth_get functions get the corresponding fields of +B structure to the arguments provided. + +=head1 RETURN VALUES + +EVP_PKEY_meth_new() returns a pointer to a new B +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 B +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. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/EVP_PKEY_new.pod b/doc/man3/EVP_PKEY_new.pod similarity index 100% rename from doc/crypto/EVP_PKEY_new.pod rename to doc/man3/EVP_PKEY_new.pod diff --git a/doc/crypto/EVP_PKEY_print_private.pod b/doc/man3/EVP_PKEY_print_private.pod similarity index 86% rename from doc/crypto/EVP_PKEY_print_private.pod rename to doc/man3/EVP_PKEY_print_private.pod index 9f1d324f..3ebd086a 100644 --- a/doc/crypto/EVP_PKEY_print_private.pod +++ b/doc/man3/EVP_PKEY_print_private.pod @@ -9,11 +9,11 @@ EVP_PKEY_print_public, EVP_PKEY_print_private, EVP_PKEY_print_params - public ke #include int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); + int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); + int indent, ASN1_PCTX *pctx); int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, - int indent, ASN1_PCTX *pctx); + int indent, ASN1_PCTX *pctx); =head1 DESCRIPTION @@ -28,8 +28,7 @@ be used. =head1 NOTES -Currently no public key algorithms include any options in the B parameter -parameter. +Currently no public key algorithms include any options in the B 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 @@ -52,7 +51,7 @@ These functions were first added to OpenSSL 1.0.0. =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/EVP_PKEY_set1_RSA.pod b/doc/man3/EVP_PKEY_set1_RSA.pod similarity index 100% rename from doc/crypto/EVP_PKEY_set1_RSA.pod rename to doc/man3/EVP_PKEY_set1_RSA.pod diff --git a/doc/crypto/EVP_PKEY_sign.pod b/doc/man3/EVP_PKEY_sign.pod similarity index 91% rename from doc/crypto/EVP_PKEY_sign.pod rename to doc/man3/EVP_PKEY_sign.pod index 9b3c8d45..bdebf0b9 100644 --- a/doc/crypto/EVP_PKEY_sign.pod +++ b/doc/man3/EVP_PKEY_sign.pod @@ -10,8 +10,8 @@ EVP_PKEY_sign_init, EVP_PKEY_sign - sign using a public key algorithm 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); + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); =head1 DESCRIPTION @@ -66,25 +66,25 @@ Sign data using RSA with PKCS#1 padding and SHA256 digest: */ ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); if (!ctx) - /* Error occurred */ + /* Error occurred */ if (EVP_PKEY_sign_init(ctx) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) - /* Error */ + /* Error */ /* Determine buffer length */ if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0) - /* Error */ + /* Error */ sig = OPENSSL_malloc(siglen); if (!sig) - /* malloc failure */ + /* malloc failure */ if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0) - /* Error */ + /* Error */ /* Signature is siglen bytes written to buffer sig */ diff --git a/doc/crypto/EVP_PKEY_verify.pod b/doc/man3/EVP_PKEY_verify.pod similarity index 82% rename from doc/crypto/EVP_PKEY_verify.pod rename to doc/man3/EVP_PKEY_verify.pod index e84f8804..57d7f8cf 100644 --- a/doc/crypto/EVP_PKEY_verify.pod +++ b/doc/man3/EVP_PKEY_verify.pod @@ -10,8 +10,8 @@ EVP_PKEY_verify_init, EVP_PKEY_verify - signature verification using a public ke 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); + const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen); =head1 DESCRIPTION @@ -36,7 +36,7 @@ context if several operations are performed using the same parameters. 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 not verify +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. @@ -55,23 +55,26 @@ Verify signature using PKCS#1 and SHA256 digest: 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 + + /* + * 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); + ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */); if (!ctx) - /* Error occurred */ + /* Error occurred */ if (EVP_PKEY_verify_init(ctx) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) - /* Error */ + /* Error */ /* Perform operation */ ret = EVP_PKEY_verify(ctx, sig, siglen, md, mdlen); - /* ret == 1 indicates success, 0 verify failure and < 0 for some + /* + * ret == 1 indicates success, 0 verify failure and < 0 for some * other error. */ @@ -90,7 +93,7 @@ These functions were first added to OpenSSL 1.0.0. =head1 COPYRIGHT -Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/EVP_PKEY_verify_recover.pod b/doc/man3/EVP_PKEY_verify_recover.pod similarity index 86% rename from doc/crypto/EVP_PKEY_verify_recover.pod rename to doc/man3/EVP_PKEY_verify_recover.pod index 837bc64e..85d76f84 100644 --- a/doc/crypto/EVP_PKEY_verify_recover.pod +++ b/doc/man3/EVP_PKEY_verify_recover.pod @@ -10,8 +10,8 @@ EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover - recover signature using 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); + unsigned char *rout, size_t *routlen, + const unsigned char *sig, size_t siglen); =head1 DESCRIPTION @@ -60,30 +60,32 @@ Recover digest originally signed using PKCS#1 and SHA256 digest: unsigned char *rout, *sig; size_t routlen, siglen; EVP_PKEY *verify_key; - /* NB: assumes verify_key, sig and siglen are already set up + + /* + * 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); + ctx = EVP_PKEY_CTX_new(verify_key, NULL /* no engine */); if (!ctx) - /* Error occurred */ + /* Error occurred */ if (EVP_PKEY_verify_recover_init(ctx) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) - /* Error */ + /* Error */ if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) - /* Error */ + /* Error */ /* Determine buffer length */ if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0) - /* Error */ + /* Error */ rout = OPENSSL_malloc(routlen); if (!rout) - /* malloc failure */ + /* malloc failure */ if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0) - /* Error */ + /* Error */ /* Recovered data is routlen bytes written to buffer rout */ @@ -102,7 +104,7 @@ These functions were first added to OpenSSL 1.0.0. =head1 COPYRIGHT -Copyright 2013-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/EVP_SealInit.pod b/doc/man3/EVP_SealInit.pod similarity index 95% rename from doc/crypto/EVP_SealInit.pod rename to doc/man3/EVP_SealInit.pod index 30bd6808..29d89c30 100644 --- a/doc/crypto/EVP_SealInit.pod +++ b/doc/man3/EVP_SealInit.pod @@ -12,9 +12,8 @@ EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption 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); + int *outl, unsigned char *in, int inl); + int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); =head1 DESCRIPTION @@ -74,7 +73,7 @@ with B set to NULL. =head1 SEE ALSO -L, L, +L, L, L, L diff --git a/doc/crypto/EVP_SignInit.pod b/doc/man3/EVP_SignInit.pod similarity index 84% rename from doc/crypto/EVP_SignInit.pod rename to doc/man3/EVP_SignInit.pod index 21eb868b..987526c4 100644 --- a/doc/crypto/EVP_SignInit.pod +++ b/doc/man3/EVP_SignInit.pod @@ -3,7 +3,8 @@ =head1 NAME EVP_PKEY_size, -EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal - EVP signing +EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal, +EVP_PKEY_security_bits - EVP signing functions =head1 SYNOPSIS @@ -17,6 +18,7 @@ functions void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type); int EVP_PKEY_size(EVP_PKEY *pkey); + int EVP_PKEY_security_bits(const EVP_PKEY *pkey); =head1 DESCRIPTION @@ -44,6 +46,9 @@ implementation of digest B. EVP_PKEY_size() returns the maximum size of a signature in bytes. The actual signature returned by EVP_SignFinal() may be smaller. +EVP_PKEY_security_bits() returns the number of security bits of the given B, +bits of security is defined in NIST SP800-57. + =head1 RETURN VALUES EVP_SignInit_ex(), EVP_SignUpdate() and EVP_SignFinal() return 1 @@ -53,12 +58,19 @@ EVP_PKEY_size() returns the maximum size of a signature in bytes. The error codes can be obtained by L. +EVP_PKEY_security_bits() returns the number of security bits. + =head1 NOTES The B 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. +Due to the link between message digests and public key algorithms the correct +digest algorithm must be used with the correct public key type. A list of +algorithms and associated public key algorithms appears in +L. + When signing with DSA private keys the random number generator must be seeded or the operation will fail. The random number generator does not need to be seeded for RSA signatures. @@ -95,7 +107,7 @@ L, L =head1 COPYRIGHT -Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/EVP_VerifyInit.pod b/doc/man3/EVP_VerifyInit.pod similarity index 89% rename from doc/crypto/EVP_VerifyInit.pod rename to doc/man3/EVP_VerifyInit.pod index 92146098..ad8a8c01 100644 --- a/doc/crypto/EVP_VerifyInit.pod +++ b/doc/man3/EVP_VerifyInit.pod @@ -12,7 +12,8 @@ EVP_VerifyInit, EVP_VerifyUpdate, EVP_VerifyFinal 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_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); @@ -51,6 +52,11 @@ The B 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. +Due to the link between message digests and public key algorithms the correct +digest algorithm must be used with the correct public key type. A list of +algorithms and associated public key algorithms appears in +L. + 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. @@ -84,7 +90,7 @@ L, L =head1 COPYRIGHT -Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/EVP_aes.pod b/doc/man3/EVP_aes.pod new file mode 100644 index 00000000..6a893993 --- /dev/null +++ b/doc/man3/EVP_aes.pod @@ -0,0 +1,181 @@ +=pod + +=head1 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_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 + +=head1 SYNOPSIS + +=for comment generic + + #include + + const EVP_CIPHER *EVP_ciphername(void) + +I is used a placeholder for any of the described cipher +functions, such as I. + +=head1 DESCRIPTION + +The AES encryption algorithm for EVP. + +=over 4 + +=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_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. + +=item 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. + +=item 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. + +=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() + +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 L +section for details. + +=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() + +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. + +=item 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 (B) takes input of a 256-bit key to +achieve AES 128-bit security, and XTS-AES-256 (B) takes input +of a 512-bit key to achieve AES 256-bit security. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_aria.pod b/doc/man3/EVP_aria.pod new file mode 100644 index 00000000..3b6ad357 --- /dev/null +++ b/doc/man3/EVP_aria.pod @@ -0,0 +1,111 @@ +=pod + +=head1 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_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 AES cipher + +=head1 SYNOPSIS + +=for comment generic + + #include + + const EVP_CIPHER *EVP_ciphername(void) + +I is used a placeholder for any of the described cipher +functions, such as I. + +=head1 DESCRIPTION + +The ARIA encryption algorithm for EVP. + +=over 4 + +=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_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. + +=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(), + +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 L section for details. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_bf_cbc.pod b/doc/man3/EVP_bf_cbc.pod new file mode 100644 index 00000000..4a9d3a9f --- /dev/null +++ b/doc/man3/EVP_bf_cbc.pod @@ -0,0 +1,59 @@ +=pod + +=head1 NAME + +EVP_bf_cbc, +EVP_bf_cfb, +EVP_bf_ecb, +EVP_bf_ofb +- EVP Blowfish cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_bf_cbc(void) + const EVP_CIPHER *EVP_bf_cfb(void) + const EVP_CIPHER *EVP_bf_ecb(void) + const EVP_CIPHER *EVP_bf_ofb(void) + +=head1 DESCRIPTION + +The Blowfish encryption algorithm for EVP. + +This is a variable key length cipher. + +=over 4 + +=item EVP_bf_cbc(), +EVP_bf_cfb(), +EVP_bf_ecb(), +EVP_bf_ofb() + +Blowfish encryption algorithm in CBC, CFB, ECB and OFB modes respectively. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_blake2b512.pod b/doc/man3/EVP_blake2b512.pod new file mode 100644 index 00000000..9b56f3e5 --- /dev/null +++ b/doc/man3/EVP_blake2b512.pod @@ -0,0 +1,65 @@ +=pod + +=head1 NAME + +EVP_blake2b512, +EVP_blake2s256 +- BLAKE2 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_blake2b512(void); + const EVP_MD *EVP_blake2s256(void); + +=head1 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. + +=over 4 + +=item EVP_blake2s256() + +The BLAKE2s algorithm that produces a 256-bit output from a given input. + +=item EVP_blake2b512() + +The BLAKE2b algorithm that produces a 512-bit output from a given input. + +=back + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +RFC 7693. + +=head1 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. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_camellia.pod b/doc/man3/EVP_camellia.pod new file mode 100644 index 00000000..75602cf6 --- /dev/null +++ b/doc/man3/EVP_camellia.pod @@ -0,0 +1,94 @@ +=pod + +=head1 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_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 + +=head1 SYNOPSIS + +=for comment generic + + #include + + const EVP_CIPHER *EVP_ciphername(void) + +I is used a placeholder for any of the described cipher +functions, such as I. + +=head1 DESCRIPTION + +The Camellia encryption algorithm for EVP. + +=over 4 + +=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_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. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_cast5_cbc.pod b/doc/man3/EVP_cast5_cbc.pod new file mode 100644 index 00000000..01c38414 --- /dev/null +++ b/doc/man3/EVP_cast5_cbc.pod @@ -0,0 +1,59 @@ +=pod + +=head1 NAME + +EVP_cast5_cbc, +EVP_cast5_cfb, +EVP_cast5_ecb, +EVP_cast5_ofb +- EVP CAST cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_cast5_cbc(void) + const EVP_CIPHER *EVP_cast5_cfb(void) + const EVP_CIPHER *EVP_cast5_ecb(void) + const EVP_CIPHER *EVP_cast5_ofb(void) + +=head1 DESCRIPTION + +The CAST encryption algorithm for EVP. + +This is a variable key length cipher. + +=over 4 + +=item EVP_cast5_cbc(), +EVP_cast5_ecb(), +EVP_cast5_cfb(), +EVP_cast5_ofb() + +CAST encryption algorithm in CBC, ECB, CFB and OFB modes respectively. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_chacha20.pod b/doc/man3/EVP_chacha20.pod new file mode 100644 index 00000000..96da825c --- /dev/null +++ b/doc/man3/EVP_chacha20.pod @@ -0,0 +1,57 @@ +=pod + +=head1 NAME + +EVP_chacha20, +EVP_chacha20_poly1305 +- EVP ChaCha20 stream cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_chacha20(void) + const EVP_CIPHER *EVP_chacha20_poly1305(void) + +=head1 DESCRIPTION + +The ChaCha20 stream cipher for EVP. + +=over 4 + +=item EVP_chacha20() + +The ChaCha20 stream cipher. The key length is 256 bits, the IV is 96 bits long. + +=item 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 +L section for more information. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_des.pod b/doc/man3/EVP_des.pod new file mode 100644 index 00000000..836c399c --- /dev/null +++ b/doc/man3/EVP_des.pod @@ -0,0 +1,96 @@ +=pod + +=head1 NAME + +EVP_des_cbc, +EVP_des_cfb, +EVP_des_cfb1, +EVP_des_cfb8, +EVP_des_ecb, +EVP_des_ede, +EVP_des_ede_cfb, +EVP_des_ede_ofb, +EVP_des_ofb, +EVP_des_ede3, +EVP_des_ede3_cbc, +EVP_des_ede3_cfb, +EVP_des_ede3_cfb1, +EVP_des_ede3_cfb8, +EVP_des_ede3_ofb, +EVP_des_ede3_wrap, +EVP_des_ede_cbc +- EVP DES cipher + +=head1 SYNOPSIS + +=for comment generic + + #include + + const EVP_CIPHER *EVP_ciphername(void) + +I is used a placeholder for any of the described cipher +functions, such as I. + +=head1 DESCRIPTION + +The DES encryption algorithm for EVP. + +=over 4 + +=item EVP_des_cbc(), +EVP_des_ecb(), +EVP_des_cfb(), +EVP_des_cfb1(), +EVP_des_cfb8(), +EVP_des_ofb() + +DES in CBC, ECB, CFB with 128-bit shift, CFB with 1-bit shift, CFB with 8-bit +shift and OFB modes respectively. + +=item EVP_des_ede(), +EVP_des_ede_cbc(), +EVP_des_ede_ofb(), +EVP_des_ede_cfb() + +Two key triple DES in ECB, CBC, CFB and OFB modes respectively. + +=item EVP_des_ede3(), +EVP_des_ede3_cbc(), +EVP_des_ede3_cfb(), +EVP_des_ede3_cfb1(), +EVP_des_ede3_cfb8(), +EVP_des_ede3_ofb() + +Three-key triple DES in ECB, CBC, CFB with 128-bit shift, CFB with 1-bit shift, +CFB with 8-bit shift and OFB modes respectively. + +=item EVP_des_ede3_wrap() + +Triple-DES key wrap according to RFC 3217 Section 3. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_desx_cbc.pod b/doc/man3/EVP_desx_cbc.pod new file mode 100644 index 00000000..321378e1 --- /dev/null +++ b/doc/man3/EVP_desx_cbc.pod @@ -0,0 +1,50 @@ +=pod + +=head1 NAME + +EVP_desx_cbc +- EVP DES-X cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_desx_cbc(void) + +=head1 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. + +=over 4 + +=item EVP_desx_cbc() + +The DES-X algorithm in CBC mode. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_idea_cbc.pod b/doc/man3/EVP_idea_cbc.pod new file mode 100644 index 00000000..ace79885 --- /dev/null +++ b/doc/man3/EVP_idea_cbc.pod @@ -0,0 +1,57 @@ +=pod + +=head1 NAME + +EVP_idea_cbc, +EVP_idea_cfb, +EVP_idea_ecb, +EVP_idea_ofb +- EVP IDEA cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_idea_cbc(void) + const EVP_CIPHER *EVP_idea_cfb(void) + const EVP_CIPHER *EVP_idea_ecb(void) + const EVP_CIPHER *EVP_idea_ofb(void) + +=head1 DESCRIPTION + +The IDEA encryption algorithm for EVP. + +=over 4 + +=item EVP_idea_cbc(), +EVP_idea_cfb(), +EVP_idea_ecb(), +EVP_idea_ofb() + +The IDEA encryption algorithm in CBC, CFB, ECB and OFB modes respectively. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_md2.pod b/doc/man3/EVP_md2.pod new file mode 100644 index 00000000..c66fb6f8 --- /dev/null +++ b/doc/man3/EVP_md2.pod @@ -0,0 +1,53 @@ +=pod + +=head1 NAME + +EVP_md2 +- MD2 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_md2(void); + +=head1 DESCRIPTION + +MD2 is a cryptographic hash function standardized in RFC 1319 and designed by +Ronald Rivest. + +=over 4 + +=item EVP_md2() + +The MD2 algorithm which produces a 128-bit output from a given input. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +IETF RFC 1319. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_md4.pod b/doc/man3/EVP_md4.pod new file mode 100644 index 00000000..778ed028 --- /dev/null +++ b/doc/man3/EVP_md4.pod @@ -0,0 +1,53 @@ +=pod + +=head1 NAME + +EVP_md4 +- MD4 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_md4(void); + +=head1 DESCRIPTION + +MD4 is a cryptographic hash function standardized in RFC 1320 and designed by +Ronald Rivest, first published in 1990. + +=over 4 + +=item EVP_md4() + +The MD4 algorithm which produces a 128-bit output from a given input. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +IETF RFC 1320. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_md5.pod b/doc/man3/EVP_md5.pod new file mode 100644 index 00000000..1048c0fd --- /dev/null +++ b/doc/man3/EVP_md5.pod @@ -0,0 +1,63 @@ +=pod + +=head1 NAME + +EVP_md5 +- MD5 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_md5(void); + +=head1 DESCRIPTION + +MD5 is a cryptographic hash function standardized in RFC 1321 and designed by +Ronald Rivest. + +The CMU Software Engieneering Institute considers MD5 unsuitable for further +use since its security has been severely compromised. + +=over 4 + +=item EVP_md5() + +The MD5 algorithm which produces a 128-bit output from a given input. + +=item EVP_md5_sha1() + +A hash algorithm of SSL v3 that combines MD5 with SHA-1 as decirbed in RFC +6101. + +WARNING: this algorithm is not intended for non-SSL usage. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +IETF RFC 1321. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_mdc2.pod b/doc/man3/EVP_mdc2.pod new file mode 100644 index 00000000..13ff9cfb --- /dev/null +++ b/doc/man3/EVP_mdc2.pod @@ -0,0 +1,53 @@ +=pod + +=head1 NAME + +EVP_mdc2 +- MDC-2 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_mdc2(void); + +=head1 DESCRIPTION + +MDC-2 (Modification Detection Code 2 or Meyer-Schilling) is a cryptographic +hash function based on a block cipher. + +=over 4 + +=item 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. + +=back + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +ISO/IEC 10118-2:2000 Hash-Function 2, with DES as the underlying block cipher. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_rc2_cbc.pod b/doc/man3/EVP_rc2_cbc.pod new file mode 100644 index 00000000..0958e930 --- /dev/null +++ b/doc/man3/EVP_rc2_cbc.pod @@ -0,0 +1,73 @@ +=pod + +=head1 NAME + +EVP_rc2_cbc, +EVP_rc2_cfb, +EVP_rc2_ecb, +EVP_rc2_ofb, +EVP_rc2_40_cbc, +EVP_rc2_64_cbc +- EVP RC2 cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_rc2_cbc(void) + const EVP_CIPHER *EVP_rc2_cfb(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) + +=head1 DESCRIPTION + +The RC2 encryption algorithm for EVP. + +=over 4 + +=item EVP_rc2_cbc(), +EVP_rc2_cfb(), +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. + +=item 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. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_rc4.pod b/doc/man3/EVP_rc4.pod new file mode 100644 index 00000000..7d642efd --- /dev/null +++ b/doc/man3/EVP_rc4.pod @@ -0,0 +1,68 @@ +=pod + +=head1 NAME + +EVP_rc4, +EVP_rc4_40, +EVP_rc4_hmac_md5 +- EVP RC4 stream cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_rc4(void) + const EVP_CIPHER *EVP_rc4_40(void) + const EVP_CIPHER *EVP_rc4_hmac_md5(void) + +=head1 DESCRIPTION + +The RC4 stream cipher for EVP. + +=over 4 + +=item EVP_rc4() + +RC4 stream cipher. This is a variable key length cipher with a default key +length of 128 bits. + +=item 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. + +=item 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. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_rc5_32_12_16_cbc.pod b/doc/man3/EVP_rc5_32_12_16_cbc.pod new file mode 100644 index 00000000..56175e99 --- /dev/null +++ b/doc/man3/EVP_rc5_32_12_16_cbc.pod @@ -0,0 +1,64 @@ +=pod + +=head1 NAME + +EVP_rc5_32_12_16_cbc, +EVP_rc5_32_12_16_cfb, +EVP_rc5_32_12_16_ecb, +EVP_rc5_32_12_16_ofb +- EVP RC5 cipher + +=head1 SYNOPSIS + + #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_ecb(void) + const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void) + +=head1 DESCRIPTION + +The RC5 encryption algorithm for EVP. + +=over 4 + +=item EVP_rc5_32_12_16_cbc(), +EVP_rc5_32_12_16_cfb(), +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. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 BUGS + +Currently the number of rounds in RC5 can only be set to 8, 12 or 16. +This is a limitation of the current RC5 code rather than the EVP interface. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_ripemd160.pod b/doc/man3/EVP_ripemd160.pod new file mode 100644 index 00000000..bbb2dd95 --- /dev/null +++ b/doc/man3/EVP_ripemd160.pod @@ -0,0 +1,52 @@ +=pod + +=head1 NAME + +EVP_ripemd160 +- RIPEMD160 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_ripemd160(void); + +=head1 DESCRIPTION + +RIPEMD-160 is a cryptographic hash function first published in 1996 belonging +to the RIPEMD family (RACE Integrity Primitives Evaluation Message Digest). + +=over 4 + +=item EVP_ripemd160() + +The RIPEMD-160 algorithm which produces a 160-bit output from a given input. + +=back + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +ISO/IEC 10118-3:2016 Dedicated Hash-Function 1 (RIPEMD-160). + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_seed_cbc.pod b/doc/man3/EVP_seed_cbc.pod new file mode 100644 index 00000000..e9f1f695 --- /dev/null +++ b/doc/man3/EVP_seed_cbc.pod @@ -0,0 +1,59 @@ +=pod + +=head1 NAME + +EVP_seed_cbc, +EVP_seed_cfb, +EVP_seed_ecb, +EVP_seed_ofb +- EVP SEED cipher + +=head1 SYNOPSIS + + #include + + const EVP_CIPHER *EVP_seed_cbc(void) + const EVP_CIPHER *EVP_seed_cfb(void) + const EVP_CIPHER *EVP_seed_ecb(void) + const EVP_CIPHER *EVP_seed_ofb(void) + +=head1 DESCRIPTION + +The SEED encryption algorithm for EVP. + +All modes below use a key length of 128 bits and acts on blocks of 128-bits. + +=over 4 + +=item EVP_seed_cbc(), +EVP_seed_cfb(), +EVP_seed_ecb(), +EVP_seed_ofb() + +The SEED encryption algorithm in CBC, CFB, ECB and OFB modes respectively. + +=back + +=head1 RETURN VALUES + +These functions return an B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_sha1.pod b/doc/man3/EVP_sha1.pod new file mode 100644 index 00000000..93ba6441 --- /dev/null +++ b/doc/man3/EVP_sha1.pod @@ -0,0 +1,54 @@ +=pod + +=head1 NAME + +EVP_sha1 +- SHA-1 For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_sha1(void); + +=head1 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. + +=over 4 + +=item EVP_sha1() + +The SHA-1 algorithm which produces a 160-bit output from a given input. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +NIST FIPS 180-4. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_sha224.pod b/doc/man3/EVP_sha224.pod new file mode 100644 index 00000000..2de20bb1 --- /dev/null +++ b/doc/man3/EVP_sha224.pod @@ -0,0 +1,74 @@ +=pod + +=head1 NAME + +EVP_sha224, +EVP_sha256, +EVP_sha512_224, +EVP_sha512_256, +EVP_sha384, +EVP_sha512 +- SHA-2 For EVP + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SHA-2 (Secure Hash Algorithm 2) is a family of cryptographic hash functions +standardized in NIST FIPS 180-4, first published in 2001. + +=over 4 + +=item 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. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +NIST FIPS 180-4. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_sha3_224.pod b/doc/man3/EVP_sha3_224.pod new file mode 100644 index 00000000..c7bccc9f --- /dev/null +++ b/doc/man3/EVP_sha3_224.pod @@ -0,0 +1,79 @@ +=pod + +=head1 NAME + +EVP_sha3_224, +EVP_sha3_256, +EVP_sha3_384, +EVP_sha3_512, +EVP_shake128, +EVP_shake256 +- SHA-3 For EVP + +=head1 SYNOPSIS + + #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); + +=head1 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. + +=over 4 + +=item 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. + +=item EVP_shake128(), +EVP_shake256() + +The SHAKE-128 and SHAKE-256 Extendable Output Functions (XOF) that can generate +a variable hash length. + +Specifically, B provides an overall security of 128 bits, while +B provides that of 256 bits. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +NIST FIPS 202. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/man3/EVP_sm3.pod b/doc/man3/EVP_sm3.pod new file mode 100644 index 00000000..a68fe667 --- /dev/null +++ b/doc/man3/EVP_sm3.pod @@ -0,0 +1,54 @@ +=pod + +=head1 NAME + +EVP_sm3 +- SM3 for EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_sm3(void) + +=head1 DESCRIPTION + +SM3 is a cryptographic hash function with a 256-bit output, defined in GB/T +32905-2016. + +=over 4 + +=item EVP_sm3() + +The SM3 hash function. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +GB/T 32905-2016 and GM/T 0004-2012. + +=head1 SEE ALSO + +L, +L + +=head1 COPYRIGHT + +Copyright 2017 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 +L. + +=cut + diff --git a/doc/man3/EVP_sm4_cbc.pod b/doc/man3/EVP_sm4_cbc.pod new file mode 100644 index 00000000..38abfada --- /dev/null +++ b/doc/man3/EVP_sm4_cbc.pod @@ -0,0 +1,64 @@ +=pod + +=head1 NAME + +EVP_sm4_cbc, +EVP_sm4_ecb, +EVP_sm4_cfb, +EVP_sm4_ofb, +EVP_sm4_ctr +- EVP SM4 cipher + +=head1 SYNOPSIS + + #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_ofb(void) + const EVP_CIPHER *EVP_sm4_ctr(void) + +=head1 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. + +=over 4 + +=item EVP_sm4_cbc(), +EVP_sm4_ecb(), +EVP_sm4_cfb(), +EVP_sm4_ofb(), +EVP_sm4_ctr() + +The SM4 blockcipher with a 128-bit key in CBC, ECB, CFB, OFB and CTR modes +respectively. + +=back + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 SEE ALSO + +L, +L, +L + +=head1 COPYRIGHT + +Copyright 2017 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 +L. + +=cut + diff --git a/doc/man3/EVP_whirlpool.pod b/doc/man3/EVP_whirlpool.pod new file mode 100644 index 00000000..bf60b126 --- /dev/null +++ b/doc/man3/EVP_whirlpool.pod @@ -0,0 +1,54 @@ +=pod + +=head1 NAME + +EVP_whirlpool +- WHIRLPOOL For EVP + +=head1 SYNOPSIS + + #include + + const EVP_MD *EVP_whirlpool(void); + +=head1 DESCRIPTION + +WHIRLPOOL is a cryptographic hash function standardized in ISO/IEC 10118-3:2004 +designed by Vincent Rijmen and Paulo S. L. M. Barreto. + +=over 4 + +=item EVP_whirlpool() + +The WHIRLPOOL algorithm that produces a message digest of 512-bits from a given +input. + +=back + + +=head1 RETURN VALUES + +These functions return a B structure that contains the +implementation of the symmetric cipher. See L for +details of the B structure. + +=head1 CONFORMING TO + +ISO/IEC 10118-3:2004. + +=head1 SEE ALSO + +L, +L + +=head1 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 +L. + +=cut + diff --git a/doc/crypto/HMAC.pod b/doc/man3/HMAC.pod similarity index 81% rename from doc/crypto/HMAC.pod rename to doc/man3/HMAC.pod index 219c9ba2..c480a9c9 100644 --- a/doc/crypto/HMAC.pod +++ b/doc/man3/HMAC.pod @@ -12,7 +12,8 @@ HMAC_Update, HMAC_Final, HMAC_CTX_copy, HMAC_CTX_set_flags, -HMAC_CTX_get_md +HMAC_CTX_get_md, +HMAC_size - HMAC message authentication code =head1 SYNOPSIS @@ -20,14 +21,14 @@ HMAC_CTX_get_md #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); + 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); + 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); @@ -37,6 +38,8 @@ HMAC_CTX_get_md 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 @@ -75,23 +78,21 @@ itself. The following functions may be used if the message is not completely stored in memory: -HMAC_Init() initializes a B structure to use the hash -function B and the key B which is B bytes -long. It is deprecated and only included for backward compatibility -with OpenSSL 0.9.6b. - HMAC_Init_ex() initializes or reuses a B structure to use the hash -function B and key B. If both are NULL (or B is the same -as the previous digest used by B and B is NULL) the existing key is +function B and key B. If both are NULL, or if B is NULL +and B is the same as the previous call, then the +existing key is reused. B must have been created with HMAC_CTX_new() before the first use -of an B in this function. B. +of an B in this function. -B If HMAC_Init_ex() is called with B NULL and B is not the +If HMAC_Init_ex() is called with B NULL and B is not the same as the previous digest used by B then an error is returned because reuse of an existing key with a different digest is not supported. +HMAC_Init() initializes a B structure to use the hash +function B and the key B which is B bytes +long. + HMAC_Update() can be called repeatedly with chunks of the message to be authenticated (B bytes at B). @@ -106,6 +107,8 @@ These flags have the same meaning as for L. 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. + =head1 RETURN VALUES HMAC() returns a pointer to the message authentication code or NULL if @@ -120,25 +123,27 @@ 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. + =head1 CONFORMING TO RFC 2104 =head1 SEE ALSO -L, L +L, L =head1 HISTORY -HMAC_CTX_init() was replaced with HMAC_CTX_reset() in OpenSSL versions 1.1.0. +HMAC_CTX_init() was replaced with HMAC_CTX_reset() in OpenSSL 1.1.0. -HMAC_CTX_cleanup() existed in OpenSSL versions before 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 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 -versions of OpenSSL before 1.0.0. +OpenSSL before version 1.0.0. =head1 COPYRIGHT diff --git a/doc/crypto/MD5.pod b/doc/man3/MD5.pod similarity index 80% rename from doc/crypto/MD5.pod rename to doc/man3/MD5.pod index 78da7507..83547f2c 100644 --- a/doc/crypto/MD5.pod +++ b/doc/man3/MD5.pod @@ -9,34 +9,28 @@ MD4_Final, MD5_Init, MD5_Update, MD5_Final - MD2, MD4, and MD5 hash functions #include - unsigned char *MD2(const unsigned char *d, unsigned long n, - unsigned char *md); + 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_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); + 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_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); + 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_Update(MD5_CTX *c, const void *data, unsigned long len); int MD5_Final(unsigned char *md, MD5_CTX *c); =head1 DESCRIPTION diff --git a/doc/crypto/MDC2_Init.pod b/doc/man3/MDC2_Init.pod similarity index 88% rename from doc/crypto/MDC2_Init.pod rename to doc/man3/MDC2_Init.pod index f7db71b4..b384b8c8 100644 --- a/doc/crypto/MDC2_Init.pod +++ b/doc/man3/MDC2_Init.pod @@ -9,11 +9,11 @@ MDC2, MDC2_Init, MDC2_Update, MDC2_Final - MDC2 hash function #include unsigned char *MDC2(const unsigned char *d, unsigned long n, - unsigned char *md); + unsigned char *md); int MDC2_Init(MDC2_CTX *c); int MDC2_Update(MDC2_CTX *c, const unsigned char *data, - unsigned long len); + unsigned long len); int MDC2_Final(unsigned char *md, MDC2_CTX *c); =head1 DESCRIPTION @@ -50,7 +50,7 @@ MDC2_Init(), MDC2_Update() and MDC2_Final() return 1 for success, 0 otherwise. =head1 CONFORMING TO -ISO/IEC 10118-2, with DES +ISO/IEC 10118-2:2000 Hash-Function 2, with DES as the underlying block cipher. =head1 SEE ALSO @@ -58,7 +58,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OBJ_nid2obj.pod b/doc/man3/OBJ_nid2obj.pod similarity index 91% rename from doc/crypto/OBJ_nid2obj.pod rename to doc/man3/OBJ_nid2obj.pod index 3ada6679..6c1aa132 100644 --- a/doc/crypto/OBJ_nid2obj.pod +++ b/doc/man3/OBJ_nid2obj.pod @@ -91,11 +91,7 @@ OBJ_length() returns the size of the content octets of B. OBJ_get0_data() returns a pointer to the content octets of B. The returned pointer is an internal pointer which B be freed. -In OpenSSL versions prior to 1.1.0 OBJ_cleanup() cleaned up OpenSSLs internal -object table and was called before an application exits if any new objects were -added using OBJ_create(). This function is deprecated in version 1.1.0 and now -does nothing if called. No explicit de-initialisation is now required. See -L for further information. +OBJ_cleanup() releases any resources allocated by creating new objects. =head1 NOTES @@ -137,22 +133,17 @@ The latter cannot be constant because it needs to be freed after use. Create an object for B: - ASN1_OBJECT *o; - o = OBJ_nid2obj(NID_commonName); + ASN1_OBJECT *o = OBJ_nid2obj(NID_commonName); Check if an object is B if (OBJ_obj2nid(obj) == NID_commonName) - /* Do something */ + /* Do something */ Create a new NID and initialize an object from it: - int new_nid; - ASN1_OBJECT *obj; - - new_nid = OBJ_create("1.2.3.4", "NewOID", "New Object Identifier"); - - obj = OBJ_nid2obj(new_nid); + 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: @@ -184,7 +175,8 @@ L =head1 HISTORY -OBJ_cleanup() was deprecated in OpenSSL 1.1.0. +OBJ_cleanup() was deprecated in OpenSSL 1.1.0 by L +and should not be used. =head1 COPYRIGHT diff --git a/doc/crypto/OCSP_REQUEST_new.pod b/doc/man3/OCSP_REQUEST_new.pod similarity index 97% rename from doc/crypto/OCSP_REQUEST_new.pod rename to doc/man3/OCSP_REQUEST_new.pod index 97c2337d..a382b16e 100644 --- a/doc/crypto/OCSP_REQUEST_new.pod +++ b/doc/man3/OCSP_REQUEST_new.pod @@ -93,16 +93,16 @@ B: if (OCSP_REQUEST_add0_id(req, cid) == NULL) /* error */ - /* Do something with req, e.g. query responder */ + /* Do something with req, e.g. query responder */ OCSP_REQUEST_free(req); =head1 SEE ALSO -L, +L, L, L, -L, +L, L, L diff --git a/doc/crypto/OCSP_cert_to_id.pod b/doc/man3/OCSP_cert_to_id.pod similarity index 98% rename from doc/crypto/OCSP_cert_to_id.pod rename to doc/man3/OCSP_cert_to_id.pod index 0e37937f..f1a4b151 100644 --- a/doc/crypto/OCSP_cert_to_id.pod +++ b/doc/man3/OCSP_cert_to_id.pod @@ -70,10 +70,10 @@ B structure is freed. =head1 SEE ALSO -L, +L, L, L, -L, +L, L, L diff --git a/doc/crypto/OCSP_request_add1_nonce.pod b/doc/man3/OCSP_request_add1_nonce.pod similarity index 98% rename from doc/crypto/OCSP_request_add1_nonce.pod rename to doc/man3/OCSP_request_add1_nonce.pod index dab42c67..66e4c7b8 100644 --- a/doc/crypto/OCSP_request_add1_nonce.pod +++ b/doc/man3/OCSP_request_add1_nonce.pod @@ -65,10 +65,10 @@ condition. =head1 SEE ALSO -L, +L, L, L, -L, +L, L, L diff --git a/doc/crypto/OCSP_resp_find_status.pod b/doc/man3/OCSP_resp_find_status.pod similarity index 93% rename from doc/crypto/OCSP_resp_find_status.pod rename to doc/man3/OCSP_resp_find_status.pod index 5123f0ad..af7fb1de 100644 --- a/doc/crypto/OCSP_resp_find_status.pod +++ b/doc/man3/OCSP_resp_find_status.pod @@ -5,6 +5,7 @@ OCSP_resp_get0_certs, OCSP_resp_get0_signer, OCSP_resp_get0_id, +OCSP_resp_get1_id, OCSP_resp_get0_produced_at, OCSP_resp_find_status, OCSP_resp_count, OCSP_resp_get0, OCSP_resp_find, OCSP_single_get0_status, OCSP_check_validity @@ -39,6 +40,9 @@ OCSP_single_get0_status, OCSP_check_validity 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, @@ -85,7 +89,10 @@ signed the response are known via some out-of-band mechanism. OCSP_resp_get0_id() gets the responder id of B. If the responder ID is a name then <*pname> is set to the name and B<*pid> is set to NULL. If the responder ID is by key ID then B<*pid> is set to the key ID and B<*pname> -is set to NULL. +is set to NULL. OCSP_resp_get1_id() leaves ownership of B<*pid> and B<*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 B and B values which will be typically obtained from OCSP_resp_find_status() or @@ -133,7 +140,7 @@ parameters can be set to NULL if their value is not required. =head1 SEE ALSO -L, +L, L, L, L, diff --git a/doc/man3/OCSP_response_status.pod b/doc/man3/OCSP_response_status.pod new file mode 100644 index 00000000..82f95b3a --- /dev/null +++ b/doc/man3/OCSP_response_status.pod @@ -0,0 +1,117 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +OCSP_response_status() returns the OCSP response status of B. It returns +one of the values: B, +B, +B, B +B, or B. + +OCSP_response_get1_basic() decodes and returns the B structure +contained in B. + +OCSP_response_create() creates and returns an B structure for +B and optionally including basic response B. + +OCSP_RESPONSE_free() frees up OCSP response B. + +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 B 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 B 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 B matches +with the X509 certificate B. + +OCSP_basic_sign() signs OCSP response B using certificate B, private key +B, digest B and additional certificates B. If the B option +B is set then no certificates will be included in the request. If the +B option B is set then the responder is identified by key ID +rather than by name. OCSP_basic_sign_ctx() also signs OCSP response B but +uses the parameters contained in digest context B. + +=head1 RETURN VALUES + +OCSP_RESPONSE_status() returns a status value. + +OCSP_response_get1_basic() returns an B structure pointer or +B if an error occurred. + +OCSP_response_create() returns an B structure pointer or B +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. + +=head1 NOTES + +OCSP_response_get1_basic() is only called if the status of a response is +B. + +=head1 SEE ALSO + +L +L +L +L +L +L +L +L + +=head1 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. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/OCSP_sendreq_new.pod b/doc/man3/OCSP_sendreq_new.pod similarity index 98% rename from doc/crypto/OCSP_sendreq_new.pod rename to doc/man3/OCSP_sendreq_new.pod index c7fdc9b1..65ba235c 100644 --- a/doc/crypto/OCSP_sendreq_new.pod +++ b/doc/man3/OCSP_sendreq_new.pod @@ -103,11 +103,11 @@ applications is not recommended. =head1 SEE ALSO -L, +L, L, L, L, -L, +L, L =head1 COPYRIGHT diff --git a/doc/crypto/OPENSSL_Applink.pod b/doc/man3/OPENSSL_Applink.pod similarity index 90% rename from doc/crypto/OPENSSL_Applink.pod rename to doc/man3/OPENSSL_Applink.pod index d3a461ba..85930786 100644 --- a/doc/crypto/OPENSSL_Applink.pod +++ b/doc/man3/OPENSSL_Applink.pod @@ -19,9 +19,13 @@ compiler of their choice and link it into the target application. The referred module is available as F, located alongside the public header files (only on the platforms where applicable). +=head1 RETURN VALUES + +Not available. + =head1 COPYRIGHT -Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OPENSSL_LH_COMPFUNC.pod b/doc/man3/OPENSSL_LH_COMPFUNC.pod similarity index 94% rename from doc/crypto/OPENSSL_LH_COMPFUNC.pod rename to doc/man3/OPENSSL_LH_COMPFUNC.pod index e760ae3b..06908a49 100644 --- a/doc/crypto/OPENSSL_LH_COMPFUNC.pod +++ b/doc/man3/OPENSSL_LH_COMPFUNC.pod @@ -2,7 +2,7 @@ =head1 NAME -DECLARE_LHASH_OF, +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, @@ -10,10 +10,10 @@ 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 -=for comment generic - =head1 SYNOPSIS +=for comment generic + #include DECLARE_LHASH_OF(TYPE); @@ -184,6 +184,13 @@ audit/verify and also opens the window of opportunity for stack corruption and other hard-to-find bugs. It also, apparently, violates ANSI-C. +The LHASH code is not thread safe. All updating operations must be +performed under a write lock. All retrieve operations should be performed +under a read lock, I 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 +L, 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() @@ -220,7 +227,7 @@ lh_TYPE_insert() returns B both for success and error. =head1 SEE ALSO -L +L =head1 HISTORY @@ -229,7 +236,7 @@ type checking. =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OPENSSL_LH_stats.pod b/doc/man3/OPENSSL_LH_stats.pod similarity index 86% rename from doc/crypto/OPENSSL_LH_stats.pod rename to doc/man3/OPENSSL_LH_stats.pod index c454a47e..231485ad 100644 --- a/doc/crypto/OPENSSL_LH_stats.pod +++ b/doc/man3/OPENSSL_LH_stats.pod @@ -21,9 +21,7 @@ OPENSSL_LH_node_stats_bio, OPENSSL_LH_node_usage_stats_bio - LHASH statistics =head1 DESCRIPTION The B structure records statistics about most aspects of -accessing the hash table. This is mostly a legacy of Eric Young -writing this library for the reasons of implementing what looked like -a nice algorithm rather than for a particular software product. +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 @@ -48,13 +46,19 @@ are the same as the above, except that the output goes to a B. These functions do not return values. +=head1 NOTE + +These calls should be made under a read lock. Refer to +L for more details about the locks required +when using the LHASH data structure. + =head1 SEE ALSO -L, L +L, L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OPENSSL_VERSION_NUMBER.pod b/doc/man3/OPENSSL_VERSION_NUMBER.pod similarity index 95% rename from doc/crypto/OPENSSL_VERSION_NUMBER.pod rename to doc/man3/OPENSSL_VERSION_NUMBER.pod index f50faec7..d5842c0e 100644 --- a/doc/crypto/OPENSSL_VERSION_NUMBER.pod +++ b/doc/man3/OPENSSL_VERSION_NUMBER.pod @@ -91,13 +91,15 @@ if available or "ENGINESDIR: N/A" otherwise. For an unknown B, the text "not available" is returned. -=head1 RETURN VALUE +=head1 RETURN VALUES -The version number. +OpenSSL_version_num() returns the version number. + +OpenSSL_version() returns requested version strings. =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/crypto/OPENSSL_config.pod b/doc/man3/OPENSSL_config.pod similarity index 99% rename from doc/crypto/OPENSSL_config.pod rename to doc/man3/OPENSSL_config.pod index eae634a8..e70fcd54 100644 --- a/doc/crypto/OPENSSL_config.pod +++ b/doc/man3/OPENSSL_config.pod @@ -54,7 +54,7 @@ Neither OPENSSL_config() nor OPENSSL_no_config() return a value. =head1 SEE ALSO -L, +L, L =head1 HISTORY diff --git a/doc/man3/OPENSSL_fork_prepare.pod b/doc/man3/OPENSSL_fork_prepare.pod new file mode 100644 index 00000000..eda83603 --- /dev/null +++ b/doc/man3/OPENSSL_fork_prepare.pod @@ -0,0 +1,63 @@ +=pod + +=head1 NAME + +OPENSSL_fork_prepare, +OPENSSL_fork_parent, +OPENSSL_fork_child +- OpenSSL fork handlers + +=head1 SYNOPSIS + + #include + + void OPENSSL_fork_prepare(void); + void OPENSSL_fork_parent(void); + void OPENSSL_fork_child(void); + +=head1 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 pthreads_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. + +L will register these functions with the appropriate +hander, when the B flag is used. For other +applications, these functions can be called directly. They should be used +according to the calling sequence described by the pthreads_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(). + +=head1 RETURN VALUES + +OPENSSL_fork_prepare(), OPENSSL_fork_parent() and OPENSSL_fork_child() do not +return values. + +=head1 SEE ALSO + +L + +=head1 HISTORY + +These functions were added in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/OPENSSL_ia32cap.pod b/doc/man3/OPENSSL_ia32cap.pod similarity index 81% rename from doc/crypto/OPENSSL_ia32cap.pod rename to doc/man3/OPENSSL_ia32cap.pod index b0ab0ce5..93ee30ae 100644 --- a/doc/crypto/OPENSSL_ia32cap.pod +++ b/doc/man3/OPENSSL_ia32cap.pod @@ -101,12 +101,19 @@ and RORX; =item bit #64+19 denoting availability of ADCX and ADOX instructions; +=item bit #64+21 denoting availability of VPMADD52[LH]UQ instructions, +a.k.a. AVX512IFMA extension; + =item bit #64+29 denoting availability of SHA extension; =item bit #64+30 denoting availability of AVX512BW extension; =item bit #64+31 denoting availability of AVX512VL extension; +=item bit #64+41 denoting availability of VAES extension; + +=item bit #64+42 denoting availability of VPCLMULQDQ extension; + =back To control this extended capability word use ':' as delimiter when @@ -124,13 +131,33 @@ requirements are summarized in below table: ------------+--------+--------+-------- AVX | 2.19 | 2.09 | 3.0 AVX2 | 2.22 | 2.10 | 3.1 - AVX512 | 2.25 | 2.11.8 | 3.6 + 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 | n/a | n/a | -B is a macro returning the first word of the vector. +=head1 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. + +=head1 RETURN VALUES + +Not available. =head1 COPYRIGHT -Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OPENSSL_init_crypto.pod b/doc/man3/OPENSSL_init_crypto.pod similarity index 95% rename from doc/crypto/OPENSSL_init_crypto.pod rename to doc/man3/OPENSSL_init_crypto.pod index f0b3c8aa..ce7497e1 100644 --- a/doc/crypto/OPENSSL_init_crypto.pod +++ b/doc/man3/OPENSSL_init_crypto.pod @@ -2,7 +2,7 @@ =head1 NAME -OPENSSL_init_new, OPENSSL_INIT_set_config_appname, OPENSSL_INIT_free, +OPENSSL_INIT_new, OPENSSL_INIT_set_config_appname, OPENSSL_INIT_free, OPENSSL_init_crypto, OPENSSL_cleanup, OPENSSL_atexit, OPENSSL_thread_stop - OpenSSL initialisation and deinitialisation functions @@ -16,7 +16,7 @@ initialisation and deinitialisation functions int OPENSSL_atexit(void (*handler)(void)); void OPENSSL_thread_stop(void); - OPENSSL_INIT_SETTINGS *OPENSSL_init_new(void); + OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *init, const char* name); void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *init); @@ -96,7 +96,7 @@ B will be ignored. With this option an OpenSSL configuration file will be automatically loaded and used by calling OPENSSL_config(). This is not a default option. -See the description of OPENSSL_init_new(), below. +See the description of OPENSSL_INIT_new(), below. =item OPENSSL_INIT_NO_LOAD_CONFIG @@ -150,6 +150,11 @@ With this option the library will automatically load and initialise all the built in engines listed above with the exception of the openssl and dasync engines. This not a default option. +=item OPENSSL_INIT_ATFORK + +With this option the library will register its fork handlers. +See OPENSSL_fork_prepare(3) for details. + =back Multiple options may be combined together in a single call to @@ -192,7 +197,7 @@ described in the NOTES section below. The B flag will load a default configuration file. To specify a different file, an B must be created and used. The routines -OPENSSL_init_new() and OPENSSL_INIT_set_config_appname() can be used to +OPENSSL_INIT_new() and OPENSSL_INIT_set_config_appname() can be used to allocate the object and set the application name, and then the object can be released with OPENSSL_INIT_free() when done. @@ -230,7 +235,7 @@ L =head1 HISTORY The OPENSSL_init_crypto(), OPENSSL_cleanup(), OPENSSL_atexit(), -OPENSSL_thread_stop(), OPENSSL_init_new(), OPENSSL_INIT_set_config_appname() +OPENSSL_thread_stop(), OPENSSL_INIT_new(), OPENSSL_INIT_set_config_appname() and OPENSSL_INIT_free() functions were added in OpenSSL 1.1.0. =head1 COPYRIGHT diff --git a/doc/ssl/OPENSSL_init_ssl.pod b/doc/man3/OPENSSL_init_ssl.pod similarity index 100% rename from doc/ssl/OPENSSL_init_ssl.pod rename to doc/man3/OPENSSL_init_ssl.pod diff --git a/doc/crypto/OPENSSL_instrument_bus.pod b/doc/man3/OPENSSL_instrument_bus.pod similarity index 92% rename from doc/crypto/OPENSSL_instrument_bus.pod rename to doc/man3/OPENSSL_instrument_bus.pod index 14072610..744153ec 100644 --- a/doc/crypto/OPENSSL_instrument_bus.pod +++ b/doc/man3/OPENSSL_instrument_bus.pod @@ -16,7 +16,7 @@ OPENSSL_instrument_bus, OPENSSL_instrument_bus2 - instrument references to memor 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 entropy for random number generator. In order to make it +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 B elements in atomic or interlocked manner, which should contribute additional noise on @@ -32,7 +32,7 @@ periods when probe values appeared deterministic. The subroutine performs at most B probes in attempt to fill the B, with B value of 0 meaning "as many as it takes." -=head1 RETURN VALUE +=head1 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 @@ -43,7 +43,7 @@ Otherwise number of recorded values is returned. =head1 COPYRIGHT -Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OPENSSL_load_builtin_modules.pod b/doc/man3/OPENSSL_load_builtin_modules.pod similarity index 90% rename from doc/crypto/OPENSSL_load_builtin_modules.pod rename to doc/man3/OPENSSL_load_builtin_modules.pod index 112718a6..bf0dc413 100644 --- a/doc/crypto/OPENSSL_load_builtin_modules.pod +++ b/doc/man3/OPENSSL_load_builtin_modules.pod @@ -10,7 +10,7 @@ OPENSSL_load_builtin_modules, ASN1_add_oid_module, ENGINE_add_conf_module - add void OPENSSL_load_builtin_modules(void); void ASN1_add_oid_module(void); - ENGINE_add_conf_module(); + void ENGINE_add_conf_module(void); =head1 DESCRIPTION @@ -36,17 +36,17 @@ configuration modules instead of adding modules selectively: otherwise functionality may be missing from the application if an when new modules are added. -=head1 RETURN VALUE +=head1 RETURN VALUES None of the functions return a value. =head1 SEE ALSO -L, L +L, L =head1 COPYRIGHT -Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/OPENSSL_malloc.pod b/doc/man3/OPENSSL_malloc.pod similarity index 78% rename from doc/crypto/OPENSSL_malloc.pod rename to doc/man3/OPENSSL_malloc.pod index 2104f431..2d48ae2e 100644 --- a/doc/crypto/OPENSSL_malloc.pod +++ b/doc/man3/OPENSSL_malloc.pod @@ -14,8 +14,12 @@ 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 - Memory allocation functions +CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp, CRYPTO_mem_leaks_cb, +OPENSSL_MALLOC_FAILURES, +OPENSSL_MALLOC_FD +- Memory allocation functions =head1 SYNOPSIS @@ -46,7 +50,8 @@ CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp - Memory allocation functions 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_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( @@ -58,8 +63,13 @@ CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp - Memory allocation functions 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) @@ -70,6 +80,8 @@ CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp - Memory allocation functions void CRYPTO_mem_leaks(BIO *b); void CRYPTO_mem_leaks_fp(FILE *fp); + void CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), + void *u); =head1 DESCRIPTION @@ -139,7 +151,6 @@ 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 B argument of the B. @@ -160,6 +171,45 @@ CRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it to the specified BIO B or FILE B. 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 B as the callback +parameters. + +If the library is built with the C option, then one +function, CRYPTO_get_alloc_counts(), and two additional environment +variables, B and B, +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 B, B, and B, +respectively. If a pointer is NULL, then the corresponding count is not stored. + +The variable +B 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, +C<100;@25> or C<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 B 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$$ + + =head1 RETURN VALUES OPENSSL_malloc_init(), OPENSSL_free(), OPENSSL_clear_free() diff --git a/doc/crypto/OPENSSL_secure_malloc.pod b/doc/man3/OPENSSL_secure_malloc.pod similarity index 91% rename from doc/crypto/OPENSSL_secure_malloc.pod rename to doc/man3/OPENSSL_secure_malloc.pod index 3f27d76d..5a01c824 100644 --- a/doc/crypto/OPENSSL_secure_malloc.pod +++ b/doc/man3/OPENSSL_secure_malloc.pod @@ -5,9 +5,9 @@ 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, -OPENSSL_secure_clear_free, CRYPTO_secure_free, CRYPTO_secure_clear_free, -OPENSSL_secure_actual_size, OPENSSL_secure_allocated, CRYPTO_secure_used -- secure heap storage +CRYPTO_secure_free, OPENSSL_secure_clear_free, +CRYPTO_secure_clear_free, OPENSSL_secure_actual_size, +CRYPTO_secure_used - secure heap storage =head1 SYNOPSIS @@ -32,7 +32,6 @@ OPENSSL_secure_actual_size, OPENSSL_secure_allocated, CRYPTO_secure_used void CRYPTO_secure_clear_free(void *ptr, size_t num, const char *, int); size_t OPENSSL_secure_actual_size(const void *ptr); - int OPENSSL_secure_allocated(const void *ptr); size_t CRYPTO_secure_used(); @@ -81,8 +80,12 @@ It exists for consistency with OPENSSL_secure_malloc() , and is a macro that expands to CRYPTO_secure_free() and adds the C<__FILE__> and C<__LINE__> parameters.. -OPENSSL_secure_allocated() tells whether or not a pointer is within -the secure heap. +OPENSSL_secure_clear_free() is similar to OPENSSL_secure_free() except +that it has an additional C 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. diff --git a/doc/man3/OSSL_STORE_INFO.pod b/doc/man3/OSSL_STORE_INFO.pod new file mode 100644 index 00000000..20d41ac5 --- /dev/null +++ b/doc/man3/OSSL_STORE_INFO.pod @@ -0,0 +1,204 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +These functions are primarily useful for applications to retrieve +supported objects from B objects and for scheme specific +loaders to create B holders. + +=head2 Types + +B 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 B 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 B has been freed. +The object returned by STORE_INFO_get1_TYPE() must be freed separately +by the caller. +See L for more information on the types that are +supported. + +=head2 Functions + +OSSL_STORE_INFO_get_type() takes a B 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 +B 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 +B 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 B 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 B +object to hold the given input object. +Additionally, for B` 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. + +=head1 SUPPORTED OBJECTS + +Currently supported object types are: + +=over 4 + +=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 URI. +For example, the path in URI C could include a file +named C, and in that case, the returned B +object would have the URI C, 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 C URIs that are used without the explicit scheme, the +returned name will be the path of each object, so if C was +given and that path has the file C, the name +C 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. + +=item OSSL_STORE_INFO_PARAMS + +Key parameters. + +=item OSSL_STORE_INFO_PKEY + +A private/public key of some sort. + +=item OSSL_STORE_INFO_CERT + +An X.509 certificate. + +=item OSSL_STORE_INFO_CRL + +A X.509 certificate revocation list. + +=back + +=head1 RETURN VALUES + +OSSL_STORE_INFO_get_type() returns the STORE type number of the given +B. +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 B 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 B +pointer on success, or B on failure. + +OSSL_STORE_INFO_set0_NAME_description() returns 1 on success, or 0 on +failure. + +=head1 SEE ALSO + +L, L, L + +=head1 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 to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/OSSL_STORE_LOADER.pod b/doc/man3/OSSL_STORE_LOADER.pod new file mode 100644 index 00000000..e6e520ec --- /dev/null +++ b/doc/man3/OSSL_STORE_LOADER.pod @@ -0,0 +1,264 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +These functions help applications and engines to create loaders for +schemes they support. + +=head2 Types + +B 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. + +B is a type template, to be defined by each loader +using B. + +B, B, B, +B, B, B, +and B +are the function pointer types used within a STORE loader. +The functions pointed at define the functionality of the given loader. + +=over 4 + +=item B + +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 B 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 privata data store (B, see +above), and to return it. +If something goes wrong, this function is expected to return NULL. + +=item B + +This function takes a B pointer, a command number +B and a B B and is used to manipulate loader +specific parameters. + +=begin comment + +Globally known command numbers are documented in L, +along with what B are expected with each of them. + +=end comment + +Loader specific command numbers must begin at B. +Any number below that is reserved for future globally known command +numbers. + +This function is expected to return 1 on success, 0 on error. + +=item B + +This function takes a B pointer and a B +identity B, and is used to tell the loader what object type is +expected. +B may be zero to signify that no specific object type is expected. + +This function is expected to return 1 on success, 0 on error. + +=item B + +This function takes a B pointer and a +B search criterion, and is used to tell the loader what +to search for. + +When called with the loader context being B, 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 B, this +function is expected to return 1 on success, 0 on error. + +=item B + +This function takes a B pointer and a B +with associated data. +It's expected to load the next available data, mold it into a data +structure that can be wrapped in a B using one of the +L functions. +If no more data is available or an error occurs, this function is +expected to return NULL. +The B and B functions must indicate if +it was in fact the end of data or if an error occurred. + +Note that this function retrieves I data item only. + +=item B + +This function takes a B 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. + +=item B + +This function takes a B pointer and is expected to +return 1 to indicate that an error occured in a previous call to the +B function. +It is otherwise expected to return 0. + +=item B + +This function takes a B pointer and is expected to +close or shut down what needs to be closed, and finally free the +contents of the B pointer. +It returns 1 on success and 0 on error. + +=back + +=head2 Functions + +OSSL_STORE_LOADER_new() creates a new B. +It takes an B B and a string B. +B must I be set. +Both B and B 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 B. +OSSL_STORE_LOADER_get0_scheme() returns the scheme of the B. + +OSSL_STORE_LOADER_set_open() sets the opener function for the +B. + +OSSL_STORE_LOADER_set_ctrl() sets the control function for the +B. + +OSSL_STORE_LOADER_set_expect() sets the expect function for the +B. + +OSSL_STORE_LOADER_set_load() sets the loader function for the +B. + +OSSL_STORE_LOADER_set_eof() sets the end of file checker function for the +B. + +OSSL_STORE_LOADER_set_close() sets the closing function for the +B. + +OSSL_STORE_LOADER_free() frees the given B. + +OSSL_STORE_register_loader() register the given B 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 +B. + +=head1 NOTES + +The B scheme has built in support. + +=head1 RETURN VALUES + +The functions with the types B, B, +B, +B, B and B 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 B on success, +or B 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 B on failure. + +=head1 SEE ALSO + +L, L + +=head1 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 to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/OSSL_STORE_SEARCH.pod b/doc/man3/OSSL_STORE_SEARCH.pod new file mode 100644 index 00000000..411664d4 --- /dev/null +++ b/doc/man3/OSSL_STORE_SEARCH.pod @@ -0,0 +1,193 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +These functions are use 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. + +=head2 Types + +B 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 B 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. + +=head2 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 B 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 +B. + +OSSL_STORE_SEARCH_free() is used to free the B. + +=head2 Loader Functions + +OSSL_STORE_SEARCH_get_type() returns the criterion type for the given +B. + +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 B, as +available for each type. +For more information, see L below. + +=head1 SUPPORTED CRITERION TYPES + +Currently supported criterion types are: + +=over 4 + +=item OSSL_STORE_SEARCH_BY_NAME + +This criterion supports a search by exact match of subject name. +The subject name itself is a B 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(). + +=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 B pointer, and the serial number is +a B 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(). + +=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 (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 retreived with OSSL_STORE_SEARCH_get0_digest(). + +=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 OSSL_STORE_SEARCH_by_alias() +and the actual alias is retrieved with OSSL_STORE_SEARCH_get0_string(). + +=back + +=head1 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 B pointer on success, or B on failure. + +OSSL_STORE_SEARCH_get_type() returns the criterion type of the given +B. +There is no error value. + +OSSL_STORE_SEARCH_get0_name() returns a B pointer on success, +or B when the given B was of a different type. + +OSSL_STORE_SEARCH_get0_serial() returns a B pointer on success, +or B when the given B was of a different type. + +OSSL_STORE_SEARCH_get0_bytes() returns a B pointer and +sets B<*length> to the strings length on success, or B when the given +B was of a different type. + +OSSL_STORE_SEARCH_get0_string() returns a B pointer on success, +or B when the given B was of a different type. + +OSSL_STORE_SEARCH_get0_digest() returns a B pointer. +B is a valid value and means that the store loader default will +be used when applicable. + +=head1 SEE ALSO + +L, L, L + +=head1 HISTORY + +B, +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 to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/OSSL_STORE_expect.pod b/doc/man3/OSSL_STORE_expect.pod new file mode 100644 index 00000000..ab0e8784 --- /dev/null +++ b/doc/man3/OSSL_STORE_expect.pod @@ -0,0 +1,79 @@ +=pod + +=head1 NAME + +OSSL_STORE_expect, +OSSL_STORE_supports_search, +OSSL_STORE_find +- Specify what object type is expected + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +OSSL_STORE_expect() helps applications filter what OSSL_STORE_load() returns +by specifying a B type. +For example, if C contains several different objects +and only the certificates are interesting, the application can simply say +that it expects the type B. +All known object types (see L) +except for B 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 L for information on the +supported search criterion types. + +OSSL_STORE_expect() and OSSL_STORE_find I be called before the first +OSSL_STORE_load() of a given session, or they will fail. + +=head1 NOTES + +If a more elaborate filter is required by the application, a better choice +would be to use a post-processing function. +See L 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. + +=head1 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. + +=head1 SEE ALSO + +L, L, L, +L + +=head1 HISTORY + +OSSL_STORE_expect(), OSSL_STORE_supports_search() and OSSL_STORE_find() +were added to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/OSSL_STORE_open.pod b/doc/man3/OSSL_STORE_open.pod new file mode 100644 index 00000000..3a05a880 --- /dev/null +++ b/doc/man3/OSSL_STORE_open.pod @@ -0,0 +1,152 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +These functions help the application to fetch supported objects (see +L for information on which those are) +from a given URI (see L 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 B, which is further +described in L. + +=head2 Types + +B 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. + +=head2 Functions + +OSSL_STORE_open() takes a uri or path B, password UI method +B with associated data B, and post processing +callback B with associated data B, +opens a channel to the data located at that URI and returns a +B with all necessary internal information. +The given B and B will be reused by all +functions that use B when interaction is needed. +The given B and B will be reused by +OSSL_STORE_load() to manipulate or drop the value to be returned. +The B function drops values by returning B, which +will cause OSSL_STORE_load() to start its process over with loading +the next object, until B returns something other than +B, or the end of data is reached as indicated by OSSL_STORE_eof(). + +OSSL_STORE_ctrl() takes a B, and command number B 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: + +=over 4 + +=item B + +Controls if the loader should attempt to use secure memory for any +allocated B and its contents. +This control expects one argument, a pointer to an B that is expected to +have the value 1 (yes) or 0 (no). +Any other value is an error. + +=back + +OSSL_STORE_load() takes a B, tries to load the next available +object and return it wrapped with B. + +OSSL_STORE_eof() takes a B and checks if we've reached the end +of data. + +OSSL_STORE_error() takes a B and checks if an error occured 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 B, closes the channel that was opened +by OSSL_STORE_open() and frees all other information that was stored in the +B, as well as the B itself. + +=head1 SUPPORTED SCHEMES + +The basic supported scheme is B. +Any other scheme can be added dynamically, using +OSSL_STORE_register_loader(). + +=head1 NOTES + +A string without a scheme prefix (that is, a non-URI string) is +implicitly interpreted as using the F 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 C. + +=head1 RETURN VALUES + +OSSL_STORE_open() returns a pointer to a B on success, or +B on failure. + +OSSL_STORE_load() returns a pointer to a B on success, or +B on error or when end of data is reached. +Use OSSL_STORE_error() and OSSL_STORE_eof() to determine the meaning of a +returned B. + +OSSL_STORE_eof() returns 1 if the end of data has been reached, otherwise +0. + +OSSL_STORE_error() returns 1 if an error occured in a OSSL_STORE_load() call, +otherwise 0. + +OSSL_STORE_ctrl() and OSSL_STORE_close() returns 1 on success, or 0 on failure. + +=head1 SEE ALSO + +L, L, L + +=head1 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 to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/OpenSSL_add_all_algorithms.pod b/doc/man3/OpenSSL_add_all_algorithms.pod new file mode 100644 index 00000000..0c086d12 --- /dev/null +++ b/doc/man3/OpenSSL_add_all_algorithms.pod @@ -0,0 +1,63 @@ +=pod + +=head1 NAME + +OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup - +add algorithms to internal table + +=head1 SYNOPSIS + + #include + +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 + +=head1 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. + +=head1 RETURN VALUES + +None of the functions return a value. + +=head1 SEE ALSO + +L, L, +L + +=head1 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. + +=head1 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 +L. + +=cut diff --git a/doc/man3/PEM_bytes_read_bio.pod b/doc/man3/PEM_bytes_read_bio.pod new file mode 100644 index 00000000..d16ccd8c --- /dev/null +++ b/doc/man3/PEM_bytes_read_bio.pod @@ -0,0 +1,81 @@ +=pod + +=head1 NAME + +PEM_bytes_read_bio, PEM_bytes_read_bio_secmem - read a PEM-encoded data structure from a BIO + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +PEM_bytes_read_bio() reads PEM-formatted (RFC 1421) data from the BIO +I for the data type given in I (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 I and rock I 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 I<*pnm> if I is +non-NULL. The caller must free the storage pointed to by I<*pnm>. + +The returned data is the DER-encoded form of the requested type, in +I<*pdata> with length I<*plen>. The caller must free the storage pointed +to by I<*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 I<*pdata> and I<*pnm>. Accordingly, the caller must use +OPENSSL_secure_free() to free that storage. + +=head1 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 I. 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. + +=head1 RETURN VALUES + +PEM_bytes_read_bio() and PEM_bytes_read_bio_secmem() return 1 for success or +0 for failure. + +=head1 SEE ALSO + +L, +L + +=head1 HISTORY + +PEM_bytes_read_bio_secmem() was introduced in OpenSSL 1.1.1 + +=head1 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 +L. + +=cut diff --git a/doc/crypto/PEM_read.pod b/doc/man3/PEM_read.pod similarity index 100% rename from doc/crypto/PEM_read.pod rename to doc/man3/PEM_read.pod diff --git a/doc/crypto/PEM_read_CMS.pod b/doc/man3/PEM_read_CMS.pod similarity index 100% rename from doc/crypto/PEM_read_CMS.pod rename to doc/man3/PEM_read_CMS.pod index 649c8089..65a114d6 100644 --- a/doc/crypto/PEM_read_CMS.pod +++ b/doc/man3/PEM_read_CMS.pod @@ -38,10 +38,10 @@ PEM_write_SSL_SESSION, PEM_write_bio_SSL_SESSION - PEM object encoding routines -=for comment generic - =head1 SYNOPSIS +=for comment generic + #include DECLARE_PEM_rw(name, TYPE) diff --git a/doc/crypto/PEM_read_bio_PrivateKey.pod b/doc/man3/PEM_read_bio_PrivateKey.pod similarity index 96% rename from doc/crypto/PEM_read_bio_PrivateKey.pod rename to doc/man3/PEM_read_bio_PrivateKey.pod index 6b3006ef..4ff5b2d3 100644 --- a/doc/crypto/PEM_read_bio_PrivateKey.pod +++ b/doc/man3/PEM_read_bio_PrivateKey.pod @@ -161,17 +161,18 @@ For more details about the meaning of arguments see the B section. Each operation has four functions associated with it. For -clarity the term "B functions" will be used to collectively -refer to the PEM_read_bio_foobar(), PEM_read_foobar(), -PEM_write_bio_foobar() and PEM_write_foobar() functions. +brevity the term "B 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 B 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 legacy -"traditional" format. +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 @@ -305,44 +306,41 @@ 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) { + if (x == NULL) /* Error */ - } Alternative method: X509 *x = NULL; - if (!PEM_read_bio_X509(bp, &x, 0, NULL)) { + + if (!PEM_read_bio_X509(bp, &x, 0, NULL)) /* Error */ - } Write a certificate to a BIO: - if (!PEM_write_bio_X509(bp, x)) { + 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)) { + 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")) { + 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) { + if (key == NULL) /* Error */ - } Skeleton pass phrase callback: @@ -382,6 +380,7 @@ 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 B @@ -432,9 +431,8 @@ The pseudo code to derive the key would look similar to: memcpy(iv, HexToBin("3F17F5316E2BAC89"), niv); rc = EVP_BytesToKey(cipher, md, iv /*salt*/, pword, plen, 1, key, NULL /*iv*/); - if (rc != nkey) { + if (rc != nkey) /* Error */ - } /* On success, use key and iv to initialize the cipher */ @@ -452,7 +450,7 @@ where B already contains a valid certificate, may not work, whereas: is guaranteed to work. -=head1 RETURN CODES +=head1 RETURN VALUES The read routines return either a pointer to the structure read or NULL if an error occurred. @@ -462,7 +460,7 @@ The write routines return 1 for success or 0 for failure. =head1 HISTORY The old Netscape certificate sequences were no longer documented -in OpenSSL 1.1; applications should use the PKCS7 standard instead +in OpenSSL 1.1.0; applications should use the PKCS7 standard instead as they will be formally deprecated in a future releases. =head1 SEE ALSO @@ -471,7 +469,7 @@ L, L =head1 COPYRIGHT -Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/PEM_read_bio_ex.pod b/doc/man3/PEM_read_bio_ex.pod new file mode 100644 index 00000000..e171bff2 --- /dev/null +++ b/doc/man3/PEM_read_bio_ex.pod @@ -0,0 +1,70 @@ +=pod + +=head1 NAME + +PEM_read_bio_ex, PEM_FLAG_SECURE, PEM_FLAG_EAY_COMPATIBLE, +PEM_FLAG_ONLY_B64 - read PEM format files with custom processing + +=head1 SYNOPSIS + + #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); + +=head1 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. + +=head1 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. + +=head1 RETURN VALUES + +PEM_read_bio_ex() returns 1 for success or 0 for failure. + +=head1 SEE ALSO + +L + +=head1 HISTORY + +PEM_read_bio_ex() was added in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/PEM_write_bio_CMS_stream.pod b/doc/man3/PEM_write_bio_CMS_stream.pod similarity index 100% rename from doc/crypto/PEM_write_bio_CMS_stream.pod rename to doc/man3/PEM_write_bio_CMS_stream.pod diff --git a/doc/crypto/PEM_write_bio_PKCS7_stream.pod b/doc/man3/PEM_write_bio_PKCS7_stream.pod similarity index 100% rename from doc/crypto/PEM_write_bio_PKCS7_stream.pod rename to doc/man3/PEM_write_bio_PKCS7_stream.pod diff --git a/doc/crypto/PKCS12_create.pod b/doc/man3/PKCS12_create.pod similarity index 94% rename from doc/crypto/PKCS12_create.pod rename to doc/man3/PKCS12_create.pod index 0a43b96c..37b53be8 100644 --- a/doc/crypto/PKCS12_create.pod +++ b/doc/man3/PKCS12_create.pod @@ -60,13 +60,17 @@ should be used. B can be set to -1 and the MAC will then be omitted entirely. +=head1 RETURN VALUES + +PKCS12_create() returns a valid B structure or NULL if an error occurred. + =head1 SEE ALSO L =head1 COPYRIGHT -Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/PKCS12_newpass.pod b/doc/man3/PKCS12_newpass.pod new file mode 100644 index 00000000..58207f5e --- /dev/null +++ b/doc/man3/PKCS12_newpass.pod @@ -0,0 +1,116 @@ +=pod + +=head1 NAME + +PKCS12_newpass - change the password of a PKCS12 structure + +=head1 SYNOPSIS + + #include + + int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +=head1 DESCRIPTION + +PKCS12_newpass() changes the password of a PKCS12 structure. + +B is a pointer to a PKCS12 structure. B is the existing password +and B is the new password. + +=head1 NOTES + +Each of B and B 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 +L, for example. + +=head1 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(). + +=head1 EXAMPLE + +This example loads a PKCS#12 file, changes its password and writes out +the result to a new file. + + #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\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; + } + + +=head1 NOTES + +If the PKCS#12 structure does not have a password, then you must use the empty +string "" for B. Using NULL for B will result in a +PKCS12_newpass() failure. + +If the wrong password is used for B 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. + +=head1 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. + +=head1 SEE ALSO + +L, L + +=head1 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 +L. + +=cut diff --git a/doc/crypto/PKCS12_parse.pod b/doc/man3/PKCS12_parse.pod similarity index 100% rename from doc/crypto/PKCS12_parse.pod rename to doc/man3/PKCS12_parse.pod diff --git a/doc/crypto/PKCS5_PBKDF2_HMAC.pod b/doc/man3/PKCS5_PBKDF2_HMAC.pod similarity index 91% rename from doc/crypto/PKCS5_PBKDF2_HMAC.pod rename to doc/man3/PKCS5_PBKDF2_HMAC.pod index 5cc2caa5..e5d1689e 100644 --- a/doc/crypto/PKCS5_PBKDF2_HMAC.pod +++ b/doc/man3/PKCS5_PBKDF2_HMAC.pod @@ -13,9 +13,9 @@ PKCS5_PBKDF2_HMAC, PKCS5_PBKDF2_HMAC_SHA1 - password based derivation routines w 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); + int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + int keylen, unsigned char *out); =head1 DESCRIPTION @@ -58,7 +58,7 @@ PKCS5_PBKDF2_HMAC() and PBKCS5_PBKDF2_HMAC_SHA1() return 1 on success or 0 on er =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/crypto/PKCS7_decrypt.pod b/doc/man3/PKCS7_decrypt.pod similarity index 100% rename from doc/crypto/PKCS7_decrypt.pod rename to doc/man3/PKCS7_decrypt.pod diff --git a/doc/crypto/PKCS7_encrypt.pod b/doc/man3/PKCS7_encrypt.pod similarity index 98% rename from doc/crypto/PKCS7_encrypt.pod rename to doc/man3/PKCS7_encrypt.pod index 4e1afc91..9895a1f7 100644 --- a/doc/crypto/PKCS7_encrypt.pod +++ b/doc/man3/PKCS7_encrypt.pod @@ -8,7 +8,8 @@ PKCS7_encrypt - create a PKCS#7 envelopedData structure #include - PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, int flags); + PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); =head1 DESCRIPTION diff --git a/doc/crypto/PKCS7_sign.pod b/doc/man3/PKCS7_sign.pod similarity index 98% rename from doc/crypto/PKCS7_sign.pod rename to doc/man3/PKCS7_sign.pod index f319f664..c1df5f19 100644 --- a/doc/crypto/PKCS7_sign.pod +++ b/doc/man3/PKCS7_sign.pod @@ -8,7 +8,8 @@ PKCS7_sign - create a PKCS#7 signedData structure #include - PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags); + PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); =head1 DESCRIPTION @@ -65,7 +66,6 @@ way data can be signed in a single pass. If the B flag is set a partial B structure is output to which additional signers and capabilities can be added before finalization. - =head1 NOTES If the flag B is set the returned B structure is B diff --git a/doc/crypto/PKCS7_sign_add_signer.pod b/doc/man3/PKCS7_sign_add_signer.pod similarity index 97% rename from doc/crypto/PKCS7_sign_add_signer.pod rename to doc/man3/PKCS7_sign_add_signer.pod index 88fef771..2bc6c40b 100644 --- a/doc/crypto/PKCS7_sign_add_signer.pod +++ b/doc/man3/PKCS7_sign_add_signer.pod @@ -8,7 +8,8 @@ PKCS7_sign_add_signer - add a signer PKCS7 signed data structure #include - PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, EVP_PKEY *pkey, const EVP_MD *md, int flags); + PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, X509 *signcert, + EVP_PKEY *pkey, const EVP_MD *md, int flags); =head1 DESCRIPTION diff --git a/doc/crypto/PKCS7_verify.pod b/doc/man3/PKCS7_verify.pod similarity index 98% rename from doc/crypto/PKCS7_verify.pod rename to doc/man3/PKCS7_verify.pod index c34808ec..ebcdde07 100644 --- a/doc/crypto/PKCS7_verify.pod +++ b/doc/man3/PKCS7_verify.pod @@ -8,7 +8,8 @@ PKCS7_verify, PKCS7_get0_signers - verify a PKCS#7 signedData structure #include - int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, 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); diff --git a/doc/man3/RAND_add.pod b/doc/man3/RAND_add.pod new file mode 100644 index 00000000..62048e67 --- /dev/null +++ b/doc/man3/RAND_add.pod @@ -0,0 +1,157 @@ +=pod + +=head1 NAME + +RAND_add, RAND_poll, RAND_seed, RAND_status, RAND_event, RAND_screen +- add randomness to the PRNG or get its status + +=head1 SYNOPSIS + + #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); + +Deprecated: + + #if OPENSSL_API_COMPAT < 0x10100000L + int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam); + void RAND_screen(void); + #endif + +=head1 DESCRIPTION + +Random numbers are a vital part of cryptography, including key generation, +creating salts, etc., and 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. + +RAND_status() indicates whether or not the CSPRNG has been sufficiently +seeded. If not, functions such as RAND_bytes(3) will fail. + +RAND_poll() uses the system's capabilities to seed the CSPRNG using +random input obtained from polling various trusted entropy sources. +The default choice of the entropy source can be modified at build time +using the --with-rand-seed configure option, see also the B section. +A summary of the configure options can be displayed with the OpenSSL +L command. + +RAND_add() mixes the B bytes at B into the PRNG state. +The B argument is an estimate of how much randomness is +contained in +B, in bytes, and should be a number between zero and B. +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 B cannot be recovered from subsequent CSPRNG output. +This function will not normally be needed, as RAND_poll() should have been +configured to do the appropriate seeding for the local platform. +Applications that need to keep random state in an external file should +use L. + +RAND_seed() is equivalent to RAND_add() with B set to B. + +RAND_event() and RAND_screen() are equivalent to RAND_poll(). + +=head1 RETURN VALUES + +RAND_status() returns 1 if the CSPRNG 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. + +=head1 NOTES + +The new OpenSSL DRBG has some peculiarities which need to be taken +into account when it is selected as the default OpenSSL CSPRNG, i.e., +when RAND_get_rand_method() == RAND_OpenSSL(). +This applies in particular to the way reseeding is done by the DRBG: + +=over 2 + +=item * + +The DRBG seeds itself automatically, pulling random input from trusted +entropy sources. +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. + +=item * + +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. + +=back + +Automatic seeding can be disabled using the --with-rand-seed=none option. + +=head2 DRBG with automatic seeding enabled + +Calling RAND_poll() or RAND_add() is not necessary, because the DRBG +polls the entropy 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 B argument: + +=over 4 + +=item 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. + + +=item 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). +A reseeding requires 16 bytes (128 bits) of randomness. +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. + +=back + +=head2 DRBG with automatic seeding disabled (--with-rand-seed=none) + +Calling RAND_poll() will always fail. + +RAND_add() needs to be called for initial seeding and periodic reseeding. +At least 16 bytes (128 bits) of randomness have to be provided, otherwise +the (re-)seeding of the DRBG will fail. + +=head1 HISTORY + +RAND_event() and RAND_screen() were deprecated in OpenSSL 1.1.0 and should +not be used. + +=head1 SEE ALSO + +L, L, +L + +=head1 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 +L. + +=cut diff --git a/doc/man3/RAND_bytes.pod b/doc/man3/RAND_bytes.pod new file mode 100644 index 00000000..c3e6aef3 --- /dev/null +++ b/doc/man3/RAND_bytes.pod @@ -0,0 +1,56 @@ +=pod + +=head1 NAME + +RAND_bytes, RAND_priv_bytes, RAND_pseudo_bytes - generate random data + +=head1 SYNOPSIS + + #include + + 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 + +=head1 DESCRIPTION + +RAND_bytes() puts B cryptographically strong pseudo-random bytes +into B. An error occurs if the PRNG has not been seeded with +enough randomness to ensure an unpredictable byte sequence. + +RAND_priv_bytes() has the same semantics as RAND_bytes(). It is intended to +be used for generating long-term private keys. If using the default +RAND_METHOD, this function uses a separate instance of the PRNG so that +a compromise of the global generator will not affect such key generation. + +=head1 RETURN VALUES + +RAND_bytes() nad 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 L. + +=head1 HISTORY + +RAND_pseudo_bytes() was deprecated in OpenSSL 1.1.0; use RAND_bytes() instead. + +=head1 SEE ALSO + +L, L, +L + +=head1 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 +L. + +=cut diff --git a/doc/man3/RAND_cleanup.pod b/doc/man3/RAND_cleanup.pod new file mode 100644 index 00000000..03a0798f --- /dev/null +++ b/doc/man3/RAND_cleanup.pod @@ -0,0 +1,40 @@ +=pod + +=head1 NAME + +RAND_cleanup - erase the PRNG state + +=head1 SYNOPSIS + + #include + + #if OPENSSL_API_COMPAT < 0x10100000L + void RAND_cleanup(void) + #endif + +=head1 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 +L. + +=head1 RETURN VALUES + +RAND_cleanup() returns no value. + +=head1 HISTORY + +RAND_cleanup() was deprecated in OpenSSL 1.1.0; do not use it. +See L + +=head1 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 +L. + +=cut diff --git a/doc/man3/RAND_egd.pod b/doc/man3/RAND_egd.pod new file mode 100644 index 00000000..ebbaf303 --- /dev/null +++ b/doc/man3/RAND_egd.pod @@ -0,0 +1,59 @@ +=pod + +=head1 NAME + +RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes - query entropy gathering daemon + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +On older platforms without a good source of randomness such as C, +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 +L or L. + +RAND_egd_bytes() requests B bytes of randomness from an EGD at the +specified socket B, and passes the data it receives into RAND_add(). +RAND_egd() is equivalent to RAND_egd_bytes() with B set to 255. + +RAND_query_egd_bytes() requests B bytes of randomness from an EGD at +the specified socket B, where B must be less than 256. +If B is B, it is equivalent to RAND_egd_bytes(). +If B is not B, 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. + +=head1 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. + +=head1 SEE ALSO + +L, L + +=head1 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 +L. + +=cut diff --git a/doc/man3/RAND_load_file.pod b/doc/man3/RAND_load_file.pod new file mode 100644 index 00000000..2fe932fd --- /dev/null +++ b/doc/man3/RAND_load_file.pod @@ -0,0 +1,89 @@ +=pod + +=head1 NAME + +RAND_load_file, RAND_write_file, RAND_file_name - PRNG seed file + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +RAND_load_file() reads a number of bytes from file B and +adds them to the PRNG. If B is non-negative, +up to B are read; +if B 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 B should be adequately protected so that an +attacker cannot replace or examine the contents. + +RAND_write_file() writes a number of random bytes (currently 128) to +file B 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. B points to a buffer of size B in which to store the +filename. + +On all systems, if the environment variable B is set, its +value will be used as the seed file name. +Otherwise, the file is called C<.rnd>, found in platform dependent locations: + +=over 4 + +=item On Windows (in order of preference) + + %HOME%, %USERPROFILE%, %SYSTEMROOT%, C:\ + +=item On VMS + + SYS$LOGIN: + +=item On all other systems + + $HOME + +=back + +If C<$HOME> (on non-Windows and non-VMS system) is not set either, or +B is too small for the path name, an error occurs. + +=head1 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 B on success, and NULL on +error. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +A comment in the source since at least OpenSSL 1.0.2 said that +RAND_load_file() and RAND_write_file() were only intended for regular files, +and not really device special files such as C. This was +poorly enforced before OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/RAND_set_rand_method.pod b/doc/man3/RAND_set_rand_method.pod new file mode 100644 index 00000000..70c1b23c --- /dev/null +++ b/doc/man3/RAND_set_rand_method.pod @@ -0,0 +1,68 @@ +=pod + +=head1 NAME + +RAND_set_rand_method, RAND_get_rand_method, RAND_OpenSSL - select RAND method + +=head1 SYNOPSIS + + #include + + RAND_METHOD *RAND_OpenSSL(void); + + void RAND_set_rand_method(const RAND_METHOD *meth); + + const RAND_METHOD *RAND_get_rand_method(void); + +=head1 DESCRIPTION + +A B specifies the functions that OpenSSL uses for random number +generation. + +Initially, the default B is the OpenSSL internal implementation, +as returned by RAND_OpenSSL(). +This implementation ensures that the PRNG state is unique for each thread. + +If an B 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 B 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 B. + +=head1 THE RAND_METHOD STRUCTURE + + typedef struct rand_meth_st { + void (*seed)(const void *buf, int num); + int (*bytes)(unsigned char *buf, int num); + void (*cleanup)(void); + void (*add)(const void *buf, int num, int randomness); + 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. + +=head1 RETURN VALUES + +RAND_set_rand_method() returns no value. RAND_get_rand_method() and +RAND_OpenSSL() return pointers to the respective methods. + +=head1 SEE ALSO + +L, L + +=head1 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 +L. + +=cut diff --git a/doc/crypto/RC4_set_key.pod b/doc/man3/RC4_set_key.pod similarity index 100% rename from doc/crypto/RC4_set_key.pod rename to doc/man3/RC4_set_key.pod diff --git a/doc/crypto/RIPEMD160_Init.pod b/doc/man3/RIPEMD160_Init.pod similarity index 87% rename from doc/crypto/RIPEMD160_Init.pod rename to doc/man3/RIPEMD160_Init.pod index a372e32c..77ac4fbc 100644 --- a/doc/crypto/RIPEMD160_Init.pod +++ b/doc/man3/RIPEMD160_Init.pod @@ -10,11 +10,10 @@ RIPEMD-160 hash function #include unsigned char *RIPEMD160(const unsigned char *d, unsigned long n, - unsigned char *md); + unsigned char *md); int RIPEMD160_Init(RIPEMD160_CTX *c); - int RIPEMD160_Update(RIPEMD_CTX *c, const void *data, - unsigned long len); + int RIPEMD160_Update(RIPEMD_CTX *c, const void *data, unsigned long len); int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); =head1 DESCRIPTION @@ -54,7 +53,7 @@ functions directly. =head1 CONFORMING TO -ISO/IEC 10118-3 (draft) (??) +ISO/IEC 10118-3:2016 Dedicated Hash-Function 1 (RIPEMD-160). =head1 SEE ALSO @@ -62,7 +61,7 @@ L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/RSA_blinding_on.pod b/doc/man3/RSA_blinding_on.pod similarity index 100% rename from doc/crypto/RSA_blinding_on.pod rename to doc/man3/RSA_blinding_on.pod diff --git a/doc/crypto/RSA_check_key.pod b/doc/man3/RSA_check_key.pod similarity index 96% rename from doc/crypto/RSA_check_key.pod rename to doc/man3/RSA_check_key.pod index d8689f4a..8080b1a4 100644 --- a/doc/crypto/RSA_check_key.pod +++ b/doc/man3/RSA_check_key.pod @@ -33,7 +33,7 @@ manner as L. RSA_check_key() is equivalent to RSA_check_key_ex() with a NULL B. -=head1 RETURN VALUE +=head1 RETURN VALUES RSA_check_key_ex() and RSA_check_key() return 1 if B is a valid RSA key, and 0 otherwise. @@ -74,7 +74,7 @@ RSA_check_key_ex() appeared after OpenSSL 1.0.2. =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/RSA_generate_key.pod b/doc/man3/RSA_generate_key.pod new file mode 100644 index 00000000..fb3d86ca --- /dev/null +++ b/doc/man3/RSA_generate_key.pod @@ -0,0 +1,107 @@ +=pod + +=head1 NAME + +RSA_generate_key_ex, RSA_generate_key, +RSA_generate_multi_prime_key - generate RSA key pair + +=head1 SYNOPSIS + + #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); + +Deprecated: + + #if OPENSSL_API_COMPAT < 0x00908000L + RSA *RSA_generate_key(int num, unsigned long e, + void (*callback)(int, int, void *), void *cb_arg); + #endif + +=head1 DESCRIPTION + +RSA_generate_key_ex() generates a 2-prime RSA key pair and stores it in the +B structure provided in B. 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 B structure provided in B. The number of primes is given by +the B parameter. The pseudo-random number generator must be seeded prior +to calling RSA_generate_multi_prime_key(). + +The modulus size will be of length B, the number of primes to form the +modulus will be B, and the public exponent will be B. Key sizes +with B E 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 +B 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 B is not B, it +will be called as follows using the BN_GENCB_call() function +described on the L page. + +RSA_generate_prime() is similar to RSA_generate_prime_ex() but +expects an old-style callback function; see +L for information on the old-style callback. + +=over 2 + +=item * + +While a random prime number is generated, it is called as +described in L. + +=item * + +When the n-th randomly generated prime is rejected as not +suitable for the key, B is called. + +=item * + +When a random p has been found with p-1 relatively prime to B, +it is called as B. + +=back + +The process is then repeated for prime q and other primes (if any) +with B where B indicates the i-th prime. + +=head1 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 L. + +RSA_generate_key() returns a pointer to the RSA structure or +B if the key generation fails. + +=head1 BUGS + +B is used with two different meanings. + +=head1 SEE ALSO + +L, L, L + +=head1 HISTORY + +RSA_generate_key() was deprecated in OpenSSL 0.9.8; use +RSA_generate_key_ex() intsead. + +=head1 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 +L. + +=cut diff --git a/doc/man3/RSA_get0_key.pod b/doc/man3/RSA_get0_key.pod new file mode 100644 index 00000000..6e6576e7 --- /dev/null +++ b/doc/man3/RSA_get0_key.pod @@ -0,0 +1,155 @@ +=pod + +=head1 NAME + +RSA_set0_key, RSA_set0_factors, RSA_set0_crt_params, RSA_get0_key, +RSA_get0_factors, RSA_get0_crt_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 + +=head1 SYNOPSIS + + #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); + 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); + +=head1 DESCRIPTION + +An RSA object contains the components for the public and private key, +B, B, B, B

, B, B, B and B. B is +the modulus common to both public and private key, B is the public +exponent and B is the private exponent. B

, B, B, +B and B are the factors for the second representation of a +private key (see PKCS#1 section 3 Key Types), where B

and B are +the first and second factor of B and B, B and B +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, B, B +and B. B is the additional prime besides B

and B. B and +B are the exponent and coefficient for CRT calculations. + +The B, B and B parameters can be obtained by calling +RSA_get0_key(). If they have not been set yet, then B<*n>, B<*e> and +B<*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 B, B and B parameter values can be set by calling +RSA_set0_key() and passing the new values for B, B and B as +parameters to the function. The values B and B must be non-NULL +the first time this function is called on a given RSA object. The +value B 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 B

and B parameters can be obtained and +set with RSA_get0_factors() and RSA_set0_factors(), and the B, +B and B 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 B. RSA_set0_multi_prime_params() +sets a collect of multi-prime 'triplet' members (prime, exponent and coefficient) +into an RSA object. + +RSA_set_flags() sets the flags in the B 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 B 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 B. + +=head1 NOTES + +Values retrieved with RSA_get0_key() are owned by the RSA object used +in the call and may therefore I 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 B and assign the new set of triplets into it. + +=head1 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_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 B for multi-prime RSA and +B 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. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +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. + +=head1 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 +L. + +=cut diff --git a/doc/man3/RSA_meth_new.pod b/doc/man3/RSA_meth_new.pod new file mode 100644 index 00000000..fde1a41e --- /dev/null +++ b/doc/man3/RSA_meth_new.pod @@ -0,0 +1,262 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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(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)); + +=head1 DESCRIPTION + +The B 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 L +page for more information. + +RSA_meth_new() creates a new B structure. It should be +given a unique B and a set of B. The B should be a +NULL terminated string, which will be duplicated and stored in the +B object. It is the callers responsibility to free the +original string. The flags will be used during the construction of a +new B object based on this B. Any new B object +will have those flags set by default. + +RSA_meth_dup() creates a duplicate copy of the B object +passed as a parameter. This might be useful for creating a new +B based on an existing one, but with some differences. + +RSA_meth_free() destroys an B 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 B. 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. + + +=head1 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. + +=head1 SEE ALSO + +L, L, L, +L, L, L, +L + +=head1 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. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/RSA_new.pod b/doc/man3/RSA_new.pod similarity index 98% rename from doc/crypto/RSA_new.pod rename to doc/man3/RSA_new.pod index 33179207..d57fe826 100644 --- a/doc/crypto/RSA_new.pod +++ b/doc/man3/RSA_new.pod @@ -8,7 +8,7 @@ RSA_new, RSA_free - allocate and free RSA objects #include - RSA * RSA_new(void); + RSA *RSA_new(void); void RSA_free(RSA *rsa); diff --git a/doc/crypto/RSA_padding_add_PKCS1_type_1.pod b/doc/man3/RSA_padding_add_PKCS1_type_1.pod similarity index 82% rename from doc/crypto/RSA_padding_add_PKCS1_type_1.pod rename to doc/man3/RSA_padding_add_PKCS1_type_1.pod index 5b53eb9e..93911cac 100644 --- a/doc/crypto/RSA_padding_add_PKCS1_type_1.pod +++ b/doc/man3/RSA_padding_add_PKCS1_type_1.pod @@ -14,34 +14,35 @@ padding #include int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, - unsigned char *f, int fl); + unsigned char *f, int fl); int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, - unsigned char *f, int fl, int rsa_len); + unsigned char *f, int fl, int rsa_len); int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, - unsigned char *f, int fl); + unsigned char *f, int fl); int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, - unsigned char *f, int fl, int rsa_len); + unsigned char *f, int fl, int rsa_len); int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, - unsigned char *f, int fl, unsigned char *p, int pl); + unsigned char *f, int fl, unsigned char *p, int pl); int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, - unsigned char *f, int fl, int rsa_len, unsigned char *p, int pl); + unsigned char *f, int fl, int rsa_len, + unsigned char *p, int pl); int RSA_padding_add_SSLv23(unsigned char *to, int tlen, - unsigned char *f, int fl); + unsigned char *f, int fl); int RSA_padding_check_SSLv23(unsigned char *to, int tlen, - unsigned char *f, int fl, int rsa_len); + unsigned char *f, int fl, int rsa_len); int RSA_padding_add_none(unsigned char *to, int tlen, - unsigned char *f, int fl); + unsigned char *f, int fl); int RSA_padding_check_none(unsigned char *to, int tlen, - unsigned char *f, int fl, int rsa_len); + unsigned char *f, int fl, int rsa_len); =head1 DESCRIPTION diff --git a/doc/crypto/RSA_print.pod b/doc/man3/RSA_print.pod similarity index 100% rename from doc/crypto/RSA_print.pod rename to doc/man3/RSA_print.pod diff --git a/doc/crypto/RSA_private_encrypt.pod b/doc/man3/RSA_private_encrypt.pod similarity index 88% rename from doc/crypto/RSA_private_encrypt.pod rename to doc/man3/RSA_private_encrypt.pod index 1eb7a0ad..060a9000 100644 --- a/doc/crypto/RSA_private_encrypt.pod +++ b/doc/man3/RSA_private_encrypt.pod @@ -8,11 +8,11 @@ RSA_private_encrypt, RSA_public_decrypt - low level signature operations #include - int RSA_private_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); + int RSA_private_encrypt(int flen, 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_public_decrypt(int flen, unsigned char *from, + unsigned char *to, RSA *rsa, int padding); =head1 DESCRIPTION diff --git a/doc/crypto/RSA_public_encrypt.pod b/doc/man3/RSA_public_encrypt.pod similarity index 89% rename from doc/crypto/RSA_public_encrypt.pod rename to doc/man3/RSA_public_encrypt.pod index b1dd50d7..91c176e2 100644 --- a/doc/crypto/RSA_public_encrypt.pod +++ b/doc/man3/RSA_public_encrypt.pod @@ -8,11 +8,11 @@ RSA_public_encrypt, RSA_private_decrypt - RSA public key cryptography #include - int RSA_public_encrypt(int flen, const unsigned char *from, - unsigned char *to, RSA *rsa, int padding); + int RSA_public_encrypt(int flen, 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); + int RSA_private_decrypt(int flen, unsigned char *from, + unsigned char *to, RSA *rsa, int padding); =head1 DESCRIPTION @@ -80,7 +80,7 @@ SSL, PKCS #1 v2.0 =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/crypto/RSA_set_method.pod b/doc/man3/RSA_set_method.pod similarity index 78% rename from doc/crypto/RSA_set_method.pod rename to doc/man3/RSA_set_method.pod index 668ad7a1..4bb63962 100644 --- a/doc/crypto/RSA_set_method.pod +++ b/doc/man3/RSA_set_method.pod @@ -81,56 +81,56 @@ the default method is used. typedef struct rsa_meth_st { /* name of the implementation */ - const char *name; + const char *name; /* encrypt */ - int (*rsa_pub_enc)(int flen, unsigned char *from, - unsigned char *to, RSA *rsa, int padding); + 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); + 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); + 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); + 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 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); + 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); + int (*init)(RSA *rsa); /* called at RSA_free */ - int (*finish)(RSA *rsa); + int (*finish)(RSA *rsa); - /* RSA_FLAG_EXT_PKEY - rsa_mod_exp is called for private key + /* + * 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; + int flags; - char *app_data; /* ?? */ + 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); + 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); + int (*rsa_keygen)(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); } RSA_METHOD; @@ -172,7 +172,7 @@ L =head1 HISTORY The RSA_null_method(), which was a partial attempt to avoid patent issues, -was replaced to always return NULL in OpenSSL 1.1.0f. +was replaced to always return NULL in OpenSSL 1.1.1. =head1 COPYRIGHT diff --git a/doc/crypto/RSA_sign.pod b/doc/man3/RSA_sign.pod similarity index 92% rename from doc/crypto/RSA_sign.pod rename to doc/man3/RSA_sign.pod index fbb38d81..310abd49 100644 --- a/doc/crypto/RSA_sign.pod +++ b/doc/man3/RSA_sign.pod @@ -9,10 +9,10 @@ RSA_sign, RSA_verify - RSA signatures #include int RSA_sign(int type, const unsigned char *m, unsigned int m_len, - unsigned char *sigret, unsigned int *siglen, RSA *rsa); + 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); + unsigned char *sigbuf, unsigned int siglen, RSA *rsa); =head1 DESCRIPTION diff --git a/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod b/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod similarity index 83% rename from doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod rename to doc/man3/RSA_sign_ASN1_OCTET_STRING.pod index 16303c9f..f577e153 100644 --- a/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod +++ b/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod @@ -9,12 +9,12 @@ RSA_sign_ASN1_OCTET_STRING, RSA_verify_ASN1_OCTET_STRING - RSA signatures #include int RSA_sign_ASN1_OCTET_STRING(int dummy, unsigned char *m, - unsigned int m_len, unsigned char *sigret, unsigned int *siglen, - RSA *rsa); + 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); + unsigned int m_len, unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); =head1 DESCRIPTION @@ -48,7 +48,7 @@ These functions serve no recognizable purpose. =head1 SEE ALSO L, -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/man3/RSA_size.pod b/doc/man3/RSA_size.pod new file mode 100644 index 00000000..02262007 --- /dev/null +++ b/doc/man3/RSA_size.pod @@ -0,0 +1,55 @@ +=pod + +=head1 NAME + +RSA_size, RSA_bits, RSA_security_bits - get RSA modulus size or security bits + +=head1 SYNOPSIS + + #include + + int RSA_size(const RSA *rsa); + + int RSA_bits(const RSA *rsa); + + int RSA_security_bits(const RSA *rsa) + +=head1 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. + +B and Bn> must not be B. + +RSA_security_bits() returns the number of security bits of the given B +key. See L. + +=head1 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. + +=head1 SEE ALSO + +L + +=head1 HISTORY + +RSA_bits() was added in OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/SCT_new.pod b/doc/man3/SCT_new.pod similarity index 80% rename from doc/crypto/SCT_new.pod rename to doc/man3/SCT_new.pod index fb395a51..8da7f6ad 100644 --- a/doc/crypto/SCT_new.pod +++ b/doc/man3/SCT_new.pod @@ -18,21 +18,21 @@ SCT_get_source, SCT_set_source #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_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_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_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE } sct_source_t; SCT *SCT_new(void); @@ -84,31 +84,45 @@ 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: -=over 4 +=over 2 -=item * SCT_set_version() to set the SCT version. +=item * + +SCT_set_version() to set the SCT version. Only SCT_VERSION_V1 is currently supported. -=item * SCT_set_log_entry_type() to set the type of certificate the SCT was issued for: +=item * + +SCT_set_log_entry_type() to set the type of certificate the SCT was issued for: B for a normal certificate. B for a pre-certificate. -=item * SCT_set0_log_id() or SCT_set1_log_id() to set the LogID of the CT log that the SCT came from. +=item * + +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. -=item * SCT_set_timestamp() to set the time the SCT was issued (epoch time in milliseconds). +=item * -=item * SCT_set_signature_nid() to set the NID of the signature. +SCT_set_timestamp() to set the time the SCT was issued (epoch time in milliseconds). -=item * SCT_set0_signature() or SCT_set1_signature() to set the raw signature value. +=item * + +SCT_set_signature_nid() to set the NID of the signature. + +=item * + +SCT_set0_signature() or SCT_set1_signature() to set the raw signature value. The former takes ownership, whereas the latter makes a copy. -=item * SCT_set0_extensions() or B to provide SCT extensions. +=item * + +SCT_set0_extensions() or B to provide SCT extensions. The former takes ownership, whereas the latter makes a copy. @@ -117,22 +131,33 @@ 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(): -=over 4 +=over 2 -=item * The SCT version (only SCT_VERSION_V1 is currently supported). +=item * -=item * The LogID (see RFC 6962, Section 3.2), base64 encoded. +The SCT version (only SCT_VERSION_V1 is currently supported). -=item * The type of certificate the SCT was issued for: +=item * +The LogID (see RFC 6962, Section 3.2), base64 encoded. + +=item * + +The type of certificate the SCT was issued for: B for a normal certificate. B for a pre-certificate. -=item * The time that the SCT was issued (epoch time in milliseconds). +=item * -=item * The SCT extensions, base64 encoded. +The time that the SCT was issued (epoch time in milliseconds). -=item * The SCT signature, base64 encoded. +=item * + +The SCT extensions, base64 encoded. + +=item * + +The SCT signature, base64 encoded. =back diff --git a/doc/crypto/SCT_print.pod b/doc/man3/SCT_print.pod similarity index 87% rename from doc/crypto/SCT_print.pod rename to doc/man3/SCT_print.pod index 88ad43ec..2b9913d4 100644 --- a/doc/crypto/SCT_print.pod +++ b/doc/man3/SCT_print.pod @@ -29,10 +29,15 @@ 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. +=head1 RETURN VALUES + +SCT_validation_status_string() returns a null-terminated string representing +the validation status of an B object. + =head1 SEE ALSO -L, -L, +L, +L, L, L @@ -42,7 +47,7 @@ These functions were added in OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/SCT_validate.pod b/doc/man3/SCT_validate.pod similarity index 87% rename from doc/crypto/SCT_validate.pod rename to doc/man3/SCT_validate.pod index 3c03e972..fa7e2a8b 100644 --- a/doc/crypto/SCT_validate.pod +++ b/doc/man3/SCT_validate.pod @@ -10,12 +10,12 @@ checks Signed Certificate Timestamps (SCTs) are valid #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_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); @@ -31,20 +31,26 @@ SCT_get_validation_status(). A CT_POLICY_EVAL_CTX must be provided that specifies: -=over 4 +=over 2 -=item * The certificate the SCT was issued for. +=item * + +The certificate the SCT was issued for. Failure to provide the certificate will result in the validation status being SCT_VALIDATION_STATUS_UNVERIFIED. -=item * The issuer of that certificate. +=item * + +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. -=item * A CTLOG_STORE that contains the CT log that issued this SCT. +=item * + +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. diff --git a/doc/crypto/SHA256_Init.pod b/doc/man3/SHA256_Init.pod similarity index 94% rename from doc/crypto/SHA256_Init.pod rename to doc/man3/SHA256_Init.pod index f3565bb2..6a8f2fa0 100644 --- a/doc/crypto/SHA256_Init.pod +++ b/doc/man3/SHA256_Init.pod @@ -15,31 +15,31 @@ SHA512_Final - Secure Hash Algorithm 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); + 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); + 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); + 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); + 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); + unsigned char *md); =head1 DESCRIPTION diff --git a/doc/crypto/SMIME_read_CMS.pod b/doc/man3/SMIME_read_CMS.pod similarity index 96% rename from doc/crypto/SMIME_read_CMS.pod rename to doc/man3/SMIME_read_CMS.pod index efde0bda..800e4aa2 100644 --- a/doc/crypto/SMIME_read_CMS.pod +++ b/doc/man3/SMIME_read_CMS.pod @@ -58,9 +58,9 @@ if an error occurred. The error can be obtained from ERR_get_error(3). =head1 SEE ALSO -L, L +L, L, L, L, -L, L +L, L, L =head1 COPYRIGHT diff --git a/doc/crypto/SMIME_read_PKCS7.pod b/doc/man3/SMIME_read_PKCS7.pod similarity index 100% rename from doc/crypto/SMIME_read_PKCS7.pod rename to doc/man3/SMIME_read_PKCS7.pod diff --git a/doc/crypto/SMIME_write_CMS.pod b/doc/man3/SMIME_write_CMS.pod similarity index 100% rename from doc/crypto/SMIME_write_CMS.pod rename to doc/man3/SMIME_write_CMS.pod diff --git a/doc/crypto/SMIME_write_PKCS7.pod b/doc/man3/SMIME_write_PKCS7.pod similarity index 100% rename from doc/crypto/SMIME_write_PKCS7.pod rename to doc/man3/SMIME_write_PKCS7.pod diff --git a/doc/man3/SSL_CIPHER_get_name.pod b/doc/man3/SSL_CIPHER_get_name.pod new file mode 100644 index 00000000..af59b589 --- /dev/null +++ b/doc/man3/SSL_CIPHER_get_name.pod @@ -0,0 +1,210 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SSL_CIPHER_get_name() returns a pointer to the name of B. If the +B is NULL, it returns "(NONE)". + +SSL_CIPHER_standard_name() returns a pointer to the standard RFC name of +B. If the B is NULL, it returns "(NONE)". If the B +has no standard name, it returns B. If B was defined in both +SSLv3 and TLS, it returns the TLS name. + +OPENSSL_cipher_name() returns a pointer to the OpenSSL name of B. +If the B is NULL, or B has no corresponding OpenSSL name, +it returns "(NONE)". Where both exist, B should be the TLS name rather +than the SSLv3 name. + +SSL_CIPHER_get_bits() returns the number of secret bits used for B. +If B 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 B is NULL. + +SSL_CIPHER_get_cipher_nid() returns the cipher NID corresponding to B. +If there is no cipher (e.g. for cipher suites with no encryption) then +B is returned. + +SSL_CIPHER_get_digest_nid() returns the digest NID corresponding to the MAC +used by B during record encryption/decryption. If there is no digest (e.g. +for AEAD cipher suites) then B 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 B. 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 B. If there is no key exchange, then B is returned. +If any appropriate key exchange algorithm can be used (as in the case of TLS 1.3 +cipher suites) B 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 B. If there is no authentication, then B is returned. +If any appropriate authentication algorithm can be used (as in the case of +TLS 1.3 cipher suites) B is returned. Examples (not comprehensive): + + NID_auth_rsa + NID_auth_ecdsa + NID_auth_psk + +SSL_CIPHER_is_aead() returns 1 if the cipher B is AEAD (e.g. GCM or +ChaCha20/Poly1305), and 0 if it is not AEAD. + +SSL_CIPHER_find() returns a B structure which has the cipher ID stored +in B. The B parameter is a two element array of B, 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 +L. 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 B. 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 B. + +SSL_CIPHER_description() returns a textual description of the cipher used +into the buffer B of length B provided. If B 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, +B is returned. + +The string returned by SSL_CIPHER_description() consists of several fields +separated by whitespace: + +=over 4 + +=item + +Textual representation of the cipher name. + +=item + +Protocol version, such as B, when the cipher was first defined. + +=item Kx= + +Key exchange method such as B, B, etc. + +=item Au= + +Authentication method such as B, B, etc.. None is the +representation of anonymous ciphers. + +=item Enc= + +Encryption method, with number of secret bits, such as B. + +=item Mac= + +Message digest, such as B. + +=back + +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 + +=head1 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 +B if an error occurred. + +SSL_CIPHER_get_handshake_digest() returns a valid B 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 B 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. + +=head1 HISTORY + +SSL_CIPHER_get_version() was updated to always return the correct protocol +string in OpenSSL 1.1.0. + +SSL_CIPHER_description() was changed to return B on error, +rather than a fixed string, in OpenSSL 1.1.0. + +SSL_CIPHER_get_handshake_digest() was added in OpenSSL 1.1.1. + +SSL_CIPHER_standard_name() was globally available in OpenSSL 1.1.1. Before +OpenSSL 1.1.1, tracing (B argument to Configure) was +required to enable this function. + +OPENSSL_cipher_name() was added in OpenSSL 1.1.1. + +=head1 SEE ALSO + +L, L, +L, L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_COMP_add_compression_method.pod b/doc/man3/SSL_COMP_add_compression_method.pod similarity index 83% rename from doc/ssl/SSL_COMP_add_compression_method.pod rename to doc/man3/SSL_COMP_add_compression_method.pod index 15929df3..1dc8eb14 100644 --- a/doc/ssl/SSL_COMP_add_compression_method.pod +++ b/doc/man3/SSL_COMP_add_compression_method.pod @@ -35,12 +35,8 @@ SSL_COMP_get0_name() returns the name of the compression method B. SSL_COMP_get_id() returns the id of the compression method B. -In versions of OpenSSL prior to 1.1.0 SSL_COMP_free_compression_methods() freed -the internal table of compression methods that were built internally, and -possibly augmented by adding SSL_COMP_add_compression_method(). However this is -now unnecessary from version 1.1.0. No explicit initialisation or -de-initialisation is necessary. See L and -L. From OpenSSL 1.1.0 calling this function does nothing. +SSL_COMP_free_compression_methods() releases any resources acquired to +maintain the internal table of compression methods. =head1 NOTES @@ -66,12 +62,6 @@ of compression methods supported on a per connection basis. If enabled during compilation, the OpenSSL library will have the COMP_zlib() compression method available. -=head1 WARNINGS - -Once the identities of the compression methods for the TLS protocol have -been standardized, the compression API will most likely be changed. Using -it in the current state is not recommended. - =head1 RETURN VALUES SSL_COMP_add_compression_method() may return the following values: @@ -97,11 +87,12 @@ SSL_COMP_get_id() returns the name of the compression method or -1 on error. =head1 SEE ALSO -L +L =head1 HISTORY -SSL_COMP_free_compression_methods() was deprecated in OpenSSL 1.1.0. +SSL_COMP_free_compression_methods() was deprecated in OpenSSL 1.1.0; +do not use it. SSL_COMP_get0_name() and SSL_comp_get_id() were added in OpenSSL 1.1.0d. =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CONF_CTX_new.pod b/doc/man3/SSL_CONF_CTX_new.pod similarity index 100% rename from doc/ssl/SSL_CONF_CTX_new.pod rename to doc/man3/SSL_CONF_CTX_new.pod diff --git a/doc/ssl/SSL_CONF_CTX_set1_prefix.pod b/doc/man3/SSL_CONF_CTX_set1_prefix.pod similarity index 99% rename from doc/ssl/SSL_CONF_CTX_set1_prefix.pod rename to doc/man3/SSL_CONF_CTX_set1_prefix.pod index da9e5802..d9864702 100644 --- a/doc/ssl/SSL_CONF_CTX_set1_prefix.pod +++ b/doc/man3/SSL_CONF_CTX_set1_prefix.pod @@ -17,7 +17,7 @@ to B. If B is B it is restored to the default value. =head1 NOTES -Command prefixes alter the commands recognised by subsequent SSL_CTX_cmd() +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 diff --git a/doc/ssl/SSL_CONF_CTX_set_flags.pod b/doc/man3/SSL_CONF_CTX_set_flags.pod similarity index 97% rename from doc/ssl/SSL_CONF_CTX_set_flags.pod rename to doc/man3/SSL_CONF_CTX_set_flags.pod index efd8da3b..766d9846 100644 --- a/doc/ssl/SSL_CONF_CTX_set_flags.pod +++ b/doc/man3/SSL_CONF_CTX_set_flags.pod @@ -2,7 +2,7 @@ =head1 NAME -SSL_CONF_CTX_set_flags, SSL_CONF_CTX_clear_flags - Set of clear SSL configuration context flags +SSL_CONF_CTX_set_flags, SSL_CONF_CTX_clear_flags - Set or clear SSL configuration context flags =head1 SYNOPSIS diff --git a/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod b/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod similarity index 100% rename from doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod rename to doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod diff --git a/doc/ssl/SSL_CONF_cmd.pod b/doc/man3/SSL_CONF_cmd.pod similarity index 75% rename from doc/ssl/SSL_CONF_cmd.pod rename to doc/man3/SSL_CONF_cmd.pod index a28e2183..b4392f48 100644 --- a/doc/ssl/SSL_CONF_cmd.pod +++ b/doc/man3/SSL_CONF_cmd.pod @@ -2,7 +2,7 @@ =head1 NAME -SSL_CONF_cmd_value_type, SSL_CONF_finish, +SSL_CONF_cmd_value_type, SSL_CONF_cmd - send configuration command =head1 SYNOPSIS @@ -11,7 +11,6 @@ SSL_CONF_cmd - send configuration command 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); - int SSL_CONF_finish(SSL_CONF_CTX *cctx); =head1 DESCRIPTION @@ -22,10 +21,6 @@ framework for command line options or configuration files. SSL_CONF_cmd_value_type() returns the type of value that B refers to. -The function SSL_CONF_finish() must be called after all configuration -operations have been completed. It is used to finalise any operations -or to process defaults. - =head1 SUPPORTED COMMAND LINE COMMANDS Currently supported B names for command lines (i.e. when the @@ -62,16 +57,25 @@ If a server does not request a certificate this option has no effect. The syntax of B is identical to B<-sigalgs>. If not set then the value set for B<-sigalgs> will be used instead. +=item B<-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 both +signatures and key exchange, if applicable. It also affects the preferred +key_share sent by a client in a TLSv1.3 compatible connection. + +The B argument is a colon separated list of groups. The group can be +either the B name (e.g. B), some other commonly used name where +applicable (e.g. B) or an OpenSSL OID name (e.g B). Group +names are case sensitive. The list should be in order of preference with the +most preferred group first. The first listed group will be the one used for a +key_share by a TLSv1.3 client. + =item B<-curves> -This sets the supported elliptic curves. For clients the curves are -sent using the supported curves extension. For servers it is used -to determine which curve to use. This setting affects curves used for both -signatures and key exchange, if applicable. +This is a synonym for the "-groups" command. -The B argument is a colon separated list of curves. The curve can be -either the B name (e.g. B) or an OpenSSL OID name (e.g -B). Curve names are case sensitive. =item B<-named_curve> @@ -110,6 +114,12 @@ Attempts to use the file B as the set of temporary DH parameters for the appropriate context. This option is only supported if certificate operations are permitted. +=item B<-record_padding> + +Attempts to pad TLS 1.3 records so that they are a multiple of B in +length on send. A B of 0 or 1 turns off padding. Otherwise, the +B must be >1 or <=16384. + =item B<-no_renegotiation> Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting @@ -126,12 +136,13 @@ if specified. To restrict the supported protocol versions use these commands rather than the deprecated alternative commands below. -=item B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2> +=item B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>, B<-no_tls1_3> -Disables protocol support for SSLv3, TLSv1.0, TLSv1.1 or TLSv1.2 by setting the -corresponding options B, B, B -and B respectively. -These options are deprecated, instead use B<-min_protocol> and B<-max_protocol>. +Disables protocol support for SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 or TLSv1.3 by +setting the corresponding options B, B, +B, B and B +respectively. These options are deprecated, instead use B<-min_protocol> and +B<-max_protocol>. =item B<-bugs> @@ -160,6 +171,13 @@ 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 B. Only used by servers. +=item B<-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 B. +Only used by servers. Requires B<-serverpref>. + =item B<-no_resumption_on_reneg> set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers. @@ -175,6 +193,11 @@ permits or prohibits the use of unsafe legacy renegotiation for OpenSSL clients only. Equivalent to setting or clearing B. Set by default. +=item B<-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. + =item B<-strict> enables strict mode protocol handling. Equivalent to setting @@ -221,6 +244,14 @@ 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. +=item B + +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 +B extension for TLS 1.3 (in ClientHello or +CertificateRequest) or in a certificate request for previous versions or +TLS. + =item B Attempts to use the file B in the "serverinfo" extension using the @@ -232,6 +263,12 @@ Attempts to use the file B as the set of temporary DH parameters for the appropriate context. This option is only supported if certificate operations are permitted. +=item B + +Attempts to pad TLS 1.3 records so that they are a multiple of B in +length on send. A B of 0 or 1 turns off padding. Otherwise, the +B must be >1 or <=16384. + =item B Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting @@ -262,16 +299,24 @@ used to determine which signature algorithm to with the client certificate. The syntax of B is identical to B. If not set then the value set for B will be used instead. +=item B + +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 both +signatures and key exchange, if applicable. It also affects the preferred +key_share sent by a client in a TLSv1.3 compatible connection. + +The B argument is a colon separated list of groups. The group can be +either the B name (e.g. B), some other commonly used name where +applicable (e.g. B) or an OpenSSL OID name (e.g B). Group +names are case sensitive. The list should be in order of preference with the +most preferred group first. The first listed group will be the one used for a +key_share by a TLSv1.3 client. + =item B -This sets the supported elliptic curves. For clients the curves are -sent using the supported curves extension. For servers it is used -to determine which curve to use. This setting affects curves used for both -signatures and key exchange, if applicable. - -The B argument is a colon separated list of curves. The curve can be -either the B name (e.g. B) or an OpenSSL OID name (e.g -B). Curve names are case sensitive. +This is a synonym for the "Groups" command. =item B @@ -344,24 +389,43 @@ B: enable various bug workarounds. Same as B. B: enable single use DH keys, set by default. Inverse of B. Only used by servers. -B enable single use ECDH keys, set by default. Inverse of +B: enable single use ECDH keys, set by default. Inverse of B. Only used by servers. -B use server and not client preference order when +B: 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 B. Only used by servers. -B set +B: 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 B. +Only used by servers. + +B: set B flag. Only used by servers. -B permits the use of unsafe legacy renegotiation. +B: permits the use of unsafe legacy renegotiation. Equivalent to B. -B permits the use of unsafe legacy renegotiation +B: permits the use of unsafe legacy renegotiation for OpenSSL clients only. Equivalent to B. Set by default. +B: use encrypt-then-mac extension, enabled by +default. Inverse of B: that is, +B<-EncryptThenMac> is the same as setting B. + +B: 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 B. + +B: 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 B. + =item B The B argument is a comma separated list of flags to set. @@ -377,6 +441,18 @@ occurs if the client does not present a certificate. Servers only. B requests a certificate from a client only on the initial connection: not when renegotiating. Servers only. +B 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. + +B 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. + =item B, B A file or directory of certificates in PEM format whose names are used as the @@ -433,22 +509,22 @@ however the call sequence is: SSLv3 is B disabled and attempt to override this by the user are ignored. -By checking the return code of SSL_CTX_cmd() it is possible to query if a -given B is recognised, this is useful if SSL_CTX_cmd() values are +By checking the return code of SSL_CONF_cmd() it is possible to query if a +given B is recognised, this is useful if SSL_CONF_cmd() values are mixed with additional application specific operations. -For example an application might call SSL_CTX_cmd() and if it returns +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_CTX_cmd() to process command lines though the -utility function SSL_CTX_cmd_argv() is normally used instead. One way +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 B and the following argument to B (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_CTX_cmd(). If -2 is +number of arguments as they have been processed by SSL_CONF_cmd(). If -2 is returned then B 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 @@ -527,8 +603,6 @@ error occurred attempting to perform the operation: for example due to an error in the syntax of B in this case the error queue may provide additional information. -SSL_CONF_finish() returns 1 for success and 0 for failure. - =head1 SEE ALSO L, @@ -551,6 +625,8 @@ B. B and B where added in OpenSSL 1.1.0. +B and B were added in OpenSSL 1.1.1. + =head1 COPYRIGHT Copyright 2012-2018 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/ssl/SSL_CONF_cmd_argv.pod b/doc/man3/SSL_CONF_cmd_argv.pod similarity index 96% rename from doc/ssl/SSL_CONF_cmd_argv.pod rename to doc/man3/SSL_CONF_cmd_argv.pod index 15529a59..567fa5a5 100644 --- a/doc/ssl/SSL_CONF_cmd_argv.pod +++ b/doc/man3/SSL_CONF_cmd_argv.pod @@ -15,7 +15,7 @@ SSL_CONF_cmd_argv - SSL configuration command line processing The function SSL_CONF_cmd_argv() processes at most two command line arguments from B and B. The values of B and B are updated to reflect the number of command options processed. The B -argument can be set to B is it is not used. +argument can be set to B if it is not used. =head1 RETURN VALUES diff --git a/doc/ssl/SSL_CTX_add1_chain_cert.pod b/doc/man3/SSL_CTX_add1_chain_cert.pod similarity index 97% rename from doc/ssl/SSL_CTX_add1_chain_cert.pod rename to doc/man3/SSL_CTX_add1_chain_cert.pod index 1f0418b2..24730024 100644 --- a/doc/ssl/SSL_CTX_add1_chain_cert.pod +++ b/doc/man3/SSL_CTX_add1_chain_cert.pod @@ -86,7 +86,7 @@ used to iterate over all certificates in an B structure. SSL_set_current_cert() also supports the option B. If B 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 ciphersuite is anonymous (and thus no certificate will +If the negotiated cipher suite is anonymous (and thus no certificate will be sent) 2 is returned and the current certificate is unchanged. If B is not a server or a certificate has not been sent 0 is returned and the current certificate is unchanged. @@ -129,7 +129,7 @@ using SSL_CTX_add_extra_chain_cert() will be used. =head1 RETURN VALUES SSL_set_current_cert() with B return 1 for success, 2 if -no server certificate is used because the ciphersuites is anonymous and 0 +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 diff --git a/doc/ssl/SSL_CTX_add_extra_chain_cert.pod b/doc/man3/SSL_CTX_add_extra_chain_cert.pod similarity index 99% rename from doc/ssl/SSL_CTX_add_extra_chain_cert.pod rename to doc/man3/SSL_CTX_add_extra_chain_cert.pod index e2783de9..05d17f8b 100644 --- a/doc/ssl/SSL_CTX_add_extra_chain_cert.pod +++ b/doc/man3/SSL_CTX_add_extra_chain_cert.pod @@ -53,7 +53,7 @@ reason for failure. =head1 SEE ALSO -L, +L, L, L, L diff --git a/doc/ssl/SSL_CTX_add_session.pod b/doc/man3/SSL_CTX_add_session.pod similarity index 77% rename from doc/ssl/SSL_CTX_add_session.pod rename to doc/man3/SSL_CTX_add_session.pod index dbdd9f0c..d8b115bb 100644 --- a/doc/ssl/SSL_CTX_add_session.pod +++ b/doc/man3/SSL_CTX_add_session.pod @@ -2,17 +2,15 @@ =head1 NAME -SSL_CTX_add_session, SSL_add_session, SSL_CTX_remove_session, SSL_remove_session - manipulate session cache +SSL_CTX_add_session, SSL_CTX_remove_session - manipulate session cache =head1 SYNOPSIS #include int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c); - int SSL_add_session(SSL_CTX *ctx, SSL_SESSION *c); int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *c); - int SSL_remove_session(SSL_CTX *ctx, SSL_SESSION *c); =head1 DESCRIPTION @@ -21,11 +19,8 @@ reference count for session B is incremented by 1. If a session with the same session id already exists, the old session is removed by calling L. -SSL_CTX_remove_session() removes the session B from the context B. -L is called once for B. - -SSL_add_session() and SSL_remove_session() are synonyms for their -SSL_CTX_*() counterparts. +SSL_CTX_remove_session() removes the session B from the context B and +marks it as non-resumable. L is called once for B. =head1 NOTES @@ -54,19 +49,19 @@ The following values are returned by all functions: =item Z<>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. +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. =item Z<>1 - The operation succeeded. +The operation succeeded. =back =head1 SEE ALSO -L, +L, L, L diff --git a/doc/ssl/SSL_CTX_config.pod b/doc/man3/SSL_CTX_config.pod similarity index 93% rename from doc/ssl/SSL_CTX_config.pod rename to doc/man3/SSL_CTX_config.pod index ec744ad0..5b2aed76 100644 --- a/doc/ssl/SSL_CTX_config.pod +++ b/doc/man3/SSL_CTX_config.pod @@ -25,7 +25,7 @@ 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 L for details of the configuration +CONF_modules_load_file(). See L for details of the configuration file syntax. =head1 RETURN VALUES @@ -45,11 +45,9 @@ If the file "config.cnf" contains the following: ssl_conf = ssl_sect [ssl_sect] - server = server_section [server_section] - RSA.Certificate = server-rsa.pem ECDSA.Certificate = server-ecdsa.pem Ciphers = ALL:!RC4 @@ -57,8 +55,8 @@ If the file "config.cnf" contains the following: An application could call: if (CONF_modules_load_file("config.cnf", "testapp", 0) <= 0) { - fprintf(stderr, "Error processing config file\n"); - goto err; + fprintf(stderr, "Error processing config file\n"); + goto err; } ctx = SSL_CTX_new(TLS_server_method()); @@ -73,7 +71,7 @@ the need for any additional application code. =head1 SEE ALSO -L, +L, L, L diff --git a/doc/ssl/SSL_CTX_ctrl.pod b/doc/man3/SSL_CTX_ctrl.pod similarity index 99% rename from doc/ssl/SSL_CTX_ctrl.pod rename to doc/man3/SSL_CTX_ctrl.pod index e8386a59..55fb015e 100644 --- a/doc/ssl/SSL_CTX_ctrl.pod +++ b/doc/man3/SSL_CTX_ctrl.pod @@ -29,7 +29,7 @@ supplied via the B parameter. =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/man3/SSL_CTX_dane_enable.pod b/doc/man3/SSL_CTX_dane_enable.pod new file mode 100644 index 00000000..d767bb29 --- /dev/null +++ b/doc/man3/SSL_CTX_dane_enable.pod @@ -0,0 +1,382 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 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 L function, and +applications that override L via +L 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 B argument specifies a DANE TLSA matching type and the B +argument specifies the associated digest algorithm handle. +The B 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 B 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 C (see RFC7218 for definitions +of the DANE TLSA parameter acronyms) is mapped to C +with a strength ordinal of C<1> and matching type C +is mapped to C with a strength ordinal of C<2>. + +SSL_dane_enable() must be called before the SSL handshake is initiated with +L if (and only if) you want to enable DANE for that connection. +(The connection must be associated with a DANE-enabled SSL context). +The B 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 L. +The B is used as the default SNI hint if none has yet been +specified via L. + +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 B field is provided in binary (wire RDATA) form, not the hexadecimal +ASCII presentation form, with an explicit length passed via B. +The library takes a copy of the B buffer contents and the caller may +free the original B 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 L. +The return value is an index into this verified chain, rather than the list of +certificates sent by the peer as returned by L. + +If the B argument is not B and a TLSA record matched a chain +certificate, a pointer to the matching certificate is returned via B. +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 +L to obtain a long-term reference which must then be freed via +L 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 B 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 B this is a short-term internal reference, and +L and L 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 B, +B, B and B parameters is updated to the corresponding +TLSA record fields. +The B field is in binary wire form, and is therefore not NUL-terminated, +its length is returned via the B parameter. +If any of these parameters is NULL, the corresponding field is not returned. +The B 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 B argument is a bitmask of the features to enable or disable. +The B set for an B context are copied to each B handle +associated with that context at the time the handle is created. +Subsequent changes in the context's B have no effect on the B set +for the handle. + +At present, the only available option is B +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. + +=head1 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 B<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 C (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 B in effect +before they were called. + +=head1 EXAMPLE + +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. + */ + } + +=head1 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 +L with B equal to B. + +=head1 SEE ALSO + +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +These functions were first added to OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_flush_sessions.pod b/doc/man3/SSL_CTX_flush_sessions.pod similarity index 81% rename from doc/ssl/SSL_CTX_flush_sessions.pod rename to doc/man3/SSL_CTX_flush_sessions.pod index 7639451c..c2f01064 100644 --- a/doc/ssl/SSL_CTX_flush_sessions.pod +++ b/doc/man3/SSL_CTX_flush_sessions.pod @@ -2,29 +2,26 @@ =head1 NAME -SSL_CTX_flush_sessions, SSL_flush_sessions - remove expired sessions +SSL_CTX_flush_sessions - remove expired sessions =head1 SYNOPSIS #include void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); - void SSL_flush_sessions(SSL_CTX *ctx, long tm); =head1 DESCRIPTION SSL_CTX_flush_sessions() causes a run through the session cache of B to remove sessions expired at time B. -SSL_flush_sessions() is a synonym for SSL_CTX_flush_sessions(). - =head1 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 +automatically whenever 255 new sessions were established (see L) or manually by calling SSL_CTX_flush_sessions(). @@ -37,16 +34,20 @@ cache. When a session is found and removed, the remove_session_cb is however called to synchronize with the external cache (see L). +=head1 RETURN VALUES + +SSL_CTX_flush_sessions() does not return a value. + =head1 SEE ALSO -L, +L, L, L, L =head1 COPYRIGHT -Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/ssl/SSL_CTX_free.pod b/doc/man3/SSL_CTX_free.pod similarity index 97% rename from doc/ssl/SSL_CTX_free.pod rename to doc/man3/SSL_CTX_free.pod index e5cc1aab..6b7bf1a8 100644 --- a/doc/ssl/SSL_CTX_free.pod +++ b/doc/man3/SSL_CTX_free.pod @@ -36,7 +36,7 @@ SSL_CTX_free() does not provide diagnostic information. =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_get0_param.pod b/doc/man3/SSL_CTX_get0_param.pod similarity index 100% rename from doc/ssl/SSL_CTX_get0_param.pod rename to doc/man3/SSL_CTX_get0_param.pod diff --git a/doc/ssl/SSL_CTX_get_verify_mode.pod b/doc/man3/SSL_CTX_get_verify_mode.pod similarity index 98% rename from doc/ssl/SSL_CTX_get_verify_mode.pod rename to doc/man3/SSL_CTX_get_verify_mode.pod index bd100344..5f6da9d4 100644 --- a/doc/ssl/SSL_CTX_get_verify_mode.pod +++ b/doc/man3/SSL_CTX_get_verify_mode.pod @@ -45,7 +45,7 @@ See DESCRIPTION =head1 SEE ALSO -L, L +L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_has_client_custom_ext.pod b/doc/man3/SSL_CTX_has_client_custom_ext.pod similarity index 98% rename from doc/ssl/SSL_CTX_has_client_custom_ext.pod rename to doc/man3/SSL_CTX_has_client_custom_ext.pod index d9e9a066..b220c5e7 100644 --- a/doc/ssl/SSL_CTX_has_client_custom_ext.pod +++ b/doc/man3/SSL_CTX_has_client_custom_ext.pod @@ -22,7 +22,7 @@ Returns 1 if a handler has been set, 0 otherwise. =head1 SEE ALSO -L, +L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_load_verify_locations.pod b/doc/man3/SSL_CTX_load_verify_locations.pod similarity index 99% rename from doc/ssl/SSL_CTX_load_verify_locations.pod rename to doc/man3/SSL_CTX_load_verify_locations.pod index 59d11e03..a96aafed 100644 --- a/doc/ssl/SSL_CTX_load_verify_locations.pod +++ b/doc/man3/SSL_CTX_load_verify_locations.pod @@ -108,7 +108,7 @@ 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 + openssl x509 -in $i -text >> CAfile.pem done Prepare the directory /some/where/certs containing several CA certificates @@ -141,7 +141,7 @@ missing default location is still treated as a success. =head1 SEE ALSO -L, +L, L, L, L, diff --git a/doc/ssl/SSL_CTX_new.pod b/doc/man3/SSL_CTX_new.pod similarity index 93% rename from doc/ssl/SSL_CTX_new.pod rename to doc/man3/SSL_CTX_new.pod index 7b35bdda..4bcbccaf 100644 --- a/doc/ssl/SSL_CTX_new.pod +++ b/doc/man3/SSL_CTX_new.pod @@ -156,12 +156,12 @@ and be able to negotiate with all possible clients, but to only allow newer protocols like TLS 1.0, TLS 1.1 or TLS 1.2. The list of protocols available can also be limited using the -B, B, B and -B options of the L or -L 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. +B, B, B, +B and B options of the +L or L 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 I previous protocol versions, the effect is to also disable all subsequent protocol versions. @@ -204,7 +204,7 @@ All version-specific methods were deprecated in OpenSSL 1.1.0. =head1 SEE ALSO L, L, L, -L, L, L +L, L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_sess_number.pod b/doc/man3/SSL_CTX_sess_number.pod similarity index 93% rename from doc/ssl/SSL_CTX_sess_number.pod rename to doc/man3/SSL_CTX_sess_number.pod index 049c04c4..a96c8dd7 100644 --- a/doc/ssl/SSL_CTX_sess_number.pod +++ b/doc/man3/SSL_CTX_sess_number.pod @@ -32,7 +32,7 @@ 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 start renegotiations +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 @@ -41,7 +41,7 @@ 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 start renegotiations +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. @@ -69,7 +69,7 @@ The functions return the values indicated in the DESCRIPTION section. =head1 SEE ALSO -L, L, +L, L, L L diff --git a/doc/ssl/SSL_CTX_sess_set_cache_size.pod b/doc/man3/SSL_CTX_sess_set_cache_size.pod similarity index 99% rename from doc/ssl/SSL_CTX_sess_set_cache_size.pod rename to doc/man3/SSL_CTX_sess_set_cache_size.pod index 5aef10bd..6a1c140e 100644 --- a/doc/ssl/SSL_CTX_sess_set_cache_size.pod +++ b/doc/man3/SSL_CTX_sess_set_cache_size.pod @@ -45,7 +45,7 @@ SSL_CTX_sess_get_cache_size() returns the currently valid size. =head1 SEE ALSO -L, +L, L, L, L diff --git a/doc/man3/SSL_CTX_sess_set_get_cb.pod b/doc/man3/SSL_CTX_sess_set_get_cb.pod new file mode 100644 index 00000000..c66164eb --- /dev/null +++ b/doc/man3/SSL_CTX_sess_set_get_cb.pod @@ -0,0 +1,114 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SSL_CTX_sess_set_new_cb() sets the callback function, which is automatically +called whenever a new session was negotiated. + +SSL_CTX_sess_set_remove_cb() sets the callback function, which is +automatically called whenever a session is removed by the SSL engine, +because it is considered faulty or the session has become obsolete because +of exceeding the timeout value. + +SSL_CTX_sess_set_get_cb() sets the callback function which is called, +whenever a SSL/TLS client proposed to resume a session but the session +could not be found in the internal session cache (see +L). +(SSL/TLS server only.) + +SSL_CTX_sess_get_new_cb(), SSL_CTX_sess_get_remove_cb(), and +SSL_CTX_sess_get_get_cb() allow to retrieve the function pointers of the +provided callback functions. If a callback function has not been set, +the NULL pointer is returned. + +=head1 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 +L interface. + +The new_session_cb() is called, whenever a new session has been negotiated +and session caching is enabled (see +L). +The new_session_cb() is passed the B connection and the ssl session +B. If the callback returns B<0>, the session will be immediately +removed again. 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 +L after a session has been used. + +The remove_session_cb() is called, whenever the SSL engine removes a session +from the internal cache. This happens 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 +L is called. The remove_session_cb() is passed +the B and the ssl session B. It does not provide any feedback. + +The get_session_cb() is only called on SSL/TLS servers with the session id +proposed by the client. The get_session_cb() is always called, also when +session caching was disabled. The get_session_cb() is passed the +B connection, the session id of length B at the memory location +B. With the parameter B the callback can require the +SSL engine to increment the reference count of the SSL_SESSION object, +Normally the reference count is not incremented and therefore the +session must not be explicitly freed with +L. + +=head1 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. + +=head1 SEE ALSO + +L, L, +L, +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_sessions.pod b/doc/man3/SSL_CTX_sessions.pod similarity index 76% rename from doc/ssl/SSL_CTX_sessions.pod rename to doc/man3/SSL_CTX_sessions.pod index bc4a55e1..41c0777c 100644 --- a/doc/ssl/SSL_CTX_sessions.pod +++ b/doc/man3/SSL_CTX_sessions.pod @@ -18,22 +18,26 @@ internal session cache for B. =head1 NOTES The sessions in the internal session cache are kept in an -L type database. It is possible to directly +L 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 -L operations, so that the database must not be +L operations, so that the database must not be modified directly but by using the L family of functions. +=head1 RETURN VALUES + +SSL_CTX_sessions() returns a pointer to the lhash of B. + =head1 SEE ALSO -L, L, +L, L, L, L =head1 COPYRIGHT -Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/SSL_CTX_set0_CA_list.pod b/doc/man3/SSL_CTX_set0_CA_list.pod new file mode 100644 index 00000000..0f8b7da7 --- /dev/null +++ b/doc/man3/SSL_CTX_set0_CA_list.pod @@ -0,0 +1,92 @@ +=pod + +=head1 NAME + +SSL_set0_CA_list, SSL_CTX_set0_CA_list, SSL_get0_CA_list, +SSL_CTX_get0_CA_list, SSL_add1_CA_list, SSL_CTX_add1_CA_list, +SSL_get0_peer_CA_list - get or set CA list + +=head1 SYNOPSIS + + #include + + 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_CA_list(SSL_CTX *ctx, const X509 *x); + int SSL_add1_CA_list(SSL *ssl, const X509 *x); + + const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +=head1 DESCRIPTION + +SSL_CTX_set0_CA_list() sets the list of CAs to be sent to the peer to +B. Ownership of B is transferred to B 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 B +overriding any list set in the parent B of B. Ownership of +B is transferred to B and it should not be freed by the caller. + +SSL_CTX_get0_CA_list() retrieves any previously set list of CAs set for +B. + +SSL_CTX_get0_CA_list() retrieves any previously set list of CAs set for +B or if none are set the list from the parent B is retrieved. + +SSL_CTX_add1_CA_list() appends the CA subject name extracted from B to the +list of CAs sent to peer for B. + +SSL_add1_CA_list() appends the CA subject name extracted from B to the +list of CAs sent to the peer for B, overriding the setting in the parent +B. + +SSL_get0_peer_CA_list() retrieves the list of CA names (if any) the peer +has sent. + +=head1 NOTES + +These functions are generalised versions of the client authentication +CA list functions such as L. + +For TLS versions before 1.3 the list of CA names is only sent from the server +to 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 B. + +For TLS 1.3 the list of CA names is sent using the B +extension and will be sent by a client (in the ClientHello message) or by +a server (when requesting a certificate). + +=head1 RETURN VALUES + +SSL_CTX_set0_CA_list() and SSL_set0_CA_list() do not return a value. + +SSL_CTX_get0_CA_list() and SSL_get0_CA_list() return a stack of CA names +or B is no CA names are set. + +SSL_CTX_add1_CA_list() and SSL_add1_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 +B or an empty stack if no list was sent. + +=head1 SEE ALSO + +L, +L, +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/man3/SSL_CTX_set1_curves.pod b/doc/man3/SSL_CTX_set1_curves.pod new file mode 100644 index 00000000..a250f20c --- /dev/null +++ b/doc/man3/SSL_CTX_set1_curves.pod @@ -0,0 +1,109 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SSL_CTX_set1_groups() sets the supported groups for B to B +groups in the array B. 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 B to +string B. 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 B. + +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 B parameter can be B to simply +return the number of groups for memory allocation purposes. The +B 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 B for a server-side +SSL B. If B 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 B is normally set to zero. If the value B 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. + +=head1 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. + +=head1 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 B or NID_undef if there +is no shared group B; or the total number of shared groups if B +is -1. + +When called on a client B, SSL_get_shared_group() has no meaning and +returns -1. + +=head1 SEE ALSO + +L + +=head1 HISTORY + +The curve functions were first added to OpenSSL 1.0.2. The equivalent group +functions were first added to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set1_sigalgs.pod b/doc/man3/SSL_CTX_set1_sigalgs.pod similarity index 82% rename from doc/ssl/SSL_CTX_set1_sigalgs.pod rename to doc/man3/SSL_CTX_set1_sigalgs.pod index e9073b99..93d5320d 100644 --- a/doc/ssl/SSL_CTX_set1_sigalgs.pod +++ b/doc/man3/SSL_CTX_set1_sigalgs.pod @@ -30,8 +30,10 @@ algorithms. SSL_CTX_set1_sigalgs_list() and SSL_set1_sigalgs_list() set the supported signature algorithms for B or B. The B parameter -must be a null terminated string consisting or a colon separated list of -public key algorithms and digests separated by B<+>. +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 B<+>, 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 @@ -70,11 +72,14 @@ 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_DSA and EVP_PKEY_EC. +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", "DSA" or "ECDSA". +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 B<_list> forms of the API. The use of MD5 as a digest is strongly discouraged due to security weaknesses. @@ -83,14 +88,14 @@ The use of MD5 as a digest is strongly discouraged due to security weaknesses. 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}; + const int slist[] = {NID_sha256, EVP_PKEY_EC, NID_sha256, EVP_PKEY_RSA}; - SSL_CTX_set1_sigalgs(ctx, slist, 4); + 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"); + SSL_CTX_set1_sigalgs_list(ctx, "ECDSA+SHA256:RSA+SHA256"); =head1 RETURN VALUES @@ -98,12 +103,12 @@ All these functions return 1 for success and 0 for failure. =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/ssl/SSL_CTX_set1_verify_cert_store.pod b/doc/man3/SSL_CTX_set1_verify_cert_store.pod similarity index 100% rename from doc/ssl/SSL_CTX_set1_verify_cert_store.pod rename to doc/man3/SSL_CTX_set1_verify_cert_store.pod diff --git a/doc/ssl/SSL_CTX_set_alpn_select_cb.pod b/doc/man3/SSL_CTX_set_alpn_select_cb.pod similarity index 100% rename from doc/ssl/SSL_CTX_set_alpn_select_cb.pod rename to doc/man3/SSL_CTX_set_alpn_select_cb.pod diff --git a/doc/ssl/SSL_CTX_set_cert_cb.pod b/doc/man3/SSL_CTX_set_cert_cb.pod similarity index 92% rename from doc/ssl/SSL_CTX_set_cert_cb.pod rename to doc/man3/SSL_CTX_set_cert_cb.pod index eaa7a4e3..fbe4f2ac 100644 --- a/doc/ssl/SSL_CTX_set_cert_cb.pod +++ b/doc/man3/SSL_CTX_set_cert_cb.pod @@ -8,7 +8,8 @@ SSL_CTX_set_cert_cb, SSL_set_cert_cb - handle certificate callback function #include - void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cert_cb)(SSL *ssl, void *arg), void *arg); + 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); @@ -58,16 +59,20 @@ 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 B be used. +=head1 RETURN VALUES + +SSL_CTX_set_cert_cb() and SSL_set_cert_cb() do not return values. + =head1 SEE ALSO -L, L, +L, L, L, L, L, L =head1 COPYRIGHT -Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/SSL_CTX_set_cert_store.pod b/doc/man3/SSL_CTX_set_cert_store.pod new file mode 100644 index 00000000..f1a54a69 --- /dev/null +++ b/doc/man3/SSL_CTX_set_cert_store.pod @@ -0,0 +1,89 @@ +=pod + +=head1 NAME + +SSL_CTX_set_cert_store, SSL_CTX_set1_cert_store, SSL_CTX_get_cert_store - manipulate X509 certificate verification storage + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SSL_CTX_set_cert_store() sets/replaces the certificate verification storage +of B to/with B. If another X509_STORE object is currently +set in B, it will be X509_STORE_free()ed. + +SSL_CTX_set1_cert_store() sets/replaces the certificate verification storage +of B to/with B. The B's reference count is incremented. +If another X509_STORE object is currently set in B, it will be X509_STORE_free()ed. + +SSL_CTX_get_cert_store() returns a pointer to the current certificate +verification storage. + +=head1 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 +L. +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 +L +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 +L 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 B'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. + +=head1 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. + +=head1 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. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_cert_verify_callback.pod b/doc/man3/SSL_CTX_set_cert_verify_callback.pod similarity index 87% rename from doc/ssl/SSL_CTX_set_cert_verify_callback.pod rename to doc/man3/SSL_CTX_set_cert_verify_callback.pod index af303f25..6a9c2389 100644 --- a/doc/ssl/SSL_CTX_set_cert_verify_callback.pod +++ b/doc/man3/SSL_CTX_set_cert_verify_callback.pod @@ -8,7 +8,9 @@ SSL_CTX_set_cert_verify_callback - set peer certificate verification procedure #include - void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, int (*callback)(X509_STORE_CTX *, void *), void *arg); + void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*callback)(X509_STORE_CTX *, void *), + void *arg); =head1 DESCRIPTION @@ -40,6 +42,10 @@ about the detailed result of the verification procedure! Within I, I has access to the I function set using L. +=head1 RETURN VALUES + +SSL_CTX_set_cert_verify_callback() does not return a value. + =head1 WARNINGS Do not mix the verification callback described in this function with the @@ -58,13 +64,13 @@ SSL_CTX_set_cert_verify_callback() does not provide diagnostic information. =head1 SEE ALSO -L, L, +L, L, L, L =head1 COPYRIGHT -Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/ssl/SSL_CTX_set_cipher_list.pod b/doc/man3/SSL_CTX_set_cipher_list.pod similarity index 98% rename from doc/ssl/SSL_CTX_set_cipher_list.pod rename to doc/man3/SSL_CTX_set_cipher_list.pod index 4e66917b..714bb3a8 100644 --- a/doc/ssl/SSL_CTX_set_cipher_list.pod +++ b/doc/man3/SSL_CTX_set_cipher_list.pod @@ -57,7 +57,7 @@ could be selected and 0 on complete failure. =head1 SEE ALSO -L, L, +L, L, L, L, L diff --git a/doc/ssl/SSL_CTX_set_client_CA_list.pod b/doc/man3/SSL_CTX_set_client_CA_list.pod similarity index 97% rename from doc/ssl/SSL_CTX_set_client_CA_list.pod rename to doc/man3/SSL_CTX_set_client_CA_list.pod index 0252e7b5..76fd65e6 100644 --- a/doc/ssl/SSL_CTX_set_client_CA_list.pod +++ b/doc/man3/SSL_CTX_set_client_CA_list.pod @@ -82,11 +82,11 @@ The operation succeeded. Scan all certificates in B and list them as acceptable CAs: - SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(CAfile)); + SSL_CTX_set_client_CA_list(ctx, SSL_load_client_CA_file(CAfile)); =head1 SEE ALSO -L, +L, L, L, L diff --git a/doc/ssl/SSL_CTX_set_client_cert_cb.pod b/doc/man3/SSL_CTX_set_client_cert_cb.pod similarity index 89% rename from doc/ssl/SSL_CTX_set_client_cert_cb.pod rename to doc/man3/SSL_CTX_set_client_cert_cb.pod index aed7d4f0..0dd147f9 100644 --- a/doc/ssl/SSL_CTX_set_client_cert_cb.pod +++ b/doc/man3/SSL_CTX_set_client_cert_cb.pod @@ -8,8 +8,11 @@ SSL_CTX_set_client_cert_cb, SSL_CTX_get_client_cert_cb - handle client certifica #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); + 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); =head1 DESCRIPTION @@ -60,6 +63,11 @@ object. It will not be reset by calling L. If the callback returns no certificate, the OpenSSL library will not send a certificate. +=head1 RETURN VALUES + +SSL_CTX_get_client_cert_cb() returns function pointer of client_cert_cb() or +NULL if the callback is not set. + =head1 BUGS The client_cert_cb() cannot return a complete certificate chain, it can @@ -86,14 +94,14 @@ and create a new one to return to the previous state. =head1 SEE ALSO -L, L, +L, L, L, L, L, L =head1 COPYRIGHT -Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/SSL_CTX_set_client_hello_cb.pod b/doc/man3/SSL_CTX_set_client_hello_cb.pod new file mode 100644 index 00000000..6824b5b8 --- /dev/null +++ b/doc/man3/SSL_CTX_set_client_hello_cb.pod @@ -0,0 +1,130 @@ +=pod + +=head1 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 + +=head1 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); + +=head1 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 B parameter. A callback may +also return a negative value to suspend the handshake, and the handshake +function will return immediately. L 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 B and B parameters are +both required, and on success the caller must release the storage allocated for +B<*out> using OPENSSL_free(). The contents of B<*out> is an array of integers +holding the numerical value of the TLS extension types in the order they appear +in the ClientHello. B<*outlen> contains the number of elements in the array. + +=head1 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. + +=head1 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. + +=head1 SEE ALSO + +L, L, +L + +=head1 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. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_ct_validation_callback.pod b/doc/man3/SSL_CTX_set_ct_validation_callback.pod similarity index 99% rename from doc/ssl/SSL_CTX_set_ct_validation_callback.pod rename to doc/man3/SSL_CTX_set_ct_validation_callback.pod index afa45dc9..a0a8028f 100644 --- a/doc/ssl/SSL_CTX_set_ct_validation_callback.pod +++ b/doc/man3/SSL_CTX_set_ct_validation_callback.pod @@ -78,7 +78,7 @@ 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) ciphersuite. +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 diff --git a/doc/ssl/SSL_CTX_set_ctlog_list_file.pod b/doc/man3/SSL_CTX_set_ctlog_list_file.pod similarity index 99% rename from doc/ssl/SSL_CTX_set_ctlog_list_file.pod rename to doc/man3/SSL_CTX_set_ctlog_list_file.pod index 4a2fa946..275831ab 100644 --- a/doc/ssl/SSL_CTX_set_ctlog_list_file.pod +++ b/doc/man3/SSL_CTX_set_ctlog_list_file.pod @@ -37,7 +37,7 @@ the case of an error, the log list may have been partially loaded. =head1 SEE ALSO -L, +L, L, L diff --git a/doc/ssl/SSL_CTX_set_default_passwd_cb.pod b/doc/man3/SSL_CTX_set_default_passwd_cb.pod similarity index 97% rename from doc/ssl/SSL_CTX_set_default_passwd_cb.pod rename to doc/man3/SSL_CTX_set_default_passwd_cb.pod index 21969061..c7bdc9b9 100644 --- a/doc/ssl/SSL_CTX_set_default_passwd_cb.pod +++ b/doc/man3/SSL_CTX_set_default_passwd_cb.pod @@ -85,9 +85,9 @@ truncated. int my_cb(char *buf, int size, int rwflag, void *u) { - strncpy(buf, (char *)u, size); - buf[size - 1] = '\0'; - return strlen(buf); + strncpy(buf, (char *)u, size); + buf[size - 1] = '\0'; + return strlen(buf); } =head1 HISTORY @@ -98,7 +98,7 @@ first added to OpenSSL 1.1.0 =head1 SEE ALSO -L, +L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_set_ex_data.pod b/doc/man3/SSL_CTX_set_ex_data.pod similarity index 100% rename from doc/ssl/SSL_CTX_set_ex_data.pod rename to doc/man3/SSL_CTX_set_ex_data.pod diff --git a/doc/ssl/SSL_CTX_set_generate_session_id.pod b/doc/man3/SSL_CTX_set_generate_session_id.pod similarity index 84% rename from doc/ssl/SSL_CTX_set_generate_session_id.pod rename to doc/man3/SSL_CTX_set_generate_session_id.pod index 1b1171fe..2bee351a 100644 --- a/doc/ssl/SSL_CTX_set_generate_session_id.pod +++ b/doc/man3/SSL_CTX_set_generate_session_id.pod @@ -91,28 +91,27 @@ server id given, and will fill the rest with pseudo random bytes: #define MAX_SESSION_ID_ATTEMPTS 10 static int generate_session_id(const SSL *ssl, unsigned char *id, - unsigned int *id_len) + 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; - } + 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; + } =head1 RETURN VALUES diff --git a/doc/ssl/SSL_CTX_set_info_callback.pod b/doc/man3/SSL_CTX_set_info_callback.pod similarity index 76% rename from doc/ssl/SSL_CTX_set_info_callback.pod rename to doc/man3/SSL_CTX_set_info_callback.pod index f36f217e..f4d91283 100644 --- a/doc/ssl/SSL_CTX_set_info_callback.pod +++ b/doc/man3/SSL_CTX_set_info_callback.pod @@ -110,44 +110,38 @@ The following example callback function prints state strings, information about alerts being handled and error messages to the B BIO. void apps_ssl_info_callback(SSL *s, int where, int ret) - { - const char *str; - int w; + { + const char *str; + int w = where & ~SSL_ST_MASK; - 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 (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)); - } - } - } + 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)); + } + } + } =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/man3/SSL_CTX_set_keylog_callback.pod b/doc/man3/SSL_CTX_set_keylog_callback.pod new file mode 100644 index 00000000..9e0127f9 --- /dev/null +++ b/doc/man3/SSL_CTX_set_keylog_callback.pod @@ -0,0 +1,52 @@ +=pod + +=head1 NAME + +SSL_CTX_set_keylog_callback, SSL_CTX_get_keylog_callback, +SSL_CTX_keylog_cb_func - logging TLS key material + +=head1 SYNOPSIS + + #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); + +=head1 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 B object associated +with the connection, and B, a string containing the key material in the +format used by NSS for its B debugging output. To recreate that +file, the key logging callback should log B, followed by a newline. +B will always be a NULL-terminated string. + +=head1 RETURN VALUES + +SSL_CTX_get_keylog_callback() returns a pointer to B or +NULL if the callback is not set. + +=head1 SEE ALSO + +L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_max_cert_list.pod b/doc/man3/SSL_CTX_set_max_cert_list.pod similarity index 99% rename from doc/ssl/SSL_CTX_set_max_cert_list.pod rename to doc/man3/SSL_CTX_set_max_cert_list.pod index 482751e7..01936c58 100644 --- a/doc/ssl/SSL_CTX_set_max_cert_list.pod +++ b/doc/man3/SSL_CTX_set_max_cert_list.pod @@ -67,7 +67,7 @@ set value. =head1 SEE ALSO -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_set_min_proto_version.pod b/doc/man3/SSL_CTX_set_min_proto_version.pod similarity index 95% rename from doc/ssl/SSL_CTX_set_min_proto_version.pod rename to doc/man3/SSL_CTX_set_min_proto_version.pod index ff080e48..45866588 100644 --- a/doc/ssl/SSL_CTX_set_min_proto_version.pod +++ b/doc/man3/SSL_CTX_set_min_proto_version.pod @@ -39,8 +39,8 @@ Getters return 0 in case B or B have been configured to automatically use the lowest or highest version supported by the library. Currently supported versions are B, B, -B, B for TLS and B, -B for DTLS. +B, B, B for TLS and +B, B for DTLS. =head1 RETURN VALUES diff --git a/doc/man3/SSL_CTX_set_mode.pod b/doc/man3/SSL_CTX_set_mode.pod new file mode 100644 index 00000000..e83b5918 --- /dev/null +++ b/doc/man3/SSL_CTX_set_mode.pod @@ -0,0 +1,116 @@ +=pod + +=head1 NAME + +SSL_CTX_set_mode, SSL_set_mode, SSL_CTX_get_mode, SSL_get_mode - manipulate SSL engine mode + +=head1 SYNOPSIS + + #include + + long SSL_CTX_set_mode(SSL_CTX *ctx, long mode); + long SSL_set_mode(SSL *ssl, long mode); + + long SSL_CTX_get_mode(SSL_CTX *ctx); + long SSL_get_mode(SSL *ssl); + +=head1 DESCRIPTION + +SSL_CTX_set_mode() adds the mode set via bitmask in B to B. +Options already set before are not cleared. + +SSL_set_mode() adds the mode set via bitmask in B to B. +Options already set before are not cleared. + +SSL_CTX_get_mode() returns the mode set for B. + +SSL_get_mode() returns the mode set for B. + +=head1 NOTES + +The following mode changes are available: + +=over 4 + +=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 +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, B 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(). + +=item 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(). + +=item SSL_MODE_AUTO_RETRY + +Never bother the application with retries if the transport is blocking. +If a renegotiation take place during normal operation, a +L, L, L or L would +return with a failure and indicate the need to retry with SSL_ERROR_WANT_READ. +In a non-blocking environment applications must be prepared to handle +incomplete read/write operations. +In a blocking environment, applications are not always prepared to +deal with read/write operations returning without success report. The +flag SSL_MODE_AUTO_RETRY will cause read/write operations to only +return after the handshake and successful completion. + +=item 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. + +=item 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. + +=item 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 L. + +=back + +=head1 RETURN VALUES + +SSL_CTX_set_mode() and SSL_set_mode() return the new mode bitmask +after adding B. + +SSL_CTX_get_mode() and SSL_get_mode() return the current bitmask. + +=head1 SEE ALSO + +L, L, L, L or +L, L + +=head1 HISTORY + +SSL_MODE_ASYNC was first added to OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/man3/SSL_CTX_set_msg_callback.pod b/doc/man3/SSL_CTX_set_msg_callback.pod new file mode 100644 index 00000000..bbc78b64 --- /dev/null +++ b/doc/man3/SSL_CTX_set_msg_callback.pod @@ -0,0 +1,143 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SSL_CTX_set_msg_callback() or SSL_set_msg_callback() can be used to +define a message callback function I 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 I 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 B objects by +L. SSL_set_msg_callback() and +SSL_set_msg_callback_arg() modify the actual settings of an B +object. Using a B pointer for I disables the message callback. + +When I is called by the SSL/TLS library the function arguments have the +following meaning: + +=over 4 + +=item I + +This flag is B<0> when a protocol message has been received and B<1> +when a protocol message has been sent. + +=item I + +The protocol version according to which the protocol message is +interpreted by the library such as B, B etc. +This is set to 0 for the SSL3_RT_HEADER pseudo content type (see NOTES below). + +=item I + +This is one of the content type values defined in the protocol specification +(B, B, B; but never +B 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). + +=item I, I + +I points to a buffer containing the protocol message or other data (in the +case of pseudo content types), which consists of I bytes. The buffer is no +longer valid after the callback function has returned. + +=item I + +The B object that received or sent the message. + +=item I + +The user-defined argument optionally defined by +SSL_CTX_set_msg_callback_arg() or SSL_set_msg_callback_arg(). + +=back + +=head1 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, I 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, +I will be B. + +Pseudo content type values may be sent at various points during the processing +of data. The following pseudo content types are currently defined: + +=over 4 + +=item B + +Used when a record is sent or received. The B contains the record header +bytes only. + +=item B + +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. B contains the encoded "inner" content type byte. + +=back + +=head1 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. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +The pseudo content type B was added in OpenSSL +1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_options.pod b/doc/man3/SSL_CTX_set_options.pod similarity index 81% rename from doc/ssl/SSL_CTX_set_options.pod rename to doc/man3/SSL_CTX_set_options.pod index 241aeb3c..0d510773 100644 --- a/doc/ssl/SSL_CTX_set_options.pod +++ b/doc/man3/SSL_CTX_set_options.pod @@ -62,27 +62,11 @@ The following B options are available: =over 4 -=item SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG - -... - -=item SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER - -... - =item 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. -=item SSL_OP_SSLEAY_080_CLIENT_DH_BUG - -... - -=item SSL_OP_TLS_D5_BUG - -... - =item SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS Disables a countermeasure against a SSL 3.0/TLS 1.0 protocol @@ -98,7 +82,8 @@ implementations. =item SSL_OP_ALL -All of the above bug workarounds. +All of the above bug workarounds plus B as +mentioned below. =back @@ -122,22 +107,6 @@ 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.) -=item SSL_OP_SINGLE_DH_USE - -Always create a new key when using temporary/ephemeral DH parameters -(see L). -This option must be used to prevent small subgroup attacks, when -the DH parameters were not generated using "strong" primes -(e.g. when using DSA-parameters, see L). -If "strong" primes were used, it is not strictly necessary to generate -a new DH key during each handshake but it is also recommended. -B should therefore be enabled whenever -temporary/ephemeral DH parameters are used. - -=item SSL_OP_EPHEMERAL_RSA - -This option is no longer implemented and is treated as no op. - =item SSL_OP_CIPHER_SERVER_PREFERENCE When choosing a cipher, use the server's preferences instead of the client @@ -145,19 +114,10 @@ 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. -=item SSL_OP_PKCS1_CHECK_1 - -... - -=item SSL_OP_PKCS1_CHECK_2 - -... - - =item SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1, SSL_OP_NO_TLSv1_1, -SSL_OP_NO_TLSv1_2, SSL_OP_NO_DTLSv1, SSL_OP_NO_DTLSv1_2 +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 or TLSv1.2 protocol +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 @@ -170,6 +130,19 @@ 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. +=item SSL_OP_NO_COMPRESSION + +Do not use compression even if it is supported. + +=item SSL_OP_NO_QUERY_MTU + +Do not query the MTU. Only affects DTLS connections. + +=item SSL_OP_COOKIE_EXCHANGE + +Turn on Cookie Exchange as described in RFC4347 Section 4.2.1. Only affects +DTLS connections. + =item SSL_OP_NO_TICKET Normally clients and servers will, where possible, transparently make use @@ -202,6 +175,64 @@ propose, and servers will not accept the extension. Disable all renegotiation in TLSv1.2 and earlier. Do not send HelloRequest messages, and ignore renegotiation requests via ClientHello. +=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. + +=item 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 B. + +=item 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. + +=back + +The following options no longer have any effect but their identifiers are +retained for compatibility purposes: + +=over 4 + +=item SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG + +=item SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER + +=item SSL_OP_SSLEAY_080_CLIENT_DH_BUG + +=item SSL_OP_TLS_D5_BUG + +=item SSL_OP_TLS_BLOCK_PADDING_BUG + +=item SSL_OP_MSIE_SSLV2_RSA_PADDING + +=item SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG + +=item SSL_OP_MICROSOFT_SESS_ID_BUG + +=item SSL_OP_NETSCAPE_CHALLENGE_BUG + +=item SSL_OP_PKCS1_CHECK_1 + +=item SSL_OP_PKCS1_CHECK_2 + +=item SSL_OP_SINGLE_DH_USE + +=item SSL_OP_SINGLE_ECDH_USE + +=item SSL_OP_EPHEMERAL_RSA + =back =head1 SECURE RENEGOTIATION @@ -283,7 +314,7 @@ secure renegotiation and 0 if it does not. =head1 SEE ALSO -L, L, L, +L, L, L, L, L, L @@ -293,7 +324,8 @@ L The attempt to always try to use secure renegotiation was added in Openssl 0.9.8m. -B was added in OpenSSL 1.1.0h. +B and B were added in +OpenSSL 1.1.1. =head1 COPYRIGHT diff --git a/doc/man3/SSL_CTX_set_psk_client_callback.pod b/doc/man3/SSL_CTX_set_psk_client_callback.pod new file mode 100644 index 00000000..e771072f --- /dev/null +++ b/doc/man3/SSL_CTX_set_psk_client_callback.pod @@ -0,0 +1,156 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #include + + 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); + 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_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); + + 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); + +=head1 DESCRIPTION + +TLSv1.3 Pre-Shared Keys (PSKs) and PSKs for TLSv1.2 and below are not +compatible. + +A client application wishing to use PSK ciphersuites for TLSv1.2 and below must +provide a 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 B, a B-terminated PSK identity hint +sent by the server in parameter B, a buffer B of +length B bytes where the resulting +B-terminated identity is to be stored, and a buffer B of +length B bytes where the resulting pre-shared key is to +be stored. + +A client application wishing to use TLSv1.3 PSKs must set a different callback +using either SSL_CTX_set_psk_use_session_callback() or +SSL_set_psk_use_session_callback() as appropriate. + +The callback function is given a pointer to the SSL connection in B. + +The first time the callback is called for a connection the B 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 B. 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 B<*id>. The identifier length in bytes should be stored in B<*idlen>. +The memory pointed to by B<*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 +B<*sess>. This is used as the basis for the PSK, and should, at a minimum, have +the following fields set: + +=over 4 + +=item The master key + +This can be set via a call to L. + +=item 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 B is +not NULL the handshake digest for the ciphersuite should be the same. +The ciphersuite can be set via a call to . The +handshake digest of an SSL_CIPHER object can be checked using +. + +=item The protocol version + +This can be set via a call to L and should +be TLS1_3_VERSION. + +=back + +Additionally the maximum early data value should be set via a call to +L 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 B<*sess> is +NULL. The contents of B<*id> and B<*idlen> will be ignored. + +=head1 NOTES + +Note that parameter B given to the callback may be B. + +A connection established via a TLSv1.3 PSK will appear as if session resumption +has occurred so that L will return true. + +=head1 RETURN VALUES + +Return values from the B callback are interpreted as +follows: + +On success (callback found a PSK identity and a pre-shared key to use) +the length (> 0) of B 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. + +=head1 SEE ALSO + +L, +L + +=head1 HISTORY + +SSL_CTX_set_psk_use_session_callback() and SSL_set_psk_use_session_callback() +were added in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_quiet_shutdown.pod b/doc/man3/SSL_CTX_set_quiet_shutdown.pod similarity index 98% rename from doc/ssl/SSL_CTX_set_quiet_shutdown.pod rename to doc/man3/SSL_CTX_set_quiet_shutdown.pod index d39d747c..99922eb5 100644 --- a/doc/ssl/SSL_CTX_set_quiet_shutdown.pod +++ b/doc/man3/SSL_CTX_set_quiet_shutdown.pod @@ -56,7 +56,7 @@ setting. =head1 SEE ALSO -L, L, +L, L, L, L, L, L diff --git a/doc/ssl/SSL_CTX_set_read_ahead.pod b/doc/man3/SSL_CTX_set_read_ahead.pod similarity index 98% rename from doc/ssl/SSL_CTX_set_read_ahead.pod rename to doc/man3/SSL_CTX_set_read_ahead.pod index bea83900..3a96ce3c 100644 --- a/doc/ssl/SSL_CTX_set_read_ahead.pod +++ b/doc/man3/SSL_CTX_set_read_ahead.pod @@ -46,7 +46,7 @@ and non zero otherwise. =head1 SEE ALSO -L, L +L, L =head1 COPYRIGHT diff --git a/doc/man3/SSL_CTX_set_record_padding_callback.pod b/doc/man3/SSL_CTX_set_record_padding_callback.pod new file mode 100644 index 00000000..d0b2e30f --- /dev/null +++ b/doc/man3/SSL_CTX_set_record_padding_callback.pod @@ -0,0 +1,96 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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(SSL_CTX *ctx); + + void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); + void *SSL_get_record_padding_callback_arg(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); + +=head1 DESCRIPTION + +SSL_CTX_set_record_padding_callback() or SSL_set_record_padding_callback() +can be used to assign a callback function I to specify the padding +for TLS 1.3 records. The value set in B 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 B that is passed to the callback when it is invoked. The value +set in B 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 B 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 B. A B of 0 or 1 disables block padding. The limit of +B is SSL3_RT_MAX_PLAIN_LENGTH. + +The callback is invoked for every record before encryption. +The B 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 B parameter is the current plaintext length of the record before encryption. +The B parameter is the value set via SSL_CTX_set_record_padding_callback_arg() +or SSL_set_record_padding_callback_arg(). + +=head1 RETURN VALUES + +The SSL_CTX_get_record_padding_callback_arg() and SSL_get_record_padding_callback_arg() +functions return the B 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 B is too large. + +The B 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. + +=head1 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. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +The record padding API was added for TLS 1.3 support in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/SSL_CTX_set_security_level.pod b/doc/man3/SSL_CTX_set_security_level.pod new file mode 100644 index 00000000..8baaaffe --- /dev/null +++ b/doc/man3/SSL_CTX_set_security_level.pod @@ -0,0 +1,190 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +The functions SSL_CTX_set_security_level() and SSL_set_security_level() set +the security level to B. 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 B or B. 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 B parameter of the callback. This +value is passed to the callback verbatim and can be set to any convenient +application specific value. + +=head1 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. + +=over 4 + +=item B + +Everything is permitted. This retains compatibility with previous versions of +OpenSSL. + +=item B + +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. + +=item B + +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. + +=item B + +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. + +=item B + +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. + +=item B + +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. + +=back + +=head1 APPLICATION DEFINED SECURITY CALLBACKS + +I + +=head1 NOTES + +B at this time setting the security level higher than 1 for +general internet use is likely to cause B interoperability +issues and is not recommended. This is because the B algorithm +is very widely used in certificates and will be rejected at levels +higher than 1 because it only offers 80 bits of security. + +The default security level can be configured when OpenSSL is compiled by +setting B<-DOPENSSL_TLS_SECURITY_LEVEL=level>. If not set then 1 is used. + +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 B +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. + +=head1 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 B or B, 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. + +=head1 HISTORY + +These functions were first added to OpenSSL 1.1.0 + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_session_cache_mode.pod b/doc/man3/SSL_CTX_set_session_cache_mode.pod similarity index 99% rename from doc/ssl/SSL_CTX_set_session_cache_mode.pod rename to doc/man3/SSL_CTX_set_session_cache_mode.pod index b2370768..18c9783f 100644 --- a/doc/ssl/SSL_CTX_set_session_cache_mode.pod +++ b/doc/man3/SSL_CTX_set_session_cache_mode.pod @@ -119,7 +119,7 @@ SSL_CTX_get_session_cache_mode() returns the currently set cache mode. =head1 SEE ALSO -L, L, +L, L, L, L, L, diff --git a/doc/ssl/SSL_CTX_set_session_id_context.pod b/doc/man3/SSL_CTX_set_session_id_context.pod similarity index 99% rename from doc/ssl/SSL_CTX_set_session_id_context.pod rename to doc/man3/SSL_CTX_set_session_id_context.pod index a873b038..d8323509 100644 --- a/doc/ssl/SSL_CTX_set_session_id_context.pod +++ b/doc/man3/SSL_CTX_set_session_id_context.pod @@ -78,7 +78,7 @@ The operation succeeded. =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/man3/SSL_CTX_set_split_send_fragment.pod b/doc/man3/SSL_CTX_set_split_send_fragment.pod new file mode 100644 index 00000000..ef5e7cda --- /dev/null +++ b/doc/man3/SSL_CTX_set_split_send_fragment.pod @@ -0,0 +1,188 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 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 +B 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 L). 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 +B. + +For example if B is set to 2000 and B 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 + +B must always be less than or equal to +B. By default it is set to be equal to B. +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 B to a value greater than one, B +is automatically set. The B 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 B can impact the behaviour of the SSL_pending() +function (see L). + +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 B +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 B to B. +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 B to B. +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 B. + +=head1 RETURN VALUES + +All non-void functions return 1 on success and 0 on failure. + +=head1 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: + +=over 4 + +=item TLSEXT_max_fragment_length_DISABLED + +Disables Maximum Fragment Length Negotiation (default). + +=item TLSEXT_max_fragment_length_512 + +Sets Maximum Fragment Length to 512 bytes. + +=item TLSEXT_max_fragment_length_1024 + +Sets Maximum Fragment Length to 1024. + +=item TLSEXT_max_fragment_length_2048 + +Sets Maximum Fragment Length to 2048. + +=item TLSEXT_max_fragment_length_4096 + +Sets Maximum Fragment Length to 4096. + +=back + +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. + +=head1 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. + +SSL_CTX_set_tlsext_max_fragment_length(), SSL_set_tlsext_max_fragment_length() +and SSL_SESSION_get_max_fragment_length() were added in OpenSSL 1.1.1. + +=head1 SEE ALSO + +L, L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_ssl_version.pod b/doc/man3/SSL_CTX_set_ssl_version.pod similarity index 98% rename from doc/ssl/SSL_CTX_set_ssl_version.pod rename to doc/man3/SSL_CTX_set_ssl_version.pod index 22c0370b..901c057f 100644 --- a/doc/ssl/SSL_CTX_set_ssl_version.pod +++ b/doc/man3/SSL_CTX_set_ssl_version.pod @@ -55,7 +55,7 @@ The operation succeeded. =head1 SEE ALSO L, L, -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_CTX_set_timeout.pod b/doc/man3/SSL_CTX_set_timeout.pod similarity index 99% rename from doc/ssl/SSL_CTX_set_timeout.pod rename to doc/man3/SSL_CTX_set_timeout.pod index 470efdfc..c32585e4 100644 --- a/doc/ssl/SSL_CTX_set_timeout.pod +++ b/doc/man3/SSL_CTX_set_timeout.pod @@ -50,7 +50,7 @@ SSL_CTX_get_timeout() returns the currently set timeout value. =head1 SEE ALSO -L, +L, L, L, L, diff --git a/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod b/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod new file mode 100644 index 00000000..b1fb5ab7 --- /dev/null +++ b/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod @@ -0,0 +1,77 @@ +=pod + +=head1 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) + +=head1 SYNOPSIS + + #include + + long SSL_CTX_set_tlsext_servername_callback(SSL_CTX *ctx, + int (*cb)(SSL *, int *, void *)); + 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); + +=head1 DESCRIPTION + +The functionality provided by the servername callback is superseded by the +ClientHello callback, which can be set using SSL_CTX_set_client_hello_cb(). +The servername callback is retained for historical compatibility. + +SSL_CTX_set_tlsext_servername_callback() sets the application callback B +used by a server to perform any actions or configuration required based on +the servername extension received in the incoming connection. When B +is NULL, SNI is not used. The B value is a pointer which is passed to +the application callback. + +SSL_CTX_set_tlsext_servername_arg() sets a context-specific argument to be +passed into the callback for this B. + +SSL_get_servername() returns a servername extension value of the specified +type if provided in the Client Hello or NULL. + +SSL_get_servername_type() returns the servername type or -1 if no servername +is present. Currently the only supported type (defined in RFC3546) is +B. + +SSL_set_tlsext_host_name() sets the server name indication ClientHello extension +to contain the value B. The type of server name indication extension is set +to B (defined in RFC3546). + +=head1 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 B will be ignored. + +=head1 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. + +=head1 SEE ALSO + +L, L, +L, L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod b/doc/man3/SSL_CTX_set_tlsext_status_cb.pod similarity index 95% rename from doc/ssl/SSL_CTX_set_tlsext_status_cb.pod rename to doc/man3/SSL_CTX_set_tlsext_status_cb.pod index c12ff0e5..d6c04ece 100644 --- a/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod +++ b/doc/man3/SSL_CTX_set_tlsext_status_cb.pod @@ -18,10 +18,8 @@ SSL_set_tlsext_status_ocsp_resp #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_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); diff --git a/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod b/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod new file mode 100644 index 00000000..3cf0717d --- /dev/null +++ b/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod @@ -0,0 +1,200 @@ +=pod + +=head1 NAME + +SSL_CTX_set_tlsext_ticket_key_cb - set a callback for session ticket processing + +=head1 SYNOPSIS + + #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)); + +=head1 DESCRIPTION + +SSL_CTX_set_tlsext_ticket_key_cb() sets a callback function I for handling +session tickets for the ssl context I. 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 I 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 I and I have been +initialised with EVP_CIPHER_CTX_init and HMAC_CTX_init 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 I equal to 1. The OpenSSL +library expects that the function will set an arbitrary I, initialize +I, and set the cipher context I and the hash context I. + +The I is 16 characters long and is used as a key identifier. + +The I length is the length of the IV of the corresponding cipher. The +maximum IV length is B bytes defined in B. + +The initialization vector I should be a random value. The cipher context +I should use the initialisation vector I. The cipher context can be +set using L. The hmac context can be set using +L. + +When the client presents a session ticket, the callback function with be called +with I set to 0 indicating that the I function should retrieve a set +of parameters. In this case I and I have already been parsed out of +the session ticket. The OpenSSL library expects that the I will be used +to retrieve a cryptographic parameters and that the cryptographic context +I will be set with the retrieved parameters and the initialization vector +I. using a function like L. The I needs to be +set using L. + +If the I 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 I function is used by OpenSSL to determine what +further processing will occur. The following return values have meaning: + +=over 4 + +=item Z<>2 + +This indicates that the I and I 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 I again with an enc argument of 1 to set the new ticket (see RFC5077 +3.3 paragraph 2). + +=item Z<>1 + +This indicates that the I and I have been set and the session can +continue on those parameters. + +=item Z<>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 I again to get +a new set of parameters. + +=item less than 0 + +This indicates an error. + +=back + +=head1 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. + +=head1 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)) + 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; + } + } + +=head1 RETURN VALUES + +returns 0 to indicate the callback function was set. + +=head1 SEE ALSO + +L, L, +L, +L, +L, +L, +L, + +=head1 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 +L. + +=cut diff --git a/doc/crypto/SSL_CTX_set_tlsext_use_srtp.pod b/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod similarity index 100% rename from doc/crypto/SSL_CTX_set_tlsext_use_srtp.pod rename to doc/man3/SSL_CTX_set_tlsext_use_srtp.pod diff --git a/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod b/doc/man3/SSL_CTX_set_tmp_dh_callback.pod similarity index 84% rename from doc/ssl/SSL_CTX_set_tmp_dh_callback.pod rename to doc/man3/SSL_CTX_set_tmp_dh_callback.pod index fbfb8cba..a2ac1c0a 100644 --- a/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod +++ b/doc/man3/SSL_CTX_set_tmp_dh_callback.pod @@ -9,11 +9,13 @@ SSL_CTX_set_tmp_dh_callback, SSL_CTX_set_tmp_dh, SSL_set_tmp_dh_callback, SSL_se #include void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, - DH *(*tmp_dh_callback)(SSL *ssl, int is_export, int keylength)); + 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)); + DH *(*tmp_dh_callback)(SSL *ssl, int is_export, + int keylength)); long SSL_set_tmp_dh(SSL *ssl, DH *dh) =head1 DESCRIPTION @@ -74,7 +76,7 @@ can supply the DH parameters via a callback function. Previous versions of the callback used B and B parameters to control parameter generation for export and non-export -cipher suites. Modern servers that do not support export ciphersuites +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 B and B and simply supply at least 2048-bit parameters in the callback. @@ -84,31 +86,27 @@ supply at least 2048-bit parameters in the callback. Setup DH parameters with a key length of 2048 bits. (Error handling partly left out.) - Command-line parameter generation: +Command-line parameter generation: + $ openssl dhparam -out dh_param_2048.pem 2048 - Code for setting up parameters during server initialization: +Code for setting up parameters during server initialization: - ... SSL_CTX ctx = SSL_CTX_new(); - ... - /* Set up ephemeral DH parameters. */ DH *dh_2048 = NULL; - FILE *paramfile; - paramfile = fopen("dh_param_2048.pem", "r"); + FILE *paramfile = fopen("dh_param_2048.pem", "r"); + if (paramfile) { - dh_2048 = PEM_read_DHparams(paramfile, NULL, NULL, NULL); - fclose(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. */ + /* Error. */ } + if (dh_2048 == NULL) + /* Error. */ + if (SSL_CTX_set_tmp_dh(ctx, dh_2048) != 1) + /* Error. */ ... =head1 RETURN VALUES @@ -121,7 +119,7 @@ on failure. Check the error queue to find out the reason of failure. =head1 SEE ALSO -L, L, +L, L, L, L, L diff --git a/doc/man3/SSL_CTX_set_verify.pod b/doc/man3/SSL_CTX_set_verify.pod new file mode 100644 index 00000000..71655479 --- /dev/null +++ b/doc/man3/SSL_CTX_set_verify.pod @@ -0,0 +1,355 @@ +=pod + +=head1 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_force_post_handshake_auth +- set peer certificate verification parameters + +=head1 SYNOPSIS + + #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_force_post_handshake_auth(SSL *ssl); + +=head1 DESCRIPTION + +SSL_CTX_set_verify() sets the verification flags for B to be B and +specifies the B function to be used. If no callback function +shall be specified, the NULL pointer can be used for B. + +SSL_set_verify() sets the verification flags for B to be B and +specifies the B function to be used. If no callback function +shall be specified, the NULL pointer can be used for B. In +this case last B set specifically for this B remains. If +no special B was set before, the default callback for the underlying +B is used, that was valid at the time B was created with +L. Within the callback function, +B 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 B for the certificate chain +verification that shall be allowed for B. + +SSL_set_verify_depth() sets the maximum B for the certificate chain +verification that shall be allowed for B. + +SSL_force_post_handshake_auth() forces the Post-Handshake Authentication +extension to be added to the ClientHello regardless of certificate configuration +at the time of the initial handshake, such that post-handshake authentication +can be requested by the server. 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 B connection. The SSL_VERIFY_PEER flag must +be set; the SSL_VERIFY_POST_HANDSHAKE flag is optional. + +=head1 NOTES + +The verification of certificates can be controlled by a set of logically +or'ed B flags: + +=over 4 + +=item SSL_VERIFY_NONE + +B the server will not send a client certificate request to the +client, so the client will not send a certificate. + +B 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 L function. +The handshake will be continued regardless of the verification result. + +=item SSL_VERIFY_PEER + +B 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. + +B 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. + +=item SSL_VERIFY_FAIL_IF_NO_PEER_CERT + +B 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. + +B ignored + +=item SSL_VERIFY_CLIENT_ONCE + +B 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. + +B ignored + +=item SSL_VERIFY_POST_HANDSHAKE + +B 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. + +B ignored + +=back + +If the B 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 +L. +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 B. If the +certificate chain needed to reach a trusted issuer is longer than B, +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 B 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: B indicates, whether the verification of +the certificate in question was passed (preverify_ok=1) or not +(preverify_ok=0). B 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 B +and B is called with B=0. By applying +X509_CTX_store_* functions B can locate the certificate +in question and perform additional steps (see EXAMPLES). If no error is +found for a certificate, B is called with B=1 +before advancing to the next level. + +The return value of B controls the strategy of the further +verification process. If B 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 B returns 1, +the verification process is continued. If B 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 +L or by maintaining its +own error storage managed by B. + +If no B is specified, the default callback will be used. +Its return value is identical to B, 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_force_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. + +=head1 BUGS + +In client mode, it is not checked whether the SSL_VERIFY_PEER flag +is set, but whether any flags are set. This can lead to +unexpected behaviour if SSL_VERIFY_PEER and other flags are not used as +required. + +=head1 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. + +=head1 EXAMPLES + +The following code sequence realizes an example B 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 L, +L). + + ... + 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 */ + } + } + +=head1 SEE ALSO + +L, L, +L, +L, +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +The SSL_VERIFY_POST_HANDSHAKE option, and the SSL_verify_client_post_handshake() +and SSL_force_post_handshake_auth() functions were added in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_CTX_use_certificate.pod b/doc/man3/SSL_CTX_use_certificate.pod similarity index 98% rename from doc/ssl/SSL_CTX_use_certificate.pod rename to doc/man3/SSL_CTX_use_certificate.pod index c645f580..22420f97 100644 --- a/doc/ssl/SSL_CTX_use_certificate.pod +++ b/doc/man3/SSL_CTX_use_certificate.pod @@ -103,7 +103,7 @@ SSL_use_PrivateKey_ASN1() and SSL_use_RSAPrivateKey_ASN1() add the private key to B. SSL_CTX_use_PrivateKey_file() adds the first private key found in -B to B. The formatting B of the certificate must be specified +B to B. The formatting B 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 B to B. SSL_use_PrivateKey_file() adds the first private key found @@ -160,7 +160,7 @@ Otherwise check out the error stack to find out the reason. =head1 SEE ALSO -L, L, L, +L, L, L, L, L, L, diff --git a/doc/man3/SSL_CTX_use_psk_identity_hint.pod b/doc/man3/SSL_CTX_use_psk_identity_hint.pod new file mode 100644 index 00000000..d41c0cce --- /dev/null +++ b/doc/man3/SSL_CTX_use_psk_identity_hint.pod @@ -0,0 +1,137 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #include + + typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); + + typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); + + 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); + + 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); + +=head1 DESCRIPTION + +TLSv1.3 Pre-Shared Keys (PSKs) and PSKs for TLSv1.2 and below are not +compatible. + +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 B-terminated PSK identity hint B for SSL context +object B. SSL_use_psk_identity_hint() sets the given B-terminated PSK +identity hint B for the SSL connection object B. If B is +B the current hint from B or B is deleted. + +In the case where PSK identity hint is B, the server does not send the +ServerKeyExchange message to the client. + +A server application 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 B, B-terminated PSK +identity sent by the client in parameter B, and a buffer B of +length B bytes where the pre-shared key is to be stored. + +A client application wishing to use TLSv1.3 PSKs must set a different callback +using either SSL_CTX_set_psk_use_session_callback() or +SSL_set_psk_use_session_callback() as appropriate. + +The callback function is given a pointer to the SSL connection in B and +an identity in B of length B. The callback function +should identify an SSL_SESSION object that provides the PSK details and store it +in B<*sess>. The SSL_SESSION object should, as a minimum, set the master key, +the ciphersuite and the protocol version. See +L 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 B<*sess> is +NULL. + +=head1 NOTES + +A connection established via a TLSv1.3 PSK will appear as if session resumption +has occurred so that L will return true. + +=head1 RETURN VALUES + +B and B return +1 on success, 0 otherwise. + +Return values from the TLSv1.2 and below server callback are interpreted as +follows: + +=over 4 + +=item Z<>0 + +PSK identity was not found. An "unknown_psk_identity" alert message +will be sent and the connection setup fails. + +=item E0 + +PSK identity was found and the server callback has provided the PSK +successfully in parameter B. Return value is the length of +B in bytes. It is an error to return a value greater than +B. + +If the PSK identity was not found but the callback instructs the +protocol to continue anyway, the callback must provide some random +data to B and return the length of the random data, so the +connection will fail with decryption_error before it will be finished +completely. + +=back + +The B callback should return 1 on success or 0 on +failure. In the event of failure the connection setup fails. + +=head1 SEE ALSO + +L, +L + +=head1 HISTORY + +SSL_CTX_set_psk_find_session_callback() and SSL_set_psk_find_session_callback() +were added in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/SSL_CTX_use_serverinfo.pod b/doc/man3/SSL_CTX_use_serverinfo.pod new file mode 100644 index 00000000..d35a196f --- /dev/null +++ b/doc/man3/SSL_CTX_use_serverinfo.pod @@ -0,0 +1,83 @@ +=pod + +=head1 NAME + +SSL_CTX_use_serverinfo_ex, +SSL_CTX_use_serverinfo, +SSL_CTX_use_serverinfo_file +- use serverinfo extension + +=head1 SYNOPSIS + + #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); + +=head1 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 B. The B parameter specifies the format of the +byte array provided in B<*serverinfo> which is of length B. + +If B is B 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 L. 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 B is B 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 +L. 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 B parameter so a default version of +SSL_SERVERINFOV1 is used instead. + +SSL_CTX_use_serverinfo_file() loads one or more serverinfo extensions from +B into B. 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 B +each time a certificate is loaded via a call to SSL_CTX_use_certificate(). + +=head1 RETURN VALUES + +On success, the functions return 1. +On failure, the functions return 0. Check out the error stack to find out +the reason. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_SESSION_free.pod b/doc/man3/SSL_SESSION_free.pod similarity index 90% rename from doc/ssl/SSL_SESSION_free.pod rename to doc/man3/SSL_SESSION_free.pod index 5bea7850..87a1cab1 100644 --- a/doc/ssl/SSL_SESSION_free.pod +++ b/doc/man3/SSL_SESSION_free.pod @@ -3,6 +3,7 @@ =head1 NAME SSL_SESSION_new, +SSL_SESSION_dup, SSL_SESSION_up_ref, SSL_SESSION_free - create, free and manage SSL_SESSION structures @@ -11,6 +12,7 @@ SSL_SESSION_free - create, free and manage SSL_SESSION structures #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); @@ -19,6 +21,9 @@ SSL_SESSION_free - create, free and manage SSL_SESSION structures 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 B +and returns a pointer to it. + SSL_SESSION_up_ref() increments the reference count on the given SSL_SESSION structure. @@ -61,11 +66,15 @@ SSL_SESSION_up_ref returns 1 on success or 0 on error. =head1 SEE ALSO -L, L, +L, L, L, L, L +=head1 HISTORY + +SSL_SESSION_dup() was added in OpenSSL 1.1.1. + =head1 COPYRIGHT Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. diff --git a/doc/man3/SSL_SESSION_get0_cipher.pod b/doc/man3/SSL_SESSION_get0_cipher.pod new file mode 100644 index 00000000..60f66a2d --- /dev/null +++ b/doc/man3/SSL_SESSION_get0_cipher.pod @@ -0,0 +1,58 @@ +=pod + +=head1 NAME + +SSL_SESSION_get0_cipher, +SSL_SESSION_set_cipher +- set and retrieve the SSL cipher associated with a session + +=head1 SYNOPSIS + + #include + + const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); + int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); + +=head1 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 B and +should not be released. + +SSL_SESSION_set_cipher() can be used to set the ciphersuite associated with the +SSL_SESSION B to B. For example, this could be used to set up a +session based PSK (see L). + +=head1 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. + +=head1 SEE ALSO + +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +SSL_SESSION_get0_cipher() was first added to OpenSSL 1.1.0. +SSL_SESSION_set_cipher() was first added to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/man3/SSL_SESSION_get0_hostname.pod b/doc/man3/SSL_SESSION_get0_hostname.pod new file mode 100644 index 00000000..c35c8927 --- /dev/null +++ b/doc/man3/SSL_SESSION_get0_hostname.pod @@ -0,0 +1,74 @@ +=pod + +=head1 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 ssociated with a session + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +SSL_SESSION_get0_hostname() retrieves the SNI value that was sent by the +client when the session was created, or NULL if no value was sent. + +The value returned is a pointer to memory maintained within B 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 B<*alpn> is a +pointer to memory maintained within B and should not be free'd. + +SSL_SESSION_set1_alpn_selected() sets the ALPN protocol for this session to the +value in B which should be of length B bytes. A copy of the input +value is made, and the caller retains ownership of the memory pointed to by +B. + +=head1 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. + +=head1 SEE ALSO + +L, +L, +L, +L + +=head1 HISTORY + +SSL_SESSION_set1_hostname(), SSL_SESSION_get0_alpn_selected() and +SSL_SESSION_set1_alpn_selected() were added in OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_SESSION_get0_id_context.pod b/doc/man3/SSL_SESSION_get0_id_context.pod similarity index 99% rename from doc/ssl/SSL_SESSION_get0_id_context.pod rename to doc/man3/SSL_SESSION_get0_id_context.pod index ee4a256b..69619a72 100644 --- a/doc/ssl/SSL_SESSION_get0_id_context.pod +++ b/doc/man3/SSL_SESSION_get0_id_context.pod @@ -37,7 +37,7 @@ SSL_SESSION_set1_id_context() returns 1 on success or 0 on error. =head1 SEE ALSO -L, +L, L =head1 HISTORY diff --git a/doc/ssl/SSL_SESSION_get0_peer.pod b/doc/man3/SSL_SESSION_get0_peer.pod similarity index 98% rename from doc/ssl/SSL_SESSION_get0_peer.pod rename to doc/man3/SSL_SESSION_get0_peer.pod index a95f8a5b..f6f2a1cd 100644 --- a/doc/ssl/SSL_SESSION_get0_peer.pod +++ b/doc/man3/SSL_SESSION_get0_peer.pod @@ -24,7 +24,7 @@ no peer certificate is available. =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_SESSION_get_compress_id.pod b/doc/man3/SSL_SESSION_get_compress_id.pod similarity index 98% rename from doc/ssl/SSL_SESSION_get_compress_id.pod rename to doc/man3/SSL_SESSION_get_compress_id.pod index 5045c537..0bdccb4b 100644 --- a/doc/ssl/SSL_SESSION_get_compress_id.pod +++ b/doc/man3/SSL_SESSION_get_compress_id.pod @@ -25,7 +25,7 @@ none. =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_SESSION_get_ex_data.pod b/doc/man3/SSL_SESSION_get_ex_data.pod similarity index 99% rename from doc/ssl/SSL_SESSION_get_ex_data.pod rename to doc/man3/SSL_SESSION_get_ex_data.pod index e922abc5..f44c4e8e 100644 --- a/doc/ssl/SSL_SESSION_get_ex_data.pod +++ b/doc/man3/SSL_SESSION_get_ex_data.pod @@ -32,7 +32,7 @@ failure. NULL may also be a valid value. =head1 SEE ALSO -L, +L, L =head1 COPYRIGHT diff --git a/doc/man3/SSL_SESSION_get_protocol_version.pod b/doc/man3/SSL_SESSION_get_protocol_version.pod new file mode 100644 index 00000000..22e40bd6 --- /dev/null +++ b/doc/man3/SSL_SESSION_get_protocol_version.pod @@ -0,0 +1,56 @@ +=pod + +=head1 NAME + +SSL_SESSION_get_protocol_version, +SSL_SESSION_set_protocol_version +- get and set the session protocol version + +=head1 SYNOPSIS + + #include + + int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); + int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +=head1 DESCRIPTION + +SSL_SESSION_get_protocol_version() returns the protocol version number used +by session B. + +SSL_SESSION_set_protocol_version() sets the protocol version associated with the +SSL_SESSION object B to the value B. This value should be a version +constant such as B etc. For example, this could be used to set +up a session based PSK (see L). + +=head1 RETURN VALUES + +SSL_SESSION_get_protocol_version() returns a number indicating the protocol +version used for the session; this number matches the constants I +B or B. + +Note that the SSL_SESSION_get_protocol_version() function +does B perform a null check on the provided session B pointer. + +SSL_SESSION_set_protocol_version() returns 1 on success or 0 on failure. + +=head1 SEE ALSO + +L, +L + +=head1 HISTORY + +SSL_SESSION_get_protocol_version() was first added to OpenSSL 1.1.0. +SSL_SESSION_set_protocol_version() was first added to OpenSSL 1.1.1. + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_SESSION_get_time.pod b/doc/man3/SSL_SESSION_get_time.pod similarity index 100% rename from doc/ssl/SSL_SESSION_get_time.pod rename to doc/man3/SSL_SESSION_get_time.pod diff --git a/doc/ssl/SSL_SESSION_has_ticket.pod b/doc/man3/SSL_SESSION_has_ticket.pod similarity index 87% rename from doc/ssl/SSL_SESSION_has_ticket.pod rename to doc/man3/SSL_SESSION_has_ticket.pod index a84440b5..71973823 100644 --- a/doc/ssl/SSL_SESSION_has_ticket.pod +++ b/doc/man3/SSL_SESSION_has_ticket.pod @@ -29,6 +29,12 @@ NULL then a pointer to the ticket is written to B<*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(). +=head1 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. + =head1 SEE ALSO L, @@ -43,7 +49,7 @@ SSL_SESSION_get0_ticket were added in OpenSSL 1.1.0. =head1 COPYRIGHT -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/SSL_SESSION_is_resumable.pod b/doc/man3/SSL_SESSION_is_resumable.pod new file mode 100644 index 00000000..729479a9 --- /dev/null +++ b/doc/man3/SSL_SESSION_is_resumable.pod @@ -0,0 +1,44 @@ +=pod + +=head1 NAME + +SSL_SESSION_is_resumable +- determine whether an SSL_SESSION object can be used for resumption + +=head1 SYNOPSIS + + #include + + int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +=head1 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. + +=head1 RETURN VALUES + +SSL_SESSION_is_resumable() returns 1 if the session is resumable or 0 otherwise. + +=head1 SEE ALSO + +L, +L, +L + +=head1 HISTORY + +SSL_SESSION_is_resumable() was first added to OpenSSL 1.1.1 + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_SESSION_print.pod b/doc/man3/SSL_SESSION_print.pod similarity index 99% rename from doc/ssl/SSL_SESSION_print.pod rename to doc/man3/SSL_SESSION_print.pod index 9a44c11c..957411a7 100644 --- a/doc/ssl/SSL_SESSION_print.pod +++ b/doc/man3/SSL_SESSION_print.pod @@ -33,7 +33,7 @@ SSL_SESSION_print(), SSL_SESSION_print_fp() and SSL_SESSION_print_keylog return =head1 SEE ALSO -L +L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_SESSION_set1_id.pod b/doc/man3/SSL_SESSION_set1_id.pod similarity index 93% rename from doc/ssl/SSL_SESSION_set1_id.pod rename to doc/man3/SSL_SESSION_set1_id.pod index 0bd9b834..f0b131d6 100644 --- a/doc/ssl/SSL_SESSION_set1_id.pod +++ b/doc/man3/SSL_SESSION_set1_id.pod @@ -21,7 +21,7 @@ SSL_SESSION_get_id() returns a pointer to the internal session id value for the session B. The length of the id in bytes is stored in B<*len>. The length may be 0. The caller should not free the returned pointer directly. -SSL_SESSION_set1_id() sets the the session ID for the B SSL/TLS session +SSL_SESSION_set1_id() sets the session ID for the B SSL/TLS session to B of length B. =head1 RETURN VALUES @@ -32,7 +32,7 @@ if the supplied session ID length exceeds B. =head1 SEE ALSO -L +L =head1 HISTORY diff --git a/doc/ssl/SSL_accept.pod b/doc/man3/SSL_accept.pod similarity index 98% rename from doc/ssl/SSL_accept.pod rename to doc/man3/SSL_accept.pod index 3248cacf..335655f0 100644 --- a/doc/ssl/SSL_accept.pod +++ b/doc/man3/SSL_accept.pod @@ -65,7 +65,7 @@ to find out the reason. =head1 SEE ALSO L, L, -L, L, L, +L, L, L, L, L, L diff --git a/doc/ssl/SSL_alert_type_string.pod b/doc/man3/SSL_alert_type_string.pod similarity index 99% rename from doc/ssl/SSL_alert_type_string.pod rename to doc/man3/SSL_alert_type_string.pod index 6e2768e8..b88465b1 100644 --- a/doc/ssl/SSL_alert_type_string.pod +++ b/doc/man3/SSL_alert_type_string.pod @@ -228,7 +228,7 @@ Probably B does not contain a correct alert message. =head1 SEE ALSO -L, L +L, L =head1 COPYRIGHT diff --git a/doc/man3/SSL_alloc_buffers.pod b/doc/man3/SSL_alloc_buffers.pod new file mode 100644 index 00000000..94bd0584 --- /dev/null +++ b/doc/man3/SSL_alloc_buffers.pod @@ -0,0 +1,67 @@ +=pod + +=head1 NAME + +SSL_free_buffers, SSL_alloc_buffers - manage SSL structure buffers + +=head1 SYNOPSIS + + #include + + int SSL_free_buffers(SSL *ssl); + int SSL_alloc_buffers(SSL *ssl); + +=head1 DESCRIPTION + +SSL_free_buffers() frees the read and write buffers of the given B. +SSL_alloc_buffers() allocates the read and write buffers of the given B. + +The B 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. + +=head1 RETURN VALUES + +The following return values can occur: + +=over 4 + +=item 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. + +=item 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(). + +=back + +=head1 SEE ALSO + +L, L, +L, L, +L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/SSL_check_chain.pod b/doc/man3/SSL_check_chain.pod similarity index 99% rename from doc/ssl/SSL_check_chain.pod rename to doc/man3/SSL_check_chain.pod index 86919942..28c789e9 100644 --- a/doc/ssl/SSL_check_chain.pod +++ b/doc/man3/SSL_check_chain.pod @@ -80,7 +80,7 @@ for earlier versions of TLS or DTLS. =head1 SEE ALSO L, -L +L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_clear.pod b/doc/man3/SSL_clear.pod similarity index 98% rename from doc/ssl/SSL_clear.pod rename to doc/man3/SSL_clear.pod index ed0ad60c..385e4f6e 100644 --- a/doc/ssl/SSL_clear.pod +++ b/doc/man3/SSL_clear.pod @@ -69,7 +69,7 @@ The SSL_clear() operation was successful. L, L, L, L, -L, L, +L, L, L =head1 COPYRIGHT diff --git a/doc/ssl/SSL_connect.pod b/doc/man3/SSL_connect.pod similarity index 98% rename from doc/ssl/SSL_connect.pod rename to doc/man3/SSL_connect.pod index df198f9b..1f054d67 100644 --- a/doc/ssl/SSL_connect.pod +++ b/doc/man3/SSL_connect.pod @@ -65,7 +65,7 @@ to find out the reason. =head1 SEE ALSO L, L, -L, L, L, +L, L, L, L, L, L diff --git a/doc/ssl/SSL_do_handshake.pod b/doc/man3/SSL_do_handshake.pod similarity index 98% rename from doc/ssl/SSL_do_handshake.pod rename to doc/man3/SSL_do_handshake.pod index ffb71cc0..a1b973f7 100644 --- a/doc/ssl/SSL_do_handshake.pod +++ b/doc/man3/SSL_do_handshake.pod @@ -66,7 +66,7 @@ to find out the reason. =head1 SEE ALSO L, L, -L, L, L, +L, L, L, L =head1 COPYRIGHT diff --git a/doc/man3/SSL_export_keying_material.pod b/doc/man3/SSL_export_keying_material.pod new file mode 100644 index 00000000..0090097d --- /dev/null +++ b/doc/man3/SSL_export_keying_material.pod @@ -0,0 +1,87 @@ +=pod + +=head1 NAME + +SSL_export_keying_material, +SSL_export_keying_material_early +- obtain keying material for application use + +=head1 SYNOPSIS + + #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); + +=head1 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 RFCXXXX (for TLSv1.3). +TODO(TLS1.3): Update the RFC number when the RFC is published. + +SSL_export_keying_material() derives keying material using +the F established in the handshake. + +SSL_export_keying_material_early() is only usable with TLSv1.3, and derives +keying material using the F (as defined in the +TLS 1.3 RFC). For the client, the F 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 B, B bytes of data will be written to +B. The application specific context should be supplied in the location +pointed to by B and should be B bytes long. Provision of +a context is optional. If the context should be omitted entirely then +B should be set to 0. Otherwise it should be any other value. If +B is 0 then the values of B and B 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 +B and B and returns 0 if they have identical encodings and non-zero otherwise. +=head1 RETURN VALUES + +X509_ALGOR_dup() returns a valid B 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. + =head1 COPYRIGHT -Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/X509_CRL_get0_by_serial.pod b/doc/man3/X509_CRL_get0_by_serial.pod similarity index 100% rename from doc/crypto/X509_CRL_get0_by_serial.pod rename to doc/man3/X509_CRL_get0_by_serial.pod diff --git a/doc/crypto/X509_EXTENSION_set_object.pod b/doc/man3/X509_EXTENSION_set_object.pod similarity index 100% rename from doc/crypto/X509_EXTENSION_set_object.pod rename to doc/man3/X509_EXTENSION_set_object.pod diff --git a/doc/crypto/X509_LOOKUP_hash_dir.pod b/doc/man3/X509_LOOKUP_hash_dir.pod similarity index 86% rename from doc/crypto/X509_LOOKUP_hash_dir.pod rename to doc/man3/X509_LOOKUP_hash_dir.pod index 5f8dfa93..84d8fb92 100644 --- a/doc/crypto/X509_LOOKUP_hash_dir.pod +++ b/doc/man3/X509_LOOKUP_hash_dir.pod @@ -10,14 +10,14 @@ lookup methods =head1 SYNOPSIS - #include + #include - X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); - X509_LOOKUP_METHOD *X509_LOOKUP_file(void); + 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); + 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); =head1 DESCRIPTION @@ -111,6 +111,14 @@ Note that the hash algorithm used for subject name hashing changed in OpenSSL OpenSSL includes a L utility which creates symlinks with correct hashed names for all files with .pem suffix in a given directory. +=head1 RETURN VALUES + +X509_LOOKUP_hash_dir() and X509_LOOKUP_file() always return a valid +B 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. + =head1 SEE ALSO L, @@ -120,7 +128,7 @@ L, =head1 COPYRIGHT -Copyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/X509_NAME_ENTRY_get_object.pod b/doc/man3/X509_NAME_ENTRY_get_object.pod new file mode 100644 index 00000000..5de1b88b --- /dev/null +++ b/doc/man3/X509_NAME_ENTRY_get_object.pod @@ -0,0 +1,99 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +X509_NAME_ENTRY_get_object() retrieves the field name of B in +and B structure. + +X509_NAME_ENTRY_get_data() retrieves the field value of B in +and B structure. + +X509_NAME_ENTRY_set_object() sets the field name of B to B. + +X509_NAME_ENTRY_set_data() sets the field value of B to string type +B and value determined by B and B. + +X509_NAME_ENTRY_create_by_txt(), X509_NAME_ENTRY_create_by_NID() +and X509_NAME_ENTRY_create_by_OBJ() create and return an +B structure. + +=head1 NOTES + +X509_NAME_ENTRY_get_object() and X509_NAME_ENTRY_get_data() can be +used to examine an B function as returned by +X509_NAME_get_entry() for example. + +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_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 B structures +are almost always part of B structures and the +corresponding B 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 B functions such as +X509_NAME_add_entry_by_txt(). So for example B can be set to +B 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. + +=head1 RETURN VALUES + +X509_NAME_ENTRY_get_object() returns a valid B structure if it is +set or NULL if an error occurred. + +X509_NAME_ENTRY_get_data() returns a valid B 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 B on success or +NULL if an error occurred. + +=head1 SEE ALSO + +L, L, +L + +=head1 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 +L. + +=cut diff --git a/doc/crypto/X509_NAME_add_entry_by_txt.pod b/doc/man3/X509_NAME_add_entry_by_txt.pod similarity index 87% rename from doc/crypto/X509_NAME_add_entry_by_txt.pod rename to doc/man3/X509_NAME_add_entry_by_txt.pod index 27e5baf8..b48f0908 100644 --- a/doc/crypto/X509_NAME_add_entry_by_txt.pod +++ b/doc/man3/X509_NAME_add_entry_by_txt.pod @@ -9,11 +9,14 @@ X509_NAME_add_entry, X509_NAME_delete_entry - X509_NAME modification functions #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_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_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_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); @@ -78,18 +81,19 @@ Create an B structure: "C=UK, O=Disorganized Organization, CN=Joe Bloggs" X509_NAME *nm; + nm = X509_NAME_new(); if (nm == NULL) - /* Some error */ + /* Some error */ if (!X509_NAME_add_entry_by_txt(nm, "C", MBSTRING_ASC, - "UK", -1, -1, 0)) - /* Error */ + "UK", -1, -1, 0)) + /* Error */ if (!X509_NAME_add_entry_by_txt(nm, "O", MBSTRING_ASC, - "Disorganized Organization", -1, -1, 0)) - /* Error */ + "Disorganized Organization", -1, -1, 0)) + /* Error */ if (!X509_NAME_add_entry_by_txt(nm, "CN", MBSTRING_ASC, - "Joe Bloggs", -1, -1, 0)) - /* Error */ + "Joe Bloggs", -1, -1, 0)) + /* Error */ =head1 RETURN VALUES diff --git a/doc/crypto/X509_NAME_get0_der.pod b/doc/man3/X509_NAME_get0_der.pod similarity index 100% rename from doc/crypto/X509_NAME_get0_der.pod rename to doc/man3/X509_NAME_get0_der.pod diff --git a/doc/crypto/X509_NAME_get_index_by_NID.pod b/doc/man3/X509_NAME_get_index_by_NID.pod similarity index 88% rename from doc/crypto/X509_NAME_get_index_by_NID.pod rename to doc/man3/X509_NAME_get_index_by_NID.pod index 2d6713ba..5579dabb 100644 --- a/doc/crypto/X509_NAME_get_index_by_NID.pod +++ b/doc/man3/X509_NAME_get_index_by_NID.pod @@ -48,8 +48,9 @@ of space needed in B (excluding the final null) is returned. =head1 NOTES -X509_NAME_get_text_by_NID() and X509_NAME_get_text_by_OBJ() are -legacy functions which have various limitations which make them +X509_NAME_get_text_by_NID() and X509_NAME_get_text_by_OBJ() should be +considered deprecaated 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 @@ -75,25 +76,23 @@ 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 */ - } + 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 */ - } + 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 */ + } =head1 RETURN VALUES diff --git a/doc/crypto/X509_NAME_print_ex.pod b/doc/man3/X509_NAME_print_ex.pod similarity index 86% rename from doc/crypto/X509_NAME_print_ex.pod rename to doc/man3/X509_NAME_print_ex.pod index 3e9caa88..96be1ac8 100644 --- a/doc/crypto/X509_NAME_print_ex.pod +++ b/doc/man3/X509_NAME_print_ex.pod @@ -11,7 +11,7 @@ X509_NAME_oneline - X509_NAME printing routines 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); + char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); =head1 DESCRIPTION @@ -35,10 +35,11 @@ characters. Multiple lines are used if the output (including indent) exceeds =head1 NOTES -The functions X509_NAME_oneline() and X509_NAME_print() are legacy functions which +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. +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 B, B or B will suffice. @@ -96,13 +97,23 @@ B is a multiline format which is the same as: B uses a format identical to X509_NAME_print(): in fact it calls X509_NAME_print() internally. +=head1 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 B is set, which is the same as X509_NAME_print(). Otherwise, +it returns -1 on error or other values on success. + =head1 SEE ALSO L =head1 COPYRIGHT -Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/X509_PUBKEY_new.pod b/doc/man3/X509_PUBKEY_new.pod similarity index 100% rename from doc/crypto/X509_PUBKEY_new.pod rename to doc/man3/X509_PUBKEY_new.pod diff --git a/doc/crypto/X509_SIG_get0.pod b/doc/man3/X509_SIG_get0.pod similarity index 86% rename from doc/crypto/X509_SIG_get0.pod rename to doc/man3/X509_SIG_get0.pod index d24eadcd..bbf37230 100644 --- a/doc/crypto/X509_SIG_get0.pod +++ b/doc/man3/X509_SIG_get0.pod @@ -20,13 +20,17 @@ value in B. 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. +=head1 RETURN VALUES + +X509_SIG_get0() and X509_SIG_getm() return no values. + =head1 SEE ALSO L =head1 COPYRIGHT -Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/X509_STORE_CTX_get_error.pod b/doc/man3/X509_STORE_CTX_get_error.pod similarity index 99% rename from doc/crypto/X509_STORE_CTX_get_error.pod rename to doc/man3/X509_STORE_CTX_get_error.pod index 105e051a..f166b083 100644 --- a/doc/crypto/X509_STORE_CTX_get_error.pod +++ b/doc/man3/X509_STORE_CTX_get_error.pod @@ -70,7 +70,7 @@ is B successful the returned chain may be incomplete or invalid. The returned chain persists after the B structure is freed, when it is no longer needed it should be free up using: - sk_X509_pop_free(chain, X509_free); + sk_X509_pop_free(chain, X509_free); X509_verify_cert_error_string() returns a human readable error string for verification error B. diff --git a/doc/crypto/X509_STORE_CTX_new.pod b/doc/man3/X509_STORE_CTX_new.pod similarity index 100% rename from doc/crypto/X509_STORE_CTX_new.pod rename to doc/man3/X509_STORE_CTX_new.pod diff --git a/doc/man3/X509_STORE_CTX_set_verify_cb.pod b/doc/man3/X509_STORE_CTX_set_verify_cb.pod new file mode 100644 index 00000000..5688ab79 --- /dev/null +++ b/doc/man3/X509_STORE_CTX_set_verify_cb.pod @@ -0,0 +1,211 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +X509_STORE_CTX_set_verify_cb() sets the verification callback of B to +B 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 B essential and the default operation +is often sufficient. + +The B 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 +B is set then B is set to 2 to indicate the +policy checking is complete. + +The B parameter to the callback is the B 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 B mechanism. + +X509_STORE_CTX_get_verify_cb() returns the value of the current callback +for the specific B. + +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 B, please see +L for more information. + + +=head1 WARNING + +In general a verification callback should B 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 B certificate (including untrusted generated ones) will be +accepted. + +=head1 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 +B structure is created and destroyed internally and the +only way to set a custom verification callback is by inheriting it from the +associated B. + +=head1 RETURN VALUES + +X509_STORE_CTX_set_verify_cb() does not return a value. + +=head1 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 B 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 B is assumed to be +a global logging B, an alternative would to store a BIO in B using +B. + + 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, "\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); + } + +=head1 SEE ALSO + +L +L +L + +=head1 HISTORY + +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() were added in OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/X509_STORE_get0_param.pod b/doc/man3/X509_STORE_get0_param.pod similarity index 100% rename from doc/crypto/X509_STORE_get0_param.pod rename to doc/man3/X509_STORE_get0_param.pod diff --git a/doc/crypto/X509_STORE_new.pod b/doc/man3/X509_STORE_new.pod similarity index 100% rename from doc/crypto/X509_STORE_new.pod rename to doc/man3/X509_STORE_new.pod diff --git a/doc/crypto/X509_STORE_set_verify_cb_func.pod b/doc/man3/X509_STORE_set_verify_cb_func.pod similarity index 100% rename from doc/crypto/X509_STORE_set_verify_cb_func.pod rename to doc/man3/X509_STORE_set_verify_cb_func.pod diff --git a/doc/crypto/X509_VERIFY_PARAM_set_flags.pod b/doc/man3/X509_VERIFY_PARAM_set_flags.pod similarity index 96% rename from doc/crypto/X509_VERIFY_PARAM_set_flags.pod rename to doc/man3/X509_VERIFY_PARAM_set_flags.pod index 5263facf..825f7601 100644 --- a/doc/crypto/X509_VERIFY_PARAM_set_flags.pod +++ b/doc/man3/X509_VERIFY_PARAM_set_flags.pod @@ -37,15 +37,15 @@ X509_VERIFY_PARAM_set1_ip_asc 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); + ASN1_OBJECT *policy); int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, - STACK_OF(ASN1_OBJECT) *policies); + 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 auth_level); int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, @@ -56,7 +56,7 @@ X509_VERIFY_PARAM_set1_ip_asc unsigned int flags); 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); + 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); @@ -309,8 +309,9 @@ of ORed. =head1 NOTES The above functions should be used to manipulate verification parameters -instead of legacy functions which work in specific structures such as -X509_STORE_CTX_set_flags(). +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. =head1 BUGS @@ -327,11 +328,12 @@ CRLs from the CRL distribution points extension. Enable CRL checking when performing certificate verification during SSL connections associated with an B structure B: - 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); + 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); =head1 SEE ALSO @@ -344,7 +346,7 @@ L =head1 HISTORY The B flag was added in OpenSSL 1.1.0 -The legacy B flag is deprecated as of +The flag B was deprecated in OpenSSL 1.1.0, and has no effect. =head1 COPYRIGHT diff --git a/doc/crypto/X509_check_ca.pod b/doc/man3/X509_check_ca.pod similarity index 87% rename from doc/crypto/X509_check_ca.pod rename to doc/man3/X509_check_ca.pod index b79efb5b..38f0811d 100644 --- a/doc/crypto/X509_check_ca.pod +++ b/doc/man3/X509_check_ca.pod @@ -6,16 +6,16 @@ X509_check_ca - check if given certificate is CA certificate =head1 SYNOPSIS - #include + #include - int X509_check_ca(X509 *cert); + int X509_check_ca(X509 *cert); =head1 DESCRIPTION This function checks if given certificate is CA certificate (can be used to sign other certificates). -=head1 RETURN VALUE +=head1 RETURN VALUES Function return 0, if it is not CA certificate, 1 if it is proper X509v3 CA certificate with B extension CA:TRUE, @@ -35,7 +35,7 @@ L =head1 COPYRIGHT -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/X509_check_host.pod b/doc/man3/X509_check_host.pod similarity index 98% rename from doc/crypto/X509_check_host.pod rename to doc/man3/X509_check_host.pod index 93848152..7b96b7c8 100644 --- a/doc/crypto/X509_check_host.pod +++ b/doc/man3/X509_check_host.pod @@ -6,7 +6,7 @@ X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc - X.509 cert =head1 SYNOPSIS - #include + #include int X509_check_host(X509 *, const char *name, size_t namelen, unsigned int flags, char **peername); @@ -147,7 +147,7 @@ These functions were added in OpenSSL 1.0.2. =head1 COPYRIGHT -Copyright 2012-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/X509_check_issued.pod b/doc/man3/X509_check_issued.pod similarity index 92% rename from doc/crypto/X509_check_issued.pod rename to doc/man3/X509_check_issued.pod index 8e4b1117..f9a541ef 100644 --- a/doc/crypto/X509_check_issued.pod +++ b/doc/man3/X509_check_issued.pod @@ -22,7 +22,7 @@ B of I if B present in the I certificate and checks B field of I. -=head1 RETURN VALUE +=head1 RETURN VALUES Function return B if certificate I is issued by I or some B constant to indicate an error. @@ -35,7 +35,7 @@ L =head1 COPYRIGHT -Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man3/X509_check_private_key.pod b/doc/man3/X509_check_private_key.pod new file mode 100644 index 00000000..4735dfd5 --- /dev/null +++ b/doc/man3/X509_check_private_key.pod @@ -0,0 +1,54 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #include + + int X509_check_private_key(X509 *x, EVP_PKEY *k); + + int X509_REQ_check_private_key(X509_REQ *x, EVP_PKEY *k); + +=head1 DESCRIPTION + +X509_check_private_key() function checks the consistency of private +key B with the public key in B. + +X509_REQ_check_private_key() is equivalent to X509_check_private_key() +except that B represents a certificate request of structure B. + +=head1 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 L. + +=head1 BUGS + +The B functions don't check if B 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 B, it will +return success. + +=head1 SEE ALSO + +L + +=head1 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 +L. + +=cut diff --git a/doc/man3/X509_cmp_time.pod b/doc/man3/X509_cmp_time.pod new file mode 100644 index 00000000..911814ed --- /dev/null +++ b/doc/man3/X509_cmp_time.pod @@ -0,0 +1,61 @@ +=pod + +=head1 NAME + +X509_cmp_time, X509_cmp_current_time, X509_time_adj, X509_time_adj_ex +- X509 time functions + +=head1 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); + +=head1 DESCRIPTION + +X509_cmp_time() compares the ASN1_TIME in B with the time +in . X509_cmp_current_time() compares the ASN1_TIME in +B with the current time, expressed as time_t. B +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 B to the time +B and B after B. + +X509_time_adj() sets the ASN1_TIME structure B to the time +B after B. 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 B is NULL, a new ASN1_TIME structure +is allocated and returned. + +In all methods, if B is NULL, the current time, expressed as +time_t, is used. + +=head1 BUGS + +Unlike many standard comparison functions, X509_cmp_time() and +X509_cmp_current_time() return 0 on error. + +=head1 RETURN VALUES + +X509_cmp_time() and X509_cmp_current_time() return -1 if B +is earlier than, or equal to, B (resp. current time), and 1 +otherwise. These methods return 0 on error. + +X509_time_ad() and X509_time_adj_ex() return a pointer to the updated +ASN1_TIME structure, and NULL on error. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/X509_digest.pod b/doc/man3/X509_digest.pod similarity index 98% rename from doc/crypto/X509_digest.pod rename to doc/man3/X509_digest.pod index 3c76c8fd..ee393450 100644 --- a/doc/crypto/X509_digest.pod +++ b/doc/man3/X509_digest.pod @@ -17,7 +17,7 @@ PKCS7_ISSUER_AND_SERIAL_digest unsigned int *len); int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, unsigned char *md, - unsigned int *len); + unsigned int *len); int X509_pubkey_digest(const X509 *data, const EVP_MD *type, unsigned char *md, unsigned int *len); diff --git a/doc/crypto/X509_dup.pod b/doc/man3/X509_dup.pod similarity index 95% rename from doc/crypto/X509_dup.pod rename to doc/man3/X509_dup.pod index c5d01b28..4f982089 100644 --- a/doc/crypto/X509_dup.pod +++ b/doc/man3/X509_dup.pod @@ -7,6 +7,10 @@ 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, @@ -75,6 +79,8 @@ 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, @@ -160,6 +166,10 @@ 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, @@ -170,7 +180,8 @@ RSA_OAEP_PARAMS_free, RSA_OAEP_PARAMS_new, RSA_PSS_PARAMS_free, RSA_PSS_PARAMS_new, -SCT_LIST_free, +SCRYPT_PARAMS_free, +SCRYPT_PARAMS_new, SXNETID_free, SXNETID_new, SXNET_free, @@ -235,10 +246,10 @@ X509_VAL_new, X509_dup, - ASN1 object utilities -=for comment generic - =head1 SYNOPSIS +=for comment generic + #include DECLARE_ASN1_FUNCTIONS(type) @@ -293,7 +304,7 @@ TYPE_print_ctx() returns 1 on success or zero on failure. =head1 COPYRIGHT -Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/X509_get0_notBefore.pod b/doc/man3/X509_get0_notBefore.pod similarity index 100% rename from doc/crypto/X509_get0_notBefore.pod rename to doc/man3/X509_get0_notBefore.pod diff --git a/doc/man3/X509_get0_signature.pod b/doc/man3/X509_get0_signature.pod new file mode 100644 index 00000000..f63c5a5b --- /dev/null +++ b/doc/man3/X509_get0_signature.pod @@ -0,0 +1,128 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +X509_get0_signature() sets B<*psig> to the signature of B and B<*palg> +to the signature algorithm of B. The values returned are internal +pointers which B be freed up after the call. + +X509_get0_tbs_sigalg() returns the signature algorithm in the signed +portion of B. + +X509_get_signature_nid() returns the NID corresponding to the signature +algorithm of B. + +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 B. The NID of the signing digest is written to B<*mdnid>, +the public key algorithm to B<*pknid>, the effective security bits to +B<*secbits> and flag details to B<*flags>. Any of the parameters can +be set to B if the information is not required. + +X509_SIG_INFO_get() and X509_SIG_INFO_set() get and set information +about a signature in an B structure. They are only +used by implementations of algorithms which need to set custom +signature information: most applications will never need to call +them. + +=head1 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. + +=head1 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). + +=head1 SEE ALSO + +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L + +=head1 HISTORY + +X509_get0_signature() and X509_get_signature_nid() were first added to +OpenSSL 1.0.2. + +X509_REQ_get0_signature(), X509_REQ_get_signature_nid(), +X509_CRL_get0_signature() and X509_CRL_get_signature_nid() were first added +to OpenSSL 1.1.0. + +=head1 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 +L. + +=cut diff --git a/doc/crypto/X509_get0_uids.pod b/doc/man3/X509_get0_uids.pod similarity index 100% rename from doc/crypto/X509_get0_uids.pod rename to doc/man3/X509_get0_uids.pod diff --git a/doc/crypto/X509_get_extension_flags.pod b/doc/man3/X509_get_extension_flags.pod similarity index 92% rename from doc/crypto/X509_get_extension_flags.pod rename to doc/man3/X509_get_extension_flags.pod index c07ef972..fc4ebbb3 100644 --- a/doc/crypto/X509_get_extension_flags.pod +++ b/doc/man3/X509_get_extension_flags.pod @@ -14,17 +14,17 @@ X509_get_proxy_pathlen - retrieve certificate extension data =head1 SYNOPSIS - #include + #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); - void X509_set_proxy_flag(X509 *x); - void X509_set_proxy_pathlen(int l); - long X509_get_proxy_pathlen(X509 *x); + 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); + void X509_set_proxy_flag(X509 *x); + void X509_set_proxy_pathlen(int l); + long X509_get_proxy_pathlen(X509 *x); =head1 DESCRIPTION @@ -144,7 +144,7 @@ If X509_get0_subject_key_id() returns B then the extension may be absent or malformed. Applications can determine the precise reason using X509_get_ext_d2i(). -=head1 RETURN VALUE +=head1 RETURN VALUES X509_get_pathlen() returns the path length value, or -1 if the extension is not present. diff --git a/doc/crypto/X509_get_pubkey.pod b/doc/man3/X509_get_pubkey.pod similarity index 100% rename from doc/crypto/X509_get_pubkey.pod rename to doc/man3/X509_get_pubkey.pod diff --git a/doc/crypto/X509_get_serialNumber.pod b/doc/man3/X509_get_serialNumber.pod similarity index 100% rename from doc/crypto/X509_get_serialNumber.pod rename to doc/man3/X509_get_serialNumber.pod diff --git a/doc/crypto/X509_get_subject_name.pod b/doc/man3/X509_get_subject_name.pod similarity index 97% rename from doc/crypto/X509_get_subject_name.pod rename to doc/man3/X509_get_subject_name.pod index ce36bbf0..2107c1d0 100644 --- a/doc/crypto/X509_get_subject_name.pod +++ b/doc/man3/X509_get_subject_name.pod @@ -37,7 +37,7 @@ X509_get_subject_name() and X509_set_subject_name() except the get and set the issuer name of B. 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 +X509_CRL_get_issuer() and X509_CRL_set_issuer_name() get or set the subject or issuer names of certificate requests of CRLs respectively. =head1 RETURN VALUES diff --git a/doc/crypto/X509_get_version.pod b/doc/man3/X509_get_version.pod similarity index 100% rename from doc/crypto/X509_get_version.pod rename to doc/man3/X509_get_version.pod diff --git a/doc/crypto/X509_new.pod b/doc/man3/X509_new.pod similarity index 100% rename from doc/crypto/X509_new.pod rename to doc/man3/X509_new.pod diff --git a/doc/crypto/X509_sign.pod b/doc/man3/X509_sign.pod similarity index 100% rename from doc/crypto/X509_sign.pod rename to doc/man3/X509_sign.pod diff --git a/doc/crypto/X509_verify_cert.pod b/doc/man3/X509_verify_cert.pod similarity index 100% rename from doc/crypto/X509_verify_cert.pod rename to doc/man3/X509_verify_cert.pod diff --git a/doc/crypto/X509v3_get_ext_by_NID.pod b/doc/man3/X509v3_get_ext_by_NID.pod similarity index 99% rename from doc/crypto/X509v3_get_ext_by_NID.pod rename to doc/man3/X509v3_get_ext_by_NID.pod index 032f71c4..81c938e9 100644 --- a/doc/crypto/X509v3_get_ext_by_NID.pod +++ b/doc/man3/X509v3_get_ext_by_NID.pod @@ -50,7 +50,7 @@ X509_REVOKED_add_ext - extension stack utility functions 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 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); diff --git a/doc/man3/d2i_DHparams.pod b/doc/man3/d2i_DHparams.pod new file mode 100644 index 00000000..d4e34fe8 --- /dev/null +++ b/doc/man3/d2i_DHparams.pod @@ -0,0 +1,42 @@ +=pod + +=head1 NAME + +d2i_DHparams, i2d_DHparams - PKCS#3 DH parameter functions + +=head1 SYNOPSIS + + #include + + DH *d2i_DHparams(DH **a, unsigned char **pp, long length); + int i2d_DHparams(DH *a, unsigned char **pp); + +=head1 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 L manual page. + +=head1 RETURN VALUES + +d2i_DHparams() returns a valid B 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. + +=head1 SEE ALSO + +L + +=head1 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 +L. + +=cut diff --git a/doc/man3/d2i_PKCS8PrivateKey_bio.pod b/doc/man3/d2i_PKCS8PrivateKey_bio.pod new file mode 100644 index 00000000..cc588dfc --- /dev/null +++ b/doc/man3/d2i_PKCS8PrivateKey_bio.pod @@ -0,0 +1,69 @@ +=pod + +=head1 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 + +=head1 SYNOPSIS + + #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); + +=head1 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 B function as described in L. + +=head1 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 L for details. + +=head1 RETURN VALUES + +d2i_PKCS8PrivateKey_bio() and d2i_PKCS8PrivateKey_fp() return a valid B +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. + +=head1 SEE ALSO + +L + +=head1 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 +L. + +=cut diff --git a/doc/crypto/d2i_PrivateKey.pod b/doc/man3/d2i_PrivateKey.pod similarity index 100% rename from doc/crypto/d2i_PrivateKey.pod rename to doc/man3/d2i_PrivateKey.pod diff --git a/doc/ssl/d2i_SSL_SESSION.pod b/doc/man3/d2i_SSL_SESSION.pod similarity index 94% rename from doc/ssl/d2i_SSL_SESSION.pod rename to doc/man3/d2i_SSL_SESSION.pod index d6b17071..68ed302d 100644 --- a/doc/ssl/d2i_SSL_SESSION.pod +++ b/doc/man3/d2i_SSL_SESSION.pod @@ -8,7 +8,8 @@ d2i_SSL_SESSION, i2d_SSL_SESSION - convert SSL_SESSION object from/to ASN1 repre #include - SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, long length); + SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); =head1 DESCRIPTION @@ -33,7 +34,7 @@ When the session is not valid, B<0> is returned and no operation is performed. =head1 SEE ALSO -L, L, +L, L, L, L diff --git a/doc/crypto/d2i_X509.pod b/doc/man3/d2i_X509.pod similarity index 98% rename from doc/crypto/d2i_X509.pod rename to doc/man3/d2i_X509.pod index 1fbe5cad..80c5c9dd 100644 --- a/doc/crypto/d2i_X509.pod +++ b/doc/man3/d2i_X509.pod @@ -3,6 +3,8 @@ =head1 NAME d2i_ACCESS_DESCRIPTION, +d2i_ADMISSIONS, +d2i_ADMISSION_SYNTAX, d2i_ASIdOrRange, d2i_ASIdentifierChoice, d2i_ASIdentifiers, @@ -71,6 +73,7 @@ d2i_IPAddressFamily, d2i_IPAddressOrRange, d2i_IPAddressRange, d2i_ISSUING_DIST_POINT, +d2i_NAMING_AUTHORITY, d2i_NETSCAPE_CERT_SEQUENCE, d2i_NETSCAPE_SPKAC, d2i_NETSCAPE_SPKI, @@ -120,6 +123,7 @@ d2i_PKCS8_fp, d2i_PKEY_USAGE_PERIOD, d2i_POLICYINFO, d2i_POLICYQUALINFO, +d2i_PROFESSION_INFO, d2i_PROXY_CERT_INFO_EXTENSION, d2i_PROXY_POLICY, d2i_RSAPrivateKey, @@ -133,6 +137,7 @@ 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, @@ -174,6 +179,8 @@ d2i_X509_REVOKED, d2i_X509_SIG, d2i_X509_VAL, i2d_ACCESS_DESCRIPTION, +i2d_ADMISSIONS, +i2d_ADMISSION_SYNTAX, i2d_ASIdOrRange, i2d_ASIdentifierChoice, i2d_ASIdentifiers, @@ -242,6 +249,7 @@ i2d_IPAddressFamily, i2d_IPAddressOrRange, i2d_IPAddressRange, i2d_ISSUING_DIST_POINT, +i2d_NAMING_AUTHORITY, i2d_NETSCAPE_CERT_SEQUENCE, i2d_NETSCAPE_SPKAC, i2d_NETSCAPE_SPKI, @@ -294,6 +302,7 @@ i2d_PKCS8_fp, i2d_PKEY_USAGE_PERIOD, i2d_POLICYINFO, i2d_POLICYQUALINFO, +i2d_PROFESSION_INFO, i2d_PROXY_CERT_INFO_EXTENSION, i2d_PROXY_POLICY, i2d_PublicKey, @@ -308,6 +317,7 @@ 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, diff --git a/doc/crypto/i2d_CMS_bio_stream.pod b/doc/man3/i2d_CMS_bio_stream.pod similarity index 100% rename from doc/crypto/i2d_CMS_bio_stream.pod rename to doc/man3/i2d_CMS_bio_stream.pod diff --git a/doc/crypto/i2d_PKCS7_bio_stream.pod b/doc/man3/i2d_PKCS7_bio_stream.pod similarity index 100% rename from doc/crypto/i2d_PKCS7_bio_stream.pod rename to doc/man3/i2d_PKCS7_bio_stream.pod diff --git a/doc/crypto/i2d_re_X509_tbs.pod b/doc/man3/i2d_re_X509_tbs.pod similarity index 88% rename from doc/crypto/i2d_re_X509_tbs.pod rename to doc/man3/i2d_re_X509_tbs.pod index 672c7ab5..98ac4f41 100644 --- a/doc/crypto/i2d_re_X509_tbs.pod +++ b/doc/man3/i2d_re_X509_tbs.pod @@ -48,6 +48,15 @@ the encoding is automatically renewed. Otherwise, the encoding of the TBSCertificate portion of the B can be manually renewed by calling i2d_re_X509_tbs(). +=head1 RETURN VALUES + +d2i_X509_AUX() returns a valid B 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. + =head1 SEE ALSO L @@ -69,7 +78,7 @@ L =head1 COPYRIGHT -Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/o2i_SCT_LIST.pod b/doc/man3/o2i_SCT_LIST.pod similarity index 95% rename from doc/crypto/o2i_SCT_LIST.pod rename to doc/man3/o2i_SCT_LIST.pod index 82922fce..28989387 100644 --- a/doc/crypto/o2i_SCT_LIST.pod +++ b/doc/man3/o2i_SCT_LIST.pod @@ -9,7 +9,8 @@ decode and encode Signed Certificate Timestamp lists in TLS wire format #include - STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, size_t len); + 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); @@ -28,7 +29,7 @@ L and L. =head1 SEE ALSO -L, +L, L, L diff --git a/doc/apps/config.pod b/doc/man5/config.pod similarity index 97% rename from doc/apps/config.pod rename to doc/man5/config.pod index 76f282f2..a7cc16b2 100644 --- a/doc/apps/config.pod +++ b/doc/man5/config.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:5 - =head1 NAME config - OpenSSL CONF library configuration files @@ -66,7 +64,9 @@ 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 B which is used by the B utility. Other -applications may use an alternative name such as B. +applications may use an alternative name such as B. +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 B represents @@ -74,6 +74,7 @@ the name of the I the meaning of the B 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] @@ -196,17 +197,8 @@ This modules has the name B which points to a section containing algorithm commands. Currently the only algorithm command supported is B whose -value should be a boolean string such as B or B. If the value is -B this attempt to enter FIPS mode. If the call fails or the library is -not FIPS capable then an error occurs. - -For example: - - alg_section = evp_settings - - [evp_settings] - - fips_mode = on +value can only be the boolean string B. If B is set to B, +an error occurs as this library version is not FIPS capable. =head2 SSL Configuration Module diff --git a/doc/apps/x509v3_config.pod b/doc/man5/x509v3_config.pod similarity index 98% rename from doc/apps/x509v3_config.pod rename to doc/man5/x509v3_config.pod index c0742c84..a35b4ccf 100644 --- a/doc/apps/x509v3_config.pod +++ b/doc/man5/x509v3_config.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:5 - =head1 NAME x509v3_config - X509 V3 certificate extension configuration format @@ -207,7 +205,7 @@ certificate (if possible). Example: - issuserAltName = issuer:copy + issuerAltName = issuer:copy =head2 Authority Info Access. @@ -355,6 +353,12 @@ The B option changes the type of the I 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 B, +B or B prefix followed by colon. For example: + + [notice] + explicitText="UTF8:Explicit Text Here" + =head2 Policy Constraints This is a multi-valued extension which consisting of the names diff --git a/doc/man7/Ed25519.pod b/doc/man7/Ed25519.pod new file mode 100644 index 00000000..a75164a1 --- /dev/null +++ b/doc/man7/Ed25519.pod @@ -0,0 +1,67 @@ +=pod + +=head1 NAME + +Ed25519 - EVP_PKEY Ed25519 support + +=head1 DESCRIPTION + +The B EVP_PKEY implementation supports key generation, one shot +digest sign and digest verify using PureEdDSA and B (see RFC8032). +It has associated private and public key formats compatible with +draft-ietf-curdle-pkix-04. + +No additional parameters can be set during key generation one shot signing or +verification. In particular, because PureEdDSA is used, when signing or +verifying a digest must B be specified. + +=head1 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() asn EVP_DigestVerify() functions. + +When calling EVP_DigestSignInit() or EVP_DigestSignUpdate() the +digest parameter B be set to B. + +Applications wishing to sign certificates (or other structures such as +CRLs or certificate requests) using Ed25519 can either use X509_sign() +or X509_sign_ctx() in the usual way. + +A context for the B algorithm can be obtained by calling: + + EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_ED25519, NULL); + +=head1 EXAMPLE + +This example generates an B private key and writes it to standard +output in PEM format: + + #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); + +=head1 SEE ALSO + +L, +L, +L, +L, + +=head1 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 +L. + +=cut diff --git a/doc/man7/RSA-PSS.pod b/doc/man7/RSA-PSS.pod new file mode 100644 index 00000000..b608561b --- /dev/null +++ b/doc/man7/RSA-PSS.pod @@ -0,0 +1,111 @@ +=pod + +=head1 NAME + +RSA-PSS - EVP_PKEY RSA-PSS algorithm support + +=head1 SYNOPSIS + + #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); + +=head1 DESCRIPTION + +The B 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 B algorithm +but with some restrictions described below. + +=head1 SIGNING AND VERIFICATION + +Signing and verification is similar to the B 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. + +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 B. It is otherwise similar to the B 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 B 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 B versions. + +=head1 KEY GENERATION + +As with RSA key generation the EVP_PKEY_CTX_set_rsa_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. By +default no parameter restrictions are placed on the generated key. If any +restrictions are set (using the macros described below) then B 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 B. + +EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md() restricts the MGF1 algorithm the +generated key can use to B. + +EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen() restricts the minimum salt length +to B. + +=head1 NOTES + +A context for the B algorithm can be obtained by calling: + + EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA_PSS, NULL); + +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 B OID and the parameters field, if +present, restricts the key parameters in the same way as the public key. + +=head1 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. + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/man7/X25519.pod b/doc/man7/X25519.pod new file mode 100644 index 00000000..96522c50 --- /dev/null +++ b/doc/man7/X25519.pod @@ -0,0 +1,58 @@ +=pod + +=head1 NAME + +X25519 - EVP_PKEY X25519 support + +=head1 DESCRIPTION + +The B EVP_PKEY implementation supports key generation and key +derivation using B. It has associated private and public key formats +compatible with draft-ietf-curdle-pkix-03. + +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. + +=head1 NOTES + +A context for the B algorithm can be obtained by calling: + + EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_X25519, NULL); + +=head1 EXAMPLE + +This example generates an B private key and writes it to standard +output in PEM format: + + #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); + +The key derivation example in L can be used with +B. + +=head1 SEE ALSO + +L, +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/crypto/bio.pod b/doc/man7/bio.pod similarity index 90% rename from doc/crypto/bio.pod rename to doc/man7/bio.pod index 1e1dd021..45ef2f77 100644 --- a/doc/crypto/bio.pod +++ b/doc/man7/bio.pod @@ -1,15 +1,13 @@ =pod -=for comment openssl_manual_section 7 - =head1 NAME bio - Basic I/O abstraction -=for comment generic - =head1 SYNOPSIS +=for comment generic + #include =head1 DESCRIPTION @@ -46,8 +44,8 @@ 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() a single BIO has the same effect as calling BIO_free() -on it other than the discarded return value. +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 B argument is supplied by a function which returns a pointer to a BIO_METHOD. There is a naming convention for such functions: @@ -68,18 +66,17 @@ L, L, L, L, L, L, L, -L, L, +L, L, L, L, L, L, L, L, -L, L, L, L, L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/crypto/crypto.pod b/doc/man7/crypto.pod similarity index 96% rename from doc/crypto/crypto.pod rename to doc/man7/crypto.pod index 082f8435..e08c5c8a 100644 --- a/doc/crypto/crypto.pod +++ b/doc/man7/crypto.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:7 - =head1 NAME crypto - OpenSSL cryptographic library @@ -48,7 +46,7 @@ See the individual manual pages for details. =head1 SEE ALSO -L, L +L, L =head1 COPYRIGHT diff --git a/doc/crypto/ct.pod b/doc/man7/ct.pod similarity index 97% rename from doc/crypto/ct.pod rename to doc/man7/ct.pod index 60718b3f..355204d2 100644 --- a/doc/crypto/ct.pod +++ b/doc/man7/ct.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:7 - =head1 NAME ct - Certificate Transparency diff --git a/doc/crypto/des_modes.pod b/doc/man7/des_modes.pod similarity index 98% rename from doc/crypto/des_modes.pod rename to doc/man7/des_modes.pod index d5a3f8d6..f7415d77 100644 --- a/doc/crypto/des_modes.pod +++ b/doc/man7/des_modes.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:7 - =head1 NAME des_modes - the variants of DES and other crypto algorithms of OpenSSL @@ -18,7 +16,7 @@ other things. Normally, this is found as the function I_ecb_encrypt(). -=over 4 +=over 2 =item * @@ -45,7 +43,7 @@ Normally, this is found as the function I_cbc_encrypt(). Be aware that des_cbc_encrypt() is not really DES CBC (it does not update the IV); use des_ncbc_encrypt() instead. -=over 4 +=over 2 =item * @@ -77,7 +75,7 @@ An error will affect the current and the following ciphertext blocks. Normally, this is found as the function I_cfb_encrypt(). -=over 4 +=over 2 =item * @@ -124,8 +122,7 @@ An error will affect the current and the following ciphertext variables. Normally, this is found as the function I_ofb_encrypt(). -=over 4 - +=over 2 =item * @@ -185,7 +182,7 @@ susceptible to a 'known plaintext' attack. Normally, this is found as the function I_ecb3_encrypt(). -=over 4 +=over 2 =item * @@ -220,7 +217,7 @@ ecb mode. Normally, this is found as the function I_ede3_cbc_encrypt(). -=over 4 +=over 2 =item * diff --git a/doc/crypto/evp.pod b/doc/man7/evp.pod similarity index 79% rename from doc/crypto/evp.pod rename to doc/man7/evp.pod index 02051df6..e493dacd 100644 --- a/doc/crypto/evp.pod +++ b/doc/man7/evp.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:7 - =head1 NAME evp - high-level cryptographic functions @@ -15,19 +13,19 @@ evp - high-level cryptographic functions The EVP library provides a high-level interface to cryptographic functions. -LI<...>|EVP_SealInit(3)> and LI<...>|EVP_OpenInit(3)> -provide public key encryption and decryption to implement digital "envelopes". +The LI|EVP_SealInit(3)> and LI|EVP_OpenInit(3)> +functions provide public key encryption and decryption to implement digital "envelopes". -The LI<...>|EVP_DigestSignInit(3)> and -LI<...>|EVP_DigestVerifyInit(3)> functions implement +The LI|EVP_DigestSignInit(3)> and +LI|EVP_DigestVerifyInit(3)> functions implement digital signatures and Message Authentication Codes (MACs). Also see the older -LI<...>|EVP_SignInit(3)> and LI<...>|EVP_VerifyInit(3)> +LI|EVP_SignInit(3)> and LI|EVP_VerifyInit(3)> functions. -Symmetric encryption is available with the LI<...>|EVP_EncryptInit(3)> -functions. The LI<...>|EVP_DigestInit(3)> functions provide message digests. +Symmetric encryption is available with the LI|EVP_EncryptInit(3)> +functions. The LI|EVP_DigestInit(3)> functions provide message digests. -The BI<...> functions provide a high level interface to +The BI functions provide a high level interface to asymmetric algorithms. To create a new EVP_PKEY see L. EVP_PKEYs can be associated with a private key of a particular algorithm by using the functions @@ -63,12 +61,12 @@ based encryption. Careful selection of the parameters will provide a PKCS#5 PBKD implementation. However, new applications should not typically use this (preferring, for example, PBKDF2 from PCKS#5). -The LI<...>|EVP_EncodeInit(3)> and -LI<...>|EVP_EncodeInit(3)> functions implement base 64 encoding +The LI|EVP_EncodeInit(3)> and +LI|EVP_EncodeInit(3)> functions implement base 64 encoding and decoding. All the symmetric algorithms (ciphers), digests and asymmetric algorithms -(public key algorithms) can be replaced by L modules providing alternative +(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 @@ -102,11 +100,11 @@ L, L, L, L, -L +L =head1 COPYRIGHT -Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. +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 diff --git a/doc/man7/ossl_store.pod b/doc/man7/ossl_store.pod new file mode 100644 index 00000000..98cc04f7 --- /dev/null +++ b/doc/man7/ossl_store.pod @@ -0,0 +1,102 @@ +=pod + +=head1 NAME + +ossl_store - Store retrieval functions + +=head1 SYNOPSIS + +=for comment generic + +#include + +=head1 DESCRIPTION + +=head2 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 B, +from which an OpenSSL type can be retrieved. + +=head2 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. + +=head2 The 'file' scheme + +Support for the 'file' scheme is already built into C. +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 'C<-----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). + +=head1 EXAMPLES + +=head2 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); + +=head1 SEE ALSO + +L, L, +L, L, +L + +=head1 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 +L. + +=cut diff --git a/doc/man7/scrypt.pod b/doc/man7/scrypt.pod new file mode 100644 index 00000000..4de0c723 --- /dev/null +++ b/doc/man7/scrypt.pod @@ -0,0 +1,158 @@ +=pod + +=head1 NAME + +scrypt - EVP_PKEY scrypt KDF support + +=head1 SYNOPSIS + + #include + + int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *pctx, unsigned char *pass, + int passlen); + + 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); + +=head1 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. + +EVP_PKEY_CTX_set1_pbe_pass() sets the B bytes long password. + +EVP_PKEY_CTX_set1_scrypt_salt() sets the B 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. + +=head1 STRING CTRLS + +scrypt also supports string based control operations via +L. +The B can be directly specified using the B parameter "pass" or +given in hex encoding using the "hexpass" parameter. Similarly, the B can +either be specified using the B parameter "salt" or in hex encoding by +using the "hexsalt" parameter. The work factors B, B and B

as well as +B can be set by using the parameters "N", "r", "p" and +"maxmem_bytes", respectively. + +=head1 NOTES + +All these functions are implemented as macros. + +A context for scrypt can be obtained by calling: + + EVP_PKEY_CTX *pctx = EVP_PKEY_new_id(EVP_PKEY_SCRYPT, NULL); + +The output length of an scrypt key derivation is specified via the length +parameter to the L function. + +=head1 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. + +=head1 EXAMPLE + +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); + +=head1 CONFORMING TO + +RFC 7914 + +=head1 SEE ALSO + +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/ssl/ssl.pod b/doc/man7/ssl.pod similarity index 96% rename from doc/ssl/ssl.pod rename to doc/man7/ssl.pod index 4d919072..f3604bb1 100644 --- a/doc/ssl/ssl.pod +++ b/doc/man7/ssl.pod @@ -1,7 +1,5 @@ =pod -=for comment openssl_manual_section:7 - =head1 NAME ssl - OpenSSL SSL/TLS library @@ -16,7 +14,7 @@ The OpenSSL B 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. -Then an B object is created as a framework to establish +An B object is created as a framework to establish TLS/SSL enabled connections (see L). Various options regarding certificates, algorithms etc. can be set in this object. @@ -27,10 +25,10 @@ L, L or L can be used to associate the network connection with the object. -Then the TLS/SSL handshake is performed using +When the TLS/SSL handshake is performed using L or L respectively. -L and L are +L, L, L and L are used to read and write data on the TLS/SSL connection. L can be used to shut down the TLS/SSL connection. @@ -44,7 +42,7 @@ structures: =item B (SSL Method) -That's a dispatch structure describing the internal B library +This is a dispatch structure describing the internal B library methods/functions which implement the various protocol versions (SSLv3 TLSv1, ...). It's needed to create an B. @@ -52,12 +50,12 @@ TLSv1, ...). It's needed to create an B. 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 B basis and the actually used ones are then part of the +on a B basis and the actual ones used are then part of the B. =item B (SSL Context) -That's the global context structure which is created by a server or client +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 B structures which are later created for the connections. @@ -68,9 +66,9 @@ connection: Bs, client and server certificates, keys, etc. =item B (SSL Connection) -That's the main SSL/TLS structure which is created by a server or client per +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. -Under run-time the application usually deals with this structure which has +At run-time the application usually deals with this structure which has links to mostly all other structures. =back @@ -85,7 +83,7 @@ containing the prototypes for the data structures and functions: =item B -That's the common header file for the SSL/TLS API. Include it into your +This is the common header file for the SSL/TLS API. Include it into your program to make the API of the B library available. It internally includes both more private SSL headers and headers from the B library. Whenever you need hard-core details on the internals of the SSL API, look @@ -103,13 +101,13 @@ Unused. Present for backwards compatibility only. =item B -That's the sub header file dealing with the SSLv3 protocol only. +This is the sub header file dealing with the SSLv3 protocol only. I. =item B -That's the sub header file dealing with the TLSv1 protocol only. +This is the sub header file dealing with the TLSv1 protocol only. I. @@ -328,6 +326,8 @@ protocol context defined in the B structure. =item void B(SSL_CTX *ctx, X509_STORE *cs); +=item void B(SSL_CTX *ctx, X509_STORE *cs); + =item void B(SSL_CTX *ctx, int (*cb)(), char *arg) =item int B(SSL_CTX *ctx, char *str); @@ -825,7 +825,7 @@ L =head1 HISTORY -B, B and B were removed +B, B and B where removed in OpenSSL 1.1.0. The return type of B was changed from void to int in diff --git a/doc/man7/x509.pod b/doc/man7/x509.pod new file mode 100644 index 00000000..065dcb14 --- /dev/null +++ b/doc/man7/x509.pod @@ -0,0 +1,73 @@ +=pod + +=head1 NAME + +x509 - X.509 certificate handling + +=head1 SYNOPSIS + + #include + +=head1 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. + +BI, BI, and BI functions +handle X.509 certificates, with some exceptions, shown below. + +BI, BI, and BI +functions handle X.509 CRLs. + +BI, BI, and BI +functions handle PKCS#10 certificate requests. + +BI functions handle certificate names. + +BI functions handle certificate attributes. + +BI functions handle certificate extensions. + +=head1 SEE ALSO + +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L, +L + +=head1 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 +L. + +=cut diff --git a/doc/openssl-c-indent.el b/doc/openssl-c-indent.el index cca11830..38e7a4f3 100644 --- a/doc/openssl-c-indent.el +++ b/doc/openssl-c-indent.el @@ -2,7 +2,7 @@ ;;; ;;; This definition is for the "CC mode" package, which is the default ;;; mode for editing C source files in Emacs 20, not for the older -;;; c-mode.el (which was the default in less recent release of Emacs 19). +;;; c-mode.el (which was the default in less recent releases of Emacs 19). ;;; ;;; Recommended use is to add this line in your .emacs: ;;; diff --git a/doc/ssl/DTLSv1_listen.pod b/doc/ssl/DTLSv1_listen.pod deleted file mode 100644 index a839d9fe..00000000 --- a/doc/ssl/DTLSv1_listen.pod +++ /dev/null @@ -1,102 +0,0 @@ -=pod - -=head1 NAME - -DTLSv1_listen - listen for incoming DTLS connections - -=head1 SYNOPSIS - - #include - - int DTLSv1_listen(SSL *ssl, BIO_ADDR *peer); - -=head1 DESCRIPTION - -DTLSv1_listen() listens for new incoming DTLS connections. If a ClientHello is -received that does not contain a cookie, then DTLSv1_listen() responds with a -HelloVerifyRequest. If a ClientHello is received with a cookie that is verified -then control is returned to user code to enable the handshake to be completed -(for example by using SSL_accept()). - -=head1 NOTES - -Datagram based protocols can be susceptible to Denial of Service attacks. A -DTLS attacker could, for example, submit a series of handshake initiation -requests that cause the server to allocate state (and possibly perform -cryptographic operations) thus consuming server resources. The attacker could -also (with UDP) quite simply forge the source IP address in such an attack. - -As a counter measure to that DTLS includes 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 HelloVerifyRequest 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 DTLSv1_listen() function. The B -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 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 DTLSv1_listen() will return with the B parameter updated into a state -where the handshake can be continued by a call to (for example) SSL_accept(). -Additionally the B pointed to by B will be filled in with -details of the peer that sent the ClientHello. If the underlying BIO is unable -to obtain the B of the peer (for example because the BIO does not -support this), then B<*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() and SSL_CTX_set_cookie_verify_cb() -respectively. - -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() -B supports ClientHellos that fit inside a single datagram. - -=head1 RETURN VALUES - -From OpenSSL 1.1.0 a return value of >= 1 indicates success. In this instance -the B value will be filled in and the B object set up ready to -continue the handshake. - -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. Any old errors on the -error queue will be cleared in the subsequent call. - -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. - -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. - -=head1 SEE ALSO - -L, L, -L, L - -=head1 HISTORY - -DTLSv1_listen() return codes were clarified in OpenSSL 1.1.0. The type of "peer" -also changed in OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CIPHER_get_name.pod b/doc/ssl/SSL_CIPHER_get_name.pod deleted file mode 100644 index b7ee3c84..00000000 --- a/doc/ssl/SSL_CIPHER_get_name.pod +++ /dev/null @@ -1,128 +0,0 @@ -=pod - -=head1 NAME - -SSL_CIPHER_get_cipher_nid, SSL_CIPHER_get_digest_nid, SSL_CIPHER_get_kx_nid, -SSL_CIPHER_get_auth_nid, SSL_CIPHER_is_aead, -SSL_CIPHER_get_name, SSL_CIPHER_get_bits, -SSL_CIPHER_get_version, SSL_CIPHER_description -- get SSL_CIPHER properties - -=head1 SYNOPSIS - - #include - - const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher); - 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); - 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); - -=head1 DESCRIPTION - -SSL_CIPHER_get_name() returns a pointer to the name of B. If the -B is NULL, it returns "(NONE)". - -SSL_CIPHER_get_bits() returns the number of secret bits used for B. -If B 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 B is NULL. - -SSL_CIPHER_get_cipher_nid() returns the cipher NID corresponding to B. -If there is no cipher (e.g. for ciphersuites with no encryption) then -B is returned. - -SSL_CIPHER_get_digest_nid() returns the digest NID corresponding to the MAC -used by B. If there is no digest (e.g. for AEAD ciphersuites) then -B is returned. - -SSL_CIPHER_get_kx_nid() returns the key exchange NID corresponding to the method -used by B. If there is no key exchange, then B 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 B. If there is no authentication, then B is returned. -Examples (not comprehensive): - - NID_auth_rsa - NID_auth_ecdsa - NID_auth_psk - -SSL_CIPHER_is_aead() returns 1 if the cipher B is AEAD (e.g. GCM or -ChaCha20/Poly1305), and 0 if it is not AEAD. - -SSL_CIPHER_description() returns a textual description of the cipher used -into the buffer B of length B provided. If B 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, -B is returned. - -The string returned by SSL_CIPHER_description() consists of several fields -separated by whitespace: - -=over 4 - -=item - -Textual representation of the cipher name. - -=item - -Protocol version, such as B, when the cipher was first defined. - -=item Kx= - -Key exchange method such as B, B, etc. - -=item Au= - -Authentication method such as B, B, etc.. None is the -representation of anonymous ciphers. - -=item Enc= - -Encryption method, with number of secret bits, such as B. - -=item Mac= - -Message digest, such as B. - -=back - -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 - -=head1 HISTORY - -SSL_CIPHER_get_version() was updated to always return the correct protocol -string in OpenSSL 1.1. - -SSL_CIPHER_description() was changed to return B on error, -rather than a fixed string, in OpenSSL 1.1 - -=head1 SEE ALSO - -L, L, -L, L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_dane_enable.pod b/doc/ssl/SSL_CTX_dane_enable.pod deleted file mode 100644 index cdb6d1bd..00000000 --- a/doc/ssl/SSL_CTX_dane_enable.pod +++ /dev/null @@ -1,384 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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 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); - -=head1 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 L function, and -applications that override L via -L 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 B argument specifies a DANE TLSA matching type and the B -argument specifies the associated digest algorithm handle. -The B 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 B 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 C (see RFC7218 for definitions -of the DANE TLSA parameter acronyms) is mapped to C -with a strength ordinal of C<1> and matching type C -is mapped to C with a strength ordinal of C<2>. - -SSL_dane_enable() must be called before the SSL handshake is initiated with -L if (and only if) you want to enable DANE for that connection. -(The connection must be associated with a DANE-enabled SSL context). -The B 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 L. -The B is used as the default SNI hint if none has yet been -specified via L. - -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 B field is provided in binary (wire RDATA) form, not the hexadecimal -ASCII presentation form, with an explicit length passed via B. -The library takes a copy of the B buffer contents and the caller may -free the original B 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 L. -The return value is an index into this verified chain, rather than the list of -certificates sent by the peer as returned by L. - -If the B argument is not B and a TLSA record matched a chain -certificate, a pointer to the matching certificate is returned via B. -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 -L to obtain a long-term reference which must then be freed via -L 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 B 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 B this is a short-term internal reference, and -L and L 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 B, -B, B and B parameters is updated to the corresponding -TLSA record fields. -The B field is in binary wire form, and is therefore not NUL-terminated, -its length is returned via the B parameter. -If any of these parameters is NULL, the corresponding field is not returned. -The B 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 B argument is a bitmask of the features to enable or disable. -The B set for an B context are copied to each B handle -associated with that context at the time the handle is created. -Subsequent changes in the context's B have no effect on the B set -for the handle. - -At present, the only available option is B -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. - -=head1 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 B<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 C (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 B in effect -before they were called. - -=head1 EXAMPLE - -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) - /* handle error */ - if (SSL_CTX_dane_enable(ctx) <= 0) - /* handle error */ - - if ((ssl = SSL_new(ctx)) == NULL) - /* handle error */ - - if (SSL_dane_enable(ssl, dane_tlsa_domain) <= 0) - /* handle 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)) - /* handle 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. - */ - } - -=head1 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 -L with B equal to B. - -=head1 SEE ALSO - -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L, -L - -=head1 HISTORY - -These functions were first added to OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_sess_set_get_cb.pod b/doc/ssl/SSL_CTX_sess_set_get_cb.pod deleted file mode 100644 index d2b0e047..00000000 --- a/doc/ssl/SSL_CTX_sess_set_get_cb.pod +++ /dev/null @@ -1,96 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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); - - int (*new_session_cb)(struct ssl_st *ssl, SSL_SESSION *sess); - void (*remove_session_cb)(struct ssl_ctx_st *ctx, SSL_SESSION *sess); - SSL_SESSION *(*get_session_cb)(struct ssl_st *ssl, unsigned char *data, - int len, int *copy); - -=head1 DESCRIPTION - -SSL_CTX_sess_set_new_cb() sets the callback function, which is automatically -called whenever a new session was negotiated. - -SSL_CTX_sess_set_remove_cb() sets the callback function, which is -automatically called whenever a session is removed by the SSL engine, -because it is considered faulty or the session has become obsolete because -of exceeding the timeout value. - -SSL_CTX_sess_set_get_cb() sets the callback function which is called, -whenever a SSL/TLS client proposed to resume a session but the session -could not be found in the internal session cache (see -L). -(SSL/TLS server only.) - -SSL_CTX_sess_get_new_cb(), SSL_CTX_sess_get_remove_cb(), and -SSL_CTX_sess_get_get_cb() allow to retrieve the function pointers of the -provided callback functions. If a callback function has not been set, -the NULL pointer is returned. - -=head1 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 -L interface. - -The new_session_cb() is called, whenever a new session has been negotiated -and session caching is enabled (see -L). -The new_session_cb() is passed the B connection and the ssl session -B. If the callback returns B<0>, the session will be immediately -removed again. - -The remove_session_cb() is called, whenever the SSL engine removes a session -from the internal cache. This happens 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 -L is called. The remove_session_cb() is passed -the B and the ssl session B. It does not provide any feedback. - -The get_session_cb() is only called on SSL/TLS servers with the session id -proposed by the client. The get_session_cb() is always called, also when -session caching was disabled. The get_session_cb() is passed the -B connection, the session id of length B at the memory location -B. With the parameter B the callback can require the -SSL engine to increment the reference count of the SSL_SESSION object, -Normally the reference count is not incremented and therefore the -session must not be explicitly freed with -L. - -=head1 SEE ALSO - -L, L, -L, -L, -L, -L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set1_curves.pod b/doc/ssl/SSL_CTX_set1_curves.pod deleted file mode 100644 index b0276c80..00000000 --- a/doc/ssl/SSL_CTX_set1_curves.pod +++ /dev/null @@ -1,90 +0,0 @@ -=pod - -=head1 NAME - -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 - -=head1 SYNOPSIS - - #include - - 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); - -=head1 DESCRIPTION - -SSL_CTX_set1_curves() sets the supported curves for B to B -curves in the array B. The array consist of all NIDs of curves in -preference order. For a TLS client the curves are used directly in the -supported curves extension. For a TLS server the curves are used to -determine the set of shared curves. - -SSL_CTX_set1_curves_list() sets the supported curves for B to -string B. The string is a colon separated list of curve NIDs or -names, for example "P-521:P-384:P-256". - -SSL_set1_curves() and SSL_set1_curves_list() are similar except they set -supported curves for the SSL structure B. - -SSL_get1_curves() returns the set of supported curves sent by a client -in the supported curves extension. It returns the total number of -supported curves. The B parameter can be B to simply -return the number of curves for memory allocation purposes. The -B array is in the form of a set of curve NIDs in preference -order. It can return zero if the client did not send a supported curves -extension. - -SSL_get_shared_curve() returns shared curve B for a server-side -SSL B. If B is -1 then the total number of shared curves is -returned, which may be zero. Other than for diagnostic purposes, -most applications will only be interested in the first shared curve -so B is normally set to zero. If the value B is out of range, -NID_undef is returned. - -All these functions are implemented as macros. - -=head1 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. - -=head1 RETURN VALUES - -SSL_CTX_set1_curves(), SSL_CTX_set1_curves_list(), SSL_set1_curves() and -SSL_set1_curves_list(), return 1 for success and 0 for failure. - -SSL_get1_curves() returns the number of curves, which may be zero. - -SSL_get_shared_curve() returns the NID of shared curve B or NID_undef if there -is no shared curve B; or the total number of shared curves if B -is -1. - -When called on a client B, SSL_get_shared_curve() has no meaning and -returns -1. - -=head1 SEE ALSO - -L - -=head1 HISTORY - -These functions were first added to OpenSSL 1.0.2. - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_cert_store.pod b/doc/ssl/SSL_CTX_set_cert_store.pod deleted file mode 100644 index 7f7a794b..00000000 --- a/doc/ssl/SSL_CTX_set_cert_store.pod +++ /dev/null @@ -1,73 +0,0 @@ -=pod - -=head1 NAME - -SSL_CTX_set_cert_store, SSL_CTX_get_cert_store - manipulate X509 certificate verification storage - -=head1 SYNOPSIS - - #include - - void SSL_CTX_set_cert_store(SSL_CTX *ctx, X509_STORE *store); - X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *ctx); - -=head1 DESCRIPTION - -SSL_CTX_set_cert_store() sets/replaces the certificate verification storage -of B to/with B. If another X509_STORE object is currently -set in B, it will be X509_STORE_free()ed. - -SSL_CTX_get_cert_store() returns a pointer to the current certificate -verification storage. - -=head1 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 -L. -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 -L -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 -L family of functions. -This document must therefore be updated when documentation about the -X509_STORE object and its handling becomes available. - -=head1 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. - -=head1 RETURN VALUES - -SSL_CTX_set_cert_store() does not return diagnostic output. - -SSL_CTX_get_cert_store() returns the current setting. - -=head1 SEE ALSO - -L, -L, -L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_mode.pod b/doc/ssl/SSL_CTX_set_mode.pod deleted file mode 100644 index 1b3e783a..00000000 --- a/doc/ssl/SSL_CTX_set_mode.pod +++ /dev/null @@ -1,114 +0,0 @@ -=pod - -=head1 NAME - -SSL_CTX_set_mode, SSL_set_mode, SSL_CTX_get_mode, SSL_get_mode - manipulate SSL engine mode - -=head1 SYNOPSIS - - #include - - long SSL_CTX_set_mode(SSL_CTX *ctx, long mode); - long SSL_set_mode(SSL *ssl, long mode); - - long SSL_CTX_get_mode(SSL_CTX *ctx); - long SSL_get_mode(SSL *ssl); - -=head1 DESCRIPTION - -SSL_CTX_set_mode() adds the mode set via bitmask in B to B. -Options already set before are not cleared. - -SSL_set_mode() adds the mode set via bitmask in B to B. -Options already set before are not cleared. - -SSL_CTX_get_mode() returns the mode set for B. - -SSL_get_mode() returns the mode set for B. - -=head1 NOTES - -The following mode changes are available: - -=over 4 - -=item SSL_MODE_ENABLE_PARTIAL_WRITE - -Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success -when just a single record has been written). When not set (the default), -SSL_write() will only report success once the complete chunk was written. -Once SSL_write() returns with r, r bytes have been successfully written -and the next call to SSL_write() must only send the n-r bytes left, -imitating the behaviour of write(). - -=item SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER - -Make it possible to retry 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(). - -=item SSL_MODE_AUTO_RETRY - -Never bother the application with retries if the transport is blocking. -If a renegotiation take place during normal operation, a -L or L would return -with -1 and indicate the need to retry with SSL_ERROR_WANT_READ. -In a non-blocking environment applications must be prepared to handle -incomplete read/write operations. -In a blocking environment, applications are not always prepared to -deal with read/write operations returning without success report. The -flag SSL_MODE_AUTO_RETRY will cause read/write operations to only -return after the handshake and successful completion. - -=item 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. - -=item 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. - -=item 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 L. - -=back - -=head1 RETURN VALUES - -SSL_CTX_set_mode() and SSL_set_mode() return the new mode bitmask -after adding B. - -SSL_CTX_get_mode() and SSL_get_mode() return the current bitmask. - -=head1 SEE ALSO - -L, L, L, L - -=head1 HISTORY - -SSL_MODE_ASYNC was first added to OpenSSL 1.1.0. - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_msg_callback.pod b/doc/ssl/SSL_CTX_set_msg_callback.pod deleted file mode 100644 index 9546e751..00000000 --- a/doc/ssl/SSL_CTX_set_msg_callback.pod +++ /dev/null @@ -1,103 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -SSL_CTX_set_msg_callback() or SSL_set_msg_callback() can be used to -define a message callback function I for observing all SSL/TLS -protocol messages (such as handshake messages) that are received or -sent. SSL_CTX_set_msg_callback_arg() and SSL_set_msg_callback_arg() -can be used to set argument I 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 B objects by -L. SSL_set_msg_callback() and -SSL_set_msg_callback_arg() modify the actual settings of an B -object. Using a B<0> pointer for I disables the message callback. - -When I is called by the SSL/TLS library for a protocol message, -the function arguments have the following meaning: - -=over 4 - -=item I - -This flag is B<0> when a protocol message has been received and B<1> -when a protocol message has been sent. - -=item I - -The protocol version according to which the protocol message is -interpreted by the library. Currently, this is one of -B, B and B (for SSL 2.0, SSL -3.0 and TLS 1.0, respectively). - -=item I - -In the case of SSL 2.0, this is always B<0>. In the case of SSL 3.0 -or TLS 1.0, this is one of the B values defined in the -protocol specification (B, B, -B; but never B because the -callback will only be called for protocol messages). - -=item I, I - -I points to a buffer containing the protocol message, which -consists of I bytes. The buffer is no longer valid after the -callback function has returned. - -=item I - -The B object that received or sent the message. - -=item I - -The user-defined argument optionally defined by -SSL_CTX_set_msg_callback_arg() or SSL_set_msg_callback_arg(). - -=back - -=head1 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, I 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, -I will be B. - -=head1 SEE ALSO - -L, L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_psk_client_callback.pod b/doc/ssl/SSL_CTX_set_psk_client_callback.pod deleted file mode 100644 index a4175081..00000000 --- a/doc/ssl/SSL_CTX_set_psk_client_callback.pod +++ /dev/null @@ -1,63 +0,0 @@ -=pod - -=head1 NAME - -SSL_CTX_set_psk_client_callback, SSL_set_psk_client_callback - set PSK client callback - -=head1 SYNOPSIS - - #include - - 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)); - 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)); - - -=head1 DESCRIPTION - -A client application must provide a callback function which is 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 B, a B-terminated PSK identity hint -sent by the server in parameter B, a buffer B of -length B bytes where the resulting -B-terminated identity is to be stored, and a buffer B of -length B bytes where the resulting pre-shared key is to -be stored. - -=head1 NOTES - -Note that parameter B given to the callback may be B. - -=head1 RETURN VALUES - -Return values from the client callback are interpreted as follows: - -On success (callback found a PSK identity and a pre-shared key to use) -the length (> 0) of B in bytes is returned. - -Otherwise or on errors callback should return 0. In this case -the connection setup fails. - -=head1 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 -L. - -Copyright 2005 Nokia. - -=cut diff --git a/doc/ssl/SSL_CTX_set_security_level.pod b/doc/ssl/SSL_CTX_set_security_level.pod deleted file mode 100644 index 577b3937..00000000 --- a/doc/ssl/SSL_CTX_set_security_level.pod +++ /dev/null @@ -1,169 +0,0 @@ -=pod - -=head1 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 - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -The functions SSL_CTX_set_security_level() and SSL_set_security_level() set -the security level to B. 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 B or B. 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 B parameter of the callback. This -value is passed to the callback verbatim and can be set to any convenient -application specific value. - -=head1 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. - -=over 4 - -=item B - -Everything is permitted. This retains compatibility with previous versions of -OpenSSL. - -=item B - -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 ciphersuites are prohibited since they all offer -less than 80 bits of security. SSL version 2 is prohibited. Any ciphersuite -using MD5 for the MAC is also prohibited. - -=item B - -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 ciphersuite using RC4 is also -prohibited. SSL version 3 is also not allowed. Compression is disabled. - -=item B - -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 ciphersuites not offering forward -secrecy are prohibited. TLS versions below 1.1 are not permitted. Session -tickets are disabled. - -=item B - -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. -Ciphersuites using SHA1 for the MAC are prohibited. TLS versions below 1.2 are -not permitted. - -=item B - -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. - -=back - -=head1 APPLICATION DEFINED SECURITY CALLBACKS - -I - -=head1 NOTES - -B at this time setting the security level higher than 1 for -general internet use is likely to cause B interoperability -issues and is not recommended. This is because the B algorithm -is very widely used in certificates and will be rejected at levels -higher than 1 because it only offers 80 bits of security. - -The default security level can be configured when OpenSSL is compiled by -setting B<-DOPENSSL_TLS_SECURITY_LEVEL=level>. If not set then 1 is used. - -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 -ciphersuite 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 ciphersuite is set to B -then only ciphersuites 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 ciphersuites -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. - -=head1 HISTORY - -These functions were first added to OpenSSL 1.1.0 - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_split_send_fragment.pod b/doc/ssl/SSL_CTX_set_split_send_fragment.pod deleted file mode 100644 index accf5af2..00000000 --- a/doc/ssl/SSL_CTX_set_split_send_fragment.pod +++ /dev/null @@ -1,132 +0,0 @@ -=pod - -=head1 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 - Control -fragment sizes and pipelining operations - -=head1 SYNOPSIS - - #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); - -=head1 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 -B 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 L). This is -explained further below. OpenSSL will only every use more than one pipeline if -a ciphersuite 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() call divided by -B. - -For example if B is set to 2000 and B is 4 -then: - -SSL_write called with 0-2000 bytes == 1 pipeline used - -SSL_write called with 2001-4000 bytes == 2 pipelines used - -SSL_write called with 4001-6000 bytes == 3 pipelines used - -SSL_write called with 6001+ bytes == 4 pipelines used - -B must always be less than or equal to -B. By default it is set to be equal to B. -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 B to a value greater than one, B -is automatically set. The B 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 B can impact the behaviour of the SSL_pending() -function (see L). - -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 B -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. - -=head1 RETURN VALUES - -All non-void functions return 1 on success and 0 on failure. - -=head1 NOTES - -With the exception of SSL_CTX_set_default_read_buffer_len() and -SSL_set_default_read_buffer_len() all these functions are implemented using -macros. - -=head1 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. - -=head1 SEE ALSO - -L, L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod b/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod deleted file mode 100644 index 34d8ce9a..00000000 --- a/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod +++ /dev/null @@ -1,198 +0,0 @@ -=pod - -=head1 NAME - -SSL_CTX_set_tlsext_ticket_key_cb - set a callback for session ticket processing - -=head1 SYNOPSIS - - #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)); - -=head1 DESCRIPTION - -SSL_CTX_set_tlsext_ticket_key_cb() sets a callback function I for handling -session tickets for the ssl context I. 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 I 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 I and I have been -initialised with EVP_CIPHER_CTX_init and HMAC_CTX_init 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 I equal to 1. The OpenSSL -library expects that the function will set an arbitrary I, initialize -I, and set the cipher context I and the hash context I. - -The I is 16 characters long and is used as a key identifier. - -The I length is the length of the IV of the corresponding cipher. The -maximum IV length is B bytes defined in B. - -The initialization vector I should be a random value. The cipher context -I should use the initialisation vector I. The cipher context can be -set using L. The hmac context can be set using -L. - -When the client presents a session ticket, the callback function with be called -with I set to 0 indicating that the I function should retrieve a set -of parameters. In this case I and I have already been parsed out of -the session ticket. The OpenSSL library expects that the I will be used -to retrieve a cryptographic parameters and that the cryptographic context -I will be set with the retrieved parameters and the initialization vector -I. using a function like L. The I needs to be -set using L. - -If the I 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 I function is used by OpenSSL to determine what -further processing will occur. The following return values have meaning: - -=over 4 - -=item Z<>2 - -This indicates that the I and I 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 I again with an enc argument of 1 to set the new ticket (see RFC5077 -3.3 paragraph 2). - -=item Z<>1 - -This indicates that the I and I have been set and the session can -continue on those parameters. - -=item Z<>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 I again to get -a new set of parameters. - -=item less than 0 - -This indicates an error. - -=back - -=head1 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 ciphersuite 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 ciphersuite 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. - -=head1 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) ) { - return -1; /* insufficient random */ - } - - key = currentkey(); /* something that you need to implement */ - if ( !key ) { - /* 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 ) { /* 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 || 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 is still valid */ - return 2; - } - return 1; - - } - } - - - -=head1 RETURN VALUES - -returns 0 to indicate the callback function was set. - -=head1 SEE ALSO - -L, L, -L, -L, -L, -L, -L, - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_set_verify.pod b/doc/ssl/SSL_CTX_set_verify.pod deleted file mode 100644 index 79934989..00000000 --- a/doc/ssl/SSL_CTX_set_verify.pod +++ /dev/null @@ -1,307 +0,0 @@ -=pod - -=head1 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 -- set peer certificate verification parameters - -=head1 SYNOPSIS - - #include - - void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb verify_callback); - void SSL_set_verify(SSL *s, 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 *s, int depth); - - - typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); - -=head1 DESCRIPTION - -SSL_CTX_set_verify() sets the verification flags for B to be B and -specifies the B function to be used. If no callback function -shall be specified, the NULL pointer can be used for B. - -SSL_set_verify() sets the verification flags for B to be B and -specifies the B function to be used. If no callback function -shall be specified, the NULL pointer can be used for B. In -this case last B set specifically for this B remains. If -no special B was set before, the default callback for the underlying -B is used, that was valid at the time B was created with -L. Within the callback function, -B 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 B for the certificate chain -verification that shall be allowed for B. - -SSL_set_verify_depth() sets the maximum B for the certificate chain -verification that shall be allowed for B. - -=head1 NOTES - -The verification of certificates can be controlled by a set of logically -or'ed B flags: - -=over 4 - -=item SSL_VERIFY_NONE - -B the server will not send a client certificate request to the -client, so the client will not send a certificate. - -B 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 L function. -The handshake will be continued regardless of the verification result. - -=item SSL_VERIFY_PEER - -B 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 and SSL_VERIFY_CLIENT_ONCE flags. - -B 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. - -=item SSL_VERIFY_FAIL_IF_NO_PEER_CERT - -B 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. - -B ignored - -=item SSL_VERIFY_CLIENT_ONCE - -B only request a client certificate on the initial TLS/SSL -handshake. Do not ask for a client certificate again in case of a -renegotiation. This flag must be used together with SSL_VERIFY_PEER. - -B ignored - -=back - -If the B 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 -L. -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 B. If the -certificate chain needed to reach a trusted issuer is longer than B, -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 B 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: B indicates, whether the verification of -the certificate in question was passed (preverify_ok=1) or not -(preverify_ok=0). B 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 B -and B is called with B=0. By applying -X509_CTX_store_* functions B can locate the certificate -in question and perform additional steps (see EXAMPLES). If no error is -found for a certificate, B is called with B=1 -before advancing to the next level. - -The return value of B controls the strategy of the further -verification process. If B 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 B returns 1, -the verification process is continued. If B 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 -L or by maintaining its -own error storage managed by B. - -If no B is specified, the default callback will be used. -Its return value is identical to B, 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. - -=head1 BUGS - -In client mode, it is not checked whether the SSL_VERIFY_PEER flag -is set, but whether any flags are set. This can lead to -unexpected behaviour if SSL_VERIFY_PEER and other flags are not used as -required. - -=head1 RETURN VALUES - -The SSL*_set_verify*() functions do not provide diagnostic information. - -=head1 EXAMPLES - -The following code sequence realizes an example B 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 L, -L). - - ... - 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 */ - } - } - -=head1 SEE ALSO - -L, L, -L, -L, -L, -L, -L, -L, -L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_CTX_use_psk_identity_hint.pod b/doc/ssl/SSL_CTX_use_psk_identity_hint.pod deleted file mode 100644 index 753074a7..00000000 --- a/doc/ssl/SSL_CTX_use_psk_identity_hint.pod +++ /dev/null @@ -1,87 +0,0 @@ -=pod - -=head1 NAME - -SSL_CTX_use_psk_identity_hint, SSL_use_psk_identity_hint, -SSL_CTX_set_psk_server_callback, SSL_set_psk_server_callback - set PSK -identity hint to use - -=head1 SYNOPSIS - - #include - - 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, - unsigned int (*callback)(SSL *ssl, const char *identity, - unsigned char *psk, int max_psk_len)); - void SSL_set_psk_server_callback(SSL *ssl, - unsigned int (*callback)(SSL *ssl, const char *identity, - unsigned char *psk, int max_psk_len)); - - -=head1 DESCRIPTION - -SSL_CTX_use_psk_identity_hint() sets the given B-terminated PSK -identity hint B to SSL context object -B. SSL_use_psk_identity_hint() sets the given B-terminated -PSK identity hint B to SSL connection object B. If B -is B the current hint from B or B is deleted. - -In the case where PSK identity hint is B, the server -does not send the ServerKeyExchange message to the client. - -A server application 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 functions -SSL_CTX_set_psk_server_callback() or -SSL_set_psk_server_callback(). The callback function is given the -connection in parameter B, B-terminated PSK identity sent -by the client in parameter B, and a buffer B of length -B bytes where the pre-shared key is to be stored. - - -=head1 RETURN VALUES - -SSL_CTX_use_psk_identity_hint() and SSL_use_psk_identity_hint() return -1 on success, 0 otherwise. - -Return values from the server callback are interpreted as follows: - -=over 4 - -=item Z<>0 - -PSK identity was not found. An "unknown_psk_identity" alert message -will be sent and the connection setup fails. - -=item E0 - -PSK identity was found and the server callback has provided the PSK -successfully in parameter B. Return value is the length of -B in bytes. It is an error to return a value greater than -B. - -If the PSK identity was not found but the callback instructs the -protocol to continue anyway, the callback must provide some random -data to B and return the length of the random data, so the -connection will fail with decryption_error before it will be finished -completely. - -=back - -=head1 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 -L. - -Copyright 2005 Nokia. - -=cut diff --git a/doc/ssl/SSL_CTX_use_serverinfo.pod b/doc/ssl/SSL_CTX_use_serverinfo.pod deleted file mode 100644 index bd496ff8..00000000 --- a/doc/ssl/SSL_CTX_use_serverinfo.pod +++ /dev/null @@ -1,56 +0,0 @@ -=pod - -=head1 NAME - -SSL_CTX_use_serverinfo, SSL_CTX_use_serverinfo_file - use serverinfo extension - -=head1 SYNOPSIS - - #include - - 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); - -=head1 DESCRIPTION - -These functions load "serverinfo" TLS ServerHello Extensions into the SSL_CTX. -A "serverinfo" extension is returned in response to an empty ClientHello -Extension. - -SSL_CTX_use_serverinfo() loads one or more serverinfo extensions from -a byte array into B. The extensions must be concatenated into a -sequence of bytes. Each extension must consist of a 2-byte Extension Type, -a 2-byte length, and then length bytes of extension_data. - -SSL_CTX_use_serverinfo_file() loads one or more serverinfo extensions from -B into B. The extensions must be in PEM format. Each extension -must consist of a 2-byte Extension Type, a 2-byte length, and then length -bytes of extension_data. Each PEM extension name must begin with the phrase -"BEGIN SERVERINFO FOR ". - -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 B -each time a certificate is loaded. - -=head1 RETURN VALUES - -On success, the functions return 1. -On failure, the functions return 0. Check out the error stack to find out -the reason. - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_SESSION_get0_cipher.pod b/doc/ssl/SSL_SESSION_get0_cipher.pod deleted file mode 100644 index fdd36edc..00000000 --- a/doc/ssl/SSL_SESSION_get0_cipher.pod +++ /dev/null @@ -1,42 +0,0 @@ -=pod - -=head1 NAME - -SSL_SESSION_get0_cipher - retrieve the SSL cipher associated with a session - -=head1 SYNOPSIS - - #include - - const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSSION *s); - -=head1 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 B and -should not be released. - -=head1 SEE ALSO - -L, -L, -L, -L, -L - -=head1 HISTORY - -SSL_SESSION_get0_cipher() was first added to OpenSSL 1.1.0 - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_SESSION_get0_hostname.pod b/doc/ssl/SSL_SESSION_get0_hostname.pod deleted file mode 100644 index 6fb12bec..00000000 --- a/doc/ssl/SSL_SESSION_get0_hostname.pod +++ /dev/null @@ -1,37 +0,0 @@ -=pod - -=head1 NAME - -SSL_SESSION_get0_hostname - retrieve the SNI hostname associated with a session - -=head1 SYNOPSIS - - #include - - const char *SSL_SESSION_get0_hostname(const SSL_SESSSION *s); - -=head1 DESCRIPTION - -SSL_SESSION_get0_hostname() retrieves the SNI value that was sent by the -client when the session was created, or NULL if no value was sent. - -The value returned is a pointer to memory maintained within B and -should not be free'd. - -=head1 SEE ALSO - -L, -L, -L, -L - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_SESSION_get_protocol_version.pod b/doc/ssl/SSL_SESSION_get_protocol_version.pod deleted file mode 100644 index a033fdd9..00000000 --- a/doc/ssl/SSL_SESSION_get_protocol_version.pod +++ /dev/null @@ -1,44 +0,0 @@ -=pod - -=head1 NAME - -SSL_SESSION_get_protocol_version - retrieve session protocol version - -=head1 SYNOPSIS - - #include - - int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); - -=head1 DESCRIPTION - -SSL_SESSION_get_protocol_version() returns the protocol version number used -by session B. - -=head1 RETURN VALUES - -SSL_SESSION_get_protocol_version() returns a number indicating the protocol -version used for the session; this number matches the constants I -B or B. - -Note that the SSL_SESSION_get_protocol_version() function -does B perform a null check on the provided session B pointer. - -=head1 SEE ALSO - -L - -=head1 HISTORY - -SSL_SESSION_get_protocol_version() was first added to OpenSSL 1.1.0 - -=head1 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 -L. - -=cut diff --git a/doc/ssl/SSL_export_keying_material.pod b/doc/ssl/SSL_export_keying_material.pod deleted file mode 100644 index ccb99ec9..00000000 --- a/doc/ssl/SSL_export_keying_material.pod +++ /dev/null @@ -1,61 +0,0 @@ -=pod - -=head1 NAME - -SSL_export_keying_material - obtain keying material for application use - -=head1 SYNOPSIS - - #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); - -=head1 DESCRIPTION - -During the creation of a TLS or DTLS connection shared keying material is -established between the two endpoints. The function SSL_export_keying_material() -enables an application to use some of this keying material for its own purposes -in accordance with RFC5705. - -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 B, B bytes of data will be written to -B. The application specific context should be supplied in the location -pointed to by B and should be B bytes long. Provision of -a context is optional. If the context should be omitted entirely then -B should be set to 0. Otherwise it should be any other value. If -B is 0 then the values of B and B are ignored. -Note that a zero length context is treated differently to no context at all, and -will result in different keying material being returned. - -An application specific label should be provided in the location pointed to by -B

5$TuHGcXu1h%+#NrQR4Y zFfcQMIUxCAEK4094~8(Jj!(#m_kpt+e`+19?!xctQQ5(en{dQJKLZqi3Q#PiBmnr7 B&g}pI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/10d216bab7ea9e57deec17e099418ae1d96d644e b/fuzz/corpora/asn1/10d216bab7ea9e57deec17e099418ae1d96d644e new file mode 100644 index 0000000000000000000000000000000000000000..01f4b5a8ea21ea26b94daedac244e7bbcb54269f GIT binary patch literal 8024 zcmeHMOKQU~5FNS2w3I-P&|QL776b}CL9Wr8s2g7^N9b{~bkV0sk>$_GN*v*tm1VG{ znR)Z(dEChQjkl-vvSY9BtU7~iWc9okKT@bG#v9p40Rq&rt{6Y+m08$FJ8LPg;KvV8 zcKEHI;8R_xm+4#9Mm9!n=pBDmkBwu_ZB z3N0Svg`Vd{6$60TrI?!QK~xPSXKJ4~QA|ArVLon2FrgIy1r#fzgKY~oHxznFb;N-3 zr$;6DMwJ?phvEZN&{p!;rMUHE0dfD0HI$*WY>FZmi#s%+uzOYT=R{eV7LqL#yuqTE z9JKiN#NOP*dXMB)NplaNu}G|l<%snQ;;ZZaDWFJ2ya5?BqM-B620|Ozm}Ub?bkJu%9PMkt}091X0xbDzF9TmxhG#fCp(*gw$%?9G5?@e`?g<8;k4bp7jj{jFocf;y_ sDtIdRr3F9t)7%Snfvu5P5%b?TZ?30i13Z`Jw7qMX6^#k`Vm~JS0LAywZvX%Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/10d7b64c22d438eefbe68b6511ce73b9160977ca b/fuzz/corpora/asn1/10d7b64c22d438eefbe68b6511ce73b9160977ca new file mode 100644 index 0000000000000000000000000000000000000000..04d2f699791f4357061b391d5c1544b506652545 GIT binary patch literal 1590 zcmXqLVB_{^(`x(9%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B52jlgUp0|7R6 ztu~KywoHs{tlEt%42sNh49pC8fk6WsORGT>0|NsyBLf2i$P%np7>rsm8c?Gt3M1={ O=8MsMF<9~i6B7VeAfsUb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/11104e4ba4a92fdc254b6dd8aa4d7745e6236d45 b/fuzz/corpora/asn1/11104e4ba4a92fdc254b6dd8aa4d7745e6236d45 new file mode 100644 index 0000000000000000000000000000000000000000..8b5a27513de127696de28149e2f538b09392d72c GIT binary patch literal 78 xcmXqLU}H2`&|uKO#;DH5!otGBAm7BrAm4QG;6WxR6U4=V4;}NfQx2e0060c2l)U1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/113cb7e34e5d23b648a38a9623555026c4efb30d b/fuzz/corpora/asn1/113cb7e34e5d23b648a38a9623555026c4efb30d new file mode 100644 index 0000000000000000000000000000000000000000..c76d55e5d2dc886b6baf06cac5e6d04fa3395781 GIT binary patch literal 2084 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU3e>DA#=D*SM SXSDnst$zlp{smRW1_l6m0?D)h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1141781eecdc2ed4e7d8cd78ea09bb40f8bd3d22 b/fuzz/corpora/asn1/1141781eecdc2ed4e7d8cd78ea09bb40f8bd3d22 new file mode 100644 index 0000000000000000000000000000000000000000..355fc72634fef8fa1c830bd56bcfe39b207a434f GIT binary patch literal 111 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOQOmGlVF(i=!vdxT1_M?$Mg{{00~Z4Y0~vz` uLk0#0CXogPIADaZzWrxmFkl3WvobIkG_Zkmv8xF%Ft9*WXfZG_SOEY|xDS2+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/114ed3f13c47c57472a16a3a9589ceb363f88832 b/fuzz/corpora/asn1/114ed3f13c47c57472a16a3a9589ceb363f88832 new file mode 100644 index 0000000000000000000000000000000000000000..4162e82bd2ebec9319e78801ae879bee321459e9 GIT binary patch literal 46 dcmXqLFlaDrFlb<7(lF3zVB=8X!2%dy006Lt1n>X= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/11522859146ebc3a36bc8ff0e546ab6815ce53e6 b/fuzz/corpora/asn1/11522859146ebc3a36bc8ff0e546ab6815ce53e6 new file mode 100644 index 0000000000000000000000000000000000000000..2fc1b73591712a0e12f032b871e43d7c69a9dd3f GIT binary patch literal 48 ocmXqLFlaDrFlb<7l;>e!V1O`K{{R2~AI1TRva&I1f*1@8029RtDF6Tf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/11923d2ce5268e0bc8a5082feaa56f2b399e89fa b/fuzz/corpora/asn1/11923d2ce5268e0bc8a5082feaa56f2b399e89fa new file mode 100644 index 0000000000000000000000000000000000000000..db11e3f690ec677bf607fa40b7dfd911e5e356e9 GIT binary patch literal 27 ecmXqLFlaDrFlb<7l$YUP5M*FrkpBOl0So|Dz6CY_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1197c0ffd3e0f77b82340b4d493cf290228d8f49 b/fuzz/corpora/asn1/1197c0ffd3e0f77b82340b4d493cf290228d8f49 new file mode 100644 index 0000000000000000000000000000000000000000..a1851140131222c19dfbeacb7d6dfa30d8d2b23b GIT binary patch literal 2892 zcmeHJOA5j;5S>gz#e&d<;6_*7>1Moz7w9EC#bi@*409vBhkLg&32KG@uu2Pdx=S

x3X!D*wHSbADXn zl>j2|751B&Aem0s0iiY8Cus~)6GIB&i$Mda#0b@8vgix~Xxmy{x4_NCl{=*8V8!Qy znGia*8ch34Mvyj;qWg5pBnmKTi(Pu{2GiH^m(C`J^BAZ$(821%@adYYeFz3ZbD*?+ hNc2b7QZ_{Wfr!c64`JW_YS^dee-!q& YW>ZR=)>|uwW?zgHC#{va(K2nn08c-SX8-^I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/11b4592ae3a749e1600fbdbf27bf95357650402e b/fuzz/corpora/asn1/11b4592ae3a749e1600fbdbf27bf95357650402e new file mode 100644 index 0000000000000000000000000000000000000000..2ab8129bc5ffd4301c4ada1062a598fd62c4a51f GIT binary patch literal 24416 zcmeI4u}T9$5Qb;(;)zHgVv|a+lcZS!HcI*wK8N@i7s0%V&tYdH_&S!6yO_anQ8%y- zx6AjZNCJUjX6~PVc6K+uu1+Vb#p+||PDZYHk=nPfqVV3=RWU6^y!d+TZpO~HpJ#ql z9Zyz^_j%!}qv>)Wm*s_&LlJovxtHtNdcF4b+j;w|*LmTbh_9=`lYbPE(n<5xA8w+M zk?i7b^Yx*9i(#VUh2MD5_=*?b(oHS`c|o8ER0C?%A9_Kh-7l;ZkiY_Bsohtb#zW$F zAf!7m-2^HyP?o$@<=y<3VdkuNH<;trW;-a2Fmh@qE(|+i_)sWZrI&`gU7oEkKsiR zd9l4T#367FfpbU9qDD~$`&b6INO~7Wffr#{Wl_ETfzleqqL@W7i{kFSo+9Z=3%g-= z6n0zAX%$IRPZ8Y<)ow*}6M3YYK(P?xy3IBO*)}VMla9{^rEX5@B&^$;RTX(s3a+(k6Bdp6wyuOk!}JN_|WE& W?o_Ui(<$C02;9aOaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/11d900304d0975a26665059115a718113ef1a643 b/fuzz/corpora/asn1/11d900304d0975a26665059115a718113ef1a643 new file mode 100644 index 0000000000000000000000000000000000000000..c34c91bd62cfa0fcad8a371cd329b3f030bd0857 GIT binary patch literal 280 zcmXqLU}92ZFlf+eU}IwV%Ffon&d9)E!@vOIGk;)bYhYkS<^TVS%4e`)U;_(6^bB<~ GU;qGZd^kM- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/121ca7810c840a552d8d51dbcbf2ee49df3ccd4d b/fuzz/corpora/asn1/121ca7810c840a552d8d51dbcbf2ee49df3ccd4d new file mode 100644 index 0000000000000000000000000000000000000000..c8180bf0944e12400d116ca8f5c2950715bf541a GIT binary patch literal 52 UcmXqLSkSPbp^bqU*vHGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZ-W8BeY0x g1sly=LFcfbkw-`fN>U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1242a289a21334d8c0b10bd76803c9c3ba4aee4f b/fuzz/corpora/asn1/1242a289a21334d8c0b10bd76803c9c3ba4aee4f new file mode 100644 index 0000000000000000000000000000000000000000..e2fa70e282bf0f23ff3633cceae1c80b5c5186a3 GIT binary patch literal 9 QcmXqLFlb<7G*Dy!01Ev9xc~qF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/126ac8113f06449d4ce19914cd4f34bfce0248ab b/fuzz/corpora/asn1/126ac8113f06449d4ce19914cd4f34bfce0248ab new file mode 100644 index 0000000000000000000000000000000000000000..71a7ba0240b423e784c2725e20d88c1f244a99a6 GIT binary patch literal 27 gcmXqLFlZ1IHfUgD6qV!RxHUqZ0Cy}l7CyuDk=zcknp6`|tfo$g;BznytV1<(U?Ttm3>w&& SLJb<2-WV`2FoRsgzyJVyCq)bZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/129bc116ce9bb203478b33802b9edd90f19fb27b b/fuzz/corpora/asn1/129bc116ce9bb203478b33802b9edd90f19fb27b new file mode 100644 index 0000000000000000000000000000000000000000..bffe5be0e2a9ca557350052df1b8fdaa8123d9c9 GIT binary patch literal 510 zcmcgoI|{;35Zw34(-(~&LR64IDhsQ5c48rjMG6~>GcVJ{c?pI|3UC5WN^>2c1TE9^vjrutsGXp#L(A8JNJh1_s&&28ITx>d|?W>Ia!e zoEgNaLU$jrrX%z%M`FW7iM5-$VT@+00in2|#N{xbVx!UAfg_C&rwZA8Qgu+`KkCH{ osjf!&7)d811A_o4zY&a6gl-sXE1U%tVPpUU0Wd!SrVK#?0Ipp52mk;8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/12accca93449d9a07a67f0d2fcc94f49411366c3 b/fuzz/corpora/asn1/12accca93449d9a07a67f0d2fcc94f49411366c3 new file mode 100644 index 0000000000000000000000000000000000000000..13f5991e4c93be9df60a482a8be4fa105d39728a GIT binary patch literal 1000 zcmXqLVB^+mV}Jl|ru_^J24Kjz{aG_%)ns4V9+4JXeGgD0AU*lv$1Qnd7QIl zVnj$Vn=!DcGZ;V&GH5U`U@%}{1oI7`f+)ZT#LIvR88oo5v>G%qFfcGPGBAL2kJ>*P Q{-f!Sr2Hp_FaH?;09LRwtPD%4LBoQEg$)L*Y>X;43}8wJOj*l;DGd#X zAVN-ujZu+D{m1@>h7Er_OpRW)Q|xT z*dY|eWuiuOa#_n9N?kTEAxgQsX%*KvT*hSB*3=;Sa}dULT_syHk*RP{#Wg=H!+^k` g$~}+}H6SLg2UUoUrUbG}cpSNY#DplQ+5%UY0I(*w0{{R3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/12ded2f0ce41e4dde2102688fe4616ac7aaac1a1 b/fuzz/corpora/asn1/12ded2f0ce41e4dde2102688fe4616ac7aaac1a1 new file mode 100644 index 0000000000000000000000000000000000000000..aeb21481e26460c32d52ce8af01cab62f0a0b890 GIT binary patch literal 1064 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT92uEp8UCXI1_v`HOe1?$4UieU!zL zWji0w-s~;=>y3mb?DS$jcscBlppuDE!!^MeS;f8P$sJq2EC2RUy8rB~bLoO8cJ~yQ ztBo^T8R|?R&P8^@|Nnn|p)O`%WMX7wwqjt(`jm3#v9aCLD<;!7w!hnD$H>O2-N?eA z$SlXe%)r3P5DoIeNz?!TSr`}?gyDh1$iQIGz{b*Q(8R#Nz|6=1;u?@2xQciJ7X(HF mcW?#n<^4BysdHO8(=z3v0YWL436^p}c^5f(LUT8cybS=qrM{>D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/12e0cd0531d71736d8a11c2b5095dfc4403aef29 b/fuzz/corpora/asn1/12e0cd0531d71736d8a11c2b5095dfc4403aef29 new file mode 100644 index 00000000..017e8eed --- /dev/null +++ b/fuzz/corpora/asn1/12e0cd0531d71736d8a11c2b5095dfc4403aef29 @@ -0,0 +1,4 @@ +0 + + +Ü \ No newline at end of file diff --git a/fuzz/corpora/asn1/1352821d768d5a70bcac5c40f2542a28e71ae1f0 b/fuzz/corpora/asn1/1352821d768d5a70bcac5c40f2542a28e71ae1f0 new file mode 100644 index 0000000000000000000000000000000000000000..ec9cc89123e15eba03be4f17f6200dda0fc524da GIT binary patch literal 120 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjo=bos`2nNoUIqpRCcy@#uc#Y^>FU*c&N=P)jQ&ip!#FKXr_ z8H$$GbOMgd^cj4|tE6cq7^=D$Dl(7`^w) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1362912a39aa7816ea10f1a56a3b2b6d43244cc9 b/fuzz/corpora/asn1/1362912a39aa7816ea10f1a56a3b2b6d43244cc9 new file mode 100644 index 0000000000000000000000000000000000000000..907a33de0849906ddb73490c3ea31a79d460bf13 GIT binary patch literal 5136 zcmeI0u?mAQ6h&{IAtGJG$)%;6RF^k&D4iVrtVf~wt^PrO$4M+IZC49Lt$hiEWC|oN zIrm-`x5<6!>#d1mLpKQborsymQ4s(Pmeib6!~Oio2N&kPx}U7!9a%Ijh~kElQbb(s zr5Z*91R=VX7=XpuD_;Nv2Hlc%la(G5&C13qI`!p&r|RH&#+UWo0}#ds8E?$sC+ry`Xn>UM(MHkWhuyl KIUdGmqW1vQ+Q>uz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1389cd4044d41d940d94dbbfea4953719bbf88e3 b/fuzz/corpora/asn1/1389cd4044d41d940d94dbbfea4953719bbf88e3 new file mode 100644 index 00000000..d83b6044 --- /dev/null +++ b/fuzz/corpora/asn1/1389cd4044d41d940d94dbbfea4953719bbf88e3 @@ -0,0 +1 @@ +0 diff --git a/fuzz/corpora/asn1/13b612638fa6e1c75c63ec7b3ba6404623238dc9 b/fuzz/corpora/asn1/13b612638fa6e1c75c63ec7b3ba6404623238dc9 new file mode 100644 index 0000000000000000000000000000000000000000..fbb391d8e3473f1b412b974af6a21018a0775952 GIT binary patch literal 159 rcmXqPFlb<7=3`+pY%pwKU;twVtPmuN9paY3t{!ZQ0lFNTDG&evBs>wI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/13ca9d68013d5c220f70298f0c4c009b63d6ba6d b/fuzz/corpora/asn1/13ca9d68013d5c220f70298f0c4c009b63d6ba6d new file mode 100644 index 0000000000000000000000000000000000000000..6978615e7cbcc620c196beb0f20e3cb4b2c002a1 GIT binary patch literal 83 gcmXqLSkSPbVL1anxD-itF^DICu6i-+QU*8x0KBakCIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/13ed0ce599d0353a2da422d80ea055ec8e4fd51e b/fuzz/corpora/asn1/13ed0ce599d0353a2da422d80ea055ec8e4fd51e new file mode 100644 index 0000000000000000000000000000000000000000..d57284cf1ce6baf4fc3516e2f0c4b57618ab645f GIT binary patch literal 32 WcmXqLSj=Py#fnI5keFfv0|NlBI0@?j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/13f8c86d8edf5a33973229033c883ee8037cd067 b/fuzz/corpora/asn1/13f8c86d8edf5a33973229033c883ee8037cd067 new file mode 100644 index 0000000000000000000000000000000000000000..150806703e47c8a3252b5d7439bad958dc65562b GIT binary patch literal 52 ycmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4r*{{H{33=9ekaB$8-laUc5uLJ-eTM8-w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/14207d2628a436b0ffae8d5d8b3543d9229eeae8 b/fuzz/corpora/asn1/14207d2628a436b0ffae8d5d8b3543d9229eeae8 new file mode 100644 index 0000000000000000000000000000000000000000..8e6dc6c74a35b19d656b31fc34da5f387aacc3e7 GIT binary patch literal 205 zcmXqPFlb<7G%##nXJBPuWdH%F02><{Te=p57Kk1oP>5zPx)V7VSQ%vDf(#4*59A6- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1445db6227680692d49bd25b6b9289fbaa3d18fd b/fuzz/corpora/asn1/1445db6227680692d49bd25b6b9289fbaa3d18fd new file mode 100644 index 0000000000000000000000000000000000000000..9055985bdc4e783aa158c99a9c3a6bf172bee88a GIT binary patch literal 4 Lcmd;L`p*CW0x$s# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/14b445788c533d1ccccd0e7ec2cc3aa7004fdd5a b/fuzz/corpora/asn1/14b445788c533d1ccccd0e7ec2cc3aa7004fdd5a new file mode 100644 index 0000000000000000000000000000000000000000..a17af4ed7f6066c62e6b64d37edc863b5946697b GIT binary patch literal 650 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyakzw&2S`C^Q7#Nrt n89-bEd{!W7W@O_4+r`Yt#LNWJI%*bXlnmwYYNJA$03{9pa1C$= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/15196f05b117690f3e12e56aa0c43803ea0d2a46 b/fuzz/corpora/asn1/15196f05b117690f3e12e56aa0c43803ea0d2a46 new file mode 100644 index 0000000000000000000000000000000000000000..f9d4e72a29862992575b8fe03c5a47dc0dc50b1e GIT binary patch literal 2 JcmY#n0000)03rYY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/158e995574b055ecfaca2ee0e2eb5aa857fb8b16 b/fuzz/corpora/asn1/158e995574b055ecfaca2ee0e2eb5aa857fb8b16 new file mode 100644 index 0000000000000000000000000000000000000000..39f3cc03fa2f548c1e75e946e6f8cfaf74ece395 GIT binary patch literal 10 RcmXqLFlb<73}FLIN2;6ftswlrb;>0GuEky#N3J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/15e8b673e9b4feb25a8a6c78d5f7f3c29491ada4 b/fuzz/corpora/asn1/15e8b673e9b4feb25a8a6c78d5f7f3c29491ada4 new file mode 100644 index 0000000000000000000000000000000000000000..6050c100e253ceb5d7d5b3c2ee1cf845e3080b7e GIT binary patch literal 22 ccmZP*nf>s`|7-vM|NpNEBL4sX|L_L`0K2;pTL1t6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1616d3d2ecc75343d9e7351f24def3b8779aabb9 b/fuzz/corpora/asn1/1616d3d2ecc75343d9e7351f24def3b8779aabb9 new file mode 100644 index 0000000000000000000000000000000000000000..43fca03f63f02e2c9b3ed6314a588359fefe890b GIT binary patch literal 156 zcmXqLU}92ZFlf+eU}O5#z|Pj-#Kgd0!@vOIS7qQ5V?|N-tC^jx!-dKgnAFwPOF@81MifJ= cbno81d$*L9mKK7Qlum$9rKRe#W-&kj0EW08OaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/165e09db99908c38ef7edbb439a349b2061b6668 b/fuzz/corpora/asn1/165e09db99908c38ef7edbb439a349b2061b6668 new file mode 100644 index 0000000000000000000000000000000000000000..72e16842adeb4171e7275045d122cd832bcc5589 GIT binary patch literal 84 scmXqLU}92ZFlf+eU}MVs$vn(kcUkK?55j0~=!m1H*nsa0b~?$?=(ylYxPOiBTRb&H0&;Q-Fb~hLMqh Lfu)H73X~WCYana6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1687eda01a697a5815435c99f875a6f2ec7a6dfb b/fuzz/corpora/asn1/1687eda01a697a5815435c99f875a6f2ec7a6dfb new file mode 100644 index 0000000000000000000000000000000000000000..199a8871d428a1ef01684271ddef46f98172d993 GIT binary patch literal 2900 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+tPIir|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*8ratO^jLwjj!SQ4I1w=F)|uxKm`~XnPeG2HX#EBIACNj2xgH1%R$9{{Qv(C zN$o!tnJuhbtvoE7SATUh3JY-Au>Jb}8@trGEuED^|8HRyW!PJ2;y&~0@jrK5x6WU@ zb9H~#lOj2f;9#>gt}HBau?`d#_AkJ9~T zXPrwIM6tW4xLj?V*~(C7g2lQ2|NFum%*e#Z$ZW;HlJzO&&SPV{=T}UoZ)|_J%WgDq zsUNschf&}f4z`p#oC0^y6$_(*OT#jE7z8dCD^Kg-tk8x*;9_kp7}2b?z^IATT7dvu et%czlxD++T3@LAlP2bp#(q@D;))SJVJV5nlyVr0-#Ze>nkT+qPAs@=%K IAP#W=0Mr9J`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/16d264bf0c1b4ce3ba96c9fb6b8248278c15b30c b/fuzz/corpora/asn1/16d264bf0c1b4ce3ba96c9fb6b8248278c15b30c new file mode 100644 index 0000000000000000000000000000000000000000..fc94df58c663e117b273dfbe18a5301425c7c503 GIT binary patch literal 620 zcmcJNF$%&!5Jmsa#tkY$z$TTbWzvjErv$7dXUJ(bf_n~c;tc{hi$y??$Zm`vmWfO= zFdzP(dBa-GBa@qEA*O+#8#KEjVrH!lwDE6UX*C!k(KQeihkx-Mk^stdD(6epZ z;sIb+1K=5eUL^q5%DeCxfE0GDd5FcqS!iB(p4kiEjwt#+i{(VM4l2F`>@F)zL%4#dL233is?i~xup9ddfc&68jtT4ru> zrYvD%w=ps@Q=iqe@ z<2Q^=m>5Lr5Yu7GGM`ifP?y#)fXe?p(U9U(_a># zNiY%MaRIm{LPr#68s&E_;G7je$(_cU4toSw`!DEGgzM qXK9+Y0J557{(|gXvmmcY+;gDkz?$Q<_p?wN9H>{H&2gaH`@j#P>TnDI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/17094b92004b2e9487aec94b764043f892aa4299 b/fuzz/corpora/asn1/17094b92004b2e9487aec94b764043f892aa4299 new file mode 100644 index 0000000000000000000000000000000000000000..7f0cb5f47c9e6a7129106c924bb5980bf181261e GIT binary patch literal 1926 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO*`$GCKSRU91_Ll;V`Q*mU|=v{5O;THU}gp} z8w?B@*tqY&HG*Zq5^RhN42%p649v_hl^_%MGq5o-EMWKyF$S&>RTaV>+zJ*DGJ$dh zsD8n4A|0hM!Vwg>pm+e05Dqgl^A9i&6wFwqq471Mq=$0AF%Pig2iW?7%x{$0OI8yz_@#L)(F`t~LDeE=Sq%W&m(zy; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/170e83be396c9ba4f876a04c4cf991c8e9f40c11 b/fuzz/corpora/asn1/170e83be396c9ba4f876a04c4cf991c8e9f40c11 new file mode 100644 index 0000000000000000000000000000000000000000..7fd09055bdde06a90f4492ac05b6b5d3b4682173 GIT binary patch literal 3984 zcmeI#u?YYm3`9|F0)oSw8{R4b2Ni-if#v^gx{y~yPRrZ!vK*mm_R(I9SqtX?0~o*n V1~7mD3}65Q7{CAq9~j)~&pxs7mvjIC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1727d7b5e1b39d586618c6dbe9355351c5bf662e b/fuzz/corpora/asn1/1727d7b5e1b39d586618c6dbe9355351c5bf662e new file mode 100644 index 0000000000000000000000000000000000000000..a76ebf0e722399dc855432cda03ea5f965c9f72c GIT binary patch literal 192 zcmZXNF$%&!6hz=QK0Jz&tex z@r7+oEk-qo`$RZ2Ynkt!r}r@iSxh0ZN*#%!uWC)u!LO7HE!?2RSCiR8??4KGPJqov cD}yDyHK4xy(<&_IoUddC2lx$eF6L4j0j$X%egFUf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/174e5f148d3b3e3eac1c14b5feb45a244d75a8c5 b/fuzz/corpora/asn1/174e5f148d3b3e3eac1c14b5feb45a244d75a8c5 new file mode 100644 index 0000000000000000000000000000000000000000..76e5454bd2c6dc288b4f18cb72bd87db7affc5fb GIT binary patch literal 371 zcmXqLU}92ZFlf+eU}O5#z|Pj-#KiE6fx(82sVal5!-J{ek7+0#b8Og{e!(0^vbpqjEHorR0021VOR@j} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/17837957a4d3a1d677f2c4b798cf91f6c12571e7 b/fuzz/corpora/asn1/17837957a4d3a1d677f2c4b798cf91f6c12571e7 new file mode 100644 index 0000000000000000000000000000000000000000..be815e0b83da6f417e27b8baa15b4ad25f8af481 GIT binary patch literal 4200 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU zE~1*(n3$OcnTv*TV1v9i8vXb)?J$o1(Y!{us2wfX2#3*VF+yAz4bv)nH2Oz$^pDme xgrlE{0o2T*Ld$neL2Gh89tF^-;o8l+ngDr>R=2;et&uSCj7=f zxm_)hv!FM-DNGa2eyU@rgF4AbQb*~jh1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfvHeAFr}>l5roR=Fc|2tF>3Ls|JdKq wu;I_9#sw|fjVugG4Gn)bENGa~SpUDhp`qbJPe)xPn*f8TAp;n&LnsCY00bo}Gynhq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/17d4f3d3a9a810d72fa1003f079df67f75b7e597 b/fuzz/corpora/asn1/17d4f3d3a9a810d72fa1003f079df67f75b7e597 new file mode 100644 index 0000000000000000000000000000000000000000..a5de5ef9965daa4a288f97b185b49eaa5c20e8c3 GIT binary patch literal 129 zcmYj}F$%(96od1gzfU?8x)mJ%MW{>a*c0>uJx??J=cxB{cNHHFCJ^`n$*@z=O>J%O z-Y$NKa?=bdoCKa?I_wSuK#bp1_(u7Qz$t6Rl{fzD@qW|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4Fc5Cs zCPt@K#v}o^h3yheJZ{RQBZeITdmpFtA{Rvq=J8`JEsD_?RWmbi7&JRJ;7L$^r$_x` zE6zDfjJ$pkv3U7&yHBpu>-i!}bCt2H(`qrzw)5fpRrAtt05pJ;=(55mZ-}Hy0eU_uNVG3AAL71^@s6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/18b9341679cf5a0706ac13d8d84b2c6a7cc4ab0e b/fuzz/corpora/asn1/18b9341679cf5a0706ac13d8d84b2c6a7cc4ab0e new file mode 100644 index 00000000..03fbd2b4 --- /dev/null +++ b/fuzz/corpora/asn1/18b9341679cf5a0706ac13d8d84b2c6a7cc4ab0e @@ -0,0 +1 @@ +£ \ No newline at end of file diff --git a/fuzz/corpora/asn1/18bd8cd49ef2dbe9a3e107b576d7adb519b48369 b/fuzz/corpora/asn1/18bd8cd49ef2dbe9a3e107b576d7adb519b48369 new file mode 100644 index 0000000000000000000000000000000000000000..13d97ffcb5fc0e482fc8e0c0dece876ac7f6686b GIT binary patch literal 6690 zcmeHMu?oU45WVCiRzy&`I66vQo~z*A!4L5l+=5_#$x(0>9Q_i(L7~#tmJSXM7D6tU zA(tt$|b(+43~B`0x?UBvrNpF=(am9&#(OMJC9|? zx5?LCN}S!58>U;tJF1^-xNwy<)w z@~~`P{ngPZEWl;M_RITk>{92pbXE@izlB+pVQ-;{`^>Ay|J-riI)Cxb)%{shx{tD0 zvTWz$*_*v(f4!0Lgq>c@2QP;m5>zrVYPcpCBdfUAJh@}*cjezcO81|gbuL{H#qOTs zah7v^9_CPqePD+ZRVPbqgE8{0j-VlsVW`@3CCjBKphjVug`%yJCO z3=FIc(IAZ{P5=LAVPIeoh6fHK1A{>W8%wJ}69WSSGb00tYcQw+_d2FtSQ(=K|NsC0r0M_vEDQ_`!f;iL3=9ShY%Hw?O$-bS z%!~{mt^qzPni#bV8ehZp8#LZ$Vq`SXfC?}&GRZQ4Y(fSMNWdVNMFuSQ7p~$Tob~_z zKNguStX!=;ESpzBW5Ta@Zk3B@?5DYl1PdihIqIJGOpT{_Uf5|JhmR z(gjiM?kO%;8)vpM)R{2JvLIOx1->u`YcVl0GFvgQWPM7x^VrPp=@pad8{6OQvI7Nf zBMSr719vq3hIagoW)2!=j?utH4O~VFiuKXjW3=|LWg4yh2UYDqTEL+eaHH*38n#<0 zsXZ|I9iu6ihADTnQ!v^o0D;jSGnNsL(UJ$XpK;{h=M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1a8edb19884ae47252598af0868f5b747ee8fffe b/fuzz/corpora/asn1/1a8edb19884ae47252598af0868f5b747ee8fffe new file mode 100644 index 0000000000000000000000000000000000000000..2e1c3560298e636953a65ed5ed7fce1f1cb1f537 GIT binary patch literal 20 bcmXpIGT>xm*J|@PXUD|I%*w#@TlpUVCN>1N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1aadee902c64462c3efbca22917fc9cdab1a1dbe b/fuzz/corpora/asn1/1aadee902c64462c3efbca22917fc9cdab1a1dbe new file mode 100644 index 0000000000000000000000000000000000000000..cc6f0649ebc03c8514d22f3a44f6e966844ffda9 GIT binary patch literal 38 tcmXqLU}92ZFlaDnU}IXwz`(%5%fP_I_?w9_j)_ThF9QPu8zUzJ0|0p31wQ}) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1b1995df5a9788f2c68d01e46a0e1165969585e2 b/fuzz/corpora/asn1/1b1995df5a9788f2c68d01e46a0e1165969585e2 new file mode 100644 index 00000000..d22029ba --- /dev/null +++ b/fuzz/corpora/asn1/1b1995df5a9788f2c68d01e46a0e1165969585e2 @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/1b2620eba3a7847c8119a335d9cedf2024be6b06 b/fuzz/corpora/asn1/1b2620eba3a7847c8119a335d9cedf2024be6b06 new file mode 100644 index 0000000000000000000000000000000000000000..5a72dab8e14d1c5b2ed7b4b213b84c36781ce9e8 GIT binary patch literal 7 OcmWe&WnyG7XaE2Kg8<0@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1b38c9541d3265c8001d8eab26368e5e13fc8924 b/fuzz/corpora/asn1/1b38c9541d3265c8001d8eab26368e5e13fc8924 new file mode 100644 index 0000000000000000000000000000000000000000..701c4d22e233c632d3bbc95a0c2f863e5b09f1ae GIT binary patch literal 199 zcmXqLFlaDnU}N%-)n;H|FkrA~umI5w26;>(Nd`w>+*x*PqMOc@+Wh^Esj|9Lu88w8 zFd7&d7#bQF7#kQy8Mqs`vN4CsiZU|(XR+q8TxfpN)KJ8LfuVr`WDGNtftdw^0ff`Q z#LQ%FZjQwLi{OHlH?Xm?vNJF-XfiM`Fl&K?7#SE08w@%?%up6ph6Xlf582=U|Nqy1 Pu#=66fq@ZXGy?+w$w?^= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1b3cfe6d6283fb256cdb595e9c78e15b5c84e259 b/fuzz/corpora/asn1/1b3cfe6d6283fb256cdb595e9c78e15b5c84e259 new file mode 100644 index 0000000000000000000000000000000000000000..acec22196626417a9e31ee6b7da1f45e1a3707d4 GIT binary patch literal 584 zcmXqLFlaDnU}Mx~U}RumFkld8G*|!=VgU;^urY_qN;5KQvoM}yU>I`T*<`s{WYq8A gc!!4rqc#fz3>Y-9F@+j5FugHgU|HvoSI-Fc>h1Gpd7B z88omlhsw&Zq#86VXjs@_z{VgNhqjR6A#GuSQYE*o_r gwlFj#DGWzrcW9-*(bz>Tc}OW;@P{3wlmQiV01m)GRR910 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1b5409fa62ce9ff2dec04baac568b563fa77c835 b/fuzz/corpora/asn1/1b5409fa62ce9ff2dec04baac568b563fa77c835 new file mode 100644 index 0000000000000000000000000000000000000000..da786d645ec65765f1744fc5415c7bc10888af86 GIT binary patch literal 64 xcmXqLkZ)jOoWr8UfDV`#7#OUff>jI(p&VL_3|g(sDvS#n*jTk2Ss27Xk^sgG21Eb= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1b54d1d15b277075e92b3337b4b79847bc7f5366 b/fuzz/corpora/asn1/1b54d1d15b277075e92b3337b4b79847bc7f5366 new file mode 100644 index 0000000000000000000000000000000000000000..ad1c961103ebc3891d4cbe6233f595b8779f13ff GIT binary patch literal 1257 zcmd6nu?oU46h&{65)}~?myV87LGLWMJNO}fMiA_8Il1~Nt_}{7ByA}*Lns!!8S>tA zxVi6zMo&vol&|A#G8gg&Lw}?sX|&uZfS}36J{Jr%mwHr`$HzemJ@$pdLam`tiL9%Z zPOd%!D|gfA?8*xOC49>WkqN{s5Mo3R{5`Q!jM&fP_TOGrT5I1vB}9Vkm1C+$CpQp) z$(#J^Ae+g#CrnN%v76)5!Fzd3*bZ;4OY|Cw=tW>>okANlERpqQwloyceI4JPI$z8O DbUB@k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1b5c5feb82ba0a4b9c249e550a83d31b7f7eab6e b/fuzz/corpora/asn1/1b5c5feb82ba0a4b9c249e550a83d31b7f7eab6e new file mode 100644 index 00000000..316b4eb1 --- /dev/null +++ b/fuzz/corpora/asn1/1b5c5feb82ba0a4b9c249e550a83d31b7f7eab6e @@ -0,0 +1 @@ +0€0g€€+ 0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/1bc25d5bb880ddf3d92db5b026daae9ee7acf968 b/fuzz/corpora/asn1/1bc25d5bb880ddf3d92db5b026daae9ee7acf968 new file mode 100644 index 0000000000000000000000000000000000000000..686c9ec5287d946b3db51b5e1cc846e0f69178ad GIT binary patch literal 281 zcmXqLFkoh5)PfUn1`TYST5TR}-+39?nHDq{G%ztX7%~_%urV1JFfc4^FaSd~Mr{U0 z1_lNL2609PkSc=)Hs(-S85S;shGvii14Ad61gU9YV+zd@VR~c0z`zXFglU9$Bcmaa Z#=ORFj1rN?V0Vqx{stxk27`u%1^}pvFNpvE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1bf627c1384bfc91506307682411ab0779965da0 b/fuzz/corpora/asn1/1bf627c1384bfc91506307682411ab0779965da0 new file mode 100644 index 0000000000000000000000000000000000000000..4e391d0575fe7fb5ee21e9db9d93e758f6ea754e GIT binary patch literal 1319 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjo%ugw@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6nnk(FTyFlaDfVPIe|XkcR`fkCQzk_;bJJQ}=Yq{-1_Gq{rt!+^yp2mk=^ C-jA#R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1c49cd7e0aa830889b606de8379b75e57f268b1b b/fuzz/corpora/asn1/1c49cd7e0aa830889b606de8379b75e57f268b1b new file mode 100644 index 0000000000000000000000000000000000000000..a84415bf0f8a3d7a5e5be286be34464b5c5f8cd1 GIT binary patch literal 12687 zcmeHN%}T>S5S~p!)QVW~lB0N%3OW@mCZWBx2o>XkN<(u)K{ClkES*fyauqY0i0E;%g)x&#Kgd0!@!`^z=q&6!uakGc?K9Ctlog30mLUpKh%6w J{U9zF001FC8^Hho literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1c62e82b92cfee3a0e1fb6edfefdce66c5dba463 b/fuzz/corpora/asn1/1c62e82b92cfee3a0e1fb6edfefdce66c5dba463 new file mode 100644 index 0000000000000000000000000000000000000000..fb5f71ad4c4663579a25a9f7e45713450c7afa9c GIT binary patch literal 39 vcmXqLkZ)jOWMpDuW?*4DpwA*OU--_G`AgfL`aA6AT$-D6nT3IYA%z5T-cT1PTEZn1W~&0!gGkn7zOJ|Jcm0sg4c0b=~RR5SV`qI zw!@b$+Cm}ZPyUzxW%{0$#a?eT9KE-*-A&sDW7@_tK1Mayn>+0C^2e5RdZ zr#BkD4f3qm?%!?6N$XfzZ4r4Axsmg;@p!D|>tXe)mqDIoB3c$(4|*>mtxP6gb$J)L zbY#}9r(bWYw-hdFQRp;^NvuTiE#2f|0WTiscmYrgfSO-G0LlpzYm^fxD#{5I73BoV zD(du0ha^`Z=E5wwi)N%7pqxe9jC4mv0lRjh9Rz(qhs1-NJiPytZ{xM)VY0gA@@ zxjSd%#mH;GE+Q3(8FO0S9|KnS zNS%H`zo1{#`vts!7fEZTA0R*8r=Bp=C#1V8`) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1cf7882d248af13533dbd3fee1b4b1396a1a321f b/fuzz/corpora/asn1/1cf7882d248af13533dbd3fee1b4b1396a1a321f new file mode 100644 index 0000000000000000000000000000000000000000..30a79708d2011232eedd5bd8cc7476ce5bc78c7e GIT binary patch literal 4120 zcmXqLFlb<7)MjB|V1O_fAuQ%lSs6w~Z6vN5jEy3Srbq&&2va{UsZrxVA(M(356vGujqnV6w4M0xVA=eKmDHT})PvGN`8Z~aT@Iy%hxY8$zqS15* zX>AZ04x?c=pqUK00ZwF$jh2|SsmVs8VzirroCbzwZG&7oAiTq<59_x>h5{HE02EJ~ AVgLXD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1d7e2edd429ead2e9a5e2b148e83cf09e272310d b/fuzz/corpora/asn1/1d7e2edd429ead2e9a5e2b148e83cf09e272310d new file mode 100644 index 0000000000000000000000000000000000000000..00cae5939ee72f2e52b90986b390dc8c11a1061f GIT binary patch literal 88 ocmXqLkZ)jOoWtU&DRlAXefgK_U0Q!XuCjbBd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1d86800f5302791a0a599f540ef7352b6870da4b b/fuzz/corpora/asn1/1d86800f5302791a0a599f540ef7352b6870da4b new file mode 100644 index 0000000000000000000000000000000000000000..b225116123d0ce850a109bb44d40f1e10b6f932b GIT binary patch literal 167 zcmXqLVB>CM)N1?A$G|DTXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 yHji_*OpI)->Dr7ejLd=z>j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1d9a2868e77304dea4cf2370078f3809bb06ad74 b/fuzz/corpora/asn1/1d9a2868e77304dea4cf2370078f3809bb06ad74 new file mode 100644 index 0000000000000000000000000000000000000000..25d07328c475c394d678ef3cefeeb9c4c29fc79d GIT binary patch literal 257 zcmd6h!3lsc6hre{{URdh%^B(?XTf_nagC2)*Kz~b@hYtsM=*g92s}d5E=fpt?At+> z6UJiaNSeCY0|adnPQtfy&?cmKtxmMwW~s!F0N`_cMbqlwo+km2$v@$Gpj-wX?@1wz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1dab6071b19a7280ce54653d02fe4c4c071299c0 b/fuzz/corpora/asn1/1dab6071b19a7280ce54653d02fe4c4c071299c0 new file mode 100644 index 0000000000000000000000000000000000000000..188a880d919ee80af29f5b8f3701f3975d95476b GIT binary patch literal 612 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGchtSFc>h1Ga7(Y z88omlhssK`fCa&98Ae8JB(4Y&8@H4?E)y8FSr}jd;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3w_C*ONBIp?t9JAd-LS^H^J>eHt$^+4$Ij$YztJ&R0@p! z?dlL|+Z*v~|Ix3z48EP79h!5!(Yis_B>z)d!uIT$0ZW(6pZ|iTT0rTL|L&F7|7|}e z{lhx^`LPwtMEO~MH-Ec)RPHd7X^3!?*hHgmrJvVnCtlZj|4E5ia_&VB#^X$)4bu|> z`bCww&up5s6C47Boc1%^hufCDDLpVUyl>Z)NdISr>;jDqTRg=Im0$R1hzV~$&uP?i zV%b9*v8wKnnqG|ui`U6%Z(de9F>i4__b)}Gq>sOosu)$Q&n)@4Z$;pQ&K1q~A4WaR z`k7mj7S~W6s+z*+WBu>ErxtT#3jY`1da(DNA zH)Q*dk~Wz284PqpL|7MxzJKyznM7tQ`%-O7s~4A&mxM8iXiR>;Wrt&RWzkRZrQ0nG zNKb62NoF*$y>}T+Y{NFOxyCvu1^yl_*+xq?I#i>hiEXqRrCXbAG_j2)w$a2k+Cdn8 e9fZ-6ZOE5wRzwed40Lal8i`GQbm)W1LmvQ^-k?$d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1e11cd79c5ddaa2572d5ceb31579bf16572dab76 b/fuzz/corpora/asn1/1e11cd79c5ddaa2572d5ceb31579bf16572dab76 new file mode 100644 index 0000000000000000000000000000000000000000..1c050154840fa236fc88bf342d390b5bfd13fbca GIT binary patch literal 164 zcmXqLU}92ZFlf+eU}O4K#Lm``#Kgd0!@vONJ0bD2*xAt4YT{ALz`(!&HWQZ_1oXlH E06M=QcmMzZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1e203be665479c4b31f3b6b204cc5cd53c03f099 b/fuzz/corpora/asn1/1e203be665479c4b31f3b6b204cc5cd53c03f099 new file mode 100644 index 0000000000000000000000000000000000000000..b5cfdfe488b416a049cc8019a512b9909309d5ea GIT binary patch literal 11088 zcmeI%PfG$p6aeryf7FbmJV-){+EEV;Q4m4U(R{L3UittY zqmy;0E>RE#9V%Wdh2+27b$4_Y=XYAXlF}UzQpg~^0017T=IbjA$u_02 z+8zLnO1cl3jbi}-0%p&NIJ2VJW-`Gmxgg=>>VWbMdf> zgOVqu&tAIEKEOO__<;Fed+VGemSw7UxFZjP&J;$w=k^~)3lUpB0E`^E+@6e>cF)t$ ziP|?O!>=M;cZr>wv80LtZe2#_m;O02pK(xh%0a9}#c7hFC8U^TETCvJA0c5ynRRll zQ!}o-M@Yz30>3*M(Ev_e*QKsA7~07=>nP|fygL<3mtk~zv-ZTc-oj#?H~X7cCs>B2 I!W#7T4LRa!xc~qF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1e211bda2c3ad0eb86ad2a3a56744fe20e5ea24e b/fuzz/corpora/asn1/1e211bda2c3ad0eb86ad2a3a56744fe20e5ea24e new file mode 100644 index 0000000000000000000000000000000000000000..77f3d29939fe4345f1e74b24bd0ba23807d5b12d GIT binary patch literal 20 YcmXqLFlZ3uG2mijGT@P6;a~s(03q-KBme*a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1e2fc16b09c2b78ce29d4215c383a25b60b56979 b/fuzz/corpora/asn1/1e2fc16b09c2b78ce29d4215c383a25b60b56979 new file mode 100644 index 0000000000000000000000000000000000000000..8875a861d920ff0d9c251434915db84f1a5e9ef6 GIT binary patch literal 84 zcmXqLU}DN*FlaDnU}IXwz`(%5+vagjllebm921l1UIqpRCcy@#6b6tA1_lNLcJW3= g!vzfn4e||a%%QR}EL;W+&5cY9ISdSp3{YSI0O1A?djJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1e5b8ecea1adb2a86287079674b85b32898ca682 b/fuzz/corpora/asn1/1e5b8ecea1adb2a86287079674b85b32898ca682 new file mode 100644 index 0000000000000000000000000000000000000000..be2f3b3d5f02f8b00129403fd8703746739ceb64 GIT binary patch literal 39 mcmXqLU}92ZFlaDnU}IXwz`(%5z`)SJ3+5@ZFl(AJKmY)NYz1Bb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1ebbf3a77ebf28acbdd8e577a6dce94340e74d4e b/fuzz/corpora/asn1/1ebbf3a77ebf28acbdd8e577a6dce94340e74d4e new file mode 100644 index 0000000000000000000000000000000000000000..48cba246e41a66d32ef56a3e7e147db58c251341 GIT binary patch literal 118 zcmYMru?>Jg3cC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1eeb2d4ae688e8b87cb27feaa538656dd16495d4 b/fuzz/corpora/asn1/1eeb2d4ae688e8b87cb27feaa538656dd16495d4 new file mode 100644 index 0000000000000000000000000000000000000000..2b85accbae01f8f96f788f0b27f6b6c8dccdc511 GIT binary patch literal 6 NcmXqLFkoU}000DR0OJ4v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1f069076a0d8608f4fd0d1fb6df007b5f1fa0737 b/fuzz/corpora/asn1/1f069076a0d8608f4fd0d1fb6df007b5f1fa0737 new file mode 100644 index 00000000..a47720a8 --- /dev/null +++ b/fuzz/corpora/asn1/1f069076a0d8608f4fd0d1fb6df007b5f1fa0737 @@ -0,0 +1 @@ +1˜ \ No newline at end of file diff --git a/fuzz/corpora/asn1/1f37ff8b0ac583461b42b2b8550da6064b4f8a16 b/fuzz/corpora/asn1/1f37ff8b0ac583461b42b2b8550da6064b4f8a16 new file mode 100644 index 0000000000000000000000000000000000000000..c98a43615c3fcfb631d3b45bd6d9d0eb9243a7f8 GIT binary patch literal 2088 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7f)#n=7+x8iRd0}OyPyJm?ny)j^5U_7l0yz#E6Ppl+n2v8+AKt&&^Ndn|l+*Jvdx|ryo003PTo3H=? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/1f511d3c303572f384c410e06abae38af7fcfdeb b/fuzz/corpora/asn1/1f511d3c303572f384c410e06abae38af7fcfdeb new file mode 100644 index 0000000000000000000000000000000000000000..103f3fda4465018fdfbc006d0863b4ff142eacb1 GIT binary patch literal 30 jcmXqLFpxA9HxOlG9;T$05%sLegFUf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2065f0d601e26f9b0f537912d696730b62fa315e b/fuzz/corpora/asn1/2065f0d601e26f9b0f537912d696730b62fa315e new file mode 100644 index 0000000000000000000000000000000000000000..417bbb254b5316ed57de1a37892954b60756fab3 GIT binary patch literal 28 jcmXqLU}H2`&>+rlU}9imU}RumV4xey#%RF6z`y_iRj~xo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2073e661998912037eb6bb489826a76764ab5455 b/fuzz/corpora/asn1/2073e661998912037eb6bb489826a76764ab5455 new file mode 100644 index 0000000000000000000000000000000000000000..42a9138cfdeef8f29d0f1a3fcbdbab41a6fa22fa GIT binary patch literal 19 acmXqL5ac!BW@F^!VN?0p)Uu3`fdK#`lLPhu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/20943cdae1f2999593ca4456591622c8c7b1152f b/fuzz/corpora/asn1/20943cdae1f2999593ca4456591622c8c7b1152f new file mode 100644 index 0000000000000000000000000000000000000000..12423d00206414ddf1a3f070f451dcad667110d8 GIT binary patch literal 63 wcmXqLkY{3?!=l9i1uQTI2v|coRSXKD99oPFTCL0~j0+mrShX8j7{ox50H-Vk#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/20da4441494e1370e1ac93561c3fbc26ad144b8d b/fuzz/corpora/asn1/20da4441494e1370e1ac93561c3fbc26ad144b8d new file mode 100644 index 0000000000000000000000000000000000000000..98619c0da1f4d0bea3b436c366e407fbc64bad8b GIT binary patch literal 52 zcmXqLFc4s4*J|@PXUoLM#;V=O!XU{k&CJZeZp)zM(Z+U;87?Z$%*?=`&cMI`0O$P& AD*ylh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/20eb31e92cbd72843c2eb6733763ee769ddaa67e b/fuzz/corpora/asn1/20eb31e92cbd72843c2eb6733763ee769ddaa67e new file mode 100644 index 0000000000000000000000000000000000000000..8cb6f430b0a9c928b5fc87086df018319349894f GIT binary patch literal 400 zcmXqLFlaDfWn~65E|H+LuF;;SyBxQ7Bnn`@-1{4 z3>ZMbpn;7^luMQ$%wb?)3YBGMW>^U25evTm|Nr;@kN^J}*x@?B=E^cKFf)QIF)#oC DclIo0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/211379fdfdd1ebadb71b5cb846a2f4dc86e3e861 b/fuzz/corpora/asn1/211379fdfdd1ebadb71b5cb846a2f4dc86e3e861 new file mode 100644 index 0000000000000000000000000000000000000000..297f7d5487b9be4763773e1b011f0ba073ff5347 GIT binary patch literal 509 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZMVs}Z3F4YV@`w=byV78n2rCM|pd@&W)vs7spw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/21138be29db294c09a6faecdd2598d853c15d7b9 b/fuzz/corpora/asn1/21138be29db294c09a6faecdd2598d853c15d7b9 new file mode 100644 index 0000000000000000000000000000000000000000..aba8e4b7c2b9b286f6369405069c379adf74ebd2 GIT binary patch literal 9952 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3JVw$8}V!Z(XYDa7 zZ9gXc!#e!=u@%ci`B{E9f4h8C?l6;Sh;WqHM5Aw|pVw(8Ue|j6Nr_oKz?hg?%Us>xL8@@kW(0XmQ?Y+}`R>zp_2;W&bW&Q47Rf zIql8MN+;$muIK)xXqxo#cTyFjiuIW#ANQ>YoY1+V`ToPGr&&L9OVZ*RszX&%7=5h& zo%hsYZfs#-O3yDdQ?u!D3ETgt-7C38@r$dfx#*Sk4Q=~bqggy>ujhY#jp0n<^oQZ! zPN~XHopEj^i{0vbTQ)y(C_ixi*Tv+Md^X$NWfxYY)ztZSNv-<*f7*f@C&k6ylo!lR z;m$40KM;2Dk6_Yzp#y@sZ7x!MMcSN?#o1yk*I!+rBwZ^<^FZBjQKOSZz%k`1#O9ps6Pm?p$%HA-xoZL}I4ZL=Y@ z=ZANjZIG92qaB3N4#H?}bhI~0#?Z%zDcMFl2*Ly2W*g**ZM1_hT8)lYqodX6V5~+* zXAnkb5Ma|)gS;B0UT<`?%{BtsY@;RHXvsEOve9-TessEObh>JE)yL=(qtPWs(B)@j HPFDc{9AvB> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2143a4b244fd5e84e4db3252c4e7c8bb4ecfdd34 b/fuzz/corpora/asn1/2143a4b244fd5e84e4db3252c4e7c8bb4ecfdd34 new file mode 100644 index 0000000000000000000000000000000000000000..b53b6aa67a89152675cd0f81d63c439c8a0b328d GIT binary patch literal 3811 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%464j>49pA+3=B&_grV90|Njjd41{5-6d4&93>w&2S`C^Q7#Nrt z89-bEd{!W7W@O_4+r`Yl2-Z0~j2aC?P~xF1W=Cuoj#!UVu~- j>7ICMLCuUoQ1#Q@h1 zH!>)G%mR(6A89my~DGVP#`HqRD^&>`bO04m*PY1A{>W8>2Q0Ob!5* CE*3ce literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/21b27d2dc64114930386cecb0573d0207979c8e6 b/fuzz/corpora/asn1/21b27d2dc64114930386cecb0573d0207979c8e6 new file mode 100644 index 0000000000000000000000000000000000000000..fdfb0a6bf282775a85d5997fc4b2609daabf0856 GIT binary patch literal 3216 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlC#)MHQLl7?>FtSQ(=K|NsC0r0M_vEDQ_`!f;iL3=9ShY%Hw?O$-bS z%!~{mt^qzPni#bV8ehZp8#LZ$Vq`SXfC?}&GRZQ4Y(fSMNWdVNMFuSQ7p~$Tob~_z zKNguStX!=;ESpzBW5Ta@Zk3B@?5DYl1PdihIqIJGOpT{_Uf5|JhmR z(gjiM?kO%;8)vpM)R{2JvLIOx1->u`YcVl0GFvgQWPM7x^VrPp=@pad8{6OQvI7Nf zBMSr719vq3hIagoW)2!=j-eB{SLssnFj7#gkJcWewTCU!Xzf3!YX6~AzzxBs)yNH8 O)G8TKYrp}K4R8QqjQZ{X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/21c3148dc2924d69f8da376313d479920db39f6f b/fuzz/corpora/asn1/21c3148dc2924d69f8da376313d479920db39f6f new file mode 100644 index 0000000000000000000000000000000000000000..9c0587a3e139de00a5a324a55ca738cd2fba08df GIT binary patch literal 87 zcmXqLkZ)jOoWtV4z`&5B-N?cq$H2f~%gDk20$*lpwKAu$FfcTLxeN?d3d zW|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4ab4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/22296ada9be0f815b36dca4d25004d4010fd1f79 b/fuzz/corpora/asn1/22296ada9be0f815b36dca4d25004d4010fd1f79 new file mode 100644 index 0000000000000000000000000000000000000000..fa3bcb1fcdfa9e226402eea50c837c24745fe0dd GIT binary patch literal 265 zcmc(ZF$w}f5CnU6&RIl+4KFvlOF9H_rlL-u{_l2c}QZb@zTMxKwkj>#|E4i(yhDk3P1%w U6aTckKWcNUog*UdK-O>U8@(khb^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2231eec40220adeada27ab4ceac291d3711f14a7 b/fuzz/corpora/asn1/2231eec40220adeada27ab4ceac291d3711f14a7 new file mode 100644 index 0000000000000000000000000000000000000000..a3fc273ebf97f2c8c8ab52c05b57b850db4755cc GIT binary patch literal 276 vcmXqLU}92ZFlf+eU|@>;%fO(+0B6BO28^BpaSkAVRIF6IR2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/225b6f352f09113733980be1be5c3789264e1e90 b/fuzz/corpora/asn1/225b6f352f09113733980be1be5c3789264e1e90 new file mode 100644 index 0000000000000000000000000000000000000000..f95d3755a70a2f965f8d69cc29ec8c11f9d1a32a GIT binary patch literal 62 zcmXqLU}BuZqQ$_%00KFU8LbS=DU4tagEfR=sA5nE<uCTqUJJw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/228bb2c13fe31f61dc1b46aa32f6214b6810d2b2 b/fuzz/corpora/asn1/228bb2c13fe31f61dc1b46aa32f6214b6810d2b2 new file mode 100644 index 00000000..81a9c794 --- /dev/null +++ b/fuzz/corpora/asn1/228bb2c13fe31f61dc1b46aa32f6214b6810d2b2 @@ -0,0 +1 @@ +00 \ No newline at end of file diff --git a/fuzz/corpora/asn1/22c03799cad50ef15d96840481f57fc7dd9a82dd b/fuzz/corpora/asn1/22c03799cad50ef15d96840481f57fc7dd9a82dd new file mode 100644 index 0000000000000000000000000000000000000000..c8935163e76ad75e489abf88f52795f4977fa5dc GIT binary patch literal 176 zcmb7+yA6a;5CgpndMA)BLy&L{Kw`SM255pR{0OK6`XeVrd;(JJbY`fKHPe6EzV`81 zl$$zG!AW2d&j)K^02onOcVJXV`d^*q)Mycy;kb9m{ZRNyAUUmzkJkFjNco856eD(H C!yxkj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/22c5d6df2be0444030c00d85c3ccb87212033de5 b/fuzz/corpora/asn1/22c5d6df2be0444030c00d85c3ccb87212033de5 new file mode 100644 index 0000000000000000000000000000000000000000..ebdf2037284c9328279a21fe038461fc8c6c8f0c GIT binary patch literal 21 ccmXqLFlZ3uHQ;7r

AO!xhQPt;oOt04vJ_UH||9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/22ce0654d0efb1b57f73b860e2f2d3574bf4ffa8 b/fuzz/corpora/asn1/22ce0654d0efb1b57f73b860e2f2d3574bf4ffa8 new file mode 100644 index 0000000000000000000000000000000000000000..92bf0d1e9d46a0495244453c90e8836ef9ec1724 GIT binary patch literal 20 bcmXqLU}BuZ!myx$ja9pmg+ZBtfq?-4EN=r+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/22d3de360536126f2192a6888f5980961a9bb803 b/fuzz/corpora/asn1/22d3de360536126f2192a6888f5980961a9bb803 new file mode 100644 index 0000000000000000000000000000000000000000..9829dac08a754e4fe44f93bf0a441967c8d62d9d GIT binary patch literal 6953 zcmeHM!D_=W43(|TT`3zYx%AlELU&QGgWh}ChwL-VVEK^!NdKU}(`&KUfCO$1Lv^6h z%OMH`9(uN(5{qJ3bZ*m~_RsTI=MNAmU)~c@4E`Mf2q>=H$I8)POih?=y8UtIU3kg? z!V9*5Z~;*tF?^=@3t*k@6vM+0eFFfx{73~x8f0vc03*P%$c(?+M|AU$$h4Wuj2zmG z!?|*3GuO{mGPZ@Sq@ClG)U{j-8%ljg$vs@3(W<6qui-Fnx>ZN#&{nyAy-vx8rMl)# z_u@@*U2AkXs~Qe%7o3v1ZrC$sSYJ&tR6Aed&}NqFYJF9A zU8TDAHL9!bc-<{AFRq>kb6CCp{~ujek9m`B^+E~d7?S-c6_#hDuOLfo)N|!Em z^MlBv0!e_R{YSo)x=M5H$+tZxZQk|-eDw^t!DAn8+xnbsy^^kd&IvDp#hri$@U@?Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2313c76c06eed19c58b580fa32103bdaea86d2eb b/fuzz/corpora/asn1/2313c76c06eed19c58b580fa32103bdaea86d2eb new file mode 100644 index 0000000000000000000000000000000000000000..2150cdc5866ff7b7f53374eb5239a557b3ddcab2 GIT binary patch literal 60 ncmXqLU}92ZFlf+eU}K8>!OqsOckkZ43=9k?{4J<_1}FdkH&7B3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/233da42d3e344e33009306ab63723a1193e751fb b/fuzz/corpora/asn1/233da42d3e344e33009306ab63723a1193e751fb new file mode 100644 index 0000000000000000000000000000000000000000..3d0c6c11d3fd624a428f2e4ae7ce197f02136ed2 GIT binary patch literal 144 zcmXYnI}XAy5CzA}lFmwHDFxyqcTNLBlt>(gLm;Yk!7WmlJ8=;z%0wo4%{-0fXgd@4 z)yJW9r{z<+jRe}Wk6C=o3q&seV9;B!=J$CkTj1(+90B^Q>9x8$1qmV&ssx;$X)}1T QhvZ1H*2S82pS8NW32WmRiU0rr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/234c5c34daaf0963f0609415dc00751b65d16bc5 b/fuzz/corpora/asn1/234c5c34daaf0963f0609415dc00751b65d16bc5 new file mode 100644 index 0000000000000000000000000000000000000000..6149a5b2365bf166b31cccb294f9f44cd276d8ce GIT binary patch literal 17 YcmXqL5ac#!U}G|1;9=xtU|?VX02k{4&j0`b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/23519a24ca0e86b74889263eaec650f2a0f4d963 b/fuzz/corpora/asn1/23519a24ca0e86b74889263eaec650f2a0f4d963 new file mode 100644 index 0000000000000000000000000000000000000000..1bc57ac746b76587df90f7a8c9a98b3764c11dca GIT binary patch literal 46 kcmXqLFc4s4*J|@PXUoLM#+t6p$im4i#=y*g3D_7I0FU_t(EtDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2356eae0a5c6a2e02264e06452dacefdeb601610 b/fuzz/corpora/asn1/2356eae0a5c6a2e02264e06452dacefdeb601610 new file mode 100644 index 0000000000000000000000000000000000000000..96fab75310d60f14c807535a4dd9e66b33c70f95 GIT binary patch literal 19 VcmXqLFl;brU}Fwt(Gp{T001Z-0<-`C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/23836040a0364a5f5d2b365eef9df4c6cbb3cece b/fuzz/corpora/asn1/23836040a0364a5f5d2b365eef9df4c6cbb3cece new file mode 100644 index 0000000000000000000000000000000000000000..a3cf59c1c3b0cc894c867964a246cb3d3dd2e1b1 GIT binary patch literal 770 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOg<(O1qG7{AK_*6q1xyVL25fAM3`~p+1`MM@ zLn|bHjFd=YU@&N4V`N}sj9_5c&j?P`J1RLoGjcL8FfcL7gQYn?Gja+rFx4cfss5^B@X2k z#uH%uN=A7K;K~;0@S+dV@fwe8ZO0u1HE`YIoG>|_^f`B11#rzI>!{p@;5jV1$aj-516`RA`KJ4-5SwHdRC@xO5UkL1~x29UO!%;?N^_oG6%+=sCPWuOm*C{Av~HAR^Sk zWJ#91kN>?FGP)Pr!k+q~8wz=ZA>L9FkC$s;7$<#2Iylc~!jA}@YT|RIcXA=UL{ZrF=pYArjwC&@7-~I_MFz4a| DTfV|$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/24262bf0da61dee8c33dbc42f47b1cfed4afb4fe b/fuzz/corpora/asn1/24262bf0da61dee8c33dbc42f47b1cfed4afb4fe new file mode 100644 index 0000000000000000000000000000000000000000..475fe18db050b590475a942dbdbb16b13246af20 GIT binary patch literal 84 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g8e^Z921l1UIqpRCcy@#6b6tA1_lNLcJW$9 d!vzfn4e||a%%QR}EL;W+&5cY9tPBWX007_K4DXX$k;EF!z8jab;{ z4-9``_yfaJZ^uPjxA&Arj`#wvv6xlWTP_7qsLyDXkw#ysvxB0oZ)+x-lm~;Eds6*teQvi1UIIJZ2$lO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2441b7c6baaf03f679440598080aa63e9c812ac8 b/fuzz/corpora/asn1/2441b7c6baaf03f679440598080aa63e9c812ac8 new file mode 100644 index 0000000000000000000000000000000000000000..6ee8fa65997fc4b3444acdad2c91b57cb2100d58 GIT binary patch literal 7 OcmZQ$)ox^APz3-3TL9qz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/246868783de348a80e7e66aa7f034418601eb1ad b/fuzz/corpora/asn1/246868783de348a80e7e66aa7f034418601eb1ad new file mode 100644 index 0000000000000000000000000000000000000000..d8450cbcdc7714104cba4a0fd31ab6faa6ebde14 GIT binary patch literal 88 zcmXqLkZ)jOoWtTE-N44G-N?cq$H2f~%gFNoJ_CaygLb19ORIAVBLfm(QE!0qsu&a) T7_=A}v|5={7#BeGL)8KRe$)(7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2477bed39d4bfe1562219289e8bfeca0293c3dc4 b/fuzz/corpora/asn1/2477bed39d4bfe1562219289e8bfeca0293c3dc4 new file mode 100644 index 0000000000000000000000000000000000000000..db5767b6ae05976fc7134213048ad214d53ab4d0 GIT binary patch literal 302 zcmXqLV$@<{y1-=6_?nGftIgw_EhCdb<9#L$CI%4fV_;@vU|=w4U}I@DXkuW1aSa-n zm<$XI8rYZ&3>X*;7z`T38P`ZKLf8@p!Vt6Um>3N>A{dyMh&4zLVh}E47#Nsf4j|t> K$R6_`(TM=bhr~m)} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/24b489ebf99a1738d2f880af080d49fed1e36d25 b/fuzz/corpora/asn1/24b489ebf99a1738d2f880af080d49fed1e36d25 new file mode 100644 index 0000000000000000000000000000000000000000..fd6fa57a1fea3ba103da8c3903b264b8d5bcb362 GIT binary patch literal 64 zcmXqLkZ)jOoWr8U00ZA(3Lz{Z}?=E2zZ!-0000PiNkh1 zH!>P50I6mUm6c&>VliMaV891*pppg+Y%Hw?O$-bS%!~{S3?K`cm<$XI8kn@185j&0 z3>qXDtt1!?z-%J}0XBB6Hji_*OpI)->Dr7eJj`+o%qaF$XfiPPfE=8`z@PwAIw9TUr#D1Cso791L;}}93#)y kM1YAzs39MCw1JbiJE&a1l0%WR4;zP8o5v$u*#|oS0PRqoIsgCw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/256d94784731cbfd68c029bb59da432942ac1686 b/fuzz/corpora/asn1/256d94784731cbfd68c029bb59da432942ac1686 new file mode 100644 index 0000000000000000000000000000000000000000..9d91620e06323ef3501d0f9447dcdf73d076ca9f GIT binary patch literal 450 zcmZWl%}PRH5S{rx{mkT+p_Ge$+yzG0GxzGf;-#S4B)AIPxQU2BqF=TBmyq-rE^601 z^aegcuhG)DmL+s%7BdIVaL&M*Olf#L{B$^-W%W)L)1so@B<+-lUWtgR-efX?JqO^-_U1=PUa0)k-YpQqNOgk*r|Z zyy;d#=NB4LER8%Qr`i6peCHq_e$70Z6t`68x&LU+s18vvo?%Vm2?HXfBEF1al>%Um S+R;QH*aD-#u!d*aUwi?L?N6`( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/25815508976ac21a22ab072bcc9133a367390999 b/fuzz/corpora/asn1/25815508976ac21a22ab072bcc9133a367390999 new file mode 100644 index 00000000..62315085 --- /dev/null +++ b/fuzz/corpora/asn1/25815508976ac21a22ab072bcc9133a367390999 @@ -0,0 +1 @@ +00200301000031.16152003Z \ No newline at end of file diff --git a/fuzz/corpora/asn1/25aebec2d3d0d48d6dd640fe58d05987bc058bbd b/fuzz/corpora/asn1/25aebec2d3d0d48d6dd640fe58d05987bc058bbd new file mode 100644 index 0000000000000000000000000000000000000000..94ca02f29c36460ffa85bc58e50a9d7aebf4fb8c GIT binary patch literal 146 zcmXqLkZ)jO{K!(lut359%4S#~A;Tofz|Y95+{nbM+{mlg$i(}ffq{WRyOBk!l{tlx zfq{WZl!=K+6eP&Nz`)20rb0O&T!tzJ1qKE!Mg}cqypkZJ7BsMNYO63aGjT9NOaTB; C`w>_G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/25b3d3e93ba39b0c31de245ea4ac2ed61a2a02bc b/fuzz/corpora/asn1/25b3d3e93ba39b0c31de245ea4ac2ed61a2a02bc new file mode 100644 index 0000000000000000000000000000000000000000..bc074c3d65a50e15ce6c8c46f14ecfbb583d90d6 GIT binary patch literal 216 zcmXqLFlboLu$*Br!(xV|MA9IYAoa@`7BfNg!F4l1Ou=OmTpba%wZm;8)pZU37c&3= DoMJ{b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/25d411b8f03620ed1c0c0293315e6c1679f134dd b/fuzz/corpora/asn1/25d411b8f03620ed1c0c0293315e6c1679f134dd new file mode 100644 index 0000000000000000000000000000000000000000..4b671c1debbf17ee22903d352ec67d8e12b3c0b0 GIT binary patch literal 27 dcmXqLU}H2`&|uKO$i&3J$X39>#K_110RTe212_Nx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/25e449b8101ca004096e83035cbcb94f6b5ef08b b/fuzz/corpora/asn1/25e449b8101ca004096e83035cbcb94f6b5ef08b new file mode 100644 index 00000000..2f043712 --- /dev/null +++ b/fuzz/corpora/asn1/25e449b8101ca004096e83035cbcb94f6b5ef08b @@ -0,0 +1 @@ +&€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/25fc1f787190bade97cb4c5d03d780aa41094c40 b/fuzz/corpora/asn1/25fc1f787190bade97cb4c5d03d780aa41094c40 new file mode 100644 index 0000000000000000000000000000000000000000..314ea20f921f142ce97098f4278243e96b873556 GIT binary patch literal 11 McmZSLY+!%_00jF0i~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/26365a0a762e47df29b2f9cf4c22b2a49dba3d5d b/fuzz/corpora/asn1/26365a0a762e47df29b2f9cf4c22b2a49dba3d5d new file mode 100644 index 0000000000000000000000000000000000000000..17da373c27cba5eb857e8942a1a34d21a3ceaa59 GIT binary patch literal 222 zcmXqLVB^-}ZCl2-pOI65k!e3eg8>*aF&P*bG_WygGczz4Fc>sQFj`448i3gn2EuIY yT5TTZ?3fr0IG7lim>3wC7?>Fu7#Iv1*jQQ(niv>hTm!g41`y2+;*4wPXAl4_M<3Y$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/26388838cc5b59e4a94dab4bb8a1ec41a3b900c9 b/fuzz/corpora/asn1/26388838cc5b59e4a94dab4bb8a1ec41a3b900c9 new file mode 100644 index 0000000000000000000000000000000000000000..b60601d5363c3331c3e11078f7e2ed37bbf96b81 GIT binary patch literal 21 ccmXqLFlZ3uHQ;7r{hf!M(e4F4g3835fz42l2% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/26579c14c9f7cebe8ac2372560272667d21c4c0d b/fuzz/corpora/asn1/26579c14c9f7cebe8ac2372560272667d21c4c0d new file mode 100644 index 00000000..6dbc090d --- /dev/null +++ b/fuzz/corpora/asn1/26579c14c9f7cebe8ac2372560272667d21c4c0d @@ -0,0 +1 @@ +0 031304130430- \ No newline at end of file diff --git a/fuzz/corpora/asn1/265d85487666fc2180cd9d8b87cde998fa984682 b/fuzz/corpora/asn1/265d85487666fc2180cd9d8b87cde998fa984682 new file mode 100644 index 0000000000000000000000000000000000000000..815f0f3c9daf6da553ef8ea96fd6969cf7ed7e56 GIT binary patch literal 46 lcmXqLFc4s4*J|@PXUoLM#;V=O!obNa#>mWo0obY;7yy(%1ZDsL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/26758dbd1a85df8684a19f758267ed6f77627bf6 b/fuzz/corpora/asn1/26758dbd1a85df8684a19f758267ed6f77627bf6 new file mode 100644 index 0000000000000000000000000000000000000000..8b2f43c5101b5dbdf68426bdb232f1bfae64795c GIT binary patch literal 23 YcmXqMC}=2XFanc|j4v2KNZg760B1%AOaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/267992f001174852383b901817f2cf33cbf89bcf b/fuzz/corpora/asn1/267992f001174852383b901817f2cf33cbf89bcf new file mode 100644 index 0000000000000000000000000000000000000000..bde4776416bfcaa92e2b2c4ac826134cb053d789 GIT binary patch literal 4049 zcmeHKu?oUK41Gy!RYWK{*h!q*<>@32B2Er|)G62>adp+zKj`mtR9da*;3CyQl7r)J zxCCBuFL`u9C+?o|Nrf=YD}2-l=FG`w&;I C)+0m! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/267c4b100a6feeda45e1f996a0a559150433589e b/fuzz/corpora/asn1/267c4b100a6feeda45e1f996a0a559150433589e new file mode 100644 index 00000000..90aa9755 --- /dev/null +++ b/fuzz/corpora/asn1/267c4b100a6feeda45e1f996a0a559150433589e @@ -0,0 +1 @@ +0€*€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/267dced2112de0be3d6195621a91b47e421b2a1c b/fuzz/corpora/asn1/267dced2112de0be3d6195621a91b47e421b2a1c new file mode 100644 index 0000000000000000000000000000000000000000..15369c109809f3764178dbe272fa77ef8e7373af GIT binary patch literal 79 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1UIqpRCcy@#6b6tA1_lO02JuEl ag9RYf%%QT%EL;W+4UCNp3=E765C8y*Ne)W@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/269c3a88e460d9e328526a1a24a004e3d98748ad b/fuzz/corpora/asn1/269c3a88e460d9e328526a1a24a004e3d98748ad new file mode 100644 index 0000000000000000000000000000000000000000..f3cf99df6ea73049ccea227f90f6ab83cfbc3665 GIT binary patch literal 5 McmWe&W@cmn003+N7ytkO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/26b3a0702ac6b9fa207c497e2670b0ac02e6b080 b/fuzz/corpora/asn1/26b3a0702ac6b9fa207c497e2670b0ac02e6b080 new file mode 100644 index 0000000000000000000000000000000000000000..f612488272d561b56257a03e38ba714a12f711fd GIT binary patch literal 8060 zcmeHM%SyvQ6g@L(M?{2xo2~@GRlB(q-3acx@I(BJQ80hv%AJ0If8gina^y~X8C{Kg2}}|Q8Rq2PbI;sJ3=Qj-FPTVh?1s`DbA*URXQJ;6Jiz l2Gb}-3B&o9|6kOBAe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/26bf81fdf323dc8d8038a5ed7ceea72546cc61e4 b/fuzz/corpora/asn1/26bf81fdf323dc8d8038a5ed7ceea72546cc61e4 new file mode 100644 index 0000000000000000000000000000000000000000..9cebfffaa8c8bdc100a072b653acf6ce5a25a2a3 GIT binary patch literal 10032 zcmeI1!AiqG5Qb;7F;zsU=%GhFDeYx0f)oUgeG@Nzh($0@;QROnzK(c`G#g2>ztY;B z(8$i0OLE9C{4;-cHp{L!EzP|ASe>0r&GL;L*H@M?vn#TNC1PSXGs~G_f6o`iWL~b` zA2L%M*Eg0f?LFDetKAprlLD@T=XLYUuE<~bnTV_*qA-xpfZGhFZ3ahA3zHjrPL}BL zJA5zhO>|s9C|_XExL2dq;pe)=_X9AfzVZ304&KLr*3C0=9e^S8tyhKLRsujM6Lo0l z(A-Ncq%R;8SL+tmtwBg%Kq#)S+l1)#FZteWofH9~e1Sycs^9*z--!AjBC074z#q7!HjaeW&Sjl18MRVUD0|JeeG_8Bm89n=>Gm^cI`@%`$y z{p;8#RFa{z?&1%%@2B%_lI PPBK+h-F7-Ive&)7^cDoiT(pND%6KK|kr07n3-LS+Pej37Nm@U)y#Ol}AVeEiBQ>k5?O z6||~5{`dP8D8*~OS^l2Zu|O%$1WLM=zh(Xkl-{pkuUni7f1LyZrAW-_8#t{n83HGcYnRFc>s4h%*{2XfSACV-A&-Vc{}p Qh_CzqZ^hp_1_lNO0L~l_>Hq)$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2758ef61c859ea74928470013086baecbcced165 b/fuzz/corpora/asn1/2758ef61c859ea74928470013086baecbcced165 new file mode 100644 index 0000000000000000000000000000000000000000..46bfd647e58d778cfaf7663880fa0c6c5d2ae10d GIT binary patch literal 40 ccmXqLU{heogMfrQ1S>D^KMXKLGB7Xz08gtDqW}N^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/277295a6736ba3c178e52c676346e30b9aa766f8 b/fuzz/corpora/asn1/277295a6736ba3c178e52c676346e30b9aa766f8 new file mode 100644 index 0000000000000000000000000000000000000000..b652c880f2e0955c1e6abcb81727fa03b139e7f5 GIT binary patch literal 23 acmXqLkPtL5F)%PN1d|2^#(E}E3=9A^-vmMc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/27e82627ef37ead3228bdf0369f4918f8b5676c7 b/fuzz/corpora/asn1/27e82627ef37ead3228bdf0369f4918f8b5676c7 new file mode 100644 index 0000000000000000000000000000000000000000..a7f9dd7d6e2029fa1267c552f9fa30104c63bef4 GIT binary patch literal 154 zcmXqLU}E~uV9=n`z`)4BzyP9xAS^H&EQFAH&cNtC5vuGtL^Xs0D+V*cTCnQ{i(=Q$ K=#Fd&7ytnB_!;Q{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/27faea5ffab710b1757290dd7fc5e8b6a23c252b b/fuzz/corpora/asn1/27faea5ffab710b1757290dd7fc5e8b6a23c252b new file mode 100644 index 0000000000000000000000000000000000000000..c33e059e7152224b5269dddc3b63397e205838cb GIT binary patch literal 517 zcmchTK?=e^3`Ku3615@-ZhD5g`EFbky6>U~@fbmHuH_B9PPb*osp3u$`m^~7B#$4u z?V8xfaWC70=mXANswCa?6aa!=OIr(Ho=00Zv43_dw#g=-3KtkbWYL+tfEB|I05Fl;;$#>5DbZ&Y6`JI1R{#c@Z{{Ity0tZDtsQ>@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2809f305beb60fda1336dc7f4def369b8b7d7790 b/fuzz/corpora/asn1/2809f305beb60fda1336dc7f4def369b8b7d7790 new file mode 100644 index 00000000..5f0ddc68 --- /dev/null +++ b/fuzz/corpora/asn1/2809f305beb60fda1336dc7f4def369b8b7d7790 @@ -0,0 +1 @@ +êÿ0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/28591db3cfb1b2446422436593d65c67ca7d2fb4 b/fuzz/corpora/asn1/28591db3cfb1b2446422436593d65c67ca7d2fb4 new file mode 100644 index 0000000000000000000000000000000000000000..ea8b4e2f889d5959913b1ca57061d731b71c8840 GIT binary patch literal 66 zcmXqLFlaDnU}I!pU@%}1XJi2Jm>3zvK@4^_=Fo4lEDT_VtSk!y3>Y-9F}*QhU|CMZ1d3K{mv=C$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CAcj3NBNH8ZsVGs~8lQHWaZqPkhs n2`;KTi%QWr>Mqif{XmD8DUPg7Q+FAXUrZpos{vXTLDDV&V6ndq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/28bfd0a585c8bc4ba1772b918fe0cfe8a9c6033f b/fuzz/corpora/asn1/28bfd0a585c8bc4ba1772b918fe0cfe8a9c6033f new file mode 100644 index 00000000..3ab08a9c --- /dev/null +++ b/fuzz/corpora/asn1/28bfd0a585c8bc4ba1772b918fe0cfe8a9c6033f @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1/28dada91ba8a179bdce8fbedfffbd5b0ac11f191 b/fuzz/corpora/asn1/28dada91ba8a179bdce8fbedfffbd5b0ac11f191 new file mode 100644 index 0000000000000000000000000000000000000000..b8052336162099a8c0609da0ceefe14fbb7b3f17 GIT binary patch literal 96 zcmXAgu?>JQ5Ci=m^oW9*1{NTV*@6YKkE_f9`_a>)1YdVLQ!(xJtnX~2U!vS}fC?vp fTkM2o7yx21wu*|hmDMZ{&Hrn!Lis}=^<4Y_;0+PX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2904b4060dc9cfe8ded57f3d8e46a8f078b220d8 b/fuzz/corpora/asn1/2904b4060dc9cfe8ded57f3d8e46a8f078b220d8 new file mode 100644 index 0000000000000000000000000000000000000000..ca9f8ceb513aa5a241b585860a9c975833ea626e GIT binary patch literal 768 zcmeH_Ar6C35JYD-Kbt^9La%{ZEGOVf6(kb`=b)x%sN+ga5LiM59)*CBPtJQGe^f&| zECsWYHbEgvlC0MIY1C*!xUO~RM0Lb=cXlQ~$VuY|nD~$S`})ny0OlJEc>+kF HN5Z}p6=06& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/290d487b910c397029d6912553c032fb1d7d641e b/fuzz/corpora/asn1/290d487b910c397029d6912553c032fb1d7d641e new file mode 100644 index 0000000000000000000000000000000000000000..29266781a2ca997907879b62eb74ecc02e856eb9 GIT binary patch literal 13 UcmXruW@2t&Vq#)oVq$0l00?gZO#lD@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/291440b73ad3d5168ca6153a106ecac958f2e587 b/fuzz/corpora/asn1/291440b73ad3d5168ca6153a106ecac958f2e587 new file mode 100644 index 0000000000000000000000000000000000000000..0bf948d5c6cf25293fd21cafd5e5b0dea975a397 GIT binary patch literal 1475 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyakza2Iw)s-zTER49#v5J*jyd>lW= zetBUri+yu!Zc9|^BrFQzh{Y&oqO)-929`iXOl!Dc#bUItH$_~G<1JtZ(^Y{x1wY!? zySR1frnP^bf-R_T0nxLlD--F?YeX3U^AOl7lx4-x0r=H&YKYNE@-knG*rk)&M?9xC xj|>^9O&4JjvuD01UuZ^A{*mv8u`d3ilzfQqy^z0E^0B->{uHR7_XaxrA1%L<cMilIu_#EE62)>TTND{kPQtcMg zX%l|aLsKXWGqd0K&HjsK>G5zroqzV-(ZKmv$+Y}N)jHB&sktYK>mNw5x>`0*NFLOYOd@8V_l{1EJiJ zTo~ZOz(qF_We|mdi*A&gL?Nu-%X=(&vE;S+I;|xQ z(yGy_HL~)L>g}QGfo{+Zy2Bo;0Y}|!e~;C`g=Gg4tkp|i!CD;!dVyY`7j?Y=7vQ21 zTp+BGvm}F7&A>%B%1xpo2W>aXO%##k1{aZuvK&#gYP4#Nv}&LmbQi|Kqnofdp$c(*|pG6zBzdfnL=0;$OHBRd?cxH*d(gZLz|< Vm%MzK`Q)NFJMqhrFJHZL_Y09&7#08k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2a3049fc81047204ba942a042cf18eb8f6bde38c b/fuzz/corpora/asn1/2a3049fc81047204ba942a042cf18eb8f6bde38c new file mode 100644 index 0000000000000000000000000000000000000000..89ccf5733774cbaef82ef951be6ce150bc445e38 GIT binary patch literal 20 bcmXpIGT>$7)N1o+`_9YA%xJ*C%*X%$C&L3u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2a6ce374096b1cff82ce2edc1ac8fdd6ab6a7eca b/fuzz/corpora/asn1/2a6ce374096b1cff82ce2edc1ac8fdd6ab6a7eca new file mode 100644 index 0000000000000000000000000000000000000000..18d03cb9efc9f0c4839c25eac502f7630f24e401 GIT binary patch literal 1059 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyak!ncJVSoaV=Flt=rZ;AZO6Y Y6~iVhhK)z4khF$PSP< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2a6f9e9468f4148c988daa0f259948daa880ce61 b/fuzz/corpora/asn1/2a6f9e9468f4148c988daa0f259948daa880ce61 new file mode 100644 index 00000000..cf17bcf9 --- /dev/null +++ b/fuzz/corpora/asn1/2a6f9e9468f4148c988daa0f259948daa880ce61 @@ -0,0 +1 @@ +0€0¨ \ No newline at end of file diff --git a/fuzz/corpora/asn1/2a705b2690a7c0b876823b6875595dbcb6e65759 b/fuzz/corpora/asn1/2a705b2690a7c0b876823b6875595dbcb6e65759 new file mode 100644 index 0000000000000000000000000000000000000000..8e48ab1058220fe84bac3eb8b7026c419076f3ce GIT binary patch literal 259 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUe~e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2a925701461b5d1a3ef7cac05bf61a104cd286c0 b/fuzz/corpora/asn1/2a925701461b5d1a3ef7cac05bf61a104cd286c0 new file mode 100644 index 0000000000000000000000000000000000000000..43d92260c61c4684c69a35960b318ad0b9cb398b GIT binary patch literal 4240 zcmeHKOHM*D6uq}C<)eHIen^A_C#aB^gEKWwi~~3DCeEC@1P6sg)`2T=2Zpc-W8&N) zrtK>azfoeMl6OeR?d|F3mHQ5-Fgo8JoDH6eoE1X@BiM8aMhk%G#-J|J!U80W<-;9Mr((bkaPpmjcrgfsLXKjzZEk_e1L( zr#KOLx(CokOg>0@TPSE5HMW#2utLqoYigyC9gToWpaH`YmOXP-$+u4_`^=QEe+E~{ zH14qC1*YdTMIl7&f~C;(aLMw^+$-ch+r6~^nGn@A`ZPlmV)1lf{2z2+ z+m}=jf>Z}$%=KT8>VUZ4E1Nmn~hi{CAbO7I=oNP_!a%i*+~L**!X)fs zWZJsx$pA~+s}L{?=RbDbKY`il%DcG16%I|?Y3=smo|HkpPxFEMNBtbU9bo*9v6YRn zJL>>A6($T#FQ>Iru%Nc`#Mt`+tZvjiXu-llz)_!NRbs_F45S?~zJOH2_ B2BiQ1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2b042db4f611b6d0d581fb19350bcd3bb5b53d4f b/fuzz/corpora/asn1/2b042db4f611b6d0d581fb19350bcd3bb5b53d4f new file mode 100644 index 0000000000000000000000000000000000000000..2b29cea5afb3a4e23c58e5098081f842ca47a6e0 GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4r({yzgN!#4(o{|pQaw;3E5KuZ4o|G(xN G0|Nj+^ADr| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2b5bdcbf1810066fcc04831b9b60365150e5340c b/fuzz/corpora/asn1/2b5bdcbf1810066fcc04831b9b60365150e5340c new file mode 100644 index 0000000000000000000000000000000000000000..ac8e4f628cb9580689341ea214eb758328ced83f GIT binary patch literal 20 bcmXpIGT>xm*J|@PXTieE%*w#T$e;`WA`Jq( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2b71329122893cb83d91d5eb82fca5935309d3fa b/fuzz/corpora/asn1/2b71329122893cb83d91d5eb82fca5935309d3fa new file mode 100644 index 0000000000000000000000000000000000000000..fef4ee14b3afc6843ea406938c1cffaadb6ad84c GIT binary patch literal 7 OcmZQ$)ox^APy_%2R{-4r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2b813a7a2a4572c5b9786fd303ff771e86ba6dbb b/fuzz/corpora/asn1/2b813a7a2a4572c5b9786fd303ff771e86ba6dbb new file mode 100644 index 0000000000000000000000000000000000000000..a9f46a8cf61ff91bdb403f0b159f82b9d1d78a65 GIT binary patch literal 27 ecmXqzG!!=wWn)g)Vi4ie4-M7#3Dx&;1d{+g*abrX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2bd82ee7001f42a1cce96a1817562fa24e76967d b/fuzz/corpora/asn1/2bd82ee7001f42a1cce96a1817562fa24e76967d new file mode 100644 index 0000000000000000000000000000000000000000..8de18f9190a86f9a57d591a431c3fef75192760a GIT binary patch literal 1144 zcmXqLU}I$3&(L51hD=Nb1_ljmOxny03Px!|37K^|33=@1A{PJ6(a+KK?560t3eY30|PT71Bh#Y&x$5S zErZ6_aQz02_n8@75LpLzB8pF6Hw=P%y5x<6}5_fZy0mhF5z zd$YIfuQw8&u+xkA;N`GGf=VVv4c7!?WEJHf2`&ZP^Y*xgfHt~SnW zWvDa3;@toLePIsPVq#=uwqjt(`jm3#v9aCLD<;!7w!hnDHyXH<1}-B5g8=rx9Zk6u W1+FzT?P3NlDA_79<0%9%@;w03cFlAE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2bed3227835c201f4ff172a335d604f00fa94d5e b/fuzz/corpora/asn1/2bed3227835c201f4ff172a335d604f00fa94d5e new file mode 100644 index 0000000000000000000000000000000000000000..06d2d3cf445c9208e55f1152a0329fe1f9caf3af GIT binary patch literal 181 zcmXqLU}92ZFlf+eU|@>;%g(lU@7~*6Y#11H8rZP%8=95~@iM~Y*+Bvfynny~#As%K WXeP=cn7K@mfBD%Onwl6Hpa1~6uQ)vb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c07a1d44d79579bba47da2114e7ba53bc20e474 b/fuzz/corpora/asn1/2c07a1d44d79579bba47da2114e7ba53bc20e474 new file mode 100644 index 0000000000000000000000000000000000000000..93772f95713c847a84c08f13cee06932cce47050 GIT binary patch literal 741 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Gct%b zG8%$Z8Z@vmhsw&Za2Yf-gCrRkI>97JT>~3aXqE`m8v_OgX0S$zjCoBRV}_+`Mm>d` U{FWK8F;=lL8h{Za8#Fxv08`3z6aWAK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c20f2fc0264bf9a4cb3bcfd97c62ffbc56f5dab b/fuzz/corpora/asn1/2c20f2fc0264bf9a4cb3bcfd97c62ffbc56f5dab new file mode 100644 index 0000000000000000000000000000000000000000..f816e032ce6a74a54921ae51ef47592c4a9d0d78 GIT binary patch literal 46 lcmXqLFc4s4*J|@PXUoLM#;V=O!obNa#>mWo0obw`7yy(H1Xch5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c4d31d8388754ff817f8af18ac490a35984319e b/fuzz/corpora/asn1/2c4d31d8388754ff817f8af18ac490a35984319e new file mode 100644 index 0000000000000000000000000000000000000000..3045a6346f01d7074cb993c684834d28389eecfe GIT binary patch literal 18240 zcmeHOu}&L75S_iVF2o2yl*T1W6*&?a3Q|NuqKaG~@f&XWgHt5@Mf4~|+I$KvCDF{@ z9m{b(uaBKQ*33h~XG<`e-JLgYXU13-`z!Nh^{_bjcx19WD3O1%3=zvB`<4SBU^z2C zX9n#vel9-DSBrn=nJM=8A%|)H111Ovgzr!u(X-+AXg_T5i=Hm&*An2EUa>4DH~1R> za>H-2!#?)f|CE1)yf)Fccpu#&L)J&yi#B8}zO*N`k8|tTPWxCP;;II>c(R@kdgGCi z$XWIEkwD}HP|gg_(9qhjkFb1VxxXGP=WDTja+KvHat9-kv)YrNh2qiotP+~&IIA*w z)aYOw+Lxzz45~U#tN-p|ypzK@R9aavx_q2$(sI5hr_FL}EsCkf;TC;;Bs9@c>)fc( zp}9kI2jBC$?sna|BeQ|Quncgq9j~Sn9gdGuxg*})s=|7U*FruLl;uXt$b$JXld1!3 zJgZ{yxXaa*@m4h$%W3YgrBXt;RgHgtd=D0V&uYs1=<6dvH9&9;5G`B%;T?R&Iak$3 zQX0S>7mbdlQzltMW^~na#MI-IOx`{|#_9%6Dj(_kDy1F?%5uS3E|_|J!>S`1liM&z zn^)uS;~<@*{SKkI4o01=#_e~A<;Q0}HX7gtwZlT4l0osP9hOk>sM(6!MncnT+F|jS zmWi(cUT;x5EUnqnnvrpf{-cXp1GxDyenw8wqE1>0)&auZSbcR)IE$}mxoxW}zCIG1 z>WWTU(qhom{>z#DZFp6+oTQd>F(_LNiVm$jgu3bU)gH&KJm{pQ)&aUF^jr+$9B&Pv zxkEB{XdOW709@_#jYoo`knP_w1L${=(ylz{q-B7cPM?<33X=Ps@1&F!Lqz9TF4bQ7 zTaOOkJ95el;OnDm09t|IGf2^HIyz}d`xmK(Jc2@I4D!+U7SLw7ou9NEBSZfO&FL>Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c5df96551bce8cc63c86131f067f5b4d96d5ea5 b/fuzz/corpora/asn1/2c5df96551bce8cc63c86131f067f5b4d96d5ea5 new file mode 100644 index 00000000..269f05b5 --- /dev/null +++ b/fuzz/corpora/asn1/2c5df96551bce8cc63c86131f067f5b4d96d5ea5 @@ -0,0 +1 @@ +03106110116+1200 \ No newline at end of file diff --git a/fuzz/corpora/asn1/2c5fb3bc9b52e6228bbaf33b8875cdd318141b4c b/fuzz/corpora/asn1/2c5fb3bc9b52e6228bbaf33b8875cdd318141b4c new file mode 100644 index 0000000000000000000000000000000000000000..f9f712584bbb56a84cde70e30871692f1d23f8cc GIT binary patch literal 377 ycmXqLFlb<7PS<8!(7*r>-O=2E;3-qRAB7D@mjW(cDb2z3_l#2ODJo<^uo<#65ce literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c6de96fc3c699fd818578a87c09dbf2feba4911 b/fuzz/corpora/asn1/2c6de96fc3c699fd818578a87c09dbf2feba4911 new file mode 100644 index 0000000000000000000000000000000000000000..0bee613fb5bea6656242a95e05c9cdb2e20095c0 GIT binary patch literal 1149 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+tPIir|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*8ratO^jLwjj!SQ4I1w=F)|uxKm`~XnPmTfY(fSM2*79%%p!v<_y7O@e@Og) zEHYbIxmtNxHn0BbXcQLUvSIu6{Wo^0b6YwqhyLHfEXuIA(8PV_)#HEexNe=lc<1W= ztSQ|`Su9z$^YQG>-m<^mNO;0dFXn@n!wv~5nHV)(6O55n+-siPvGu$1Zy%-m&(1oR zE{I}xPjR{0IJ1?Z&V)&p0m*s@;D@`Hk%^I!*@}TB>r={|$HsO~ub52V*#2&p9lpS2 z*Aix9@Mr@?0SyB8Ke}__Zen literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c8c455beed4fe9b467d5ced9f26a26149c42972 b/fuzz/corpora/asn1/2c8c455beed4fe9b467d5ced9f26a26149c42972 new file mode 100644 index 0000000000000000000000000000000000000000..2d853023fa9c8e8c5ac0f75ea456e2e4e37dd73f GIT binary patch literal 19 acmXqL5ac!BW@F^!Vf)kC(9qDpzyJUz>;$a< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2c978a33804e876133d1a4f446005d6ab63b3338 b/fuzz/corpora/asn1/2c978a33804e876133d1a4f446005d6ab63b3338 new file mode 100644 index 0000000000000000000000000000000000000000..d5062dd98d85a00e534c91e9bf507b3875d4ba83 GIT binary patch literal 104 ccmXqLFkoh5)WSu?;gZ0q11y22je&sy0Q9v8zW@LL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2cbd0d327849bf6ae52d293e2eb135ca8a0f0698 b/fuzz/corpora/asn1/2cbd0d327849bf6ae52d293e2eb135ca8a0f0698 new file mode 100644 index 0000000000000000000000000000000000000000..0d19c3bb0d305e1566033926393a231c6b3c72d3 GIT binary patch literal 14 McmWgOF5-60b8t=)><+&t!G^`DFi@92S+*pPy*GEnzk?>TWA$QjR0U%HNdWJJue%%!)ZcW zT5AzF%%0J@@HL`!IQeXUCRn$a@DJK~-^AN3IWXGi1Jsopj6=pDdo@nX+sa8cnWYxl x4;HUa@t$o}?yWGQ%mklIXwwIZZL?P<@axd7><3?rEC=?tZ`siv``fQc*ax9e>FEFf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2cd07c558fade80cc0af3d5f700a8a17be6e66de b/fuzz/corpora/asn1/2cd07c558fade80cc0af3d5f700a8a17be6e66de new file mode 100644 index 0000000000000000000000000000000000000000..fb75765b5033be42d4ffd2c2ce55c4c461e41713 GIT binary patch literal 28 ecmXqLU}H2`&>+EQ00M>vMj*<>n1O+T;XeRYqy^Ui literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2cd33a0e4f2d487efc38a5ea2e906d988865c645 b/fuzz/corpora/asn1/2cd33a0e4f2d487efc38a5ea2e906d988865c645 new file mode 100644 index 0000000000000000000000000000000000000000..1b31bc9caa14c185a99fe6cd0a59505c34f1ad1c GIT binary patch literal 4 LcmZ3?B*g##0?Giu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2cd3a1f6f5f21e49974c8b38aee1371a34d85ba5 b/fuzz/corpora/asn1/2cd3a1f6f5f21e49974c8b38aee1371a34d85ba5 new file mode 100644 index 0000000000000000000000000000000000000000..deafb9402cfd94460de13a7218fd702895bc8f42 GIT binary patch literal 62 pcmXqLFlZ2zGH769GGLGqV37ICz#zzNzyRX%Ft9K%;FDuu000{k2RQ%$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2cdd45847ef6403749cd7d5d0c60818689b77b7c b/fuzz/corpora/asn1/2cdd45847ef6403749cd7d5d0c60818689b77b7c new file mode 100644 index 0000000000000000000000000000000000000000..59caff66fcf0030db71c7407855de8ba2293d882 GIT binary patch literal 200 zcmXqLU}CD5HfS(tU}IXwz`(%5+vai3g8Bdd|Nj|9_cAarFbOs=r7$oUG#D^2Fc>h1 zH!>P50I6mUl~rZ|34xh1jEveWjBu_95?dLW4OVs%rVB+Gs+2U6E;Pg8QjFRl2S5M- Dmh&Dn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2d2a4041931df15db0ca2c1795ceac27d7a2211b b/fuzz/corpora/asn1/2d2a4041931df15db0ca2c1795ceac27d7a2211b new file mode 100644 index 0000000000000000000000000000000000000000..6bfa847f3eb4275ceb840376d4da2101312923c5 GIT binary patch literal 89 zcmXqLFl;brU}Mw}@z69dGFZJ@ay1l0guqx3fX;`2|Nj{||NsB*b^h|Z&qj@`j0Tzv G5C8zZ`799t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2d85e4438afaf6704a4d42484c5834647bb3f0a7 b/fuzz/corpora/asn1/2d85e4438afaf6704a4d42484c5834647bb3f0a7 new file mode 100644 index 0000000000000000000000000000000000000000..b6c663d831994e1e3d46847d453f405868e6c6eb GIT binary patch literal 1880 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3w_C*ONBIp?t9JAd-LS^H^J>eHt$^+4$Ij$YztJ&R0@p! z?dlL|+Z*v~|Ix3z48EP79h!5!(Yis_B>z)d!uIT$0ZW(6pZ|iTT0rTL|L&F7|7|}e z{lhx^`LPwtMEO~MH-Ec)RPHd7X^3!?*hHgmrJvVnCtlZj|4E5ia_&VB#^X$)4bu|> z`bCww&up5s6C47Boc1%^hufCDDLpVUyl>Z)NdISr>;jDqTRg=Im0$R1hzV~$&uP?i zV%b9*v8wKnnqG|ui`U6%Z(de9F>i4__b)}Gq>sOosu)$Q&n)@4Z$;pQ&K1q~A4WaR z`k7mj7S~W6s+z*+WBu>ErxtT#3j=3*ewmq?O^-|1{y*(r$t{XsTvg3QudHuq+s_)! z;yHUg|LbcEXA-AB4F7gYRd(u(b2C}&R^QvQ`H@5Uf%CsECZFWnZX@fyup+Id&c91) z)$jk)7Th=~F7~FpU~UR`Zejj`u#0~Llhz9z5X^0Jk?Jeb=6o#97Gt^o>Y`1da(DNA zH)Q*dk~Wz284PqpL|7MxzJKyznM7tQ`%-O7s~4A&mxM8iXiR>;Wrt&RWzkRZrQ0nG oMibj;V#Al%*w%-}6lpJd%(=<(s`zMP8!g!eyktWz)fk8b04`3~ssI20 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2dc8fc48dc11424a8c16192b573a6ad4fb6d968d b/fuzz/corpora/asn1/2dc8fc48dc11424a8c16192b573a6ad4fb6d968d new file mode 100644 index 0000000000000000000000000000000000000000..9910744b5496e26153eb95a8c2a6632625d795ac GIT binary patch literal 30 icmcC&Flb<6Vqh?2FmEtuU}H2e01Fr>ZfG!IU;qGNIR;Yz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2dd5834595e527e5a8e3de7f72692bde2fb3b6b7 b/fuzz/corpora/asn1/2dd5834595e527e5a8e3de7f72692bde2fb3b6b7 new file mode 100644 index 0000000000000000000000000000000000000000..7c67324de3a343db7c9cd81697e9391a1f3d5725 GIT binary patch literal 399 zcmXqLVB^;M?a}s~myuI|k!e3eg8>*aF&P*bG_WygGczz4Fc>sQFj`448i3hG1_EsC zT5TTZY?&C@ShX8j7!;W07?>IG0)qxNmR5r%1_lOZMg|53kR>C~3PsF-QuxmZ3Jx}w JR?Q{`1^_z8Q7004jhM*si- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2e0b67b26fe89d25db0bae74331ed98fa4d7daf4 b/fuzz/corpora/asn1/2e0b67b26fe89d25db0bae74331ed98fa4d7daf4 new file mode 100644 index 0000000000000000000000000000000000000000..c0200e75594c3d2696d5286e7c733ef7292614f7 GIT binary patch literal 3336 zcmXqLVB^+mV}Jl|ru_^J24Kjz{aG_%)ns4V9+4JXeGgD0AU*lv$1Qnd7QIl zVnj$Vn=!DcGZ;V&GH5U`U@%}{1oI7`f+)ZT#LIvR88oo5v>G%qFfcGPGBAL2kJ>*P r{-fz{H2;m3KcnUEX#F!<|Bkjl250-r5FRljv;8;H{g23)Lp=Tg%c5qy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2e13c61d4a539bfceb391ad3eed8a6f43eee4808 b/fuzz/corpora/asn1/2e13c61d4a539bfceb391ad3eed8a6f43eee4808 new file mode 100644 index 0000000000000000000000000000000000000000..ba41ca09708c632f6ee432c0919e8f71dcc7342b GIT binary patch literal 30 hcmXqLU}IEY&>$gbU}9ikUX*~7yx2l1!e#M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2e4c77b23828b0bb68ca6ba09c4233f4bc8429f4 b/fuzz/corpora/asn1/2e4c77b23828b0bb68ca6ba09c4233f4bc8429f4 new file mode 100644 index 0000000000000000000000000000000000000000..1a68c1479d342f1ce7365afcaee5aee964cbdaf4 GIT binary patch literal 34 acmey{z$X3qb7N!U%LWXfrmn`ozytt0qz`5Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2e5140d77e2e6508312d4ba2f3c0adfeddaf2b15 b/fuzz/corpora/asn1/2e5140d77e2e6508312d4ba2f3c0adfeddaf2b15 new file mode 100644 index 0000000000000000000000000000000000000000..c46e11a72130a0fe46a4fbcf9786baecce1dff0f GIT binary patch literal 28 YcmWfTGH769G+<$1U_fDLGcdXU0550*C;$Ke literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2e9c4b405b6f12b4207b8526596b00ac0ba1dd42 b/fuzz/corpora/asn1/2e9c4b405b6f12b4207b8526596b00ac0ba1dd42 new file mode 100644 index 0000000000000000000000000000000000000000..ac8939072e8814343250e4a02aa485b301aafda3 GIT binary patch literal 315 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePv@kX?Ff3qTVt@jW=Flt=rZ)x*49s9%!^;ddD@G&Ccy@#LIy>H4g&@T1_K81 dC5#3OK&qKTWo1~n3>sP(n-~}tFfcJd006;553&FN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2ea6bf9a9952ed38b0067283215d07b443417f28 b/fuzz/corpora/asn1/2ea6bf9a9952ed38b0067283215d07b443417f28 new file mode 100644 index 0000000000000000000000000000000000000000..b0c2f9b0e6896c5df888ce139b5c247ad12591f2 GIT binary patch literal 2464 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3em&~94f~8tO>5%{KmDm4mKPLUd zI{f*u70X2VS$;QvyL?pcFq3JBaFp0Yqi?03*J&qS*Lwd+iCJ>)MGwZ~Orj0b69W20 zmATJsnzR!f0)(9QGu(&Umc1!GFfzPv*Of^BXNBwnjSX8o#R`>Q_-Kd;Z$Hmz)N^9l zLmRQG?vR>ZjR%X@$!Tw1Ryr|naXt4hMWdvTzmuvMRjkh}`M7UI;DpW<&G#QhJWp(US?pHd+p_tQL-~R8zb+=9+O`&pk_kA~H z`;U?~nDrS9bVNj07l*!o@?n`oW-I$rZA+^cmy(x+F^OnQe!pdhV|8WGPw}POEeu8z a+h}4NO>Cnj+wd*fJV&e1(Q1@R)hGb)<;~at literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2ed68656fe73cb5b911923dd0cca0eb005032a89 b/fuzz/corpora/asn1/2ed68656fe73cb5b911923dd0cca0eb005032a89 new file mode 100644 index 0000000000000000000000000000000000000000..f23f280e32efb906f5bb90847a0d3922ad3a2815 GIT binary patch literal 778 zcmb7CF%H5o40NvGr~?weK)~XPkq_`JD?_I|0>o$d5o1u3P)bQf>&>?8v+qun>qC2K zpBrPVtBS(7hC~@hmNi#9BSbe9Wh0F?ges61+_$KL*pyj@LoS_K>}5qM1wyV5XYc^n zVca>}T)~BX7*%ecgwXFBR5zON#4bCozjeBOfJY^CjV|*^m4di-9qPJl16BvySk{EcrQ}%tjhV@-ZM50WVB{pWOfe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2f01f4f0dc8fbab0239b5e321ca745b3a5007d95 b/fuzz/corpora/asn1/2f01f4f0dc8fbab0239b5e321ca745b3a5007d95 new file mode 100644 index 0000000000000000000000000000000000000000..4466cee39a87fa1dea9dd0aee38dae84dee2fc5c GIT binary patch literal 222 zcmXqLVB>CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 uHji_*OpI)-+Kns>0?cX*ObmnpBS?us0~<@LK@$T512c#ZvW`}k82|uSvlux5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2f1de06fbbf31c1ab4745623dee9ec0dfd4d22f5 b/fuzz/corpora/asn1/2f1de06fbbf31c1ab4745623dee9ec0dfd4d22f5 new file mode 100644 index 00000000..f1557612 --- /dev/null +++ b/fuzz/corpora/asn1/2f1de06fbbf31c1ab4745623dee9ec0dfd4d22f5 @@ -0,0 +1 @@ +¤€0‚000 \ No newline at end of file diff --git a/fuzz/corpora/asn1/2f301f762b6f68090116feb97bddfe0cc57f71ae b/fuzz/corpora/asn1/2f301f762b6f68090116feb97bddfe0cc57f71ae new file mode 100644 index 0000000000000000000000000000000000000000..becb866fdd54418c2eccfb9c6b59c3eb2aa65e8a GIT binary patch literal 29 XcmXqLU}H2`&|o0I!ix+T89)F4LDT~F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2f31daed8292576a96b4666ef93cf89253abf8b0 b/fuzz/corpora/asn1/2f31daed8292576a96b4666ef93cf89253abf8b0 new file mode 100644 index 0000000000000000000000000000000000000000..7a7d1c4553c9a45200a438e30388ccd0750777f2 GIT binary patch literal 628 zcmdUsO=`kW6ot>b_ccnW&{D*Jns(YcIS9?5(76Mrt{?*)bOD{^88GW`Vt3IkxCOhB z5_w7b169Of&*9%p HHIOU-3hxS$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2f5c0012f91464f90b76fa8798f766916235e207 b/fuzz/corpora/asn1/2f5c0012f91464f90b76fa8798f766916235e207 new file mode 100644 index 0000000000000000000000000000000000000000..c227c1fa37755dbe704e6e5a70b66fee5b165009 GIT binary patch literal 10 McmZSLXkdT<00d?LivR!s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2fcc0eb6596b3430ab4b77686a88193bbd41893a b/fuzz/corpora/asn1/2fcc0eb6596b3430ab4b77686a88193bbd41893a new file mode 100644 index 0000000000000000000000000000000000000000..fc505952cb6f7fb9879ff0f263c7bb39a2b39034 GIT binary patch literal 7734 zcmeIzu?oU45P;#!B}PPq4i23J*LLveD7g2rqF`UkH}G}3ia}5~aToqSOSU5+AF-0x z- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2fea43900f78af051e36e0a098b51628f08fb120 b/fuzz/corpora/asn1/2fea43900f78af051e36e0a098b51628f08fb120 new file mode 100644 index 0000000000000000000000000000000000000000..a057a27ae103926497ffeed5f6fe07bffaae8e3c GIT binary patch literal 146 zcmXqLkZ)jO{K!(lut359%4S#~A;Tof!2kb~aw8M3awD%|BNOj`1_lNO?RFNeR^}8& zhByW$Q6?rPQHK2>VFpHCFcr!HrWhEi7!(*7v=|wbweU!4DT9n!(7?v2t-{RA#K8zL F1ptq#6kY%T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/2ff5d03d83e33b511730747155c1692095904804 b/fuzz/corpora/asn1/2ff5d03d83e33b511730747155c1692095904804 new file mode 100644 index 0000000000000000000000000000000000000000..d2cbb0d9cfe3adaa5817b2ac7c3d2ee5b009b577 GIT binary patch literal 1223 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3l-NY0Z>68tX(wLSdjCm@S#s`0560t6q7Bm% z0{TUjxzB8xw6kf^>lW@05i(yvPW%3FLF={Iw)al&Ssi1xBYbD&l=ZuRS-ood8ScYv z%ife87#ZHT>q?~mvqE-(#)d7PVui{td^E&_x1Z-U>N&COp^aEocSudI#)HM{Wp(US?pHd+p_tQL-~R8zb+=9+O`&pkE4~}D{YOa~%=!!lIwB&hi$mW( z`LIkPvz2|Rwx!jJOUX;Zm_#%tzu&UMvAVM8r})zC76!1y<~f?!22*0w7}ALi06%o> AJOBUy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/30045cc30e35c662c4fefe29e1bae817698ff47e b/fuzz/corpora/asn1/30045cc30e35c662c4fefe29e1bae817698ff47e new file mode 100644 index 0000000000000000000000000000000000000000..8c9f25567e40920ef12593b39da39c0768a0e865 GIT binary patch literal 1301 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOg<(O1qG7{AK_*6q1xyVL25fAM3`~p+1`MM@ hqaiUg(*)OO@*TPvnYc_xK?%iZz_5@(kO^Aa0RVtjpppOp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/301e1aa30823fe4f988f09d1990ad0f687c5b031 b/fuzz/corpora/asn1/301e1aa30823fe4f988f09d1990ad0f687c5b031 new file mode 100644 index 0000000000000000000000000000000000000000..4f86867311c7c74668e944deaca3036a3593e568 GIT binary patch literal 148 zcmYj}y$!-J5QV=xTgWLaDoZIMB~qxI2C+*vU6-OE^1cK@RG zkH)F}poy!-17O*F{9V=QIcsR|~>_&zobtjF4x0t>x0S JiFD^v`2yE%5JUg~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3030dbf2cd56e80ac3d2e493f6b77bde97158bb2 b/fuzz/corpora/asn1/3030dbf2cd56e80ac3d2e493f6b77bde97158bb2 new file mode 100644 index 0000000000000000000000000000000000000000..ecaa59c6dc706299f0d9df74d4e28fcf1c9ab953 GIT binary patch literal 64 zcmXqLFlaDnU~6P#U|=w4WDsXGSO5`W4waQ*;WB7g(8$!tz`y{K2Lpo!Hs;V!0|o|W HkWeT9t*r|9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/303e1822e21cc1d50e0d6f713914405c272f937d b/fuzz/corpora/asn1/303e1822e21cc1d50e0d6f713914405c272f937d new file mode 100644 index 0000000000000000000000000000000000000000..6daf0881a03562e7543485a50fcb7c1aba72f53d GIT binary patch literal 123 zcmXqLFlb=o)N1o+`_9YA&a|Mxpn-|8!H~hAfsM()fPrCQg8>+_F={g~GB7Y0Fo-uY y8iJG=G_Wy;%F3{C88kFEGBGS*0Ly~`NONeG2-6z_1_ow`E(Qigh#bTO5E}qsr4=~< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/304c1c6aa4504fdc0f7cd72ac67bc70f56ec1a9c b/fuzz/corpora/asn1/304c1c6aa4504fdc0f7cd72ac67bc70f56ec1a9c new file mode 100644 index 0000000000000000000000000000000000000000..1da520cad5f7a04aa7335a5cb171b7c78d69066b GIT binary patch literal 931 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcXu5GKe!8fYcZ? zurY_qDzk7IG&Hg;Wl?XC%3**4kj~I75vDhW3=GW7U_oMx(4^dmh1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}>l5roJw>o6GTurVr%sQ=jC Q&|pItFn|F&gfeIV0G8S!1^@s6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/30776425dc18ff195a46fa0883e2794186f81e48 b/fuzz/corpora/asn1/30776425dc18ff195a46fa0883e2794186f81e48 new file mode 100644 index 0000000000000000000000000000000000000000..fafd4b87aeee160a9086102e94907e4dbf787aa2 GIT binary patch literal 554 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENNtFWDo$$g8@i$XqE`m8v_OgX0R@Z`bK<)ECd43zGd1;0trG784^QvlRnN)~A#^kB#k~UNM=zvHjgH qJL(56B>sk7;PzsKEi`Z$85ji60~e(Br0IW1^2L&{8qf`6U;qHZ2Tdyg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/30819f975fcd0b5c6d424d00b1363905aa34b2d5 b/fuzz/corpora/asn1/30819f975fcd0b5c6d424d00b1363905aa34b2d5 new file mode 100644 index 0000000000000000000000000000000000000000..d7132ccd5d932fbf5506e46e27065068c21e2886 GIT binary patch literal 892 zcmdT?F%H5o3_K@kDh9Sn43LS9EH1C$1OAVvz5|}aU)UKzNokb=LP$s;k|j=T-}!Q^ zezxg$-FZ&6*(<9dZNcgdGjLGO+fxJqU@WLjS*+elSh{?f&nu!>gpH#MQXeZ}ou7_< z7-X!X=rF8=D6HnhfbF|xlmeJb;Ap6-Y9^b2?=#<}n49#&1OYAGz<4su*BG}CqBbSP k7kdAY;zTMb7!O+h!|#6}?RM(do8?FQKe4@)pgv_>0nr(J$N&HU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/308aab56f731e1f5a9680112d314cba9bfe7bc3f b/fuzz/corpora/asn1/308aab56f731e1f5a9680112d314cba9bfe7bc3f new file mode 100644 index 0000000000000000000000000000000000000000..f27d6f084574356ad0adb154c65c250e1d842641 GIT binary patch literal 362 zcmdUpF%Cdb5JYGHvLYg(a|W8JCHj98*Vst>Yq^2zXa%KOVP5m9m!Vsgq)$hz%SOfx v&YKWOx`jajg5C)`;p1$q=u_OMAePUAWTGt;@6jz=xd2cBaFzej{ou8pOtdV? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/309306e315adaef79cea586449434a757d406f73 b/fuzz/corpora/asn1/309306e315adaef79cea586449434a757d406f73 new file mode 100644 index 0000000000000000000000000000000000000000..788936dc0cb2fdbbd34e3d25082049ae7160f287 GIT binary patch literal 988 zcmcJOK}y3w7=_0O4FICbF8qsG_T5x{#QF~U!OQRoWQ(#a`JHcT)sz5sCV1s708Q{$K85)s z2=8PB*&6rWgWPxy`wQaQK)O)|`OofrM9SAG|0O1$2*#H0l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/30d5f44d0e7029f0e18347a4b35926472dc8007f b/fuzz/corpora/asn1/30d5f44d0e7029f0e18347a4b35926472dc8007f new file mode 100644 index 0000000000000000000000000000000000000000..631e9def4a1d58554e1ed2c2ee1c131557e6bd24 GIT binary patch literal 4378 zcmeHLI}XAy3=Ks}Cr-c&17av*W#VKRxLg;G&=oFGff6@qoVe*ntwKduP}JD5-?Lxb z79z`ztPp3xvu&Akaj)6_#+Y6|?Dae6qN>?TKX2Cdeq`UbUp^Q70Q+_u+AogD^DpBL zo&)xtT_}$Uae3H*k2bawUIIJ>?(_%QnuuTalR@Y-Pi6TGVYP^Fi7 zqz;yd<0?mS4XR+Ob1fz-OQ~jKwoBb`E?!5;^HayRYDX$k;?pSdgnFH)e~3Drw~z1y z5KVs|PfC?nf+O^jo^JHNt1*VVq)*G-H;eZR=9%I*Hn$W8SMToa)PD6QG1>=#d+5xk zzHt8JZ9=CT(780D@O5fEr2&fX$QnPohw-dFTnC&PJk<9Z7Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/31122376bab259a103e57c350cf897be9215142f b/fuzz/corpora/asn1/31122376bab259a103e57c350cf897be9215142f new file mode 100644 index 0000000000000000000000000000000000000000..f52296c8fb0dd09021a20ccc31492607aaee0473 GIT binary patch literal 4 LcmaFNB*Fjy1HJ(I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/311f8377ba6f579cb1462227fc384b915f256c04 b/fuzz/corpora/asn1/311f8377ba6f579cb1462227fc384b915f256c04 new file mode 100644 index 0000000000000000000000000000000000000000..e9e7c98a0c4be172e13424463564870bc89005ce GIT binary patch literal 148 zcmXqLkZ)jO{K!(lut359%4S#~A;Tof!2kb~aw8M3awD%|BNOj`1_lNO?M4=@R^}8& z1_lNuQ6?rPQIH@50|O&3mTF}78sjb4y%*4S6F~ySs E09DTuga7~l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/312c4f6f01067ce4b1cf877693a82880ed3cffb7 b/fuzz/corpora/asn1/312c4f6f01067ce4b1cf877693a82880ed3cffb7 new file mode 100644 index 0000000000000000000000000000000000000000..5be24ef6db68f3dc0bebcefd974181eedb31d471 GIT binary patch literal 707 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXI1_WR<2xgH%lm3Uq|HmS;g_Wz7hh_8X zuZ~7x0WKT1U*CUYmpZqlvvTPFEzF_}dkan6XI?%2r`&bx{KY$0_h(J%KFVUrvYn4- zZ}yh`^+v)Ic6u=%yc~8&P|3uo;hJEKtm0ntFt zSQ(;08c&-3|Ifm}z#t3{97YBPg9bL1R)Z!61_owE1`yX^C&N;GT{weq#%T(JODerEHwZC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3159f4130d588910029baca55fd3100a96e041ea b/fuzz/corpora/asn1/3159f4130d588910029baca55fd3100a96e041ea new file mode 100644 index 0000000000000000000000000000000000000000..9598ff8c06d00fce570519ec393dfaf984fe61f9 GIT binary patch literal 21 ccmXqLU}BuZ!pOOxfsIwWk%d8=fq{Vm04@{*Pyhe` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/315a08c689814a50892ccf14e03bdd233d5ab779 b/fuzz/corpora/asn1/315a08c689814a50892ccf14e03bdd233d5ab779 new file mode 100644 index 0000000000000000000000000000000000000000..146c23ffb57e36b711a41056037a1eae728696bd GIT binary patch literal 8597 zcmeI1u?oU45QhItYD7dRPMyTLT@I(xNt}EZpCStOwfX=;U#EkE(sb$|NU50Nzd~u2 z{-poqyGyFxt@HX=cNosCUU-Zvd>IAL^G9b|mo_B&yN-fvFOgFpHl`3?GUTG1yHn;#qq1f?muE zb7mAXiW&8(RbvOj4rH#jnWQCYNm`P2^1hn@AwUR_SOD^*7twez_X#ISOVX0Gv5=Ol ao22a{-alfj7pxbo7pxa#R9pV-%=`^qUzR@r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/31a05a612378bef25602920b419c819c1005731e b/fuzz/corpora/asn1/31a05a612378bef25602920b419c819c1005731e new file mode 100644 index 0000000000000000000000000000000000000000..02252ec6632912d135bffeece505631648702630 GIT binary patch literal 7 OcmZQ$)ox^A5C8xJMgYtJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/31cf20cfa7f09349c38b1b80cc1d27157453cd5a b/fuzz/corpora/asn1/31cf20cfa7f09349c38b1b80cc1d27157453cd5a new file mode 100644 index 0000000000000000000000000000000000000000..c0fb3e7ee3f07818881eb15ffd8bb99d938395f5 GIT binary patch literal 6097 zcmeHLK@Ng25Zo40BMFHI6EFG!y{rfS;0O4Guh?FE2ma5ySJN6uh*m+iAv9Z#v<;n| znH`E`miz1Z`Y6>x*My`M9RbN`M1UKie~dbS0syqIQRt>2nXKAv^8%^1nFa9g{cww` z%Ua(NAoHtU^X>Od^q@^v9ACn+NdS|4&~XBrOohoQPKjrYNhI2{VA4;3tpbJj&da*4 zo5029N)iVD%(g7To{BkR zn_@r+v&KZiU^hLbSmQ{%pFqYjtJAL)@%N$+5}dW8q{B9e8*cnc3T!Be5Ylf&5;u~s Yap2M%^X4z^y@{j0yDzZ4y|1mNC!`)5Gynhq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/31cf878bc7b25d566763e35c9f7bccefdf05786f b/fuzz/corpora/asn1/31cf878bc7b25d566763e35c9f7bccefdf05786f new file mode 100644 index 0000000000000000000000000000000000000000..03fca9935a46dde0d8d2f988cb8e70d51be46bb9 GIT binary patch literal 259 zcmX|+Ee^s!5QS%V%aRt#Pe_4;G(jOy-%1n-LEs3Y2FFd-&~w0za2x@H$CBMrX3Wet z@4aO3HeJ_;`je}!zInV>-U;4n5V?Co=YNgrT!oA4ky=wFOfsk!^}dbLAu~BV_1yW-RLGQ#bO$|`RII*86bPeb1AxMxcDfc?*#yZ Cott+6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/32196d0f22fcc6cfbe5d40e5f9f9e600ff0855eb b/fuzz/corpora/asn1/32196d0f22fcc6cfbe5d40e5f9f9e600ff0855eb new file mode 100644 index 0000000000000000000000000000000000000000..e54ac30826bed8b403a7723840f1f27c6ba26c21 GIT binary patch literal 281 zcmXqLU}92ZFlf+eU}HMi#Lm{>#Kgd0!@vOJXYTzA;$w)Ts)MPA(d;mNaC3-MkERaO pJs`I+FfhO^z^dVoHNs-B1|$!`4M1^G4?7!!jW!!28`yLZ000O3HmCpq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/321f083beb2b7b058012021332799648eba6d3ff b/fuzz/corpora/asn1/321f083beb2b7b058012021332799648eba6d3ff new file mode 100644 index 0000000000000000000000000000000000000000..6571780f9aecc65e1ffd706e920906616f9efae4 GIT binary patch literal 65 zcmXqLFlaDnU}I!pU@%}1X8>`S7$FRHHs;W8vMdZ>hKwu=0}L26ura+cU|?Vd=>h;& CMF`&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/323879f60bf9cc1b6c7b5f60140a66c267cc729a b/fuzz/corpora/asn1/323879f60bf9cc1b6c7b5f60140a66c267cc729a new file mode 100644 index 0000000000000000000000000000000000000000..e8b6f21610e44ff349b41628d86aa3cae095dd34 GIT binary patch literal 172 zcmXqLU}CbDHfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}>l5roJw>o6GTurVr%sQ=jC x&|qU@)8^6kotKeQprPT=4SJ0RVvmKc;SIXfZG_U|<-P9}S<8lRiM{eyV{1Qu=3L mATEz+!153$ZZqI&-~ctB!Q~NVY=h-P2!LzE4nSGfzyJV=DDc|= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3297e8e44366bc07e7943701d4c0a0380f5e8634 b/fuzz/corpora/asn1/3297e8e44366bc07e7943701d4c0a0380f5e8634 new file mode 100644 index 0000000000000000000000000000000000000000..193c0fefa2c9135be77a2cf428e50e5769f73a50 GIT binary patch literal 44 ScmXqLU}k1yU?75EU;qFkAOPtA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/32df5cd9133be7757e50e8a26168fdfe668fae83 b/fuzz/corpora/asn1/32df5cd9133be7757e50e8a26168fdfe668fae83 new file mode 100644 index 0000000000000000000000000000000000000000..017216e1a82ba811d43bb3daf2e9546105e0cd6a GIT binary patch literal 500 zcmds!KWYL|5XQgvc6n-HCs=K1<0^cQpl^e9bQ{ZUQU=n-69}V)q!m1XHeSO@Pq0M_ z58w@~7Q(&-*IXeC!|6g3yRSsa1eSkI*nogL?THUg>#g=>mYv9JGMVdyHBpY&S)QdnMw Ezm+{;Bme*a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/32eea0ff97439dbe0c49bf814b5e9aeae5000614 b/fuzz/corpora/asn1/32eea0ff97439dbe0c49bf814b5e9aeae5000614 new file mode 100644 index 0000000000000000000000000000000000000000..c6524ba5acabe0b4cc58430cf7610b7f5ebeaee3 GIT binary patch literal 59 ncmXqLFc4s4*J|@PXUoLM#;V=O!obC>#K6pe7yM;lU@!mx%tHkp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/331a3ee3d8d1c3eedb708f4c7cb4824091f41aba b/fuzz/corpora/asn1/331a3ee3d8d1c3eedb708f4c7cb4824091f41aba new file mode 100644 index 0000000000000000000000000000000000000000..8d6be835f2febd7ada5a70c4a17ee7d7d3830992 GIT binary patch literal 492 zcmdUsF$%&^5JYD-@sl47#0zLEzuH_vas=@RUO)tkB}k579U+IX%b`-Fl>}|Hv9NKf zfq}<^QFHT9m-Ud*=adenCUGN|V_~by~KW+BmeE8lTP;-Ri4(K?2cRwXPJpkc)nte~7L(U{n JA$}bLJOH_nK^Oo4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3329748472e6ff0230996b5ee1133611f39a4840 b/fuzz/corpora/asn1/3329748472e6ff0230996b5ee1133611f39a4840 new file mode 100644 index 0000000000000000000000000000000000000000..cb6d6fa8e401e2baef471733d62b8b00db8d4293 GIT binary patch literal 206 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO<$t{vgJHvB0Vd|2{|pA~Y>dWjOpMkn3}6w) zsUQ&}HYP>`s0agC1f<3SD#FSL(*+a3GzX#!*&MjZng%Qk3=9ShY>W{M4Eq_uZroAH Y@tKj6fq@My!TFh+0S1~FK&n9i06Z%rfdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3343a8fb2ce998741b492b4cb5075e9979a1046d b/fuzz/corpora/asn1/3343a8fb2ce998741b492b4cb5075e9979a1046d new file mode 100644 index 0000000000000000000000000000000000000000..bb4d187a847fe53c90a2baf4739678093dcee9ee GIT binary patch literal 590 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePEN*0CU|?tj$%6q%b7+i26oGYibxW>I_f_z=Cw( QLxTaF2o^LlH8L;&0KU9xS^xk5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/334f6bf322de2bf18d1829d9233bf3bd95256d8b b/fuzz/corpora/asn1/334f6bf322de2bf18d1829d9233bf3bd95256d8b new file mode 100644 index 0000000000000000000000000000000000000000..15ceaf8d78beb4fa1b177c0c86fc925076172892 GIT binary patch literal 56 gcmXqLV3SanFU>90D@6q?jSOrO>ZPUFBp4VN04`J$EC2ui literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3385866fb63a8df113a4bae496e1c8a95839f19f b/fuzz/corpora/asn1/3385866fb63a8df113a4bae496e1c8a95839f19f new file mode 100644 index 0000000000000000000000000000000000000000..7e49db337794bc3c672c091b94cdf6f46efadc94 GIT binary patch literal 224 zcmZ9GF$%&^5JYEptwk;2d6+qz7#bAn3K6YGKaYg)*l0c~%L_AsF^{gng&KL%cD&!+(#rvC~6w fX9vIpz#NnfI2lxv!Q$FTA-0797rZiXrP%PQSPCSasnX-qO`TltB~F1Z4wWfBW0Qd_RRbYy)?)8cf)f zU|s+sO%H%Ul!QU~2j=6|IUs^D?t(GSfC`v0)%D(DT&ymuwZgL5R)VS5zp63XyO8nN Tnwt}Y3gv{)=kax;7b=|{1N~$l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3423e1aec437a7412bc9795481af8cc57aff0833 b/fuzz/corpora/asn1/3423e1aec437a7412bc9795481af8cc57aff0833 new file mode 100644 index 0000000000000000000000000000000000000000..a105f6d55e648ffeba1de3511d467e7d27939d8b GIT binary patch literal 848 zcmd6kF%Ezr3`N_9U>v-N)8`f*s}tw&maGO6(bOO@VUVrx{%`w%`gx68Obbu4D^yqm zLA?M(pzP+geKw;+<{~C4s6iad2u`*Csqkk z#3rNp_|3c-PnzzmF}Jj{J9};#B3fS(tykY>b#Kh|ClQ&atE#H11GV&SH|CBgD@$U4 zp~Y%8#7mipCCYi!$~6?WH8#%@m1t*6e29V6aC{AV%{T|Core#yBxWpjhI(e3%)jbN zbSsBbYV3uHy*C|mj;c*fH64hbt$RXq7-r+7_qcfHXPq_8?mZzc;K2se2yg4pJ@z%| z*g*4MXb!1}iO6|8qt@j-*f<}ML!Q_VoHPzBPpoI()g$u#Hjh?4=g{n&OWK*$ThDEg z6BIS;9rL{4<1^qQ8ME#?6~_M=&M% Ml#F3pGvl}V4;*6~i~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/349e9765e7c30d32d53200f50762148e38073bd9 b/fuzz/corpora/asn1/349e9765e7c30d32d53200f50762148e38073bd9 new file mode 100644 index 0000000000000000000000000000000000000000..3fd619cd38879a215aa9b0727090db875abfaf1f GIT binary patch literal 33 RcmXqLSlYnW$bc1r0RV$g1`YrK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/34b53ed7e08a5f423943dd5c6a281582e1647975 b/fuzz/corpora/asn1/34b53ed7e08a5f423943dd5c6a281582e1647975 new file mode 100644 index 0000000000000000000000000000000000000000..b39c59d699e0952d8a2ae4a8deabe1371286793f GIT binary patch literal 8 PcmXqLP-$RbVqgFO2xb9S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/34dad8b56d1dae34e5269e5b2f99f89d54ec5b0f b/fuzz/corpora/asn1/34dad8b56d1dae34e5269e5b2f99f89d54ec5b0f new file mode 100644 index 0000000000000000000000000000000000000000..91ae09ded0042771a5074475fbd3f9882760bf17 GIT binary patch literal 140 zcmZ9Fu?>Sj6hr;*PXCl5qC`kUvk_+p}ru;E&%XU4j zrd?Dry+L^*fkXV+ZH56LT4PX@=k?W>k=hlM=WZwsZmRf1QzIBF9Jpcdz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/35008a66598c79770786d34f69c8b4059daede62 b/fuzz/corpora/asn1/35008a66598c79770786d34f69c8b4059daede62 new file mode 100644 index 0000000000000000000000000000000000000000..e6a12912a7e977e32d6e6840957c39e41f11948c GIT binary patch literal 148 zcmYMrF$%&!6h+bd|3n#!k5wQ=z{prlnrtRJa1mBAQ)C}gWP?_gkqiM}b>Q-*bW19q z=0)kI!<4SqmaACEY9ZS_t8D;dCN6Flu&TBP#o!C`_;60Wh-ZL!A_k}tm_0N*-Zcs_ NEbb{KoiG1e-4DV45?=rS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3505ad3537bd59ca3dbd41485d1c471cf14145d2 b/fuzz/corpora/asn1/3505ad3537bd59ca3dbd41485d1c471cf14145d2 new file mode 100644 index 0000000000000000000000000000000000000000..d000726a0bed2369d6428c1a58929b62638e564a GIT binary patch literal 688 WcmXqLkZCn7{`llmQhVwH9|g;tym)NC?w2kVyju1^~_6 BR#X50 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/357397855fc8a35f7807b5f636c1ff55d09e2d76 b/fuzz/corpora/asn1/357397855fc8a35f7807b5f636c1ff55d09e2d76 new file mode 100644 index 0000000000000000000000000000000000000000..23b0824bed8bead2a98708a8951e7ecbf822faec GIT binary patch literal 52 xcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4r*{y*z?24rx~Qj?L9fgzZI0RRQM2($nI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/358d5e99ecbe6617575b32cd3bb0d1d94e63076b b/fuzz/corpora/asn1/358d5e99ecbe6617575b32cd3bb0d1d94e63076b new file mode 100644 index 0000000000000000000000000000000000000000..32fa9f36f7e0478845490eb3cbaf7e38384f57f4 GIT binary patch literal 43 jcmXqL5ac#!U}G{cU}j`sV1RHmkvX9p%#6$o3=9kabwdPF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/35bde96e40857a3138a0e127177e1f2809e2cd2e b/fuzz/corpora/asn1/35bde96e40857a3138a0e127177e1f2809e2cd2e new file mode 100644 index 0000000000000000000000000000000000000000..f5b5849b60726433f82280a847b2278c995c42f8 GIT binary patch literal 253 lcmXqLSjGT>%b_%Bd|bK~Q)DX44a+dh2g%^F6Q+x3c>wK#QgQ$Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/35becf2c6b730577e0bd43e3c38212d0a175631d b/fuzz/corpora/asn1/35becf2c6b730577e0bd43e3c38212d0a175631d new file mode 100644 index 0000000000000000000000000000000000000000..0adf99ae53ec4e299df58514e343d3811672cfe8 GIT binary patch literal 6144 zcmeHLK?=e!5S(l!Dk2CT)GyS_yg)qq1fLTGd-Ns#!5{b?uhN!!vkB5ei9;^QA)7nKT>EKRot_7CoEhqML*W20_{o(Q zpgZyti0$R?fzB`+ED&H_3cqJG*wd`Ak!6%I*!9yyf4^umre9i%Tdj;Oj*)C64Wmp; zw&+izUzPT6E3G7wCXq}XQjJ!eel=QgjASEe7|BNZEA3!ft3PC>U`uP#+NdU@8Eb9i K{n4%+jK2Y9ePqi3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/360a267327aedfdb3e3b4f8aa96d92522bd21d41 b/fuzz/corpora/asn1/360a267327aedfdb3e3b4f8aa96d92522bd21d41 new file mode 100644 index 0000000000000000000000000000000000000000..93c4671c33ef1d2b688da2d1cbcfc01f07f9acf8 GIT binary patch literal 16 TcmXqLSlD0y#!DIu8W;=!Ixq%T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/364df9c7841b83867e4b7ec99e1dd66e186b7e90 b/fuzz/corpora/asn1/364df9c7841b83867e4b7ec99e1dd66e186b7e90 new file mode 100644 index 0000000000000000000000000000000000000000..f2d01b9778b93f7cd97ed640c53e23af56664177 GIT binary patch literal 167 zcmYL;yA8rX5JcbZ?HM^hvau`zB0?@&ci~PPIwib-N)T;eDnmm4$V@QvG|#gtZ?!$w zjqYX-t0&lv-8PKh@IRLfiFRBl&OIbft2hJgVKq`#q93wnmDFXgRq*J{6AI~#S12Ss P8!ho*;#@GiQ8@kpoiz?H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/367f1c5267baeef57a9608715658db3fb5952956 b/fuzz/corpora/asn1/367f1c5267baeef57a9608715658db3fb5952956 new file mode 100644 index 0000000000000000000000000000000000000000..af8884ed6d2741ddfefe67b73ebc672dfa77f604 GIT binary patch literal 1506 zcmeH{L25!V5Qe`=o@qsdfFN&Gx~*?BNLPY;7apJ|s2(E0@8HMriWp4Gd)biJ4_f~I4Pss?8&3yOwPCZ%Zd$Lig~sGe=7MqH;_ z6+GJ~Y#;c9cl0&Js6hwm)n;l$K!YnjbPZUc3AKF+gMR~f!2$-DHz7s3Tc!x#x^UKG z9~-O;%QE5qwsN0|x&*t6G2TeE`71A0n^|o~!awYBO|H)E-yEF9VQJs RSUfl<_LK6Q6X?^)+XMgH%_aZ< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/36b97a07569b075272078333856ab16318650420 b/fuzz/corpora/asn1/36b97a07569b075272078333856ab16318650420 new file mode 100644 index 0000000000000000000000000000000000000000..ca1a19d5380cb77f45ec97aa1160385c754508d9 GIT binary patch literal 7 OcmXqPU}FByzyJUTaRIgf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/36bbd62b21a2f8ccd44382906607759e493d084c b/fuzz/corpora/asn1/36bbd62b21a2f8ccd44382906607759e493d084c new file mode 100644 index 0000000000000000000000000000000000000000..f0e5588b0caecb4f093290a953ed712e88c0b206 GIT binary patch literal 1260 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Gct%b zG8%$Z8Z@vmhsw&Za2Yf-gCrRkI>97JT>~3aXqE`m8v_OgX0S$zjCoBRV}_+`Mm;sc alHZ7pa1u(PWd>}FRcwp~V8qA#{?h3fz!pwFeq8MF_oi{2t>NlDN7+7OnzkT+fh=w%4l0Xx9~h^*pb8bBRICJqRG8O^Q{2Ve(-6CBX= zE0P+?)lu`s^#{8HjRgllLz{bca!@$4*VuZ>X7%&(#7#J8B=zG}y|Ics(jnAgRzyOm4t587F OXbRFuq&_wV1ONb7Xe7M= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3740c72db1024d24f1be884a77a6cf3645589e56 b/fuzz/corpora/asn1/3740c72db1024d24f1be884a77a6cf3645589e56 new file mode 100644 index 0000000000000000000000000000000000000000..22920c8cb6c75d72b0d02be01ee6c39266bd92b9 GIT binary patch literal 120 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjo=bo+`2nNoUIqpRCcy@#w%NwOL>? E0BIiCM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 wHji_*OpI)-+Kns>0?cX*ObmnpBS?us0~<@LK@$T512c#ZvToEel7rCz0AqM8uK)l5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/377cc7cf7d8fec19478e57b2bf3ff48dcc2902fb b/fuzz/corpora/asn1/377cc7cf7d8fec19478e57b2bf3ff48dcc2902fb new file mode 100644 index 0000000000000000000000000000000000000000..6271ace0a638d363ba2de07e29d3da86fad2fc86 GIT binary patch literal 3006 zcmeH}%?g4*6ot>s$n-}L)WU6B+nkj|)ZT~bAud6_R&U^@hiMgsj*FTk6coZdE*wO; zN3ZwHN3pY1Md>Y>PZmmFAS@28Ns84Q0}zx@?LtMj=F*O$G|3KH*>SNjn3@;?K{U~^ zyqRKyGfx1F0+2iStk19YS7r+%LcTuuskL{hZ3kD+x>NpA0AhD~S0e|l^x*z*ay}Z> z|HmHeyO@LC_ki*?!cOHJRBHGS(d-)xSx_U5TF&Dk3w$c5(}QnW(A}PRNMVw!CYSU+ Xj|VRK0XCEhI<3KmK5G}OTR`#?=1GJu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/37a48df4fbc82bf51782b23570302642a0a86537 b/fuzz/corpora/asn1/37a48df4fbc82bf51782b23570302642a0a86537 new file mode 100644 index 0000000000000000000000000000000000000000..e845f707f33747282418aff159ed934114b10a78 GIT binary patch literal 4518 zcmeHLF$w}f44mZ7l|=*vJ1wlY%KgE@2ly9DQ{6lCCH_iFMa4o3MckmvW$Q46$;@na zMZ+Mq%l0^=I3nIdMVV5gyA>0*tdL$H2xK91nTa+4c%pbXk#IQGxK)hr6--s~#rE_ec&gl?cVYv%#j1n-y>f?xX)UM|OtApfci}M%Igw%{=F!xQqguoh jprq$Asv1Vc3W%!i!eiKI5+tW(h9^LWbrJ-n76t|YR6oYb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/37c4e41ceec5690a27c7ca7ce26ca767c1155405 b/fuzz/corpora/asn1/37c4e41ceec5690a27c7ca7ce26ca767c1155405 new file mode 100644 index 0000000000000000000000000000000000000000..cfc3f42c41e82a2d89c5eb24f3c92599b924bfba GIT binary patch literal 43 ocmXqLFc4s4*J|@PXUoLM#;V=O!XVBp%)rbL$N&K%P?~`O0FHVDQ~&?~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/37d5f57f8844183619d665f2b7915883e48caf60 b/fuzz/corpora/asn1/37d5f57f8844183619d665f2b7915883e48caf60 new file mode 100644 index 0000000000000000000000000000000000000000..cea555854ccac44239cdac993c08fb06bd08a604 GIT binary patch literal 5110 zcmeHLK?=e!5S&dVqTo&FML(dI?IQ|)pr7y+D?-6v===2Et0WHyNVgQr5XdE)%`P*u zgi(u|Q-A4)ovg#t)Ph(8wHQ=^muX&6&JX~KT2SAlNs(%?>W+uiR_&e+fk)m`oW;;x z_u->Jl`oD;^Y%%z$ZDLLa!Ny_CKtmZkz!N-!W$=~n1+DQ_@f~GNI%lg_m@shQB%|u oHC1*6S~pjK^Jd0*<7w}dfpl?@%1`{_XQc@@ozvx4XVG{20`ZCvlK=n! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/37d6caf49e8a5b825bb7aa0f91d5fdbbebf13684 b/fuzz/corpora/asn1/37d6caf49e8a5b825bb7aa0f91d5fdbbebf13684 new file mode 100644 index 0000000000000000000000000000000000000000..5ccc684abbd337575b469f6095c73d1f8443a834 GIT binary patch literal 26 hcmXqzFc4;A*J|@PXTieE#-Yu|$jZvjz|PFb001@Q0{Q>| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/385b8e83afbaba4a7c33df4c686b9a6aa031d593 b/fuzz/corpora/asn1/385b8e83afbaba4a7c33df4c686b9a6aa031d593 new file mode 100644 index 0000000000000000000000000000000000000000..7fbc9a7fd2bab7283723beb7cf54870b622fb134 GIT binary patch literal 1420 zcmd6nO$x#=5QX0)H7X($+_)0_0mW{nf-aQqTzCYJ69sz?7kUnF(95_GSCvGps8JAX zkq}7Wg?zkuGpto@7%$>eovJ>G12o$u1T$+T0tvIhVBMr?lh~e@?5pxHUL=tqRSH%f zx^fN)09F-N%!^TYd{phavIW^UGVFnHlBOwdxp7mq31F?f4X*)6g1PdKVEAmmA^(Ql z%V7KrM!R5sg!ACw$l>6tHx_4LeJ;YANQoe!k}c;Om}}8067~55dZ)H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3886ecc8c2ed78f30576dae9a464e1ce888938da b/fuzz/corpora/asn1/3886ecc8c2ed78f30576dae9a464e1ce888938da new file mode 100644 index 0000000000000000000000000000000000000000..cee4965ef8507ea78e045a10832febcb534478a3 GIT binary patch literal 4568 zcmeHLOA5j;5PeB%s)$f<LakIoL`bdz32Y7i-Xf@40kCh4qB3_#FL)M}zw%sIAUoNmr*t!zJ^7-h@?!3;!h zbR-Cs`z#l0w#~dZ}9OyZ+VRppe!R(!K%I hvQ7MGX^B2i7b->Nu4vSQJ}5HJnoRLpC>5GHqbnq^4=Dfu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/388e37cb1da6282ec2c5372d5c1a218e95463458 b/fuzz/corpora/asn1/388e37cb1da6282ec2c5372d5c1a218e95463458 new file mode 100644 index 0000000000000000000000000000000000000000..bb63a56e01c953c06c302b1fc51c9a16cb296e93 GIT binary patch literal 1885 zcmeH{yGjHx6oyYOMrL$YWmpwtz)HmGih1Rp^J8!J1J zWSp_^g6MjKJ!z7Y{~Y-8A3|{1#_(WxU#Mw)8VFhiF9fGS`#nw}==eG4W}-l8@1;>fEl60hYkInVR>H&0-Dq_A E2traxasU7T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/39035eb51e6ff44ba6afe0dcd679b8628b5429c7 b/fuzz/corpora/asn1/39035eb51e6ff44ba6afe0dcd679b8628b5429c7 new file mode 100644 index 0000000000000000000000000000000000000000..910702ea17dd5c4d83f13d89ff0edf9e15eb70ab GIT binary patch literal 80 zcmXqLU}92ZFlaDnU}IXwz`(%5+vai3f`y4Oj`jb4Rt5$JCPA1AhA00G7{nVH4Hke@ XGl$B`v2YnMG&C|bHZU+SGC%+T$Z-&0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/395121177c23779793b9d1c1b1629570a840646b b/fuzz/corpora/asn1/395121177c23779793b9d1c1b1629570a840646b new file mode 100644 index 0000000000000000000000000000000000000000..ae741fbeb31d2172e75fb9b3cea0cf9183de27e9 GIT binary patch literal 1361 zcmXqPFlb<7tT1dyU@!nf2|+_kLt{fjLqj7&LqlCdBO?PWLaYSU8GyAW5LAcL3KUx* zrV($e0afh z2822o3*B_GO=M$&+lpZ(Ru`}}L?HR<1v^{uJq$h@$d|ayCDHd#^>FjRp@Q9QIHGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZg#| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3a276f4374ac887ef501961ee4132c8aeb336438 b/fuzz/corpora/asn1/3a276f4374ac887ef501961ee4132c8aeb336438 new file mode 100644 index 0000000000000000000000000000000000000000..b57dbaad9472c98d319e094adae3fe7fe2f74a60 GIT binary patch literal 3840 zcmeHKv2MaJ5Ix($kQ4(|1XMziIx#Rkvmu67Rfi5N9kO)e5BLO&A>UEHj-`87WSf9s zf)1g8pBLZxF4F1F@5L}O9u*(OuVQunZD2SvnqVXch*k!6sa*`K)d+L_fLMw=LdpT% zhVq7lgYF{rj;412&v-$Zq+L>m!S16m>$PlTrwm75S!3!l;Y?s$o_^sSZ#<^;*3nl0 zCi~MN5-C2jED{Ne@FYc^b)(0mVdx09${dFOfJiVRx>&IY#ae{UhA|Fzc8>}OYJ3_S z-xWb!q4X>qfBr>h@2az*ScjmqXX)&#XXFal_{4wX+Zf{@J@(b34_-aD(b@kz#!G*h IXGCPT8+bcSDgXcg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3a3e6e388c2c423df62a9114d2b2e7ca865f029c b/fuzz/corpora/asn1/3a3e6e388c2c423df62a9114d2b2e7ca865f029c new file mode 100644 index 0000000000000000000000000000000000000000..698a61ed14eca6a368d61f257cbca96663b251b4 GIT binary patch literal 4 LcmXqH(qaGr0U`ii literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3a48f8d09fb0dcb3d17283abd68a36f68476516e b/fuzz/corpora/asn1/3a48f8d09fb0dcb3d17283abd68a36f68476516e new file mode 100644 index 0000000000000000000000000000000000000000..8ed899e06dac0765e42517449ab1d7ddd135a15e GIT binary patch literal 2084 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU2^mKtu+VZ_vQT(rVDe zz`(%F$iM*7O&$9gA@(C2fB-%U17|<~fcPI2vIs!i@Hd6TKfdq>Ic0$2e>D6DHvf%= jKS|+FSs4t?gNU4u0JP16R4oHW!+?1J!XOZoYzzzlprG)d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3a770918ce293110aac21d012a14f56af987f6e5 b/fuzz/corpora/asn1/3a770918ce293110aac21d012a14f56af987f6e5 new file mode 100644 index 0000000000000000000000000000000000000000..55f2506becf13d19d32546c61c7a104465dfb3c0 GIT binary patch literal 29 kcmXqLU}BuZ!pWe`#>mRb&cMB(fsIwWk%d8#fq{Vm06y~rrvLx| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3a7ea04c563095ec272bddba9aea0c64333bb133 b/fuzz/corpora/asn1/3a7ea04c563095ec272bddba9aea0c64333bb133 new file mode 100644 index 0000000000000000000000000000000000000000..cbe88703aaf0294da22addf0498ff74be51c1d6b GIT binary patch literal 118 zcmXpgVPa%tQ8-}L$tttrUF&xDhl`F?KlfQsU0Cx`F)*R?YjI%z((ld-*x6XM8(A2X j7rHPzF|Z!Exz+pL7LQvw3I-_pQOse00yMK23`|)7&&e&2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ad476ae6fdbaedf379337aab1b266621eacf89f b/fuzz/corpora/asn1/3ad476ae6fdbaedf379337aab1b266621eacf89f new file mode 100644 index 0000000000000000000000000000000000000000..90e39fccc8d8a99d10e8952afef46e1f194bbc59 GIT binary patch literal 21 WcmXqLU}9uqVqgMcMn*8fzyJUb5dg>l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3af8591b99c94f6f628d91f8e465740e676f6b18 b/fuzz/corpora/asn1/3af8591b99c94f6f628d91f8e465740e676f6b18 new file mode 100644 index 0000000000000000000000000000000000000000..7fbbdbb6989c3414250a93bcd1fdb28ddd6c3922 GIT binary patch literal 30 icmXqLU}IEY&>$gbU}9ikU}RunU|?XN4Wbwr7#ILzkOgS~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3b27246d566a971871379a1272b58a26506e7f02 b/fuzz/corpora/asn1/3b27246d566a971871379a1272b58a26506e7f02 new file mode 100644 index 0000000000000000000000000000000000000000..90bb9262c013ef81b3d8a07747b0ff2195fbcbae GIT binary patch literal 644 zcmbVJO9}!p41EbWD0LQI!G#M^Xg$S%Ai`WIs~o|r4(`NETUz{3%_{$wm*>UH20^@Z zZm)w*J*}=x2f-2Hj1QJ8lZy5C5>#${44z$Fi>& z>Fj?oT6i>LHsJqTp8cK6Nthyv%Mxh=#u^fei|VNGcUk9 IvvCak01!Tq&;S4c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3b2dcb5dad7ea730b5be2ce5dddc59be1e4aaee0 b/fuzz/corpora/asn1/3b2dcb5dad7ea730b5be2ce5dddc59be1e4aaee0 new file mode 100644 index 0000000000000000000000000000000000000000..35213ba8c73b1d80ea07b20252b75110fef5406d GIT binary patch literal 60 ucmXqLU}92ZFlf+eU|@>;%g)xo$i%>)$H1V|zy{&xF)=VOBJl+n-~a$$&I$Yg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3b822b481fdce8bf311fe51b36067b795bb3aab2 b/fuzz/corpora/asn1/3b822b481fdce8bf311fe51b36067b795bb3aab2 new file mode 100644 index 0000000000000000000000000000000000000000..99b0c31cbe29beb5ed04ba6a9f9faa957f6bdb22 GIT binary patch literal 41 ocmXqLFc4s4*J|@PXUoLM#+t6p$im1h$iU111}qE=j1U$B0DKSw!vFvP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3b95bfea3486f7358207776f032e3cba4c78753c b/fuzz/corpora/asn1/3b95bfea3486f7358207776f032e3cba4c78753c new file mode 100644 index 0000000000000000000000000000000000000000..9f03d21c2006d953f8e2c2e0e913ae31465dfa32 GIT binary patch literal 5 McmaFC{HB2c00>fq{Xk6JkZMm|HL-aUa9LIe?RJ7G`!NmLjJu2q8+Lltv=ylE(4> z#csnAb;s-3`qVRR+6W67nSv!EW?(Dqp2$pK05D?1x{GzG<(AwG`B2UU3mqA-DLvbL z6`*pyvR|wrS71WyV~efU^{v&Pc!x{9Y|v@$roPopIsa* Ov%%-#ifFJOuIK`eSJ+bk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3be357290504021859fcb4448275e1bc748547e5 b/fuzz/corpora/asn1/3be357290504021859fcb4448275e1bc748547e5 new file mode 100644 index 0000000000000000000000000000000000000000..3723230a33e3a5d62115a94db36373892277b916 GIT binary patch literal 27 gcmXqLFlZ1IHfUgD6y@RK=KQ{DRRah!FfcFx0BIr!5dZ)H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3be7128d8b9707c6192012c1fd130d76517b44e1 b/fuzz/corpora/asn1/3be7128d8b9707c6192012c1fd130d76517b44e1 new file mode 100644 index 0000000000000000000000000000000000000000..cdfecc26abf94680db6519b2691d9c864ece7645 GIT binary patch literal 98 zcmXqPFlb<7tT1dyU@%~i5Hz$jG&VFeG&C|aG}JXTGBUs-#7a<|0az;o7#IKmo{te8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3bfd4bd79255dc34670bbca7fc2f5894e865a123 b/fuzz/corpora/asn1/3bfd4bd79255dc34670bbca7fc2f5894e865a123 new file mode 100644 index 0000000000000000000000000000000000000000..fe18240b2c8bf20b9f9c9cb94b9e3772a4660b5a GIT binary patch literal 41 kcmXqLFc4s4*J|@PXUoLM#+t6p$im1h$iU3N;J|0EWik7A^u(5wyd zeT_f8rXylnP>f{lP~G)4`*sg8cK2HEqCsxFHuv)|+-@`~@8*O}|K9uhIo>+wWtE7- u7-zuA$OVRw+s4z$c1$I5!XP&Awm%jHQ6uy}$@6eKLz{bca!@$6RgTaGaj*nO=FaQ9D;S9h4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ccc02ce0bcaf1384855ace72a7b1e75a149b44d b/fuzz/corpora/asn1/3ccc02ce0bcaf1384855ace72a7b1e75a149b44d new file mode 100644 index 0000000000000000000000000000000000000000..4b206df1b48d8f83540bf95b5bb1777cd1249ccc GIT binary patch literal 15 WcmXqLVB-8=|NlP&14F}Y1_l5x&;^qK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3cd7d8e40f646f2fe3b5aa50ffa188f5a1f95d2c b/fuzz/corpora/asn1/3cd7d8e40f646f2fe3b5aa50ffa188f5a1f95d2c new file mode 100644 index 0000000000000000000000000000000000000000..3d75937ae7e13c1e85ecd204cf9ba703e3b900ed GIT binary patch literal 2639 zcmeHJ!AiqG5S`skBNj>i;YS`xip}13$ojP=p@*0YT8S zM`b5zcG@Jh;zgvdP@35{voq7#mxT?N_XZb(kBVB-Lkp{wZ4+#$0is(A{)B3u6cK?M z3XTP53fRQIXbk7sgVk>!GQ8do-qANBt$<3pmnxMAXYF+~LemSdQln3#*apyUVKZK; z18iZqCHK{+060xO`0*%xMBj99scYU4gK2GV-9P?d*IX_yIsRg#CwerM%awF> zv0kMC$?*^y&YT0!8y?~STkaU_1Wl}2cl5F-J3>7$*%NL0N>SFK0Am?RmBk56Mm{pE zx%H=DTY*HOGF#*)vJgBmD)C6o)Xo#`^e?n?A$W{@AzlccM1GG7UVQ&V@K~m(A=HX5 XVRJ}ms&C^vT1Ei@`r$Rtg#f+)LyNOO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3cda33c4903c82ea106347170e27dd3f68ee19c8 b/fuzz/corpora/asn1/3cda33c4903c82ea106347170e27dd3f68ee19c8 new file mode 100644 index 0000000000000000000000000000000000000000..58a90387fad29d7021eda315110c84b14a7f1d4f GIT binary patch literal 43 wcmXqLFc4s4*J|@PXUoLM#;V=O!XU;h%)rdRz`!8Dz@Q7F85kH&GcYg!0FEF8_5c6? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3cdcd21d22933467b05a3257aac72e49092ecb3b b/fuzz/corpora/asn1/3cdcd21d22933467b05a3257aac72e49092ecb3b new file mode 100644 index 0000000000000000000000000000000000000000..672708f545c41562702e83ff309433ff7da77ca6 GIT binary patch literal 35 hcmZ3|V9;RLV9>zEZU6@IG8{~z1_lgl1_lgJ0058B1%m(p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ce2191ffaa8baee35351674f55e67dbd4e0eb26 b/fuzz/corpora/asn1/3ce2191ffaa8baee35351674f55e67dbd4e0eb26 new file mode 100644 index 0000000000000000000000000000000000000000..09291566e34881aeb1c91b82b6c2818a2871c4ce GIT binary patch literal 4 LcmZ3)B+LK+0=NLU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3cfca2b16bd5b2c67dce1718c517dc6906a355f3 b/fuzz/corpora/asn1/3cfca2b16bd5b2c67dce1718c517dc6906a355f3 new file mode 100644 index 00000000..de32c7a7 --- /dev/null +++ b/fuzz/corpora/asn1/3cfca2b16bd5b2c67dce1718c517dc6906a355f3 @@ -0,0 +1 @@ +£€ÿÞÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/3d0342cc18d757db3ce0fa5cce15e1cc5e800a7d b/fuzz/corpora/asn1/3d0342cc18d757db3ce0fa5cce15e1cc5e800a7d new file mode 100644 index 0000000000000000000000000000000000000000..ab8c5cea2e036026ef79bededd9c56d5456708c6 GIT binary patch literal 318 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePG%+?ZFf3qTVt@jW=Flt=rZ)x*49s9%5cQ3W+Ds%GB1R2ExTs+W Nl1reTGHhUD1^~9II1T^+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3d13fe6aaa42fbe75a21c934ef7b314887f7487a b/fuzz/corpora/asn1/3d13fe6aaa42fbe75a21c934ef7b314887f7487a new file mode 100644 index 0000000000000000000000000000000000000000..4de9496914bb4543ed5eaddf20c0d5058c12aca4 GIT binary patch literal 94 ncmXqLSkSPbp^c%9VTqtYgCMs-0~?cp0T-h_0|Nv3LNEXTp(PJV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3d5fd43087505460ebccbb142000ec0ff11e1089 b/fuzz/corpora/asn1/3d5fd43087505460ebccbb142000ec0ff11e1089 new file mode 100644 index 00000000..e174ef39 --- /dev/null +++ b/fuzz/corpora/asn1/3d5fd43087505460ebccbb142000ec0ff11e1089 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1/3d640c74446105731bb6d77d0be623cec70c85a1 b/fuzz/corpora/asn1/3d640c74446105731bb6d77d0be623cec70c85a1 new file mode 100644 index 0000000000000000000000000000000000000000..c38f840aad6ef97a4c504bd972e4c3e077347be9 GIT binary patch literal 3705 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gsIX0|Njjd420pTI2jlW8rWD`4VoAj7?>Fu zKwJaTtzZI~{vQHVHiI}mAcBD*158rG3WP6AFnqyC9bX`dK%%8Xo0bk%jAlJpcM_~)Pn#3OdTOq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e1db2900b689a1153916d58071d6e3073f85fcd b/fuzz/corpora/asn1/3e1db2900b689a1153916d58071d6e3073f85fcd new file mode 100644 index 0000000000000000000000000000000000000000..e9a03a5779da0c1163879c232062e687a6d62afe GIT binary patch literal 1688 zcmcIkZ%kWN6o3C(XlrFyNYO#|hQhEDIOo1UeTAS5WVkGII)-sWAzj-+liHH@p@R?F z79lPMGLI0&ivwN!(D| z#Hc^lZbblzD5wzZc4ooxf9)y6qc@WAB-Buo5J(oBAjM7`ed%U0o)ZuhB1^6;IA&@o z;i%P9yr2*QE-4$YFyuWVUVY7OMFk`xp(d+D$&ANS9l{Gsn&b@It%wLjMh#R@GjPF_ z-uEw6?0kGA#fvIvs5-LMMKImrt-By6aWX+v6&19Mc&q`+IOF~+;{5Q3DOyC@2FNO- zdf)L+CVx%SI*Ak4$VjFqG)!5i+kalcxrhWrUZqWJplz#2(pnxqSzG)8g&_fnYQ;>o zE8RWV=4qQhOVb0DI8m0ATUF5N6~2{Mdj@EC5kN*w0x4U1On-giqluZ7^fYu4kh4~A zWAxm`W6O3c5<~(75OGaeOq7?uexm!li7m3C1QNI?RK7(=8E3R;1LZ~I_9TqB&`DHf zwJI4u^T5cfUVV2GCsR&IBWrPEv3ZDHgxD~hgS&;;AjJBk1^*s*lUD*wmw&oG(DBC1 z;?u8peX%&+Iq3sWrg3b94Jk(`+TG<7(?i@G4)t`e7z09e$`~rr*Np*pBqEZGArFdM zdi2zg#}{}OEHs}2LEt!3ImmQV%(4l=0TpBAWA_Y}uDVP(kYO&J-UwErQsoH;)|eh2 zXIZAa?8Qr3bo*mBgT{Wx`qMLWwF_G(N=F}ghS3jyb+)hL%a6^5*>{Kib4!UEm)rTW zE1p04v^g$txN__74eg1cy83OMr##>98#!{X`^gIp5T&1y-OR8I!vJGvfm%F7^Z3@1 z^#aQ6D_)0yS%K^3&~Cd3)18!`I$y3bx&O;LLCD?N|!%_5H$ZNB(mK zPgItUzVq34b?|m^P5jSu5A6E-$Jw4!3%h*x&svzBCx7|j^fx;e3lAPTHtlN9`*zc{ d1Lpdd_i&BV!HMOXit~?7rRWN1LitQ;{Rb-Orkel& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e470b916edf0b6f5f03b85592b19a084a67f4f2 b/fuzz/corpora/asn1/3e470b916edf0b6f5f03b85592b19a084a67f4f2 new file mode 100644 index 0000000000000000000000000000000000000000..900609b6ef86a671cae5bfe85d4956cdf80755d8 GIT binary patch literal 13 UcmWgOX6k6*WME)mWMnV^01L(eVE_OC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e4f268bb4cd015f29bb76c61ab1de738a8606c6 b/fuzz/corpora/asn1/3e4f268bb4cd015f29bb76c61ab1de738a8606c6 new file mode 100644 index 0000000000000000000000000000000000000000..0367f796b776872265a178683e7c9fc5e11016bd GIT binary patch literal 5889 zcmeHLK@Ng25ZoiJCRnCm5S*vRI49{3o<9fA@80-n&Ib}` zBtrGqk%-3bzl`p);!?%ZaM~OiKW&8LW8X}^e`x%EQGq8zAkV5XXMfcv#PX1s(HnM= BADI9E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e5e3c4da2c0d845b8d883384bdebd3ec8138152 b/fuzz/corpora/asn1/3e5e3c4da2c0d845b8d883384bdebd3ec8138152 new file mode 100644 index 0000000000000000000000000000000000000000..6ccc17bd5ce86bbc7cf1cb34762dcf12b23a7f27 GIT binary patch literal 2424 zcmeHJF%H5o4739Z6ok}2Fd)Gae!-WR@We;>1Pkh;7#KlC&0yoAOQkM|Y_ZPgJI76v zBrdn-!}+n|s^-v;Bng4*y<8;lI!WX@Or9quni5eP+!O|fXS#(UItT>O-<0|6-tucy z*P_TDIJYDov}N5)2n1!iuEwIzU9L`h<`BPN=q1rs&=eo|eJ^E+46t|T!A4xFC@?Ro);kBT|~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e7a624b38e2a57b544ea59e6d04e4803a204a51 b/fuzz/corpora/asn1/3e7a624b38e2a57b544ea59e6d04e4803a204a51 new file mode 100644 index 0000000000000000000000000000000000000000..7e29d7fb66e489ee1a6a4b126cc80846c19a9138 GIT binary patch literal 24 ccmXqLkPtLAG_*7X0V88WT|*-y0|o{I06V7yR{#J2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e847467baadcfce3de93e362ef11ef2534e4e10 b/fuzz/corpora/asn1/3e847467baadcfce3de93e362ef11ef2534e4e10 new file mode 100644 index 0000000000000000000000000000000000000000..7a8aadb8b5c252ccb94d0b9dca9d9ddd7683ced2 GIT binary patch literal 86 lcmXqLU}92ZFlf+eU}K8>!_L;YckkZ4TNoHf<0JGz001WS9=!kn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3e9c6d0568cf9ab2e0d7b9979767fd7a896ce0a3 b/fuzz/corpora/asn1/3e9c6d0568cf9ab2e0d7b9979767fd7a896ce0a3 new file mode 100644 index 0000000000000000000000000000000000000000..90d16384b6916b3dba68b9d9e30a3b91d0876a62 GIT binary patch literal 80 fcmXqLU}92ZFlf+eU|@>;%fNtz#wLbUEeHSr`{WW= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ea06f2bfab9a2b825b59e63eb88dccbb06ad993 b/fuzz/corpora/asn1/3ea06f2bfab9a2b825b59e63eb88dccbb06ad993 new file mode 100644 index 0000000000000000000000000000000000000000..6d93affc0a55b6ea0360ae36daac3981ca080f74 GIT binary patch literal 24416 zcmeI4!AiqG5Qb+rH6l`|c=4NPI@q6M1 z>G5bef1g>C9*q}0xlAr3>5Isd$emnIR;!iE-p-4Ez0RyLA}&jNkM2Q45+nJeYp%k| zK)%Xt`FLM^#ZXbP!j)F!wqnIrxQRs|E^ri%%7q;DN4+4^))!V1NMHidtld{7@sRio zgm4Fj8%G5?N)s1eTFuNs_wT))0`wGADBwatMK>I!V1R|mK{x33?^qRb)b#(~u_~z0WFTHzJ@WF>YAdK0)C=lGwO)XW z-QnV;+#jV-yA`UQf{Jc9O2G;R72OCoj@rZ4-bgf8+0?Es17JLhlZdB^_iBE6xhPxC>)gw$89)n!y(fxX>|(&ZH6{O zn`>zEMnHG%fC4snP;4;%>#FJZYc5z(2eqOU!mXepJ}xTPzhFfmE{H{-qgYXaj?!FF zG-5PjG-5PjO>c)InFl6w92Mv&&8p`m`j|!GER2GRZo~pB0-@(~6l@SS2pg=jL2v;s vqTqs()U+gdiB8pg)$HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENEnEWMBZxg8@i$XqE`m8v_OgX0R@Z`bKIPLJczp#333q4iQsq GQ3C+#rBufN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3eab16f697c5e0456056ec03d882b838c4724f31 b/fuzz/corpora/asn1/3eab16f697c5e0456056ec03d882b838c4724f31 new file mode 100644 index 0000000000000000000000000000000000000000..16c3f0ab97787e4922a78f4a514f7179a0a8043a GIT binary patch literal 20 UcmXqLSisK4sI`D;0|T4^05(nq1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ebdcbf3757dfbff469f390ffdfa7b982ed5f6e0 b/fuzz/corpora/asn1/3ebdcbf3757dfbff469f390ffdfa7b982ed5f6e0 new file mode 100644 index 0000000000000000000000000000000000000000..d7ec79153ab84747884b3373a467c3d3f3a9c9e3 GIT binary patch literal 54 zcmV-60LlL_fFFPY0RaL66axeTz%K+KpA+2VpQVQ7Pe!}f5}x;QuAOjP3bVOz5WWWq MrEPiB1ONa4|L%+wBme*a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ebfbf255de6265b4d8f416baa03fffebef348a9 b/fuzz/corpora/asn1/3ebfbf255de6265b4d8f416baa03fffebef348a9 new file mode 100644 index 0000000000000000000000000000000000000000..477b7ba4decf0b67d2c72ca765279193694c4301 GIT binary patch literal 1197 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7f)#n=7+x8iRd0}OyPyJm?ny)j^5U_7l0yz#E6zC#OnYek;GUSKw>NmOdQ$^4FK>Z2@wDQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ed53739885f311d21b2100f6bce6b631eab88af b/fuzz/corpora/asn1/3ed53739885f311d21b2100f6bce6b631eab88af new file mode 100644 index 0000000000000000000000000000000000000000..c6899fccf7ff3deaef0de1277b3e10fbaabbf1ce GIT binary patch literal 100 zcmXAhu?>JQ5Ci>5^oW9*0Y7C3=-1e;m8`G?oP)6dQ5y*i)AW{&Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3f0497384a4fa3ac5c74079b596c6db3edc9149a b/fuzz/corpora/asn1/3f0497384a4fa3ac5c74079b596c6db3edc9149a new file mode 100644 index 0000000000000000000000000000000000000000..6f1cd62daf43b7c44581f9e19d920676ed847777 GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4r*{yqqO-O2!>Zv20+v*`wdlluRE3=9ka D%0v~V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3f0daeed759349f8690c052c38e28cba04f5bb2f b/fuzz/corpora/asn1/3f0daeed759349f8690c052c38e28cba04f5bb2f new file mode 100644 index 00000000..99fbf0f6 --- /dev/null +++ b/fuzz/corpora/asn1/3f0daeed759349f8690c052c38e28cba04f5bb2f @@ -0,0 +1 @@ +¤ \ No newline at end of file diff --git a/fuzz/corpora/asn1/3f1812478073eb2ab38d3f350231bcd1353d6603 b/fuzz/corpora/asn1/3f1812478073eb2ab38d3f350231bcd1353d6603 new file mode 100644 index 0000000000000000000000000000000000000000..1947ffa3e7aa163770b0f42b97a42cc94f16955c GIT binary patch literal 80 kcmXqLFlgXnfIwviE`}}!0}U9Ti-7?w10fNjxL6|9|%H{|rn&86*sXS!B?p{~_`JvB+#; zH87xTf(VTS~jOpF??3C74O?ln(V`oX%jQF cQ(R^mwKmo_b0OA#R+W-In literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3f92258eddb56284aa528ee577a15552c5665052 b/fuzz/corpora/asn1/3f92258eddb56284aa528ee577a15552c5665052 new file mode 100644 index 0000000000000000000000000000000000000000..e2787c6c9b454e10992af7bb507c6de02e0f4410 GIT binary patch literal 63 wcmXqLU}92ZFlf+eU|@>;%g(lU@7}!*HVh0p4Qyb3L(|HY@86^HK{}uS0BVpC>Hq)$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3f9acfc306ef4e3476c07b5824992d5cb986ef39 b/fuzz/corpora/asn1/3f9acfc306ef4e3476c07b5824992d5cb986ef39 new file mode 100644 index 0000000000000000000000000000000000000000..39be05c3360af563101da64c8fccc47e47ecb00f GIT binary patch literal 302 zcmd6iF$%&^5JYGHkNXi30ye2^g`^pTSP1qhJc!3w1#=V6;SIb_%9V}c8D!uwQ_T!b zSM4~A(^{6bq$iBCQX*-Zb{QaOjT{@{?Dwp-wBztPCDBE9tx)n71ppp_Ljb@zaQS%9 fw7T;KAPXY$SJC}Zg~r@?!S9#eCwCe*y}RQLikL1i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3fde4e6a369556f8cec9b6910c33797ea23d7976 b/fuzz/corpora/asn1/3fde4e6a369556f8cec9b6910c33797ea23d7976 new file mode 100644 index 0000000000000000000000000000000000000000..7ed6cadee4872f1b8c64372ff10f440043ff5e4f GIT binary patch literal 400 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU0AfWb ASO5S3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ff04a4f80c79c824e81f27408aea71518f678b3 b/fuzz/corpora/asn1/3ff04a4f80c79c824e81f27408aea71518f678b3 new file mode 100644 index 0000000000000000000000000000000000000000..0bae0839517ce9deda33acf102c65f99e5cf5e57 GIT binary patch literal 24 acmXqLU}6A4g9c_cCIvMng9auB5C8xpngVP9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ff351569716af04e646381a56802df11ad83be4 b/fuzz/corpora/asn1/3ff351569716af04e646381a56802df11ad83be4 new file mode 100644 index 0000000000000000000000000000000000000000..a88079dae1874fce1cf24ac3737ce4169c202728 GIT binary patch literal 4800 zcmeHKy-EZz7@Q=MI}yR3W=l&sL8cZg?5^-Z?lFSkzLu4(a4%wGVJlzuBHj|+Y}~LY znJqS{hM9cdu3v7ovP-`( zI5n3r*nwMM5jFw$ve*C@@~5*0k9+`Nl;1MK$PtVTG+$7L(RK_(gfffqI?+{um<71z z(;Lr-%{W)5WqeLJ$5h7tIlhYAELVqWl{+*0j2>BxSsD#+R!n0knCUbQx!Tz$1s!RR zELW2mBkd@RdiuuRBjhN-K?#F=0Io6bu zDKOPl!Emnr%~>u;OT8b5-yNy0?lIO`uD<5-DhDX|(y84c{{H_Npn%5NUIBZ#`crp& E07DimiU0rr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/3ff8705c76c9bed9945839da8f6d7af4eb62a63a b/fuzz/corpora/asn1/3ff8705c76c9bed9945839da8f6d7af4eb62a63a new file mode 100644 index 0000000000000000000000000000000000000000..b4f63923c1ac96fb9369bd175ae9eafac63a2c52 GIT binary patch literal 241 PcmXqLFlZ2D7(oyK_Kpci literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/413637d6b8315491111dea4c11c0e6a22f01e182 b/fuzz/corpora/asn1/413637d6b8315491111dea4c11c0e6a22f01e182 new file mode 100644 index 0000000000000000000000000000000000000000..0fd56e0f7fd42da3c86972eca84c50ed18bbd468 GIT binary patch literal 553 scmXqLkZ)jPtT1d~V*by-z{F&L6)+AM;G)oG77F!`M8E(6J}7<%03;I$`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4170c6bf0d0ffd45e35f9fa370f0645cf8b0af8e b/fuzz/corpora/asn1/4170c6bf0d0ffd45e35f9fa370f0645cf8b0af8e new file mode 100644 index 0000000000000000000000000000000000000000..80247efedf33bb16c134cbe0e24c7bf756ccad6c GIT binary patch literal 513 zcmdszO$x$542552B>o`?ZhD5gd9_xm;JynF;xR(Oxt2HZI&NjEodMUb{IYo=ftMGW zF3Zq`=St>lad#Mpa*m{_+j@YY6>=(sZ_SNP%g{Z}PINX1kA*)#FhV0i2nc}8gTy7O o>!+pZVh1@7_0U)zrKC*j71i;wv}t0(LDujsO4v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/41a7bc878381d7ec34bdc1b8519d60d3aee2acbe b/fuzz/corpora/asn1/41a7bc878381d7ec34bdc1b8519d60d3aee2acbe new file mode 100644 index 0000000000000000000000000000000000000000..c46defef480c61d5f109acf48a6b69e84bca94ec GIT binary patch literal 155 zcmXqLU}Mx<(4gDE#@Jv0BTxj`7(q%n82TAF7&sUh7#1|hH?T1@FhE2Y82Z8TAaUIW XHU@}lu%WpiK1>~9oiLRQ3{dL&MB-61^e1_G$nN`&qjs;Mt4QLaP7PHRHFv^n4mdT9rL9mcD#6cZ!RRZzE zSB0N@bSQVV#yjZ|fDnN9pV%5 b9edlOvir4A_NUbJsI0-ymQ@m6wNB#;VElYx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/41ce134ae926b73205017000283f8123877ea0c4 b/fuzz/corpora/asn1/41ce134ae926b73205017000283f8123877ea0c4 new file mode 100644 index 0000000000000000000000000000000000000000..f835293ffd12c82e16f6492c905c152b5b508488 GIT binary patch literal 17 VcmXqL5ac#!U}G|1;Avz40RS4R0zv=) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/41ebc6aecef491b8721192164f90d0e7b407ee08 b/fuzz/corpora/asn1/41ebc6aecef491b8721192164f90d0e7b407ee08 new file mode 100644 index 0000000000000000000000000000000000000000..3c5ada1b2e8a1a10b10a3adcd00ff45056969eac GIT binary patch literal 792 zcmchTF%Ezr3`N_9U>v-N)8`f*>rb4+Te2ERMB^YaX=E#Xeb5iadCglci%zx^G-VPn z8X%I|1wdF5Q%LWCv6dkK6|8d)OmPkj!1mJE_Z8FE-*uZ8)|d4Xwyb}(Dg3u^kHuYh Iz0F9txu>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/420609fb56277d50a7370817b56d351e9b682573 b/fuzz/corpora/asn1/420609fb56277d50a7370817b56d351e9b682573 new file mode 100644 index 0000000000000000000000000000000000000000..5d4ceefd165417ef1354a32e450a3f3e2da3c656 GIT binary patch literal 10 RcmXqLFlb<7WDsCr000Za0eAoa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4226dce80de548950f0319282a59fb9f7bec20f6 b/fuzz/corpora/asn1/4226dce80de548950f0319282a59fb9f7bec20f6 new file mode 100644 index 0000000000000000000000000000000000000000..f9fb42996888547a4e75ee10568baed67751d320 GIT binary patch literal 1144 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePEN*0CU|?tj$%6q%b7+i26oGYtjq}$7%@Ooq^pi hqs{<@04!!lLt`{FaOQe#CI)E6mtg>v9!!l43;;&5%IE+9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/424f6d879735ee72eb1ca882787c4b856f878831 b/fuzz/corpora/asn1/424f6d879735ee72eb1ca882787c4b856f878831 new file mode 100644 index 0000000000000000000000000000000000000000..aac59780c2f2310dec8bd5191de14e6a1a0d8429 GIT binary patch literal 598 dcmXqLFl;brU}MzQVPIewWeoK|0E2<|1pqkDMjQYD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/425eaba3f83d942250a074cfada7dd7032791dc0 b/fuzz/corpora/asn1/425eaba3f83d942250a074cfada7dd7032791dc0 new file mode 100644 index 0000000000000000000000000000000000000000..c874a8b79c653cb1f6cf4c78dc566014b982756f GIT binary patch literal 508 zcmb7>%?W@o3`Ubs3L=7Y^z?NL$I7W|xs5A$R9Y{w*1uCJFZp;$puP`jO6$Pg$TE{c zg|}E9Kp~NYK?L<2h@1mZzS6+C&`~ZHUZ6O)w!snGW*^gPM-x^fqn`z9{LpF8?N~qJ TUPKJOUg6W4%e9Pj<))w=E^$cY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/42e34c2136df30c4ef1e0bca4be8c670dd5514f2 b/fuzz/corpora/asn1/42e34c2136df30c4ef1e0bca4be8c670dd5514f2 new file mode 100644 index 0000000000000000000000000000000000000000..c3412dbafe28efe4ea20fb2f7c126b46765bbeb1 GIT binary patch literal 14 OcmXqLVB%Y8Lw>bk3P`Z*JZsIiHG~?_2218fBGC15 zHrI{Ieh)$sq&~OSMAPp)3L6i#< zGA$dfq+DzKr2{@y_duXwrFF*k zTWfH8p2KtEV{RmZM5s>@hn<+4q%-bWORRd7c}&rljQpOLzgTYF*B&>M zCr|1*eE#b5>kfs_GdAx3L3gI+bT#cJI^ViG#`6}w>3B!Sn68UIU)VExiQk6LAumf3 zf~Yiz0_73#SwO%ifhmI)WNHnQj#sy5Kyv*7x4uO8HPxeYiRb%IS5}B z2nd}&zu+89G#D=v561FnVz`RFki(Y@708DO!iH)f_z(@@${_;T&?(DBDmI6sDgc$L zfCz~Sh?1)SOr`=v0u>-01Z1RBdtW_2oG-?Doi}jgUWte>=vP8;p%9fIN{SGA{nF)F zIEpLXPTs3j#+P9T2N99?I)HE?p<%~~TrT4(6?@0d%CUhRM~KQK7&1s(%Z?+LAW@h| zsiR9G!H}C*;BuKf40ROY2#!Z%y;f=4^~;qLSpyIamm_=`hW9S0X~$8>Fkz%p$#~%T z2{2S7ldA5cIq(e^5+>p3a#VneQOUrI?T;BE0wxzD7?C*6i4+h9y&s0WOO1YYTuA8m zjtBYFNQ?_GM8Oft_>R)ShG?j`Lu18?739w3M(Rp8aKcbRv(F*DUhM;ejt!#vSqVXK z2nYuD{TNUa%%fy7v4@kBI2s!`6)tr0@tfr1%t0hF6=i5ZxzA%<)fqS<759b&9he0h z1Zov`d=v-!wMyK*to5gi_~i9RJkTNo0uzFIU@D*ha}te)4FPMN!SqKAmPy%fQ74vv zj5}ExW_&g{&IwqM3T)UI7y>PZhCKso%+bEL&9|Kv?83KKUp zcua~;XMF2UMXU088gCwyTy}VS=1^^SxqZp%OZ68*imN+bp8jH-k$-4y9c4D(|s%wa*Q7crvkQT3h*cyv&hU)iYtPp-)BGYUh6;4}M$eLbEJl z&EQ4P*QvGiu{H|HM5Y9mOw6aklmZ$RGB`k|(&CaT3gh;{arvfSIn43-*JkxJ#@N)S z{`k?W@YkO!lS3aeHDZIoB#WZv+JCVEZYc!sbkf{Lv1-h2=DjM}GaJ5gw1~T0;epW) z?Y^(u{PybmSuUB{3()trshx}Go_i2Q-?Gn(4Yi_Yu&TA&LUrzKy1dBt`o;VLS(g9# z?kAt8Y+kzCCwsbi9ew`#Gh;&9%5&8F}zO#P{T; zFNOP_+!uM}UX%1#It0$_|Dr7z?;S`BQc< zxXvzIXBSs@SNGt5vRU$XO^Pf#ctuD=~sqsn^?BUm)8~e$*SdR+N%+jH@gD0 zyQY83{;4UpJSQ4Ytf&hxw*j;t@2gAa2-fy^cE-k9GFr5eBE^2D|T&X zcd+%U+;{52Ii37f8P>`EbLG!YwyRege5T>g}SInuV zE^F(H+OA2vcYoEoBg7r2j;$DKd=0PP!#j4DxElFRC=;2y=v4yed>FOGP zm4f9jD-a#ByckXvEHI4y3*=nvX!l_txRA}<6iIKnJs8k;y5l)u)?nCXl7z1q2$J+7wP z4x7Wum~o)VkEqZUcR74$E3>ky^FLV77-}X=zp(G1uWQ_w7tL8Hb|W!=Qouyc{DQPO z`U`ZDhwVAIDqp|ghY!1ScfZ~C6d{>LX zoplGtw2w^M`->nXzvgsjL`wMc*j>*k$NZ|AH3}asT3;njo#tO&_h8|60p}yjttqAk zx~PA_;tC5WTTaxLKF;fxwy1iEPNx9>!JOAs-ZZSiRGS(j$0GPExsJe|WVQ&@6O-gWa0afO*;fFG6M~J9Y<*cKa65ay=#A-H383gX*59sngBl{M(ei>$h26_;5AT!wzO!m%2au z-7S#memiuG{eubn4bC~gF{Ihdg=1b6xlDMgRfzwWabfrXap{1pAO9;7c=WQ^1#p2=j$@8} zf^8p*5wc^2;xh7&<4-C}m5&GEE2-??OJyH06?ik?AX7F4j0f)hp@a&t9Lcq$9!^fm zj*seM5>$%IB?u~YlAvN-ipg+^V#wR3#l=yUKh+oc&tT~%07gli`pr)Ds;ZbZ5pOTH z-yUz?)7g2||E@Rh$Qcl8SQoTDciD9}y{uN>h&+SOi`*C(j8FX73up3?&S_Z-fA%YPp~ GQU5>h_UxDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/433383591e6f84cc3081850e7433287d962c4365 b/fuzz/corpora/asn1/433383591e6f84cc3081850e7433287d962c4365 new file mode 100644 index 0000000000000000000000000000000000000000..2767081099e022fadf631617a6422ce83f19c919 GIT binary patch literal 3248 zcmXqLVB^+mV}Jl|ru_^J24Kjz{aG_%)ns4V9+4JXeGgD0AU*lv$1Qnd7QIl zVnj$Vn=!DcGZ;V&GH5U`U@%}{1oI7`f+)ZT#LIvR88oo5v>G%qFfcGPGBAL2kJ>*P v{-fz{H2;m3KlsaELwLbFTKo(TQrExBf)8mTFe0k3;?&mBAx&M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/434bb3d640ee582d75ba822f1920ed6ccdc9544e b/fuzz/corpora/asn1/434bb3d640ee582d75ba822f1920ed6ccdc9544e new file mode 100644 index 0000000000000000000000000000000000000000..102bc0136f916a037dc832fca3c4d955e20dd948 GIT binary patch literal 63 zcmXqLkY{4-VbNj`VE}=g#*9`5<`hOShrt>`F;p=qgmP#xGHA6jt1vETU}M#8WML2k GNdf>4DF_Gv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4354a6004da25a6bccca6dccedc69c73cc3bde56 b/fuzz/corpora/asn1/4354a6004da25a6bccca6dccedc69c73cc3bde56 new file mode 100644 index 0000000000000000000000000000000000000000..0f73fe6a58a2001e33cf4a27cd8b820d4a82ce86 GIT binary patch literal 62 zcmXqLU}BuZqQw9KIgJ^u49qEv5S}$uw2DC?ltYV=L93Nng>gXx8>@CB3xhgH5 # B2lfB} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4380f3efe0c419fb55126ca43adc05a900d74443 b/fuzz/corpora/asn1/4380f3efe0c419fb55126ca43adc05a900d74443 new file mode 100644 index 0000000000000000000000000000000000000000..7f3d82a33779cbe969a8beb8dab3d4881c733c81 GIT binary patch literal 27 TcmXqPU=#fh2i9;F0|Ns97vU52 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4385ea6132bc53a903c8adc01d89843e0762edba b/fuzz/corpora/asn1/4385ea6132bc53a903c8adc01d89843e0762edba new file mode 100644 index 0000000000000000000000000000000000000000..0acf58409a9f58daa2cc2673fbe8e6489e572459 GIT binary patch literal 43 ocmXqLFc4s4*J|@PXUoLM#;V=O!XU;h%)rb51&j;~47w0D0EsRH8~^|S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/438843934d3b7bbaaf56bca5c12e1a196d6d2746 b/fuzz/corpora/asn1/438843934d3b7bbaaf56bca5c12e1a196d6d2746 new file mode 100644 index 0000000000000000000000000000000000000000..66ae4498bb37eaf8eb7f924aef388ee023c9fb60 GIT binary patch literal 1336 zcmXqLFlb<6+F)hSz{X?{%fMj3Ai*HPU;q|Xv@&O4U;xQ0T3J9@3$TbS#3H7s3Dcoy z0W)P2+!U;0SWLMO*MZkwF@*bwwzmrIK5X`$gt-~7y-49gz}|r}&k^oR{PBS|3=pA9 zrO?2ZBCxpt9{WfsXEY>{Lxbdyq;m`s8C!$XRgg3Z0tO9i%%QRpOpFE$49tumApkkM B%t!zL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/439bff691fe3142e5bdd71dfff1e522e4c02a3b9 b/fuzz/corpora/asn1/439bff691fe3142e5bdd71dfff1e522e4c02a3b9 new file mode 100644 index 0000000000000000000000000000000000000000..f1c8909f2d1704a98438a20f44432758dd591fe5 GIT binary patch literal 28 jcmXqLU}H2`&>+rlU}9imU}R)qV4!VaVPwL(Nd`w>+*x*PqMOc@+Wh^Esj|9Lu88w8 zFd7&d7#bQF7#kQy8Mqs`vN4Cwm1Si7&th$0xzPNksiBAg149D?*cc|}zvkv)qb$EiGhv5gN=!Sfe`>L>0P}5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/43ce68d21ccd3ad3a0f89c8778fa8b53e8aeb4d5 b/fuzz/corpora/asn1/43ce68d21ccd3ad3a0f89c8778fa8b53e8aeb4d5 new file mode 100644 index 0000000000000000000000000000000000000000..72d58b0b2b57a989c2e85baf3f50e8beca7149e9 GIT binary patch literal 2061 zcmeH|JqiLr4254ZOZ-C+Z1xOm^C}C$ehUxcF@oS+%Nuwd+ht}~VLP!kUz(Rdco1e1 zx^24L=hs$NJJAQ6HB?Eu=^+6Gy_Hid95wg0=yLx&tJt!NgmpTiA&3f{MN7>&6=z&Z scAZLeYwo-ONCK4Z-~49|Ul9HyG5>gf@&97~#Qy!0`}0109~|o703vwEN&o-= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4404b51c57ccc46d5e009c7419af6502eae0ec35 b/fuzz/corpora/asn1/4404b51c57ccc46d5e009c7419af6502eae0ec35 new file mode 100644 index 0000000000000000000000000000000000000000..b87751b0df6c3bfcb9eefd5705e47031fa5676a3 GIT binary patch literal 976 zcmeH_F$%&!5Jms&tfN7Mtt4m2Hoq3^Q{*0cj8!n#@&;Zf<%aAwc3KGmXW;Xz&+y+c z*}fb5aXLs7#66K%);W^NTvUKyYUR`lt7ounH}UJg4XsAOW)a7}QDtm0ntW|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4@VT<<4UxyQf!7rf+P2x65uI0@u%$ zkr9h)VNPXW7}9}j0uS8LlslSohf=XHpeeWAHZxM27+-^xV4Dg6K0U=+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/44b658f993bf4453dd518c598c9cd0a472083877 b/fuzz/corpora/asn1/44b658f993bf4453dd518c598c9cd0a472083877 new file mode 100644 index 0000000000000000000000000000000000000000..25d6f58f33a06a1a89ae2ea1ebe19a57829fc91e GIT binary patch literal 5 McmZ3?%*Dt600UqEvH$=8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/44c3075d23fb536d64d7d192b90173d30fa8cc41 b/fuzz/corpora/asn1/44c3075d23fb536d64d7d192b90173d30fa8cc41 new file mode 100644 index 0000000000000000000000000000000000000000..f3ac9ad50f367b0624d901f4ce3bf1588581a4de GIT binary patch literal 6 NcmXS5;bQvF000E$0e}Di literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/44f7c8dbf5441eea10877f03f256a6c6f4efa536 b/fuzz/corpora/asn1/44f7c8dbf5441eea10877f03f256a6c6f4efa536 new file mode 100644 index 0000000000000000000000000000000000000000..94d15205357d88b4a1d0dcb409dbb6561b4ddecd GIT binary patch literal 7 OcmZQ#WwzEXu!b0%*epN001#A B2n7HD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4562af05e0407ff5c3b4109532aefc6e73abd646 b/fuzz/corpora/asn1/4562af05e0407ff5c3b4109532aefc6e73abd646 new file mode 100644 index 0000000000000000000000000000000000000000..861272d925b5f9c775a77870d7971e9c5612c8b0 GIT binary patch literal 9 QcmWe&H(+LCWHMj?00O%Jga7~l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/457d9d6573b1740cf516676c44114ce2ff1dc9c7 b/fuzz/corpora/asn1/457d9d6573b1740cf516676c44114ce2ff1dc9c7 new file mode 100644 index 0000000000000000000000000000000000000000..8571ef5b4ad472d682fe0ee0c7a095801a2c78ee GIT binary patch literal 13 UcmWgOX5##B)xgf6$k5OL01`$62mk;8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/459c71b6d06687940822aa8d77f1267bc28d80c2 b/fuzz/corpora/asn1/459c71b6d06687940822aa8d77f1267bc28d80c2 new file mode 100644 index 0000000000000000000000000000000000000000..5332989198ef6146663724cd88d121df3ac57a9d GIT binary patch literal 149 dcmXqLFkoh5)FP6IBdm@HC1Bfds$*ba0080A40iwk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/459dff6bb7f3718d1ab085eeb20ebfe116aeba24 b/fuzz/corpora/asn1/459dff6bb7f3718d1ab085eeb20ebfe116aeba24 new file mode 100644 index 00000000..a1ded87a --- /dev/null +++ b/fuzz/corpora/asn1/459dff6bb7f3718d1ab085eeb20ebfe116aeba24 @@ -0,0 +1 @@ +¡€0€1€0€0€0€00 \ No newline at end of file diff --git a/fuzz/corpora/asn1/45d93ef15bca5d02a8e7c1e52c896055bd3944b0 b/fuzz/corpora/asn1/45d93ef15bca5d02a8e7c1e52c896055bd3944b0 new file mode 100644 index 0000000000000000000000000000000000000000..eb837d296c4458a6c6f61918b6bb61e1b90c4265 GIT binary patch literal 16064 zcmeHO!AiqG5S`uBh)5yer6<9gw3ngaMd`fpiZ#xbm96r$vrIS~Xg= zB%6P#-ak}5vYYHCyX_e(U`Ad2{WDfT3Zw(E$a>{vk#!Z+3+e^+VyYM91$mK#7ZldW zQxd?c0aBC!Hyags)0P1@tB8c#ctLwWdyvE)*d1k&^>NZ7c@=;i2p|O~?c7Ogk^GKA zVnMy2UQjQ%W|{kr7{DF?QUE3`AVnFC0#pG=Q3l*>RHPd$1MYIFmpfGh(CxSg8e~=LSo{B7$2y)bMGv(u&4WPXTLp< zd(J(Nf&R+F&|g_q7z)9J((-w!`%-^Q2!%>Y3ZU;ORzP`a(W>Io$%PHeaRyA2U&_Ma z718EcTWihZ(L}thy{#pdh_puVHkc%T9v3cK8EH+#BF$|WhTG+%@!^Wabq$MGJl(Kl z>GH)`19!@&72&Ey$wXT`))Z-~X^6%Xv30S=NK;!pf>lr{iK6ht!2fC*7U67|DQ#RL zZ7dH>2}d_XVl59w>l&l+MB|IGmgxM(mg-3ikb{MYrU~3$oqfRc1L&W873LHchYEHd z_kLvHfIy2Qz-qV!#+MeYno(I?G(J?Ku$F5ch9J;nU0Rh5!Nuqm*vis4)ftnWXauE1@y~5o8{ao+kDw+mJB_IU}Wg zt(78UD3HWXX=#8q%8(MaUCc^z&@re3NtSw;G|EJVHX$u}tCl7Y#5AdMOV%pez(xxV zyeZ#wh9r4b8bgzln4xR~4kj8%rDam3CCE6)jH6ueLyt0h$qY$;m$i+Lk>nk98k51Y zICZ=o3p@;gb3_XmVOxiPASja@C>J_b__i?{4U-C1XMt}U2Xv59+WA0Mnt>*mgl(OV z`WRSDnwCG`HlOz}1}55QaZ1{j_dHD2H+g9&Pq+NyE9DZST-f@Yk|ql_Q)t-9T2Zyfvijer+27L&m7P(DiXvnvEc+ z(06^3#Tlku_DmC4w73PIXFv^9ViU7vR(DyV3FhQ2Vo{YB50YqU?2hyX9 zD##9Kl09qN-JUdt2&U|)L=?99ZI=TgGpKWWX^OVZW&#D-oqOw*QsCgALE6@PNJ|^L zIP~44U0^8hDRm%yx-S5i?E|PJ?;i~)HORj3@)H_!&_t6QSGIqqY?D_MIVo-XKiUOA z3xTY?DOKNOao`NeD5Q31+vMP7lS!Vsq%kFp%HGtEIT#iC)K57Wb!AeQb1*7csVg}c zRYTH~HD-GwCRLHr)xI<)KU9*ZAM-EDh|?-{QY!D7cOrSq1*0I)K|(7 zE%E{mt=E_Zf}ug3+fZC%4%qqjES+ydn>#`h-RH{}UR4$M=%N0RsWPNk3 zAVw}JZo9@DG{&gCZpz2J^^QtQHyy-)jDlYVl{9LBat8v^gh^t4mr>HF;@}Pjq*>%Z z>+TFGOr$T0XDl!_KLB)M+}rI8ii-5BjhxQ_n7)wkACK<=hX>pZ)ansm;qepZb08 ze|yinSU>02f-@mLee;FOcU;_E|IpEo799JEm%pEBue$W_x|4&|-I1>JnRjdZMh-4K swC3Tunf1?{eCyz{!xsk*&OMf1@cgWu=VmQA&|MQ=x&Fl8b-joG2PS2EA^-pY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/462e126aed7edec333f795a5114aa113aae56d5f b/fuzz/corpora/asn1/462e126aed7edec333f795a5114aa113aae56d5f new file mode 100644 index 0000000000000000000000000000000000000000..916b9314c937f89ec8211cbe7e90a80cd5357076 GIT binary patch literal 262 zcmbV`y9t0m5JYG9Wc?usCf13A=mbD08TXtYOrlNLm^OBdnp<6w~E#8fkt>_8o xhbl=o9Ronnds%wn@9Zoe;&!bnR(ujrg&8)1NEzL-gFApA0Nw{leJ1s};{o^g94Y_+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4632a28b720502ba98b332f9f4b05b5ac808be23 b/fuzz/corpora/asn1/4632a28b720502ba98b332f9f4b05b5ac808be23 new file mode 100644 index 0000000000000000000000000000000000000000..6a5b77b909c77b8d94a2610321f13809ceb147fb GIT binary patch literal 80 zcmXqLU}CCgFlaDnU}IXwz`(%5+vai3g84sV+yh3@y-W-YOo9zeDGVSL3=9kg3@nX| b1`9x{nL}k|S-1=uIvSZ885kHC86W@v(diGb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/46496033d92674298405f072f1672c733cd3c649 b/fuzz/corpora/asn1/46496033d92674298405f072f1672c733cd3c649 new file mode 100644 index 0000000000000000000000000000000000000000..35643dfcce786006d52fcc6959ebf9c31a18412a GIT binary patch literal 82 vcmXqLU}92ZFlf+eU}K8>!OqsOckkZ43=9k?{4FT_1~w*i6*>)U3@`uyEV&pL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/466c861b233832de945e2b45c5e787fb13831140 b/fuzz/corpora/asn1/466c861b233832de945e2b45c5e787fb13831140 new file mode 100644 index 0000000000000000000000000000000000000000..29eb41cfc69888e590fd4753e59cd3fa3153a037 GIT binary patch literal 3223 zcmeHKI|{-;5S`I{V8L2YEP{oF%~*Mol(~v5o*+l?Mz)q7zzc|AWV4{6^MuHT5H#h> zO}gx@+FAB#|Z8#Tt0Q*k$!|DJqSmB z;rOQY(oH?~CqKIH;qtHZx9>Yzx9R!$p+4jOUtjhACVjh^FMY40Q2M+5zqjWv>NDnF zclCV|-m<^mNO;0dFXn@n!wv~5nHV)(6O55n+-siPvGu$1Zy%-m&(1oR zE{I}xPjR{0IJ1?Z&V)&p0m*s@;D@`Hk%^I!*@}TB>r={|$HsO~ub52V*#2&p9lpS2 z*Aix9@Mr@?0SyB8Ke}__Ze* cL91D+XI35~BPYQ!7fZ1KFKtPykwA420L>upX#fBK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/46a5cab511b443cbb8b29c1c2614ca68029811aa b/fuzz/corpora/asn1/46a5cab511b443cbb8b29c1c2614ca68029811aa new file mode 100644 index 00000000..b3b60e6b --- /dev/null +++ b/fuzz/corpora/asn1/46a5cab511b443cbb8b29c1c2614ca68029811aa @@ -0,0 +1 @@ +000001001000030.0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/46a7a937e909eff2bd197a8f5a5cb78cb791830d b/fuzz/corpora/asn1/46a7a937e909eff2bd197a8f5a5cb78cb791830d new file mode 100644 index 0000000000000000000000000000000000000000..52fcd8564db8db9c1c7052385ffe525f090f2bb8 GIT binary patch literal 18 WcmXqL5aco7Vq-E8<6&WB0096LUIAwS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/46ca2431fa302be8e152cdf54574707e8fbeba2b b/fuzz/corpora/asn1/46ca2431fa302be8e152cdf54574707e8fbeba2b new file mode 100644 index 0000000000000000000000000000000000000000..09505cb37b9ecfe24409955e4fe54f74eab4d503 GIT binary patch literal 1168 zcmeHHu?@mN3_LsN5lD1M-@pKn=CTC~WC^CQg_Jo$&1&?tQ5+x@4N$&a`p&XXKGV|b z*qyq^MwZ$eO~o3}l9IsH7@4Go03fnUGs0-8YWKUvns#wTkElnCsQ3%?%Yz02=Cya*Dv;4e{&AVrW5?w`Hu$kTVg0dU;r-%$_MAIpUR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/46dd9ea31027498131da1bafcb9adf510d750cb8 b/fuzz/corpora/asn1/46dd9ea31027498131da1bafcb9adf510d750cb8 new file mode 100644 index 00000000..64ad7cc9 --- /dev/null +++ b/fuzz/corpora/asn1/46dd9ea31027498131da1bafcb9adf510d750cb8 @@ -0,0 +1 @@ +æ \ No newline at end of file diff --git a/fuzz/corpora/asn1/46e25623c54478356b306beec44ca3bb4f929547 b/fuzz/corpora/asn1/46e25623c54478356b306beec44ca3bb4f929547 new file mode 100644 index 0000000000000000000000000000000000000000..dea38939a490534941481b2ea8488b3b2b9dd013 GIT binary patch literal 87 zcmXqLkZ)jOoWtV400B&3DqWkAg_A*xLAx<0rGSBjnSl{14F(NRP8EYfD2Em!gH|hZ R3gdzXHdgIM76xgsBmk^F38DZ1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/46fac7ddcedb88de753917c262a3faf598491468 b/fuzz/corpora/asn1/46fac7ddcedb88de753917c262a3faf598491468 new file mode 100644 index 0000000000000000000000000000000000000000..76f61e4c46839e694113f71f654494c93fea621a GIT binary patch literal 4078 zcmeH~JqiLb5QX0)ODwkBW?L&^ZC)iJY%k(LJjNinH?sByo=NfpqP3O0Nt2n734~rL?}fNSw*hM+Itjvx&ldc!bM`JR zL{Hs~R{+s~yj$n%{`LO!|5Sfef7O4~f2BX9zob8R{G9HM^mdp`$SfZ(-D62CQk`Dh3!vfLosi6yihjRp#mw zMlwk^j9NTjj!%}xj%(Vf%FP2@7B2T!F4JjV{(1|Q>+{LJCpVGx<4YS`l8l>KxY`z&T?%-8s$z*AHNaox|t7w&$Kyg+{=#i2Z??jITm^){|QB!=e-X5f2tXJ*d OQXKKQ|HMiU1)x8*;E3G- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4755a6c230fe56ef646d06056a7a69590f89813a b/fuzz/corpora/asn1/4755a6c230fe56ef646d06056a7a69590f89813a new file mode 100644 index 0000000000000000000000000000000000000000..b2578b35abb893b7c0a67a1ec0fc1ac6f9d8832e GIT binary patch literal 2271 zcmeHJK?=e^44h=!tVIODOMf7=mpOS5y!YTke1)un{gyxQJ02^$ElNKiXgh%=2`piD zHY5zTtlFl1uB2Ft-VvBgm1Hoj9Y8RYvM+_b&yD%2Z5{^|Thu0b?tS5Q$hII77)TJ3 zVh+g>jxjn7DF(}KyaI3n#M?hwzZ&yDPmTZ7^`H6o9X-|lpY@;hkND#MPlMQr`}_H; Z@nKaguP+(A>$;BbO(ZTGA4_h3yZ{6E?P&l2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/477957258202afb52e6a48f9e5df2fc09b505908 b/fuzz/corpora/asn1/477957258202afb52e6a48f9e5df2fc09b505908 new file mode 100644 index 0000000000000000000000000000000000000000..0d792d1017765f519c8d726767178a9adfc16383 GIT binary patch literal 60 rcmXqLU}92ZFlf+eU}IwV%Ffon&d9)E!@vOIGk;)bYxw^clMe*|fs+iO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/477f80f5c51beafc1affc60bcf404636b73a9aea b/fuzz/corpora/asn1/477f80f5c51beafc1affc60bcf404636b73a9aea new file mode 100644 index 0000000000000000000000000000000000000000..25d631c8ba9db62fcdaef6aea6ba46958b689865 GIT binary patch literal 398 zcmc(YF$%&^5JYG9ht(*8V3RY%W~vl|eF_iaF$TeZEpOm;Y{UNsB%Rp!ws|wK3>Dix zkNLH;c5nWGSkIlL!jB0csLoEE@$Edss?X!|>=x@P37a&aA&3ga;#M=~a>1pf>s(RM X+<60#3@G2f?JpL-;NSZnB)Gr{4CpIf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/479f29b0b3031d2a5decdb19468143ff8a8c8afc b/fuzz/corpora/asn1/479f29b0b3031d2a5decdb19468143ff8a8c8afc new file mode 100644 index 0000000000000000000000000000000000000000..5def6ba92bee1446be0e6f8c2a8b2040d87ed9ad GIT binary patch literal 148 zcmYj~yA6Oa3`AdCP$WAbs;j*N65C{kWF%H#GvtU*T;BQJ^KMw{mQNSt%cZo*yj!k* lz@kK4^xqd!qKy>j17Z!RRNtBEm_v_Y%71LQN)7wFdIJsW7i|Cl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/47bccd90b7a6ec227a58d9b926f0aa6afeea4901 b/fuzz/corpora/asn1/47bccd90b7a6ec227a58d9b926f0aa6afeea4901 new file mode 100644 index 0000000000000000000000000000000000000000..682527ceb59df893a118e46c56b2d42324224666 GIT binary patch literal 255 zcmXqLU}6$sFlf+eU|?imWME(bF^)qh_lb<|6QM%SAwm~nG7KQ~U=COZhzVyjz~vAo l;Wh?gKm!AsHAog*s)g7GvIJofQ5L{_1@Qt{GuT@o005)@D)0aR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/47d5b967686001cb2f1816f29bed26d7e6b1d062 b/fuzz/corpora/asn1/47d5b967686001cb2f1816f29bed26d7e6b1d062 new file mode 100644 index 0000000000000000000000000000000000000000..5d544ad548f2d7480fdd91626b4e7a4812dc064a GIT binary patch literal 205 zcmXqLVB^;M?a}s~myuI|k!e3eg8>*aF&P*bG_WygGczz4Fc>sQFj`448i3hG1_EsC zT5TTZY?&C@ShX8j7!;W07?>Gw10Dtjg9bL1R)Z!61_owE1`yYPx>m5UF_``b04??z A8UO$Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/480cbd97db3a1a53b05466e39989164536d0d334 b/fuzz/corpora/asn1/480cbd97db3a1a53b05466e39989164536d0d334 new file mode 100644 index 0000000000000000000000000000000000000000..ea495173d901c5959df689f8eafbdf41c7a79aaa GIT binary patch literal 91 fcmXqLFlZ3uF=$|8GT@P8vSwglpq$6Z00J5S41WpN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/483a661e760fbc78aedc9d9eeba039189f83cce7 b/fuzz/corpora/asn1/483a661e760fbc78aedc9d9eeba039189f83cce7 new file mode 100644 index 0000000000000000000000000000000000000000..228b7d5cfb15dcccdd09c3a66d139e717fbee9d3 GIT binary patch literal 43 dcmXqL5ac#!U}Iu17iRp!zyRTxGhlKU7yzVj2Lb>9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/483bfb8dd102e5cf3c089105da1cc9a7ad995bbd b/fuzz/corpora/asn1/483bfb8dd102e5cf3c089105da1cc9a7ad995bbd new file mode 100644 index 0000000000000000000000000000000000000000..634e884ed6653deb04b038f99ff399e47021159d GIT binary patch literal 36 ccmXqLV3Yp*xv{bFWdjCKQ&%%%U|=u+06x?X{Qv*} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4840e554ee461b815950a235c57337851c0317a6 b/fuzz/corpora/asn1/4840e554ee461b815950a235c57337851c0317a6 new file mode 100644 index 0000000000000000000000000000000000000000..dc37c2f4b94f9b8f1b4a22f794fce66bc2196843 GIT binary patch literal 4448 zcmeHLF%E(-6n!nEqDEul!WnS+lY@yng9q^nZjFhJxAF#D$Hl?4fFOpz0F^)=%WsqB z<@f#n+Cow+BNeOXip@8SKOo6`oD-20eCGiKk|8^UjMA94Viu`5IdUcf6L?s7d-w!` z0ZGy^Gh@mozi`r{b2dd%_&2%&@ED+1x8+|4k$NSy{1;8#C%>xj>kUdVnEZ`sKj>)x ztNA*}0>)-YNrzT72ss9VEdjHcF58!Ue|DFHkmQ=u)uGcmK)Frr!U@tiP*&gCV{DtoHxZ^&egSx|ECG9o6SkB=Kfr|wnf!qN&Ne6z zbk3u23b`;zp}k_+V~UyGods=w>>k|qLVKnpXq2gd)&L@F!au7JfedA+Neu#RFuNRe z=HMIGYzRYF(uvipFbVG$i|PAQUOpF9L6X&`^W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/48903e8712d816af200bda59d6e2eac7a19e80af b/fuzz/corpora/asn1/48903e8712d816af200bda59d6e2eac7a19e80af new file mode 100644 index 0000000000000000000000000000000000000000..abd797a0cf28b6847a83731b5a07145f1b5448ab GIT binary patch literal 2130 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uyC0&Ffep5F*JhZ!2qN=G)si(jR6A#GgucyeIpJ-lv%h88WyrN6J-c~ zGwAG)9Lx|=0eR+PBU2-T04PKt!36ao9bHGYupYc#98C#CWtb6=5~$`yEF~QMvo0uI k58hlym9QQ)ghsU^)dMyZmH|);8xVk0^Ma5%p8??^0977vF#rGn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/489e3cf205cbee8aa41e3d91f58ac9f9e50d5355 b/fuzz/corpora/asn1/489e3cf205cbee8aa41e3d91f58ac9f9e50d5355 new file mode 100644 index 0000000000000000000000000000000000000000..67dc82ab6bdbb3c250862f1f37bad930ee57ebb1 GIT binary patch literal 1601 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RO0|7R6 ztu~KywoHs{tlEt%49d(d49pDV0b!U~ii`{l1`TX1tp-gD3=GVS3?QxnvO`84Ga52r sFq&p?fsq+9|NsC0k1IrAU}T025_pfqCJ}%Oe?tyXMPOv`6Sas20Pm-k8vpW|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4|08wldV2U~%sM|GqE>GcqwUGFvgQWPM7x^VrDl=@pad8{6OQvKxrN^|NJU#Nt|* zQyCa=2QDbeK>%Qx_KTn!+RV#B02w0{{m!tm#s z`@bvX*x6OBiuzftms_Rp^0`JR)4A_x%+A$;;n z)NV>l@^=@miN!T3)i83EprTI-c}1`(7BZO%=Z}2_^0z=!e{*IGvSk$rtPvXH!c+E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/48dd6615aac8ce4a9cf5e25d0eb2c468c3ae4272 b/fuzz/corpora/asn1/48dd6615aac8ce4a9cf5e25d0eb2c468c3ae4272 new file mode 100644 index 0000000000000000000000000000000000000000..66b51c855b5070367b1c1e546ff3d4f406ee2be7 GIT binary patch literal 96 jcmXqLFlb<7)M8)&Q3fa!R1j4TRS=D505uG5kbwaJmDLS* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/48e6b403656ecafc725a9eeaeb3cb1459a353ecb b/fuzz/corpora/asn1/48e6b403656ecafc725a9eeaeb3cb1459a353ecb new file mode 100644 index 0000000000000000000000000000000000000000..cae64597517be20fd03ae27afad074be517c6696 GIT binary patch literal 20 bcmXpIGT>$7)N1o+`_9YA$YsdD%*X%$C-4JO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/48ea5da84385e416be10c2c402ae54b4ff6019f8 b/fuzz/corpora/asn1/48ea5da84385e416be10c2c402ae54b4ff6019f8 new file mode 100644 index 0000000000000000000000000000000000000000..ea6b7713729f8edd3e2a90ec7764f7af53533136 GIT binary patch literal 1438 zcmeHHI|>3(44mXi{2>T7dxo`{%0ke33lHKkqTpW38+aXC$#aEgw}m#klV%cl3}iBo zZu7cr+WSJLOVKNwxl~EI={f-fy^?Jud~&XAT(`|_r(%;#5@u-wBZv$-gG=t&4c~Bx z?%0j!HoEW(APEq!d+G20S^w03|1Vccd}9Bl|C*f(?*=P}Q~uE?f8`^~K`x^i2qh8^ DZ)K`7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/494c31d01525bcc00c164e62f2cd1cf3f7f9f926 b/fuzz/corpora/asn1/494c31d01525bcc00c164e62f2cd1cf3f7f9f926 new file mode 100644 index 0000000000000000000000000000000000000000..1fa851fcd2e4b119229df20c2d36c0dedf39c01f GIT binary patch literal 1531 zcmds1TMB?65L_b!Av!|z-Pd%N?$9;%=%J}UK3K#G`qOonnc3MD3?2pmtQCmBJKLj~ zM*uFMm0A3S$iF6mkY3J^mpJ?+JqdgODd9kZw!NxQLMYnSr>UJG8%RlHGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7fG#2FYE7@;%+SaWEW2-6z_1_oxZF6x=li0lxWYR rFaU*UXd0~o1r{|l43P#RVt8oB4wfW~>Y)LRVx$acSPjX8sF@A`;JA=j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/49fa54473cb92b8ed2564ec319db6fec71cc0f3a b/fuzz/corpora/asn1/49fa54473cb92b8ed2564ec319db6fec71cc0f3a new file mode 100644 index 0000000000000000000000000000000000000000..69c05a5ace99b6bc09efab5ccf5079d81b458eb0 GIT binary patch literal 12529 zcmeI3K?=e!5Je}`QWX&d7ws8zGba$29>E)UjUd>iC-Dy6z~d8$-Q|eG+`t3#+ zhV=c+|Cv<9XXE*#EUzm!nmRs_m&e5{B0l3qLL?+UcgMoX<9#8sY%nj^=OsHCGF8`s z5=TVhvve;zqSr@x4iWqivYmmRbXd{*%wWeDw zj7?_*8)?QU(#VGV&EyX&X>ZtQsrzg*^GAv3ux&S57l)<>9pq14wrTZ8n*C@YbYnAH zM}XZSY(%yW+cvUs4q1D84A}aDG_%_9V29^N;mrsE*p%TfNfE<@N9h@Rg5Bq4f%U5KT<@OACavyf{ip| Y)W;Ob>G}Hnap24EncAGLr9x8N0j8qo*8l(j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4a1155eac64213c0e2df4714537f5f38266bc14b b/fuzz/corpora/asn1/4a1155eac64213c0e2df4714537f5f38266bc14b new file mode 100644 index 0000000000000000000000000000000000000000..b66194fcec527b3ec5934b4bbf68b3713e997f0a GIT binary patch literal 47 ccmXqL5acmvU}Mr|V`gGxU|_(-V*mq20Cx)m)c^nh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4a18b235b0650a5d645af2e9ec8c76bfd4de238e b/fuzz/corpora/asn1/4a18b235b0650a5d645af2e9ec8c76bfd4de238e new file mode 100644 index 00000000..2beff374 --- /dev/null +++ b/fuzz/corpora/asn1/4a18b235b0650a5d645af2e9ec8c76bfd4de238e @@ -0,0 +1 @@ +£@ \ No newline at end of file diff --git a/fuzz/corpora/asn1/4a22b1cdffec252e8d74192f1a920da860e7eb30 b/fuzz/corpora/asn1/4a22b1cdffec252e8d74192f1a920da860e7eb30 new file mode 100644 index 0000000000000000000000000000000000000000..cc41b42d0c7b61753dd2a6d0a77ad693c26a4a2a GIT binary patch literal 13 UcmWgSW@cn#W@O`LU}j_h00LA1KmY&$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4a417844ac3c79c434a3b65ee5bb8c53c5be94f1 b/fuzz/corpora/asn1/4a417844ac3c79c434a3b65ee5bb8c53c5be94f1 new file mode 100644 index 0000000000000000000000000000000000000000..2093551a27ea7bcef4daee0c2ea004b4dee817e3 GIT binary patch literal 142 ocmXqLU}92ZFlf+eU}IwV%FfoXXDWr91=x0FVD5?*IS* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4a60acc5cbd81505c0d2373aa2733f5933c2c41a b/fuzz/corpora/asn1/4a60acc5cbd81505c0d2373aa2733f5933c2c41a new file mode 100644 index 0000000000000000000000000000000000000000..8ff284d20f3c634d11c9607a71fb7e2984261cd2 GIT binary patch literal 6 NcmZ3?!o3zvK@4^_=Fo4lEDT^qEQ}!|%fbKy1`TXXZwwe1 Hn8Er1z`F_~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4aa3d5d01aa41ee9728aace9399d253d100d4892 b/fuzz/corpora/asn1/4aa3d5d01aa41ee9728aace9399d253d100d4892 new file mode 100644 index 0000000000000000000000000000000000000000..bb6817e2420a755c90f886cdf21f87ca64d9ea92 GIT binary patch literal 294 zcmXqLU}92ZFlaDnU}IXwz`($w%fP@S${@hNz$6HfGBjXdU@%}1Z)7xB08+*r$|CTa z>3eHOMOI{a I?IXx<0F)XlzW@LL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4b3bf885507e49d4b17436169fbe91f02bd18b70 b/fuzz/corpora/asn1/4b3bf885507e49d4b17436169fbe91f02bd18b70 new file mode 100644 index 0000000000000000000000000000000000000000..2ded775a61b18d066c3702f011bd8dc5b4d771a0 GIT binary patch literal 1412 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU)H(FP4{EUgAj3=9m+j9{(-78?x) zwT&8BJV|Xo3NsrpFgGxah|nDvziJGEv^&yL(til>gB1?c&NZlI5s{(Gpg>V+1WmnZ esm7Mc7RDy#rUvGT=9W+&MwupCq?sAuk^}&#@31xi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4b580b133c463d32da6bed571bfd91f2e92b9e77 b/fuzz/corpora/asn1/4b580b133c463d32da6bed571bfd91f2e92b9e77 new file mode 100644 index 0000000000000000000000000000000000000000..bac703bda8f7c133cf1677d118d72f74748f42b4 GIT binary patch literal 20 bcmXqLU}BuZ!myx$ja9pmg+Ypefq?-4EJ6cG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4b638738d7c954bc3b5a014df64d4668ba481ccb b/fuzz/corpora/asn1/4b638738d7c954bc3b5a014df64d4668ba481ccb new file mode 100644 index 0000000000000000000000000000000000000000..818ed23412c2c0b87809c7ebf5b6b464ee85b994 GIT binary patch literal 7817 zcmeHMOK!qI44tZ%V9BnFO2~<#s>kb9SVX;M3=|i0qp1BvoV2Q)^H8i zu!e`Qn)~VeOhh!(#1AxGXpxshk3S)Sju`U_@HMz+~;H)C1@5~bTebLz07=Gc1t+X8Y}2kWLL6OQhTZ8wmSNrp1>QE zbFbFznp~~F)PX;lBV47j8KL#`x~U&dJI|sICfiw-da-~9rtiGzqM6at5r%dPNM*eh ze9$uBOftZr8K8<0=)#fNbfgr{-hUA`rtrBrniqW z5o4^?9+P2gRQ|QdT+gJt+WQ7lG(7=V6TJ&kS#Jd&^b+VI{jtdaw!Xl}R*Ny-TJ13< z#*`RSf_umBgg)2z$Nr$x7$#I=dV^G!qk<2533QR(SG`ZA1RuO9jw1cbV&?xEoqr~o Uz2k~Z;)={&c)#7>>T;{f8^Z~7$p8QV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4b85f78f7caef2e790d05b40328a3dad62c111d0 b/fuzz/corpora/asn1/4b85f78f7caef2e790d05b40328a3dad62c111d0 new file mode 100644 index 0000000000000000000000000000000000000000..842b330cd011af9918129f7ff1b0153dc95f60e4 GIT binary patch literal 41 ncmXqLFc4s4*J|@PXUoLM#+t6p$im1h$iU2i04xj)j0_9_d-nsw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4b8d3b48a24166dd709f60e6673b178c1ea387e9 b/fuzz/corpora/asn1/4b8d3b48a24166dd709f60e6673b178c1ea387e9 new file mode 100644 index 0000000000000000000000000000000000000000..1400d429c24c6f91a88f7c73f8e92d534efee76d GIT binary patch literal 19 acmXqLFlZ3uHfUgDGGO3g{K3G$zyJU#6a#7i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4b8f23156fe4097208340d9cf2ec08183f25eb8b b/fuzz/corpora/asn1/4b8f23156fe4097208340d9cf2ec08183f25eb8b new file mode 100644 index 0000000000000000000000000000000000000000..307bc591b22476387444707f7f6c53326b942dce GIT binary patch literal 160 zcmXqLU}92ZFlaDnU}IXwz`(%5%fP_G_?w9_j)_ThF9QPuQx&~{AgWWOKu%!-0Fs3| AGXMYp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4bbca5e606c539b95e45c275db2e314f5f4ee0bb b/fuzz/corpora/asn1/4bbca5e606c539b95e45c275db2e314f5f4ee0bb new file mode 100644 index 0000000000000000000000000000000000000000..17dcce487b20b32f42b9aad7c6c900a076aa0222 GIT binary patch literal 79 wcmXqLU}92ZFlf+eU}IwV%FfoX=Pv_;4Fdy+&-{U%tzj=3ABQ{$*f22w01q(|aR2}S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4bc7b78f374cd1d0725abf2c73231d14b712c376 b/fuzz/corpora/asn1/4bc7b78f374cd1d0725abf2c73231d14b712c376 new file mode 100644 index 0000000000000000000000000000000000000000..a4da834d9189f38afdc86a834246f1db0a28ebfd GIT binary patch literal 2476 zcmXqLFlb<7WMpJyP+?$TKxbnW#HDyt95Vn%!(=o}M$^D(8W>FjqiJ9?4UDD%a?=19 F004xbvr+&6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4bcbed4f64eef7ddaf16d8e2dc8b7009b74e3642 b/fuzz/corpora/asn1/4bcbed4f64eef7ddaf16d8e2dc8b7009b74e3642 new file mode 100644 index 0000000000000000000000000000000000000000..df11d5e932362d76b410d278589edbc833a5ba22 GIT binary patch literal 373 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU)H(FP4{EUgAj3=9m+j9{(-78?!l r+9=Fyz`)$VKm(h_iL*H^)z~uG!q~*z)WAH^+!Eqd>;ZxVK*0b2%zrRx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4bd350a66f06ded41fd9b7ed6c310103b3bc9611 b/fuzz/corpora/asn1/4bd350a66f06ded41fd9b7ed6c310103b3bc9611 new file mode 100644 index 0000000000000000000000000000000000000000..7a70032c08922ce4bf79699c14eecf6c21bd840d GIT binary patch literal 4376 zcmeI0u?@m75Jmsl$Ot4lBpO%%noB{&0xXavnBr(Mhnd7mc0=Cz@v@xo$ADzG@i3_OHmcXR>);5&9y_0w3Ktq=Rfn#EgBKrr~U zesO)Qif zlaFd-z6PqHoECGcj1^^I>N)jXx#t3MGIV8387pT@^N*6B^$&ZF0Lu}WSXH12XE`S; N4Q+ZP_2V3tE#Bo9E~Nkf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4bf3706a127e7878695d692dabeaad9a35a28d1d b/fuzz/corpora/asn1/4bf3706a127e7878695d692dabeaad9a35a28d1d new file mode 100644 index 0000000000000000000000000000000000000000..3b77443da29b590fc620484bd75d892e03c5168c GIT binary patch literal 52 kcmXpoG7w;6*J|@PXUoLM#;V=O!l1w`$H2^h6R`3D0G@LL$N&HU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4c201bd2e5ece123cec86a6a96feeabc3278b415 b/fuzz/corpora/asn1/4c201bd2e5ece123cec86a6a96feeabc3278b415 new file mode 100644 index 0000000000000000000000000000000000000000..a4aa0b79f2adcb67d394cfeb6ea6f2d7cc817887 GIT binary patch literal 3916 zcmeI#>u*&>5CHJr7OHK%w6vrRqM?2vgn-V>?w)flwn9~&QXUHO5G_~QVzCrxD~MJe zRmv-D1;i27zlhYpgc@{1QZoCimxviBtQsecDH5jzhLaQ`|Ir4y>n(~ z_d;{-NNDZ>5YNmS&@!^+Qal#R>7EA5He){IWoBos@3-oe3j-@-y$jRJr(yy0OtFkf zgKgJXxDu)KHVGD;`x@ zRo7V4xTtt|Rb^Fuvax1vU2(Fmvbb#K%&LZl;__r&a#q!xs=CIaI0g^`0{`JO_fd6z zgywh!OdPpO;mRxDd&5keN)-LyzDdys;r1|Gn-&l(#0#loXwV|Tuz^~h7bX20yjskhzr1tos(j&uIi+rTgzN&=Y)*YE-!<9O#)~{zm~g29HFa?5^25;N_i{<6oAp_`_MgIrUA)~ z9b(6ZK!Dh}_lI`HnXWo56LTnV>$|sWEKlO>J{jlV(f#&$AtHpNeg7LK@F3s=# z5z>4PMq1-FgVDZ+jS_Jh-8&j>EddcEjPX6}0lSt66&h5&CdY_4?Q6GOntw-Q*$^-Q zBv3AYj!cd|5} z=PA;B{-z2Gz|Fzup7L`9{#`yI&F5;mG{4^-^W?J;L{U|9xjj z`~M8k!GH7&Al^sDom-2>KZ> zfxY-CmW+H7 zXwDFj3dk+VwsXb^G$pvaIFj!+2Hfv~1lKELt3?eFpZDAd8QUas#WHS`*g4TAiF{Av z$k!$M0*h^y=qn_)MIiFA!^7W5L05{gHzg9d$gL^pXMal~A9?)DJr*MZG(i5n$J!|MBYX zmoG0l)~ElPT}LJlt-f^j`o#fz)->&ywS7U`PdTmEDsaQxmZK0`T-(3Ll52@&OLtU{ zn6P#0^pCfdmhP*6b*HHv)UEK=Yqw8ZH+a~GMSu0}yXpKd^CuLByT&Chuj;)r2F{@Rqhx^vyR86!3(E_9swD(&PQ{TAjQ%UE4;u=RA_Z*N~Y)Up4}l>DI^ zqSmV7rZdM+H=bXsE}qM!moWciX|K^)9hL2CtN$o@|M!U0vX9jb4LPA{BSnz zJ%X=X@jx2-QcR4VCwX!^o!)=UtLCY0Ym#i=8ZOzsR5iI?Jd@GJW~F!xx=p-Q?lM+? z@Mh?hHw@q~7ENT>VV&J8(A0>nB^Fl5$1Csm|(!j2r`p$E0FC#1Jtqt$rtE=PF4T_ksUek literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4c541d82d8b8094947ea55431130e953a8e189a7 b/fuzz/corpora/asn1/4c541d82d8b8094947ea55431130e953a8e189a7 new file mode 100644 index 0000000000000000000000000000000000000000..ceff475755a217aa5eb36fb310212c89b635331b GIT binary patch literal 9 QcmXqLFlb<7G+<@`01CkYn*aa+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4ca187b19773cdb643318f69a175135b2d5498e7 b/fuzz/corpora/asn1/4ca187b19773cdb643318f69a175135b2d5498e7 new file mode 100644 index 0000000000000000000000000000000000000000..90025ee8a8fdb2fb5b6604367aeb484ce837072c GIT binary patch literal 1600 zcmZuxe@t6d6n?Mowa{V(ETrfl>rfaLq37KD-s>v_<%bNHWlqO1ZYZQ{J7`i{(mr(X zhqfTZ#X$VQ6!nh*lF7{Ch$cGO$Xwi_Gh&R{h8iPNr#MY!7D;4@rslS#39Rq^b?^P| z`ObIFJs(63M*HwX!~dB1EZsyDqB=f`97GK|0FIlC!hj(U2E#1=#Jif5zKj8PcHD9ETEc)(0_D0aZu0q#g=fuHGfE&4iBKw2+y}RT$sn|q6pDh0*C%iz?Nj6a zY^xb7ff5;Ig5b=66aL;?h(~WE;!#vlr3fSgPNcCDM_;~aH6wu2jvy0>x-#InnU%P` zR!iV0$b^84X5tk`yhm(TU$>f321+QZl0xM5@dTzrd|^eU&al;th(IJ%K>=kwE~)o} zOBK5wA4~G00xBvQ>mnNO@YY?B5;%ziJhuS^u zi)UGSpb#fYRK8UOt6t&TxwU72br%67R4LF*>2ZVg@sFqGQt7GaA|PdYRpOTDxr@hE zt!5;M1PCDFhVB{}uWLNma5DHxXNe*hPqqvN^b0j15CqDJy&MiOvM)#M?lU>t3 z@T@nEEwDN12t|9keYW%vw}eBzJt<>Aa3qbPB7NKxa7Q9GvTn$OwuW9UIphON0uMPX zp8`?T>5Szdu|+Y@$3;6-Oq5UDGhDjnGT{I-mo+nTba^9Kg>tng9N1ub!T`^6R(ui-?-c%lwI-s*{?3> z0*9-%{n6MFAE~R~-gV0J!~U@&_qw0F&|C8v16#xJL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4cb0c5e147bac2d4ff908054598e5f46072bd646 b/fuzz/corpora/asn1/4cb0c5e147bac2d4ff908054598e5f46072bd646 new file mode 100644 index 0000000000000000000000000000000000000000..eef1732aea25a1cdcbb2834402ddaec35dcca49b GIT binary patch literal 7 OcmZQ$)ox^APyzr0SODGt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4cbc8c7df0d12c4567926fe8ac524d42531644e9 b/fuzz/corpora/asn1/4cbc8c7df0d12c4567926fe8ac524d42531644e9 new file mode 100644 index 00000000..f1587859 --- /dev/null +++ b/fuzz/corpora/asn1/4cbc8c7df0d12c4567926fe8ac524d42531644e9 @@ -0,0 +1,2 @@ +ˆ +ÿ÷ÿÿÿÿÿÿ€: \ No newline at end of file diff --git a/fuzz/corpora/asn1/4cded7dbfab1a1178d7014195de62c6781222789 b/fuzz/corpora/asn1/4cded7dbfab1a1178d7014195de62c6781222789 new file mode 100644 index 0000000000000000000000000000000000000000..9388957f96131b42b31e2a38d1dc9617b7844f63 GIT binary patch literal 17 YcmXqLFlb<7PS<8!&|uJD(7?a|04fIreE;%g(lU@7~*6Y#11H8rZP%8=95~@iM~Y*+Bvfynny~#As%~ zrWvbE=q@4CW||rf2_tY2UK#Yns5eO3SDq!R>#-A67DK*!{PKvsaT z4evWozG`c)J4##@V!R^`M5Nh17u4|=@E`n6wD)MHC!}qqlRcKmvJB6^WLvWtB6cl) qMa=&|l8l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4e07f30820044aa2511dbd4f7e1d0ce9a098c543 b/fuzz/corpora/asn1/4e07f30820044aa2511dbd4f7e1d0ce9a098c543 new file mode 100644 index 0000000000000000000000000000000000000000..14e010cfe48a760b52ea2f6c2d56434615c0a59e GIT binary patch literal 80 vcmXqLU}92ZFlf+eU}K8>z|N+=cP|42^9u$B2AD|0-o1PGZb9MWPyqq}meCh< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4e098a66fbe959b4627476aab0b202f80cb73f0d b/fuzz/corpora/asn1/4e098a66fbe959b4627476aab0b202f80cb73f0d new file mode 100644 index 0000000000000000000000000000000000000000..126f4b27a3331236061ec3e2da4395120847d862 GIT binary patch literal 3781 zcmXqLVB>CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 zHji_*OpI)->Dr7ejLd=z%>N<4lK}w?8rWD`4VoAj7?>Fu7#Kh%lWs1955hnw7~JM! z0!rMg-N?cqz^ul?glQ}W00lBNEMp+iGEmH7O%pVWJ4`@@FecU8HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePG&C|WhBGxXzyL_IYnBMp8v_OgX0R@(86X1~#2c{~0M-qX2Lq4+ S7@7y%0VCb}Y|!{?fG_~ti()AN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4e22436534f7ddda6023610945ad3fb84b08d5f2 b/fuzz/corpora/asn1/4e22436534f7ddda6023610945ad3fb84b08d5f2 new file mode 100644 index 0000000000000000000000000000000000000000..d825e1ad776558a390c09389f5b2ce26cd573be3 GIT binary patch literal 2 JcmZQ!0000A00jU5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4e34d43e845bed3ff19f74a43a8804ac2b68e2a8 b/fuzz/corpora/asn1/4e34d43e845bed3ff19f74a43a8804ac2b68e2a8 new file mode 100644 index 0000000000000000000000000000000000000000..fb458b59e91b74768a5a33cc3a769ec0f20e60d7 GIT binary patch literal 392 zcmbV|F$w}P6h!A|C8A&_Y@?-(Hsc`#TMKJ@4-tNvoFjI7xb3ahNP;Ou7SZ|byvOjV zcD4=2a9_yOM5P+hJ*d`f2;7wAtn45F=+O#ujcS|odNr9dTwF@s;82s{!*ywT0!^V_ wjuC-I^)SBTD1r}oe1J!r9^K$h)$s3tJg_7SdJ;eF|MGzPE{$s7-`aqcCkLTT3;+NC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4e446ad7e733f0209eefc2e543ff58b58a029ebf b/fuzz/corpora/asn1/4e446ad7e733f0209eefc2e543ff58b58a029ebf new file mode 100644 index 0000000000000000000000000000000000000000..b4a74105c3f101e6fb5874c62875b7b27ac01e56 GIT binary patch literal 360 zcmXqLVB>CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 zHji_*OpI)->Dr7ejLd=z49pA|z@UMRrPZK`fq{XUk%55$WHP3?7I@8NWnf@%02|EC Wz%T`B15xIh4v4u73=F@pg#!THmM;VV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4e71e2bf54fc1c112168eacff240b3a417786da1 b/fuzz/corpora/asn1/4e71e2bf54fc1c112168eacff240b3a417786da1 new file mode 100644 index 0000000000000000000000000000000000000000..205487ce9f7313af955f34a3593a60e88aaf6d52 GIT binary patch literal 4110 zcmeHKF%H5o3_LedBvc`>@du_1Onjg`%Pf6Ic}YIPFBo7%2~ZR@Re~ra6;YSAc74v} z?6`_$y=nLDWl4(_RT`|g5?h7_A6eN;5_SL-)=dK;%q=U$vOe`6TB|ik0tkQ*Pfrt3 zLlQci?_qjJ*XxBd?$CuIeD2_`Wsu?z%|tQqSId^6*>G>R$-b};&My3qc_2XV((@!v zBu+jt{Cp)FN8F=*PG7BY@I~`J=I6{^(uyg>nOUevYT~IQ&n^|A_EHaH^$JD_9;Aw$5@2qTHZj9V3H*u@&1Z2 zrtP3pZ_YU}=%nQZfENHgePCCg?A=(lH-L3pprts=Ke0#m{wMqE=M4GHSyulI8i`Uf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4ed9c35bfedcfee05c911a9d30ca2a1a96216b15 b/fuzz/corpora/asn1/4ed9c35bfedcfee05c911a9d30ca2a1a96216b15 new file mode 100644 index 0000000000000000000000000000000000000000..42c35256db5a2d54b8b21fd851ae8cdfb36cecdd GIT binary patch literal 1756 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXI1_v`HOe1?$4UieU!zL zWji0w-s~;=wVI`RX5}$5vW6WJR5CGYxF#4QtGL%Zxnt{h<=;L^_n)10E?p4C?w;au zwQ*)EL!Al4xyVlV|NpNq)Wr;pOpJ`oRtzjzpHl8THnw|u#bo-%_IJDN7};308(A0> zndKOm85md@qCs9bY5M;^3j+g#Fg$P=85j&2*jQQ(niv=um>C&BTm$L_F4)yDr_v#C z>y3mb?DS$jczHB%ApkkqU`e@`_uts1&TZ*TRLUhYaM1wvl-mzaxlE%eceGge|DRCG VC8^9sO1Zme9k_Tan|~0|NsyBLf2i$P%np7>rsm8c?Gt3M1>0 XnlD%oxpC-cy+7a*W9a4!95Da@1+0`7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/4fb2688469580df43a17a5702ac9fe1637138709 b/fuzz/corpora/asn1/4fb2688469580df43a17a5702ac9fe1637138709 new file mode 100644 index 0000000000000000000000000000000000000000..72bccc28c63b56ec4ac8f266c7df076eed6a92e6 GIT binary patch literal 450 zcmd6jAr1mj3`D0b`K*Ls){r2{Vn&mYAXgwb1|EYfB8E}IAc_Aq$gb%K+tPh*20oGNyDaVuPc>QMKFwQE{3PrM5xMoFV<$;0kiD%G&u7F uz$8|>DqqA=5c!P=!@AeF#{zlNW)JyaV)^PX9kKnactrl1pa-Tog$@tC6FO1= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/500044a494307a25c7c851e5a1b2eeae001830d0 b/fuzz/corpora/asn1/500044a494307a25c7c851e5a1b2eeae001830d0 new file mode 100644 index 0000000000000000000000000000000000000000..5f11dbb13497b95753faff22ec957dad4e2689fb GIT binary patch literal 47 UcmXqLSj?o@u$buph+-fJ0KL=%q5uE@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/501b499ccb31530d7f9c9fd1d2250b0b735c83ce b/fuzz/corpora/asn1/501b499ccb31530d7f9c9fd1d2250b0b735c83ce new file mode 100644 index 0000000000000000000000000000000000000000..2d711ef43c76d6c8b2e53459594fa1b4c698dc13 GIT binary patch literal 1093 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Ga7(Y z88omlhsw&Za2Yf#Xk=<+U;s;l0Z4CXmI%`u0|o|WuqLPxF#S|8f>I|?s(%o8Vblr3 MBrOirh(sy~02m0lOaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/504e021f251101c9772a5c79c51c0a6343501176 b/fuzz/corpora/asn1/504e021f251101c9772a5c79c51c0a6343501176 new file mode 100644 index 0000000000000000000000000000000000000000..9d276d4fc5e71be618a7df32ac8849690041fb22 GIT binary patch literal 76 icmXqLU}92ZFmPa#BN?O|di(!B0|NsCh+<)2U;qH9<_;|Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/505c2e6975f75fa9ce973d858dd1b6cba40b5422 b/fuzz/corpora/asn1/505c2e6975f75fa9ce973d858dd1b6cba40b5422 new file mode 100644 index 00000000..ecdfdce9 --- /dev/null +++ b/fuzz/corpora/asn1/505c2e6975f75fa9ce973d858dd1b6cba40b5422 @@ -0,0 +1 @@ +0€00 \ No newline at end of file diff --git a/fuzz/corpora/asn1/5094e34cb2a033ae34a01db474241eb2a98d478d b/fuzz/corpora/asn1/5094e34cb2a033ae34a01db474241eb2a98d478d new file mode 100644 index 00000000..b4045548 --- /dev/null +++ b/fuzz/corpora/asn1/5094e34cb2a033ae34a01db474241eb2a98d478d @@ -0,0 +1 @@ +04000104000003.5Z \ No newline at end of file diff --git a/fuzz/corpora/asn1/50be54adbc3f691c351c82e9363b8b9c7b788640 b/fuzz/corpora/asn1/50be54adbc3f691c351c82e9363b8b9c7b788640 new file mode 100644 index 0000000000000000000000000000000000000000..42d2ce4b1e592e2e617cbed40f4e27f95240f4e9 GIT binary patch literal 98 zcmXqLU}9p}%ftc)icpq80~@zin@8JsUPevo6n+(kW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/50bffaed4200a28020f8f3a9e0a357884b4f45b1 b/fuzz/corpora/asn1/50bffaed4200a28020f8f3a9e0a357884b4f45b1 new file mode 100644 index 0000000000000000000000000000000000000000..8e181d182058e5152a9dfe47c50b7551957f4326 GIT binary patch literal 4264 zcmeHJ!41MN3_QCi2&Ddy_`m|ZjxAWAOLPk7(>cn1{Q06pbb=rhSx%nGS-za_6k0mm zmdElQWv{EzRO}8~QWAI?>rR3!0En}&+@hsnx?Xli+L|>3D93db>@=VBMPR6)t;84q zgA%PRwBkFU5G^>F#SqeokPbq{0fn%W6FYSvWUC!o@f|!tv=DaMKJE_2IVkktXa_1p IF8((cKMy3w4*&oF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/50ee6affc53f9c4d9c7cf65e384ceda593273777 b/fuzz/corpora/asn1/50ee6affc53f9c4d9c7cf65e384ceda593273777 new file mode 100644 index 0000000000000000000000000000000000000000..12e82468c69b452243f5532b44491213561faa93 GIT binary patch literal 170 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1-U0>&Ccy@#LI#iu1_lNL2JuEl zg9RYf%%QT%EU5+!3mO(S7_f>ls@O0Xu(C0#@G&^DvN2lAfqB{*5J9M%4g)gy{|=c) G5C8!Cv=zhv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/50f8dc2527103118442044db5e16c65711aaf713 b/fuzz/corpora/asn1/50f8dc2527103118442044db5e16c65711aaf713 new file mode 100644 index 0000000000000000000000000000000000000000..d94380952a485d98cdf603f72e758822740b5773 GIT binary patch literal 149 zcmXqLU}92ZFlf+eU|@>;%g)xo$i%>)$H1V|zy{&xF)=VOBJmj+aL7}tpN)wrk^uq$ DBAFS= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/511687be8ac48f1cb468ddaff39167ba50e98aaa b/fuzz/corpora/asn1/511687be8ac48f1cb468ddaff39167ba50e98aaa new file mode 100644 index 0000000000000000000000000000000000000000..6e412709ad74930f4b1a58553ada640a40d566bc GIT binary patch literal 18 ScmWd-Fkoe4WME-{Q49bGk^s>F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/515f82c7eb64c036ad3ea97cb6893592f592102b b/fuzz/corpora/asn1/515f82c7eb64c036ad3ea97cb6893592f592102b new file mode 100644 index 0000000000000000000000000000000000000000..a69c5f4694755da25ab52210905a69317d10603f GIT binary patch literal 4200 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU zE~1*(n3$OcnTv*TV1v9i8vXb)?J$o1(Y!{us2wfX2#3*VF+yAz4bv)nH2Oz$^pDme kgrk4779ku)gRdAFd@dTzYlPF$faEnJvikj~PKEgm00t;fqW}N^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5166efed7a00f41740f5c5ce949186ca9525fb5e b/fuzz/corpora/asn1/5166efed7a00f41740f5c5ce949186ca9525fb5e new file mode 100644 index 0000000000000000000000000000000000000000..782c9d41944a74097945caf2bc6329d7866e4918 GIT binary patch literal 999 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gsIX0|Njjd420pT7#SE08rWD`4VoAj7?>Fu zKwJaTtzZI~{vQHVHiI}mAcBD*158rG3WP6AXyprp6|@Z~7(fKn_y4pAC_4Ls6&&4E VN>PZo7~;{*3X5%cbPJ&53jo^rp*a8m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/51885bd5f4e4b75250be652da8f1cbc42b451624 b/fuzz/corpora/asn1/51885bd5f4e4b75250be652da8f1cbc42b451624 new file mode 100644 index 0000000000000000000000000000000000000000..55c8a7b4661b3aad2a63c2c674a8ed6c57d13244 GIT binary patch literal 1077 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXI21Z5(244mSe*p#wgJ2dJH0ggx{C_Mm zTUfbTtyng%{_1EH7T~gB`}O@dcByk)IxC0%-@+`)u(!~}edg8Uf9|+$oxgbJ>i(=L z-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZyYg=zrTfp$I+rep zVs}q*x!O3hm7&fEi*x_~_hoZb_{H++Kns> zip+8h%nS^y4ACGjoHYIapM`;eK^Pu5j0_A04Qwo}22BhM49tuSAg;k^;0~d{Wnf^? zWME+MASva3AH*q_5hLXqG_Y|(%K&z!1)%iF*kA}sw@d~G3=D=~0Rsa>`fdOK&I-s; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/51b6305c916f51ae5ec46214d47870fa2c43a768 b/fuzz/corpora/asn1/51b6305c916f51ae5ec46214d47870fa2c43a768 new file mode 100644 index 0000000000000000000000000000000000000000..d423fa86e7cd88b43045d9337785270eb9e487b1 GIT binary patch literal 872 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Ga7(Y z8GwXXz(Qaa0}Oz4h8i?5y)j^5V1~#;Rl^McnL}6=rZvo=vN9|h1`P`uK+a-gmXv4V zVr64Iq6xE`fq{XY!4yJ4EMe59i_1u~MjcN8Km%DF8px#j83I7TD~dl7Xy^v|rHDZp T?k4brzofyS!4Q;G4Gb6nimibN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/51c934cd6f11f57bffb98e632fced14deb37088a b/fuzz/corpora/asn1/51c934cd6f11f57bffb98e632fced14deb37088a new file mode 100644 index 0000000000000000000000000000000000000000..9f43ac71646e87141ffc2169bb3e69d2a24e33a1 GIT binary patch literal 56 zcmV-80LT9@fFFPY0RaL60RRL7z%K+KpA+2VpQMK6Pe!}f5}vnluAOjP3bVOz5WWWq OrEPiB1ONa4WU31c2ovW3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5238a69b1f977a6cd6b32c3f01d3aa9ed30dd224 b/fuzz/corpora/asn1/5238a69b1f977a6cd6b32c3f01d3aa9ed30dd224 new file mode 100644 index 0000000000000000000000000000000000000000..1d49b68293f2d14e43341774fb2a901c1af336c0 GIT binary patch literal 13935 zcmeHOJx{|x4D}^d_!dPh84(jI5|{x7BqS!(0g1oSm46T+(Z9vS%1>csMfP3NG)>ZL z8(*6AUZpneP|J7r^ShT8ljvxwE~kIvlY^lOz92z<1OXx@QE(jsAYc-!$5^4h#`9=z zG#&pu1uEL-ix3XO2N)nA5N;tE(zW9Es6Wi`LRYW!Gy%AvS4^V8Cw>4xsQ4|G#K+qB zXWuj&x$Z&e6c(sx}_+rkW3G`;pO+TD8rQK;#9G z#0q0nv^Jb0OlBbNuCo=1C?!!uM`SuxtnF|Qs6%haQ7trmH8i*j75kZp4$Wc`>bYp4C_rpe6lP% zO_ooqK(``8bI$V|1N5jnayd#(D|e?kgX)OyLOBvV%L!yENwi1ef8Qt0$PTKD4?&Bs-{!?sp;AxFac8sJ!KRC4szUR8h6Y51h` zrYTPB?t_8v4q6COkCLu6Lu6W+ZESrXjaU}Vk+43?W%qbJ%auD1d5G>~mpR8)Syk5R z1adxr=Nzp%Y*)3qa=g1z_$5o~cjF4)V;)W!pqJ_q)1jDy(^X~kEuwdjj9zW@u5M#K zfbFTA(5{wah;)a}t9?ywAd+MH<;_*j<{H2|NQ)Z4O+R`EDf^A^{Mo9_Y2_WHrFY8Q zbVn1;1EbeW?j0nV{{{5FatwOb9fVSa>>Z>MowK=m+&u@0Dy&w&`pOybjt42Ef E16i#<$^ZZW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5243bcc65abd73e0d68e31795b624e3a116bbfca b/fuzz/corpora/asn1/5243bcc65abd73e0d68e31795b624e3a116bbfca new file mode 100644 index 0000000000000000000000000000000000000000..a9c94f349cc9349b3333c76d732b8441fa49ce2a GIT binary patch literal 55 pcmXqLFc4;A*J|@PXUoLM#sOw9GjK7>FfcPffGwC}gm40&Gyw221=aun literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/526a0525c31ad5f8d0335371d2e777bf3a0c7f89 b/fuzz/corpora/asn1/526a0525c31ad5f8d0335371d2e777bf3a0c7f89 new file mode 100644 index 0000000000000000000000000000000000000000..755203987c09b3b69705581d5ef9166dd19a525b GIT binary patch literal 2932 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Kywm%ryShX8j7!;Z17?>FtSQ(=K|NsC0r0M_vEDQ_`!cbLAjEoEn1`TX1tp-gD z3=GVS3?QxnJ}a6SwG0|x!}S|9-e+QDG|+$wFfua9GJtGC1|R`%Mg|5Z1_lX(U=|r< zx&QzF|3l*cW0Bdy%GGMcvU&AaN29O+mkrym@4vB2o!in`IrRS)W>JQ{g$C|3uO9z% z$93!c#XDE`XHDro%3{f~osVa4_LlwiM#2+zdNCio9Ck=h$;7DPnqZ8q;$HJ)rSHGD zcHH+-es1sBHz<7!iV2zRslp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/52aa363313fc75fe9350f89ce70c26197029d323 b/fuzz/corpora/asn1/52aa363313fc75fe9350f89ce70c26197029d323 new file mode 100644 index 0000000000000000000000000000000000000000..c5193f7150389f8dc2f53ac6580606c4ddf21936 GIT binary patch literal 198 zcmaLPF$%&!5JurQv+E`j1VKA3(wgc|Yi;2HJkV4*hk6ljrDd!nLBv;oJVj}`;XJ%n zwp^P(2!&hM$L-?A)dMYxA#_r!y`l$v8+`X1GjlObYgHuyyE^mpdf&LAl#P!h14?iJ I(*JW$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMzN^SoB##C9|DObdK85j)=4Gawp42%s7qYT^)T-lg4WMvr{ zeOasxEEk&JFf|l0U|?uq02{-^{MX#v49;OPFtcDVKyb~?&5^i&!CbJ3p|Zl1mLZK|G3=M3|(C}c?2Fn{T7%XT208iaMbpQYW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/533c550d20c0978d5dfeafc3b2d5a8c15176c91a b/fuzz/corpora/asn1/533c550d20c0978d5dfeafc3b2d5a8c15176c91a new file mode 100644 index 0000000000000000000000000000000000000000..39f03f56a9caa248ef377cd18631fa6f5fde47c4 GIT binary patch literal 22 dcmXqLFlZ3uHQ;7rp6?Q)ACg@R+>#KngQf*pM&eS*G@I91xT)&_)v8Ki%P zwUTk8CjyD7is%eS~0UtwbyV2J4WLkl4I=rKVAy6{#RKi>_IbO04A` zvP%6-#1odbR(xt=*2=r^8Gs}JHpn>O&Oy*Qm>gsBNG>6PLyPZmcMiCBgYI#E_ghH= z@LJ!_>QI(7@&r-e&bWo&<4`bOXSX5{9-4PApT Dgi^wC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/535e40feca581cfc47ccbc9d7c66597d1a2f8db4 b/fuzz/corpora/asn1/535e40feca581cfc47ccbc9d7c66597d1a2f8db4 new file mode 100644 index 0000000000000000000000000000000000000000..860d294e145ac2aad1c9a3c2fae86dc084bba014 GIT binary patch literal 788 zcmdr~F$%&!5S-nMry_v^n^dBuNizg&g!CzVhvXR>!TiK`*jf4=%g7yeR(6tESY~0F zVcDViRXMc7E0<*uy~CJFm85yC96-iswpC( zgg^r?^l`v!(j_BZ6; zkh=z^VOab-jCR2k;e6;OXK?5+`0B>u^sVQ2Za##`2X%EbQzA^MY~w6|xrF{xnCKEz fI=u$vY>hK0cWZuXW@IY-XPBo7KfNa>Os>Lbf*`4y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/537b291841128849f1bb70d0da75029ccf3ad67c b/fuzz/corpora/asn1/537b291841128849f1bb70d0da75029ccf3ad67c new file mode 100644 index 0000000000000000000000000000000000000000..6ee706dde9ab0528bbb958757257b958c129761b GIT binary patch literal 19 XcmXpI6z4ZKGBh$W1QEJMMg|N39$f<) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/53846b4c31b64311c7a0444ecb28ab52388e7d73 b/fuzz/corpora/asn1/53846b4c31b64311c7a0444ecb28ab52388e7d73 new file mode 100644 index 0000000000000000000000000000000000000000..cbab3edef8605d416f6fd1b3d6698de203ec9de5 GIT binary patch literal 799 zcmXqLVB_{^(`x(9%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B52jlgUp0|7R6 ztu~KywoHs{tlEt%42sNh49pC8fk6WsORGT>0|NsyBLf2i$P%np7>rs$pMWwQjSE7F I)}Vn605_&o7ytkO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/53a0c472a08b2c3ce4c77abc1499f9771eb6bc8d b/fuzz/corpora/asn1/53a0c472a08b2c3ce4c77abc1499f9771eb6bc8d new file mode 100644 index 0000000000000000000000000000000000000000..7a16b58217ad78e868e4822b53ce032dd578ed43 GIT binary patch literal 172 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}dZ5roR=Fc|2tF)H$?|JdJ9 wx#7>I#sw|fjVugG+H8!htn3_(f9A9|G&FqZ>8Pt@Yi1HPWB>zp2*tnv0B|KHeE$t2WtyM%^2%Us5 znZ-q4y+QtXQRSO$@(8!Y`%ilj9v)c`>o%QhC)IVUDeioDE}n7&UmhI)g5AOI{# zD=uxWFMh<{{SQr%)&v)x0cZi>6#U??7`^zt^cY~Sr_ip~)jexgRmFFe;(9v7>2JjB iiTEC&m)$9%onqP96fL4Vqr6k~mc5gCnFVg=fII*WLrk^+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/53ea2e73442833d7cfc57b1d250c2db557ba8410 b/fuzz/corpora/asn1/53ea2e73442833d7cfc57b1d250c2db557ba8410 new file mode 100644 index 0000000000000000000000000000000000000000..9166674d0cd9403467ceb433af5925c8c6105d72 GIT binary patch literal 672 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWh1 zH!>P50I6mUm6c&(U|=w4U}Mx~VPt`@)L0l1Vh|Q{sH_CBq9Bv7=$BzcNMJV($q6V% wNWdKkcMML$^pWgFcLc&zkiSWB4uv5?XX_CDM6gJ80!jp+2P8hj&>{c~03N$Z2LJ#7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5416c6fdd63767d639d3bf6919b019777e6f5399 b/fuzz/corpora/asn1/5416c6fdd63767d639d3bf6919b019777e6f5399 new file mode 100644 index 0000000000000000000000000000000000000000..44f81789431db1b4c3b741f183df1855cdb027a3 GIT binary patch literal 35 WcmZQmWMIg{0RQv;L%_tN<`w_~h!PI~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5419ab4d398136ab62c494af4621fd6bd570bf9f b/fuzz/corpora/asn1/5419ab4d398136ab62c494af4621fd6bd570bf9f new file mode 100644 index 0000000000000000000000000000000000000000..b29d99125ced4262619115ecfb4b1724ae860ae6 GIT binary patch literal 4 LcmZ3?#K-^u0+;}& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5430a880389769176b28a54f8dd3a7a65c6be0ab b/fuzz/corpora/asn1/5430a880389769176b28a54f8dd3a7a65c6be0ab new file mode 100644 index 0000000000000000000000000000000000000000..b2be98fab5a850f77804f93cef82351fb765f05b GIT binary patch literal 49 WcmXqLU}BwMV8Fn@q|(4Z3;+OS5duyC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/543dea5d607a62f9e9bdf57458eb21b8e5008058 b/fuzz/corpora/asn1/543dea5d607a62f9e9bdf57458eb21b8e5008058 new file mode 100644 index 0000000000000000000000000000000000000000..e7f8e9dc26dd73aee803731a3d1f2360b2f7e4d0 GIT binary patch literal 597 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU eE@EO3q>k5^n3>RBlucF`F`XLpft{|^<^cd-2w0y0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5483b3891a0b4ebc5fd8ca11fd71d95af4946107 b/fuzz/corpora/asn1/5483b3891a0b4ebc5fd8ca11fd71d95af4946107 new file mode 100644 index 0000000000000000000000000000000000000000..ca8fcc22f29790b597180c5441663b4f04fa1b5b GIT binary patch literal 4 LcmZ3?#Kr&s0-^w{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/548fc6979a821acd8a849d61b276262b5e5efc77 b/fuzz/corpora/asn1/548fc6979a821acd8a849d61b276262b5e5efc77 new file mode 100644 index 0000000000000000000000000000000000000000..7d011bb56241b1c8f63f230f0b688212ed6babbb GIT binary patch literal 860 zcmXqLFkoh5)WSu?;gZ0qgG>o(TQrEx8^lf{Hu9+G1u7Z^c0IMtBQ{9TEoWe0002f< BMTGzW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/54a980f0365f819688866d57ff604e242b5d57e4 b/fuzz/corpora/asn1/54a980f0365f819688866d57ff604e242b5d57e4 new file mode 100644 index 0000000000000000000000000000000000000000..edbde76632009da7706172501a0a3ae771bf951c GIT binary patch literal 201 qcmXqLSkS=6#AdLdp_KsyU_4eh&&^-~5)Y)3I5~1vlB$ml;z9tnuO|Kg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/54b8ef4662b0b652f2b3c56cc9503a8aa029e389 b/fuzz/corpora/asn1/54b8ef4662b0b652f2b3c56cc9503a8aa029e389 new file mode 100644 index 0000000000000000000000000000000000000000..2ff56a06e9564e32b9c23f55f4306de91989a7ab GIT binary patch literal 70 zcmXpoG7w;6*J|@PXUoLM#+t6p$il-c$H2^h75ryr5P(R0|Hkn1|NnoC3=F{x3=9A= Cc?!?~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/54e58510eb46c9112cef56422e5732bf2b280fe6 b/fuzz/corpora/asn1/54e58510eb46c9112cef56422e5732bf2b280fe6 new file mode 100644 index 0000000000000000000000000000000000000000..16bdadf03cb341ee8c673f45564bf068ff2ca6f6 GIT binary patch literal 1224 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3em&~94f~8tO>5%{KmDm4mKPLUd zI{f*u70X2VS$;QvyL?pcFq3JBaFp0Yqi?03*J&qS*Lwd+iCJ>)MGwZ~Orj0b69W20 zmATJsnzR!f0)(9QGu(&Umc1!GFfzPv*Of^BXNBwnjSX8o#R`>Q_-Kd;Z$Hmz)N^9l zLmRQG?vR>ZjR%X@$!Tw1Ryr|naXt4hMWdvTzmuvMRjkh}`M7UI;DpW<&G#QhJWp(US?pHd+p_tQL-~R8zb+=9+O`&pk_kA~H z`;U?~nDrS9bVNj07l*!o@?n`oW-I$rZA+^cmy(x+F^OnQe!pdhV|8WGPw}POEev3Z U&2u!djV3no5}OF?V)O(C02rI%djJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/552e135139ce553425dd01fcd5da072ae28c945c b/fuzz/corpora/asn1/552e135139ce553425dd01fcd5da072ae28c945c new file mode 100644 index 0000000000000000000000000000000000000000..d01ec856c8fec0e15172dec18fba7bd79de203d8 GIT binary patch literal 84 zcmXqLU}BuZ;=lj_IdTjP47Lm`|Nk>EXfbFvva~WVr!Yb#p`ZcA009_hK?57Bb|VV| HJ4h4&zvKx9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/552ec71d9f7c63fc0e8c76feef3edbe1f3d5bb7f b/fuzz/corpora/asn1/552ec71d9f7c63fc0e8c76feef3edbe1f3d5bb7f new file mode 100644 index 0000000000000000000000000000000000000000..07dfc5c4a020510ca3ca45a31bd555a05c3a0cc0 GIT binary patch literal 1249 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOr9o4R!LVVm026c1e+C0~Hb&z%CPr%(2CxXj zRFH@f8xx}eRD=;jgi>7=P?K31VYb6WNV6TLiwJYhfPKM=>@Rxwf&>?m=y&qsixl_Z zi+2*tp;pM}Fu>C)F}4$<2AaaDCM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 zHji_*OpI)->Dr7ejLd=z%>N<4lK}w?8rWD`4VoAj7?>Fu7#Kh%lWs1P55hnw7_#P4 R9vY*e3`uPmsREH&8vyMxX50V( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/55583654e419a9c98405657c045efbbddf6671a5 b/fuzz/corpora/asn1/55583654e419a9c98405657c045efbbddf6671a5 new file mode 100644 index 0000000000000000000000000000000000000000..fe9182317f6b29f9b023d978a4db295725c02831 GIT binary patch literal 63 wcmXqLkY{3?!=lB&!Ti(=L z-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZyYg=zrTfp$I+rep zVs}q*x!O3hm7&grN%k+2_5c6>7hCjT#|Jy%yPB>sFqBtDVuA<@ZqB-|3QAs*#K6pe45a^qfdH}?0|Nj#1PT@a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/56257125f7be8441b86bf709042966d4a7e7fbca b/fuzz/corpora/asn1/56257125f7be8441b86bf709042966d4a7e7fbca new file mode 100644 index 0000000000000000000000000000000000000000..a3cf0ddb7297fb7dbaa059240c53bce58d985dd9 GIT binary patch literal 2002 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^70lOTVPs%nfXI!q$qfe_LC6)$70bY&#lWBrQNXA@ i8rq|&ZbYSl(ji)^jFytruN80@IZR4P61;(;6a)Z%*zrUF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/56541cb263269e274c6e691f6ce969a6dddc0326 b/fuzz/corpora/asn1/56541cb263269e274c6e691f6ce969a6dddc0326 new file mode 100644 index 0000000000000000000000000000000000000000..ec8394b09c49a22fe87c0134cd136b13d223c600 GIT binary patch literal 1234 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyakztg|VSoaV=Flt=rZo5X(x6w&|nXeLtKKysb<{QY|d cFsNcsU|>ksW@KS)WlmsR(7?tD;&6cE0A$`H#{d8T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/56d3535c6dee61c964998bd6b99bf849cd33973f b/fuzz/corpora/asn1/56d3535c6dee61c964998bd6b99bf849cd33973f new file mode 100644 index 0000000000000000000000000000000000000000..2c2c4764dda5c1dd6b99cb7fee55b8dd501653cb GIT binary patch literal 4275 zcmeHJy$ZrG7`!B!Dk2nIoLq%=IUF1WcLyKD$B2r36Q9F3@O9io(qGXZ#fPDF;?Z!LGhcB9@UBY?q_E3cfiXha7y}KJib)$+GUpxTI CQ}MpF3jhQF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/570ed7707949ec51856ad54514bc7de472a55e9f b/fuzz/corpora/asn1/570ed7707949ec51856ad54514bc7de472a55e9f new file mode 100644 index 0000000000000000000000000000000000000000..0bacbd410c2d5ddccb8cb890df9fcaf039ed57b7 GIT binary patch literal 284 zcmb7;u?>JQ3M<0Q$_pHdgjViU1`bH;D4=xBtwAW&k0~rC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/570f7bae960dd16e1d4941c98493eb5cdd1f7083 b/fuzz/corpora/asn1/570f7bae960dd16e1d4941c98493eb5cdd1f7083 new file mode 100644 index 0000000000000000000000000000000000000000..d15c47428590b4afe350056146bff7ac22e58ee7 GIT binary patch literal 4376 zcmeI0u?@m75Jmsl$Ot4lBpO%%noB{&0xXb{1(@P!n8QrsF_<9|JuQj_MNoq5kOpy1 zY5U7Qy?;3$i<_*^`}2K9W8;OzkQ88Xh8egB$IsCQ1b|OiP*E>qakgA7M^hGWJpsYs zIqJ>jac*u5*tjb}!vwl|q-b;;!UV#bK-K|-3W%4$S+`oZpD5trcDr4VOVCp&bTz}66q*Un2m@?L%F|9xPysUrNa|Bq9z{IWs TW!z=k*=eY{XS!aT&9=n@se~@& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5729733ee810b86380e596482213cc44752e4797 b/fuzz/corpora/asn1/5729733ee810b86380e596482213cc44752e4797 new file mode 100644 index 0000000000000000000000000000000000000000..d48266c67733737bbf9ea51805250a818796eaa3 GIT binary patch literal 430 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU+rhU}9ioY-j)i))fp43=9BG2?Y57 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/573bf5b58332a60c9774262f7619c2e61248881d b/fuzz/corpora/asn1/573bf5b58332a60c9774262f7619c2e61248881d new file mode 100644 index 0000000000000000000000000000000000000000..71ea90769afdaf4a46488662110a1672b0831910 GIT binary patch literal 12 TcmXqLU}9imU}E`S|NlP#5QYRd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/574d8800f696a16cc19206fa592352a4d6e75cb9 b/fuzz/corpora/asn1/574d8800f696a16cc19206fa592352a4d6e75cb9 new file mode 100644 index 0000000000000000000000000000000000000000..29a4b46da756b24001d5e670ef99705234bcfe70 GIT binary patch literal 2581 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Ga7(Y z88omlhssK`fCU@am;+^H7#X$U+)!B&B(^eG>LdfmSZ3K!xGqL*76upq*%)fj!1Ts| zfq@xfD%ci67KhFy&th6RXTZWiR*|d-fQ3T0olHaVW!FLG99U&Ser+I(=! z_SrucnJw_ZHN+mcMgtJI8Yy=kn_v%I#Q_UkaKORR0X%R~0nWgMq}Q?AJsaLQ$Zrrf801~lc87r2_}#R6G@D}$q0ScO?EpaGnL3oRC)fs0fuLdwIh SRiA(Rz{|7C`==W)7ytktB2g&- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/57831e1b76ade25c2a00f4171ba60467215e0bc3 b/fuzz/corpora/asn1/57831e1b76ade25c2a00f4171ba60467215e0bc3 new file mode 100644 index 00000000..6f1e0129 --- /dev/null +++ b/fuzz/corpora/asn1/57831e1b76ade25c2a00f4171ba60467215e0bc3 @@ -0,0 +1 @@ +0 0313041304303 \ No newline at end of file diff --git a/fuzz/corpora/asn1/57843ca4fc8bf340f410d86b96dcbe83b81fdea9 b/fuzz/corpora/asn1/57843ca4fc8bf340f410d86b96dcbe83b81fdea9 new file mode 100644 index 0000000000000000000000000000000000000000..8a95e23107d7648e35e76b7a2910f42db0a61754 GIT binary patch literal 19 VcmXqLU}92ZFlf+eU|?i`0016)0yqEw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/57935548e32c44b7d9b9a44cc1f42d9d44f1f70c b/fuzz/corpora/asn1/57935548e32c44b7d9b9a44cc1f42d9d44f1f70c new file mode 100644 index 00000000..85d1d2f6 --- /dev/null +++ b/fuzz/corpora/asn1/57935548e32c44b7d9b9a44cc1f42d9d44f1f70c @@ -0,0 +1 @@ +0€0€0 €0€0€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/57c570c7d7c18581658c2300e5063d3ecb6ba303 b/fuzz/corpora/asn1/57c570c7d7c18581658c2300e5063d3ecb6ba303 new file mode 100644 index 0000000000000000000000000000000000000000..1d7f283a9fc6ebd38e5b80618a7669d2efa6bbda GIT binary patch literal 4464 zcmeHLF$w}f44h<-6%Xtb8?EfLiH{KcfcOVrk!|iBCw|Y~R(4SkJcQ#ak4f51V27EI ziFurEn`85s$wXT>SMfc}qnZI%w~|qI5CE326wA-dV>qo>Rc(Hgg`73v9l7{$nd{wv zP^w-%M%Xp^-WXDiofC;n>dhohb!w?oOM}Nc8&Hj06S*qW bF3>X3Hqtu({rTXR!T;K!HdXy`2Z-SbkrMgH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/57c8036be9ef79254f38405a584efa9e82638ca8 b/fuzz/corpora/asn1/57c8036be9ef79254f38405a584efa9e82638ca8 new file mode 100644 index 0000000000000000000000000000000000000000..8539074ae38e3de011fc75bf40b037f8f0403907 GIT binary patch literal 662 zcmcgqI|{-;5PdTnS49E~HddmgN%IKUDCtvp4)GYHU~b|$>@2;GWn|aVDqx&}`M~hr z{Ahkwv`zcUWg0~9FeX(cXM~KHu>MXQE@s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/57c8e58fdfa8e08de5cc41935d47e006b73529cf b/fuzz/corpora/asn1/57c8e58fdfa8e08de5cc41935d47e006b73529cf new file mode 100644 index 0000000000000000000000000000000000000000..b61a870c0322edbb01faf9a0915450b5a4646cd7 GIT binary patch literal 64 xcmXqLkZ)jOoWr8U00SH_1_J|wHI!Y&pb*NT#mJ!5%B;e;pn;85yO9N=5CF#N20Q=& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/57f348adbb25e99a2a2b21187be4effe9e36612e b/fuzz/corpora/asn1/57f348adbb25e99a2a2b21187be4effe9e36612e new file mode 100644 index 0000000000000000000000000000000000000000..7fdab99be340cfd478ebe1983945bbaf9d308030 GIT binary patch literal 508 zcmeH^u?fOp6ol_y;v;`F5EoFel2k8Ch$Dz2xPS;2j}#ffIzoo9%TOuONCd(B(TKxTiIkPW&O+G6ymWI7MZF&~ri@mCIpZEF zkFmJ|tsl@P<2x$ifBVj0@j>YFJ1f9k3FQgsIN5yNlAZy8a68SRXUHLU5~vW*rgm>` CKRea{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/57f99d6110205bbd284f5601601a72379a069ba3 b/fuzz/corpora/asn1/57f99d6110205bbd284f5601601a72379a069ba3 new file mode 100644 index 0000000000000000000000000000000000000000..559844e07921c608ab9b0cc1677954f9fac2b565 GIT binary patch literal 1472 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1H!>Q6 zlo>RzF^9^^uy7ePENEnE{Qn;$4-r%b2`*}6YGhylYXSq1iJ@5{Om7Sr7?{CEK@4eR j)IJ3_*+6{M@X=rarL)o0GMb4-%N7O$teF7{z(pwls%RzW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/580f25d393c1f85a458fa601d3319deed2ba4536 b/fuzz/corpora/asn1/580f25d393c1f85a458fa601d3319deed2ba4536 new file mode 100644 index 0000000000000000000000000000000000000000..5cb113bef4b5c4a5c05cbb8a45fab9bed9d4cf09 GIT binary patch literal 76 rcmXqLU}92ZFlf+eU}HMi#Lm{>#Kgd0!@z)xpShQTK?g}5q!tDMNiPj$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5815cf152ac9e23599c29b357bdaf51a34eb3dec b/fuzz/corpora/asn1/5815cf152ac9e23599c29b357bdaf51a34eb3dec new file mode 100644 index 0000000000000000000000000000000000000000..3d342f7ed8200fca4d5c5363ad71c6e87898698c GIT binary patch literal 380 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOQOmGlVF(i=!vdxT1_M?$Mg{{00~Z4Y0~vz` zLk0#0CXogP6u`;I@a;bf14M-&Oa&7og8_3nBZC1u8#4m~gERvR11Y95GB9w`$kcjj RyA=@vsJ_P?YMkHx0|1_aFrWYc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5824874a40e42a8d9e6ee56c253d4b6057484e0c b/fuzz/corpora/asn1/5824874a40e42a8d9e6ee56c253d4b6057484e0c new file mode 100644 index 0000000000000000000000000000000000000000..bcd36cf960391ae8f794b7d73e41b3ac9d39f95f GIT binary patch literal 6 NcmdnM!qUhf000Hu0ZIS> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/58264053757f8acc7d7664be70c35f0a0f320211 b/fuzz/corpora/asn1/58264053757f8acc7d7664be70c35f0a0f320211 new file mode 100644 index 0000000000000000000000000000000000000000..22669e8f6812261ba4d8c69d4235da5be87aaf58 GIT binary patch literal 1107 zcmeHHI|>3(44mXiM8R%h8@+%w;~^Hjz~UYD6nV{_L+@vAD+wzI+HbK=%FGN2`Os~1 z953T@Cu_YqUB%C!o07oYnPGB*0ANKc3>w`^f7q|Kbgz)BR=g47ZfNvDprmT@2m`eB phe4_%p9q65@$3aGy?y)7Z;|U8pik4!9f))Od4+KCUJ!YFRBeM?4mEC0$rx9n;3HBZM z!h@J0A7?ziGt(AaZhagq-JC(kxsN4cjcOgNZ{r~^~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/58c3534a7ec42a4c4fe9014dc04c080bf1ad7205 b/fuzz/corpora/asn1/58c3534a7ec42a4c4fe9014dc04c080bf1ad7205 new file mode 100644 index 0000000000000000000000000000000000000000..08cab8c9cd957c9f42bd431ac36affc98f089340 GIT binary patch literal 1268 zcmd6lOA5d+2nDr**XXiz*WRv6k6!wbU?T)0gw8f(eDP(ISs0I9P+=EJ^ZKnlZSBQP zqx4E0M$B29xfbTco1U$#A4Nnt*)(k;@(OM72C+IPYWR!5yPIXikBIY&RH@o8N^{I! I^@sofCk9XxKL7v# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/58cc52aa820845031923f290462420b9e9064ca9 b/fuzz/corpora/asn1/58cc52aa820845031923f290462420b9e9064ca9 new file mode 100644 index 0000000000000000000000000000000000000000..60af9e74b3072d4019b781d31f2db888609f4f76 GIT binary patch literal 1868 zcmXqLSlD2|z`!8EV8F1j!JxsQfsN6Cg@J)#lrb6zqbXrD7mVhD(OfW^3-IRxC;$L= CPQXe4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/58e326d69b45ecb51fa44488304d145cc8e29d1b b/fuzz/corpora/asn1/58e326d69b45ecb51fa44488304d145cc8e29d1b new file mode 100644 index 0000000000000000000000000000000000000000..32834e5f117ee5907b71685a3aa09bb86ecdc9d3 GIT binary patch literal 90 zcmXqrFc4s4*J|@PXUoLM#;V=O!l2CT!obV`0R|BUAjW$r7YsBJ96<=v3LydmJd6OU C!v-t> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/591b887407612c85f9f26772f9414dbf0c375eab b/fuzz/corpora/asn1/591b887407612c85f9f26772f9414dbf0c375eab new file mode 100644 index 0000000000000000000000000000000000000000..b2a6e1edec264eb9f7b5158613780e1a8374d546 GIT binary patch literal 401 zcmXqLVB_{^(`x(9%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49vU?3=B&d7}6L_jsE}tZ_r>M3|4i_mWh#(fx)1GjiuF~ WiGhKEnUMj+H6X(Z2E1T+SOEa-05aA9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/592203690ac8e57c438fcf8e822548087fe08e09 b/fuzz/corpora/asn1/592203690ac8e57c438fcf8e822548087fe08e09 new file mode 100644 index 0000000000000000000000000000000000000000..7d1924e5997c9cdd9ff988c20cf154c6b836ee3d GIT binary patch literal 350 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOr9o4R!LVVm026c1e+C0~Hb&z%CPr%(2CxXj zRFH@f8xx}eRD=;jgi>7=P?K31VYb6Wh_M}_2IOX#E=+Ssa-pUH3j+g#K?56O1Ovl< eMsS$zsO0#}$jQLK2A1Ib%*_A;O$;E_AOHZvWjMhA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/592e6792fb5279a7de54939e69553e9ca4d486fd b/fuzz/corpora/asn1/592e6792fb5279a7de54939e69553e9ca4d486fd new file mode 100644 index 0000000000000000000000000000000000000000..16644e7c29e2b9360d8f3921299cd53a6e415946 GIT binary patch literal 38 jcmXqL5ac!BW@F^!VblCMzo`Ym1@V?`WnftLpOXOqu96Cs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/593aba59b994ac20a82da4734df4e0bb87483d65 b/fuzz/corpora/asn1/593aba59b994ac20a82da4734df4e0bb87483d65 new file mode 100644 index 0000000000000000000000000000000000000000..76925faf49446946c86bced07473a4c819e2f820 GIT binary patch literal 330 zcmXqLVB>CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 zHji_*OpI)-+Kns>0?cX*ObmnpBS?us0~<@LK@$T512c#ZvJR_dru4Lo3O)k>dmSQ4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/594460ed92fee2b836d5bbd550b7f85641504a82 b/fuzz/corpora/asn1/594460ed92fee2b836d5bbd550b7f85641504a82 new file mode 100644 index 0000000000000000000000000000000000000000..dc59cc77f09883cc3dc5937c0778462a45e1fab2 GIT binary patch literal 10 RcmXruU}j=uWM*Pu0007Y07U=* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/595e7d328ad47d8dbc038bf544a2ea92018353d3 b/fuzz/corpora/asn1/595e7d328ad47d8dbc038bf544a2ea92018353d3 new file mode 100644 index 0000000000000000000000000000000000000000..3b2bce097c30a102aefa6e0fc80fbf6818fff238 GIT binary patch literal 1492 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUsp z0Fopg07^m34B&)g0!};V35e_jh{xdrnwqKVE~*+fngj=15@bdyQ1L`HBJV+SS_2yk E008ayh5!Hn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/59726fd1515107a47b64eade45cf9dbd2dc8619b b/fuzz/corpora/asn1/59726fd1515107a47b64eade45cf9dbd2dc8619b new file mode 100644 index 0000000000000000000000000000000000000000..a10e111bf49390d7db5dec3eb4e3b0997616ff66 GIT binary patch literal 48 xcmXqLU}92ZFlaDnU}IXwz`(%5z`(Eo#A6PXm0{sBXjst5)WE>Nz{mgw1_0Pt2j&0( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/597294f97b46322640a27f838eccea4d10f28806 b/fuzz/corpora/asn1/597294f97b46322640a27f838eccea4d10f28806 new file mode 100644 index 0000000000000000000000000000000000000000..2a06391cfef0db4c6fa16a6a4c9ca1c21c17949e GIT binary patch literal 129 zcmYL>u?>Sj5Cr%BpF_4pjF7OL+WutS1r5;8M$`elP>yq_=m_kcY&9CnFRx`m|>#WgwAu;wa3MNSHNMP*YeY?7~}oCv{BHzn7ELFq6V<@45<^Djfx(M0$A K|A(rqHS@!DcI4A=`WeEd;?b$BKfviRbVJxsGKd5!6Nm8TkBZ=JAG6 z=RSpWU&yQ%b3l^m!d{<3JQ)%5v+PxA-HJTk@r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/59c819f335e7ffb61c423aa7ea1107cfa9c7efed b/fuzz/corpora/asn1/59c819f335e7ffb61c423aa7ea1107cfa9c7efed new file mode 100644 index 0000000000000000000000000000000000000000..554a5fabbe38f04c270f344f0336aaa78af195b1 GIT binary patch literal 82 zcmXqLU}9`AWH4x8V=^#eU|85-0ETRg+6;^g3=9U14C0Ii3m{_5p|Ub8Tm}t|j0;;C RnHb;zq&d`pfq@yU0|1-Y4b1=m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a20991fc6c2329901f2a274965aed43f14783ad b/fuzz/corpora/asn1/5a20991fc6c2329901f2a274965aed43f14783ad new file mode 100644 index 0000000000000000000000000000000000000000..f5b86a0b2a09ea930f680f9713b1810fcc64f11d GIT binary patch literal 2759 zcmeHJF$%&!5S+b@ry_!)g{_sM%{GDr1i{9i*yIl$g87!d!0(8aa(4*{X}zGuO`5$T z!!Ub$vtslhr&azu4*MfYZ!qFMr9{MNwPrvdW=83Z#Md&>-Bo^k>=fyqD;QJWg2l+P z{v%#!VBR=q#aWC_u5tmu1i)&j6L|$vDHv4>I;S-y#A7h9FX=O2VQa^`3BY^z)PeO{ z7ywDBJA@Ah>%;r)C^JCWA_Q;4UkC5+nZNE^JO0M|z+-xk?<+UF5BZy9zW@LL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a2d810223d3cbd6794e48f5f131d53316c0b114 b/fuzz/corpora/asn1/5a2d810223d3cbd6794e48f5f131d53316c0b114 new file mode 100644 index 0000000000000000000000000000000000000000..63a7b4e973d10e7d4c5ce20e92fd4ee1709e649f GIT binary patch literal 52 jcmXpoG7w;6*J|@PXUoLM#;V=O!l1w`$H2^h8wdaZo@)ce literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a35b27062ec9eeebcc417591f1cb71d8ac284e2 b/fuzz/corpora/asn1/5a35b27062ec9eeebcc417591f1cb71d8ac284e2 new file mode 100644 index 00000000..d6fdeff7 --- /dev/null +++ b/fuzz/corpora/asn1/5a35b27062ec9eeebcc417591f1cb71d8ac284e2 @@ -0,0 +1 @@ +£€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/5a6dd06008fa3ab025ce805096e1ba7838b7f046 b/fuzz/corpora/asn1/5a6dd06008fa3ab025ce805096e1ba7838b7f046 new file mode 100644 index 0000000000000000000000000000000000000000..5cb68ac913e6121a957e863e045429e1f01d5347 GIT binary patch literal 36 lcmXqLU}92ZFlaDnU}IXwz`(%5z`(%7)4pb0RU|-1(5&% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a6fe02237986049540b48e21403a3e3e09b77df b/fuzz/corpora/asn1/5a6fe02237986049540b48e21403a3e3e09b77df new file mode 100644 index 0000000000000000000000000000000000000000..7bf9561efa723eb76f4e324eb0feb6a7a7e2a505 GIT binary patch literal 1139 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RO0|7R6 ztu~KywoHs{tlEt%49d(d49pDV0b!U~ii`{l1`TX1tp-gD3=GVS3?QxnvO`84Ga52r VFq&p?fk72AU|?Wm@Dnvt0{}4$Y777X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a73fcc8e2c9b399a948d042180cbab507926839 b/fuzz/corpora/asn1/5a73fcc8e2c9b399a948d042180cbab507926839 new file mode 100644 index 0000000000000000000000000000000000000000..0e962368dd8abea926e7a75b8a54ec281aa625af GIT binary patch literal 1500 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+tPIir|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*8ratO^jLwjj!SQ4I1w=F)|uxKm`~XnPeG2HX#EB1Yk4>W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4&^H@3gqWjAnv`yV}Y p;cjIZ8iD)Y7v^FdfjgRV$xpci19upwTuoXR3j_lfXUfGa(*V(RXm9`k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a7c149a6b785ca4a56c54912837dbd650176533 b/fuzz/corpora/asn1/5a7c149a6b785ca4a56c54912837dbd650176533 new file mode 100644 index 0000000000000000000000000000000000000000..5883bf22bbd7b5602162e4b8ad4224e17eeb23fb GIT binary patch literal 44 rcmeCsYV&A24+9Pi?+tWKuU@@+)qsTwL|wgl^=?B$Lqr4v6GH?5J-8Rs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a81605eafb24a7ea792c2a7f71c490c7afdff2c b/fuzz/corpora/asn1/5a81605eafb24a7ea792c2a7f71c490c7afdff2c new file mode 100644 index 0000000000000000000000000000000000000000..ce491affc1ab696cf4e87eb6c45e1f5044809a0a GIT binary patch literal 361 zcmXqLU}LN>Y+zzCFfd@i0~rmN7#T=M225mXM70Zt#k4gY)d@Jc;DBK=Kz54(6XXB? M1`J@ogQP(K0LUf^z5oCK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a852014eb675e1c384b4dc991fae59234e75faa b/fuzz/corpora/asn1/5a852014eb675e1c384b4dc991fae59234e75faa new file mode 100644 index 0000000000000000000000000000000000000000..354bd085f1c5839d8386881295c95063bf72fb6b GIT binary patch literal 10571 zcmeHN!D_-l5PiF`TZ#yQUOW|g6TJ*VFBR_|{EpI(=wVxE{-odG%}b%b)8k5#vQ!jZ zF&z^7CWj;t7-nAHyxG|m@A~6nQG5@~O>XQ8UaHGl5%JDWGC&}HXdZ_~s^_WX?s{A- zzUJ1rtI2B*_t_n?0e}zS2@lf{g80wd>Z|qK8Uu)Ty?1#7kQtP(a=HtP9NV_6U!SX6 z6E1e5kUEMoRz~p)Zeo$h3nq$*DvdSjh+eSL?iW@Tki-I_sokTx@j&w(2;okIn~6$H zlqN5tb-FVryAQAR6sV`*LV*_wE-oWc3Q;JyxD2?NC<^P(c#k75j=WBv(`uGMwrXtE z8kzi4^;)QUWH;GOcE>$dg&H;c`#n|#7n&VNv`&w_qIEiomg&XIc_%13xg(}fqsZ>W oR!sp57V|_b_|qmPO5vx~#G+-AbmpPH|0_u$gi&0KVc%Je4IBHhK>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a8531047581852013917a802024c9196b384195 b/fuzz/corpora/asn1/5a8531047581852013917a802024c9196b384195 new file mode 100644 index 0000000000000000000000000000000000000000..f754c0932e40b1efb72fe77b2e4095feb3ceba53 GIT binary patch literal 39 VcmXqLU}H2`&|uKO#(*6{003g40{{R3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a89a82efdb68999eb96c2752b84695150a8b106 b/fuzz/corpora/asn1/5a89a82efdb68999eb96c2752b84695150a8b106 new file mode 100644 index 0000000000000000000000000000000000000000..e095517d7c718848401283c06f508a8b9d9a72f0 GIT binary patch literal 7 OcmXqDWn%u%U;qFFxB+Sa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5a89e729524bb2b080f90a9169f72359358bfe4a b/fuzz/corpora/asn1/5a89e729524bb2b080f90a9169f72359358bfe4a new file mode 100644 index 0000000000000000000000000000000000000000..d289ee80cf5a4097611ca56ad09ea239dfeaa8eb GIT binary patch literal 129 zcmWfrH)vqv)N1o+`_9YA&a|Mxpn-|8!H~hAfsM()fPrCQg8>+_F={g~GB7Y0Fo=W5 c1~#Tpg9fHI1`G_$U|}K^!GINn!O&m;0F;3j)Bpeg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5aaab58b4acf0c6cc62e7b4cf85d8cab02de4e97 b/fuzz/corpora/asn1/5aaab58b4acf0c6cc62e7b4cf85d8cab02de4e97 new file mode 100644 index 00000000..7d54d18a --- /dev/null +++ b/fuzz/corpora/asn1/5aaab58b4acf0c6cc62e7b4cf85d8cab02de4e97 @@ -0,0 +1 @@ +0€00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000î00000000000000000000000000000000000000000000000000000000000000000000000000000€0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000î00ú \ No newline at end of file diff --git a/fuzz/corpora/asn1/5aae243bcf48fbd303f3d531598f0100a84e3f24 b/fuzz/corpora/asn1/5aae243bcf48fbd303f3d531598f0100a84e3f24 new file mode 100644 index 0000000000000000000000000000000000000000..033638a6c5a4e8c4a53f6792fbbcd1f6faa39de5 GIT binary patch literal 21984 zcmeI&J&wXK5C+h(vob%cl~$tR4568d0*RgjaR6(j&9%4z*P%sW+Z9FX=QQpTMTtG0 z?`3bF<8+xGUuE-M>MeS{u39s*w|W>NGP3W>Xf1wFZxgO zLZJVq|ET|}|E&MMBz}-T$Y117@;CXT{8j!ef9DVQ3;u*Z;ZOJz{)9i_Pxur5gg@a= z_!Itwzu}MgBmRg#;*a^x3l`Z3jlG+1-t+N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5b1cc3b96fa024694e8c8230b81c7b9a0069d878 b/fuzz/corpora/asn1/5b1cc3b96fa024694e8c8230b81c7b9a0069d878 new file mode 100644 index 0000000000000000000000000000000000000000..27828be4d1c5bbec394ff194296865c48a15e28c GIT binary patch literal 815 zcmchVF%Ezr3`N_9U>v-N)9)=jR$V-Yw{$g-*ueylgvbVceb5$IoY!MJu7xK#4JK?# zuqXhL<^#YWO2QzIz+&2l031{h4#lx4h9y-oEEMf6Vz?&Rc#Q52N$>=so>ba}`hEL(RAyW_+Ao zj$dAXP}Fw{`JVI5jss?DM$7)ePDOac)&4O?MWgJU?5jGo0-^gmb{wtr7Cns}q>3TLEC_ zh!HHiXB<=P>Js(6qbSZoN&Y*|nAeixSY6_2UBXetq7FLh?KW&>>&>ec_Ez4#)>aJQ zL*enc_YaVn>bh2DbD^V^M4znuWz-p()-G<`lH&OIj#!QNLKPu7M)j{KKjZ46oV?bS z(!s|CS&vzaJJl2XktqR8!xTxKRawovJiTIl=^3IyASs#70-vjqC7&ZmI0m zCHO|kEw>eh=ovaw`nL9+1$X@lN>@IFMHtmx4`5gEE)m&TsxC3)qoAeyRPOnl$Ku}s zh`$np|H_{BaEL(R@wr(CwJ4QYnb~Sl2ww;t)WPiMQS-7NwQ|PzIjdS(L5}Jz-*~O( zWIcu{=D>?N+a1;()uAn}3tKSXMSF5DM}S5XLq;F$6pD51$r>!XXDl;&tyhJvyF&K! zRIFrs=K?xY`nGm|;!Tdud`OMJsAjb6AM8|w;+;p=vWz$jp_-2H0~vKAQF8QJug>ti z&M+tTq|=y6iSpyE8R;e^7j<^qtk*eNk79hR%L!v%t_xdWrB<2w)o>=cUU zYc*JQ&p4)*RiV#Y6a8mK#MZ|@F)*h_sGg!ad5oXc8Qy>9WA@L#@4MVTBhG6o(Kvc} zjcdABS6e?;XL#Dvm6f}BDW!eiNexyHt$lmso;x35i8c1`awU5q^*v+QH9 JzG^yZ;}26G&?5i< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5b8981dc982e5d05187aa9807a843d90cc19fc4f b/fuzz/corpora/asn1/5b8981dc982e5d05187aa9807a843d90cc19fc4f new file mode 100644 index 0000000000000000000000000000000000000000..8658610b14b4f7d7bbd25715cbc01af6c7e3fdcc GIT binary patch literal 10 RcmXruFl4j0X0W$r000NL0b~FG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5bc22bdffd68784dbec8ae725c941da234b8652f b/fuzz/corpora/asn1/5bc22bdffd68784dbec8ae725c941da234b8652f new file mode 100644 index 0000000000000000000000000000000000000000..8e10f9d973d2e4365e778dc7c275ced7088219e1 GIT binary patch literal 283 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOxxay7KSRU91_Ll;V`Nywz`$U@AkF|1U}A(Y l*x8svWkp#SV8Eb(jVaWif$5C_0|PT7NW;+8%^=Re005oMEL#8o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5bc27e31d11e18162c0e1c3b8b48b6a7d44866b1 b/fuzz/corpora/asn1/5bc27e31d11e18162c0e1c3b8b48b6a7d44866b1 new file mode 100644 index 0000000000000000000000000000000000000000..1b7b02f29270f15fd48218b0f9bc22465b056ced GIT binary patch literal 3373 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU)H(FP4{EUgAj3=9m+ zj9{(-7Ml%5ZEo{8clg(6Xpg2aP$r>at~$+et#Z5Jp+En>jOJscG7AQVPuWF_a(c9e i81PzgB<0_c8ND|1#G;{RK^0sAQP-J9gWMN5Zlo1q(uvo;U77~U+SYo!}>3&9{Vs_vI0`7u=NFdaS9(7pm5Jt%z zgE@LU-LL>FH#cyyLj$ai3=H~6VrmdJq_n|NV!&gS`UMXSjV7{8!<8SQE+Z=MlC743 R0j0S8|NsAg1_p*k1^|ODnWz8& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5c6eb2716b1b78ae59e82a11f850ad7933afb4a5 b/fuzz/corpora/asn1/5c6eb2716b1b78ae59e82a11f850ad7933afb4a5 new file mode 100644 index 0000000000000000000000000000000000000000..2b3fcbb7c050f242b38fb9cd2e69b35cd76dd842 GIT binary patch literal 1531 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+tPIir|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*8ratO^jLwjj!SQ4I1w=F)|uxKm`~XnPeG2HX#EB1Yk4>W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4ilr!QRAkcmuEFvXZn=Jb<6YOdwBS>M%amt1)PUa`8S%@-~aZXLi?}ckK(WL59MFV zKb3z6EKvQS`b+iam-YAW6n=baD>nWx%rLlRIhR4&oD*br4I32AElllh7>2o7g#QSF EFVyP2MF0Q* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5d2b308e1998958059da429d7b907c90ebea95c2 b/fuzz/corpora/asn1/5d2b308e1998958059da429d7b907c90ebea95c2 new file mode 100644 index 0000000000000000000000000000000000000000..d7ae697eac094a68c8a490b93af3bdfdc77b10a1 GIT binary patch literal 1025 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUj&u007|PgaQBn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5d4baf832a3ccea02f3e5af1acbe87e9084ddaa7 b/fuzz/corpora/asn1/5d4baf832a3ccea02f3e5af1acbe87e9084ddaa7 new file mode 100644 index 00000000..136c02e8 --- /dev/null +++ b/fuzz/corpora/asn1/5d4baf832a3ccea02f3e5af1acbe87e9084ddaa7 @@ -0,0 +1 @@ + 2å02061620Z \ No newline at end of file diff --git a/fuzz/corpora/asn1/5d53a4fea3de83ce49510986e827fbaf3371a29d b/fuzz/corpora/asn1/5d53a4fea3de83ce49510986e827fbaf3371a29d new file mode 100644 index 0000000000000000000000000000000000000000..99b7f490f5277484a620be519ab6bbb2c8947983 GIT binary patch literal 7780 zcmeHMy=ucS5dI`N3ZWDNT{0C49YQknC{2b!_Pj%1Mk&;9lIQ5$C3D}TOF^Y+6gAG^ z$dPR#A6{%Qd{}qi&-uvct4Y4hzplk#DC9c~Z7(T_$Y?oL0D;U%JdXrz?;mNX`;&aR zSxBLK(^ZB$bqfXb@M5jCA2Vw+05|)$#sC?ez0oTGCGh)5l_1m(VqSz0(IJk$A|6Cq z2lZ56Er2xu%xBhG0?=efU1ZZHT8ntpa{}VoJ^oX&co3at_kDn0G|F!AjqK7bDN%N_ z(jMlhMtM<)YL#X1p_m3)X-|yJ?w|tM%}TpZgO!{1XoPXK@bO?b=){BQbUY{>CqMl- z*`^G#B_&`Q*zbK{Nzdt!`QZJs;x>|TKk6!Lhi#aEd8WTvO>}F$4 vz*u?KJ9mE($Zl5J8kN?^1D^HV5ghFGT#gEC+S0(uvtIa)wR$bu+uHsBnCjIx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5db7235ce1f88844a66ff29cd3ca7602e4d73b6f b/fuzz/corpora/asn1/5db7235ce1f88844a66ff29cd3ca7602e4d73b6f new file mode 100644 index 0000000000000000000000000000000000000000..dde5a22280dae410dbfca15690a1c6a09a792384 GIT binary patch literal 230 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH nHji_*OpI(CU)E}%uWu~MYfX`QJ3a{WF3{JD;kCD2Fc@qWZ?L@}thkEe?PZw^w*_7>%b6fA78Z05 zyOvD}YT05LJ(-I1YKOoKV*C1dCjW84pn-5_g1lH*Pz82!O$lmjv5cNfMS8Ve;n}i1 Q-Da}Cu2x({@%GHf?pBX$qW}N^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5e0678aa0d033be9c70d02dbda44a230f993d8b2 b/fuzz/corpora/asn1/5e0678aa0d033be9c70d02dbda44a230f993d8b2 new file mode 100644 index 0000000000000000000000000000000000000000..c042e2678b5cadaa3d9db450363b4a254dfb9bbe GIT binary patch literal 4029 zcmeHKu?oUK41Gy!RYWK{*h!pqc{+)Mh=VxzPo9GP8dqKY1NCnll~yVUE^6sel7r)J zxP*I2UJ|;X(Qn4_Z6@_l^aRIrsgiVo4m^OMi)0cB)ANX7Q0>R7^Vk7{p0uJ=AlSw9ZHw|YfF=H#F?Si5J4-#A+CC4YPkgTH N%XdAS?4y5%rw1EDBH;i4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5e3ba5cc20ec04c3cd176945d091419f035f157d b/fuzz/corpora/asn1/5e3ba5cc20ec04c3cd176945d091419f035f157d new file mode 100644 index 0000000000000000000000000000000000000000..85b94b2db1add17028b57a48dd4670086f21265a GIT binary patch literal 2844 zcmeH}u?>Jg3|81x8A2Bo5iAR3B>qTw$z{8mU`v;66? MN6aicM<5aJ+>;=;ivR!s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5e74882ac0016013fa54eade85e142769f091195 b/fuzz/corpora/asn1/5e74882ac0016013fa54eade85e142769f091195 new file mode 100644 index 0000000000000000000000000000000000000000..7e91dc5cc9fae5b011d25f1c80dd874f6e530f13 GIT binary patch literal 26 dcmXqLU}H2`&>+EUU}0cjU}R(f1`G@g3;;`!1gQW3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5e847537a53846ba81b50426aeacca2cd42c330b b/fuzz/corpora/asn1/5e847537a53846ba81b50426aeacca2cd42c330b new file mode 100644 index 00000000..b1982f24 --- /dev/null +++ b/fuzz/corpora/asn1/5e847537a53846ba81b50426aeacca2cd42c330b @@ -0,0 +1 @@ +£1€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/5e91b5571f8a37f32a0c7bcb12b95b4faaf9eb8a b/fuzz/corpora/asn1/5e91b5571f8a37f32a0c7bcb12b95b4faaf9eb8a new file mode 100644 index 0000000000000000000000000000000000000000..f9f2d2b154160b41cc2c79ea0fa03efd9f4bf82f GIT binary patch literal 51 mcmXqLFc4s4*J|@PXUoLM#;V=O!XVEq#lXyf9WXL5FaQ9lP6Ph{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5eb1071a2eb800d7ac58e2295c2014c62828ca51 b/fuzz/corpora/asn1/5eb1071a2eb800d7ac58e2295c2014c62828ca51 new file mode 100644 index 0000000000000000000000000000000000000000..882de449954621795e4f6b397ccfc573afce2933 GIT binary patch literal 1185 zcmeHHy9&Zk3_Z!MS49dJTsn!X?Q$r%2;DpQ9pYzP3-(X^4mU@C$Fb5l+C>mVXaada zIDzCOjDC@~b^AzV9z?H*G*u-Ty%r827&F;rLW@fVKh4|vUa9y=aZ0duE4UQE1vp?^ zc3sEFrB&T36#*E1a%Ka-3Hp>{i+>)JBA}OzSp~4S2uE|DtvkLk%DVtJ>!Ai literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5f36c36219eb8dae41df713995f9dac23fb8d98d b/fuzz/corpora/asn1/5f36c36219eb8dae41df713995f9dac23fb8d98d new file mode 100644 index 0000000000000000000000000000000000000000..7b92b626f4c5108c27ca5c9d631541c8bf8c9d9d GIT binary patch literal 28 jcmXqLkZ)jOWMpDuW@ceJkix>o&bc(V@-hnp1H&o+ND~FF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5f56c19c731496ed17fea7ade30263091c6ef785 b/fuzz/corpora/asn1/5f56c19c731496ed17fea7ade30263091c6ef785 new file mode 100644 index 00000000..91c3bafa --- /dev/null +++ b/fuzz/corpora/asn1/5f56c19c731496ed17fea7ade30263091c6ef785 @@ -0,0 +1 @@ +0£€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/5fad365b910db6ccd2050213183ec9d0080f5d9c b/fuzz/corpora/asn1/5fad365b910db6ccd2050213183ec9d0080f5d9c new file mode 100644 index 0000000000000000000000000000000000000000..8b2226d1c89db857e738a738fdfa36b5d4843ef5 GIT binary patch literal 5160 zcmXqLFlb<6+F)hSz{X?{%fMj3Ai-b&64PQ*v@!=X*_cCRWm)(P8WuOQ)-rc6GB7YO zFoOsN29VxSWg|I28Vp9$$7oI%{6&N2h|Z;><@jigHCly_HdaPkZzH$4GFk(Uwp2%3 ws?e6|OHfFRc49|+^`qk#qXRml^#TkSG_W-?YBPZP%FOJnY~VgK2*@x10PD#!k^lez literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/5ffbfdf6c316b902faeff8653573b7b2d989b38f b/fuzz/corpora/asn1/5ffbfdf6c316b902faeff8653573b7b2d989b38f new file mode 100644 index 0000000000000000000000000000000000000000..d6f46da4752a92592193b69d70a28c43b5cc8b6b GIT binary patch literal 35 acmXq1G~i@oG%#dgWe{V4Gldb%Qw#t#j{`&i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/60073f5713194b8b4bf5b557338f69f76921f727 b/fuzz/corpora/asn1/60073f5713194b8b4bf5b557338f69f76921f727 new file mode 100644 index 0000000000000000000000000000000000000000..176d0d2340401f794afd360cf098379e610cea86 GIT binary patch literal 569 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RO0|7R6 ztu~KywoHs{tlEt%49d(d49pBDfC+_%2MEK=Qe~-7yRdYN#$i0>W(UP+l($Lk1L);DE&yWuQo4z3gB$$s7hsq+!fmFbBA)A1W4O2%8 O(;;p`wH24!KxzSOkQIUe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/600d6bf8908dc534cc14554acd8485a150ebf0f3 b/fuzz/corpora/asn1/600d6bf8908dc534cc14554acd8485a150ebf0f3 new file mode 100644 index 0000000000000000000000000000000000000000..effe6d399669d6bf7208101b99148eea313db7dd GIT binary patch literal 106 ocmXqLU`sJzVr>3z&Y1S=pJzAvSYC^nx5tj7wmlL9BWdGf_hj$qZyR ZZog31PTckohvxmD6OQXqi}~MPFv_2bPPl!kU{4l7ytm)iDm2n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/605f076cb179c768f5a0043ee678fab33a356e1c b/fuzz/corpora/asn1/605f076cb179c768f5a0043ee678fab33a356e1c new file mode 100644 index 0000000000000000000000000000000000000000..c51283e8dd3d5994a613c33f1fd069e9b82b6246 GIT binary patch literal 1040 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUf}G8iy0Fc^Rcbl?LL$bgC(G_bL>8Z<9VZmEQh`d3CsiKdI?&pu-=@ej)+>^hXu{ HlbRs_iN|t1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/607960168a4d6332b2232d2cedfd06bdb05b1638 b/fuzz/corpora/asn1/607960168a4d6332b2232d2cedfd06bdb05b1638 new file mode 100644 index 00000000..dd59c1ac --- /dev/null +++ b/fuzz/corpora/asn1/607960168a4d6332b2232d2cedfd06bdb05b1638 @@ -0,0 +1 @@ +õ0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/60b1250b2e65f331c0fce71eda1a9372f89381c8 b/fuzz/corpora/asn1/60b1250b2e65f331c0fce71eda1a9372f89381c8 new file mode 100644 index 0000000000000000000000000000000000000000..7aae7f1aba25e0963fc85259bbde504149cb80e2 GIT binary patch literal 14 VcmXruVPa%pVq*Bu#LUpd1ON)90n7jZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/60c911ccd2372e3cc3a9b6740b1a9bb9fc368d12 b/fuzz/corpora/asn1/60c911ccd2372e3cc3a9b6740b1a9bb9fc368d12 new file mode 100644 index 0000000000000000000000000000000000000000..e705923d87a6e76a3a8e76ff2af65a6af3b5ae28 GIT binary patch literal 243 zcmb`B!3l$46od1g@2Cr>ZhiUmhlSsbgw}ZX Hh5&`1C*asffwT%D( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/611cd8e2378779160742b64f349320cd1772d53c b/fuzz/corpora/asn1/611cd8e2378779160742b64f349320cd1772d53c new file mode 100644 index 0000000000000000000000000000000000000000..8112db1bb9edaf1aa959305021d2579e21891a16 GIT binary patch literal 302 zcmXqLV$@<{y1-=6_?nGftIgw_EhCdb<9#N>|NsC0|M&mDHHe0RZ!iW~fQ?au5o!fF z`WYaAon*a?OtK9B|1&WB?}Qqm=^7KGWy{3K$ZW;HlBJ&ViD_fI-O8riUGIc-HiM1- d$0Dvkhei_*K>!+E+?oIY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6131b64d6d8b53cb61d2b70cf1107c180ca4de98 b/fuzz/corpora/asn1/6131b64d6d8b53cb61d2b70cf1107c180ca4de98 new file mode 100644 index 0000000000000000000000000000000000000000..46bf06b44cbb0a1dd48a7d343b1a153708535349 GIT binary patch literal 816 zcmd6lK@NaG2m^s^c+cz)`*Z_QPsW4UsN4vpO$#Vo(@+MOO`&iQF)bWBCn&2O0}6Nn j^E?*ZZ-K2;eE);rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3l-NY0Z>68tX(wLSdjCm@S#s`0560t6q7Bm% z0{TUjxzB8xw6kf^>lW@05i(yvPW%3FLF={Iw)al&Ssi1xBYbD&l=ZuRS-ood8ScYv z%ife87#ZHT>q?~mvqE-(#)d7PVui{td^E&_x1Z-U>N&COp^aEocSudI#)HM{Wp(US?pHd+p_tQL-~R8zb+=9+O`&pkE4~}D{YOa~%=!!lIwB&hi$mW( z`LIkPvz2|Rwx!jJOUX;Zm_#%tzu&UMvAVM8r})zC76zkFfcPffGvYI8zT$jEq4}fkN_iC6aWF<2J8R; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/61e4b4247bb81e964b58fe31d959f53e8f77d848 b/fuzz/corpora/asn1/61e4b4247bb81e964b58fe31d959f53e8f77d848 new file mode 100644 index 0000000000000000000000000000000000000000..1e392401429a9a079b81a3a13ae370d7a9f0b9d8 GIT binary patch literal 28 ccmXqLU}BuZ!odImj0+mrSktu`S-3!a05-n^DF6Tf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/62366b1b6bfbde67f6023bc94dd03ac709143b4e b/fuzz/corpora/asn1/62366b1b6bfbde67f6023bc94dd03ac709143b4e new file mode 100644 index 0000000000000000000000000000000000000000..be66db2794c91d54b12536a162ded0c28a6c879d GIT binary patch literal 7 OcmXqL=wME7U;qFKKmsEG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/623c1f585b6ed169377f23e446a8a9105dcf93fd b/fuzz/corpora/asn1/623c1f585b6ed169377f23e446a8a9105dcf93fd new file mode 100644 index 0000000000000000000000000000000000000000..346972475e5fd0a17da38ba3989628890c05a112 GIT binary patch literal 27 icmXqLFc4s4*J|@PXUoLM#;V=O!obDM%)rFJzyJV9L<7+P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/623ff2b70f08d0be1d4c41fc0e43d0154f3cfdff b/fuzz/corpora/asn1/623ff2b70f08d0be1d4c41fc0e43d0154f3cfdff new file mode 100644 index 0000000000000000000000000000000000000000..0b6d190bff006ff1e5c169d3e0d8e7948a3f3908 GIT binary patch literal 4704 zcmeHLK?=e!5Zt7pA|eDmdQ=p|L;Qsg@gL?Sc-0^1JH$VE@u(Erv<<6FMWi;p4wLQf zWOkF(*tj>}uC}+n=xQM^WQ~XHr+;Pw2fQ-{8;S*?a1aR!AB26{-Yp$Wm@^>zR54=ndl!-n zA_2PA#MJq%CmVpz-2da?hc<&Hv7oje3O-cR4D7-HddD^P=-)lWjGMJB~w@HS!I~zfwr>t`5GpnOa)~4>JnBD zwDrNe$aJg9YJG3XV3kpUQ_O1guX*qMt4y~nGpndz3Sn*TR{ySzG7NlH@B^JpZNqN; z5muM9WqD@R!a%W|a3Hu0m-y-wRFu7#Iv1*jQQ(6d4#`Tm!g41`y4}7{mkszN#01 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/62b8ea9f9cdf39d8e2a956a994f71cea7e40584f b/fuzz/corpora/asn1/62b8ea9f9cdf39d8e2a956a994f71cea7e40584f new file mode 100644 index 0000000000000000000000000000000000000000..b483fb46a95a791bd3d1a301016da05097dfbac3 GIT binary patch literal 262 zcmXqLSkhq7VAx>Lz{bca!@$4*VuZ>X7%&(#7#J8B=zG}y|Ics(jnAgRzyOm4t56_U TBO62`ZLEelAH%t945$DAu|Y+O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/62bafe37a7f1323dba538155e70edb9f8234b359 b/fuzz/corpora/asn1/62bafe37a7f1323dba538155e70edb9f8234b359 new file mode 100644 index 0000000000000000000000000000000000000000..879d29476b48aca028bb3ccedfb77a8f5a46d63f GIT binary patch literal 172 zcmXqLU}CbDHfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ou-h5hHGuuh6{hh3n=P#BgoiSs<{FopWh! zUiEDVawatzG83=9lQ85kHCOpX5k|9`3e<{Pl86k8@n z1_lO$1~!&fgC+(B2IlMgZ|pK?Flb<6GB7Y`U}Mr&V_+~~Fldlqw31*nWMB|xFfcL@ S0Bb&H!NQDW1;}&;1_l5;V=aUL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/630d0b35ecf3367585596ebc5e81b35caf8f125d b/fuzz/corpora/asn1/630d0b35ecf3367585596ebc5e81b35caf8f125d new file mode 100644 index 0000000000000000000000000000000000000000..535d4fd059161a57fc76ad09a667fcb86da721f7 GIT binary patch literal 4 LcmXqH;$Z*)0OkNd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/632ca49ab1db054e9e4e135f0f61a12c16523ddc b/fuzz/corpora/asn1/632ca49ab1db054e9e4e135f0f61a12c16523ddc new file mode 100644 index 0000000000000000000000000000000000000000..28e144b83eeef95965ff4e5115b5ab8603708f56 GIT binary patch literal 80 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1-U0>&Ccy@#LI%a)4g&@T1_K81 dC5#3OK&qKTWo1~n3>q34n-~}tFfcJd0073057Gbt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/637b3e47edfff5a478c49542fb80d6f75202d357 b/fuzz/corpora/asn1/637b3e47edfff5a478c49542fb80d6f75202d357 new file mode 100644 index 0000000000000000000000000000000000000000..d192762937be9282512866fe866d1b1c4b5e19b9 GIT binary patch literal 7 OcmZQ$)ox^AkOBY$Pyp5d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/637d12cb90cb23c929cd4ae084d8b8bc9f5aa36c b/fuzz/corpora/asn1/637d12cb90cb23c929cd4ae084d8b8bc9f5aa36c new file mode 100644 index 00000000..38f28dad --- /dev/null +++ b/fuzz/corpora/asn1/637d12cb90cb23c929cd4ae084d8b8bc9f5aa36c @@ -0,0 +1 @@ +0€$€0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/63b87e03a4273b7e38032f544c5ba09a5367e023 b/fuzz/corpora/asn1/63b87e03a4273b7e38032f544c5ba09a5367e023 new file mode 100644 index 0000000000000000000000000000000000000000..b201986c71c9aa1b82cbc079fabdbe7049a8c2d2 GIT binary patch literal 37 ocmXqLU{d_AWx&q>0e%dO9tK)$Y7ERqMwiZ-R6b!~ZD3;q0Dw&gfdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/63c3326b813ea619350ffa66718a0c16d51a8122 b/fuzz/corpora/asn1/63c3326b813ea619350ffa66718a0c16d51a8122 new file mode 100644 index 0000000000000000000000000000000000000000..4ded9f400164471dd003fc04bf762c698f8160a4 GIT binary patch literal 370 zcmXqP5a%~EH!wFeGc-0d(={|QG^MV9DY~H;0yMD}!%*U_Wnf_V|6kX@%)nfnfx*Ps R$jHpt2uHvmf+~|}004>9PCftt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/63e4cff3a0f22c306965ed202e330a5e13680e35 b/fuzz/corpora/asn1/63e4cff3a0f22c306965ed202e330a5e13680e35 new file mode 100644 index 00000000..84b10b0c --- /dev/null +++ b/fuzz/corpora/asn1/63e4cff3a0f22c306965ed202e330a5e13680e35 @@ -0,0 +1 @@ +191111111111+1111 \ No newline at end of file diff --git a/fuzz/corpora/asn1/64225c96f3b11185c9efe4185c5507aceadf1944 b/fuzz/corpora/asn1/64225c96f3b11185c9efe4185c5507aceadf1944 new file mode 100644 index 0000000000000000000000000000000000000000..9647b3c1c999a4493b835062397f3da1b8bc0ca1 GIT binary patch literal 28 jcmXqLU}H2`&>+rlU}9imU}RumV4!Vq;G_Wq0|Ns9UOfgZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/647d2331fef20593fa67c2e18ffd56a121f76442 b/fuzz/corpora/asn1/647d2331fef20593fa67c2e18ffd56a121f76442 new file mode 100644 index 0000000000000000000000000000000000000000..4df030e2e34c08f52570fd23eab014fc0d7729cc GIT binary patch literal 4192 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU zE~1*(n3$OcnTv*TV1v9i8vXb)?J$o1(Y!{us2wfX2#3*VF+yAz4bv)nH2R5){?VFt t#MZQh1 uH!>P50I6mUm6c&hHE3ASu&}{^m5otFn*mJefGKM^25cY}6JWOti)H|viXwRc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/64beaff7b7751e1c2efdf5378cfbf70d70bad025 b/fuzz/corpora/asn1/64beaff7b7751e1c2efdf5378cfbf70d70bad025 new file mode 100644 index 0000000000000000000000000000000000000000..b2da0727063286f7edf9c65f804928f27820096b GIT binary patch literal 523 zcmeH^O$x$542552Wc))A-1H1}^J=YB!F?AV#AAelb1iRRkK^AHMq402x=jRLiqGtg>f0X+i{RENycO5cMxPzNe}`8ptVn( tY;b-}sbO?s55U_FyWppM_s@Ux&$zcuTQ&8j-nUhTK4b%YgHO!uTMuglKW6{{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/64df7f79dd70a6653c1f8c132dc7938f5e5844a0 b/fuzz/corpora/asn1/64df7f79dd70a6653c1f8c132dc7938f5e5844a0 new file mode 100644 index 0000000000000000000000000000000000000000..16c907423f36c26ffdb00c21aa6e727bc6030013 GIT binary patch literal 132 YcmXqLSkSPbp^bqO*iM#ih%OKb0J~Wu?f?J) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/64e159659bb9706cb25017d10b068de13d30c6ca b/fuzz/corpora/asn1/64e159659bb9706cb25017d10b068de13d30c6ca new file mode 100644 index 0000000000000000000000000000000000000000..bec239df9c82906a7718a97ec8ea9b589aa72fc4 GIT binary patch literal 151 zcmY+7!3_W)2m?Ek%Pi(=L z-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZyYg=zrTfp$I+rep zVs}q*x!O3hm7&grNmiSUk)4r|3FZi~MGtm-uoJ$k=^7KGWy{3K$ZW;HlJzO&&SP`C zr&mm-Z)|_J%Wh>;uCUJL=rWeFxi$>Rq(iqe E07Na5f&c&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/65f6a84853d98d3aa000793bb7d53b5eaee0c1a7 b/fuzz/corpora/asn1/65f6a84853d98d3aa000793bb7d53b5eaee0c1a7 new file mode 100644 index 0000000000000000000000000000000000000000..84747027a8deacbddbb5ac50af6cac2ea2ba7792 GIT binary patch literal 1284 zcmeH{F$%(96obD!%ER9x)DwuS)AJS{p;r+c9vym)dJDH6s)MUgZ%}ZNKVw3ckR;OE z%Xk~#2bE4Xlabai<@uV=qlw9qa2FV5>>Zy13m;IFU$BAOU3lSjP5E&GP<2dsNMGP=J+Gq5l0`~U2_SguL= ze!^0!E!CD3h7^Vrh7^X*6`d=n94haD%IUnr+x(Q?Px# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/667c9f41b4ecec590bacefa67b4ce84f24c345ac b/fuzz/corpora/asn1/667c9f41b4ecec590bacefa67b4ce84f24c345ac new file mode 100644 index 0000000000000000000000000000000000000000..de45ef5d5679a17cca8b7f75b11ce92de83d1bec GIT binary patch literal 898 zcmdUuF$%&k7=>Sw8WAZJx^xn{rpvQX5W&5Jhl+x^iRbVJUPo}LG&WL2K}#2tAqj+h zdH;Jqt)3fKyGtx)iI68)`Y9zzt7V}8f;JQDOwjL3CVFaIecni+C&ey8t`<-+fFl4@ zWz#gYOdq!Z(CX;GJpgq-@;zetj95jghiG5-W81B%zIGo8h-xfEPlYpHYe3{;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3l-NY0Z>68tX(wLSdjCm@S#s`0560t6q7Bm% z0{TUjxzB8xw6kf^>lW@05i(yvPW%3FLF={Iw)al&Ssi1xBYbD&l=ZuRS-ood8ScYv z%ife87#ZHT>q?~mvqE-(#)d7PVui{td^E&_x1Z-U>N&COp^aEocSudI#)HM{Wp(US?pHd+p_tQL-~R8zb+=9+O`&pkE4~}D{YOa~%=!!lIwB&hi$mW( z`LIkPvz2|Rwx!jJOUX;Zm_#%tzu&UMvAVM8r})zC76v0cu^EmgwgE_No}(q(U@F-( IhIGjW0Jnzd1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/668ca20c0195624c2a02e6a4b538eb4fb8471dbb b/fuzz/corpora/asn1/668ca20c0195624c2a02e6a4b538eb4fb8471dbb new file mode 100644 index 00000000..41a13c66 --- /dev/null +++ b/fuzz/corpora/asn1/668ca20c0195624c2a02e6a4b538eb4fb8471dbb @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1/66aa1908dc1be4f9ab9fd70f101ab9724dfcbc74 b/fuzz/corpora/asn1/66aa1908dc1be4f9ab9fd70f101ab9724dfcbc74 new file mode 100644 index 0000000000000000000000000000000000000000..dc81053b754ec9e4bac926fc8841b01493d25eea GIT binary patch literal 18 ZcmXqLkY{3KP;LliVP;@(U|?Wi000^Q0ulfK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/66c492c3ff17c0be116dd9e00f3f81be51934f0b b/fuzz/corpora/asn1/66c492c3ff17c0be116dd9e00f3f81be51934f0b new file mode 100644 index 0000000000000000000000000000000000000000..b442e95bca5a0c72bb4563a29d2602ca2bf2c190 GIT binary patch literal 66 ncmXqLFkmof;9`J4Wd<$=0}U7t8_mGL#oz^%VPMc?U|;|Mo*DyX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/66e026df62681bb9036c23c87c4b6fbbce14e913 b/fuzz/corpora/asn1/66e026df62681bb9036c23c87c4b6fbbce14e913 new file mode 100644 index 0000000000000000000000000000000000000000..90077e7c790832a75cb982acdd8f33d6d098269a GIT binary patch literal 52 pcmXqLU}92ZFlf+eU}HMi#J~Wd+1VPLm>3vr5d6%&f5ChZ001%c3h4j< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6763194ab887e06076785d692c281811e1893f66 b/fuzz/corpora/asn1/6763194ab887e06076785d692c281811e1893f66 new file mode 100644 index 0000000000000000000000000000000000000000..9c1198b1fd6dc54b43a7539c17d18490c022bcef GIT binary patch literal 56 zcmV-80LT9@fFFPY0RaL60|5jAz%K+KpMRx>dRvcHRg0RSO}1Tp{s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6795a14fdf8a2bfc0a2bcaa0dc8e75d343c175ce b/fuzz/corpora/asn1/6795a14fdf8a2bfc0a2bcaa0dc8e75d343c175ce new file mode 100644 index 0000000000000000000000000000000000000000..2bae7a871d3b0deca6ef00e9935b6dca721756fd GIT binary patch literal 20 bcmXqLU}Dr{VOY?>#;V=O!obhKz`y_iB-;YZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/67bfa42b7ab4daab7f610778a3e32d9e359d4827 b/fuzz/corpora/asn1/67bfa42b7ab4daab7f610778a3e32d9e359d4827 new file mode 100644 index 0000000000000000000000000000000000000000..c4b0a23f788df2c24d27596fb0b84010643f7556 GIT binary patch literal 29 XcmXqLFl;bjWn)y}VE|DEa0&zfI*0W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4UsCCM5FD0t`=E?E6XydX3@@dYdKh7qrlTx*HYhnh*CPC`w)XgnhZ z5RhOrSOChJ4Q$MzvNG~4sRjlM8WuwMsVtgcDNP1#21W)31_K6huxcg)uvTOM5n=}m ffn^~~5HM(9V-l5>W_n}Dz`zVL233v?MUE8!ft6Yv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/684befa69cbc6735eec028d64d055c29c7ee1d58 b/fuzz/corpora/asn1/684befa69cbc6735eec028d64d055c29c7ee1d58 new file mode 100644 index 0000000000000000000000000000000000000000..8369e0e4f4a8e8658057cbd1864eb7568c3495fd GIT binary patch literal 108 QcmXqLSj=QV7tFu_0Id-tQvd(} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/687882001d3ead655002ee18967f73e47258079c b/fuzz/corpora/asn1/687882001d3ead655002ee18967f73e47258079c new file mode 100644 index 0000000000000000000000000000000000000000..8760dc06be087b4ef8371d699e38a2ae9f653f20 GIT binary patch literal 83 ecmXqLSkS=6#AdLdft3LSFnMlx#;V=O!XU=Lz`y_iDxL!@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/68b9d71ead4a7896f5d23b65249a4ece3ca0415c b/fuzz/corpora/asn1/68b9d71ead4a7896f5d23b65249a4ece3ca0415c new file mode 100644 index 0000000000000000000000000000000000000000..656d0204140cfec5f17cc387b0d56f2477f09afe GIT binary patch literal 52 xcmXpoG7w;6*J|@PXUoLM#+t6p$il-c$H4rb0SZ_lv_S(Kqrn0Oh6VjdJ>QU=pEvi-Cg>ycoJdBes7TI$QZETP!TI@9p3%LYVjYk1&ejDZ z1M!5=33rK995d<~{j7oWuN(HJm`xS4yqLfS&0vUbn0UC7`Du`QDb8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/691ad103865cc0eb66859bdbe4f4f94af2e52d0d b/fuzz/corpora/asn1/691ad103865cc0eb66859bdbe4f4f94af2e52d0d new file mode 100644 index 0000000000000000000000000000000000000000..c1d16ef038798de8201ccd4dbbf6c53b7ed845ac GIT binary patch literal 940 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1GctgL zm>3zvK@4^_=Fpk4EDT`AHzF9cQw*{l20-o)HE3XZW5B?`40brpy)pDX1_J{Scz99{ VN#Q!cX#nmGYCD>RjhTg^0RTW$p40#U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69481fe8d59a86204cc686095414779d646b2237 b/fuzz/corpora/asn1/69481fe8d59a86204cc686095414779d646b2237 new file mode 100644 index 0000000000000000000000000000000000000000..f27032ca10857c30ce1895d03caf3e92dabfd336 GIT binary patch literal 62 ecmXqLSkhq7VAx>Lz{bca!@$4*XFvd6Sp@)dqX|m@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/696b0688cb0feb9edb4d24f4b964db6de5c46211 b/fuzz/corpora/asn1/696b0688cb0feb9edb4d24f4b964db6de5c46211 new file mode 100644 index 0000000000000000000000000000000000000000..b01fefcfbad169fdaf5efa204b774106e8c594c3 GIT binary patch literal 1156 zcmXqLSkhq7Ajoadz{X@?z|6?NzyRTBvyslB*nr_?DUks(s*DXa>PG`)_yq{IybS>W DTft%l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69770198d13ebc570ad20f246bd5a99e2b2fcc9b b/fuzz/corpora/asn1/69770198d13ebc570ad20f246bd5a99e2b2fcc9b new file mode 100644 index 0000000000000000000000000000000000000000..3402ebc8f9f54d19f50d29be7520aa61402461d0 GIT binary patch literal 360 zcmXqLSkhq7VAx>Lz{bvQ00uSY6};9#SAd0CWTkyZ`_I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69b69b8aeac3d6cd22143fde46c1fa51c5957b08 b/fuzz/corpora/asn1/69b69b8aeac3d6cd22143fde46c1fa51c5957b08 new file mode 100644 index 0000000000000000000000000000000000000000..2a58266384bee40dd59944d85bc85b07b4fe80d6 GIT binary patch literal 1689 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU)H(FP4{EUgAj3=9m+ zj9{(-7Ml$Qm(8a+u2pU~JoM-Pm*MZ%kr=-N=jYLs1uG|pXUPFiS+po6hgtay0QL;X Af&c&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69bfeef0c1be8d9af6eb3f0acf45fd39b51b2670 b/fuzz/corpora/asn1/69bfeef0c1be8d9af6eb3f0acf45fd39b51b2670 new file mode 100644 index 0000000000000000000000000000000000000000..8146e842d4fb5de8e9750b2458bdb266bbcbe6b2 GIT binary patch literal 312 zcmdsv!3{t_6h!C$l@$^~~|OAEMke sgNjZ9r9zS^*dV+~*&@7dL7Y=l}o! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69d585d7eb7cf1a672addfa48d8c4d859feb891a b/fuzz/corpora/asn1/69d585d7eb7cf1a672addfa48d8c4d859feb891a new file mode 100644 index 0000000000000000000000000000000000000000..0609c82e66a021c9e3340d7071659341ff0e5483 GIT binary patch literal 124 zcmXqLFlaDnU}Mx~U}RumFkld8G*|!=VgU;^urY_q$}ln#&lQ1bWYlJ1fB}OBHl|R6 P2BtR#3=GU5gBchA7cvg# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69f599b39c7d212a6b038f9180345436b394c1aa b/fuzz/corpora/asn1/69f599b39c7d212a6b038f9180345436b394c1aa new file mode 100644 index 0000000000000000000000000000000000000000..1e03db3a26cf57bb01e435e66da03b5601cfb090 GIT binary patch literal 364 hcmZ47V9>CTTDb9ieH^vSLNN!GM@1Kd&0?Sv008n#cHsa3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/69f8a1e62ab6a4c5c1756f8077fee0a8c6d219a2 b/fuzz/corpora/asn1/69f8a1e62ab6a4c5c1756f8077fee0a8c6d219a2 new file mode 100644 index 0000000000000000000000000000000000000000..3f0356181be23416cf2728ab50bb1d29b34a8d60 GIT binary patch literal 19 acmXqL5ac!BW@F?OW4pt}%gfEizyJUnzye1A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6a06aa5739fb44512672d44a6184e38b7891bf68 b/fuzz/corpora/asn1/6a06aa5739fb44512672d44a6184e38b7891bf68 new file mode 100644 index 0000000000000000000000000000000000000000..10a67892c1de6c9b88328e7b12788f4da42c0054 GIT binary patch literal 18 ZcmWd-Flb<7G+5BUz`(#@*kHiG0017y0|@{C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6a1d627ac654ba1d06ea3f99cab5e534df50f0c3 b/fuzz/corpora/asn1/6a1d627ac654ba1d06ea3f99cab5e534df50f0c3 new file mode 100644 index 0000000000000000000000000000000000000000..c0b563bbb0eddb129d7dce67c8034553a5dc8b3b GIT binary patch literal 350 zcmd6hF$%&!5JhJIJ3fUFiCz#_%w2DyP3vNysO;zaQZ z&MzMPKgAR9VCi=5F*33B5LkmX3D}Ad)esFEArcz1A*D&*uL6$t(@F0j@TehuHj6DO za>Zt*$g-~dZ8@9yFl}!@6HxkN6)FG-jmNbN)d@g*Im10+lY;c(4y0~L!S*ghk@|cT KSN~)8HG2Vw;#7kG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6a2b1eac9bb2fd660c2dd0a7b7c7d82660326230 b/fuzz/corpora/asn1/6a2b1eac9bb2fd660c2dd0a7b7c7d82660326230 new file mode 100644 index 0000000000000000000000000000000000000000..47ebbb733a25a8f8030a7c2a50c3631e23b028de GIT binary patch literal 86 zcmXqLkZ)jOoWtV4$iTqBV8xIl$H2f~%gFNoKLdjngLY#^D+6;1SPlUipv)=;g-{MH VMh2}`<`l*S4Q#C1jVugcwE#VM3-|y4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6a40822dcdf0b3102691c00dcd8087492b19b385 b/fuzz/corpora/asn1/6a40822dcdf0b3102691c00dcd8087492b19b385 new file mode 100644 index 00000000..e064fff9 --- /dev/null +++ b/fuzz/corpora/asn1/6a40822dcdf0b3102691c00dcd8087492b19b385 @@ -0,0 +1 @@ +0€0 €  €'€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/6a6b12e0cabf3d2af2747b77c812eb9e50cd270f b/fuzz/corpora/asn1/6a6b12e0cabf3d2af2747b77c812eb9e50cd270f new file mode 100644 index 0000000000000000000000000000000000000000..124f3764d37a9b88c7bc55ab9f1c0b019ebb1a21 GIT binary patch literal 353 zcmb7?Dsu+c+2q9rlmhJa!DmAW- z(|LNVrFR#lI?)rT(UHJaX&EI!01#VYnW9FY#~~yqUDs3mxD!d?03cb*N?WmVlLBfK uc&55L0sk5?;7>or`^VV65-iC>z2Tc<`PB@W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4@VT<<4UxyQf!7rf+P2x65uI0@u%$ zkr9h)VNPXWAT4kW23O#kzyo(Q<&LIYNU=~4FBpg`7SgpWc<5g&3~0)2_c%x0VquV# zxubzg!wPLQaA_F0#_$Sl09p&fy;vAtO|j83ceE2hryd%WI}t-B<^Dez{r^A1e_D2b zhkKbj+FGDtYhh3XE<1EA0p9H*cWhyh6$_(HF&d`a(WV&90vDDK(MCV;4}cmPnUgsL F3IO^CYLWl| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6a85cf72ce5d424b88f44f1a11ff837242d39bf5 b/fuzz/corpora/asn1/6a85cf72ce5d424b88f44f1a11ff837242d39bf5 new file mode 100644 index 0000000000000000000000000000000000000000..0961c9b37c1e20b032dfb1c9eb18d33d66b5be76 GIT binary patch literal 300 zcmdUoF%Cdb5JYG9vmzq-rApK^6QxA&SWCjS+`x4d8liUp^P2anp*Lz0G+HE>U6-&E0K@(~Od@llYOI9ubg5XL1@8SlSr6K(Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6a8fb2f00083248a24d7544d9c96003bde8a1ccb b/fuzz/corpora/asn1/6a8fb2f00083248a24d7544d9c96003bde8a1ccb new file mode 100644 index 00000000..10d027b3 --- /dev/null +++ b/fuzz/corpora/asn1/6a8fb2f00083248a24d7544d9c96003bde8a1ccb @@ -0,0 +1 @@ +¢€ÿʶ \ No newline at end of file diff --git a/fuzz/corpora/asn1/6a947f987d47d24c17b06e7e143e98cfa9a38d0b b/fuzz/corpora/asn1/6a947f987d47d24c17b06e7e143e98cfa9a38d0b new file mode 100644 index 0000000000000000000000000000000000000000..76793b8b84be7692287804c72955837e96e90617 GIT binary patch literal 28 jcmXqLU}92ZFlaDnU}IXwz`(%5z`(%7!uXqkfq?-4Lg@qV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6aba85c6d48e27882cbb5ee3d5b2f9a3fcf17b72 b/fuzz/corpora/asn1/6aba85c6d48e27882cbb5ee3d5b2f9a3fcf17b72 new file mode 100644 index 0000000000000000000000000000000000000000..50dbd267be09f2f4fe7a89e1f702f0ec007022bc GIT binary patch literal 1644 lcmXqLFlbo7)WE>NFiMYx!)Q7f%?G39z-T!@i*kU00RXzab?N{B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6aced155f70527b9f2db8bf4426f28aaa386bc90 b/fuzz/corpora/asn1/6aced155f70527b9f2db8bf4426f28aaa386bc90 new file mode 100644 index 0000000000000000000000000000000000000000..d70de613a20e25859b7dad32d5aa7d0523fbf63c GIT binary patch literal 50 bcmXqLU}Iu4SkPe5z{CK95C)8gpdkPNeVzj0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6af299b8857642fb3fee12c02e52b1f3675b504e b/fuzz/corpora/asn1/6af299b8857642fb3fee12c02e52b1f3675b504e new file mode 100644 index 0000000000000000000000000000000000000000..ab146f79c969b17d62be9d8d103f5c3e504e0ab0 GIT binary patch literal 80 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g86?v0|SHTUIqpRCcy@#6b6tA1_lNL2JuEl bg9RYf%%QRZEL;W+4U7zp3=9m63=jYSocs<` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6afb812cafbdcb22d545e1c61f9a6161e6f12ef4 b/fuzz/corpora/asn1/6afb812cafbdcb22d545e1c61f9a6161e6f12ef4 new file mode 100644 index 0000000000000000000000000000000000000000..2ee0938f5744898426129bd19541148a9f27b12a GIT binary patch literal 176 zcmXqLFlaDfW@FScXfSLrU}a;}(qI5lDh6PR$A|$0#2F11fD|^cF^9^^u%sFoENEB= z;ij?}gJm=sv>6x~7#Iv7iqA6{fOR4RCPNU99V~R=|4$eb1PmJ3m_%izncf&OFffCR Kfht4DLB#>W9T&v_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b0c37ab6b8781bebaab5ff10b91b2ce180b5043 b/fuzz/corpora/asn1/6b0c37ab6b8781bebaab5ff10b91b2ce180b5043 new file mode 100644 index 0000000000000000000000000000000000000000..ed3cc60b109d38452edf227ce11905e2cf74fb04 GIT binary patch literal 33 ZcmXqPV3Yp*xv{aa0Ru2GFr+gu000D!4W$48 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b5783ea73c66cb48aea71da56b4947acec3ebc3 b/fuzz/corpora/asn1/6b5783ea73c66cb48aea71da56b4947acec3ebc3 new file mode 100644 index 0000000000000000000000000000000000000000..f37d62459c7512a493a231ba3d3570a0743bd71c GIT binary patch literal 5484 zcmeHLy-EW?5dL=OTn!>5XpuIRCTXS-BoYv8@+LO-4lV)jwe$&m9kGh+?47wBNQ&&r zh0J%&Y;nWz?fiT@?A>K$X4Ti~YA`g5cX*c1T4wgn&Iw?!ADhM4aJ2c_ozJS(=h7N? zAqL@w9zg8*uKgpv(ZQs1F6%RUSG@5W02u%whPI;^0dFH1ZX-B*nVZ7U2n0Me?n~e{ z*y8s-f!~klI&r)K9zfB=oq~sF&jc~gUg_Zc&68(Z7c|nk zsQYBbx(LvI7F$9d9-4kO{f~Z@U~bmfnVbFXlL5)^?eBSUTKx7-m#Crzb}RF61)imX zdY3u-Un2Qy&ND%>jY5qhskZ=CMq#s(;f3D2`KHP! NnKEJ@mX)$i{Q;8Uz3u=2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b592e125891747df5215531b69b38afa6965110 b/fuzz/corpora/asn1/6b592e125891747df5215531b69b38afa6965110 new file mode 100644 index 0000000000000000000000000000000000000000..32f5839da693db1d64c2afc15baf86c1529501f0 GIT binary patch literal 403 zcmdVWF$%&!5CzabvvEa42-w6%u(3#*p9mI${T^!!xHs_}-XI>wa%H!Ww3af>=QGTM zq4{+iLws*!Rf|4hETc-&ymk&CXpLMNVaWq)zieZet}1@f-74(d9!>%G0D#jVz{|M( pZV5p1)tw_o08Wq#{)QYglJ6I!Kc|#9Lk=_K-v}$O?GeL7;|JQYM=1aR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b5d2a2da83ba893565f3e9ad996caaa92c5c829 b/fuzz/corpora/asn1/6b5d2a2da83ba893565f3e9ad996caaa92c5c829 new file mode 100644 index 0000000000000000000000000000000000000000..5f6c2c89c498ade601d747a69e37806d3a83c450 GIT binary patch literal 117 wcmXqLU}H|#W?ay)wt>x{r2zz58XEpLRQ(5mwf{f=$080^CcwZzx()~c0D&((zyJUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b72c9ab07118eaa2a70b494c1e20d8009d4ebb1 b/fuzz/corpora/asn1/6b72c9ab07118eaa2a70b494c1e20d8009d4ebb1 new file mode 100644 index 0000000000000000000000000000000000000000..4e2305a778470c36ef8ac2840ef3dd93f6a7fd5a GIT binary patch literal 1185 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePG%+?ZFf3qTVt@jW=Flt=rZ)x*49s9%5cQ3W+Ds%GB1R2ExTs;s zz_>&nOTZ3{ORz;Tm0a?F@T3#n(G-iCi)o#A7{Db7sAMnz6-0~-u+qbzkqKPXya50q CcF%?Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b800002da0dcac0ab1c8befee5d44be547980e0 b/fuzz/corpora/asn1/6b800002da0dcac0ab1c8befee5d44be547980e0 new file mode 100644 index 0000000000000000000000000000000000000000..622701465f33252145c8a3fd0dda28647bd6faed GIT binary patch literal 4 LcmZ3)#J~Um0+Ilw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6b8d6fae12fb38e4f043081952343471ecd222c0 b/fuzz/corpora/asn1/6b8d6fae12fb38e4f043081952343471ecd222c0 new file mode 100644 index 00000000..f7a0d9b3 --- /dev/null +++ b/fuzz/corpora/asn1/6b8d6fae12fb38e4f043081952343471ecd222c0 @@ -0,0 +1 @@ +0€0€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/6b91749ecea9f52797d5d7575432f93da98ed9b6 b/fuzz/corpora/asn1/6b91749ecea9f52797d5d7575432f93da98ed9b6 new file mode 100644 index 0000000000000000000000000000000000000000..19b3e940af55e37df01b2a2b4598ef47944da756 GIT binary patch literal 2 JcmZQ&0000C00sa6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6bc1d0a29017f7f7f7dd6f7e894b1e5503727990 b/fuzz/corpora/asn1/6bc1d0a29017f7f7f7dd6f7e894b1e5503727990 new file mode 100644 index 0000000000000000000000000000000000000000..465da9df2e0e795a4456c22aef769ad42cf442ac GIT binary patch literal 29 ecmXqLU}7@RG!SNE*J|@PXUoWB(7?pR00jU|P6QYL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6bf46814bd147c19af282b06aa5d4c494f7fb5cf b/fuzz/corpora/asn1/6bf46814bd147c19af282b06aa5d4c494f7fb5cf new file mode 100644 index 00000000..c0a72469 --- /dev/null +++ b/fuzz/corpora/asn1/6bf46814bd147c19af282b06aa5d4c494f7fb5cf @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/6bf56d1beffac2c00e12c06b189353a998174a3a b/fuzz/corpora/asn1/6bf56d1beffac2c00e12c06b189353a998174a3a new file mode 100644 index 0000000000000000000000000000000000000000..c2a0042147c3e54975287c25e0f9bfb9625ac778 GIT binary patch literal 69 ZcmXqLU}9o2V8RFF4R8RkCIbTo1^}*41}Xpm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6bfc3324468212f2862e6e163c5d2c55428ff186 b/fuzz/corpora/asn1/6bfc3324468212f2862e6e163c5d2c55428ff186 new file mode 100644 index 0000000000000000000000000000000000000000..8b611329aa723b24d0f9b126e60234128ade4c62 GIT binary patch literal 38 WcmXqLU}Iu4SkPb~!NhHGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENEnEWMBZxg8@i$XqE`m8v_OgX0R@Z`bPYQFcW16HO!!aLn=^0 pB%$ta-T(jpzkq_n4@4k>a7)8mMZx9j@#t7QJDfnPy+Eg- z0d(c66zs0*D)z@FOset50q(fbj^;+aaP%_l7t)uIDX}D9Z*XWX3wlLEsg?X l+AR*(@^5jR^^+t_|8&D}{K}cuN3QyMEQT8JGCTm#+yGFqw6OpH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c3320263f2edb475cd715eba054a3a9838c5ed0 b/fuzz/corpora/asn1/6c3320263f2edb475cd715eba054a3a9838c5ed0 new file mode 100644 index 0000000000000000000000000000000000000000..cdf46ae7f7db4e97cb5ecebb4ca594cf9e15eaf5 GIT binary patch literal 17 UcmXqLP-!q|Flb<8SO}&K05AOoX8-^I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c357e26a753827c3ab18d5bd12f9bda85f2bcab b/fuzz/corpora/asn1/6c357e26a753827c3ab18d5bd12f9bda85f2bcab new file mode 100644 index 0000000000000000000000000000000000000000..e4d1cc88fab91879100cf04bc1feb7769f44e147 GIT binary patch literal 48 acmXqLU}92ZFlf+eU|@>;%fNt#1_J;OkqSou literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c4a22bf37d4b458ca564e2e219cb2d4e6a858a9 b/fuzz/corpora/asn1/6c4a22bf37d4b458ca564e2e219cb2d4e6a858a9 new file mode 100644 index 0000000000000000000000000000000000000000..4d605832672acec629ced93744f569697d94fcbe GIT binary patch literal 84 zcmXqLU}DN*FlaDnU}IXwz`(%5+vagjllebm921l1UIqpRCcy@#6b6tA28IR$cJW3= g!vzfn4e||a%%QR}EL;W+&CE=V3m6y}8KA%b0QOiAG5`Po literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c4b9a81fa9d25312fec6d38868ab17e5aef0913 b/fuzz/corpora/asn1/6c4b9a81fa9d25312fec6d38868ab17e5aef0913 new file mode 100644 index 0000000000000000000000000000000000000000..3395e2034e84635b8c0d3b108c8c6ee887ca735e GIT binary patch literal 83 zcmXqLFlb=o)N1o+`_9YA$Ys{Rz`(%3Y{h8Mz+|w5p<$r_0|SFW!xAQfw84@lCI$uu H0R{#D;0+KD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c5f6735b10019aa7f1a4b0492d7c45d87e2dd4c b/fuzz/corpora/asn1/6c5f6735b10019aa7f1a4b0492d7c45d87e2dd4c new file mode 100644 index 0000000000000000000000000000000000000000..009b5baa136f69df535863400afc910d9e4cbf84 GIT binary patch literal 98 zcmXqLU}7>bFlb<7WME)0XfSL5Gj$pmIRADwG&D3AfFzMP3=9k`ATcB%?D9}xU;qI2 C9vD;r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c645f0aa5e178b3f571ef03dbe519a938edcaec b/fuzz/corpora/asn1/6c645f0aa5e178b3f571ef03dbe519a938edcaec new file mode 100644 index 0000000000000000000000000000000000000000..d99ac20701aae32cb6793df38571642b8282d9f5 GIT binary patch literal 4 LcmXqD5@G-V0PX-q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c7e7b6aa7518eb727c8616d389fa069c901b064 b/fuzz/corpora/asn1/6c7e7b6aa7518eb727c8616d389fa069c901b064 new file mode 100644 index 0000000000000000000000000000000000000000..7217bc4f95203747d47a70192ffccd871fd85657 GIT binary patch literal 1524 zcmd^9I}XAy41KPpNT@>U#vPbEz`_OEV|nU1%1Lq&ZovQ}vgt=@*ea+1Wl8d0{CQTM zXejq>)84kUsi=rh(Si?(2tBL#3WO5?!LF{sY+Du4P+rD|jyezsAOOq*(;`L$LWe7W zBPL?Xn(~a1GD7z(!)B|S(#PSf7vMidRB8I ZT>3*3SM^}%zr7=VGjPnx=bqs1@c@^asSyAG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6c86a5dc2d69684fc79ef1d6dca13ac342c0204a b/fuzz/corpora/asn1/6c86a5dc2d69684fc79ef1d6dca13ac342c0204a new file mode 100644 index 0000000000000000000000000000000000000000..e374c9e4bc578ea0664376653940c0395c90301d GIT binary patch literal 18 ZcmXqL5aco7Vq=msbm#KuaSmlOeS;002OXE8{;hLyMQ7FOQD!pc@8N#&~^ z%nS^T+&SHhf_L$z-M1gFb%2l-GbYZ~0ck`}<|(L(T~FqLsvOemkpnAd>*X|9AR;Ov v0=zh1>^pko@MP-ZtFuKwJZ4hY;r& z1pgh8+aYdm0eIo3tg}gK4}sN znaO1MFEfl`R9RK-#@AtL?u^KGI7c!DS9pM6%x#k!+xd!V=r5}BvUL`E#XiB*PXG_# z1OUr*UDu4v?z?6NFoxvF0|0Mmmh5I?{%aFY{#h8b*YW1OYrN~~uFmTAyo#6N^{Oh$ z3FU-xLLB<^HIPn7C!`b73F$-=fk%y{8s>|#Qt=Wy#164T><~ND<9qMyijV)o$Lt2t CBbaIc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6d0f0011e1d0a6046db2b3062a91f8f97b6f18a9 b/fuzz/corpora/asn1/6d0f0011e1d0a6046db2b3062a91f8f97b6f18a9 new file mode 100644 index 0000000000000000000000000000000000000000..9fce095c710258f2d1aa5b68f0843c8c53cca705 GIT binary patch literal 129 ncmXqLU}7{dXfS9nY%pkGW706tX<*|40WmPi5K0@s00Ra9hXEp3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6d183eae9e00d40916aba4677aab6122ba8f8caf b/fuzz/corpora/asn1/6d183eae9e00d40916aba4677aab6122ba8f8caf new file mode 100644 index 0000000000000000000000000000000000000000..bec4906635f007d1d559dc2e926024672cf651f4 GIT binary patch literal 2918 zcmeHJu?oU46ug(zsEDBG;Oc6Zw+JE#j{b>@9}xumTlxk5jyP447`0tmYl=%=ha^Le z0|NsyBLj$QK&%yz3gB$SVkK~@D-OSDRKz38TrZxX_t N=w_nZ2~r7G4FC#G6UG1l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6d4a04af3813c77d9a5c0a68ec1010f1b35138d0 b/fuzz/corpora/asn1/6d4a04af3813c77d9a5c0a68ec1010f1b35138d0 new file mode 100644 index 0000000000000000000000000000000000000000..55a247175aee67e8a3f8123560326c8eea8e5ba2 GIT binary patch literal 60 zcmV-C0K@+UqO=lVk5r#+ZrVR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6d70092ccbbe1809e5b0b42cb24eaa581ecdd6cb b/fuzz/corpora/asn1/6d70092ccbbe1809e5b0b42cb24eaa581ecdd6cb new file mode 100644 index 0000000000000000000000000000000000000000..0b29aeb46e519121d739dff56963d47d6c7ae618 GIT binary patch literal 160 qcmXqLU}NTEVKQtmVlZrAU@*iEsV-xHWDgP>W)CwHBLfIDumJ$lkr8_U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6d78e59433c6b1f8e54425003eabb4035369101f b/fuzz/corpora/asn1/6d78e59433c6b1f8e54425003eabb4035369101f new file mode 100644 index 0000000000000000000000000000000000000000..9ed8da81c59a5616ca28dbbe198ce2a302d11007 GIT binary patch literal 175 zcmXqLU}92ZFlf+eU}K8>!OqsOcW=5j0|NsRUu!Q!eD7X#@hxEWSj18ElVBbLvVl!7 L2Wjoy!T<#TdS^Si literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6e163ae1147e866ca6496218d77d52424cbd58e4 b/fuzz/corpora/asn1/6e163ae1147e866ca6496218d77d52424cbd58e4 new file mode 100644 index 0000000000000000000000000000000000000000..9b45487077b9cba40f33d87183d006d9b8dcf799 GIT binary patch literal 64 zcmXqLkZ)jOoWr8U00B9T8LbS=DU1-FHB_{UK_Qewi;+RAm05*xK?57Bb|VXe7)TNT DEa3=* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6e16e9e90bfb89ed897b583fa6b32d2acecd33a2 b/fuzz/corpora/asn1/6e16e9e90bfb89ed897b583fa6b32d2acecd33a2 new file mode 100644 index 0000000000000000000000000000000000000000..1792b8e4e6ddc393023fff73fdbd54faf2a0e43e GIT binary patch literal 86 ocmXqLkY{3?!{Wez7l>e!tzuwc`2Qa&v!H>ERlAXefeXwB0N^_DX*ZXm8>Ra${0{LmM#20^zoR=hg1;lKBFVsDF_xO;l~MdCH)|1z3nq$*YK=2$fG;>{`-znUByxaga`&|t9!Rf1SnkMjGf|O= z(!@ouNh@=r`|q`$0`wGIDBwcDMVqLv#+ygqq@foqc@%kcltL5=E|hR_XvsT@QA8>b zc2s1d*in&*3LQnMMyZzM&wuEsVC0Lqjh+#I+!5VGH_;vTSQTc}{rG#V3NEOlj@41Y zCe3=}3-Sf|A~U|=F#n&!JQyjdcOj;r2J?U(6BRi?@+fy6>x(>U!6+i3H!!1a29HmV Lceq;6cQWl86WeG# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6e3d9b6b9330c920437cc60424960e0a755a3d3a b/fuzz/corpora/asn1/6e3d9b6b9330c920437cc60424960e0a755a3d3a new file mode 100644 index 0000000000000000000000000000000000000000..d58bd0fa8767c8d0cfd261bb7dcb9999b541f0ad GIT binary patch literal 17 YcmWgVH#9RaH#9ReHZ;@S7R8VO035Lc%m4rY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6e72dd3a5f68536ea87da4c6de9457cd7d237d94 b/fuzz/corpora/asn1/6e72dd3a5f68536ea87da4c6de9457cd7d237d94 new file mode 100644 index 0000000000000000000000000000000000000000..0a4c2c88d1978fb5471a2e0afbfcc88d1d509398 GIT binary patch literal 251 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOxxay7KSRU91_Ll;V`Nywz`$U@AkF|1U}A(Y z*x8svWo20y;0zcrXkcS{W5B?`%m~s&k`Z9Dx*+{sdFg%CQbvJX+IB%Vl}#OE(mCf~6m&NLr&Z4G^@E%p;-CYlfzsmdkUY#I&+afJ85#0l;77 z9dQ{Lyj|@RJ%*n6%>l?~r>dgmu>KVbKx={>w*a*J;ZXhpap+TC>xw7t17vgusa_zf bbMXa;I{s>OSb*7!VcQjvq~q7fOtuqe$@%a>tkGGLf8GyI9@*9PYQ{TfE<)+ YcFI9%j_Pb0Cg;OBcYHYKfc{403A4dJkN^Mx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6f943b17e6946970f39a1c0abcc99fb8b4b92d6d b/fuzz/corpora/asn1/6f943b17e6946970f39a1c0abcc99fb8b4b92d6d new file mode 100644 index 0000000000000000000000000000000000000000..880b31c0033bfd1aa2ec9cabab0cec7e464302cf GIT binary patch literal 640 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcXu1h%+#NrQR4Y YFfcQMIUxCAEIaaij6a5{93FiQ04#rDi2wiq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6fa6885ed33befc0140d8bd024e5f25afc97cb31 b/fuzz/corpora/asn1/6fa6885ed33befc0140d8bd024e5f25afc97cb31 new file mode 100644 index 0000000000000000000000000000000000000000..08b0a10f559e205953c8b922ca5296cd01151b4a GIT binary patch literal 3196 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZ|A znD&3gu+Rv1 rkqT8TiV@_cCKMycD_E#t#AqEeu+7HNwgTa{HAWr7NUP>QmbMuHgN|Cb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6fc2672379da6851d8288c43f3be93ff8f483c90 b/fuzz/corpora/asn1/6fc2672379da6851d8288c43f3be93ff8f483c90 new file mode 100644 index 0000000000000000000000000000000000000000..b057aceaf01bb165cf71c6d8966199e2d97fc075 GIT binary patch literal 87 zcmXqLkZ)jOoWtU{pn;8*0RnPt8Cm}S2eGvqS+rW2Qy9VG)eH>Rt29BJ2B^X+1_cHN SEd~a#8ju0njVuhxAV~nmJPw5b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/6ff99ca7c76ee3f0d25600223dc59bc262394fe5 b/fuzz/corpora/asn1/6ff99ca7c76ee3f0d25600223dc59bc262394fe5 new file mode 100644 index 0000000000000000000000000000000000000000..0357a137b5a2f2046ddad6c9fd5d010c41b808b3 GIT binary patch literal 208 zcmXqLU}92xXV9S2z{2$L6FUgAJzM;j`GpMwgHD4W)3@jBYyx}#GJX8S4-#i!P-I|& qswJcjq@Nk8pMgPu0R%usAR7%f5@Z!IiXrX*+sgpfgm53sd!_L+?XYbymmpD+%hs nenVGJf?H5s4C664KtczH`$6XaVMor`0Nt_&?*IS* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/70185e1ffce416c93d060365eeaaea0ce62bbe48 b/fuzz/corpora/asn1/70185e1ffce416c93d060365eeaaea0ce62bbe48 new file mode 100644 index 0000000000000000000000000000000000000000..46abcefb5f8b4e9d33cd93b9cf4804d35990cfd8 GIT binary patch literal 18 ZcmXqLkY{3KP;LliVJ>5EU|?Wi001320*C+r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/702ae3810cee286d2e76e44224b25d23961cb48f b/fuzz/corpora/asn1/702ae3810cee286d2e76e44224b25d23961cb48f new file mode 100644 index 00000000..ab3fb891 --- /dev/null +++ b/fuzz/corpora/asn1/702ae3810cee286d2e76e44224b25d23961cb48f @@ -0,0 +1 @@ +0€¡€0€00 \ No newline at end of file diff --git a/fuzz/corpora/asn1/7061bf8cfe63354fe4bb84d6c3c2e013d5810068 b/fuzz/corpora/asn1/7061bf8cfe63354fe4bb84d6c3c2e013d5810068 new file mode 100644 index 0000000000000000000000000000000000000000..8e8c47c59fe1819e8968e7927a32d780696fe3b4 GIT binary patch literal 20 bcmXqLU}BuZ!myx$ja9pmg+Z2qfq?-4EKvhY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/707fe4a0fb211a12cc0d2fa43dca2c03e198e18e b/fuzz/corpora/asn1/707fe4a0fb211a12cc0d2fa43dca2c03e198e18e new file mode 100644 index 0000000000000000000000000000000000000000..b4c92edf14680f741f54349c37697e8c0ba503a4 GIT binary patch literal 179 zcmXqPFlb<7tT1daU@%~i5Hz$jG&VFeG&C|aG}JXTGBUs-#7a<|0a$AS!OqsOckkZ43=9lN{N;PMpzzV- th%^P&guQ#wZNZR7^(A5TXs$-r4-Y*wb#QSi+edBl;O->T{aY9y000`x+6@2z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/713ad7f57336df056e1c5c2f23bdaa6a1558acf9 b/fuzz/corpora/asn1/713ad7f57336df056e1c5c2f23bdaa6a1558acf9 new file mode 100644 index 0000000000000000000000000000000000000000..b0d147e1d5901cf714a0c04ccf10b96ac2b95f44 GIT binary patch literal 171 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1-U0>&Cc!eM6b6tA1_lNL2JuEl zg9RYf%%QT%EU5+!3mO(S7_f>lsyH$ju(C0#@PR37IWVQI0THxefPrc-;}?ue0=N$V D)4LUX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/717bddfb84cd8a248ab859bcc6e2d9ff02e82822 b/fuzz/corpora/asn1/717bddfb84cd8a248ab859bcc6e2d9ff02e82822 new file mode 100644 index 0000000000000000000000000000000000000000..d1d8f8382d759671c326b2f0f8275689fb2cc1b2 GIT binary patch literal 6 NcmXqLSjeEr000JT0doKV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7182030ced2deacf3791067f81b911f799205514 b/fuzz/corpora/asn1/7182030ced2deacf3791067f81b911f799205514 new file mode 100644 index 0000000000000000000000000000000000000000..099e920b8a0701cc3ac3796d567f671fee0e83ea GIT binary patch literal 52 ZcmXqLFlb<7WMpJyP+?$TAcoDr004`81StRj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/718f955139861fefc62329aef65ea2563edb1bb6 b/fuzz/corpora/asn1/718f955139861fefc62329aef65ea2563edb1bb6 new file mode 100644 index 0000000000000000000000000000000000000000..96814e2201efb3ceeb19a9e8de972f50b326caaa GIT binary patch literal 590 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjo%ugw@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 uH!>P50I6nnk(FTyFlaDfVPIe|XkcR`fkCQzk_;c&iW$g=4(fy$2mk;KVntB^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/71afcaf2b31c1f4e344cb21fc9bc9f26f7a5981f b/fuzz/corpora/asn1/71afcaf2b31c1f4e344cb21fc9bc9f26f7a5981f new file mode 100644 index 0000000000000000000000000000000000000000..4b0e5fcf6842a96cb12eca684c10a971ceba7f4e GIT binary patch literal 5375 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gsIX0|Njjd420pT7#SE08rWD`4VoAj7?>Fu zKwJaTtzZI~{vQHVHiI}mAcBD*158rG3WP6AXyprp6|@Z~7@&1P4G&+8MmLeUdo-X% zKtK(*GHNu@j(|i9ZXUn@t!urZoT5f^_aJN2!oX;v1@$$s_b=#>yXj!XXx1CedeE*j dl{&?vDQfVfsL{9>JaIwS!h9&V21j&20RUb@LF)hj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/71b59cda146cdfec77ada33abfde611e64cf0eb2 b/fuzz/corpora/asn1/71b59cda146cdfec77ada33abfde611e64cf0eb2 new file mode 100644 index 0000000000000000000000000000000000000000..7410b629b88e409239905f226900e5cf2579dccc GIT binary patch literal 19 XcmXqLkZ)jOWKeDhWnpGuWB>sGA(jGD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/71cc74b3049695be0b0f78945fafde1de1d6a74c b/fuzz/corpora/asn1/71cc74b3049695be0b0f78945fafde1de1d6a74c new file mode 100644 index 0000000000000000000000000000000000000000..36326c7cb4b423457ecdd769dd66c7fe6ed55f2a GIT binary patch literal 20 bcmXqLFlZ3uG2mijG7#fo`8IX>e+C8sFQ5fC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/71e9a4eade61ae0af07c98e5abb54e215361056c b/fuzz/corpora/asn1/71e9a4eade61ae0af07c98e5abb54e215361056c new file mode 100644 index 0000000000000000000000000000000000000000..5b18fc9a47d5d22a3cb8bcd3229dd765afd1f871 GIT binary patch literal 204 zcmY+7F$w}f3`KutGSdkPipA`7g2hi?pIo8Hocm>bkMPwzbh^9$? zcrOuk?vzADqq_p&(fM#+`ktBx&29kPL|xNA#e1(1%v+MqXusc9d=%~Uq7owQ3M9nw xVr7js_^$#2OsBQk=GQs#upH)!sQkn!7e^ty$y|dH14h~vjXu|3nF@b?y#TI{AN>FT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/71eba76e08d828ba7b9ef10d05b2cece50ae9ef9 b/fuzz/corpora/asn1/71eba76e08d828ba7b9ef10d05b2cece50ae9ef9 new file mode 100644 index 0000000000000000000000000000000000000000..5314e7e3a83752c529edaa7e6e899c81961e9912 GIT binary patch literal 251 ccmXqLSkSPbp^bqau$`*5kY^f17l>p40LyAZ(EtDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7204a9cae0682105cbe75689a0ae61345544cb37 b/fuzz/corpora/asn1/7204a9cae0682105cbe75689a0ae61345544cb37 new file mode 100644 index 0000000000000000000000000000000000000000..d8e3fb2147f31728ae013b7c96d09eb7c59f3ac7 GIT binary patch literal 43 ocmXqLFc4s4*J|@PXUoLM#;V=O!XU;h%)rdZ$iVO)1Q_4|0LaV;>i_@% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7215c85a7b88d609f33a4be24b57191313d0d27d b/fuzz/corpora/asn1/7215c85a7b88d609f33a4be24b57191313d0d27d new file mode 100644 index 0000000000000000000000000000000000000000..38be2e23570b23029fb2dfa1dbde1456ab61306d GIT binary patch literal 386 zcmb`BF$w}P5Jmq?)`-}oTw5#IG#@JwY-Ni*h{uS6>Gvkyz#DiSJC$qsmPYEu9@VvAt|m?8xsc%*_%8MUKD;;0nO) yo>j6gncZ_^u+@W)F0sugKfQtYC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/729270f0930e3276da8024a8da94d278af121b51 b/fuzz/corpora/asn1/729270f0930e3276da8024a8da94d278af121b51 new file mode 100644 index 0000000000000000000000000000000000000000..2ca6651d14443893f8c86f2db27ed2361af282d9 GIT binary patch literal 1622 zcmeH{O-chX6vy*5sWWEkAc_kWT`4HVUzDOtm%Ttw-~~KF?4sb>3sn3#j@NNnc{5eo zPWNu+A9(NO&kqukypVi;F&$06OWiZGL^3)>Me+uedQD99GZQ^B8gidq_N_V06c2Hm z+}p7u7>GNRGU)|Rt+-1iMiKJH0OAz`@oYF-c&ANXq*W6*D1lq49{;9yQqAWQpWZn) zTT+Pxj$GIE4G<{29Ut#ITj-Z{kQi%N@MZ9;1r7y-;Trh48LZmitpB^hp0lfmXi*GI prs_R6af73s?lgFwg)XJ30#c%1ld6V(6JJxYqZd`oAqQ)i!LVz6ho!v!+EJ!0!{83 z7*zlq>iL0O3DA}RZ-(duaTKFAL<#U!1un6Zhl!}WP*dD^KMXKLGB5xDJuDKW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/72ffc4fededf4096482e65b293c6347ddb42a031 b/fuzz/corpora/asn1/72ffc4fededf4096482e65b293c6347ddb42a031 new file mode 100644 index 0000000000000000000000000000000000000000..425bf4a4e09bd68e2fdb74e0719b76e6fc57f1fd GIT binary patch literal 87 zcmXqLU}92ZFlf+eU|@>;%g(lU@7~*6Y#11H8rZ;m*8l%mk@$=Z3~UWLAQ^VHhNdM9 RynkRy`Pmo*niv_N0037N7Cry~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/731a9e10d808d92a4a922d0942529cb9510eadab b/fuzz/corpora/asn1/731a9e10d808d92a4a922d0942529cb9510eadab new file mode 100644 index 0000000000000000000000000000000000000000..b09fc6fd6ecc54fc284520a880eb1444674f76a9 GIT binary patch literal 584 zcmXqLU}j{%iMSY;8SyH>qZd<(m4TTNQxv}lNiHBsF@Ad)8EETVc7oQEq<|!!lcbmk HXMg|z*=Pp! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/73482f247d0f0f25ebb7e88d976e0081a968875c b/fuzz/corpora/asn1/73482f247d0f0f25ebb7e88d976e0081a968875c new file mode 100644 index 0000000000000000000000000000000000000000..c16a9abdd383da3d95f240e4f3e93ff0841484df GIT binary patch literal 524 zcmbVIF%H5o47}JV5*}bHb4NBab?0T7Q9r_0_!25Xwo_;rxk#z)T+cq!4Gn~Pj4%y7 ze)9%U&?hZ9;Zib46sdshTDp%yNwWb zgl7;{RkomQB7!y^D5j6we}!Om64HMmnWT%md0T5>qL9~em*_M17(GQ_oaZp_%R866 g&eXTzPeW$r1K?lg#!gmc=C;t)Gii3qV}j|P-WHumvj6}9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/73a3ffa8016c5bac43dbf115c758976a2b31d03e b/fuzz/corpora/asn1/73a3ffa8016c5bac43dbf115c758976a2b31d03e new file mode 100644 index 0000000000000000000000000000000000000000..ebc9e2086ff6520d3b6c5373dea7937d98ca5426 GIT binary patch literal 71 zcmXqLU}DrVY%maHVq`F2HDCZy%xsJvEDQ$1aG}oztZa-PtPBuAYlylgu%Hx3kbw;V D7)}Q= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/73bfa72f1963e8b189c0dcb437ee0489307009e3 b/fuzz/corpora/asn1/73bfa72f1963e8b189c0dcb437ee0489307009e3 new file mode 100644 index 0000000000000000000000000000000000000000..110f2638c2e3c40f4cf49afc8793a028de22a845 GIT binary patch literal 551 zcmc&wI|>3p41JkdvnW`K2#V$UX`Y35@B(`S50YxnvEIew*jp-@nJpDT!K6q?@{;#L zqv?3pox1x}>d+f4h#f%FKmr$Ia+N&<05KQ(6unfXQpzxxBU@Uy5s0~8rhm7f!Rs@H zWK&4ScD1ZFwBB5b#>Kjtj8v}MfiHj>#~d8{p_(txWb4QqQ6!@c{4yTQ5^f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/73c01cc77e5a022cdda047d43f3ddfcc5b863037 b/fuzz/corpora/asn1/73c01cc77e5a022cdda047d43f3ddfcc5b863037 new file mode 100644 index 0000000000000000000000000000000000000000..3ec9c93a671c15d2e48d795f7ab2ec2c7dcbdc08 GIT binary patch literal 28 hcmXqLU}9imVPIfjU}7+6U}j=sU}8Q1;xaHW0{|q>0y+Qy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/74084450f19dda6628e62375bdfd73da94d5a7ca b/fuzz/corpora/asn1/74084450f19dda6628e62375bdfd73da94d5a7ca new file mode 100644 index 0000000000000000000000000000000000000000..5790a485c8ac8440656b0e85329565bc8ad17ea7 GIT binary patch literal 1292 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uyC0&K!5;99t=R5L$gGf-WV`2FoShL)HmWVM45%lpkZMnOCtjl*b=;k z;4njmh06eKlzKnbOW zq$2`3g8>L6+#cTfU{kxBc^8bXEwLaXC5Y_l96x!+?<2h7*OPgT0@b6Fixu2~ln$Y6 z@U@+W9;S2%eaNzGRVl=8+=78_1}^l`7gBDeR}@2{exss3%SGsPuec0y6m9hy^@fW) mQQz=mu%>F`MdU9bFB=3_F0RJOMgB4hc2XRP;+BvX9p)Ke!*uHa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/745adbbe8c1b837a073cde881ec7d01b6afc7a9c b/fuzz/corpora/asn1/745adbbe8c1b837a073cde881ec7d01b6afc7a9c new file mode 100644 index 0000000000000000000000000000000000000000..6717c93ddbc933278cd7c42a8b5e2a76c04fd18a GIT binary patch literal 61 zcmXqLU}92ZFlaDnU}IXwz`(%5z`)R;3gNK`G1S9ApDhG1Fc>tjF*1UbF)#oCkt7Uq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/745ca9526a0f975b8be2109a7dad85a3e46ce668 b/fuzz/corpora/asn1/745ca9526a0f975b8be2109a7dad85a3e46ce668 new file mode 100644 index 0000000000000000000000000000000000000000..7eac1f492247f47356facdf07128a345fe85906e GIT binary patch literal 116 kcmXqPFlb<7tT1d?$UqowgsWK!XCdo?$zzvgU}S&*078Eui~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/748baf827bfafd1465ba2990646c92595a87a628 b/fuzz/corpora/asn1/748baf827bfafd1465ba2990646c92595a87a628 new file mode 100644 index 0000000000000000000000000000000000000000..50974097072237e070170f36c5aab3d2709edef4 GIT binary patch literal 3916 zcmY+{d2E$M5CHJL7OJH_juu@p&*B7dC~_Kp9hXLgX?h7$iUlW_IV5dHmNOv)^uKXJ@xi->N^< zw*-ji=5=rA-*6!wi{&@Zf`#j`09xm^$XnHQ>1*eDRL9yCWmk^ILTHm=IU|NvViB~> zz}(8w11icZF(2}Bb4E1FEu@jHAWlEDC`|uvDfA-9Db$t8$;ml0Ym&7k1FBQCbv1Q! zN-9#-sTs+-nyIxV$=d3Y^6}$SGiR1mCTo)uQ&Up4b;WTEAOr;ZhhzMYI{hQm$E%hFM=)PAZ4Sf!Zr71u5CTUu^vF)T8zi;h@C3ubw(v%4w^l0kqPG+564Z8FaII=$T+Xh5T^ zUvpP!oU1#;SVTW>w+!>&yHlF-)?FIs^seGKYKT+-fC=mOyvH?D0RH#wDGhy{-Yt!D ze~&cYOK?Ux0MI-yI#Xx>z@pz@CC3_{11*i$XM`c|k(I{l3#4)WLTS8jku#+%L=f@W zPsljq^U{m+2Vf9+E%%Bz#knt)ru_LWqp=XE0IWgoL-#eAf%G2rc4I?OfS5k}eVXE| zQQ&i5F6PkS*LQ!@SenG!12T^H=t1|r5D`LUxc~K)aoVrBLK>g_e$qGx{hiU8!5ThC z14NwRvp>*T0wPFQ%RTHNx0VPsTGZTg28lSMeQi`q<2@QohJXQ}0_|&jh%*EPG@CynbMDUJKplftz1 z{cpT5!)vL|Fdvta#^0O3YYxE}#d|qX#9975o|4A>zD647YLYb0{nO46BI>(*wkC_X z0DK>sl3~8qYNheLFjX3#{b|zp?wKx)b3enGRvIG!zPo2i>_+oBGnt=O9De`9)yboM)WEoY>-G> zO1M}eoms*q0^K1aTL5lbh5nl#ISe3xP`OKth94kA zr8EQvsiFwKXhLHWbbS&Yb;Id?55T>J2*0})X@M?K!XF%hQc7u+PTh|VQ7KSX)A69l zpE%N@_Pw3(SBdl(EzHh#uVn*>1`I?z+&!0@kdy4*d(?Llpp|=5(r|j*5k{a8>A(`w zO<*WPpmd=8l3Y6{jKHV_l@~=)U0d*f42}{G@%0OR=v9~2E@R1uckY|5KBDG2S<_?FE0<@s0Clco-1|b}0XU;LZrT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/748f4c2c18b9948761927862a67b8fb62167da75 b/fuzz/corpora/asn1/748f4c2c18b9948761927862a67b8fb62167da75 new file mode 100644 index 0000000000000000000000000000000000000000..731b52d03282c32a3e4385740ae505af0d0b72ec GIT binary patch literal 7 OcmZQ$)ox^AU<3dIHvqi= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/74a433285081617832150fa8dcce39b56e862f14 b/fuzz/corpora/asn1/74a433285081617832150fa8dcce39b56e862f14 new file mode 100644 index 0000000000000000000000000000000000000000..8be4407c2523e57f1e0d91e113d8a3330576c496 GIT binary patch literal 26 acmXqLU}Dr@68!(4!Jmnd0gS*D0|Nj+_yb7* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/74ab0b5403b3aed3c9be05e4a2aebaee30306ca8 b/fuzz/corpora/asn1/74ab0b5403b3aed3c9be05e4a2aebaee30306ca8 new file mode 100644 index 0000000000000000000000000000000000000000..64e6da9493c96cb2187949cae047a67aa575b6bd GIT binary patch literal 3561 zcmeHKF$%&!5S-nMry@eo!c=0NG=r5`h*(+ps8cYnv9{*X>@$x#$CdF;z(huayG`hC;T5Fy7b9{jjW0%_b8Ls&j^wTf((Zba9C1 zSIh)p@Y$6Y08Y?7`GMfOZCJ>yhbTDjAdbyWg(HP3pnat^iepHIqq|Mblue`~NV5?W dqzN*?P5Vb#+EV%>*=D##wi#|xhWqo=dI6ou;e!AG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/74b5bfd90dbda122bafb8af867e51cda5d53821d b/fuzz/corpora/asn1/74b5bfd90dbda122bafb8af867e51cda5d53821d new file mode 100644 index 0000000000000000000000000000000000000000..d7933a3390b746b0cd6909b90affde05deae60d1 GIT binary patch literal 172 zcmXqLU}CbDHfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}>l5roJw>o6GTurVr%sQ=jC k&|m`rjVugG4Gn)bFfbT2EMRJoWMGJa0|qc)hfoF$0NF((OaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/74dc47ff5be05862f4b8cfd7a61cf2f86611e1ef b/fuzz/corpora/asn1/74dc47ff5be05862f4b8cfd7a61cf2f86611e1ef new file mode 100644 index 0000000000000000000000000000000000000000..e4d7dede7161d81c511625d19b3d20ecad34da6d GIT binary patch literal 699 zcmXqLVB^;M?a{WKmyuI|k!e3eg8>*aF&P*bG_WygGczz4Fc>sQFj`448i3hG1_EsC zT5TTZY?&C@ShX8j7!;W07?>GgfDy((1_ljmEUgAj3=9m+AbF4_qgEgX5Dbh46h?|# R3QCkrOa_o3@`X@K832weOo{*i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/74f5dbed26b1a337a8bb237732607e97c20a02f1 b/fuzz/corpora/asn1/74f5dbed26b1a337a8bb237732607e97c20a02f1 new file mode 100644 index 0000000000000000000000000000000000000000..d9f1f832caf06d61bd6a669179b415d55f160b0b GIT binary patch literal 88 zcmXqLkZ)jOoWtV400B924BCw>408YfTQO)cXg6lGGBBqwLM5S~0ZLafD1>roF*0bi QGOI8yXkcRn>x4)G0CY4AU;qFB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/75052903d81721a67e4885de260df7d323904f7a b/fuzz/corpora/asn1/75052903d81721a67e4885de260df7d323904f7a new file mode 100644 index 0000000000000000000000000000000000000000..5cb1164c3c6b719b359987afcb16095036083305 GIT binary patch literal 100 zcmXqLU}92ZFlf+eU}IwV%Ffon&d9)E!@vOIGk;)bYhYjnv$4wk|BI#;StCdi0szJH B6T|=j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/75279dff0b4255bc88dab0cca431e5bb26276515 b/fuzz/corpora/asn1/75279dff0b4255bc88dab0cca431e5bb26276515 new file mode 100644 index 0000000000000000000000000000000000000000..382fd8172c288634ed4d5f706cfc0cd5cdb4742f GIT binary patch literal 236 VcmXqPFkoe4G%#cs?i2$90{{+J6z>24 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/756fc8353f2bfd92cd17b7d2349b9c29d82b4176 b/fuzz/corpora/asn1/756fc8353f2bfd92cd17b7d2349b9c29d82b4176 new file mode 100644 index 0000000000000000000000000000000000000000..907b1f3151da6db3bb8e1677fe669e0471953688 GIT binary patch literal 302 zcmXqLV$@<{y1-=6_?nGftIgw_EhCdb<9#N9|NsC0|M&mDHHe0RZ!iW~fQ?au5o!fF z`WYaAon*a?OtK9B|1&WB?}Qqm=^7KGWy{3K$ZW;HlBJ&ViD_fI-O8riUGIc-HiM1- d$0Dvkhei_*K>+r6+<5>1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7578bf871b81f3b9be9d8df014f9fec68e002ad4 b/fuzz/corpora/asn1/7578bf871b81f3b9be9d8df014f9fec68e002ad4 new file mode 100644 index 0000000000000000000000000000000000000000..08841d43ef27559982714f7900d40460223f78c0 GIT binary patch literal 728 zcmbtSI|>3Z5Pf+XZ3G(&v9i$KTX~ITk6|aWNWe}z309uKLoA4p)=o(_ahHwj3j3=0 zWMzBCCh-6tYPYX%t?xe_0~lQ0)??41&9oLT(A>T4v_)mQ5h4e zqoh)~nfPpk5w+I(WG6mv-m0VV&2Pqzb35aW8;83HV`F9P#(j({OGn~;5v6VK4k~-j pfieH$Y!7u%xfzsYb(FUVmP517A1ufh*tvoIJ+3E!1cj;<{|)_SaWwz{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/75877fac394682ab3d97407578a1008c34aa0ccb b/fuzz/corpora/asn1/75877fac394682ab3d97407578a1008c34aa0ccb new file mode 100644 index 0000000000000000000000000000000000000000..3b87e982f318de2e9025ad0b5850f070514d20a7 GIT binary patch literal 8874 zcmeHNOHRWu5Ph~$5J=r2bpsbDo9Qh$Kzj*R9Klwlo+I3cHK*vFU8&+GRf~zp(1|*g zCRxTAjpx1jc*Yc~yV?3>{WWp7zK#^Vi*rz{JQ467DZiC_h66yDCP&ROid9%XJ>J|? zTm_$MY|LT1`D(X$;x2RM+e<%ywF+GIFS z7Qc9LzXS5U*w8r#ov~xAp(Bk>zwcZqjp~7zqsd26T1Xmpcz7J!0rhCYL8mPIB+(Jk zL_~-PIwC?8Y{wujX>W(7(k3lW6fpLR(Xq1J8V)B-82-siB=3j_Q4k6&d6j{>4UZgj ztSleW!2E|{OLWwwQ4UY8U^^Dsq+1_j(Eg8kgSxOT!YUCVBJQe36Fu9}V-r1^bm*A7 z+Q>8yggZhUjggg~U>1scy}Z-^g$4`fMIUvUyJPGaA*`JuWYM|oYVJ?)K<0Z-!l&>p ZjONluZ)MM-gM)Y2Uq*q458LgxcRQf8A?W}B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/75961a241ae4a930672d0abbbb7ff4c9eabe0dad b/fuzz/corpora/asn1/75961a241ae4a930672d0abbbb7ff4c9eabe0dad new file mode 100644 index 0000000000000000000000000000000000000000..1a491712300a017a3a20598863cec12d6fbe4bf5 GIT binary patch literal 170 zcmXqLSlD3Dz^0|hz$3uG6Ut&>V6eWSUxk5zfq@Z3Fc>^$VCZIquo(<_1VUK~3=GzT br67P+0f~bHpea#AQP#@t4#30R@Xv+(TNDr%O2Tm6Hn VJN_XWEoHuQ({zv8zJU-5X*;7z`T38LcE3A#4c)VK#QH zHji_*OpFE`|Nj5|#=yYDz|6?Nz+lk8#?org#J~XK8elPK4R(W=7?_x#2C)GE+|C+P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7616befafb80efb99bdc0bdab7c4f57d44eadc8d b/fuzz/corpora/asn1/7616befafb80efb99bdc0bdab7c4f57d44eadc8d new file mode 100644 index 0000000000000000000000000000000000000000..6d5aa06e89ac6573aa6052fe526243765d9c11ca GIT binary patch literal 60 hcmZRw`p>|?z`z0`K!CFzOu_ls06W9~|Nl9d831o+1ls@r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/766db02ba389f8c75fde2950c87700ccd5f75875 b/fuzz/corpora/asn1/766db02ba389f8c75fde2950c87700ccd5f75875 new file mode 100644 index 0000000000000000000000000000000000000000..d2a9210b36c2db19b3dbf730e2354d5601c10f93 GIT binary patch literal 76 rcmXqLU}92xXV9S2z|X||f}O45-d_f38wLiQ1~xeVIT|0EJO}^)T>BN0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/76c5830bc2df30cffab01dab3e96915a5088cf64 b/fuzz/corpora/asn1/76c5830bc2df30cffab01dab3e96915a5088cf64 new file mode 100644 index 0000000000000000000000000000000000000000..f0a35aee43f83c125b4eeac7564319e0f05e62a5 GIT binary patch literal 176 zcmXqLU}92ZFlf+eU}IwV%Ffon&d9)E!@vOIGk;)bYhYjnvmtVvsB-`RqViERf+Qj4 QpqmRf%MQsNBFq8-03SRf)&Kwi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/76cadcb90db3b785216c80def6ab858a04f9469e b/fuzz/corpora/asn1/76cadcb90db3b785216c80def6ab858a04f9469e new file mode 100644 index 0000000000000000000000000000000000000000..c56744256e2f929afabde0092fcda8ac0b6ec025 GIT binary patch literal 56 wcmXqLFlaDnU}I!pU@%}1X8>`S7$FRHHs(+nSr!HuFlb<73N>J0UVExDU!~pQUe5CChJTXd_`-LqHSKa5)*GriDo*7P66D2 z4Hi}3)3`Z%zxAw@2ta3|6ORD2z>gdsQ63^Jbq)m!U#p-Bz&#Fj7t}{wMn|~87d|4< Y7WxW&_5p_h_B`_PKiD6&LkFroF*0biGOI8yXkcU2Ze(E)14#k^)3pYf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/77cacd0d7a359f0ba6028e693e97baa20cc9d9d2 b/fuzz/corpora/asn1/77cacd0d7a359f0ba6028e693e97baa20cc9d9d2 new file mode 100644 index 00000000..825bb2bb --- /dev/null +++ b/fuzz/corpora/asn1/77cacd0d7a359f0ba6028e693e97baa20cc9d9d2 @@ -0,0 +1 @@ +03212212222-1250 \ No newline at end of file diff --git a/fuzz/corpora/asn1/77f0678521b50fb499634743fb801553fd24c42c b/fuzz/corpora/asn1/77f0678521b50fb499634743fb801553fd24c42c new file mode 100644 index 0000000000000000000000000000000000000000..35ceb73988789acfdc02130af792d65c9c392711 GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2_Mz`(GSfq~&a6g)bo#mUIXz!1#9zyJV9 CK@N)m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/780964f424a71ec151f54091454241354d2f7a23 b/fuzz/corpora/asn1/780964f424a71ec151f54091454241354d2f7a23 new file mode 100644 index 0000000000000000000000000000000000000000..e319f11f39712f3ef9f1242b85d0bc44ab9cb29e GIT binary patch literal 1591 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4D8Hu3~USx3=B&_gqi98|Njjd41^)73>XX;7#Iv1*jQQ(niv=u ym>I!b1Gp91qgJq6w|NYTfEtbN5tV2ujP8)Zk!VK?5F!&TdC|?zEXRUg&I17W{t=G= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7816004855919afe57680dc5e2d153aa98b5289c b/fuzz/corpora/asn1/7816004855919afe57680dc5e2d153aa98b5289c new file mode 100644 index 0000000000000000000000000000000000000000..3784c21910248911b8e175d2cda49d306d9913bd GIT binary patch literal 106 zcmXqLU;+Vy{|t-_3=9Shh7D}&TCL1XOd{G~2?i(tbC7|-e~{QUT!0Cp9Sk6b0|04j B90mXY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/78184ce81c3e8de5abdd326b7a62d4a3abd87237 b/fuzz/corpora/asn1/78184ce81c3e8de5abdd326b7a62d4a3abd87237 new file mode 100644 index 0000000000000000000000000000000000000000..06acb7f710e9c395159b1945cce785d8c0843ecd GIT binary patch literal 4 LcmcCuVqgFO0O|lc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/781aed792536f0846dacb21a350e181dd0a0f726 b/fuzz/corpora/asn1/781aed792536f0846dacb21a350e181dd0a0f726 new file mode 100644 index 0000000000000000000000000000000000000000..fbef6897943bd7fabe8e773eb68e85b4745cae09 GIT binary patch literal 140 zcmYj~yA8rX5Jca8xDp7#WXP9X14tA@6-4X6U09YoBczN)J_vZhXo5GI7Uxh|{Jupw z)X6ykH}QPIg*y2-+e6sN%4cd EA4!E3LI3~& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/787abdec1c5548f3e41b89e88b38c68a2e41d1ac b/fuzz/corpora/asn1/787abdec1c5548f3e41b89e88b38c68a2e41d1ac new file mode 100644 index 0000000000000000000000000000000000000000..e9042e6c80e75d93527884228876f24f9d02e953 GIT binary patch literal 814 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-tC>VPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePv@kX?Ff3qTVt@jW=Flt=rZ)x*49s9%qh<_Pc!UpZyx>nL6r>NV W2~LWE0g_B9PH^iO7$AnArg;F%5sRz< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/787db4cdc8eb7793d5a4b64de0f2c9e170abd52d b/fuzz/corpora/asn1/787db4cdc8eb7793d5a4b64de0f2c9e170abd52d new file mode 100644 index 0000000000000000000000000000000000000000..8346b6852bc8a20459c8ed816a467caf66965e29 GIT binary patch literal 17 YcmXqL5ac#!U}H28V^a9dz`(!&03E9W=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/78918bdb1f7d7e576f35b568aee9b0f8f939c9b6 b/fuzz/corpora/asn1/78918bdb1f7d7e576f35b568aee9b0f8f939c9b6 new file mode 100644 index 0000000000000000000000000000000000000000..e09af0e8cf9b00dda8630c6d682a5f28702bbc33 GIT binary patch literal 169 zcmb`9!3{uA5JYG9%L<8`#Dxa9%f-n0I||=vMUGxLuXxx;tIP rBj~0ia5!H~1_%JoXe2%w-9qZxtfa5906P@lo;Xdlo&>^M{qP|-ZCD=K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/789e9338d0a6adffe36f391bef7158dc67b18ff7 b/fuzz/corpora/asn1/789e9338d0a6adffe36f391bef7158dc67b18ff7 new file mode 100644 index 0000000000000000000000000000000000000000..3639701a99860a09f7b347783092349d8a31bfaf GIT binary patch literal 60 zcmXqLU}92xXV9S2z{2$L6Fb|p#ee_*w_#w=X%J-k_8iP-U_jyv?ETBYAiw|y0ItFl A$p8QV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/78b471c4921e10467c8f6dcc9c471267a40108d9 b/fuzz/corpora/asn1/78b471c4921e10467c8f6dcc9c471267a40108d9 new file mode 100644 index 0000000000000000000000000000000000000000..68c2d392483844423ae130ae81572a3040f1a844 GIT binary patch literal 12945 zcmeI3F;2rU6o#Me;8GA$r7oRNS=;5QKnEoD4m}9RaFLn|^a3oLgBx&}4va>24HQb# zpdtdFJj2D#* z-KDtntmm|w-ozMn`z=j+=09uVdJ^O6Z@+>jibWr?C_0LcYBzvjQCJifwX5Cu1%82F z;1_!bAD~)Gqa-3Nk(NkHq$Sca&5~yL5LSeBYZ4Va01v5;;%g)x&#Kgd0!@!`^z=q&6!uakGc?K9Ctlog30mR3qpH%fw y`{DMX^WBNI8C@qjpDHfH<8!!uNFl}t3sGY9p~e8hJXCRbNKwT(Sl9!j3mzSR? M4+8c~OiT<60FLVmK>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/793b4e0a688ab815fb78b5e3636c5d0f04d5adc9 b/fuzz/corpora/asn1/793b4e0a688ab815fb78b5e3636c5d0f04d5adc9 new file mode 100644 index 0000000000000000000000000000000000000000..a2c4f5c559843c8872d038b21cdb7f15981021d0 GIT binary patch literal 1034 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gsIX0|Njjd420pT7#SE08rWD`4VoAj7?>Fu zKwJaTtzcqMU|{$U0VN`2q!OM#~q5(5z?Bz{aS~r2e0Qfk9*8<+EDS@0KzwULgR@kPHBS CA+U)6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/793b7829471cd5c5746538c45a66c5b397025a12 b/fuzz/corpora/asn1/793b7829471cd5c5746538c45a66c5b397025a12 new file mode 100644 index 0000000000000000000000000000000000000000..4c223ef5a6f61afbddbda3500ac1ab14649ab255 GIT binary patch literal 85 zcmXqLkY{3?!{V@^fsIwWk%d8yfuX^H0SZ6@>|pkPC;)R985mFn7#J89AoMdZ006E= B7aafq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/79422438fdd3111c7f4d1094929008f59cf6189d b/fuzz/corpora/asn1/79422438fdd3111c7f4d1094929008f59cf6189d new file mode 100644 index 0000000000000000000000000000000000000000..480c0b74198b2bc96818412e102a0dda3176c5b1 GIT binary patch literal 282 zcmXqLU}92ZFlf+eU|@>;%g)xo$i%>)$H1V|zy{&xF)=VOBJmj+P~}Ng4>ylY`{4T7 QnAn&i(cDNCGZ`QN0Emn+X#fBK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/796385a1f29e01d74508c86024a45936126ace90 b/fuzz/corpora/asn1/796385a1f29e01d74508c86024a45936126ace90 new file mode 100644 index 0000000000000000000000000000000000000000..d6806d5fdbd7a2ca0cbd020f20693673838e69cc GIT binary patch literal 8678 zcmeHNu};G<5Ix&fC?KRDmW&k>6bWvD0SSo-b?Aq5Wi;Srq@8Vom+?0r*RIZOU|Styg@C*IH{*FfKVELm2c3R2h(xQtF%l?w z0qDZzDib5Des=ZEBg^?RHkFgI97pXih(xO$^_j_!zFH+XcU)JMJg7U;ecW|-_-eJ8 zS7TC+Z;S-z$GWo)>c>>AcHNJ?tCa-!vThvs+!2pE47R`PxVJGrGR*-9Da&zBR|0A^ zw`2hs*TL(@wt3DA(TAFn8Sus!Zh}-{JjPTzHqTd+a{gB@=d0E6+|j$2TgRZB;~OI( z^#G&y0BzN3(0vTAoFR?t)^;4TB1xI`6*IFwWIkr L2c}~bZqt1Ot1RTd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/79a052eff0e47613128bb4a2c947f6cad4bef9b8 b/fuzz/corpora/asn1/79a052eff0e47613128bb4a2c947f6cad4bef9b8 new file mode 100644 index 0000000000000000000000000000000000000000..90ecd865516cc4df228a6c0a607baffb48dd9009 GIT binary patch literal 90 mcmXqrFc4s4*J|@PXUoLM#;V=O!l2CT!obXc0yt54!~pmsx4HqVp#gZ2oX@!iVLgZ5f{TU hx`$}i8y+c&4!)p+6|~A1!?V7CRf*8*O#rQe0|2>idT;;$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/79d46affb01bf3b12cf779967f22a2eff1d58bee b/fuzz/corpora/asn1/79d46affb01bf3b12cf779967f22a2eff1d58bee new file mode 100644 index 0000000000000000000000000000000000000000..9b0eb4e625a7880154e1926331f2497e58f6ed5c GIT binary patch literal 17268 zcmeI4!AiqG5Qb+raf^sh@KO*2@gTI9sRt3kdtb?uTfw|Z`wAWfAHbVeFFu3^kw^l9 zkVB!AWOw?JO9Fvqv;Y6kKa<(j7>=gZqWU^^hhyhoBx-wkuc|TlSs|jLapG<#PTTt{ z9f#4hTD;wP7Y=62QZ9-!DMUn8aw#&uuIpN(p8UOa?nE?(@<|^>q;S$aY7#@NP0Yf^ zS}=ZO!i`phuswZZ2Vg@>ePN7qS=@j&Xe$Ws4<=g&%r|Nhr8yPIKXraCN zzeW!q3Y&mU*bAGWHz_v$S*IT@jKuKl`fhh>JgqZ)ryr{a!^05im`~OsowY!xNCfsG z5lC|f5cGq7(2sIG<$CkmI?0%*iELXF!6x)#6TaW?pXaYXAL;H5w=N=->x~|2kQ;Cl dRov#BitSR_=>5Z~#((E#G)HNyo1iSB&i4QS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/79da419a2d8cb46b23ee0e5bd2f5d2af2c87a39e b/fuzz/corpora/asn1/79da419a2d8cb46b23ee0e5bd2f5d2af2c87a39e new file mode 100644 index 00000000..27053810 --- /dev/null +++ b/fuzz/corpora/asn1/79da419a2d8cb46b23ee0e5bd2f5d2af2c87a39e @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/fuzz/corpora/asn1/7a1092a53e4c7ce58c6baf69dfd0280c1f6690cc b/fuzz/corpora/asn1/7a1092a53e4c7ce58c6baf69dfd0280c1f6690cc new file mode 100644 index 0000000000000000000000000000000000000000..0c11364e7c8ad2af986724f23c2fe7d52e9fc661 GIT binary patch literal 46 lcmXqLFc4s4*J|@PXUoLM#;V=O!obNa#>~us0oalm7yy(f1W*6~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7a242a3075bdc2a0cf26ca6d082387000e8bc8df b/fuzz/corpora/asn1/7a242a3075bdc2a0cf26ca6d082387000e8bc8df new file mode 100644 index 0000000000000000000000000000000000000000..b9f8f9f440f00dd18928a12d3c8e04b9d081e625 GIT binary patch literal 1672 zcmc(gOA5m<3`CuckI*xeuDr}Ly;4u$qnBbO;lUurkkFNoG&35Bd|Ge4F0WF4VIAQ! zLKGR=Y%e4D(t)Jd1~2SAM~_8jq4|J{97LZIl6jG1Wl>6JMZ?)NBy&bF14&4BB}zx; z(}|RHPM9VbbRQz8lOCCYBqTes|61Jdg|3ZlrwQCa(lf|^4@qatE?q^6$zqt;d*_dX Rk5#V+M15OXY^A(=UA~S4)jj|K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7a25ee73e091a4ed95aeb1783ff552e216b87863 b/fuzz/corpora/asn1/7a25ee73e091a4ed95aeb1783ff552e216b87863 new file mode 100644 index 0000000000000000000000000000000000000000..81bfa75098b5910e6921a34c978be10da3b65235 GIT binary patch literal 116 hcmXqLFlaDrFlb<7WRPL8VgLac=l_2s4s~Q8004zB5|RJ_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7a2d84979d5923f61d8f447e19490ddba9aa9ed5 b/fuzz/corpora/asn1/7a2d84979d5923f61d8f447e19490ddba9aa9ed5 new file mode 100644 index 00000000..8153041e --- /dev/null +++ b/fuzz/corpora/asn1/7a2d84979d5923f61d8f447e19490ddba9aa9ed5 @@ -0,0 +1 @@ + 11111111111 \ No newline at end of file diff --git a/fuzz/corpora/asn1/7a30569d9dc533fb90cbd69e1a995995bc1da3be b/fuzz/corpora/asn1/7a30569d9dc533fb90cbd69e1a995995bc1da3be new file mode 100644 index 0000000000000000000000000000000000000000..43b592e5f73bf36cb1a5c67d2c492b1ca3696820 GIT binary patch literal 85 zcmXqLU}BuZ;;^8Bja9pmjX{oqfx(uM3Z6r3b$L_|orwpOwWGFXXVD_iVAJVq4U-kW#>Z{T&r!VgJyNg;}03MWMp zNZ!1eNoe)3XsYHi76T*X36_3HNz!UrDuAHP#WEN4>otw;7fp3uNuhh?Hp4{Cp#ab_ zoWT*`0>J$dfEKlzH|>U2XM64dC=qV|O6wZrv?GhCO-FlhU8bQO#rhxMlu3GdX=rJA q^+CL3cnX9G0N;qk@9;S2HzvTCy4eALGNP95= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7abe417b5455328272d91955d385587f3f9376f3 b/fuzz/corpora/asn1/7abe417b5455328272d91955d385587f3f9376f3 new file mode 100644 index 0000000000000000000000000000000000000000..f7d92620e1c05136e8613d4a68990c8c68abf561 GIT binary patch literal 1686 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Ky7A(wctlEt%42sNh49vU?3=B&d7#J8#jsE}tZ_r>M3{hpv#K^$FV9>zE(rVDe zz`(!^;TmAK!VsSoAk)FX2TBXG{Q^0JG%L`2VZ+2Y=zL*Ht$-TPxES>XC|^L6>Hz19 V(YP3m3)I4#(vp^{DGIIB2LRTK0;vE1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7aed078e4ecc4819ecfed2309b711c5ee26fbb24 b/fuzz/corpora/asn1/7aed078e4ecc4819ecfed2309b711c5ee26fbb24 new file mode 100644 index 0000000000000000000000000000000000000000..999d2222f1ba6d06f415a476ef3d65bde1c67656 GIT binary patch literal 694 zcmXqLU}92ZFlf+eU}HMi#Lm{>#Kgd0!@z)xpSkxhNS=T?n0^?|j#D22gK%p^btudt z7)`7`b~cb_85kIFX@D6Br*SF73_1pS1|@26U^<4{@rG_6fndaR5Lg3JLL<%qC;$Lv C?2B^% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7afd6f57987bd4d242c8abc5f5a9c453123ca84f b/fuzz/corpora/asn1/7afd6f57987bd4d242c8abc5f5a9c453123ca84f new file mode 100644 index 0000000000000000000000000000000000000000..e1a07eb5ec4616eadd8e7fa2ce3724ad0cbbaaeb GIT binary patch literal 19 acmXqLFlb=nWH@7NY;4T%|33o*0|Njwh6Mru literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7b2636347ba98e03a0348add812b883cee2a5980 b/fuzz/corpora/asn1/7b2636347ba98e03a0348add812b883cee2a5980 new file mode 100644 index 0000000000000000000000000000000000000000..53d6823ee40896043d1df523049174b83c3aeffe GIT binary patch literal 35 hcmXqLSkfRMVJK!G!p0oRBF@9h%g$`dAjp6K4FF?M1NQ&` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7b395d6af6f70c3833a28be33f54e3c158250b44 b/fuzz/corpora/asn1/7b395d6af6f70c3833a28be33f54e3c158250b44 new file mode 100644 index 0000000000000000000000000000000000000000..6b32df545b575bc9aa1591c342a26f5cb4c3b483 GIT binary patch literal 11403 zcmeI2u?@mN3`KoT6o?QK5(Sw78kbavk`dT|HBLyRWD<5@1J%3;>2DWp#Oa6DbgPB2 z>5O0_Hb#-QY^2|oestQu?X-}HO(KyxBsN-l`mxc{8No(uj9??}oi>=(s)CFZHnaw< z_3F!L#9G7t$fmXa6=c663Q$M8g-dfZNJBvefQ@6Z=h2~h;s@9UMxl;Z0sD)vvCr0F zgOQC9UPZt3-VcY=3li-}X9Q!jF^bgKU?Y0^VIw-D_iSX@JXjeF_InYvjCux(=+j!8 cK89LbrdT_VyZ#J=hQZ#(3hwgxEESUC2I@aXL;wH) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7b5c9bfaddadd872013077644b12deb65d83a830 b/fuzz/corpora/asn1/7b5c9bfaddadd872013077644b12deb65d83a830 new file mode 100644 index 0000000000000000000000000000000000000000..22a49fa27313f7a2f45f4def9f3f460c8b17a27c GIT binary patch literal 621 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gt5W@|Njjd420pT7#SE08rWD`4VoAj7?>Fu tKwJatR+tfIg&_r2;PQn6%oo@JDZUt3D;U9Xfdh~b7r1;uR&;}+9RQ$=S6To7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7b64b6e3e3ebc4e7d5ac0bc84afecd3cba4285c8 b/fuzz/corpora/asn1/7b64b6e3e3ebc4e7d5ac0bc84afecd3cba4285c8 new file mode 100644 index 0000000000000000000000000000000000000000..1fa07c5e6d73fb44dd6cf1a47246918919e165d6 GIT binary patch literal 26 hcmXqLU}H2`&>+rhU}0cnU}RumU=YPt!N9=4002!E1n>X= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7b83df2766eda2b22024f3e32f72e9bd8e9bc76b b/fuzz/corpora/asn1/7b83df2766eda2b22024f3e32f72e9bd8e9bc76b new file mode 100644 index 0000000000000000000000000000000000000000..21920c70432b85db810234a727b537d392e9f261 GIT binary patch literal 11360 zcmeHNO-sW-5PiF;D@6(cFFgs~B)tp;FP7eW@OOwmV=b6};_vY0Md;t@F(pY|Diz(- zbtK`v9@;=*n2$GacCzB#MNzKG?Zk|8V_)H=`B*C=-q~3O2*gj#-PB0)doH;^GD~c7BrlLN! z&7q<=s&Q0HviT1c70~M=OhB)_AiK$Kvin%|0+O?P@%Qgo6-*4{AVx1D$L65j)C=kb q^zK$i&3dzyJdF06(b%wg3PC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7bd037147730420894753f5dd71554c001e050f8 b/fuzz/corpora/asn1/7bd037147730420894753f5dd71554c001e050f8 new file mode 100644 index 0000000000000000000000000000000000000000..cf9e47018147c0411f6344d9563eb63d9ca13162 GIT binary patch literal 88 zcmXqLkZ)jOoWtUHGchtSFc>h1Ga7(Y z88omlhssK`fCa&98Ae8JB(4Y&8@H4?g(fg+voOE_$jzY!4NPwg7#Nr#?gG1$QJVpa z)6v`{hST-x8t6XJM0i@{KN3J!holU~Cf~it0R=aXITYO=NKykAw#aTp3uh6W;f!$l mXduCo3!eC;P9TlO4vyl1tR#$?HGcYnRFc>h1H!>Q4 zlo>RzF^9^^uy7ePENEnEU|;~tg8@i$XqE`m8v_OgX0R@Z`o>X1hI^Qd#_({DVahWx H*a&d|rG&>} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7c7fa79a6e819ef13794c30dc6bc696ff0162134 b/fuzz/corpora/asn1/7c7fa79a6e819ef13794c30dc6bc696ff0162134 new file mode 100644 index 0000000000000000000000000000000000000000..1aa3f5f40ebec781c6de6f6ccef1847e5bdd6088 GIT binary patch literal 145 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO@xLLMGB9W`U@~N2Vl-f2Flb<7)M8*@VKFc; Z0CSnZ(x{RQAaxK40{YOU86d!b2>>$H6v6-i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7c8a5d16af17672545cf506dde2fa4397f0f2576 b/fuzz/corpora/asn1/7c8a5d16af17672545cf506dde2fa4397f0f2576 new file mode 100644 index 0000000000000000000000000000000000000000..a6371d4e56d3cb6f0414b1f9e703cc43360e2357 GIT binary patch literal 406 zcmd6hF$w}v3`8f%8Wj;1Y_<|@cbierLa^UsMPdI%I+iQ{gO*kn5(qPpnHPpH z+SI4#Qs%Yj9lpSMF0Q* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7ccc0b863c59d29e9ca84382651efe706d6e10b0 b/fuzz/corpora/asn1/7ccc0b863c59d29e9ca84382651efe706d6e10b0 new file mode 100644 index 0000000000000000000000000000000000000000..6152e256ef764d9575a1c6b208a4afa49ed9e76e GIT binary patch literal 48 mcmXqLSkhq7VAx>Lz{YG~V8Fx3$-uzC0Oqq9fB{qp0-6E&hzGj> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7cd95c6f2e93389489f541b620986c90680d3876 b/fuzz/corpora/asn1/7cd95c6f2e93389489f541b620986c90680d3876 new file mode 100644 index 0000000000000000000000000000000000000000..b2aee00ae2d6d2db8a2d411c53cff65269414039 GIT binary patch literal 46 ZcmXqLU}I!3Y~W*LFlgXnV8RI@003G(0!#n^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7cdeea602567a5169d281bd4bef47a1bf3fdff63 b/fuzz/corpora/asn1/7cdeea602567a5169d281bd4bef47a1bf3fdff63 new file mode 100644 index 0000000000000000000000000000000000000000..96af25e85424e38a537e2f8556f666c06aa510e9 GIT binary patch literal 4283 zcmeHKJxjzu5Z#a5%Ely~9Cr#KAQp<(_*RH=SO{WaX^J%0`A@b=oOK!fZGyUgTrz@MwVaLS zlpfEidjledev fi;L;mAL;jB=cqI*YW-f@*sA)3)OJv0S-{@`1YY?C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7cee2f0f8ce8428568161f47cdafd509ecf36ab8 b/fuzz/corpora/asn1/7cee2f0f8ce8428568161f47cdafd509ecf36ab8 new file mode 100644 index 00000000..b46cbdfe --- /dev/null +++ b/fuzz/corpora/asn1/7cee2f0f8ce8428568161f47cdafd509ecf36ab8 @@ -0,0 +1 @@ +010U* /UU=Á/LU= \ No newline at end of file diff --git a/fuzz/corpora/asn1/7d06dc8cbbeb99b5329023f0358794d62565ea8b b/fuzz/corpora/asn1/7d06dc8cbbeb99b5329023f0358794d62565ea8b new file mode 100644 index 0000000000000000000000000000000000000000..d1a268ca4d516bd0957e5fcd4cb03cb4a1eba758 GIT binary patch literal 26 acmXqLU}CgpVqjumVr&3YU}%;0_&VaGG_|%3Sp1U?LasxS zAs=7wxZj1f8f9XhUDEL|6v+{q%_k)@Yb6&1Fj&VTi3JyXo~r&lOV4X5)WB>AL@Px3 z)%rzTVa3ck?;dB?Dmd^S00{uLP~m_p2Vv!)w_S)p&;$f*O8JKF(t+-&kZ$Py?l%t& zASiu1%fszvBzKTzb*B4>Mjl+`w<}#=w_0BeeBCxE{1skL?PY>ii0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7d46da73914f5d2cc6c25de1b0f6ba6f02e4dfcc b/fuzz/corpora/asn1/7d46da73914f5d2cc6c25de1b0f6ba6f02e4dfcc new file mode 100644 index 0000000000000000000000000000000000000000..68fa52c45f41bad0b8b65e1ce4ab4c40e3419e9a GIT binary patch literal 144 zcmXqLkZ)jO{K!(FxIn@X%4S#~A;Tofz;Dc}#K6G7$jiXczyQLE3?NX&puoVO#mJzg z+{&E7xPZZyk>&q?kc4(4ixxpeNwM%UFfcLxW@3zEViMg8XD~1@002ON B3Sa;L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7d80bfad32e95c377146c2e8e5f784680d64ba35 b/fuzz/corpora/asn1/7d80bfad32e95c377146c2e8e5f784680d64ba35 new file mode 100644 index 0000000000000000000000000000000000000000..452fc734d367ad15b0f7cf5a09189ca02517cb05 GIT binary patch literal 238 zcmXqLU}9ooGH77q)N1o+`_9YA&a|Mxpn-|8!H~hAfsM(~fPrCQg8>+_F={g~GB7Y0 zFo-i6fK(YYurY_q%CK-5G%RRjYGhylOM?MOuVR)6(;EW@24=7(s1YRS52dnxCUF4b C8!6QQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7d9f46990adecfe14b948c3415ed1d2eedd5fbfb b/fuzz/corpora/asn1/7d9f46990adecfe14b948c3415ed1d2eedd5fbfb new file mode 100644 index 0000000000000000000000000000000000000000..3f422a5a2a795819f7819d4bdebc0c9ca0c26955 GIT binary patch literal 17 YcmXqL5ac#!U}G}S;9|VUz`(!&037iGxc~qF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7db6d3aa3080a075a918ca73b140c5ccedfb5885 b/fuzz/corpora/asn1/7db6d3aa3080a075a918ca73b140c5ccedfb5885 new file mode 100644 index 0000000000000000000000000000000000000000..c9481b18e6f213882d9daa56b32c3428cf0d9430 GIT binary patch literal 3249 zcmXqLVB^+mV}Jl|ru_^J24Kjz{aG_%)ns4V9+4JXeGgD0AU*lv$1Qnd7QIl zVnj$Vn=!DcGZ;V&GH5U`U@%}{1oI7`f+)ZT#LIvR88oo5v>G%qFfcGPGBAL2kJ>*P z{-fz{H2;m3KRC+Y2bJLR*AQMX6I1?bwK6j?F@p=;(eih+{ux~Luli{HKid8oZU2q7 Le?c7p-2DLnDpX)O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7db72f7b5b0fb62c38c8040885283b278269bc6d b/fuzz/corpora/asn1/7db72f7b5b0fb62c38c8040885283b278269bc6d new file mode 100644 index 0000000000000000000000000000000000000000..08f97ae9f44727bb9d300a5c9723c969eb9d77f5 GIT binary patch literal 54 xcmXqLU}7>5G-zOB)#hVn;$>hkU@&M9XEcytG=Q+-QmhON49v_72IdS53;?=<1;qdW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7dbc9283ab3e8aef068b1630f56c28949d1b0b94 b/fuzz/corpora/asn1/7dbc9283ab3e8aef068b1630f56c28949d1b0b94 new file mode 100644 index 0000000000000000000000000000000000000000..5addf1cf8c9471a281b4c8c51487b4d6df802d44 GIT binary patch literal 10 McmXruU}Atk00LS7K>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7de00560d1e606347a023428df17739d11129008 b/fuzz/corpora/asn1/7de00560d1e606347a023428df17739d11129008 new file mode 100644 index 0000000000000000000000000000000000000000..c1b66f7bd5ccf8bef1d7b69376f62a7ddf237f0c GIT binary patch literal 18 ZcmXpIFlb=n`d|P5|NnXh1||ju1^_>A1^EB~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7dee8b794a0662cf366f19b0e3b12e1fe06cd362 b/fuzz/corpora/asn1/7dee8b794a0662cf366f19b0e3b12e1fe06cd362 new file mode 100644 index 0000000000000000000000000000000000000000..1cbb875576f09b002e1b439458ab785ec55b7320 GIT binary patch literal 28 gcmXqLU}92ZFlf+eU}K8>%g)xYckkZ4TNuCq0B-#U$^ZZW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7e1149246dad142957ad926d46b5a32ef45daef2 b/fuzz/corpora/asn1/7e1149246dad142957ad926d46b5a32ef45daef2 new file mode 100644 index 0000000000000000000000000000000000000000..e3c42941ca953a663e6e904ceb94980bb4924215 GIT binary patch literal 3483 zcmeHKJ8Hu~5Pd5}BMeCyT;v0RfK8%eoFYwffLtI)$UUAR*jI3&VtoUV3#7|QQl?jm zErM1Su^=BKTx_vy@pc*5earA><|$=#wRl+6McwVy?xXFgBCs4yB}zXQu~GO3O7h6LWbF4~2)ja}U#L1KC!r5OZ-j`FtfS_cFK7 zr7KC&RhFx{E0-jjmjI03XYD3$p=EY_vrlH*taoH4KpiHtG+1T;>XWw+vpIlS6v_Yc z4Ob-LG7DP1u^4yFZO1kdbT(r#juQ(d&Qib6pHaSpX7)jaC6kR$@Nf3&Yw1eO#lZ3w kolRi1cMs4b(0G{wTKsHA{`}(iKm3iIg`#X6Oiy&c7r=4%!~g&Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7e350dafec22b76bf008ab9ed72f6c8e4f69eb2f b/fuzz/corpora/asn1/7e350dafec22b76bf008ab9ed72f6c8e4f69eb2f new file mode 100644 index 0000000000000000000000000000000000000000..2227ec09a97097624034eb5306265de6335d332a GIT binary patch literal 111 zcmXqLU}Iu4SkPe5z{beU*2wUhfu#|O9x%*=F<&!0U|?WD7lEjR=>V&J05ahL!VDOP I0RsL502`1ShX4Qo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7e4062648f0c8f2d212b9ff8792210511d2f43a1 b/fuzz/corpora/asn1/7e4062648f0c8f2d212b9ff8792210511d2f43a1 new file mode 100644 index 0000000000000000000000000000000000000000..446629324edeb61c2bd64ef8f04373012c54e01a GIT binary patch literal 29 kcmXqLFlZ1IHfUgD6cyp>=H%t%<>BV!;$>i9U=U;g07;(%ZU6uP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7e6f2f60663d13bde2e696344b86374e678f0071 b/fuzz/corpora/asn1/7e6f2f60663d13bde2e696344b86374e678f0071 new file mode 100644 index 0000000000000000000000000000000000000000..553c33ce8533ca6fca2a540a267798b63570dc3e GIT binary patch literal 10 OcmXruU}E~u0KxzYRsuf& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7e7c6c44cdf06b35feff6d5014b738c899f24b90 b/fuzz/corpora/asn1/7e7c6c44cdf06b35feff6d5014b738c899f24b90 new file mode 100644 index 0000000000000000000000000000000000000000..a8f4828f8df80d841ad1ba53d5d00eea308cbc00 GIT binary patch literal 19 acmXqL5ac!BW@F^!VN?0p)WWcZfdK#`6a)hR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7e80193f0ace19651d165d26fb76d560ca421d8e b/fuzz/corpora/asn1/7e80193f0ace19651d165d26fb76d560ca421d8e new file mode 100644 index 0000000000000000000000000000000000000000..e55563527f512e7ccd7dd0c6d2dc3d822b4bf298 GIT binary patch literal 907 vcmXqPFkoe4G%#cUQT`AL%40y`K?MhvLUrK4x@FY%(IB8!5HJWbFfafB@rh53 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7f20704a285c239dd2c826c4583ac267a58ed283 b/fuzz/corpora/asn1/7f20704a285c239dd2c826c4583ac267a58ed283 new file mode 100644 index 0000000000000000000000000000000000000000..e44f4d35c90e59da6938344252a367cc1b114cfe GIT binary patch literal 636 zcmXqLSkhq7AgF54z{X@?z$0LQ1{fG1G9rwB85l;D8H|7c(T64h>O?(O(;xr<@VINk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7f40127e5ef1270a27dbb5fb0dd88f560c584db8 b/fuzz/corpora/asn1/7f40127e5ef1270a27dbb5fb0dd88f560c584db8 new file mode 100644 index 0000000000000000000000000000000000000000..23825ac2456940f74f2aa92f7645fe3f0ac0d284 GIT binary patch literal 1141 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7f)#n=7+zv6El0}OyPyJm?ny)j^5UyF2xV}kca1SYGhHkZ`l|DY+zzCFfd@CE@WavN7OYRn`xMK5+wpxgw0GsVsOpK3=jYS&ej+` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7f525611fbc6c81c2cbc078f17a690959f565a21 b/fuzz/corpora/asn1/7f525611fbc6c81c2cbc078f17a690959f565a21 new file mode 100644 index 0000000000000000000000000000000000000000..a0a16d1446a5d7874fee4fb1268f2ba21f59823e GIT binary patch literal 170 zcmXqLFlaDfW@FScXfSLrU}a;}(qI5lJVp#4AkJv80HmUUjX6|SMxG_rz+gecLI^*V z#TYE5$)L@^$iTp008xFO$pEYs89;>C!9rkJ2onSh8rYabWu=+k7&0(0gN(tDgNg$H D+7uMK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7f5cef76687f67d8687f2d681240e999d43f594c b/fuzz/corpora/asn1/7f5cef76687f67d8687f2d681240e999d43f594c new file mode 100644 index 0000000000000000000000000000000000000000..66a737afdba7cbcc8f6169d0eb523455ccff88b3 GIT binary patch literal 8 PcmXqL5Mkt%VPpUR1`h!6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7f65ff7c6cb6a53c2168265172ecb8c2b518b5b1 b/fuzz/corpora/asn1/7f65ff7c6cb6a53c2168265172ecb8c2b518b5b1 new file mode 100644 index 0000000000000000000000000000000000000000..b43e42a25e4506ed1803057eaaea1ff636c94f7c GIT binary patch literal 9900 zcmeI2F;2rU6o#MeUoV4NI$JvZg6%dvh_UHFnxvxw>ynO0jy>+RTD8D^Gvtf3DG||D)MMWfx&$ zp^UXDr{#6dS-WrP%9wx5#nn9Lr{DbwT(lAWQ$#UQOjN%BLPQZ!MARX7lNaO#c|l%$ zx%fb;^|VR?X+c_$7NiAfDYKLcAH)i=?i5jx2gn2D0rCKOfIL7R^!RrYVue^CR)`g1 eg;*h0h;?uC(*KkP-gP%}Rd(6k(zVEM&*=ke<9et7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7f9ff791c90a7e256c8b40c2ab5b815b379d56c5 b/fuzz/corpora/asn1/7f9ff791c90a7e256c8b40c2ab5b815b379d56c5 new file mode 100644 index 0000000000000000000000000000000000000000..df8f3a0e03f33e11b4b044707115a6764566ed97 GIT binary patch literal 63 zcmXqLFlb=o)N1o+`_9YA%xKWS#Mr(1U@^bo1AKy4I1Az#@Ff1h&Whqn2#T6ov_?=l9h(o#m13|0cgEdg(Q(wTf?s(9@;&DHWbDyN;C(#2xaIB81w=(;<;`O>+ZuSDs9^{x9(Va>Lx yGE=CG7i;QjkW@aW1Mn+zSP>=)%vN{%!2&%dT4Q!k+Eu0XO0K+*B A=l}o! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7fd73282532a18d69fca823ba0477e046c9cd630 b/fuzz/corpora/asn1/7fd73282532a18d69fca823ba0477e046c9cd630 new file mode 100644 index 0000000000000000000000000000000000000000..32d7b7e9bd8ca94fce91425a79f3336c905f4bb5 GIT binary patch literal 52 xcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4r*{{Q!H3=9ek$bgZNfgzZI0RR+_2$cW; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/7fd7cd570fea0e12de2b0a5cdc836630435e9dc1 b/fuzz/corpora/asn1/7fd7cd570fea0e12de2b0a5cdc836630435e9dc1 new file mode 100644 index 0000000000000000000000000000000000000000..fb19b4c5ab67d22eff695ebf86079b7009d407a7 GIT binary patch literal 741 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOQOmHwK#+-%!GP6(fr+uffSHZagN0#{Fi41* dg^|I4osF4+fkB#KRB$vv25n+!0Hse50049UGmiiO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/800e33adda13cd7e0737f0e244f206f5e1cdcbc9 b/fuzz/corpora/asn1/800e33adda13cd7e0737f0e244f206f5e1cdcbc9 new file mode 100644 index 0000000000000000000000000000000000000000..c8ed9b189cdeda5680273d5a92538665c69a4a09 GIT binary patch literal 20 bcmXpIGT>xm*J|@PXTieA%*w#b^!pzGB-I3x literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/801d2b2b37124a7d85175c7aef30d8fe752be2eb b/fuzz/corpora/asn1/801d2b2b37124a7d85175c7aef30d8fe752be2eb new file mode 100644 index 0000000000000000000000000000000000000000..1f080a00ce76441b7ae1efea12aec9531d03f17d GIT binary patch literal 113 ocmXqLU}7{dXfS9nY%pkGW706tX<*~g;o;%oq9)+s;bedU0HOK_HUIzs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/80234277da2c9c5134f2739ad233bd19748be795 b/fuzz/corpora/asn1/80234277da2c9c5134f2739ad233bd19748be795 new file mode 100644 index 0000000000000000000000000000000000000000..e6c75a2796632352012a97ad1a8022b07809eaa2 GIT binary patch literal 4 LcmXqD;$i>*0NwyS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/805d93fc05807b74e7df6ddade09b6b396f10c23 b/fuzz/corpora/asn1/805d93fc05807b74e7df6ddade09b6b396f10c23 new file mode 100644 index 0000000000000000000000000000000000000000..230b63f81919f4654fc025c8419fc9f9e97a1402 GIT binary patch literal 87 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOQNXZaaRU>hvOxnIqW}~0|9VCS1{MYe29TgS OSP-3$q=Y|H`-%p431452IxV2}YO4I0>3S`C^Q7#Nrt85kHq29G>rK>!jQ Hx`yWg4LvZh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/810627386329d3a2154fa63adee07d49e3bbe0ba b/fuzz/corpora/asn1/810627386329d3a2154fa63adee07d49e3bbe0ba new file mode 100644 index 0000000000000000000000000000000000000000..e90060fd0e51a68da0ab8d243f494a20c554bf3f GIT binary patch literal 6 NcmWe&F<@d~0003%07n1- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81065325e50271e1911972365cac23e57f817648 b/fuzz/corpora/asn1/81065325e50271e1911972365cac23e57f817648 new file mode 100644 index 0000000000000000000000000000000000000000..7ae094b77ae6cea5e94e3c55026c242068cfe828 GIT binary patch literal 115 zcmXqLU}9p}%ftc)icpqw1q(|Hiy#9716&FL{xS-%r)Qs=gGRu28Yg;|tgZ=s3%%&W)$+;QDH zfAP-M{aI7GkFr>@Z0FFu zKwJaTtzZI~{vQHVHiI}mAcBD*158rG3WP6AXyprp6|@Z~7@&1P4G&+8MmLeUdo-X% zKtK(*GHNu@j(|i9ZXUn@t!urZoT5f^_aJN2!oX;v1@$$s_b=#>yXj!XXx1Y=>lxFs tI|&1$S#LnI9wJ|iR;+lNYIH55M&n{ME~qi8HkxROto7&`P$Ui90RUi@Z*l+t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/816e59d500890ba1d958b23e32acd24aadc482ee b/fuzz/corpora/asn1/816e59d500890ba1d958b23e32acd24aadc482ee new file mode 100644 index 0000000000000000000000000000000000000000..7f4befe98a215f27b2a4d7ae66d17213908f6afa GIT binary patch literal 65 ZcmXqPFlb<7tT1d~CLS1olo~KV006Ro1AhPj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/819b9dae3be148827005499f1c53954081bdf749 b/fuzz/corpora/asn1/819b9dae3be148827005499f1c53954081bdf749 new file mode 100644 index 0000000000000000000000000000000000000000..36708bddf8fc75fce511c015c0a14dc2194f3d11 GIT binary patch literal 5472 zcmeHLL2AP=5ZskgxupaQz2uaup}q`-=1|Bzhd!jwPy_Kx+IRE^{Z0=pb&)C*7Z>9Y zMIuIPFp|I;ygS|*8CqS}&8GR7^Hs^>jWp~f1OTl>C5b@L3w~HIe#f{`#ci{BUkg^3 zW^gZA$`z@KKsKNO065aMET*jbv2XT9mf69^YwW zkoNR#aG(}GQRg5^X;Wn)gnCcoEe0B)=hTrlCq|-TeSF!hbzF5a50YK&SoMzeU34Rx zwSP~0ldnbA3&H!teKu>O|AP#qDwJ6pusNY1rXfmcYmr;Xp)I86%`Kl@cqKk4uRkt= B&~^X- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81b94731928277e4a4a2d9e4310d3afc2cba6bcb b/fuzz/corpora/asn1/81b94731928277e4a4a2d9e4310d3afc2cba6bcb new file mode 100644 index 0000000000000000000000000000000000000000..0816c84ff38eabd3d95ec04e14aa9f7e1b1bbe4b GIT binary patch literal 2464 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3l-NY0Z>68tX(wLSdjCm@S#s`0560t6q7Bm% z0{TUjxzB8xw6kf^>lW@05i(yvPW%3FLF={Iw)al&Ssi1xBYbD&l=ZuRS-ood8ScYv z%ife87#ZHT>q?~mvqE-(#)d7PVui{td^E&_x1Z-U>N&COp^aEocSudI#)HM{Wp(US?pHd+p_tQL-~R8zb+=9+O`&pkE4~}D{YOa~%=!!lIwB&hi$mW( z`LIkPvz2|Rwx!jJOUX;Zm_#%tzu&UMvAVM8r})zC76v0cu^Emgw$a2!uaa#vu?<9G p^Bk>42U9hwL2Nb3i&2k$UeLIXI(6v}k}6YOV?!eYLlXm2V*qfp;=TX? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81bf4000ba8b5eedda84593501a89f65edd85509 b/fuzz/corpora/asn1/81bf4000ba8b5eedda84593501a89f65edd85509 new file mode 100644 index 0000000000000000000000000000000000000000..3762cf7de7ec240f07722567797f8d0b770ad8aa GIT binary patch literal 4 LcmZ3?aEuw+AfJK?OjZXAXT`xz?YY;wW$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMz%9PqvUD^EojaS5Z85j)=4Gawp42%s7qYT^)T-lgIS=1OA zeOasxEEk&JFf|l0U|?uq02vd?qWRa{+zi5LU}9!6FtcDVKyb~?&5^i&5nQnD1~#Tp p4($d5FppUaOffJpFoF@tjU6CvD2pmX0~<5cBaGT0c?JVU0{|t%FrEMa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81c60b24bbce9f145d6609c4f8361d928d24f2c6 b/fuzz/corpora/asn1/81c60b24bbce9f145d6609c4f8361d928d24f2c6 new file mode 100644 index 0000000000000000000000000000000000000000..1d5e5ec0d71e1b16dae2884b70645c67adcce1dd GIT binary patch literal 18 ZcmXqL5aco7Vq=ms;9+?%e?J2Q0{|c81FQf5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81ce38704873015fd29650f21e90fe1d2192608e b/fuzz/corpora/asn1/81ce38704873015fd29650f21e90fe1d2192608e new file mode 100644 index 0000000000000000000000000000000000000000..c54fe987698f05ac7d057b684542ce76b8723c54 GIT binary patch literal 703 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXI1|(n*%pwDp{tH+13(org{~wFY7FMoS z9+u6kzd9O)1-NY3etrLqUFzJH&dQ@75LpLzB8pF6JG=P%y5y5FCHfq})6 zWji0w-s~;=>y3mb?DS$jcscBlppuDE!!^MeS;f8P$sJq2EC2RUy8rB~bLoO8cJ~yQ ztBo^T8R|@!WLc1`hXP-igSD6#8JVpZSh7B)+<9zf_w{q{=9Pai28n^Y c6=&cIlM}e0aDlo6Z{QM}l>W6WV`N|e0I;npNdN!< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81d2698a2d14488deccbc8656640b50590b7aa35 b/fuzz/corpora/asn1/81d2698a2d14488deccbc8656640b50590b7aa35 new file mode 100644 index 0000000000000000000000000000000000000000..5415036bc87254ee00f9f0497ef32764e5951e5a GIT binary patch literal 4 LcmZ3?B+LK+0=xjZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81d27e702ae9a300328b1aeaf9e3bdf689068e08 b/fuzz/corpora/asn1/81d27e702ae9a300328b1aeaf9e3bdf689068e08 new file mode 100644 index 0000000000000000000000000000000000000000..70048a47bae24dae54d3697912f48224452be11b GIT binary patch literal 284 zcmbV{yAc903`BQrpKl1rm?1bEU51mT3mR}gimnbQhhE4DVQlk@2#_L;wEI@FxY{qr z<+kSNP9}4-17y)jz}eI~GJ^nwEmf~%(U&xZ>^KagSkjK%1m01#zNDGVftNm}GKD6u kMggy?lp=Fi0lx2>^H11^{dDw=oxjF^a=bIt*Lnaw0JKCZ_y7O^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/81d642fd821aa715ac5505c7ec7b79ad794cac47 b/fuzz/corpora/asn1/81d642fd821aa715ac5505c7ec7b79ad794cac47 new file mode 100644 index 0000000000000000000000000000000000000000..c81aa189722c70be3a0f4534329d1a6dcbe563e9 GIT binary patch literal 13 VcmZSM{{R2~|KIqzylZ*85kHCm;hlo4}Smv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8286324f9b77ef2dc2c151756cba71b416056f20 b/fuzz/corpora/asn1/8286324f9b77ef2dc2c151756cba71b416056f20 new file mode 100644 index 0000000000000000000000000000000000000000..1f7f0670921fd972d5cb8591afe77f1bed5b3893 GIT binary patch literal 336 zcmXqLSkhq7VAx>Lz{Z}?=E2zZ!-W$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMzN^SoB##C9|DObdK85j)=4Gawp42%s7qYT^)T-lg4WMvr{ zeOasxEEk&JFf|l0U|?vVw|xv?XEQPXH8(edbC?XwEEo(BTyt}CB<^1@7wm&jSz!zx zfJ_7h1+~p2(nN@}Ax>ap3gys-i!f_}L=_kq7#JbgpuwO6BoxY`%Fw{Z42@GpZLqun KgE*tXf(8JRrfEe0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/82b05954c07d220e3f73a3fb869e1bc07bd3be25 b/fuzz/corpora/asn1/82b05954c07d220e3f73a3fb869e1bc07bd3be25 new file mode 100644 index 0000000000000000000000000000000000000000..eaf3fd3e0207de2d1aea2a1acafc4ffe534f4bd7 GIT binary patch literal 1979 zcmeH|u}Z{15Qb+rxz(ITPmWXJ2q=g`s&DP&3PCI^M9w13b^0WW#WlW!K8b>9_^<=|6|hC3Sk(oK869 zL`U*e1D<@;p6=5%!R0UsgRTnMHbIsQ!i{u!cbpeF2S5&3@hUT%enuovQUc!b6`qD5p@VtX_%`wzsH2AQLciwAy#jrUmeY!#n;%g)x&#Kgd0!@!`^z=q&6qVb^s0DiFx6951J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8304c98d8d0168d0ae2f17133e4006963954f16f b/fuzz/corpora/asn1/8304c98d8d0168d0ae2f17133e4006963954f16f new file mode 100644 index 0000000000000000000000000000000000000000..b7ac158a4fed31682179bbefc2a22afc1e56a09f GIT binary patch literal 146 zcmb7+u?>JQ3rfaLf%iT4M{gl0KV-Npb2^4`Lm^$;L6h2&_M(Fi z+7=-$1~Qc?n;!;9CNqm8n&@OBb8(B#h%sgxYK%;s;xw6AB#|YWn$rtS%K9Hj`{|tf zocDR3bMASb3lW3SKKRJs-)1&LHx_}2j*TD#5rYnZVa6j6Gvq*wU)HfKn3GUeuV*0o zIc9;;z_s!Qi>|c=bKp)o$h2hChkSj(fD0{a-;4J^0i85ia+`w> zyF8xWN_X&?2W(pd?n)E@>9Z`0y-QWQtE;Nq-jM3s=X1MMZ@98E=vl>Ag}mLtuulz! zdJ&+KF5)bkn}fDQMO%y4-4pWK8k4JiLAA$LALt5(d}=S|LN;BYw`79DDLaYcu$oZ@ z2g(EmheY;hLn5pUA;uL!sV;*Vf3bb;d9&4wB8WsJf*=XF2kroqfomcs2&jAP$5d~)&95b~P zx7Vl|FGz%dQ%J|l4|$H-uDxM3qXYsGP!VM!rPkx94*sPjMR0_yW<&%cq5?9=sW?sV z`X&uCYYh)za;~S>T)9pX6;G9GNBCgWLH_~G((^J~4M^Duhen4SJK%iPNt=a=^ z?zZ`Jv^|iC14Ti)T?O5}{I{}e&H_DM1Q1aXKuFgf(_a_=XkuoiJq4Wv#B^^JzbSJ5 z((z@h83`f*0*JWgbd8jkyK%Dnf{`sSqW}UpDO9{o2bHS~lopIz6ENaL2a%=KT}gSF z2S#4^sJjw4k#Y(OS&JKs&O`JPM2G1;xR;L(LbN}U_wNZ8dClK+<)<419Y{J1b4&4?SK7IftL{Jg zlsTRMP{o$t8`|STwRKxNPrJY0J96}X*V7jpAVU8Jwwz%Zh5^RP0yScYWOJ=W8+evs zl4eY&?W;)Y(wd@jo|?67^3!eCIBU~C!`I(z3bft5|Lkw?ZC~3J&So(?PW|%3nQyi)<{vnCeA?Nb{q5%K`%QJP z?$$L<2i7xTJriiQt!Kh|CaeVhdM0S!%=AO}f0+pr%hhEU9-q=8D369zE~EW&v^kb7 F{|}y|1HJ$N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83116120729fc51812f79ed07eaa8f9497295761 b/fuzz/corpora/asn1/83116120729fc51812f79ed07eaa8f9497295761 new file mode 100644 index 0000000000000000000000000000000000000000..dd5b96aa2ffbcd32bb93dd4774c7dd6083448c11 GIT binary patch literal 123 UcmXqPFkoe4G%#eKH^smJ0Ni*B9{>OV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83317e6cef0bc101c43407b2aceba582785825c0 b/fuzz/corpora/asn1/83317e6cef0bc101c43407b2aceba582785825c0 new file mode 100644 index 0000000000000000000000000000000000000000..9940778f69d6a947ff6a323dc88971f63421c9db GIT binary patch literal 387 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Ga7(Y z8GwXXz(Ngd%%QT%j3Dkw29Qn|7o;A+qnaebQVASv`a6bE8{}IE0EJzsK?Bnp0|o|W PkYoQN03!>CjTVXkaB4(0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/833e11b59a00b522d59c25a6873e650335ba82a3 b/fuzz/corpora/asn1/833e11b59a00b522d59c25a6873e650335ba82a3 new file mode 100644 index 0000000000000000000000000000000000000000..86d72020a468b4c513c233cd70f6684f1b472e37 GIT binary patch literal 1708 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU oE~1*(n3$OcnTv*TV1v9i8vXb)?J$o1(Y!{us2y4b8w?l#05Es)&j0`b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/837cd805c7181e049adc52556b9385527e05439d b/fuzz/corpora/asn1/837cd805c7181e049adc52556b9385527e05439d new file mode 100644 index 0000000000000000000000000000000000000000..4f1a4e79d677f4ba6457fbc9bb5b965da7976f68 GIT binary patch literal 4 LcmXqHVq^dS0MGz6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8392794898328f6aa4b8a4a4d9fee55edcf6ac58 b/fuzz/corpora/asn1/8392794898328f6aa4b8a4a4d9fee55edcf6ac58 new file mode 100644 index 0000000000000000000000000000000000000000..a9f51d95004587ae83ef9b1ff739e9003028dc8e GIT binary patch literal 148 zcmX|(!3n}Z6h!C$4PUY#cnEmVK#pQAlPXLD+eDi1=aLF6AQqKcJQ{WpncJH;L$~_A zjLYXJ2VI@6`h5~g(TN1^5(A@SfR+X(6p(Fnq}Zo|6pn_ Ue~6QoGT*srnxZxv5JI7J?z(muGynhq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83a4622d79a724ff399c015319427b73df9315d1 b/fuzz/corpora/asn1/83a4622d79a724ff399c015319427b73df9315d1 new file mode 100644 index 0000000000000000000000000000000000000000..9ef713910bff235e435ae2fdcbd9646a3cd21854 GIT binary patch literal 4367 zcmeHJOA>-G3{An|3OeJkam&JtdKK=|qj*3M;qWO<@lmk|158;lP1+b(WN@ OlNS@El_$~t!M8X5hP&nf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83b0ae5b9301462b0272671e5687787d915f9965 b/fuzz/corpora/asn1/83b0ae5b9301462b0272671e5687787d915f9965 new file mode 100644 index 0000000000000000000000000000000000000000..80d8e103f618a1376cc84b4e3bda134b5e2322fe GIT binary patch literal 4 LcmXqDl4Ae>0R{k3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83bf08efb67658230ec4f9b295922a147bf31e86 b/fuzz/corpora/asn1/83bf08efb67658230ec4f9b295922a147bf31e86 new file mode 100644 index 0000000000000000000000000000000000000000..f17b4441be9af3c1fc76976656480ba6ab2dc3b1 GIT binary patch literal 2809 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXIkU;kD{|rn&86*sXS!B?p{~_`JvB+#; z}|DT0{fk7A^IE)Mo1`TX1tp-gD3=GVS3?Qxnse#)@AaFsp_%bl~3$Tp_ m?r7i+rj$EcEQ}Tlqh;=Bg*Mt+pkHfYgqOL5n?Q2l_9XzRxXN_^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83cd075f4ecc07a520e1e2ea3d4e0ab5d63bf08a b/fuzz/corpora/asn1/83cd075f4ecc07a520e1e2ea3d4e0ab5d63bf08a new file mode 100644 index 0000000000000000000000000000000000000000..3943838a40cadecb1536003f43bb197b5b3813e6 GIT binary patch literal 4224 zcmd^?!BPS-42EN!Sw_7$<7JPWJvea@!3!5(#aHm&XW^ZE9-TC#?QW9=x+2W@aR9p8 zrv3jUEa=@8qDTMi(Kin1GvXY9;E|1Q91KS8ijgo^n}sD!Ih4`fXI}zsI~)=Cio-I> zjWGw}YCNkqGwdHAXffNx*!X5P!|=NO3}X-`(Zp-n#|cq3{1C%|Y@gp9l7r*;X@{f` zR*;=cMtuD$ujisGCE_th&AtA5l)Gtd9TBJ|AAUuuW91S-Y-$7nge|X(dyKFt;(o)H z?@mS#(~Q>O$V13l*%N&hs~Jx7%2E~+tW2*%DdmU{r3`bi>5#~W9dRz&^t+X0gNE*) zK&4g|oJgj7MTl3ikd^#tl$HC~>qBh$MQevcOL$oav{sNiH(_W&@{i@qHJT zu%0XSAzLn55q0|WrK^tKz6AZMG&ebD315+>>G0To&%fvP`l%cWkx!8oIpdPp)JbyY za>)5t2k-X*K6)Q10-L{coEZDpTG^MUIo`H!UAI`QI$XT2moKZ;a*gXyo%}@h13MJH AEC2ui literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83ced1c0806987c7a32836d7959aacc2acb2ecd8 b/fuzz/corpora/asn1/83ced1c0806987c7a32836d7959aacc2acb2ecd8 new file mode 100644 index 0000000000000000000000000000000000000000..367992585fd1af107d400130d0a4a6c65395410f GIT binary patch literal 36 jcmXqLU}H2`(4gC3(4f>{0OGJQ8W=PfG%zq4Kv4q#qfiH! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/83d1d782dcdb5d75877d83b558f2f7780edf87f5 b/fuzz/corpora/asn1/83d1d782dcdb5d75877d83b558f2f7780edf87f5 new file mode 100644 index 0000000000000000000000000000000000000000..fd3036e71ed1e17d27316947ca8cc7bf8758f6eb GIT binary patch literal 24 fcmXqLU}BuZ!or}!z`US=ja9pmg+Y;lfq?-4G-m^Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8438167990f6d205f9ce3aed944293ae3c62c854 b/fuzz/corpora/asn1/8438167990f6d205f9ce3aed944293ae3c62c854 new file mode 100644 index 0000000000000000000000000000000000000000..1bcfff5e9020c91eb7e5d0b9f0770846378bf62d GIT binary patch literal 79 zcmXqLFlb=o)N1o+`_9YA$i=|GY{h8Mz+|w5p<$r_0|SFW!xAPu^c=9f!ICB>1_lNJ G1_l7B{SWm3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/844f93a8bd0c56317b6d7315135743210435033d b/fuzz/corpora/asn1/844f93a8bd0c56317b6d7315135743210435033d new file mode 100644 index 0000000000000000000000000000000000000000..d40a5cc8ddad14583e67ac96f6a05cd3e4846dce GIT binary patch literal 152 vcmXqLSlnRHAi}`FAi`h(Wk;a!Kr##r#Hj+QgaC+X=zNe(*i1*LV}-H-sFWB1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8455a827e8183f1f8bf5a5ea1f71622c91793349 b/fuzz/corpora/asn1/8455a827e8183f1f8bf5a5ea1f71622c91793349 new file mode 100644 index 0000000000000000000000000000000000000000..183e3be89b73c356de6fefae9a6ee599b0df8957 GIT binary patch literal 76 scmXqLU}92ZFmPa#Lk9M8OlSaE779`hy=7ov`u~98?f?G_EDQ_`09xb>aR2}S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/84608569b99ad3722fae134af910027551ce6b4d b/fuzz/corpora/asn1/84608569b99ad3722fae134af910027551ce6b4d new file mode 100644 index 0000000000000000000000000000000000000000..359394e1033a62dff5af2d7bc7a272b1a39262de GIT binary patch literal 87 zcmXqLkZ)jOoWtV4fDF>L8Cf_Pv>3D-S#lVdQy7uu7#JF$+$sizP!26d2CY`+6vhP& NY^>UiEDS1ONdS{J2{`}& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/84714905a276e6c5efe1816f897d42de57c782be b/fuzz/corpora/asn1/84714905a276e6c5efe1816f897d42de57c782be new file mode 100644 index 0000000000000000000000000000000000000000..53962e496ee7ed98cd8a225762c7c326f216b2a6 GIT binary patch literal 46 jcmXqLFc4s4*J|@PXUoLM#+t6p$im4i#=y*g0YE|kkMjf0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8480895f1c89b8ac57b36fa2fb91109b9bc712e1 b/fuzz/corpora/asn1/8480895f1c89b8ac57b36fa2fb91109b9bc712e1 new file mode 100644 index 0000000000000000000000000000000000000000..9ce77c68a7d9491502871895c8db80aac593fcc8 GIT binary patch literal 28 ecmXqLU}H2`&>+EY00M>vMj*<>SdW2$fdK$kp9Kd1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8489c02f40fbad65c1d719fc12e8e7791abfa6b4 b/fuzz/corpora/asn1/8489c02f40fbad65c1d719fc12e8e7791abfa6b4 new file mode 100644 index 0000000000000000000000000000000000000000..74bbbe9c3e23b087a1ede2503be104f1d4504091 GIT binary patch literal 43 ocmXqLFc4s4*J|@PXUoLM#;V=O!XU;h%)rdV00sXc;12@>0K3r(?Sm#|eebVx?|094 zzH{&SAZ9cJ4T{+@6&poJrS2vAKA z@z%{PVS6g0z18pSjri?N>C=I*)@$Dy>JCQ&S|1idK0RTu=7P(uxQXhrSx^BNDg;HB zO!ny^5m!S<@MTcR(4+C=&!%799Wg-eNp@!)C#xLqru-5rJgE31a-j(U)(g^0@#(CX(pRf@7walg>I# z=LMM%aEsY^g<;{_=?-801u2D-2%;h@psvqX!5I%+u`i5#q|+kOYslI@p=ST_Pp5uM z)4GTY*U3ngCp1o5W;%XZ#kq+HL|UUwZlu@dFi_gOhfmg(en??RK%`nRtJ*{D-u8vF zv^-FV3nfv$RR!%{@!R=zXMnyI1dvb_LCjVjGtiLycye~NJQdvpq-?KB*c3Z=@z{#Z zf&`HO0YqGPyC%xZUq8`v-b8UCh~TDB=@uPSt~yv*GNHqW8(l<^*SeDNmEBf!ahrAkWzWnp`!Ok~lm!5v3`^%+?t|>ow zGmT>tY}6g0WKXx>o*v?sNVvCW)ff=5r$fNZX z2?EENDnX(_Da$4WCpg9{$L|>`UvrsAFvDEBd{L}Ix!M~Et}{J8!Lm$c#fz8J*pA0; zhKvKw4X0=4>lU|7mXAI145JGTooh(y z(z>E80yS&<)Mq=c^0wxGN3Olq9BRMw;F;gw-?<#*8wP~A&cf%4o~SAxd-wD2>*1Z! z+QeVy9@zcOPjkJe7I*vapUY!*o&5F3)8Fn~Dn9hmu^D$q{&$FztK(&?*7_nLyL|zEj0sMfokOu)eNG%82Nwx S`%nBM5uniwf`bqk;S2!0GH=WP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/84b22a5f990f4d56ea6ee7706f584598d5f9f0bb b/fuzz/corpora/asn1/84b22a5f990f4d56ea6ee7706f584598d5f9f0bb new file mode 100644 index 0000000000000000000000000000000000000000..cd4bbf2bd7bedf34e8b76a7e5cd0e4eebad960d3 GIT binary patch literal 21 ccmXqR_|#C)VBAp9P|(1@z`*$8MFRr^0AbY!`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8504298a09ef46ead7c59ff06ba3d8050ba1ab3b b/fuzz/corpora/asn1/8504298a09ef46ead7c59ff06ba3d8050ba1ab3b new file mode 100644 index 0000000000000000000000000000000000000000..cdb3fad51dea9bb865022abbf20da141e0cd9533 GIT binary patch literal 584 zcmXqLFlb<6GB7Y`U}I!pU@&MfYydNvAv`ulbQS{xAr-XHPuNz%Dn{J}ieFfaQXXDl H081YLX7w;V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/852012f24c7f232c1136cc986ac9943bf1002a07 b/fuzz/corpora/asn1/852012f24c7f232c1136cc986ac9943bf1002a07 new file mode 100644 index 0000000000000000000000000000000000000000..aded39304d8630896fceb62cea380007ac4cc15c GIT binary patch literal 34 gcmXqLSkSPbVKJliQikOW3mFzNEQP}53=q%&0M={@82|tP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/855a4b050dad61c8ff5bb62ef06eeac2421dcbd7 b/fuzz/corpora/asn1/855a4b050dad61c8ff5bb62ef06eeac2421dcbd7 new file mode 100644 index 0000000000000000000000000000000000000000..2a34c0d9ad511ca64623f6f69688b8e8b1b7f477 GIT binary patch literal 1002 zcmcJOL23d)5Ji7=Ya0oH5jU;^qM&g$HG)})?y~R*9;XdB3s2!f&*2T`GA<;mkt#J| zOpAz0)6fmS>Bs-S*t^$WI!SkLRE@}N;8~Y3%Y|H`-%pdRFlo@h#?org#K6G7%*epN05TY6tn%

IKrkD7pXu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8619a2baa1c5e42f7dd2f3839bb3248d8442ff85 b/fuzz/corpora/asn1/8619a2baa1c5e42f7dd2f3839bb3248d8442ff85 new file mode 100644 index 00000000..ef71bb30 --- /dev/null +++ b/fuzz/corpora/asn1/8619a2baa1c5e42f7dd2f3839bb3248d8442ff85 @@ -0,0 +1 @@ +00‚0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/861f0a6c736fff277bff41b8187deae03e08135a b/fuzz/corpora/asn1/861f0a6c736fff277bff41b8187deae03e08135a new file mode 100644 index 0000000000000000000000000000000000000000..03e33b10b20d7e4612038605f1a12ce793e9e108 GIT binary patch literal 28 ccmXqLU}BuZ!odImj0+mrSktu`Sr|cl05*~XAOHXW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/866a048d2eed311eba800b7756ee5c21f6f2f182 b/fuzz/corpora/asn1/866a048d2eed311eba800b7756ee5c21f6f2f182 new file mode 100644 index 0000000000000000000000000000000000000000..89ba104fd47432bb01b89753b0119e621461803d GIT binary patch literal 215 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOxxay7KSRU91_Ll;V`Nywz`$U@AkF|1U}A(Y q*x8svWkp#SV8Eb(jVaWif$5C_0|PT7NCQka1$tRXve_7FGXnsv9U`Rw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/86c64423abfda4d7a144a31cef1b1d736191441e b/fuzz/corpora/asn1/86c64423abfda4d7a144a31cef1b1d736191441e new file mode 100644 index 0000000000000000000000000000000000000000..8a5754037fb1c8a1a5b1613c1fa74ab56473704d GIT binary patch literal 113 zcmWg0H)vqv)N1o+`_9YA&a|Mxpn-|8!H~hAfsM()fPujfEMQ>JV8CR^z{F_40GBan kU;}YkSPTq63PJh|)U}#9dS-dsGBPr1vM``XGC%-30NCmhCIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/86cfc8478b936ee8ee6cdcf2710d102f24da4963 b/fuzz/corpora/asn1/86cfc8478b936ee8ee6cdcf2710d102f24da4963 new file mode 100644 index 0000000000000000000000000000000000000000..39106205a0f776844aaf0ba4ce32ffd51fd3aaa8 GIT binary patch literal 828 zcmeHFF$%&!5S+a|FNz2On^d-eq!}zM1p5>|#AmF6_bq?mcWgt>fE+?PQ@PvB4(txg z3@xmi*u~dIR;9QHjH#U?X~DG$5VT5;mGF(Z4Mh{X=gCP}CZM8v@TftgqLCmZ%^b(Ox|Y-2s~22Yw(idGi0otX|Av_jf?EX!ccBWIzA_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/86de83add1e63681cc0e90409b5fdee134625ebb b/fuzz/corpora/asn1/86de83add1e63681cc0e90409b5fdee134625ebb new file mode 100644 index 0000000000000000000000000000000000000000..77d5dd3ec0444caffbaeb743a5892a9c51ad2d70 GIT binary patch literal 508 zcmdsyv1$TA6h+_6tP^H+SHrT2APcDkt2FwY7p55;$%0E>h*+g-^W=~Clng|kgPo{ zz;5qLidGmz0nj2s7xGQ0Vsd-x)Kea9qt*>PXK}B97dU@3=c1!uyz#1?9Irw{mv=fP swdS*`5|gTgu{Cv7CXcB*kClkbexftSOVhF@=wC!kWPg-B{J*kX02|_2M*si- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/86e58616fcb7e72e177f4f08c94feb3eea520d1c b/fuzz/corpora/asn1/86e58616fcb7e72e177f4f08c94feb3eea520d1c new file mode 100644 index 0000000000000000000000000000000000000000..74f789c5f0be119dc84939dbb687eee2986846b9 GIT binary patch literal 370 zcmXqPFlb<7tT1dyU@!nf2|+_kLt{fjLqj7&LqlCdBO?PWLaYSU8GyBdOvR#|fRKSD iiJA#J2d7VvodUHNixBbt06PT|daxjX0Z@P%NB{s6n?QvC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/86e623da9cf65a100e6c591093f34890d1cc76a5 b/fuzz/corpora/asn1/86e623da9cf65a100e6c591093f34890d1cc76a5 new file mode 100644 index 0000000000000000000000000000000000000000..98e7f57c2407ccbcf9aec3306d799fdbc0445b81 GIT binary patch literal 16 XcmcC(SlD3Du%yAD!LXr$LBI+CIA#Uk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/86ebaef04872865f12313999570a4d8659650756 b/fuzz/corpora/asn1/86ebaef04872865f12313999570a4d8659650756 new file mode 100644 index 00000000..7e992f67 --- /dev/null +++ b/fuzz/corpora/asn1/86ebaef04872865f12313999570a4d8659650756 @@ -0,0 +1 @@ +ÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/86f7d58f32cc29574aac9e43d78bae8d5556c03b b/fuzz/corpora/asn1/86f7d58f32cc29574aac9e43d78bae8d5556c03b new file mode 100644 index 0000000000000000000000000000000000000000..6e540a48cba2862470ab9c1865e34408bafb20cf GIT binary patch literal 80 zcmXxap$&jQ5Jkbap9_Knfgl*L=xydKwd{6siY}-OLkMB?ct|@Q9=%SWj8N>B9nyRO Wn*ISeOPaTLcXeCK;L%bE7@r3eE)0NFw|%U1^_aiDvtmF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/871dddf75b9a25773af5f5b3586ff5d456fedb95 b/fuzz/corpora/asn1/871dddf75b9a25773af5f5b3586ff5d456fedb95 new file mode 100644 index 0000000000000000000000000000000000000000..0317caba8d6974a52b0434f9f4b20282b861a38b GIT binary patch literal 60 rcmXqLU}92ZFlf+eU}IwV%FfoX=Pv_;4Fdy+&-{U%tzj>AJ_rB+!72_4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8731774e9647784b2431094f56a1439ac193319b b/fuzz/corpora/asn1/8731774e9647784b2431094f56a1439ac193319b new file mode 100644 index 0000000000000000000000000000000000000000..e5b90b8ae1bb97c11b8e83b86a06b3790d226ed5 GIT binary patch literal 12048 zcmeHNu};G<5IrYRC`AYmOGd<06$y?31|%dV)B%a#=*k~NNbMJ~BL-GJg_SYr&Pkev zv~`QmCBd&!<7Vj7*?0HOK4Tj1P1Wi2YqY<6sDf8Wkv~Czh-n<0g#ZYcCh8_psKX2pp$tSgrLv2{6ZOq|tR;@FhFU|)`7|*iYyFr#SWvqLS&vFvl!DxxEF41S9cr^7@LKz)bxsp4L4#t6g%;M2% z)p42sdllRB9M(|j%8JosW3;N4GxeN$mRrauRy}UcXlf&&jEVE(D9~e!2wax2jY9qnd0M=^&XKMAvD>#>P9`jdHHGp;(A01_< zO!5qw(R7|8Rz3EK@+He$bpxZ^M%ungRgVOp<*a8pYt`c)t~#7$avcWk&a3X%aicoN z_dA5{bubFG+HSu?OdscLENg%X`VI?qN;Zl|-(j&8k6x{~Z6tJi&39M~Zp*l@0e;Wu zJ1n)krA0=@HTsWL6g5CqAKfdmAY%tREWHljU(M0x9jn{QD$B9~GtO?5^R0vY@UNUn NOfig$ml}3s{~IP|Y>xl{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/87352519dfd539d56966f95ca2d88e1ade9c1194 b/fuzz/corpora/asn1/87352519dfd539d56966f95ca2d88e1ade9c1194 new file mode 100644 index 0000000000000000000000000000000000000000..c3fea49a4ec86bfa219d70fec2793d488ae03118 GIT binary patch literal 513 zcmXqLU}92ZFlf+eU|@>;%g(lU@7~*6Y#11H8rZP%8=95~@iM~Y*+Bvfynny~#As%~ zrWvbE=q|x$Gt>aA-XO^!48>SnK^re%*hH+&(5T{PYiL4^I&jQji7GaxhNdP)1}Fdk D&^4fZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8740ce83f34d6b729e4d26edb96c735e1c814638 b/fuzz/corpora/asn1/8740ce83f34d6b729e4d26edb96c735e1c814638 new file mode 100644 index 00000000..f1129271 --- /dev/null +++ b/fuzz/corpora/asn1/8740ce83f34d6b729e4d26edb96c735e1c814638 @@ -0,0 +1 @@ +0€0‰0000000000 \ No newline at end of file diff --git a/fuzz/corpora/asn1/8755475be27b210d37493dd346286537631859ea b/fuzz/corpora/asn1/8755475be27b210d37493dd346286537631859ea new file mode 100644 index 0000000000000000000000000000000000000000..e5aaa94cfb3a7e5a0f3a2ff64da09a79bb3a8085 GIT binary patch literal 30 bcmXqLU}9uqVqgMcMn(w1#Kr&?WMBXQ7M}pw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/875aeb5360aa071c298b7f61b17680af6cf97fba b/fuzz/corpora/asn1/875aeb5360aa071c298b7f61b17680af6cf97fba new file mode 100644 index 0000000000000000000000000000000000000000..0addb8d565c2aab343766a8414b8655ef468eff7 GIT binary patch literal 2322 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOg<(O1qG7{AK_*6q1xyVL25fAM3`~p+1`MM@ zqaiUg(*)OO@*T~{qvh9V`87n#uhHt4lJYB|&4aP+2R0KJm>3xi7#1=JGC`X<0L`5p ACIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/87733535e07f211f82919c4e887662d4373a7376 b/fuzz/corpora/asn1/87733535e07f211f82919c4e887662d4373a7376 new file mode 100644 index 0000000000000000000000000000000000000000..1547314ecf24773c36659006798d7b66860ca9ee GIT binary patch literal 56 zcmXqLFc4;A*J|@PXUoLM#sOw9GjK7>FfcPPFfg!aFfjc8|DTZ&#DM{G1_lNIF4zdE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/87ba9ea309dc3b30c7c3cbf138c1f89349e75af8 b/fuzz/corpora/asn1/87ba9ea309dc3b30c7c3cbf138c1f89349e75af8 new file mode 100644 index 0000000000000000000000000000000000000000..f79f64126b6683fa6689c5e74719e66b10b679ce GIT binary patch literal 10 RcmXqLU}H2`z|6p4000Xe0lNSI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/87de163d2bf2ba99a45902fe8f9101221bcd38f3 b/fuzz/corpora/asn1/87de163d2bf2ba99a45902fe8f9101221bcd38f3 new file mode 100644 index 0000000000000000000000000000000000000000..020615834c1eecea31039d43caadff98e9a147be GIT binary patch literal 418 zcmb`CI|{;35Jl%r!ZQ}ZMzBh0V-)T~^hK=wG?q4&f~~GV7@J@#xBzY3hLx_s!omf( z11nLI;HMTDhT+_SGYmxMD{()*`6|a7fv^%o5X}J5R*;tFeh?B7D3U0df+-irI9xBg zh(W z{GaaM$@FefE~~2EoB7Jf9iHtLA?clLEkMw3%(XCV&jr_RT2_b0P7G&)W?x_p0D3n$ z^8|FC`~>3b=kI}z5J?sYkS>MaGfH+fvGQjbWh{1cHO1dwv>D^qS_@mP8e3Q+wUIcD zGHuz4KMuck+R=7eEs?kq$=yo$V`p4a#!4TdmkwY6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/88142b7e55004fa233131186d27e2dd993e2160b b/fuzz/corpora/asn1/88142b7e55004fa233131186d27e2dd993e2160b new file mode 100644 index 0000000000000000000000000000000000000000..39568f3742aabf08a88824fe52a640bcf18069cd GIT binary patch literal 21 ccmXqLFlZ3uHQ;7r;M1& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8878517eabb672daf49fe7cc91d764397c8ecec4 b/fuzz/corpora/asn1/8878517eabb672daf49fe7cc91d764397c8ecec4 new file mode 100644 index 0000000000000000000000000000000000000000..4101bf1ecdc03820a1c4045f568c90f394b6cc86 GIT binary patch literal 2031 zcmeH|y=nqM6ov21tRu5=jY0eYSx6Po>YH>Souse}DYmimO{TKUGsHKtOJ!}7-qJ9; zY8tUhwJZYz_ndPF4s&KM!MfRcu|8y~t-k_6tKfxTHHd5iab*{cYPE!wzr$HmB=j}- zd$Ovq0NZarpkD!<2mo3{I5+vSDQ9vy)Tv=N%6gR=7-eyP1s>t}UY5^icF7xa?PPxf zO7`WCeIm8yBhM3)s)VsMMLtL#Qg<9H5t)8QWfw1{%YvYP5HXRvVRqM;-A-$HvrUYf VH(P@bs)=zuVr+^l6Y}4N@GrcxUC#gj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/888cf7a322f221a988ea57648f334eb83be5af97 b/fuzz/corpora/asn1/888cf7a322f221a988ea57648f334eb83be5af97 new file mode 100644 index 00000000..04c38fcc --- /dev/null +++ b/fuzz/corpora/asn1/888cf7a322f221a988ea57648f334eb83be5af97 @@ -0,0 +1 @@ +£† \ No newline at end of file diff --git a/fuzz/corpora/asn1/889c4637c1e34d7170f592c45e7ccecf1bda9e6c b/fuzz/corpora/asn1/889c4637c1e34d7170f592c45e7ccecf1bda9e6c new file mode 100644 index 0000000000000000000000000000000000000000..0d901cdccd7ff05914bb5a75e33472cdd25cb26f GIT binary patch literal 253 zcmXqLSkhq7VAx>Lz{bca!@$4*VuZ>V{BJPO_XxE84-zqe^WcIk1_o?wFPP!#27yKv N+zv&!6XYKR004%hM4|uy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/889f9128b7546aede28e1233d9fe962cd9a314da b/fuzz/corpora/asn1/889f9128b7546aede28e1233d9fe962cd9a314da new file mode 100644 index 0000000000000000000000000000000000000000..2b7f1a54579043ef6fe561ce4ffb33510ba3c865 GIT binary patch literal 699 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU F?+1yp31k2O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/88bad51f0b774b183636b47776d277713e0e8d30 b/fuzz/corpora/asn1/88bad51f0b774b183636b47776d277713e0e8d30 new file mode 100644 index 0000000000000000000000000000000000000000..80fa9fb72078509ccc19dd389621a0a72a0c317e GIT binary patch literal 123 zcmXqLFlb<6+F)hSz{X?{%fMj3Ai*HPU;q|Xw31+8U;xQ0T3L|D(nQk%0tO9i%%QRd M3=GVS3=9k=0EgocR{#J2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/88d93e5a5cb88bf42c869c927c7e69c2589a17ec b/fuzz/corpora/asn1/88d93e5a5cb88bf42c869c927c7e69c2589a17ec new file mode 100644 index 0000000000000000000000000000000000000000..ee144a0d65067168d8f503ab4f593cf32a03b385 GIT binary patch literal 86 zcmXqLkZ)jORAF&ofPfr11_lOOMwb8o85pz}v>P*88JJTTL3010fPtX_sCM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU%YpI@8rWD`4VoAj7?>Fu7#Ls% z(cT4GB)Px<5e5Q?FknsBW@KSx7Gz*%U~phyVz>(O6pFbPRPdR0BMXBfB2o}x`|m#_ z5YfVxK0c#HoZ<8t3=BV?jm8LA5PjNIWK=ZsIJ6ygOUH`JR}}MnJ^F({Q(bR;{vqL0Bhec- T*ZBUjA!8iM42ra$A=-{FJApfp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/88f484e76d425e5b03ae6a300796129d6c3f8648 b/fuzz/corpora/asn1/88f484e76d425e5b03ae6a300796129d6c3f8648 new file mode 100644 index 0000000000000000000000000000000000000000..6612a17696c5acd014fbc29709b69b25e0d185ab GIT binary patch literal 7 OcmZQ$)ox^A;0FK$MF7hH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/89171ebc740f1398c7198ae8f658db99505005c9 b/fuzz/corpora/asn1/89171ebc740f1398c7198ae8f658db99505005c9 new file mode 100644 index 0000000000000000000000000000000000000000..c4bea08992e7d253647a41601d294c003deefe8d GIT binary patch literal 146 zcmYMrF%E)25J1sCvuM_0LZzWF0kc#~!)3UEhp;lc1^3v(3tCZPAS8A#`T1jNlghVx zQJV2ErMc^sS}bI>knNGxR)8TBXSWIXsNN2W!2;9JJEva6(?L8D1MCr)JX9OrdlX`r M-BU_BU;Z2L1D%x;U;qFB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8932120d2b17f0ce46a0d17968668b242fa2e297 b/fuzz/corpora/asn1/8932120d2b17f0ce46a0d17968668b242fa2e297 new file mode 100644 index 0000000000000000000000000000000000000000..1fc10eeec1fca0ead8ac68181b4f7d090cd02dce GIT binary patch literal 60 wcmXqLU}92ZFlf+eU|@>;%g(lU@7~*6Y#11H8rZ=6hNdM9yo|{FCI%P)00*)U1ONa4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/897e8033cc44106dbfee860533b3fc1178085355 b/fuzz/corpora/asn1/897e8033cc44106dbfee860533b3fc1178085355 new file mode 100644 index 0000000000000000000000000000000000000000..77321e124a8418f344a9ca757a3ded444a40a36f GIT binary patch literal 7748 zcmeHMO-lnY5PkV*L_{cf=}8bgl=d=+T|w~P|KOjAg8NVUJ9_rw-|-?uT032I4{k~l zNH*+c7Xpu+nfKnzgsiz(wCncsQk+kP+``iSk&=k4kxK;-$j-#$Owj)Qj;7{p(XKz9 zq%f1^i^h$*h5{ydcFwu?m2(=v)$!CEAZzp+y#i1IyH7d^LLDHQzYrogMDH)cL6jA! z`*^tkHUQA9oO1*qWkqFKw1ws(9Q9a0I(E;0lq?*?sM&q%;TK8SExw?0x1>VZou$$~ z#B;r>Q3D%J4wNS^szx3AsBo^wx#*1bFd~G57`3tb3}Q)*wS-yEQ$TXbML6m)yL)qY zmfl^{{m&+c)7^=A@F|HQ(o_@x9nb+J z4sRY0Vm05M4yW5f%<#;_D0mOV3W)$LlmC?1fdBx~uoC395v#1)tYuCRM&Z`|aK_bf ziB|&1yj9q*8=RCfXA6WzOCO}wNrMlU2wya6D4dUwUFjyRMgVC#vx{@wo?QJ8=~-B3 z^Fd7rEgK2CyCxF|8$c0XodlvNNF)%wK_bLf8jNX}xLzNeL|l6$n&c_))kuxihbF^q zHYmd5`Ff;!jTClb$CQZZg_?}x@Pu$LKD}PA%fvniA4>H9l)z0)^!M+Obisb@mD)f* JG4UUbcn769>>B_8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8a240ada7afad50186cd02e826d7f9dc9ff7d794 b/fuzz/corpora/asn1/8a240ada7afad50186cd02e826d7f9dc9ff7d794 new file mode 100644 index 0000000000000000000000000000000000000000..2063a1a6e448b5f71a7632eca7703a3e54313cd2 GIT binary patch literal 251 gcmXqLSkSPbVKF1aQWUrxg@-Cf3U3h!s_AVf0Hj1wkN^Mx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8a35f35c85fc08f93eefb66944cb7f5c84fc5686 b/fuzz/corpora/asn1/8a35f35c85fc08f93eefb66944cb7f5c84fc5686 new file mode 100644 index 00000000..9f63dc87 --- /dev/null +++ b/fuzz/corpora/asn1/8a35f35c85fc08f93eefb66944cb7f5c84fc5686 @@ -0,0 +1 @@ +%€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/8a3ce0c40ccb925bd5fc317e5776fb811dd0a4d7 b/fuzz/corpora/asn1/8a3ce0c40ccb925bd5fc317e5776fb811dd0a4d7 new file mode 100644 index 0000000000000000000000000000000000000000..1b12ea25207cc4ba6277a6671c65b48ea93ed018 GIT binary patch literal 705 zcmXqLU}92ZFlf+eU}TE?z|PjNd@ln7^9u$B2Au{rh{)c(d-raE@rhH#&epJZF9Sm} znmL#zLqs5|(QU<4jpPof4d{B9BEc?1vzI7+I859E4i%7ZKz4y#3JVoX_o1rA5rR1E WK{AzL$ORu}P#}T}Q;u4}1O@cEM-`Tf)PA8iwVL4=>e(66o-gH%tSF!15F32esuFN_$apFv=;&Z Du<=7* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8a620ac48eb9bc71d3eb168869f95636470474e6 b/fuzz/corpora/asn1/8a620ac48eb9bc71d3eb168869f95636470474e6 new file mode 100644 index 00000000..a9554977 --- /dev/null +++ b/fuzz/corpora/asn1/8a620ac48eb9bc71d3eb168869f95636470474e6 @@ -0,0 +1 @@ +¡0€û€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/8a6c107567991ffe8c2d8f13a43814c99cc20ba9 b/fuzz/corpora/asn1/8a6c107567991ffe8c2d8f13a43814c99cc20ba9 new file mode 100644 index 0000000000000000000000000000000000000000..6b228e04fcfed8f0937ca7c6681d8a1aee464298 GIT binary patch literal 4 LcmWe&VrBpU08juH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8a8a00a76717236cacea7f1768b9be76734af274 b/fuzz/corpora/asn1/8a8a00a76717236cacea7f1768b9be76734af274 new file mode 100644 index 0000000000000000000000000000000000000000..63e45f8cd696490a323d6878f325e3e7d2cd9243 GIT binary patch literal 22 dcmXqLFlZ3uHQ;7ryT3LpGm>jzrV+7;KFhONj7N7E7_opVkvqAFVGWs61#KlT5usA$1_QqwoofLiwxi6 zF*AhRy^^~p;X)Yr+kq5w-{Gu#gn`UFlmI=XZ$d`}6s5S5T4m=x2A2{O05=bK`;JPkT1Q7co7eMfnL0bcV9s8uomod)I;CHClKjN zh~V9e5ZO((u|I-VK`efOFf;q@CYj891FigKuibkII4k-ZTCffYS_y#YR--Ej*H40h zV8rB1hHxI{;VZ8rQ4v5`LJ&I&7GV{YI8cZKzy^TvO%1G%4)uAp=$M8GtOdq6bV2L3 zoOg;791EWw0W^`257N~wA>(W z=)iVdQcei|bs)i9v*4F>V1|m?dHd}tD!5T+-jm!i&1@!IO~#F_Ow_ixwWL`ut8BB^ pzCRMIGPctV!6Fg`8qh!#j0X*nWWEfORnz=1;$i)>D0-zk{RTG~Y9Igr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8b2fdf377002804be2fdf93fda627c9a6a45eea5 b/fuzz/corpora/asn1/8b2fdf377002804be2fdf93fda627c9a6a45eea5 new file mode 100644 index 00000000..6c0b0776 --- /dev/null +++ b/fuzz/corpora/asn1/8b2fdf377002804be2fdf93fda627c9a6a45eea5 @@ -0,0 +1 @@ +141111111116+1211 \ No newline at end of file diff --git a/fuzz/corpora/asn1/8b5d5a6786cf8a99ed3894710c3e962b78a474e5 b/fuzz/corpora/asn1/8b5d5a6786cf8a99ed3894710c3e962b78a474e5 new file mode 100644 index 0000000000000000000000000000000000000000..0c80e7ad9a08dc1635d04d2c6dea4df01de4411c GIT binary patch literal 901 zcmd^;u?oUK42J*Y>Q#}#flDWGwOvBNMJPCS@HxcCh=P3+pTo`3*Kw>|3OaP^;2>Tg zmAzo#?1S24xwPgmdw<@tbQbGq^co*QNk=0{yH10U( aLu~pTZ0~mWcKg4dQ2f@&K5lJfaVK6&(RQ@} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8b70ec463df54c76748c345f315c43a11cb6233b b/fuzz/corpora/asn1/8b70ec463df54c76748c345f315c43a11cb6233b new file mode 100644 index 0000000000000000000000000000000000000000..42f1f3e1c1f8cd2fde14f04f1f73d4652744a681 GIT binary patch literal 588 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1H!>Q6 zlo>RzF^9^^uy7ePG&3_aE?@x5g8@i$XqE`mn*s&~X0R@Z`bL-`jSS+Wh77MT2{m9~ GU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8b7b5f3d3306fe2720ad45b11db4207d2a06a669 b/fuzz/corpora/asn1/8b7b5f3d3306fe2720ad45b11db4207d2a06a669 new file mode 100644 index 0000000000000000000000000000000000000000..ba0ddb1ebc8598df354e253dbe464dede911b030 GIT binary patch literal 805 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Kywm%ryShX8j7!;Z17?>FtSQ(=K|NsC0r0M_vEDQ_`!cbLAjEoEn1`TX1tp-gD z3=GVS3?QxnJ}a6SwG0|x!}S|9-e+QDG|+$wFfua9GJtGC1|WfGMg|5Z1_lX(U=|r< zx&QzF|3l*cW0Bdy%GGMcvU&AaN29O+mkrym@4vB2o!in`IrRS)W>JQ{g$C|3uO9z% z$93!c#XDE`XHDro%3{f~osVa4_LlwiM#2+zdNCio9On2=$;7DPnqZ8q;$HJ)rSHGD zcHH+-esn0vD772?nk~1D3QKf}VH*H$F&4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8b920c2d24b6b63b0d1ea8d7c107c787700e9458 b/fuzz/corpora/asn1/8b920c2d24b6b63b0d1ea8d7c107c787700e9458 new file mode 100644 index 0000000000000000000000000000000000000000..b11b41345afc39a99c08ba7d05d7634dc8cc0b07 GIT binary patch literal 3809 zcmeHKO-chX6#kN_nN}^#Lg}W8g3waCcy+4_7cM-29>IHj1Jb$>+`5>>^ai~_ui^m& zcUoaUNix+IsfZnf$|MYrmluZj<^3d|(9}Bp^ZrX+g*v5BEA}8XS_BwU+%!r6K?886 zM*#xm6l*u?&^QeZ)w2H(n&5J$S-BFX98%VdIyiw7T_=urooKiH;-{@^)c$5`GA2hE z($?t)zhn?7d70e>>0H$%Mwo*E!$cX$Ukd=x^nOe&hdzo4b zy4F7`_OkshcOe#CBW2fGrLI-p>_2%l7F{D{`z>oE=OYEBme6eEgsT>*4|eihqOH_h zcrlQia;Z*_!wapDYC8G{ft<;nG=)6?dW%y=HyzRQTLrT_`~lYO30nGT$sfLOo~ndK Ff_GYcdN=?8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8bc2d2e0d3bcac8e389d3e3e00a3d1a6c8ed1ddc b/fuzz/corpora/asn1/8bc2d2e0d3bcac8e389d3e3e00a3d1a6c8ed1ddc new file mode 100644 index 0000000000000000000000000000000000000000..82f036ff0d4e39d696df286e669c45f013b76cf3 GIT binary patch literal 5 McmZ3?Z12th00fHxEdT%j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8bcd7179354e485615c9fe24ad1ef9ee11700982 b/fuzz/corpora/asn1/8bcd7179354e485615c9fe24ad1ef9ee11700982 new file mode 100644 index 0000000000000000000000000000000000000000..17bea38df202e092b5fbf187b9128a1d95a2b326 GIT binary patch literal 5744 zcmXqLVB^+m^Jx3d%g89e$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Kywm%ryShX8j7!;Z17?>FtSQ(=K|NsC0r0M_vEDQ_`!cbLAjEoEn1`TX1tp-gD z3=GVS3?QxnJ}a6SwG0|x!}S|9-e+QDG|+$wFfua9GJtHt0<1Lz7$gjWS!B@U{vq-I zvB+#;Zc8r53a6zH% z4RS6ES%JI%#x8YkOJ`;32QJ4j2;BdS3=9JQxnD9!FbI&5a%mU1!y@G}hRVt?FfjO& zS1b&|z#V*LuD{374qUC#GMAJJZJ3m~{~17KE_G6_(P(P{35=Gxv~TB*mbs&yi2wgb wI}z0Ap$(G?ZQwc)cZPfSceE2h^MRYu3XK*O+UURyEmJNd1J7tDg0%5m0BmxlSO5S3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8be76e6647759d200fb98208e04bf3a0ad217013 b/fuzz/corpora/asn1/8be76e6647759d200fb98208e04bf3a0ad217013 new file mode 100644 index 00000000..3f3c3e20 --- /dev/null +++ b/fuzz/corpora/asn1/8be76e6647759d200fb98208e04bf3a0ad217013 @@ -0,0 +1 @@ +*†HÎ= \ No newline at end of file diff --git a/fuzz/corpora/asn1/8c42c6631f3e7192977bce32cbcb5251c50b4549 b/fuzz/corpora/asn1/8c42c6631f3e7192977bce32cbcb5251c50b4549 new file mode 100644 index 0000000000000000000000000000000000000000..7543d0da116e040adb61d545589b1e106aa40f2c GIT binary patch literal 541 zcmd6kF$%&!5Jms&u9JueTjmVe=BE{elqtN29%Br+*YXCrj;$mMDFX_E419j|c>JO1 zq0K{n9c3TIJz-qVIg+L>d4Qlba%zO7Giuf5VLCg}UAhOTkMK1BT;>37OVTtvI0Enj jUh1 zH!>P50I6mUm6c&hHE3ASu&}{^m5otFp8-tqfhlV_Fr}dZ5ww9&It&InY>bLL>Ob~3 xG;H{@sc}KeoIi6K8X6k@Y*^4Rqw&wY_J)Rr4?P`qm2AySqJ|7$zz(4p7yx8NEc5^X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8c5b79c06685768f9cce266d827b1b9043fe6668 b/fuzz/corpora/asn1/8c5b79c06685768f9cce266d827b1b9043fe6668 new file mode 100644 index 0000000000000000000000000000000000000000..c8793d98a802e1149590ef3287605c53fb471317 GIT binary patch literal 133 pcmXqLU}9`wVq`%@5D_M@AcXyk3B>({O@tj)FAK~-Vzo0c001G74D0{^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8c5f23791786a76a2e2f1b5148d5daa46932c15c b/fuzz/corpora/asn1/8c5f23791786a76a2e2f1b5148d5daa46932c15c new file mode 100644 index 0000000000000000000000000000000000000000..ddda7f1ad1666cb6d5acf1f3d02298a5422cab2c GIT binary patch literal 75 zcmXr;WaHFo^Jx3d%gD~OpuwPliSdFVgFyouBLf4&0)~YQhDc%z$Y3D@M4cc+Fqi=V DWN-}W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8c96f46a022eae22857d676e9f340cfad45f1b5c b/fuzz/corpora/asn1/8c96f46a022eae22857d676e9f340cfad45f1b5c new file mode 100644 index 0000000000000000000000000000000000000000..3d6f0c44279672ce78a001d236ffbaa890ea1128 GIT binary patch literal 1368 zcmcgsK@P(p3~Q;h1Ghe5KX7k*UV7Uv_SFegP(&QT#xzcqlyJz&wb8m8d0s!hBpElp|VB!B%|MX~6$FI?76Z=ZJbA2aBLi zM*DE?d$dbV;Jr@jd9TDSliHjq_iUQq#${SbUQfy#9OU(!@vg6SEE&->HS@cStatCR PqD%@}@7|Vlc{+Fll_3s3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8ca02b270f487061d7a76284e54ad5955e7ffd4a b/fuzz/corpora/asn1/8ca02b270f487061d7a76284e54ad5955e7ffd4a new file mode 100644 index 0000000000000000000000000000000000000000..f71c1dbd4013f938b136c0176d02754255482593 GIT binary patch literal 224 zcmXqLFlaDfW@FScXfSLrU}a;}(qORG!6DGdh$0b~5Xh@19|&?d+kBsNpalPvTZ z)z4E1&)1KnwffsG0MG;vS)`h(X3wpAEFaGu{p3>N4 ze=IUvSh-qxST?Wz>Sz=e;Id)+_5C+?sdHO8D~JBy!Ysvh%I`sT}{`R7%f{SMn+~U29~T(DR&;5+daKv zGJRwFyIpoGn{tJ9Hb=_Ahy~W7VphM$42b(VY92s3aY_odE!9 C+L>(t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8d846d929136860138c50e9bde1b21815317741c b/fuzz/corpora/asn1/8d846d929136860138c50e9bde1b21815317741c new file mode 100644 index 00000000..88dad795 --- /dev/null +++ b/fuzz/corpora/asn1/8d846d929136860138c50e9bde1b21815317741c @@ -0,0 +1 @@ +000001001000000Z0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/8d88c5b54a503793527df2b1a49a2d87f7a65172 b/fuzz/corpora/asn1/8d88c5b54a503793527df2b1a49a2d87f7a65172 new file mode 100644 index 0000000000000000000000000000000000000000..31f24b74753eb81dd812380136a5c08edcb7d6c8 GIT binary patch literal 336 zcmXqLU}92ZFlf+eU}TE?z|PjNd@ln7^9u$B2Au{rh{)c(d-rZZ;bW>GPlT|!OpzZz s?jqSeFqdPxYfB`^cWe!NL26KZwFT_|y-+Y+}?hU@`!ajj!3*wc0$+*)lO2G~Q=oY+?je3kDi&?2H~-0N93|!vFvP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8dad836f7c6e6bac817faf8578bd18779e2f7b96 b/fuzz/corpora/asn1/8dad836f7c6e6bac817faf8578bd18779e2f7b96 new file mode 100644 index 0000000000000000000000000000000000000000..5326eaf12e8aa8f75c68086c08c75e01c46ce316 GIT binary patch literal 968 zcmXqLFlb=o)N1o+`_9YA&a|Mxpn-|8!H~hAfsM()fPrCQg8>+_F?q;pGcYh1FjzEL zfanH;JSLGOgQG9*EIT&QP3KB&{{F^PS=}jD#CaJQ4Gawo4Gj#84Gg0U+znjWm_ub{ z85w<9tPLy|n%^)r6ft06XkY*v!^Hg8+}sS#VKOkYU@$;%&CSh`xPK8`h;BBfP!8<| zhPSyUMs*q99(44MoY*ci3J@-*=ng8^MV7D_jd(Kg2N i2XB;NO;$|8kc0&be^APzYQhr615k6*Z(&0bVPOE(yT17V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8dbe30c3a9491ff4a341f22d59f6e49efd460e6d b/fuzz/corpora/asn1/8dbe30c3a9491ff4a341f22d59f6e49efd460e6d new file mode 100644 index 0000000000000000000000000000000000000000..b65275ea3368c64b3aecb02af8d067afe1c2a94a GIT binary patch literal 1499 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Kywm%ryShX8j7!;Z17?>FtSQ(=K|NsC0r0M_vEDQ_`!cbLAjEoEn1`TX1tp-gD z3=GVS3?QxnJ}a6SwG0|x!}S|9-e+QDG|+$wFfua9GJtGC1|R`%Mg|5Z1_lX(U=|r< zx&QzF|3l*cW0Bdy%GG4WvU&AaN29O+mkrym@4vB2o!in`IrRS)W>JQ{g$C|3uO9z% z$93y`t(~j;v!-+(WwB)0&d0Mid&~ZMBjE`f$IcHxdRZmMgvtW oU=Q5i*o%e1k#ad0P>Tg{frDPqEMRH?6{XLz{bca!@$4*VuZ>V{BJPO_XxE84-zqe^WcIk1_o?wFPP!#kTqVo zuzlSjMh12UDBupXB~GJ(zK18+Ml(ZGm<~cV4jMO;5K2SQ&8SHNUj+S!0F)#FkJ-^s Yf@U0Sp+sTEVWN9hCCx_4l06&%03;ew2><{9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8dea0b00ee2f4fa2123e4a625de01175228dbb77 b/fuzz/corpora/asn1/8dea0b00ee2f4fa2123e4a625de01175228dbb77 new file mode 100644 index 0000000000000000000000000000000000000000..ba6a872db60fc1c8dbab89eef454787e230567e9 GIT binary patch literal 74 zcmX|&!41G548)v((h+#E!!5%;H!wp~Ahmwk56iM#0f-Tt%3vIMs;xOYzkJA*OU^B5 Hcdg(Bi1Z0Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8df8349aef1e3ca3913d96b9b952549fe152a6fa b/fuzz/corpora/asn1/8df8349aef1e3ca3913d96b9b952549fe152a6fa new file mode 100644 index 0000000000000000000000000000000000000000..5e811eefaa1a847947e71bb87b10e692cd83d047 GIT binary patch literal 316 bcmXqLFlb<7WMpJyP+?$T7-bV54h#$cA3+yA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8e177f6188395a681832bf507dad72e3d594ac34 b/fuzz/corpora/asn1/8e177f6188395a681832bf507dad72e3d594ac34 new file mode 100644 index 0000000000000000000000000000000000000000..79e279ddbbf72073d02f58ae90f9dbdf87db9bf0 GIT binary patch literal 20 bcmXqLVB^+m^Jx3d%gDpU$he=O!GHk(Hbex> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8e2f28cfe7da92a0439ea13fdb931fc3a4eca53d b/fuzz/corpora/asn1/8e2f28cfe7da92a0439ea13fdb931fc3a4eca53d new file mode 100644 index 0000000000000000000000000000000000000000..040e3bd6600e9610080051767f61ee6accbe95a4 GIT binary patch literal 596 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePG%+?ZFf3qTVt@jW=Flt=rZ)x*49s9%5cQ3W+Ds%GB1R2ExTs;s Os7o-T7+aWtlmP(3RB7k{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8e315067a4eb9c579551e2d7fa4ce51268683d40 b/fuzz/corpora/asn1/8e315067a4eb9c579551e2d7fa4ce51268683d40 new file mode 100644 index 0000000000000000000000000000000000000000..e0224d02078673471b880ca896ed38b3e69853e5 GIT binary patch literal 54 qcmXqLkZ)iT{m6Wug>gXx8>hAkGcywhBO@;Z0|Qusg$YxFfdK#{zX&S; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8e38064ef53321c690045f42f9a1c5c10c71b2cd b/fuzz/corpora/asn1/8e38064ef53321c690045f42f9a1c5c10c71b2cd new file mode 100644 index 0000000000000000000000000000000000000000..66d869d8a4140c20e78bcd06f8ef0c00f6c19e5e GIT binary patch literal 517 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CULz{bca!@$5WR2h6IjzgXx8>@CB3xhmJ5 N B2krm> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8e8d5b062de3e56caf3dba9a8ed051cd8065a460 b/fuzz/corpora/asn1/8e8d5b062de3e56caf3dba9a8ed051cd8065a460 new file mode 100644 index 0000000000000000000000000000000000000000..d3bdf8095e31ddcac40830622e8e6dd329ac476b GIT binary patch literal 397 zcmaiwK@P!C5Qf|L+R}POgjk5giiL>pk%l9Ymv0bjb6D_C@KFO30U`MU c@4vxr9lW+*8~UEEK2hVaP`;DjT+}~$0_> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8ea715f670d80de73b8882166d04ff47ab50f8a1 b/fuzz/corpora/asn1/8ea715f670d80de73b8882166d04ff47ab50f8a1 new file mode 100644 index 0000000000000000000000000000000000000000..1f6d41854b409973879c27020b27a9204ba699a5 GIT binary patch literal 79 zcmXqLFc4;A*J|@PXUoLM#sOw9Gq5uoF|au>FfcGMT1hbSGcqtR7#J8BGBYqh6$pal O6hH(R?1E5VzXAa6FAJam literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8f0cb7659c67a56b9326c1c76811ca30b5322881 b/fuzz/corpora/asn1/8f0cb7659c67a56b9326c1c76811ca30b5322881 new file mode 100644 index 0000000000000000000000000000000000000000..d7f96ee2aa18841b7d123335f38bf10bde9023ac GIT binary patch literal 51 ocmXqLFc4s4*J|@PXUoLM#;V=O!XU{k&CJZe;J|fFFPY0RaL60|NvCz&QjUpA+2VpQVQ7Pe!}f61(?tuAOjPfCRa45WWWq QrEPiB1OyZW1ONa4WH}KNh5!Hn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8fb64f11ef64014d9916c151c57d2c18950657bb b/fuzz/corpora/asn1/8fb64f11ef64014d9916c151c57d2c18950657bb new file mode 100644 index 0000000000000000000000000000000000000000..288a79193449e00ffc17d3446f0db183a3659af3 GIT binary patch literal 2660 zcmXqLVB>CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 zHji_*OpI)->Dr7ejLd=z%nX>opn;90)u4%ifq|Kkfq?;J@~F9^;V_yWM)L(2jE2K# bI3R=3^e~zpkilqr7@Fw;3=EAdq17A!5705g literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8fbde52ae0382f34b786c3e630a46d9aba23d064 b/fuzz/corpora/asn1/8fbde52ae0382f34b786c3e630a46d9aba23d064 new file mode 100644 index 0000000000000000000000000000000000000000..d6073949f7f08f9b3d7df846b4bd436526196c7d GIT binary patch literal 41 lcmXqLFc4s4*J|@PXUoLM#;V=O!ob2T$iU1129^*C1OR}`1QP%N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8fbf2e3ddf1b59b02943dc23ed8398a864e25ea8 b/fuzz/corpora/asn1/8fbf2e3ddf1b59b02943dc23ed8398a864e25ea8 new file mode 100644 index 0000000000000000000000000000000000000000..04c26666f67f20285fd3fdf1d862973a3cba083e GIT binary patch literal 180 zcmXqLU}92ZFlf+eU|`T`U}K8>%g)x&v~uP9_vm~k1_rR~-o1PGI@qAgqVt&;KqBa( K=zP-61OWgL8a~|s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/8fefa1d5ab1d739c1a714a42b8198ff08e2760e3 b/fuzz/corpora/asn1/8fefa1d5ab1d739c1a714a42b8198ff08e2760e3 new file mode 100644 index 0000000000000000000000000000000000000000..2115965f28b27a70bfde78210ef5d98a7f2fc06e GIT binary patch literal 335 zcmb`CF$w}P6hvQ=C0Z&rTUyH6jFq4WmKHh49^)hEwY-5h5+sRHOAFs`W}5#PS#V!Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9031f395ceae12bba0efb424c63112b95b8c6b30 b/fuzz/corpora/asn1/9031f395ceae12bba0efb424c63112b95b8c6b30 new file mode 100644 index 0000000000000000000000000000000000000000..98bd5f2a32d6cd08dd8bf106f4e5f1bea737cfdb GIT binary patch literal 592 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u=kFfbS}h&M7Cg47r^ zurY_q%CK-5G&DCdF)UzU0Lg;^NM~r42-6z_1_oxZE{OU@Dwv=Rw#J~5L7dTmY-d0X Op@tca10NuRE;Io14QcfN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/906af1b43376079567fe82d774c83bca698d0748 b/fuzz/corpora/asn1/906af1b43376079567fe82d774c83bca698d0748 new file mode 100644 index 0000000000000000000000000000000000000000..0b1b62bec4ccb6537bb4c7911af96dc14ff1e6d1 GIT binary patch literal 53 rcmXqLU}9usVq#`tVLG4>#tQS#*)lWmGAl4JGcYnRFfb^92owMSx0nRa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/908bf3430b00cc6a53aa0b416ea3315624421453 b/fuzz/corpora/asn1/908bf3430b00cc6a53aa0b416ea3315624421453 new file mode 100644 index 0000000000000000000000000000000000000000..f168c6031140397e5c94fa474f8b77e450431948 GIT binary patch literal 44 dcmXqLSkSPbVJQO`GVw5g@IojJVnYE~0RR`O3Q7O~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/909dce73fd720ad846fad035fc11f7722314488d b/fuzz/corpora/asn1/909dce73fd720ad846fad035fc11f7722314488d new file mode 100644 index 0000000000000000000000000000000000000000..0d43c523d746f29fe499a2c463114b730367af49 GIT binary patch literal 1368 zcmcgs%SyvQ6ut9k#6W3-)kdZ0LR?tH6RZnexYll5<$s2N{R^S~fgj*+bm0#Og05XE zGnto-OyxKXYQS34pg#vGP{|5cG(7>D=5xXK~M|&URQevx5U+_2tP>ir&rv`wD80eIK z47&g>eT7+``z0zd!7cBHKn+7H0GBvMnurA;ManwJ6H$(~WtR4ymI_;>9R5K{xxFk_ zb#>tgsJqfbg#mM!nWFf&d Y<2El^rBHgeYA^u$X?Pdw3{Oko8|s^fBBLf42K?560t3eY31B`0`H^=~@8J9tZ91#pmOmKq$Hsu(! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/90c61c5d13e5f9d3ef289f27c415ad85f46a6822 b/fuzz/corpora/asn1/90c61c5d13e5f9d3ef289f27c415ad85f46a6822 new file mode 100644 index 0000000000000000000000000000000000000000..d9653f42cdf0728421ff6d304bf34b63a0bc1e92 GIT binary patch literal 4832 zcmeHLF%H5o4739Z6ogdq1qLKo!Y}v|6Pfr3pI|{eih&UXY9egh%54V_GNW~N?5ppZ z5~8234%@?RhDC|)0x?AAu-wFBbhrr7W9bI>Jpv2?;2B)D40g{H4_1{^fmG$sWcV~a zuTN1GMIJwJ;*t6wKUU0CfmE4vsx%g_Pf^wE6ht_*1rip+NF?q;*9RFrX@#0m|EWSz zUu`_PnY6n4iv3i&9Y0@mA~DD_X-};>*ETEmAqIJK-9f6%9<$R<&6?B2=F1DDdh8-d z3eKeIs za}{%ytflM`i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/90d812152c5d2256fbb1d5f00ffdf93f890f0ebc b/fuzz/corpora/asn1/90d812152c5d2256fbb1d5f00ffdf93f890f0ebc new file mode 100644 index 0000000000000000000000000000000000000000..304984b4fcbe7ae21f0ba4d912baa56cf9b830ed GIT binary patch literal 12 TcmXqLU}I!tWMoibU|;|M2(|#< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/90e6924c9c61028f2902d6e31c85d874445be393 b/fuzz/corpora/asn1/90e6924c9c61028f2902d6e31c85d874445be393 new file mode 100644 index 0000000000000000000000000000000000000000..ea2c36c4d91104ec7d1ebb8189d15e346c03b466 GIT binary patch literal 725 zcmb`EO$x#=5QX0)HU1$K+;kKsHm+~UqYA+ zWWKx^TGNfQMRw{*I}~+*rC&;sv_>TwAZR0*MZzLx-!$WFd7LXTEgxufbc%o=oJcD! zyzCB$#LfA+yCU zv$Mm@dow!}?X8ntavLevN`+!6i9pd73G9X0(kg@kKui^l6^+WtRM`oon3pldx)QMS z`@*_%VElZ`ia(3z%$*e_6+?iwXG>=|(CQSFCwR&I1EUh Nk1ypyAxIK;01qJR9)p9X*OhC_xr)^QR_qS~P?FX18bqpv3B;O(#4)KXVRl zLB?va3u;Yn0bc!w^g+>zRwx!)5qSl=008;nkC0e7=jZ^IdNV1wIxHPk?Gb&zMA6SN z)g0g1-L-fja1gqDN|Td~kF7e6(zB ztrl`A{iv>e*Izam=vYj{52qtBCGKSv@UvYpE4b`uSr!cr)xES@Enn2`%g)-m9uvYl4K}4yNRQk?M|m{JA$@fek+Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91890125fbc8757458a0110ac9f6647340efe4a1 b/fuzz/corpora/asn1/91890125fbc8757458a0110ac9f6647340efe4a1 new file mode 100644 index 0000000000000000000000000000000000000000..05053c9109b37649a822a9bbbef441974415e584 GIT binary patch literal 43 gcmXqLU}Dr@68!(4!Jmnd0gONtTnH=%5@%ol0HV_c+W-In literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91932ca9f0f2eed41414641b86a43d73dabf01dd b/fuzz/corpora/asn1/91932ca9f0f2eed41414641b86a43d73dabf01dd new file mode 100644 index 0000000000000000000000000000000000000000..ae6cd18db964455ea846157d2ae6f89403204c9b GIT binary patch literal 668 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENEnIWMBZxg8@i$XqE`m8v_OgX0R@Z`bPYQFp*@405x1f6+>`@ c2@6Ty!C?q#0ZSF{P{j}&-XS_nIKasU0J+EL;W*4UJ5V3=E765C8yq3JxIv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91bff75dcc29403e1ca9b26cc19cce9b0c86dba6 b/fuzz/corpora/asn1/91bff75dcc29403e1ca9b26cc19cce9b0c86dba6 new file mode 100644 index 0000000000000000000000000000000000000000..78ed4cc91b5f8f05548bbdc89f98f7fb1f905a6f GIT binary patch literal 90 zcmXqLFlaDnU}I!pU@%}1XH;JR;WLNI%CKk{G%RRX2$E)&lxNXlWn(;|$$$Xt45lCs SJ3_>ufsIMjgn@w>WE=qC!VDb% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91c5896078447d9af3b4d9c213cb3cd93b9dbfdf b/fuzz/corpora/asn1/91c5896078447d9af3b4d9c213cb3cd93b9dbfdf new file mode 100644 index 0000000000000000000000000000000000000000..812c012cb27fdf663f79d1ccc84352e05fd9e275 GIT binary patch literal 2099 zcmXqLVB^+m^Jx3d%g8Ch$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUvF50~i=I7#J`ZFffAo22ep1-~-}iK!pq%*jQQ(niv=u zm>C%uK)Ofmr$YE&84Z6>(i^b!HyZu}8~y`b{*1=|z{dYb4}UWKk5=6q83-V%dsgj6 F763@G_S66X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91d059164c74ee8014af522df99ac8779b2d6cb6 b/fuzz/corpora/asn1/91d059164c74ee8014af522df99ac8779b2d6cb6 new file mode 100644 index 0000000000000000000000000000000000000000..0e6f2f89ff574ed1a74c7c57c97e204967b4a60c GIT binary patch literal 934 zcmXqLVB>CM)Z*l2Vr=^^;IW^f!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUP djfPblkpTh(7))Wg8&uc5F<@X|W@KPs000f$>lFY1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91f04b0828b4746a8a1ad4c40aa0f20619f5fa09 b/fuzz/corpora/asn1/91f04b0828b4746a8a1ad4c40aa0f20619f5fa09 new file mode 100644 index 0000000000000000000000000000000000000000..24b521f298ff3141405e7369660971edb0997093 GIT binary patch literal 51 ZcmXqLU}9uoVqntxj}I^~u)?JI832emCD8x? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/91fa58d15d2c57be3263f0e96ae9e82e422c4167 b/fuzz/corpora/asn1/91fa58d15d2c57be3263f0e96ae9e82e422c4167 new file mode 100644 index 0000000000000000000000000000000000000000..6d2923620555b5b46fedd5be3ef124c70215bf02 GIT binary patch literal 120 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjo=bos`2nNoUIqpRCcy@#!_L;YckkZ4TNoJd^TD!P7@z%kf z!^|#A@0QIfgy+F5)<*8|?2iaZ?__5If_`gmwPAm+xpA{593OizoC~^hg*5=^U3K9Z zh)=!)@%8z0pc6zU3j|0^;romxD^0BYSVjed-Ib>FkBhco`c-Rbt5su5W282chf$#| zTj|fEUpwvJc3PE4o4r~T7IC<< Aod5s; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/927d7281f79f6ea2748e00b1438079a079361aac b/fuzz/corpora/asn1/927d7281f79f6ea2748e00b1438079a079361aac new file mode 100644 index 0000000000000000000000000000000000000000..43b6501f48fd13d8d0f96d3e913f21d5707150a6 GIT binary patch literal 1051 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXIkU;kD{|rn&86*sXS!B?p{~_`JvB+#; z}|DT0{fk7A^IE)Mo1`TX1tp-gD3=GVS3?Qz-XyA?p?!cv7B66S{I0pg% D;iloK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/927d922ec4f76b06db1cef1e53104ffd60852d1b b/fuzz/corpora/asn1/927d922ec4f76b06db1cef1e53104ffd60852d1b new file mode 100644 index 0000000000000000000000000000000000000000..ec1908fc417a81063a1595709a578f3ad972e93d GIT binary patch literal 81 vcmXqLU}92ZFlf+eU}K8>!OqsOcW=5j0|NsRUu!Qqe+vhih{oP63{U_7uoD)V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9285a30532fa13a64c2a58e7d162250b65dc6b8c b/fuzz/corpora/asn1/9285a30532fa13a64c2a58e7d162250b65dc6b8c new file mode 100644 index 0000000000000000000000000000000000000000..46069e750d089590c75540a7cadb6a72973a43d4 GIT binary patch literal 14 NcmcC&Fo44b1^^?v1gii5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/92bb4747428f106b18e1eac9c17d1219c19b6890 b/fuzz/corpora/asn1/92bb4747428f106b18e1eac9c17d1219c19b6890 new file mode 100644 index 0000000000000000000000000000000000000000..a3726e52f580b9696c5b60b38421dccb50db782d GIT binary patch literal 447 zcmXqLU}DrVY%maHVq`F2HDCZy%xsJvEDQ$1aG}oztZa-PtPBuAYlylgu%HxF5ULqf cka(3?wL=BzY`Ybzk07?=_2$616XYaW0G{_MO#lD@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/92d54fbb7535ee6b2d7b4a6c4de8a93809e39da9 b/fuzz/corpora/asn1/92d54fbb7535ee6b2d7b4a6c4de8a93809e39da9 new file mode 100644 index 0000000000000000000000000000000000000000..595aa78d59f5f6a049374480b4b86c8fd2ce129f GIT binary patch literal 889 zcmeH`u?oUa3`KA99x278bn2qG+Aeo+5T}m)tRVP)%RlgUI+aRaw@x}L-U}g_0=Xx2 z+qJ1r<6g>2^Z{qKDoHo(0zl9kxi-SwpLw#PO~dmNg$Iq8W~f$^*1fyin0#2P0HMI5 jS^&DmJ8uAjU>W&e^69ybzn4ju0eMT`iQ)$I^>G4U_}Hdd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/92e2e9117c0cdf3ee4a63a723d83cbd210bf962d b/fuzz/corpora/asn1/92e2e9117c0cdf3ee4a63a723d83cbd210bf962d new file mode 100644 index 0000000000000000000000000000000000000000..c5f25334fcb3cad3c77c9a8e97d0849be41da1b2 GIT binary patch literal 29 dcmXqLU}BuZ!pQ&u3XBUH*jTk2Ss27Y0suPX18@KU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/92f440e52298b51e4def511ebbd572f5491ee432 b/fuzz/corpora/asn1/92f440e52298b51e4def511ebbd572f5491ee432 new file mode 100644 index 0000000000000000000000000000000000000000..3edf4ec46ce8e6360ea40cce9f92c73faa9c0148 GIT binary patch literal 32 fcmXqLFlZ3uHfUgDGGO3gWM^PNaQ-kbFfafBRoMiF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9339c16f3c58d52a77a6404b9082abd65915e3a1 b/fuzz/corpora/asn1/9339c16f3c58d52a77a6404b9082abd65915e3a1 new file mode 100644 index 0000000000000000000000000000000000000000..ae12e1b3967d9c1a6e74e43fc1ce3b562ca2878d GIT binary patch literal 20 bcmXqLU}BuZ!myx$jWu1Hk%f_gfq?-4D>MTa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/933c6669bbf937919b170ab901a1ed70f9a1cddf b/fuzz/corpora/asn1/933c6669bbf937919b170ab901a1ed70f9a1cddf new file mode 100644 index 0000000000000000000000000000000000000000..2b74da06ae31f28e602a365abdb4a97141b9ff1f GIT binary patch literal 64 tcmXqLkZ)jOoWr8UfDKqf1*;eoLOHY;8MIoNRTvjEu(4`4vM{KCBmu?-22cP1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/93b125cbaf3f81455844d599ceee445581c04008 b/fuzz/corpora/asn1/93b125cbaf3f81455844d599ceee445581c04008 new file mode 100644 index 0000000000000000000000000000000000000000..42f8cdbae63cf1ed7893b4dae810eaf1d1b340af GIT binary patch literal 1400 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXI1_v`HOe1?$4UieU!zL zWji0w-s~;=>y3mb?DS$jcscBlppuDE!!^MeS;f8P$sJq2EC2RUy8rB~bLoO8cJ~yQ ztBo^T8R|?R&P8^@|Nnn|p)O`%WMX7wwqjt(`jm3#v9aCLD<;!7w!hnD$H>O2-N?eA z$SlXe%)r3P5DoIeNz?!TSr`}?gyDh1$iQIGz{b*Q(8R#Nzzp_&g8_8|mkHujP7tL< zdf;B(e`A+Ax1}=`0#^}N;GzLSfy*=+xFn=pG%y;tWE2aOr(6bDzQ!ms4HyhS;WwP2~Up literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/93b79527fce36486259125cb816283e7328cb46e b/fuzz/corpora/asn1/93b79527fce36486259125cb816283e7328cb46e new file mode 100644 index 0000000000000000000000000000000000000000..09455172c5e3034210fbbc9b5532b9773cd93631 GIT binary patch literal 967 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZX-g!L~x(fLHh6G6n{~VKGpCfq?;a1lD*Nkf?=$Ar~A_hoiY0 HB~t(ZXzPtc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/93be46be6d416f00ab1c35f8dd1a50cb6720819d b/fuzz/corpora/asn1/93be46be6d416f00ab1c35f8dd1a50cb6720819d new file mode 100644 index 0000000000000000000000000000000000000000..6a9dd5286d2a0f2f1ebbd90c567292b24943251f GIT binary patch literal 431 qcmXqLSkS=6#AdLdft3LSFnMld%HcB;RgO9~;4=l)K2+Y2(gy&Nj8M)1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/93c94b1238c8ddf5d03ba490a33184d749517aea b/fuzz/corpora/asn1/93c94b1238c8ddf5d03ba490a33184d749517aea new file mode 100644 index 0000000000000000000000000000000000000000..1e90519d2f5d6d740adf04af45df02a95c37373b GIT binary patch literal 303 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z&<90|7R6 ztu~Ky7A(wctlEt%42sNh49pBLU~2UL|9^u917V0NTP8*Z1_px$HkMX{CI$uuW(e0{ WP+EcP4c}Xojj- zS&|`^bIzR;8zvs)!=kt?RWee1CIdH^0hpMlng|3lQKwYF%~OoyUS6y&3s&ee*|8_B zhzKT*w%8DrOS}x>vH7#1H8BS>M8u^Fzk3wyXso$q9(5ROdo&4uHEBB>e&L#5YDL)m z7>SJ3!>DP>o<|xj1Y5#iFZ_~e|2ESKMe0$csY1GMmVhl_x9U%8FQnY;YVi;D&K9u! z>=&^87)chXhmi=I2wT&7wiKfLTnnbz4(#NR?T**kv+)1+T>82r0Au?Ywwg?~DU#g* DA`y>i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9437e0bb3e2449feb8b50bcb633eb0d71b7befc6 b/fuzz/corpora/asn1/9437e0bb3e2449feb8b50bcb633eb0d71b7befc6 new file mode 100644 index 0000000000000000000000000000000000000000..6edbbc36f2c33b924c8d36f0927733fc53f650f8 GIT binary patch literal 295 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU IE<*Ae0K0N5w*UYD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/943812cfb14a99b7710433e61987ece1eb9fa7d1 b/fuzz/corpora/asn1/943812cfb14a99b7710433e61987ece1eb9fa7d1 new file mode 100644 index 0000000000000000000000000000000000000000..2e69a1d7868e878acd546c63bec44855fdf8c1eb GIT binary patch literal 3420 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Ky7A(wctlEt%42sNh49vU?3=B&d7#J8#jsE}tZ_r>M3{hpv#K^$FV9>zE(rVDe zz`(!^;TmAK!VsSoAk)FX2TBXG{Q^0JG%L`2VZ+2Y=zL*Ht$-TPxES>XC|^L6>Hz19 z!4Vf|S#Puep;a+BIHH@F*jOGi>#{VG77offm06XRj APyhe` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/944a05fb02e54a8fb8ca7410a4157995b0a3d6d3 b/fuzz/corpora/asn1/944a05fb02e54a8fb8ca7410a4157995b0a3d6d3 new file mode 100644 index 0000000000000000000000000000000000000000..e67ef72545dadee9efcc6ef088d28f1ca31aa17c GIT binary patch literal 17749 zcmeHPy^hmB5T3Oo9~?p)qH&3+;E-S_pg=;RLRTQ&D_nUkZ(t#jC!$9bv^)we<)N9i zb3XrM*NbQEP3Ai(aUxwtv!40pH^HiSur<%Ne=i>1KQq}6sF44%3=yj$dzk|uU{#v; zr9pd*Pl}WC?Zxj8nJMn^MGmL=JJ=u~5MD!dM%RX4qkVISPjvN}9Kz(8G2q%S)YxHLrG%94WBiIWzC>SJP5D0h>PT2Y4lq=) zuCRXew$;&SHI-Lg5`Xd?yu&${^;=RofHfEOj@_h8vWLuw>K&&f^83wAtZCq;){)BB zxxK@Fw1u+VV!cOY@}`G~6Z$!AL}dU*A`*l09G!Ov?RDI-oMq=7@j2&^CM+kR*<+AD zHtfipqtp4$o>y}^KCvTO-C?&vJb8ocSa=EvLqO5`A?fw7M(0X-S7cTl@W;ea+>DcURg-Bw7V|hjizG zo2i2gpqrNe>yN(E`9tah5Q6+M$U7Q#WQp1b&^|!tJ8f%;9oh%bJ^+2E$U7$|v@&G- zf68*PBC_Bt;8->-UnEhL$FGs&OH3!TVgzN6u2Z#KdSugwHbhRf5#U|vIC<6AR_BxG ovYh2~BxnvW`wmjHiKlK_k_Atl>G(20karZl-$cQ(FA)*`0kE?7ApigX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/944dacc9b7274eb29aea5d9bcbf6dcc8b9ae85f9 b/fuzz/corpora/asn1/944dacc9b7274eb29aea5d9bcbf6dcc8b9ae85f9 new file mode 100644 index 0000000000000000000000000000000000000000..ec52e1cab877cf3b7cf72cd587d95a2a110e642d GIT binary patch literal 1136 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePEMQ*1$iT3li2({gnnSZhnBEvLFffC45n%??e#Ywy7>F?gha;Hw zGcuqVK#~Kf;R$M(F|q>UB^6TD$S{L(0rLV_F8c|}ijZ7}mc#Id1vq~atxqAL KACAn4$QS^+HPX)j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9490079bcea89cf653922d52ff48603a4bd87772 b/fuzz/corpora/asn1/9490079bcea89cf653922d52ff48603a4bd87772 new file mode 100644 index 0000000000000000000000000000000000000000..46837bfc79b3d1714b7f851bf8bcf01916861a44 GIT binary patch literal 223 zcmXqLU}9`AWH4x8V=^#cU|85-0ETRg+6;^g3=9U14C0K23m{_5p|Ub8Tm}s-j7roF*0bi TGN&*uXkcU2Ze(Flfk*-XF**x` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/94ca7825e86c19426b963116d450ee4207ddbc7a b/fuzz/corpora/asn1/94ca7825e86c19426b963116d450ee4207ddbc7a new file mode 100644 index 0000000000000000000000000000000000000000..70dac014813d2edda8621c97b87f115ed85b7297 GIT binary patch literal 19 acmXqL5ac!BW@F^!Vf)kA(9qDpzyJUz&;+Rf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/94ddb2de2c3ff69337fcbc3a6a4160d47fdd3ab7 b/fuzz/corpora/asn1/94ddb2de2c3ff69337fcbc3a6a4160d47fdd3ab7 new file mode 100644 index 0000000000000000000000000000000000000000..b271e17d1495a94be31fe45c2620480001daefbb GIT binary patch literal 7 OcmXqDWn*MuVE_ODp8!Ds literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/94edcfe867d7ef8ed1f801ba6ecd3f62670ccbee b/fuzz/corpora/asn1/94edcfe867d7ef8ed1f801ba6ecd3f62670ccbee new file mode 100644 index 0000000000000000000000000000000000000000..2d835bdc8ab6a6132307cded1a5f13859f2a641b GIT binary patch literal 2994 zcmeHJu?oU45Pf&4Q4yi&U?*{Im#33Bh&Va;QBkm8kS!xe=Wj6A%pni4-E2$IvGsqhh&Gjt#z^+?SIYTZwq(;dQFwi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/94ef6a147022a37b5771d44031b5fd70127ec7dc b/fuzz/corpora/asn1/94ef6a147022a37b5771d44031b5fd70127ec7dc new file mode 100644 index 0000000000000000000000000000000000000000..fa21c80adb5ad2088d841ca69dce55edffb01010 GIT binary patch literal 44 ucmXqLU}92ZFlf+eU}IwV%FfoXXDM&Q!JvTw4h#U|X+A*! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/953441f530ccf7fc92213873f1bc200ea281b3a4 b/fuzz/corpora/asn1/953441f530ccf7fc92213873f1bc200ea281b3a4 new file mode 100644 index 0000000000000000000000000000000000000000..2999d7677b671add726e535b2d2d23320c49afdb GIT binary patch literal 4 LcmdnMB*g##0{#Ha literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9540574e5ca9b5171ffa240ae88be5350b74bc09 b/fuzz/corpora/asn1/9540574e5ca9b5171ffa240ae88be5350b74bc09 new file mode 100644 index 0000000000000000000000000000000000000000..3085228ca78e9a5f6436ee76209fb4ed94d0b214 GIT binary patch literal 68 tcmXqLU}92ZFlf+eU}K8>!OqsOcW=5j0|NsRUu!Q!eD7X#@huEs007I96+8d{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/954a6c812dc7cebc3e06971504decee47e315d58 b/fuzz/corpora/asn1/954a6c812dc7cebc3e06971504decee47e315d58 new file mode 100644 index 0000000000000000000000000000000000000000..771362e0248196b06fb3ef5df01829d02524d081 GIT binary patch literal 1300 zcma)+yH3L}6o!xEB&d}t8fevUsbB&LRPj44LLkHp>|OdaRtCglz{)f54on>wSdkc* z89~QRY|^BKKamoj%ja_($Ix->=uJj z;X-X;5X)(Z%`SaoABFfu4Y6ZgJ)r91(Vzq1yiBmeu^S?n6Wjz{Z?H01%3BZ6j^!K( zWm`l@V>uo6!=&A!7azk~g8D@&P{aO8)MbHss^Cpkr`}|%`X{QYMie*Y8%)C_T?d!) zYs%XosepLYxLA!W{#<4Htj1z7%Y|TOTdc9R*DI(MEC)MW#^N4pb>1V1zyX z4R*s6G8YS2t2PJpLRtT#WiA9Y=9Ci0A(i4YVk*FA26PM^i(?W*1R9tJyHN($r8Kl4 zr6b~tZ!eW)6KhWsb*{$BDjTURL&cFm;j9P4vA7R99z(f!EHmT{bkvLR>q E0riy4TmS$7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/95b1fe051c1f47a125692ade718abe89ce78a185 b/fuzz/corpora/asn1/95b1fe051c1f47a125692ade718abe89ce78a185 new file mode 100644 index 0000000000000000000000000000000000000000..e3786491922db743e5883d4a04db328df768662f GIT binary patch literal 64 zcmXqLkZ)jOoWr8U00Ut#1_J|wHI!Y&pb*NT#mJ!5%B;e;pn;85yOD)K3?vBv)ief} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/95c9d5b4954a01cb686e0c2522930cf2daf65a62 b/fuzz/corpora/asn1/95c9d5b4954a01cb686e0c2522930cf2daf65a62 new file mode 100644 index 0000000000000000000000000000000000000000..0696ac35ddb69098bdf670794d3d99599ffa7c24 GIT binary patch literal 376 zcmXqLU}92xXV9S2z{2$L6FVD-eqqDFpwl48^zjov+q1=g85k59u!(`xFn@c_&L*(; zF9U-B0|r|fyYmVl3Bv*GQnc+hL2xezvXMD#z#kQ~0s3#31!zob9^K!5*msxNdGmpcFe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/95e96c546864a60dfadfe00a40ee50ec0653d333 b/fuzz/corpora/asn1/95e96c546864a60dfadfe00a40ee50ec0653d333 new file mode 100644 index 0000000000000000000000000000000000000000..d6ecba73567b05f0cafcba9d879cd35d4dbd6b29 GIT binary patch literal 26 dcmXqLU}H2`&>+ssz`!77U}yja6$}gv3;;q91U~=( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/95ecc13f116ead1bff0cb5ebdbf8f19160db3b8f b/fuzz/corpora/asn1/95ecc13f116ead1bff0cb5ebdbf8f19160db3b8f new file mode 100644 index 0000000000000000000000000000000000000000..9348055e774b98a2e267a0e5931f93d87bc9253b GIT binary patch literal 33 ZcmXqLV3YoQxv{bFWdjCKS7Tsc000f(4p9IA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9625223e87f5d74b3d383157cde8cc9606534cc3 b/fuzz/corpora/asn1/9625223e87f5d74b3d383157cde8cc9606534cc3 new file mode 100644 index 0000000000000000000000000000000000000000..917c7c6ff304fe5de46a39b6b4af5614497d8efd GIT binary patch literal 84 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g89FC9MeD1y$lQtOo9zeDGVSL3=9km2I7s3 hh6@@D8sr<;m_ub{Shx%tnj4uI{xdKzg5*KK001lw5jX$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/963434a5f1f31a3c70f32f7bcb1ff855e21c81b4 b/fuzz/corpora/asn1/963434a5f1f31a3c70f32f7bcb1ff855e21c81b4 new file mode 100644 index 0000000000000000000000000000000000000000..a345b50a9eb5258b84028b710b1b09698227566d GIT binary patch literal 28 XcmZ47z$T_HUs~E%s#l5v7#J7;mV62a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/96708faa7a9710a14c22198756b14b5d6219c74b b/fuzz/corpora/asn1/96708faa7a9710a14c22198756b14b5d6219c74b new file mode 100644 index 0000000000000000000000000000000000000000..c4d86772524fd4b49c3aec31eca9407390944cb0 GIT binary patch literal 46 lcmXqLFc4s4*J|@PXUoLM#;V=O!obNa#>~us0oa@w7yy&U1TX*q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/96a7859aa3dd91c6c72452e7c239d07eebed1791 b/fuzz/corpora/asn1/96a7859aa3dd91c6c72452e7c239d07eebed1791 new file mode 100644 index 0000000000000000000000000000000000000000..d20668816f74a1fd05c94f2bc38c4fd5fb5d5beb GIT binary patch literal 701 vcmXqLkZ)jPtT1d~V*by-z{F&L6)+AM;2JQS2Q|&5X-F8yq3RVW6G&IEqk|$H z#qmLjw=fe&bQ|6LOhRKmMl?&i!HuUOTTr#2l6Zo=SG6$oVv@`42j%Eu97%GuDGesj eO5y}ar<^|Dk;Ms|39XdAR!eBOFuv`HOe1?$4UieU!zLWji0w z-s~;=>y3mb?DS$jcscBlppuDE!!^MeS;f8P$sJq2EC2RUy8rB~bLoO8cJ~yQtBo^T z8R|?R&P8^@|Nnn|VGd?wVq|2tVqnSolyc{>vE9=vCet^zzuRTU$i}MO$ikq=EXTmi zz`)874f4WC)Bpcj7#J9Y;eo@*z+lk8#?org#K6G7%*X)Z8Vstyy}bX%E_H58XIcg> q8Xy$7Ov5H{K`EE4z?H$5a$6Z(8n4cTrCc;XRNx||S}bW6mS6!NpS?c- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/970a4b0d697594259b509b4166f668b16a7fdc49 b/fuzz/corpora/asn1/970a4b0d697594259b509b4166f668b16a7fdc49 new file mode 100644 index 0000000000000000000000000000000000000000..1f753c4aeb300d651d3777e5bbf2e6baac2de79c GIT binary patch literal 19 acmXqLFlZ3uHfUgDGGO3g{KLS&zyJU#CCM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 zHji_*OpI)-+Kns>0?cX*ObmnpBS?us0~<@LK@$T512c#ZvToF}5fF?F4209jXaX6{ RXL!MA0vSypc)h_w1VRXItB=Vf`ho5NC;`CEpoRa8(l7q4`BdnAbqv)YzB>i30q7gx z#J&lm@Gfz8l}priiCOkqWS^6(*BfgW2cY0Ug=;ZT?xu&_U5e;h@MaVj4HOF;*4b>a zK^YxgD6STx7mWcZymEIA5Z#EnAN{n@jlT=}@w;0*fKZsi+pn!87SWTI6bUf)>cX6;kBW!Y( zexU`*y-%P9py<|;vB@dHZNT?7;D1=P^{B31u-sT~zuu%&1)NPz1)DVP)zjOfd8)3z FJ^+V~jGh1h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/97b359b43db5cb65daf7b01dff560e6078f70794 b/fuzz/corpora/asn1/97b359b43db5cb65daf7b01dff560e6078f70794 new file mode 100644 index 0000000000000000000000000000000000000000..be8e7ffb0af2c9a2b88018c0a7dca3457a18ea2b GIT binary patch literal 24 fcmXqLU}9usVq#`sVLG7C!a9FxZcZ=@0|Ns9FNFjy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/97c14a945a03ada2ff30882277e688f938b7aecc b/fuzz/corpora/asn1/97c14a945a03ada2ff30882277e688f938b7aecc new file mode 100644 index 0000000000000000000000000000000000000000..9b38656331736aa80f9e851677e35e5b5cfc66f4 GIT binary patch literal 100 zcmXYou?c`M6b0Y^k%)qwV519Y^Rk5tWC^GEie!$spS`U_yld}hzM0dSo=$4bMpLl> nnpYCIjGtZ>2mtOFB$SNiU7W_MrJZsB8H%4W$F0|!fGgJvXyX%c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/97e94b7ece1d23078babcc5aaf23797459bd52da b/fuzz/corpora/asn1/97e94b7ece1d23078babcc5aaf23797459bd52da new file mode 100644 index 0000000000000000000000000000000000000000..acab1874ddf03fcc02285c068f0f53eba842b767 GIT binary patch literal 18 RcmXqLU}9`w;%s1m0{|H(0lxqM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/980b9f512d3c9c7098df03c7ae0b6eba64dcbd72 b/fuzz/corpora/asn1/980b9f512d3c9c7098df03c7ae0b6eba64dcbd72 new file mode 100644 index 0000000000000000000000000000000000000000..41931b46a0c3a1ee9c8e9bef40c3f5f6bfc72a31 GIT binary patch literal 116 ocmXqLU}7{dXfS9nY%pkGW706tX<*|40WN9+9v%i5U^g%T0Iu~2bN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9842a93e311d469f45fcc6aeadd341b8c1896d95 b/fuzz/corpora/asn1/9842a93e311d469f45fcc6aeadd341b8c1896d95 new file mode 100644 index 0000000000000000000000000000000000000000..019bf2fce64596433d02df06e25435da2748a2b2 GIT binary patch literal 4787 zcmeHL!3hE}5S(lzDk2Czyc*8WR3JVr!E%CNo>pQHc3?T)SMHAUrwK?mID@3EH^88UXZea^?vb zwtOXGfB1c(BSf+#0%Ry*d_~!=CRTo|qJqJ0ucq{W7Hz@wtJdOHtHu_`NNpqyqe5G@ v(w|1ZcG|z~v?`G_i4^LPI%vh|*Fh_ek=jTaMqjj%N8982Z=Y;0dOYnEQYg1uGZ;KQsw% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9889734058e0ef3a309319fc4f74c4a13eac32a5 b/fuzz/corpora/asn1/9889734058e0ef3a309319fc4f74c4a13eac32a5 new file mode 100644 index 0000000000000000000000000000000000000000..6c18dd310abfad6c2a4b32634d6008e329f022d5 GIT binary patch literal 87 xcmXqLkY{3?!{Wez4Mczh6~HoDZ64=rnHiZG7zD7XWLVI^#;V=O!k`S11pps5215V< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/98a0d88d12ac1f8dd0df362e3f52be743bdef80a b/fuzz/corpora/asn1/98a0d88d12ac1f8dd0df362e3f52be743bdef80a new file mode 100644 index 0000000000000000000000000000000000000000..f9195d7e7032d97b36837de17207b00d2467cff3 GIT binary patch literal 3244 zcmeH~O-jT-5QVGyFOy+HMrYxG8FVRe^IC9V@B&^SxKgjuMxCuk$hh$q-b1{D3s-I> znM4qb5F!#tYS(l__oH4_e+6g!czwS92-p)F2PfEBf-?djdUQzX88=UYfuKA&;Y3-& z%U-1SZfa~RT$q(j|B??4)a^8CkD)8OEM*aV*(1ZH4-pb=x=Lau+Y$jTDH+1TBu`fw1*jJ^bed3DDee$H7wLa u3w5lBo3l`@0IM?1UOO872J^qLb;Z?hvOxnI^Z$B11_l-e1_mZ|007+y A?*IS* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/98eed1c842b6773a9e1caedd2fd2d7e9bb897926 b/fuzz/corpora/asn1/98eed1c842b6773a9e1caedd2fd2d7e9bb897926 new file mode 100644 index 0000000000000000000000000000000000000000..3daebdab04783e50fcc76d064bd4b5ee8519a03c GIT binary patch literal 6 NcmZ3?!qUjl000I50j&T4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/997bf97896f1648b29ce03f86a1bbfac2d78e2c6 b/fuzz/corpora/asn1/997bf97896f1648b29ce03f86a1bbfac2d78e2c6 new file mode 100644 index 0000000000000000000000000000000000000000..0282c85f63eceedb2e61ba48d545af136a3ac9ae GIT binary patch literal 1151 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>W$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMzN^SoB##C9|DObdK85j)=4Gawp42%s7qYT^)T-lgIWn~!| zeOasxEEk&JFf|l0U|?uq02{-^{MX#v49;OPFtcDVKyb~?&5^i&5nPCFHl|Px?FNW? z1_ov=urLDy10w_*G#GS%xS=en3=M3|1`P&H1`TYC+FNfsIpJg_)U&gOQP&fq{Vm06hV9q)-`J(jZRxBW`hN?vD8t@D6Ze@{kN>fD-8z5q z&ei={Q@W3`Sh8&A1Ib7$d8=*F3pn>v!e=UOpJ`oRtzjzpHl8T zHn)3v#bo-%_IJDNRyO4d>uioLV=0?!!|>zvdxO1u*X>{OXveBmIgOSnQ=&QdFHuQ4 HbUOn8lKPee literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9a0c616693260f53f2f4cf9320e29fd049fb7a0a b/fuzz/corpora/asn1/9a0c616693260f53f2f4cf9320e29fd049fb7a0a new file mode 100644 index 0000000000000000000000000000000000000000..d3f17607749fea684ad1958b1a528c01a9383910 GIT binary patch literal 180 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1Gct%b xG8%$Z8Z@vmhsw&Za2Yf-gCtilbTU8zNPlRS2-6z_1_oxZM&gZOAYcre0RUCM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-0XBB6 vHji_*OpI)->Dr7ejLd=z3=9m+AOaZ}G_bL>8Z?2V7#SECKqixDF5E}}0@@dT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9a408c3b78ae933f2c5247abc1bbb03d889baef4 b/fuzz/corpora/asn1/9a408c3b78ae933f2c5247abc1bbb03d889baef4 new file mode 100644 index 0000000000000000000000000000000000000000..11c519a3b43e03df7b1c3d9bce5d760832705bd1 GIT binary patch literal 184 fcmXqLFkoh5)WSu?;gZ0q1HS}C<}pA3BghT_zMT%h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9b10a5b0919f2d4ba82e3c3c356ad583d88846c7 b/fuzz/corpora/asn1/9b10a5b0919f2d4ba82e3c3c356ad583d88846c7 new file mode 100644 index 0000000000000000000000000000000000000000..a861780e19c101c98f362961eb86aa29633c49fb GIT binary patch literal 41 ncmXqLFc4s4*J|@PXUoLM#+t6p$im1h$iU111p;82k%0jKd~XBK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9b11e90a2625175c66844440a419fcfd74b2b508 b/fuzz/corpora/asn1/9b11e90a2625175c66844440a419fcfd74b2b508 new file mode 100644 index 0000000000000000000000000000000000000000..923807ffdc7f3429f4bad53d2fe26674d3fb63f4 GIT binary patch literal 78 ucmXqLFc4;A*J|@PXUoLM#sOw9Gq5uoF|aY<05K480|R9FKMd*&47&h+W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4@VT<<4VcyQf!7rf+P2x65uca7P1o zH02_fJR_%AU}Rtrz+Nnjmbs(F!eA~I@TFY0(bfX_tp#gndttO#pg~h?G;l}Tx&QwU z)lLMyGIz9xMnRbi1*1JQT9mmUFq(2l#}*J^C=J|P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9b86d55a288b0122f5a0b4a701e1a2129e5d38d6 b/fuzz/corpora/asn1/9b86d55a288b0122f5a0b4a701e1a2129e5d38d6 new file mode 100644 index 0000000000000000000000000000000000000000..3233e3ad096513053a2b67496ac048ad02910d8a GIT binary patch literal 27 fcmXqLFlaDrFlb<7l$YW7_WykS&wmP!8NdJlh-wK* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9b8ca8c37ac22b8c23218129875f8cf3c087e169 b/fuzz/corpora/asn1/9b8ca8c37ac22b8c23218129875f8cf3c087e169 new file mode 100644 index 0000000000000000000000000000000000000000..22d739090dd3a2f838aa35001b13f8cbfa42f2ae GIT binary patch literal 7 OcmZQ$)ox^APyqk~S^(ex literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9b99593353a610c4bee0d6a94a01a3296080c0fb b/fuzz/corpora/asn1/9b99593353a610c4bee0d6a94a01a3296080c0fb new file mode 100644 index 0000000000000000000000000000000000000000..5407bf3ddf8b5ca61b411342fe54921a2bbb0ec2 GIT binary patch literal 2 JcmZQ#0000600RI3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9b99d75e8e3fc2e040d367054905c6788fd1443b b/fuzz/corpora/asn1/9b99d75e8e3fc2e040d367054905c6788fd1443b new file mode 100644 index 0000000000000000000000000000000000000000..6a8bee727cfcc8930d05240801e39bc349e08134 GIT binary patch literal 25 gcmXqLU}9usVq$*E!gN5Ig*jAKgoW`x1A_q@05{_VNdN!< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9bb04c53cf011b3521274628a4f81f2421e6af88 b/fuzz/corpora/asn1/9bb04c53cf011b3521274628a4f81f2421e6af88 new file mode 100644 index 0000000000000000000000000000000000000000..4fab90fddfc2b2ea8e32828409a0489b4e0f3daf GIT binary patch literal 68 zcmV-K0K5M%fFFPY0RaL61LXt)z%K+NpA+2VpQV}QPe!{t5}vnlu75HUop4+Vv$=2( az6S}VZF$oK0e=7h00cTJhDbdE0RR9ZX%*@K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9bbb9a121a70a0bbbab4dd38cc2573e15cb36918 b/fuzz/corpora/asn1/9bbb9a121a70a0bbbab4dd38cc2573e15cb36918 new file mode 100644 index 0000000000000000000000000000000000000000..6d9430c16c595eab5f7d71abcf3e2050ff5c1283 GIT binary patch literal 1864 ycmXqLFlb<7WMpJyP+?$TKxbnW#HDyt95Vn%!(=o}M$^D(8W>Fj!#53py#@de5r@bC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9bdc12b18785d6062f7ce294a68a84d517c44e8a b/fuzz/corpora/asn1/9bdc12b18785d6062f7ce294a68a84d517c44e8a new file mode 100644 index 0000000000000000000000000000000000000000..eff71c0d8407810a44bb9608d172a6d062a17f91 GIT binary patch literal 238 zcmcJHF%Csg6h!A<@`OYu(Xau(8N09no3M&eunzX8R}%80)S1)HITRJrX71)ax5O7w zZfZdVCxKPG3HE~l;E2+A-KY@tbromSXv<^=o?UW36uuFNZtLH84fx}K6e#Tk!%r;^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9be617f4f9fc4ea855e23e47a23383b198173218 b/fuzz/corpora/asn1/9be617f4f9fc4ea855e23e47a23383b198173218 new file mode 100644 index 0000000000000000000000000000000000000000..01fce4360baf57242f93e6d27ba9c048e835c8a2 GIT binary patch literal 196 ZcmXqLU}9-tU|aBL1_08$7I6Ro literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9c1a7d489aae9be9797a8b7c2ff4ed24a621de35 b/fuzz/corpora/asn1/9c1a7d489aae9be9797a8b7c2ff4ed24a621de35 new file mode 100644 index 0000000000000000000000000000000000000000..69d392e7b9ab1835f56ba468bb0d733bdc64df84 GIT binary patch literal 2152 zcmZ`(Yfuwc6wYpzfO#Mij66g_7^(!^-0)CTu*Da~S4Syof!bL%OR^=|4PgUBrPUo? zI#hfzI<*B+TMLyciVskfs(sLwab&PKTD87_7DQW7aTGe6NL-lq-~GP(-FwdY&bCigK1&Gt3~Oph3- zmb?fkkaW@W>yj@wo+ump&w&=-EucvCs3BAt<_mQY9V&SVn-p{F+8#)yQ; zh)516Cu!wi90$a5aUx9{OoUQL;o49T!jVGxL>I{rR*GPh2{y(^TS>;QOpFARCdjnY zv|26D#zap8Gg2nVw9`Q(h}6bJX#q$98UGo|Ln@w&naB*y(DpjKfN4h9Zn*j@{_*Ft~0wD{H6#y0z!z=^|n&Wq?I=DT3+_Pph#IzK_;4QP;gv3^O| z)3b4NYV(D0dk?*wk-Bf4IxeaB+BdZYEvO@RmFTef*W8WMCZE^qso4v&qv z%l20pa6H3fo+Z70#U{_`cOK+>7=yBE26i17>fE6!+dOwo+k*;QbVQIc=4#8r;wpRL z;Lh6On&ZC+d-dD>OtPwhFztm~E7kX~xHP{)OaJWhiZ3hTE;Wl{n_7=gvXv$beS7Z5 zyFW)%-`!PmXtLK5$s%{zO*brbFe|Q&-h8~T@2w}_t#95J@}aKqd0J;(Q8Fxq1kipK zX#gy80tAYL$$_B=XS_$a2y%0C7ecNT3|L_iCm4sY!hFCA?d%AzS(zHeD7}>?^_=yr zLXBb;3qcu3ir}?`^;V;}iMHwaoMO0XQ!xrN*%=bgcHAKu=20Bu0~71{W`{;eY9#*1 zG7{S|*|9vm8O5xl3ELzznPKIKAhDA7SHWOCd@kQ8i!)y+zCuoQ5Twk*pj3IFpr?|el z5N&3~YSfU!XdOc5I?}QBQKM#pv6A=*wN#DTthkY+92zeUnMQTqPTLq;Ix&@^ahlE~ zomt7$!@T35!UYMv4aXRgc3vn^qjrWg8yq5k*Yh)x1jS_Y<49b4w3!Xi6FG#5wh-3W zFP3#lDHh=_V?_pOF7#v)Qi-fRq~uatIni zU?2cN911~vfntNtqTfY|fHO~x^*Q|;Pc)|cH>7OTfM8CbMErp-kc!0NA_#%5+F>^c zc!)%XjZz4P0pKJ-NEnz5LMuZmgIy{9Pdz67e3v-pJ0!pkuerTKUq5T>g|qV~9qE>* zPFYppQyNV*MjC>n=q+Jbk!zuqnK5-GwX7 zX|*kVou>x;cO5wViDA~2Ok+pcZ^2dZ?|5k1iw||_ZcIx3pgS>ZPORqg6WyQljqIMl zD|dR9XY|}WIyZ`WtUM+>wXrXtdVjg7=M1z$HHBQey?5D^_=o$qt!x)uRCV@z+O)c) zZ1Jmxo~>auwfBxB#gc!^qT0)m-i!6c%L3kC^StMpXKK?>SWI|TQpD}IYZml0mD6XY tvTKLpSNJBLKeI0KGyM9~yeOfnMzJ_HbCqYSDlybAZ8ttIsSXkd{snYj0NDTl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9c24525635a1f51d427fd6341fcbb56e26077dea b/fuzz/corpora/asn1/9c24525635a1f51d427fd6341fcbb56e26077dea new file mode 100644 index 0000000000000000000000000000000000000000..88daa239b11c0d7b85e2c5097e172fd69957eeb5 GIT binary patch literal 90 wcmXqLU}6$sFlf+eU|?imU;t5N$jW5kk37WI(8gN{{R1P|Nj5||NpHGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZ22r9T@a2i2k SP~!6h7Xw;sJY_Ukzy<(tR$`I> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9ce1913a1c97e9d6922ae8540caa7cce5c7cd6e0 b/fuzz/corpora/asn1/9ce1913a1c97e9d6922ae8540caa7cce5c7cd6e0 new file mode 100644 index 00000000..d7210ca6 --- /dev/null +++ b/fuzz/corpora/asn1/9ce1913a1c97e9d6922ae8540caa7cce5c7cd6e0 @@ -0,0 +1 @@ +1 0102151021541 \ No newline at end of file diff --git a/fuzz/corpora/asn1/9ce32e776a05dd95ee556700837ad3fc49daacda b/fuzz/corpora/asn1/9ce32e776a05dd95ee556700837ad3fc49daacda new file mode 100644 index 0000000000000000000000000000000000000000..775c7afd74d077ee3fe5b21785a27e8e3715fb25 GIT binary patch literal 1036 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU3e>DBkGymxt F0ss)oWoQ5Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9d114916d479b7302c5ca80cfb464e364fbb4c55 b/fuzz/corpora/asn1/9d114916d479b7302c5ca80cfb464e364fbb4c55 new file mode 100644 index 0000000000000000000000000000000000000000..b5ce8ede7a095454f1a90675cee5188a62b9072f GIT binary patch literal 20 QcmXpIT+DCHfDA+!02O2bLjV8( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9d6e3acbef60c6540a48a540e1f2ead53e08714c b/fuzz/corpora/asn1/9d6e3acbef60c6540a48a540e1f2ead53e08714c new file mode 100644 index 00000000..8e94fc08 --- /dev/null +++ b/fuzz/corpora/asn1/9d6e3acbef60c6540a48a540e1f2ead53e08714c @@ -0,0 +1 @@ +0€0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0úþÕ \ No newline at end of file diff --git a/fuzz/corpora/asn1/9d6e49cfa5754764abddaaf6de39b768c8b52d69 b/fuzz/corpora/asn1/9d6e49cfa5754764abddaaf6de39b768c8b52d69 new file mode 100644 index 0000000000000000000000000000000000000000..30aa1b75e574d4bec8e7dc930afa056d534e6c90 GIT binary patch literal 19 acmXqL5ac!BW@F^!Vf(wVp|^p7fdK#~c?4Gg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9daced8012d54a56a3776b4f9f27d6596e5e31ec b/fuzz/corpora/asn1/9daced8012d54a56a3776b4f9f27d6596e5e31ec new file mode 100644 index 0000000000000000000000000000000000000000..97a6aae681801e701ecc54faf8a34578d6bdb562 GIT binary patch literal 28 jcmXqLU}H2`&>+rlU}9imU}R)qV4!PYVPwLDgy%pBLfI9GB7Zy hH-MQ83{?yY3=CR~3|g(sDU1sm*jTk2Sr}MAk^qTh4DkQ} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9e162dd820f136020a20d59394c49e161bfbcf1f b/fuzz/corpora/asn1/9e162dd820f136020a20d59394c49e161bfbcf1f new file mode 100644 index 0000000000000000000000000000000000000000..cb1423988196e620e1e03449b204d96b00847a42 GIT binary patch literal 396 zcmXqLFlb=o)N1o+`_9YA&a|Mxpn-|$f4w1tK?56;fdT`=!Uh8{WMkCkVq{=oFlb~D zXEX$K;WE%@n9|6=uz-Py0i=yNR91wAiwUHdfx(>L*}9}SHjNUtntSis2y09`gYZ2$lO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9e1d3b6da2ef9e59288864f86fa3477d8ef4111d b/fuzz/corpora/asn1/9e1d3b6da2ef9e59288864f86fa3477d8ef4111d new file mode 100644 index 0000000000000000000000000000000000000000..8ac848237a5db6b5563dfb90c0b4ff899e4a39b3 GIT binary patch literal 393 zcmb`CF$w}P5Jmq?)`-}oTw5#IG#@JwY-Ni*h{uS6>Gvkyz#DiSJC!86*jNbqr}#54 z!~4Tv=S^(meIYX^dPQI^Rg%G~Hvqv<%eEHgeotqoO>A#F6+7|A3QMzw0l>hrgA2e7 xfXA~4gSzC0VPLS;nI`~7%Jr|<6p*VC_EzUcY@bs82m6iEUjTeDWq$J$9xsU?G#dZ_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9e382218af929ab3d6562e371254895f9f270b9a b/fuzz/corpora/asn1/9e382218af929ab3d6562e371254895f9f270b9a new file mode 100644 index 0000000000000000000000000000000000000000..9c6a7469838242023288f70c0d1c0bd8791989b2 GIT binary patch literal 8 PcmXS7V`DU6V`KmT1it{c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9e5599a1f97027da2db16aa861eb154891fe3a8f b/fuzz/corpora/asn1/9e5599a1f97027da2db16aa861eb154891fe3a8f new file mode 100644 index 00000000..73aff3c2 --- /dev/null +++ b/fuzz/corpora/asn1/9e5599a1f97027da2db16aa861eb154891fe3a8f @@ -0,0 +1 @@ +:ó: \ No newline at end of file diff --git a/fuzz/corpora/asn1/9e6e67874284718a198986fb82e6d705e0c929a0 b/fuzz/corpora/asn1/9e6e67874284718a198986fb82e6d705e0c929a0 new file mode 100644 index 0000000000000000000000000000000000000000..9b9300e4c4e972179602925a6d6ff9ee22617aaf GIT binary patch literal 137 fcmXqLFkoh5)WSu?;gZ0q1HS~Cc?=8;j8Gi_L+=Yi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9e9a14322f46cd8d416c38535d4e786055539195 b/fuzz/corpora/asn1/9e9a14322f46cd8d416c38535d4e786055539195 new file mode 100644 index 0000000000000000000000000000000000000000..920e2e12a9770514e33988eb5b54f75f71f730fa GIT binary patch literal 63 zcmXqLkY{3?!=lB&!0`VM0~TP-z`#(&pb*NT#mJ!5%B;e;pn;85yOD)K45SzU3zG-E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9e9e204e31145e94f84fab7eafc655df857ab5f3 b/fuzz/corpora/asn1/9e9e204e31145e94f84fab7eafc655df857ab5f3 new file mode 100644 index 0000000000000000000000000000000000000000..142e551edb863c06937a9fd06070d663732510df GIT binary patch literal 18 ZcmXqL5aco7Vq-GkkzrwB&}3j>000#_0hs^* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9ea2f008914511ce5b36e0851927e6c950694ebb b/fuzz/corpora/asn1/9ea2f008914511ce5b36e0851927e6c950694ebb new file mode 100644 index 0000000000000000000000000000000000000000..9949d74269f562ee4c06de85afac9bfef9b0e4ec GIT binary patch literal 16 XcmXqLU}9uYZeU_!Sj@n{z>o(36`TTW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9ece9d154d92f21527dad6edf284cd8004e587d4 b/fuzz/corpora/asn1/9ece9d154d92f21527dad6edf284cd8004e587d4 new file mode 100644 index 0000000000000000000000000000000000000000..d30b3b4d269110d760738db4de275b2157d87bc2 GIT binary patch literal 6 NcmXqD5ny0o0004c07U=* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9edbed0bb7eac3dd4975c8b375d9c94a9e7c108f b/fuzz/corpora/asn1/9edbed0bb7eac3dd4975c8b375d9c94a9e7c108f new file mode 100644 index 0000000000000000000000000000000000000000..eb34c84f701871b46c7b66415881f2da9f016714 GIT binary patch literal 171 XcmXqLFyLY)3mhU#7ny*8fq?-4l%E5W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9f015c6b63b2e71943d2ec961c3593595efc8a55 b/fuzz/corpora/asn1/9f015c6b63b2e71943d2ec961c3593595efc8a55 new file mode 100644 index 0000000000000000000000000000000000000000..91d3c6620cc2bcea409597702a685785c5d284fc GIT binary patch literal 7853 zcmeHMK?=e!5Zt6vQSc`8q94%9+LYQpK=1>ez59r=z4RUR=Hq(zq?H6kvG$-M6rAMR z-EP9{%p_s)2eV>b97n3JOJUJU7R2IfW}>~Yo4%TpA|lQyP;5VA@x9G-(i?KI&FcDa z%IG$1@M<^K6%%YAe^fs~Sy&fO2(un8K$?FHl%)aM@*!1UMkf4O{wTeyFOd~6-I z&JygKgbCOHHh|4*lhWcb&@yNlvprrnfERO71NX4qrLJ-SywNnXFV3;0r;;@A;B yb1;)4jU#95cQt*KxiW?3PY?-4MD4M)N&j#*X|4R4+Xu2=a(l7KJ`#~_QM>?T0-2cr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9f3e80dbaea3f9789e2aa92f3460de5cd6d2b852 b/fuzz/corpora/asn1/9f3e80dbaea3f9789e2aa92f3460de5cd6d2b852 new file mode 100644 index 0000000000000000000000000000000000000000..281a07724b8017e636bdc5eda68b3759ead7f3da GIT binary patch literal 426 zcmbV|F$%&!5Jms&#*HFMK!j9+q!2dE#KJXOL?lorT;Fb;ps?@;qY b{=&=~n7TL2t*@DuvEahl@Gd&_y5r&l>j_DO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9f7bb3a1837cf33955e2789306c87c00b808d457 b/fuzz/corpora/asn1/9f7bb3a1837cf33955e2789306c87c00b808d457 new file mode 100644 index 0000000000000000000000000000000000000000..4e89121d6c067193f8fc1fd9f2adea72c98d4129 GIT binary patch literal 4838 zcmeHLK~4iP3>;@yDNBVE!I2Z95)!?HU+@Ng!ik*v5cmWa)JOHuBh}K4w~0*UttzxM z?a`XJ_IT`M?Sq{@E}j?bD{35>C4vvekb4Rr!O*=AmYk`+-w3Dyw8n?lcr6)4q{~jq zpd-6G{6F)PUrF*^_8sc|#t?i}6a2(h0B%wD6geAl%-Vo7MMCo6R3OEnB*$%mb-q;r zh#=9Jhgt;rO!aKH!E^+vSQJ5`k@=4zV8cF9h^|DV%AE?Na$kge&b^ylOgd$#~cR%^U;%g(lU@7~*6Y#11H8rZP%8=96d@cw0IhcN!Y6!Nn*G&M0Y GKmh=f(-`Fd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/9fd49fc3b774fda940c3debeace4ddaf33e850a3 b/fuzz/corpora/asn1/9fd49fc3b774fda940c3debeace4ddaf33e850a3 new file mode 100644 index 0000000000000000000000000000000000000000..5f8221eb667fb067daa0e8abb1053040eadc63ca GIT binary patch literal 172 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV0~3?z-U0>&Ccy@#6b6tA1`w$K&uFj! zq?$QYR+%N$pkYD7!Uh9YF-8>|1_M?$Mio9VWi1D$v^5}tP&plt2_j%~7&saJzk{%l KfhaNu9RL813l^{d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a04accaf67b08cae4880d7d3ac90660eccd59b74 b/fuzz/corpora/asn1/a04accaf67b08cae4880d7d3ac90660eccd59b74 new file mode 100644 index 0000000000000000000000000000000000000000..ccb2d9a3de45cb138807742daa44ae7a67144744 GIT binary patch literal 251 zcmXqLU}8)*Y%pkGVti)MV9+4QV8|fIfFMzMAQ^-lgoUXBB!XQOUEC0=4kiwxA-a)m WLzRKaBWwY&5Ih(gM#E%LQ~&^gUlF$e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a057a74b5f6d468c77da0f95f321e945ad8c28cd b/fuzz/corpora/asn1/a057a74b5f6d468c77da0f95f321e945ad8c28cd new file mode 100644 index 0000000000000000000000000000000000000000..8545e816d8cae1e759141bb6a10d7a4828d5ac91 GIT binary patch literal 8704 zcmeI1F$w}P5Je|hiHHbxR$_0JV|anRPbyo_ptrE{LiV<@k-yazCO^Tf%(Dp#36np6 zW&--)*2nYd{Mwk+*4T#xA8dCC@{n*1KK`7Mn}~SX$?(CN&tmDie!pJ`@WI*M2mACQ zof$TKv%AnSVD3R2>Ij;a6Yx_p+c8EHIcY}@zUBepuO@N=hjZrm5Z>a&EEEkO?xMY`pfOZT zh&e7mo<%|4?#Uq1rt0Jo`qCNrSx!K~0Mawsjxn_9py>d@7%C>j92X!@Rgkwk22m*| z=`|0CyYNp(Km<`q(6q@4h} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a077a98b8115cd701582cda9daa417005959920b b/fuzz/corpora/asn1/a077a98b8115cd701582cda9daa417005959920b new file mode 100644 index 0000000000000000000000000000000000000000..36d17cee93d725ac97e1552d693c3a235befda05 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4dV1SD-G8hE2$e>Es|3l*c zW0Bdy%GJulvU&AaN29O+mkrym@4vB2o!in`IrRS)W>JQ{g(mJZuO9z%$93!c#XDE` zXHDro%3{f~osVa4_LlwiM#2+zdNCio9Ck=h$;7DPnqZ8q;$HLQj;-I7fBPuie|FZn zbU{>#JG;x(#+j`QbtV|j6sFqBtDVuA<@ZqB-|3QAs*9B?AC%l%Q|` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a09cdd5b762f4aa0a2d707e5ce1f8da89dfe9041 b/fuzz/corpora/asn1/a09cdd5b762f4aa0a2d707e5ce1f8da89dfe9041 new file mode 100644 index 0000000000000000000000000000000000000000..a82d4b7e9a70d9f8d9425146d1221ac58d8aa9ef GIT binary patch literal 19 acmXqL5aco7Vq@arF<`M)Heg_2U;qFZaRKT8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a0bb33577de5a58c628cde37c2c41fdf471d3c29 b/fuzz/corpora/asn1/a0bb33577de5a58c628cde37c2c41fdf471d3c29 new file mode 100644 index 0000000000000000000000000000000000000000..ec7f3c87755afe98885ce9df7d23da2558156b97 GIT binary patch literal 69 zcmXqLFlaDnU}Mx~U@%}1XEay<;WLNIN;5KQvoM}yU;sNpX2ry`1V+u8B SV0vS~z`zU&28K{sh6?~ype>{T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a103b8032003741f1ff10266a27feafa1f1dfcad b/fuzz/corpora/asn1/a103b8032003741f1ff10266a27feafa1f1dfcad new file mode 100644 index 0000000000000000000000000000000000000000..833b4439acb45cc1f7571a1c30b29aa92a953322 GIT binary patch literal 36 lcmXqLU}92ZFlaDnU}IXwz`(%5z`)SJ1Li5RFg;@c0RVKN1>^t# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a12a9c4719487cae087e57d81f14d5a7b7aa4c3c b/fuzz/corpora/asn1/a12a9c4719487cae087e57d81f14d5a7b7aa4c3c new file mode 100644 index 0000000000000000000000000000000000000000..f612ab5400562b5ef8a4c5e5bb220f4c192f0636 GIT binary patch literal 64 zcmXqLU}CCgFlaDnU}IXwz`(%5+vai3g84sV+yh3@y$lQtOpFE#K(frCvdS!61`SP( NOpOc-42%pA008Q94Iuyk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a1311db501de3b1e09e9f2374cb8981684ea18ae b/fuzz/corpora/asn1/a1311db501de3b1e09e9f2374cb8981684ea18ae new file mode 100644 index 0000000000000000000000000000000000000000..47530aaa3ca96ca1ddaf83014048e3ffa26e938d GIT binary patch literal 8 PcmXqD`^6%~AjJRx2tEO6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a14da698592d363d287c59ef23cfff064b57502d b/fuzz/corpora/asn1/a14da698592d363d287c59ef23cfff064b57502d new file mode 100644 index 00000000..aae244b9 --- /dev/null +++ b/fuzz/corpora/asn1/a14da698592d363d287c59ef23cfff064b57502d @@ -0,0 +1 @@ +0Wg \ No newline at end of file diff --git a/fuzz/corpora/asn1/a14f5a282f2f196d133262580a609c45a583f8cb b/fuzz/corpora/asn1/a14f5a282f2f196d133262580a609c45a583f8cb new file mode 100644 index 0000000000000000000000000000000000000000..4a6108d40991072199688a2efdf0be361de3b1c9 GIT binary patch literal 172 zcmXqLU}CbDHfS(tU}IXwz`(%5+vagjp6fqj@&iWEg$xV~Oo9zepZ@HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENNtFWDo$$g8@i$XqE`m8v_OgX0R@Z`bK<)ECdh1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}>l5roR=Fc|2tF>3Ls|JdKq Yu;I_9#s%6qK{L0gAp;n&LnsCY0RI&tH2?qr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a1969fad9472211e36c1ac71a23197d3f3ea6c30 b/fuzz/corpora/asn1/a1969fad9472211e36c1ac71a23197d3f3ea6c30 new file mode 100644 index 0000000000000000000000000000000000000000..8f068a2a2b0d84a5fd95e9e175fb0c8db6db1946 GIT binary patch literal 84 zcmXqLU}BuZ;=sVd00KF33=9mmj4c2EGcYi>YG*JoXf>uVf~DY~0m`akPzdGFVr0-_ TU`%0L(7?v3-N?cq50V4`@E{7g literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a19f3d91f2a5b08adad610dd8288c7e5ec90f9e7 b/fuzz/corpora/asn1/a19f3d91f2a5b08adad610dd8288c7e5ec90f9e7 new file mode 100644 index 0000000000000000000000000000000000000000..2c16f21e5dcb5a18aa1337c056c80567fc5c4afb GIT binary patch literal 254 mcmXqLSjd16E=8AR!KZp5RQ+spT}1OS?8B>5mqhjGrU3x#O;3pc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a1a31fa01dcc0518e5b710d46f72f7b74e159a73 b/fuzz/corpora/asn1/a1a31fa01dcc0518e5b710d46f72f7b74e159a73 new file mode 100644 index 0000000000000000000000000000000000000000..6352bbaa0b7c5d9fad3ecd4c575d2a6c154008bb GIT binary patch literal 10800 zcmeHN!AiqG5S`tGs1>o&OOE16D(HAnL=bwC9t3}*SN|Xg_KUoW2d{pLSHVkVcGEOX zlXM$*Hm2+=G@Bgqn9aG$|xuP@{qB&dE;B4QHBvj6}AlUUrw0`(XN z(avx>{=AbS+Es%9dcie>2nd7=NcuDu>K^sO4EHp8puY*gFzCDljJV)hF?#fD`%*JqCEobUEMU|^$WUC&VGn(2+$f9Fj=Q@oJpF0}njzQhJ zqq*m}SMrS+r8X~T<7hKo?M`&$Y~;!v?$%Z*su`b{Y$SMm&a&0} zYIHoNkGN_8?Jhn#vQ8Q29ulz#8yKcG((;w7dL($2v#xU1sz>+v(U{Sh zlIt+&wyqk_sx{APROk492h+I@g?YAWx8LD@rQtB!x#VOgB!T#oX5_4EsM7}?JN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a1ad0f86a27cd23e4d833772b0df48e26cf00075 b/fuzz/corpora/asn1/a1ad0f86a27cd23e4d833772b0df48e26cf00075 new file mode 100644 index 0000000000000000000000000000000000000000..46ab66c8bdeb7c6b4571139ebb76d1474c4575fa GIT binary patch literal 2404 zcmdUwF>V4e6hy~%}A8{FRA7hE-S>4!Q2=wv% z1mLciWuj9OG0CF>I#=`P2ZnEjt$#}L7@g!co65Q_@tEf(M_&Hzs4wMCcr3qq XKpWHg7<)UcZXo5n$^DC5L(2UE)5;pR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a1b39a9925312e0a9eae02b49e8651049e2e75b3 b/fuzz/corpora/asn1/a1b39a9925312e0a9eae02b49e8651049e2e75b3 new file mode 100644 index 0000000000000000000000000000000000000000..dbb23d5e893cf14c50f662bf71e6e72d580e09eb GIT binary patch literal 300 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_v1oYBMkxG%|=Y8h{iT zG_Wy;$||#P88j?xWNBnzVqj!|0+80wED@$R1`G_$AW^6Z*bICTTDb9ieH^vSqN_PZh9>4F7RCk)M1Uut&HEpQ8MQI+;p)8Esg1+;pwSC1W4O|-cKJMcpdUD>HrtoP9G8g literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a24e6cdcdc67c317f9ce567a0bf3d7040066af48 b/fuzz/corpora/asn1/a24e6cdcdc67c317f9ce567a0bf3d7040066af48 new file mode 100644 index 00000000..26dd6b16 --- /dev/null +++ b/fuzz/corpora/asn1/a24e6cdcdc67c317f9ce567a0bf3d7040066af48 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1/a263c6ebaaa07ebb374e021c6e64795c6a8d2021 b/fuzz/corpora/asn1/a263c6ebaaa07ebb374e021c6e64795c6a8d2021 new file mode 100644 index 0000000000000000000000000000000000000000..6c339c8704f388c41aad81af1bd5a69233499cd5 GIT binary patch literal 7 OcmXqLU}7{-VgLXIIROR$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a27fe454e6dd7a67f42f40e157cd0055ac80ed7b b/fuzz/corpora/asn1/a27fe454e6dd7a67f42f40e157cd0055ac80ed7b new file mode 100644 index 0000000000000000000000000000000000000000..418a76c2f2cc69822b934779a2de30789bcb6dfb GIT binary patch literal 235 zcmd6fu?c`c5Cr$`-G3=N#YL%49kEjX1ky#l9lt(Wi`PE(SOV`!_B2uj#MKlDlR-b)-p-ydKI zrvM#v01zK8={8Q?IL%Y{G znT3f{NCb6yWxy;8LK!Eh6aSAilq1eAQq;XmV;yO{FjY+&4K>3|`W2&R;5KgJX+`$N z9k}cL0$BN}0xLcQl8!2W6|Me4l-%O=n6fq{y%q?$Br$T=5?czcvYMWt+#+qb4x}(| zICj;dLv+|%duc>{aPMjI9+Zq#5|sUC*3d6BF{WXydWriW#i+;?4^vZ^p6r3%;O0e( z>39yOD`KW8b)W@X^j5W{Rn^M22LlmXulU14mx6jX7Uz I;`orS2ayq{iU0rr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a2fc05d17bab051245a8ae57103317d586056891 b/fuzz/corpora/asn1/a2fc05d17bab051245a8ae57103317d586056891 new file mode 100644 index 0000000000000000000000000000000000000000..365730d6183322ccf9ae473fed38d8311633b292 GIT binary patch literal 2452 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOg<(O1qG7{AK_*6q1xyVL25fAM3`~p+1`MM@ pqaiUg(*)OO@*T~{qvh9V`87n#uhHsv7?)p+1`G=s1eu_XEdUMNDy0Ab literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a32bcc9fb3feaaf6f267c36771048ee380416d37 b/fuzz/corpora/asn1/a32bcc9fb3feaaf6f267c36771048ee380416d37 new file mode 100644 index 0000000000000000000000000000000000000000..5e94659f751ff62c2eb5b82213060e731fbb40ff GIT binary patch literal 46 ccmXqLU}H2~&|uIY#vs7}!D46-Bn|;`0FK!NCjbBd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a32c9b2ac23848db5a054568cda217254fcf3cf3 b/fuzz/corpora/asn1/a32c9b2ac23848db5a054568cda217254fcf3cf3 new file mode 100644 index 0000000000000000000000000000000000000000..0b5132e5b4a034dfe483b8da4fc53829a87ed1c6 GIT binary patch literal 147 zcmYL>F$w}P6b0x11c}9GtH2_HN(3R>>}9-xwY69!h@B^}$`w6<5?HW%^9E)vyQ1>( zH`+Kan>KDWGKi(BmZ}}9+81D|K0n<>0F9~|`w57_3C>~RJA24NPLLm)*ZV3m1n}Me QWly!TT2DvkG)S)iKg|>qi~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a33cc48c38a7737827aabb790844617b2521217e b/fuzz/corpora/asn1/a33cc48c38a7737827aabb790844617b2521217e new file mode 100644 index 0000000000000000000000000000000000000000..e511b43c417e2ce181ca82f06c895d5ab9a9b1d1 GIT binary patch literal 7 OcmY#rFlZ8Bcmn_j`vOk@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a3433f35a5bd1a76fd464245b8f2179d8e9d8cb9 b/fuzz/corpora/asn1/a3433f35a5bd1a76fd464245b8f2179d8e9d8cb9 new file mode 100644 index 0000000000000000000000000000000000000000..a4b058a35c93a3e2cdaf498e3159b0c51a994cdc GIT binary patch literal 4864 zcmeI0L2d#u3`OlwO&KbrxdV$z?IyhiS7Jq0a}h4lO~s*DbXhd*gv#baoiqYzlqJ@; z6TkV+F!7;zdg<5w=aSow-JXIE&T;n^cERz=hlV>h``R+m0}&0u=fvPWGU1j@8!?GY z|Kfk!y8)9)MdWNlqvDV?j;{q zstQq^Q~!WCu_=VsNIBgLqSdAJZ_|805e(|`)f90`F1bPyg4U@=a~8z%r;5q)P-G9D zdi}Nndh}AE-%Hp+T2*}(Ej5ymV;G~?RTW}6h~Zw`*2No2~D27=b8e*uOs-k+~p z4Ibi~m?@Hamw?cF0NN4;Wvvt&=9kM~Q)fzRBta~1pnM=O69zSae32>hFTM*V+VgOI a6)&go?G%v@P5Vkr^yq(+`uENJ!0izS^&WNr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a34b23143e9939051060a5bce4b1bc25a65daa9c b/fuzz/corpora/asn1/a34b23143e9939051060a5bce4b1bc25a65daa9c new file mode 100644 index 0000000000000000000000000000000000000000..e2175bcb9a3b8e5837b85e3099ba0c665abf24fc GIT binary patch literal 42 ecmXqLU}Iu4SkPe5(8$2j$iM<7P?!+#njHYL{0CS7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a35135f936773bb766efb3b8808ee90fefc7aa12 b/fuzz/corpora/asn1/a35135f936773bb766efb3b8808ee90fefc7aa12 new file mode 100644 index 00000000..bc8f3859 --- /dev/null +++ b/fuzz/corpora/asn1/a35135f936773bb766efb3b8808ee90fefc7aa12 @@ -0,0 +1 @@ +&€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/a3513dc58c4109492b01c6f91364354aebfcdfdf b/fuzz/corpora/asn1/a3513dc58c4109492b01c6f91364354aebfcdfdf new file mode 100644 index 0000000000000000000000000000000000000000..1d534c9bf071531ce716d8635e930c8da66617c8 GIT binary patch literal 228 zcmXqLywAkQXrRHyuGQvo&X$ppNtWS18el*GMuT7$88qpCNc?{+GFw==T6tJDum0+2 z6c*sJVf*#{H+HFWTRJO;{@=nZ%CNUk!+qw}Z39}Udx(s(# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a351efe7912a239d90328b23887a1227bba53ae1 b/fuzz/corpora/asn1/a351efe7912a239d90328b23887a1227bba53ae1 new file mode 100644 index 0000000000000000000000000000000000000000..48abff45efcaf5384d04c72a4dbf665109a2c995 GIT binary patch literal 4 LcmZ3=WWxXe0~P?} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a351f0e1eb96cdcb9ed4bab2b4e8a464d9d323f1 b/fuzz/corpora/asn1/a351f0e1eb96cdcb9ed4bab2b4e8a464d9d323f1 new file mode 100644 index 0000000000000000000000000000000000000000..2ef218acecc1ae40e1030044e6b4e4032ca8e008 GIT binary patch literal 1616 zcmeH`!Ae3w6o&sfXPQC^iim`)+^UkCI?bn8 q%9mkVzE&c;{gZwGTZt@C1X)M)a$ibe-e^C+YF8v~fXTo9hCTrM6OPUR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a353e67df12fe9c1acdc62d8183b39912f45b81a b/fuzz/corpora/asn1/a353e67df12fe9c1acdc62d8183b39912f45b81a new file mode 100644 index 0000000000000000000000000000000000000000..5edecf42c2d7b0331bb74054657db0c056e0ab6a GIT binary patch literal 1069 zcmds0yH3ME5S(3`vmJtXMSzqb(PEmhL<3SfihKb13I2d?gB1S(qIJFkL=#FXz66N^ zDKtn%XB&t_iL1;tTg=YR-R;m^lIElQV?!b>jHY54XiiCBW~`2r69@oKurKs9nhVB< zgRn!JNHG<~4}A0Zs;936f~u=Ujenb10f9FDVg;U|jVml+N8ndCBtX!(>!LIty$n@c z?2G45(Lnvwnm6SQmKI#+sM3>WHoH_op$4uw@nRP|;((R`(4PIyd}``N8KR=R-9I+0 zCX>mQ#Ee`3pdW|$qinS8E;~-S*9{l9cO`I+KEm2#02~9Di@EhQf4Gj{C8_;4IN0PV U$;|U>`0%E*D!kt)D-7lA3zopVlmGw# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a3584d095535dd2aafc9e4249ae42d7f89377596 b/fuzz/corpora/asn1/a3584d095535dd2aafc9e4249ae42d7f89377596 new file mode 100644 index 0000000000000000000000000000000000000000..07f4b2667537e7afab2906fd138e1cd4d2ee081e GIT binary patch literal 792 zcmd6jF%Ez*2t|Q3H4a|H>Gu{M>rXw0x9n=##Kt(-Xc%Mz9-j|joY%bNvgl+xK~p9H zqX8nR6#&ALm_m97j5Q4bs9>GDVTyBL0JcqIy|IOi?a%fU{`S7y HE0;I`l$K(# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a358fbff3f6ec04e0e03af43ff5c9c96cf9c7a83 b/fuzz/corpora/asn1/a358fbff3f6ec04e0e03af43ff5c9c96cf9c7a83 new file mode 100644 index 0000000000000000000000000000000000000000..1c8dabb9b83789537d3f59fd5c96951b8ca3db9d GIT binary patch literal 2176 zcmds2!4AS8424c1JDB(vM!j_LC;Tk3!%q7MjUTDEnF7OZFx?VjqMQb!eYEejMWf0? zb8hY%sf&w21G26J8U;s%YgOzd3UM`Pl*GzZ0*X$w2)8X19cs7J3Tp62rv~=85^f97 z`EzbVOVyD2W8H?wl)|k=m>s#degbBtCom=I@m(L2PKA?jO%7tf;5LMU2Fk_hOW^rX zh5?2!Sn3nD$J=!HV$rZ4f%VlJ}?Czy-ko~)@j z6adszXtQc6vk+s<3}U3-!gVmGr(VtPmLYRC~P(_mLVSVG_)_VP_YDp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a3c846324bdd94ebf1ce8faaa2fe64960f49f8c8 b/fuzz/corpora/asn1/a3c846324bdd94ebf1ce8faaa2fe64960f49f8c8 new file mode 100644 index 0000000000000000000000000000000000000000..86137f7802d9eb81c61144498cb26bec782e308f GIT binary patch literal 77 hcmXqLSkhq7Ajoadz{X@?z|6?NzyRTBvysAq005tK2jKt! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a3c90d9fdf6359f836d128811af832a9b8bc45ee b/fuzz/corpora/asn1/a3c90d9fdf6359f836d128811af832a9b8bc45ee new file mode 100644 index 0000000000000000000000000000000000000000..282830f92f9984dd8a4815f531d4f7156c94626c GIT binary patch literal 16 TcmZ43V9;RLU;u^!3=9kaG0X&` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a3ce2fa8996f8622c86fd5c431f10013cfd6463c b/fuzz/corpora/asn1/a3ce2fa8996f8622c86fd5c431f10013cfd6463c new file mode 100644 index 0000000000000000000000000000000000000000..4c0b44d046a8516d89bffec539c0890f5cdf7101 GIT binary patch literal 504 zcmXqLU}Dl(XwbmM6wGD{XM_0KY^E#>Od1XNK;D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a3ed7a243b2f7a064bc3f286ac20b28af7177e50 b/fuzz/corpora/asn1/a3ed7a243b2f7a064bc3f286ac20b28af7177e50 new file mode 100644 index 0000000000000000000000000000000000000000..b1a2a1c575171af1b0b8d5327f908d277ba9d485 GIT binary patch literal 322 zcmXqLFlaDnU}Mx^U}RumFkld8G+h7{(q;h*HLx*<%Icx8xnj9u85pz}7}P;}8rbkC qg($#k0=fE#v>Dm)cwB+UG!$<_fI$NrQ>d&6(;Gtu24;{A3=9DBjwWOP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a40dc42bb49e387c2d22ed27bcb4e9973d24170b b/fuzz/corpora/asn1/a40dc42bb49e387c2d22ed27bcb4e9973d24170b new file mode 100644 index 0000000000000000000000000000000000000000..91bf73324bbdc5f338b8357754bb2f03cee8908f GIT binary patch literal 912 zcmdT?K?=Yi3`-R}?E^b{-X;5CpFT?ICYyrCnNut=F<2@!C6Zc%0QFR(N8Z5!OjU$g z&@#Ypw(~ml2(%85Yk1+#c(a~jHf_c$y190>wBCEyZe+VL{)?Y=+iI-$7wRM5`)Fh* Hf-`=R&y+3y0l0mm2E3IG5A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a42992b2c6865f208a50a443b9cc263fca16bb8d b/fuzz/corpora/asn1/a42992b2c6865f208a50a443b9cc263fca16bb8d new file mode 100644 index 0000000000000000000000000000000000000000..fb634b806ed774419b6f2873d8b620aefde946a3 GIT binary patch literal 51 mcmXqLFc4s4*J|@PXUoLM#;V=O!XU{k&CJXI2OMw~6aWCJhXe!w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a441534047350f7b3e9996a918f985aa079a9068 b/fuzz/corpora/asn1/a441534047350f7b3e9996a918f985aa079a9068 new file mode 100644 index 0000000000000000000000000000000000000000..c15e560083400670dc27fedebdd8116bb20be749 GIT binary patch literal 1152 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlC#)MHQLl7?>FtSQ(=K|NsC0r0M_vEDQ_`!f;iL3=9ShY%Hw?O$-bS z%!~{mt^qzPni#bV8ehZp8#LZ$Vq`SXfC?}&GRZQ4Y(fSMNWdVNMFuSQ7p~$Tob~_z zKNguStX!=;ESpzBW5Ta@Zk3B@?5DYl1PdihIqIJGOpT{_Uf5|JhmR z(gjiM?kO%;8)vpM)R{2JvLIOx1->u`YcVl0GFvgQWPM7x^VrPp=@pad8{6OQvI7Nf gBMZZ5;Eo0^3=HCwOCS@iU)`TIrTZw01zIKo0LehrtN;K2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a45a9033df3763417d16c5bfef1ab879a87347eb b/fuzz/corpora/asn1/a45a9033df3763417d16c5bfef1ab879a87347eb new file mode 100644 index 0000000000000000000000000000000000000000..c8ae97f42b58e401705dfb86995b5735f7db417f GIT binary patch literal 52 lcmXqLU}92ZFlf+eU}K8>$nk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a4b0d25ab74067454d2ccaac0932dd302da50bee b/fuzz/corpora/asn1/a4b0d25ab74067454d2ccaac0932dd302da50bee new file mode 100644 index 0000000000000000000000000000000000000000..b37fd1fbdb4ab432a53cd33151f7508746f1db07 GIT binary patch literal 86 zcmXqLU}BuZ;-KBg!obeJkR!(cV#)pg|NcK1v@$TKFfyQk1}HBFN^7+;r!X#PU}FX8 Il!gcb0IIDKZ~y=R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a4b2fc8eaf3b7d1598903f86c69b72149bb38983 b/fuzz/corpora/asn1/a4b2fc8eaf3b7d1598903f86c69b72149bb38983 new file mode 100644 index 0000000000000000000000000000000000000000..2f6bdc07230d9f1bb323a3fdaee85ccc2c1521b6 GIT binary patch literal 354 zcmXqLFlb<6GB7b{U}G{eU|=v{Fpv}HH8n6WGBP$WFtRXUU=ZiEFfcVRH8U_ZH>d`y zXkyedXnf7auGQvo&X$SMpz%HvBcp)^RDh9@NtWS18el*GMuT7$88qqt%m{&hECwJ) zF-jURvoV4k)F95dMuHLII0*w`guNV0Yz>SC2N?yJ85vkC*|ziX?9JY?zurhVdZ!oj z!OLNX1eHvT8mG?@-hT*~_@9A+fdK$A$`T&{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a4cd705f18dc51047c8d5de0176f9b97aa027307 b/fuzz/corpora/asn1/a4cd705f18dc51047c8d5de0176f9b97aa027307 new file mode 100644 index 0000000000000000000000000000000000000000..fd24d0141568a69f1a1130c0c400195131f7d9c4 GIT binary patch literal 19 acmXqL5aco7Vq-Gk5o7t!%c;P?zyJUpr~;b+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a4e0f634448df07572fa08dd45ae87c08441f79b b/fuzz/corpora/asn1/a4e0f634448df07572fa08dd45ae87c08441f79b new file mode 100644 index 0000000000000000000000000000000000000000..b253f56710ba806d0f2c791f11068001ebe66cee GIT binary patch literal 35 XcmXqLU}Iu4SkPe5z{G$KA;16tQl$d{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a51b75759fdace4e77f905bec9d2efe2f017385a b/fuzz/corpora/asn1/a51b75759fdace4e77f905bec9d2efe2f017385a new file mode 100644 index 0000000000000000000000000000000000000000..7036b36f65a96b66344b37cd7210d702f36a2c75 GIT binary patch literal 1012 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>W$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMzN^SoB##C9|DObdK85j)=4Gawp42%toq72*(T-lgIWn~!| zeOasxEEk$bm>P;0FfcSQfQ?~d{%dY-2Invtm{~9wG=TU94NS~T=H?{XXGo@fFt;$7 zo0~Hjz`1|HTnr!FK=OeA4j&+yXvScGWG3lWfC2(rAR$>{PE9LJK>-hmhyVZo|A)qd zIRl9yLxi*G5HfVIf~tWJ4sA%_L*n-$I1_*}99RG%$i@`Pp$!*d)&dJNFfcGeut9@C M2Sg#NCRjcL0L?SL^Z)<= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a528b22e79b7968b3baf9553abc8428f73358f70 b/fuzz/corpora/asn1/a528b22e79b7968b3baf9553abc8428f73358f70 new file mode 100644 index 0000000000000000000000000000000000000000..3ae298375bfef546668ef7c29ff329ddd36410e3 GIT binary patch literal 19 acmXqL5ac!BW@F^!VN?0h)UtjH0|Njh$po!OqsOckkZ43=9k?{4HpFba`|>A@%6;=zLPmBcPsGe{Era F0091&V&eb+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a5675d8ff49963faa5d37212d94cb4b4fd26bd84 b/fuzz/corpora/asn1/a5675d8ff49963faa5d37212d94cb4b4fd26bd84 new file mode 100644 index 0000000000000000000000000000000000000000..1eb60b81f0d0ddc5f91b080e764c888769eaa69d GIT binary patch literal 4 LcmZ3`z`zOs1PK8q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a572cc01cbbd2ac46c2c86ab07634dabe33627cb b/fuzz/corpora/asn1/a572cc01cbbd2ac46c2c86ab07634dabe33627cb new file mode 100644 index 0000000000000000000000000000000000000000..59a93452024c6979dcbc1fb649143ea3d19abe1a GIT binary patch literal 1401 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-0XBB6 zHji_*OpI)-+Kns>T+9LtRvZir458e=89*QdOd2$>v9uaAGcYhPGcqtRfDERdu}!1K bwvGk@D1nWpgwa5N6g7i8CBTbQaPbKM3ZKV^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a596f5a44e48c95053d2f40a4bc1cb7d36c7f59e b/fuzz/corpora/asn1/a596f5a44e48c95053d2f40a4bc1cb7d36c7f59e new file mode 100644 index 0000000000000000000000000000000000000000..cd8755d217cdd2fc11957cefee2583d68d3c61a2 GIT binary patch literal 64 zcmXqLU}CCgFlaDnU}IXwz`(%5+vai3g84sV921l1UIqpRrbb4F1t4kWP+4UbE`x@K OMy5sv1_nk3FaQ9~f((-Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a5e1b9f98b2f87b5c3afde0e4087e7be55ccaa87 b/fuzz/corpora/asn1/a5e1b9f98b2f87b5c3afde0e4087e7be55ccaa87 new file mode 100644 index 00000000..2d4a2e53 --- /dev/null +++ b/fuzz/corpora/asn1/a5e1b9f98b2f87b5c3afde0e4087e7be55ccaa87 @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/fuzz/corpora/asn1/a5fd5c4eaf15d4f630b70b85904a67987488fc50 b/fuzz/corpora/asn1/a5fd5c4eaf15d4f630b70b85904a67987488fc50 new file mode 100644 index 0000000000000000000000000000000000000000..2377b6b3270c7dc4f8799e983448c833b225aeba GIT binary patch literal 91 mcmXqrFc4s4*J|@PXUoLM#;V=O!l2CT!obWx8DL~!lm!4sxCA2r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a60bf177afccf9adebd8ba2c9ac2df5dcbb00a36 b/fuzz/corpora/asn1/a60bf177afccf9adebd8ba2c9ac2df5dcbb00a36 new file mode 100644 index 0000000000000000000000000000000000000000..e5854d1256a65e20855751d98cfad3607ea86bdf GIT binary patch literal 143 zcmb7+u?>Jg31<>_gD254L((KA+r1Z%MYGogPbz-~@goHA%PQvGIjfLuk-d7exZ5GCp3=9xK5f(;}La+ifDQTD#qc#fz3;+NHOc9L$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a6cddb3f0da71ba92e6714d3d2630249c0bc5d96 b/fuzz/corpora/asn1/a6cddb3f0da71ba92e6714d3d2630249c0bc5d96 new file mode 100644 index 0000000000000000000000000000000000000000..bceceecd347389cd49978b6d489bc11e959222be GIT binary patch literal 7 OcmZQ$)ox^AU;zLFIsm`` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a717af7f05576cfb9a14f9ed55dfac760ee9e677 b/fuzz/corpora/asn1/a717af7f05576cfb9a14f9ed55dfac760ee9e677 new file mode 100644 index 0000000000000000000000000000000000000000..66e17b7075d66e5f3d341414cd67704f20f270b7 GIT binary patch literal 333 zcmb_YF$%&!5S+b@n}`Sjn^Zm^X$A`m!9Il#@foY&eaj#C9ouks0U?5wv#`tz>tFo`wx9mhaH~-39?&@~C1m`+;wy6TnhEoaDV6{L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a72ebce1a78dc3c2c5088343a2296f15f768b318 b/fuzz/corpora/asn1/a72ebce1a78dc3c2c5088343a2296f15f768b318 new file mode 100644 index 0000000000000000000000000000000000000000..db12a50f84b1a43c3467bcedff4625c6699e4ed6 GIT binary patch literal 137 zcmXqLU}92ZFlaDnU}IXwz`($w%fP@S${@hNz$6HfGBjXdU@%}1Z)7xB08+*r$|CTa p>3%g)x&v~uP9_h|gT>}-4Y?%nHPgC>ry?mZI&1ONbS Cu^#9E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a7fe19db8c4d4412718dbc6d614479afe973000a b/fuzz/corpora/asn1/a7fe19db8c4d4412718dbc6d614479afe973000a new file mode 100644 index 0000000000000000000000000000000000000000..b62033879020032a3213a647085d28d93fcc7779 GIT binary patch literal 80 zcmXqLV3N*aFlaDnU}IXwz`(%5+vWk{F)qXDtt1!?z-%J}0XBB6 bHji_*OpI)-+Kns>ip+8h%nS?+3`-dRNMa1t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a810761bc726a1b67205b7411f1bb0822360eca9 b/fuzz/corpora/asn1/a810761bc726a1b67205b7411f1bb0822360eca9 new file mode 100644 index 0000000000000000000000000000000000000000..3c88fe272bf791f3560a2cb5a07727d22b1c4776 GIT binary patch literal 47 bcmXqLFl;brU}I#EVPRlkP+(xd%>e-bju`|; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a8178e9b734b5aaa85b365d8c580ee63f0864e7d b/fuzz/corpora/asn1/a8178e9b734b5aaa85b365d8c580ee63f0864e7d new file mode 100644 index 0000000000000000000000000000000000000000..1d5c51b77abcf727b8525ab7d61c044e5da595b3 GIT binary patch literal 32 UcmXqPFkoe4G%#eqN-;1106ua9CIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a818cde13875d37c9ffd8ef8cc89eeb39f4fd94c b/fuzz/corpora/asn1/a818cde13875d37c9ffd8ef8cc89eeb39f4fd94c new file mode 100644 index 0000000000000000000000000000000000000000..36fbf4c843bf835abe1d119687d94d1bddfdf445 GIT binary patch literal 100 zcmXqLU}92xXV9R-pwqy{#QcJttpP^wy~Ds@!@z(?2Cni31B1=~{|pQa2vfjfAQ1)z E00;sY%K!iX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a81caee035512b31c5f19ac00b06aeca2b84cf60 b/fuzz/corpora/asn1/a81caee035512b31c5f19ac00b06aeca2b84cf60 new file mode 100644 index 0000000000000000000000000000000000000000..dd59563273ba811297ddf61ab32f2a18a972916e GIT binary patch literal 1180 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gt5W@|Njgc420pT7#SE08rWD`4VoAj7?>Fu qKwJaTtWbbifgK1?!HQ8|j7B#d6Rp5dNwg&73q`!S8++Ep9Si`4lB`Vt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a8229a7c6c8a0952c44d7e33353436f9db7ef971 b/fuzz/corpora/asn1/a8229a7c6c8a0952c44d7e33353436f9db7ef971 new file mode 100644 index 0000000000000000000000000000000000000000..f6ac098e6ef1cd0cbed19a1819d17ec1bc40827e GIT binary patch literal 64 xcmXqLkZ)jOoWr8UfDV`#7#OUff>jI(p&VL_3|g(sDvS#n*jTk2Sr`OCk^sf?20s7* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a843d45b52f07859ccf7284daf5d667877ebcc52 b/fuzz/corpora/asn1/a843d45b52f07859ccf7284daf5d667877ebcc52 new file mode 100644 index 0000000000000000000000000000000000000000..5c04e935e700001b7f3d54e77cfca3bdd16a8e3a GIT binary patch literal 27 icmXqLkZ)jOWKeEkU}Vr{V`O1qU~ph!WMp7qU;qFz@&a)H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a84561620bcf44c532c93834f4077c6ff31ddaec b/fuzz/corpora/asn1/a84561620bcf44c532c93834f4077c6ff31ddaec new file mode 100644 index 0000000000000000000000000000000000000000..0163f9b8f45183dd4f4280b3db86a2cff21c0b55 GIT binary patch literal 56 XcmXqLSkSPbp^bqMYzM0Vkq`g?>Xi<6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a85c2c4dd027f6ee658a96dac823783ecd6cf3c2 b/fuzz/corpora/asn1/a85c2c4dd027f6ee658a96dac823783ecd6cf3c2 new file mode 100644 index 0000000000000000000000000000000000000000..9476a15f0d27d51933e994d086e00cbd63f7a0f7 GIT binary patch literal 21 ccmXqLFlZ3uHQ;7rEs z|3l*cW0Bdy%GJulvU&AaN8_*nmkrym@4c~0o!in`IrRS)W>JQ{g(mJZuO9z%$93!c z#XDE`XHDro%3{f~osVa4_LlwiM#2+zdNCio9Ck=h$;7DPnqZ8q;$HLQj;-I7fBPui ze|FZnbU{>#JG;x(#+j`QbtV|j6sFqBtDVuA<@ZqB-|3QAs*9B?ADx CcAS#{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a92b936345d72f9e1fb72867e28314d9b1e77f41 b/fuzz/corpora/asn1/a92b936345d72f9e1fb72867e28314d9b1e77f41 new file mode 100644 index 0000000000000000000000000000000000000000..c0712dad6f4261c5fe311f490083a950d6c4decd GIT binary patch literal 498 zcmbV|u};G<5Qfio>MDU0s;IOQip0dg^ck@r2BfM(w~8T4w!Vp%<~iE;VPNACSlC&S z9UO!N2ytF~zrQ=_Gv4M`-MV`#)mZO6UMueeZ#9SyF5+X)-De?u4>$ zEWp#Vn^E<_aR@?Pa8DX?aj51zE!~JZn*{2#hkVa-Eb zXQogY3u~HsmQ9OcU=p`GiCPU_zanCkgy7$H6@Rl+`4_v9B)hx#FG=?LQ|Eixn+W_S N`zU=y@F!VUy#vGKSLpx% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a939770c360ddb1f732a049088dd75a5c39bfb40 b/fuzz/corpora/asn1/a939770c360ddb1f732a049088dd75a5c39bfb40 new file mode 100644 index 0000000000000000000000000000000000000000..a194df75080d7e34f94094b8671fb41694c214f7 GIT binary patch literal 172 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5otFp8-tqfhlV}Fr}dZ5ww9&It&InY>bLL>Ob~3 xG;H{@sc}KeoIi6K8X6k@Y*^4Rqw&wY_6BV>Mi#~DSrR} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a946ef4e0fc1c116d421a91fe049c8058436f75e b/fuzz/corpora/asn1/a946ef4e0fc1c116d421a91fe049c8058436f75e new file mode 100644 index 00000000..18d237c6 --- /dev/null +++ b/fuzz/corpora/asn1/a946ef4e0fc1c116d421a91fe049c8058436f75e @@ -0,0 +1 @@ + 0313041304303 \ No newline at end of file diff --git a/fuzz/corpora/asn1/a9572ac94498bcbf3d1bf9fe5c4b456a53e93487 b/fuzz/corpora/asn1/a9572ac94498bcbf3d1bf9fe5c4b456a53e93487 new file mode 100644 index 0000000000000000000000000000000000000000..e1848461a21331b102ee74f982d7874ceee733dd GIT binary patch literal 21 ccmXqLFlZ3uHQ;7rV=Py=X#4{h*93W`XVtdv0) zPWStFrYk?9&3C)+P_MU!;H#S8XSM=xhx$m7vptSkJ7b$7A!%_ckYZ7^$HM{Za;pju zL1Hj1H4E~Y>ic1X=?GG>D1yWw^WTer13!sEOeF?Y=~N(9`YhyAdN;b5bjnc4=NutU zzjsxXsXz)|M=>u?%Jqzz5r`K)}o|2-wp1zcBC5^Bpy4A0MnW MWT@|vF4nBR0P^bevH$=8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a9979cea7013217c58fd7cd5acf6f02342afba5b b/fuzz/corpora/asn1/a9979cea7013217c58fd7cd5acf6f02342afba5b new file mode 100644 index 0000000000000000000000000000000000000000..0ba28039bc5d5e18adc0b1b90e4e67d0b4502c74 GIT binary patch literal 519 UcmXqL;9?v_BRK@P7#JA30K|`7o&W#< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a9994fe57855b1cded987ea1a838b6e88eaff696 b/fuzz/corpora/asn1/a9994fe57855b1cded987ea1a838b6e88eaff696 new file mode 100644 index 0000000000000000000000000000000000000000..3b2248d2e836214ccbeca76a9243ddc8e5bd34a6 GIT binary patch literal 7 OcmXqDHDtDTX8-^L!2s|8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a9ae59efc42ac1ad5bb0f73ca1e931e4ebf3d6c9 b/fuzz/corpora/asn1/a9ae59efc42ac1ad5bb0f73ca1e931e4ebf3d6c9 new file mode 100644 index 0000000000000000000000000000000000000000..7da6c5afc0a0fef70ce95b176535798eaba2b7b3 GIT binary patch literal 26 ZcmXqLU}9imVPIfjU}7+6V1}|l000}t0dxQW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a9b12748ac826e8d2aa299cc75ed61e5ab37df16 b/fuzz/corpora/asn1/a9b12748ac826e8d2aa299cc75ed61e5ab37df16 new file mode 100644 index 0000000000000000000000000000000000000000..aa17967ea834238005b7069c463001057eea1945 GIT binary patch literal 61 gcmXqLSR!c9Ajoadz{X@?z{RM~z`(#joDc&808yn0DgXcg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/a9b16c9d58cb0ab51c32cfb705011f3c1cd9ced4 b/fuzz/corpora/asn1/a9b16c9d58cb0ab51c32cfb705011f3c1cd9ced4 new file mode 100644 index 00000000..b8472281 --- /dev/null +++ b/fuzz/corpora/asn1/a9b16c9d58cb0ab51c32cfb705011f3c1cd9ced4 @@ -0,0 +1 @@ +õ diff --git a/fuzz/corpora/asn1/a9cca113daeddb7ad8e05b0ab21262073ff539e7 b/fuzz/corpora/asn1/a9cca113daeddb7ad8e05b0ab21262073ff539e7 new file mode 100644 index 0000000000000000000000000000000000000000..14ccdb6eec21dab58b81deceba4cfc094bcc041b GIT binary patch literal 675 zcmcJMF%H5o3`Ok_bwT0)TmXqKzbohA3QR0!W$gG*!OH1CcA(IzqEaN@62;%&{z_m; zADzLH0*2H{Qi#AB-HYT5Ag=SWc;~#d;9QXF2iH6Q7U}0;f9<-^O?%0@PSCbYh+jK$ z0?2DA-Ti>%Ndrj{l7~^fCrhWg_5y@Bu<@QVw_ke#ygeV>cp9#|-s5jpW@aW1Mg~USP>=)%vN{%!2uPh4!~g$R?^OMn!@8h> NjT5SckrQlE0{};e6wd$v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/aa0d147d61ace98c02e422a51889533e0ccab0dd b/fuzz/corpora/asn1/aa0d147d61ace98c02e422a51889533e0ccab0dd new file mode 100644 index 0000000000000000000000000000000000000000..ac1e0c7f2241f6892f927e4a8964838e9b229e8b GIT binary patch literal 1495 zcmeH{K}y3=5Qb+GJ5f-`M!K;=K}gXqrfzkSr7OXON9aBNKuKMA02f)LH}D3YM{sY2 zw~#llHKrm2K@{|5F-!&?Ki@y^SIEwBc~L&^aT3)~M2rb3BvK_>KV! zW^4Rh_(ZIuK4<<8g~Zo`gRQBe#sb~ny!1qt>WCy7 Rp64Oze7g$Ub-m<^mNO;0dFXn@n!wv~5nHV)(6O55n+-siPvGu$1Zy%-m&(1oR zE{I}xPjR{0IJ1?Z&V)&p0m*s@;D@`Hk%^I!*@}TB>r={|$HsO~ub52V*#2&p9lpS2 z*Aix9@Mr@?0SyB8Ke}__Zew&2S`C^Q7#Nrt z89-bEd{!W7W@O_4+r`Yl2-Z1(MvZzL9^FtSQ(=K|NsC0r0M_vEDQ_`!cbLAjEoEn1`TX1tp-gD z3=GVS3?QxnJ}a6SwG0|x!}S|9-e+QDG|+$wFfua9GJtGC1|R`%Mg|5Z1_lX(V3z;? zWsqh6|3l*aW0Bdy%GGMcvU&AaN29O+mkrym@4vB2o!in`IrRS)W>JQ{g(mJZuO9z% z$93!c#XDE`XHDro%3{f~osVa4_LlwiM#2+zdNCio9Ck=h$;7DPnqZ8q;$HLQj;-I7 zfBPuie|FZnbU_rmdy31|#+j`Qbw*g6`~SZ$0~l~HFfuVRGFvgQWPM7x^Vrz#=@pad z8{6OQvSS=XfeVU4Uj_z$0dU}=1}*&p_pguA{cofME(6ZM9ZV^gfq_Ajfq}t;q`>_? z;3*e(;0~sg`~N@FmjC}5o%vM%%e`=tSTy76w_FdxL?2bF`gHo9-_a+PR}; zF7~Dv>e#}NY3B}^VgcO!{X)vv!f5xG*io_3Vu4OWjzgwc7#(t?;dt)QDsxAN9BDEW zFW$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMzN^SoB##C9|DObdK85j)=4Gawp42%s7qYT^)T-lgIWn~!| zeOasxEEk$bm>P;0FfcSQfQ?~d{%dY-2Invtm{~9wz_}FL$6$bN10$*pOy=h12n$hp zAg7r#VEW(&2|i#lH#cJdIRoZhnpj~@7b_YdzJU0IjVY8v8!p1E1r|mCPy)iPfRTZL KfsxUm!2kfmpLSXR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ab44d70254cd23ec085a220e8d21670551da398b b/fuzz/corpora/asn1/ab44d70254cd23ec085a220e8d21670551da398b new file mode 100644 index 0000000000000000000000000000000000000000..489b2ea9b5c0effbc26b89113575bf42199c7d05 GIT binary patch literal 197 mcmXqLkPl^HV@3i71`SNi1`P&mNQ5aW7fp7+xC}N7U;qG(<{+{F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ab60430c3ad4b90ea462b89dcf5161ab80774761 b/fuzz/corpora/asn1/ab60430c3ad4b90ea462b89dcf5161ab80774761 new file mode 100644 index 0000000000000000000000000000000000000000..5c11cc3d33beec70a36c461b9860b31e7deb7fea GIT binary patch literal 13 UcmWgOHfUgDWH4wjX!zd&01*`fx&QzG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ab74a5fc61659cfcc7cd49dc2c06c734c1142a5f b/fuzz/corpora/asn1/ab74a5fc61659cfcc7cd49dc2c06c734c1142a5f new file mode 100644 index 0000000000000000000000000000000000000000..e53fec89e66dd85e1b852481ddbdc42cb18585da GIT binary patch literal 84 zcmXqLU}DN*FlaDnU}IXwz`(%5+vagjllebm921l1UIqpRCcy@#6b1%^ECU7x1_O5S iMn=O04F(PJ4Q$MzvN9}O1`W-PObmhy42%p=U;qHvwGRpa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ab76ac5dede8705aec88c12b07bcf30ecb47e782 b/fuzz/corpora/asn1/ab76ac5dede8705aec88c12b07bcf30ecb47e782 new file mode 100644 index 0000000000000000000000000000000000000000..b82bf63ba67a228db6171c7454a182e95a7acf2f GIT binary patch literal 588 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1H!>Q6 zlo>RzF^9^^uy7ePG&3+YE?@x5g8@i$XqE`mn*s&~X0R@Z`bL-`jSS+924ornGh@IV U0{6{;yJX;lq><5(Av8+_0K`XWKmY&$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ab934bf85146aa5d8181d7a79ffa134d4340b10d b/fuzz/corpora/asn1/ab934bf85146aa5d8181d7a79ffa134d4340b10d new file mode 100644 index 0000000000000000000000000000000000000000..765186f69b01348a8a7586ce1eebc98cf26430fc GIT binary patch literal 6248 zcmeHLI}(E+5Zz%im`Rl@*rZBfozh$6Hq7MIvC4?QT?7;YXd>w%y1Tr6`yN^e#%@rF zyWs5kF1V=S3INdlFPm4v&o$F7Hu5I=fV?IjHLe~h&1r_H5tc>J8i0V&HtF<4tpDPP z3Z{RP)kt{&A<<-9x~9d{z)@Cr#eQd9aWVvz(1#ce>WO)VSIn@=6Dw%wX6AKFK>_T( zYhR737ASQXQQDA|4|;^ed!tp^mC;IyB+BAaZC6m3-i4l^Bw+C`(m1=4E?4$+^e$&@ zdG>UAIGYbTo&1PObij9SWXC`6=Vj||$h#?TLV5y?9FdV&MRaL=?R)?uh}MtM5Se5f zbQLcRyK@JXh)MeIT%^bMJQYlC68^R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ab9549c22660c5960b9d669034577935157f36b2 b/fuzz/corpora/asn1/ab9549c22660c5960b9d669034577935157f36b2 new file mode 100644 index 0000000000000000000000000000000000000000..96f766daa44d7a87563ef5da87c2721da1d5dca8 GIT binary patch literal 26 dcmXqLU}H2`&>+rhU}9isU}yja6$}gv3;;}$1nK|) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/abb98760eca7b3000c137a7f27e8420714fcbc3e b/fuzz/corpora/asn1/abb98760eca7b3000c137a7f27e8420714fcbc3e new file mode 100644 index 0000000000000000000000000000000000000000..2bd7e74afa8fb4ce59014327938819f723ef5096 GIT binary patch literal 172 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjp6fqj@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfvHeAWJ+5DBB#S(pu@(f#iRaXe?!BD uKbsmCv}iZ7Feo+T{@JjgVMb&9|MrH4h7Ua*b(L%a45Ee%V89Nc7#IKtmMSy= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/abbe8b77418855f49062bf1f32976734a1055f60 b/fuzz/corpora/asn1/abbe8b77418855f49062bf1f32976734a1055f60 new file mode 100644 index 0000000000000000000000000000000000000000..fc1c7200de748f3a6993ec169ee9c1a621d732a1 GIT binary patch literal 18 ZcmXqLU}BuZ!myx$m4Shwk%57M0RSU!0{Q>| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/abc9e9e497204c798aebd27c3328c310f97f2a25 b/fuzz/corpora/asn1/abc9e9e497204c798aebd27c3328c310f97f2a25 new file mode 100644 index 0000000000000000000000000000000000000000..24d689ef11e7ae8d0a8a789c5df4de2795775198 GIT binary patch literal 1481 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO*`$GCKSRU91_Ll;V`Q*mU|=v{5O;THU}gp} z8w?B@*tqY&HG*Zq5^RhN42%p649v_hl^_%MGq5o-EMWKyF$S&>RTaV>+zJ*DGJ$dh zsD8n4A|0hM!Vwg>pm+e05Dqgl^A9i&6wFwqq471Mq=$0AF%Pig2iW?7%x{$0O5Fmz>=P^wI0As1C#{d8T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/abe9a00f6dff728fe630182db638eb7e353ca04d b/fuzz/corpora/asn1/abe9a00f6dff728fe630182db638eb7e353ca04d new file mode 100644 index 00000000..502dcfa3 --- /dev/null +++ b/fuzz/corpora/asn1/abe9a00f6dff728fe630182db638eb7e353ca04d @@ -0,0 +1,2 @@ +0 +' \ No newline at end of file diff --git a/fuzz/corpora/asn1/abfe0543a91d522b5b0d702bf51d7bec60f8e255 b/fuzz/corpora/asn1/abfe0543a91d522b5b0d702bf51d7bec60f8e255 new file mode 100644 index 0000000000000000000000000000000000000000..bafa1eb4a8a1152dba52b4f0b3f5857f173f0074 GIT binary patch literal 78 zcmXqLU}92ZFlf+eU|@>;%g)xo$i%>)$H1V|zy{&xF)=VOBJmj+(B(lY86W@vQezGS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ac07cda9b27f68ff7408d878649fa12ecb8b9ed6 b/fuzz/corpora/asn1/ac07cda9b27f68ff7408d878649fa12ecb8b9ed6 new file mode 100644 index 00000000..6709fd0b --- /dev/null +++ b/fuzz/corpora/asn1/ac07cda9b27f68ff7408d878649fa12ecb8b9ed6 @@ -0,0 +1 @@ + 0006226012Z \ No newline at end of file diff --git a/fuzz/corpora/asn1/ac240951a1e98e7633f95ddce0f0222d8c16cd24 b/fuzz/corpora/asn1/ac240951a1e98e7633f95ddce0f0222d8c16cd24 new file mode 100644 index 0000000000000000000000000000000000000000..4f449b985c633d13b42e011195e2c8e34b690808 GIT binary patch literal 2158 zcmeH}K~BRk5Jmsk!2tm)SaiuQsFl#ip&>=;J_`=gW4MUs5S#^x8^CecAdKRq1Su6_ zlVnlGn;A>i^Y?hhrZdOWvMAqA<>*}03mn5xilj5@N&^JlMD8ZS+UJ>xr)BZ_ti&8v z&QeRPGnfQKFgg;1gqQ@PdcL*$%3U=voryMl0H6h^R)6!8U--+Gk67EE{Ce{<9RNY! z2{sfJ;$hey-oJf%?;DMc4a454`=Y~s?BmS;tULM7_rUjj+CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU8ZnpTUfbTc~~~D{_1EH7T~gB`}O@dcByk)IxC0%-@+`)u(!~}edg8U zf9|+$oxgbJ>i(=L-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZ zyYg=zrTfp$I+repVs}q*x!O3hm7&grNtR(clKubxi!FMvT}{`R7%f{SMn+~U z29~T(DR&;5+daKvGJRwFyIpoGn{tJ9HbdqSg zZ~2GU`Ve F^#Vyt$qWDh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/acc916d72ed651a339fc34e8e81f6b7281295741 b/fuzz/corpora/asn1/acc916d72ed651a339fc34e8e81f6b7281295741 new file mode 100644 index 0000000000000000000000000000000000000000..0c53eca4bb4b371cbf6c94dceda93589fe9b81e6 GIT binary patch literal 232 ucmXqLU}NTEVKQtmYG7b61Yzuu>M{mM_8_xS>?g-ohzT&A%uI|7AOHX)q!{-A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ad2e5283f2da103f9ab320dab471ce631cff1b15 b/fuzz/corpora/asn1/ad2e5283f2da103f9ab320dab471ce631cff1b15 new file mode 100644 index 0000000000000000000000000000000000000000..4c678fbb8328ed1f4d5f589b6ffea8bdd3038477 GIT binary patch literal 4240 zcmeH~JqiLb5QX0)8rMG%Y;uORd6k7=zl8_!7(sBatJ&g?8eFnBq5;mhaN&FZ$fAC0&wITj1MhoCnG5`=&N z7`LIFV&L3G8QkQ`3jiC>h%eClHUFRS7jaAMj7;A2@5$H9N7FxV?8?)gQ>yYb^E&O6 so%TwRuiZXNJ^-(CekW(%?e}y}smjxyldZg=!mfJya^wlH`fio|1l&g4zyJUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ad8b3aa5f0ca2d406974a42ce3b2101209d1371b b/fuzz/corpora/asn1/ad8b3aa5f0ca2d406974a42ce3b2101209d1371b new file mode 100644 index 0000000000000000000000000000000000000000..c93126b6ec2ad208eba8e4b5ae498e114b0e8e58 GIT binary patch literal 5537 zcmeHLu?@m75WIJg5lD1MG{6ARJOv{lu|UKQOz|$l9AQ6tT4XCgwsr+-Ed)wXisn9ay|$2Cl;C^Rxv4;D7~joW|mdayS?WNi05~)wEU2+$->OVwaDn{Gv#Q-{8$GJRnSX4d$E@i$c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ad8e0cd06391e7b3726d3f561e64a73c910f2905 b/fuzz/corpora/asn1/ad8e0cd06391e7b3726d3f561e64a73c910f2905 new file mode 100644 index 0000000000000000000000000000000000000000..f60c4a2a8dfef096b35547c3773ea7eb15f4b104 GIT binary patch literal 8 PcmXqLSlA%IU|;|M3?2eP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ad92f6c2508587c45d9be2aa917e2747ab39d354 b/fuzz/corpora/asn1/ad92f6c2508587c45d9be2aa917e2747ab39d354 new file mode 100644 index 0000000000000000000000000000000000000000..e7f11c0bbadd853bb81cd4bdda6403b048b5a137 GIT binary patch literal 86 zcmXqLkZ)jOoWtV400B923=9mmj4c2EGcaf|Xg6lGGBBqwLM0hKff)@@ZWV(|_5Do(aL%J3-GYbO) UgBAmWRx5J~BZE4eiL9Ri0QW-=RR910 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ae24c12e5fac26d40c781333054b2ce9bd7a0e86 b/fuzz/corpora/asn1/ae24c12e5fac26d40c781333054b2ce9bd7a0e86 new file mode 100644 index 0000000000000000000000000000000000000000..b8655de199d257534ebe7dcf5b7991a934efd461 GIT binary patch literal 40 kcmXqLFc4s4*J|@PXUoLM#+t6p$il%az`)Fa02&}B0C{Eu>;M1& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ae3c12d2557f4ab43a8e535824e0bf447d329d74 b/fuzz/corpora/asn1/ae3c12d2557f4ab43a8e535824e0bf447d329d74 new file mode 100644 index 0000000000000000000000000000000000000000..2d42f6be9b68c868bd6c877894495175eeec3da5 GIT binary patch literal 2510 zcmXqLSkhq7AgF54z{X@?z$0LQ1{fG1G9rwB85l;D84TqB(TB$EXq=*f(EvdMbPbTv dWI0;)(zBKsO>aXey$yrNqOKRPng#)ki~wD^r;q>u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ae45099537056b3372492ecbc844640006e786ba b/fuzz/corpora/asn1/ae45099537056b3372492ecbc844640006e786ba new file mode 100644 index 0000000000000000000000000000000000000000..9426f9691dc913f1baf77b62b0c320e51ffe4f92 GIT binary patch literal 64 zcmXqLFc4;A*J|@PXUoLM#sOw9GYBxNFfcQKfI)*ngMoq8|Nm|O{~JiKF=-g^2>n^p O(9p~v&&0~WU;qH=6A%ah literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ae501556a91580c10cff0b9fa40811a4d75b3951 b/fuzz/corpora/asn1/ae501556a91580c10cff0b9fa40811a4d75b3951 new file mode 100644 index 0000000000000000000000000000000000000000..892398e70b0db60d13169b9dbc5f9c69f5b6c4a0 GIT binary patch literal 2 JcmZ3%0003}0I2`~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ae955c066f7089cbc99b51b93b2f11d9446a8095 b/fuzz/corpora/asn1/ae955c066f7089cbc99b51b93b2f11d9446a8095 new file mode 100644 index 0000000000000000000000000000000000000000..d063e595cba7d11737accb98e1d0bb6d55627fa8 GIT binary patch literal 913 zcmbVJ%N4>f43pE46*zI=+{b(7%pC0FY`_2czhfntj&$s|Pp7_?)$D{?Tjn qrht}G&|(d87XJs=0^8h%)&t+YPA9BCEGe9K67CFiMOs1&=6Bc3Wrwl>{Td+5xX zvftNB_RtV!=jWSm(y}Wr7G}KonqQs|&Geldhfh&3vnz{uKB7w9WUme zkA*4E!ot$EeIUz@@6s>QH??rndaj#icIDuWUx~;XBJyWQH;O0V^$CXS6P!Fx%)r>)(DR1|z3+HCjf;L&ZY@R&W|Sxu zImL0pjCLq(9y)ct(>O+bLw$=7w1W=}C^ikiOS)8`!ApeV7>Zbqih06IFoP8GbPpXS zhYElhBxdvemc;KJ1t^(G#|vf@6%d`7ze-+*Vw3o9PW27U2(zr&F=Z0m&Wf3&l~HkP zF~)Ik?a=avfY9k_X*-zt=if+rlU}9imU}RumV4!VaVP?R^S5dL;kBO--}m!1S~(q4v&7p38c9&*9CB;OlsjNH!W<8rvH@KJ4<;6G&hJ(d6#4s_;Pj6$rx}7;ZW$ z&{3MWsHM}DInlj-uBQM!1r-XoP*4$vqZF)AP!UJC=_nHGXM2w=FSfk4@6&3gL6&MP z)mrKNllA@~>k-{VH_=_Mu`1-KtKF}$DyYz`Kx*l9%d3`7TS2}cUyv_W`GUA0E?U6_ zi8XMRq)@6UsE8xnbX4G=jU(K&A~4*2cT-R$nwoJYtUyv`p_WOP>9kS&Whzm_e z)zW%0k0TAn5sNsih+{-4SfQXIjuF*cD*(K2dmRr)RSf(cbn_BJ9T@6mM+tstO7}L; V{7H^!n3el!$We8z*l({5`vBs8oeuy2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/afd8f8225e7de1fe3f0319dfe4a695486386de38 b/fuzz/corpora/asn1/afd8f8225e7de1fe3f0319dfe4a695486386de38 new file mode 100644 index 0000000000000000000000000000000000000000..220b12d9ea21f3deb5b86b0f2475b2a0f413efca GIT binary patch literal 68 zcmXqLFlaDnU}Mx~U}RumFkldGWHej=5n~ROm0{sBXlMq>Ffeq2NsyujHm1-l5vDf= J3=GU5IRK{Z3e5lj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/aff13a973be50601ecb4fe77b70120e69be0bd51 b/fuzz/corpora/asn1/aff13a973be50601ecb4fe77b70120e69be0bd51 new file mode 100644 index 0000000000000000000000000000000000000000..c66bc31fc011640663b3dc3ab204012eefdb9034 GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4qwyMZNLQLD|VjR6YIS!yyeGB5-)FaQ7p C3JB={ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/aff7b27d32fa0df219f57fc66d33b698f22a3fa2 b/fuzz/corpora/asn1/aff7b27d32fa0df219f57fc66d33b698f22a3fa2 new file mode 100644 index 0000000000000000000000000000000000000000..48549f6a8fe620002043ef0b24cc2a1c5880be26 GIT binary patch literal 539 zcmXqLU}9imVPIfjU}9imFlb%g)vS;xoed?hrl$j1QJKU}ymG z84&8>`bkxfZXY_|9d0w4yWrx4T!d~SI-lAurkeRAhCI5xP(F-?$0)iwg#Q}=+QM!) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b00dd955d2b702f62a9003078413fda3ec39e8fc b/fuzz/corpora/asn1/b00dd955d2b702f62a9003078413fda3ec39e8fc new file mode 100644 index 0000000000000000000000000000000000000000..e1d529da82a77465631725d19e14fdd337b81cd2 GIT binary patch literal 14 VcmY#ySlqC%!JuJD!;*#u1^_Vz24nyL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b0227ad30d41d5010b84bcc227f59c62fa1e692a b/fuzz/corpora/asn1/b0227ad30d41d5010b84bcc227f59c62fa1e692a new file mode 100644 index 0000000000000000000000000000000000000000..6d274cd112600e29f30373f6c6ff1bcb67f54370 GIT binary patch literal 87 zcmXqLkY{3?!{V@@fsIwWk%d8yfq}u6k>&q?1_lNOkN`Uan9T^{LqG!q0|OHS149*v StHr>e)yka02-7bMQ3L>#%na86 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b043fed996a96f20e3205287361182317ae120ef b/fuzz/corpora/asn1/b043fed996a96f20e3205287361182317ae120ef new file mode 100644 index 0000000000000000000000000000000000000000..960c76290e53f45437d1e2e283d4b4236e83b565 GIT binary patch literal 32 dcmXqLU}93=%ftc!RxB)vEG#S{P;LtY0{}ZT0@?ro literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b06a4dc605602c6f16231902b154fb8a3dfc4a8e b/fuzz/corpora/asn1/b06a4dc605602c6f16231902b154fb8a3dfc4a8e new file mode 100644 index 0000000000000000000000000000000000000000..e61de87abea1b0b9e5d7700436c5ae05fbc68f3a GIT binary patch literal 26116 zcmeI5u}T9$5Qb;(;)!S=Vqq%5PLgH_*eK~!_#EP6oPv21pTo{Z@O3OBcV`yEMYDm; zkXyg8h=IT`GxyK`@9Zw8WpO;3&*qtCU**Wtpm$MK;bwRJ0tro1xSC|A`KY z!_j>9G0j|YFn;XGWqu)fUqoI+?&W&2SS+-BKdXQBHqD$9(X!}0>ywD&PO7iEy^Bl+ zvTAqD*N6HehKp7d+C)*sN)$iJO)Ua(L83@hW%Q^Gd_kvOPpmYMzy@N;-B*q9koXFO zatD^1L$z=eT}G!kVHg@KDS%1xpm*6;BiBQHi?+s|n& z+aOX6sTO7O59{qA>w#|24Z8gvt3i*t-TfY`feT9o;;qvoFK?ZW0=|GR;EOh2fD3RD z1s4!&;3~;Lsu{RQqueAa@S#nk+(Z#rZg3HpD9a}bsfJXGBGo`Q=&p=|$EydA!Nnfp zVtHwZL*N_&=Z=^~kD?9kV;fvrr*~nz5k=TlSy*p(OslbZW6^pjO#Yb6eKHhymh(_BGr&;QKTBIw}-3;x^VMQ&JEp=37h}=_`c4*|> z`OZ#j@zuK7wC(%kR$IqU^3q?-BH}AP6huPe_wG?U>F;aVRg0!QzmDu=$<$qUDjX4s zugaTTiH1k{FC^cW!wX%AIoU!)JcKYkqGVg+f-{TAFxcJJK>xUC4bu;;=~fG4(=mdL z#9?H#WP|=V`cY|TTWKMYIEff_NHkhH{b;mwj9?>i7{NxyD{V5ZbqQ${Y-kNy%j(Oh zVXdJ*iql$t37J!NJU==NF0`4-EwSn=VzyNv9mTN+GE~{hJTu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b0c428b5407f01084165fcb71f6dd9e50cc8a664 b/fuzz/corpora/asn1/b0c428b5407f01084165fcb71f6dd9e50cc8a664 new file mode 100644 index 0000000000000000000000000000000000000000..f83d50607e84e52eae7110d8d00152ac7f245347 GIT binary patch literal 85 kcmXqLFlb<7)M8)&Q3fa!R1lSdDnS*5X*U2F#$;ds01B=QJOBUy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b0ee669b454100ce88364492ade1422ee68971f2 b/fuzz/corpora/asn1/b0ee669b454100ce88364492ade1422ee68971f2 new file mode 100644 index 0000000000000000000000000000000000000000..ef6b120c7e304b07bf90eec37b7b088023ae5853 GIT binary patch literal 23 QcmXqLU}9uoLW2wp01#CG!~g&Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b1227ab923eef013ecd1d101b1f3e87e255b69d3 b/fuzz/corpora/asn1/b1227ab923eef013ecd1d101b1f3e87e255b69d3 new file mode 100644 index 0000000000000000000000000000000000000000..5fbbfae80e5621298a4c1150c8175b615c203099 GIT binary patch literal 242 zcmb7;F%Ezr5CjKeVPS$_u(GA{Yn1pwek56AKt*HYR9D>Wu3zn-D5*2DQL>BT2)$lx nB6|W821ko)y@Er>aYf)mhGKsA-M^JTeX4^__t6J)YUi>8_5NRJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b1584e2bab4df28edbb822bd59b256549369b1b1 b/fuzz/corpora/asn1/b1584e2bab4df28edbb822bd59b256549369b1b1 new file mode 100644 index 0000000000000000000000000000000000000000..908af32b35f80390bdb77ebcf73b5e71ba6ec897 GIT binary patch literal 51 mcmXqLU}H|#W?ay~rZSbkzP_yi3>q6+APgj600ImQ3=9DDPZG2M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b1628ef88e6aabeb9ae2a6bd1b69fed47acf6ec4 b/fuzz/corpora/asn1/b1628ef88e6aabeb9ae2a6bd1b69fed47acf6ec4 new file mode 100644 index 0000000000000000000000000000000000000000..74139c1dc93b8db7176f9f1a4552d0210954e156 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4dV1R=g6$Zg9GDy<(|NsC0 zhs6KKBC~~+tCfdk^XjjTCSd_C8@6BHe`A+Ax23ak=>ILuq6~WrP26W*J^ts8>(=>; zcdqWwn$mrg#gb(^AJ5+GE&J<@geUCuVm^2|?2w?6iBZEf!5CS^z2?asTfZy+_EEb3 z?5uO?f+%+P6ql=wGg}$zOfZ})w&=l*4|c+LHC*fkERu7AHpX z^+UiP7RSJ;b~_XMWM;`vnx(j4TdTvnMYoEgXKoh#ykkq}#J-Q555pua1K-q5t`-YA zu-AIyesW>Ef0~EvpvXO4-HI*vi5H z1&n9s*_}>Pp1Q?pPD-OCtNm8R9~$cuvVCoLE%c5nfB!sE$I>SRx_ogvQSZZcf%(6bf64MpGMWL^ zj?Ovm>vrdFmz!vj!pX$Q$lTb*z`|(9W7?s5VdD<&CrVSdO{loYyMB^n>E4F^LN3eh zAN(GY=F`>)ZCLgOli@Far#;w8_1xMXl^?AV+iwL;xOE{VTi~z1v+;pv>g-{2 Jm_=qR0{|PYTEGAR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b197a0392cee27526234bc8d0f91638d7b3df075 b/fuzz/corpora/asn1/b197a0392cee27526234bc8d0f91638d7b3df075 new file mode 100644 index 0000000000000000000000000000000000000000..fd5cd27e9c12a2cb6059aacd94a6171d133d2926 GIT binary patch literal 151 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbt!4NE9V9;Q|WXQn8XutrMF=$`| gaamXlEIs8IL*%i`_a=P2dJP*kY2)0%H&Q-?6Xf1 zO|#8#814(2@hNvg>?<<(@?&``h@kVZhp?yTP>dFKfnY2t;U}K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b1aa7a5fe7581cae75a7babfeccd0ee9efc61196 b/fuzz/corpora/asn1/b1aa7a5fe7581cae75a7babfeccd0ee9efc61196 new file mode 100644 index 0000000000000000000000000000000000000000..fc2d6f0750409bcbc6f19b5e1d3dea3cbb3a6825 GIT binary patch literal 52 qcmXpoG7w;6*J|@PXUoLM#+t6p$il%a$H3OlfCLO03>jJ2-~s@&vIPPF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b1d7b9408fc599c715b47dff34d449831d9c7bb2 b/fuzz/corpora/asn1/b1d7b9408fc599c715b47dff34d449831d9c7bb2 new file mode 100644 index 00000000..a96f4164 --- /dev/null +++ b/fuzz/corpora/asn1/b1d7b9408fc599c715b47dff34d449831d9c7bb2 @@ -0,0 +1 @@ +0€0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*!*0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/b1f07ebd3fa7e4eb712faf7ec05b4dc795167b0a b/fuzz/corpora/asn1/b1f07ebd3fa7e4eb712faf7ec05b4dc795167b0a new file mode 100644 index 0000000000000000000000000000000000000000..1cdb14a9fa94114c45b3a377150fac0ce9dea5c5 GIT binary patch literal 7 OcmXqDWn*MuWdHyHp#VYv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b1fab2775df3cf209a7f27648696ab85ed9aa5dd b/fuzz/corpora/asn1/b1fab2775df3cf209a7f27648696ab85ed9aa5dd new file mode 100644 index 0000000000000000000000000000000000000000..97653d41ea2c8bb4a5ffa1a009a32f5333b52376 GIT binary patch literal 14 ScmXqLU}9uYZeU%9lCL#*a~iq*+Q&H$JIdByAqwWV`Um};j!Lt2GASD3aVdm!dc1q@ z-33C{Y-@LM;|@0^sva!)Pbng@Ml~9MfNX_rh2+mCD$Tlf-EdY&tL9$7Q6E5$FPPTV z@3XZ>0J5fd(gOfA!t_g@A#ULixDX-%iwFo|@nc7c7J<==DAdw)=LI3rljsGEqzKdU za8!bH^C*Ag&wcuP|@&3P2bD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b239c227b3eef54610359cbbe8366624f5114e9c b/fuzz/corpora/asn1/b239c227b3eef54610359cbbe8366624f5114e9c new file mode 100644 index 0000000000000000000000000000000000000000..99a1d140da0779b7b5f43bc6d378d4f56cd17998 GIT binary patch literal 3259 zcmeH~K?=e!6htR!O%V|aZn|h*F2o z+FDD^)p&{^0BV(<6Kx8+NsiW07zArva&_QGNp=)H)zz2J_|pwIszHtkTj{aC5mguXSNuF$OB1)IhOzc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b24ae40ee8a0d8d9696d8d218ad79eac3aa4737b b/fuzz/corpora/asn1/b24ae40ee8a0d8d9696d8d218ad79eac3aa4737b new file mode 100644 index 0000000000000000000000000000000000000000..4edaedf541a606d95828e09acc86c9706bfa3914 GIT binary patch literal 716 zcmchUF$#b%3`LVrDh`6@aQYea3?3^}&*3dyr3E__u~MYjlDy<6e3&1Xu!nQvK@Nin zn-a_mK%}Vv7(_`JlshmVQ|EvP#<>Dx+ygwnf=Q{qFJt;`8~4TXvz>L5C3VrJ^K{eo P(cA3BFV8aC&Z8nO%^g_o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b27d6690fca6ea18ea4af6224ccb8ddf3cfea410 b/fuzz/corpora/asn1/b27d6690fca6ea18ea4af6224ccb8ddf3cfea410 new file mode 100644 index 0000000000000000000000000000000000000000..e0f140271e455512a0ba6400d85caee9ca499b3f GIT binary patch literal 143 zcmb7+u?>Jg311$vsF0UFmx^o$iD!CGva01&;%fLVdnrt&b008h+B6k1) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b2bd4e71d1d31ec34796bf8691add1e3d5a32185 b/fuzz/corpora/asn1/b2bd4e71d1d31ec34796bf8691add1e3d5a32185 new file mode 100644 index 0000000000000000000000000000000000000000..699c32d126f43347c9fa66fe38e436e2437ee118 GIT binary patch literal 276 zcmXqLU}H2`&|mTAjQDoKMXV&Y=i*@1_sR)3^3kC4IE0~ m3N~)k0I@xG!$bsNjExKo|Nk?90LVG!V8^jh$yPjeq5uF>|Bk)@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b2c0581ccad023eaea970b879524b1050c53821f b/fuzz/corpora/asn1/b2c0581ccad023eaea970b879524b1050c53821f new file mode 100644 index 0000000000000000000000000000000000000000..8d524c0adc25e0ff76d4d5771a465cf289451ba9 GIT binary patch literal 156 zcmZY0y9t0m5QO2`d#s2EikWtB(b~n8wHRC>Vjq@eDsFHb7!7>L~3hvm;0peB+sNz~!0Jxfle3bnF3a2oOVy4~a~9ML;cmQ&w#6KeRhu8qg2w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b2cd73c651425bbc635b82623c916c74a4915de7 b/fuzz/corpora/asn1/b2cd73c651425bbc635b82623c916c74a4915de7 new file mode 100644 index 0000000000000000000000000000000000000000..1b40179be1d8c055e9ecb131839a9447c516e45d GIT binary patch literal 172 zcmXqLSkhq7VAx>Lz{Z}?=E2zZ!-%nAmE#Hzxs7bc2qD@+V* Ki3!XW7ytmPCLo6Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b30de2c7691682047c8cc22fd91cd51bb24f981e b/fuzz/corpora/asn1/b30de2c7691682047c8cc22fd91cd51bb24f981e new file mode 100644 index 0000000000000000000000000000000000000000..f32661fb143472989640ccbbbc7843baf3186fbd GIT binary patch literal 399 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Ky7A%YgtlEt%3<}J049wsEGk|~-m_z|Wj0_A04Qwo}22BhM49tuSAg%$CRxo3; W!V1NF1_l~ffdQ!H3lM0<6$AiAG&e8+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b3115835956d18e6b34b891b2330379549c7e9f9 b/fuzz/corpora/asn1/b3115835956d18e6b34b891b2330379549c7e9f9 new file mode 100644 index 00000000..fb451240 --- /dev/null +++ b/fuzz/corpora/asn1/b3115835956d18e6b34b891b2330379549c7e9f9 @@ -0,0 +1 @@ +00 \ No newline at end of file diff --git a/fuzz/corpora/asn1/b3300750a97dde332fcffc5f327a6a97b9e69ba7 b/fuzz/corpora/asn1/b3300750a97dde332fcffc5f327a6a97b9e69ba7 new file mode 100644 index 0000000000000000000000000000000000000000..cd19bb0efd88d416b88c1eb080de120ae96ec09f GIT binary patch literal 4113 zcmeHKF%H5o5OY!#1QHt(3w(es?l1a*eu7tAmcFC>kDV1Y-C@9$PF0dI7t3cmCxw;{ z_pu+}r?8Kc(PFR;v=m9;X)HU176AY=E`f6yEj7dKx;xUQ95YbP%bG6_k8^wxXv(dn zJ}W>J7~3Ku=|%!ly{VC3MgZ0w0+O^!Kx*VyiG1~@%KCGZxOsb$v~CQWRwdeq5J_Ps(fUNxg|Nnom;{bJlAWHxM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b3397133baa9906c64b2edf53d516ce37695e04b b/fuzz/corpora/asn1/b3397133baa9906c64b2edf53d516ce37695e04b new file mode 100644 index 0000000000000000000000000000000000000000..3c2a35a42afead165a46b927e65d935a3bde5860 GIT binary patch literal 45 ccmXqLSkSPbVKFlUqry@K1YC~928lud09T<5zyJUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b33f99a7dbfd0234e11817c28c0dea46fd3156f3 b/fuzz/corpora/asn1/b33f99a7dbfd0234e11817c28c0dea46fd3156f3 new file mode 100644 index 0000000000000000000000000000000000000000..52bad514370343b6b22e90d399990cd75b75e3de GIT binary patch literal 75 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbt!4NE9V9;Q|z{F_402glnu|NVW H3+rhU}0cnU}RumV4%%b!N9=4002wP1i=6R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b45e030dc395b317dc9809e25dd9c81cee1fd124 b/fuzz/corpora/asn1/b45e030dc395b317dc9809e25dd9c81cee1fd124 new file mode 100644 index 0000000000000000000000000000000000000000..399d968c0a69ce6ac79c1c2526752e1bef19130a GIT binary patch literal 86 scmXqLkZ)jOoWtV4fDN#q35K%pF)%RrKt-#NWfwHCv1&K6FbIMK0r2+)Pyhe` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b4642540a38fedb7e2f99b2948be00503a69d5e0 b/fuzz/corpora/asn1/b4642540a38fedb7e2f99b2948be00503a69d5e0 new file mode 100644 index 0000000000000000000000000000000000000000..1b0f79fb86d38972b3186d68168869270bba50e8 GIT binary patch literal 239 zcmbu3!3{uA7=!!&Po9vtNnBWfOKo8ROPHeXVh;9mcNNbF+GD>qrKnhq`?BASm41kF x(+ny)37lefv*JG6KNtSKcmQ?hEJ6SP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b47a4b3f55c8d6223dec28884fc68f7633f037a2 b/fuzz/corpora/asn1/b47a4b3f55c8d6223dec28884fc68f7633f037a2 new file mode 100644 index 0000000000000000000000000000000000000000..6afb9791cd9a10cac1b42d98310aaf28548e970c GIT binary patch literal 3606 zcmeHKK}rKb5UiQeUKNDBgj`e*goKzwn`?Z4AMgqOqXM#e5WITW!{!J1!9K>TcO&dU zrdJV#fMOCN&di~iX&9QW?w%^8><)^H;(6a?zM|4QoYdEQ{%cdmB zW>)cG(v&wO=XbX(Ug$d`*veYdM%Ee0Mo0HGZSHCZVut>^Jqo Y?={FH`9m4!_L+?XYbyQzWXLd-iVG!T<#T D8q7OL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b4c7c4aa4a0897726f45aa61b840726b0cbef86f b/fuzz/corpora/asn1/b4c7c4aa4a0897726f45aa61b840726b0cbef86f new file mode 100644 index 0000000000000000000000000000000000000000..1ab3dfef4ffb4b1a278ff71705fe04603fcdcd07 GIT binary patch literal 3155 zcmeHJI}XAy47D;eH(@{w6*E%@?!ql1&cw>lgH=NL61TF03sDBrC92>($Is7pN2AmM zMsqTQn(ulrlLEK^Q17?rVt+6EFXH2=c^nmNeVIMMk2Wh3c*WV;%mKgxU@51mJs^`S zBltw8K+sC}bA_U3V*H|fZ1u2LDHoB&NAPIXcrvE3I4T$>Es!LwBA-8b%c5Hc19{5| z9G4>RC1_>Ynz{?T_HK0IM!2FZvm))Z9kXt}w9>xDxR{ete6Lsq*VgZijaIeuMsIAl p(**4&nx~n(|M_og1+)MF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b56d8133391d91b023fd0e06a09f6c62cc614f94 b/fuzz/corpora/asn1/b56d8133391d91b023fd0e06a09f6c62cc614f94 new file mode 100644 index 00000000..1cf5392f --- /dev/null +++ b/fuzz/corpora/asn1/b56d8133391d91b023fd0e06a09f6c62cc614f94 @@ -0,0 +1 @@ +0€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/b57e6b53a973e06138526ba9c25ee85feada4d3f b/fuzz/corpora/asn1/b57e6b53a973e06138526ba9c25ee85feada4d3f new file mode 100644 index 0000000000000000000000000000000000000000..90eb056b9ac846324939e95c85214536c0abef03 GIT binary patch literal 595 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENEnEWMBZxg8@i$XqE`m8v_OgX0R@Z`bKIPLJczp#333ZCPV-e ClV@uH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b58862574e93a90cfdac660e408a437c1415b7e1 b/fuzz/corpora/asn1/b58862574e93a90cfdac660e408a437c1415b7e1 new file mode 100644 index 0000000000000000000000000000000000000000..89373c9fcd19f4cecea8929aa5a5165de8a95820 GIT binary patch literal 83 zcmXqLFlaDnU}Mx^U@%}1XEa>^ z23tm!|NqZ3FfeF0vS_t3r!cZGFffTSF)@ikwJ|V23}}Gzs~8j*7_=A}w3I=r7c{W3 iYB#bls4-M1E|4$)*+6|KF!Dm|Ms>m;3@0!!FaQAAZ!Goz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b5c40cff2adc035646538d66bb3d9040c457ef07 b/fuzz/corpora/asn1/b5c40cff2adc035646538d66bb3d9040c457ef07 new file mode 100644 index 0000000000000000000000000000000000000000..0c9bd90339eab2b41d257a02025b18d03cc8640b GIT binary patch literal 46 kcmXqLFc4s4*J|@PXUoLM#;V=O!obNa#>mWo30N2y0FuH3=>Px# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b5cd815a0e7c4ae3e1815c7b7c55c31ca27df163 b/fuzz/corpora/asn1/b5cd815a0e7c4ae3e1815c7b7c55c31ca27df163 new file mode 100644 index 0000000000000000000000000000000000000000..ba45c69882ee98f1de4a98b14e373bde68f01080 GIT binary patch literal 10 OcmXruSj;BG0D=GrOaT}G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b5e2a02fb0d5ab2dc9f7708e81aa3e18cbae501d b/fuzz/corpora/asn1/b5e2a02fb0d5ab2dc9f7708e81aa3e18cbae501d new file mode 100644 index 0000000000000000000000000000000000000000..b77aec410b517a024c103568ae1ed5836d9b181a GIT binary patch literal 54 zcmXpoG0 a1|)SL{cv?qJ1Er;H;)2$HAF!C0|EdRfj;d3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b5ea5798f6afb3dfb49344816e6ec310f2e1553d b/fuzz/corpora/asn1/b5ea5798f6afb3dfb49344816e6ec310f2e1553d new file mode 100644 index 0000000000000000000000000000000000000000..016f02912e3c13bc48dc238c9cf9c953aae34287 GIT binary patch literal 303 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4D8Hu4D1Xj;NSoM-XMVtsHi~$8%wJ}69WSSGa~~71IQAX71|_O Vu@q$BmH!anLk}wqpe_f62mmxeII92v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b5f9aeabf62e54ecaf0718a4b08ed93d11e202ac b/fuzz/corpora/asn1/b5f9aeabf62e54ecaf0718a4b08ed93d11e202ac new file mode 100644 index 0000000000000000000000000000000000000000..2968236f9521ef112ef42874963cf34668799a8e GIT binary patch literal 719 zcma)4I}XAy40T-O3Lzv04geEUSsZ975+e&o;5Z(Diy(Gxz_Hi}a@x`~AmEKo-p3yn z8f2&4;XX9|k--}X3xbuiAaM0YcNSEz0|NjoEM&42kIC5AW6-P6GR6kn!#PkeBjWt^ zse_gw(=6E1^ks bEXy)qahWe|xmqu*&5I)1E}-;0050$Z3+G?S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b63706a238c9f4835030ccf12a755aa9913336c1 b/fuzz/corpora/asn1/b63706a238c9f4835030ccf12a755aa9913336c1 new file mode 100644 index 0000000000000000000000000000000000000000..ed506ddac367b9c782907e6a6881717145d22180 GIT binary patch literal 408 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4D8Hu4D1Xj;NSoM-XMVtsHi~$8%wJ}69WSSGa~~71IQAX71|_O Vu@q$BmH!anGaRhI2u)D<004)>OM(CZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b648028a07a6df2e0a4b439d827865514ef5641d b/fuzz/corpora/asn1/b648028a07a6df2e0a4b439d827865514ef5641d new file mode 100644 index 0000000000000000000000000000000000000000..73caa84b64dd81f24ee2f29c26c934438f7491eb GIT binary patch literal 86 zcmXqLkZ)jOoWtU^tDNwbKR5U@<)JH%(40rL~zVQ1-gQl8|Zl@N?txChHF z95Zusqs~mys;KIi#+LX3r{OTGsxzDkpinoX&5Sh6E45~rR>du6GK1_GVIc`525<)U z(6#qoole88YtBS~Iuo6=1R#WF)qWInNx-mZY6$_r0Cr)ILhni8US46uLPiZ%3yVX* neOI|{jp~A}z4w2jw*ATuwcC$O_%

{v;s}lbgUjW6Z!E7I$o% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b6543c8211f9bc93b7a8d37a6c81cb88484554c5 b/fuzz/corpora/asn1/b6543c8211f9bc93b7a8d37a6c81cb88484554c5 new file mode 100644 index 0000000000000000000000000000000000000000..875ba0d3fd474fd4c5778fd7f4479c62889ea56e GIT binary patch literal 54 mcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2^h1$aQk7#RVmy959L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b675401475977b94060d302393d4ee384125e209 b/fuzz/corpora/asn1/b675401475977b94060d302393d4ee384125e209 new file mode 100644 index 0000000000000000000000000000000000000000..954825694453239ca5fa5033cd7238c358cf82f2 GIT binary patch literal 11236 zcmeHN!Ab)$6nvS~tVIfi9_$~8+sj+Li^qO~pA#0`llTpaSO3AQCx53GVI^%>h0;xs zJuK<4mnM*qoyp95Y)8GjC}&Nxxiizb!Mk|fK7guvhm{pkQGaRPmPWU~m%4C8*{nZr zVe}jlo+q(JMAW;g{?-y;x z^iykbtEI8UF`|v6VU%gfCjDvjv(lbyrKLpDB$BB^veAmu&qgbb5p5(5BicxRr5#Lb z;X-B#Hnm2rjq1y2##&>4l%}=uUC42ri1#Rdj|Qv#1e;(F^=Bq+q`zU$xc0Npj@t+^ zO2a5qKO+4nO+Op0IQ{Hu;~3FK(lE-jiqJ;l^bckunQHCpc#3rqLah=Kv0WbaFvj{D zh3)WB@1|w5ZZVi<@ji_8-i j7DnO2h1 zH!>P50I6mUm6c&hHE3ASu&}{^70lOTVPs%nfXIz(_GmCLhmPPx# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b6fec8028b121bf299d68e8d2f73b28eb96d605b b/fuzz/corpora/asn1/b6fec8028b121bf299d68e8d2f73b28eb96d605b new file mode 100644 index 0000000000000000000000000000000000000000..dab17c9baa911c5a463e258c0db2af9ce21299e8 GIT binary patch literal 6338 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Kywm%ryShX8j7!;Z17?>FtSQ(=K|NsC0r0M_vEDQ_`!cbLAjEoEn1`TX1tp-gD z3=GVS3?Qz-09(<-sAbUj8tz1c#`{c+j0PG|0Y*k9Sq6}2kO4@*n~{NmiGe}FAeco4 zS?>S;|NoHq|5#+UuyVCpv20%b)zK&{z-7bs>-%r)Qs=gGRu28Yg;|tgZ=r$v%&W)$ z+;QDHfAP-M{aI7GkFr>@Z0FSjLcRHELopY?mRZOdwRuW z`o{KmyX+Wg6n|s}uIXst5|KH`4BXL_OT)k&O}V3i3jsr|%pENjMpN#PNV%Y<4AiCn z|1&T$GF>N3xnxjpz(IH3LkLOZ#AfCh|i#F`N0o$;*2~oq|I7Y6q%p3p!ocVTy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b70956194b26d34601f8b317b7a0172f67057c5d b/fuzz/corpora/asn1/b70956194b26d34601f8b317b7a0172f67057c5d new file mode 100644 index 0000000000000000000000000000000000000000..9a5ff0a7c7bdb5f1bc6013ac201a0f7759a28002 GIT binary patch literal 32618 zcmeI5y-EX75QS%Vz-K8TO83g%6G4of><$Ii&ES2&{h19!PH z`97OuF}b>D&Y77s@vhxHUM`l;d)4-|svoTL;is~yTS#>_Ee0V(fX}fv6 zTs&RWRl9L=GqJ`{6P29XcV|a(Rzo)<8>EZ{j`e)ba(%;U%{PZs#HFIk?_7fxBlzGMP-)R7}JQ zM?P~@&^ANkW0q24l@!`4XqzD}3U#3MIu_q5_!i%?-?HDb-)br*VufR&Hc!7*VwDuy zDrn0r#Vo}v#Vn<%n1~gQ%u)*4W@voOQcA3nLR$rGGsH!q4zym!;#&pZ;#>Ax_FMK_ zO~pj4a4gj3>9_D##q6(q_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b74f52966228929fbbd575819a91242c6f5fc6be b/fuzz/corpora/asn1/b74f52966228929fbbd575819a91242c6f5fc6be new file mode 100644 index 0000000000000000000000000000000000000000..f984be6ee2abd171e43dc714732cd4f1ea158f55 GIT binary patch literal 1797 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>W$Z9h%Fc>gcG+2P> z27^2%ktBnoFYYWmHqlMzN^SoB##C9|DObdK85j)=4Gawp42%s7qYT^)T-lgIWn~!| zeOasxEEk$bm>P;0FfcSQfQ?~d{%dY-2Invtm{~9wAh_n{L)*Sag8nl{^6p=A5EmoF zZXku20O1fbV=zE6lL>4lJVc4G!ho<9=Jc?F#E>Dv*>ngQI#@x|z{i#;iAXcBWXTB1 z)eH>mSTgcZ519rgNM0IEmf)bkD5$BJESYdy(EusRKmb%ng>q=aMVPg~!VC-ypj5~R UuB19Z+)x%(Sma^q2dOmx0G-rD%K!iX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b7bacdfd0b8cda665fe19570071a8816cbd92aad b/fuzz/corpora/asn1/b7bacdfd0b8cda665fe19570071a8816cbd92aad new file mode 100644 index 0000000000000000000000000000000000000000..2a7ff2833183dfefbfd9a067e1f14a3209c296f9 GIT binary patch literal 218 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcXu1h%*|1lo){c zEQ|~cAa%^4vNDV)ToEKGWn?y3*-4l#6lJJV(nz|{42MfGYO^rF0LZza1`SMa3>X-g K!R}&UFaQ9>${&;f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b7cc71c62749290d79d327da444bb2c4b34b52f4 b/fuzz/corpora/asn1/b7cc71c62749290d79d327da444bb2c4b34b52f4 new file mode 100644 index 00000000..e0d76bc4 --- /dev/null +++ b/fuzz/corpora/asn1/b7cc71c62749290d79d327da444bb2c4b34b52f4 @@ -0,0 +1 @@ +1 ‰ \ No newline at end of file diff --git a/fuzz/corpora/asn1/b7dc6c57419cab4f2285221280ffd8c41c918eb7 b/fuzz/corpora/asn1/b7dc6c57419cab4f2285221280ffd8c41c918eb7 new file mode 100644 index 0000000000000000000000000000000000000000..9aa879ae5fd6b63620b556ff1ddf4625dcbe6170 GIT binary patch literal 327 zcmXqLU}92ZFlaDnU}IXwz`(%5+vai3f`y4Oj`jb4Rt5$JCPA1A0R{#G2JuElg9RYf z%%QTXEL;W*4GnCJ+ANGL3=9ShY>a9wj0_N#HjKp_Dk}kFqlm&)AVd)?=1^G~Mied< dLqPISi?J9+tP%3KjL1iI58S)@NZw(9001PJCQtwX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b80ade515cb4cfa0d63fe7b449775a2cfb9178d5 b/fuzz/corpora/asn1/b80ade515cb4cfa0d63fe7b449775a2cfb9178d5 new file mode 100644 index 0000000000000000000000000000000000000000..ad12cdf42266568d2d4cc7cf635315ed6e22f208 GIT binary patch literal 517 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+%nZ^0|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu wW<~}O*MM49RBZt{ggRERKz#9m{=R?&Cv|*5ATHQgwHdZDfPgPJhfYNZ#%x5ndF?Ygk2r zbmV0qyeJUU?xiPGOm<>q0VGmX$a@WuUKGeWtP)1dDWpy>3Iv<57X^}0B}3+Tk-Zy6 zSR!L<>4_+au#5(U*NYxmIbLK$M-?A(Om6O|$bQivW%C+GrSfvi+*gQu9rp|K#=JCZ zB)#Ymv}D&&2_d!_auiNPa=&O0Hh8nrHI*R3oEYSd8pY?-DUfpPsZ;M=>BVjaFH%i_ zr=?U#8MLb+ybxgOJP2|g)$A9cqCpBaB#-jsC5*h#OYXI+K#m3Qdf_68)k?0y9k&1;V!_PmL-s9;ED- z=8#l-mrK?5OAsk7*DLL)gpf72ly`Zk5iaMt7g3{9#gEv=Yz~QxD2#B1SR>C0QXnvd rGM`E(@@4Rh31775$smep=bm?u$pY7(bL-E&(AF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b85ae1c3bc9c76e35341a8e35ad44560fd7f7972 b/fuzz/corpora/asn1/b85ae1c3bc9c76e35341a8e35ad44560fd7f7972 new file mode 100644 index 0000000000000000000000000000000000000000..0d574fd73b3ef1e76e7e4f7cd58f6e68c17e6a5a GIT binary patch literal 11 ScmZSLWcbhUpMiscg8={zodOyF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b85af3177b32e37fb34ea876be48d1b9995e144b b/fuzz/corpora/asn1/b85af3177b32e37fb34ea876be48d1b9995e144b new file mode 100644 index 0000000000000000000000000000000000000000..3bf78b2229f28f592622b8d6257a8d0ece70c962 GIT binary patch literal 160 zcmZvUu?>JQ5Ci|M=n(~rP&r#LmaELcmTA!=B_M=5+h_&yAS3u27lmudtv_k4dDW1y%o6t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b8602ad82d9f606f95f0623895a88df8aea03463 b/fuzz/corpora/asn1/b8602ad82d9f606f95f0623895a88df8aea03463 new file mode 100644 index 0000000000000000000000000000000000000000..d38a095ac2af1029284c03e692d883f547572ff8 GIT binary patch literal 39 rcmXqLU}92ZFlaDnU}IXwz`(%5z`)SJ59TSduxi({Fo-cQFfafBgpdWu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b86656f595db621c0e68fc13b72b59ef052aca74 b/fuzz/corpora/asn1/b86656f595db621c0e68fc13b72b59ef052aca74 new file mode 100644 index 0000000000000000000000000000000000000000..6ee824305b0c50856772adc19a080c6b8a7da608 GIT binary patch literal 5576 zcmeHLu};G<5Ix7#0R&P8P!>Q!LTUv?y0VrJ;0O8%EKFV5UIZ!~7#SEkq<_#q$Vc=y zIzy2n75Q95D`n^qg#f+`C;MW@(fRJ)J%-siAKVPy_f;6AU<3*sVwixLXbhIeC?;Zx ziNrKxBCTX#?M7V~8Bwg7b`OTpz2l>;TSkg8xM9@UHHm7A>Yj*dwcO;lt!>olUh{sQ zVUiX{w000+p0n-2g literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b8a09d129aef2dd2992279c75a10716e176b46f5 b/fuzz/corpora/asn1/b8a09d129aef2dd2992279c75a10716e176b46f5 new file mode 100644 index 00000000..d0e7eead --- /dev/null +++ b/fuzz/corpora/asn1/b8a09d129aef2dd2992279c75a10716e176b46f5 @@ -0,0 +1 @@ +$ÿÿ22Å22222222222222È2222ò2222223222 \ No newline at end of file diff --git a/fuzz/corpora/asn1/b8ebdf652a99ac408bad18477fd841c4541fabd0 b/fuzz/corpora/asn1/b8ebdf652a99ac408bad18477fd841c4541fabd0 new file mode 100644 index 0000000000000000000000000000000000000000..7fb376cd763158943ce53152cb252a8140c0e41a GIT binary patch literal 580 zcmd6h!3_W)2*e0)hjB!gVNZjJ77Ty=K;>$3eV8^eSu>Nr@&#*W)y9Huj|BSNiT!8| W#r$S0C_44k4H78+eB+!hBBm41Zf?^6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b909c6d0754416478da027e42d6182c5b16a7ff1 b/fuzz/corpora/asn1/b909c6d0754416478da027e42d6182c5b16a7ff1 new file mode 100644 index 0000000000000000000000000000000000000000..ba20a97514ee6fd47c35317d50e3e7d179ba0334 GIT binary patch literal 72 xcmXqLU}92ZFlf+eU}K8>$snh23LMP?% zY`uD4dRHFJA4YOfoJ%nlk!O)Rxms*C8?D~Xns2=>y>lX3m7^zp6p_M7eW{1L@G_Bo zyWL*iH*YCiw4%^$6m_gb@vYp{A`%xQibT~$kNSl#=(OF$N&|^(AeP*HxfLFgUV%{V z$a0gY$V6GlPHMwYrMzEi;>sib6U$b zh*U$WC7JxgdOc)4&<(mlci3Y!=utO+zsG9e!cu_*%X;J$EbA!X3-|)QX!8ZQ02fJc z0kKA|k_@Dpfs0|3n?yz4w8JPjQACy-Ttp_y@{U5PA=Q#dHP8*ZYvaM={RfZ1MGtYY zJ2b>Y;5-D*88M3Scr8;(X{FA@pS74|L~WWpPXKcqzCN{An2_eTVd&YHeuey@inM~S%0puu{8_;?l}&-l+taB kce#2FDgw|$b>#(s3G&K6ahei7A!=Khp{OQ5J!|=;FSMp3!~g&Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b91cd78d64af5d22ee5e61f4661ce111ceb1d91e b/fuzz/corpora/asn1/b91cd78d64af5d22ee5e61f4661ce111ceb1d91e new file mode 100644 index 0000000000000000000000000000000000000000..4b7b228f51073341ca8ba88abb5e2865730b04b6 GIT binary patch literal 188 zcmXqLU}92ZFlf+eU}IuF$AXbI&$@) Mn1Am-*c=c50F+`gzW@LL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b93480ba9ad29a60d87f66cff4704e2efd53423a b/fuzz/corpora/asn1/b93480ba9ad29a60d87f66cff4704e2efd53423a new file mode 100644 index 0000000000000000000000000000000000000000..878e07dd3c37d47a9faa160b98769d200cd4fe6b GIT binary patch literal 580 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1H!>QC zGa7(Y8Z@vmhsw&Za2Yf#Xk=<+U;rxt1Caj6ED@$R1`G_$V2u#dzi z)OowyW{2#t!X!m=1Mj>snC|`A8(ceYF*TFt2?3@6kQ+A*jbnIAvX@`DT&Nn|?J zfy6)CLUA;jsC$pp@=*L;wI3o#H1hCqD8iO}n+nR1I66_9Tannms;EX@1nG@cuXSgz z3MA&_o^<>|(t1=`S^xaON#RdJ51+D5BV|hgFj>mp}%PnrQ{Oi#D zi>ks1imDP-rTPn0aZ#si!=8FX+5nul$qo=;<`xKW!}kxb%W;0k1oFpuYYiFLsRk{36JOTwf&&a(xKLi!$c>gY;KH7?Qh4A}&1hMJ zC8uDiE=Ox9Xp03)*kB1kTzsdSwm$!e+EJjH{n8aH)pEcFjBL^r1%E zHKXmC(Vn+0U3!;8wyYWLLk-|a*1)A2ls?qC^Y4HDxLUab;haG*mNnY08T9QMv=LCc Q4?0rV%o+?uACB>H0KLlWLjV8( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b97d605bbd12a57cb782f50e71530016433b60b3 b/fuzz/corpora/asn1/b97d605bbd12a57cb782f50e71530016433b60b3 new file mode 100644 index 0000000000000000000000000000000000000000..519f32e98c097a7a60894cb063ecde0571e09505 GIT binary patch literal 39 rcmXqLU}92ZFlaDnU}IXwz`(%5z`)SJ59TSdu-4bJFo-cQFfafBhlBLz{bca!@$4*X2`J^7#J8ZFfcGcW%$qqFjQa&P*V$bM-37yLBWI! E0I2FMH~;_u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/b9c978b0b3441d3c45c07a49a3143c9e3aac4960 b/fuzz/corpora/asn1/b9c978b0b3441d3c45c07a49a3143c9e3aac4960 new file mode 100644 index 0000000000000000000000000000000000000000..f6385885ceadd006ad7278f713207b421e8d95fb GIT binary patch literal 26 hcmXqLkZ)jOoWsJxz`($`pn;85yOD)KnSp_U0RTbY1NHy_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ba145b7335c11e33b52f75815b1f425e93c5fba5 b/fuzz/corpora/asn1/ba145b7335c11e33b52f75815b1f425e93c5fba5 new file mode 100644 index 0000000000000000000000000000000000000000..e1db66b97a10a249037186fc484288bc0fc7e127 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4F`~xu=5P;Djm_-I54F+H} zQ1FjMW(zA|08wldV2z@7UG>H@Jv4|aU86TYkI8WW>s%f!gYY{kHm^(p1fV{^Nw zS4^gFY=5`QZe>%hu+HY_GM2KrHVi*rzc<*scisLak9MqDmD6aMG9{XG{}Pp?L$@;k DK~0%L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ba5ae8499716a33f65cffedb0c18e3e99275b8e9 b/fuzz/corpora/asn1/ba5ae8499716a33f65cffedb0c18e3e99275b8e9 new file mode 100644 index 0000000000000000000000000000000000000000..4b4012fd68a7c23ba2072ed963bd507591bad841 GIT binary patch literal 7 OcmZQ$)ox^APzL}5T>#?% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ba5c8c03ddd29f071f8c3f9e013a326b85bc2543 b/fuzz/corpora/asn1/ba5c8c03ddd29f071f8c3f9e013a326b85bc2543 new file mode 100644 index 0000000000000000000000000000000000000000..ec5e8c96e2bb0dc23e2b7e8d76ab8d276ce4e53e GIT binary patch literal 52 pcmXqLVB^$k^Jx3d%gD~OpuwPlN%21e65v2$GcYhRFt9N&000Cl22B6} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ba67c52a7438d98e5a397d6350c108304307859b b/fuzz/corpora/asn1/ba67c52a7438d98e5a397d6350c108304307859b new file mode 100644 index 0000000000000000000000000000000000000000..1804ff6f8a82571786184bd89d9bf36e8e96cff6 GIT binary patch literal 19 acmXqLFlZ3uHfUgDGGO3g~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ba79209df00b766c3b242aef865a9814d876351a b/fuzz/corpora/asn1/ba79209df00b766c3b242aef865a9814d876351a new file mode 100644 index 00000000..eea1733f --- /dev/null +++ b/fuzz/corpora/asn1/ba79209df00b766c3b242aef865a9814d876351a @@ -0,0 +1 @@ +0€¥0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/ba87ab5e0c8cba3954836e861058d19ace6b110d b/fuzz/corpora/asn1/ba87ab5e0c8cba3954836e861058d19ace6b110d new file mode 100644 index 0000000000000000000000000000000000000000..3aca07328105cd4a9805ef56f50c0b650f635475 GIT binary patch literal 5744 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+tPIir|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*8ratO^jLwjj!SQ4I1w=F)|uxKm`~XnPmTfY(fSM2*79%%p!v<_y7O@e@Og) zEHYbIxmtNxHn0BbXcQLUvSIu6{Wo^0b6YwqhyLHfEXuIA(8PV_)#HEexNe=lc<1W= ztSQ|`Su9z$^YQG>-m<^mNO;0dFXn@n!wv~5nHV)(6O55n+-siPvGu$1Zy%-m&(1oR zE{I}xPjR{0IJ1?Z&V)&p0m*s@;D@`Hk%^I!*@}TB>r={|$HsO~ub52V*#2&p9lpS2 z*Aix9@Mr@?0SyB8Ke}__Ze0p%Kz2xz!doy^?kKVVQ>9Lp$Qn5$gd|R!jW12&#vtJJ{}QZeSO*OI_Dgt-ripvL{P)(6t=Xa3552t?x Aj{pDw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/baa7631578546bf3b2df47820de326fc0a0cdef7 b/fuzz/corpora/asn1/baa7631578546bf3b2df47820de326fc0a0cdef7 new file mode 100644 index 00000000..f8b0f421 --- /dev/null +++ b/fuzz/corpora/asn1/baa7631578546bf3b2df47820de326fc0a0cdef7 @@ -0,0 +1 @@ +0€(¡0€&‹; \ No newline at end of file diff --git a/fuzz/corpora/asn1/baa854d91f34241bf1b147d691e98280e3f1380c b/fuzz/corpora/asn1/baa854d91f34241bf1b147d691e98280e3f1380c new file mode 100644 index 0000000000000000000000000000000000000000..8a3c65662b1289a167884c86182add2b12712048 GIT binary patch literal 370 zcmXqLU}H2`&|uKO2BV=|iBxs@($Z4BQY66A$iT?JCIOZ}l_@1G2LgCaRRYV&J8(A0>ndKOmL1rxl5yl4p|Nl2Yb|oXoOv_;N!2yLG zP{S7^A}+M3lcH!H7YfWYw_^B5_pkp{$rtpD3+#Xzxf_2m_@8CS{3pTU%KHuakL;{$Y;5c; zPm;ZlMr2FRYyu(k6?mCFqeR&Yjx$g{)mV(p`PJ>kLbkeQ@T z8EUY56pdg2US92pVWZgf3P6hps~{VKDvsBWX6m5yZu^Zla9H^B0yu%iZ4jp`>pfRo z>P$YCieNq8SWn4Ka#vMplB<-lN$P5p4)Sbqq(o#g_nswI0?HbvKM_g1?H90b+Xi;r zfo+%Bt)p?5*_N4&s%ASH|K--x)oja}jf%!mfsN`njtXp4G>!`F|D$m;35IqIbIJ)n VPlAsU){Sg#@6I*KFfA{K)^8)EoGAbR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bb01adf15bf6e3eeed325f3a8ace826260b68b0f b/fuzz/corpora/asn1/bb01adf15bf6e3eeed325f3a8ace826260b68b0f new file mode 100644 index 0000000000000000000000000000000000000000..64d138dcabf24507f1301766257f47427f9e8122 GIT binary patch literal 16 ScmXqLU}7?0f`I=F3=9Afasl!H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bb1030e2301fbba64d6d7995bda689aaa23a10fd b/fuzz/corpora/asn1/bb1030e2301fbba64d6d7995bda689aaa23a10fd new file mode 100644 index 00000000..e6392717 --- /dev/null +++ b/fuzz/corpora/asn1/bb1030e2301fbba64d6d7995bda689aaa23a10fd @@ -0,0 +1 @@ +‡ \ No newline at end of file diff --git a/fuzz/corpora/asn1/bb274a198c6e65a627aabbb94d660c8b9ef9e370 b/fuzz/corpora/asn1/bb274a198c6e65a627aabbb94d660c8b9ef9e370 new file mode 100644 index 0000000000000000000000000000000000000000..4df61988323da095c9972d7177259984821506eb GIT binary patch literal 6976 zcmeHM%}N6?5dM;^u_8i?9(wJm(q0C|Dg~j?OW(xHzJsCQzLq|LuOpr+Nwzdys4X;E z0z2PcvWFdpZ|CQm2^oD|iAnXdy1D9$`6mpyM@k|xT22)}ATt#6p&);zTYWjHR^P8u z=$<<$+^H8RGISq)h+i}?YP^^AI~iSk&>Dae0IUz8A@2e0Jm~K{xOkh2LZ|^0u-KX} zfw4V1yH649etFZ8{k1Rviml%Gj7v1XIsT3_MqhM2!Qy#N2Vr8^Qw2QKcK4T@^ kX@t8o2j2AsJn+PjwL;_$dqRi(@2=_b;dwSQhwq#I0Oe+RbN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bb508362b2ea5a7ea0a8a844b13a2894daf88b69 b/fuzz/corpora/asn1/bb508362b2ea5a7ea0a8a844b13a2894daf88b69 new file mode 100644 index 0000000000000000000000000000000000000000..aa9ced51bf3c4717af232ac4df896fe5970d80d9 GIT binary patch literal 1240 zcmXqLVB>CMZ1d3K{mv=C$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OoD72U!yd_x=P>-p Ss@=%Kpv>&Tz|6qF@E-tYB*0bx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bbbee86ed3a330fd7c2691f941dd6c0395798a54 b/fuzz/corpora/asn1/bbbee86ed3a330fd7c2691f941dd6c0395798a54 new file mode 100644 index 0000000000000000000000000000000000000000..53d0338993b6aafbac46761897297ca5389d0214 GIT binary patch literal 116 tcmXqL5R@`#U}G|5kQ4Z)A9_kZltrIGKeSdql!1YPfpR(hP*f8^0056k77+jd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bbd34163a46c69e05cd190652973cc6ba0886b35 b/fuzz/corpora/asn1/bbd34163a46c69e05cd190652973cc6ba0886b35 new file mode 100644 index 00000000..12a5899c --- /dev/null +++ b/fuzz/corpora/asn1/bbd34163a46c69e05cd190652973cc6ba0886b35 @@ -0,0 +1 @@ +¡€ÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/bbf45f67a7dc081cb221d0bf1bed6f4497604e94 b/fuzz/corpora/asn1/bbf45f67a7dc081cb221d0bf1bed6f4497604e94 new file mode 100644 index 0000000000000000000000000000000000000000..f98025e4d73d2a024c54de4d5206923f8c2d85dd GIT binary patch literal 2 JcmZQ*0001j0D%Ai literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bbf8059fa2a470eb76bb944102da2b34747fcdcf b/fuzz/corpora/asn1/bbf8059fa2a470eb76bb944102da2b34747fcdcf new file mode 100644 index 0000000000000000000000000000000000000000..af3e533e16b77bbdb5c0e1fc209432b36aaa2ba7 GIT binary patch literal 7 OcmcC$Flb_6cmn_ka{^ZY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bc01ab63f472ec32c7fd1dbb4d641ffec14fe997 b/fuzz/corpora/asn1/bc01ab63f472ec32c7fd1dbb4d641ffec14fe997 new file mode 100644 index 0000000000000000000000000000000000000000..e6f7ab7b47ca62345df87c87f3a6beec6ac41b5e GIT binary patch literal 516 YcmXqLFlbo7)WE>NFiMZSaDYTS0JM2^V*mgE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bc1d039398751dc204d299dcd6162fc5fc5cac7c b/fuzz/corpora/asn1/bc1d039398751dc204d299dcd6162fc5fc5cac7c new file mode 100644 index 00000000..c0754e9b --- /dev/null +++ b/fuzz/corpora/asn1/bc1d039398751dc204d299dcd6162fc5fc5cac7c @@ -0,0 +1 @@ +ˆ ÿÿÿÿÿÿÿÿÿÿ diff --git a/fuzz/corpora/asn1/bc30ba95b740183b919a4758fd7a27931e088d5a b/fuzz/corpora/asn1/bc30ba95b740183b919a4758fd7a27931e088d5a new file mode 100644 index 0000000000000000000000000000000000000000..baab5ea2a92a2b0171eb5ad0066cd9a3033d0632 GIT binary patch literal 222 zcmXqLVB^-}ZEGucVB{2FX4=otU;u_pOa=x94Qx!>%nS?$3O;MA)#AIGXn;s!Hr&Rft*%JBYLHGHs~5UX@zw zFIVs(5sh`<(=4s^hL8j_h#i1xn&I90@df#?IH&)AUyzBLEyb+^sq8$l>np#BJ_R1D Chh5!Hn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bc8f98701a834d2b0cca6875c983aff4f23fea6a b/fuzz/corpora/asn1/bc8f98701a834d2b0cca6875c983aff4f23fea6a new file mode 100644 index 0000000000000000000000000000000000000000..554dc3ab717207a7333aeaae7bb2daf9103c9eca GIT binary patch literal 26 hcmXqLFc4s4*J|@PXUoLM#;V=O!XU%U#K6G7002bh1Kv;wzjj^_!Wb3 z^eVjUpew1gNy&vP*y4Mc|4^&L1e0MXRcRW|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4@VT<<4VcyQf!7rf+P2x65uca7P1o z5T{&51_lA_DR;D37)`mODHo;A92pgwHMB|_Ef#3dS{Myn8aBmn1+FP+O)+LBP?H$| Dj@Py% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd1537a19cc45c0f0ef9cf2aa3d9b224992012e1 b/fuzz/corpora/asn1/bd1537a19cc45c0f0ef9cf2aa3d9b224992012e1 new file mode 100644 index 0000000000000000000000000000000000000000..43812ae9744e47539232dddff042cf9873d326ce GIT binary patch literal 7 OcmZQ#{m;N)U;qFGz5!v`HOe1?$4UieU!zL zWji0w-s~;=>y3mb?DS$jcscBlppuDE!!^MeNyWY9$sJq2EC2RUy8rB~bLoO8cK4LV ztF10G8R|?R&P8^@|Nnn|p)O`%WMX7wwqjt(`jm3#v9aCLD<;!7w!hnD$H>O2-N?eA z$SlXe%)r3P5DoIeNz?!TSr`}?gyDh1$iQIGz{b*Q(8R#Nz|6=1;u=sdaKWyIIdxzH zR~BpFx?F9X**Y4ym-pY;rOs{XOm500CUDUJp_I!stWqvnfhz+k7BB*L6{uK1O}S_Q XBXA*Q0vjXq0_Ivq;)(`FaKQ-x*Dg_F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd2f849bc0d30c2fbf19a4b0fff0760b1a78ac5c b/fuzz/corpora/asn1/bd2f849bc0d30c2fbf19a4b0fff0760b1a78ac5c new file mode 100644 index 0000000000000000000000000000000000000000..34893996a166edaaf4dedd3050255f2abb50e8f2 GIT binary patch literal 88 zcmXqLkZ)jOoWtV400A6eDqWkAg_A*xLAx<0rGSBjnSl{14F(NRP8EYfD2Em!gH|hZ R3gdzXHdgIM76xgEBmlRN38(-7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd2fbc35a7f5c9773a1af4fc3ec2cb1eabbf5a02 b/fuzz/corpora/asn1/bd2fbc35a7f5c9773a1af4fc3ec2cb1eabbf5a02 new file mode 100644 index 0000000000000000000000000000000000000000..d833d397e8dbbc7fb8df117d2e26d5f437fd20cb GIT binary patch literal 533 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA;%nZ^0|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*MJ-=7_eATwFTr5s#@`Z{=R?&CslocD=v`ZjDdk+DTpvL{r~^J0mD`ho52?V DqS9-y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd328893629cc8ea5b6aab62019c946ae24bc18f b/fuzz/corpora/asn1/bd328893629cc8ea5b6aab62019c946ae24bc18f new file mode 100644 index 0000000000000000000000000000000000000000..135fc740151aa75deab1ca1c65a16b816a987f6c GIT binary patch literal 3352 zcmXqLU}92ZFlf+eU}IuF$AW#GcYh9 z)WKNjHjr;38_0!lo2h7SLj+m~{B=V0A$cJHaxbbm*h6Y4`iu7Q@PeJK_#RTcK=||v zE96{3N}5I1N4+#U7;+P8{sxx|@Z3oAasb69GV>!1^ZD@053sTdEf2!Q(NhEM%23L} zc3|8EF1!YRVTBfngeusR)W~>{f}FBQg(Xfj_oGBM^(zo|R0}96-G^^2G1SY8fk|4> k7Bq}TX-QKr)uEY7$Lx+=e+v}f`#U&X0&Zb~`Zgc{0DM|DbN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd36ff181f36ebc251716d7ce74fdaa0cfadc979 b/fuzz/corpora/asn1/bd36ff181f36ebc251716d7ce74fdaa0cfadc979 new file mode 100644 index 0000000000000000000000000000000000000000..1e108648b0cee8175bd6bd643bcaccde822f8241 GIT binary patch literal 1505 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|3 zlo>RzF^9^^uy7ePv@kX?Ff3qTVt@jW=Flt=rZ)x*49s9%qh^eT$7uQ(%`YRk{1~uu F5CFB404M+e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd735d68bfec8d8c9e3152249f7f508d088f1bea b/fuzz/corpora/asn1/bd735d68bfec8d8c9e3152249f7f508d088f1bea new file mode 100644 index 0000000000000000000000000000000000000000..c6023e55aa138dc9f6440751fded8e03e3153301 GIT binary patch literal 5 McmXqDHfUe~00NN!Fsd6^eO&Op O!9ay8B|B7+l??z>gC_6* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bd8d27c03321c663ee2f2ef8340d1f6d14e87848 b/fuzz/corpora/asn1/bd8d27c03321c663ee2f2ef8340d1f6d14e87848 new file mode 100644 index 0000000000000000000000000000000000000000..bff7014cceb1e207f9be8ee8417f2be788c00faa GIT binary patch literal 1455 zcmeH{zY4-I5XQetVpK$^=+M=*U2YMiAUO6-T>20}Ft4Rg;OmG}B}q&FtfpHpL+*zA z@$nsZZ1l!bW-VkQ3U|Pw+%p%w`;gfm=xn@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bdb61cfd2239642fd1551a25429705813f1e6dc4 b/fuzz/corpora/asn1/bdb61cfd2239642fd1551a25429705813f1e6dc4 new file mode 100644 index 0000000000000000000000000000000000000000..aff4fe9ec50eb34c7e8e8a3a7a11584b9cb1f2c8 GIT binary patch literal 1424 zcmXqLFlaDfWnyYOg-t09Sj$3XI=;I>n!-AayufkB+nU;(HYY+z#! zm6efaNi{H7(6A87x6o@aU;qJw1~w*9E?Isshk=19RF;{UVIh=9EcpKa|KI;V{{LrS QhwA{FE6c#Z%m}gs0Cp&bp8x;= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bdc61a463b076c8f2865ef8636919ddf59ab6d85 b/fuzz/corpora/asn1/bdc61a463b076c8f2865ef8636919ddf59ab6d85 new file mode 100644 index 0000000000000000000000000000000000000000..30bedc16571f8759252d1eecb05f54ca5b3463a5 GIT binary patch literal 524 zcmeH^F$%&^5JdMU`h%cg6VgOM5E3-Sm{t$q1w4ZHn1DnJ4`7kv=LWff$1=h%BtK$d zau$?=kX)o?Rw@jV_BF}Wh;`jjp41Z)tO{_y|8@J3v+Q3^blt&goy9F V{GI)rS^kyTS|kE7eRq$p*%xPoe%=58 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/be067dd243ea5210854d857119f9769bface8202 b/fuzz/corpora/asn1/be067dd243ea5210854d857119f9769bface8202 new file mode 100644 index 0000000000000000000000000000000000000000..b74e381e9b18dc0c7bc7cdfe380c866e6a4365da GIT binary patch literal 819 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4D8Hu4D1XH3=E+xW*~}zf#Ki(|K1=v1Hxr6XkcS$HE3dBU|?os x0C5fAR%nxC#Zr)gSN=nQ&!`nR;{r=SIY1&~G%ipQEmAVsU=3Jx;SdA?0E$f&YXATM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/be26d7dbb85efbaa1daae1155cec4aa4b3d7ed88 b/fuzz/corpora/asn1/be26d7dbb85efbaa1daae1155cec4aa4b3d7ed88 new file mode 100644 index 0000000000000000000000000000000000000000..849ec7cf9829975693bb3713ca864c4d99dbac80 GIT binary patch literal 4 LcmXqDYG42W0m=Zg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/be86afffb7185e770ce184a01f98d16db52ba848 b/fuzz/corpora/asn1/be86afffb7185e770ce184a01f98d16db52ba848 new file mode 100644 index 0000000000000000000000000000000000000000..92f07351cddd970981b55e4a71dbf145a4cc6369 GIT binary patch literal 6 NcmXqDF=!BA000A;0QCR> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/be94f79785b58e4b1bfc7ebe9d9c1d3f36817ea0 b/fuzz/corpora/asn1/be94f79785b58e4b1bfc7ebe9d9c1d3f36817ea0 new file mode 100644 index 0000000000000000000000000000000000000000..88542b1ed44b7be9f7954167e5ea6fa55c6264fa GIT binary patch literal 28 gcmXqzFc4;A*J|@PXUoLM#sOw9GjK68GB7Xz08X?7!2kdN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bec68372ec59f130f1999ae6783b285f2ef44982 b/fuzz/corpora/asn1/bec68372ec59f130f1999ae6783b285f2ef44982 new file mode 100644 index 00000000..70605203 --- /dev/null +++ b/fuzz/corpora/asn1/bec68372ec59f130f1999ae6783b285f2ef44982 @@ -0,0 +1 @@ +0 0313043103 \ No newline at end of file diff --git a/fuzz/corpora/asn1/bef02d3fa4dfd5a07ea256bcfca0b7e099bc235c b/fuzz/corpora/asn1/bef02d3fa4dfd5a07ea256bcfca0b7e099bc235c new file mode 100644 index 0000000000000000000000000000000000000000..739b4feb72f734e1ad0059782eb1e8b648ec236c GIT binary patch literal 125 zcmXqLSkhq7VAx>Lz{bcalfl5i_#X^786W`6VQ645XfR;F1{vkCiQ*DV{r~?zrwr6+ G1_l5hOd5ay literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bef21cbcc1133ae6b1c4d14b7e5e80d2cfce4271 b/fuzz/corpora/asn1/bef21cbcc1133ae6b1c4d14b7e5e80d2cfce4271 new file mode 100644 index 0000000000000000000000000000000000000000..02b3253174dfad7e71635d74975c7fef42eabb13 GIT binary patch literal 1236 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePEM^pC3}R)h1O}im fz~cYm90a5$gVB_PH8+i>B$87SqC^4(9%BOlOHb9U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bf2d96e734dc999425186a4d0961fab5e550cec7 b/fuzz/corpora/asn1/bf2d96e734dc999425186a4d0961fab5e550cec7 new file mode 100644 index 0000000000000000000000000000000000000000..ded275be47938258f8070b56ae21dccbdf8db2b0 GIT binary patch literal 247 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7!4#C4Ipd-VK#QH zHji_*OpI(CU)H(FP4{EUgAj3=9m+ jj9{(-hRx!{*_@VYY?*9fY+`O|U~b940CyP3L6`slK|vy_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/bf3cbcd284991149870f0c8589aba0132b314488 b/fuzz/corpora/asn1/bf3cbcd284991149870f0c8589aba0132b314488 new file mode 100644 index 0000000000000000000000000000000000000000..93633485fc126e64cd46abc2b0d20ad9b20b9e3a GIT binary patch literal 796 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOQOmGl2{Rj`)+jL=1|u*XFex%IF)`P*8vh3#UKi_Z>S)#s?o z0IhQczx;s%Kwh%zW)CC|0!WIG-1Yn|nIqM-Cm_T?>i0Qu{n5w4E9Z?R9y@c>+W4yl OdF_0L&*G@}5_tf#khwSj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c01651522f449f2ae8b133d5c6ed23ffe11e6add b/fuzz/corpora/asn1/c01651522f449f2ae8b133d5c6ed23ffe11e6add new file mode 100644 index 0000000000000000000000000000000000000000..1f46d391b02596b05a4a9980a1f9e11f2551aaaf GIT binary patch literal 1481 zcmdUvI}XAy42FLvkivje2E+nPNT9;tvcdtl07u{+W?|(DaFSk#ofSEyDhNtxg@kaV zI<=k0C);6h?P$N=Upf?+qp%o~7%a{(11DiW95KM?1KxFJz>@z_zoVJ=vT*2vXxD(V zA#5uolR&q$2SEbKcGDHQ7=4=Pku1(`dV|K6<)}eTN8=T|ntQbzc{QD;##g?lkb6;_ z-XgUGnZq07svr1B0w12JThPoJ#1Ah)X*5~!4Cq^n_M^{dk>OP9+( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c0795d8d10473ce2b965c6b5732b37e9dc0516c7 b/fuzz/corpora/asn1/c0795d8d10473ce2b965c6b5732b37e9dc0516c7 new file mode 100644 index 0000000000000000000000000000000000000000..272324f44749665e7ee6b36d615c7e684e1685db GIT binary patch literal 64 zcmXqLU}9uoVq{_xWnf_BRc>UGVNh0H$iyVNmx+;Ay^)ED;U-*)2}w#BB&E#2000Ih B2v-0A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c080e72b6f95e3db529114ed03affcb3da80b3a7 b/fuzz/corpora/asn1/c080e72b6f95e3db529114ed03affcb3da80b3a7 new file mode 100644 index 0000000000000000000000000000000000000000..5ba5b0daf9c78d6c067f3b6f2aa432785ea275ec GIT binary patch literal 21214 zcmeI4!AiqG5Qb+rH6l`|c=057llHO{yjXhg!RHVkBMSCSd=ByAMeubzR+6+!HHmI< zoi^z=J+y_wbY}9;{5!ilE=!Mx^V$5PZ;l4WK1=3`m$lBhEVZLV#EHw!%=MXZ#pkgb zq=&=#?0srYdN8{0$whK5Nnb>sL~iA3yjUz;_I6tQ>UC<35ph}Cdvp&Xk{HRqy3JKs z8OT?;DZkzoZ!uI_xl1@(e@QLPu? zVtcrFDbGhK)NX~Ur=X%6j#98fK}9#hjiYvOY44@ggwqRFgq;fJlvll@e2#*uZI7xg zkFxt%cmds@JIc)k&<(n2P*fWft4l-BgZfNMNeW!T;3yoG3)gM9Zo?(hHEHz{2HFg5 zhBnvG=9Pf%+6Dz|aIe^4{OzjA_c0edQG4}7DTG@=MSNUT#=l@iATEeSprd%A0v)CK zM6nQKA;vHM%@R;g483PT5m&q~(1{9@B7sPTeBAcr$`@vtd0zg9j>eFgH zs#>r_FGx!PSPmleo$S1y@g5$IeML#b2M8_cSEhVVwQx(kYPbfG0j;g|U>zEZ3U;$Q=j8YKFewYPkQ-2X`2lqrth+g$4~Z_XZ$Irw_BMQblq!Jtny;HbMJ4fB xk{oMh7Hy^w5z((mC2Li0`@=u6$B*Xq-R*XujmGBj=>C20DV3Ah>p(;Y`v$cpIbZ+) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c0c991b4df371a064bb03d09b3bbd67dc3555963 b/fuzz/corpora/asn1/c0c991b4df371a064bb03d09b3bbd67dc3555963 new file mode 100644 index 0000000000000000000000000000000000000000..2e1069741ef9b3d5c791ae9a5142512be8edd884 GIT binary patch literal 23 ecmXqLU}9uYZeU_!*vrJoE8NKR`ac5$0|NjwRRpL2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c10a68cad711bf05e2cc856ad2570d0911760492 b/fuzz/corpora/asn1/c10a68cad711bf05e2cc856ad2570d0911760492 new file mode 100644 index 0000000000000000000000000000000000000000..01b1717eaf2f48ebc55da72f7a7f4bf87478d30b GIT binary patch literal 50 scmXqLU}9p}%ftc)icl6a8>7}DVJ6lFCPpp81_MDRMg{{`0|o|O0Dbrb-2eap literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c122543149ab41fbf4c69fa726ce0248ade100ba b/fuzz/corpora/asn1/c122543149ab41fbf4c69fa726ce0248ade100ba new file mode 100644 index 0000000000000000000000000000000000000000..b46e732371a204dc4ed972199513719d1821d91e GIT binary patch literal 18 ZcmXqL5aco7Vq-E8<6+@=#lXP8000>p0$2b5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c12cce5d53296e1e6f932dc4c5c737962a445fbf b/fuzz/corpora/asn1/c12cce5d53296e1e6f932dc4c5c737962a445fbf new file mode 100644 index 0000000000000000000000000000000000000000..edbf01cc67b6b285b816d314d058ce0f34478a62 GIT binary patch literal 398 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU8Z%b7vumnnHcyO7#JDAz`$Sv0Q@Bor~m)} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c16b1efb915bc9311a6e8281546fbcbb47a3ed54 b/fuzz/corpora/asn1/c16b1efb915bc9311a6e8281546fbcbb47a3ed54 new file mode 100644 index 0000000000000000000000000000000000000000..411dfa820144af2f68b43613cb012318e64a358b GIT binary patch literal 28 jcmXqLU}BuZ!lA^-pw-Hp!nmM;jWu1Hk%g0ifq?-4OKk*U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c1960d49bbae14da4b2404f8b5d16b67b6329de7 b/fuzz/corpora/asn1/c1960d49bbae14da4b2404f8b5d16b67b6329de7 new file mode 100644 index 0000000000000000000000000000000000000000..c6a9fcc15668ddf33d0244827f9619eb6cfa62ea GIT binary patch literal 1583 zcmeHHyA8rH5PiN_MnnRoK%#*v9W;l;5G;@-nBv?-8H0?(9`uw(b|^q7mLpe@usi$i z-S<5fvplqy_PJ6Ex(N#@If2CxGtdi%Yt#`609$ModovbOH2a+{**OOQmH!XNJ2%%2 zJs2p0*I;i)Kx$n|52nuQ5F`pRg5eX9yCsXtV+`5V{;{_N=x*lOrIj6T-E8}xKE&y5 uT1VHEv)S>UNftXo{T+VT@lCI^+W*X$piKFyk~Wl2-exc4nWJ)@r;;z1{uk*0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c19e92ce110a55fd7f821bae3ccb36821e464959 b/fuzz/corpora/asn1/c19e92ce110a55fd7f821bae3ccb36821e464959 new file mode 100644 index 00000000..15deec06 --- /dev/null +++ b/fuzz/corpora/asn1/c19e92ce110a55fd7f821bae3ccb36821e464959 @@ -0,0 +1 @@ +0€0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0ÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/c19f1a6b7d09997b84526ce60f5aa9344738ff96 b/fuzz/corpora/asn1/c19f1a6b7d09997b84526ce60f5aa9344738ff96 new file mode 100644 index 0000000000000000000000000000000000000000..640cdc6ed71b8f1947fc8c44f9b0de858cce9b07 GIT binary patch literal 212 VcmXqLFkl$U5C&j=U@%}{0068U6LA0l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c1c53da63ccddfe545331035439b72c78a2ff6b3 b/fuzz/corpora/asn1/c1c53da63ccddfe545331035439b72c78a2ff6b3 new file mode 100644 index 0000000000000000000000000000000000000000..960c48e5f29213c77370718603ac55e7d08afda7 GIT binary patch literal 88 rcmXqLkZ)jOoWtV4Ksu;mU|{(FpMinlG6Ms{f(ABL?M4;`E{Hh*9gzoP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c1cc5fbf880ad6494c4ab323c052a62e9a7fdbd2 b/fuzz/corpora/asn1/c1cc5fbf880ad6494c4ab323c052a62e9a7fdbd2 new file mode 100644 index 0000000000000000000000000000000000000000..e1320405a897592fef4514ad0f548c4ca6babbe2 GIT binary patch literal 10 RcmXruU}I!lz|6?V000G`0OkMy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c1cc6157b05b1d2104e5dbbb136aaece10debd08 b/fuzz/corpora/asn1/c1cc6157b05b1d2104e5dbbb136aaece10debd08 new file mode 100644 index 0000000000000000000000000000000000000000..49fcf9aa252fe08025df127fb1e54ac734b2011d GIT binary patch literal 325 zcmXqLU}92ZFlaDnU}IXwz`(%5+vcHe!NSBC$HXMEmw|zSNf4%jfq}t*LA;UCU;#)q zbEvs8OXL4UGC%@M&o&qX1e6e*`4DD0LWD4Y>Y)Wtgc`~K0tN;Q452KNU^WZ@03~H+ Am;e9( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c1d5b3fac019f739a652862ab714d7c6c0ecf12e b/fuzz/corpora/asn1/c1d5b3fac019f739a652862ab714d7c6c0ecf12e new file mode 100644 index 0000000000000000000000000000000000000000..3409c205753145d1264e232e1f5fea4b3ff88eec GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mc!~l6j=ZN|DTZo3>3g5H-kYi ziwsN}3jVa_Ijp%%Ti?3r*Z- zUOoQjj_cO>i+8T>&zjPGl*N)|J0H*9>@EB2jf5xc^kP1EIqZ<2l8I5nHNhBJ#l7aq z9b3OE|MpS3|Lm-D>4GSB_Y{|_jWb&r>P(nq8KxuI|Np<(q6a%Z*a_d&bd8D8vSngq zWVT{p$@-LX=dron(<>&^H@3gqWw){^S6F9rbQw$8TpNZTuiqQ&-5a%k$)g>sR^>EW Qrc8Co*A0K#vSFaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c1dc72f0595e7bda17f2fe07ce0d49f43cd4a1e6 b/fuzz/corpora/asn1/c1dc72f0595e7bda17f2fe07ce0d49f43cd4a1e6 new file mode 100644 index 0000000000000000000000000000000000000000..68e4c5cde51b6ee19af91c08942a11a128c8dc8e GIT binary patch literal 2349 zcmeH}y-LJD5Xb+!39A;@9i&RB2N#9^BHl)<)x1C&OTkv3Ko~6!TftWF8s9>!^a-vJ zEG#Xqw>p$fE?)dPu({?!Si5>%-HN`?I5X<7ybSplE3=xk-D#eeRkdzmAo94|ljda8Fyd zO+ZkX(ZSfc-lw41OTnq=oU6pe^@krkJ8_L?1*zl9Qt(W}DZ+8&T%BiqZ3gYqPy>JN zhq)>C0^KA{v72I7ZE+6Qc-eA|&X*G@I|LAPi)jF=928#sOEC{u{U)Ipl@wNp$Q$#I zh}?=E5eUkOzqBZNv^GmiOpwLN%iTE)GNS=iB{1<*rSvTeADrL&Yb=$)FOln<$VwW4 LcQT<-JXk&e=PC#E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c2397e4ae34e05a196ae605b199133700f5d3ffe b/fuzz/corpora/asn1/c2397e4ae34e05a196ae605b199133700f5d3ffe new file mode 100644 index 0000000000000000000000000000000000000000..6579e31a335ab70919b9cb7f0a5b3abd78178d7a GIT binary patch literal 64 xcmXqLU}92ZFlf+eU}O5#z|Pj-#Kgd0!@vOIS7l&|{c2`s>u_RXV6kBU0|2;)3^f1% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c247b36aea11179c8bec95b66ceda7c27ad87375 b/fuzz/corpora/asn1/c247b36aea11179c8bec95b66ceda7c27ad87375 new file mode 100644 index 0000000000000000000000000000000000000000..c64d8d9b17c24e252c141181bc3860eb1d96266d GIT binary patch literal 7 OcmXqPU}FCNp8)^~ZvwRd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c24c5d7d21836400684c271f295c48f8fbc767c8 b/fuzz/corpora/asn1/c24c5d7d21836400684c271f295c48f8fbc767c8 new file mode 100644 index 0000000000000000000000000000000000000000..a8019a31fd2a9498345af2dc7c0434aee6538028 GIT binary patch literal 42 vcmWg8Fkoh5)G}ybwwkE1(B#~Ht+>Kjx}z*d*yu2GobG}5TmRT@X(j6 z?RoSjy}tHH_uGo|vUeZ!5%dc^W=y$}B*I@1-Nc>^Ne%?Kf0nG6yI@CyAUa2pudP@} zAGZf)%*OBkRD*;AK|wNd{MtToNdcP?})(5e>#y_9{%>fY{lgpO}Y8m$pMeXk0ZYR;H|HD>2 z1Lo57+DR%&RxCI=u~{J3T{bg7?WqA>dz}JWgN=iH3p6f@L%+Oc&)=&-S3f1p4zF`C z&P{rGVtVgwwyr2qmJVlHGs`c>Jl-anw&INBts<3snig>vg+{$lE?!-+uyb2t0;a|6 z;pMx!5cu2^T9BF4ukEL*NplOSQ7A|W&119B-`2vA~0QO7l8Y|Szci)&V8y3BtUTl!NcKv0pyqK>e zl-)a@9X27tcz6pT+70UEd-7BR=>xhiP{7pJ;`Qrzg_OH4hBRNz=3~A?@+1*s6yo{Ec;w z%<~c&ST1-qG+^7MS+CEV8NlbutStU}o$2E?X+gkrBZzNNV1QLdG+<_>^ofy-%Mel< z>t}{a(?VDu*;SpBBuI4JW8oqnv@xdIAfofmUjrl%7o(WY+&0A6_K0&ey~eP>$Jzo# z0)c@5h>$!kDayV}iPD70sUasI#5~?ASby9Gvz(aLryS%ly6E$85Wp~mpAWi04j(L1 zlmZEuNic{7zGz-#PhB-M5uN!H@^AKN68tlZw-zd7g;~*Ftf5qx2{~~}7HCTVY^txU znF%6-^_Y+AU@sP3#35qX%DQJpn7uRuREYC?0)c>Cd?!P|y+li1TOE3qc>njfw|1DPqF GmD*gLq&^$~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c254782dbbdcc58600dcf8aac9a093bd99cb87d4 b/fuzz/corpora/asn1/c254782dbbdcc58600dcf8aac9a093bd99cb87d4 new file mode 100644 index 0000000000000000000000000000000000000000..eba9f1466bb489f367cead94344ec77d5f962ee2 GIT binary patch literal 44 fcmXqLU}92ZFlf+eU}O5gz`y{eZO~{t1~32s)bt3^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c294956dfb26aafef23596589636baa24cc54aa4 b/fuzz/corpora/asn1/c294956dfb26aafef23596589636baa24cc54aa4 new file mode 100644 index 0000000000000000000000000000000000000000..7a73cc554d042ea4197122a3d272dfda44ab4f8a GIT binary patch literal 18 ZcmXqL5aco7Vq-F3kYiEQ_j6}p000-@0!IJ< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c2a94a57865c5a9c549ccd75b7059ab2b044ba2b b/fuzz/corpora/asn1/c2a94a57865c5a9c549ccd75b7059ab2b044ba2b new file mode 100644 index 0000000000000000000000000000000000000000..f82357bde42095bd1c0be87ae31f13d5e512c0bb GIT binary patch literal 76 lcmXqLU}92ZFlf+eU}O5gz`y{eZJ;zdA0}>xrp}H53;=>85ElRd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c2ccf0058c0ac148d555300752e19bd82753106f b/fuzz/corpora/asn1/c2ccf0058c0ac148d555300752e19bd82753106f new file mode 100644 index 0000000000000000000000000000000000000000..0ab9890ace5931b5dd2c22b966ad042015631313 GIT binary patch literal 5 McmZ3?%)k%=00Wc&`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c34890e06a40739255391375927e5089701f9057 b/fuzz/corpora/asn1/c34890e06a40739255391375927e5089701f9057 new file mode 100644 index 0000000000000000000000000000000000000000..c3f968a538a6924fc1c44687004df5ea362fb282 GIT binary patch literal 1438 jcmXqLSkhp?z`!s{j)uT!2#kinXb23F5ZJkMCj$cjh=4#> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c355db977d23ca91df471f6d94ed3ba987b346ea b/fuzz/corpora/asn1/c355db977d23ca91df471f6d94ed3ba987b346ea new file mode 100644 index 0000000000000000000000000000000000000000..a8303ecac255143b6959dc17eb41542d1ee507dd GIT binary patch literal 12830 zcmeHOOKQU~5FL$!n@|FULhCamn|FecWsi`{1Vo`;_9VSSZ_w*>nc)0Lp!Fz;TEyhx zjlHley_xskAZrlo`^mU%zvp4}5cE?bHkT@ZSnISBfgnDIk0xMq-{7&no3t-qGYuH3 zbl1C7K|~Pi!5dyh_K!FWgzd|}53~@~Yy*ktehQb*DBIGs(!yrs80>Co41Ygq9fzM> zv!#~8W@AJdNyEsgWi$L~;iuEytkaSrX%um)kSw(9@UzgeF`|s5VMH0}ciL=R>k`r_ z*yI|yR@Ba@W3I72O5<9230c;Rm`8RVW%GW5O|WzQ%%qI;7wnF`pLMn^Bg7~TBd2=A z@ZWU!y%t(eU}iJ3%PRdG7g}CrB$Oy4v}{`T@$T{R!jrz)c55hXc0v;D1dMn-+dQ71 oHIGhY#BLZ^t^T6(VB4?ob0@<;^g5h_!Ij{j^{ri}#{hz64O5^I5&!@I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c37b02a203ec5e12e572483b8e1d7206b78fcd8d b/fuzz/corpora/asn1/c37b02a203ec5e12e572483b8e1d7206b78fcd8d new file mode 100644 index 0000000000000000000000000000000000000000..932410b6c89bf3f5d121392bc051a23240dfb77f GIT binary patch literal 42 UcmXqLU}0!vFlaDfzz0D90D#a0wg3PC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c3b757def3be6e1d59e019b24929467d528f417e b/fuzz/corpora/asn1/c3b757def3be6e1d59e019b24929467d528f417e new file mode 100644 index 0000000000000000000000000000000000000000..20a3dbe5d30c7f2a9b17cb47fa24c1d971dc26c1 GIT binary patch literal 8 PcmXqLSjg1E(82%!3-AJ5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c3f43f0aaed26341c1c79662a47830f47f8702b2 b/fuzz/corpora/asn1/c3f43f0aaed26341c1c79662a47830f47f8702b2 new file mode 100644 index 0000000000000000000000000000000000000000..b3395c94a562228dd6ae6357af80139993db824b GIT binary patch literal 2738 zcmeHJNe+M@3@kD6?#Z)1s6Xt}O>KxsD%1$Zg`PlRrVP_65)xAHkOqtc0BM%Dodcfr zPDTLw^Yn@dVumRkA}7HNm5<)@U;xA LY|nQChySuK3p+k$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c4a269d4ad54dbc436062daae38dbb056c32962d b/fuzz/corpora/asn1/c4a269d4ad54dbc436062daae38dbb056c32962d new file mode 100644 index 0000000000000000000000000000000000000000..9daf2e0277cd8cc09bbf26a91ad5b29fd1cb0f78 GIT binary patch literal 522 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUCM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUe0~i=I7=YM}V7>uV5C!;vco_@~3Lx5`fsLirpoxKj zfteA^H6Y7=7P$RHf*hzi((E@f5J32!HC>yLg@;*=fmt2h(t-BkK-&)n!#jwn@5TE1 z`~T|=;8_e}0|P7=sgh6;R=`XLfzgPtSaA$s^o4sn1MZlK{0)L{@)P;(baCFVd0SOsKE1_l7ddXX^z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c5be91eba8ddabff50ee01e7fce5c9c4c59665f5 b/fuzz/corpora/asn1/c5be91eba8ddabff50ee01e7fce5c9c4c59665f5 new file mode 100644 index 0000000000000000000000000000000000000000..ffbce9b0abb6b760a32502ddeb5907fee2596eca GIT binary patch literal 62 zcmXqLU}BuZqQw9KIgJ^u49qEv5S}$uw2DC?ltYV=L93Nng>gXx8>@CB3xga;5 I B2kig= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c5bf0141cd869eeb1b156136c00739fcaf14d954 b/fuzz/corpora/asn1/c5bf0141cd869eeb1b156136c00739fcaf14d954 new file mode 100644 index 0000000000000000000000000000000000000000..1bd0d158227181d085015c4f880dc30b73d2b7db GIT binary patch literal 25 XcmXqLU}9uu;$URtG=Q==8NdJl9eDwk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c5c11447b6f25358514bc769045ef96b5e5318b2 b/fuzz/corpora/asn1/c5c11447b6f25358514bc769045ef96b5e5318b2 new file mode 100644 index 0000000000000000000000000000000000000000..3d3f928f66bed73e65013a6e2b66eea1c7f31de2 GIT binary patch literal 11805 zcmeHNK?=e^44h4+Dk2CT^bLB+3&f*O@HvZM@#IVVgFo;)UZslS#my>vC~??Jd+3s# z$xPBV8tc(w+%(s97*2wm5%s=AR5jMJtN?|^Svbvu-mm96t^12+b6H8yfuLPSQ~`j- zy0_OI@VwR6M*4X8^F~{U6x#@pX9&MXRP1O{Nyj2`40d}o(w`QsWBREz+iGcSHb%6O zJdB){Y|@`cKP&CuR$59VPa;kol8u&4KN~F@BicwFMzoQ1r7fnlHX)sYO|4ODo%%BB zSZnN$^0d~ygzQ#C%p*IGiq(FCO|VP-%%qK^8+OOFpMAD%Bg7~VBd2~u`v01KHd;3Q z>}qX{Xd`(TIjthJ5u5&EHbSl0V7C}iYv~uiq6zs8*prbACM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji^Q{}|agKnz=E1`%cp24;{}WQ`0z8PI?t8b1fhH)vpEX*FnKU|?WoWME)GHwfYa r1B43%ATF?FVq{}Y*Jfm4WEO;&#EfbIHOxgb66C&7a~bFm4h(DnG-FY- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c60a8295610f49f95d015ccbf75b3400ccfc79aa b/fuzz/corpora/asn1/c60a8295610f49f95d015ccbf75b3400ccfc79aa new file mode 100644 index 0000000000000000000000000000000000000000..e1a7da89c5328c0b3385116a5685ccfd791fae8d GIT binary patch literal 2089 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpMVSUuV5C!;vco|S3g9bL1R)Z!61_owE z1_qFBV(sVS&}#d04yXN*uSk!;eBxAq;080Y@6#xJL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c615dc366a3730dc503ebbcd263cdf18da2ac78f b/fuzz/corpora/asn1/c615dc366a3730dc503ebbcd263cdf18da2ac78f new file mode 100644 index 0000000000000000000000000000000000000000..f589f1c528446eaa65491954304702a2b8903de5 GIT binary patch literal 94 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcXu1h%*|3lo&Ly hF^9^^uy7ePG&3@QKqr`FU;t|j&0=6+28kOm0087t5m5jD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c62c64f00567c5368cae37f4e64e1e82ff785677 b/fuzz/corpora/asn1/c62c64f00567c5368cae37f4e64e1e82ff785677 new file mode 100644 index 0000000000000000000000000000000000000000..7d6519130e7a5ca2587ef3d03fc13381a85fa8b9 GIT binary patch literal 2 JcmY#l0000+03!eZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6413befb4845455f149ce469bd4522c42e5b408 b/fuzz/corpora/asn1/c6413befb4845455f149ce469bd4522c42e5b408 new file mode 100644 index 0000000000000000000000000000000000000000..b12df9cd8ccf48a5f3a06cb2648eb587d009aaae GIT binary patch literal 80 zcmXqLU}CD5HfS(tU}IXwz`(%5+vagjo%ugw@&iWEy$lQtOo9ze$^ZWvFf%hZFc>h1 dH!>P50I6mUl~rcpGH7UQWLnC=z`)1=0RSbc5yk)j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6788837b6d05ed77976b7a2d53d6981d3e19422 b/fuzz/corpora/asn1/c6788837b6d05ed77976b7a2d53d6981d3e19422 new file mode 100644 index 0000000000000000000000000000000000000000..a5f9a510d2fd06cdf0b4fa46caee3b134d4b7caa GIT binary patch literal 38 dcmXqLSkhq7Ajoadz{X@?Ak281fdPdB0RXDk2Fm~d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6a7596b14bc7e4d7c5f23f3c7e6d8a17eda0b35 b/fuzz/corpora/asn1/c6a7596b14bc7e4d7c5f23f3c7e6d8a17eda0b35 new file mode 100644 index 0000000000000000000000000000000000000000..7bcfbfe82e589a96c1440b742c516e2a6affab9a GIT binary patch literal 36 dcmXqLU}92ZFlf+eU}O4V!@vNh?GQ8w005Ev2QL5s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6ac98b9712dac48c58452253a2f5668e8ca970b b/fuzz/corpora/asn1/c6ac98b9712dac48c58452253a2f5668e8ca970b new file mode 100644 index 0000000000000000000000000000000000000000..c4d3678d205bf4efe9de619df7dc26066922d2e0 GIT binary patch literal 284 zcmXqLFlaDfW@FScXfSLrU}a;}(qI5lDi8|Fb1?u5^6-EuC=V*9jiM5&4@y}PZ5WRc z0|Fj&jY(8in(2)p0|PV27^pIY98~=Oe*o;hAFTiY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6d6df5c7e60fb685c6799757d558901b702935d b/fuzz/corpora/asn1/c6d6df5c7e60fb685c6799757d558901b702935d new file mode 100644 index 0000000000000000000000000000000000000000..c2669bc979b89519111e5658586d2fc3bafccdbf GIT binary patch literal 5021 zcmeHLyA8rH5Pf$+K_JmZq9F@FbE#Q?1-wM2Fiqw#lVl8LK%%Ebi6W##5ZRE3!e_U> zr}Mj?{luoLeRZlH8(OlnVwr3Ku_=oH7c1>f=>P&CXKblxj)_eZlkXO5u`Y20)QoO5 z#-_~pEsu+Gp}3 zxa+7N{VqJp$MLT@rm_8T!j8t)b4n{lK)ooZU%dq5%`qu6HuvGnI9@*9{}hyufF7hX kTYHfHqk2k%@}YcSM2QN^kCB;;m$)^A3=zhLww<{41n!8Z6aWAK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6e0f5178836a8609d3ea811be088509a6e22568 b/fuzz/corpora/asn1/c6e0f5178836a8609d3ea811be088509a6e22568 new file mode 100644 index 0000000000000000000000000000000000000000..6314b1c156076e633b5cb2755f7f9e4497abdb7e GIT binary patch literal 6115 zcmeI0J8r`;42D@1u+etukilc74xN}DAh+tSv*b=aPYa5sBuAvJC=F7e`Z6T3B~kqO z@B_VjK=kMj9{u1DkA85lM2LpK(}Pc{1ieT#aWf zW(KbTf)?X!(Qe7&S2x8MB2q2tzW!wmaO=0&NPCPmVg19cw8f^I- z3a#vkeoLqsPV>f6mLOP}-o{!fdk8Ms;K6Hp^}$*`T3EP@qyP3r-}{V?{`; zVj(N}Gbk%BvDb&#@{86EwWYi&7P+XS3nr4-v`Lb(gs~<0kX8 z8Y@(h`{u-3+{Zb(07OdgoDFI6p;fq@Hb>vphV8&s3vMjAR>YB_M^FpCUmoe`eMQjE zO4kubOZbd*Gl!QpV$KhH{gkJL$oDNen>I;Ow_$8ay5qO%1M5X#(<2_VsjdE=>T@df z8ZYTx{YE!Ay}2!rTN|6+)q^(wuB&UL+t8eiN0#^mP>Lw1$=0a)Svd;kCd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c6e4fa780050047820f45ebe515618cbb811423b b/fuzz/corpora/asn1/c6e4fa780050047820f45ebe515618cbb811423b new file mode 100644 index 0000000000000000000000000000000000000000..5a6523e1fb6610d78603168f00a691de83ff718a GIT binary patch literal 388 zcmXqLFlaDfW@FScXfSLrU}a;}(qI5lDi8|Fb1?u5^6((bL6umcXn-n#YQSd-suHY* zVYMCR79(W0pgMwpJ`fORG*|%gdIKACsH}`UOR9mvf`)|q_zwkfw-zn@zi{Egh5zH?U}FFO3otMM02?10lK=n! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c7b5e3dac72ddc362d6fa28a24eda024990241d5 b/fuzz/corpora/asn1/c7b5e3dac72ddc362d6fa28a24eda024990241d5 new file mode 100644 index 0000000000000000000000000000000000000000..214d65143d248c0761b3269814a8697440af61f7 GIT binary patch literal 472 zcmXqLVB>CM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU+V zq}YhC2o7j#qXrf$scoY$vjGEh14CM>ak8ZeYJ`B}!qm*vz}O|}~0E!?0 DS(82t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c7ccd5efe203c5a13ed04766b96ce2321a6ed08b b/fuzz/corpora/asn1/c7ccd5efe203c5a13ed04766b96ce2321a6ed08b new file mode 100644 index 0000000000000000000000000000000000000000..72d6263a376abc3292151a66bbeff21b624ff5e0 GIT binary patch literal 86 zcmXqLkZ)jOoWtU!OqsOckkZ43=9k?{4HpFba`|>x_T1KW`F_!w%0Ut literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c84ed7a5da41f8218dc3b4e9ea84ea4f799c412b b/fuzz/corpora/asn1/c84ed7a5da41f8218dc3b4e9ea84ea4f799c412b new file mode 100644 index 0000000000000000000000000000000000000000..45b949af46c29b5d70592e2f9176de872912fa93 GIT binary patch literal 246 zcmXqLVB^$k^Jx3d%gD~OpuwPliRpj6A%j5!8kjzvE+}T3W@|x9=s~yF z+gI%gJ$0Xbd(cyj6p)?eS{>b*)>B(k=vmhc62~|))Nyq7WKe$x6 z>+w;Y7Zp%Z$ygWBbceV8f|SHb1W}O{P}j#RHy96Gu`i5#q|+j@He@WHShN55r&GVB zXr07~>trO;6C0;3GabLI;#`CRk=AGv8(G^bvlwme!zb%XK4dT?K$%v|sP<61r+wip zOAi#{M2X6`s$kVCdONS~46yDZfP^XqnkhYQpds<`E+DSGbWu@##I z2_gXkh`6r1CdMmVKhbmE#BdZSxENHrMF*3s4ptOT=rH0!CsE|Js-!*U!O_>e+MXm% zVw_YZ>v7|;1&CdQ*a(}0yT#ZL#0H{;{~dReR|CzLf4)B0`R44>({FTtxirx=Gs)EL);P$_4ce9144~%43(+lrhq#Vv6HkR58Ai(YWk4J7X==2Sw4lL zXfT*6Kw^s$o==Dls2r~tzh|gy&1J%YG;`_lMz9LyYEL+@&h&&h&vO;!FJ4lkJ080k zG!8g6oSvPpTiiBTHulIfoObx@v;Cc4ePYg|*wl;?;2qet#_KY5`MqU<;FTR5KMIN)qNFe8R&p3qjhLF73uWyWmVv4&(W ztt;9hGPAZ%eYWGOU~B$&vV-Ip#o0-^5K7|_=hO~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c8aaa8fbcc05ada438cb43dc955706294f23b541 b/fuzz/corpora/asn1/c8aaa8fbcc05ada438cb43dc955706294f23b541 new file mode 100644 index 0000000000000000000000000000000000000000..406abbc58addfe90f35c163590e0c1ac5f9f0425 GIT binary patch literal 7576 zcmeHMK~BRk5L~Y#qeKGrP{E;8;)vkl9(Y6fKt92VAK+g4f3g%=0PF$5J|^qsyr|IL46rWS#YMXaGjtcNIis+Csc`-QAf;Q4zAvL`{*}RA zA#B~!qoBmK_rI(gXv`W+4E~6W&>)+B%?IfIrU_nI6xCG|upFCdTALJhX(;ft%_vBt zAV_XZYoRX4$e0$;Pb@in_9UsNI2TNc)-nR@*rvnCi2EQQ6;{mQ){!04zpfbM6)tY{ zp}O$gTs1<_5TL;-U}V5@anrU-^7T;SfS!~Ji2n*FQ`e;%-MM30J1MPkal^$;+bi#< zG5hCDa$ZT84kLs4_#E5Ur}hfree~3F{qK{a-}Dqj2erzuM|9fdHZrYZ{?6mlPjrmk ds2_i53fN6B)AsYvT(h$wbEMt(hcBo#d;|M~p@9GZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c8c6ea97136f492b8102a16617e06cd5f1fdac31 b/fuzz/corpora/asn1/c8c6ea97136f492b8102a16617e06cd5f1fdac31 new file mode 100644 index 0000000000000000000000000000000000000000..d132e5c4a97faf9ccbd21c4e844595cd4ed8ca2b GIT binary patch literal 3827 zcmeHKu?oUK41Kw)ry_-dOD92akah_L7s0)Q-=TiSDcC>pJKS6Zf5)+MEfl-R6-q%! zZn(>GkGzn)ge^yAoD}(Mr^t+sDFqW9fvuS(MP9r^nntAVuv{IbnAsYYYJkBurfp1I zy|dOw={dksFQ7vZZomPXtSn2m&v^y+*eN17oZ!kA0Gi-j?hc_4p>6xxJylm95IO`} zQE(lFBTb?p)1+H+;aL|#ln~`idQ>euUwR>()<;;Sfp|8MA+>v54<6`$0+Dokrdx>e iBx=aIXzZ^ibE)p%yWRk$*9F2YlZJR@-NyR0WPSiO<`ZB5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c8c9adaba9616886741f26811fe1133f1c0ce56d b/fuzz/corpora/asn1/c8c9adaba9616886741f26811fe1133f1c0ce56d new file mode 100644 index 0000000000000000000000000000000000000000..cca81abbd3a4f99d9fea03d65a1ff6bb79d970d4 GIT binary patch literal 88 zcmXqLkZ)jOoWtU+`LIb>VuP++C5Yfks4URDkij-bSnA2~6P8-Im77STjoCs2 zJAxoHiKBW(N({l51*r99;T?o&0P{)`9RNsfbS%p-jo@zcJBKeaZA${f>i~4?3{2=r f8r0Lupm%RGU-0J-aiQM+Q>3R@%Y^&s3def@Q+t1G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c8e4c320db802986ce8e468aa8c0d29f5f37f37c b/fuzz/corpora/asn1/c8e4c320db802986ce8e468aa8c0d29f5f37f37c new file mode 100644 index 0000000000000000000000000000000000000000..9a9d761bb580b934124e9665e2c13b287a2cddc5 GIT binary patch literal 1612 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7eLK!5;99t=R5L$gGf-WV`2FoShL)HmWVM45%lpkZMnQwIYJ*b=;k z;4lN^kcNwmOpOczATuDYqk+Nr9f#kCEFDY?jf8!O-;m)SOhoz+6igWDks2{h4Kwg0 zMh($ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c92a280573d88099cb0485f61dfa9a35e1ad2f04 b/fuzz/corpora/asn1/c92a280573d88099cb0485f61dfa9a35e1ad2f04 new file mode 100644 index 0000000000000000000000000000000000000000..533518c28a380b2256cc07907317c6bd5084e642 GIT binary patch literal 3131 zcmXqLVB^-}ZEO4Pz{n}U$h4oK!2k@Im<$XI8rYb$nHd-i7z`T38P`ZK8i3gn2EuIY zT5TTZ?3fr0IG7kfu#bV6k%581pn;90)u4%i0me0e8)N{{jN70H1|}w|8N|TA1akuU zE@EO3q>k5^n3<^MqCp?n=~|$a08I@fL_by25tX8!N`XC+qMzK{PqpYD4Q#?i?Py>V t4kJ)?G+K<{ulomMl})8Gdo=oq%OZoV#YUy*AEC8KAOi?MTK)vv`T+m7x$yu1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c942315310e8fd559f63c17a18c21b03ee7bd4a0 b/fuzz/corpora/asn1/c942315310e8fd559f63c17a18c21b03ee7bd4a0 new file mode 100644 index 0000000000000000000000000000000000000000..10d07b2f79d43684cbd05b06f76c08ea4a001c36 GIT binary patch literal 1408 xcmXqLSlD2|z`!8EV8F1j!JxsQfsN6Cg@J)#lrb6zqbXrD7mVft8s!2A001-lk$C_B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c98efa14eda6c9291b93ff30de0c081608724a9c b/fuzz/corpora/asn1/c98efa14eda6c9291b93ff30de0c081608724a9c new file mode 100644 index 0000000000000000000000000000000000000000..d30134b2ae3fc01347b193401a54c490d15fff95 GIT binary patch literal 164 icmXqLU}92ZFlf+eVB>-TDK0J!7@H!XL6L3-7ytl13kV4S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c9b0a64e16d47f9647ed34b984b6903ae05f6d1b b/fuzz/corpora/asn1/c9b0a64e16d47f9647ed34b984b6903ae05f6d1b new file mode 100644 index 0000000000000000000000000000000000000000..a0bb43f74979d8e7251c0154fc7afceec403abe3 GIT binary patch literal 207 RcmXqLFkl!CklBC%1OQTe6LbIo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c9de9910a321fc469187410e0f86437390e4f5cc b/fuzz/corpora/asn1/c9de9910a321fc469187410e0f86437390e4f5cc new file mode 100644 index 00000000..0d490c61 --- /dev/null +++ b/fuzz/corpora/asn1/c9de9910a321fc469187410e0f86437390e4f5cc @@ -0,0 +1 @@ + 811111111112Z \ No newline at end of file diff --git a/fuzz/corpora/asn1/c9eeb822c0166c6b368cbdbf9400418e64133b00 b/fuzz/corpora/asn1/c9eeb822c0166c6b368cbdbf9400418e64133b00 new file mode 100644 index 0000000000000000000000000000000000000000..07866d555a17c3f95793ff1c2c9445a9dd53774e GIT binary patch literal 17721 zcmeI4&q@P948}9Fbw#vL@nBDaH)$`i;6>@Z2cJWHj8(92;&XWOBKSHUE4yt+%T_zZ zF?5$-dT194A<2IElFT11^25P&GX3bfgP!v*QfT$@UR8_S4>J)JE&A@d@3i_o(q6tl zm`>iu-sOA4hmM?QXOeYAR+#8@0^GhdFM$VMI>`lKI--=y!2#M zZs(8p)mI7?H7j&(MQJNmdJuV(-~0~H3iFi_DBM;TaQprRe&#!(RKV!X%5i;>s%b6U$Z zNU27tmSpk|>+K-xfo{+Zy2Bc)L5{ll|20+v6_yo9kVcQZf;8F+_yWFwFY0^&F2F?+ zTtKXmU6MhmW}u=S;l@#sFKs)*jTMpM1{aZzvV5Z`)hN}Hlxm`H zu{<=yCU7=^b4JV}N0A11F%2%I(W@{)up;iLEUdTQQ6Wds6w?&b6xY}Ff;2kQf^N{A u1l=3vw3pmLvAC=w5NnXM3FL<>L1OEi(<4=ly?UhDp?~~Gjj_tUTC-1^;FO&J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/c9f18df416be1c1aac670aecb5eb7c0d0464583d b/fuzz/corpora/asn1/c9f18df416be1c1aac670aecb5eb7c0d0464583d new file mode 100644 index 0000000000000000000000000000000000000000..f8e967a42383d988c0df8676ebe5f2bc117e55bc GIT binary patch literal 25 gcmXqLkZ)jOWMpDuW@2GFpwGe_Dl5Xm_@99R05TB+;{X5v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ca2c94823e68fe3774e227c2f2eb034393aae182 b/fuzz/corpora/asn1/ca2c94823e68fe3774e227c2f2eb034393aae182 new file mode 100644 index 0000000000000000000000000000000000000000..97a430622d71158bae508ece11157cb8b8a09160 GIT binary patch literal 479 vcmXqLSje@I0XJNVM-H1VQq`lIL8*Rp^B{auO{KMZbXSsUAG&^Qe6X1S)}xmy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ca5be6d4667a1b573e4b188b64b74edd7e7a4f7c b/fuzz/corpora/asn1/ca5be6d4667a1b573e4b188b64b74edd7e7a4f7c new file mode 100644 index 0000000000000000000000000000000000000000..9d42061dedb383259ec3b47537fc35a6765e96fc GIT binary patch literal 2810 zcmeHJOA5j;6r3a_{tyH=Jwx5h%7vioE}rZq`t^~wMQU8y#uViR*|N0qOyTdnLk1O`*Hh9!sqI!dg< zm~pa$y^IcVip~~io&XpH$m(9_@BaDxWB>PWSxGU(`=|Wtz?^XRqf{26;w914S*WbN={z_V8Dd(!3T}jM_4@>zgR{*hf;_IYqHvoSI-Fc>h1Gpd7B z88omlhsw&Zq#86VXjs@_z{VgNhqjR6A#GuSPoE*oB9 K#%R%C&;S4u5~X?o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ca77a06cf1291f52b270a1781c78a882f6133273 b/fuzz/corpora/asn1/ca77a06cf1291f52b270a1781c78a882f6133273 new file mode 100644 index 0000000000000000000000000000000000000000..4975aa4a1e27a9999200bd575c44d58237143984 GIT binary patch literal 826 zcmdr~F-inM5UiOwdk-<#L^e_3K-fbsXiYWn6ZeGsM-7N~fnaK|!QKz<2m2KtAef#o zflLpgm&!&?GZbBwR8g(;jyF(>R|U3I8*vIK8o;D?1%k6B>*B7(HZ-p73l)~xqsg9>68BS7WS$F z#aSi~otbZ?)>1)2jWDg9A3&uKFT{XsuuRE>KJOM^EC>C-|I2ut#6wAN+ye@hWYtw>C>%p`^oJ+C!J@ zOlA_c5uYuKRaw4{Zn1X!ATRY|77?HEE+G;UzjgQAN&TG5CYu%I>3Lu$bEazDC~-t2 zK1;81A!=XcyOA^>cW-ni=4cxcaT~($h@u^h6CPPahQY3m2KxI&YnXm$O}APYn~o7| zBn%^?B^&gI(T_?y*-8tEgh|AxL!!~r=|`ibV+0!s!w5FgUumOhtx8CvU_)!r+Nf?u z4QmbkQJB`omyqL%2zjLEQMB3*umN_gpP8_c{)XLf?MI)j+XyfU!^o%~f&NL;k48(U zA6>1E5o{z3BcoLWHu9l=-#u6v%|@oDwM{eB+B3yEc-%D_E0BQhfYHGIqXd2!vhGA+ K$Q?u~B>5Z9`+r6N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/caa257701568763b1a10bf459055eec313d2c95a b/fuzz/corpora/asn1/caa257701568763b1a10bf459055eec313d2c95a new file mode 100644 index 0000000000000000000000000000000000000000..88cf50075bbff5d34cef99ce80e34f7a6aa367d5 GIT binary patch literal 88 zcmXqLkZ)jOoWtU1t@@Ld0RnPt8Cm}S2eGvqS+rW2Qy9VG)eH>Rt299zh$I6;6@vnU VrxpVPSj~b4HdgIM76t{dApjh@5PSdt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cab1c8a63cd68a48e79e9c90f7501d7979e1e6fc b/fuzz/corpora/asn1/cab1c8a63cd68a48e79e9c90f7501d7979e1e6fc new file mode 100644 index 0000000000000000000000000000000000000000..a6255b2116481ed4129519231f62418d1bcfd048 GIT binary patch literal 705 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%3`)#$3`~Fj|NkHLi-Cc`*zo`V{{{^P!f;iL3=9ShY%Hw?O$-bS z%!~{mt^qzP+^|?-#J~*E2yq4j$T0>Cn7{`llmQi|uC+|y0HC|IV6W2KT0{Cd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cb531704f563cddc2b2309c7d2639090fe8beb34 b/fuzz/corpora/asn1/cb531704f563cddc2b2309c7d2639090fe8beb34 new file mode 100644 index 0000000000000000000000000000000000000000..cc298a7dad0cb21357ffe7b3d0a3a832043fd0da GIT binary patch literal 80 zcmXqLU}DN*FlaDnU}IXwz`(%5JHg|=1@nK#I3_01y#)*mOo9zeg$#-Y9R>^x3JQ5Ci=m^brMhsw@DF*@6Yw=c~*C`%y!SJ`xpnbF!tQ+c>waJ(FZToUY<4 l=%yraI(tnP2mqo8Vp2f~$d>lI4(L#S5Z9M*UIbEz1TUc)6O{k} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cb94c844e1d3f9815d987e0940f7c4c48c94b3a5 b/fuzz/corpora/asn1/cb94c844e1d3f9815d987e0940f7c4c48c94b3a5 new file mode 100644 index 0000000000000000000000000000000000000000..4f7e5588f7f2902d9d8d84260876f9287db98372 GIT binary patch literal 139 zcmXqLSkhq7VAx>Lz{bca!@$4*VuZ>V{BJPO_XxE84-zqe^WcIk1_o?wFPLQv6d^*y MX*7iBK^TJq0CQg>y8r+H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cb95817b74f8657dcaf565e0ffedfc35d19b6bad b/fuzz/corpora/asn1/cb95817b74f8657dcaf565e0ffedfc35d19b6bad new file mode 100644 index 0000000000000000000000000000000000000000..57e529e105976f22dda1a77fbe5282ff72a6078b GIT binary patch literal 17 YcmXqL5ac#!U}G|1;9>mCz`(!&032xowEzGB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cb9d4d9733bda940d75ea6b6421e19c7b0b39c6f b/fuzz/corpora/asn1/cb9d4d9733bda940d75ea6b6421e19c7b0b39c6f new file mode 100644 index 0000000000000000000000000000000000000000..a2de6c7085324d8d05e3cedb17cf1ad78685ce29 GIT binary patch literal 84 zcmXqLFlb=o)N1o+`_9YA$Ys#Pz`(%3Y{h8Mz+|w5p<$r_0|SFW!xAQfw84@lCI$uu I0R{#G0Pi*sI{*Lx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cbb039950bfcf2b2c5342e1ec64f536059675bd1 b/fuzz/corpora/asn1/cbb039950bfcf2b2c5342e1ec64f536059675bd1 new file mode 100644 index 0000000000000000000000000000000000000000..2fa34dc18a369cc0922217620ea49e5c9e2ec175 GIT binary patch literal 118 jcmXqLFkoe4WME+cQ7kAFsvtfdR38ya3|JT#7+4qpR!s#7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cbd094d36e4cfb12fbdc79bcd75a9a7e6d8f513a b/fuzz/corpora/asn1/cbd094d36e4cfb12fbdc79bcd75a9a7e6d8f513a new file mode 100644 index 0000000000000000000000000000000000000000..df056a89c6a46c0c1403df6aeeb852727440a05b GIT binary patch literal 23 WcmXpIWfEv&fPa9wj0_N#HjKp_Dk}kFqlhwNiX!9@Eap&I8AcQ? z7UMwjP$$4G#>T>Dm_Cww&^>`L3!e!nR+AATSUg5&>rlM_2?bJ}fD#Jm0g2BrvCM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU8Zi{v0{CFFr PDUyM~fq~eR4bN`?(KK<~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc2be9ea9cb8d74eecde275839d24dfc29ccc830 b/fuzz/corpora/asn1/cc2be9ea9cb8d74eecde275839d24dfc29ccc830 new file mode 100644 index 0000000000000000000000000000000000000000..a1f4298beb3e217d8d8fb612e02bc184d4962c1f GIT binary patch literal 9409 zcmeHN!AiqG5PiEFw~7=3UV4(=#O5-_m^Ovpd+_`PM=WZ8k`rL*8EJ)A%JsNimQuXvWfaH zjv+Y5b>uQ3;mEb?5YE#bxg1t)p0B_>-y1;`0yw+FYO5BxAhx7*FY;}d&sm}WT`Pk* z&p=yAAtYzl;AAPyguG`$&dj0VpKcnz%pABw`}^aAZWM7rWGU_K!CwgA><%j~h+Gi8 z4XZ6Ud+0eZ=V2)gd>ENHsL%gTC>lbaGfRuC$meO1cTWzP^eUTYi|agFd>$eCS>Ll+ Ht;wW!l>K`x literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc2edaee9ed52d96ad3e2356b05cbd13851a1052 b/fuzz/corpora/asn1/cc2edaee9ed52d96ad3e2356b05cbd13851a1052 new file mode 100644 index 0000000000000000000000000000000000000000..c1e05783f07f23d79ee930a1b4e029e9e6d9c522 GIT binary patch literal 42 gcmXp|XJTYvViaLw)M8@N69I9!k$50JSe8Ku04mG@u>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc36e4534e0179a6d83e90033c4d5e9616be1312 b/fuzz/corpora/asn1/cc36e4534e0179a6d83e90033c4d5e9616be1312 new file mode 100644 index 0000000000000000000000000000000000000000..035fd0f69f447d12ce49d5378552f630e11e25ea GIT binary patch literal 304 zcmcJIF$%&!6h!C$T{ntNNR`H5Ytjs2Ay&aE$NCEHwY-7XNflPI2JGydfyYesXkpvN zK8`!tl%h`D8)t$H&HW3=Hz0bG$af0CqVi$pz$;tegLHxK{- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc4d85fee6537c5aff58366694ae50ed02b02c0d b/fuzz/corpora/asn1/cc4d85fee6537c5aff58366694ae50ed02b02c0d new file mode 100644 index 00000000..fd90e94e --- /dev/null +++ b/fuzz/corpora/asn1/cc4d85fee6537c5aff58366694ae50ed02b02c0d @@ -0,0 +1 @@ +0111911111232-1:Â0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/cc4f856b60d2146e231a7675d2b5bff8f839ddf2 b/fuzz/corpora/asn1/cc4f856b60d2146e231a7675d2b5bff8f839ddf2 new file mode 100644 index 0000000000000000000000000000000000000000..4e9b2ae628d3a73c550da7d8dd881257f5369b17 GIT binary patch literal 66 zcmXqLU}CCgFlaDnU}IXwz`(%5z`(#H*ua#+@Wr6PfPsO*fPtlv(O>~c0duIVEDM)G KLn8wS!T&cMLnz`)?h$pBHpfUMA)>F?G5 MOim08oD2*M0KxhU&;S4c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc6d0bef6e22925774e63aaa4adde0a8ecdaa088 b/fuzz/corpora/asn1/cc6d0bef6e22925774e63aaa4adde0a8ecdaa088 new file mode 100644 index 0000000000000000000000000000000000000000..e49359fe177c28cdb108af9fa76d92eb826c9414 GIT binary patch literal 18 ZcmXqL5aco7Vq=ms;9>dR@}Gf$0RSNA1Lyz% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc7081726b4ce70a41213b31a2ff5a98e6afc663 b/fuzz/corpora/asn1/cc7081726b4ce70a41213b31a2ff5a98e6afc663 new file mode 100644 index 0000000000000000000000000000000000000000..ba2cbb4d832afdfae78c830e765225aba1ce60ef GIT binary patch literal 62 icmXqLFc4s4*J|@PXUoLM#;V=O!XUt`#=y)#6aWC!n*;j* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc7b0169e53fece89224cdf244a2c91bb140f295 b/fuzz/corpora/asn1/cc7b0169e53fece89224cdf244a2c91bb140f295 new file mode 100644 index 0000000000000000000000000000000000000000..f92bdaea664f706945fc0f4e05a6afc72b9170b5 GIT binary patch literal 84 fcmXqLU}BuZ;=n*Us6y7Vpn;85yOD)K5F`iyp!oy( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cc979ccf99bebc94f85623ab5944477875763fb0 b/fuzz/corpora/asn1/cc979ccf99bebc94f85623ab5944477875763fb0 new file mode 100644 index 0000000000000000000000000000000000000000..192893a342da09e18e5206f49aee2efba2eaaf1e GIT binary patch literal 2088 zcmeHIu}T9$5Pf?W=b|WFBWY9+gbOjnXsd;#Kj0_$AMZde7J{wC6_-EAAKb6_0fMCw zwve4gVn9SfxaxLT9y0^WJl@WXQg$cRZS`^BvZSFhalC+15>;SMH4~?RVgy*~O@Y*z z6Y}ED#XO8$5#CTrdUt#@xK}ouQ+LFjUBh5%aCKrZ9>?G+Hx+lfUo2a4;aT21)V?N3 zzi9YU`g%rk`Si%@lgZ&F>|_yQWg)m;nbob-oSI7pNpqyb+$Ajn+4Pxc5o(MU>0qlw z-dVn`5uq<<_2xwOvPl{406&>T0^d3ei-zWGQ;{x-^osnaN4iubeyz~${VdpcsC6$G U`dRSjn&}n!bzjPAtJ+Td0_Gv*FaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ccc5b935d438b7542e49277e59de8dd5e5b65e08 b/fuzz/corpora/asn1/ccc5b935d438b7542e49277e59de8dd5e5b65e08 new file mode 100644 index 0000000000000000000000000000000000000000..75c22e48eef8c3977c003159c96e41c479009651 GIT binary patch literal 9152 zcmeHNK?=e!5S(nKDk2CT^bPg0FA$GDz=O{Tf<5{Y|KJb&j#p`=-fW@-iR+L{duZ6q z?941})t8fMTGzLY8_%3v;I&;Ms_IKw6@Wth!kw2++v}yy%VAY-uWNBS5;W_C!U0fU z4vu;Nx?6p2q>qPRZ?uOuW(+GJX58qz4()Ec#x)tgbn zTH|~ar?vbVGOvo*N8vt7mi+{qV5j<+NgL@O*bQet=j^bJ5TiJZjQY`c=-<8Z1IkZk F{~ghe3s3+6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ccfdbae5c22edb280055de1a87286d861e64b477 b/fuzz/corpora/asn1/ccfdbae5c22edb280055de1a87286d861e64b477 new file mode 100644 index 0000000000000000000000000000000000000000..5b92b69cfbd1c93c1895c44131e81c20b9c04c05 GIT binary patch literal 1116 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uyC0&Ffep5F*JhZ!2qN=G)si(jR6A#GgucyeIpJ-lv%h88WyrN6J-c~ zGwAG)9Lx|=0eR+PBU2-T04PKt!36ao9bHGYupYc#98C#CWf&Tz1W*|e3QO2HTmk?} Cm&HQ> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cd0ff1826844fb45f4a6d1860d5a76398a39b71c b/fuzz/corpora/asn1/cd0ff1826844fb45f4a6d1860d5a76398a39b71c new file mode 100644 index 0000000000000000000000000000000000000000..4774fd1940fa3c006a706eedaeb69a219099f1e0 GIT binary patch literal 44 acmXqLU}Iu4SkPe5z{G$GAzX+U1ONbRKmywU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cd188d14b6cba24ce7c81cef65ed0be9df3c11d7 b/fuzz/corpora/asn1/cd188d14b6cba24ce7c81cef65ed0be9df3c11d7 new file mode 100644 index 0000000000000000000000000000000000000000..8cb192b9751b1d459f9a9085ee431917e82f01a2 GIT binary patch literal 3298 zcmeH~F$w}P5Jmq?Hc=6A%T$8xZZlX4_FH%mj}ZlPt-XQQv0T|`A$DnoAW4dZ5O~bI z-;4ye?&1)i8(Ou*BZ8#OEF!^iZvcS=Pe)IZ?gwezqKm`h#N=#$ZLl{x5PsMB{cuT# z1lQc<2EfceXUG>q38PTSe;}%ljPNQbuRhB1p`cs=QB#$XDy3#AVHDD(fT+#N2ypdL ZRXcFa$KP0RTTM1e^c> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cd7cb3a18e56ce054d4033ef1ace9b34ca395607 b/fuzz/corpora/asn1/cd7cb3a18e56ce054d4033ef1ace9b34ca395607 new file mode 100644 index 0000000000000000000000000000000000000000..779acfefeef32231068a2c5939358c5ce57149a4 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4#U}QiBlMI4cWRRu*|Ns9F ziT{s9W(zA|08wldV2Fv&7ZN3#F_f3Zamc6_iCzN_gP6QgCz#K_2O#lVvFDdo;% zbGxTkOr~#af49qSWmB%O&gSScma@4v3_o7KH`u#(-TozycC1>J(`cD8C7N^p5|yMw Gw=)2-&6aEc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cd83a0338e86458ce15910b967620ff2bb546071 b/fuzz/corpora/asn1/cd83a0338e86458ce15910b967620ff2bb546071 new file mode 100644 index 0000000000000000000000000000000000000000..af92db8bc90924a03173c0cf55f12f776da69548 GIT binary patch literal 584 zcmXqLFlaDnU}Iu3Fkob0U@&Mf1aTP|m?1n&76Stz6|~S#*jBJ{7@`sfwlC~-Z(f=E?aMX~0?14KpND!Q!F*7mRu0f4a) z00o>Go+4PNSs9f@auU@=PS3113;U@#Ze$oX($0-0RgQ!izFJtvk;=}hg51|*L1)E| z!l^t!H|iM9soHi!accHIggO|eHxwAqkRLLrXOLZ>i`K{Qyzs5FK7#JuYxerBI_+nV dXc!MQ%NdOar3(7=Q&r%dZzxD;$QOgQ)(>AK=kovn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cd8e2eb998f11f71fd898e53ca2e64d5241940ad b/fuzz/corpora/asn1/cd8e2eb998f11f71fd898e53ca2e64d5241940ad new file mode 100644 index 0000000000000000000000000000000000000000..85f4d917ea1c4a5e20bd5ed8193d2fe19a78b666 GIT binary patch literal 16 XcmXqLFlb<7)=tf1U|?osU|;|M9M=MD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cd9aeb9f43d9aadb4e36572c8a6b81aebdd52c15 b/fuzz/corpora/asn1/cd9aeb9f43d9aadb4e36572c8a6b81aebdd52c15 new file mode 100644 index 00000000..fc28e53a --- /dev/null +++ b/fuzz/corpora/asn1/cd9aeb9f43d9aadb4e36572c8a6b81aebdd52c15 @@ -0,0 +1 @@ +ÿ; \ No newline at end of file diff --git a/fuzz/corpora/asn1/cdbaaa5d3b4bdbc279a5654b68fface99d1d28b7 b/fuzz/corpora/asn1/cdbaaa5d3b4bdbc279a5654b68fface99d1d28b7 new file mode 100644 index 0000000000000000000000000000000000000000..857a68b77d167dd020dcc4c6b1f52f187e4cbb70 GIT binary patch literal 92 zcmXqLU}6$sFlf+eU|?imU;t5#psGSq0CBZ?SSHe!n(a6Vr|Q9cJ1OVlnE!Op^&Lk6}~9HgN&T3FMjg2tZ|2ez;t xmN^8{Zm`1EaF~G9Z~!&lFq%TR+Z@PR8DPylYPLBb4Z2238gvYZh8_qQ008Vsz>tA~0RSjB0(k%c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ce26a3e86426e26c54a1882be8899af6c70cce1b b/fuzz/corpora/asn1/ce26a3e86426e26c54a1882be8899af6c70cce1b new file mode 100644 index 0000000000000000000000000000000000000000..8aee75f541d49f74d82fb1fb0996b74abb2810b1 GIT binary patch literal 708 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%3`)#$3`~Fj|NkHLi-Cc`*y#WN{{{^P!f;iL3=9ShY%Hw?O$-bS u%!~{mt^qzP+^|?-#J~*E2yq4j$T0>Cn7{`llmQhVwH9|g4!S@l7XSc!ZdLOD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ce452c7bb6e2d51ce21631d06ede6ef3ffc6b6d1 b/fuzz/corpora/asn1/ce452c7bb6e2d51ce21631d06ede6ef3ffc6b6d1 new file mode 100644 index 0000000000000000000000000000000000000000..1b56bddd9db054bb277138f3de08689910e80296 GIT binary patch literal 2398 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOr9o4R!LVVm026c1e+C0~Hb$d1CPoVu22>FS z3=w*%VWqQs$nz4@jD?m6B`=D*hL#P1X2_o zLKW3t1MePc#VI|_K@CG0Fs$pbgU}$1s0ShxQfZIw?HUlF7g4oNN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ce58445d799105f5c5cef8817413596205d5aba5 b/fuzz/corpora/asn1/ce58445d799105f5c5cef8817413596205d5aba5 new file mode 100644 index 0000000000000000000000000000000000000000..1ccf87520b96bd5cd3f43d16db4319ed590c6881 GIT binary patch literal 6465 zcmeHLy$ZrG5WXZ5DwR5P z=+ANAeP8Z^O7=tM_XeDW*I{r1h4IBXA}Yz}0ssNkgyDqYV~r!(^~2!2mVr{}@1d%5;K?|=Wl(;XD8XKU-&;H;Ri=)Ik&}yu$KTy-GX6j20 z9%xk#3>KQ;NUmKu2S;s*?W%(UuDosKyzrM=*cGV*nj1@-oeQXuSg48xyFqZdGttD7 wa^z)`ptt7|yEIZGO)Sxws?jUw!+{^D3r#Er3xC$W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4@VT<<4VcyQf!7rf+P2x65uca48L3 oMg|4}?14L)aw!U2YiQaX4O|)&3uu9hQM5u!2~(s}0$Yg+09ycMT>t<8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cef0c0e94ed822e43c53375ffa374fe11596f213 b/fuzz/corpora/asn1/cef0c0e94ed822e43c53375ffa374fe11596f213 new file mode 100644 index 0000000000000000000000000000000000000000..6306317953f214c7025c2892d7b0da4464607965 GIT binary patch literal 4880 zcmeHLv5EpQ5PeDZqH-K4TG-mI%{0QXAYAF6*jQVKgWKQIFYtH7Y9-0Wb+_8POB7*V zicN|*n+8^cGZM4J?YES^VA~*r|bA zEuLD5J{^ml+AD~inw`3t7kWgkZ% z>B~vZ?JbS&q+*(0lWsc_@(4rwNJ-LYIa2^ZGZ6EE;In3|o6|HoEu_#bTPXC@7z&xl zSLJB^sJFoIvC`~j81PyVxq7d8;y4hc zpOfU>XZUo_Hz&NA{!Pw%4OsmPpa_!Ysxk<{pW>hAzPEx3AR+k^AT%m7Mh+H^P b@-@-D`Rb9s^(%?U&6ZW64Qv{d_b&zRLDBhZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cf1e481ca385507cc793852f1eb7846f69c0d5cd b/fuzz/corpora/asn1/cf1e481ca385507cc793852f1eb7846f69c0d5cd new file mode 100644 index 00000000..0b2ea802 --- /dev/null +++ b/fuzz/corpora/asn1/cf1e481ca385507cc793852f1eb7846f69c0d5cd @@ -0,0 +1 @@ + € \ No newline at end of file diff --git a/fuzz/corpora/asn1/cf29e1cf97660655914462af8248429692ed5794 b/fuzz/corpora/asn1/cf29e1cf97660655914462af8248429692ed5794 new file mode 100644 index 0000000000000000000000000000000000000000..54e36d117c21c398c86d2a058e4bd1da39bc74d2 GIT binary patch literal 268 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-0XBB6 zHji_5OpI)-+Kns>Y|H`-%p431452IxV2}YO4I0>3S`C^Q7#Nrt85kHq24gkWkZ5B; LcF@3Bh-+B@Z6PFP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cf2a2f6ce238ad89b75983ee437c71a7083a8d8d b/fuzz/corpora/asn1/cf2a2f6ce238ad89b75983ee437c71a7083a8d8d new file mode 100644 index 0000000000000000000000000000000000000000..a3a65398f05ab7647e91906f515652a61783cfdb GIT binary patch literal 4 Lcmc~|VqyRQ0k!~d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cf2b56b2698409363ed7366bbfe7e856adfc25cf b/fuzz/corpora/asn1/cf2b56b2698409363ed7366bbfe7e856adfc25cf new file mode 100644 index 0000000000000000000000000000000000000000..3d4ea308202af9f1eb6b8f785881cdb3cbecd0bf GIT binary patch literal 55 UcmXqLU}I!3Xy9UCA{v4K08ae@oB#j- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cf3780d2a76a0c125f224e2f7d2033c939a14698 b/fuzz/corpora/asn1/cf3780d2a76a0c125f224e2f7d2033c939a14698 new file mode 100644 index 0000000000000000000000000000000000000000..746975103279482117d2144b590df6e92037497b GIT binary patch literal 263 ucmXqLkY{52$kOi(=L z-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZyYg=zrTfp$I+rep zVs}q*x!O3hm7&grN%k+2_5c6>7hCjT#|Jy%yPB>sFqBtDVuA<@ZqB-|3QAs*@z{bYLzy<+r1|U!mCJg{(>;=gH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/cfd7fa7b46a826edef9cdbde52d4c8c9681ef7c3 b/fuzz/corpora/asn1/cfd7fa7b46a826edef9cdbde52d4c8c9681ef7c3 new file mode 100644 index 0000000000000000000000000000000000000000..db1ee9265292965f9992a5ae386d4db2c3f4d7ec GIT binary patch literal 832 fcmXqLFlbo7)WE>NFiMYx!)Q7nB_A*_FfafB;f1{4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d00adaa01a4bbad56c04a5a00cef8600a7cc1a4d b/fuzz/corpora/asn1/d00adaa01a4bbad56c04a5a00cef8600a7cc1a4d new file mode 100644 index 00000000..23290ecf --- /dev/null +++ b/fuzz/corpora/asn1/d00adaa01a4bbad56c04a5a00cef8600a7cc1a4d @@ -0,0 +1 @@ +'€0€0€0€0€0€0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/d0121f4286c11b30479f92505ac6c90a3bee0dd4 b/fuzz/corpora/asn1/d0121f4286c11b30479f92505ac6c90a3bee0dd4 new file mode 100644 index 0000000000000000000000000000000000000000..35c4504b9f8c2d82596c34c7ee004a3064d4be4d GIT binary patch literal 16 PcmXqLSlnO$hYSq>GkOKY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d026c5ae8adbef3d8ea6b8d3f96a3ab99c4c24ab b/fuzz/corpora/asn1/d026c5ae8adbef3d8ea6b8d3f96a3ab99c4c24ab new file mode 100644 index 0000000000000000000000000000000000000000..0455a1d0fc40a35c2a8475dbbb2d90fa848cbd1f GIT binary patch literal 25 WcmXqLFkoe4WME+cQ7mwZfdK#vDG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d03586acc25d6b61f6825e8d4729c05683c3888b b/fuzz/corpora/asn1/d03586acc25d6b61f6825e8d4729c05683c3888b new file mode 100644 index 0000000000000000000000000000000000000000..d6e6d53d05ccb7af76fcdb03cab1ba34d7c5a4d0 GIT binary patch literal 5554 zcmaKwYiv|S6vw-L(NY1GEv-DXfCwQeoHKLp+80u4Cxk*}Wkt|;46C5BykvE0`Q+lp6*vQ?$zLkM z;g!*rSiG(7v1l?8Z;!Xel99Fu-UgH8pT~tORz=#9u}DiC!*IL&XneS8Nqyszl}|M; zUAAHg*1?_f)2eXI;#4x8h&4x=>l&kpWNdw`DbgHIM6d>`B~cQd82G=s#>F@rX69n7 z3{43~H%4Nu4@B#mqKRbF3$fPdf~MBmNeqyKg@~pJ++LIWfawpQfATe$Q(PJ<+H=DD zBLfEnS{wn^z%4Moykzx^>e7<&p)!TFUiUBrfhGe(5LjDEVbUIQld{&HtKLeL!ZK+^=Fo#vJ5~wDy&D zij1K^5<4xiqlkbu%90YXUCLQ=&@re3NtJt;49Y}?HeoGwtF|TAdMOU?5z1RE_h z@TPv#9g^ZXYYa_JVup$hIGAW4)s`vMmLTgOJB~`hFFnfcB|9YbZ7w!GMw55cYfKi) z;?(hWEc7r0&JitOL~I@YfuL-1pi<~q>Bq)wG)$^kokf0Z9MD0^Y3KbpYX+KN60vnY z;$vVj8Cv0f+j7Cf7?^0I#VKoB-}Nx5Z}QSmnQr~rcgiJ3rLgT;Wlah&lT_i@w)Lvm zkfDR7;ZWGCIyOWDnL)+2ZJ&>Ug&e51>_Q)t(?BX$K@I7;PsawpkTL2mbbXYwW}{6z z{Wym?3>j60u9N>`$PG$ry3Z)gE0thW3O!W;jFYABX$oM1l);{?j?Do?VNeIsqeT_u z1T@K+wf%0-8bbtAPE?`_+x@Z20g)NhxxF|=$7VBuf}GC14azBSaL^!Q>piTkjV%s+ z_vjQD%6m#3NS`+sq}0gq0aTOsj|Q9?qDihRJ3dvh$t#MSw6^1KodTeR zKx%JV>6;V>&XBA^dZ&&}E?zd-}0NrdeU$tar$jAk(3odYgkq9&g6K&Vm72 z5XqZ&@?o`7_US_%Gkyuj2rm&m$UcHCxQi3mc8e6tGAr9FxZA~zFohhf; z`8ov#hLn8Dn%}(wIXavweOB!u2m%BeWLsv>`?1Nzj4W1G-310FSZD&ZIb^S?6adje z()Gw0MohkShuJfFjyF)|%E>SJ<$BgJ7rEf`81WFm#<>7W)aZxf-%?qJk+$`CE` z0uFA_m<58NL7m%RLSqith2B}Z-v&2(m^@zQy&MatFf>tP-0Km_>F${tlg}}W+y-}V z)UjD$pnPT(cDj3q#smkn$PRh=C+*Z=7CPikKI}`4+*BP>qDR*GDR5+r)Q}PNGLkhF z-V7|9f?KUqkkeU8FM-wMVbol3r{-al_PP+n$m4Zc9!5GF|H8~HwUUkh3z7h3oA zJdCV@|A11(qIM+rji5DB@ZAGJjC?@32ZI>7MZ0eWFhPo{`*r{;q?QK&7C@E!b}w97 zT3lTHJ=`UKnO#~7Q+mUr^R9n0y6%Y&9=uVLm;}ZAIsJP)f(UQKtqMavNzWZZj z`pAS|V+V&XUTNFE_e@jb=;>#cO7tVe1+0>TholpL@@85kFTx^*0OVQa7 zpT6bdl{+r&X?XD1hYOE?$t&N>w%1(#XZ@*x+U`hK=IlH3`bG{dI=uFw`k4(+pL+Aq h@*|ga9h!SQv+%iDL+58LJ=k3rUbW%mU-i95{sSxldxro3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d04c73dd55b5835d38f0dedba4bf071fb54e5168 b/fuzz/corpora/asn1/d04c73dd55b5835d38f0dedba4bf071fb54e5168 new file mode 100644 index 0000000000000000000000000000000000000000..b901bf71937122bbc76c84c3f775d52ee5646f46 GIT binary patch literal 223 zcmXqLU}9`AWH4x8V=^#cU|85-0ETRg3=9kgjSS+9h6^A9%%QR}EL;W+O^l5U3=0^T l7@z>8Gc-$t>5Tyc12b3`M13QpHWP`4h*853E@VTd000@@C*uGB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d06f9e5cb3214bcbbbe6e775b3362da756506311 b/fuzz/corpora/asn1/d06f9e5cb3214bcbbbe6e775b3362da756506311 new file mode 100644 index 0000000000000000000000000000000000000000..2dd55ca3dc0e5e80acae34ae5741ff248095b865 GIT binary patch literal 4 LcmXqD;$Z*)0O9~Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d070ff0e7785ae022b181e8d5e26555913dcc9a6 b/fuzz/corpora/asn1/d070ff0e7785ae022b181e8d5e26555913dcc9a6 new file mode 100644 index 0000000000000000000000000000000000000000..98a4f410630899b0996c430307e4a5cb1bd4c065 GIT binary patch literal 21 XcmXqLFley1Vz6&!U;t5-3?KjiHH-tz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d087cf73451b4512e34371bc4f520d97138edc89 b/fuzz/corpora/asn1/d087cf73451b4512e34371bc4f520d97138edc89 new file mode 100644 index 00000000..389e7142 --- /dev/null +++ b/fuzz/corpora/asn1/d087cf73451b4512e34371bc4f520d97138edc89 @@ -0,0 +1 @@ +£U \ No newline at end of file diff --git a/fuzz/corpora/asn1/d098a3648f27e8de6d2c9ca6c9f67bdd8e50b53d b/fuzz/corpora/asn1/d098a3648f27e8de6d2c9ca6c9f67bdd8e50b53d new file mode 100644 index 0000000000000000000000000000000000000000..5749ac970a9285847024e5754e7e149ba097ef84 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf`<@28RD=;JsFxhoCJZlR+?x z44TwGB>q1ZnJuhbtvoE7SATUh3JY-Au>Jb}8@trGEuED^|8HRyW!PJ2;y&~0@jrK5 zx6WU@b9H~#lOj2f;9#>gt}HBau?`d#_A zkJ9~TXPrwIM6tW4xLj>4tYWA$0y`HOh%I`sT}{`R7%f{SMn+~U29~T(DR&;5 z+daKvGJRwFyIpoGn{tJ9HiNZ6T)cPhy8TNY?O3%cr_m&3N;K#GB`QgWZf5`hTgRU8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d09fc23eb07e7de8aa8571e36e5216d31e5d5411 b/fuzz/corpora/asn1/d09fc23eb07e7de8aa8571e36e5216d31e5d5411 new file mode 100644 index 0000000000000000000000000000000000000000..1b9aded191eaae4b9bda41f9d691f11d58a8f583 GIT binary patch literal 20 bcmXqLU}BuZ!myx$ja9pmg+Y;lfq?-4EM)^w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d0a448771e45ed54bad449ecff4e8f4b6089fd1d b/fuzz/corpora/asn1/d0a448771e45ed54bad449ecff4e8f4b6089fd1d new file mode 100644 index 0000000000000000000000000000000000000000..a2af0722f45c8bb30af09f5dd30a45e7252ccd2a GIT binary patch literal 124 mcmXqLFkk?~h6N1^8WuA$EJcEg8I~jQkY#X*Bdfv1h64a}7bI)| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d0afd058b2dc1d4795062d7054949dc525d7b62f b/fuzz/corpora/asn1/d0afd058b2dc1d4795062d7054949dc525d7b62f new file mode 100644 index 0000000000000000000000000000000000000000..244116e6214076ceca3d17618e9ff443536b64c9 GIT binary patch literal 2753 zcmeHJK}rKr41G!d{OJ^jR=QAdiY{f`yf0Yr23}xrWqSut@Ex>Uk6_(+3-2M`!9`bY zrKP<0hq z-WoR@^|--F$-qgtUE^|Pl9TJLcQNAw&%HI{%AL}^DF`qV{_y$Lmc6et4!=3{MeW7i zv?QIWfPHWG^;6In4g-?2lo?`gyCVc*J!a^73=P*b01{DMGhyVZp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d11b1e4d9226c715c8150736e77447896c608b45 b/fuzz/corpora/asn1/d11b1e4d9226c715c8150736e77447896c608b45 new file mode 100644 index 00000000..0b2ff31c --- /dev/null +++ b/fuzz/corpora/asn1/d11b1e4d9226c715c8150736e77447896c608b45 @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/d1261d1d01157e39b7c03d7e4c6823956d9c3f24 b/fuzz/corpora/asn1/d1261d1d01157e39b7c03d7e4c6823956d9c3f24 new file mode 100644 index 0000000000000000000000000000000000000000..b142d476a5d290616de38de12bb34fba3ff18c1d GIT binary patch literal 226 zcmXqLywAkQXrRHyuGQvo&X$ppNtWS18el*GMuT7$88qpCNc?{+GFw==T6tJDum0+2 z6c*sJVf*#{H+HFWTRJO;{@=nZ%22r1#C_(~Y$rwl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d214ad350394d93f4225103726aaecbae83b912f b/fuzz/corpora/asn1/d214ad350394d93f4225103726aaecbae83b912f new file mode 100644 index 0000000000000000000000000000000000000000..4df12a3e7b7fdeb7257842d1da304ddb803ee25e GIT binary patch literal 143 ycmXqLU}|h^Y*b{~)nH)2#PX}bz+gKQOM?N3gO99aX;25NVPL?gk|Z?@3=IJIcpQNM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d22f2e4495f75c243507c06ddd67ff642aa3723e b/fuzz/corpora/asn1/d22f2e4495f75c243507c06ddd67ff642aa3723e new file mode 100644 index 0000000000000000000000000000000000000000..2fae5314bf30e2dd8ee51b87b87c748fbab1de90 GIT binary patch literal 19 acmXqLFlZ3uHfUgDG~i)6s?NZ`zyJU#rvqL9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d23b618ca095d26d476b214dd805b6a07d68060e b/fuzz/corpora/asn1/d23b618ca095d26d476b214dd805b6a07d68060e new file mode 100644 index 0000000000000000000000000000000000000000..6680169190f516041ab6737784e44831a347d91c GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2_Mz`(GSfr;V&|Nr~{|NsA=i-CcGk&%HR In1P7_053ueb^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d247eb1ff06306229d0761144e7af448bbee7ccb b/fuzz/corpora/asn1/d247eb1ff06306229d0761144e7af448bbee7ccb new file mode 100644 index 0000000000000000000000000000000000000000..fac3517b53b910e4a4cb1777981a2d2f044d945c GIT binary patch literal 1168 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUuV5C!;vco|S3g9bL1R)Z!61_owE z1_qFBV(sVS&}#d04yXN3Z5Pg$qRuMtaVk_GPZ61Oag8ddA#A9Ry_a>gh8(4W4%aue?L>obw!b~6} z1IZ+BJ|vIc^(J*$pZn4si8;VCHe*P7X9^1t^tmi^;dRWR%O-VsTp4klIIxo01zZ6l z3Oxxz;+!|-ldQvRb5qf~){a{MR)DZN+5ZCmr-Xk9J+=5t`0L`YU4N4Qb^ZVE`2YL; zwew%we)4~+Kbr3!?fBQWpYku|pJx93EdJho*O!qln7+~lGY%efL3>)Ykl8WZylEQV esf5550Ic5d0H16e*aHBv5B(yVxYHId=ePjNuLZUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d2b64368f5b6c4ac8a848beffbd867b194efe479 b/fuzz/corpora/asn1/d2b64368f5b6c4ac8a848beffbd867b194efe479 new file mode 100644 index 0000000000000000000000000000000000000000..dd150f4018878dbbe0052ac7beebe288ab110f94 GIT binary patch literal 518 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%3<}J049pBT0iz%TgFyouORGT>0|NsyBLj$QFlq$`pnE{U002F^ BH<; zz|Oaq>|sNgouBWU44LYxQS;_!eSJAm%TE|`Pf-w&sfvXL2xMkzIaB17EHfVvY*x)Ypj7OGTw3Jt7w z+tt8H)&jqt8#NOT46>(ry{2~7G@;OXvNfvvWTv+ z7<(FF@617ZeSsZBF=WjUlUG>rhphcU@}%4q7OJ~5mCj1Qz2^!hD&-F@oiMn&OkIc|q1@_|Jb*L*3lO8`qD1t7fwnuH9u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d2dc4124627577820c77dd74179d920db529eb10 b/fuzz/corpora/asn1/d2dc4124627577820c77dd74179d920db529eb10 new file mode 100644 index 0000000000000000000000000000000000000000..1f9e24e21cbf734a2ff3056fba754a80ae69f3b2 GIT binary patch literal 84 zcmXqLU}BuZ;=sVba9z8Rg+Y#if#Lgq1_;n@WMF4tVPI&0@}VG`fkANFiMYx!{AN_Wo2b$06Auz^8f$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3224e26c4af3e1266afc22db325d40505c23141 b/fuzz/corpora/asn1/d3224e26c4af3e1266afc22db325d40505c23141 new file mode 100644 index 0000000000000000000000000000000000000000..adff8ff77a3780d2b4044347e3b466a9da51ffeb GIT binary patch literal 317 zcmd6fu?@mN6hr<0MTdw)hm-~u;2N_<7RVA*jNntG%n_zy3Hr2AJ|#^`?9$JV%E#N( zPs_;;K8teG9aMG_c!|+$1qOiVs=YUi%4xV>nwA=q*BP-#w)5~f`{xOyczyY51z<&I O{4rp+A%uS*0g6^5Lp%=v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3275c60f8b8dec2f29f65c3932dabe6755cc933 b/fuzz/corpora/asn1/d3275c60f8b8dec2f29f65c3932dabe6755cc933 new file mode 100644 index 0000000000000000000000000000000000000000..0a4b7bdccaab35e248d03c2c29f9299e8ee08387 GIT binary patch literal 233 icmXqLSkhq7Ajoadz{X@?z|6?NzyRTBvkeyx1ONc34HQiP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3437005576718f55fd500b66d1bb42d0c08417e b/fuzz/corpora/asn1/d3437005576718f55fd500b66d1bb42d0c08417e new file mode 100644 index 0000000000000000000000000000000000000000..ce98cda198c6c466528363d172303e0ad103194c GIT binary patch literal 80 ucmXr;GZ0{7*J|@PXUoLM#;V=O!l1}(#lXUV75xAI|36j<1_lOuumk{@ya*}) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3596402cb0c41c074954448474ec99054839462 b/fuzz/corpora/asn1/d3596402cb0c41c074954448474ec99054839462 new file mode 100644 index 0000000000000000000000000000000000000000..7ab2296c0ae3e5472a45f17a91e5e31e2cb01301 GIT binary patch literal 87 zcmXqLkZ)jOoWtUH{^-wN|NsC0&%nR{qCkLwLA#MftCcy0kpTp%85pitX@WQnU_Jvw Z6@vl;gBAk=Sj~b4HdgIM76vwuBmn958Vmpc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d35a0b399901334e71ea283042272b5268c2c4a2 b/fuzz/corpora/asn1/d35a0b399901334e71ea283042272b5268c2c4a2 new file mode 100644 index 0000000000000000000000000000000000000000..b0254859fd09f37ddc0d2d60ed779949a6ae84e3 GIT binary patch literal 2192 zcmeHJOA5j;6r7iY_(Krf^bB<~D;I)0g)TgZ$9M?lTHc`7aVx16w5XJVMv4;%j|X8g zlf2|n{Ui@XI8S9X6LW&H8pe=RZx$9HsF|!X;Wg&m5AslyYa@PG1r}qwM2!tVB|!)X zfN^SK7ZdwBOZD!^0{|;=fwBv~iyLk7yv4`(qyFu;_1~oafd5JK-<^MI{+8(1{Y&jX c;GRA;uhCooTcWr6|Mj2X|8aQi20B&a1-;Pn)&Kwi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d35e8967053b99ce659e09545f4607a065a68061 b/fuzz/corpora/asn1/d35e8967053b99ce659e09545f4607a065a68061 new file mode 100644 index 0000000000000000000000000000000000000000..fc074580c601a0b58465757b830f58090418f809 GIT binary patch literal 26 hcmXqLU}H2`&>+rhU}0cnU~Fb!V4!GS!N9=4002!B1oHp@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d376c2d8c3756405f9cc8af8ba87a95649b6181f b/fuzz/corpora/asn1/d376c2d8c3756405f9cc8af8ba87a95649b6181f new file mode 100644 index 0000000000000000000000000000000000000000..ec4e5260ac5f2ab420b2cdd76d47d0f883c26687 GIT binary patch literal 68 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO#d<-5qG7{AK_*6q1xyVL25fAM44jM%1`Mb| IOkg1f016olxc~qF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3a17d0bae91a7b66edc70b28624aa629974b7c3 b/fuzz/corpora/asn1/d3a17d0bae91a7b66edc70b28624aa629974b7c3 new file mode 100644 index 0000000000000000000000000000000000000000..21893594ce9d793b77fad5e2e772e108cd54d4a1 GIT binary patch literal 18 TcmXqLU}0j>YT)|M00oNxAFu-u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3aa81f1e2aab78c41e7785c51dd06f9c1913afd b/fuzz/corpora/asn1/d3aa81f1e2aab78c41e7785c51dd06f9c1913afd new file mode 100644 index 0000000000000000000000000000000000000000..e0c39818572b5f18352c092ded079c5f578f5db2 GIT binary patch literal 6 NcmXqDVQXYy0RRHo0KfnM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3d5a579c88918dc04433db83ff45eedad339eac b/fuzz/corpora/asn1/d3d5a579c88918dc04433db83ff45eedad339eac new file mode 100644 index 0000000000000000000000000000000000000000..df4029ced3830df6c0ebb274c4c22ba629717e40 GIT binary patch literal 92 zcmW;C!3lsc5Jb_LWL*&v6mQx=PGc7-D|kpDVjq^}Rm|zbcmfdw2|SW4 z67ut@vM9%4yf586bN&it4DU&*_;mmXYT>qpW6T?7l9uCe+j%Fm>X;x6E2IE$G4uui zd&9vX09BGRPXL00m3*(L{wuyHR22W`fAOI!#0HsZ`Lb>|O;g=&>b7g^zES4ZpfZ0t Go**7Vx@)Qc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d3fa8085c7ab925da2b6cf80d1b9d40f93d25d89 b/fuzz/corpora/asn1/d3fa8085c7ab925da2b6cf80d1b9d40f93d25d89 new file mode 100644 index 00000000..1585a918 --- /dev/null +++ b/fuzz/corpora/asn1/d3fa8085c7ab925da2b6cf80d1b9d40f93d25d89 @@ -0,0 +1 @@ + 0002020000 \ No newline at end of file diff --git a/fuzz/corpora/asn1/d3fd7d9b31abc8fc31692c61b7cb828b755d39b2 b/fuzz/corpora/asn1/d3fd7d9b31abc8fc31692c61b7cb828b755d39b2 new file mode 100644 index 0000000000000000000000000000000000000000..51f35a7c4e589ee192e5f65b9be47a8fe6604da8 GIT binary patch literal 3244 zcmeHKF%H5o3_J%E#K6qL3t%}U9>E9rkEgx^{>RRW5{jobL;_g~O1ebp)ppJ~$EC*g zemD=0jjX~|sX_DzY78WBQ|2ei0Rn*73KNQHX_=Su4DXS?yimiPz~c3OM4N$R=QGO5 zjRi9su6H0s?${3h-n{h$W+|G?ocMQgV>7xV6ot>VQ}d@vNGwc9Fv4;aB!)^|D~3J@k71C=oA4ZrY`g#u!bXryK(30Q z9U6D=$r4*hKHqzNt`%C-85i^7_$sZgs4Xo0r4&hP)IlrdO=@|YCm-WD{ zs+#8n!cLCV93x?qZ$l;DCg0xq@%e{cD)}~4^6eepx{Z7WtyIek literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d431f83af8db5442820f5b1ea02832889e8ad8cf b/fuzz/corpora/asn1/d431f83af8db5442820f5b1ea02832889e8ad8cf new file mode 100644 index 0000000000000000000000000000000000000000..30f2bf1c96743a8a31aacc2e3715a8a757b78d55 GIT binary patch literal 377 zcmbu4Jqp555QJynlZ~QQTI2?S2w}7o>{ECUkMR(a>*NUDK#yZ1K6yVuOVQb8W?}hu z=yYE9Z9gn!wia`NV;o~hIyH?22)a`Cr7(G}w5a>`dN88XXeCM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CU)H(FP4{EUgAj3=9m+ zj9{(-7Ml&Q*?gMgTIF`bLx28%p_h#V=hs1CGcDqEkfkViDAU5PSko}vM!M%7N^J%J Db!UJ1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d4527e8e0d4654db77826eaf0ea76dbfa771dae1 b/fuzz/corpora/asn1/d4527e8e0d4654db77826eaf0ea76dbfa771dae1 new file mode 100644 index 0000000000000000000000000000000000000000..beed0fc50762de3beb61badb9e49ba2b94cc0075 GIT binary patch literal 474 zcmXqLFlb<6GB7Y`U}H33U@&MfY%pMDV>IAlAdS+3Xn;~s?f7_Dm0%U5g(<}Q539$r TP=W{5fwVUot9=MT2w(*OV-+G4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d464aba713059ab750552a99bfa350d7a2caebc1 b/fuzz/corpora/asn1/d464aba713059ab750552a99bfa350d7a2caebc1 new file mode 100644 index 0000000000000000000000000000000000000000..1604c90eb911ef9ca7a894ec889266b2be18a910 GIT binary patch literal 1227 zcmeHHF$%*l3_RJ1oKOmdF8M(rS#HWu=Lw2mv_Yxbq;PKH o4)@F+n?%#*#U}tSK%TDqtN;ITeh1 vH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}@*Kq6?ssonqpebyCD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d4f6abf10c9ff592297865b8adbb595dd6a505cd b/fuzz/corpora/asn1/d4f6abf10c9ff592297865b8adbb595dd6a505cd new file mode 100644 index 0000000000000000000000000000000000000000..9f63f1d94c0375454c22c8d263b4671bc71b12b9 GIT binary patch literal 408 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4C>5s3~USx3=B&_gqi98|Njjd41^)73>XX;7#Iv1*jQQ(niv=u wm>I!b1Gp91q+78KpA}dvS^@S8wJjpx7mzm@2!<92^gzPO6dcN5&x7;<05v zaLp5K?BlT)O9M#o$wkfpoIyL4FC|=0;@U}+z3T%*C64hfek##DC`xFsn_lQydh~)` zj060A8%;C007jM=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d56ac8d6bf652c4cc29f98c9bb3e86f1427234ae b/fuzz/corpora/asn1/d56ac8d6bf652c4cc29f98c9bb3e86f1427234ae new file mode 100644 index 0000000000000000000000000000000000000000..6d39a44f82556ad083d864468b4f3a3896be6585 GIT binary patch literal 26 ecmXqzFc4;A*J|@PXTic~z`?|5074ARj0^xcOanjw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d5781afe30e76939778259404aa133dbbb6fe392 b/fuzz/corpora/asn1/d5781afe30e76939778259404aa133dbbb6fe392 new file mode 100644 index 0000000000000000000000000000000000000000..076ecc5a5699e6707c9243437802da1df641eadc GIT binary patch literal 4 LcmXqHdd2_%0-6CD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d583d1f01544886059ce6e762040140a27c6a85a b/fuzz/corpora/asn1/d583d1f01544886059ce6e762040140a27c6a85a new file mode 100644 index 0000000000000000000000000000000000000000..83766f92a1e237665c80a99a24d53a1e89cefa4c GIT binary patch literal 18 WcmXqLkZ)jOT*bn$ph2FM0R#XjMgv6v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d58c21c813f56eb770f64a8d4172dcb0f004e102 b/fuzz/corpora/asn1/d58c21c813f56eb770f64a8d4172dcb0f004e102 new file mode 100644 index 0000000000000000000000000000000000000000..0bc825019d9a68fda6196217cc36133f8fc7ac71 GIT binary patch literal 4 LcmZ3?B*Xv!0=fXW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d5914f780464dfff3091e32909216ac7d2ff65b0 b/fuzz/corpora/asn1/d5914f780464dfff3091e32909216ac7d2ff65b0 new file mode 100644 index 0000000000000000000000000000000000000000..150ec7d1668b4086a70738fe614e1de900371bfa GIT binary patch literal 18 ZcmXqL5aco7Vq?0&BgXQdms6L40RSPy15f|} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d597e99a34cc1dcabdb857dc9139f288ed2435f6 b/fuzz/corpora/asn1/d597e99a34cc1dcabdb857dc9139f288ed2435f6 new file mode 100644 index 0000000000000000000000000000000000000000..d7c4de0801b6fe787a024f1e02bc80381bda3e65 GIT binary patch literal 196 zcmXqLFlaDnU}N%-)n;H|FkrA?FlaEyV-iU+IQrtwl4BFybgtCq+c&1l>Q1>L&db1P zU}#`yXkcJ$U>IfKZs5ws94afy$oQYdnu}5PKM1feFf=fLjACXoFawze<}@%dGnt#4 rBXR#CxDXX=Oradw4F+Hyvlf_QfI0@@lKqVgj0_AQY|voP0aXM5p;#;r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d5c295c32ba0ff69fb4bc1da2140d5854ef5dace b/fuzz/corpora/asn1/d5c295c32ba0ff69fb4bc1da2140d5854ef5dace new file mode 100644 index 0000000000000000000000000000000000000000..7c6f7dd02126cc9f2574f516f037c48724d48d2c GIT binary patch literal 85 zcmXqLU}92ZFlaDnU}IXwz`(%5+vai3f`y4Oj)_ThF9QPuQzN6n0+2LwsH`#zmq9~g RBLf3N3Iihp16Dy0006uL4#NNd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d5f0dbbe22f0940c6ae4ae0334b5b05cd01d6931 b/fuzz/corpora/asn1/d5f0dbbe22f0940c6ae4ae0334b5b05cd01d6931 new file mode 100644 index 0000000000000000000000000000000000000000..0cf55fcae597125d8f934f1a1bf0eb1d369b693b GIT binary patch literal 90 zcmXqLFlaDnU}I!pU@%}1XH;JR;WLNI%CKk{G%RRX*kHiQ#;B#k0HRbN6oQ8e3>w&& ML`@hNm_fz?0MN1v`~Uy| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d6161326ff1b8acd585f829e887a50d8c1153c8b b/fuzz/corpora/asn1/d6161326ff1b8acd585f829e887a50d8c1153c8b new file mode 100644 index 0000000000000000000000000000000000000000..a1124a6d1cd58c346cd3b388906557d4d0fffa38 GIT binary patch literal 19 acmXqL5ac!BW@F@(V|!e_;c?Rz1_l5tDFtBw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d62f136ae2083c8c8e15bcc79883f43b665bd31d b/fuzz/corpora/asn1/d62f136ae2083c8c8e15bcc79883f43b665bd31d new file mode 100644 index 0000000000000000000000000000000000000000..31f40f4d1dcc2f6879fb3fcbe982386ca16c9d2a GIT binary patch literal 3073 zcmeHJK?=e!5S%1!L_`q0coMy7ds)PKP`vvGKNAJ}6W`&v7r(S(X#}-`O1CJKToMQj zGqW=ZIopZSO}gr;c2DUO9OX-EB63#81|X0dsO3OWzMoOgwxV=%UTbB;co$%7hA=>g zEi-eLFb4qow_6i{oDB}N2VfMgNBRoF6cCF?2vs@66N?HUM&&}KUe4-;l3-ET?Y)@u z^xp0Ygeo9_BLFNCW+njtIZ@18Hk?6lXloFvN%!y7;D4vv7l>dkJcNW$FUnl7qa;`~ hW&YVG$4`{t&^BfMX485v1and2t0&093sv$}y8!fLQGoye literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d645885314dd3f8386822a933605a49161a29661 b/fuzz/corpora/asn1/d645885314dd3f8386822a933605a49161a29661 new file mode 100644 index 0000000000000000000000000000000000000000..76f2c7d4461cc62b063fa291bb9aa5e389e65877 GIT binary patch literal 655 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUh1 dH!>P50I6mUl~rcpGH7UQWNKnyU|?i`001Ng5u*SA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d65b64d7799e333a54cbf7b78e79beb72015a029 b/fuzz/corpora/asn1/d65b64d7799e333a54cbf7b78e79beb72015a029 new file mode 100644 index 00000000..b1415108 --- /dev/null +++ b/fuzz/corpora/asn1/d65b64d7799e333a54cbf7b78e79beb72015a029 @@ -0,0 +1 @@ +€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/d66da730822693fea95bcc7b57e5e4d27e6024ed b/fuzz/corpora/asn1/d66da730822693fea95bcc7b57e5e4d27e6024ed new file mode 100644 index 0000000000000000000000000000000000000000..8077a51d29ca815eeae4c9962fe5b0a1f293a4fb GIT binary patch literal 264 YcmXqPFlb<7tT1d~Vlpr=U>LCw0H7!umH+?% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d67c74dbed723e2cd0a515865111d8244d8cf49a b/fuzz/corpora/asn1/d67c74dbed723e2cd0a515865111d8244d8cf49a new file mode 100644 index 0000000000000000000000000000000000000000..be305f0197ef97fbe2d73d0856d5f9e837126445 GIT binary patch literal 6 NcmZ3?!q&*p000ID0j~f6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d67ed7a4539f4f021f4fb6433e6c3221dcfacac8 b/fuzz/corpora/asn1/d67ed7a4539f4f021f4fb6433e6c3221dcfacac8 new file mode 100644 index 0000000000000000000000000000000000000000..d29cf8deb0202815ce7aac3d573194d7d38bb546 GIT binary patch literal 11 ScmXqLU}0!rz480+c@_W{ngrbd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d68451dbc794cdbf1db1756ba559422373f880c1 b/fuzz/corpora/asn1/d68451dbc794cdbf1db1756ba559422373f880c1 new file mode 100644 index 0000000000000000000000000000000000000000..8ce7c22c011520f17d639653991eaaf3a645258b GIT binary patch literal 16800 zcmeI4O-{ow5QWEaNkIsy2o_z!w%vGxgo=<@_9kpNM1(|7zQ^$Z(odHUAS--x10j2l?wcTb`_-Q5plssXk z!%Po+sFmUiDA{G+!o0O8#TQVr>+?1gc|FA6o1L8^pyV%*sa@*rKkH3|E2x0PbxgfQ z&>K6@J@#Y(btSO_-9kOSEt%TwHnOq<-FMFx$h6LY#N$9+MCdqpMp7RRshkx7ncD59 zwz<3gc*@5l5AHb)LR6- zu>)lXy7%5H6&gXI(Pl)RIq=M3^NIcb?a_4`&!~&oy6Bd-{?#wQ6}2bvH~@+JyVBc| z#Qg>6uP5<1tm^Eb_w6_zb3X2Op9=I+$L!Cj;|z7&WS#FFw%-Ey=1u&&`c-^DeF#kD MA%Nhc2fAaz7mfOi&j0`b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d68c0f9ac58174b28ec80ef8bbf197bb2c54b068 b/fuzz/corpora/asn1/d68c0f9ac58174b28ec80ef8bbf197bb2c54b068 new file mode 100644 index 0000000000000000000000000000000000000000..62a56d9ea8b01978d8154f95e574fe57f7f816f0 GIT binary patch literal 21 ccmXqLFlZ3uHQ;7r5(aq%7V|R%AcMK@fibRz4p=7j_5Nb~x}B?y!u;4#g2n4GYK-ygHSaa3 Uke8c2f5fV<*PL6CzYU~YoPfb%u>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d6990bb64f22f00dec1d41d1204b1dc8936e0474 b/fuzz/corpora/asn1/d6990bb64f22f00dec1d41d1204b1dc8936e0474 new file mode 100644 index 0000000000000000000000000000000000000000..c4050fc0de47b4201731a5d1c94b8f2cb3965cb7 GIT binary patch literal 52 ucmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2^>z`(%Zz<>b%A%KB_K?eZekPABi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d6aa1472cbbf583cadb1ec31d0afe0a27669c79f b/fuzz/corpora/asn1/d6aa1472cbbf583cadb1ec31d0afe0a27669c79f new file mode 100644 index 0000000000000000000000000000000000000000..c51720e59c2db7cedec3a982844fa42651306020 GIT binary patch literal 5 McmZ3?%*e<900Tt;sQ>@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d6c94b1a045e523cdc15c25fc34cd7ec71cf8cef b/fuzz/corpora/asn1/d6c94b1a045e523cdc15c25fc34cd7ec71cf8cef new file mode 100644 index 00000000..d6cc5a05 --- /dev/null +++ b/fuzz/corpora/asn1/d6c94b1a045e523cdc15c25fc34cd7ec71cf8cef @@ -0,0 +1 @@ +0* \ No newline at end of file diff --git a/fuzz/corpora/asn1/d6d27306ba42895301ab2135a3f7e1f5049a4736 b/fuzz/corpora/asn1/d6d27306ba42895301ab2135a3f7e1f5049a4736 new file mode 100644 index 0000000000000000000000000000000000000000..f483dbaa9d91d8ae4113aa1877eb22c06977b961 GIT binary patch literal 4312 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyak!ncJVSoaV=Flt=rZ;AZO6Y z6~iVhi1x^6(jYQ*5gnqV*@RA+6?dsabdf=Hq>g5jk(Nz}P8!7LcdFH@qv;!^okDbQ z;4U$UZtBn=Sx~jXMRZuuz$2sS8=8!$+=wPRPKQnUra|Hy&1Ilo6mrTWI#~^y*cg)e a10&vuuB)ivUED?xoqBK^fz2a|1`7c7U>QIF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d6f3b69c66ec5b85efb111be98a57a6d9b4fb4d4 b/fuzz/corpora/asn1/d6f3b69c66ec5b85efb111be98a57a6d9b4fb4d4 new file mode 100644 index 0000000000000000000000000000000000000000..6d97a03aeb60749cf5e2a830cbfe3e630e20b4f6 GIT binary patch literal 48 jcmXqLU}9u4XfS9nY%pkGW6}`g5fc*=E42jPv~lilLRfR|hF(fPmg6%lR z`OIQ=m-gB|_f)7(SQJSE7NeMfo3OtO)gSYwsBHt#F y4?;eM$%#=)H_B&n+7y84C3$Qwplu~)5dO7R*eXPO$v+DYx61#A$5jxYx{~{lAa;{byDyd|DgY9=g0l`lwfR0OLLibN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d7a2246159c8ffbf2d652b5c5e2ae7599af47d56 b/fuzz/corpora/asn1/d7a2246159c8ffbf2d652b5c5e2ae7599af47d56 new file mode 100644 index 0000000000000000000000000000000000000000..b71d702748e474c46f016b2ae464948e07acff3e GIT binary patch literal 4 LcmZ3?B*Fjy0=@vc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d7af492893f259ebf1c18d1feb23be283559f18b b/fuzz/corpora/asn1/d7af492893f259ebf1c18d1feb23be283559f18b new file mode 100644 index 0000000000000000000000000000000000000000..628770c5cb3d9a5f9c0180df7fde3810d6e2b76e GIT binary patch literal 52 zcmV-40L%X{GB6MZ2P%e0&OHJF1_fs;0R#*K9smRXf8YQA|KIfh1EYW6|JeWFxq{ds KLbdS5dL;IMn!}aJ@o2HX)kjrNJS`k>6>`TJGcnuN%|i81ip@Vs_ak5HsD{o z8x}HO4%t9543qi!W_C%JXN{OOAM5keN-STY$zDE)*`+Efi_G2|vUqdbsL6*Z!GwS-j9Q03`qz9YR4)1L`!WIt`8<=b{j50tKvE z@ilO5)>iH!g4{PJIGM^I6Jf8SzllW?ijLWh=W&H_J^$ff%7Eq6-v?Vnet>MVBl#wNP~EM=PuCKgFF8r s_jtMUU+i^OLvLhdH{kz#@3PcS^9O$tzE&Taq(@^Tyu5S9T07ytl`as~eY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d842ad48bb6912824a1327a96e3fdb9e3586b16a b/fuzz/corpora/asn1/d842ad48bb6912824a1327a96e3fdb9e3586b16a new file mode 100644 index 0000000000000000000000000000000000000000..57a46e92d9048aba88149179e51f5ee06d1fa87e GIT binary patch literal 8 PcmWe&Ghi@aFlYb(19AZ; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d84ddfa19cf2269d13966fc5e86cc2ba5a88c673 b/fuzz/corpora/asn1/d84ddfa19cf2269d13966fc5e86cc2ba5a88c673 new file mode 100644 index 0000000000000000000000000000000000000000..bb75774821bbe3ebffae8f1424334699645a68f0 GIT binary patch literal 208 zcmXqLFlb<7)M8)&Q3fa!R1lSdDnS)Q)s8BMPXiGuQMIG;K-#(3m>3!MGcYqTGJqWq E06cFRS^xk5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d85bf06827da26861786e9c22ec053aea27306d3 b/fuzz/corpora/asn1/d85bf06827da26861786e9c22ec053aea27306d3 new file mode 100644 index 0000000000000000000000000000000000000000..c634018bdacf2b2a552620fb5ade87d6cc932a13 GIT binary patch literal 280 zcmc(ZF$%&!6h!C$O@1OG1Z+|Xw!6(>8L-bm1Y3{r5q58qb9e);>S;{jX5-;wS43>&5m_12><{9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d867a0c7f1ccb2293b8f33c0a3aa7968251fca12 b/fuzz/corpora/asn1/d867a0c7f1ccb2293b8f33c0a3aa7968251fca12 new file mode 100644 index 0000000000000000000000000000000000000000..a9671a6078090b0c6631252eeca81b092e005142 GIT binary patch literal 11152 zcmeHNu};G<5IrYRfFeW@OGdJw>QIT_=*k~NNc4-?5d$lq!pc~5XD3ZV zo0{TtN${)GIH}arIrrY3ea1Z9ov7o<=WuVQuc8;okv~y{hV#T+(z&bNlfUd84jhjXZOWyRQ>kJaiiSyesS#%f(x|B#O>D`ZX!2=WK3P zovB=VDl3LaO|G>R8kAg&9nRjP|249Ii?*@a=2^A%kq~MC=QV)0Z1t-3tQxEL=8;ql zU}P?^gXWncM{?JiA(E|%D5<~49{unRwtPD%4LBoQEg$)L*Y>X;43}8wJOj*l;DGd#X zAVN-ujZu+D{m1@>h7Io<8XvUG`7@`Xp`qc=h6N2X8vZo4&uM7*QCVJJ$yWdOl@S9N zutO+_%S4UPTm}+n5a&=`(9i&KBV8QW)6vlOvjOZD5I}XHF`5Il!45QNFc9Ek*J|Wq yA3_m<*PrMSf#lDhSL?q1xLWsxfq|JrfRSlG11Q z9CFVihn;Q5$voM2s1=afz;V8mVrFO6Km!bRAx%T#d_UyCHsfTzn<=u5!P20oBWR$3 zg^0*@EMfq3uebUDJ8Raw0-y=mk-vh_XNbu&1bK&ed4)fSY7J_XbD?f@`x_LH0>ES} zA`GBRMg62`Ph8wtuNqwVd&MO{YIna0^UI*Bq9{7R-1(w*_v7DPV$#;u`!nlRp$-0W Z46;oPvOq8D$ftH6p-`7m*4sbo_(#GuTOj}d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d8d41a04d35e40fde2aca4890cb7971145c29829 b/fuzz/corpora/asn1/d8d41a04d35e40fde2aca4890cb7971145c29829 new file mode 100644 index 0000000000000000000000000000000000000000..d2300b0ac448b9df94f270bff85918853be8906d GIT binary patch literal 1030 zcmXqLFlb<7)MjB|V1O_fAuQ%lS!G5>Z6vM)5}OPu6tl?CPo9Iww^aZfAmrJKM;G}H zA|qZfgLydk3Z4+j4@**m0bvt@g(s4+N|9|DY= omZXdwD`)KJ`XW$`e&mvbP`{&I3VI>q*uOVUU+5wTzEV@#0OScb8UO$Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d8eb0c2e0a8e728d116d37a908faf6486f5fb30b b/fuzz/corpora/asn1/d8eb0c2e0a8e728d116d37a908faf6486f5fb30b new file mode 100644 index 0000000000000000000000000000000000000000..775d7b5fbd080a10f52c140763c580a807980876 GIT binary patch literal 876 zcmchVF%Ezr3`N_9U>rP%PQSPCSe-nFw{$g-*cb*RhQJ2A_T^Jxao&#oxE7w|G?=g{ z!J+^}nhyYjC<%l71{Tvc1R#N_uD}>i!3UU4CM)N1?g!OJPYXtkfA!2k@Im<$XI8rYb$of#Me7z`RD7!4#C4Hy^<7z`Q= z1lZWM+C0wLGBL8TrfV~@Fft1=Fsm~-FhD^Lls0H!V`(*LVqjokW@KOh=|q^z3^9wa OxlADKEHI`HO*pL5Bgv2D8v;FaQ7*@d?2I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/d97175932017384ec6c606d8ff4f08870eb85af3 b/fuzz/corpora/asn1/d97175932017384ec6c606d8ff4f08870eb85af3 new file mode 100644 index 00000000..0cbeaa9e --- /dev/null +++ b/fuzz/corpora/asn1/d97175932017384ec6c606d8ff4f08870eb85af3 @@ -0,0 +1 @@ +ô \ No newline at end of file diff --git a/fuzz/corpora/asn1/d97a1b81f1cb36afc1b8f14ab048340eb94c7758 b/fuzz/corpora/asn1/d97a1b81f1cb36afc1b8f14ab048340eb94c7758 new file mode 100644 index 0000000000000000000000000000000000000000..cde9f24f501768e11c18c6e16f23898218142e63 GIT binary patch literal 55 icmXqLFc4;A*J|@PXUoLM#sOw9GjK7>Ffc1H;06Hf8wFh1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RF^~&pitk74i#mUbdh19sX;u<`^RA|OKAbdk+wW5|-A zzuK8$|IWPGnM;m#T=S9X)>xCA@|$oRmNd*_j7iE{MN6H6Kp!Tgfbej{9eZ({Havjb z_)%nTTSfmAM*Xa6smmY;f-4DlH~@1O9S9(l_^B)8qE;o(+_C7OR6k!jVby$>e7)8*Z*7sUj+2$y*Ii;%R>_WMc XigN<~Z(uai2I{Y+DF7}s)ja+HEx3P* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/da15f11a5a8c3bc134fca11016631e1d2aa6f173 b/fuzz/corpora/asn1/da15f11a5a8c3bc134fca11016631e1d2aa6f173 new file mode 100644 index 0000000000000000000000000000000000000000..0aa3a536be6bf56955c9519bd5f798fde0f194db GIT binary patch literal 4 LcmXqEVqgFO0NMaI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/da2406003a932236cc3609e1ff20afb9aa639c51 b/fuzz/corpora/asn1/da2406003a932236cc3609e1ff20afb9aa639c51 new file mode 100644 index 0000000000000000000000000000000000000000..620c1ef1bdeebfb7f4a59595f8318916b467791f GIT binary patch literal 52 scmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2^h3RoUEfCc_DFfix<0I?Sa1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/da44cc3e027175eb5a19a615c37499d6da79c091 b/fuzz/corpora/asn1/da44cc3e027175eb5a19a615c37499d6da79c091 new file mode 100644 index 0000000000000000000000000000000000000000..efaa411b9f3435643a8515d9297a0bed69ab45bd GIT binary patch literal 12432 zcmeI2O-chX6o6lnF=|C9xamsjw%xqe(uLsKE_x7;5e4T0J%i`)2E9&~kz@i^i>=}a zBYrb5WWwZUlK1l^c^drLs9w~Yb934^_C3!`_wg1-s(fFZ~p}Q29 z>UvI(`7Fk$+r2cY&Og?~^)$xS@BRf%6p210Q4ACV)vf_SqL3&gYS(w87w83gfnI#N z_yE;fS|wp=v9wrPEG?FnZI-mdhhxRDZf&B12jBsC03Lt`-~o8h;^`!gwF8dzt~n`Y zE;=w5<8tRSCEMO3pXS&0YbJ6d@e| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/da9d732e5901da9ab2da823e04ff3c4348ddf02f b/fuzz/corpora/asn1/da9d732e5901da9ab2da823e04ff3c4348ddf02f new file mode 100644 index 0000000000000000000000000000000000000000..d6e58f64ada00c4553b1542983740b8a494c86b7 GIT binary patch literal 43 lcmXqLFc4s4*J|@PXUoLM#;V=O!XU;h%)rcm3K$s}7yyUt1MdI; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/da9f4242af3878dd0959739a20eab9ace0f1a1b9 b/fuzz/corpora/asn1/da9f4242af3878dd0959739a20eab9ace0f1a1b9 new file mode 100644 index 0000000000000000000000000000000000000000..bf5bcbab0d752cb650ad6cb9c02a6a489ae41da8 GIT binary patch literal 187 zcmXqLFlaDnU}Mx~U}RumFkld8G*|!=VgU;^urY_qN;5KQvoM}yV1RQqP`PNb6mmgM b0Xd3=0R{{j*qA~M8kpV~FfcHK1fC4#(`JT??a2?2F?k3L@0!#s*G;UfNyL+mMP2o%+Q}`<*AKA)6Y#j16vMp;~Ukjb+LcV1~)&GBM0uz*aDT?N^V zHP@zhunDB*l%73Ang%ppwbOw9$$-{%3^6?EwO@aEj&!S-HGcXu1h%i6gV`Nwa;tVU@5~TQhM28efDP%OHpkO5B zC6ZFe&@F*R(>8t5_GmcMC!B|FPDFRP!jLI}M$`6a+8(ZL?9sGMpR_$1&h!aq^jc=5 zv~vg2-#F5C>4+GU7;VK2|8XbE;}}O485zTNlm{OS5FDTx4d=mH&F&l|L((Lt5OB>( Zr2+L}H5xytv$Z%?=1h!0kx#=J7XZzuv;+VE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dbc61a88e3a83b7d8560d52742300164c873f743 b/fuzz/corpora/asn1/dbc61a88e3a83b7d8560d52742300164c873f743 new file mode 100644 index 0000000000000000000000000000000000000000..64c2755ede7219177722391425cb18ac6b431df3 GIT binary patch literal 147 zcmYL>F$w}P6b0x11c}ARYGDyUC4!J`a+$q>wY69!h@B^}$`w6<5?HW%^9ClDeNp-N z8*R+Xrj0wDeHM#VEmk{LwJ*R_eR{f!06M7Z&`&@N&M=3C?;IcrDMET|U+=5PCV=n$ RFMFz$)p|NPr$KrJ_yPRz6Y&55 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dbc88d54356bc9b5395ca2db6485206b36cc6c63 b/fuzz/corpora/asn1/dbc88d54356bc9b5395ca2db6485206b36cc6c63 new file mode 100644 index 0000000000000000000000000000000000000000..2e2b57dc74e4f0ff295c6e5040a8b548a0282694 GIT binary patch literal 2728 zcmeHJF$w}P5S%1;5fMSKxk|9pvspy15U#&J++&P_SNaRzVQu4gELS{?cnTJp1Vl-b zKwy~JncXF$J84x^r>a1Tu+OB!cSulzO_AR>d)wLdTO;grOQh z0WnHu=EIyh0?@zx8UbWrp6c+D0z6xpZjSfI>A`T>7!Q=vkp&rMsR8PWrh= fBEM6P4`*wD9%4-uAmAP$0tgkOT>e+7yPfk4Vweh_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dbd75e4ab802fd93e8adad64c922551ffa7c97be b/fuzz/corpora/asn1/dbd75e4ab802fd93e8adad64c922551ffa7c97be new file mode 100644 index 0000000000000000000000000000000000000000..6399b64e66560df51c25afbf2a053a709e2bc8de GIT binary patch literal 26 hcmXqLU}F5p!oezy28^9vgW2Au{$rf<*L*#!3f1<5l**$fN<3?P6* O8Av+=1FCkI76t%Y>n7&_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc0925707bfd60c3d35cc3ecdc4fef1923982cf0 b/fuzz/corpora/asn1/dc0925707bfd60c3d35cc3ecdc4fef1923982cf0 new file mode 100644 index 0000000000000000000000000000000000000000..5c4435824233d9f2e3c31d5892a6c6121f9ac860 GIT binary patch literal 35 ZcmXqLFley1Vz6&!U;t5-U=q#&0|1C61~~u# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc23bc68a48f5a471ae1714cb28e843972cbd4dc b/fuzz/corpora/asn1/dc23bc68a48f5a471ae1714cb28e843972cbd4dc new file mode 100644 index 00000000..a27808f7 --- /dev/null +++ b/fuzz/corpora/asn1/dc23bc68a48f5a471ae1714cb28e843972cbd4dc @@ -0,0 +1 @@ + 00023067=03; \ No newline at end of file diff --git a/fuzz/corpora/asn1/dc23e58d88d7d1adbb08d57a06f110b85441b881 b/fuzz/corpora/asn1/dc23e58d88d7d1adbb08d57a06f110b85441b881 new file mode 100644 index 0000000000000000000000000000000000000000..062e921ced302c1123d21ca43c2944a1aa86c180 GIT binary patch literal 29175 zcmd6w>8fT|5r%Vy?hI`kq!Sg5C<+0Gn02P^^c{Eu`IC!Kyo1zrP04gHR z14dME0*7DfRS5c5o~qhsSo?ifuYH<;yA!&sKFq({pco?!VV}cCK8xuf6Nr2iMwzSNERYzj|Z0wS&jnt9bFijT^15*ERl&>)>VW zVW{`tc%a^C2T!&qchKYO(-xOcYTE3UWJ zZXLANj@m(cCSM*dFWa5BztCR2`_S3C!SEEX58!W)?(Xv<-oDLS2kltDEx8Zdq2fN& z++m`y=K%hcSsQzRbBFDyNy#L(&WOYG<3!3FvQi5-*Q=c%>Ff;Rp_4@IQQ#re5)xKb zPTWiqxUVH|V$g|k_iR566YR{P0er48 zmZVQgl;7?83NSt6It>yWg8$(C!dPoj0jH|vrd7?hLeYK~YWEw-#_tz}Oi z5{)bD0j_c0q{t{W)iXkpF~bm-eyoy+q;@qLgP~jW7Lm@9SmPIx4uw*yQ3$mIgJ`Nc zEM<_6b{uX7YVDAg)|z=Ur(@UWV{|??#Zp8avmy>$af4w<5*L*Uainu89|)0SR?=nI zt;|g%AKSfl-+QYy)_E|fi67Kw1(n24*>?*nm$k`;G;Pw2s*bk0n2KoEq?i_Sm8-4+ zhDEMx#G)rA;BnA)VJo5zcoB7y1<@675r>jGJxg+6kn0O2sl!r49nia5>k>O8-7FSF z7qTF_gVa-G0h@$M+#*_puyuf~IW;fV4iFl;;-Y=_qR zNg_gKOOSvayIM)2F=&Elu)XV=Fv#qKU{f=RtSOpxQB6}ol+nj5O5Yqvx=l3HW|?8p z`(qKVya$2@>28NV0A%*BpVL^18U0CbJqT7ks64Liv z1Td&WQFp{GNgdJ|qE63})DbPBj%X1zxVN(*+ciPnuIXEOsCC^s?u5H;T|{GTuDHak z8#9Uu3Y5eLyNIT&PQW0#&QL@H18QB{D57Vel;IX?A&|FnO^6w8D``$>sn!y+u4S4)S`Iv`Q$D1;q(LcZTuE7p5F`}K;>{7w zY`#e}Ge{DNskAmXeA%RsM5&d;UgIb0nK>eB({1<%1lyg?;@Obv2|;w@R1u{s5CLA7 zLlGrH3sHiQYq~oq<%$gULbL`El_Amk>8HCe$OL^QK=oSsp~92Fuj^jSCE=UGKt38 zBpQP4%fHSdwUCme?Bg|yK~ z(v?e5wKGLrO8CncbL@yt?~2fPyjE0WZi<>*fyiZifjCg>nsTWnXvF1vU0l%W zw#yVvGtoW=0fIjk2%Cc`H;5bV4%7~aY3>v2n@!;idHPIy zxLv=x_w;KX-PvjTdk^hgZEsoq49z*`I_@i)o1hEb18$s{)twbE$BiBHmcUI2Uku$` z6w#b+t}T{q!FwsnIZLwGX6=T17Vq3Mw{c5MNbtV}WL)u)iz8Zd9zQ!b_f*Qlo%caI z?kl1E&nxB2UbSKu)sueG?^oPd{wt|m76j~n6zn-7th7s8mU(u?jq>hukA;g25$x|; z*@AZK>5l~a)^w2xARXOO`hyS|-Ff6+foQnrTUKV`7BBND#+)Th*Mw}$SwXWcYiluc z$wZL|akv1F_Gwa}h(L8m?0`$-JY zx1<(+Zb=sO3m66HF|O@) zEn~kE5Ptn4grVHj{o2hkWikzmdkZMUU&P*6lJ`32Af(Gm-Q?AWBq)=46>jDo+c{I{ zoU+<5rQ6-&2XxJu2KH`(tDooHV)^tI5q`?dQu9P{OFv~e3D9J z^MXl_|5?LeHP?S#S?_{eN{BQky2Xgr6uUxkU5{Q1@Uz zl$-EN<*1g$kMieNmeaMQEmAqKNad27E;Jt?I?-&aKrfq+z|dH7@c2A8ZD`(05R^F% z;Qi4s^Kc%NEgcb1wgEmrlx0P1NtF4~b5LzEm^KLk{0FNHC#xjjuzzdC4&w7^nAcPq zqIT3(x~(?Yr^m_o4ldJG)*u$QM8$AV*L~=wCgwpgsX}~ydoex%%5;2!o7OB$LHW;D z%5yFg>=G5ixy8@Hw*2YNluZL-aC6NWj_&EozXZ1#gF*bKD>v=I1NJWn_UT=`zB_ZW zXVsT!PHqzCzIt;t?qhg&9;4tfXp3r$qk0{Zf>~CQ+97jEHgGqyQv>(HxT}C z6?-lTA?#mWvC|DDyR>B+hRh!Gse;+EPhfcWtTP}d0Yojs{-u?lcK#54veiyc07L<2q z!%z+|Q>hr-ri4)5J(#F(v7Lv7`jp8fL4;fCb|9Lb2zz%+BP=)U(iWPz#9VUcEIbeS zpo6NCGb18?eoCadDI#e(y=Ag*6^8Sv)l}>Mk9??KnI&@tH@hEL97*Q`$DyY z)9m{o{+U%cDF}HGlBU?ECAb+^=i5qhTg3a`oM#o;v+%Qf)D+t18^u=3DG8Zbn9`ks z!}2Y#5Krl+gnYwEs4S7e$MEhcRzW^n`WYY_&#!ce2!QjY54S-D%RjzSZV%+JclW2m zbo2bcVlEvu+@_i_rTbJ=m}0gp*t;L!DE8TG$ys~Wa=54OY1LPc&s&mxOYADR+5Oz| zO-7qG+Y;le!$~fqyvxL3H>VqH`PjwW3ifGOO1Uh#b+XhKt=rDheFnAIwSxK*gMGCF0cEmT1m%Q$B_p!@F++2zE9W zQ9;6RTr?vh%DWMyluJKh@0xR&E~{DE!X>#;{>iSG({yQzR1Uu^PswffW=!esC54~U zN4Vgge(+Vg=i`atll%T9;xj!A4KR7WwYRp{@)Nml*neev`LmCl2KM}Q4TeYd_jh;q zTK9YX_U`QN+!wt3x;%5;fA0Og(|=z%`{(HuzfbR!{q&drJ$TBH*VXuIzqMR?b-lFS z8Q9cc!kFQezxi)BcuwtHu9qzTxb#&XpZ~Qw=dUa0UtGAZwVeyETfDyi6w|uUe}Rz~ R>4yMqr?rPeF#YYX{{cw?*JJS;10QJjJw*UYD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc2e38734348825b6ff3e9d4b83c761f90cce77f b/fuzz/corpora/asn1/dc2e38734348825b6ff3e9d4b83c761f90cce77f new file mode 100644 index 0000000000000000000000000000000000000000..4c8207b7bb5131f5634e8d6d93d76dd714362392 GIT binary patch literal 4076 zcmeH~u?oU45QhIGH7X(~I=H&pUrV3B*Ab^m5@T&$tfq)?*P+SK zpW}}I>m3>0%fu|ZZ2H}SSRP@>JyH^p(K1y4fy_iKCxZN$M!G%AHs_TTy5kNCW3_;? zpFV$xD=IOq+;{go8J!$x4?qb3RUw}N6&VbQ3|iY%Bti|LfOU{B>CPkQp1gEP_xpTp z7ywDgJ6av`+)3^r-8-7@JxX--j6VF4C}XEy5dfk_QKdhydv zyz|FmQhNt6shQNpB=;Hl-u7E#q*h^?bKHqB8L=;oK zC8`p9Zb4Ov)hk5Uj@1-YeW*Nq8nDV?6+|@?$|FK0suFy`Gm@hUHI#@5>mePGMEH*g ZB?A-$@KO@liDHae3@`!oxMT#CsQ^bNuL%GE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc42450e32a3438ee0c6fe4ac59662e287604eb9 b/fuzz/corpora/asn1/dc42450e32a3438ee0c6fe4ac59662e287604eb9 new file mode 100644 index 0000000000000000000000000000000000000000..2de301ab925823e90f9788927d8b06ebcef1f1f0 GIT binary patch literal 26 hcmXqLkY{3?!@?5E;;6i!fsIwWk%d8-fq{YHHvmRV1uXyo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc476ff74fe27832b0b3404a49f70526285db635 b/fuzz/corpora/asn1/dc476ff74fe27832b0b3404a49f70526285db635 new file mode 100644 index 0000000000000000000000000000000000000000..0bd4d8f2c24e30bd6527820320f805d580f1b29b GIT binary patch literal 21 ccmXqLVB%zG`2Sy`L#B>NT9?z?=XgsE-A!Dbd4l^JU6Cr^C`+0q@mBAaq00R&l zfz;WwS46}P179$lv5$|4C&YlMy|Ko;HNjow8Y7t)Dr1;rOtZ_nX)lbrXUIKb=i@M$ zX3@s@#!n%fa*|eQJc~2B%qVY4~Ma8ovs5BTFUPM=euzR;E z>-!VPc>O;442xxxD6Dx{XoU(KxmH6DgNdQK(wjZ0NLINR(o4o_w&QB;_vy3W;xuYz zxK*l)V$pitB$-?p-ODWn*|@6p{P#*u2hFbGcGF&onZ2pv-}e94HEg`Px#NAAyNmN` rDXRkjh=}Xc2)3#bB7_)S2EVawhNi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc5181470b4713145f86fa951a7d5149cd88ccb9 b/fuzz/corpora/asn1/dc5181470b4713145f86fa951a7d5149cd88ccb9 new file mode 100644 index 0000000000000000000000000000000000000000..ddaf2bb360cc80284ea4156f5ce25a40daf0feef GIT binary patch literal 20 PcmXqLSj=RIf*BY9MdStv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc577d4f575456eda9455a56141e459a1e4ff5b5 b/fuzz/corpora/asn1/dc577d4f575456eda9455a56141e459a1e4ff5b5 new file mode 100644 index 0000000000000000000000000000000000000000..0da8249afa500e8f56a9c91800bb21e3c89bcedc GIT binary patch literal 92 zcmXqrFc4s4*J|@PXUoLM#;V=O!l2CT!obYHz`(!+BL0JcI)wWFA0z}4gwRm%|Ns9V NFg65eF)-NK0RYM27`Olc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc599d2a2431d464f9c87adb13ffbd282a071897 b/fuzz/corpora/asn1/dc599d2a2431d464f9c87adb13ffbd282a071897 new file mode 100644 index 0000000000000000000000000000000000000000..48d4863b20868bfe7c8976e140bac3d724cb94b4 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf`>Z|NH+V0R{wMGYDppL6QQ2 ze@Og)EHYbIxmtNxHn0BbXcQLUvSIu6{Wo^0b6YwqhyLHfEXuIA(8PV_)#HEexNe=l zc<1W=tSQ|`Su9z$^YQG>-m<^mNO;0dFXn@n!wv~5nHV)(6O55n+-siPvGu$1Zy%-m z&(1oRE{I}xPjR{0IJ1?Z&IICIBp|lv!Hy4h!gn=YV`8*ynHU+Ftr%FcKBa*CYr(=i zePjE(U3M#*a)os^N0+gb&9!0p@%p{N-o5MgFL|_M)vBCE%ake6ocoukBpte)0RWjN BmgoQg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dc846f2f9ae8eea32d63c133dd6b24e557e79387 b/fuzz/corpora/asn1/dc846f2f9ae8eea32d63c133dd6b24e557e79387 new file mode 100644 index 0000000000000000000000000000000000000000..ff063afc7a55a3f7fbc481ba566fbbd5853ff1c0 GIT binary patch literal 28 gcmXqLU}DrVY%maHVq`F2HDCZy%xsJvEDQz=05#eI@c;k- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dca1fc7b2d098a849d343996e98ff575d4228a8f b/fuzz/corpora/asn1/dca1fc7b2d098a849d343996e98ff575d4228a8f new file mode 100644 index 0000000000000000000000000000000000000000..bba42eeab9832def27471973361d9f6a3f2f69bb GIT binary patch literal 233 zcmXqLSjxo1u#^EzqOw3dR1t(Km>f15p$fsmrViC?bQK7_2o^bNn0Oc%7?v_I007S3 BEEoU) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dce53c13a5af420543e220be11daca141d05b6ce b/fuzz/corpora/asn1/dce53c13a5af420543e220be11daca141d05b6ce new file mode 100644 index 0000000000000000000000000000000000000000..331345fa4dcdd730c1b66e45c8818d0d7517af1a GIT binary patch literal 10835 zcmeHNOHRWu5FMvgpdh3OmaGs+m0)AmT!1UF!mAzxF2M%%P%K!2(k4zkeNA3UBHG5? zdGu!NdGqlksdef3{o;A?ePL#qNtWWQOA?bkx_6hDTkBGjC6k|5BQh0{TsY5#mq-Ya znbO3dp3UvPr`G%ooG-jDP;Xa>5j&Y0u_x(7M6P98QIw@6&a>9RO-P7790ekj0w31_ z=4?|3fFLN;M?F09DYqa93OylZRJ@=mO3)M(QsyWSW&ZHuseRXL;C3vg;HE$nk&RK4 zt=E8jzujH^w!%ot90h_0@tS3=dO<(6+q`Mh9{M194J_|TQdeV0>EQb8J>A3v5o9jK zPFEWiIbI|A)tuOci{tNf6dM!>bhgdxjI|qUclD6V<&;i5y@okg2#>#Zq4yL;8l>02 z@;Igx;5a#zKuv;IvJxosqv)-tcF@37BjVb_wus!Kx8%G_yc1P>DZy532N&d;f z*GTx7-%@F?{CJ_?G`>5jF(QipjkmP7D0Nb>^I|ykG{3!x$iG@4y z49!!PD9y0#gu(6UTMax16jE+!kX}Q}g)lzkheLbkF;SB}iu4(_k7-Jq@;97-Ad)ht zL3#}>#~SMVwFUC1$^Nez3ioZl)<50eN%JV!7P>{X`MV!C@1^%EsFb7Y<7>yGuR*3^2m{x!|<$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dd0eeb6f0360d485db794f4e75bcd7ea6ad389ba b/fuzz/corpora/asn1/dd0eeb6f0360d485db794f4e75bcd7ea6ad389ba new file mode 100644 index 0000000000000000000000000000000000000000..976a8c42379c3eaac2c74d2657a3fb2df1566424 GIT binary patch literal 18 ZcmXqL5aco7Vq-E8;$h)9)xf~O000_R0<-`C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dd11927c0b366a4697a123671d9507c3a6b7749e b/fuzz/corpora/asn1/dd11927c0b366a4697a123671d9507c3a6b7749e new file mode 100644 index 00000000..9818fffd --- /dev/null +++ b/fuzz/corpora/asn1/dd11927c0b366a4697a123671d9507c3a6b7749e @@ -0,0 +1 @@ +£0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/dd15a197ade78c890ec64ab5581c2566eb0c057b b/fuzz/corpora/asn1/dd15a197ade78c890ec64ab5581c2566eb0c057b new file mode 100644 index 0000000000000000000000000000000000000000..7fe3be2b251204b24e325c52d9ffe165fb661b7e GIT binary patch literal 172 zcmXqLU}CbDHfS(tU}IXwz`(%5+vagjp6fqj@dHNDy$lQtOo9ze$^ZWvFf%hZFc>h1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}>l5roJw>o6GTurVr%sQ=jC p&|m`rjVugG4Gn)bENGaK_h(LfLqkKu|BgDaupt8&utO*YK>%IiCzt>L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dd2eca2b1df5087d0798eafbab531cb2e80840a0 b/fuzz/corpora/asn1/dd2eca2b1df5087d0798eafbab531cb2e80840a0 new file mode 100644 index 0000000000000000000000000000000000000000..f747ff58a3a8aa1406f10358ec2fca30bfb84d9e GIT binary patch literal 368 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOr9o4R!LVVm026c1e+C0~Hb&z%CPr%(2CxXj zRFH@f8xx}eRD=;jgi>7=P?K31VYb6Wh_M}_2IOX#E=+SUT?i2|A;;nI=#`QPvL}O^Tb*0;`kOv!PS02;o70N3VwiH{0%4lf({OT zK>wgqL0+C%on3E22q(D-ge2#lLk$PR#bmMRxjlJSsyL0H1|fl^GS?uJvI0QVTDQIO zPWm@|TYtX1KVBTIX4BXE+w%BnHR!=HGDdR5c+E?m2j7&Xb63R~PnYTAB=!j?@;2hP zDUE-Ca9o2sm{R%$w>#La4$|yb+QkEYn1=zlu2K2W!lpQc22bUj8eEmOUHQ%A$fQWbT3nHdgIM76w6(AOLBx6#4)F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dd8541f6e087ac5f40377f6fe85639ea45cc8b2d b/fuzz/corpora/asn1/dd8541f6e087ac5f40377f6fe85639ea45cc8b2d new file mode 100644 index 0000000000000000000000000000000000000000..a56bbff9e5a7f9b0977053a59bdbcb01a949fbfa GIT binary patch literal 4 LcmZ3?B*y>%0@47) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dd9809e0526ade3e7ec36c0a91700379634874ed b/fuzz/corpora/asn1/dd9809e0526ade3e7ec36c0a91700379634874ed new file mode 100644 index 0000000000000000000000000000000000000000..0c13d9e3ad27612d91d02f2775722429ba260b88 GIT binary patch literal 268 VcmXqLU}L~|3;@~I8aDs{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ddc32b9ab8a273e10a14f149b7ab4e60cb047a4e b/fuzz/corpora/asn1/ddc32b9ab8a273e10a14f149b7ab4e60cb047a4e new file mode 100644 index 00000000..e462797c --- /dev/null +++ b/fuzz/corpora/asn1/ddc32b9ab8a273e10a14f149b7ab4e60cb047a4e @@ -0,0 +1 @@ +ˆ€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/ddd667feaa595b64947fd920f59b57a702a4e89b b/fuzz/corpora/asn1/ddd667feaa595b64947fd920f59b57a702a4e89b new file mode 100644 index 0000000000000000000000000000000000000000..aebe2efbd74068017ca10f26595030fe2e578b9f GIT binary patch literal 1817 zcmciBOA5m<41{5KQ^-w9S3X-$;3MUTCD?_0pbBNtW+Nt=UmEApM<4gwv$do2SzfcO zo0etqrntQfxa@RTrXHLq3uuVCGuxi^3LC@=fM*Et%p#!r{ev`_$}IMl(o$C;?goby zfC8Rb+^6zAY|-cKXqCh4Eu}@}_7DhXUUr64%u=ujWU3HQyZ{(5#50S4%J=Z^ufQxS aPoye1wR}_i=(ATSt$(iLUnu}*OB-*}>FM?W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/de0426f0b8c9b1cc85f9e55611c6544b1e4c9eeb b/fuzz/corpora/asn1/de0426f0b8c9b1cc85f9e55611c6544b1e4c9eeb new file mode 100644 index 0000000000000000000000000000000000000000..f640528ee4779ca1a0643d7a0afdf0782ea9c7d2 GIT binary patch literal 1633 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$HGcYnRFc>s4h%*|1 zlo>RzF^9@3vv3(SG_oyaNp6tJVSoaV=Flt=rZ+-RMz9SE zS5P4=Xyg$ZMd)bC0%a|DMjO;wgbIn13Py~kZ+PKLh0vs`5e5y0u=3x4la0|30I2gW A#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/de115beb1a7af70eb0c0ccde5425ed349ca34a2f b/fuzz/corpora/asn1/de115beb1a7af70eb0c0ccde5425ed349ca34a2f new file mode 100644 index 0000000000000000000000000000000000000000..81d58b9d127f463fa75bf38a4b1bdcf3e63f6b83 GIT binary patch literal 464 zcmb`CF%H5o5Cqp&B2j?M187o3P+1hbA-|z?X{!7#@1Y@D! zlB^7EB<+py2<%w!B1VsZ1_lnm2{SGQH*@!Z=B&8|iP2ugr#LV@L=7KCKyB+C^)93A pxG=eNo4_>U<4WW{pdIvEPV(GW$1?Zto|nGsp9fP{+1B4Zg*RU$v_}8{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/de2be1373a29397bfccda5bb5dcbf58ec5d16087 b/fuzz/corpora/asn1/de2be1373a29397bfccda5bb5dcbf58ec5d16087 new file mode 100644 index 0000000000000000000000000000000000000000..e94950daa4768fcaac3d6f7559b6fe13f138ee8c GIT binary patch literal 999 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gsIX0|Njjd420pT7#SE08rWD`4VoAj7?>Fu zKwJaTtzZI~{vQHVHiI}mAcBD*158rG3WP6AXyprp6|@Z~7(fKn_y4pAC_4Ls6&&4E ZN>PZo7~;{*%D}+j3XXADbPJ&53jpGUp?&}W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/de6221172414204f3069787d5cf5997cccefb0f3 b/fuzz/corpora/asn1/de6221172414204f3069787d5cf5997cccefb0f3 new file mode 100644 index 0000000000000000000000000000000000000000..14baecc2aa79ae4fc67611b63ee6c671df893b0a GIT binary patch literal 27 VcmXqLU=#fh1J*Fce+C8y1^^QV67>K8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/de6ba606b3ed8d29918f732777ac742ce7bc54fc b/fuzz/corpora/asn1/de6ba606b3ed8d29918f732777ac742ce7bc54fc new file mode 100644 index 0000000000000000000000000000000000000000..5ee2eb98dffd713ee1ad3a38e2a51f1f1be06605 GIT binary patch literal 110 zcmXqLFlaDnU}I!pU@%}1XEay<b)vZPY8=Df9^pKvRGwg8=|oT)HX% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/deae4b9588238c2eb246086841ba3d71cab970b1 b/fuzz/corpora/asn1/deae4b9588238c2eb246086841ba3d71cab970b1 new file mode 100644 index 0000000000000000000000000000000000000000..557fe8cc4aa80a37fce05a6594c7fe5925b2ccd6 GIT binary patch literal 67 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO@r+@^B4H-Rmj=u%jLZh?Y|IP{4AKlN3?M-U NkRSt8Fpz_mq1(W~) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dec19109a9afc17675a0d892685a6562ced2fdfc b/fuzz/corpora/asn1/dec19109a9afc17675a0d892685a6562ced2fdfc new file mode 100644 index 0000000000000000000000000000000000000000..dbe9ee4c8377f7bf84f7efcdcc3129a998d4d074 GIT binary patch literal 23 ZcmXqMC}=2XFm5PlFlb<6fWQJK1^`z&1!4dI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/decc923abc4765fdc89e2f5e4896538567a08768 b/fuzz/corpora/asn1/decc923abc4765fdc89e2f5e4896538567a08768 new file mode 100644 index 0000000000000000000000000000000000000000..18bc20621aaf0f128be56adcff3feac325353a4c GIT binary patch literal 31 ecmXqLU}Atkg9c_+MkXc>1}3)u+S*zSU;qF!QUe75 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/deda7966624f9b164667eb53be283fa0bcc01774 b/fuzz/corpora/asn1/deda7966624f9b164667eb53be283fa0bcc01774 new file mode 100644 index 0000000000000000000000000000000000000000..3b7499ae7b2185ebef2406cd9eeed4c609c05b57 GIT binary patch literal 80 zcmXqLU}92ZFlaDnU}IXwz`(%5+vai3f`y4Oj`jb4Rt5$JCPA1A1_lNL2JuElg9RYf X%%QT1EL;W*4UJ5V4Gav73=jYSg}@Gg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/def3882af4df1df49d07525776058b0a588e799a b/fuzz/corpora/asn1/def3882af4df1df49d07525776058b0a588e799a new file mode 100644 index 0000000000000000000000000000000000000000..fb77493818b7b7fe6fb295d17f28d36d559bd1c8 GIT binary patch literal 98 pcmXqLFc4s4*J|@PXUoLM#;V=O!l1_N#mLM+JYdDGl!bwT0RVQ31U~=( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/df1a7c20a09f3a09a0f99fa188787c7f578f8492 b/fuzz/corpora/asn1/df1a7c20a09f3a09a0f99fa188787c7f578f8492 new file mode 100644 index 0000000000000000000000000000000000000000..15e07063927756e90bfaad04fa0bac927b53aabb GIT binary patch literal 3999 zcmd^?u};H442I2tQUMDR43$_iGr6#LVP)k}*zX~Dg1!^a1M)flCF$8odTkLBUx$_? zcRv5W?NW~6f;n>BM2<~h-o_?S%Ov<$ZjEP{%~f2|l$Qpq?*@M)*6aN%K<@-Dqg*>{ zDDS4LMk`a+L`jQP7h@Zn)r!;W<|AFBv`7|S;v8qhIPiTAM>xK|2NoBmiN_@=A-o`+ zOiq0JuI?AID<$w)qYl0PdcxDPw+#fUsfUwDb*Nkr#HU6OV%q7>JY$4U5%-&R`gCuE zaGcQ=8hIbF7H5*ruv*bFuWV(Q;8l7ZMk{AxYGrC+(~`)`Qf#5kcv_(vENlmXv|8D4 zkj(ZXk!ZoNqkNs$=^=SqIYV@Og|4FT|{`W z*4Xtk6FX7Pl9%K={w=7iogsbyEB0X%Q?7qXK~@~=wF@hFU#N57$VCszhwaU4i9UuK3?GoRdExkAWvZ2(;KZg66^8f$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/df30174edf550070f94f45c0f0690edc8155194c b/fuzz/corpora/asn1/df30174edf550070f94f45c0f0690edc8155194c new file mode 100644 index 0000000000000000000000000000000000000000..4c7401a07a024c4cf2cd7ce1421a578d85b511c5 GIT binary patch literal 1821 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CURg-*g7(<+Hw!`(Px%&s+G9x$_2sImY%K;Gd6q2LSV#bB@YM+Rv-< ru-b_D?Aa|B021-vkb1iwPt?>*6M&#*vdnx;LBgzq!1kKJ`as_S;WCt- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/df8a5aff28a2ee844fcf32ce641990ac3e960f1a b/fuzz/corpora/asn1/df8a5aff28a2ee844fcf32ce641990ac3e960f1a new file mode 100644 index 0000000000000000000000000000000000000000..939472109be14b8e392d6e4c5e83d83a2083739a GIT binary patch literal 8 PcmXqDV`F6CVq^dS0s8<+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dfb345b5ea21bc26994850122a72a416e13bb4c3 b/fuzz/corpora/asn1/dfb345b5ea21bc26994850122a72a416e13bb4c3 new file mode 100644 index 0000000000000000000000000000000000000000..2705d3f1d7ba5d5c85c2f6711ca587ea2b5a0937 GIT binary patch literal 7 OcmXqN&}?E5FaQ7tiUFPg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dfbf656468c39eb1b4282259e6d79e1a33c33cdd b/fuzz/corpora/asn1/dfbf656468c39eb1b4282259e6d79e1a33c33cdd new file mode 100644 index 0000000000000000000000000000000000000000..b6368d96767cb7bda27fc387c75894c34d22ce9d GIT binary patch literal 20480 zcmeI4K~BRk5Jksv2vns~p-6ODmXyt~Kp-R}mc0OHV8anuM3u-1xCUq723!ZRLx}@P zJ3_Q!z^4AMT_jaI9gXMPV>=1wS-&vT;&nFY4b9~<Z1xo&+-H^X+9SfB5OrT^J`RnpmpcG$0X}1~` zz8VPxN}iylms`3X-<9GkP_m15TW+@+rT7Yz?7DW_CVE`Q-?MKkMS+sPf=KN`Z~s|u z`ZF^@q`D9&#Q}Qrpf^;YE3C-~lrp{n73c!$@vVu}ZnvHl73ivKwt`6WOb~b+pbHNb z2lhzH%^{V&B0;2fyXpA*y*NRn@f9e=0qy3Y|HX_i2<2nOw}4WQB8b$k>shhqAP77k zFd}*w5iui)c18lddC(gwP*k8RudPC%9u(?rM8uv0_8i(*>~G#0UAO)Wy6~-wZtb>t z`76MT+7Wmh1cCeeskaXT_g4Ua9f8N;Gtbt#-wxw3#^cSdQw1BTW7KERafCXqS{?Tt z*3Sa?;!b>ldJl+e02WY>Z%w3jU1f`F00e>OL$?_TDj8HV5mqwZcB-JaAL$JhXb>5M z3Uq~x&^)P5Q2sm5cb|B^J5CI9KkH44S@AkBCgro! sKKC+vlV+oY`E;L$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dfc81a8ad82d7b9b3e8887f9a7f9a0c4cf6c68ef b/fuzz/corpora/asn1/dfc81a8ad82d7b9b3e8887f9a7f9a0c4cf6c68ef new file mode 100644 index 0000000000000000000000000000000000000000..2db9739a18d82862eb57971154262bbfbab821e3 GIT binary patch literal 728 zcmd6ly-ve06os$tV3dGMQB*)eky;@!Fn#XSiUA2RbgMdK>BgIQq0d3zr$aX$p$j`J zvO~hcpE_~9*vIEw>GL&#VDp>RZ1v{Up?(eot%4VV)gZDC#N|4VI(QNu{Smn}bw;Vd zpWvE<1=zm$0c9f`Mp^D44>0H!VFS`1T88~;{7FhDYz0PI#A*S1D>sWG4 zVa=kdGE=CG3v23XkewD?pqILPNmw;OzanCkL}72blE2ZZ{2RL4^e!#z_!H-A*hw<{ Z1iO)@lJR%gt35_J`ro6Rx%5FrzXN#9f4%?! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dfed7fac45090de4c6c653e19d28cd5383386c69 b/fuzz/corpora/asn1/dfed7fac45090de4c6c653e19d28cd5383386c69 new file mode 100644 index 0000000000000000000000000000000000000000..33a3362f47b249442d50160bac0edee8e358b407 GIT binary patch literal 221 zcmXqLU}I$3&(L51hD=Nb1_ljmOxny03w&2S`C^Q7#NsA0wB{!HH(G%W&r@|h$9XF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/dffdbcb0b87562e8a71f736da906f7070d49bef8 b/fuzz/corpora/asn1/dffdbcb0b87562e8a71f736da906f7070d49bef8 new file mode 100644 index 0000000000000000000000000000000000000000..1ea0d4347c65c2e75cf96c5bdbf4a60e975139a7 GIT binary patch literal 40 TcmXqLU}H2~&|o0VfFA$=Q-uOl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e001ac66da4635ba88e755c8c109a80446250a4e b/fuzz/corpora/asn1/e001ac66da4635ba88e755c8c109a80446250a4e new file mode 100644 index 0000000000000000000000000000000000000000..15c15757bf025e3b0a3d28402cd2e5bd22c915cf GIT binary patch literal 472 zcmXqLFlaDnU}N%-)n;H|FkrA~umI5w26;>(Nd`w>+*x*PqMOc@+Wh^Esj|9Lu88w8 zFd7&d7#bQF7#kQy8Mqs`vN4Cs$}%$kXR$W0TxfpN)KJ8LfuVr`Yz!0gUvqOaIETr= z%!0uH!8JEGhjDS+$1u3;gE?9q6ii_MS+F3y^jF;69PGbo4NS~T<|uM_d=D`Q78sDQ zV`B>C&~AVj&A`B{1r}ytU|@t`g9d{R5I2-Xm7#%+*+W+Q!OkWIHUkJ%M1md27La1@GZCqF}G(4ZMy^C9O~)MQo&g!kcUgg-Mw= znfFq*W?E5RUCP-crPT?R>!lPkTcZjMFxY0q8FBN>sTt>0d0s0rqg_D>={fYZ!3HhZ zn&ij_0Ga?e=Kj3cwuE>5Hm{F&zPH#XNc95Br}f}O{>EmmvYnn7tad(P*EsAH1-eHH zDoNElu>-v(#_r*@f6zGEf-c>d<98luJ)MK0Sk>WSB$K8(e9(!;!)qLEzSq}S$@dp8 f{(<@a$rCCKJGMBG?1?Pjqb+FP?0NF%uItqeG3`G9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e040743ad6fc73f7f75d5eb1e553d8415302ccc9 b/fuzz/corpora/asn1/e040743ad6fc73f7f75d5eb1e553d8415302ccc9 new file mode 100644 index 0000000000000000000000000000000000000000..a70de780023c7c0241a9e200f531dc06f43e60a2 GIT binary patch literal 69 zcmXqLFlb<7*J|@PXUoLM#;L8s%*@2W$jHOMz^u-|z~I2Z;K<1UQNn<%(3|P+)&ERR K3=EtM3=9B~Obi|X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e060ce99abf74051e12f885572cf6e93fac4f400 b/fuzz/corpora/asn1/e060ce99abf74051e12f885572cf6e93fac4f400 new file mode 100644 index 0000000000000000000000000000000000000000..b22ffed67ae4b675436a7f7061e8016df5c5b0cd GIT binary patch literal 503 zcmc(cF$%&!5JmsY#uX7EV3SI)O`1>8CXhab2NAr)D!4cC1RlW3*6XBP*$oIbA=o$r zpBWf25?L{g80E=_hk`X$1Nr!{$zM@D~LlR|PL`B2g6?3Qc^Gc`5FfF&2Ja#(B_OUGe zLj3hEm2K*K%VthQLlPhLAR^vL^{Owr@GTeT#zoQkzR0I8cJ(N}>Z18kxUdjzVqs_L z5es6`FU*-y%qV8mGpU9GL4ouon;|Wvg|v|N<9#;(0U!Xx3P5he!b~jsKH-G4kQUNf zAuX#L(pF}-B1XO-Uyv{UDqmPEtb-9S0!ID{Bepto00;m9AOM8D(j}*MPwk%CeMkH8 duX|c3lyH1k*{_f940g_=&(Y`I`ut5qJOC$2(Nd`w>+*x*PqMOc@+Wh^Esj|9Lu88w8 zFd7&d7#bQF7#kQy8Mqs`vN4Cs$}%$kXR$W0TxfpN)KJ8LfuVr`WDGNtftdw^0ff`Q x#LQ%FZjQwLi{OHlH?T2ay1l0guqx3fX;`2|Nj{||NsB*b^h|Z&qj@`j0Tzv G5C8zPk}L24 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e0be24467d0fb242760efadcad787af2a1c53568 b/fuzz/corpora/asn1/e0be24467d0fb242760efadcad787af2a1c53568 new file mode 100644 index 0000000000000000000000000000000000000000..dbcac6741f69fb3acdcd7d35a90744cc4fb503ef GIT binary patch literal 272 zcmZ9HF%H5o3`Jjp#E?p?Y|!bicwvDB35lIMu=WfM1NY$yJpvbC-~>pB8I+`zpx*57 z@BeJkx6y~IiRbRVl3Xos(TBzkFx3QVNP53TKzh)Ura&VV22nHkTv6TQ#Oc?!JmeI?@0D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e0d24318aa8ba0e189382a1c08e691cb15c88949 b/fuzz/corpora/asn1/e0d24318aa8ba0e189382a1c08e691cb15c88949 new file mode 100644 index 0000000000000000000000000000000000000000..3e2ad88aade81554ce49f7155f7a7985d49a30c2 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4dU|?X>V`F4wP+(yAW)RFG zgC_kCiT{s9W(zA|%n%4xJrnG(&pe~C)c Hq1zb%P@S4j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e0d75ce12dd73cffa9b4eb7f5f6614aea2095d1e b/fuzz/corpora/asn1/e0d75ce12dd73cffa9b4eb7f5f6614aea2095d1e new file mode 100644 index 0000000000000000000000000000000000000000..7853b1220f55763f4b0dc2b18d287387734065ca GIT binary patch literal 1841 zcmXqLU}Iu4SkPe5V9>;rY0$)^zJQsDk%@`LcjE<518z2Utu~Ky7A(xH3em&~94f~8tO>5%{KmDm4mKPLUd zI{f*u70X2VS$;QvyL?pcFq3JBaFp0Yqi?03*J&qS*Lwd+iCJ>)MGwZ~Orj0b69W20 zmATJsnzR!f0)(9QGu(&Umc1!GFfzPv*Of^BXNBwnjSX8o#R`>Q_-Kd;Z$Hmz)N^9l zLmRQG?vR>ZjR%X@$!Tw1Ryr|naXt4hMWdvTzmuvMRjkh}`M7UI;DpW<&G#QhJWp(US?pHd+p_tQL-~R8zb+=9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e1315276decbd24a4e1e203a99c668f8c5d9fabb b/fuzz/corpora/asn1/e1315276decbd24a4e1e203a99c668f8c5d9fabb new file mode 100644 index 0000000000000000000000000000000000000000..57706a731839933fedfbcedc301f41996154d8f1 GIT binary patch literal 62 mcmXqLU}9vzjub!=oRic#C+noJh=JAoV_=8{F_;(`zyJV@hy>pN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e13b9b09912810d5dfb6bae75a455f709c47df13 b/fuzz/corpora/asn1/e13b9b09912810d5dfb6bae75a455f709c47df13 new file mode 100644 index 0000000000000000000000000000000000000000..3f9edb6371c13e5966b9b0add91720bcfc929d6d GIT binary patch literal 2648 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVO*`$GCKSRU91_Ll;V`Q*mU|=v{5O;THU}gp} z8w?B@*tqY&HG*Zq5^RhN42%p649v_hl^_%MGq5o-EMWKyF$S&>RTaV>+zJ*DGJ$dh zsD8n4A|0hM!Vwg>pm+e05Dqgl^A9i&6wFwqq471Mq=$0AF%Pig2iW?7%x{$0Oh1 zH!>P50I6mUm6c&hHE3ASu&}{^m5ouwh5=0RfhlV_Fr}>l5roR=Fc|2tF)E6v|JdKq xu;I_9#sw|fjSasyENGaqp`l?$<~}(j>yW?{0(%4X z(Yfz<>n|O+@laxK&zGBtNpELJO*TGJ-eguuGNdOn_x2BGmIWDdC$q|SX5BxSnN@~l x6K@v=`QJvX49RRhO-4orhF}IG1^~qu B2G;-p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e1d9b8fa24074cd110a65682a630f8ddf76f6b5c b/fuzz/corpora/asn1/e1d9b8fa24074cd110a65682a630f8ddf76f6b5c new file mode 100644 index 00000000..5cadb65f --- /dev/null +++ b/fuzz/corpora/asn1/e1d9b8fa24074cd110a65682a630f8ddf76f6b5c @@ -0,0 +1 @@ +7€0ˆ00000000 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e20a8225c86380d668229b784f3cb2f31302b656 b/fuzz/corpora/asn1/e20a8225c86380d668229b784f3cb2f31302b656 new file mode 100644 index 0000000000000000000000000000000000000000..e021fe83868fe8c59b87ec4e82ed03aeeaaa5973 GIT binary patch literal 3288 zcmeHKu?oU45Pg@{h)AK(#Yu2&m!se!bnoDI6h9*h_D}o{H%EWRNg_>Ete{qu(&3UJ zIS3q=d+*&H8$FK8ygUUo3Q6r@*lnel*=Ut`0E5kh787E3PdU`XxXh24B0WgfK4#t& zUI1VR6qu*hS~eWHSBFdy0c^Ct_5GRNe#EHxTMUBN8=8dwF_G0c}?szMAlzE?CPKf}uj8N6Py6iVc Z(fiJCS`7^5N0HNRnlK=n! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e2541434944981cc97ba1b4e9aa2ce220c0cbf4e b/fuzz/corpora/asn1/e2541434944981cc97ba1b4e9aa2ce220c0cbf4e new file mode 100644 index 0000000000000000000000000000000000000000..572d3ae9487199d7a8639863a85edd59b38711f1 GIT binary patch literal 293 zcmXqLU}I$3&(L51hD=Nb1_ljmOxny03F$%&!5Jms&##IqT5H*z$QYc9?v9J)*S){Y|IICbzqLqip4RRf^itNUi1QB$m z`LM&x<1K472+}0I52-&UkwLRP@aVvoJ4gVq zQ&Eph21c!^i!T?DOZ##KqD@v5ta(!H@(5t9oHL&QNVCJBG(g%g^B-Xh{+b`vnK$wa rW?I4&HOxMbe}TFEWu~rG9lw`L+fwk%2(Hu_c~)J6)_j9U!H2phT}Mew literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e2692bce0497a7d1715c61c9f8afae4a70b487e2 b/fuzz/corpora/asn1/e2692bce0497a7d1715c61c9f8afae4a70b487e2 new file mode 100644 index 0000000000000000000000000000000000000000..77717b0344224c1d22aa9a8efff63b04f17858ba GIT binary patch literal 1592 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Ky7A%YgtlEt%3<}J049wsEGk|~-m_z|Wj0_A04Qwo}22BhM49tuSAg%$CRxs1v o3Oe{=)CwY_d(Z?FBPEG;(D;I)tT&Q;L5Jw3gB3K5Zj^!_08c{9(EtDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e26ca817afc6229a8084d7e3463500ca5cf32cb2 b/fuzz/corpora/asn1/e26ca817afc6229a8084d7e3463500ca5cf32cb2 new file mode 100644 index 0000000000000000000000000000000000000000..2383c3b0984e13702867e7ebe8a86897843d55de GIT binary patch literal 10 OcmXruSj@)70D=Gq>;V7( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e280d065a824a791f8305234d3e093fc9a5a90c7 b/fuzz/corpora/asn1/e280d065a824a791f8305234d3e093fc9a5a90c7 new file mode 100644 index 0000000000000000000000000000000000000000..7af7675c6ed4074d456facf4135e846b10c47b79 GIT binary patch literal 2 JcmdO50001104o3h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e2fe116f92c906e1cc43a6456f2603ce9ae0f51c b/fuzz/corpora/asn1/e2fe116f92c906e1cc43a6456f2603ce9ae0f51c new file mode 100644 index 0000000000000000000000000000000000000000..37170fb816e7c0e7c1b091b9ff15ef87fa6f224c GIT binary patch literal 6707 zcmeI1OAdlC5Qe8MVvI2%u2>n@uo-*>SQz5U+jxa)BG>W;UWcUycDkYEQ5u+%5ZLf% z=9_=oQk3p8$g{jyv4zL@3nW$-=ZGj>9tr>ils-#+hSl>9J$D}D*Y}w-oP~D>wqgUK z_&_->)%|Cz830PxdEx^A1cUMw>m_dL60D(wfhaU2CLcxYh+Zp-SSVUgBT-G=ZI{I4 zt=D%m*T79IdY)J{SQv0O;kF0&I9O28Qbj53FErX<3t!Nh)*coX`GR_sVvlNJJyi)} zF)0>=dl=kVhyMo6%-yPqGEh+lB*xKc?M+mwQMC3(p<}(Fq8RktqU&>z|L^s&o{o-j Ol*ET5KJBBrlbSDyhD+c8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3102cdc85fb3c26ce6bf992afba7e1a65538b2b b/fuzz/corpora/asn1/e3102cdc85fb3c26ce6bf992afba7e1a65538b2b new file mode 100644 index 0000000000000000000000000000000000000000..d976746b36a5dd410e25c4b6d24f5a258af59763 GIT binary patch literal 125 zcmXYpF%Cdb7=!!&nxdOo(}ZLRWCl$%yi v!EXYWm>p~Zh;9Th0lANqKLiTPK?05GfeJ+&`m&+U-FEUEDI-8P4b8VfHxIGbL~Wx zBRO;P*o9(l6pUFuc`zuAB7rf(E~#rn!APnS22=(ODZv*iH2&05(UnnC!U(GjX+OpV z#hvRY2ww-<$}p3)5dPaEyswhS&6I_((5s2MERiGjx>??vW{`j=9q|Tikljy8(kQs2 z3aexcS$8w+NA0ZS)Em$%&;Ot*N+qP;K-W8s&?PzrX04>jNXc|KdNrFW->> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e332aec6ebc9b2d794b89fd559ae94d5df62f018 b/fuzz/corpora/asn1/e332aec6ebc9b2d794b89fd559ae94d5df62f018 new file mode 100644 index 0000000000000000000000000000000000000000..e15cdd6b96a5bef0e130715a0f108af325cc3033 GIT binary patch literal 760 zcmd^-v2MaZ5JdOx%mtfV2(o}kk)>2AsNSVR6iA4Imck7kf3g+dLB1|cdfMo0Oe922 zitJW1JG0Vg7e#$OJ8TZ8U>@vIQEM~`>Me+TDyhRoV|qPd9|z>#)fuIQI3%>d(^MQ& zw!~vgz#B_CQ*2BXua~8{nLH)sb0=pS5?C}&8VDcVbjO;N&E@M%Oan0goxW3ex2>wo s6(-}wySf@@qoS{JRVihS+HXXh5s^O&%e}(>o1izYx{v8m()*l#08>tQX8-^I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e34574e4a907ad6212bf589860a6f72208e433a7 b/fuzz/corpora/asn1/e34574e4a907ad6212bf589860a6f72208e433a7 new file mode 100644 index 0000000000000000000000000000000000000000..806100e2c3f019b040b55a1f9aa219453e3bac8b GIT binary patch literal 84 zcmXqLU}DN*FlaDnU}IXwz`(%5+vagjllebm921l1UIqpRCcy@#6b6tA1_lNLcJW3= g!vzfn4e||a%%QR}EL;W+&5cY9h71gh3{YSI0Nw`=KmY&$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e366a75239894ca54ec000fcc379a9c2588b805d b/fuzz/corpora/asn1/e366a75239894ca54ec000fcc379a9c2588b805d new file mode 100644 index 00000000..812acea4 --- /dev/null +++ b/fuzz/corpora/asn1/e366a75239894ca54ec000fcc379a9c2588b805d @@ -0,0 +1 @@ +0€0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0'00*0*0*0*0*0*0*0^0*0*0*0*0*0*0*0*0*0*0'0*0*0*0*0*0*0*0*0*0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e36747234db2614e3887edccdd58c6a62b1b0702 b/fuzz/corpora/asn1/e36747234db2614e3887edccdd58c6a62b1b0702 new file mode 100644 index 0000000000000000000000000000000000000000..1e8a3d880e205d97999c7ca0cd40a7cf880c125a GIT binary patch literal 54 vcmXqLFlaDnU}Mx~U}RumFkld8G*|!?(q&}SW?_Hi_@% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3a55a1ee8422b055b3043f96d799081f264ba99 b/fuzz/corpora/asn1/e3a55a1ee8422b055b3043f96d799081f264ba99 new file mode 100644 index 0000000000000000000000000000000000000000..8dc91b5fc97cedcca882bc2fc999a87f2439c50f GIT binary patch literal 2576 zcmeHJJr05}82!E$N*vrs9F)n;E+4n>0=-WsuA#2p#L0`e8YiRahx}9$(*YAPg@r=t zBaio9A6YfqRNLw{$4u-kS%J0$vPuvE94zsvPy+%0!2(M+i>#8SSSEavuUCk=H_Q`! zfLlkJV$F|E^{_DQTc{Ig4u@#SiVFeAdR0d00aG7X3ry2r`HqZGb_7JKTCEI!nNL-% zj}Wa$6ErPKiX9ii=-*NGo)=RMsxcGNw_9h-sdDqh&BUiF+($8)VlUugG~Q} b>;{F(7p<#SUaiVGSzeXR$GF~)XD(k)i(qNX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3a576a4f120eef80c0dfac3938f1d76866b67fd b/fuzz/corpora/asn1/e3a576a4f120eef80c0dfac3938f1d76866b67fd new file mode 100644 index 0000000000000000000000000000000000000000..bb1bfacb59d0beb4da1840675c948410d33ac234 GIT binary patch literal 18 ZcmXqL5acmvU}G{c;9-hVU|?Wi0015C0&V~R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3aeba3629cc88e6618ba90be5ecc2a3965cf373 b/fuzz/corpora/asn1/e3aeba3629cc88e6618ba90be5ecc2a3965cf373 new file mode 100644 index 0000000000000000000000000000000000000000..e8c83a1ba53bb870b4bfb94a2a1e456834328772 GIT binary patch literal 9 QcmXqDXJgb_z+}My00rp*LjV8( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3b4f33b7369a8835aba8113c00c2b0463e2dbd8 b/fuzz/corpora/asn1/e3b4f33b7369a8835aba8113c00c2b0463e2dbd8 new file mode 100644 index 0000000000000000000000000000000000000000..92112b76dc26db0f0f73aac88138ad42557bec92 GIT binary patch literal 340 bcmXqLVB+|1Fn9@*LFY7Fp~c7m0UZAUy=Zdh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3b93bef1469d4f78a05fde7801e3d7e2ad06b73 b/fuzz/corpora/asn1/e3b93bef1469d4f78a05fde7801e3d7e2ad06b73 new file mode 100644 index 00000000..9e4a43bb --- /dev/null +++ b/fuzz/corpora/asn1/e3b93bef1469d4f78a05fde7801e3d7e2ad06b73 @@ -0,0 +1 @@ +1707161316-1137 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e3c360383ee92a71305900ca42aa4519b3d98441 b/fuzz/corpora/asn1/e3c360383ee92a71305900ca42aa4519b3d98441 new file mode 100644 index 0000000000000000000000000000000000000000..69e00f2c9cca30d1ac587456b3813f171dc84f00 GIT binary patch literal 8 PcmXqDV`F4sWV8kV0viB( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e3c96aca3631a330686f3a29fb18960889e9ad4b b/fuzz/corpora/asn1/e3c96aca3631a330686f3a29fb18960889e9ad4b new file mode 100644 index 0000000000000000000000000000000000000000..45e54b10d08a8d0efcbd87552263b5286a880cf3 GIT binary patch literal 116 qcmXqLU}7{dXfS9nY%pkGW706tX<*~g;o;%oq9)+sVSoX40|NlM)d-XT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e40b375ab3e955f044a370ea347cc3707bcbbbc6 b/fuzz/corpora/asn1/e40b375ab3e955f044a370ea347cc3707bcbbbc6 new file mode 100644 index 0000000000000000000000000000000000000000..11a7abfb678f24aecba6377147fea746d93c08b8 GIT binary patch literal 1255 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1H!>Q6 zlo>RzF^9^^uy7ePG&3+YE?@x5g8@i$XqE`mn*s&~X0R@Z`bL-`jSS+924ornGh@IV m0{6{;yJS!W365~NN=Z^-z?q~5mDfiz2=?qg;2DI0ff)c|GTsRQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e4156b3b149d414511a7ea1a42ea0ebd7746625b b/fuzz/corpora/asn1/e4156b3b149d414511a7ea1a42ea0ebd7746625b new file mode 100644 index 0000000000000000000000000000000000000000..d969ccc03dce956f54af64f07d15383b0cde152e GIT binary patch literal 1052 zcmXqLVB^+m^Jx42`QNt}j7<9(8VtaYiOImgpn;7^o0);ZfWe?ag3(HX(E!3W5N2c7 zYV$Z}%f!gW0cJ2WvNJO>fPg^*8%wJ}69WSSGb0-#rwjuFgJA=dVbH*4(6FSzpuw=g z07;B;RZ$Ql;D*xPMud+jcRi_Qu`zNo$Y2jv1_lOJaF~yfprA1DDbx;1#jwz(O~NKE KX@D~z6#)R$)vLt- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e428f7f3cd8c4c49c930206acb889620a5c2511f b/fuzz/corpora/asn1/e428f7f3cd8c4c49c930206acb889620a5c2511f new file mode 100644 index 0000000000000000000000000000000000000000..7ab1170d3a763a8d57bb9654f3b2a75ad767b79b GIT binary patch literal 21 ccmXqPkl;5kF)%PNHZ(D?G&M3X(PLl$04^v4#{d8T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e42bc86af679ba434e8237bfa3bb4bdacff999cd b/fuzz/corpora/asn1/e42bc86af679ba434e8237bfa3bb4bdacff999cd new file mode 100644 index 0000000000000000000000000000000000000000..e3cfc261d1f233190ce2b77100e249dfab6a601c GIT binary patch literal 93 ycmXqLU}H2`&|uKOCQ+&`Us_tKSBeB!8W|WF*d)Lbs4}G>Ib<0Nm^QE;2mk<$N*tU3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e43b766174a8b2b9882c2d988ca986cf928602fa b/fuzz/corpora/asn1/e43b766174a8b2b9882c2d988ca986cf928602fa new file mode 100644 index 0000000000000000000000000000000000000000..bfb4b06c6357c342006e314a634454c329bfff31 GIT binary patch literal 172 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1-U0>&Ccy@#6b6tA1_lNL2JuEl zg9RYf%%QT%EU5+!3mO(S7_f>ls@O0Xu(C0#@PR37IWVQI0TG1C=`a}RurX@!sQ=jC x(6Hgprp5&=+Kns>N(~KvHY{kE(OCb#y`iDuLr+ItC0jGMs38LwutO*Y1^~l!C`$kU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e45881c1b867106ed1c31a4edc37f58be81b79db b/fuzz/corpora/asn1/e45881c1b867106ed1c31a4edc37f58be81b79db new file mode 100644 index 0000000000000000000000000000000000000000..2391c71c6afe87339ca5329baacb61608216f51d GIT binary patch literal 1784 zcmXqLFlaDnU}Mx^U}RumFkld8G+h7{(q;h*HLx*<%Icx8xnj9u85pz}7}P;}8rZ0# z6k--7mQij32|lCTGF-tsDvp^7XdNb_u}SL?9yOo-sd^}eIe{V=MH&JO8rYaZWks0Y W7&0(0gS?C?4AB7w5S5IKp$q^kF3YC? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e4858ba5fc7e739d17ff0c0f8813b3fc1fa262b5 b/fuzz/corpora/asn1/e4858ba5fc7e739d17ff0c0f8813b3fc1fa262b5 new file mode 100644 index 0000000000000000000000000000000000000000..4831b7ce1d8b8ce7db5a31667eaca74c0992b884 GIT binary patch literal 20 bcmXqLU}BuZ!myx$ja9pmg+Y~pfq?-4EO`S| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e49d1ed33e4c5f60580624db6422938115f2b831 b/fuzz/corpora/asn1/e49d1ed33e4c5f60580624db6422938115f2b831 new file mode 100644 index 00000000..b30c581e --- /dev/null +++ b/fuzz/corpora/asn1/e49d1ed33e4c5f60580624db6422938115f2b831 @@ -0,0 +1 @@ +00* \ No newline at end of file diff --git a/fuzz/corpora/asn1/e4ac07665287db3b063d76bd3663c7c673a604be b/fuzz/corpora/asn1/e4ac07665287db3b063d76bd3663c7c673a604be new file mode 100644 index 0000000000000000000000000000000000000000..bb041f8df197184ef1f0d385684e35fc8eb42c0e GIT binary patch literal 6214 zcmeHMOKQU~6dXxG{ZS~i3vatkH`7H!Db3!8=^-A4_#Qb)Z;(w7lT~Pml|>_)L;^Vl z=ZzN@#zxN`y?LW&ioa>hv{~1;S9ivKLD(MFk`!;B96(Si^Hv##G4K7ww5eBfYy4$9 zaJY6eOb8+eAG@0=ezM>v0A~PfBk0c0gY!SQS2z*!?}J@DMwd!Q@EwI7uze{2vvAr+ zRs=;j*!%>9II`wHM-JYH$b->yK-o*-fL$K+Lf0YkzJY2%f*KXpW7UG#6`Y=fI0DUs z({rGC5U;`%4i44C;k@CzfvZ=E{(NX(^8BLy{Ma68XbwiUM^Y^+twp_1f3E&K^9!WZ z#IpSo)q>Jma3;QFWHm8f1-eH{(jw{U9{*SGmQ|x0RTOI1Wf<{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e55ca912add0d610327ba0bd51dcf17e0f8c7f76 b/fuzz/corpora/asn1/e55ca912add0d610327ba0bd51dcf17e0f8c7f76 new file mode 100644 index 0000000000000000000000000000000000000000..e67d6805333194941fa70a693f57f5b7fb6303ae GIT binary patch literal 1643 zcmeHIF-`+95ZtxbzFd^k1*HfQ7eR?G%@~PD`2im|Q2}2u2c+c*7aD%SKM-$#f{GT| zx$BZ53PK=QSKeLCdbG1^c$=1sv&BcoiCTJi#oiITRRGb0M@>(-epC!(ZRUV0afFfE zLvD2?m!lq98)tBsxp}nXaGhgz(nXh7xWJ*+)ufPp3>w2ZtqiyK`n~sjfZ+>VRYF60R9uA#Tm!| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e578cc428ba20330f3e9ad22788dc11a953098b9 b/fuzz/corpora/asn1/e578cc428ba20330f3e9ad22788dc11a953098b9 new file mode 100644 index 0000000000000000000000000000000000000000..f84c5abc778aa568c30c30f0da993dc12eca1ff7 GIT binary patch literal 23 ecmXqLkPtL5F)%PNGO#c(FfhkUZV&(f DXAJ8h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e593d8b973848f530b066885d7c6042116df9b44 b/fuzz/corpora/asn1/e593d8b973848f530b066885d7c6042116df9b44 new file mode 100644 index 0000000000000000000000000000000000000000..89efbc2dc82de0c743e733ede78c439a2e7210d1 GIT binary patch literal 647 zcmXqLU7g literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e5c8c3d0d47f3b1f8c90186dc7e68b5ab192c935 b/fuzz/corpora/asn1/e5c8c3d0d47f3b1f8c90186dc7e68b5ab192c935 new file mode 100644 index 0000000000000000000000000000000000000000..8dfddd45b11f7ee2cb7ae970429127134123ea9d GIT binary patch literal 2224 zcmdT^K@I{T3@ptC*M4O zd=m&e2?X&B5QTIA2sjWsP`-iqxLp^I`*sJ78sBB0( zX-(U`(uZwqMY|ZI@-$(3E`51}wrtL8lxKwPyo#O6`<2N?Tde~J>7+&4xH49p<6004927Lfn| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e5f5b991a2421cfbc44fdf56980e45438a1672ef b/fuzz/corpora/asn1/e5f5b991a2421cfbc44fdf56980e45438a1672ef new file mode 100644 index 0000000000000000000000000000000000000000..59f5a82b6fbff20c462f70e5bb6c1ce8758132e4 GIT binary patch literal 174 rcmXqLSjs>gT*$DHVJRGA*8@@kgD}-FK8Pl4#&Q(($aJb}8@trGEuED^|8HRyW!PJ2;y&~0@jrK5x6WU@ zb9H~#lOj2f;9#>gt}HBau?`d#_AkJ9~T zXPrwIM6tW4xLj?V*~(C7g2lQ2|NFum%*e#Z$ZW;HlJzO&&SPV{r&mm-Z)|_J%Wl8} n_b)umU`}N~4qOBn0)dMo>J$(Fl!BR|DcB5@f_E^jTEzqaHG?;- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e5fb7e94d67afbebda26bb4daa811fe1f03ab990 b/fuzz/corpora/asn1/e5fb7e94d67afbebda26bb4daa811fe1f03ab990 new file mode 100644 index 0000000000000000000000000000000000000000..c4e1afa4c5f73cbbe6cf067a89a7cc329a5e2c9f GIT binary patch literal 52 rcmXqLSlD3Du%y8N4B6NW3=B*d7#J8C8JL(DVHAi7#*7RMOpFWwBL)Vf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e603ac10f3d35e66a15374efa4e6d9b3433eaa4a b/fuzz/corpora/asn1/e603ac10f3d35e66a15374efa4e6d9b3433eaa4a new file mode 100644 index 0000000000000000000000000000000000000000..58f96beec527bfd222a43d6f3f27b4cc8c8a613a GIT binary patch literal 62 zcmXqLU}BuZqQ$__$dJRpz`&8w%D|k$$N&b`5Q?FSK_Qewi;+RAm05*xK?57Bb|VXe H97qxX3ug!Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e608ded1c24ccb29e35f6276384a62f512f491c2 b/fuzz/corpora/asn1/e608ded1c24ccb29e35f6276384a62f512f491c2 new file mode 100644 index 0000000000000000000000000000000000000000..4fe9d921b5b60e6efdbe3c08868aeaffbd1adde0 GIT binary patch literal 728 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOrNL5*!LVVm026c1e+C0~Hb&z%CPr%(2CxXj zRFH@f8xx}eRD=;-L^vfTn|7b_#o9GD0Z?jg?{Y`!2TH1OIE3qyp- zFn>|Yr_>4`;#~+zEx3JwFo%c~rD?#zz`$V8z{VKCz_6bYoLYBOa(rgwWME(eOK^VX RW&i;P1_p*E29RnH000)5btV7+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e61f0890a5f43b800545b27c8f883a6f35e2111d b/fuzz/corpora/asn1/e61f0890a5f43b800545b27c8f883a6f35e2111d new file mode 100644 index 00000000..9bd3f64a --- /dev/null +++ b/fuzz/corpora/asn1/e61f0890a5f43b800545b27c8f883a6f35e2111d @@ -0,0 +1 @@ +(0*0*0*0*0*0*0*0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e634182c80d87d86fbdcf36da47518a297d4f346 b/fuzz/corpora/asn1/e634182c80d87d86fbdcf36da47518a297d4f346 new file mode 100644 index 00000000..350f84de --- /dev/null +++ b/fuzz/corpora/asn1/e634182c80d87d86fbdcf36da47518a297d4f346 @@ -0,0 +1 @@ +7€ÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/e63829ba01838973785cf94e015842733ad851ff b/fuzz/corpora/asn1/e63829ba01838973785cf94e015842733ad851ff new file mode 100644 index 0000000000000000000000000000000000000000..e24204b13b2ae38d91f0e64431eb0b348ad9fe73 GIT binary patch literal 104 zcmW-Y!3lsc6hre{sVI08yyyaYNw;u;F5wg@Lg%PcdKLR}e0fwD_HveYvffou&J;lf mM*@%77VLllAeLzZJ87q85j&2*jQQ(niv=um>C&BTmz6p s44@97vSa?koPYoj$DAAKjxj)l2txxCi&bNTAOiyfe*=G?kQM_20IX3tp8x;= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e6587a01fa64c3414dfb4e366508da3579479994 b/fuzz/corpora/asn1/e6587a01fa64c3414dfb4e366508da3579479994 new file mode 100644 index 0000000000000000000000000000000000000000..87b43e9fbb6046b9d235e2a8f7ac15228d685043 GIT binary patch literal 390 zcmbV|F$%&^42J*YwXcXRJaFk$aI{@Q!A0oalc>jd7VHhYfgZux&C%;PN#&(D2oA*r z!XF6vlTW;zmwnqmGnzT#8@y;Ti-@;e89*RDr%g_xx)x`XvTq*^lZ|&3MX4!ZG5{A~ zi*-E=1EsRise8jjfOs1nr2}9Hp_SClWf5TCLGLjMhArrWcSG)o5LOyo@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e66040ca4ae5201f3fbc0794de49f859e2c2c35f b/fuzz/corpora/asn1/e66040ca4ae5201f3fbc0794de49f859e2c2c35f new file mode 100644 index 0000000000000000000000000000000000000000..9f07be2add7aa81621c1fcd86b9c015df448b6e1 GIT binary patch literal 4104 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUuV5C!;vco|S3g9bL1R)Z!61_owE z1_qGsQTs<=_;ZZL|7iLj;`!eJT%?VbeBZx*!giX8DC8aIPZVR-< zwuW8U7Giq^qX8wTBqRnUN+hTlB{9(mC4L}=2=)UZ3Wbr7;E58`DsPCYGE?b8jm$b8f)sK@kDH0tRd3a8joNVR7#>KJU;M$HT4T|CQQ%z zSRR@bj&6v=njeVPHbmozhUa6=(RmHc)e{&X2MZBR6S%!P`vKD*K;Oh`FsraQRIulS z_eTZ}2(&l?tcF`)Y-!P|X_duAV?!khYrgJb2m(z8h9Iz(q{5^ga+6YP>GCiD8yO0d z->6oqjJ6i~YD_R>l+m^Y+BXvg3Jy1_=@2%~uAXpq_{`}u!)LxkgIN^jXf=m9D7Zmj zaa)Jra6p4mM&m29zS$^%G8+F(sUd(s!6>7fHfoH4Kql$D$x5gSKm=I_WTc7x$~R=p zLC#3Eue4EQ3QPoNSs}@9v%c|BioCs6 zV=`G5r;fLMzK0=jj%WcRjqrmr#13E|6V{;qg-NC2wR^~YO(<{N#*x# zYmf2`89Hbh4u!pu3?3FsS=C|p}Qi0aWeJY4FOD$ZLm9|eRBX&7}SAu z>!u2F0-EH^+IF|6#t^}j6P3uqHh=7LKx77WZZAyIzS&HmAg6OroiYj>95hJZdJb!~ z(VIi>Jvs!2@}5!$(yQkJa5+AJD)PROfKh{-3okyVF$YaF$#rG>C(1W@MUj(g+yB-f z09puS?@g)xCYu9iNM<3mL;EHdFPkj#)Mbq+HL7}3KjdIk>Qg`FVAPdKUCF_yWTmd= zU{nuDPt=(0t(a6tN>}@8O#VBJDrwV{(5Zn?t`^FjRApf#jd31G;f}n+QF22co`F zhG>x&aA3X0ED#J0>f8q68gszT_s-JwHn7RVP?{y)Fk;m(@9E>!oo;;{RAa9l{f@)-c zbFCmoK2qE^jX7wH(tF*Mk9p5Ksw~}f5Cbv`ej8M3)C0=h8Bh}@iTP7TsZq_r?GLC~ z6F>-ZxUk+e`oPh400A`Wj61aPFFlx%U{*%W$H}ZYzz8X{` z7h3nV9E{9@|A11-qIM+r^`IKr@ZAGJjC?@32ZI>7MZ0eXFhMp|_pJbyuUj4fmf9UGuudkI2j)~tpt?Y*HM2mWR3wE4n z`tFaRsYBy_jU61kc%^0k-raow6o8^7-udE}Z-L)5%TCI-dA#-@p4VxL7yq zmx8k)K6UfOD|cMlQ}^Jp59S~Lf|tLWX{);Y&$?6n)m@R!^x3!P^bQ?baCpt4+Ua#q loqFTYvLlyv9-4hTJ^$GmyUx#8ah1 zH!>P50I6mUm6c&>)G%mR(6A89my~DWVr64IqRD^&>W8>2Q0R1N@r CaTX;2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e6a355b6c2b453d0b066e0c5570d324671ca8a46 b/fuzz/corpora/asn1/e6a355b6c2b453d0b066e0c5570d324671ca8a46 new file mode 100644 index 0000000000000000000000000000000000000000..33706ba96bfc8a583be3a7e9173770e565dde2d1 GIT binary patch literal 21 ccmXqLFlZ3uHQ;7r

AO!^O+Xt;oOt04f6m5&!@I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e6e566b306c1fd8ced987f82483f8ead3784a082 b/fuzz/corpora/asn1/e6e566b306c1fd8ced987f82483f8ead3784a082 new file mode 100644 index 0000000000000000000000000000000000000000..5f5b3da7480ec6385920582b30b05783398a02d4 GIT binary patch literal 199 zcmXqLU}7?8U}E~u0Ktq<8pa3F5HXyp2%11ZKNg#rm>3wCV5Gr&CMH~JtU;;_-Y*9L D)TAZD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e6fb7495df08b11d115d89cec4cf70d3cdb2b933 b/fuzz/corpora/asn1/e6fb7495df08b11d115d89cec4cf70d3cdb2b933 new file mode 100644 index 0000000000000000000000000000000000000000..037478144fcc6e3012547bee941cd987fc9e7e42 GIT binary patch literal 88 zcmXqLkZ)jOe8J+dpn;85yOD)Kj)8%}mXYQEe+C8yZH7h`26l%3{~1C#{)50b1`ucf RlL(;I%ACRo(=Q7V2LRz=6G{L8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e7156a9847caf804c71addb290ef589f7fa0bef6 b/fuzz/corpora/asn1/e7156a9847caf804c71addb290ef589f7fa0bef6 new file mode 100644 index 0000000000000000000000000000000000000000..3ab06a4fa5faad5734f04c70ec03b74e03f78ac1 GIT binary patch literal 4144 zcmeHKI|>3Z5Pg$KR#7W0yupHkJQNfJdkYWZF@orxO0cukSuKBn^Dkt&^eG(4-GoM jw6A)%g#I1wb8DXb8~i|h|B=o^|Hl1)=(oR9yPf_4mb#8i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e71d545d292db6951963875d6a45977ceb344217 b/fuzz/corpora/asn1/e71d545d292db6951963875d6a45977ceb344217 new file mode 100644 index 0000000000000000000000000000000000000000..1d269c47db0dc4f08d802e333c8ee57fc5c53045 GIT binary patch literal 64 ncmXqLkZ)jOoWr8UfE8GCpa@$taA+_tXkcU2Ze(Fl1W5q^q-X@l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e724f6f09f2d5802acf380baa095364085d7aa8f b/fuzz/corpora/asn1/e724f6f09f2d5802acf380baa095364085d7aa8f new file mode 100644 index 0000000000000000000000000000000000000000..e7cf47f99d5ef7ad81d895a00f9afed9f841e844 GIT binary patch literal 4 LcmZ3;#KHgo0+s-% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e73d4087e9b37bad2576462775c627727d346eb1 b/fuzz/corpora/asn1/e73d4087e9b37bad2576462775c627727d346eb1 new file mode 100644 index 0000000000000000000000000000000000000000..30662970c6a6fc53d4f31369d7e4ef4b81d766e5 GIT binary patch literal 136 zcmXqLU}92pFlaDnU}Fm9U|?WjU|?t{0P&WA*#-@4j9MT;5QCE?1jc}hAW6a0yp@2c QK}gkO1q=>QGZ{bt0K_gB_y7O^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e75166020278cc1364ad121cce9bc91e6c6aabba b/fuzz/corpora/asn1/e75166020278cc1364ad121cce9bc91e6c6aabba new file mode 100644 index 00000000..5274ac4b --- /dev/null +++ b/fuzz/corpora/asn1/e75166020278cc1364ad121cce9bc91e6c6aabba @@ -0,0 +1 @@ +0 0313003130 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e7a04d5432e2efa7a3faea4535f87cf32b01976c b/fuzz/corpora/asn1/e7a04d5432e2efa7a3faea4535f87cf32b01976c new file mode 100644 index 0000000000000000000000000000000000000000..fabe27ec4bc60d0a4bb1d7868aa5bc8f8661e298 GIT binary patch literal 13 RcmXruW@2VwVq#(dApiq!08Ib@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e7b7549b1f7b6d407428adc2ea574d2d6bac0edd b/fuzz/corpora/asn1/e7b7549b1f7b6d407428adc2ea574d2d6bac0edd new file mode 100644 index 0000000000000000000000000000000000000000..2e188853f49b80456e8a13c8f7ea8d99d266d259 GIT binary patch literal 493 zcmXqLU}I$3&(L51hD=Nb1_ljmOxny03OMmARM zMivG|W;q6CUIqq+r3?%V45mi^|Np;KfBp?v)j3-xMg|53g9bL1R)Z!61_ovb*8sZ} shA38?vtVIHvI1l}82CVGVYXjdZM3lh>K%ChUnB3VZ+!Ct0Wf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e7d16f9f208b9d4a230a82955bf706688b53bb42 b/fuzz/corpora/asn1/e7d16f9f208b9d4a230a82955bf706688b53bb42 new file mode 100644 index 00000000..9fb55752 --- /dev/null +++ b/fuzz/corpora/asn1/e7d16f9f208b9d4a230a82955bf706688b53bb42 @@ -0,0 +1 @@ +ÿ0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e7ddd4b5d1da6bd5a65ca24a575debac9de95fd7 b/fuzz/corpora/asn1/e7ddd4b5d1da6bd5a65ca24a575debac9de95fd7 new file mode 100644 index 0000000000000000000000000000000000000000..681247707087fb33d2ee8e15352bef56a1f8a6b3 GIT binary patch literal 1297 zcmd6mJqp4=5QX3D#!(R={uF6#lV%!00)l03V&fr}fVq}8@H%2An^h7QL~#@GZ8KBM zQYR{G36&1sh?6JVpwGw5Qs@APe@!W3m&Fbao#H8Q5|S3^#^VVodNShF#O?rj7)eu}?V%CPdV0#$^AQS_7 GjS2u;1mh9_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e865b53ef469b2e4e49908648e7371f4b9a750e0 b/fuzz/corpora/asn1/e865b53ef469b2e4e49908648e7371f4b9a750e0 new file mode 100644 index 0000000000000000000000000000000000000000..537e5e9b1e340cb3a7e6de6f5c1bb033f3dd807c GIT binary patch literal 397 zcma)&O$x#=6oi|kt+uBAfw&OCl_FC7qM#nZ3-kn@#O}O>3-Ovtl2)uPbQbS1AM=I~ zN^zkSM=2nQqg7YQNfdB09gJQ{g(mJZuO9z%$93!c z#XDE`XHDro%3{f~osVa4_LlwiM#8x}y_gSP4m%{MWMb5CO)y4QYp;27$JX!4zkQVM zKRfGOx*&?(J;mi}-H~sv}4t(oJPx(Dbbw!m#8Ei F0szQOnR5UD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e8caa2a0b9c2552a0e71b2f121e5e98b9a57cf9a b/fuzz/corpora/asn1/e8caa2a0b9c2552a0e71b2f121e5e98b9a57cf9a new file mode 100644 index 0000000000000000000000000000000000000000..3fb975b99543b8e97f1626c2dee579b0e4844577 GIT binary patch literal 154 zcmZ`yy9t0W6ukEmA{KUng}Q)g&MjOZ`@AZ1=zjLLl7NuLyXJmyw9s$)$j>01o<>u# t9kie%a2YFuLjv9V*L|0;+EUU}9ikU}#`qaN+#>4NBlUo%JiWZHt&Ng3yHUWu**9rQ Oyo>O+gac21-o+19h+~WZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e8de420c4c9ad4d312d4a15fd597c90efad401ff b/fuzz/corpora/asn1/e8de420c4c9ad4d312d4a15fd597c90efad401ff new file mode 100644 index 0000000000000000000000000000000000000000..ea17ea50d682fbce178902238c35f13c3ab961b8 GIT binary patch literal 300 zcmXqLVB_{^(`x(9%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49vU?3=B&d7}6L_jsE}tZ_r>M3|4i_mWh#(fx)1GjiuF~ WiGhKEnUMj+H6X(Z2E2ggRsaAq3@FwB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e8ebb9fd3795c6d27a41f6c44b7ff266c8223456 b/fuzz/corpora/asn1/e8ebb9fd3795c6d27a41f6c44b7ff266c8223456 new file mode 100644 index 0000000000000000000000000000000000000000..221a2d34d659bfaf51ea346a95e450ac0844744e GIT binary patch literal 18 ZcmXqL5aco7Vq=ms;9>dRvi~0g0{|l81f~E0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e8f18d3ac417ebf164db46311e09829e65ed70c4 b/fuzz/corpora/asn1/e8f18d3ac417ebf164db46311e09829e65ed70c4 new file mode 100644 index 0000000000000000000000000000000000000000..0cf0669f151b5aa05f6453297381afd063ce33f4 GIT binary patch literal 84 jcmXqLU}9imVPIfjU}9imFlb=50HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePENEnIWMBZxg8@i$XqE`m8v_OgX0R@Z`bPYQFp*@405x1f6+>`@ n2@6Ty!C}Z~m|!Nh(J;Xb6Vfu^pilP0%sY@2YXB}qLB%HkgfjDr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e91fe173f59b063d620a934ce1a010f2b114c1f3 b/fuzz/corpora/asn1/e91fe173f59b063d620a934ce1a010f2b114c1f3 new file mode 100644 index 0000000000000000000000000000000000000000..0e7ef541921d888956f987fefacfb70f6117498a GIT binary patch literal 2 JcmXqH0001F05Sjo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e92768057678d042f234df6962ee1f4ce60de906 b/fuzz/corpora/asn1/e92768057678d042f234df6962ee1f4ce60de906 new file mode 100644 index 0000000000000000000000000000000000000000..5770aef91a46915aafc3ac8de374cb8572a903c9 GIT binary patch literal 41 lcmXqLU}6$sFlf+eU|@XCz@XF6z`)1=qM=*{#s>^w005~!2U`FD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e92aadad670ac157f7cd357ef18863370a632f45 b/fuzz/corpora/asn1/e92aadad670ac157f7cd357ef18863370a632f45 new file mode 100644 index 0000000000000000000000000000000000000000..ad47ea41770dce82bc7eb205cab8e7295487a846 GIT binary patch literal 16 XcmXqLU}I!7XkcSBU|?uqU|;|M6`KMe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e9435df1c7fcd8767c0dd744a6117f5dcf55d3ba b/fuzz/corpora/asn1/e9435df1c7fcd8767c0dd744a6117f5dcf55d3ba new file mode 100644 index 00000000..64dd894e --- /dev/null +++ b/fuzz/corpora/asn1/e9435df1c7fcd8767c0dd744a6117f5dcf55d3ba @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/fuzz/corpora/asn1/e9520d25d07b9d7f18d6afe077da37892c178212 b/fuzz/corpora/asn1/e9520d25d07b9d7f18d6afe077da37892c178212 new file mode 100644 index 0000000000000000000000000000000000000000..e46527c39e0153014c6507b51dba756bda0e7376 GIT binary patch literal 26 hcmXqLU}F5p!o;Dtpn;83TZNgKiGz`mkAZ=K0RTc619AWW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e95238a620b9e7cda9bd57c1a760bc521cd68cc1 b/fuzz/corpora/asn1/e95238a620b9e7cda9bd57c1a760bc521cd68cc1 new file mode 100644 index 0000000000000000000000000000000000000000..d77c745bcbe24713083123fd43813fed0abd45ff GIT binary patch literal 136 zcmXqLU}92ZFlf+eU}IuF$w$`c^uo-3!Om8E?=Qo18wM}{05!oM8vpv8VVUb>$~iC))=guc!CUG9cX|5vzP2_>*6csB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/e9fb098224d2e7d9da6f9ed4d002d5d512b3fe40 b/fuzz/corpora/asn1/e9fb098224d2e7d9da6f9ed4d002d5d512b3fe40 new file mode 100644 index 0000000000000000000000000000000000000000..f24929c2b88930dd25b063c3ef753d0dfdf33358 GIT binary patch literal 8597 zcmeI1F$%&!5Jms&#uX7ESfvu{q#3Lvl~{QePq7N-S~-AV?M+fxDA`m&1PKwh_!|gG zlh5YQe@rIo-8`>$RkM&;DyD|la2TVi-kHJz3iX+knP|A)XzHeUb+~O4(MfSiu(m7M z=81Og!@0MX0;qS%Mb7}NpuN>EC2UXP+DVkX=L16}j$s!+mFQj+C1S9fUc?hUdO%g)x&v~uP9_vm~k1_rR~-o1PGI@pjVi$yg9AsY$F wzX!R9I;P<97db8myNon5nQ(_SfoN}`8QAwlzY6Wg)Rx--=; z_Tyo^FQqqUr5e!zRBuS&qAczuLI4nJ8S*cxw<&B~NtX9kBsSs7$pd+gO<`9`*BXZO z>XPU%Sw>7$b0c8u)Pm9gvjvVux^6Ce^c4FhV763!k>kYUq{eS@e9}<0|N9P}n44j? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eab8c67aaed43045bf5487bcfb1aba6c03c283d9 b/fuzz/corpora/asn1/eab8c67aaed43045bf5487bcfb1aba6c03c283d9 new file mode 100644 index 0000000000000000000000000000000000000000..c17402f85cd69a55f6f0b325bd3468c29bbc83c9 GIT binary patch literal 44 lcmXqLU}92xXV9S2z{bS$0RRHY3OxV- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eabc7f16d1be1aea8c18d3da9098425fb87da1b6 b/fuzz/corpora/asn1/eabc7f16d1be1aea8c18d3da9098425fb87da1b6 new file mode 100644 index 0000000000000000000000000000000000000000..0743495e555fafc5730cbe93597c7653498068b2 GIT binary patch literal 231 zcmbu2u?>JQ5Ci=m6huLtDhohkwqSwm^Ht^m=A(udB~rR{*v-ksndYY@@A;i&)Wc{h wwt?oA1WseEmlXnl2!b-HAQTwAOHUk7AvWkQEk&MadJ}Nf`un4$rxsj@A0*Wzc>n+a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eae57b40f26c28728fff17b2f1817d5af54ebe33 b/fuzz/corpora/asn1/eae57b40f26c28728fff17b2f1817d5af54ebe33 new file mode 100644 index 0000000000000000000000000000000000000000..b8e5aeae24ef86efec7c8cd8fc39f4ef3cc60cca GIT binary patch literal 16 XcmXqLFlb<7WME)0U=U|CU|;|M7Fq$| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eb0ef603dfd8c1c46f4423d775f38b0a14d5b601 b/fuzz/corpora/asn1/eb0ef603dfd8c1c46f4423d775f38b0a14d5b601 new file mode 100644 index 00000000..7739d8f4 --- /dev/null +++ b/fuzz/corpora/asn1/eb0ef603dfd8c1c46f4423d775f38b0a14d5b601 @@ -0,0 +1 @@ +0€7€'€£€¡€0€¤€¤€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/eb2ea62a45fcbe766e51014ee8b15bf9f7b09544 b/fuzz/corpora/asn1/eb2ea62a45fcbe766e51014ee8b15bf9f7b09544 new file mode 100644 index 0000000000000000000000000000000000000000..9c20f0072db14c66ccabfd177b4702ad4c8990f8 GIT binary patch literal 797 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4D8Hu3~USx3=B&_gqi98|Njjd41^)73>XX;7#Iv1*jQQ(niv=u fm>I!b1Gp91w6|i^7Z`DYD>g=h3KUf5z)2kd@BEBt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eb4c37290e6ab3f4f3cd987875a72f67b320235b b/fuzz/corpora/asn1/eb4c37290e6ab3f4f3cd987875a72f67b320235b new file mode 100644 index 0000000000000000000000000000000000000000..82ed25cbfcd423c39c56843166c13d7d7f8631e1 GIT binary patch literal 44 gcmXqLSkhq7Ajo6Tz{X@?z{AAA$p8kZqW)k(0LPODHvj+t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eb598aab68f7b48c2ee912d75acddb5014001dd3 b/fuzz/corpora/asn1/eb598aab68f7b48c2ee912d75acddb5014001dd3 new file mode 100644 index 0000000000000000000000000000000000000000..fc0647006b9f8d35fff4e9cd4c671d8b885ae887 GIT binary patch literal 19 XcmXpI6z4ZKGBh$W1QEK1h6W4(9##Vx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eb6e6ea86afda2dcd0da1f9c7218d7836c03dbca b/fuzz/corpora/asn1/eb6e6ea86afda2dcd0da1f9c7218d7836c03dbca new file mode 100644 index 0000000000000000000000000000000000000000..c11cfef847a1e0c8f1c1aeabcd144fdf2057c5e6 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4dU_byygJ2dJH0ggx{C_Mm zTUfbTc~~~D{_1EH7T~gB`}O@dcByk)IxC0%-@+`)u(!~}edg8Uf9|+$oxgbJ>i(=L z-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZyYg=zrTfp$I+rep zVs}q*x!O3hm7&fA!?|LM9_;vFCwy1aH6}*OhKZ4p*@}TB>r={|$L4lVub52V*#2&p w-O8q1VV%vC5XyQKe>hV8!T({0&ymNJb)|Bp} zES43(>J!i+hxbd#;V=O!l1}3 z$H2_Mz{(H}^1?~e|NmJS7#M`%fy2naV9>zE(rVDez`(%F$N=IRP%Utoz(I)Q*ufUK zCRhUZ|9@XtY8bSE`xl-dVNPX0PPqs$kSUkQz{Qs@7#SEO(DTOslV+e)yn|`gDkcDx CO|r}Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eb764c79c4827331edf146c6167690a22bd37663 b/fuzz/corpora/asn1/eb764c79c4827331edf146c6167690a22bd37663 new file mode 100644 index 0000000000000000000000000000000000000000..a39e1f0fbbb42016ca4aaf5492834021813f7d8a GIT binary patch literal 84 ocmXqLU}BuZ;=q6tXhLP);80P;z`*dIVL<~Mt9By`0~bgY0Ng+Z2LJ#7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eb8e9b97a43e87f67acecb84269a371cda21b7de b/fuzz/corpora/asn1/eb8e9b97a43e87f67acecb84269a371cda21b7de new file mode 100644 index 0000000000000000000000000000000000000000..56f4b80990bcefe7c2d494d1a59b9974225e560d GIT binary patch literal 316 zcmdUqu?c`c6hrg>$%%r6AlT>v+Qcnf;FfTTf6dLI``O!yXWz$DrNF!XWqm|NH-7(8|D^!U&Q?fCeZt2SkGuwKAtL OE@)t51?iNANCE)+(iJNJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eba22455be43c9e35237cfa1fb9d4b6a142d353a b/fuzz/corpora/asn1/eba22455be43c9e35237cfa1fb9d4b6a142d353a new file mode 100644 index 0000000000000000000000000000000000000000..33dc887b6d098a1517f16df3debe1e44fdb49a5d GIT binary patch literal 26 hcmXqLU}F5p!ok6l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ec99833a2e6817ab8230d4d70801af86273c37bc b/fuzz/corpora/asn1/ec99833a2e6817ab8230d4d70801af86273c37bc new file mode 100644 index 0000000000000000000000000000000000000000..3f7b31643081f0d5d040470d0cf6e77f79901ff1 GIT binary patch literal 67 ycmXqLFlaCkW@FcC^EhYA#K^`0W-v1{GfOcrGoS)11o!`cEr$R9)fp5R7#IL|%?g$P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eca0e50342d512d337bf2422db9bd7f55073f96f b/fuzz/corpora/asn1/eca0e50342d512d337bf2422db9bd7f55073f96f new file mode 100644 index 00000000..df34702f --- /dev/null +++ b/fuzz/corpora/asn1/eca0e50342d512d337bf2422db9bd7f55073f96f @@ -0,0 +1 @@ +£ \ No newline at end of file diff --git a/fuzz/corpora/asn1/ecae4596f5455a084b0f633df7b90b0f0b087de9 b/fuzz/corpora/asn1/ecae4596f5455a084b0f633df7b90b0f0b087de9 new file mode 100644 index 0000000000000000000000000000000000000000..093cf19f53e827bbe03e49b635da8d75ecfba064 GIT binary patch literal 2768 zcmXqLFlb<7)MjB|V1O_fAuQ%lSs6w~Z6vN5jEy3Srbq&&2va{UsbOgxaYC{2>(FbS1j9B0Lma2!cx&9>ilr!QRAkcmuEFvXZvag`rk#E0w;K zG7TiJnRzoAXw~(bc53`X^ ABLDyZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ecda94c04e83e58927fd2dec901a11a485e722f2 b/fuzz/corpora/asn1/ecda94c04e83e58927fd2dec901a11a485e722f2 new file mode 100644 index 0000000000000000000000000000000000000000..ec213486baa8650536c305181571a65ae4ed6e2b GIT binary patch literal 172 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1-U0>&Ccy@#6b6tA1_lNL2JuEl zg9RYf%%QT%EU5+!3mO(S7_f>ls@O0Xu(C0#@PR37IWVQI0TG1C=`bLJ|L>4_5Fm;v Gga7~>=oPyF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ecdc37e91cbd90fad09d6a25e6bdbadc451f69b9 b/fuzz/corpora/asn1/ecdc37e91cbd90fad09d6a25e6bdbadc451f69b9 new file mode 100644 index 0000000000000000000000000000000000000000..2a3f869527dd75a09cb4050863cfd5ba9a772edf GIT binary patch literal 358 zcmbu3u?@md3`EcWNB&SC{RX9CfuuRMV1ev&G-+7@SR@P4(;|O_DCmgY_;h-ArhGfh zr}??FlCGkX=?Kab3EafCZUl%PXx4*3wkE=N8=Fh9dKu0gJl9RNv>*cWMOdJ37Vd$f cN5IM6NAWxz_8mSGFHF>L*D7{h^M5pf7gs4cNdN!< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ecfb2d1934d2afdfc7e85e3ec03078b9514495ad b/fuzz/corpora/asn1/ecfb2d1934d2afdfc7e85e3ec03078b9514495ad new file mode 100644 index 00000000..07a93fc8 --- /dev/null +++ b/fuzz/corpora/asn1/ecfb2d1934d2afdfc7e85e3ec03078b9514495ad @@ -0,0 +1 @@ +õõ \ No newline at end of file diff --git a/fuzz/corpora/asn1/ed201fe1f49f01d3d6125e9378c4c6b94496d6e2 b/fuzz/corpora/asn1/ed201fe1f49f01d3d6125e9378c4c6b94496d6e2 new file mode 100644 index 0000000000000000000000000000000000000000..31c6bc8ecea65e9f20f6fdbc73ff9b7c92f98d63 GIT binary patch literal 12208 zcmeHNK}y6x5UiQ35s`&}mpuvIBztKVyeNC$gYOWZF$(4Ku|lpy{gV>YmO>$PdeERlQB!LE-!Zg0z?SA`)^x&j5jhnLD33X`dHT74^4Yv!HpOZ0Ep{KtgTz=fqoMH_V=6>Zc}uwJlUuwKM7 zIkD<7FLsv~kKOsG$VId*ym&3MEr<9%R*+!JCpxe1sqK(6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ed30ddf2dc52246604dacd0bdaf715699903756b b/fuzz/corpora/asn1/ed30ddf2dc52246604dacd0bdaf715699903756b new file mode 100644 index 0000000000000000000000000000000000000000..827a386b5f10788bfbb947ed776f10c6c7ff97c1 GIT binary patch literal 25340 zcmeHQv1%JZ5S?9}PbfxMSP)b>Ru`-yiy=*n+MptkA4qA8n}A)W+XSM&aNNXA3O6o7 z2*j@31k$8%r0)qj)v(t>37S1cG7S%$qm6w|8pD=hNi9dq+eyL)lk1y9-M#x@j+puiN=s2p1DkxFU)yRzz_v-N=QI7XS)C zWriL#MK924%Y_vUMA$$ywfk`~cu@EW1nCy08$bzx(&Pn^FPKs3$sFwd`&v(ddI~NS zc%k4T4xkjGP;e1Px&hRk6xOj-T3Fc-g=`ZQi{f&ixJO}B!>ATy=btNz4L$0=_b9L% z>;}8}8mmH&+L-?}Rs|PvEW{9na3RLLfL=f^pcj*R0bYO?L3ja4npKk6f-fgo_1J>D zh$GzqN?5dUq#IEP(+yq-fzqrfjA|Iwf{bclH`tvS4j$h;cnn_LL0(+lG=%HjX_7zG#53+P2=;f|W{z{wVzdT|sjfD%$qGu@b@Fh>QMqcn?_ z4V||1xd-U9!cGgIgg}AaLZDDlLZDDlLZG;!{(V$i8VlyMKSp3zY)S$49pA+3=B&_grV90|Njjd41{5-6d4&93>w&2S`C^Q7#Nrt o89-bEd{!W7W@O_4+r`Yl2-Z1(MvZ!Wq{TQL(;+hh8!Tr40MRa!>Hq)$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ed568b63e7367edf8c7829d0036759d515a547fa b/fuzz/corpora/asn1/ed568b63e7367edf8c7829d0036759d515a547fa new file mode 100644 index 0000000000000000000000000000000000000000..f8d92082bec847fcee2c604cd998254d6700f12c GIT binary patch literal 67 zcmXqLFlaDrFlb<7l$QaK1`8St8km?Fm>8K@7?>CtZZk15Ffr}`lOR45qlPmB!%hYy F0050?2$cW; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ed5e3c3afde5353320ef5adbdb07f3fbb6672b77 b/fuzz/corpora/asn1/ed5e3c3afde5353320ef5adbdb07f3fbb6672b77 new file mode 100644 index 0000000000000000000000000000000000000000..2d4ecab99d6436802d383e30f0c7dfcfee56a395 GIT binary patch literal 170 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1-U0>&Ccy@#6b6tA1_lNL27yLK zg9RYf%%QT%EU5+!3mOs{3|Pe&RcsgxSlJj=_`sC49GKG9fCz%+m{oKbkih?UNE`?d I#SlRP0M>gIbpQYW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ed7df7c3cdf9219817c579321229faaf0eadd2bf b/fuzz/corpora/asn1/ed7df7c3cdf9219817c579321229faaf0eadd2bf new file mode 100644 index 0000000000000000000000000000000000000000..fe798e4c05f39be65e23f12981c9e4fda27dc500 GIT binary patch literal 325 zcmXqLFlaDnU}N%-)n;H|FkrA~umI5w26;>(Nd`w>+*x*PqMOc@+Wh^Esj|9Lu88w8 zFd7&d7#bQF7#kQy8Mqs`vN4Cs$}%$kXR$W0TxfpN)KJ8LfuVr`Yz!0gUvqOaIETr= z%!0uH!8JEGXE12c0x1RAXNc9lhENtqJoZ5iVNeG-n~C|a1q<8)E9~|mIn5lz2D_Av rDU?II0iu00|11$csTF t8<3btuE8!!ngV#}VK)rBD3TS}nMm4@m`G}oM3IVX(pF3`-dRJryz4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eda83a0f714d686e06c0f7bcb33f059c0388e42c b/fuzz/corpora/asn1/eda83a0f714d686e06c0f7bcb33f059c0388e42c new file mode 100644 index 0000000000000000000000000000000000000000..ee37c24608f81f2f37c34128df7c3dcd638a70ba GIT binary patch literal 60 ocmXqLU}92xXV9S2z{bSWHVh27_?dhEg5^N~0RM;&FaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/edb095b416d8f08d83eee30fc4e0091f3d8a2d20 b/fuzz/corpora/asn1/edb095b416d8f08d83eee30fc4e0091f3d8a2d20 new file mode 100644 index 0000000000000000000000000000000000000000..3044dcdab7a2fcd73c2fb36b033fecea89fd81d0 GIT binary patch literal 6 NcmXqH;bQvF000AQ0YLx& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/edcd6cb713e68ab148efff0161259911643c9fdf b/fuzz/corpora/asn1/edcd6cb713e68ab148efff0161259911643c9fdf new file mode 100644 index 0000000000000000000000000000000000000000..09793b138e4633719cacef62f8ffedc84dd69560 GIT binary patch literal 143 zcmXqLkZ)jO{K!(l00GS3IT#q0FfcHPGVmMoS~oKBDmU^fgDEB^)BjMAQ2&$TiY<%W zLXaj#mjC}jw00wlRx5J~BLf2ilPD7tlPJ_kMqUV`0m`ppP+(xtVr0-#2B}`qz{aZG K$ikoomIVMw6dViy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/edd27d7878d0ed169d546461b53818c4443272b5 b/fuzz/corpora/asn1/edd27d7878d0ed169d546461b53818c4443272b5 new file mode 100644 index 0000000000000000000000000000000000000000..c5b4092874533d648338ea1fb3b82483bbbfa3e6 GIT binary patch literal 68 zcmXqLFlaDnU}Mx~U}RumFkldGWHej=5n~ROm0{sBXlQ0;0D(?02~yO+#uS<*!t};~ Jfq@yM3jn7r3eNxl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eddd0d738c2a5204c8da3a48f8e7e83299f89d2a b/fuzz/corpora/asn1/eddd0d738c2a5204c8da3a48f8e7e83299f89d2a new file mode 100644 index 0000000000000000000000000000000000000000..bbcf042e61f50f14b661a7fb8e835f7f29c93421 GIT binary patch literal 14 PcmZSM+4Ua^8X6b?NBRlH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ee00d33703b06961ff54ecc671bf4daebb3acadc b/fuzz/corpora/asn1/ee00d33703b06961ff54ecc671bf4daebb3acadc new file mode 100644 index 0000000000000000000000000000000000000000..55e22ddb021cdf78d9432e9286608534a4d9405e GIT binary patch literal 596 zcmeH@u?>YV5JP0+nC>>|Hs14pI~EurLwyw z$`K`a;SiZklT6+$yv)4W7kHB$*H`u2igkJK;id47;Ee=`9z4QjTZ~w{BiysczSjd6e+L~0%0BC98HpoNhS81O|MDpj00*bfdTB=_7=blm$;A_y?g}Y z+tUUy!y$5`Zpu=tTxjeWRh1LHowo_&xVxiBtAdxWAX0)t;MeR5^kXNoZ`hs1@6wPx z`J~fLb{YXck$t4JB5+u;;8F&Ktgw_i)^hn$xCM)N1?g!OJPY$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUuV5C!;vco_@~3Lx5`fsLirpoxKj zfteA^H6Yo3CKUUL1UXQ3q}gv|Ab{{cYq~Zg3lFm#12c-96`BlSFS1b4i>N_NB%qcT zSwLQ_ufPAl-T)f^a0d(_D@G#<1ZbMv8_3Afm^q5-$qj3vHCkve{D%NOcy0!PA(W%( zlTe0x(M$DmaWqGR0bQB_ED*c!f{~n~>5vvNt)P02!dih1_i~Bqr8{Os4G$}5mE1h> Rbn=J_KW}k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eeb4f19a99e84fdf50bcb31aa5f1cd0a9c0eb769 b/fuzz/corpora/asn1/eeb4f19a99e84fdf50bcb31aa5f1cd0a9c0eb769 new file mode 100644 index 00000000..669d53f1 --- /dev/null +++ b/fuzz/corpora/asn1/eeb4f19a99e84fdf50bcb31aa5f1cd0a9c0eb769 @@ -0,0 +1 @@ +0€ €Ÿ: \ No newline at end of file diff --git a/fuzz/corpora/asn1/eebd927505222e18bece7973a4268d08275c570d b/fuzz/corpora/asn1/eebd927505222e18bece7973a4268d08275c570d new file mode 100644 index 0000000000000000000000000000000000000000..5d3443e4404219c24a39b7ce3f9ae908bb95c7a9 GIT binary patch literal 72 scmXqLU}92xXV9R-pwqy{#QcJttzqvS1_m1j1|$)5894t2SS1Jm0FRLn&;S4c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eebe03bac30a537f78c88ccaddf70faa08c12856 b/fuzz/corpora/asn1/eebe03bac30a537f78c88ccaddf70faa08c12856 new file mode 100644 index 0000000000000000000000000000000000000000..8d1c350218faa2cacc38d63ad73b7aff75be53f6 GIT binary patch literal 1265 zcmcgryH3O~5cDgNh!ki)1@o3@tH2Itq_Z@r)e}IH&Qt$&v6x5W5 zoY+~X$OR!_D(`xBJiA(>QXi;fEjSSRTPLf#=W8yc@E9($UBtdDR5qQkHI87Q4_S(R zeTC@^=wIn54gp-)f;K$sLR2!xy_isdq{j)q&q4KWW!h!Z$QdX z`UffH7y_;^g&ttOUoDp#Vi-G*_;2Q@1 F7GD}L*cku- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eef67c792f7d81cac8cb80814522a674bf0962df b/fuzz/corpora/asn1/eef67c792f7d81cac8cb80814522a674bf0962df new file mode 100644 index 0000000000000000000000000000000000000000..a7306621e4fdc3bec29f7e07669802e90ec84112 GIT binary patch literal 1003 zcmb`FQ3``F5Jb1P@YBD32xX$7^fJARSMg)%H6?_w?zARpse(k9eLJ&RtSXyqqH+~= z?=U_9U`9wEgd1Y{1tuWis3$e*YL%Dkl}W^K9m8A4V|P2(80MN(O}B+lbu=z(F!>2Xk@pO#lD@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/eefc9c59049fffe941b1f1cd2e2851e9c300e26e b/fuzz/corpora/asn1/eefc9c59049fffe941b1f1cd2e2851e9c300e26e new file mode 100644 index 0000000000000000000000000000000000000000..b43e74796363fe203c11ef2a75af152f7928d969 GIT binary patch literal 40 UcmXqLFlboNu%KZn19k`l03`zpT>t<8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ef0611b3919141cd94d73cef586db6e046be9f18 b/fuzz/corpora/asn1/ef0611b3919141cd94d73cef586db6e046be9f18 new file mode 100644 index 0000000000000000000000000000000000000000..2e96b32afb24114e93474f01c7ed33feb99f7995 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4dU|{(B|NnnR1_lO(ZwA3E zGHBBOkof;tWVWz!weqlRUj5b4C@jEb!}ja@Z|qX%wsckw{lA4-lwoh7iTli}$N$`M z-8z5q&ei={Q@W3`Sh8&A)0z%5%#KuD`LUIhRVou<7#A?N?AuN{p)BGvs z@fbS0?xg5m&1RKJ^?>6r#*lQ@lnM}Zxm39@bnfi3=$hx*h)sv0*y{;;cZ?4427E~G zy$5hWoa=9;vq{Sv02KgVhkpZ32H9k=xRjEJZlM|Kksfi6Gr0w7^Z^}l=lUk2Er2xi G;SV1{D?oYx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ef1d606ddd19c0df336a5a1ea0c21d582cb1e984 b/fuzz/corpora/asn1/ef1d606ddd19c0df336a5a1ea0c21d582cb1e984 new file mode 100644 index 0000000000000000000000000000000000000000..8fd5d09d3fcfd609bd9ca07f8467b8afcbb94840 GIT binary patch literal 80 zcmXqLU}92ZFlaDnU}IY5z`(%5%fP_G_?w9_j)_ThF9QPulORmRa|Q+j2JuElg9RYf X%%QTvEL;W*3mQcm85kHC86W@vK9mhY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ef37b215cdd9e7c6f02e9a70b48116cb36c0610c b/fuzz/corpora/asn1/ef37b215cdd9e7c6f02e9a70b48116cb36c0610c new file mode 100644 index 0000000000000000000000000000000000000000..133cab4b9fdd50fb25f476c22593538cc843b27a GIT binary patch literal 20 bcmXqLU}92ZFlb<7Qe$9XU}0!rU|;|M9Sj0J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ef940fc6895d341b397ea9d86873dea5c9c19805 b/fuzz/corpora/asn1/ef940fc6895d341b397ea9d86873dea5c9c19805 new file mode 100644 index 0000000000000000000000000000000000000000..c7bcba11f5337081af3d42d1c7f9e17dad60a7fb GIT binary patch literal 12 UcmeC+`hWJ%?|N0Eb*}jQ{`u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efa1b0cc84b4427a9b61a44998252ce400633260 b/fuzz/corpora/asn1/efa1b0cc84b4427a9b61a44998252ce400633260 new file mode 100644 index 0000000000000000000000000000000000000000..157aee258fa4620cbb622f23c99cc46658e1d922 GIT binary patch literal 636 zcmXqLU}92ZFlf+eU}IuF$LqLzJ6l5o0|NuH9T7-&Qq5f2xV0E1d}w0_`QgFB1da!AoS}y^9o+hY9W8tyd{CMI F0RXuuo2CE& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efa49b1b7a35d20c605a6a0c51800243f22e7a5f b/fuzz/corpora/asn1/efa49b1b7a35d20c605a6a0c51800243f22e7a5f new file mode 100644 index 0000000000000000000000000000000000000000..5e3e2d6a3c112caacc56a63d0dd27cc1182e898a GIT binary patch literal 51 scmXqLFc4s4*J|@PXUoLM#;V=O!XU{k&CJXI2OJCx|NsC03+FQc0NXzY{r~^~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efad2c128b9510cae89c65c2e25bf53ea055f376 b/fuzz/corpora/asn1/efad2c128b9510cae89c65c2e25bf53ea055f376 new file mode 100644 index 0000000000000000000000000000000000000000..c35c045904c3001bdd1e19b9bcf4ffb8c1ebd3b4 GIT binary patch literal 40 jcmXqLFc4s4*J|@PXUoLM#;V=O!obEXz`*>60TloMid6*H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efbefe20b581a12488f22b41c8e3d9b283da9fe8 b/fuzz/corpora/asn1/efbefe20b581a12488f22b41c8e3d9b283da9fe8 new file mode 100644 index 0000000000000000000000000000000000000000..ba950cdeb31ec416ffb9b6470fb3f67b880cd282 GIT binary patch literal 104 vcmXqLFlb<7*J|@PXUoLM#;V=O!XUuF!0g4q#()QWhsZJFQGx_qTwGiL=Mn~* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efdd1d5227583fdef9f83230ea2c3baea4d2b40e b/fuzz/corpora/asn1/efdd1d5227583fdef9f83230ea2c3baea4d2b40e new file mode 100644 index 0000000000000000000000000000000000000000..ab20945ec38527496260de0f4ec407d685490f70 GIT binary patch literal 1504 zcmc(eJqo}e429$3SxTpj9ebvpz@wL<%Ln1r(1KHl?|-`v|vK6C@TERmocy91`3nD?f?J) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efe2d218f340f1de5403614e487d9244382c7b61 b/fuzz/corpora/asn1/efe2d218f340f1de5403614e487d9244382c7b61 new file mode 100644 index 0000000000000000000000000000000000000000..18523a4370d44b35a589a2b9a776c5e71d8b8d91 GIT binary patch literal 1113 zcmb`G!41MN3`M`&C@XMcfGQW?nS*_tO}McRHsvy3kyr6 z1OmV~5MPQFGH_Zp!?HOa3mNSIwt?d1s_3@cvjls?9oc$^Q4Tcjn||AYb&>y#{%VF> z+0|3E26#P|)0y#pDcF&%_(nN^-ZAx@K!>LVb%3hc1>a>;WFbGR_$VJs9L`4>9_+tW Y`)}LcHKi{HH+^cf5L!fx1dN#16DyydhX4Qo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/efeb03d455bde889e70ad0b979f1c8636924687e b/fuzz/corpora/asn1/efeb03d455bde889e70ad0b979f1c8636924687e new file mode 100644 index 0000000000000000000000000000000000000000..d22c573594a2207616fd27f00b54df781c13665f GIT binary patch literal 28 kcmXqzG!!=wWn<)#5pdSrz`(SDVFQEG1_q{vB`ZDy07m`?CjbBd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f070f52fd31eb171bd8fc496481215a21c308902 b/fuzz/corpora/asn1/f070f52fd31eb171bd8fc496481215a21c308902 new file mode 100644 index 0000000000000000000000000000000000000000..c181d7a27703ff74770483d6cf079b8cbca7689f GIT binary patch literal 84 zcmXqLU}BuZ;=lj~KPNx@|NsA?e=Pt1Gcaf|Xg6lGGBBqwg5>`HPuKeYA0*xYQOi)p bpb*NT#mJ!5%ACTupn;85yOD)K4I~Kwt=AYZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f09a4aa8898b58a46bd64ec2a62a55d36b9fd9b6 b/fuzz/corpora/asn1/f09a4aa8898b58a46bd64ec2a62a55d36b9fd9b6 new file mode 100644 index 0000000000000000000000000000000000000000..e880bc8236721e1b602f88fc428fc28e5497fc4e GIT binary patch literal 13 RcmXqLFlb<6-oefQ0ss{00wn+d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f09e5e4c2bbf05b871a3c9440f2459ecaa2e5fc4 b/fuzz/corpora/asn1/f09e5e4c2bbf05b871a3c9440f2459ecaa2e5fc4 new file mode 100644 index 0000000000000000000000000000000000000000..594a43df62974fc041c2f03124ca58470434c8e5 GIT binary patch literal 22 OcmXqL;9^8a3=9Ar?t}24 zB|!-9vj~>3bl$26(dyck8vsfG?)H^GdgLE6yz$qgbq#^)At*iXP+5wd%iaJ8f1--d z{l!(NN>h~ZnWp`MP$g8hinoON&&azm{FaKZP5LiTI6T$J0HRCw?8K8KF=>)89i^O( Q$FYe`p679~HvI|(PRU*1i2wiq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f10e325e4ea043776339ee8ada0711192c65c5f8 b/fuzz/corpora/asn1/f10e325e4ea043776339ee8ada0711192c65c5f8 new file mode 100644 index 0000000000000000000000000000000000000000..58ee4d70dab8398b93f0e59eabe386e942ebb415 GIT binary patch literal 63 ycmXqLkY{3?!=l9i0~|000|SFKlwHN35Xzy&$e`8AtirgUfsIwWk%d78BnbehCI#34 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f11874e92ba8fc77be4132602349cd4d897a158b b/fuzz/corpora/asn1/f11874e92ba8fc77be4132602349cd4d897a158b new file mode 100644 index 0000000000000000000000000000000000000000..dbf8db09368289cb52ad9d64ba47787e69c08cd2 GIT binary patch literal 18 TcmXqPFkoe4G%#diVO@43;=xf2NnPT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f151dab015518ab75b4c5b442f69246dbf52c5d6 b/fuzz/corpora/asn1/f151dab015518ab75b4c5b442f69246dbf52c5d6 new file mode 100644 index 0000000000000000000000000000000000000000..01037905525c9837452778ecf9b93eb599f65d49 GIT binary patch literal 68 zcmWm4u?>JQ3`M~gV^JVcAVfOa)PI?5z#cf8WIKkS2;%BfST4STr`HlOE&$uYtYn2A U5aWg(ig~K%?u+Q{Xh8Zee9Jxzf&c&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f165e03130081c730ecd0721d5869b1575ce13fc b/fuzz/corpora/asn1/f165e03130081c730ecd0721d5869b1575ce13fc new file mode 100644 index 0000000000000000000000000000000000000000..4f3b038ebf01a429943e36ed9da7c8fac29b0e4d GIT binary patch literal 691 zcmXqLU}92ZFlf+eU}O5#z|Pj-#Kgd0!@vOIS7op<{bFE%GEgK@I4}jQD7sNKz|>%| s0bO4+J6nen69bD4$VF&o!sQ??By0ys77}YH%risMaYHy%LEu*d0Glz4p#T5? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f173c967bcf7d7ae73b7956bb6fa9ee8656e38b6 b/fuzz/corpora/asn1/f173c967bcf7d7ae73b7956bb6fa9ee8656e38b6 new file mode 100644 index 0000000000000000000000000000000000000000..d9d5d75d7aa0604fa083258ca1d30ada938a02fe GIT binary patch literal 28 jcmXqLU}BuZ!lA{esin!B!nmM;jWu1Hk%g0ifq?-4NdyEo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1792fcf0ad2db0777f2a2e42770fbe90cf9f509 b/fuzz/corpora/asn1/f1792fcf0ad2db0777f2a2e42770fbe90cf9f509 new file mode 100644 index 0000000000000000000000000000000000000000..3dc6e4542af5549c804ad51f1745bde760caae63 GIT binary patch literal 701 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Z!RsMlFNJ z*KF)sZ64=rnHUWk?=vwn8fZWT7#W#l8UCXI21Z5(244mSe*p#wgJ2dJH0ggx{C_Mm zTUfbTtyng%{_1EH7T~gB`}O@dcByk)IxC0%-@+`)u(!~}edg8Uf9|+$oxgbJ>i(=L z-A7q0S+?`>?9JY?zuriA!cH&dgO|e&2`ZTwHCz*nkyYGlp4_qZyYg=zrTfp$I+rep zVs}q*x!O3hm7&fEi*x_~_hoZb_{H++Kns> zip+8h%nS^y4ACGjoHYIapM`;eK^Pu5j0_A04Qwo}22BhM49tuSAg%$m1DAn;L6d=j Y!Gom0{XUoi7n;~47_Ep*P+-6f0NU0wvH$=8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f190175ca74f55f48c6971f17f3e1d6ff5a8b6e9 b/fuzz/corpora/asn1/f190175ca74f55f48c6971f17f3e1d6ff5a8b6e9 new file mode 100644 index 0000000000000000000000000000000000000000..ed245ecc9d811f38c2fb2158abb2ff07d0baafc6 GIT binary patch literal 80 zcmXqLU}CD5HfS(tU}IXwz`(%5+vai3g84sV+yh3@y$lQtOo9zeDGUq-4F(Jh3q36nc5f_7#JBK007(>58nU) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f195c020a28dfc5f2fb6af256b524ddcd93756ed b/fuzz/corpora/asn1/f195c020a28dfc5f2fb6af256b524ddcd93756ed new file mode 100644 index 00000000..b1d81e79 --- /dev/null +++ b/fuzz/corpora/asn1/f195c020a28dfc5f2fb6af256b524ddcd93756ed @@ -0,0 +1 @@ +Ÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/f1a599deb6f048e985cdff83e08f1de1a273a484 b/fuzz/corpora/asn1/f1a599deb6f048e985cdff83e08f1de1a273a484 new file mode 100644 index 0000000000000000000000000000000000000000..9a3b92151d50039cd3e949884bc799e50cfd22b0 GIT binary patch literal 5 McmXqHW?(P?00A}tWdHyG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1aa28113a93a32d0c856e544dc9911a58d353b7 b/fuzz/corpora/asn1/f1aa28113a93a32d0c856e544dc9911a58d353b7 new file mode 100644 index 0000000000000000000000000000000000000000..649b984bc21edfdc9fc7a63454e0eec0c4edaffb GIT binary patch literal 18 ZcmZ1=z{LBXfq{X6IbEAMUHgCgRRAYg1w;S< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1bdc2b324005226dfa19c4805d88f843264c59c b/fuzz/corpora/asn1/f1bdc2b324005226dfa19c4805d88f843264c59c new file mode 100644 index 00000000..6116b17e --- /dev/null +++ b/fuzz/corpora/asn1/f1bdc2b324005226dfa19c4805d88f843264c59c @@ -0,0 +1 @@ +0€0)0*†HÎ=0€ÿ;ÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1/f1c57e2a76d316353b53bd08fda5bb0fdcb2fcdb b/fuzz/corpora/asn1/f1c57e2a76d316353b53bd08fda5bb0fdcb2fcdb new file mode 100644 index 0000000000000000000000000000000000000000..1d90b30e00ec893af1008a29d855d006a504dd03 GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2_Mz`$U_z`*by3K-5=axyY9Fa$F&FaQ8E CrwvB{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1cba12917589910ccd4714a5c52a0742cf59ea9 b/fuzz/corpora/asn1/f1cba12917589910ccd4714a5c52a0742cf59ea9 new file mode 100644 index 0000000000000000000000000000000000000000..5bdbc892f961a816645fb9f0dafdc2ae0e9c4afe GIT binary patch literal 5554 zcmaKwYiv|i5XZZH(NY1GEv-DXfCwQe%$#%Yx%V22VnqQ_BZx*!giX8DC8b-I-4-N|G z%$%7sGiRZ{`Uvz_*A$0BFrmD1etK#8_X(j;Sy>VE9m6W9EH7DIT0XhBaRttRY4Vqf zaCl|3B^Gb1dn}qv#M|Sov1Ftzg15mW`R8%ridB)eWGvDW$1vP3KN=sdT2kM*WaU$h zOP8%!f^~4G{In`uvpAKECt}T!=DNmcA{kpBYl<|-6A`R|YDtuYCkFnnu5mHWhM74Z zD??Ml(T$N<>jTmHrf4GB^g^sPx}d4Gb`k^RU?HMu0=L)XK4AI-=%0KI<`kEPiuRoF z{>Z=qffh%AHE;`zFE3d=qq?+Ye5g!et=ByaL7>UN5CqniQkc|3Zc=J(-5v&DBST^G z8`a8{(Ri`1#sot~8Es#reKS#@;Bcdw4q?+=4`T=@&|nsYIaOfNE9wwbKk)chfrEb+~@<2?JI=9q3Zr$bkx>W2NsKv(YfAWOWw#zHvYYDWjeD=hO@|!6ba^e8k7V zV$!w3^|s}LhcPhGMvGHwTi^9C+27=)p(5S-vu~73j0$1fvr0`iU?!=;zHRGOz9B;g zO~awESG8}51~P;4ZQDK{0}DA&W!Z&3CZ~byTm^eb*L~VI0EUcFccJT}oSKa`ZS>_51@*?e>7m!Am_qMk88|96HRhm+3~6JOoAnO45@b4*QEzjw$m7lU*I6(?i`=*} z=d@8^0u7U@-koX~$;&L)JQ7PP-xPN9-mCYJU8>>BoyL}BPBe#XnN|}_UT4Z^cD@dQ zfgxKyrRG&M*&>>$R1JCC$XN*V(j{2C~-^k`LpcV|(9AqGc=jotsT;3)^kKMtjZU6zNDM%9xCRS4wGaz#*$>~F3W#K=dA z+paMOjWK$!oAxp9c}JC{n+ak-X2EZRN{xCzxw`^t!Xz<&$|yCeIk*D>HH%zm-Ju|c zWC+7Sj2ye}NDw1eclVV5Cddis?g?NP`7MFFHxHwxjO#ynymKSpr|xS(HFBYKU(dtH zEcg#7l`LvUa^DE5kqzHH5X8s_lzT9Ukz2I;Rsa)ZQ+3}CV1>Hn0e}TiCBNMZmzEY6 zSAP$8$zNud*20wD@aVkj-;Az%;)92;PW}2?#qhYqy)!Cq_)fH>udit5iI(sF7@0mY z;n&!~;fq(=_U}E@lsJ0&nPt<~hDX1c`~HP;;&b+>nLyHcteW-qB!_%kUJhc4C frCo>S9?vX%Zr0HGSxXOg*M(PYIQdt7?~(ri`0INI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1d48fa8f581bf6d481aff76ddde8201c1817abb b/fuzz/corpora/asn1/f1d48fa8f581bf6d481aff76ddde8201c1817abb new file mode 100644 index 0000000000000000000000000000000000000000..0ea30f58b96dc59f59e8088e98e41b0e4129fedc GIT binary patch literal 19 VcmXqLU}IEX&|t_W#Q=gJ001Lo0)PMj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1e517b1e6d6b58444650c8ded1badef8b41f206 b/fuzz/corpora/asn1/f1e517b1e6d6b58444650c8ded1badef8b41f206 new file mode 100644 index 0000000000000000000000000000000000000000..c077a08b985c04ba9fb548988ad2e0073c7c97c7 GIT binary patch literal 340 YcmXqLFlbo7)WE>NFiKM=92yn?07sloMF0Q* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f1f5db92c413092e447b7952a9f570cbbd91dba8 b/fuzz/corpora/asn1/f1f5db92c413092e447b7952a9f570cbbd91dba8 new file mode 100644 index 0000000000000000000000000000000000000000..97ef2e76dd0ec6e4b2eab6f379d8cf9654ef925e GIT binary patch literal 1666 zcmd6kK@P$o5Jmq?8j{AuYqTm}tIjZBRU N3=E763|Iw0001OI5di=I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f26993070252a6eb36ca097379f665ae4f17f47e b/fuzz/corpora/asn1/f26993070252a6eb36ca097379f665ae4f17f47e new file mode 100644 index 0000000000000000000000000000000000000000..af696d79311cfe443a71180875651c5f977e9489 GIT binary patch literal 4694 zcmeHKOA5j;5Y0p>hzPlZ3&B;rg|{-RUc_^V$8xDCO<=|`yrhdtneFiA+c$60K6cyV za2_5z+63}<7yIZvg;TsnPy0T06#VLWA?Mc4xwr99X>9jY6GP!35ETB#nor%!_#8Ek zsG~2Oni4n4w5lfrf;@RwsVy0wqsHDjh|SOlq!7b~$kc_?hs1aih03U9ZlStgH5y$W z+OPNkKS8yV`Bf!Sjnb3XR8=`ztXhX^l*P4!AkPWC^GZ#c)5B(F0zsc$1>wfrYv~3< zAT_7-oIp}r(Dc-{1^tr+&2`MNJa+c;pQoux(?Vpg50y++nufTrv(&CC8h`Rg=>>aK B0xkdm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f285e6c896905d7ea1b8c6a25ff545a97f532115 b/fuzz/corpora/asn1/f285e6c896905d7ea1b8c6a25ff545a97f532115 new file mode 100644 index 0000000000000000000000000000000000000000..41828bf8a5727c3a5f3aba2e18f9f9c95372fcac GIT binary patch literal 27 dcmXqLU}7@WG!SNE*J|@PXUoWB(7?n10RTmV1RDSV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f2e42be3a0f5a357ffcf9a00daa7a70de8b23b99 b/fuzz/corpora/asn1/f2e42be3a0f5a357ffcf9a00daa7a70de8b23b99 new file mode 100644 index 0000000000000000000000000000000000000000..f293fe5d46dbc99a7743776ccf8e5aa629a2a7a5 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mXU#xfr0h^e~th9|APSo0|SKd ze-WcWFpCV70|WnHjQ{`t|6`Ha!phak!?JnxS4X3;0GAEhukXLHOP$-&SvmCo7G_a~ zy@e+3Gp`>1bH{b-{KYF*_h(J%KFVUrvYn4-Z}yh`^+v)Ic6u=%yc~8&P|3uo;hJEK ztm0nt-DiP5rU zVq|2tVqnSolyc{>x!uz%Cet^zzuRTEvMEY?ZvT=;J65gA SX|zn463w}PiAvI;+Zg~odYZog literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f31b95175952ed280f2485bd665676bcd7e2117b b/fuzz/corpora/asn1/f31b95175952ed280f2485bd665676bcd7e2117b new file mode 100644 index 0000000000000000000000000000000000000000..71813005e42d0956dc10828b748821163badb2da GIT binary patch literal 1635 zcmeH|u?oUa3`KA99x27;(W#5#YP;OQL7Y1Fvx4CJE&ssZ=~ODM_z4b$mkS}8E`*bW zZig-pc{)m+L|<@jQYGo8eEhk!$Md3*!<^`&0)@E>bo3fAJEI_ER oMk4^-;*$>mL9n(gCS_cIrR!V}F3Y&@+qFA{=^8<%--`(R034D&w*UYD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f33b84cf850e8ca4e16b76c9de94f79660e1b2df b/fuzz/corpora/asn1/f33b84cf850e8ca4e16b76c9de94f79660e1b2df new file mode 100644 index 0000000000000000000000000000000000000000..a64f6e261c603a792e97e215ec1ed0ed866d3189 GIT binary patch literal 768 zcmd5)I|_wB40J674PS7ic7Vig!dH=Rw+;rqe+H=|oj~vvH!FHV$TLQOAw&Ep#>h Tx77V8pFsK>WADE6XWat_#5S@U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f35a6fb0128c28e1c44071f43156ceaea07bb837 b/fuzz/corpora/asn1/f35a6fb0128c28e1c44071f43156ceaea07bb837 new file mode 100644 index 0000000000000000000000000000000000000000..391101a76be126804546070c15fd987eadd333e5 GIT binary patch literal 3305 zcmeH~F$%&k7=>Swnkpg`TspZH+U4osAh;LwARZ$M_9mXg8#s9vH!F=|EP}XLh~&$X zKajlqFZlzZ(ZjqdtIJ3X5+RQ;v`tEqM$1eA1WhUyso=fOv5xbqJT0ZrecMq&sX258 z!a_rW5H{vxu*JHGHjg119qqXTpajs&e(D$R`ZFd@zgKJ{#A<@LwLGqMz4BG!&}{r% z-|^O{ki~1!e7Lm#VU*)%rPqN`LE_6x>j=kUJg4XsAOW)a7{2qR&lR+a>v&1%D;V-?ms*0T)H5N-95$SYGYv)gSruuD4P4k z7CqSU!A|(DrfW=$mMs$_BeN9)OV+0pCiOdy&0X!DUNM=zvE6QEQ|_*J!aAG5uKLF! bvxSvw@7{I$mpt0BYE{mAtu}{76AwWEteBp5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f38b4fe253e09779ddb333f415a8398962445bbf b/fuzz/corpora/asn1/f38b4fe253e09779ddb333f415a8398962445bbf new file mode 100644 index 00000000..08d00395 --- /dev/null +++ b/fuzz/corpora/asn1/f38b4fe253e09779ddb333f415a8398962445bbf @@ -0,0 +1 @@ +0 *†H†÷   10 \ No newline at end of file diff --git a/fuzz/corpora/asn1/f3c5037c6f62acba23b50fb08b146bb5a07914ab b/fuzz/corpora/asn1/f3c5037c6f62acba23b50fb08b146bb5a07914ab new file mode 100644 index 0000000000000000000000000000000000000000..07c45c1c4bf4466f928fe36d6fb0f36bb4fc699e GIT binary patch literal 60 mcmXqLU}H2eY%pkGVqj`yU;@ELI19#*LI^c7Fff3GK>z^pQwEIy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f3dc1287d073dc9c303afdde6025fb41f6f0edda b/fuzz/corpora/asn1/f3dc1287d073dc9c303afdde6025fb41f6f0edda new file mode 100644 index 0000000000000000000000000000000000000000..12e5ac6c7384cf01e3cd49e6dd08ca6ddeb61aef GIT binary patch literal 23 bcmXqLFl#7i$Z9ZdC}=2PYG4pz0FeyufsIMjgn@w>WE=q6Vhj5K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f41f086985aec798ad0d0b14ea1d8818753be1a0 b/fuzz/corpora/asn1/f41f086985aec798ad0d0b14ea1d8818753be1a0 new file mode 100644 index 0000000000000000000000000000000000000000..8d065159e2300e454833b17e2c140fb33cfa4bdc GIT binary patch literal 244 zcmb`B!3{uA7=!!&}s&3QDqnp`^B1?YYOQ5eYN88y3IR*p;x`~s}J#= y_@B6UWGFB^nlenIO+{E0SQS_mSQQuwY?^E&ZLa@*R`8BD_`+P}Q_lU3cXN{%QK_4D#SS)8sfXwVxI|Ae-k=Rn zrL`T0E`q;kZ7PNv$Nwrt(z@v%;{CD1L5ign?!xpKrKx1APBGWHwVg3-T0^F6iM~KY2bjckCjbBd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f47af545ff93604bb8c110df50c185dccd625ba7 b/fuzz/corpora/asn1/f47af545ff93604bb8c110df50c185dccd625ba7 new file mode 100644 index 0000000000000000000000000000000000000000..d1d25c0ddfb2dbd699a3d80f1181b3a8fbb0214a GIT binary patch literal 380 zcmbu4F$%&!5Jms&%0y8sEpmfE1o>JD_9;Aw$5@2qTDgH9$3|Sq>_%+WKh6IG!<)~b z^SW!g`%-3WaXkWUoFf_3Z9PCRlyWGA$#bPe-8I*v6P=pzDEuB;fiN*0Zyqt;o-xL> t9d#PaIVT34w7dZD0$`wz?CO)f`Wk7hZX=K|TNg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f481f1d1a1bf63b5e9c93c65126e7ea6cb424b5c b/fuzz/corpora/asn1/f481f1d1a1bf63b5e9c93c65126e7ea6cb424b5c new file mode 100644 index 0000000000000000000000000000000000000000..de445220345471bcfe798750b0757e3273955050 GIT binary patch literal 4 LcmZQ#YG42W0TKX( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f486d236a4c376742c0739c3bddadb587f5e0018 b/fuzz/corpora/asn1/f486d236a4c376742c0739c3bddadb587f5e0018 new file mode 100644 index 0000000000000000000000000000000000000000..e026010584fc12c3cd65729a220cf43b5a6a6ef8 GIT binary patch literal 76 zcmXqLU}92ZFlf+eU|?imU;t6>4GfF|3=EkKj5-WZA?pT^6c6M7|Nmb?l)>0MATF3- GU;qF)k`I*t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f4c8f409402ca33a52ad333849bf2f99d3870ceb b/fuzz/corpora/asn1/f4c8f409402ca33a52ad333849bf2f99d3870ceb new file mode 100644 index 0000000000000000000000000000000000000000..d68c9abe53edd0b838e325f11b8800711b865edc GIT binary patch literal 184 zcmXqLFlaDfW@FScXfSLrU}a;}(qI5lDi8|F<1u0Y0dYoy1t9eeY|NpuGV&~`1_lcn z7DD)`EXH6dO$KcSMg|531BmMLOa@@B$N(b54i*B-LYN?6(7?tdDl5(O#*l%58DtEG H98??txj_}t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f4f859f6f750cdd8202d305370c9bf63470b06b4 b/fuzz/corpora/asn1/f4f859f6f750cdd8202d305370c9bf63470b06b4 new file mode 100644 index 0000000000000000000000000000000000000000..28a2d9eb6da6cfc63ebfa4052b6b4f07c8fe27c2 GIT binary patch literal 387 zcmd^(y9t0m5JYG9Wc?usCf1YLu1Zn^P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f50734f6ec2c8f136a2492d8a1263cdc93b6b1b6 b/fuzz/corpora/asn1/f50734f6ec2c8f136a2492d8a1263cdc93b6b1b6 new file mode 100644 index 0000000000000000000000000000000000000000..b79acb0e080f3964aa458127f90f75d35333184b GIT binary patch literal 14 NcmY#yFn~h_1^^+j1Q-AS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f526486eeff2fa593d8552ae64e94edc0b9d3d19 b/fuzz/corpora/asn1/f526486eeff2fa593d8552ae64e94edc0b9d3d19 new file mode 100644 index 0000000000000000000000000000000000000000..aee90c532bdb708bc6656802e492b2ec68f60196 GIT binary patch literal 35 ScmXqLFkoh5)WS_LFaQ8U^8+~m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f5344c6fdce00c5a1801c38fbe1d52846859c90f b/fuzz/corpora/asn1/f5344c6fdce00c5a1801c38fbe1d52846859c90f new file mode 100644 index 0000000000000000000000000000000000000000..cba23415e9b5cb835c02a911ca037b095a44c4af GIT binary patch literal 84 zcmXqLFlb=o)N1o+`_9YA$Ys#Lz`(%3Y{h8Mz+|w5p<$r_0|SFW!xAQfw84@lCI$uu I0R{#G0Pe03IRF3v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f543ac2c80af1b26a79b6a980c46eb6aa0cbff53 b/fuzz/corpora/asn1/f543ac2c80af1b26a79b6a980c46eb6aa0cbff53 new file mode 100644 index 0000000000000000000000000000000000000000..ddff160c24ff2d6f0766c0c870033d2d5fc4c91c GIT binary patch literal 458 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OpI(CUEIZ8w~K-Z)6~Vu%A`Ck%d8(S&o4jWY$s;VQldK|9=ByS2BXkq|6Ehm=&l%9m=Jl P6)*s{0&BEf1xE`2&WJlf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f554021c618278d8f7c220b04f1261d6db3e3a5e b/fuzz/corpora/asn1/f554021c618278d8f7c220b04f1261d6db3e3a5e new file mode 100644 index 0000000000000000000000000000000000000000..e96bb9bd5a7c347155b1ffe0acefdfd8011445ab GIT binary patch literal 5492 zcmeHLK?=hl5FE20lu+ocf9T0WPyImptUcu&=}YpF{-THWSTt>lq(zA&DwTjlW_8`! zbzM~~>qC2P?_06iiK+)HuIR|2XiI(c{1)h3GlUD+woI0|B0S+yldJup+o3~557W~$e}!NE`YSkR;wbXs zBdd?O-@#rvtZ3J>QkX?o4D#;*wbS(j+Wa2yhg!Z{OH3c_gnEi5K;4!S_o9mEx85-Sbt MSG47ixA8^v3Eh@L4FCWD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f5546af8eea3da2e9e435d5c32f2dc91ef7b2a09 b/fuzz/corpora/asn1/f5546af8eea3da2e9e435d5c32f2dc91ef7b2a09 new file mode 100644 index 0000000000000000000000000000000000000000..1eac763fddf8530287ea2668debd46004f99f952 GIT binary patch literal 79 zcmXqLU}92ZFlaDnU}IXwz`(%5+vai3f`y4Oj`jb4Rt5$JCPA1A1_nk02JuElg9RYf W%%QRhEL;W*4UJ3<3=E765C8yjMGgM| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f5566321d133a6b194d65c0d4497ce82fc53eec0 b/fuzz/corpora/asn1/f5566321d133a6b194d65c0d4497ce82fc53eec0 new file mode 100644 index 0000000000000000000000000000000000000000..f668672cab2c9d0434e6bc583dd808e37dde3ce3 GIT binary patch literal 62 zcmXqLU}92ZFlaDnU}IXwz`(%5%fP_G_@9X}j)_ThF9QPulO#xpiSajBfbq8i0|UdN Mzf7WgB^VeO07eiCIsgCw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f596f572ca960930c106827bd047666eafe046be b/fuzz/corpora/asn1/f596f572ca960930c106827bd047666eafe046be new file mode 100644 index 0000000000000000000000000000000000000000..a15949d00f078f7d3046c4ec7480ebbec50a56f9 GIT binary patch literal 768 zcmeIwAqs$C6a(Px@$-X^D7 Ci;p<~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f598e959cc02f565ba91da2331a981fb7384180a b/fuzz/corpora/asn1/f598e959cc02f565ba91da2331a981fb7384180a new file mode 100644 index 00000000..70445e55 --- /dev/null +++ b/fuzz/corpora/asn1/f598e959cc02f565ba91da2331a981fb7384180a @@ -0,0 +1 @@ +0* \ No newline at end of file diff --git a/fuzz/corpora/asn1/f5e6921553d297e6910e4823b1be12a5b29de90e b/fuzz/corpora/asn1/f5e6921553d297e6910e4823b1be12a5b29de90e new file mode 100644 index 0000000000000000000000000000000000000000..2a0c711b397f8ff4dcfbf2ce2a20314962003cf9 GIT binary patch literal 27 icmXqzG!!=wWn<)#5pecrXjrmBbHfG(1_q{v6`uh}kOvw7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f5f53364f4a266cc7562def1744b05362a243940 b/fuzz/corpora/asn1/f5f53364f4a266cc7562def1744b05362a243940 new file mode 100644 index 00000000..fa24247a --- /dev/null +++ b/fuzz/corpora/asn1/f5f53364f4a266cc7562def1744b05362a243940 @@ -0,0 +1 @@ +pU \ No newline at end of file diff --git a/fuzz/corpora/asn1/f62ab84e40631100d8a1dc4124ca71eba3886708 b/fuzz/corpora/asn1/f62ab84e40631100d8a1dc4124ca71eba3886708 new file mode 100644 index 0000000000000000000000000000000000000000..90960e72b866831920e6d7148dcd130eab3a09b6 GIT binary patch literal 364 zcma)%F$w}v3`8f{C8A)ru#F0~+RU%LfCq3(FR-V`A}n|Sdj&n6_Lj>3D2SkZ0!fiK z!wlVqi+2P(^WixZb||tXBv|w1OQPB>P|u==~gt;NjakL;uF}X9XU5`+DdN( xiX{BD$@Tc9&yTVC7bD-Mt@QfQh93J9U0KXAdmq~X2Rtrkn9w8`?FHBtcmmW)JFfr$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f650110ee11fb82a3762d62e9931f90125e8deac b/fuzz/corpora/asn1/f650110ee11fb82a3762d62e9931f90125e8deac new file mode 100644 index 0000000000000000000000000000000000000000..45f37075a34a9a1242380678c9bf13024679dcf6 GIT binary patch literal 68 ucmXqLU}92xXV9S2z{bSW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f65d78f9a0733cfd0f84fad36c03b25c3dfd0286 b/fuzz/corpora/asn1/f65d78f9a0733cfd0f84fad36c03b25c3dfd0286 new file mode 100644 index 0000000000000000000000000000000000000000..eacfe83edd1a1f838a66bdf8c38a92ca9b6e4e93 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4Z@E)w5k;x#KMFvg!9}@o` zi_8{Qu2vqF&8xpU8ifV8Y}kH%|BYSh+?LMDq5roqi!$sjG;yDK_4uDVu3P6X-nqIz zYfAS~7E6}xd^~%zx9qPs5}vTri}~Q?utS1MCPod{1Y=|s_nIenZ2hkM+ehjCv$M{n z3!>QFQ(Ue#7FIFTnP50qY|(=qAMAwhYP!b6XxTC`GBR5+uw;Eox%1fE?&%ei=^NYM q?Xp|hlq;;W8SHL|i}&tbw|~i_9jjL5G+L%iiRRqDL?!9a?F;}MiJ`Ip literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f666f56690eeb1dfc9600fd371c6f57ffdf70663 b/fuzz/corpora/asn1/f666f56690eeb1dfc9600fd371c6f57ffdf70663 new file mode 100644 index 0000000000000000000000000000000000000000..f4b103d978493909fe683233a150be55410d624f GIT binary patch literal 42 pcmXqLFc4s4*J|@PXUoLM#;V=O!XV2m#K6n|1^*fT|NjqW0|29E2k-y@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6691716f64e8d04ade403f7a22fbe6d2896556f b/fuzz/corpora/asn1/f6691716f64e8d04ade403f7a22fbe6d2896556f new file mode 100644 index 0000000000000000000000000000000000000000..f4fd75629afa8047304bb93bd80947fc392a5c21 GIT binary patch literal 28 jcmXqLU}BuZ!ok46pwY^l!nmM;jWu1Hk%g0ifq?-4NNWT< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f68b13b6367e1b0c1ea39bab98ca161b1d22ef45 b/fuzz/corpora/asn1/f68b13b6367e1b0c1ea39bab98ca161b1d22ef45 new file mode 100644 index 0000000000000000000000000000000000000000..16e60f35cb96928bd21fdc209d9e475cb23f5272 GIT binary patch literal 1205 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>h1H!>Q6 zlo>RzF^9^^uy7ePG&3_aE?@x5g8@i$XqE`mn*s&~X0R@Z`bL-`jSS+Wh78LvfyMA> gGGSmCo-s_LOpME1g9b>M!l2#2rUfok3>X-g0hR&RAOHXW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6a47dfd3f4e4d9abb62aeb7174c0de497bb82ac b/fuzz/corpora/asn1/f6a47dfd3f4e4d9abb62aeb7174c0de497bb82ac new file mode 100644 index 0000000000000000000000000000000000000000..ea14829f13ed2a2b29f4ada5e4b96cd1e5c09515 GIT binary patch literal 111 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!JvVOQOmGlVF(lJ|NsBf3=PctA~fk|YMFcTw#0W%9DGlKy;8#4m~gER+Nn1O{6qK<(9 E0PVgMlK=n! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6a709650f2e7dfc55165214b1d3759a758ea193 b/fuzz/corpora/asn1/f6a709650f2e7dfc55165214b1d3759a758ea193 new file mode 100644 index 0000000000000000000000000000000000000000..62878127b68e69183b13775d82e3f1b54ad2c3c0 GIT binary patch literal 44 ecmXreVqh?6U}I!}Q-*LJCqobegDHp$5dr{lRRq-l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6aaa8508eb08272569583d1994cdd036fbee413 b/fuzz/corpora/asn1/f6aaa8508eb08272569583d1994cdd036fbee413 new file mode 100644 index 0000000000000000000000000000000000000000..321d33032479e4f6c80607b0ef456550ab07b551 GIT binary patch literal 151 zcmXqLFlaDnU}I!pU@%}1XH;JR;WLNI%CMvwG%RRX*kHiQ#;9V$0H$=nl(ig~($Ihi aVw1yAf(#5A*qB6(AR_EA378-=$SnYzc@V?^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6b0db7c9be1ba34a644bbcbc359e6238d5666b6 b/fuzz/corpora/asn1/f6b0db7c9be1ba34a644bbcbc359e6238d5666b6 new file mode 100644 index 0000000000000000000000000000000000000000..32e0cd17945e084fcc697ef9ae3cbc562b5f01d9 GIT binary patch literal 6010 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+tPIir|NsAg()9m-76t|eVYn(r1_px$HkMX{CI$uu zW<~}O*8ratO^jLwjj!SQ4I1w=F)|uxKm`~XnPeG2HX#EB1Yk4>W|2Xb`~Uy{KP3J? z7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV8!T({0&ymNJb z)|Bp}ES4pHtPiiuG05u7(ZEH3(FVy-YVD1tTm+zc z${h_{1Q-omyv4$3YmfBS-e^|{XD5Dml{}-FgY?WXItYU^bBvB~ApkY1WrN{62s7Hx NB!6ty;~Zk}8URzUqK^Oo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6cdb4c36dc9496e29e0cd8c2250f58afe0a3a16 b/fuzz/corpora/asn1/f6cdb4c36dc9496e29e0cd8c2250f58afe0a3a16 new file mode 100644 index 0000000000000000000000000000000000000000..c7709a126fb3a10c80f1c7d419a76e51b610bf4b GIT binary patch literal 13 PcmXqLU}9u|AO;2i2*Lom literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f6fa0962abc3e802ee5983a9f915155e649971f1 b/fuzz/corpora/asn1/f6fa0962abc3e802ee5983a9f915155e649971f1 new file mode 100644 index 0000000000000000000000000000000000000000..5dc922b7cde2cb006480d0757ec8f3e660e996ca GIT binary patch literal 300 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~Ky7A%YgtlEt%3<}J049wsEGk|~-m_z}Lj0_A04Qwo}22BhM49tuSAg%$CRxlG~ Sg%Gu@K=LZwpLR?Te*yr8^eY7b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f739c044e7aa2f3802dad6e5c276ad7ff3401a6c b/fuzz/corpora/asn1/f739c044e7aa2f3802dad6e5c276ad7ff3401a6c new file mode 100644 index 0000000000000000000000000000000000000000..6fb7450cce6938ee5ea7a447492d462214abf5e7 GIT binary patch literal 792 zcmchV!3}^Q3`N_9U_7{pr{66ct0(4gORokJ8)Je+9S$3iDz|2}`ekwK2w5QEiJs Sg*^Oy993cElXi@QZtDb%!eX%i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f73fec2725ef6f5a04b91e032b304c265b68b65a b/fuzz/corpora/asn1/f73fec2725ef6f5a04b91e032b304c265b68b65a new file mode 100644 index 0000000000000000000000000000000000000000..f9777f9a5fe500c407a10299ec77cc20ec5fbe97 GIT binary patch literal 138 zcmXqLU}6A4g9heuMg|5O1_qr5Hm1nG>}(B9OpFYSFuprmLn9Ld2q4KDFf@Glug%B+ SQ;($I9i$&gJ+e0J#sUDfpB*Rw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f7567ce9b654f7e75cea729f68e70284f2ece731 b/fuzz/corpora/asn1/f7567ce9b654f7e75cea729f68e70284f2ece731 new file mode 100644 index 0000000000000000000000000000000000000000..8d7037e91b56b7d4f4f7e6a381aaf42601014fe6 GIT binary patch literal 9 QcmZQ#|NozXfx(~w01hSsxBvhE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f7578c63ecea434dee743e1bfef80cd7fadc590b b/fuzz/corpora/asn1/f7578c63ecea434dee743e1bfef80cd7fadc590b new file mode 100644 index 0000000000000000000000000000000000000000..d9dec0456e1de33f3adcd0c999d26390c36932ba GIT binary patch literal 9 QcmXqDXJgb_z+}Jx00r3rI{*Lx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f7707e801adb4f94800a9980b3429a3dd80bb5a3 b/fuzz/corpora/asn1/f7707e801adb4f94800a9980b3429a3dd80bb5a3 new file mode 100644 index 0000000000000000000000000000000000000000..9bd30e3fe3ba2f53e8e8cd6d6fcacb97ffb84c68 GIT binary patch literal 4 LcmZQ#V&DP*02}}h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f779b155ce809f66d46cfe8760d2b8fc082fea03 b/fuzz/corpora/asn1/f779b155ce809f66d46cfe8760d2b8fc082fea03 new file mode 100644 index 0000000000000000000000000000000000000000..33f19bf54cd4aa6c434d82e78cf9c81c9fbd3b03 GIT binary patch literal 140 zcmXqLU}F5pQo+E$!0`V+BZGD$i&iUh$|SNtIuW`U85kI<7_=A}w3J(!Qy3RCu(4`4 KvM{iN8~_03f;`ax literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f77aa4a4e241499079490328f8f8b490dad5e338 b/fuzz/corpora/asn1/f77aa4a4e241499079490328f8f8b490dad5e338 new file mode 100644 index 00000000..67f67926 --- /dev/null +++ b/fuzz/corpora/asn1/f77aa4a4e241499079490328f8f8b490dad5e338 @@ -0,0 +1,2 @@ +õ +0 \ No newline at end of file diff --git a/fuzz/corpora/asn1/f782946bbd8afcd41435ca8d9589cf4f6d6726e4 b/fuzz/corpora/asn1/f782946bbd8afcd41435ca8d9589cf4f6d6726e4 new file mode 100644 index 0000000000000000000000000000000000000000..8fbb7b6a5ff85632d72fdaeb09bbf9ce8c7146fa GIT binary patch literal 4 LcmWe&5@Y}X0Bisx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f793fbd8017b3b23fbc27d2b724db7e8143f673f b/fuzz/corpora/asn1/f793fbd8017b3b23fbc27d2b724db7e8143f673f new file mode 100644 index 00000000..61fe79d4 --- /dev/null +++ b/fuzz/corpora/asn1/f793fbd8017b3b23fbc27d2b724db7e8143f673f @@ -0,0 +1 @@ +½€ÿûÝ \ No newline at end of file diff --git a/fuzz/corpora/asn1/f7ba019012a93a62f8771728786c3c0cefa288b3 b/fuzz/corpora/asn1/f7ba019012a93a62f8771728786c3c0cefa288b3 new file mode 100644 index 0000000000000000000000000000000000000000..c1fd612ff200285f6d00744933962b6cd3145ca4 GIT binary patch literal 796 zcmXqLVB^+mb7=d{%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%42sNh49pA+3=B&_gt5W@|Njg;K}-e)29PR71_px$HkMX{CI$uu qW<~}O*MKxD6kt|h2Le>E0-G-y420o+rGgd1!xzIbpb&r&9?<|h8*mo@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f7e6dd4451dabd14fb61f504d2de9dca59ea713b b/fuzz/corpora/asn1/f7e6dd4451dabd14fb61f504d2de9dca59ea713b new file mode 100644 index 0000000000000000000000000000000000000000..ec3aff9d484b90d25c66293340a86ad5aa422c6f GIT binary patch literal 11 ScmXqPFlb<7WH4;dVgLXSo&rPw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f7ffc62115bd8b9fd931b0545357da9b3c211a30 b/fuzz/corpora/asn1/f7ffc62115bd8b9fd931b0545357da9b3c211a30 new file mode 100644 index 0000000000000000000000000000000000000000..0be628f0011e9a29588abe941775b6d07d6ab95b GIT binary patch literal 20 WcmXqL5a%(pgaEDWf(+se3=9A)l>?ms literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f81709f8352c89b0151dd7f14f3e113d42e737c9 b/fuzz/corpora/asn1/f81709f8352c89b0151dd7f14f3e113d42e737c9 new file mode 100644 index 0000000000000000000000000000000000000000..d1d265c4a3f1526122026c52adc942c86c928c65 GIT binary patch literal 6328 zcmeHLdpJ~E8=pP1XUHv#CYLZo$91eB8j?<_&_&A8MN(ti*qNC<=2A@^m7PdQI4Sk% zkV_XzrF$fmQj&bS(M2~&MN~S~sl)f|aXG_xzUTaN{`sD#`D^{&{jRm%^{(}M=Y3y5 z7#^oW5S2=!!PE*Tn4Qgh*qmLE@M89~(tG;9eu^pHEe_E*c1EmQt~RVdsJI1#aSmS! zHGemW*KEb7mIT$6p4>Y8Lw>bk3P`Z*JZsIiHG~?_2218fBGC15 zHrI{Ieh)$sq&~OSMAPp)3L6i#< zGA$dfq+DzKr2{@y_duXwrFF*k zTWfH8p2KtEV{RmZM5s>@hn<+4q%-bWORRd7c}&rljQpOLzgTYF*B&>M zCr|1*eE#b5>kfs_GdAx3L3gI+bT#cJI^ViG#`6}w>3B!Sn68UIU)VExiQk6LAumf3 zf~Yiz0_73#SwO%ifhmI)WNHnQj#sy5Kyv*7x4uO8HPxeYiRb%IS5}B z2nd}&zu+89G#D=v561FnVz`RFki(Y@708DO!iH)f_z(@@${_;T&?(DBDmI6sDgc$L zfCz~Sh?1)SOr`=v0u>-01Z1RBdtW_2oG-?Doi}jgUWte>=vP8;p%9fIN{SGA{nF)F zIEpLXPTs3j#+P9T2N99?I)HE?p<%~~TrT4(6?@0d%CUhRM~KQK7&1s(%Z?+LAW@h| zsiR9G!H}C*;BuKf40ROY2#!Z%y;f=4^~;qLSpyIamm_=`hW9S0X~$8>Fkz%p$#~%T z2{2S7ldA5cIq(e^5+>p3a#VneQOUrI?T;BE0wxzD7?C*6i4+h9y&s0WOO1YYTuA8m zjtBYFNQ?_GM8Oft_>R)ShG?j`Lu18?739w3M(Rp8aKcbRv(F*DUhM;ejt!#vSqVXK z2nYuD{TNUa%%fy7v4@kBI2s!`6)tr0@tfr1%t0hF6=i5ZxzA%<)fqS<759b&9he0h z1Zov`d=v-!wMyK*to5gi_~i9RJkTNo0uzFIU@D*ha}te)4FPMN!SqKAmPy%fQ74vv zj5}ExW_&g{&IwqM3T)UI7y>PZhCKso%+bEL&9|Kv?83KKUp zcua~;XMF2UMXU088gCwyTy}VS=1^^SxqZp%OZ68*imN+bp8jH-k$-4y9c4D(|s%wa*Q7crvkQT3h*cyv&hU)iYtPp-)BGYUh6;4}M$eLbEJl z&EQ4P*QvGiu{H|HM5Y9mOw6aklmZ$RGB`k|(x9Y@!nl2KT)yd74s(3|wOKulF*fz7 zKYsKo{PpL`rk7Q(h?cD}znEG73tT9>)i=0;@-%o^tn6`l+T_6W4U*pGbTp-DX~6oZ9Mrlm-eY0@Mm8bM|`jw&ECYCMo<#h#qvTFI7_G(1s&8|T0 zuIb;he`<;?&xytpE9wHwZ2;}Z`|8p;g0(#!p8LizQqIlLgWtqjHMM;C#*O*9?atB< zoau)r*I$2Kxy-nvCh*aS8Jo?o8u869%hN1B2WFH%UpHO%ie1~; z9c;ZS_no?MPA7j=hIO+4T=}z;?dsJA-)b$F9rM3AjkaS4ZB50|rqze1y4*bL6?3Yo z%i8*)wrkSv-CuR|6iH^|E+0;jV7*O>xR)TVc~FT_u_`laOVZaOdbpNeY+)>Vy1K?+ zrC|BX3Pgu2FNTu^3rwRz48ZBHoFE9c1Z-f|j{%gR-&aXRa-<3&qU>q_eR96C;86z* z2$zrOEQ7$O{1rjxYl*jvMROL4-AK%z6flu9zaVXn z{sNukVS5g)%GWRW;lnQ79kD?)#;1q{OO}K`Em|xraQBsG&a@5o*mBFhIx7f1-_>Gp zXWhXu?IV-+{vrs;uQ}ZrkrMtqcGok?F~6#2jlxHZ)>nyBr}>xHJy^J1!1>5>Yl^9X zF6v*fxWWR;mJ_w5kMsJaEvjCk(<#7zFz0oZHw|kr)uzVCu?YT3t|PD~*{;d7>XWbo zQA935+1{u`hDBfqUxxnK#3cC-oPnz|7mOtX0LgzI;0?fkB*y$5@$c6dBH)j%k)w_0 zty%QgQ^0GEIkhtFcG;eWnVe0m z_ejUO<|LcpzgpjIU;p9I-n6RBYm*IK4R#;OoR-d+UHvZ6`vNOtzGFZ~lH-%pt`4N>U8rs|2C!X`fZjMK3vW8u!GswrS8vu zcMD{?-wqvP|6sy?gLBSr3~4rV;g}aiE)$;eO4Z!r!?F~wS)gl4g?(#Gbn}-!;&+0$ z_Cdt=ZHf9~Utf}O&!=HDTX(igW@`3r72^M8To^t;Tsk1@$N!219=$Af0bJme;;~<>Nv4N-F#JQrQPg1>Oue$dpY19^uW6K5k{(T=eO zh1=`jHf2`&ZP^Y*xgfHt~SnWWvDZOJNFmV1!9XH?D$|Od{@&oCPvGaiII`nis5?Jr<6O7 z&F!9EF`2%x{oO9Rl})+AI-8@*Sjy(wF#LG^-eB+Eb^Dh*+OcX?PNQYYlxWWVOH`5$ H-Od021FxK7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f84784f47c70baa1c8280b1175aae0ca6e3a8c77 b/fuzz/corpora/asn1/f84784f47c70baa1c8280b1175aae0ca6e3a8c77 new file mode 100644 index 0000000000000000000000000000000000000000..5e7216e91a7a1dbb683b215ff862b3875ff4852e GIT binary patch literal 86 zcmXqLkZ)jOoWtV4z`*e3KLaw*gmT`X(F_a>T5TTZY?&FD!7^103=IDn7BsN2YB#bl HaDl`C4Sx%c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f8de6abc43443b6b3902fefc3872f59a8eea395e b/fuzz/corpora/asn1/f8de6abc43443b6b3902fefc3872f59a8eea395e new file mode 100644 index 0000000000000000000000000000000000000000..62e858f9c5cc3b15ac1507768d5238d61dfb989a GIT binary patch literal 1902 zcmeHIyGjF55Ir-yx!J^sub@IA*t#}n!A2pSMLxj%gnwW+5wd?Ew#ip0HnFtwO9Tr+ z8zFMLLKGB*skHu@aPxw$otUDfb)k=iU7TxIhbW(PIRh02qt8 vjWmC}Nj{`j^k3p|i)SP=&j;`)J6-<&FPfcVJvR@({Zd-kep5^WI&%I4RIf;} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f92bf9269252237d041ddc8b09a8178a378d1176 b/fuzz/corpora/asn1/f92bf9269252237d041ddc8b09a8178a378d1176 new file mode 100644 index 0000000000000000000000000000000000000000..159ec7c3bc10674b1a6b0bf27c9f212ed7aa4c12 GIT binary patch literal 2511 zcmXqLVB>CMZ1d3K{mv=C$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Ipd-VK#QH zHji_*OoD72UHGcXu1h&M8bGa7(Y p88omlhsw&Za2Yf-Gcz!piZoRC12*n+SpWxg_ad0acA)_Dp33(2!gMyeU@Z^(q}&M= z2+2E5#r8f|mhJ{eF;nTcFRYTi zge*q_IWH=eW|Y9FLD09RV(sVl)N5)By+Uth4NqyvBwLeouXL|;@AlqyuV9%AZ&488 N`Xh;Ehzz#K;0x#CZ~y=R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f99127ac5481b9132db2f2399610785643469dab b/fuzz/corpora/asn1/f99127ac5481b9132db2f2399610785643469dab new file mode 100644 index 0000000000000000000000000000000000000000..6ef48237f33f96f3cf6c3ba390a7c0968fbfe9e7 GIT binary patch literal 203 zcmb7-F$w}f6ho6g>lYDW%dG?}VYUf^jbOh=5l`_IoNIXl58y=`aGB6aWwj@zckpSHSCQiCOTtWWfD+$bJG<- VBF3sP+y068O#XrIsUnQT{s+VkAOQdX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f9b17a2b92d9b2b322493980eff15284ebee4248 b/fuzz/corpora/asn1/f9b17a2b92d9b2b322493980eff15284ebee4248 new file mode 100644 index 0000000000000000000000000000000000000000..73be065869beac59298e87c9738f0c42fd7836a7 GIT binary patch literal 184 zcmXqLSkPe5z{H4#x==-gQMq8nScE_l*p#B14!2C$fQ^Zf4Tn6)BnAjzVuUgnq}dj; JurV+&003KZ8vFnN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f9bf7ad5f942fa1d272bdd8a4c1c5a71a9eeeb80 b/fuzz/corpora/asn1/f9bf7ad5f942fa1d272bdd8a4c1c5a71a9eeeb80 new file mode 100644 index 0000000000000000000000000000000000000000..54bf5de66ac04f5919718c4a3e77842c58c7ed87 GIT binary patch literal 1910 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYb$nHd-i7z`RD7_B524Zv(S0|7R6 ztu~KywoHs{tlEt%3`)#K49pA+38Z%4GfGe(u~bg zl1&VZQjI`?j3p&A(l#Xz)3~)5ocVTuN+}b%7LGJbQkWUYa-cI12w=;%)T)6jkSj$v KfZGVKM>PR8PUb2A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/f9dabdf73f966f923a341d7c846e8995499e3576 b/fuzz/corpora/asn1/f9dabdf73f966f923a341d7c846e8995499e3576 new file mode 100644 index 0000000000000000000000000000000000000000..41ae506c19fd3dfca8e0b3850390f4e7fd526dac GIT binary patch literal 52 qcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H2^h3RoEaLjVHfN%25L(3w5H?|WE;s+2>@p&*B7dD0faQmzW3$Wf(S zK?Nli5ER7(qM{ILKw=>9hXLgX?h7$iUlW_IV5dHmNOv)^uKXJ@xi-)11x zw+4u3=k#b8*l-~pi{-Y=fJGZHAM&zW<*e?u?6q?}D`V{oGt0+f0kloCtWm?uu@Ks& zVRrf0L1m@om73lJ0O>*w6$;sN{L6udtb(8Dn z7ME33R?SS-O`cX;oUE-ZE}b~BYSygc@?>ptQq|O|+Pb1R1`q-Q{ljtoN1gf+>f;rV zpBc+2ilahQp;8DoF^(*jX5cKVD2@n`(qNRefwLBDh>^C&ILj7sAw!m6G zy&P%Uy0})-jE~EeX8pW3q}B{ZTjS@A3k!HHt)(fymNwF~pCeBi=cTQ%5Vc!hzBKK> zS0Iho+)kSHV{a4|0lM!MN<*K6B5BHxy-Au@ZftvL#_wAPVF{k2qcr8mcH*2yO4|s% zb(UuQ`firSx$hz@0e;QJ($MF$t2FJucgwZ47*Kxftz;0O1`U>Tf18XmzD{rV1{%;P z>(|^(8t3W`F&5F!+da+v_wJOYy!DXAIlZeWjv68r0ARxUJ@0wV6oCJIdr3oIr*})^ z+}|UO_Y#~@4gfUIi_R1p0I=xySIM!)=Riy2^%-Hvdt{~Y`T}X3zfc_o4fm%|L38`ns_pC_qe|{eI1H z)+q3~FBNlW@awz3c`Qxh?Ex9bd-S0DUWf>xGTi_A%Q)@VTqcdr{s3v5gMrRy&0r0m zqd_9h@Yx^iECCTDtmPi|kXuWH8ZBz>IYUI8(Y`jyrSTpOB}2dfP=WR}KFk>c0-8|! zTn(3I{h1jdEY+_bmd0o65ougQBc*BI!$vt%V5uUx4jz@pXK=JM&hr>)oWHTc0`POt zy{CDOfcNq-X`HL^()heRPI*S8JI^NgOg|yxxQ|y9#nFJGc}%M3OpwNPkd(&#>PcbR z`u;ajnBlclrkRhclE&Yw<~4_4jN-kVB;qXp9#2Wbp6>pbERAzDMH=V+X=ex#^<6$& zH6ktm--o8AnXk24X?!nClg4L%x-`CfW=P}Q&vd4h#t4A#?pe~f?&&#XQgK|*&j>?a z%WP>}8*|dk_lRd*9e`4Fj;ufXb48ru^ZT4MuKVYu@&3+pW-x>hE%%`pXbw=AKu{s) zbiRz^-)(_3>MsSEnHdY+U~U{ndt4+UUG^!mULrla2w#*)^+x!Tz>t~;;bMUiy^07M zB+`}=E|ExQmT;*+cgP5rxyAeL=x#c~)ea3tbor%b-|Ub&h*3(R|K>*y0|+2g?h>Qn z2MAFq4S_+bD8etA(U=5XpM*!^_>K0<=&JuoE~?C5hz4D zu!M9I7|IYR9Vovf*UkweFe*XiMUhn37X04>3947ZMu!F>y6>rh5U!O-6-&5IVrruG z66uUmjWU(>zyf-8wd z3%6De7_n*7_)j9c$0>)UKiuNH+Ju5=!^s(1g7i~i}-W&PRTW{fBdw+~BPT-I{y z(L*D*3|;#9w>v(l{C!^X^0rlHCJb1YICuQSHyOvecAJxbIBR*uzQ&Vzf4qBX|M5Mi z#^m=~6E#*9&pUPGWZl`7`uv$T>J`jC)~DUzoa2>EE35x1`S8z?$A^5?D!-w$==+Ta zn<{qgfB(d)l1pE{{C7p)Ju|y)y!!9D@WArCojuPVQSa^Db$Zx_|Mb^yd^Y`1?*F=2 B2($nI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fa3b5dfaf5bd7771ed00e6bc63e10ff1622d8f14 b/fuzz/corpora/asn1/fa3b5dfaf5bd7771ed00e6bc63e10ff1622d8f14 new file mode 100644 index 0000000000000000000000000000000000000000..75d29d8ef1d877829e6993f9260cfd10a323b81d GIT binary patch literal 4 LcmaFE#Kr&s1I7UL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fa470adc0cb32cff7ec348ec0697c918bff85e12 b/fuzz/corpora/asn1/fa470adc0cb32cff7ec348ec0697c918bff85e12 new file mode 100644 index 0000000000000000000000000000000000000000..352bacf9e67cd386aca360ff543356dcf834b0d9 GIT binary patch literal 18 ZcmXqL5aco7Vq-E8<6+@=)xf~O000{r0@wfm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fa61ffa42f140e6fd1fc633dfc1cae4af74c0b00 b/fuzz/corpora/asn1/fa61ffa42f140e6fd1fc633dfc1cae4af74c0b00 new file mode 100644 index 0000000000000000000000000000000000000000..5a4b7a6f97c8fa39d8fb79b8d8d3352e93ad1665 GIT binary patch literal 18 ZcmXqLFlb<7)=tgKV_;xlW@KPs001S00@?ro literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fa6cc88cb32259aa54a0c40805118a290df01b69 b/fuzz/corpora/asn1/fa6cc88cb32259aa54a0c40805118a290df01b69 new file mode 100644 index 0000000000000000000000000000000000000000..7400a1038feb8c2d2e3d9cf19c19d5d95f00c547 GIT binary patch literal 156 zcmb7+y9t0m5C!)mt0ID6ay4l3V!`~%S_H2xJFp#7*|P%QONI#sZbRXcm+|Q*mWv$q sA^_ZERU!~P@s=1LW43lF`QC-CtDtNuOfk4MCk`Ug5K;Tv5|t>~3)D3lKmY&$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fa73e49f81773035e50dc826d71d8f684b6b277d b/fuzz/corpora/asn1/fa73e49f81773035e50dc826d71d8f684b6b277d new file mode 100644 index 0000000000000000000000000000000000000000..6f0c9e342db8b284cef1d65d8863798031242eae GIT binary patch literal 31 mcmXqLU}Czt!=QnUDP3EJfq}uGfrWvEfq{XAfr*iUfdK$$mjr77 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fa741b872209ee4ca170c84edc9761a0aac29c6d b/fuzz/corpora/asn1/fa741b872209ee4ca170c84edc9761a0aac29c6d new file mode 100644 index 0000000000000000000000000000000000000000..d9d944387c71b45517de4a49f6263bcf9168375f GIT binary patch literal 148 zcmXqLkZ)jO{K!(lut359%4S#~A;Tof!2kb~aw8M3awD%|BNOj`1_lNO?M4=@R^}8& z1_lNuQ6?rPQIH@50|O&3m>mkuoB;N8BI!ke^c3;%~L@(OY z9XwDHo}z&;>Hd#E1@{8sDPl$Wm&pfpd+4Yxeo#>j#6Y#(7g2g&OD~?Z&kx?#ifW*< P((}++FWwbx{Uf;o<&SvS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fab1ddc131857828bf774dcd732123e901ba4502 b/fuzz/corpora/asn1/fab1ddc131857828bf774dcd732123e901ba4502 new file mode 100644 index 0000000000000000000000000000000000000000..aa21f76765ca54c9584df4b51f5ce04bd20f6716 GIT binary patch literal 806 zcmXqLU}92ZFlf+eU}K8>$HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7ePEM^pC3}tOfIx#m F0{~LYV5$HB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fad81565da4d4e14d5bb8c386903e8ad7ae25f31 b/fuzz/corpora/asn1/fad81565da4d4e14d5bb8c386903e8ad7ae25f31 new file mode 100644 index 0000000000000000000000000000000000000000..87dbe439babcdbf63cb3cca8a2269caad13920b2 GIT binary patch literal 79 zcmXqLU}92ZFlaDnU}IXwz`(%5%fP_G_?w9_j)_ThF9QPulORk50|SErgLosO!2*zK W=1^G~7A^yZ1&vIN3=E765C8xG9t;rx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fb1ec26f6d85f507fe4c8e69dc69e7ec9a126ffa b/fuzz/corpora/asn1/fb1ec26f6d85f507fe4c8e69dc69e7ec9a126ffa new file mode 100644 index 0000000000000000000000000000000000000000..c9be3e4f11211ca53582b8c02742fb181f8a100c GIT binary patch literal 1961 zcmeHIu?oUK41LMfQxT!)U?*{Im#33Bh&VY&zv&e0*SI?S2mPIn%AHgk9XfQlWJoe3 z50Xb7ot@;i_@% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fb68f198edcdeaa143c224016993881820666044 b/fuzz/corpora/asn1/fb68f198edcdeaa143c224016993881820666044 new file mode 100644 index 0000000000000000000000000000000000000000..ad856b1f18f01914b4935e18c6b9c09f33b62c87 GIT binary patch literal 98 ycmXqLFc4s4*J|@PXUoLM#;V=O!l2IV#mLNn01gZc45#4SD{vMVFbkmaF#!PIhXyDB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fb85f20d84531c53ba5a61d17f2ab0e4a711fd89 b/fuzz/corpora/asn1/fb85f20d84531c53ba5a61d17f2ab0e4a711fd89 new file mode 100644 index 0000000000000000000000000000000000000000..623e1bb8b67ef0cf0ad38c58d869b4b556e4c1eb GIT binary patch literal 221 zcmaitAr1mj3`D2>KV=mO!K_4*T{CMTcm#rDa0OgL0!QHvC~km2pt%TH^7|7kGh*I| zcIYO0hcm4DB;B-606}kM)e0+fZj$2}qcwr6hzhhAyC~{ZnIC;s7j4(k-8P m0+1vsU6rx8{w?y~VmaOexRL;RlPs^JX2tvF5R90X=S5$~XdvnU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fbe5fa3a558e9a76c393f2f12e68d5bcdd4cec80 b/fuzz/corpora/asn1/fbe5fa3a558e9a76c393f2f12e68d5bcdd4cec80 new file mode 100644 index 0000000000000000000000000000000000000000..14073c1c23aa120e6ec2c28766f239de301eea37 GIT binary patch literal 19 acmXqL5ac!BW@F^!Vf)n7vTQ2@0|Njju>^kr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fbf0f59154558a55009b6886ffe986116aeddef3 b/fuzz/corpora/asn1/fbf0f59154558a55009b6886ffe986116aeddef3 new file mode 100644 index 0000000000000000000000000000000000000000..00f5e3a9220491ee690367161b4ffb6d996d5a35 GIT binary patch literal 302 zcmXqLV$?Ede9gwL)#h=|mWk1z@jeqHqk#rgfRT|&mf=4#V1#iP7#JBC7z~10WMCpt z@DIlL|Ns9#7MU%qT&+ATn^%8zGztrF*|7ck{u{g0xhC5XyQKe>hV9; zu3P6X-nqIzYfAS~7E6}xd^~%zx9qPs5}vTri}~Q?utS1MCPod{1Y=|s_nIenZ2hkM z+ehjCv$M{n3!>QFQ(Ue#&TM6r={|$L4lVub52V*#2&p-O8q1VV%vzE&Taq(JnVlKHncBlFkoN+i9!THqKiSI{~5pl0JOFbS^xk5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fc2ecb9df77e25b4203b3009088a2d5c997cb668 b/fuzz/corpora/asn1/fc2ecb9df77e25b4203b3009088a2d5c997cb668 new file mode 100644 index 0000000000000000000000000000000000000000..830369e33b22a2857e20d8c7849df893b85e6450 GIT binary patch literal 2680 zcmeHJI}XAy41G>f5S7@FSl|M%xQ9UE0u^`Q6wc6|BixUjwMuCDDXF?pK*U*-=lI!q zc`SOisrU6|PE%!tMUfO>(TW*33HzmK3j)9fOJcW;MQ7!DHOX15p@RVw+Hi+=$AvmG zkoi+BMic-B%J>9696%WY=($8iu!AsSmk0rjT7e;3(TzmJS%_8eHX6t5+$a+ZBO3)ex xB!Jg!VjT;%kwpJNEk?E97!oYl0%U-Eg)h30f)Q6Z;)-b`tR8HXKz(0OJy<9( H5IX<>N?@{(xfjr&)pP_8ErwDD1x#6w2G z8h<+(u*S3`GLKh(IO|H7Uu?RoI~JS-Yi5-{!atiLSx585!;^gv-j5l7Fb+i>)L*uM zH>bid*v+i+hB~THoCnRa95p|xA1zm>PT;g-*{oQq4x?BrDtiI{I3Q$7pB?DEfZpH0 X-ho}GP_G@x)QJdeGlf34@&|qan{q_G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fcd7975a3e6585b83263b5445b870bca25a8e7ec b/fuzz/corpora/asn1/fcd7975a3e6585b83263b5445b870bca25a8e7ec new file mode 100644 index 00000000..9038652a --- /dev/null +++ b/fuzz/corpora/asn1/fcd7975a3e6585b83263b5445b870bca25a8e7ec @@ -0,0 +1 @@ +°2€ \ No newline at end of file diff --git a/fuzz/corpora/asn1/fcf46724be307ee295a8d5527a843424429ba211 b/fuzz/corpora/asn1/fcf46724be307ee295a8d5527a843424429ba211 new file mode 100644 index 0000000000000000000000000000000000000000..74619f9893eace038f00eb1f301435503ab802f4 GIT binary patch literal 550 zcmXqLVB^$k^Jx3d%gD~OpuwPliLt?u!JvVS$-sbtVPS&-7_u>HGcYnRFc>s4h%*|1 zlo>RzF^9^^uy7f)#n=7+zv6El0}OyPyJm?ny)j^5UYiW`x|L! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd1708db1ddcf98385dfb5a7e312cca292cc83a8 b/fuzz/corpora/asn1/fd1708db1ddcf98385dfb5a7e312cca292cc83a8 new file mode 100644 index 0000000000000000000000000000000000000000..b2a5f5d046d84ab1e109a8612a14f2bca667e485 GIT binary patch literal 1263 zcmeHHF%H5o3_K@kDh4(rhSG@%vbewC19=ag`VM#we_>|?B~jHth13c`7o5rR$v)l1 zX0eNXduVS z+Sl7yx}>!BRR<$y&_y8NS=5yQow~*;84n)tD4BFW_zmNEDNdK_Xuc!WE|V(xGR7nA fN5MX}a=K1#pi_$fPx{T$y{_lenV5g+kdDa%$xyXK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd2926ace2e972afc49bbb0c5e2c9ec9c8edbcfe b/fuzz/corpora/asn1/fd2926ace2e972afc49bbb0c5e2c9ec9c8edbcfe new file mode 100644 index 0000000000000000000000000000000000000000..61bdc6ef9d8090f3746dc7e4e7345a3ed61ec3b5 GIT binary patch literal 473 zcmb7>F$%&!5Jms&#x){JK-5%%SSU#|Nns(Rvq)#_aaO^cL@N*B4ZMz6MRsFMf(UV@ z`LM&x<1K5|53)3S45;UkxIwdRA(&Y!5lVo;+NX_AZ1bKy)eW-ro(NK%@Zew}w~zo} zry`e328NBP^Fq!bm-giXMC)6gv*uB`Yfb=b<(&8kK$;x}r3TW3nYMz7U4tLFtSQ(=K|NsC0r0M_vEDQ_`!f;iL3=9ShY%Hw?O$-bS z%!~{mt^qzPni#bV8ehZp8#LZ$Vq`SXfC?}&GRZQ4Y(fSMNWdVNMFuSQ7p~$Tob~_z zKNguStX!=;ESpzBW5Ta@Zk3B@?5DYl1PdihIqIJGOpT{_Uf5|JhmR z(gjiM?kO%;8)vpM)R{2JvLIOx1->u`YcVl0GFvgQWPM7x^VrPp=@pad8{6OQvI7Nf wBMZau2wXHMolfMg~YZj9gS@P3b<$VgfFz0AX!or2qf` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd3c10f60098cbe8ee792648d71df987c3926d07 b/fuzz/corpora/asn1/fd3c10f60098cbe8ee792648d71df987c3926d07 new file mode 100644 index 0000000000000000000000000000000000000000..0019f2cd941860a2daa27e50bcfa1716c4ebfff8 GIT binary patch literal 399 zcmXqLVB^+m^Jx3d%g8Cf$h4oK!2k@Im<$XI8rYcBnHd-i7z`RD7_B524Zv(80|7R6 ztu~KywoHs{tlEt%4D8Hu4D1XH3=B&_gc*onU|{e85g8zYje)_SfsLirpoxKjftis3 k#5I6hp*=*b06Uvl0dOEVz5oCK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd64909dbb2efe674967678d0c91e85e06174e79 b/fuzz/corpora/asn1/fd64909dbb2efe674967678d0c91e85e06174e79 new file mode 100644 index 0000000000000000000000000000000000000000..d77d41f26d5444728a690e622f7691a30605d95a GIT binary patch literal 40 lcmXqLFc4s4*J|@PXUoLM#+t6p$il%az`)Fa1Xvju7yx*(1IYjY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd6b9a3a092849f8cb853cf643aa11b05854138e b/fuzz/corpora/asn1/fd6b9a3a092849f8cb853cf643aa11b05854138e new file mode 100644 index 0000000000000000000000000000000000000000..ce83067e7c464f7df0dab49e678626de3143e84c GIT binary patch literal 1395 zcmeH{ze)r#5XQe`m#D>c2Ul&W2e%4e5HBm%>b}4>mV&K5fiPMewt}tTHNJ&d=@VQd zSXf$IZ*?e1Ja@%EU~@J{2w{?$Z-)Gmp_rxKpd7rk)PlYeidJGlF`5L1!Z3_3vm5|X zNa0uEp>FTWOq}a~7@GY8tWD?K)STy=)qUa%zi!sxH-*ym&mizC(i+*M<6M(p^XwP8QD_c( z=AY;PVaG;bbhVgEd`Cdi3)=uxoD`n@$+1e8eUMO$%7Y5g@nXKURaW$vKoU28@}lVR e$~Ru0W3&9}<`l*Y*O_!hl(G6mQSe@UXnSvhHZJ`D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd72a59ff3d4c40dd9a8e8eae036b80f411c2924 b/fuzz/corpora/asn1/fd72a59ff3d4c40dd9a8e8eae036b80f411c2924 new file mode 100644 index 0000000000000000000000000000000000000000..dbed2ae97294ce4d2be7124173b94afedbe7fa8e GIT binary patch literal 80 zcmXqLU}CD5HfS(tU}IXwz`(%5+vai3g84sV+yh3@y$lQtOo9ze$^ZWvG#D^6Fc>h1 dH!>P50I6mUl~rcpGH7UQWLnI?z`)1=0RTa?5_bRq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fd75db8934c05d9d9b17260b240f5f2f5e43518f b/fuzz/corpora/asn1/fd75db8934c05d9d9b17260b240f5f2f5e43518f new file mode 100644 index 0000000000000000000000000000000000000000..e8f9e1522b90654ab22c85ed24f2a81a342baba2 GIT binary patch literal 52 zcmXpoG7w;6*J|@PXUoLM#;V=O!l1}3$H4r*{{Q!H3=9ekVDOuPfx+m=wSWJaH5h^! E06z>3f&c&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fdc89bef0a7babbcaf5d7dc6e875bd1c2051cb28 b/fuzz/corpora/asn1/fdc89bef0a7babbcaf5d7dc6e875bd1c2051cb28 new file mode 100644 index 0000000000000000000000000000000000000000..f726130b961d25d4e48e4517c4e6ad6f86ad2af9 GIT binary patch literal 75 zcmXqLFc4;A*J|@PXUoLM#sOw9GYB&qFfcQKfg+gv_wWB-1_cHN21W)3mN!=CkN^9> OfR=q5$p#-6cQ63#P~qXx#!&VF6^}5y8ZP( zGiT<^%vtEKJ_7yKHN~M2j4Q94o4zmo`?yf3tgHz7j$sv4mY1w5EuUE2xE!a!6!}X< zIJ_d-5{tLhJr+$S;_dO)STfQU!P{Vh{PUP_#mY!qG8SoxV;F9iAB_!HEv|1|yyB_G zB}7fHfoH4Kql#e$x5mUKm=I_WTeUc$~R=pLC#3E zue4EQ323rN}$#H71i~ zaq4(G=6e_d=ZF?C!nY3pKu{JrP$6`z@O@)88YY#j&LZD84(K3dwDW*mgm0aX z_!wABx>mT}Hec{C1}55QaY}8=yB;R{o4hnsq+5RWjdF=mA#8nCsmTV+BvshAt-Z=O zWayx2I287(_6^ZMW>CIu-REOqAqT1~yU@qvG?1OEU=QiKU;75YkTL2mbbXXlvk?T9 z`mT?2n8T1!S?D_XKZe|(T21#Eg?XtGj0&NrDu8h^^*v1iOptA`C#!vP08tp!f%NF6 z3UUIP~cV426b*PPSU>FOrRjAb8mw(3LG3XNZ)!7Yqimv zL*G3*1cvgSQU}tf=K^p!K7cCn{*i!DgPaR5J+3haO*F}MW&5YfH+e;olWN=l)*%2| z2xRX~tNtdN17}EPA-zNUCKoT8Eb{bajVU#%decATVN~kVKjvZ7l}TU8!>DAXujXM? z56Mi_nC-2YR7c9x`f5!6P(_}3)WaBX1}MmNCDW`hZ`M2HN|5PLM!n6!B9AxYUuVGp zEpp?^oYO{u2{cTqdUvQ{BrmgE^GGbId{fxXd#~O@cB+OicN$xkInf-lWm-)zd7UYv z*||Cd28L|;l$u|?0y#RIN_|%CAqWBl8e~~!&-=c~#f(f=R^0^#CRk_!H9oS}R0x1* zp=pvK{FyUqp+mkt2AAC4>3SR7g8slD#P)2u8*O+{cS>!gj zdxQ4P0t4kUtFY1C+chRQphZ^5%RgzO2D8v1ck&^>)yPfNAzSqDT0aDijFCNLSiOv7 zPK7rE3y0uV>k#C0maUh-YVt5@F1VBPFsk>u5X8viby*%p8dXmoR3VTz%N0R2vcI`j z5F;NcZo9@DG)C#YZraDZ=N(m+ZYGEUnFYTMDmCf>3)yd-E`A%DDcM$2&Ljed@jzR3jH! z_w_uC%!2=bQpuurB=?P=8rksO13`>@K)DBl7`a8eZv`+xHdXiS09L459srmJRr1@t zaA|3AarO6bm;7aBX)R3Z4X>RuGV;y!Cq8)i>g2DlRSbSA%`Q&f={@r)M z#fDkG6rBz6shclex#QBFhDFCdoPYdFUin_Oz2@>i>rM^Sc1OB0XWyCAH+*Qp;WZD{ oPj7ho)SHKv9l5mg(Cp)x`OnSRb$-T@gWYxEmFrLbRo{E$Kiu4U`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe0e8b5145c3a581e690c39179ba85608c46e7f9 b/fuzz/corpora/asn1/fe0e8b5145c3a581e690c39179ba85608c46e7f9 new file mode 100644 index 0000000000000000000000000000000000000000..75d92b98437286d3fa9b69a994a6c2a04d9e0dd4 GIT binary patch literal 371 zcmdUqF$%&^5JYEp!)lO#k|t$JNt&qz`xG9;V=RLITHe6xqz(U@fQ1)uw%9k-@ECqb zGNgHG>Z9lj!E&l3!*w)(V03cngdb+>yCF^QtBUUn7+NDNfRmkJSVL~~m0RXJ(C5$a X>d6NHlT!I(nSZ&wx@X<&xG9D%pZ_fv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe29e8302697186a4a06e5834f375d7cc1e1b90a b/fuzz/corpora/asn1/fe29e8302697186a4a06e5834f375d7cc1e1b90a new file mode 100644 index 0000000000000000000000000000000000000000..106b751e5078ce9599f32a4d4f3a634c2facb77c GIT binary patch literal 191 zcmXqLFlaDfW@FScXfSLrU}a;}(qI5lDiBH=g~wyW00QES1`9yi8rYaaWo6`9QVk3i zG%SShQ(26`Qko3f42%p635U-+12f1N I3^}Mc04;JBS^xk5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe2d35704873ec8b3608ab09de9036fa6362db6f b/fuzz/corpora/asn1/fe2d35704873ec8b3608ab09de9036fa6362db6f new file mode 100644 index 0000000000000000000000000000000000000000..538b80c2118e477c4a4be08f3edd7a3934221987 GIT binary patch literal 17 YcmXqL5ac#!U}G|1;9>mDz`(!&034A5y#N3J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe4298dd0f2d9c7af16e6e1cfd42ed58cb59bd8f b/fuzz/corpora/asn1/fe4298dd0f2d9c7af16e6e1cfd42ed58cb59bd8f new file mode 100644 index 0000000000000000000000000000000000000000..54ce96947ee43ff0d900eee524b56edbc45dd876 GIT binary patch literal 608 zcmXqLVu~?nVm!~ruGQvo&X$SMpo#Gi6C|3>xRLU^Rv$ z@Q1}QaH`$T#6Fo>@{?vMF4)%U@NUtqqUf2MML+M@(mAp3Bj>{~Nz1@Db(5>bf)4Dp z-ngILwD^99t&YjZ_pb6+vIFcHm_->b%` zW82Qc^78CFyVGgPQ@1$HNollXwco1vLt}kHwy*83h2C-H@1I9%{F6PXzUcpod&VA{ z54L7G&HhUIU}FFP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe5d5d23a90c7743a5bcb0198b251c816c92d4ee b/fuzz/corpora/asn1/fe5d5d23a90c7743a5bcb0198b251c816c92d4ee new file mode 100644 index 0000000000000000000000000000000000000000..c82da82acaf6fa276c3620c8da5647636799a106 GIT binary patch literal 608 zcmXqLVu~?nVm!~ruGQvo&X$SMpo#Gi6COC zSNSX10rm{cq6`=2buehk>I@G(-J8ZPVX2u_ zG0XY@OH5b%7M)t@n=`(;c!tk*$q-+^S6tmLO=tSMqM31D)Etfm>}0fG%bsXzQ_!}k z=#WFlzA0t%FQx?$2yCnW|Ns9AY-?}cuRkrj{tTnXch033thb)r(K*L`-R}JDauY35 zIGGq3nH$>}SQzbiOgmH=q28KMaglfZB+1gf4gG~&mfb)2JtWPitr6O=>~BPCio*Me zkJ#?-?AzYec2efnT5X-TlbDL0y<(`a@GIeOnQr=SuK!gA?xn_OvLyO1_AQXu%K9h6 rU;a*eu$Ah$wLL07S|zsM3Yu{1LQ1y4Uw>!g1JBgi!{#uH%vc5hpmtWv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe6c1aff13b2b5bfed571d55aa48eae65e1e46e6 b/fuzz/corpora/asn1/fe6c1aff13b2b5bfed571d55aa48eae65e1e46e6 new file mode 100644 index 0000000000000000000000000000000000000000..0a2e66923df34402603db5cbab26220e92695766 GIT binary patch literal 85 zcmXqLkY{3?!{V@@fsIwWk%d8yfq}uAk>$S@0|Nttb|cGAb_Rz3|3MrE28MJkW@Z)! X1_mt#2CY`+6h;PhI1{Fy9i$KdnZFI` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/fe891d24577aacb8c9a302077978cad4c668c898 b/fuzz/corpora/asn1/fe891d24577aacb8c9a302077978cad4c668c898 new file mode 100644 index 0000000000000000000000000000000000000000..fad0a73b453fb14db1c42816d52664ac8600cc5c GIT binary patch literal 6393 zcmeHMJr05}6n-rYMiLVT6BnG^WO)qU!3%H+Pth)%L+!bYBC$dCA(^qbOa!-QdI!#?}p)cmnE$0`qf_9dS8^@vpkhNhmaR}aOOus z+47qw*E?dO_j;%rq}Bi!;a3;@h*=ws~w-5;s9c6LL(Ts HjH~Aj_q2{h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ff5a844e120b52e7e5949496075fc9847dfbf374 b/fuzz/corpora/asn1/ff5a844e120b52e7e5949496075fc9847dfbf374 new file mode 100644 index 0000000000000000000000000000000000000000..23d104692ac9504f1c57526f72f9707c7618c9e6 GIT binary patch literal 225 jcmXqLU}9k)88I*sqXlj-!~$ZpP)p6i|Md(ES|9)ba;pVO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ff6dfe941b4e26f195b550f9fd58dd93b29ecf81 b/fuzz/corpora/asn1/ff6dfe941b4e26f195b550f9fd58dd93b29ecf81 new file mode 100644 index 0000000000000000000000000000000000000000..688772a165a84bfba74c64378403a396d77ea604 GIT binary patch literal 4762 zcmeHLOKyWe47DfGRHTZ;zRNBurJKnua;wgYi}V~3$I6lll0mX-&||1nS`AC{{CVb$ z4TR{QPtB#d9l5I6wG=~ij_Y&$jE-MJ^jy1L_rXMaBI=EA3yt}nW@0ED1cJg}1^L8Y z$Cs!_i#&hBnJICjPHTEXAjng)O0;x*iF$CCAko7jAVV0XiDJ4)`LJqFlF&Trf1X0~ zd@Y&L^G%zI59kw|b~?W~iAYbSADIA!n8bV(3gWU93lDXZ<)>9kw>i2qU@!%IJWD1r*n{*lWfie zvv8gzvlye(n#O3cWR?}ob|D*`p0}`RY0fVHgzuMu_hNU=Cew;@d1t=Kt(nYXj225~ bF-B*;$#YC*F-D6evlyc@-z?AH-+inDFxXKR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ff91e07bcda678062cb9bb49043db9bb7372eb5c b/fuzz/corpora/asn1/ff91e07bcda678062cb9bb49043db9bb7372eb5c new file mode 100644 index 0000000000000000000000000000000000000000..c306493946c0572b9a8cb363dd7808b5b4fc3d04 GIT binary patch literal 51 zcmXqLFc4;A*J|@PXUoLM#sOw9Gq5mAFfa=Us9*cJhlk-8BSVXx$#z2qjuypwMFs`{ DHiir_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ffd566554ec9a7463ce829db7d9fb069ee9876b5 b/fuzz/corpora/asn1/ffd566554ec9a7463ce829db7d9fb069ee9876b5 new file mode 100644 index 00000000..7856b58e --- /dev/null +++ b/fuzz/corpora/asn1/ffd566554ec9a7463ce829db7d9fb069ee9876b5 @@ -0,0 +1 @@ +1€0€x1€x \ No newline at end of file diff --git a/fuzz/corpora/asn1/ffd7f294e877411cd191819cc818971a3150b42b b/fuzz/corpora/asn1/ffd7f294e877411cd191819cc818971a3150b42b new file mode 100644 index 0000000000000000000000000000000000000000..e94290ea0a6055ef5cd5959ba5ce1ebefd219998 GIT binary patch literal 27 icmXqzG!!=wWn&IyF%aR?V$ct@RbbQ)wbc)`)dB!B-vmPd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1/ffe511315be3b33270440692b8e11a207011fe7f b/fuzz/corpora/asn1/ffe511315be3b33270440692b8e11a207011fe7f new file mode 100644 index 0000000000000000000000000000000000000000..93c16b40ec85666411eba9dd7e1faf0486633468 GIT binary patch literal 80 zcmXqLU}DN*FlaDnU}IXwz`(%5+vai3g84sV921l1UIqpRCcy@#6b6tA1_lNLcJW3= X!v!GK%%QR}EL;W+&5cY92w(sJnad7- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/00eff4dd23adce949b3066368572a5e398e664c3 b/fuzz/corpora/asn1parse/00eff4dd23adce949b3066368572a5e398e664c3 new file mode 100644 index 0000000000000000000000000000000000000000..8f084dabd997b45156875a85fa43058f37d49e3c GIT binary patch literal 419 zcmZQ!WMILHa0tWH!f3bv3ImmgrWUUxBPAwd(Trv{5*LYyEDSRQLz=Jv+!zd{6v+Sp DGWi0c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/01a1a6eaf03d6eb89cec57425b3c1951d6c3d848 b/fuzz/corpora/asn1parse/01a1a6eaf03d6eb89cec57425b3c1951d6c3d848 new file mode 100644 index 00000000..44db1a3e --- /dev/null +++ b/fuzz/corpora/asn1parse/01a1a6eaf03d6eb89cec57425b3c1951d6c3d848 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/01ec4428d75241a628ac875142f329427d442348 b/fuzz/corpora/asn1parse/01ec4428d75241a628ac875142f329427d442348 new file mode 100644 index 00000000..13b92c9f --- /dev/null +++ b/fuzz/corpora/asn1parse/01ec4428d75241a628ac875142f329427d442348 @@ -0,0 +1 @@ +bù1 \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/01f907d519964796051bd8477cd621d1cff3578d b/fuzz/corpora/asn1parse/01f907d519964796051bd8477cd621d1cff3578d new file mode 100644 index 0000000000000000000000000000000000000000..a89af12d5a42836d950504197d0ef185ff7d8733 GIT binary patch literal 1545 hcmZSM`v2oU1Te6TvO!=p97fZ_Xc`zz10yR90057$hd%%S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/025083edfcdebaf7c19e199e8073d11b1523369b b/fuzz/corpora/asn1parse/025083edfcdebaf7c19e199e8073d11b1523369b new file mode 100644 index 00000000..2715595a --- /dev/null +++ b/fuzz/corpora/asn1parse/025083edfcdebaf7c19e199e8073d11b1523369b @@ -0,0 +1 @@ +(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!íÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!íÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!íÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!íÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!–ÿÿÚþÿÿÿß(…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ³ÿ!–ÿÿÚþÿÿÿß(…Ÿÿœÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß…Ÿÿžÿÿÿ©ÿ!ÿÿÿ³ÿ!–ÿÿÚþÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/027f6e82ba01d9db9a9167b83e56cc9f2c602550 b/fuzz/corpora/asn1parse/027f6e82ba01d9db9a9167b83e56cc9f2c602550 new file mode 100644 index 00000000..fbe16e80 --- /dev/null +++ b/fuzz/corpora/asn1parse/027f6e82ba01d9db9a9167b83e56cc9f2c602550 @@ -0,0 +1,3 @@ + + + diff --git a/fuzz/corpora/asn1parse/02859ef44eda40b87e38020a4099daae5d0af16a b/fuzz/corpora/asn1parse/02859ef44eda40b87e38020a4099daae5d0af16a new file mode 100644 index 0000000000000000000000000000000000000000..8c4826f67f126327df04dc58741cd0d49f534380 GIT binary patch literal 104 ocmd;L;9}xpfI$NTodz}r5P*rmXmkJ*mx8lkA`p5j3jZ?$0Jn4mKL7v# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0327b6cf2417a59ff594d05310f5f683be1f0b0e b/fuzz/corpora/asn1parse/0327b6cf2417a59ff594d05310f5f683be1f0b0e new file mode 100644 index 0000000000000000000000000000000000000000..f76467f2e0540cbc7889c1a182532060ceeb860c GIT binary patch literal 2345 zcmeH}y$*sf5XZ~F89TV}1a6GXK8G*EPU0IFAIX8G&w_(PV@-Q^^aBtR6C;M-0LRhZ z$GNLn_eFTkC<B+~!J+AyJrR8;L5n<0M{9|K3oNQn1&UgY*5?2iX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/033e7df8fa7e9ca17075d50c89fc76113c14c49e b/fuzz/corpora/asn1parse/033e7df8fa7e9ca17075d50c89fc76113c14c49e new file mode 100644 index 0000000000000000000000000000000000000000..6b180a078e4963685d09d28cb06342cb7afe3e16 GIT binary patch literal 25 ZcmXqPFlb<7tT1d~Vq*Bq#KZuj839az1swnY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/033f563bc19e7f7b250c89fd7ed3e90419812bdf b/fuzz/corpora/asn1parse/033f563bc19e7f7b250c89fd7ed3e90419812bdf new file mode 100644 index 00000000..b365859f --- /dev/null +++ b/fuzz/corpora/asn1parse/033f563bc19e7f7b250c89fd7ed3e90419812bdf @@ -0,0 +1 @@ +—ÊŸòÊíòí´æÁííííïíííõíííò…á® â \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/035df15165ddbc1666d656c19faae61f29706cec b/fuzz/corpora/asn1parse/035df15165ddbc1666d656c19faae61f29706cec new file mode 100644 index 0000000000000000000000000000000000000000..1b90315c84ca6648afa4941307e32b602cb9f19a GIT binary patch literal 319 PcmWe<5FdpMWCsBN`y38R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/03986ab7d66138ef56516e48245a90fca88a5363 b/fuzz/corpora/asn1parse/03986ab7d66138ef56516e48245a90fca88a5363 new file mode 100644 index 00000000..e97bcb4a --- /dev/null +++ b/fuzz/corpora/asn1parse/03986ab7d66138ef56516e48245a90fca88a5363 @@ -0,0 +1 @@ +ú€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/04769c9b1b188d1a93aeb8d1239a0c91d8bd829c b/fuzz/corpora/asn1parse/04769c9b1b188d1a93aeb8d1239a0c91d8bd829c new file mode 100644 index 0000000000000000000000000000000000000000..db18e734f8b8beff94da51d31cd07eed06d2e45e GIT binary patch literal 428 OcmWe*5F3R000Cc0R{j7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/073bef59aaf3fc1a1dbd63557dde2db408023942 b/fuzz/corpora/asn1parse/073bef59aaf3fc1a1dbd63557dde2db408023942 new file mode 100644 index 0000000000000000000000000000000000000000..16f245ac649f21cd8bbbbf2d7ad8c584cd5d9136 GIT binary patch literal 288 zcmZQ#V))C%#PFX9LW9_(@{#o-vk94lt`=QA16|$3(8vJsIs*d(6N9d)g+-%@p^*gu D-Cacz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/079dde1801c6b1e289c5605882bb4279af47f751 b/fuzz/corpora/asn1parse/079dde1801c6b1e289c5605882bb4279af47f751 new file mode 100644 index 00000000..c6cb9a80 --- /dev/null +++ b/fuzz/corpora/asn1parse/079dde1801c6b1e289c5605882bb4279af47f751 @@ -0,0 +1 @@ +E€;E€;E€; \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/07ac75efe6ca20c4ea64c7d4f9fcc65a395814e2 b/fuzz/corpora/asn1parse/07ac75efe6ca20c4ea64c7d4f9fcc65a395814e2 new file mode 100644 index 00000000..c23e2cec --- /dev/null +++ b/fuzz/corpora/asn1parse/07ac75efe6ca20c4ea64c7d4f9fcc65a395814e2 @@ -0,0 +1 @@ +(gÐ*ÿÿÿÿÿgÐ* \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/0aa516415b245efb270ca2b4bf831ebd3e091717 b/fuzz/corpora/asn1parse/0aa516415b245efb270ca2b4bf831ebd3e091717 new file mode 100644 index 0000000000000000000000000000000000000000..1817d124ba530e5ce105a70c67e1129ccc43d041 GIT binary patch literal 48 Ncmb0)WRNEX0RViU1pxp6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0c43e098ac9e066aac29f6d1747d0f00227f59ba b/fuzz/corpora/asn1parse/0c43e098ac9e066aac29f6d1747d0f00227f59ba new file mode 100644 index 00000000..273ae7e4 --- /dev/null +++ b/fuzz/corpora/asn1parse/0c43e098ac9e066aac29f6d1747d0f00227f59ba @@ -0,0 +1 @@ +!Ê0ŸØŸò´Êò€€€€€€€€€€€€€€€€€€€€…á00ò \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/0cd161ab3e0e5be829e794fe841498feba6b217d b/fuzz/corpora/asn1parse/0cd161ab3e0e5be829e794fe841498feba6b217d new file mode 100644 index 0000000000000000000000000000000000000000..c4df5c7935f02bdaa85ef642cca5dfc7b7c6e99e GIT binary patch literal 232 zcmY#pV1Yt5tr_1xP2ckK|BwINaMl^DqKa5WNl~lFJ-zD_hHco*#idpo?n*-LWl>}U E0EgkBG5`Po literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0cdf924e6578e875d19ff4d17e7013d499fafdfc b/fuzz/corpora/asn1parse/0cdf924e6578e875d19ff4d17e7013d499fafdfc new file mode 100644 index 00000000..7fc6aee3 --- /dev/null +++ b/fuzz/corpora/asn1parse/0cdf924e6578e875d19ff4d17e7013d499fafdfc @@ -0,0 +1 @@ +gg*g*g*gg*g*g*g**g*g*g*g**g*g*g*gg*g*g*gg*g*g*g**g*g*g*g**g*g*g*gg*g*g*gg*g*g*g**g*g*g*g**g*g*g*gg*g*g*gg*g*g*g**g*g*g*g**g*g*g*gg*g*g*gg*g*g*g**g*g*g*g**g*g*g* \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/0cec22cd429b9a959bf494ddec012b8702cd79c8 b/fuzz/corpora/asn1parse/0cec22cd429b9a959bf494ddec012b8702cd79c8 new file mode 100644 index 0000000000000000000000000000000000000000..d331aadaf6dbb7e4c1b50a510d657a6b88cb1a49 GIT binary patch literal 192 hcmbRLsdqjj!+dOHI|FucO!dU5L{@`~jo)Ofx&S;ER`~z` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0d2043e01decb4f401b9b6a4be2bdad7aab1df67 b/fuzz/corpora/asn1parse/0d2043e01decb4f401b9b6a4be2bdad7aab1df67 new file mode 100644 index 0000000000000000000000000000000000000000..d54c2dca574e8c2e602e396f0d2858e02544e3f4 GIT binary patch literal 16 Lcmb1RkVAn02!H_b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0e470c12f319db0f6e9636ab453f96fb6aabfe5b b/fuzz/corpora/asn1parse/0e470c12f319db0f6e9636ab453f96fb6aabfe5b new file mode 100644 index 0000000000000000000000000000000000000000..c80c7ccee67e2eec54fe7da7b0cabf0decd90d1e GIT binary patch literal 393 dcmZQ+WMIKS7y_6|C={W+4a7T;8g8N73;^r%M2P?Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0e7b086e1626ef5e27bb16811161b8d99819098d b/fuzz/corpora/asn1parse/0e7b086e1626ef5e27bb16811161b8d99819098d new file mode 100644 index 0000000000000000000000000000000000000000..76f18477eb442663d1113d30c976deb6899c75f1 GIT binary patch literal 64 bcmXqLFaSdaFfeFfU;y!9JbZE>l?)63iO&lG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0ea2009e2bd0321dcc2449544013582707d86530 b/fuzz/corpora/asn1parse/0ea2009e2bd0321dcc2449544013582707d86530 new file mode 100644 index 0000000000000000000000000000000000000000..6bc079d4a3566709c915d84dd08769600f977d33 GIT binary patch literal 32 Lcmd;K;K2(44B!C4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0f47fd5ad953119e91b80007d0b6aa7a4c9e112d b/fuzz/corpora/asn1parse/0f47fd5ad953119e91b80007d0b6aa7a4c9e112d new file mode 100644 index 00000000..5c76e11e --- /dev/null +++ b/fuzz/corpora/asn1parse/0f47fd5ad953119e91b80007d0b6aa7a4c9e112d @@ -0,0 +1 @@ +€…€…€…ÿ€ÿ€…€…€…€…ÿ€ÿ€…€…ÿ€ÿ€€€…ÿ€ÿ€…€…ÿ…€…€…ÿ€ÿ€…€…€…€…ÿ€ÿ€…€…ÿ€ÿ€€€…ÿ€ÿ€…€…ÿ€ÿ€…ÿ€ÿ€ÿ€…ÿ!'…ÿ€ÿ€€€…ÿ€ÿ€…€…ÿ…€…€…ÿ€ÿ€…€…€…€…ÿ€ÿ€…€…ÿ€ÿ€€€…ÿ€ÿ€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/0fa29b8c8a5d796e8c14294cebced3c4ed040002 b/fuzz/corpora/asn1parse/0fa29b8c8a5d796e8c14294cebced3c4ed040002 new file mode 100644 index 0000000000000000000000000000000000000000..0cd8b411731870b2f4717bb5af4196b50b2aa506 GIT binary patch literal 6 Ncmd;K;9=ll0001%03`qb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/0fc2c5ff9021ec84c40d59c2a148bbd40a25b535 b/fuzz/corpora/asn1parse/0fc2c5ff9021ec84c40d59c2a148bbd40a25b535 new file mode 100644 index 0000000000000000000000000000000000000000..56a9d388cf82623394eb27bfe6c710e055a5106c GIT binary patch literal 525 zcmdOE&_jaSNNhbc9wwiGfq?;`8&xk%HAobsuKxf3|G3m*>SP9KK`|X>9?T4wxs(8i PSrFS{<_$)7(hUFrTxMO# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/101b080c53aa70f240d6233dc6a3f70ad716476a b/fuzz/corpora/asn1parse/101b080c53aa70f240d6233dc6a3f70ad716476a new file mode 100644 index 0000000000000000000000000000000000000000..74d4bf1404da019c442117485817f0db3895e3ea GIT binary patch literal 834 zcmZoLWYTMZVciDZh6ddRYc^(AIH8G!g^&faMwK837$R^+!)2(2i-8a$24ZVuU}FFg Y5X8X7AR@Bm=l>u7xo3R;#Kyo00HR;1+yDRo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1090de62d272a459dc32182669f19c7aaaf90308 b/fuzz/corpora/asn1parse/1090de62d272a459dc32182669f19c7aaaf90308 new file mode 100644 index 0000000000000000000000000000000000000000..4b82f7a8afeaf623e9a04a56a99bd50eae82f2f4 GIT binary patch literal 72 OcmZQM%0LCcXaE2>JplUv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/10c2d9e5bd5bbe06f3c97df8e45acd481d8890ab b/fuzz/corpora/asn1parse/10c2d9e5bd5bbe06f3c97df8e45acd481d8890ab new file mode 100644 index 00000000..5e610032 --- /dev/null +++ b/fuzz/corpora/asn1parse/10c2d9e5bd5bbe06f3c97df8e45acd481d8890ab @@ -0,0 +1 @@ +€L€L€L€L \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/11c211cd3ff146a1ccdb70a9db6a56aa6c457125 b/fuzz/corpora/asn1parse/11c211cd3ff146a1ccdb70a9db6a56aa6c457125 new file mode 100644 index 0000000000000000000000000000000000000000..635a38328a40de36df75f7901495ea6f38f79b6c GIT binary patch literal 616 zcmZQloPO%l^i!qNPkqv`;#Rj}W7TS9o?ipvd}3n#&%iJrLe-)07#QmR!{q82>J*Sw zLNwfhY9PV@1~dbZ4TsAy{71F}Vz>gxDuxDDm=lR|F5E<@E{dHCvwbvx5OIx?AnFwu G7#IN6N7b$X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/11fdd5d39665523858f572af4447020c9426026e b/fuzz/corpora/asn1parse/11fdd5d39665523858f572af4447020c9426026e new file mode 100644 index 0000000000000000000000000000000000000000..e34562fd7ab35d45b92db5404e5ce9ae5658863c GIT binary patch literal 57 VcmZQ;WMD%@>l;w{?C1(0>H$IL3ab@?Vkx011Bri~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/14178e220b4925574ab240e3d0c552ec05ec6e79 b/fuzz/corpora/asn1parse/14178e220b4925574ab240e3d0c552ec05ec6e79 new file mode 100644 index 0000000000000000000000000000000000000000..6948fc64e8a1ff9c4ddba15033890209db78b12b GIT binary patch literal 11 OcmZQ$%oSk(gW~`NlL1fw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/14264018e6bc72fada2b7a28940b79b3412fce45 b/fuzz/corpora/asn1parse/14264018e6bc72fada2b7a28940b79b3412fce45 new file mode 100644 index 0000000000000000000000000000000000000000..84d1723e520b41bbd3822e4204a87963d32cd406 GIT binary patch literal 233 zcmZQ#>R!Z_nVI?je@g=*@3fuz)W~pf)8`4Y?;f4bM9dd`F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/150d0a3ff583c87157e360f146ea3337a413c0b6 b/fuzz/corpora/asn1parse/150d0a3ff583c87157e360f146ea3337a413c0b6 new file mode 100644 index 00000000..2129dc14 --- /dev/null +++ b/fuzz/corpora/asn1parse/150d0a3ff583c87157e360f146ea3337a413c0b6 @@ -0,0 +1,133 @@ + +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô +ô + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/15aacc4eab5317c589ec69dcd2be6fd15e5c8551 b/fuzz/corpora/asn1parse/15aacc4eab5317c589ec69dcd2be6fd15e5c8551 new file mode 100644 index 00000000..af88aefc --- /dev/null +++ b/fuzz/corpora/asn1parse/15aacc4eab5317c589ec69dcd2be6fd15e5c8551 @@ -0,0 +1 @@ +€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L€L \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/15cf0992b80220d4b964146ce7e6984d2523ab36 b/fuzz/corpora/asn1parse/15cf0992b80220d4b964146ce7e6984d2523ab36 new file mode 100644 index 0000000000000000000000000000000000000000..778552aec8616a67d7a89272d6000cdf56d679a9 GIT binary patch literal 32 Lcmb1Rki!cBAOHd3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/16185292e20e301c45f78d6f5d37f27772b683b0 b/fuzz/corpora/asn1parse/16185292e20e301c45f78d6f5d37f27772b683b0 new file mode 100644 index 0000000000000000000000000000000000000000..1afcad089190162ae1332ca9ac60b578d051a2e6 GIT binary patch literal 128 icmXqLFhGI~U|`U|zyK13@gOQ-JXARl4}w8}be#Yd+7)hz5xO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1663698a71a4260c6e1e462df5c191a1a1154853 b/fuzz/corpora/asn1parse/1663698a71a4260c6e1e462df5c191a1a1154853 new file mode 100644 index 0000000000000000000000000000000000000000..b7088870ebe38af9780171645e316768e80585d8 GIT binary patch literal 139 acmb1QkOISc11JN+C5Nmx&>&tL7W)8gRS3`k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/16d9ac16bd611de5f8f6d74d322290954abf00f1 b/fuzz/corpora/asn1parse/16d9ac16bd611de5f8f6d74d322290954abf00f1 new file mode 100644 index 0000000000000000000000000000000000000000..4d951ad65c6570b607c26724adbd3791be52566e GIT binary patch literal 513 zcmchTF-rq66vxv$4HR)aaPv0h@Dp^p592p*xU~hZh$Y*D;1oEDhzNx{Py7NZ1jjc^ z&3+v+6qLY|Qfl!*V`C^Eh6@qV=dp7RvHX_r?N?j1 zp2172d3tq}2<3VJt^sZ!@HkL5K93)iWf5b}nVzMopS2LbpWgaE%F}rXcK~pC3t)U0 z!2N|kr51HvANszcC`{&yrRiwZb&z6Uoa1XcrPZwD3Fk?cNX@lS)3XK{!zVUXOtM0rhtoiurQKMn#z ALI3~& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1733c79af429cbffd01200bdde46c4ccc03c3c0e b/fuzz/corpora/asn1parse/1733c79af429cbffd01200bdde46c4ccc03c3c0e new file mode 100644 index 00000000..f0077ac2 --- /dev/null +++ b/fuzz/corpora/asn1parse/1733c79af429cbffd01200bdde46c4ccc03c3c0e @@ -0,0 +1,3 @@ + +‚€€€€€€€€P +‚€€€€€€€€P \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/17ec9059cd9e1778bfb06c6c005ea0d204ad27e5 b/fuzz/corpora/asn1parse/17ec9059cd9e1778bfb06c6c005ea0d204ad27e5 new file mode 100644 index 0000000000000000000000000000000000000000..959eee1910720de71e3db8881bc210054b6063f8 GIT binary patch literal 418 jcmZSMZfbx6DF?P8&tbsn1>7ZuGrt~nF+yVll?itN1 J$beSq0RS8tgggKM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/183cf7aca8abce004de72455b4080d4082410949 b/fuzz/corpora/asn1parse/183cf7aca8abce004de72455b4080d4082410949 new file mode 100644 index 0000000000000000000000000000000000000000..f5a4243e88d056f0f2a9184977f45281593d10f2 GIT binary patch literal 70 acmZQ#U}9ilV1biN3``7~XnbT@>~a7ZJ^-@- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1858b2325be8da41d5ea9885ff3c4766d414100f b/fuzz/corpora/asn1parse/1858b2325be8da41d5ea9885ff3c4766d414100f new file mode 100644 index 0000000000000000000000000000000000000000..c5ec0dcf0f09552f35e5eb90ab5c096bf6a2682f GIT binary patch literal 20 NcmZRX$bbeI8vqNb0T%!O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1ad3e86ecda8ff0c2fbafff71f105375b69f99ab b/fuzz/corpora/asn1parse/1ad3e86ecda8ff0c2fbafff71f105375b69f99ab new file mode 100644 index 00000000..f43b4740 --- /dev/null +++ b/fuzz/corpora/asn1parse/1ad3e86ecda8ff0c2fbafff71f105375b69f99ab @@ -0,0 +1 @@ +" \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/1b77aeeafafecce3ae280f6738befef72a38fc18 b/fuzz/corpora/asn1parse/1b77aeeafafecce3ae280f6738befef72a38fc18 new file mode 100644 index 0000000000000000000000000000000000000000..c946857a62535a87c2a54b29adaf8aa14b63ba9f GIT binary patch literal 12 Pcmd;Kux?;vVgzFV3X%cP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1be1a68fc70b531d7fcce40ad4476bb240aa0251 b/fuzz/corpora/asn1parse/1be1a68fc70b531d7fcce40ad4476bb240aa0251 new file mode 100644 index 0000000000000000000000000000000000000000..99bb9f4b3b941baf127cf8c1c6b2edd7854f3409 GIT binary patch literal 6328 zcmeHLX;f3!7S6r72?zukVq_=~P%H#UPM8b`TBXXM#(|<15gTp-TuE|61_gW|ToH^# z1r($fpC~vK1jnjXM6fD~iWbG(wj4BDdAYT>OLh6Y~W>Yx63Ynfl?+jpOH_Sxrr zJ9}?HSRH{O2!^Rt1g_;FY;HjoP$sS3a{p;Gs$uvqewOdOF_kVBtM+z5x4t{wgMj3F z2j5hyii))Jgd@WFmcX0@MwUjwI36dJutVi2-x-V}g;dLrhJ z{a6Oym(S+|zK^#r@QWPF;7d)S41} z7wT32{;yfCuTKR`t4gH?6z_fSw|K`&PC$6}t$kIQ4UN`TPqVQ5TDx6=4S5zX`Y2Ck z7G6)o-30EBh*vw~P&C%?Q$@_T^R=cEAGW6&#yccdye%l}d%VeM+Rb$-tG=; zpPLOK**lZh^lq-ot~hd;+9}SrmNIs}b>)Bm(*jPLC?LvujpEhh!tJ}a2b`;;3u+pV z*lTj8_U%7?;n5}c@<#=0_kL_P%Q(z{(Ml6J_a+8h$JZU{?w-(d=3jL?#w`t9^Cs%? zp{xj)3Q?d^0yzN)DDkFlygy$ zK9CZoe}2Kan0z>1rWlSj3B+hUeHmAz94XL@5X6ksK=Bb8vZN6L^~fp9<$5-YC3--j z(gU$dJrJ+a1DIM5$fbHfF$}0lr}n>kkyxa_`kgm)NEJ_d0}d8DYfX#w}O#b&CCCPu-Zw;mRaxC58^uHsNqJN;Dpm z>vYUWBpq?{$+$+XiII57aTLcBuzsr;oI$y6B5Mdr#2Qqj#_;|HjXB(8H71MGDcKA? zKPe`Wt5y2@7!Q5JWrVF*vRop?6%yspiye#^asnY2Bj|BB&W)22%>EA}-lfr?IxZtD z`p3h3YOTPf7@EwLsYM>D;f5ILxx;A1iWTI}O!J$)wJ-Mh-t)~nPDGzvzuRjAvRf_(QV2ZF1 zX1GaJ_bWwY=o6*iWM_*{$NV<=k4#`f1_Vn8>O){a0S+V@hgbntIy3AZon>47I{w?` zuQHCFjIlWpnZW~&qyihU0an0-ZsbOX5a?zyOoMLl2OL3O)wTCF4pQ zhfMq*=aK5icVk_AhbW@T==<}<-%iT?{?v5)15Yg%yDZFP=6K6bdd4|E73Qp4QJ%e~ z#eZr-KK*@fuB5(9VD$XXp>ytC-&HpD*0>#7`F&GeR8>RwWwVPF=d?J_aver5$j=$CeKO|Y=d4L(D-MSi+9e8S8>i7> z#c2DqJEfZAey`6tah|LR3p!qAQ?$r`|4UOli{l^va`ot#^2#fxpZRkio9y{rbfC1# z31Oo?bqPmS7Zz#Vi{}vrKiE3dJql#YZRSN^Y@YM=vy1r$sSwn6hzdh?hl$a#ACjAa z6z)TE^C7uGKO{H9{)j&$H)J|Kn5}$BZpb>8B*};5=KnXj0R;60AmEn%ZUzV=BTGiG1piE_QK`vR2A6LOtowTz7DMu2DIOz|vV*4TIv75{8}Nbdr|V$w zJ-zszUOs+4ev$uVv*hoZ6vZ55MO4e&Jb!vAald75NVRs#OKXMA+8Js0H=cW`ZFKC4 z>=iMNd48%bQ5%QPi70C%VhXyRf4=nm16sPp+33wvsuza{dcuDj-~KM|>6o)ud%_t# zVehwp)|y&Vl7MH|UYqOS0;r$dHdM`%uIlp-*fWv7;nYlXXzw)Nir{3pPS+ICcL2LQF@r!c}~ZP zEo}38zpu=Yk{6DD_RiEiS!+M>-2M$ptiMT-@fc*Z4J$EfQ;Oo(Yu{DS#3tsc<*Ab64VQ&_ z1gDRyeUYt5k_rSQQQVPbB)7Xd^Fdb104R6a) z$v%~#5ZRNy%8V5h4Ojj+ExqT!hNh~+&&^YFGp$k|=Z<+7x@zxNw7iok7jFhkv>LVb zXnj80z{hJ;n+vLB9J%jVoLzL*cDXjLZtkK3mgSZ@p3N* zo5w1c`AusmQER5?asRcWdi?ln!hO4LMcd2r>-Ovm@yU4mb6c?lyOLctb?y}I!d-du zEEbvOjM}j;rOaa2$G>hh+maeVrT-SYXz5b%gNh}xU49{&qFJty{_C&1H55l6r+eC& z&FT9lbdJ^T-Xx7GyL|jb><00p)U6LGhePYzjLPpVUR|%qogu8bcIWd#Dfbo2w>9xH zbjG62@jMIYT265L0Ou`Ew(EO|Mxy}XaL$|QZW=MNG?<>K!D2;8d=KD8vfbEn{D6cV zE{f8|E0FTeUMvS1K>$oxT|1cIDcZ$;A`Imw#$pZJpR4Y`@XG@*C?b5v>`-2^A>+9K*@zDl$``zs~e&P4< zci(VJzZ=mL-0lSKWuEeUZbfyOk0kzF;T8BmaMHjxGp0EC84L6*t#x~nn9%lifcP&! zM&~f%hqTAPb!$3Q@MCbxIJVgwucF-TH}r`AmvLeA5OHaMtRMd?68QJC*bDFhuf(Io zEz5O)#VFaalHh9ckK<1&t8|YC73ruf?5A=tm=1#INQ51m0ww{!!B7H2EDv%ml|PTC z>-gv|rj)2~jS`ipcuI)^S7B;gnLOfcQ!_Fs%O6`0!}|KfwAijQ zoi`>q^u2g-L3lGraNs+TYIQAQ_0DCNe9eoWgv6H0Rvovz5#0M_WR&WC)h%03YeB^p zZ)SO6)AQ1gn1-Q8PyU?Oz1sJ=-2%MfcC`x4ZCkZ+veTtNgU+P_b@3zWT;Y!WMO~s_ IGN)Ml2l<`o#{d8T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/1c36ca01e596c3185da92ced0fd2bd3190d239af b/fuzz/corpora/asn1parse/1c36ca01e596c3185da92ced0fd2bd3190d239af new file mode 100644 index 00000000..a0744189 --- /dev/null +++ b/fuzz/corpora/asn1parse/1c36ca01e596c3185da92ced0fd2bd3190d239af @@ -0,0 +1 @@ +Ÿò \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/1c3d8e2d2ba8742ca4ced115e07bb21bb7e23f78 b/fuzz/corpora/asn1parse/1c3d8e2d2ba8742ca4ced115e07bb21bb7e23f78 new file mode 100644 index 0000000000000000000000000000000000000000..e83b11cfb654ea1ada0bed633c0a8fb16b325560 GIT binary patch literal 19 WcmZQ;WMFG#Sl_?~p&3ujmuCAp$N87eugx5lk>EGc%JjGZVrF0H13FVE_OC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/203c349f5066f5f0f106a9d47192879fdc184381 b/fuzz/corpora/asn1parse/203c349f5066f5f0f106a9d47192879fdc184381 new file mode 100644 index 0000000000000000000000000000000000000000..c5778497699a35acb53eeb8247765e3077c62bf5 GIT binary patch literal 10 RcmZQ#VqjuoU}7*Z0002u0BZmM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/228bd7fc3c556bc1078aae442034326569ca64cd b/fuzz/corpora/asn1parse/228bd7fc3c556bc1078aae442034326569ca64cd new file mode 100644 index 0000000000000000000000000000000000000000..0f5cb02d2b3d9cd76e0441c167b0ade01a81b7df GIT binary patch literal 2187 zcmXqLU}9u4XfSACVlptWXJKGqpdr)gzX7EHzZ0ow0TqqH9=-}*i33)GA&Q~|g@aQ)*kEmjP!IzE<(3g& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/23ef60aa467187311cbb67995b41189bf548fee2 b/fuzz/corpora/asn1parse/23ef60aa467187311cbb67995b41189bf548fee2 new file mode 100644 index 00000000..4a53a4ad --- /dev/null +++ b/fuzz/corpora/asn1parse/23ef60aa467187311cbb67995b41189bf548fee2 @@ -0,0 +1 @@ +                                            ø                                                                                                      \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/23f8277ca929ab2bcdb7fb12677e24017796caa4 b/fuzz/corpora/asn1parse/23f8277ca929ab2bcdb7fb12677e24017796caa4 new file mode 100644 index 0000000000000000000000000000000000000000..ff7cc297bdd7b4e9cac7c9cf3382fa4a44cfd8ac GIT binary patch literal 8 Lcmb1RkOM;i0$>1n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/240992d25353c30f3be23ff8c87300aee40078d4 b/fuzz/corpora/asn1parse/240992d25353c30f3be23ff8c87300aee40078d4 new file mode 100644 index 0000000000000000000000000000000000000000..ab3bd75d82b6f616b142f52972cca0c9a57a59a6 GIT binary patch literal 11 McmdPoWPk!w00LbAXaE2J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/244014f63a27bb88df542a0b7d7baabca836d107 b/fuzz/corpora/asn1parse/244014f63a27bb88df542a0b7d7baabca836d107 new file mode 100644 index 0000000000000000000000000000000000000000..024da5e7891ddf6714a67ebd0071f397b5e071a7 GIT binary patch literal 16 LcmWe;5JrIj1!w@7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/246b2a1cc0b64457e4aa45264743a1f496570faa b/fuzz/corpora/asn1parse/246b2a1cc0b64457e4aa45264743a1f496570faa new file mode 100644 index 0000000000000000000000000000000000000000..16b7542d377f562bfe036d44fbcdcc2452b06d91 GIT binary patch literal 120 jcmd;L+5C9UzuN%KC!fa%9h7I;m N8<9oP+}=dIPXIgDJOls$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/25d08dde1611ba0e3ef4acd7255a53c2935b991f b/fuzz/corpora/asn1parse/25d08dde1611ba0e3ef4acd7255a53c2935b991f new file mode 100644 index 0000000000000000000000000000000000000000..da0fbe354536b75781f9df53f6e15c2a71876cd5 GIT binary patch literal 258 McmWe(5E?ayD5(5-b6qTd!a02e>KQ*Us`P6XiS_1NP<^TZZI#SO7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/285523449bb3b9623944ed4fe78c9d73138d0828 b/fuzz/corpora/asn1parse/285523449bb3b9623944ed4fe78c9d73138d0828 new file mode 100644 index 00000000..5c6a1e5e --- /dev/null +++ b/fuzz/corpora/asn1parse/285523449bb3b9623944ed4fe78c9d73138d0828 @@ -0,0 +1,4 @@ + + + + diff --git a/fuzz/corpora/asn1parse/288fb2d6f42b5e13dabc1545d5ffa3cf11daf59c b/fuzz/corpora/asn1parse/288fb2d6f42b5e13dabc1545d5ffa3cf11daf59c new file mode 100644 index 00000000..7ab00a57 --- /dev/null +++ b/fuzz/corpora/asn1parse/288fb2d6f42b5e13dabc1545d5ffa3cf11daf59c @@ -0,0 +1 @@ +€L€L€L \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/28b35080aada64c7f80b529f7ac4f3a6a69eb5b9 b/fuzz/corpora/asn1parse/28b35080aada64c7f80b529f7ac4f3a6a69eb5b9 new file mode 100644 index 00000000..d757fe4e --- /dev/null +++ b/fuzz/corpora/asn1parse/28b35080aada64c7f80b529f7ac4f3a6a69eb5b9 @@ -0,0 +1 @@ +uuuÁ0uuu00r0000í0îíŸòžò´íò0—Êâ0ííÑÕ²²²Éâ0âââââââââ0âÿÑÕ²²²Éâ0âââââ‰âââ0âÿàâ²²²Éâ0ââââííÑÕ²²²Éâ0âââââââââ0ŸòŸò´ââÿà0òâ0uuÁ0uuu00r0000í0îíŸòžò´íò0—Êâ0ííÑÕ²²²Éâ0âââââââââ0âÿÑÕ²²²Éâ0âââââ‰âââ0âÿàâ²²²Éâ0ââââííÑÕ²²²Éâ0âââââââââ0ŸòŸò´ââÿà0òâ0uuuÁ0uuu00r0000í0îíŸòžò´íò0—Êâ0ííÑÕ²²²Éâ0âââââââââ0âÿÑÕ²²²Éâ0âââââ‰âââ0âÿàâ²²²Éâ0ââââííÑÕ²²²Éâ0âââââââââ0ŸòŸò´ââÿà0òâ0uuÁ0uuu00r0000í0îíŸòžò´íò0—Êâ0ííÑÕ²²²Éâ0âââââââââ0âÿÑÕ²²²Éâ0âââââ‰âââ0âÿàâ²²²Éâ0ââââííÑÕ²²²Éâ0âââââââââ0ŸòŸò´ââÿà0òâ0 \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/28eff8af2a3af2d37106441bb97cfc41561b1a46 b/fuzz/corpora/asn1parse/28eff8af2a3af2d37106441bb97cfc41561b1a46 new file mode 100644 index 00000000..597cd85d --- /dev/null +++ b/fuzz/corpora/asn1parse/28eff8af2a3af2d37106441bb97cfc41561b1a46 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/299a6b9779874a3608c556125fb4ce246f4664bd b/fuzz/corpora/asn1parse/299a6b9779874a3608c556125fb4ce246f4664bd new file mode 100644 index 0000000000000000000000000000000000000000..421d9b4f6bc89a805eb28d329526e682c649116f GIT binary patch literal 1112 zcmXqLU}9u4XfSACVlptWXJKGqpdr)gzX7EHzZ0ow0ac8m$hTO$N)<=pi(@KUKt-dl PCrv6^Kt-cQ-3kT(pG(GM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/29fe2d690007f9c5ff5524fa244ff548ba18fa56 b/fuzz/corpora/asn1parse/29fe2d690007f9c5ff5524fa244ff548ba18fa56 new file mode 100644 index 0000000000000000000000000000000000000000..6a7595e3c08c3e64a1a1fec8fbed898555703163 GIT binary patch literal 74 zcmZQmXW&s_00Y_Sr+VjqI{0bJskd+6K70H2?fbWH-+q1j_U)(EhwHf6WNQze>Ye@x IhxDUI04cpOiU0rr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/2af6d48d5724ade9d67c520d9d80b15ecef89eea b/fuzz/corpora/asn1parse/2af6d48d5724ade9d67c520d9d80b15ecef89eea new file mode 100644 index 00000000..97aed036 --- /dev/null +++ b/fuzz/corpora/asn1parse/2af6d48d5724ade9d67c520d9d80b15ecef89eea @@ -0,0 +1 @@ +€…€…ÿ€ÿ€…€…ÿ€ÿ€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/2c888728504e1020a84f3c62544fe6b9b4c206d8 b/fuzz/corpora/asn1parse/2c888728504e1020a84f3c62544fe6b9b4c206d8 new file mode 100644 index 0000000000000000000000000000000000000000..fc76c36605b569a9a0301fb3725a679c514b32e1 GIT binary patch literal 867 zcmZS6n(_V9^esRC|M<@hXPsfgCaQ>4loYj!+|#>0Vc3SVvhin$m;2u*RO`jMbfRPspAo&N(;o|-N2`V}rOalOCw+^lV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/2ca23ef1923e1a8c2b35d6bc2fffc7bb0a27553e b/fuzz/corpora/asn1parse/2ca23ef1923e1a8c2b35d6bc2fffc7bb0a27553e new file mode 100644 index 0000000000000000000000000000000000000000..f125b22730e19e033bbff01fe1e9e8f400d1c535 GIT binary patch literal 16 LcmWe)5JG_f1t0*C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/2cb483571a342ad76d560dd7fd89b830e52fa586 b/fuzz/corpora/asn1parse/2cb483571a342ad76d560dd7fd89b830e52fa586 new file mode 100644 index 00000000..0c3c23a6 --- /dev/null +++ b/fuzz/corpora/asn1parse/2cb483571a342ad76d560dd7fd89b830e52fa586 @@ -0,0 +1 @@ +        \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/2cb9dccdf0971fd12ee2284ac0a3cab352767d7b b/fuzz/corpora/asn1parse/2cb9dccdf0971fd12ee2284ac0a3cab352767d7b new file mode 100644 index 00000000..b3380098 --- /dev/null +++ b/fuzz/corpora/asn1parse/2cb9dccdf0971fd12ee2284ac0a3cab352767d7b @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + +½ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/2d763c7cc738acf8f51ebcbb2fa026885a9aeed6 b/fuzz/corpora/asn1parse/2d763c7cc738acf8f51ebcbb2fa026885a9aeed6 new file mode 100644 index 0000000000000000000000000000000000000000..83876f249a142518e30b69340ecf6d150b9e3ff2 GIT binary patch literal 42 UcmZQ!V1dGia28AinKqaM03-GR`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/2dcf9ab1b7d6eb16debcd7b0385093c550f2f64b b/fuzz/corpora/asn1parse/2dcf9ab1b7d6eb16debcd7b0385093c550f2f64b new file mode 100644 index 00000000..dd91076b --- /dev/null +++ b/fuzz/corpora/asn1parse/2dcf9ab1b7d6eb16debcd7b0385093c550f2f64b @@ -0,0 +1 @@ ++ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/2efe7c4e6f5f0469002dd6664a0ccbf713c788b1 b/fuzz/corpora/asn1parse/2efe7c4e6f5f0469002dd6664a0ccbf713c788b1 new file mode 100644 index 0000000000000000000000000000000000000000..113789ff74b9361e7ed13d8be28c5523446e4be9 GIT binary patch literal 303 vcmZSc_>ThkQF#CVt23YpXq;zbW-ve%WaMOnph0OEBbx^sCnu_l$@L}xA4cwX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/2f8b85b5a012f9799871733b6e9232fd3b34ab2b b/fuzz/corpora/asn1parse/2f8b85b5a012f9799871733b6e9232fd3b34ab2b new file mode 100644 index 00000000..fb812cb8 --- /dev/null +++ b/fuzz/corpora/asn1parse/2f8b85b5a012f9799871733b6e9232fd3b34ab2b @@ -0,0 +1 @@ +llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllldlllllllllllllllllllllllllllllllllllll \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/30128c634626e0fd05899ec1021145bd08b06ccb b/fuzz/corpora/asn1parse/30128c634626e0fd05899ec1021145bd08b06ccb new file mode 100644 index 00000000..f39a621f --- /dev/null +++ b/fuzz/corpora/asn1parse/30128c634626e0fd05899ec1021145bd08b06ccb @@ -0,0 +1 @@ +ããã \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/3118a1578c5cd859a682d3703c98301203d9e668 b/fuzz/corpora/asn1parse/3118a1578c5cd859a682d3703c98301203d9e668 new file mode 100644 index 00000000..efc0395a --- /dev/null +++ b/fuzz/corpora/asn1parse/3118a1578c5cd859a682d3703c98301203d9e668 @@ -0,0 +1 @@ +.€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/314e6b07223dd6ae8726c3d81c21d78e81f53e7a b/fuzz/corpora/asn1parse/314e6b07223dd6ae8726c3d81c21d78e81f53e7a new file mode 100644 index 0000000000000000000000000000000000000000..ebd4858e15f41a041c2de019e906b76c8c4f7d8f GIT binary patch literal 286 qcmZQ%V8jC*aLQqmVMS7nO&-%G+^Vq25NAFioe)i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/316aa29834e662b4ea0a4997518442bbd0c8dd51 b/fuzz/corpora/asn1parse/316aa29834e662b4ea0a4997518442bbd0c8dd51 new file mode 100644 index 0000000000000000000000000000000000000000..765b1f4ae90ed039ea281c1746a133b6971cd6b6 GIT binary patch literal 72 zcmXqLFlaDnU}MxyVPIe|XfT9u3>X*~6u=}{j!~Nd!O{Q!|2G2zM4{F`1`sf0GXMbh C`VGGT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/319ed82f19a1179468a07bab84b054538b6df935 b/fuzz/corpora/asn1parse/319ed82f19a1179468a07bab84b054538b6df935 new file mode 100644 index 00000000..34ea537c --- /dev/null +++ b/fuzz/corpora/asn1parse/319ed82f19a1179468a07bab84b054538b6df935 @@ -0,0 +1 @@ +0€0€0€0€0€0€0€0€1€0€0€0€0€0€0€0€0€0€0€0€0€0€0€1€0€0€0€0€0€0€0€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/32cd2f645c6cf679a28c40f2a0322a66ea3532c9 b/fuzz/corpora/asn1parse/32cd2f645c6cf679a28c40f2a0322a66ea3532c9 new file mode 100644 index 00000000..a843437a --- /dev/null +++ b/fuzz/corpora/asn1parse/32cd2f645c6cf679a28c40f2a0322a66ea3532c9 @@ -0,0 +1 @@ +€L€LL \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/33fdc0dd795715ca62141df1e7aa35e25a3a077f b/fuzz/corpora/asn1parse/33fdc0dd795715ca62141df1e7aa35e25a3a077f new file mode 100644 index 0000000000000000000000000000000000000000..8a1e0588f6129db6379a920e03df71532789ee0f GIT binary patch literal 74 ycmZQm{{R2~r~jW};Q!~(R$Bl6M=>xkFns?1|KtD9pBdHI&=r09uL#zFtOx)R&o+_( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/34601365e3f3937ec930766761bb22e74e8b752d b/fuzz/corpora/asn1parse/34601365e3f3937ec930766761bb22e74e8b752d new file mode 100644 index 0000000000000000000000000000000000000000..aa4c178ba45e0323c572417a66eba25d125a6d54 GIT binary patch literal 179 bcmd;L;35I)G+2|MniP`>tL0|kf+zw2styEM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/35182f40f5ee4e123a2048cd884c953b960a3ee9 b/fuzz/corpora/asn1parse/35182f40f5ee4e123a2048cd884c953b960a3ee9 new file mode 100644 index 0000000000000000000000000000000000000000..3c891a69e70a3a0b112c9f7c35ea843535193b86 GIT binary patch literal 16 RcmZSMZfbx6DF-PADF84V1tI_d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/37e03835331f62cdb08fbb1e79ae552e49cdbb41 b/fuzz/corpora/asn1parse/37e03835331f62cdb08fbb1e79ae552e49cdbb41 new file mode 100644 index 00000000..6d01b3d8 --- /dev/null +++ b/fuzz/corpora/asn1parse/37e03835331f62cdb08fbb1e79ae552e49cdbb41 @@ -0,0 +1,4 @@ + +ô +ô +ô \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/38169f4274b5f2fd6fd64a61667e19dbd89c6a4f b/fuzz/corpora/asn1parse/38169f4274b5f2fd6fd64a61667e19dbd89c6a4f new file mode 100644 index 0000000000000000000000000000000000000000..4a08ea9cfee14525087580f93d4c976dde857530 GIT binary patch literal 16 LcmWe*5JQ0g20#F@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/389c77c1758dd5cb487f838c77798f9d4b3e6163 b/fuzz/corpora/asn1parse/389c77c1758dd5cb487f838c77798f9d4b3e6163 new file mode 100644 index 0000000000000000000000000000000000000000..7650123f7f152a82ed3a1485c7dbd2114bab7a8a GIT binary patch literal 512 zcmd^+ze)o^5XRR#T#(pa?R84<2~yp|_y#Gi2@=6eVc2e9Nwp9{5D5r(B0hn_)KgiA zZhtAZuo@V-T||6_{E8Xo4~z5jlYrnrY!IKe*jv9{kL}g^lkS-R_;dUPRULgRA;{^xWGM^?M5_HeH80PGmS+F} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/399bb9e9f859fdb16cd3daf233ea43359a65864c b/fuzz/corpora/asn1parse/399bb9e9f859fdb16cd3daf233ea43359a65864c new file mode 100644 index 00000000..388d2ad2 --- /dev/null +++ b/fuzz/corpora/asn1parse/399bb9e9f859fdb16cd3daf233ea43359a65864c @@ -0,0 +1 @@ +0'0€0€'0€0'0€0€'0€'0€0€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/3a1c56172ee7c631095508f201fe2574646cdcdf b/fuzz/corpora/asn1parse/3a1c56172ee7c631095508f201fe2574646cdcdf new file mode 100644 index 0000000000000000000000000000000000000000..e0477bef904adc56989563d503d80c39b5e960ee GIT binary patch literal 11 ScmZSM_}|db(D1)LnE?PC(**AT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/3b31a275b830169efdc57a003b1facea1033e8ca b/fuzz/corpora/asn1parse/3b31a275b830169efdc57a003b1facea1033e8ca new file mode 100644 index 00000000..b4266285 --- /dev/null +++ b/fuzz/corpora/asn1parse/3b31a275b830169efdc57a003b1facea1033e8ca @@ -0,0 +1 @@ +  \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/3c2e6c4e73a460f20264f3f7388690ff7291594c b/fuzz/corpora/asn1parse/3c2e6c4e73a460f20264f3f7388690ff7291594c new file mode 100644 index 0000000000000000000000000000000000000000..fda4e6b8d5374d07a65a26cecdc28ec0b771a79b GIT binary patch literal 256 McmWe)5E{`C0E#>b0RR91 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/3c7e8779a61a7d797d8f30f2b2e00c0b6d954a33 b/fuzz/corpora/asn1parse/3c7e8779a61a7d797d8f30f2b2e00c0b6d954a33 new file mode 100644 index 00000000..e55f10e6 --- /dev/null +++ b/fuzz/corpora/asn1parse/3c7e8779a61a7d797d8f30f2b2e00c0b6d954a33 @@ -0,0 +1 @@ +ÿSÿSÿSÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿSÿSÿSÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿSÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿÿÿÿSÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/3c8eeacf5a807bb9073dea87d9c42e5e7461e3a0 b/fuzz/corpora/asn1parse/3c8eeacf5a807bb9073dea87d9c42e5e7461e3a0 new file mode 100644 index 0000000000000000000000000000000000000000..ea4f74c2969a798610110837bd494756c0075cd2 GIT binary patch literal 15 TcmZQ#`p>|`#Kgb^rvC!~6P5!I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/3cd82f1bf0b7d07687c40953749543e1a12d95c9 b/fuzz/corpora/asn1parse/3cd82f1bf0b7d07687c40953749543e1a12d95c9 new file mode 100644 index 0000000000000000000000000000000000000000..ffde396e8317f4ab709b56286d9552abe95f4e9d GIT binary patch literal 345843 zcmeI5TaGNbkwjJZV*sr}pMrWB+W(FkQVqx|%S#W^$2u~dMAqQghaRmKJJM)=+=CIB z_v7Q&ua95tUp{_){ipWdK7Rf2{qKvv-v7?_KmXbPp2y$ukH3HY=k|a9pMQTQ`d9MT zKR>_z!R;zGE&O%m-~X78k6%CMieGf}=YH_ES#7J5)O`HyZ~y(zfB*C6uU~(BrT0d1 z{`otI$?E@qGHH^I%WK`tg>hN(s~)V^26Jsc{9nrN*Y=JD|Cc)h|7U%VH!+ijOacHd zM5AdMiYJQse-iv3Br{Y;!b%xZ!sJ)B>Y2-J zZZQAr2I#F%tl2g!^x19cfs&Rj0@e^q0F|9X3%%F$~D!2hVkk0&Qn4MfSRblFL2ETQtZ zrN3<9aJlfmidM6&#dj>s|5F8aL8eL1kO}^;m89;;E-U#}uhY*)Q0e&lF~RlI5#IkC z`a2lG^X@TD9id%*e6 zq~=)rDVLB*lXP5OD@omO`*z1=$*+2_UU~le{R0?$|7(&DYKZ@i#s`_!y16y*|M#z( zwX;g&hg9pbKS{_7w`PV+y<_kztCNz{WtDGSmi(&M^p`ChLIMA) zPOE2Ii;uyX|5ZFu@P88gA0#u*0JV%KXD%21S793d>wLA!(Q5_3|ER=|CnrpR4?S&9*ZC^Zl>S&%Y3zGo@|-0{_>#S^36g$*+1Q6wLos zn1=t%|4Y3~shgz3|F!(~g~~TBOMX@OuS9+|sp4r`i`RxmpZ(NrA zs%Jt0|EtFIkb-V2^FQbRod17*e*RO``zsGaw%3sw-JZ%XTNVCmqqfjgipt4orzcvc~!~b@R zmQ*7Ap9KF0$&52Vh5tX}G)2v&Y`?;+)t2Y^Z}A-q{EtffcycmTK_sivWhbezgvu{3 zd+kfv!r^i|sC4}Oc!RJ1L;3x;K}l6)wFdtS-l)9}Y{?!#rb*9`Nu0susKk$~^2;!N zO@G z^Zx%|dgc90shgz3|Ft}+L**NnCBN#KP{98xOotRO|1F|FozkQ+djmwf> z75*!cTWG4q%l0dz0RF>&>0L_QBwYoOTrTH7lbU09zhx&SE_42~@^lAH6?an=lHV`* z-~)AXP7!Igug zX5jxM_&-QyoB?WCS)IAu4l3QOKPI?da=iaJC}B@F1;BsKeKhJ+(ys-%J-_iIW(^{S(VQWm%ae1v;mnFX{{8u8kLd8^tAd?Crxm>#JBsG>$`DHvg6N<(`=6~G) zy>-WWv7;W$6X!pp5}?BWs3lE1o;Jm)jMVV|_sLP!W(7}wUJ7-6 zllgzGBy~gk4y-aROMcaZ^P0xr#~pmb7w>J;Tn5BXu2OUtW@ z*LL!AbbB&sR)zm--OPn?S@NsGe2Li2xfck3f-W?=Og{9;EvGyd%O;A+*$9x(q;T9&#ABrdO&r0&TsEBRFq)+_w~ z31cw)SMfx_|4HzFkjyv(RMTapB+ElrIdi#vUK9S9|M|+pRX(Wm{UqoAqr8J>O5Ko& z`F}0HeW3u1%aUL9Oeo-g6|F)Fb{vB+|EqYSnExkfV376MOQkNBgaar=K!ha=lD^$w%E7aN!408UX;)#O)li>d# znQ;cFWjr}^xgAu@{{^QN@V~jZqw#4Dfd5g6A5TuExV%=a%aUIe{wtANp;Feb;XnLe z>Rn3RBwf{(TrPK6lbU09zhx~YE)TsM{wtC2zgxihkBTP>GEI7hOsY0qj!OI(NF63W z(`6;UD*RU>;XnLuHy26G!2e0`e~`>L1626m&jFh0Z~ZonnoHS!g(;vdU-iWT<@QBK zwam}^;JRY?AC>s=fI&i|M4(K%DBuB>R6SU4I`gMi842k?JV3-{eO6IBqn9F_P1|G&6A3>cNr+fGx(9sV~be#E2t zq!Qu(q_(B-|64NSI!^4V{IXTgTyAH!hPB5NydEE({|-vnlT88L*5YIE7cqS>PsJa+ zvyAsYC*91XArmgIRqL|kS3Ov-@W0@+V*4En{8#ZrG5=4}$Qv>V|G&ORqef@^kdoA8 zlV91Y@LwCXWt!IFW&0Istu0?Y2E%`qWEA|L1pf!gj59zjFZ%c3IB(p z9t8g<33*{AF=P^Fa5*aRgZZE5zg^2(WBxBVQM(RoNhQMnNy|*af6jlVmjXJdRIJSZ z%>P#<(9Oo59gUC4bgi3P1OMSa{J##BrYfYHwYCF;od0MuqL}|DG5-&e8D}cLj3;L< zm-)ZyF>N?&h5wxYNJ-lo?x4<;x=A{BS!?<23zctNmi($`LIMBb|BE*kA^tlWA7om~ zGbC({NjfgCRqL|kSB3vdAP{4$=veMBRC6#)OE5}_QTTfzY(VFnUqO7{9h~Shfj7{$*+1%zu7*?FFb>a=f4GStIxK=|JUest$-xj zOs12bnM~pTT1o2QKfnLewX8MH{|h=Q{BPM}{x6=R)adpM)Mcw)(_gmmJgBNzA1Aoo zBmVrCK{uxW_z(XjADuI$ZU7=ICYQ@y)}${?wlR44LlBM2QsVM(S8*m39aJh-_|NDyAwVzhB!i_~Kc>!8~ocVNdpe$#l{) zlc}l=m!lFthDkkCei=^=)+_UW!D&TE!HzK){>Q?U;Qu7}KS*Yr0V@3Or%288w?0kL zxKp-Y@V|A@9gR<01^=TGKc1XSae1v;mnFaInReCdRpalYf_usF{CAMwFZd7tm-5j$ zQ|e~Yf&Xjy?F*G}T$cQ*XF>u0t4^y!3c9Vu$KWsCQ60=v@dt-YYk7u*Oq!(Q@>;bn zOMcaZ^~(Iu`M-jBl@Drw%#Owfnbx|wHSnK5|8e@c>RzwH-{TIxmmKFmgKpN^4h%B? z5Bo8Q=f9J_3i#fe>2%q(lGHu0T`DhzbgD! zBDX@NY`;RS?Z6=OzltXc{!fDcgJi}TpqBCE%;k1aY5e8<|DDHR_&*f&AoxE?$O|)x zA(N&pT#icoVE+G_%ZHynsvLSlaw``;*j9^QgM|OFFeUgu3H}d~8D}crbXh6M^3YYz zTrTr}6{fd$EcmbDiGu%=guIYRlXT|)wUX2gq`u>_9SIi<)N#bxm@Od=KmKPOBjE49@Ql^1OF!pd0}fz(%b*1JpjbzsKk$f)OTE# z{HpL@iQEbmQx%fmuaJTr7<>`a2lG_?;6ph`_5l7*g8zeL#+d>rS*6!v9G=I%i7VBwf{( zTrPK6lbU1G59%0~rNrf7tU42lUauN|9~Im`7{C8B$nO{YhyP3Y=$t8aLnipYmfyZm z`Nn0*uX-jF@W1M`I;5c6T6_%7`M-)Mipg}+Gm|O&Un@!7FsX;iFXIXPS0cC2REwAG zS4aW;FL+Qvm#j|B{c+ znNl}o(m<44E?st#8cUe`jLTBu^1zcbp@9EY$21`Y@E`t5?^5a}>F|FozkQ+djmwf> z75*!cTWG4q%l0dz0RF>&>0L_QBwYoOTrTtfq~;j!|2#-q3cc+#RoqQgNJ&);_iNj) znCHLRj3~%7=@~MqAaFS<@guAJGM+I1E0Lv*<)E#+|MT(dm0#4pZdFo=@P88gA0#ub zaVjHqnEc9CJ#)DYvONE-IIRdN=(fUt`2YF&7Y4{PrEbWiX^So!mH5H@|23C${_}O8 z0{Y1T{`M-)*%>V5!YR8QaWLnEJBxKSg9hcXtby@PO z!ha=lD^yHXNPfRUt?j^I@oCD>`QXYyvIm_1Pil_ceKQ4@*Gf{y`48tmUCUa7|GfVx zd4QZ5^-RNu|7-c}3zMI5S@Nr%2}K8$iuG{^-^T~O|2xR@J^=bir;EcmaAj)MP_ zguF157&7&a!Jq#-DM=mAe|i4fwX8Mff6o6U50EpX9{m4)Ke^o+eYEer7Tu@b>9W$h zgo62hOA6pW{FmOP)J@Wb#pH6i%bK*D{EW*|;_`4;ab_rh|M36CgQYP3>}Y(DX)Vu? zur(&>xV%=a%aUIe{wtANp<=2+^7|EPZ3hNl#Pq>D72Q`~uQ=HQCeul+a(MpxEtzqR z)1JyNTlLK4c2MbNo#($i|Gg@K?r@{Jz42)dNG=8bPZILN))+G3@>)sivH~zJOMX@O zuS9N{rnPw4euY}=ZMAp|X8u?4M8W?_@PClZI0Mu&o}9Vd4l3sVf~S@6zqz=h@u^kA z|ER=|Cnr-}UaQt+$*&6kmB_77DeKqpAO0`(E~Rdgu4+pzm%FS<&9S>rS)|0}p?AZ7 zB@+I33poE#@kBwUNzaf;)rQMai5~;0!{leWtmIdP|4JnMhyU&7BB>epKMDR1k{M@! z3jg~#Kr{WV-=Dci3w1+?XP{`+DEt_2JKqY^)!oJ>^^$*OeONzF0Ne;y<)h2D0W zD(+>N-hRc!H2parTw4X1q7pygf0QtN9Vhk_K-sEiF1HmI@Bi@r&pUtd0sgNA{|9+9 z&Hxqu{|uT6DrNh{{LlM8OZ^ZssUVWe<@{%oZY)COm+|CGyJG&YI;IaP=(h6xuh*Ud zT`K@GMJ0Z4{u3okU*oi=^2=5|bGh)p3e)hP`F|;o=`*EnlFt0UmfyZm`Nn0*uX-jF z@E`uaIHrgA@3`@SOlx_Dgsm}2$K|zZU6%Z+@L!4C3KdfolHadTYdbLbBBl@KsrcYa zIY{<^lj%v#vAb_3;__Na>YhAhll-a&>s7D6JnrCod_I2t@%`_Mzuxcl+yBh_pQ~DH zf2|sW@L$Cf1^*{4Gid?||JO=V2min3a`+GbH)Y^D0VS0P|0gXo3ID&oN3TX_{E(8= z!GHMQwX8Mf|AJpsh5s#EWnaxOyb~4^-qB?zEi2!+EF~@vUFDkovW4d}8x`x~oafOk zJJR}p>*qq8|47Rez<>BJy-TSZfV3Pp03??S|0gXg-?%I#F2nz?hO=l=n;t5b?bqB^ zi?8^_S@7UIQT)Ln(^{S(A(JNQxV%=a%aUL9V7+QsWBz~VpFx2CDxN4N(@D!I3jTBc zKfM&z4=Uh)!D&U9wK)GNaP&F>!T+elkKqgQfEx-9usuj$_iD(3%! z(`xw7`Oi}CQtAdE@P948eWCJ=%aUIe{wtANPE)ja*?xr-aQ;)!QLhz{)C}i8lUlg% zKABWO;Br*r$CGzil3(?j{*9ngu|6ia9v{yC2l@Si|IGhO`RJS}bpsIizn0&=Q2EAX z$*+1Q6n#*I{{_=(NCESIfuq+7NNR@pf6~_gcli}9LnipYR+2jA|F3hIO~3uVou-Pr zsS4?43gAEdmwa@tjc!jS&8jMhHlo$Vc~_-&e>^T8q0 zTAm>xlV-zld97NPCBG{CS0cAe(^}kAh2-}u)LL(=y#LAjpP!$9Av$MD-6UNFktCh@ ze^PVo?o)Otahdsl<>?NZD(`Ak(B}6`7=~AaFS<@nax$sC?tH zjt-*iZ|CBsH&fMz5|L^Bh?bhg{a6k)p{>EkLT|&`8rDEm$pFjWi zDj(Dk{~e7_1)E$7^Z%sfOk&7{%WEa6WBzCU?^@Q{4h$BbrWhPZH{-wKgF~jZZf=d) za9m!i)@8}Bdgi9E*DLdX!D+?zF&O@K|Y6g|Y-$w=aTW;R}ALRFIww3Sy^8H`F|NHs*`On{l z^agdLMz;s3Wvjw}ZPeC7<+A;P|IGhOdE}ibb(3^eTXMOavQ7FLlN+9fAHg&(ONqo6`7>t z@>)sihDkk4e#T|Vugd(dM8f}W!Hbwan5W_!ALSsa8Tda5{tuEFX9@uR_jBN8`i~eY z%l0cw0qyfwWAH^s&%}Sn2Z#S_CH?Tp$rP8@s&!fNs~)UZ-v8nKe+Ba@AJpxQ4>GNF zb8E~%g3D{wx-9us;lC2Ob*MB|A^H8V`}jh?2{t%T7{b36r03SxQ_UcycBb@W1L{ zDWm}Y!++^rO5G$K{;%b?FI2v9S@NsGezjLdSJ%CJ;mQ`euu7bejsKk$f)S>c?%aUJ} z`Cp0L3YD_`3MtruLEisS@kGJ@N$`J=%s2zoGM=2d+zu+;tUo5Wj$WSs4ocXQO#$$q z^B>7a=S-;^GHKdME|)GlNsT2;e#T`fae3g$nNYxgp8vjhV-e!NqwztewLC+@)|jN@ z@>;bnOMX@OuS9Nzim3|8?^md`9T8pCl9x$0sYL#>M$)u_cm!lFthDkkC zei=^=)~jyTIsbX*pFx2Cu`nh0KMDR1k{M@!3jcc-X{Nt5O*QV6?N^urnEyHdmy)(M z43KX@CKW_-xpdh{YAm7h%Xo4o6dhD5R_1@^|Em%l4D<@|-_iIW(^@yT#*hh@*Q#|{ z@~gssC2}iNOjSsJzqVuW#XG8ldE)$kl#kAttuaYgwI!F!{6DEVcK0cZl(;;MRcAuc z=QZa4g3}84-(2i@g8!r5rPSg7cRm}mKMMbV)=>GzW$9f)0spIL6;iMRgUtUbo+u{M zNzY8C!Xhq5C4LN(dZ_#|o-qF_ky~i0#mn|9qyYXG+)-UCAgM(7KMDR1k{Q=H?Wz2- zRnJ^*2bGHTaR=Y&$oGE-CG5$j0Qe98B_EwLrEbWifhf6Ly6hx1mN5Alm!-tzfhT7| z0slGwdGTN=#D7QQgG_6AhJ>v#Nyp{2YF(E6s_i2}sx7%(=Ko2}G2Z{#gX!%wRoqQgNJ&);_iNj)82)QBq9D_xXUL?2z~!jK zkF4^`cyeYa=!2>bYdQbt`(IbxjDOD)^ZzLC;F(f4WP<-|`RxmnpK)38tDXr3{I8-_ zNWl&aGXJZ1qL}|DG5-&e8E1f6#*;Ib3;*H&i;ZP_<6|;iE9r+%o=o8KTD2}qepUFd zL~fa;wK)85PQ3NOm$oXY8Rq{<&9S>rCUJSKBy~@AS;?;o|CLDi-z|6%(+Bg!`TwYQ zDRndHsM?atrOQrgj@|9DQsVN^RSwoG&wmTPt+f3Z1pcddq9D_xXUGKq*Gf`1kUCVp z>9Uev75*!c%>T^)?bWoTX5jxM_&-QyoB=BQ?{ASd(|^RFa@l@`DWHA+>SK@>9X%8O z9UokC0Q`?i{CILQ#pShXU6%Z+2kTYGAH4t1`~O$@pl)w`kZG-(TVnEnba!h?vqJX8!ksBemr@XCHYn1zY+=mIsfPUf0k!R zm`Ti}qiRc5rOQrgj@|9DQsVN^Rp7r83IE|g{Ga6+0{@Q#)pS|O?;ZSy|9!kr5IFx) z@kBA1PHMrqJDIB5a5*aRV`waQx~$|^RoQD_${I_!+_pT=fAs*I=f9JDQ0F}H{jX8p z!84_903yyLmrIwO)Ev9pWu?UBp{tw;1^lm~)piUr|EqYSAk(C0$OQk_N>VqFI#hlc zPvE~2`PHO04V7j46;jaKYVj4r|8;@F|4HzFkjyv()H0r&xm@P|Don%wc8a#6@o5f# z|51q_Pfn(|yjHEtl3x}6E0J5F0{@%MZ~fpyIY?@T`F~P#?C!}lF0YlO?#V7I`BmY+ z5()pi1utUyV4jK(zLbNcX5jy%<{13{mdrR)0A=&!nagcK;r$=p|9R&hzJUL0CH?Tp z$rP8@s&!fNtHOUJlKG$cpYMOo@(c;jq|9WhYD-q-E^AVA?CxEbl(;Vp8mOEWm@~gssC6f7{`JefJmS@NvGO5~8X)U`qy@{Nykg@20X|$oYJI0I#C)SQBhoTtCJ{^(pXgY z3N$BCAWTDOKs(-9+sWGNq%)-59`>z?v@< zRdrKtKr};XpPUug6lDdsUZFs>K{=BPokaxqt4qFK7PrP2Z0pxIw;c#mbU@sbmdu05 zD^CLfkYEsm?hiojf*>J99z_+AUx66pc2AM|_F0dfR;WEbtBaSkBb59T3-yHyKvBM@ z>-s@khva2)Sh43+mzdlRQ0#W*_4WI;t>-uNBTmMd>LG|BZ^Yl{g>og?H>uMxpncsf zA(OVWhwGLjK&t;r{Q7?@6phJDwY; zWk2FUHjdh|7wRN$M78H^JP9Q14H9pRJe2+?Z~WVAl)(Ae8peElANbTd4!_=fHaqjq z*frgnPo1t5<(u^Q*@>|k(Yew}rCFZMb($bKSA#`TejMc@DGik?waoGb^2I96l+M)R z$J>h!OPwLpYQ9|N3Ui(6p`)(TNB!BIW_q<+V3kKsMBg6K3|D(&8;=e{_InXN_xh^f WreYr3q_#4da6a<%4j4(zhkWs6Im@RRiu_WXLz{eS=hSI6FQ(b&AEIWI^zc>DIZFcip4 SrE3N~9Oh%Pi1%t_X228G|M!sq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4054c683a7ab1c06886ea3e00f50cd260c37def4 b/fuzz/corpora/asn1parse/4054c683a7ab1c06886ea3e00f50cd260c37def4 new file mode 100644 index 00000000..cd14f4b4 --- /dev/null +++ b/fuzz/corpora/asn1parse/4054c683a7ab1c06886ea3e00f50cd260c37def4 @@ -0,0 +1 @@ +   \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/4057e1f578329624e796b94879744e2be452d38c b/fuzz/corpora/asn1parse/4057e1f578329624e796b94879744e2be452d38c new file mode 100644 index 00000000..94553bfc --- /dev/null +++ b/fuzz/corpora/asn1parse/4057e1f578329624e796b94879744e2be452d38c @@ -0,0 +1 @@ +Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿ«««««««««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®«««ÿÿc \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/408e123a55235d33fe3610e9b10610c776280552 b/fuzz/corpora/asn1parse/408e123a55235d33fe3610e9b10610c776280552 new file mode 100644 index 0000000000000000000000000000000000000000..45f7e0593d6397290fa362b89c02053cf0774be4 GIT binary patch literal 150 zcmZP*Zk_)h45t16zxn_F|F_v08Q5wbf&fGu8Ei!6U;<2Os3~6%YQO*g4-$R&a2J?F Q222khK4f5EP-kEO0L^rPzyJUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/40bce251b6d5ef19e35169c532094964a38c659c b/fuzz/corpora/asn1parse/40bce251b6d5ef19e35169c532094964a38c659c new file mode 100644 index 0000000000000000000000000000000000000000..582b5682475a2619bed0dd4e8396ab82a0defe34 GIT binary patch literal 7941 zcmeH~Q4Yc&42EeROm+$%&GzCQyqHJ!0E@$Ptg<1{VbsLr{~i=4u+shgt3=Gi@##>ydC{iK1y^#ojnXzTAe0jfj=r`%%YR z+9IayV&4#PHlxZn4_=_{;4idCTv$QQP50?OG7mw$4azyiunN0-|AB)-I$I!}x=$*$ zCU@G|&7Ylfy6qm<*%+`9t~^fh(h%-7-X`z|1zJFLn$PmOW7eMMk4&aO{R~UzkF6R? zStTRo-Fk#lBm?jip-6etBsNwCWX|9vuOYlf%5Qv|z= epcE(tN=dNG2HhtEy3Yzt29%OPlY{PKcAp2fk87|1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/41a6938973b559fbd8ebf55105fdb92a2441509a b/fuzz/corpora/asn1parse/41a6938973b559fbd8ebf55105fdb92a2441509a new file mode 100644 index 00000000..c557579d --- /dev/null +++ b/fuzz/corpora/asn1parse/41a6938973b559fbd8ebf55105fdb92a2441509a @@ -0,0 +1 @@ + çÿýÿÿÿÿÿÿÿÿ@ çÿýÿÿÿÿÿÿÿÿ@ çÿýÿÿÿÿÿÿÿÿ@ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/41f32f3759e5c817178fec795ba8cab4f431256e b/fuzz/corpora/asn1parse/41f32f3759e5c817178fec795ba8cab4f431256e new file mode 100644 index 0000000000000000000000000000000000000000..ec060ab58ce8baa8ad8b967aab53c2bcdff83a21 GIT binary patch literal 3183 zcmd6qzfQw25XM_YcmSzec4nsU5qOEd0T04Ll_d)jVvK~u+@)3}Mx-tlQ(u9l5(6R= zWdZr@bK=H{lNLd(4psiRzx(dHJ6BxXeE=H(Lg-I1SNV5YE+ilokkN&rEEg(=5Gj;? zGA)o7s)SuPC{X55DPQoG5U_8}=(;MFQcA4M_SJ0*LKGf|eNvM-5Z-b>5C91}LBys3 zvJQfT6gi11!f!zk$Z|&!b9>UFrxt35PwV0&^@QSIBB5R>0V2wGo|y-A9+Io1nXyY@ zQY>r)D7IU9JAce{KHt%fIO=DrLl8sWi0|iwvMJd$sns!{y{VRvNo(4}R?7eotv#-d z&SPD5`fJ5Wx0AlYk5^I&WTMj>XCS_$vzmk6u-j8LSKeqrG_i1x~}Bgw4h4lmrj$F1QHhN>PkeyI_c_XSl z^~SwG!rl<f zZ;44=sCrOa=8jP98943?uOyFh3{1nLvn`SKU`;1Kwg(?>sKwGB06=o%9kzY|J_;BB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4265127d4813b9d42534710fe15f1cf042643bd6 b/fuzz/corpora/asn1parse/4265127d4813b9d42534710fe15f1cf042643bd6 new file mode 100644 index 00000000..bd480898 --- /dev/null +++ b/fuzz/corpora/asn1parse/4265127d4813b9d42534710fe15f1cf042643bd6 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/429d7a72eea4a406a603c0071c34a8dbac858916 b/fuzz/corpora/asn1parse/429d7a72eea4a406a603c0071c34a8dbac858916 new file mode 100644 index 0000000000000000000000000000000000000000..07db7f2f9802031f6efe7a717d09335d5a6fcf86 GIT binary patch literal 9 Qcmd;LWaMIG;9_I|007efBLDyZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/42b5ea9f618a1c4df6d59a4976593c72bfac5385 b/fuzz/corpora/asn1parse/42b5ea9f618a1c4df6d59a4976593c72bfac5385 new file mode 100644 index 0000000000000000000000000000000000000000..81fff8b1d7c756c3d20526810e23d74c11fd53a1 GIT binary patch literal 20 bcmZSM)MjI3Wo0*DWMcczz`)30&A|GgaIIk1PuTH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/433196ee1b3b402def6c184df93720698aa5e465 b/fuzz/corpora/asn1parse/433196ee1b3b402def6c184df93720698aa5e465 new file mode 100644 index 0000000000000000000000000000000000000000..a9f53fcbfc773636637e2f686a96b67385d278fb GIT binary patch literal 274 zcmZvXy$ZrW5QN2_yn$u#73L9qGzDX!T%!wH21LZ}KnU0g77B-;MJfx4+b2aj;b7$w zu=4A6*qxc}c9)2zwPkkZwO)xR&s!5-J0) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/446857b35e7ac31e30b5c5aec1db0197e1626cea b/fuzz/corpora/asn1parse/446857b35e7ac31e30b5c5aec1db0197e1626cea new file mode 100644 index 0000000000000000000000000000000000000000..dff46ea83c0dd4732441b1073a1c9811fdcbfcbc GIT binary patch literal 34 QcmY#yP{#^?Lq(Ms0LK0cX8-^I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/454eb70382875f32d63012e59741b0b3d877f5e0 b/fuzz/corpora/asn1parse/454eb70382875f32d63012e59741b0b3d877f5e0 new file mode 100644 index 0000000000000000000000000000000000000000..b5e6f63d3ef17c8ff27da9f7337f3ff721d9b506 GIT binary patch literal 121 zcmZQ8Ej@VcpnCIaRXuiMa;?zx> z91sdW-TejPNH;+gKkA+TY5u1zkLFKbKYjhF1@k|B+H$IQ{-=9ePR;*hVDJb4KSf%k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4587fc67ae30be3fc6870f903c89649319635fcc b/fuzz/corpora/asn1parse/4587fc67ae30be3fc6870f903c89649319635fcc new file mode 100644 index 00000000..5bbd2ad5 --- /dev/null +++ b/fuzz/corpora/asn1parse/4587fc67ae30be3fc6870f903c89649319635fcc @@ -0,0 +1 @@ +L€L \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/4630b1d6e9b293e63a25caacf2209a436ea32e7a b/fuzz/corpora/asn1parse/4630b1d6e9b293e63a25caacf2209a436ea32e7a new file mode 100644 index 0000000000000000000000000000000000000000..9aa48d2a66cd486d1141b3d54f11b05d31c0a2f9 GIT binary patch literal 332 Tcmb1OkQjxOhrs6r4NDmSGD{K} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4640aa465be24a6fa6e4530d79aa85e644529909 b/fuzz/corpora/asn1parse/4640aa465be24a6fa6e4530d79aa85e644529909 new file mode 100644 index 0000000000000000000000000000000000000000..a23af70d9d1acafac47c0b09720a4302fb88d302 GIT binary patch literal 159 vcmZQ;>_-Cg8IU;r{r%IBxs8pDjbMWMfP4C>Pt&*jY&dqUfq{)%6Ttxh%E40f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/46bb1edc95a9ba8df7d3c119e22b6329e590c08b b/fuzz/corpora/asn1parse/46bb1edc95a9ba8df7d3c119e22b6329e590c08b new file mode 100644 index 0000000000000000000000000000000000000000..e504745924561d44d9bdd5cbd412f4bfb70624db GIT binary patch literal 9 QcmZQ!WME-rVEM@a00K|}2mk;8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/470ee240e8f1c85759b772f75cd55b70a3567b6e b/fuzz/corpora/asn1parse/470ee240e8f1c85759b772f75cd55b70a3567b6e new file mode 100644 index 0000000000000000000000000000000000000000..033fa55325593f6d1dbb42e236dd6f4293cc1dbb GIT binary patch literal 32 LcmWe<5XTDv7?1&R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/479329c4ccc69464de5507f04ebc760e2efb31a8 b/fuzz/corpora/asn1parse/479329c4ccc69464de5507f04ebc760e2efb31a8 new file mode 100644 index 0000000000000000000000000000000000000000..b63d5a8db6b8f64ec4aebd9a16308fc1420756a7 GIT binary patch literal 16 Lcmb1OkU)U|2G9V( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/48663a1a39961ffef8bfb265cff69b82deac2b40 b/fuzz/corpora/asn1parse/48663a1a39961ffef8bfb265cff69b82deac2b40 new file mode 100644 index 00000000..6d7ecd69 --- /dev/null +++ b/fuzz/corpora/asn1parse/48663a1a39961ffef8bfb265cff69b82deac2b40 @@ -0,0 +1 @@ +€ €€€ €€ €€€ €€€ €€ €€€ €€ €€€ €€€ €€ €€€ €€€ €€€€ €€€ €€€ €€€  €€€ €€€€ €€€ €€€ €€€ €€ €€€ €€€€ €€€ €€€ €€€  €€€ €€€€ €€€ €€€ €€€ €€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/486e216f55c29754bd34fffacf8eb4c5bfb2ce6a b/fuzz/corpora/asn1parse/486e216f55c29754bd34fffacf8eb4c5bfb2ce6a new file mode 100644 index 0000000000000000000000000000000000000000..ec57d24518093fcc4b3ecd7e5800ec7d6f2e8a39 GIT binary patch literal 8 LcmWe;5C%g40fYce literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/48a1b352b64e96dade431f1c53b7508c7c93efc6 b/fuzz/corpora/asn1parse/48a1b352b64e96dade431f1c53b7508c7c93efc6 new file mode 100644 index 0000000000000000000000000000000000000000..61e596ba8633ae983e29efb5139deafda8f67054 GIT binary patch literal 12 Tcmb1QkYZ3^kYZp^U|;|M1VjLj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/48df16bc15351e7281d9bd2cef1ea9485c5f6072 b/fuzz/corpora/asn1parse/48df16bc15351e7281d9bd2cef1ea9485c5f6072 new file mode 100644 index 0000000000000000000000000000000000000000..d86fbe104a1552c46550e0922af53db66a291106 GIT binary patch literal 96 NcmZQ!WMH8s0stQ{0HFW? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4925a7adc21b445946766747f2feb96975260090 b/fuzz/corpora/asn1parse/4925a7adc21b445946766747f2feb96975260090 new file mode 100644 index 00000000..df9a89e1 --- /dev/null +++ b/fuzz/corpora/asn1parse/4925a7adc21b445946766747f2feb96975260090 @@ -0,0 +1,3 @@ + +‚€€€€€€€€ +‚€€€€€€€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/498ec114fb615262335edba3d979531b862f1be1 b/fuzz/corpora/asn1parse/498ec114fb615262335edba3d979531b862f1be1 new file mode 100644 index 00000000..2d5acedc --- /dev/null +++ b/fuzz/corpora/asn1parse/498ec114fb615262335edba3d979531b862f1be1 @@ -0,0 +1 @@ +HæÿòÿÕò €€“ÿ¦æÿòÿÕò €€€€€ÿ*†HæÿòÿÕò €€“ÿ¦æÿòÿÕò €€€€€HæÿòÿÕò €€“ÿ¦æÿòÿÕò €€€€€ÿ*†HæÿòÿÕò €€“ÿ¦æÿòÿÕò €€€€€ÿ€ÿ@¦ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/49a63399586a985cdac7aa3d42d70a1a7803f82d b/fuzz/corpora/asn1parse/49a63399586a985cdac7aa3d42d70a1a7803f82d new file mode 100644 index 0000000000000000000000000000000000000000..1357c9658f729d23b720cdcc07472c5a58c641ac GIT binary patch literal 4 Lcmd;K;9&p&089WG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/49fec3098cc76f9f0344bb750beb97333591d63d b/fuzz/corpora/asn1parse/49fec3098cc76f9f0344bb750beb97333591d63d new file mode 100644 index 0000000000000000000000000000000000000000..bf42ec3cf1ee563f46a7fc498bc79f06891ac492 GIT binary patch literal 15 WcmZQ$wASEcV`OAt46j|+JxCz+RDsoTn`h;N{dJ71_9FH2enx5C@wxacKmp{r{hVfr$wK?VgX< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4c90e85051a3bd8602f004e45258a98c993ef17f b/fuzz/corpora/asn1parse/4c90e85051a3bd8602f004e45258a98c993ef17f new file mode 100644 index 0000000000000000000000000000000000000000..696be6fffd2bb13e345af93eeff693d50076414c GIT binary patch literal 52 tcmZSM-3kK#|NsBLb?bgdHf070F#HSwAo2fNVDkU}&;LKOF<(2*002FQA;JIv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4dfec104bdebd37986604df1cdac812ef96e5c96 b/fuzz/corpora/asn1parse/4dfec104bdebd37986604df1cdac812ef96e5c96 new file mode 100644 index 0000000000000000000000000000000000000000..25a18e1a9618abb0c5714be15700eda5349c2e83 GIT binary patch literal 159 vcmZQ;>_-L~ZOFX-X~?|B#>Pf4fekcZ6C@gNPe1i(`j(#!$F4Onupx5**Nszf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4ea897a9bf947406b47b81e549d197d24ba38688 b/fuzz/corpora/asn1parse/4ea897a9bf947406b47b81e549d197d24ba38688 new file mode 100644 index 00000000..31ff8664 --- /dev/null +++ b/fuzz/corpora/asn1parse/4ea897a9bf947406b47b81e549d197d24ba38688 @@ -0,0 +1,3 @@ + ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ +‚€€€€€€€€ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ ‚€€€€€€€€@ +‚€€€€€€€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/4ec5148089423af3d06239268f1fb608ada230cd b/fuzz/corpora/asn1parse/4ec5148089423af3d06239268f1fb608ada230cd new file mode 100644 index 00000000..469380ed --- /dev/null +++ b/fuzz/corpora/asn1parse/4ec5148089423af3d06239268f1fb608ada230cd @@ -0,0 +1 @@ +ôôô… \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/4f3548f51fa1bd56b5b75dbcd37d730a8a71fe6b b/fuzz/corpora/asn1parse/4f3548f51fa1bd56b5b75dbcd37d730a8a71fe6b new file mode 100644 index 0000000000000000000000000000000000000000..fe9abeaac8b9deed02f724a4fbda5fef31cd0664 GIT binary patch literal 256 OcmZQ#`p>{Lf-wMOU_ikD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/4f730045667ab724e11a09b446ea362d6edd51a9 b/fuzz/corpora/asn1parse/4f730045667ab724e11a09b446ea362d6edd51a9 new file mode 100644 index 0000000000000000000000000000000000000000..c86f551aecb8243f5f214459ea99353ed8df7ed8 GIT binary patch literal 428 zcmZSM`v2oU1Te6*FfcGqWBd2tz~B!Ue1=dUpz-G-E^r2y1Sa@1gERng&|q>;2E_RX ak$ho|#3ld`p@|tXR+vJ_pt6!p@jn0|w==c? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5000ddc3733bc45977221fd188936c8ffc5af7ec b/fuzz/corpora/asn1parse/5000ddc3733bc45977221fd188936c8ffc5af7ec new file mode 100644 index 0000000000000000000000000000000000000000..73afe3c9cdefb83513130a62eb740f5a953eb4aa GIT binary patch literal 2216 zcmbuAuWrLI5XM_YGuWgKm5+=JeUGq**@KL%3JIB1Y%~p))G7`rG3+ahR2rCO){#wj z{u3v060fxisyOHT?!NEN;$i&_903SHKe^G>uQ6MNz0yF*52P_$UC}l)y}6XAq&9Ht z1rnx$Uit^E)kLlMxt2Sn!tu?v17V7@K(4Yu02JthENylKB91+fL$V?+Ca#E>2Jul4 z46^G~#BMJJ>Y3mpfkH`1!l0P{5-aw>0!;JWmG(u_p?E6#iaiP|v2Ynco=)m@^H!3c zUl>N5B}~;qw5GZQF=f)}^8$sFq-#k)#CW*%hsHr1jn&y8p~jM$rv aSt)lV3A52ka(|9Vsk^;~>C0o=673JSMBy6% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5009d72be11f131c170d4a3d0827526b75c0f753 b/fuzz/corpora/asn1parse/5009d72be11f131c170d4a3d0827526b75c0f753 new file mode 100644 index 0000000000000000000000000000000000000000..f38653633da61bd2fab3c123033f7277df4ee438 GIT binary patch literal 82 zcmZScU}Jjr|I`1gpB^KW z!h#O21`ilqE++&Yf)s!~JQ+kV_;wa0E);E`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/532e650bb0b70927bf8aa99f959f9036a0510725 b/fuzz/corpora/asn1parse/532e650bb0b70927bf8aa99f959f9036a0510725 new file mode 100644 index 0000000000000000000000000000000000000000..9ff1d33895ff7b4541b2e250409a9c140b96d218 GIT binary patch literal 64 Mcmd;K;GqZt05QM;fdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5377f18b77a75d4101750e6c5f6e6d06713eb7a0 b/fuzz/corpora/asn1parse/5377f18b77a75d4101750e6c5f6e6d06713eb7a0 new file mode 100644 index 0000000000000000000000000000000000000000..6f8645916fe80c9abf940ef8b2ebc204cbe24fdb GIT binary patch literal 146 zcmZRxVBq@y<39v2uxZWs{%QJ_pZ|aS=brKX(_Ap?44c-B>7TxX*#AJH5P3y3wbTEf f`T76H7Iaat2}o+EcU^)Q@Z-NCH=M)BfG`&T+c0Se literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/53a8f2eaeb672552543dc161874532b417091707 b/fuzz/corpora/asn1parse/53a8f2eaeb672552543dc161874532b417091707 new file mode 100644 index 00000000..ba817c41 --- /dev/null +++ b/fuzz/corpora/asn1parse/53a8f2eaeb672552543dc161874532b417091707 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/53fdcaca08988d8b337149d365220912f6b81032 b/fuzz/corpora/asn1parse/53fdcaca08988d8b337149d365220912f6b81032 new file mode 100644 index 0000000000000000000000000000000000000000..5e0a8c71507a483bfc087b5e08a6eb2cf081ff53 GIT binary patch literal 11 PcmZQ#T*1Qtg2D^{2N3|{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/542a3419ee3a09003acd9ccc32a1ea026c236ee8 b/fuzz/corpora/asn1parse/542a3419ee3a09003acd9ccc32a1ea026c236ee8 new file mode 100644 index 00000000..5b5fdfab --- /dev/null +++ b/fuzz/corpora/asn1parse/542a3419ee3a09003acd9ccc32a1ea026c236ee8 @@ -0,0 +1 @@ +h€l€h€h€l€h€l€h€h€l€h€h€l€h€h€l€h€h€l€l€h€h€l€h€h€l€h€h€l€h€h€l€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/54d7ae5cc5517f04a9d8d137c4563e0a90c52e60 b/fuzz/corpora/asn1parse/54d7ae5cc5517f04a9d8d137c4563e0a90c52e60 new file mode 100644 index 00000000..fb89db04 --- /dev/null +++ b/fuzz/corpora/asn1parse/54d7ae5cc5517f04a9d8d137c4563e0a90c52e60 @@ -0,0 +1 @@ +È€€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/551603bd1d9c9925590e3c5e3467bfd7e0fc22d7 b/fuzz/corpora/asn1parse/551603bd1d9c9925590e3c5e3467bfd7e0fc22d7 new file mode 100644 index 0000000000000000000000000000000000000000..05cf73c56c8540e7e2f674c237add549fc927a2f GIT binary patch literal 218 tcmezW|Nnn2hX4Qn|7QY|$ZSjzxGY49i2+p!TpFvP_+^te+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/55ed174d2f972e607a1e900d2e0f496d3300f932 b/fuzz/corpora/asn1parse/55ed174d2f972e607a1e900d2e0f496d3300f932 new file mode 100644 index 0000000000000000000000000000000000000000..dafe045428f3097daea0b83553e6642d40909455 GIT binary patch literal 706 zcmZS6n(_V9^esRC|M<@hXPsfgCaQ>4loYj!+|#>0Vc3SWf2LCoo0pXNg8sa>D&N&)~|GW4+k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/57853a6181a8e30831196cfd02b93406bbc3496f b/fuzz/corpora/asn1parse/57853a6181a8e30831196cfd02b93406bbc3496f new file mode 100644 index 00000000..1c6084f5 --- /dev/null +++ b/fuzz/corpora/asn1parse/57853a6181a8e30831196cfd02b93406bbc3496f @@ -0,0 +1 @@ +÷ÿÿÿyyyyyyyyyyyyyayyyyy \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/57ddec018108bf2a556df7e773bb349ce43286af b/fuzz/corpora/asn1parse/57ddec018108bf2a556df7e773bb349ce43286af new file mode 100644 index 0000000000000000000000000000000000000000..76a81bb7a2871345efa7ac3d0cc8d0849414b68d GIT binary patch literal 87 Ycmd;K;K2b640IaU7(f7*3f$tF0F43z1ONa4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/587dccdd994052f51dd18da92ac02971cf545cc0 b/fuzz/corpora/asn1parse/587dccdd994052f51dd18da92ac02971cf545cc0 new file mode 100644 index 00000000..dc04d7ee --- /dev/null +++ b/fuzz/corpora/asn1parse/587dccdd994052f51dd18da92ac02971cf545cc0 @@ -0,0 +1 @@ +LƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇLƒ+Lƒ+LƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇLƒ+Lƒ+LƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒLÖÇLƒLÖÇLÖ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/588b4e58831ff834d274adefc6eca5790dc37ae2 b/fuzz/corpora/asn1parse/588b4e58831ff834d274adefc6eca5790dc37ae2 new file mode 100644 index 0000000000000000000000000000000000000000..74637046e0517206d999d9b26b3975f4c428e4df GIT binary patch literal 217 zcmb`>u?>JQ3b1A7xH&z2QPfl=J2bkC=7mBY8buJqTm}qm^Z88#x}@`*3a;;!T#Zd}!wdkuK?=&3 TmlLn;iV4{q;`w#SFb(8UP^Q1PK5D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5a0688bf88f483ea55701dfb8e6629831dad1b3f b/fuzz/corpora/asn1parse/5a0688bf88f483ea55701dfb8e6629831dad1b3f new file mode 100644 index 00000000..d2fcd156 --- /dev/null +++ b/fuzz/corpora/asn1parse/5a0688bf88f483ea55701dfb8e6629831dad1b3f @@ -0,0 +1 @@ +LƒLÖÇLƒLÖÇLƒ+LƒLÖÇLƒLÖÇL´LÖÇLƒLÖÇLƒLÖÇLƒ+Lƒ™L \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/5bccdbc0694f533091bd4b1cbac011af0d75f280 b/fuzz/corpora/asn1parse/5bccdbc0694f533091bd4b1cbac011af0d75f280 new file mode 100644 index 0000000000000000000000000000000000000000..56182e152fd73d2f23f4f2e5d865f706ac90af3d GIT binary patch literal 19 Lcmew*$bb$26Vm|< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5bd470c4cea77c2741c79ade7b10bf14f3849c55 b/fuzz/corpora/asn1parse/5bd470c4cea77c2741c79ade7b10bf14f3849c55 new file mode 100644 index 00000000..9ce93c98 --- /dev/null +++ b/fuzz/corpora/asn1parse/5bd470c4cea77c2741c79ade7b10bf14f3849c55 @@ -0,0 +1 @@ +00€0€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/5c122f7f7263bda2a57316d07d870526d10be18c b/fuzz/corpora/asn1parse/5c122f7f7263bda2a57316d07d870526d10be18c new file mode 100644 index 00000000..dd8f4a7f --- /dev/null +++ b/fuzz/corpora/asn1parse/5c122f7f7263bda2a57316d07d870526d10be18c @@ -0,0 +1 @@ +ôôôôôô……ôôôôôôôôôôôô……ôôôôôô………… \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/5cedbc4c9b05dd93876372c8b759ca2f715394b6 b/fuzz/corpora/asn1parse/5cedbc4c9b05dd93876372c8b759ca2f715394b6 new file mode 100644 index 0000000000000000000000000000000000000000..5218f772e3738bd426ea5c41bbf747237bc3e04a GIT binary patch literal 8 Lcmb1OkN`sf0q6i> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5d6852cae3fad7a6af56d871fc30e24f447e9d2d b/fuzz/corpora/asn1parse/5d6852cae3fad7a6af56d871fc30e24f447e9d2d new file mode 100644 index 00000000..35a41abe --- /dev/null +++ b/fuzz/corpora/asn1parse/5d6852cae3fad7a6af56d871fc30e24f447e9d2d @@ -0,0 +1 @@ +  \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/5d7e65b806b6d8a935805bb09c6b1f64148aa9d9 b/fuzz/corpora/asn1parse/5d7e65b806b6d8a935805bb09c6b1f64148aa9d9 new file mode 100644 index 00000000..fe676149 --- /dev/null +++ b/fuzz/corpora/asn1parse/5d7e65b806b6d8a935805bb09c6b1f64148aa9d9 @@ -0,0 +1 @@ +?€€€€€€€€€€)€€€€€)€€€€€€€€€€€€€€€ä? \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/5d9cba872237142b595871a1484991d69b41d422 b/fuzz/corpora/asn1parse/5d9cba872237142b595871a1484991d69b41d422 new file mode 100644 index 0000000000000000000000000000000000000000..1ec9dd4bdef49d1c436ca14866398247e95b45be GIT binary patch literal 24 QcmZP*Zf!sZOice70De~rA^-pY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5e19124cc8860de2096318c8223ba85bea2997a3 b/fuzz/corpora/asn1parse/5e19124cc8860de2096318c8223ba85bea2997a3 new file mode 100644 index 0000000000000000000000000000000000000000..8a2604143ca6635da9302f0b25482c722d9af857 GIT binary patch literal 8 LcmWe*5CcO10l)xR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5ea8820458726997093d158c9cee7572e600a721 b/fuzz/corpora/asn1parse/5ea8820458726997093d158c9cee7572e600a721 new file mode 100644 index 0000000000000000000000000000000000000000..2a1cd2ccdd511de716f446017596161e713b883e GIT binary patch literal 32 Lcmb1OkiZK88K41y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5f31f43a97fd55c087f9162cc0b569ed763c87d3 b/fuzz/corpora/asn1parse/5f31f43a97fd55c087f9162cc0b569ed763c87d3 new file mode 100644 index 0000000000000000000000000000000000000000..4a6104acddc7860cd570db5d7dc89225a87adc3c GIT binary patch literal 103 RcmZQ;WMCr^k*FMOJOH-!5^w+j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5f440869cb68531cc4361183e3e5ffb41b83b2c6 b/fuzz/corpora/asn1parse/5f440869cb68531cc4361183e3e5ffb41b83b2c6 new file mode 100644 index 0000000000000000000000000000000000000000..cfac11c28676287871736c94e0351c1be95c51c4 GIT binary patch literal 138 UcmZQ+Y~&nZ(8$8Tz`~#b0MX?JH~;_u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/5fbc1e2ccd91d34c30f6c993cc8671fa3cef116c b/fuzz/corpora/asn1parse/5fbc1e2ccd91d34c30f6c993cc8671fa3cef116c new file mode 100644 index 00000000..cd32d5a1 --- /dev/null +++ b/fuzz/corpora/asn1parse/5fbc1e2ccd91d34c30f6c993cc8671fa3cef116c @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/5ffd41abb14575b30dbcb083d961b09f6ecd3112 b/fuzz/corpora/asn1parse/5ffd41abb14575b30dbcb083d961b09f6ecd3112 new file mode 100644 index 0000000000000000000000000000000000000000..423b5f0bb1b54492e5423354a8d3e58f616b09a9 GIT binary patch literal 32 OcmZQ#`p>|G2Lk|s&(*GYE>9!wC0^L85>Lg3X~! zQ<_B)ogsAZs&EsNl7L{CIvZ0CVzc3+uD`71wXCY1;OHz`#`|Cv$&OJbr;U}cX6X#R zxVPERRYb&(8&yrSwZ@fde=)XKwF1R<=IvhMf0QsyXM!#~3GQ9O4DubJglSd<+sS7Y zLtVqp$6X$&yO#N|9=1`q!+FL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/61dbea04cd70f8d839ce849a05526e294ea7f15d b/fuzz/corpora/asn1parse/61dbea04cd70f8d839ce849a05526e294ea7f15d new file mode 100644 index 00000000..b2783587 --- /dev/null +++ b/fuzz/corpora/asn1parse/61dbea04cd70f8d839ce849a05526e294ea7f15d @@ -0,0 +1 @@ +* \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/6228371672ccddce8d812e4550f7e9cc92d217cb b/fuzz/corpora/asn1parse/6228371672ccddce8d812e4550f7e9cc92d217cb new file mode 100644 index 0000000000000000000000000000000000000000..be663f8cd0c74c7fa366fd01adf14ff20026f13e GIT binary patch literal 56 fcmZSM`;QC+*p&Zcia^1?|NlAJ%sE-2czGEB)SM?Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/63cb0bdf51af8a6c6615aa6ba96e278384b79f34 b/fuzz/corpora/asn1parse/63cb0bdf51af8a6c6615aa6ba96e278384b79f34 new file mode 100644 index 00000000..0e1e5409 --- /dev/null +++ b/fuzz/corpora/asn1parse/63cb0bdf51af8a6c6615aa6ba96e278384b79f34 @@ -0,0 +1 @@ +HæÿòÿÕò €€“ÿ¦æÿòÿÕò €€€€€ÿ*†HæÿòÿÕò €€“ÿ¦æÿòÿÕò €€€€€ÿ€ÿ@¦ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/64304175aba6f8e44e22ea56fbf7e4ee5f9744f5 b/fuzz/corpora/asn1parse/64304175aba6f8e44e22ea56fbf7e4ee5f9744f5 new file mode 100644 index 0000000000000000000000000000000000000000..1621401b2d2fb2855c417cddb0aa8a3667b1b5dd GIT binary patch literal 4 LcmWe)5MlrT0B`^$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/6483a861728935b7869adcdfdc7a75e9ab821b6f b/fuzz/corpora/asn1parse/6483a861728935b7869adcdfdc7a75e9ab821b6f new file mode 100644 index 00000000..320cdf05 --- /dev/null +++ b/fuzz/corpora/asn1parse/6483a861728935b7869adcdfdc7a75e9ab821b6f @@ -0,0 +1,2 @@ +~ÿÿÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÙÉÉÉÉÉ75ÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÿ*******!ÿÿÿÿÿÿÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÿ*ÿÿ* +**ÿÿÿÿÿÿÿÿÿ******Ï**   \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/648c44dd5372ce0e96754d0466dabc2fad1d3581 b/fuzz/corpora/asn1parse/648c44dd5372ce0e96754d0466dabc2fad1d3581 new file mode 100644 index 0000000000000000000000000000000000000000..09a214c50dcee0d9cf6e89c36920b7af3d6ea086 GIT binary patch literal 11 ScmZQ#VqjomVqjokPzC@1asVs< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/6496ee55bd78d06d3a055bb28b190de747c80e26 b/fuzz/corpora/asn1parse/6496ee55bd78d06d3a055bb28b190de747c80e26 new file mode 100644 index 0000000000000000000000000000000000000000..abd63eacb36bdeb4bfa6c632daabce61046f319d GIT binary patch literal 34 Vcmd04$Y6NWkkOFQkOL#p_y7(G4}|~# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/66924c54a6f07a37016d2aa9ce0e72b049ec7367 b/fuzz/corpora/asn1parse/66924c54a6f07a37016d2aa9ce0e72b049ec7367 new file mode 100644 index 00000000..00cf767f --- /dev/null +++ b/fuzz/corpora/asn1parse/66924c54a6f07a37016d2aa9ce0e72b049ec7367 @@ -0,0 +1 @@ + diff --git a/fuzz/corpora/asn1parse/674692502ba76785f04cf153bc88cadcc5d02a36 b/fuzz/corpora/asn1parse/674692502ba76785f04cf153bc88cadcc5d02a36 new file mode 100644 index 00000000..52786074 --- /dev/null +++ b/fuzz/corpora/asn1parse/674692502ba76785f04cf153bc88cadcc5d02a36 @@ -0,0 +1 @@ +xÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/678527800f4f36fb236064b7ed342cc29b44cf40 b/fuzz/corpora/asn1parse/678527800f4f36fb236064b7ed342cc29b44cf40 new file mode 100644 index 0000000000000000000000000000000000000000..404e0a62b357f5cdb91066e60cbe6967b43cc178 GIT binary patch literal 10 RcmYdlNNQkUc-_Fj000yk126yp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/67dd3269449ef59d817b1e885f8de7702632fddd b/fuzz/corpora/asn1parse/67dd3269449ef59d817b1e885f8de7702632fddd new file mode 100644 index 0000000000000000000000000000000000000000..063ee5b125006009f68754496a083d104b62170f GIT binary patch literal 16 LcmWe(5J70*q=c z@B?p)OXTv=_L94#HC7Foa+lbO{KeEF=pAfY?2ovuV66>r8+gP*(+VWxg~WX&F0$*fs;1=7BV+yO-ds zvmn6X_|DrQ054R<2N7eEpe$onKMXUBJ?R;n)3#_wgES>$rbeYp=?(?rJ57F@?y~=T zf!o8Q%WHAmtId^=LN^tt5o^SOYn8Z0@X8z%y0D7)m#keRn_f6e?RZ>SJuJf-1ZGEpkfs==}nolK=u6ZLu< z$HOlS^D}2)oHzFRs`$S^|Botpc~52pltzz{!MXn-J^+deV80y*?l@BD9{ ztR}ZEp25}F*x2|V4Hz^s7&J1lH8QXMm7k1hWd*>I`FGyzTR8;Dto+|#>0Vc3SI z7AjAQT9A8T`VhXrZZ1S^sy7=0JHwZBh%QYWYDsa!U{FhXI3UIGmY-K%f> zk@yoy)6UVH-vQtZ0Prva09?A2Id$EWA%f&n_wfY){S9a!fO*44)&^N4#|mzK zd*KQyxXHP$43mp*YI%(?I1_HiXzp?{yN33bt2Rv3ua*)a3XExOaEkG%DXR@`bjQ9U^Qc?y&QT+v z&s1lt2Vcz+r$WEDe=2LUML-M%u2R1CV4)+#pWDc>*LPYhVtul^1Vn)`Z3390O#p3r zMM8x!-5b%~)pOPcy{nPg5VTII?GyDgQe4O!FYYrk3c&Pzf3Vit>#AH1M!5skcwViw z!!QiAb*g#9?D!8DmXf0s5e3Fj%>Tn%yX9mCHL5Mr&2+q3!#@2A(Ez_F;aZQsw&HI& O7=txFf<|L+aP&VFVq6RW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/6b322c3522b7d9feff34c50b5d61364ac9cf2552 b/fuzz/corpora/asn1parse/6b322c3522b7d9feff34c50b5d61364ac9cf2552 new file mode 100644 index 0000000000000000000000000000000000000000..58f5e02cd2d0d672e90bf68df2a04fbe5437f5c0 GIT binary patch literal 6 NcmWe)5MmHw0002q05<>t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/6baddbdb36d8f9cf1cb9b92c67158fb8e7aa505d b/fuzz/corpora/asn1parse/6baddbdb36d8f9cf1cb9b92c67158fb8e7aa505d new file mode 100644 index 00000000..ae7a46c8 --- /dev/null +++ b/fuzz/corpora/asn1parse/6baddbdb36d8f9cf1cb9b92c67158fb8e7aa505d @@ -0,0 +1,132 @@ +‚!yyyyyyy +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/6bfeb121cf9640042c2ba042bcd6aba9ad695b13 b/fuzz/corpora/asn1parse/6bfeb121cf9640042c2ba042bcd6aba9ad695b13 new file mode 100644 index 00000000..d67f4507 --- /dev/null +++ b/fuzz/corpora/asn1parse/6bfeb121cf9640042c2ba042bcd6aba9ad695b13 @@ -0,0 +1 @@ +‚€yä \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/6d0cc8ef2d7eece8ad77d1a88457a0da365ed392 b/fuzz/corpora/asn1parse/6d0cc8ef2d7eece8ad77d1a88457a0da365ed392 new file mode 100644 index 0000000000000000000000000000000000000000..46cd624992513d1d589b805abd1bfddd17c43cb5 GIT binary patch literal 1328 zcmZRx`m|&Er}fjPpX%+M|4EUz|I?=}r+Vjq`n2Wwr&A1!^PzHk=dVA-!@$4*l{^0F s)cm7dY-oBxx<>U5?ywq-UvOFtZg9%aUL9V7)e&>-gdSQvSTQcP#k7JQ?^u>ubD; znKWb)0B|`f@gtiHjLVW=75*!cy(LvWSRAyq=ut>JhW{#_DCYl3@PClZP#p;?Wk?B= zU)ic>w%gob{?`N0N8eb%|DmV{!T(7@-W4(li?|$>_`&>t`LgwwE_&LVRPi*exR>?o zP-{DO4F7)xXcYXP1pf!gj57mu8Bfk^m-)Y{vA}$`P3{9nr-U#NWJvgB7i6AI@4sxdvJpxes)|K87lyjDO` zGtB>!nEwaKjMq5rsr<54&uka|S793dGygA@w5{O+;Y_KUq%;4o<&Q5^zHwRdtDXr3 z{D=Q(^{S(;b=_Kae1v;mnFX{{8u8kLd8^ttJY=7ulkz)va*^%rHA!r1#|!NDt}(Ht<3-Y{MXN)e<3<&O5Fei{;zeh@{P-q zU-e8VnE$IV4gZ<{m->`aH%W*8Yx&~~m2X^@{HpL@iF`Dv;%Qoomz`HgL2s+YJ1(B4 zzt10BN0rnJ_y3ccV|@SfC7E#ssAXk!X1g6!-2W7Otpfj<|CdVI)^JUKrqm6Y=(211 z;|rBu0tH$(@f^IAGKllIK|Ns2?^LJ72ue=P|UPo$ldn&(dRrs%i+Coz; zUUpvFb6ZT)@AC)OQ6)1I_dk=GW8D9INoJe@YFSyG*=`F8_dneK{9V=Zssy^j?Zx)S z2mjZ)cr=DgxV%=a%aUIe{wtBp|J?%Se-%#@^Zz7`yrDJ2|3@7OE5;8gNnJJom8}Z@ zbx`mh{k{Qn-eDQYfd=M`qHwmk2Di=SBFe^lbf&B;^+k*rFW zoutMRD!;t!buMKKhwXMy>H7Qm1z-Q0^84QgB~_8t8vHN#qV{!QOU?i?O}axSaR!&8 z59SJd^3YYzgo63M z>Y8S5t9<{@_y2$CllL>FZjuiF*Yczem2X^@{HkX{0spHo9a6yj&-^caN~xQq!~eDX z@rBAaE=zt@_^(86p{W)xJFk!e_z(Z3PbqbibQMIhUG9G-HOH?0l%15g%>B>G(;YNb z+)Y(T{=DFSWB$&gO3nZ>O98T$cQ*XF>u0dH?(7gGGq{j>ZR>*76JqM`MzX%WKuTEcsR8zY@6>DyAwV ze_o;1c3|*LOdrfs@rSR6=s?v$Mu^FQDJES0paVSxMyGN~Yv?b2l@sj-C0FXPFX zP&5uQ|LXzhqdV4{9ra+Ixc?cI02Tg6Eos{Ev?)$yq=x^$ZjP!BD|q_-Qm|vk@IL}W zVlthyWT~l5=Kr;l)D7)Bu*$eB`Be|jYZ`x_Pw)+2eE&JhpI1l${O9{m$w%i*sT(rE z|F!(_g~~TBOMcZeq3EDevBH1e|GvrxHN<~Mt)@8}B3jdYJtxz#l zA^G##jzR8!bQn?G|4eF?!}p(Gk{M@!TE>$z+wJoj^MAo@1^jO=_B?HRVF&-C5$z+igMN{)hXYPk!+Y|JO?T;myeu zm)ELwS@NsGeBsLnqya=vZTc2p?4pwSB<~V zH+cOI#_xX~{GTM`g(=FANm#_? zsKk$ z(^?mg#*hh@*Q#|{@~gssC2}iNOjSt!ytZSI`yU-f6gLx-TIF25nNYRia#Z5Sa8na1 zzl2g!^xK!yMP9=MtQ&W~w@p4wL1b*Wso@b(?Q>FAmG z?>s8_AC>rVb28Pmm8?paoutMRD!+^;2kTYW-_JLA9pAkF9h6i>R%<&j2>*xk7zCLn z-60eFUn@ynR{8Ls`G3!i75rZpDEyxU{|Cv8GXpjJhyU=uBm=Jn3;&}MKWQfE zx-9usU(;XKSi*Hxzo_8;hwncX%vbrK&UxbJzeafn&y>0W2>f5mA73Z{)WgiM;G!~eCC)ZKi_lKiT#={LtG`GrF$;6MC-^TooP zC+7cAz9P?*x=A|xU&|j~C;;QKBJeM+gDq^ls3?Q+XDsX2D_r>v#K<>6Kd{wtANXsX3cRY?B4 z;D2NOj>e~>O3nZ>O=^x^B@-^Mm85PUb*TI@p1^-4aw}BI&MTx~2L|7~razdcPrm>E zpa1-?Sm(e0`i~b&ea9gy^Lt`xR@L7;@qtD=sX2DF(MpNSLt{BuvU*;B4srbt#*Y9G z^5;bh;1OUcADuI$4*$O%Q5&>>6#iD3Q2EAX=~F_{#~AouaA6%%&}}WAgn0x|@kBA1 zPP#Lh3X8ZLmH07C>Y?)Cf1d+en)nrPC01xUeA7`aqdG4OYKZ@i#-|-8l?eYQHOH>r zOyKfbN$TML<7)oTXL**^{xPV09}L3(b%DbFN$`J=%s4XumGR`vcKf`h>yPIRZf838 z|AP|tWK%%5mHVIfo&jGgAUOm0KS{_7QX z6{crf;XnNU`SW8+-6S3UujNS{D&M#)`BmY+61ioX*5YO76;i$z+wGvz_{;r2_y4a-pqq_9I~t$nfMhH1f0B?FW)edtTwW_lT~+|bWy!A!|CPwC zP$@gFP-{Cd$o#M3iGu%=;Qt_*aR#VmJUO%74l3sVg0B_fe{*q1epKMDR1k{M@!3jg~(Kr{WL zzot=hDLbz)1+?X>KZAeM(KGSi@dwvY!T+elkDHSzF0WPVvgB7iSg(5h`MkmHCCBgo z9OTan{&WAol#kAtQa1w${9nr-U#NWJvgB7i6N)~s!GFI0Q7~WSgBs$`{6EP%c&5}1 znc)9g{`f)x7?&l#>X}f$|Eg=6kb)f;Tce$ zNq$xMuS9O4sTMa?A^GzPwFdtSo~T|cAUOm0KMDR1k{PdY+Ee*utDf0z2bGHTd4t>O z$o>DIggx050RQ2?R&w(7xp z<^HGOYeo3a{J#|Z|NWOQ-i+;a1pi;(*$RKp3ho~9{r{j3$Sw2#a2|uWnV7VkrOjk2 zEaGxh;>Ym#7CM%3S@Nqg|0|K-@F}qEz4{si{;PPR;Qu7}KS*Yr0cv^Ki-Khfhj!IL z#r)6x&rmQy33RjZXGh~x1teR6|C5BgQ0fLCxV%=9x~u?<%aUL9OuK^rRbzUnwH+8_ z{#Wrt!T(9{e~`>L1Jp8}oY^k?hyQOjmhFv?$#kuxAKsiyae1v;mnFX{{8u8kOw(E% z{x>JS#gA$vHN*TrsU7Ln-%Ox_z~!jKkDFaq@~gssB@+I33*N-^!94N(|ENzXbu;Ox z+LGI(KGSi@dwvY z!T+elkDHSzF0WPVvgB7iSg+jw@cqAn`6?gO?TrsIt#$Ee%s_(6Yt_0e`BmY+61jD# zG*uz_^V*I<=6@YV6!$-qTIF1QGpTCB<*3Aun@?GiUlsl zwq#Yh?4;({)h;U~E)QJ={wtC2AO6GtS)L*A|2R-hmzDh4!GHMQ#|s64`yUlg6qD(s z7M!b-sj3Z^qY^)c#&V_0N`6(9z0Reqv4rim<$3?h`(NJw`ih(jXVVY5?J0G$syLJQ zK$o4=9J|_OrNrf-tH6IHlKUU-f4Kjd7W{wIk+5R?kZN6){HpL@2L=D(Km4EN z83O;057cE{1^&Z-?*Du5Z#MArzmwqqAaBMQpu+#}ahoovl$}?Ywc7I4x5K>u9m;(W zH`9|^xUb$!s~~VWD)D1@un3i3UiLbdvW3HTJE-*fvy;334Icse#F!+#w{6#SnA{|Cv8GnHS)lQY}xpkn^#_x}t96O=$V8-I2*KDFv( zEAW4kkQb&XLnd5aD@k2e0LEp>uL}Q_$gNN*JFie{J21%nui}Y<|C8YVAenInsAW7k zv)v9VjlYX~{s`gzpMJFW0^I*giWmIvnb`2+qdD9bhyPKDA2%mcTwbfzWy!A!|CPus z)3g>Z>(}rf{x9_@rEZe0f=IT@Q`V&B*wwGBq{QW+cf)@r68?7!xc^b{L_wxWcgUn_ z!{w;NkAc)-@-tml@~gssB@+I_f9`)~d4^meld3IQl`cE!PM4Jumxrzb|CLDi5C7r+ zEYA@5e;laH|NS1gvHM&6QpvLO3boe${QUgan;CeWfD+y@nNGShnQGd?<*3Aup|OO@ zFE4wYOWDFuwmH2VW1iIPy1OF#^2hWtcAroD8Eq{Dr@-r?= ze$_Lffd5t3G$92$Fv$IniYJQsf09PtkV%tt_`ga_xrnt}h5;Qt_*@fxQ+m0z~%neBE^saT&kxSfuC|1&6IPc{X>fA}x?=$t8a zLnaMG$#&_olhjzkqaKj>aS%m)ELwS@NsG zeaRhMSrzE=zt@_^(86nWnY4sS3%TS4cr`tHon5 z{MTVb!T(9{e~`>L1Jp8}oY^k(e-)*)H0r&*=`F8_y2kU^3fQ46VnItRDAIT|JO?T zA@hF}{C`M3%oi2H-}4E+mmJ^!54u=uy{#5w5dIJ6F^Ktp(z4XeWZM2Wy#Jk*r0!;y zmHes)=Qa3W@Y70jTZRAcT`av;KvFaCe-iv3Br{&)Wcs0$qz?W+?&bOY|Bw3#`2T!* ztZsZvrfb!b376NZby@POo@rP8qC(^Evx0lcasM;OpBM9gi&4*0@q-U!TI*saO<%_4 zwQ60K{HpL@iQEbmQx%dwFZd7tm-5j$Q|cz^sfWzE?sugoh~aSE)QMhOep&Ex~{*U72MIw_dkRD zdBK19zm$*8nNo-U-2YG4Rq(%RT800ruPR4hv6z6A$#l}4$&~qjtt55Bq#i1NTl&iu z4%>zQRkWIIEq)Ek{r|c^;r}G~KS*Z0juU$-ziibr+lBvCn1=t%|4SupYZxHUl)6be z^Z#1@_(J6ymnFaInNYxg`2XgEMTmdTQ}KfjWLnEJBpi)NIxeqO>$2omh5t(AR;ZY& zko$z+hzW*!ZiHn`_HA4wlxfpXG+~9UDH;wUApWfHI`8M#$_pS`FJSc zKm335!6L+e$Ab@KTFWye9F0jjF0WPVvgB7iGZeso_z(Y^d_@MD?rd~>GHF(Y|7%^$ zg>hN(tHOUJ@*CFL4m!Mv>4SMHe(|9kBsIg$#H8lf)i2X=d95UM!%aPgHyDSV<+q|4HzFkj!|E)1JyNTlLI#JE&Bw&o_9Tj{N@TK?!@ZDFFV% zf5}JZOsN|(X&_3rOP8Ib#u6q!PNmoH6+hzWr)Ev9|mPJZjX8vD!x`U>QyQvDv zpBMaZ%-?xb$r(VVNy{oSNmoJOa#Z5SKpuA1p%rcQii8w3cT`I2x05TwbfzWy!A!|CPwCP%%{@`SS|3 zwgZE2V)|g7`1!9o`Wi|4HzFkjyv( zRQTV!NHhJTX{vFj?7W!&`TldMq-_lY*8>V1KZr^;OI+&;8i!bFM0V$K|q$NuYnQ(cn zBy~gk4wIj8S@NqMtXB$0RIJ?pbN~M;AJh>49gR-~n{0*o zf6{U$F=WE!wUX2^|1A1XBlDdJ^S6r6- zs_7%>T^)(x;TVNjm&r%O78;eB-j@SB3vdypEF~@vw@UC|iQGa{EnaqB@Spd;OMObIo208ClI_C( zNzF0%|0HQCrnl2naW_>VB~>x>>+L&!^P2wPJi-0{C?B0OM`Mz%f=IRt|0lu!AKRd} zZQ(Pu)|{!vApD;yunRIxxw?f5Kh2+m`I|jM`(P2a}nNGShnX1}wIV$mEnAAh%m+=Jt zE0OTOTLAxKVM_3S68s+|GtK}N{`Xs?X8K3prl`4;omZFw+VZ^reKP~E1q=V95C8@jFWhK8V{8u7NA1n^qTKr>B@L$Cf z1^*|(|3Nb2Oy!#{DSShD=tfZ)z|c!gaZCo zVH*Cow4n<28*ZZ@AC&&4w5tA z{%2Bi?CO_^xV%=9I_`fST;}`FRjt8)e*cf;0di*4GYud9ujP*~On$~?$*+1Q6dhD5 z*5?y^M;gEXZIC~&kOKG*|0N%tGo^0G1pn9a#}_K!xGecq&x8X0bN~P5#Zrj>j>ZR> z*76JqM`MzX%WKuTEcsR8zY@6>DyAwVe_o;1c3|*LOdrfs@rO^!L2?G%|4(X;asU4% znQ^87%6M{SyB$<|Sm*wS-~aro1iIPluN{pK{;zfMXbhQfd97NPCBG{CS0cAU#Z-ml z&x`rLjS=vFl8?@rQa4FgwI$o-DQi-5?CMjNl(;;MRcAuc>y`Px;B6)RhyP1`N~y#D zulb}w`$yp~=na)`T$Vm16!5?5wmPI>#~950zltY{$#l}4$y8Xx<*3AuVNws3U&a&W zepmCBN#KP{98xT7?wsz##L#iYJQse-iWmAenIn zsAW7kvt9TP|KDsZ+Z!K~=~_uYym>Q$%WKuTEcsR8zY@7+n%3g*zd7;I7hgK6q-L1^ zCpE{ezL~`3wUX4`?6Q(y75*!c@V{H|CZ-SOiTnRipHk{((owY~+oj7+YK~p)vQpym z&{YoBEAM{`ep+e!H3k{O@0pHq*bwrE=MMg(;x@`Kzx%-gNX#{CE7pH3z`|sKk$(lPNB*RqL|k zS3Ov-y8ht%f4={Jl@IFn#s`_!x_C5ZAi?FeYF(E6s_39H^$tO8)HNKm70Gg@VBSkBTRX$#hZ+&eh3O)rQMai628_ zxzc4NzpBb!=Tg>K!gky8y#Lh;aNhq;@PHCGydvHVu_!=M_@W+iLNS z;s3fo;r}G~KS*Yr0csgf&TNac}@PC$P2>d?|RMTZ8e|GR6{`c`h zLE!#h#S_J3I;jQc>SU^F!{w;NkD;+#>9UevRb{VpDQhfYyKQ;y|GEF?{@+*RTsWIv zbnhv3v#L0g_&}GP)Ev9oWu?UBp{u}uC6fCe?ti%dndKQ0Iu`tY)RC}a{E%v0mi(&l zUk3&M;XnMJvs_ zy7=q;F0K8)|Lp&r=YOLLdfOI0GX*qLs;tnC;eRYl3I0!dly7@@8p_iIQk=o%sKgKW y|9CbZ0#*sVklf0JMN`GyRE2ag1v_>O|8*Eq@P88gA0#u*RDKyx&TO}X>VE-SSifcf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/6f1b1edf6d98ecae716b7272e90c067d7bfd0a8b b/fuzz/corpora/asn1parse/6f1b1edf6d98ecae716b7272e90c067d7bfd0a8b new file mode 100644 index 0000000000000000000000000000000000000000..da4f40c5fb23be0b6c15eb03a8a9963302c607f1 GIT binary patch literal 797 zcmZS6n(_V9^esRC|M<@hXPsfg5dER}|39Ya{~y@Y{{Qh`5moIQhz*L|)4M)l*oLMS zDo=`9Ebhg01JqoI+Ei~g26l!o=@3y(D!73Z_tHu&>EVDH^VA6ktxwZud`C@DTHo0e ZXZ(lSwjY+xP!kXkrz`rXN!b02ZMcD*ylh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/70b8ca261799cc87fa069e46bd84a4d373842315 b/fuzz/corpora/asn1parse/70b8ca261799cc87fa069e46bd84a4d373842315 new file mode 100644 index 0000000000000000000000000000000000000000..b4f483e9c12346e1a92d1cee83e27d48f2b4bfdd GIT binary patch literal 88 gcmZQ$U;{xPFbQTeu)*2Z5J_C5Fq%Xr7(h$`0Bjxv0RR91 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/71143e22b97a233e9c57f842a3c0b101b2fe9a8d b/fuzz/corpora/asn1parse/71143e22b97a233e9c57f842a3c0b101b2fe9a8d new file mode 100644 index 00000000..c55cd5fe --- /dev/null +++ b/fuzz/corpora/asn1parse/71143e22b97a233e9c57f842a3c0b101b2fe9a8d @@ -0,0 +1 @@ +E€;E€;E€;)€;E€;E€;)€;E€;E€;E€;E€;)€;E€;E€;)€;E€; \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/716bddf9a58ce3d7da4ba4fd5e575dc85ba7299f b/fuzz/corpora/asn1parse/716bddf9a58ce3d7da4ba4fd5e575dc85ba7299f new file mode 100644 index 0000000000000000000000000000000000000000..7e5093db9fc94d4a1bfdce6bf6939bbc112124fb GIT binary patch literal 133 zcmZQ$V5I*Bme*a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7212d3235b8db3e10ae09fdb5954e5f721f5a71e b/fuzz/corpora/asn1parse/7212d3235b8db3e10ae09fdb5954e5f721f5a71e new file mode 100644 index 00000000..bff82f62 --- /dev/null +++ b/fuzz/corpora/asn1parse/7212d3235b8db3e10ae09fdb5954e5f721f5a71e @@ -0,0 +1 @@ +¾ÿ€€€€€€ÿÿÿÿþÁö'¾ÿ€€€€€€ÿÿÿÿþÁö'¾ÿ€€€€€€ÿÿÿÿþÁö' \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/72d22ea3ae064acf520133fbd31f7febb3df9983 b/fuzz/corpora/asn1parse/72d22ea3ae064acf520133fbd31f7febb3df9983 new file mode 100644 index 0000000000000000000000000000000000000000..dfb73602071fdc2b9ecd4629577937609c33d55d GIT binary patch literal 16 LcmZQ!U_pTZ0Wbg| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/72d9740060cc4f263c0bc14d39bf310c934cdd2a b/fuzz/corpora/asn1parse/72d9740060cc4f263c0bc14d39bf310c934cdd2a new file mode 100644 index 0000000000000000000000000000000000000000..7f91255e49acf4bc7996050ce5d4d2cd23913ae5 GIT binary patch literal 32 VcmXqLFaSdaFfeFfU;yzEJOFIq1%Utn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/72f38f759e0eb4760b6cffe60767cd8de68af052 b/fuzz/corpora/asn1parse/72f38f759e0eb4760b6cffe60767cd8de68af052 new file mode 100644 index 0000000000000000000000000000000000000000..5897ee44e97025300d043015ed6775bcac8dd06a GIT binary patch literal 552 zcmZS6n(_V9^esRC|M<@hXPsfgCaQ>46j^Nz+yv}u6}hK(eZsJfa<#~AK==Z?x!BZd v;!sPPd&vtk65Px9oi@c;k+|NZ^_(~#vG8yg$J1O_;WA%Y(;FfgzpOrCz~ z)ATJn8;)ITU|{10bAC1)`@EoW^0fwrYn`uij-6$RHwaj0Sac~}$Iw=+b2dzO0u zgza7gh7p8DLy=k^l+7v10n)TA<*kP?{8UEp%;v&DD>5*FAZ7Ct_}ceJ+fk7I+pdmk znPk?WC8ag4j^8eyuUKr9m>W4hXYBNo%@%p0+MI^$vEpAFTzyclcFd<_9fqLOLo?Q_ zM-k)`b~$1E3=qaGfWR8cXb6lTCKIl@1RO2cG6*oRULHAPa$YiE*whFD5nNNy3!_D& zm^Bg|#kB^O6hgPAhvRshSjdi$@VTy_A4Q~Df1)GGgi?u6#vYL>i^ruRSvou17dZA| za09qpF5vnP3IIVf`Y^bIfiLjo`ulMKm;qvYoXW(E9>x=kVsWWN#N)C6lbXudj4=UE zmB@G^345wYIA151nZ8^$z*;4jnVAPCP9-jfk0$~GcF|uYYy{B=xHkj{n2r!I4Al)O zak=`_@>ADVwW0?u+z_YxEU-_r;MFgg@X69$9OvbNM6|5m*Pn^cPBu?Zo4ho_4hsJj z?v%a$&v^G2M?yzdWza%PH@^*K!Ulmo5_gA^B$PbIT)U-Brke3tN z|4RLs-1X^;JHM{Vt=xNt)*>jh6EoJoa_9bdbE?NZUg#{l#YxYH7O&m7HuQKM7Fcs` zuVd=c5#)}eC-0v2+IqKW$>xC;<4wmJGa8L}uARxDm+<_(t*ryvfA~+`x_+}G7I)0L zzdI)yp}`PbPN0VXf$j$m7%ket6{Qq!;)%gVM#eN)*FpdRXObkziwy`C1P=Be2NKETSkah1ePePdLW)TSW5MhcQ5-Zh1;#2hykxUPfi1m;p14KqxY3Jby zcuArZ>g;z(r=~~`TDq1UPb93=Z3CU!CE;Qb zKb?~(<9VkT3PRUY2Yvqh`P9tRL?$XVaOMaJQ;kAYYhr2;gJpwwtyRJ>It$DIo?09r zIZp91SyHf%Pf~(Nw<zh!G4-Ff2}C1|tXn6pIt;4h90(vVLXGIuZY3Jz{DK_yN`Q4`F{Jk&Kl3%3xB*=H>;|?_5Q(E_C*!jGvh)oCd6M|@r(2NA;V34 z8ge&3i1^iU<`)mclSc;nTxgGI9u-e~<8blLQ2IwvGfx)x9RzaZ6Q6vSk{^66_@0Bl};v%f9~s4cXtR|Vm~?NRKvt?n@<()qQNk^n})y+dx+k#ACntR3imO& z`9CE$v>eLwSfT_i0}!-yRS?uAl2km>h6>8*vphJwq$HsvP9zcP`AjMf^Tl|oK%d6a z2H0*vq$@Yz^YjrhVXp1L;o}^U#1NmGWQeCGbVYhfHV&_Q9`Z4{5&yH~hO64+kIBu) z&Nx=^AGY5n(^N(mVBs4QR;!tpLKOoK`>TM z+`2kxOm*I{XLd>UOGYocwc_}*ymQV^W_0ox2Yf%xE0dW7@gXJK@sQ#)8j|sqFm_%R*_^Yoh9N+~!%G}BZ0P}8_A;Yp9jjB_bM53GInHH?D7-ah|BjxQomtU;f z^T;w|Wwvd`{gpOvA~H9BV^nZ>!Ko{ugKc}Q-hZNyZS3#Y>z*55%Gi6$w=}opSl@Yh zadnfX@3h`(ZQs{-Lrt?~(fBd^h=<>N!5)03(?c|wRWxo(V+2uak<{+>$K&e${Vzmr z+i)$$F|n|2)3!1GidVniD;0{)=2ncDG>kKCL&0RL>E=s&t=qPs!fM07KUP~PGooqO z%h>6&XA5puev!B#XiRF!c=s8>%Px7=mqw#U+nbmT@@)fJ`s8g~C7xAr=HS!V<$}8z ztM5R2B2L_+Z~bj%)`_H*qa$lB-1xj$%z4fVXiPo>|6o<;{1XePvNEJeWAj#roAkA0 zWCVdoLz}ly?KDcaHXfCnDvIT$alL^jW$mWc{WTPJl#rh)6|%#GQkf`L#OKL`T}4dF z{(&#>_vL~?lmnpbKM(}!(Eo~$`HK$cc4wm-Pd>gF6BzaTtcgp#J16xEcpKYv zdU-{V9dw`w2`Vr(?+oPp>|nI|#e|`FZ)1lYUXCli47&3=Aj&%Ea?AkF8$&iTkN7^a zrMXQ(lYg&7{e~=tAP9nQ2Oc&K$evT0-pm5+vuiycBq!W^h0tJ2s9fA=iijP#7gr|sPxHP@n8K)@}(7fALlE`r^s~mvsR+yZBYI5R4@}k%$KeSv9 zaU!2SJsEi=EO6)dAj9@Tbk_R0rvofYAB>4DPs}`MeL1}Is~NLW-d0`f>uVQSsT{=I zT72-agx8im z%&HegZBs8*srTRW*KP4yvXmsrJ*0CnNnWQ)$~T#d*OK3nB)Ns6Y1(^8XBJ6b?<7g` zL(;dj{M@j6-yKu|>Ar61YQR{qrqu-@5X%iyQt$|UWB?f%BuSlZ=&uUh3Jna@HZm72 zl55)(keCKcmHBN6%KWw>Qzg|@=C`fU{1)Z68NO8Jx3!tBp_r&?A&gFTXy%77dOpQp z^0H02_Z8VeI#WG0ZPP9)=AmorQ9ri0^KXdb8XOcT2N_@9p>< zxmLTc>b=xVLCtG$0$`Qiq27N(7`?Ni9aE#79`$ghiwd{u^z=bqeNAGfC35wabo|4P z)W%R}3PH#=vVmMhZiF#Cz z2Y}nQce%2D8TGygP8ADKzK;bnp$3wZnS2O9|LalI6a6h&fL2`e-IYk=!nr-!>GpQ6B9gXaGi0n1(>m8|*du8i63~qs6tq6kWfq!7&K)h7mQS zl*wxl#9f0S2ts)V3MkRBPx1&gWN25C(FIzPAz<)$3?Bd540``ZuJ*1Fw1bXWK_rQd zF&w6jH18qm=^})Ir|yc+y7=wXHCmksgTd%=v=D}ttCecp)M6w_R*{ujATg5c3e|rd zzjbkalsx3`^H-51lUc0CuZFJCx*!B%d1>hkMi*TT+Bf>3$}1?jg7v9tcrSkspwG`t j=lj}Vn2m>a6V=eRLwV%{hQY%hART?0p*8c_0KEJkmeP&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/751f86d4aeab445a0c57553b295ca777619c8119 b/fuzz/corpora/asn1parse/751f86d4aeab445a0c57553b295ca777619c8119 new file mode 100644 index 0000000000000000000000000000000000000000..40907023c462551d2bdeb32c46e1ea554296e9f4 GIT binary patch literal 22 Ucmd04$Y6K_!3`M=ISmjJ0CF}84FCWD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/754f66d6dc31dd6fa9ea1b4628182e794390f006 b/fuzz/corpora/asn1parse/754f66d6dc31dd6fa9ea1b4628182e794390f006 new file mode 100644 index 00000000..e9f47905 --- /dev/null +++ b/fuzz/corpora/asn1parse/754f66d6dc31dd6fa9ea1b4628182e794390f006 @@ -0,0 +1 @@ +ÿSÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/76c66d7ca20fb78eb2c86eca0c36922e901474f9 b/fuzz/corpora/asn1parse/76c66d7ca20fb78eb2c86eca0c36922e901474f9 new file mode 100644 index 0000000000000000000000000000000000000000..3914a1a70dd21ed0cf53d1a21a48343482bdbd1c GIT binary patch literal 10 Rcmd;L;9^K&;9@W^000Bd0OJ4v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7732a61cb61f0871e00b94fd478168197c5eef66 b/fuzz/corpora/asn1parse/7732a61cb61f0871e00b94fd478168197c5eef66 new file mode 100644 index 00000000..2104dd22 --- /dev/null +++ b/fuzz/corpora/asn1parse/7732a61cb61f0871e00b94fd478168197c5eef66 @@ -0,0 +1,2 @@ + +§„€À€€€€P \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/77411fbb2b966c657d2608840a524eb42316a32e b/fuzz/corpora/asn1parse/77411fbb2b966c657d2608840a524eb42316a32e new file mode 100644 index 00000000..4b4812a4 --- /dev/null +++ b/fuzz/corpora/asn1parse/77411fbb2b966c657d2608840a524eb42316a32e @@ -0,0 +1 @@ +…Ÿÿžÿÿÿ³ÿ!–ÿÿÚÿÿÿÿß \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/781d56064c951487176331a6312221474a65ef29 b/fuzz/corpora/asn1parse/781d56064c951487176331a6312221474a65ef29 new file mode 100644 index 0000000000000000000000000000000000000000..f65983d67ce5ec8c3fd42136d55aee1d7c0b833f GIT binary patch literal 148 qcmZQ;>_-M#$ejNEX~^8h#>Pf4L4CkI{nV%FTYfeiyVk(K#ti^xL`+El literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/78e32ee081f9a8f6a6f8f2d358f074de493e90d6 b/fuzz/corpora/asn1parse/78e32ee081f9a8f6a6f8f2d358f074de493e90d6 new file mode 100644 index 0000000000000000000000000000000000000000..127e2b792ecab9b21053dd7f5dd84117600a5901 GIT binary patch literal 9 Mcmb0)WRM3V00kBR@c;k- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/799560f52f036f90a46aa5ba831fdb302b256589 b/fuzz/corpora/asn1parse/799560f52f036f90a46aa5ba831fdb302b256589 new file mode 100644 index 0000000000000000000000000000000000000000..95436c60fef2c505d9cb119b481cc8a259a78f82 GIT binary patch literal 48 dcmZQ)WMF3$UE0TBQI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7ae3b96d98ec1f66a4a3479d424d08a9232551d5 b/fuzz/corpora/asn1parse/7ae3b96d98ec1f66a4a3479d424d08a9232551d5 new file mode 100644 index 0000000000000000000000000000000000000000..4926d1dfb46b723d2d2323b14f9a4db68c7998f1 GIT binary patch literal 170 zcmZSc_>Te({^w(0U_cT2|Np-=OyE6;asU7SdYAwVFmkd{&!qosFk?Z0k&}&))4%`# D?=6mA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7b06d120c65d5835d7b5bef73c6ba77399480567 b/fuzz/corpora/asn1parse/7b06d120c65d5835d7b5bef73c6ba77399480567 new file mode 100644 index 0000000000000000000000000000000000000000..1753a4e726e7d4e6ea46a42a99fdb629532f31bb GIT binary patch literal 1826 zcmZRRZEApmfaw>euRq0LXpjyD1|YyjiZlb`AqsSZ?Pg$La7a&2*TA%U0SFw#=`;pL zN?cC1zq>)9HUj-MQ1&0q24q(jR7>Y5H57%l1hQ{n003|V Bx{d$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7c5ca4dd063af19889fdac67fa9a239d45b691db b/fuzz/corpora/asn1parse/7c5ca4dd063af19889fdac67fa9a239d45b691db new file mode 100644 index 0000000000000000000000000000000000000000..429d50a4714dcec1f57a34f70ee2c6890680e6da GIT binary patch literal 12 UcmZSM`v3h|+uxu6|9)Zs05RhTR{#J2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7c8f1f69f9ef38b06f5ecaefd5e85cd3c33de79f b/fuzz/corpora/asn1parse/7c8f1f69f9ef38b06f5ecaefd5e85cd3c33de79f new file mode 100644 index 0000000000000000000000000000000000000000..dbed82af23231967d7dee91470e93523465c78f0 GIT binary patch literal 8 LcmbQmAOeN}1;_x` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7ca56f8fd0403cee28f59750ff685f2874aeb31d b/fuzz/corpora/asn1parse/7ca56f8fd0403cee28f59750ff685f2874aeb31d new file mode 100644 index 0000000000000000000000000000000000000000..5d621ded7d6053388e2807f67d71a46d0a96d761 GIT binary patch literal 16 Lcmd;L;6i}_0^k5q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/7ccffd29f3624b39ea29659d75ba4167d5454bcf b/fuzz/corpora/asn1parse/7ccffd29f3624b39ea29659d75ba4167d5454bcf new file mode 100644 index 0000000000000000000000000000000000000000..707eb404cb94c3a7ca7c8e502422d524fcde1b74 GIT binary patch literal 1490 zcmcJNu?>JQ3h2Onm0PM*nbNUG#Na$zf6sR!C;(CK uFAEAl)Y^J=Hz)v6YwPoQX9P1;y8$QwQ5I+u6o4oTvMm7k1hWd*>I`FGyzTR8;Dto+|#>0Vc3SI z7AjAQT9A8T`VhXrZZ1S^sy7=0JHwZBh%QYWYDsa!U{FhXI3UIGmY-9#J3sQQ``TFzBk) zneDD6zitk9i|t?QlLjF8?Enq}l_Tdh)snv3)QklX5s{p;BMu`Ifd5D*V_)W#goTLb z7&MGdO7?h-^T=ze^))(SRGEn|2$rYn@uv_@&&C}jI)R;7jBiDA-wZt7t_x$ktdwlmS)jE}G%~Ye~DHaP_B8<+H VvdsID()unSVIkZcf;_JR+yR4}>-Ycw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/85e6458878c3ca34f3f5f87a4d64e93ab79115ad b/fuzz/corpora/asn1parse/85e6458878c3ca34f3f5f87a4d64e93ab79115ad new file mode 100644 index 0000000000000000000000000000000000000000..e2898ef5f2bde057ccb2262360bc57b0d1ddd29d GIT binary patch literal 68 McmYdyWS|%T04$>bsQ>@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/86b12c329271d6a9e5b73b87508fd1eab1c6cf40 b/fuzz/corpora/asn1parse/86b12c329271d6a9e5b73b87508fd1eab1c6cf40 new file mode 100644 index 00000000..6f613431 --- /dev/null +++ b/fuzz/corpora/asn1parse/86b12c329271d6a9e5b73b87508fd1eab1c6cf40 @@ -0,0 +1 @@ +g*g*g*g* \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/86bd257ac70892273c731f22d4a89a2f7059bbf6 b/fuzz/corpora/asn1parse/86bd257ac70892273c731f22d4a89a2f7059bbf6 new file mode 100644 index 0000000000000000000000000000000000000000..66c02f7387f8977514a6ab91b3ca7d24984c1f9c GIT binary patch literal 18 XcmbRLsdqjj!~9RZ?F=AtJ|hDFRwD=^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/86bdf8d0da12d3d3ab16ac02809d015876a81b9c b/fuzz/corpora/asn1parse/86bdf8d0da12d3d3ab16ac02809d015876a81b9c new file mode 100644 index 00000000..fadf8efe --- /dev/null +++ b/fuzz/corpora/asn1parse/86bdf8d0da12d3d3ab16ac02809d015876a81b9c @@ -0,0 +1,307 @@ + +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€P€ +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€ƒ€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€P€ +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€ƒ€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€O \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/870521e65b8463d62eb21c57556998ab40cb0b43 b/fuzz/corpora/asn1parse/870521e65b8463d62eb21c57556998ab40cb0b43 new file mode 100644 index 00000000..3491edca --- /dev/null +++ b/fuzz/corpora/asn1parse/870521e65b8463d62eb21c57556998ab40cb0b43 @@ -0,0 +1 @@ +;—ÊŸòÁò´Ê­ííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõg*® ;—ÊŸòÁò´Ê­ííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Êíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Êíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Ê­ííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõg*® ;—ÊŸòÁò´Ê­ííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Êíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Êíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® âíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Êííâíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® ;—ÊŸòÁò´Êíííæí;íïíííõíííò…á®—ÊŸòÁò´Êíííæí;íïíííõíííò…á® â â \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/873885b3aa27ceb413ee7e711817c00d1ba4db68 b/fuzz/corpora/asn1parse/873885b3aa27ceb413ee7e711817c00d1ba4db68 new file mode 100644 index 0000000000000000000000000000000000000000..6ebaea7b4e9badfb810ebbeef0f47548123b796b GIT binary patch literal 6 Ncmb1VV~}TK0003;080P> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/8751598600d6cbd34d270df2e56f4d9e2add2311 b/fuzz/corpora/asn1parse/8751598600d6cbd34d270df2e56f4d9e2add2311 new file mode 100644 index 0000000000000000000000000000000000000000..51367f46c36b42329838502d60bf99c78fe424a2 GIT binary patch literal 8 PcmZQ#VrXDuVqgFO0<-{$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/8786a346f400899d1a55d2f3baa28722ca268a7a b/fuzz/corpora/asn1parse/8786a346f400899d1a55d2f3baa28722ca268a7a new file mode 100644 index 0000000000000000000000000000000000000000..d27807f99d4cd82f23719b9a24ed5dbe0c5722f5 GIT binary patch literal 298 acmb1RkQ;@#L*VVswbBir7c{QyV*mhSBNrL~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/87defcf77eef5e06e7fec75e0d9cd84587901532 b/fuzz/corpora/asn1parse/87defcf77eef5e06e7fec75e0d9cd84587901532 new file mode 100644 index 0000000000000000000000000000000000000000..18d99118ff1ebff7cd9718a5f1fcb625db6bd46e GIT binary patch literal 16 LcmZQ$U_*fb0l)w; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/887f0138c5ea56aeb46a4951ff5d45f8b9a7236b b/fuzz/corpora/asn1parse/887f0138c5ea56aeb46a4951ff5d45f8b9a7236b new file mode 100644 index 00000000..0d94647b --- /dev/null +++ b/fuzz/corpora/asn1parse/887f0138c5ea56aeb46a4951ff5d45f8b9a7236b @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/88f393c93c1c3df1f63394e7523a0fa15370a7b6 b/fuzz/corpora/asn1parse/88f393c93c1c3df1f63394e7523a0fa15370a7b6 new file mode 100644 index 0000000000000000000000000000000000000000..7a7d2db8d59b316297fd504f0c290356ee9dda74 GIT binary patch literal 58 bcmZQ#Vz6goVqjomVqhXb|AWedX$B?$E0qF% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/890ae975f6f926b27818fc426f028ed2fb959d05 b/fuzz/corpora/asn1parse/890ae975f6f926b27818fc426f028ed2fb959d05 new file mode 100644 index 0000000000000000000000000000000000000000..786eb95c56e50ac21539cfbb89bc64f2ee273c41 GIT binary patch literal 52 UcmZSMp3wjW0a9$ZI1DH<022TdGXMYp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/89111561bd3447d4e499204376a52ab066c5fc0b b/fuzz/corpora/asn1parse/89111561bd3447d4e499204376a52ab066c5fc0b new file mode 100644 index 0000000000000000000000000000000000000000..59e71dceaa828f90eb10abe19add91ff3f98bca1 GIT binary patch literal 34 Zcmd04$Y6NWkkOFQkOL#Ze3)2H0{{~t5D5SP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/8a6ab904613556d21ceeaced34c08b853033a9cd b/fuzz/corpora/asn1parse/8a6ab904613556d21ceeaced34c08b853033a9cd new file mode 100644 index 0000000000000000000000000000000000000000..c69443347e7923bf606e27748b85ffd751e9b004 GIT binary patch literal 6 Ncmb1RkYkWz0004Q09yb6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/8b569a394db2813e79819c62838c42be2aacaccb b/fuzz/corpora/asn1parse/8b569a394db2813e79819c62838c42be2aacaccb new file mode 100644 index 00000000..93bad23a --- /dev/null +++ b/fuzz/corpora/asn1parse/8b569a394db2813e79819c62838c42be2aacaccb @@ -0,0 +1 @@ +0 00**0 \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/8b93741e6f268da1b36c6e5fe2b3a4b5c5069e83 b/fuzz/corpora/asn1parse/8b93741e6f268da1b36c6e5fe2b3a4b5c5069e83 new file mode 100644 index 00000000..481dd0fd --- /dev/null +++ b/fuzz/corpora/asn1parse/8b93741e6f268da1b36c6e5fe2b3a4b5c5069e83 @@ -0,0 +1 @@ +…ÿ€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/8ce3ddcdde60b94d995c797f68a21063e1832f96 b/fuzz/corpora/asn1parse/8ce3ddcdde60b94d995c797f68a21063e1832f96 new file mode 100644 index 00000000..32e816ab --- /dev/null +++ b/fuzz/corpora/asn1parse/8ce3ddcdde60b94d995c797f68a21063e1832f96 @@ -0,0 +1 @@ +1€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/8e05de6ecb4bb22c00d54623055ccd8a0346dd01 b/fuzz/corpora/asn1parse/8e05de6ecb4bb22c00d54623055ccd8a0346dd01 new file mode 100644 index 0000000000000000000000000000000000000000..063e9898a90f0960baeb5bf1b2b820f5e331844f GIT binary patch literal 803 zcmZS6n(_V9^esRC|M<@hXPsfwn!(6`B>Mm7k1hWd*>I`FGyzTR8;Dto+|#>0Vc3SI z7AjAQT9A8T`VhXrZZ1S^sy7=0JHwZBh%QYWYDsYeNUbXk{6>l!NDl|3INtITEgVGQ nVM>Y{6uGrNO`q`{HAQKuvnkH_54CMS%v{t&hZbFfC&>T+TO~s< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/8e7b714886902eb224b19669600ffe9b78e3a721 b/fuzz/corpora/asn1parse/8e7b714886902eb224b19669600ffe9b78e3a721 new file mode 100644 index 0000000000000000000000000000000000000000..4d0718935af31d9338f570ce66780016f8a326c1 GIT binary patch literal 4 LcmWe<&^rYH0fqq( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/8e9fda04421a0fb8e3b4c3561d688530bad6de6c b/fuzz/corpora/asn1parse/8e9fda04421a0fb8e3b4c3561d688530bad6de6c new file mode 100644 index 0000000000000000000000000000000000000000..51009fe9a6ef020da1758213106360ed5b0ea78c GIT binary patch literal 103 ZcmZQ#V8RU<;Zhb1ObkkJ9v&??Te({^w(0U_cT2|Np-=OyE6;asU7SdYAwVFmkeik%0jKMJ+({ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/908bd6526427c7d2b14656f9e6e279b91e707999 b/fuzz/corpora/asn1parse/908bd6526427c7d2b14656f9e6e279b91e707999 new file mode 100644 index 0000000000000000000000000000000000000000..b235b92336cd1d01fd7b5e52fdbb55d4303728df GIT binary patch literal 12 TcmWe)5MmHwux?;vVr&2a29^PK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/918ff0104cd013706ceeef916aace268892ae8f7 b/fuzz/corpora/asn1parse/918ff0104cd013706ceeef916aace268892ae8f7 new file mode 100644 index 0000000000000000000000000000000000000000..106625708d865213ca92bd1d0d2182837db2a7e1 GIT binary patch literal 12 PcmZQ!WMBcK|Nj{P1&aa> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/92508aeb4f1f4ca5aba99177897e0e6dc402b7ac b/fuzz/corpora/asn1parse/92508aeb4f1f4ca5aba99177897e0e6dc402b7ac new file mode 100644 index 0000000000000000000000000000000000000000..01b5faca11dbc9d076e05fced79db1f596bc72d0 GIT binary patch literal 37 Qcmb1QkirY=4Hy_004E>+yFtj+YrTqxW z)>6!k={e-L#Z6Cxs1$9@F6<1^&48!3UGpv?g+xP_a-yf|ytYsz;Ayk|wEC2+SCIsG8wtCqB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/94e2f0af469f470b34d6803aa8cdecfc69290736 b/fuzz/corpora/asn1parse/94e2f0af469f470b34d6803aa8cdecfc69290736 new file mode 100644 index 0000000000000000000000000000000000000000..30dac992b882065145380e10777c392ae84a3b14 GIT binary patch literal 144 zcmZ|Hu@QhE5Jb@r%otOEiHR|hCD00GcywZPwb6nEo&z~Q+>CSAAKk*o>EpsDAxWP%<8^lBoO5k~I{E?9ye#Vg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/951152b031df5dc8c2e5e0979086b399a41111d1 b/fuzz/corpora/asn1parse/951152b031df5dc8c2e5e0979086b399a41111d1 new file mode 100644 index 0000000000000000000000000000000000000000..a002355426eb09db9f1ff79b83bbaa6929d41ef8 GIT binary patch literal 12 UcmZSM`v3h!+uxu6|9)Zs05S6jSpWb4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/952f18a923fc3bb65ee456ba0bbffddcc9b69d97 b/fuzz/corpora/asn1parse/952f18a923fc3bb65ee456ba0bbffddcc9b69d97 new file mode 100644 index 0000000000000000000000000000000000000000..0d456714aaf34fd755a53519e8e5858a6870513d GIT binary patch literal 512 RcmZQ#`p>{Librf1004}Sfq?)3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/96231c9f0acf5412491efc87254159b63ea0910a b/fuzz/corpora/asn1parse/96231c9f0acf5412491efc87254159b63ea0910a new file mode 100644 index 0000000000000000000000000000000000000000..e661ca8a5f821102abb977b14e45f1159c2b938c GIT binary patch literal 258 wcmdO3c!dHL7+x`GKt&L25DSJeWnm&PlMwnKx*+l}{n%xZRU)(T>!OA%0NR{VF8}}l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/967b3ddb70da537b0fabc179a66e002f905ccd30 b/fuzz/corpora/asn1parse/967b3ddb70da537b0fabc179a66e002f905ccd30 new file mode 100644 index 00000000..07f5d19e --- /dev/null +++ b/fuzz/corpora/asn1parse/967b3ddb70da537b0fabc179a66e002f905ccd30 @@ -0,0 +1,2 @@ + +00000 \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/968fede2c4467c63b745bbb08841cee408bf80b5 b/fuzz/corpora/asn1parse/968fede2c4467c63b745bbb08841cee408bf80b5 new file mode 100644 index 0000000000000000000000000000000000000000..24bc28774de1fe3db3677c88d786e41e133c8bfc GIT binary patch literal 96 acmbRLsdqjj!+dOHI|FucWcA2uu(APi$SZvS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/97b49bc5c23ecc74f2b562661852715f0d1fb578 b/fuzz/corpora/asn1parse/97b49bc5c23ecc74f2b562661852715f0d1fb578 new file mode 100644 index 0000000000000000000000000000000000000000..baa80e3fd95dbd849a9b6c72e41897e4e0466d9d GIT binary patch literal 6 NcmZQ#{(psm695LH0pb7v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/97e9a92dc5110bbc39e38fe086fcb05d68e75d85 b/fuzz/corpora/asn1parse/97e9a92dc5110bbc39e38fe086fcb05d68e75d85 new file mode 100644 index 0000000000000000000000000000000000000000..2e335dcd97773fc2c1f47cf87cdd33ed243eddc7 GIT binary patch literal 24 McmZQ!WMILD00JxkDF6Tf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/982e42b80c285b3d9ed3384ca180a793ffcfc763 b/fuzz/corpora/asn1parse/982e42b80c285b3d9ed3384ca180a793ffcfc763 new file mode 100644 index 0000000000000000000000000000000000000000..31c4864a84d0ef8c3644bc67110739cf9460e4c0 GIT binary patch literal 315 ucmZQ!V4*o=WaMOH^hDUBLUS7tcCm0Fu?gAC0#ys97#SFl%>l7dj4t%0?7aX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/98fd98c5c6c83bc36ccb1f5a939029ab1281db72 b/fuzz/corpora/asn1parse/98fd98c5c6c83bc36ccb1f5a939029ab1281db72 new file mode 100644 index 0000000000000000000000000000000000000000..05aea173b9837d471425daf56156215c1b9212d6 GIT binary patch literal 2975 zcmeH|K?;B{5CiMtgYpBxm-Xj*v56WU-5~`{Z(zcdT66JpA?L0>W z0ie}=vmgMp>a+g4(M?;vw7wGn^I3R%Z=eBbR6eq? e8#ZjHv}Sn4AphqTg9gJZFl1o*!p5k@!3Y44UeBBW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/9c79cf6ea53194660f597626985bd702fae587b7 b/fuzz/corpora/asn1parse/9c79cf6ea53194660f597626985bd702fae587b7 new file mode 100644 index 0000000000000000000000000000000000000000..ffa9f577332559f5a9caa1fb0e84333e926f0257 GIT binary patch literal 32 LcmWe*5W@=r7k~j_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/9cbcfc09f5f492dfaec020c2482fefe516636451 b/fuzz/corpora/asn1parse/9cbcfc09f5f492dfaec020c2482fefe516636451 new file mode 100644 index 00000000..1d8c26e4 --- /dev/null +++ b/fuzz/corpora/asn1parse/9cbcfc09f5f492dfaec020c2482fefe516636451 @@ -0,0 +1 @@ +ôôôôôô……ôôôôôôôôôôôô……ôôôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……ôôôô……………… \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/9cdc7629f9f39de1103d202eb1c9231ebb2dce5d b/fuzz/corpora/asn1parse/9cdc7629f9f39de1103d202eb1c9231ebb2dce5d new file mode 100644 index 0000000000000000000000000000000000000000..1c98084dbd7e594bad112feab9445fc8686f88bf GIT binary patch literal 4 LcmZQ+WH0~#0mlHg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/9d5cb9a765619cb6765e91aaffc07402b85ca982 b/fuzz/corpora/asn1parse/9d5cb9a765619cb6765e91aaffc07402b85ca982 new file mode 100644 index 00000000..2330e5c8 --- /dev/null +++ b/fuzz/corpora/asn1parse/9d5cb9a765619cb6765e91aaffc07402b85ca982 @@ -0,0 +1 @@ + —Êò—´ù€ÆÖ  \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/9e4dbf50b64b03877aaa194d5f0607e86d4a042a b/fuzz/corpora/asn1parse/9e4dbf50b64b03877aaa194d5f0607e86d4a042a new file mode 100644 index 00000000..a07b774b --- /dev/null +++ b/fuzz/corpora/asn1parse/9e4dbf50b64b03877aaa194d5f0607e86d4a042a @@ -0,0 +1,173 @@ + +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€P€ +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€ƒ€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€P +‚€€€€€€€€O \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/9e5fcab2f9cacdb69f4c3c551525f48793b459da b/fuzz/corpora/asn1parse/9e5fcab2f9cacdb69f4c3c551525f48793b459da new file mode 100644 index 0000000000000000000000000000000000000000..4dc670c2ed54fb0c31426b6d22387b77bd7e0657 GIT binary patch literal 179 Ocmd;L;2Js*;#2@VNCSlc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/9e94810164732cd81f49645a4abd1168c532feca b/fuzz/corpora/asn1parse/9e94810164732cd81f49645a4abd1168c532feca new file mode 100644 index 0000000000000000000000000000000000000000..79138313dc449acfa301e9dc562dffe9f56c7ed6 GIT binary patch literal 5 Mcmd;L;9`gc006Q8asU7T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/9eca4099f3e5df8f16c69854f739249b75aa994b b/fuzz/corpora/asn1parse/9eca4099f3e5df8f16c69854f739249b75aa994b new file mode 100644 index 00000000..d7cb7183 --- /dev/null +++ b/fuzz/corpora/asn1parse/9eca4099f3e5df8f16c69854f739249b75aa994b @@ -0,0 +1 @@ +UU \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/9ef8e5948ba42b739d9fc103d1b5d346bb28bb1f b/fuzz/corpora/asn1parse/9ef8e5948ba42b739d9fc103d1b5d346bb28bb1f new file mode 100644 index 0000000000000000000000000000000000000000..49f02efe805b5be9e8c8b21c585901ef17cc059c GIT binary patch literal 516 zcmZQ#VqjuoVqjn*o(8EUq#l=<`1CP=oB$=!_0!Hy;{1Z{9uOa!7$J8Ol1Dbz3C(RF Rz4+|JCy#6{%nX=Y7yzBB0=WPH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/9fab81db87bcb7f74b9c86445e242fda0037c3e8 b/fuzz/corpora/asn1parse/9fab81db87bcb7f74b9c86445e242fda0037c3e8 new file mode 100644 index 0000000000000000000000000000000000000000..b36279abfc5e18e3336bb88480de3ab51d2f6050 GIT binary patch literal 331 zcmaKnF%H5o3`IRe7Kj6Mt5kK%(YS@h)(g}J=^2<1SKtm^93~^%1SJf88KUI>pZL#! zLr!1|Gs~(KNP4zQ(xHKZYU+9Q$A;$t_eQgbG&xm;6FA?WiKv?xGv`}4jMQ)o00R{P1ONa4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a5c89855d0edfd8151ff552bf061d06558d00ae3 b/fuzz/corpora/asn1parse/a5c89855d0edfd8151ff552bf061d06558d00ae3 new file mode 100644 index 0000000000000000000000000000000000000000..636d580f4f45c773ecf51b46ee4b6d379a2499d7 GIT binary patch literal 24 Mcmb0)WRS;(03c8TfdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a6b63791473c10ffba051650212d009b806797bf b/fuzz/corpora/asn1parse/a6b63791473c10ffba051650212d009b806797bf new file mode 100644 index 0000000000000000000000000000000000000000..6cb597ac69a9f509fbff5b44d429519acdc0e913 GIT binary patch literal 130 zcmX}h(G9{d3`NmL`tSl>#MF*L#tC&h1AybQ4}mb*(yBhQS~mA6yO-YMhG~men@2s@cdP(D2PEMS>~S7P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a7543b5ebf6881cc018277a337448f1936fc949b b/fuzz/corpora/asn1parse/a7543b5ebf6881cc018277a337448f1936fc949b new file mode 100644 index 0000000000000000000000000000000000000000..430befd81cd4b3f46d912d110bd5a90127c5ac61 GIT binary patch literal 123 zcmXqPFlb<7tT1fQV*oK448eR(1_r$bCNPGu7?=zU*kHm83=ND1hPY)KV0xI5^?(dS IGQz+B0Fq}AB>(^b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a79027896d80caaf1084a88755c9388278a8da84 b/fuzz/corpora/asn1parse/a79027896d80caaf1084a88755c9388278a8da84 new file mode 100644 index 0000000000000000000000000000000000000000..f3cd12f814c5e0370f5ca2658810eaa652a322a3 GIT binary patch literal 260 zcmZSMTHewyp`qbGLqh;t zL8oxm#EWMWM`VVfch493FpgA58x9boC^k>y?ZG&l7h)jC-Wc?DAzEcls0F^5tLpxV zBV%k#UhK;A5wTbx)l+;lw~cDM>-Qlt(`9#;`HOdJOewo5IT0bSte9_b&!oEVvJ2#r z%k){M?EV1}+sbY%l*;a(Wy7-jmE8}G2S~e^_zVPeI-;rol&Wf&q>K=_(gjKj|G$)F aCg(J1KpnaOa6zOW^oQA`YwC$HIp^Nt{(V#c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a8ce50c57aee91c7f46325d99b3e83ee4a435f9d b/fuzz/corpora/asn1parse/a8ce50c57aee91c7f46325d99b3e83ee4a435f9d new file mode 100644 index 00000000..cc3100ae --- /dev/null +++ b/fuzz/corpora/asn1parse/a8ce50c57aee91c7f46325d99b3e83ee4a435f9d @@ -0,0 +1 @@ +   00 \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/a938c006bca04663e2b25de1d13eb9c6c3d853cd b/fuzz/corpora/asn1parse/a938c006bca04663e2b25de1d13eb9c6c3d853cd new file mode 100644 index 0000000000000000000000000000000000000000..ae29f29f84ae72af6c367ccc85db9479f06f3094 GIT binary patch literal 376 zcmd6ju?>JQ3`kaL8!JG85owSjL5<7z>GirKNrImbR_O*? z%=|o-QVP8Rh66g-+3dU%sC;xUe5`zY;ggW$s5N(My(#CMb@QlxjrhTY#sk4W9=?99 H)2ON!+QfKy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a94f91fb10db1f918b068afd7b743f89f3920ad6 b/fuzz/corpora/asn1parse/a94f91fb10db1f918b068afd7b743f89f3920ad6 new file mode 100644 index 0000000000000000000000000000000000000000..527314a409067329df45d75ba0457ebb56dd9886 GIT binary patch literal 5 McmWe*5MvYr007MZL;wH) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/a96be5689dbb4e4527c5b8821bba427e271d6e3a b/fuzz/corpora/asn1parse/a96be5689dbb4e4527c5b8821bba427e271d6e3a new file mode 100644 index 00000000..b488a698 --- /dev/null +++ b/fuzz/corpora/asn1parse/a96be5689dbb4e4527c5b8821bba427e271d6e3a @@ -0,0 +1,2 @@ +   +   diff --git a/fuzz/corpora/asn1parse/a9715ac3612352084b45f323c2ce3fabc50c2d3c b/fuzz/corpora/asn1parse/a9715ac3612352084b45f323c2ce3fabc50c2d3c new file mode 100644 index 0000000000000000000000000000000000000000..91890bf5064d3a28c90445dcd9944d4edd58c91a GIT binary patch literal 48 ZcmZP*W2{619U!(fgO~;zsyG;c!~v$0d5jOlJ%XS7_006Lvxzhju literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/aa5363a1080183d6e2d6822188672330fd546094 b/fuzz/corpora/asn1parse/aa5363a1080183d6e2d6822188672330fd546094 new file mode 100644 index 0000000000000000000000000000000000000000..1ccece79fcc575099f61fef379d91d92e7dd3ccd GIT binary patch literal 7593 zcmeI1!EM7Z3`J$9$ibHaIc0$Y-Ju(Ghyq=pYjg*%p$)P`k1Qx!ifl(TDO*O;>K%f> zl_-+Zr|9%(&L0491^_rL005uu#+=&r*$~0 zKi;^20%4{?zqd4LD3B&REn*kg^~F{qSc5Tc+u$klcqdV=FO^r`8KW4BK}pC^`ps%H zO{up#eV#+1U75P#UB-+rl=dxZ`%Y0MVb@R2Vqgu%(2@Sz;w3VUR8^N;UA3j~4d&1j z?gvu`bSSHa^vV@G!LBd162Tgbsb%mM!&{T84DNJe&roi4J-bVkNazdcZ1d!cSrb&K z7xTBW+FJzJRNyG#&mKu=3-QmjLSZnQdl$OQ_XW%lPH*0O*_dQJ= zmyJ0O{12EUIa|rX8jPWw|A)(JJ<6m;+M=~{1^?|`XC3f^CS3J+w~8Or7=s!gK&P=b GIJ#dCq+ARD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/aa81816726967b745099c6605208b12ab6512358 b/fuzz/corpora/asn1parse/aa81816726967b745099c6605208b12ab6512358 new file mode 100644 index 00000000..0698aefc --- /dev/null +++ b/fuzz/corpora/asn1parse/aa81816726967b745099c6605208b12ab6512358 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/aa9099df99c03b2a02261e84f26890ba90399a00 b/fuzz/corpora/asn1parse/aa9099df99c03b2a02261e84f26890ba90399a00 new file mode 100644 index 0000000000000000000000000000000000000000..40e414206172d21f613f28d272e9fc8721ec91dd GIT binary patch literal 53 scmZP*+zJB!|Nn1T&;SMuYzqJXGeCg&gbDvA{D*)h5XGIJpPyd=0Pk2GUH||9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/aa94a7ffb4abeee3da7ddca72be47f5085ccd568 b/fuzz/corpora/asn1parse/aa94a7ffb4abeee3da7ddca72be47f5085ccd568 new file mode 100644 index 0000000000000000000000000000000000000000..d67e239c47dc7a892918e59b359ba06a7ffa9115 GIT binary patch literal 337 zcmZSc_>Te({^w(0U_cT2|Np-=OyE6;asU7SdYAwVFmkdDZ=rl$Ve{D-MoOq-3-Al1mw#N5Qf*v!O&ivbFcf!x|rU*FKs H0CpPyhw*PD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/adbeb345334fba0189069ef5dd5aa32745e044ac b/fuzz/corpora/asn1parse/adbeb345334fba0189069ef5dd5aa32745e044ac new file mode 100644 index 00000000..4993baed --- /dev/null +++ b/fuzz/corpora/asn1parse/adbeb345334fba0189069ef5dd5aa32745e044ac @@ -0,0 +1 @@ +‰ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/ae4f236c5b09f1ac8980059661928a5bf2bbbf43 b/fuzz/corpora/asn1parse/ae4f236c5b09f1ac8980059661928a5bf2bbbf43 new file mode 100644 index 0000000000000000000000000000000000000000..4c6ac7525947419e52cecc5f804c4bba433fdac0 GIT binary patch literal 238 zcmZRp`~UwWb->M&C$&g0=|7_u8zxfx4+dDx`Om2J|GyR+BNrQ^mK6gR2&!{2Kmo`s Yh~EGI|1)X{z{J7eR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/ae6cbbb1dd61d148ffed03449fda8dbdf8fad288 b/fuzz/corpora/asn1parse/ae6cbbb1dd61d148ffed03449fda8dbdf8fad288 new file mode 100644 index 0000000000000000000000000000000000000000..e1cb9c5133eb5be877ffff5c5f9fc4437309b425 GIT binary patch literal 32 NcmZRR`;QMW007d#9S8sb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/afdee18a5a31a3b0abef4f2a4e9773b710cdc347 b/fuzz/corpora/asn1parse/afdee18a5a31a3b0abef4f2a4e9773b710cdc347 new file mode 100644 index 00000000..8c641f03 --- /dev/null +++ b/fuzz/corpora/asn1parse/afdee18a5a31a3b0abef4f2a4e9773b710cdc347 @@ -0,0 +1 @@ +????????????????>?????????????>???????????????>?????????????>??? \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/b0112f2da27838bccad492cc2d834a88e2626689 b/fuzz/corpora/asn1parse/b0112f2da27838bccad492cc2d834a88e2626689 new file mode 100644 index 0000000000000000000000000000000000000000..bff51dd6b29454fbed206fdfc9c66b39bfd4556f GIT binary patch literal 396295 zcmeHw3w#vS_5aN5W+WRx-U1c~SPCo}CLqeg2Wk~jOKGWnsI|Y4#E=>YLa0UyEKyLb zSRcjE{`D7Ht!<@>RjAgYl~!t-s5l?89TSN>&A6PdUbrm`-c9Op&L5++t9Y9eZ84XZhcO*w$#Z2<6UEG`}*`g zgWHVtZ6EL0v15l}=q1LQNSl#dZ?q5Q6acssdB{_dzP6sQn-L=#84mpnqE1^fxpf<> zA6a1QXO?X|kZj$0(EP|8UDkSi(w=6P>haVT%u>O&6P?>yCMD%>f88+5kIbj^cv&`9 zD8G)DjM_O;V^@b=2vQx!EV}}s!i=_q2e;j_<)?J*K4J(~7q-%jHmj6i8bhI#OskGD z4WoL}FbY&!H}a7u@yW5a%kn-+>zw$cWiHcjl#Fq5x6P=XQr;3Bty8NkYUv%Xs9V-l z)l^?yQN6gO4>Q-es3jJ!sQXS+Wkq^=GMye2uUJ&uw6wlDy>BBGwR~yy!urK@n||?% zKYsC8fxj1A@Pdl#^p`R7t|iNxUssi@zQ#0d7spB$7Z!P%d4xJ>KiSAW$}vU zrus#7bfe)_i))rP*4I>2H`LcIZd%43r!2LuaZ$_BHMQTVZD?FlyR-rpgG!5AqC{AW zUf0-IQP+NIT&y2F+P5{^v7ol4%r*!;(ja?=E4Hyv?=?|ZOG=JV)#ydW1;#{} zH?*~*7B)34nK5b7l1uATrD|L>Y4)7cW>2oDUfRTLtfn@$Emq0y(OA7~i7`TtoIj#( zbVzj2{NDHN`*6txbKY7y{gkl-K0o-tDW6_r^d_qZs;U{)48<5l=8lODHHIVxo%1h! z$kE&XvvAvYK3x6l-!2&b$OWq>8KcPt<Ys-_tR z*<@67f-%k*yXlxsqf;sh%F|%<(M#iN&t7|=kE)iHD3KObRjTg2__Z(BY@2!0A09n( zuxo-5^b8oo*@_Vjb^U{pdF1-G zzq$9B!;ejT;Hp17x8tJw+V{Qr@WJ65?z(qX-OT4MUHH=X|7Y}1PM+0k(hJxA{H;0v zJMzMBzCHW0)2B^(cK@7r&Rp2?!x7Kz-utCX_P+9~Gp01XU;bd^;nn+&zUR){^u62F zFOL~tf8{M5bH|_j-kmpp^#$dLF>mf&|Jc{B`~JC~KC<_w37hYG6>XUt@yl`8z ze88dtAu!}ZUe}4W0ry4Dhe;X~@OPeB^s%a5z#w`vj8K+m4 z8KrvU{HQ)qJAZ!V5MvOTi4E*CySDKwOP4QeDxb5sx}x%EV;ET;88{%de0D?Qf~tn{ zGfp!`9@VFEs&TwgX*Ek19Mz}t#LCH2Dko2wI(_Q&3yeAZF$Nm_tz*Py)A%Pxs2pn? zV;$f#sfA6oOBdHRm7lh}X<_5i`ljac*^`YHbqreqmDcl-iqWFRG*aQW$D@~D^wPYW zXXtmfy!O((v$wB1_5EQ>hF^Eq%GbWX^Zj+tjDGKe!&QAAn*8~7o0`hzfARdgo@rUI z;k|di@vT4ZDoG4@;^H5iy8Xhlr|qAA;In%U-Te08C;qyBexLp4eA4!nS5`c>>C(n) zAAfedlD|-%pQhC{-AH48iA5@&P<@D$N z^3D_A9{#{n^ZzyY-0zM0)3B;hPv7zLQ>rIkGqt|-{utl; zNNaijC#V0gUv$&ItFGKI_J+A%UcUR+9lhEIee%qhZ$CKquV+PCTO%tU|J5s3Z8>ww zUmrQ;vWH&TKX&Zz`%GPT#~p|I_HSM{^2D86Zd_WgMN~z-bM>3X>NmJ3eEiCd3)inZ zw7I0FcmEaltf+ms{i(T3OnU}tUlM^wl9-N0G*ve$fLv5HI>snBM#8+It{q^LO$<4pL^3N}xbmGv`AN~5tTgs1^I;HfD@zqQFY<+F=?bmL6;^^-P`5XW;OoC;#-ZclvKQ@9gS1Z~yR{8!brJ^RmZ+}2R>;gAzv zx$G(R_XBo}{^Jm%C9=Y3(e~IeKj61}SSyv3D8^hq9{bUnj>ZNaapq;q>o2LgqVhOn zA_>N_fuFUPl+UlNUcR)p{EXVAP4$=5S64OFrsI;tzcJaEI=Rv~o-hE3|7pgw)T{@` zWZ)fTc#2_=d60RKd60ShWF9N?$R)dxr5rCmHMH9JbpKJu4FBrN3tv5{VcHv)J#@v* zf8YM&m(Kg>=V$yn^7a=-AJOZ&m%l#glIas3ExF=*cT9V$=TCh4+168T|6I*euRe42u*=%#?)m!* zSN&qx)91hPr@hZzJZ=8}UG&8pjypW>m=iv^WY1r2yleU}<)IDQ^qb529-db5w-F^j z`p*|mX*}|X5nGNO`ThTzzWd`7<`10y_lrL_@t-IEe9)tl-yIqm|K;dq|F?O{$-Acg z_J|X%S#W#vJ41~9-+FxFTbEt>#z8yf__wjTgG)Ki-m~!F#OEH^@ISL(I;One7pH8z zsqODf%Hf%j9GOZPN{ooAnywsVhLt}|F)EEon~vKwaqR>leLXaBxOw}5zA<^ zRb54sh`Cl0G21xPI75$~KcZYQW*XBWiP6*{#}Qe}W=xtyPsdncOKX=kE?-(*yKK_Z z+9i$4>YEyuHal9?$m-R~cXka}Jonro1J)Y)1FL)e_20doeDboDm%R7;j=#?wW&Zo$ zf13N^8Po3njj>|rv*%y^lW+g!g#Nd`b@nB9E?V{Qz`xHv{Jjen)B=5{@=~}u0G-25npX=e|h_|>YLtJb=4_j{&MmW9p9SPbo=X( zd2@fPY}xo;Rq~os2hi&yUQjji(KJmxWKF4LPSw;=WP+}PC3H^J;`Xn{a=Im1?UYq& zZB0bzr+cYEFhR5;gOWZ8wlud&NXn)9B{(osfW`${6vRM9cb$TR#saTV73J`!hd(`} zX>rS+b8yLVX-5=DH@l5bN-7+!?2R1#LSkirTxy8%8UX)8IT;j7ktH>Rao`Pk^>Hnr z#L57<)UF)|#G5b=q6uW7rT|AM(4rs);ygD;ZA-3iQugQ!92(X zQpc`S9!Z6RU!awF2<#!sk0n+H$fXt*uO9Gp3gReP=0Tb{pZV9AX|kNm!!r1V?Vamj z9=3zujN9XRaA7TKi2f8%RS9AS`QHW4P?s=Maq+)4$BeH%`JKkYy) zkpEo(%HyI)!c1fza=u!qmC4}De)?NykzuOj4+acdgEPz7v6*CbynST+EPZg>fc0(d z$?-GF#?8=6;%g#p-%YNc)js&+)~B`|-1d`g+xjVrvUA(-_44b6!d|oV!E4)Ex3pTL zTHCknEZ5)bxNdTKwQq`4Gm326MhfCoMArxNV|L3ykzw&!ydu|&(eAd$IH5(hZ5uCE zgbtymgNIX!jEv7BL#TRnQq^WztDRQc zNK#`WL%}N8f>Uu{+&(O96)E-tmfrHYb+;yutx-wQsY`G?5*P#W!C^mQ%2|YPg6tpM>RI7(B>01vn#VKE%t}qs27n@3fmmw z3}7EZ9dTUNy~CumGTzc5_Ll4n-wUOLf&_QK@0jQ?4%DBjML6BQjH_ zE5&GKZ^)TCm+lXMTxy6thye^x@(Q*zBQ4b|V{)dR>f&A|R zP#%|)NSKMX7(QH>^Ket_|8YU!%h>8N10*SL$mxW0Pl?l`mA&Dwl>u_8g~w|SS0cGiWu`si9EkE8WX<&U6B?Qpd*gl0 zDah;AZC0OqPtwhX2juz{;Cq<{T``w?J=DtRc0SvuSjmpP_$=XTKt8oOSl4|rDCfx% zjWZhEVv($}3D~p%FZBip&ZSUJfQ)dILrMl_*hviEjk|J=Qt0PRWu`rrHdXS>1-C&q z!V`TrbeC7KM=$WcJ#VHEQS~QY=AMs34kmc zU4bt%XE@=gOB@By*rCg!8)t`M`jgKMAM(F9P}0lo$Cw^n@Do|E`fuL*wFGeQ~iyPpf=RgOUGTJV$~2?*j5a129H73AJy0 z5{|l*sG$1;M{E@Hv-6SvnV@EX{Ol|D`JVw8!|6`JM80oQ!%-LWf4{nEkpBti2hs3B zQ;q!3Ltu|QGgGv(H~h6SKrR*eA3QQpQbGPFW-jWEFYp6F%wYcS0qhDhy!Pb0%mW6 z*#Cp~|2iR{15x@DM8k*7S}9f1D7It|WhoDAZQTte+V8P$p0=N|1$t%ghQyl@ku!9Qli5AANzlp zfZ-q@T~YcIM8gMpfIt=Ge;0uAxST}7OlW0q2)s@d01_($r|BE>dM*e4lngQ~^3qW~XP9k9@$hOeR zJOuW@{2%ZCqVSA0%>RApQFCTMf=EREcfr#qk^k}jU)SU6F#q>!vXLdv{`ZEw`nbrK zSQ#Lf8ctH+5C5lI4!>fbvuP07G`M@$(HQf82p%4onYxfqW(om;R^}nF2a~CDT;&^| zApe6$BL7npApi4$2|)gL0r{T+7$Y1)MgFJ#0L17;J(?aG7vJiO%L0gazfOg~Zws_2 zi0OI-2aS>cc?j%5GE?0$8t;@6k3=(jBZHaqurfd{HGqH}(Ml_scMDR8!Y=_hyMWr) zw3DDpqV z4iC)#T>xk2LIvp`$N#%7R|iA>nW&yX5XquGHL9e~Y)VO6^)XH7Vl4=bk^fyhM}hqB z0`fltFh)3;pQM!q2z;4gz;M(>{`ae4LH>vQ$}fvLBR~){$p0h=iu~__yxK$bC!ZU>uF6b$tn`-8t-CdOY)$mY(@#JBbkkJ$ zdIOpcr)new(p9Z&qgVn!Vr4+FsEhpX7hAcTRiA0F$2NS(Ox}=l2)3XuQ(qG>MHs9BN!{XJC^#0>WTxBw>>oKH$TJ$U{fu2>(#a49V6O$j27pr8_a z00dqq(%3ht$p27LUC;}H@LQkR)Hg@vNG6DagC7VY5&7Q*VlmfnZ%KutmAxVGI^=(g zmk*`F)7RJ!jZ`F20m#t{f}laMCjaa44e$5U-#SYltkb`?E$!>gWOC~^ zb?3Hrz5F_zENDw6x3;e*Tg2N(#?R6Rw+&d|)}9ZYb|j_W3;SNo<&HKWM3ZKNPh zMRa{|q$bkd_K>xjl+#vZSbP?*$n|1)SY({gBHOl&7c26RTal6RS$%Ci`?VcBxb2oL zKfNwCSl9Q)dHr-+W2AzdHKrs?(@|rud)HX1+S2A2I(Q_hF_EEQ6>Pz&xG!!W7Pg8M zdja9XpPKRnP+e3&4`-!yFiVj{O|re;D>g*ZPG+L;{L5mBRqu4fnZSS;j0Jq0*2 zF{&&0t>DUv4p+A4VzYE`B?PgNtK-S(I<(*y#Rjh;p(h}JNsCfIwR-51Rdu%U)#*X? z-eGJtex_NOs7x3MUF~P+x~k}^!p&q_$8A`QGnHN?5-aK~yLijaS(967a?!Dy8H)90 zrvuLvc{;b3W5yj9jt!hbU5Rr(!%_o0gDm*r?9L~%&=b>q$It0!^Y+?d_Ei+ekS5cd z2^;Mr6R(=)Dp&weOS`!wQ-`7wsHM8xlU!qW}E|&K*VMP+RZ{96yP?i&y?ADrwy3~T`|KwAP#th)~pt5 zlfn)G3y?_$>$*=4$9b|uhtu-i%;s-&e`va+oP?}2MY56 zE4Py8Re|LI(D0EKmZTs8RRYcb2|{b(p`gB{yj;~tq{6|`$~*-25c!3~$^f}kr}z6N zm~#qE)yJ-HZ);8dIk~mHqoZRFc_%7%(~Hk#)3B;gQ-9uDA)kTiyA47k43Bf|G>XT? zoW2`X;Ik_=1xwgp<8~+wSkxI5f-)9=lW>$$(GG=UAu4Dv(JzsTO@cQBUe|4!gdWZR z`ZOhGeq>j?qQ^HLNVaZ0XntgtZ9I^?gHAoA$2Ybn50L4@WT~}&v}4;=^QnX8M_Zjs zsRU-**6W|M1bk$UE=$d*N?LB(37zcFMfpEnARh9#>Nfl@g0qH!f+b81kXw+;{v=Z2 z-~y?|-^z+mR8|HEtjx43PVbjgA3!dca|+^fcu4@Ri8!xirIC+Wb2zc^g41u2|Glha zhRjU*h*t8{sP>Lz$JRYNI>;GxM@Pqp9UUFXHM{OB+wIm-pmyk?E+LQ}!~b-2K`>(? zNY|y`VGs4}DVUe6ogBn0w9PACW+%>4f&s(3;Wz+3F@Hp zm`U#y8K0O*{xSd0l%;pudjcql@R6U<5NQZ}+2qbX$$P58ASwt}kFo!$!&~8O&Eq`* z3~UqeUO)_$DI(GkIzmb?BmzFOsc-rP-tf^V!!e;Q$X$o48cBttmA&Dwl>u_85cW_n zlIjD<1#?b8i3<7OhiuhtRgq&2bt8NV;i`-L?^h6K$Nw(K-3$EIul(P0kSZDGsw(NhudU|6kG8TySLu*g zYdzT(2Eq!5#O}2Rzm~OLpJWErx`xEE61v#7S=k{Mn}Kz5utT9bOyKHxaH?K&(P4C1 zJlVRD4v|jRW_+AJdZTHV=yxC&##Vc}LBKAPyQyl=)s-WZ{dHEw@TOuMKZokdd0YEY zF4hBG$hU1e=J4Lpn4MB&6pRORK|b6wI)rGlRGQ_tX`0FGHqKUJ>cAx`ksf}7(CI^= zEM#AB&{(iXk2oRlg1{bmrmARVZ}@9vfLto%flx02X0APp|Lp;rU5*C*Iw9zC1qY1< zF%vNV$JDZzTDD42_z69xDj620ujd4Qq6p>*h9D$T;ozN9H(k-nqYPzKrN>|P&n55z zsRv4I;n5qm8lhcAa6u4mOhAAm_}pp?QVRQ|95pmrbeM{se$Da!HUbwQB10>vgsA}z zdob|SSR$3O4qmKx!CxyA3@5{bGJIAUilU^#9_mF>eSjR*CE~jU|C7i1=F$h_GOK5A zT<%?uRtKr8mv6MA12wx|KI<_QIc)2jzVygUDRR(ZbXgWx8EiY{qHk_GWPkM{7aiDb z0gRPAeMqdgr;bGPOIxo`ZYXOdldab$@34P2T%Rm!yIXRS) zC;=6-Qa2^h-m74B;pk|fbX{`}v8tRlKt=SHF!nLC?&*o{Mb;B(>GG}2G`l>j=>SEu zYGpnQtmd|g#Z1LUEY|wHRjI95xy*D}X5f@`RZLh~Fa^(fI&%qNb#_|`^eDs(dgMi` z>B%wGlO&Lk5DBCP*Ec77T)1E3Jm5SU3M#P&KwuB%1f4rC^i66A>PA(C{2f&6?vI{v z)flfD(2DlWQ91Xg=aV>$l!cr?LI`zI=b7sTXi=bUaQttB9N&9Ti^H8pD*VUVU!XQa z(?wxrK(VMx;}yEUk^em&_hUg`UxCx0&;9=rIsg?!`b_!=?H$Rj z?e~(GP|f5Xp>024o2;d;sIu4A#Uqgt?Y^?Sc7~^OGdr`g?bU)K`@M5dEOU`r+f7AT z$GPpg{B7GJQjtUjV1j84LS*mJx2J8k;u3=Vc`yy9#@H#8whfD{{lde5;-{Wj9nbVQ zP!WOGFgXzEn9a^7qy5L%MW0pUQA^3XXVo~E#ZzO6R5*CBRu(4|o;n8+M^I3SJpclG zFlTa{U-%|9V^R?96^q4Uh2$KZ($vh*A%d3%3P|PLW_4WB@`l{Wz#TkDERF2N1RDfF zhOMBC!L$MldImp%U!awF2<*|ht$@Eoh5V0K1bC-UBS-h|vHY)T=6w5~Of#pTatlHW z4-{NzCaJTpO}$1@)Z6sKrePfM3Bd=Se6pWTeDcZoPyR*$wQbFDc#u2Lo&P|+Oh%J;xiunfkYX8>%PMrv<4KG`UO z!}P^bHvrb0wrTWi%;_kUZJ!d`25BQ(3+$u0tvJKI$c<)ecUaM^kN%r#9YOuu-~QGW zN)qdg(2T}&%T&N_EP}El|`f6oM!v0m; z?BD1)M8kj#y}-K9UIR~Q(PMYxMNb~ZDdxB16yV%Ah99D z3DbWf)suCPYZgfy_W!^L2ERMLAT1Uo(#6>SqmNU1llvME(nE@WyJ0=1dG8oy7qygLUarUn#?y7Z)-_JPEd zn5yb(f(%EaaaT4!6ui5z)7$jNI^_k&=;Oc=Q^Vu&@@xgG)=L7P4!TAu?9C&WQ~+PD2l~x zNMZd>qOsxN>lzSH!=WqWqiqo+h(XjaaJFx*gAGPEZ!nw><&bo9l$0DHNOFs!&9ESD z*nA$26KuEzK@ivk0O|AKnt(ydAY%JN8hO@WDhJBsJmQh047!P1W;BG=)_HXw#o)DH zoT)84LmXvv`B*GAzM_rTv+G)WT%s;9F7+YPS-npr)e7&T_XtaB03dMn0va^A#FVC~ zj$mvT$iO1KKhz3JijIzGOwvb!jR$Qlbu?xn9u9 z-Vk^lL(v?eN~{c!OAYQ4h{t^?v{g?>Fb%nYuPM++#(UhYMg5SsDN!f0^8z~4tl9Q{ z@$k}kvR09()G89>w;}hbFd(Q9oFeUYTQ^%ZA&UK_00oHO#Q&Ikp=OXR&S8;*>rfe zrAEdP)hVR(kwdPJR$>~4VLd1vehkA*t2;A2DFfK@lhnx5G$i9zo168~?l^hLfus3( zc8B}#zrT5=@{TgDsN{5VhG0Udv}HL&ke8C-7R1+ow^?_E}-8*;DE( zs*n%VO-`j|T2csm$VGh1`-`*9vjL>%Rx+TjlmN||pT_j%1c~#~*I~gC@T>=%gopF2 z$Cc7$s0TdfNdb5Ut;|DU4~D5ZkMoI7+}B>xS7OK%uOovT)ukOu#c@`;%p-Mqd@4M$z%d%xIk5);^5r!I>X`C9R&yLnKBbdq4NzY(m$gHA|2k=pp zw>f=0Ko+9(vX+F6;j?_6iKRvRESXc9IZP%u&B7QmcsN;MQgtnHUT6Nx3haW11sE?b z%or4K03Ss$3Nn*E9>7OYjDpOh4+k)eEN^b%A#Yfm8IWL)Z2NoY%L*cOA1j*@+Gul? zX-4WkclX_Q->rOxyrR@p$kRnMMLDRvWgfO(T52TpNL@cwuzf$eeLunWMnW+XA6s`& zYu1l)!dYjXb=K;)BFbt4caI*V;KAf15~*pYFD5}cn(yhj+ zaE6~qOrVq2cN%Y;YSB4QO=Owh1qVM6R4#j#pr23*qcNJBo8xh7Mn7TWfn@8}gXTwO zS!(JjJvCWIMq>!1GkF`w!TuGLAA?SATky?-oW>HVIarw%J_owMvji99-qy`p4UIf? zphcVis>>9ehIg}o9@}Fk%@@pD&AU~5TDq5c<26dTVi@`Dl@i~|!deQZN^O$?#ih9n zyT}H#z_*g`nNW7~ZZ-3+(bY;ef9QG{01lhl1guYCEk)OJAsfGAw-I})cn!OMrs;Wl zBGD2{B(i8&xTJulF-3aT02zsoxfV&U=vy39!X;S|K;B-v&Dy2&e?Sow9Q;6_3Y-6X zXQq1O%*0IgYeL4^^u~hiz=iy-VJN6?f;pd*NQHyvZDs3LS|X;nuM+SVg1M{01- zmAwp+hQP|q*=C4Dh5Vn@OLlrIz0=)(DUf=`=c}^47(vmZAZFzJ-&L3itmvBsk^ciC z)Q*l0`hI810-g*|cpZ)+qYy$(Sb+vpPqm>Q8SpbPyy0n6qE1lc;+tSD=7P}JBf&~T zz>xuk0Yza|wPx3SL`v>@3-*w=2K2VOtIyLTFFvWerzg4>F`I5>rrG6LO$R92R!dj+ zyZ+YbS+lrOTOczoadgMhCzNDFPUeCeC zAghxCZxqIf*|DM3kJY_egX~Ifb@SM#9C^0`B+cP!4=+=u;EQo-_7gy7P-2`Pp&3s9 zif?IUIO@`T6|9@@X~0N@{|Fo*4M7MqNvpeg%5YMjhFoxXEf4ZJo z$WH()$0ih4d>z$8lp*R6a2dOW^UZa*D3VBpgLg|S(+r{*tPBuXnPI@-)fL`TrY}|- zbalIhN4Ia^-k=^f%}=fQ!>delJItMQ*fh=U+qdVmF)8Ir(>w?=)dsLi`aT-YbA#wq z0e6=~1wdY3VvRwD4RU1GA3bO(4f$~ee$tRws5B%NCKe{(J1vwzE?8V3pEVY!(zSV= zt>IvOP2$0DaI`WHfjvYVB(X9;E>#e(l;m9bNg8s&?szRUuO~{`=iYv$-)V#n=v=;TS>oE!rD2ihN zfoqvcmi9?)NpDxT7HFmH_Nrk-s6=bAOOBzI*g`b2n{z!~OAceL@?LCneLsoM~u)vgAD>alO4c#h*kuHdl zcTxKHw~vxWLh)Frj7x8j5&hFnK;R*&kH;Z(OQy>o)AeuFrO2x3?JRV6FLIW*lfB4_ zn6xL`fn_6?s`Ky{r5pqaL0{HRp0(l4YH4fbq6!yZ6#26n116klxU=XQ6qYupjdaD6 z1z}T|hx2s@3QJqnLjKO@MTY4*ECPSrq`ae)E9J^NRI7B1+9j7Ysp;)(bgn;oP*@)R zhzT3bGObhxD%5UQ_=QE1u#r*Q?hm-6o!C;}#x#z$5^2+<;9Ta#Txk>mbENgBrr{LHM!d9CkANRk#>1gVh3n9?lw&`#=*+bly8%TblTcn zux(0~jUbA70EB0O0E#IpIzcg+DHjA_CgLqwtB~>dSxaG%Q6LM;y`y=$w-7lVKU=>E z*~dKTz*%Mpap&@U5RloNs({MGoD%N!gM33Ol@J+^FWf5wG74mY(d7lZJ;&(EKDw~Y z@2VM~5E)5CxK{>b6vzTu$qV_gQb-Lbk7#)x8KR0^-&R#;n_lt9$$*TmmSI03G74nT zg?x8xK*rA+IU1Gol9bKeXEAwXk3F)fC-pSI%&zQ0SanENV+w#NfDAcCJf8OR=rSn) zVU}<@Fono?eBoXhkWnCuE|dZUm49W89F5AQ00dcfa|@C2_=3Hx`Xv}ozZs=WlO(q4 z^Upv3e0r-~p?W+s)Dz?|fSJ!f|NJA5Jo1ROAx|4_bm1!&LgZ7G8Ie&S3(Mv`p|Q#n z`Vf_Q$xa$x%V#P>#(OO%@LG=Br-AlqMt@*{{?Il3AsQvki&c@`mEXFdZ<67P*ml|I zhV|=9EIJ-_H&Pkd@tb>(PJFOw^)GG=bAVG1#I6F$yo+KEm7r-#qL6=HjY@LAt9nIc zqJq3+UQJl@rHWFK(CEK4MTS@Fuvk$Ns!=IklYo69>^?*wBf@plYS^%bbdq7_*3eD_ z0)apv5M2OzJpD%O)YMaYe50xiDDcC)etWO=BJR;;t=A`AFXbNXsY5Q?5`CGY*+=k} zYi(P5uC5%R?60%7ogmmY7afXW+uZHIzaX8r!{C%nb1Pds*}Cxn|Kj!dIDPa+(>~ho zKra7oc1Lv;kIUp6#k=%f(YLg`clQNRwJxg0-QT_lM+l&eZf#Gtwl8mOPmZ5aHg1Mq z5?>Q(`!1PDY9*$kv{^qZxj98yWx~2u%F1$fOKXRh?H#fZpg07u!tHf2wJfHVtx^&Tq- zPmuebK0udz5V>Ncdf7;IaMNWJupSjVl;@HnEOWO-Ru7IrAP@)yqEL8_{LFV8d8cZ}k+H)51l_eqS*Y|9o!FWYFp zzFt&2q8&-O$iO=Cri;#k=fgh;;Kj1ecUKGEcC9MP;ZF~LdPvjam4SZ z-`A2c%H$0vZOQa>UWjU?ft$4`xx?(MD6W=%CTz5iOuTBEt6%{@ zE$!x#OdX0!K)Uff7L|7Tz3hn2hjl9o{nnXj>lTRAa%+`N?u)QS;v*0UL{T8s%BlL< zdTA-!_L=69{H!@nF^fWJL>GppCNy;u{Z3>v-Gz%vEo(FRZmIu$)SPBm3? zcI~E-y%^HbtEp?VWRnfpw0(4gA}`68sc znvv}48}~x@=o+7_RU|64iUj$sNVq)-{6gSKY%h1gS0KF5J*@0sSUIl@1$ezgC5&Lx zf;DATM%?}-bm3S|myp$m_&rCJT3ZtVZXW}9`k21DQ_!3`>Wc|QFC$Oz*m^MW#}^Y` zbnU4)MQHAuyJ0!~GP;#r2vWJ@tZDMiRzExKTnBsPzkj}$u(N->RHlo?&I{YQY#Z(+ zcjwjisG5kXYoe+dRTIuqIJdRd=b|sM1OLn>)-nL5?mP!)*hd_%yu*FUm3I_amYyb4 z@b6v=OF&Y3KWi_tKBn%+zv8ffV?06{MZl)OVTCkY6c+iBX0m`5(KB#Ju&D|Y*5<*F zwx+_GJa||UN2f3)~mBrbVDw+RD1}8W;vy#JHrKGcEzcmi>B)~WK53;HRsRQ;>xZs(XNE{Nf zBD69OfjyYcT8^tERtCtW21it`Y_&N0f+##aH%LQY#7*M1a%84}UK1~1+mQm80vrL`j+ALQbm_K(L|3YY>0G+)pz-D3 zX`LiXf`fO4mC2RuUD3A^OA-Zk#CpLQM^I3SJpclGu~6BYSP0*V z2Kz3|^sS3-&c<^GzhjNm8lF4&++qo02KnCwpgbDSN0(*!E)i2L^D(#isgMO~V&0sW=&czV)Juk_L>kL6?+x-(t@woJsw8a1oW9U&p*{|?9< zl_QxT3QjCcTu`72^1ln7J}F@)w6Zq@UdJ>nTmXQTqfs&sP8Hy><$OhzFOY3w*qfAf_t*$tG4{Ed+((f{%K$&&_VI zR+88r4$f9918n+SVEuyO;4bA9)Qy3YJd*E}Pg)^s&3CzBnMWzshm?YzPNd64qCy{d zO&fUx>w~6wn`ypGD*Dw?e02+=Lew-43JCph}WPJy>5Tv06|Po9H0s;jQ^`1QNnPH?shKW zkW<(p7hD<$%{tz5@=z)Qx7uRMM#) zQxzX=>!T=6*Hj67Jb;g)e9+Z;qyu@ZgLmyi6^5&I-D%b-OCd;Q)&8Z`&Za(?e4VCc zJu3n3jBJ-Y!UPzXNA_nz{&#=`bwcHnU}ppfOchQCh_gE(i1Qh8a^7jD=5X+=tek!V z0fbYgO79V`A81JQ@Q<${5n8WmM#lw2d-buAo`QA7(E*;#r8sydx^UZv>@Ap!Sk|_q z`O9{>JXJlHZJEneZXFyK(sJ207ac|ibSW-39ddipKVLhnWdN=kby!oZou?*5ze`)M zPi`n{C6le!C+{e0yr2&4^U zL(EusB2c{J8jIs42O+;};bY~n;`@ zZU?s;0|nC7oSu?e?FByFCWU;=nopmIJ$8-&+H6P(urnxC8ys@#3`)IB$`XOhlmc-# zLI8eP+3{W^w6Y5m^ySN!?=Y4xUv3yn$)%AFpT}vJOIq2 zsk}TdPolS^2iIU>)4?SHw0+B``-cHkR$wi%Ue=PZF?^QKGqJR2pCxlj$JDl@5>wwi zpv2S} z&~-rj5NHRfRT+52Hidl5>T}AD{GX}~4h8T(UQ0|P&HwspCD*^)_t00T4^4sm&)b3J ze?4+$VkY}F!FyK9|5m+jN!Y(?`yHj&cW$+N#Q&UKt7!56G%Id z=Rh0zW#_KHMHbiAnL?&6QTWxn5*n#=9gXwle?i(FK*9C?+Xzh4Ol-0S9VvRbNuCo= zaMVpVnK#+3N(=cdYiw+6yuw~$!+xn9d9fXRxt+&6EQ4QmTUbVZ+5c>0(d|JG7GS|_ zd@>OKmsC|xWbObuhrO+=Y40oKf9O!#B?MUrlMsc|oMQ$bNUTw_`s7~V2*uCbbZD<2 z0$j*F0t9=6levf47gmT*!fSx?{SC>=YA=^V_1Xl-BLmTd1xc5L0Vqr>s6^RnH=u79bH8g^d`2*S-HZwdVj zKpSAHdha(?77W#Rl1vb%K6x=yI+@AT9N`0JQs~ZBwtEkQL5SH^Mqf@NdrpB$_f0UD zaZobAlM5fNJGsr8WsXf#vtIN&mhbe5wUsAaQdv_q-Kd&8b-`3)>VoOhj;~yB{NyRs zmsHoBa7p#l6O9FxQz}b!{urHFa1o%@a-I$eVg^qxTmTDlJ}Ds(;2E?s4}m?H>@OE9 zTl=|3*GVb|kfSol?%9&C2%eEd&6*{MR#pbcr9$vSy-2DLAQ$Y8TFCV90s`J;;6y(Dg0XW z>>|3@i)4bVDnZP!{BK?BpjzZGP#-TNq=2n}Hw3=dty=-|?7EtwlPFay3 zx0@(3n?tark)ut?aYAbayio)icS>JSF%%q`$s0NPq$GsU%HHtT$^g04u6PzeFI1A8 zF`GYC&uX)5MDg2v6v<8jey^T3%N4k&yT6c`ydmchEUteEZUvJHM)TF!`Lu?9s?!fJCIjdG;DoR`Oy{+x* zQynuD)`^k(3jPGs995}!{(XA*(?gmTx6Z6`IE}(Sixj$Y%P=lcml&7&u+!F3GrW60 zBrOAgCo1l4X_5QqC7A^X=2|k^AApxGJ9BuV2vA?pWEEcnU_Dy^o(YiZ+RC@((|f;Z ze){Gf^V5Uor%A=L0q_Fbbxr*_p9Vlz_q+bq=;Y76+`UA!rF%IpVXfD_t+7U3qp#7m zHC|53HvlZ0VNd2sXyqMN01%A)Pg%k@vqrU8ER1{O3*mp2Ja@|@r!LH?f_r)yxyK6p z71}?jF<0nVFWSie8v=w!Ox+(-_lHrjP_V)(gRvMF;S#BEaF3`l#mS z70u17CahX@kFsjjs+d{^e>yXv$9(8MgMve42^vexM_urYBZ;r0mAxVGI#CKFu`)m| z)#?4d33jKd(AS;nuB9Ot%7e~yW#~%NH0cvSBNCXVxtg4O=L|Ksw%s| z+G>Dy<8IS5V;rn{R=!OZ(rIgR!L}(`HiEFq0T7-A0w|`a=mf=Nrd$w!nTWS!twP4* zXDx;GcSd6B@kWZOiu^m8r+*8<96z;>oh_tl@J+^FWf5wG74lt9Tua@0lWS0a?zz}N+R<=MG(=2jedR^V+Q0H z#LBm$`Q?B@WK=-7R|W_Lj?&dQ(vpLPT*!x(LTW)>5LUIn=PyEJJic(R49F;uLRS|J zvQF8a>>^F-SgZNZ_pGRJ$c<{lLs3}eaUPRL16NR6A63XFH**wHbOOQ2ic^VT7u+$#gp0;6hOI${KR65yFXkFJmeq&j-i)tyyc z``!?xj~`vFo|@@DgU_-^3(TrOJ;8aMU|%WdHSOG!ZM&|nM8B&(j z*1*%S2c}>ipt4G~=!zcIrcADyZcLkMOqn|6_~UC%yyW;3O|wQ-BDFOOss@s!_Nw2L zRW*w8<1LD=DUUqz$Rkurwx<)mLROX89!w@D1*@pV7-!C+{tOmmEF0ZOO=#*S`kmmX zJr}YYdv4&lP`VepfkO?)Du;Z>thH}W5;AX``RJ*`Z4%fpvv3dPts(Fs4qId)zkKVy z$|@bgNFWy+;&tI1G*)qRh6D1N@1@gZO$o~w$7~y1oT`^I`{NIPW9JpL7h!zX^p9yLP$p0>A z%>Oa}r|^t5mW6Io~%PRTEKl4gYP@S?fEsid~q1?b(Ii zTUs6&2%Cbt`&M7vxi<1Y@;^X8s7wMGPN+*f9Rfn2F7m$%$p87g*^JzbDDW{RBm!qs zaCb>m0E$3k?Ei<#;DOBKLO#p{0fAQLA+U#tt9;{=aFPO=s6w)qbN-(X{}beBQ>tV@ zg9?4CufSU@LUO9)vzG{lQbg8rW*O5hrk|rW~P|` zd&6HV1LRVX|G^^zB^BgRhZ0kV{4W2am-3AM=0GL$^rzw%(N=usEhf(U%eGv7C_DFb2kX){}4PpkpEo(%Hw=e;^~lWp_O?E?7=W~ zE>;G}r6T`>M+U;CAY2j^0C|0JUV!|M_kRK8t`knEOFSI{LZB|TvMvydkyCRn@+DRV z2&~MsD&aTg!@)soEISfWBv~)mQa^?Is}A3U2J7tAQr>? zKgFcJl3w6!3hpk63V9F zfKVCNLH=iq(Zw@ANh=E|7N?*@1;L8_|EEL!I3cgE!2K5c|DBa$0W(t<^2tmw|M!N# z>qIRU@;_}wh&L5An}WOhR$s{fB#j8-#0RQM5Q)hDE)a|5+B1z-_J+XgkpHb<$Nqn> zSPOy%3v5xt>0}6^;K)qg@Rym;%HHtT$^g045aSj5e|+ez#{3`ie@_%ks7uatk^j9R zuRbpFB~}K=r6T`>M+TZy`c_|@7X*<8WBw1p!$aEtGejYu)vG-WI4&(pAYF8xA4Cm< z!w2J&5~*--fgPk)&TzLoTG<7Gl^JhC{s)ijg0U6^J9yAn8b#$#8K@wQ+%*>L!7x)a z^40nWa_N#pW=a8~O>X6!JATp1E(olgJO5LcXT-||yAxID{z#p{Q|iV0e;MRsR-b7Q z`Jbr|1`PirGg+_#m{^0kJcs$eJwCyH(Y?eT0D;#rOf9ssuAZlBSD&XxUVKt_Pfv6& zVm95%OtZ_mX)5CCAD#!g=J{$x=Kp?m(w|EgaWbw&X4KM#RD^2|&j z+Y(5{R@Mb*Sh&c~+51N-nLki3ISY2eQ(feLzu1cN0?hw?xT1pmPeRtWK1qqE1J5A; z^AOl0&sG*7m+JI>N%aBbg55*~!J5k8sN>=I9|rlD703S+#$L_{5Yz!?rY?AyZC*9&DFJjy4S8p6icW}JRS3YZ^)~Ui+qWd z0dlFx|KO2*(>u`)m| z75N`LG7vTe;gYBT$m@&q0_1-muBbR8Ku`zB|1Kc^GXP^a-6@#J_f2Xz>QbVDU`?ID zQ+CAhp9}=tBgz7h|B?Rza@Pqb)FsRW36VfuY-L@5hK0-gBvu9ptjzF9I8K55kNy7z zb}Vu3A4J24%;XI@hj3LR@$~L&<>89;S!LK0upsx}RmS-2ck(!%U6t~>L;eSk43tzP zQ2~(G7Z+eFaW~nEyj%@WA}v z1>)S8|Jwj#ghQyl@ku!95=X)OA5MTU|93$^x|siyzzL|M%QwMXP9l*C36Y?}v6XcJ z8kStF3=mkE2`l7(@JP)6sR=Ouhv4CX%;Z8o%mmSfR^}nF2gB6J|LH3Sex*d5O}k#M z6@RA3Th(n=pRW#L|4%BUIbi>f3!b4a>6xJHtE$-l?|{JTL?^%!D+AAAWFl9&j{5QSymd~xbHF<1J^hjMjU-XyW)2~hs&Za?R)8Ou1 zM`O(YT@gru%;Z8o%me{}R^}nFN1m-LKrXd7_&>#yl!Vjm0?qZvY(N)l0uvmfS+V~g z-~Wj3e>6>V9I&351@Cq7$oDOu43VfZ3N3V*)$0EO>p2ei2M)1!vp(&Tp-Tv8cQkhbO;EvG7o`0u>Z&6 zW$gd)iZ!y#?-mRBpASp`^1ln7J}GfXWKzM+hq8mT@eXxy2<#L57HFEg!*)BAlB%&AL>3WC*R{EwB~GL|Dt;R2J?T* zL>^|v>%VyYH>*pY;e@(`K!6qn%!IA13!afLu`)nlW#s>`*c9B|xB3dKDFk-#nN7P+ z!J(=IF@wzHf@c&-Djcos4T0A&OwC2U#L57Jsso|HBCoKL5=Hxud%M z$>$RvhyZ~q$p0=N|1$t%ghQyl(R4WKBLDlvR)NzX=KoAkGeG`#0Vt39WHcI!#bTO_ znXr}hhQRAE|HtdU6kM#?mzJz%)#o%A`QJN0k^f!r^hrsk1HOw^<{_{L@;~xFg=ehM z(<OAoV-53v9RClH6G%9z9`Zkq|99OKPKgSFHI>29l#7n@PbFV;%k*+; zOEQb&|1A??{-5$5%>Owc|Ks!DTqqW&AmoMo4-FuW|8zm_sDb4G&a_yd3ikiF;F*(1 z+GVm22?Vq<4}m?f{|EbjC_H10Hmi937q9@z32f z>%+PU|9fTpn-kCc<&Lvf^V;&;m+V~EIBDSZ_4}8$)K^ zb@_vHZX0pg+%J@^)U_o?j$HZAJC{E^{XaX$#NS$T&KVEiHGJdOXKZ=D?}z~pk4ygb z*Msl5_vzogGo#|o-aq@e>i#?L8xt+Bp1R}GtykZ+aow@Ef2rk&za2el$LlATFCPA- zi~sz>7ysWof4=2c5mhxGh-m7F2V0K3#ArF9!)Vc8*c2fRXRj~3H0Ffg-TaH=jXrv5 zeC^q55A;#hvJ%CZQ(0z|>XGxK`atdc`IQ5W{$wULFgClfv96)Ee9q$P%CW{VWMO3B zXHpBBYL_mqZ7M%)dDFtirS(nC<+CRnBaiA+c|v7nrBONc_!Erj7aY~6@L;`*w}A;utbs3Us!`9kCJ#Z6W9i_5=SUwe5^OPjn3w)|%Qni z&;GNadD4}`ujp6Re%%*7bHlGHM&DSoD7xvGAAF_Z=`ZzdzT!(a%o(Q4{$KTQ)5qUE zZ^C~bJ?ZrORzyy^{pX)dzwpOb#ZQ`l?LU5b-!<*e3>*6P+WObljri%w?Kcnjx2e2! z?rqPnY@9gl*wSi=w&lkkJF0x@ zi|uD$`;+E1hktP2wVSs-73rwCWmrR>pB$V}`G;4(8h@keq>F~FS@Pj2x3%5fcGAur z`n1QM**bFh4X2q~e)p%>|8nd-uWz{S=i~aFS9Z=3eO@W48hiM%lb&z9e(Sz{pWFZY z@9y~VG2fcA=A(<=d|>VQT0~XUJ6ocU7%kCX8zc0{`6I?giNSkK)YX!bBO+>QN;6s_ zYsm)vqb-pYMoXl*g|l%>pLj*p;+mz6^)Wb>c zq+U~Vjf+}h@rt_dG*!|Kt?9{hdQiM#QEk)G`f6_L-tmg%ORE>wFQ(h{BXbRons07g z-n4u{?Qx46s~a0Ht+%x56Nlw=$04cN+M4CnRZaDcmcX)jMRQaAqB^?K@Ra*C)YmR< zTE-ryEVZt2QOnUawcn|2Xk1deH080t6^mPgI|?O;yJ&;}wZ9=7?Q>`Q_xuH>IJUZMMYV_7)6LmGJzSyjls75bcuUp+) z)ilE(n~aK1Fvb~UHyyKSbV@}*c^X(=FQdG!DpmJh{Mwgmw#~fh509QX^8U96UO4`1 z*9^Mh_{G1STsQjdxi?&Y`90UJd1=OJm)@d(a`>j&C-0gTd-tCY>^%0p-`xAm;m0OE zaMd54+i}r-?fc$*_~7sjcip?HZsv2BE_~_x|14j^5{??rT9eLq5-=2Nh z>C+}XyMN9*XD)2{;fUvU@BPvxdtdq08B?0xFMlxd@ala>-*e|}`rhs8m&c5+zw(xj zx#LfM@6MaQ`hxPrm^b&Xf9&hmegE7~AK81;gw6N8asT{j^~pX{UbrpV@x-=k=N|oy zi$B`?kG>Z^W=@zo@h9_-eeKlEXYGCLw#MzpwOnbQ{NIw{L0eh%bG|lUr~9qG0bY_2c(wIZfIOk)lh!MX|!>l zY8-D=8Wgl~ube!ka`Kd^)2B|qAj>>LSI^V6#Ce(X2wD4mdpvsiMK8^}d4_&x%WE&q zJA3=OQ{Nx9WcYPwt$gkKJKtaT%;@(nI9%1|p~;_Lx2dUY{uj@`>zS4X8{T{O8{hil zu9C!nCocZMsoO6+d)of_2R^&!(9LfTe&VnD=l9uv&L?eOd1b|8n=Wm<_VH)ujT&!6 zX1&~N*_RqtnKMrM*@^m%kDl8<`tFL)zOv`wCzY2S`oRnT^+ClsTTXxOFYi3@?conR zHUD3O&;8!0KMkuI_4FM-Kc#x&HB;+ruldukoo9{tX#R%BUQe9U?~n1lkF=Kee{%W{ z`$aeXyXwjfV{e%I<>kA7-O;Ok&?nD~`Sycz|9V!WwKcNx@n5}i)s{1-{PmGjE_>*e z{bR@ezR%QkcieHPZ~x|XBTwA9<;JD;Ry)4>O=I;NTogWj<;I2U*B#niQq#NtihEYn zKHUD)TqdSHgS0P+z#~aaM{TsNtDX~VKfbxn2D!78ekHW){d-O8i= zjJ^)O;4{_;N#T0Ujs7gLs^5?^F4pc<5M2(s+DlhUbu~u6*=di3Gj-Qi>>iod_R8u| z9!J&Xg6+NJ`e~Y};D67xL05*%ZxILt!hvY7J~kXHJQ3aLxj09tMvglm5QuJu0jhz2 z-Od7IphRQ3nY$toorY*RWNAV~J59MRi}h{E(S6#I$*t|{$@iPdc13M#O>SvzZD0Rr z+m`m;ilW%-o=mp4?TqO&k`LSKJ8R#J#!hM_W?!u2v?7g=gT4^ccJUjf}D&#afjtRlCguKD1WaQeGcW07O8307{F$0Ne21 z=pQxtcQ@)x8jriQd3gOILmH!>NET)*3Qa7Qhh+fpfW`;^%8-26?Y28Gd&U^5AYH3TsO%I z2_nyRS{j{I;G9^8h{Qmck@ur)fu2shwAdIir>)0i4KW8x%@hguYbn3}iaK-BO!a0gX|s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/b58190b99faff2ad9403763da6624284a8552b75 b/fuzz/corpora/asn1parse/b58190b99faff2ad9403763da6624284a8552b75 new file mode 100644 index 00000000..281805a0 --- /dev/null +++ b/fuzz/corpora/asn1parse/b58190b99faff2ad9403763da6624284a8552b75 @@ -0,0 +1 @@ +???????? \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/b63d227bd0c74495095eb391559f192c8e75b4dc b/fuzz/corpora/asn1parse/b63d227bd0c74495095eb391559f192c8e75b4dc new file mode 100644 index 00000000..0748743e --- /dev/null +++ b/fuzz/corpora/asn1parse/b63d227bd0c74495095eb391559f192c8e75b4dc @@ -0,0 +1 @@ +ÿSÿSÿSÿÿSÿSÿSÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿÿÿSÿÿSÿSÿSÿÿÿSÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/b6b7e7f757eb89edd1e10a45ac162f762b5a5eef b/fuzz/corpora/asn1parse/b6b7e7f757eb89edd1e10a45ac162f762b5a5eef new file mode 100644 index 00000000..64b1e227 --- /dev/null +++ b/fuzz/corpora/asn1parse/b6b7e7f757eb89edd1e10a45ac162f762b5a5eef @@ -0,0 +1 @@ +0 000 000 000 00 \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/b6c561bd6c9654aee1706371463cd181e3df48c5 b/fuzz/corpora/asn1parse/b6c561bd6c9654aee1706371463cd181e3df48c5 new file mode 100644 index 0000000000000000000000000000000000000000..789971950beff05b1246e0bd7f0cee59b575fcb2 GIT binary patch literal 11 ScmdPoRA<#Mm7k1hWd*>I`FGyzTR8;Dto+|#>0Vc3SI z7Ail~)Plkc=5|C#V)q*46j|+JxCz+RDsoTn`h;N{-t#cj!hPq7n-k?kL@zBMwv6I~8>^cz<{vHql z`~K|v2^`hs8vrf<0B;Kbz_l&RxouC%;w7Kk+b;m<2s98tec^}wTf3ZC>tzibS8(&s z2^X+}o0RL%7N!(d2ov5Gu?ehxv6KK-U`T&#aLBygB#HW^>9z44n=J=ppIwTNKhI&M zu#HV|CSy1kYHx|+yOCEUtbTGA11m73X4f1;Kd;#(&#v0@_c{TRutkL2#lQ*-sa0u? zoT{`@1D%j~)Y9>4qKAUjPi^901%~YC?!H@Fiw9p!Vo)PPeaxp%F&We2OSXDEC*jWo zB=!jL>pB6{31ErDgs)HiF?9l{69D4VjHup7)GUz#YrWoLBo+jzQ)2sA{e%=dH6b7U zYhVti$7}IrKXSc>>W6F;Iupr4fN)}dNh>iIxG^_uU7}OxQ jtZt%;EgJUYRh__P@x(ppC zK!|~@kzsuU1Bha4+>g(-lzN1CK%!qv+hHCd+Am~-xu`k~ppXF}+=5^tgXyHi&xI`v z?AZJ?|I-#^Gr`~&1H&&6Ba{V03M=TrDvAk6a_}eI4#tuE89>0G0fY@8mLr8B7(i8^ I0*E380E1McF8}}l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/c208571bc322e36096807979457bbc16a8d57c37 b/fuzz/corpora/asn1parse/c208571bc322e36096807979457bbc16a8d57c37 new file mode 100644 index 00000000..b172536f --- /dev/null +++ b/fuzz/corpora/asn1parse/c208571bc322e36096807979457bbc16a8d57c37 @@ -0,0 +1 @@ +|áááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá I \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/c2346feb346b2b91ab789d160d6cf81a8e229ccb b/fuzz/corpora/asn1parse/c2346feb346b2b91ab789d160d6cf81a8e229ccb new file mode 100644 index 00000000..ad0ae94a --- /dev/null +++ b/fuzz/corpora/asn1parse/c2346feb346b2b91ab789d160d6cf81a8e229ccb @@ -0,0 +1 @@ +Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿúÿÿÿÿÿ®ÿµ««««*«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿÿ–Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿúÿÿÿÿÿ®ÿµ««««*«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿÿ–cc \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/c2ec2e45736794d5b72f79abef7f6947d24b8e59 b/fuzz/corpora/asn1parse/c2ec2e45736794d5b72f79abef7f6947d24b8e59 new file mode 100644 index 00000000..43f3ceb6 --- /dev/null +++ b/fuzz/corpora/asn1parse/c2ec2e45736794d5b72f79abef7f6947d24b8e59 @@ -0,0 +1,2 @@ +|ááááááááááááááááááááááááááááááááßáááááãáááááááááááááááááááááááàááááááááááááááááááááááááááááááááááááááááááááááááááááááááá  +áááááááááI \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/c2f5f5de841c932274fad360dd3f3a8f3f55d7ea b/fuzz/corpora/asn1parse/c2f5f5de841c932274fad360dd3f3a8f3f55d7ea new file mode 100644 index 0000000000000000000000000000000000000000..a13d82e68fc047ccf9b2c533704d938950386f37 GIT binary patch literal 7158 zcmeHLQ4WGI47D{e@f3b4+(Pev7Y|@`rnDW-tvC%31MP$^)ZtTFC~z!TFdCK{MmF4F*D&5Ey~xZ*8;#q3Kqya$`j zKu0N!8ZIAGGb&ZGr*ZlCTCW#?ot}qA-w!L+ zgwP0bE+3vg?myYmX``xAX?towcyJh{(;z*F;1t@Ti0h g9E=V|tqxQkoX6B1SzVY=cnTPK?sO+T@TeTGC&HeW1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/c3901b10f11edaee8cf85b9359f6f4189686e825 b/fuzz/corpora/asn1parse/c3901b10f11edaee8cf85b9359f6f4189686e825 new file mode 100644 index 00000000..5944c2e6 --- /dev/null +++ b/fuzz/corpora/asn1parse/c3901b10f11edaee8cf85b9359f6f4189686e825 @@ -0,0 +1 @@ +l€h€l€h€h€l€h€h€l€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/c3facd6eed7fd5d7f9edc879430d5bbb94226561 b/fuzz/corpora/asn1parse/c3facd6eed7fd5d7f9edc879430d5bbb94226561 new file mode 100644 index 0000000000000000000000000000000000000000..7b9ff597331edeabc54ba85b04d57eb0369e2306 GIT binary patch literal 27 Tcmd<$`p*CbTwF-(>D~1JElUI3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/c40fc59771017e049ed7dfc12606d7e56a4d2321 b/fuzz/corpora/asn1parse/c40fc59771017e049ed7dfc12606d7e56a4d2321 new file mode 100644 index 00000000..6605ccab --- /dev/null +++ b/fuzz/corpora/asn1parse/c40fc59771017e049ed7dfc12606d7e56a4d2321 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/c4523bd7d08b05298c31b95a82bf534bf6597812 b/fuzz/corpora/asn1parse/c4523bd7d08b05298c31b95a82bf534bf6597812 new file mode 100644 index 0000000000000000000000000000000000000000..4a4f502245ad77f198021a7821fe25f0881d26d4 GIT binary patch literal 18 Scmd04$Y6NWkO3nbavA_k$_P0C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/c4d8096393f088c707addc058aaece73a871433d b/fuzz/corpora/asn1parse/c4d8096393f088c707addc058aaece73a871433d new file mode 100644 index 0000000000000000000000000000000000000000..25f2a938f1c0c1467f16f2fa6ce829828a83d02e GIT binary patch literal 90 zcmXqLFlb<7PXEQQpn*y8fBpae%;{>&mMvSxAoHJrfq{uZ;3vb2|NlU21_rQ70YNK;8i9C(Gv0x92{90NpIL5rXOL|H+LfIwOnX$r^y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/c746024636af38fd84171b3fbb8535c384d62c94 b/fuzz/corpora/asn1parse/c746024636af38fd84171b3fbb8535c384d62c94 new file mode 100644 index 0000000000000000000000000000000000000000..49d7133f005a1547c9713f2fd106fd4905ee561a GIT binary patch literal 64 McmWe(5TOVH08+pLfdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/c765fd0bc1f8cf14222a2d192a64f95880bb1ad4 b/fuzz/corpora/asn1parse/c765fd0bc1f8cf14222a2d192a64f95880bb1ad4 new file mode 100644 index 00000000..c5c41362 --- /dev/null +++ b/fuzz/corpora/asn1parse/c765fd0bc1f8cf14222a2d192a64f95880bb1ad4 @@ -0,0 +1,4 @@ + +‚€€€€€€€€ +‚€€€€€€€€ +‚€€€€€€€€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/c83a15cbe61a52848d59f77e8b1b59eecfcdb7ca b/fuzz/corpora/asn1parse/c83a15cbe61a52848d59f77e8b1b59eecfcdb7ca new file mode 100644 index 0000000000000000000000000000000000000000..dca456ce2f07aab8e0a697639597c9513fc32119 GIT binary patch literal 2995 zcmeH}F%Ej4w0tVg&$eM^=eXn$rIg2+g z99!o&U!CPAWO=MC`#46)-gd$bMa#C)`ZPt!?x+T3e?Q6p6>Tc1Py?+iIrZ)FnS9M~ zOnn=wz>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/cff59d8122a016877a09322a51938b1ea076a828 b/fuzz/corpora/asn1parse/cff59d8122a016877a09322a51938b1ea076a828 new file mode 100644 index 0000000000000000000000000000000000000000..460920c8f930d2c62c812f4a282c4a963bcfb64d GIT binary patch literal 911 zcmZQ$W8{LOw{PD*`+tc|tCdak3FEW>pZ;I{^yCy&5L4ArY|21-h1mXU{lCvu|3g%Z vjXBhSk%5Jg5hlR^2gF+evYMJs1Nm{tdx!YoLyO4K7$TUashHqM4Q@sN{}ZZL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d01061380778633f9b4a72a4c34a9d3e7d4b3504 b/fuzz/corpora/asn1parse/d01061380778633f9b4a72a4c34a9d3e7d4b3504 new file mode 100644 index 00000000..4064a1d2 --- /dev/null +++ b/fuzz/corpora/asn1parse/d01061380778633f9b4a72a4c34a9d3e7d4b3504 @@ -0,0 +1 @@ +Vi² \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d03b0644433de97212c6bdb1e0a24ac686befe58 b/fuzz/corpora/asn1parse/d03b0644433de97212c6bdb1e0a24ac686befe58 new file mode 100644 index 00000000..b10acafd --- /dev/null +++ b/fuzz/corpora/asn1parse/d03b0644433de97212c6bdb1e0a24ac686befe58 @@ -0,0 +1 @@ +qëd \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d0c4b991e835d25ee7043e8b8b4b7e50a731e27d b/fuzz/corpora/asn1parse/d0c4b991e835d25ee7043e8b8b4b7e50a731e27d new file mode 100644 index 00000000..2e04607b --- /dev/null +++ b/fuzz/corpora/asn1parse/d0c4b991e835d25ee7043e8b8b4b7e50a731e27d @@ -0,0 +1 @@ +0€0€0€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d0ce7fd02be1a62ea9b75cf35a34fbf7c026a9d8 b/fuzz/corpora/asn1parse/d0ce7fd02be1a62ea9b75cf35a34fbf7c026a9d8 new file mode 100644 index 0000000000000000000000000000000000000000..5a3452f409a089b776c66cd995eb51afdfc33a53 GIT binary patch literal 25 WcmezW|Nnn2hX4Qn|7QY|a5ez#KoLj) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d128fe0bc7ae213378a03e5f2e260780d9c09acf b/fuzz/corpora/asn1parse/d128fe0bc7ae213378a03e5f2e260780d9c09acf new file mode 100644 index 0000000000000000000000000000000000000000..c6632f6fd027459a5e2c8efa3f23ee6528880f0a GIT binary patch literal 13 Ucmd;Lod1b|i}Cq)1}?_W033@1ga7~l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d17dc7fc5c23003ae354aad6f5d21e98270801c4 b/fuzz/corpora/asn1parse/d17dc7fc5c23003ae354aad6f5d21e98270801c4 new file mode 100644 index 00000000..62ff6f77 --- /dev/null +++ b/fuzz/corpora/asn1parse/d17dc7fc5c23003ae354aad6f5d21e98270801c4 @@ -0,0 +1 @@ + +0; \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d17f247fe8a0998745972d528308f98361e87557 b/fuzz/corpora/asn1parse/d17f247fe8a0998745972d528308f98361e87557 new file mode 100644 index 00000000..ae086137 --- /dev/null +++ b/fuzz/corpora/asn1parse/d17f247fe8a0998745972d528308f98361e87557 @@ -0,0 +1 @@ +l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l€l \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d18f112320ad9f0a0301501431528e3471da2cc7 b/fuzz/corpora/asn1parse/d18f112320ad9f0a0301501431528e3471da2cc7 new file mode 100644 index 0000000000000000000000000000000000000000..a072fee4cf2562140ae12e0cb71cf1ef1c8ecf9f GIT binary patch literal 13 NcmZQ+WMF|I4FC_@0zCi# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d22c6eb8369f160766c7932e80447052352f06fa b/fuzz/corpora/asn1parse/d22c6eb8369f160766c7932e80447052352f06fa new file mode 100644 index 0000000000000000000000000000000000000000..b4e260fcee0807d6227087c45cf4c44d46caa65a GIT binary patch literal 278 OcmZQ$U>k)PApii$Jp)4k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d340c36ebec364d34c1de1726c44172442a7e355 b/fuzz/corpora/asn1parse/d340c36ebec364d34c1de1726c44172442a7e355 new file mode 100644 index 0000000000000000000000000000000000000000..b7718070635d9f4a12195bdce35b4bf6fac24934 GIT binary patch literal 339 ocmZQ#>Na3&od0P{-}FqFkovmU~3#2u4G_fW7BE`0Qjh*-T(jq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d3791aafcf7ab885d44112b6a5d55cdb7739df3c b/fuzz/corpora/asn1parse/d3791aafcf7ab885d44112b6a5d55cdb7739df3c new file mode 100644 index 0000000000000000000000000000000000000000..932aea3eb9586c0820044572aa02970d980db5b8 GIT binary patch literal 8 LcmWe(5CKB~0hj<$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d394703f7511c7bca89b465c63ffe7ffbeeac19e b/fuzz/corpora/asn1parse/d394703f7511c7bca89b465c63ffe7ffbeeac19e new file mode 100644 index 0000000000000000000000000000000000000000..3c388b0508269b561264c70d5154f703acdd4809 GIT binary patch literal 12 PcmZQ;WMBiM^$iRF57Pq0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d3b3039003eb7192d53b6ce89b36724d2fd7637e b/fuzz/corpora/asn1parse/d3b3039003eb7192d53b6ce89b36724d2fd7637e new file mode 100644 index 0000000000000000000000000000000000000000..497cf50e4b91460594e1a5de57ab187cfdf34db7 GIT binary patch literal 2102 zcmd^;Q3`+{5JcAq!Jm%M8Rm!{J+j)Lbwn1yBK&gQ=ZvEwBQFbp90Np<&k;k~Rsf|C zL)!1jwO%Vc?YzV6L6M?w+D(D-+yh01Nm2!eDF-s_9Q|pxCEKfd!jZ9kS<;b1|4nJy r{m9Rn-AWHv-4@ovCxGTl8#iC3uQX-eEM$bu8%9Apn6 dv#F9+_0=@G;%?C4nfXFFRRHsawIc3U}H4~>y`LyL?E1Rego2ZuP^iyJw zz+m&{C2vplPCuoP((p-x;nDF&|LdnuKh^u_@uNp4|DWoezm!i}K!6VlH2C;5K}>eO zDJvL2V9FH6DP0v)de}Z~IrXVQlub-jYs!@3DN|Y)m=vynL4!m1F$D&JcipXQqHG|W zOHQ#hT)Fap=H@F5-@c`M`}VEu8x*kouUD9|lusIF8}UBigSd?M6CWSnlodZ27$8Py T@bU3|;k4pbx8i5j%F6=)e0qt+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d5f9c956409edc620070eb6049df2ab31a235ab6 b/fuzz/corpora/asn1parse/d5f9c956409edc620070eb6049df2ab31a235ab6 new file mode 100644 index 0000000000000000000000000000000000000000..4130357d15ca8cd10f0fde0244d93f84614f0680 GIT binary patch literal 25 NcmZQ+WMILDGyph#1W^D0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/d8a30384341c38fa8c8d2941320fbe454f87854a b/fuzz/corpora/asn1parse/d8a30384341c38fa8c8d2941320fbe454f87854a new file mode 100644 index 00000000..054c0b1e --- /dev/null +++ b/fuzz/corpora/asn1parse/d8a30384341c38fa8c8d2941320fbe454f87854a @@ -0,0 +1 @@ +(€;(€; \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d8b0e60d3c460a80a1a8288a0c988e0b342f7a44 b/fuzz/corpora/asn1parse/d8b0e60d3c460a80a1a8288a0c988e0b342f7a44 new file mode 100644 index 00000000..1a93a637 --- /dev/null +++ b/fuzz/corpora/asn1parse/d8b0e60d3c460a80a1a8288a0c988e0b342f7a44 @@ -0,0 +1,2 @@ +|ááááááááááááááááá¡ááááááááßáááááãáááááááááááááááááááááááàááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááááá  +áááááááááI \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/d9b2b8a674ca3b46d216f94ac1cf3c133027b943 b/fuzz/corpora/asn1parse/d9b2b8a674ca3b46d216f94ac1cf3c133027b943 new file mode 100644 index 00000000..a20d3472 --- /dev/null +++ b/fuzz/corpora/asn1parse/d9b2b8a674ca3b46d216f94ac1cf3c133027b943 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/da03856e9f3c3e22e342dfccb4cacede7a1b63ab b/fuzz/corpora/asn1parse/da03856e9f3c3e22e342dfccb4cacede7a1b63ab new file mode 100644 index 0000000000000000000000000000000000000000..fcc025db4a312225cf42f7d7a9fe84cca4f3e931 GIT binary patch literal 54 UcmZSMZfbx6DF-&9I1Ex!04neksQ>@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dac027a0cfd82171c52f0836099eb32d2db5284b b/fuzz/corpora/asn1parse/dac027a0cfd82171c52f0836099eb32d2db5284b new file mode 100644 index 0000000000000000000000000000000000000000..8419753a029ae3462d71f7f0b6fee1fd882aa325 GIT binary patch literal 22 acmezW|Nnn2hX4Qn|7QY|JPbTq4F3VLX$@ik literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/db595d74c29e38f17665a05239f27a709bc24cda b/fuzz/corpora/asn1parse/db595d74c29e38f17665a05239f27a709bc24cda new file mode 100644 index 00000000..5ae15633 --- /dev/null +++ b/fuzz/corpora/asn1parse/db595d74c29e38f17665a05239f27a709bc24cda @@ -0,0 +1 @@ + ) \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/db7bc5e471529ac346ed8725516699e4619806f7 b/fuzz/corpora/asn1parse/db7bc5e471529ac346ed8725516699e4619806f7 new file mode 100644 index 0000000000000000000000000000000000000000..ac5c97d57d84888d22edae5edc6acf783e53690e GIT binary patch literal 10 RcmWe*c*QW6L4n~F0{{*<0;m80 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dbc2045d8f266834887df6b4efb670901988cadd b/fuzz/corpora/asn1parse/dbc2045d8f266834887df6b4efb670901988cadd new file mode 100644 index 0000000000000000000000000000000000000000..324635b1c2bf430f7baa7714e990cf01d0de24e7 GIT binary patch literal 16 QcmZQ#Vqjo`VFm*O00A-pZvX%Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dc6bd6927e7af31ee921ec30cae98b662b4b33eb b/fuzz/corpora/asn1parse/dc6bd6927e7af31ee921ec30cae98b662b4b33eb new file mode 100644 index 0000000000000000000000000000000000000000..150a5fcfe4b8e663e0d9fd60f611c62a3b80179c GIT binary patch literal 8 Pcmd;L>1JSHU|<0N1G)g7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dc9ad2e4e03df85ffc34e4ef1f2ec9d98ee1c582 b/fuzz/corpora/asn1parse/dc9ad2e4e03df85ffc34e4ef1f2ec9d98ee1c582 new file mode 100644 index 0000000000000000000000000000000000000000..24c72e0d85e1aa602eb9920386824dfb2dceff8c GIT binary patch literal 815 vcmZP*W30pm*szFOGl*$m69)lo;-l&jU@(VIE!3GKCB9e~KoAx;B>5Tu*r+>o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dcd63fa3aff61c70507a02bcf02f4e78aa9095b9 b/fuzz/corpora/asn1parse/dcd63fa3aff61c70507a02bcf02f4e78aa9095b9 new file mode 100644 index 00000000..4df50c6a --- /dev/null +++ b/fuzz/corpora/asn1parse/dcd63fa3aff61c70507a02bcf02f4e78aa9095b9 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/dd0de759f6399379d7858bb8f96b68f2e81fa0bb b/fuzz/corpora/asn1parse/dd0de759f6399379d7858bb8f96b68f2e81fa0bb new file mode 100644 index 0000000000000000000000000000000000000000..eba975c41aa171caf6d57870ae2f61501d2e6c2b GIT binary patch literal 5 McmZQ$YGPmn00FW9i~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dd9b8e439c73f8d817036427f82c8c0fba53505b b/fuzz/corpora/asn1parse/dd9b8e439c73f8d817036427f82c8c0fba53505b new file mode 100644 index 00000000..7859b4e6 --- /dev/null +++ b/fuzz/corpora/asn1parse/dd9b8e439c73f8d817036427f82c8c0fba53505b @@ -0,0 +1 @@ +                                                                                                                                    \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/ddd451be375ee6bc1ec8e2eba45ef9fbf1e7015d b/fuzz/corpora/asn1parse/ddd451be375ee6bc1ec8e2eba45ef9fbf1e7015d new file mode 100644 index 0000000000000000000000000000000000000000..0ab306df26d4824fa15c27899b2aef9c1571c51e GIT binary patch literal 145 fcmZQ;91u_mxAj^B0~`1BQ=g`9`Pp#nS_1n+fLu05Xa# A-v9sr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/deca50b677fe8ed12dc027d5424ceba762d5b7e3 b/fuzz/corpora/asn1parse/deca50b677fe8ed12dc027d5424ceba762d5b7e3 new file mode 100644 index 0000000000000000000000000000000000000000..98775c99c73ead0ea1c7141aeba2a7d6c2b44269 GIT binary patch literal 9 LcmXqGXMg|z0w(}I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/df3c0a21d22d2592cfd58c0d709f80924f193587 b/fuzz/corpora/asn1parse/df3c0a21d22d2592cfd58c0d709f80924f193587 new file mode 100644 index 0000000000000000000000000000000000000000..54660272c8c01eec7603961b055d8b31b42d9e55 GIT binary patch literal 4 LcmZQ!U||3N02}}b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/dfad06dc230396bc6f846df6f25aff6419a427c1 b/fuzz/corpora/asn1parse/dfad06dc230396bc6f846df6f25aff6419a427c1 new file mode 100644 index 00000000..a4f2f511 --- /dev/null +++ b/fuzz/corpora/asn1parse/dfad06dc230396bc6f846df6f25aff6419a427c1 @@ -0,0 +1,11 @@ + + + + + + + + + +(.Ÿ +½ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/dfc7923dc2d026ec8b9fe95ef01deb54f0d01d27 b/fuzz/corpora/asn1parse/dfc7923dc2d026ec8b9fe95ef01deb54f0d01d27 new file mode 100644 index 00000000..a22dd79b --- /dev/null +++ b/fuzz/corpora/asn1parse/dfc7923dc2d026ec8b9fe95ef01deb54f0d01d27 @@ -0,0 +1 @@ +ÿ ç \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/e0ed8db3840119ef6d99e571928e7f14512cb59c b/fuzz/corpora/asn1parse/e0ed8db3840119ef6d99e571928e7f14512cb59c new file mode 100644 index 0000000000000000000000000000000000000000..22f348eb5f089ebd06808dd40c85f4486eaf5ef8 GIT binary patch literal 85 WcmZQ#Vqjvj`p>|?z{o%?@E-tW2m(R? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/e268b5e46b6e045e004bae6ff44c22109e97efcb b/fuzz/corpora/asn1parse/e268b5e46b6e045e004bae6ff44c22109e97efcb new file mode 100644 index 00000000..ad4952b2 --- /dev/null +++ b/fuzz/corpora/asn1parse/e268b5e46b6e045e004bae6ff44c22109e97efcb @@ -0,0 +1 @@ +„Ÿÿÿßÿ³ÿÿ–ÿÿÚÿÿÿÿß \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/e341b44b57620d2815a0a78ea255a17cdadd00ea b/fuzz/corpora/asn1parse/e341b44b57620d2815a0a78ea255a17cdadd00ea new file mode 100644 index 0000000000000000000000000000000000000000..298f838a3e094d6ab720ce8fce2adb9f218834bf GIT binary patch literal 34 dcmd04$Y6NWkkOFQkOL#Ze300OhMb0+1^^aO5Rm`? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/e351bee3867de466611904c30d64664b31b3f67b b/fuzz/corpora/asn1parse/e351bee3867de466611904c30d64664b31b3f67b new file mode 100644 index 0000000000000000000000000000000000000000..7e01df9a46e2af7b1a00962c17eb89e97b183144 GIT binary patch literal 19 NcmZQ+WMDx>8UP^<14jS= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/e39ec802a2f2e75d56959ce7528bf313b87ef78b b/fuzz/corpora/asn1parse/e39ec802a2f2e75d56959ce7528bf313b87ef78b new file mode 100644 index 0000000000000000000000000000000000000000..610392ac6858110fcd4f5d8cfbdc6f4d5dcca524 GIT binary patch literal 146 pcmZQ;?1uwII12)%A@ds>8ymp{^#S+vQ=g`9`Pp#nS_1nW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/e3d04fa6afe55e6161d51aef7e1c916ff282feb4 b/fuzz/corpora/asn1parse/e3d04fa6afe55e6161d51aef7e1c916ff282feb4 new file mode 100644 index 0000000000000000000000000000000000000000..bb94c4b655f49d04896c9d70f2043d35158b2949 GIT binary patch literal 128 WcmZQ#VqjuoVqjn*od)TlSRVi=ya1g5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/e441b5ed66f47dc20d7de9719407eddaea3b6b0f b/fuzz/corpora/asn1parse/e441b5ed66f47dc20d7de9719407eddaea3b6b0f new file mode 100644 index 0000000000000000000000000000000000000000..463771393405aaead9999f3ef3f6eed0b829e676 GIT binary patch literal 113 fcmZSMp3wjW0Sr`yocEZyZ}pKR7%@8W3ueWj1lOQuPfElu0Y53;-TE`x=^)tI5q<3_m1Ge16=VMo2j6Tj8vR&_@nA*w2AS8`k0QI>L+8?LYej{OR rK#nEe%}zaRyb(oOZ4mXSJMw=L?*AvQ7=P{>gUf8)6a6%1TI#+4|H>ZJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/ed341f97baaf3a5fb905d469f2cab700c4af7d04 b/fuzz/corpora/asn1parse/ed341f97baaf3a5fb905d469f2cab700c4af7d04 new file mode 100644 index 0000000000000000000000000000000000000000..50646db18f09e02d97ebe3e786bae027af399011 GIT binary patch literal 6 NcmZQ!U}0ck0000s01W^D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/ed859136897482e24aedf1e983f1a3fa046cdafe b/fuzz/corpora/asn1parse/ed859136897482e24aedf1e983f1a3fa046cdafe new file mode 100644 index 0000000000000000000000000000000000000000..484d0519e190bb61f10a8cffa09b47fea3f00dba GIT binary patch literal 844 zcmZSM-3kK#|NsBLb?bgdCZ=u!w#NCNw)9Ou)jPj|Y@kV;&ffW-h_&VappC zK!|~@kzsuU1Bha4+>g(-lzN1CK&oHbVICpcFJyzcBZQ6jsoKRTLAD0gH6kUK6kqtkbJl zsR(Cn5KapnNwQIi2E2fv&&;x4v%~JYBW2G-?>LDLRRw1i>q_CW-8!*t+-cK@6Fz@P z;UgZ17L9H?C>sAh!YaSTn4K&?v$`f^9(}q?vCT+<0jNM5TTz8eLwD>hQqiC08!izlO+0_6Bp*) zuQ;v?c~lx7BWTkZ`9&+wU2Ga2Xy-1j;?iQVcgPx# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/ef269abff849f1bbaae529d8dfd76ec720a43462 b/fuzz/corpora/asn1parse/ef269abff849f1bbaae529d8dfd76ec720a43462 new file mode 100644 index 00000000..1aee08cb --- /dev/null +++ b/fuzz/corpora/asn1parse/ef269abff849f1bbaae529d8dfd76ec720a43462 @@ -0,0 +1 @@ +g*g* \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/ef3b5dd51d64de04e57c3809a65eb8eb0ceb1ae5 b/fuzz/corpora/asn1parse/ef3b5dd51d64de04e57c3809a65eb8eb0ceb1ae5 new file mode 100644 index 0000000000000000000000000000000000000000..601eb78b749dd212830b82d260545b4611e6f4b8 GIT binary patch literal 64 McmWe<5T^(N0AC;i;Q#;t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/efc97347ce280b149f9df3c1dd02a3089859a671 b/fuzz/corpora/asn1parse/efc97347ce280b149f9df3c1dd02a3089859a671 new file mode 100644 index 0000000000000000000000000000000000000000..8333ecf4a0f7bfa19003c275772881b7cb0261f5 GIT binary patch literal 4096 zcmeIwF%1A93$LOx(}`0e9n1r{+b@>WXIHBUiWIy50Mi|0z8nJ?Mey WK@Ut1dSH6c1Ji>Zm>%@NemxuoWjMM3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f036aea710b394155c4a0b3075fc5a24a9466c2b b/fuzz/corpora/asn1parse/f036aea710b394155c4a0b3075fc5a24a9466c2b new file mode 100644 index 00000000..f96abc3c --- /dev/null +++ b/fuzz/corpora/asn1parse/f036aea710b394155c4a0b3075fc5a24a9466c2b @@ -0,0 +1 @@ +%ÊŸ—òÉò´Êíííæíííïíííõíííò…á®ÿÿÿÿÿÿÿÿ â \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f08455633bc22ac2460cbb7029358066cd1d5cb1 b/fuzz/corpora/asn1parse/f08455633bc22ac2460cbb7029358066cd1d5cb1 new file mode 100644 index 0000000000000000000000000000000000000000..c17295efccb7e65fa7bdb76a7206d8e7a94b157a GIT binary patch literal 48 WcmbRLsdqjj!+dOHI|D)-&ISN3N)^8V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f0f0ae98c224dd4bd765106620c94eca90217e8b b/fuzz/corpora/asn1parse/f0f0ae98c224dd4bd765106620c94eca90217e8b new file mode 100644 index 0000000000000000000000000000000000000000..b62005c8f51cc1a8b20931b7ccc823716ba79070 GIT binary patch literal 115 lcmezW|Nnn2hX4Qn|7QY|SlJLMCI(a`Se3$!!zv3l008=QN=g6# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f1331e8b9c9fe53d33cb5b437eb37afb01e12b3a b/fuzz/corpora/asn1parse/f1331e8b9c9fe53d33cb5b437eb37afb01e12b3a new file mode 100644 index 0000000000000000000000000000000000000000..d3f834876d9c4ca9e78cec28ea9cf24a96c23606 GIT binary patch literal 12 TcmZSM&}Lw0VEAOEr%?|84Ala= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f1a1ecc8b28a9d541439527abc7c85b3bffc0833 b/fuzz/corpora/asn1parse/f1a1ecc8b28a9d541439527abc7c85b3bffc0833 new file mode 100644 index 00000000..fe9c7f9b --- /dev/null +++ b/fuzz/corpora/asn1parse/f1a1ecc8b28a9d541439527abc7c85b3bffc0833 @@ -0,0 +1 @@ +; \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f1d1d8463e9ce2527065fb0742fe22cf210065f6 b/fuzz/corpora/asn1parse/f1d1d8463e9ce2527065fb0742fe22cf210065f6 new file mode 100644 index 0000000000000000000000000000000000000000..fe68809fc4e67500f9d7639c200cd34411032e9c GIT binary patch literal 812 zcmZQmDACwnQo`n_$@T32r~g+!g24aD|Ccdpa6NmV&Bn;eHgZ+mq*Z_n_n@U&z_GHj q8yZ`fn3)(Fus%QrB_PfdWRV9C9wdMWP^$hv`M=gO$~6CHU;qI9?zx5l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f2358589c0dcc3b3b9d2c5cb840101e2191ca3cb b/fuzz/corpora/asn1parse/f2358589c0dcc3b3b9d2c5cb840101e2191ca3cb new file mode 100644 index 0000000000000000000000000000000000000000..205292427b13c1eb973af89f5e36ff4649281cc9 GIT binary patch literal 8 LcmWe<5C=m50n`9p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f238d7dbf391b264c88579892cb54b2170fc7bbf b/fuzz/corpora/asn1parse/f238d7dbf391b264c88579892cb54b2170fc7bbf new file mode 100644 index 00000000..ea785731 --- /dev/null +++ b/fuzz/corpora/asn1parse/f238d7dbf391b264c88579892cb54b2170fc7bbf @@ -0,0 +1 @@ +! \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f2438e360ab7835019c74e53f8c063566e4025e5 b/fuzz/corpora/asn1parse/f2438e360ab7835019c74e53f8c063566e4025e5 new file mode 100644 index 0000000000000000000000000000000000000000..5b3c9b2a6563e44459718c39bc8f42f8c9b5e6dc GIT binary patch literal 10 RcmZQ#`pCe<^pQbA0ssrz0viAT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f2b61836f31393e9c149bd60871add50f3a98bde b/fuzz/corpora/asn1parse/f2b61836f31393e9c149bd60871add50f3a98bde new file mode 100644 index 0000000000000000000000000000000000000000..dfacd0beccfc0f6ff0b091ba815bca7ea23c3a6c GIT binary patch literal 247 tcmXqLU}97-WH4+nXkcU1Vqm~Q;grCqiH%W)Xnn-1#Og>Qw1=`GApqJVANK$N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f2bae4d8e23912aa07a0ccfefdd5128594b753ed b/fuzz/corpora/asn1parse/f2bae4d8e23912aa07a0ccfefdd5128594b753ed new file mode 100644 index 0000000000000000000000000000000000000000..ec8f82eec00d5f85ee7d0a38139d3044c3f6c869 GIT binary patch literal 16 RcmZSMp3wjW0Srt{N;=){?5>@HUERH&2yt;9 zA`;FVIFS4u`u-zL|9e$a%~@&xrRsRs;l`x{l?6dkDD{whh@{`AfasO>nXNcwt)(N6 zsQW7w7jO=wJPZH>;tK);B0nVsB=O#kx}J1nrnYIDs;f<9^sFCxYes9kd8@~+s_VIk Y3rBOAHz_$A*T<5!d6!uz@z{9214GEBnE(I) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f3baaf0a9f2fe0209a5924cfbac1981135ee4e61 b/fuzz/corpora/asn1parse/f3baaf0a9f2fe0209a5924cfbac1981135ee4e61 new file mode 100644 index 0000000000000000000000000000000000000000..8f26af96c3c3e8305785f0211ca37ff46a378245 GIT binary patch literal 7 OcmdO7Wnf@n-~<2xO#nCm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f3bf9d2646d2b4f4c13519afaaf62d8b3f112c2e b/fuzz/corpora/asn1parse/f3bf9d2646d2b4f4c13519afaaf62d8b3f112c2e new file mode 100644 index 0000000000000000000000000000000000000000..cfdd8922d20f8cb97291f979133a2fd4d346451c GIT binary patch literal 136 PcmZQ+Y~&qyz`y_iPOk^9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f41526dcc4394041665266416fc354e58c93e4c9 b/fuzz/corpora/asn1parse/f41526dcc4394041665266416fc354e58c93e4c9 new file mode 100644 index 0000000000000000000000000000000000000000..1953c431c8e53bf9cc8db1e0968977c544311660 GIT binary patch literal 64 McmWe)5TXbI07`%YK>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f43d2912c42de505da4eb6f71fc69a9bf8747499 b/fuzz/corpora/asn1parse/f43d2912c42de505da4eb6f71fc69a9bf8747499 new file mode 100644 index 0000000000000000000000000000000000000000..ca41db2e93b13af17f1fd3c5c275eb79ecb1668c GIT binary patch literal 8 PcmZQ$U}IooU|J6V0Ve>& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f4aed5a5e088e5aa3e5e9e5d1c682e0a46606ddb b/fuzz/corpora/asn1parse/f4aed5a5e088e5aa3e5e9e5d1c682e0a46606ddb new file mode 100644 index 00000000..36fb8642 --- /dev/null +++ b/fuzz/corpora/asn1parse/f4aed5a5e088e5aa3e5e9e5d1c682e0a46606ddb @@ -0,0 +1 @@ +…ÿÿ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f4f704f7d91a0f0559d12885d30bd634c623df5d b/fuzz/corpora/asn1parse/f4f704f7d91a0f0559d12885d30bd634c623df5d new file mode 100644 index 00000000..6ac17fa9 --- /dev/null +++ b/fuzz/corpora/asn1parse/f4f704f7d91a0f0559d12885d30bd634c623df5d @@ -0,0 +1,3 @@ + +ô +ô \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f519b077c4f276ec7366d75d0c773797bcd0d44d b/fuzz/corpora/asn1parse/f519b077c4f276ec7366d75d0c773797bcd0d44d new file mode 100644 index 0000000000000000000000000000000000000000..c73baf287d5993ed65115bf567ccc160e01270b4 GIT binary patch literal 24 UcmbRLsdqjj!+aRo&H!Zt0F(?0-~a#s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f5252fdc2868afeb077044d3131a2ca62347e759 b/fuzz/corpora/asn1parse/f5252fdc2868afeb077044d3131a2ca62347e759 new file mode 100644 index 00000000..7ea12371 --- /dev/null +++ b/fuzz/corpora/asn1parse/f5252fdc2868afeb077044d3131a2ca62347e759 @@ -0,0 +1,2 @@ + +ÿÿNÿú  \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f57138506e36d8450b56dec0dc931328234f878c b/fuzz/corpora/asn1parse/f57138506e36d8450b56dec0dc931328234f878c new file mode 100644 index 00000000..b13aaa8a --- /dev/null +++ b/fuzz/corpora/asn1parse/f57138506e36d8450b56dec0dc931328234f878c @@ -0,0 +1 @@ +}}}}}}}}}}}}}}}}}}} \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/f577ae9a8ac7019f1601490dbffbc9961c25dee5 b/fuzz/corpora/asn1parse/f577ae9a8ac7019f1601490dbffbc9961c25dee5 new file mode 100644 index 0000000000000000000000000000000000000000..7adaadce6b5010505124edb798ad4d109af4ca9c GIT binary patch literal 4740 zcmeH~%WcCj42ET=$U&C^Ic0$Y-Ju(Ghyq!lYh(wnp$)o3kAFckQW!g=Bs&gbG~Xcz z1d1Uv!b**w-T2nqw|T1eI?` zDaqr4o6vr)w!op|QSWel3L@6DUFoiiwHPw2*i1g<;5bO?*`U|@T&tKxs_rr{6-rjr zHt#0CWH{q zQnfU$a0i)*e1s6XuIqT~^TIP}x>1hO#H;Z}K9xxocZ+SO6P1iV0Y)6- cis?WU8gRak4}0S;X`G`+{RBBpy`jhd0j1v-*#H0l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f591ccc98552c31c376ef8b4124cfa921d612195 b/fuzz/corpora/asn1parse/f591ccc98552c31c376ef8b4124cfa921d612195 new file mode 100644 index 0000000000000000000000000000000000000000..79707126a3ed4956af112ac39e647403a7f06bf3 GIT binary patch literal 75 zcmZQ_`pQUv8KtDArJ7h8B^g1c>$@DVy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f8c1e112428497f7ff7e289dbe2cee5cb9538c04 b/fuzz/corpora/asn1parse/f8c1e112428497f7ff7e289dbe2cee5cb9538c04 new file mode 100644 index 0000000000000000000000000000000000000000..4e18d725d65447bd7c4328d23e27ea0eaa2a243e GIT binary patch literal 82 Vcmd;L;35HfLDh1=X$U|z0{}`^0l5GG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f8c52b1607cac69d4c53b6237b9e58269bb7436b b/fuzz/corpora/asn1parse/f8c52b1607cac69d4c53b6237b9e58269bb7436b new file mode 100644 index 0000000000000000000000000000000000000000..9c644ce79cc791f70ba077818fc383d40082507e GIT binary patch literal 64 McmWe;5T*zM08XF+VE_OC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/f991ae785fbca0aa030c3253c43dd652c0c95f7e b/fuzz/corpora/asn1parse/f991ae785fbca0aa030c3253c43dd652c0c95f7e new file mode 100644 index 00000000..e1fc16a4 --- /dev/null +++ b/fuzz/corpora/asn1parse/f991ae785fbca0aa030c3253c43dd652c0c95f7e @@ -0,0 +1 @@ + µµµµµÿÿÿÿµµ¿A \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/fa89079c59d40b65bcf3935c5e114c0d8d1624a5 b/fuzz/corpora/asn1parse/fa89079c59d40b65bcf3935c5e114c0d8d1624a5 new file mode 100644 index 0000000000000000000000000000000000000000..8667c23a7e7560d654bad389676b8a32947418c6 GIT binary patch literal 84 ScmZQ!V4)6#8e?E!U;qFfbOB`m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/faa7a0bb854984b2eadc1544a4aaea98435fd49b b/fuzz/corpora/asn1parse/faa7a0bb854984b2eadc1544a4aaea98435fd49b new file mode 100644 index 0000000000000000000000000000000000000000..43bb96fa6e9cbeb94f165aa8e1b93f83706c2346 GIT binary patch literal 44 kcmZS5_|L$=z+k0es`rU`e$Dh#pPUmC5)wi{1RAgc08Snc!vFvP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fb0e0f2f9bac04bec1c0d89ab3d4eb3496d691c6 b/fuzz/corpora/asn1parse/fb0e0f2f9bac04bec1c0d89ab3d4eb3496d691c6 new file mode 100644 index 00000000..7439beca --- /dev/null +++ b/fuzz/corpora/asn1parse/fb0e0f2f9bac04bec1c0d89ab3d4eb3496d691c6 @@ -0,0 +1 @@ +LƒLÖÇLƒLÖÇ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/fb56cc29da665219836e17d0a90c9702f84bef22 b/fuzz/corpora/asn1parse/fb56cc29da665219836e17d0a90c9702f84bef22 new file mode 100644 index 00000000..e3fcb724 --- /dev/null +++ b/fuzz/corpora/asn1parse/fb56cc29da665219836e17d0a90c9702f84bef22 @@ -0,0 +1 @@ +'*d \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/fbba446cd2199c33a2a4a1364bcbe6380add098d b/fuzz/corpora/asn1parse/fbba446cd2199c33a2a4a1364bcbe6380add098d new file mode 100644 index 0000000000000000000000000000000000000000..41b82e5784bd917c7c49387558a1ec84301e7026 GIT binary patch literal 6 NcmWe;5M~f&0002$06G8w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fbd767e6a922f2bd8d549086053a2bd772d73b1a b/fuzz/corpora/asn1parse/fbd767e6a922f2bd8d549086053a2bd772d73b1a new file mode 100644 index 0000000000000000000000000000000000000000..4002eaa4806aebe20ebab5b72fdfbd44510533b0 GIT binary patch literal 258 QcmZQ!U>UYhg(#l^01MdyB>(^b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fbdf26e2f0d7c45d035831daf06de72ce7845ebc b/fuzz/corpora/asn1parse/fbdf26e2f0d7c45d035831daf06de72ce7845ebc new file mode 100644 index 00000000..180a044f --- /dev/null +++ b/fuzz/corpora/asn1parse/fbdf26e2f0d7c45d035831daf06de72ce7845ebc @@ -0,0 +1 @@ +0.€-.€-€ \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/fc0b66b091558cd1da661d1431283a4a710f7506 b/fuzz/corpora/asn1parse/fc0b66b091558cd1da661d1431283a4a710f7506 new file mode 100644 index 0000000000000000000000000000000000000000..96e34161f07d87dff3f46751e52b0d95e2cc204b GIT binary patch literal 12 McmZQ!WMF|I005o<6#xJL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fc2b232310fbc5c70eadf68accf84079edbac181 b/fuzz/corpora/asn1parse/fc2b232310fbc5c70eadf68accf84079edbac181 new file mode 100644 index 00000000..4ed1c102 --- /dev/null +++ b/fuzz/corpora/asn1parse/fc2b232310fbc5c70eadf68accf84079edbac181 @@ -0,0 +1 @@ +'' \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/fc3e4e438c79f64ef6e1a54adb9d015107d090c9 b/fuzz/corpora/asn1parse/fc3e4e438c79f64ef6e1a54adb9d015107d090c9 new file mode 100644 index 0000000000000000000000000000000000000000..f10838f15667d5671c1124c8405db891ea42cd5e GIT binary patch literal 32 LcmWe(5Wx!p6<`5D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fc610729a45fa1f08e9874b812cdb0ce8fd1f689 b/fuzz/corpora/asn1parse/fc610729a45fa1f08e9874b812cdb0ce8fd1f689 new file mode 100644 index 0000000000000000000000000000000000000000..78ba465a36629464c6d676df48934f41c2295c5e GIT binary patch literal 897 zcmd^-F-ycS6vun52E7|KI<)?jR>eYQ&hJFQ$iRqP2Qsj4`j|faS mn!EAdAv`Zh-V(>}b6GUW&reBH8!xO~FeSF`PX!P`t*jYXLrX~j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fc95e673b9102baea54ba603dcd0429549276b16 b/fuzz/corpora/asn1parse/fc95e673b9102baea54ba603dcd0429549276b16 new file mode 100644 index 00000000..3025ab03 --- /dev/null +++ b/fuzz/corpora/asn1parse/fc95e673b9102baea54ba603dcd0429549276b16 @@ -0,0 +1 @@ +LƒLÖÇLƒLÖÇLƒLLÖÇLƒLLƒƒL \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/fda5aea568ea1d85554fc1ceea5c828bfd54eed6 b/fuzz/corpora/asn1parse/fda5aea568ea1d85554fc1ceea5c828bfd54eed6 new file mode 100644 index 0000000000000000000000000000000000000000..34c538ac2b43cc245f5c324ec7905071336bfd66 GIT binary patch literal 13 ScmZQ#`u~TC=|2;QVgLXmF$Dww literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fdd5d93175495c7336dc2e87f361fa097dde33a2 b/fuzz/corpora/asn1parse/fdd5d93175495c7336dc2e87f361fa097dde33a2 new file mode 100644 index 0000000000000000000000000000000000000000..7c2948185b9a2c817acb5b3fa60151b74ee20407 GIT binary patch literal 396295 zcmeIb50D+jnJ1W4{gkL*gOCAXEDWeUYfE}SyO{C6MZUGno*5j&MzHH;Z)0z7FR-L( zG!}@%$XGKrRLitH79(qB5Hx!+o@OS-Vq#|p=0M)LBdoQVTjQnIdt*kJxS6{+P}_mo zu^)sVeP(SDZVl!$qVW92qY6+cP)6hrtv>z1h>GVg z<&W==bS<@S8-l_l8q8EFkPFY>Pe}^}%7~b0Bv=$P04*w3b-y8MMB(|3 zM-`w@pp2E{yMv>mQHR1yqWb07B)%o37~>ZYyyM4@A5ZtH3Xc>XaVddMx*I^wE(+CK@3!MJ?`()2eKL)%2>cmI(353_xvCXLf;R9PqYXjH7;Jm zf!LL*hOw!;%R6eTGrEjm1bLs61~(xSr?I20u*C@nfTK@gZTQyu>+ z*qE*vS{EsST*{n;e(A)LVVruOuG-2fsAy%{dGI7>Fm{SfBuhV_od-Q4ZDprV9c7co zee)7B`~EzVH90YNpqD#aX5aYtQQMc>40KN|sV`fVeXH1^id@~kn-zW6CFQB2!{kJ# zH}~L4)uTEa>EwefuG#N^T-E6^rmERxbj3fF)ge|m+IPpVQF0b}Z93Yjno6qh(Q$D> z8>SAsfuX(DjQ5G6{{{W9ip*3~XE)o?si$jZkqZ4nla*IOE31RS9;Up&Vr76`YBNqD z`s+CU!$$-M9ABwDI~-8IYW{Q)!H)wAy!uf1P4guyQ$y#BLlmF1NcDVr0sV3wF=JKd zf7)iJ;)4k;3k<6rE~8#&Sast--6EhJ&<-Q$1K7)o;gO=xR^zX_Usg$b>weFl$-I~D zmvZuTM;1Yr8fmDLpzgKRizb6Wx};<^bzX3^WJ~~iU#@nI8|@n;&=mY^GT0}Qtq~jp zd?4GKF&t4nYfWKhEqWdGqsc9c{3gEp*bz_J5QgD;*4bZTFL#ny$hIEw673E4=yTM9 zTfM)zLDu**TUi3sdhKxp1+6FYok`7lzcayk1H;gWm^miw6IBMz4N6ck*6L`nhKB!R zG#;>qI;e;LB{W{pdP3bI6=)HytioWAs;z8iRuyZJOV7V&p0VfIv$nIbxjp^ zN6q_Fo&29iQ_1?qa5~(WeB|Y5YhJSmb_+HW>J|b){@24^eM$gWtPHSAZN@1Y=KrEG zes_qCY`3vebN!{)Dn>uq#vviKMgdK=GPU_+5K@o4NzM?TxW18fuxmG_qc`(_tT1&J z`*JxLd|4W3T9&O$47K#)NeJU5zdc%Z&z!&uNc7R4>(rQjdtS~;-l7y+XTQnO1h9i)fasUodeA43S!b|#kT%6V0ar`F-gD*>blJ$N|^#SaH6{i>) z{*R&c+&b74+`UG#I=v|lHJYG$@6apK92JTDOyg_G5Fs2J)NPltdo zNX1q*2Q61wtPC(%xyg75C{|e}J$|^foU1b~P&Jf3@ zzoug(<9^BI_CjHF?SEwA?W1C*>zOCt*jQ#uqEFwNdGtCuKAy-C=vSCNo30~{prNz0 zhXA*&EWj>RPgD*Va7g(-g0@fP$O}xZ%1Yc`wlj8WlCiS;=AUhf&sS9*d0f|XTlJk% zeaBe0ubb!0>K@5^a)=(ud#bekLvsc?7*||MUK$e(^?-7c{shX2FpwP<4nFqSV~ZSj z-g&3^yZFLlm%ZHW9^UY*K)ChUr#9?oFW);$*HOBzvuQe&;TD6`<=e`Nfu=#` zzg4j^z+h#m?ix%~VYDh485Sm~?KPCfaSD9RkfrbI`g&Q?KUFVeRT=-#jZ+lAJ4c-u zppI$aYlfEjYliH+r?9D`5oPT(HA{O4D66qgeBURekH7qwfsd=IZgjCaGO&&R3*Owy z-{;Cd(Ud~|S6!?AmRARFCdAiYN&sUFm0d5pibVe;MT7LMz(b|00btiEFV##Y-Wp^| z(1@>cCOhB+qhxE;)vXT%LAeG%(=p&}hB&yw^F>mWZB*q}%JFbI^miSn0X1s8VlDub zaF1qs#}?lJ7czJ=4w>W-jVy5DNNA%?+GIOvlOPy)Af_3o5PcF`%8ZPe58}b*<_>W5 zr9}MXdz&NGj$;d;-rHxf2f)xGO2gYy z3*ftxiY)--BvCUpQn4l)R>vA^=qrWYOB?hj#{~yJFqCom<)%E3Y?B*XtHj@EZGi7s zUjGsV+2Om}v(V-R&RUf|<5j{V?9TwwRvCtfGPP}j)v&w3TloRWSVX;d>_@5Ii-SCg?Ew^?Uxg0pU4rulhA-`O3DS_W;a z#!XW>t&5)JowPSXa4fy#L!YuQAg)+LQee^6n_;*n(M5v0@@4>n`>CQ*536a+sfxH% zDRkZJn%K0lqF49&48RK%jV)67F=a!<6cR13&Bfq=R}Hy^rTPGduvsSA^$ejiQHz@O zu@rU-j4nB9f-A*xF1QPJG6bd6VB0OIFlt{3N(MmH&G@8+M9|85RP+mrl>v6C%{YZ{ zV~7sTh1VqbBIb?OS6cr?pB#rRZ?@${-%Kn--?J@cHQhM5Q5+%f8yW;8Qj;?zTS5?@ z`6;tQ>}WtSwR0D?P7vBEu!oX^)+a5z$&VSdhk`kP&B_3SFH0Q>Y@NU(M=%o%(5@;{hd1@eCmTAxJz$C>o{GzJE> zaOnP;TqwmbaE~bqs3SW>{)fs?f&8DtQt>}d-?6o_0D~_}e1hXY&?A-D6sPa3(0NPX z3x>GCHXw(kY6I{BDYgMoPl9{kP-oOYDwduxK*K%Je3{IwnfxkF-_hT^5doO0!Hma| zhh{a_cnAl!PB}oG;}wd=Q~v(hE(X+H*880aR-A&fG>%Z2(y9~&?vdOpZ&t@NIAD9< zpg%b-I3yB=Izax<0XRhQNeh9XmGv-qohkAyRtDImHW;r!e|UuguTW%RcT|OBL_UH1 zFT-xZWoMS1KExZ&2 z9G0p#pgxuMQh4eM-q4+c!Iz~zM%C6JhFx%;s8(=qAZ)p7zw?G2)fOOnc=F7Q@Tq=0 z%5lLlQ`Mtl)mU;Jw6Y#nN^iad-$iw6Y3=J)~|*6)OYmQX%Z2UM$rI zunShy#lbIIn$emZx501^jN={v@;~^v3grJBkpCrsF`6M%E1yI#__EZhG@~x^zbl%~ zH>=41gH6`XMt~t^kpFW4%2RyO;^~lQ4wIGPVv3WwidlEE*aKj&hs4xXtPHSAZART; z=Kpt-!9HMX0SJi(&5Hbw{9kGWu^FGV@ZB)-e?(7?;|L0Bu?N7;)X4woBwAOMrPx$7 zQX}OBb!hCEO-HY)43UWWe-4oBC{bjoaG*uBvI>JeF#pGg^$BQW4f)^j%!U;9xXPx* zh9i*wbI|%E@;^ST4*eQmzY^@tUY|3L7l!2CZ4 ztxsAUk{`nZ9j&awU=LH~XR$KCF14BFN)Q$Dzk_VGwx$pq0r?+-M+NeK4#@u!z!(rm z(9k(!Y9;cWNo_`5UNtI4D!ttG!S6w+pVl;LDQ#Iel$#j3HiDrjXr+*%o6mx}xk9$71? zSfT=8udmu^5U&A1WvIaMpB#APbgV!PdBmWC%V-5Kq$NvF#0%@kJkNl4hhs$*e1yMn;;`l#~|7T%m zui6K`Ff-MoV$~r3BmX1+Hk}B`ed?Prq}Dy@|B!v-A=lwOJWpue$~lRY=xw z{C`x&|Jx+`fIAJBKRJH*#V9e82E!8S%ZUFq7!fN2hDBY>|6Q?_l4}XGI;O$$`Twr) zX7cm!=J4il7kp>dy@L6v^e)Dpc7wlt`sq#uNzCie{J+U4X0&pc*I}$fy*BkaS4VB) z#x{w;WkI|#ud^1m3q1Yw>x>e9cno_))?UNV(3SMbAoRTrSCOm2Af#T05W^qi4@C!2 z@4cmuE5D~!$r6X(NTq*JVJhs^*GxiPvhIdOUF3gPG+jG8l;?j1oK(bxuSPC^)zR<) zEgE75=l|ybb*}iN#naKsdKkP8=l|pUe*tZ*)j@;E|M~z${?9?{lgR%#{|D#)jBXl? z{Ga1F0px!b^Sy)f9?^b(l_cBy%wMsWpohUX`?NB^F10~A!>hy&<}@lja_l8IuxK^{ z3^9YPL=Mcah?iVpr&zS`kpR`ED{9g})*CGEe8UHii_v8PAOzX_jizPk)75$-nPauX}{;(-t zU1P%$L&fA87}S=ipqZ+%cq%fv9`@?1(q01WQk!uKK{U|qPI58672o$I!&F}_FO1%O zoW9yyafk9mZaPCM7(4<8{^goUfek?pQ5^G}OL{IZHUxO#7ccw*oAMCh4WA_{00!=n zXj+Li!oU>B@( zW-L;dN8;E5<4Ax6Zz#+RuvcC)>MqB`QHy5102=^o006@h>MNoF(4g7Kw^$i4EKY&^ z?`rCrl58RWFAx52tv)A4x|EKuxpJLmQay{h%cBFJfn)xsXaAJF1E<+qwC0V=(gkjDbPN9o%lnPNpt=hk-Jr}2jF15LdmwU1#n=|?7)c9 z0;IrMZ8>OrrIuU=@~xF+WzlUNl&Y1`x0o4VFtap&E9?Hw1S{$arh;fqI`P6Jp5KZ8 zYPNeGykt)QPC0f&^X9p*eChK_I(`N__*i>M#FaD*mVAms4-msvVN!oRFgqc8fOS z2Xz#jTbL&_hB6`%=AiXSi>ITN^)PsyiK{GD2H2%G7_ZP-(2R#C!6zbHtcme+eu&s4 zJ;ldm?Dx(8bYdSLy60HGwbBYyO%@PL4OWQbwhmj4Y@J4EzU7Esdm+8#B3TvzAcej3 zBkl#lteD2Ty{2vOn#TA)y=t9aVdmGc2^(>5wQ$z(rSX`(3x@GMnD)R^5=$)t3{h0r z0{5N7V*`;sEj=cQxE}1)&|m`KxTQkE(8FHmN<(4^Xtc5(ZmkTkOKmV-k&hkRh@-?B zChQI@nvDQM%rus;*IvUw!4{?l80?YH5u!_R7O8M@gH*I~4%}kVg-dBz*}H7~;CyeP z8{6D*pVd-_07D&`JVUS*L~Jq~DN1L#y=h1<+nNA1mSvV2&FVN89vy#jTyPO;IBh3~ zilJ`t^p#;{8r?Kh-zbO0$^d)aHAqxL%>Se%>Z(Lm-S)h;N80V|<4a0|!IcO03n96Ax=!Pkj!J;=UF(1>w%>ONlk)e+MmUHUbPWgO@9F;LfePTv>Fb z5&{CPtU|U2y(GCu^oF?~&ON$7t_r3F0**>Q6YsAEI9i;W5VCc8dU{j-+z)X)X;h7P zgJ|A&x$osxTY=>cS3!fyT;l7iq+{uZ#1HIhY^m420Td2bTWvimYgkqRq+%C954j7V0;*5x{9CLHuuE;mDa2R>^w*P%uc8OJ=Nhs{<-mU#1paS`CngT zjI|X+K~H{zZxqYX?uLC6SuyG;=1CA<0yPxVRCJDEGE)`QU?%P@rBx_Ae`zTa3I)oD z+`HAMdmB;l{AK;7KOc+ASQ{cE^bzS=w#k|lG1=)#l&63jR!Yz_rHPz@DXqimB~T8YB*mzE--P@oK? zK^@{=QzaT~sKw5qVpXH>+E9l<-yg-9bK{rBAcac!BHt^++#*4tDfnI`hdqpls*wMT zDF>t+&M-)PaJZ>lfuu}{%w$UiR4fp7gj8S#fY~cY5^+f|%Ba?=bBtyNz+o^zVjvp| z3CVD9WM7U=;#;yFW2D_~d&iF-Kc4PY6`uJ%dKLUMfGx+5AAjPBC!UD*P-!EN5xxLp zL_bwoh(dufBAc&-#%gd>G^!L^(YgB#_=iFDLIq%_4AQV0+K5--5yE3U23MMMgFu@q z2;#N)Z$R3lO*Rl|ukVVVKBpXIKrEz90`kKMph6D+B;Fz>Oj9vgH4uN}Weq;6*%ky* zddiP&N_7BN$A#)q39{hQlWn5p$(jtUO@bgOo=V|%s+AtYGO5PdoRTG-1C&k&a`h|* zd5X+=MEj{_<_t`2tEC{dXpFb}>LVO)_sXH4S%?r2Xk`@!dzhZ5>5Na7l;coFF zb3nzd)BI=Y@uz&Xj%LBB;9|3S*Hiy1*VD1*zE2180+*%$jgkM=Dghw>=ir$C>0OLH z?FN4<#C-I_C8aU1Lz930*cn3j>SR=4tqkUM80%249Uqt2#_Oz2B#DK;7T*u8eTZ9& zUX$#Yfx+vBh5t8^zgIpR$lnv#mM-%p_@Dn3wt%Gcxag?pcQ{`EtGuVYTzr&^U*-C; zR~E1-q&uV2Vh!k}nu1fW!av4XuiX9>ghm>y^0@Q_z+PF64V8=hp95G>NzW{v4grBy zR$;Kmu<(Bt71b4qD%_Z($@3GQ6nl!b;eKno2@n!lQn5q@pdYgqK3xT17YrJ^=l`g} zxnKds-B$Ame&aDcoD3eFYeu4yopWB$*d1zbmAQ?8Zk8is;86Rc=#kqRfzmtVlK zmGf8`Rt6ZXEVU|G@3&MRz%E#E3gO1c|F%0*TLeBQk|o$8{|){iZA4wO!+B#?j7`(0= z|L3d>uuIK)zoq&BcEO5MU>Cp@Tlw@lsDlXSs;g|Ha-TrGjMgn!OWRQI*g?aQk zI<5@Yv%ZUIchqbI7>*bw{`XeR(hWEL`bVzb{;`jK_(Q+Ed3@ul&e(R(BP7`V54V3T z>gJGLzy0@Q(^tMCF1f))u!VhJ;rL_*jIja^5mV+=2TFmBfCMl`)~DQszdRYnnbc;~ z#YVtcBOrT$`%ZuusTz@_0y_aR3~iT`MK%-a7Ei}cKmqJ^m=Av(TCt6;_hnYcp!u-0G61FeJmQU~6E-=tYWE{r0Z478y~Whp zm5=!zz3?PsY_E))_zLy*y2y!_RU<$znOitG-&^R)@8<2k-tBgKvnL*zSQJ-Q@%n09 z=RT3{ua==Olmeg;g;Oog&W~wsE>j*_o$KhOLP0I|0Jya>z%Df#0QIPgO@O;5pr#wn zz!8>J6HumS1qFwIHN*_|19H%Esm0UL$|=0n>2euQt5D;=e2N4679iLb@EUyxu**d*4A2%!`C8BDIzGoP~l34JK6Oe}9aTPAbga zUPB^K$p7WVK&IDE!>6EX!853?vEc~p0py^q8cT(PU!av$80;Z3b)OV`yyVA^5udy- zSt~fi^cx?U(^p?>!#VT4gYzEIet(su+mq$S@_!FNJg>zcf03Zbros<3ofOB}G`PFo ztT_yU#xD8a>`*xjLCK-6460OY0A{LUZ*stMA)ym<3;fm2;Zx6ry7`R;9i@(aKK>lL zwo6CJ5)ZG6=t_aVF~C-c7h8C|@fF-2kzRDoPMoPQq4 zGQYw(|H|+x`qbhLG|p=?!j7>0eT+d-=1qo*@=SeMjFwX$`3 za}SJinc zOGTvO>c-TRr>yQWT?6A4up^xzbcO^A5WN*yVeUXL!#1Z3I!J8e`;5r{^Aak^Emap% zMZ+?*YHBNi>=>C!q#A<^=fJ27q%ie_zcZ;Bb(7v;((B9R^#c85t1xX=BymYfC!W5P zSSzz#P$~cMEzTEUQnAHV@>_dW4O+X?nAgB>k<^Z^OaZ=-^aCr6uc&f^~H#U>bNp`yNA{(y}DXjnrF5Rat@B^{5efYvs< z#^}ea{b?L&mhg4L`#RXQT8^|I-55U7yx$t17#|sYhf$hyOK^bV1~(k(8sc@*Q1s-i-1g>sr0xCmBx!rECiQ5r zveXha80@-!L(7{M|M*M;O@Bh_H-O_fWp>4L`6>D&-~?RD=DeT|jfb!Ch(>rG4dcJw z!Z*h2C^$HnA!d-7asX#nqR0|LOKIh)a4I~}dMUgux#|lQzo8Z z3f{eu-8}Kto`*75F9zO;|L1sOt2F9&ZI)v z*Q>5D@KEx9dZY2sCIA`mnsQ2rtx5Uy+$LnSFtDT)VGVkg<0cSd!BEC!+7du`>aUV+ zefFsh``OF)&eC<1uIsFuTc8UE=l5Un__KsO`yZZt_F4AFy~iK_lkUPnJ|Ax3jZIfi zY`mJT>dcO9?LA6o-gtCwZsFkn$HK)$wsl;ra9=rb*`mM;i(U3|w|jU4c$vZUl6zI5 z!zHay+TIt&ptvl6b{J(l_^a4;znJg&tJqp{7ym=Z{O$fK622-ns=ujgMSBuLn2_@F zQ6V!~8)aKz>~mneYkb)4&~-D}maW_2`-CL_NdQ-rQ$X_CjJgeVJLn}z3xC7h59c0T z2!dc*AmFIplz%JO07f3Lh)v?BS*+H_p1myo5v_5IcO!+a* zTz1eytFwmx4KO%|)UY%Y`C#Qydc_xvYii~b@e0sw=ZA>esp*;k@_!N#;I|t7CvA_k zy$R{cgB%9g^co@z1VYt<%Zd&9v26}nvI z_Bdk?F!pym`k%i{=72sp$rf$^L%3Fi!MrQq|idfd&Q+&i2ath4wHGxf#!DOFC|Cm_pNfvbCrF6Ky{B? z_vZ&fc}8~AOrmY{Xqu$1Nwsu^au0@8R!q_ z4>DGYKZrS1c6_2m2nj;}8fM?u0ubc~xW#AU9f_2!P!FP+HZk6^>|mtK0QSpG3=$>4>| zdR2_mc5=w4JIVDrcu?@Efgd$o;?c;`*-Y07b(-n-t@3E(D%TXN>{~^LD*H}Ocp^t# zO-zrV)^6tymj2w_f!_TSb9`~`K<^vz-}?{r3V&pb5qb|H-UIXu3xc!W=6Ln(w_g(r zZ@<0i?PmlaXreU*KX`_=*{OI3Sy&|E)mV}wEXAq_+M}{6Xkb5eR>)xGkO~@WZpNsT zDF#%ug1GWE_yKHFyHr}ht|^kE?Rfh^6EdbBj=BNJ=8TO(%a}7$sMtQMVjHC9jW)z* z%Ukj4{H8qiMu)=>d+Fpe5&IDDnP;A(~I$z||4fhAG#{G{ahIm+&vY8sWXHbf_)#-H~i66cm0>Y8vkGrOcZ-x z8uc6%tI1jLo|mXmQG>D}$x(LSoJYj*MYqf?9Gvex**m)M=iTm$-7Vc$y767j{LW@^ zcQe1kSz3ney5GdU-7bF{^&|9>M06KKchd*BNoUsl+|a>EnN!6KXP)kijji$@k<~7L zaBLCz;D*b*IN6@}+lceP?s z>`^FDMntbF69!=r(y{3`$wQ$($?j%sZ2AL7jvP5c-Yf1wAiPWJ6LOlo#Lh$yITrh` z^$h#375lF>>>q?A2;YpV-j6-tBiCMg?X@#6jSI!f{hH5+!t)!CDnOw?89Lt;SwN|JGos@8OBwY2gZb{@7^F~%&7C-Zsmg(*W$=Pm z&I;xFjAm)b-;ajkJ(kI)v(m+68=WCpg5l+G(>3IhPF66>AQf-W+Efw_*?Okqd51ar zF$GjOmytDI7I81oDQYm2u9!v?p5J&>0SX1mh?q&u0GxTNK%%7~0;>2;m3@=*#^}Sx zDv=e}E$gdUpzoHziuBzQb}7VpJ}DRrl_7$tZ>Bb)u+|JmvG|Q|jIroRWm5aW7$4*I zjvpWURJi5%@kr}_kbNSF5yvHLIez^36Hh$xM6`1@jI+S7E`dS^krCN^B{WHcqoPrz z_=?VLXp^mqJq&wj6rk^7EENnpW{^fKumoe&9c!cmckHMAZ{2%=zflh)AuY>>?%z> z6|eb*BdjwHwG&U*lZ(U$jAEU@r++jCz-|nfzzu3!>;bR~Rwg7nliG~B+#2{aHF%s{ z@%&IdtbWUP7(_5Q!hm90-Z^VTb;l1wa^|Rt`wM@n>A_WoNK~i9J7A_P8mr-YtHx5{ zaPrMe9*iovtPX6IJ1Ar3nylRN!j?Cyen%U%KSeuhcaS%RAW+_zoP{mL8N*hr%q%Qq zbYqhngLt`dj1El*LpsKC4WbVkWPoZ&g~a*rPt`6##SBPTwmyz6NZ$ zl&V1%=td%pYSTCjA5x73o{}A>tU}xg{v%92H2%G7_Z3x4u)wI zFIe9E-*`f7h!z}^$U$2*7ET&E=9fzagZ6bL70v`J@$XD3wgTXtwQwp3cUE7D7cB2q zAcB@~>L@r=6}AN`4EB&lk`hN zy15nDr7pjQz#lt9qI($ZrB__IPIjrs3+m7qhl5%(MEh^knRm{-^Oo;-qMV_^TkG+1 zKmu%T^{B{I&iJGz{uj@L$b|@uhtxQ&QAI_o*1@OX@VXlFh(}ft<&Ned&=^|))rkOZ zlT-~>Ms5lLQOe4f;N4@`1*n{Fr7$>|$)-&=02&N|#@GO8>V>-uA=m|AOnzsZw#m|^ zIua^10LcF)uCiDeVDM#0YE4~$%mh|Jt=Iv;E5hKIS=b#l-=V}AK{D(XY$nt#%!K@} zhrRlg0I*mYV3*pAQy~AlVk^Z9>gcg7ul%3-`-lh8paQbjYy=o$rd0m#uVUBzV!r3E zVr$7={0|}XxBII|_^Q~b{-&-K?MVn>LdwfWh0J74Dv?3$W>YvwPiML;?G{oMSy`wOYy&agFTiv|91pG z@)%B^qQo7f69*+Sl<3GL^`rbq0J5-mo8|9s~J7_mrkCJ!DsFC?8BR{hm9a~94@y^9(Pfquc!G^`c zHOi}jp(PoSPdIM)keT#w%S>oxJ=|IuV3&&dKX_!Vq+-d60QUOIcdN?LVD`ohY$CTJ~K<#ok!Po*3B(kxG3=W9ll$nKt-TR6D* zCt&!w0^2_;+aU=t3`CM=xC0Iehr@ zhY#OF{0+|vgj@fIr#6taFW);$*HM1vI~Hj8?6d6OKK?9u`SLO+y@kJ6YO8fLkjA>{6RiSM=9wAOBxZia&P;{1zGxZRR4BESF7#eRBZ84Vu-l z#+d)-DpdgU{~W;Ck^d!1X(sZWwJOc1+YJ9_VTfd@vJ}rn{^uq@{?EEm1myo5kpCrs zF`6M%;%Zed;@&b+d*sxp)j$vy{d6j>@9 z`~t14!e9?6vXlU@SQ%iK+F-oOgFVz6r{3!5dt8tO-t1NC#p;R|)X_ab{)gaEf&8BX z^1lQyMl*yu>ijRLE9QN?*(-s8drVotF!KMd@Mf|ryg9r%gzqx_vLPrqW~O>ntQre5 zEi)@`No|G=Km@QuK2xRMYq@{3l>gIj$EQ6=Fq;*x_7;u!+372ru^EoQ4nPiCpIliD zKngHM)}1W&02sW^l=?Z7+Kjp)Qr?e~GKT6>VAvn}WMLtFL^w3iJPw%Kzz>xrKxCy(fD|7yi84eX+Zx`%1UleZAZ5 z_GV8!LN7^v?MlB+cgDt6`HxKWb#N?NK3JArd}h}Nuf#H=wTpaP@~}8A%Gv8KDQuki zHo9lYs#-Xh&tbGs`E9U@TAWy{c~Vi|ebkm0w!B&On~BxvJNZf87{dPYM*W`B{0P@A zKISN{ELwYV234icY+J2%yWKwX&Rf3Ui8|pG9+I=M^{!3Rtsi=wmIz~S`iEX87ts9t zx#zp`ZLTa>arody&`@s>4z0=-eT&VEL&16UV`YG`?&#R3!Y!Gv{%4iavwzCo`RR-7 zozv`{9x?fG-wi-Nk0ig0dL3iw^)_9?U;_++#*Vvu7CHb7LBWxk^r%=hmI_}UR#qn2 zMrH$=uGq{9K&~q1x!Szdx`TX_H3d%6;Yh4}Z04te9ps~|XAE2M{*UZWOt` zyxA%>qpW;v=BEM5AqR&&B>M4!6*EiO*3jZLog9YB;~Gumh9oSY-Lf=q0DFDa-l1KZ zM6OMWKfLo?q3fK&ZqY2~8jir(Mk%I3`Ez-}+EnJ(sgOUND?M607WU>_`F?jZCY?*& zH`WI7C&fK1(FQ@eR5jh8Gg~YHFj%6`!5V;FYBu)jQCB1m*!u7R>jBwai85P0mZH2P zNcwr%*TIXhZPH~NU&mi++TrIPrlDeh-8&Swvv9<+v@&g9PQ8}*++M%s)Aqyngx~$$ zePI|rT;H`fiDZ@uA4E(yFL)xqw=bpcZ=o4EB)7S_ytx-fE zU=bA-tJ3!P?|<<}ZkF&`K82dYZ>gO+`mtG=t zxR0^t8NWytSFWdH&wZcD%Z4M6 z?Q_t!PnK{&w%5bpb?(`|-DZ##wcB&|-W_-Hp(&3|?o7e2bL1JXEn*WvS!RBtQ46sW@{)f09 z!Cb43>=5&R2p$!f|L1`DzXUKwGlaUV^8dh}3a|992;uLQ{?*BH{EPDYRCr}}ogb~+ z=1(P(HjJQ{Nz z8SE2jh7Wnp!QjhMQ_@W5K~O6UMkkXh1Uq_oOI8YdeJQb4M~j90pH_zq=y#>n7%`QDNAupyi zL(2R^*DC-xY_bbjUm)7LB3&;rh!$o1PTt4tspenggGO*LMi~K(b zgOH9*zeyen{Yn1NnX%~)965622zf7m`U4{#A;c%-G-Tbj!MWp-!7 zR835)ug{mFr{=I5BTrAYxYMq1rGLH~hBrhGCj2R69@%;%o|Ybw z20oH4!4UXuQ~AG&At*S|qCpkR|8t1KH*^1(rNKul>tXOZ%>Ol$es+a7lU?D>;msj@ zJFzKefO@h3hk|R*Taf?t&V>A*!?5u`y}I|m&-EUin_D<|aK1Nr&Y@oK=)%GIUhn8n zdke&ykAFKh|LDTmgpl~R@Anqwzt_$l%a2-$WAA>Ay@!mL&P!#hQLNu0TlqfugzppL z`~0Qmg@4b)zl*=bA6|bhD(@1+U|k##GfoYqtxMxJrLK}4B`2|@P?-PgVaPg`Q~poA zEt|%v=Mit5daK9d(Vyi!{vRhunEyBN7z(;&jwftS_Kq(6dAIvwcT4w`Znyh-x7+Q_ zo_K^_lKk40ex2@&jji$@nds}_ShRewEW7y3t`A-@WnLW6#)BST*0rF57bg}+dM2n~ zu|ej-DCvP1WC1={Iah+QC9oxifQpHb@F(||?k*%Vr9YcX@0phgrBOE*Uy zdjfh?3;;`i3t*N?XAUKpOqL=%Ag}YOmEy}iCgv7;b4O2yPdyhBI-zS9c#|Pwz~S2m zIhIMR)xi#UB>;j)1zrirK^sManI?=~KjeQs3|?pAs)6|*>aM|=dzk+lqXJOT3y}XE zSTq{}hB_Dy{$I(rRkl15{bP)1@6h_$&+y(h(`}U|gGG=hkQXfDZIuPU+bRur^cL9c zXFn_JdWlz>Z=N*&k{oPVfZHkqN`tZOV+-?t`K@n#%lqE97HII>0pGZl1_E>)-y;|c z=1-sg*6%<1P4Vk10qq1qK>0r^{w45Wy8sFKDqR;W@W1QkgM;%6y&#wf0=g=g9h(n& z2ZM!m$-y${hTj&eLcCD%VM)bvWfeR3|019-CA!Q%x^R&7dPku=ly8WxTo>xHQ2cX& zs!0L&3tL6j3{q>x<#(iK8AYN>E2qf)V6eZ59Y7c?_*rl?XOTCbeDcXB%Tyi|85H?T z?q4~JtO4f&w7EM4Iz#dLD^a08?$^00`+wf&go*(XF;v#)3hFZF|A~q;=qH}CRU+i2 zRr3CRoK!@$fgmCSsg(xV|4`fzi{n3Ob;uZw{C|)ua-K&oJjoc_E8`}Z_^tw_wusSqz$$gnZby$UA%wK$<+*$Bu5d|e81GT7>(ac1K!6q%E2pTZ zm8D~!3b)8#n+sRdoiqE1A2QoAtHxt>`@y#AnV-eV0E3mKR%J=~KZ>)p;8jyw_N^Lym?3=G^Nwa0n0E+>B1Ao7vS;{*oo*hm)5Mu4FXO7Xklax?OK zf~x$Ey(nz}^g+{Y@3rWks0)yq_5MBts{p}yqJrp1$9JNAF~3h>;2w#s@@7T;_XZsH zj^7y+KbqZ82gv_9XhYpXAZTShHq*|7C;4o5c8X0TOFz(Voz!lvvhU=?+<{*1Y z_N}5rm3^z|Fgc;Kq`qwR=}_LjRdlGb@8kr3!ZsnRiAfjjcCPv7<_`4kpP1u|a|e3g zi2vSypjY@K&_RPK1-5k z|1$s1*aY2f*kw`(5FmzK0Itr$igaDkXDL;cJimI25cVC$*!Jy=Z5Oiv)GaBn@1uvI z$88$*u(YxOyVM2~RqNPSYjqp2X==WGELM&Wkr{_T#q=mBZU*+!7YKHnR647#+BGg! z@Rk?0yxEq=7b2sNe#ZxyNso$AWbt$-R-W%2ocBob{Z$e#Ck3debDfvcEcO6Y)YzHS zVd8&j5SqJ5rwsoOM$@&kY3%OQdoA~Gmhyl3?fEUHJ@eafi)_8+ZH-xPmd;XtHf9hz zfix597G`q7|AMe{7ra);3Slv!{QX8fwkuUqs{-x+yZeaRVoWFm$Uk+y~P@^ zMIGIOr_7YpWM<*aJ7<>9`?u=yNsFhaR@MS%805e$7Cquk8U(Re8G!t+ht{T|ksA1F zDy0`+eDTFmm5nYLVk=;9973=aP@#<_3qOhQ@I0JnmVv?RhVd%EdahMPeOE#^KmcN5 z$Qpol>t24ft`#Y%AgeJp0E&4MjA{cwXGrGXqoKO#tn3ca{!ns*J^G|3YyecawJyLe zwLyYf=EFY%Sr!F1x1>V=dwt>X4-Bjg-cu8mlZyaD9gHgPr%&@~Ce$tU0s($hJQ?iSvnL2{=g+n61}}H#dw?G9k7+nfm^I< zD+@4KS!z`<{|Ap8!C0$<9Weig;8D>yGx5_u+v0QF-;Qwj@PXO~zbxzxFxW`q6{VkQ zkqQxLklMKAm#38h1}jT-hiw9QWGxH}!Yxq&u+`VQ$zUHij|8rvJc$+C1j#rOkePA- z*J+0TDfQa%zizktBKsTKnWgJ~;=Rav>_@$yEW{i0dwoy48=tt>nMMAGOKhA3YMUo4 zl2^PYY`B*tg@Jpd_F9QGVOG2*kiR=9h25gr2rwK`k^h6x_xvCXLf;R9PqYXjH7;Jm z;LTWlqgX|UCvYfAZ&`;Ya40IT>uJVVUnh{?QF7?ep^p4=`a?_fuKIF*r*X2rETBRo zRkF6j6F3wlDJU&EJb^<|l7iBr!xK0ZB`GK^IygZPtc05Z=$B3`8OEviX}OgRLh6w> z$r<94a#?!CTY`t`K3yn4I(mXS_4 zxtm^=0<>}t1}jVB30d#AR3E@DI6qJU!ym~d7vYKG(Lae#3Wra(i@_ax@$WT;^<0hn6KA2)LUHP%=765^vijGu9bUP zw9QV%2NPTt7*;!6M!n9k>c)Y(ML;{C9Y)XxF#nI?k)qF5k}^SXE4#|C$DCRowfnbfTJI}@y^D-4WdLpV1`ibMqlIxvw;odIi51(_)a zEtgsd1ZWYhtioUqQvjH(+<~Wu1B&I+^Y58w?0NP$V-GO)cl@B|FLTurVhbR6s@9R% z{)i9)x538W@f8fPs&H@m{(}qibG@f~N5us3ZnyhNx7&Ta+wJydPdoyVFtM0kl`2xl zoUBU#3+8>irh*o#oT50~tKN31SUC@D5_8b{g|oVAFkT^7#S6K^oU=B1AvZxqlIgFF zQUP(5jR1oxO)=BPa5~(WeB|Y5t6GQ@2DPPZFI!M&9HO*X7OBYpdf2P4ij@I&sm(Zr zh}Y)$zi5o#9bzNfZLHK>oz!KCJ-`rXjI9h*hKi-Gt*~=>vD7;?Rz-~}l9$uYN?}A|s=9xjO||MZ35JIMTOO(P zUsB>227C0$OxVlN!>yG8cBw0e|7E}kgVLtfNh;3T>rxtjxQ`$PN5K4Fc9axD!~X^t z)Rt%(Y8WWE9-p*Gg_9f9MJwl^uZ4oz<7(1^sB81q3nBU|;;7zq6pWg8$~E{W_6U zM!OF{!9iog5y<~Jfa@qeY4LQlvK|JnlOn5%l>v6CS?{-0AHXhHQCAREo%#PSkyiZC zK2@puBXXoCMv3SDWFF}g|L)=uIhVsTgrrCB==E()QjJ+1&p{k^{!iwpxh^;|lO7dA z-BK^h$;xzMAHQdhWBpbKD;JW%K7DA@PLHW`Qb6teuZ7NYr4m!qvV%Lf^v!B=IX4Kj z3Trivpv|>}S&{#T@o~`#YP`#UUZecmx{nO^XPR{*~t1YW^-`_4V|Su1n9Ubf;RGRoeccIRhPx zD=sB3jfq~#fO3+)0m_LmkR28dKK9sS;?2Kz-g#&A2H+PKyX@s|_wa^i1;VY*KDA*# zd->j3x{lIyopo~ybm5@5uLzQW2AgZ_S2WVEpc4@a9(jK3D#UrWEqO>RR=;ygGO@A-?`n z0vKc2*;UL1SRH+jO9hSq#g^WADJ|Ax46D>+;%!dd92(Q#s~k3D94izpsA~eQk_X{#woA`aOGZ79)LNs$Qg8mo1!`` z8je_gxhc;h+vLX9D)Bd38{j*Z*S`co&z0ZZn*v+e91OlJwS#@~zl2BFp8=$;GVEI9 zSnR|JauLtf7A zQ>7f&WOQ>S7jyz$I0HtXPW%@~(Mv?KhKl)=eL6P%CV43IC)wSMjZJ^x$dMyQ$b0$g zCVjH@GTng7_r89?QY}zlc9eO}sd;hgFvwXEx^>!S`rx*V^(-aXOn&7KH?U|v*Q9JXrJ zSYi__X{hkp`M>|VK>8{khi&Q-YX;zi*@kSX91QenjIS&K2Qb*fl*Wk`yQap_po$#( zrhz=553w+u*H(+8q}1JWSzmTo#UjVz)|19JnMEarSZQ3fVI*6G5T9Vakn0T#>=U{Rc;Fc?~DMY9xR zI3leYnSIqrGjX*mRU5NG8I3W06lmN(%hXM&q@^)$vPM+Fz!5ZQd|`Cc90S02vJ~X7 zicOTXJnV|;W2GR*^ifPD5-}0S9-r*pfAfs#V@>yw0zVBQzQEF{ig!4Lq+21%;=YIFvhl1nrhXo%1?av ze0_;axti@d*jsnygwCXjsG}`H33)eZZEd?kB=1wM#AQIqy9wEH5#jYT*re}IK$r$>b{S@)P-kF--y?c7sj;U?CZ<)H~i~G)1 zHr#Q0X2Tb5-8Yf!v3-ZMvg7m8%CFxpt=zmvTG@Grv~ue%Y2`L$<&J&l!Fg`le$#C` zKhG6Rm5H|8y6*zmY1{5wZrO4BHc^g!?}Dvg*tvbjZgJ$1-*M9&JGV_mk3qw4 zjRiLAHX65)AawaEno)SGO@D9T@qP9g-)Fw`DxV+`CA~UIT6AEH79phNiGQa{ycMbd z{gqk^5G55=T2x9+_w3p8WUyz?o*=lL%jyO%cjtS5*gM+o1#=6FLAU$Nj~;vMv8NY< zML@8~lx<&IT;$tcSWNfR9W~#Z?;TxSWG@80MSj{RgFSSH&>0de@U!j;SNO+?jaxG$ zNNjx7y5M{|c4KSoY);Hc3l!}0-WQxh$2D&MCfBd80>U{h&U;W#E|HwTH|JQpi`fvMpzVNk6zIg$O zKEL+B@w;|k{;?~5yzlitp5C_Y*H{1dw|(|o|LkjPKDzkgmsj6>+5hrqr|8oZs`ID=ypc;pY~v`|2O>ojr5-k+1&Q(I1R;xBvcocAfLbr#D~qe?I>& zIzPGT-_-8bF3{r25Ew~O}a!p_u9x81hm*6E$M?vM<^ zTfuF+cJJ9PZ@UmocI8dC-n47)9Xq#0tz+6UZ@Woe*|l#C95J6`7HNU^<6yq zwX;00^{<0}60aBpYhBYp}D0}Rr2$+`yW>MuA9MjOf)4Wg_L zsOK@?Bf*EGsGbV02s#gKdgufD|3S=BJ9eCT{B8d$7hX=iV8<_C^`Vb`=wrX~kq><= zqO*{CG${IteqP&dx337N!YlnN!XVsCt_TA^TAK>5jJBrhVjuC%w@rn|jvYJ3xB1cH hv17-6<;tlmr!t$Rfr(;x(g!f#JG#*0V;jCl{(oDxo4^17 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/fdd6dad660b32173d298245a2401c8ae996174e1 b/fuzz/corpora/asn1parse/fdd6dad660b32173d298245a2401c8ae996174e1 new file mode 100644 index 00000000..b102821a --- /dev/null +++ b/fuzz/corpora/asn1parse/fdd6dad660b32173d298245a2401c8ae996174e1 @@ -0,0 +1 @@ +  \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/feebeea46774faaa9f052f1f97549ac216f59169 b/fuzz/corpora/asn1parse/feebeea46774faaa9f052f1f97549ac216f59169 new file mode 100644 index 0000000000000000000000000000000000000000..dab87c3737a33f465fa0e0ec0ecdf241335a0fcd GIT binary patch literal 58 OcmZQ+WMCl+X#fBy-wFr- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/ff934115346eaf1cad28e858aabf959c6f994f18 b/fuzz/corpora/asn1parse/ff934115346eaf1cad28e858aabf959c6f994f18 new file mode 100644 index 00000000..5ecd7f5e --- /dev/null +++ b/fuzz/corpora/asn1parse/ff934115346eaf1cad28e858aabf959c6f994f18 @@ -0,0 +1 @@ +!yyyyy!yyyyyyyyyyyyyyy \ No newline at end of file diff --git a/fuzz/corpora/asn1parse/ffb1ebf27ceb558f62d4b6397a3a18050d7f285f b/fuzz/corpora/asn1parse/ffb1ebf27ceb558f62d4b6397a3a18050d7f285f new file mode 100644 index 0000000000000000000000000000000000000000..718a63c1589a0bc7b1abda662bdc1da519e0189b GIT binary patch literal 2225 zcmeHJF>4e-6n^s(7L1h^Dbj4LO!@Xg62<2JfyFh}!CY@?H+z`EzzBiC>#~I+Vqsw2 zB5-p08ifT5t27qjz(25rV6iwdv$uP9czcAfiiO|o?wdFB=6f@5XWuLeBuNrckd?N0 zOQ9r^UT^6qIixD)R7Fzq91s9~WoDv%BF`ftYxITLNryvDtqhq7z8B5eF~2QL5{scR zbnz}pPMEVKHHOZJ-=C@^p`@U&4gkO@*>S(0DrPn`Z9u?B%>3!wuo_}&g`D1l`6dTZ=l(p z%HeMt`O7UxJ3)fRl)n+e0a7nC4WquHT$dYIMR7KYopiFl2@dDOESaw%9 z&YjIA+j5>|WvA8M?RK~Bv}kj0vlZ;#-EM8~O^l!(6-5C4BS&{`n`mdN|!k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/asn1parse/ffd3cc6205c1db87b3c79960b174ee1d81999a06 b/fuzz/corpora/asn1parse/ffd3cc6205c1db87b3c79960b174ee1d81999a06 new file mode 100644 index 0000000000000000000000000000000000000000..4a3a1a3f21f9ca837a1e1a2ee0744cb0f3d5c61d GIT binary patch literal 637 zcmZQ#U}IowVhXL%gkgG0Hu>mHU>^kHUH^lu10In5XbN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/007c0aa18e7ef96b3baac9b82da17e01945c1d79 b/fuzz/corpora/bignum/007c0aa18e7ef96b3baac9b82da17e01945c1d79 new file mode 100644 index 0000000000000000000000000000000000000000..ea99d77a560a574821e9353d14730c6194d7dc66 GIT binary patch literal 272 zcmd<$!U6;)7%(s}IWSnqO8*YX62u8E$S{C`C<6mS1Bmti$dMyQo*$|I&mhpC_`v`o Piw6Gx|Njb2Xb=Ga=nxcm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/00842ea682a1fb77a75d47b470998be22ced54e0 b/fuzz/corpora/bignum/00842ea682a1fb77a75d47b470998be22ced54e0 new file mode 100644 index 0000000000000000000000000000000000000000..88a7f0a32fd24889f2b5c1c2eeb30af199b18db8 GIT binary patch literal 141 gcmZQ(W@a}24+cMe{P@8D1_B^52f`)>P^upW0384n>;M1& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/00c2422d35ec8c3da2c285ce69b03b0d590b3c74 b/fuzz/corpora/bignum/00c2422d35ec8c3da2c285ce69b03b0d590b3c74 new file mode 100644 index 00000000..4d534682 --- /dev/null +++ b/fuzz/corpora/bignum/00c2422d35ec8c3da2c285ce69b03b0d590b3c74 @@ -0,0 +1 @@ +Zý@æ››+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®®ÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/0201ff353168f0863933be84c12057fbc2fa3a07 b/fuzz/corpora/bignum/0201ff353168f0863933be84c12057fbc2fa3a07 new file mode 100644 index 00000000..48fdfa6c --- /dev/null +++ b/fuzz/corpora/bignum/0201ff353168f0863933be84c12057fbc2fa3a07 @@ -0,0 +1 @@ +(õÿÿ:øÿ‰ÿÿƒ \ No newline at end of file diff --git a/fuzz/corpora/bignum/024d6a420055e25bbfbae832c0336d395d4855a8 b/fuzz/corpora/bignum/024d6a420055e25bbfbae832c0336d395d4855a8 new file mode 100644 index 00000000..6ed98baa --- /dev/null +++ b/fuzz/corpora/bignum/024d6a420055e25bbfbae832c0336d395d4855a8 @@ -0,0 +1 @@ +¥ú@××} \ No newline at end of file diff --git a/fuzz/corpora/bignum/02870772c5ca334b8f3c8aa447f0ebd9bfd5cf40 b/fuzz/corpora/bignum/02870772c5ca334b8f3c8aa447f0ebd9bfd5cf40 new file mode 100644 index 0000000000000000000000000000000000000000..dbaebb1b21ed896adf76c42be94fb5d200a45303 GIT binary patch literal 600 zcmchRu}Z^G6oyX{%f+;n;O3;68apXC#l_K~lZymgU3`G9g-%)Y6?}@mfR~~}HwQOg zK>`j3gnn{wZv{yeT>O?Zod5jiOSVL$W<~O6xQ*6yW;(2_vSkOaIt~UmYP0o Zu=p>6FW-z0kMig^3JS5ccBH)djMu~Gm4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/02d9fea34393ee71d4f3aa44de25c1918c24974c b/fuzz/corpora/bignum/02d9fea34393ee71d4f3aa44de25c1918c24974c new file mode 100644 index 0000000000000000000000000000000000000000..7738127bb0a81a701c92695df2ad90414263f4d0 GIT binary patch literal 1155 zcmc(eKTpCy7{=dH1SA!w#z`V!06LMzg*GP0XdKX`A<@Lq)zv|9A+WeP5GDpTKLulR ziJSNdTy;Te93FGmI}1$*OicU@*Xw)Fz4yHLN7IOibX~7yy1e&m^g;)?fP_!y-7rn~ zRbw((Yt8_OMulQ<;g`%18={SPfRlcR>nbau1Go1%^< zRSg{nv~$#(^d^&&TVS(wPlg)#@=4L~WN?B`N!8S6uw{JP}VVBK8F=v$q= z#<_bcMwQb@YF)aIu4~Ca>>A_&+qONA99vR9^Xgu;9?kz-65a~NOKvGiAxM=+qY;3f zC^2#sy@g^bO@?6@UEYK^s`HOTRt55eDlbl;F}B}eA?n~(DF=?l7z?C`m9~pfx^G?7 B4c7nw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/03101b43c702812adaaddea87751415ce8f09957 b/fuzz/corpora/bignum/03101b43c702812adaaddea87751415ce8f09957 new file mode 100644 index 00000000..9df544d9 --- /dev/null +++ b/fuzz/corpora/bignum/03101b43c702812adaaddea87751415ce8f09957 @@ -0,0 +1 @@ +j*eûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/0351fb8e5735b85622e796bb40b8483b50b64ac1 b/fuzz/corpora/bignum/0351fb8e5735b85622e796bb40b8483b50b64ac1 new file mode 100644 index 0000000000000000000000000000000000000000..17ebee77d594220238d4ee161b3e2a179701e275 GIT binary patch literal 160 ucmZQ(`Tt*wk%2*g0R#-dB#8b0|Ns9C3=E2jrwW;rK`g9*B?YRHW&i*ci3yef literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/042159a7e26c12354f68a7496a78a09cfbd6cf02 b/fuzz/corpora/bignum/042159a7e26c12354f68a7496a78a09cfbd6cf02 new file mode 100644 index 00000000..13ff4e11 --- /dev/null +++ b/fuzz/corpora/bignum/042159a7e26c12354f68a7496a78a09cfbd6cf02 @@ -0,0 +1 @@ +!eûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/043ab69374a30eb3a341ef07621853e968ef35bc b/fuzz/corpora/bignum/043ab69374a30eb3a341ef07621853e968ef35bc new file mode 100644 index 0000000000000000000000000000000000000000..72b2c815805015066df3837618b84d9c8b0a6b25 GIT binary patch literal 93 Ycmea<^keyMYJryj|Nk?>&1c)^aF- HXl@1oXn;`b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0494ef6bf1eaaa4b3e6e371b1589a9b44e87b5ef b/fuzz/corpora/bignum/0494ef6bf1eaaa4b3e6e371b1589a9b44e87b5ef new file mode 100644 index 0000000000000000000000000000000000000000..596e69370af36a22650b7743f6a49f6d92b0be30 GIT binary patch literal 106 zcmZSfI`yCT{{*cKEQXQ)85uNK|9^x5F0PLMg`NL<*f=_ladrIv|DWO5F|FA@7#M#1 z`0<0m>Ic_}|NsB1{r~^}2iO1H-R|m6R$6ig4Zi;W|NrlQ5Rm-%G5q8I7^}|C{~BMe G{|5lN?LjF3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/04ac1d7daf4f33c6087306633553b4680d835202 b/fuzz/corpora/bignum/04ac1d7daf4f33c6087306633553b4680d835202 new file mode 100644 index 00000000..590915bb --- /dev/null +++ b/fuzz/corpora/bignum/04ac1d7daf4f33c6087306633553b4680d835202 @@ -0,0 +1 @@ +2ÿƒ]¡0;;€0€ÿºÿÿÿÿÿÿSS­«ÿü \ No newline at end of file diff --git a/fuzz/corpora/bignum/05284472573e1ad58711ad817befa882ee713962 b/fuzz/corpora/bignum/05284472573e1ad58711ad817befa882ee713962 new file mode 100644 index 0000000000000000000000000000000000000000..3f9edeb737e04d7bb44eada13ffb7fcccabd4923 GIT binary patch literal 127 UcmZQ(i)2##4+9Kj0unfWdA92+-Cx&^BOThy(zZFg30K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/05d477c41b213e9010f9e46bc73346c6fe319cb3 b/fuzz/corpora/bignum/05d477c41b213e9010f9e46bc73346c6fe319cb3 new file mode 100644 index 0000000000000000000000000000000000000000..56bc2b2f0847c2c179a4a44716d1b631c69d8e5a GIT binary patch literal 127 zcmd-n{Gst*!}dGlf1m#j4CiB|fBpX-kmV`!9|1HFOc3~m%w+^|Dl0215rS3-CIm1t PG9U@T*$n^xGyDetrH^OK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/063f1987a20f44a1c5ae7e5a86a87be08f9df136 b/fuzz/corpora/bignum/063f1987a20f44a1c5ae7e5a86a87be08f9df136 new file mode 100644 index 0000000000000000000000000000000000000000..c895a728c0b1eb58c81645e0399f28f8dc79aa60 GIT binary patch literal 37 jcmdPk>iGZvKLZ0JGXujvFbfQRI9h?||H+ID3=CfZ_+ATw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/06711f0f1477cee069093a3c436ea540ae4bca9a b/fuzz/corpora/bignum/06711f0f1477cee069093a3c436ea540ae4bca9a new file mode 100644 index 0000000000000000000000000000000000000000..5c31e9197b5e335e56e7206131a5713be684c5a7 GIT binary patch literal 105 xcmZQ(i)8u_2MjoY6-37RNALgtg@sFfwxFnl82}Sx75LA<$iM&-f62h`5&)A~BC-Gg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/068bfb7a8d1e55f9bf2825e8b2c8081e20633ad7 b/fuzz/corpora/bignum/068bfb7a8d1e55f9bf2825e8b2c8081e20633ad7 new file mode 100644 index 0000000000000000000000000000000000000000..441a7e110e1e8b273cb2fdc9e76caac6ae3efd9f GIT binary patch literal 141 zcmZR0uVo#m@n7>lBfmNy*AI4QCT2kf#sB|*X#V)Y!0-bMCNqEmIZ QWef;8Ed)~&!Ndt_0hd@~K>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/07d9aed6d1eb93587a8931ead5e7663fd10e8800 b/fuzz/corpora/bignum/07d9aed6d1eb93587a8931ead5e7663fd10e8800 new file mode 100644 index 0000000000000000000000000000000000000000..ba7f91f29f328c1dd0962f77c3fb3c200a2291ef GIT binary patch literal 236 zcmb7-y$!-Z3`XA-rnwQQ5Rsz52n>O4uZaE=W3WY}ERl{Ct}(iwNKo<`+j_RYc*{g~ zLTN6o0KvwNo$Qx4u=cY9FbtBsLgrP?)O=OSK)zStQCN|*@+q z<3x|C(FW547^u~*XNew&ntgH~LPQ23DI)Kxl$C&{cibgM&NeyjYK`gn!*{7ZP8BJy zl1F{ot^8>hz{LqUlj|0fwXdiII=yE=Lp+uoCXume4&i$<9Z7!}=bS)i-`oH>o)_vY BEN%b* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0c129a4a781bd04d1edb08158757a5cecd96f79e b/fuzz/corpora/bignum/0c129a4a781bd04d1edb08158757a5cecd96f79e new file mode 100644 index 0000000000000000000000000000000000000000..4c3ec11dc02b198bc5db05c14d95a37d3b1dfd1e GIT binary patch literal 153 zcmZSDXvN0B!0_K?4WqQ?dUgi0BbxtvZ~vje(z^00T0X;oEIJN%&|Nrmb LznKuT8I}P6Wf()@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0c2a76d4384f528a103df6b9d99f426b790ace38 b/fuzz/corpora/bignum/0c2a76d4384f528a103df6b9d99f426b790ace38 new file mode 100644 index 0000000000000000000000000000000000000000..6218b680ad5b46f34b3291711759b6299d3a4d41 GIT binary patch literal 80 zcmd<$()#~jlU3pW|NjhHre6O~{pW3%-0>d_xD>g#Hp>2I`7h3B#gG)k$)I7~!}Q6$&(rW|JP!G03HSgt*J-9UhCWW|33i2O(N?6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0c4b7ea6e5fc85681e9e9ac20ff060a849adc3c6 b/fuzz/corpora/bignum/0c4b7ea6e5fc85681e9e9ac20ff060a849adc3c6 new file mode 100644 index 0000000000000000000000000000000000000000..d658d540a982c8b48881fb607d4664b91a9a0238 GIT binary patch literal 128 zcmZQ(i)8x$|Nnn35CH-V3|tCYlNmbxGoSz~2+#UQ@BjaWg-d<5pvXeBDt2&ca2@^s v{~z!FA3y&8Z;4&lU|?;{*kI7`e-}hWaPZpI|Nj)8DqP6$pJ8cBF9QPrAAUJ- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0ca9ba1be6fc1c6737d8d064fefd15aa8c16f01c b/fuzz/corpora/bignum/0ca9ba1be6fc1c6737d8d064fefd15aa8c16f01c new file mode 100644 index 0000000000000000000000000000000000000000..8a9f9044d019c8bf84dd860606652ec76b43edb3 GIT binary patch literal 302 zcmWfz*0Qz^ur|!&;S6kf(v~B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0cf0b5e196b939a9d8a97c0bcf8dd33b1f5f3648 b/fuzz/corpora/bignum/0cf0b5e196b939a9d8a97c0bcf8dd33b1f5f3648 new file mode 100644 index 0000000000000000000000000000000000000000..194b7056b045c366476bcba2b9ce67d039f64dbf GIT binary patch literal 102 scmZQ(W@hI24+cMe{P@8D1_B^52g1e$#2^4oni0$wdxIo-@Sxa10P{%>UQ0ycXv`cZ2lEI;)i|8O7 zoJ1+vgr@!ju0>Ehis@G_Y1&+nP6~b?e5|Qdko+rslR$fg-{({CL(fy$O>NhCvPn4>;uB&OP3AiE<0Qcg32|Xzl?}7df z>^K_{mT)^4#w_#v;bZW17n>8xuui8m1zRH9u)%;f5s3#}`1F}NP$B|~#o|=MB(kC< zBeGk|r;jaXJJu&6MNt6QUC7MjYJ`t&~XHzkzBIiL1zKJd`txus;o(Rw@)u zB2ZsYC@~U?83=w(2?uVDs5aU~pK{TT?zrrO`*qGWP3O$>JZ~??dk%qZetOX$|Nno6RsR8~{3`4K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0db7460efb5c23cc50f82c5d19da08970853013e b/fuzz/corpora/bignum/0db7460efb5c23cc50f82c5d19da08970853013e new file mode 100644 index 00000000..8266664a --- /dev/null +++ b/fuzz/corpora/bignum/0db7460efb5c23cc50f82c5d19da08970853013e @@ -0,0 +1,2 @@ +!( +ˆ Åÿÿþÿÿøø \ No newline at end of file diff --git a/fuzz/corpora/bignum/0dd0afdde67588a0d5301d3aecc4af17284b4207 b/fuzz/corpora/bignum/0dd0afdde67588a0d5301d3aecc4af17284b4207 new file mode 100644 index 0000000000000000000000000000000000000000..e4e1f9a1db93cbf3b5226c2bee8ac163479b74c0 GIT binary patch literal 200 zcmZQ(X8!;FKLZRf!WeMC%p0j-8EYM+m0`UGE{FwKTWg_+Mq&a61_maGn*R`hq5%fD nI{t$tW-u^-oC9`|^%^cN%|{N`f5Q|pFw}B!adCmU|3T^jfo~r- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0df04ea60fe03ad212982823400601ee345fe8bd b/fuzz/corpora/bignum/0df04ea60fe03ad212982823400601ee345fe8bd new file mode 100644 index 0000000000000000000000000000000000000000..9ba52d9096cf11d1de37f0801ce19ee194c170a5 GIT binary patch literal 64 zcmZSMJ;ofl&3w^&tMlj2U(_gKGnkUV`+;@7fwwjz3x}1dhMtB&j)8%J!CnRkVBs*; Qu+r1v$}yP#X|L5Y0I(1fTL1t6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0e04b2516b1bdbe9aa9ee10bf489cdfcfcc76efd b/fuzz/corpora/bignum/0e04b2516b1bdbe9aa9ee10bf489cdfcfcc76efd new file mode 100644 index 0000000000000000000000000000000000000000..98a81c09b40b18b9053a1ad4a06cab811c2ec44c GIT binary patch literal 134 UcmZQ(W@c9Z&j16AFa~`A0GogTGynhq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0e52466227789edb6f8426d0b2521a1206febfd9 b/fuzz/corpora/bignum/0e52466227789edb6f8426d0b2521a1206febfd9 new file mode 100644 index 0000000000000000000000000000000000000000..b194f7c72d76a5bbccc782e0f9d1f4017d4d348f GIT binary patch literal 120 hcmZRUiR566wO+}=`VtpSB0L5|@ZoBgcHUXD{;$45 PY5>cM3exbzHxGouMQ0|JOnW24-gF|I84bKYsl90Z}6W XqH-W?1_p-zF!SI5YSllu015yA58^Cr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/0fe30d7e47172e68989c48a9973c683ee95860b1 b/fuzz/corpora/bignum/0fe30d7e47172e68989c48a9973c683ee95860b1 new file mode 100644 index 0000000000000000000000000000000000000000..c51bbc8efc104d0a5c5cd5b946b868b73c6c0e9f GIT binary patch literal 1154 zcmZSP(_m#t_zwc=VDkTe&0k;!0|NsChykLZ;5P$-| zV1x)WGBPkQ@=y&R*#!kZ{{R0EH6CIwHoIVo(SgqoP0j-h4Etf?J|NTn2g0}v3`rf# z9b5uj2mz9S1_Og9UJal?YWv@SR}Bm(!Wbj~P+iFMrjH~1S|Njifj%m&Q!GH>WfWZI%|9^a5(6E84<3B_RSQIP_)(HY&p}Qbu d>wf(B`2(4W!r}e#|J1hs4DZ*hSqcLT{{fd@TVVhI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1068ce69061747b36e613dda9d535f1b1e5fc91f b/fuzz/corpora/bignum/1068ce69061747b36e613dda9d535f1b1e5fc91f new file mode 100644 index 00000000..f6b9d9bc --- /dev/null +++ b/fuzz/corpora/bignum/1068ce69061747b36e613dda9d535f1b1e5fc91f @@ -0,0 +1,2 @@ + +øßøøøßßßßßßßßßßßßßßßßßßßßßßßß \ No newline at end of file diff --git a/fuzz/corpora/bignum/10c0da3a01bd956e9a1f19dd0f2dd0ad614f519d b/fuzz/corpora/bignum/10c0da3a01bd956e9a1f19dd0f2dd0ad614f519d new file mode 100644 index 0000000000000000000000000000000000000000..38f6e9bd4d8a0294d05f90a2823156205e39c341 GIT binary patch literal 651 zcmb`Dze+aBr_Zy=ePn<8|SX4a{b;1KWu9POg3IF!~w3Oc%W^hHYMOP|11 zoNgBHSCaJF7Nj`zHyqA6$#?#7*6khgnr`oL9czVG-$GyZqP>H+eottONDB2!2^nvG^L-)ePUj>fu_%v$Sc;4=U@7>cYY2>kV} zmH|Pqjsn+_G~9IK`GFQZjwCM@d J)kT0(yCr+9?sWhF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/10c525ec33cc7753aa51fbd6db3dc0edd55ff10c b/fuzz/corpora/bignum/10c525ec33cc7753aa51fbd6db3dc0edd55ff10c new file mode 100644 index 0000000000000000000000000000000000000000..16bc04c79caab5026f4bea29cc6654c8a70945b7 GIT binary patch literal 355 zcmWe><>l20Ul5f@4@kA%NK+Hj>erK}L%K1gset@TkQD82 UDEQC7qNR7)dXja<|8*I^0SPc>b^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/11513cc2ea09f6aefb615c628264054dc9146e64 b/fuzz/corpora/bignum/11513cc2ea09f6aefb615c628264054dc9146e64 new file mode 100644 index 0000000000000000000000000000000000000000..73ba3d6af0da6915036c58278e5f351cca25da75 GIT binary patch literal 18 QcmY%V!NC6WKN8Ra0D7|yH~;_u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/115501975116dc32d27279cad9a5206a8672213d b/fuzz/corpora/bignum/115501975116dc32d27279cad9a5206a8672213d new file mode 100644 index 0000000000000000000000000000000000000000..a4891fea04e91795b1bf140fa8fbc55a5170e6a3 GIT binary patch literal 172 zcmZSm{p;7S-wZ5_3?LBx|NsAs4AxiHQ5R_9HSRwIFtR`yAkgst|9@5nR%EQMuFw0OIrl5C8xG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/123eb7dec2236797f7373aa3807164e4b7360800 b/fuzz/corpora/bignum/123eb7dec2236797f7373aa3807164e4b7360800 new file mode 100644 index 0000000000000000000000000000000000000000..ff94f4c29464e74b72849e1924c7c93b2b7b3ebe GIT binary patch literal 180 zcmdYU6vn^XRMAkXCC$_LX4T2FPC+xf-v>~dKbE40sBZFEK- zP~ZswPzq3;ol&V};VIknW!=AOiL*;Tj}KpgmFRuWM)&dxJkEkycpPp7FAQ+k7{E<> cp=qO!&=bQ0zYQWf!pZ6N*O@(s;eBuW&ctkfsqLUk i2c{?fz@yznpmUJoIw7?v+*fPw%RgG@lFehNWA00RI*oezot literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/15b3068114c8a44d96307f86281a638de7b08e2c b/fuzz/corpora/bignum/15b3068114c8a44d96307f86281a638de7b08e2c new file mode 100644 index 0000000000000000000000000000000000000000..e10667b4d2f4479e667fb808f92d1036566431ed GIT binary patch literal 31 ScmWF!kNJ-ssQ>@}p8)`_h#MFH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/165f666c1dba74e442a0945fc8d391d8561b8357 b/fuzz/corpora/bignum/165f666c1dba74e442a0945fc8d391d8561b8357 new file mode 100644 index 0000000000000000000000000000000000000000..ea41681b42e059da4123583e17a754c12bc2aea0 GIT binary patch literal 70 zcmZQ)V_;Y0y02X;w3HnL82&RdK*0Z*XCh-Fq2SCfpC9c18UAa<{QrOG2g4z){|x{C M|7ZOFAFTF20PThvwEzGB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1680269ba5a886db5bbd41496a31cb05b80e9caa b/fuzz/corpora/bignum/1680269ba5a886db5bbd41496a31cb05b80e9caa new file mode 100644 index 00000000..59924e06 --- /dev/null +++ b/fuzz/corpora/bignum/1680269ba5a886db5bbd41496a31cb05b80e9caa @@ -0,0 +1,2 @@ + +6!Zý@æÿø±ñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿññ±ññxÚÚ'ñññññÿññÿÿÿ­ÿ€ \ No newline at end of file diff --git a/fuzz/corpora/bignum/169ba9110bd77bacf838ebc7d26eb9b3897c26a4 b/fuzz/corpora/bignum/169ba9110bd77bacf838ebc7d26eb9b3897c26a4 new file mode 100644 index 0000000000000000000000000000000000000000..24586d4dd5b0c291ade6b0980ab37a7a4f029b4d GIT binary patch literal 24 gcmcESVfz1nG6MsHAOpkFo8Ycp*Rc!Z2lMeuV*&>TOffJp)?@_$6mN!_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1745891631336f1a484ea0109be4702b0aea841e b/fuzz/corpora/bignum/1745891631336f1a484ea0109be4702b0aea841e new file mode 100644 index 0000000000000000000000000000000000000000..6690aec194df21accdfd58b0182ff37c7473cd38 GIT binary patch literal 509 zcmZR!;$rWq_N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1762612e4e5b97f7049049b72cf1ca277d0fc5fb b/fuzz/corpora/bignum/1762612e4e5b97f7049049b72cf1ca277d0fc5fb new file mode 100644 index 0000000000000000000000000000000000000000..c14a0863c390d36bdbfed84f1e8c7b2a15ce0918 GIT binary patch literal 39 icmd-Ic;UP+f8(873=9nCA%Nlk|Ns9x5a2(9<}m=f6&8g6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/179e5327973ced876a2b8e30f84f1283d166d8da b/fuzz/corpora/bignum/179e5327973ced876a2b8e30f84f1283d166d8da new file mode 100644 index 0000000000000000000000000000000000000000..ce94c5ccccc1d2eaa125279c54bca2a37de05aec GIT binary patch literal 114 UcmZQ(i)2##4+9Kj0#ft?04l%{bpQYW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/17a5a2b7d3598a8319461a6399605af31bfa9b36 b/fuzz/corpora/bignum/17a5a2b7d3598a8319461a6399605af31bfa9b36 new file mode 100644 index 0000000000000000000000000000000000000000..81646d55c428580fe06e6c7873bf3bf333215cba GIT binary patch literal 264 zcma)%p$@`87=s)BLyspwV765qlUKttkX*>b{JjSu;UQ2+f|*{Xcqoz?$hjp$@Tpd` zO;^Ux68wjmS>G??b1*kQ!FhB5THEE-_r7gVW@QmCI&ynwCzrgZl8zLq4fPC%i4a3Q k=yDB1=v)%`KtUFhKZy;4Zn?+IN?@!}Esn()BT%jJ1>I+DH~;_u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/17e9f55b00f757f9fc56bd64ecd8623393d5b325 b/fuzz/corpora/bignum/17e9f55b00f757f9fc56bd64ecd8623393d5b325 new file mode 100644 index 0000000000000000000000000000000000000000..0f04324ca44f90f313a46a1846180a91514898bc GIT binary patch literal 129 ocmd;-V6Jv@a{B-O)Bpef|HB!y00#fxLyQ&p|DQnt!gSIG0Qx#~8vp0Tc>_!UZWJhUhT@3IgH^2Z2~3 zBt$G1z&%@GCiC4Gdil&4^FDe2WMmm*ei>sbM8w1{V%_;Cezx1~B=NZ8IGIe8QOoQ3 z9HMt_xtQ%jG<~I(iB8W%gS&t(J$yB^9S2o*#Mx0YL6kuz_mmiuGjfZFC@S&B{D`Ia zK7HgKOoLUeR;%S}IC4H|(vtvI|CIoMbu&$y7<*gT3*~C~SqKP^ndK&71Ym zyGmcO-fVsg>kS(aES2?0o=S)dh&Nu?TdW?HkD!|0uf^R1iyj7dz_q^;J=xeentSJ^ zv_6kZ6D#*Ey}Odj>%&t2j&7B~mZe|_(yWm1VKmda^0|a0b!v+A{5DG*9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/18a5e6e464c4e4a0f8a4629e20c4a97a0e1a8a21 b/fuzz/corpora/bignum/18a5e6e464c4e4a0f8a4629e20c4a97a0e1a8a21 new file mode 100644 index 0000000000000000000000000000000000000000..e22b8cd873de18f5b43b7fde7f2d656aedd0ccc6 GIT binary patch literal 101 xcmZQ(W@hI24+cMe{P@8D1_B^52f{`L%*@Qp>i^+ljBpkT5Q6})*ujHh2Lb!H4v_!= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/18bf1250d12f51767333d75523d318408ef59d42 b/fuzz/corpora/bignum/18bf1250d12f51767333d75523d318408ef59d42 new file mode 100644 index 00000000..f608c243 --- /dev/null +++ b/fuzz/corpora/bignum/18bf1250d12f51767333d75523d318408ef59d42 @@ -0,0 +1,129 @@ + +øøøøøøø + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +øø + + + + + + + + + + + + + + + + + + + +œ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +œ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fuzz/corpora/bignum/18e37fb683fd23a1ea949c408dd9811d9183a82c b/fuzz/corpora/bignum/18e37fb683fd23a1ea949c408dd9811d9183a82c new file mode 100644 index 00000000..bad450bb --- /dev/null +++ b/fuzz/corpora/bignum/18e37fb683fd23a1ea949c408dd9811d9183a82c @@ -0,0 +1 @@ +!‹¥ûÿÿÿÿÿÿ)ÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/18ff0a48916d43c31a1038ee6a4da037d864d2bc b/fuzz/corpora/bignum/18ff0a48916d43c31a1038ee6a4da037d864d2bc new file mode 100644 index 0000000000000000000000000000000000000000..37c04565482f82c19df2d0736676efc9244ab64b GIT binary patch literal 52 ucmdOr{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1ac7ac93b4caa93cf1ffc00022d7ae7c890f0478 b/fuzz/corpora/bignum/1ac7ac93b4caa93cf1ffc00022d7ae7c890f0478 new file mode 100644 index 0000000000000000000000000000000000000000..7dca30e8127d9bb6663f9b3b6f71618bb8568f7d GIT binary patch literal 10 RcmdP2`tQQX&R}-rKL8Na1E>H1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1b37b3353bb7bb98ce6358a18546ccaaa41957c5 b/fuzz/corpora/bignum/1b37b3353bb7bb98ce6358a18546ccaaa41957c5 new file mode 100644 index 0000000000000000000000000000000000000000..406c4a54e8b2499d83332bdbba53f5983643200c GIT binary patch literal 151 bcmZRUiR566wO+}34>t1v9C!}c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1c32974ddb204e700efb309581f1df1c64d4d127 b/fuzz/corpora/bignum/1c32974ddb204e700efb309581f1df1c64d4d127 new file mode 100644 index 0000000000000000000000000000000000000000..8a790a7c06808365e64c836ee20b86fb4ed71b55 GIT binary patch literal 30 VcmY%V!NC6WKO7)2|NsB51ps`u8YTb$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1cbb141d3047367d9410e9d77e3ddfee89683afb b/fuzz/corpora/bignum/1cbb141d3047367d9410e9d77e3ddfee89683afb new file mode 100644 index 0000000000000000000000000000000000000000..ea70ccd522c5ffbfd599fa9408b019179e929fdb GIT binary patch literal 160 lcmZS95@l>$uJusHpdcWC0RY0r4ub#y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1cd181a68ab4cbd8141c3a1c83f9840405e0cce2 b/fuzz/corpora/bignum/1cd181a68ab4cbd8141c3a1c83f9840405e0cce2 new file mode 100644 index 0000000000000000000000000000000000000000..e7e21b5c42f306c53405f3810fcfc372ea6014d0 GIT binary patch literal 686 zcmd<$;$mcAVEF%^L6Hjy{3i!+aY-Q=K@eQP4!9sLVqk!|NE5p{tN@3lAP+(S*spLV q9spH@8=zZ-#jO7z>joC!c0V#8!Y|f1{lSYxW+oOfC~$x=$N&INpUay7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1ceb6dbd665c5d58627fa31ed6c133ccc9e71866 b/fuzz/corpora/bignum/1ceb6dbd665c5d58627fa31ed6c133ccc9e71866 new file mode 100644 index 0000000000000000000000000000000000000000..be80b81c9d854e3f4ebb03be5d745f70932cc14f GIT binary patch literal 32 ccmd<$vi`xy!0`V+!>|8f(18H|88nXp02(6_0RR91 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1d790ce94974aab40348e750d806b5885e8f3527 b/fuzz/corpora/bignum/1d790ce94974aab40348e750d806b5885e8f3527 new file mode 100644 index 0000000000000000000000000000000000000000..c7114e4d04c9339924e401c54af9fb86d9b29e98 GIT binary patch literal 172 zcmZSm{p;7S-wX_l3?LBx|NsAs4AxiHQ5R_9HSRwIFtR`yAkgst|9@6iu$v&xVqjok F1OSZ-Yk&X% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1dce52bc5e9ae633d73ae196611f8531a7a37f93 b/fuzz/corpora/bignum/1dce52bc5e9ae633d73ae196611f8531a7a37f93 new file mode 100644 index 0000000000000000000000000000000000000000..64ae64cd74c1ee4e4598da5034f443d124c3eba2 GIT binary patch literal 428 zcmZQCzq5r*s!90Wi|Ns9tU|?VX(P+Q`EQtje%#*_b zh&OIO7IQ)1E3!DVOe6zithIp_k^@1$zyJ*xBBTML^ut{SGy6ZBg#tk8Py`Ubz`y_$ U*bEGe2r&q#xOJ;SK=MBq0CYj12><{9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1df5935d4cd349ac78102af001ced100f31449b1 b/fuzz/corpora/bignum/1df5935d4cd349ac78102af001ced100f31449b1 new file mode 100644 index 0000000000000000000000000000000000000000..d01f66e18242328f6cb4b5fabb1431a50d99d958 GIT binary patch literal 132 LcmZQz7$-P%tzx5Ilg0n9M{5p29GBUW^Go`@?xLz+jmlkBfshyR4(e&sz@qp^hm1*VsBb{3e{XJdONui*2fW0K zyCYnB5yvre)ow}kJ1YQ6nmqmhfxI}ziyy5D;$HGG9OxsdK1o`;1lhKX3-iS3(bxY8 zp$)hIXTUdY2SD#+cAHClB&u;Rjf2^eG+RcK=M(*uV|Mud+6j|Jf+xvH)b>|%$JDvz R^C>T2wnrsfe=KE@I0IrFgPQ;V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1e78bfe3b31ae8904f08bc48157f2cf619aa6aa4 b/fuzz/corpora/bignum/1e78bfe3b31ae8904f08bc48157f2cf619aa6aa4 new file mode 100644 index 00000000..46aa8942 --- /dev/null +++ b/fuzz/corpora/bignum/1e78bfe3b31ae8904f08bc48157f2cf619aa6aa4 @@ -0,0 +1 @@ +((((ÿû(ÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/1ecf3d863e5b5317aa9eefec0d0a7045e77b3dbc b/fuzz/corpora/bignum/1ecf3d863e5b5317aa9eefec0d0a7045e77b3dbc new file mode 100644 index 0000000000000000000000000000000000000000..d5c0b936a82d01d83fde8012611a7990e491540c GIT binary patch literal 48 jcmd<$vi|WO8FV1Pe+JECTC;yJFbMttf&c&i|KI`uFzFzs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1eded4e4ef96954ed169e59a6d7333f32547d0b9 b/fuzz/corpora/bignum/1eded4e4ef96954ed169e59a6d7333f32547d0b9 new file mode 100644 index 0000000000000000000000000000000000000000..e80b7cf1037d9f3ef4d0b144c34f536203fbdd50 GIT binary patch literal 22 bcmZQ*`1iQsaXABs`dt41e**&p!~g#Pm2V9L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1efd06ca42ab8f700dd44610957c02667a0b4df1 b/fuzz/corpora/bignum/1efd06ca42ab8f700dd44610957c02667a0b4df1 new file mode 100644 index 0000000000000000000000000000000000000000..b7eaf0f9cbd0daa205a9120474cdd54756119f67 GIT binary patch literal 160 ZcmZSPja0CVwGPtCu-3A+Uc)fh002BI1I7RV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/1f3dc7f0e6fca8eb8a13914b5a710b9c80028df8 b/fuzz/corpora/bignum/1f3dc7f0e6fca8eb8a13914b5a710b9c80028df8 new file mode 100644 index 00000000..b6dae44c --- /dev/null +++ b/fuzz/corpora/bignum/1f3dc7f0e6fca8eb8a13914b5a710b9c80028df8 @@ -0,0 +1 @@ +  ÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿÿÿÿ)ÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/1f848503b378f9ca38384e3b19f5517fd33e806e b/fuzz/corpora/bignum/1f848503b378f9ca38384e3b19f5517fd33e806e new file mode 100644 index 0000000000000000000000000000000000000000..048d40d8edfac41cbbd51085a523b95462a9112c GIT binary patch literal 98 zcmZQ({?FX-g+YM<0|=ms#6Y+|QlP^BQ~ooo_|L$w|NsA7+5h$bA;R_lzb}QUfC2#3 C8WFGn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/202655abef22e6bfd1db41dcaecc9b7d5bc279a2 b/fuzz/corpora/bignum/202655abef22e6bfd1db41dcaecc9b7d5bc279a2 new file mode 100644 index 00000000..7d747263 --- /dev/null +++ b/fuzz/corpora/bignum/202655abef22e6bfd1db41dcaecc9b7d5bc279a2 @@ -0,0 +1 @@ +!!Êq#›ø ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)†5ÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/202c1c672fab92be025c9cf820ad90bd64f090e3 b/fuzz/corpora/bignum/202c1c672fab92be025c9cf820ad90bd64f090e3 new file mode 100644 index 0000000000000000000000000000000000000000..8b028da3681fcd8ad5f892bce3863774cbfc654a GIT binary patch literal 20 WcmWGNZ(#dh+xtHhgf?AeU<3e#_6)25 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2049a94185314d4049a8644d76a8f729051fa253 b/fuzz/corpora/bignum/2049a94185314d4049a8644d76a8f729051fa253 new file mode 100644 index 0000000000000000000000000000000000000000..d481caf86196918e760eac3eb9a39c50d194030e GIT binary patch literal 127 hcmZQ(iBxE8LIR8o5P&3v1el=gYB1e^S1l318UUzOHi-ZL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/20822ad0ee4e5ec4536b670320a475abb58e87ea b/fuzz/corpora/bignum/20822ad0ee4e5ec4536b670320a475abb58e87ea new file mode 100644 index 0000000000000000000000000000000000000000..084cb5e448a9e6cf0dafa4b8788c504638223104 GIT binary patch literal 60 qcmWe=F!;&9z~sPS9V`7iAWIMlOoX%Ffms)17{EZ3fq|g`!~y_UBnch> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/20fd5aa0c849f0b9380fe9c4ea3dd5bb44b4db1e b/fuzz/corpora/bignum/20fd5aa0c849f0b9380fe9c4ea3dd5bb44b4db1e new file mode 100644 index 0000000000000000000000000000000000000000..5bc8a894c30f07d5cc68162c1c75d288fea01644 GIT binary patch literal 141 hcmZSPi%j?r1`H6;%fJBPV*;oOEPxS345vau$^cuwAvyp6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/210b78032ce82a5c34bb8d9698156545ebd8610f b/fuzz/corpora/bignum/210b78032ce82a5c34bb8d9698156545ebd8610f new file mode 100644 index 00000000..72c3a04f --- /dev/null +++ b/fuzz/corpora/bignum/210b78032ce82a5c34bb8d9698156545ebd8610f @@ -0,0 +1 @@ +0Ë00ÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/218049e64516ef6b5ddf7f02ebb092cc7b0ec159 b/fuzz/corpora/bignum/218049e64516ef6b5ddf7f02ebb092cc7b0ec159 new file mode 100644 index 0000000000000000000000000000000000000000..ed6a465d85b294205bf8bb8de19c394dd8fd2614 GIT binary patch literal 76 lcmb1;0D<3NQbIyvFO=c%9|Rbt=M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/21ac33ed0badee09f9ae7e6f8b03092b4d2738ef b/fuzz/corpora/bignum/21ac33ed0badee09f9ae7e6f8b03092b4d2738ef new file mode 100644 index 00000000..d95ba7b2 --- /dev/null +++ b/fuzz/corpora/bignum/21ac33ed0badee09f9ae7e6f8b03092b4d2738ef @@ -0,0 +1 @@ +qñp \ No newline at end of file diff --git a/fuzz/corpora/bignum/21ca7691e33ff29dd02938d482f8a894703e2c04 b/fuzz/corpora/bignum/21ca7691e33ff29dd02938d482f8a894703e2c04 new file mode 100644 index 0000000000000000000000000000000000000000..a158d477123be4ee76e1683f2c47d68e0d09818f GIT binary patch literal 63 dcmXqLFvuVQG_Wy;a&ay(U|`VZWME)m008~O6uJNa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2247a18cbf97b6cff011d4c46876aa3dc069faad b/fuzz/corpora/bignum/2247a18cbf97b6cff011d4c46876aa3dc069faad new file mode 100644 index 0000000000000000000000000000000000000000..572087d5f8104815e090aebaa0920cd95c0d1caf GIT binary patch literal 14 VcmdPWIwqi{RriH~AvZUd5da_r1UUcz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/226f7197b6fec9431cf951020c3be838cdac85fd b/fuzz/corpora/bignum/226f7197b6fec9431cf951020c3be838cdac85fd new file mode 100644 index 0000000000000000000000000000000000000000..c79ab96c8f58c177d2535238ef4a6b32f74105b2 GIT binary patch literal 72 rcmWfVUB#62Um#^K!^VaGu>%1H2>1(=p19&PjLq;~i-DWL;s1XC8hSDc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/22d36f609d2fab6d90ec6007031f3401e088fef1 b/fuzz/corpora/bignum/22d36f609d2fab6d90ec6007031f3401e088fef1 new file mode 100644 index 0000000000000000000000000000000000000000..791eefc1255324b0c78d70f745cf3926a6157f69 GIT binary patch literal 256 zcmajXu@QhE3b04FE)BV%a3&4iT>yPyEXNl_#LRh+3mlw_?s~jv82Y&&*(raef?n@0_PpST2-^ KG*GKATd`|xW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2319848c64272ec3b2a13dba9121254a55a54243 b/fuzz/corpora/bignum/2319848c64272ec3b2a13dba9121254a55a54243 new file mode 100644 index 0000000000000000000000000000000000000000..070cfe79d736a581fbcd8a7025c50dd45bc646e2 GIT binary patch literal 128 zcmZSn$7R*=|G(G&|DB!xx&A}Jg#Z5|+m^QRfBG->e?Ls{|Nk!_rsJ>Q{|gIM|8sc% z|IhIMzvln{>RkW1A|oRi{{QdbVzB$K^%E6%dU|?Z|Nk4LmjML6GB6c#X)SGAx->BT FA^`hnRfqrp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/233ae4cd36f6ae9db1e271f1e3e14891e18d4ada b/fuzz/corpora/bignum/233ae4cd36f6ae9db1e271f1e3e14891e18d4ada new file mode 100644 index 00000000..62af5ce0 --- /dev/null +++ b/fuzz/corpora/bignum/233ae4cd36f6ae9db1e271f1e3e14891e18d4ada @@ -0,0 +1 @@ +jeûÿÿÿÿ'ÿÿÿÿÿÿÿÿÿÿÿûÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/237c6bf286c02ac1035cc08c704ae35d3ecb3b77 b/fuzz/corpora/bignum/237c6bf286c02ac1035cc08c704ae35d3ecb3b77 new file mode 100644 index 0000000000000000000000000000000000000000..73ad2ec5dad627b06794fb38984eae5bd644abcf GIT binary patch literal 134 RcmZQ(X8!-Bfni`l0{}#)0{s90 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/238b5e718af7edcabda37bacf28c61bb6ee4713c b/fuzz/corpora/bignum/238b5e718af7edcabda37bacf28c61bb6ee4713c new file mode 100644 index 0000000000000000000000000000000000000000..e9eda3e86ae4f4236e57d17c26dfd68679f0716c GIT binary patch literal 126 zcmY++u?@m76b9k{Ral;a(#ZrgED*V&pzs(h5h-J20Omk?avzCBaCgXp#$SK8ws?k% wy9f72?R-kS0>};%8eCHXq>mv*nA)AZyfHWN+|KgBox3=KQ)Cm;eG1urDZp& PT`HW~nU(;7XD2uo`spH9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/23c16e0edb2808f139a3e6c1af45ffa9350b47ce b/fuzz/corpora/bignum/23c16e0edb2808f139a3e6c1af45ffa9350b47ce new file mode 100644 index 0000000000000000000000000000000000000000..f3591fced91ffbaf83007212b2d5f06a8ef46c8a GIT binary patch literal 57 zcmW;Bp%H*E6a~SPVF8l!1Ocf~r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/256bbf6ffcb23254c612cdda36c6ed0240d46e0e b/fuzz/corpora/bignum/256bbf6ffcb23254c612cdda36c6ed0240d46e0e new file mode 100644 index 00000000..d5871c8b --- /dev/null +++ b/fuzz/corpora/bignum/256bbf6ffcb23254c612cdda36c6ed0240d46e0e @@ -0,0 +1 @@ +øŽLøŽ'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY \ No newline at end of file diff --git a/fuzz/corpora/bignum/2584b8bf1482a82c9c38de04742302f97af09188 b/fuzz/corpora/bignum/2584b8bf1482a82c9c38de04742302f97af09188 new file mode 100644 index 0000000000000000000000000000000000000000..ce408beb527a93a7258720ae2384a47e6a29219e GIT binary patch literal 21 WcmZRmXZZD>!4w7iA#S`M-yaL+Kb-$N&HT8UB+6jvdpQ{eyww$B!RB7}Wm%|Nn#Qf9`H~btfyW Fg8*PCO}YR8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/264c7e027882f9daa95032672be0766f38395117 b/fuzz/corpora/bignum/264c7e027882f9daa95032672be0766f38395117 new file mode 100644 index 0000000000000000000000000000000000000000..0d2db72e412328754528054fefd9f3f2b349728b GIT binary patch literal 262 zcmZQ#WMKIJ|NnmmreuNt>Bay5r$?lxcc-U!cZ+>HnV0nH|Nnm+{|x>!7+4z^$jZvz zXQ&6M1_1+E0VV?;0j3BZ?O17s|5+CT0s?C#QFXaE2J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/26b8282762b2393f1fa55c195152e421b5b0dc58 b/fuzz/corpora/bignum/26b8282762b2393f1fa55c195152e421b5b0dc58 new file mode 100644 index 00000000..f771b06a --- /dev/null +++ b/fuzz/corpora/bignum/26b8282762b2393f1fa55c195152e421b5b0dc58 @@ -0,0 +1 @@ +:øÿÿ\ÿ ÿ:ˆ \ No newline at end of file diff --git a/fuzz/corpora/bignum/26e00d4f485eeae8ef0a30e482fade1309c866bf b/fuzz/corpora/bignum/26e00d4f485eeae8ef0a30e482fade1309c866bf new file mode 100644 index 0000000000000000000000000000000000000000..72c268edb8f1057d0a0d65dc0011ac61de8b46ea GIT binary patch literal 126 kcmZQ(X8zCo9}Ir{`0;}Q3W`=90iMn)@!|Nl4sCk`yaqKuIN4B(W=e*h(sLMZ?M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/26e74fbbd671744b68b480e79b79204ddc149664 b/fuzz/corpora/bignum/26e74fbbd671744b68b480e79b79204ddc149664 new file mode 100644 index 0000000000000000000000000000000000000000..39b5eff546d6a0917c0e5dcb919c33fcfd342bbc GIT binary patch literal 165 gcmZS9h*Z$kH8nJ`h_w#V%CKfY2LGV|S!^Hx07#e%fB*mh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/277fd8049e9e9f5a83e9ff91c21a8aefd314f514 b/fuzz/corpora/bignum/277fd8049e9e9f5a83e9ff91c21a8aefd314f514 new file mode 100644 index 0000000000000000000000000000000000000000..155dc4370e3d7a3753a00b090b1f147bc8c960f5 GIT binary patch literal 100 zcmZScfB+5;54-;i4BQNg3=9nn3=9naQGh0ghlhui2OANpJvg{LJUqA=*8cj>z{t$N Hp!FXBsmUmT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/280a5b1a13dbf2eaa771da30bcf30d9cfb27bddc b/fuzz/corpora/bignum/280a5b1a13dbf2eaa771da30bcf30d9cfb27bddc new file mode 100644 index 0000000000000000000000000000000000000000..03bc382d0cfaf7f1c38b00e51737771e46c40440 GIT binary patch literal 32 bcmZSP(_my^VE7LO>i_@$*Zc+MFo1;tA88YF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/287ed5b1ab784a362038176b132f49e8a9a6a69c b/fuzz/corpora/bignum/287ed5b1ab784a362038176b132f49e8a9a6a69c new file mode 100644 index 0000000000000000000000000000000000000000..bc54262a2f41304e597002917f6449fb0fe82379 GIT binary patch literal 146 Ucmd<$;$ma~0|l-D2VjQ)0EsXKQ~&?~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/28d0e02f16af466f385434c6e87d0e27ae47066e b/fuzz/corpora/bignum/28d0e02f16af466f385434c6e87d0e27ae47066e new file mode 100644 index 0000000000000000000000000000000000000000..6f3233e6cf4133e0b4e303d8118057779ef16e2a GIT binary patch literal 649 zcmcJLA#Vaf5QS$5>f|YcJ9Q_kS5+Yh!S$zLn_vk23C$Czru`iV1P%j94Hk!~828A` z!9hctkT!g3-|Wu5d84YTAHU(3|6!$4qavm3$)jvY&8dc@aX?30ctfqOd+$%{CX1Nt z6!e0a`zrCDAeoMf2s#zF1^KouvgwG`1Lx0qp7%egOO?hFKmvdrfU=kYuc!d&(u?qC z=`jn2Ka`x_u=Zmprv%QK))A&HnTRF(o>%?<;%gI-j9oqjBAJRej?|1&9oYMS{~Rc4N_$b?Gx}Ep2ib+nsjOuWLyMtJUsvKylf)-qW$q`I4Q+Z g`2q}ppr!$SC}3s=lsgx*FDHZOeTM4mhIssX0W%dO_W%F@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2c236dca3111f2ea9003a8c8d49090037fd62104 b/fuzz/corpora/bignum/2c236dca3111f2ea9003a8c8d49090037fd62104 new file mode 100644 index 0000000000000000000000000000000000000000..b81f576c36ebdda57a2c68a17f85a7b8acafd7be GIT binary patch literal 113 lcmZS95@l>$uJu(}vXAQ><-|7ULa!k~a%BQtBHf=R4(5Ca1{J3G7f())^BLbV_!JH!9~|Nl=o z6A1%n7<_)P|Ht$bmzm;^jsG=eUvhzL;7SIO|Nk=_`oVBW3uFWcXn_P9K*WBA#^qYp z4RhztH83zRm^*h)@*4LrkOVrIdh}}*a~rZKSU)bHh$ewmF%ts=0~5n3#Z#xgooD#} W|H?m5*h8K8`#;#VHy{AXw0r;vb7czv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2cd7861e8f33034a05353d25c3101ee689f2f7d6 b/fuzz/corpora/bignum/2cd7861e8f33034a05353d25c3101ee689f2f7d6 new file mode 100644 index 0000000000000000000000000000000000000000..e81d23640ef09278efc3e5e59b2615e7f2be246e GIT binary patch literal 40 icmd;j&-{-|>p$cF{|rAq@&5R+<3AFR0fGM@6;=Qd_Zfcx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2d19415dbc404bceba31b1f1304ee4389d339db1 b/fuzz/corpora/bignum/2d19415dbc404bceba31b1f1304ee4389d339db1 new file mode 100644 index 0000000000000000000000000000000000000000..12fde3f7c2c1079eeeccfa2217b2be07e822c09f GIT binary patch literal 32 jcmXSv_|eb6z~IBcP_DtKX!Rcg+7vbZ|3Aj?-^m*Q*VGSi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2d3b4baf6b104759c82536e451c4a37407e92da5 b/fuzz/corpora/bignum/2d3b4baf6b104759c82536e451c4a37407e92da5 new file mode 100644 index 0000000000000000000000000000000000000000..650ad1b56fc1866c37fdcffab7460472af878631 GIT binary patch literal 31 gcmd;@_5c6Ija;$}Tnr5V8DPNS2Lpo$1H=FS0F|i-e*gdg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2d4c328a0efea3aa219cc6df06d4f0f5d7d5d881 b/fuzz/corpora/bignum/2d4c328a0efea3aa219cc6df06d4f0f5d7d5d881 new file mode 100644 index 00000000..d062a6e2 --- /dev/null +++ b/fuzz/corpora/bignum/2d4c328a0efea3aa219cc6df06d4f0f5d7d5d881 @@ -0,0 +1 @@ +0€Ký€ý/ó \ No newline at end of file diff --git a/fuzz/corpora/bignum/2da07b60183b7b0dcc55e85fb30cf05558834c2e b/fuzz/corpora/bignum/2da07b60183b7b0dcc55e85fb30cf05558834c2e new file mode 100644 index 0000000000000000000000000000000000000000..9e208b3e7f0221e5f3cd52cad88261afd07da799 GIT binary patch literal 139 hcmZSP(_m#t_>Te@7#J8p0w5X+e#02l1%=4Q0RUvD6ZrrD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2e04bf331da1d2a48119c2624940c85a2bb96cbb b/fuzz/corpora/bignum/2e04bf331da1d2a48119c2624940c85a2bb96cbb new file mode 100644 index 0000000000000000000000000000000000000000..e087ad1529cf7a3d75d6b84788644586211f3c90 GIT binary patch literal 256 zcmbV`u?>Jg3t4j69s@tRe}9&s3->N77-+G01wYbT}S`` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2e6632f80f09609cba55db6a73ebbf22dd5b5011 b/fuzz/corpora/bignum/2e6632f80f09609cba55db6a73ebbf22dd5b5011 new file mode 100644 index 0000000000000000000000000000000000000000..891ffd9accfade885c3ee02da584f318389f4902 GIT binary patch literal 181 zcmZR0uVo#m@n7>lBfmNy*AI4QCg$0*761SLq50zn1H%t6n9KkMj6Z%L@_s@Tj@PV%k08t<#OaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2f507fa3b7b6dc55a99afda7c15e0c52f65d915f b/fuzz/corpora/bignum/2f507fa3b7b6dc55a99afda7c15e0c52f65d915f new file mode 100644 index 0000000000000000000000000000000000000000..4dceb5b95cf5f91ec563ca8da12a9b0a5156db3c GIT binary patch literal 23 fcmdPo=jY?nTH3aBX`t5s{~EU68UOP!GB5xDTWAO4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/2fbd2164911e4cba6a0ba65608151fd577436da0 b/fuzz/corpora/bignum/2fbd2164911e4cba6a0ba65608151fd577436da0 new file mode 100644 index 0000000000000000000000000000000000000000..0c5e24356e658b3be3abecdda6910fbdce8b38af GIT binary patch literal 256 VcmZQ({?GXTKLf*mC}0?2005Tv3jF{8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3093da32425f62472320e38f4dacd9751120c04f b/fuzz/corpora/bignum/3093da32425f62472320e38f4dacd9751120c04f new file mode 100644 index 0000000000000000000000000000000000000000..4c57a9a4f83bf890d2d5e0be8abf62f5c0137cb2 GIT binary patch literal 109 WcmWgmr}$4MG&GdKTHtXgtpNb~AtbB- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3106a174559e3e42965ac063dd2128e62868dca2 b/fuzz/corpora/bignum/3106a174559e3e42965ac063dd2128e62868dca2 new file mode 100644 index 0000000000000000000000000000000000000000..61f276ef8225d8c9fb1ddebf68a443b38e81c411 GIT binary patch literal 48 zcmWg2N@e=}|39Ps|NsAg{Fuz}|G(9b|D9~jARbem)4#tAT0a#3_cQ!&WMFvz|A#dI D(k>k9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/321d56a4ac1f5d15d6f3470ed8983043436db196 b/fuzz/corpora/bignum/321d56a4ac1f5d15d6f3470ed8983043436db196 new file mode 100644 index 0000000000000000000000000000000000000000..448795753db73c59c97e8f7e486de7de94baaa35 GIT binary patch literal 207 zcmZP-{k))Y%6|q%>)-#e0S4?q0YjJ(NrW`Ru$uLGLBkFt6Hx#U3Xg%|;l3uA2moU^ BH9!CW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/321e7b54cf7aea8d1adfa44cb9bc7243a7d0f6d9 b/fuzz/corpora/bignum/321e7b54cf7aea8d1adfa44cb9bc7243a7d0f6d9 new file mode 100644 index 0000000000000000000000000000000000000000..e6e24f193ee85ed41e97cead2b20d799d34c6405 GIT binary patch literal 57 jcmWe=FkoO{a$vBImHr)&C5RJTkYNA=Q3eKv1`rDX?a2nF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3286ed4d96f7bd3d8ecdbae91080171c5e3a5ed5 b/fuzz/corpora/bignum/3286ed4d96f7bd3d8ecdbae91080171c5e3a5ed5 new file mode 100644 index 0000000000000000000000000000000000000000..43e32fb8b00d723d9b710e02ac03c676efcdcbf0 GIT binary patch literal 202 qcmZQ(`Om<}|L;F517!eBzZDkK7_o>E1`X&+)IkEsW-&T~l>h*lF$6;Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3296a01c0079136a2e5408545c1467907933ffcd b/fuzz/corpora/bignum/3296a01c0079136a2e5408545c1467907933ffcd new file mode 100644 index 0000000000000000000000000000000000000000..a634d19815b7b1fb8af89caaa8819a6d31b3c66a GIT binary patch literal 8 McmZ?jVE7LL02ILm#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/32edcbe6abdd0d8a69316ae25d1f786f50f5083c b/fuzz/corpora/bignum/32edcbe6abdd0d8a69316ae25d1f786f50f5083c new file mode 100644 index 0000000000000000000000000000000000000000..7cfc03e6e81c9ea6410b67e30947d9da00a37176 GIT binary patch literal 56 zcmY$?V42+U9~Hd+&!x!4wNdteo9fa)t^fZwZq$4YgY3m00QmzR A`2YX_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/339d345718a741663b28888f038bcf97d26f8ba0 b/fuzz/corpora/bignum/339d345718a741663b28888f038bcf97d26f8ba0 new file mode 100644 index 0000000000000000000000000000000000000000..8003f63dceb2e710d68f85b6df5bf58856b564b1 GIT binary patch literal 58 zcmZQ5oz2F;z|gjo-Ff+cuOI4G-Ara2|Nm>sUSweS55oWd|Nr~M|NjpN^FILn+%{bR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3462fea3b762838d045d4362cd25a319104204f0 b/fuzz/corpora/bignum/3462fea3b762838d045d4362cd25a319104204f0 new file mode 100644 index 00000000..0431b105 --- /dev/null +++ b/fuzz/corpora/bignum/3462fea3b762838d045d4362cd25a319104204f0 @@ -0,0 +1 @@ +qñ \ No newline at end of file diff --git a/fuzz/corpora/bignum/3478ba99bcf7b78c74906874966e98b8ff20f4f6 b/fuzz/corpora/bignum/3478ba99bcf7b78c74906874966e98b8ff20f4f6 new file mode 100644 index 0000000000000000000000000000000000000000..fb2889a3007693999855288ac7668a3f26c1fb14 GIT binary patch literal 107 icmWd=0|6~DQ88`?F|kM-;6EAQH%QOYWy@ejiUR;ydq)xg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/347f887e6ea6bf5ca09bf037846232ea0e240949 b/fuzz/corpora/bignum/347f887e6ea6bf5ca09bf037846232ea0e240949 new file mode 100644 index 0000000000000000000000000000000000000000..382090170200c4d7ba10bed82a31c7613caa3818 GIT binary patch literal 146 Vcmd<$;$q}t00Bj=0S91r0056f1z!LF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/348397ea401f30a113a7ef71258b1ed44b8d7525 b/fuzz/corpora/bignum/348397ea401f30a113a7ef71258b1ed44b8d7525 new file mode 100644 index 0000000000000000000000000000000000000000..424fcaa8d2c5183b2c44f77ce967cb25d8eea02a GIT binary patch literal 61 gcmd(-2eap literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/349f96a5e8f3ac016017aab69e8d05a98486c40e b/fuzz/corpora/bignum/349f96a5e8f3ac016017aab69e8d05a98486c40e new file mode 100644 index 0000000000000000000000000000000000000000..504e53bf23b30d6d934a76a1e9771b6c77f3e0e2 GIT binary patch literal 24 gcmd;@^#A|Hja;%^3=9na85kUXFffQPF#P`y0C0#1cK`qY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/34c6ffc54b69c3b9c1ec1db4eb00e1c89878b78b b/fuzz/corpora/bignum/34c6ffc54b69c3b9c1ec1db4eb00e1c89878b78b new file mode 100644 index 0000000000000000000000000000000000000000..c527c29c110ce3ab558910263286be75f0db9abf GIT binary patch literal 149 QcmZQ#o;_Rh|KI`)0BpOD)&Kwi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/35ab47a2ba2dec89a3686fffc8651f08084df495 b/fuzz/corpora/bignum/35ab47a2ba2dec89a3686fffc8651f08084df495 new file mode 100644 index 00000000..dbdcc5bc --- /dev/null +++ b/fuzz/corpora/bignum/35ab47a2ba2dec89a3686fffc8651f08084df495 @@ -0,0 +1 @@ +UÏ@ÿ+=UÏï‡Õ/+U‚Õ \ No newline at end of file diff --git a/fuzz/corpora/bignum/35c3206b7f011379adfc8cf85df241172f5c1c63 b/fuzz/corpora/bignum/35c3206b7f011379adfc8cf85df241172f5c1c63 new file mode 100644 index 0000000000000000000000000000000000000000..d87fb6ffbdd0c9d95e24c8df01985d47bdc7655a GIT binary patch literal 40 qcmb2~t~L0DK=n1O+TkwJlxfq{jIfq?;p2MXY`9{_S11CRg! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/363df844cdcb142eb7cf09bc258f95a58ab90c6d b/fuzz/corpora/bignum/363df844cdcb142eb7cf09bc258f95a58ab90c6d new file mode 100644 index 00000000..3831e68c --- /dev/null +++ b/fuzz/corpora/bignum/363df844cdcb142eb7cf09bc258f95a58ab90c6d @@ -0,0 +1 @@ +p0(0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.Ý4*p0(0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/3657205be84517271f18aef7586fdf2e553f4aeb b/fuzz/corpora/bignum/3657205be84517271f18aef7586fdf2e553f4aeb new file mode 100644 index 0000000000000000000000000000000000000000..48db7f95e08ad6af909d2ddc393aaa3e9a5a6644 GIT binary patch literal 154 hcmZSo@E6E3O+V;KPe D+@42F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/38690f58256cffd05890d3ad140ba2cfa17a3d2f b/fuzz/corpora/bignum/38690f58256cffd05890d3ad140ba2cfa17a3d2f new file mode 100644 index 0000000000000000000000000000000000000000..9695a91863b9d2bd7d48320ad518b06a930896e1 GIT binary patch literal 210 icmZQ(`TyTqfZ;zY15JPx7E>9qh>-!*L3&Wkf^Y!Lssp(I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/38ae5523b8eeed1763ee82d81cb1ab6f0712fb35 b/fuzz/corpora/bignum/38ae5523b8eeed1763ee82d81cb1ab6f0712fb35 new file mode 100644 index 0000000000000000000000000000000000000000..691032467a470d67e8dabeb83878b509c169db00 GIT binary patch literal 70 zcmZQ)XJ=RBx^HQ0V3=x}W@wU_Xl!Yol$K^-WSM4SWSne}YHnt3lxSd_YMf+hW)ukm YXMXwoVE_OB|9{5+{~5kBFfjZF0I*mXZU6uP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/38f7dfc86bba49dc5f8f873e0f9cdf1087904ff8 b/fuzz/corpora/bignum/38f7dfc86bba49dc5f8f873e0f9cdf1087904ff8 new file mode 100644 index 0000000000000000000000000000000000000000..3c33e40a1abc0cfab7699572afd5dbc842f82945 GIT binary patch literal 275 zcmZQ(`Tt*wk%2*g0R#*Tz!U=m!+$7XU|?Wko;_O=#vddA*{L`{g8_!8zyRh&gkMp? FZvc8Vop}HN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/390167c36e0d55aae9bec2c1b0113d831d8dcb2e b/fuzz/corpora/bignum/390167c36e0d55aae9bec2c1b0113d831d8dcb2e new file mode 100644 index 0000000000000000000000000000000000000000..9e43ef2494f44c80bb386367bb6b10d2fb248d74 GIT binary patch literal 106 rcmd|AUzyF`{zXJjOGoS)3R4#r1QLM=TV;lnj@<9EL$ou3cz-~|y&oLx@$vET{QUp9 tzB4lX|NkE3CXN5OyWQ2Dth5;ZC&Z3Fg6S@Ffa&!+3GM6N&o=PPh|rD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3a23488ce4b978caa112087f8da78de98b0edca1 b/fuzz/corpora/bignum/3a23488ce4b978caa112087f8da78de98b0edca1 new file mode 100644 index 00000000..5ca7617d --- /dev/null +++ b/fuzz/corpora/bignum/3a23488ce4b978caa112087f8da78de98b0edca1 @@ -0,0 +1 @@ +LøŽÿïÿÿQ \ No newline at end of file diff --git a/fuzz/corpora/bignum/3a559782633f66a5661c45f1f2e6b95320254741 b/fuzz/corpora/bignum/3a559782633f66a5661c45f1f2e6b95320254741 new file mode 100644 index 0000000000000000000000000000000000000000..18bdf661f81942f6ce4e7cdec91d88b529f97b5a GIT binary patch literal 135 VcmZQ(iB$OY|3AZkfqx*I8vx5+1or>{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3aa733d68bbde7d5a002ed0932b64ecc1de18af7 b/fuzz/corpora/bignum/3aa733d68bbde7d5a002ed0932b64ecc1de18af7 new file mode 100644 index 0000000000000000000000000000000000000000..8f60c087043bda617fd82067d98a9f9477720159 GIT binary patch literal 16 YcmY%N{#U=z`!7?T)4#tATL1q807LT#xBvhE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3aa92b49de87a3a259d7f5e0abbb0629becc2ff5 b/fuzz/corpora/bignum/3aa92b49de87a3a259d7f5e0abbb0629becc2ff5 new file mode 100644 index 0000000000000000000000000000000000000000..3e0a3cb87f0d29151b414df7e5d64aba5e6a2b75 GIT binary patch literal 15 UcmeZLyj6dzp7E3>0|@^I05Plv1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3aaaa2d3474947ee9829a79df4dc9b02c8c3f620 b/fuzz/corpora/bignum/3aaaa2d3474947ee9829a79df4dc9b02c8c3f620 new file mode 100644 index 0000000000000000000000000000000000000000..ee2ac014b4bb30931981f238b5294f49d0824dad GIT binary patch literal 58 zcmdPY`2Sz4gX8~yc8>r5|Nk!l5l}FV@6TU080Uwh6$1l9Eh7U1!+(Y!iVTr40GV+k A(EtDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3afb3f67159cb77ba326d58298f93722afd73941 b/fuzz/corpora/bignum/3afb3f67159cb77ba326d58298f93722afd73941 new file mode 100644 index 0000000000000000000000000000000000000000..a020d38dcc683a533f4b421a4216ad9f89e93045 GIT binary patch literal 544 zcmZ`#Jxc>o5S)uau)ESqPRrK_ma(z5IfR3Bc9u~DAx$u6J0K{QlB7_C;7{-$Xe+{k zR*Lo~Xrai;uJ6P^oaXK9zM1`)$@4sip-}-H0Hre^L-J_h2Y=D!rpE~Yxf78G5xEi( z!B%FE$jCkvMSu3Sn2vQ%M@uC+j})cx0mn!IZ!zZ|zC4d`a=C0g09ZnlPC+l`&KkEK z?T}1?9|eGfo07(j$3}_~k7kWB|9mByJ5^K@$ zkmOsOho$L<+*qv>j#dcu#O(g9j96hG&?*`?ZN`a4O-b8Y0JQ?J&njeBFLs(yY0$!X#u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3bcd7f0060b80069012f0df0a783afa28c5727c4 b/fuzz/corpora/bignum/3bcd7f0060b80069012f0df0a783afa28c5727c4 new file mode 100644 index 0000000000000000000000000000000000000000..651050d777de69e3ef544fa491e7c2c209472097 GIT binary patch literal 742 zcma)(&ubGw6vtm<6sd8uPy=cX$)?S`y1JF6-6D;_^yEQM>_HT#Ua~ouTkt6C#FHrA zf=F=4%|jP@@gU?Ng8zYHPhC)`!VqLZt(qw9lSv>|@!;n)F!Sbpf7Ca_;CXz)XOzuY)9s(;*T7@Wy_%|NAc3 zr<&88L=+8}*3&elG-q9R0st25B@uBa<__Ab>jS`vaX^M)M1x&GUt!jV&9IoWbgcX& zWn%95dIAFrngD%GES$6UI}8ek`%>zJh!h3~V|Uq{?e%(>T-Uw-b_5)mZ%zBaR{(wh za0fdhe(#D%*li9a>{dutCZnl{HbX$H;CnNMN@5liwza&yOrY52$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3bf2fbcf306b1f8e8d6822bd6af0dccec6f87acb b/fuzz/corpora/bignum/3bf2fbcf306b1f8e8d6822bd6af0dccec6f87acb new file mode 100644 index 0000000000000000000000000000000000000000..d868dc9a702c5e1aa57edb81084875c21fa85cab GIT binary patch literal 40 jcmb2lhc029Xw3?Se?i~$7zBL=L! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3c6bae49e5b32c8a70d3e9f6727fc4f58bf48d95 b/fuzz/corpora/bignum/3c6bae49e5b32c8a70d3e9f6727fc4f58bf48d95 new file mode 100644 index 0000000000000000000000000000000000000000..1ff4e5bcd4273d85032e1f1e603deef74a7ecbfe GIT binary patch literal 140 zcmZSP(`02x_zwc=VDkTe&0k;!0|NsChykLZ;5P$%FfI`Q0Hfz0 A9{>OV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3c8a7388f02ca309a8e9e05e92afb2cc04705ad8 b/fuzz/corpora/bignum/3c8a7388f02ca309a8e9e05e92afb2cc04705ad8 new file mode 100644 index 0000000000000000000000000000000000000000..a2d2775acd11620f614c6add5fd6ce245dba7e0d GIT binary patch literal 88 icmd|AU|No!yzXJjOGmr~3j{yL=5)qmJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3ca36d05d51f4520ee74b9367983baa4c934e3c7 b/fuzz/corpora/bignum/3ca36d05d51f4520ee74b9367983baa4c934e3c7 new file mode 100644 index 0000000000000000000000000000000000000000..fa6d29f97a7f0c21396d693a392cc42d1cdb00f6 GIT binary patch literal 40 ocmXrG2?F|z3?S+km~->y%}`m+1#;>#fAkv|q}VtY$jST#0Pf`!>i_@% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3ccadc09ac7409bc3b1a1f3d7bf7d5fc200d07f6 b/fuzz/corpora/bignum/3ccadc09ac7409bc3b1a1f3d7bf7d5fc200d07f6 new file mode 100644 index 0000000000000000000000000000000000000000..82ff4b6cd3507185900eece23e081be193be4483 GIT binary patch literal 37 pcmd>`I(Zo&z)FijNQnD~)ei;+2HD^I4FVux9)|yiw4e$YU@93H E0Iby{jQ{`u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3d51312150359597c03deffbde7f2eb3a9b57411 b/fuzz/corpora/bignum/3d51312150359597c03deffbde7f2eb3a9b57411 new file mode 100644 index 0000000000000000000000000000000000000000..644c68075c9b518debbee3f8042d215f7728c1e1 GIT binary patch literal 45 zcmY$?;41v+^P}(o`~Uv~|L_0L%hkca!1&+l2iJ-J|NsAwu>z6*88nY+HT?ep08e2X ALI3~& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3da03b453fbfb6212d35ce8266469d5c8ec31473 b/fuzz/corpora/bignum/3da03b453fbfb6212d35ce8266469d5c8ec31473 new file mode 100644 index 0000000000000000000000000000000000000000..9d932fac8056645af5491ba9bf68627aa51fee57 GIT binary patch literal 45 mcmd<#VP@w3|NlQD0~oOU|Ns9#MCAW}u*CoW|207b2mk=T^%`9O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3e162d7a180d37984ed5126b0d43a7dedf22b317 b/fuzz/corpora/bignum/3e162d7a180d37984ed5126b0d43a7dedf22b317 new file mode 100644 index 0000000000000000000000000000000000000000..a6488a24171600a396199be225dc9a5e845ef61d GIT binary patch literal 12 TcmXT?Sir!*#K82Av77|}85jdm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3e2373264e7fd5afb5d0d9cddc9761beb9418a7e b/fuzz/corpora/bignum/3e2373264e7fd5afb5d0d9cddc9761beb9418a7e new file mode 100644 index 0000000000000000000000000000000000000000..a4c0ecce712252d052b8abe6f6a90c8950ef050a GIT binary patch literal 151 ecmZQ(ja0CVwGLvy3Z`Qfr6thXt;Ohn}>aYgW3=Hr8lMW^r{P@SA G{vQA^VMWsb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/3f0c67d823d6f523c9753432a56850ed093af759 b/fuzz/corpora/bignum/3f0c67d823d6f523c9753432a56850ed093af759 new file mode 100644 index 0000000000000000000000000000000000000000..30ca5c50b08c2ba43f2fef0b203c5a8154b3ff1d GIT binary patch literal 64 zcmV-G0KfkV3W)!4iT{iS2#CfCi248j{y90-WcUh*{~P)_}S=-^Pn!KIs(Vhe&qCvkOl5huaP zL2z*BAJBmRfs-N?521eL<#ItqrPM*ckmPdr-uHd(-i??p2A7!$<^j;(s{K=Wrb{+t zE7ClN8~ifkmBX0dS%UFw=&cz2qR!GP7Wc-M8-R}aT-EbDj|gPv`#_zuP5}7+nRj{M z9-X>GO&H0U%?6FDY!>v248F z0|8{}qIIVSN;}=rZkIamC#i7bt{+RH89sYu?c`M6h+bZ4Oj$Mu(DA{&=nlPB{E3H$Oc)=?sr!N1L7$j53YO0MA@p#08XR< hLYSTjYUXxcW|Fu%>rn)p)Y9MX8B!`o{gyGVu-pdDA?N@A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/40448a317efe68881f67cb8df8bf05a4c6b18fcd b/fuzz/corpora/bignum/40448a317efe68881f67cb8df8bf05a4c6b18fcd new file mode 100644 index 0000000000000000000000000000000000000000..0e38e48fae39fc984986c4d5c9a8c3dadd5f0e33 GIT binary patch literal 100 zcmZQ&WmRVtU}a@xSf|3x00J{-&g3#v{IOB?oKUCNj8kXf}k) adIoIB%$W@TLHZo7|NsBr;rjm$mt+7FBr8Aw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/40afb848080f7d38af1be2127eab7f5f3326977d b/fuzz/corpora/bignum/40afb848080f7d38af1be2127eab7f5f3326977d new file mode 100644 index 0000000000000000000000000000000000000000..443c84b5b117645ac7202415c190831975c0d55d GIT binary patch literal 90 zcmY$?@cO~~e*#yBHJF}Y@Z%qcI>!%Q2F=dSQ~e*A7}@?aa1|CZ{{R2~|Mma1jN%Cr e3=k2o$NztH@-jexl@^1L5cdzOA5cES|Nj82#36qG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/40f212a8f933208c9e4cbf149df5a220601d8d6f b/fuzz/corpora/bignum/40f212a8f933208c9e4cbf149df5a220601d8d6f new file mode 100644 index 0000000000000000000000000000000000000000..26e2d2bc2934d969b9bbb07ce790a638b8e878db GIT binary patch literal 152 ZcmZRPWBLyT3;+LO_?5!LW5qKF004@?5|;n~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/415a45bfec26dd13dad64d02b434409a26382f28 b/fuzz/corpora/bignum/415a45bfec26dd13dad64d02b434409a26382f28 new file mode 100644 index 00000000..82a601bb --- /dev/null +++ b/fuzz/corpora/bignum/415a45bfec26dd13dad64d02b434409a26382f28 @@ -0,0 +1,2 @@ +:ø +Èÿÿÿÿ\: \ No newline at end of file diff --git a/fuzz/corpora/bignum/41cee39eb76192d52c9f84f08e14f7c2e6533f9a b/fuzz/corpora/bignum/41cee39eb76192d52c9f84f08e14f7c2e6533f9a new file mode 100644 index 0000000000000000000000000000000000000000..1c5238c701444b5f93383cf2b4a183bbd9d0538a GIT binary patch literal 257 zcmZQ({?FX-g+YOV5Qu>&_>lrt_&?=8!;1e54Ez88&z1dO{~s#+3t`T`|Ns9pFqrPB zUt0hF`%;)b7=UUx%f-*n|L@*^1_rJUkosfCLXRB-F^~OU_+Rtab%+1|eg2;bJpj{& d1^mYWn9BdNa4=w#W?-mqTiUji&70x>OaM;;V(9Uq}Ml6e#9Kw+Q|9|xU{|^99z&?-w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/42c8af90063a5a1eea87c7a6cc07f3171f720d6f b/fuzz/corpora/bignum/42c8af90063a5a1eea87c7a6cc07f3171f720d6f new file mode 100644 index 0000000000000000000000000000000000000000..5286f11288f942c6d79c5ffd5e7a4e09e27c6c90 GIT binary patch literal 140 ScmZQ(iB#DC{{X`v00#h;wgbNa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/42df56db836e01acc96da7c7871c3675bf77a835 b/fuzz/corpora/bignum/42df56db836e01acc96da7c7871c3675bf77a835 new file mode 100644 index 0000000000000000000000000000000000000000..71560be685146ca08c7dd727608b340961819bad GIT binary patch literal 16 XcmY%N{#U=zn<>xf-(Lo;|Nj*MKL-cg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/42e4bd416880c6ea560bf3e221377c13f774ff4d b/fuzz/corpora/bignum/42e4bd416880c6ea560bf3e221377c13f774ff4d new file mode 100644 index 0000000000000000000000000000000000000000..e34a2fec1cda8bd32abea16b9dd82ac590263310 GIT binary patch literal 149 QcmZQ#o;_Rp|KI`)0Bzlm*Z=?k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/430483a9d2492af839eceaf169f5303a1c22d0fa b/fuzz/corpora/bignum/430483a9d2492af839eceaf169f5303a1c22d0fa new file mode 100644 index 0000000000000000000000000000000000000000..f30340feaa2072071c155b560f12d094ab7c7925 GIT binary patch literal 101 mcmZQ(X8z9n9}Ir{`0;}Q3^I15?cTO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/43c3a255149f17d81946353a3959d24df52d0e07 b/fuzz/corpora/bignum/43c3a255149f17d81946353a3959d24df52d0e07 new file mode 100644 index 0000000000000000000000000000000000000000..c9b379cf036bf3540d3425ffb59962b46015bf34 GIT binary patch literal 202 mcmZQ(`Om<}&+wm>f#!e_VuLzq7B!$N2kVEL1qO_cU>X3&dIK#0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/43dce8709e242b7766ce40259e6e518264091c74 b/fuzz/corpora/bignum/43dce8709e242b7766ce40259e6e518264091c74 new file mode 100644 index 0000000000000000000000000000000000000000..fd2e7c186915099c23bbfcf2d80b3aba507927b6 GIT binary patch literal 132 ncmZSP`p?L~VEz9;10w@Ez!X6MO!b(mAtK)pnwStwB>jv47+|NnnMfQ11S{Qv)-Wzl~{06ab!aDg-e0A2?I?EnA( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/46999e4f45ca34500f3e3dff127bc960e47f2212 b/fuzz/corpora/bignum/46999e4f45ca34500f3e3dff127bc960e47f2212 new file mode 100644 index 0000000000000000000000000000000000000000..b24d4c2262440f53e9b578b57c26931732c05163 GIT binary patch literal 40 ycmV+@0N4Ky4BE}{+uoo|oOW0clHiaRL_PK?x+o-Kmbo7aYNbh%p)P$}GzEK;Ax1v@*p`rAky?dDj;9oTj Ikg(POKFcZRp8x;= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/47e47fecd21a2c754595e986a51171f77cb96f32 b/fuzz/corpora/bignum/47e47fecd21a2c754595e986a51171f77cb96f32 new file mode 100644 index 0000000000000000000000000000000000000000..8b6710576db3831dfef36d9e372e201ee82e7bb7 GIT binary patch literal 64 zcmd-wQ~a^%8f>jzfA$EdT2y%pgm6dhKF0?XOTimQeP&f!O z5+9Ad-v;KNhDVq#=;MtBq0h^gwZh4oS+gaj6_O~+Xs3XxDu!xL{5K$uKXE_m<@}yh z)M{Sm0KM^bbD(o>AJ745ks}}V2SHLXv|Mz^2aRD!Z@P@nX|X-tW{nld;Ppa8qzy!1 F_5`M4v(f+n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/48d42bc6b1acf00b03c8cb471811dd5cc7368a7b b/fuzz/corpora/bignum/48d42bc6b1acf00b03c8cb471811dd5cc7368a7b new file mode 100644 index 0000000000000000000000000000000000000000..167d1eb4f90535082b7a1163b508fec99e0cea82 GIT binary patch literal 150 gcmZRUiR55hX&uYJz`)3$$iVRb|Ns9C%nSnz03+}PJQ3;;o=Kmkc$P^yM-BTd0ySy<#jlpFr%M+!X@^J^4 S1T;Os)Lr_Y1PI(aL45%$ekWf5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/498a834ab25b440c3bba77d965ead8caadcc2640 b/fuzz/corpora/bignum/498a834ab25b440c3bba77d965ead8caadcc2640 new file mode 100644 index 0000000000000000000000000000000000000000..efba9922d402f236eace8f0f46e65a5d306fdb09 GIT binary patch literal 94 zcmZSfI`yCT{{*cKEQXQ)85uNK|9^x5F20Wcg`NL<*f=_ladrIv|DWO5F|FA@7#M#1 vC@U)~`|*Rp>Ic_}|NsB1{r~^}2ba2&m6qH=gRh;O%>OmMR2_11`hOh&m@_mD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4999193d6ae6fb7e3d7a0c679b5a84eceb9a9627 b/fuzz/corpora/bignum/4999193d6ae6fb7e3d7a0c679b5a84eceb9a9627 new file mode 100644 index 0000000000000000000000000000000000000000..11c359a7e8b4f2ffe21da55129c817fe22cb77b2 GIT binary patch literal 233 ocmZRU6=h&tuJ!-_|NjgO3?K>w7?v+*00RMr00?7fgMa`A0Dd_SN&o-= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4a7feb5e7651b3bbd32826d0a8144732d3d497cc b/fuzz/corpora/bignum/4a7feb5e7651b3bbd32826d0a8144732d3d497cc new file mode 100644 index 0000000000000000000000000000000000000000..74e01babf3d62ec86a27d92183d7a52439fda482 GIT binary patch literal 152 gcmZRUiR566wO+}1o0VMJt%pn%|F#P}jUnnb;>G%KtjQ0P* b0GnQj%zqTQ|Nj^m7$P|tBF`}R{9p$F;p8n% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4b0ccfac9808148aff8b1f8cc251bd77479ccc3e b/fuzz/corpora/bignum/4b0ccfac9808148aff8b1f8cc251bd77479ccc3e new file mode 100644 index 0000000000000000000000000000000000000000..b57ad43af47ea24978aaa9d49c05e956bb59e79e GIT binary patch literal 133 RcmZQ#{!d>Z2m%bK007MLr~lll Z{|yWb7#J8B7#SE?m?{|^1gyotRQ><|tPBhc*4RKc)IzWv WSoQz^;#^P$dEhs8Z7|#a{|5ja$DU3A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4c6c50b3d50d94b6c59711122c004860dc9b8d1e b/fuzz/corpora/bignum/4c6c50b3d50d94b6c59711122c004860dc9b8d1e new file mode 100644 index 0000000000000000000000000000000000000000..09844604f70aa602e8ec6287d095b4984a91984b GIT binary patch literal 80 ecmZRT{u>~mZe|_(yWj!?8VCpoV6a9LBLo1ETLsww literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4d1cd6ef59f645b9c4f6a4b1d7eed81d1702b13e b/fuzz/corpora/bignum/4d1cd6ef59f645b9c4f6a4b1d7eed81d1702b13e new file mode 100644 index 00000000..ed7104ab --- /dev/null +++ b/fuzz/corpora/bignum/4d1cd6ef59f645b9c4f6a4b1d7eed81d1702b13e @@ -0,0 +1 @@ +*únAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/4d2127ee9e7d595b58e360c84a6723f91bb9e360 b/fuzz/corpora/bignum/4d2127ee9e7d595b58e360c84a6723f91bb9e360 new file mode 100644 index 0000000000000000000000000000000000000000..b784d7258c3a1c8cd3ae86e9ae5af20470579faf GIT binary patch literal 126 zcmZQ(W@hI24+cMe{P@8D1_B^52f`)>AnSMXI@RIS$#9JQr&G;;w*MRq93T@kH0pc* R_xW&vP2)Rr84Uhg0{|}JCCdN+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4d4fca7e00c64df2a849780acfdc0dcf010b4cd8 b/fuzz/corpora/bignum/4d4fca7e00c64df2a849780acfdc0dcf010b4cd8 new file mode 100644 index 0000000000000000000000000000000000000000..b659dc26917fd1841a5e5e4ea47172be8317edb5 GIT binary patch literal 127 YcmZQ(i)8u_2MlBam;pp+XF^c}0C`9~e{&oQ2e0s;Mz?SQfBri` MRiG;fMHj#Z0L=uwHvj+t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4d92b25a7e9872d50e77d3bd026f8e084991248c b/fuzz/corpora/bignum/4d92b25a7e9872d50e77d3bd026f8e084991248c new file mode 100644 index 0000000000000000000000000000000000000000..73a484a1370eec2668b48960d73a3147f849d65b GIT binary patch literal 434 zcmZQCzq5r*s!90Wi|Ns9tU|?VX(P+Q`EQtje%#)Lo hlLHwC2Fx;%42-eX`U3?Fv|uj51sZTk&UcE{{R2q8Y;!W005_@Qf2@E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4dab18090cddbd8463d93ce60886537edd17edbc b/fuzz/corpora/bignum/4dab18090cddbd8463d93ce60886537edd17edbc new file mode 100644 index 00000000..16d6b2a6 --- /dev/null +++ b/fuzz/corpora/bignum/4dab18090cddbd8463d93ce60886537edd17edbc @@ -0,0 +1 @@ +JÊÆBˆÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/4e376522ea32e46bba92fa328d824e8483ed7a79 b/fuzz/corpora/bignum/4e376522ea32e46bba92fa328d824e8483ed7a79 new file mode 100644 index 0000000000000000000000000000000000000000..54503609056340b7c70f5606be24dc367c4db5b6 GIT binary patch literal 200 zcmZQ#Qe@Hm&pLNXP&GAr?c#{{Lt2`N1IWb?E;OtN**}|NrN7sylV+(5X`l o4F3-?%yjDf&jwO>>g%<>nb)tYi;9Yh{{R2KgC+9+*Fpvc0Fp5|MgRZ+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4e3d476558837c641fe298009de7b88605b4b488 b/fuzz/corpora/bignum/4e3d476558837c641fe298009de7b88605b4b488 new file mode 100644 index 0000000000000000000000000000000000000000..5265107e3e46db2966cad2eb5894d64183c8164b GIT binary patch literal 169 gcmZRUiR5sMwO+}0n-o-qyPW_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4e4e988be06ba208cdf0ce84a360fac1bc855632 b/fuzz/corpora/bignum/4e4e988be06ba208cdf0ce84a360fac1bc855632 new file mode 100644 index 0000000000000000000000000000000000000000..464a956e36bd9c43e8f382f24079491ed4cfec44 GIT binary patch literal 109 scmWgV`VR%aVT}L(QP>O+z=$Lb0aoGvkN^JiC?iID-b@&%e>%y^jk?B9^VpQP%KWKDgd~1SDhQw}D79 Ovj_i#M>Cr)UVi~8@uBPh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4f0877170869b0b813943b84f02023845411e5d0 b/fuzz/corpora/bignum/4f0877170869b0b813943b84f02023845411e5d0 new file mode 100644 index 0000000000000000000000000000000000000000..ca94db0c3288f4df18e0eaac6c7fbb8e4d1e35db GIT binary patch literal 55 tcmb2u)cmVZ|NsAA1~AY9lmGw!|KDo09U=q*5Mc%ehKB$3Y>e6rEC9Ub4FLcE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4f19b2a777f71508520f916ea9a71744f5f8a2b3 b/fuzz/corpora/bignum/4f19b2a777f71508520f916ea9a71744f5f8a2b3 new file mode 100644 index 0000000000000000000000000000000000000000..ea8ae41bdb985635766eaa38140c49ee6079ee4f GIT binary patch literal 111 wcmZQ(`Tt*wkpT?;LjjD#ZeReBU|?WiY-|8gU;;ZpQVccc4+FyuBmmL|0G8(=ga7~l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4f5b854cc54fc0da48b782c62f7b387398cb9a51 b/fuzz/corpora/bignum/4f5b854cc54fc0da48b782c62f7b387398cb9a51 new file mode 100644 index 0000000000000000000000000000000000000000..a84bdcdcd008b590966825287f164fe42c7b8fc2 GIT binary patch literal 169 scmZRUiR55hX&uYJz`)3$$iVRb|Ns9C%nU3HV6YAoKqTl3EEyOW047Bf3jhEB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4f856fbc162fb1d1035ec5a86c11e78a11bd8f42 b/fuzz/corpora/bignum/4f856fbc162fb1d1035ec5a86c11e78a11bd8f42 new file mode 100644 index 00000000..ea2c8586 --- /dev/null +++ b/fuzz/corpora/bignum/4f856fbc162fb1d1035ec5a86c11e78a11bd8f42 @@ -0,0 +1,2 @@ + +ÿÿÿÿÿÿÿÿûÿ*ÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:WÿÇÿÿÿ:WÿÇÿÿÿÿÿÿW' \ No newline at end of file diff --git a/fuzz/corpora/bignum/4faa799784b7025b0c32e9828f03d61401844b79 b/fuzz/corpora/bignum/4faa799784b7025b0c32e9828f03d61401844b79 new file mode 100644 index 0000000000000000000000000000000000000000..36572ce3bff3e51959b66ebf817b1a7d733bb73d GIT binary patch literal 64 vcmWe=FkoO{a$vBImHr)&bwP#!3`7|i7#a+|{r~?T!e?lJ(onz%V=w>!o@oh? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/4fbcc55803276eeab8e263c93d860f70b989338c b/fuzz/corpora/bignum/4fbcc55803276eeab8e263c93d860f70b989338c new file mode 100644 index 0000000000000000000000000000000000000000..e8e6bc29e0afd8a240ce2fdbac9d4a7863d129e4 GIT binary patch literal 111 rcmZQ(`Tt*wkpT<@7z_*`ECz=EPyps5gz*3*MNqwe7#MCK0gzq*_%9M1k}MK7nk)9Mh1qCz7DPb{~3OP#r}6dz<&nKV;~lY_WHs5|2{+( d6EHG>fdGR6@Bicf|NplN|8D~W>Nb=90{}3HM<)OP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/505c2317e068228df5b37054f3446ca82580f8d6 b/fuzz/corpora/bignum/505c2317e068228df5b37054f3446ca82580f8d6 new file mode 100644 index 0000000000000000000000000000000000000000..c7f0b0445d7f803b759cc655290dd32dedba261a GIT binary patch literal 259 vcmWgH%=4cB5My9q`2Sx7yTWTA%~J`OKo!8i2Qh{L8z9C8m;wLQQB?x~f?MB? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5075f2ec95fcd21a7e6dffd9c3e182cdbb06db5d b/fuzz/corpora/bignum/5075f2ec95fcd21a7e6dffd9c3e182cdbb06db5d new file mode 100644 index 0000000000000000000000000000000000000000..1e2d0b21cd5d06f3c447fd2126137c9457d602f0 GIT binary patch literal 126 ucmZQ(h5>FaM%Mof6oLN`z;y{>&PFa-E)WkS!|?yV;zmXW1_oIlC;$M|QWZD= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/50e7480d24c046b696fc9783bb2c549d17c2fd25 b/fuzz/corpora/bignum/50e7480d24c046b696fc9783bb2c549d17c2fd25 new file mode 100644 index 0000000000000000000000000000000000000000..7a401fb176a08a9a8707016b48d57de11c979e47 GIT binary patch literal 1157 zcmchVze~eF6vy91uq9aHztF{|fj}2QDuQ&WNQF4KxWrlP&_6(kxLB|y;OOMwf8f?h zDK~V{%}v3sRiY;EyJ>sQ4KY?!9;4_wIWqgl0JYO@X64{eTkyB&BoCM9j>z z1i)rTVd))#Esm{X&5ZD@!XAnvP$A?Dxu8-ow&<;^fG z3Cr?`97d{iiFOo#C!e&Jp?C=!XOGJF z@zXVOdjOl+23TD_)T=B@DP==;!7a3Fr|R61oLHC*tn_+2zb4@fe@ZarMv3S+YG}lM sr4X#rqE3mY8n^Ixh|4RwaX`30UbmsKg6RN7p{TysbCm9kIh}G5`Po literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/510932b3b619cfe77e28983ae4e7cf862de086fc b/fuzz/corpora/bignum/510932b3b619cfe77e28983ae4e7cf862de086fc new file mode 100644 index 0000000000000000000000000000000000000000..35baf06f56ba064e2921789eeb879a11f0416274 GIT binary patch literal 127 YcmZQ(i)8u_2MlBam;o5taY{e|09%zBO8@`> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5136e0873a549e75222195649e2aba905f36f343 b/fuzz/corpora/bignum/5136e0873a549e75222195649e2aba905f36f343 new file mode 100644 index 0000000000000000000000000000000000000000..c37044a683213bc5e65d5b768fc5339b1a3797ca GIT binary patch literal 160 qcmZQ({?F3D00tZo3Joy9`Tzg_{}1QT5**W-{eyww$N&F|(mw$1T?{<{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/514fc5ac23ea84c9aa1ba935f8575f9e309b68f3 b/fuzz/corpora/bignum/514fc5ac23ea84c9aa1ba935f8575f9e309b68f3 new file mode 100644 index 0000000000000000000000000000000000000000..8712cc64b5d106558878581cbd44fd51c18630a8 GIT binary patch literal 157 XcmZQ(iB#DC{{RD#z>7$AQ~?J7>2U-J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/51a51ed3821ee373cfed0fc0b267a9079f213760 b/fuzz/corpora/bignum/51a51ed3821ee373cfed0fc0b267a9079f213760 new file mode 100644 index 0000000000000000000000000000000000000000..427070219d89032a8056a47dd46e82277cb87d57 GIT binary patch literal 645 zcmZQ%{*NDU;Q$O!0F_q9p$scvVxB!)6Th`sfrO$4SAEC-{r~^}|M%kuRwYCOh8&m= z2m^?rKYsl90Z}UeqHyc4f}0o`8v6hLe+CAq2_P1OQ|EtnJ`M&Bup-SWhyVW_t|Pfx z7NP+M2nc`~rSVMTzt(q<#`phKK$HfIhZW#34+IK77BH2w;88#ffcOm#z;58@|IY{) NK?1h6wjdrt4gew)19SiY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/523812bd98f2c67a37522b8018011fe273d99d15 b/fuzz/corpora/bignum/523812bd98f2c67a37522b8018011fe273d99d15 new file mode 100644 index 0000000000000000000000000000000000000000..7c89e72ecb43087fb93a68ef6ffa9afd50cc74e1 GIT binary patch literal 152 ecmZRUiR566wO+}FMct{r_)} wGy?-%(f|L8k=V$9fq~&GG9M2R1ObSf;6{VFAiJ0fxwIG|9?S%g#i`(|Noz5(SJn%I=T+z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/527fe821371d44a90baf09440689f2b45dad761c b/fuzz/corpora/bignum/527fe821371d44a90baf09440689f2b45dad761c new file mode 100644 index 00000000..db651b94 --- /dev/null +++ b/fuzz/corpora/bignum/527fe821371d44a90baf09440689f2b45dad761c @@ -0,0 +1 @@ +³öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/529ba8f3834a042726e069a863b0a7d0bcb21b8f b/fuzz/corpora/bignum/529ba8f3834a042726e069a863b0a7d0bcb21b8f new file mode 100644 index 0000000000000000000000000000000000000000..5c3c1bc46f83267c5ce7e9bc178597c619e1e705 GIT binary patch literal 63 WcmZScAPq1;z<0=5@e8tCLO`9t=TzYmiHiwBT_ZsCeF zjSHA#-2&nLN23*-NLhH1b_0kAyLo|UH-NC-YQ}7>y&>+p&UR}8)v@7TX3&fo^Qscr zmot$~*%Nt^ndH!bO2tz-RNzBZq#DIhHM3WGPNJ|WQB z{6C+83d_fcPU9sZx&mKwYI@^IA7plJ+&@BaWq))g@T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5408595f675bfa026853272d5fa11891591968c2 b/fuzz/corpora/bignum/5408595f675bfa026853272d5fa11891591968c2 new file mode 100644 index 0000000000000000000000000000000000000000..d965aaa53140fc9193c2d485b7c9d0539732f35f GIT binary patch literal 23 fcmd<*=i|~^+O~9Qpw|EY8n)jV|MM|2FfafBUvdY! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/54807ff333f91299dc9e7e535840613d0ce25451 b/fuzz/corpora/bignum/54807ff333f91299dc9e7e535840613d0ce25451 new file mode 100644 index 0000000000000000000000000000000000000000..60736d3c8fe4d659d2c2bcf43796bde32aebdb81 GIT binary patch literal 120 zcmd<$()#~jlU3pW|IlN{xH|s-KgQcIx#K?=a4}E;1TZi#HZc94(Io$0KtSN{|Nnpg JGB9v4004Qz8l?aL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/548ea4993d4b03d7d91f79bd2da4051fcc229f97 b/fuzz/corpora/bignum/548ea4993d4b03d7d91f79bd2da4051fcc229f97 new file mode 100644 index 0000000000000000000000000000000000000000..b23297439efecca5cec73d7b2541238b4f3bd7f7 GIT binary patch literal 127 VcmZQ(i)8u_2MlBam;oef2LO0#5>o&G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/54f65c915ffb78ec4681db6fa409ca1850c03df3 b/fuzz/corpora/bignum/54f65c915ffb78ec4681db6fa409ca1850c03df3 new file mode 100644 index 0000000000000000000000000000000000000000..cc6612a56d999c12208a17776a440cf49f24f72a GIT binary patch literal 208 lcmZQ(W@cWuZr!>Q41*ik+S=MOFfcHJT>1b1|NppL3jkZ-2z~$n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5505e32ff695f06c4a6fc4777cbc0bfe75d9031f b/fuzz/corpora/bignum/5505e32ff695f06c4a6fc4777cbc0bfe75d9031f new file mode 100644 index 0000000000000000000000000000000000000000..011b90612c87aeada419637b66715632c0481422 GIT binary patch literal 120 XcmZQ(W@a|{&ww8glE)1=aY+FH;o$;A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/552e8406c5bd74fd6885de0850872ba227d1802c b/fuzz/corpora/bignum/552e8406c5bd74fd6885de0850872ba227d1802c new file mode 100644 index 00000000..d0d208af --- /dev/null +++ b/fuzz/corpora/bignum/552e8406c5bd74fd6885de0850872ba227d1802c @@ -0,0 +1,2 @@ + + *“ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/552f1a4e8c09b4e02a4ceb041866bab06937f68d b/fuzz/corpora/bignum/552f1a4e8c09b4e02a4ceb041866bab06937f68d new file mode 100644 index 0000000000000000000000000000000000000000..84850b316937120542a2e8ab682a90a50590d945 GIT binary patch literal 124 zcmdHq)$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/55e49eabc1d05f9bb224a7a446a40ac9f7d73d22 b/fuzz/corpora/bignum/55e49eabc1d05f9bb224a7a446a40ac9f7d73d22 new file mode 100644 index 0000000000000000000000000000000000000000..573e37f88d2e367b5e6d62e6b05bbad37b867c60 GIT binary patch literal 74 zcmd;O^*0>xb dqh-y>$;rv_ijz~=z+h^BM$-AZ<$v$uJu! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/58e81a89e23337479e81b2f9c51f36ef339f90a6 b/fuzz/corpora/bignum/58e81a89e23337479e81b2f9c51f36ef339f90a6 new file mode 100644 index 0000000000000000000000000000000000000000..041ab3b6adbeb0eef2d4c8cdc7f35f0d2cd46349 GIT binary patch literal 258 vcmWgH&GR1*5My9q`2SyIGd4wMLE!&2knX8?jKBjl@W|l;4A=lJ#l!#rFBjo{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/58f0cdc55c23aa628b19b473be923496e8a7ab3a b/fuzz/corpora/bignum/58f0cdc55c23aa628b19b473be923496e8a7ab3a new file mode 100644 index 0000000000000000000000000000000000000000..265bfa918016b17fd05553f65ce54c3519c6df9c GIT binary patch literal 1155 zcmcJOJxc>Y5Qb;{;9#4RtHkcATsl!KayC{LB6fD?Kd?z*sbCY5Mr>sYtDyfvOd%p7 z*eKYfwG%;bP~?@_y&RECI8pKx%g*fV%saEJF~*qlap>WHxHsf6L^XN=aUb{+tN zO(>*>Uhr1=?&O*JRf#dmoa|D=e*!@2(<$=_`Z3V$$F{wPWD&iCD2g_oU~UX)!Bp(E z24=1pGpEeV&&*tlPnl0RVWtJBlU@9pb!?4rDeG=^)R^%x)YXHQm?29fsd$OL!wdg* z@!O*VfE(tvgUE`=q0YA@BJH!QPSsrUv|eZdK=rV&eo&Qg6xu=t^y;Fg)~zLik|$?( zu&E{pTHR*zGI5dnfkGJk6&z=GOJ=&`$63uR$gFp` Tt>0HaIYjbl&Z&x_QN{EP9To0w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/58fc5cf8b1cc41b18d7dc52091b7c0e7a5f07bc5 b/fuzz/corpora/bignum/58fc5cf8b1cc41b18d7dc52091b7c0e7a5f07bc5 new file mode 100644 index 0000000000000000000000000000000000000000..121d3a62ec1442fdd8025b1e3b868a89c16269b7 GIT binary patch literal 250 zcmZQ#>R!auIB)W#N00tHd|E$!`l;SOfByV=D9=C&Q1{0K3=IC*g<(Jd#Q6Uo#w7q2 PF*V{+f!!Jcwle?#?Sm_F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5929d725fc8ea293ce05aa2527b778af0bf8a31e b/fuzz/corpora/bignum/5929d725fc8ea293ce05aa2527b778af0bf8a31e new file mode 100644 index 0000000000000000000000000000000000000000..a7c049752b1de6312de7508c605af313b6ac87ad GIT binary patch literal 580 zcmZQ(XJKd8UV2~imjg5Nf9C)Hum9Kjj|Ldf_?Up9c`pkC14AUU5(7U21H*U2NFxSy z1_lNOUVbjHaST6x{P@A3_W%EXE)Za6XXoN#2QyKD^$!y)fUV>D_3I2Bk^jFIf(*q3 zKe+zq?sivqveLqED;K6~Nd~8I1Az*A#{d8SzyAE~8^~BrOz^)S?%x0Z!@;2f1B^UW p0l59c0+zA?0k0pt|0i&DSbITLgSZR~?{Vv8?gY!h+=?5V2LM{PBT@hW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/593498aa5940ba0052d6dbd4a70aff56612eb7c7 b/fuzz/corpora/bignum/593498aa5940ba0052d6dbd4a70aff56612eb7c7 new file mode 100644 index 00000000..cbc09e04 --- /dev/null +++ b/fuzz/corpora/bignum/593498aa5940ba0052d6dbd4a70aff56612eb7c7 @@ -0,0 +1 @@ +Jø':‹6 \ No newline at end of file diff --git a/fuzz/corpora/bignum/599207807da0ee473781b708eeb9c87fe445dc00 b/fuzz/corpora/bignum/599207807da0ee473781b708eeb9c87fe445dc00 new file mode 100644 index 00000000..7c7c4f90 --- /dev/null +++ b/fuzz/corpora/bignum/599207807da0ee473781b708eeb9c87fe445dc00 @@ -0,0 +1,4 @@ +!ˆ ( +Åÿÿþ ( +Åÿÿþ ÿ ÿøøÿÿÿÿ +ÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/59bf2f5e14bb4151f7089fbae0c9381cc64c9ca3 b/fuzz/corpora/bignum/59bf2f5e14bb4151f7089fbae0c9381cc64c9ca3 new file mode 100644 index 00000000..ffdef2d3 --- /dev/null +++ b/fuzz/corpora/bignum/59bf2f5e14bb4151f7089fbae0c9381cc64c9ca3 @@ -0,0 +1 @@ +qñoÿÿ* \ No newline at end of file diff --git a/fuzz/corpora/bignum/59e57132d8b34806720fd38b717205a06589aa8e b/fuzz/corpora/bignum/59e57132d8b34806720fd38b717205a06589aa8e new file mode 100644 index 0000000000000000000000000000000000000000..2554868020ee454fa0e71c28cbb96e6a794cbdf7 GIT binary patch literal 146 Ucmd<$;$ma~14XU@2VjQ)0ExH-RR910 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5a41dae90a1328145620749f7c64a92ef0adf16f b/fuzz/corpora/bignum/5a41dae90a1328145620749f7c64a92ef0adf16f new file mode 100644 index 00000000..782cb26c --- /dev/null +++ b/fuzz/corpora/bignum/5a41dae90a1328145620749f7c64a92ef0adf16f @@ -0,0 +1 @@ +™€0ê \ No newline at end of file diff --git a/fuzz/corpora/bignum/5abbd742dc2091c59d66b92b8f7fc784cd7ae6ee b/fuzz/corpora/bignum/5abbd742dc2091c59d66b92b8f7fc784cd7ae6ee new file mode 100644 index 0000000000000000000000000000000000000000..05e72a35ffee5d566a19e82139f59749e7dca24f GIT binary patch literal 25 WcmWfruxI=a1q@sa42%pAzytuEp9szX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5b254ce022c62298185b9e23d125813258a228e4 b/fuzz/corpora/bignum/5b254ce022c62298185b9e23d125813258a228e4 new file mode 100644 index 0000000000000000000000000000000000000000..76d42db34625fd5ae2b2966c8ba913a2dcf298b4 GIT binary patch literal 133 zcmZQ(W@i5XpOxYN{~teo{9phB0T7u3VS@l87%?y~R5CCy)YKp(VBr5nl8gWY4UPYd N{~7-O|No!;KL7*08`b~- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5b7d93b7dd530bcd39decf4753cab3ea5b59d165 b/fuzz/corpora/bignum/5b7d93b7dd530bcd39decf4753cab3ea5b59d165 new file mode 100644 index 0000000000000000000000000000000000000000..b59aac7f4a408ba6b8465a214b3e10e15392f856 GIT binary patch literal 110 ccmZSPi%j?r2Mi1h3}Au;z|FwGu#iag0KZQRYybcN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5b9f1a45d0d9bdee99fcd95252a8e0b252524727 b/fuzz/corpora/bignum/5b9f1a45d0d9bdee99fcd95252a8e0b252524727 new file mode 100644 index 0000000000000000000000000000000000000000..961444857f79645f6da81ab9170db4627f16f055 GIT binary patch literal 290 fcmZRUiDY1mwKmXVAOIQ&$P)sCNdJE#0Kz)}#tSD% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5c10e0e276c8bd89a074239e3aa8af1b1f5009f3 b/fuzz/corpora/bignum/5c10e0e276c8bd89a074239e3aa8af1b1f5009f3 new file mode 100644 index 0000000000000000000000000000000000000000..037e6588356080696ba578b6c4609ca8b473bcb5 GIT binary patch literal 54 mcmd<$vi|WO3>d7j0nKBovwtu!2>t+p|NsC0;QIIf|8D@45F4KW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5c11d41bf5f10d45dd8eb05d06e222aad00ecb17 b/fuzz/corpora/bignum/5c11d41bf5f10d45dd8eb05d06e222aad00ecb17 new file mode 100644 index 0000000000000000000000000000000000000000..4a7d5b6e75fa82bff2186c37b04460daca10cc5d GIT binary patch literal 14 VcmY$?U|~_T{;&A||NnmsKL8_N2EhOT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5c85dbec76c2084f564eeed29b004c4ada23c08e b/fuzz/corpora/bignum/5c85dbec76c2084f564eeed29b004c4ada23c08e new file mode 100644 index 0000000000000000000000000000000000000000..ee5ad98d84451cddb218214c0bef7ffe4994baa2 GIT binary patch literal 10 RcmeaeuJwsHpdcWC0RZK@4!i&W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5d27ecf9834887c13f3b4850795e47139225cca0 b/fuzz/corpora/bignum/5d27ecf9834887c13f3b4850795e47139225cca0 new file mode 100644 index 0000000000000000000000000000000000000000..b6defce370cb5032350a22cb9354db4ade818401 GIT binary patch literal 150 ecmZQ(W@c9Z&j16AFa{X>L*daBJVgKo1_l6sYzzqi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5d6164e6a4f6dd9d80c3d53d7f8fb2592d2d6e4e b/fuzz/corpora/bignum/5d6164e6a4f6dd9d80c3d53d7f8fb2592d2d6e4e new file mode 100644 index 0000000000000000000000000000000000000000..a6d5165bf34da37e5968e4699317b8b33ce0d9a3 GIT binary patch literal 126 VcmZQ()?_pI4+RW303ms@0RV#!5LN&H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5ddc8aec941faa1593bd4e71f36c1223f3bda123 b/fuzz/corpora/bignum/5ddc8aec941faa1593bd4e71f36c1223f3bda123 new file mode 100644 index 0000000000000000000000000000000000000000..640f357f7f2eb28fffc8a134bd483b79efa178f1 GIT binary patch literal 32 gcmd;5W`=90iMn)@!+5b2G|NsB{e+1wH02E^tIsgCw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5df9848cf7e1bd98ed8751f09fe4c5b4c183c81a b/fuzz/corpora/bignum/5df9848cf7e1bd98ed8751f09fe4c5b4c183c81a new file mode 100644 index 0000000000000000000000000000000000000000..01a873e2805ea9047d127548072d1a8fbe49f07a GIT binary patch literal 117 bcmY%N{#U=z`>zu_JwV<+rvD6k|NjR7jM@wk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5e03c0d598a4d191cccf0490b3aadcbb708e2c43 b/fuzz/corpora/bignum/5e03c0d598a4d191cccf0490b3aadcbb708e2c43 new file mode 100644 index 0000000000000000000000000000000000000000..1a267a3c92f3a42a2455f8518ce2042f11881a07 GIT binary patch literal 125 kcmd<);^+GR|33rQBnA**0h1(y|JVSMDOjX8a!ry20DyTd4gdfE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5e24a81ec78649781ab09d9acfd4c3d712991cdf b/fuzz/corpora/bignum/5e24a81ec78649781ab09d9acfd4c3d712991cdf new file mode 100644 index 0000000000000000000000000000000000000000..5c1355f0aa167af7935615e3db1b6eb64c9db3a9 GIT binary patch literal 148 dcmZSPja0CVwGPtCuwG+rt;GNVtWbJj000u-1Iqva literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5e40d17c889fffe0f97cd1bb9572430f55b0e0e0 b/fuzz/corpora/bignum/5e40d17c889fffe0f97cd1bb9572430f55b0e0e0 new file mode 100644 index 0000000000000000000000000000000000000000..eb986861c11a39d4607a412513d32f0b5694913e GIT binary patch literal 158 gcmZQ(X8!;GKQl8cqxyda5cm(F1`;$d{D-;%0JL2Rv;Y7A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5f3c049f5dd220a05439fd2fd52ae4ad39d95e1d b/fuzz/corpora/bignum/5f3c049f5dd220a05439fd2fd52ae4ad39d95e1d new file mode 100644 index 0000000000000000000000000000000000000000..00de400a1f887aa977eafec83bc88a013d198830 GIT binary patch literal 102 zcmY+4xeWjy5W|A506JEnV;lxye_dz9SKua26f?6Fw8?O!tQg0IyFaDF>Ua2ln|hy; JS|cEU$OHl(7nuM6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5f8cf5adb02c00fd4d59304d78b40af060145497 b/fuzz/corpora/bignum/5f8cf5adb02c00fd4d59304d78b40af060145497 new file mode 100644 index 0000000000000000000000000000000000000000..f2d0f1b10f1b7f6d866ac31d62ff282cee818a59 GIT binary patch literal 277 ucmZP-_$wWt?qD7JJL^I~KmY>>Kq&@BFpqRVx;~JNr0c>4C^sb_fB^vMqz8ro literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5f9471181179b1e8063e2e3420377461155e6b4e b/fuzz/corpora/bignum/5f9471181179b1e8063e2e3420377461155e6b4e new file mode 100644 index 0000000000000000000000000000000000000000..0869298356a9bb764b54468d88d6312979dfb425 GIT binary patch literal 56 Zcmd-q3}yUp@n7Np|7t9NnE?l=1^{8g4?h3^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5fb5c697b9b2d9f65ba72369b812639afd46c905 b/fuzz/corpora/bignum/5fb5c697b9b2d9f65ba72369b812639afd46c905 new file mode 100644 index 0000000000000000000000000000000000000000..89e391ab71a17c6c80481b40a6b4ba4fa4e0a146 GIT binary patch literal 139 pcmZSPi%j@${T~Jx7#J87K?FK*01Jeo3!{TA5CL^`aU_7#Bmf+64I%&l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/5fc0486f53be98a89e3063dcf0515511c620a9d6 b/fuzz/corpora/bignum/5fc0486f53be98a89e3063dcf0515511c620a9d6 new file mode 100644 index 00000000..d36f7464 --- /dev/null +++ b/fuzz/corpora/bignum/5fc0486f53be98a89e3063dcf0515511c620a9d6 @@ -0,0 +1,2 @@ +UÆÆ +ˆÿÿÆ \ No newline at end of file diff --git a/fuzz/corpora/bignum/5fe8ebd795409f495a1456fed72e976852fa8b67 b/fuzz/corpora/bignum/5fe8ebd795409f495a1456fed72e976852fa8b67 new file mode 100644 index 0000000000000000000000000000000000000000..a634f4d9ef22a0de65794dfb758c8d55e5f19cec GIT binary patch literal 37 scmZSEz`?=!|G%O-=l}l>8~*?Q|Nnd;0|Nu&|Njg>6d4#m0{{O509IxcTL1t6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/60299491a306009121981c68269134e2e37c79aa b/fuzz/corpora/bignum/60299491a306009121981c68269134e2e37c79aa new file mode 100644 index 0000000000000000000000000000000000000000..a51f3b436ed9425c8e2cf2b6e2137149937f4438 GIT binary patch literal 40 rcmd;mvWm$r>A!-mBIAzp42%pQ5(MIF-gGW(7B1tJUBzUV%qRf>4Dbv| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6042ba735fee47ca30f872a1239d8cddab4b9a8f b/fuzz/corpora/bignum/6042ba735fee47ca30f872a1239d8cddab4b9a8f new file mode 100644 index 0000000000000000000000000000000000000000..c08a0b16b63326779864646d7eda6fc28607c1c5 GIT binary patch literal 8 PcmbPw^y{_0oeW_5T`N|Lb}G|Nr}+k@3IAf0p8A0QJcag8%>k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/61a97b8be7622a1a04e3ad77c74ff68982ea9b43 b/fuzz/corpora/bignum/61a97b8be7622a1a04e3ad77c74ff68982ea9b43 new file mode 100644 index 00000000..9d46abe3 --- /dev/null +++ b/fuzz/corpora/bignum/61a97b8be7622a1a04e3ad77c74ff68982ea9b43 @@ -0,0 +1 @@ +Løÿÿ}ÿ¥´ \ No newline at end of file diff --git a/fuzz/corpora/bignum/61cc67ff6eeacb581c76eac0a566e97dd892e058 b/fuzz/corpora/bignum/61cc67ff6eeacb581c76eac0a566e97dd892e058 new file mode 100644 index 0000000000000000000000000000000000000000..48fbaab41f635fbc9f2b607f24b579ba2494d8a2 GIT binary patch literal 33 jcmd;5W`=8k#5{|6TU{8Adu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/620c5306fd4e2de3d5c06838f2fdcb649c3efdf8 b/fuzz/corpora/bignum/620c5306fd4e2de3d5c06838f2fdcb649c3efdf8 new file mode 100644 index 0000000000000000000000000000000000000000..70caeebfe1ea6842e8984b9130cada0161c90603 GIT binary patch literal 64 zcmV-G0KfkyRXPa@3b7sk0ROQ80RR72rvN883Gx5{8~f}3`?9jKvPw$$4gdd;d50&+ W04e|l000303IG8C7$GQdmJa+`@fj@u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/620eb6e856afe12b59a2910701aef6fc14f84479 b/fuzz/corpora/bignum/620eb6e856afe12b59a2910701aef6fc14f84479 new file mode 100644 index 0000000000000000000000000000000000000000..71cb3924a211a0b5646dfd3dcc8d74e570528ca9 GIT binary patch literal 62 zcmV~$%MCy<002-9f+mLO#cu>Q5Iec{W)~xvqNDU8&wE|hBP5q2wVJ2IIPd57ku$tX Q$hlgW!b+-9aSw{|2VdVMt^fc4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6279710192b550ca788b6415e4eafbaa31f6d467 b/fuzz/corpora/bignum/6279710192b550ca788b6415e4eafbaa31f6d467 new file mode 100644 index 0000000000000000000000000000000000000000..0c9cb44510d9cf2f2357b7b25a7a30fb1c79a6c4 GIT binary patch literal 52 wcmdP=#m~d_|Np<)bN@3iu>5eeVqjok_@B%OqW=B=|DS<@0a<~A<}Ziq04ekpCjbBd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/62e550a44741308fbd2544c88f5aa5e4875b874a b/fuzz/corpora/bignum/62e550a44741308fbd2544c88f5aa5e4875b874a new file mode 100644 index 0000000000000000000000000000000000000000..979d39445163133f58a44db20d1d7e6bcd87ea92 GIT binary patch literal 131 kcmZSPi%j?r2Mi1h42mEE9XNmmLeYg0U<-nY1K>0Q0HUo7zyJUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/62e5825953e3c282b2952141999829d67cc6518d b/fuzz/corpora/bignum/62e5825953e3c282b2952141999829d67cc6518d new file mode 100644 index 0000000000000000000000000000000000000000..610c67e4d7cc6c1927abff870a21c9a73740cfe5 GIT binary patch literal 126 zcmdnPh=_7ubc0Y(N5*8d+re(Wea Qy0wYn-+vE*AO;2o0BFG?KmY&$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6365877928bd49550c917d2be5e0e3edcfb980b0 b/fuzz/corpora/bignum/6365877928bd49550c917d2be5e0e3edcfb980b0 new file mode 100644 index 0000000000000000000000000000000000000000..4c94c1092881c5af10ad9f7c3bc472d6bb079944 GIT binary patch literal 83 ocmWd&7lQ!}7=r-{V0z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/637c9460ee2fc36e9ce57f845de51a9382c01211 b/fuzz/corpora/bignum/637c9460ee2fc36e9ce57f845de51a9382c01211 new file mode 100644 index 0000000000000000000000000000000000000000..63708cec1c4c6587562da83ac5ec621356dfc7ef GIT binary patch literal 94 ecmd<*<>%7+|NsC0zaYRsIZy-}0Wxvne?RaOTVz13rf{Cmx?UbLPzdhu=X|ip!ZRhd>OFq(P-7>zOlWULQDf;(xs& zn~)Gl9jnlpGeZBLJYit?|Nr)zHw-Kc3~%1l*VorOFfbUsdGida87x#^-&J2957+ww aBDeC)nMBrg(n>;aK;RCDcyfjT!)5?AG-E9Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6480a37c7b175ca2ab6e83e6f953247a7b6cab2a b/fuzz/corpora/bignum/6480a37c7b175ca2ab6e83e6f953247a7b6cab2a new file mode 100644 index 0000000000000000000000000000000000000000..e038dc8b59f7bfd9e11b8e468b52cc47b30044bf GIT binary patch literal 12 TcmY%W!NBhA?d`4c|Bw~{8JGlQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6503adb4bf834fb91b9e1987a781495875328b77 b/fuzz/corpora/bignum/6503adb4bf834fb91b9e1987a781495875328b77 new file mode 100644 index 0000000000000000000000000000000000000000..e85c2522a98304e7b847cbb4147bb550d91b85ba GIT binary patch literal 118 bcmdV$RJxh0}E4S<*kkgaRqK``zmX7=t|t>fy}Yxg(!q%jgnk|e83-0^-t5&bpN z1VjRDT}+AgraSG#k-k``>0&;g7FkLuGn%DltxwgNT2QR!64R)*H=&c<)~M7w|?ynP(~gm&<>mit00Ff)9EMd&0aFqOAGlRu@by zzB9F2?CqVY#iXsZmWcX?XRjeDf_&$c8@K?Jqv>_ul2@yI)}ys{A}sjyAP9oV^fnwA z&iODPv|5M5%XlSja!K1<)uBcHu``8t>(1-4}lg_5%O_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/65b323ea7b6e641dec9283abb39ba9f439e386e8 b/fuzz/corpora/bignum/65b323ea7b6e641dec9283abb39ba9f439e386e8 new file mode 100644 index 0000000000000000000000000000000000000000..dd97a682cd0fe73aa82dd6451a7911d5cdfd783e GIT binary patch literal 32 ncmd;;UBzUV^j|?&k#Waa21W)31_uTP1_3q>X#wf||D^>0dU*!; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/66f9b45847dfb55ba58673b804f9afab414ff2a9 b/fuzz/corpora/bignum/66f9b45847dfb55ba58673b804f9afab414ff2a9 new file mode 100644 index 00000000..e725b4a6 --- /dev/null +++ b/fuzz/corpora/bignum/66f9b45847dfb55ba58673b804f9afab414ff2a9 @@ -0,0 +1 @@ +:øÿÿ*ÿÿÿý \ No newline at end of file diff --git a/fuzz/corpora/bignum/675e95ed8512b380227237ae346d38fda427482b b/fuzz/corpora/bignum/675e95ed8512b380227237ae346d38fda427482b new file mode 100644 index 0000000000000000000000000000000000000000..d9eed7ea8f0d8f20bbb87f143fb96710005e5dec GIT binary patch literal 64 wcmZQ&V_;=vRcB>oWmu=e%>V*3L4bjQK}BWe%$d`FLHKYm8^Qu>NSQek04>cHu>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6771c66378b9fcba09403bcf0f0213117a7b2f79 b/fuzz/corpora/bignum/6771c66378b9fcba09403bcf0f0213117a7b2f79 new file mode 100644 index 0000000000000000000000000000000000000000..0e232dff0e44a01c302ccef70e9939bca6e2769b GIT binary patch literal 171 TcmZQ(iB#DC{{X|F2Z{^;^BDsm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/67ada30479ca71143889a77534232a92c4111662 b/fuzz/corpora/bignum/67ada30479ca71143889a77534232a92c4111662 new file mode 100644 index 0000000000000000000000000000000000000000..21034dee476795c5eafab59a373bdc3ff366e2eb GIT binary patch literal 281 zcmZSh!TaOKj{nHuJ@Y>B-5zj*)vste!%;j#(;6(if0vi$$A*;M1y|6U#J g|5-QvP*l{g_Obf=|No5}|NsC0|KrEMWQd~w059ny`~Uy| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/685708aa20cf881abffe725dba3aeb8071247396 b/fuzz/corpora/bignum/685708aa20cf881abffe725dba3aeb8071247396 new file mode 100644 index 0000000000000000000000000000000000000000..11d9d8399d688e996b11144bb2e1e48a75b226ce GIT binary patch literal 148 ZcmZP-_{+e^00#e81q47?0|lV=0|3}~1N{I1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/68fe5831286b1d1e97e5dda0bf213358b9f432c4 b/fuzz/corpora/bignum/68fe5831286b1d1e97e5dda0bf213358b9f432c4 new file mode 100644 index 0000000000000000000000000000000000000000..de207bcd38bf21402c97345ec28ded32a3458484 GIT binary patch literal 273 zcmWg0b>OiMur|K0{r~^QjsO4u|3CD?2S_8f2_ndxKz5rHR-QpC5xj*qHkRTY0x50(Z7c;VVZnf`{0~-Q zyH0Lw*%2l(%OvrijZF#Yz#Ui>)a@Ie8(&@k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6b0e3794233dbb6802f3315f9de3fcb223e7a341 b/fuzz/corpora/bignum/6b0e3794233dbb6802f3315f9de3fcb223e7a341 new file mode 100644 index 0000000000000000000000000000000000000000..7418d3f6bca2377438fea30afe405438207b0c69 GIT binary patch literal 202 mcmZQ(`Om<}fB8Qv1I+;=#0GWJENVbk4%QDf3k(%7+j{sZ@AOPYoWMBXQ@@)_N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6d7bb5e6b3faddecf4e5ee7f29d62b3cdc19b0aa b/fuzz/corpora/bignum/6d7bb5e6b3faddecf4e5ee7f29d62b3cdc19b0aa new file mode 100644 index 00000000..5a5e37d5 --- /dev/null +++ b/fuzz/corpora/bignum/6d7bb5e6b3faddecf4e5ee7f29d62b3cdc19b0aa @@ -0,0 +1 @@ +jeûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/6d80a2304ddb46a4125974965e823908671f9519 b/fuzz/corpora/bignum/6d80a2304ddb46a4125974965e823908671f9519 new file mode 100644 index 0000000000000000000000000000000000000000..a7950d0d2c3c9a511b2e01e593dc1d32e9c9e636 GIT binary patch literal 31 ccmd-wQ~a?}_T_E{2#}Y3xm$K4*MArQ0JM4!djJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6d8281844c9b2c5856646f67555125b43080733b b/fuzz/corpora/bignum/6d8281844c9b2c5856646f67555125b43080733b new file mode 100644 index 0000000000000000000000000000000000000000..6c4ea2ecf6d3315b532c85e5d1560336bfbae056 GIT binary patch literal 14 VcmebI!N4AJ=ain-`x7Src>ymU29*E+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6de0d4b21c1c02377fa39d5406e1fd0b817be116 b/fuzz/corpora/bignum/6de0d4b21c1c02377fa39d5406e1fd0b817be116 new file mode 100644 index 0000000000000000000000000000000000000000..58d2cb23ffada8d3dd3e85d2f4a6d9f1e9eda303 GIT binary patch literal 1866 zcmY#sU}Q8Hiim;Pz+f;soB<;^+1U*sV3c8CK(#<%rDv!@BanE2FRF<*1q$#P1~UyG s17;4<0H0wn(?%IoOw0otm;+z@GcYlN3eHB1vXd%KGk8pN%BKJT03SK?ga7~l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6e1f49e6b62a03946dbe0952dd3bb8ca5b29fbd8 b/fuzz/corpora/bignum/6e1f49e6b62a03946dbe0952dd3bb8ca5b29fbd8 new file mode 100644 index 0000000000000000000000000000000000000000..867db6a93eac34ba969209e995b9c6f0ff584c83 GIT binary patch literal 58 wcmd<*y)ciTOY8st|NsAj01E>M{Qv)-AIyLX{Lq~1!+C&#VLwz-i-AEA0QFxMqW}N^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/6e8aeafbca00a864e8090bfb94cbd538ec3c9e5f b/fuzz/corpora/bignum/6e8aeafbca00a864e8090bfb94cbd538ec3c9e5f new file mode 100644 index 0000000000000000000000000000000000000000..36551ff1c4d649f6eb521d1a045d34b57a498928 GIT binary patch literal 64 zcmZSM)nty`X1?gX)%o-1FKQIA8B9sw{lGfkz+0Pc|Y- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/70df9026991e330667cca19dc9e830eb98c84d5f b/fuzz/corpora/bignum/70df9026991e330667cca19dc9e830eb98c84d5f new file mode 100644 index 00000000..dba675d9 --- /dev/null +++ b/fuzz/corpora/bignum/70df9026991e330667cca19dc9e830eb98c84d5f @@ -0,0 +1,2 @@ + +øøøøøøøøøèøøøœ \ No newline at end of file diff --git a/fuzz/corpora/bignum/70e9796845eb455ad731716a387f62eac023a6c2 b/fuzz/corpora/bignum/70e9796845eb455ad731716a387f62eac023a6c2 new file mode 100644 index 0000000000000000000000000000000000000000..7f9eba04e705d3b24738e8f4f43de8bd15daad3e GIT binary patch literal 135 RcmZQ(iB$Oi{{X`P0|2MH13v%& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7116b5c8a72a6dcaba2fbec69e5314f611e3bfda b/fuzz/corpora/bignum/7116b5c8a72a6dcaba2fbec69e5314f611e3bfda new file mode 100644 index 0000000000000000000000000000000000000000..8840837a74970a4eba1f54353162495aefd4a593 GIT binary patch literal 132 YcmZQ(W@a|{&ww8glE)1=aZ4cp0R0gHL;wH) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/712367b03ab9b5b2a4e940c6ee58a9970690aaa8 b/fuzz/corpora/bignum/712367b03ab9b5b2a4e940c6ee58a9970690aaa8 new file mode 100644 index 0000000000000000000000000000000000000000..5aeb90c3f4b64194ac0400e07f107e4f40f02352 GIT binary patch literal 159 jcmZRUiR55hX&uYJz`)3$$iTqB!r<^93K#|oAnXSKv2_s| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/718a9c062dffa15aefc6a7104cf6ed9b52f5f4e4 b/fuzz/corpora/bignum/718a9c062dffa15aefc6a7104cf6ed9b52f5f4e4 new file mode 100644 index 00000000..0fc0ce34 --- /dev/null +++ b/fuzz/corpora/bignum/718a9c062dffa15aefc6a7104cf6ed9b52f5f4e4 @@ -0,0 +1,2 @@ +bˆ +w diff --git a/fuzz/corpora/bignum/71c64721abadfbcccd4b95a43748c3ca7dbe9626 b/fuzz/corpora/bignum/71c64721abadfbcccd4b95a43748c3ca7dbe9626 new file mode 100644 index 0000000000000000000000000000000000000000..7f1ced7e5fd1584751d81d98ef7716f03f613a6c GIT binary patch literal 120 zcmZQ)zpu!?lwF@osFocB{{R2~e}YyF1M#2%s`UT=Lq8Y}or#Q$jEn#gXBd2bu>WWH WuN4E4`OonG|Nrj`|0{y5_yGXDeI;T5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/71f86068e3b76d9489044f9c21b31710bac7e4e4 b/fuzz/corpora/bignum/71f86068e3b76d9489044f9c21b31710bac7e4e4 new file mode 100644 index 0000000000000000000000000000000000000000..5cddadc2496b53c4ccf230ff3591faca7be091e0 GIT binary patch literal 36 ncmd;;UBzUV^j|?&k#Wa)21W)5U}EEt7Lfk`Us}N6zpMlRmsAK) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/72283bdeea9e68d29a23e0ac1f13622a03aa5adb b/fuzz/corpora/bignum/72283bdeea9e68d29a23e0ac1f13622a03aa5adb new file mode 100644 index 0000000000000000000000000000000000000000..3c7a7b7db5b40e6224b11f284031196d8e7b1fa5 GIT binary patch literal 35 ccmd=30RjvRVCu(Y1~6a*@&15_dp|hX0gNaW=l}o! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/72a0d8870999f16c4c42bd01b66c296c6ff3adcb b/fuzz/corpora/bignum/72a0d8870999f16c4c42bd01b66c296c6ff3adcb new file mode 100644 index 00000000..b2490e2d --- /dev/null +++ b/fuzz/corpora/bignum/72a0d8870999f16c4c42bd01b66c296c6ff3adcb @@ -0,0 +1 @@ +*!ôáAÿÛ0ÿÿ! \ No newline at end of file diff --git a/fuzz/corpora/bignum/72b076b94e699e5316417aac856cfe3ac7418fbd b/fuzz/corpora/bignum/72b076b94e699e5316417aac856cfe3ac7418fbd new file mode 100644 index 0000000000000000000000000000000000000000..6b945bf0fe26e1a0bd1def6eeb7b13cb39dbd061 GIT binary patch literal 29 gcmd<*FJk`R9J|oK+FHE9V8Q=g{}~`acJ=>10GC<{oB#j- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/72d1c7e3f642456b57b0d49cd78397a08d0428f1 b/fuzz/corpora/bignum/72d1c7e3f642456b57b0d49cd78397a08d0428f1 new file mode 100644 index 0000000000000000000000000000000000000000..ef78677652ff4823b808ba4d92b4b9898ba16abe GIT binary patch literal 125 jcmd<);^+GR|33rQBnA**0h1(y|D*u0=^Hn4O_Buwlt~=35P(?oA3MaNsKg0Ih%`@&Et; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/739417dd4666b8ac82a7e2ba13ef20de74029c8b b/fuzz/corpora/bignum/739417dd4666b8ac82a7e2ba13ef20de74029c8b new file mode 100644 index 0000000000000000000000000000000000000000..50730f1aa9d281de83fbd4987910b2599fac61bd GIT binary patch literal 148 ZcmZP-_{+e^!0;agRs{qw3@Cuw4*&#r2l)U1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/73972b7d320f97c02b2e20a8109151a0462e8875 b/fuzz/corpora/bignum/73972b7d320f97c02b2e20a8109151a0462e8875 new file mode 100644 index 0000000000000000000000000000000000000000..ae1af3b299120a011baac31893b73e2efea1cdd8 GIT binary patch literal 149 ncmWd=gMdD404j$c{KpAU^u>SxiU<@iFfcIu|NkFEL4h>@qS7%% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/73a1b7ba8a7ad42881226a587a3db5dbb30a4042 b/fuzz/corpora/bignum/73a1b7ba8a7ad42881226a587a3db5dbb30a4042 new file mode 100644 index 0000000000000000000000000000000000000000..c07e782ec39d6e62051e294ba095f82fd999b3d5 GIT binary patch literal 631 zcmd<$A^})21Tt{^|If(qkE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/741ac128afab3dff880c1682dbe2da477f854e41 b/fuzz/corpora/bignum/741ac128afab3dff880c1682dbe2da477f854e41 new file mode 100644 index 0000000000000000000000000000000000000000..5140bd52c2516c91bde5b67e4cedd3936d41acf0 GIT binary patch literal 61 lcmdU281OP#!8e0GW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/74591e0f0ca130871adb79d1e0f40863c2e8b65c b/fuzz/corpora/bignum/74591e0f0ca130871adb79d1e0f40863c2e8b65c new file mode 100644 index 0000000000000000000000000000000000000000..fd3e846f6c261a05e1de30c83a63005db8fec3ab GIT binary patch literal 148 ccmZP-_zwjyU%q^qbs-=ifMFm(07C!+0FBEId;kCd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7478083887e17c1e4851e5d369785657aafb0853 b/fuzz/corpora/bignum/7478083887e17c1e4851e5d369785657aafb0853 new file mode 100644 index 00000000..b94143f1 --- /dev/null +++ b/fuzz/corpora/bignum/7478083887e17c1e4851e5d369785657aafb0853 @@ -0,0 +1 @@ +²²²²²²²²²²²ÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/74870d66c54721f2b5c704241097597918709d3d b/fuzz/corpora/bignum/74870d66c54721f2b5c704241097597918709d3d new file mode 100644 index 0000000000000000000000000000000000000000..1cbada5163940125abf3756be2793e27e1c9b2e4 GIT binary patch literal 10 RcmZ?yVZ(WVfnooT{QwsA1h@bI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7491924b3f71413f75124e5d149d028e8db13fb8 b/fuzz/corpora/bignum/7491924b3f71413f75124e5d149d028e8db13fb8 new file mode 100644 index 0000000000000000000000000000000000000000..eaacc9c11fdcec2ca444f3e7d1ca4144e46d3dd9 GIT binary patch literal 37 pcmd<$n)F}xKLf)?1`uF8dUWGPuKysQ%JBd1|NmUFUjP692LL0H67m25 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7604ea59fa493ac6ee2bd0442dafddd4e09087bd b/fuzz/corpora/bignum/7604ea59fa493ac6ee2bd0442dafddd4e09087bd new file mode 100644 index 0000000000000000000000000000000000000000..142029df13397d1786bea6c1fbeffbea92c97dc3 GIT binary patch literal 95 zcmZQ(W@hI24+cLNFaT8I$B!Qj3{GCBI-EKgj=GW?CY3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/765baf81c7121731ba220215c3ef3fea4d2a7cbf b/fuzz/corpora/bignum/765baf81c7121731ba220215c3ef3fea4d2a7cbf new file mode 100644 index 00000000..ad3d7bb1 --- /dev/null +++ b/fuzz/corpora/bignum/765baf81c7121731ba220215c3ef3fea4d2a7cbf @@ -0,0 +1 @@ +JÊ!ÊÊ1ÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/7699281b13023f5cccf48d4a9bb9e263c68b94c2 b/fuzz/corpora/bignum/7699281b13023f5cccf48d4a9bb9e263c68b94c2 new file mode 100644 index 0000000000000000000000000000000000000000..9a68b70ff3bc865e02784b20372df743f377aa39 GIT binary patch literal 15 WcmdNiP-HY@bYNgO%)r3Fzytsf$N{qe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/76c679fef751503759197cca283165c50f0cfbe4 b/fuzz/corpora/bignum/76c679fef751503759197cca283165c50f0cfbe4 new file mode 100644 index 0000000000000000000000000000000000000000..709fcbfccb9d38c27a261d7ca80b889350faa4b6 GIT binary patch literal 128 xcmZQ(i)8u_2MmOO^^e~F{|gJ3`fNc_2{Qmi5CpJF6rL(v$nc+GX-h8y0|0!iC6WLD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/77009924388491dad67ff81b2ecf86c1ad21b6f4 b/fuzz/corpora/bignum/77009924388491dad67ff81b2ecf86c1ad21b6f4 new file mode 100644 index 0000000000000000000000000000000000000000..d7b13b486a93b353615c3a41c264306b6c894d97 GIT binary patch literal 181 zcmZR0uf@Q?;Gp@RkzbvU>j%3t6Z7oZivR!r(ERa(f#C-jOlANB#veZr@-UzQW1s?c jjo$zNo&Pg}G%}(}{fC&wz_x literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/774ac6983f66fcebace58e305eae3de033113982 b/fuzz/corpora/bignum/774ac6983f66fcebace58e305eae3de033113982 new file mode 100644 index 0000000000000000000000000000000000000000..fd6a9b49e54a00ddc1b4ce13183a1d23c7cf4068 GIT binary patch literal 64 jcmd;DjuQwnFfc4%uAnu!oO^- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7762a474cf87d5c037c10c6b645e9ac3d3cfa394 b/fuzz/corpora/bignum/7762a474cf87d5c037c10c6b645e9ac3d3cfa394 new file mode 100644 index 0000000000000000000000000000000000000000..e2635163cce22b8bed80460b3bb123ddbe9b4ffe GIT binary patch literal 15 WcmdN;oYBVCruapXP4UZe1_l5p@dWGu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/77c6b91e90d5db99cec831b252bce938b6079799 b/fuzz/corpora/bignum/77c6b91e90d5db99cec831b252bce938b6079799 new file mode 100644 index 0000000000000000000000000000000000000000..3894dcbc3171c3187e7f601e8136363ee8901eaa GIT binary patch literal 95 QcmZQ(W@c9Z&p;~x0Bl47GXMYp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/783773a5bcb1e6a4dfdbb131010ac010b4a233b9 b/fuzz/corpora/bignum/783773a5bcb1e6a4dfdbb131010ac010b4a233b9 new file mode 100644 index 0000000000000000000000000000000000000000..23f9e15530ff8dca9c0375c3bd7a0d00950af8cd GIT binary patch literal 56 zcmdtR6`=qC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7961d28681e014b4ea1ce45cdcb2c3740d7c516d b/fuzz/corpora/bignum/7961d28681e014b4ea1ce45cdcb2c3740d7c516d new file mode 100644 index 0000000000000000000000000000000000000000..f0ab124a6640b10079355e2c3f0d72aeeb250d34 GIT binary patch literal 249 zcmd98Ndz#07;9XuK)l5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/79921dcf20d14c789d969fd999e4075398063467 b/fuzz/corpora/bignum/79921dcf20d14c789d969fd999e4075398063467 new file mode 100644 index 0000000000000000000000000000000000000000..92036b2f78956a27192c72ae4080a99546d310a3 GIT binary patch literal 32 qcmV+*0N?*9`aswJDLVf|0S5p!#Q*sC_}|~(-}fmy|L}hQ!T{0Ea10u7ky8vm_9Mrmj;GyVV1a707n NKO+Mln&B8W0sy>2JtzPG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/79dab809e3d75871e8c31601141978662116d43c b/fuzz/corpora/bignum/79dab809e3d75871e8c31601141978662116d43c new file mode 100644 index 0000000000000000000000000000000000000000..617e80db9541ff84087397759fb3b353f97ce74f GIT binary patch literal 136 RcmZQ(X8zC8z%bCD0RYX?0u2BF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/79dcceba401ad6e22b8712749d40d2e427207122 b/fuzz/corpora/bignum/79dcceba401ad6e22b8712749d40d2e427207122 new file mode 100644 index 0000000000000000000000000000000000000000..1921f7b5dadb94857536d068b85b4c341b592e2c GIT binary patch literal 190 ecmZQ#o;_RhKTQC`UjoKXg8?k+>amDn00sb_v$J~u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/79dea6ae4e59be9bba5918e6204b4d8b62259bbb b/fuzz/corpora/bignum/79dea6ae4e59be9bba5918e6204b4d8b62259bbb new file mode 100644 index 00000000..b059ce6e --- /dev/null +++ b/fuzz/corpora/bignum/79dea6ae4e59be9bba5918e6204b4d8b62259bbb @@ -0,0 +1,2 @@ + +øøøøø!øøøèøŒøøœ \ No newline at end of file diff --git a/fuzz/corpora/bignum/79df0681f74ab45adc353e7e41bcd961d818486d b/fuzz/corpora/bignum/79df0681f74ab45adc353e7e41bcd961d818486d new file mode 100644 index 0000000000000000000000000000000000000000..31fbce904b5031875db39e3c53c3b7b9d375b039 GIT binary patch literal 32 acmY%V!NC6W|9=4n2(Yn%u@o3=KmY)Nx&{0I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/79f1330dadbe4e139b309799c6c900749e2282bc b/fuzz/corpora/bignum/79f1330dadbe4e139b309799c6c900749e2282bc new file mode 100644 index 0000000000000000000000000000000000000000..f43d9ce140c40b1beb325b9174643b4aa3c887ca GIT binary patch literal 159 zcmZSn$7R*=|G(G&|DB!xx&DJd?En80{{N3`04W7Cz`)bf)ARcO-ylJ-rmtZ0umc9BLN2YP LZA+I1re6dA=sIp; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7a0b6da388fd48b2c3e3be7a796f85599605d0f0 b/fuzz/corpora/bignum/7a0b6da388fd48b2c3e3be7a796f85599605d0f0 new file mode 100644 index 0000000000000000000000000000000000000000..99d06a54b46207828a9b5eb1205338e5b56b316a GIT binary patch literal 62 bcmWftN@e=}-w6ur7+@@%;Q#;q|KR`tdYT$> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7a104f787a0115a8e6d40b31e83bbc89b8fb82ba b/fuzz/corpora/bignum/7a104f787a0115a8e6d40b31e83bbc89b8fb82ba new file mode 100644 index 0000000000000000000000000000000000000000..3c12a3245d00131df352512721006d264aa8d14d GIT binary patch literal 133 UcmZQ(W^Vi6z<>%EQMoh+017h#5C8xG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7a5dde1a1dc70f5f4a6733eae91f261d3e32b434 b/fuzz/corpora/bignum/7a5dde1a1dc70f5f4a6733eae91f261d3e32b434 new file mode 100644 index 0000000000000000000000000000000000000000..05995aa0cb0ac146dda938a7276eec62475353e6 GIT binary patch literal 175 vcmZSm{p;7S-wZ5_3?LBx|NsAs4AxiH(H3YDGX6gVFtR`yAke_Tz`zIq=_Yd$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7a7ab9564b9bb4c5302719caa5a5839be8120c45 b/fuzz/corpora/bignum/7a7ab9564b9bb4c5302719caa5a5839be8120c45 new file mode 100644 index 0000000000000000000000000000000000000000..a4d9c4bbb6e21d7f84a213ed60fb56c7ba64f095 GIT binary patch literal 45 bcmY%V!q##9`t|?6HU9tq&wvknE#v_JWjhMG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7a8cba7c2faabbaf4b946d8a4e28a124ef6cac25 b/fuzz/corpora/bignum/7a8cba7c2faabbaf4b946d8a4e28a124ef6cac25 new file mode 100644 index 0000000000000000000000000000000000000000..cac5b0ba48f5d18655a1053423020375b4f72fee GIT binary patch literal 93 scmZQ(=J*c=KYsl9!2kvVATkHS1_5+F1Yj3sV9?O`&-kAKWF-540K>)-t^fc4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7ac7ab8a969eab4867a02827a322075c1d859738 b/fuzz/corpora/bignum/7ac7ab8a969eab4867a02827a322075c1d859738 new file mode 100644 index 0000000000000000000000000000000000000000..af0bdc9f9e3ba1f9d9a866dd352a01662f99047e GIT binary patch literal 126 tcmZQ(R{sB=nHfy}XJ-EY|HqCW4CsK75nY66@c;k+|5z1sF)%Rv1pw(54+Q`K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7af973f04745d25ce958625270ced1128314f174 b/fuzz/corpora/bignum/7af973f04745d25ce958625270ced1128314f174 new file mode 100644 index 0000000000000000000000000000000000000000..9308ef61aad16fd7313b69f75edcb9c069f90a04 GIT binary patch literal 116 gcmd7@;?+XFfcHHm>`$#Tix-$;}}=Re+c*i1wViM`0@Wg!_uXn7c?wb N3IPoNajJr=006jHF{8#fp@|NmF#()|Cu TgYp0W{|x{C_w)Y$@m~!9E7vIw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7e85f1ae3df8abdeb1d5f8f635317c0774f13531 b/fuzz/corpora/bignum/7e85f1ae3df8abdeb1d5f8f635317c0774f13531 new file mode 100644 index 0000000000000000000000000000000000000000..cd65cd9699b0235ffb02b477b19f3f12ec183f48 GIT binary patch literal 45 mcmdOr11`vY*3HWXLVfFX_|3Cj37#I!(_HA7?=8HNFV^i z5rv&>|Nl#42;%^l`tboo*m5JW{|g|*aR7$qy(|n23|#*~kq8EVME)3@HZV913SR~Q Dt=@M5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7eb975cced17b2749462664047b94ac6dd15c270 b/fuzz/corpora/bignum/7eb975cced17b2749462664047b94ac6dd15c270 new file mode 100644 index 00000000..94f173d2 --- /dev/null +++ b/fuzz/corpora/bignum/7eb975cced17b2749462664047b94ac6dd15c270 @@ -0,0 +1 @@ +qÊ•ÀõÊÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/7ed124b14d263f000c49d9efe651f9774f4fb5e4 b/fuzz/corpora/bignum/7ed124b14d263f000c49d9efe651f9774f4fb5e4 new file mode 100644 index 0000000000000000000000000000000000000000..322596b6f7226ce207ad0969a5acb20d78fcad18 GIT binary patch literal 128 lcmZQ(ja0CVwQgs?3Z|or{sjwgpbKLKTv$aJ7#K8>Bmi^41E~N2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/7ede26fd50e6568249894b96b81968d0d6459b4b b/fuzz/corpora/bignum/7ede26fd50e6568249894b96b81968d0d6459b4b new file mode 100644 index 00000000..2eb22b16 --- /dev/null +++ b/fuzz/corpora/bignum/7ede26fd50e6568249894b96b81968d0d6459b4b @@ -0,0 +1 @@ +!ôˆ×××ÿûÿÿÿúq \ No newline at end of file diff --git a/fuzz/corpora/bignum/7edeafeb5ca3aba7a6f3f97713e3ea9317127142 b/fuzz/corpora/bignum/7edeafeb5ca3aba7a6f3f97713e3ea9317127142 new file mode 100644 index 0000000000000000000000000000000000000000..d76eeb0b17b58c28a6a1444886df8db55443dfab GIT binary patch literal 64 vcmZScfB+5;50C#05YPak{-Xd*ki3JSzu_^+4V~rvD6k|NjR7+-?h6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8082dbfc4d46dcc604705391965c0be282c83ded b/fuzz/corpora/bignum/8082dbfc4d46dcc604705391965c0be282c83ded new file mode 100644 index 0000000000000000000000000000000000000000..01329219b99c90675eef5f0d07e97006e69ba6f7 GIT binary patch literal 122 zcmd-n{Gst*!}dF)%zvN%4h+_@*1!J$56IH+l=)8tU_?>#5QPT}fbehz#-0DMgP0#K{2-aX*rlOB(c9bm3*$W|_FdPZW}<@>kjnS}|3k#Z E03^9cCIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/81d29d520d82876e9e132d459b6f6fde469b9850 b/fuzz/corpora/bignum/81d29d520d82876e9e132d459b6f6fde469b9850 new file mode 100644 index 0000000000000000000000000000000000000000..81e2549a4aaa762af42b6ba1f952582c58f4dc21 GIT binary patch literal 120 jcmZQ(`Tze?gEfNy0|+oa0#h*13}rAe!bGqGGV}ugj_n6P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/822ce58b4735642d26b0a30b9b43630ca734ad7c b/fuzz/corpora/bignum/822ce58b4735642d26b0a30b9b43630ca734ad7c new file mode 100644 index 0000000000000000000000000000000000000000..2c64f76ba38cc73d821aba9ba316a6eea120aedc GIT binary patch literal 275 zcmb`CK?;CC3JQ3?Cg`?PxCm4HBDdPCGKw uZKtn79I7f3SSH9P0*F{i+n^(_C4S4_Y>9_-&n1$~#=6y|#`PI}1)viHZrzUn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/83188d985d73ec960ffe380b927988defb1a39ea b/fuzz/corpora/bignum/83188d985d73ec960ffe380b927988defb1a39ea new file mode 100644 index 0000000000000000000000000000000000000000..1d2c6a06b4dd40dbbcf8bce70de1826a5d4883eb GIT binary patch literal 652 zcmb7;y-Nc@5XE2O$9jSg6cmZ*1%<$Yu!Ti*EkY1%(^*I=g#|$o1W`nC0j(AkgtO7B zWAq<6J3+7zi)cV%W1+GsjEt-?F)>*9Yxd2|o3|6{SPBzq8>`8^#|Z9h5eAOJ*Her! zmbiJ*g65@RTgn9~yT7!Qb5e3CRg4sN@r;-Y#v)*BP%5P^lv0W-rOpnN0^qLcnTdqf zT6Fg1$4Z6rxwEeCO8`RZ_`>@r=6R85HwI3KxtiYet9CVXWqJ}P(PHr1`#nJI(Ei?H z5CoUyV5pz64``tPHk(f9Pq)yP+?V)bl3)rY_*UOU(Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/832af06f483d21853a366a6e10c729ddf7416ee8 b/fuzz/corpora/bignum/832af06f483d21853a366a6e10c729ddf7416ee8 new file mode 100644 index 0000000000000000000000000000000000000000..55aca1e9c1e27d7ae40a73150d74dc8308e123ae GIT binary patch literal 12 Ucmd4FCTF04SITTmS$7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/83477ae142e5ad220170d50e0f6cadd5634f411d b/fuzz/corpora/bignum/83477ae142e5ad220170d50e0f6cadd5634f411d new file mode 100644 index 0000000000000000000000000000000000000000..da0f4b7739a346adae4db5c8728893647cbbe105 GIT binary patch literal 128 gcmZQ(R$l*~`9A{+P+ao={ht2+!~zt(_yLAm0RDV1t^fc4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/83a7d5c85938727ae2680482e9d4ffa6d212ad9d b/fuzz/corpora/bignum/83a7d5c85938727ae2680482e9d4ffa6d212ad9d new file mode 100644 index 0000000000000000000000000000000000000000..84ecae0dae208f948cfeb442b1abcdde6e88f9e9 GIT binary patch literal 128 zcmZQ(W@g^F@jqU`fJK%aO^~5^FAK|>^8f$;Gc+(TFf<@Zi!ijc{hz`B0+Gy0-Q}G; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/83b2ad005f2e950a04183d643799673bf58d85d3 b/fuzz/corpora/bignum/83b2ad005f2e950a04183d643799673bf58d85d3 new file mode 100644 index 0000000000000000000000000000000000000000..70a36b56555cd7506794771cbf349c641722cf3b GIT binary patch literal 70 zcmZQ)XJ=Quzf_+~sFocB82Vy~elQ$56A1%n7<_)P|7Z9Qllc!)_Ra{htEX8p*8m zok{K8cf&{{26d1KGguf6FfslQ4-fzU|Nlh>YX$~JBrDMrVgqLx7|sfUC4Mn*Gq7V* zLNPc1Gl7|znVEItMo3UJpacvOfQ5z6kG}u!|Njp}k^%v01!3VwuK$1kYk)$`sRLps V)SXoR=8K7X{|Nn3{9DFQfVl0635MXi#rdkO2|Nno*e^ijd b{{O!qM7G1{|NsAjP{6>z0Al_BuhkC#D;O&_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/84e9566974b175f2f959b865d0af11d8b3aaa536 b/fuzz/corpora/bignum/84e9566974b175f2f959b865d0af11d8b3aaa536 new file mode 100644 index 0000000000000000000000000000000000000000..27a3bffc73a7966ceef17f9ec49597a09efff410 GIT binary patch literal 126 zcmZQ(W@g^F@jqU`fL9g-7@GI8u&gNuu^Jc{7#fgth%mIZ{hz`B0+Gy0-oWmu=e%>V*3L4bjQK}BWe%$d`FLHH1$F>|KvcSZ(Ab_Pbi{|qx3 HX3qow3wsmX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/85852da131e3e7f8c765a5a1d172499412558793 b/fuzz/corpora/bignum/85852da131e3e7f8c765a5a1d172499412558793 new file mode 100644 index 0000000000000000000000000000000000000000..96d885a2c3adc423c4072769b6ea0aac1d5ddaed GIT binary patch literal 140 zcmWfTV`4~QabWoW?>_?rk3a?k1JkEZFCKmR^oi>e2*iB)WM^lWV21`kQZGR=c6OgW zb$xmX;(ujeVE8Z2z`(#Dz{~LF!~g#b??4=O1}O#xhVTFV{6IX0rwnTvmovYZ0X7}1 LWieQsfk6%cA=^6@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/85930deca05f1ee6926d72d0ee4a2bb642c62c67 b/fuzz/corpora/bignum/85930deca05f1ee6926d72d0ee4a2bb642c62c67 new file mode 100644 index 0000000000000000000000000000000000000000..68a52d0b02e5311b874e23b6155f90040347db14 GIT binary patch literal 150 acmZQ(W@c9Z&j16AFb2KBQv_gOU;qFIUJDBV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/85a540ef04d79858d557edfeff247a69b068ef23 b/fuzz/corpora/bignum/85a540ef04d79858d557edfeff247a69b068ef23 new file mode 100644 index 0000000000000000000000000000000000000000..fd61978a93baf83924ce5f1c8c0e0e0a7ef9e3f3 GIT binary patch literal 36 ucmV+<0Nein42aCk|Nk(`O2YrUfB*jqi2slnAt(xei2uL;|Ns8@`2YWi%NL>m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/863dfd12a78cbc948d1cc1d73050c297e234dd35 b/fuzz/corpora/bignum/863dfd12a78cbc948d1cc1d73050c297e234dd35 new file mode 100644 index 0000000000000000000000000000000000000000..ad3dfea97428fe9a46c09c26cf29ddf2e008d0b5 GIT binary patch literal 40 kcmd)-|3k?D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/873ba4a8a8fdd4275455d6c1d305ea673145c374 b/fuzz/corpora/bignum/873ba4a8a8fdd4275455d6c1d305ea673145c374 new file mode 100644 index 0000000000000000000000000000000000000000..c6ca8d1347b87ea42310428bd12561ac8ea9e05f GIT binary patch literal 139 QcmZQ(W@c9Z&oCGO0HFv0GXMYp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8768744173f2ef90d172cbbbecd017477c31be01 b/fuzz/corpora/bignum/8768744173f2ef90d172cbbbecd017477c31be01 new file mode 100644 index 0000000000000000000000000000000000000000..c97aa162640d099acf037806de6ae9dbbfd60b0d GIT binary patch literal 47 dcmd=30RjvRVCu(Y1`NOmlKBH7?)~6k2LKa)73cr} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/87d1ad944ac5408daf88ca8a06f5aac1309084c6 b/fuzz/corpora/bignum/87d1ad944ac5408daf88ca8a06f5aac1309084c6 new file mode 100644 index 0000000000000000000000000000000000000000..08aa2fb03c25f1563e3fdfcfa21b50d10cee6e53 GIT binary patch literal 39 acmd<#X5e9F=Kc=>Fcw6Bfq_8)DggkB2p3HN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/87e88889b7cba096cd0eb1a9181671075d3076f4 b/fuzz/corpora/bignum/87e88889b7cba096cd0eb1a9181671075d3076f4 new file mode 100644 index 00000000..04e4ceb5 --- /dev/null +++ b/fuzz/corpora/bignum/87e88889b7cba096cd0eb1a9181671075d3076f4 @@ -0,0 +1 @@ +jeûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ//>//ÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/8814ea4e2a20fc587d33b0939a913f611df5f99c b/fuzz/corpora/bignum/8814ea4e2a20fc587d33b0939a913f611df5f99c new file mode 100644 index 00000000..7eb48171 --- /dev/null +++ b/fuzz/corpora/bignum/8814ea4e2a20fc587d33b0939a913f611df5f99c @@ -0,0 +1 @@ + ÿÿ ÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿ ÿÿÿ)ÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/8840d62fa6701efb3e040208a60b50b1b8e2cac2 b/fuzz/corpora/bignum/8840d62fa6701efb3e040208a60b50b1b8e2cac2 new file mode 100644 index 0000000000000000000000000000000000000000..f32507869319e0c6fd2fc21224aac9e76b7ae409 GIT binary patch literal 134 zcmZXLxe#No0<9fs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8853471ea2a038d2513614886173c201a06075c5 b/fuzz/corpora/bignum/8853471ea2a038d2513614886173c201a06075c5 new file mode 100644 index 00000000..76887d64 --- /dev/null +++ b/fuzz/corpora/bignum/8853471ea2a038d2513614886173c201a06075c5 @@ -0,0 +1,2 @@ + +6!Zý@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿseedÿÿæÿø±ñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿFFFFFFFFFFFFFFFFFFFÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿññ±ññxÚÚ'ñññññÿññÿÿÿ­ÿ€ \ No newline at end of file diff --git a/fuzz/corpora/bignum/88b915afd750aa901aa6d0f5f982619206306f9f b/fuzz/corpora/bignum/88b915afd750aa901aa6d0f5f982619206306f9f new file mode 100644 index 00000000..299bf05a --- /dev/null +++ b/fuzz/corpora/bignum/88b915afd750aa901aa6d0f5f982619206306f9f @@ -0,0 +1 @@ +zÆÆÆÆÆÆÆÆÆjjjÐÌÌÿá÷ÌÌÌÌdDÌÔÂÌ \ No newline at end of file diff --git a/fuzz/corpora/bignum/893b88930ec19be22c561da9979eae4420fc28ef b/fuzz/corpora/bignum/893b88930ec19be22c561da9979eae4420fc28ef new file mode 100644 index 0000000000000000000000000000000000000000..0e5afc3759c122cf5742c1141affc9c3e4f5e8f5 GIT binary patch literal 12 TcmY%W!N9}7z{0@5z@P;H4ITkl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/895cd00606c91b3adf94c16fe7f8bc9609ee8d21 b/fuzz/corpora/bignum/895cd00606c91b3adf94c16fe7f8bc9609ee8d21 new file mode 100644 index 00000000..3ac56642 --- /dev/null +++ b/fuzz/corpora/bignum/895cd00606c91b3adf94c16fe7f8bc9609ee8d21 @@ -0,0 +1 @@ +(:øÿÿÿÿXÿÿï° \ No newline at end of file diff --git a/fuzz/corpora/bignum/89af206567ace6c97db2055d8076ffd3b15085c4 b/fuzz/corpora/bignum/89af206567ace6c97db2055d8076ffd3b15085c4 new file mode 100644 index 0000000000000000000000000000000000000000..f6cdce847116f398e3efaa333c110557ac1bdb92 GIT binary patch literal 140 zcmYj}p$&vU6a{DP*Vq#%LJb&_Yk*ehVl_Qbz&3!yeorXiO4yuvWETXZo|rc_{k~h5 z&I53FTcniiV}M|EcSn+9%+Nqt52D|BV>aYa6#nJ%Qe%~U27*Lxt5w6&omiy{I*UK1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8aae679ba6232efe2d1e3d0848d09101a09106d7 b/fuzz/corpora/bignum/8aae679ba6232efe2d1e3d0848d09101a09106d7 new file mode 100644 index 0000000000000000000000000000000000000000..569a86682b2d5ea9e36659d3c955403d954b6872 GIT binary patch literal 62 zcmd(p9HwXnxuLoRAyi;7q$BiXMID251twsClHzeZbGck{4l|r|UJkR_ zVC_{}V=d~oz2?>An~q)s;Ym_TXV1JEJb(aTD%88(5>u2^^I{Z5`$zcUX8aUmej62tb#Dh%)~FjV=KP&TjJ*Y=~NK9yOmBp3ig+4o7$GMNYxMSxO?~BfB!p<=Fx;c0r)e7N%|K&g{n}*#vmnY z2DG}H)jqs<9XX;}t-jnb0F1azPb6(%M`pFD%XvippRs!`Z(=a~&Y))**!JZ7fF?|{ zXT&s3A_8Dp`F!5&Vp)~SCJ9<15VR|mGuwF=t>e=M06`0V8L~+fh@^B|+@yI9sJl3%);+23YcA1#8LX4{ZRg EUnqQjf&c&j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8e21eba895d8638f98e358a2b7008cc14efedcd4 b/fuzz/corpora/bignum/8e21eba895d8638f98e358a2b7008cc14efedcd4 new file mode 100644 index 0000000000000000000000000000000000000000..7a49f141e6cf601291cfe6eb53f7bfeca5e25ebf GIT binary patch literal 43 scmZQr;=?E`EX=^bu%Cfp)&KvK|1&aoaxg%^^Y37R|En1O|5yJH03H(%^#A|> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8e26db259964581c624970318265c8a0acfd50c1 b/fuzz/corpora/bignum/8e26db259964581c624970318265c8a0acfd50c1 new file mode 100644 index 0000000000000000000000000000000000000000..2224b6854a2c4ab52f3fca9bfa939eee7e8f73fd GIT binary patch literal 55 XcmY%V!N?$f1`f2&obo3OG|vD4$J`dI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8eb0c38864327b88abf519473814cf553e3d9283 b/fuzz/corpora/bignum/8eb0c38864327b88abf519473814cf553e3d9283 new file mode 100644 index 0000000000000000000000000000000000000000..5d1337858be1bf004a6c0a83cb467d709475f80e GIT binary patch literal 209 zcmZQ(`Om<}&+wm>fwq8^Bnud^I0h=l$e_jY9|V^Ea=8Bg$MxDDKYlPUFo^!YcJ12# HYYYqk_39O+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8eb81120f9fd00737a41b97f39606eabbc96ff01 b/fuzz/corpora/bignum/8eb81120f9fd00737a41b97f39606eabbc96ff01 new file mode 100644 index 0000000000000000000000000000000000000000..762f3489435cb3914cb1eb504d233fc827162d6e GIT binary patch literal 135 ScmZQ(iB#DC{{X|lf&&1Dy92)f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8eddaf49dc253fe34cd8e2d5d08ae808759430fa b/fuzz/corpora/bignum/8eddaf49dc253fe34cd8e2d5d08ae808759430fa new file mode 100644 index 0000000000000000000000000000000000000000..1df9a11c3f4799b4513f64b916493555c5bd3859 GIT binary patch literal 59 qcmWe=FkoO{a$vBImHr)&by0=^3`7|ir5g;s{r~@;5h8#92mt_Sp9wAi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8eee7ef03bfd809a262da32104df490626766fe2 b/fuzz/corpora/bignum/8eee7ef03bfd809a262da32104df490626766fe2 new file mode 100644 index 0000000000000000000000000000000000000000..a219ffcfbafda423a1ec6fe0392d9ef019d6b43f GIT binary patch literal 127 VcmZQ(i){K22MlBam;oef2LQHe64L+x literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8efb43876a5726ff939ab42bfe22df27f7b3f6ed b/fuzz/corpora/bignum/8efb43876a5726ff939ab42bfe22df27f7b3f6ed new file mode 100644 index 0000000000000000000000000000000000000000..1314523c12757117c6bd573a37aba4ebb55a2944 GIT binary patch literal 79 gcmWd=BLo;27#RNl{|};IzzW7-U|>Wr85kI>0W`7(U;qFB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8fb9a2610a3c8c667c7da72fe00454e3e9cb787c b/fuzz/corpora/bignum/8fb9a2610a3c8c667c7da72fe00454e3e9cb787c new file mode 100644 index 0000000000000000000000000000000000000000..ddcdc4082f0703a86ab725b7900e65ccb489c64b GIT binary patch literal 206 zcmZQ#Qe@Hm&p>7HpMl{&4nzNg!50wes18vCQ3;Xw|DVC<2ZOlRq5nUu{_n2;|DV&T X?$oJ6r%o|2{6EAn)2S1Ou@C?NJ;5wI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/8fda1700d59460907a56d99ab1751b629cd77379 b/fuzz/corpora/bignum/8fda1700d59460907a56d99ab1751b629cd77379 new file mode 100644 index 0000000000000000000000000000000000000000..86e12663b9dc5f79f910924cdacf892afeb02ce8 GIT binary patch literal 64 zcmdP2;_CPh23#HgfBgUdqqw*Q3>X;Z%B^5vnLBsxeul>7S`0ov7})>6_qoBK`Tu{+ PIU`1{Yu2^De(whWg8w1u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/902023fea6e57b1af304b39888d80bb41b94b60b b/fuzz/corpora/bignum/902023fea6e57b1af304b39888d80bb41b94b60b new file mode 100644 index 0000000000000000000000000000000000000000..c25232f61c0459baea553dbe38342acb9f4d2c5e GIT binary patch literal 1200 zcmchXze^)g5XWbKh(`onE_jUu+`y4!Dyu`@6b39sNY+9S(nyM6VJS9(HiDp#yTeK? zJP0{73btA7w6d`g9;^ud1$MIJ)REmayD?eCyW&3E3^U*PzInUM!W~jE%Q;qtGJ^@X ze^S+Uc1&hB=ehu{&rk4CTsNx6k;!f`eEY=Az&y!{*QLY>0|HloNP$t9i^6z(=asg{ zzv6pqIx`u-eE|Nf7H=N{TA`-FEgv_Y?{Q(s%uRlQA60Es_J$(pHm0wJR9XxINAUH`{HpkwW;U# z(%u1@X(1tVh33v}fr6OOf(jEOlCXQd+Gu7nnG8n+5I9b|r>0n(&iUE=*^THZ0}OzL z_rdcj4*)36(?~d8d3h0B0f5#<$kK-LF-m@m_c7#^l=50i*_2XBD33-4j^j99QaZAG zkiX+gupm>Z)a>lB&w6dWRx7S@GuVrnnWLvee&}-5a9FI>@o}V(%~R>mLOtYC6bgkd b^?#;)zOg(J{vIF^EuY#kkI@lVtJTain4&kl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9052b6e33a0ccff7be2b40a8eb4f07a5a2dd5ce4 b/fuzz/corpora/bignum/9052b6e33a0ccff7be2b40a8eb4f07a5a2dd5ce4 new file mode 100644 index 0000000000000000000000000000000000000000..e053d4f8bd024d361141942c54f3367658fc5518 GIT binary patch literal 126 zcmZQJFkowF2<75j(qPaaXky90pv}3Yfq{XOxtf`C>CzpMAaLfF&ky$h4FCWCKlFp) zkk)^Or7gWz*48sDP5Hlc($b|%mo^wMrxbv|M+jhGU|`4r5fC5%qH-9{F)%QIrQiSn D-z+MQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/908481f051db1ee6b6cce8550da7b614aa89b918 b/fuzz/corpora/bignum/908481f051db1ee6b6cce8550da7b614aa89b918 new file mode 100644 index 0000000000000000000000000000000000000000..b6ddfaa3bac695aa030a46d903709839d92d7829 GIT binary patch literal 32 lcmd<*<>%7+|NsC0zYGiv41fRr1=9?gj~Es(I9&hz9{}4~4haAN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/908c885d387b7a2db3cb339a79f13d83e80d3b32 b/fuzz/corpora/bignum/908c885d387b7a2db3cb339a79f13d83e80d3b32 new file mode 100644 index 0000000000000000000000000000000000000000..f1d8aa65febd08f8a5513062c7d75a438803d21d GIT binary patch literal 11 ScmZo}W@I#AWMB|dX9NHYwgGei literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/909b89c5d375fe2176052491bd1ab5ca1674fe02 b/fuzz/corpora/bignum/909b89c5d375fe2176052491bd1ab5ca1674fe02 new file mode 100644 index 0000000000000000000000000000000000000000..8c61b266df17f5ce1f737450df15052fe00448e6 GIT binary patch literal 62 qcmZQ&Wo1=oWo2bpr^3wu0y9B?fq_9q1;qFT;lsgf2n(WN=1c%9#};h> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/90a6488cf900b0865f166e4930b89c26812854b3 b/fuzz/corpora/bignum/90a6488cf900b0865f166e4930b89c26812854b3 new file mode 100644 index 0000000000000000000000000000000000000000..9205a123a28c20c4258726ae17e2d2f821b9b9f9 GIT binary patch literal 134 QcmZQ(W@apCU>INk0Dl$$`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/90acc10136ea34c75b0a82438b2ba8b7b333885a b/fuzz/corpora/bignum/90acc10136ea34c75b0a82438b2ba8b7b333885a new file mode 100644 index 0000000000000000000000000000000000000000..f75e1bc22f2cfeec2e3b27c69088581f2b0d884f GIT binary patch literal 127 ZcmZQ(i)8x$|33qMa05*`9F0#l0005>1d#v$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/90b0cb75ec8d2171a2df93f91095d18243d12f4b b/fuzz/corpora/bignum/90b0cb75ec8d2171a2df93f91095d18243d12f4b new file mode 100644 index 0000000000000000000000000000000000000000..8f9a4cba036e553afe43c32990ed8ad1d8eb00c5 GIT binary patch literal 71 ccmWg2N@ZkVU|{;q%D}*||NsC0T>r@d0OPhgb^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/90c05b0d85c3521a89727b4676f4815ebeb41ffb b/fuzz/corpora/bignum/90c05b0d85c3521a89727b4676f4815ebeb41ffb new file mode 100644 index 00000000..ab5e8743 --- /dev/null +++ b/fuzz/corpora/bignum/90c05b0d85c3521a89727b4676f4815ebeb41ffb @@ -0,0 +1 @@ +xÚÚÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/911ee38b6169c1bec250eae70db36b6a75c9c162 b/fuzz/corpora/bignum/911ee38b6169c1bec250eae70db36b6a75c9c162 new file mode 100644 index 00000000..d9718b02 --- /dev/null +++ b/fuzz/corpora/bignum/911ee38b6169c1bec250eae70db36b6a75c9c162 @@ -0,0 +1 @@ +•Åõz† \ No newline at end of file diff --git a/fuzz/corpora/bignum/91525983687c26a4d3a82a63c57094e68b1f56d0 b/fuzz/corpora/bignum/91525983687c26a4d3a82a63c57094e68b1f56d0 new file mode 100644 index 00000000..14131cf4 --- /dev/null +++ b/fuzz/corpora/bignum/91525983687c26a4d3a82a63c57094e68b1f56d0 @@ -0,0 +1 @@ +JÊÿ!Ê­­ \ No newline at end of file diff --git a/fuzz/corpora/bignum/916139215b525bbcf9d32ac9a48c10fd3b12c10a b/fuzz/corpora/bignum/916139215b525bbcf9d32ac9a48c10fd3b12c10a new file mode 100644 index 0000000000000000000000000000000000000000..38665b43849c17e5bf673b256f1d70042212c870 GIT binary patch literal 64 qcmWfbV8Fn@YU6vn?8Y1#{FaSDiFT=J)nkPe+Y>6q137au_4n90q_*|9@#7DQ-<;MNE5 z0Ys&PG+6YL`zK9X#ouu6x!?KD;oN(L_>YWP0RYx`oacfP0Ee(`+u3wPk|bav5=(jj zJi#KJ-tBYvIS7=SZzL~LrW|Gt`+Y>MD z#|N)E_(f`z-b&^wW7OXAJ2P_u%@+{Iu@{s4juodS^B%>=0Yh3l{x*P)dJX_xxttjj ztE#F)9+C2Fgf4p4!q;$_3%iwUG@~`Cbz19!dHc4~b%(GXYl*t|lC*-%-!T{ag3RUS qO$eNq*AE}1svVZ}cFWO7IlEHYo4;`GvenKCAwLa85#3atYRex|3G0Ob literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/91c3132b10fedc0b84d3e217269387a20cd42c25 b/fuzz/corpora/bignum/91c3132b10fedc0b84d3e217269387a20cd42c25 new file mode 100644 index 0000000000000000000000000000000000000000..2b81bb9d520475657803a38c840ac61255d88f41 GIT binary patch literal 15 RcmdO}{m$4}$H)KyOaL6#0$>0D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/91ed094bf03be9cec438bebf99eef54c3d6abbc2 b/fuzz/corpora/bignum/91ed094bf03be9cec438bebf99eef54c3d6abbc2 new file mode 100644 index 00000000..1edf9e9e --- /dev/null +++ b/fuzz/corpora/bignum/91ed094bf03be9cec438bebf99eef54c3d6abbc2 @@ -0,0 +1 @@ + !eûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/9201d402ec28edd10b7ea7f1971cdb4a790b2a86 b/fuzz/corpora/bignum/9201d402ec28edd10b7ea7f1971cdb4a790b2a86 new file mode 100644 index 00000000..3cf0dfd9 --- /dev/null +++ b/fuzz/corpora/bignum/9201d402ec28edd10b7ea7f1971cdb4a790b2a86 @@ -0,0 +1 @@ +2ÿƒ]¡€0;;€0€ÿºÿÿÿÿÿÿSS­«ÿü \ No newline at end of file diff --git a/fuzz/corpora/bignum/920861efbffda6de686ed60111e17f7eef31b072 b/fuzz/corpora/bignum/920861efbffda6de686ed60111e17f7eef31b072 new file mode 100644 index 00000000..d4642ab1 --- /dev/null +++ b/fuzz/corpora/bignum/920861efbffda6de686ed60111e17f7eef31b072 @@ -0,0 +1 @@ +!ú@×ÿÿÿÿÿÿÖÖÖÖÖÖ;} \ No newline at end of file diff --git a/fuzz/corpora/bignum/926b20e430452d02eccad23a3a176d6ae088603c b/fuzz/corpora/bignum/926b20e430452d02eccad23a3a176d6ae088603c new file mode 100644 index 0000000000000000000000000000000000000000..4decde781a2befa01a9a1f763422fa6b45afbe83 GIT binary patch literal 156 XcmZQ(iB#DC{{RC5a3Yuk3l0DP%YXyO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/92985491440282a70ab6dba17b1bcde877a61d53 b/fuzz/corpora/bignum/92985491440282a70ab6dba17b1bcde877a61d53 new file mode 100644 index 00000000..c1ccf116 --- /dev/null +++ b/fuzz/corpora/bignum/92985491440282a70ab6dba17b1bcde877a61d53 @@ -0,0 +1 @@ +(æÐÿÿ÷ÿÿÿÿïÿÿÿÿÿ(*÷ÿÿÿÿïÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/92ae779adedb85e3e2a2a533d02196dab595d199 b/fuzz/corpora/bignum/92ae779adedb85e3e2a2a533d02196dab595d199 new file mode 100644 index 00000000..171946c1 --- /dev/null +++ b/fuzz/corpora/bignum/92ae779adedb85e3e2a2a533d02196dab595d199 @@ -0,0 +1,2 @@ + + *“ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/932d2a8db66d5270fc8b46fa91923b9a837c2cf5 b/fuzz/corpora/bignum/932d2a8db66d5270fc8b46fa91923b9a837c2cf5 new file mode 100644 index 0000000000000000000000000000000000000000..ce1fda9ca9123bac2edf4959359de3feaf738851 GIT binary patch literal 58 scmWe=FkoO{a$vBImHwTWB?tu?FovL@U?7-%L0yIc3_db2Ff@Qz019dd5dZ)H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/934fb49b8efd3ae337d826e33893773073b37c21 b/fuzz/corpora/bignum/934fb49b8efd3ae337d826e33893773073b37c21 new file mode 100644 index 0000000000000000000000000000000000000000..bb94b1ab7e55436f382d408e6e3f9c7d0aae0d8c GIT binary patch literal 260 zcmZQ(`;P<|AmBTU0RumvYG8aMz|(Q&3=$U|zzjzhhXW=!3zu4$5yXM7#3_RS1_p-z G3=9At(Sw}; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/940216910f81dcb31826c09666c439b46b719189 b/fuzz/corpora/bignum/940216910f81dcb31826c09666c439b46b719189 new file mode 100644 index 0000000000000000000000000000000000000000..96cc1d76561f6126b59e80a5f8ddb433e3089db1 GIT binary patch literal 248 gcmWgGg$KMt2Ok(1{-cWx6#(_;t1S$>jIXl-0HGtO3;siZK9nXEh(I)uYdakL0J9kXGk}cx J|38M|KLFE5PE!B? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/94552a6cf5b552ed6434646aae29bfb254816a59 b/fuzz/corpora/bignum/94552a6cf5b552ed6434646aae29bfb254816a59 new file mode 100644 index 0000000000000000000000000000000000000000..985de067d4e1681c104ef761fca8a12a8d15e07c GIT binary patch literal 133 bcmZQ(W@a|{&ww9b$k*Xlj}0(l6NCZ)B@6<( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9459156e4e27a7bd59a2522d00307daa1d41df0e b/fuzz/corpora/bignum/9459156e4e27a7bd59a2522d00307daa1d41df0e new file mode 100644 index 0000000000000000000000000000000000000000..4f0def0a50e50f42d75b79a7b7a13ce0cee07487 GIT binary patch literal 44 bcmdPo=jXHiuA#-p$iVOhJAlZ(dGiJU8V?&g literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/946faf3eccc25ea0d45c0c037ef7a5aa977f0935 b/fuzz/corpora/bignum/946faf3eccc25ea0d45c0c037ef7a5aa977f0935 new file mode 100644 index 0000000000000000000000000000000000000000..5990f6b7ef37440e65d68e777daffb734e199f8a GIT binary patch literal 10 RcmeaeuJx~y)vBN2GXNPj1cU$p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9498cad323a6f8cde8d819db742d5ccac2d180f1 b/fuzz/corpora/bignum/9498cad323a6f8cde8d819db742d5ccac2d180f1 new file mode 100644 index 0000000000000000000000000000000000000000..da41da748a0ea995bf50e0a6ee051dc6f2dedc9b GIT binary patch literal 126 zcmZ9DyAgme3`3oBLFh6@#$gaf(BSSK7dr*;8tL?Lckj)T6UvMwcX=ZsLXxtTwDT8m PLGCL2{Qt~J!vGE*s%;(8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/94b5b6c8d01fc70e46e7695dc01f0fec27ffa9e9 b/fuzz/corpora/bignum/94b5b6c8d01fc70e46e7695dc01f0fec27ffa9e9 new file mode 100644 index 0000000000000000000000000000000000000000..0e617b4762238758093568b7c9b254c518d87e2a GIT binary patch literal 47 qcmd<*H)8(Z61%X$z}lLz!Jy&)ZU%;rXn?Km|Np~mZe|_(yWm1VKmda^18D#NMtcR> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/94e63e2f7e045cbed008659d7fd6615689eeb987 b/fuzz/corpora/bignum/94e63e2f7e045cbed008659d7fd6615689eeb987 new file mode 100644 index 0000000000000000000000000000000000000000..033bd0131dc68c6bf31c113e47d335b322eb39f2 GIT binary patch literal 600 zcmWg2;^O+o$N&QW|0{A44^o-1s_num%JuvA|NsB@gXRAJ{|~|tApQS8*luhkMnB4#X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/94ea0a82f549b329d40542f00f5b9eeeb1e6426b b/fuzz/corpora/bignum/94ea0a82f549b329d40542f00f5b9eeeb1e6426b new file mode 100644 index 0000000000000000000000000000000000000000..933513e39997208bbc4d3a9a59fc1f07bbc4f81e GIT binary patch literal 30 hcmb2u)cmVZ|NsAA1`q&||F<*z|KDn*`JaJ-0RXw;3!eZ0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/94f214a9fe4c54d034243f1f8ae8a4e9c951cdeb b/fuzz/corpora/bignum/94f214a9fe4c54d034243f1f8ae8a4e9c951cdeb new file mode 100644 index 00000000..8ab609e0 --- /dev/null +++ b/fuzz/corpora/bignum/94f214a9fe4c54d034243f1f8ae8a4e9c951cdeb @@ -0,0 +1 @@ + êzBBB0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB+ \ No newline at end of file diff --git a/fuzz/corpora/bignum/95167908884dcb36fd5c34a27a0a624dca647a29 b/fuzz/corpora/bignum/95167908884dcb36fd5c34a27a0a624dca647a29 new file mode 100644 index 0000000000000000000000000000000000000000..8a46ca6dbb652aa34fc67434ef4ef20f4978e23c GIT binary patch literal 648 zcmaKoze>bF5XNT_jHFo+1;6M{(MR)6`TObBAcyNX^XaP18l1QpfTzAYrrJ{Y8rFP zM9j>z2Owg9kTwCzS|W>im^_zs- z!?danWckVkPG9mo|4Y#t3d?226iN5z2ZVCb6Lz5KebE{yBPoU34o=XF+FDT{2vCly#WIGKnG2^9YK_ErIH(n-A7l f`><1And^IFgNr+3gV@MJOzu1u`X1w}zxR+|08YeL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/954dae57d62fe22cc8b568f9b4cd7a56b5d2f2db b/fuzz/corpora/bignum/954dae57d62fe22cc8b568f9b4cd7a56b5d2f2db new file mode 100644 index 0000000000000000000000000000000000000000..0e56ecc7e11a1ad81f6630cfc0966eec907a05ff GIT binary patch literal 14 RcmdNiP-NV|$N&a>OaKj90X+Z! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/95548c20388bd24929ca21191c957d7c82dcc83e b/fuzz/corpora/bignum/95548c20388bd24929ca21191c957d7c82dcc83e new file mode 100644 index 0000000000000000000000000000000000000000..cc21f0992b3b01b5ce54b1eb374933fa05d2b336 GIT binary patch literal 62 zcmZQ)XJ^-5dS8)CsFocB82Ee?^eG F9{~Q~ALjr7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/95b0092a9859b00678f3baf43707ddbee0d0f8b1 b/fuzz/corpora/bignum/95b0092a9859b00678f3baf43707ddbee0d0f8b1 new file mode 100644 index 0000000000000000000000000000000000000000..63c46de93d19d68b0618554d0bbceddfecd3c9b8 GIT binary patch literal 54 rcmd<$x&s4>>VN{@=JR^5_5mAOFEXC@Yoe_wWDz|L_0* z|NjJoA3yFhAi$shP`2U^2KJv24G^G(P=pEoVhWK5NHK^DA3(QW^Vff7hwK0UGwcV+ z7(%3*n;97m7#YBR*0BA~$iT?Xz{vNXfq{_$fpGy54IW6y#3Kh29Ejo4H|PP#3qOAR V_yKXK0Eo)L?`Sayz^`b)0RR@(V|oAp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/962c30626d2b3812a70542da06d5a7f331b3f7a3 b/fuzz/corpora/bignum/962c30626d2b3812a70542da06d5a7f331b3f7a3 new file mode 100644 index 0000000000000000000000000000000000000000..e7cee3707327a98737bf9862275873354f2c1af8 GIT binary patch literal 32 kcmd;;UBzUV^j|?&k#Wa)1_nk3FkoWikQR{s|6f`F0C$uI>;M1& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9637a6c518d93aeb720b1065d2c83cc7120563ce b/fuzz/corpora/bignum/9637a6c518d93aeb720b1065d2c83cc7120563ce new file mode 100644 index 0000000000000000000000000000000000000000..08648af79cce44cedb8f93f659f59382f100ac8f GIT binary patch literal 224 zcmZSB{lES{r&HajQ-@BSVqo}xhye*SgV;U{3=B++aM2$J9XdL>xW0i!I2o2QF#P|o z$b}zh{<`k)|Nno7>;J(3q4)&CTn5<(P&@v^?E-=S|Nk?{%F1f}w}xm2Q|}>c3=sP} LYdI7^G&chPx;s%t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/964db13a8d4aadb14f05ff3fcdaf1d5776ba2c9d b/fuzz/corpora/bignum/964db13a8d4aadb14f05ff3fcdaf1d5776ba2c9d new file mode 100644 index 0000000000000000000000000000000000000000..3e1ca7e32d214e1ac4f1664d1e213a6f19337f39 GIT binary patch literal 134 UcmZQ({?EwF!~h4@a27oQ0Ht67M*si- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/96ebafed845d7872dcf379376ab8f6985ac2375f b/fuzz/corpora/bignum/96ebafed845d7872dcf379376ab8f6985ac2375f new file mode 100644 index 0000000000000000000000000000000000000000..58f4a574975ad2db1d5a894be25785b0ea151370 GIT binary patch literal 30 kcmWgTxA}8V;QzgU+ziL1{)qfBIBftz!vFvG8!$Bj0NkAo_W%F@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/96f0423fdfdb9be6ccb8f4dfeb892e6411231292 b/fuzz/corpora/bignum/96f0423fdfdb9be6ccb8f4dfeb892e6411231292 new file mode 100644 index 00000000..ef9860c5 --- /dev/null +++ b/fuzz/corpora/bignum/96f0423fdfdb9be6ccb8f4dfeb892e6411231292 @@ -0,0 +1 @@ +\ødÿdÿ* \ No newline at end of file diff --git a/fuzz/corpora/bignum/9746b00baedf5052e44bca5befc09dcd9e85128b b/fuzz/corpora/bignum/9746b00baedf5052e44bca5befc09dcd9e85128b new file mode 100644 index 0000000000000000000000000000000000000000..8e443158f46c96e133cb729c4e3ddc87894d0a49 GIT binary patch literal 279 zcmZQ#>R!auIB)W#N00tHd|E$w`l;SOfByV=D9?ZoFfq@bt@$4p0O^FtF);jR`2U~% zYat%P{v)aX59WaNGBC(={QocXzyAM!At52|A67r$W`H%o?Z65c7#QB8NGN{!|KIT@ gg#51oHwpwatZi&;Y-(y4w7G8h++fiB|HJAp0MP7*;Q#;t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9754200efc1b336be91dd7dedeb53b9e995215dd b/fuzz/corpora/bignum/9754200efc1b336be91dd7dedeb53b9e995215dd new file mode 100644 index 0000000000000000000000000000000000000000..4e9854b9ed30d9ac2600434f6fc67f91d8b051da GIT binary patch literal 99 zcmZQ(W@cw$=ZcJsWcVM+70Ji|0cRK(|Nm##UV2~imxIQCFnIU>|Nq+h|Mma9I@tf) d*f3}@{6EC_U*kW+f9$$1Cw2V)|DRd?KLAKkDK`KB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/979f253aac48fd41a62aef399f08762de6ca8f32 b/fuzz/corpora/bignum/979f253aac48fd41a62aef399f08762de6ca8f32 new file mode 100644 index 0000000000000000000000000000000000000000..d71f75b11123482d793718be3477437b325f0dbf GIT binary patch literal 105 Xcmd<$`o_or0{{Oja#0An@aYEt@1F-v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/97fa67b44c281b8162073b911607e78c77d69c88 b/fuzz/corpora/bignum/97fa67b44c281b8162073b911607e78c77d69c88 new file mode 100644 index 0000000000000000000000000000000000000000..2259ad034657b42c21b02361288100c2acf1151a GIT binary patch literal 63 zcmW;3u?>JQ3;;n>Ac&<5kp?SSf}W+^x?>kcV2X_5?vc3L3l16=;Tx<^wsy)d%>;N! Qol`oP4u}Pi&Rt2455~zLK>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/980750d9abf4fe584e796173ce071cb13e9a7366 b/fuzz/corpora/bignum/980750d9abf4fe584e796173ce071cb13e9a7366 new file mode 100644 index 0000000000000000000000000000000000000000..f0a28ed1f6b848a8044b8f948d0f000b4bd7be7d GIT binary patch literal 6 NcmWGv&cJWU2>=EA0Z;${ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/98745e644d09a0432b28def1097c5dbb70272a12 b/fuzz/corpora/bignum/98745e644d09a0432b28def1097c5dbb70272a12 new file mode 100644 index 0000000000000000000000000000000000000000..bf9667895bec195ce2bfc549d47cb458d1866a37 GIT binary patch literal 45 mcmdOr(@KLJg^88 E0QcV{=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9a57d9886b8af128893217c775c975c795dd917a b/fuzz/corpora/bignum/9a57d9886b8af128893217c775c975c795dd917a new file mode 100644 index 0000000000000000000000000000000000000000..28d2c67f719d38317bd520776ba3efb402f614ab GIT binary patch literal 154 ZcmZP-_{+e^!0;agRs{qw3<3ak1pqLO2l)U1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9a86ab5aac7ad3ec9ac240c5e4953d3a90d73029 b/fuzz/corpora/bignum/9a86ab5aac7ad3ec9ac240c5e4953d3a90d73029 new file mode 100644 index 0000000000000000000000000000000000000000..02131c59f0fcd41db50ff5f088629cc35a9c82b2 GIT binary patch literal 160 dcmZSPja0CVwGPtCu-3A+Uc&$eOb}`?002Ef1IPdX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9ac78e4381752e7d5380f4604c39926a70b21ea9 b/fuzz/corpora/bignum/9ac78e4381752e7d5380f4604c39926a70b21ea9 new file mode 100644 index 0000000000000000000000000000000000000000..f1f79ed639d693d55666879b9ac97ca61d8b85a7 GIT binary patch literal 7 OcmebI!NC6izZL)uECX}^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9b5336c1fde197695591aa3cbc3d556c64da360b b/fuzz/corpora/bignum/9b5336c1fde197695591aa3cbc3d556c64da360b new file mode 100644 index 0000000000000000000000000000000000000000..b8788aaa0e21bc6a22839be71d94c323c8401e94 GIT binary patch literal 30 ccmdzQiSaaBz8pXu;9BAE3Ue4vK;f85FvAa&YVr5FGn4 zvil7p6$3?%yqJ*2*8Zk*&%N*7_fLw+WWR%w^6vH)@|1z=}0?i;n z5^!7_pIccW0Il_#)*9Lx()-{ZF>6+lb1RPl1jyuzVtou_?Zsn&MI>20$-R zc8z-*rnAL2fs(y>o&(r5#uP(RM8Ip?F0N%9C#~5cSUBX`K9|nU>Z9UJcp2ZUIxh{1hE7tD} gz|Bdy&2co2%TPVaDbuN&ID}H&&$R?_mtY6r5A7ri8vp^cwI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9cae30dd277f7081566f85abb7e68f6c5246f560 b/fuzz/corpora/bignum/9cae30dd277f7081566f85abb7e68f6c5246f560 new file mode 100644 index 0000000000000000000000000000000000000000..27650a20b2906c87422b48b4cb59d9c5fa52361d GIT binary patch literal 113 ccmdW`=3Q)Bcm0=|Nk5RqX7U31Qo;p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/9f54d951ee79f4bef9ab95c4db3480b9aeab72bb b/fuzz/corpora/bignum/9f54d951ee79f4bef9ab95c4db3480b9aeab72bb new file mode 100644 index 0000000000000000000000000000000000000000..42507aab3b8677e01b5b3334111733711364008b GIT binary patch literal 126 zcmXAhu?>Sj5Cqqp5q%-(!23S1ILKhR?CBUCwEQH}Jg5(V1bH;R_DF`M-yaL+Kb-$N&HT8U8~7GZeu1{~164&cg?e9n+fqgMs14j~_o6)c*hf Q|AXs)?rwK=Co8Rk01+BY`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a04d338c103ff7a338c9dd65a6bc95596e0a7aaa b/fuzz/corpora/bignum/a04d338c103ff7a338c9dd65a6bc95596e0a7aaa new file mode 100644 index 0000000000000000000000000000000000000000..fdcfb15329099d834d1fe7e72542f15f5a5be16f GIT binary patch literal 1155 zcmchW&ubG=5Xa|bYgbnfrG=&*B;AYIjF*SU_f9<(Y75rOvXFZ5;z0xv1i`=xnl0#| z^ty#$VG)A)3q*tvR6;LO$UzW$P*6Msgp_9lN8bL3VJ%Hheqi6serI;x+nHU)7-Msc zG{1SB0xP8o{eSXn2TCML~TZDjEYySef~(lVF6eW1i{8N%+=>U z_e}sc)^B!Me*-7tZ{pmvC!=V+UXPl{Ip+n5T%wdO#7nUzP+Z~PY_V3^$L(eT5SX+D z$L%JDco*^dZegF~qm3z)H`9G-c%lR3p+lG{eCPaWr*q2bifP|3<71=ofcZZfPQ}ls zPsZGiyLRs&Kgo33Tx+Q~9=&Y|{7?$mZPB%@{ zycB)1t=XD(O`xoGw6*6|y_7vzRVD#pm8h+tjTHZj&&W=us%cXNV7(qW4$)L9_j)~j o$r=%@W}{4EN-34R=8QJC^zx>&bw9XG1VuP^47u(k^=d2X54>VYX8-^I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a0513349285f60df2ca366d242fb43114c07a7e9 b/fuzz/corpora/bignum/a0513349285f60df2ca366d242fb43114c07a7e9 new file mode 100644 index 0000000000000000000000000000000000000000..2fc19ca002cfac09e5e5a4149d6e303057df84ce GIT binary patch literal 72 zcmd<%{QuwQhbHF%2B!UM*B-j@yZ*nTVf}x@PW8Y4{}*=r=jS(K{@)V2u))CEnz6y4 c;s5{t|0TYN-REUsU|{&q$Oz&){AXYQ05Q}fj{pDw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a0861dfb249518ce15e41b913f4bdd0a9578f37f b/fuzz/corpora/bignum/a0861dfb249518ce15e41b913f4bdd0a9578f37f new file mode 100644 index 0000000000000000000000000000000000000000..db3e24f331cd9ecab5be4fbb1d8d088e00e85380 GIT binary patch literal 100 zcmX}g!3{t_5QX7k!yK$0I8uW~Cee*T^x`OL&;rLfNPgKp?05NJUjH^RLZk?x%R6T( gcO^;PvJJ8%&*`7L`@IXQs*LVnW_AIJFt2bp{4Dc5$^ZZW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a0e552c5909d975a5bc7cf5d9f413685cbb1ebef b/fuzz/corpora/bignum/a0e552c5909d975a5bc7cf5d9f413685cbb1ebef new file mode 100644 index 0000000000000000000000000000000000000000..f274858c338f0dc67f8aa096e1085fac98076929 GIT binary patch literal 118 zcmZSOX5eLIWc?2Ze_<>JDER+>=1iE_Oepw=24Lb4@axxq1_o)Ep8xAqxM60gsLb5S Iz`)=D0Dpl={r~^~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a10d104de831b8212a7a98c610abf9a278d7e202 b/fuzz/corpora/bignum/a10d104de831b8212a7a98c610abf9a278d7e202 new file mode 100644 index 0000000000000000000000000000000000000000..1321b700ce2488cd85f6fcb6de2ffa1e12c73dc6 GIT binary patch literal 61 fcmWe*V-SOYJ}{Wq*ViW|#>fB$0$?GiJQe@|qMsA&EF|NnmsKL8}>2EhOT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a27076a91b42bf16b8a7775b1fc8b8db3c887e41 b/fuzz/corpora/bignum/a27076a91b42bf16b8a7775b1fc8b8db3c887e41 new file mode 100644 index 0000000000000000000000000000000000000000..311578d5af6f40646233420b8970cfcbe580cbba GIT binary patch literal 211 ucmd=30RjvRAaV;5*owp^1u)PBKwR|W$7BWu21N!2Mv&|OfC%*;9P9w?H%VIn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a280d2c812778f6cc8929f59b6cab6a0e4816313 b/fuzz/corpora/bignum/a280d2c812778f6cc8929f59b6cab6a0e4816313 new file mode 100644 index 0000000000000000000000000000000000000000..91e80e2b4859f2518389c4625b4034cb0bcc6ffe GIT binary patch literal 8 PcmebI!FgZ~1Jiy05Lp9j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a3370bcd4d9fa898339f5ef917794ea74a72ed51 b/fuzz/corpora/bignum/a3370bcd4d9fa898339f5ef917794ea74a72ed51 new file mode 100644 index 0000000000000000000000000000000000000000..ab7d1787866d6a2ab58caf1e69d0ead74e317fd9 GIT binary patch literal 272 zcmZQz{m=8jI#&9300S5ZvL#NPI(4eSR09J8gQ@(7c@3Cfi;tcG$?*xP%&^8QhTYU#>AClF#pqDD~%AR|F1YX83CjVZjb-~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a37a61a36ab5ffe56b00a6ca53f6a1a215149760 b/fuzz/corpora/bignum/a37a61a36ab5ffe56b00a6ca53f6a1a215149760 new file mode 100644 index 0000000000000000000000000000000000000000..5a75e435d618780044222f452e129af668418e82 GIT binary patch literal 205 scmZQ(`Om<}fB8Qv1I+;=#0GWJENWn2IC0_xsvfWrP~*UW(Gg4o0MVBQSO5S3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a39a5596dc2a6e19bd886b868324fd6bd7f7f923 b/fuzz/corpora/bignum/a39a5596dc2a6e19bd886b868324fd6bd7f7f923 new file mode 100644 index 0000000000000000000000000000000000000000..7f8577a99c32d41d8d069255d4f5b64e59447859 GIT binary patch literal 139 zcmZSPQU3p*`Tzg_{}~w=7#RNl{|};&01K4Ogd~OmU}k^;imU^Ohh~N%iV8RY0Bg+@ Awg3PC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a3b09cbf4bd466d39041cebaceb641a44446b8f8 b/fuzz/corpora/bignum/a3b09cbf4bd466d39041cebaceb641a44446b8f8 new file mode 100644 index 0000000000000000000000000000000000000000..18e3ab8fe2e14bca84d2157d927df524f619281b GIT binary patch literal 11 Scmb<_I+MZaKf_CA1}6X?iUe%{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a3ba940ad968ef20bbe9d4ca93f5c70af06a83f7 b/fuzz/corpora/bignum/a3ba940ad968ef20bbe9d4ca93f5c70af06a83f7 new file mode 100644 index 0000000000000000000000000000000000000000..529c36f7c6e4672eae872ec908c7cc35bbeb2a55 GIT binary patch literal 512 zcmZSPDg2@FU&Ho0043#i_*bIQ%0|5pGXaX=`Fi%cSP7ZEAvrHrdW308l qzP>(K1zdt$z)G%01_p)(s3SkX9E$)93<3}k(-5N_BNg+de?I_MHCUV>P~*Sme?|sI06Y;IVE_OC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a4e2f17404db168144ef5e17d4cbfee9b12e2879 b/fuzz/corpora/bignum/a4e2f17404db168144ef5e17d4cbfee9b12e2879 new file mode 100644 index 0000000000000000000000000000000000000000..f4a614f25f8718c74bb6a1ab12d66b6d2f98f7da GIT binary patch literal 152 ZcmZP-_$wWtZe|_(JL^I~KmfyF0RSd11(*N; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a4f4f83d6ea91f34617504824a2fc783744491cc b/fuzz/corpora/bignum/a4f4f83d6ea91f34617504824a2fc783744491cc new file mode 100644 index 0000000000000000000000000000000000000000..fc3107295f2f24b12fb0125a3a69e4c5d35ea176 GIT binary patch literal 174 jcmZRUiR55hX&uYJz`)3$$iTqB!oct!3K#|nKsW~gBC`b z|BC=6T+XClymIIa10|q=63sC1 v?*#H0c`43k9pMgODMH?5_Mv!U%UGH6F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a620a20ff8ed33aa9ec3f02d33811b9bcec085b4 b/fuzz/corpora/bignum/a620a20ff8ed33aa9ec3f02d33811b9bcec085b4 new file mode 100644 index 00000000..c6da21ba --- /dev/null +++ b/fuzz/corpora/bignum/a620a20ff8ed33aa9ec3f02d33811b9bcec085b4 @@ -0,0 +1,156 @@ + + + + + + +öõõö + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fuzz/corpora/bignum/a62993d62ad44a7850e201dbf8d9363dd20acf76 b/fuzz/corpora/bignum/a62993d62ad44a7850e201dbf8d9363dd20acf76 new file mode 100644 index 0000000000000000000000000000000000000000..f05d57c76f3ffc026ea47632a0fd64d8c4a29f9e GIT binary patch literal 90 mcmY#feu9x<9|H);%F1f}hX89R4FwP>s34jg8em|62><|^V?@FL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a63ed127762ab71bf59da8f0baecb9960f2a1c6e b/fuzz/corpora/bignum/a63ed127762ab71bf59da8f0baecb9960f2a1c6e new file mode 100644 index 00000000..033a8744 --- /dev/null +++ b/fuzz/corpora/bignum/a63ed127762ab71bf59da8f0baecb9960f2a1c6e @@ -0,0 +1 @@ +2ÿ„]¡€0;;€0€ÿºÿÿÿÿÿÿSS­«ÿü \ No newline at end of file diff --git a/fuzz/corpora/bignum/a67e8d9a79fe7b91fa7646f41b2a01487ecc191d b/fuzz/corpora/bignum/a67e8d9a79fe7b91fa7646f41b2a01487ecc191d new file mode 100644 index 0000000000000000000000000000000000000000..11091163e956cf993a6800f2056c3d270432a44c GIT binary patch literal 642 zcmZQ%Bn~jJA*o{^19bfV|DWO5F|FA@7#M#1`0)d71Q&=E5Ww&s4&YJ{VCpqtf&s|R z31EKKg@Awnm=b>e|BU}TVLT|{61A>?8wLgpn#Z(CK{gBiQ2+7c$N&HT5%x1MP{RqG zK0g@P|Nm!3wHMth$bbtJ3edp#@nbSXiV-CC2SnWa!NDFMAJ4D#Kc4?PBg6my??Fau z{LkI(uI^-|#emc7sJ{-+t~bDg6WK~iKm*a5bFirVuLuqpP{@O2n-~PV7$E5g04wyE A(EtDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a6be63522b1cd53ae7a1fa1908fcb07523555761 b/fuzz/corpora/bignum/a6be63522b1cd53ae7a1fa1908fcb07523555761 new file mode 100644 index 00000000..16691800 --- /dev/null +++ b/fuzz/corpora/bignum/a6be63522b1cd53ae7a1fa1908fcb07523555761 @@ -0,0 +1,7 @@ +Vjeûûÿÿûÿ¿ÿ +ˆÿÿÆ + + + +ÿÿÿ@ÿ + *“ˆÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/a6d188843d75324b6e726213d7378932923d12f2 b/fuzz/corpora/bignum/a6d188843d75324b6e726213d7378932923d12f2 new file mode 100644 index 00000000..77f8c216 --- /dev/null +++ b/fuzz/corpora/bignum/a6d188843d75324b6e726213d7378932923d12f2 @@ -0,0 +1 @@ +„„„„„„„„„„„„„„„„„„„„„•ÅõÖŽ¤¹õ \ No newline at end of file diff --git a/fuzz/corpora/bignum/a6d22d1c4cd86d0e4ffc72f7d61addf7b32c9359 b/fuzz/corpora/bignum/a6d22d1c4cd86d0e4ffc72f7d61addf7b32c9359 new file mode 100644 index 00000000..68e94b05 --- /dev/null +++ b/fuzz/corpora/bignum/a6d22d1c4cd86d0e4ffc72f7d61addf7b32c9359 @@ -0,0 +1,2 @@ + +6!Zý@æÿø±ñññññ±ññxÚÚññññññÿññÿÿÿ­ÿ€ \ No newline at end of file diff --git a/fuzz/corpora/bignum/a6f3d0391b71d5ab0a319c0aa3a2c7f15bdac2f1 b/fuzz/corpora/bignum/a6f3d0391b71d5ab0a319c0aa3a2c7f15bdac2f1 new file mode 100644 index 0000000000000000000000000000000000000000..7ed4486f1784b953fa042bb6ad1d817dbf0eb996 GIT binary patch literal 1000 zcmb`FJxBvV5QX3U1VU`$4`>yL;NLWfmUk#(X*!z_K?G3{3&F}xqk_@O7%XiRBoYLP zZ4d>)LQ7GDosEcvAShXsb7b$lkTZ!ke%0=qo0<2P>+UawW1oxpn5E7ReOl;dC8=OR z0ZcHULxl&1;@o@6^0!bywE~<{mJFg`XxD#5M42oVNWUlQ*j0u1HWDM#JTMAS(FP@z zN~Oj|2!LW9HWlLWc--8+3lo_^gUBGm%;d-&{#UEtPt2~-U*^~*&FL}S&rG3dcJLjE zaM-Yzi$&rO26E~I2Pcn_-}(NcCY$@0*3W{bCzSWH6`yPA|7n_;Qa^rfuO<>1h(ugJ z4YF=qDZiB$P17`AKJSc4R!?(4y@EqjA{VV3>-xdGJS71nE81GHy2@Mj?u6D}QahhZ zy@@__NkuDL3J8}+A;fmApU;cdRVNoV-Y$UFy}h0FvzIyE2Uy$;r_<^5>n#frU|AU|7-qoxc>kDe~0t`q2Txbjt;H=3=GAosVNLtLE*;&1_mYu zrhkm(EHGUR3=E7=#Y`|UEI82|tSo<}zT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/a9968c7c9658ec720b7f91a6321d0ab1fcd57ac5 b/fuzz/corpora/bignum/a9968c7c9658ec720b7f91a6321d0ab1fcd57ac5 new file mode 100644 index 0000000000000000000000000000000000000000..150c857187f2f25b761db0f20c9a27050910c6ac GIT binary patch literal 40 ycmV+@0N4Ky4-cjOAoVzGNNJ&G%D{P%) z`~0nM2D6PRXuCL2>A>MNaF+JeQzhZVT*fXpr~w1eH((y#QLkppQoyQSm&p&kL8z}q{eE4FU G@A3x9QK(Y@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/aa232f04307a644849d083f67139748b2e1c2078 b/fuzz/corpora/bignum/aa232f04307a644849d083f67139748b2e1c2078 new file mode 100644 index 0000000000000000000000000000000000000000..38bcc888374176940b5f20e9f26c8f4123d101d6 GIT binary patch literal 126 kcmZQ(X8zCo9}Ir{`0;}Q3b)HVF>2Wt4dZ9X=;QKv?)m-9NPym$hRS^p3q YTIR&fuY!x&t)C@9e7!2VoQqTV07i~FC;$Ke literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/aaed52bafe1f3295ff77fdb285894de6f3087630 b/fuzz/corpora/bignum/aaed52bafe1f3295ff77fdb285894de6f3087630 new file mode 100644 index 00000000..a54dee6b --- /dev/null +++ b/fuzz/corpora/bignum/aaed52bafe1f3295ff77fdb285894de6f3087630 @@ -0,0 +1 @@ +LøÿÿÿLøÿ}ÿ¥´ \ No newline at end of file diff --git a/fuzz/corpora/bignum/aaef94681408c00e95dcf77642697f7512ee4a26 b/fuzz/corpora/bignum/aaef94681408c00e95dcf77642697f7512ee4a26 new file mode 100644 index 0000000000000000000000000000000000000000..963621011094356ca0172c2945a36409e4d96a4b GIT binary patch literal 26 icmd<*H){Uh65Ft_!NA&@vB99>|1L&`^=nuE{{sMtlndwp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ab0ec4af7b7ef8e899315185a1ecca245a8bc7ae b/fuzz/corpora/bignum/ab0ec4af7b7ef8e899315185a1ecca245a8bc7ae new file mode 100644 index 0000000000000000000000000000000000000000..c3b9886349b336e7c31e605583064be771a8234d GIT binary patch literal 128 zcmZQ(h5>G_P6h!6u1Q+||8LyL#pv^&fq{WpgMs1y|Ns9Z87Kpi|GzUhFfuT3!Hp3C JvHmkK004xD4mJP) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ab7b5b1e75083387ef835bd4252a85a84b8eec34 b/fuzz/corpora/bignum/ab7b5b1e75083387ef835bd4252a85a84b8eec34 new file mode 100644 index 0000000000000000000000000000000000000000..e0d3038d9c11508f570ac2f31d3de96385d23029 GIT binary patch literal 77 zcmdO_(sTI#-{JcI|69ZVgMif!YpWlB|Nlr?^IuVG_KzPwn*RU)(aD?e|Njpzj>7*x g{{R2a@PGCX1_rBR$BrEiTp&J- zhXS-Fb9MYL?EKFx6Uo6CYrT?zfq@Zb2)YXx6k#&EA&kQQk4%hgFhRUPC@Yoe_y7Nl z_W%F?|M6oo!~g$QKmK>JHG_Cec~1ZSGHCr!{NK;;zmb9A{r?}<3=9lWe;uCfhkKs^ z#M1obp!v(;`v3p`9j^cHsKsrg1Q`5=P!bY*p$rGGml(KUKKuWlLE$Zeg97TIJZ;>z U-~s<3;m8OJb#$fw+5a;D08mYYRsaA1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ac0371f5a1ca82d50551ee022ced2cfdad4c7ce8 b/fuzz/corpora/bignum/ac0371f5a1ca82d50551ee022ced2cfdad4c7ce8 new file mode 100644 index 0000000000000000000000000000000000000000..c2a4a9e387cecc0517d93265489d586f4fc01945 GIT binary patch literal 74 zcmd;O{m)<^$Hc(EFjsB`1IygGbN4eeF4wYdm^*i_fq{X++_`fm&Rvu29`?T>t#LU> eM$4L$larI<6(^^#fx*=NjHL5*%m3tQSpxvMof`fC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ac13e17354f5bba6691a66a796038ae543fdce86 b/fuzz/corpora/bignum/ac13e17354f5bba6691a66a796038ae543fdce86 new file mode 100644 index 0000000000000000000000000000000000000000..27df03cb1be340212615ca8f9ca256e8e72fdd32 GIT binary patch literal 135 ScmZQ(W^Vi6z%a1Dya50X&jQ8( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/aca3063b46b9d5dc485b63a3037d885473fdc26c b/fuzz/corpora/bignum/aca3063b46b9d5dc485b63a3037d885473fdc26c new file mode 100644 index 0000000000000000000000000000000000000000..68bc184bf3b1a50a9b918f3efbf1b5210f7d5c0d GIT binary patch literal 134 RcmZQ(W@apCU>I1?004iM0eb)d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/acc96f7b3bd448174e35dc696796659b48213dc2 b/fuzz/corpora/bignum/acc96f7b3bd448174e35dc696796659b48213dc2 new file mode 100644 index 0000000000000000000000000000000000000000..417cd25453bffedd055907cb2a7c4202783a0c26 GIT binary patch literal 66 zcmZQ&m0G`k{p|JY*Z*Sp&j17ewHkkDX}K{lq)0NXGBV&dfPw!|U|?Xt#+o3W)!4iT{iS2#CfCi2wip0LI2DoA>|#`1ttv04D$c|M&|3ZM#P&LOLqJ DCej#I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ae8e48a37d16fdb04364c639681f966d78b30fd4 b/fuzz/corpora/bignum/ae8e48a37d16fdb04364c639681f966d78b30fd4 new file mode 100644 index 0000000000000000000000000000000000000000..ba8ba960ab25552f071d95f882a660565f7fa8b3 GIT binary patch literal 66 ocmWe=FkoO{a={6Xz+@a4tYf7a_!t-%8Nk4Sfq@}~fq}se0PTGYa{vGU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/aeaaa0983ecc1d76881e2d79f54cce9e909c6201 b/fuzz/corpora/bignum/aeaaa0983ecc1d76881e2d79f54cce9e909c6201 new file mode 100644 index 0000000000000000000000000000000000000000..5161f8ef6470b0118b73e5c417f2a83c81754c8a GIT binary patch literal 89 zcmZSn$7R*=|G(G&|DB!xVPL|4#mKg$ZTz49i~ZjZ6a4@G3yA6X>-Yb{Le>8q-v9qI h{Qs}{|GzpHS7c-)!~g#sT%C;n*}oS4|Npat3jjzaJeL3f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/af17e859c517771ac0d0c7eacba5ff29bfcebdc9 b/fuzz/corpora/bignum/af17e859c517771ac0d0c7eacba5ff29bfcebdc9 new file mode 100644 index 0000000000000000000000000000000000000000..fd3f5b122438fa69d4bbdb0f64e101de0315aa2d GIT binary patch literal 129 kcmZQ&|Iff^{X6T!i~qQR0d6TI@DGWN1sFiUe;5M_0OW9KLjV8( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/afb4365979079272a0052ab6e5344da764c3796d b/fuzz/corpora/bignum/afb4365979079272a0052ab6e5344da764c3796d new file mode 100644 index 0000000000000000000000000000000000000000..73192333f1cd48f2c57a50eadf594fb97bfdde99 GIT binary patch literal 93 gcmY#feu9w!4rFCzwf;kZHI#+|h!j*1O%5jj0CMm~0ssI2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/afca1d87339c759a65a87f62e0538469327b8a28 b/fuzz/corpora/bignum/afca1d87339c759a65a87f62e0538469327b8a28 new file mode 100644 index 0000000000000000000000000000000000000000..baf536370729661f9b57b9aad4bd25f96da847d0 GIT binary patch literal 48 zcmd<#;`ztOr1<~Fb&)^+|Nr<820~e>Ouv8s|NnnKi2F}~;Xm*H3HK)${P=Mn0Ok-N An*aa+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b015bd5adb8df8f3cce0b979ce0ca6255cd203a8 b/fuzz/corpora/bignum/b015bd5adb8df8f3cce0b979ce0ca6255cd203a8 new file mode 100644 index 0000000000000000000000000000000000000000..f61322ed1a01465f531a207896fdda7be0d8eb37 GIT binary patch literal 64 zcmZQ&m0G`k{p|JYdk#EW|BK-~$LIeHQ1BlFY;0`24lyuVFfc+mHox-tneX4fe;*?I F9{|dAAlU!_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b01a2d92b580d7e84169f371e236086c204403d6 b/fuzz/corpora/bignum/b01a2d92b580d7e84169f371e236086c204403d6 new file mode 100644 index 0000000000000000000000000000000000000000..0d8e0b959959655edaca56255f848620978cba78 GIT binary patch literal 126 VcmZQ()?{n=4+RW303ms@0RX8l5T*bC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b07b4468374e13c1d45c379e5b15c8ff4f13c083 b/fuzz/corpora/bignum/b07b4468374e13c1d45c379e5b15c8ff4f13c083 new file mode 100644 index 0000000000000000000000000000000000000000..fb6985e0b31dfec59a2fc07127e7ef09b1102373 GIT binary patch literal 69 zcmZQ)XJ^-5dS8)CsFocB82Ef5rb$ K9smFT{{aBV${?Ho literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b0cb51a586e2b92cc1efca8aa50e096268feafbd b/fuzz/corpora/bignum/b0cb51a586e2b92cc1efca8aa50e096268feafbd new file mode 100644 index 0000000000000000000000000000000000000000..b49421e34227c6a04451fb6263b44a1d306d42f0 GIT binary patch literal 18 VcmYf5`2YX^{~!N<{I`Z+1^|q84mbb+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b0cc90631979532ecf7a60517bfe40bea9677311 b/fuzz/corpora/bignum/b0cc90631979532ecf7a60517bfe40bea9677311 new file mode 100644 index 0000000000000000000000000000000000000000..9ad33c2a262513be450600549839f9d48d1b1db9 GIT binary patch literal 72 zcmV-O0Jr}NCkhIP|8a@`j0OmZ#tMk}|Ns6uIn`wN3W)z3`^z2w|4jHg|Nj60!v8UU e|M&ng0QmU3M_H!K|5H<~s{ng2ODh2c2mkj~%7q_AmiyHJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b15821295a3b68835b1e5c6a67f6856049e8ea01 b/fuzz/corpora/bignum/b15821295a3b68835b1e5c6a67f6856049e8ea01 new file mode 100644 index 0000000000000000000000000000000000000000..2b15720e5f9546d30439c4d813325d751c6cdf2a GIT binary patch literal 100 qcmd-n{Gsvxzt4XM2J2YqU;qCHWO>T`#|Esh3I6}j00r1(ApijK^ibpg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b165040b54ee8a58c0c7512e6d74f7d851d6d2e5 b/fuzz/corpora/bignum/b165040b54ee8a58c0c7512e6d74f7d851d6d2e5 new file mode 100644 index 00000000..2435b0bb --- /dev/null +++ b/fuzz/corpora/bignum/b165040b54ee8a58c0c7512e6d74f7d851d6d2e5 @@ -0,0 +1 @@ +5JÊÿ €€€€€€€€€€€€€ÿ™0ÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/b203ec6ffd4af0172de0c36718c5712c9c7560e2 b/fuzz/corpora/bignum/b203ec6ffd4af0172de0c36718c5712c9c7560e2 new file mode 100644 index 0000000000000000000000000000000000000000..a36607bf246b52e0dd5dbc78cde3fdcb5d91b624 GIT binary patch literal 126 hcmZQ(R{sB=nVFdZ1~gy{C}3oSv8W5U7#JA-0stSS17ZLG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b2311f1e57ec524b6f9bb788dd40c3e73a717bd9 b/fuzz/corpora/bignum/b2311f1e57ec524b6f9bb788dd40c3e73a717bd9 new file mode 100644 index 0000000000000000000000000000000000000000..f7b66be945731595db470392ce6c10c402253521 GIT binary patch literal 24 fcmXqLFlb<74&~xp(qPaaXllT~pv}p^z`y_iMO6e) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b25973397c5f92a6ceec3752cc591fcc937e5ba0 b/fuzz/corpora/bignum/b25973397c5f92a6ceec3752cc591fcc937e5ba0 new file mode 100644 index 0000000000000000000000000000000000000000..322ce63543e004a470971b93eda0cace04c0657e GIT binary patch literal 255 ocmWgH%<~@)5My9q`2Sx7yP|6#jZ^XHrW#=2gBZnt4NzhW0K)*@S^xk5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b26d282dd3f19cf0e7117acc6c872b383ac5edb4 b/fuzz/corpora/bignum/b26d282dd3f19cf0e7117acc6c872b383ac5edb4 new file mode 100644 index 0000000000000000000000000000000000000000..ad1a321cf66c31ca783f858ee6f6e9e57b566f7c GIT binary patch literal 40 qcmd<*=U@7dtFZIG=6|jKV8FmIW5$gC4FA9!vH$;lerR$s{s#cs5*TU# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b29e6e95f3f0a0f27b8c8b9c9a1a9da317a99a5d b/fuzz/corpora/bignum/b29e6e95f3f0a0f27b8c8b9c9a1a9da317a99a5d new file mode 100644 index 0000000000000000000000000000000000000000..840ab3a47de62945279898add3bc7fbea63af946 GIT binary patch literal 256 VcmZQ({?EwG#K7<$3K&Kh006F<2@C)L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b2c9dc498559f41ed7cefce8d6afb801acdad78c b/fuzz/corpora/bignum/b2c9dc498559f41ed7cefce8d6afb801acdad78c new file mode 100644 index 0000000000000000000000000000000000000000..65f4942e3d85240fa9629c5e298c6566b27a5e24 GIT binary patch literal 189 zcmZQ#>R!auIB)W#N00tHd|E$!`l;SOfByV=D9=C?5CEzA|DPze3=E5y8VRXnLMZUZ I4iE|$0G#$2-v9sr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b38c174dc663a5f8279374578a6aac90da6ff99b b/fuzz/corpora/bignum/b38c174dc663a5f8279374578a6aac90da6ff99b new file mode 100644 index 0000000000000000000000000000000000000000..0bc2da944822477dd992efc6d555b29690e8da1b GIT binary patch literal 144 acmZQ(W@aql;AmhNV4(G%;XlX!|7-xF@dZBs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b3ca8d789e96c027256f820c1aff10528e509059 b/fuzz/corpora/bignum/b3ca8d789e96c027256f820c1aff10528e509059 new file mode 100644 index 0000000000000000000000000000000000000000..b5be187db66ffb1bf03ac9821c62987fc9bc4d81 GIT binary patch literal 134 RcmZQ(X8zySz%a0&0RRlk0*?Ry literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b4217fc786c4fab1657a72c4a91a083faa6d828c b/fuzz/corpora/bignum/b4217fc786c4fab1657a72c4a91a083faa6d828c new file mode 100644 index 0000000000000000000000000000000000000000..a6e0d6f6864b0722c3a37e53f42237513d6a8aae GIT binary patch literal 40 jcmd<$vi`xyz|hgxq4obi!>|8f&;bGe88nZ9SRfhzq(c?A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b44e8e9fc2873177da968a5948848fa2a34951ab b/fuzz/corpora/bignum/b44e8e9fc2873177da968a5948848fa2a34951ab new file mode 100644 index 0000000000000000000000000000000000000000..3995da8682cf4ee91f4024a916b5142293025d73 GIT binary patch literal 53 zcmZSJ={R%d|9^v1UWfkguK&-)z`*dItKx3>Cm^K^0{H0J4E5n*aa+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b61027c382dc799042d32ebc2d7b704dc84da22c b/fuzz/corpora/bignum/b61027c382dc799042d32ebc2d7b704dc84da22c new file mode 100644 index 00000000..3214baf3 --- /dev/null +++ b/fuzz/corpora/bignum/b61027c382dc799042d32ebc2d7b704dc84da22c @@ -0,0 +1 @@ +Jø ÿÿy‡ \ No newline at end of file diff --git a/fuzz/corpora/bignum/b650a2a1be999019ebb348f29bf77415d70f27e8 b/fuzz/corpora/bignum/b650a2a1be999019ebb348f29bf77415d70f27e8 new file mode 100644 index 0000000000000000000000000000000000000000..122dee7b005816620b1ea0e4c771e5fe66c4e6ce GIT binary patch literal 68 zcmZQ)XJ=RBx^HQ0V93CkYMN$fl9*_0X`YmpW?*EQW@2QVY>;YhW^R;dV4NzHmCE${ V|9{~mQ!}GT5IFP8=Lh@${{U487C-<1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b6695f3a98bc4a93b61bbc65e5c1ac8709fec690 b/fuzz/corpora/bignum/b6695f3a98bc4a93b61bbc65e5c1ac8709fec690 new file mode 100644 index 0000000000000000000000000000000000000000..368edb498168f4a21cff1e27ed07c320ca06241e GIT binary patch literal 18 WcmdO}{m$6P$WX_~z+lY)0!#oToC2Hx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b66b38ab43c28589a4e71fc53b0424e17a369aba b/fuzz/corpora/bignum/b66b38ab43c28589a4e71fc53b0424e17a369aba new file mode 100644 index 0000000000000000000000000000000000000000..c2e59abedc58c72b61f894d2a547d9ede81ff084 GIT binary patch literal 41 vcmd;5nA}!ac(8e|V)I@_7M3;T|NplIFqj?D{Qv*||G$6#W(t59{}~tnt}que literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b67c62b920a2c6dfae903736240bc017191edbed b/fuzz/corpora/bignum/b67c62b920a2c6dfae903736240bc017191edbed new file mode 100644 index 0000000000000000000000000000000000000000..0eca6aab18030b707d91501a658c393a9874642b GIT binary patch literal 16 TcmdO}{m%HGk&i*00Sp)cA$9_k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b6adc1a0356017bcacb2b664c2083f98ef2688d4 b/fuzz/corpora/bignum/b6adc1a0356017bcacb2b664c2083f98ef2688d4 new file mode 100644 index 00000000..64c7e8e7 --- /dev/null +++ b/fuzz/corpora/bignum/b6adc1a0356017bcacb2b664c2083f98ef2688d4 @@ -0,0 +1 @@ +)ú@)ú@×ÿÿÿ@×ÿˆ} \ No newline at end of file diff --git a/fuzz/corpora/bignum/b6fe4a707ce5e6596596306284ae02c6ac26a532 b/fuzz/corpora/bignum/b6fe4a707ce5e6596596306284ae02c6ac26a532 new file mode 100644 index 00000000..5ebc1025 --- /dev/null +++ b/fuzz/corpora/bignum/b6fe4a707ce5e6596596306284ae02c6ac26a532 @@ -0,0 +1,2 @@ + +Å÷(ññ±ññññññññññññññññññññññññññññññññññññññññññññññññññññÎññññññññññ(ÿ!öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽˆÿ* ' ÷ \ No newline at end of file diff --git a/fuzz/corpora/bignum/b75d42fc086ab992bcf74e2fdcb38469b7381e47 b/fuzz/corpora/bignum/b75d42fc086ab992bcf74e2fdcb38469b7381e47 new file mode 100644 index 0000000000000000000000000000000000000000..9fe289705ef3fce732eab9f29974308a1177b7e8 GIT binary patch literal 171 bcmZRPV`5?8;o;$F01*&i1!D{#V88?b0Kf;Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b771318805bd5b870fb717cd36edc597c22e39b1 b/fuzz/corpora/bignum/b771318805bd5b870fb717cd36edc597c22e39b1 new file mode 100644 index 0000000000000000000000000000000000000000..c3797c55bc6570d7bf0a3e14d87571546bf8641c GIT binary patch literal 239 vcmZQ(`Om<}fB8Qv0|O%ieE`%Rb<%8WU|=|L;sh~zKn8>DK=u%$BUmc{gxUsL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b7e06d2d3f55beaf6ecaa53cd8458e5d9ab57b0f b/fuzz/corpora/bignum/b7e06d2d3f55beaf6ecaa53cd8458e5d9ab57b0f new file mode 100644 index 0000000000000000000000000000000000000000..98a719381b526f265ddf7a59a4383ab9e06fcda3 GIT binary patch literal 70 zcmd;N&vtSW{civU3=9VU4gRwW{r~?TDq>(@2$DGlmj3_$zp0^_p(&CyM431MTB;cz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b806e3f9e9f1a03b00e2088e352fbcdaac75b913 b/fuzz/corpora/bignum/b806e3f9e9f1a03b00e2088e352fbcdaac75b913 new file mode 100644 index 0000000000000000000000000000000000000000..89b32a2425ee3c60946a47663c8f9c1e07fb8955 GIT binary patch literal 104 zcmaKkp$)(=5Ce@}5E5F@m46e@l64|o^(`st5nDRThlc?{(6=v0JxEejd>Ybm{kc@H JVAH&pn%o1lHoyP? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b82af8fd1b3e0f6a02caa6075c331dc35e842322 b/fuzz/corpora/bignum/b82af8fd1b3e0f6a02caa6075c331dc35e842322 new file mode 100644 index 0000000000000000000000000000000000000000..56d1f70cb5fb17567831a0f95b4f97cfaeb6a971 GIT binary patch literal 151 icmZQ(ja0CVwGLvy3Z`QfMF18AlS)8qw-(DoEiC{;LL~u=9Tp8%M`6u8#lz|1%srrZxKq1H+FWKYlQ%{r~^}2iO1H-R|mQj0_GJ S8NlE_Bg20UE{5>P|Nj9TMIEUC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b96610f47a05273d282bde219def415556a5336a b/fuzz/corpora/bignum/b96610f47a05273d282bde219def415556a5336a new file mode 100644 index 0000000000000000000000000000000000000000..ad9233d727fe2cc90eede701b749ed7652c3e73d GIT binary patch literal 114 kcmZP-_zwjlFJHcVnROu`AbJJ7U1_mt#Ek(FsE?EGsoq^&1KL!SdNKS_TS~36se>VgG D`uQq{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/b9f0a4a7eb71f7e2dca960e3082893111ae9488b b/fuzz/corpora/bignum/b9f0a4a7eb71f7e2dca960e3082893111ae9488b new file mode 100644 index 0000000000000000000000000000000000000000..8321e84040a25ecdb453fa8ef91c83bba8849853 GIT binary patch literal 1156 zcmb`FKTiTN7{=dn7)}z5mk?KTi7d}AajQFNWJ^?-;i^HK3lxoPKb<}u~;3JM;tU7P{Fs?^K_DdWr zt(`p3*d}ZcG3|A2)E6lI`v_(EwzNP=(d|cysad06g4B_Wv73ef;Qc&zk=N_{#H^31 z-uuyR+mO2OqeLV^_g%Nr*=z-4pG8sBr=~0bsDfco7z_xxyL-FM+|bvTA`HV25@Bfk zJr?(-jIP28f%01I>g4r+IqkBGjyW_DaV+?(fgh6G;oL#o0SMXxo*p~EiCqRX%gTQZKRf; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ba3273910f465dd2acd8cef785d2176539133d7e b/fuzz/corpora/bignum/ba3273910f465dd2acd8cef785d2176539133d7e new file mode 100644 index 0000000000000000000000000000000000000000..ffc220ece8f261574ea2b2b31da41f525028bf9f GIT binary patch literal 205 ocmZQ(`Om<}&+wm>f#!e_Zi70UMHFa2R|VFOFphzN(Gjc!0L{(=EdT%j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ba3865f4b4d920a22c436d921e59a286d3abd6d3 b/fuzz/corpora/bignum/ba3865f4b4d920a22c436d921e59a286d3abd6d3 new file mode 100644 index 0000000000000000000000000000000000000000..b979a9b3986615fddd0c9b95de13beb48fb802b9 GIT binary patch literal 95 rcmZQ(W@g^F@jqU`fL9g-7@GI8FfcGgGAl7KFfe>Kj5K0U2eFs|(da|Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ba6cb35e9ce6bad3bb711c54f398b507c3471965 b/fuzz/corpora/bignum/ba6cb35e9ce6bad3bb711c54f398b507c3471965 new file mode 100644 index 0000000000000000000000000000000000000000..a35bba3799110a3572416ce02c766e05a4bc1ae3 GIT binary patch literal 120 ycmd-n{Gst*!}dGlf1m#j4A!yIzyALZ$nuo=PXu5jpoWo=0Z9d%&G7#}!+!utd1Lqh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ba76c84c59574475451bc81256c3de91f03d6a87 b/fuzz/corpora/bignum/ba76c84c59574475451bc81256c3de91f03d6a87 new file mode 100644 index 0000000000000000000000000000000000000000..2d4751d618eb0030caacb69b5c5ecca9b3fb88b1 GIT binary patch literal 48 dcmWfruxDamU|?ZjVEm5&3|tHh2p$q(004k$Ah`el literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ba919b5881e5a74c582a1c6c01d2db5cae03a48d b/fuzz/corpora/bignum/ba919b5881e5a74c582a1c6c01d2db5cae03a48d new file mode 100644 index 0000000000000000000000000000000000000000..2d524c064712bb81583e3928d75ba8f46a43d86b GIT binary patch literal 16 YcmY%N{#U=z`!7?T)4#tA8vp+T07LBvwg3PC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bb097d04473008fc91add65bee472f07cc782046 b/fuzz/corpora/bignum/bb097d04473008fc91add65bee472f07cc782046 new file mode 100644 index 0000000000000000000000000000000000000000..68d2d84d41af6a55fafd4fd43f7e01f18a116316 GIT binary patch literal 52 zcmZQ5o&7_eVQJe^cJJl?y?&@$bu*c9lyjAbhs$zl{r|5id+{Oz!+#|3@Be=QWw;$H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bb32a902235b0de98db7d126863ae5c15f4d424a b/fuzz/corpora/bignum/bb32a902235b0de98db7d126863ae5c15f4d424a new file mode 100644 index 0000000000000000000000000000000000000000..d7f5987681459e1233bfeb7b39c41f170bee0758 GIT binary patch literal 32 Xcmd;5(3;%w9~CGtFfc$wHvb0zd0H4P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bb33acdd01b0fa9a07208528ee157ace4feec1bd b/fuzz/corpora/bignum/bb33acdd01b0fa9a07208528ee157ace4feec1bd new file mode 100644 index 0000000000000000000000000000000000000000..d43b074760a8eeb1a8d9f32d0c10d7b59a572aba GIT binary patch literal 600 zcmchT%LxK86h&V?v(dM(0=Ld&HA@*=un1d72U**N4OoUkum{T!1i6wABtl@&g=h70 z^S*Z_M;>eV*5uMqr80nCOHItoj!r}*Lii8x1C1LJ1W;fxiiA#S`M-yaL+Kb-$N&HT8U7Oh`;h>4rN@qG&Hll_@Z-mi9}H^$|NsBN^*?vF KySkH=)$-gpG(G3ht*Z%_mJt-NV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bbb43034048f648b15fa045aa6af54db1ad7e6bf b/fuzz/corpora/bignum/bbb43034048f648b15fa045aa6af54db1ad7e6bf new file mode 100644 index 00000000..6ee40945 --- /dev/null +++ b/fuzz/corpora/bignum/bbb43034048f648b15fa045aa6af54db1ad7e6bf @@ -0,0 +1,2 @@ +HHHH!ˆÿÿA +ÿñ# \ No newline at end of file diff --git a/fuzz/corpora/bignum/bbdf196f92db4360a5cc17919bae65c5067036b8 b/fuzz/corpora/bignum/bbdf196f92db4360a5cc17919bae65c5067036b8 new file mode 100644 index 00000000..b625514a --- /dev/null +++ b/fuzz/corpora/bignum/bbdf196f92db4360a5cc17919bae65c5067036b8 @@ -0,0 +1,2 @@ +!ˆ ( +Åÿÿþ ÿøøÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/bbe59171082a9a76311a292bcf2966cfcbc04b56 b/fuzz/corpora/bignum/bbe59171082a9a76311a292bcf2966cfcbc04b56 new file mode 100644 index 00000000..890df4d3 --- /dev/null +++ b/fuzz/corpora/bignum/bbe59171082a9a76311a292bcf2966cfcbc04b56 @@ -0,0 +1,3 @@ + +!ÿ¡ÿÿÿÿÿÿÿ +*ÿÿÿ¡ÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/bc1791e9df6f8ad09b1d073cc461a43dc299af46 b/fuzz/corpora/bignum/bc1791e9df6f8ad09b1d073cc461a43dc299af46 new file mode 100644 index 00000000..6391be63 --- /dev/null +++ b/fuzz/corpora/bignum/bc1791e9df6f8ad09b1d073cc461a43dc299af46 @@ -0,0 +1 @@ +†¥†¥¥Q \ No newline at end of file diff --git a/fuzz/corpora/bignum/bcfe0096eb81abfaac040dc02b43d003dd451dbf b/fuzz/corpora/bignum/bcfe0096eb81abfaac040dc02b43d003dd451dbf new file mode 100644 index 0000000000000000000000000000000000000000..8230c96c8396a838d65630b423d3bba2f6329493 GIT binary patch literal 96 TcmZQ(X8!;FKLe$}0ha*)7cv7k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bd1d74c27793973da701de6b535acac15a64be8a b/fuzz/corpora/bignum/bd1d74c27793973da701de6b535acac15a64be8a new file mode 100644 index 0000000000000000000000000000000000000000..2812b0e46578703fb234a4ee9cbb18596df3fdcd GIT binary patch literal 228 zcmZRUiDY1mwKmYou-6Lq*a6x40c~Uko&W#< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bd78d26e0b23876b5ff33528191d20f578edcbed b/fuzz/corpora/bignum/bd78d26e0b23876b5ff33528191d20f578edcbed new file mode 100644 index 00000000..09fdb72e --- /dev/null +++ b/fuzz/corpora/bignum/bd78d26e0b23876b5ff33528191d20f578edcbed @@ -0,0 +1 @@ ++›ÿ›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ \ No newline at end of file diff --git a/fuzz/corpora/bignum/be26cd734419b4889072c3fa64305be3d459adc3 b/fuzz/corpora/bignum/be26cd734419b4889072c3fa64305be3d459adc3 new file mode 100644 index 0000000000000000000000000000000000000000..10aafc8916e29cff5feaab15e379df555a334d99 GIT binary patch literal 97 vcmZQ(W@g^F@joWuWR!auIB)W#N00tHd|E$!`l;SOfByV=D9=Dopn%gd0OolQu>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bef40ad6b818dc4592f716bb4b30fab1387858cb b/fuzz/corpora/bignum/bef40ad6b818dc4592f716bb4b30fab1387858cb new file mode 100644 index 0000000000000000000000000000000000000000..cf735753ab4f7444614af0759ab312a050f81dfa GIT binary patch literal 32 hcmdPo=jYSp(puWKbZMa0|Nk1c-x>e&F*3kJ7yz%g3orlx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/bfb6550aaf17f1379660d0a8989031878e225498 b/fuzz/corpora/bignum/bfb6550aaf17f1379660d0a8989031878e225498 new file mode 100644 index 0000000000000000000000000000000000000000..6f2648df91a5b83bd7d97ee58275cd0d3682a850 GIT binary patch literal 575 zcmd|AU|7-qoxc>kDe~0t`q2Txbjt;H=3=GAosVNLtLE*;&1_mYu zrhkm(EHGUR3=E7=#Y`|UEI5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c02a3725bbacc2424c984548570d4ef6f6a6de4a b/fuzz/corpora/bignum/c02a3725bbacc2424c984548570d4ef6f6a6de4a new file mode 100644 index 0000000000000000000000000000000000000000..939eeb9a3742b5f09c4cabe06261cd6372c49bab GIT binary patch literal 42 dcmdPk`u86Mv^st;F#P!Og8>~dLIgPe0|0RD3&sEd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c04435fac55ece02ead586bf38d87fba3e66159f b/fuzz/corpora/bignum/c04435fac55ece02ead586bf38d87fba3e66159f new file mode 100644 index 0000000000000000000000000000000000000000..c8e7e1da2c5841f902ec6229ac7e966e038553ca GIT binary patch literal 20 XcmWGNZ}4B+_P_Uk2ncPu%D@N!hguA* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c0949dbdebe485b19917f0c37d4a19f8000994f9 b/fuzz/corpora/bignum/c0949dbdebe485b19917f0c37d4a19f8000994f9 new file mode 100644 index 0000000000000000000000000000000000000000..b2913194dc012cacca04a5bd2d78b7b6103ff09c GIT binary patch literal 93 vcmWfVUB#62Um#^K!^VXZSDgO)pH!fsp~3k7H%wQLY!4HQ!(1gs4Uh-`mJ&%? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c0c65a6927f5f9300ec7c41d02a48349f944eb89 b/fuzz/corpora/bignum/c0c65a6927f5f9300ec7c41d02a48349f944eb89 new file mode 100644 index 0000000000000000000000000000000000000000..fc0f6ba9666b0e08b19aa9158daa1d9125edc196 GIT binary patch literal 79 vcmWgV`VR%a|7*dR|9}7g|NlOmhYeVTGcqvn{y+Zz|9`7+F!lfc|8R8x^$tTI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c13441e813c0371804b3249ee79ca256263998a0 b/fuzz/corpora/bignum/c13441e813c0371804b3249ee79ca256263998a0 new file mode 100644 index 0000000000000000000000000000000000000000..23459c1a4c0dc6bfc03147e0c0a59290c0940005 GIT binary patch literal 14 QcmdPYRAk)2$N&LM01Yz%FaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c16ee237d0dc15a7fb5e2d4371934b576be7ce88 b/fuzz/corpora/bignum/c16ee237d0dc15a7fb5e2d4371934b576be7ce88 new file mode 100644 index 00000000..a664dd13 --- /dev/null +++ b/fuzz/corpora/bignum/c16ee237d0dc15a7fb5e2d4371934b576be7ce88 @@ -0,0 +1 @@ +q‰ÿú \ No newline at end of file diff --git a/fuzz/corpora/bignum/c176812305674a20436fd14a22e39a20ac414158 b/fuzz/corpora/bignum/c176812305674a20436fd14a22e39a20ac414158 new file mode 100644 index 0000000000000000000000000000000000000000..878214c82c22c66c2bc636908b26cff59f01ac6f GIT binary patch literal 35 XcmY%V!NC6WKNQ%Y0CgK1khm5AT@(@@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c17b15e0f74cc5fe557569841331e6554f6a5412 b/fuzz/corpora/bignum/c17b15e0f74cc5fe557569841331e6554f6a5412 new file mode 100644 index 0000000000000000000000000000000000000000..422d3532198af41d59382a9c488a18fe475d8b90 GIT binary patch literal 136 TcmZQ(iB#DC{{X|l0!0P@iaY}# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c188e11fe5c66709ac7dfe610b0f15aaccb8fa92 b/fuzz/corpora/bignum/c188e11fe5c66709ac7dfe610b0f15aaccb8fa92 new file mode 100644 index 0000000000000000000000000000000000000000..281ceb9e843f675be483c3547140ade06551e39a GIT binary patch literal 45 hcmd=30RjvRKYsj}48jaxzz7oq3;zL8_kM7&0|0@@9Nqu` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c1e58e966f00dfdcdb1585f92654eb361d406997 b/fuzz/corpora/bignum/c1e58e966f00dfdcdb1585f92654eb361d406997 new file mode 100644 index 0000000000000000000000000000000000000000..f8cbb04bd13f689c63f1c580871945fe7d089d24 GIT binary patch literal 254 zcmaKlAr8Vo5Je|dBve#k$X;O8GpM}?rUt||2n+|{4%`ZYz;FmSKxIFf0?8J^Q!{V= z%v9A@Qj_yxopT0Q^ymHNDGjp$nVUesjv9egXrOkV+NEiC1MGv_0u}XyZ{7?{;(dF> fe8}A6SG6Q!mq^L`cp|2s)so4JzepYR{qlGLP6kz= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c1fa47d38fb16123777c0df7b65f4a3757449804 b/fuzz/corpora/bignum/c1fa47d38fb16123777c0df7b65f4a3757449804 new file mode 100644 index 0000000000000000000000000000000000000000..4abc32152065996d3d09cf970013dc429db24df4 GIT binary patch literal 126 xcmZQ(W@hI24+cMe{P@8D1_B^52f}6mi`O6ls5lb9s~;U`X#8jV57xr|9{`7fCcyvz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c24ab80df7d5ab52c0a91bc77b48bb07229a2886 b/fuzz/corpora/bignum/c24ab80df7d5ab52c0a91bc77b48bb07229a2886 new file mode 100644 index 0000000000000000000000000000000000000000..6f9814fb5de75222a262a128e66882137b8e503e GIT binary patch literal 143 VcmZQ(iB$Oi|33o+Fhc180|4Xe1AhPj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c273305a97c73e0eddf416abc0dfdf99c9bcf815 b/fuzz/corpora/bignum/c273305a97c73e0eddf416abc0dfdf99c9bcf815 new file mode 100644 index 0000000000000000000000000000000000000000..bdac85e6e8e04ec23dc3938ebe8a4b2ba5f9d809 GIT binary patch literal 107 bcmWd=0|6~DQ88`?F|kM-;6J$l$vklYPu@l_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c2beaf4fb74a9e43c8b5256f92b921fdb780547c b/fuzz/corpora/bignum/c2beaf4fb74a9e43c8b5256f92b921fdb780547c new file mode 100644 index 0000000000000000000000000000000000000000..6d5cac9d12e6eedf91bfe1ecd3424291bd3c2025 GIT binary patch literal 128 VcmZQ(i)8u_2Mpu_mo&G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c307e364c04b858f1920e02afe00cd81a76af1ed b/fuzz/corpora/bignum/c307e364c04b858f1920e02afe00cd81a76af1ed new file mode 100644 index 0000000000000000000000000000000000000000..b5e316651c2bfd753f7922e9dea791455ba61881 GIT binary patch literal 200 XcmZQ(W@cWuZr!>Q41*pp;&UMYu^j`B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c30a1479b7d846b2d4b81146186a125be4a1bc29 b/fuzz/corpora/bignum/c30a1479b7d846b2d4b81146186a125be4a1bc29 new file mode 100644 index 0000000000000000000000000000000000000000..07f40cb7edaabb23981a6bb5935693f7c8876326 GIT binary patch literal 47 tcmX}fAr$~15Cy^2=O}?7>2;tFnbv(C1~*fkJ_De>fVBlxW}>NnV_us56fpn* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c32cc7c0432566ab59c8f48abd725cd8c07e77ae b/fuzz/corpora/bignum/c32cc7c0432566ab59c8f48abd725cd8c07e77ae new file mode 100644 index 00000000..45432348 --- /dev/null +++ b/fuzz/corpora/bignum/c32cc7c0432566ab59c8f48abd725cd8c07e77ae @@ -0,0 +1 @@ +×óÿUû€ € \ No newline at end of file diff --git a/fuzz/corpora/bignum/c41d8374667d32ff24fd4cdde499908e51667de9 b/fuzz/corpora/bignum/c41d8374667d32ff24fd4cdde499908e51667de9 new file mode 100644 index 0000000000000000000000000000000000000000..f1999fd2007f4203d759fc63dc01c410f954b9cd GIT binary patch literal 160 ZcmZQ!k%I#UY=9A)AU%K_<6H2}Uk0&)NV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c44830130766ba8b54fe286b821eb592ec7b4146 b/fuzz/corpora/bignum/c44830130766ba8b54fe286b821eb592ec7b4146 new file mode 100644 index 00000000..1b82c6ff --- /dev/null +++ b/fuzz/corpora/bignum/c44830130766ba8b54fe286b821eb592ec7b4146 @@ -0,0 +1 @@ +qñpw \ No newline at end of file diff --git a/fuzz/corpora/bignum/c4ce0bfb48a5543120795cbf2e5f325849f6af10 b/fuzz/corpora/bignum/c4ce0bfb48a5543120795cbf2e5f325849f6af10 new file mode 100644 index 0000000000000000000000000000000000000000..0def07ba7ff791ec146235ffef9bedb5f515ba4c GIT binary patch literal 4 LcmZS3W@G>W0EYlA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c4dd3b9289ab1a4873e0d1d9462edf70963a01d8 b/fuzz/corpora/bignum/c4dd3b9289ab1a4873e0d1d9462edf70963a01d8 new file mode 100644 index 00000000..8fea08d2 --- /dev/null +++ b/fuzz/corpora/bignum/c4dd3b9289ab1a4873e0d1d9462edf70963a01d8 @@ -0,0 +1 @@ +ø øø¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/c5cf0127802e0963ba05bbaf85060561855b691b b/fuzz/corpora/bignum/c5cf0127802e0963ba05bbaf85060561855b691b new file mode 100644 index 0000000000000000000000000000000000000000..f95ba542f93e3d4e27f6139b571e79cf752b5c1c GIT binary patch literal 8 PcmXRcJjKAsxRezD47mbX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c65bb211056eb0a089e5f3df091208835887d282 b/fuzz/corpora/bignum/c65bb211056eb0a089e5f3df091208835887d282 new file mode 100644 index 0000000000000000000000000000000000000000..0b8d402c555345e885eace9eb02f9d3a46916364 GIT binary patch literal 13 UcmY%V!q##9`gMkm$p2pp0We4hZvX%Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c692549bedbca78734f7becba84c7ec2d8ab5bff b/fuzz/corpora/bignum/c692549bedbca78734f7becba84c7ec2d8ab5bff new file mode 100644 index 0000000000000000000000000000000000000000..64950c4a7a9e8575f1f7bfd9c17163d6ca05efd1 GIT binary patch literal 38 bcmWgH%<~@%8Wf0}|WpD@Lc{{WBLX7m66 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c8e28322d6912546e409f70676753b7b619173a5 b/fuzz/corpora/bignum/c8e28322d6912546e409f70676753b7b619173a5 new file mode 100644 index 0000000000000000000000000000000000000000..a223d8258a8f1946cb5d2f5f08f8aaf91e89e8b4 GIT binary patch literal 384 zcmZQ(W@c9Z&%nUSfCAW2cw_^yNF3llDS(xim5~*T2AH${|DQP%COs1kX#L9LXP)`% z*M9~EX_%V->r}WIp_)}xX6|HQU~m9&VPez(aK~YQ7tZ_gH{Q9W!PUWe^#6YVB4v1i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c8f587e9f75c59b693e48e5d9ceb7b715e5fd99f b/fuzz/corpora/bignum/c8f587e9f75c59b693e48e5d9ceb7b715e5fd99f new file mode 100644 index 0000000000000000000000000000000000000000..b61adba823c6c13b2fdc19dae945d1812d93c73b GIT binary patch literal 62 zcmdK0{r~^QjsO4u|3CEq2iJ`o44VJ{t8;1n K|KGugECB#K|0a?E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c919ca664abe52d1de2832b2b4fddfd21773738f b/fuzz/corpora/bignum/c919ca664abe52d1de2832b2b4fddfd21773738f new file mode 100644 index 0000000000000000000000000000000000000000..b7a4cbe1128bce0009a954935cc71cdbc9782e3e GIT binary patch literal 95 zcmb3C-N42i%Eh^)!Jt9V)PR9On~{NwOOb(rA(G)g1H*p?4F(3T|NjO4|7UPuVCZ1~ r&${Wy4^7Sk4Br>-XX^d`p8*6QR1O1!m*TDZTlI{mG#Nnn|Ns90Jx(A0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c9252d4ffa30d1a01e3eb8bcfdb14e29c87f6051 b/fuzz/corpora/bignum/c9252d4ffa30d1a01e3eb8bcfdb14e29c87f6051 new file mode 100644 index 0000000000000000000000000000000000000000..37884e19845058490200785e2c4899cf06e3bf77 GIT binary patch literal 128 zcmZSh!TaOKj{nHuJ@Y>Dj2asM8UKT|u>S`D Dhv6o~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/c97f8a9c0e72c013ec5759fdfa9e8a7c93e54281 b/fuzz/corpora/bignum/c97f8a9c0e72c013ec5759fdfa9e8a7c93e54281 new file mode 100644 index 0000000000000000000000000000000000000000..aefdb62334ee53395a19763a3ecce60e6fa737f9 GIT binary patch literal 10 RcmcEe!NBu}%U(5Qe{#V2+Dd_yR^^h=j_X#?q*<_5pkh3!s9+8W_Gs}oURAW$)>(3D-2Z&xvS#oc@~7g(Cu%4h4>59`JPj2 z>%_rSAB^YDZ;UaNebqtU%H)d9LPGfJMMXqMA|f9m1Gi>8ib$pk!7A*-cG35PmC@M( zN>24jK(|t^M^CCVzs4H-mP~*%ez}7yNzGpVK{~<)G-ya%l?OC&(6Z#+bH)OTR%qrEuLO~d_V3xfSoy|JHYx)6fLe`Lql_V1cUx2A-g04nknrv3XCL0uA z!f&jBOw|=9_ny00#_+n^s)ZY64L&)p_wVTQAI-5(qg$G}%hF+>(AzV8Y0|hM?oUKF zGkczX2ypd5r;yE1R*OJ28hkrb2~U#_Z$5b!vMTy&1*_Q}#pWzc*OYvSA$?xh*Zzc} z!%;QfunfB@c52B&D$=uGF^$n#&rda%NUYUkrPec9ApDkF3q#zC5OOElvM~5$`~wv_ BN!QZ6= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cc914196da999c5525325649ac9eb8a90b536acb b/fuzz/corpora/bignum/cc914196da999c5525325649ac9eb8a90b536acb new file mode 100644 index 0000000000000000000000000000000000000000..28bb4b742cccac274f0e308036b8aa65e57e45f7 GIT binary patch literal 40 YcmcC`Ew7}cqy#3ggWq4?zh=+?0G!JSPXGV_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ccedf262a96788c6f89816050f9c8e7fa1bf2b67 b/fuzz/corpora/bignum/ccedf262a96788c6f89816050f9c8e7fa1bf2b67 new file mode 100644 index 0000000000000000000000000000000000000000..68dee22e053d460bdfcfe48e952f656396299558 GIT binary patch literal 167 scmZP)_zwlrzXP%u86e<7!0Uj3&kGu7GjKpfU;w591d!R(0yxYB045g?K>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cd5b607b083cbf7315289362169770c06c5e4160 b/fuzz/corpora/bignum/cd5b607b083cbf7315289362169770c06c5e4160 new file mode 100644 index 0000000000000000000000000000000000000000..0b40a8627a1f7a9666f0b430c4604f8e24507740 GIT binary patch literal 190 zcmZQ#VxB!)`#%&gKma3@CJnH&u(N9~y|4Mp;rjpo|CyM~I2`}qzNumG@6>;o!C1im z|Nj~P|NsAw_y3O{|NsBjFf^=-IcLPk+$qBGzwcuKQ#nf{2%KSHoICeF!?9ypvwtu! N{P^+X2ZI`e0RVf7H(>w( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cd9575b637a1826db4279d159a085ebbbaed60d4 b/fuzz/corpora/bignum/cd9575b637a1826db4279d159a085ebbbaed60d4 new file mode 100644 index 0000000000000000000000000000000000000000..1ee74f9053e0e8004251f7408edd5d511d537ebe GIT binary patch literal 167 hcmZRPV`5?8;o;$FU|9H{=NAJ6FoHw|6hIvU0{{hC35);$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cdec6e5e535f34bd6a598648c713c6a70c8c3ca9 b/fuzz/corpora/bignum/cdec6e5e535f34bd6a598648c713c6a70c8c3ca9 new file mode 100644 index 0000000000000000000000000000000000000000..acf4e0c337e56554811d55be947385b7100f162e GIT binary patch literal 24 bcmWgCOVndyVBr4GruUN{LaQ+-*Z&6qKm`UM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ce12ef3eda80d7c82aa6e2fa9cf51b70b957b209 b/fuzz/corpora/bignum/ce12ef3eda80d7c82aa6e2fa9cf51b70b957b209 new file mode 100644 index 0000000000000000000000000000000000000000..7b319086feb19713ff2f1b2889be73462dbe55e3 GIT binary patch literal 126 kcmZQ(X8zCo9}Ir{`0;}Q335BlLd(F&%&X{$E%q#PDCB z!GM8*$$`N-R{D29)&&`e$)XGl3=Ia~{{M$r)qrH<%m#&5Y_pLCK!AZEd^rQZB?H4R l1~4BEX3s=YiUJr>cnr(6{>lX?eqn2C6TRZ|L-YTE{{VVUUCICe literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ce76d4e6a0debdc58223b98baa90674bb949052e b/fuzz/corpora/bignum/ce76d4e6a0debdc58223b98baa90674bb949052e new file mode 100644 index 0000000000000000000000000000000000000000..0e5bf64d958228668925aa838892686f9c5227c9 GIT binary patch literal 62 zcmZQ)XJ^-6dS8)CsFocB82Ee?^eG F9{~TzAL{@B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cea37f32ef6a586af884adfea24064fbb944a65a b/fuzz/corpora/bignum/cea37f32ef6a586af884adfea24064fbb944a65a new file mode 100644 index 0000000000000000000000000000000000000000..f2264dd81b76dac852164a1a17118bda65766f7e GIT binary patch literal 140 zcmXxbAqoOf6h`5HykM}IMHq|t6k)Q#1-J}X;56ZdXAz7qS*(Dfm8IB<1 z7Y`gWvkL8WHZv-yX3cz5bCdArCg+?#FWd*H0}^#4M*FAE``%k`DVLMtgu=eLxHKGx Z(3S~WfaB_MAoU9^((iGm?(UL+>ld;7ISc>* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cea8bfadb412ce45be0fa4c7eb41db9b367d9507 b/fuzz/corpora/bignum/cea8bfadb412ce45be0fa4c7eb41db9b367d9507 new file mode 100644 index 0000000000000000000000000000000000000000..d4726dce7b803a28bf5bee3d2b473ea0a8554094 GIT binary patch literal 153 ucmZQlS7Z?m(z0f7P*h}C!>~t~L0DK=n1O+TkwJlxfq{jIfq?;p=?(z(e*=sF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cf15bc8a1feba9f07f131cbb4870f5cda5faca6c b/fuzz/corpora/bignum/cf15bc8a1feba9f07f131cbb4870f5cda5faca6c new file mode 100644 index 0000000000000000000000000000000000000000..f76243b5c4539de08af5a451dfa09278455c28b2 GIT binary patch literal 128 zcmc~zjIW4NTz-O)$$`N-R{FOf0%$To0OSAP|DjBQ{}A8}p&0go#bsq>wV)DEg{EGo K{`10w@B#qv7Dp5S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cf2880716db8ffd1b3e33e39d67caf4aac8bad75 b/fuzz/corpora/bignum/cf2880716db8ffd1b3e33e39d67caf4aac8bad75 new file mode 100644 index 00000000..2e73ba6d --- /dev/null +++ b/fuzz/corpora/bignum/cf2880716db8ffd1b3e33e39d67caf4aac8bad75 @@ -0,0 +1 @@ +ø øø¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/cfa6fe68f29f4452a39d6db568615ad051dab7c8 b/fuzz/corpora/bignum/cfa6fe68f29f4452a39d6db568615ad051dab7c8 new file mode 100644 index 0000000000000000000000000000000000000000..55bb4fb6dcac5a44c90d35ab1b97787a19577f7a GIT binary patch literal 100 ycmZSOWo2ajj|mu{;Q#-bGhwnbv4UT}{xdL0!_@p=r^3w$)vKa1b0-4>g98A{PC6C< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cfb3d610b96531ad745eb6ed218298efe3a17f17 b/fuzz/corpora/bignum/cfb3d610b96531ad745eb6ed218298efe3a17f17 new file mode 100644 index 0000000000000000000000000000000000000000..fe818c6fb230668e562d77d036352c797e26fa55 GIT binary patch literal 21 dcmYf5_^;X7d8+p#6C>My2Co1A|Nr=32mp8F3*-O* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/cff8cac33e9b520a4d13baf201b02fb1999f141c b/fuzz/corpora/bignum/cff8cac33e9b520a4d13baf201b02fb1999f141c new file mode 100644 index 0000000000000000000000000000000000000000..c9657a27bcbb202960cb623c53ced8fd468c7618 GIT binary patch literal 6 NcmWGv&Y*6|2>=E|0cZdK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d0f59d35916998b12167a94d801ef19f4ed8ebce b/fuzz/corpora/bignum/d0f59d35916998b12167a94d801ef19f4ed8ebce new file mode 100644 index 0000000000000000000000000000000000000000..f7b4614c7ce1428e4772d7a71fafc24885fb11be GIT binary patch literal 40 bcmd<#`S%|Ua5MjBX6F9?|Gx$U1c2lLN~;-0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d0f78b088f23aeec7727dfb7c3d05a968cdf4d59 b/fuzz/corpora/bignum/d0f78b088f23aeec7727dfb7c3d05a968cdf4d59 new file mode 100644 index 0000000000000000000000000000000000000000..bebcacd68872f285a3f450f71e76ee4dfb8d828d GIT binary patch literal 189 hcmZQ#Qe^r6pTR*j%3t0}jB%JbSj{|NlQUfBaxz_yGo!Axas4{P@A{43&og e4HyFzsB858|L^>t5oQS^Oj;Ahzz)>m!nFW95@|mG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d1b18d239e8c05e2d04a7aa6a1c83a9c74213ba3 b/fuzz/corpora/bignum/d1b18d239e8c05e2d04a7aa6a1c83a9c74213ba3 new file mode 100644 index 00000000..184b7e3d --- /dev/null +++ b/fuzz/corpora/bignum/d1b18d239e8c05e2d04a7aa6a1c83a9c74213ba3 @@ -0,0 +1,2 @@ +!( +ˆ;ÿÿÿÿþø \ No newline at end of file diff --git a/fuzz/corpora/bignum/d1b98f3ec28892fa45c340ec2661013f40b09818 b/fuzz/corpora/bignum/d1b98f3ec28892fa45c340ec2661013f40b09818 new file mode 100644 index 0000000000000000000000000000000000000000..53e7f1c9e2c02234848eae98824574e664713512 GIT binary patch literal 113 hcmdBG~7eT~N z(4|A^QUgW*<+S8jw}Y#s=u4|Ij6q022tys}%r01w!tiVQ}4$)@QhD88P2rP@s zB|&?B@d5m4!UFIvug>;tugI@pHnzs3UZ*jv)JxEzx@MCYIO$f(#&VyKhdhp{ z>YgGbX*c)jdA){3SvZwLt<#6bT`Be8{d`aEodZ!c^CuM+$~QW#9N?t2cIIs@{Qmo&`?~-D literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d2fe57453e81ff96d419e1756d9dc703273a91f3 b/fuzz/corpora/bignum/d2fe57453e81ff96d419e1756d9dc703273a91f3 new file mode 100644 index 0000000000000000000000000000000000000000..9b1d0b0bcc19d194349abe85d66a5d07e4d2e6a7 GIT binary patch literal 119 dcmbRH^IT!!w3)}b6d3iA#SIhRcEzlV*Z;}}=R|Ns9PjvdpQ{eyww$B!RB7}Wm%|Nn#Qf9`H~btfyW Fg8;@|I<5c! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d43bef32a3afb15e19afec3f33b681b8fdc2c97e b/fuzz/corpora/bignum/d43bef32a3afb15e19afec3f33b681b8fdc2c97e new file mode 100644 index 0000000000000000000000000000000000000000..964024c462a88ff730e43ac6f115588aa2d8c54d GIT binary patch literal 98 tcmdNiRn%q<_^0Rz1wZkE|7fzmLHz&!|HH&VhFt&u8zjO20$&-J3IQV)N-O{X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d470800d0c133cb672c1730177174c8bca32404e b/fuzz/corpora/bignum/d470800d0c133cb672c1730177174c8bca32404e new file mode 100644 index 0000000000000000000000000000000000000000..b04775d19a6250df251d21057de1fd7bcb794714 GIT binary patch literal 253 zcmZQ#>R!auIB)W#N00vZPIp+()$!jI0{%k)l!p%fGf)op|NoE0n1=tMM1Ws~);?B$ y|Np;%>=C8@_x}6;AmG!+`M>`Ef3A-I_5Zy(*#EO``k}}zps0B9y_P6r<8rOPasi58 T*xK4eulW4XB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d6cb58cdb9cdf88271fbf5a1871ec7a8b06dedb2 b/fuzz/corpora/bignum/d6cb58cdb9cdf88271fbf5a1871ec7a8b06dedb2 new file mode 100644 index 00000000..cc35d74e --- /dev/null +++ b/fuzz/corpora/bignum/d6cb58cdb9cdf88271fbf5a1871ec7a8b06dedb2 @@ -0,0 +1 @@ +8ë"""""""""""""""""""""""""""""""ûôïëõ• \ No newline at end of file diff --git a/fuzz/corpora/bignum/d6e2bd9840bcccca55ce30ce23fb9ee8b09eb28f b/fuzz/corpora/bignum/d6e2bd9840bcccca55ce30ce23fb9ee8b09eb28f new file mode 100644 index 00000000..457c51a9 --- /dev/null +++ b/fuzz/corpora/bignum/d6e2bd9840bcccca55ce30ce23fb9ee8b09eb28f @@ -0,0 +1 @@ +2ÿ€„¡]0;;€0€ÿºÿÿÿÿÿÿSW­«ÿ'ü \ No newline at end of file diff --git a/fuzz/corpora/bignum/d6e6c05428a1d118a63303564a5d2549b662ad68 b/fuzz/corpora/bignum/d6e6c05428a1d118a63303564a5d2549b662ad68 new file mode 100644 index 0000000000000000000000000000000000000000..a0f41eee00e3286d6a62a896f5b16aee0c72627e GIT binary patch literal 157 QcmZQ#o;_Rf|KJ1+020EN#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d71a51ced37a33b5a87ee3107b0fa23146065233 b/fuzz/corpora/bignum/d71a51ced37a33b5a87ee3107b0fa23146065233 new file mode 100644 index 0000000000000000000000000000000000000000..94db11722b13d532909eed38c10852031ac31dab GIT binary patch literal 255 ecmZQ#*7}bL80Zf|!B%2A1uwwnOuQP<00RJ=cWxH| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d752097ba29b9ec46a45f6550559f6f9b4ebaf79 b/fuzz/corpora/bignum/d752097ba29b9ec46a45f6550559f6f9b4ebaf79 new file mode 100644 index 0000000000000000000000000000000000000000..5302414a3f3ba6ce417ebd1d3668f1415a4d6479 GIT binary patch literal 134 QcmZQ(W@c9Z&oICM0GkN`GXMYp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d75c4d8cef2cc235526a0c91dd37d3a3b2f03cba b/fuzz/corpora/bignum/d75c4d8cef2cc235526a0c91dd37d3a3b2f03cba new file mode 100644 index 0000000000000000000000000000000000000000..54df922905c24721294a82960e4e753c2a7b6b7d GIT binary patch literal 8 PcmebIp~-oGfnh%Y4iW

~=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d7d3a5600d555da963c67ca71cc000e5d13d7b68 b/fuzz/corpora/bignum/d7d3a5600d555da963c67ca71cc000e5d13d7b68 new file mode 100644 index 0000000000000000000000000000000000000000..0d4964ec7682f8857449344695d34c98e8d18f95 GIT binary patch literal 120 ycmZQ(h5>FaM%Mof=zs-X03Y}d0bG~h<}hvKlH~&NKr#&f85tND85kI3eS82)YZ0aZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d7d6485cfc477aa11f5c1ca22d980838f256266f b/fuzz/corpora/bignum/d7d6485cfc477aa11f5c1ca22d980838f256266f new file mode 100644 index 0000000000000000000000000000000000000000..30bab9ae7b62080ec352f6c20f947153d8890c0b GIT binary patch literal 7 OcmebI!65$s*KYt0GXzio literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d83b83e0ace4eb634564fb12d426741a49b06ebe b/fuzz/corpora/bignum/d83b83e0ace4eb634564fb12d426741a49b06ebe new file mode 100644 index 0000000000000000000000000000000000000000..4b01b0a2111a5c2211d47c0f8c6851da443eb206 GIT binary patch literal 180 zcmZR0uVo#m@n7>lBfmNy*AI4QCg$0*761SLq50zn1H%t6n9KkMj6Z%Lt;G`v10wFPhJc{+oAerxG~x{w3r~wCzD5$RF7iJ6r$& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d89cd87b910fc6902fd95746642af20e8ef3a967 b/fuzz/corpora/bignum/d89cd87b910fc6902fd95746642af20e8ef3a967 new file mode 100644 index 0000000000000000000000000000000000000000..eecc0daf0b2579c4ffd744a265b029aa380d7f74 GIT binary patch literal 1078 zcmZ{jL2DC16vyAX`vC@(KoQeKs=?{OB8&+$DBGJL71D++h*3zFRFKM05QT!XhxP-Q zQx7>6!BGzpk%EMr^iZsL@RW;}pcnBXt$PTTk(u4eZV`WnnfKnld2f01AJ)1fCn%-V*L_p-zJzh8 zY2>MDM}A^+b5hE?EPO^^hokGtA8PjW^39mT;Z%1}Hs`}I6nZkzrg4#3gS3fCn;2I9 z94P^y4=f(vaN&yIcJA#CI!kv0O=(IClX>-~V1Z&wTJ7tj=_jqI@oIlCT zJWo02f}xS%yjb*$*NPcue-%w;=OylUmUS0ES+9hAsq{htY?74Hho8@-bU;cem5?v? zqy!Yf0`nXgqes=p(d{a%Hd$InYk?7i)rsa!-f8306u}3q1S^aL;8~`1LI_zVgwzNj zjikVTxJj-OLZD=BS5zvM?x1|K-`}7M7vIqxC6xEs$?K%Cbj-`t_5B}#H5zb4caNo8 z9yZt|!{yZ`!;28^C_R!CGZla)^FEr-dK~t?b`2qBPb**L4r3TmT2up?JU`nl;Ktqw}Tiz+S?3?@L*agP5A`7E|gk DoMpAE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d8ab33387982a98acea344ab155745efa43730d9 b/fuzz/corpora/bignum/d8ab33387982a98acea344ab155745efa43730d9 new file mode 100644 index 0000000000000000000000000000000000000000..4d95e5352f5b6bb6e095d7fdf69fa479b5cebefe GIT binary patch literal 40 rcmd;*{(V~ZMwbtRBExa1KO)S`e;64cfZ2dqfJN)K79-=2A67pA?ZOL* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d8ba646983d8e2682c2ba829c70ec277ad6ad38a b/fuzz/corpora/bignum/d8ba646983d8e2682c2ba829c70ec277ad6ad38a new file mode 100644 index 0000000000000000000000000000000000000000..a3d3e4e5dbc46701bacb7de854ab50ab3f5b7b35 GIT binary patch literal 104 ncmd|AU|No!yzXJjOGe7`H1jZ&0XdVLqknj|_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d8d658f5043d7240d0e6b5174903394185531e09 b/fuzz/corpora/bignum/d8d658f5043d7240d0e6b5174903394185531e09 new file mode 100644 index 00000000..f314509b --- /dev/null +++ b/fuzz/corpora/bignum/d8d658f5043d7240d0e6b5174903394185531e09 @@ -0,0 +1 @@ +00R \ No newline at end of file diff --git a/fuzz/corpora/bignum/d8df3276cbb1ecb0b12c9804f0cdbf3256fe6c94 b/fuzz/corpora/bignum/d8df3276cbb1ecb0b12c9804f0cdbf3256fe6c94 new file mode 100644 index 0000000000000000000000000000000000000000..14d98b720ca75dc037b3a532c4c3875956575719 GIT binary patch literal 158 kcmZQ(X8!;GKQl8cqxyda5cm(FFo6c95RE_s!+)qN0LFa@+yDRo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d9000d62ceac426e9442b7b3c987f1e582bf2935 b/fuzz/corpora/bignum/d9000d62ceac426e9442b7b3c987f1e582bf2935 new file mode 100644 index 0000000000000000000000000000000000000000..fdbd6fd9253f6ae37d7c36d0d0a42b30f1cc9957 GIT binary patch literal 10 RcmY%W!N9}7pv9o22mlME0iOT> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d92b645679306dfa92a17b763035a30b47d331a7 b/fuzz/corpora/bignum/d92b645679306dfa92a17b763035a30b47d331a7 new file mode 100644 index 0000000000000000000000000000000000000000..60e1ea692f15214efce1e6e5f28d86f1c34ab56c GIT binary patch literal 634 zcmd<$A^})21Tt{^|If(qkig)<{p$0j^$tZ1 JYmjn~1OWc!D02V+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d9716495de635fb4815b1b2d0a5841bde74ac385 b/fuzz/corpora/bignum/d9716495de635fb4815b1b2d0a5841bde74ac385 new file mode 100644 index 0000000000000000000000000000000000000000..ac80d3f697fe7e0112fed3af2c7967922deaf5b5 GIT binary patch literal 76 zcmY#n{m-Bv$Hc%OGnWGsOr1M-?wpBp*Ua6qlA)n-dE;^|Yb|R|PEJmaSDc)}oO56I R&z;NKn5Sjk*topL8UUBU6@LH# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d9e0739aaa2af6424f502e78db4d005dc4fd93b5 b/fuzz/corpora/bignum/d9e0739aaa2af6424f502e78db4d005dc4fd93b5 new file mode 100644 index 00000000..8519c5cb --- /dev/null +++ b/fuzz/corpora/bignum/d9e0739aaa2af6424f502e78db4d005dc4fd93b5 @@ -0,0 +1 @@ +®@gÑ \ No newline at end of file diff --git a/fuzz/corpora/bignum/d9e5190f49400aaeeed65ed2f277a5565cbe602c b/fuzz/corpora/bignum/d9e5190f49400aaeeed65ed2f277a5565cbe602c new file mode 100644 index 0000000000000000000000000000000000000000..6d77a8d2632901a19cca4ca737c8a70c693503f5 GIT binary patch literal 127 YcmZQ(i)8u_2MiPgm{B+lVnUGt04UZHRR910 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/d9f86b5a8250b7c59627cf4ef4e8bdb22714ffa5 b/fuzz/corpora/bignum/d9f86b5a8250b7c59627cf4ef4e8bdb22714ffa5 new file mode 100644 index 0000000000000000000000000000000000000000..b08a9e530a10a79839be78e5aea7a9e51bd1f89f GIT binary patch literal 146 fcmZRUiR566wO+}1^@s6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/da39a3ee5e6b4b0d3255bfef95601890afd80709 b/fuzz/corpora/bignum/da39a3ee5e6b4b0d3255bfef95601890afd80709 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/bignum/dac42837b3cc6acce0673f678c7e904c3417f39d b/fuzz/corpora/bignum/dac42837b3cc6acce0673f678c7e904c3417f39d new file mode 100644 index 00000000..565ff98f --- /dev/null +++ b/fuzz/corpora/bignum/dac42837b3cc6acce0673f678c7e904c3417f39d @@ -0,0 +1 @@ + zÂBBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB+ \ No newline at end of file diff --git a/fuzz/corpora/bignum/db02fde58e58767eab8c6aeb378513b0be640684 b/fuzz/corpora/bignum/db02fde58e58767eab8c6aeb378513b0be640684 new file mode 100644 index 0000000000000000000000000000000000000000..624b3f43185b420f08c56113568cd84f4ae05ce7 GIT binary patch literal 99 mcmZQ(`Tt*wkpT<@7z_*`ECz=EPyps5gz*3*MNqweAgTeTFB47x literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/db3e87bbb884aa062e0e6314a6503099fa05efed b/fuzz/corpora/bignum/db3e87bbb884aa062e0e6314a6503099fa05efed new file mode 100644 index 0000000000000000000000000000000000000000..2b4d2d10bbf3f06de7f170c59b71d47b432b7c49 GIT binary patch literal 41 ucmd;5nA}!ac(8e|V)I@_7M3;T|NplIFqj?D{Qv*||G$h3V8HU9fdK%2ZxF}; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/db77b3de83c539e18ba1079f05c0fb71089ddd83 b/fuzz/corpora/bignum/db77b3de83c539e18ba1079f05c0fb71089ddd83 new file mode 100644 index 00000000..8046497f --- /dev/null +++ b/fuzz/corpora/bignum/db77b3de83c539e18ba1079f05c0fb71089ddd83 @@ -0,0 +1 @@ +Qñow \ No newline at end of file diff --git a/fuzz/corpora/bignum/dbabba3cd97132e6ba36c6d4b1d0365fb792d5d8 b/fuzz/corpora/bignum/dbabba3cd97132e6ba36c6d4b1d0365fb792d5d8 new file mode 100644 index 0000000000000000000000000000000000000000..8b8a03ae766fa8c3890288809c6a9651d983cc9f GIT binary patch literal 107 scmZQ(W@g^F@jn6}vrzyy0}@vNiH#L7M=~ohFfcHDH;go5PzSM?0W%#^O8@`> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dbc211a351c75ccb27a2e80004644890e9181af6 b/fuzz/corpora/bignum/dbc211a351c75ccb27a2e80004644890e9181af6 new file mode 100644 index 0000000000000000000000000000000000000000..4b293f9e52a332b9d40edf68f82bc0054ebdc55a GIT binary patch literal 126 ZcmZQ(R$l*~`9A|rz=TtVGQb7W4gg#10_Fe! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dbcc0ebaaf11db19ac3d6887a5d8b793b1d5a8d4 b/fuzz/corpora/bignum/dbcc0ebaaf11db19ac3d6887a5d8b793b1d5a8d4 new file mode 100644 index 0000000000000000000000000000000000000000..8228936704dc7b35574f3d8fd6bf0bee5e2a8a94 GIT binary patch literal 149 QcmZQ#o;_Rf|KI`)0BAFh&Hw-a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dcaee570598f1c12cdf5a9905b4356cfc72c5aa3 b/fuzz/corpora/bignum/dcaee570598f1c12cdf5a9905b4356cfc72c5aa3 new file mode 100644 index 0000000000000000000000000000000000000000..58ee681f0533f00cb6358984e273d45321bda48d GIT binary patch literal 8 PcmebIp~-oGL47{}4qyWv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dcaf511f122bf9329f591ea7694357f0efe317d6 b/fuzz/corpora/bignum/dcaf511f122bf9329f591ea7694357f0efe317d6 new file mode 100644 index 0000000000000000000000000000000000000000..15fd6a8aad927c1ad5cdd11e43954c8187ab584e GIT binary patch literal 54 zcmV-60LlLd2rB;y3Lz)`|Nn9S{|Nv81^@s6|Ns95viKn(C_79#{r~^i*#Ge=-9DgCGL~KLY?KUIU{5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dcd8e88c311bb382728dd5fde5af6795188f2ea7 b/fuzz/corpora/bignum/dcd8e88c311bb382728dd5fde5af6795188f2ea7 new file mode 100644 index 0000000000000000000000000000000000000000..b8cce43870cc8b69f94017c602738810d08217e7 GIT binary patch literal 575 zcmXr8wq|TFX!!sCKLayMq{9FI2N(}vXAQ><-|7ULa!k~a%BQtBHf=R4(5Ca1{J3G7f())^BLbV_!JH!9~|Nl=o z6A1%n7<_)P|Ht$bmzm;^jsG=eUvhzL;7SIO|Nk=_`oVBW3uFWcXn_P9K*WBA#^qYp z4RhztH83zRm^*h)@*4LrkOVrIdh}}*a~rZKSU)bHh)V()FflMNFfp7`JavlE;6DR{ UHX}$9>crpw!LGdl0Z6*?0TU8mQvd(} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dd2d37dba442fff639d119f53a4b1f636f13c3b1 b/fuzz/corpora/bignum/dd2d37dba442fff639d119f53a4b1f636f13c3b1 new file mode 100644 index 0000000000000000000000000000000000000000..57f4883c94e65a116f7008c236eb292b88ed316f GIT binary patch literal 157 QcmZQ#p8bFJ|G^0u0GHI5qyPW_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dd69eff617a1509e5933993d51dddedc532430b7 b/fuzz/corpora/bignum/dd69eff617a1509e5933993d51dddedc532430b7 new file mode 100644 index 0000000000000000000000000000000000000000..a37252ff09d5de01d59f6b24cb9e4ac66ceea4bf GIT binary patch literal 141 UcmZQ(W@cXa|33o_0O_Uz0L|S5ssI20 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dd6e00bbbeba92f762998f6174e9cfe61ff9a40f b/fuzz/corpora/bignum/dd6e00bbbeba92f762998f6174e9cfe61ff9a40f new file mode 100644 index 00000000..bf5cfb6e --- /dev/null +++ b/fuzz/corpora/bignum/dd6e00bbbeba92f762998f6174e9cfe61ff9a40f @@ -0,0 +1 @@ +\ødðÿd \ No newline at end of file diff --git a/fuzz/corpora/bignum/dd957ae8c85a77f33b64f5ae273a7b9a2b93af41 b/fuzz/corpora/bignum/dd957ae8c85a77f33b64f5ae273a7b9a2b93af41 new file mode 100644 index 0000000000000000000000000000000000000000..7296b3361a78a5c2f2ff76b8c29b32fbc9142055 GIT binary patch literal 120 bcmZRPV`5?8;o;$FU|7h&z`zJ%(gOehq{jwZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dde86fccffc53b370da08247844b244fcfec43c0 b/fuzz/corpora/bignum/dde86fccffc53b370da08247844b244fcfec43c0 new file mode 100644 index 00000000..6eaff313 --- /dev/null +++ b/fuzz/corpora/bignum/dde86fccffc53b370da08247844b244fcfec43c0 @@ -0,0 +1 @@ +€þþ0oÿÿÿõÿÿ "  \ No newline at end of file diff --git a/fuzz/corpora/bignum/ddec77dab1f1d79d2dcd13205116c41ec3560834 b/fuzz/corpora/bignum/ddec77dab1f1d79d2dcd13205116c41ec3560834 new file mode 100644 index 0000000000000000000000000000000000000000..fb06c98eea9de099d65ff4f466ba8e4ca4af4906 GIT binary patch literal 268 ncmZQ(i)8u_2Mjm?UL|lzIsu%n1OuoezT;CRfG)|wz`y_ik~NCz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/de4a4b5f22c3a0d7ccb7ed3870f1ce162366390a b/fuzz/corpora/bignum/de4a4b5f22c3a0d7ccb7ed3870f1ce162366390a new file mode 100644 index 0000000000000000000000000000000000000000..b9fa94f4b8bd9fc204ea701df145096d3397018b GIT binary patch literal 332 zcmdVW!3l$442I#?LXg@^-9d1N;sjpY!8u$cb2vwqa0m}Uh~zI61Q+OYO1@meCnEBZ zFTG$(<$?qi5dj9)lAITHnbM5!zvX{KA2cf*{=jSjs`C6zz6@QL1^E+vN+a1xs5++l F9!?&2GwA>T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/de5574c3eb4f8ad1b0d27201d6d395ce9b872951 b/fuzz/corpora/bignum/de5574c3eb4f8ad1b0d27201d6d395ce9b872951 new file mode 100644 index 0000000000000000000000000000000000000000..64cf8bed8adbee235772cc4793d66ebf3f1feae8 GIT binary patch literal 24 gcmb2u)cmVZ|NsBr|NsC0Z?)Rq@V}mokwKdU0I&lLtpET3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/de73565b39249c5ddb8964e6c67326d1c3a801f0 b/fuzz/corpora/bignum/de73565b39249c5ddb8964e6c67326d1c3a801f0 new file mode 100644 index 0000000000000000000000000000000000000000..9d2a518062ce20e54d639e7dc5d83020dd866aee GIT binary patch literal 48 zcmd-Ic;UP+f8(873=H=;&x66G@a0pFeyw6|WBC7{^FIi5baZs^FfeE_Xej~!o<$uJusXG+0iI$`WD}A#7y?0Qoczp8x;= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dff62df164bea85999742e9a48a465cbd7bab8ee b/fuzz/corpora/bignum/dff62df164bea85999742e9a48a465cbd7bab8ee new file mode 100644 index 0000000000000000000000000000000000000000..568d11bcfdb8492e04fb381e28cf11c0db972402 GIT binary patch literal 141 RcmZQ#o;_Rp|DXU23;+PnhT#AJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/dff6a70ade2b7406092c0cd00a4c73aa927ed430 b/fuzz/corpora/bignum/dff6a70ade2b7406092c0cd00a4c73aa927ed430 new file mode 100644 index 0000000000000000000000000000000000000000..27997d7f5756040e9bdf821fc0dec44edcc51406 GIT binary patch literal 46 ecmdPw>^#-`k%^J%|1(U$z*Sht2v@+sRR{pQK^tHI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e03fb13b930fc9816693c35a3ba1dca2d25d6271 b/fuzz/corpora/bignum/e03fb13b930fc9816693c35a3ba1dca2d25d6271 new file mode 100644 index 00000000..7e14060e --- /dev/null +++ b/fuzz/corpora/bignum/e03fb13b930fc9816693c35a3ba1dca2d25d6271 @@ -0,0 +1,2 @@ + + *“ˆÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/e0413f09a895a218f1564d96172ca84d720ac7b2 b/fuzz/corpora/bignum/e0413f09a895a218f1564d96172ca84d720ac7b2 new file mode 100644 index 0000000000000000000000000000000000000000..0609b4f79c987f0f0aba64d39628e4b92ee81ed0 GIT binary patch literal 136 QcmZQ#W#HEOKj44?0K~+By8r+H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e06fe9967b6c38b848c7ec4f64d13aff573d4471 b/fuzz/corpora/bignum/e06fe9967b6c38b848c7ec4f64d13aff573d4471 new file mode 100644 index 0000000000000000000000000000000000000000..f7d35a3b4258f6ad9aec328b3bb7a2a8d0544f78 GIT binary patch literal 22 Qcmb36B6gpb0S)K^04at7JOBUy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e0746858f72b2a1b5c2b23362acfe2d7254ebd4c b/fuzz/corpora/bignum/e0746858f72b2a1b5c2b23362acfe2d7254ebd4c new file mode 100644 index 0000000000000000000000000000000000000000..1beea1396094ff856075dbb4dea7609df379630c GIT binary patch literal 64 qcmWfbV8Ecxo+hkFff!L0R{yI HhASTd{FW84 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e11389dee3a9b2155bdcfaed31856c0cd9968c54 b/fuzz/corpora/bignum/e11389dee3a9b2155bdcfaed31856c0cd9968c54 new file mode 100644 index 0000000000000000000000000000000000000000..de96a2ae64c6aa67cf07c7806d54069af8868973 GIT binary patch literal 155 bcmZSPi%j?r1`OB$NCqShqiGGG)`0;4!Xgp6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e121e2e748580e5ae757bfc244d66892fb012557 b/fuzz/corpora/bignum/e121e2e748580e5ae757bfc244d66892fb012557 new file mode 100644 index 00000000..3ddea1da --- /dev/null +++ b/fuzz/corpora/bignum/e121e2e748580e5ae757bfc244d66892fb012557 @@ -0,0 +1 @@ +!ôˆ×××ÿûÿÿÿõq \ No newline at end of file diff --git a/fuzz/corpora/bignum/e1259e86f6628854d8a5926180f0ede9b54c8bde b/fuzz/corpora/bignum/e1259e86f6628854d8a5926180f0ede9b54c8bde new file mode 100644 index 0000000000000000000000000000000000000000..47ca3a3a83c40a77e21a2904785249f6b19304fa GIT binary patch literal 140 RcmZQ(W@apCU>FRb0RV+~0eb)d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e1c5a293b09058e4dbe0871264d94520c7df27e6 b/fuzz/corpora/bignum/e1c5a293b09058e4dbe0871264d94520c7df27e6 new file mode 100644 index 0000000000000000000000000000000000000000..344705243866925dfe215a88ef9df918ba491dd3 GIT binary patch literal 160 ocmZQ(iB$Oi{{RDnR=^AAefb+T<7?h@E@T)`@E-y?IyyQu0Q$xg9RL6T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e1f717430e72ac6c904eb3890661f5855982e878 b/fuzz/corpora/bignum/e1f717430e72ac6c904eb3890661f5855982e878 new file mode 100644 index 0000000000000000000000000000000000000000..112973a54131583a1eb6177df0dcfe142ea8701c GIT binary patch literal 101 zcmZS9GG5KX@QWeKO0N5r0)xOKqc{JjF|1OyULSQ9yzEqZqzc)h-Kj^{Gst*!}dF)%zqy(>;J|M493QsHUIx>SpxvI>>>&P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e22c0a25ddfb69b79c76876f418f08aabf806e94 b/fuzz/corpora/bignum/e22c0a25ddfb69b79c76876f418f08aabf806e94 new file mode 100644 index 0000000000000000000000000000000000000000..48da2040d4a9879858e2c2c98961409714519797 GIT binary patch literal 52 qcmdOr@MF3C_XDoa@lxqol1;gw!kyyunr^ z+wr%)nVD@&i7v-NqXWyUaF+JeQ$xaueHn9(XaNH-HlPmgXjj#;kYLlUhsh7U}D^nnm!Ji@SppvA4a{5OBPTqi*nAnDG^9oJE`&D=V%oI;Wl8z}iB@!^YY Gf0sAR)~Hkf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e476b4e07b9652865a637d50cc2b7245acd196a5 b/fuzz/corpora/bignum/e476b4e07b9652865a637d50cc2b7245acd196a5 new file mode 100644 index 0000000000000000000000000000000000000000..f45a6d4a6b3c85eea9c031451d853c51709bf2a0 GIT binary patch literal 30 ecmd<*y}-|<_5c6>|9?S%0Sf;A|If1MzajwXXAa;1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e4a97d1938dc7e87f6bface107f2fd29c08caf5f b/fuzz/corpora/bignum/e4a97d1938dc7e87f6bface107f2fd29c08caf5f new file mode 100644 index 0000000000000000000000000000000000000000..fa149fba8541e504df34379e5abe845aa49c1cff GIT binary patch literal 134 RcmZQ(W^Vi6z%a0&0RRkA0*?Ry literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e4f31dc1d382fe1550d3f1ba418d69a1c11cc399 b/fuzz/corpora/bignum/e4f31dc1d382fe1550d3f1ba418d69a1c11cc399 new file mode 100644 index 00000000..b5b059a4 --- /dev/null +++ b/fuzz/corpora/bignum/e4f31dc1d382fe1550d3f1ba418d69a1c11cc399 @@ -0,0 +1 @@ +\€\+\\ô¿¾ \ No newline at end of file diff --git a/fuzz/corpora/bignum/e4f58f81fd5edf43b32108cd6d4f1a8721c35002 b/fuzz/corpora/bignum/e4f58f81fd5edf43b32108cd6d4f1a8721c35002 new file mode 100644 index 0000000000000000000000000000000000000000..f658760012e4076898e27675d0825fbf44016e07 GIT binary patch literal 14 QcmdPYRAdxnWPkuB00yl9i2wiq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e50564615c34e1d556e10ebc1ccb6bda6f134e4f b/fuzz/corpora/bignum/e50564615c34e1d556e10ebc1ccb6bda6f134e4f new file mode 100644 index 0000000000000000000000000000000000000000..9676c8a646f46c00153bdba779f3224e49161d04 GIT binary patch literal 196 ycmZSLnmt?bKNj#8ix@IsU_j>K0bAj6f*`=a@E@X+0R$M~l0<>;XlDEen*soVo}?H6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e512f0902395cab665b1ac0e8e612598be3d40d7 b/fuzz/corpora/bignum/e512f0902395cab665b1ac0e8e612598be3d40d7 new file mode 100644 index 0000000000000000000000000000000000000000..244398af649be5302b4c42b3be81bcd16b6a3672 GIT binary patch literal 256 zcmb>bp%vZ0z|742|NVak9DpeWhXhW*%*@QZapQlyfB~;82rxA7Wno!U4q`PhFfcSA z=@4OPYx_S1Y=0!P(sw4cci#;ojTqEHBFqdRg=!283}Ry9Vh8{>6U4OzsRCQD^gjSc C?rjMG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e574da82180cea41e13e8155157a3096f5e13bfe b/fuzz/corpora/bignum/e574da82180cea41e13e8155157a3096f5e13bfe new file mode 100644 index 0000000000000000000000000000000000000000..930d00c4e18f577e809fa92864a968965d15fa8d GIT binary patch literal 158 acmZQ({?GXTKLZpn!WeKM0A~#VXaE4)8UvO9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e583e7931d7b0f0b915fcc9186498aa54b4e8c8f b/fuzz/corpora/bignum/e583e7931d7b0f0b915fcc9186498aa54b4e8c8f new file mode 100644 index 0000000000000000000000000000000000000000..c2a5af49674bf3d2a5e4a060d9931bda65770d61 GIT binary patch literal 34 ccmd<*=jT!cgZ~Uru<$00!;>-v9sr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e658c444d3fbc293756f3b09fde2720547d04916 b/fuzz/corpora/bignum/e658c444d3fbc293756f3b09fde2720547d04916 new file mode 100644 index 00000000..25f206eb --- /dev/null +++ b/fuzz/corpora/bignum/e658c444d3fbc293756f3b09fde2720547d04916 @@ -0,0 +1 @@ +ûëÿû \ No newline at end of file diff --git a/fuzz/corpora/bignum/e6c863bd729c105b91a5364769d3bb22f717f2a5 b/fuzz/corpora/bignum/e6c863bd729c105b91a5364769d3bb22f717f2a5 new file mode 100644 index 00000000..11bae04b --- /dev/null +++ b/fuzz/corpora/bignum/e6c863bd729c105b91a5364769d3bb22f717f2a5 @@ -0,0 +1 @@ +jeûÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/e6d7854c725e63c0f43ac02433953efec21dbc0e b/fuzz/corpora/bignum/e6d7854c725e63c0f43ac02433953efec21dbc0e new file mode 100644 index 0000000000000000000000000000000000000000..3668e9eb05f4edbc1d2e5fd71c9e1be17227b29e GIT binary patch literal 8 PcmebI!NC6i|9>q25_AM} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e6ebb8f0a59963a1c9cc1d41513733ab1d165df3 b/fuzz/corpora/bignum/e6ebb8f0a59963a1c9cc1d41513733ab1d165df3 new file mode 100644 index 0000000000000000000000000000000000000000..e6e558ce73a6f0e82fd658ad1e4fadc101f12357 GIT binary patch literal 15 WcmdPw>^#-`k%^J*KLb}`AtL}Xb_IC= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e7af7107066d92134f30c6ed917f2cd60c68a350 b/fuzz/corpora/bignum/e7af7107066d92134f30c6ed917f2cd60c68a350 new file mode 100644 index 0000000000000000000000000000000000000000..1706a7b6b72a9ed7424677ecd309864c6caace3e GIT binary patch literal 202 icmZQ(`TyTqfZ;zY166?)7SkB9h>-!*L3&Wkf^Yz`0t2}K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e7cc7dc79181382254c51a9493721074e978b3c6 b/fuzz/corpora/bignum/e7cc7dc79181382254c51a9493721074e978b3c6 new file mode 100644 index 0000000000000000000000000000000000000000..f73721530ee9a626a2060625b76de4e3cb82b757 GIT binary patch literal 4 LcmY#j=vCE9Y?j^Km%!zMr{P@_#8NZUxQJe?R$ZDCqD?eADpAwk z(DG9HHen0iAmD-&WQ$)F7RU*a7?vHvGM2oIMdX8#2Io+PJXPgYl)}|^9OrXG#NL{H atplx1t2yB2sRurnAgQ!JR38@SWc&r6<#nt8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e83330ca4c786ff34b8f816b6dccf342e6849387 b/fuzz/corpora/bignum/e83330ca4c786ff34b8f816b6dccf342e6849387 new file mode 100644 index 0000000000000000000000000000000000000000..86b2fb7607442f4c79ac0f6a2808b718641775fa GIT binary patch literal 246 zcmZQ#>i+$o0AL^pgzx~1#N;FcOVdOXOLJ4hR0D$)Q!{h36m#>`R1=f56hkA+WD_HE XgG6(JmXHWwo|Dg=Je8Ln%{sRESQ^l14 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e8501fa8a654d60826d05bcf1138a53338b7bfa7 b/fuzz/corpora/bignum/e8501fa8a654d60826d05bcf1138a53338b7bfa7 new file mode 100644 index 0000000000000000000000000000000000000000..7af80b74e22c3a1fe674fa3e848754a3b9138dba GIT binary patch literal 40 tcmd<*=U@7dtFZIG=6|jK|Nk3k+|rW%4+c$5O-=vj{}1@cz{qHD2mrw@7H$9l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e88c3fcf27850d6447409d430a56364e3ffefbe3 b/fuzz/corpora/bignum/e88c3fcf27850d6447409d430a56364e3ffefbe3 new file mode 100644 index 0000000000000000000000000000000000000000..ee3e9baee85440620b44a5e8f752029a71fddceb GIT binary patch literal 197 zcmZQ#nu-fBD+&t>GoS!w#UL$ft^fZstfP+Zw$ie){%@@n#E|jd`oETzwbgFo&9c(6 vu%5G5(JIeZ6KsLQk$YAsHgPiqX?=r06mbRy1}&?jN?O)h78%wMng1C8u%|ea literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e89daaa3ee812b3310002656fce7b46bbdb3c667 b/fuzz/corpora/bignum/e89daaa3ee812b3310002656fce7b46bbdb3c667 new file mode 100644 index 00000000..08342ff0 --- /dev/null +++ b/fuzz/corpora/bignum/e89daaa3ee812b3310002656fce7b46bbdb3c667 @@ -0,0 +1 @@ +!¤ÿï¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/e8c1b7df993bad8dfb488a2fa869dbc0dc3f22c8 b/fuzz/corpora/bignum/e8c1b7df993bad8dfb488a2fa869dbc0dc3f22c8 new file mode 100644 index 0000000000000000000000000000000000000000..03efbba1d4b63accc148a3767d832a1d89ac7120 GIT binary patch literal 154 ccmZQ(iBw=^U|?hb14f2^1_lOx2xou+0HuKeCIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e8de84b0514601032348e901aff9692efbb904d6 b/fuzz/corpora/bignum/e8de84b0514601032348e901aff9692efbb904d6 new file mode 100644 index 0000000000000000000000000000000000000000..caec33db849e2e9c4b50343c73fb5a997af5e293 GIT binary patch literal 14 QcmdNiP-NV|$N&LM01Z9?F8}}l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/e927df16a4ed13cccbd141e342b51795f365786b b/fuzz/corpora/bignum/e927df16a4ed13cccbd141e342b51795f365786b new file mode 100644 index 00000000..7f20ae4a --- /dev/null +++ b/fuzz/corpora/bignum/e927df16a4ed13cccbd141e342b51795f365786b @@ -0,0 +1 @@ +5ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/e9475c56725676a03c23602d810bf47fea49123c b/fuzz/corpora/bignum/e9475c56725676a03c23602d810bf47fea49123c new file mode 100644 index 00000000..02c695ec --- /dev/null +++ b/fuzz/corpora/bignum/e9475c56725676a03c23602d810bf47fea49123c @@ -0,0 +1 @@ +i¦v¦ˆvµvå \ No newline at end of file diff --git a/fuzz/corpora/bignum/e9e39eb1da2d9c78a8a5b5b21972e19f436f1af1 b/fuzz/corpora/bignum/e9e39eb1da2d9c78a8a5b5b21972e19f436f1af1 new file mode 100644 index 0000000000000000000000000000000000000000..c40b1fdf82331d0972e50f18648b3221233a0310 GIT binary patch literal 176 zcmZR0uVo#m@n7>lBfmNy*AI4QCg$0*761SLq50zn1H%t6n9KkMj6Z%LF^Qa6l4W_yCQQqhG+$ z5J$o%a5YYJ!N=SkR{=qV@Efl0{d?}|bH~igMIw@4X0|Y9WQqk4Etr_)DIIW}_#uws zQ^#?Lp!bu6(DsFiMga~gM+bDmY} zd&I^^MeY4;wM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/eb150514614b78b104ff754f0f2eeec27f39fefb b/fuzz/corpora/bignum/eb150514614b78b104ff754f0f2eeec27f39fefb new file mode 100644 index 00000000..ddbf463e --- /dev/null +++ b/fuzz/corpora/bignum/eb150514614b78b104ff754f0f2eeec27f39fefb @@ -0,0 +1,3 @@ +jeûûÿÿÿ¿ÿ +ˆÿÿÆÿÿÿ@ÿ + *“ˆÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/eb77066d6a73d8ba6c336ea02ad1094e744ad159 b/fuzz/corpora/bignum/eb77066d6a73d8ba6c336ea02ad1094e744ad159 new file mode 100644 index 0000000000000000000000000000000000000000..d885c52914fe3a77aa7c5698bef10a9091fca7fa GIT binary patch literal 40 tcmWgA)Kp~L!N|bCz#x>B%Jlp9|NpQ5|NlBw(?F4N16Y`Wfq_Yr3jhca3+n&? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/eb85bd8fb1a23c6ce84977860ab32e09cddca86a b/fuzz/corpora/bignum/eb85bd8fb1a23c6ce84977860ab32e09cddca86a new file mode 100644 index 00000000..73bf4d70 --- /dev/null +++ b/fuzz/corpora/bignum/eb85bd8fb1a23c6ce84977860ab32e09cddca86a @@ -0,0 +1,2 @@ + +ÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/ebb38801f09a0d87bb189abdb60cd636cab9b40c b/fuzz/corpora/bignum/ebb38801f09a0d87bb189abdb60cd636cab9b40c new file mode 100644 index 0000000000000000000000000000000000000000..e29470d12fb5fca6a3aa55783e8c352b02c4eccd GIT binary patch literal 116 lcmdC&Z3Fg6S@Ffa&!+3H}j9wts6006GfWP<E2SVMA8~=a*|9|NJ53UiFMrjH~1S|Njifj%m&Q!NBn2$B!QjYXATL|H0J(abo5JXo|Le9h>^aI0m5a(8gJZ@Abv1zd^k{~x~!BcAd zcmX`Sn+a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ecd609488627f90c7b3194c865b897b905200ecd b/fuzz/corpora/bignum/ecd609488627f90c7b3194c865b897b905200ecd new file mode 100644 index 0000000000000000000000000000000000000000..2a0a9b6b954997d3c25173f40af43a4c2968cea3 GIT binary patch literal 42 Wcmd`oX~Xp9=s}w*;>M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ecf18296058dd79751f850ca40a38b669a1b2541 b/fuzz/corpora/bignum/ecf18296058dd79751f850ca40a38b669a1b2541 new file mode 100644 index 0000000000000000000000000000000000000000..d084a8247383c893f4d9f873275a576f1af06849 GIT binary patch literal 134 UcmZQ(W^Vi6z%W1{6=H7#01tWs^Z)<= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ecfddb29cf09b3421ad247a71ca735892fe3b15d b/fuzz/corpora/bignum/ecfddb29cf09b3421ad247a71ca735892fe3b15d new file mode 100644 index 0000000000000000000000000000000000000000..7a62f1d4b924d25e470168e1cf013c1ec13b9576 GIT binary patch literal 72 zcmZQ{MU;4|NqbrhC^Ea8BP>Tp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ed4b26a824886dd0f80f182958032ca92217018d b/fuzz/corpora/bignum/ed4b26a824886dd0f80f182958032ca92217018d new file mode 100644 index 0000000000000000000000000000000000000000..4e6ef2941496afec82b48809aeee665ffaaeabc0 GIT binary patch literal 94 pcmZQ(XZX+1ga8I0z`(!&ra_>o2`tvsWB{WPg4R$;3;;E+82~2z8^{0v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ed5eeaed1dd95862fd407a1c431447a51601bc36 b/fuzz/corpora/bignum/ed5eeaed1dd95862fd407a1c431447a51601bc36 new file mode 100644 index 0000000000000000000000000000000000000000..3909b197c37fb8a5f2b59287f13483e152f99078 GIT binary patch literal 127 fcmZQ(R$l*~`9A{|FcB=qghhrj@EW3>3q%0`qHqLa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ede790221fd99ad6306f39b1e67f56e24f098fa3 b/fuzz/corpora/bignum/ede790221fd99ad6306f39b1e67f56e24f098fa3 new file mode 100644 index 0000000000000000000000000000000000000000..17f2386c59865151bb097ab39dbdeb0a20580339 GIT binary patch literal 145 fcmd-U5V-hWz&cRl{6K>Ln*SLY7#QCF|NkEV(yVRQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ee0f46ad27874ed6ec3532901e5003530e17ed60 b/fuzz/corpora/bignum/ee0f46ad27874ed6ec3532901e5003530e17ed60 new file mode 100644 index 0000000000000000000000000000000000000000..f07c076eefd64114e675570db564f935d8c26d5b GIT binary patch literal 247 ecmZQ#{!bEMpb;R+5!iqr2p~BQn;HlJDFOhiC5X}h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ee0fa2d96239f54b55c49a841f5eeda9e72c0717 b/fuzz/corpora/bignum/ee0fa2d96239f54b55c49a841f5eeda9e72c0717 new file mode 100644 index 00000000..6f1eca4c --- /dev/null +++ b/fuzz/corpora/bignum/ee0fa2d96239f54b55c49a841f5eeda9e72c0717 @@ -0,0 +1 @@ +››+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ \ No newline at end of file diff --git a/fuzz/corpora/bignum/ee2d00ebf6e5b60ccdd3922b875d1cb30eb27828 b/fuzz/corpora/bignum/ee2d00ebf6e5b60ccdd3922b875d1cb30eb27828 new file mode 100644 index 00000000..81134131 --- /dev/null +++ b/fuzz/corpora/bignum/ee2d00ebf6e5b60ccdd3922b875d1cb30eb27828 @@ -0,0 +1,2 @@ + +Å÷(ñññññññññññññññññññññññññññññññññññññññññÎññññññññññ(ÿ!öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽˆÿ* ' ÷ \ No newline at end of file diff --git a/fuzz/corpora/bignum/ee3bf0671157a9fa1e59a3b19d8dc27d0dc00894 b/fuzz/corpora/bignum/ee3bf0671157a9fa1e59a3b19d8dc27d0dc00894 new file mode 100644 index 0000000000000000000000000000000000000000..7322d1c18d78910711931d3246189017fdf0d784 GIT binary patch literal 133 YcmZQ#o;_RfKNMKO7&HWeAi#hM0ISGsfdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ee66343807762304b5aa9d7e0050f0a883b5c42a b/fuzz/corpora/bignum/ee66343807762304b5aa9d7e0050f0a883b5c42a new file mode 100644 index 0000000000000000000000000000000000000000..60dd9cabca4e1b242982a036dd440b9f73378657 GIT binary patch literal 141 QcmZQ#o;_Rh|KI=&00Fy)-T(jq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ee7867a9400242091b12a6cb3f04ca8f680db692 b/fuzz/corpora/bignum/ee7867a9400242091b12a6cb3f04ca8f680db692 new file mode 100644 index 00000000..9bfd5cce --- /dev/null +++ b/fuzz/corpora/bignum/ee7867a9400242091b12a6cb3f04ca8f680db692 @@ -0,0 +1 @@ +:ï:ï•qÊ•qˆ \ No newline at end of file diff --git a/fuzz/corpora/bignum/ee9568c13097cb35684a548a97b822eba88d9991 b/fuzz/corpora/bignum/ee9568c13097cb35684a548a97b822eba88d9991 new file mode 100644 index 0000000000000000000000000000000000000000..5476247001127e53fd809e02a841cd36a2574b83 GIT binary patch literal 66 zcmZSMJ;ofl&3w^&tMlj2U(_gKGnkUV`+;@7fwwjz3x}zOm7az{j)8%J!CnR^01N7H O!%{2ZOlR zq5nUu{_n2;|DV&T?$oJ6r%o|E`FDt6rc>vCHju(oU$6DeynbC>R8&;-|Ns9TERp}e I7BVmZ0QuEMV*mgE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ef11511939859b56a71004926811be5085447e29 b/fuzz/corpora/bignum/ef11511939859b56a71004926811be5085447e29 new file mode 100644 index 00000000..a6136010 --- /dev/null +++ b/fuzz/corpora/bignum/ef11511939859b56a71004926811be5085447e29 @@ -0,0 +1 @@ +xÚÚx" \ No newline at end of file diff --git a/fuzz/corpora/bignum/ef4218cb80193d7a4a09c523a761432d3e8478fc b/fuzz/corpora/bignum/ef4218cb80193d7a4a09c523a761432d3e8478fc new file mode 100644 index 0000000000000000000000000000000000000000..5963e06f1a4585c882cf9c6c7baf4a65bd044fad GIT binary patch literal 261 zcmZQ%H2C%Ho6vVnYsTB802UTGIADMPMsmPysAiZM47YDLG&KC5Fw@{a2rz=hnb`g} zD=^rA!244_{`~my{UH~;_u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f0052d02e5d252fa48c738dbe1287ea1c768fc91 b/fuzz/corpora/bignum/f0052d02e5d252fa48c738dbe1287ea1c768fc91 new file mode 100644 index 00000000..44dbd56a --- /dev/null +++ b/fuzz/corpora/bignum/f0052d02e5d252fa48c738dbe1287ea1c768fc91 @@ -0,0 +1 @@ +qÊq¡†* \ No newline at end of file diff --git a/fuzz/corpora/bignum/f0764372522410c4270697bdb1d5cd22873c0304 b/fuzz/corpora/bignum/f0764372522410c4270697bdb1d5cd22873c0304 new file mode 100644 index 0000000000000000000000000000000000000000..c9f637445c8f023d4fcb019dbee1829c3b8f4fa2 GIT binary patch literal 120 icmb18Ud5F3Um#^K!^VXZSDgOaBm1A$pohg_t`YzYV``)T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f0791f9049d3fef7c86d0a1118910c497cb2239d b/fuzz/corpora/bignum/f0791f9049d3fef7c86d0a1118910c497cb2239d new file mode 100644 index 0000000000000000000000000000000000000000..57bd0f942e2d8162621343b29ab432b78277f20b GIT binary patch literal 46 zcmV+}0MY*n3W)!4iT{iS2#CfCi2wip0LI2DoA>|#`1ttv04D$c|M&|3ZM#P&LOLoQ E!9JrHbN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f0885c8145e37a2cd55ac8139305d83f38760943 b/fuzz/corpora/bignum/f0885c8145e37a2cd55ac8139305d83f38760943 new file mode 100644 index 0000000000000000000000000000000000000000..b31c4529dc2ba680bb2a18559072c7a611407bdf GIT binary patch literal 126 lcmZQ({{Q30j~_KifB`4aK&WEi`tcv9Iy~S%1H*p=0028b9jgEU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f0cc05cb4c3965028a6c9c8cbdde2f2d892ce3a1 b/fuzz/corpora/bignum/f0cc05cb4c3965028a6c9c8cbdde2f2d892ce3a1 new file mode 100644 index 0000000000000000000000000000000000000000..7555db0f8d88e0d7d82491a3566522b8a7198f3e GIT binary patch literal 289 zcmZQ(j9_C_5c~iC|9=J$XaJKi@V_3$VqoB4V1aV}FfcGMA|&8I7|ep2uolFTg3B?K zFfiC40R{$1gd8rg90C{^82W^Iu~lqZPyd{~Le*hXWQYVqgFO7ab&X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f164f093a439aee7ea00bc0cba052fafb1d0f07c b/fuzz/corpora/bignum/f164f093a439aee7ea00bc0cba052fafb1d0f07c new file mode 100644 index 00000000..e9f99c68 --- /dev/null +++ b/fuzz/corpora/bignum/f164f093a439aee7ea00bc0cba052fafb1d0f07c @@ -0,0 +1 @@ +#00;h],;”$dä \ No newline at end of file diff --git a/fuzz/corpora/bignum/f17210bc3c9154a55eea178d8fbe687afa794617 b/fuzz/corpora/bignum/f17210bc3c9154a55eea178d8fbe687afa794617 new file mode 100644 index 00000000..a32f8dbb --- /dev/null +++ b/fuzz/corpora/bignum/f17210bc3c9154a55eea178d8fbe687afa794617 @@ -0,0 +1 @@ +†¥qq†( \ No newline at end of file diff --git a/fuzz/corpora/bignum/f178bdd1b6a0bd86d55830355c0fc809b3fb1dc4 b/fuzz/corpora/bignum/f178bdd1b6a0bd86d55830355c0fc809b3fb1dc4 new file mode 100644 index 0000000000000000000000000000000000000000..5a13ff8db3063212e8fc2cb7a71cbb0bdddcd3d2 GIT binary patch literal 15 RcmdO}{m%HGk&gia7y%v90&M^Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f1cced20f4be4dde6172b4d813e5a644728b34f1 b/fuzz/corpora/bignum/f1cced20f4be4dde6172b4d813e5a644728b34f1 new file mode 100644 index 0000000000000000000000000000000000000000..57d28aaaea6469bfbd79a7a91bf8b06dd2d7b7c1 GIT binary patch literal 23 RcmY#XKf$2Iz{-FMH~|_=0Z9M= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f1f96db10dc34ef04df7eda002765b20c4f6a733 b/fuzz/corpora/bignum/f1f96db10dc34ef04df7eda002765b20c4f6a733 new file mode 100644 index 0000000000000000000000000000000000000000..ed289898944825047007d69d3d4a9981435052bc GIT binary patch literal 158 WcmZQ({?GXTKLZpn!We@CGynk8Is=9P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f2129a3c245650c409ff253f1e4cffad463ea58a b/fuzz/corpora/bignum/f2129a3c245650c409ff253f1e4cffad463ea58a new file mode 100644 index 0000000000000000000000000000000000000000..d890b35a56211f6ed6bb6177e5c883cfe0ce3e1b GIT binary patch literal 203 zcmZQ)VQ1G~dSCOG!}b6F|NmzgNC0xc|Npi1|LgyIb+G@pv0>0+_R!auIB)W#N00vZPIp+()$!jIFZjVQA RSJz_rj{u5Jp`oD=69D74FZuug literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f2234ef9edc2b14853c0d20a9fc50ae2aec6d633 b/fuzz/corpora/bignum/f2234ef9edc2b14853c0d20a9fc50ae2aec6d633 new file mode 100644 index 00000000..6851e965 --- /dev/null +++ b/fuzz/corpora/bignum/f2234ef9edc2b14853c0d20a9fc50ae2aec6d633 @@ -0,0 +1 @@ +.Ý4*p0(0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/f239049fa176a6e25eefe36ad7e3573e0363287c b/fuzz/corpora/bignum/f239049fa176a6e25eefe36ad7e3573e0363287c new file mode 100644 index 0000000000000000000000000000000000000000..9fc1046d2c1dbe8e820958854f2968aec2c465f2 GIT binary patch literal 164 mcmZSP(_m#t_>Te@7#J8p0w5X+e#0090X~)Z%c(c|8ds;{}~vs!^JiJALlp#61jeT M3l?qoHT?Jw0K@Z7iU0rr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f282a6467410c4049af190a5bfdc123628835664 b/fuzz/corpora/bignum/f282a6467410c4049af190a5bfdc123628835664 new file mode 100644 index 0000000000000000000000000000000000000000..dca0c3e7e272c1039f359484fc5a2539d65bb087 GIT binary patch literal 78 gcmdP9YpwPFzs7&uKohsr|NnY-truIr;ADUT0Eg*4o&W#< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f294f630de20322442cff3c3df323fb6b8c4a4c1 b/fuzz/corpora/bignum/f294f630de20322442cff3c3df323fb6b8c4a4c1 new file mode 100644 index 0000000000000000000000000000000000000000..a354563579014355ff466c4bd26b44ac33ca5f21 GIT binary patch literal 29 acmd<*<>%7+|NsC0zaYQ>1t5Wi{}ln&a}Npt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f2d2f59a28937c90cffbf92baec467d66cd44db1 b/fuzz/corpora/bignum/f2d2f59a28937c90cffbf92baec467d66cd44db1 new file mode 100644 index 0000000000000000000000000000000000000000..a25f4859fb10dfc309087ca6785b949e8d628ddc GIT binary patch literal 71 zcmd;*{(V|@0~p-s@?lV9I4<=^gqisdBLf2i!+#Li4<=Co0|NuI0kZ&$)^9CF#vebd GegFWA@hDIL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f2e58f52109f6c2a974aa8f61cd7c9f8a2961e13 b/fuzz/corpora/bignum/f2e58f52109f6c2a974aa8f61cd7c9f8a2961e13 new file mode 100644 index 00000000..6c17ca33 --- /dev/null +++ b/fuzz/corpora/bignum/f2e58f52109f6c2a974aa8f61cd7c9f8a2961e13 @@ -0,0 +1,2 @@ +qñ +ÿýÿ( \ No newline at end of file diff --git a/fuzz/corpora/bignum/f3407bd9c8185ac48f6a6df75c7e618623c46cbc b/fuzz/corpora/bignum/f3407bd9c8185ac48f6a6df75c7e618623c46cbc new file mode 100644 index 00000000..f0777623 --- /dev/null +++ b/fuzz/corpora/bignum/f3407bd9c8185ac48f6a6df75c7e618623c46cbc @@ -0,0 +1,3 @@ + +ˆÿÿÿÿÿÿ +ˆÿøÿÿø \ No newline at end of file diff --git a/fuzz/corpora/bignum/f357d1caf1ff6cb5a5c903a619e3f5258cd38691 b/fuzz/corpora/bignum/f357d1caf1ff6cb5a5c903a619e3f5258cd38691 new file mode 100644 index 0000000000000000000000000000000000000000..3889a6a1ffb5350fd9d4ab1e69f727bc738b3168 GIT binary patch literal 249 zcmdi_>|Wnf^i#s;#X hMuO$Qs{j8N=Yld2;68#$JkUZ>`tAS!-wa>}0RVD!ntA{L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f361afd240e578fcab8407f2af6ec6a6ad3f4a94 b/fuzz/corpora/bignum/f361afd240e578fcab8407f2af6ec6a6ad3f4a94 new file mode 100644 index 0000000000000000000000000000000000000000..bf1d7bf273eb0894412f125d38cdaed9256ea223 GIT binary patch literal 13 Pcmd;5VEoU>00E2u3>pC~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f370a44b8765eae60f377eb9ae9e9860a6aef211 b/fuzz/corpora/bignum/f370a44b8765eae60f377eb9ae9e9860a6aef211 new file mode 100644 index 0000000000000000000000000000000000000000..b5f575db626c71c3746ec4ed582f811220c71c3e GIT binary patch literal 20 ccmd-U5V-hWz&cRlzvh2N1_p-r|Ns9707-lZ!~g&Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f38ba7ce95eb4436fb369e4331666e4b1166c354 b/fuzz/corpora/bignum/f38ba7ce95eb4436fb369e4331666e4b1166c354 new file mode 100644 index 0000000000000000000000000000000000000000..0b683a0750a8f5a66d83f52dc11f400427bbdb1d GIT binary patch literal 1156 zcmb`Gu}cFn6vkhAm7ax)2gOxxvFT0Lv0a=Tq-%x)2WKa55*KkgT8CQDrQjNz9Q_9z zr8t)U1+L=MEcKHl&1tKZqxc)b%e$AC@4h6AWdu6%Fk|Y1B@iw7u*hSU2m*O8Q+W~u z0TJwa(y*)~CxIsG0n;U{O@Rc-RhvQrLO_+rW8F~cp@7ao>sf)nazqoIc{7`FGg`7= z;$XAbD*~-e!Wt1XT61uhqlT#YOI7YI99r^q#myGz4`a=@tnFWcGL}rRJu?Bo`)T2< zXzGW=oQ}F#`_b(>lllnbRHoA8eZSUQ??jW3#c@2OwkiRrgJDz}jR=LCTer-f(AP{O zgb+{=!s>e{?|c)w3M&}O8;y&jmp$fnt3G;m(^MvjL( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f3e95904bad86b97f7e769e66a192383cbdbf82a b/fuzz/corpora/bignum/f3e95904bad86b97f7e769e66a192383cbdbf82a new file mode 100644 index 0000000000000000000000000000000000000000..d5be8099f40c93f54bedfbe13576bffb395102e8 GIT binary patch literal 190 zcmZQ#`v3p_e-K~*0S+(;13_9^*47y&YhZk$!M$LmZma(cOw5WbHIWY1AajI~!2gUj z4r?5KSz9w`X<1ok1ZinmY3^QQwcAR|O7YA8|JGplfPmxw|Nnn{zQ%5duo>dc2Mi1h I*Z=fSafPnx1e{cZ+y6GCw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f3fdbc41fc737741bceb2cf14185a27ad4b769d9 b/fuzz/corpora/bignum/f3fdbc41fc737741bceb2cf14185a27ad4b769d9 new file mode 100644 index 0000000000000000000000000000000000000000..d75fb8b4f8c923d3331e6b6cb7566e20b19c772e GIT binary patch literal 128 lcmZQ(i)8u_2Mjm?8@dc5M1TWKK@8CRk7)qRXmsr`004NE8iN1; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f431a3141a5ad5a3782f06686ff0a5acf6899fe8 b/fuzz/corpora/bignum/f431a3141a5ad5a3782f06686ff0a5acf6899fe8 new file mode 100644 index 0000000000000000000000000000000000000000..812acc01e7422802b53f0fc9805f1822874ac014 GIT binary patch literal 6 NcmZqf{msC@000Ta0t^5E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f440b41f1ae3efe2451080c22d5324360c0a4225 b/fuzz/corpora/bignum/f440b41f1ae3efe2451080c22d5324360c0a4225 new file mode 100644 index 00000000..ce9c5233 --- /dev/null +++ b/fuzz/corpora/bignum/f440b41f1ae3efe2451080c22d5324360c0a4225 @@ -0,0 +1 @@ +ý@ûÐÐÐÐÐÐÐÐÐÿ×™™V™™™} \ No newline at end of file diff --git a/fuzz/corpora/bignum/f469b35a1fa6d6e234190823dbce45ef5ed510c8 b/fuzz/corpora/bignum/f469b35a1fa6d6e234190823dbce45ef5ed510c8 new file mode 100644 index 00000000..dffe3407 --- /dev/null +++ b/fuzz/corpora/bignum/f469b35a1fa6d6e234190823dbce45ef5ed510c8 @@ -0,0 +1 @@ +ŒÀâÏó \ No newline at end of file diff --git a/fuzz/corpora/bignum/f49ae4cbfd1eb4405c7da71d6fb7514c9cec6b91 b/fuzz/corpora/bignum/f49ae4cbfd1eb4405c7da71d6fb7514c9cec6b91 new file mode 100644 index 0000000000000000000000000000000000000000..4fab87bed29e907dbbf755d10645f82751e030a9 GIT binary patch literal 647 zcmcJNAr1mD5JmrxAV8sJRRs>g30Q+eA}5=04lD=2a0$+VME5!%KAE!N0Vm64mSRK;2!Q?qrm;KP#bjAuEvQj_?deztp!C9{SCM0{yFD<{qA9A<_ZzXFEbmMGD(635G~l4=RRGqtmrlh zq9e<)h@kUH!s(GEu_S2?s48}C0{HMR+hh}91953Ik_BTqmr8hYJGR5t&GrBSiw-yXq+89?Xc0Qn&|3FgUI(IF)QF3CpUyJ;P*wdFPcu( z(|u06C5lUH||9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f86755bd3d77c7244da85efa79c5bd01a45addca b/fuzz/corpora/bignum/f86755bd3d77c7244da85efa79c5bd01a45addca new file mode 100644 index 0000000000000000000000000000000000000000..c6da8ea5dcaaea745cfd37493c630e184ff6f28f GIT binary patch literal 97 VcmZQ(W@a|{$ABOF$1jZ+006C50y+Qy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f88f4d38ddf8ac5fa23cbeb37625419e017c7f5a b/fuzz/corpora/bignum/f88f4d38ddf8ac5fa23cbeb37625419e017c7f5a new file mode 100644 index 00000000..38c66b10 --- /dev/null +++ b/fuzz/corpora/bignum/f88f4d38ddf8ac5fa23cbeb37625419e017c7f5a @@ -0,0 +1 @@ +q‰ÿ)ÿ* \ No newline at end of file diff --git a/fuzz/corpora/bignum/f896fbda9b94f613705c6a97460c6b5a504c5a99 b/fuzz/corpora/bignum/f896fbda9b94f613705c6a97460c6b5a504c5a99 new file mode 100644 index 0000000000000000000000000000000000000000..ae8bd96a909ff6b31d42319da878d68e39c971c9 GIT binary patch literal 347 zcmZSfOo>#m&WL5vS+c__eb1idJFGlj$TKMJw!VIyfnn9U-Pf;cUB?A7VlT_;FhKNa z{{R0(bBC1!gz`|-V$@_{Ij0FW?tcTwIII9{2W}g#L+pUKO`S|TP{3>wfHhbxMEik^ d*e|lMK!Q31)t8_^%ZT;eA;)0)|G$=&1_02X&hP*L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f8a9d038aad28c6f7d74d76699220705881cd130 b/fuzz/corpora/bignum/f8a9d038aad28c6f7d74d76699220705881cd130 new file mode 100644 index 00000000..6b4233e9 --- /dev/null +++ b/fuzz/corpora/bignum/f8a9d038aad28c6f7d74d76699220705881cd130 @@ -0,0 +1 @@ +=;(b\;(b\ \ No newline at end of file diff --git a/fuzz/corpora/bignum/f9129fc8bacd59389223492d7abd3c9e5c8272cc b/fuzz/corpora/bignum/f9129fc8bacd59389223492d7abd3c9e5c8272cc new file mode 100644 index 00000000..44a58796 --- /dev/null +++ b/fuzz/corpora/bignum/f9129fc8bacd59389223492d7abd3c9e5c8272cc @@ -0,0 +1 @@ +ƒ½¬w \ No newline at end of file diff --git a/fuzz/corpora/bignum/f928afdf829c73383349b9e8be8ca14bffc97fb6 b/fuzz/corpora/bignum/f928afdf829c73383349b9e8be8ca14bffc97fb6 new file mode 100644 index 0000000000000000000000000000000000000000..07f8159e8ff8d6d12dd2fd2ebd4d607077b7fd9d GIT binary patch literal 647 zcmZQ%RAgMPxf}%KAFq6|N~_@8!^aE^42<2=R!{x=V7bAA#KgqJZ{IC-8D>jAIDszt z?Ym_Y1%Lqxjxz82|ALW$LCe~D-@bkO?ylP2$iVQQ*};H?CDz)_q}i>Wnc0m+OVteo zQotkxykKEqSha4q7F_5B3k#g>=H{mB;O536k0OK#{4j<7gMqHG0fYetT3VC9G{gV@ zFn8ktaE&lEICO#3!IYo@0|NsCun;4f1VhEGTNMJ5|GCa!f>xi#<;*W;G%_?Y{DsQi zN?~XOnQ-e?3d3D=qmTi}Aq~g^Sb(hTeTI6N=L}>)07A;jf*gC{DA>{ee}4V?l?w_U X>}=uU=HlW?feC;Bix%AQ_B<^BO774w literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f929817c918de5d48ebb416b9e7aa64f383bd2c7 b/fuzz/corpora/bignum/f929817c918de5d48ebb416b9e7aa64f383bd2c7 new file mode 100644 index 00000000..27a72488 --- /dev/null +++ b/fuzz/corpora/bignum/f929817c918de5d48ebb416b9e7aa64f383bd2c7 @@ -0,0 +1 @@ +5JÊÿ ÿ0ÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/f9338cf42386624b38189ecf88715c816981a318 b/fuzz/corpora/bignum/f9338cf42386624b38189ecf88715c816981a318 new file mode 100644 index 0000000000000000000000000000000000000000..016f75673a47b598f33006c4da615cba92fa35ac GIT binary patch literal 181 zcmd=30Ru07{P;2Z|Ns9CQ1Ii&G$@M^s)T`o!S2VOAI;4_ntwFIK_i?60USI$r62$^ T2MkI}sbDf!2gsEF|NjF3t@c;= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f9902560fcc0d4ec49fb42df43fd3ba7cabc634c b/fuzz/corpora/bignum/f9902560fcc0d4ec49fb42df43fd3ba7cabc634c new file mode 100644 index 00000000..178e0283 --- /dev/null +++ b/fuzz/corpora/bignum/f9902560fcc0d4ec49fb42df43fd3ba7cabc634c @@ -0,0 +1 @@ +ûËØûÿ1ÿ1 \ No newline at end of file diff --git a/fuzz/corpora/bignum/f990ada42d920e980106ca70dca64b50f6024947 b/fuzz/corpora/bignum/f990ada42d920e980106ca70dca64b50f6024947 new file mode 100644 index 0000000000000000000000000000000000000000..23385919fe4a2e39eb44171a17f608075719bb4e GIT binary patch literal 59 qcmWe=FkoO{a$vBImHr)&by0=^3`7|i7#a+|{r~@;5h8#92mt_O<_Qu2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f9ab7db2b61b3161da93b722dae15ed484e975e8 b/fuzz/corpora/bignum/f9ab7db2b61b3161da93b722dae15ed484e975e8 new file mode 100644 index 0000000000000000000000000000000000000000..b596cfe06db9aafe16ce37c61d79fb724242d9b5 GIT binary patch literal 23 fcmWfVUB#62Um#^K!^VXZSDgOaBiqB`FjolxbFB&a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/f9b03b9130244ea355bce1d60bf86b9f59c2bcc8 b/fuzz/corpora/bignum/f9b03b9130244ea355bce1d60bf86b9f59c2bcc8 new file mode 100644 index 00000000..59783bbc --- /dev/null +++ b/fuzz/corpora/bignum/f9b03b9130244ea355bce1d60bf86b9f59c2bcc8 @@ -0,0 +1,2 @@ + + *“ˆÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/f9cf946c2879ec5c974d40982b0a91367ff87143 b/fuzz/corpora/bignum/f9cf946c2879ec5c974d40982b0a91367ff87143 new file mode 100644 index 00000000..fc40b44c --- /dev/null +++ b/fuzz/corpora/bignum/f9cf946c2879ec5c974d40982b0a91367ff87143 @@ -0,0 +1 @@ +jeûûÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/fa253a08be3465282e00fd5a8958d2b9c6ea7c6c b/fuzz/corpora/bignum/fa253a08be3465282e00fd5a8958d2b9c6ea7c6c new file mode 100644 index 00000000..ef682695 --- /dev/null +++ b/fuzz/corpora/bignum/fa253a08be3465282e00fd5a8958d2b9c6ea7c6c @@ -0,0 +1 @@ +Ø×üÿÿøÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/fa3bc5d2bd1995847a476d1114b1f17db28eada8 b/fuzz/corpora/bignum/fa3bc5d2bd1995847a476d1114b1f17db28eada8 new file mode 100644 index 0000000000000000000000000000000000000000..984efbdf9829ea1b25785392cdcedab4480463d5 GIT binary patch literal 72 ocmWfVUB#62Um#^K!^VaG@qmddPXC2TBe5CYYcX&$IQ;()00hi9`2YX_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fa3d8b6ba466b84d64d535e3de40bb5bd01bc4ed b/fuzz/corpora/bignum/fa3d8b6ba466b84d64d535e3de40bb5bd01bc4ed new file mode 100644 index 0000000000000000000000000000000000000000..6ed070975a2a75e98f2287040cecd533451d2a35 GIT binary patch literal 25 jcmV+!0OtP}rKO>X!|`$dr~m-}_|{60kdTn{*Z=tV!Nd@0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fa433e16012479b2148c74f1282fb04d348b4139 b/fuzz/corpora/bignum/fa433e16012479b2148c74f1282fb04d348b4139 new file mode 100644 index 0000000000000000000000000000000000000000..9fa24bc69a17dc428c8479e1607b1599a5a766a5 GIT binary patch literal 264 QcmZQ#{y&rf1GO9v0Mo1l5C8xG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fa617d1b49bec84ad69378ebed71e716a317eb9f b/fuzz/corpora/bignum/fa617d1b49bec84ad69378ebed71e716a317eb9f new file mode 100644 index 0000000000000000000000000000000000000000..8718226c733dec4a8bfec4bbe6eff69eef3a6e90 GIT binary patch literal 139 hcmZSP)A;{C;XevsU|?VX34mxQ_zh!F7Zf5J2LNyX74iT8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fa6fec7c3bd581df1bbd22394a176dd066ce4a22 b/fuzz/corpora/bignum/fa6fec7c3bd581df1bbd22394a176dd066ce4a22 new file mode 100644 index 0000000000000000000000000000000000000000..2a52bfb0c1cb79630d29c9bafe7a54c2b87e781f GIT binary patch literal 110 acmZSPW?)wT&%lt!00xW@ifrJ5Unc;x)B)=N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fae9ccef3449c30d68b7db167578831f2d06a8dc b/fuzz/corpora/bignum/fae9ccef3449c30d68b7db167578831f2d06a8dc new file mode 100644 index 0000000000000000000000000000000000000000..36eeaac084c3f503c48f4a62b9ed9181552a38f0 GIT binary patch literal 61 kcmd-I{{aGw3=9lEe!Q>-bC3Wd0}= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fb9b20c9bcf5260a627759b726d856cb771afc80 b/fuzz/corpora/bignum/fb9b20c9bcf5260a627759b726d856cb771afc80 new file mode 100644 index 00000000..5cfb35f1 --- /dev/null +++ b/fuzz/corpora/bignum/fb9b20c9bcf5260a627759b726d856cb771afc80 @@ -0,0 +1 @@ +p–üý \ No newline at end of file diff --git a/fuzz/corpora/bignum/fba3082984ee84b86b277af144a36482e76461a9 b/fuzz/corpora/bignum/fba3082984ee84b86b277af144a36482e76461a9 new file mode 100644 index 0000000000000000000000000000000000000000..1b61a676ba7e66ecaf0e2e36f4b7e60aead8ce27 GIT binary patch literal 102 zcmWm5u?fOJ7>42ZunDBO&Lf3s9LfQ*hyM_nAh$+F$N&aXXeZ>e5k#=KU+(Fj!})UD z`=7h}_J$M9;|p`nW1c=O9a_NvEJ}KYS1@jp6eP4jt!~^QC13!e#X6vrny>r;awjS4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fbc123c15e8a6a1c715285efd3d73b47a01d91bd b/fuzz/corpora/bignum/fbc123c15e8a6a1c715285efd3d73b47a01d91bd new file mode 100644 index 0000000000000000000000000000000000000000..b8554506ab475e469e8b59d46367ca6aed78d0ac GIT binary patch literal 38 acmd<*y}-|HOI0E*fG`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fc92a05413f42462d0012d0b32b006d63a9cdcb0 b/fuzz/corpora/bignum/fc92a05413f42462d0012d0b32b006d63a9cdcb0 new file mode 100644 index 0000000000000000000000000000000000000000..4d11133a011b0f03857f98f5dd9e6a808a7ae361 GIT binary patch literal 102 TcmZQ(W@a|{&ww8gk|ziNxY`0c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fcb9ed67ebdbc90d5e52a1309990a90dfb7b4803 b/fuzz/corpora/bignum/fcb9ed67ebdbc90d5e52a1309990a90dfb7b4803 new file mode 100644 index 0000000000000000000000000000000000000000..060fc90f8dc31f5919d7d66b0295d19641839f8d GIT binary patch literal 148 zcmZRUjZ|P@U|_6hh-q(cXKzOXj0|9b*dVP8YkO02mlAy0oDKj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fd80fd82647a800fbba6814294b885c2947a5d6a b/fuzz/corpora/bignum/fd80fd82647a800fbba6814294b885c2947a5d6a new file mode 100644 index 00000000..29d7fc72 --- /dev/null +++ b/fuzz/corpora/bignum/fd80fd82647a800fbba6814294b885c2947a5d6a @@ -0,0 +1 @@ +¥þÿÿÿ€ \ No newline at end of file diff --git a/fuzz/corpora/bignum/fdcae1175be746f5b35dc48ab1dfd73628a4d332 b/fuzz/corpora/bignum/fdcae1175be746f5b35dc48ab1dfd73628a4d332 new file mode 100644 index 0000000000000000000000000000000000000000..5dd51879c5e92ce554ef6ff9cd6d69464b39fb52 GIT binary patch literal 160 zcmWfVUB$%8%F3$F%F4>HPKBER1ZIK&14H<727XJIG7D#K{U)v`Y({Omto_= mi7QV3o!KMX!{RVkiGhJZU4u;%Vi*?ipCI@R(xsunzzhIRY(rK6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fddd2d7322e0ff4bc76445aa358d073717f7f7a3 b/fuzz/corpora/bignum/fddd2d7322e0ff4bc76445aa358d073717f7f7a3 new file mode 100644 index 0000000000000000000000000000000000000000..e97838e06c0a2df71cea0ec032c132a4c77111b2 GIT binary patch literal 70 zcmZQ)XJ^-5dS8)CsFocB82&RdK*0YAXCh-Fq2LUI&ky$h4F9!a{{KJpgW-_Ye}@16 N|Nme3UlBz82LR{I9(Mo$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fdf1cda60cc3eae8af4f2e7e001adb3e08c2ece6 b/fuzz/corpora/bignum/fdf1cda60cc3eae8af4f2e7e001adb3e08c2ece6 new file mode 100644 index 0000000000000000000000000000000000000000..186796fc320bea97e6c54050989062cfc7378165 GIT binary patch literal 647 zcmbV}F%pC@2t`qfbyDpS+-}tycqR{Gy_R0cQ+S1KDRu^jAW3wz*t~)PCLai3iSyj? z4kAMipL=r3UDK0Wc;PT1T|fJuHcH-5Sb&Jgv75&cHADd9nKW5Q@DsCA^)Pv54mcxZ wc3j;~gKsi1PKQuWHFfi-~N&Nr+pJma1MF3X86mh($ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/feaa608a68da21c0bd55af635330d024a40d06eb b/fuzz/corpora/bignum/feaa608a68da21c0bd55af635330d024a40d06eb new file mode 100644 index 0000000000000000000000000000000000000000..297f3e346373a634edad81aced77927c3557bc51 GIT binary patch literal 654 zcmbV`y-Nc@5XE2O$9jSg6cmZ*1%<$Yu!Ti*EkY1%(^*I=g#|$o1W`nC0j(AkgtO7B zWAq<6J3+7zi)cV%W1+GsjEt-?F)`TqYxd2|o3|6{SPBzq8>`8^#|Z9h5eAOJ*Her! zmbiJ*g65@RTgn9~yT7!Qb5e3CRg4sN@r;-Y#v)*BP%5P^lv0W-rOpnN0^qLcnTdqf zT6Fg1$4Z6rxwEeCO8`RZ_`>@r=6R85HwI3KxtiYet9CVXWqJ}P(PHr1`#nJI(Ei?H z5CoUyV5pz64``tPHk(f9Pq)yP+?V)bl3)rY_*S%BC5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fed0689a43dc0fca9cf9f833bc3a3ff4865e5aa6 b/fuzz/corpora/bignum/fed0689a43dc0fca9cf9f833bc3a3ff4865e5aa6 new file mode 100644 index 0000000000000000000000000000000000000000..4fe0a5fc2470d65bf3cc267af6e9608435ceb86a GIT binary patch literal 222 zcmZQlbYf!q|NsAgK@czmlX$@Y|1Us*iAhm|6$H?gqRYbpJ1?Ax0P0X?ISe#(z*s+_ Z46q8AASz(M0zf`t1rh)MzhGcs0036pIXwUX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fef4a6687a675c2e407a3b6dca57965a218d3c16 b/fuzz/corpora/bignum/fef4a6687a675c2e407a3b6dca57965a218d3c16 new file mode 100644 index 0000000000000000000000000000000000000000..a71bd924b748db5291c67c608d7dcc31618ae5fd GIT binary patch literal 14 QcmdNiP-HY@WPkuB00>9`umAu6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/fefa235a7ad36905489fd9dc981ba483938db6f6 b/fuzz/corpora/bignum/fefa235a7ad36905489fd9dc981ba483938db6f6 new file mode 100644 index 0000000000000000000000000000000000000000..3bba9b0d0f56fa0dadec6d47f4cd0318445a8c96 GIT binary patch literal 32 gcmWgTx6!cu&d9*X&hQ6H-4pn41;Ri6-}|ox0H1jc3IG5A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ff12bafe56915492483b40454f0af5b0090c78ef b/fuzz/corpora/bignum/ff12bafe56915492483b40454f0af5b0090c78ef new file mode 100644 index 00000000..7e9124f8 --- /dev/null +++ b/fuzz/corpora/bignum/ff12bafe56915492483b40454f0af5b0090c78ef @@ -0,0 +1,2 @@ + + *“————————————ˆÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/ff215d0df1d2103db75d35d5080aa75b01996f43 b/fuzz/corpora/bignum/ff215d0df1d2103db75d35d5080aa75b01996f43 new file mode 100644 index 0000000000000000000000000000000000000000..fd68ff93edafae7fadb141f4184a339eb1d92576 GIT binary patch literal 255 zcmW-bu}T9$6h+r$8msIV2vfy5)gw0gZj%piLAH?;TM9!8zrZF%z&f>+O<>tt76vQ7 z#NXIP*;KbU+xW0i!I2o2QF#P|o z$b}zh{<`k)|Nno7>;J(3q4)&CTn5<(P&@v^?E-=S|Nk?{%F1f}w}xnjQrJQ4@2ure I0MXnG0K8jKRR910 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ff84bd56755578712522fcd08e37a71fe7c5d6aa b/fuzz/corpora/bignum/ff84bd56755578712522fcd08e37a71fe7c5d6aa new file mode 100644 index 00000000..cdc6af84 --- /dev/null +++ b/fuzz/corpora/bignum/ff84bd56755578712522fcd08e37a71fe7c5d6aa @@ -0,0 +1 @@ +Jˆÿ \ No newline at end of file diff --git a/fuzz/corpora/bignum/ffa134887651f8fc31d1d29ea060c2e7d70aca3e b/fuzz/corpora/bignum/ffa134887651f8fc31d1d29ea060c2e7d70aca3e new file mode 100644 index 0000000000000000000000000000000000000000..5484e65dae8d8c4e9ad71ac49e5e45adc843b96f GIT binary patch literal 335 zcmaivu}T9`6h!B(VXHhynNn`Lg;$GN8#`OSK***DDE>m8uv%>?u@VIlLAa3CZa_?F zZBho3QhQTe*@)VRo@Tl^Gj3V!Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ffb1df7b5ea8fae044a025f754f8c0536c5dbb1d b/fuzz/corpora/bignum/ffb1df7b5ea8fae044a025f754f8c0536c5dbb1d new file mode 100644 index 0000000000000000000000000000000000000000..9bc9acf8cf9525097d791eb0b8cd3dbf2f821a62 GIT binary patch literal 146 Ucmd<$`o_or2D)4W4!{lp02Jp2O#lD@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bignum/ffcf7bb9f13d56093a5f20c15c33f548d2df9cc6 b/fuzz/corpora/bignum/ffcf7bb9f13d56093a5f20c15c33f548d2df9cc6 new file mode 100644 index 0000000000000000000000000000000000000000..40022d51d75f83f885a0487cb555910419c51191 GIT binary patch literal 160 zcmZQ(i&RjIwGPtCu-3A+UL&--OKZ|9Eo;TbA&W5Fkd;C?E?Mq%nvweE!cM%fP^Jje+4GvLUaaWxW+l zuugrdVvL>fWX75N){hxk8YKTS$g8q6$UbLaU}%_}ruy>*!>?zm3<0|8stk+@AVt4e zO*JMfGZ_D$$!{Hv2_7>jc=DRU)JlTX&g{2-tg33P?z>7=RZ*3}fq~(dI?N%czzD&G zIgo*Y!6Hr4#N=I!uDaHXIz?Y!m*du-IhhzlU`Bxa!ulTxFfdpn>Ba{d@JTW-BFj#L i17uMKG*x&2H&pHq0|P@89(4l>P`o?}M!_f;VE_PZxm9HV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/01dc4bb81bbe2a082c6ffcd4a1ce4b56157be2a3 b/fuzz/corpora/bndiv/01dc4bb81bbe2a082c6ffcd4a1ce4b56157be2a3 new file mode 100644 index 0000000000000000000000000000000000000000..71cc06e2872f85745b1d208b543221b31e42f176 GIT binary patch literal 7226 zcmeH}F;2uV5Jd-xGwcySqH?@;;xydF6DKWqqo$?f6qHjSaRMW6054%yGD5J;e_iZ2 ziQc>-(vL%zg0ZpVuwR1VI4<+RJP&3uOENq}b|VLGQ}1}1Qt~!(^1OF`_PzB}oTuQD zH|(4pjL6dgp%dJES%2v4DDOOq5XtMur99u~Ohh^7d{+)#$o1!*ki3wH?8-)2-OKZ^czscqjzX!)O^tOWPj!~HDCojRA#FlU{IR+>>gbmi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0200d7eab62ea0eaedbf4962985537981ec00a9c b/fuzz/corpora/bndiv/0200d7eab62ea0eaedbf4962985537981ec00a9c new file mode 100644 index 0000000000000000000000000000000000000000..54006bdf09ba2acf8c1c3393c08e4b0c06798030 GIT binary patch literal 534 rcmb=sz(7y%>;M1%%MRteYs@86?34TgrR;(r_O z{lE0$KW@U(PuH#{VSbInTFtf=8ceEW$L!6E4I8VKp$o;~E<0{BR|B03=xOC>RB!U=&~hSc{rL z0cc(3W0XCh3UyHU934>Cr5fnQj{*t+Ir#^*l|idSN9(jq-BdYf0O1xE6hK|Pq|xwU z>xa4Xr!DyPc|qfLUL!*ja}&eQ3mTRgnVNrI@OeSwtj4vbgT{NKfCd0HLt}4gqXKe@ w4T1oxp|Ipi0H7E?+HDvGqhJ)^23U)lQ7{UI4L}-FB~W$30E*Xu0>IF3A_Xye?%1P5}ksGpl9d-I(AEXz22fO;vr8RV`J3WU3Kw8 z@SksHS6R&hKMvwB^5c*?cuDV2@~rL_GT~xa$bo4o6Nyw#1OR&g-inj3EP_3&x#-0F zDEScYvX!N5-}Yl3Y^2-d)D(tA89OGJxmjRWXQOu}GV6L-K|LZI%i;#$Dh-WNW};$) znM4QEw&R0F)b<#&qr5oMHi|~XmvEQBOo&p&FIOXVS_g@C9`#dQSf4Pf|EU1f*UWYC E2XRzq=l}o! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/065e8a8af70ab05a8a6e31e82ecbda0941f0c47f b/fuzz/corpora/bndiv/065e8a8af70ab05a8a6e31e82ecbda0941f0c47f new file mode 100644 index 0000000000000000000000000000000000000000..7560ddad6eaca1f58ed773b62c2ccd26570ed940 GIT binary patch literal 363 VcmaE5FbZIR0T+NNARQo^2msrfJ=*{P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0661d9841d3da67b8cc40d4fb2787da6418bce6b b/fuzz/corpora/bndiv/0661d9841d3da67b8cc40d4fb2787da6418bce6b new file mode 100644 index 0000000000000000000000000000000000000000..6a09320701cc8c9933fd1d91cf151482547c555d GIT binary patch literal 677 zcmd^+JqiLb5QU#VC(tby#450`@Q$#Jcm`V!l4Ne+DeNr;k6}68HYxT9LL}LZB3Rh_ zHOYj$H^tWkgI|ydPGAAR|C0RR7Gt+_13R>O1%sK3_*7kbBV%c0N~VCif!wzw{S^p? zv~~J#YpzNz(3b1}AuM`|rSaVM8xc7d08{{6Omyn*$BRoE5R6^h8mnMz6I4})v>lNXX6N$$v0TgJ>277CXY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/068daa1ca6549b42b0bee64fe4e65342faca88c7 b/fuzz/corpora/bndiv/068daa1ca6549b42b0bee64fe4e65342faca88c7 new file mode 100644 index 00000000..dba7e418 --- /dev/null +++ b/fuzz/corpora/bndiv/068daa1ca6549b42b0bee64fe4e65342faca88c7 @@ -0,0 +1 @@ +ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/0691ca1f5ae47f007d9d6cdec9dd4e2aac484dcf b/fuzz/corpora/bndiv/0691ca1f5ae47f007d9d6cdec9dd4e2aac484dcf new file mode 100644 index 00000000..9039135f --- /dev/null +++ b/fuzz/corpora/bndiv/0691ca1f5ae47f007d9d6cdec9dd4e2aac484dcf @@ -0,0 +1 @@ +ê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÐÐ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ŽŽŽŽŽŽŽŽŽŽŽŽŽŽ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000’00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/06b91fba75881bff0be487502354257e964dbbf6 b/fuzz/corpora/bndiv/06b91fba75881bff0be487502354257e964dbbf6 new file mode 100644 index 0000000000000000000000000000000000000000..0da133799a72d2028c61d94a420b60db0a0ebc79 GIT binary patch literal 373 pcmaDATwE z8UcEtC?&iUjZrntL5Cu`w1=u-Ap~io)J_Npy~ITX18sfT25I~Nv3?Yg(K>MhZ}HD# zU)&{^%Oxp^^VwR?HXj4MOIHQsQI$yIC_8o={$e~&K}I^4Mw zq3TQn0Ovxasbr!obR!yuVS2cOJ`jtHyTzi6JtrLJFfG#G?Us5_*SS2wXy{Ut6H^`& z&WL6}ne8=mj1n5wNqq#}kM~XLuvVuf)*cj#C9dB_CUYV~0GKDduIqo-^#|;X+0GD5fL-zx3WY+U zQ1CC}R}5p~{M^0JvySbae%lwI-3?HiXe^|B!go^};monV5^$pSJMJ2|ZvsT+|0_on zAu_c#qOO)^>*Kg{k+{R7_7C~A`k7W4fa-gZLZMJ76bgkxp-@zCx*|mK4}d4^8=DMJ zY$X8v*UD7l-^>byLLp&m7)&;73z~FYr*#it*j7Kd#C83jJn80tOcnC3Uww$1lJDMFqCjtcK!$ zJe8jszbcK32q~~PROTUY81#MbN1Hm95cL@fM+K`!XbhjTIOX&BSjz~U|MK!Oo*f$- zP7jYQFXOVwA8`=T__x`^@P|%nm!vrlHw0&|oaLJYPuogjuFJraipQt|@iX|cB#?a5 zVO^)`xoig-ZDF$mD?$+9)_!|y*a%UmAj}03YLG)U)9-Uh007-`>IlZi$H(XC!1;!B zjBlaRPm8-{O(N^1choDeUC=Z0?aI3~oM}xqJBtfDt2l~Qa6H;fzUZg!Gky_`kZL4x zr*NrL3c4eyJzZ6_9;0Kv5VQ<&TV%`K6p9Xyn<_1Y*ttw^K4xhfQuycU*9 zRYZfGl>cnwty;0&Q1@>-3~QDo3vPvMb7X-Ol_UVZ)exd@RBBe#i*=gGlvYSP2)v*} znp+FQFzh;+xHv-GxsNbkHr;H@r6$cLo;TN8RV&l)VCdGZ_?%%F)5l<92>RoxF8KQW zK4b9G=+vD=;{EU3`%*l%f22xpz{SO$DNH0VK68h*6paHU=07)t^zSRN#9j(Q#Lsdw z-bGq-L#lfyw9PzMC=~AOPpo9`+`2Vs2kjmPPG(MB%fK#xUlryGWOt!}$u|~z0I?7Q zEKC#%g~i1lD3H#>iIwcL3k$G-3kwSi&yhH=@`|pz(&mCI6s_Q-08gIeLx>#r-XsSL zGH)%Bk5)}HktzdDAo!DK4$)8JV7%LkLhmd9A(1)$&6Hz7`-Rl;L?$s!7=|&&9MjY1 z#pm>Ne`YCp|HD+GKlApf`-7vU%;s^N|Z4EUX z!c;k#OQ5E$$@AyW+9pkyFt2T1re2nx(NMz}MVCi%i4XF9^jw-r4iodHhsZg6?WgVv z3I{9bZFby+5YvwSMx#oE@6O|V<|Y7)w(B$`9JLUQhwo6)6xEV|hDrj8w@S=eH$7X_ z%2w4z{rSAK75Y~FX1CSqjGXC-Z#*`xZEU=0^CIH$)0L}=WG|I`+z>*G`xQ+#m_;_f zn}_ZIzM_&s9fh&PHn`jQq9|K@)a?_Ta97?Go3cNZdqPdS4?rtvnl`6tyWFo!dbm9Q zQs~mX!(oMSRF?c|;Ke?NB=gk$>r(LQYncC+&|08Q}@bc$nrye)RZ7 zFy5~kD`~iRVUY$fGBHsnvT8aHS#tjAXqSMVvm+y;qvInunm#jjdVGBB44NA-69Ki@ z#k|fwhC^x#cmiQBS>vAQYrAoqLY6R9##{nmjoyP7W{?-7xD8u-m^RT38rjLi5+r?Y zZH->9<-Ov-nQ<>0dLo!S)F}#$}1EKqK?6&(b1^U^d7uXiH8*9;qv^FUz`^WTT5@t zteok&)wagp@qJykaKm$3g<_lW=+Pr&{~y&d+`x1i(}?uP-o#4>ldnk^N%1I5XJ|^C z!ORtUKQJO4*sFqtgN2wuwek-_x@bw+oK-RJGy=pL+@7~du*-n^TF^L6QX7z}ZKBv} zy!e9`F8=r@&tCfJRx>O(=E==adw7d`spj-Y_|+cX9#EH|gWAJe?$<40+jp}A?ASfL zqvTZw#-(eY-nlkLVNqtHXoz2iO}!%a<~5!Yr^kVQ@hii>94bGw|Mt){9KUcVI+ktS z4-N-sr#5i1u7a8C%oIBr)y$oQoNaU5_kx=5cRcITg8ZC_^0mCdO)HvT!A`2>mpkXG z2WQglhLL4OS+| z!Q8YtCv((9O36>lQH6QQucbpWD;;(cH~Z%2=YJ~!fTI9FJD(fIgf{oLi>q@(+8RJP zxw7(y+>zWD;BYyaOO-WE)9&r+lKW`pX&=pB@O?Dps^|K+Vi*(W=k8sc0FhtUYYCQL zk~Tn1mEmw6hWgv!43dG{Q@gjL$=p3(Wk?_DoIZ5mD&lqECZPvY?LqD5sS9Q8JuevolZ|OgA-AxZC zN=~)xESL?GFV59eSuh)_rM(^P8C~yxMC=Ls*!dl6XFp*Lbs3|6=f)+YSHkv}tRE%o JN9q6i@d6YA0_Xq$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0866112f723b2e78ab5a93838684d0915b6296c3 b/fuzz/corpora/bndiv/0866112f723b2e78ab5a93838684d0915b6296c3 new file mode 100644 index 0000000000000000000000000000000000000000..f037c44b64b160af44ca8768851d3cbcc385e562 GIT binary patch literal 3077 zcmaE5Fo;3wAa>g*7+#=YczI_O3|jD?5`gKe$td7|$>~4OPMdxa=1qm0yKnygFS&z3Kv8D( zf85|ZSjvFG01c!`YI4}iTWczM7+Oo>)=mQ0VVrdLrmg%-RA3Eu@LrH}Z{7qsR}!iY zWcC002IC|pI1q=kl$7qm^vwn_7_40tHLXPyH96$uMKm2;aurjo6|K4J|NsB5Xm70u E05V_9#{d8T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/08ff58a3ee77ba66fbdfc64c2e98b725010a623d b/fuzz/corpora/bndiv/08ff58a3ee77ba66fbdfc64c2e98b725010a623d new file mode 100644 index 0000000000000000000000000000000000000000..26d660c8a2606fa093cace10f68815946c68c778 GIT binary patch literal 1527 mcmaE5FbYP2fyHPT3`tNA0i?N|0S;jL-~uBM{D*=O<#hlDMam=q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/09407e4d28cd13200134294792bf96278b823254 b/fuzz/corpora/bndiv/09407e4d28cd13200134294792bf96278b823254 new file mode 100644 index 00000000..23715de0 --- /dev/null +++ b/fuzz/corpora/bndiv/09407e4d28cd13200134294792bf96278b823254 @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000×0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/0a77e9126345ffe5abdfe13c8ce0bb672c4c8dec b/fuzz/corpora/bndiv/0a77e9126345ffe5abdfe13c8ce0bb672c4c8dec new file mode 100644 index 00000000..15702edf --- /dev/null +++ b/fuzz/corpora/bndiv/0a77e9126345ffe5abdfe13c8ce0bb672c4c8dec @@ -0,0 +1 @@ +âößÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿʸÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/0bf645c5e2dd73f0696f8b74798fbd3581a62be0 b/fuzz/corpora/bndiv/0bf645c5e2dd73f0696f8b74798fbd3581a62be0 new file mode 100644 index 00000000..e9789c93 --- /dev/null +++ b/fuzz/corpora/bndiv/0bf645c5e2dd73f0696f8b74798fbd3581a62be0 @@ -0,0 +1 @@ +ê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000°00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/0c48ff1d1fa36c92c8d41b69232da47c4dbe632e b/fuzz/corpora/bndiv/0c48ff1d1fa36c92c8d41b69232da47c4dbe632e new file mode 100644 index 0000000000000000000000000000000000000000..1bfa40a2bd3abe5ecb83ecbaadbcb392e047535d GIT binary patch literal 3049 zcmeH}ua6T!6vy8kb#Up5atT==yJ-mFl1skk333U&Cj12ii9pm;p{lpJWZaoLTnUn% zM57jc7DL5luj>#vLYN_MW`DNb9z~q$N3`$vyq!+p?5Cf{NfJbF7GZcXn7)rL2GhV8 z-}m)@u}8Hu)U=E*xsX97m-KZZmCUu~Qd@66d(U}d;Hxio0P5D<%jv`x-O7nW;yP9g-w_!xxdA@LgHDuNw*7~6E3FdB1 zb)YP>PO{{V1JO{ZznrSIJ~UeUBVg3VJ`o-T?yNy;OeP)yA$lN>sE07@;0}?3ietq6 zKKh8?e*1%f&;rsKhN+rBPzpq2EK;N?i-DQJ;8XdKmWU2Xx&iG~x)KlIx|A%9$nKel z#z^2v)}4#8@h-(aPw{->-?3xIj$6UbAHf{BDZfIeX0h|v;^yyYg!a)sQIOAHt#u&t zm%MP+8`}B12*XYod~d5u6~}Sh7i9iE4ye_lG@bQi{!YAmN-4D<8uu1ynx^cP7x1aQ zb1f7EpPBhZ>0Cjk_Kk#Lr9LZl&JQ={yx!>D$k9e`1E#^w%yF|TXYfyZutHR<`YQ9? zm+zt&;Urgm=I7b%SfPkyW+HQ(h!D66n|?B;s8YpJEtN0I-Q_6f$WpJL+eKg<8*5_y~a1wb*0#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0d138c7ea07e8c5e67555816ad5e8416fab82de9 b/fuzz/corpora/bndiv/0d138c7ea07e8c5e67555816ad5e8416fab82de9 new file mode 100644 index 0000000000000000000000000000000000000000..a259c4cff9a7e319c5f9faa95c2c2a2e1d27810e GIT binary patch literal 65536 zcmeI5!Hye65Qb;)VWrJVAR&PiF60WSY`yjlJKOP>okIm`$Z|~6m^n}-a zx%b6Q^I4>O)du+G&D&QmZ?b>f+}@@ay-0ru_%9B8*S76;yM20k`uyg_pKa5A`}J)< z2w(?k6W^pi>}2yrod2)cTy?m|&E|)new1IebC5(DY}Z&o!F3=Z7#|9Q5#sg!l<_*< zC33wx*1g`_$L)4m`7O%=j>HUeNG4dtQQH{x9Chabus)YwF=X~IV=BsFenowMe}8#B z$X0j<0i&YY_S{_`J<4LOS*2OthqJE~Y(y0sS_Eo{U-dri{)Zi8!unLG>M{|SF{_?~ zU-fkP#_UV!P!1IY32G zQ5jSepy6O2m5}&Aon~L|;P>U`E*2G)n5wAecXsAfl*dFxo$Idgl>G{OH9=N3N2~Mz zs8iRlpB%9RrlP2*44X(XI-~BBP*GG=1{DQpIN1FsBtB55xu104ezN!pODbwq)vjU39)QwY7=Tubm z3xlnY2<#e0o60`Y(q~rYPi4|OG#B*tMK){}s{xhJ%ne&p!=vOPA*HgaAn$;t8J^P& z_d$;WY>p~6SrHKWgxXP_@f9*grVcaCQZvI|wg#zu#;kfm7SxChEduLvC5k%1UT@43 zEEQ5Kfa}=7g{E~Z;A!1gLBQqKULj*7Kfvr*j2u#XRw3enWJ>@&iXOE9j}qun`l)8X zN^+PUh1g|{2{5Woa|sD0Z zXL+(Sw@^`lhNJx1WqK5%A++~h=uw4=!dM1uJP|feL$0HFVyR1I9CCoinhq%=c&us8 z9(}}KcPQ!xy;rc-tRu426_&b$6IfO~D^@Csic%z7c6gKrJqplpjN9PtWOsF?uNgG# z^tFJ7W1I?2Kznqo0pJomTo+QlUh+}szdPNg)%mlVKdPJeu!*EAz}|}pwH#$K@8zKKklnn0neink_?ao-0L}{jG#yHJSxMM7FAC9c^VZ(MP*P?E)_jk z0?w*;h>8&pWHOIfu_LfP?95{b*_m5VFdb`D)JNe=mYumn$_VyR?4vTQ5vX$5nODph z2{_bgdXz)OhzBy6N37TpSf9E3sK1=>SY+xjV=BslisF~96nt)nDu-3CV#d&;c&C_m ziU&Z|p1aTJt#3DjD+ny4k2-XHaxJhT?4ukiR)qi+)ngM$BVXQ!T=F{?_CZClGiPT$ zCF3ic;IitmGiPT$0Qx|7<}aszQ6fDmLPaS@_PJCP6_r6ny;YCyDQKz@dX#eYiVBgi zK|rV!#Rf@_Im%CMSj{3-ltM*~uVzhipPhfsps2fU33UO>PxfRJ?xAB1SX9Qy>|w^d zyW+sJaGr%1wC$>#v-TN*feQsHcoYwqFtP0j#NpqHp<`X6j%-dm7Lu=yY)0^RFnf1#r>d74v<*Ga>6Ba|rk1VsG zU^=L%DOF>hl4-EZrfYm$BOzx;aoSXbVW?($I}C$ zkEg+g7FkrEC{u?S^Yp-hRc}#M?~n5!$zzQ`m2;r#8IP^7yO!ZR?9>p*_)Fi*%G6=T z^e6{<)S^5pYp&`)TxGCEpvs{~Rm>QA6wl1-R&^?hilU+hKp%MNovSRMhb_p+qOMP- n4l`zF?ohGMprR0)NE-R_&Ngep?Pxs($K42I1U>3xZ%Fi7_34|%DKJo^pMJT}Tl1*74C3I;kn JZ~-jt0synVJkJ0C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0dff3e4b973675205eacdcf05b5d088c93afc014 b/fuzz/corpora/bndiv/0dff3e4b973675205eacdcf05b5d088c93afc014 new file mode 100644 index 0000000000000000000000000000000000000000..29c94c0baba7c6b7eb3fa5404c7ae1be1840ddce GIT binary patch literal 651 zcmaF$9|CqWPzdBuz$*hVAjM3Geg-ftgJKvuV30Gx3h>(Y%0OEit1c=5ES9q)i=lgh b1ON$3G61suBm!m<)sqVrKs5gUZ}1-g21Y+3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0e42b6644415cd5c32b37c1773f6fa5a41fea8d7 b/fuzz/corpora/bndiv/0e42b6644415cd5c32b37c1773f6fa5a41fea8d7 new file mode 100644 index 00000000..77250400 --- /dev/null +++ b/fuzz/corpora/bndiv/0e42b6644415cd5c32b37c1773f6fa5a41fea8d7 @@ -0,0 +1 @@ +*z\-'*è'~!€ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff›fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; \ No newline at end of file diff --git a/fuzz/corpora/bndiv/0e9d8eea1bdf13662d0be49215654a13df036691 b/fuzz/corpora/bndiv/0e9d8eea1bdf13662d0be49215654a13df036691 new file mode 100644 index 0000000000000000000000000000000000000000..d45678f0f99ab2a00c77589aa2e2eb4af2bb1606 GIT binary patch literal 24505 zcmeI4O>7%Q6o8*YlvY3#A3~(cQ0-EoQlm((PKO^w!VTgEy&w)8IAG&c^b$BEXIoYF z#({_nhe}0=10p>VfjA(fm{Siu01^@+hZ1bz0|$^&s+L{!W_H)R>mBc|z46axzJon8 z@6DSxvopKTv)=9C9YjO`fD7~yWMgAvBUl#TejqQ%g_e4-TOAzoTX^p9C;$|lj7_8; zsdEYv^-bbnc<+W`kyoCx&UMihGE2A z$Wt>s;bC+VF51eUC#fXi6-oI7@LZG+Ne+3GttgVTl@?Jxr3%3I_I89tO(K_-A3MGrh0lsyqEjIw34XuAN>2xTVm4a8U(6~tD z3WZ{-sqGynbSV(_#rbt_Z>k4Np-?DN zdmS-ud31)lEihE&bQshH{x^fr%ALTyXY!Meq*LzXJp@O3*nDh4dk{^Oe{zMRqay(N zBzQw|x%M9)MhT)Twq6krz-}G+F9nbit9m?j&OJeCg_XiLG3% zu2->ATB%;DvP;z$E9<3|i|e&YwZbYD+tLrF`7cifCmP|bqvON&B8qem0`2+HM59)v z2ccT6m0sW-|C5p8(-7BLg<@3PJ#yCOoRi4FG))p0WfbRh?0hQ}1M=nH%ZGTjGq<*V*Q?sl>p4lltVXrUt~?wT(V5Fu!Xp_fHMI2lqO~y znkMe-x(M9KW_iH6AFbQ z4b;+8C{6G@H%l8bNWySq)}qq21msQyj6Af7~z(qXp0?x7zJ?o8`Nq7kwY!k81ztgTYbZpJwe~DF~C(P zTVU)ZJIeFmYBI(EtmQ*WXu?9jL&l))vBL41avEjlf?7gi&r$Jnfy$^LL{&gRX zA>Z^Rsfywh3PoBBcz-X`sJBs!`S1?-zs2c+mR;~EQ1v#7NYvXX1W6`(K+4gQannjAfCmL@p~6i33~ynm!)33Vwdx7DlQM~ZSc7ISx5XxIt}nz$~~v}#9NX!wPn!TYZpg*=tl;Ad@L>vsn{{ejaHYxxB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/0f3e9d1daf534b77f3280500872c1471e93805bc b/fuzz/corpora/bndiv/0f3e9d1daf534b77f3280500872c1471e93805bc new file mode 100644 index 00000000..b7056370 --- /dev/null +++ b/fuzz/corpora/bndiv/0f3e9d1daf534b77f3280500872c1471e93805bc @@ -0,0 +1 @@ +êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿYÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/104309d90b6aed3a715b3b5ecd97031bde2e439a b/fuzz/corpora/bndiv/104309d90b6aed3a715b3b5ecd97031bde2e439a new file mode 100644 index 00000000..77a6130a --- /dev/null +++ b/fuzz/corpora/bndiv/104309d90b6aed3a715b3b5ecd97031bde2e439a @@ -0,0 +1 @@ +ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûû00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÐÏÏÒ0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/109be9d189dc1e5b8cb5c00360eae1c46239a181 b/fuzz/corpora/bndiv/109be9d189dc1e5b8cb5c00360eae1c46239a181 new file mode 100644 index 0000000000000000000000000000000000000000..235944d5e73790b038f3b7c89c4c8a2a1e661005 GIT binary patch literal 24562 zcmeI4U1(fI6oAjRwN-1#KEz6hw!4;CyES+=$uzACZX^0;LB$6j`e4>gu`f{}dF`&H z_o*rdUn~d>Dk8Qo0gFY726lbW2(?(H;95wVW^oZ86l!brUYVIY_y2EylWgZBBr|8u zIdf+2%(;7ivNgPbhzJ0%oBnb#H8nNmlsUNNsB>bTQVV*ojYH$+kqhnxfRw1{gvQZw zwt)ZGzO56F;Cu$;JsZu?$BZ{?{yuo0IvG)LG6(R*Uqzdja|@m%HJwtaRN~%uA=cy) zZ8bql)PuGxxtepGFg$vfbU9i3_!9PNyO4XJX|`Ve`T6fZ_~cyEjwJQ&0iTrYfoGa+ zDIT5HM@yrLLVe*iPLx>gG}8MJX!G9JP z7f&ofd};1PeSW%vwel&Q?x_XmjG9?$VPS!`r{|!uqq0zmeP>Y>pZb}|wl||xZfe@& z7H5%cz*J))M(M|50{~AnU}JX5uyvZ|GLIIU+8V7y%3;}f7K__s^Rx5w^Y6@?;NkvQ z&tRoe(E=_t>Es=~*#9;Z2e0vSWu!jWJ#tqG_|jiX2UJ8Rk#r;Oe7uLAE_V$=>`-NE z;$&~;`ag$;DtD3nsqE2<{Tj>7Oy#-k&Xc_v97KBmPVfdV0AdV+jBT(@hKTetg7+OG za~q0|+6fKrZcBt_@ACBCs?+-_t}@G!Z6~Et!`@3J%ZiT#-8wGCHM*UehCVq!G%hLD z75d;E>FXXxUDGtgF~kb`H&rePqa77dqSz`mF*!9Wo3EkuWMcX=c=J)bFSVw!XH&+lq0tc78;738#_cd2 z8Yi1ci@-Uvt*%GLa|Gdp#T%;Nbl}9*?i4udcEMwgx(n5H^yxN#KF7Np z4)D_}+MX4Ki0mCcJUL884(BFwI59ku8_ki?+`fs);gR%Yej+zPCMI-G->B+MR&?wL zhLH=}h8{&2tvv{I{zDH!E|(u3W8?mfy?pvGL=9FV=@eIQh^@I<6uMxU)^kbHrHFJa z{z@bb^4Xt5%gc$vp_OFvO#amSg){k62~8Uq7*HD`1~xOa)pWiR1s%{tNxg2AOs=RZ zF>Brc3}`BGFzBd<^0beJ2DHJ9QoZdR1%tk&uc|7{N*KAc5K2rnOc|~+=zy!MV4<_w5+9=vqTa|;R8?O>WH1yCK8r568s;cTX zO;rbG5NCRE0{}jh;A;(46=!GTfSANALL4BA$z&gH1W-^Zm$5uPj^kK<`SO350NjLF zJ&i}I$}GE_P!t3x;z|{(RYE0%5F|(r&|fqpfNemdL5NwRqAiF#N@}HIfz25$Y8q9{ z=+SX4rq4~-c#QF}AS4orq!Y0GL(zJ8mUq!-ld$~D;Q4oE276N*01_hqs;Zix`4{5J z)7c{||E?sHeaXbHy~+ipTrQW#DK!6XPr#;4P_3TM()>FczfVyVWd)#^U8z>9RT4K( zzz5hlmjQ{y=Y)_a%|;hAYlo6dTKp45d5b(4X!BxVYapq>Rv$DUIU%I%-z3OKngbUF zqt_Sow)^Q{!x>;kR0jyzub&+)7@C9-0BvZQ782Y;&>I<|kfVL0{6kEzV79T~6-YU+|+k! zt~)m(H~wQx?S|Mi<6Zt|dRi;E9kdMoN~9mxOsGoO+sE77czWLDDGlN_ziZ;Jf>Cz~ Kn|i*R5dR0qLF#A# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/10f0d89773275a484e66d85842c7c1d3fe97a007 b/fuzz/corpora/bndiv/10f0d89773275a484e66d85842c7c1d3fe97a007 new file mode 100644 index 0000000000000000000000000000000000000000..56cf4488d5d9db43dfdff2e5170b8304f7ace7bc GIT binary patch literal 6145 zcmeI!y$XOJ6oz4khOVVa$)8%gvY@-|0$K|q5y2(Qh3SzeW0X}!2$}NG=C-6WJhb|*Fe%S>0w}62nvPulxa8(Uns-E< L0DynvLs6{*xBHi` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/11b492d6730efcac78434c45413aeaccc6a9df8b b/fuzz/corpora/bndiv/11b492d6730efcac78434c45413aeaccc6a9df8b new file mode 100644 index 00000000..b090ce16 --- /dev/null +++ b/fuzz/corpora/bndiv/11b492d6730efcac78434c45413aeaccc6a9df8b @@ -0,0 +1 @@ +ê3510216463510; \ No newline at end of file diff --git a/fuzz/corpora/bndiv/131f3d1b5e3b770ceb91252d04646eac713f36ce b/fuzz/corpora/bndiv/131f3d1b5e3b770ceb91252d04646eac713f36ce new file mode 100644 index 0000000000000000000000000000000000000000..5626de90ecb35bdf2a26b332a58d87381d9ae2ae GIT binary patch literal 316 zcmaF$|NsC03=9k)3IZ4y7}#NKB(MMtFu(vvKSCW$ln4N^m{`CDvjeWdKu1SM2ifJ= Y0V6~M+4^CCfx$or>|_I-HDJI10RLQ^^8f$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1365dbee5a1503a98c8aa65d15552382b493dc43 b/fuzz/corpora/bndiv/1365dbee5a1503a98c8aa65d15552382b493dc43 new file mode 100644 index 0000000000000000000000000000000000000000..bd35120e7da920596c4da1a39962b1b57f2f8558 GIT binary patch literal 361 zcmc~g1qTN}ECmJzhO=-X5RlyAn51~+xcaOA|NsAIU|;}I5Wv8|zz$<0fdy!Q0R}+& z5$a%~L;#4z3=E7W1`Vfgg23IIHx+K~zWM*Zb zy=g1|5*1j34cZGb=H^Y1F_JqV>OjW)uWv9;Qi20?gA5D|oTy+18GwPIrKN>{J_Q`|xWs7=2wTj60XUFEP#p*{4N01& F001D6UZwy5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/14706d68c0e6878b1c3ec5616f2e9e3e95f33fbb b/fuzz/corpora/bndiv/14706d68c0e6878b1c3ec5616f2e9e3e95f33fbb new file mode 100644 index 0000000000000000000000000000000000000000..b4ab46cf1de9b1b3da134f7fa772f691bd758db1 GIT binary patch literal 1915 zcmd6lu};G<5QZ-UAc0UpV#xwUD5@wz90LPn$Sd#wof(mMfsz*hi7{g7%mUF3AhB4= z23@*)0~XdUz+x09Zfwa()6z+q s!A{ih(L*_)ITzUqhz?XG8^|v}#B@|Ym6FLQ-gN&1MlYKgMp0F&zXomwuK)l5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1475aae906b72ed8f0d972efa431ba68f74d082d b/fuzz/corpora/bndiv/1475aae906b72ed8f0d972efa431ba68f74d082d new file mode 100644 index 0000000000000000000000000000000000000000..30c0afe05e61d2d9b6ec9a407769a6a8bddd091c GIT binary patch literal 459 mcmaF$9|{--0boXPgMk4GmqfrvSiJ!u@c%y!6@<+m0002}7!}e0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1484b8ab5535fcb397c00d8352de330b601d8489 b/fuzz/corpora/bndiv/1484b8ab5535fcb397c00d8352de330b601d8489 new file mode 100644 index 0000000000000000000000000000000000000000..3fff2f3020a1eafd80d07a0ac3be2392199f3e2b GIT binary patch literal 1537 zcmaE5KzATOcN<3mjlfiL0o*r3?oE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/177f7f21b6e6a95b0ae23349c558911568cdafbf b/fuzz/corpora/bndiv/177f7f21b6e6a95b0ae23349c558911568cdafbf new file mode 100644 index 0000000000000000000000000000000000000000..e0078f254e67a541e05d08a06f51b3a18667d6dc GIT binary patch literal 438 zcmZ3*p!?*BLjC{$|5M}`9CR6!6||Tbyxz+H*DNuPd8Vj%F8qy(0wb3Z18!h2aiTzs zfuf>;LfSJ$0|NsE1_s4ODP02))MHfS00|iw7>F8x!F~e+O#=gv(E=Y(fFwj7FZd5K zXn;XMYisK>F2&XM&z?MqKn4b2js#rj|NsC0BO(kUto2V@Gq5l)Olhre1-ZSo)j)mo zL;(f^gH}ccgI0&u*4Bv=1sGaE<_amUw$E&8VrVjGYHDgK04Zkx`(vkn0DiA_ A-2eap literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1784d75a2a91da80fdcc82d5734c9d3331e349cc b/fuzz/corpora/bndiv/1784d75a2a91da80fdcc82d5734c9d3331e349cc new file mode 100644 index 0000000000000000000000000000000000000000..b3b4efc2681ecd22fbff2fc1df38bc07b2b66ee5 GIT binary patch literal 24488 zcmeI4OK4nG7=Zt2Yg?@$vxt=tZD%a8c53jSB&TT|a2nB-7DQaQ=)#PXVmDDC*>=X# zyQ+%8jfFykx)9qFKSsA2`dv5+>+;2zsSee;;!*4ZMtq2mr8;{&F%kH8tgIb8yE|=OjE^E$CibhsMn#7d!v}8Bx&*jU#rp zK~rP%3DA3V?a;@Rw`%@2xKEv&C^(q|`10?v&B|8`o}@LMN~Kca*7qVd+}oENO0ruf6lhQh8}^Y3?-tSzKH^y#&dnxzo+r*$}LiD-^n?7MwF`W~qgR1=^pT zgWB%eLM`#VMO0kzuqNByj8eI+X-`>HAEH^Wem-2hg^yY97 z>9Y&L+q?jX2?$cQ!8REp(rX0oyJd453P+uU2DjZ3q3K*mz6GBV-!pmmLtC0fmwLx*H4Df`f{=G?~(Fi&Mc;pD5LWxAO5h-5mB=l6k z?eqM4@#03DLy1HpX`WkG68%)`GbsN2Y8mV=(nur{N!Q7|-gTEgT}h`e6wiHBx==iq(zJnr0ktI(U{ga| zP3Id?&;d=9)Eh?0okOatMI^Bnx0TfiK zRjiJW<2Y7d`{h4O0d7I8pU2~MWtQDeC<+3Uaixy+I-xCu5F|(r(_b_sfSo|2K}cAl zqCJQ_N~)z|iOm@;Y8n;H>Ctg1CeKyac#QF}AS4orq#LmOL(zJ8mUq!-Yhn49!SnCT z4EAO=0i;C!RaG@b^DiXR=kv!|{#{9@`_if3dX>vcwOXx?Q)vF(m4Yo>pk6m+HOfDf~CE(21jF9;#en4KBo?h-N*|P2_n8FXQ3->Zt;FSK6ZV) zX*l!iPnp~sT^XZF7rCB=Hm9&fGZAe{N~_A$42&Z7HvI z@G;QhJ3Z?My6qfaJP3$GxQr!aX9-17qVDx|GwSy5Rd>VCb0(dr{Z}f8f2(FM^Tr8pkQn39RvbzaBGGt_7B)eFoS~`>f~*TkgKC0Md+f7V~33X z1YM<>x&<6Mm_b@FgS0|UF4jN=|9}sCe0TRA-@(1_$(54yqE1C$+yvJf$F4Oxv$z>^ zzr3wv!KK2x5TWSx?s>KO%37;rBwfe0>vm1D;<^i-zKvWn4#O}+7~Te#)lD}3~>%;2#aTvxo3Y*j-nqOFjk5{g%)7!TRcDZ%Zi9T zFg6hY9q8(yqZe~b(nRlT?E!!RFlf)o|DQDJI<$sQ_d+Q}JDG7&G)WUhr64dHhkH!J z?W}3vwE3vXRLL?oxvvx%O)LUR4iR(T8o9H8WDcZbI>=B;ho(t1ee}yy!V&N*Hh_K| gtoUr@|L#dLNQnOIDs&D2FV}M#02mm9F5Uj%3$lID7XSbN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/19bd01dbc971fae5dc6a865d5ab1cdf23e205a96 b/fuzz/corpora/bndiv/19bd01dbc971fae5dc6a865d5ab1cdf23e205a96 new file mode 100644 index 0000000000000000000000000000000000000000..7757b9e47637e78fa9a3d51b9c8dbaff28ec6d94 GIT binary patch literal 617 mcmaF$pJBkkLz=n3fIL7=_mJQMdnACajhap(4=|CZ4F&+4!y6$0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1a4bc1016ba324d40ba7497e35156aa061227e02 b/fuzz/corpora/bndiv/1a4bc1016ba324d40ba7497e35156aa061227e02 new file mode 100644 index 0000000000000000000000000000000000000000..cc5b4c368d94679d713a0b806755cbb962940f9c GIT binary patch literal 338 ScmaE5FergFbzQ|kM*sk)nJeZ1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1add0f8cca75b50eb079c459c7c7cb7dffd91732 b/fuzz/corpora/bndiv/1add0f8cca75b50eb079c459c7c7cb7dffd91732 new file mode 100644 index 0000000000000000000000000000000000000000..8a9b0c099c5499091b49442548190421d436969e GIT binary patch literal 72 zcmY$i)(FzlWIzILS{jPhiYXxQ|NsAbFe4?!6-uY1C|l1|fBQg7QQ3Nz{##8gH{t95 I*)?|o0H8(}3IG5A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1b4a9b3a810a66243ba816e3bc07b8cfb2dd790f b/fuzz/corpora/bndiv/1b4a9b3a810a66243ba816e3bc07b8cfb2dd790f new file mode 100644 index 0000000000000000000000000000000000000000..abefb4de69e0b8086a9b16cbb48b4c1ed95bcf68 GIT binary patch literal 745 Wcmb>Zj|7+*M!_f;9sns>g8=}1I2>gF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1c19226fc48fa1e5b60d9f2ed84dfed79e6861d9 b/fuzz/corpora/bndiv/1c19226fc48fa1e5b60d9f2ed84dfed79e6861d9 new file mode 100644 index 0000000000000000000000000000000000000000..66e1b7a2a33590198931cf8cdc58b2924c4d5634 GIT binary patch literal 84 zcmZ4aE=E^f>xFvVnwh^C7=Ee4xF6Nk6|K~*HFB*rjl;Or-)g>_$#4DtKLZ0ut>Q|U LGE7}-0v-VXwEH6Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1c196330eb11078b46ba64d3670df0e72df99b17 b/fuzz/corpora/bndiv/1c196330eb11078b46ba64d3670df0e72df99b17 new file mode 100644 index 0000000000000000000000000000000000000000..5dd5216065d3ff5bde6fbe323dc250e999db6b93 GIT binary patch literal 371 ZcmaE500s;L2p}#X5m=L`o&cby_W{}m8rA>+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1cd7a2fe889e74f8d82072b494c9306154b2f0cc b/fuzz/corpora/bndiv/1cd7a2fe889e74f8d82072b494c9306154b2f0cc new file mode 100644 index 0000000000000000000000000000000000000000..89e3b9c5c1b6197889d34bd2188fd91057d0b23b GIT binary patch literal 2932 zcmeH|u};H442B(nSYYUoIZ8zbx*#hmr4>?JiMK!*%)rbLu|%jTLwEWbJOFDSfEQqi z#86cXEQkRyphNcMuGh2(A?TKWxZL@C_7`6p-@S%20089SuliLG*V&y{`WGSJDc7}B zTaRV7K1$gml~ z2;h&AT{`|yDg`Ik4SM_xLL?&MA;4Owl$uOx9>5-ZX~&W%JM{P*5e=z#4zTq+fX;zR z(~C4s!i^Jm7jHpMH2uY}#h?)e);|Y40-lSd>&jB)on!E)!w5)vjxOAUM5@X%k g+?%$3g%PcRr}jtd9@(5$|2Ada3dyEu%Gtiv7p>JhHvj+t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1d4c8f52f23b6f10da3ec38fe9b675e5819bd0e6 b/fuzz/corpora/bndiv/1d4c8f52f23b6f10da3ec38fe9b675e5819bd0e6 new file mode 100644 index 0000000000000000000000000000000000000000..fbf62d6fedeccf9e0c6bc1e47078c134d635a05c GIT binary patch literal 495 WcmcEej|LbL1DBM;K5ig@EiKFO`yKzX6)ZM){~Ib8u);KschFIJmUZs`}wji3Y=3>?rNIID*lP$%Rc kPzw3~A3{O_F^LAEg?3;S?Tj99@RwdL07oty7{GEg07}N)KmY&$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1e1acd8ca354f68dbb47ad2de6f10cd6f8217aad b/fuzz/corpora/bndiv/1e1acd8ca354f68dbb47ad2de6f10cd6f8217aad new file mode 100644 index 0000000000000000000000000000000000000000..22c8a01196c756b6be0344eb356523d7f073ff56 GIT binary patch literal 1044 gcmb;mV;BXaV0Zv61_l;1pJ<}-M*&VC0F@B{0MR7@OaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/1e78b7ff6e0d9c53f4f1cdda7ff9565c57e6ab67 b/fuzz/corpora/bndiv/1e78b7ff6e0d9c53f4f1cdda7ff9565c57e6ab67 new file mode 100644 index 0000000000000000000000000000000000000000..76dceb3456a6f9428acc6506c4248c390bcb716a GIT binary patch literal 3086 zcmaE5009i6U=)mkQ9uVEKnFWUDlkZ65M%iKpFx&^f#Dhh!$0J3cm*x%tzd$6>QfbC z?2IQf&g8d#%*fIp`JX{vm8C)UIRgVj!{jv8pD!4GJyT@}&{bDuU{nAp`o(IhFu5~ym_fml*A%8!5~Ox!zx88PRbzGERjR6rstgVc48PQ24nYM*2rkTl3=9kw zX_6);?_zY-wO-UI`ue&YxBkq@#2^AQ0^}Fg|44v=!5T?7KG1+ql7SIfb{ZTYi!z|8 c!UMRWa(@^Y7^3i~8&H7ak literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/20151155b4e8271c6c1e25d34bb53d56a0f94c3d b/fuzz/corpora/bndiv/20151155b4e8271c6c1e25d34bb53d56a0f94c3d new file mode 100644 index 0000000000000000000000000000000000000000..263535b1666460fae98e97733b18427f35c110ff GIT binary patch literal 2922 zcmdO50D(RK|2w$WzX7w!0i*gy!*7_TpJD1PqQGdj9?jOH>3_6ZBo~a9AEV{RX!!vx FKL80d*k=F$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/211dce1a45dcd617ac0cd7363c907d3fe135fc11 b/fuzz/corpora/bndiv/211dce1a45dcd617ac0cd7363c907d3fe135fc11 new file mode 100644 index 0000000000000000000000000000000000000000..3eaf3a0361391c44812535d742c58e8256c95349 GIT binary patch literal 6154 zcmeIzu?m176h>i(h8{=hsnZdvS0A}zm Ab^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/239c7d330be64556a0e3a07ccfb0c113145d98ab b/fuzz/corpora/bndiv/239c7d330be64556a0e3a07ccfb0c113145d98ab new file mode 100644 index 0000000000000000000000000000000000000000..a6966f17e170c14fcd6b4bf38c43d64e7d9b5167 GIT binary patch literal 3037 zcmd^=OHRWu5QfK5FTetpsE9?SNJ!JJ5D^>BP_cqN2VhTnhaSM<1`$#(fW!gHl08DX z0|ePKlZ-Ig(zMoOYmSuq|8P&7G5L2 zJZsU~iDg#K%J270-f>(YI=``aS&kKlerOwlZ^&4?k}3rWN&!WEzdo^&PH<^k#kWZE z7vK{pQ7If9x&@nBgzCpycXN;p5!W|=5QsJu4Zc%pXT%dd9f-3U2!LYRk%6#C7X-lA z*WtbyzvjwFBcQ`nAQ*n(o@lCPSgU^*VVnw-ULb7QeE&9@#ZQm%*N>lENi6ZJF7U2S zsMXUbSQ*u@-Cwcg{{Qv(c^m8F>)FNg!RQ4b&(%BVq9GTC7pGbjv`)enm}M$$CQ#?Q VEE{0Hw@WzZDuJPYSr%Psc?UY!WfcGb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/23e5b787019868b0c790ae95981f1c6a033cca70 b/fuzz/corpora/bndiv/23e5b787019868b0c790ae95981f1c6a033cca70 new file mode 100644 index 0000000000000000000000000000000000000000..0c19ffe61d7550f3788e7e79eaaf2a56d4586290 GIT binary patch literal 6882 zcmeH~J#NA<6o4Ncs&-)Q3|nD(#KwSFdXgTZd+*|rGgKUbp=aor12D9zsBHWnf@4Ue z0{)i7@833dc;nFs5?CeJUJ`er*xh;jgzlx}3HHwrnGT>Qc@>Z5! z9d+IVZLFRTo|mA`Goa$v0wSoJ<`t5DrB_OPVauMHI%^*wFt7brb-AP%P#JVQf+0g3Ku+ zlo2wc3}=)~W^7(eCUnZ&+V#PaoH79L-Clxms81hzRUL4T8pHx5=o3sO-Pk|xg9}sw zdzm%L_-nsEjqDv__Mf|N$J!KVi1}x|PlxN#DD>A>-{JTAMc?L){2fC3OeWJEZ(PM5 z4@B?AxqPfR=X?VIoOAnsS)XacIIVHMX3V{J0+puOqi)sW&1)^XF>?8E2VqV`T)KKe wffch(nI7jIbn71n5oIuA8P4q-OwfyAeKD1GL!SR_llT9&$@_oXT>t+60c~qHl>h($ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/24a5a9e6d25a893d1d8b7089e06d4bd8c0e7bdc7 b/fuzz/corpora/bndiv/24a5a9e6d25a893d1d8b7089e06d4bd8c0e7bdc7 new file mode 100644 index 0000000000000000000000000000000000000000..1bc7c8afcadb728a081058d67627c6ea149b00b7 GIT binary patch literal 371 bcmaE5Ko!71O+XbFkpoEfL=DM07#J7;6|5yU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/24e092068889fde1d7b17f3a49cb8f85921095b7 b/fuzz/corpora/bndiv/24e092068889fde1d7b17f3a49cb8f85921095b7 new file mode 100644 index 0000000000000000000000000000000000000000..55c7bf5dab8df5bc5b269bb594cee43d325ceb08 GIT binary patch literal 332 zcmaFG$N&KbFrfGf!h#4tgvo;eCzw>MQ+&?wE>Kt9>widyNk~XYh<^w~9tDV?@K69A zDYC%-{|1ukH$lMK-rn9m)ZTuky7i;KGtKSeXd*OLMk@i}R$$`ogiGY=^#<8G z!NBv56?k-?eu{>`@P%;ufMlsq>mx8>wGN9#zTzmzhI8sTj_p*tuq#3U3x?s&e zjk|fe0~qFcw+w)WMS4%+Y#Dx~8U5;FH)dSN;cRdpR7&{V-x%btGGQo%5MmvfFl?_4 z@|TpeC1KN3S;5K9}ImGd|;Ab!R0F~u<7wL*9axE#ogPDHswM$|t?7)&de_g=60 z;ZNeDgqe9bUZa2)uGmjHN1g6jjb?{$>g5$_6hT4o31rYsfmPTsjb)?&+}=h5w}G}X zE&zm6U0`z^1(^Xve``rl`Ew<|NjbmYzu7W8AQElo?IO)NGD|I!d(m_tKVOm&-Zi;z znUzGeO@trxw%Gbpr>I=Dal3uWJg74tKW3&^@MowmL%k;=nkh!f9Z^vEC}UEcAKm}M G+Qb)JD|Y?> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/281feaf54294950f51817d6ca323f96af30cc46d b/fuzz/corpora/bndiv/281feaf54294950f51817d6ca323f96af30cc46d new file mode 100644 index 0000000000000000000000000000000000000000..2c8d6a406495ae5b76277d9b889f9735119120d4 GIT binary patch literal 231 zcmdmO00&#)EHKbm{U0~r0Ra;O4Fdy%nW)-8fB_W_rKx3NqM3o2Ns4ibX-eWD7_c-;F-=M} VPW%5Kq(Om!0c7sn&ufn!1pw>|Q%C>+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/28b30fc33697a94fd0c9ab5817a98bdad3cb3770 b/fuzz/corpora/bndiv/28b30fc33697a94fd0c9ab5817a98bdad3cb3770 new file mode 100644 index 0000000000000000000000000000000000000000..ca235efdbb892d880d7306410989c03db7c42cb2 GIT binary patch literal 1447 zcmdPW)MOY1L;)s{s{fRM-w^G%jKSp&1*il}0S9HSAReGND2`z?tsn#9gAo^CU|?WI ik+T%bPl#XURE;7C1ITuxMg}-(jshA1k}^JR+yDSn>{V3& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/28c2ce1e99ad1d0fc9db6fd7ea5fbcbf2646dc38 b/fuzz/corpora/bndiv/28c2ce1e99ad1d0fc9db6fd7ea5fbcbf2646dc38 new file mode 100644 index 0000000000000000000000000000000000000000..12f9364b926e15191d36cb16559b406c9ed4baa0 GIT binary patch literal 768 zcmdOTp|9=P9`b-H11>FZb85mxuGchzaG(rH_hX4QnHy~RD(r~B#P0~hp z-8(B+Htb{oIYzin`k8v2aGeZ;Py>UmvWu>|)(iDItrvIh+`03Hg^PiaLHEU-P~G}^ zhztY6nf25F0>l`iunaelzY_y;s!83FW%!gK12uI+WG*f+4=gbWT^by)-C!~w8p;U3 zP!DE9NH9nPgBQ#U3=q~(1dY~@85kItk<$=^u`*TBb6>O#}c0RYDU0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/29d2a59db35e53adbbbd3180d156aee3c82ee3f1 b/fuzz/corpora/bndiv/29d2a59db35e53adbbbd3180d156aee3c82ee3f1 new file mode 100644 index 0000000000000000000000000000000000000000..3ff3bb3fb401a2461c720a3c046748b3c96deb16 GIT binary patch literal 58249 zcmeI*I|{=v3;*hh8M5OokDQMH*8vSItl zJ-ra(apzduRl-)4^ROv;T2;YP&X#75Rt8oh_5*;|xLS?T4O>-FRWI$vxB)QGT!ig# zjIB>lq9sW6AMCGv$yU0H*dV`_DnkIc!g*RD&oZuyK^IQ!r_1p?8TUN& z7Tl##-}im=5%J(Tz~C(i@C45h09``SunfYvZJ_h7wiu$|wy`iM zwJA4sN{Pjg*?i6U;AJ}fqY*d$M+6YcWOCy;hmHgQMvl|dI(vh9poE>p>}AL|pHNot I6Hyf52T@U0zyJUM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/2a641238b2da0b774bcb85890ab5de6f367450b8 b/fuzz/corpora/bndiv/2a641238b2da0b774bcb85890ab5de6f367450b8 new file mode 100644 index 0000000000000000000000000000000000000000..2601eff92bd58b0b08a4955fda682c38ae34a70a GIT binary patch literal 6162 zcmeIzI|_g>5Jk}x78dTrCSpF?ij7-vHSWqiSy|aCh#?4RBnAZUDQDn4m}ZvgA^-pY zLds#Ci+;4B-4}FE?Qdz6GFB;RYb#r=D^qD9WXMZ*+Jeq--|D*jBt6#&AgMfQI%2u! Q5}R|ArFLrr004h*0P6CY-T(jq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/2aa6864ed8e9998d1caa4355739696dab678fd2a b/fuzz/corpora/bndiv/2aa6864ed8e9998d1caa4355739696dab678fd2a new file mode 100644 index 00000000..fd1313b5 --- /dev/null +++ b/fuzz/corpora/bndiv/2aa6864ed8e9998d1caa4355739696dab678fd2a @@ -0,0 +1 @@ +êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêôêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêÿÿÿÿÿÿÿÿêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê0êêêêêêêêêêêêê0ê0000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/2aac8457237dbabdc42d28f9b62f05d03b3612fa b/fuzz/corpora/bndiv/2aac8457237dbabdc42d28f9b62f05d03b3612fa new file mode 100644 index 0000000000000000000000000000000000000000..6804e17f763f770af7aa3e0f58254283f8e56dfb GIT binary patch literal 1505 zcmdO50D*_BV2W(8=l_2P*ZMc3`pE=CJ^Tm*>i7_34|%DKJo^pMJT}Tl1*74C3I<_# F000RKJkJ0C literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/2b345ae246360e578345ecd17d400250e64b4a9a b/fuzz/corpora/bndiv/2b345ae246360e578345ecd17d400250e64b4a9a new file mode 100644 index 0000000000000000000000000000000000000000..524ed5e72b97b7e77166565b7dc19a9d4c035a92 GIT binary patch literal 2710 zcmaE5z%U9%9I!|Au>vZWTwp+RK(5Q+faWe71>^yE42=SUfV>bM1;YRkOdF$M6byX; E0PCN>ng9R* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/2b6b20fb2fbfad0360a3ae5bb3740363f5a926a0 b/fuzz/corpora/bndiv/2b6b20fb2fbfad0360a3ae5bb3740363f5a926a0 new file mode 100644 index 00000000..9a46734a --- /dev/null +++ b/fuzz/corpora/bndiv/2b6b20fb2fbfad0360a3ae5bb3740363f5a926a0 @@ -0,0 +1 @@ +2*è'~¬ÿÿÿÿú''!:';8m; 3Vè'~)î™ñ§'¬gâ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/2c385fd9805073cb98289da7cf242cacd87c9b22 b/fuzz/corpora/bndiv/2c385fd9805073cb98289da7cf242cacd87c9b22 new file mode 100644 index 0000000000000000000000000000000000000000..272d6bb0b8a685e985a70e057e08cad81140c345 GIT binary patch literal 2955 zcmaE5fDJH=f)NMoQGKj{%EbhXm_j%JwiHHPfWu?~C0BD@WSpWb4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/2d7d044b0b9192c1b030a90c4b937a0defbdc23d b/fuzz/corpora/bndiv/2d7d044b0b9192c1b030a90c4b937a0defbdc23d new file mode 100644 index 0000000000000000000000000000000000000000..0317f6ad2176a6f5b7d11e23b205f8f037e24169 GIT binary patch literal 636 zcmZ9KF=*RB6o!8VJh~3VH;BfTO}IV~91+B1@mOf%)k_zR!Lz4!XgLeIX($GFNvDQx z%@9bOJyW2AH)XO*2d6{=*X`Wpl_$lf@ehZV`}O|+d-oOmt9-hlQf)kX{ZuXV+4+yf z9H_MC9CcW4!})#K>4auxl0qky_B=@vdq<6J3Y4lUrF?Z&txx*PkZh}E$Zv%X0J|F+ zvQ77utB)q3$ud8sn4wQXLw-uOIo_csz(VV3iFq|f+=l#R9KVf=6KB~h8*pem)Q7{% zVJ>x5?G_Vz-|t1M0k_FF3F^(R^SmFE#Ciu8l~0w{LnF!Ur-oJy1Ces}gCMvgrIZ6^ zt^*N(zhvnha(g>+dCnh%i5T{jvl9f&H-+Q|1&nmH4G91M DgC9V0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/30886c7cecc7b09b7585e14453a75cef886adf03 b/fuzz/corpora/bndiv/30886c7cecc7b09b7585e14453a75cef886adf03 new file mode 100644 index 0000000000000000000000000000000000000000..b87dd36ef326ff749119eac112c70c13d38e2bd7 GIT binary patch literal 737 zcmZ4W|Nq2^0{`!WDFy}xhF%5+CJ;>%MR*BHQcdr3DFhns7U6#tg nl*;B|0oGW=C;%v-Gq`|(0RtF=0Eh{RJP-#4Ac9B&IK2Y^TQW!a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3137cdfe829a9aeb76db365caf73a7cfeacb46b8 b/fuzz/corpora/bndiv/3137cdfe829a9aeb76db365caf73a7cfeacb46b8 new file mode 100644 index 0000000000000000000000000000000000000000..15fd48e0a2e86ae01658d3b381004c6e4ee477bf GIT binary patch literal 4427 zcmeH~L2DC16vy8ddJ?hp}|zfMrI}hyV`(h(okuBhs?g0_x|(pW|r_can3h5EJ7)z zgn-aIeIx`CQBf3JJyQzZE&x>&g^o&7K&jN^bpQ|@d^)fy1iZ~kDl?+etw2^1kvb`# zYcG+Fs7GOQ-6qt-w19Su3e+fT$eQa?F&GR6cTGi+loF+Wlz0c|x_9u(G>eE#2mu5l zyZ(joFIeF2j0L0BurT!NQ)6MwwIS-K>-|MEKD6Q&Aw6Q=((~TWFzu$(=FdamR84pB zhm-!zxEnMfjl8R2!1oZe0aELE4un05CvEmj=rjNtj+yN6&%|-I=H;4~<}=T8@jB1D zzIQ#4@>jbRM#n*tOnA2%B#wu>ahy3LAxb{76~-dQ7}E(A+h(k)#+L3xf#J|RkB$5< z5ki2QiAUppf}4U2AGB9bJq-XIb>39h)w5Z9v$PoYSX&YF+b1#Z}hrTi)I@MjEhK!!ye*+K{aRvYY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3141bd5a949ef226c221ea49853532738a6921c5 b/fuzz/corpora/bndiv/3141bd5a949ef226c221ea49853532738a6921c5 new file mode 100644 index 0000000000000000000000000000000000000000..fa7020c3cb78bfcc8fc00409326f0fefcd308674 GIT binary patch literal 504 hcmaE500s;cg8$^{*8*vSxL_y(Yw9|hyf7pW006+yH17Za literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3152a64502f5b8dd46db57376c78a462aabd1153 b/fuzz/corpora/bndiv/3152a64502f5b8dd46db57376c78a462aabd1153 new file mode 100644 index 0000000000000000000000000000000000000000..7879329ae130abd7ffad0672f854272be346a66a GIT binary patch literal 390 vcmdO5WEfaLwEYVfEHHqA1q%!oz`-^HO#_4f@BhPqK^7_?>^%;`N@xrKifSGI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/31fb955d0ba672990bcdb3e38af405970449c53f b/fuzz/corpora/bndiv/31fb955d0ba672990bcdb3e38af405970449c53f new file mode 100644 index 0000000000000000000000000000000000000000..e59a8ff78ff79f093d1680428420624ac81a41a9 GIT binary patch literal 1543 zcmdO50D(RK|2w$WzX7w!0YhE?koUkqM*v|!9T$S^AwQWS0rH$$RuZttrEr@jhIv~S=00z!RUH||9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/323aa3ddc64fc058d771e98fc893de810bbcd1c2 b/fuzz/corpora/bndiv/323aa3ddc64fc058d771e98fc893de810bbcd1c2 new file mode 100644 index 0000000000000000000000000000000000000000..416f5e602500352a40bd6bfc72f9d822aa7c8c8d GIT binary patch literal 11 ScmaF9n}I<~_SGxVL|y4^QjC5HZVW{0DE;kdjJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/348d1d7e662ea1846cdd087dddf4f563abfe212f b/fuzz/corpora/bndiv/348d1d7e662ea1846cdd087dddf4f563abfe212f new file mode 100644 index 0000000000000000000000000000000000000000..53d4544258804fce747d9f33dbdf0275c1eef761 GIT binary patch literal 1524 zcmds1u}%U(5Pi2oBE}Pp)y5DmIVaFq9oW#AK-4R)Fu8)l63*5ykgJTu@?xSj9sYnN z-Iad8#e!ULDU9|sYgQs)Fh&W5@`}x7=Iy+Bo6K~Gh${JNNMH=o3QW8lbBSD|(Ii_Z z7ajg0>a+oAglxj*oH$K LABe<|Dmcf) x!~~`YD|ls~tqoNSGaur2G5}T!hy%>TDML*LM-HopfB=zt(ZK?U!2kaS{{gR{H{$>R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3667ecea4d9663b12349327a095b13b61d45d8f3 b/fuzz/corpora/bndiv/3667ecea4d9663b12349327a095b13b61d45d8f3 new file mode 100644 index 0000000000000000000000000000000000000000..6beacd30f24dcc66fdc730b8b174660b811cd537 GIT binary patch literal 771 zcmaE5Fi3$RR(A=Yh%!(apcqaCpb0fY0gG9NsBSmd0|8i65(7{T!wcwV6J5YxifsV^ DXf0T) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/366f7e2c062844940bc98beef59a0a143984cc27 b/fuzz/corpora/bndiv/366f7e2c062844940bc98beef59a0a143984cc27 new file mode 100644 index 0000000000000000000000000000000000000000..9d6a58812e1c6e7bb2a8f0f0f912401da19e9e50 GIT binary patch literal 615 ncmaE500s<$06<(qGhm8j^8f$;*^s!@1lH6v%wSMN3>5$X&)7Il literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/375bb8ea45a40ce64a1363ce9651dc8ec7e60235 b/fuzz/corpora/bndiv/375bb8ea45a40ce64a1363ce9651dc8ec7e60235 new file mode 100644 index 0000000000000000000000000000000000000000..b4da59a5dcb3362a5b9ac8387b21bf3a01fc169a GIT binary patch literal 757 zcmaE5FsQ(S4GRnwfC0o=R{zle1A{fg5CMPw6YEe$G*5y64!z1yaYY>R3=CMz!Uk|g hdjU=vA_3V3pm+)DW)v|vXn?a20Hy((XBkk<0RRL+u44cI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/38a17043c0cc4f906951d017906992236c5e735c b/fuzz/corpora/bndiv/38a17043c0cc4f906951d017906992236c5e735c new file mode 100644 index 0000000000000000000000000000000000000000..8e1967bbd1a7c8a70d8a75937e1bfff593ce4ffb GIT binary patch literal 735 zcmaE500xE(Fu?d93Sa^_03%e~0f+p+02Y$0h53OHAXXiH0obnsB-u%+M<~#5V5cgy Rn`vqrN$zFfAWb<2004?74Hp0a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3999e423332bcc42d130332d476bfbca32a0b12a b/fuzz/corpora/bndiv/3999e423332bcc42d130332d476bfbca32a0b12a new file mode 100644 index 0000000000000000000000000000000000000000..90d536a6f641421c7d901e3e20aae25be95dedda GIT binary patch literal 8795 zcmeI2y^9k;6u{r=6)LF9dBSm^yk~?MG=9Y5gvHB(jfIDuT7<)530MdgX=P(z8WAL5 zp_O1Gn(M^EMgxL^2ZDcqjjU4%g57B`GP_yH?8am_?q-v?ziKkPdGkIdZ)a!cIg}j- zZ6Snp7|b$20nJk5Y>g9ry!!1ZYI`cRc3THdv}rwlXn${9tZ`aedIMXfMrC6+k&bmv zgovfQARPDks{0?F!dQjf&I@uddtNc1Hjp0OH&I>^=+GA;Od5XYl6b z{qq9dSy}f19l&qL;#@50bxza^g7itp`X?_4U^Rss1_4N5RE{8`My}9i3tBF>TCFxz zxzop2$8ml+jss9IB*zWIfYocpsVxH*02s5`6DGM=e9_jS^o(i1`h%<*^Db!2&yX?k z+*L4PKvJ7-QZ4k7s>r86obYdCz@U_WS(7Q>DN`-!r95(QytPpui`!$38k=H}X0W4J z{P#tkC|7#g0072Sd~@7^Bl%NQ0{`QMUQzKElTttS2J1&S3F)$&uKJvGxsa~oe!Pe9Xl8giGnVEg!GnO3Za2^| z3DSS~Ou~!ok##M5D-!4K2#x!Ew*5vz45{cUmdVwQ>^QByjV}*63<>X6yu*;l=Nt!m zhe_%=hrcTt`2v**JEqgF@E$EyF2~iLNv;A2A)0}%dOcd?gh(pD;mCFWGhWV}zZy)F zONb$J#5CDA$9x#(Te7cYo4r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3a17786615f13c98712c3b186d7b89e90108c161 b/fuzz/corpora/bndiv/3a17786615f13c98712c3b186d7b89e90108c161 new file mode 100644 index 0000000000000000000000000000000000000000..3bbc52db570bc33565dcd2a0404d0f0607b50965 GIT binary patch literal 84 zcmdn-9|{Z_815Xn!@%&$00bBr7#RNT{rB(RD+UGz21dqL_4QzJkOYK*01R3$4C)ja M7#u)K85kJq0WZ`W{r~^~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3a278c479897cf10bc2e5cea4a90654297763213 b/fuzz/corpora/bndiv/3a278c479897cf10bc2e5cea4a90654297763213 new file mode 100644 index 0000000000000000000000000000000000000000..d465bf2913496c41a485ea7734c891423a4557d8 GIT binary patch literal 321 tcmaE500s;gKnp_zH(+I8_>WtbAb>c5Fi;?@1PmA$7_fMV48TH!9sq~35?ufQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3bf04dbc66ca550084b33e3f92dcb145287046e8 b/fuzz/corpora/bndiv/3bf04dbc66ca550084b33e3f92dcb145287046e8 new file mode 100644 index 0000000000000000000000000000000000000000..d95727d7e06d44f3bc2408834c69acbb95eff63c GIT binary patch literal 9 Qcmex|NozXfk7T50s{b8dlvWr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/3d233d72fdaf8a2f77ff5a2ecf1a7c49f30857aa b/fuzz/corpora/bndiv/3d233d72fdaf8a2f77ff5a2ecf1a7c49f30857aa new file mode 100644 index 00000000..460d7456 --- /dev/null +++ b/fuzz/corpora/bndiv/3d233d72fdaf8a2f77ff5a2ecf1a7c49f30857aa @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000-000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/401f2db8d18697d14266aac41da19b756f5dc680 b/fuzz/corpora/bndiv/401f2db8d18697d14266aac41da19b756f5dc680 new file mode 100644 index 0000000000000000000000000000000000000000..c68a862f61503aae9e7ee8637e84ad79ddac4086 GIT binary patch literal 576 acmcEej|Lb}v@*r0L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4080923e9d1df14ace9581b290a670ca3b8ebe90 b/fuzz/corpora/bndiv/4080923e9d1df14ace9581b290a670ca3b8ebe90 new file mode 100644 index 0000000000000000000000000000000000000000..7d43eeed5c60b86dabfa36339a7b7c04249b3842 GIT binary patch literal 68 TcmXSCWMlvXC`AH*>0kr^AgTa; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/417740cebe9b5d70a8451e3094327435ea66dab6 b/fuzz/corpora/bndiv/417740cebe9b5d70a8451e3094327435ea66dab6 new file mode 100644 index 0000000000000000000000000000000000000000..2a9c4172e64e8f1ed04e92e836e18b72b01cf5a0 GIT binary patch literal 1354 zcmaF$k^uy~SiuzOfRS`9D1aFK3Me{I0WtdV0ZR32;WL~FK&k!I(oZdO$OWVJQwB!E Kk1{}c_yGXDK>~sR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/41c5c7d2b3cd1ea723f50c5841159db8f73b6153 b/fuzz/corpora/bndiv/41c5c7d2b3cd1ea723f50c5841159db8f73b6153 new file mode 100644 index 00000000..51aff32c --- /dev/null +++ b/fuzz/corpora/bndiv/41c5c7d2b3cd1ea723f50c5841159db8f73b6153 @@ -0,0 +1,25 @@ + +hL2(SDses}HKr|Q)dMW~vvMv?v GMFIdaOIB3=CeuIOqV2KI#Gh Ds7qdL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/479c5751103b7389c3d80b95c85de12344ed51f1 b/fuzz/corpora/bndiv/479c5751103b7389c3d80b95c85de12344ed51f1 new file mode 100644 index 0000000000000000000000000000000000000000..86b4c910b7bebd69a7510c958ee78b6cadb6aa7f GIT binary patch literal 534 Ucmdn{9}O^!f)NK8(bB+w0L=p+p8x;= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/482a0f54fdd838f8e47910331b03f3c10356a02d b/fuzz/corpora/bndiv/482a0f54fdd838f8e47910331b03f3c10356a02d new file mode 100644 index 0000000000000000000000000000000000000000..e0b20e22e382097a44ff5805cb255f0632a168f2 GIT binary patch literal 4096 zcmaDATw+>WQdyAdne56y9;juwOrAzKFdzq5lcNbYfIEgL@CvsHDY9Q3pdH-L5(FcoNF g3LyhnsE>k?2hdZCA#%cCU|>L(N8+ogp{d0W0GGm*ng9R* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4830614ac0f14f87cf80a4487cbefbf9778bc6e5 b/fuzz/corpora/bndiv/4830614ac0f14f87cf80a4487cbefbf9778bc6e5 new file mode 100644 index 00000000..b2304b18 --- /dev/null +++ b/fuzz/corpora/bndiv/4830614ac0f14f87cf80a4487cbefbf9778bc6e5 @@ -0,0 +1 @@ +êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/48436c71fabc1f5d2d81ee0c45321047bfda6a5c b/fuzz/corpora/bndiv/48436c71fabc1f5d2d81ee0c45321047bfda6a5c new file mode 100644 index 0000000000000000000000000000000000000000..bec268c8d0948bcf497041bbff4670d095034bf0 GIT binary patch literal 512 Xcmdn{9}O@J7w~`hc!lbK5gzFPOeY(p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/48d2ab54a8b5bd67ecf90ca6b2cd63ee635e0ad5 b/fuzz/corpora/bndiv/48d2ab54a8b5bd67ecf90ca6b2cd63ee635e0ad5 new file mode 100644 index 0000000000000000000000000000000000000000..83c1d5d0cce9f621c04b632dbd81b35f31e9c78a GIT binary patch literal 53 TcmZ4eA2;|8mNH;4Km&#V;;kg) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4947b24445702b03bce79b7604e88957d6e13638 b/fuzz/corpora/bndiv/4947b24445702b03bce79b7604e88957d6e13638 new file mode 100644 index 0000000000000000000000000000000000000000..16377413481b71d979eeabc6c064a85316cc97ab GIT binary patch literal 64 TcmXpoKmc6^1_lNMmnZ-LV3P|z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/49704a8c270c656af9cb0e213bee678ba305cad9 b/fuzz/corpora/bndiv/49704a8c270c656af9cb0e213bee678ba305cad9 new file mode 100644 index 0000000000000000000000000000000000000000..2de62be58d59100912e4580e8e880cead234b0de GIT binary patch literal 311 mcmaFGz`(%BKp7xQ|K|lbEwu*ApqomF4*~3il#wluq7eXf#RAL# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/49997b8c05840da3dce16a84eec124549aee387d b/fuzz/corpora/bndiv/49997b8c05840da3dce16a84eec124549aee387d new file mode 100644 index 0000000000000000000000000000000000000000..5a4e14a148fd55a415ee8b66e3da8b5b017cb002 GIT binary patch literal 181 bcmezT84Vbq0S*Q<0Rsag2ATp4`!E0i1OFWE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/49ea3b58a5794ec6fbf58c29dc3cb7f6447fe9bd b/fuzz/corpora/bndiv/49ea3b58a5794ec6fbf58c29dc3cb7f6447fe9bd new file mode 100644 index 0000000000000000000000000000000000000000..582b07418d0685d275456eccf91bbaff5ad2f7f1 GIT binary patch literal 4078 zcmaE5FbYP&C>U0Nf#zUX1Q!?aU{L#aG79)#a{AA+)21M?LE`HF=wOhzYZM>@+Ljr} zHVtK%VBk26ffMNBlrbok2oSEI7cgW%fD8na9smHG94g=d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4d7c8bd98b876fc3277ff489dd4c420a30e41165 b/fuzz/corpora/bndiv/4d7c8bd98b876fc3277ff489dd4c420a30e41165 new file mode 100644 index 0000000000000000000000000000000000000000..2a1e8cfb1c360cdfe3b7288660a02c8a9d6ed9ae GIT binary patch literal 732 ycmaFGz`(%BKp7b7`mun`m;j3^F!;QnaV9P~Y=F|xVz36Aif+s(9~Ce%FaQ8doe?wu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4d9fd59c323de3e80b926e683ed26f9907fe068b b/fuzz/corpora/bndiv/4d9fd59c323de3e80b926e683ed26f9907fe068b new file mode 100644 index 0000000000000000000000000000000000000000..ef8ab6d25605841a2cdb18ad5052fbd388b9a9a6 GIT binary patch literal 75 fcmXpsH&074F)&Ouzz!JDfB{@Y03id?%D?~sq*Djt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4e1e06224e488a4f51372255788789e3ec8888fa b/fuzz/corpora/bndiv/4e1e06224e488a4f51372255788789e3ec8888fa new file mode 100644 index 0000000000000000000000000000000000000000..9a36b0b531632da6773aa702e060f164a90fb68f GIT binary patch literal 415 tcmaFGz`(#@KmdT$&8)O&kp~ulz!?Sxh6M{2Fo1!U!teiJ#(yLuSAsx;)(iDI yCI(eTmIelh5+v{qiH!{~ViN=bdDR!{7TJ=b3=NZ!l^|J8RbWk3(;#5r!xR8}vR}~v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4ea65f396b6aa9a01d3a524ab6b0d5c7c909892a b/fuzz/corpora/bndiv/4ea65f396b6aa9a01d3a524ab6b0d5c7c909892a new file mode 100644 index 0000000000000000000000000000000000000000..b58d4ad172a37611c65b5982ef28036fdc1164bc GIT binary patch literal 697 zcmchUze)o^5XQg6Sf$Z;W#Bx5EG%pnut?z*iceq>h|N8KkFbC61w^s5R0t^~Wx&E$ z5CSQjF3lEK`2r(*8#JCNOyjSZVrRac;rpZ)I>W#5!knL(vdE!m26)kQ&bml-1T)+9 zYl47GSxnCrjmNgq=mXtFtQ`y0J5@q@p`|AxDqBr7pgdhDW4=2JA-zs%7)JZLPqTzx z=_6%k^LBi4O*G%XR9*Rgs8brnp{Gq$w`^)`!EJqZWx%#P)CE`dhd{PWopWC+0VDtn z2XZp=Vro`dOeW8jwVj`4Qu0X5)?(;x++Yb{XFZ`m^E>`quQ3i?k8j>_qqT8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4f0b841d09f13218fa9112e9abc6a6b7d6e26d9d b/fuzz/corpora/bndiv/4f0b841d09f13218fa9112e9abc6a6b7d6e26d9d new file mode 100644 index 0000000000000000000000000000000000000000..1f70a3d1d4a95b82c7e8cb74384c4d8a8691f9f6 GIT binary patch literal 4096 zcmeH~u?oU45I`@BqZXW;q>~sBTwL@&tvi?! z{*KUuuzP2EojQ|9i$#de)?vE*oKz7jp#pg_X9QoxUjhz+KC}61nboqW)p|jez1A*D z)ae=!+&lA&)Ll~bARj0p%MaXoclA{5=TFi{{eM_>$8UZC#<{-8d;!~6tr%Gf*%Yif botr+$5iUY9`pI#$x!xx$%Ua!OVXpKKuC`!% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/4fbc59275f1bf9d4cf4e044f586a8f51da1e0af0 b/fuzz/corpora/bndiv/4fbc59275f1bf9d4cf4e044f586a8f51da1e0af0 new file mode 100644 index 0000000000000000000000000000000000000000..23e58de88305b5b6547bc23aa628be55cb81c56b GIT binary patch literal 4488 zcmeH~KTE?v6u@5w|DZ@6T)JpQLa`#gVA5JUQ-8+xJX7jYDhI#1!#gU zM+G_Mvs`-R$MyhcAp0FXKbyownZ#4rI?9qL#`@qyp}ApoD6kpvpR mp5mh&v8s7iwiAsDNRB*+dIk*k^{{KH()B^zAT`$J~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/51099f4d3b5cd7e30ae7e68cdbc8720be4a51b52 b/fuzz/corpora/bndiv/51099f4d3b5cd7e30ae7e68cdbc8720be4a51b52 new file mode 100644 index 0000000000000000000000000000000000000000..3ac63041208900c676c306dce6cbff0739a68531 GIT binary patch literal 625 mcmcEej|LbRtQn{a7)dpbWDTQ$46us~J$L{kS~~iVLoEQ%B_R_4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/5111ff73a0baeefafe85582826a5901a5f3d802f b/fuzz/corpora/bndiv/5111ff73a0baeefafe85582826a5901a5f3d802f new file mode 100644 index 0000000000000000000000000000000000000000..be35fd9c554d0c13ef279e4148b0625c4311b7e1 GIT binary patch literal 6146 zcmeIzy9t0W7)9X}7Ovq23Fe`#lL>C?0JaKZ2!S+`M-k3frnm?GCg=VUz`+TC=BDOF zpd;H~cPWe3)@d!>?Br^UvdRb{Qwp8?N_xjb)wjY+eZC2xsxPbLKAAB0v3Y}QQdB^2LiCDBnF@wh8NJ!rXd0VZwXh; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/532e55f79e68e0699dcf2b7a67b8794eca3da647 b/fuzz/corpora/bndiv/532e55f79e68e0699dcf2b7a67b8794eca3da647 new file mode 100644 index 0000000000000000000000000000000000000000..0744a6c4a46c2195d1c2dff025733f1f0b574dde GIT binary patch literal 4096 zcmaE5FkoORVeo3e95)JvJ|LXFZ~(a1?ZE)f#R{%s0IbT$1lU~&H;ilt{--5?I}Z$w zkqd;y5(Hk+st|^nPZEeBNi_zbKs!Bi z3~c~%j;D2 zm>IqyS8H)CC3$;9wibW>``~wq?Nr0|l_E PWe`zCYehF@1_J{C#Y-sX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/53831272810f9d9c0cee74dadd8d9b1072624ac6 b/fuzz/corpora/bndiv/53831272810f9d9c0cee74dadd8d9b1072624ac6 new file mode 100644 index 0000000000000000000000000000000000000000..3254022110cc50999e92a67d1188bfd4fc5b1032 GIT binary patch literal 731 zcmdN&W*8*EnvoIW5-3Fu;3Y>B0x&WdzyL^4%fJ9E0Ahm)1|x)848RW)@qsaj1ZGBQ zsYa&8X-TO`28l+-NhV3ACP@~FsYb?zsVRv`iKdB(P?L`S`}YIP#1=&VX%2|=4|OBK YfS5=~N=h*@2mAk}Dae&d4F4Gz0BBW!u>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/53d5adc15e1a5fe89aeb452a247349c99b280522 b/fuzz/corpora/bndiv/53d5adc15e1a5fe89aeb452a247349c99b280522 new file mode 100644 index 00000000..93798933 --- /dev/null +++ b/fuzz/corpora/bndiv/53d5adc15e1a5fe89aeb452a247349c99b280522 @@ -0,0 +1 @@ +êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê¼3êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê00êêêêêúêêêêêêêêêêêêêêêêêê000000êêê00000000000000000000000000000ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê \ No newline at end of file diff --git a/fuzz/corpora/bndiv/54c5a01ea2e92a2af1b76437932e0fdf0b4645de b/fuzz/corpora/bndiv/54c5a01ea2e92a2af1b76437932e0fdf0b4645de new file mode 100644 index 0000000000000000000000000000000000000000..f776dbb48201f6bf96844ee66b8c4676f0ed77b1 GIT binary patch literal 750 zcmd7OOAP=p2n5keBFkqX^>3ysDuHn0Ihc8dvI?T&Y$B`N0#pgnNH@|`a?`Ees+|LU G*~ACpCqzjA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/54c6e676d27f393d76ec2233d53953a900c404a9 b/fuzz/corpora/bndiv/54c6e676d27f393d76ec2233d53953a900c404a9 new file mode 100644 index 0000000000000000000000000000000000000000..6bff2526c1cc471e950868f06056ca75fd05a050 GIT binary patch literal 83 zcmXqh#js9QSGA6Tfq~(_76knN|Ns914h{~Ec^n)Z_wMawU|-1+P~;J1c|WK%>RBU4R8?;2Ak7Sz+@EgzvT3vXQxd;VkoLc!6={+U>F6XU=$2t007P4 Bf4%?! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/58d621b1d3e4d0d75aead325ab29762811d9bab6 b/fuzz/corpora/bndiv/58d621b1d3e4d0d75aead325ab29762811d9bab6 new file mode 100644 index 0000000000000000000000000000000000000000..114ff456e07e05d6b485de032de184c97efbef07 GIT binary patch literal 375 ecmaFG$N&S3uV4TsGAIDpfe2Sp3(&||A^`yB#R)3_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/58ffdbbb4d4956c5c41edacd1642c884f491c4f3 b/fuzz/corpora/bndiv/58ffdbbb4d4956c5c41edacd1642c884f491c4f3 new file mode 100644 index 0000000000000000000000000000000000000000..07f1dfba6f24bfe24c4096cd72128e38b2abf448 GIT binary patch literal 299 zcmY+9u}T9$5QhJa+gKziRB#Kq9OuuW6zh-{s8)ld#NxuBU#Eq^xppXU*0UMp&s}mSo^1GS0TjF-8 z2{Bmo$D1}a&bh?-jKQp%Ism?}(hD0c#CSuM==_-si7TMh*?NyOz2CSlMjypc$4wRH z`Q7UL>(KgzHs0O#vN-_4+)Y<=s1A-38$p`h_H|0YT?(?U>w3u`tir@bLK^ki4=5*p osot)gd+_#A`Oh{x8SH1w**gMCUrHsqEOb2L?1fHLW5fqE137-RuHsf)TtnNfUfQQ`S3R z%>4{N^MQtHTuJ7csU$^2&QWid={rLunL{;tF1cNM6@~!uG%H~#Rw?a2_gkNQnsz>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/5c94cfd25f2af76d1eb0bb49ab8d1f515cd74f69 b/fuzz/corpora/bndiv/5c94cfd25f2af76d1eb0bb49ab8d1f515cd74f69 new file mode 100644 index 0000000000000000000000000000000000000000..26fdeea686ef15928f9abb2051c25b4306aadfc9 GIT binary patch literal 373 scmaE5Fff3h0gJs6KdP2?9_nWXNiA5g0E9sleo%m4nlK>S00wda0KQ5><^TWy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/5f12df8b44ca7b529bb16d6bc61d802bc84fdc9e b/fuzz/corpora/bndiv/5f12df8b44ca7b529bb16d6bc61d802bc84fdc9e new file mode 100644 index 0000000000000000000000000000000000000000..d7b03076276f156ba79249dbcf3e89b2dd5e2a31 GIT binary patch literal 631 dcmaE5fE8$A6{Q@Qk#9r+`C3N-cEB)T007coU~2#X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/5f2fbcc9e323f9f3c7484392610826a0d2622bde b/fuzz/corpora/bndiv/5f2fbcc9e323f9f3c7484392610826a0d2622bde new file mode 100644 index 0000000000000000000000000000000000000000..66142ed12e53ef7cb2a668ace601a54b5e8a093e GIT binary patch literal 2103 gcmb>Xj|LbAIc0V7(Q0JBj502bpQU;qFB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/5f80c56a91491f9828dcc637a4c17ef61c5c6e35 b/fuzz/corpora/bndiv/5f80c56a91491f9828dcc637a4c17ef61c5c6e35 new file mode 100644 index 0000000000000000000000000000000000000000..f07c603aada093c98deb22209452d21f3cc45004 GIT binary patch literal 397 zcmaE500s;cg8vlghqwR=tYHl504&a0#K6F?dG_Ybn@@jc*nDR5=Kli+)~~An|NsAH O!84l;H*el-umJ%3m7&N0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/5f9cd939d705cc98b625eea88049403da68bb53a b/fuzz/corpora/bndiv/5f9cd939d705cc98b625eea88049403da68bb53a new file mode 100644 index 00000000..3d9594fe --- /dev/null +++ b/fuzz/corpora/bndiv/5f9cd939d705cc98b625eea88049403da68bb53a @@ -0,0 +1 @@ +ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/5fc229231c40467c0667b24bc690e2fbe5d0724e b/fuzz/corpora/bndiv/5fc229231c40467c0667b24bc690e2fbe5d0724e new file mode 100644 index 0000000000000000000000000000000000000000..47b036909f7e2df1552982e742a448212f36b926 GIT binary patch literal 1024 zcmZ3bs;a8G5(PA9y-=@XVo;T3sAphcNU=Y7qw(IEoIC$m8o2+nG%(n!+S|X>RtaCRAe^WnifPU#I8}(q~{`u$7eXeuY(Wz+3!@g5;1IDF6UD CT6}zc}?VNetX1#AW|4FWd z$dwSe5+YYZy5V;Z}S3=}U zh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgD zN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZ zy5V;Z}S3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgDN{Czukt-o` zB}A@-$dwSe5+YYZy5V;Z} zS3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe z5+YYZy5V;Z}S3=}Uh+GMg zDN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgDN{Czu zkt-o`B}A@-$dwSe5+YYZy z5V;Z}S3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZy5V;Z}S3=}Uh+GMgDN{Czukt-o`B}A@-$dwSe5+YYZXj|LbAIE7||LC{{hAbAYcFh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/620c71bf929336df84bd9319ee245fbbdd5fe6e8 b/fuzz/corpora/bndiv/620c71bf929336df84bd9319ee245fbbdd5fe6e8 new file mode 100644 index 0000000000000000000000000000000000000000..fab7a5534b8ee73ecaf54779018d6138501ace8a GIT binary patch literal 1024 zcmaF$3JDk(7#J`xFfhP{4j%@K;R7J`bOPVtfDvjVTmUNoD>D55|35zWQw-?jc}x&= zw%}cidR^Mx=g*&icpjts@}<@b^{%c3T@b+V|Njg1I>oN8>MjWGdinC@%Q{6#Ezzwa zL1zoxK)}*0#WX3^IL*{NEy+AJm4Si5jfnv)gAN!N+~Br7huij_L3L(~uDTY;rY#C- zk^&5G-hucG4RxxjFp1l&|2@@sRb{tKRU@IwcfIUG5 Pyk)>^2xjPw0x$powm!Zr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/621a2a867e09d1b6c367d0b23952de7b84671654 b/fuzz/corpora/bndiv/621a2a867e09d1b6c367d0b23952de7b84671654 new file mode 100644 index 0000000000000000000000000000000000000000..7eb2577ceb9361c9bb442ec928ee153e5e0ad368 GIT binary patch literal 370 pcmaFGz`(%BKp9}XONRc>3vg<(2Fswh3WYORoJ`13aCtZb1OV?C1`q%M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6225f7aef80afac702b6b8f6d13481f78ecd2c04 b/fuzz/corpora/bndiv/6225f7aef80afac702b6b8f6d13481f78ecd2c04 new file mode 100644 index 0000000000000000000000000000000000000000..2fe5a915e19b5896f17e6a53fe27f95b5717e9ff GIT binary patch literal 760 rcmd0*3lm@%1%!Z_nwlC^&3_62A!{fBjO1vhz%O7xj-5mST00B?Q^dV2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/62caedcd247a2e8256de1a31c547866dde860889 b/fuzz/corpora/bndiv/62caedcd247a2e8256de1a31c547866dde860889 new file mode 100644 index 0000000000000000000000000000000000000000..ab1d96172a8c335787e3c6c7c92592c20b11f390 GIT binary patch literal 382 zcmZ9IF-yZh9L3+&EFx_O6}+LOA^tfD6oe#DC>VzhRtWe3vIrrIA3;cObN6uQ2T-t^ zo8O>Yp>xJS%^*5BndRh2JJh$_A28u}m2uXlWFWjsWIVY4YHTi^oaDlP{G4@1C9@ajg0>a+oAgqL@fP(=5 Dr7a#O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/634e9d2fc25432627926d33f913deaffdd5cbdab b/fuzz/corpora/bndiv/634e9d2fc25432627926d33f913deaffdd5cbdab new file mode 100644 index 0000000000000000000000000000000000000000..ec79c4b342d9dd36ec5d95387cc4e958daa50c24 GIT binary patch literal 1880 zcmeItu?oU45C-6@baB;=f)I+0t z6~x6!Q0PY>Tyn?VDVrb`Df%oy=42?Oj~E;k#)vN_V=-W=6Zq66S)|N~P`G0S=Ui^8 zb$w-AaUnsfkIDiu0F-s5vi{&vt^G$ENbV^SOIH5rMGtoH68xK_d?^p#*e?6z+5Fu%hWR(6e;c^bX#A8LXyKST literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/63caab10e013b9e1bf88c4200c46f526dc8bc2bf b/fuzz/corpora/bndiv/63caab10e013b9e1bf88c4200c46f526dc8bc2bf new file mode 100644 index 00000000..84e92643 --- /dev/null +++ b/fuzz/corpora/bndiv/63caab10e013b9e1bf88c4200c46f526dc8bc2bf @@ -0,0 +1 @@ +³›³³³Ëó³Ì³³¯ªÿÿÿ³̳³³³0° \ No newline at end of file diff --git a/fuzz/corpora/bndiv/643c9ee84d4a7fd3bfbe75b8bcd14adbb1176cce b/fuzz/corpora/bndiv/643c9ee84d4a7fd3bfbe75b8bcd14adbb1176cce new file mode 100644 index 0000000000000000000000000000000000000000..cd96c0aef1d3de0c887bc55c2dd01b612bdbaf7a GIT binary patch literal 1907 scmb=EWcUvS3=HoW1|vYYZxoDzQ7|~b;4CXf!H5QmgV*=4TI~OS0QROFdjJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/650f16d65fff1aefdfeab0b9d88a002caa00c21c b/fuzz/corpora/bndiv/650f16d65fff1aefdfeab0b9d88a002caa00c21c new file mode 100644 index 0000000000000000000000000000000000000000..3fd3c51cc569e14e53c4013ff6237a9a4f75d9e2 GIT binary patch literal 736 zcmaF$|NnnB1_lO32Fk!t*N+8k#spYYfx+hmjWcn{VFQ$g7K1g|RCHrT`KW-AfdK&X CPZT!* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/657c11171351be50552654891042cbee124d55cb b/fuzz/corpora/bndiv/657c11171351be50552654891042cbee124d55cb new file mode 100644 index 0000000000000000000000000000000000000000..03872b7fb5e91b84b00c6cd052a7a04574eb8313 GIT binary patch literal 386 bcmaFGz`(%BfFBT&rwCAL_(1EY6f^(;XaoUp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6584e5fe51bab4cd4df1477ae53a2edaf529752a b/fuzz/corpora/bndiv/6584e5fe51bab4cd4df1477ae53a2edaf529752a new file mode 100644 index 0000000000000000000000000000000000000000..0908e5171a7a76b4d99bc82d8401445286a93e7d GIT binary patch literal 1360 zcmdPW)MOY13{0Rf_)i)54bhIv7+j&O0F{6#;GoPE!~+xu#W9Sg17tvaFj5AP?Hr8+ N3IR#Em_oa70022%R%`$O literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/65a6ab2a98b8083a205e476f15ca5e44993c6a9d b/fuzz/corpora/bndiv/65a6ab2a98b8083a205e476f15ca5e44993c6a9d new file mode 100644 index 0000000000000000000000000000000000000000..8c169ae95c9d8c9f7077cf303a1abffe086c9d12 GIT binary patch literal 580 scmaE5FlYb+ZGaVRjAdY8pi{^px!(bajSdL=lLK7~Hh{-d*p!0+02j?O=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/65d0109e04c5cbe3493e68dc353116eb1ff9e721 b/fuzz/corpora/bndiv/65d0109e04c5cbe3493e68dc353116eb1ff9e721 new file mode 100644 index 0000000000000000000000000000000000000000..186482d1f0ab70b25ad23586b3b48157fdf7e617 GIT binary patch literal 597 fcmaE500s;L2p}#P%D|esjvv6dfCFndiwpn&*>E+1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/660405a62a43782afc40dc6c5fda24f7c5769700 b/fuzz/corpora/bndiv/660405a62a43782afc40dc6c5fda24f7c5769700 new file mode 100644 index 0000000000000000000000000000000000000000..5856e59d5d8d1080c80f5a26d3e3b7d4c65776d8 GIT binary patch literal 2979 zcmeH`-3fp&420tb4kGBZ4(SLYRI2tTsci_hP$A!gkmS6kCvFA<05I5xYr8t)nn(0j z6F#jsJ#j=x{azAGJOWbp-t?5-_G`S)-q=64f3;(S(P51L`^WHEgWyJ1Q+4)2en8*Q u8l!n&G!G1y2P@zVbdLFP9;MYwGmB&{(Mr8}Jw4q)`?c%DFl`{_Wwo4r5+Mfw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/66ec280b13484a101cdc9bddfb227c77a4d64d8b b/fuzz/corpora/bndiv/66ec280b13484a101cdc9bddfb227c77a4d64d8b new file mode 100644 index 0000000000000000000000000000000000000000..931f562b48c621185ad8dfe9f5ed3bf175e630d2 GIT binary patch literal 132 ecmcCkTw`F6GT&gO!3IMHI)gPS^9|C<3=9A>3UF|(G7Lg5)XTIuV1k1KELgC>01RNRT>t^w3^WZ4{v&`vR#ujJ77`%r J{DJl<2LOFb9+3b5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/68c7eda5bce173a16a7bd9fc15c4ca5231446951 b/fuzz/corpora/bndiv/68c7eda5bce173a16a7bd9fc15c4ca5231446951 new file mode 100644 index 0000000000000000000000000000000000000000..084f4c3c1eba1aa60d6bb4ad0c07accc9b108009 GIT binary patch literal 3000 zcmeH}y-ve05XTS63ru~3v=a!a(rq0O5*t&tj!cMwM_?l58F-5hkvj4v@eY*jq%KSr z3j^~Zx3RfvoDf=CsiMCjvHy4HJ6|j-!;khG006qjvixch=`63}@ znr`{;SiWVrrH=lhq>Ba0T1F*i){jkIW~Ojn7A?UAhC<+lQSNw2X0~ zMmF&n@kq{Bhp)OIBx-cc1@Co{=Xu`yfD{1Gc#h( zEm>`%u@6efj~r@Zxj?lsDsEW?^2_`{)mf<}wq`pfIsoni7u^BCK{Wn%or literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/69303eb570a1f1e778a6d4752f5f637487d0c2e2 b/fuzz/corpora/bndiv/69303eb570a1f1e778a6d4752f5f637487d0c2e2 new file mode 100644 index 0000000000000000000000000000000000000000..8f760109517428eb5565a3e8f8f24a2e65079647 GIT binary patch literal 723 zcmaF$iX31t`~d?5kmAusgGN*UL%YEM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/693a6b8c84ad5fc1881229730f7673b1609db719 b/fuzz/corpora/bndiv/693a6b8c84ad5fc1881229730f7673b1609db719 new file mode 100644 index 00000000..6fd7f908 --- /dev/null +++ b/fuzz/corpora/bndiv/693a6b8c84ad5fc1881229730f7673b1609db719 @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000¾0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/69ad85604d63846dae9452be0344f4d1326bdb9b b/fuzz/corpora/bndiv/69ad85604d63846dae9452be0344f4d1326bdb9b new file mode 100644 index 0000000000000000000000000000000000000000..c6fc2036b6a606d7fe6be35ca14513968c016f9b GIT binary patch literal 1980 zcmdO5fB^*t1t|0Qe@2G?AOIn01{7&#@+hDofF&3P23#rSD-CT&2Y=B8umBpTWAcpG X!s5_TKy@&hTG0S`sdW?#I`9_&rAT|- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6a4823d453a8b1a15b3d1290212d35315ac256d2 b/fuzz/corpora/bndiv/6a4823d453a8b1a15b3d1290212d35315ac256d2 new file mode 100644 index 00000000..5b4550fc --- /dev/null +++ b/fuzz/corpora/bndiv/6a4823d453a8b1a15b3d1290212d35315ac256d2 @@ -0,0 +1 @@ +«0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000è000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/6c39598df93efb6ad0d4ff68bbbb629765b2ab05 b/fuzz/corpora/bndiv/6c39598df93efb6ad0d4ff68bbbb629765b2ab05 new file mode 100644 index 0000000000000000000000000000000000000000..9dea7ba3efe2c7fa65db7d385c6cb1ab626fc8ec GIT binary patch literal 755 zcmaE5FsQ(S1q(nJM1g_Te>A|rV9hY>03(_wL4Zt8VlfFDz!~WUIAw?gWE+6uVW^u? P#P9-`25g>XKs5&dvOlYo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6ea508734d66a5b8e8849d970c7849d07d398b29 b/fuzz/corpora/bndiv/6ea508734d66a5b8e8849d970c7849d07d398b29 new file mode 100644 index 00000000..50831a74 --- /dev/null +++ b/fuzz/corpora/bndiv/6ea508734d66a5b8e8849d970c7849d07d398b29 @@ -0,0 +1 @@ +êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê \ No newline at end of file diff --git a/fuzz/corpora/bndiv/6ead16798043c420d1e6669f1359753cf3387258 b/fuzz/corpora/bndiv/6ead16798043c420d1e6669f1359753cf3387258 new file mode 100644 index 0000000000000000000000000000000000000000..d890c3aab382057c9577262b41b79c919a04f2f2 GIT binary patch literal 732 xcmaErn^+N_lbUC1$Up{|Ns1muQWRqY)?h(&W9ZFC2cH)-j>KS~cd(OT9{|cU2o?YU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6ed8b63d205ba30917280b7acb723b6c35067ddc b/fuzz/corpora/bndiv/6ed8b63d205ba30917280b7acb723b6c35067ddc new file mode 100644 index 0000000000000000000000000000000000000000..1cf91526ec04921674867b3264f206ddac7adc5b GIT binary patch literal 755 zcmaF$9~Ce#FfcHJ2$(R84;Hce|6lzkNEQsh>JR{pOBH@6!gwqI-9|KkE=>|&hjI@f Tf(`-D-GBh-GQ*ueU>*bj_+K9F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6f16aed58ea34039fdef6ceadc26430d5c83a6d6 b/fuzz/corpora/bndiv/6f16aed58ea34039fdef6ceadc26430d5c83a6d6 new file mode 100644 index 0000000000000000000000000000000000000000..47f588dac7828763a5218f5d3429fb7d644537fa GIT binary patch literal 27 ecmY%VZ}7|D|GRzP{wF2<|If(4!0_Jy0t^Aut_)rP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6f2148c3dd78895af06df23e7015030c0651e029 b/fuzz/corpora/bndiv/6f2148c3dd78895af06df23e7015030c0651e029 new file mode 100644 index 0000000000000000000000000000000000000000..245788faa8eb22141a5e663d7277cfa204359213 GIT binary patch literal 1513 zcmZ4WQQ-*#0|SErh@cdZWC*fiWHt(Tg$z(+PytLCswlDG6n;J|Njnm>aQeibl1JJlYxOtoq^qhJ(_f>AIE1_Yos3I6{F0LdmF!2kdN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/6ff32dc01e3e17c5094408ab01d29b681abbb521 b/fuzz/corpora/bndiv/6ff32dc01e3e17c5094408ab01d29b681abbb521 new file mode 100644 index 0000000000000000000000000000000000000000..94b1457d8861d3ca8b971ee88bb9b8b8ab3fbfbf GIT binary patch literal 277 Scmb>aj|Lb<9$-WZg8u-;>>ynL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/71dda5fc0481f14a398ba1c00f3c125ce54b5e7f b/fuzz/corpora/bndiv/71dda5fc0481f14a398ba1c00f3c125ce54b5e7f new file mode 100644 index 0000000000000000000000000000000000000000..3e7e801f96e6f491b2479d3b630a324767999f45 GIT binary patch literal 65536 zcmeI$F-`(e07cPXxEOUoF2`WuK8TyJv9NX*#-4_fLL(I+Bq}#3`JU4dCYeAk4>HW{ z%^1&%F~(Rg7Z0D02fQCR#>u@rp8O?#=z5Hcy;H7sp1vROJRDqfR`Vmr>nl_g+u zC8cYT*4nxWVT%Zy3iQ({#Uz^fb>Hg<8S#e4y?UAz8;1n4n_m%qT}FHHw0s``X~44C z184!zOs)?6&HBQuaMJ7@78|z(xVzdi&*#}FWgSnF4|4JOIaFWvmE46S`6Q3bfy(@KHwgpST-xB4@&*zmuHygz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/734fa74a4e98b948f67c5bd3b6dd9817a1930728 b/fuzz/corpora/bndiv/734fa74a4e98b948f67c5bd3b6dd9817a1930728 new file mode 100644 index 0000000000000000000000000000000000000000..fe33011d3ace4f35bf117fe87594382e445f412d GIT binary patch literal 7134 zcmeI0KS=999LK)_ho_5$R~JF~{q%tZsej_&5YUb;;;2LQIh49OWKS(*6Qql{32y$` z#KA=e2Zw^-cVdezoBr_3VJmp}{Df|O8 zVMC!YWmPhN+_{xAs-Zdk;&#`RrrQD_faqb=I8gN&%YLCy#HtiEya^%x2_b-K-CSq_IY*Tn?Xb4!6$o8*AO{B0Oam-5gtY4|84->yQwB9E@H_SuV} z?R=IU`k|2Jh$>{IE>i)d0R&WOgS|G|RJn1BX7xcxSZG0Zjb7jxlj}LHDC%d~*!?{x z_dWdXMcB%!8d{~)Z~C&Jm7UsuL0<-!l4=a@P2Po^U>A?7 z)M7$S>;xer*a=MUfL`acoe^qm?BL4?iNfu84 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/73bb090542f2d6ed24a4b4dde04604de40e7eff5 b/fuzz/corpora/bndiv/73bb090542f2d6ed24a4b4dde04604de40e7eff5 new file mode 100644 index 0000000000000000000000000000000000000000..372d764f4c45cac18e8242ef8364f10a7c455ffd GIT binary patch literal 1479 zcmdPW)MOY1)B;Q(gZ>i+_!a$z7=X(lT#i+MO28Cw5OxPefDz3;2#8}KBS8s3H4jTb jQ6Pf>0|NsyVN*~7kF01I1!MqX^E@mj@dAFlvbX^N9@R>l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7439cccc86d958705c556ecff3b2c1c30d694601 b/fuzz/corpora/bndiv/7439cccc86d958705c556ecff3b2c1c30d694601 new file mode 100644 index 0000000000000000000000000000000000000000..0a53a2fff34409f604a8a5645f9697a64d89388f GIT binary patch literal 266 zcmaE5KoWSxz`(%BKpBARC&^|wfLadW8(Nr{n3>n=>#lfOP`^U9K2k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/755eecd6dea14091fe73e0aebddb2f9fe01c7477 b/fuzz/corpora/bndiv/755eecd6dea14091fe73e0aebddb2f9fe01c7477 new file mode 100644 index 0000000000000000000000000000000000000000..6ae968c04c617e50347eb8f37116496c8818c49c GIT binary patch literal 308 zcmaF$|NsC03=9k)3IZ4y7}#NKB(MMtFu(vvKSCW$ln4N^m@;614chxoEaF-qk>~-;QxO#0iprO4n~MY|1jMIa{W^BAFWn5UiPl9%AU{pKVU^M8+1{4Mz7*J@& UsCKf!XwZ=jhIG&o1Vh4i0B`^i(EtDd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/76ffbd5d694ffea78d6a4e2795e0e8c1b17fc4be b/fuzz/corpora/bndiv/76ffbd5d694ffea78d6a4e2795e0e8c1b17fc4be new file mode 100644 index 0000000000000000000000000000000000000000..ce8684864c109df40454bdfb4ff87be4a002b9e8 GIT binary patch literal 75 scmYdJHZ(Czv@kccxb*$fcV=cI^H*F93=9US07C!-Ac71KU|_%i0MB?23jhEB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/783962241ac06a53137f45715f0d3d72d664fbc1 b/fuzz/corpora/bndiv/783962241ac06a53137f45715f0d3d72d664fbc1 new file mode 100644 index 0000000000000000000000000000000000000000..f1378297fb6766751367c1130f7c7c4eb767b5f6 GIT binary patch literal 4195 zcmeH~u};G<5QcvO6B}*E4(&n&Ql%pj2q_D%!P=RT*-74jN5}vy9S|cR@ert^w=NOt z6Lbkmor}^mHA$05rR2+E-`W59Y)cml!F+w*Tl4`1tzfP6w%|LAiRE+ILN@^?{IMz9 zCuLzblgx|98@Wr{RXB^LxGpa|Ek7j>JI`1F6uE&KDumucF7_~|MmR1`Bk^N^=mKl5 zcMgMS($bz%DGSlyx3FQ@R)u=u^J)zccn(}E?!L17|x<5FZdZi4}i1$A-|E%bo}a& zd;pgh(48URb;MU=I?BTvM9}`9@o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/794aee0ade67846b83c9815ac0225010b6e2c297 b/fuzz/corpora/bndiv/794aee0ade67846b83c9815ac0225010b6e2c297 new file mode 100644 index 0000000000000000000000000000000000000000..31eebef9dab5e7fd2cbef0623d1a0786c1eadbb4 GIT binary patch literal 383 zcmc(aF$%&^5JWd(A*q63W1)XhkO4<#o+6~u zGemyUq_OsGvFxx6GdBv#Qss4BA0`wBG*inS?LO1mKX22D`L%z~mE&&cH!#La!3=e* z7=R+;%Q%3YmBRxo0T`j-0r-Hm_N@A6G7+g5U4M@WEGo(JzRdTVpMX%z|LYwuMLgA#^50Y=8(8Z5TbYy7K9}<$wfSf?5Vql zkZbVbCFIZ-kz59I5e5?C$%7{)E}OtZ1G%(2i-(+*l2_GL)6+BS%w~7kjOmZv>8g5F zuU^%A-PKby=|_fBspba&AcIm$<;gvQzli9bQtgZJwG-45okFLRbPQUbQp)v3fHVNd zSiid(FzzHh01<$b=7I&I#4{J*kxi7~JpXBaH4Vm$pw#Yv#20qBwUI%E1#aC6!!h%+ z2MT_EjatEz9#Q7ii+*nHs_hSvSVP747vr7vHUbtUsDHB@9gUv!pcP8&2mo3{K7h=N zmWKv&Fnm6xni+H*h9N@ezezB2%-mbzAG!9kpCMZQJqfwj;x&GDQ>kvZ+s(X<<*ToF zRBKYB(P;2}-ekU~RGxg4C@;Daouq|?f;TP%p8ty%`57}K@O+uv4)g6bjy-CNn~a}; zXE&j`U77xk#j60JNoWAL&-T7M4cyJ6?vjhXzuy8@@s7&_X9{URTLpYSR0z~RmYeh` zaH=TF*xusPQ{U}wKkIZ*EjuD3b-W2`y380>b*LUW7A=A(TA`(8Io5y53yxaB>qLL5 ze+ExgASC+EO2=?KFYCAa{r;7Hzb|%_r)g6P-z!*XEF;&tz?Tb&ga`$+{p zrSKW}dcou*@7uj;fKHiOh_gx;4;}$s+shE4t6Mb?he0X5Jp22~s`fseWbuF72 zp`_!1qnoGXps}~cu@gMF_E;Zf+H=Sem8nuHefXInO;cMTO(DNw&>x19#GrrT0ATYu TDJ?j*kI4+4O*(08u!a8uL*$8F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7a4a4fd0b771dac40e10767b09ac9acf04c2bd67 b/fuzz/corpora/bndiv/7a4a4fd0b771dac40e10767b09ac9acf04c2bd67 new file mode 100644 index 0000000000000000000000000000000000000000..87c95259d877f445be68e7a475bd1e7017a25fda GIT binary patch literal 3998 zcmaF$e-w;Rz{oyAJx*7k#Q*~_Fa}OQbBFx{*?`k}5Www7nmcY3KmgwOfdSm{L=+g+ zPBs_~I4XR{YCG9rH0a0%Sb}au73^62 J&%gjG)&bxUs`3B; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7b2391ae9f893d7364ed536d2bd510fd61eef81c b/fuzz/corpora/bndiv/7b2391ae9f893d7364ed536d2bd510fd61eef81c new file mode 100644 index 0000000000000000000000000000000000000000..29c2692c7fce326c8ba6dcf88d5f6f0bb7f11829 GIT binary patch literal 51 dcmXpp(P97tBQ1vi$bbRDg-C*c0z`!2KLA+27x(}G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7b4d6a8b9ade79fbacd5c236bf086b16b215c74b b/fuzz/corpora/bndiv/7b4d6a8b9ade79fbacd5c236bf086b16b215c74b new file mode 100644 index 0000000000000000000000000000000000000000..371ac1f020adc775108bedaef5aa0209a0bf6ec1 GIT binary patch literal 402 XcmaE5Ko!71O+XbFQ3R;z8&UxPNT4Qb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7b90552fbd838d455816bee9e3b5d1db55900162 b/fuzz/corpora/bndiv/7b90552fbd838d455816bee9e3b5d1db55900162 new file mode 100644 index 0000000000000000000000000000000000000000..54cb8150cd98bd4cbd67caf54ed22cdbe68ec329 GIT binary patch literal 296 wcmaE5fCVs+0I+C>0(BUJG@uDpu7E|GA*#a+_CNp@mBav4!(gE90*r+W0E|m29smFU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7c61fbdb5df1bb8d789f3b11dc29bee0a2e6aea7 b/fuzz/corpora/bndiv/7c61fbdb5df1bb8d789f3b11dc29bee0a2e6aea7 new file mode 100644 index 0000000000000000000000000000000000000000..95aa764e6394b3a53e31dcf13e3fab003484175a GIT binary patch literal 1522 zcmeHHKTE?v9DS)-q@*2G@P?9x`s1WfD5Ql#!8mlVLctG^MJQPmoJB})b2m8j11Q+d zL2witx)q!=7TTbqgOgoOj{d<)h3cf}n;v(^yZ7FYyA~1A#S}y~;(iR2LIXhEaky{U zK}OR>TndoxOhKgjP=~Jrk7)+EIi8KU#|lSJL+bNW%iXX~9-GN>SJMR~Op17EkF7ui z9=%5OL65ML;{+|O4h@PzN@+{Qk**p=2|%s0;(Cy2YUM65o7c{XEW#!*;HAz8x=4&^ z$1MyU_*Sj9+g^KF43uDy9p0@rqXodK$x6Ep7Q?a~WT1;g@3KOG%xgqp7=|q}t#N+# zoHRe=_wTl(Y^ZjQnM&4G<-{Gw9F-(ezdQE-+%^3#&V5$w`}|MB)otbAaR1?E;;B4g z^TBcEc)fj?q^m#9W7@1vz92GkHPkZbGn4o>T;9h!y9T*DTc9eIsDv}68hWd={RVL% B;t>D< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7c9760091b99a3f27f9b813c1c3cad8a526c36c8 b/fuzz/corpora/bndiv/7c9760091b99a3f27f9b813c1c3cad8a526c36c8 new file mode 100644 index 00000000..e72f8f07 --- /dev/null +++ b/fuzz/corpora/bndiv/7c9760091b99a3f27f9b813c1c3cad8a526c36c8 @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/7c9c083cf0fed6427a322dd5784d3cc3979e4095 b/fuzz/corpora/bndiv/7c9c083cf0fed6427a322dd5784d3cc3979e4095 new file mode 100644 index 0000000000000000000000000000000000000000..e1ebbf723be21b4334e72c7bed0524eb075cc9af GIT binary patch literal 40 ncmexfkpu?+wN6+&IU1N*Yicqu{QsZJVC};I0ZfhtW*M3QDh&&Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7cc55b10e94eaff60117c875ef09f07133a13807 b/fuzz/corpora/bndiv/7cc55b10e94eaff60117c875ef09f07133a13807 new file mode 100644 index 0000000000000000000000000000000000000000..7796ebd24e9c0dee20c7274075657d6f002dbfa7 GIT binary patch literal 2097 tcmaFxpB{jL9+r%PK@Wy>IuIfr4El&56R4A<&zdCFqhN@F(P$n?001c-{Ote$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7d111e4300734f57b1905e1dd87005aac748890a b/fuzz/corpora/bndiv/7d111e4300734f57b1905e1dd87005aac748890a new file mode 100644 index 0000000000000000000000000000000000000000..398d68376a8442a951916cb306212920bda6e897 GIT binary patch literal 3116 zcmeH}KTg9i6vhKXg&5%gZ~?^EC5sm}#6_4mL{F5x5(Au|6B{f{=tb&K2}Ov(=zY(2 z9MWRi4bh(z`}zHM94Qtt?nDqo0lfEVVS-LT6NttLVstx+Ss)UsI$~o3=44(f6^Aw27hHeAzS)>-NUYggc2Gu2BJ)7ZB fL63t^Hmb_>D_**FaizC!8lIDD3A*RrQL!suh9t96 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7e0f2c1a50c754995d0036aa6a3ac5eda34f5b70 b/fuzz/corpora/bndiv/7e0f2c1a50c754995d0036aa6a3ac5eda34f5b70 new file mode 100644 index 0000000000000000000000000000000000000000..2eac05330789dc1f5b9ca4eb530488c045d1dd27 GIT binary patch literal 780 zcmaE5Kpk-MJax<=2{2F@kYqU#KohD)0gGBg1_p-Q#ESTw)I3`d8wL#aKmZmk!~mEv LL;(8PG(-RZ>wR2T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7e2f0ed91cb42f3edeeaaf4c7fab03ed9c10f9be b/fuzz/corpora/bndiv/7e2f0ed91cb42f3edeeaaf4c7fab03ed9c10f9be new file mode 100644 index 0000000000000000000000000000000000000000..f7c924caf14fe704dc3fd64c52e44d46151bcdcd GIT binary patch literal 386 ZcmaFGz`(%BKpCJ&KSi1c+VNBX4FG540dN2S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/7f4294ff65ac9c7f0700fff11d8bac9eef384242 b/fuzz/corpora/bndiv/7f4294ff65ac9c7f0700fff11d8bac9eef384242 new file mode 100644 index 0000000000000000000000000000000000000000..645573f25b42ea7d0fae827c3d86e3a31f77d29d GIT binary patch literal 6139 zcmeI0F>1p=5JgAeBcwN~90Y++LaLl37w|FG67GEqA3~%_oilvg1cPdqDY9YZT{Z?8 z%f!OkcwQlPnAPxSm|=v91|}D&r+g>5ASXh1&ORi9c$CD9Z!bOJ6at#Un451oW^t;` z(J?@?{cv@7JpawppQ3pNHszc(hzAtS%;X?zc;2{!wH76JD{JkdoD)Rmyv?J@H|3P! zs>2|!e%mky*7fOMnLp7cx^15mNXEN0T@mHALiO?~B2V3&>N${kS;KMJh;208z>xvU z8_>|Yfm;%51l_<#(G5HZnsfp4~e+An6x(MZ?7a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/813d780d0ebf5c2067ef6664a7f38cca83e5174b b/fuzz/corpora/bndiv/813d780d0ebf5c2067ef6664a7f38cca83e5174b new file mode 100644 index 0000000000000000000000000000000000000000..24f405267ddb0ed6db035356fa1e2c0af899aec8 GIT binary patch literal 421 lcmaE5fCVrNEck{Sd_tB2yAq4@sR2w7hENa~)fDJO0sx!tJ@x05Vn-6fSOCvX-*u53hFUix= M*R!;%r^Ung0pyTBhyVZp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/82a1594652e36861bdbbdcee7d97eb85fc99d6c1 b/fuzz/corpora/bndiv/82a1594652e36861bdbbdcee7d97eb85fc99d6c1 new file mode 100644 index 0000000000000000000000000000000000000000..6236c79101cda674749e00dd21117689614b8039 GIT binary patch literal 1525 zcmeHHF-yZh7=5W(q_iDW@P?9x`f*Yy6w*SWU>rJFq2Le5B9tr&&LX6@xf>k%0~GA$ zAUFyR-3rbb3vEEr!O1QsN19@FDaFBpZ+hGv@80{q`>snwbTb1{2)UO4Wzh!EvTg2} zmY>&jk(2_Y+cOZ^5!B&(-(^~goFXrT+-2pn*NA%j(sXvLi0$rqI z+IPy41J7(W4|`khtG*KS3(?(bGh6}8rmXi`U~hEc@4Ke|oxU&4_>_LkPwCfj_gFtUJ$`X6E;P1e$Z(Q}EmzyM7bH#={Z^>hm8@s8Sz~ zG{%cHvFgTxBaBDr11b0@Oh;b-PYW**cdgTehhv03kiYtvzc0Sb!2Ab_upi_jKDw3R oH{z?Tbh8@Zeh7Ua);`P=S~tji2z_K&UCQzTR=)u3A2IN817G0l!TPx# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/857455767fdb59e60fbe84f35b57a71fa819e46c b/fuzz/corpora/bndiv/857455767fdb59e60fbe84f35b57a71fa819e46c new file mode 100644 index 00000000..f5e7c638 --- /dev/null +++ b/fuzz/corpora/bndiv/857455767fdb59e60fbe84f35b57a71fa819e46c @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/8589233ae7e49b1941802b4c94fe2d7f52f7c815 b/fuzz/corpora/bndiv/8589233ae7e49b1941802b4c94fe2d7f52f7c815 new file mode 100644 index 0000000000000000000000000000000000000000..464c8a6251f0ec86ada62c1d9ad5615b93ebcb06 GIT binary patch literal 2426 zcmaF$e-w;Rz{oyAJx*7k#Q*~_Fa}OQbBFx{*?`k}5Www7nmcYt0K9<*1Goc`C@`v> XY%m&hWP{P5BOBlgI_z@)|NjR7pE1z8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/858f5ae67c9703ab01794e5428b53c7827516b4b b/fuzz/corpora/bndiv/858f5ae67c9703ab01794e5428b53c7827516b4b new file mode 100644 index 0000000000000000000000000000000000000000..0d3fccd0f96043e50e7765e3ef0900d725a56ecd GIT binary patch literal 2140 kcmb=k`i}}2hCEOo@;(>^qhJ(_f>AIEh7dq)Nc{f~03UcC!2kdN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8591fa02447c3c2fecbf71765ccbd34ddb2310b1 b/fuzz/corpora/bndiv/8591fa02447c3c2fecbf71765ccbd34ddb2310b1 new file mode 100644 index 0000000000000000000000000000000000000000..53bb8622bb5d9deb9d58aea6b3c29ea7d8bc8d57 GIT binary patch literal 1951 zcmdO5fPokogFG;*onkN=gk%Ghpc5e37!>WKgHi2d1AIY;PmTyMs-0{w8gyg>>IEIh FBmhMG3>N?Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/85e53271e14006f0265921d02d4d736cdc580b0b b/fuzz/corpora/bndiv/85e53271e14006f0265921d02d4d736cdc580b0b new file mode 100644 index 00000000..ce542efa --- /dev/null +++ b/fuzz/corpora/bndiv/85e53271e14006f0265921d02d4d736cdc580b0b @@ -0,0 +1 @@ +ÿ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/86be0b293abfbb10747c3f707673bf032f88339f b/fuzz/corpora/bndiv/86be0b293abfbb10747c3f707673bf032f88339f new file mode 100644 index 0000000000000000000000000000000000000000..4ec14e8eeb3cb58f13459935aa9c0acdeae9ac98 GIT binary patch literal 854 jcmaF$e{g{JgTNV)gTM`x14YV>7^HxKi5!OwM9KmHN;FR+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/86fafa6668f5fd989ad1575267c4d59fd0dc656f b/fuzz/corpora/bndiv/86fafa6668f5fd989ad1575267c4d59fd0dc656f new file mode 100644 index 0000000000000000000000000000000000000000..f262a6dba3c8c8d14f68dc760944a0085b717dbe GIT binary patch literal 284 zcmcJKy$OI&5QFo^uzQ_omCEK-I_VYS2rghF=oFR?;Yk$y0b9Q!93e-@x;`LD0JyB- z7cl4Ln3|eZDpXmU(Jp#f?jE+yZ%CRk9;wdE6cV4WZ!~JsEFhB{Bg1Kkc%M+QJAf8g EcB-(T6951J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/883030bf193cb683c268d2d5801396025944080e b/fuzz/corpora/bndiv/883030bf193cb683c268d2d5801396025944080e new file mode 100644 index 0000000000000000000000000000000000000000..e87ca8cfc1189ac2ac6a2f4509cc2e22fe25a6c4 GIT binary patch literal 2264 ncmdn{9}O^!g5eJs(IR~`)b12l+Nhxwg(=@d0o>r?TkPinnl;kh;bfQYXhv0^WZKIcZTf(f4g!&$SqpwflwEi2jV>s_YHXe0rZcI Y&Z9EA=xp_-Gc;R3^n?6b9%ftM0dyvs$^ZZW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/889125954431cee0bede33c6ac70c71bad58266a b/fuzz/corpora/bndiv/889125954431cee0bede33c6ac70c71bad58266a new file mode 100644 index 0000000000000000000000000000000000000000..1ed7d28b373a2a85c14a75399cf9276d1652c5ca GIT binary patch literal 49080 zcmeI5TWlOx8G!$F6X&KVCJ7Jb67R;CjW;p*ZO7{*`>^IAkw83D2!Rn650zyJgsc`t zJg(Pn_XW`iQ~KZsRKLIjMvJVfP?v8bjWUQ zx#S=KWTZz>*N)iP2cgR5W1x5GYG6F65lI|p$8N)4jOQuHNr#(dfImJiI<&l9@g!vk z*4Nk9x%M<~vWg=)fUOoPl?p%whL=I>(<)lxJ)5Z1$AVa=l?3s8Y#3*yJP{;~O^h{E z$TR?OF+!SJwhc4e1>w!9rMd;$+?~mjd`}*WClafRtE;P5S1oX+H*t7C(=@}~iSO&8 zLUh58bRDG|(J&0t!yWX2SZ3TWmu2il;kbxdk^X+S)PuUthD^f3)W&5-U zZr8A79xs|GU%6aHqg;Mu^OwtIaW0k1206_d*d3LHg`2&vLUG`B{xqGp=>bSgX@`f|vLwASR$zVh8LjLROE4E;TtZS3PF>eO()EM7IECePggQQfWu!tlvgb0{Y&MI>ve~RHiA9;tbs7xVC10UXC=?0> z{~~_PFeWa|J%~K(*y-tad;!|s0QHH-Ldqw4H?FQ*Of~+^tWYQv61IlHWW%aWXB%$>xT{KSPKOQYK>9}unUMDytGl4t zvA7J2+OoxC&D!;WHyvfj8i$k=t<}1+i~GaXvJ}j0pKR(v8XN^+UJ)j4k6R`(dzqKp z%JXL-3}K6D7WF(t>_Zr44k<-u@mxjFSyuJT7%T!nfG+M2ecAb&4!P zGezsc!~;t!B62cfx}D1B!_0FP0k{-ECLZLF5S6+E?KUJc==n%Xr_n_Pw$`jh;(t7q zpBld^O^OI9us>4f5pWpveeXw`I+h6a83{)Pt43%HpR+jQ^Y~cH2%P`&@-ki+8yn6J zk1a3bvdJHC5YhOz*~9RMPU@GWIS)4kXTO}~n*>kWN)oQiz_Y5yr~>g*__8FBeA8iF zr|G%u1R8B&vjZz45a8B+du!N;P^cix1rchHBX!dsa7h3F-E!&(#>dCU=jp)thIEW? zqtZ`{yJbxx@1=LtE3jSAGxP1ryEU9|O*XrW%e$*MidJwc-b}ver|vU;5sD^rrOEmg z&7}TxRndBkj`>2+GQ@3>ZFf^BK0I!!w5)a=IJVPr#3;5SjsE7UP*n4JRH{`G4R%ug zvyHcE#ZE)rzv(cnS&}Tc6|%#T1yWR#0{B)#h`v#+SrHcNG?OW-+Az*Wa8jRjoyHZi#=1AN?~&59&IU_1W3()ZV2h$R}!iH6oiPMxokvqE`5!DSzydBTEG)c8;=sx)y6#Gw3$9SKf-?d2194yGZwM0Hz zHO)k73^;+{Po6nMKTU%1ZYv7Cy8wh#?$kFkjs@+PGpACy)HGoj#vF4@PhS$B)6@OA zrS!uOGpYXEJ7*sbW-cGQW$YV#hnmAN#pnP}n)ksDC~0Uin`4L{6lb(G)Nlwho9RLd zHEm6vKY!A;Xu^a=ZR;xavf_+}8YU=ubEJ^^px8&xrI{2kHE()|g2UH-LRU~USV8Zy z;~s>BcKp{GRU&+M9_Mqn0bsOUry=2}g?K!Chl-}CmIO3Z5>UKVV$Qnh*``*usy4#s z^YV7+Tj9-atJOI<(-Yr#Y~0w`c+2KR#8c<0R~5-#D*3n}gckQJnrtwOY<@S7-2r?> zC51W)V~K5WxAR3&w)nW)CpgirycsrSf3EP1n)U#IR?#$VPSf_dUzhZFdH&_drTa67 z6~<9n@~eRt2ON^j6Z+Ss;MLbK|24UO{rdO*a!c3cZ7MUu6PEEX&58Wz@rz)*Uo%$H zaPgud4PfLFqE2MhbRM$g{L|4c0X-K+Mn*@+M{qQIe(c=%_}F4Z0%v%L^o(;Cyz>y^o6xGdcBtS ziUViHy=?Fq=;c>!wk=B|2<6^J{`hAXx?e&3DgtyABUm z#^3RMUAAz;b6bUChwH( z-r`=WIsFlSwTHI{)MeQjpxMaaj0MX%J46T$`9?oJv0r+FC2=FWk>geqrus&4V(^DFms)mVmG6jxs#By zZI1h1Q1ktcXI)y5pA%8OmN&R*Me{4zNv-?}7hUz>Ou7>hj|3?c3WY+U2#0GZ;wnk~{Z=2hqD14!pZ;D9STA}e(9s}-6l`o;KcHyhI0bE&xre@Z(AiZ&-EI3y*4;?p1 zIkmj=CriQX?Ch*``|ycpc-<2z@O8!yUMcq2g8)@eao4pYcJ{IDd;+Oek5aS~M;q1m zu%1+3jA0YIX!pdh9mlY}%53?>pt=Rx0*z$(o;(&$Bvuz!S68pDTHs7?;_!f`X?5QH zjfI=NuR?L)cK$TAT6zEyQ`({A(vjTVr&B}P-mwdreBoxVVTnAS?_WBSqa8ldmW3~g z5e6{Gs(`%9OXVY95qX$al=IudlDmM?3j5o@6PFYOHi*Yaha}&3sX6 zGa3=k%Iz4K7_E9|d#CU!F^|ka2Yrhk7+@Q$Opt@QX>(5IsEd@6pO&Kr^O9dlhh$bd z?4)k@&Ck#OMgjoG0f2TsH;f5w?r$%w&JAg60GsKRmERYR6}|vRH`9g8rlx7ygFRhx zAI&1|qxo~bkEUGp9FA*-F>z_`!3z^0^6Pp%#qvwj2B?`$I9i0Eez?WvbBEY&jj#15 z_7o2pMHp~pmD^jRf{2e!o=h3+007i4uzE$lOQ#|jYKx$zVr>y*&!*N`*ku>=CV+@S zFquifWCA89C*P=nly;HfP$=!{OdE*-Yb8X^F|n2IgjlX_lsziHT+gW+o}dDW)ljhhV_cEX6b_)i}-6JT1vQH5IH? F004Ue6Yu~4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8af354e0c2bfd80fd0eb8abf78ec1149a6d6b565 b/fuzz/corpora/bndiv/8af354e0c2bfd80fd0eb8abf78ec1149a6d6b565 new file mode 100644 index 0000000000000000000000000000000000000000..c11d02d68c41ff51c47fd863069e866d66360462 GIT binary patch literal 2979 zcmeH{I}XAy42I3b!p_QsgkT5~8w(5Pf^(rt3>*N?Q8BXy*=;JvZR$3m9e{7BV#oet z=h6HO2_z+dhS(AoxO`)BZhbItf*@ox*R{eJV;=Vc91|-ys908`l5G*gSGDvi5Emqw7qBF9008$f zybD3Evlm`Ezz(~<_EH#_eXIVf8vrhn)a0he(pp-bJa(PmX05ef-{~-#mPT0lYvI3$ d>6l$=XE7qTKQXAc1&>e-B4!Pzec?VS^9FDz_0IqR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8b1a11b1ee13542637dbc466e196fc49785b83d9 b/fuzz/corpora/bndiv/8b1a11b1ee13542637dbc466e196fc49785b83d9 new file mode 100644 index 0000000000000000000000000000000000000000..f293d6c078267ba516168b44f2193d97a586efca GIT binary patch literal 100 zcmezOpW(m3e=uNRVBi2T7?43)W*!3r!+&)U0RoS{{fDVXRS1zrQNaLG@}Ged0G69G AhX4Qo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8c368df3ac45e9455f0f2597cb2d96e4d11cb229 b/fuzz/corpora/bndiv/8c368df3ac45e9455f0f2597cb2d96e4d11cb229 new file mode 100644 index 00000000..ea5f396e --- /dev/null +++ b/fuzz/corpora/bndiv/8c368df3ac45e9455f0f2597cb2d96e4d11cb229 @@ -0,0 +1 @@ +ê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000ññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññ0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/8c8920538756bb53896f6cfbcc58addce01e6c86 b/fuzz/corpora/bndiv/8c8920538756bb53896f6cfbcc58addce01e6c86 new file mode 100644 index 0000000000000000000000000000000000000000..34f4c7294f7a53afdcbe46c513b7cc30e1dffc87 GIT binary patch literal 49117 zcmeI(Ar62r3_#JrNs!119M{JqcLy#34nu;1bWPs7K!4iV9Tflo0001pwbpiS`&?ox z0078rC}qst4*&oF002NNOPr006pm|Eh1@CT3N> e6ugA{nE(I)000005NZmY4gdfE00000z+W!LW&eu+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8caafc8209774e0edb14de714719bee89ceea664 b/fuzz/corpora/bndiv/8caafc8209774e0edb14de714719bee89ceea664 new file mode 100644 index 0000000000000000000000000000000000000000..0aa253dac1005cc7ce3e826c05317fe0e9f3dfab GIT binary patch literal 793 xcmaE5FoXdEl>xPbLKAAB0v3Y}QQdB^2LiCDBnF@wh8NJ!rU3;1u>w*Y1OU61ZMOgb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8ce301bd8db91d7f7c8c43680cf64a9d774bb386 b/fuzz/corpora/bndiv/8ce301bd8db91d7f7c8c43680cf64a9d774bb386 new file mode 100644 index 0000000000000000000000000000000000000000..9c3c16182b02cdcf92793a9f97494fa16c9251a8 GIT binary patch literal 436 ccmaE5Kqg?IJ@`f>0K0@tZ%_zm9|%|g0I57j`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8d935d1ae41e9ca143376042026640563b069139 b/fuzz/corpora/bndiv/8d935d1ae41e9ca143376042026640563b069139 new file mode 100644 index 0000000000000000000000000000000000000000..a4c30b8650b8a5f181c00babebd0dd202428e633 GIT binary patch literal 390 zcmdO5WEfb$M6C4-7A!EZG&MCeGc;YWz+eF!Y%|a_F!=xeKMWXTp#s9@a}ZWSOW?r4 F005@)9%ujn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8de3add92ce56d8a82ef19e212da448154730a3b b/fuzz/corpora/bndiv/8de3add92ce56d8a82ef19e212da448154730a3b new file mode 100644 index 00000000..5fb8828e --- /dev/null +++ b/fuzz/corpora/bndiv/8de3add92ce56d8a82ef19e212da448154730a3b @@ -0,0 +1 @@ +ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009223372036854775807 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/8e297d95f1bcc2989558676fcaccd2b660a8c245 b/fuzz/corpora/bndiv/8e297d95f1bcc2989558676fcaccd2b660a8c245 new file mode 100644 index 0000000000000000000000000000000000000000..a36ccf8db680b81a4148f884c1aec58d238a1b2b GIT binary patch literal 1541 hcmaE5FbYNxV4yu9Gc*Y~j7(!k!6?8E2qm}?1OU2(*9!mu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8f19d67cc6ba7e28c3e9c9f4eafa2372cd0efd8a b/fuzz/corpora/bndiv/8f19d67cc6ba7e28c3e9c9f4eafa2372cd0efd8a new file mode 100644 index 0000000000000000000000000000000000000000..a474a03e1e8f8c7d55df13dc58f0a50662051a9b GIT binary patch literal 295 ScmaE5FergFbzQ|kDF6URjw|K> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/8ff7dac8dad594231eb3fd9aac117f1e98f40e36 b/fuzz/corpora/bndiv/8ff7dac8dad594231eb3fd9aac117f1e98f40e36 new file mode 100644 index 00000000..81ee569d --- /dev/null +++ b/fuzz/corpora/bndiv/8ff7dac8dad594231eb3fd9aac117f1e98f40e36 @@ -0,0 +1 @@ +ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000wH°|¯ÿ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000ññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000âÿÿÿÿÿÿÿÿ0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿÿÿÿ0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/9267b8821ed5ea6b7c28465204a5deb225702a06 b/fuzz/corpora/bndiv/9267b8821ed5ea6b7c28465204a5deb225702a06 new file mode 100644 index 0000000000000000000000000000000000000000..536760a8992e83334bb8d6fad4fc3baab614c6d5 GIT binary patch literal 3003 zcmeH{O$vY@5QX&wb&d$4%XG93*%2ZzOdXvO{0SEd^DV+RGmek9=u#LVgpm5<%1#G- z{ea#yK@x*ic2^rmK-GN%y%HAyIy#!Bbm#xTfZxTO8vDH)?<@7!>{-9)Q40PBGsG4Q z{0Y#nchCxGdjM@=jo~~noChYCM|L2$fcuz%^GI1w^)xm8vROMd`FP9jdD8Q=>!9`4 MI$9VP5ZiugUYY|YO#lD@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9400a2766adfd50f470991fd7de9fc1067827265 b/fuzz/corpora/bndiv/9400a2766adfd50f470991fd7de9fc1067827265 new file mode 100644 index 0000000000000000000000000000000000000000..17cf9bc6e1d20cc96e72fe3ceb387f3f8bf3b319 GIT binary patch literal 11 Mcmb>7VSoZ200rX!l>h($ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/940b4f106c64b57b40dae5328c5e631716ad0115 b/fuzz/corpora/bndiv/940b4f106c64b57b40dae5328c5e631716ad0115 new file mode 100644 index 0000000000000000000000000000000000000000..141c4423e09bc81b0e23cd4d513c8ea09d4fd57e GIT binary patch literal 3140 zcmdOTVNj>Yz_6163JhQj5E$i*hQVk$fPm4wFtqc6`bdjL;(^u+Qv-v04QY3F8r(6^ zHPCvYUZ-eq=gv+8DA;}HlfnQ0{|y@MeCqrE|9^c$+8u*C28R4DIiq^;bb&=Sp%LCDa-v5g)53v8xha14U3 zcB}t@NQZ7692^`EhZ5Q=;*Y({BWKVwO(LN=NK4+YAzYs4x%+F@v2jub(fOfr(`nag+JxT>&NM>Y2Plt!@26b0cc4w?wRjmyWv|X9L%2jT!A6YD>ki&V&uX)UD0;e!Owvmh zQe7q@Ba;FE00000002PCSnF^|Zojkdx&9Z|+xRxu&5&YYh#s`pPPBjRWOWYp(5=Iw z)uV9#qK(ss{-X`1k0>K&ekqq*Sj^?-7PE_U_w)Jrh57toPkFSAT*D08XtftcjWL(- zj>G@nUBcJ^0000000000000000000000000000000000000000000000000000000 p0000000000000000000000000000000000000000004lC;5Unno*)1K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9aa97b0df6e936579b98b00c39e8da4efe2ccb8e b/fuzz/corpora/bndiv/9aa97b0df6e936579b98b00c39e8da4efe2ccb8e new file mode 100644 index 00000000..8a9bfe9b --- /dev/null +++ b/fuzz/corpora/bndiv/9aa97b0df6e936579b98b00c39e8da4efe2ccb8e @@ -0,0 +1 @@ +*z\-'*è'~!€ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffnffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; \ No newline at end of file diff --git a/fuzz/corpora/bndiv/9ade514b4ab9c889aead941a0083e042d654fa1f b/fuzz/corpora/bndiv/9ade514b4ab9c889aead941a0083e042d654fa1f new file mode 100644 index 0000000000000000000000000000000000000000..b6d324f8a2e4db86d3e17d66ecec6c316e3d2333 GIT binary patch literal 16 Xcmex1xzj+^z`)>@0T#f30wlpIR3#0-;syo`Sags8pk_0o*Z~7YJ(g@O1_q7>3=C`_ zGj$-qKu5>GKnEnp#=wxG+hD-J`=Z4_0Rm9$h8aW*_>Tm396$pN#F#)mfMz=koIk%6 z#d`)CCI%X)B9Lgo0<^G*K>^qV7zYdZj41}Q6jO#;0A>S?fGLg4MFQ4HY$^a;Ap#9> M>^X?~z<_}P00-KTxBvhE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9bf66b9e161eb61a7e62570e283919ad23487cfd b/fuzz/corpora/bndiv/9bf66b9e161eb61a7e62570e283919ad23487cfd new file mode 100644 index 0000000000000000000000000000000000000000..77e921a9ed81c109da2334e3bdd8f39a5ab2245c GIT binary patch literal 356 zcmaE5KoWSxz`(%BKpBAR$7wTV=Hml6tpow6Mu-|i3lkGFa}yJoDA54wJ#%Ao1_lPO FZUC{b7+(MY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9c0780697e5813f173f7ed33cb688e4542135fcd b/fuzz/corpora/bndiv/9c0780697e5813f173f7ed33cb688e4542135fcd new file mode 100644 index 0000000000000000000000000000000000000000..4c8a93a491e30afb56334938c7d97a6919405d12 GIT binary patch literal 382 zcmZ4W|Nq2^0{`!WDFy}xhF%5+CJ;>7#M1SLd83u;`jYxoj zf#Ki3M|Bzu4OhkgHs1Sx>BWEC08={zXoPLrv}u!Sog#AsZ{6en|CwGiG&D5S|NsBL zL07d-k)c8B1(cF!U|=}3iGdg9d_{L#1uk1#D?ck+S6eM5C2KIx)>ccw*4kDJriy_9 E0CRy}IsgCw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9caff6144ff1b27fdfe185aa7e8058293ba9f8aa b/fuzz/corpora/bndiv/9caff6144ff1b27fdfe185aa7e8058293ba9f8aa new file mode 100644 index 0000000000000000000000000000000000000000..125489fffe0727cfb101b43037ead404b172e079 GIT binary patch literal 375 bcmaFWz(5(GRR6#K17p7e$XZGrPquylT4x1_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9d6ec804be7ec7076252def96de6d6a4156f03d5 b/fuzz/corpora/bndiv/9d6ec804be7ec7076252def96de6d6a4156f03d5 new file mode 100644 index 0000000000000000000000000000000000000000..5ada0965bea83fd456f524fc73459f76bf54cb7a GIT binary patch literal 1755 lcmb=EWcZH;7)HS;7zKj_yc;C$7zLvM4iw?6K?e|(836yD8;t+} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9eca0768cdadc5558ae273880e193816173795f7 b/fuzz/corpora/bndiv/9eca0768cdadc5558ae273880e193816173795f7 new file mode 100644 index 0000000000000000000000000000000000000000..daa4a771aef8638119618b926b69a9ff5c7349fb GIT binary patch literal 26 ccmZ4e|Nnmm1_sgpU|_&tVDR670R;X70LOU@b^rhX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9f896dab64e848720457f14d29b54791a79643f7 b/fuzz/corpora/bndiv/9f896dab64e848720457f14d29b54791a79643f7 new file mode 100644 index 0000000000000000000000000000000000000000..e2e4da15ec47aff44df0e57106047306ff11fff0 GIT binary patch literal 2050 zcmXpoKnAAB90LOb1~mSN1)9|M`Dn;O0o6m6I$)4GYnXsngA6b+F%2>oQ2}J3oACh? iJp2GlQJ8WF08;~3WB?Yz6i0{*5MY1+MkqZB2m=7|>4o(G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/9fdce8542c3c2c8f8dd81d4588dbf2bcd76c57a7 b/fuzz/corpora/bndiv/9fdce8542c3c2c8f8dd81d4588dbf2bcd76c57a7 new file mode 100644 index 00000000..3c89fc2d --- /dev/null +++ b/fuzz/corpora/bndiv/9fdce8542c3c2c8f8dd81d4588dbf2bcd76c57a7 @@ -0,0 +1 @@ +!ÿÿÿÿÿÿÿÿÃÃÃà \ No newline at end of file diff --git a/fuzz/corpora/bndiv/a00f057773d011dbc8e7f7bf46964ae9ddb50eb5 b/fuzz/corpora/bndiv/a00f057773d011dbc8e7f7bf46964ae9ddb50eb5 new file mode 100644 index 0000000000000000000000000000000000000000..a134fc682ce0285f591b80fb1dca5eb8b4b1172c GIT binary patch literal 367 VcmaE5FbZIR0Uv-VA{`)`3IL~-J=*{P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a029c002ea8933b6f75a80f5eea1fe60fefa7783 b/fuzz/corpora/bndiv/a029c002ea8933b6f75a80f5eea1fe60fefa7783 new file mode 100644 index 0000000000000000000000000000000000000000..4360e7f257538bb9b4db26646e3dbaa330fea40f GIT binary patch literal 473 zcmc(aF%AJ?5QX20LR1@xM!`QJ5t8K*or2m0D7F-dPN5fnG6(n*r?901IDo_{Hd}Fq zl^=yhqw!5KnU~3%H%CNiYIb>^FYA~_Xqs*TvwI`&Y)5e>a-H8=CMXZ_9Xc1r6d9OR zCL|3Y`&vX_y+BG{B3b2=Gx^=>Cpx508u}xDW}~WES&~VXri)MbIXvNF+`o)b1P;1W rpIepflM6v=0P0j#oeQDfvm(jl{oC4FSXyiC#w+k|2LOoILh@=4Q5s*Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a02b952605f32812b5e80db0498861c7582db859 b/fuzz/corpora/bndiv/a02b952605f32812b5e80db0498861c7582db859 new file mode 100644 index 0000000000000000000000000000000000000000..2873f5f7db4ef5eb476f8d131dfb43bd6c4e3195 GIT binary patch literal 27 McmbjXc@lvP43IfsU=U%gf7+U%si^?uW(Kh184L_83=9lbLwo@M)$UES literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a1eabd79fa7e0ca50503199e2077d1d125347e2c b/fuzz/corpora/bndiv/a1eabd79fa7e0ca50503199e2077d1d125347e2c new file mode 100644 index 0000000000000000000000000000000000000000..f5047c96e94e4533b83f09d3cf19e6ab7ad5f25f GIT binary patch literal 2882 zcmeH}v2MaJ5QcvQ3r|t8GFeG!LRTKdZ$ee|Mfw^n5nH9MU2kGStn6H6#|Yc?HBk~Z zs>HXT)A670&S%F+l}UngcVNbj+IS%9qx_#ETOLauwXzRCPHu^0MnJ%kv^r`BS-iEQ(dBN~c-a-#{5z zf5`&anH>*y-z5;_sBAAjZk@0+r5c6s=;9fTuof_txc*t#$C(0rVMNjhh8Dz;g zo>quucJd70?M`V7QB>dIjgEZP`v&|k^V;~yNbio;`uSvQJONX+i_5jDKziqnL@+3U d5#erg??2-G-k-Lwz~2%cm&D7=;hww=d;{t7WCs8M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a2190c70d2440c4b900cbfc42724771dc7feeec8 b/fuzz/corpora/bndiv/a2190c70d2440c4b900cbfc42724771dc7feeec8 new file mode 100644 index 0000000000000000000000000000000000000000..e43b1843abeda3fa5590f180b02413c397452458 GIT binary patch literal 2473 zcmeH{y$QoG5QWd+5z-q~21DSHkSdd80goX|q|Xd)(x)|PQfG#Tn-EZK51=6bfZe4w z`YL^#8r_{<;h>dBlkr8eB2!^FCvTbPYkL(D%pQmmdl2_vWc&;HQdX6X%KsGZ1hl4P z17eTD!8=oAJD19CgXfHprP#2p;xv+zQdbRNW$Hnp;L0P bu;-769ET+8Yx`IXB*t@$=Rn+p?eyRWoeYb4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a4c5e5a879c6349ae219d85b6dd335495f893960 b/fuzz/corpora/bndiv/a4c5e5a879c6349ae219d85b6dd335495f893960 new file mode 100644 index 0000000000000000000000000000000000000000..5d8ce887ed6da5c31c48636542fb1f26b48e3ca4 GIT binary patch literal 1444 rcmaE5FbYNixnL@}0B)f@7{Iw$!Bq@^RoNf}|B=9eIgeo!3~c}a$NA@Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a5e4da0a703eab734b5d74e51cef578da80362ca b/fuzz/corpora/bndiv/a5e4da0a703eab734b5d74e51cef578da80362ca new file mode 100644 index 00000000..6de3d401 --- /dev/null +++ b/fuzz/corpora/bndiv/a5e4da0a703eab734b5d74e51cef578da80362ca @@ -0,0 +1 @@ +êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê!êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêôêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000êêêêêêêêÿÿÿÿÿÿÿÿÿÿÿêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêýêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê0êêêêêêêêêêêêê0ê0000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/a68f0fb9a8a9699a690022eb041c3428da2fe20a b/fuzz/corpora/bndiv/a68f0fb9a8a9699a690022eb041c3428da2fe20a new file mode 100644 index 0000000000000000000000000000000000000000..20838e0c7fd480fb0c8d0865f1c9338ee5ea1958 GIT binary patch literal 3124 zcmdOTp}zJ>JRy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a6a176c46fea452190990c1263e213d5f3743050 b/fuzz/corpora/bndiv/a6a176c46fea452190990c1263e213d5f3743050 new file mode 100644 index 00000000..da2d7c55 --- /dev/null +++ b/fuzz/corpora/bndiv/a6a176c46fea452190990c1263e213d5f3743050 @@ -0,0 +1 @@ +¤€000000000000000000000000000000000000000ú00000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/a6bd6365b4f8137d7ac83d7d83743fd67a527064 b/fuzz/corpora/bndiv/a6bd6365b4f8137d7ac83d7d83743fd67a527064 new file mode 100644 index 0000000000000000000000000000000000000000..ebadcaa6d46305bacf925a756d74c46c19bf8e5c GIT binary patch literal 153 hcmdlz69NnvC<2UFbVJ3kNudHw8211Jg94Oo000Sy23G(8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a6ec0752d81bb68420d1ff83d17a41aeddad931b b/fuzz/corpora/bndiv/a6ec0752d81bb68420d1ff83d17a41aeddad931b new file mode 100644 index 0000000000000000000000000000000000000000..e05b514cf90055b859b7511a2af4defe6912a788 GIT binary patch literal 81 ucmZ4R|NsC03l#@XNperh(z(|5pG64k45P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a733302d776bbd48ab3c22ca331ddafc7e320c63 b/fuzz/corpora/bndiv/a733302d776bbd48ab3c22ca331ddafc7e320c63 new file mode 100644 index 0000000000000000000000000000000000000000..402cd5a0adc72289346b856a4dcdd792a3d1b2e6 GIT binary patch literal 65536 zcmeIxuWuAV07vmTf-rP)Xc3yUAeLYi2&ZjojeEi9cJrl~= z(KQvra!D&@C1`zR$Jb1R+N&2%~`b7f)BZjVjm!#>mh#q|uQlgZ>$ zTIqK0_ZmsB*L(UT!{p9zILyqox0jOANU3-Bw{{lqdGf`oss?A;{n^3R*8IUTKXZBG z;!HVR%HwLOdS2CX;q~fR$;-P{tE8H%s%mw0tW;HXrQYEG|EFqjuHB!#x3W@JeppPt z4of@VMhQDj!qmt5WirWlYq^_lFAtL5qiS>cRekKOt4W!dsGp@Qd`{NZQf9};-;|B% z=FI#3_epMN(B4VX4DU9%u$$)RUGl6R-F|nl?cJqE$mYWrM`$-EN%NK*j+1nb$J60- zZye7PJ4vihW_>d2lUbk4`efE8vp$*i$*fOieKPBlS)a`MWY#CMKAH8&tWRcrGV7CB zpUnDX)+e(*nf1x6PiB2G>yufZ%=%>3C$m18^~tPHW_>d2lUbk4`efE8vp$*i$*fOi zeKPBlS)a`MWY#CMKAH8&tWRcrGV7CBpUnDX)+e(*nf1x6PiB2G>yufZ%=%>3C$m18 z^~tPHW_>d2lUbk4`efE8vp$*i$*fOieKPBlS)a`MWY#CMKAH8&tWRcrGV7CBpUnDX z)+e(*nf1x6PiB2G>yufZ%=%>3C$m18^~tPHW_>d2lUbk4`efE8vp$*i$*fOieKPBl tS)a`MWY#CMKAH8&tWRcrGV7CBpUnDX)+e(*nf1x6PiB2G>yufZ;X9J+*r5Ob literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a768ef5d1e46aaed9114f96c9491f003ca0bf6d6 b/fuzz/corpora/bndiv/a768ef5d1e46aaed9114f96c9491f003ca0bf6d6 new file mode 100644 index 0000000000000000000000000000000000000000..cbda2ade92f37ecc90d83df31a144ebdd4020f62 GIT binary patch literal 267 zcmcEi4+RVc=-~AE^IK8HG)xRMP(=(37|_5EiU8CwEi^-s0N8#cK05e}F2DfR0un`W LIzrib2-^SvRd-iX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a7c3123c36e471de64b1c7dc3ed931889bc6caf2 b/fuzz/corpora/bndiv/a7c3123c36e471de64b1c7dc3ed931889bc6caf2 new file mode 100644 index 0000000000000000000000000000000000000000..c08a525b1683809d68e48e8cf36002a829bc00c1 GIT binary patch literal 1043 Wcmb;mV;BX43z!Tp=Zu1p1q1-)wgDLc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a7e342121e60d4c82e44752c6cbd9be3ce7d2484 b/fuzz/corpora/bndiv/a7e342121e60d4c82e44752c6cbd9be3ce7d2484 new file mode 100644 index 0000000000000000000000000000000000000000..7306dd15bc8c56e1ba36193739f0368128d76400 GIT binary patch literal 1553 zcmdO50D(RK|2w$WzX7w!0i@`kh{Xa@^kV~*>ZjNMN*yrN^%Dlze5eBlg!Ll;#3T@( z`~-^xusMt{FhElR;cthFVwXn%Lh^lvJz4T+AOOiKvW!6jLtQ@vp!)&_(8a0E P*ToU*7W8s}0Rsa7FHcF1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a837923eb38798571be3173520e2e91b0bead99a b/fuzz/corpora/bndiv/a837923eb38798571be3173520e2e91b0bead99a new file mode 100644 index 0000000000000000000000000000000000000000..f8331afa10d84dfaaff7ca304a00c25c6ce38f66 GIT binary patch literal 363 zcmb`Cu@S;B3`Ir5FsWoq$PQHoVh9G&4B3PosKpL^?h?C*?>HJ>^>vcIz9M#R5!_^O z0?-TK4S)`;z1iW2>!x4l?!w^%Pa--Ue178YPn}Mdm>G=jL4cDa1hd2=c+kzDR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/a9e27cf829dac4fa7237ca2bbab4c8e5765a024e b/fuzz/corpora/bndiv/a9e27cf829dac4fa7237ca2bbab4c8e5765a024e new file mode 100644 index 0000000000000000000000000000000000000000..76ce6cad5e681c10dbb8ec643e8149882647831e GIT binary patch literal 215 UcmaE5fB>ok2oSC?V4wm30QIvL_W%F@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/aa5c30d643b0172f7c365139f1b38ec0875bdcfb b/fuzz/corpora/bndiv/aa5c30d643b0172f7c365139f1b38ec0875bdcfb new file mode 100644 index 0000000000000000000000000000000000000000..a9875e43300b227914f5f78d69ec8d09de59f88b GIT binary patch literal 6145 zcmeIzu?m176op}jh8{=hsIspK{FP#c} Bmwf;L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/aae9a94084d480d4e54df0c0e12d34df3f88be17 b/fuzz/corpora/bndiv/aae9a94084d480d4e54df0c0e12d34df3f88be17 new file mode 100644 index 0000000000000000000000000000000000000000..e9f03bd48c615ec7fe971ed9308b533d3a3c0de2 GIT binary patch literal 391 mcmaE5fCm)dk)sV*uwVfQgDCO=$<9_svr7?;Pc&d47XSc8kwdcp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ab31d9c9b80da3de1f488c93eeb40c3544e1e8a0 b/fuzz/corpora/bndiv/ab31d9c9b80da3de1f488c93eeb40c3544e1e8a0 new file mode 100644 index 0000000000000000000000000000000000000000..2114f1754c9afabd084cea49e661f2f45b1beb34 GIT binary patch literal 1507 zcmdNAU|?Wic*qJO$p?G>|95b$e?ztbqxy$-_z?!wiD8gEn4&u2Z#{dh0+gWcU_OG#%(D^uSIw{YVX@k`Sw!F{sH#L+vDB< U000000000000000001}`U+L(;*8l(j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ada05f65f2124f476f294945e484f710a0226e8f b/fuzz/corpora/bndiv/ada05f65f2124f476f294945e484f710a0226e8f new file mode 100644 index 0000000000000000000000000000000000000000..2c4fb8608ee71fc9d3f64418dbb2cb030c4e87e4 GIT binary patch literal 1354 lcmaF$l7S+?NRe)aQT>A?{056V$OWVBrwojSA7y}%0RZC?0qOt% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ae4dac4dde31a32a49e5a7acbde216b32f056e14 b/fuzz/corpora/bndiv/ae4dac4dde31a32a49e5a7acbde216b32f056e14 new file mode 100644 index 0000000000000000000000000000000000000000..ff99830bd513685a38e63f0e62f3eb40e342a0d9 GIT binary patch literal 435 zcmdOjXJBY)X=z~?6o3SmXh0myh{N3tU~xqd84?m=5E3%iz`$Sv1}MN?Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b16afcfc579f9bf34448b8a68d0c22272bfc4b7e b/fuzz/corpora/bndiv/b16afcfc579f9bf34448b8a68d0c22272bfc4b7e new file mode 100644 index 0000000000000000000000000000000000000000..3e00a10b5861a0445dbe00dea5df2b82fe327897 GIT binary patch literal 392 fcmcEej|LbRtQm$KU_|pI2$1PXEGCf&P#gdNTLx_k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b1ce3323beaccf5ca5124264e92d7f2d45f94e6d b/fuzz/corpora/bndiv/b1ce3323beaccf5ca5124264e92d7f2d45f94e6d new file mode 100644 index 0000000000000000000000000000000000000000..2f1742837bc9303af829ff1a6aa15ffbe8a1fe5c GIT binary patch literal 3076 zcmaE5FbYP&C>U0Nf#zUX1Q!?aU{L#aG79)#a{AA+)21M?LE`HF=wOhzYZM>@nwJ@) KU=)mkK?ndX%z|wI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b26d6743480099927d3e066acf20d07f4e1499fa b/fuzz/corpora/bndiv/b26d6743480099927d3e066acf20d07f4e1499fa new file mode 100644 index 0000000000000000000000000000000000000000..4f0c005a292cb600ae116fdbca166f2bee3dd5b7 GIT binary patch literal 459 gcmaE5Kqg?I8~8>f06Pfb8<_hLBD4oEI|l>+0M`{q`v3p{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b2d89284d0e4799703274a23e83353d3c0a08063 b/fuzz/corpora/bndiv/b2d89284d0e4799703274a23e83353d3c0a08063 new file mode 100644 index 0000000000000000000000000000000000000000..45ce10a95ca9a97b95e51acd453ee41c93fdc0e1 GIT binary patch literal 4096 zcmeH{ziSjh6vyAjZA?fmh!$HMcgs1927)7-gTR8D;tDNJEK?kU7!E|i6gDDUhK0fU zTrKhsSeQaW5E8HuEK(cl49J3Ek z{7#N2%{9m0+gns2su4gI?JEr%bb#keE07(}1uA##p^R4NMe0 pXRbN-To+v8x~{t{@*y951MztOA-lUl=pPWBPS{$9@Q+)B`~r0t$$|g? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b3357c6317a8fa743b34c41e0cfe640df302b4b5 b/fuzz/corpora/bndiv/b3357c6317a8fa743b34c41e0cfe640df302b4b5 new file mode 100644 index 0000000000000000000000000000000000000000..a01c51989391d7d25ec6d5c74e9ca7b6ada6290b GIT binary patch literal 3285 zcmaE5KxZIeAV6mu2MO3t6EH|TM^!MDTmW~4Js7~bSiw~cU|?YIpOygA89gr!Y^eNb zXo4v-U;sG)2Fwu*WC7BhJ3@=1VFbu6D(F>K45Of?Js9kfNiM()xzU0jJ0Ppv9|fZT G1pok8R8#~2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b3b2d13de3ba9c972db06b9daa94f17d0c8d5200 b/fuzz/corpora/bndiv/b3b2d13de3ba9c972db06b9daa94f17d0c8d5200 new file mode 100644 index 0000000000000000000000000000000000000000..f0a806cf4aa667159b17c7e70160d7b7ced1c700 GIT binary patch literal 604 jcmaE5U|?Xt$N&K#_Fw@2pqVmttL(h@*pc0d3C*VOUMH zOaQB8FaQfcNCY6jhgkzRl@+Ca*P`%Zrr%BZzBR2q)9UJs@}PC=Rf}1&!Fz2WG_R5>SKFt259L;v8O3B z09Mo(ptlL&63Eet)h-mlK>*+`#|7YS{QnEigaQMD2@@tvU|?XVAOgTNkqs8$)yafc U7CShAU6_FbIaIKzF<^KA01;J4ZU6uP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b5186568c1e10706f4006b396c2989b3dd292736 b/fuzz/corpora/bndiv/b5186568c1e10706f4006b396c2989b3dd292736 new file mode 100644 index 0000000000000000000000000000000000000000..13c0d83f19d6ecac49e76e895a2abb38f259cd46 GIT binary patch literal 36 WcmdNl_-}v#7#P4p1r19;lK%mounExs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b5ee12339958835f8c9c6cb26e90259c5a1a5567 b/fuzz/corpora/bndiv/b5ee12339958835f8c9c6cb26e90259c5a1a5567 new file mode 100644 index 0000000000000000000000000000000000000000..14de3b5342f3a78357a4ebb83413483658836d3b GIT binary patch literal 2886 zcmc~|WEf~L@Gcky*ntUN0Mk=}31Ct*2hC*KfazpRK&H{ifP+C1nTraTP`TIu5lRLW y?7y+RDd^^k7jeifCG;bBC;?MN=Ctm2bdKUCZKU3k&{pl(AZ6b0ssJniDU8r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b604c75ed8a3f111f9af607e3e81a8bebd11e686 b/fuzz/corpora/bndiv/b604c75ed8a3f111f9af607e3e81a8bebd11e686 new file mode 100644 index 0000000000000000000000000000000000000000..f028bfd035b9179f014562ac9c0344e45afa204f GIT binary patch literal 6484 zcmeI$Jx;?g6ae5C)Bz@D#DW-^kQliEH{lKl>y^Avm_#(A>uATu1v4jO3ERSu0Bb5OM$LS zQiB7FHnTB@_?>0OqZIPQPC7}ZKPBsfa9%%!mgq*| zbx~K$D6+LO>+8qAi9L*-fU%u5W5g`@tn(%*C6v-Sdyqi@=6~Lqak*Wj5hv;It+B>b zm{Ui=?x4CWo2skOu?dUxI~I?x2~P+i$86(WM()H!2+1F(oalzJuM|QnIrVnU*hD?B z1O{MrV9ta|vfub;oSwo)qtTcp+MP}19S_9o+bjI_t5xb?>`B!fPc=unYBt}rRihmb Ya4+Z}q^nHd=Konqv1sn_j00aXdJOBUy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b7ebc89222e479b92cdc2997e02ecadbd60ab1ad b/fuzz/corpora/bndiv/b7ebc89222e479b92cdc2997e02ecadbd60ab1ad new file mode 100644 index 0000000000000000000000000000000000000000..e2b5242435e773a6a98b9bc90a13665281f8c8ba GIT binary patch literal 435 zcmaJ;u}Z{16nr_OaK&k%f?FK9B@QcrtCGWjV6M34gn%D#bs9fG2;2Dqi-jLxlg`dR zu(nQlaHdjFEKIZV67`~mui7^=Z+7Qx0j|sE#aIQE%2h5&^Pxu=-kVG~12oj{PUSK* zzT;|P>1O9-`3g5lI-n*7x}}Ft^w(2mB3j>kEf=SuaoDak_Tcgqkv17VDymnY^RWUs zBNo-0lOy9(Xt|-$d@%VY1QUz`p-Kxtf~G{ZiZc;KZPZ+*>FnX~t>2@)(6HD9m5MLK zJ`1W1qDFu%(FlBU_4ev+1|sV@Kv|Y$0Z;zy;f0^u4V>hU$M3e;(v`5}Vae=2^Xp+w U{T06b02M@-?;^e}vjd!c0%vK2FaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/b8a56e97e26996479c972552b1f3608d1e06b908 b/fuzz/corpora/bndiv/b8a56e97e26996479c972552b1f3608d1e06b908 new file mode 100644 index 00000000..15d9711d --- /dev/null +++ b/fuzz/corpora/bndiv/b8a56e97e26996479c972552b1f3608d1e06b908 @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓÓ0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/b9f3ada49a9e3c99fd69639f6cbfd6544157b079 b/fuzz/corpora/bndiv/b9f3ada49a9e3c99fd69639f6cbfd6544157b079 new file mode 100644 index 00000000..d679d8c7 --- /dev/null +++ b/fuzz/corpora/bndiv/b9f3ada49a9e3c99fd69639f6cbfd6544157b079 @@ -0,0 +1 @@ +ê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000!00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/ba6aa6070e0187f80bb5a04a98905b4970159953 b/fuzz/corpora/bndiv/ba6aa6070e0187f80bb5a04a98905b4970159953 new file mode 100644 index 0000000000000000000000000000000000000000..c63fcc6b68b345a4ac5d2df2c09eb66fcc9ae038 GIT binary patch literal 32654 zcmeI5Ym8k*9l+=AmPC9mT7sb1dm(1a)*FUOy@n<1eh@T<8blzgtx3~t_KVsyx}qU* z&+ax`OdxcZBd-Q%C{VBz=+GXON`+zxl{FL)Erv@r7nfzl(htZ5gWxg$dC#0VkNen% z>-~MWcixXP@0m0I^9H7%CX#DnST!)zHCry1%g2|sp&TmCmai;&-dBp9U9+8FbF8y# zc4$TU+hB11(D~&@mzSR?zqKL^L+|-g&z5re#Z$gp{A}0D`Jol%^~}-MT^1;}YggGj zzL8kwS;5@ljh2V$>FMd$rl+U>Jv}{*(AnLsC)HU`FuWCSiOFxP}r01lY@m~?b@|rsA+0s7$M~F(u)d(kuw|? z%|K7P$xNZJ{BbmS&fw}F%@hh9`GMz4g?v7bQ2%gPEdF?ObaZs{=;#FMnSoLfsM6t{ z3e3}2!Bes5h41C-e$J9hrxBq@lT3U|b9IrX*61~gz*QPASEeuO*5_-Y?gji47BpjT4pFMZZ7C#`w zJ3!EhjT<+TMcfp)~OapSPoRlTh4@ zk6y4cS`*R;*u$qp+`eX;^iEAp9aDyfl#=n3Z4gBjQxL#Vqw9k}tFd9VTK%AES#xH* zf>63RDGX0?nNw(G(~w0-2sxHmNeX-Vclf@mqJUp$pM;Q`d3f7ZxRva9la)&4Z-)E7 z8#>_Kh)JdLio?w0pQbhn>d?&415aZb^)NLoIZzqYsA}-wsMpX6;8IJU$mdI?N~Q8r z5VX(Af}@Q@=)y2e>#fkRaBM=GxY@dy1D2@?EpLPn+AsTlX|}y2`eng3q40e}%|IPi z@9jX3%1mS`FCf}c3ZU8LthU$r<~b0-U0N(WH*Js>KFSE3xw%Eyrf?J3Yw@^q^MFXL z&if%BKhkiFFNcC)kJB5gC#XHN>p=c<@#71H5W5DD`UeuTmPOeoj944Gq`MOoXgGwf zP?8g_1Q(T_>>>!EPf-KAAz{;Cw%yccLqugDQv}FVItw5e6vj^pMT93!6IZ2q%yhy) zZ7$O&2YKRu2mikzgxp35`Gw5U4yh76WK>}R8|O8)F||2z@Ns@*F2?y-{tPyW13Cqv z*bodHqx%bn0|(K^ZlLC)tV$b}$=sK0EfFPS6tn8|c7z^xaUQYCcO6(9=eGB=|6g+L z4g8;Bgw45;kR4luhMXr=92&U7ikgA)vXa`EwabBAG;p-;93j*%jICMZTcQZ%$R@`E z@jxFG3JFb{H7+*VD~9ni>pAHaEf%O(td~zKkI^pi56UtYQS6FCQ=ykvT8cTFrwe+^ zg=p{lf*^Rr5nEb&CspVIu)`;3|2wf$d3)6)n~d33frkkpc|?fp90(ykmL3$5&K=P6 zY}FgaDyL~IsZ(DzWQ#{25Kl>^RzproHe9qpwDs9`bIR#h;6ey|-4X;FHhdqp1w?$Y z=+A@Wg+e9x?czYoM4_;U?s{lO7RC(ZkCtT+3=9m2GO*YlZG{#Wf}Z-89jnffAV}Qn z(9jB9!6)(*t>*`v6M5e^tA@Z63LO=VYfcu=uM=Cg#GJ^VnMdt;oa>n>^!4?5eVohs za2q;h`SQp4cAy4~jM}=jUJyc_?H5afBhN{t;$M}I<#$ggea*OPleG(WlbjJ)a}Lpa zscEY@<#=YFIpyH<8R#3w<Q7y7l_fw7Xu zd?g=-2=S@J*NiDe+?>_kY2(mI1?)n}#!X%j%4)S5RIAl%vaIAckB)XAgob-&4j(>T zT(xp2%oR``x@~+VblZjD{Qkqci>p?8VJ^=s@~1}o^Dfq(ixj|wOj845CIQgFg6-I7dvoKJ^2b{QHlPY$m-Dc1EfG2!&PcYM5qTF{7xoNfdu zX|t_ueIj9^ZGF%L;6hF5SQ6Mdw)M4Rhwxln5Vk`>oOu-Mcvq4=gbdUf81!Czu1^T- zlKFl}wW>}Oc%N6_{9nTuv#}hrJG*A-uq|9RviXT=e)RRIj}4vgCvATE*9pgHEPrN* za%z+7s6N90A_fj>+g`8QA*3FjV?NnoJ7+uKki1&m_Pt>-nYq;%G-tfK4828t=io=< z&%x!BPu@!sXW(@nf@3%YH;^mwx2f@mvvGyzr8vYX_Hp#aS?Kg5U8kd>RVpVZzd?=l zb~J!yX4kp9MQUXoO8PgeV<1QWviy)kNB!L_HhA8)reLo0xQgg*)R{tJXR=?;nTqxkEe4*l=AHF<4(JU=4Sz6g?F(0gKZX{>M z1$RoEMT4q$G`%pl))IRyoH*f1s}g17 z`?ZAD6pX99B+FG^OHLOhEalZvpas9mJF+O?(++YvmygNx;@X0NQ&a_em42JQ`5y5~ zzAm;RJ9$Xu3pa)gNc3t9wGE`FuxCeEcu=K-6cYPO2Xf>5U3EpyXhZD5=#*aOWs51J@CkH zL{lo23K!`I&(4(GSQ}&4yWI1H3gGsgCD>M6T`_6at)T?M&MG#tK5bwLnx zI0MqJ)Y%T=g%jlK5Kf?pO5h|3n|Z^yv6c)-L`ZZIBXFh>>}M6lA#5hj{hAG6eG6r4UU}2qBsZDmf@3L4g<&6aaNYnbQ0l$^&?S1#L_T2zgNN zJ(vq7)JVhf!jQ5V%`Q`tAb(L2xq@65wOv7uka`6f_<6*eK&v)eo=AhA- zBv~L{k}PDyUimVZB-tcj<-5k|pbkm0I!qn|#g;r^G+TioWLC&=ln?OW)SL^M71CPq z1zVF5;=cJ)lW8;vr(SkG)%d-NrXilFAsbW5`c{K4xKlzc&(&slSM_yU^FR00lw(B1 zF^4c=Du@w%a}S78O=^@ifnKF~rBYIoKl6brmCLQqd{o#MMr4HUr4}L2H6rBu*olqn z*8MEzGderR#>C?S_?L8aBjBJZ13mFeI?U3Ngex)kIj~WiUHn8EUNtZJm&&lP& zB8rh=HGxpDMTeBa9Y^CWkqQzjpf)PP1&)-hsO*hHJuh14nbvlu5J{4_OnpwJ@&{%suE&j=}yb@gG^#|y;3 z1jKY=23hN|3$=J=i#M&|CVad=ag;UzS}9dsH!;K-r4kkX?Zzee+j$`K1E*<=x#7mz zg1x3T=ZlT;#g?FKpy5pJ5JoxEAvU#*k{Dd9CAQ8y5kkGtM;Lt~0Nt)PZuOgGqVEa35EI{Q>JV>YwExbCx06;%A$=Y z7j^C^RmGPC?T5znlhRz(vv}+<4BV5;-Lj4<&pdk*6YwP^_#z|bLV7uqYaW8<*JeCF z4u+2w$+8&%(?K!md zJON;Q#31t`B9XgQjn!2|R8^0@-ZtPbY=F$CN5cyV>SiWsuBKYUZ?65Hybf=Koz(_A Dep%Rt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/bc33cae0478a84be6040974d5be00d0323a6293b b/fuzz/corpora/bndiv/bc33cae0478a84be6040974d5be00d0323a6293b new file mode 100644 index 00000000..2a11027a --- /dev/null +++ b/fuzz/corpora/bndiv/bc33cae0478a84be6040974d5be00d0323a6293b @@ -0,0 +1 @@ +¤¤~~ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/bd26afc94b62a9dd31a4abca22d2b946fe4f55ba b/fuzz/corpora/bndiv/bd26afc94b62a9dd31a4abca22d2b946fe4f55ba new file mode 100644 index 0000000000000000000000000000000000000000..56e3398bd729a5d9c3db6bd3974593d27fa424a7 GIT binary patch literal 1080 dcmYdbzymb!$c+LjfuR-1L(8>86bykt1^^Vr0RaF2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/bd3c33c4b75c360cd0f4637c89afc465b51719fb b/fuzz/corpora/bndiv/bd3c33c4b75c360cd0f4637c89afc465b51719fb new file mode 100644 index 0000000000000000000000000000000000000000..21bb7cb1b827d34c37726f708e70c4fdb4100d24 GIT binary patch literal 6114 zcmeI#F%Ezr425Ae9>x)30X>oD^%@?)6&GY=Q2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c1b8a62637927ea2a1090dd5af60774da78da6ef b/fuzz/corpora/bndiv/c1b8a62637927ea2a1090dd5af60774da78da6ef new file mode 100644 index 0000000000000000000000000000000000000000..676db77c6514b5a070ed595d5257923197c572c5 GIT binary patch literal 603 ecmaE500s;cg8vlghqz!U18eF!o`SF(OaK5KEjC2} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c1b91b5cbcb97112dcc382a3b3f88494f3494021 b/fuzz/corpora/bndiv/c1b91b5cbcb97112dcc382a3b3f88494f3494021 new file mode 100644 index 00000000..064b8f28 --- /dev/null +++ b/fuzz/corpora/bndiv/c1b91b5cbcb97112dcc382a3b3f88494f3494021 @@ -0,0 +1 @@ +êêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê \ No newline at end of file diff --git a/fuzz/corpora/bndiv/c1b96d60c3eaa7281cc864c65544796e4649f108 b/fuzz/corpora/bndiv/c1b96d60c3eaa7281cc864c65544796e4649f108 new file mode 100644 index 00000000..68a211d8 --- /dev/null +++ b/fuzz/corpora/bndiv/c1b96d60c3eaa7281cc864c65544796e4649f108 @@ -0,0 +1 @@ +ê0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/c24859d08159ff85fc00a79d344b52e49ed26383 b/fuzz/corpora/bndiv/c24859d08159ff85fc00a79d344b52e49ed26383 new file mode 100644 index 00000000..3f723d9c --- /dev/null +++ b/fuzz/corpora/bndiv/c24859d08159ff85fc00a79d344b52e49ed26383 @@ -0,0 +1 @@ +ê000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûûû0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/c253d8b904aff6b53ae4629eed27845134f1988e b/fuzz/corpora/bndiv/c253d8b904aff6b53ae4629eed27845134f1988e new file mode 100644 index 0000000000000000000000000000000000000000..1fa58333ed1cf1d6b6b6e1197a8079ef9998e650 GIT binary patch literal 27 ScmaE500j&XAPwUi7yZiLSelv|ni-m+C?o)gvKtQ|U_4C$0HX^| A2LJ#7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c3cf4923fdf3dfc7438e7addf9a0fa71ddbb0a5e b/fuzz/corpora/bndiv/c3cf4923fdf3dfc7438e7addf9a0fa71ddbb0a5e new file mode 100644 index 00000000..470efa86 --- /dev/null +++ b/fuzz/corpora/bndiv/c3cf4923fdf3dfc7438e7addf9a0fa71ddbb0a5e @@ -0,0 +1 @@ +æ!;(;*h¼*)*8!;Ë!!#;!;(;º;'*hí¼*)F*(!;!F# \ No newline at end of file diff --git a/fuzz/corpora/bndiv/c40cd2a794597bf21d59d56075ccf3c96fbee2de b/fuzz/corpora/bndiv/c40cd2a794597bf21d59d56075ccf3c96fbee2de new file mode 100644 index 0000000000000000000000000000000000000000..cb75e67d5dbfccddd990b61f96b57de262f2f538 GIT binary patch literal 11997 zcmeI2&ug4T7{{NDt2I>1nnW+9`o3Mm;OeViP!PHWbEy<$QG^-~QA$`wC?p{C;AykF zik<|;KcJ`HJPADn5qt7tE*`usgy1VKh(E}|LtOjH^UTcqV|jPCvC-5rpTIja&pgk} zGqdwPGdr8c3eo;rq@H*yNp{}vsK&5D(eB{VP<6t2+E#yznCpMlMvwk7BI=F;didA1 z#!&U36cj&N@&`bjh7wo`yu>1rTY==+hAX7TDu~P~DN`efG*-2mK(9x&p3vS1A6bhO z)u~Fg8lBs^wN6)h)$XZbLbUPaVEFV;`mE}WuOusUu$ zu56Lfh-{hd`u+IFIL4nb@BH;`@LHDsj$+6%v$4vWiT8W720SF;JZ(jp`yLyqG zS^@!A@is!#0svtE5TR!sZnau451AZ3*29VnMvwC{d1+!ZOJ5JawN2HazYD`408zV( z2#8K`f7HZTAV7#UguK}M{l2mI6hIs!M*K;P_yWHVF-wT*XhK6XoI=Y%m7gq>3Y(W2 zQQ-;^@?+T)ENrbm!knbV1Ml%*$DlR7c*Z%&yrCP=ct?h5hRuU9V>SaeGhh;{!KGze zA%)yznXH)_)2d9K)6OO~=aTKt^sDtH`IeydI^T->^-YOSu1@kMFR{o#W=HJTSL)az$n?)U*yf9?#tf%AJy%@K@!s z99p;e|9cQ^@wGO9vq6B$Q*!S-n-9lTHVUkA2?bG+ar4P6a}~ZRQ+RrX_?JsXb8<61 z8>kDDluk^lDB;Bt*+1aCv$;L*_xASozz@&8#?5qB#QiJ=mAyK%F)!=k zj$yM~RS(Fod5)J|W{musozIVRzSB%I_46`)8pWX;^}m3v>h8V zQz9w?Dpjc$wJc@_T?k!yBK%)U6Dy09cK=*a$6z&6gETXR+&C_#txPfOcl+g&HpQl# i+z@v2AYWiukO{NgRLc7-LhWLCGKU`A9e#5>G=Bq5i>i14 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c42e8706558af06bc0a8e4ff653acf159128f0eb b/fuzz/corpora/bndiv/c42e8706558af06bc0a8e4ff653acf159128f0eb new file mode 100644 index 0000000000000000000000000000000000000000..ae587299fd13dc81d422c2a94598f90a81576051 GIT binary patch literal 603 zcmaE5Kwq$6!2%ElQG*d6I}Gkp5ZE>tT}y3XXklVvW^Q6)U~X(~U}>drJTS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c5b6f94b0bd3eca903ba18d897d96a96546a04f8 b/fuzz/corpora/bndiv/c5b6f94b0bd3eca903ba18d897d96a96546a04f8 new file mode 100644 index 0000000000000000000000000000000000000000..7d5659ee21a790719359c76fd1722a8f31aab165 GIT binary patch literal 6170 zcmeIzI|_g>5Jk}x78dTrCSpF?ij7-vHSWqiSy|aCh#?4RBnAZUDQDn4m}ZvgA^-pY zLds#Ci+;4B-4}FE?Qdz6GFB;RYb#r=D^qD9WXMZ*+Jeq--|D*jBt6#&AgMfQI%2u! Q5}R|ArFLrr004h-0J<%i-T(jq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c5da8fedfae19056df2d2679bfcdf3ff23f693a6 b/fuzz/corpora/bndiv/c5da8fedfae19056df2d2679bfcdf3ff23f693a6 new file mode 100644 index 00000000..90d9ecea --- /dev/null +++ b/fuzz/corpora/bndiv/c5da8fedfae19056df2d2679bfcdf3ff23f693a6 @@ -0,0 +1 @@ + ÿÿÿ Ó_______   00000000  0 QQQQQQQ      ¶0000001 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/c64a482d372279a28e65d08c1b0838382c1724eb b/fuzz/corpora/bndiv/c64a482d372279a28e65d08c1b0838382c1724eb new file mode 100644 index 0000000000000000000000000000000000000000..7d4a07db2e47727549cb8742c0c6df85f5a67943 GIT binary patch literal 196 zcmdn9XV0EJF}mtnZd$7tpa9HOe+T1g9h);}&j0`a|0`)}IJ`4~0|o{yINQWz8pw!O z>UA&F7cjzfLIExVkN~o7tss!T|1p{l|LYkT+TX?Ks{f18Ri9SJ{zBbA-N0Zw%-rqU Lw{JHvFfafB(up}e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c72a30303009bc1753480d7f53b6fbd26c58739e b/fuzz/corpora/bndiv/c72a30303009bc1753480d7f53b6fbd26c58739e new file mode 100644 index 0000000000000000000000000000000000000000..9a9dc95f25e0923da102f2acfb81b1af65460380 GIT binary patch literal 3306 wcmb=EWcZH;7)HS;7zKj_yc;C$7zLwX6c7NTnROJ5f>AKSfa2iwFQRV)00$r(djJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c78eeb301c6c80702ad4b5535638f4399547892a b/fuzz/corpora/bndiv/c78eeb301c6c80702ad4b5535638f4399547892a new file mode 100644 index 0000000000000000000000000000000000000000..016bc96a0c350e7fb879b69fdce488e53f180c9c GIT binary patch literal 583 pcmaFGz`(%BKp7Ym`bl=ge*%Dyj}J)&G=xxXLFG{ZsAkYW0RU<>EAjvU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c79d133257b8c377ce3586f612aec8bcfce6e874 b/fuzz/corpora/bndiv/c79d133257b8c377ce3586f612aec8bcfce6e874 new file mode 100644 index 0000000000000000000000000000000000000000..cf67849b4e8f3a6d6d362f892612f48c75c93098 GIT binary patch literal 2886 zcmaF$9~Ce#FfcHJ2$(R8j|9N-NMNw>(Evrx(}4yD5}?SuAsCz^%)h?|$iGyx7Gcnz z|Nr6nR{)WM5eguHW_+l@G&7&p?jJQD3`XM*6%4lU7<3LAYymXt9#lX|c#xtN1gNW? Ux~36!9fpON0w_S=U>XPj0Qip~0{{R3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c7e7d25a65e20c40539962d6b4ce61b7a63e7931 b/fuzz/corpora/bndiv/c7e7d25a65e20c40539962d6b4ce61b7a63e7931 new file mode 100644 index 0000000000000000000000000000000000000000..3ccb7e59a2907905c7a4c1b7c3dc56ff67898ecc GIT binary patch literal 1505 zcmZ3b3If&dVszEDUZ~fp*C{eIfEY{+sv9SsEn&GtA_- ze*8(5#oiuCuz>+2@XCNNFgG?gurxI_G&3}P#lXP8$Uqr@>&IcUJrZb;ea?XHP4zTM z6GUL-E5_IvPi6%95aL&PRThvg28M>oX{tY8F#LL^$`GKduFAlu08;de)l_4$GK2Ad z5Qjm*lh+g`AqkQIiK?m^tNX4}RaI1FaA08grEZZXX<`Bi{W?WoUl#)d$^rlrAcw@G z#>EdC9xiyepc{ftpFZ9FkU`+#f^KA0XuuSWKPbV5LFp=L0Bih)DBzdI0GJ7ca-h&a zv>BFgfUL!e!NVaTA)zk8E+HX7j=_P!LgBw=$r}{~#?K=E|NpNqjjF0jt*S!S0tPV{ mBGdqoLgYWy0Y7Ob67mYfnXsVWD>`!?0|PUof&#n@1Ooti{a^C{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c7fcb1cdb8cb893ab3cb711eca87f443a95a983f b/fuzz/corpora/bndiv/c7fcb1cdb8cb893ab3cb711eca87f443a95a983f new file mode 100644 index 0000000000000000000000000000000000000000..e7f4393a16ad65523b4ae51e7a54fa2a7ca05307 GIT binary patch literal 951 zcmaF$id3-MfG}WSFkpb2dld^X$0CLd;F^aku(q~l00ZJZ2o3mGuMpu+yk=Bjpz!L2 zJj8wm28PqRP=GKP6&Qk4S(F&XJX1t92LZmI>KH(PaMKV43=9n13<3-c43m`^4Ga{) L(S#D73=9SU=lF&L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c861a0e04a5a922390a0027670375e9bae84dc05 b/fuzz/corpora/bndiv/c861a0e04a5a922390a0027670375e9bae84dc05 new file mode 100644 index 0000000000000000000000000000000000000000..37bbc2dd75a82cdcecea94a0e4b43d7122f8dbc8 GIT binary patch literal 1563 zcmchWJ5Iwu5QhIPcnE|-LF0ypkQEVxm=qM?!dJ)vQd3&u0+BBO5@otv!4;G%xuZep zw?i~(X@F+Yz7l)o7&|<^!uF14{`q%zJfmkKA^8@DXdO)!?^2$-d_|L*LYls)mNfvbR;a1-*4N%G z?d{Y_|AU%8OqImDF{S$~yU()hE?Yp?0ow_M5VB^7)ec9~;1+545}&GD>xN)Mv3)r1 zM6aL2GqHAY*^5WhKrT`S@$tA5QAm0~EjQ*3B8Ix+68a2@NR8^uDV3S$m&1R9YPLD= K*a-Ev65$J65TvyL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c8bd35b61bcc058f0edd8cd92d20c6fc154bca98 b/fuzz/corpora/bndiv/c8bd35b61bcc058f0edd8cd92d20c6fc154bca98 new file mode 100644 index 0000000000000000000000000000000000000000..168f1f8224624665fe0d7b54a5d1fd20f675e661 GIT binary patch literal 370 zcmaE5fB_g8Z~%GL7wQ(-lA;U^laW^$LwV zumA+kFfcGISg-)%CoP5F|G}*Pa6JYFD?y+^>xFt96N4%vO9KN$2@?2*#Kr~?feHYl CszOWv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c98cbd115824f71831bf2d64517a3fd489bcc686 b/fuzz/corpora/bndiv/c98cbd115824f71831bf2d64517a3fd489bcc686 new file mode 100644 index 0000000000000000000000000000000000000000..2a3e4386970f1a3a3cdd30251d640478f813a252 GIT binary patch literal 1449 zcmdUuu}i~16vkgs>g3=qw4H>I;7jguNpSF=a8!^Y&JNBoU`PLm11D!ua1*jQJ3gF( zgri%>4ocEoNn(;#1;O7EzW06ij(l(m0DAB{{`>g`?!VHI%9+VF2M%(lUXRvlZS)2D zq^72~YP#;P)=DWO-3vzmPXl@;qAQ|JAj(zm#Yo+7^cJ086TR-7Si43#?D~grK*v^B zpp}bO=V)zoNh`?q0l+ManHjbdm?oO$P0*k80nV%lVLP4RZ~{U2YlQIwD^ zDEHB|5CCp*S|s$hiM#612AD?m{6jU zL;#E!N5^-V5P^dM^SNMLFy?WA9%r^Ee8;xA>wb(&AYw_4tEFZvUVa1LeWFV~0m)!R ACIA2c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/c9c2cbad030bd185b389800bf2126ba5cb09c429 b/fuzz/corpora/bndiv/c9c2cbad030bd185b389800bf2126ba5cb09c429 new file mode 100644 index 0000000000000000000000000000000000000000..ae8c98cc4b6db0c6f39dd821dda171a25f0bef48 GIT binary patch literal 24555 zcmeI4L2Tnh6hMELs;q#jIh3MRVP%70X`s??S_4ug(jqv)UJwTk97sr4?4?}VbD~v! z<3Mj5R$7EOtmq!8KxhR>4d)^O5)z_^r8FW!96;J-wJ=6A<8kb<$95biZPR&&X8xb~ zfBuZeW5?fV2lo&W0RU#{ADOkawKZ8MaaWQ#g-ERrx7X~@xOwD)2LPZX1ee4(a_4^N zX>5uBqes^dQ_OhWQTyP1x-5x;%trv9|J@9D`Qn>MOvhz+cXyY2zkt}$OD=CRF1de$ zaqt7}*U=LyEggBCFw$CUMu$ppC`M3ZM6Q()FpDCAq{=T&I?$J!IxCBIT zG!bbuJu=)=_GHijP~E$xMse?(j=qeKI`|w2-hz)H^t6+{;Q`_t9$*96wZpdUv?ub3 znV#s|=w6t28-LP^k%E^L`eVQ|NipkrY#|0Bmk?s^k!BGUc5->MOm-W zXihZsok2n`1>8U1Uw3v+^kiu?8clB8`Jr%*I=c?_AKz?_{(~)zMswULy)%FauV)}r z7)u2=KawI%(&;Oe(3f#OWDSA6nhAV4k<} z_v(1B5{gDLk8pfOOaTCXosYnRhQNdnKyaTvl1Ix zm|mW5A06SiITNaibQHR?P7O+kOhL=M%W{mLNm2KjD5T`M@}_jxG0RkGVSFn$%rDhWAUlcWaQJo<_->w##@J`d82;q!^VyJ zHN$acW@bnx3J@^EfaLO(D7b(lO5``M)McL#t1CqVFyjzQ;z>ykK{rLe@@2o^!vQLE zqa^pDqhQdx20{oFgKd1)JL|{G0g;1UH&G>qsFaV^ zO{^dk0V-&kQ}jm@HrlNgwpLbf1zT_b^dB04V~Fi-yxg|8*w+c$Mt~+Bwz1u|sK&A^ zw9s0ne`rVm(?Fv^DEOkHHHbV)YDKWY=8P5{hc;YtqvNeudv3zU^(0EXCq2_XjEf1zk@S1z;t_s}$_OyieHd(UpQTCEid z-G9#;Fg6D5_I8EtzgxwJY}>XE0h*P=cDvoSirtIuGP~w7z%V|uEbGN?WeB=!Ct{jD z|CVjPZ#^1o^G0lKET!051%Z2!Ag!PnMLpFVglKrZzV6mNOg~*`(KnSk(XP>Gju!(- zv}dB1CsaCV9zrM0GrScb6M8f#D`YvS&`I;SYI%z(lh#Ow+4R#*YCIzU!z>$uY;@jwF_;M^vjFsFp-`wL~7%>=YA)SYjc|5 zKkYgT@M_MZZg9LG12p{0Qi=b+W5p1+_4Gwdp8!{{s;lof@*C9ZlQs?No)U;3LOL*U Me|KRc;bp}C0rH0?vj6}9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ca021af2a443e0ceefb582fb94edb610de17c41e b/fuzz/corpora/bndiv/ca021af2a443e0ceefb582fb94edb610de17c41e new file mode 100644 index 0000000000000000000000000000000000000000..194680e539cc47faa499f4b0bab55dd8ef7cd3fc GIT binary patch literal 808 zcmZ3@p!?*BLjC{$U88_rU;OV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ca74ca2328f3a90826c0433d019da4ae3bfb9f34 b/fuzz/corpora/bndiv/ca74ca2328f3a90826c0433d019da4ae3bfb9f34 new file mode 100644 index 0000000000000000000000000000000000000000..99741d69ec75837bcdb3a7beee6c14fd2c35b514 GIT binary patch literal 1527 tcmaE5Fbak;Fr<#-EvRG6D4;W_hXB%SWq$RuZttrE$HO{0|o{F6JAD+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/cab8e0a4d57ab243919bcb2936eda200e8df00c3 b/fuzz/corpora/bndiv/cab8e0a4d57ab243919bcb2936eda200e8df00c3 new file mode 100644 index 0000000000000000000000000000000000000000..5b8e4b003ca69f7ecdacb5bb6fb2a612581de426 GIT binary patch literal 1115 xcmb=n`VRsOqyuvG4L`uh00|5j_(xWFGITMh!NA}MqtO_Kf#Dj%)B{*T2mlfmLpJ~b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/cc0cdfb65f817620ead2f1c904646220bc04ff4e b/fuzz/corpora/bndiv/cc0cdfb65f817620ead2f1c904646220bc04ff4e new file mode 100644 index 0000000000000000000000000000000000000000..94202b02730e651d708f57be04e4b9cc57e2e8d5 GIT binary patch literal 24514 zcmeI4OK4nG7=Zt2Yg?@$vxt=tZD%a8c53jSB&TT|a2nB-7DQaQ=)#PXVmDDC*>=X# zyQ+%8jfFykx)9qFKSsA2`dv5+>+;2zsSee;;!*4ZMtq2mr8;{&F%kH8tgIb8yE|=OjE^E$CibhsMn#7d!v}8Bx&*jU#rp zK~rP%3DA3V?a;@Rw`%@2xKEv&C^(q|`10?v&B|8`o}@LMN~Kca*7qVd+}oENO0ruf6lhQh8}^Y3?-tSzKH^y#&dnxzo+r*$}LiD-^n?7MwF`W~qgR1=^pT zgWB%eLM`#VMO0kzuqNByj8eI+X-`>HAEH^Wem-2hg^yY97 z>9Y&L+q?jX2?$cQ!8REp(rX0oyJd453P+uU2DjZ3q3K*mz6GBV-!pmmLtC0fmwLx*H4Df`f{=G?~(Fi&Mc;pD5LWxAO5h-5mB=l6k z?eqM4@#03DLy1HpX`WkG68%)`GbsN2Y8mV=(nur{N!Q7|-gTEgT}h`e6wiHBx==iq(zJnr0ktI(U{ga| zP3Id?&;d=9)Eh?0okOatMI^Bnx0TfiK zRjiJW<2Y7d`{h4O0d7I8pU2~MWtQDeC<+3Uaixy+I-xCu5F|(r(_b_sfSo|2K}cAl zqCJQ_N~)z|iOm@;Y8n;H>Ctg1CeKyac#QF}AS4orq#LmOL(zJ8mUq!-Yhn49!SnCT z4EAO=0i;C!RaG@b^DiXR=kv!|{#{9@`_if3dX>vcwOXx?Q)vF(m4Yo>pk6m+HOfDf~CE(21jF9;#en4KBo?h-N*|P2_n8FXQ3->Zt;FSK6ZV) zX*l!iPnp~sT^XZF7rCB=Hm9&fGZAe{N~_A$42&Z7HvI z@G;QhJ3Z?My6qfaJP3$GxQr!aX9-17qVDx|GwSy5Rd>VCb0(dr{Z}f8f#Y3L$t1(ZHzZ5H=EiFcAL-*~1As literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/cc317cc0f57bd873c452aa058762dc4edeae2323 b/fuzz/corpora/bndiv/cc317cc0f57bd873c452aa058762dc4edeae2323 new file mode 100644 index 0000000000000000000000000000000000000000..bb4f536aea75663512e891f529bb955d05efa086 GIT binary patch literal 390 zcmdO5WEfb$M6C4-7A!EZG&MCeGc;YWz+eF!Y%|a_F!=xeKMWXTp#s9@a}ZWSQ^3Ih E0H!h?C;$Ke literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ce4db1de190383dd8a1f29747e3693b8cbac637d b/fuzz/corpora/bndiv/ce4db1de190383dd8a1f29747e3693b8cbac637d new file mode 100644 index 0000000000000000000000000000000000000000..f0ee0e80f6f399cedb0203c3d909dc15ed1a992d GIT binary patch literal 586 fcmaFG00N9)l6)|5`YE-UHh_h6V=48>fa?bUCiVdL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ce608e403ab894d7e4cd5e6d38867adcd5f1db18 b/fuzz/corpora/bndiv/ce608e403ab894d7e4cd5e6d38867adcd5f1db18 new file mode 100644 index 0000000000000000000000000000000000000000..2ca5b83512d4c022f25d4014e80d95ad025011b2 GIT binary patch literal 363 lcmaE5FdP5_EJ8Z_p)?0RW+ZIPU-e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/cea6a7909420ee1b90dd4f6aba5fb5bc83877699 b/fuzz/corpora/bndiv/cea6a7909420ee1b90dd4f6aba5fb5bc83877699 new file mode 100644 index 0000000000000000000000000000000000000000..4ae58be4eb1b2bad2ba20cdf62c694bf09b1134c GIT binary patch literal 363 zcmZ4W|Nq2^0{`!WDFy}xhF%5+CJ;>%MRteYs@86?34TgrR;(r_O z{lE0$KW@EV001bW2F3sY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/cf9cdf36af4db03a15fed96e67c6d2fdebb1c0fa b/fuzz/corpora/bndiv/cf9cdf36af4db03a15fed96e67c6d2fdebb1c0fa new file mode 100644 index 0000000000000000000000000000000000000000..a81e30346348a03852ce4177fa2a89ccb9130c35 GIT binary patch literal 140 VcmZQ(7-%53h{;In_GK;W3;+~o1DyZ> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/d0e926b295c6707b82e75dab7d4c54420b590b0c b/fuzz/corpora/bndiv/d0e926b295c6707b82e75dab7d4c54420b590b0c new file mode 100644 index 0000000000000000000000000000000000000000..69a709d92e039e721b4e5691c011f3c569480721 GIT binary patch literal 349 zcmaE5zyJb_U=k~MWxxQ&4F5qu5llh=NcsQ&`#(a!XDI#g_wV1op(Zgh{08d-5sU>0 gt-ldW{D2NtfB=%m6_MCrfY*V4{xg8Qiybfk059R~vH$=8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/d12e0c521f2108d15789c462b060879a77e32ef3 b/fuzz/corpora/bndiv/d12e0c521f2108d15789c462b060879a77e32ef3 new file mode 100644 index 0000000000000000000000000000000000000000..fb67e21056797a75591607f93406af95cc1ded75 GIT binary patch literal 651 zcmaE500swfxLpbM#Vd$sumEc;VmJZJbvI!QtN@}Nw~J5!7YdJofkBQS&_Y)M Yb1%A4gAss24D2qfL5BpOjtBV-05u_;*8l(j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/d34ad7b5d248e34a170fe10f10fa97a97c8adec3 b/fuzz/corpora/bndiv/d34ad7b5d248e34a170fe10f10fa97a97c8adec3 new file mode 100644 index 0000000000000000000000000000000000000000..93ca5cb9e1bad71064afd59446fe57e7d7da809f GIT binary patch literal 3025 zcmeH}ziZn-6vw{^d+sHKERK^C4ul#CN0UdO(3(QJ76KVNG?2wx7i|Rb|!JM_n#utyT+iAuT&vZ4PEM2_U6*WGSW0@gB2Rs0j%g@jBk-u4fi+R#XNUpxBI* zUKs}aSY|RmawW1|E%IP#q(HJYDzd8fvs`BdOId*ypb~{Z1k*IN-|luC#OCji`b9~j zjpp9?5d`Cuev(Erp-Ci2bi~s{B$7rcLI@FvAbLix1q&7|C_=sAq!INq*NkeT5Z30J zWm(pPrUCFeN9VB9smfnf?z#+MX1|pgO~;EI<$tOJL=u?PhB9^&1C})AVRg!AzI|Dq z@<@q)r1&IYFxpSmMD_2RTcgI5pp<8{P1MtH*6a1uQP}*uRfMj+m<@M#wI!C1f-|x5D wzJI}i-;V_Vyio=|AbP0?h{$!BAM(}ri;iVNc$TE#u87Z4+Y(lyyHkDt2T5vsm;e9( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/d34d2b4e81afda80490ac4e2415289ef82aacbc8 b/fuzz/corpora/bndiv/d34d2b4e81afda80490ac4e2415289ef82aacbc8 new file mode 100644 index 0000000000000000000000000000000000000000..488e64e368e46e4ab0929e95067057cb2812a4a4 GIT binary patch literal 761 zcmcJNO$viR4255di>^IEcfwpj3O&Ri^jQEi{?@jn6!Yh;9Hf zev^pa0B191#TxGL8UZ{p@M^)f9Em>?~{|NjgI1c0KFwU(mw|J+V6u`4<_uxTLT#(*+DTTtoT!fxVHwQt%gV>t|4^|H%*maLWGlCZd58D;- zEbJco3HIvuSUmS2euYRTlSwi!nI!GhvY6j4H2)`)m-mv%%d*R8Wo?SO4{vqbmuIiq z=y!K;G`lhOFa84ia-@Ur#HV0MxuFi}I9L=Yw&5BBA3_T%{YDJ%%bh{*;!B?yobgbxwe zmIaZ&77qQ+)JB1R1EhYVj8c#t&JVpxt43<|+G$qmPEC72Mg=bIWUQ&3I7B-~2qDoY zjBb~~0=; zY5{LH8A$oDU;|BAj(2BF@Xg7+hDojMbtUxgJ) zQzbnmMJ%tL@3B||yjYsImB&+#_>Dv&kw_#Gi9{liNF)+z9Q6>Ro@S1rtnRU#`W{$8 zx&O=IBhvsrGR+76oe=lAPzi0sg$D6(U?;u4?*1^J)w9>xj#C^^@jd`HaEe>qZpzRZ zoM+KdZJ}}^oQb%lxE~HB)Ew2<3iXPM?*%O9O|G4AdDa!r{VW1oLib2Danpdq%!;MU z!pk+X4k;+JtizW% z4KX9G6LmLe!fDWUWzyxg3wCC^n&UsSU1Zxb+t7BsQLGjx$aXnMT#Q@=f^j;uA?VK& zm>3R4h<}Mme0NH|d=v$rivUC{Ck4jKdM?tmEb*WWm1Je80_=>&FD=ISq@}Pc1Agc| Y5S@juDsmuY4u91Yr+thYKVGo&7b0A4K>z>% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/d72dc02868f21b0d466349b27864e54b97a0a763 b/fuzz/corpora/bndiv/d72dc02868f21b0d466349b27864e54b97a0a763 new file mode 100644 index 0000000000000000000000000000000000000000..244f1f35333bc43453c54df4d4a2763fd3c4d0e2 GIT binary patch literal 651 zcmaF$9|CqWPzdBuz$*hVAZ+Hr0}#LfH2^}(pcsY@801W_0=%}pGSJq>stXRT!dXbb z!otMBFfq+E#Q?-iOH4~POEfi4N;XMLL{ep9g3WSvWCx*pf&>5wOELhm{Uicr64jFn M7CA&&bjB${g>460wN*+z;61_&h+&3v|VQ7mMzbTxk^pwwKflpn@29V4**gkqZ1fM zSRR1&OE@Ee-$lW&Mmr<)O1RvQi*%tg;WNvEO6DDV&Y@n{jLJU)n$p!$PY{I5q zDZ^4}n#){DENWev3AKi0<5?_jk1fnCEG)dcPzMhW#I_DqDizJ=Qj>Px(TfA`Kym0A z-z!7ax$cp(O2CJHHyuzBnMBfyIM?Gnbi3R&1hGSvEs2wTnd|=?8m`<$_NTH(FAivI zZDuOZXLp|L%is{w`*(sjc>)k);Ad=sO)^BJ=Lqh1jOx=+RMbvraQB!Ztk*8L_o%k_ zH5_H8Bil|&rKY`?N~RGX3OaQhid{OLT82J3Kr}8X))ji=ZOhlaw!Efkh~tPA^e(Dg z5=J{JB1N%eYNB&$W?Y4mc3?g-0W>u)+!jg;U~ zkr1T0j=9$Q(*>bq=RuCihzS6|EHhyl5RJbNY%vEIqpkkN;PWYlky#&Q`C2aK!4pP7P8>pKkN#bG*tCA3uGf>^YGL$=;E}QzK;baBeDx zlOv(4z<<+Jiv*Kky*ra`};Q z*6!cf%cqY(*kC1+PI2{yn3{KsL=OzpMlMNu6tNtOPl=>SKL2xgWhGHKw3N$4+1~rw~7_#L9dB#IS16ojz zQoZdS1%tk&uc|75ktg5QpG*um(MV#%!4FLFXf{!&+Rh*lP z17Z@h2yuWcCX@ZR5kNtuT*mUm1WsW2mCOHO0&o*z^)w!-Ds${|LQxQ)h^tksRtc35 zLXaRiK>yK@0JZ^*1|epOik2YqD5;f-1=eRYscBR(qesWJm_9dQ?J?TNf{;igl1{+Z zABwh>uksH1EfTi=GWhyCJBxj(4FCzT{;H~)pzANhlc%#s*!sJgO!g-ezxF8?lybRT zo}ke6cY6XhZGvj`be68abMgBXMNw7(irLj_wOS?d`UZS}?YRs{B)%YoJXJ4rKv(TR zl1Y<)q9|{ZhkR{b@-6ixA9l)Z}t`A~h}pkUPcqF(j@{WP2bW<++7kp24Z zXu{AWgaBy6D>RYd9{dg&fr7~k!|X~_N_N_{c!@qn`DqrFQGtsphi>M+boFh>sZOj5 z5(y%{A$y@CY;5v+Jvz33v|%Lm%a5tdYaMB@1LKyYH(M_M{KEGietOQS;qZpojAD;FpTVwVF)!)b=5Aqd6BXvbZP)v~maQyi30FPc@AoY^B zo#2X{$HMXp4i>mKr-ek)Da_|Qn>$r0#WEAt7Wz95Yfb06zEgeOxfVI`ZewaU#AX=p w@sF7qt>APJ8T^$gfE)o4fa3)4%LJJ5$=Ei`q?x@001k8O5*?k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/d9b608e53edcc20136615c6dcd14a8d4c2ec2122 b/fuzz/corpora/bndiv/d9b608e53edcc20136615c6dcd14a8d4c2ec2122 new file mode 100644 index 00000000..09700906 --- /dev/null +++ b/fuzz/corpora/bndiv/d9b608e53edcc20136615c6dcd14a8d4c2ec2122 @@ -0,0 +1 @@ +â‰Ï)î\ÿÿÿÿ;BA6;) \ No newline at end of file diff --git a/fuzz/corpora/bndiv/da39a3ee5e6b4b0d3255bfef95601890afd80709 b/fuzz/corpora/bndiv/da39a3ee5e6b4b0d3255bfef95601890afd80709 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/bndiv/da8bdfb2777b1c1c36354b12fa64b8356e0928a0 b/fuzz/corpora/bndiv/da8bdfb2777b1c1c36354b12fa64b8356e0928a0 new file mode 100644 index 0000000000000000000000000000000000000000..e90dc5479a26d22a13b2f5f099d9dd6484b3e808 GIT binary patch literal 2048 zcmZ4WQQ-*#0|SErh@cdZWC*fiWHt(Tg$z(+PytLCswlDG6f7|8$s|G&P0g@uLX&fYs$@7&q* z|G&eX`YTBr-F5HmWMJ@8XJ8ay5MW^eX=OnUL|X#`Yh*s{0L;};0Jn&!Vh*mFMqmTF nx$D-gTW9|De}!U()}1?d4Bmj`?-~xqnZ~+4Vc+7`%yCZmV4UACd|Bt1z_w)~^96VLg6Lag`u zJw3@vZ2f5CM7u5d{jY}Qn01$ybsN!gqfhy&NEKv9w5IYPLZmT46sgotQY?aHi44n< z+x?+aRJSk9s2tGkoEU&SwlQ1Z+S=Mv)JGTgn$0p793LMH*B+Q%+-|2_E~5x|u&gic z>ae*9;59CY&RnmD;^F-M@pikNY$Xg8;PE{Bl`*!#*a=|Fj>VoPTbiN%R=IVTv1f07 zoSsXz7J99wG0#3q_bL!+Ju;^>Ffl8A@b&=UB`=oZGTCA(g{jmR#o2qa05{VWgm~*7 zE;ziMD{b?lhhXuQ`*_Wr1l~Y!K6*6>0AJ(2TS6?m`A$yE0PI)7`Ni^be>zL3ioa=E2^0hjW* z%u-=Fo5|!g%~}gU#6WCKo>a~`GIcTVTXdZd9PHf_)lYd8ybxU{((EVBk&OJ;sb7mzudKh98bjieBoq2xF5_q@>x9~`GiZmVX<|{+GKGv5x{K}{qV>YN z3?4s|^>6=V|03gb@g#juPNp9Jes=0tk`O`&A=54)3&;Cf^h-2?Fc{%@f}iMzdh#2O z1~;SgWJ9mqp>O=kV}Moy(U{|18*_L{455XF2p&IGtjgTD`h31xt$r&2z-a*3us=s% zWE;=cb~e(?o>Jp2V-8NW5=OGc7-Rb?T+lx(ni}{Hq3@}RTvf{$Q!5`)iV z9^YsVBs{MFbzG0R@4&ztaa8)Yd?VD87K)R}Aoh*erWSNgPlBFUQB_@){sMJ7(sd(M O68;qd8Gkf70Q?7rvG1k; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/dc9cae6ee03ea4763a59282bd4e6a9b75dae65a4 b/fuzz/corpora/bndiv/dc9cae6ee03ea4763a59282bd4e6a9b75dae65a4 new file mode 100644 index 0000000000000000000000000000000000000000..5069169720e6654066453929721ed686f68cb6ee GIT binary patch literal 390 zcmZ9IF-yZx6opS}7Lm4t3O=x;psyn9gc(-dE_Usp z3yE{hwXcXSP9(+re<6MM?(T(q3``Buu5_GRoa$0kN2(2{YCEm10=bmVTQt-~Tl-;G ztaYrq=<7(O;q*~Al4aQ_+T7*KP$xQYwSKq?Qjv~`$TB|}r1lYiI<&%(NVjNd>QXnB z+R>7tPi&#uG#;z6pa`rfF!nl>La%c98L zj-9uU+YSFxe)(_v80OHNAKJh`)%1E7)fg$x$4Dd*NsI+PvVXf|yR}NP-TS6uZ!FBW zR`TbH{Js>E0|5Su^?$ht000000000000000000#b$8nrL{944>r?FhA?D=k&A7?$w zS;60|Om9yWhYERb>|a2?zjyYk`G?G9Ub0BmGBb61O!ClJQl_>P<=J$%RDs_W2cmW$ Xa{>SW000000000000000V6VOa(l{Z_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ddc7df37694e6398b37855345a6052cb0e9e7282 b/fuzz/corpora/bndiv/ddc7df37694e6398b37855345a6052cb0e9e7282 new file mode 100644 index 0000000000000000000000000000000000000000..211b185c2dc2d5ca48e91c82483d631af747d542 GIT binary patch literal 531 Ucmb>Zj|7+*M#0DfNC^N801?z2WdHyG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/de45be1170aefb3f94af6d517573befbdd87870e b/fuzz/corpora/bndiv/de45be1170aefb3f94af6d517573befbdd87870e new file mode 100644 index 0000000000000000000000000000000000000000..ebc911511b4892ad840699fcced138316ef38814 GIT binary patch literal 4096 zcmeH~ziSgw9KgRj1=A(L62eD5yF<(g{24 zPOc@|GeG8H9RN&S7i~duvs}y}u(~J`;4;-zso7N=#+byg44LIwg#iGz^U8vot#YL% z;U%&Bh7f_kZGf&=*bRs|bG_oOA%8O##azo4%H_(=jm||ECv)}8qSz*v5CEuNbto~uQRm!F{5 zSrm-C_(CvlNzcDx7=GiC&1p7IVp{E{ROWx#mElc!0BI7#5cF)ZN=m9_^Y^_?|8zJRasl3YEjEuO0iN= zsVbY2shE{dJ&LNS+`T7RjNvjN7T$$ch>}EPxHDLtb~JPHQP*s-q1M)|=G#A<@aH++>xvKO zieEm@-a+TlZfmdZPTx$Y)5p{4cAL&V-}-RoHacfM-}J@J`C~8goQ+TU+q<4P`*w%t z_j&T5cmK=o_Q8$W%ltU`gSfr*DIRH3t^cu0G@ z#{99n-d!>7bCSeAzqmrd!>7bCSeAzqmrFb9|e%mL;AbAUO(9AFMG2bcrQ0pFb9|e%mL;AbAUO(9AFMG2bcrQ0pFb9|e%mL;AbAUO(9AFMG2bcrQ0pFb9|e%mL;AbAUO(9AFMG z2bcrQ0pFb9|e%mL;A QbAUO(9AFMG2L$E#4H2CzrT_o{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/df99e4166ffa1e099b6d19ec58ccd94df6c052fb b/fuzz/corpora/bndiv/df99e4166ffa1e099b6d19ec58ccd94df6c052fb new file mode 100644 index 0000000000000000000000000000000000000000..05268a140d5fd9427abd658af52a737b744a67c4 GIT binary patch literal 2913 zcmZ4W9}O^&2QFEZ7#Y9-c}9>86c`v7Aa)uUkY=|4idHZn+ZDKgfq?=AhJxILFc}uW zR0GyjGYJY{F+mu-f@vWGpqWm#2_K-~|F8f5KcE>(5jfC*sU4pyF;!CqSW#q(A|BoN xJc9sw2qty_GRL+44IYc|gFXNMJB;cdy5WZtj7IEe!XC}oLpNiO=3i+31pqTH?G69{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/dfa49705f0f7b0028e4a7c8ee020cdd9315a65df b/fuzz/corpora/bndiv/dfa49705f0f7b0028e4a7c8ee020cdd9315a65df new file mode 100644 index 0000000000000000000000000000000000000000..7dd6a1d15f865c9b5c9604778e7c6f388a5ec092 GIT binary patch literal 6126 zcmaFG$S?{8wR6b6i@@CQ^Syf1KOS+w)40|nGc)`M!_f; z1*2dT3CwQfF01ns!=dl0n1=@*eDnUqhJ&a4`2WVh889!X67a)2Ij`*29~C# LhGvGQ1K>jd7`P*U literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/dfb7853c29356b87269cf1262b919bc1fda7cc9c b/fuzz/corpora/bndiv/dfb7853c29356b87269cf1262b919bc1fda7cc9c new file mode 100644 index 0000000000000000000000000000000000000000..87a051cf50202388f9bd3f4ba0dd629765d1f9c3 GIT binary patch literal 24503 zcmeI4O>7%Q6o8*YlvY5L970fKsMb_aVuR?v6Y% z-4ncwPQsF<{Am&+2`@_I$AG7zVo0*dqkKh?q^`7xiYZk9wzsz`jR2S<2PX^lGo3z_>F)IbnoumCCEmtTM zBTaR$pU^`A_s{3oy}gm{EQLa$NR3-RWlm9NpF#EKH|pbmVN0P<9Cz|>AD0M=8S7q0 zj9VV2a@0QTe{3N+n zJv{tzbEahl@yK*~of_m3nSiEwm4y&LGotKOk%-ANh4bqLvV6X>UcquxJc|^=i3NCgrl_>3hTYmnA)W1jC*S`i2!n6zOgRdbynrG+L{4BUCEY!n3U1e-f(r z7{m=$p%@g`Z;D-WN+iZ$m?k+T8B@e`EdCXWF8TbQ#iJvw_GUAeyHdUUQSD0gvSymu zY}V+C47kkDm9zLpBrL!bDdP`2)#1=ENGBHzK-M&fhsQnnNM4d?m_Q3UQ5tuGqhQcg zgJBpj>(+5tC!l^2E;4n|k!V0&W`A8)U|UnDr$e{qyRIw?pQ!w6nK))-a5D(=f7Ih+8u_0f3Kce5|2i;Lgr0Am*@yFbhz^ zTyBoO0HLGaXkcS)4cD;o)-V5|1~`e>+QkbkeTSV+=sE(_vDv~_i%HV z5;p%b`24%Ig){jH08PxlhGA%Q{)O4xZs`J>f1A17Tu%FKMnBLSjYeaQLg(Mp8ca?? ztF>FA^Y6~=gSxKkO@Ml-*=n^~WVUkvUS-Ez258zBgpe0Hg+A!49Z4?d@K1F8eey`C z&Fi71q2xnLC72R9A*3NM5>#XLfsdM9>uXloL-gNv23Qo?EFsTZM@I*?CLsjCTs)!) zje7{&WCUssFAS$EQ7Jj&)#4@A80E_>Dx-n`RSrFvhjOehL#_{EUQj3y@jcZG13|r> zZC{e?2LCqt(1p2q?QZiLp)$Yf@kA|&{Md^VKWa(j0{IHazVbv1)sje|P^3kdw;0A6 z^(~4aZ{9ASS{xndZs&amRDFvg67?+#PLhEh*{KmEsVglaLP{6)Es8Pw7KLIIajrQ| z46*^~&L%xUKWsZ}2G{jHbyWfe*CIdiF!KwL*<^gc|28+xn!~}A6o*nO@W;Vr{N918 zM7?=2?Lat1UmTJClX6JxOMbh(JB?4ZX&LiW z6;hWPZ8Hc#4_wYmj=6~^X~SdWkmGTWh^bnU;e^G$VA9Q z$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VA9Q$VBM>65RpK CA>Voc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/e35c23a85acbe1ee9167517e50df3127bdee1595 b/fuzz/corpora/bndiv/e35c23a85acbe1ee9167517e50df3127bdee1595 new file mode 100644 index 0000000000000000000000000000000000000000..44838401ef809fbedb7e8161c5daa4271473c7aa GIT binary patch literal 178 acmZ4eA2;9`NbvptzyJUL8!#B40Yd;>^D4gp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/e3f3c5d92a91b62650c561450dc80b68901d8d94 b/fuzz/corpora/bndiv/e3f3c5d92a91b62650c561450dc80b68901d8d94 new file mode 100644 index 0000000000000000000000000000000000000000..fc2aba7ece423f753f5a62d460878a6e981c1c9f GIT binary patch literal 4514 zcmeH~J5s|i5QaAt3>2ZHPCDXBwuEdC4JY9coM_7&f+M8h43s`V3K%AgWWAFhi&#tu z`5IZf`|qx0TZxLr0uopz#Qr5NM6;X2_z2~lC1gsqKTCd@w)`jHMzmwa0$u~izAW1Bu${|>(QT5RegLVXGVKpCl;igMmoq@@kx zlyORH#!1a+S@WhUOLouQ-t~tg`N;&pmpuma(4Ri{y4oR+2E-C1_!B}UdE)Q-sg2*~3p0E~ AOaK4? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/e4206dd9d551ce427be72b88e42cf925ac23b6f3 b/fuzz/corpora/bndiv/e4206dd9d551ce427be72b88e42cf925ac23b6f3 new file mode 100644 index 0000000000000000000000000000000000000000..db1de9571f76577f2b1f2a7273013d1ce24537e3 GIT binary patch literal 24536 zcmeI4O>7%Q6o8*YlvY594BRBI|IF+_TCGW^IAP7pmog@ib8;DC)?$R$N0IoqnT zH&hXE;ZUgvaX_R;A`q$oDTYfAK>{QsL=Gj`#X=lFYN=Xw(ah|uch@_+YkO@c?tBM( z=FNL=-ptO<&i*!W7ZDKvV3z)PSzTRS^~yZl^yE1SU#SDD*6yKk^T-8v13*S(EJEXm zog>gu+av+{x2_kanel`v_rdG5$ccoP4*@>^r|Rv?^qc@?(%8-U^)KLST^&^51HIs!|7ge z2=HS#5h)ZMGT2@AaL@#htz9D{S^Gw#C*xrU9|P_s_y|IGJI@&&AkN`FR*)S#bX||S zBOjXX@n1%F!n~#YaVJI+o|DKA0FQ^o(8(qb^A$!Xb;U(kOtAv6v9S^2QInL*e6ipK*_#K)M=9ejcSG9^gxx(p(kbF<<*TlV+1HW~Jci)3jft z#p-@EP#*c|(RPhri z{q$;e^e=cR6pDjR=8c0AVJ>0a1Bq}eq}kK$f}V`yq1zDH;|IRRP0u}P8Yk;XAs2ZE z-k$C?9~s{kgcBBDsDjslm$q`Rz?*jqp77-5TsF<6QT*Dq7?QwG^Wd+elw0fNyWDuEvrg@dw06$Zr>_w4? z$dlPK0Wq-j#coE06{V*1>K zwa0EB3!*>p1}YQ^g$bXxm$O5fFMwOVbNLMPzk8jO!aqp_8z6Yys8UR~GqIzTmFZ!{VWl58D;m)Jp< z0h;z1A>>(_NdVl}QgT73?oiTcM;%1h-z5(Q+Po528b~IvRDvmy6GCe8B0(uqAGA@i zYkk=&yPy8s&H!^Fnk#R{)+B@gm~;Cyp>Ypvv&n#px5Vj6R7y^GwRnj&PWf7k z%Ba9cl|zr{fgI>-k!5=aRw(+*+x>N~uu$)A+t($#L3Cq__g$E4S8ms@5Gre_9BjH> z7D)&>;BnNF$Op9~VyGpNLZN8U<$Z>cMt!Ja$eXvzM;8wdbhq=qAgVr85sLay1*emN z9@?oPbW&GbgoG3?>O&PH_Mr;JVZ^!SI5Nlv#5aOh|Dk#R7jOT*hxLs7l!D7c=endOqnZ4dRw{O*u&CPJ*8#9R+wH z=2llY_8S2e=dhIG{0vqAeVg6_>IArOL0){r^gc!{-)W;DuPKD!CPV{q=bdu76s?z8 IYq%=n|FeVdM*si- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/e43e57cfa4ec461d0aa0bd96319abf73b3d19887 b/fuzz/corpora/bndiv/e43e57cfa4ec461d0aa0bd96319abf73b3d19887 new file mode 100644 index 00000000..4f472979 --- /dev/null +++ b/fuzz/corpora/bndiv/e43e57cfa4ec461d0aa0bd96319abf73b3d19887 @@ -0,0 +1 @@ + ÿÿÿÿ  0          00000000  0  ÿÿ  QQQQQQQQQQQQQQQQ      ¶0000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/e52d1a9ce6e7a243221a740f4fdb2798cd66c74f b/fuzz/corpora/bndiv/e52d1a9ce6e7a243221a740f4fdb2798cd66c74f new file mode 100644 index 0000000000000000000000000000000000000000..13c9443e70474625803c39f030f0f7742d035b9a GIT binary patch literal 423 zcmdOjXJBY)X=!0V0oze{bOM;pzzH-UGK@GBG=RkwL1aish(Sn*fq}sU3{aq-fByXW Q^A`-z0m4*V7SJ640Gucq`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/e5af677d5fb32f2af26226ad7b884496c8e9d90f b/fuzz/corpora/bndiv/e5af677d5fb32f2af26226ad7b884496c8e9d90f new file mode 100644 index 0000000000000000000000000000000000000000..d6039d9d9a36cef08e84b8590c6b9f76cae5fb6b GIT binary patch literal 24520 zcmeI4O>7%Q6o8*YlvY3#A3{)NsCKEK#1QGl$?zjfI6-iNUJwTk9I$aJdI=nov#lz7 z<3PlPL!~0b0g)bwK&S$w7%n{o36PKwIg}6!3vmFcrE1wlGqbbaUGMCVy|!a_zJopU z=Djy>W@l$-e_ObZhzI~MPk;QZudlEBWj=2C@|;Yd)P-GZ_t3a`xEfnJY~s!@H%aZBH`ylfY1M_d%S${O(42uv$wam$Gx9LY^foaHeC+6 zJKi|>hIY&74i%S{f1EJlS}VqflD8?EH_HedD`Ut#0c{^Fr$3q~&hP+n0S~c;?AT!#M%*2F zWV$DK8J&bhTlwQ8MiQQv$d3U}M8%L~lSlcAB1v6o5fxLa0Bmh-MR?RCya94=uHuoVrRX!>(GyBnBPqzEbi@OE=}=v$13VsRe|OSq(Z#G3Ja>-vi?m#! zP>eLy-F`w31>8TMUw3y$y0b=`?|h7QYZQvHf?W*OQBF4ck*u@ zmk5g)``$;4TOh5TZWHumoDSWFz#cmYG;aCsMbkK0PYSunyYTmPuld*nwji3Q_#zej z4*YbK`vv~ISMa1SFXyUdt-M(KQ?3v}h<&ea`xaO%u8QI6K+i6}-{&}2^5&hC;4zU9 zEOH%pt(NncpiuJjAjf6I1OVWcx$q2#pofCO@t6ZF(^h{SZZcSkq1D}p2Y}FI-u#{3 zEuo=xlH}U;@aT-2Gc7BKN2cBD)F6+@1T@X7EQI)(5oIrnL`Z?IWa^?L(S*9p{<^Hdv8GT@2VTv$Jy{k$Qv*12AS!lX z0$chQlb&+QDAs+REC<_ef>I1oFimslWN-1TX_|AEY34Q&H)n7H03X))SVPmq?d>ce z>R3X^0+dkKXXy(O1{#e9Hda@06&r8-{2yw7lZee7ywEhZ+3AE~AV3|Dn%Ha-Dj|d* zL9#-BXh;BaK%+s(xT2yZh&)PaWnzu>8BJOiRV>=kaV@6LO;~%J_OT%P18<;0p-?!m z35a4%^J%_=S&xKGzzjYCZ*JmDegZ%f6R>HT8l8Y4tM8O9unG7`*JpL@*BN8qXfzs) zRSKPePirta3C-qCiB7=V+4~K{FpdD~rK4uE*(BNa5qO0ibQz#&pAkZyYZrDvr|n2| z-Q}Mc#=GR9P@7jnOGC+rmP)WBazaQ$UL>f->VpnyPOY!lWe?DQ#~ENzWOIZ(Yabq6 zIGThI0BhlpCN%CLY?BeFxx6sku0*Bej9-hF*khEhv#5*;0#rHlXdcS3z7DzO?7Rv^ ze|e|B?iDubeQoEOWH*RzZ1cVcYvbCTqicl9+A7BzwIu4qS)6pDmP8(quYjCOPqa`i zi4+P&T6B4jVXRRfrx^0)?eek3(Sh!E{+B}4$0;IFAE)3X8R(In8bOk}(jp?HbWtCt z7_*O4C`J+Yn&ZSE8<6g7(i8Mcx5H*|UEfnzC17wZ>O>x9ejYL#jQ9B8#)egMIhc~- zQc4B>Jh+VC+EA6KS1;x|3G{q6P#VT<`5{zorsaQxTE5f9L0(e?;Z2AK#yy6xmhg>%_&@X<>A(O0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/e626352eb794ac3d4c609ea2b34d9b2d2035f591 b/fuzz/corpora/bndiv/e626352eb794ac3d4c609ea2b34d9b2d2035f591 new file mode 100644 index 0000000000000000000000000000000000000000..a8ca2ae0250ef6305b4c89837eec3e6a694b433a GIT binary patch literal 2921 zcmeH{F-yZh6vtmwT&$2GlS8=B3U=vGPzr^%;L^_^8BS1Fhen4(l6I)BX7>~H19Y?> zz%SquPzb?61g#)e{Is|Gjtb{nL9UJ}g+U;8$=zN3tsT2@w-o z+5m2fR@n?Z&+}@OQvE;es_5G-1c z1)>Z!M08H}7&~OlCcaWOcL0tDZ6|>DJgHl|t1IwU*R%oj*DPz>3=I8S-ZMf!DJhvb zC#p3L5P;3>aL}41CZ!%CGExCRbcn;x_x4jKlvAU$C7LLeqx zVDeku7|0v-SKb(?m$d6qzi3%a-Wc8g@Wnt?4VCbr@(Evrx(}4yD5+Kz)EFp+t1_F?3`lxzTKz$vFxbLl&^c(Z1<(j` i4?eHrlLG-#Yz_3&P&Vf63?$qD8!@_U}#AZCj00o~HG&VCZFc`r2ATY`qNnrp1qj5eg I;v6kD0YzvY3IG5A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ea0c28db1748de26874f52ec1478ad4ef885ebae b/fuzz/corpora/bndiv/ea0c28db1748de26874f52ec1478ad4ef885ebae new file mode 100644 index 0000000000000000000000000000000000000000..074acd6e8f3043a2885506bb37f1e83b0dbe2dd5 GIT binary patch literal 435 zcmaE5Kq6qEANU3bd-v{*K6?GtD@Lg0a0#pctjO^H|Nl6>CV*201kT}=g#r470~!DT D(Lzgl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ea150682f7f722e8e1a3ab38f56d17f9749ed8ea b/fuzz/corpora/bndiv/ea150682f7f722e8e1a3ab38f56d17f9749ed8ea new file mode 100644 index 0000000000000000000000000000000000000000..596f43859a5fb366a3cffd9e25b1ed8dbb4dc147 GIT binary patch literal 137 zcmdN0ReAX#NQxnl|u9%SnXZ7-;y?9xu}p@EVU2@ z>#h9*D|^X#LK?08s$t&ncredI?UhKt7M4PW3D-P&Hu1!(kLH>|c4&5-zc8hPn$22@ zypXr=&aN_uTAK){1sNP`=4-%Du;p9|XJPs~F{QH_QJbi}S0DpyRaO055XM{+6Cl+% z?d|`@!*3W;32oQ@P{}IlJ9V?Kr8tnXEWszfk&h{zvwof5U)uZ}QTvfUmcvGXi>?)K pA_=10lY-+VQv&2_0h|qQf-L(&vf7NY+}J0K0@tZ_p6XEPw#Wx=lL( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/ef5618c93b7c2a3d938e9a31862ca9fa740443cd b/fuzz/corpora/bndiv/ef5618c93b7c2a3d938e9a31862ca9fa740443cd new file mode 100644 index 0000000000000000000000000000000000000000..3dce26d3f7dc1619a37120b6452885fee5f3ae97 GIT binary patch literal 1024 zcmaFGz`(%BKpDWL|CO<+p@EU1nTZ*QVGXlH>xIHAJfKegPK+)ddEB4?r&I{h0Om*n z0AwBm1H)&KG93^wG_usuG0@TJv1DsuV_-6D^Udv85rI)psU}Css=xJgVxCaaR7-P=)bUN)cnlp^> z?q;BcSeQbvVp}ybA#1Vzqc6IGxCtQ#M~8B$Od$#-EK8P!$3AR?F3>0bj09!;Q-b1d@d~9hwtE8Z6BCH=vBy~XQZ_ER1V<2n#&9Baz*8WkT4tKE z;Y{q+!GjsA7I%TcIJui@eurOv7!JGbV8>kPJ|^y3Ft$Y(7+u*<4#1d*lZSszO-+p_ z`8B+{BBp_q?~f~D*$1W9_DJvv$&uuXs5Fic>6qi^S`C@pHkyR|qzpHM;->|em5}8g sDeeo_l5N=SyMim^dPTjDV1fK6V!D)QmVi}uE`>==0|JIdmO45HIyya;Y%OdI3@N$|1`NC}S_~8*03Lz5U;yV*2>yTn4*~`l3B(ZD jU4-rpWa!dJjneXj= z)h0ncp7~{bX74TMy7FMKIKYepOkS^4DwVXB8Xz&P%2?DQgbu=GCGqjgJ>ZOI4+$T2Q5?R&Z*7Gt-`MRLVu|>`YFX&dug$`A4BC zldNRT2Q5Kw$UgGUEO!)L4NNo0E^vPUesZ-eCpSHp%_`aK!?~f=A>g)56vV7mC27;z zld_=I>;qHHF{YG1ckFfN81BF0$2YB7Tj}L*{#F5lZtGi7G9CIm0pK-b3skR{w-#l( zzD~9QE2Ev(;;^5i1oFfMIU`vaO|mGZv_2R`1hPf1$-2HT+096nmY^lBn%DAldyKxJ zKN5^F{oT3q4=CL^byJQ@pORvO3#FIs5V5oqgy4x+_rM7pjOSjpyWS2?s+uqiqctRe zF#!BD7p2`PZ|O1>b=}z56r~+?7n6>?po|fMlJVFmQ~?YGTn29VR2KDmc>#^_qR&$H zRNAv=PbPN7U)c!w75sD}GDt=kLE7yKg%h5Rurz`RYqrl}9sKL|-Dy`LahnM||1!RO g_m%dCQh$c|PdH$jrg_VTf10LuVVd@_q2O-)sYXjW4*0LdsC1TioeH2nYnzdqWquulF?jIO%Y3(}+Ll}VkV on_J19J6q)M+}V!~9-s@L14q~THwF#{y3EK<#{mj(h*J{)0ADyfVgLXD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f1984db83f720c69adc8fc3d7bbcd2c942011d94 b/fuzz/corpora/bndiv/f1984db83f720c69adc8fc3d7bbcd2c942011d94 new file mode 100644 index 0000000000000000000000000000000000000000..5d22ab790dd1d478462d8752ce6c1ef92685075a GIT binary patch literal 409 zcmZvYze~eF9L3*t(BdGcq-a6v_o_>kI%LgIC{BvILqG^YaC6Aw)DjH1#;Fvvn;k1H!5^|| z9Oo;SNs?YkB;lx)>edcofjAe(@yTHv1NW1xh*FvYzpqX_2KrpYXv+C`h}IGd(h|TPSRoK`9^ZKiTYUw0aA$9Hq1IMpE=TH+zctKH7{r*xaQ z(tI+;9qz{Tn5RsQu?b6OR-^C)c7axUl4#6)P{hOVU4+Za*G~=>HENH6vkc|@M4I{- z0V+dO;OkTwVIt=7lr++~$VQsOT#jP(TMytu|4O@6fk!F1lE!&>!3vXHEk1Un{UlU} zUjm<%m4^`=W{Xic562Ft#%`UB2Jg@2r=~fbf^=l>=9SGo%e{LnM39QjFCuI~bvieb zyrwWRlYV1;GLm>(OV^82ycm`A>5$JdddW-~5c~QD_^_i=8u+%1xK}O0YxI3G1b2YZ z`a`(?4zRkDyC0_uFc!(}c*Dt8uj2JL*?|@IzcD$Nr&#M6m(r2ng}z)({>-P>A$>ip zm!)&D{0(BUJG@uDpu7E|GA*#a+_CNp@mBav4!>|EjOu+{RlV9L~=AlLr OP^U;Y5#SxV8YTcO8(N6~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f2c2ab784cd082a7a4527016336af65e28d4915c b/fuzz/corpora/bndiv/f2c2ab784cd082a7a4527016336af65e28d4915c new file mode 100644 index 00000000..a89942ce --- /dev/null +++ b/fuzz/corpora/bndiv/f2c2ab784cd082a7a4527016336af65e28d4915c @@ -0,0 +1 @@ +âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/f2f3539e68c7f8ff0dfed95b1d13dcf679a2ded3 b/fuzz/corpora/bndiv/f2f3539e68c7f8ff0dfed95b1d13dcf679a2ded3 new file mode 100644 index 0000000000000000000000000000000000000000..bea15986e7377e77794718794dd44a8f05e201f5 GIT binary patch literal 43 ocmXR~@ZVy=O$G)AErs9z|NmbA0%sT)7#1v8zyJmyaWLaQ0J3ip6aWAK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f2f833389f3ef31aaebfac0a40407477e44182ef b/fuzz/corpora/bndiv/f2f833389f3ef31aaebfac0a40407477e44182ef new file mode 100644 index 0000000000000000000000000000000000000000..8d12289a9da2fee0e7410b6145a89c76efe3fa07 GIT binary patch literal 735 zcmaE500CAE3=FLQkpKgOH3JAh<butXv;Y7A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f4373ca8c61f981d4fb9cdec220773589693afe3 b/fuzz/corpora/bndiv/f4373ca8c61f981d4fb9cdec220773589693afe3 new file mode 100644 index 0000000000000000000000000000000000000000..65a1d959b335a1e6abbdb7c8b2455fa9d44a173c GIT binary patch literal 203 zcmc~g1qTN}ECmJzhO=-X5RlyAn51~+xHxa=1qm0yKnygFS&z3Kv5=5 zQj^18-da=9!&-8OanjwJw(>7gfi+m$UXZ4nH$j?U>Oh+Q*Ebj^DZzm_oTa367p8AE lh{0g(s;Fr#qNvFsCoiJu;F7DDVy$S+UH||8e?@z1MF3~kV<`Xt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f4636445dc7450f2422b4a3255c335e809329772 b/fuzz/corpora/bndiv/f4636445dc7450f2422b4a3255c335e809329772 new file mode 100644 index 00000000..ccd1a627 --- /dev/null +++ b/fuzz/corpora/bndiv/f4636445dc7450f2422b4a3255c335e809329772 @@ -0,0 +1,2 @@ +ª%0™00€00\-'*è%€fÜ0¸“0 %0- 0;ìé%ãú0@0%0è0ú00\0'7è0~%0P-5(0#000€U<50½Ü'~!0—000 0'`00=;00000\-00è'00000 I 000ú0\'*00 0ÿ00000000000000000Ü0ù0'000%000~!00#000000~00000000000000ç0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000%ÜÜù0-' ™00€è%CCC00CCC0C';û0000~!0“#0000 0~ÉÜ000000000000C0C0€000000000è0ó(0è0000000000000000Üù00-'*!!!!! ú +è0~0~0000%ã0000^0P™-0 0!00! 000û00000000000000000~ 0 0000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/f48bb6d76bb808b40a1cc649971fa7f4e3c5505a b/fuzz/corpora/bndiv/f48bb6d76bb808b40a1cc649971fa7f4e3c5505a new file mode 100644 index 0000000000000000000000000000000000000000..01fdc0e1545262667777662e9f5ed9c70196a194 GIT binary patch literal 1505 zcmdO50D(RK|2w$WzX7w!0i*gycK8tn)JY*Ad&oJWw2&oU_p_^ M4%9)yOxWcZ047o6%rf4_}+V8ZxsO!2?xcd^@oz%`~Cm@zjy_KvZCJ+%Xvy#a={i9Jj zMG221j`J)#w9DFEin6gA>v5adt!Qs*f7i52x<0EZZ=X;f`uP+zn3^Ahq{s ziZwi0*ECJLJv;<4ZO6|wT`v^ii$yT#MC(p&hN#?4CyePe_V=2>5=pml{P=2s?Q#LYjnV=vODak0u<2wbnTq2Q3B>lp2zcfT587TgGoik94 zmPjNLi9{liNF)-8L?V$$Boc{4B9TZW5{X12kw|)iTCG-N8)MJI`h9}p1R{@>9UWy2 zD2@`0wu@-96feYKd27ZO&?^<7ubSUM6;%O+a2cz_5N*z|AVHCMmUcY3de)xQ6P}lJ z1+lKMLK2o@Q@+(SWedpZ292u?m#<$JrdVPF_ZnhY z5sDSfaH+V?)$t<+2r=hjXmKRN&{AE~L@XMUle!D4s;UCOEX9Z^$>i6nsxD6&lMdRa zCWbW~*{3ECjOnWpUK1dy>xD*F2cq5b5A{IRH4wJ`IB5!7SP;6r(GhC3DhnajCYQ}P z_XQFZ%%nzamqCx{`XhgC%u%a-+JcgKogTz@#weDp>a&tUCungjrqJ&0bxtR_|Lm2;aTB`jS=fSstt~knaRSAWx&K!n&y_#{cc zpbZSMq#udob37of8ucqi!jh`0KT~O^sOtAgQis_o?a2dxd8(0J_afWgzj^Z}TE`if z-!0gctjq7-AePHK#hKk@$Z-|bHM{eTtKG-Ab3DgDzNXUvSExt)gf82yj_Tw~92QB& zpwlG#)wvzIpf_c#?K8t}&Rx3bjxtd6bY6rls;{v=X&(eHT0MuMpI-j2%PlokRalz6 zoKs-82zCdHI;%kU85V}8559P??lIw^VR{cYK_HvZ&7JQ|HybByBRo!^aei`nq!{#D zihq*zNksOlCDbs5$@=(00yS+(%z(zLmaw3i?^;5QKd-5$7ZUFjMm3R@SinTlF5`kj z+IswZrY%@Q-(}lj6fa*wdifF-bGHB>GkUBe z$QigPat7`Q-8%#K*r{s})aw16xy}#-HHX-=%maVfIGbvd*#y#6R_7ZGU-aVHFV9!O zVDwR9>s#6xtOqS0i;m{HSc*ab+Y)gz}?2q=wza7ei$deeT z7!oV4QyeMa*^udCvf(XgzDX!vvfdb{Mk1vPa!%OQV9)QW?o(B7yOfYxFbr zaezee<0+)SPsS3DQ4}KXgo%2&@M3Wh1{o> zb1)3>a#<-;W6EV5f4wpSh~*eydA3|GS1Kb=CY?_uE*$=HsRSh~l}e>klpR=mje+dK zK=-=-pw&5HPuqII`K7@TVO%tZEqq?+lXMB$F0n&0keCBZYwXwQVelxw9%C;{1Bjgs zqp^c{7#k_pz0I(xx6^gDNxSCte|gbDz7I29A4;b)ndvlUre-Fy)6xFbhoz6-@bHjv3SOLVQIJa_YK&NhgsP=fZ55zB2JQ4 zEG#YI7$SN;ICmD@#cocJ2@G|JMGv*G^^`9f1lWg;&uN_q^Cnw;TL!Jl(Lhc{%D5(Bks*b?`Vcc zot|dfB5gs&2Pk`1Ws9^0JxwDv%M&!+{~#iVFiwl^=%&*{SQFf41f_q@I7ZM@LgsfO z{ozFV!^z7+hN&fqafQkjt+@NbXiOSs$PI>aLyHf96y5 rZ2&C8*!Ep4!(JFJJh`SG9RtuuV`F1CZrr$Wo>pj>!06cUVLSf^e>B&a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f5870e0b97ed68cecffd4e7ca6c5275eedac1556 b/fuzz/corpora/bndiv/f5870e0b97ed68cecffd4e7ca6c5275eedac1556 new file mode 100644 index 0000000000000000000000000000000000000000..7dd2c52581d86f26039eb57fc3956b4ca7ad9dc1 GIT binary patch literal 268 TcmcC!WMlvXC^Z5B%;$^%LGl1W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f6b9ed043c7483c0463db2262971b325eb3abf41 b/fuzz/corpora/bndiv/f6b9ed043c7483c0463db2262971b325eb3abf41 new file mode 100644 index 0000000000000000000000000000000000000000..ad60b561ae2e34b1b1e6924176d0e9ab6ab41639 GIT binary patch literal 316 zcmdO5WS|2e$&v*N78qEXni`rJnl4yiumBFW8E6_9{Kq5p{yz*DWWhi?gh2y8axee@ D$H*#V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f730abe1cd787bcc72051239b192527a7fb629ca b/fuzz/corpora/bndiv/f730abe1cd787bcc72051239b192527a7fb629ca new file mode 100644 index 0000000000000000000000000000000000000000..44f74be7cb972f4a16a70b8f801cce850329dde0 GIT binary patch literal 2995 zcmeH{I}XAy42I3b!p_QsgkT5~8w(37SAuh)N(>wT&QUS52H9;Y$8GASp&bz4P{oe@ z+j%v=Kmtk0-=S{{3oPH5oLe6ZoZ!c~oz0+mMylPJ#ueyj{iy*`KvJ8R4r%+2jj+RH z)*g=MS2#eSB|lYmu*N!(x$9bCj4{tg0gj248&oW-QOUN5;Z-fY3d99T<^?Q?900(5 z4DUkF>x{xn2iW1NZ&3;Zvv1XZcLTshlA7G~XikDsptaRHd34=B#+bFX3-z52qiJb` jm46og%b1S2O6@F04*>TSUzRD+0F!)af+Ps)4%sl)oO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f7451ee72e3dd7186dc8bf31e94d04ef63fe0cb7 b/fuzz/corpora/bndiv/f7451ee72e3dd7186dc8bf31e94d04ef63fe0cb7 new file mode 100644 index 0000000000000000000000000000000000000000..4af01b9a017bdcf0b3fb89eb4f94526e3660d803 GIT binary patch literal 2871 zcmaE5FbYNiwZT+!0d|MH!Y)iK_zwoesvZS{8(0i(=Zykt0|q#NnG6>g>Hy}UQGf{) y85lw+0?@>PY4Ru_6(I5%OeaEQAOIt=mcpD%2>k#5AK6T>awy55(13260RsRb%JLfk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f79a87b224fdb402ef5967ead4b06513b038d477 b/fuzz/corpora/bndiv/f79a87b224fdb402ef5967ead4b06513b038d477 new file mode 100644 index 0000000000000000000000000000000000000000..a003a0efcf705ac79d4a5790c875062462a8bc6e GIT binary patch literal 665 mcmaF$YJ`F>1|$Fm1_lNalw*Qtm_i6J2x0)_L23iayafQ9s;=Gu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f7b5012dc86567713748abaa61e96019ecf5cfa6 b/fuzz/corpora/bndiv/f7b5012dc86567713748abaa61e96019ecf5cfa6 new file mode 100644 index 0000000000000000000000000000000000000000..6371c5cdc2fbd24ee8a5dd4997c502f8d237f229 GIT binary patch literal 1446 zcmZ4WQGtOBp!y#K$k0d%u)?d@0|fA@7)D?q4b|Ns9xReZMUqrwvg2Bb)YnobqN zhXeqnAb$pszhQnSAK>z^B`QExX2sy)kdTm2mtdEWkRZq4z+j>9U$f+miUQ+jk^ley z*Ox|BRi#!{)hRq-G>S1}V94L!Q2&hKr?P^5i8C7u!*_cTk^KzYxJyb*V~~v<1#|-c Z84~LC7#SECkYf=CU}5-!3*gX!3;+UWowxu1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f8b8b36d7b5470fe30dbe9361d301c42d8e9f23e b/fuzz/corpora/bndiv/f8b8b36d7b5470fe30dbe9361d301c42d8e9f23e new file mode 100644 index 0000000000000000000000000000000000000000..ec065b4c491ecdea0127c699f96f6bf368ca8a58 GIT binary patch literal 3 KcmY#rU;qFCV*sH5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f93336126ac3cb6578506b0efa95b8c0a56b5f65 b/fuzz/corpora/bndiv/f93336126ac3cb6578506b0efa95b8c0a56b5f65 new file mode 100644 index 0000000000000000000000000000000000000000..4b6d8715e18ca13aa7e094edcf13280a21010aaf GIT binary patch literal 1537 zcmaE5FbYNixnL@}0B)f@7{Iw$!Bq@kU|{f{mH^WkJuePysQhSXf+;g#0672#%n=Nu HU}ysXgEmK1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f946222bdd5a8d0ae53c1459636079cc64c6b50a b/fuzz/corpora/bndiv/f946222bdd5a8d0ae53c1459636079cc64c6b50a new file mode 100644 index 0000000000000000000000000000000000000000..48d7ae79f17a45819795ef24279195ff481bbb12 GIT binary patch literal 27 UcmZ4e`#%IQGe7{hGF0Fp0P3X>s{jB1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/f9af94f86a0123324d93b78a9090084ae4b9b012 b/fuzz/corpora/bndiv/f9af94f86a0123324d93b78a9090084ae4b9b012 new file mode 100644 index 0000000000000000000000000000000000000000..d43293ed6082bfbfa6be0dd7d77350f77d426720 GIT binary patch literal 611 hcmaE500s<$06<(qGhj+Hli|P`&Y}t!1aU$Q001J`HA?^h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/fa822f723402426ef2fb43a444cb032ff01f8f2f b/fuzz/corpora/bndiv/fa822f723402426ef2fb43a444cb032ff01f8f2f new file mode 100644 index 00000000..701cae06 --- /dev/null +++ b/fuzz/corpora/bndiv/fa822f723402426ef2fb43a444cb032ff01f8f2f @@ -0,0 +1 @@ +bbbbbbbbbbbbbbbbb00 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/fbb26198f557c82c3a12301b945057f078da74e3 b/fuzz/corpora/bndiv/fbb26198f557c82c3a12301b945057f078da74e3 new file mode 100644 index 00000000..06a89a69 --- /dev/null +++ b/fuzz/corpora/bndiv/fbb26198f557c82c3a12301b945057f078da74e3 @@ -0,0 +1 @@ +ê00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000ññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññ000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000!00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/fuzz/corpora/bndiv/fbbbd643f669136b0a9bbfc32dc266f9f6cec2d8 b/fuzz/corpora/bndiv/fbbbd643f669136b0a9bbfc32dc266f9f6cec2d8 new file mode 100644 index 0000000000000000000000000000000000000000..6fb745f142ba276dcdd4cfa901f748363b135ebe GIT binary patch literal 363 bcmaE5FsQ(S1q(nJMBxVo_@!wG7{~4;C6!q>QbkQ zn+}DV?&47B5O6rBrZ}Y19K`7C@{^bIqRj{1^!W1o{?T9X4>#)WzX$zTd%HqmV|euJ z0h{p;r{881pxByFzeBtP>!;u81ad5sjN@W!k|c?~5t}8U7%MZz9Clu=j1K03(4HrS z;{_G~{V?fT01LN~03-Oo8&rVimu0Sjtb>Hh(LEd$0UaR!Kt>`qZ>s%y5HV`p^G zHZ=XPzSnc3dL!Cv^m+i=_pta`1!$WASL(d8*JfmwFq@lw(AS*jLtYiA^JtB443C5k P0r#B*4oTOZnw|duMe+Et9(;fgpCq|}CWev&F2Vshx<>&r zU`OJ}BC$sS(IA~@m4grrX~z!^@JezIDGuQwMe!&Y1*2dTi~`yMM%o%bk^wpWp;3Sp z$Y{O5Dn8f&%V2llC>RB!U=$1%@P%ZDAcmn$Ow7zpObpD8%?&I~O%2TqO-VM4asU9O CIu?2W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/bndiv/fefbc63f3e4aa05f755ed0f0fec119b6fd828650 b/fuzz/corpora/bndiv/fefbc63f3e4aa05f755ed0f0fec119b6fd828650 new file mode 100644 index 00000000..c7843404 --- /dev/null +++ b/fuzz/corpora/bndiv/fefbc63f3e4aa05f755ed0f0fec119b6fd828650 @@ -0,0 +1 @@ +­@@ \ No newline at end of file diff --git a/fuzz/corpora/bndiv/ff05c6b2a87c7730ed0b4a71cd9f92ec22e9ada7 b/fuzz/corpora/bndiv/ff05c6b2a87c7730ed0b4a71cd9f92ec22e9ada7 new file mode 100644 index 0000000000000000000000000000000000000000..2fb79e4da8ee4732e326e6c07bf53b21740142ee GIT binary patch literal 1473 zcmdPW)MOY1)B;Q(gZ@(nenYh5G6t7Z6`&F@1ss&Qf_Q-9pg4xn&QinN5@{?h~bosz44ukia7i3113^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZT3=EwA85tNEK!BTpaT^2UW(LL$ z22G4>44N247cet1GBGhS8St`kYPET^edlFlz{Y=EP3DYE${aF(CvIdt!D(QRvLLLEm5iwfB9lk_2<5@qF-;m z&(mzash;+GTav5NhoW_Seqf(5Fen_l+kdV0ahsmIpqQN5>}h*fL<+wC^6Z@StE9*R zwK?SsUN#%-=UC{(S28g#Vqjb>Wgua|$;KQiE6l=Vz+k`)V)C=FFf*|(fH-|eIW#bs z8yguqem0n#y7EzaU*iIql!%tyHb&NKBTk+*`JOBHZbFJ^$5xlZyHl@Oi~DJrOp94y zy2*UgxodW%`cGbdV_v*7=8?PWFZu5&?-COQ7j>qpCjD3KRXM2}5M;&Y%QBD6exdid z!XlN==T(#Dvx?8V^73HS8u7wiErli3=S|kHnmgsj`aV7e1_lvkW(Gz^F=l244iTN= J41M=A8v)$A!)*Wn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0055d7bbd9e05736160f8c99d7774318bfc74811 b/fuzz/corpora/client/0055d7bbd9e05736160f8c99d7774318bfc74811 new file mode 100644 index 0000000000000000000000000000000000000000..116990226eacad6021f9fb5fe26bacfbb9fbffaa GIT binary patch literal 3784 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07(SeDR;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0*sdg3pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$~ z94-G@zfK=4%+qMqSfDPKDzlFLYIMG?^IPo+8++EP&hnyLt?R*oDXYvP zVIbCkp`a9`fCr>sn1$7VnUV27vWHng9&Ti?eo>J-^_p$gcVS5#=|dgslvaP~HTqgp zn0{XOqRgSg?T=or>Wq0}vf5+fA^WN8wB6^aR%H9n5?E67_xyJzo()_aOQIe8Cdujz-f-5lZAny6`UsPbs4)?EPOJt`!UNemlSroF8e6b8)mEY{&QJf)`?9&qZg|mkuu$=@zOz4XGg5e zgSeLmzn|auNKhr{zs1iQ*}MNv70qj3ktFhC24lJItNvMLmr5Jk%Wt^+ci>p1@F|E_u_|4T~hJaPZdRy)V| zI*0FV;bu-@U=YV!j~RgKF#{;TQ;!)y>#=j^|Nj(U@38zrR(U7;qdARCs34R@3@#u9 zXORU$S;YR+1;AZLp@W$iVeJSE0BH*_USnXqEY9#Tg^8K*E;j??O@<3!RtK@D7O6x- z8XfM_wx=3$7>Gk!2GFQuX4K$jU}Tms$YU@_-T&HvlZ{=g&EuSHgLMM~td(I9YR~|& z6y^p71_nk9XD}&3giPVU9L}O6Q001?I;Y2`X;Sj<`_KN#Nu>TdkhD+Y{flPj3zNU* zy|8Z!PQ5tCv?Otc>9hknvUj(}?df_6P4#T+Zp$N5{iR+1kJmH#|58%td04VxR*21# zKMpCs{s||&2)&l0w{o$Oa8No#tTAoHr{`AV$qj?$+z?z-GfY>|@05!j3rT_o{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/00564ec9294372aa1c602775dc653f11c23c0623 b/fuzz/corpora/client/00564ec9294372aa1c602775dc653f11c23c0623 new file mode 100644 index 0000000000000000000000000000000000000000..9d2ed9e9dea8be322fbee59de829ec35d862c087 GIT binary patch literal 903 zcmZ8gdq`7p82x_tckf+$Z)#hwEtwS6LVhzhAIr)ll`>h>YDz|#WnpS&&dQ#n#9nGq z%d||%8s=~sg_UI(g^Q>}dMQ01duU=)aXk1B9)O%ffB=F3Kmhp*R8Wd0vIbzBA z=0|Z4n(n2&HzN2>Z+pVm*@4eaedrrV^_lq)kZgO>*VrA? zIwR@Ab$7fYB5124tU)wYn=~c&CYMeZ~VJ8vb|qp-^P|$O}Aaz(uv#J9=GPV zduzS-*C*erAkpclWtQv)W9hRleVx+U(|m5=q4!PNp6BE0q$j5R3x));XbK}h=S?JW zxNVgbA&#ao#Z(c07MoR5Xb};xW3(({7#>DMd^a@3~7B84y7cA$*b>>EgC5f5xLmk!Rq$6hja9!KrE!O9RaGQH$Ggp=diP(mC z(`P|#ea}$K1?!3DX`1jdWlf|b>72@#S2|&zXS`S2!6h2tBEY0Ts2crXBlsT-ULm*u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/006cd3ea13572155d1e2885ee9236ca569ed0d04 b/fuzz/corpora/client/006cd3ea13572155d1e2885ee9236ca569ed0d04 new file mode 100644 index 0000000000000000000000000000000000000000..501963d059926823871864376fbe7b68fbdb58be GIT binary patch literal 6599 zcmeHM3s6(X8s2kG5=aOjCIl1+;h}&CEFrW7MWATG78HvJ0tF$YJd}qJlvD)?4-rA6 zig*F7EmTDi1m!729#W}VQGE1LA1I>;whE|R8xiA<}RdLlG1ugOQVt9)+`Vs8F6nUXbLFG$@ZCL?VF8 zOywY%gt-z(G}PABlm?aXhAfrh5*ETUa^d^(d8S%W6TeBJsxA-Z@*+Zce3n~~e?SmF zlI6@7upIgRkf|bX%7GlV85^2I4)jowH~kQD*lbDjt*7BnKTX^>lb;_U0xT{Kz_^`g zTpTbkY&pVy;3sx^e&xj4UCWNv_1m8%yKm91GcV4Xm$dKj_WIMBn=%4EF}*UYyHcAO zu9Feb(i0-EOdQ;)%@v3#}=-2-ZO6Qf|c3B7aKN)>L=vB zQC6g&$*UY*Bie8@>X*clvCY)bA*e#e_USuN@$obQ5n>1;p1fcpzTh~ps5?3&^QKks zAZ^YxKQu3T{mSfF`4RtZ z9Ym=oDYE$lvPMUJFi*j`p z6XO#b!9mo9WFApG_kDJi(KLBB12m?$) zy<|cXc>#t==!NBkry3RrF1Lz@6iaN5UJ2g3Q>!yKuERiV8OLqXuxJPMhHugfL+;1{ zq#YnP0dfrrkya=~Hc2KDOIQgYnIy9y$>FjU0eM%LXR64*Q@%YBXgMxcewy&=6#hy^PVGP?VE|02^JBX&dV31$BQS3rPM@>vYu<HnqNKf9)Iug z_jlqizOk9BdrhO+bbh?y^%s|gf`pYmYjk52i@bE7WSHCRn{{2Jy?}f7V?(3raTybL z6vpLG5;8+M--rE_d}H0l$~M;0VXG_!Wx_KUg%ewc5DGVJpSHud%k%B0%>}LmS=w|0 zlcqX>lh*{MkPONzw5vS`-)qe*kK~8|!;g?9KgO5LMk^SZ7i6~WK?d!*E}Ri)9v(GP z6?yvm-RN^_Rw5X0KIML}D8eGz`TRnIl;|ZUf;OVl$cbcO+5B*wuyT>Zb-ib!O-?mu zeYO=^`fPit=-|FOffhZQxOdADohL`;QJ(N}Qx^-r=8mY&LGG*ahU@)As=eLuc31We zgmzmex$v&$n)7`RnD4J&sBx#O_YC{>L_|`|wmw($h_Xmv)qU7_#;+j}= zWt+Ah^*;Y(_Ugs?qc;A-uV{YVt{p+_%zcfS6|2sycqB(!QDJfNsl{m*C$ULhxr4Wi zb47|-j@pRZtcvei^c;sw`htEfxzhYZCpF+3X9fnw^%)%lV~PlX`fFLOMKUQu>g>6?`oJ>9Let1$A?{T;0HMLS5E8}?nKJ*y!#{4AH1XqGhU z*2z%80AStjy5n2%WHHC4%=l>i?vnlF0hN)ltd#v`~ z;r$)=^kUZab=VlmP~A^u{F2iZ>QNpW!`lb2qtX{(UcBL}`-pmopf*9<*_ zhb3k_WqhVWw-*Io2IT|m6&J5w*G6$K4_}kLKm6dMnM;;=GnOnfsEcV!mU5jO`tJqL z%y@)CM0>I_$4e0*q6nZ6p^T-m*8+X5{qE!culSiDtF+uW zNavU2lyfcp)-Ir){H8sK%w!KjlnmM-oUqE*LfY`l8?g?TCtNKC20`_h@sACb@B-`8 zYkp3;iY`s#d&Mx*S4Y z1mtm8&QQQ|gb-K1f4(RFYZIX|wJ9y|CfjpkPh*Z@6JzjTPic*XgpZz6USnX0z8pX> zfB-R0KdIwtKJK_e+;Np`>3B@%xI!8Vq4Z@2#P>uR6Rf0bNpG&ofd23Y{{!T&*4O|5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/008c07b523aab1e4bf2f64e709e01b214167612b b/fuzz/corpora/client/008c07b523aab1e4bf2f64e709e01b214167612b new file mode 100644 index 0000000000000000000000000000000000000000..1d356b1c212d39abd210de33da81cd12d3195a63 GIT binary patch literal 2101 zcmeH{Jx;?w5QXPwy>|SQ1T29N1f@i&o(oD+q)JPXf*gTMAaCJ{8_*ze5N^OZxB(5w z$TmW9Qn-nNi2QX=tC=^mt9>Vm077)DiVmh7=b(F{LCM5a5s|$hdq!prX8@!z@Nvm!$RFP8V=;ZT(rXe7g~blPk%} zvMgI|_QS(|YXaYr@nA@Lq-B9nvOf=E4YsghT*cu*m1u06jg2 F#y5Fsg^vIL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/00aa0d206777f9fea82cd4c42dbf78240ab6068c b/fuzz/corpora/client/00aa0d206777f9fea82cd4c42dbf78240ab6068c new file mode 100644 index 0000000000000000000000000000000000000000..ba7d8bae284564e66c235cc075594a3e38e5cc00 GIT binary patch literal 934 zcmc(dJxT;Y5QSe?wXHKdEy&7fvi=|#7`+J$3=9P$F&Qur1OxBU8!Q-j1_ke6u6OVl zrYaaHJxkB3vmk1)U(!{ty6Y81mrCpju&c@+0QLcoE#Te203}eW%0&-y4mpFIawsPp zn)@3SL&@-#I(nCFr}z;(sCvwt);aq^R(&qH=w9UM4q0t--Dz#}Vs#>p*+|0Licev~ zx3smfpKNNoFwKS&o76s@O&qS{{5zw=(Tg|6%tON!7%nA*FZQ!Q;@)nLdBlO!da!6q zyF7J{xJ=S^mf2Fo_iE?Hf_GV4d4`67Hk}crDqcPC0Njzzq%q>paUzoP|MQoQPYqq~ Ku^#Exe!&M2|F8N0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/00b297bb74389b3817614e84c3bff2fedc35c659 b/fuzz/corpora/client/00b297bb74389b3817614e84c3bff2fedc35c659 new file mode 100644 index 0000000000000000000000000000000000000000..442b72b98ad7c86d1b1c8a0c9dc7c135966f1065 GIT binary patch literal 428 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KJ!ZnnlFal4^Nd0n4rntl z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%37-+U|&@$)qOL zS7OpH+DnHkxcofue7D;m#|Q<7p}+xssdy!Gs-< znrG%2ZwX*K{34+E>)C6eH|%c&|M60*<(za+XGh`!IJDUqSy|bc84Y;Ym_r$bL5i3R7z`TNI2b_S jKbx?)<5fdpFq@g-KL~&&7z7{`3iyV?Lk6%2Qf34Isp(|K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/00bd3eaacd4fabee9fe524ec043a951460d066c7 b/fuzz/corpora/client/00bd3eaacd4fabee9fe524ec043a951460d066c7 new file mode 100644 index 0000000000000000000000000000000000000000..97af01b6e48b0e7ed590c7bc441b138d7865f8c2 GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>fcIiWPBeS-7KlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB#HfVq0Y+8^<|amd27@L> zE~X|%Muz{W;2$a%1gtTIkidH+_W%DB>qi3W5OxM!NGtetQM}otuF{>xUAsDx9&+U# z)~ovAx@O~q7zP+%1Tnw_OdCYTKVDI#j(?5S|F;v39Ht0d*{7tHe9uW+cPA4wd1qpj*@_q%wh#_>S*E=fG0m5Hs(-KVHQ>cW=6*U$Z^RHj!Q-cyOYi9 zg_yR9O+Ce4JAv`L^RrXCE9Dpb(UsU2osx9*gYVHdEPCaeBj$pGg@J*gtHQ1_{}QY3 z@3kFGo74)F^SAEvxT5~)&tczP`{Qd@TgBJ@;P;3KX%VjY(>l3&ney9Zs$6eV=cF92 zEl&O|A<6hqBK6mSqcu(MC5bakrybCdy}LDTPuI&2&&(Zp z4sH@#ciZCVxi^JU$7FN%bsYcoe^)(||0N}Lo`)qHW`)=+`QwoC>z{Dai_rU-MpLI8 znz}7;x1Z#fpX;_+Zg^+8CD`}B{^G43anjpnvv(N>{0)FR?K>|cBR4C9fuJG30WTYKD2o9P8`KUtab6VL(6|PChCBvb zU@gL6cQ-LR88k7OvaxHmd7QIlVl-%C(qQ8JU;n=zY|M8Q!^i~6Wa=9QgBvh6F|slY zZYRAqxOIv4oBQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/00e9106982013e62eedf4e28822e30421eaafee5 b/fuzz/corpora/client/00e9106982013e62eedf4e28822e30421eaafee5 new file mode 100644 index 0000000000000000000000000000000000000000..43d1000ed6cb7e358d5b7b4aae6152aaa006016f GIT binary patch literal 364 zcmWe*Hej%1Vqh?3W;QS|P&dE>7!GJNFz_-&Gcf$uWME`q5NBWzV`gU5;AUWC2Jsng z8Z;OfEMR70G+^RnxCt{!l8s#pENx)WkjJL+c+H9XQ}$0xVSs?8iyN04G%hiaWn&JN zGoh$P0{{QRI1CJPU`!Z*x&aJA zu7E`u7#Iu~VDbhA|FMIoFcsDejMo?#FB>#5o;PS>1bH5A3a=b9GXqmR15*q{v55fy Dd|6eO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/010d1329044c4a86ed1add072891077bc1cc614e b/fuzz/corpora/client/010d1329044c4a86ed1add072891077bc1cc614e new file mode 100644 index 0000000000000000000000000000000000000000..f7df21aa321d9cde553289825b9fa0e274e1b793 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W)>})*12+V(|W#HCHI?l8l3SHFer6yH<+-pBr|=%Ji}0i1KJD> zybQ_=4F4G!7#SGE85qQvnVI%-GcfIBVA{sOwArAEX}v)cli&hoCPo7$PKIL!P{7H? zuGQvo&X$GIz}1l3fRl|ml*K@d$-ux+*gz1>5$1xaH83z#G?0e~N+1N$fSfoliU=AP z$r@oYtWhv90Aqv3*#-how=*%av1&K6Feo!OwlT0UI$yMysZ_9nv*E<+h4~AYm29h+ z(z-b1X6IvpA4}@e*!j72^HvHAtvtrG_N7MbrauQSvlhk*JIxV!{N~B*Jwi+}s~OjG z`LNriN2}k; zzh--6_TbQ|oD&O=N(g8!Zd`8AxWqt~jX6}7k420{1SLdZpcEvn%#vr2(|}EZ;X=

2vI@E~nHN4E zvUPtmA@*lSizvg;6DcV2NeMT Dx=4{69>G?i<-}n1GkHio{6kvj}v+ZKwX1`Kx{C3?& zu3k5?C&QoTxetG1GM9XoLv?rx0Jy*h&>%nnJOC17iAK)d=Mh!RTaWgM4K=2=1xa#F|Oo#_$iTqPz`*&RkpUvY&A_;gfpIef;|7B!#x({_ zjG_yenHZUv7?})s**LY@Jo$LPb2BosG8pg~@)&TjF^94+3o#cJCmP6!^BS5NY&0}C zG&L|XF^m%DH8L}>gmaP93xm}+&WD)j(e|B}5o98BV=se2V<%H%Bg83;3=BpPSHc0* z)$(uwqQU?F|9=S(tNJe!^XL1Fi=_-C3^>`CLuG|om<$*UxIs*Q78YhE)&&NAz~P%1PaTAS*s!mU(RU v3%$=37O8wbubwoYReau+mj|oXh!^f^DJiKwZ?t~Z+$lHK_wg|>Fo*yE%!Pr1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/016fa2b55c0e99f30efb71214c3fbe7b420e4e60 b/fuzz/corpora/client/016fa2b55c0e99f30efb71214c3fbe7b420e4e60 new file mode 100644 index 0000000000000000000000000000000000000000..7e0fe188210c2477d094622d2329c31efb41cd4c GIT binary patch literal 1176 zcmWe*W?%?pVqoxPW?*DuW?^Mx=iubx=HZp&7Z4N@77-N_mync_mXVc{S5QDvz=x^e zfCvKv>wiWDMg}ov24-Gv24+qMW;O<9W`icC{{~Hr&lfN=F)}d;GHh&lXEJj}+3);K zq9@!dS!WyYvT8U13v2xr)UMm1v_WVsFWLIxr|Gs;r-G;N= z?>F#F(>`i__2Z#+RtY!xOU*-llP1!b^*b_t_n8(N{V#awmK(!1p+nh& zC*T#=%5^XP>|0ts<$8*e#SHN!I2HEzm8V~bjVSBdEym2isKvv;sK(47tH8dvW{-%% pNC$?w_`x;eqVEN%!K`#fH2IIyryO zT(+#=r)K>ZQOh+@%YP+Dz+hB!rXiX0n=Ra8R@U58LDrWN6N(?Tl`gWCm|^)|PVZUJ z0pT}W)~#d{R92ZDV{>J8^Zqrb@77K@vbSJ{OWz#DS&UGxyIcHPEcMkt`pkiaf$QUW mPi$E=Nxrfz-h)ds;nR6o@NDJ^xgjUU%*?>T$H2fK#ts11Fmg-) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/01c2da74f7c6a7811dad23014e10b6c6006308e9 b/fuzz/corpora/client/01c2da74f7c6a7811dad23014e10b6c6006308e9 new file mode 100644 index 0000000000000000000000000000000000000000..7b0f6849300eec2f7ee4f6c0bc549ddd3b0866cf GIT binary patch literal 423 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KJ!ZnnlFal4^Nd0n4rntl z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zS7OpH+DnHkxcofue7D;m#|Q<7p}+si-{_>UDJwEhbS zZ@v8UgN=KI=9ziMTLRb)zX&M)3e)7JR?9i*p3aWGU5EKSYCNVrmiQCH_3yU9Vp9WS f1CSxI{EUqMSy-^j^RcmqLgYaz8Nqg<#LHa(iyD25 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/01d839515c0ddbe75435693c8eb8b81d2219d397 b/fuzz/corpora/client/01d839515c0ddbe75435693c8eb8b81d2219d397 new file mode 100644 index 0000000000000000000000000000000000000000..5066dd74d11757ce2ef844ef6194f5c8f24c54d8 GIT binary patch literal 424 zcmWe*W@fNtVqh?3WQSimb1>fcIib|~Ud)7*C7J09<{5=D9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*>d=&A^zzz!=NG7-i7J7-rD;cL6gKBNLN=wA~R)lSxgg z$)&AVLiHb~7;v#MGBB{7vt?msGH5VtU|=xhH{fMsW(j3hXTvI3giR$((4c{hO{-a` zXO@dC*f0=)h%qoSSQ}vQkgPMHh9Nv`Ma78>3=JTA;U0ksVgd2ViL+d6;4Woi7PDkv WU}iAI5|ICwo^OK(Bq)f(3>pDYDo$Pi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/01f6cb2b04212e4303b8df4a5346ea6f62afce28 b/fuzz/corpora/client/01f6cb2b04212e4303b8df4a5346ea6f62afce28 new file mode 100644 index 0000000000000000000000000000000000000000..908e4bf25eff3408a5a7726426e097d30204a841 GIT binary patch literal 1052 zcmWe*W@fNtVqh?3WXtY`T^j`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AN85K^Mn+av1_M_^ZUas><}emEVJ62=Ltz6!Hs(+k4j!)H{M=OC;F83W zR6|7rd5|C%kA!DlNorAEYKcO4W=eWyNwGpeNu`2MNs57-IIp3Jfr*i^k%6g!iD8sD zuc5htiIEYQYY+vqCX_*dB5NAwBfFoGm4Ugjm%*U1lc}+h;fD5!Wkyeu{`-Euur{)r zp?>d2_x+p^)k=F!*G*SFHf2G>fi3c76Vu%cF9@`3SCT7Go>+9^Wp1TaYk33zk*Q*( zN3Rw7oJh7`{3)5i!GG4T(+3OlG+H&LtIMUztYg0#ov-WsR(rz6p7koZ>t2dmu^!yN zLuOs7wRFUxo0G1sO7Hl{#LUR>b#Z`!pMfkJbEqsIix`VYX_uDQX^wS#@~PW@h3(5( zUV5u_JvcCBm02VV#2Q4pORugu&9M(v0S`#OFbiu60|UcdNo_Fqd-^M@*zqYJ-{>Gc&^vUIvCk3=CM(5fc^w(qYTQz+lPDz`(%3 z!pg?W!OqFe!^OuhASfg(A}S^>At@y-BP%Dbz;HmEfk61@7_u1{7>$>Ma~A58n264D}vvm#m{x3 V05>tJ9v;}VBTa^v4-`r$>H(U^PO|_2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/01fc3c55710d402a52255afd31372eda4f82b95f b/fuzz/corpora/client/01fc3c55710d402a52255afd31372eda4f82b95f new file mode 100644 index 0000000000000000000000000000000000000000..293e66fd8662e0bce74827a87c4dd541fb1567a8 GIT binary patch literal 476 zcmc(bI}Un zss!r7Ueq7N!(^0>vwSk0&26zlf>m&yAG0(0!t{-CoXPq_!1q$bnt=Li4mtlt)N&2z;xvPd>bc)5!`7NTf4cocu+PR%mwgjGvW@cdF I14R!z0QoPyIRF3v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/024e3782d4c6b6395a2ebf5849145eabd16fa72b b/fuzz/corpora/client/024e3782d4c6b6395a2ebf5849145eabd16fa72b new file mode 100644 index 0000000000000000000000000000000000000000..8ab6e9659b239e37cfd59b1f96c8a8c9645135cb GIT binary patch literal 3160 zcmd6peLR#|8^`Z^?wQ-$c%OzL3{qZa&I~h#%}6$H6-x4KwKS$-Mw4M?Y$P&6%7&;! zJuLg^#kNl=T6(d&@==Lom2Ihqgr+1?rXp7RnbG#LpFW@cXa9Ka|IT&p>zwPHbN#;8 zMMMzD8v{X~A;?-Ue{WKEW%`rG3lkv=Yb_T)S<#taC)Qr%b4QG~Y+eL4QX$Cr4Gh5$ zWCB5uEd)V25C(>b2!hwrf$%s8kAbjRK#t7-a)e)jU|Zyn%&aw|=|wl7C0h!Kh7 z1soa?5L8=f;B{AulH#QtK|Fb_fVcHsT=);;G6D0{apCp0Zrw_WRR>JrinahbZ1dqc zVH||WVSNb5VQq{YhM}`TyAL@_;kd3KldtP+-0s&GHgRqE#@D(Hm@f2=;tz z=fD@0=4n0rc{Sq&M~(s_J1VY6gV33cD`oXdctc%52Ws~}s6lNBT@w#G81>7Z3~TiE zH?*y{-R)_apN@H5pGnz!c*BcOgXiO3|NgbwfmG|UgC=NeIL=(NtD?~{{8nKEyEwCC z(4V*G5xvB>{nD8|$HOfpdNS(SFH7%V>Nrjjodz4fn@PNab&= z^4A0?48Os^5MZcmR#*yf296c>6$`UxK5~p!Ia0a1gc543G*&2z<_IZVu@IQ3+{jo1 z;9-Ale%j5&dOP`WdP(XEfJc#VJM|tI00Ar2Z?;%dkU=B_^`b=chL;~7$$D-bGhhmw z@F=PcW8vE=7#s{VQ8ZSDhcOrc<|1?ei-28)t-?Cn>TQGxn*|@F8r470$Dgha?qgvg zsyt&xkgM+{%a{M0SpuVXuRLo!x1~1s0&BwWwhm=mB)qiMp}>6=ZtHIl{S`}Q8QSvVF)SSPe1Uv?Q~GUfX97Z^SZ#8 zEvYWkf-=ZCdVBAN_Gc?980`^Eqd)^!_Kt_)|9x?EQg66@)r^_ltWU1U?9yby)cC+z z`!kPw0;eJ^2Uo3J^+mk?!b0a`0{43*RYkq*hTjj5g>*I0mKZue?4&Xk3sb8VBA;)R zi@bEs87gD7G@mZ%!=Id$@#=zH`Y_27->c53X>HQ)YkFT@vp6ZNIgzk7b+9~tFq^A5 zXD|aHN+3tZfgIC4ham*xnfaHC0!u%}!dn7p8|(V>L~F!J5~+$o6q-38%|XcMo!wuZ z8Dw7{HF{iu8(`4f0mGf4Mh}hdN~60nJQyD9{z=OH9a~Brv0FEEhZcIGmGb`X(13;< z?`Nb0v)z8_{d+Gz%ei4awr-ZATTlNyr$VX|77~8shCI4xY~+imEBA33M$M52yc^aB zu#{o17AU3*hvzkSD8qD>K{MrR`qF-?*eu%B_)DmjJwTS+(Uhzb?x^x)9d}3be_U>e z9Z6fzrjpjsCwzmw#UtJW;NHtdgm?QW7R_9klM?t*j%S9HvuoJg>>1^ zW-_ekr@;(+gDZ|tE)O!r)uvRmrx}_!D z-qg-0pOBBO?&C)dL0_AY55989JG`>3sxP}mSG0B)l7@Ky?{!L=HEF8Fle+4w+^atO z68GBOaGwlX0ogunW*D66x6P1jU+G3^i7&WqV0kD@VwUiHG+b}Y1brMkMjvtRjn(je zxu+?iZ#|^AXnu=nW+N1yW-JvJXnE})-lS!tw-YUIl33qTL}d)+?X>ZfAZIq_pW+WF z*~Jex8fo#FeV(@me2dn*%l65vF6RAqa`h%+#KE3OxAYc9H-yN597zLmjN+~AjV>xa zyeJ$F0>K~4-a!4>SZ!mCWr<0GXihTC1vse$uVcJGWr^V=lf!u2Br%Wd%M(ilF#;|} z%6s2{s1N|?fI+7LH&wr(LI4Y}-VOf|%>149?_4+Kg5Q-Uwq|S7*WX(#WDOm^k64Lr?m+vKFQG`qA(;SzKZ4oD*k40_13FVz9OcLfXdK&#I zQ^hTXKVJ)XYX7B}UAl17^?NrmNr|n&imqQ%zazDW_q9B^8R;7KU_(f*%WSAEb0$X7 zmVe|t392u`cogdBHM1z47P!MNSF%O=8Wz>gmU}mP47_HB8GCd^E_Ax-~7n}4@0 z*&xKVq@cX(1MPnj4f?7AYz)KJSRBaHg5S)+K<_;aJm)I3E1&^tg-eA~w!_;B%@qqN zu{@DfRXgSy39(Q@m8g@4%Td?r;JF6CA1njDC^p=J41v#p$DfT11}3_w){=Nqsp`)1 z!^Olri6}|TYwUcw=XKq?Za{3W*$nGE{szEOPea-vZ-Kx<^09pjo;uO_C)j5UpR zS-lw_ZwbEb%Q}4?q?!H_p821+Hl|_eqkx#oEj!K`clpomS+_wlbE?OjPGWsu>_#|o z@a9P6e1c|R-NgrmPcxY#7HdVVcN!$zf}tI$Y@0SOjnOEUv~&;&4gR*eWQ_AX%iD;E JATR_$e*jq-TRQ*% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0269861142976d8a811fa359872e0114d330834c b/fuzz/corpora/client/0269861142976d8a811fa359872e0114d330834c new file mode 100644 index 0000000000000000000000000000000000000000..e14e63bbc9d3f7af4275058420b00862d3ceb3b2 GIT binary patch literal 696 zcmWe*W@NBrVqh?3X572&yL8a2#2s>e%^MS>9tih7x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=R6CI$vZ1_lO&@XVC-%#vb-fRaiDpOO>+-!H z-S=}wR4eT@T{m5|ZOVd%16$D{!eg?8^%%QS;EMhDo-KAI8oaWfaC!f0g*ZQ1&VarQf zZ-E0-R+&XYtib?9LD;^W<)yb;*BkJF^b51F8ZcWi{zvvOE6Br*4Aw6ya;ILi&H64Z zsUv-;W1Z6KFTEyTYYNlP>t2*Obh!P|%YB_OPfS*OOgv;ib)B~RJk^Tq_*nu=ivFJe z&cw5Ui(^UDqo*Zxg0hwgStsQ)KkFr{-I@13yNc^!aQKW>MH4Gn>g4-VedW1@*341i kZxN9S)s^4e%^MS>BpZ64TXLM(&XvgLaxj2bP$iv#ft`VY zmqD3<;Xfk-BLjmt1A`bdBU2hT15*+MQ#=Dxj6oAqgh3PI!3E4rj7&_N48J${=&cr* z&11mJ#;Mij(e|B}k&%^^!NAp!+klgeIh2J>n8`8JP}o2a#NpuK3eL|>)eSC5EJ-y~ zG>``ga`8xb=9Q!t<)xM=glDFtXO`m=$cghBni!ZE85YW;3>rI`LS=<#&IW z%ejdoCekRiK~0RAk%5Je0i5O-I$0PPS{Xo~UYD_Z#lj~OyYE@BO}q55=F!5R`r><1 z{u}R^v|?XeODUvus%AYdr4uZ>#~m`yG+8ZR9* zb#}zcJcxUF@ca3Vj|5eM{#*R4k-huxRMEWl6-gpLW-ylPzUrT4cB!QSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D#M!Oxwh! zo?@?^!1&$y*{R)?@(cdxO6-eHNxJ&M_oyI?Uis#Txv&W7s<5lfzr^bMdu>P4Cba_P z{H^;!Wd%R|IqbV@e|+s~tN7X<{2mb@Ey5LlS|?X8Q+~TlmFsQloRY(}#mT=VBpDw{ zr2aaPv`^ywi)QCblfUM@ux|@ay*S6ZByoo6v;#V_celpv>3aF$nVBQc!A)Z8Zd)8Z z_oh(lm~76zj^n@n@2Y3=zoewj^RQ&YtPqXtY`T^j`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF$ytpGW_1)qqkaM zHje=>8>d#AN85K^Mn+av1_M_^ZUas><}emEVJ62=Ltz6!Hs(+k4j!)H{M=OCl9JTK zU_(U%d5|C%kA!DlNorAEYKcO4W=eWyNwGpeNu`2MNs57-IIp3Jfr*i^k%6g!iD8sD zuc5htiIEYQYY+vqCX_({n>E2Di6yDTSkpKk+5L>H49tza3_XU$N&X$1dIADNgL8NMzKFz_>wWn&JN(Kl zIm=6LwXO#TrmQlHgn?LtNO$SgHK#fD@yVy|5QQt?0qGZJVNGFRVEB*hVU}+U%#Do< z)-Nh@r(Uzo`YtS~BYmi2ozm(ry+&VaveVD&UX(d>xc$+~eVs8+Oip@CJY+w0owoZt z)rxHYSprLn+7Da^kk>F^cDTh+9GFutYsr{(Qa?i8M-WP!nTjX86I&z;K9xVcU1!{|u~4P!bXo f8el}@BLi%5ipUCx1WiP$Lk0>VdR&cfuagJ>$RrUC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/02bb7a45a85409a496fda75fb52efa4c7cf51352 b/fuzz/corpora/client/02bb7a45a85409a496fda75fb52efa4c7cf51352 new file mode 100644 index 0000000000000000000000000000000000000000..f30c663d4842a9746907f91d25a75c6556839546 GIT binary patch literal 536 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zt|)z;@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZ)7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScfI z|G$Byp}C={fsu(}lsK=E84?#medBy&6B$_YW;3>rI`8XH;mRl7!JM6ETM@Um=6 z*P1U*Z{D>OW&CI|kz4<~i)YFEj&FIl*N1NB3u-+hShe!pW~C)cHR3N{Osf9e7gqG^ z&G&hl%{SH4es4>1Rr*l0j?d5SazW5Jxp3D*cl)o^K5o-<7Zj5-ojq;uib%oNUrwHr zew7qipf;zR!Alwx1oaFIOw5c7jEkiVBn&v&m_ucSS(pqM47fo|eijyHCe{VWPUi+W zy^*2gXM@S9D<7rz&0Qdq64A2T#>jeY#L2TJ-*e^OO-K>#*y>Vvcj`53aX&4SX)y~- zH<@obcg?O;|H;d5zZe*PJ#u&bCI3C;U1Fl(qRwj7r2neDDkpUVf~@#_S?00XFZ4cF qSfuj#ylT>X28Vf9ULLGkBVM?xrLd&>ywUnqbEn)`-^a(mzyJVTN5gmk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/02ee2745e150b327355c81e508dae28c2f0744e8 b/fuzz/corpora/client/02ee2745e150b327355c81e508dae28c2f0744e8 new file mode 100644 index 0000000000000000000000000000000000000000..9f854450540e05c34cf9d0274b1fbd54c277e4a2 GIT binary patch literal 719 zcmWe*W@fNtVqh?3X4YD{t?kmgKQptl?#RSP8Xcdvl>IgX1H=FS3=E9hjz$|WFxWCM z@G>YfF#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItkli~LUAHCHA zvv~}7**LY@JlekVGBUEVG8niTavN~6F^96S2{So{8VVZ-f;b#JT*3Ldsk*@>i6yCq ziU#r^K`tH%&%Bbfi3c76Vu%cF9@`3SCT7Go>+9^Wp1TaYk33zk*Q*(N4*MtP9)oZTAVyb z%YW9d(+3OlG+H$lsLScdtmC>Gov-WsR(rz6p7koZ>t2dmu^!yNLuOs7wRFUxo9nKv zO7Hl{#H`4`xH!PT&p?)qIaHR9MT|wHyY%Xs(;WNwt4N;Fu>I7vi z6S7XqXMWa8R=YFreRdVs!;tV9tBNL8u++)-r~1lsuMwJ~!rvky6{;&g=fhmiO&l?i tMyU;IV$948EW8X10w9JM0|Sp%D>D<5JQFj67!zanzJ}bh#TOqx0RU2|LvP*F(ODZW6l4V>W``D7oSVD`XELlp~60($? zkz`BOYe`DkMRRQ>jB9?6y1(bSzx&+h`TcXxKj(R$^Eu}{&*yy3dA$W;7-*va(12kG z1*0)6tZX~5>>Qk2+&CUyK7IkgokGGQqGEV)2}uA_0pMXm00KY?fb9i!_Y<&Iv*67=ZAS za0nL*Y>vkAvFbXyJ4xz!BH}waNh%}~qJ|(!$||Z>J2^?JBods&>N%HWR-z4OdVMn+sSsFR2JX5+}aIHZZ^HYdv?qxA?TD_Sc%US;F1Egu;_66R1zmML=lN4D|Y5X3~IVH744;bVc#@q5r52$qG7$O2(7tT2RdY!C8n z2cZyv2yZJMG%tdqa{cOe>5`&@r;m$=v#;;Pzvi6%N6sOTFuIV$63p}tIi4Bvw2JUt z{(Dlo8a{Sr*noNHvq~b@hxb?8V#HPP>IR$seG(}TRSVm^)UnzpZ*jw-3l0xEh{iX0 ziKk6d-L{H{R~syOEN!PE#kJg!D?ZV)Zo!qs3per)mUOZ&lyD>wo3#d(UOv^d8|L;? zGe73gM^7q5+}=Gj+?ga5k$NWJGvSdMTw@fVqve0}T_gI8xiTT_@ZJJN9wujjd1;>I zS19RIsRWP*Ci&TP%R zvk&lEesLn93&IRyWggj{knI_~VOe|gcz|=yIZOYTT0s~_b8!GP76L`ME8_7|`8|Vn z8+nOmn9Ymd}LM~n!fX83i_-9coizOAFAh4;R=@4ONNnG}JPkkt2B zL-)>g%{Tf=Vb@9L{KisRbhEE@Mn0^bx;{&@n@(?+Evs(cw ziT$I{^x`NjIQrhrVoIbdTlXY$BA04>99NyY_#r_8%HuHJDDce)052byHHVa5cECoO z(QMab(|CYkjiejbZ81-DJ-!sAE5jNc=CizS0T9J)dBg4wncnV{My~2HT$QFJ;YXdqgn03o}jNch+$PcJ9}CV zsouH~`#PuxRrZaUJk+FUyr8E4SjmO{X>t^n;Erh~|DrW@t$id&5QYJo3;duZc!CBX z7XUFykokA!{#`HY)aB^PEH<&@iqpE5H%06&S4Kd@_9qhLLD^c{&yo)1^u@8S-1{*|TK4Vkz>uR{yy$a3_I%?1M*%~MSRA9KfOV5uN>| zD|UW**KOkRDK5^L_etgeWB|aqP4}Oe7yOC$CUyWf0Jsjo)d&?XN2sWbpLpK^$}0%f zR_L5vf8zjhn8c3k*v2{wA4=Dp#E0-~3pPINDNlDNg;NxJiW6xUBJmUaLPj1GCm#*E8Q~q1W{6F*XXM_AMD{9x* zThmU>`Yr1VJ*Tuw!ro}}x?3*KMYhDSCp zEa>G*)FHh^VK18M%Y%|`Is)_@Bwh~{5U%kk`t8nE-O?32{r&`#zOKrbVH+tX5L59H#te++o& zoNe$g-6Hib)%erCpfLyxLCl}EdFa2E6W+Fi2iwDnc~KRDiLY5h;-K$()30lTBr-P@ zglN`ehk?ao%{*wufM=E&g+3aArmgaOV*(HE3+lrhV-!VE%cQ-eJj-c@{W8l2W)EtU zhhD#Jc;ysh_8{Dya1$v@!Z}B%-zwadRbs{+r0-K#Ul#N^e|gdz&%fDptft|7NP*`0 zkTq^Y%hTa}ftwL`f^((lxqGm5r}Uc#s0oe?Az^4t$Z6w+15IdQHcT(>&Nq+QLy=^s z-gFg;eTqub3wiv9a@)F?&x_Nlx*UyVf=@@(o4dYvi?rY`(xO^7m^D{XC;A979AlJ{ z)YAvDH+9GxTYL_)<{w>@67RlDtTO969if5b2ItD_}b2b i7++QEfsrSonpO1dp=PU=_e?o5M>`8Y41?=0dj12g_CW9e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/038b0ba0c6de4389740f7452b513be7bf711766f b/fuzz/corpora/client/038b0ba0c6de4389740f7452b513be7bf711766f new file mode 100644 index 0000000000000000000000000000000000000000..8d0e101b73d15ce5b5dc7ced93d4f058c21b609d GIT binary patch literal 1044 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72aZXJ8Qg z&&a^Yz@W^)AjZJJz#z`RAjZtd%*)Nd%*nva#=y*M(8ToLpo#JM0%j&gCMH3KjV3aW>79xJxz>C$VM}=GB7tW@-rATF>*0AF)}iob3ZM( z`_kOLd6(ow)*pYh?WBcP{^q*hd;UZ^?F{?iWB=W-W#1a+d4&^OZy4=mc(o?=8}kYN z?!S2v9W0KMN|uG|^>tjey(MCo+@bV1_~kB3&NaU;_2el%X?mXeK+)}w@x%r0t!znX!7B!vtcDv2t+{M=U=Q6*DYAK(3wY~cO zZ|C^`Ri2)F&zS;Ugl}F5t+-%*epFIKaRU9NMz{jEw(TSeThu7Z?b$F^9^kvhWyiv2kd#F|x9ikJ)-3?xB3K^7qcfhNAR(yA)Gr2L}Hy!7JY9ON+P28TH#!=!ufr?FN4FRb-j zP`hr2(iWZX)8?4V_CLSr{@?zk=~TYEcj`}c$(hMoxc@1;BtK)J*_smt7F@Q0z5LA5 z?~@ju*7oWV(hdojmHlu1&2Rf71S8^}w#iv%8`KqbhO&rlU;n;)rQL?J-0wH=Ow&GU zef8tbbqV~3tV+#8eUmP|ownxx|Ns9z#HT5@&I&JoskF$Pd6#FogLRqrt%EG#p(aYr zu9~a$1po7{4&AssB9c}0r=0EfH7u4oKiBWb_}yn(X!O6}rCV+c+k_5f51xS6Tr1bT z__J?m*_7)kN)|K3msl;2oG)u#Izg)Oz2tB0?aNaVm6qgJ|BBe%7JnzzvN+EvMu?-jrRddHK36SjlR4(&7R$GD Y;<3EY>(^LP{`5DBfD#C!jtBz-05Lg&+W-In literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/03ab752143df4690fc0611f04d5a843298884eb4 b/fuzz/corpora/client/03ab752143df4690fc0611f04d5a843298884eb4 new file mode 100644 index 0000000000000000000000000000000000000000..9dca82dd134dca37f95d75396bdeb50e98511642 GIT binary patch literal 2101 zcmeH`Jqp4=5QS%UHtSEa1_>yl5lcz+EGz}FN^6nE<7|<02p+^6c%77rMuMiv0kU5; zZ-$vS49rY0gd#eNpo2|E9dslbJ(-wjP85<^ky((wz-hqA{VIx~7_erPm3diN<}e^k zcQLGyLL)L?kM-RCxwRxFy9nb?OY+&<$q7#F%^)lD$3Zci+NxnQqG}?Kr-e8UsFmv_ dw-if6Mv64iL4ASntzxZf_4BsuFXr*|lNYh-gR%es literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/03aeb438919c57ba52e436395f3cb33b18152ec8 b/fuzz/corpora/client/03aeb438919c57ba52e436395f3cb33b18152ec8 new file mode 100644 index 0000000000000000000000000000000000000000..41f751f6d442e88a80c6e11a5017f934f0224a02 GIT binary patch literal 2251 zcmai0c{J1u8~!b0$QUKET#WT1l%KJ0ea%Q*i6{wK#wb!4TVt=8v4o;5Lp6-$M%FB! z7^SpWvxG#2ESIt+Mwh7OJAL>5(d~Tae9wRHAMbOX_kGU$oL3x%1==70u!mvi_aN{W z7TRu=E3Ix_5P5SYLb7{!jQ!2YzC}=8EN;rvPsXuRk0t4gF;bRFsw!Fx#mtH`HtWU& zvo5m$KLFUq1A)J2FaTNxKuZBA7le*Fj?m$U`7i`R5Gagb(c9D$tP<9-Ac)}u5E1R| z2o?=HqF^C(a0tnROhRxHSZ#g8NZUx;NC&|ix=3L0KbDBFwh$ut-xg8WJA{PLVIo3@ z^w9k330A#^C=j7TY7iX+;mD!JkooYr^t;2YL=5OoUA=0^3&b*ld!lzV%` zt<}WaIM~yxx{+J+j&uHP=z~PRftAt&Ddh8ZZVKdjJJTpqEqA_kWEnZ)tV3$y1}OCH z(z8y~c=D%))hk^*1lSHzvH`%F){8n9)f2T4Y7WQlL+Drz@9{n?K9}m(;3c z0`^)}uw%G@)d%6NSode2j7HM0lJ?+C2OY7x{j{e^^O+jQbwW;9JyZ&o@{p?FZR_YM z4_eNX|2o~Mns=%uzUR`n7sK9%C*K#(Fgx5>ZIrW3RNITz)y&rXJWUXO&>Ykx7|5P^ zgA!QH+b&(vbMMs7K5A#ogUmxL*KzEo(-;;1(N*`WRF;ls;#A=pOb7XZ?~6FfruaO? z_AZsk%2pY*`%;L%Xb%kvjSc5+URODu%+I$zk(qeVoe-yD{+V<;-59%wXdS;FsY%y< z9gt=Ik{~8e)Y&EZb>5wB?mi+s;#K}Bl-(V-?_776#jP}6f*4heT-3F@-!nv9ef&o3 z-n09}OWPy|{8zI!Uv`rU9u-ax)w1I2DjAd--D?E0ehItX5EX46;m@v|wGUxzZ3L(95Y|u_|w_KG#X%<&?#&xlxp+s`i-F7kYN4@z=_c4Y8WHR5-3hdemz%vs_GbLfX0BuBx0+S6C9~@{v=pxzT%cW{+n> zrw{=B1_HdlQMqyKMBzQ_8+S&J%d481u8eS68NGXutkOw+f|$3?R(D2juky`(pJTM9 z$z-9hkw0m*P}NgXgCu8Q6^?n zs8hvBuerW;U8$5^Cd}Zy3 zMdLwVzqV}FEXO8UPR(E6TF)jI-YFfYXEs%|3H%`xCL4U2x$ueJ zaE*dAgt`tWM|bo7CV2B{1>N{J?&p+fgS;J z+npsX#!E31hYg0>!JE;ana7-(ZN?~kg&m4xbY`nQ2{A~Uzy`(_1zuR%|1`Qm;uu#k z4DsL57?TvAnLjU~;;r&Zt%Tpjy?3QxovJP}3Y0P%l&n(6q|Wj1)pvlah;3?hob+x)RURcPkn{avqw>FEX0i(C8gDNEgGlzb`iO=w)zZNWY3})jE7c?7|vuKts%Ee6hu2(ADaTnaE) z@ngazIE3!Ops$9D0WkPei>oYI8@xr=~XIEKYy58fcyxqijx~rm=)3TeEoY${sChbjIY`&P$ zqMBy0*3#W#IDbvoE^$MQpg8U|1E5j2Jw)-+Hu1duB@Kg%6@J}i zdpl=+DYoW00)qpyg^uIT7{OI?M6uk4NeO=@4|(0spC1^%tApdK>rm+zf|t`rVmP96 zwi~r4XV{#dmW||X0t-TnN?+g7yswO}JvYsXl;M=r39Z%cl}x=leau{+u6{V>uYW@@ z0z)af_Z1V%7HL@tcFjWmof^R>cV87xMaAtK82x^6K82BeJx_ooRp!@;|3(U<1jlp7 z=CHC0Ox?0jw}+~%X3>j^ks-UG4Yh|OIO8H-NNA^E+oZYvuHsS5#kXJV+d)-NyT{3} zM}U%)%N9#P9zPt z9fMn55faf#)QU5|r>nd{Q!>~@o{APFdx@#Awh79X`J+h_uEu0);k*~K)Z{V_flPrh wq7X@>dPCa_TNTyC{Z1BFA1^hEPjHz?m^?nFF@h+-&>Jj>M4~rj1uL8UJDsfb=l}o! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0410a8099aa7b977a1e88570d78a12891cfbe383 b/fuzz/corpora/client/0410a8099aa7b977a1e88570d78a12891cfbe383 new file mode 100644 index 0000000000000000000000000000000000000000..402af392d79a9fdc51846bede547402aa9f767e8 GIT binary patch literal 751 zcmaixUr1AN6vxl+k5@O{OzxOMXj4gQlANt9#Z*izSBi$+{8!d$R~y=O=$#-`OoQ-M zD$z(SGi+33C_W|nRQ5*;f`}lLBuf$`dr%Czv1Jk#bl$$_9QbfP$IKX{Q-D;)UJkx} zQ(DzJWQ=dKoZs*8ehWGI@Hh`6z@TP(4@xke3}Apn0F3|vhz2k-MjOL{)&s2r>c&ctp`qRI`5TxwC>t{S)6Xem~kEd{Cztlh;|X9|u^emZRLEsA{AQIzf6yfpOT z!N=w9&cU{Zh2h61_SzSFGRt%OR^Gp>d{$@7@JyaAueyD!WdK|HF;-wwtdX0!$={iU z%rk$+H*5Nw?Ya6rzieU^y@7EeSA1A!@^@ku^UM^z)Bl59u&)nDZaIKEz5^zDwqKGV%! zS6n|&d6<0u%~FFz*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5EsMyGCY2 zO%PyUVA#^N=8MytcP&L3KblO$*FW##S@OQ)Th8tEq1*X_TF(eptvt6`X^CQuINys& z)t~#qihjNMK2Njxrh3}%ZAq?53{30z{M;@V1f7!$c0FX(f35a$o1VL%n4IP8X?r6D zSG@l6?40zgq{wnLFNTE$HXH2cbjq0@Wn%vR-)gaxfrJ4k8*`|vFbk6bg8?^)$Ly89IJ87@fNEL3&@~0-2PEmfbf0|NsAg@~p}C+=O=% zdd*tgPs?;#%mUL*=9|u4vn$nq^75PJ;+-*%++Bake@}Urm?*fYGgUR|zhbY-N!@^T zM?Y?4na5_o(ED6rkqXy&)uj2X;`2DbQN^IpQqtXGaCZHwxl?Ye@8e@&U=U$uWME_z WV`gNK00ksO83V&Pxp0`@KLG#^Pswrs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0426976bbdce6a642e9ead9120777cfe253f6ea9 b/fuzz/corpora/client/0426976bbdce6a642e9ead9120777cfe253f6ea9 new file mode 100644 index 0000000000000000000000000000000000000000..15e3866af4a78ae6e45dfe746516129c5c957f9c GIT binary patch literal 519 zcmWe*Uctn~#J~{F%*?>R@b3GnRRJs$eykB~oH6ymo3ly{(=S&|dHdd7^_k}zg|iOX za{nt=GtMsFRo(gq59`Kt$e=<@auNsv7N}YQCqOY$hsP8ylVBhTDp(*v#8O1X zickxcE?ljmf}l^Spdt@7#evqU)wZTckvbF+g4geMg zNr`5F6c0!-fV3JFklscG@N5l6f+UhD7(KE`aM1cgb7Vm^^(+c48n%FtLIG%=$PAfM zF)5kKAkCJF7|4cb(9G$P@^qXZsfttKqA7?&bkfZy&tEIU6>D)7H!39|DMh8^MyRs6 zi&P27+0H`bjl9KPVkAM{Xr-NnXeRO&i^rP(cpKFpZ==~e@%)eiFij~ynqrbh13Y-z zPtH45Hvx0u(iJ81K0P%Ua>n%SjV`Ao^%d?#yK2;J$2jZCl7dBFSl>J0;+)}HrqJF` z&-ULuthVYXXJwsRkhw@J3#xr0tMUxrqaU-HY0kJ)oyql8a{kzmCD24}Ke$&(RF%`8#;!2ok&K7&j_7=-$X7p4#w)__^}Hl&x|2uK}f*w1imf4AP{ z;83af=XWxby7*r@wf|>J&;8TIt9!ktg_gAkmDlq^K62l%CVY?eKE;2#hDqi}=(K$+ zd+w_8Y}nqhsh@LFo(g1Bzx(LXnjHF_$f(LXMcD>&9%nngm}6#psLIW%km(@huW5N) zZQ4Xzy+Vwur?M~z$d+({yO(Uynr*$|;8mHfX(__ZJnw_G% z@1Gs+YV5IbTdMaRd53-bWvAk!E&Jn{&nn^iIw6yI0La3iiM9!WCJeB-{9ls)z3ykt z@s@aplPfhsG==aim+XKhBXcU9M};y)+C&GNQ294;2u2ufsfq%!gj1RIN`+#7CIKR5lZ2RsS zbvHX&x3hlt*uPO~)bu^6)t$t3$LFcl#2U*KDy51Wk|vLjOXJR+Z9t9}@sQ~5DD$V*7Ifc?2yHD68nn-FcsDq&d;7V; z;ww`IR=$k0I3a$kxJG3b87|#-r69h1;Ngmx^LHp}+m7g6L9MGoeTO24-TFq$?oaCI z8j7?STJU1;GF|TJnlj?iuDGNg4eJWVDk`wNwnp8?hIw9H zCj&E2=!V?g+btx;)zzbxHrd6_GtV__Q=}MSs`(LVdX2oaG4OIMb5S5A!Q3XdE*Ed^ zykz99bL+9G((VPfsVv9V--zCl5WN+IdNLUUkctFU8jlJo6ccDkc0pX^Om#B05iGJz zR;e=lg~B9(GCN(CAdtz^k*xv8#C#f}LZ~M}fFwj8hb%xdkY~;GnyEz&ZtGMTs_}{O zo-%p5P^L&z3X@bxhL9BysIfEh#~N9V@rMj=WRoaxVssf8^e3AB3xg2UJwL#`oSL+$ zKl)mpj@^;p?M?;f+(r**`RRGO>H>U*M&_Lun6KCCk6jcF$9&+QS{0GAnX)zaOV7~4 zuT0b4X}>Jl`?O$SsV+ID7rbZ3-97A4x@Yml{kkHpg?#xIEEfyh-aG^hZ}MV>{WR|3e8 zM8a%a`X;)TD0sqN$AYyXJjis0$-K<0l*G6VB0k~~OfX}(jrDLN@5-_iICn0tP^BcM z$l_G^uXrFZgv3Z979nqhkfHMNMZT|^XwK{VvBtB6-JfNN5Io(GJv@Fz-CywMLgnXk zCQF#rhbx133c@=Fx6D1uDv#nvJSyg^bD|DE8HibP6_kF)e8!w4xz!e2yHTMnJM+1e zclnEoz^bVUm%hKU$v(3)tnb?OjR)*6OLf|xu15Pr-d!EOmH#rr)#pWG-^FeF{OrMr za*|(}ndM7g!Ix~xo?jLR%B@V;4Ktj#$NKd=_lacqU5lQ|`!--d^OX4EWNi9Ua^~HG zUIBM}TTFZku|5i zX?w3tsHNI+Jd;a{M-RRxeXCd6q#(=`>R%H(2~v^2QK()>goHKx8eWmdn8Ia>G(i$B zR}qPtkhxK)O7=pRqK z{UPo5yUvs)wB=M9oe-K>o1WjyxEAuVWaVn5F;o82{Q7!1!G*u4%ZvJ3j$(V?gB9M) zy4_bF);ck1^N+XOEqk=d=OKH!yz`q@rEEuU{>DI;ivcG6F}|v*AFzn9j~jl!5&$8- z&ubl;FMYh~=kO&BF&5fmbvrrPMKP5FaZd_^Lg^l{Pi%?WX0dtK*lfyC`m&qOM8#w% HHo^Y@NWG7` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/04dfa973ab9a6f30babe08b2d62eeed7c1ff1e56 b/fuzz/corpora/client/04dfa973ab9a6f30babe08b2d62eeed7c1ff1e56 new file mode 100644 index 0000000000000000000000000000000000000000..883eb1a790ea5c38c37ea2cf1854440ed01ca962 GIT binary patch literal 3154 zcmeHJYfzI{8b0Uyz9b0Y9s}VL0vS|9l9O0sK#4`F0Tj@+ku4&MF_0h*9((85kYG1FPQKXzw#XJ^l^?|r}b zob#O9^E`AM2a7QP7UKAtAn{_xt+Kp_4d(`qs6JzUYUw?<_-JGfm%Wqv&yfJ6Ws zCm?_TH~|3002s3Z7zA`2r_QhfR1%`j5Cqor7>OiY%s!cwF>Z^SkwaYwi5q(-Jn zk!e`L=^D9GrO;%t#C*hbvgY~oczhvmfj{E&W1Osc0>tAB&}552^1nNk1=TVnK3S2V zRHZ25d2~cGO+}$vM<~-%H1UcQ)*6K@V;UFL9G4TCIf;vElaZ0ZNt^`Ckt(+!9rQ9^ zCnNz}2W^4B4q9S52*K&_9eT1*9LEY`-}SVJ;#rgfBbGyXN%?==CSJ{eiU&w zv8D69GS}QT`OK<;qNB$UU9>)_jY4ZFB$Wv7sb$^9@cq^MdaB55nsM;Q8~(LRAKs_j zxmVw`mc1j8xi=3Rt1aMsbTD>!rQOqkpg(~d`(bIrT*-I(XwiWJ zLzh^#tB-F8X}{y2 z>~z20XZfo#2#Ht}gM44b$g9vpuF<3ha=EFS6=p}n6^8|j`5dWAV^$2Oi>1j5S&Bx@ zGw-34s#B*h+7NVtR@~?|{5)XJRkz&MMK;^zFwc;)0#QvE9U+_`Fa(f?DPj}Oh_0iB z-yzdo>z~Qbyg#h1Ils~6T#S~BJWT~G!UZ`aD%sMP3<-EM3nM{fK_(|^sSv{uGLMD)x z#t-b{?SF^;JUp~Bpu^g=CM;n~j^A^|Auw;_2X|tdpR6eLZ;lo?gxSp(ZT(U5m*Hb0 zHusxXy>Rg!58kbGxj2$KI?#D~&X+&6g^k8ByH-W4dN0LxmVREjV!>U*@!~t8`d<$A zM;YsRZ`;rN-=`sp8RPvMX$Vcx(7%Ws-%LYx;QuuAkDl#+iiXbr1`SOM-_+6mv+D6C zHGFvuA!xtmEJeQzIk8>V{rB920H3c& znY#`N`$)A(d1*&`zur)O>T!Pe&N;S!_P+V3VDLn_{<7if5@&zfp%aE>A9JD_pL`f{ zkzO3_xAO5$zx?dz6HoisZ*B#9&eBF`GyU5dmX+nGuIMjZmH0M)dq7k&Ytyy6*9#bF zjgh^^?{hw5G)w+^aRc?V#hdulNs~@j1UE(t0ZA2XzR~Qv};KmSp`zM?>oy zeEZTicaKh~p>_aiADKxwl zxu56C>Kd;_BHL*pA|ZSRoIp0Fgsn-L2pofC6ljV)i1~1B?X@*H3{rX`a%=Rwrs6)G>XS}#l)&#e9`90X9z0~ zyhZ!`lhy}iZZwOqn)5yS#{~juQTNsykyld?<z8>oD;Q*!L-MA!#J7GAV)anD6c#M+yDm(st=*m33WtJ3n!5 oOL*s?!_%N1+w8;9YpLxMZ)mTd!GE_Y{B3_8IAzd1UmNtl0jB~}tN;K2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/04fb6b301c5c19a54e4d372a7c17230ef236e381 b/fuzz/corpora/client/04fb6b301c5c19a54e4d372a7c17230ef236e381 new file mode 100644 index 0000000000000000000000000000000000000000..da0338f3c41340812126528eaaa68702610e4a3a GIT binary patch literal 624 zcmWe*W@gG{VqgeoW?r&zrJlI2#x}aX-F?XUyabP$hp5%Z@0^@(&+j^*&A`C_pOJx)fq|QWiID*WxEUBr z7#Ir~81oF87_$r-KP_NpVq{`s1%N&TE9sg=tcUYqGX5F(@+-U}FcFYs_wT33<;p)#;v5Ju48+f$DZCSRwew2-J42PU4zVqY qEXT`NF0+Vja?p;FmJ_&Y&LrOTUhkbe&!-)eifdU;UwC^|Ydrv!S>(_F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/050ce342c2284561c296fac3dacd4894e3f80114 b/fuzz/corpora/client/050ce342c2284561c296fac3dacd4894e3f80114 new file mode 100644 index 0000000000000000000000000000000000000000..a199e3dffe8a0065318f258760f4e6c94d3d28c7 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=HcYy7Z4N@77-N_mync_E|Qg#S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rKp7C|gXuqVEUCNUj?6_(CO?j@^fM() z-20YU3(r;x^x~-OGhw;=eyZf=vsTX12HIS?pTwA%87!F?7)+U&MeC+@iuDNQyS}e^ zz|C^UVfytbdrsc_@08zj?t8DWX)VJ6Z3YHjkn17d5NG)R|Nno+yW9+nHyIeOF)&^> zXkt8X(8O4_fSHMriItP#rVq<4&)WU34LI4@wc0$+*|IPixEgXBaI!InvakuqiK|{;$LrLa$BlNY}etK8%xxF zwsR!#y3Cre%;JAGkAsI<<+nvZt36j^A5U*C?+5J#Fyecs^r<}9n zz^*iiva?w|L!(+Z@NDFlXj!;*M$93>vxQ46 zZCmrDzK8vseQM^a7NPec54KHWFw=go&(52FVr%xTHPVHjd7N(vNM5)!@yZRhrk6QJ*y4Idfq$`@OdU&PMSMEL g-y>nd{!MQTZ}RgUURwTJe#>VuW<~}UK2ZJu0JE4bumAu6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/050da9c3acd2b913b851fcda25477d46458da943 b/fuzz/corpora/client/050da9c3acd2b913b851fcda25477d46458da943 new file mode 100644 index 0000000000000000000000000000000000000000..c407900d5aa9a0638ad3fc0b235b37a8a0ca9187 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=ipT5=HcYy7Z4N@77-N_mync_E|Qg#S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=r00nX|1`&V}p+=w&#Qy*PfBlhTN!<;1 zWG-ql`Ehh<)+3nj`o87?H_IJ|>DQy|IeG8DQ-066@4dp>wG0Qe85npOY#10I-Vg`b_Mh=C zHv{8M2F7a)jF%0X7|$CtF_tZ0W@2PwSwPBwO}Hji_*EQ|)OhTI06 zY|No7Y{Ky(=Kc>&b8`a^xjt##T9y=7ckGLg(@Q4DP{U>BZ?n1o#|Wp@ut$dY*V~xf zmTD5)bvWk661AW096`J;vnDLF_@B+=;9=HN`KjZ|>e`eWWlY6(C$dt45 zKNJtIN{r1Z=j=GJ>!#Zyjz|6rN}jGZaK0V==fPirKJTWB3M;KHo%;WuK?>v%21X{v zh9a9_WBC{HCt~FfPD?h_$vv;9#Ccv&W@h2~3koOLZvWz{ZCN1hUnD!5)iX4zbpy{v zeuXY9%EkDgE$jH~g;*}){( zR~hWSb@KVut5iSg=8L9sSWhTEEw;PuagbPc)@7fs_jbJ9toi<&KcC&_uQG>h>+F>x z*KFh38*^D)$@O6Z15^BpjhDq59ZnqJbW*vtPmak-c=Mm01-C>>9$&7rKBmE%?!%mO zzonUJv;NH4(YrFYnk7dWZ<^fgb&fCK=FDIou5*oTH?aq50&1XM2L-CJ$fV`rK{twB z7r7QiomVuW<~}UK2ZJu0GkRe A1poj5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0515d43171ab96ee00ad3c9e834f71b1c2414a27 b/fuzz/corpora/client/0515d43171ab96ee00ad3c9e834f71b1c2414a27 new file mode 100644 index 0000000000000000000000000000000000000000..f3dbf77573bfe0d939ff2bcb9cf8cf9329bcd1e4 GIT binary patch literal 903 zcmZ8gdq`7p82x_tckf+$Z)#gsTQV`qh5TkYAIr)Fl^$Z$YDz|#W?{9goRvLCiM`aK zmc4wCHq7BP3QNl{3XQNtv{HINPc3X(kl0o?W(DH;>pLIcIdBeq3XC9{0*J&2QJ7{} z-UPltC=yGgGP#eh-$aFS5)b}^2O#GVAb>ysPym1uK!Fh!3jy;1vw$(NQXH|OPvw|G z6eWlH!(Zo|FR{4I*C)2c?`AF%G0P9mPskq@BP3*i_~>Lr!eS#W@a4s<-<%N;YbI)? zSQn<#k#Isn=Y;7~lwzG;rz84*bev|(sK$ykW33Sb*ove;tVlpv5&9otJSdGupB)*4zgwlp ze{D4t&@rcXUR@PZSkN8aYoz%Fns>|l8zcD+cgK=%a|528`#3O^<~8%eFU8t5Q2#Er zB{;e2c3XlyGH|CoyiPP-o9cOgGyiC;X76{ycm9J)*}-pdZ{vzAN%x%E;wigYpSI+7 zxU1cdHl#efNMbTk^K4loV;Zn5f1TRW*Hkvt?tYVg;Q6E)>6sb-f+2w{hQbKYl_Zil z+O|rH5J%IPV#g=_cA%{W0gtBhMYZnLek9J zH*L+_v19Yt&V{3$BRKuqWn=TW?0t#l`)Y4#Zp<3CT?$tfed>wl=J$u4mAra+pzWAi zuZoEGSURVbROlUT+ad(f%T7x16jxfsW9_07KH3#Y7qWgkdw$$A$xUlM{{a92001KZ000&M000*N02TuQ0}BiQ0|xDFRLiif7Dp0t>#TI}@8CQA!ATjx+?_@0A&|%{oIHFe?ge@?R7;PvJFfZBfES z?l^1vT8W>fuAd|kd`lnZNhoGf?BrWL!T@}@ zp<}-VnA%7-997erX%;`I{Upy{gJoSK+@r0Q9AfiUAca!9p4BM_aF&*BXACt?O1zi^ z@pNnm$`~PhGLT+IE;i0P<6NcwZ&cVZ%k6j-Yd)Yl~@-TIh9F# z>XmBc71AacnEC|}6>^SRimJpdtuq%51WM@7R{5LCnW}^m?^NKnk^nX<<_BZ%#mFZSUVKPwxB?N5 zc~eKVlh3QFCGjn96=euJkaNoxyN2UZ7HewLO!eNl?XxNG&QA_L^Yt9UJ$^qTS**4S zyX|*^nX8iE$O!(7;;Ci#a5U=2i? zkfu2QYYae0HjH`Kh}5fnGZd1iS5nw>MWRJ=TF$PHgQMjGXn-EmB^lb6`4;D)W?Hzf z2Muq?wQJg}B60H!L)s7-(9)6A*am{>Y%&^Rf-TcJQNTEhX8FsQ7BrV1;rwQKtTv84|xeeNmY>W5D|)0 z5ig*%g{laGpge`hLn>7(ijQ9E17#G!RsofZJg(_1Nf0R9>Wsb9>GYq;WY5mooZXY} z`~UC%mWCq00tbLOiquyQsfRuGt){O^DBCc^Mk3XsObC=S8lNMQ7&qes!4TndyYk`^V~ClARZ2!R0L zN)tIqBBHK%A{A%jYC?rd*g%#-b_oyVvRrt+Jg$irWMC)B6g7u14mUE4%VW9)`3D5? zqL|J+KGTus59zA%CT7r#ZOVq`&9Dr z9-)&N+1eY*w@ez^p?EHf7TxmkCdXFJ^89CXMlLpP3e!*0KdeXRY8;oj;Tg`d zePXz$EUi>`?;2W9%g8dDYK;=^5_R{cj*^?l15yTXC<2gtXSfP#5>Z!81w0L}ygT|v z@kLpo0)tyMvQ8LsH2UYH((%pI)WNGk+K!ngP_XN%cmhNbL?nJ-1TXo+(D-<;q$egc z>!wxk5Ov;S^`?{(?V=ay?7?lD0@_$tHJX}tcJ&H(c|9;Ivd?TyW)^xTNE@b;m;jbD)OySN=V9+??~k7ZW)0fLwzDqzwv?&60&g5>^68BFZdEw!dtJN2XyO!T%ApX2CpNRsNmwReGya zVh9_(4U;8oH)WfczmKuq44Sh|CBtb?E>0>1qcbEGk!U=r%<|;xAyu-QID{xWzO5)C zgMJ9`-G)J3XSrWz3ytaW`%)cmWN)l0q|1LadZ)0Ee(-j!2lD7<_A#>BaPzr*`ns-d z3HG;W^EC!FV+Z!JK52{8Zk$HbqQv&%qOAT|lb~P~Ek?%G&F8_wbivgr{FPiebpnNm z0x-c}5)rW{_mhUwS__gyf-gE9?8!6^y=r6~B-7ys%)73aW;yXyaO z;x8dIpO-JpNDxir?E{j;E!krP0FVa&xOU2RG5{vgL<}|wgBfp99IC6UiMAEF%GI3k zP-9MHNR)9DmlGYy<@g$LB17ORES)j&c5o%MCE{H*nE)<<7DQP?B0?a@;1C)skjION zvNXmC5Cqi9{hT;&E@BhC&B&_0-c#uEOQet4SEFP$Hz7$>Ol`z z%uS1UshIL{rHo^|m)pzJp-qIUoULc;)X$V!ZX7eKOU>ARlph@6tb4ILJ*!!#=X>_R z>I2GlrQw6TESlA~#S1-8+8vB3$Q|u^+}ip{EYIcAtylh0zFmtu=rt_6Fh?P8*p?aG z8Mx_J*^XOdfqk||7AN>6h{t}v6IJ(y~TTB)v7+!yI zS-?+R?XyldRFScvdo|Pj26iXq?en=>ti>st%U69$n2N|;MzHo-mI6THu6MFjl-RO5}QNkN-Ipuz^ zIMO1<`TSyo)R<+){C0xV=!q0T`N9aD@Cu>*b-ia}%}%vveYO`_`fPuxXz#u@ks33W zw0G+fohL^Yke_h#(v}Lo;*6@zL+-0_M;iQuYJEKkwpaEJhV?8@cHv&lGw1mpFyG&> zSo2PWcU@|4fA@Pfl*V#e$*m7sF8{h|{`Z<8!j$tPqS`pz>UM2C%6;C+oV7~}#;pBE zUQzveTswoNyS@ z_Xqt_dZp!wPFld%&NLK=^_emX#uX6&4cD^Uimf~1l=2r}LR`&8UGMc$&O~W!ensAG zrEgkM{Patu-9=HC?(bxtFWyOHgzURWeO60s{7Ei5$uxP)t&66L0>Hf8eaE-*$x<`x za-*XSUzYAC4XU2BUK{`ZcbwbwdKE$^HpzPU;q&N}x?^?!ju_~?rx&}Sztfr}LvcTq z`Ezb}m`6oiEN82IVUB-bZGJ`#!$u*yR}Or&Nb8>4FPVA<4@*tCD%eUzZZ8VG3@QdU zDlT2Sp`Gkr5wR|3f5gE@v$re@W^Gw!Q5Q3|EEPJr%C8%q+3^Ski1zeWM1Uv)C_u>L zWo%mDrj6fy{EeHRiEedj^D{wKX}fX8XL}LbXFC8hk~NkiA#2D4S@%ScF|zuk! zv^1sgm3`ap$>DEXXaD4}oTS|>Uncw1w~Q`)vq#B_sah=5MDP}L?Z)G5B{ zWDzpe6rJRv&SH4X>Pw(}%cLz*_i~M6D`&DN`@boeynNgO{*xs08&u)fl6j9FM(t0@S8*%Sxp^1(D$5j(8Q5ID<-nC-utmDG z7Uuj*f+9Tt6f%UNTo!~7z810+H3tZ}k&tV~bcTGUBZQdzee;>vuT6yN)S$a)neJgwnSe z5Ze=JOt4Z}OL~eaIl#WLk1CX>LpZJ~rBkr8(;gd|Oze3fFDT&fArn_B0`y1T`wf;V B+ByIL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/054b73a11025b29bc17deea05194cf3aa733ce05 b/fuzz/corpora/client/054b73a11025b29bc17deea05194cf3aa733ce05 new file mode 100644 index 0000000000000000000000000000000000000000..2e2ad09214424edddb3e2f95409feb411d441597 GIT binary patch literal 16645 zcmeHP30zZ06W@I=30F8`Fn|aKP&wq-Ku{2oOXTn<6;l*Z5|_G|k&KY{m>J!fZUXZ|xQ z2S>mi1Hcu>Q5OWNhXA095C9SgAOJ=HaBv)6)&cMWfad@_jl}Q-62sKZI0g}>1ujr6 zYB4nIasul-X%PAIbdVMU7tjzJLx{&lEaF9zsZEtdh-ZNYkR_PLiVxe6xsk5QCv9F| zvKuZ!DnDp4V#|h(L53zd2OO}hd@&4Sm?i)~!o@HeMv*q4o@8W6Jtz_Ig&2kvhM@7t zjDZWx9BCYtsVIoxf|(;tJr|e^V%2DLX%#JohO90g2o$Ywa705G0AV<$_^@Ll=HDq* zvjNbTF24@IAOZjY9e^(Ycm{x#NDTKPF|?4bKSW5Ep=Fm7nA5Bap$;7&7O&IBJ12dl zD-{ZctXx+jV94u(45U@G6isJ;syr%42YB{}0A(-7va^+V_P-&F7(t;KG9?yPV8*5v zR)=`gr_sn!sqz&68w?x33M7VQh)YNV06+}Q)k{E+myy-J%IjOh&yQG-edg2@_eb%` zn!8pjW_%jL!Er#-0|0QWagav?U=1YZ2vhc|rCrxq11Ct_p3OJA{Nh;Brlnh>4WAak zxnDaO;t)W{!66{{gJD|Wc?rp}z2t8>K>!ToFE2%79k(0gGnHk9P6rC5$Y5hW0wvuW zniwy12o*(%goN(hyLT_cuPoniZ%ksmQ%usVWT#|dOiGe4Cdx4;X%-q!NF$dPfc%jk zgC;QJ0_1_*8Ja^FkWSaYAje^*NHjZnxDzIZ5bV?WWwA*g=#w(v(euE8DOI6=Bt`Pq z=B6y$7hRF-a!ot_uw%wk|Ds*1Bg{8m_|1f~u<(k>rkdaAkG(9X7^jZ;`XP2;(yH4V z(oi_>g$*rm@#6l0yFMRusP?wcPSd#GNA+1T`>Fo2;Bt+z*%4t+_rxEff3q>;V5RB) z;^FVN@+)&!Wqy_Z-i(leKi>E-@32+F_s;j<`q(g_IPtM4kK_4y(cmd10iUF8$$x(R z_K_oF7KlQRUwjdp9Ch9Pf_a5QK*HE6(KA2pd-XHt+|j&nv2|vn-J5_(UYZ5)&!5+)@GMclBs*cox6WNwHkojX<(E7k&K<(3uUv@a|ax(0_(qAW5x zbbu2}IP&PC;yze8C-0a>=4#mNcjMUp^Z}b&9gM4{#73WO8dt-jInLcZ=@Yvo_q327 z>}_+?MmnXRqK|vNW0|;g@NBEZvZ}x{)(=__kK1=JGIRUz$jqnufs-aKW~a3-`6%N{ ztGizg(!MJ!STRDpHs-mp3A|=3Y^jc}GHz^Gdo{Mu6P4@FBE z17@xJk^NvF<)FyASNSl+s4?L z`wCZ84Diw0a7zcQwX?Vy_Qx7)+u_A7!oEaL+ru7hi?A(w{J#E(iPKMMPb!=J&c^k# zKe?%1D-2?`(F&wQG1W>GaUApbi0|y;j9d{Pg&XPeh9SPQGoe6b7G~cC>z8v@uoC?n z=U>&KUGm=WbGVn5S^Yh$My;wwZs`uGg$b;>XJKO46iJIzJ7ScQY-?#Y({Z`MNh&>K zxxq&a7Uw z@8_JKuu&fh3yvuX_lc78=e8A!i}g0H;AW2Y9=hw{^c26P5v#X}rp?&Ai6;QnPVGm9 zz?)AD?cT$d1a1_BQ4nE=}0z>MqA zKknqiL!JS5R!?ndI8pk1g6}%|1`oZ|X}>JE{KRXNrY3`8!{3fxbzrYrzng@m_Z_LX z)z+u(VvtZ)rG`?i7D|I)%G)E*rFfwO;Xjie4rR+ABuqj=J~srVbH^e?s6=%oskZ)< zNLtBf5(AUcHNqhzz#uKzLnqX}M-{9=4UQ#6o}dQq3ut8HZSgv1l~xde(zT~704%Zq z;Hmsb(KrTuM0qRajp6M6EUZgqdiCSQ338m3V*}>+qkUk;lI9pQ~6Pq06 z>^fAP4eJYN;RXv!+~#B(fYCJfo0ZQROBeaPi0k+53g;_M^sVgWtpQ<19v*ss2e9z$D^9EMF&#Wx$hm1-7o3Uva0&>s_$278#whTO_;TRqO&?t7l0}5$rZ07Z$2mCWJbi~b zIj!bYRK5L@*5>r$qjr*UOaKxHh5P=jI=Qh=exIrHubvuz%BI%h z;9vt|3*(19wo3`6oEg4DC z7=v~NRE z2@=C1B!+#Z_Bh1auoUU>m`Gc?!SJNyD49X+&Kt&aMb3O)xRI{&P^H&)Rtihb!MnYPr+A$#&5N>vx}*NBdhgCGFH3Kl=3S33cXS{)aBFI+yutj$;6eWA2*2 z{=nABtUn&zs58ACJ$d%vg1I1gM2S~{n|)+DhBr%~`Ylc0+=dwh4!!JI7XR3p`=(Xd zoBPL3TD*URv&W7}M{D`b@#gnd$M#)THfql0ymKB#{5+YN)HL%g~=mE}1k?M7XvFh5#^c+9%I+3OK$i?)Y~5!t5rLeODTovZ5Iy zPL^SZ%q0U`B+}X8*Tk`8M(RJhRR8G_ALtVbk%nWCfrd+!p$p<6r!3NL>pscx>0Tlw zMM|d=Ax{dmevxnVun$!AU_onP?Yw3@n^R^e!EUX0yDM*xT+$Y@~{qt2T@@i z(&R48VTsjQ!Uy-tglFv$VrZ(j!g@M~4L`y)dztmfj=X>CgN}G{cFEWU=mu#7TEDh*tqO)?Dkmend@eUa=&#A;?rt|!PIvpzM^3XYPDIpRd5smh z+Wm1OwR7E(zE5Lg~~;Mu2!{OH)MwXkFQ2# zbXAt%{|Z7uA*TdUN$N8Che*gvk!=3}u;n$mVy~HARbmahcXdVDjR53UCraAx)1CS3O4~d}z%05fr85jmNloLx(hY2r4TDl?%@2nb>cMk8k(qzKC#()@~&EboE31VcEh}Nr?1{^yb*MVGD*}@wYJKPWS8ck2*5c2CLl3< z4`n})A~XAxx%?qE4PYT_U_?c zZYVw)cD1e{ZIrd4bB$!VjeF|2N!r1zAyrYjQ|Xti)6{1WXsFB-pV7+_sg9Tc)Z)N6 zie{IwYHfd>r)|oO(JdcY-=5c4ux7`ZdgjM9{q6S0PCHrLCvAf7`$csXFiLA$i~Y(O z_A5%#A4RN6(W{c!ngr<=&l~dOgPVE_#Q6z^eM&QCxdjhOuH{DVo@@RjLjWIgQzMdTUX>IlIb@hy#F-h}Q zXSnse202l6VR$A3e`RP5JD>xw3V@XZY&Q~P#Yl{;kqWC8_?}|3;_9gyJ=fEdL7vh_ zrS`q~`+v<7V)kb#Y5N-xWj)DAT~^5Wwpk(00yUSMVs!wV4&YP(!;u)igR=jWo^b}I zBfoR!uN4o9Nm+76;Ph*($^p@bXF%r8(6reaKEn9K7(Q2e;_;lF$$yBvh^73hS|=vH zf$Nvp9vi9ilw}+LXyLNa+_E2F9C#5Dw&e7)rV#;Yw#PTQ>KD?W7=p_ z*G6$j0w9nLp@d8y&0@&Hj=LPc^_zDx(&uibi}SFdvi~07rE}b3c=qup94)m@u=@XJ LPVq_UmF52e>^z4L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/05812834cf1fa0ab0ee21ee822a1161fdacc35b1 b/fuzz/corpora/client/05812834cf1fa0ab0ee21ee822a1161fdacc35b1 new file mode 100644 index 0000000000000000000000000000000000000000..fcf7446ab2fe0256b38549b13b6d233019276893 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z|DA!6fkBypfkBLcfkB*sL5!J^nVW}!nVqr0U=RaC0&deJAU_CzE{Yre3iNq5S*=vK zcwf{{QHDu^Hnh*AMT zrJxrIz4)N^Dhd{S&=y&!2qHzP1-&2wMiD`js2~)(60DD2*XoDcd%n#+vuF0q?Ei0X zB7#6Z7zp|VLDqT)_>j6Q(;qjUp9o!8Yq|LGiq8BxvGyY0+hV+B^CGB`20=!zVF-pG z69|HAAqdieFfc?!5WJQSgvUX641~=Ba%={WBm4>k17k3nbpDI&l>K`50Rh!=$PUbY zNq}J;90Y>sIzS6W*jUsE!w#n#0Rz=Q+ekY=B#IUC$U*U3ItAFOjEK?vw?-*X9M6-I zeUqeokys#2AqOykr3rz~qyvTr-JJ;-jCCdix*MP~+<^L92lyY|N)xZ`#}Nu*MB;b> zhfV~>s;xBegq5PCcqvB^PhKnFZG9UT{{6U2z&v$ac-^gAw^C!(0aLl6EkF+2ynjv@ z2O)A;4+3&n8zYBd=uGhLgHBR7t}EE&%Q_p^d-a7)TpPZTkCGnIUf6xL?tA4{(l+bZ z-O5^4`z9Kp^{1C)yg71b5zGI!TyIw9yK~9OhS|KTBS-hGDH!OKUbZ}Poy7>no{Q}q z_^i@At%pCaX1w6=5kO=`#r0?ycV^>CJ^CfQp|0Qqwfpbapti6MWX}zW?=-YIJ0Ch zfVbx%qr|WM;^{rd*p?Dq8STvHrS~p&9HWX(fsLPYj$!H>HV+fdLdmV=uM+aCo;n^L zKZ+46ZJGVa^GV(q1cu;BIlLUm;Q(NPB5Vr^R(18|jwrkg$N&C|=d!vB(Prn@$!I`V z^;-{yUt_Td21WrD)pSH*98Lp^yArrBamK?cz{xECdwH@x`pNY-=fm;qDZ zh(}Rv7z^J@!Qfz^iK4MGJdD8rpqgTZwFip;rNUNWoo)3d!i3F&_fm}(5ab)cPzU#+ zun<+AxkZqx?8g#Rra>b6LDX{&vK`zqYxhqaRrmloAz{nJ_gz zaK`TRqn@CtNXx-hD_4CMueY$!>8QZ{Zb?;9FRS6VLt~*`4fG`jP7gY1Zimh|CI%*uFm!One{WQpGuC)Bhy>9;k#FRxmh5Y`+|SerUno7K(7g7M1y(?x-$A7bGR0kn+>0X)$fags!;Vi1*X4oGtlGJIa(~5^QU~nT4c%ddUTCGfzdJ0j zA;;$_DZy;Fe|rDkOHXsITaT@qG$7W65mX6T922Y%T&K@F~6dZX=8bDUYtwea3~%lBBdkT|6FvMLtWG0RoJ%W5HA z^0%1`FZyvX!%qLQ!{hVCWP>Z72lcTPiZU zmELF3yrZ9jLYEdyf7{}`CB3gq&U2D+U1M0otDCgXbkJT#9rTJT4coR8mz&n<5SVpS zOSrwMomoC1A6wnWj~ar$G$DWW(mwCd%C@S$>=uG(?Jgt@@%hiIlr(G7RErmF)fc%} zeD@{prCfKP3|;}*K51s^pX|5IkZfP+N^OZRxTSA-FiT>V@NAT=J7$7DiXCH&IQ7PA z_`KNDl+d>xQd}^<>1Jjl6rN%(6&7fD?;qZzWuv#@sc2?H|C$@ z4=7p14>lTV@!k5oZVmVqt#_C0lUZHJ`}M@?O~i<=dLmuZTbSJtA_HC-6@NdD)UupmLHB&D5O=)6lwl;nJ-NizWp~U*+ z!mfsIx>rnA`PCuAE3Gv&ci;X8EymOS2VC-=GLMJ2`ndGO!;0pOM^8P;7|OBJ`Jy zh$&*X8k>0kI~VVJ9v3v+vZ6~<9ua{us?qUb;^v{LH`*Tuve9?iS7Z>41Nl>qH)@K0 z4d}Kd>xa6O6qI+pr~QwjK~GhHjbPXsivxLD@azAAfftIft<-%9pj9|mIA+_wsnA@p zkQ&PqNmaFDu8|N6B{YdTdAJ;Ptqz%M00O`=;D=(_7Gwx~0zCg{WH2z%S+$nLi$+s- zmhUen=1D|JVlGcY6Y~;85`k1CPWe-ABQhEE#XZCLkmW?fY=G9tG&{yMuUtt?j~Qzk z?Xr43KHd^?%g^J~Ign=hGduHNacyn}r4IvRD!1%7Yt$7myJy`7$;`K&Th8|mu&xhCBjz$|WFxWCM z@G>YfF#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItkli~LUAHCHA zvv~}7**LY@JlekVGBUEVG8niTavN~6F^96S2{So{8VVZ-f;b#JT*3Ldsk*@>i6yCq ziU#r^K`tH%&%Bb137VCLlXlNBV!{2Qv(x&C~;mx za|072qd*9k8rE2qq!={LM|M9WD+6<5FM~m2CsSi10~9bZ)?Zi~+3mV~???Cj>Jf|# z3=He0tF}#9&~RXjeA&cwH^U18E!&mk3X~@nop_mBY1LZZz<*?_Sm{x(LZ1`K_FFzB z&(ZRq_3QM(!aR*ujRoo{88YkGuSVzVI=|JPu(4;oO76Os;#RB&_cMqw8-T*yfPpc! z+)$W_xq*Rcae#rJfh-$ys4O3g7>h`E>D4u-Irj0%r*8ihwl8OS>8;lF;J}nsW|4>& zYrw962c%z^h1GzWk?}vWhgrTcFgG?bSih*qoqEkS>$|X|j`X39bxNz>^%{MxDNH}F zdr{`l;r2%__jSfRF~@sR!0b=vOpR4cOmX9+AR`g{I66VC=Nl_gP+o|Y^Sl(k66 zIw_y|Sua`b&b;^8Ra_54!e^{1npnY7C*PmyE6**oW{wK~ToI{IUHRP~=5lW0h>0{x PZBP?qW@cdF1BW*Nd7Ro- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/05c4401585d9e5bc74037556e079d0cb5b97f0bb b/fuzz/corpora/client/05c4401585d9e5bc74037556e079d0cb5b97f0bb new file mode 100644 index 0000000000000000000000000000000000000000..1777c2804c98d83121318cca1fb31fce3017e328 GIT binary patch literal 1796 zcmbtUdrZ?;6u!UTuLa7Z6k5w0Dg^|gcv~nI96Di$I$n`gR2a{e_p7BSD6+PSND!qe ziioIzAQP!z7QrD1jAa$yh=^{YHi#65h@gN@SqjFWOJ*MLbO2@$^_2<$6+_Ti9e_py zGyODVQl$L^h9W3R0B`I4oNGx(b)lXHVezijyC(Gz1dj*Mhp7Vz8WrMTc*=xLWL?N+aqsMtlwEe z&HQz(z)umgqVi=-`QpH`H&@yPsrGsHCl*=q&E=YRLem)DBaX!ld(PUV$W=xj`1VUp z=5qcrvke{hY;y1oo-@C%C1BZ5R!T{)XW}H;#L28 zM-X>|am&2pmwctFwIFQ3wRW|vV?~MF(YL}jD=DyyR3&_OV-nS^*Vd}qq(TMexrvH%)1j4%K1{ZLrzyL^UiGzuQ`7h6kHS^$lQ$Za z1~%(vIMX>658ihPEAnfiDO07$7RKUIdvGDd_gm|DR&)OpcYlz${k5^7C|DX_f^eVke zLYGSRORSoU?$)j2Q9};h3wO;`u=@Zefl_Qcl%j)ktBV;n4}LZSFks%&a)X&9NSxhI zvZjw9Ga)uAi^+hFYD9-@^8uj+^KGv$om%S$=%bx%lKc@}oRQ=2>a0jD?j>0s*_mOQ z{&Iv%d~T#M9QT~{%;`a#=8D&a9qIj{V6fTjwwtMSa&kS}E4i59`2~%KpGF!I;@$ec zsPSK@#$*clG;h98l#ref6D8u)R%VLg(}W44Y_-uq7G$%S&=o>BYcw3l`4~bkrqM?~ z;|6H6HzhhHUg1_X^+vYv|$eST9l-sdru|3Xcz-S@v;66@~J zg3l^E#u>slCguvN20J6G>qo@{1@`(Cw!I@e#_OtOzm;D0GGD-F8NoXAe{1L`0k8 zkRWMbdd})3FQ8=P6E|Bu7(eaUeU5b3w~tOE1-g_LAMcsxhHYC*n$^9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*?cxn}KO31JgDJrp*RTOzRDrm;@IvGcg)4aWWh;FfcIi z<2NwiWMkKA^EhYA!f4=X$Zf#M#vIDRCd}j*YA9?V2;y)Ea~b648t5977?cE_*rKt?tLdSBiy~pXV7EJT^FHPzsV(X2~#{ccO!f zfq{V$cdRraML7@1T45Ge17=1>%*+hico-NqF*C?2=*nbX_U2bz!&~O;@0|xvSnqO(P_s&b4}{KIdjgD3v+HSkYjn(ls4b+k8SVY X_J(J3pJbF=(Q8O}t5_i`c+?O8pRp|f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/05e4189f242cf7683f1c9d7caec8c8ca62b8b313 b/fuzz/corpora/client/05e4189f242cf7683f1c9d7caec8c8ca62b8b313 new file mode 100644 index 0000000000000000000000000000000000000000..599f9184f3d658ddce9c2d539166d4146a351973 GIT binary patch literal 1168 zcmWe*W@71PVqgeoX8Q0sX8(@lC6A|MFT3E8^kZANbX9QUC9O4Ff}KzJ zU~cSXFlg*#YHVcq(&Tgaccn?gt=*sIJhp^3(wg! z+jCBSr22U=)9LvhZ4o{JX|ah)>lfWWJSX7-^T7(kJ7%F(5}zVp$xP&CVrFDuTr6uK zZNS6E94af!!fL?G==k4&8^q&hVPR%sZ$NfEH^}vk3^nhxXC-;<2-CHUeVVy#=9>!z zb9?VByBhOYP9WLj>eg)DS6i;dE4|GAE4{R{jq}xeW?o%m!F84<0f$f6{@Q!9d*j>l zdH<#Sx?cT%f5L|=H}EUVx^-GgD}%d(1SNJS-I$)@Dq4|u=fWCw-&LOVyi46v*$nZw?sc4EQZ%rME!rA3pP zN?OXE-<#LBXZ7ZXb^o}odtK6v`uVq7k?)LJyYs6XF_WE44_>L-bGF7ip+M2agprX` zarxzU?&|xcc2-!VM7Y-L3g6Z<+vaEC^+Bt6mV*55WS8;( ztMobU^G@bG3=GSd8Dtff{4lM}E|*ID5?#2!NAmp99LHOA8o^D*t@qcO>EHKc1tz&jr2PwEu^aK($z@7&9}2EfWKSB{MT4 K6LaeugKPj7jla|Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/06115f4347ef3925b7323848365843e1f8fdca15 b/fuzz/corpora/client/06115f4347ef3925b7323848365843e1f8fdca15 new file mode 100644 index 0000000000000000000000000000000000000000..2671e1458fc7a3498beacce707a947ea409c0312 GIT binary patch literal 2952 zcmcJRc~DbX7RKMpOTxY;23Zr?6he}lK-g@ck!BGU&~!wRVGCi$KoU?;mP9}qL_tN+ z0i_E|5fua-p#>2c&7`|4CpkNeA1^RG)E%l7{-_(HyR>eBcCvR2*hA|ijc+%B? z3Kn6bu{e}Fn~noIvWc>~DvOuMrLctILN0w7Aj*QO>PuH|<#731xk6H4Y-Dt-P(TV0 zrjgbPBY}yY2Hg(WF>D!t3G6_So(A0k*fALM)BpM!;h$e4I==Y(VGM+b3LzlMM~Os` z6YD=gwwpb(9cNI(?JZN;qy+Z#d=F{zs+rqjI?k*QiG6{uUm^V}e{%zqii(;CjMX z=X+Q8CZk&JO2bX<4{HZ%qW4Up5Ez210)QVd#v*KEO*8?GFG#t6wp+PXlgMp+zp*vp zRLY~=I(adT&Cp8$Asb)7|C0skvi&$T1|TpjU7RpRmaqs~Ikr8qWWXhE7N>7x*uJOM z^vp~lkl?C;0#DokgjiS5-a{ zH2h4Msbg#x7I%{vJ5A+S{&MV9e7fpWR$y5Tzj!-3lenL|j;N-4w%lAR2XDZp#5cdL zP-##O-pt@;TM`f$LTf^D%|ZES2+EafGK&HijQucDTrjv$yg8a)OQh7crKq~~D-nil zJ~*scbuw%9bQos%7Nw8$qvy#feBnkH(^u1}nQ@Yaxh+-8I}DihD_(qSWz+N*qoI%& z*JgX`hjq+1NFC>P8bAKj#Xq*YIs*T$4Bl2l!^<83CLpkqqyaz;2xLs6yp8#L>hGdU z%@GEdgG4m2OjcPE+5jvC>R44W7Uu9178h6z10iAGvl8p)dh#IWh&RAumpVJ!%VVO5kY=W=WG zw%`W=#m?9&@z8?+pO$>LDg7jaJzkkZ`#Y!ddzMWGeG1oTWPF!jDO6+mvrqJhBT6R6 zH-}z-ipkdP2sz}|vc<=7hBa$G`l0y6l8)XPmd1?l$K&4*X0%qu^LDr02_UWj$hVJ_ z1?v;Cs-3?%<$&FHWsMGcJi~l&bnYWP`NN_6VbfIKx>bGMFFWE48gBjXPh>q_vZjD2 z(GMryuBdk9kaL)^+#HF1rt$({*O47OEbVM6n`8qtkL@JePr3_!1 zQ0~Hi>@khI;MePgl$IiyZS{jY>O5_GFS{l;4$fFuv}-W)D=I!{>ZIkHICR$S271-BOr_Ny|k`_K@#mEWxnlE9Gj+l&b~9QZyQY zU@V|wmC0BbgHeJt(WZa|Ot40ZIe_zYV}!yaXBsVHJI#5t}!AUzkeH{-6gPtHA+gq`iTna8KalN$zOLPwy#>X8o5S`{8$*IhlBC(+<- z+>K-)Zoj-w%UGsACvm2&Pu+XN{Xp`5iynt}zH1?~R~=04+99)Sfub};1KK7>as&oR zZzkB9lX}>f(UXjEo5#^gu%f4u+};+nCk<|aMw<=q*&CQ9B%EiiN+?osIjF)_G1bh) z9&Z;cyEht|JyMu!>MTI&!}it249~chJ`dAXiLoDa9vJp0+2SBNAR;yw{&a3bBq8wd z!w|bn3G)Gjh=3T$0M>avJuYY%g+g?jM;8}N){FfX!#>~V7Y!C&TP_2%Do)8WIVCnK zd^?>2$TIfTaOU$766+Z!h0i5q*Zp{p2pc(f<28PV3)h z4@!RP3$bTC3-;ej`4nJg|1oN`d*2BseW~kW@(_Rw5OlTWDDoY`5(@FfwgJUMi=II=ChOkRYA-+}+b!1zQ}C1y3@ z`n^9D1O*E|);=_3=sTV%wZqpO?i;T%!Yi-7)cmaY)h_#SwWs~7=a@=$Y2m-HD{}-lyRc`KcK@($^LF1mBuq z#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7JBm-4(-~0wL^Hs{z;KqCK_ZbwtGa)ZjG?V& z=`*)qlht2Uy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm z_g_=elYf1c_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuA=8#-* z$isO+9@2Ce#UVHx35=a|@+_W{M}e|L(xMc{lwnx}ArJtx zH<5uPBI<@GQgOC!CRC_^4Wub#*N8AS!qOu~K#f}PRbLj5D0fE7s zXu1oBOLyV~Kn-PC6EkSWG-X0_Xa+r%Wli3PW=y7N_}0sCrYy5YyiCGZlFyG20Gf~i zV8Sk3LIN-_Y&*hy;4g4~e&xja-S$Tt1|80lJho~#n3v`(NZEIIN8@SD%~^pTnOvFE zTdl1Tsgo7e))&ULOdj4Le=eIA)B5oyr#6;#!82C=qE)%07n?SP>nH0U*3)3C9hbV{ z6~VB3Vz{R~y-auSYFcmW=rY?HwNmyHRgdP*(woNvQwMP<0+0e1xDu)pQ8#rtJPoh7 zJLX2oMQOgACcAoc9Y6GF%umT>!oyV8!K*;pj+rM=u=}Za0z?r+Ah}@zw&4V@q&GG! z`=(XMFm>Ky)#lVv?cx_1%%N?Y0^1o^)tXy&cK7jjc|R~KcFbzF&Mq}{IJ6*k_ zg;D=(AI4EmlBEkhyB~7m6x7W&gnX|V{M?AO@b;npjh~b6ySg7Z9+ee~kJHR#J8R0! zEy>rFPf}#K&DT6LaFA3X?Y*AK-m#E|A^rCngF5C`n}x~la9o%c)o$qeTmUQueCoisF<s);%k}$g3>MdXs&>z(uW7iwyjwwcjo^ckZAqn?(x=M63jmM3h>T;&|B#kNlUIm!#G^<*WEn-;B3mvWV@b zOcV3>F}9mQbEc_iIOEO>$7V<>0)a58OlAAz&eub#=rnN%QCfJcC?bV^2=G0I!QE%s zU*+(PHDvdtIo-(FSY4zc`_b5)q9Tohx9dESM>lhhkyS=o&J}2^>)w{=c#Ae)ZAd+C za3AB7_9*S9X*4ZP>L@AB9uOx%0Kl9nNszaa7AxiE?)zY22Jh+={)+CLI)Oq&0hr`3 ziHJCo@nVD^I4$t(u({7_%lBGhxp`0ZT#~{y#?L3_dqoRU#%21%=P2ygk@zYHEmfm3fLatcWmUR#a%TaWtD1 z6UAov8L^^5;Yuu>(eVz@9@-J{Zt8RZmp}`mv>_285TtMjjSSTUO znl~4*joD^o)zIL@cl|la*X+x*nAAG|+BDPq#nUK(t@?;!cfPhC{d$pEF`d59tcp^ow-ot?{6K zyCa(Q=2uU=9sb@Z!c*ae6=QMz_)qYM7vqojuJM;Q5r4t(PYT1t=2n*OHT71Lg^7mO zUtH#KlUDhz(~Xla@z#BkWp1-?&UL=_BG%mx4H>l)Y9`?*OemDlGb4H5M*NU^W5cHE z4*K#@s~kBc{4*FcfyZzdx?{!(U#}>1fc7X>8{g2G)R}Z9Rb_=ZT}{)OJQAp^(ysNy zf2$={Nf0GWQ%N!efMS_s+4qTMb8%I)>Nr&mcH9x$~$_j zO`^t*C-2>QMCZwo1>`5}{Pd-~FIi(M^N{;0?9oPlzDj>@qTQ9fL*c#FDX#3R`Q{wI z1Lpf17pvc?^r=tl8|Zn@meN!~E4}qW>*ZfI&Hqk4l%INjR8SX>Th*bhN4d{AnY(sr z;kZq}=qsv!uUl6zGkaficGc=LD<8=aS5{e^d}?vp)mdO%Q0eF+d%7uo437Mvd0--Phpz&Hxdx=eFyh6d^ONg7Q7NkhsfZPq5d|1ImbMuQTe3!7v!^6+^~YW=bLzef&s-P4QPFwkYg zkfL~;%K9mZQ5m@|cYox;N3(Y>3uf(HW)T@Pb}p4Vd5W+5p4ssTd5E^8K*u@~ z9wHAQ4%=pJl$;4XX3HKCLirc@7maY(C z-@omi4F0xF&X1nfB=xSRI{hSmKfU6_+uA!`g3)P-bGpqlOh6|IBQ#P~CVRLk?x~~( znQDznc&W449%6T5@|(rd8Rc3gZxMT#tDV|dlFsbEVW73p2>zWI_#2AwYsI{0LNWhI ziZE7qOQHr9zP?^gRY))DTf2sti5XBI;E?XmNNMNV2CZE|Bk4_-5Sh&-gg6rDgizAl z8hv>q-tqFJxkW=Es1^GE=x`Z3s4=td$CRtMop8FW*|h79p`!ytEeP z|BHem{s1Us2*cP62qAo}V<{>tAY?~Dwi(?8a_LSGV(Ry|&&0lMGL)wd#h#y}ODB99 za}=Gt2MgwukuXGj^qTT-28!s*00adH5MbV!*myOcFkT^Myo!!=B4#pPAr%Lqm@p7K z6LCzkQc+8Mi7xtpy<;zBD60XXP*jSiU{|MY8)9zZL=0#7){Grw9dqIYgl~bMB7!_256GQ`+*ru?Vk%T2;~-p>oAMQlL_V0Tha3c! zdzRKFmeaU#s@4ANyYsiA_%L?_-9epe==4b)LAKj#_0e_C8N}Z MFz3*x&wnHUK0BvgTmS$7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/06653fe826b3c006b1df30c57101c77994e23cbc b/fuzz/corpora/client/06653fe826b3c006b1df30c57101c77994e23cbc new file mode 100644 index 0000000000000000000000000000000000000000..8f53160b9d8697c4cad40a81ad8020475b659d07 GIT binary patch literal 9360 zcmeHM30PBC7QXMjB#@A>G&U?k2p}T+AtWwz5Y$mo!KE~c$cTb50%0`>C?H7z_bQ_l z7epK#G2no^GgVQeC=L}|nIekHI95i%eQ>FhehGvG2NbKVb;|jY_kB0tz3;x4d(Qd) z{~Q)UpdmOye1dS2@6SHpa%f#t&4*?k-1TyScA%SB!PDL+v`n#1FZ=eH%LUqda%Wh?07@3S< zq=x}eDTIJTVd9F)|{gD-cMR;8H32&be~i5H8o#a}XCi2M*@*1`Xm52L8=3Wx%7e zf0?>$WYOUVqmNL77T6xH0t%1X*GI+4pttQZ^bUm5PRl>t~E3GXSEq;I# z7{azpgz;cSAp};2Bo?WU<^?*L>d&;YBbfm!qw5KD)dVJq3sN_WAO_%{a1s*R4krf0tedMKw!nhFeOPJC>W;1F$8?osaTWTzy+KN z2Nd?t?l(swiSu%I7rD(%i4G5Q3XhF;4^I%!br(rQ;@Gg6Vz=-FF_@~BaY)8s2y_a~ znSzn9+7z6O>Bf`+84)rJL&eYKoHLQ4FPo=dOmDC{vGBS*1y%HWA+L0ePH)&K6S_#l zd9#N$eXh{oTjkywy3Q*yf8zWs^76EEPJWpesNz(`8UCh6vX;*q=7iovOHDanw>qv^ zA5gWuA-j?hJ9!b2M)+KLo|0x`{;bl=ebT(;r-uD8ex-f&pr>Q~k=?x$eB;vVb{TV1 z19)zgF{^5g+3ParTEsnU78tgeQvNM!;ofn%D$?`$&oV_^!!&g3VBZS^Eo{Z&o&4eA zRaEcQO|z)BhFL5EG!Rm=^SfI47Fn6$`sJLoQNEtL9?cMpSQN5KE{PBo7I+A{b`|`v z0mA==@cjti12Vh}VsR6ds{l?#C)MX<1l_p`2s~6klY!m{G#v=gBd2D*BOZdUsXBQRg{yS{=zHeTRjdFjHFL^v2-Pzpt z3)`^dJ)g!K8DA?nm23W36tDz$$V4W)EaX1ZnKK-U*6&X8&RNKASWuet)hOIoeEDk5 z8Xptv{`TNYo8pTDD!dsjqw5rlgVXJIU7Kw)%MCzixyg> zB?Kg3(zL5y-6pT?_5jCEY++AsO#RZYo@HVA#47#48rN|(3AV>xp;0B7=XaFk-j|JM zCF=>Mgx>7GLUyjhyLqgPt|xT%ZY{nMeh5b5Ht1m?fBGb^fyZSj8(JJDW_=Y$k>pM} z?sZ%Rr8`!uqAGQo)!L}n<|ztOMOD;F zw~ZM92wejKKv(Iih6x}94n%xQHv5yrt&dCXa1CWIN5Q;lu1>iNi=4s zV#y~^y_z=!Ww?yHZa*$@QB`p#pH|7iHn_oV1ccPfPZXc3FEGCt8uR^XyM&!VO!q_0 zcc+$+sXy?`(9u5stMIUQt^B-mw7zBK=Y0|KvQEDK|4d=EB_RgZt6AI2o^9og_n=vS z2|)WmA<|YH?bWQknzdK6c9^E?@xr~MI{X^V8mC(Kv1?Xc>qI^<^oBC=&qSy-WV*-o zg`dXTHQT%+XQ%aY_O7g#v-7*>>~AXnw)Gi*Zjtg68o?i{9QcU2j=CHFG1T09Ta&%5 R$zMfl@;BDb`Q;l+KLRY0*Pj3Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/069960193a4a5abe81920b70ed19779c65f247ed b/fuzz/corpora/client/069960193a4a5abe81920b70ed19779c65f247ed new file mode 100644 index 0000000000000000000000000000000000000000..10c01c719ac215293e08b11985ea689542c7e040 GIT binary patch literal 1344 zcmWe*W@fNtVqh?3WQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;Xg9qV1NK*F-%a8DFgvf-2($~ISL0*(n`MPq^-M?iJ5`v|Ki5w28~M$WZ9TQW%*dd zSVVr#UYdWl<7z_T_Dc#bzig-TiL!h$C#ZHia)KBtCuOiU8c(QHg!(P;o9Ql-x89H z4<%B69Z1?I@%}}#^QFmO^Iq7u1*cw|V_lLs!*tpK9of5E}thv30jC zj-Go{D0NIWXJ5zhU;lU2Gx=XqQs;SCvSC(;&5}P3DZl;+C%p*0pJ_C8%Au*-0(bjK ze)+j>o8^XgmRo{-|LZT_>JcZsZ8m$CaRBRz_nxulH+KKj|B(55{e`1%m3z|X2Z%8< zGwSd#FlsO}$SUZ{WM24u$kzSMgxFs%&Tsl1P5@pCpAhGDYmH+p*pX2yFd&r=7lISfnT0q}l5yig*38E1ZO^7HY zDKKP?x*w@7dPTKfa9U7fMi&EQQYaX$y98WJ@|Lu;#cB9Q+ zS6n|&d6<0u%~H!m*XT>R;ZCO*8Nh&|c$VBGGUIv54PNv32#}!E4@&Et-UjnE?IKY1fhQCbA-~Tf%mNJkq z;ACSCl@(@TGGH*^1~Fw=SeTi3tqpkDxV73KPUi+Wy^*2gXM@S9D<7rzH7<}ziD=nv zV`RNH;^bMA@40gCCZvdVY)vV=i|J+kCojJ-FWwpR$ldkV_jf6Y@`-|rI%8Cm{;T$? zoYV~nvf}e)na5_o(ED6rk;>=u>Phoi#phjld9Z4Yc;T*=l9KB4M(bD2opNJ+A0Gn) Gg9rfm=Ytvm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/07041a06b9dfa102679c15f526fa3ec2c855992a b/fuzz/corpora/client/07041a06b9dfa102679c15f526fa3ec2c855992a new file mode 100644 index 0000000000000000000000000000000000000000..276db81df03496b2d1eb616bea73e78f5b7f8d0c GIT binary patch literal 475 zcmc(bF$%&^5JYEPktiypNoVB+UTfiL>^y*lm6e5+y`-@aaw+i^(MtK||Cr83@WI0D zEX*!jI9m3kg*#u6PErmsG?$>M!rcyI*4I&mgTGNHUSnI7RWot*zrxT`-6A9?|Uq(iX) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/070b4f227c04af80e3be8a1413197609eb34a07e b/fuzz/corpora/client/070b4f227c04af80e3be8a1413197609eb34a07e new file mode 100644 index 0000000000000000000000000000000000000000..ffc1e6bccd827ec9135df93a40cdcfa896f7d93a GIT binary patch literal 539 zcmWe*W@Zv*VqgelWaX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCy8W@wz`ncebKuX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>k&&U=H8LY=lgWgaWm~$| zd~tg7uB9mBN0Wuz`sZCdOWt>UE4aO0!hn;FIaF4dg~@=yfE&c*XJKJxVqJi2EH}v5 zMuv``4d>*-T@T&uzgGLWP0w9WOwMffw7n}L1z&%8c24?LQe=VJoN@*)n+^7J%x&U- zGBMlz`@2}mfJ8e?PF?vZy{~bBOiDz{ZW|-(wGk)JntacVdp99Pv}3DF;oYg%ti}Db zOs2&wFx_On>D)EDQvD|{zcDY~8S}{9^_Tqjly`}Vf{Qv+Rg?a!_NtuJ4G6O0^JSUG yX1~z;Tw#&Q=kuyb^I65`U3q!1YK?f|u9m`*>hnhHSIwPrV|^bV0|SEyGcy3??6tN4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/071ad27aac781ebb8f1b83e11e5c1a19e86c092b b/fuzz/corpora/client/071ad27aac781ebb8f1b83e11e5c1a19e86c092b new file mode 100644 index 0000000000000000000000000000000000000000..22cb60160ba632f0b7ff0d46923cdcadb256bec3 GIT binary patch literal 2252 zcmd^Oymk<26 zI9brn`+{%3VC>@%u93c9(GG+eC`GEQwWvb!x0N7R@4njEtrI`P@)IoAGR;L2=F&mu ztH7Y@weUmE{AhM1c!*7_2b?iGB*8r)xKrz1!jyFPRgnXZ{praZWG7312y7Dmz4nKY X1D8~fDa>(lg9(YjiTPRyy~%t4`zV}9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0725342299f60f275abde876b391d647ff8bd8e7 b/fuzz/corpora/client/0725342299f60f275abde876b391d647ff8bd8e7 new file mode 100644 index 0000000000000000000000000000000000000000..ee3433a38c65ef11b20a6ee5557c9f8ea56ae4b6 GIT binary patch literal 751 zcmWe*W@fNtVqh?3WX%xC#Pj`!`q|Ns9tc=3xfFxWCM z@G>YfF#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiSaiRC&TXzK6EvT6sn+H}W8#D?REJ=yM|3e(|T|^s5_Ef1N&9n5WUIu|QoeRc0Og)#!X(=eODuHukJn$zAtS z+=}(!{v9&wQmv&U4&7XLZB=@OC=+wf|8I)}4Ezja*_cCR`B=nQM7m3_t~t%Ik54{z z`>(KlIm=6LwXTN*rYehsfmj2&0u8VN9*}-v7FGjhM#lee52u17jJdIq!TLo-?$m3x zS>J^vb)*k!f_c+Mp)J%*sT66LT`G5rSl|W$TAmorYB#<`*6mrOqJbF|H zgw>#E4zi?9Q}j$%b=O=gEe-IfhDUIFq|To%P^|<46fi;{9rOkI4Ebi18Kc~NsF7%d z^e!JxAErw$Qe@yoUC}$8SS{T~Y0&dKn!hNo>PvRg6P9^%F}!cLmJAx+!0>89GIRn0 znr7|5D9O)0Z&*5=^t(2r3dka{%34hhy=#W9p`m@-kU67#G0GsNy!cDXOQ`sLa2qJ<|k}OG(>_IW;#+FG)Po1~#IR`$R&#^KF=@cN9u~&od z-j-Ii4w(|$Y!?o={NE!^Jvza41Q^t8??DO1Qvi&R44@Gp0I>j8#%N;{(0ZVCK)u*X zWo#v1Z!$_K)x-2y)?7kNbRp`6NKMP1%H#y|98stjm?Y$gluHf~%>t9SPBfI%pObf# zsBTquB;uA((;&vV6jg3e8o z!sFqs(u`X_?({D?M+3(fo0mD!E5f$f`xDbw$J#x7b*A9h1GAPd*}iK(^2;Vx(H|Nob0vUvmS87lG2c8P01N=a3$9!J2iHZwMiKw=UFNdM zN`tD(${!KMYV(>KZEWYad?y$K`YZ1mo<$5fcDH{Wej#l10aKV8ycQkj^Z3HdJ1@G`&BUGti+xiJg+9Um;TOTmS$7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/077635fdd48db7f1d040e715e01a8f3f486c5266 b/fuzz/corpora/client/077635fdd48db7f1d040e715e01a8f3f486c5266 new file mode 100644 index 0000000000000000000000000000000000000000..26467ec5bfe7a57792ba5a46893a2714b1a6e3f5 GIT binary patch literal 544 zcmb7=y-EW?6ot>73Hy^DMOG4RbTx&zQ8-(y62V3gEi7zOSV@pA(njzBQuqp%`XtdO z&_WPW*jV@!hR9uAH%aHm%y7=-Ue3(aEzveWV(ktxtP7G{)gxzH1)f?!4NYJo5TF6n zt(Er*WCVGGymBBf9LUXsHA3TKl+XK)yLo&1e0U%{jw|#X+bNX-!%iG8hsO4bcv(@`} XOz-c8S%kJiACL*P$krUuoX`0NIh%sF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0785fa8536c441e41ca75b80cb17993ed3212f60 b/fuzz/corpora/client/0785fa8536c441e41ca75b80cb17993ed3212f60 new file mode 100644 index 0000000000000000000000000000000000000000..9a52e9235d79e895403095826db2211ff09c98d1 GIT binary patch literal 3474 zcmeHKYgAKL7CtvO2_z5%k_HKo!~i}($Vo^5X@#N{5D`&|4|ISKVh9EU$;E=oBN0%F zC{z%&qIBU>L!84bWgB^w?K&BmqCx8OJ7at0t07lzUcs@|T=TEr*a~kaZY19Wz?~f1wsxAUhU4T=o z!7O*};R_BG4ZxDSY*pccBWDML&yiMc;+z%Mmb>PcR_3&wVr?jq2JybPe$dEarZ|@< zwGWds{PIR}rgW6i(>g;_!?fans%PT;ZcFx!Pgvy)ro^$v?8a(^$NVSm#r50kTy`y` zKj?hvAK2trEBVl2W&5q#?i%T~K^%$zq$&c2Lnk5{O@81QAjhegh~mPC_YuDsWA4!^)xzL#*0a85K_XhP4Z z$VqyVspMdVLMoT&Gw@uYvoV3=o8Sa}0@JWWg;IuPu!H$fgK$hs)sshqOaV}Xka7B& z_q*XgTXQp_#E)2|>A4vZ(ozsGXrIE^7L?VqvvaWE>a>CA*CI+I|C54B%p!70)S;`I z__Be=t70$wLddc0h$#(dSsmg#9693BKUVVagO0A@NXl^NtAn5FGFvOxDYmwKAHkXl z(T{JNtCq^MtNlJY;zQhVc99MKai)u|fAkeEb*%J8+>mEz-Mnj;9(5!!8ZQ6wCq~}= zU{N7UYcFD5si^iByXOjJl3cBQXAtK_WLfL4Iic1U-2QQnoW0ig%HKpA%UrjI zFH7q^{lxqt?bTII(#i0yAhf(3&1$RHZK_+~)pf={wNW?h>e@~b7F1M>S=nS1Fnv1f zb|_`WiJ-m@)qO_N+ZaecF@6aMA;HonvnEs0bn&urXfRt&O^@mcy-TD!w7i2{D?M_j zAjmi#j{<}UJ&ES-M1(*vL#*%|$c9X!qtS;*zHK6grTB5VQcqPzvN*w0tVo8ohMA(@ zZw`qFGLAz46zXFvyeFIu-705RPS0n!Y`{{m$&K-DVns4ntdy&`QcP-qtf!tYc199e zL#qiA;gRkP904&!*Cdf@ULIv%Ns?}P67yr0&Z#52$CU{F#Py%JelwB(k8s`TGImt! zk({Ng&`4&h#e%i|+2iBmr!H|vV)yzb?T^@)N7$bEgIh@Mb&`B@`xW8AA z_}q@Ydt_G8zQvcSb@^I~V)<4y6AifYG9z=E{ixQDyL7|$?*hL_-RXMO=S653aDLh$ zw65)O&QTdDU)*iY+?%Unq&#~PWi?<&d?X#)s5G zTz*10PhL!#yNe_tajf!)2isNCuJ_00^cCfC{8VUt+>YAB-eLdp`*F6UL~os6ckleN z)jsMk)U4*BzyEbv0)55qTQPzxt?(v5)lh?GLbv>ot8?)P4u{${_nXcWy;Kc<`z^FK zUv@39X#Yj=U#MQ%czLB}z=TRwfo3JH9Lx_2j3FE@IN&+6dA?h zaqZ8g=SmXVHttC*Di}LP2w7W|oZUqIG5B?1^cvNx+FK5MXe!1bgp&8(XBDIp%?z!? zAw+Y-4-_#&=K*}byR7$|Kdqeqz)cg{p3_q)rh$x}za z?Wkfd@7=s55 h$L;?WjR^m$ZqI-SLOP0qlg})318num7DX0Y{tL*-%wYfk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0791a9ec927fde528c5c34ea8417569dba92e3a8 b/fuzz/corpora/client/0791a9ec927fde528c5c34ea8417569dba92e3a8 new file mode 100644 index 0000000000000000000000000000000000000000..a4426dfcf930bbbb182a6dd6894bc1e18c92f2ae GIT binary patch literal 530 zcmWe*W@h4HVqgeoW{ya=-?VJS2A$2Cxo>AnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JA;7>lS1WHwOniY&wn~| zMIU+2vWai8PEdCB@NDXn3_mO4oX^Xo5OhZ|MsMCSZZBV5y|y1=JdqVgFD2gBY5nuP za{WoI|Gqp740+59vI^OD(dvg-i#E9j#_aR?6Zu|fwoq)%gG+vwG|npSR}+w6W@c~$ z*_d+HE@8p96_xti|EI@)Jaodk?)KT$4XNH|wyI127u?{+q!51Z6D-WZA&eGSAZIc& F0|07rq~!nr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/080d03b666fea6bb72714924bc7e8a95d2e08607 b/fuzz/corpora/client/080d03b666fea6bb72714924bc7e8a95d2e08607 new file mode 100644 index 0000000000000000000000000000000000000000..9248f813bcf25bd39e8690ecfcd44caee9c23bc5 GIT binary patch literal 1168 zcmWe*W@71PVqgeoX8Q0sX8(@lC6A|MFT3E8^kZANbX9QUC9O4Ff}K!$)<~+FS;o!IM5zD1%S4B@;K5Dl(SYz>&87r3ye|+3_ zkTY)4$yIxIoON})96n`*iI8phmpGGY>rUVOyo=#nYq*8Fgu7yE?9Ev$r3=s5G~07d zex&+&G1KY!9xV|*0co*`O6wQhKRhSl0`tKN!#if7RT7^fU&&15W@2V!U|cL~AZ@_I z#vCdu%))BG%;@;vfE&c)XJKJxVsAipJvYepjSMyKv}YxG?FiGgjD4E9ZRVQ`1#^4v zEV~->SWY0>}*#6pkvwP#)^LhWJ z{JLKKe}BSv{f%er-1N-KlAg9IgZC*7Ey;woB^cjv+yb>CH<^}I{nV`LdUzHPs< z_f_hwy@kKGb}=ySG-zVnYS6?e2aP^%G*`l+Zz5XsnHyM|L!!?JHTsMqU|Nu4oIu~g8ZFVTeyd?e2w?GfAi__xKUOOssxv3-$R;>^&%=vo==)M?ld%EFSc zRPXug6!|anf0UcedYtpxh#}?PQk7Ga4>x{n$>NXh2;a=IC1hgKX4`zVRj*UtuITUY ymKHD+RsQ+J??}SYe>_Kbp9^}oY5xx;foic*F=l24TP6kuOJ-(9Cg#>RhS>nfsJq$# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0836cebdfc78a963ae652c6bb6e36edbf26e2839 b/fuzz/corpora/client/0836cebdfc78a963ae652c6bb6e36edbf26e2839 new file mode 100644 index 0000000000000000000000000000000000000000..94d970fa8a209cc36269af281712a8444ad8e132 GIT binary patch literal 2281 zcmb7Gc{tRK7XB?`$QY$$`7neJQTds%Z?_qVD-n^9WsD+~U1QhGSdt>!aBH%Dkt|uR z7*bk{B|}J*CCf+I5<^7gKHb~*Jbm9E_dfUi@BQPP=RM~<=RHRZh6Okf0NB8=<9o|v zsUc=dmn7ymw@Ve4H)BMGu7yc-4&;t}bFgU^loO4eaQBh6Z`Wc;cw_VwB@-(O=YuiR zVvLQN5y8x>EWifWUp^fNi=xOK?5WKFFI2QjiMT9kk5W#eRVDB^Xh&q1bY*51)9f9=@YhE$ymG;8B-*2t_ zioc$Yzbn$9AgSj=ij=KW8S*TD4aor0h3y=hw4|Esl&pFLYXRdLtft$pXUphkt}H=x z5cr5c=~AQm)PsUqzdgP%7gi=g^sISfS)4|xB1Aqn8J5+hxC&n|?P>SobsOy$vq}>~ zJMK;Nv)gJ3Xw%P(y&oNcOES9^uCIO5U%jVk@x4CrB~O;tD$9&SN>{?m(ii-^D%+iT zj9YmFY;ZxPLfZF$d0B204>12AyczBKd{u8S?K*is&alrOtJy<)mN=WCc7hOe()^J^ zpro5*+19o;ZfU?`j@;MDdgYwcRdL+Q-(C)Q9vy#QG{tOlVR8J=HBhatTU0Vz@^bcp z@WZBn20_2vsUeiWa?WFlMaM+a?t7P(-d?&3D zJCCTJco4piuJOh<)8rLVRE|X0E%9~Mm2ToXC_LyxhprCEm|T=YLsb>(p{{Ioh@<)-nt3nn3C876@fb zjxw_?T1}Tags9%PA`7aI1n2s^oJ*Tuby3YWya?I zn^-^6{36yqjtF_9v-(F8`X-zQo`hZTVw2{aY(;dUD~ZP=Cx>urR-XE5qISPW9A#RW zYDFkL?6D0wtb2;T`r5%egll&pRFCxH@qm75?iAS^yzFglXRaI`vJOdwZ?RR*xdk#Z z4DMY!4}ffh4%Q-c5ck7eFn>|`zs*JG&*q}zgotRMvD=Y9`4KJm=e!^v0Mo7k2rUt! z(SQ}Yr4}ko^U|BfW!6}~`9Z7v2~;n$e|KA7i*ey`mBNhdlHy%UlktzYxfZnFZK~&* z68ju7?r82ba#(TIWL7*M;WYqVaSpo55@vhiTwdQmh2(b`GXAzLed1SMA@n@oJocpJ zu`@1Y`FjO#pR(Lvz>h;UhPCa(C6*m$rBg8w3w$TXmR7-@Ci9(Bg3UZb_=6xKR&Z$T$?EB zN!aX6ztyF9)A)0g`Xq%S6f*dURt;4=BZv3B#r5}pJxxXtR%PALzAxe^r|pdve&N;r zI52!zA^)-IB&Pw$&u=|$xXJ; zn>zP_6>k}9QsJoH(Upo53-2g_jglDt;kMm!eRCKp_ zl?l4}%5Ha*FdZ$yj2+eLZv}5gerDP^G+A=}`3looTIpj#Te3WXDsTmhA7+>gYeV)|XxW3o_2jt;8+Np_ zx_&i>!mMWpg?D2#5=oD>WhNjcf6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/084788cad73fb8ef97831e1a091fb45d95ba9e63 b/fuzz/corpora/client/084788cad73fb8ef97831e1a091fb45d95ba9e63 new file mode 100644 index 0000000000000000000000000000000000000000..f7d37f8033090a5797033583ab0e06a8fa493696 GIT binary patch literal 684 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>BpZ64TXLM(&XvgLaxj2bP$iv#ft`VY zmqD3<;Xfk-BLjmt1A`bdBU2hT15*+MQ#=Dxj6oAqgh3PI!3E4rj7&_N48J${=&cr* z&11mJ#;Mij(e|B}k&#uD!NAp!+klgeIh2J>n8|UUp|F7R=%qvMP%1bR#2+vGO&nzic2q>vk@F__#kQ3)MG%+wSGBz?WH83%V66ZBE zH!v|Wf^t!<2_@T_#`(zZXB1^%ZtP_+XzXNaY-G5hePWr>lcfK?pD(P9>~>wg_oMrM z&WP$gdrj9(S8bcJpy9w4`Lc=WZiW{GT3{i-ky~liTHe5aWU5%{QLjRu6Up|AKPAu6 z@}KqV^ufYBjaH2X>T;)5YG=j%GZ)t<1iXT3`9x|iZstOxh+kXe^%Egf;_=DKUE z(mOsfF*7n;UmRfIXCTYQ94gDlBE}-pU3zuRX^wq-@~PW@h3(5(&cMJR01ix9Wflno zu?7qUrMFtw8}NYi3$w5qFf%g#NAob$vz;sq46O_xP_N6_y<*{$iQV@s*rr|jSo3J% zPkr${DgTZ4Oj@xoE^_jtW%Zt)6IdUe(Y>Uw({atF3`Wd}g{fLz5 zMva#anmRjTWgf)6Jox?m#z%rGLH{j&*2v!dcdBS!`-&uyA2S%sbzk+*GP_jT*j|3a G{U-pu+vp?! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/088c484282b744e96efac0ee912c43541b510729 b/fuzz/corpora/client/088c484282b744e96efac0ee912c43541b510729 new file mode 100644 index 0000000000000000000000000000000000000000..da6b43469808aee3a5e9c553ab1ed1845150274e GIT binary patch literal 2331 zcmd5;Yfuwc6h3$FCKwW)u`$$w$U`g&-Y6(oQE8+E1);?hM;K8g#aIQ!#lj$p3#AN0 z$0zEbP!!a$qJWi95Q2q4sVzPL9jT*^j-~jZS|1~XNIH37(+-Sw{Ly}YcFx|j_uO;8 zbH1}8jKQA*@WuFI<+ZCvOW6wR!hGk9kLF6Mo-Rv~eigIrD5Fd$DVE3q0sySQ6+njo z0gM3gYp*SRwQ6wiS80RQue1ei$?;OFT zIfpXw#A%F`WICBa{E5#rKjOc{VEPe1llfL*&J?{0!y*^+1P})>i)?_f$dY0af;#>$ z*$(z7FlD26Ktn^cI`Tnstj~_Tl-#ZiU8WwN8zbBO}kql0xW!c&9$*K;zH?`dlJTX@J>pc7XwS6|Z^Hmn1 zTVkU6POWL;)D)&S){i}1G4pe+Pkr9jj3a5Q5+dAw>i)W**|q2F)IY-ajt;I!dd?Jx z0uGi=h^`DSN-f(raOZw&>w-;8a!8xO1B&#Tgr$d7t0;3X%RiTf8U{`w%jYr*44B-&(j3#v3`esLQ?e0u5=<>sl#>?xI~;Jih~HuOT; zeg1UXxDu_GSREZ7cja+diyiI##dnK~%9H(4BhF2JKQDFml(cqE*ue2z_T+@Mu1VEu zS*OPnZF5*%V{FE;nXwstHnPQwvW2PIFL$ONcI`dvZrQ8YpFfM;v0^~%fNqNwnlo`~ z@uQwB>7|{|6MN?5L@F-t_hpvv_1%4Dvg3{FrS*CD9(PX<6#Q^fbmF>S%Y}#Q-aYHM zTAkZor#rWq3fH)J2yQc#g^OmDY3Igk28D4w@>|NO1-qIGR3D#S_#2@g)sql6e55dyGwsdJsm^7*(n~ya!t`!p#%o?8akA^3&8lDI&iN4|W z-<%a;G9*NGYbOmOH0TB&P#2)9fI0|^E)o`P&jG}G2 z%S+FWeL}k@yG0u%J$QG`U%D$85_rQ#O7rbT#=nk=;d>MMO;5xXVGKz4HcT4x)st>K z>JXcz(lGHolGn)T8KHgo^5yG%{(HO;=M69%=}s7iRbU8WF9U10iL>W&woM>wW=P9^7j5?!IRu2qS_wQii`x0v({I0gFdV4FCWD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/08939ba90d0ff71c03ea041e0950e1bef3a74133 b/fuzz/corpora/client/08939ba90d0ff71c03ea041e0950e1bef3a74133 new file mode 100644 index 0000000000000000000000000000000000000000..86934e7921fc5239a4ea4c42d657e6c9d91eb249 GIT binary patch literal 2339 zcmd^-%}T>S5XWbBHlb-6KZvAW>Q`@`{ylh5@F?m7^ex1jcbh}sqM%st33?C&1;MLt z(yIp#kxeK~N~Cdf5cLO3W_IT@Gm(G}714nRmOyk&6i}BaVPc{-Q6wTSKFJfwBgq3| znIKl98&M49(PS1eaJ~KE+3-DJ_8r1W&xhwqUn5jNFT}c08ewy05A=4iomp(oFX!wS zajPB7ZvZT)mTA(^cpjN=D#yH+Z-5<=m{$ogH&x6`g&O`L%52Wv;2wi9I~8} zr9a}zJa_daF0M-rZqLW3K*@FhAEg1S(K2a6?Le53pQWG9^1CB^eXExC_YjFVYXLc} zBm0`g)oi>qYu1vTyuMt{a?kv$+SjLg#$tzs3ezW>uD^;oO{w3V4GqV}s|=wiWDMg}ov24-Gv24+qMW;O<9W`icC{{~Hr&lfN=F)}d;GHh&lXEJj}+3);K zq9@!dS!WyYvTfWZ8k<$R(57a10Il|Fh~)T0fT`g8}nl0sa|L1t_(QN>Mr2O#H{}F+u{HNKX7Q1 zZdj1X^ZCf zX>-hF^CfP&|F?f>I+gG4o%$19a%Qp??tjWI$2BH59j7bYmYkTzw zX@>;N%Ko?hCMdWg;-0q2S!Wy66?MMIuHL@>efLVc4QILEZ{V4xeboBu$3yF^5^nOB znuq!(U3xohjY0OUg&yM5lv`(om%mh6WX`FOhq4Dxz$>nm>t6iXx3ql9^%NzG z8RAQtfc5;J4iO4{X|zD^mkaDI*muV_=X00Di4>)Bpeg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/08ac214d762e30f5cbe6743ae8e628ebe5987783 b/fuzz/corpora/client/08ac214d762e30f5cbe6743ae8e628ebe5987783 new file mode 100644 index 0000000000000000000000000000000000000000..92ca44158b8178419e246cfac582654e44f6b580 GIT binary patch literal 718 zcmWe*W@fNtVqh?3X4YD{t?kmgJu|bj?#RSP8Xcdvl>IgX0|UeV{|t=Vjz$|WFxWCM z@G>YfF#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItkli~LUAHCHA zvv~}7**LY@JlekVGBUEVG8niTavN~6F^96S2{So{8VVZ-f;b#JT*3Ldsk*@>i6yCq ziU#r^K`tH%&%Bb&hpY*t?R*oDXYvP zVIbCktiT$sfCr>sn1$7VnUV27vWHng9&Ti?eo>J-^_p$gcVS5#=|dgslvaP~HTqgp zn0{XOqRgSg?T=pW(`I92Wo0*DWS_cD+kKvDMYjJefh9$M&wpp);o?~GbVJmmk~%?I z%Y>|x@|mCYlGX0ad!Jp!^)MuS#;T%;6)bh~{i(k4+-rp9sPMOlNQLUk&-pNya}!5Q tq)}>vniw-P0}C$$g8+yj#=yYwjX{iog(;MQfti7EUqkNM;){=;008vl-|YYZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/08bbf8e0288523f28a84e714fcca3074323300a6 b/fuzz/corpora/client/08bbf8e0288523f28a84e714fcca3074323300a6 new file mode 100644 index 0000000000000000000000000000000000000000..b5ef2fca84d5d83a958f97682aebab6e35a2eab4 GIT binary patch literal 537 zcmWe*W@Zv*VqgelW-?}FU|=XaQ&yyWau&NOI}c}(B-_z`^;dZUj;EKd|8_@VyXj`H zE3TiXJWM|SW~o7_$iTqPz`*&RkpUvY&A_;gfpIef;|7B!#x({_ zjG_yenHZUv7?})s**LY@JotFOb2BosG8pg~@)&TjF^94+3o#cJCmP6!^BS5NY&0}C zG&L|XF^m%DH8L}>gmaP93xm}+&WD=V_MMjzWFm88FM~m2CsSi1#3_sn3`P)F!U5FP z@^As7!TXZ!K}>!Y7G@^a1qQrq+*)m5 zr-#Z~FfcbZGIacGFgbPQqx8PU1u`iSExT=utk*`IJZthjSMJ?}6w!{YE`@ieUb7bW z(=wSBv%qwd`KEK%>`L{Yy!^(zcxTKbch_I?-&5WtCJHXA^;x3f*Jq- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/08d9fb79414e4640de95c9d84f50e583aec89e43 b/fuzz/corpora/client/08d9fb79414e4640de95c9d84f50e583aec89e43 new file mode 100644 index 0000000000000000000000000000000000000000..6b81424520a9c1923ae60ae37bed8d0520c6c7de GIT binary patch literal 539 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<}TG&Coc>GrQ%f$Qgz?3=EwA85tNEK!BTpaT^2UW(LL$ z22G4>44N247cet1GBGhS8St`kYPET^edlFlz{Y=EP3DYt>E^02?I_x=1^H-7A6A*18xwLpM`~)iFE<8vD_eI z8yPx&Hk^|ScRh5s|61+iHa&MiF*&o@)Ap{26ny>V*}1S+Ns$F=bIKXKY&O`>vCxUH zWMXFg_jj?B0f}~)oVxN+dSBxLnUsi@-8M$nYa>pcHTj+!_ijRpXvbEU!n;$iS&RE= znM{jWV7keC)4A(*rTR}^eq&y|Gv<-I>o585Den>!1s8RuswVwc?NvFc8xUm0=gTsW y&3>WxxxymN&*xQ>=Cg{=yYlj2)f(}_T`h$r)#r`YubMmM#`-=!1_lNZW@Z4(f3;Tt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/091ef240649c1b51b706d0a713f27798a65a001a b/fuzz/corpora/client/091ef240649c1b51b706d0a713f27798a65a001a new file mode 100644 index 0000000000000000000000000000000000000000..f5c6ffa9206dd94b85e46138b3790c9a0f8ffa92 GIT binary patch literal 1844 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;gkwH`Y#4@8NN&kI6UsxO2?YeyLNB8}l5!Fh2 zP1j9VZJV;7;lLL8vWe+#h8F~0Y*&&iP@Y(H;$?27RqOW#{v%VxN{@OK`kY9%U;HU~ zj+XzdU#AZi=4rHQEKrwAm08DrH9B9{`K|VZjXmpCa@V~Sw_-iGe}~MvRBP#oLpRr5 zTb17Nk%^g+fpKwwfuDga8*`{EABz|ZUw7%%HK#fD@yVxd{}r|`XL-@B*7e}PlvQSt zFc51HL03=;QosY!FU-Pfz|6?_AKAmKAP+Y(Sih*qoqEkS>$|X|j`X39bxNzh^csDw zDNH}Fdr{`l;r2%_S9QibF~@sR!0b=vOpR4cOmX9+AR`g{I66VC=NjwMl#o|e=J z%33C5os`e~te32IXC6ZX1H;4M@ENO$CRVW2$@i!F%5w{?nWMtrA|e&4E5G~0T+U4# zF_A{84QgV{j0`M%4B#}!(8VB4Rt{kRNLj*oje+s9IK#&jCT7OF+zgC2 z87_QT9mJwqq!P`*@Sl-^(S6$XR6`B}aY)Gm4OC`E4Q>WTW(k8l27}c7uMIfa*tOa` z&e=9tH!#3TDT7dh28g9FH!v_TFk(1^Nf9Ds3J2zJ79D{q*W1)NJvL2~l7HWS_D@bC z_1A%0qG&^6I{59`|eOqwq#W|)Wi8D;69ng`zyESf4*Gp)6WLtMz9+4g|?fQSb zp2`20k~+`Bk`1#$Y?l0SNcr_oIO#>`{Y;~&KMx;SEEo2urrG1Rn3N0y10%x}UGMWn zN(WI(BoSD`L;><_%mxMqED|V!$N;HC`lk<%6&6Nj4+e;`6lB#z14f+S#IJ>(OWaYa M4M-g%j9Lc)0F`9@r2qf` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0940f9b2dcd68c09ee38fcd9c20ac1cb12100ab7 b/fuzz/corpora/client/0940f9b2dcd68c09ee38fcd9c20ac1cb12100ab7 new file mode 100644 index 0000000000000000000000000000000000000000..ae1c729680fc57a9322f3d0f7d0e9feab2986e10 GIT binary patch literal 423 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gSd;bve=U|@`8V2m=F&1>gt}KsbPz5L^=sxC(G3U^i>T zF4l+^?h=eJ*1_~};#_oSNDk8pft+Veq*26`l@ zHr1iJq!_kSYwE=atD?H96<5ARbvw)5YK2?PE~Q#kUCJL3d8(j^(P}txZeCkvh=vtu03!&+XsccK zLlJQUD^z)Bl59u&)nDZaIKEz5^zDwqKGV%! zS6n|&d6<0u%~FFz*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5EsMyGCY2 zO)yydvTRG&nlDao-nA5E{Ae-}U;n&|XUY4HZ#lQuhi>N!YCR)Zwes9%r6r0r;(RYA zRe$aaEBf{3`#jC&o9b!5w?}1u`iSExT=utk*`IJZthjH{sm`Inj=-E`@ie zUb7bW(=weFv%qwd`KEK%>`L{Yy!^(zcxTKbch_I?-&5WtCJHXC%)KmiF+#=vk+E*#1405wg>2><{9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/098de96a6091fe6909008b2c1e8b72992ed4d904 b/fuzz/corpora/client/098de96a6091fe6909008b2c1e8b72992ed4d904 new file mode 100644 index 0000000000000000000000000000000000000000..4c1c06afd165bda792b14dff3860ab1596e095de GIT binary patch literal 112 zcmXYpw+(X%xC#Pj`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AX4`jOMn+av1_M_^ZUas>=1>+kVJ62=Ltz6!5XXv#D>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmo>@|?5KvO7;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m)tehJ#dV8s|gY?*Vo{BP#=QV=se2V<%H%BZs8+iDf1lN&kI6UsxO2?YeyL zNB8}l5!Fh2jn_?AZJV;7;lLL8vWe+#1{VZcwkydMC{HXp@iMp4snGBNl3|F$^5z|TOIjX6}7k420{q`UO$n$sNn_~cW!{|eiev%K_H z>v~9FslYQdQ?J=(eHWJ0kv`P1 zPHFX*UZbxyh3V&YFUlM`-2Uk0zRs8@=Bqs>9tve)*LI($T9NHPOJGUS-}B#@cs6ix zEQxybw4_c@)-oaMqHtgIl%GGT~dbG`xC z`42--ZQBU5?LW*mMrigZWi@4HKEL6{wUx6QSh5b1>fcIib|KJ!!(qlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)WpaL@)bH@ zLKmPb`2YX^e^M<3=>Y-a^+DrUcPA6G?Z3Z^8VQOB$NkOS zvunTohbKQCkgJ4QSPhsN8UI7#(jFX_+~BxmWUxEgyk3ZDo7mJ-?6ngZzdJuWwYyS& z!5>|TebFgNS3me36=cyX-yAV_O_60qz;PYTt_nN-%1f-izt?s&ZBi>x&fmHZ8h-zG z$Jeelimzp0@Q4U$5w7^tI=On8^4n#qTyIn7^w`uTC;yg^WPB)*`s+Z_K8g1)nw=*U zaOJ(QZ%awNILEXkafa!%13I#Ix5n-1dimj*nIq4^O=9bATO2+2rcmmbY|g%pRCuw=um5St}`98!M$6Ha;&dOy=>>XbuMHwEtYd(O?~x6N|HJIg)6zW?VL?5z5c?{x5_=~^8>_~nHgC47(jWNv2+Iju{jz! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0a273c18de0cedfcaa05e3118652e6dadd76b73f b/fuzz/corpora/client/0a273c18de0cedfcaa05e3118652e6dadd76b73f new file mode 100644 index 0000000000000000000000000000000000000000..b4d66cb5f962a41d7688e3708f88ea440c9ac5f8 GIT binary patch literal 687 zcmWe*W@1{w#J~{F%yc`~gW>=G|Nj{n7}tn5PJN&>qrv^n+38hVE~~zM|ID*lLGG-> z|LlrYVMjQ3Y`lA)IVkOkozl`Tzc#=9+qn04*n)irxEL7t|1&Z$GB9v6FflTK05=0; z2?Jvx17n^+6JwS^VzHEggaIcT zbEvE^3zGqZ0XK-r&%(mY#NL4HQ|5FAgA^tMZ+kwW;zdGwt0m7aKd?aN)u$}+g5b!< z7oVKHY1ljA?52*#>4vwG>gHTukji?zu>CBPA;$rIpD#0IudXw@WZA|nWgXquB76Sc z1>2_ne+tRZR%k}ZX30Mb?Kv9~Z`cx@El|nBz;KqCK_ZbwtGa)ZjG?V&=`*)qlht2U zy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm_g_=elYf1c z_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuAr0gq`>*0|*DkQv-rRC-cE-D{ q1?L{$*Un0RpK?p<*ZXAdj#ZKI^Uof5dhR}3n|D#wglY?NbpQZGcMMVh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0aa3d8ee546d8a3c5f884548b373af99c78ef2c6 b/fuzz/corpora/client/0aa3d8ee546d8a3c5f884548b373af99c78ef2c6 new file mode 100644 index 0000000000000000000000000000000000000000..ef6771c29f8b6d32cc8df6eba3cb288c2e675b0f GIT binary patch literal 519 zcmWe*Uctn~#J~{F%*?>R@b3GnRRJs$eykB~oH6ymo3ly{(=S&|dHdd7^_k}z1-Y{h z|FbJrg&pDCvGMMG=Ag7Ec1laX{M!8XZ{yzIVGH&h;9_9l|If(4$ncAcfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys_85MW@S z;A3E5AScdiU|?WiXli0%YGGnw1mdcLM4-UcklTP0q=`+K$sp8F*gz1(;o#viP`EHh z7o;fFP|-jhB*?`hVPasIT4a!FpkR<`ppa=`0JkR6K$wjk>=GtMsFRo(gq59`K00Tb*SvKZS zSw0pq7LnC0m)5MF`k~2Btb#o>JpPGVZ_`Dv^JJA-Bn-qFuq)sJ=@({UHDG3B{BOVs zbt(%Zvj>BLE0ZF_rv;`ZnduAWS%)$Z3fa`;l;T8V3lmVt8k!kc8W|fJ8d(|}M~V9a E0Ji#pJOBUy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0aa4da40af53759de113f18c8907e66203974fa6 b/fuzz/corpora/client/0aa4da40af53759de113f18c8907e66203974fa6 new file mode 100644 index 0000000000000000000000000000000000000000..9173505290ea067981e8b40fe3d40a00402946d9 GIT binary patch literal 1844 zcmcIkdrZ?;7`?y#TA(}&t>q211q4g+wzN=i=!7BactuuGVLV&jua;K92WwG8f+$r{ zL_`e)nMeh*2o6DDEUWlNM069i!3sD;1O;@;QZNR$WQ$pL|GMAFcXQAA9*2w~zykvS z2Sr-WPgp97?r4azXd@Oq_0Ul^>P8!W)ehzk0)PRa0WgDTu4DknD1wR81DF_q zi3FH%n2T8tbCLEFC0=#lQ7swwaK8#MarSnY|p$&sZnPM zS@QE5p}#VAdF9L4^2I@AZ?3cp(;V|0Pb{(#SShscgrzflM(D*2d(PUWDuzrwaqX9y ztQ3N!mg_t2DSA)G?;gXT2tX=>VIZ{DLV4DPSTdGWD7kayicYJct)TJEy4I9aqWgJg zXNze~!|^lu3gO@hAWJrRq8D1yw)7mU*gmVu>%S*azxUP+Tgb7#wr-3n^$L=o%N zHevh?#x1LkpYl~htp(u&?AlfGj^!l^x?hETR&r1op-S}b#w13+URS4Tqw0w`$Jp8< zD(SLq;UOH3YLW2MVwNg4ni(~JBW*NgjWS|c_bP*s1o zdOQlJy2|LLT=1$Ka2)#5$+_uUt49$-?UOeeRK|8| zXSmbbtRKAZ5>@2a#E_;+kN(yi#dxoO(Rlc2lnFk;t^fbgIQ7pO zVk0JDCntn7uUWhjt zlICh^;3r7`MkL7;Q&y+Nx-c!FxdumxCLeLXl=PVB6pGIZn2S*7w@Twnxrh;fxri<% z7eT=Nt7ftA-GnL4VqH$y!!J^}1H#5EdCx_sKL4p2pY!NYz(Q@E-S@v<66fL6g3BsA z#vQ~pCgljL)SXe)^`p{(0!O0?``(cq<8{^YUrH}~n{i0T>PlDccj0!8<@>agOF|jJ zqXi7zw-C)2yV!e@Sr`6_rWx`KjPF^_EveAgT@k!hg{F_J=f)yHLmP+z_N5BZR@kn zHv6JHRBzluh#ox=4)kBWYDg`tXJ)A5TCDI%t*h5#ZnL)A&Y1G-VKSVEY@-hflLw~f ztWov?%0@nMzg6mlX?piL!d<^U8if$#T3UR(XP$euZ7EGCDtKFqZ1MV T`pQ2!KN%Y{bcAr7zZw50cTAxX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0aacb9ed0e568023762c3e6ed2957d8775abc110 b/fuzz/corpora/client/0aacb9ed0e568023762c3e6ed2957d8775abc110 new file mode 100644 index 0000000000000000000000000000000000000000..03a440043d193d945ca7a3bca0402870f6efc223 GIT binary patch literal 532 zcmWe*W@h4HVqgeoW{ya=XJAle(Alh+`*yaJx!V`P@7mu(o;y?q8}9dBrK_&6&-CYa zHF0jIO)vl4XiJE5^nIJ}D;e`UFy_NVLx+lb?E~5j4E+BY85kKDxEYuj89;!Wfzh0S z(S(7~(4dJ?*P!w00%j&gCMHI911>fWtu~Kywk*s{2EvAd2K;Qyp$g2x9I44E#fe6y zW(IQNyoP25mWJkrrUphPMp5FtM#x;aCKhB(kp{wS>|k@57@-z0GqN)~F|b4l)NimT zY!qN{W3ha`=jZ!P&5r*vr4IHO-P31XA>8@LJzU({dRuaw0|!%m&FxomiIH8-P8YUq zQF}U7WluKGp2boI5(b=X%%QTvEKCLr2HYSfKMM;p6MF-)XPDg?3|yELDzB>LTFZa_ z)0r#!$a9uWe2aC0va5$@Q=eq`SrKQ3hX4PA?l{Eg&0EIp<*TdL_9KiZvf{?2#QQp} zf4*0)KdJTKmxqBNkC{PMA=@rm{Sa%>CilRYeLjC8-wVwaimiEY$?uZJS;hTo0urpu z3~nGBQ_k8YEcmvfQh)pZ^!Sg5P6#mEKD)Xh)%(m=b?N_t8{C)_!tZ@zbMfqSt#%HL hh*2orwCr@Wa)*^%Umer0?ag}qvtqsm7-pW{0{{h`tFiz9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0ab0b132d7b360bf726658880029f6893505babc b/fuzz/corpora/client/0ab0b132d7b360bf726658880029f6893505babc new file mode 100644 index 0000000000000000000000000000000000000000..19ad4ab11b96163a2e472c7e8e10b40c9a1c582a GIT binary patch literal 2331 zcmchYdo+}39LJyceP`TeT#6kemu83v&oEOci$zp!yAs85pTuTd8sf-h#$_c=RI1}r zHexHev>A~Zx0J0&N+)%ylVeNDmegW6X3w}~i?;sR?_clld7taECB-l| zoR~an720YLH)dO2o$aNT*W0g5N-Tb& ze6p<{|G|RnsT95S+z86^I5c=X2JWOz>EP^BQdZhmpVn&W7__QT3I5Y&d1m;SZ2A_i zxC7hEee6KnbcFhFYaxcxH9J=LExqE!FZorct^z`dc z3;{?ny9}~RpsE<=rYeIY;S|R6&xCcP_xMKCc5B!O%#X`_hkFO3M6W40Cft*>=!Rbj zcCZ9eH`^{U9beV9kJG_fFn&Z)T6r8EVhAE!*h|86FA?zlAIX)=Q7$R>hIo87GHU(& z#+6w0qDg%vzGt9+&s)c~WjKR<88v1HORP%tI$Kj8K>*eLgCOD^}vD^4#6VoqGss=rJxxjG6B zi)-w?#a*}=#`!7}?sDAI?b;6GhHrykRd%%vQ8I&0xsWgnFDDJ~L^Bi!g+c)UK)I@8 zi|wKnTo(xI6H(`GvNq9ssw2+Y%hB4MmqNe-*FQKphXn-PMF6NjKz#t}1v#h(2SuJ&EgB%k%dRHD6B%1_3odG;Lfe;Ei#WFSjUipW4FsvHc?%jFZlG${)Vgt!>l ziC;Dl8l)K+8$mjxL6L#1hcqLj*>EWX`PMY-Qw!@C`3E}-K=uKY%?4}q+Dnc4{e_Mr zT^Dv7v?}8b+ciph#F2UQisM>oM~jl0E~!W71Z|>r$qm$!)xs$`k?k)-W6e@WlVq>v zlA_wSL^!kuSQNhtDA0Az6WnZ$VCtmm6ltq5R#u4jc!ud)59wuBXI5&4R=iX+!#6ix zURlA|pyJWeTXFwfQ2Ou;yj`Hv0(2jY>M6e|!Ix2I)C#uq_mo9FOs$-DV^s=H36heg zH}vNmd?K9HxS?W0pwPJC@NazY9Y^{~6E~0e;`?stcWczymJTaq%}ub@+{5SEZcctP z5}gpzesSEhSo`XV`5mX`pT3}_$Mh4?MRCpiBHV>i!QK75du? Ikq~+GKZuyaFaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0adec53ab52b487ab7134e1061b3a51d86652775 b/fuzz/corpora/client/0adec53ab52b487ab7134e1061b3a51d86652775 new file mode 100644 index 0000000000000000000000000000000000000000..368015de14cdf94a1d953605bb22ed349c3940f4 GIT binary patch literal 545 zcmWe*W@fNtVqh?3W}aQpqrIT=-1+}M`PVxvzmQelsraaI&V9}QR*lJrWi4+q9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*=R~n}P8r1LHLY#>)mxjOPuS7`H57W@2Pw;=Fl_g~7+O zcK>SwPBwO}HV@`d7A}JZ!v+S1QA~Ll7=X+`4M}bTPB!LH7B(KH#8N|H13?gngNMr? LKNnRUDYgRumC|dF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0aed6e2c5c312df21efd08af1c2803d943922ff0 b/fuzz/corpora/client/0aed6e2c5c312df21efd08af1c2803d943922ff0 new file mode 100644 index 0000000000000000000000000000000000000000..35ed560120b5a0e75fa2276b30a986836a5d7b5c GIT binary patch literal 544 zcma)3u}Z{15S`gwbCtGkrv7zb6Ee5Slq?W;j#U d!+MA5o3+-;QsuVRzS_IV@v*EIwkf7*r}3S@(*y`023U6ZUq5mfK!z;fvD$bc_K}WmR6W&3FAmh%c&u=exmzv z3pXD3u?Pcy`Su^v3`Id`h)UY0e#Z~bVW(P+G!2<8IFBycl1yq7KLB(9Ai90^Co9iA O*5~4O`23;BwX{#Fpfwc$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0b38ec03277536379f3331f75f84d11c55869176 b/fuzz/corpora/client/0b38ec03277536379f3331f75f84d11c55869176 new file mode 100644 index 0000000000000000000000000000000000000000..d27a070039a47ec87b3b08fd21a9d535d8eaf9f7 GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;Xg9qV1NK*F%ke&_rL%W+zA3oTFLjEv~_nfF*7jzU);FdpmB+TEE{vEEFX&)i^$K} zOY_fmTumt4eo4XQm+f>uQI<~zr66f(mOO);25bsEKe;b)HCTu>bzqG)E@ zfRfB&1#s$U;M8cx z35?&JpPkxWDZk*4uEf6Rl%%U4e2)sU=#_7dn9B%_n63)D%KS^LzQ5OYG;LBVP|n}F zFH~0W)1Sk>yY|P|uC|J={lV`M5z-=D@uzii^)ltR%T&4Erp_rjTw9#{TSAiYp+xGh z14;WN-oI#ezBKu3-V6J-;M9wAtVx@*LbGw(hpY(Q|JK zrH;ww?CUuG>;JBLCjU!H>O2oiHp~jKS@Opr<<~#qq!*$0GmWNBIW%=!;BG(3FF)69 zv)u5`a!au9fBnTsOd&1Ua14q#pJ-ZR$x#_pf`A2MIBzi{-ea!>mF05N7}Mjajo zMh#{LSp{90%nP3n*}A`(5c})J`AxrroTji&x8^I0yH$7ho4pGM2OBIHMk-)uU;qHb C8I5ZI literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0b5464547ac1a859fcc732717c1e20fed578e72d b/fuzz/corpora/client/0b5464547ac1a859fcc732717c1e20fed578e72d new file mode 100644 index 0000000000000000000000000000000000000000..ff65a4d9929083ae6016694c2f50351ae98d6a7c GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+z>U?3;XYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhDAuGHG%+e6dw`LZfw_s1pTVGsk&CH` zk&)s52m=ia3}8PiX(iut($?L{#O%QIe{th-gT^HWvTV$uvV1IJEFwQ=FU>#OaW$cE z`y~aJU$)cvL|Hx=l!BzCS@H~W8n7ww{N%pG)nFmk)PXhHxS**c51Kkk0!lKA6+o#Y zrHRve>o%pGQK00K;fg=4ldG30zg?!v^)_`*$>G}K0Ug=9TjTb0z5MXZ%#r8dCb4z5EsmahQz&&zHfLYQ z@n8RU)ie2DQc~x6Sh8VOh|Q8e4k^F>2`9Y>y`O0`b;_Zs+X8p{Nq+gcZky$Xca~d% zegEq(-s%x2y=^vomvI2=iuaze<~Mf#)c=tAdi{l?ZS3sLb5Pv)d3u*~d(4EDC7J09=2?d_9MEQ9 z;AK!|VEE6(!1(*WI0J(iGc$t~Hv@wf1A{sP1GfRE0XtJ8^M6JL28RFt|APfsnA90i QO)V%zF%_z+kpTk40Njl!*8l(j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0b99c96d766c7f77c123c559589cb722269907a5 b/fuzz/corpora/client/0b99c96d766c7f77c123c559589cb722269907a5 new file mode 100644 index 0000000000000000000000000000000000000000..c1c9f1cccf430b66ffd3d142f37dbe4e19bf3db5 GIT binary patch literal 544 zcmbVIv1$TQ5S-n8d3t&V(NMn&7@dGUU4k161FVG?ou*kPu zxQj31fe|wBik;oJGdrmfQw7Fmya2pE06pYDDG*=)q-OHfh3p}pkPoh8$CWHMrb3Od z4;v%jx?j(?k4`u%x{SOn91|srg#EgRI$@S9?l`K+_~uA9FdXzwm_~U{CjMLImOOcU zWpc2t;@kBN2F;&T#g`?4HV!saN!G^6U*i*oc7U(i)#Yz5d}iitkzKnqbQ`Er$Z~f+ Tg}53>+||#&W6Cyf>i!qs@BLjR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0bad9239300f9850395f116033a71f7c33113d2d b/fuzz/corpora/client/0bad9239300f9850395f116033a71f7c33113d2d new file mode 100644 index 0000000000000000000000000000000000000000..d1a11330dcc51665ad626c19e3f753a998b07b98 GIT binary patch literal 13194 zcmeI22~<;88prR;O9Fwg83-s_SQHR}OMteZ2ox#Uf?^Rtpdf^lMK&QQR0Ro(h)|@8 zIDpm`sv^jytOBw~rD{cS=};GxqX@PNs0^}t&=g8Nh);Cuki3*bB;8|MnyNYhaihv0A|Fji{sRw$iAh7v^5(j>d2VF?5w5CF6> z6o(`t>Wn8+a8}NS6exooh?2#eLW7xlPAqR0(@+hnVsDC(6;_8ZnBgHz7R@EV*Drt- zL33n9)9hKkP(@zC&=?xijp)z>8bddE3Bz}xF`dpkocC#1v!5pJOTp_$2mp;s12Aq6 zE-nt}=(ZiBKlI@^ytsO5<6fKN^@FzONUqz}>rINY7AGAzx~uVw>edXu4-BtL_g1N^ zglS}ixAg@_nbPv_D zeyY2#EVV>)|2k@K>*z|WYNcZ4az)qX&f;4q{gMZ9C<2f?N4N$m6H#YnNjw!VyEpP? z(IwFaNmXXm=!S-%lmmT)IiSp%;Csk>$$K*l~#!4n{gARNIPCSW%l2bT9n1!vwe z4;-c}T&CEZT&!OBGL1g8V~bzA-ZiD>mfhWb4SPHu8W-ASG+SgA>)IY!9JP6Ewsd~@ zzuSj##TOLi zYDy)@>Nzh`Jv(riR4(eVk~~%kRFv7=C2;2_M;4hmdV24P>z&0HLA? z6$oTK?}S9sQWWLM3(W~j)h&p=(#{!?DzQ9%HE`P=weH-wE**|p9HT|qv=cPy&XgC5 z+!Y5%CqQliap& zju||l_fdPedebzS7AABQ6=n|b7eN4k^pr)Ay@nbk;_Tw}a7h~b+7$irJ~?#&nTP@~ zsb3Niu@l4dGX%k@f#*j}JlC1M(-IY(^GwSz@$)buE7PSzhXr0X$nE~*ya&#eX?O zFDJBIkSIux=S;5KhjYXf(QiM%+VG(8qI5vWS zTJawf7A`=nB6sMU*Vnr@IQRk32gqg4x1!(K@x ze^@DEALrrn>P&Dmp(=a(xjMzOC1#t)jq6g^n zx5xeat&geJnOr+Hzx&mT$OX78Jyu8AWPFU-; zK{H0G$V2mKhKc0?=^G8|OBwgx*VU_;fHZN(VO+idrWwikCiMH{o13;&b``5NGrdKFIj-Aq-I_e*|`rHw(hxjHd^)QxSm3TyRXm90f$x@y#BV+u7``l zO`{wyEYnGeB7o=)g2ULUWOn(IFpbcP2D=+t&&OLFYR`G?EHv}l`AW*pb$tRQYCLiO z_G21Pk1ZB^%FIn&!Ty3Vrmzrspuik$^l4D&?~S*C7*CNS@c`et3<$cKHVB<37 zyA_^wDSZPy?^uzW%BjV--)p_{^Oi;5DhD+rUl`@o#^Tm?sB4iQuu8MnugD*_^c{Uo z@#%H$3ZQ2mXwIx$cXrKVapIav)6!?AXPg{326+{Bo+6HwDMmSpV=mH_U$<%5j~EOD z{8Vza^{Gax-BQ8JKO}kLEo2VLe;1cC|EwSkb@vKCnq;Z#Ssyqq+?M}~K@5-kuj4jLc zk2ii^a*#A6UuwBN?%i(~cU0=-2wm79%aKPfB9rS*)crGTu?>*?8+wBUnef?|m(rZ+$B(wU&!52%_?z{Yyp{4Vv#E2<}ovF~}Wr2rI#n5J{ z73(*3h`CmTZOA?tcKGq!Kz8w*Kz0sxGAod+(8!Vf1?SG4kC2V13vx#cw6YN?0NIEb zcauIXaMO-||M)LxS7)ARH~Y_lb|=NkhpA`1b{5jTb^sW101Xn*~X^>zPJBsiB`%ermq1l{;s2+QKQ|UU5B~VFEfS7%o6i zm_*Z4Oku$uWUAvUU=h#Z=I~9I$#3Sj&S6jX%xC#Pj`!`C8mpiNFMe?b1||ju zUIPOLhX0HVj0_B73=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF&Z#&{xyIBUN%mx zHjlRNyo`*jtPBROhTI06Y|No7Y{E&j-d<0>Y+|~b!3BYq?MiY5%K4oqUglO>wU#&VADJ3f zdeke>=R~so;!nwQwESoNI(@J(Poq_1fx29(%sTd~(fPd2Z?z|E>{+jpyY8j973;zM zJ7m_ST1!V9y1DM!s`QSJOw0%WGcFD=@H3EQV-A(&V-aH!K?xHW00pM3GK++PSOazi zJRk+aEUX61jEn}z9%f}_U~X(=fEhGUK#ZB0frXEOfkA|snSqg!fti^hfdL6jQsk)f Ue6g-B$S%U)x$R+VW1@&}nf#+=KDbFMGMW$n9z R**(;`&p+`=u_|l{z!@D)b(jDE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0bec615b63fe28e9cb00f7fad81d2becb1d4060b b/fuzz/corpora/client/0bec615b63fe28e9cb00f7fad81d2becb1d4060b new file mode 100644 index 0000000000000000000000000000000000000000..9b1ffeb1630a044b2dff846f2f96dae52c0e4d3e GIT binary patch literal 1751 zcmeHIK@!6t2*hyfy}W}uc*L>}cpn9gQ^Ocq#`Z8CjPF6G8^JQSzYtGsmbr z=UDt5J!~!)jxWL259vAHaDyBT;l%dTgbbZqpI>n`JH+b&CgC zON*bSdBO4Ud8mZd5}b@;*|$`PitK+1v;q@uKxwOKKxBK>6=j4E`2H$s!iG3wxfp4V iDQbO_qXN+@8QhQoncH;JFCq(X-2bB-J@I1P9fvo|5o??P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0c2332b61bef176fcce97ce507e401e9adb8b8df b/fuzz/corpora/client/0c2332b61bef176fcce97ce507e401e9adb8b8df new file mode 100644 index 0000000000000000000000000000000000000000..84d94ad93363560288c12082c8fc89f43d69cc55 GIT binary patch literal 432 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945Czl2&j8Ysoclt-Io}}CK$wjkY$_9@0S6P)e+EY8fB%`C7+6j#8qbnb zl44-n`!688_43aTHtrRg>hp}Z1h5@`5m5Z~?6uGv_7TBpA|?X{g9bJZ1`znqCd}lhZ79qDv5uXAfdOpg4Y-vWeY><9Sr{b2R&v9wv}O;L R1zQO=1`HsPbbiB)y8u)ycLo3e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0c26c60550a2bd5bb9a9c4653e869e4824ef8aae b/fuzz/corpora/client/0c26c60550a2bd5bb9a9c4653e869e4824ef8aae new file mode 100644 index 0000000000000000000000000000000000000000..f8016385ae40c5625f31a62e7678484ec5e37494 GIT binary patch literal 424 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945QVBIIroKvbG|{OfiN38*ifYxvI(HtrRg>hp}Z1h5@`5m5Z~?6uGv_7TBnOu5P=bWlEwc}f%>3Ht8XR6R6P2(vH2ecU& zco~!#82&RdFfuTRGcbrTGc(@hW?;O@z<7;;@v=b^<9UN7#OpFFhoD4S&pn#K& zU8~LGoGlBZfvX|60Vf-CC<~h~lVhl%uz?_m!@Fah47iSqgt*oT8l3jB&R%Ppd}}ge eF6XR<|8u!&CO6-Aa%N#>;4olgVw7NFlm`Giu#YwX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0c3286f57d1269782c700c7db8f3d387c1274790 b/fuzz/corpora/client/0c3286f57d1269782c700c7db8f3d387c1274790 new file mode 100644 index 0000000000000000000000000000000000000000..d68bedd74a56c7090d1848654892958849805249 GIT binary patch literal 982 zcmWe*W?%?pVqoxPW{3`zRZjXT@b{>^-(r&si-ZDIW`-Be-XI^Tc0cRUo!MU$W+wQ* z-995UV%KO+MpgBUXdQyMn|QxXGH zJOfjVK@(GiK@;P_13xu8JHTF7(`Lan#TFa?q_6WU~cSX zFlg*#YHVb=p?zYR*^{K-pD*~XjqG+^zW1a1{^t?ZN_$P#O;>H3vY_F>7WuM?>28J> z1X{K$$rUJ1EIRQrx6-P$yn+A7RI$>dUWGmLtV^|)jyQC4-L+Ne9UqyP*?-qB4lwXDkY!^I zmE~g*V-e{ty}IT!$38y!)a}2*_T?-uz16xN9GJ4oED{D{4cHa%fbMy-UUuz1}&+A^4Idr)F(aU|EF;7fZdrUlJ zKXsk9`#jZ(Z2wsTON#!U|IWm-fs12F)T5^*b%L^%30WuQGe7GktKFIRKD$ceVMzFl zRYemkSnA~aQ+?&Rh1Seb;cpR<3e}b0{b4TWCXSd$qtpg9F=hq^7Cr_B1`%ck21Z6P zW(GzE1lVx>#x~p4wtMTg1Ta0xDzOk-AK1QnWz4VsQ_jpP<~L`T8(U=COR!6N_{@6`d^fgG< zLh<3DoPFNSTh_nnxtVUqYLj8O&wIa={EBz_>uSZrrMbG5lbHomgvvaRQf5GuyC!#O tvq4&)v4ddGI-671L_u!Tc3m|;;l?9}{kNwG9z5B-v0G(>QSY&xwg6i)mxjOPuS7`H57W@2Pw;=Fl_g~7+O zcK>SwPBwO}HV@`d7FL4>!v+Qh!v+IRHs-4=Y{EVi#|^< z#I6>*C_!yF6$nFJhEoA{rwcPNFi_xQ?7l!1rN9aX6abC{bhEjBfxHa!y_Nt}$FDy+ zU{MAJI1^dB5j>I+qFi7ma-5^sjsOTP5a!iyY{F38NUlRLtx#Nua4fRB@r$Z~)FK?f wzyS9zR(%MAnUI`;B#d7aci|Nnm$n3JtZ0Z6$V06T2C8~^|S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0c774846e3a8a2499f2ada027b79733929cd73a3 b/fuzz/corpora/client/0c774846e3a8a2499f2ada027b79733929cd73a3 new file mode 100644 index 0000000000000000000000000000000000000000..bdb27216bbf5d759379f25763f9d7c9f0a57a878 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3X6D=Px?}Zgxs}JI&qX}(%-I|9&%!xVQqlZfy+O6#h5mMi1KJD> zybQ_=3gAxNnMFV+| zAeXR&XI_axQJz7Gf|mLQFEN8P{|9u-m2O?)$vD{^d!N^0aGg@vJ^u zzW%)*`u>?b`z?SZJVFc-bJ&z~HgLF@sW&v@%PcK~4i!1q(fwxFdqg zK$ywE02V6-!d!?jhQx}2fq}3DLJ$HJ3=F`y2`S2XK-LPguo^HkG9o7c=Efcd1A`P4 zBS0x?fPfe?Gs89>28K<{46+KkGMN`XAF_3SGa>fZi%sW$2RTh)Rj}qOi@Q~K_nW;7 z2OBd(mqBAYlN00Yld6*}vKTJib1QFFm;K$(ym^Jz%WUU$Q!S=6{rjE2V4lFnQ!g^* zE}x9@n`^JUJYwzIf}#YzH2agB4|B{n@85r#$+5IO?SJt;!|iqMFZ_eVt@RnOgSXg) H85kG|nJa&d`N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0cc045b6093b3c424934839e64f66ae7c5cdfba6 b/fuzz/corpora/client/0cc045b6093b3c424934839e64f66ae7c5cdfba6 new file mode 100644 index 0000000000000000000000000000000000000000..c85aacf8c4005b1de75e3b4d702e964a7aff5c7c GIT binary patch literal 207 zcmcJJF&cs}6vp!SK@bq=AhrnN=Y+e919xZfT(a0Bm^DMvORNdJB}4L3FR|2+iC{F*z)P~{e~I~c{@4MoVHR`% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0cc5a9466c665e51c553b452cb4f6d549fceb254 b/fuzz/corpora/client/0cc5a9466c665e51c553b452cb4f6d549fceb254 new file mode 100644 index 0000000000000000000000000000000000000000..6391a904b53ffec002387abdb309905585c97441 GIT binary patch literal 359 zcmaKnv2MaZ5Jcy0ZDYrP6cIT|mj)r6W)5Kml#-e6G{^ zfy(=#dZ(U>qo_^+morP`D^9xhx4sVSZE$J8od`j1_qtd30Us0jiPG-Fx*?A)4hXTv r+2Gl3p#8hqU`oI}$pTX)RSAZ^iTd?qxqI0F)Q@&t8a@CU@<9FrtWPyt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0d0b3d362a4dcca050d82ba8078eef03944a7384 b/fuzz/corpora/client/0d0b3d362a4dcca050d82ba8078eef03944a7384 new file mode 100644 index 0000000000000000000000000000000000000000..6b43693c1a69bb3d5a9b3ff8c9ca348d3961937f GIT binary patch literal 1044 zcmWe*Hej%1Vqh?3W;P%I7#Q>!7!c634aRm-w5hsv_Bh@r#_0+g~bYZ(}@@W$P46%#9CE(4WzyZ zkHG^VI3e|b#1UjW>ui&3%3&oA&39VQjK|~EeBZb$L9YeTv6Q$0^yLLn@`s6udPFoN zq6P^@SIW5Fpg5pdkUED}AED*+vlI+b^I4l={n^Fai{DM=MnE`88>okJqQXQ>kS6Gu zMU+HiyJK(yq$3QCQ6>)-M(4#0Q};Cn`n{$z&#|<`G(QT7fIkXxly3miF80k)h<&Po z@#b~;U}H^txZ{FbiwqW;9~bY*0ZGlf1kI7q%(N7K>mW>*U21*@&0`#fa&kCQ-ICvM z*SI@sZ;g8z){a6Bf*r6rTjQ?|w#H6rjj^dQVTKYQJT$AJIzZW#9+`lFy0@u56Eady zH-%hBfmp&e+_uk1{(_cQ(Bi9;A**hMAJqWiO)d*gf#wPjB~2?fGgu8mdfzsplF6R8 z&(#P(|G?{o#nQ4$mAlQ_^5lBQuZ7c=><6-MHxtp)x}~~me{C+WOzqGQu#hR_z=nHe zYOn0}%EUEwhW9J}>QLzBE$tmhX3+8jwD`WB_CY{6b+iZEYoLvmo#n~SJW2W-N6zvu zUAHO$%dd|rWG3hSr+JO}yJCw1F0(6SKNs9DgC%#rbfoY4ksd&TVfteRm>I8Z%2y_! cuU?kr--J`Mcc|O|sQ^V0I3}58|NV*i7m$4}egFUf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0d4554697c8e3dce978cb856fc210e5c44f786c0 b/fuzz/corpora/client/0d4554697c8e3dce978cb856fc210e5c44f786c0 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/0d645e2f14d7430f23ead9377d9ec43078c1bf7d b/fuzz/corpora/client/0d645e2f14d7430f23ead9377d9ec43078c1bf7d new file mode 100644 index 0000000000000000000000000000000000000000..6d02f6ebdd6d26d983171e8f390361a1d4376687 GIT binary patch literal 2331 zcmeH_%}T>S5Xb+slLV4=G|Nj{n7}tn5PJN&>qk(Dt+38hVE~~zM|IG7^g4|h$ z|JfC*!j5q6*m(Cob5Pn7JEf&xerJkHs&Ff$nl8wwimvoVLVFbi{}CZ`l9 z8e5nc$cghBni*Ic85CcF*e)A-PrH=gJWV+$vREDotH|wBXg(TPThKK zae3^X6(zrRY*D!TV*SbR2j^Z?xTuR59sS>_VOi!I!Q~~Wy)ThBmi3N$#bPM~2?I_x z=1^H-7A6A*18xwLpM`~)iM;{Yr_AXL1}RJi-u8S##fyaWR!g2;eqe#jt4~?t1;LSz zFFrYY)3A5K*-agf(+zJW)y=uSAeHraVf$GoLyiObK3`_aUR`H;$+C@E$~wBQMfUu? z3${)D{}hs+t+H*D}-moP)TcDDMf#EDOgG3^WR(1a*8ADsm(r0eJCab@y zdOv64+AH^YW*n8#+MN=2VZBgAkW==Wb2}LmIpcom^rh?cY^eMa(_hNB@4u#`C;$2? z?Qh-B`RbZx=ZOeys?M?SQY}8K5Wl%xveDlAP@GmQLmJ3K_Fu)_rd?pKy}9Mw?2LC? z3(h^hubq|tKIN9yulLE^9jhYa=bt_B^xS>6Ht(XU3Dp)59oMkxute7ZPDl(4j9QSh5b1>fcIib|KJ!ZnnlFal4^9(~3zBrf} z1gb8LWW8=98SXKS`_6}3v!A3sNUL0V^w^7*NAU;r85kJEn3L3v?VSuoPO_<3b6xkYu3v)26F)=WNT9av@fNV{qfiTqROpI(CU_UT32q`-; zF)=bRbud5yKNAB36B7pmlNL;bfuBMC+VmA%GkzXEvRE$cQBAYQZ80gCud;O?r|5d0 zFH$0VFbl0 zGXnzyF|jI)JysczV-*dsqVcH;2&Et`B2thQW)k{OXMmoj2`5=YBTHfv?Sc3gk6Ml$ zg%w3&%*+h7ObiSr%*>2T%q*;I>>Qk2+&sK|`~reP!Xlz#;u4Zl(lWAg@(K(Lvl$o! zzcVs0GB7AJFfcq|U|^WTz@Pys)EK*X7#Q0a{zD>^5gM-)(0>_rUS2st`{7((rQ{!6 dWy==%a8z;12g~l~0vDfH;)F4C+oCR*D*=L4u0sF- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0de78ab58393c50ff547d9e3d8dbc92efb15d70a b/fuzz/corpora/client/0de78ab58393c50ff547d9e3d8dbc92efb15d70a new file mode 100644 index 0000000000000000000000000000000000000000..58b21322b9c6a2eadd3cbe39508f5afb3be23f1f GIT binary patch literal 1356 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>M`4`KZ<`gIH67-I~Vv$nIxkWngaXWiV*$WNK_=(9}M$%;-tdf8Wm+)<$-_F5mmn zeLrVJwbEYGb<4SxN8m$@&)a6oTR|s`rhZ`BJUsU8yy=I&BU06~_`cTI@rPW`0 zjlR|trk~fnD0Ap=`=gipI%A%gtoE3A$bRZNZTESq71{o?1eO&2J^!7FX9E|d zOX>t=O%k$B%4dGoOIEux?|pU^*TdlO8LNsWRGa|^ARqr%@JA{DADzx%^n z&P^OKkw&QvYGTZc3@m&M;55h3$-=xyz{0@9z`(#D3KeGp03Ig+egFUf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0e96963d11cb59d2bcf0d611034eb7eba9840414 b/fuzz/corpora/client/0e96963d11cb59d2bcf0d611034eb7eba9840414 new file mode 100644 index 0000000000000000000000000000000000000000..404e293e1c17f84eba6ee8b3ed2cc2f5b55ce010 GIT binary patch literal 3154 zcmeHJ&2G~`5T5<D;5MT zF!`=x{OVw9>@Te`G&M$yL2>{SV@>7O()16_gvst*Y#~%$`=PB=9%QC$%fINBBC&*K zjPkXvD@dF}i!*5cC6ytoZvIBagjYpb$P@rkNdfNJMwEzLBWCJj9!=8IpmJ7C$|{#F zkBb-kR;MjDXAamiUL@a$r+L#D{+5TbEOX)cY}08%VO{%CGxY&Z1-`>=A+BR QR>2d2;E+U;{PU~-4-mUA9RL6T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0e9f53a4f2b6dc8505e113cf99f9bd103b73e1c2 b/fuzz/corpora/client/0e9f53a4f2b6dc8505e113cf99f9bd103b73e1c2 new file mode 100644 index 0000000000000000000000000000000000000000..20fd8bea8f48bd89ca97235805f02d14463b33b8 GIT binary patch literal 1906 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~y%hqpc?@{j zIJMe5+P?ELGP1HV7`Pg88*s8QhqABsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>NhKxv9FC)|6neCaBDyaXzy98Ce;a8+#cH8atU98yPgUPb@QflJwvA^M$pM-L6J^ zKf3SdjHp)HYr1Z_YTJ|r4F|T!mrYD}GrS=1V!M)Df%3$n6EAZsty;e~@E@5fR(jN< z(C0+5{o+r_bF}~|(tI_$o&Tq9RZ0uRDGC5G}#nE4Ojyq)5 zrCLiz9J;yg+N$)9k4(&r42+8d4Ezja*_cCR`B=nQM7m3_t~t%Ik54{z`>(KlIm=6D zwXO#TrmQlHgn?KCrh;3o>kW87`h{6o4VW1j|08>t73ASY2J06Uxl^y%W_=fy)R8{a zu}*3AmtLcsI^6!~<-X3CCnl>sCLXe%x=!1Do@zz5|15zeMSstKXX4qw z#jzyn(bJMTL0OZ8tdsJYpY@W}?#z3iUB&eALKrNN<>}()-V4by+7i{fu6$eniT2qsB`IO`RRFG7sWj9{hfO z<0CYh>^KJ5@BVeMOSUj~R^RtMo-c5x^+M%*X3zCYDho?B=QW&%^k zoxpUlBrqZpGj6-^BxY=O?MeA>yl29Seee=>HMm5Lqcky_<4Md6$R#+$KB7zT+zseu zD+2=qBXThg%c=kW|3{SQu*{DM2$uCW1_aA`b&NWtggh@|Iu9EFS7jL49}*4#qa|@V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0ea7897c36d8b4f43d1282a6afb5452a8c418461 b/fuzz/corpora/client/0ea7897c36d8b4f43d1282a6afb5452a8c418461 new file mode 100644 index 0000000000000000000000000000000000000000..6d0a55d91bb9d3ecaae88d21171ec6f83720badc GIT binary patch literal 675 zcmWe*W@Zv*VqgelW?IZ}?}2xxac8f_$yw}X>^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|Mg|6U1_n-!e+-NaAi&MQxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9Nak&&a?H8LY=g27sO zu%j3l-nA5E{AeNCa11^l-}34Kqe)kWw(uy_1cJ&XHCB6%DtPA!VdL_wYZ;_>9m*yrkl(+ zox5gNs{iEWH|E7VV;;G?{*wQm@-8t^a8YNfYSMqjUX_!&0qc%_+{iMI&3>Wxxxylq z&*xQ>=Cg{=gG3dBLQ6?^i^19TtL9F*vA&Owfq_AUnTdgsQH+_10Ul3CPTLoeBHhxs zKnCG7P?$i$1_4me!+0>z$O5x#?aQ()U2DELL1a+G151Osq2dgJ3=9k`JWJkp008-^ B(8mA( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0ebbe86099da29775d26e24e1a2cea026f1db4e9 b/fuzz/corpora/client/0ebbe86099da29775d26e24e1a2cea026f1db4e9 new file mode 100644 index 0000000000000000000000000000000000000000..ad48a2be64b10d21eab536503a761906d10bc3fa GIT binary patch literal 2101 zcmeH{zfQw25Qp!4j+-?9S|U+ZP}B*bPQMHtD^;DkG8BovO*~}c4Z0xpL3jh6gEwG8 zpg2e<>5zc|q~_bs*7?q7`MVVOP(=44=wRNl4_XripG-_NAqvS{lbMp3JP AEdT%j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0ec51740241b7a866ea5228e0059c34feddddb2a b/fuzz/corpora/client/0ec51740241b7a866ea5228e0059c34feddddb2a new file mode 100644 index 0000000000000000000000000000000000000000..9d35a509cc09a8a54a084c82336b12df96fe1d0e GIT binary patch literal 6599 zcmeHM3piA1AAirBnPJ8t4MSm!OCb%f!R}JR%F-^Sl?Y3WS(n^ml-Y`mOA<*XeW-1h ztwcn*#^jRCR-4jgKifrlO0-+3d~*4k?>S>ei0|9Jr+xOj?EiV@ne(3KJ?A~=o!{^O z|NVbMLlIz(1HcSL>MMs-!=Ct7(^n>xt)JgOO@C}I-C9NVm0R8j#zP7KS)dJo5CI4P z$^g(%1ox#3!1)2355RdrKF%HTk;Wq^4#D9_VDyxuN70;I3X~<179~3*56L13fdHVL zu?!>;QCB>XinDPwra}d5AWb2=gokpNE?i$O$5<0;U?<5Gl@(!ZPGlH|%Ww(v@Y6O`$2vgayr@DfCd5HU1EqvRLBbJ1@hXd71dHCqF+z0BC$VfblzV z@$o?4p!F#0p`Xy{#nqGRcG(@PAFw}1a^Ip=Z&s4MAbJ0h?G0x%Hf08UVtjQ@Pn8xu zLOV0EwKtS!kuf zC24`22B&IdtsvxB^v_A9qRmv-#;ZWu_L(P8u7aDTw@g z+YpX&iY#5=(e;QMtDtVWKKKWXpcjVhg?A43ZTO1(z{Tz0iO9?te5^(W$4NtGZgHND ze4--Lb-u>g{zIg4X|HuG&h~{g6ajcSAi^Bji3cD_gvmH2va9Ethnc(X3B@sNq+I7O zG^yKjTp$6V;W!Ar*X`>XpL8^C#f$ZXuFK4JMvdLk0mbySmRfx;HpK?FmJfU8>z+y^TX{WnBt7p9?=4-n!)O>x+?xcO3Uqe031ne8NZ(`vDLdiqOC$ z)QcA+k`|$;m|kdZM4CY%?@F6+SiaQy*wx_8J2kuV;yd+)7V+$6b@L9;VDL7*P~@%* zKso?&3n14aA8CVpWRrLyp_r8bl891^k{zyC;*s}-dAhRfd*!R-QQwYtVX~O*CM;vK z4>7izLNk_$csS#m7mUu3RD?oNQkjMA>mXIUn>d6hE!tKTkwQNP_-=!su5+BPvjs+U z+5M@GH?ucX71Cut8NFLrNI!I^)&qHbEBiQEWw`l#K7DQ1)&z&!wE1d->ahd+nV+>q zYBf%yX;ET(aZy&kBnbil=1fU~{FSsADOWe2hYQpB*QW4SeC5;$6e0@11b<0H#DR>L zAOyi_g6BufyjNR%&>X|deWvT2v^#>x&2nqk=Yp34r5#_Km%=f&(s_!(nhE`1aRYfi zihs!oJTq|Vu#$JT2J3TQ@8};CX($R#QvfJMfr>Bw^~Eao!R7Z<|K`M7LTJ7qTbPj` zoXFb;#fe+I#|Qu*4*+oewC!X7OrpuVgRQ!{nrK^*t60qr4>e*(hC~@faoEw39Ja3^ zJ2C{W#L^i9Zx8LDEfMdk&H!);G$%?M5D@}F3Wv~`fn07xl!XzFk078{=I6wDa}k^9 zt%jEM^_~KkUm|@>_ohat)cVz=nmizfHXCkvWmjCb$BUlR@o*k3F8|)V!z~X9gH~Fe zDw{q#@d8)xp7A6*26`C3*26m_CaO7FP$0s%=szHyI&rOSXC7<$XrIcg5m)ol| zp-qIUoGs_-RL_=LY#1}GOU>AJj29f>taGV5J*!!}=X=(`s)LI5rQw6zESlxF#S1-8 z*&m82$Q|u^(%Sl2EZ61o?brTMzFmtu=rv6HFh>D**p?C88MyIR>5kiDfqk||HR{Z+ zoqRX^y;X##!V4?LlKS!Q;14gsAOBDM{h#13p{a$fb6vf~cwvIUjh9#Wyu?*LYjtAf zi@kK7W|~>=pL0W?wTON1V*_T*xQvNE2IC7R37O&C@4|mfxw(F0RXbz(h-J2%68<@i z9tUC=4B0;8gl|?9*h4!MD~fLkOzKPmld7^plBcE#Og;%zRBF|D;J?$9$RmgnrpY52 z0zk18vh0V1(z&=wTGmCWZF`U*+wO~Jc^XH?m?{EKf4`gkPAv*}!_BAN4;4q6$2ebD zte+aQ%!t=ca2h?C!Y^MKp&ec!aJZrSe5~22_MFeQA`72wujC!v*CbM7#*+4JIja5i z=mPRnPF~tl{$BQ|$~@$O3TLFjPoUD*lVE#w-(XmeRk91`TAmr#_n_HOU$q;V5A%6}i1E^wO^w+#tVn&H8q- zdqu?BoC6Vu9?#ygESR-rnMGa9*s@e;=PJHwcxJ~Vl{wam@DX_c`3PB5#-;^s z+W7s)KWTpS|2LbT39?Gsjk7-6ida6|0GN@iv1~C}Lng?&CxVQT)&ISbwR|#J>wY6y zQE@Y+i-IgX0GXIX14wlBtTE96sn6B{O=^HdNUMI|c>7Z?{;qoQkF3`cLr7|hA%xXy z=5#}7_WU?Qy?)!y__JRBx7TZnKe}Fz;!bVhj=Nt-3+E%TGp?BbLy9m~c#9(k6u!Ap zMpZ~F>|OIYD+6<$KEfegUy@SKw+>jjfCkdr_8>BwJqU3m&;j9uRlW{VM_%2GbGS0$ zYSB;#YDC6AI#kLDY{;nnDft?1c{(TWB2Q_V+;M%IE4Np0#7JzBEUk$d|KgxX4giG= zVJL?QA%t&qEJbAngq%poF=aSI9>WnrO#S}$nb_SXLV4;?V)jk8=R{9qhN2VKV8NO) z5`~zLo>TtDKoLC|fS>>YLd-OiIId>njw{3*SMipP$4rhZq~aiy5C&p@J zcKeLbkSmWvpZtG(aN>qF)%``+K6uW{cG)bwZ)za}BLf5Le?|sI1~Fy^rZjE_rX&WY zcm}2zgC?d3gC@p<3z(T0nV2{kesA#6TP-k~$AFiOQ>)FR?K>|cBP%O|fvX|60Vf-C zC<~h~lVhl%uz?_m!@Mq6X!KFF)%SQHZm|ZFfoV{=QT7pFflTMa>=*G8fuLm*qX-q$nIxkWngaX zWiV*$WNK_=xS@SwnbDJ^|Gu9utc~n;UB36D`+m-dYNfp<>!z!>OqWU5%{QLjRu6Up|AKPAu6@}KqV^ufYBjaH2X>T;)5YG=j%GZ)t<1iXT3`9x|iabtOxh+kXct~Eq#+AVqMp&^p1~A%!~}yivtY&3}o4u zLuL6`#8^bSORugu&9RS9K6U%AuzfkpOK-KV2M4CCGK++PSOaziJRtqTEUX61jEw)0 zJ}AwE9c0@z=cB=f5-YY~bQp67}e5Nu8jqWkS|T`OMFH$!d4zz0a=VdKeNu zV^z__3YI$g{#0LiZlN`ERQOv&q(XJ&cYm16xrrkt(kQh-O^lg=frXEOfkA|sfq{_` K#C7Q7+yDTqBl%+h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0f01f0d717fc734901af38f0d0fed914b6bf0eca b/fuzz/corpora/client/0f01f0d717fc734901af38f0d0fed914b6bf0eca new file mode 100644 index 0000000000000000000000000000000000000000..39b24c49f0591e0480760020617f95ff7fdd9c40 GIT binary patch literal 6599 zcmeHM2~bnl8a_8S2_ys%0|5m>SQHQghmf=dMWATG3W`Mpfr1cH7G)8FlBytK5fO@1 z5g*{vLRADoP*x$bNTq5;ap|KjD5D6r3aC6}d8TtAp@1;0Gj`gU`p;x?&z*B~?mhXw z|Ns8)(oh7L;{f2GNNxFmddL%>O8UyUlJ#@zsHu<5Wt%I=J_<|g!C1%uAP;l_5F-Eq zKotNQir~JG12|uR^9DFiD8#uzAyR(?#UVHx2@Icda4(pZO@Z=6(t$rC4w8YFby*&=Q+UjUwJ6b+?ALqFX2YllpKd0+3uMxDsj-Q5Q`GJPohBJMw1X zC0UVz7O!Gxt!U%1$e$C6M>kVb7q13sJEosN!LFy`2@pjP@x%uvU=JJ%7Ij4hXWX(3 z8lcWusNRrNq*L%RmDRs(lYa~Innpw8&W>);F3*ST0{ip^tBfKeyF>G$Hmu5;l^6d1 zmH`~)6j?UUz2gx-T1k_=KIjLnz!%2c`F9TWZ1|G=z}fY{iSYC&e6&^?&rwTmc43a5 zV!ZNP7pB(P-h-r4S_3lBiTC?;c=$nLIh9;WZUCziyZiE53X z*sNyHagh{+#$zD#TDP}jY|_z~^Xwbbc(u{k=ZxpdGYSO5H6 zPKiOcwc*0b&o%CQb=MEHlyoTReJ1{BaGU1c*B8SN?L6+Q{OSO*<%Eec_6Hy|6rq6$ zsFy5ABrQNu3BAzluoRFy#I_rXEn>Nin&xew&ge~gp~zi1 zfV2VR7C^2;A<_bc$Y#kxVhJk&BoSp6B-&rG#3Szt^K@1Dcgk1kt-cv=!(<8D%~+7j0A%|rq8BY7;dBf8r6|s0Usm#Fkb&x9AO&mg$9o<$GkwHHO_)eq1j&r=jnIaRq z{Jvy|o0%Ib^6B!Q4BySqrysmi?T$RYm3f@3HrRMRm%g@RTb%uE+FXr(&FH>;%oQ!+ zI`va%S`gn_Sdh^>V-gguq(#ZNxOzXFpDMgIiNBI7Cr_XdQ2@sIOClonWV{q12u>S3 zKf>`^ZSg^)P>}sh-znj%Fd{$0wbhUhUW!z9etupC$Jj;}C&L|G#uLLkWC5E?Up&ku{RFu@5C1XRoY96x6^ViUQ|*s`|P zL*)ERxHtRjPJ@2jt*JDNx4f~RB=QaHJ#HL6+@X^xQDPgY^lRhn%aftPFeRU?dfl!gP z^<0hm*wwC%?PLHrHjG*>_O~1;v-5v?(u|29)!?||yJ^tR~ z@9)H4TtgFA@49A_>HIjO8!xX21@WuA*Xl(p7JBMEP3Kten{`8^vw(Z=V)__HI3@`}F8M@>5<;%3|Ty++npj$OARrP@S(xt*0x__UhjL zkS?o4XWq3O4&UbhXMf#7&AVk@HObw*ogdgx>Pu-ww?AsS^6RF#-)n9ZC0!U2SI6L1 zwd&|o9`H|Pty!EmV(mBdn(Eu-(jLgl*w>IzzWVIS$8yA#<>sfJnV)fX6r1Fh*?Y-2 zl_#5Js}H-*D*v`w-(k?CH}IF@t4&XJQ~VD*(NHj^&y-Oxs)zunyPnxnXx$d0l)LaU z;=&$wx!+AW8=wCfmvDMv#*qP7erisu#<72a3@h~6kb1q+U9Z_J7S;=o*`}yU^!{D66s6E*J=^Zf;qO>y z{^V{&(rkaG+d~rdFiKCpt*_%D?b^pYU2*-B-?bN2AS-MPB2kt@H=L- zB~XDy!WOA{x!R$bJJFK;0|r`+I>3LCVt%_KJf@icAw?J~yoKR?O5fZlp(>^1cdz-3 zm4-P_AK{RWFG$JfoBOPsK^^H$dk~q)9)vg&XoGOvDqjbwL$7Ye*k2iUwP+{=Rinl~ zI#A3Ds7tHPBp7UxF0G9j|B|3c4*-P>VK9#gA%wr{ zSc=+m2zlX<$7VP|0mA`8O#S}(nb@z5hw9{^w85Kb&yC&<2SvxP!GbkuG#U~DDk`N@u(MMh8=8*qc|JeT|HvUz7b*e_hCcWW8z9!0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0f66d07b05b1320c4c10508c06376070baff23cd b/fuzz/corpora/client/0f66d07b05b1320c4c10508c06376070baff23cd new file mode 100644 index 0000000000000000000000000000000000000000..46bf20dd3b7d63f5a5f2e7dfd5706a616dd30bba GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rKoYplz+f;6NCRTbj0`M%;BfmZ(C6KB zQDLRkrBnaw|Ns9V%EHOO$b=FJ(~=E!a?k52ah?}kUnn#4g2D;5+rPMKTNa4>7s<|M t^$d+_-N3VvU!Y~-))_H}1kV!b79k?l(Ewbdfte(M27+l88bu5YVgOoLobmtw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0f7fb1bd646820e4eed7c3eb69593722b8dbadee b/fuzz/corpora/client/0f7fb1bd646820e4eed7c3eb69593722b8dbadee new file mode 100644 index 0000000000000000000000000000000000000000..8fb04b609401d9b00251a11082c7795685ae4a43 GIT binary patch literal 3154 zcmb`KYgkh07RUDuyn$E3v{aO=Ooex2pfZV>la`g2%sg3R5+PtD3OH$|36|xgmX)J* za-yeubIQs_yErq}u`fzwi40*4k7Q zg#r->`U*uC280GWwCv4(R(rNLVq&H9v}bdhimK%1lY;KbNzQeXpjsvb*?oW^7=r8} z2%78}*gE z#^p?M!>?~>q;crINxYD|YO6t2(E91eY6c4r?LV+}!Iq9DOOx)HP@3`xyZqV|!p`Qf?Umaeo+Q#K&ApFqu&ZZ2>oRF=tGT+E zzLD!(l#RTt&Sh-gx#U%(^`AWf|NOne!=ciDEiSoQbC9!OgQj*$%&p>BUTJRGgHYk7 z$E>p8#`7mO9gJ~SSgM$(zS-4&{>DLu>^MmHhJO&Lu36DVJ`JTe?0%b4=uARg=p$Ygb4%_6dt}pfP>+08_X71t51Kn z&*D#RFpMn$alrGF4Ujw+u~M1BWinG%NJbnDGjw)PD2pMGD@QoP!_ES!M3}5p;3Fes z0!7Nl94#>_Mk#3+|7yU0@|E#fH>X*y7sJ_QnR5ZjkfR+8f4~p`0T+Ws$HoF`4kfIW zNF7)6TKv`hJr?+~1GxpY^{k_h2_y?!#QQ6+}VB*~cIVT@z zmUN<}+wkpQ(+9$4b@;cF$5qWvT$$-TASs8ude^irX?!_X!)}b_*v_{0;jMiX^RHL? z`z*T}qux2X4+a&;9MAWq^!Id}ntbBPo!R~I&JUvIMJ-CUnpo_0K;nD9>`+N7ujc*E z?uh0Ze7cR-qb4RtH!-t9Cky&PKPkZCw2fY5X8K~fmUMJbC9Deb)*|VO;LBdbv6X4> z7qq^);&fDc@<__U%m=%R9^?shr>);Xs2-@%9-u~AK4J((xVfV?iU5Hbqp>hV0CPKX zs8F^*o~BS57{tKG84D3Z?QDnFL#2G#GAS)M$cP>vFcq+IHqK^qjOf8xJ~+#V?a%g) z`+rjIbG8_ddYCORv}+2sYDr6EF_*Yk-PRI0t0q72r9+D2#*pl`%@<$hUw7?}8|0I# zSzqUClortuG5fBomz8usU9|L4J0ZumE`EDp&Ei>p`sgOT7c%rLp`FPvE(ZEfKD(ceohh))!s!%Y&RS>q}Ffoh_x=T=w5# zjcI!Lt4rJq!sn-TR6RFspuD^8mQ)#jBLpoiMYC&9XfrEj`rJ6nORd)G-Q6#c+4<$= z1C}-!`Odx*<>Bb681G*3m+ltFY46N zAVMpHtT7aUiGcBmFEEU`0UB`rWCJ+Qc8E73h9YC7V7ajm*c#%ESTF@d82*635MX~4 zHUoG8u4b}kV%~&Nfy)emOo3dgV2YF?scacv$`Ht!>objXUG`YPmO&BhK{^F zOlwRM!2U1h#mx`UgvD{}RE zLP1v3lv(R;nMv1NXk_p1Rd>(ViYcAYclNaJ-*^=6oOkt*Hm{y6TetzuLIeNvHY3Z` zp}(HXjQY0Va?sY)&Ftk*79L1V>QyKNiTW(uB?^vgBO!@P9jAgey z@rkIL_0+3XWD@v#(}fi6Vn}yx+%1lyn^bz7Jwv+1EMQyLax*u}^~Bv56t1^)OLIC4 z*Sm2Q=!t})W8w}yuk=xZt(lmk<=*ZHE?MlW+NyFnSNO-#`OB%X-`|O!nqALsflw7t zqgg7%=m>_D9bZFm(6YSOIvi zx2HQU%wBwdn$)i|wK~1Hxn@tx+`dD>RcO~dR}<5XcmKgm^!NCgkiMzh?=hh|DLZwa zt}fxg@fSIr`ID`FaKHULxA*9Q;>%@MW{hQ1%8!~&?9r+^PJ7;z5 z(LcMFuDA&mo}u(n#<1_yhV0Fh*BAeKCC0Pyw^H7&iOa9uzn<%m+7Pa5{yp=sLt~7# z{@KlVzvzccA_}|*Bk7!XiMp#r`}`fC>Jp^b-@{kIl;f< zEhpN}zd3%Q=e>YKl%H8o$D)(xW2p~+;rJX)Oc$=^E`%xERahXBB4xa=pBEnSz#<50pFaX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~Fd**XT>R;ZCQX&Coc>GrQ#}BLf2?0|V!OMi9loz`)JGxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9NauX7ZoQO$cghB zni-fHS{j-g7?~JGiSrtn8CV*c8=8W-80s76Bb&&`%D~*%%V5yh$<){gb_wy|KLp6b zb#TC0FyH`YG{CqF3=AJ3Y<30)CL~b^_{+rn{XgSkDFX=uPB!LHSz#6?0|o3xk0WKtqpcH0Wxxxylq&*xQ>=Cg{=yYlj2)f(}_T`eUg)#r`YubMmM#`-=!1_lNZW(MYe E07z(xXaE2J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0ff55c5e2230904f98706641c67e0c89a1ff7bee b/fuzz/corpora/client/0ff55c5e2230904f98706641c67e0c89a1ff7bee new file mode 100644 index 0000000000000000000000000000000000000000..049a76fa95c1d71c9b205cea057dc1abc5da5be3 GIT binary patch literal 685 zcmWe*Heg!8#J~{F%yc`~KcK@($^LF1mBuq z#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7JBm-4(-~0wL^Hs{z;KqCK_ZbwtGa)ZjG?V& z=`*)qlht2Uy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm z_g_=elYf1c_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuA{4jIaeVU zb)_z>E_OahVd(?Hpx&v?ud1F{A81()A8e?4DV@~)2ECT>BHgole3*hTGRItJV KBHG%bzvma4J@T3W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/0ffb27ffcf54d21d23c6cef43eff881e29d30ece b/fuzz/corpora/client/0ffb27ffcf54d21d23c6cef43eff881e29d30ece new file mode 100644 index 0000000000000000000000000000000000000000..fa497564d829fc6448d154fd0a4b34ee8c1982d3 GIT binary patch literal 2844 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e3{YUnaqa|HqM*w`D4(5yftNv}=15-Q$Q;b0qQ-nbirP1Ox9Ni0bLGq-T~CD+H8OD)^M77|4n98k!iG7#SNGm>QTEM2Yhnnj4rH89})uTT_DF zn#TFa?q_6WU~cSXFlg*#YHVcC)IPE7nDpFD3_SWlk=?G#_kMKW&lypzwAXaqbk(*g z3mOh=kuRH=?q+yF;Kg<&xdP>hMJHb7R$8@wZ{R;NRjl-=SE0{|Wc$URlILjo&-xDq z3)JOOWmd6Yjn3C~eycrUW6ye($$?@oj{dT9+#$0r)ml2@(9Lz%R;71*WMXDyU|bwv z;AbGq#vCfk$0Eie(p`FW&1sH(eDbN=e}(PKSzdapbv-yRWtCYZ48$6+E8qd?7iM8K zU}j|ekL+PqkcS%?tY1{*PQ7NE^<7v}NBU65I;GWLdX2u;6o#GGy(n|&aQmZ|`#NKu zn5_1gc*uV0I&JrPsukJ(vjmnD{XPGkiDv^B$C9W=PfO|qWla*YPReI~)=O5qGw*$N z71zVy@ENO$CRVW2$@i!F%5w{?nWMtrA|e&4o4xzPT+U4#F_A{84QgV{j0`M%4B#}! z(8f#mG!!e-7gkCnb>^~7I;7P#rLHAH{LU0#Xht|7#BJD5k%Fpde6@ZtdGv< zUQ*cUy6mG!ZgBY^`G;cC9Fo=ON96Jm!h%qxW-sNU+yve|Lje+s9K@;P7gC@qZ zpD6ZW=9wl=hOOI_c1E!*RYbKJImWqJ8JL?G85!(OHm?`@woPp6DfZe4jNhG~o!VU~ zzu=Fq#J=d1q^lo%j|#Hrm2ZxiyQU(*Qm5#+W>yY|P|uC|J={lV`M5z-u8{ zwsjfLmi`?sux-%^b)TR5A2MIBzi{-ea!>mF05N6;Xj0fZo0$O={30NVEaXa-E@JEw z#}{9a(hpi5;>%v?uK+-;m_b-~AFHHWL_rks{IQ8Nj(~`szg>YCo^#A{VM12LV zKtTYMs~wma7;Kms4F~{+1HudpB8VDSfB~eJfs28GK!sV7S~SCS+5sKeyIbS-biMrW z%*>JJ;3lzkw=IsIds8TNOg3j<$MIkPchxibUs6)%d04VxR*21#KMpCs{s||&2)&QSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*OcNI{GchtTaWWhWe%Inz zyZ^NTCmXv~o5wj@7DfYCLv903Hs(+kHen{mP(xt@K@f*Sgey2dH&r*dB(WsbP|-jh zB*-Nq;h9>9lVsq7a^$lAc*otPoIAso+zRVjw5ZYiMF%Vq|P&Y-DI^9tGx_!np{YLH8eA@G&V3aF*GqWjuPiJLgpHX7z!B(K(ugzwPYk_<{323M>d*~m4Ugj zm%*U1lc}+hL9ll7so!m<>u>G;H0Qxp4+p=6k612EyDEC(@=?3R!5WLF%viZx_~YZY zgPd`TPOjR!kLTX*{I=UoivTEi{WCEOKTV{bArFfg98X}0H_ z{7CilVy4scJz64s0@7j=mDVr1e|XM8<_lVF9(T+_t0X=}zLJ^9&BV;ez_?h}K-z$Z zjX6|Sn1$7VnUUeY0XK-p&%(mYz}|r5`cM`N2Ij^_hMITUvy!}agy~wwKF!=V^UZ~V zxxIImU5$AxCy-`xb?cVwYp;0Ym0o85m0sG}#`)?!Gq0|(;5ti_fWs$jf9<{5z47h& zy#G>uU9bMXKjFib8~BxF-8wC$mBHOXf)cxvZcI;c6|Km-b776T?<&uF-lgs_vWy9XkwHDMc;cSMs6fmGIERJjXpy&VoQBQ_r3+2~QjI_6Mt24rAhz?q|r$cPe@?DVC{ O$BY_LVhPPovseIpR-)QSh5b1?q@|NnpI_LvDPOES|J%rgvSIH1kI zz{{Y_!0?}ufsuhhoPj}%nVG4Wn}I2xfhmW9Dbt{dDb=8f@$~{`CPo7$PKNsiP{7H? zuHWWy&X$GIz}1l3fRl|ml*K@f$-ux+*gz1>5$1xaH83z#G?0e~N?bdC{yaj$z(4_t z4dldmk;M(rxJcFr6JZU^D3I|W0Jo;hK!A;13*>YrMmARMMivGo<|GCd1}Ko*vqdfR zK_ce?qtZ`CdmCcjSAJ(<P6$jY|w<*_cCR`B=nQ z3`C#~Ljk2AX=Ro?gPaDe@(VqexKk-0nvf!s2V|`<3#$P$BclN*YQf>d!pNM-fZ{y7 zAduyGT4`?SYK~i{QYZe4Et$UgoW1PKQ@bkfX)zfHuC)ERKV_HH#DrT?>Z+cr$}RP; UZ%t({-eQ~hebwilVlAm;0Khc0@c;k- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/105bf103bb63867a6fe03ab3d6bb9492a336cf0d b/fuzz/corpora/client/105bf103bb63867a6fe03ab3d6bb9492a336cf0d new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/10638f274f6773468397cdaa816ab001cf7f9a69 b/fuzz/corpora/client/10638f274f6773468397cdaa816ab001cf7f9a69 new file mode 100644 index 0000000000000000000000000000000000000000..ce8a0c148a84ec26601f527f5ed7e1849b029297 GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok3>1I{5`hMZ>Khtnz;$5w2`)o4Xosm3 zfHD{veuBcFVIz0{v;_?hWaI8lS~m?U_nR$TV^-GOQxm)~NEOp?_!sxI5 nf$QUWPi$E=Nxrfz-h)ds;nR7j5v-fJLT<>3F*7r;@PUK?a+8ID literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/10828b25f4fdc42023980690ed199c90929ac41b b/fuzz/corpora/client/10828b25f4fdc42023980690ed199c90929ac41b new file mode 100644 index 0000000000000000000000000000000000000000..17d3bae95c22a7513e31c1ce8a44ec15c5910072 GIT binary patch literal 575 zcmWe*Hega_VqgelW;P%I6bQ&0Ftji*aQz zGGpa(VS~qQ2RY*wom{nd$5~ecgYYRUOoVL1zr>kLTX*{IXRuo=)Fs>%4PtK^u#_%5 zXVYxYY4Aw(vjNlT`5rA1a7Q1WV_?91(7@2Z%%Do*Q{*d|iQG)gjMj{cr3@qtIN6v( qWrbOo3>XZ!K}>!Y7G@?^^uS?mY-E6&H$Z@ofq_AUnVCTd(|!Paf`g6# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/10ae19aad866d132535c3c6cd463fa80ae982610 b/fuzz/corpora/client/10ae19aad866d132535c3c6cd463fa80ae982610 new file mode 100644 index 0000000000000000000000000000000000000000..674f139dec3d371cf38f5987f4f13e86b36bf6c9 GIT binary patch literal 696 zcmWe*W@6gJ#K7Rj%)~$dD2TMI`V+Ni_s3_Yb2nAathoB;ljf`6^C##{l+Cv|_w0?^ z0bvGi2F7g+jGGx4HyAWAt}$q06kWi~#K^?N$Yj9F#;Mij(e|B}k&&B~!GO<@$AF8C zIh2K2n7ODp(Lhd|*U-$s($Lb-(%8VrI7*z?2$_qazHvUXiHxia%#FPa292Fejg1Un zntV)IDoq-0?fx|9!Br0jzlD!jE={{CdgAg?yT!p8i>J(3xm@_;92ro9E5C@`?O;@y=_w1GedZVqAM%hdcdN z8YBDO)Ydago_<)?ax>)2Y@e+v!OhtzGDifuk1hJMuDGs~hk;=k zGlQ(cKOHq8r>oDjY8Fq(d$y@g_l)Y1c~!NyLLb$MJ<$AfG?<}bfy9P_yyQQghqBLF za~ioG>wI`MF=YC2tNQMw_^2;;)^gN&Z7NHdrc_$^tf6bkw+-j?Zo39v*Xs=bA0zbM zUwhB9H|&*d6*ZG`FHB?l>ez7h)edRhM?s2`&uWfoi6?Vx;k({He`fLZcV82hWM`={ b@CS7XgdbF6zdcXEwlHP$v=@8~3=ARwTxAB1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/10bd217b6eb9ce1a8dea39f331f328d289c0f237 b/fuzz/corpora/client/10bd217b6eb9ce1a8dea39f331f328d289c0f237 new file mode 100644 index 0000000000000000000000000000000000000000..4af5c28dd0a32f815985748db784b03a566ef0e3 GIT binary patch literal 554 zcmWe*W@Zv*VqgelW-^v5m0wqOrmRT$aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf2?0|V!OMi9loz`)JGxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9NauX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>5$qC*fdje;0_Xxb0Tc80 z|BQ>J3?vLV*_cCRg;|&k7!0^UOnw#?W+v7J$WG@5IlYmg<7b1(sVg6)_cbn%Nr`CL zZDVA;Hsa)2lkd55?=$~UV_;xlKChZIpH+O`m6r#r)`%DG pYAGqHK5w*s)!ZpJ*7xx-FffQPGc){S6k}#*5D;Nt;CZf73;^lggI)jt literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/10c91def9466376504fc44b5e008b4dacefd3daf b/fuzz/corpora/client/10c91def9466376504fc44b5e008b4dacefd3daf new file mode 100644 index 0000000000000000000000000000000000000000..deba90134c07a69d8ef2607ca2e34a3b8aefac39 GIT binary patch literal 431 zcmWe*W@fNtVqh?3WQSimb1>fcIib|~Ud)7*C7J09<{5=D9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*>d=&A^zzz!=NG7-i7J7-rD;cL6gKBNLN=wA~R)lSxgg z$)&AVLiHb~7;v#MGBB{7vt?msGH5VtFlb<7(`pv#nPqLjz`y|EF)%V<;W026@*D87 zF|&j+tFslMYj?42Fl=A|10oGEpoSqlY(>S15Npvud~)I}7aO>v#9%>8R+xc;ILx3C H;xj1#2sTq) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/10d8f9f621a9746715443531a062c4af2d7f52a3 b/fuzz/corpora/client/10d8f9f621a9746715443531a062c4af2d7f52a3 new file mode 100644 index 0000000000000000000000000000000000000000..ac0b0b9eb8c8a5ae850b4fe3dd5765dd228f92cf GIT binary patch literal 3197 zcmds3Yfuwc6ux(Nvp`7j0fu)BWB_?c?nVNlfJF-dqzc8zh^R%3NfZbTtAG!bMbYt9 zsW4Cn%qW=JWYuXETl=04(*MlP8_nJ>5y z8nXZjri_shiOUGm6q7|zrf8ftV4Jd~YPBLxE(lJDr5un@dx@Lcj9k)kO@f>j_^+as zYK@9c6-dR1Z_cG86eXTYc}b919A(a>JP{@KM7k4&l%tk1*RV{) zt*?0@;8^2rPJV%{%$UJ+|IMErs~+50Qdsouyxkp5^m%^aWk2y;;wME@$ASXu^)1Q? zWnH@u7b2eDk`*lmW=)x_{Znrz$?shY$u8e>zl;=`UF+^_lvD;herV8syZYin;nr#V zU1?Zm|dHm!pyG8$b)3t`KPr%#+UD?n%W)MZ0x>f zF)Xcj-t866@_A7H^1;k3V~26si+ZacUG4HpEvUu&y7?_J#V&_3#@C9;wQUtYS~$+@)d*FPN3xS9B*#Y_rUv`Rs(5CAR^0x)7o zJRFDZ#sIbe*bLxR#K1blI1HC_v8`{AI&hH{`G* z)baAk5p)bKr|fjB5^Rn|aDwxY`9!LgDO7ZlAdF5Ggwo4&{^Nl>#8bpm#FWHK>pvby zG7|phGOs=E-(?mc)7Q{3NE+&Tz#)mx1jKKys*W1@!Q9g#J~w+?==I!{m8E=c;6Qt6 zDgVIDswmjmoLj=S=sSC^fIq)uT}DtF&&sCPHtlKlMH!gs=3bj0XV}fZ2g(`I5!q(>%{Isr#Ndg>BxI zNYcMVUU8;D&*=#tmDM-LZ3u?W2Vzz7|6?`h6J+&0YIVByJ@N@?HTC^!b(mFP_%R*$ mO|8BIRwG6=`nQxBRjc@ib>IOD^o|_(?QeHHU-=>4?tcS?;nhF@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/10e8f74982bb0f6debb69687ce1b2ecc60eaa4e7 b/fuzz/corpora/client/10e8f74982bb0f6debb69687ce1b2ecc60eaa4e7 new file mode 100644 index 0000000000000000000000000000000000000000..8c6869b474165fdcd95b46b0fa2f60eac0f78d6a GIT binary patch literal 69 wcmWe*HehgIVqmagW-vei69f|h7!C+CFo-ZHGk^f20fP_&vw?vDgE#{N08*U@#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/110e0171699c390899bcb17acafb77de05a36669 b/fuzz/corpora/client/110e0171699c390899bcb17acafb77de05a36669 new file mode 100644 index 0000000000000000000000000000000000000000..0b3e3efa2e782b067f9b5e951caf0b58477285b5 GIT binary patch literal 647 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZ)7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%!RA}2UXuVAK64kRtDzAUIv54PNv32mVMQ(kr`2IO(wi7 z+tRh>i_@ETEkzkWnoQ)@KkwpM^1kC+-tG0F+xdc6&j?nnJhxeCiBgUD%NLWXKlgTn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1111c6e8a5296457f88c404603bd13703264782f b/fuzz/corpora/client/1111c6e8a5296457f88c404603bd13703264782f new file mode 100644 index 0000000000000000000000000000000000000000..5cd6d80aa59bda8d6a2d8e5564dba0374cc33261 GIT binary patch literal 537 zcmWe*W@Zv*VqgelW-^v5m0wqOrmRT$aX$y9G9N{c4xi9KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1Hz3H0&zEH$oBcxXbA?4J opU>_&>hYCzq(2(99ma{>Hfq{i# zMetkhhX*$8NR#=(%fMj8z@W*%BETfbK!79$Ff+&~oTyQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D#M!Oxwh! zo?@?^!1&$y*{R)?@(cdxO6-eHNxJ&M_oyI?Uis#Txv&W7s<5lfzr^bMdu>P4Cba_P z{H^;!Wd%R|IqbV@e|+s~tN7X<{2mb@Ey5LlS|?X8Q+~TlmFsQloRY(}#mT=VBpDw{ zr2aaPv`^ywi)QCblfUM@ux|@ay*S6ZByoo6v;#V_celpv>3aF$nVBQc!A)Z8Zd)8Z z_oh(lm~76zj^n@n@2Y3=zoewj^RQ&YtPqe%^MS>BpZ64TXLM(&XvgLaxj2bP$iv#ft`VY zmqD3<;Xfk-BSQ=`1A`bdBU2hT15*+MQ#=Dxj6oAqgh3PI!3E4rj7&_N48J${=&cr* z&11mJ#;Mij(e|B}k&%^^!NAp!+klgeIh2J>n8`8JP}o2a#NpuK3eL|>)eSC5EJ-y~ zG>``ga`8xb=9Q!t<)xM=glDFtXO`m=$cghBni!ZE85YW;3>rI`LS=~jT!p8tka}1p<3=FLdAW*N%*u7%mlZoB;EZC-9`dIU5;ZJ?>Jt_Z<_e@%` zFD`QOqhq^v|& f>5G6OfDz<40g7n+zt|_(LQsNc>qFSrtzT3tK_(1@;N-?R)wntwv}9jGGl>8}vtKqt{p@^1;(QVqkUPF)?JGaHSSuGoQ@2xoOKSC2Q5-Gr9F1 zE!(QU(TzV6NVep!Y{J@R7EXGf3lJabWC?T<8YhC{ztcLDM)&&XFDH8k6QeN2&G3%H zTV_@V*`k+vtF5G(%QC#~UCa#r9i8eWd4BB>+hA%{-KAiv=af`c_B)VWMb>QSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB5+%Y#d7gQxp)9Fr)-*9HA$x$4m4Ug5k)Oe!iIIz`iII`v zKLJqx- z>i^q`W)4#XuIy9NO1|f$t-F(n+1pBSapQ7>#w7-_Y|Npud@N!tB0py@%|F|5HKB0( zB?XsXw$u4USw0z*f~2Kc@(gksuqp8Tv~Y<#?r6hI9bC}Vkq1p3B?XM+I5*$~Q;Mb%X{|SA|_={v}r5-)lRXHmMaT=WpHTaYg;ppToYp_Q%(*wu-O) z!S4|f(jr{(r*(4mGUd0+RJq=!&M7%uTb%q`LXz>JMCz{tN&6(;zi4*8H2G`Z3;VX< z)QfYhOA=?8PCK9@dv|Nxp01Z4o|!rF9NZ+f?zY9zb8iZzj>+ci>p1@F|E_u_|4T~h zJP%7Y%nGqt^2Z_N*FWK;7onP&MpLI8nz}7;x1Z#fpX;_+Zg^+8CD`}B{^G43anjpn zvv(N>{05I7RP5x*b;Wxln{uhY{@&puqi>LfS>}3$gNs1hL8j!fh1HAK@t?D3W`cW zD>Z%Gu)P))3sz~1KB$PIMX5!-L_mz@%0D80`FQ1E)cbw15`^PZXWo;m;DIk7=e zCE&g^(+Xo`WuE|2(pDB zhyg*63539q4T@5XOdtvgq972q5vZ^{ph87z6oC=M5Es2#@4CzE0icqN+zaM)zNW&k z2?+ubxCt;Kqj4D73WKOQk}IfF6;`$6Wz~SVXO+ykArZWT^rLJvc)l zlFG!2EP6N_&}^wV2M26F+?NB`>}9r8+y~%nAE3XM0nsO4Wk@j&;Yq~FQdz2)huZ*a z;#CF|>OyHos)8p@r7sl=*1nI6GCnR_Fi9U5#dPi3wM?NtU?yL>2B=_{(Q_6M=Y&ZR zs)EfRpn{DN6%0eCBDd`ERKO{%k+xsexXkRVEjiD35m^Q4@c8DEw#zj?>DJn>a~5vV zRdbt@Sk$K9UehU)(Yw>RVRuw!!^+@IbAGHFE~-3qc;}KGT`h`>v_sdp>}c#~VN2KN z2PWs-7ELBt zmF0{r0kq;=I?klk199&YX1$m_)6UopCy~s_3m*uOX9g@`Q`V+ z1zR7n%R`#ao!ELLjwUx%vQB-muk+mXBTVUWu<{Gu5u~yQYg{_Sgf?w;&Gpb6&?{B&SvsuiVvFs{C+cEBBrM* zqF z{rlyi0n?sl=eG{7!@=964(A5a2K%~B%{cM+cEn%;?f#;Li#|^^n^xj^SnPYRyt1^N zTla2nZ**%NKF7lIVGGMgJ1x6PD-HfuH$Bkgw1rM+WcYlJhH`9JDX59`(jb}gkV~Fq zyXuU0OWI#wc049I`F+~b?ECwR?-%g3r_J3UR0mXOA5bA}BN#%Ffcy!G!XYqsA{Iso zU~EMV7f6@LGUN(^K}>wIz7R3g%JThsxJ0^&C!vP~>(S#4W&#e*!8sfsJ$i7qH_rCv z_;dW1{gagYh%Lq+vt^${b9osLwD7@y}yKI<8 ztz~~!s8*Q7M#mkzrdn0n`{eV)i=CuA%Z7yAL3PXL`RQU`Pt^{U^h|2Fu8XDWBH!*` zqRIJHy;{1t{`VNC833Jg$56gVvY|3y_7Pul@h|f&uqQcFHQK?qc>2)pKUVfLBdg}# zxbnCm#o^@D*!D^Dw>mZ2^PHM1D!F`*jU2IHW260rFqeVY(qHfAMVeo9e|n~jZgI(b zk2$998E$&5M(65!p2{h# zs2DP}$SS1yUZ^UTiAUI?dusbko%+Le}w)G(y&& z)Tt>ULNh|vm^A{E0dtHmFpRkXI-rf&04}f`<&BUj&sxJz()R&N!e5UCLqLXMqDuk} zu|~s~z!SKuXQ-zYOr7Akig0A{WfD0{s1WK4jLDZtfGy!h$IOB0N5~lIr}{oKCj0N- z9Hlp>2=kvMwB~9Y8#Z*flA#MzhmJOSt;y9?s05x${>)@<&*Jljr>?MGC+-PI*%z~J z6KPvci~GEdH;p9g&o^`S_p5prYeb3N&{wwfuV1?r?Ok}KQd7`Kl`h?k=Ac3Ud6Sjn zY(Ll-z*_X>woAb~)3>``^BstkLX77P9P=ML7@Ck~$0v$JfHfC&P5SpGLPUdCeUciIs?j}}KL(?-ddC7Ef ztbm^(6VO8hGKDx<%;zZt9|jNt0e}rSY#hua<_!V?e!!0~al-sZF!Pc2|7WhabJdOy z-sx-^4oh>F-rSuDENQL#u5H0UWk?O$v(VYVaLb*4v6B7Wej#OUt?+w9s!hpF zKd5b3dHDGAyzasoX5YHrdY0dR>~P7Y^2>AWIMx-%%ENXtqnloA4moF28t)bJywEFe zUHq}XdJ|XQfQo*$9Nro(>B7Dv+FR|~mPGXuvePuljC z{#|c;Vy*mJ6Q+6G4Xm{Oh5f`1ov|28fAE8MV5i?%1D}nn_GLY`0lLI`k4NdNy9Y#%teto>nyIapPp^pW$r`x_PvB`Huaq<68PeG@KbhgV}rSk^qXp8;JVI7=-~! zz#w2m$ld@~vw)Y{qrh!c$b6ZEDHKQ*MDO^ZX1Tt2_&mLuqej#m4njc)8H;nILtqy0 zAEOBZ+jtSrk_WI@`pI(q!(;-vG(*N0$XPN$np7@UNM%_QYI_!hDwWWeotCLl^FKAY ztKf4ZsxX3vjxS*TVEzqdf95*)n8d8j7rE3IUu?n6-fII6mj2TnxBF3ii TcyW?YtdP@VUj=Hcbz7Z4N@77-N_mync_laW@JS72b6&A=e| zosof&fkBahf#CrI1H&8!1~F!4#x5QP#x{okV0 zf#U!FpfG6I$lX6pvEhO2v`P2k*2RXr2|78SfxM6*8EobXxgjUU%*?>T$H2fK#?H(D E03|kb4gdfE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/11e0aeef79b2367cb5804a006d85c2b886d23b4a b/fuzz/corpora/client/11e0aeef79b2367cb5804a006d85c2b886d23b4a new file mode 100644 index 0000000000000000000000000000000000000000..652c88223f7f19577e59b779691d29578ad5c14a GIT binary patch literal 476 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok3?2Mf%m9}Hx&0@| z?F}2b`=>2vcp!Uk(!IEKu_14QPO{CNzbEVWsaXsRYPp7L`LE=Xe{hv8Tjax0#VH>w zyPu0ObK9aWNTBdAF)%Vf%-ISxXBym``Fnn|g zJqtP@{ASC#m285_D$`?ZuFP)UzvlGa+6hPY7R+$zo1-|35gMZI7QYrtef5t%b6{cM p`gqQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!kd65b3kM%paDHy8Zg5Fr zNvffufjmeBm#~CqUP)?EUTTR#cxFm^K}oSfKuM*7Pf3b_oH(zcnSr^1rGbgDg@I)h zm}_BZ0p%jBVMACG$|B4Gw&vCveAZ+lS<}R*1oc4McV0$DMpg#qCPsb+gC<5UrY1&4 zkgq@h&L9&|svid+XzY*wm^w=_QiIvX&q=V<5X!=37|H;RW8Ixh%(nmjE^b_I(741v zmW?@7mXAe@Mdat~rTJ$&t|k<2zog*u%Xa#wS1g|lO4*pTWR+R+400MU6!3|%e43ZO z#N7;@I#8mGLzsxvffQ{`NXd@}@3kFG zo74)F^SAEvxT5~)&tczP`{Qd@8^zZ$FnC0SvI*$MPzpI|f|B{kA&%=@pvqEf^{BcP6^-nnIMdhX~xnW08!E%0RR91 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/120456022a86e0885aee95109670427014551022 b/fuzz/corpora/client/120456022a86e0885aee95109670427014551022 new file mode 100644 index 0000000000000000000000000000000000000000..db4cc4ec900b8f76dd2551c2294ec3aeb299ff6f GIT binary patch literal 53 VcmWe*HefJdVqj2ZW;P%i007BV2!{Xw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/120a3cfb04b41e631b9f7321e4902fe203128fd9 b/fuzz/corpora/client/120a3cfb04b41e631b9f7321e4902fe203128fd9 new file mode 100644 index 0000000000000000000000000000000000000000..97d8079679c6208a57e892eb0583c35c9f9af53c GIT binary patch literal 3154 zcmb`KYgAKL7RT?+O~NbTZ6F{afKefkoCFdGN)Rbe6;O<{Xi{8Q5G_g_&@m!n6d#BsDgwn>7t~^B)|wB~`|a$r?>+mRyZ^tv z4+%jaUkn7zLy#3dLB8bfs;uWt=Z3>)*HPv_U))(#FE^aycSla3G|z#ccnGq14?{2n zSwRpq3PGbr5C(=w2tqJ0f(ST>fPt`Eff}0))QGqe!N3@dK1=*&Gi{H_BS6F(xa0=s zz9qu25e@<&EF)lmM+8{B1x66bvH)i2z|g`lNG6Myil`w;LKY1;p+>}F<|m_4Bu^44 zseY+Su}m&erc;C1fMP{taab(27t50a*z9O4B8v-HY%Z95qJen&QX4)lrB5*QkCjT| zWb!0QEQzp{fX*0<_7zBpkDmAK*icr zSOWsykdBA3@a=RA4hH&oe7uSPV=w@qF7{YwFbB}`owN?0Li}t$-!Owh0w(t(ot|(; zlL-ey+$d_z{WSHW3pr&l{_d4mO=lD93eI^A2i`VfY>I&wwmI+eT#B3jq;BNN!eS$u znakI&8=u`8@=UL4Lf#EidSZ{be6KRU>&#>g7G&2xtX$QPlHVYtDT)uqm}u6 zr<>zrbkKjks+YQbWdRj!FcEV>7c;E=~#&TNB~0%VvtC-T%M{>q6}iNY$p>Di&&U{ zvIj|JYh$HUe?JsG?mXZDI4ll}!{MUn@no^xS!{O>kHd@pD=GKC*i!C--MFedqSzZ> zrS9#H2yV>teML^T*%6r4yYup^yz35w(G#)62KEa`_<&%O$|@&K1@ z-W;>nw{c~#moD<{EbUnFz>MY_x=5lfbo{__P3F&)>t)-Ueu=Q33y=kO^c72`TdKY1 zAMwN&{j|so`z&*oM*D7@l`^*X*EL4W(3*ue+n+Wk*wkK&yf*1n^nnlGep z$q&mGP4a#t_P-z-kH^roi}5$oRaTB4~LzHhPrWkr1ErBBm=# zW7oW;mxhNf&l)@0>Xw+LsZfhtRYH$A{=l+J`e)jiZ&&a0PAHGqv<+8~+36Cz^_GEj z^P>*VfnoLFGL3k3KlF_i_1m}3h5MJZS8H-xiLw>jkxaz*U!&=n4&-;O-pr*N3R?Vj zr|hI%_Z$gb3^~1Q=9r%Bb;?$3UgE)MP1<$al(KKD!Y28*7Xsr!EBw>=LH0A(d+~a{ zZ}KlCYgR(q^R~CRHjYy1Db7OaE(4!E1M3VNjknjSIjC)3bNJND?EbvD zCg0I+zsMOrak#jp?CL^mU|DgZEO0j?yzSL?|BIxOD7T20d2ZR8qE7raxO)9fsPIS2 z5z85zo~FR640&tug{uO3$1kP)^4aUI-M^kgPH79%cKw=hl-wcEv_8KX;}!X6Rd|8h zM1&J}JWktQbdX1e8cHy{Vk6@TFGi;wZvUGle3^-!U5zVc=New$C^yoA*A+9He%Ghk z@+bB)Yh>;+Y|5kK?miE^&g*fvt}Rc0N&>poP4p)z>-$L`v_Aw?FQygYY|CJ+_#ORb zZOK1_x}B(|;qGO-4s=b4n}U|~&(Uyh3JoTx;4ILRjsu7R{2tAZR67&YfJHDc9(bb; z6s$X7RWgBFB|X>qgOG)CDI;DaQ=+xw4>c<$lSddkspc^BT_n3Z`6?EK^97GI{!Exjhd;R4Qo01M{S?MI`fF zfUi~Q-x$(wX-Ub78@%+QYo7i4p`q5W+x}jsegv7;zX)>vp3u%UD}NFkSCzQstVLJQ wM1J%t#rVk{TQ=G2c&UfwG16z(g9U%O9-y;43^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZ)7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8MytcP&L3KblPB)<5s!S@OQ)Ti)&Uq1*X_TF(eptvt6`X^B#e_{$fQsz3LI75#ei zeV%6XP4%?j+mc+BJ`}Cv^K-jg5Ohv1-1X4i{%f_5+w|N8#pFz9Pusg9Qt1_N#olb?l!nTd4)veUUi zPH$xB_}O4`>dHsyeT@rbQX*P*+Zb7|jW~JMOXn;jd}6Tm`CoezvRECyh}_JT-2GWn)F|_SLLK`K#&!mFUveO`-R@; z3X4=epI1$q&niCe%FBaQYs3q8wG@_ApEp{+YVMR9>-+c^7#KvDnHd-v#h95H1Vk7Z Sc%JJNXXv}1*_e4|wGIHe49jr< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/125f8a2bb1cc6626e9d745a19debea0f410363c8 b/fuzz/corpora/client/125f8a2bb1cc6626e9d745a19debea0f410363c8 new file mode 100644 index 0000000000000000000000000000000000000000..edcab1803d6e8012f6d7a633de66b752b677b0df GIT binary patch literal 3122 zcmd6pX;f2L636Q;d4Z6y7$$%%5QCty=nW7>5Jhb?A|Q%kb3u_vXK+CXo62H{$S6&t z0wRK1@{AVqc++jC~kmCtF3~kRkYP+wKL}hR6H`%XHI{a%7>(0>Yci`{?r{-%}on%#1ifN91VlVDDfr6ip1$xT25lkZC0U zdzwJRrI^;K;(AvcqqH%9( zkVc01gVPMDD%WBF}1W=I&6-vp1#2_uHoN!M#d(?zZzj`X3huL4PelT0R~_J01p5l zU(@l}7B*n1pzf~le9jAw3x+F<-G71rw z_AN;^Vo_Q)6vkjM338w3@(d*WY3t1B>TOAe^wGweCZR=EV zY9|N7bQnM=FbuZ0cH~g&)oT;H3lqvt3o2|obMhyee%IDKOFi|OC|mdby`(z2AWpOT zVj9hJ_f06Ri*RDO&ihtxAMsU4$4@pM>BDRm_~eEEp=$oUI=~=c$&*wwmvEFA`H%MS z^`}%FTZ^ZZU)AX-XXn^lbh-8Vhcf4-&3e%jC0-$oFLFvzc*{PqQI5r?y#C!Fj2Y|Z z5;Lded(u_nC`fT1TQbf-%_)%_I~)+mu* zg_!O0E33Gyy{`&lvhIWmoN|p0I3Et&Yw8l6IecS>Nw3YR!=cLr2iC0b2{@PT9UFFS zaX?($%N*PksxsayxitMha)PEmisJjAc)lmn(0>pW5bDRqCmTFuKI4QhjU!*Q>@ytw z$23E60%H=>fqZHsdsHpe(4Rx&|1Z)XDN!jxsGt4^(PM-ZXb}Asp9i3UfKT+tvGR{J z?x(-Th8*#sbroNCvNlyj2=)es6#X90oVcaEb?Vdb6>Tnp%BgRSfWQE5X$$~x_1PqR zZlho@g%R55R#&4vebntLGu*lFL|=Mgi=q6N8;LHL#xTM>iIqPqQ}7exckNzyR#rJ- zd62{L9a}x>b$yz5`LbE{8&jKCY+wd1n42`&@$PU1?`-X&rUO>pYOST5uk$hwIjO_h zZsG~)@psa0mLxbBZa?flzbVQ+BdFeee_3Qo(G%jEWrFgc|et3w&uJxf%<~OUPLYdZ> zR+^?foEtGW%4$R+85kEF2JbKUapx+Y3!C+HYY)cunpeEx5g3rV^zDb$U>UNPVYFv} zeSD>Ss}fyR{j(seNtHoI7!ojWVNqy95>?_QK zOssRp(<|rV%?tbNjH?!ghTMAPb4o>LO69+6%a^w0o?O1=v;>96L)(dHV`eeoS<-Nux z*h6D!PfbXbaYuW~jB7jIt!|&1>MOmTFOo0Iy`EEJYkI$OiCbvTAKZ|3$i1K0~nzhRm~_FA^M(*aP9r{jfM%(gG?x< zHDJ~NLQyiJKR_QIAy@-ogP+ibk-E|LUM0r6y3Ed3T1g%(d!%~OS&&;%{yZ)6Qt)I4 zO%MQ3M>Tum_wVeze#RWdb$+pP;}vz1TCJ9l+JNC$@`q>u$XPD5UDYs7pxt1gT03Ib zHGUm+w}*u|)MgQ5{*hO_V>U6Hx4FJuxx2=98@u&V{vIsFbxBk8v@We}A@Z`ZQ_eKX ww+61tzALS~T@<_c{1JK2=?eb+cGcys`p^MPKw-`|;m@1I`Hp8~^|S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1294980efbf8355868e806962f2534c6c9805ae0 b/fuzz/corpora/client/1294980efbf8355868e806962f2534c6c9805ae0 new file mode 100644 index 0000000000000000000000000000000000000000..daaf41133496d50abccb50972e356792b9c4c28b GIT binary patch literal 696 zcmc(cy-EW?6ot>son2Tr8@+3d7>LjXas`F;4v>iGn-KaM`U?7z z6MeyndV3bFr~`b>u19{*pPo)XBc(hKJh34IU&e;9CT+}(vT3c&{G{FGb|r2u#EK$R z8EmT)EuH;n|7whTYUWoF#65!UK|8lJ{?`ocXfQgo2g5eq{xrQ@?N;kKP?n+X+h%rgI8@CEGla$y>OWIVc)twR| zAxSCeUR&E`L%LDfF0$pa{6FuQaZAZ=|K0t4wl5!_Iq#e^&-GuC7;Q7NT<_smkf;yBq|dctYY2{8bqfHnXf2tWW(1b~Ji=u%05 zdH~c7pbH@%od@~I=`;*QP*ei69-U^AA)88pQX~n(Sclm6QV2pM0yvQ&2_;CFGl4`! zZJZfYD2F%1DP$*qU$(Im$DPAw427EbMKVQcvLA~b z=gOQ-riGMG37l5JvPyr;+F>|zdxsEddKzrCLt?iU_#4|b7;Vl@$kO?K7Ok$lWxP#+ z+7b2`)p=!ikK8`wwf+r?Apl8tgfpNz33FDLCeR29@gcV|FN&8)YqF2G%q{WRA98PP zmS8f~wFyd)##M+9>Zbz*A5SF^A%-9wJs+5eKQIrBsSEc_zCCXFd#dtq)w1+aSI=t>p3KrStTDavfniN(TXR^7vGz&7;h41E$(|Xky8nwJ4r+GoT-dPokZ2fv`gW&~>)M^&j zpMHNeyH-wTcE_mZ)#?x0D}#2eJK&-4VH*;5$W#IU0uUO8h*ji3kb?nry7BMJ@k`APV7PB4dV@8j>`?nAe;5v&_CXbvqH77PoE5%{_p!C;!%FwHD1Ei7H(JEO-kq2+;Ma$j{#dN5>ayk>>6yXNJc2gb9EVl2GbF%`5YLL`A+YpJBU&i4Cj5am(G6|0G zWqF#g{C%OkU{Arvi$fBEbf5@;7Wg$yf(aZB4b$|~bYoR?LOB5((LfJFmcOqlE669< z)QjUKa9I<4y(o4rB3UR6DKrd1A;5$6Xrrb zb_x$=5Jg~5FP0<%D94b2Quqph6q3+}hN4t2Ykitfnn8hN!4Rt8zWJCf1Z|Bwn9k3V-p;A!pMaNU$ifi2b#U`R zj<;9ZE`~EGHTsxx!O)YE06hWFe1PUcKAHvjs9a|#kpSmJ3sgdwR}zqJ9t6@*2u0^P zNF|Hn53;4t9CacD&p@;Ze$a>8Z-?EJ z_t<}>>EibY<=qqx3Lx$P!rQ@k2|arKbC2sE39cELeKJk-TN4?hiW(aB>lHpomH8M!WFkpxC^Yi>Cwq^w;YDf3tc0(S6;n zFc6!!o}Z%|pzWVmB6`{)x5x~pTOiV;I;&Vu_VpbW9QSP&TT6$lKge5LyrKT}(-Ah5(>b&w_eYgq zc^Rm3PTi+u{rQ%T!f15n4J|#&L(b9dbH?szv-WIhr+U;mS9>#)lgg5FW);nNCP|u+ zZ+Y}L%VMYL9j57d4vWPc^Ea5KsVhxAopItd20gzY5)K`Ia{+A6`>d&eFN5Ue3^6WAyX8EBuI<{^DC_;K3cJQwPCfUoIX! z_RMI?9HZIkdg&f-Ri0JIlZG1Xz7UquDjCGuLFW&TLxteKxH(D-z_$9>I zyw$m;o>CO77TQjZAE$4Ym-*X9x%iCWOApu4&u6Y9Y5F8xq`oaAo&H5KWvy9kn@cTC z5d(n!>(dAB`3+;ut#eHFmu}43D$%5P)OrqYCS+{AmSPyJl;qN7-=91d>xTvnLA>4c_@bV|J>*kU-e#^pt#p23qW zGxiYNQijXBg9{DvnpVh+owMWyd0t+?-0fQfc0T*Gnmp{2YVu%q(LC)`g>EgHsx;g_XyAv1FQO=yOc#RVFiPjwlBh8Dv&8CC?MJ8r79G3X{Nz! zR!9(=U#_mLd%oMQFyjW*a=(R3OC{O5Tf6mPc$tR-24F zd2&IC(~BTC^DP@f))#u5*kJaM?0d#!)rX0h*_#(?Y`^BF|o-?Yk^Ye z)I*Kv$$6Wer-VaSM!P=2Atpx6A^WFcWtX4Z98vXtGC@8e;DgNiDfwd4cne)V9P=$B z9^by|RIzGN*60;&=EWN}MedJS?&YX+@#%NTXSD0iG2hJGreL4t-^59#jr%E6cfnEn zo#A^@TWgW=Z-)TwkIuttElSZ_p>Sj7yOoLU`MY-|4SIZ+=It zSCJEy?Bs9Ux5(+!frT#t^76G#xDxgb?UjA?D$x;Dkc_{uCQBa8rzKa4eUbAGn65=` zM&8>!tt^VrOlvb%Dp}y^aqIQ;ayf!YSnj-?nL(D}j^~FPYzQB38gYX-z4dSxm*DWT z-rKe_(+f|zMP`h4i~JzdFPFgIBIFX-U0lLP=~54}bfA4 z^07R~M|X5j+1d+6BB? zl$^R{-vY2XpDF;;>|FqcA)6=wi3i;48&f0T758(GCsvFg#yn{Yze`;$^G5~uSn@5i z4b`D>$tuf+o?aQ6n^{mZWcl+YtD?@5UNjWN+!^Ut(7q{tx1IU=lA1FO)i=|Pi;{TT z$SZ%pu%hkV=Cq`%twy{pr;D6rkFR3KjHq30JRP-q6v)@gpzPMOOwQBv^>Cd$;o5_# z06_uQe985sr-8$#Reok(p@`raG$8(iBT5EB*pLXVlOTjW_Nvi(Uwl$@R#*KePKx*e zmDst$dao}*wOi*K|6Sl><8TT<^zo9xfu=#6B%m|@!=QIN%)N*eZqZgIg1TCG4MJhU z?H|`!SqsCs_>$=tU(P}QOODwz45Cy)sT`BW_bp?Gc864SjiF4k};BD z0h#7ZS4Ami&u0IF=0j??_Sb0uL&Pv!Kya0fJ~}FpCkrMKET0uOzsgx-)9$TuI)Pbb zN<2V~YqNJz95W`Lwb)u5jb45KxrY1v4R*HI@{j30N!BS|K`Bnh>u>SOS#>G_g`lfS z2t&oVkSw%Cz);K{zzHZl;+C%O7)?C;n1%x2@D(Zz@$3XIG3ZW61f>Y=hBcd(WzBqB z^vhmMWA@fD-sVqsO`qT)_WbeU!rYDFwJyyGH%I!ftyb;WGlFf?Sgf46GP`-A?>%wV znQ+qU3UN^>0|HSAa989HBJnR`Vq3aF_D|*sM^!7w88Uol5muC)?~oY(vNGHC=*FA6 zWk0O_B~SNqM`-)D+iRMpm3zFt|7;_K{boQALP~##$)C)CL}qX{ZJbb~X+ir_ zS%v@rzEGt33!7)R7^2_(@=u}9cmy;9gaEkNlAE@s$q4Uok^als7k(^mCAo~;zIJ8-c&xg!FYa^6PK84H&$&O zqkM^?+?YtQcuLsgf-C6>UMGsE?jl>cXT#cWuF-OvwI>+Fq%eS5H zSlw}Io1z;jAscAMi?ILMtg>#)-d_uEK>cN8T- F_S3sLb5Pv)Iib|KJ!ZnnlFal4^Q=P|4rntl z@G>YfF#Km?VEq4IoPj}%nVF%On}I=#fkB;tf!l!7fQ6}%0R&8$nZ=kH8SXJLF!QSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?B`o2YSCU$kms+9_o|%%KSyHSJP*SPjQ<7pJC(dhVW?*h$X<%Y(VPF{r z=2{q7K)5b2YeG@25#}J#nkGgis0Z4<^D;6rvNA9?G4eAQG%<29H8C=Re1#9Nph;>m zFqD!S*#BRn1hxj=z}9N>IA^P1fF-b#RW8dOHB@WXzVhWPe3(id|C$(;w-Zer zrU+cwr>K>D&q-T%ClmAWe}5M@E;ndgVj#=L94gDlBE}-}bN15wvmI9xFjd>)QC+zG zl7h=G+v$9wET0TY*_gFtm09u(avI>qAuCvzzQo-WnmW*;jYF8UXlp`Bemo#Q2(z#n zFf%g#hs32lI4-%tammPFcd~iC5YslXsi)X$Coq0@es*eirTl_Fx)S@MQn|LAtK5@5KR}F`nSq6m0hFg1OLqVOp3Y58 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/12febecfbb8582ca8f18d44bb7ebd3fd29dc7169 b/fuzz/corpora/client/12febecfbb8582ca8f18d44bb7ebd3fd29dc7169 new file mode 100644 index 0000000000000000000000000000000000000000..64ee24d2a0ffd0241db50e27dea48ad89177198d GIT binary patch literal 1546 zcmeH{Jx&8L5QXQ*V+gy;A`&e$K?#Tkgm`-k8VZVB$VJY9KooEUDn!8nD7Z>WkZlAT zB-kG9RJQE#Xr8}$je@R(=u!ziG3z|UG!fe*W{vyld_34ymHF!y%( z-$SCxx92!RnFMEsi$5~;x|kljDC_2_XR{5}?^RdQB1t+ZN%Ddq&j|eRE7+5E7dx5L wQ68W;MSXOCjzgr|rGx?Mzav9^ggNSn@i;_Ja%O{O;i#4)=Epikz_`HC29t zyj>RwWJ2Vd5hF4tQc%_HyyzRzEzu6KZW7z|XKD>LC!0yfAe&1GV<7!oV`5Wr3rwz^ zU;7*wV=|(#IV!})x3MwuI?p{|rgi(&bhmpMJ}h135v}`N1K#;;!}NPzp}2gZ_Q`hPJu3%x`BSzYq?HfdBu;XO8ZG##@7aLl2Rwp z%D^p#cHw4EswEffRQutje)N;d-1UUl zWZ~{F3!cxn=h9~*w2-)i&`(<>?jS6t;t$*|?vOf;BW`TyWl&=nFr&IB9BlHxQBakU lKqRmrS+E9rzgxUv=>>Md6Weo#b*?_-kblUis<^KTd^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%0RmVU7&!kkGBAR9+zgD{7#KG*Fm5ntVq9a; z#3;IenTe5!iIK^GmyJ`a&72*BUrWa+-9XEN;TpyUreh0+!t2#>&^FhoXt1Y z(|&JDa#i|Jw2sfu?Q%iTIk|AxLwEbH)jn?1a~BkoGo3wc?}|vl*I%BUlYW&HS)ewj zoWaXxgZ&%}o%l*7W=4j8i=_-C3^>`CLuG|om<$*UxIs*Q78YhE)&>2JySQu%yd zHEBMp_`EAG4_2)aFWl8qSWHZfqZWMW`2 zWo9-oFiYSa|t)UgF2cQpXHRLDI@Bc?LNRa0LPD4dej~nG!4j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/134a9b1ea276d19871a96977518fabbdca335438 b/fuzz/corpora/client/134a9b1ea276d19871a96977518fabbdca335438 new file mode 100644 index 00000000..47562bb9 --- /dev/null +++ b/fuzz/corpora/client/134a9b1ea276d19871a96977518fabbdca335438 @@ -0,0 +1 @@ +PUT 0 \ No newline at end of file diff --git a/fuzz/corpora/client/135bd6fed89a5572e67d2be28ac6847580a5b32f b/fuzz/corpora/client/135bd6fed89a5572e67d2be28ac6847580a5b32f new file mode 100644 index 0000000000000000000000000000000000000000..47573f28a956871ad2eccb8575a2349b96c9aef8 GIT binary patch literal 44 scmWe*W@b=jV_@K8W?>Lx;9&gEz`&rx00+TQ8;<|{^M5m2X^q|o0BWKMhX4Qo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/136818520bd63085924780081111618c5f139316 b/fuzz/corpora/client/136818520bd63085924780081111618c5f139316 new file mode 100644 index 0000000000000000000000000000000000000000..6a5c990b75247afb791b9429e5a7a7019695cd5a GIT binary patch literal 536 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZ)7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8Mytyq2PjA5A85>z{Y=EP3DYE${aF(CvIdt!D(QR-W6ev_z>!{N;;D)t~#qihjNM zK2Njxrh3}%ZAq?5ABxuT`MFs$Sh?t18M|Fzo3ZF=s4VsfUlr|n%4Dfs%!vvbm~ zk|GP#=9Dvd*=(?%W1$mY!^FIZfpM{vfrJ4k8*`|vFbk6bg8?^)$*YkSuHR6T4S_(_5&l{~@HFwI5^?key3=9C%*2EqF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1371f3327fdc4982111c302fa45f296567e9f9c1 b/fuzz/corpora/client/1371f3327fdc4982111c302fa45f296567e9f9c1 new file mode 100644 index 0000000000000000000000000000000000000000..0f3a5f7fcf3247c442d217fff367b326779e2e34 GIT binary patch literal 177 zcmWe*Hej%1Vqh?3WS3sLb5Pv)Iib|KJ!ZnnlFal4^Q=P|4rntl z@G>YfF#Km?VEq4IoPj}%nVBJ(n}I=#fkB;tf!l!7fSsw41tE16S&D^8odE*Gm{AR7 YV1$T+3}9hugsWm^C|=xzVwqI}0M$AtA^-pY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/138aaaf28988badaa0628f8227466fc463322a43 b/fuzz/corpora/client/138aaaf28988badaa0628f8227466fc463322a43 new file mode 100644 index 0000000000000000000000000000000000000000..11c8d5760964f067b303e2c11391ad151129a9ab GIT binary patch literal 2251 zcmd5;c~H}58vY$gh$KNN%25a)u$YRcD0G8O}vL_ma< zJFp4?p^8+3fQuZ8pptNuqu>Dwq#O%!1%!wosM$%|-Laj{?(ARP=f7v>JD%@-zvr1( z9Y(NX2mm}_*k{J=i>z4Z<#U?z;%hezS2hz>hj%BtB(D)b5bM#ZtdIN`0HFY|MGgWW zpa2fQ=l~ck0OgBtQCtGxjKvd1PA_NTViGuN%sAzg1gO2EG z5Po&pZz!T-hDVeYTM#u^v5*VX5H4haQQDpC(rbkR5iUf6xF871<#IUy0HE_p>up%i z(9ssw_~nz)O<(QD<_L!UL2LsxdNwJr+=P+%gV=54UD|cHv+!KNf_SIl+NE#LvUt#e zb@ZU+VKwhF`LeTpdY!w!jV!t`CXx`b}RlDv~e3!HHmPU90 zu>ZOFMdtyXrfh7ubwmh_3~@o=75S+D?UqNu4BYy)aq0Xwm6{GAw_muGXESOj?C%{%^sE>G zDq&9joyTQ;c6-$iWvgR+K1+=_A{Rw=Q1i~;NjR&U=3Ep2cci z_-y3n>$u7sX~gmBPCps1sARAal#;4+!uPpU7RSo~mqnG$gn;i?t%tHR>3el;AA1ta z`#Ei?bGas7l<1=_ErwBAfm)UFEgd~KBbNmF?;d8X&5=#Y5yex(DC~-0t9E72-D98hu{z`L=YC%3Cn0QjkFv_XVTBdR`H`j$Rwf zO`!%joHurSOTUqQm#~1CdfkiL!!>&mp6B??VY@z!vP1LzT)kSy>!x3QP&)avwlL|okjJdC z%5q>>mKV2Mq1cY!gcS>?os|cx9r_8G=>nX_yZw=A>jOSymXpIBL5|Xs>xX?sS5^`Z zH=lRQhkGYb);q9gc#{%-for?dau=R;qKI8u`+0g$=#%;Eg;oC>1-7SwJ+Y*S`73~MQlbBYB0!1+{Exi@F(0eP zDb)Y*y~6|0UqC>S&k6|Fj~p$%>w5Xth?o8@JKN=NKH ziv8Po(@6#cA3OAhQwvqK(c>QfsQdKk`(tz?%Bo(VQuq%^jANd5(obb|-f97f-klZ& z?s(?dbQ){odg=?=(o7U_`RG+k;Y$movdi6tnsVWu^6y73(VbQ%u|D{^%1io^5p`D! zr&Qjts2s)=K<~zT)+QEO%~3rhb5nX&)Q7^^B%b_|`zPeZ6%Oyw2ODj-2w}8M-Mf4H z9_ph-mzH_)>bzR9%+>fo?b61DQ#30&>C60Io-GGJ2n6yi9_nV-Z&FG!Ji28)Ep3uN zwQkfbC8Rn}%>8Y1EuT?(t3txfZK@Pw|ACJsMy2!TSGo0BOpE#$zX2n5xBN}x?3Blp zs_4r&-hx~Z9Wy8~T%=i<)XZ^xPK+y^n=}gYc$NnShU;zh(R7kj;KmMGJZ%TBu;22J zcsIL^GSQ_S2BTcQ$dZoi&ln>_B$Y)ZO8?x(uGcssGl)gPwl&13CgqmQX&8qXKR14r z(s9Xv!opr8kVklqBbJco#fF$6P62&>!lN<4&y-p#X7C#tqvQH;W~sCX7W%6DRLFMP zrf_v$u#y4WP*VS)XD(OjYfCV#S_@{@*BQqqLx5dXeYzxUXktzCnL3;F d3?FI6;+gq9vyjfuW5vIJ%uhqcF8~!z{wE_DS=9gl literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/13b7c1bd8e36e238ebbb57fe7ff5e2baf6a3a7d8 b/fuzz/corpora/client/13b7c1bd8e36e238ebbb57fe7ff5e2baf6a3a7d8 new file mode 100644 index 0000000000000000000000000000000000000000..7925351c5cfef11fa066c192908b6eb2c7726d8e GIT binary patch literal 1288 zcmWe*Hej%1Vqi37W;S2|17>yx19YGX5@0x>&A`aZpv=JVn~{N$fkB*sL5!K1@h&3+ z1A}41D8>~A2B5G(mE|_zWMd9x;o#vi$j?QUqH{pvb{rcIQ(~#1uz}#HOG%8A0SePb zOwa&wIwKmeW@O|-0#I2<=BENcvyG9_K#bXdfsp}B9srX_BFqK`5FW`S0}d@vpa7!f h#Cc)nLVV^vPqk@1->e>mT0aN#jh_=ro!cG2G5~dszzP5W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/13be810b632eadc831ea70abf0edc0ad95930399 b/fuzz/corpora/client/13be810b632eadc831ea70abf0edc0ad95930399 new file mode 100644 index 0000000000000000000000000000000000000000..f7b9bc8c4268116617d71a9e4f34ea8012ee4242 GIT binary patch literal 6629 zcmeHM3s6(X8s2kG5=aOj1_BC%@K8VmmH=%*5hz-)1;rwQKtTv859MJ9N~(f{hlo(5 zig*F7EmTDi1m!729#W}VQGE1LA1I>;whE|R$Ie-QL)DNIOP=IV3%^OBsx1#^bGYFg9@8TvFero< z#dPKIna;dG$WWCxvw#*Xa~8CO7SKyo-t2v7!D5Mj6dy=6)EyyU%ywl|#8+LRgek=f;0Jykl4 zNZm|sYi}6eI%#OT;@K>Ebj!yZom<(q`A^w-3s&ZgTxi@FZjfYfNT0#cI3{!5JHpuE zvC;0bv{Jo2tLQx~BTMY7HA*;()IFOzN^TqrN*O>g1R(jYa0S#PVeXm=1Uf-^SM>Gb z3$j85El$y5Fv&jqRA5`;uDSsi+WibhlOj;>zePM`Z0MNXMbwpk@cjtA$(tY4WktAP98 zwjq>yf+Abs)%AcEtE6eMF7yYjkY^_B`L_=Ct^a~@&&^~1F>YoIAyzAc_*{0ag*79NReEqX? zEz1mg?F<)If2MKQx3_Vqt*lE)?^DqS!&^0PzdX-9xZ`Mm@{9e*=3}PH_#c4KF@z2# zpOXj+umUR;#bKjS7SSV51Garf}MKR;b?WeR`APfqPXC1C(a`Aa4tP85O!Aqc7s zo*uIFU1j}Vvw)xbMBg>(%SaM0%cI?p2c8R6c6@eL24!w#@RdWg6Z*g41@rxs|CJMb zYT&{_72j?x)~Eiy(LX5DF$|of0#J$pHGjg(^HuEqOYf-v$A!O$*nCdDFe5=E-M9CP zH*WD7BLILr0KnCg4pIPo{JQ}Fm_(vChhlYgHOZkOSGk%U5oXHfZiq6C;;^H+9Jap+ zo4Wz7z&AT4!4WQl4kUuRCKJF#(268$L_&x}85E%#2lIH5QP!rY06{>l+|P+~W+V2| zTTN{0>%E0;zi|C5zDkWwsST(}HNQs*Yc|>PVp(z7ZXZTY$Nf3R4X+UsFOw@2H`*vQ_kB{t2)I%ODot+l>LNVpzN*U*PACDKO z!kUOxIa|)ush=*jUO#40mzuHd2tPE)RqsM~dRDV;&-bi>mHU+)OCtt(S#+Cki|2cv za6AxGkUQG-sI~QzSf1O(n=b>S{JR!*Flvk)!<~h^VFzYtXYj^fWjk(;1@}1|)~d6- za{L`Se-EAS@b_2aFQKW0t#?(k#cY0p(Y5E71pLI6erxn%6^niJ9%owG?VWW^sI!25 z=R+gonhB8;e+0%COp-anx!*yHKmkXqPrb)Gk+XVn!I)j($V*y4k9%hbD{F64R^_VGD;~;`R#aM@cw%+R z%|&FIU*Y5{<64<&o~u6UF{|?1R(|QzW z)dKCi9=~Mj8$KvC=cwQ#6?r@_^f9a$T(7uz^}2S7XGP?ioPCi89?o3Q%$u>GnL&F@ zThLVK<|_YI4$X{5C_r>3>vp_Q5g>{H3J}V88ha(sSK4ns{&}U5l&q3s0=;^06-=#-~bX`J!AZFeKe^&8b@07 z+s4~Fz4({v#lJ(omYHG~z023r=j-BsbiTI!f9Gop77MSGCrnjLC3fFVdYV$ivc9c% zl6-tU;zarjsnz z8QhQ=O$&@~owQkEZLV@|WluJ2|3ER@j{C!Zkz#(cBs`&*|0YQoPrSw40i|!QmC=;a z3VT<7%F4ifsSi-3>vMAI+13GDH_$+S-8@8QG7lk21|1Mejr6sUHuB%AkzjSjsM~uN1$q@g;sDJk$Kn|I@HV~JtXXYgQ6X^n@N zkKR)bIWWXP4j>pnfC#6b#E-R{@M9tF$BLJ9BBt|WAq|C4a?}CwHIamrmCD+ZTTJl< n{*8ZBp*#b^aZxGhg5P~*+R#k8=7qeFphE}E+-V3f7^z)Bl59u&)nDaVJHB38^zDwqKGV%! zS6n|&d6<0u%~FFz*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5EsMyGCY2 zO)yydvTRG2&KIXQ?^=p7el(eguYcafv*dlpx18JSL$~t(h|iQalRLm zsz3LI75#eieV%6XP4%?j+mc+B7?{@a`MFs$Sh?0U$m|61+iHa&MiF*(cG)AmLR zu6X_B**WP~Ns;AhUJMHhY&O`>>69}+%EbKrztv(X0|^68Hs(-SVHPF>1_N#olb?l! znTd4)veUUYF)%kaGIacGFgkVRgY>?}1u`iSExT?0|NsC0>2J~hd0SZWnG6sfoa^Wz)e*yrX*~>`) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1414d50ded016ab3291f63f5970df88e26055dd3 b/fuzz/corpora/client/1414d50ded016ab3291f63f5970df88e26055dd3 new file mode 100644 index 0000000000000000000000000000000000000000..1a29da8f717614beac33ff78b7a8a3cde02c76ca GIT binary patch literal 530 zcmWe*W@h4HVqgeoW{ya=-?VJS2A$2Cxo>AnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JA;7>lS1WHwOniY&wn~| zMIU+2vWai8PEdCB@NDXn3_mO4oX^Xo5OhZ|MsMCSZZBV5y|y1=JdqVgFD2gBY5nuP za{WoI|Gqp740+59vI^OD(dvg-i#E9j#_aR?6Zu|fwoq)%gG+vwG|npSR}+w6VP#*NBjjLGVyX52|GzTY7fp;-5NUbD z>$LRW$7z}~zaFWxy3qZ0ZPc>b2YNzg(Qlgq%{Cm+XJFv}&&a^Yz`)JG#K-^w+zgBd z7#R05FzzyFV%%oX#3;XjnTe5!iIK&CmyJ`a&7}4=$>||zGGpa(;g65o4symVI=O1^ zjr(GLSIfWMdAM6=q>F zU@+hYG5J|on3>ocke$vAa(W}f8Ld?lRyFmDsA-pL6l5xBrQJ$DuDQeW#=9$;v!74N zwYlFmVg0j;6&C3{ndS%fO3DALR*IXOy608xzaPf@7jFm5XHHTMHtnxjbD8HfUrMk- z>#aJW0Ikwfk0&_)@S1e!m!#(5@_Sd-d|#-~t+Nx8Qn;D^}|IuWa8o* f8{hYs$prJ|i7kj!PB@yhvSYdtql6|80|Ns9jQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbxpox)-sfm%1 z;XjQ40|fja*Z9BWYQz8^z#?8SafrM2DQP9&bJEt`$;8aW@PBdRa)ZVt2C{6-p|X4| zVk{y*XD`h^+i^9aaQh_%mtVHi`9xVh8I*#grCIU}avHEH@ciVy#MNLS*3^MD+PI*p zBM+K7N&-qUixt4Bqlwdc>o%pGQK00?-pwvHJdA+tIX1 ztw1?{>%LG~!B2k<`|jEwU%T2WzV-*dM?^@AaK)e2$<@o0-!4<-dYd|@=Uo3pRu_^Y4m6DXH^3EZHzC#AeAKhm>Fcgp*!`-p@3eI_1#RZGpS} zB)|Mzx6N|HJIgJ>zW?VL?5z5c?{x5_=~^8>_~ znHhC>7#KB}8Dtf7Wil^(K4k0uWKcK@($^LF1mBuq z#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7JBm-4(-~0wL^Hs{z;KqCK_ZbwtGa)ZjG?V& z=`*)qlht2Uy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm z_g_=elYf1c_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuAE~X|%#wJEa2D_8Z>xF#fK_LYI+}_x; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1423304462cbec49377d06e2e97a9a4e4c42b777 b/fuzz/corpora/client/1423304462cbec49377d06e2e97a9a4e4c42b777 new file mode 100644 index 0000000000000000000000000000000000000000..aadbaa7c839ada707dd4be6d92601fbb92c9400c GIT binary patch literal 124 zcmWe*Hej%2VqmajW-uTC7!HUsFbMuy4 MF)%QJbQ>4|09&*XUjP6A literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/14323d64a538caa5b77425a73b612e895e499a42 b/fuzz/corpora/client/14323d64a538caa5b77425a73b612e895e499a42 new file mode 100644 index 0000000000000000000000000000000000000000..8ae814d88f208ca3cf74600489aff0c296fa14b8 GIT binary patch literal 2835 zcmb`Jdo`eHyt>ZpE0HcZP9mW6O3)h1ipl<2J^)jE0#XMcZYBa!^#F z4rMQ`l8UGkJCYn~qA1C(_D+(dY)b5;Iyq}*XsfmNS?jEI-v6Fwz3=<{p67i&-{(g} z5Xb=oK}-a`d~sH9+sp7KL!VvsVY+Qvh0h)2#f^&Ls^49OWJ?Z$R3H-wnuj46g0vxs zh`^XAB?uD%VL~BHFv!Ae23hdcN(2LAFbdFzbL*+6)&HRkRPYLxxn8-mDlm-0LBO4^ z1QhTH3yasnxU%S4Ktp24D=P-@<2jT7G#us7R{$f4Q&D;O+HGu(U>gS|1;#{jV^AT< z4^1JhMdc!Wa^gS}auqsy?a`bED?rr5$+$P9H^#ygN2R0JN zI^R3HHtE-LR_kqUe^5J6!`(B5L0|~3@&i7=0FST?RIx-XAwTKfnQr-3RU=O0`%SI9 zlSvPA>ZHXqFu^Vd#7siI;7>LvOU`RyaR7ng`K1ZtBngY4)nhy2O9q@`XSH;!^xF5- z8lRpiWc>a^BDa@vN5B1FyN6%2<^_+~tn?~wcPXhQdmc605$AhE{kY)Yy|WnQbBglE zgNC1>=^6$$VX-%iVy3BV^Iwm?ic3{|5)fEcBPia1O*h)d*9zun?3Z?a2%ZoIm#CNOAt)V)5o^+AWdu)-6TVtzR`^ z$d&`cvRx-K)=r1vhHp~(NI$usm?9Kzax#83otz#kZkXFzwX#E(S-Gsr~!ctNR+qH|4jZ} zbg?-?_fn9E23ANaOTy}c#qrlTKcSx4vx-!q$hqjcrR?4>Rq>{ulr?3tZu{2|No5vkCv^= zHxlcF8{Mj?c4m{anK7Jfu}-Il@wenoPyHrZjxbARR9b5T2JhjBEz{fvn z_~L|o7vW=%aqM}YUJs}i;g_&1T@j+E1CC|{Vvu>{- zMy3d&=RhX0vOf(EzE|{~1ydU9-dM#gduBxPS)nIrY zi$x$952$!~G9Jd^zt?*aDuA#znc(mZeH~(Uw7^4pbK) z!omY77#zH`yB0yJd4Gy@E0()!BBVck(4Zq@$P5p4ntnJXro^WYR%CIkL~NTV=ZyLJ z`3v2&+0es|vE_cLIkKxcJI8`Lnf~}nCi7dCYeH6X^IBa4G(7v zbrar9uv90t@h`cPjB%?+TsfDw`RxgVTcOcry}P!$#ys9R<{Dm+g3|#7j)Jjj4*poX zaK+ux(9Ds-9AifzQXjUrHhOr*x%7FMrb4vspyR->Tgg^C(SDIpbK%ct{UeEihaQC3 zq>GvNAw&eSkThVK>(%3gg)taJvw3uBp(Hcd=S#@drH_qO)RJ>gOp1vL-$ADUvV?FY zEz<=LDc~79Nx&hwaRg{gR17;D<@^D=L{tC+Fd1}U0|1Z?V|!r#*#v98j7MA)F73Y( zE>BLpRM0H`5U&5CCfCbutXa+^RGcmI*iZHCn%eDll~@u;@q3j=$xIDA`(`pUt`92w ziSUlFjQOC=qiUx>TzusQi+t;LsdKq`Ky~zk+&P1`D$_obykM^!W@R*+XiSk^oN*} ze{rfNTxN_fM^^b`6Q7;7c6wspEN7b?QJ(UW2xdat$YY6dBXbL+z6PQR8L4F1c=j5N zo+I})l>F>@--M*@Yh6}!tbfUPZ%eg|F3kII`U{ZNK9hz6hypw>ea)v6GITL89yrRd zvj%iPtE5ztb1fElWea#zE{BgwW`_h?8GAyG#lDmYCG}`v<+rPX_z!CD31Z<9wCg3FSg)t~!kn&Y0N`5YqpJ;CLSx3~&1^5P$ zeD7=d>(>+0qbA!Y`d1sxzh0XC8S&$TSBfLsQp;pT@QSL6&uG%>_xzL}6fFE$`#_JO zV}H8ThEQ{;Z@fyMAiwrv^RwbtyKKh|Hu1Y2wg}lpBN;oLjk}%XCPMAe@~4QO&yRIw Qli_c&T{MXZ0&h_M4<9`Gg8%>k literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/145695921679963739e797bd05eb906ff0793efc b/fuzz/corpora/client/145695921679963739e797bd05eb906ff0793efc new file mode 100644 index 0000000000000000000000000000000000000000..a64d8bee223772abdf777111f028db490c62a824 GIT binary patch literal 99 zcmWe*W@de-2a}Iaz8E)GV0|heYhyoXaf7vkukA0wpE-(`a&;i=c$y)<5 zfxJRqIF@IQ&-Qjm&}=RM62|iOwUNJcUpFLpMxy(dpH zk*cUh-ya4nE1-6IX=yFW^mAHF&T~=;LDg5xeyO|?EPeDx?+^Ly&3&W@Kex zZtP_+XzXNaY-IS-xa#5Hx9}0mrD<11Ph37~w>Vg1@st@WmkWP< z+;)&NZqdnAdv~05b-WxtWrc~5ZTOcslWFTt-~GIc;aqFDg}Q{hVr%TpSuCXs&)GEF zb54Gw`gt+a>G>Wl5k3KFv589S7u`QRC*cC~!3x7WW}#IQpCVt$Oyp)_W@KPoENdWb zz{AEIDl5#wYQW6M_}_pV#N%gSVP;})Kz2Ph$n}j3HSe@%C3)=#)3uC!nz?P}n+pYV zd+#i}8uM6AAlc;V)@n4aP)T9J3>!WwnoRi5>{OWk8+89lyj zzq0pL>a4wmzqfWVFzz&HV%%!b#3%=iK5jHu;)p&oLwNKVMTzs8nHiXvnHrcIm>ZZy zVbg*dcU zRx9$IQEPX8bt7i7lfl6&ReR3XcqbGnx|lFBaw;yr{LWo{ztqkOiGVQxR!3@xh-NZIA3S{(qG|$9>+(oQHv788d^d!jd1Rwb|uT ziC>}%7x+k?KiVU<_wjFwPnRaS{$u+hwZxgBfzh=x+Nsm9;r5Q12}|{!zfO_=GXF=p z*{sJouZY5Qg8`-Mf&F3rNBxO^lMx>P=x`VJTRNO~67BEc6f9>jey?@HZ&fSy!-3%-k*Wj<1O=1#D{J7=R4mp#gjf1gHSM7Il(` zI)*xeI%HcNuq}@_S_xGaAMuHvo89Q_cHTV^#{qYmd1hVRGAt>wS>j5#Ddb{*vboNB zWUMB}gf+Wdt$2xrA|~+@W9{O2(lU;b6gzEjX!kUieyIiU{uh&eT@Aq9jE@NQ(ci+{M_T6z&7L@7b!uIh0mJ23w z5fgxi`eB?nD#&g@82LJ(P-O|hQfeXo%u6Ng)AN+O*%m4rY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/14ecbac7da083efe53e637ec6d9c3fa044730865 b/fuzz/corpora/client/14ecbac7da083efe53e637ec6d9c3fa044730865 new file mode 100644 index 0000000000000000000000000000000000000000..551e774eb265fffce8a22260c65144acf0d0918e GIT binary patch literal 696 zcmWe*W@fNtVqh?3WXY{~aPj`!`C8mpiNFMe?b1}+8$ zUIt|bhX0HVj0_B73=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AN85K^Mn+av1_M_^ZUas>=1>+kVJ62=Ltz6!5J#1VD>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmo>@{Hpiok&;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m)tehJ#3J6at{uG|oqMKO-vxb7L=qL1QOVV?MiY5$`gxDyv(g+U|?Y6KQdLU^r%;$&xvIF z#h;SrX!+0jb>d)Qo<^(20(H4mnRV<}qw{s0-)c|T*t1?Gcil^IE7pVician{b;S0` zak|=H!@hisK}jq%{J@1u%wRkp^kM*tH1ObeXS`> zKd*aH=Fs8xM=$qv#yl}!?J@C?{nT~Z?(HtafMK`|K*NhaurJRuxUGV5yVuPxY1O7Wxkby7Id}%;ns~5ff>c+Mp)J P%*?>T#{f=q3{zPE+vMS7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/14f3ae181b860435bf2df4022dca21f35f719197 b/fuzz/corpora/client/14f3ae181b860435bf2df4022dca21f35f719197 new file mode 100644 index 0000000000000000000000000000000000000000..0bd896a8cb091db055af75a95314a41273239b73 GIT binary patch literal 6735 zcmeHM2~bnl8a_8S2_ys%0|5m>SQHR}Lx8rR2ox=-pjbo@Cp$P6vIe-fQI6r{%fqa}N3L@LhS-HZyAu!by!>=qHmHg@CsbJ=FvPz$?Brl>6qXR$fqY%aqiBrqt1 z8^v(t@)*wCKuA}WH?x2iOmil*gci_CRo?7lXu)KPnr}S}cj{r{4@tj2LI7xdI)L#z zaq;oM(5UqY^Fe^n<@uEpYj-U(UGZENExKjdM(0+RZT>S>-n^ALBNrPth8rXq9M-3^HIB>N@QyHc zcw)4>EUi>;&nj9^%g7@8YK;>10(H-(j*^?lgHi@?C<2gtSGWRd5>akNRG3!_6%qZae zyKM+ZIZ2i+@alTVjaAaLSQq-ER>*S`*4*0%`__L&zVGI-|2QWz1|O@H!FJJ-n^~Nv zrlRoZy#jtx+@gLu&HWY zpwPT-_c4JOgeDUp^j*8BYogPUxTVk65xOoJw=-&%92rnfUt^=w_k2@qXlwbfcfS6) z*_LGny>^E4tH02==iA#j)K=D|r1!b-li{tJcV1oK9Ncj%K>6iceQ4zh++{iSeLf+*z;jm(<-O($dn|Eq=<;8az3a#T=&6-vnpuy-(dZEZ2 zIe>Hkn!_F zw!oAwzc<&F;_~m#I@t1n zFlejet+r|T@#naD&y2^}G0@BGl>y!lP>3ATfAa}Iuack@HSgzZpTdxA6{JZ9N&})nx!<_}(VFyNNXYj_~WIJw+1@}1| z(WBy}&4kQ}KMLauq=e3J?)MQtrQBGzv8tW1c*G`KK?VN|Mq|X*#fQTU+o$aC z?a~6rDRYH8UY0tQ0Hvx)aPpb}<&!`~rB00({(J4|<&zu%px73&=*NW8nYc?h9vlT8GDs)db#w0XORRll-Evh89kB0FP|H! z8&M%}x~~6htl6dZtlzdGYrkzT6`ed+CsJd^lJ;ylqWk2?9P$%(UfM$bH>^>$S;&1g z_DDm3K&`JQ!QslD!SEj2WHZF;>5 zp%d$6H~jEMO-Xvi&J4vU~p}IMva!e zLUykl_-3B=J&#{A^$j1EnzL1~p^7|S6#5ue46avPxO!bX*|Q>YP0qf^1COS!Y358@ z(@Y~jrmSfybaRz|uZX4xB;+GH($XEPRrrV^fP92Jp2uDb+-vQ3AOC;Vk%X<{dgP4X zwj!qAHUOq%Yb@&xw(gE3V{8q4XKXE(W^3JFWGgDFw)9bug$E!LQ*Z!@uAVmjyhM_! zkj9Z#{jTx$K`_3(U^M*eg7NQ=uw^DWM(-?Pi^=+)L&^vHpbP#Ry5N1v0_*>^EU;iQ zv66hkzC~4H_wA&mDMc*l+j>t9f7>qmXD?flX6IAgK9Zo1QGViW{UvX)c_4|`eWoD- zI@!rplQ_AP>|1H6GufM!GIJ%q%VgVST6YBHSto54o2aXtTUpZ9@SiAi+i@rQJu&d@ za{Yud|C{7`EWa0X29&HmfolOaG zB+vn&#Ij!tsUt6M#5w)`FVj#6YQ_&B(4kUxa6?Az&&gMDi__V87kDa*6pk6%U%s`J zEy7@ncxY|x074WL@dcoeAq-<1LkQvTa+#vG6hbx!vMm^{kjHR_5EI#dy(ji-l2D!8 z6c>`xF5&pwSfZ%p87!ESTH_(&qxYoa6cjO#0|*KbAjIe=c781FEr#d<`^G-1P@WDa(xJEucK5YuLo>;m7ji>_4j(jgry{^$ HX%xC#Pj`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AX4`jOMn+av1_M_^ZUas>=1>+kVJ62=Ltz6!5XXv#D>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmp2@(#z*thL;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m)teh6AfLGHBM6Ffu?uib3Oii2FUj?q_6WU~cSXFlg*#YHVb(q7|r(^cE1END2eMZRoex|_iTftKw`as|p0i%z`Et+Z+_ zZ{R;NRjl-=SD?>{Wcx**lILjo&-!)xU}2tNtHuI#xm1~T>{p}nb)Da87x?t7SIJ%X zQrwF5;Qk#@XMuna0|OIt`u}f>0}T8OWZ9TQW%*ddSVX!@udX@Gv5!wab^EWdeL2fZ zZ?&!m2d1nti-dt#BX$KmApOEDtOm@CjQ`;tP6bC8b7Lce^^1z!sn=|?z6(q0NFVB0 zr?mP@uhG|`57|#$r|mvXwIbVpmcWvtzvsU*@oeDY zSQ7Q b<#&IW%ejdoB+@XoK~0RAnSq6m0hHzdeSX<4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1539da5fc1e3ea8bf41fa73ab838942b9c839c72 b/fuzz/corpora/client/1539da5fc1e3ea8bf41fa73ab838942b9c839c72 new file mode 100644 index 0000000000000000000000000000000000000000..c3ba7adcec3771da9e0f4f83eb1a7c3f28c3fc5e GIT binary patch literal 864 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rz+f=gz~%GwaFHQ(EMb5Eeu!xnq#64E z|9=KXCQu|WFv`D(KM^Z`a9XmVPVRXAL>kDOOUQjr}cKa7sZOa02|03Dhte&A! zts8hY@=LTV+&UxXklEuRx!7(?x}qYBF^! pkrnaj41bS=3Hvv_F}%socX(;}Z}}~s#h4ixSolEsLyXyg0RWBbt{4CS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/153ad527d49b45a245e35be057bf7d1cbf72920f b/fuzz/corpora/client/153ad527d49b45a245e35be057bf7d1cbf72920f new file mode 100644 index 0000000000000000000000000000000000000000..19f622da2b8d126f46df255b383cbce1112247a2 GIT binary patch literal 52 ecmWe*Hek?VVqj2XW-uTC7#J8C444^y8UO&g5eNJL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/154516e4e49cb38de6cb7822d966132c4bb44d5a b/fuzz/corpora/client/154516e4e49cb38de6cb7822d966132c4bb44d5a new file mode 100644 index 0000000000000000000000000000000000000000..a497d914605cccb3b7d3120bb280f87ffe55e78f GIT binary patch literal 3155 zcmb`JYgAKL7RT?+O~NY)k3?Qd2q4NcIX58>s05J;hzcl1rf5Nofdm7ABvcSV5)h>d zib_ETDjj^#b}R}OtkM=)s0boOsYM+S5m9^~mZ%^WXI(%FozCi)-f#Qdz1P`ipZ)*s zV~!w@4-SGpK#;ZG0X|lppl@Y)ObPF=dMFCrY^0|P`j<6u3JbupzGq93~^L__f3#kTi; zR6aNTmUK?l(7vO`fVnU#?v@^{J%>;t=ut`fI)V;XA9zqjbf9$%KWyXHE`2(n*VR+k zvd&?b7d<}%_og&(X`_b#-ZU@A_54If9Jz}41m9w48EQksvvNzAi-;d*rF zI8Lc^;P#}JBW2Gl7wSjF#dI${ZyAojnK@Y(JE9|!^ z-VB&z6aP?WDRIgThVkn`1aN(CFT~~8O4aH_FBU6tvuwuIumYC(2C$i8rTTYg08cxM z5BDlQ~lG=6G6R^Sqa1o=#WhrC(n}*&&59iqlpA(nO9h{0@%;5U|B8 z2fQUP&omF}BAU;wdnNt$lb4#B^Bb+tMQB*S4s)=@TLVi#A{x39VLW^@6-R)9K9Lx! zA;CBt0GJCM?+g}}IRb}lyXh4F&w1oC8_sB=;b4dt&ZxYbq7C^ms~9HUx%8s`Y<%^e zbAn<2n?}s7k?@jc=Y9NDghh|4M;lSCpU)pspa*^=rH|O^a+-&(R1L(mI9mawJdp+-w=hiHXiBEGMla)el8@F|>Z+)?%jN2N{Gh1fD z5pI7d`uEFYBb0$wySLVkG_Wq$=Y>_G^)CO6p1l`eB7jm zptncXbf^DNwpp>W{-;n|Cx9%zt*=@o-(KOh=mejb|NU~)C+Yb4-Tk9)(WJ41KW`Xj z230P(-txFH&bsPqSl688yKS4SqHSACD}-X#Y_3d_-DGvq-+m;l@Q3@EK_-`6o}MdW zm|o@_GQpP(MQ<&1YztnU+*|WZznS*-ntfb#aGO6;RD@*IpYBepT*_%XCrqmC);T&h zkh!^~rDGJ+)Lc6MVr9NkHpv#vL!jxK6e1N9Vm7UQYq2yhckFAzCX#9TSLu?o%~yjl zS%=%uF%=dhODR_I}1nBQ=kqB=##hX~BDm7lbX<`nT5fM?$ zM7%yA!cN$f1l&nsGl5%~3veo1kTZWea9e7;cq10b5-a5@R;)U9qQQ2Fm2zM)i3}4! z`2#X$&r<{&FI8{8WVFV`W<87S$mq6d+}=YVLKo+cec9w5pV3{amAGld9x=j!)eS9Y zUhA`>4td3ugl^qI*puGw5}19%K)$V^m3w4ZJGi=A8r27VYQgyIwR7I#l`R$BIZb56 z+MP%`;`5(3sp)oBqfK6{RiEs+?7Kf{uj4iTNYDz%;dvw1gjSoCm%nSqqo?RB%)uW%h-vtMI-KJS;4t2dd4 ze|9UG6Ab7UyO(rfIZ%EZ!nv^VyiB3V?fh#uM zji~ddRv2Ltak5gv@RKOjvKW~-S}png0fHd_umP8i0uSuHfxSKiK)^FMvf{SQ`*r}OuOl-;F* zM}*qAjHILejT?@idY;*r>ty`7~S9tb>O{?>2JwD>S+bl7UDb$j40y*X1fjH@T-+Vg|VJZ zr5k+!NTmZUy52fCEC{&R(Ek(y7(MBY)xPUKU^Z8uf*F`ApD{}lvI~XGBIull3<<@l9Z0U?_Njy@9cr2iOkw7J{JQ2{sS}125wZ zjI?ET8D$nk6kYtFpzJomdsPCR)O}?shhC+V>QbvyQS{z}RPShO7P0a1IAdFy9&N7YoxeHxS(>G9 zrU|y&G_XHD9Y5!0mVm)lpkO^0%<#)3F(w_$vyS=`VvJ8eH8#iN*O%+jtwuK*q#O^hki8FPH_k_PKO-vxb7L=qL1QOVVcQd>o(6U`gu0VNW(TSJ2l~%3g4g5!@ij^MqD)c## zY`^$Z@*FLHYZeo`zC4XqjRop*sWR)>`=ax8o!@Ft*x0jPC3oFRaVyq?`*+B!OSP7c zICOK}wN>dIADNihf7dS#Fz_>wWn&JNeMH>^O4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=Tbypq(SywnoL@XVC-%#vb-fRaiDpOO>ngOd|_>5x9jq~AKmwJMpP^9 zHC;DdwQb6Rh67vV%O<9~8D0>0v0YxSKzU-(iI=&RR;}L~_>W8#D?RE_=yM|3e(|T| zIa>a+ew{v8n5WUIu|QoeOJ)`8)#!X(=eODuHukJnnH(tg;^;3s#~m{3Qmv&U4&7XL zZB=^5M}AwE9c0 z(bt;7^z*tGWey!~fAn%+XWSE$)gBWM*-u@k?LJSnBHMqKz>=cB=f5-YY>?ns67|Tc zq)t%QG$HGxeCB7pWVJi<-e*^FJq!+?v8rfd1xuZLf2yxMx6qn7D*P=XQlYx?yFbk3 z+{6(RX_VTaCdSOjz{1A>PIC;MEDQ{-;51pU%h>&5;ggBo_x?k{Pkr${DgTZ4OjxlG zEfK~=PJRSYw5;Cqa{}w5GrE@)cDgS6DAF5dtMvYJSzXqNO+TX-s~?dv-Kg=>K~rZ( ztjvSBmj}O}-}p#SCFsA!&qUd~|4tRnYhRHh@?!>L`6_)8Py{fFF*CA2^9X|hN_xkd zo|D1p8J5r3}Jljw$Ju6{J&t5pvbE?cLc50<( zP;vzo4kV`MHVP8iEX+g(O3+V13EBjIg4P<$DcbyJ4bBwJfV&t675|vUIEw)@Tc{wU z7~gFMI N6C)D?iM15icK|2aZ%Y6G literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/15f419436400637cc395518db6f432a05ff4ab1c b/fuzz/corpora/client/15f419436400637cc395518db6f432a05ff4ab1c new file mode 100644 index 0000000000000000000000000000000000000000..19a1fd075fd5ed9f20b10433783b62eb3e43ee42 GIT binary patch literal 2251 zcmai0c{J1u8~!b0$QUKET#WT1l%KJ$Uq<3eL`ldpMv=nU8hg!*B@|^Ds$ncQvS#_j zD5b@kB_t|jxs)w2im2wE?&*(i=R4P zX1T(Lt@A>!FGq-X50A0FIoY@H%ZkKJdHP8?cIq(2eK7`#5=m7>i=miVQTk@x7=P9! zCg2AE+qfVA{zHQS&{6m3=e<^X>Lcb zXxI@23!sBTh#n*&f)m4P>LLc32AT$12wvYs42%D{LHM=co6#>R#c(I{g8O2doWgqQpHUP#w10zVSl2<=DLk7K)hE-b`e#t?tr53Y zBX7fCPp|4mPR(2Pxi_Kr6a5BOO82Lb&e^%ik?QS?qlmSf`PPwTQ~ zBnxSTQwerARK6z z6?Z2#3YTJ;8)>L}gRIfty!_74>^Vn<+AhP0M#|SBD>9Y>eX2WMIrQB8VK%s=QY96z z*Q$aQ!vU<`3vR`_KmBMhl75A_2WLF!h}G_=K1rI-R6C{>a@^{HLa>B~Lx4CwKNyI%Do<9%Qg|~DEJSq+FvEIv^*213fEv7$OC*|#1R(R=LxoV zsYF`3%AnnsO!!T6Xi#8mICt}!(y?S-p7n{$!~^bTaZ2W&iMP@Xv5Sbtv3rr~G|g85 zS>`XyL}UqCyTrfFyVK0wM+8T_%0Gs(y5mgGc6V9aOyeeqP*g}oUAy}|Lqt`_ugC5^ zV=7wOCO+W5nzi|&n^^F$aC)eg8DCdPC)a3SH6!Vku-f%e(dH5UtjbwS{^4q~e(aS? zc^I)TdO;~01J2qM3$r_U8NAPn9b8(kt;RYu$Jt~X!0EgAP*dUb>2XGmb-Tq%mjJ~# zH@dL)U?|J)`9k{QN4Hx!#^(U_FqOcBvHx28rOmlj8aeG~@-_u$_7_Pbl868rc9a%I z@gOh=auLk;YC8%AL%bJ$Ia`=Y1&k9q1&sw#4eonb@TPg_d;4ZV9il@>%d;aS+mrt^VUk^z>`ox~;dNn#j?=q7E@^Ep(!k?)N){9ne3) zTYGumEv?IC5UO8l`AE=^RL>023cToRchpKbGHe5qjO4Oa&UggVGmUOvJ_~?sga+0l zG!XYATrj_={Qu#i_wR7gbNOE_RMyYDAP)djF9QfQ38GSgHJXhMDnk3htGlbri6N_f zwgpqD0mjg-j=@&bq9ZCrnK`8;!Yk7W54X7&c9u0a_E?w=I%VF{-f7~r=B~}CdOF5w z0(#?}^p(Xe<>K95UPpx$^cvIuvn^xlchw^3Da$JExXs~HZbbRpg>N1+J)gl3!!<{B z9V5k8o#&;lVjvg3{G{j++^clA`D+XBCX6}-@lwqi50Z`{j2kS5r|gTqp& zgkllduw|}ckI1RRxVw|-`}Yxj%Dy~x9&l%NuY)$~w$p-(7R|fgR?Mu;b?}a#sU>{& zO)X{?oISB=ZYF#KX zNg!#B2&> zsyOKtXZc;Q^vdx9-O9H*NJW>Om0?8WJ^mV6o#Ga;pRe>_ZO8N$+wWC_=kS`Zv>l;n z+~Ck!RoPB)R`6X33~x!tdwzd%9`t3hXMJk1MH|(lqOC!^8vKnp7f-@U!~F? ze>0M_39Jk;s{e9t?;}~B*3=bxj3~Xfjbp9!uy%R#;u(TIQRPJT_pyz*TrL1YAds!| z2$$ZlrInv%-_7ZH@MQe=md%>w*d)uT`D^sSOVOr7C{zVq(5g@bO zS=?g06f<#1Z>Sx-5&fBQ)T!BKjLcKmAwNcAwCWNOy|f8zV0=;F`K5hNq8r4Ha^%Ah z{~e7nN%5Ka^I}TgN-vc@BzC0AYf<=;vG`HC`KT`BnA{jTLd_vAOxd$zT{R4A+enN? zc1Yw4jAjzyp^mK3UO~Kxqy}7_<;5!>tuWs3t!F-S$;B9}QMK+xt~V(_L4YY@3`xac zG`s=jsy>_wpWpeK=J0x>OKHwaY45`q)aM{6M`_{hYx{LDwf>`xa%0%U@6U+EPtVBT D8jsXR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/162db6ca0a23ed23721bdcb30d981ac882334d63 b/fuzz/corpora/client/162db6ca0a23ed23721bdcb30d981ac882334d63 new file mode 100644 index 0000000000000000000000000000000000000000..c9634f5ae8043e0fd4932ae6703d72d0eb7a516b GIT binary patch literal 936 zcmWe*W@fNtVqh?3WX%xC#Pj`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AN85K^Mn+av1_M_^ZUas>=1>+kVJ1gcLtz6!5J#1VD>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmo>@|?5KvO7;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m&Vy6AH72gH&r8=OeqHk)46Lv6sQ1v6HE>k>iH;iDf1lN&kI6UsxO2?Yexg znEQUth-#(1=If@bwoO^kaA1pk*~D}=g9`#J+m+-BlqVLQc$r&i)mq-b&+uQY^ysxh zpA*UUi$5hZIQY-{b^2goo<^(2balB@nRV<}qw{s0-)c|T*t1?Gcil^IE7n!}cgU7iM8iVPIhRkL+QVZw$My-UUu&|{&+A^4Idr)F(aU|EF;7fRdQ3cIKXsk9`#jZ(Z2wsTON!bL zTnLcYFkp7L#ZerXQ!i`Dm~~P<^Rr&E+MRjtv#YoshJ?>pHL<9IrB1#-)mNU|vS*G8 ze~XAzsIL6(4|6#;al}L#r8cOEF*7s#;ALPq#K5ray8k?K*SPX~dq`DjFB^Q+# zXtQx>voW%=vKuhA$!C<56jILWLr{|>VCFker=O-5zAO+dfQ!-zF zTWXw?sl8;w*P6jtH>27|6ci#X%#4ixS(pqM-~nhV)+FL}mrYE1&$o=NWnUY&?M{-~ z71gM3pa=>;1r{j-2?HKBE^RhO7RGCpOstFs9BgdqjZNPBn`bbx-9Gm5z>eI_J-aME zyIteftBPZEI;A14yEO#^UsMf+pApmO; BF`NJZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/165eb9f3d21dc0ef3d13448bfe756be0ee42b270 b/fuzz/corpora/client/165eb9f3d21dc0ef3d13448bfe756be0ee42b270 new file mode 100644 index 0000000000000000000000000000000000000000..3bbee836b62028653389f5d6b57f52a3804b4a31 GIT binary patch literal 2836 zcmb`Jc~DbX7Kh)fQ!q$7$9TL?P_l7NEEk_adRD5wZJ zpmbp=qJp3!v>+k_8bLu3X|-EK8WE*I5n4nYGnE8vw7REis^9ymEo;xavo0P-Vzr6;@mjVQ-L1qvnfgu=zbRdX; zz^Et{2o(XLLLpQz5TUjJ5qzx*LBS}L67=Ex2Fe-Df2aaAtdez}cix;D3}Y}5@Sv#x zB`m^1V{s@q77Yiqq=urZGLxIgAu|Qx0uIdt7)zbXs>|1HXLESlIRau}Y-Dt-fKT)n zq!Bj=B7u>P8qE&a(QWB~0qj7Kjv8$hu%pu#%>Oxz;LpPdk1zdx7y}`~A_xfcQ9>bP zMG~L9u3y;*sZs;B7I>VxGVOI$Y0ECtD~!4_i@ZZs+3gpNQ%j;fX?HZon@o+8%u0CT z7l~<3xpUbXou!17E}!HLVzz7b8+L`Y-%-iJs#;;hF{o9zzl}?FpClDG6xN#`+(a1f zdhg=aY*5Ept-qz?VclSD^xkO{0z+`MKkx;HScGM$jwYb-1u6H>_9(Wg8*`f8Z*EIC zmGUUJURF#)GxTym$i^4&{$zuy^gIrY0SF9BmL`mmCM<+jkMB$@9dwSH!|B@SckHb* zJu_QG|NZ;q=sxmYgN}dg8F|r`A3VBdg?CAZYiS+H>zKvPc)z2XCwTwvn?tFdS5`a` zH1bT4sby#v7I)J)c80>X{N>oI_;lr`%)s(mUdc{$rtyBxMq?H2vlZqVIe0x5Ilkp} zrBb6}@K!n}+me955Lz9Q^&FIshM-(oPiB$fg7F_lOA3Y-i#JczX^oWFwieg4ebs~^ zTMv%Ncb&{yHxq^#xkc_L{^)UX8eg>8+4R*+YG$0caeiC%icUR7!^#)mSlKlH&0sj> z#kIM`+G8}`zx+QqBn2UHS z_f?mWu1MqOto2`kH^0o%4n;K=k960<8QnYAm2Pv zeu%7yzGqAYrOUUzmfTP+4=%w zv2M8W?aCS#HYtY@%gGVzc6pkzxAuuRhPD|1`JEk zXas_>fPz&dVPOnL0aizw0wOTN8pv$`=V`|X1W8U*YBYtPmdK8zu(^pqTP7;f^NIiq z!x9t>0fy9PjHUn^U|qGc$}&&SJXMe+SUebE&E_Uj*}MckHChlY>sg8v7#%r9nm~Pl zA~ZahhQh#0+iQ`e+V`i4x8tIBPlgO+4jFc44O?KLF7pqk#pJ}yp-K_QM##2{a>9^;wt>pb1{V(cdfm1?kOdF-*KC9d`2`CFccFy3jJM&czDjL=;+3tnxQS9J_UCN$^X)DFp4>=8vxR-8QB|IQBZYlcdTtFlt@bJSB zyG$|T0fY#F2+07}dEULwXc&b;v|GlO7D_sVeZQn!Q})QI zkN9`^WsHaIp4Gc};*zU3S)|){%3LZeBX2$F-L0G4?K?Jbf7fZ<+pHn+Z~YPp_D(ascD0dApN8fIA;c6%t*4r5E4|5!OZ_mUz4un{e zes-?GU!hMdM^*-)lb@Zjb$;s5qF|pBQIYnN0A@qmN#n`!qw@=-z6QccIjJQ1eD)rT znJ4u(mj2}Rz>KKrXIox;d|=6ZZ%?<5Da!wF<_nNDK9hz4h!QOM0$mi01x|A8Yyk~W ztH@QPJgWs>*}McwG>0pY4i71`a`yNf=~J`AW$gLN+4BM(z#WTb84@9|8aOU$0SYFN zrFZe2sMH-hc6@mmkHhDt@YozamB&fq@?!;DUfNfkDE+%geX70PcRfKn4`3UGihZvY zZ`?@EjGF4099V5EdA&6Iv*IU*u9if$ru{#b z4qtn?f1=s|uek0~%d?VKyX_|oH*>omwes1;qglILOnaOaCPN(r6~7|>zCYBLPldn9 Man&Xu2)t4CKR5mP7XSbN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1672c2f40babff7dc598f0bbcb07110e2d1d385e b/fuzz/corpora/client/1672c2f40babff7dc598f0bbcb07110e2d1d385e new file mode 100644 index 0000000000000000000000000000000000000000..308f78532b4deab5b0ce8e93351f8062fec497e0 GIT binary patch literal 784 zcmaiyZAep57{{M`&hhHzHXCckyp>6iZB&Kp1ezvq}ShQkOT0pmd5 z^!xnI+J1wz;b`qKN65497kp<)7zY?i_qB@>jKl%xAr^pfzyU-8m@!6G;eaXtl>_q7 zdgP|{+~PfqID|AXGaNr36QRqd8a|Y<%&BC;(F}Vy)$my2(*#5$yFiURmPnYO&8xWL z-k+y96}R0=cd46NA<7{u?n>F6Z&5t1Qjbz)$yI7BS&ECsMCt?Mfw917V1n8Yh((cl z`yrZ06DbWYH!*}4P};wkcSOGhqx{qhQH(JMV~j!m21X)$5K~Qe@S(OFnN!J#<3r-= z2<*leff#&Z_M@nlwV3Avd!$*XW<>O@h(rD}%QdTn)5!eZxyNHOw}%^DWPLX4^yHUQ zVn!zGk=gyV>PftIuwl()PR4xsSoW>S%cg zjuv}>mY_sjP}J7No7wGoF%_JOPW?2Yr9pfy>1;!M;O8=k2o9R M)aQS*(Q8Y71Ny}ZApigX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/16a017147ccf720b47accfc671aaf34e567d17f4 b/fuzz/corpora/client/16a017147ccf720b47accfc671aaf34e567d17f4 new file mode 100644 index 0000000000000000000000000000000000000000..ea17c80ae6d90d417ea15286007571f38691897d GIT binary patch literal 2185 zcmeHIX-rgC6h8O8H;>r|96Jo^zzBjepuIyG1O!D5Iz^!%3}9+Op=c>;1p#-!VbNMQ z6h;KJBc>DrvNX6wBe+0qts-bqTqsf(OhmA1SzKQ8253#RKbrn(((fhrzH@SJ&T`Lp zkBlT?E&-q=$;PVdEu{zbmE!!Z$_=x8KB#`WFlpwd1v^Uy$=8~k|ci>09gy)v#uyj=K}8&|9zaubV{ zZ@QU}r9+_;h~}DdAVF$3gCGz=Y=$972mpfM0-+k#fCOw>_LT7R`p=#_XdT+IK3#iL zHfqdsMaq+$iE|ngY)>By!~s}AlRAZ%l2IeeGMdZFa(navvejm~u*ka(+w@JQDk$tI zIhLip+d#;kmr@)|BE0t8?O0PO%!2*4X;J=!7!lm*OSzoVhH{}=l!IDVycr_-H% zBHQRbesXcqT<%()O|YVtZ+c&tw}E1h6m9vNC}kvxw)C?Rrd11e7>sG{ind*C5fz_= zJev2z*C$`lVea{#@4G**PWq^(qLj9<8^`Hm7<2#T@bbXa7N4ceNQZ0kGD*&aT)&?T zp@H9XW}8nZNCe2lS~1Hy2|{9uB6~STEM;YTN{IP1*NH|Pju}Y}Q4=ACA~0Yp*2IDu zfz9>e#Yt<|PKx>>A$Iwal`EHG5zSL&X|sAo2njeq>JfrnZQTZX9TUGHz__8}m~D-7 zuc2_VV#kBl+03+unq2YiTdC*Sg1FCqncQrXcfhUu{0euzchEM;0djOy_XQ`vts|U5 z0`ucuSGN9M8*ULEaWBhyN*qo}__8x@-O>YNp~4@dZXI`CQ=)v5a>)+IOROzx4O69Eqd zbifghs>dER!TwC_cY?9W+EC}FlJyUW6s-`54-pLa$f3TF@S+ob`IWaqmE*m=o|w9` z^CB@cj7&&n2KNhofUW#|d+w_p(w(k8yQE)}@lj;xxD-kGf^l8h8dc6IbK9#v(QPxF zCLSlq=kU%K8bt6h0OQCKz|u4o5mx|+G!dc|r(rxa5sTP~Xa+EVt!Oh9AQgaGlZM$3 zFaW4Q1%Tevut1bJ$;H1+zPHc%PH2eqax)nL0DZ`mlhU-l zGT%N&-=r+{Z2pl+Wf(?B@cQSh5OEBK}Iib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@bFY&A@nqf$=B<;~|44#(f4&j5!OKnHZUvI2nGXtoicl zL4~>j7aNCGo5wj@7G@>`S3_^VYiNnY zC1_0|sx^5fsYQ9InAZ3i2(Yn(-Oj|w#;V=O!l1}(#lXUV1QZw;7?_awP+$e2t=>$W zxzy=>v;50lj4~FB0}T8OWZ9TQW%*ddSVVfZMT)3zX-e<8xXR#^;sv3}k}R_Pml|5W!{KP70zH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/171f5c85e320cc71aad49dca2ffe5a5dc7378f5b b/fuzz/corpora/client/171f5c85e320cc71aad49dca2ffe5a5dc7378f5b new file mode 100644 index 0000000000000000000000000000000000000000..9228873bb8c20d6b3eec28d6c11aef5d845c3b4e GIT binary patch literal 856 zcmWe*Hej%1Vqh?3W;7rG7!HUqFz_-cGcf#TWME`q5NBWzV`gMZ<7Qw=Vql7AV2Uwl zVu~n5WUIu|QoeRc0N#fkD2m^IPo+8++EPNnS2 zTb17Nk%^gsfpKwwfuDga8*`{EABz}^2uhg104OkJm02VV*kB@PfCr>Nn1$7VnUT=| o*~6?L4>vNPDW^LSV`gMn#lyg`jF~|eloId)h6aX#0|p?g0qZxXdjJ3c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/174a5d1967b663c745d76a638a33c21738061c5e b/fuzz/corpora/client/174a5d1967b663c745d76a638a33c21738061c5e new file mode 100644 index 0000000000000000000000000000000000000000..4cbeefe5f96a9e25b26d2bfa72765a9f0a9597f3 GIT binary patch literal 519 zcmWe*Uctn~#J~{F%*?>R@b3GnRRJs$eykB~oH6ymo3ly{(=S&|dHdd7^_k}z1-Y{h z|FbJrg&pDCvGMMG=Ag7Ec1laX{M!8XZ{yzIVGH&h;9_9l|If(4$ncAcfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys_85MW@S z;A3E5AScdiU|?WiXli0%YGGnw1mdcLM4-UcklTP0q=`+K$sp8F*gz1(;o#viP`EHh z7o;fFP|-jhB*?`hVPasIT4a!FpkR<`ppa=`0JkR6K$wjk>=GtMsFRo(gq59`KxMuu3d}Og)*rS?ekK1BWGGAruK2Fi~K3}ACaB+Zv zpMfkJbEqsIix`W@>Xu7uR!{xVS$<(~`{e1@o*!83=`JYH~_(qOpYuC}a)I3@nX|4GoPf Jjg6zkc>#hJh5rBm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/17549168685b6888162fdd03058ee9cb520c5501 b/fuzz/corpora/client/17549168685b6888162fdd03058ee9cb520c5501 new file mode 100644 index 0000000000000000000000000000000000000000..7d24eb93f9038e0eb7e22c135f9f99460aa95695 GIT binary patch literal 544 zcmbtQF-`(e6rA_o_shbfF+W*sRw3I-Gh0|#*qD$|85;@@-~}u^0EOo;@gkl;3lb6v zF5v~fVPzp~0v1m4i#M6~X8vSG+$eBu#y^0MA<#tuM1cT3ATyI?2eN?7Au~?pi&J@d zGZkurMSU^x$5*f8&s!%Pl^rJDCXPYLGVrV#l6I{n%K61H;j|}VRD!x_y!Jx&Rs`wZQwBSa1`mIh?mFwW`D)`fLj6j`I$daTt(gjt0f8afH hZBs?rmGP@y7R`_yKYPUBv(Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/176a4588598d891838781e3c5b5ff6cd43022c58 b/fuzz/corpora/client/176a4588598d891838781e3c5b5ff6cd43022c58 new file mode 100644 index 0000000000000000000000000000000000000000..d4379a5f7aeaac37f88a362487edaae6547346c4 GIT binary patch literal 712 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwa_7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8MytcP&L3KblPB)<5s!S@OQ)Ti)&Uq1*X_TF(eptvt6`X^CQu_{$fQsz3LI75#ei zeV%6XP4%?j+mc+BJ`}Cv^K-jg5Ohv1-1X4i{%f_5+w|N8#pFz9Pusg9Qtq(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~QTHH^|WLnGu z(@o}^&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=X%xC#Pj`!`C8mpiNFMe@`19KS| zcp2U?F#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItk^Y8BsK6EvT6sF#>R$GIIQ8oWsM#VYZ~VxyPuJrfw{4l!Jx5|sj-pchW3diCK^fqeLr7V zd$Zeh`QDH2`#B@3mG+viOTSf_9ba#+Cto%(-Ob>FK+AR|xdP?<&J!&h7`_<@tUgx*k6E^m&SIJ%XQrwF5 z;Qk#l>r$h@n@ z`*N0--fCSB4oq2H76}8f29a)T3V1;Jg;`h)m>C)WBYT*Ym4Ugjk-_>!MefvVwprhW zC3U0^b*xib{iWCBYfWMLdEJXLhYrhg3$2->!rvky6{>4Lb)B~RJk^S9|5*Y{i~gSf z&cw5Ui(^UDqo*Zxg0hwgStsQ+KIg4-VeUZ(P-~C}O n=O&JrNW;_yH8Eyp1{OXB1_lvkW(Gz^24-f4Liz$G1_lNIBXSc0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/17a8e79c5be01dd6dfbc269db7f62f64fb09cec0 b/fuzz/corpora/client/17a8e79c5be01dd6dfbc269db7f62f64fb09cec0 new file mode 100644 index 0000000000000000000000000000000000000000..b6ba00108387b7a3a4ac6418fa51b9a0681804b6 GIT binary patch literal 706 zcmWe*Hej%1Vqh?3W;QS=WwpFHz3*%4JiCXJ)-haG=Cgbt$NTn6ja5*C7e50711kdq zFT*#G|oqMKO;K>b7L=qL1QOVV&j-d<0>Y+|~b!3BYq?MiZ5%K4oqUglO>wU#&VADJ3fdekehp25?8@u%cD zTK=1I7&d9{b#K6kH+}Oxq{h}gw>NVS}@4}Kg((4W> zIdpvKHThaon0{XOqRgSg?T=pW>ttXwU+ppRkp0wk+V1mIE3*A(2`nl4d;U8U&jv1z zB~g!_medK#S|((jl-KyIm#lVY-uvt-u7@GvGgcK%tYE2=?@#rW=N4Miro!JM5*4Z| nzx%^n&P^OKk%p-aYGTaH3@m&M3=AU7%nXc-U@im0(av=M@}S$q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/17b3099f83dc658d1598c1b144f669737cb10348 b/fuzz/corpora/client/17b3099f83dc658d1598c1b144f669737cb10348 new file mode 100644 index 0000000000000000000000000000000000000000..7f9a766aba9a784d2f6f4798c01a4c2cf43f99a2 GIT binary patch literal 519 zcmX|8T}V@57=FGV&d$zk2RZF1(dKE9!BBWlZLo-bD5CX)jN&W;FY01}20>CFVbLtg zE0NIhqKm-@WD_E~k)SB_b`=F7NHy%|YNkbEnYH+q`P{rb&-?ehytWwQoC7C>0Ptn0 zSWL^IALF6i=t!knj$Xa<`qJ>+{J|}s4^^E=d2j7(Z!t6FpLp>0y*PH}Ca@5>M8 ze&-(l%H*FsH2|~5z_4t9GbjYWE`Xf}J4gMjn{wasf-}yUPKKt(Zls>?l7f@vHj=3c zPYO$S(nQWtB8oJvBO-DW@nj+yPi|9mt5Q~RzzvXJHE9+n&$Xyg5xv16=jGjYRg`r% zQHv6dhUPfA*&fQ0LtW%_5v{E`NtWiTJK=2Al7O{&A6GsH>PG-DIl#FN9{Z=*LLj95 z&!TC}82vdpRfuF}`>v&C>w`0S=%fo)yy6L19gJ;h?l- zNX=Pay8ddsG_ug&VfS)h`HeTdXZrZc;nvIkTkqN?1|LnDslL?h56vr`fj=`;NYHi) z?(}(Kld+myGXiny;{KbRLoHfKcoJaMfx#X57*MIUdX>|&_dhKG>eaTWM-F&IvA--_ BhCcuR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/17b49adf0ed511a0d42aaf11473a6d9aa2d3c367 b/fuzz/corpora/client/17b49adf0ed511a0d42aaf11473a6d9aa2d3c367 new file mode 100644 index 0000000000000000000000000000000000000000..d37990460fc79ada74c94f607880c29f110ad145 GIT binary patch literal 563 zcmWe*W@Zv*VqgelW-^v5m0wqOrmRT$aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf2?0|V!OMi9loz`)JGxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9NauX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>5$uwI1We4||1&O@GLSIf zWMdAM6=q>FU@+hYG5J|on3-4?AUmBK=aI-q*N5CMBX}w~dkY+K7{9 zO}^*Ky_=9C+OgH8@b1)W*5ZCzCevaTm~JxPbncp6ss59f-z`K;peuDm>0wMM*fS4&Ar^?9T9 rtL9F*vA&Owfq_AUnVI1qqZl(ggMbJF1J84v;tYNFGaEC{tkwYl!aj*? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/181014feb98e71e25daff5f3682566ecde7ec49a b/fuzz/corpora/client/181014feb98e71e25daff5f3682566ecde7ec49a new file mode 100644 index 0000000000000000000000000000000000000000..be9c120d0712a34b7675241283bc4298549fb494 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W?DYoKdTVo+jWsAwP$ z666w=@XRYQD9SS^Q836%NzW`PRxl_rQ1B^9F_07IH9!VvTxwaUJhZHdgIM z76xVJ#x@2PM(2wbGnEQfa5kKHy)b{_vXX5TQ(70N-0XZT@MB3`8aqF?Zr(~^p_Rv& z*1pt;-Sp?+W!A!2VW&AFkKa6*y+?>iW;Nq_E+2NgwA_84SJ%HhX;PkcjV+$lXUo^W z_e0-5lV?A3`+a-4UB#TDja#|amo9%e<7o9;`PXcZ%pM#%m2+a@Q3(Of#f{4i8kZQz zvN4Cs^0A1qh|Ji!?B#5?x*rP-6bmmKVN zl=FbB6=q>IU}j`QP5{h}Jq*YZH^4xQnVDf54+Fy{W(HXWU75@apAXr(znKvG>&2$? zzk{5nuuiw;D~r2TclVpU3kMrBLzh8gJChUR?31dKEV39b-E%8%R+s(V&%Aks*2`?? zb^I1nn*ROHUocN#XL2lUPy1iI z&v1KP;0ymCacg};*|IXt=(OXXxhD1AoH^&ng*mqu$gMJ*-^7w;`=|GB``>4CpJbF= I(d&l+04!=R7XSbN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/182a0b170f80d943077660b49460e584b627d712 b/fuzz/corpora/client/182a0b170f80d943077660b49460e584b627d712 new file mode 100644 index 0000000000000000000000000000000000000000..57b8098cffd650b5144427d257fbbc301f5ff67a GIT binary patch literal 475 zcmWe*W@fNuVqmajW@h}w#KOwP&cVsW&BM#bFCZu+EFvl_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO168HfW75Wry6pwZ9-KZ2>>jjjkG_;E-U5(8wm~YVVOva96R`rK)~g$@8D5Mtp>2!1DNum<2KGiAxXr7SI1NY@e} z7a>bzNg{4S2;o{&L}C8VnWd(bE|>qk|Nrmzd7gQmbIzP|-uImM`+nc=_xt%AH4Fnz zC;;{thM*WuB1=)EWn`&x@(PMd005+yx`t+NEo~iLJsK#{06>Y400ig(5lR72!!Te% z1%QMBO$5k`{}J9&{J-$l2u_hUP{SawM**3QmF;f?zIqDrs?qIB(p8u1@L#9h?`(z!VTT`_2vtNA6h+7s z!A!+~s-Y{2A}C4`_z>J3RX|Z3MHhN5Y?eb1Sx10zxk5ugQPh--w!0c3PM^uu9bY#u z+4GiKZ|%1_i4E)e53h(eIGH;Nj(|GE2+8AWxN3*z6N7j$I)=CgR7>jmgpT9g?p`p@ z?rrnufpEIkQ~+R)K2!|i3X$8b*js%gKbKb^zi}BYVd!A1eT{*!Zi}X@%IAaz=VZ}+ zL5XD-ZWlW(3$POaD+btM$iogo9-2uQB#KIdgGB}a!MEuPOkX@+B+zaxWEIrKSL}LC zRAk0R%wqQ+Yt7`a#YX9+qA@I-!;UUvb7+2{LBXM%7}_XKJk6UEL>MLA77l>+(Avrl z+D{Vf+QELJ-ENwph@0U^G{ctB;HX504-04e>L_(;hKCqPJ^(@j7!OeZkcY^iJOly! z@5cP^zEX_8e}^_WincmWpYCwnz?4<%YS#ZSiXnV{E;kQyw@OT>51Y0{lrO#>7 zZAgn#x_mGE4U8qGlNKHh!;-o>Vc45rw|acbu*rz5BV1%1oKc+67@EL3cmne~Jc%$r zVv_a}Ic2`&SQ-n)5&_QVlM9s5BDJ&&QVFY&X1DqaN8|N!KK9o*J~?RG_18Y7O1MSb z{t20g=w&RK;~XDxmE_a9doi!DZ=_+w!Q;LqgwqGi?);* zdw;Ne9r~=`O6d#3Wx?5_)G!P&rvk(T13I+++M!n(PdRx!Up2MmNkw7n7}s^AbVvEw z{xykr-VGW;p^(L|;XfA0KjGXZff5e>D**?FB4kNJmnFg_(JJ{5f(p=K?GAJI`*9Pt z9QE2*aC*lA!x_2JTF=l-^7`S)#IRD-NqFRjhIY_!SwLxSZ47K<8N{f=9R?m5Gp zd+o07_3NM5Oe3qedI99{D+^d`U#Azn8xQ)a_|Nw{Z<8^S8hNjNX_q&bz!8ZL;T!gnSH$dMygdm#pDsw|uNbM!c=?8#eEPGamUqPN z7{`Mji!DykNTn+pk`vUD3(q!s^*vems%7y^S39Q3lys4UZ3PI50FRY}`@hp>dYimE z`gy=%c8WvfOp@Yk{z~=pN1JqXbyU%LZ!+z;%8hL{^y&iJq+q&Nko}5j%T=7ILi|syp(Hr?g zPzIg65JiDA9EfVm+a2zw3b0?V^qS~I#(q|UM1ZM2; zICk0FbM&IOk53-B^=QNc>4jDS-8A--z>XLf9UH@;4GU*k(6yi@ksn|x%0r3coEQ$x zBP?PXGmPfuA_&5)pf$9i+t6)nYz09Wonhs|u(GkYv7ZEoi4zdA3hFyn9P7!b$aq9V z1c$MS7U+GTp|An%wu2nDU{QC8<%C2;hjQX+9*iCXvCXD<+?483s~yO>ynEH7Jd0BY zHE2fmUOY7M-pbO3)XVxWCw*qh9bybg&Ed$79qGIEGH+Vi%V!e<&fX^_DWCCQH>h~B zr(M(7W~2Jn)lYk!sc0H2*W~pvdt7b8@tm0vi%PDH(ldeB;2KKI=&<=a90ukMAg?$! zTnT@cU{qWG;Uhh&b=~#AMhmY3*Q*!*JTs$r;iVsc$FX;M4PUBPrpeSR&)nh6GE1=u zWv7&BmJT&|KQ`_7gCsA-v!>6Fq|=nn*>6z9b6zv&ruA7iVoYpZ(F@82)sL4AX6zqP zF%(Nr#}Z5S)&5f8ZdGx_IqFbtQ=dMkb|dfQnA(tl zhhT|1ZGCgU>}BU%)Wq!zo_mH#F~V1~>V~53hLo7zk#Ao3%D+@6{~7#}@yz^Au+*S;OHW1CP6qWywXWIr zHV6ybYvUTWO4@0yG+Ww0egQfARE++$`hcW|%NH0p#9;dZSL_L?YjRG19H=ZEVq5EQ zqs}dD@&N7{uHMn*f9xI;q~^E&roVM!nN2moxR8e>KtVE2WQ&7P030!FypzWu&Fb95 z=OsrPNA}&XJMg)8<%*(c8Dp24XsYfRV?nm4(pI1&s&zmXpa@YIq)N*IDhW_gfTutn zo&$6tjQKzB!k#2-Y8*S*2VMiZe0~riq+DK>E3SH?W7}BN3qEKbr zm|>yQBcj7YnRGR%N_Z?Os+>1lv85rdu_F!b9!>d0}uAn zCyWfY@{{|P;s}aj%17(l2R6@FH%6Xod0^`1`zI^%EF$*8z^TkU^ic84r*gl8ITx~9 zBA4qmm~DN%9gS`>w7EA&ThmGCka);&$U{7Y*=8S{7>sN)GU84OK@buNz!4osP*LD} za2XXT_o&#=>C8Fw{?LpV5m^-@(Gl9%N37UrHqDJ4%?X_z%3^ZZ?Q4&q`o(}Y3_7$X zjD)ZlJ80Lo3tc<5Cp3<(oF6WuqV6H^fJA(5L8br*<3vmNhA)Cr?+!6f7X;*)vF2Yn>wWv<((Ty! z%}M^x&*~dCuh{xaTrxW3J?RhIF)Ds@(i?xN&^vFsH7avQ_0&?wAcyF{X?uTf-1qqK z?7N)fi)LJH$RDzlHGAY#eb&K|1Ak!_HvU;!{R)nnXvHjP4A-ydW#hHT?DV@ydPWAN z&pfQXv<_NCjak`0A%FdndCZ!U+YJ{?LbcO(|0$P+);~(veb05ZPfHzF&Fs{AN5(Q* z=+epR13##QWf*H;sIdA?e{F$!xIY+h(|U==RqbF#V9~j~pBSswGJaD!VyJ09!*!nC zA(LA{yKka8pg#Bf+0kp3?$216{ySaH3)4L^qP}cZhK@s8Qv=FFKqO7)W{S2rACb7mqwL2 zq@@%k{-V3oBXh2U?WRb}%44sdIJi_b>T%EMt)EBVNnNmO?Td)uz2_%4CTHgSaTs}F zvPV1I!gE)4LL=~eDc_ptfAOt-^_o@8{<;GjedVkxxo1-UTxT}kDrSP`3Bzd30L@)| z>9X>jQLnOSpC0^foXy_1pnUP?sy~8!?myZ7XuabWmVM;RBXJ{EdF@?anv-RYV8@R| z9g&I1esl|`yvb6~+Esp(ty~dzKH>Pf;hQJd%C-32iKD-sZ2d_y%_?wF-IgYdhmZjA zBF2i#b2>VE?9YWny7s2Oy+*xbF^x3+W`68@QuDoai-!8Ur1W+Bz}&IssN8dCIlg$V zIgefwp5}JLMV01i)l1{kpZ+{I|7!W_X*=I?vM;4Lhh4hhzHKFcp=z87EB8Xb%D@;k z)7p)R7BijI^3Q5qo%JTI<;ErEuP3)WxL&xqbpP(;$bELJU0Akx+2`!=d2aEuvUk^e z$o#R_rBZIyvMgEkj{~BXzP~z=5$Enwl(kl>YWtW;rJLR)jyaa%osM0u!|i)f<|IF; zU7z7~&b{FRH7+D`-j>4Qoa`A@&(=JDJ9S5f<7{9aYZ9^W&H=9(E1yo??dYd`B*+}wZ+9pRU|3+y0DX}gsq ziRa!auxq1XiTqG-1#K9FlKElVLE#33FhscJ0eke&ZGqiaxG+&*2dQm*7tuyrzuJg1 z;;1;VgH(B8ce+ClB$JRsLJ)|f5J*r?u^4#RJF}S_Nel)m~~6S_R-hXcd|PB1}lsfJi-nV6s$z zNg+x9zQ=1vPjZBQ?Wg`*(Z55-J}Isk&U478RbIUyV6uF1X`(ioB<2-Z=5zqogIN_8 z2GSKu1yR}?uF%TJw_0QpQgS-nNCM((e;yj^)v6Jqq#gYN<{qi{m9qbAVf^hgYY zj>NEm;7=oe@Q-6LPiD8Poh!~b+Y&%nbe}Ndb`#LeKLixsKdP?8F z5hwt$*bjKwHX;@tL#1<26d_pno?bS~=$cL`y>GHvRnui&e9Fjx@kWUXyQUbuSZyGP*)f_|TZgwlghMR02g70F+Uin^FIMEoPnDUq(8KoY_= z1VVs7K~d}f*Ba6zItfPnaufE;>o2Ay3>`)y1S3;%3IZ??+%Jnhx@(;t8Y2tP2!MtG zG!*hsHsm4C#DbB#CoJl96{tRhkcQ6}>hwekCS$UT3W~RhMY>dRwD|-K13;+aXdl?W z5ZJZ}8Hs^~Q1~Mrm?#z)VO`kG7nltd+Z9YCGcFDcuxS97k7fAm)Y$M|SRZFfmoQ@A zFpecnc@^J`BhukylLx!X?yftrItXvM=RLms@n}Z&NQEowM-F0Yz1d$^@TfU6WAEbV z=LgOP3}n2@a+>J2<^7$S$rr-p9V5$G6aBY+F(>mgoFNwZG$iSP>XSi{X|0|U%36f- z3qw3S35KcWXFz8x@+qPO00saMoG^@#U)&HCvp@%N4)MNQ*KDlrJ+J7}q$Jr5JIXsft;n=` zc-onpXM^WO*$rllpzw?NY8d}jv#=xl^QvkX_ASyo;M9fE37swr&}je-0O%CRLnlBU za#EP$NrP5sEHnj)IGU(Lc9h?Vv{^uh24&8vj&n~`qCfL;oY~)o`F#54Q0a}P{7jk2 zYm@J~x}g}LKr)J$qKHszA+7`buLCF=n13nyknjSVBA1!v#9yx9e^4kGoOfkLT&jNE zX71g7duexCy z2L_}#1{%714&$xR^eb0&i;zQUV{YqDvB=sk>*dqmV&VJo)QNLSuQKnNFZkFTUvS=( z??VM3oS2a_ohKWgBF!!I7(L~<_s5B^ls73)op$`X~A-YM>YxO0*bM?i`r& zZb!W3A%1W`!>KaI#9QS%li0&A9W>VBEA1VM()?=QkcSLQb^pc9cfu4}Y+;sm=f|@) zZWX`vZv`PF7DLR4LY&eT(?~L+Nhabmdqf)}+8Gl5jL;BCI8kEW=YMtH|3#I)SidY3 z=~q&K#1hf&K*=g7Y+wDUqEH<&VVhJ`MxbA2M?*HG!B7Z8VGL~)jHh|So=Zb*e){h< z)0KW%I4|nWLhDYjv(t}T>dLKK;(a}R=AnFDxuLCh^7C~wZy%Y2Jid{>Lq_Anj}a^L zRCjhBNCJ`zF_d`AKTfPntPA_80PG#K+0Hy59>tpZNcU5kl+)S1xLmOKLz4A{ss^p& z+#Kzo2`NVhG8}hLIA3nvJWKcGsvyDutx-bZ{1@UmO8_Xq5a7hK%lqJ2>^e#=}}U9f`4dsQ(EAPDg=imCumADhR7SbALA z7kX)@c`o-gLxKu*T0CAFV?uz9Rkf>}UWauEM^8E-}8GP;}SpL65 zD>wE?D~m~F3CGlxS)ra)@`H?S+HCtEqdTA~#rl03} z+1sycHa%qDn;xHEdiF_5T>!C&5a~{PIkWBaLUFN{eUeygK!`H2=oseL<~CAJOl|}q(VZu`aK8?a#eYbPH-vC;AIq?@?eFI1W7qKy zKA+#B*zr&|-~;ff`yfD@SnK2*p&VIOl6?AF5FnV<1Su%o_yPQ1#}Z?^uuIg0&_#dY z+liLD=l^=D42$pmp9++yrFE2XS>WBdd_sJzql7C%MP6r~HAJi-g$O?7r@l-FYo;r3lyN6MS=B%zN{NBD+p#M4RsMa=ZaM8xJ;r#ZftifKqaN+Fa_V?zCn8}N9{L}vVO+id literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/183f8c9678683b9f5a77f634922356b0a6dcafd5 b/fuzz/corpora/client/183f8c9678683b9f5a77f634922356b0a6dcafd5 new file mode 100644 index 0000000000000000000000000000000000000000..8aac0912f2909e91d703320182f1085532534dc6 GIT binary patch literal 2101 zcmWe*HsCN|VqgelW;P%I6bQ&0FgP$UaQ)FR?K>|cBR4C9fuJG30WTYKD2o9P8`KUtab6VL(6|PChCBvb zU@gL6cQ-LR88k7OvaxHmd7QIlVl-%C(qQ8FU;n=zY|M8Q!^i~6Wa=9QgBvh6F|slY zZYRAqxOBScHuL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1843bb57177497722ebd82a3120b240af8f74456 b/fuzz/corpora/client/1843bb57177497722ebd82a3120b240af8f74456 new file mode 100644 index 0000000000000000000000000000000000000000..0d9aed14c51fafa1e480b8e17d4e21537452ec6f GIT binary patch literal 698 zcmchTze_?<6vxlK_q`WSeNq@N7t7kRN*Jw(f SUl;!gS8%d|MB0ep0NwzfCzKrk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/188aaeb811968701ecf843111a136917bc44b7fa b/fuzz/corpora/client/188aaeb811968701ecf843111a136917bc44b7fa new file mode 100644 index 0000000000000000000000000000000000000000..92a5a53296dbec705296279acb85f63d806c2cfa GIT binary patch literal 3154 zcmb`Ke>_y_9>>p_Gc$h7jNgr48G}>|GtU`j7=>gRR4B==TBT{sjD}%m6p73zrBEtM zEt|dip}M7Im$vMtUW!PqvQ~9T(o|bXYbs%NUx&2n-q-8CUiY=_y*HpD&Y%q(XXdq5yRS4ww-!o%zA26v`8Y zO1fW)QY@28lxcK68_>)tC0u-Vb(6qE~4HWy4h(Lg+Xstr?9>5}#RW2KTf znLJSvi&B9ZHkA&UvP71WsEm~)(pN}?8>gK0$**S zKYg7r0YcQUAq3R0K28n8(Dxxb4!9`c_>K_sowfGv_v;ETEwdM!`fAarw!*HfwLfS# zT5hrv?a!x@_j|gR5SJ8~rip{q?U^PL@NwEvTfm{up=p_VNbj$XkU` zKE>H35BS1ekJ%;uZ5O}Wbu5ymFi^3+|FZP{#T&<%vNK@Km$Aoib@l6?P|iZBEr&*u z@@*p+hX;@1i+|YgN>zJ)t<||`6${u+F3GCQ z0+5ON3?ht&JJWCk80Zp-A{80N;Q+u~Z1GND4shJ%pt1W9;z#S*$>IkGOsq#bJ>f_b z2?s;mD0PJ29-66Qay8GgL5kmP8* z|I1hPPj3x+q*XK^Z-;2NV~;t1t1`Lk#6k!1vZ^1Huj)sN_o4ega~KT?>f_y~Sl0%} zC8WEKO3EOYwVU5(>i;}A5Y|!8USRCAqOdLq0XG64r*e_TW+#{!K1Ki<*=_KkI&T)#jA6`b5%-^aqCu9^?o# zXN|@nL<`i&AW-AFCNYHIys|&pD6nuk79yqypl?dy3uVjYDGDXVASP-(k%)N2)Z~Mm zFO{v0mD2tFF!b=;fIHxz9w>*y#n6MIY&Vqc#^G^z(SIl9{uf(Ho$(u2b%hst5i8Wa zUEx9XxxOzgldN_GX7=vB{4)2t-9YqsETxY9S#G(K6cHAA__}&+(ZJI$g0I{sWSKO^ z?Dwr-8RV&rcr!~gTKHr};|*;DMH@19Xn9Y@&*kf7+Z%ofx19@+1$T56OQl;Xz2+bD zAQt?z$Qb`LV^)vm?HEWN-T&(v5-X%?;my|H8{@62uSImvShUl&*)rC)t*p{Vz}U)> z2)8y{UJkS$jwt&1K~{*-73XK?is{BpyaPt~^1;|mMUHu)%ToGkpX;`mja|2ouL->o zh!htinGN6dq*n#F-8koyT-T#@bi732ixm)-KrU6VL`u;_f-wbhDKN))K*t*agHMq0aXm$_@^WJ2IK3@il>I!W zBeTb*aZ9fw5xP8U^mwytLS|2yTIiw@xX1ZCS$0YH`&QPQ)d#%dOT#y9BjjbYI|psO zr6=9|u#IzQNIkHuN4&Zp+G$Sz>Wx$W!6mJgJvq%3*^2E*2IBj#k+cju%eT#5tfd?B zn*8=A?{>WIF&wfOa(L0mF*@DrkfqqX#GTokxTn*Ic3`W*D(R2skp=_i#NR~&?58f> zA|2n?yDla5tb{b@t#5Iy?4{B(oQ2Xodfxj?zJA?pu#I@=lEUtmW_4D7{x*9r1@hgR zg45zYtxxfzH70suZjV=IpMTLx57l0k?fLxQPAywUjr!_#jC*D?rwc+IDhfI#Sb**i@(9!9`mvhmOfNKTQ&#ipXJfPq;^rnBB#=n+Ceid;zd7s{2A z!xBNPQutQ`f*}B~0f&vE6AcH301tqoY_^-5CvcDcTQD=F{q2+e(|`08cdl6oz@J)k z2dfpCEAP#hdiE#Rr51M7f7`WqxYEBCd9uV#M|a1a&slLir=JL^yUIKt6YAnKlMibe z*Bm|bBC9`luHiS1ozJs}P8}_5D!IDQ0+^MZDhb@n3~PD0-TxxBD9SbbMXqbsrl?bY z46I&%6UzV5Y}jlD=XOJ2MY_DX@WRzdM%ypNKBcqQUAuQZ+cLQ&RMYWm`f#Sy~IamsAE&*LfgHD*EhnA zFy(c`%x2v6t~C3J{nP@Py9}TF@T8mfeb4hc+^uU%(|)G{?dk@`I+@1#^DiyTh zzDZ)}BC1IaAXck%Zw%@-H6>@p4P1KOG0*nh;9zrTr@!Z!A3=u2FOk{*h;QW@mp%@P zt4P>#*0h5^zAJi_V(j#7Yqq85$zpf26V#8c2Ma#A9$;U2I0)h(h|`6D@{><#$D6GG E4U@@CoB#j- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 b/fuzz/corpora/client/18acd3e45ae970eb8c17fdd3f57cc6509e67fd61 new file mode 100644 index 0000000000000000000000000000000000000000..cb0286956e1e37f4d1d12946f4653cd194301aab GIT binary patch literal 874 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@bFY&A@nqf$=B<;~|44#(f4&j5!OKnHZUvI2nGXtoicl zL4~>j7aNCGo5wj@7G@>`S3_l3J9PTA~o1nUa)QQmhbAQmNoml42ky&TD9HU}R)&WMF7%WE>^VYiJ4Q z8bwiHO**nQeg*<;>|nPuF|x60H?lA&GFvgQyu7{i<)tq_bXF{g=*n)b6KsyK-7L9a z%SYD}7n}B&m+qTzMnJ#AWTOVd<*+vsXD)Sm-z@)f7o&{j;s66b16elaP+2|}F&2@Y zZIL4CTbj~)F0S&pZkT>UwOuYOJ3(kyZMJ-#^v84+}14F;-N(o5m!|u&?iLi|{Hw!TGLRcCzYSTlqeI z&z--#0Z!o$yz|7EnHjQp7#Px+8Dtf7Wil^(K4k0uWi@2UAl{;n6WsT}&vb!`tR;RzV&;9+8X+1YyJ+XNG>yLigq`xP3JlMD^TquX~TJw$3s*t$z4!H(O~}OzQQOJVwh^re8C)5MgF!U}OY2RX~J+f#;6({u}cg aKIk5Ocf(JdnVCVsi2x8~W@cbwWB>qF87-6m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/18c09d12f53dbf7d89d946e253c0abd701e536a9 b/fuzz/corpora/client/18c09d12f53dbf7d89d946e253c0abd701e536a9 new file mode 100644 index 0000000000000000000000000000000000000000..d935fc0bdeee7a6bcc505ba9b6bb986708bebb2a GIT binary patch literal 3154 zcmeHJyG|T26usB>j+ouqB`{$(KzM`|MJULbA{7M^4WQI?e87Ijt`+eek@$st0DnLc zMS>oQHbo>P8Y0`lYwyl55~4xNX~w?3zUPj|=V-bTv@eMEq(lwq;tNs!z{Es7BI*-S ziv*)9WtO%mYfvUgeTP;UtYgT&t}by~9iahn`6F=Am!%}jB^?1AK8X!!?PTsa%E?iL>u4q{t)bb#DD zfYCaNReKQ?a(@wR9QILXJvA<8-DJ|`{+D+I4klFTE!@Ot_C9er&PTTx-P8-QM%Eo8 z!g(WWWqEc3zu78hj|4MIo?f3_*{xUrP literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/18e83c26bbb04db356bb462fe68bd28460e3ff25 b/fuzz/corpora/client/18e83c26bbb04db356bb462fe68bd28460e3ff25 new file mode 100644 index 0000000000000000000000000000000000000000..aacf893bb4ec8e4a2a7b4c933959dcd2e363eac4 GIT binary patch literal 344 zcmb7z;gu*Z~|Ng15AKa#6*1<@jEIiuMe?iV`EgGq-ogAvCDzdxw*PR z9ThdyLK%m048p`-MjVE6?nFtiMY?5VeGD3>z59a0UwG%NY5tj(0+N2}w@i*Dim~jm KR#KJVJNgB$KQ*HO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/18f029907549430e8e8814f23a15315bb25d981e b/fuzz/corpora/client/18f029907549430e8e8814f23a15315bb25d981e new file mode 100644 index 0000000000000000000000000000000000000000..51b5d01c08dcaef2d639fe64df44599be5a1acbf GIT binary patch literal 1312 zcmb`F%L#xm5JVU3AwAfor3=wzcrK$$@M4_jd~$GX5i!gI7-B|1Ak=6u^6)^wRz+{7 z=6=|y6?I0}!#6}B)&g0Pr&>TDjOPs_4-sSAujmt(e+vX+PJ=+0n{_;jVgpf#wLn(n qsTL3j;}M>38Oak+-jC0B>QKP+v@r%%Yp|&`?hfvFbgj;QZ9D;84Ho+V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/19228c057075554683cfe59bd592db6df4b705e8 b/fuzz/corpora/client/19228c057075554683cfe59bd592db6df4b705e8 new file mode 100644 index 0000000000000000000000000000000000000000..25730b63b9f769d1df3454bb6724dd5600828bcc GIT binary patch literal 498 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945QVBIIroKvbG|{OfiN38$W%KfMgtBe1}298|NsADc4A;Tt!Qi|rzFL| zw)bB^cw%t7(n1Zn=q53wxKWsx`S&m9Lx=Our>RC2C##{Mt}iI6yF5^ D`Y*kC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/194f625bbbaafe2a3da24cb1125e9c3ba3ba6764 b/fuzz/corpora/client/194f625bbbaafe2a3da24cb1125e9c3ba3ba6764 new file mode 100644 index 0000000000000000000000000000000000000000..2cda634e85123573a9d7942a58b736cd8cf706b2 GIT binary patch literal 696 zcmWe*Hej%1Vqh?3W;P%I7#M6B7fnI3L;ljI0dIjlB#8 zjh#%5jrBLQPb_18lJwvA^M$pM-LA{`estf@8BwjY*L2-v)wU@MCLGuzUp6t_&G3Ri z%XTHX0_BNCCtl`OTD6up@E@5fR(jN{(C0+5{o+r_bF}D{!eg?8^%%QS! zEMf-2C}9Evpum(>W|1%uYhYx72_gd?kOE;ARs&{6Mgx$C;gTQ^H!{Gv0|dmFnHgC4 L7{F@5AfymrP^sW!U|=98&I>af4A8iEtdYlRjRAIRA`OJ0PG@3d;{f}CnUS5@ ziGk&rcIKn~sq?4r)0g9&(&ck?diM5}a=dQ8@2*@aH}}r2D8}d4rmx_V_<8uqV!5zK zHO(Hk#iV4u%GQ0HqU(LWNa^6>00Tb*SvKZSSw0pq77?gtn*78J_J)Euy-gRvp&+Zw zB4HrbfUJNWu7C%mUzml}fLVpn04bE2Js6+{5&{Yg3=pMeNGcf=;2be#W(E@;1_lFW z23Z9IuHzyhu62S2r@gGR*P15Zn#`EXIjiCST&|kQ&G((0nV1jmy_a_$_vJ2J5SY5_AMkJv3^4}Y4F-&W+}&RLunp`5_N=u%X>B)m zP7_mX;*DwOL^&_}N`tQwWt7TH`?VSLbR0*@6CE|hgIJ2a>a6wQXc&7nKkOedEx*LX zh&tw4S?HYIE*>vwp<4?_Z#*N7gg8eR5?eqrkM6AzrzGuDS72r&@2|8}5qwollDvJ> ccd9KElce3k7K2dzTC&$PzP9WOY|ZY*2b$khn*aa+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/19b265a4f07f21b9de142dd023a9ce0824b4d525 b/fuzz/corpora/client/19b265a4f07f21b9de142dd023a9ce0824b4d525 new file mode 100644 index 0000000000000000000000000000000000000000..f48ee5dbcb9322c6304f0357aaf8c21c4049a6e2 GIT binary patch literal 544 zcmaiwK}!Nr5XWcUdu^+(g{-U+t!;UT4B@}j77`r_1gQuQ8FUU0(anRWurTNg)CUMW z_Z^CY4nYz@V9}*-(4lkjOl5lAPS^JS42eLQAjg7rpsBPIAw`G znV2X=>ixC4amtRO^lMx>Rn-BuOJp;b6_C|7Jd!g6afocJ5lhH_^A{u zluKAHkzfQN{$Psvv-94tL5Twa_Eot8;1Tc`0iOm2=m9}ht~-z`$R*^0V>##8ygsWK zN{)}T(P#PIta~ZE?m9ISp?2{6g!tS0s$$Ih|nbjm7p`|qy-(dAl(U*vX9b!^c~mAWge>U z$hx61tLCwGjA;e-Ks6uf;1PChIIP5d8r@GLyEDAmpK5x~ni?C89e2E49p+4qXM`Zg X7RQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;Xf4s!$eF&7$D#WrVPEo2e5@+Fl!<1+NY$Ie9uW+cPA4w6T|<-jmr%hml(*hF^9_X zv52vV{G7cs|7^$Agu?BY6kLAUPUjP4`D9QEl9p!4GstPcroi))`w~}!g;-Mu)@b8` zrj9&l>L>{)$t+d?r;a90>#f_Ac1D4c9}gRIsHiXts{u13P4 zCba_P{H^;!Wd%R|IqbV@e|+s~tN7X<{2mb@Ey5LlS|?X8Q+~TlmFsQloRY(}#mT=V zBpDw{r2aaPv`^ywi)QCblfUM@ux|@ay*S6ZByoo6v;#V_celpv>3aF$nVBQc!A)Z8 zZd)8Z_oh(lm~76zj^n@n@2Y3=zoewj^RQ&YtPqLKzGU3;=G|Nj{n7}tn5PJN&>qhW`z(e$b z|LlrYVMjQ3{9<7E6_obGPHE|vUz^|lZQT1iY{9+*Tnr5S{}~w=85p=3m>3yAfSZA_ zgn_Y;ficgZi80Hd@zVlkCPpSEMh*imHV&;ek8`#x%uEKthJptCY|No7%)%V0$tlH& z#ug?9a^k#(W(Jl<#)gJQmd3_W;=D%4T_Uw@ggC;)sknIA6Ovs>Qk0@L2%^b zi%-tpH0+&lc2mdWbi-Rob#tySNM$`<*nXDDkmG>9&zG69SJ#Nfyv*e$J_M8ogH*AT{7O3Q5U^vUnAd$$TRoy>H#?V%?^qJeQ$?C7F z-p`r1_R4*p8AoNbcBjN$ST9r&!eK$-llz z`&;*OzPhH_c_Koas&g#7REy6l#BVN_Y_#`26sHx-kOuOQ{a10fYZusSZ*Dm^JLBEf zf^(1WYiFguPr0S_>wPkJ$ErvM<~;|Vp1aT1=3P`Zq1pnjBL-E+|NjjPP#y8}&tmET E06LorHUIzs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1a2aff65bee0d53fb6a58175790eba98ce85da22 b/fuzz/corpora/client/1a2aff65bee0d53fb6a58175790eba98ce85da22 new file mode 100644 index 0000000000000000000000000000000000000000..feda7caab409e711199e180320513ecbe4df927d GIT binary patch literal 7 OcmWe-u3=yjWd;BPO8~C` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1af1e289adc4d7492f75b7bb42ce2fe49f8a6ad1 b/fuzz/corpora/client/1af1e289adc4d7492f75b7bb42ce2fe49f8a6ad1 new file mode 100644 index 0000000000000000000000000000000000000000..5a141faec1879fd08162067c4d8c69cf2ad2d7cf GIT binary patch literal 633 zcmWe*Hej%1Vqh?3W>(*R$@9y%qW90Uj@2a9o!}6>Eb%?oV%dL|K7nbP>Smq{2ecU& zco~!#82&RdFfuTRGcbrTGc(@hW?;O@z<7;;@v=b^<9UN7#OpFFhoD4S&pn#K& zU8~LGoGlBZfvX|60Vf-CC<~h~lR>DVuz?_m!@u$r LPqJzt6C*PK-8`ws literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1b1817890e1672e9dd69d28b55fe34502f99a8fd b/fuzz/corpora/client/1b1817890e1672e9dd69d28b55fe34502f99a8fd new file mode 100644 index 0000000000000000000000000000000000000000..c6e0aceda24c3c945b0d13cb6a34893ff22a86b0 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rKpbGiq3rGd|NkLUM~)?RH{6lAsLABV z(UpFtgo%6KGHc=4N`YP+m3<~Gci&Hy+EH4nI1?l?@p9%audd;gvCd(M6D6*jG9IH1kIz{{X4%K-5P*!j$icexoDZ!$1m zV_>{&(8PG&poy_;0W%XL6B8%HO&^w9p0)d58*s9*Yqfctvt?m4a5dyM_|L{1%EBfb zFJkWh&@?wU@Q~}1*4<@EadpSO_&B{}att+GX8tyt`)`bJS`B+-h=09}$!)17v0aB_ zZY)vz+0K!`>oRM?GK>G&JPsaaJ(brxuB@(2xlzVcYnU-b7nGS0ZOxbZ9`eJaTq03HDV6yKkL*e)THV zkGlDysT|f5icgE}ZhIUgmYsFk=j**4Z#QecKj+V9_xY>LA=^58rN}kgxc0_e7FTk8 znBZ!-W5veHVvP=utE`mjY#pq{Yb&$-}Y;LLdNW zXDkCrMAQ{eq~dH`jj2!`8%R^gF5#hUh6~4+!#3808rVfLMR{cyiyaxp=Fr`O`~!kG zQFLbxm+r{%hw4hQ#-`AeX~KkN&=h(o$r`^8O_@y5@U55OOj%~Fc$xUGB%dE405m=w z!1&#`_;{di(0Y{l&`;p>{OZXKd+d(Y589t2xo^{|H!I0rn7seU&W1A@TQUPaGQK*u zr%FpbLOV0EwKtS&ku*oNc5(w>;m ztXr1B!_@gpRGLysw2EG&Gl#Zs4rpUsQ*CPA)z!=2?e);K$RV@IDyzi6{_w(>O{;U} z7DWEDZ5T&6MV2n`=z7G7l~*&}82r6P&~ro9qC1ECH+@ci;No`hL}X?RK2{@x?W7?y zuQ*RfE>VHuxn=iU9l^AjBNljRzn}h{-qxvZv?khnais2}Chs zq*UiGFsa*noG%8U;RFc1H|*=0m~=F5<@1e%uFH&edX3%DL51}7mRkMKx5NgwmXCPm z>z-d=R;Jf$t-qxDQ`P(4y^X_dWnJ<*YXu*SY+ri!)y2reyN>%QygZ0(Jz=DP{Qw9J zMQA_*^`Zrdq{S#Iq8FMQk!DcHz0xKakt?-6b~SkGZq2T|_)dL+MLern&AbCN7`#a@ z6uBz{kPd*{0?2j9L)st@*&x>M_cJie8EoUA<3d_G@&eb@E`hugFTszYkA zgZmkuv_)z)PNQj2Vta8>)_^z(0s!WUlAw_=3G!CaVx(N%d>$@J=Utn^U(uaYCs2qe z0F(SB5fKM6UW^a~rwN`NG4ozy@m_NbH}|QobJ7^t=>~zFnQG z5UiOn@Hr=t>!a|uoWL`Kmkuj>cWW@$`g%uyuRudlaGC-@DGHQ*@vkmcu@0`dr}7Uc z?ovYY1=+%k1i@t9J}64uqBBMS0C@m_>!)oc0U$w>w+CBwbv4npB3GfB6&`BDiVTS| ziej^(BiSrpLsn!6T!p1GI^G`IL0cl;RgDhdQfN+;HXtGdf)oy+F#+3!FE5n0}cWol@&plWOvS9NKKS?WJ9D*s}Y z<{xf(NEoux@>JgP$%*H~^sAu&50B4;`-RW7)+CASf2Uj0durCcC z;$+b*zbRhidCLA!OhN8g*OS)PPhvSPmv6uFkMiwW(xG0%un%+Ob4G0G!JUDdf06FE zJs#L^dsL&&?Apng};QR7M9L+wHD(= z2?jS_T;XvOSNp8jiIpq%(&@`Iv)(`V248D2>)wY3jG74<6MqcG7f1-1k=$>?e@MBx zadTBWeZ{C{_8dk0GZ;Mq#4s4LbH)i@uPm^Kb|_X9-w>G8nFJot0|U85G72LM=}I}Vku<#_X(x*aFw*Ii&8uGBEz=b7teAvj*K&u`JVoMHwT*PzOY0;HDRFyn^p=L-*Nuvs3LkpB+UOK098@ zIk>M&q{fUV?b~)#yYJ{iavwV{Z5i)N)|m2q7YIiHV>r#6My5F;*G?vp!Zhz2n<(JJ1zEca~r(75n)W+dfw`=KA9&k?O ztXozvZtXw%it5+n+8M;m+TWB_x#sMu$1=oKmFB0OnxAoT5*X!IICx7rSEices*JhK zt^B4{*Kx#XAn51Pt1W%nX#rn3(@-#>&lFG~R73zYT+ePRw(f|N&tGyGaWx%tz28eY z8>PDC6?u=Po=HXV(=X)r6h&Qru#0}7co$J4Wd9}Vvsz-~k22XwCduP&T{I;W0Q#No zyS|lu%S^4y4UaW^QF?$hq;$%9UHtpsvhJwYD-t@fN!BBeo=2zD9k2U)#9-%r-Pnx- zoz@H~iu>uzpK`myJSyU1S=$^6bNmBq^D}BRZ02P5%78ByYuSD&0r9wMb;dR3^J02kq(UMf= zSS!LqwK!+PvZB}%TKSwk0ONSuCAVu0_&Tv3a@1v6Urh$^HihS_vKC--&_0q6oiM%zGyk z^Z!T@#tLt7c5H_E8;X@$M()-p3N=jj6+()AfB^?d7~l?!Mfy=f03v)O|XM*``u+7Yv2U9UrKv-)*(Yhw z37^IcMJMmUf;nX*3=tnar~Hk9B6>0aK>-2;m}w?Tq9dJ%nH*P0#X%@0 z48+bv9Fwe6&=g;yi#}lQ*h>k@szWFgmEtMb)oI&?m`yklg`A*(BZrM$sR+;;eeYke CgV=8X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1b37b33f4cc5716461bee441a5cda466b6468f88 b/fuzz/corpora/client/1b37b33f4cc5716461bee441a5cda466b6468f88 new file mode 100644 index 0000000000000000000000000000000000000000..6fc1110859934da014272bed97aa5d8950f0b1a1 GIT binary patch literal 1175 zcmd^;Jx;?w5QX2{+1(JwCQgiuD2xIU6sCD_g%r?$LXit?k#it%0&YOZQ8)r+kdY#h zfaEd~eBJzN=8dK{;n4y22K6xOiR<+U2y23<4OWa`Ls*2Fl3OeB{mC5VCV1KHRK#Js zx?6n|r#i&mOiTnUFvKuogNokRXgUdHHqinTQk5C$53MC64|@)UuAx_cnh~> z>rB$~LJwbRH)B%Xn+sAEZP{G-Tv8y#L-jqLN+CHcKXQ?;T T2DUkPX=r*MiP$rnsrSYwBKEfJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1b3f40905a112a005303a805c1054696cc14dd46 b/fuzz/corpora/client/1b3f40905a112a005303a805c1054696cc14dd46 new file mode 100644 index 0000000000000000000000000000000000000000..b0085e9c03e566b38eaa4f87bef5448557de89aa GIT binary patch literal 484 zcmWe*W@4~pVqh?3W;(y&#QSh5b1>fcIib|KJ!ZnnlFal4^9(~74sbFs z@G>YfF#Km^U}RtrXJ8OxW@4Pr&A>RDfpG={<5Ytt#)$?^jLr*~nHZUvI2q<>EL^!I zK;fAID;u+RYJq{PA-4f18*?ZNn=q4OsG+cdAc(`k!xfyLo2naJl30>zsAwP$66E5M z@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e3WF)}tXHZn9dj{C)$3NHkcFq@ua)lZVabt~RWF&7nbN)fse8y$ X#Z9~Kl&CMATavw2;rG!5ZZT#6izJf$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1b458a091ed6d594bf9881ec558792db23857f8e b/fuzz/corpora/client/1b458a091ed6d594bf9881ec558792db23857f8e new file mode 100644 index 0000000000000000000000000000000000000000..8552bfc485b6427e24c96ba81faf8ffae910c444 GIT binary patch literal 868 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbj7Z4N@77-N_mync_mXVc{S72aZXJ8Qg z&&a^Yz@W^)z#zuJz#z`RAjZtd%*)Nd%*nva#=y*M(8ToLpo#JM0%j&gCMH3KjV3aW>79d4;MmD6QdHc(TuDN%uS5^3kXs546oLteq%nt-~Bf) zqJzb8QpvJ#y}pjCwzov=k~@?h2fy59$+_nD1)ong3fHDTd;2j-?&(R71*ewUh=8ow z_}KZNR^-y1Cp?xLD3@@9UBbvP>E8QkY}Nk@YyB3~uG^usP3QZxIp(s35^4;s+qQjw z&J^e>{9;0iB9EGO?4KuF+d7?krCrDTPXZ#NaC)1*i z&NgsNXWVBju!}X~ZCUU=t%EOi&;NM#_x+Um>k_N^r)W&|Ix{US;5ci%fFl$0bq2=8 z0S12H(3a(AWaMLEVgAm#z(AOdIaF4ag~x!4jYFG_k(HI5nZc>OttP*bWmzszACS7_vZH+vv@Q?lUbk z`d{$UEjNa3LWi;kPrz%gmFr&o*~d^e<$8*e#SHN!R?8#ji(8jYkZOD{`CEJY@{~lS jCHd9AB6j!q6{lZ_jVSBdEym2qz`_U0An%NQ5{QrIrx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1b69391c069dedb42a8a98fb1bb8a91a1b02449c b/fuzz/corpora/client/1b69391c069dedb42a8a98fb1bb8a91a1b02449c new file mode 100644 index 0000000000000000000000000000000000000000..3140ef2c063e4e00755df984f334390d7fd66d05 GIT binary patch literal 934 zcmdszy-EW?6ot>+JG-zZBgo1m&H6(+tFwiLg=N4>YyuX7AmVd4DHbez28BFHe4%tP zkV2V+H9stfmEwVcJ9iHE+;6-RX9Aq6@*4r?fI|=XFfc#|@T&6Ag4{uFAvYY#HHT*W zs$wV^=JiCEW_8H~?3XQOX$;JTEOYLqIH3vY_F>7WuM?>28J>1X{K$$rUJ1EIRQrx6-P$yn+A7RI$>dUWGmI7vi z6S7XqXMWa8R=YFreRdVs!;tV9tBNL8u++)-r~1ls3$2->!rvky6{;)0`@>w$O&l?i zMyU;IV$95p{X7he-3$#E`({@foJ&0R#Px(3Ys=F=6*q-z`2U`0*fRC1ao7E_&Z$xv ziU+I8Hm}+7Ks4)BLUr8{w%2cWx7;w#+wrfzd!e&Q$G!)L-`>BxSa{@QH`!Ill|kuCZ*Lp3)L;BZk5kXit=>1aMzoGk%^(f zB;n$eXN5XGr~YX@=+9X1|7rL2rOa|c)2uU1p3d`iNn(HXByQK{zKTcTKYK2l=eORM z{=dX5)$#Kl$u(6Qf4b)0;*j2S#T~<3Zv-SE`wX^@r{>`}7{MF}Z(udp6`+huQVPt4n5^Hxz=*GtKC6}cou81m6 zSX$h0Twkd8t#0JK;0D&s&NedbhDQ^`1+8n@yLrl=>^Qf$Cw=E`;Y5K#$p$2~EN$6K{aW;LW3-FdfQ(emwv1;18bc4l)r;!|IFRy@3=#qzXD9oW&Bo8N!mIi_J$ZUGXMneu2TR2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1bf29946fa34035f2744f255a581b3730462775a b/fuzz/corpora/client/1bf29946fa34035f2744f255a581b3730462775a new file mode 100644 index 0000000000000000000000000000000000000000..89162f3782b39fc062b0db29eaef23a5b81b14f0 GIT binary patch literal 6599 zcmeHM3s4i+8a|s%0to@cKtO>I9twzoLkMj_5hz-)1;rwQKtTv859J{QB~?MfLqsT2 zMZAF47OEl$g7Oq152;kGC_Z|r50p^^TLn}u&ucmx5()^@I%B7ussBtSdv?y|?4Eqz z|9}6tG!y|AH~`F1q^@F6J@koh6@68F>4y3B)U?MIvMrTlUxnojU_4|1kO#T|h!B7P zpb7vDMR1?X0h}Me`2d_36yV&U0BJaa;t(8;1V&FedKAvdp+I>eX;G3x(x5zo5C{OS zFqMNOBI=4KQgODfrc|he4P+@~m#`2n(}m~DLQX0as0H(rJ}^D=Q?PriSI0MNKJ0ONM! z;^KgzQOi-*L%$)X7gtZN-?QRaUBCS~lKVEDI`iVJ1xfpl?5sbdwIw6qBh#yMx+`_) z;kp?SEj=N8%f!K*isv(FQOzH3c5LBT=RN1-E?S*Ea;af+s6nE^5q&yW>**3i0}N0!-EX%uspsJl0|7vDM&klc?$5rE`5!&Oj|h`MSj;Awc}JyAD{ zF3AcNw78Wc>x7$*Mg5#uBHm0*UA!8k?VNc61-qV#CqNWIM3WzwfIV;=SkfIGl6lK2 zc#t}8v3g^2u}k{yS*N=3mq~Vtuu>_><=%9-ncq@PJYDy zTL*EJQ)JnEkIqND7$r^ihTtExf?gPN7T!7ByYUP10~fc0Cn7SU@iAKITqiBLxkb5p ziV4c|U71>E`wo%HWWCn2xH}ipPz2x=fEaUNHy(gQF(zY~$e!+R9%k&hCz8aliE6FC z$gFnnaiJ81#^WILUcaw%eA3a_l`l3BIxjQZ7}YC|_A95Yv(o8(u_Y$BrEJ(UPyhUU z^HPHz8^gs_pK09p?r9ioE$vj&`&9J7@OI6+uP#O$-gVqhdFUXr^@NEs_6Hy|6rq7h zsFy5ABrQTw3BAyq@KmD${*_kIuwseLv8%ybcWZa%#&sBqEaNy$nilP#-sp9Dp~zi1 zfV2bT7C^2;0n!Qu$QH>$A_*%2BoSp6B{^KN!Xs}B^K@1Dx5`)Pt-c;_!ej~C%~+=9 z?_+FdLvxmyWH{rK=a0^iR74_iQkjMA>mgOLn>d6hE8bQVkwHHM_%5TM&U4(avxFve z`TZ%5H?uZY7SQEC8ogUkKtFV+#shhLE9*E}ZMf-t9(`Ts_IQWewD}qXnlb(RnV+;q z=rl~DX<gMxsVVdCD6#h!CoH~I*L;;xKFNugaknvK4AUJLC z{D`^t8q4>Z1pJ(5`p$`8h7)<2Zf%A<@KUI<>$CGRIL3B5UpZJizV8cOAm2y%KiPq2 z`Y#<;@$S-Med_BS^@B1EMZswb03|3;^TofqSjjoK{GR&%ocK!!O&8<~(&I%FdHbLw zaZC0X0RZFz0Ir|5n+$+SG(ktUH`PE-V!<7>=`*aTN$ z>5PH5hby2R5$~$W0B{MkAj%pM5duL5htQaTJYIODr3p@eAfQI>=Y)B45!sy_*JKvJs^iP8E+d}QB=Cui=N&7a2_o-@7}z_%?}9!);gYQTRu7Q z0$1mr{v<0JdYHa4z&j))XgHL9yP)yMC$`1vL64TtO${GXO#Zk+#xc&zZRku$BcU>T z+qqixvn7@r$Jn(g={t_`g9DuPE_J14HtBYM&+1=&P}#mDY=D>e%0JS#b8$PpnrR>EDC7;>F@ie+H~%WzetRsi*Y2oRt@*W+@9_5y ze}5J~U!hkIR_2 zV=yj%l8_nB`7Z3oshzUXW|tb{k-dfNR^QG`Xb^M%ERDbdSJ_-zEI(UZx7vW4NgVdX-H8~V@3nw)CR z`RpjP^w}|_=-|FKff_xQxNqB0-KR$vke_mMQNXvH$^+i1?6pht$87vZUQzwJT|0tUnfn_vE7qJ{^;nL$s>0&bGmA4WP9l@MatCi2 z=ZX}w9Q9GRIThcw=sOOZ^acG=a<%!XZfd~S&NLK^>oa8(h!qh4_1Cjni)`9smGTx} zMqJsWuJ?N=XCpPXydv+hGB7JIdiJH#p2En>4|Xvw6zw8vZQ6f{`n-nN@RM9tqFK_I zTPIBw1%Pp<>#lFb)1_>iGUH?QUzQvo4XB>7SsVBMcbq%)Iu$|(HpyoA(Tk|$+T*qV z4e#%`uOG9aufv8ZLvcTy@pDdBs7HBh3}>4|LAHNjOJbYdDf$&3*XKz^+%-XWdqAq4^S;}>Dlz(q{ zX2&BGAUczkIo65@5Jdn52w7alrUh==`0aO52UIK069oK05%Ik*qPC z*T}jzoQ#px|E-a=Y%*DE|0G#aNi(I7f=oOB8JI)^NL1CV@y8v|qy|Wgw5qp_w|9E+ zFV&0xgnBJA#Sp^kHFLTlG<$x0SFisS_1g09uGef93+si)ZBtYw=D==Rs#4gB-tG70 z@ONyoe)6y;X?8r*?Ij6&8D%Hm)YtKpcI^`}-QO7`pi>=GwFw7xifuYsgG}{ACz+_T z_#Ly_5-8s?ajVq4T;tfnnQY1a0RyeY4)9;3nBS}jk1OVXND;;gZ&5_Q(l<9ssYP~895=MRa(g9Lg286#(%P8uFA0kD08q#fhH#k> zLioFmrKqihkQ)KHY=$%BGaMnr)bF34iT&C{s7@V98@$Q(ocM0cQFP)OELc-U;*jvs zbINNB6fuwk2nrA&!ssV;T+PQFSBN>Tk}VyNnH*P0#X%^2nE|mqk;Viom9?d(7?K0* m8~dn2c{+q*Q7N5*ot^gB&~#$Y3wS{RM-H31QW0P<^4@Q6iq??; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1c093cfb87fb2754a55e298ebc3a2e17a6e9726e b/fuzz/corpora/client/1c093cfb87fb2754a55e298ebc3a2e17a6e9726e new file mode 100644 index 0000000000000000000000000000000000000000..f268ba05632920b714da960b171ca7ebbded68a7 GIT binary patch literal 544 zcmZ{hKTE?<6vfYbFHMvF0b?{3B{tHjiuDE&RH~F>v7ktoAi8S(vkJP2P{GC0&mg!s z6-Os^6C8993LX3g;#W{!VnPu8@rH9Qk9Y39&k}?M4$KKbJ^&D?kVT@R)Oef%vM2yw z3=GHtmJsYc4b}(ifxS_Sy;6&vTnWyI>*y2B`>*I~a`K}7vZOGoxoOf>;VFvA$#YFI zq|q`da;P~iZ#Ufu%FALZGa~H~HOZkvlE-NfIqO6;p38>)`AB;ft3)yC?-=?s#*Jc} zc+3`=Kdp17YW@rY1BEK*jB^dB!Qout5s1|PpvpMs*A3brTNR#NQmk0xapV^4k|MVd zau*7pj4C|CR1$&H)#OUBWl<0Q@QH>5z?da~N=Lu_X!rM*6XgT{YU#GNCXE&iQ@k{30d+mJk4OBmgiu-f!2>)Lo6Q(X_lcG10GbMfTofvc#F6r(M6i_qM!p zO~TEF-MU9wztD9sUz{$lW|$quwp+3L)Bp0?v=bHC-~zy95FikfKs-4Ch$J9Z1MwKP z5G%0-ovtPcL=Xb#IkqUIPPA8u-FSka(wNdNH-xxcz)`9RSimE79G(~PkWS@=J=p?Z z=(^01Nd+&X*V2?~29~jvuENQ&Su|zLqGzA7joqPzKYc2+=1K=mwdYP!|sxknAb58qVm{Abxwzf9{5iI#i%|Sg`DtBVQ)W+V++y{qyS-ig!=~(% z^T8iYZ+v(2^&2O)KGvbBiz#o6tgtGg_xo>5PuL?mX#DAX7a=_6%0Ia3`j-Wsv^0E8 z+WWF~ogw;}m-l~{{#3xVM^@~vHI{GW6v%c^ak2>$k5u`26i=F}3zofgYoFj%er%$e zDw-)K0XXgeFo^^}NKAqR9@R;Qw*t+WSV3k^9skl6yZ-{ycckuSYv1<_%dpj{5`C?vHK!K9G*tG9#d9jd~8t z$(sHY?d+T&x~G?57>Wj#qSYNqOk8KnD~a2nkfmq=OVOd$UH<jWvv8DU_jzVHi3@Z^&dTmMKk?KF3Ju*M{hg891IDE9XSxDEu&wqm#-3N8oTC zU%^9Mt_y+0!R%Zntx}nro6Al{8*@zd$&8fAkYm(SCZ&;DZ!oQ+4aU47UZ4%vgs#yB zLrMlEkImAnB=`X~Kp=(gwh3(w?B1{i`8bbeA8ZTq0Bk|7gasj}U$~`mHjUC+7fPOe z!$)(ip}bM=lj;?DyTbu+e2fbBL43p%jx;`UcD{QI!-jFbv5AiWK=ixCN1pd-e1!WD z)%STcwWqv< zJ>`9(wV=H()jix4oLO*XpM{!j)@z=8@W#?cetomDYjveIt!nX8CET+7kAh-~KM`bX zYWy(tK&Rz@ORuD^?to_{@)x=Sx9^E-e)&pilbd1rW-_0Qyxg6aKV!S!~{U?fZ70kf-UGgwxA8HriBRsv^%C1@LYmQW6sUzpgy4qdl48r z^eilN?d>~yX>9pD#$`#<;bvKJ_(wI};rT%s@8L*U-{bk*p`PahUa+zD4RF(IQ z7~fufO7V4eddD523>^O~8vr-}0IUMas!4r+dJFwJ_X0$YFO2)L3eHGmOcDXAG2g=G zoA%UBVOQT`{+oJ7@$st_pGIHwm5UPQ?B02x6-&h=>9Az?lTp=m-+CW*GVZx}DF=FbBety%wWa(MgQjC*)97TAu~XU0Vl01jCe>r`HW4p|ms zOa)^a_m^dR)mcnaMoiIiY*T0Puj(v-SMSsW;_=n2tJsyverfMOWpdx;uphSHoch_hDx|JS5|lkOUzkaOrSMj2bH2h<^+}&d<^O$4PDeHu!gm Ou}E!tpXUZvk^TiQ`nRM2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1c2498bebe4af804c6853e391601e740ce623862 b/fuzz/corpora/client/1c2498bebe4af804c6853e391601e740ce623862 new file mode 100644 index 0000000000000000000000000000000000000000..8441d033f868a75c13194263beea76f19fedf799 GIT binary patch literal 13998 zcmeHO30MEO!M=6*9>PiVG>Oun`2tiS_Bmz!^ zTskJ=dg2_dS5brL1+FJ54#5O{@tRU z4S41wS}L+I)J5lfsM#un2C$s>0L)p6=HzJf*P=8=e7u9!8damS;DHA0KiFZ}qyJ_pUXa_|BF%t4GDi zTc3GZVF*AF4u$}te^8VG+AGK&+fDvg0Rg~Lb@NyV_uOV##MGQCG#XGlMLHWDBhv7_ zlT(t!9+Rc9QZeCsckkX!53VY*+8v*g&c0T=-N>BcY85gN@1MK~U_rP8^n!@W=$f`C1yKj-%Ehm1*E=s9xVzUg(7f0x7v zRu`n@?}@7^@VRJ`bkH;7QApX&mC^R=PygDVv#8{k{u>*9r9Bw!G~IUoOP}3C_f1`K zecb{W#qV^*LvwQngzo%!(1Byu$Lz36{B3N%Wpf`{2J)682Ihw_X-a>U;Wzq&dVQI3CmL+NDDb5KQ0?Qy+XKQL1|I@ zrR#?dy_6-LeDq9bLTcV1CI%#V#?~U`b=iM+qeWqh}bMPk)wZ7kPUwoh; ze&7ji1Ap-17f;@Al%?ms9P{eHEQ_+}fj3wA2ClI@S?A;y|4Yz|9yKU2<|R3w!kkit zyEn%=9FXkKg^u>MH6pq+sJk1*7#kRMs%z*o($(?cbVX$uu`FV42`tLkZm$K z#Y1BZ3BPB;whc>`iY3WnDK9cHVOF9vl@}pR=Y>lXWDHPM?Nk$mZ+2As8Vo_?np4J< z1~6g>M;%^V-Vd$j6dp0kT#2*Tgt#AWPiSD_o^S1%y1`B2zaZip z_aOxfMtP+-(I&KS&zDsWp6i@aRTp~F!WU+gQ5{lIr^y*u|@ z)r{JLYqu{C9mD*xlC$HCUqj=Kc`tm;ol}?pO`CkrBJ|}ZCl}^LX~p^}BT7306WTi2 zaaTp>6TJ)994M@QW$(l*ru2!`{uQ_UKc757?p0D1I>RWUy1=K%u07JSx+@m|6fVFD z1El=|P=8|G@v^|vi&!P@M-h>rU3B3Zb8qT^`JE>3j&${@D!a9u_3pORqZi-deN*-h z-C@p}Z`pVE(7*iAblno4ypG6A92*P(-r39NVykbC5Cm3wep-vP* zdrDT+IE*o0cg+;6c5}QC`THuDA;Zgk#MVSj+am98jUH0<;7yAWQ)V`qOs$&x>iV^F zH(W976$UYNyaG9+mNoyGYO8BApK3L#riZu1f0?T@5 zf!;Bh0CZ`AS@C)nxKd$(2~W)eD>W^!wwD%2EyBdYTPC@~`sn0NHf!0|Yf~n9uOMi- zABtRhol)@Bp*y1|gL(!4y3+{hVWUEMMq-rP9{sQ=v{6O*IT!>riakd2C5-f8cnu9R3kRAm9iztVaZ|la6w$|+Ea@ceUf;2*!n9A#tAXu}1rRfm_mp&2%k~sqa3Kon?Pthg_A}&jt zAWYIH2-1U@se10INlg#}o*F^uf4_ByHbJnfE;1_ci7-SEFvOh+5LXOvc^(52zq@x} zr0~Yd*V?WguWX+bw1&1Wz+A96i?9m`-)W-wsdOuqVymOQ7l2qs+Gq8Pj+s zOsve(K)F^&jYcq4X$=N+EQRuf7-2yGCkxlr>%6r}frLt@k8A)OvjO01{VCKq zI);Ka^`%w{-5k`tGC5nB6VT~g)NoF9;XT#U`;=5msLyBBA^`XRxN3A99480F%GJzR zJ$UK+x7`yEa=8GF$K|aS<;YXSJj0*{Sdl`bb&Bp_^I6b>nCTeXSR9{_8td&l)DVXa z0(g|=q6)uxIhJ4??ti7WwYhTfn9jr(zFg-0ix+JRdufL-(k39FI(|l=F}i5snd|nk z(+YxvzN`Lx@Nb0!Yu{wnmb?IM$^PfEaTEfTXoaCh+0aBOp5hpa2>~37^3s18oD|@2 zuVZPF^`)@&BVuv`W;%z2hRK%qk341-oMMLZCY^PR_T2c1>G%mAo_UX6Wlmer&=h;# zeMv`4dih~D`2;2a$%MmwbJTQ~1GKj*g|9@{g?CJA?pM_BwS^a&CN{YqbKF1J(iX+Q zIHJacW20tndblOs>kIj;m^%j!1!SE$wk=!y($OjxJ2|Uj9LkIQHzh>|9l890>tSY5?r#X`yBP{mo0PMWYJltlNClK3Wl)A# zEBH8q>U1eI=QE*+!oV;|YOIn_`}2qKeWAC2A7x|aJyhdXFMT&MCSI2jGHrI$cEQSP z^FJ>ryB~DpR<30BBbmUy{7M0{v^oD_@|kkc7v__e9A&+|wQ-kIspCSMYgboi+*|&t zr0qt_#vzMOyS(0B9T(zsTe8D^;05Gq(r_S~g9^ILEbenrg&TW`;Q*o%`jN3v^ zwpEw&pFETyRk|*}CR{3)v|XCQcFldy0aD^fJKtA-!COJp%q0&~L5;U9u zjYb^TQBsV~Zq-M6-DGlg!wg?|Y5XtU48=xBE zt>Mn@NuYLA3Dm+)5l*KB>esXdYD&&lrykk)N3VCQZr#e+vr2`&+UlI@NP^Nbs3QrI zup6EoJ;>RAo|qPs*}b^-ti-hO~i~8tr zaf9I^X>`mDLOdC={#2%~idDc6D&#}SUX=3SQ{poJSUB|5at)S7ow@du<=+l~-G?&l zHk6@1DPl>;@HFj?f&mkyAI{?p$XeWSwt9dI@G5Kx?Y@bLd82j{Rp~_!m{Gx;^Ke%?0Jsoc#gj< z2$va-0ub7B&~eWZsa`~Ep5{UN+Zo_IWL47;zf(#AB?ELpC=^ zEQ#$mDVZ69iUN{QM|*38MhZOx4{zg%+z+3#}mbo<>!#8Zx^4+b08gGN=qr z|F2Do$AZ#i04RM%yRT=AC!M5Lz5Atwq8cge?v#SsOh1h`)}Y1R%b&y#ORA_E&FJdT zeszE|gxYp#-qkC!^?p|Iq&;ig$7=enHUF1FJE_SL`Vp0Vx)FXmc5JBXum_S6dpu~V6q7V*2M4^Cn z4aE{A~LxDeLLUIZ;$7B-z6asaDV|| zAy89;R4?)o=M2Roxpsr@C1Tb?2bH!)RgT88W}rBf0Z<1f0LUN!0YCifj2d)>?*Yi@Tj^H&N|I4O{xw-SS&!FDJ9hp+%i$^vLo2Aq@x ztZdrK8U0+D`^dFw|4cTcY1s85&M)4$i6#2pEG@4j@zN=3OitKx`ZcYAMq|o0lN^5A zU__jAsx(paNR8)knszHb+HTrdpO*PD+D>QnBCNaJa?+voT@@o%@l3j zwKVGaXGOR=l^}lxFVUQYKmelw#+d^d7yweoncPEzG6#4Qj06PtXj)KS1a2y z-{{|6KiDkouI(e3ddU`!?lQRZPY1tv?@6xq>%-8F3VUt&2Y^TjgpuD4S}+5cKA9vue z18+q5F6nr1*s>j8kaAzU6BGe}Q{)o>Kn*|*0ICO24Jw4HP$4u|5ls+0nQ%2MKsD%i zR8<~02od3L=Zt5|7pMb$0iA_1nDhX$I%D#3%KlHhXN)AC?Y}9YnwdQqb827JizSbr zrtmkt7BVT~hx_nlL+P&~e;4~SYIvn~5_bOBRc~Bow2M4A@Ll}Kfpz?`$I@b}k0X1 zo@WTajPn22KC=}6D=XV+H3uKu0#r@TjV1gy`e-7vqi0x8l2oD}>X&kU5yPq4ul;AH zG=lOpJ9KXP>19!O@_U`g9@fl5K_#rZ1$AA$&e8V$gRhX%vq5s>5FrEs=k{dr9Jqm$ z-=Un44M~?i=r|uoEqP1RkpzZvZ$5KxB@pa()cX}x#dvccaghJw}y= zKIL!-KVr_6osmYX~&H&cDWE8M?GD3c|EdC)x_-qmyrW5Y2Li+g)9L_VCbu8k&$jQ?oljRCX>DUp(ySdY~EQ#jyjhj5X5&g#1%z( hzlsmYOG_I;#%lrrTG{~MAKGr;WbfKp8{S!I`!BrGg`)rf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1c76bd4273acec58bfd4db4df7975eab6e7b1719 b/fuzz/corpora/client/1c76bd4273acec58bfd4db4df7975eab6e7b1719 new file mode 100644 index 0000000000000000000000000000000000000000..690b81674bea797d7dd89f59a25ebae64fabfd66 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W;WP<$@8m$fgl@mr~wC$L2!O4aC%?3?O>kXQi1Q#$fF&Z#&G8{920!}t| ztu~Kywk(VWu7=zOoNUaYENsF|j-iIaVEb4>>zAa}9KZOAJa33>6LJK`OX}B|P&= z42tp$N)!w-Q_?d_3=|AX3>17yQVit8d0~cw0UDQD)-=vG5P-U!iII&}yOD)KnYpoz zfrZieqQy+5f)$(%CtfeiU%0GfTg8;t#VI#C9}E0gQkTZg&#jxcQdnr^F{ZUIHDWjY zIe3}1Fjm-Uj>zLTPiF5CVv;h{Z{@p+at3Fhfd|3Sa?)IKyz{9a)ZVt2C{6-p|X4| zVk{ykAp!%XAZcZmJcFDDYzmGo^jzYO2rdI*CIbUltQZJ$!AvoL$BKcl1VRu36buZ& zxCtrBc|g_*v#=U4Gcp<=B>?8e9tL#%0|>;JnHje6FfeRlW{_3TmC3yD`H+G8n+dVM zUTix5+rVH7>vU^A1A|+22Hy+}IM|pOx(piInVcAB!<_6^-mEVByPtXU3WJvh&g=Ls XrZgEC9lg9;^9825N7$^b&e0k^{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1c8cd48dcea9607877b7f1c15bfd3a8f096559f6 b/fuzz/corpora/client/1c8cd48dcea9607877b7f1c15bfd3a8f096559f6 new file mode 100644 index 0000000000000000000000000000000000000000..077d788aa0a7c6c7237418abe80063801e75098b GIT binary patch literal 696 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>BpZ64TXLM(&XvgLaxj2bP$iv#ft`VY zmqD3<;Xfk-BLjmt1A`bdBU2hT15*+MQ#=Dxj6oAqgh3PI!3E4rj7&_N3>$oY>#Y`; z&11mJ#;Mij(e|B}k&%^^!NAp!+klgeIh2J>n8`8JP}o2a#NpuK3eL|>)eSC5EJ-y~ zG>``ga`8xb=9Q!t<)xM=glDFtXO`m=$cghBni!ZE85YW;3>rI`LK%<%V>tudgUpSM4Aw6yQm0WTz|TOI zjX6}7k420{q`UO$n$sNn_~cW!{|eiev%K_H>w0it$||!+7`$r1u7C%mUzml}fSHl; zKeC5eK^_MCCl}p6Mqg_R)6eT(lsR;`9n(J*IQ)~4by7a_vtF{=ovQ5j^SB;{gwI%2 zG_iuEPQE|YSDssF%^Vf}77?jXUHRP~=5lW0h>0{xZBP?qW@KRDV*sZ)hE5g$;-T23 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1cf9d47b461dd71cd9c02a8ce873546e27f96321 b/fuzz/corpora/client/1cf9d47b461dd71cd9c02a8ce873546e27f96321 new file mode 100644 index 0000000000000000000000000000000000000000..f341148245e910ba85cd6a31a351d8b7a883745a GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{okBxy$izy3ox4I~1M@_G_=kOMEcMkt`pkiaf$QUWPi$E=Nxrfz-h)ds;nR7T>djmsH{`^anHgC4KtcefGLJ$4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1d92f5bfe0270ab938b478dcc770f6f9843cc92a b/fuzz/corpora/client/1d92f5bfe0270ab938b478dcc770f6f9843cc92a new file mode 100644 index 00000000..ab2a8783 --- /dev/null +++ b/fuzz/corpora/client/1d92f5bfe0270ab938b478dcc770f6f9843cc92a @@ -0,0 +1 @@ +POST \ No newline at end of file diff --git a/fuzz/corpora/client/1db34dc49df12fa5dfa8226358a89f93e2e11e9d b/fuzz/corpora/client/1db34dc49df12fa5dfa8226358a89f93e2e11e9d new file mode 100644 index 0000000000000000000000000000000000000000..dec04dec148d6b2f4f71db9ca83a1282bcbaac9f GIT binary patch literal 16645 zcmeHO2|SeB`#$AP=1YdC1Ws3`I~>3B21e+G>mDFRDZs1Oh9kcl?po>bBP4)v7Xir4M!8%t(4u-{m0m#^ zP__1(nB%$W&~vXNN)u+89J1TCs^7d7MHv;p8ztq252u~ee6-iZFwQiWUEMe%#W|}r zL*sZJC9!g3{OD@t(Dg5vYs`IDw+pFgfFVnNv%=-cv6dc97E5<7+}?NjILf2Sx2|sc z^tZ7F>rFUzecP4I;R~Ll7y^*>W1$Z;AY%ar>No}0&Plwy^_1dabtBf^w}FSFHznT4 z+RmR$15>;=q-1F4u;mm`CF*P8B#0qMyYvf_h!^I9!H;In$h+ba)vBdCNblH!Z6;e@ zE~3Ah9Uoq6d0zk6AM@)Q4`)xgZ#%#{_t?<9Z5CdI{bo-0U9Gu+{h_uMRo$VixM5QL z15SDm1KW_OlSYv(R?Pml3Y({=D&O@VpTC)%I}=YgTEZG*q|$Tin!Xxywfh8EPA~tf zK&eb|%0xOVqdx^h0Im-BYYt@N0A%skImjjA#iV)t|P!K;7@T@wxV*Ko^tdmZbEk>asVJ*AF<}$8M)t;|~J|?VGB9 zC#dmgYwgbZ9)11V9pB70xc#w)T{youRJ$!7N#1O&O?&`^f*}gkWe}8Mz<_G`I%0Ry zEAF21&^`wyajl^-F|$;>59|$9$;uXFgvpMUo?sOcz<3A(?8j5L|2dO4>PTijLcUq` zykg&sT?-F5whX_bVwD<%xYrC^>M)Kp>jVVg7}Vx-iI$odEA~frVgiRcB8F*2 z(}TK1KBm=kIFZju;84AyV?!CyR1Y^k-`GG~Xh*Z7+1c3>d}B|e+qltf?40bJCczO> z>>1!MVozl)Wv|%S@Msp%1Fau46?C94&J?nbTOubSmL17Sp?c9F4>6H`Rf2hVhz5W> zL>VRCd5t-qJmuQhTxarn-kob>y$@y&eXbkVXTk9FJ4-5`XP-5GHt8cnZ7+RTb`eL# z-#1{xSzc(~vnLaStL~CAdL9p2G4$YMZ^xJZt$iEb*@Ui;Et?d8b#Yk#auJ6tq9 zc7DaVu|{SP`{9OS!no);#m+-EIgl408r1`TlGeAb;mvzm{JRyGLt3mxZg;hbZY zK4quBeT)9LdyUF5s@7!~ohc}GWm?R&i)78M)~y_F(&nFc_+G|H%_{S!2UbygoN)SC z6EFIUk($?Up^sl;{hlVp8twOIO`>-B)DFj1t-{hPcGk_>?rBqdz%_nv-OGOcj;YyY z7Zkix?~#&i=uo+RF*{Nq5x5T__dYbDU{EOCG1v`(3X4yrJBHj=0myZLTmi^M$U|x& z4}pYqho};`E^1MUtRT8o<1ZZq>f=O?k|>)Xf(v@^1&~k`kPuRsYLB$dX{>!Urv(Dc z@Zj(L1MZBxO{VA_?7&6pM12heX~%I4AY^DoRPD_gzV~<&5;Y0v>A+muWlAbxwPG`|qc$TZ4agj#@J|HH)+`?Yz17+>1)l zvyYvzTie2W=2sUHd>{OzLtWWAaM9{9r;6+5Rjb7Y&d1WQp|{?qq#5hJsdly=m$dMN z+p_p2{mweHjT{Y3n~&RRZo6Zeksz3wrB^f!f1WG-QT_>(&?oLiQ-Jz29rEMwXY?n7 zZig!jeVubGu5L1DDA&7a-^V06dWW5R^in04?z_^fyr9ty~ z-e+BK1Vyo)uknKVmiK}b&(t-it>s{aFKBAZ3^ zV6i!o(;}G+4vXrRDF5pS#VaAkAsyP$Y0#D^NQiMq=qOG?ciB-;M5;okGgaZmn!#5g z10|}W3;BH_|D=0wJMDtf{Nc;2d~2T1_c%()8*e$bIomQLb$scIXTj4ifJOVY+q8Sx zU9T9veipkr_sGcri!M(-4NkgXZyxHDtD^qV(dxVbY4z(duCW>l2HOW2E(vj}e{1ir<#Z{izr{_L zV(mlpC%rKU^M3b~4$~R^hBz4uL5M0V7|ToCnEeT*cbI6i=LpPoMVeSktA!M(uw|f2pn2f37%^8&;8;FZf{I)7HS zqRH?$u%R+p^^@~_YU`^gQ-J1zNywox6 z6PP~v&mqx{_v81@%)NAQ-L=te#U6XG#xceUiVJQ`u%6~L@DRy(W=?_QBhuce^!N=8 z$3r&mXwJBwZKhG!?@CiLx zFzgQ%fE@wYL4fUtJZv}Qp#?=|0{6jg(FoPZ5b6>aFHBnj0@09J8>ZagfKHQKqaH!a=-ur z6avDQ|L(*Ood5t6UI9gPC%W=;WD=c}kz`BmWa`NzK5h2X$6r@Q(z{H3ndW5@UsplY zgy<@1MJ7ik(Mg%EvSsSaB)Y04dB(q!sV9^8oX1~RrjsGa^e&V5x(cEuL{~{GGC4Ad zPRdBK`FEl!qN_}%q%20GaDZ30v z{3#N@M7*7(%>N4-A&MuGjrvRKQk4?nc=Y?B?PFTbl}^m@r1Qh^ia!muK9kl!G*g>QJ(%3<<)|HVfl7#HL6Qwc0F8s=6CqQ-vP*04^i0DoT zRfv5-4IJk?nx$YG5wyhR{_T=R6`&&!@rFie+m91|Eg!jh`>jCg0GA=pukEkQJZou_ zS8~_hO*_oy-Rb28XZ!x*`Xcr#OAy)dXuMgSn4b-^(dX3#PKplLugGKL3W1IX;IGGPXpY@XS3 z;p$;783-yc(FAz_0fYHyl3#*I4dOo*w+zKCOE*Gv4u}mUaW&aSh?Hn}8F&DuN@gc8 z1pP{yRwc)YGi525$yhyXh@ck$0E$tZh*fPTXVTh#tDV>Nq!AllfsiX0Y9BlXMrUZ} z@7~z>%kcEJbpS@4>2dBQ|)6Y{ZUn=32_cK7%FXK#q7TL0PN!h!_rJ$3PAh zisQ^75ogX*0#y*g%|05C&qu`KLikGz;R6EUZzew{Y&JlV$AU|{@It|6 zgRieBY(?0nyr$*lbyEuh;X8C3{h{~+%CT!7+{6`M6l&;gJyXu=S(|(^?eL0GYbMvJ zy&Zo$nf}*g+Yh>VHX-xtOI~6;gal9?0{qv;g&$Wt>(pehX`4aBi8%K@wCanhx2-}+ z)2^2!wvk%zte8JM$Zc+ak2j3sW#wv5p>^QF)ImJjjhH--D{k6Ucbi_lKRgcNc?4Zk zzZSaX6=&_~xvtTtYdn8j(mqc+*^Ifq#_fDa0>!*;b-LAbV@gR??+Y_t^c+6)tV`n^gJBi*&z3b4Rbj&er2jy%c9=-m6=gKk|gb^BUFUh=SR_mW|@9jk@$? z+0$23i}QyhfkBC8vGZ>KJ~C=adxdN4b4#o+CWq5-lW@{rw-hZqvV>jNr#AV7r#U=M*v3BU!y zAehPEN0r+{Cz=z@$p+FLCh4frlcbXJs&wWRpwdnB>2Wgv1ARzNj0Kb4_%G6QLGaFmx0VPA~?P zP2EuxA-A_f02Bf4iE5xIjuK=}CbSy0;8uG(^6<*4Vk+UjTThHC)BC1ma1g?yBDWQR zd?_-IB*b@H8R4J!0L7##*mxufGL(cv#SzS#4}}0e3G(nj$it3^*NH4>lDD?In_6|6 zDpclsC$;!%hKIRB9%?7(+!0404>copknt*WuY|`l-?F?Soir5#qHZ5azPmay;lMNp z#pQ)Jry`2`oD&+ef;U+(=bWn=ed~SBM(pI8jG(7g#-^={H_S@TM2EGJuG;%)ji0%y zWmc`xN%IZy1;y8_i(zMN5ovZ7;i#^DX{(J;|uAN#zqS+mU*^t>XQbSf-V%{Ao7hX2q@NHD;0e zt4bfM6`~Cf(n{~R=Z<+>&!t!#S~-}$kQ$jYS!c)_t?2v#`ZcvSo0l7J*NF)N4%cme z^17fOP7m30V#f#i(&hBcJr0=aIz_q9Hri`;GpzJFY5*G6pR5|UEN55#l2!X?Y9lej z13nGaOY;q!^IkqDR7@Ow!qi5BMvlxN z^%!sw9It{@XZv5`tj`~6e&p96!q<*-!Z$KeyXV#eoA1_@E8*}&3 z#s@2_r>?1rn|>hKXX(nykwrTS2O-$uFVeNY3UzJz$MzC|u5H?6V6e^UL#GBH{=U zKW0>2aK=#_18O97qNn>9P)YD+r-yU8koGv4f3Q9YYD(}r$%2am6D$WTC*TYCT8 zCOD#K2YrSDLN-iuxJ+aI(R ze%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~y%hqpc?@{j zIJMe5+P?ELGP1HV7`Pg88*s8QhqABsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>NhKxv9FC)|6ngrp%ymKC=56Ss9ocdl?KGJDD0A88o#|EHiqN^xyaMg|(60u10%5 zy6@+Vs8-r*x^B8^+mr{+ieIZ*7y(O-6sJ7m_S zT1!V9y1DM!s`QSJOw5c7jEe&d{0wB-m_udxSj1RFx=XLFInA+;Pd;_~udsbN%S&gq zt_KIEtTKy)fmj2kf?KWY4R}EMg;`h)m>C)WBYT(?lYQdQ?J=(eHWJ0kv`P1 zPHFX*UZbxyh3V&YFUlM`-2Uk0zRs8@CaXOr9$tS(AjUlk%CL^^(=@%zK|*#q}^ae8#Gxi4`n$&{W1SM}@ydL@HEQe)osD zoSQgeB8^fT)Wnz>8Cdujz-f-5lZAny6|B5ohq3#`!Y32E@BN2@pZel^QvMt7nXqCX zJQ1!2C&IYM$&Vn4meqTHPGEg>M)#7!PS<50MS8<*mEM0YtIImE>1Xs}^&?WI8#P`! zXzJ{Um3a{N^5FOL8y^X(1pT-8StEP*->IT`?JJT*e#~GjU!^YsiU3A2W=0l}a|}?@ zI@Uy%oLZEV0#C~imQf`wmly^srj{fkWf`n#Ifaz8yqx5;>_vyP3`(k?f`Qbu3{GJ3 z{i(k4+(K(eN?^KJ5*QJQnQC^?DlwbmNz4q$B{(GW5M6@jZa^~TlIZ0RoEO^4eKmjTXqQPuAabAQ50|NszE=ksKL9D?Bni!RkJ;2Dy zz}&>h&tTBR$i>ve$jJB~9jK!V5C#4br3yD7LO%l~z&}1rrH+4%)&I8>%^ao(T-m3j zm3+@hTX!cDbEB2|;>P6$jY|w<*_cCR`B=nQM6iXVK`BUDnk5gbB<%nXI3=;LLTo@y pjLc1pj1081dT0PKW@bhm9tK7YW(HYUHp2-x*cd5EN5cUq002IVL_7ch literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1e6a17655b609fa0e9b40cc60e67254bd99128eb b/fuzz/corpora/client/1e6a17655b609fa0e9b40cc60e67254bd99128eb new file mode 100644 index 0000000000000000000000000000000000000000..602a287d7c1bdd139fbc1bcca817f46a586613ca GIT binary patch literal 2837 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>SzBlk6nJQL#)T_|vM6&(jPsww%{Aa-= z7pTjn%B*6)8lA7}^yB)3jXmpCCI^bWIQq-Zafi&hRBP#oLpRr5Tb17Nk%^g+fpKww zfuDga8*`{EABz}^NO$SgHK#fD@yVxd{}r|`XL;$Z*7e}PlvQStFc53Nu7C%mUzml} zfSHBiKeC5eK^|^ouzpdIJN24v)^}k^9qB_I>y%c1={5RVQ<#2U_oB?9!|jh=?(2+s zVzSy};vxH~>$KhHsa9nB&k|Tt^!NOCCY}vk9801eJuRsdlr>4nIw_y|Sua`b&b;^8 zRa_5)!)L52npnY7C*PmyE6**oW{wJfi-=UHZuagEb2&G0#6%jUHmHd)GcvI7F@Vz? zLnjLZLn}B<*6T8MzgYNWV)s2*;QiDW-;?s+c+Z3t`_K|$T;$|O5LL_SJwK>cErj&hViQc|$k)Kl!W6BxfcKRdO%Qhvc7U5S0s zDM?p9_#PEx(JS8^F?UTxfTd2+am}s@JN?Q_tiHe3b~J5LD^Skgy3gZ^`lmmKeRu7T zuU%~wU;BgKBO;_lIO0$1q+0wtm1-31stOTL7Ab=M@V1@uH7flw0E6%_m`UknhMK3|H um%5a49$Wh5`UK)+T)b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1e6dcf1a821fb30297e202f8dabe7797066d57cb b/fuzz/corpora/client/1e6dcf1a821fb30297e202f8dabe7797066d57cb new file mode 100644 index 0000000000000000000000000000000000000000..343a5aeba7cec64e8def7427c0b6c86576af6545 GIT binary patch literal 530 zcmWe*W@h4HVqgeoW{ya=-?VJS2A$2Cxo>AnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JAQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;r~bj-yt4W(n`MPq^-M?iJ5`v|Ki5w28~M$WZ9TQW%*ddSVVr#UYdWl<7z_T_Dc#b zzig-TiL!h$Cic_bN7E*?0_FUz`$A;}Km9rEyK8@Z z?P{y|+8_KL5g{$Y6@OYMS1(h3yG)hqZR(to!?nf9za=CYA4;VDI*_za;{A(e=S!2n z=Do0Q3r@W_$GRkOhUv5eIm~EVl&v{?}i; z)gw-N+idnO;{etb?>%G9Z|wf5{~`1B`U^+jD)*$%4-jK!X4K(fVANn{kX6u?$-MCS zkgfZh39-LkoZs|2$Y~1ebZfq{xLb91zuCKRaInFGVZ;JP29`fy&w~p>2zbcA04fz3 L{&PYZ3=9kaDw7n< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1eb3bd69bddbef1101b64102b4b0faa8466aaff3 b/fuzz/corpora/client/1eb3bd69bddbef1101b64102b4b0faa8466aaff3 new file mode 100644 index 0000000000000000000000000000000000000000..cd4dc6b2e2edc4d1e229aea074218a262caf7d7d GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz7uqG49nkGgis0Z4<^D;6rvNA9?G4eAQG%<29H8C=Rd_@f)g=UBr zh+m2=T9Qzsg}A^DXJHdgR=F&D)KE=P`^uMdO_eSF@nI@;{A*%V-cB@im?CgxpQ2Xs zJtuA5olMN`|Nbs+TyD^~#2}P~B~+G=MT|w{=j^5VXFIMYV5+u-tCnSBMpIq5{gQ&q zFWc#SqAZ^bO4*pTWR+R+400Oa#vvbR|&JQ8Za|5 z{)fb+Jvc78!EwpRV0W^4y%5tjv8kunYbP*%cYbziccuJ-Ke`h8qEnKte(*gi$f8%i zIb!abBFl<^<2ssM6?XcSmsov&ukC2sq*kDuzjdF-74=Vl4*TxfzoKciQG6`}gGWS2 zi*UuC*2&e&l;18><$9Ysr^lu)Ir+DQB;!Mg)L#dZ_DQ^d(d;~7^4Gi<_H8Mt7w4Fk zB+f9Mc0fn=?$)?HT`xa8GjrrQxJhi?ZHuGl-V{n5lg-)Jas1c+UG+@ZZWme$Tnt{I*$ccxSmM*!REw;;kNW>;c=ljAu*# o4j0(A=!Ck@PyG*>uh(BV`c}CoeSUx#GcyAV9|I^)GnVcE00kF8`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1eb7621a57c79c965afb2ff7fdfae526acbd51c5 b/fuzz/corpora/client/1eb7621a57c79c965afb2ff7fdfae526acbd51c5 new file mode 100644 index 0000000000000000000000000000000000000000..a14a7097b34e5527fa10a1142d0ee9bcb818cafd GIT binary patch literal 1844 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07(SeDR;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0*sdg3pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$~ z94-G@zfK=4%+qMqSfDPKDzlFLYIMG?^IPo+8++EP&hnyLt?R*oDXYvP zVIbCkp`a9`fCr>sn1$7VnUV27vWHng9&Ti?eo>J-^_p$gcVS5#=|dgslvaP~HTqgp zn0{XOqRgSg?T=or>Wq0}vf5+fA^WN8wB6^aR%H9n5?E67_xyJzo()_aOQIe8Cdujz-f-5lZAny6`UsPbs4)?EPOJt`!UNemlSroF8e6b8)mEY{&QJf)`?9&qZg|mkuu$=@zOz4XGg5e zgSeLmzn|auNKhr{zs1iQ*}MNv70qj3ktFhC24lJItNvMLmr5Jk%Wt^6iOYF&Dqy+ z{MY|o^-TVkl+=0R{++FMj`4L4-`m2?oWj5$jyJa%fO4Aw6yV8i2GHDg?)?9s;_Drj zU&t!&WPdcLkqH%qvWUS2gy1Z)02Pg5VuY1L7ywe1FkWL|ye!V}F@=el@h&$5<4uMO zUseaPs1~V2LkcbTY1>l`ISj-hB?~lAnHe>>85o%*4DuKZQun_$;ACUhYV$Z}+hEoLJb-qmcrb?z`($W;S454h>$59n8R6g1gczbQ|I*9G)+qWegD}%If>L?2a@(l zynoT`d|~p}ychOu!KoMLn3g2YFr9WlNA~X4xIJAjq3Mxr-EDb9dc3sj|M7Yz|6fY# zJP%7Y%nGqt^2Z_N*FWK;7oqnvji&xQd}Og)*rS?ekK1BWG7Joi3{!Ny&lf2jL@SYC z2@?g#voRYO7_dm72qFWd66v2lJXTm3nLQXF%2JS36Ac(~f)l?MdMWkT7Z; F1OOE7{m=ja literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1ec5ea10a3d57074bfb334268908c3c74512b161 b/fuzz/corpora/client/1ec5ea10a3d57074bfb334268908c3c74512b161 new file mode 100644 index 0000000000000000000000000000000000000000..907886a385e1bb0443a8d153892eb4e035e37798 GIT binary patch literal 1335 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*-B(Wsb zP|-jhBenp7@{65*me&%D%7SwS>wni!RkJ;2Dyz}&>h&tTBR$i>ve$jI=Y zAh1SNu^g347@+CL3W#yXf34uxMe!z+x=ME%ckSv(ddQV~Sg-nr>za)dVi*Vk|M)PK zI{r0Q|KCnDbC@D zCKPVJq~P+)b~>LZ%O`_UkhC;Qo4sUr`XI!XdcGK&?!siO%g z`SGwZhl&cbuo^HkGX6)7OKxynGBVhmY+f(Kv`uX4DfZe4jNhG~o!VU~zu=Fq#J=d1 zq^lo%j|#Hrm2Zxi%Lommt_r)#{7bC9zt?s&ZBi>x&fmH(R95iQpToYp_Q%(*wu-O) z!S4|f(jr{(r*(4mGUd0+RJq=!&M7%uTb%q`LXz>JMCz{tN&6(;zi4*8H2G`Z3;VX< z)QfYhOA=?8PCK9@dv|Nxp01Z4o|!rF9NZ+f?zY9zb8iZzj>+ci>p1@F|E_u_|4T~h zJP%7Y%nGqt^2Z_N*FWK;7oqnvjiydHG<93xZa>K{Ki6%u-0;qFOR(>M{l!~7;-t6D zX74f%_#G~=ZP5vJpP%|4GGDL1aP+NmPx|}-F=l2)9UcZo4Q2*e1znlU3!e|!y1$ta k`|HK|O}~Sjrm#-8<|~W4Rd@HBy$c5i8!Q+`Dqv&)0KKo)tpET3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1eda0fa0f934d30321d13a0c396c52f19420c1d0 b/fuzz/corpora/client/1eda0fa0f934d30321d13a0c396c52f19420c1d0 new file mode 100644 index 0000000000000000000000000000000000000000..d9f10b040ddfe357bf31503f30e67c3ce58bac4b GIT binary patch literal 1199 zcmWe*Hej%1Vqh?3W)>})*12+V(|W#HCHI?l8l3SHFer6yH<+-pBr|=%Ji}0i1KJD> zybQ_=4F4G!7#SGE85qQvnVI%-GcfIBVA{sOwArAEX}v)cli&hoCPo7$PKIL!P{7H? zuGQvo&X$GIz}1l3fRl|ml*K@d$-ux+*gz1>5$1xaH83z#G?0e~N+1N$fSfoliU=AP z$r@oYtWhv90Aqv3*#-how=*%av1&K6Feo!OwlT0UI$yMysZ_9nv*E<+h4~AYm29h+ z(z-b1X6IvpA4}@e*!j72^HvHAtvtrG_N7MbrauQSvlhk*JIxV!{N~B*Jwi+}s~OjG z`LNriN2}k; zzh--6_TbQ|oD&O=N(g8!Zd`8AxWqt~jX6}7k420{1SLdZpcEvn%#vr2(|}dMLeC}c zR0^&p2AHJ=20S2Zg;`h)n3)(1KnVaU#oX9~q-wx{7&9}&HXa6sP0S3k3c50x7d{`d zb$>G<_ScI|=YIz|O<|pG%@-DTtM2YMdlwEiW`-_<#&#wr#@Q!TCs|}MT)O90-mEVB zyPtXU3WJx~&g=LsrZoNgoxfn7z{XQAGUW_TM)}RPS6&{mc5MNty+P5#lWBZ8=9?Q& z?`Lu>ZBP4Oyw7lZUEqsQ7ItfWL)o%2&FHk_pSdPgsm+|TBeSGf!Jx$8|Ns9ZG5P!l NgL@F_|Nnnb1^{$BVx9m1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1eeaff74f0ecc2d4f84fb878c896f1300bbcdc3b b/fuzz/corpora/client/1eeaff74f0ecc2d4f84fb878c896f1300bbcdc3b new file mode 100644 index 0000000000000000000000000000000000000000..c59e6b94e977b2f8f5b1bf30b520a54e7692834d GIT binary patch literal 897 zcmWe*W@Zv*VqgelW@2Et_rSZ;qqA4zaX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|O_=KL$ny5a4ED+{VDTnSpVG zK@;N|gC<7N1}H7ZoQO$cghB zni*Icnj4xL7?~JGiSrsDb7AU3S)l40=OdfQ$jZRn*vnwh*vZt`$jDLc8krF_!Cd$>)MZeyB zpQqV;Q$6kXwj@_22BvjyB@mRf35a$o1VL%n4HP%X?r6DSG@l6?40zg zq{srbIpqvqHmQE0J~{D~Ow2zx7#B+!NEmRkF^7l>voIMj7;v*OhsyG^urM>RE`lkOio?-D7~+7flNw7%WfMZ>$MRl&zgMCm3ucKg&pb%HhuR6B66yBYBjes*qunEH!2xw%1IdbjGvMpU}zBnO?gPll@Mg|53g|++?gO^SW c3||-+$`}OKFmy36Y+)dtV&P%vc)x@J0J#tVsQ>@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1ef4d3c7b8ff0c1baa4cf3038e46f27d0fc04988 b/fuzz/corpora/client/1ef4d3c7b8ff0c1baa4cf3038e46f27d0fc04988 new file mode 100644 index 0000000000000000000000000000000000000000..72d22b2c1013e389cb08928ad4f61233228bc21f GIT binary patch literal 2331 zcmeH|%SyvQ6o&sZXA)@Bcp;LyskiQ2{atjS;8M^B=v#<8_cn{ZMM1IP6LcX63cgRa zE|p0sQzf+ZPO%>(bLPyo7jLV!bvToLd&IuscNtmBd8sg$~G4oS|Q!z-rk;$ p6{~*D-`LZ4_!aUz&&hFBi_T|tny>C~<_~Bw5DI?a8@A-Pc?CaymBIi3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1f6ff348eee752357b13d30f16a1836318d2b821 b/fuzz/corpora/client/1f6ff348eee752357b13d30f16a1836318d2b821 new file mode 100644 index 0000000000000000000000000000000000000000..9ae7801e5a9ec3e929509b5d83cd0670697a147a GIT binary patch literal 16645 zcmeHO2|QHm`+v`znX${3eHly0`p%erVZl#45N|u`c=gb%lxAphG_y7O>|G)c0=DhQs_dVx1@B2L8=lMQI9z}sA z4gea8oGI&7S^A8ALftjxh@Wz$?7AnG!ZpW5>5@~<0iFl}AOW-i;2;12Kmh=G6u~VN z12}(x^949>$i~fuY~)-%ibHTX5in3P!=zAZyEv2}iWsCjr}s)A2!Q~gBUucJ5K#|2 zQ5I+CL6(Km*nzOPsC#G#)7U+d9?2wYLJh1@R9tb|QU;T?lo?6#3NP|@9r656`0I3wp(BThH6Z!dRl6MMTKSBU#@;U&MGjPetV7y_? z-fEQ{r9j+t_PjNY`_8;}Ix8|aUh534XzRH2&G|`{ziBMn7&w)DMXKYtmU@`>Mpn(! zkXWm<-lQ=Xv*n|zT*7D6FeVkeVdNUj+Qu1@d_8rh>OrCF^FxgtIt??AtS#2r^pku? zRllv>3DqK|waVP{H;Zl@3|#dZhavzeaD%Q;jfi@vN#f=4a%-ZlAG$1DA*sPU-an^e z$-bytX~kS+s%hgDp?s3u8rEkzh-2r=;t3E%5RTvt6R;aj2G$)hA=x)A(Qpz1kqJU=PB$j~WoT+HHG+obleJ~Z{>#7jhl z_jt8Gid-(OM)eD>)d=b~Vd&n;d$~AH^ntr)&Oz4382oaL4a}JuVlszvb;hL1DSH?% zKK*KkNU5;*JPI>OR~|(GUJ`KE9LT@}kj7n;D~ypf9lQS6xTcM-ygpNf@&JxmdFK9# zQH#)L-lle5ue~d#b^8(8>y4X9Cmr{`mRmQ+M(btwvgN@wrG4`Y^e!sXj_5y~Jl^QU z0@eFIPtWx>9ch==na#22OHjM}v5u9ua=*Xa`y3?tps5`801$Z;5vnPLpcDmaB;$9B zjxBqeTz1-D`IJ|(Db&O?OTsHdMJP@bH6$Vo))GMlixB|IMi5}`Nh-bW z3=^^nRKnU(S(&L=dt^i;$!STbKYak%y@dzV6p;;!^d-w* zr11H#=<+BkT#Wu#cGX^K6d8GRg*8dpslW@wXDk|SZ%!E zxX0;tVZKId^5?$n-F1C6>4y8Jxqd6;?b?o-P64|C5aAhY0Du@Essf@Czj>lw4PJHAPy z)?iQgj{U6*s;mR7SbqK`C%TV3Il1g!WW~zh=GOIC}j$~&*?^n+Bl9)2c~ zhkN`e@$h~7jWhe(ljRN1Z?UGVB?YaSuQ0Jsc1ez&YF(4r!A+XQ3QK*!gqzgWPR*); z6u+`dB_Al6nu8(Un zbJVP|dtT$%$dJPYfFbt&*9V=?V-G3X1suIKV_z2Ih*`pAhdUY;3?Io5$E&r0-Ay*e z@~&C(#ChX0LVxB|h1XbRr{_}tk}qj&Nq~htafdc_ zh6a|@&hJjyk^lQiq*K30b*YK-p`D4{z`09uV7brbx0bD0nRH|IiPttSw!qnzNh1svzuJSQL9-h8`=&oa5wO1y;y(WIw#GkP6=7Fg9gx>p` zS5Eb@OVxGgqwmi;E%5@H&MA*GVv}zz&33q9Cr7e38>{%?nGf5+r&Y4mzwmA3&iYi_ zCG~ZVzi!~9%SG!m3hKsR^^1@nY1Cr9Q8R`?N zir2G(crHEp2~7Tj=e4D|UV8{X5fDOvxOC#dMCOUQdY;!;FaJ%~Y^dNS;AdjiPN^@o+y)WxYX*=q22`C%4t7 zMLt%mtzYGE+ndux88fa`pH-iI+*;A|fXtoBd%@{$_nli;-P*B0f8Um0JW2=F2$lXs zbB#5($jY0UdqC{CcYNpcj&~PtU9+9MZnv~r?Ib_f69730*~l@-M%0H)p4h0X{IN5L)}tz`EK_q(3s|Fp{MAinYQ5OHhk2s#)&DD zL^idL>n^}u-szk=cZS=-1$3?A-S;l!`dvZK#gOlqd&DWenfFX}qZn^(eeKyH#8Fzo zp4}AJav3p|-*Sc6x;6QCgXSm&{mRN>N2V@&(w4WryzuCQiZC{DOs<( z(&1UF_a=LIt|hL#Az`{-nC28Jf{3K;yVm8TcUJjij77j)#}&r1w@u8;TrG&ugeYuC zLfSS0^Me*;Enh$(}$B*HW>GLQ>}OfVd#fSpFdOF_vYaE3>2 z#Nr6ZXf0r1O$KU91iEV z%ci})zgPw5y2Ygt)+Syxa8A7@vLxYr18rwFyK8paBHus2Y6a4k-tp_U&Ahz7Exkq} zbk0gN5uJ3WKQ>WQsjtS$^rvNOFWF^;QSs zEjN9r%WG(@08NH$G!bI%+y;-}aH!1b$AXH&VmsH7;8BWegYcrVLXP24K?~_IWMgQE zVFWQ*ouL+z`y)mai%D`|vLb^P1~KT7%ugT^109e8X%sS~LI}A*o&~fRK7{ro=ac6H zVuddOVkc$@7buVa1c<+aQZMDy+AGrJb{x)`nq@Mp?)6HCbMo1q#%?b&jFaL#55MX1 zUEB=Tos@eoH`e8qLBzJnliXcx;#)}bjbi3mZM;92liqH-i1SvZQLM>+f;hlULxA;A zq;mNE&vSR5cG*^ZXAVivX5#DClT|5=#^%`v9+=z71(*%gZ`#qQv)#5Y(expMAs*HG zF1Zv}bder+?VkGe>mQhO9kaI@zQmb>b_bgJIWna){ zIkTr|PUjN_>$H-X(7u{3(U7n_+~9+T-u4%jRD6Rz)s()G^)dHpS_)_VEE!7Io8*)W zAFWkpgdUEtJ~mixa$b{Awf=QVqI^neb+?P|xzd;Ys}|c^(Dl8y@&h!0;1FOSmk=U! zZT<9>Z(TJnEt^5VGEg!w`AvRVqjpF|^KGEuz{y)Sr~6VcSr&*?r>yYW8`WiS*VgXV zf_-%JzP5YSlebOR*jngTNT8L@zENXuAAUqeL-L(#1^h7Z0N@h27~fWV2ByxtD*tp{a(VTPw{zA_y6hX+ zQGJfa{BR;}x@T9y)Fs(sCd*Lk_`>rM&YrG6i*=SPtXI!e@=(e;%V8(0(oJ26Yg=2c zC}ba{lk%oYZ!J5R=sxk8)5oGa?swO`@p^ZU$x_ZP6Un!mb_f5?B=IRF2-)l@!3a@j0+;TnsfKr1;Tg{7R zA9MFd-m}&ke{|C}A6)qO^7=iNO5k`l&T^xe#?mLguOdxv|gWVUKU6VMqAlKl+BS$19lJ z$-^Foyo`bK<3)Xj&86ADJGE+)q-L4rWbSMc$T(ES87x|tF;F-Hnv5AX(gcW#Ae<3k z1oJaiJd14x$C9u-3ShmH^#<_urf7`j*cEV7>gMZ8pUETBTQM$u+WI0$WT`7C?kgXyk!q$ zmby-tmq~|2EbE|vqJRPr9Ev9pg@i>!#l$5f$4E)b$jXhCS5Q<^R#8<`*C1(XY3q#B z)zdFc7H)baeCbm7@`YXJJ6o(ZIIjftb*Sdv=Cd0ED&ul^YI9y#5VGQgY>U&!HD2Bk zgGD!0C`uNETd8sfw=_R5P?Zy&R(AT)#+NDP&(-FH*4-+PV2n4&{9{GDt=455A;V5z zi^$xEsGIAq;vAzc`kT~AGV&;j7|%2@73akf1P+HV98q8rFyiRnP7oYw^YKGL@;;cn zM_`#@_Ww^3MMNQl_@#gP;y*}mm>={6Ng5`Ahn>3I{cK!`*bIt@_4qmPkB7SLHECvShxCFN^*zB1=es$P#Wftl2}= z_vg&)zH<2H5RoOI(x#Hu8wU#5#gg0Bk`kv*HapVo7v-?hJM%zfP+)!@*#iL65!|3W z#?zqa1u=l01!y@yPeL|&46<=M_}t*JGOd$d_+K@L>;a|`?s^^K20ce{gOZ=)24xke z@m2acZqOV~fR>PIW&tg^90#<37DI>pX+}|yvcf+&%~v8vZl?PO1qVPB`WGmhHl%D6 zCz6lDA>X5HhR!v$Dza{hVM|XVJ2rKe?;M@wV-9)ibZ(?g-YnHpp=rQqvo|z8`FUv8 zxBb`9hE>=7eyn%+@n+JLew(e5WASe=AZMVajb93vBn=NI*kM=T9w*utm}A)=du(ix zPZ|*fA49z7BrZ|Sr{!#GQ;KD9W%Ai|LW!A3ufyZI)3F-)gT{&#^8@^^znWPkjW>xt zI(Nq*mSv3FC8P1HV{A=hn+Y=q4zFUD>V|2D9;|6PGg>1Byz>14U+krGJIu%Z?O>%uR2Xc1%hSU|!9oMbdL< zTPlsz?jG|gU;XseV{<$4bEWb{w=Jp~UxX`Ht1YQmb*Z0oY6WgqvzDItgUFI?KTq5< zI60vIqpW|2$Gsp*_U7~1r9Yi^eIiD5Ewe1?vMhI>$uTWB=IkTnR<_z~yUKv4RN3wt zy%~L`uY#TzU#aTUUK_a64YL9~;uRoK34C+=ZzWCeN>jto6@8FeKb?J*bik^)j)SG* zJn$k|!Xb&j6B$Ni0JeaTCKD}@Ch6jE)nBfVYKXV{MH5r=6=t#2wiBj#c%_wy9~q;V zy6aeu_j&0C2p|51w=0jLI9VPjxS$@TQM9an8B4o%n-EP%T!f`WtlFUWY^jvp`ao}FN@Xp2&$du6ezID8&&yTsmfkM*I4(ImtzJ6rK;u!ZJz5D0Pdl>W zyVuWQ^}p!N6G^$Lw{W1$-%;xot4Pvy>b0=hjq09`=kIQ~k@zs(#7SCSowhyL-gB4q z^Pb0zD$o4qh3V!-1DBx(Ov0ha#}5S<+m7+%YO;771Ons)A%B!IFa)})FNs>$@>-=L zIbStkZtCfY6zjutYa6J&A?jV3$H%TZHYNOS_6=(VR|D!6?|fS6gwnnBvyJ?*NPJ%*S%hPjl zhZMq3rG`hwH&KcY?%3Q~ydKLi$e}2=k^lu#asY@wF^X7Z>QsLusJ_r>(iCA~;s|6f z;F`CGtu@S#ZEWK7jVYeI?@DlVhGu(i^1bmKt7OInHOrfzQhS7J=9cZC$Xzjj+yuxC zfLw!YqzST-Wkas{<}Ey!F)i`zb11^4Zm}vHm_$wj;OoCbB|Rt(^nd#J&9kskhl_!D zX96No4fo|UKMnq^dA`5r=zIISt_T1!0Qv%ogi|@(;O(VImTtzTS4IJdFc!)I-t$EM zLJ9w}@NFZnhrreG)FMlk=4SKosH`xP5fDMA(9GdHD9a=EZEy%tm`e$uh!AQI@Lp0Y zN-V;YrNC6Y<&*Nhm!&CoAA^+7t);Y?686hx3_5u#SX-Add?pLyRwUehrcR%?+QI%x z*>Ad!vUSQAi5}IevbIOn5t&_J)^Y2-q_+=1I|ow0G48fJBw}S z>zyaWl{)?8T`^;D-bM zSTDcbP?*G=UVltag(F=u6-V-HdqbQuEyFS1!DFsBDXKJ2b@c5~^#=G_|53pSI3vNR zogWGbGGR&j0-e7u!%Wy{5eV4%m}qpD|HJYxyJO4I?ik?)rGm9K|9yAN^S^(kJAT1) z$J8&nW6hE7c>MRc<1J_Q&l}~ACzedgwJ`FH#i6|%o(ll=|c#35LmdpoRJa zykrz*W})IQ?|D@_bdgF*)Eml~B=488y?8`qDN+9+j~x=Y&41*tl~D_KIIrb8I(rF^cMYi8y3)@8P5!<^NPlB zs4$ep!YFmTxV|W#Uquma+63X2;9%iZ5>c3oVmL%u1-t8HS?qv=@<<6Dypj40%6a#h zHlFZvx!M9e#NR2OKmg8+061g#F*)@!G5K+dKukUi0*0b96am;<5Za=X_&Z|0Dm%Kk|?KBmc<1Dx)e{zc9@IQYGtf0R&h6y{j*ih{Am3 Q;U;tVAOBSuiopQ*FVNJ@;s5{u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/1f83f7bc387aa7b303d5c76d968fec4cd22c3acd b/fuzz/corpora/client/1f83f7bc387aa7b303d5c76d968fec4cd22c3acd new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/1fbff08d3c2e047f3230335e9fd417516e2b04ba b/fuzz/corpora/client/1fbff08d3c2e047f3230335e9fd417516e2b04ba new file mode 100644 index 0000000000000000000000000000000000000000..2a1dc6e1663834f9e3f18d47ca23aef64d9c2f56 GIT binary patch literal 773 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gUB%gw;FlYwa)1Jh=M zCZ_cUO-zCdn3)(2m^lB#4di5F*J|@PXUoE9;A+Tiz{$oO%EBhhWDsg7Y#<2Y7zlG2 zZ0*rz1LKu(+&ZaN5{aj9iZ z<7@)~sN0zs*;ut3Ss0X=8`~II7@aR#%v35^!P#))^}_sx%SyIYOle)5ag($ zY3%&mx_K*wg;pM8TKiHXcGI7OmstyAg`MVzJbv?J_8uW7nbnNzxqR5|(sK8GUS0q4 zq)B<&HMV$GpDkbi-Vc5MOrHJB?f32Fb`^7qHg4rwU%LF^jHA_WVm5Hxo zsbPV@63r$?L5W{Cnat&%$xM|QLj{~LlVa@{x8N21AS{&+A^>z4*Xl=&W~<%l;;9Bi zZv;XI3#LGo8NC2-76xdT&LgTU1yR5`v*ggt@e57?FYN*`;KMXw>d=>B^@Uh| zyk$kANF+2~e=?f9hD5#ti3Vi}4Ue@1W>KRZhnZ>{rj!PO6w{DO+PCF1vFg~k{mJNM zs7S2p%_@l@X}XzI`^<9x`>gTDU`x){CpTEhdHw>c=pA#{l7<9^$E}KX=DqkctE_cu zWlx@yWb2dO1oR-5?!{938z0jLzbv^~S5FSW$u%UoQompdYW6<=-tzv*W9RqvDeuMG BvKIgV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/20369530488a82d9401b88cecbe4f452eaa5a787 b/fuzz/corpora/client/20369530488a82d9401b88cecbe4f452eaa5a787 new file mode 100644 index 0000000000000000000000000000000000000000..9f128e02d4436d8f51436e8711f76781268950e0 GIT binary patch literal 981 zcmWe*Hed*3VqoxPW?*3WUn;j}i(2RdKbA%Op+b==Gs6pKZ;+2vyPx&w&g?G=1_S^D zI|Bpje?|sI1~Fy^rZjE_rX&WYcm}2zgC?d3gC@p<3z(T04VX9?e!~pnW#iOp^Jx3d z%gD&e%3$DX$Zf#M#vICGAk1W7U?^-L2^N4Dt zy(a6XtF}#9&~RX@eA&cwH^U18E!&mk3X~@nop_mBY1LZZz<*?_Sm{x(LZ1`K_KQCy z&(ZR?{&o6bVV*{-#sYP@RGD?`ebM>4&Tq9RZ0uRDlDqDuxE1Tc{X1mVrCLiz9J;yg z+N$)9k4(($zv~wV82A~;vN4Cs^0A1qh!~WjgbD@Ew*s05u@I@OcNhVblErz0J#ps)LV***1 zn1CMuY~z9e_zw*l;FSh=B>|KRLPH%xXz+u47y=;(6hbh(+td=Q64o&wh~@zhVXf^5 zh8K23!GgTOAw&-n5y6UMwDb@|Eki9sZ3JiFB96iRTp~hRf{4IBEh4aY2oa&d1cV0Z z^75%ASoIp9K!gUVLNpMBBZnG8=EFBnTAnuC!SCod_JA^Z{d7pvDI9-B-fK6IztJdU zZnsB?I_dngHk;8eDaCLn^MdYq^*I<$X-XIRfc#3?+R6V)f%srF}3?yV8G zR%36YU{9~=Mo!IJ_PIBq_Y?gFR!aA$kj~k;$&>2sOrnUjocY#~W#q84HnD{hAm6u3 z*E&)C@h2BqC52WsOC4*e`n^F8X?tQy8OhPa*Da$fU8<+0vn%H@dC=@kOyvaO>Y>dk zs+jsCh6nDF-02ioag)y?XLD4fyZW@tGURWI2e+ZTOKq2BL?h*Ekrf$Bfj-rpt{i%9{xBO{Qmv8> z*lSh6is1lO?}fHv-JgCm97(@I+=De4bj0ZNQ=cTwXR0654moc1KrvX-L$ZRqt)r(r zXgN>r>vW?^-pQKyo{Qg}4|^Y)d{;cf=x}4UkGg|ZWG(h-%b5N5&AZz9| zihnh4yHrKb-IF`}D4j9)GY>Ld$1$5uV-(y6SDmktS=ye7Q-y0V4dem7FX9M`?DGWE zyHp}0Q)SrhOD6oLH8dzVHk`Y8P5D?dAJ6(kX5s;Ne4MiRXX34NBg`VAdF)=K22JZ# zK$iInyr>*OdzZx5d3Tz*`-sqpSNX?KR(G7)+3qfjn`ztxQHm<5sB3q>XNZ{E`1RPm zXUxP(+aw13SF<)>bQ2367ETYEs%nt9X)L39H=z6>T2j&#IiY6d10?_hYVH z%0r8P(GN=57;x61Sm5vEW$-;Oc5rFEwi@fu9A}el2&eDjM@@y(r^gvN*6kK6U4j(f z+~~sEgP|JS@3TAsx@#^WJh z-t3{V#K9@o;YSh4K5W8*i-WL!Z1o>UqNiVD*KNIx)J2c}6?KSVYoQyZe81lz?0~@u zzS_(CZfRdGgHZj_%SVESqu|6BQ&rc zp@G;R;e!4}<^K;C{eOpxzRUk=p|XDF1$h9NdKo~dNf4C^tkGggD# z3FwV?GEkAQl#h3Nc^ws2&}%~f&$f)I-_?qsr!1?u<2Hv+xe*m^7ruGS^n3+##1h_v?xpDM(;a%(Nw?~i3shFCqjIdkjy?c`#Cu%KJ^@JEX_y#*P^z|fBN&BO$2XDZ$c+yEn)1}`y^-d!0=bburbL<4k6SFCl zsp6zpoaJ}HGAqXm^eW%#A{AYBRz?w#_XKKabxK>re*V&fwH?!2Y`<3xp2KUtGIoTb zal=DvRb@LRSiyHC(R?Kx?*;tHdC-^1p7p8479CWNs*Wb{YVbGaTs)ndYPS>jew9jp z{LNU(Ca^NZxc5JUFkkH|A#rFgQ^_qE_v+pF|g=r;E`xjZDM}X{h zX9Fw=a=?9iEa=-%25bI z{C70QB*kau&xaX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|O_=KL$ny5a4ED+{VDTnSpVG zK@;N|gC<7N1}H7ZoQO$cghB zni*Icnj4xL7?~JGiSrsDb7AU3S)l40=OdfQ$jZRn*vnwh*vZt`$jDLc8krF_!Cd$>)MZeyB zpQqV;Q$6kXwj@_22BvjyB@mRf35a$o1VL%n4HP%X?r6DSG@l6?40zg zq{srbIpqvqHmQE0J~{D~Ow2zx7#B+!NEmRkF^7l>voIMj7;v*OhsyG^urM>RE`lkOio?-D7~+7flNw7%WfMZ>$MRl&zgMCm3ucKg&pb%HhuR6B66yBYBjes*qunEH!2xw%1IdbjGvMpU}zBnO?gPll@Mg|53g|#o87#O}V ZFqAO}u3_k6VA#SyJjKGp(D8l=0|35T{Ja1F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/20ca23c76c3cf41cb03c5abefa3e0132a03a4e51 b/fuzz/corpora/client/20ca23c76c3cf41cb03c5abefa3e0132a03a4e51 new file mode 100644 index 0000000000000000000000000000000000000000..f18a7e02d2c926ef5f4b00492bd37b543471f33b GIT binary patch literal 544 zcmbV}y=nqM6ot>dcQd;F6k%aav&LYR1mtXCk-|n0tR#&^UL+4-;d2Ch5ud;mfq;ci zlESdF%!DXOAYU`*{xD}alN<4%z}Sp`fbBid#Sl0O1n2>|nH<`XJ>(to#+AHsCC@LW zLQSy`H>R!;rNV z+dMIIjl1=HH&Jm-FAS~WR8>?#ouLU*Bgc;@Bezl2U@EG*dE|nHvt=<#^7y9jR4Ejr XB&Kji$5p?UT-1ZFlx>c)-T(0k$HP>p literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/211409fc97f3a524620ac07f12e50f9f2b0fd10e b/fuzz/corpora/client/211409fc97f3a524620ac07f12e50f9f2b0fd10e new file mode 100644 index 0000000000000000000000000000000000000000..2175cdbb87590fedd7e95ce7101c89b7996b62a3 GIT binary patch literal 552 zcmbV}K}rKr42J(C&)1oD3M~UuH&d(b6v{sf7cSfs3SAX9U3d`>&_&N7co9#a3qk0@ zvs9*?$8-jy=m&u$ug!7`u*xSl6RkBDqEQ2WNhFY??Mnm`fCFvO52Wu?{Qv*} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/211ae5ada385451741696b47b86ff8674a8a7f9e b/fuzz/corpora/client/211ae5ada385451741696b47b86ff8674a8a7f9e new file mode 100644 index 0000000000000000000000000000000000000000..27777c5872cfa2bc35d42ce416cc8f09d2220e6b GIT binary patch literal 621 zcmWe*W@fNtVqh?3W}aQpqrIT=-1+}M`PVxvzmQelsrYD4<9*HlR*lJrWi4+q98hLp z;AK!|VEE6-z{tQL&cGnX%*=R~n}P8r1LHLY#>)mxjOPuS7|RwgGchtTao)Ve!r~X<3&A9)3uG!(xiC~G0~?zx6K(42BF08b|?Y;P#(^;s5{t?>Q%_bx!`ElfuaH|NsC043PL_q#`K9 P4H%#Rq5{cvkYE7-P~>?@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/213c0db54109bab83f9b1320851c51f98d013234 b/fuzz/corpora/client/213c0db54109bab83f9b1320851c51f98d013234 new file mode 100644 index 0000000000000000000000000000000000000000..6f0c509e6b31c3d3a11690afcca1c95788d1d97c GIT binary patch literal 2104 zcmeH{ze)o^5XNVA_BMC9f6)VjXe3}GslF>x3X&?VMFjIQ;kLNSH?R@%4A#DZ&*2-S z(vxfga;7+lL<8p64a+y*?6CWt2z)4_TM;zSZ#W0t5Cs(z6LpC~GUsGYNl#(*9jv@O ziDD=QViOF?ak+?@LyvHjr-+SAG$OP1xah_;w{InqJVM(^GB>xC5v&@T)}S1}UMq%G zS1PDx)y%b7)S7L{<(9ew`;A!kXun7N9p*ipAu=-QW!hU=hRZ6|+Ew*$D@F0=TO*#r zGEls)vZb@JsJ8K4Bxq4M&O1m}q0z$Q1Au;G(9|@*+cE_2k$nY?ue=Jt2W0f~bQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@f*Sm@7CxH&r*dB(Wsb zP|-jhB*-N!;h9>9lVsq7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7+65L)Uu|DQ3=@tjI0dIO^o~u22G4yOihf847<2*wMYsvI+oVx+3wvNy)XE6QM}2d zuF{TONjtlYA9Cd$)~o*Ex@O~q7`a(DpGb<;FTN)^@8}cOul7pO5@p`2J~Qo&=zlf6 z!XV1K zR@r|{_H^~vF0af=4^TP%tas{Rem(Hq?7RxFwQ`_Zct zC%o%Qg3sLkmr|VgNav>9PF?prpM51iofWd~XB58SxOw|e#(U>w@_S4#u5CVaG+E`c z>`_CtX6-9q&NWrG_{WE-)bX#0QF%Mj)M1Lim3>ND$@iSJb$2o`GcqtPZd`8AxWqt~ zjX6}7k420{CKPVJq~P+)b~>LZ%O`_UkhC&OocW=6*U$Z^RHj!Q-cyOYi9g_yR9O+Ce4JAv`L^RrXCE9Dpb(UsU2osx9* zgYQv67QOP#5p&lRSylub*U{{%u+y)+#OnKdZAa54wF2e*t@}K#sDJu%*mu|d_}bN0 z@wGqrJt9I{ge(5EPOe_2{C1ft*W1)NJvL2~l7CA`GCq_@{dFK|pTzqY&CVAlf6aSg z-xi#DagJ$8;tbPi2XtibZjIa1_430rGe@3-o5a@Lwm5q3O`+5=*_?eH$AA6bRnO#q zNlBgOVabMBAvR0?IHdggC!F*m^nRw%)G3FiZVTM)_ne!}Z=2Xy~2pLXy29jVGManEYi#RpT_R`PE?_v`ceeL8#pZL_F( z*Ligk`-QKi)!~QN`+wNC-tZo4*3XME*|VBgZJswz<*cK`GR99fMLDL4IcJ=ES6C_5 z{QK1O(_p3ao!@NttX|nXz5by1_&g!8dvBO|T#SBo+;7S__1;b+<+{YfD>A1p9n$S9 v`*T=+%du9u)n6ke-?wnIpZ%NuyYXK7{q+T=XFs`A+_~^vNA2sKwh%D@Z51a# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/216131af6426b00db9bbd2059f6b7585200b4fd7 b/fuzz/corpora/client/216131af6426b00db9bbd2059f6b7585200b4fd7 new file mode 100644 index 0000000000000000000000000000000000000000..e374bcca7c5ebb6e74c6a07939a1d8fb32047d59 GIT binary patch literal 6600 zcmeHM2~<;88on{z;U_hAGGjyhBrvEuPdH0?Ba^Ji8 zzW@LJ@6k~NnBxF2Ly@|QLDkSFK2?m>@ueFV)Kk+Qo6ELTl6~f^XaM6O1Asix20(-W z1OR0K=qQ5wTn^xT0nQuXJfQ&R1_emN5fq2ua3nBt%E7&GZVm;?6G@Ac?2`uN5rjYh zaHX*vBoR>;JdujCaWSSsMQk8TAv=eKa9PegA0F3O6KY^5$rP1Up&V{RD3`}{4fOL5 zN|GbXEe5C_w=}gxXWv?Sck}Ran<}+p?ow5^#`fY{C;XH9aVP?iJSVsssuNKc^*MMtp0+3I zX3-^C;T#QaVgtLw3!^u!$)1}Z z@sHL)9OV>QHs8JT5idqj-E?En_ZopO3^|ML9PZup7xDvV*Mlb_GNSP@8tGg|4Y_$m zxjG67v;{6KjkA4+NM*8~8`#{Pi|8l<@N>Wz=D=<|0EuImjAbEvy1#yyvFDyh979IR zwSFR#+P%kx5)c}WgV1ZkzRvMUM`KsL*huKS%xYs+uRPjMOIvTL)%#*gOi)YNkVl^G z`2}XBdOgUUpXj5xgOxG(M1L1gO*BO3MxAaoR= z11Z#t7bKDvqo|l(Xij*lK>`0tt7u4}#QNCPpsl+#J9FbY^hFkNoF;Yic2IBdHoZ{f zt{gzx0dfl<*P#Gug#u)Ycp;IPl>m~6GK-V!uUO)d*}^TLX;ibRuqvzKLq$LgTT&n+^@2P zMhyA=DGoQYHdPid3kkzedqRg``h#dY6I#q{rg#; zv_@z(OrdFELR(Q`X5WlSP_UXFE#uFGNHf0gFT4Q0H|?+4 z0cZLz9ai${(qMn;;}!KijgF$=GzEYX6sY*%Utg@`99(fv_3w`SrG%yn@&)PfqKUkH zP@K5MdyD`8asdF>PuofZK#C^s4z{YQDxz(94y}q47GlJS2#z$017^yysE&ZuVDg*pg%L$=JIj)2X-$hO}e4d}H!s!?lp?c^T{ ze|QQ01b^c1{{(;Wjm;dL>*~$Mi{cG#yu2ddC#>;auM?wCL7?&?4WQKCS4f`Sa=ElvHZOj$JmRWO@@XuisMr>_-C=A{??S!va<=ahL z3taHB)ae8!Rb`bVPfZb+0um^%(5iOFf2%2xM-U}UkwRWzBl_En-%efTTi{jIqw~X7T!BvDcHNMOQ1%NChpsIR9p4w(S_uv+}zYYq@4TpMz!x>X)eBE%&NT>FMiw&xX=aMlZhoLGzVg zHZS;2Jy@80VOUfXi(AvCrAv9hJC(g|S^lWC-|%ayZ?{WFAUkt^V`jzLv#TG=5m#53 zpL%9~#@SJ1lvi%=CF4|)Vv?ge;ySnDn-*P%A)~&)pG&SbKh;k4|H_Guf^mUHL&2CN z0-*kSR%?-Ud#qyKlFNvT>4?ky9?IEBwJop7do1-#%8Q@Sp63z2S@|Tr>xh-z5gxe4x>(q z(1A^|9(wd5D!KM}?cc)tJMQboZ0zf>X30?8PG|g-(-rDo9vj2iW?zu)7f_RzUaes> zC#y#ee7RWjzU$8!y84ewOt?zeN`{cGWKKnrUp~o}#EDLAs zS!R$I)AlUo+Bvj09nZ{wgaSlMTAE|MhyYOlP=Juf>e!UPO&QOA{EO~K|9`XlnP97= z-#F{Nqmb>r0|05ZPLMT*BPMI`1X=fnlQFXT%^F$Dq{&+Q8_9}_yD421Wa0tHz%&{_ zqN*mvhjwp-8+xYm5JOy*6dDv1WMOH$|0V4(z6-F{yVf5$rOM|UfdddD;EUXrkv zS$6VWjU5ls@RYPyq#tLsyM8D$KH%h6BsRcdjK4qt4 z*3$<#r1Nu9%K4UlD`!wodfOjFX7UFijs)5vobbvwKgWhmBpR2+$jT@1KTz)(QXs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/216b77a3718d7cafbfb04cfccab8a256c6fb844a b/fuzz/corpora/client/216b77a3718d7cafbfb04cfccab8a256c6fb844a new file mode 100644 index 0000000000000000000000000000000000000000..7d0a80a99af2e2945332a0198928892c8423ff15 GIT binary patch literal 544 zcma)(u}Z{15Qb-F*WBeUr${upCK^d~itwkfu&_}Mu8`xJ6h1%-TMKJB#K#c9!sLAb)!TClTO*__D*74c(XXJ%*TpPda9Xjh1KltKX!(afsRvo_st5p^gbGE7Vq z5(P@}OPhE~{7n3WF+XC=r&mfC;?lG%;W~}Yi^0R5X7tlGTt{VE`+_X>v22~D*8&dm zZF?b4H?VGlEw5|c6Xb|-47=hH5Dx*Yg&knEtPfbXP9@{~kip+FaVc{M;0XR#>%va6 zc!T0bvM&XX&xw`>ij#`BMcEaDvK6%pjYa>SJ){;iS8me`#r(43BF$F kDQ3*4tkj_V!}!e@W9+Be-5B#~?k1CuoAC1dz5fqB0an~*uK)l5 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2184025175502a407dc79f5ff391971d721d2daf b/fuzz/corpora/client/2184025175502a407dc79f5ff391971d721d2daf new file mode 100644 index 0000000000000000000000000000000000000000..9494084729a18ef4898cc459b4cba8655e3ee634 GIT binary patch literal 687 zcmWe*W@1{w#J~{F%yc`~gW>=G|Nj{n7}tn5PJN&>qk(Dt+38hVF0;OU|IG7^g4|h$ z|JfC*!j5q6*m(Cob5Pn7JEf&xerJkHs&Ff$nl8wwimvoVLVFbi{}CZ`l9 z8e5nc$cghBni*Ic85CcF*e)A-PrH=gJWV+$vREDotH|wBXg(TPThKK zae3^X6(zrRY*D!TV*SbR2j^Z?xTuR59sS>_VOi!I!Q~~Wy)ThBmi3N$#bPM~2?I_x z=1^H-7A6A*18xwLpM`~)iM;{Yr_AXL1}RJi-u8S##fyaWR!g2;eqe#jt4~?t1;LSz zFFrYY)3A5K*-agf(+zJW)y=uSAeHraVf$GoLyiObK3`_aUR`H;$+C@E$~wBQMfUu? z3${)D{}hs+t+H*D}-moP)TcDDMf#EDOgG3^WR(1a*8ADsm(r0eJCab@y zdOv64+AH^YW*n8#+MN=2VZBgAkW==Wb2}LmIpcom^rh?cY^eMa(_hNB@4u#`C;$2? z?Qh-B`RbZx=ZOeys?M?SQY}8K5Wl%xveDlAP@GmQLmJ3K_Fu)_u3ccSy}9Mw?2LC? w3(h^hubq|tKIN9yulLE^9jhYa=bt_B{M>!EHt(XU3Dp+(bXX#EJVn<50GYfCSpWb4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/21e10308553d8d955369fd1ecf5becad924a5255 b/fuzz/corpora/client/21e10308553d8d955369fd1ecf5becad924a5255 new file mode 100644 index 0000000000000000000000000000000000000000..66e4fec2e648d731b9ea8c06590073afcd380f96 GIT binary patch literal 112 zcmXxcITAon5CG90W8Ve%b|rEJfxAnbi-6zhtLjFT(}6=(9CbZE2%|Vjv%DxPK9hSr7z;;^@$! zASn1D++6(#xW$O)qph8x66d0J z*Xg5kkE$uH>Z0Kr%ZXKnwmx1l&NIsSQyg`YQHV2Tn^E)=&cB4ejW5F6MdD4NYVyr~ NWx?dBM)_YbeFOf(N6r8M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2227f323702493299c94088072489e780f82de5c b/fuzz/corpora/client/2227f323702493299c94088072489e780f82de5c new file mode 100644 index 0000000000000000000000000000000000000000..e8802334ed038c54b38610020be20a8bf2b6b626 GIT binary patch literal 544 zcmaJ;Jxjzu5S`gwbC%fv(> zQJ^(Hw}~gjPsEQH@&kr^dZiUZxil$DxK3m3VsO7}82zLT*U_0VzCxDxn3tgGwSfJ6 zLmuSG3YJA|d0h!lkR!%1jM%3+m%q+I6rLgzfD}(062pG)w*J* zS^PnBqqnCD+!`|_N+~W_X67nIKuW3iZ%T>l6o-f$okg=IFbh@Vb;uN=p6Mbu`#r&v o1mDa+GovQSimb1>fcIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945QVBIIroKvbG|{OfiN38$W%KfMgtBe1|}9J1_nlECkB?&ipI0#l%yEg z_Wlb9Z@v8UgN=KI=9ziMTLRb)zX&M)diGlA4f`9xf4tOcIVauI+0nP_FuzBQ$F#>1 ze`2`)-8NlpYG4d@q7*+P<9`+wW+rA117SAiP+2_|9sw@4Mg}%UR@QcAMgtx;=1@jq zkRm1n27?9$1~vu`28RD^!c30ZhQbVlt>gZ8+W=ynHG8Nm*g6I{fJD&w4L9xr0JFJw AAOHXW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/222d0aa90f89ade90ede1c603f476c3668d5c700 b/fuzz/corpora/client/222d0aa90f89ade90ede1c603f476c3668d5c700 new file mode 100644 index 0000000000000000000000000000000000000000..b261bf439440bf036d9a818c848136f7674e8622 GIT binary patch literal 3724 zcmeHKdr(tX8b9}*BnSxsj0PwYAb_Y9IZ>h@B0`K%<)xH@z=|LNvGR%mp%iT{sis*h zECqFWNd>jKKzK-8UO`c+U_nbMBW1ONYbhY278MK(*$K8Cbln}-ZM(BGJ^y|8o|*6Q z`+eW-w`~h$VKo?j7 zpvC|OfFS@(2;oI4fXx6l0$7I#Sc?d}uo&VPj%$Nj1-mYYbixAZQnZ&G@HjB8i(ynU zKzt4rX;Yv-iNe5L{W%O|pfTn!bo}CC1h#&nFp+>`fy^`?br?o(#fk*NSb@kqAUYx{ zTC~U9SCnGzDT+WWLtV~FvWvLVVvZ|~Q zR$lKNW9I&nTgFALcgT-j*uh3go6d~kO@W!iN0LzxXL=FILn2w=QFYw9rDNE&!X)~; z^>Z`gC-kHn60X#znm>7a_{x<{`$T?U^i4{A2 z`gUi+$eiB3sh#(EC(RnUUzVr0wC=F_%CwcUF#XN$N1a59#3%F}t9^Q9Ay)VP#9f!8 z->qaX*>TJ5P1`ygVgM@TTcz&L!S?#>AZF2zrg6(4krBi&^=vGuGgx9^ZCkp0F0Nqawrizj zVdK1k_J$O*;wf7rWpG6J*AKi}4M@xO)&v%o2_2JtFE3rZKY6WPN*CE{vRq13FO0X0 zt5te*+x#$f(W|~WH0>{|L(?YoJObaAFp{S}{3P|H<-L>EI`;$x8Ec5_9g{}JSig}# zbv|5abbm0Ncm0#cv4buL`~+VXa7AH9xrfg$HN9E8tx-1gU|^*y?LsxPqR*kVb0p!7 z&rNqLrCs&v%lmO372Af^FRILYdrj%ox(L-YBYe>R+vw%FIW4)0%?;k)Qz_mG$I4O1 zvwmJ`yOLUuZCbtx*@}FV$pC%D@hdi-PwgH=-<4l)y=R#bbA>ya=m&&{^W1wN^Z@@ZvI$K|Bh=TCmh50!Cf%{ZtVj{ z7q!vyCEsBHXaS%-XIeAb0RU8hDF9Xjuu4Q=Wr)D$Kbz_p{z3yGI){dIC@`QAGN5oz z*pFlRRU*^>pG4-!S;gU^<@TH)LtV6TmibdA{-hr>5g(hKt7h#!e>VU1=* z%$L@#Pq>-e<7DW)gnKxom|MN7dbDS4qTQX>su=w3jxP4{UMffbu9u#H^WN#s8g{A0 z`-b$v?9{Q3-w~=t#)}rG_u52GD#H0}K(Fw|H+&VprIQuFZ@HP-llJ!m%iIl^EN=ec zrmY5_-F-CBX)+wXHGW~iUa)aZrAvXs?$8t*j;pbfH;~cHRyv#&j|h)_k^P=v`igotjL^;;G3lpx^sCwjqgl0WLEeQfmZt*C%j1PE^nUHg?QOg5Ys4m3n{n5~gOTbz zO3t}`n+JWi7&_T;Op}rVTY4*c&O|K^j=VgklYOZ7&(eoDv;bI%FY+$9biJUjn01D8 mj37liGa-8M$@gEBPEP-);$eCJI$4cczL0Ra>{-{BJ^BZ1MOpv= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22337305a609ca7b0c89beaffc185b26999f97ba b/fuzz/corpora/client/22337305a609ca7b0c89beaffc185b26999f97ba new file mode 100644 index 0000000000000000000000000000000000000000..850f412063d8f8e2fc739bb35522c9b299c74236 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W?DYoKdTVo+jWsAwP$ z666w=@XRYQD9SS^Q3%gWNzW`PRxl_rQ1B^9F_07IH9!VvTxwaUJhZHdgIM z76xVJ#x@2PM(2wbGnEQfa5kKHy)b{_vXX5TQ(70N-0XZT@MB3`8aqF?Zr(~^p_Rv& z*1pt;-Sp?+W!A!2VW&AFkKa6*y+?>iW;Nq_E+2NgwA_84SJ%HhX;PkcjV+$lXUo^W z_e0-5lV?A3`+a-4UB#TDja#|amo9%e<7o9;`PXcZ%pM#%m2+a@Q3(Of#f{4i8kZQz zvN4Cs^0A1qh|Ji!?B#5?x*rP-6bmmKVN zl=FbB6=q>IU}j`QP5{h}Jq*YZH^4xQnVDf54+Fy{W(HXWU75@apAXr(znKvG>&2$? zzk{5nuuiw;D>JxNclVpU0S6m1Lzh8gJChUR?31dKEV39b-E%8%R+s%<{>LX=>t(j{ zI)0NWP5*x9FPJB=@zjeR@b3Gn`1QZ@f2m?XvcXwqJ5)9|)evbMM%kd5q1raX0om{@|FHRI*OfZs(Nfyv*e$J_M8ogH?)q<7O3Q5U|7t|Ai>DM#>^l= G*jfO)rn@iz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/224f0e8804f38443b6db6221dcd9a318c6895162 b/fuzz/corpora/client/224f0e8804f38443b6db6221dcd9a318c6895162 new file mode 100644 index 0000000000000000000000000000000000000000..6fef118c20d00576e367eb8a2fb31066cf5e096b GIT binary patch literal 2251 zcmd6pc~H}58pnS}5+X?uisdMTdy(~k9|<6*vk9`Wh*Deuk#dAU)mR{0MlqmC1VpUi z46H(eSPv>7$0CO!s00G#SnvQ9QjP`X2oxfMAf%JscGq@xX8+ll?)SfE=6&aVp6B~M zpLw)k1ltAyfDa4@yz%-xE5Uu?tjhbotUZ zr&&B`&kB0L?trHM$$a_gUc-)U-^3K%8VnLUg*(QEhE>+ft6n#p_&)wY8l!)qbWaBT zgm;iJz1G|LG_6`bEgqalJ`W(%TI5m2y`S28rfq-x?y#YmiFn4{##67>GUfn(XHu!) z0-N@#WoV((;+TGZ`7|L3DxaJXj!?7qt&VZDwm%X$kuDk?%LvqVey{me!B+jwUh=m& z#&@)%LV#T_Y%aL>>mMP7-fgd3CuQc4zSU?n)pcM{f2v3U5rIiS9RRX3Y6|%I_0|N~ zz_W4xq$IO|*vr7FL0k}Ek`4vcG(Qfb<5sSZ%4SZL=}^LJUV7ckrdN^K-?vmmc53a<*1`n*K0W%NLL4J;%sY2C`LscXdr_jJ-4&))U(@^>N6J&VA*bC? zz(#JrO)SfiMIWi`2$b`RiU%4%nMH+ul%+?RC`k@@%&Dy<2Yx z$7xNU&fV^37k9{`*)&!+M7K<_Nz#3ruTC3SAFtmkjHpWKKELsFAbj8Gn;R1XNl;-M z^LQg`f2L=pKwK=`0m2WOVj5MWMH8=3*hS%Hy|V6m5ufz3I+7mb?kxgsg6&R3*vVOh|xbyE65`1VPP96TMCxbr~ zRPN-j-Wa|coY-@Xi0C1B4D3rZMWGRx3n~ztGTMwn!H~+Y#}?*rfM3k$Zy*3{K)7Hn z!UYYKa6$ezaQP2B;)p(m7KjF5&es6KNr(OqngA&Y_;2qtmEM6M@{xBS=Hu*f%Itr8 z@9+ThClL6VQ{^iM50%{WynJWK&uFWQ^TJ?*nAfwDoL4$(N7)iiUhB#!>M^^r`+btt zIGv797<|X6hALWViBG;ac=l{Pf@VfuG7M3P`dbP;!q-LinY`9tGx&^uhi!p3o;fm^ z!5X`f{!%{wCYHEx=&D`$Yg?qO)7!%_?fiY!DsGM08m$joy0=;~zSh8aSr@_|1o-R)1resbvk|~5fjCL=N&9>N}x-D$1Xj!ovg;Oa!#U<}gNOOxE z-s24?J+J8UIH%eV_bne8p~aULcu88k>NdHj`NQh@)$_-x_B4wx@_()y03i^_w|!)g zUAIOq=KFNXyPI33ziU~onomx5ADjNm+HyX<oFV-roK-lm rwW8O+0?Rm4)pWAf=^{Ts#-BSmvttU<|L0oquOIV|CF3W7O7{E+^Eqbx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2253ca39ba7a616201239001282186957d3d6302 b/fuzz/corpora/client/2253ca39ba7a616201239001282186957d3d6302 new file mode 100644 index 0000000000000000000000000000000000000000..2950593166948da69b442195691463a770ffe812 GIT binary patch literal 2101 zcmeH{F>b;@5Jms&td}_UVj-khC;_EJRG)$p2~p8fI7Lo_x9~Y4dv~q<8VG z+EjZll0@KOp3yrkEK_&%nB@MseH$N&HU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/225640aa4c4c9c07efb846d1e3a899eafa3f5fd5 b/fuzz/corpora/client/225640aa4c4c9c07efb846d1e3a899eafa3f5fd5 new file mode 100644 index 0000000000000000000000000000000000000000..607541e4106a5a2166ab5e69e3fb2f9555b27298 GIT binary patch literal 537 zcmWe*W@h4HVqgeoW{ya=-?VJS2A$2Cxo>AnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JAVPT7{e$!WI!PT3JM6RP(?_FDoj*_p$Lj<Jcm$Fm%H!gOP+zmqHPrQ&N`(>uJs^sYGoX#eh#5{DH!1|OD1n0R z6{`?QWnx7F-JcCDOsF^q$Jws93kR~QDI5-%$(Ke#6=FRx zPlO0C6*37x6{3r(5CohL+;zY~fkZR~n(VHyc6wZydu^Gu$k0=budL5)xmEFlI?i;9 zm2j83+@pRYi&}SOfKD;T9?taed!U;1Md`I;-s!5(S*6F0?_HkL(Wtm#aqO-KdkNu3 zVPnUtV)MlNqRHp_a*iH@#vbb!E9$#%JVM@=y(6wPDXl2!=9_j@UUw33MI?Ix4 zf3)v7DpT8V+T*91&P6c0;CNS2f@j~0X09tAywjoS`#44ZDN@esetXE)0~z;`$w$;5&q4;LH) zoLADz9>uE`UP&oHNDptkslE_do_W!=->;d>+_DbwuCvW?2`0{YR{s8(cP^Qszklu9 zsu%bAToQ__u@C(g_rpr;zE>JNv}NJFnaSrmi`H~u`TOww^KFI#7j(EirkYm-ghy_j zJtQs!4jZ<8*$zNZ5vP8ovq1pO(PR5l-XGo`d#~41ANP92dJhDk#ls^{D!Euy;vQ6+Tbj;b|kwxqHUevTmu@VfD

_-w{?H`h{p`=|0R^n3M}*f`S$ag2(xo{xUG{HW?0smhFR7ZmU{5*Q#oQm zYOU#YKkN70yq`Lg18FzxUS7)&)cKqD0Og>A`WWG-G7+fngKyUyt2UF(SQ#SMN~ zem<5|eYS0DnXhBRMUR-uHZ_BBjmk+cEF99)Pe`|Lxn7nn6OXV(`4lRES}KT|FBQT$wZq-CP304=f5Qrbbxk6vx;WeP9Fu8kSR}y z}7&LDy7(}zyf&W=oKD^v*_lzgXfkDg`Mw9nsW4Xi)l9&u>tmL0^*#74UXsrPgw z+n&^O`rA~!>yIoGb%EU`^lt}jvkor0UD}pbOO>wJi6vs5e;!Oov@-or>&^<^oO#o0 zZ_FOXU6=QPLBQs94TpBR-6mPSZIKhRHY%r?W^o`@ZWjIPE1q7j3F*18m;J(_RjB3p zF5_Bs+iK8#$^4$PnYF|i!+;wK00+Yw&a^b2C{~r}9n7RB`pt7Z+aDV1vvW<(358f# zbQtG>YI^{vzy^TvIm8&l(92|i{s_L1TB^1qb2JU= zjm*(nzA>@l@UVD%Hni7R$cEELEp)DcFP91EJ_4CS94_XEDFlC=r!|TO*^tA=p_68O z)+m}QbRA#*CaO6mWjjay4*cDi{NT*TKVS(6SknqQ^#pE{mQSimb1>fcIib|KJ!ZnnlFal4^Nd0n4rntl z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@iBOYj za%t<8Q2oa#23%~63=FL2Y+0C@3>pj@3>w(jw3>x_X1RcP3}Ap;Op17Q+BRU*AZF1= zUr+!y1VFsO!0;aoU_9)A86o`tCzNd{WGG<3$HpAW!X?b^nCchm<0Hn*%p}ajz!1pH i#9(M-WN2hy5GBrZ??GUvacA$7le5@O*?HKDB-sGNG-F%< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/228f0fc2f6ebef5b752289bebf3c43f7769bee14 b/fuzz/corpora/client/228f0fc2f6ebef5b752289bebf3c43f7769bee14 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/2298f0465b498aa5f397076e69dafc326859a9ac b/fuzz/corpora/client/2298f0465b498aa5f397076e69dafc326859a9ac new file mode 100644 index 0000000000000000000000000000000000000000..ad858c8bb61f46bcf661d352abc823bd1529b0a4 GIT binary patch literal 780 zcmWe*W@Zv*VqgelW@2Et_rSZ;ptD!waX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|O_=KL$ny5a4ED+{VDTnSpVG zK@;N|gC<7N1}H7ZoQO$cghB zni*Icnj4xL7?~JGiSrsDb7AU3S)l40=OdfQ$jZRn*vnwh*vZt`$jDLc8krF_!Cd$>)MZeyB zpQqV;Q$6kXwj@_22BvjyB@mRf35a$o1VL%n4HP%X?r6DSG@l6?40zg zq{srbIpqvqHmQE0J~{D~Ow2zx7#B+!NEmRkF^7l>voIMj7;v*OhsyG^urM>RE`lkOio?-D7~+7flNw7%WfMZ>$MRl&zgMCm3ucKg&pbl5f zuR6B66yBYBjervf*z%MdfY)gd(8vPw)!LV3Te{YKaY7YWSo_ipNti*9fq{VqlokND C)EF87 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22a79c24f2c99f2598f4338fc936227b912f6c8f b/fuzz/corpora/client/22a79c24f2c99f2598f4338fc936227b912f6c8f new file mode 100644 index 0000000000000000000000000000000000000000..696bd247b46c60e4b485c66065f740785cf8862c GIT binary patch literal 1335 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*-B(Wsb zP|-jhBwni!RkJ;2Dyz}&>h&tTBR$i>ve z$jI;?9sEQWutpVFj>2V-Md4xtX!@}NEbhPrTEVZ2;!P%XmF_g|+SQTtkSq7FUiA;x zH5(_yFc1R%@nI@;{A;ZKznvK5Fh$_XJ|(T>drsQAJDHdn|NmdyxZI#|iGeH|bEqsI zix`W@&)G}!&vq~f6mGwy;PT6MI-e-ZCxcRuv@}beK~4iy!PNvL1)iT4E^)^fZJ^YF z9Bo|C)R6~G9VG!JnZ*j=)X{{L{CL=yLq&yISPhsN8UG{4B{w)O85!(OHm?_A+9o#j z6npIi#_!J0PVKIgU+_m)VqbJh($x>XM+I5*$~Q;MWrPM&SA|_={v}r5-)lRXHmMaT z=WpE?Dl7Qu&tczP`{Qd@TgBJ@;P;3KX%VjY(>l3&ney9Zs$6eV=ad|-El&O|A<6hq zBK6mSqcu(MC5bakrybCdy}LDTPuI&2&&(Wo4sH@#ciZCV zxi^JU$7FN%bsYcoe^)(||0N}Lo`)qHW`)=+`QwoC>z{Dai_rU-MpLI8nz}7;x1Z#f zpX;{SZFpz7CD`}B{^G43anjpnvv(N>{0;#v7qcEpC7~3V1R-)^IKHbU$5OTNNeMCJ zR@4ep!v3JSnCHlP)LTpm?1qo&7j_9dArdCO4*qkuboC0V{105TIc!yCehP4qfJF8V O=%)I&pmkKQAo&HUF_`55 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22b27720ba0410cfd580a404de2c1c168817d0cf b/fuzz/corpora/client/22b27720ba0410cfd580a404de2c1c168817d0cf new file mode 100644 index 0000000000000000000000000000000000000000..2b7ddd08228f14babf7e132bda460dfcd6fd5e38 GIT binary patch literal 934 zcmd5(u}T9$6rA_o?!lQ`K~6SlVw7}NbA^Syf>?;nfrTJg_#3(@0v3LPDEK9Qm4bzG zk;6nz0~YGQ7VpjQW`>PM>?*Kh#w7r5fq*gaDiEL#L^HkULC>LQ&{IzIgcEtZHx+7* zm-b@F^6lxt^eKpV5AIhz=9$%wrIJ<2wb@Xtw0g4I;wWn(6@!oEJ2uJL<3>L$aG%E3 zhFoS-yYFn$-F$xWuyg~aYfT9Y{(k^%+C3ceh{Me4;i`*ny)(wBp~r5(c-1W^8bRqi jO@#A>{T}QeG>v9>4#4GMXTKkz{XVBoyAOQL{3_l6lF+2- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22c9ef74760d14162393993e91e41188d6b2d857 b/fuzz/corpora/client/22c9ef74760d14162393993e91e41188d6b2d857 new file mode 100644 index 0000000000000000000000000000000000000000..ea6520f16eaf3251c6ef98e8c25ae81f4bbb4dd4 GIT binary patch literal 903 zcmZ8gdq`7Z9Q}RwyZ5fWH?^&@EtwSMLcUo}=dvvs;E1Lwd`ff0mL00xW@g=vQ6 zP2dZJBC$j&lY4plOjIZ*@!&sr0CEli0`La_1pp`k6c}N#5HKGw3m6kC#Sts&tHKnb zC^R4Dc0$AI->ta$9cAndaOt@HX1R2tw;*QiUgDuq5l=eg8~Y|#)zEf zei;2g-qL-x>kIxQjsc7m2g48y~Sh&-YX*oGt#%?Yg-5f#rE0>MU=dudostW3xHCJa3+s=fjO8a`Exdj8kCnPUl6m}d^ z>s6uABbM%I71er2$F@*G`0}Gt?CVOdexO})#7ny}{&f0pXV3TBX1RIo`y#b5o$Sdz z*q@%?qX1)XDLCU70Q}0d%}5@F}G~WKG$Tow#lBdUQ?5q|I^%ZBrY$lE6Hp* b)S|!$Xo=@TFoMf8z$JjGeo!_3!N%}EGI%0) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22cae63d817a784b8b88ac75de1f8544a7df731b b/fuzz/corpora/client/22cae63d817a784b8b88ac75de1f8544a7df731b new file mode 100644 index 0000000000000000000000000000000000000000..98fb1062193f955b7cd6b83dbcbebe3ae349f817 GIT binary patch literal 112 zcmXxcITAon5CG90W8Ve#wM4EUaCeDINeK9zzN)TNIV{*!#ZudGJwFJeI7zd-;6}>2 hX}f+Hr+MLQpm+pf=I??^l`RHGX@%6tw={0n>kINN2s{7) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22e2d9ea68472124396ad6f84903072d19b2422f b/fuzz/corpora/client/22e2d9ea68472124396ad6f84903072d19b2422f new file mode 100644 index 0000000000000000000000000000000000000000..8a8c3f9dce6a4e56f3ab9f8c85a8a95f30193246 GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?B`o2YSCU$kms+9_o|%%KSyHSJP*SPjQ<7pJC(dhVW?*h$X<%Y(VPF{r z=2{q7K)En$LQ$;|<{;6UCPpQw2im^#GBPr*0AF*1UDMG9bIU?`mfy*-P`!c3e#$O?Bb+OA0Q(Y^U>yvV1Zq zWn>`Vx0jXzDji(dKWh`DQuEGq(z z>u7dW*y&eZV)gyKwxem2T7h!@)_opV)Ia?>?7M4!eC=wZ_*w=AkBE>K;fg=4ldG30 zzg?!v^)_`*k4;^2@^1-A#)lHAzYZkrlX(B4*?Gd`uX!)*+fq_5&M_@XoMAfcfR60l zt#Nz0UVeCH=E!q!li0f37Dvy$DU>=Uo3pRu_^Y4m6DXH^3EZHzC#AeAKhm>Fc zgp*!`-p@3eI_1#RO@X`po^!MLZL{3)&T>z%?|=QpTRq~~1GaS;&zAljF0gIU33Z>J f`X4f1ufK5gt#VKL`~Wd#W(F2M22h@6EUf_mo>)mJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/22ffba547c0342d412837bb27cdc2ac516b5b6dc b/fuzz/corpora/client/22ffba547c0342d412837bb27cdc2ac516b5b6dc new file mode 100644 index 0000000000000000000000000000000000000000..e9733cf4969647871b8748f35a59f8f5dbfd3a52 GIT binary patch literal 1778 zcmWe*W?%?pVqoxPW{Cc9qBQBJz~7_tev3^mED{P-nHgR6JF~wi%uMiq zyM0Dz$d$*TPyRnXIB~)M|NTYRK6uW{cG)bwZ)za}7Xt(9e?|sI1~Fy^rZjE_rX&WY zcm}2zgC?d3gC@p<3z(T0nV2{kesA#6TrDu0$AFiOQ>)FR?K>|cBP%O|fvX|60Vf-C zC<~h~lVhl%uz?_m!@Mq6X!KFF|aT(GchzUurP=c=QT7pFflSRGB7nTF^Hm;HI4I;-OtF%z}(o& zV9?mf)Y!;?0ytfl@BQe$|9M2U(q5Bw(^cE1END2eMZRoex|_iTftKw`as|p0i%z`E zt+Z+_Z{R;NRjl-=SE0{|Wc$URlILjoTmL$JurN=fRbzp=T&m1Ec4uAfzWnI76E^m& zSIJ%XQrwF5;QpO5>|i@J|1xke{AXoi7XMwpIKaTqK$eYJLY9w3jD@AU^y-?^9Q*j> zQ@8&L+n2Mv^j7P7aA3+Rvq%_-HHctUz{AEIDl5#wYQW6M_#er`>`WjJH!@hisK}jq z%{J@1u%wRkp^kM*tH1P`e61-=Kd*aH=Fs8xM=$qr#yl}u?J@C?{nT~Z?(haurJRuxUGV5yVuPxY1O z7Fsh$g}+5aDpXf~_lLQhn>b=3jZz!b#F!ZvSojzi7(|#E7#JDFm>HOFG=PJG2}EwV zeq)>MYTLbaTLPG#WR+Nmtq*Kpy)x!k|0!o?74w_3%Z)9j9(exa+4f0qVpte{Xfb`+ zpnUG20ne8$2Lf(x5@%*$kod6nPnqXYYpr>gguIQPwm$Hb5fOjvrZ4&$Bx|v1e!`7M z4*PFU5j-fy%*4-x&*Iiqc-tm!%nH`bB zLcu8vJps8oyLh+~Okw~3|7QcGvi}gkfRfrMC>*{JE*wAwi4-*p5;j3{$}4z5(gZ39 zQPa%~?Gwu`!_o~j)ue+85(`8@qKHTv7$r%nB1TCf4=tQz*5Qul;^Lh6;?$zD)FM3b zEYC+|NrF=3K@u^BLlOBg+g^fQ(j!+gCN7)k{3sL{Dys~stnMRMR=G|Nj{n7}tn5PJN&>qhW`z(e$b z|LlrYVMjQ3Y`lA)IVkOkozl`Tzc#=9+qn04*n)irxEL7t|1&Z$GB9v6FflTK05=0; z2?Jvx17n^+6JwS^VzHEggaIcT zbEvE^3zGqZ0XK-r&%(mY#NL4HQ|5FAgA^tMZ+kwW;zdGwt0m7aKd?aN)u$}+g5b!< z7oVKHY1ljA?52*#>4vwG>gHTukji?zu>CBPA;$rIpD#0IudXw@WZA|nWgXquB76Sc z1>2_ne+tRZR%k}ZX30Mb?Kv9~Z`cx@El|nBz;KqCK_ZbwtGa)ZjG?V&=`*)qlht2U zy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm_g_=elYf1c z_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuAr0gq`>*0|*DkQv-rRC-cE-D{ y1?L{$*Un0RpK?p<*ZXAdj#ZKI^Uof5dhR}3n|D#wglY@iI@rO^fDvNa!Tj3JLi78=iIuU5F-}IiLe3S0*E6Gyc-yx3-Cnj zQVg~Ty9m3$lAUA8Tpo%wv{Af;H^w8;fvt(Hm$)&m3yx=Ej7Fs3Fk#6|f*q0S^p-GB zW>W0^Y$m^&-}H3F>pI`ca17aKOu^wFWBh~K{f!IpcR+vJ`abRlc|1ZgnQ{RjrQw`w|Xdlu}A5rIb=iDW#NBN-3q3Qc5YM{;d!3 C0^m3R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2324f437d62c05cfa4d5c1cf6d48ed4686a3c8cc b/fuzz/corpora/client/2324f437d62c05cfa4d5c1cf6d48ed4686a3c8cc new file mode 100644 index 0000000000000000000000000000000000000000..823871b039df130e24f9bfec314ab24b8aca007b GIT binary patch literal 519 zcmWe*Uctn~#J~{F%*?>R@b3GnRRJs$eykB~oH6ymo3ly{(=S&|dHdd7^_k}z1-Y{h z|FbJrg&pDCvGMMG=Ag7Ec1laX{M!8XZ{yzIVGH&h;9_9l|If(4$ncAcfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys_85MW@S z;A3E5AScdiU|?WiXli0%YGGnw1mdcLM4-UcklTP0q=`+K$sp8F*gz1(;o#viP`EHh z7o;fFP|-jhB*?`hVPasIT4a!FpkR<`ppa=`0JkR6K$wjk>=GtMsFRo(gq59`KXu7uR!{xVS$<(~`{e1@o*!83=`JYH~_(qOpYuC}a)I3@nX|4GoPf Jjg6zkc>%eOhDQJZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/23363aa38c098a2e178b99faeb7ba645e6dd3eb7 b/fuzz/corpora/client/23363aa38c098a2e178b99faeb7ba645e6dd3eb7 new file mode 100644 index 0000000000000000000000000000000000000000..006e46cc1d1ea81a82afc1c64e1b52751fa60dab GIT binary patch literal 478 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&0Sv?$7#QX-Fo-cTGj{PXFt#!LhltY%KyAedc3xgNLHprcUZvz8TxH7^`EXQm z$_LBt=VHv5)#F&{GSojzi7{u6_832amZ$tn9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/23364c2e120d0aba88e57e87e17cd6b250147931 b/fuzz/corpora/client/23364c2e120d0aba88e57e87e17cd6b250147931 new file mode 100644 index 0000000000000000000000000000000000000000..dcf56935dee43ccd22ebc5c84eb9ebd25b14fc0a GIT binary patch literal 6637 zcmeHM3s6(X8s3wW1QG&>2>}H{cqkwOO9*X25hz-)1;rwQKtTv859MJ9N~(f{hlo(5 zig*F7EmTDi1m!729#W}VQGE1LA1I>;whE|RU%PABk@^A0GbGO~y7iVN+4GY39@^e;N_$gg&`0K%XZ2L+ zG9vXdd9A%+0_&uq?aF7f=+P}7Z**?u*ycawL|H!EGT6Fhav#UcZDmU77=yVQo_^mv|Z8H zi!aEFl(e~3BWpw(jzs^QR4Q3aEj_$Cq;H?T0|k4YiYGu6LBx|MOu!}_4;J;rgk{~Z z2_2%&S*X#JQleY*Je@VTbz@MQ$ra6}<{e$VqMbhX*+ov7O}1Gj#*PQ)#jIbMGpm62 z@3tWv3_eyngX^NLFuOQU zUpbLB*WE<>bpHWTxxCL>7I*u6I*I_i5|CgH?8F0*B*A2y39_r_oBNr&?uex^Y^GKh zD7L8EeN-d^q3JjXeb?^k8t-&CZuzrygszJw?aZ2GhX-isYixA;o^6T^Z7m=6&Nnza z*Rss8*Uo5R^=F!QeR~^++RD0A^gk7UFuYak_RI6UgFB7}&|d6EHXk#iVSfNZM-e)h zgnH?KMA8BjmC_5%jZ8Bx6kKW(4=b129l0F3d8bZSUVNvK*gBrmtYy^!8jN437mD0g z07wTwZUE#e6e4X%SEt=(0op@Fe5=cv2X8} zZrsu}MgRbL0D!9}9VP(q@gD{NU=oSm9E#P|)kKGiTv|0JBFv1#+Yn_I#pOivxEy~| z4sQcofo*n7ydzu&9f){$Ehd1ApcPTxn1~PvayW!;63pjEMp>KTga`s^6@E^fGaIpw z-fC)7U+*n)`-SJn{wg&(r8b}@)#4sGtl4zSi)F=SyL}ir9rx$ZFl(~7s@FgSIRlZ`*^%K z71l(k%Gq+JPUCc`_4+Y(U24X*BZAN%SN#j!=~>NsJ>RniR_>=cmPQQnv*om!-vBS z+o$dD&GG`rX)}g9UYwR=k$PWGg2UxKgW)~4$!^>$d6sVCJEaym+L(@XL$8$*kV;wN9K>?(@7cy9;uT=5Q~ z_J+L|s84H&jXx=5Cs`zqd34d$Pym>>x^MeeK3>eWD>psT@MY;f(xBQ2yVddUf5*AS zs8=O)Vx8=UA3TdrsXJQt&&Yw!y9TlA`aA7R~vi{)%_D$EHCuFcP= z(Y9C0?o|L^Ezr5^@k^$G(SuS8t|~TCk;n5wAES!F^~#G^uWKiJRz$AJ*%x`>;mn22 zycr9d88pbWg-wNCF75ZSXl6V@A)-53zhec95K#tDh>#`e?3KX1(ti8#|5qYSkX2Tc zoc7yR#PZt)z_etI<-A7L-H~LBtbuQhtmTu*TK5`RXH831R9bQwpdbqmK&B)WAkoz` z#-GGoQ|F`oso5jK^=5ccs zRgK-Zlb)s$v8-?FT?PCtyX>F5Y)M+3PxSgoqCRH%@i%pUyk)ihM7-((4H3|(KCAkK z&pO3iovcBoI;WGY))`!p8O;k+V4bvCW^t}^ZskliZvR9v+e&=mzeq8^SrQ&s%zu+4 zj3wS;-hj$C*UG3WX@$M3KV@ZL{?rFJr0a81>ev2w(CcG~?3PFwJcmN$LdPVI@*tPZbcF(@GlZD>{m*-1zcvwSQ=75^Z?cIe zc^gXcUv+jDytk3StY**$7og{p7K4i6qzpUwzZ^0#_@^lsJ mKYuW&r&Cq2MM1zvi7KE2rvMc8abOnlnH{&X*m3Wyzvd3ax?W@e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/234563e2eca970c4be23379a80a2da552c43e356 b/fuzz/corpora/client/234563e2eca970c4be23379a80a2da552c43e356 new file mode 100644 index 0000000000000000000000000000000000000000..d5ce78983e32422f6f119f29e07d6eb92dd4b723 GIT binary patch literal 16645 zcmeHO2~-o;8oo1=1Oj1+!GOg;02M@*8x|E&*+jr1;u1lmDoa#aL6$(JC_+R;YTYW@ zBWP*C9R*QvLqvT%aYO6YTD30E1+66d@^v7>YoY4la^U zq|>x)v;FIbP!Qz#-~6Q3L%dLnfQq|Lx*e&AF2B zG>p%2psidq1}P8)AOu6@7uyE@{q3TL z1%QEM`gH+{KmY*H1z0-3(g0EgMaXU_LM$Znk3gtLquXZtXE*5~h%OaCCa>Lxw+{oT zCs`CUX**3zz=+ok8cJ@V%O9QjqvBg3RDflE2VmwxG&56S%>Ejn_!|^)pea7Fd=878 zSY7Csr%%Nh*1b3Z!jQ1zByGDtR}g4&|Pf*b| z#C;CA<<)QB@>;cTc@-42+`mz>yzhjUf`ZH{j)n!T@vzzux^-)O;uQU<9!Kfd zXAIbJAoDotmAqi8IH{VqD}8jss4>Rwjyz6EO5cf7k2C@xmO@Dm|D$vUfYKO=#bUKD zOgs!i@#OKn(hW+&dp%g@>bb)3T(zZb)F0mc?DwD;0+6E24KTA<;?(F<*c78z`Rit$ z%sD?LVb>Y%u;wAF^t)4@!erc-SyAHPjEpuL{1i~^2YoRh@e*k))Qd0k5?MN9XT}Qb z#|k5a0@6#=VVMNP2?dF90wFgfCVE8#d3_Uupv>RH<&O4?xXDQO;bNkr7RP(|Xdz0#k(UIpLkE~@<9KPNWx~3%2ZC3CR zyS}-zs37$Wb>!=f9SX@)~uHK->0p& zda%B?&I3WgqQRo&QLjyUAlFR<%{7tLCXX8C`JDd#d0c}>_E^C$1+Kz~A6!?~*m15@ zOsdMg`}lT$FUG-g_O?p{YwPbPeD-h7jOv^t&Emat(NSkCtr^#aWvj;xE^hIRZhpgx zY~Wvwamrh9D6ew#zMwn0w4h42vWIRv$Bq;`7FGC9(h9E3bEg0Kf`UsI@8^BF6Sv!3py9sE^y)qLmdmXI54V+;W9<=a;xDjy7X z@ho@PP_wvnCH=W^ndi970qdeJo9*vTy^1&Te08faIj3r4)o<}nu3ocFpYr&sr@a;< zbjPya^KZw6Rm@F~O7q{eI(quvq9uFGz4TYz)dkCKEv|+9xy-untx{(}cf6-9AY5Ay)u5y9V!*bmATT2>dk0tMKRQ_DBNc7T%e1SvlDcME-=hk zk2e5TSmhgaWIaL=VyU?FaPL!u7yu|jbWnT^ssL3v?|Rg&ce)uV9@%($>x6H8H|&4n zcYq$6X1U*W+p6AuR}^N{>@-hVHf=cXv|+<8OS5>ZWr=lnV^assZ^|(ER~|dLc0@v8 zU6e=B)2IU5QLCGeA54g|nQv2QZ6@fsS?m17nf5*p`YqkQsI=GjquC9$%|pF*_uM9M zHw`^>aodH>({i3jw1zAYB6P;L$>&RsYgg-=3wAY+ub#0X`SxPzYw+#6=a=3N-_WfMy#tYUE#q1EkTarED=;%WJ@$*3QU{7Pp&7v`~t{9Mv!VwvBXS;hIUZ``Y^`#fDZ_Qa(((Mb_E>@J$^vGv!&1y(l$n)CaTIB&(y< z%3j;Qlf9<4l4xB*X}*oU9_skXUVjYsdeC2OuU(v+*ce9gp54<|E@Ura&h&jW`9+`JId~Zg@))pD=$qx1GgYwCV1+F-}WxvUnhh+?Yzw{a4)+kFlVJ z4uI-1LNw6lWF&*na`VgcbN%aOL^RGH?2$0{O{IeAHB0vXn*9qp>^nihF@?o_s_eH5 zn~FrG`l}al=M4AkzrArvvd@C>rJID4rWLN`@j;Da>$k$N!@2-F0I({6?SUe!0*cTz zq;pVFX$cTKqEaRz)i~HTWXR^C5VDP6nS|jXTV3mrjc~C0!vW9@x;PJnZn%Tp9}a|l ziBqvyO*d^uh5{WEAuBO1AWp#NFqI=ijh;9eK7TOGRnrrnV<`V++#7BANta-R^eI=x z1XG|G(2K>L2{fd3zPo#sO6n?ciZK?siFjyFq#BDR6@6NiZsGcO52J22b z2xQomJ8Nj_Oyz){&tWPD^kZ5F^uoh)l3E4yXXF9BdzS_DJ)XVVrX0|lR_1HvItQx@ z=rP2O0T3GuaJcq8V@@|78sc|<=@-onr^;WC@m@h)<*uJH>G$+2FFb~6YtzVK_~`Ji zFZQnYcMxc5_o4b5`+C)13J^$dsU=mbg~CfPWY5DX(O7{!PP)n21BOWegn~pUaN!2S zRBj+7cxrVm$!GmnEN&r=iOj47*8w2971N~$?Vxp!N>rel?5ZRmifCcpfI>W6HH++| z^c0Baj$0!G0A8y^>P{Iu7mJLkEGz7ybZg;9)Ju08)^(N-CgNvO0aHMWzEo|`%F?M&a zjGE-Bjn18Y>7H4{gj^r*)0I2>+{)`!^%bM4=rd?Sj6a7(K_QT(QZZC31L{aq`Vf?ue20 z4%siqGbYTcJri-&ZhlKsYUxp1@kj;$ak#?$YUo7kL)34|{YHmZ2ewRj)Gfc;7qhRO z2|8nQ(&9iLLlYDO!|@)YPY#_@_+n$K<1X>E$xjZ|xu;(`xg|sJ`H2c^Q!%q_ILZzA z<0)-ez(U_NAAV>!H@SRmPu0(Jv3^aCdS{_n63~rEIwJ_AXv?xEuJ|=`iUYKRwi!06 z;;a_N5;n%LRRd+Gkq9GNwfXykjbSJY1zhl;-MPB?(^l=< zNwQO_(|jjP58LXp^lr+|+>&SB_a9~@PJbzKF)O{3%P4-7^CIq2DSwy#nE5A|-)ySi zVOeZ3+xTw7^0daq;}e_jH?8eE@1ph8*OigJmX8y+=?4uz8$YJrEX4QFl_eME{3qMN zkI6Q3&0o2H;{@iP&u-V7-iw?N->2YfFk*0-N5Me5$*CyTBu3PWG__D=FmUQO=T(Nw zv2#yMt1}CGMu%qY8|>u1HT397m!?>=hfAZo=Tr zBh`5Axw{9yDKSpinY_TiK zd<-)mC^6h^u79Fbh+xRu{25oN971-f64}+qFBss$OuWCSRH9X9d9)fMiB^Gfw8|z*&@@D=lKh{fPh6CUQY0z=5~321=(m*) zQlDT{7p)GI2Crl{Dr5{xyOZ5?GH*nJGKf3^HnJlCfGq&YSQ~>KDWwKf2AfamjXRR< z4>mv*lCA0oTN6QTAxkLxz2Q@6Y7)w1`dQw3$eaImI9j!BH~l=V*w0m&o$JE%vtqRR z;m9;i8Lsz5ri~z?)y`(La5C+~C6E8{WVE8-2IOUpMjlhLx`RZWTd&H}F-#_^f- zKM7m>pd+eTny8gkw`f$j7V0vBauw<)Q=xncg|A$}qfy~f)Rs~u(=b~IDRGebK|OuN ziU4ULvebK#(t};(%lvI&uIbGcyfiZBs_B-0IsoQN(({uJ4>tfp2c9YHA&Jtu$*xNd@DfN#ZMzF}btCQxQzhU6l>3mT4|P~N z(nkcmkLpq=`R1~(zD7U0Ne{!bL1fFfhEh?enx_!Ey+hnNi17l%yLWY%k3~M#Ek4#R>&i?emxT ze&q_XM?IQ+$EbYo0KS_{Vb3zuZ|jrg8^K7t>&R+%vYWRgi%Cc_`EsZui^)1N6|z{m zIlTSB#*555&RwXjW|ngoM+okM1B+oMp65{7eWa1QP@h#vmh7*NBd78Mp%r%_>-Q6P eL4b{6Dx1B~f#B@y{rbx^7R3Po6bkAHfd2tt<^>A? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/23ab1f6a342477a8dd83c117dbfbdea0df1638ed b/fuzz/corpora/client/23ab1f6a342477a8dd83c117dbfbdea0df1638ed new file mode 100644 index 0000000000000000000000000000000000000000..0bd3276555719aa69c187768943e9d85db6389f6 GIT binary patch literal 3108 zcmeHJdr(tX8vo9{HwlD1z_0fgsOHg@*h%8cy z3K0<$-)2FA3cd$ueU#c&6kmW!m8#&ZidHQm*t>H>P}J>%Ap zd;E@=B*BLOP>^IpWz!AqZk0|@lp{@^?m6zzi^cKN)-TM{#wjC9x61>iFFjrGY`eW7 ztecap<|#BLx1Y6ayB~3PS(5hL`3`kkXx$h95R)YNlL?TuK%NG46{}DKR-uGal0cX+ zhGuMlF`MI%skr3fhOn311RJx-K#CF(G%XilGsZCDaWTdbqZodKd?>bIoLrtIW5(bJ zEXA=HD>0V(V=VQ-7+YKL8Lr%UysNY8c-OIvIh^t6U-*3(wur!i1H(u!7ylv5cq})B zQDW)9Fdd|2Otke73PerXsV8kB|uqNEJe`skKwXUPG@; z_A5=UI4-Ml>e3WXkbK?VJcFL{$hkmp=XPp6b0DrWdJ`IL3U|7c*GIc@J!XF;+(~{E z*7<{@cg`Tkx&B2_zv`NQsSP#@Ui2W-+C2)V#Qd!zYRxfS=LYTM%8MqQl{}5(Irr<& zzpZdv+$@Zr5a=7$_(W5Vqgr+l(a~E23Hdj}Wv+!5 zd))Si?2x#}=M7HpwCZs@wm*D{Y|n}{Z-P(d_^pb({8?~f;!_PFftuX6Y7v)b`RO|a zP=-e;ajeuICrN#9c)tR?L!ThL$2+0XR<+x~gc|j*zh3za()cWOuYqc^I{<-Cb5a<)sCX z2;jON06@?uQ;AuPGK01nknUMuXFPS-jT&pht@lW8PHBsI+)r0i+|Q3-Mf#A-e^h4> zN5*X3w&0|)+GXkdafdf=@V+GQZ{8Zf<6cV7Y+kmO6Eb&J>ZI|v2CKv;&n#@(W8Y01 zE#`kxl()~7j^cSLTym0bW?d^w9%sI3|GYU(v0l0JFL~{%h{@Rffc!jd@>M&lmMz`l z_MOY-AJ=jCE9$GGTFL?JNy9YiUuPcxpqCj}7|T|^;7w~WwYuE6@mdpG^=SFn!C|UV zt@q^0pc!RV>a51B@+|fK!suDC_Cr#rki^hPczZTTG)whZ-YgWH*}JO8rs{>5L_i6c zVaRQ;3){i6*lrkpQgz%0HNL3(dr5wiE|+1Lli(khB=w04R~bX~QQ3+4)ZU>3^2SK_ z2ZjKi{C$RQ5OGvoaDkJYhq|Ucyl^VXrnHxYng!uu*Pr>GGowbYIucw`9^;zm|DDsw zYz%-BCyz;LWcl_S%u*e;uZ~_}Tcfx({O8^?z9(x#lgr#fle>kA;JIp1V(+@mYxdbb z*=NUn5>cEpNwsNdkEIp5XBqLPF096~vm;~L<;}0Y?3j`n5OJm0Ic`be6-}L! z&+s?Dio!Yqe^ibw$p5zB=rIm+Gh9)S2oUR;L+fJk?ctCuL zpnrTHd_6aK*D3EJ-R&UhaF0pP^{MK(NDRzXD&1%O;0@Ty+w0jwxqXJ?wU?JvN$Odl zLBmpn;V%G3P@kxfn_j*a!7{lIq`YO><|eu1K|RjTh)tnx+FOV?YE->n8(%W~toi zi-yrM;|4R`${|}XOY7OU-f%IWz22EM=fE@ZA;*OE8{5+NdAwY{tuA0Aul0QK_7|lN zhfs#cqNdu9UmI-nwp`9yl(QNAcmuj>2iN7B6-mD{>iX~MGw;`npkEBpQUUx*~- AJ^%m! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/23d569d4e79fa8ffe7e63b2113d20d208d2a4727 b/fuzz/corpora/client/23d569d4e79fa8ffe7e63b2113d20d208d2a4727 new file mode 100644 index 0000000000000000000000000000000000000000..8af7051e161e80c9a78db4cb50964102f7129907 GIT binary patch literal 702 zcmWe*W@a#9Vqh>}X5Mpy;o_ZX|0Z01yNiK=CDP>*`wth>$fCJRF2s~PjHz;EIH1nJ zz`>x*z`!8Rz#zuV%#_B>z?8(m6wkmEW6;DDVbH{QZ~-$DBNG!R!|x3~daDIy^BC~5 zacZ@Bv}v_@FtV~T7`Pg88*s8QhqABsr2J#?5 zE*=R(q4%p-vM?|(FmOKa-286u{Aaxj6?{rk4CKUl4NVM8jEs#8Obtv7qQrR(%?(V9 zjG$bYHL=LntX_r18tv2q9tqDp9M&|>hq?bdFC!x(D+6<5FM~m2CsSi1!wu~d%Z$XB z85u;_7#IZVg&24kG#Ho|Bp~FJ1q}zb$d^q_cQd>p(6U`gu0VNW(TSJ2l~%3g4g5!@ zij`V#?b~cV=RoqO&h7`&9`B28L)~kk1(y)+s)+Vm-Kj zhs?TEYw3tXH`iTTmEQ4@iJ6gsadCiwpMfkJbEqsIix`VYcj?tNr#bfV$){}p6}B&D zdFidz_29siRc4Ve5NiS3sLb5Puv;QYD0G-krelFal4^Q=P|4rntl z@G>YfF#Km?VEq3-oPj}%nVF%On}I=#fkB;tf!l!7fQ^ai|35_p0GWCX$yDWypA$-* U+i{yJj?GjSCML%JNK#r103fn5Q2+n{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/23ecc4b75e83bdb7f46856961ab7dbad659a83b5 b/fuzz/corpora/client/23ecc4b75e83bdb7f46856961ab7dbad659a83b5 new file mode 100644 index 0000000000000000000000000000000000000000..e8af750c756af055b0fa68ab6a64a85c5e94388f GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rfDTyD1@MBm|NsAoC^&K~sk`Bh%tcKm zKaQ^SGbK#i`<7V?&sGZb;;8I1VY&N$s^sRgR?gA}+FZGx#F&{GESVS>OqrQQ>!x*z z^$6y>zOQ+}&2qM#PTBkKl;3mid#|u*EyDqA1_oXRWmyJ@H^9zkX1vSIz<85^ z@fri;WrHTh^9D_fWeb>@7@3$j8E*Qp-14m5|Js0)ja{qF+k z;dl{q|A(fzxq*jVpS12SONy&I_Ql8PC6i;Q;WG2L+1!6)gwtx+BSZY_ZA@-UHHqyy z9CKrd+Rt{51YVa}6P8*0&*pLPFzczj-f?AhZOV-@reeDjSt&vC+7i>N6?k?(6c4XT zjLj+M>^QLNrrRTqNB#>+o~|}N>!-)f&PAb>-$uU_8Z~oJ>;Fd_qQPjD0ea(xX zGG{c%T~?L6HT|d9^Mz?qJL>=Q=AYP_eQS+U;b$J_TLO|7E=|00gRSXhj*(PSlkUBT zhM8gRtGBdtTnd{!MQTZ}RgUURwTJe#>VuW<~}U IK2ZJu0M0Ht-v9sr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/24032cc6b7a36245cee0cc243b563f6d2d834ca8 b/fuzz/corpora/client/24032cc6b7a36245cee0cc243b563f6d2d834ca8 new file mode 100644 index 0000000000000000000000000000000000000000..f30062fca8f29b6496f09b2a17362afa4e61c7a8 GIT binary patch literal 3154 zcmb`Jd0bP+7RT?+O~RIhCCH|PB_ew=Hz5mDf=C5K1r#H%XhDpD1OtI2R1iTD5Ty!= zN6_{d%A=NNQE{~Uq?H4DBP$xjgCK2kKcatiyB1x>W z_fJ(x1eTj`O=%jBs^s#s}~{VJ(=Gvl%ZvnJyrQ8sSe$cUc|m?4rU0uAgq^PDgN zLNu^31T?TAP6NZx>5%RFJydW)SBT}Ob&g(l>x-I1juNV$4vlOt>b_j}wQi&JCWrX# zx>`Z|dM3H``&ag)*~o2YLEtTo@r2rc>w>QuCJL&K9Nn{WcVDOKBJIdk0UCz?Ccd-p zqsrNtHzl)bhIb!60xSeE2{-l3JM#!-{9dKFzbj;4?cVz}M7nv`$b$|}{h}v>dOf`j zZL8_qeQ1SQxYzYLj9mxTya+e>dD!=#KUTY1*LrV3rELwzxGT3+G`b0|7exw6a!T(7 ziFZ6?l?Jq*KegkSkfx-lnWsN4yL-Ol7(;#%to=Cl7_Poy!yx$#l-7Fib#j5-bN9o; zM{x=rozt5($J!T%zz|%iftLUc90Y8Mh|tyvkENcl$QHH}>LD^a>c`8N<-U4r4+&bsQxVOvYIhohyQ?^RrtkR67fP}?Jh2gh&9Dslw zX3_Chz#`isq=#rRyWyqe>rY;&>&~sSIUA*B0td{&4sQdj0EuYmPK5FBjdUCV2Kq!| zyqW~#Z~$N~G`uTtu5bc$95gll_jzP93(jb=;9!UwXheerqYnZ(+i zXZa(6H;fpYqTz+DuDf~53G*M;jy_yiWaMPJ@8cH@kFO8&(kmO0u@TzM*kf*o)MmF` znds2Y?3#NOYxEj{6ecpG;v+EYeC1!YzOUogTb(?$Ev_D^3!D)}=nk_bA z3${EE{`~A##9$?p#N-vmULo5Ev^gk)Z)^V z0hc_8R<)_Wtn7K^Yz< z-^ao<0Su|+AhCRLP!7uBaHA~A zY!=Il%ktu(-Y7rn@1)#cv8Bunzi~}>c##jWQq$WV9^8=c_uM+!W_w^(@2(5a^RGG# zMNPz#>scS>SE!64!i0yfYStAGJ^m=>;$1?vS#$J0zlPPpd|kw=xdY=xgR`1DbP;4- z$eV*JwVB^lY>;nj{2|=V1t1G<=_{AZwp97dKgJ^#e!Ily=PU z){(X}OxAy@QwkGx&`N6H;`>^YUdmr(G0E7N@Dt~gxw8x2_s(VsPQOup)+XDc@^^J26l?Y?0` z+n=knN&fk%kTPURd=x*#dhF2?ujlu2M^mzPH8gN;_I0j}qfB;^vrx9%z<2N9dILww zR^q`XrNi}snC$+7t&ToQ*C5@AcVpZbbA0QY401I$fDDcAG8`$fE5BMw;s8G!OTQKui z+P`(hN(6qd z9}?;lvQiEYG_O5+@>zC&zKikaPB)(BjGQ=HbgA_6LMx7W`H9lNJ&dr{=i36#TNFon zhCj>q%-$4v;^(254cDN8Z_G!{XK`*e23BS$T8h5EEOc-Gp+rzNZ~c`!S97dWT0;lA ze#|&--7eI&Jh>LlkGQ`kY^Uc$IGy_@ZlJC3u(vf-UySoEGNMfI8J)I-122~eio z)gH86YrXqkb0etUUD5O0Z~Io6f6IDog}AK1r`-RN?R%GhPLG?rt}OkL1<=Jbx<5?W z&_6b<{b8VfI->~(n`aM5#@w&f6#o>|O94zrb3)7S4vfK zMf!WS{Q-oi)zBw*&5}ZwSeWGjVvSnAV_5&vrIf6=p{A!@AK1Me9&QP}5x_tB4al_m zL74Negf@<8*~8$t%ET>as9ix5UVz1CvAJAt7Vu{Cy|`>IE}PBs;sTx*8|Cp?Y&Mq< h*nBnz@c1kqkHh`41U3J{0zvw>WC$EbDzfX_eg);DLeT&K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2431994e49cfbc09858c3723024a71348cd944c9 b/fuzz/corpora/client/2431994e49cfbc09858c3723024a71348cd944c9 new file mode 100644 index 0000000000000000000000000000000000000000..072855e6ef2c8bd1003c2af8449fb5409ab88b40 GIT binary patch literal 3208 zcmWe*Hej%1Vqh?3W;P%I7!E9CVBlp?W?=Zw$iT?JAkM%b#>~u=#?8Q##K08Kz!YQ9 z#1vuB#CUK4GZUi$6DPxOn2Ee>oLX%jZQpqr8Ch8w3|tMl4LI4DLs<-jnG6gJg$)G3 z93C#1dIJMPMFV*@=FkNOJQ4^&2v9IEFi_w(Fffo4=S7i2!z!=O_^A9;$?27Rcm2M}RqW?*DAU}okt5Jrpk1q}zb$d^q_cQd>o(6U`g zu0WYULWpPe+4A-8{m}Q%Me&1ehS23q(<5sTqrOO}AI9mNy{x#bpvj>Mx<(yb} zR6;;=apQ7>#wAFJV8+&EFK4^e{a9$ASa{hW&%ofZ!7+nUNFvBH$PqJ8Wm1@n!yhof z#K>?=Mw4r6Rl}PXA~u^EnG6{|#xpSd`2YVu1CfB;E-iQ8=hgKuPnwjcU1OuQuMmaV zOYxPS5oZ_G?5)sr4i7x-&cY=u;h9>9lVsq7a^$B4luGvWX=_gO2wDRqxXF)2kQ` zXd_BDF=j?+smS=yH|F-rBdd{WCE3n8+`Ou3(V$0$z;f-BAYOiV<@at}AwE9c0(bt;7^z*tGWey!~fAn%+XUr3m)gBWM*-u@k z?LJSnBHMqKz>=cB=f5-YY~bQp67}e5Nu8jqWkS|T`OMFH$!d4zz0a=VdKeNuV^z__ z3YI$g{#0LiZlN`ERQOv&q(XJ&cYm16xrrkt(kQh-4HUJjco-O#F*C?o`@RY0WQmd# zwatDjnZ@&7M}0b1;C%k;#`hQ03dnH$ie+fvI_D}e-K+d6)9!0OuN<2B&(Ue?uD@Q{ z`oEEi%faGJVp6TtXsSiDMId!K1Eelzh|oS^ve!kEqMp8n7!suFD5Y;>48)6)4Dqb4tF%F}z+V z9io&}v01c`U*P_{<5MNSr2BR%)L zcj6R#LBNVP-p_k UJ(Rg&aGG$w_K$Z{)EZxA09OEqSB+?G;Jt7ica0f6p1 z1Rwwy004#n7@`0a0s0t5Ri^+d5l~S;*aDS=6sW|6MHq^pC>a;N+GMqR$^%FvsoSJ2 zOnXg35DF1MUz`HfNf?hn(nWb(To-DqCK|dLJ`zcUSU~rU=Hph-Qf0(+r%xE=0%^2B zPWOnD3nfyKJb~`Rf~E#EoQ>lw7u=Z*S*#!f8tw#fmJ=KuK~Ok(srBPak*OMes$!}Xz_YAH1;ZHXiVBqw0#mtlv|ipq75X=gxu-TtAN zEHkd{fxbhibik6`89&`{9*Q9VDOMtjpc3(cCM1k!VntAGJ=vCocoEewgoN0Vh-9Lg z8VU_nueAv}P)o@pP(Ipc;phiMq8dUb1j8U`J3faNX=XyXJjRvDj9Djoe>8Okk|?H+ zuZItd!I#P>IU^I!e6dInEtlbp&qoi_iZ6*`O8Byvu^2T8`UJh)y6G>6IkT@$Pr5Nz zbE^-n{l^o=WD34d7sQc-?>jnTOv1rwT& zrDRk%4N^%Owj_jrv?QQJ1d>Ul2n7{EQ3zEoW&~?E3tDAZ_LxtE_#qz#U-A{x$Jc8# zAMxaZql^|D0-OTrrFY|%i!P+*BcwZ5UR0flD$6|Q((m0uVQdUR7SvhqbY4cB`>1U2 z(SjU`mG+)5UsgW3+2@>4T!p>qH*E_$Z1bH$=Z-ZK@6Aj(b-yUM8_U~`@A=Gf*l%GM z=N`?t+&4Tb(SBG|2<+Budbb&X#YOCfKqnnvEeE&F4|#und2mqkal^6^BdfO_nG&Om zgE4RVx=znN`AeJcn-J6c%a$zrB6`Zq9J@mz=ezkOx$SP1zwPT?+FXgx*S34u#B}PJ znONE*@%VON);!7??SWKv^7Hu})MIZIf^t9m4m4ioSz||*l>dZ^LL6tk2SmuU9kR#0a@9hY0q*M=J;OPVr&c!(aA^a6Bl}l$B>hyhPO`1)=K!T32kIp39?a*Kqb~5sLc4Hs)Go`Y(^`Dt|_< z(;K;N5n1Nn=#Ay&VaZh|I}%I192(EL#a46-SXo`7vC|6+hc&em(oLN&mu5>vW7wj2 z2o>Fv8Zm`awJ~3ql|KAEaV=Fl>1dMROx-pANp1ZP`*Z@Cv?e1HAgLhdKSd^J2W^UG z7tOSu@gArm7_x*Y{u&j5F!@rkj2R)17%eacUn+(MDmTvgF&(Qw&w1mUPDU1DeGCH}6aY4cHJ)f~IZ~`F)!dg!Px7AcaI!x% z&U0Jv&LeVBMA5f64^-I#Km(QlOz04O3`2jU0Q4+C%K=&jm1rqcqB&!2uMVzod$;%| zU3dc3Nop(y7S47Kf+>?4--9t|V&A!|R`T2<*AP{|~B$!@sji3IO>3pZ|$H zP$luvS&C1v7l?PN&)co@&8v3Jt)%^zWac+}R;P4lZMATfVJAbgj|;m7-0~iV>Zl8y zI$T@2Jabn$D|RW&&S(AQ*z&ddfnT?UI40M!TLGqkN-PN~(Vq7#rgOe$a^Dk)0Q$c# zRqHVwtpzp5bhMgRY@8@OEFQOqwkiuncgA}Qoh#tWqyoC9Kq?o7i}+!3!3RC9Vl>Et zY!(h3Rq|QIXfDuYV)}=$<~WsY8@mqtolL%cZ5ki`Heg_Bv@&_s-MM0y?%0a>oaV~! zS{DzNc$Q<2mzb-Ox8MGp8P2i(kr~H|*1g!~c~L(%&_3XKx_!#Vz+=Dmu3mQoWS!L;)SJp~tMV>R zl-A~4xXQC__&Lw5VCLFucdw@!#@6}wG~Y@*V%WgzsC{}P#D)7Hcxk5n+W;oJ_P?3vrawwW_T^LO!#C@-pxJjm{nUva@?g-^{4LNajIn5z6ZSTx0(fd@M{&&kc zmEiS(UeJ?7;F-_?oC7)IVjM;E?NuE2?hhO?S0;1x(j}0{RT^!SHKhWXBu>f~$e2<= zj6^1qOQZ=O^~oH7DHLG+J)LO(Mfy5vkaS8xZtNr1)Wjx-_g;F|Jjd)^Utg_%i>J$p zvoLAe&%D$>MbQSimb1>fcIib|KJ!ZnnlFal4^Nd0n4rntl z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zS7OpH+DnHkxcofue7D;m#|Q<7p}+xssdy!Gs-< znrG%2ZwX*K{34+E>)C6eH|%c&|M60*<(za+XGhpA|?X{g9bJZ c1`znqCd}jrA+-&K8OX8}WDYYkG;;0&07aU3PXGV_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/247cd277267ba1478413b17998ed45fb2c4be9fc b/fuzz/corpora/client/247cd277267ba1478413b17998ed45fb2c4be9fc new file mode 100644 index 0000000000000000000000000000000000000000..df48f720c10252e26de0b5bf3ba87877290f0a7d GIT binary patch literal 544 zcmbVIv1$TQ5S-n8d3x~-goD%O62o;#GgqXrun7oOVq@W7Sor}Keut1B$rr>T5U|L% zT)2ym!vhn@z$eX@(KCiRu0_CW^XFg z2*d)1t@7+tM*nvPgJa7twW?C5s2%*JM0w$QJGf{WGRjUXqD_ml=^~ zk1Hl8>ngrm-(b-EMOA!R66oS&LzQH0oNSD*Lp#7%?dtN^1?SAXEwdY!hHeX03R&(h Urw~^IiM#sw*Q9K-w(fuN4H`UMT>t<8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2488f7b0d46ba83bc224903cd4364e50559e8d86 b/fuzz/corpora/client/2488f7b0d46ba83bc224903cd4364e50559e8d86 new file mode 100644 index 0000000000000000000000000000000000000000..bf45e7ab62287e0e8aa215bc6d0e68a1b2b6d4e8 GIT binary patch literal 11927 zcmeHN3pkW%8-Bm}W`^X!M2oQ)nb>@N`xiGtV2#Qimk{vB(bt3{ito1 ztwc`c7?VRbTWv~*{cQ*3D$#DCvU2#F|N5Aj#jQRA>lb|MLifZF#x211^_$+AOOe% zKt&PUXOaNt1#lh!=LR`AXUIY752H8)ha-XEVq2H|*;!;LMINWw3!bS;8SWkVSW3d$L&uYETvXQi7~t6U1bN2C>*QCqHi=KXw?+ zo*hZEWqU&vc_{-UXv8pNKx1eGUF4+<7DFQjgFk%jW!O_M6Z6&h`$q@>jY$D8W*06d z2I%NEA7R}0;@LgBd}96Xl}Bs)tj>^}x2o3~7iP>)*mrnG-6_@0X+9qsT%O%kp{^35 zkrvwA9T;gEKd?jkY&tc(>7z}y&CKOFPnp>ZS7#1gsNWQ%9j|>@ONFI$TdpP(_=2Ub*N|K=MwiEoDLihO^d)ssiv~*R3+yW zWNS*t$C`Q}21UIm*AebkH?N z>+C$^676ntokf+OD&2MOt{-SA>5$R>eNARx-t!aE-MPBNS#;f2~ zC)fZsdYwq-N4p`zz<4nh?MBd;VaOj&dh)TPk~=&_QsMDNlgcztz8+HeyNN@H;-lM& zB4X$V0N<(W*KvmRRR&jIMQUG??e&a}6?rOB9}eHn%TqactJ(#5cq8MOgu-Cs*&LO1 z9ou59Z&K$e^(#m9?W2F(5~^N5DNOU@S_|^id#6o;oK@5aF-Iql`wLPyS0=Pah_wV>;2{W34Lm(;?7qhIy+%%C))OuJ_%A|;>~yDA9X5E*mD~C0Suq@K zn@XgtzgleX=WO3d57~cZ`kv~$a7fO*QU5q2L!!{LAwd%mXX# zDE?{}xrESoPAV@omM6^H2l$DbzsCpwAR7R1^`zx^2N)M7W6s8pVAYu%4waRaM9Z=) z*-B<`pguD+AWT1u#S9N+F+KH|p#g9emd2m-1le~Ozs2eAm>re{`L>&kWbIn=}G%cStcYOks!!+R2eje1*OtSl(m zVe;0viYwnOo1)D4s4d-8f=Yla#vsXr#Z7z2=3^l=Mc8 zuJ0Iqs}IOp6$SUR)2U|P6fAHpwmKM*n>F0=sJZ#$D7M4Jn=ie?JUbS(sZ`Oef^50$ zK}(u{yYHr7#M^F;`1V*HQLQn)a^i30fA}}*e+vH_|9c&9BJ#gi`Cn{96I1i5a+AS= zSlw&SFL5H{R(q_|jFK*J(|nv}Y`$;yHLm(X=A938=~ZJeCgv!N$sGq|2D82m{vq-D zhD{Z%v=u{U8MEZ@PhmI~*c$jC7_ei?318dfT1|NtIO4@AQvl3gyA*5$d1?~CL;#pw zu3qJW|5j}(cr=D*B?$n>LJVICCx_WzE@3m`^ z!Ru`~>3pyt)Fi_G+#;Q%h-LbbtpvN_6N#MC1tA*2WnAlPT2DtB?W)gsY|l6K*#1J= z+IejpC1NCg@75z4kB`ikc+AR9Uds8BIjk@jxu?Jys`KJ1^mN5qUf$au)U`apfpsO@ znC*GMcz@j@<=bWMHA&sQo$pzY>r1JHH{Wl%^vkAs-zf)h6VDCts-tnMTh+D5_t?dm zYnSGZn0pVsqR8lT!|MJpG(9Yj-jG@+8A7#bKw} z<=-@G*$(RW`u$vVx#_V+vd>rcR1}QiGg%ajA|e3lu4c3pn72jC~I2sK*-t8uz z4pZ9vQewB6wqaSplP_d;=Z9Uqx080RU?)*EVBZDG(`sVK(27qG&&x zc5}KI+4*GJPg$KoE@jbC%&pdWnclwDIjL2u7PB(CCBc^q)$Tg|oTjDopvaIVhpm+F z^gPc^r>uXY^wPB(S|yyzLe^#O4>|a7`jTb-v?a?l=wix}rA#AB_P2tEGOa&C4x&D} z6yYG!0CEtC(PM0q;U<9VQKgEYC#JKv?7o+VrPAw&ycEwgWI_ zksHP27r6n#B6m-S1XkpFzp)~>bbOIpGs7Ym<&zLvC`iWxkcPE30TNz0t-YE#7)Kn8 z`cCCcJm_^yP{;i#5>C|TdK>y&ViSl|?7XH=CQ>O1Hf&bVR75I=1jMCHngf_XqGeAHmDi0Kd%7Y1VgYmt)iCThj;)7{;!fEL|G}1JFi-7cBW82IeFJ*W| z1TG&{PK@g`Z!MaGt9?_g<{6yAzqOk8jJ2BokEiftq8n0h5DGLTkSqa(CVZ)~Y7j!9 zTl|6jqj1?BOw1v|Wz#A;M7Zqj=D+_AeH0Nc`>Xgzt+$qc6ydUW2A91_1;ASd%P<9i zpgDpyL<&OtWWK&uLXk<%>t6c_BNbE9y^ljWJ|iWaZSGs{0P0A;mpdZU$sHk%1lk}J zN`Kcw%Fv7J(bkuQDm^L+LDi^`867BM`PQXY|Cn$Ew<3j=eLhld*{owa7ME_?u=v=o zNwBmUCS>LtS?~+MKx80`jseNvczLpd4TP*v$TFhY!$_JfgczGY^O-_eikbYxp+K-Q zUT!#gH^wMB;X1~I(Wvq3B-aVDY!uO!1PBTcz{AQSfr8X{OhF1U1u1_^$80JE=}dw3 ssL}ZU2>XeB+y4&>nj4zf=K8XaE2J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/248bca85824864305865923052d8db04cb805d76 b/fuzz/corpora/client/248bca85824864305865923052d8db04cb805d76 new file mode 100644 index 0000000000000000000000000000000000000000..d587b360efb08a94a226cd57d9f3f4a08424c6d7 GIT binary patch literal 537 zcmWe*W@Zv*VqgelW-^v5m0wqOrmRT$aX$y9G9N{c4xi9KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1Hz3H0&zEH$oBcxXbA?4J opUc4gdfE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/24afe9d43d1337d271ffc1417af0158e3e49a810 b/fuzz/corpora/client/24afe9d43d1337d271ffc1417af0158e3e49a810 new file mode 100644 index 0000000000000000000000000000000000000000..779da788d0eab130d9a9cc52083ef39067ce1224 GIT binary patch literal 478 zcmd7ODGtJ56h-0ldJAPJ9T*-nC1C;82=<0T;Lxx*c7R0wgatIIB7FLYo9hy%2#%6P ziaXt;*B=biQI;3wcru;&e6d`uH``schdY#S!{7isfd{x`*A%-D{#D&#*eirvi>#UJ Q`@y+6_zjncGr*Ia4|v0a<^TWy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/24c95a6f842da0558659bca8d4d2c997e04f2189 b/fuzz/corpora/client/24c95a6f842da0558659bca8d4d2c997e04f2189 new file mode 100644 index 0000000000000000000000000000000000000000..89d1ae1d7de6cd4f00695ab7da38891b45c0a8d1 GIT binary patch literal 774 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZ)7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8MytcP&L3KblPB)<5s!S@OQ)Ti)&Uq1*X_TF(eptvt6`X^B#e_{$fQsz3LI75#ei zeV%6XP4%?j+mc+BJ`}Cv^K-jg5Ohv1-1X4i{%f_5+w|N8#pDcTPusg9Qt1_N#olb?l!nTd4)veUUi zPH$xB_}O4`>dHsyeT@rbQX*P*+Zb7|jW~JMOXn;jd}6Tm`CoezvRECyh}_JT-2GWn)F|_SLLK`K#&!mFUveO`-R@; z3X4=epI1$q&niCe%FBaQYs3q8wG@_ApEp{+YVMR9>-+c^7#KvDnHd-v#h95HhG7f} Vh%hklJl84C(04zxG4sr79RTPN5*h#i literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/24daadcb4c57102c6045a6aec88d96ff3e17313c b/fuzz/corpora/client/24daadcb4c57102c6045a6aec88d96ff3e17313c new file mode 100644 index 0000000000000000000000000000000000000000..c3bf2ef23ac310ebeb6ed62033c0c1d3728a3283 GIT binary patch literal 717 zcmWe*W@fNtVqh?3X4YD{t?kmgJu|bj?#RSP8Xcdvl>IgX1Tbzp8g0P9V9UV3%b?7_ z@Sl-^k%2*+fkBL!nJJB%fhmcBDV~8T#-NEQ!k~%q-~whQMkXdshTj`}^i~VZ<}u)9 zIRo2mZTag8pwkL zxp*Wz^GZ^S@={9_!ZTCSGfRpU0!k_sd`dhGs4~sy%e`%J-B~|%(_%->4-x&*Iiqc-tm!% zS&@Npae#rJfh-$ys4O3g7>h`E>D4u-Irj0%r*8ihwl8OS>8;lF;J}nsW|1%uYrw96 z2c%z^h1GzWk?}vWhgm@$Ze*~2QIR|Knr+s1VM!h7LmlgsR)6U=`dU+%eqQ&Y%%Q{W zk6!NUjCo?R+GFA&`>E@+-RG%RWc$w&SW@)&{C6gv4O|>cq8>dhsS}j7OvpMZpZQrY zS?$ie_t{lk4@1IdtSXvV!BQvRpXw{mEwpBi3V(};RH&}}oDXw3H*v&78l^UY>$p8-~#))|JV8cQj!2SMP*hS@S+BZ5O`S~9&;-B~0Fnd(5CB>L0A&Dx3INJ5 z3YNhGSQ@}m0EQ6`N`i2p(fqYQ6bV$sP8nopg^B|oD79Fh$J|6@q@=gR+r%%*KoA}S z5P3Qgk(Gj-(Kv;54DT~1H1`A|6crh|A)SsGBZ$6%p^=-44Bd!MM~wa}|K|+{qW(P^ z!T^{9$pM4|;ZPh10`1nVq}tbcskdHJ6w8}GR|-wG1U`%s*R34+SGCK`zTJ!T*m^#E zEBI>MJN?JtGylW_+#;9!$640|G$Vsqd{{3vq0_ua(ZV}{DmpY?V=B!TckG+nrP-A^ zGCAu-85Y{)KiAu(=*D?FSs~ifu;s`v)h#wWQ!OUX_5oIsU8V?-!o9l3b4s$5YJwk*ITtWBw6>^6BIfi~DW(>H7pOtD#J{J&Mun>tmvfjsPQ7Cc*VwWx%|h*a8qkNG4XBs)ZZ6d$Nn}c$D|oI) zFxpELa{(W1x^=0%>a;l3Fj!v_G;VdqT`E06%ZA`Mfh#E+TdDsg^m?}s)g()$XeaN; zZL%3FeM8K&s+cC=`5dPf1x75p)?RU7pXxa38k$tA45QEl0zhLSaE};8xvEvt(dD_! zyK$sZ;hW z_{{DYr+a=+<zrClVO*;!r?ZZ0-9hD8#b;6|-(xgG}LQ@TXYjWMDdOt9b zU;Qi-`|wE;J?LtJQH<_!q%JY8R~a>`$T)fp*~AHH?xRnC2q7-YYjox_m9j46e8Ab9 zXHTf?wthn>YklspFpYuM&tO2Oz+=)So`EEk~3$k9SY| zgYOv7S09m>eWjck?}vRkBoP&J>>P;I#WNo>G$0@ z4&CkY>uw13C8}nl?0)aqw8^c(Ai0X?)#0QjO!{Q4grsGHnMEOpxo?E@? zSM)f-O-?=drDUJ#v-N`uU!e0bb=c@FK_?!@R;9mD)u1gyz(o?%Rknk>kkFUD=$)r# z5#4NN>{u4?xl-V(Ut`*2bL$$WiIiv6TwGMD(5*Akp5#=4vL2>f!u|7f7z?&DwVTslA?t=+z zae>Wonu+BnH4)u|Wmrk6a}*A=l`b%<=zOh|r&VLP0yW~8Rafsa!omw34t6TcJ4~@(jh_b2>H%C&T^Ehh(EJsWAGJ6XjZ7_=7{+95+gv=kN3CCN zP;^6mQpJ^SXDPSHOT}<3BeD#7HbZG`Cw512hi!BNe%NK|5kq*}r1`i`n~lA0BOHQC zJ3IZX&0O{}%GJuEQW6%m9hKprnp0o+D18h;8AbuL>{?~QDDW#9fMNjDH9`JA8~2}@ zRv5M)ZVR+eE07S_8zVvrcp00mY;zkr%dF|GZu5;(+C$C#|Bf4=cSxd07IwY|XvNHT z!zxNODLSQe#ba}hv$28{*NB_KLPOK B;)MVJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/252f2d1b8dd2bbbb3a12ba16672a77ae84f4c0cb b/fuzz/corpora/client/252f2d1b8dd2bbbb3a12ba16672a77ae84f4c0cb new file mode 100644 index 0000000000000000000000000000000000000000..463918258d9926a62920261a06f16bfc56efa020 GIT binary patch literal 539 zcmWe*W@Zv*VqgelW@Kbil3!PLrmRT$aR`R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(1~CQ(ZU)9}42+u@ z7&jO+F|ILaViaA#%*4pV#K>g8%f_kI=F#?@mywa1mBE0|kjH?FjrlqYvoLc}aiW2o zIIp3Zfu*6jp{aq9iD8sDuO~7Wraly`KDOAPaXzw%jI0dIjlB#8jh#%5jV${-U0fY~ z)|yOsS+=EX%@?OPse4v!-rQs=xBht-&yx2Y-|}v+58cie)Otp+YUR1jN=p=L#9uy} zRQp#L-j?L5#K6?c=jV30An2T2xa*<2{nu(Ax9PbHipd$wW@CVW zbJDMpB5leG7}Vx?ZLptXp%Y)p#Qc35<6a7+Lp5oIGptJy*_pLW*d|R+qxNQ?FTz`)Qd> zi&P$=#OiWeL{jaK;)O#`@$coRGWgeUT wLho~hMJk`qt0v876`yzI<-w{o;eZTMf zKLST!jRA;obS|$+Kk#?&lU%2;?8SP8tk?(E%4PYg-WpSjprbJW)WHNmjsOAZ01!CB zmZ$;d1DF?J3rQ*FPD)Wx3XUNRQ-RiF4x=-)_AyCyC6$qp_K{8M2+`?4PP0@aRg`d7 zni31Mb+u%X+EhoGsp_(7rI_y`@s@}!jYuB#P?f1WGtgHY6eyM$x&`?82S`3Qbe4n| zI!OFTu8z8;kQ5561f+-*lJj-cEyt2Vfk4sy%fm=|9wzia*Z)U!z(Zq!4Bdf+hJu-S zS=t5tq#R&c%<+hscIaHgi~<$+jmGChnY)KYCZudDJi%KR=Re)DLaR34n7i5}E~u<- zWytu5rfr(%6N$B@pRREz^PQa9=(~U9ti5tYOEKk&4bmAm7MStv9-HsV-kCKtel}5C z+A_)Zq(P>5g1&q4t<0P0{!tAWjsT@PlTIW@33uga&egr-Xp+j=%&Qtz{9bP`8M-gUxsYQmu~p*DDB;!T@nO{^iK^ozqYjWeFd z3SMkl<6q9dW>8$Ry}C}eW8r;ahJ9S|25X=x4Y*m*X_PoJ&ZvaBqpc|oe_c|B3~h`K3eqfRa|_|>zn zsHr@=T6^dm`MBmyoT}HCgOax&_F=!=gVv{8uqg*10!NIB9$)R)Lxd(zQhXX{Zx7tNxBCs~A4(j8lWh?3?EUv07~S7!f{X=7W7-m3 z@Gz^Q^s&iK{{zkh4hnzg?!$pvV>WgBfU8d<0>?X-+;NcRsgl@nQ(b9{I@2W*U%e9s z>E>~-qDSNdG#bxgLZNwg=CwNoz2}rp=G}6j-JZF*;327^#26WAf7OPD`U^yFd1ocC z6pf{LCnQAzD@C`zhVdX-ieJZ&l5+bTaKykr0Y;5^Ky`umz;2lZS3M!x;l}Re`A4|w z(_5>K9N{M2Jv|>ixVihVs%~@1`Bd(_>P=zxcL+U$7o05(3H;B>gN%z5pz6~>A7ntK zpFa(kjtry7Io%N!)g56vw(C;$ugpE!e+c7!e1ygHhOqw?Crlov4O4wA-oJCA^ef+1 z-680nuDGSpN2dFa?=+Eb@CjZPvt!n?#h zZV%)%%m^A&M4q$9k13Ic?0aJB9P!0!B}t-NrI`et%LZ>>be@43ZsLZpml=iCZ;&hv z@nV0ocj<|SE6IaBYj}b=-kxjOZ)+|spk@YI0PmDcm)I23gxxDAi8yGF=7{8Cporv?!<#_Q~X+9vwUh@ ze+dvKCKM;;&CYUqpr+*XFTngmfZty>eG=vU1k42Zh>889R0{(i{ks*|fC}oO;{H(; zwCcaAf_f++22@Z_0_q*X(i?(`Us1;p11e}h1$CVI^l}_Cpn|&AJAKwHZ&Xl^CkTH4 D&(01| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/25ad19d88cc25c531597aae66048e1f221b78c72 b/fuzz/corpora/client/25ad19d88cc25c531597aae66048e1f221b78c72 new file mode 100644 index 0000000000000000000000000000000000000000..b13655ee550eb26fe7bf2e5d85a95c9e608d20b3 GIT binary patch literal 4007 zcmeHKeN0nV6hHU9*FwLbP%K3(RzPtmcq^dbL}isx6@;Z$h!9YuBFcv!4+ldO9}Ed$ z(Wy*>;+UY$O$D9Qflv`rWNx4$8W~Z8ag3=<=SRds=+Yv_EG$_<%;v)R@4S2R?tSn4 z&hP$yVv+FnPFIU{WajcXnw<;=-Wqvr%>(tZbsfz7UJCD%`@g)c4Y5;!#0k{Ad z5g-7205M6D4Ll&v16c!P6=ujv%n-#TB!LKm1C?6ms%6yS30T19xaTT!UkDK5u>c3k zd6>f{)f8Jq1gPaAY-36+MO;-%lEykW6bfBx`6{ctTu!0=-cd zMyJby={W3UFObi`GqE4`_VUGk%gm`S_I;I(Xq&p?*V{12`OObNEFc+V4VXb(fyYf@>s$;A2y*jx`4W1djfyYnnjB+Y!zvm#{T6){z zp#C1~`CR8n$)-i$JSA!)cHG~ahL_0)CR56soN>xihbGoH-w!zHnDEPd+k$ny)_DuH z7Qx%1!h6po)w9kPWt^{ZJXbzzZNGO-{*KI}>1*P{Tz~BPtgykQyK(v-q5JHD%2S@x zg<}6hrIR8nf{N41_V?Yr-_*2d3$6O8V<2whin~+WovJ*7l7n^hONDIBoz?3fTDEue zuYROBGQP&=>WS=n{YuwsQoVdq_LR0~Elhe&Xv|XAE!M}QTzfwEnYTySrgL^*dHaJY z9#sU10F`b#ino z@D(ozmtpyWz>%Yac>{iY)3zdtg-L{rZ}yUB?j?dbKV+BN5?XQLC5z0R=!K%|(z*2U zCH)=}U1VJB^~WK48_M(J?;?tiZ}3eEyEyf|{IogK(py;}eJApm)05V@q*UsZZEjEc z8$znj$7FsxD<-qoS{bnF$gpEa-o8ZVZ6UAoqv? zU@ZXXO&kR92_L|f1gWfPvxQwvsam*OHres)(!>f^01CeTe@*4v_}{}JZM4t-F8jWX zK96{={^8v`%D$uQJH)=K9$shNY4_a!qQLlm)wpK@FlkyVU!iwCG3&<#M>FoP~*25lOWKdAHXu2IX*6jVIHYpD&iH^=7-P_i%^mWf&ZQC-49-SzBNY;eWlO(~iw0gy3$` UC<-#{`@uDu{eYK9OTatv0Rc#UssI20 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/25c34c3ab5a8e581d897f65ea125643d27fc151e b/fuzz/corpora/client/25c34c3ab5a8e581d897f65ea125643d27fc151e new file mode 100644 index 0000000000000000000000000000000000000000..3c11fd20d8f43d5f0a305f3011a28dd62a5f8587 GIT binary patch literal 423 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KeM$bxlFal4^Nd0n4rntl z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zS7OpH+DnHkxcofudc(7=BP;Adc9P)Cyj1E~CWY;p{z z6^&=fDM>M~?fn-J-g^1x2OIYa%`@|iw*;_hy$C4&diGlA4f`9xf4tOcIVauI+0nP_ zFuzBQ$F#>1e`2`)-8NWkYG7=@$HpEi%g@O8pM`~)iJ8Mdn2kA9R+WWEgNuzrn~jl` Vm7STX%xC#Pj`!`C8mpidFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AN85K^Mn+av1_M_^ZUas><}emEVJ62=Ltz6!Hs(+k4j!)H{M=OC;F83W zR6|7rd5|C%kA!DlNorAEYKcO4W=eWyNwGpeNu`2MNs57-IIp3Jfr*i^k%6g!i9wV& zuc5htiIEYM3$rGaL4YD_8s{UspOKY;xv`hQps|ywv6111_K9UiPm=!oe!j3avYVlP z???CjoDtPZdrj9(S3NdmLBoM9@?{g#-3%`Xv}{+BD^Q+TbmC=hrB!Qr1OJh!Vx>o~ z75bb=wqN`ynZdz-*00kC3-dHuHKwb}rOK>hzZ#vd>-<)G!p5HUD!J=kid(TB+`mI+ zU8=Qo#G#w(uB}S%_{hY}$nbS>fPtTZEE{vEEFX&)i%56r)itL%*73=wZvPdwFK2n_ zt=9G6z?4;HkuVTzfGXIBs(=TiUzmk8g@J+LKgh#M&g4-VedW0=7tc}Q zZxN9S)s^4QqFCH#0xI%!_gC{P=gfCzzB%)~?>9q1 z5Xc7yLGut~rB|SjMQ2&&v$_i-p|h)~^Peqg&##v1&hfn?B~csZKy{7~Wby%qUisWguKsKP7kx>o`*j&_|1K8{+GcxK1P_`S;{Gx#HFE6D{()EiIi{d5HL{S_{ z0jAicv`FNol9WVwoG6jDQpDfzDKFC0yv)E1O8`QIh@cDZ1!EX9ru1sK|Rk-XyT(rBU=kPuT}r3-e9rORz}_>*jrS2Y(_;bwa466Y*W=aMBFNf^e)OSeh|pt z@t9rg*LwNvj$;v2nZAN`?wgYPm)njpC1=3uZ{m*OYHHUFlFvh_%?IBl<=MP+JUo09 zCsorqy{R)Tyl@B%!DUK#F;K#Rz?z6eSTpe0)@wTwVSj=a0&D&e2wDgZSYU^Z@W#MU zIenjnAH!f69}S{_H4gv69w_raT%};3D5ZHj^ine+~xlr(m8~L`#&* z(5WjVJXz92jz)M2-n6iJ=Bu%^xz}c9+?=n!RS0Jmr!N5{EJqU<{(#2;2-sjFI^G;m zvM9mbM2c1IYvGUIzEV_QTw{45O2GoQSO5)g3CsbBsOw0C@$l_5903N}M4~`Jf^j$i zun-2`9?Ss@6r5^cY6_zIj#q^wzL@T3H?Pc7)m$cg*3C!uYN|3mw{- zRrx>_-H#OQMfZJ09}5oZ^SDp8s$LYoKHYgtR0=t*+0-4~`f`bi(;De!yvWeSd-J1+ zf4@31sz2Cj``(fZBd3iMH?Qq|@xo4krEqWV6eXwllvab^jW*0ae6}jIlE-&o% zuKn}CP-sUjy1>ZkQ9H|RV0L=NfW-F)^&Bs~^G0fcj`oWMJ)~3P3VwC4vkNX&=GW*% zG_Okeb4B-?Yu2a4l_!!`raw5C{~(7qaNf`!LexNs3J_?uY+V+DgV8rsz1WOeZS zgDZM6eo?KHY^(b<%w{e?7TnR6Efa4p_nd#sotXdgVk7+1j9EPcZ{MTIWBYzvJ;DsG zSa`GLNkf8V<@NCH8H;z=G+D&iw3e28^BlKuMEosH7FPo7M#Bq#d5{%sc-7(Ag(8|! zqsx9nylOaZVgiJ)Au**5~@Pl0+6C2B(v^pPkM!STTPFPfAR%2gHccB z=^LfxQr)jq3 zIn~D?T#R9jH^sq3z$9ur24Gr(VZ0rn0qRHJ0652Z(l-L8ENwk+t)>qcW9v0q&;~>p z#=0cnU~^PF6F30})m+u=oLOHiT!SrS@uXrIOCT3$3XI8Z%8av+Pygsw1RLOTz@Lc1)2bb4tpKD>giQVs+ zP!hIrD`96wyF<{HTRP%R^{t$PBg&!WJ;K<2=sPpo_iya;4lHdc@5yN*OIB_}G7z8t zyi3clwRqd)$y)a9&PLxo$-5Xg+((0#K=c<4?uMs(=~=Q(OI?{wiMwwbQul9>StkAQ zJVJlSjQB(_#D413Ezt6Ly`w&2Cd0Xu~Wysmp`KN__YVV>)tBrMpZatp2`}_)5xhwW4Y%b>gerowzO62!lF|L_S zoK6T)040(El(>OO?2RuDOxq|B@+J0$num?oHPP}H^BrrA-Bwu0=Su{#xW+GJEaydpEKzlAA*YI(|z(ZqXXi z)Aa0S3^)8?bm&g!@i4mE`}l#D{KFm=P)#Auqd-r8oXc#tCLDOZ)LUYpWnJM!-L=}I z@10w?iAP7wY{$D^<)%NgpPD0cm*bNko^ewg!rucsKR00w+y?&-?n!nD0MUUzVDTxF@dzdZ&k2xS0IFgEXO&}) z{UpddshBC?OXOJZ_)N1*Q#`yl4b34FGzS8I;77zqSkoXd4|sgE2@a+>W9O22vRIlo z%c&=m@@0|~DUUB>N%=_o=b_=?EO(5fv?af4a+xZNWWR jQSh5b1>fcIib|KJ!!(qlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)WpaL@)a^* zLgowz`2YX^f8s5MxK|TJLn%gTFxmJysnoeW29X+|ajd(OiP`qw-^Go~4H}mi$g(kq z%JQ*@v55Sfy)^%9$JKe%Vgv6J_~iP|C)vC9BMmXOPo?Rl&UUCGKYM)PWLh z9KuAT4y0&nLP~x-AXf>quo^HkGX96er9C(!|q zIR5MZu6ic_OG@fI4@)-83b9%8$06m{KjEYoq4zV5rcOCDbyMJOzvtX+e%mZJytCXB z?E7DT@m7yG_JD0&#}AwE9c0(bt;7^z*tGWey!~fAn%+XUr3m)gBWM*-u@k z?LJSnBHMqKz>=cB=f5-YY~bQp67}e5Nu8jqWkS|T`OMFH$!d4zz0a=Fco-5sV^z__ z3YI$g{#0LiZlN`ERQOv&q(XJ&cYm16xrrkt(kQh-O^lg=frXEOfkA|sfq{`xjG2Lv z0Rc8#zp>4Bwe8-zEdfkVvPvw()(5t)UK#VN|CBSciuuji<;E7-_7d!p9=Vb+aoIn# zn7(XKK6lW7=gXD@0XH{^Gczzqd|3OZ%=4(V*1StX-o{T`A9%`$h(C7I6@3kowNQL` zC}*E{^Op5*dTyrMvD#!9?(^O+CBNdG{<>Q6aA~e?4 qXY3%@v(Dz!HBpe;v|U%tPq^{OVgKzZf(K7_Z|qjtVAOkTr!4@aePG7` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/268791cd795fe0e1d47a28d2bcf1ae12b4bddc42 b/fuzz/corpora/client/268791cd795fe0e1d47a28d2bcf1ae12b4bddc42 new file mode 100644 index 0000000000000000000000000000000000000000..182f4755a1c2388668b10ca88122b65e2852d9bf GIT binary patch literal 955 zcmWe*Hej%1Vqh?3X6D=Px?}Zgxs}JI&qX}(%-I|9&%!xVQqlZfy+O6#h5mMi1KJD> zybQ_=3gAxNnMFV+| zAeXR&XI_axQJz7GfN2}k;zh--6_TbQ|oD&O=N(g8!Zd`8AxWqt~ zjX6}7k420{WX9HIFK4^e{a9$ASa{hW&%ofZ!7+nUkhC&Oo%RrdP zzyKC22Ets3Fowj6fq{Xr1VRu36buZ&xCtrBc|g_*v#=U4GcqD40OrOX26X)c2*j9~ z8Mg5-Fl=IGkX6u?$-MCSkgfZh39-LkY&!ot$Y~0zf;C@R+^xF1-|SsD*q9l*3>w>+ zoET@HRGnmz#c=7KTY0m(?C%ZCn^$PP%ywQk)nZE1zu)-_<_T;(^&(Sl>&Ym;x%SG- zBi61hC`#Z<6JX$cm}9aX$y98WJ@uW?6VpXp|= zE3TiXJWM|SW~pVOYxJeuaHmtxW@wz`nceb~k%57gfq|3b9|I!;2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5Escxo$jq{OBWMpMvZtP_+XzXNaY-HJ2?HZX8 zHNjx*%d#z9YrZ(WdDl{u@uSH^ZvFEvo+a-)zUAFsAG)0{sP&9s)yi|5m6j;hi1WRe zRQp#L-j?L5#K5$U&(H00LC`t5aMwe3`>)kLZqsuY6q7TZJ#BBK z;ELB@o}H6^l@wW^Hm97y%VvZ99E+UzN+#y-{}~rc8Aup#vN4B>3bQa7Fc@&NF^9_X zv#>BTu`WP%IycDajSL+>8%$1J`6#`wae+)qM9Xd)BkQ#hCrJ-5!9|^^s!9J9dsR;A z2CO^!aU;t-Hv5I%=L(BdKA%@jn$Ide4-!=j3N0nwEe2=TubMmM#`-=!1_lNZW(EdE QMlogv1_4k&f@2f`0PCr+fB*mh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/268c433413e52aebcb8fa4f22d12a231de89ba30 b/fuzz/corpora/client/268c433413e52aebcb8fa4f22d12a231de89ba30 new file mode 100644 index 0000000000000000000000000000000000000000..d3e8a0379d06b61eb398f3962525973659f5fbb7 GIT binary patch literal 1787 zcmbtUdrZ?;7`?y#TA(~ip|!lBQb4d2ZwrMMhfbKHj#p$A6vngV{c33yd|-r7QrD1jAa$yh=^{YHi&>jL{LDdECpk5OJ>aOU-vutZtgkX<4{lpa4`U| zQKb3&q($0rbfa~^&iW|xR+9WFS4Y*L8%_A84a^+`00Te+U7ZVC|k+zd42EkzP;BB3sOAYauJ~Yt6FW$X+_oM-W;BWx0Wa>e@7RtkFkuWQG zOcFHG1UmY7Yg=JQ8z0F}uBloeoPGT=m4Rk8YGX8gx* z)@~?l3iUSjy@U_lYTL|K9kOJgq#8=i_RO1<8g>*@ zB)_f|`l(`&FJ*LJDV zQYlz!5!!xF*>gI6&lmYYHjSexTFc80si<~)W?(~INyb2{N0SOTd7 z1w{as0A^67sZ8v}Z27JrF7Fm*?4fW}@{``;-aliDe&l7I^lkeTu_8WCvt6 zP4c_7>-dzA!}lWGa#ZYIfXZMlx*g_X2If{4HEtUCNAF?4yk+GDGl`HeyO$*Gl|o5k zTyz$b0qGh_z*M;pFePLjr$>O%Vxot{H9osvl2=Db7jYpnF8RHY&`#!7jKd8n^ zL;|XhKqOAgNQ{jZ3#cn3;)HZjqBvV)Fpve=EGBe=5Y8G52Xa1!(3@%U(Z_hf-V{il zD~*A#ApJX$BvVXXlNRg3w18$B93>fl#C=oJW1>^2J}Y1@VmrU$8hgn_3<1nVbTPRI z0`6ZmjfL+fOlaoobHW~emBQ&4He@NfFFN)5O;!7xM~D0uYU}K||Lu}Eu2VBEtME8y z5Z92DBdi?gh^nd^mG&1n8kXDljO-k*ty26}a+wGKI9^+_>VONUb1dJdjZz%K2pTP5 zNVkO4zI+~;+y&$p$W!D6?0c=NDz=JLic6Py^lLYdEGu*1UwwFerAqI;eRwr(j&kQcnI!SVHtwzq8;GAnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JA;7>lS1WHwOniY&wn~| zMIU+2vWai8PEdCB@NDXn3_mO4oX^Xo5OhZ|MsMCSZZBV5y|y1=JdqVgFD2gBY5nuP za{WoI|Gqp740+59vI^OD(dvg-i#E9j#_aR?6Zu|fwoq)%gG+vwG|npSR}+w6VrFmy z*_d+HE@8p96_xti|EI@)Jaodk?)KT$4XNH|wyI127u?{+q!51Z6Pt@?r)#xyXhe)c b>85!ydlc&pK%kU`%^;ck$I^!k8;xrK^0BF^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2696e829c0ba78163cde564f8406854dd182a70b b/fuzz/corpora/client/2696e829c0ba78163cde564f8406854dd182a70b new file mode 100644 index 0000000000000000000000000000000000000000..2e2fd24c07f23bc21e8c27a751ceaf8c28120ed7 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubh;^F1v7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=r00sgOiWp!(Z6LzT%)rQKz|73hKy9N* z1(!EFGcz(M@G>$ovNA9?G4eAQG%<29H8CM8cx35?&JpPf>y zlwa^iS7KjuO48L2zDEUF^vX9!%w1DtSrKqtM^nF|vdiugtMBiUr>hN|Z%6-m@K>PE zyXm6BN~=q!{zCx+BNJmokxj6%{EPS#vGNC}B^&DGp4U_2JTE9SvvB{ByWwFtcrd9ZB~gPHa- z_T=|RPpAvV)p+FWU=r-B40hi-`TXitsvmXpMN>JfClsF++uim!NGv<+vd`ChJKk>A ze1FcL&+hYAnM1a9_DYd!wsGx^xh$^a`Y^%OaL0;`m&F<#P8{HLQn|KIj>$@R^Pipt zw?s-FU#_!0roo!-!<=)!rI~57{><6YyE3<$B}W-=n%wPmjxXTm%wQg_bB%2`(`wiw zL;UM)Om0gxiS0TZb7P6x&vuRkUYA)DmRbDI=5g>a>#4lnabCb4G*QWmU;r(|?LRUzirPV?8@>{)w&Gx7H{Xe&%t$B_Mg>(!?t_*qUDE z7)d2H>E3&2m>K52dP_^krH(ZnEz4&V_!q0m)UiZX#HTa-JrXAD-}J`tCO_ZdrRBfn Pw|o|3W@KRD1LY3@ZrKqz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/26cfab3fd186d0646eb904da2b04f755eac5c51a b/fuzz/corpora/client/26cfab3fd186d0646eb904da2b04f755eac5c51a new file mode 100644 index 0000000000000000000000000000000000000000..86e5b92bd022ca3144f1de49a2438e905c161e3c GIT binary patch literal 691 zcmWe*W@fNtVqh?3X4YD{t?kmgJu|bj?#RSP8Xcdvl>Iit|NsC0GcYi2I~r}kz+l6` zz{?=U!0?}ufsuhhoPj}%nVBh#n}I2bfhnGWDaN3QDZ-$M@!$exCPpSEPKMtbeDqce z%;quRW#iOp^Jx3c%gD&c%3$DX$Zf#M#vIDRCd}j*YA9?V2;y+?a0Tb*rs@WlB$lKa zDjLXx1i5%5Jo8FYi}F%S6v8u8(lbkn6#_~s6?{rO4dldm4NVM8jLsMtm>QTEM2Yhn zSeP0a8X6iHnHm{H!K^8z$eI*`#`!S!e}}lAxv`hQps|ywv5^56c!^5_6)>^D`S%Kx zHH%KX%+1s2)tIg>mnyT4{c3c+uJc>%2^)LXtK_bGDZY#K;Qk#l>r$lyBM#kMcWqUA z$44e+MFz&j0S0~svTV$uvV1IJEF#^dSJ#~8*vBWIy8Tz!zWn8-w_4YO15;L+MZ!R| z0iu8(s$hQ(L;(*-zc34{0W%}xe`F7{vNA9?HZoYhsK}jq%{J@1u%wRkp^kM*tH1Ob zeXS`>Kd*aH=Fs8xM=$qv#yl}u?J@C?{nT~Z?(HtOoOY_>5IW6DwHi7<++8{%u(TQ5s?bjm7nurF6SnWm`KCa Q1~oBeW(F2M1_lN(0E*1MfdBvi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/271b1120b25b9b8b9d1f13e4cdb157fc8baf3fb2 b/fuzz/corpora/client/271b1120b25b9b8b9d1f13e4cdb157fc8baf3fb2 new file mode 100644 index 0000000000000000000000000000000000000000..afc84f9c0fbe4b8a0778e8541dc1162f47a40444 GIT binary patch literal 768 zcmc(dy-EW?6ot>+JK3;_5yQg9CPvvpFwNP*!oo6;7szX*%L7b`RK7tV2oWqT1i?bE zvhq1^3FOX+0<%vt_ z->Vo(h>uz^4BA(#>F2FAoTOcbfzB)=A=8NcGU?Q_WO~6-Sv>Vc&v_o64SK#pawq+Z zO~>05(qwTKv0L+`+FeZ08asR;ZCQX&Coc>GrQ#}BLf3F0|O_=KL$ny5a4ED+{VDTnSpVG zK@;N|gC<7N1}H7ZoQO$cghB zni*Icnj4xL7?~JGiSrsDb7AU3S)l40=OdfQ$jZRn*vnwh*vZt`$jDLc8krF_!Cd$>)MZeyB zpQqV;Q$6kXwj@_22BvjG+w5(b=X%psz}EKCLr2Hb4Sp|boeEX+)-3y_`8 z4RU%TL&whslT%kdO7Cl2Ad?c&vfIYUdTqqXvnJnj<=#z5VTXFeTHH^|bXv>;(@o}^ z&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=%ugXc?fOSVdZe*FqX1~z;Tw#&Q z=kuyb^I65`L86L5p{1m|#o+AvRdc7@Sl`FTz`!8F%*4RRD8|gh0FNgOr~RiZKnjTM xpcsIH4FaHuhVfvakpIit|NsC0GcYi2I~r}kz+l6` zz{?=U!0?}ufsuhhoPj}%nVBh#n}I2bfhnGWDaN3QDZ-$M@!$exCPpSEPKMtbeDqce z%;quRW#iOp^Jx3c%gD&c%3$DX$Zf#M#vIDRCd}j*YA9?V2;y+?a0Tb*rs@WlB$lKa zDjLXx1i5%5Jo8FYi}F%S6v8u8(lbkn6#_~s6?{rO4dldm4NVM8jLsMtm>QTEM2Yhn zSeP0a8X6iHnHm{H!K^8z$eI*`#`!S!e}}lAxv`hQps|ywv5|p7z{CPK;9h~UX3>e4 zxp^AB8Vl6rQf1b$UyaV!b$+WoVPnsFmE3hN#donD+`mI+U233o#G#w(uB}S%_{hYp z$iTQbz`)NymW?@7mXAe@MWnm*>YCFW`}pKjxBm*;m%qI9R_l6jV9F}9NEnDVKosyp z73|M}DBuC<7iM8KU}j|ekL+PqRtDzAMh5E_6}eNd*=Btgmei3x)Ui%!^_O0wuQi3~ z=XEd296H?o=;gl7m?tKyJtiKqpSn)leV%GXw*M@FB}ISFe`n&^z{Rm7>e17ZIzd^> zgshYDnVS<94htLYIhUIM*cxGQV+>@^3KfejK}kRwqptUD2P5ti3ZTmH$>4NCMN0=(U6GR zBp9)jVXIA{rcjXj4x>(CR@Wrh)z!yiAKdi` zGZ@~<-zRI5hI<6VE5a~S7C5I6cFN8Te}&;g3<7yP*i&&uGoD)anp!V$kAmg>fVEx% ztCJG{?BHtbR@NBW8Y5;X0bt9nhU!UW`WH4}TRp1`0ANG5)XTb%B8tS4i#Y>G{(_OW zFyg|?kW;r}qwuLH3ljy1?kK>98$^XD8^p2t+(&w5sB#N!sfX8=^cv}9GZ7nT-3{!( zSXwKW^dP4rVZl#45N|u`c=gb%lxAphG_y7O>|G)c0=DhQs_dVx1@B2L8=lMQI9z}sA z4gea8oGI&7S^A8ALftjxh@Wz$?7AnG!ZpW5>5@~<0iFl}AOW-i;2;12Kmh=G6u~VN z12}(x^949>$i~fuY~)-%ibHTX5in3P!=zAZyEv2}iWsCjr}s)A2!Q~gBUucJ5K#|2 zQ5I+CL6(Km*nzOPsC#G#)7U+d9?2wYLJh1@R9tb|QU;T?lo?6#3NP|@9r656`0I3wp(BThH6Z!dRl6MMTKSBU#@;U&MGjPetV7y_? z-fEQ{r9j+t_PjNY`_8;}Ix8|aUh534XzRH2&G|`{ziBMn7&w)DMXKYtmU@`>Mpn(! zkXWm<-lQ=Xv*n|zT*7D6FeVkeVdNUj+Qu1@d_8rh>OrCF^FxgtIt??AtS#2r^pku? zRllv>3DqK|waVP{H;Zl@3|#dZhavzeaD%Q;jfi@vN#f=4a%-ZlAG$1DA*sPU-an^e z$-bytX~kS+s%hgDp?s3u8rEkzh-2r=;t3E%5RTvt6R;aj2G$)hA=x)A(Qpz1kqJU=PB$j~WoT+HHG+obleJ~Z{>#7jhl z_jt8Gid-(OM)eD>)d=b~Vd&n;d$~AH^ntr)&Oz4382oaL4a}JuVlszvb;hL1DSH?% zKK*KkNU5;*JPI>OR~|(GUJ`KE9LT@}kj7n;D~ypf9lQS6xTcM-ygpNf@&JxmdFK9# zQH#)L-lle5ue~d#b^8(8>y4X9Cmr{`mRmQ+M(btwvgN@wrG4`Y^e!sXj_5y~Jl^QU z0@eFIPtWx>9ch==na#22OHjM}v5u9ua=*Xa`y3?tps5`801$Z;5vnPLpcDmaB;$9B zjxBqeTz1-D`IJ|(Db&O?OTsHdMJP@bH6$Vo))GMlixB|IMi5}`Nh-bW z3=^^nRKnU(S(&L=dt^i;$!STbKYak%y@dzV6p;;!^d-w* zr11H#=<+BkT#Wu#cGX^K6d8GRg*8dpslW@wXDk|SZ%!E zxX0;tVZKId^5?$n-F1C6>4y8Jxqd6;?b?o-P64|C5aAhY0Du@Essf@Czj>lw4PJHAPy z)?iQgj{U6*s;mR7SbqK`C%TV3Il1g!WW~zh=GOIC}j$~&*?^n+Bl9)2c~ zhkN`e@$h~7jWhe(ljRN1Z?UGVB?YaSuQ0Jsc1ez&YF(4r!A+XQ3QK*!gqzgWPR*); z6u+`dB_Al6nu8(Un zbJVP|dtT$%$dJPYfFbt&*9V=?V-G3X1suIKV_z2Ih*`pAhdUY;3?Io5$E&r0-Ay*e z@~&C(#ChX0LVxB|h1XbRr{_}tk}qj&Nq~htafdc_ zh6a|@&hJjyk^lQiq*K30b*YK-p`D4{z`09uV7brbx0bD0nRH|IiPttSw!qnzNh1svzuJSQL9-h8`=&oa5wO1y;y(WIw#GkP6=7Fg9gx>p` zS5Eb@OVxGgqwmi;E%5@H&MA*GVv}zz&33q9Cr7e38>{%?nGf5+r&Y4mzwmA3&iYi_ zCG~ZVzi!~9%SG!m3hKsR^^1@nY1Cr9Q8R`?N zir2G(crHEp2~7Tj=e4D|UV8{X5fDOvxOC#dMCOUQdY;!;FaJ%~Y^dNS;AdjiPN^@o+y)WxYX*=q22`C%4t7 zMLt%mtzYGE+ndux88fa`pH-iI+*;A|fXtoBd%@{$_nli;-P*B0f8Um0JW2=F2$lXs zbB#5($jY0UdqC{CcYNpcj&~PtU9+9MZnv~r?Ib_f69730*~l@-M%0H)p4h0X{IN5L)}tz`EK_q(3s|Fp{MAinYQ5OHhk2s#)&DD zL^idL>n^}u-szk=cZS=-1$3?A-S;l!`dvZK#gOlqd&DWenfFX}qZn^(eeKyH#8Fzo zp4}AJav3p|-*Sc6x;6QCgXSm&{mRN>N2V@&(w4WryzuCQiZC{DOs<( z(&1UF_a=LIt|hL#Az`{-nC28Jf{3K;yVm8TcUJjij77j)#}&r1w@u8;TrG&ugeYuC zLfSS0^Me*;Enh$(}$B*HW>GLQ>}OfVd#fSpFdOF_vYaE3>2 z#Nr6ZXf0r1O$KU91iEV z%ci})zgPw5y2Ygt)+Syxa8A7@vLxYr18rwFyK8paBHus2Y6a4k-tp_U&Ahz7Exkq} zbk0gN5uJ3WKQ>WQsjtS$^rvNOFWF^;QSs zEjN9r%WG(@08NH$G!bI%+y;-}aH!1b$AXH&VmsH7;8BWegYcrVLXP24K?~_IWMgQE zVFWQ*ouL+z`y)mai%D`|vLb^P1~KT7%ugT^109e8X%sS~LI}A*o&~fRK7{ro=ac6H zVuddOVkc$@7buVa1c<+aQZMDy+AGrJb{x)`nq@Mp?)6HCbMo1q#%?b&jFaL#55MX1 zUEB=Tos@eoH`e8qLBzJnliXcx;#)}bjbi3mZM;92liqH-i1SvZQLM>+f;hlULxA;A zq;mNE&vSR5cG*^ZXAVivX5#DClT|5=#^%`v9+=z71(*%gZ`#qQv)#5Y(expMAs*HG zF1Zv}bder+?VkGe>mQhO9kaI@zQmb>b_bgJIWna){ zIkTr|PUjN_>$H-X(7u{3(U7n_+~9+T-u4%jRD6Rz)s()G^)dHpS_)_VEE!7Io8*)W zAFWkpgdUEtJ~mixa$b{Awf=QVqI^neb+?P|xzd;Ys}|c^(Dl8y@&h!0;1FOSmk=U! zZT<9>Z(TJnEt^5VGEg!w`AvRVqjpF|^KGEuz{y)Sr~6VcSr&*?r>yYW8`WiS*VgXV zf_-%JzP5YSlebOR*jngTNT8L@zENXuAAUqeL-L(#1^h7Z0N@h27~fWV2ByxtD*tp{a(VTPw{zA_y6hX+ zQGJfa{BR;}x@T9y)Fs(sCd*Lk_`>rM&YrG6i*=SPtXI!e@=(e;%V8(0(oJ26Yg=2c zC}ba{lk%oYZ!J5R=sxk8)5oGa?swO`@p^ZU$x_ZP6Un!mb_f5?B=IRF2-)l@!3a@j0+;TnsfKr1;Tg{7R zA9MFd-m}&ke{|C}A6)qO^7=iNO5k`l&T^xe#?mLguOdxv|gWVUKU6VMqAlKl+BS$19lJ z$-^Foyo`bK<3)Xj&86ADJGE+)q-L4rWbSMc$T(ES87x|tF;F-Hnv5AX(gcW#Ae<3k z1oJaiJd14x$C9u-3ShmH^#<_urf7`j*cEV7>gMZ8pUETBTQM$u+WI0$WT`7C?kgXyk!q$ zmby-tmq~|2EbE|vqJRPr9Ev9pg@i>!#l$5f$4E)b$jXhCS5Q<^R#8<`*C1(XY3q#B z)zdFc7H)baeCbm7@`YXJJ6o(ZIIjftb*Sdv=Cd0ED&ul^YI9y#5VGQgY>U&!HD2Bk zgGD!0C`uNETd8sfw=_R5P?Zy&R(AT)#+NDP&(-FH*4-+PV2n4&{9{GDt=455A;V5z zi^$xEsGIAq;vAzc`kT~AGV&;j7|%2@73akf1P+HV98q8rFyiRnP7oYw^YKGL@;;cn zM_`#@_Ww^3MMNQl_@#gP;y*}mm>={6Ng5`Ahn>3I{cK!`*bIt@_4qmPkB7SLHECvShxCFN^*zB1=es$P#Wftl2}= z_vg&)zH<2H5RoOI(x#Hu8wU#5#gg0Bk`kv*HapVo7v-?hJM%zfP+)!@*#iL65!|3W z#?zqa1u=l01!y@yPeL|&46<=M_}t*JGOd$d_+K@L>;a|`?s^^K20ce{gOZ=)24xke z@m2acZqOV~fR>PIW&tg^90#<37DI>pX+}|yvcf+&%~v8vZl?PO1qVPB`WGmhHl%D6 zCz6lDA>X5HhR!v$Dza{hVM|XVJ2rKe?;M@wV-9)ibZ(?g-YnHpp=rQqvo|z8`FUv8 zxBb`9hE>=7eyn%+@n+JLew(e5WASe=AZMVajb93vBn=NI*kM=T9w*utm}A)=du(ix zPZ|*fA49z7BrZ|Sr{!#GQ;KD9W%Ai|LW!A3ufyZI)3F-)gT{&#^8@^^znWPkjW>xt zI(Nq*mSv3FC8P1HV{A=hn+Y=q4zFUD>V|2D9;|6PGg>1Byz>14U+krGJIu%Z?O>%uR2Xc1%hSU|!9oMbdL< zTPlsz?jG|gU;XseV{<$4bEWb{w=Jp~UxX`Ht1YQmb*Z0oY6WgqvzDItgUFI?KTq5< zI60vIqpW|2$Gsp*_U7~1r9Yi^eIiD5Ewe1?vMhI>$uTWB=IkTnR<_z~yUKv4RN3wt zy%~L`uY#TzU#aTUUK_a64YL9~;uRoK34C+=ZzWCeN>jto6@8FeKb?J*bik^)j)SG* zJn$k|!Xb&j6B$Ni0JeaTCKD}@Ch6jE)nBfVYKXV{MH5r=6=t#2wiBj#c%_wy9~q;V zy6aeu_j&0C2p|51w=0jLI9VPjxS$@TQM9an8B4o%n-EP%T!f`WtlFUWY^jvp`ao}FN@Xp2&$du6ezID8&&yTsmfkM*I4(ImtzJ6rK;u!ZJz5D0Pdl>W zyVuWQ^}p!N6G^$Lw{W1$-%;xot4Pvy>b0=hjq09`=kIQ~k@zs(#7SCSowhyL-gB4q z^Pb0zD$o4qh3V!-1DBx(Ov0ha#}5S<+m7+%YO;771Ons)A%B!IFa)})FNs>$@>-=L zIbStkZtCfY6zjutYa6J&A?jV3$H%TZHYNOS_6=(VR|D!6?|fS6gwnnBvyJ?*NPJ%*S%hPjl zhZMq3rG`hwH&KcY?%3Q~ydKLi$e}2=k^lu#asY@wF^X7Z>QsLusJ_r>(iCA~;s|6f z;F`CGtu@S#ZEWK7jVYeI?@DlVhGu(i^1bmKt7OInHOrfzQhS7J=9cZC$Xzjj+yuxC zfLw!YqzST-Wkas{<}Ey!F)i`zb11^4Zm}vHm_$wj;OoCbB|Rt(^nd#J&9kskhl_!D zX96No4fo|UKMnq^dA`5r=zIISt_T1!0Qv%ogi|@(;O(VImTtzTS4IJdFc!)I-t$EM zLJ9w}@NFZnhrreG)FMlk=4SKosH`xP5fDMA(9GdHD9a=EZEy%tm`e$uh!AQI@Lp0Y zN-V;YrNC6Y<&*Nhm!&CoAA^+7t);Y?686hx3_5u#SX-Add?pLyRwUehrcR%?+QI%x z*>Ad!vUSQAi5}IevbIOn5t&_J)^Y2-q_+=1I|ow0G48fJBw}S z>zyaWl{)?8T`^;D-bM zSTDcbP?*G=UVltag(F=u6-V-HdqbQuEyFS1!DFsBDXKJ2b@c5~^#=G_|53pSI3vNR zogWGbGGR&j0-e7u!%Wy{5eV4%m}qpD|HJYxyJO4I?ik?)rGm9K|9yAN^S^(kJAT1) z$J8&nW6hE7c>MRc<1J_Q&l}~ACzedgwJ`FH#i6|%o(ll=|c#35LmdpoRJa zykrz*W})IQ?|D@_bdgF*)Eml~B=488y?8`qDN+9+j~x=Y&41*tl~D_qm)EK%CAyBz zYf(HvrQzqmbAT8?`~b25AYPD-%z?=tFzgI)QYy9=EvZ@Tag3<677x>h0fKl1$_P|L z*fB#w8B`LlrjksdaDRB^4T6Uw&tZggkQ_q40=+J4nr&0pQU=5`AKg6DuJyf|=oB-) zKF{noH{yj3w}`h5H#}M=wYm?w=q8F}wHcjQf9k>*=LF|14;2T!ML*t#1vF^JGehdU zqA?sQ3}vw}N*yn*FUsdvQG}Z|LAWJ2Sa_906y~BB4pCOY?mAf(JK&%^Qi2C>q&|ak z-hHNxC;VKlwg3OlJP?5KxIY||BMq2Z5rD8pX?*Ca+X0dPg$VxxPwX7sDKv9q2Zxy! zBfsEqIQ^e{rhgU=03W^#0#q@YQNkKZ5XA&oi?7Dy+=W1zHnbiv;$#u8$?4ma&LV!b z5R}D1$S-Xd78m`ry7(nTLgK?L374GVcZU4VSSwipj>W2(pt$6x5xDZL%dPde TFkgAN$sGR2e^rKJFaZ7wP#?}B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/28960c98f39a369dc294aad058124cf029ec9ddf b/fuzz/corpora/client/28960c98f39a369dc294aad058124cf029ec9ddf new file mode 100644 index 0000000000000000000000000000000000000000..2c915273c3ce861f775adbf4a8c46cbd7d022cc8 GIT binary patch literal 880 zcmchVT}V@57{{OYV@IcMI?k9vXj36dN#1kHFige7a;0e4$*;avn>MuL&@(~EmrD0N$p?H<(m8qo*qL3gaNtP%`cA*$?;!KnBrn~-k?-xJ*zvs0O0tYcbG9kYH znfFEA4Fks5W^2O{o9_Ad^PUbGjDSGJo=!o6(L?|P!~>`Z5I`h=g%DgD3b-0@6<`-@ z!cNwN7Vi;^FxG>ABxyb-JS>mtxgb@|nNFjKWecH9&k>2s`8I`nQgv{ZC0mTqbN@Kw}=9zUK68bBx!y@8)le><*AMlgkrVP2K-P& zT)@h43cS5CY-}<09&c?LdR^)bZGSYit?kCwI`faVl^u1kG}QGiQFO?!`Yc3UUR6~D z0P2Lx5F3H3FkFLh{SI{QX%Q&tGn#7Y9H9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/28a199310c12407b80c92386a48ad20ac4c4939b b/fuzz/corpora/client/28a199310c12407b80c92386a48ad20ac4c4939b new file mode 100644 index 0000000000000000000000000000000000000000..447d7425ee23c8b5bf78b44af73003b0b377f36f GIT binary patch literal 1168 zcmWe*W@71PVqgeoX8Q0sX8(@lC6A|MFT3E8^kdt~msP=ym$cS!33g7&tJ-i(!QdF@ zqj^Qu;{YLH8eA@G&V3aF*GqWjuPiJLgpHX7z!B(K(ugzwPYk_<{323M>d*~m4Ugj zm%*U1lc}+hL9ll7so!m<>u>G;H0Qxp4+p=6k612EyDEC(@=?3R!5WLF%viZx_~YZY zgPd`TPOjR!kLTX*{I=UoivTEi{WCEOKTV{bArFfg98X}0H_ z{7CilVy4scJz64s0@7j=mDVr1e|XM8<_lVF9(T+_t0X=}zLJ^9&BV;ez_?h}K-z$Z zjX6|Sn1$7VnUUeY0XK-p&%(mYz}|r5`cM{g2Ij^_hMITUvy!}agy~wwKF!=V^UZ~V zxxIImU5$AxCy-`xb?cVwYp;0Ym0o85m0sG}#`)?!Gq0|(;5ti_fWs$jf9<{5z47h& zy#G>uU9bMXKjFib8~BxF-8wC$mBHOXf)cxvZcI;c6|Km-b776T?<&uF-lgs_vWy9XkwHDMc;cSMs6fmGIEO&5q(Ce(PtQiEymH}P82!r zzBKumvQ(NhP%G|cv6LR;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(1~CQ(ZU)9}42+u@ z7&jO+F|ILaViaA#%*4pV#K>g8%f_kI=F#?@mywa1mBD~dkjH?FjrlqYvoLc}aiW2o zIIp3Zfu*6jp{aq9iD8sDuO~9sfX@)DJ`}7zw%DL?KC+37tPISJy$lA8olK35Ec;UZ zLVbMJnoM|Ewxw&$7pFI1ev_%(`sZCdOWt>U%e%ckbUR;A>lwkSmFG4qEm5oyfB9@u z_2<5@qF-;m&(mzash;+GTav3115+=brrYI$pmTEJu7~dSU#orGrspmwCTB34jR6AA zNxw>pv?(uOP@Cel!G4Z~PJAU3^Y?9xi=_-C3^>`CLuG|om<$*UxIs*Q78YhE)&(G^ zx3%$p*YaRwyIp_De@}Urm?*fYGgU?Rzp83d@5z85 zD?VSAd2IFzz0VaEseC@KnlztPeBPCp2dmbI+wN*9DXBhhvToJfDL2;l@i8zkh%hq) E0P|eBT>t<8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/28d791024aac4232138e3a42447433a81b04dd6e b/fuzz/corpora/client/28d791024aac4232138e3a42447433a81b04dd6e new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/28dd43279e987ba2fe2d9a2d7562035d2aec2372 b/fuzz/corpora/client/28dd43279e987ba2fe2d9a2d7562035d2aec2372 new file mode 100644 index 0000000000000000000000000000000000000000..b761bc5eb93a3afadf73ee05ec9bfdd0f2cb4613 GIT binary patch literal 6631 zcmeHM2~<;88onSQHR}OCW7Q5hz-)1;rwQKtTv8i?SGklBytK5fMaG z!~wLnP!&NClvRi#1pvEoECO$$kn;8^Bn|03Z)^0T3Yo z0YDW18j9e)lmj?_fb#`7Zz#ZdKmpQl1jQjZ90`n^a`G&kl|zB@MACvJ$D~1d1R)Rr zTxKQ*Nkr5QPo(1P+{~y@2^+{#$gbg`9Aj6WACF_E4Yjb7WQyAIFgAx9#^EvCg98GC zd65hk9-raF3xIT0c{2-W!8B(=7PNq#s`6$ZLJKBSGJNl4cvCME_w~g4M+g9oO9L=& zCoV1y7#g)4Wj^#5Ils7ia_z2V$LjhW&XGK}=+v=_v*so3KeE04jMk=%z)#Gs&g!nz zp-1Rua9esp`BsU8+ZE4e(xRF_-RRW9w#j?W&RwuFd-zhr#xR3KgCqKMj>ZX@n_l6@ z_D_xWl%|&G?OR3bZXRA@SEW(RS)}gK*j{|=L|}414n+Wx=K@ziO(N>1sg0-Mm3Kwm zEV?8sRM6s74zCezI2QGDVu^S&HFfc7khXp52^8#lDxLsQ1QAVqU;_5QabQt*bZF)+ z>ySa}oQ3L*$;CQ_FVmO%_8eh|BY}(P;Bi!lz(4x>WqtPa_*vR4Vyy*2SvuEXV z|Jgc-qnskk=6iNN;>9RwTC5BCK`Z!$348vX!@cXjB0q3-KX`(h5si=0O6NFh$;~dx z)l*DRp6h0;b++#isZ7>;Et9i-J`F_xUIB4WOD`0; zD+iEvfZPJebtphup#a$=Sx6*dC4eNN%z`AxE7o{qrZ7)em7h_*N^kYucpoN9*lx}= zV||FR-2$?h=91x*Po6(AMN$!o#7Siuwy%X$$!_8hqO5pZQA7s)7~s2%f;-P~zRnVw z(&hK3INi)zUs*tx|77HDK>_{Hof=Q%@vW@mWVNBD^Lg|&om=A_Z`0;#3~0vm?>GLe zm8;Y6hNcP_O$!s+iV8FPrcHu^6|`s>H+SEM^V0;^pgu-V34bM5PM$y^q5zEZmqbJy z$#^M35S%u6euU+-%IbqA0YB%NzDwfn2qG`jz0HsZUJ6xqd~sd|$Jk2eD~D*u_kG0+ z;`=K9Ej#E;|E0q!K3!VO&;5L&eo&^NC^$_4pacbKe)!iHE7=E^-c$dFGk+1G>4JPg zdc0^nZy%H-Zpj`a0DxQo!1dGi;{f>d-v$6+0*T%qid9urMEmj_9_M5e|%zBtRDPm>Fm^qSBlA> zR>(NTdAq+l6WU0q%-(XYR{d;=)%sD3+LZKd$M_+EE_#=`(lVQLyT51luRN&iP!c}C z%cNODRfionCG15auN04cRk7I)XO-D%*a0 zG^p49s8%iO+Q}J(CswQfr{MV~2jHIofANjYY`yE6&1UoCjc&ZWBH$;i^j)JDqgdpv z_cViLyMNXVq0R#Ky^oEItH)GM+%XuJKc;iU33MpuyYL^AZ?4-|*~VBpY@MZ`f`1O9 z#()?GH*BAB!Z*wF9i}W5Zg^ShRQi*uwp^OV-qN1}5-6|GsrJNwr#-!Tk|O{V%OOjC zh%cFqtDt3Gl-afi8MN=Zc$TkqWYkzq=oR39v(LF%32(Cbw8x<$u4S~#g@uMG(MwGE zZ3O3$lgWaz`4PI|-~jlz1{KlSN9Esb=xGla<1jFczy?22kIAU-Yxg3P3h_D`oNCT zP(~}h{ZaFkUpLPEUUP#m`NFWMCKk7{O-G;dfOjf;_2T?d+koNMRR3IFT zRcBW`mLsmHusrq5@{Fsq$TY9q(MQImBE>vMeZ+lM#kVc`PD7@B!M~JTZGNho8u+yf z4FzNJO&JAZ!3044^{mz++xA$cyoHw$H;WOs`#qGiks6y`lXqDgn3oql+pV;#F!J() z9gGV_JBV5v_FtktuOT-4B$t(Fo;2#-NmE4uVBG1t>sRq~v4w4!$+7y~B?m|Ys;6vM z$9?!6`wqQMh0uXbvK@N#A}YD|c`lU3S{ob}yS$n@O?z?5W-VZTGxJrQJ#tN}Ad*0PCYt^J*3MJ2tKJ_<7N z0Ayea4j@rg)5dQ%NE7-aG197L8gGAQ!T49b{$2H2W|Cj@SG}IPUKjme*K4c)biKA< zGO<>9%vD8IVh-%2r7DFl>)m=^4u8is>nBeel4i#<-CmNgmr-`|eQh5vX;VKQZ`(hE z1az{&sy1%0PI6TzYLLm6=>(5;8arfK*8=5RC2p2_o2#5!*b^Pw-%!jpVuSb(Qq1pH zgvS)~j2B_qG0FVCRT!(hMcjU+Z*G)Ql~N0OR)5Y+$DFB;a7gEuq?Ge5{Wh+kp7gGL zh)ic6LL3RSLpW}wuZ7g%S2trFuZ+81G!%kr@rwa;u!Iv-pI-A*(ly-DG*0eCzRD7X z3x*5iGn^pARivaB&j7GjR9 zWJ||lDn}MlaS%#hc0g=Tq%lrQWo_vxhU5VI#y+Z0o(`c{RZ6E|XWx2kXg0p*1-#(E OBZtl0s0c6^{@`E21K;Za literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/28e6f61662d9e396b58eae9f08d9e80a1a126646 b/fuzz/corpora/client/28e6f61662d9e396b58eae9f08d9e80a1a126646 new file mode 100644 index 0000000000000000000000000000000000000000..f4791526b9abd83724e88a9e1edcafd1e66bab6c GIT binary patch literal 3883 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07(SeDR;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0*sdg3pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$~ z94-G@zfK=4%+qMqSfDPKDzlFLYIMG?^IPo+8++EP&hnyLt?R*oDXYvP zVIbCkp`a9`fCr>sn1$7VnUV27vWHng9&Ti?eo>J-^_p$gcVS5#=|dgslvaP~HTqgp zn0{XOqRgSg?T=or>Wq0}vf5+fA^WN8wB6^aR%H9n5?E67_xyJzo()_aOQIe8Cdujz-f-5lZAny6`UsPbs4)?EPOJt`!UNemlSroF8e6b8)mEY{&QJf)`?9&qZg|mkuu$=@zOz4XGg5e zgSeLmzn|auNKhr{zs1iQ*}MNv70qj3ktFhC24lJItNvMLmr5Jk%Wt^H3K*ALIk9C;3I5?goM;^?_Ig;K|4bM|!{|Mh=Y zJ(K?>C3T*-e`l+mV|<;%_qK2|r!X*xtbk;QUhk7}AdZi`9DFfcGOOwsi| zU!-&ptQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5h{`KTEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;Xl1WJq`;)Wd#s2A^$iK9I5~>s44gV|7T!eVA!Xmm3+@hTX!cDGvojNiyN04G%hia zWn&JNB(um_tQ{Sy&C285#d0$E7+rE*Tl@ zPByO>V%jD)^%Q&U1jg^q&ra>Glwa^iS7KjuO48L2zDEUF^vX9!%w+_5oPmL%tHQ1_ z{}QY3@3kFGo74)F^SAB`l@SBc@CQYNvI*$MPzpI|f|B{kA&%=@pvqEf^{BcP6^-nnIMdQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@o5rimW*>7j8`xqY|4eP-Gl z(f?|Cg+Y|zKMfX-mKGV0jf+$doqgrFPCE0ci%?I&5B?6XZR|dcG2uV9*`tPP&DvMKoNKCV@sAHvspDT0qw;p5slyb3EBlnRlJ7Zb>+WP?W@KPo+_>DJ zafyK}8*`|v9E%u>$j{kJ^Uro%O(@)cNx|ip?Q}j-mQMzyAZcZmJcFFsSQRYfb~jjJ zVCdcW=6*U$Z^RHj!Q-cyOYi9g_yR9O+Ce4 zJAv`L^RrXCE9Dpb(UsU2osx9*gYQv67QOP#5p&lRSylub*U{{%u+y)+#OnKdZAa54 zwF2e*t@}K#sDJu%*mu|d_}bN0@wGqrJt9I{ge(5EPOe_2{C1ft*W1)NJvL2~l7CA` zGCq_@{dFK|pTzqY&CVAlf6aSgzbrWQ;vCbG#2Kd34(Q0<-5R&2>*a@MW{x}uH;Jvg zZE^J6n?k8$vN`)YF75h%yq?Mbmy$Zq!;%fNLTr}&aY*^~PdMpC=>1HisZ$P3-4?jp z?>RS{-!{t)?<}_j`~KHoywxL)Jz!gx@oeee;R4$holy7rssADK_4*4(-zxW{&kqn| zW@Z)OWnks8Vq*CJ|Nk!r1_sFuXT4mpy5RV)|GVm${4Xh~@x=W*TkRa<>m0tfg_}8L zu9tj+`Hgu?9!{&>_g>~;RifaLexa9%@tXgQbM4vLd^U-2rKlg*(SnP)-YF={#6C)!i7gx>8gRO$cV@>0HJ-^_p$gcVS5#=|dgslvaP~75iFK$RMj=z;#?C#I;Va;?(?K07TJhTmS$7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/296702ef52ea7757c552cb4666b3a582b0ad874e b/fuzz/corpora/client/296702ef52ea7757c552cb4666b3a582b0ad874e new file mode 100644 index 0000000000000000000000000000000000000000..47fd987d893ea69ca57d96298e47e3684c776bc0 GIT binary patch literal 542 zcmWe*W@Zv*VqgelW@2Dcl3!O=HtVGFnId*g_9AvR9?7Hq>aX$y98WJ@|Lu;#J{Q+u zUFXkJ9wwiEv(zHdHTqI+xYMa;Gc-=}%x-zg$iTqFz`*&Rk%5r`1h^R(w=pnoW?0A|oR!19M|9gF#~_Q)45`zG~OVjHtCH z6JC~W>00x}>CL;AqKqF+CUWbackwKF-|;Q)_WIE6d_k>e1gln_+pM%iu}1vmi%Hd= z`@)KTz4<;*v-zfa+V5>iu1X9{>-hZKE*AuylM8n}bhrOn?c+8*cR?{ZgW1#eu80(T z{N>p>=~qdS1!^|sbG#Tf*w3-hiLYd0{{EkFv6O*?0Vf-CsH`vxlL3PPH;Bp4!otkN zx&Ybf+#shnGIacGFgbN4l!dKvflNw7%WfMZ>$MRl&zgMCm3ucKMYLn9OX1zA*Q~|; zv`nVOEHK?uiGqtdQ&lVslT*`-Obk;JlhYDY z6AjZ+QjHCbO;b&c(pbgkU3q!1YK?f|u9lLL>hmV+R?VGqV|^bV0|SEyGZOR@b3GnRRJs$eykB~oH6ymo3ly{(=S&|dHdd7^_k}z1-Y{h z|FbJrg&pDCvGMMG=Ag7Ec1laX{M!8XZ{yzIVGH&h;9_9l|If(4$ncAcfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys_85MW@S z;A3E5AScdiU|?WiXli0%YGGnw1mdcLM4-UcklTP0q=`+K$sp8F*gz1(;o#viP`EHh z7o;fFP|-jhB*?`hVPasIT4a!FpkR<`ppa=`0JkR6K$wjk>=GtMsFRo(gq59`KIU}j|e zZ@>w4D+?pD2ZMntlOn^X1*RpL=?msrhcXZf+SKHf;zVN$6Hw3^ni*Ic85X%xC#Pj`!`C8iQ)T3;pd32ecU& zco~!#82&RdFfuTRGcbrTGc(@hW?;O@z<7;;@v=b^<9UN7#OpHuSoD4VhS#EjO z?tg8-$;PhL=5fxJh0(y(klTQhjX9KsO^C^HilMN9Ac(`k$rYR*oLcg>L^n0jP|-l1 zO(K+q%SOVJ0mDusW@g3|137VCLo)+&14{z~0|QfoC@|N;zyivpn>Cx1ce5!?o;JO5 zsk)E$Wv7>Im$$QC5({il|3A^DaMs)TwNh*xCZFS)Urm>hvfi|>ae>hP59{3>&8Leo zGc#=CVPM$A%pj|vE0cNQ^C4UJHxpuiz1VdAcaYN**6G%KWpTIa&VI9Z;b3EC=rU+* zXL4ekeNuIjMHa)Qdv4{;>axH4nK!S{dYSFKj^AQR)4$*O3+4%IJoO?|ZtKY?zq$6x z%OlpVEhw_*d&rrVa5Bey^Zv%uOpc}PY5$A&8E&r&d=VQYZmn-9TUMqSop${5q~4n| V=P(G&xxGM+WmQw!e8WGsy#VXurq2KX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/29e724648601bd9b2fb04e47b76455e153e74bd5 b/fuzz/corpora/client/29e724648601bd9b2fb04e47b76455e153e74bd5 new file mode 100644 index 0000000000000000000000000000000000000000..29875ef7b18c00124e46c049f51668281ac34c09 GIT binary patch literal 1341 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D#M!Oxwh! zo?@?^!1&$y*{R)?@(cdxO6-eHNxJ&M_oyI?Uis#Txv&W7s<5lfzr^bMdu>P4Cba_P z{H^;!Wd%R|IqbV@e|+s~tN7X<{2mb@Ey5LlS|?X8Q+~TlmFsQloRY(}#mT=VBpDw{ zr2aaPv`^ywi)QCblfUM@ux|@ay*S6ZByoo6v;#V_celpv>3aF$nVBQc!A)Z8Zd)8Z z_oh(lm~76zj^n@n@2Y3=zoewj^RQ&YtPqaa(&q<=F*7sj z@GvlHFf+(1=*nbX_||$Us>F(y1U=(T{t+{V8JjV0TayE Gj0^yVQIUNB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2a57460a1c2792e8349443bafca20002f6a161bc b/fuzz/corpora/client/2a57460a1c2792e8349443bafca20002f6a161bc new file mode 100644 index 0000000000000000000000000000000000000000..5b8ff744efdf5ec6ead0195ce56c771ae062cef1 GIT binary patch literal 860 zcmWe*Hej%2VqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z|DA!6fkBypfkBLcfkB*sL5!J^nVW}!nVqp=gTW{u8)y-u^TPS_XQAr;3iNq5T~t_U zb?Maq`v3p`hq7=oFfuVVFhD`Fjv)iXG=|*s8cH}!UWY@R8o+{RL-cT{G{hlJHmLtk UwpLt#7mI`#Ga~~FA1HqS0Qmu-(*OVf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2ae9c8b256ded687800abd68397357ea89488ad2 b/fuzz/corpora/client/2ae9c8b256ded687800abd68397357ea89488ad2 new file mode 100644 index 0000000000000000000000000000000000000000..a65aedc350b63422701ec8651b7bf373e2a7b3f5 GIT binary patch literal 751 zcmbV}Ur1AN6vxl+&#rE|*|=j0p-qJ-B{^GJim8}Lt`rTs`LC?it~Rvm(5oOsOogyV zsYD~SKZZ#~h9U&Xd@B2+1wlj*N|GfCBYRK`y0K*v(o^T{d(MFm=X0!#K{^FUW$g9v z`*)>PZ6l`m4qN-o*!1kie*bwEAX zMrCXxi#Hf0ld(o$ zN>rCB+v9OtuxSuuoQf(pC~~Py^|)(1YNM@KZLt-oZj6gI+V|onuavn8mycga9xA2rW2o4jkMN0h>kq%XgX6 zCMyl9Dl30P6ss-kZZv<&{6g@VkwL7;b;t;b556|!hZE)jtfp!3_WZc1(>!>%t7`03 zg)gG#?$m!>TYJ43md5(OCEMM~%ONY%0xOzE06=?gu`&jGA_0&=tPKs%EJyP$m~rt? iM(u-C*HZOQkN#Sc)@!J|+&*(4moo@QfszbL5`F>Le(@Lp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2af69f3deb1f1d22e658a813c11073ea11aefee1 b/fuzz/corpora/client/2af69f3deb1f1d22e658a813c11073ea11aefee1 new file mode 100644 index 0000000000000000000000000000000000000000..0affb3283080efc547974db3bfe1a8b07116babb GIT binary patch literal 832 zcmWe*W@fNtVqh?3WX%xC#Pj`!`C8mpiNFMe?b23rOO zUWRuJ4F4G!7#SGE7#PHunVHhK8JLn7nBp0jVhoy?A`F@s4=!M4Vq{|C^jZD;?*=`A z**pfkY@Awc9&O)w85vnw84O$vxeYkkm_u3Egqa*e4TTK^*_cCERC&09^K(-bgG(|? zQVkUiYpRQcDyR7$6{^q*B4BB*j2ZoY&CAz{JSd$iURV#2`wX*U;R+ z#K;KBMY2W+ZcQi)2gDlP;F3f%Ysw+kglDFtXOsF z8ygv{UsU8yy=I&BU06~_`cTI@rPW`0O}^F?rk~eEiCkQ2vt3=CUC!%XlsR;`{n5)k zoiR_$S9?r6WIuJCw);HQifsQ`0!xbip8w9ovw@3aNz|jKC3W(~vX!pFeCAi~Vdz{tqJ%*^2M^?USES%s43caM(EpKA6%p zRTOZhrRU_s{=NGBN7hZAcOdA~;s@dEUP`6bpQb1BJ2U^CSiw>!-=FF$&n>iOjtYN^ Yh*YR9*wRfLF}N%>fJP(3R2C2m019#krvLx| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2afc7c4bda5b2ea6ce35be821477e2ce501f7923 b/fuzz/corpora/client/2afc7c4bda5b2ea6ce35be821477e2ce501f7923 new file mode 100644 index 0000000000000000000000000000000000000000..f39f2327165020bc3d81dac211bdb85a6e1622b9 GIT binary patch literal 56 icmWe*HefJjVqj2XW;P%I7!GJNa5FHlFfcG07ytm@tq2AH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b0851c369903d9a49b5ee248e1b5399297941ec b/fuzz/corpora/client/2b0851c369903d9a49b5ee248e1b5399297941ec new file mode 100644 index 0000000000000000000000000000000000000000..9ba31a103cee30a2ce61d066c8288d33dcbc5ad2 GIT binary patch literal 2193 zcmeHIX-rgC6h8O8H;-8vaO^Os10x8^qP;^I1Y{I7=oE#5Fo3BAg`%aX6$IP?hed1M zP#6)=j+jyi$kN~zjo<>cwThrcaiK_EFcHD3WpR1U8-~_I`=kBWq~|5~ymRv1oc$gt zNy1zLKtqyE)z@3g4(h7R3$`jY%<}!9=IO%ZnVS~uEK7=8V%V?LDxUdz;9!Su=5wz3 zSchx$f?K^e3h%~tEM8OA(AbsP8CCy207yxa{8a#C9grshUBNokgmoyzKoSTOJZQrv z;?ZW#*_umgZ-o7n0?eaHEk#KPhEYneB`a`+e2j7IL>3>b9E)vPC0{6G#Y7y76?i4a zaTqItFjmaP7~5EhSgcaz?y2&0_jF^$@vO#p;J?h!5&~=AG^4m&^p+WStTdU4!-_Y} z%*PUw>ja{?#u!MD*v}vcL=c<7L}CJfAh!~!73F!oxCJF1}E6wl?Z<=KYF>-ffZhIyM%+>zoff8(u`B+-@u*3 zosj4MlRhlyd(Lc&=>&-Y8K>8rojx%_<`hNtaST|($_|te^J%UNjW`@Lk}{1bLJUP< zz}76pk{W?6bmohb*RGuu{Y7Hj@+B)*F2y36=bWv{?h_#--~g#Z2zIsi=;?J#!iGS@ zhRS1hwXS{oqRH|d587rk(;lkw%x~XHJI^M>bN0)W7Tf#-9u?Q6=a0v}6h<{zx_Iq7~Wklq?Y?~?ZI5qLhuK0CFt9rgFn_7KQ&{HkcyEIJs`N^3| z?}csR+&E3CweEHqeop0+EE!R`w&vT2 z`5cD<8}-o&%FA`2>ey#5wyP4{m=zCaEn5(pDOvq8YxlYm`|c74es^rqRv+E2m=`i@ zbVn9DSRZ{#*3*?S^YZTJ%e$s!hr~7)sgf4uH|y(N<+l$<`hGh2S`yu*{Uy#VFZWE| zk>C@74+M1J5wGgUUbP_sOx$;Zu_>A`*XGjo4~SHa5Qq;E4EM;P{?Lfx6aEENx55o#6XbJv=SvMD_!xk3VjJJexE&E!0EjdWLK{xU*t8jo+0AGMFo>;bGiN}~ z07_LlW91?5OQn)LC_}Z(n|G^`p&+jZr=xMi2nd zhm0{PjOQzh?Q?X^iZbt(ADJ|UVYCzv5P{N%!2qC-QMxW`nqhX<3 gseEeKSUdDLOl$6((s^gCN*ABYlO{L#Ck*THAAl{L3;+NC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b169fdfb3ac7a2ac172a220ebfd59ead54298c6 b/fuzz/corpora/client/2b169fdfb3ac7a2ac172a220ebfd59ead54298c6 new file mode 100644 index 0000000000000000000000000000000000000000..6929e35e30453a1698c63b187314103fcefc1e38 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z|DA!6fkBypfkBLcfkB*sL5!J^nVW}!nVqr0U=RaC0&deJAU_CzE{Yre3iNq5S*=vK zc^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwao3=EwA85tNEK!BTpaT^2UW(LL$ z22G4>44N247cet1GBGhS8St`kYPET^edlFlz{Y=EP3DYE${aF(CvIdt!D(QR-W6ev_z>!{N;;D)t~#qihjNM zK995crh3}%ZAq?5ABxuT`MFs$Sh?t18M|Fzo3ZF=s4VsfUlr|n%4Dfs%!vvbm~ zk|GP#=9Dvd*=(?%W1$mY$;8aa@Ncn{frJ4k8*`|vFbk6bg8?^)$*YkSuHR6T4S_(_5&zr1YHFwI5^?iH{3=AU7%nXc-V$96oxKscE E04=x07XSbN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b4cece16932e8b35af33a8d9630dcb0bdddbd4a b/fuzz/corpora/client/2b4cece16932e8b35af33a8d9630dcb0bdddbd4a new file mode 100644 index 0000000000000000000000000000000000000000..8de899bfe79722faf1d7b6a0e57de2f67064d21b GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB3pIrpA1St($Xw>200BsMV8J+SK#?+;SzV8 z(FS!qBU0+%f~JlmHC%geSfd* zXxgM!pq#&TpT`yTPk#>k?%E$;yV@$g_6NU5L`aKp#h=#6)ytIME>q=tn>wfDaBXq& zZwX1phZ3p37?bu%ynoT`d};F6ychOu!KoMLSeGQuFr9WlNA~X4xIJAjKRh#YsOd&1Ua14)`4|ux-%^b)TR5A2MIBzi{-ea!>mF z05N7}MjajoMh#{LSp{90%nP3n*}A`(5c})Jrt`mpoTji&x8^I0yH$7ho4pGM2OBIH JMl4`b1OTNk#{U2S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b4dbf27f1ac84529545e2c6d662c528da7d8a80 b/fuzz/corpora/client/2b4dbf27f1ac84529545e2c6d662c528da7d8a80 new file mode 100644 index 0000000000000000000000000000000000000000..33f0cb6acf38888e29feabc6a58c1aa604cb2139 GIT binary patch literal 2332 zcmWe*Hej%1Vqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`P)(g8y3{1P%TV?+-+0)fuyF4!|JwWC3v)-wPm0uh)`shDH#C?7K*OIAXwu?H|qBpqD ztynVq_oG)QPI%Xq1fRM6FQqu~k+WP?W@KPo z+_>DJafyK}8*`{EABz}^$j{kJ^Uro%O(@)cNx|ip?Q}j-mQMzyAZcZmJcFDDtO^!- zE^)^fZSd4#h%IU}j|ej~tiW;J9RDushkjUWjR%*wj<(wG$Y> zJ3l+MyHb9^A6*VTX%5Rsca=lHR(__=LI{CMRB;!Mg z)L#dZ_DQ^d(d>L-^4Gi<_HDtb7v`9jB+f9Mc0fn=?$)?HT`xa8GjrrQxJhi?ZHuGl z-V{n5lg-)JacS58bAh$e$Tnt z{I*$ccxSmK*!REw;;kNW>;c=ljAu*#4j0(A=!Ck@PyG*>uh(BV`c}CoeSUx#Gc&6I zF9R!&6%)h%|Nnn6Ffd4NIP2w#)dlWi%*+go&S3Hon4AJ8Z!rdf=x5KKJ!1qB&ytA) z4E4mR!v+Kx&_$UrL`VQo%?%6;l$b(Sz|ipjKUNDV304RIMMu0QNBs`g; zhN#SeH(MIT*D^48B;W$r@@ri(ij%&)Xm*|e$*(D?7xCrSljYF-di>Y_UG+@aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1oNb-CiHMoiC{Mj9}HubDNcxDAtJcy_i(}xi75f z*PHM2G@Ea#r~TfRQZ=j>NRU|KP}T~ zF$+vLnQuCG&8}4c$;)rdi+9F6a(DeD|2^ehVxr)p&Q#T;|BAgTCv^kX9sRhGWgeUT zLho~hMJk`qt0v876`u!*Dh7p?l9KB4M(bD2opNJ+A0Gn)g9tMN10$mtGXnz)C^i9j CroQa} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b75eab7fa2fba9d451d6d39064350f1be9625cc b/fuzz/corpora/client/2b75eab7fa2fba9d451d6d39064350f1be9625cc new file mode 100644 index 0000000000000000000000000000000000000000..7eabd3ee4e1080d9678a9dc7f2838ca9c833ee33 GIT binary patch literal 6690 zcmeHM2~-o;8oo1=1QG&>2>}H{SQHR}OCW7Q5hz-)1;rwQKtTv8i?RqoNmY=rhzLch zh!4=(LRADoP*x$bNTq5;ap|KjC`S=&6;OG|@=VV_LP6oRp5yE5dF_8rPUhZoXYSlP z|M&mj|6K-#01FfV4u;fK4621b@~vX7h%a3?x1N^v&_cGQlH#kdv;mBp3;^;#2LLew z5CBvFU|gCNE(z!5F!!4 zWu|hFOu}3VBpPb#YD$Ajcte&-aS03I8M*L%`8-oCsEKz{sH)3Dxx9!_9-rkFy&wiz38pgHtVkvDx8nzPxG<{MALpMILSFDJi0LIhY`8h~*- z(YQEZVAyh)ecw;)^z8ESwY!!bsq42tLw4VyUB@ZTnwPZq(DwRMnwv5LJ}|vJtGiO0 z8LpEN(b5wluuL4>u6Q<+5!L+RM#mPeb>35M?t+!s!xtJhhUzEkAJSv;)Q`zr_Y5<# zdu+J7G_^!`&niZD^Y9YeD)nOCA~pBM_Tn4I0+Rbt3;{@^To#`ft4Q1Sa|1R}%`L_B%HM0~+)7S%BHwLsCT~Tjr+R@n~+Ua%QywD+|(K@r((Ei}O==CeJXXQuy zyLAwyo}kF)dvreF$0%u-uM7T8Gw7KycmAz|z3V@t+;ef;e=H&+nh>Lz&U4a~n_ZNv ztC&Ea>uRKVy6*tFOx9~Ho40*F1495o0gU+^*hv5&am*)UjgVd4U)|5xbw@0*ArqBa zf3aEZ?xP~96B>^@q4(N7o#TTJ$1Z=ij@Wt8sEt*<>~KFlZH<+7@3T!Y!7XJ&o_Ts_ z=WJ#3=Cm_ zNnS6RkVIa9VG?*@IpL{>1%gYh;vvNnn0e&(G zai9>S?uDRQ;OQZb_bSVGnuLO!Cwk6_pNEt9nQmaitqc3 zA1Lsl|06r_RR4v8%HCa??2moDqrRgvFbtfe0#JehRbRr(^OfBFOYf-t%So_^*mO?5 zAU$3@5%l*fiOsz`R_IrJ)SScnNXVnd`! zB##>v!Q=WGb0apu75Hwl2=;Ipv?CE*HCO;Hf)*rMLlQzH%Ag3tD3H$&kF+#Fg$M#_ zD#%momp*UAL=OL581JTI|4WUEZcr_ zG_cq1ux2gi%JH}A+W&Xn`A7O6^)Kmv@r}(~-K!eSrt{+suRXsc6eO(lS)&`HSmdSq zID=!ech)tL_5$vm_YIAz#~D)G5g3<0i6af=d=vJ4^7VBaE8AF0hpn;{lnGB^)OeT- zg&Vd{JK(G3`S#PM8CQZVZ948sQ(Z2NVy|#lAsLicXjgj>zR{YQdC3t0hKGZHNB^!O-?mue6|%@`fPil=-|FOffhZQxM#~@oyUjgQ6BShQx^-r z;Et%yLGG#YhU@)As=eLuc9-`Igmzmex$v&!a`?XcIs57tYTPdOu1)Fb>w3qQ+EB(Q zzWHABrJpy>{Z?axDEZv5xF!}|*`}>Wy~jV1y?Sx}sEz;dOPXJ|Yex_}b8lm2#j4XQ z9?FqcR9KvNVsXmFNoPN@G7})}#{%TfhkxhH7Qr^Ogh^zUC>)jse=}7fWFDbjM^v%kPo_wyft1$B7y&bG` zMLS5E8}?qHJ*^=%{2-T=XqGhU*2z%80AStfy6s!>c(J)nnembO&r9}^2UJejtd4v4 z8}2P;oieclA7nH1;8|31?a|tQhWB^e)r(oz*I{EMLv=ry@ncR`s7HBh40nq|LAHNj zO|zVHJN zXRe0k%~%c1KwPG+hRStv=)cxdGy5YHBHEKlKVIbs5k&xn2xTmdy<#ZdmVKr3t=eC& zu9^U=w30dPv#pTrvkic0!5YJT4XnGvDL7dD-x^rUCWE#1cY+m@)M`0+8>#(|C)U9&ycTWrf5xn=j*@o_3QcC@_(JL&Dm_cQXW@i zG3A(jI~l1;Vas~A-jyTVvdQ|v!8op{G^Nynp4A_-({WMjJrwEul$>(5rQg~G)RSLV9+8=pM~IR^JA@M| z{8~sGesMk4;nIX)#=sz`9y?RO21|H>_31S~Bwaz5rtxym3zU~A95t}LbaOdR;)Bi7 zskQJk1&L9m7l2BEFob6WA%ws3SgPuB2ze2ZXU=kl0+u6$IQ#wmBk`wAn99_qw7{FJ z{EfX02g4@r!HqqoHD(e#dQLeZ!4Q2pfM5UtVjO-_F_$wg=0aS|m2By_O(*6;8VaHG zoCM-~BDD!r(zT>rEXf7_kN;GlJQKn(QYjsR_r9`hXgaay1^l3ZLkCS=X$a6Ce&-i5 CRo|ol literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b767d6ba3f690e26acecfc2acc0472bb5ace5d3 b/fuzz/corpora/client/2b767d6ba3f690e26acecfc2acc0472bb5ace5d3 new file mode 100644 index 0000000000000000000000000000000000000000..86bda9e4839c97089d61a039026a3067fcb59295 GIT binary patch literal 432 zcmWe*W@fNtVqh?3WQSimb1>fcIib|~Ud)7*C7J09<{5@E9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*>d=&A^zzz!=NG7-i7J7-rD;cL6gKBNLN=wA~R)lSxgg z$)&AVLiHb~7;v#MGBB{7vt?msGH5VtU|=xhH{fMsW(j3hXDh-dXwbmMrqwLeGt0%c zfsu&;3?O0*j11NW3=Bv-9k49iWCOU#$cBI{XD~q4hH40i2XkHnODHoBTTyW$SPUi# x7A$}ZqJsG3#91yj5L*}+7?_yFEEyP>8BDPR+W)2J+wcb(D2&4l8X?Y?0ssjzQ?md7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2b76a2b52ba46b31e3bab9e4bf2edae770dd0174 b/fuzz/corpora/client/2b76a2b52ba46b31e3bab9e4bf2edae770dd0174 new file mode 100644 index 0000000000000000000000000000000000000000..1fff88f1319eb43d7ae27b9db3978d06fe251724 GIT binary patch literal 784 zcmaiyZAep57{{OU;?+$z8+S}Wv@Ib@NzQH=MyW_xt`v=R^DV38t~Rvm&^tlMmW}APNaWNwP#ivJZ+8H|{bi33|Rg=bVQh|KD>ggunp|kV;6f zfBIcvdETq=1iqi#Io&?Ove$C%i=K=?L0GaM5GbC-dS@| z+T&DQie$I3?b@N9k9Ek3R4Yq`R>kA4^eA=K0;R#4tGHQ0j3GD?91o5KCz*Y(P!eOX z?`LT&jj>R>iJ=^iv;M@qrG~#S$`1n{tE#F)RaF%VH!vdQLYR8CjSEk@nlqJ-5f_%+ zL}3Rx57g)r@*c%@t|dGl+$qkwbfbcAMHu#WNGEf<<{ppF+!$$f)AiZhQ-RMX zgzo(4*X{Y4uDF$fk550X-tOpcsa+ZzJ9|i2?n*B{d~fZ;`_jp3<3Vqry!gz6`%S&9 zsfWdLM2t653pMw3WH91gxZs~Nf64T=ea|TxUuQn;I+4nLR&DOU@_fJ^`c074HO zcYBU*ih!*moUPYxPH*vDe%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07(SeDR;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0*sdg3pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$~ z94-G@zfK=4%+qMqSfDPKDzlFLYIMG?^IPo+8++EP&hnyLt?R*oDXYvP zVIbCkp`a9`fCr>sn1$7VnUV27vWHng9&Ti?eo>J-^_p$gcVS5#=|dgslvaP~HTqgp zn0{XOqRgSg?T=or>Wq0}vf5+fA^WN8wB6^aR%H9n5?E67_xyJzo()_aOQIe8Cdujz-f-5lZAny6`UsPbs4)?EPOJt`!UNemlSroF8e6b8)mEY{&QJf)`?9&qZg|mkuu$=@zOz4XGg5e zgSeLmzn|auNKhr{zs1iQ*}MNv70qj3ktFhC24lJItNvMLmr5Jk%Wt^ckV08c$;0IkQ)o&Wz+e7(c+3t8oz?2qO&GNFP{7BRSh5S&F8prTPsjIbIW13+qN z#%m0Wm&F-ArZ6!x-sNUsyvcCk%jzH&)gqN>NOQn_+V)gK4g+yWoed3CW=0Ke21aHH zgFFU<)cvmwIN8{>+C0wLHdr?>!0La4P=f}Dr7$-zFfcG;ID<(MB4i2&=5Q7rfhyPA z)HyviO_P#;-+%T`P9pW!fuwyB?_V@KUzq$g?}dF^aO%Z5rX`6pOs5^tk-fV$Zco=s zXnJH@cUvBj9xv_sf4rW_|Cf?F&%=@pvqEf^{BcP6^-nnIMdMr(dv3w!bAb`Y|I7*1}qXNg2(`=uK%YGj};b1W)B94vJ_<1 zL<2^g;KZ+mo=e}P_=O@g(G@7T8!Dybw18`<(qVqHW;2!q% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2bd75e3d4d48570769662121ee06f0b5070bb15b b/fuzz/corpora/client/2bd75e3d4d48570769662121ee06f0b5070bb15b new file mode 100644 index 0000000000000000000000000000000000000000..320d2f376b25261a711cf62351beb36925d97a76 GIT binary patch literal 1034 zcmWe*W@fNtVqh?3W}aQpqrIT=-1+}M`PVxvzmQelsrYD4<9*HlR*lJrWi4+q9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*=R~n}P8r1LHLY#>)mxjOPuS7|RwgGchtTao)Ve!r^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwa_7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8MytcP&L3KblPB)<5s!S@OQ)Ti)&Uq1*X_TF(eptvt6`X^CQu_{$fQsz3LI75#ei zeV%6XP4%?j+mc+BJ`}Cv^K-jg5Ohv1-1X4i{%f_5+w|N8#pFz9Pusg9Qtq(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~QTHH^|WLnGu z(@o}^&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=GHfC27)SyN$`S;W0TfgO z9Z+ps{$A3x|ORnlb~YqQvIM^Qdf5sEEf{0Z1~ZlFIV6+qgWzHlB#=9~~YUEfSJ_ zMJeR@$seK4`U!iTnGVi9!e~R z%qfzS*YzqIAQigbmVCEUSEf9!DsJ9sbcI!0YMOhfGPCU>DY-b(opDEFtkK9Y!MIo; zc@dxDkTaX9-cdqK>hwxnFX1{@z2TNy_#Blktjd*!JpCGl`&;=`*9l5deLsLq1B-Io`dqx5R^0DlNnSvf9!{m;{3tI;?2>uTf(JQEk)I>Uo~OS zmV?9cT_-cvPKRKIZ&CZmKf0ZqA{1_NG?ONhl((-NvOc^ni}c zkKnc3Wqy%RMD~c|hlR$GU0vq6u>#hB#b7a5EE^d&HVmef3)6~a&$15yYnR~3VK3sT zgje$5^CRPUvIq=QU@Q-y|Jk{Kk4us$iZ6&3rI0k*1(0ta z;e;FGGO8WEIc1C8cV(R>dOXc!aCGh?Bk{wb`ytabuevpT-7h<0bQ^B{|8HbJUbZfu zB+&^a-L9y1;!?6%(Y$PlPN%!kJ9bIyubEyN*DZd#TuRowVShveUHLjRwZyc*+b?PO z(gd!H@Uh1z=7M*xJ5pMTq_@=%?yPgO>b>lg*f=<2YTB;K%B!gOpr)CUXK345w@(l) zR|N5MARduJuQ?C>g8X7&Ot^|>T1^_Ssq2#{n!1 zOHnWcSTY|8O#_y|qH8we=!KmO7=lj=59Uf# z`J472X^8VL?^DuN=*&qR=o^y@Znzvs+;7@r`_5}UWc;dwrBOR%oGFx-rf5LJ@JO~$ zH{s0$M{QCY`!aHpId1tlQo;FcetW{;R%ok4IYtgbq&{R{ZPf6LQ|a>%EyXCCL5G21*OINa;sat*bKy_t{KAR;haU!6 zr%PB5AVdtZkThVC>)GRohEXU)t9f*3p=2}I`%B0*<{ulagjaA&Op1;O-NB#&ii~h& zyvc%x%znmA67a~bJb@@WBAOd2;{5@;OjH09u$T;B4FH%Q#&*E&vkBIG8IQOqT-tvn zTpqmmc|kM(L%9Bnn%pS6xn?MRZShu9Clw_)S$`-99V zKRZ?vt}w@!Bdh$-iOHl(EFvk+}s@Ujy-koK%W@JbR8t z%~ARqN`CTqU`*EVu_`M%-oIqLx20M{73O_7^99K2pGm_2L=l#Lfi4Qh0tY#ER)7KM zmDEZ~uK5D5TtOTylE)XxW`_(~IeS8$?5Vk-^Xz%c+4BHyz!i(;7?2^b8rUyt0SYEk zWp@c3==AN|w|{w=fG6Z93Aj8VUBFA=3!_DRLCRO1DEqlceyX+2dmT|L7hoI2xZc;e z8#fZuBPQD?`d5>rua{&Gn(-I9-s090)-!IAL=o6?9P;0 z6KW3kjaTUtaBD9$KP!H<+h*Kg6TjZWayi0 MXDuRvz#CNl10lfp-v9sr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2bfa3dd2b2845abe039b5ca5f3afc334fdd0b8be b/fuzz/corpora/client/2bfa3dd2b2845abe039b5ca5f3afc334fdd0b8be new file mode 100644 index 0000000000000000000000000000000000000000..f6300f9a1940dbcd9e336cbead4de2c9424c721f GIT binary patch literal 1049 zcmWe*Hem2!VqoxKW;P%I6bQ&09METAU=U+wW@ z7!8;>8E(Q1;bddiYV$Z}%fe{jYRGNC$;KSYVj#?9U|=Y0Ajk%C3=bDft$~4|qJcbE z1&;(m5DmzQ^P-5Laj{wx%0jF)Am4*SAksh>>U1VXHV&;ekGAi;%0UQm7-zGx87E}+R&~;?*t)Z8iZf% zMO0EN4U>ut#ZQTTGPUM{C?p6a$r1(0K4?arxI?8R==t`Xa~^*Df6p-!0tYcbG9mu{ z>34-|h7nV{)yND2vC|NvwxH^= zw6{QUD3Udf?NAT3#weStNY%1bXi;3wa+gwL$ye$uIf|3TM(X?%{&D}9f09}Ei6xOb z>j9R+QWy)gTNo-BamJsRw^a8RM)|2TMsdzpy8L?$pB4P}kQ)(J8;|GZVhN z$~gi6K4CHw0{g=N7=aiI)4njB%(`l@E*|q$JV|zx{cG9|{AfGr`T&JFn)J_c1p2Qe!(AIiG9&2NmoDk9u;KK zE8iS3cTJIHMZj?#P5p|>F1t&tzQ0SJZgys7WKiH`q}W^%Vu09yhXa%dFtS47(iRw7 z7#kazSXdYsUZzq=SDF_B93(8d|J1n1+fXOO`BY##V_eSza+jC0Vk( z$u5<#lP$6@C!`RALh>E&+mC*H=R4nZ|GIzN_qp!-I@iSyLF`Nf0Gxs#=bA3eDk`!n zurzl&PyMdA`vyI(^0r=+DKtnbZSiiCfSGdSS60>Qo{qB7S++~xANAjr_;4oC)+v-< zf2>Tw5Xc4qjvWvHfn8t#v8R3JReJC&;BEocp z3YtwO(xg)z3Bq&)9zh2|fGK0_Gas<&V(hB1huz9;wBCO*&DE#sq8fW5W0(xGS7`ct zj&RI9N)3I_G#~jH{S<0Rzvb|iDS7aF?BgK+FofX`)PU+~KAV6PR#2CCi_BxMjAw)7 zMlEMeZ>I~z6|9okO26^zby03T%Xx;;R6h%{B=x0*b`YhMHQzY61Y6oEQC_n=B)j&j zm_{9ayKXNob)fN!v9hV~OL?!;_vJ$JlJ5pnhF^~?x8hwzQVQp>48+W*kirRK{K?HJ z8voHZ$y$Va60XtbaM~MuS5u`$TDz2PK_lR5~IF&aQZxiAY3D5Ud z9Te1XBL<7V!Vfzaenf}@GdV5HQwh;!srOSV6tSj|SQTleIWARHGih}hLH}2*T~IMU zo=h%$xltgX?_4%yo|`}|Q3`G|7!g;eI&ixib+=q%b?M0QlM?vRc1P}9JG;~9)vTEm zUVbx3EZR6DP*e4xr$Tq_(wwG#A4{CpB%T}$=dT79BraULRNQio6_$}TPzf&Ji$px+ zO$stYSb)hQ_ts5^wl$5xggAvsq!bqnHDEEW-(+zsIJzlit}3Lr(q=f z3WG57;oCXoZNVfZr>LpyRfrCvfZa!&$@IMR4%@kq zD=J!~(RA69D5SX7%QY&00d;XA&-VxF`^1B&;|}`ahYdC;&l0M!UttC7nm}2);*dv@ z!3X_)5=5o_0^9QrbOVP$?!gQBYu7W|!*#E=w;DaUzZ1F7A5YC`J<{#u!!I+Ic2oX} zE`J_VpvQeBY4bxnEpY;eOpvv9_kbD&ti8yk0z zfx-P$^NRk_V@L2e(l2Kuvh_VZZQuBC<>u+yaPt(Xa|)@kpFJRKdMr8Bw8?0>mCOHf zMsRki+4W4f@-GQr*T~OOwfz8DU;MSm(Z5aI?tdm1YT4|ma@GYu8Rm$>!Y~&avJ&M( zqF@LFcVNtJ$Ad&d2)0{)+LlucfM_%z!9Tq9;q3jtYJm%NL^+gHk}pn&C*E?KW{wu| zRY?n-ex@QEE7Ql>gov3P7CUi$Mzp2JDk=NsHk(LuC zgSUq=$oSmkzpP5PqS;DMsgQ1{swXf`rsrW^oex?tn_GW3)T^r(lf758<(Lzx0st#v zI`|T%gJQqK1@kA%|0`Swzr#gQ1y+OAU{(A7mPfSAKlg$t0HVbJFzpV4Mgvyq<|@b= z%D0B9SJEf?P4q~QrjR|!{rj7H8+CKe;By|N=H>D&Pe(RzIApgxudV1X((ko-@JyLk z$7a=mkX+O@%Bli7BW%>A1&k#l$RE>?zK=S!!;WzzP90+9Alfob!fnkhFOn$-USyBI zO?P?^HT>gO0Fbbo7m3FpAP@lmr*}h}@sfHIL{C7GV{cv;EsH?T0>l5z; z`t@+X*)c|JO@7(r&0m}Yraf}@8{0vW-0g>>4CV*VClcX?zQCG}U^6FANke52S?WWW6v;^{y7gu;n%{a=Lpm5Hgb;->1I5Rz`N2xe`yJuUn}&{dik?P{*5H6F?KmDgg>m5$ud3MP`b2v`wCH=fE@-dMA!HIihLpE>3IR`HhJN>+L2LHD|zVE|{a!|=0aHMuGB0UXS*Q2VF8i!!6S z`a|Sgit5JLI8!gpOgtsuG9RTIKmb4lghZj)*f}^cTv%?NJ$rfi_U-4#2?z=ai-?MeOGq9#D0S$t NH2#RpQCT_p{{U-B!AJlA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 b/fuzz/corpora/client/2c72095a08ec1a4ddfbef83db389e8cbb5dd6ae9 new file mode 100644 index 0000000000000000000000000000000000000000..ba4d6b3f91256d097697bf7b6aec3b37899b794d GIT binary patch literal 2332 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@o5rimW*>7j8`xqY|4eP-Gl z(f?|Cg+Y|zKMfX-mKGV0jf+$doqgrFPCE0ci%?I&5B?6XZR|dcG2uV9*`tPP&DvMKoNKCV@sAHvspDT0qw;p5slyb3EBlnRlJ7Zb>+WP?W@KPo+_>DJ zafyK}8*`{EABz}^$j{kJ^Uro%O(@)cNx|ip?Q}j-mQMzyAZcZmJcFDDtO^!-E^((Q z+7PLu2`TyUfUFf}VKrc8Wc-gDm)zjEWMr^A*}PteX`9&8Q|z@97{5C|JGHw~e!(AI ziG9&2NmoDk9u;KKE8iS3cTJIHMZj?#&8`YN{mM(MzQ5OYG;LBVP|n}F&*O^vr$2{% zckPd_U2PR#`-9&jBBVvQ;!o@3>SfArm#K2SO`X$Y(=;jhw}d3)Ly6R12a@(lynoT` zd|~p}ychOu!KoMLn3g2YFr9WlNA~X4xIJAjKRh#Y?qbZ$42;fT@(`Gu0w&)u27+m31gS6pfYBIizciTi0h1HKq#2m> z2a~tKq$!w0_{YG&09@{@1{FLaiUv@ifJB4X;s(5O1_u8@0H(yiz`(=R(M16)hzfAn z#efoaA3!c)if3SoF>PXsFlb^t2rffGwka5#!?2M-TJDHC0|SlI;3ZO=yio;|DzW(HMUR4(<5;%gZgu$Fpt$rz>H1W2iuLS(6T{MY|o^-TVF zQskz<-F`^95gAO_*t1?Gcil^IE7pVicgU{-GwVJQ;-1uCz zqTw}3rhB$IHCx=YX46}<@|r0_-jFF7UXtMj$&F6i_L?|K;v`D;t=ulMW>hhbuQ*(c z3Ev-=Vj`M(%!uJ=A?Awy{Od}bMlpki-#t}IlzNyg3|LWsvZq%%B})c?EX&F=?5ZmQ YEqL*OXN~o+a{mB#KaT)7`KA7kZz9S@-2eap literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2c78d44c9089c8fb4838a379917f03415ba70700 b/fuzz/corpora/client/2c78d44c9089c8fb4838a379917f03415ba70700 new file mode 100644 index 0000000000000000000000000000000000000000..e6e61186b068ff32986242703ab8e50529385e9d GIT binary patch literal 981 zcmWe*Hed*3VqoxPW{3`zRZjXT@b{>^-(r*h|AhioW`-Be-XI^Tc0cR;o!MU$3wk4zOSJ?d5Hb0XP(@u%cDTK?9*P9H4H(`eOLpe~mxvyQzlI$ziMt@ebC zJ?m9+*S!?CVm-Kjhs?TEYw3tXH`iTTmEQ4@iJAR({o()vKLc4d=1^Ha7BLo)?otDT z(;NnT@~PW@85kHWFEwag4-QOOWflnou?Fl4ctHAvSy&C285s?bJ+J6Twh4amYqgjGWtvGHtSp&*8UAQr)9!9ox$e2+;Hu<#ia>@0i- zeF(uPv9O3t*2FOzuo3*Kd(Rx^{$)z+3$UlkUjPn)1U+D4V1N#gsmgT|as|1BTyP}k z9GT~P6+?;fG5axz;+^ry_&qVEaR43{O~#RymZ^|M%GGJoTABIDqRY)nT>BO)wn%0^ z+~_31+kih(@(;@RQgnA=|7IQPZb5e=&P~1u+UN)IQo1#DyQVC1v?#p1J-t4bc2|@< veK_Ngd8B3Dw$sHd!7nrK+1fJaw7em;jYg&IO-C@I@?E4T50sNkkNX4mpe1 z9N1-MSax1bkrW4bZ$bKS*c zJM>KBxTwH)GtUbt#i1&9p;958mEx8fPqX$mKTxlhGtP&6$LN=srj#ko6~0cV`T55W m4wd$ZG%}CNrZHV1;1eAZFG{kIQUht{RFO>XP0ZZ?uebqR1z2wY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2c872c6de6f224889eb250771f1cca9f9546aa2d b/fuzz/corpora/client/2c872c6de6f224889eb250771f1cca9f9546aa2d new file mode 100644 index 0000000000000000000000000000000000000000..c70e92cfc4c296f79fef1514e995acf111f4f034 GIT binary patch literal 45 ccmWe*Hek?TVqj2VW-)*RMg}+&2?#R+0DtlZQ~&?~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2cab7a3ce75492f9ed50da2355454202eeecd332 b/fuzz/corpora/client/2cab7a3ce75492f9ed50da2355454202eeecd332 new file mode 100644 index 0000000000000000000000000000000000000000..f9b28b64ff4a6cccffb7e045775d4506389c197b GIT binary patch literal 544 zcmb7=K}y3w7={1&C#Ff-P$bg25RH@~R)jZ!v{rDTAZ@{gAYIt41Y3|6N)!Ya5~LUK z0v^Q^=t2;>aOo9vsZ48Bx)C2Ui}#qB_s>_5pgI$UQi3Lu8N#gAbwKwUL@t$xJ_HG( zB2hs~@scGmCh<(-35j?_A};PE3$RV&^c~yGR7TB*oo#`Am4$7}wqbaTw(>Bqjg@l% zM4S3Tq*k$_LnpVW?GO=s^q`l22>1s8mW!@FTSGkzRaJ%BuBCOrPmTHC8vl3AF}$zQ zS(w)350Vy2d(48_ngS!rGZE`uNs~XsWZWPzu93*DhQ(~D?%P%QHvbCOv@4_L=-m|} zJ4a}xyiAYVM=3AIa~gxe=~?8r`X{Q4lIA77rSC9~hW#k^chBSQVAzW<{YIdfsZgn4 XOVvUIL8s`dDpXLNVw)McGYvigSO8f6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2cb1da8b08cebdac2e0f22262a18799473b1a64f b/fuzz/corpora/client/2cb1da8b08cebdac2e0f22262a18799473b1a64f new file mode 100644 index 0000000000000000000000000000000000000000..65d5515cd238f8f3f58b2426b8d57b3795448d54 GIT binary patch literal 86 ZcmWe*Hed*3VqoxPW-uTC6bZ;90RUfP4({YLH8eA@G&V3aF*GqWjuPiJLgpHX7z!B(K(ugzwPYk_<{323M>d*~m4Ugj zm%*U1lc}+hL9ll7so!m<>u>G;H0Qxp4+p=6k612EyDEC(@=?3R!5WLF%viZx_~YZY zgPd`TPOjR!kL3%6)JeQuXJgT%VKpWPK(V{bArFfg98X}0H_ z{7CilVy4scJz64s0@7j=mDVr1e|XM8<_lVF9(T+_t0X=}zLJ^9&BV;ez_?h}K-z$Z zjX6|Sn1$7VnUUeY0XK-p&%(mYz}|r5`cM`#2Ij^_hMITUvy!}agy~wwKF!=V^UZ~V zxxIImU5$AxCy-`xb?cVwYp;0Ym0o85m0sG}#`)?!Gq0|(;5ti_fWs$jf9<{5z47h& zy#G>uU9bMXKjFib8~BxF-8wC$mBHOXf)cxvZcI;c6|Km-b776T?<&uF-lgs_vWy9XkwHDMc;cSMs6fmGIERJi9T~9BTGXwLkkPk=rfGM z7UO7fCyE?*Uz&VOSt?B$$c(#nr|*8=#c-}Q+(KOf9Cx!=N*4~1xFa?m;MwR=!#d_r ga0X;xV8EH9jL3)*l8ImSQ0xq%h3P4g*U_VIaTep2xlS|4A$_B6%}%;{u0- z@!P#Ic$Y}92KIBw)$686Z|ZH-x((Fow}C0i51^g*y*k^TT&r#kxaRWG=u!3cM$I)J z{W`7H+|}=&UeLvH^<&!px%YY9eR?*%Q2u7McU(I&SIhTC_TQ9t*DEq6j?NQKzh*@h zX~1u!)35!pkpV`yArX4 zybQ_=4F4G!7#SGE85qQvnHleLGcev{V7$h_c-f$d@w`D3W7z^`CPo7$PKKKXP{7H? zuGQvo&X$GIz}1l3fRl|ml!Z;0$sp8F*gz1(;o#v4HZVxl4K_$LNHtV6kOv8J@kn?Y z7^D^%q#7s~WTvEN8Wbx87*s0w7^E1;iSxn?2Lm)NwXBIW5QaLPiII&1><4B>c4j9A zmS@_TkM^g|pT19Dj(19z&(-PK+gHl*y8XVpa;4ndJG-J7pI@84f=lA(;UkOX!XDK$ zd)yY2lKCoI_i>7@_xU2FgNp+U{0wB-m_udxSj1RF3|b7<7#J8d`H5Aqhb}dEVqnl@ w01gFNWflnou_jan22ce&ApOEDtOm?Xj2n zzWC(qO{3lkXE${`PB*-jR5$1Pf>hSyh3#jV3^)$x`+S)xdv%@JCCfHuDeLII7TNRn wF4#8p|5HeQwn8&PHcS3lXwTV@cth*xY=KH11_niD1_?$67DzlWDB!ge0MB=|bN~PV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2d395f4fe035526ad874775ede1e97ae00c5eee7 b/fuzz/corpora/client/2d395f4fe035526ad874775ede1e97ae00c5eee7 new file mode 100644 index 0000000000000000000000000000000000000000..9c1963103299d72a2246e53ab99da310777d96de GIT binary patch literal 435 zcmWe*W@fNtVqh?3WQSimb1>fcIib|~Ud)7*C7J09<{5=D9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*>d=&A^zzz!=NG7-i7J7-rD;cL6gKBNLN=wA&F&lSxgg z$)&AVLiHb~7;v#MGBB{7vt?msGH5VtU|=xhH{fMsW(j3hXTvI3giR$@K^kjExKsz9 zRSY12=CL9cW`+hfHmzm`Mh5F44N247cet1GBGhS8St`kYPET^edlFl0R3x9mvc91h}(aBYNcbs)~yc|Adg^7^u ze+ZEOyo=#nYq*8Fgu7yE?9Ev$r3=s5G~07dex&+&G1KY!9xV|*0co+${=NY|uD-5* zA^vVIu5ON@J|U5>WF|T?F*7hQEtWEnFyLfk4wV&VVKQJa;07`ISy-5vSQmhu-U<&4 z=Eg<_uYb}90(zq>HKwt7-mEL1$e$PQyoNhqoBk)pwa0b1({H6QvhPi8J+tKLhh;4{ zL(a^0H}tV%<$L9xF87;x+SVrx#XW!J!fVw%z8-Y>l;dL9sc8BtmG4c(;__40KfZI6 zMPJ&ipKN0Hd-ESjE}>?JX&(%4&Q6gzBG7$o(Vun2b)9?+3=Cq-j0~Dg3=DqtLU;ei abGV+}kFR%Nj$^!sOK+Dbm literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2d807b57a42c13f18abbbeb360a9d5d98c6ca74f b/fuzz/corpora/client/2d807b57a42c13f18abbbeb360a9d5d98c6ca74f new file mode 100644 index 0000000000000000000000000000000000000000..a5f393cad6497227e7fb5262bfc8b207a41ecb93 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W(NG;lTKHsEAq4rMVAW->4^6gCiqaJXP<4Gatw4dfw$5(q&EP%tn6V*@#H zUKBYrE}7PVj0XXQ3s7qsXB!AW-Oj|w#;V=O!l2CD*v7!Z=zP&)rc%KQ&W01O7v?Wq zR@-K@@tY^J_Xsh` ztY%!#<-=~5mb>rs>iU-_P0G`*vBk6cZ29{4e(3vW^6Y1Bzi%(MtC&-?aVyvQ(&Z0l z9IbvU|C;TQ*@Hu;a!xEfDj}e`xN*5b;}Qc|Hs(-SJ{B<+5vc1?K`BUDnI+F4rva;i zg`P{?4NIU}j`AKuQ42jXez1FrP|5jG38X8xI4+CT0d%1znlU3!e|! zy1$ta`|HJ~^S^_frm#-8<|~W4Rd@HBy$c5$Geeg_V>^=*pu_Ze=l3w+@pByO#5C|g#h8J%|gGXukaC}2PakC8bb0092-2$%o> literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2d809dcf1f09df50568505d2d74eb534905206ea b/fuzz/corpora/client/2d809dcf1f09df50568505d2d74eb534905206ea new file mode 100644 index 0000000000000000000000000000000000000000..4da2ea1dcf3be961eaefd794585f89f6f467c00e GIT binary patch literal 11433 zcmeHN3pA8zAAjC?XNDQKGz^6?E`>Ba2D?iMtCn^ttwdO2%(~Va) z{{P?qM@11}fdjxCMH;Gx)xsY8*3ecZmT#EfNXd9)A>CF@_LX1W1SU-i06Cxo03QJe z04e}bQ3Us;48ZvToDaZxK`zc6a*?LPC=S8lNMP)wqetII}O4@Qvv6BLsjZWB{13 z3zv`p3=G?jFdz8wot|Ggv3~c8qYZ=hXG!i`wHwS!a~7oRJG`UuwC3ilfKN=W%;~Mx zrbXyvMYi>Y##$y1?@&0GO^t5-bdzHn%evqhD}T}I+|i3oo5J*y^$+XO*y_inZg_?> z?4B6zDNirc-Mfa`+d8_;wnn{_y+qBuxwG`<@qpAp9Et#>z!|QB8bs7pLmp4XEA5WH zQF2k5C$Gt_9$m)^IU4;-a@oXYYUtoqA$7;>6J)XbDR=@z5ri-L!UXJv6Tp(*n9%H- zR>8xRd5hJWQ%kjrUt}S2l>8>+kxYeSuyxH%}lnFrp(-u zd|ibkrTMN5%`*cBNfpvw>zV8w3#ljq@bX~7=fEyJ0Lc?R8P7m=_kQ~zYxiBgz($N! z>izkq^?Q!-gidHQ>4e_v_jXTCIugI~`36GwB}NCmcEyoFrHpk}+WpTr#|5`ljCdC4 zottl7uHR>4u(;+6^?TlZO~dWw-HN)O^FJEdrg7)hg~&rYkNGLRJb-LDZmfj;00DgbOPiiK(0Y9(hj-EX2C*y0V)9`5v3NTI9#^EBX7&+X)1DW6|cfa{iD4Jk_Bit zWty0Oh@ssKnlnuW!&%?FaBP;K!skx}6)|XE4=IA(#34lKiETv@DfDB2?=cMOKFj_l zhi6Qa+n45eBWGiE5l!xsu{%XYw1cbB>W!M_SGm(AITtOLVwJov%Km5jVJx z@mYJMcGC=)7AJL-6lV{J4T9WN)EFsOH=hR!Gq_i$;a70y^a-*=6o4uGl8A@{887q@ z1g8a_9X9t~WBEY~H#YC7o^$e75kyY5TZaJ$yx=MC{NkJxj=qf+s}!u2IPecnV62bQ zKXU_54_-W^?A@cu{M^?&`bQ-yih@(J0FXgM!el$pq% zirWVSfm^W02ml}-0C4S;ou~tdz~s%Ht)`}iXjhr1RKp4nHD*PIL>Wi1S<#Vfmah>j zG6b%|!WkWJ4_81tBHmSl4&V}KL6kNmA_RgI4xusvIh=?nOJf`tK|r0%FG=&}BDT@n zjI0_OJb5m^M*5h2ofe&1=U1C%dY>HHVzl+;ijwj@UbNiK2lJ@$1$XBiYJET$vex!g z-Tc|{=eP#<%*Qz~(8J`FKHecIN!_9Ry9LcZJ+>`X3wpSGZhFK^h15^0q#P5x++Lmz zZ6;LbZarJCcBag7b@7CywurdoYhve5IS z{lS>Rys_@bZEc^$aa=CldgUMG+r7AxR?DytbL4SG?C8N=ft!Al?z}Y~*l%}4v)=sb ziFeBX@Dl%f-~2DJxs|1RO{3LhVWQ#n7nixQNvnO<>BcFPcY&5$o>9 zhK$F0P82eL-sb9%R_A z=fas-&BNmiRi3B6-;DvMRzRtk3phOP}p86&&2xCQ)L>llN{tqVwd)0`e1fe)>}G*Q_zsdB}ZL_GqIY zPqn`{(eBFLp|D=-6c_f@d~=TP0rUNhi#6_4de^7*4fK3qE8A2-Exq+o>*e1z&Hq6o zgqM1LlwTK*Tiv0pCwrfBGI#CL!f_k_(N`3|Ue~T5X7;}3?5Z_qRy~p-uBx&)`PAaH zixc0tpwhux%DF1dG*4~JZBEs9ZF-I)#sfjWmR)ImqLUu*jWZPmllhqv3MMil02;65 zw3pa)#w!*qzJ$1%jk(_IlRXoqzWEh-x0SwWWy#a86n7U#UAn)Me!gTUQ8Q%UMar`} zV$;tuImxCe<8Iwl6%+va?VdZnRZo_h*;E)EZTzZiKWRwiq|Mrd55H&KrZp%Ny0A$$ zBM+ZPr`8{<|5wCd*FC+s4Fg>^3@KUnQ(3>{^@Mp;#>cU?Iuzyl2i6s2)@s_y=k&>d zuNP_EbNe+*&){L1DO(v^so3pBk(WW`&_;!&Yd3U|-76#3$g}nGTA)xkCO?!e3}X34bBsFWv$EtVBYfi6_wBg@kB&aFq}k z5(48d6Bv3D2IKW6VK5{N##9ei!eIP=cf8((16#siNIDL$>o{2cuR9KAOeWUNpA>$f z%5nR5QPUN}SM+bYCxgFjlk>BOHA$oEsZKwM*H5oF@utcYPoeH$%4RB5h6(6&4Vdbb z2FyfD(vgz*$DjF!h%iu;{hO}(6OjpuQS^uv-k`CT$y36105 z)DwPPn`v54c+X@{_#J68VXdW-$U((#ua{F4(~J7ne$LFqv{fJBknS%@Y3JGotzAGP z>5l?9M4SK);z*zq!YMK6dPo_4c_ZH8@|13iib7C3A#Fv6%h-X9nRP#>T*WQVVCP?m zRbD24%)s{Yt(9y+jA|7wt%XTj1tu%}0%XY$hO!wDLO6|ohL9Zz*=BTS7)y7A5bN*$ z^_kdzn=+N@L!pF0RDd?|H0CHebq{9DX`=}f#B0xKLR}QmmjMV05WvU6vrtoLKB*~$ zn5Iy$rIR+BrVvta5DMkG5Ze=>P04kYw1k)Ff-l%7_NM~nXb?`cO@&jit2163noR9^ S5hp0%@F5dd3Ig;;Klm@a?St0< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2d94013f42d3587ebbeef09f917f3cf900390592 b/fuzz/corpora/client/2d94013f42d3587ebbeef09f917f3cf900390592 new file mode 100644 index 0000000000000000000000000000000000000000..165cfd3bd161ba69a30e9db84d406115a7379e61 GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>fcIiWPBeS-7KlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB#HfVq0Y+8^<|amd27@L> zE~X|%M#lfB;2$a%1gtTIkidH+_W%Fn>i>#r3K*zEs0_H2R`Bbhc(X}er8|wgc6B5@ zK+-;m_b-~AFHQcM_rks{IQ8Nj>ypG7rqd4S$ll!= zx2NmnhiB%FJO?+4t-Eb;^xT_5sbjJ^`#O&Q`oF85$^Vj)I?uzB4YNXQmi%!@`SnjY z=|$-MOrxn&4o%$_xZ6+i%g=S&EH}Kf+!E~jUw`pdk2vXVv)Q|h1Ad1KY+H0f-RGzN zhs@XOFC2ZV+><^(K#ZB0QHO_tQG=O5RzX)L^TOvtw(f5x#Qu75e$($Drzxz{t@+C0 UZq?oWX79qm!3GP45et|U0a51SPyhe` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2d94f8707a91b534e049967f45b6e6b8aa07c521 b/fuzz/corpora/client/2d94f8707a91b534e049967f45b6e6b8aa07c521 new file mode 100644 index 0000000000000000000000000000000000000000..c798bbb872af9dfc1a925f96ee91607414dc4f37 GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W)`iR)+yE_nD6?&<^ea$9f#@HqwG0l@4r)i&nfgs(`X9A0c{2b zUIt|bhX0HVj0_Co3=Cq-%#3%r85nOeFkWL|yll|Kc;29iv1|b|6QcnWrx-IcLx%wf zaI&#$wRxPgWnnaMHRLwnWMd9xF%V`lFfbH05QK2J0zyL+z={nF6%FJef)Wq`Q~*{b zC(er^ipIrl4MGYfF#Km^U}RttXJ8OxW@1X?W?)KUV2Wp8iZN(niZEzmJh*_FiIItkli~LUA3a5Z z**pfkY@AwEo7%qfGBUEVG8niTavN~6F^90Q2{So{8VVZ-vN4CUaPV*i=jW#C2A3q3 zq#7z3$g?qrs&ny3c;=O)7UiXuD1>LGq-T~CD+H8OD)^M77|4n98k!iG7#SNGm>QTE zM2Yhnnj4rH89}))YeG@2vBqKz3vO#l3>xQy-QVT`c0VI419M|9gF#~_Q)A-|ZH5!e zjGiR@_x*ffZDhCW^1UD3_j5*6YwR^$H(j-@VakF7Tja|oYPuO}2()Zhl2b02_%gTX zM5R@0c?18EsbZx^y$XF!B-=0klsrevf7Y+l2MhBwS~V8Psi(@UW4{`muj~9)d&0(^ z^(whbUy2|5b#VUJGK+)=M}wF_FGPWS>h@p%p}>HLjX7Lan1$7VnUV27 z#KWGj2xD$+WUziwkvsL8ZPs^TNge4!9qW`7!*;1 zOo0&*6aok)25`6dwOHz_fApCH3j^23^PbqUYLa|qTf7ICX2PfQFx8v6LT<>3F*7r; H@PUK?*L;o$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2da591dfc2a668c604431d10abc2c6fcae39a48f b/fuzz/corpora/client/2da591dfc2a668c604431d10abc2c6fcae39a48f new file mode 100644 index 0000000000000000000000000000000000000000..a2be8bbc1e099bc1f586df0e6685c3d8a1aef317 GIT binary patch literal 2101 zcmeH{F>V4e5JmrZY{O>PSs^4=D1b;8QGJS(kq{Lv#Zqt^Tv$H0?3X60V*JeAHfe{w~ThfsQY&{LL+4G*{oSL zhai$Wus1Imyw;Y5|Mr+v;l}NkN z%S56@qqy`mNPdj@#KLPm?pt@sCO@mv+ExXhU8*DB4lu&r;s_p8JershV=jPmX?mc(! z@7v$LR15)DC;*li(pWvB7V+4>mbNOXV#9(aO6DUg+4dTe|C|-gKol|n$O9b!_y|A% zPyv97A?W9F01W`BA3%K|7xjc(r1>z0A}C4(<0qZHO6KO1p*(@ODAh4_L>@u#cmP+L z$w49kbH@=VsGYkR1u6;#vSgB5WH`&%jqT57nQ1{y!9fyP)hU9>ijH8h=^i10K_ToI zx+|MQcV-7dnu@%c1+-w8GoU53fLt)z8FO&H7)ays^087jSFmV@} zm10Q@_lI+=Q$}_uoXercwtc+Gxt+PZ@ENmU(dxXhi_M!N3{ngZ>(f~3$7ODKM;hBd zG1^m+QLejp4YjXrY?)oHdKqhpnrBN_+0ElYX+tQ60Hn|ru7Vl_%w1y+j*3&-9ebnn zqAYKYCaY#_9WU%??9VCX!p+ps!Kp&(j+rNr1?N+6c!(hgUv$F=PW-^I#6+;9FD^Xi zrcLMwW&UEdmb5bMk{6kb;cc6OI*hNXx3uo;>F4e8d0f!YFKOt{XsM2xd~J6_Mw4|Uy$y*c^o(%ogIgZ*UVzMXv)ni zEzng+R$Ab0ta)beAhA-`XFY?pLyw9f05=B+F$Z?x07wyHGQk+x-S^Fd?A>?y;utkm zX$a(-H|#malYr1f1VZ2SdwWEajwCoe-+=GAWZX%wTX|$iDRZ5T_Q3Pa@uBUNquz!3 z=N4F281&m3F0TDd{hn`s^GHWUkD~6U{0~OAY20~rA^OnHV*yGp4I;?%1EMAB&W+i|`g3O{+$ICW2WE$oX-0P?{3+8Dm^6!+dl1r6} z5y9wfm@H5JwVD0x|^E0?!Ux`mV8lua(Qmf2!}A@?{i(o#WAI$ObQX$~!+hCxgT1kUnu!A{%O8?3WK0S2tkg{*DCgW3o-`F3Ns2B!LkpU>jz_0$eR~KrS2Ugrw z`;QA}3BL8bd~sG1e=_wS5a)jJV?qD`1pt6+r|hR(4-kpD_?E!vxxwg0J=1-14M;kq}9_PkEFSAz$ILG8MK77z7Xn;Q!(f_fB!B`sd*AZFJ5*ID8!rlUmxC zy4N(?%=D6suD`g<Jr!WoX{;R$0^o_Aot zjX{?-MV!f&Q=SJ)qpjjx&o4Gik6UKS>BPH?pGf0Y>P6{9R`DFK>pz=lb*Vq=x4p#L zZ~IFHN6)p%l(>nMy<3myJUOzE^n_KAv6TB2b6j;ka$l7-))c@~9q3E4zp{5YqHlSs z8|!L;CENdi<^HC{8h5IE8`Ap+d*8DoH&;^2Zhg>p`PWSgzSjujrJWz+*C(K>JGJ%6 z_t_`&)-ElYunio0MG5G0?+#()>}$!XUUO#EBRRsVYO9k^txmhS@J$P=9DQY6tJBT% z)y6&MR)5>B?>uTc81hT`m9{5389`sWQZXQsdP*1&iYow`uH|-=+IA%<7B0SoxLb_7 z-|HuziBaGDinQCtz`UyT>6ePTOJXkF-$_4Tx|5(8w(lb4Sv{foC%N1d^VA8C9;ylk z0R49F9slYlOD$|GO^!BwS-zh*ta8$JZQ}diF>livmGRwzNw%X8pU0*(9BcS@)KK?5 z{rC-o-L}RuWY1ICKj-&GcvU6DGq*Yx=LH7W7iQII+Re%Bmjhod(z@sIOSZn@!*X+$ zvS6hWj~B&0hE>BG6_&2u&`I*FidvVqKkDG4*}I>GvvxnT2$dPTpDLYvrQdp|+3^Uu zi1zfZhKncw$VEuPayBi{Y2$Yvf4qp0`Ly@cVn9e^2$7S9wD zEo_o#d!k4Jq6NM)qE${MTEiO>4HNfN`WVQ;0gx?_SpbQxoi$$H2uEpzEtZk;jRdvWc)D*yQFUUoB4+Z9xI|F(Pc8m~ zwHQM9_bZI2yWw1__7}DJOVE_p311OlBjv2% zrmXs(Qm>*bGFb%|ILgcB95b}Le9MU?#$cOdX)VDk0&$QfKLD8oVK~cJkmrAssbp0r z2wBmPWkGj^9J(`v0&)B1Go`AAiu6#@zfCprgjZvUVN&NYq(;IJ^U+)Cg$ITh$N>Zc z2;d9oC-G)2McynFc(dXymBdW$ETo_iN?v?G!LCSRl9x)NBdGWfEy)DB_=n(I@KJ&C jGzf({R5C?yblNsRv&m;r%nk`UdAnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JA;7>lS1WHwOniY&wn~| zMIU+2vWai8PEdCB@NDY)5q?(0IiHtFA?S``jNZIu++M!AdTl?#cp@u~UP`>L)B5Lo z<@%Fa|9yEF81k4IWEHaQqSX(v7Hx75jM?Y&C-S|}Y@yhi2bcUVX`EHuuO=YD#LVCZ zvN7eXUBZHID=PK3|4)zqc<6+6-R-lh8&bW`Y*m;3FSx;tNg@2+do~x(PS3aW>79d4;MmD6QdHc(TuDN%uS5^3kXs546oLteq%nt-~Bf) zqJzb8QpvJ#y}pjCwzov=k~@?h2fy59$+_nD1)ong3fHDTd;2j-?&(R71*ewUh=8ow z_}KZNR;13(6CTSAluNk5E@5PtbnpE%w(9?dwSEg~*X>Z+rt^K;9CO)12{ne+ZQH&- zX9{!`ela0Mkw;BC_Ro{8ZJo|aHJ`0Na~@eD(D2Fakz0RR!2Z?R6QnEtGyVsIlW9>$ zXB#-CGww4M*u@(0wk-Ib*1;FM=YKr=`+iFOb&1vdQ#7V}otYLEaGW(>z>$ghIs@b4 z00Td8Xv^|5GV-yoFn?!VU?9xK94f2I!ehY2#-Yu|$jZvj%woU;5)@`+{LjKWVsFWLIxr|Gs;r-G;N=Z#VEv(>`i__2Z#+RtY!xOU*-llPL%5^XP>|-dKay>=KVuttl2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2e940ee6b5e9d69329cb607e566a0a7e3faf284e b/fuzz/corpora/client/2e940ee6b5e9d69329cb607e566a0a7e3faf284e new file mode 100644 index 0000000000000000000000000000000000000000..7f418a1ee4f12942be055de3f0accac64ee5e2d5 GIT binary patch literal 337 zcmWe*Hej%1Vqh?3W;QS|P&dE>7!GJNFz_-&Gcf$uWME`q5NBWzV`gUL;AUWC2Jsng z8Z;PWE?{P2v|!?7xCt{!l8s%9!CH%f!Sw%s)rS9u4gU=q7{I`w!LWgW!I0a4lZ`o) zm5qlfvBOZ8sf=0-42B}i&I~3E1_lic1`GyJ z^$etIVPxSeHS%37F_VG8pursELJqiL$kty6`wQ$TMlG3aW>79xJxz>C$VM}=GB7tW@-rATF>*0AF)}iob3ZM( z`_kOLd6(ow)*pYh?WBcP{^q*hd;UZ^?F{?iWB=W-W#1a+d4&^OZy4=mc(o?=8}kYN z?!S2v9W0KMN|uG|^>tjey(MCo+@bV1_~kB3&NaU;_2el%X?mXeK+)}w@x%r0t!znX!7B!vtcDv2t+{M=U=Q6*DYAK(3wY~cO zZ|C^`Ri2)F&zS;Ug}3+!Tzcv}{HPwU`|-Sa=5{e3^B{<_3!{wW$$z0PE< z3^>l}F5t+-%*epFIKaRU9NMz{jEw(TSeThu7Z?b$F^9^kvhWyiv2kd#F|x9ikJ)-3?xB3K^7qcfhNAR(yA)Gr2L}Hy!7JY9ON+P28TH#!=!ufr?FN4FRb-j zP`hr2(iWZX)8?4V_CLSr{@?zk=~TYEcj`}c$(hMoxc@1;BtK)J*_smt7F@Q0z5LA5 z?~@ju*7oWV(hdojmHlu1&2Rf71S8^}w#iv%8`KqbzR0fLzW#mpO1lkbx!-T#nWlZz z`s&9+>#P!P@|T*2`X*g^J8g|Y_N|2;;?tB{XF+^pz{pmW;bsEJautLADw z!T-FgLpLsuh-6j$DQCNV4U47D&-FVpe)pLc8vQSL>6RPAHlah=gD2oM*UEJ-{_I;? zHsyMXlEn=1C05HL=gV4`PLOJRFZo-0`|^}Tr6u{*zan<`_?4$$h>a-g+AYS+$iTt} z$|1~*469fe7?v?G$S5!@K+j<4{Hu~D-!Yz9TEfEf3}y6?NpyJv3x;myHULw&(^LP{`5DBfRYHK7&8F&lx?8^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2eb2367ee4bd87f859b556ba387b073714c1968d b/fuzz/corpora/client/2eb2367ee4bd87f859b556ba387b073714c1968d new file mode 100644 index 0000000000000000000000000000000000000000..36bafe78db71c5e78d55185ac59e55751e0f10e4 GIT binary patch literal 444 zcmWe*W@fNtVqh?3WQSimb1(|$Nho!0kD0KtBs2a0f0Iy#1NsaM zybQ_=4F4G!7#SGE85qQvnHf{K85k277-Jb2qYRoD!wee#E?{P2WMUGKwmV{JGO0;5 zxwQ34sQ%*=11>fWtu~Kywk*s{2114c27GMHp)6d&?2fa0@{>&z4CKUl4b2RVjKIji zAPUM=2Z5m4p6C)E7gYhgmB`F5B z9sdHtTQC3oVB=n)d1jvRmH@WHF9M3cp1l@&!~RC_A1}39&Pn%lcJ%E!%~TlIZ0RoEO^4eKmjTXqQPuAabAQ50|NszE=ksKL9D?Bni!RkJ;2Dy zz}&>h&tTBR$i>ve$jJDgSg;?j!hd*W2?HYZGf)Ej>64VT!<&eM(x% z_nfqKcQP?ITB$E?TyD^~#6XsfIaHR9MT|uRTSyv|f~2Kc@~}$M4)B0e5(_KD2GqpJ n+{DPpKs&341`uOrX4K(fVANn{kcDM4oPdLkk&<*Y9Do7KcK@($^LF1^=-b~`VX zbVue+y`8%C+T!xqJu6Cn?bxDl_r>~?;SbKesBlpiF*^FcQ^T^%H-gJcPjES6azjXT2b$T{beu?QX z<=gjPQ__=veU;@Sa_)xpH+z8TrSyY?|mpvE0!V6Ace`m{;Rm# zwF~UEH@BRdo$+pK!MVrxwX>eTPr0S_>wPkJ$EwKq`DYJ2J$Ik2&AX^-LbU~xfe|Qm zusI}G+_*81nSp`9UP0{0L^IK AbpQYW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2f58073fecfd59d6b80db8130eabdad492d578a7 b/fuzz/corpora/client/2f58073fecfd59d6b80db8130eabdad492d578a7 new file mode 100644 index 0000000000000000000000000000000000000000..f3497680baa567ef599f3e0dac4599ef06bc1158 GIT binary patch literal 685 zcmWe*W@1{w#J~{F%yc`~ZX%t2{S?39*%`L+4&-^RVa!xrp2z{SA8|DTb8k%57mfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|V!Ys^@nw(Oc zXl!9(AScdiXl7t(WNc_?WNB<1CC+Pv#I=HH3PsUWW+1@E4mOvGk&RWmk%d8tIf;Sg z#H`?UQ`VprAH+6lm$gr{{gN~LK=4GKd&lO?V{EpKyRqN#2gk&ul69JPJ1>=VN9Inw zox1hf;_}!%D@uOt*rIUv#rl)s56-=)a8VaAI{Lp;!?Mgbg3C)#dtV}NEbAThip5d} z5(b=X%%QTvEKCLr2HYSfKMM;p6MF-)Pnpvh3{sd3yzTjfiWdp#t(H8y{J;X4SD&)P z3xXpbUwm@*reW`dvzs~|ryJf%s+)6tK`QIBh1H)Nn28l!#t?K?sGKRLArO(`c zO;&$Z^?uI8wO8)*%s48ewL2y5!g`^KrF*9Y8@m0Q#~Jrar!QTnXG7(enEq0}eg8Ej zJ^9yHX@Bc}&R5qoJ5NMtQ+1Aomum4@h4{_ol8yG>hvKwi8PY%=vi~aXcI^Ut?aeLc zW@o(HT5#^Migs4|`?yAt&{d^1z3;?fh1k(Tj literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2f7750bf142ea5d080d50e4eabca9a26e5510b06 b/fuzz/corpora/client/2f7750bf142ea5d080d50e4eabca9a26e5510b06 new file mode 100644 index 0000000000000000000000000000000000000000..c44a7cbca8d2f8d748b102c774acb6ea8fa798a4 GIT binary patch literal 1335 zcmds$ze>bF5XQgRNrFi(9umn35AJN1Uv}r=X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2f7a7befe2eacdcffac4fc5c024174d04f39104f b/fuzz/corpora/client/2f7a7befe2eacdcffac4fc5c024174d04f39104f new file mode 100644 index 0000000000000000000000000000000000000000..5218bdb9a8413f51448e5f3ef35efd5aa06c969d GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok3}CTjyzfd0^G`U|;oeT{m0u2(? zlMLDk>JWgcU}X3S3WJ7?-2KxQG(3=MEcMkt`pkiaf$QUWPi$E=Nxrfz-h)ds;nR7T>djmsH{`^anHgC4 GKtcd-9PAGM5kD0KtBsYD*Ji|~127LwwUIt|b ihX0HVj0|GT3}6ff(Im@-TmQjK6{W&i--V-INn literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2ff52b2b71486d7ccd6f7f77fae82b8becb5faab b/fuzz/corpora/client/2ff52b2b71486d7ccd6f7f77fae82b8becb5faab new file mode 100644 index 0000000000000000000000000000000000000000..358e1f0bab10a9557d860ce42800f2871a9fc452 GIT binary patch literal 2843 zcmb`Jdo`eHyt>ZpE0HcZP9mW6O3)h1ipl<2J?^mxh@iMcZYBa!^#F z4rMQ`l8UGkJCYn~qA1C(_D-@TWm94&>Ex`Lp{>?AXRWi=`Th4i>wVwn_dM_O`93cZ zK_CYV1Thi#>g8Fz9k0Th41M<0hv~Ly6~1tg7dI+~tA2MKl6`Uzqym{h&;ks>5Tp%3 zLUV+EG%9NEudEorkLOSV&~TJPUj>XLPDSOF>vym@f*l-`#1jTaqFf%y z4^1I$L?eNrwhG+_*f6XafC+3skhTil4%jdli{}3v29<>ghw>YmDnio7`v)Ze;-KC_K?0MX5SFGtoprfV43gvH!4;!RW8=D!|)9h<87EFiF~Mo_#9n{IS~v&l$F^IW;9 zS~fwKMTu>GQ=!lxAH0ph$uuV-Foacwq&)}aVIe3-+LIX+IDhQNk>dQprQ*%ev|Az< ztXqnzTfb_;kZp&CWvfnQte+0U4d15pk$!SNHAN`g;$-}KIypT?+%UJjYITP$vwqFX zZ!N5v{-Qq=^78s@Z~d@_ssDog+z$p%K6MF>@2!p?yf1@y*3bx&3xJ6TEGKRNPy+%P zkSOn>|DODZ=yG#}?v)@B4Xlz>mW0&>D}gdzk&K7gg1F@cR>DC@77RnSfuy>pyRtT1 z+fxSPf4MQ$))arS;EMgU$AA(wH3VMQWl?0e8TZZD#U*rDEGz;DQcAQ`JURUD1xZ4b zw0;MhO4kEA5LX_kg$Bzh)Be}Usxv>T|fJtZ4nM_*=H@0+!wJXD#>A-Xd z0_&II$qHD)Q&CINlh5bIaU>DwX23)iK>xFI5g*qiG@38qp(!L!2FQYqm!~R$Cks}C zKo+csk>p%%iQO6e(687LUzIiV(9f$S&t*y{L3f`=`p|*Ssl1+5lR=-tRT>%JR>t!8 zw%zqJS_6=8AIl3j$7NJIeskImzyIn64eWTD>EP(xM|$G?;Rj*URPVZVeci7*VssmB z|Nl=6c(P(czL8ib+~`h4wKJQX&E#>i#X6lH#_t14T7S#*R=;8S`;}6X#!ZK#>e$LR z;i)BN1wQ^s!0{2rwl+BPk)tjOY6 ziP$z#&KU~}3zxcSv!O>FW6J$fb8rP|_bk1#?<>Up(0+$`VmfQme=s_91p2Es>By`_ z;jvBK)q}ZW75xY!IRXTHGN80A(f}5@f6Azg6*uD4O2${U@V5-*+nPduO zr70RvH$0jx)J=Fh!BU;n#=qiDGRCc*aOGUy<+mpcZihyj_3qp18pp+5V6KZRQgAw? zz)>((&B32&7p}TL8k#v$m}BfHMC!x#*G3P|IG4T%(^QDI9dsNRb}QL#CpsuHYA*cw zyniGy@W`VOn{+YrA%uuP7Lo=mbG>?;urLOLXf}^7FO*~k`+Nzxy7aQKidu5+iAlVu z@LhBYAWH~W(lTB2kOH2wlLQ=+8%KchqIm3Zl=CO-5>WvRz+}*Y4FEtojO~H_XA`XZ zG9GbBxU~P1aCvg#rGjShr*QojHMv=KYu!pFq2hd*$3d!Z*VJCO>%@{kir?!zN@i-{ z`L~mygvCcpY#&tk6X88!1@lpxN7ZhDxcJ&F7WvNIQs;8>$lFhQ_UI&b`Hc2I*nLLl z4r@^SdtZoc!1G|=0?H>p6Wfnbquu*YI_N-+B^ZZdCDl*%)O!ZFWA8RO^VQ@G>Z}Y8 zggFdEkbtDNXBkw<8CLpiBNmA Y{5QnU=f}FT$?&(?E}BFHfj24t3xO^8^8f$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/2fffb93d1c2a7a9dcbef30ad29717cee17eceb0a b/fuzz/corpora/client/2fffb93d1c2a7a9dcbef30ad29717cee17eceb0a new file mode 100644 index 0000000000000000000000000000000000000000..028a1c99b20a585ed69c56e8b5d19a00221180b9 GIT binary patch literal 1078 zcmWe*W@b`mVqgelX3o8*XtKylz2fRt`OTqcjH-7ZoSQr=%tq zRTh*O$cghBni(1xSQr_b8krbIiSrsExJFSp^)=2%vVoD2m4Ugjm%*U1lc}-M!$)<~+FS;o!IM5zD1%S4B@;K5Dl(SYz>&87r3ye|+3_kTZVK$yIxIoON}) z96n`*iI8phmpGGY>rUVOyo=#nYq*8Fgu7yE?9Ev$r3=s5G~07dex&+&G1KY!9xV|* z0co*`O6wQhKRhSl0`tKN!#if7RT7^fU&&15W@1*fW?U>~AYs7C#vCdu%)(^AV89Jx z^0Tl!Wnxu8b~-o6>5U9Li>|LeuJV75+OvyXr&ioHx4IRfCbdmP)1%~u6@XtE?Qrj=uCxQ0v(Ih~8641I#Lme(a5bLMY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/300f135b1302267afe76e0bb0e80c1c4cf57c601 b/fuzz/corpora/client/300f135b1302267afe76e0bb0e80c1c4cf57c601 new file mode 100644 index 0000000000000000000000000000000000000000..7d7d7567e00fd35a6a7ecb8bd6ca37fb96e17798 GIT binary patch literal 806 zcmWe*Hed*3VqoxPW-uTC6bQ&0FmN$2uo@UJFdB$4GccubGcYAFFvT-4#TYa(MHn&N}iBdV45nyj0y+BRiD!+|aGWfRlg3@-?@ zY*&&iP@Y(H;$?27RcmHov-WsR(rz6p7koZ>t2dmu^!yN zQ)XSNwRFUxo9k|`O7Hl{#LWJ?esO?-pMfkJbF6^@ix`IUApjJbvdSzH24W2&Se5Xw tF^3u$u&_cTQDcm`v5{c1p*0X=W?*39V_;wqVP;@pWHexAU~vCX+Q<_|?zM@~8j@=lW~&)IviffTRgh2F&`DJQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/30413d0e3d1795e20a6fc89b2bc039b213a36fcb b/fuzz/corpora/client/30413d0e3d1795e20a6fc89b2bc039b213a36fcb new file mode 100644 index 0000000000000000000000000000000000000000..3e858319ea27e65a78f6114c045bcac137a48d67 GIT binary patch literal 1188 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwa_7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8MytcP&L3KblPB)<5s!S@OQ)Ti)&Uq1*X_TF(eptvt6`X^CQu_{$fQsz3LI75#ei zeV%6XP4%?j+mc+BJ`}Cv^K-jg5Ohv1-1X4i{%f_5+w|N8#pFz9Pusg9Qtq(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~QTHH^|WLnGu z(@o}^&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=3=D$*85sZ(=fhwC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3047c824d1b54095241e09dc47cbd0b4d6759e0e b/fuzz/corpora/client/3047c824d1b54095241e09dc47cbd0b4d6759e0e new file mode 100644 index 0000000000000000000000000000000000000000..57f47b8c0125874f11a7be3bc69e927934038211 GIT binary patch literal 476 zcmc)GDH6g^41nQ3%`0UorDX~GGQ%k?0TM@oy`}^)p`SG$nJu`7PtZzFjYCm$bq6R`CJ64agDD# gzd4oTw=(k{Z&iikrSLIC{15h(_FtGPE&(ih0*>2ptpET3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/30495c402dcdb45155415607469d9baf91b8156e b/fuzz/corpora/client/30495c402dcdb45155415607469d9baf91b8156e new file mode 100644 index 0000000000000000000000000000000000000000..23b6897e500a3896c62910312dda3e9fbbfa007c GIT binary patch literal 1176 zcmWe*W?%?pVqoxPW?*DuW?^Mx=iubx=HZp&7Z4N@77-N_mync_mXVc{S5QDvz=x^e zfCvKv>wiWDMg}ov24-Gv24+qMW;O<9W`icC{{~Hr&lfN=F)}d;GHh&lXEJj}+3);K zq9@!dS!WyYvTMt_AM=+ay>=KVutt@`>%CcccYg gcE{x0R0ZdJ137VC zLsLUT19JldBNJ1zC~;mxGebiIGbk5}o<9anj7l)0zwD7GE^1BV~P-uX%gqLrzbrYoYJ!qiE6s?cH?8`gIbYGcb@QAZmC?d z+hKXV>gBH;Gu zlUqZ7S-}4F+7qNJj-NkRe&P4Z-zU?ej?Ol4EMVMcEU=4pg-~bkz1V{;}(!KZ7*sA{**7_}|UAIGNi_Z6HbIfJ?pWk%WVrU8LGFhf8V{*Zo^sb_ZxVoX&<$|`ti^@tAv~Ur52&SNtfPETVs%YYoUkuH09P= z;pH!t7MU~evM%#>DEGW|kR?3SM5)}P#fJnVjP)=xk~kj~5}d>IT%f9EO{P)AP6|Ox&k+Zg$z$pecoxbL2i5Tgd)0O6 zuw8K~k`T@IYnKK-+$JkhwJhaZ6}PM0t<+falsap+;$l%@#;NhCF(HK|O-)Yti^7b; zF_z4d8Dqi`v1l7ZIUZ;3#C)X2|1ioQBOk7+s!df@74kPR4$5s{YS}(6F#dMdWEw_X zKtcnB1LP`DlUK}n7T&%V^?ESYG3(Tiiry7**mrTcZj~av%pIJ2J~nf2q}fH+XR|N( zzn>Gkazoy?=4Ln}RtCPl{I>d_t-q;yY4FYETH%SuYhOMWzpXT-di9ah^J?uFD*ITaxv!0-6VCz)1t0*h z@xb<|=k&G+*e$}|eCPi3F5d+M_DEaNQ432$T|W~|GpA)sR%M)4SF Q-vKuB?5NnS^WGc&7u91AegFUf literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/30e1ca767816157f21357accef7cc29bc14499fe b/fuzz/corpora/client/30e1ca767816157f21357accef7cc29bc14499fe new file mode 100644 index 0000000000000000000000000000000000000000..512106ba6a6a7a8ab49bc72e811083a60d29e7a1 GIT binary patch literal 681 zcmWe*Hej%1Vqh?3W;7rG7!HUqFz_-cGcf#TWME`q5NBWzV`gMZ<7Qw=Vql7AV2Uwl zVlpsjVl-I5%*1HG#ECGEmyJ`a&7D}#ZnA-4f18*?a&0T+{jfuXR0AcVt( p&|#=(AP*Ac;gUcIq5(N^UK9~Du0c9hYdBD>p^8H=Y#s$v2LPI-bEW_Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3107a66d3662feb8e3cd781aa9af9defd4c7db28 b/fuzz/corpora/client/3107a66d3662feb8e3cd781aa9af9defd4c7db28 new file mode 100644 index 0000000000000000000000000000000000000000..4f5afb6863ce1505b12eeef4c7600a248efc13fd GIT binary patch literal 903 zcmZ8gdq`7Z9Q}RwyZ5fWH?^(TmQ0LlA>T}=b6J_>q=y)>nvzjwS(y1KXJuuL6zyRa zwd|>qHO%2O3Mvs;E1Lwd`fe}Pf00xW@g=vQ6 zP2dZJBC$j&ll%Dk_4oA-^58#s0CEli0tf&A1pp`k6c}N#5HKGw3m6j{#St6oslXJX zC^^(0{1Re4<0;FyHnGjLi#bQcEPr-kY~hd?At3|AM<*i^7Mp2-FE47t){Xwr8APoV z>q2!p5=KaHNT@zhDc0$AI-(z?<2>mj9vjk(jYbS$8B*U+#gIT2MPW2#xD-#~ zM%GqI5z41&OfeP2m&ImPAT1&Sc7m2g48y~Sh`gdNLL5yIAd|gJPWup7OIVDWM6i1Z(3f1 z%YC?de%&LXyG~@+wiurc-mi^V*CovfGcQl>9I!h{T6blv(jHK7_Fo%fGJu4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/31b7a562dd81312f3dcd5d6b3e4dbfe1d2ab5116 b/fuzz/corpora/client/31b7a562dd81312f3dcd5d6b3e4dbfe1d2ab5116 new file mode 100644 index 0000000000000000000000000000000000000000..31c00eec6a01a147bb1c384577b37a185aec50d9 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHUY3I2n!^KmjKk zyH=aWIa?M+16MC3R`+{M@>ED}{wt9%EYjQX_WLpM#fK3uA?y=7>Cg^JMlO zAtssCjO)34*zMAC_kCVn|MH|sdD=C$cvhb+U;o|@eg90J{mkw6?d5hAbBZ=@0V%)&MfQhMrfw{4Vfijb+3dES1 z8Mg5-Fl=IGkX6u?$-MCSkgfZh39-LkY&!ot$Y~1ebZfq{xLb91zuCKRurV`q88o&t zIWf*YsXECli{a8exAJCn+28%ln^$PP%ywSKZ!)Fn-|zed^8_}YdXXu&^<>@E;07>gTC@e!2ep`p(NMCul#M z%d3?9gR5-WA|H+_PWfQj{alQh+ZJ`0aEr*pN3tC+F|^ z%@%GkD{JnlAnQws3B`}vN*CEm%&>efr}r%Afbg3w>sGP}Dyy*m5b(Veu_mDYnnTWi z5w%=Hwft9dF^*y0<#n0-p)8+-#hApmY>@8AiknDnw@xF~tf?iRlmOMUf^K67AU;QDyp6I)hIlCNxw_u$e@_;enshG8>T$PGC$ SW@ZK!J_ZH`F?ME#RV)CymZeqz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/31eda93a5fbe4abafa2140818c912e5a72f2d43a b/fuzz/corpora/client/31eda93a5fbe4abafa2140818c912e5a72f2d43a new file mode 100644 index 0000000000000000000000000000000000000000..9a775a03e9af7fff7fbee24b36a4547f76f81c84 GIT binary patch literal 955 zcmWe*W?-;nVqh?3Wn$^9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*?cxn}KO31JgDJrp*RTOzRDrm;@IvGcg)4aWWh;FfcIi z<2NwiWMkKA^EhYA!f4=X$Zf#M#vIDRCd}j*YA9?V2;y)Ea~b648t5977?cE_*rKt?tLdSBiy~pXV7EJT^FHPzsV(X2~#{ccO!f zfq{V$cdRraML7@1T45Ge17=1>W@gyN!@#hKnL$=TS0?kq z=R>ycITK=kz1VdAcaYN**6G%KWpTIa?tZg(;b3EC=rU+*XL4ekeNuIjMHa(_dv4{; z>axH4nK!S{dYSFKj^AQR)4$*O3+4%IJoO?|ZtKY?zq$6x%OhCU78Ip%CfJ{R$d_Zj zd4J<+CdbnDwExA647b+>zVHtcx7Ih5Ei2QEPCNdYYf|scnRAX@m~(r99LuYwwE2dA aYzwPHbN#;8 zMMMzD2LnN$A;?b2!hwrf$%s8kAbjRK#t7-a)e)jU|M!-Nd&^FQz5Q$=iJaSMxmu3fSRYt^U{yU?TCywVy z$-YTazDO*PrjP^Zz|w?3W6%JdN%LR;I(?l9f#wcqba$Zs)&c$}x6;IG`*DPV7?C($ zz@ZU=v1%&~JYl6MDPGDE#FN(wcw67ah5s-v6EII57hZSk)~%FSb-)y^XbX_THXoi7 z#zBZ2)`Nf?*2c(T7&;rg`;fB~j_V3G`MS==?S6e>6W4}sJX#M#W8E=lgch3YYGNBrB^JE-eA!~vFBqu z2fnB@PwU~&s~Imiaug6*QE@#Q#+})?Qf9w|H`En;pmzU*8r0UfYvN%Cqkh?wVU6DY zhPL&#yS*&)(=o5>GbwuyZ+H==|9ss0-@jHnkZL`5&;)G_$KBWLs%Ug%-ztn?6=#+V z2JrSgqL=u!UplkrINMU9E2EzMvh@C?j^h;3X|VB2&T&kA!{%YaIVicc{B=T})ib9f zIUE2iP=sw^hgDsDxf2R6!|{Lk>V>TCVzk+Xbuuc@ zRZZ)`@Ea@^!N4e>pqfr7jKgWbFxCc;f#siL0B0NWrP2g1Dm9iON!h~Pq<#!TmA{e7 zUlX7({00LwNagMlN~p2YSfMDIBcyP}LSUkDBV+Y} zr~S40X*U<^?&QPiC8;X_9!1!8>OC+30#>TuY_X;wgJ>MwixSNnUVeNe>$!EzfGKdo zqo_8Fg>R=|a4^tB(O4NC#$W)Li_ifq0(KR)3hQjEw-F|67JQIu)PNx00J=K3kA;P( z^2|MgTzxNDzWnFR5*WREw;po zq`FKC${^?H?Y$e?pRK51v`4rb2I;%9c06SN_r=jk-Qo6CGiG+PzPTc^OOpvx;{#{y z&phr4nu@d>T(xr57x8)v3!RS%JnofL74@R0y#1c*jPp8k1Gg;XazlzrreJi2IXMCCthmAWQCON>&MXRCzIvd!YG0E;qoA zq%G)EOwG^|rw{zPae@+Dz4T_=-&^;c1;9EPFdNsu0cwUrN`y!e6e7TEwYC|HuPSI#>9-qZ6*A?oaygz zoA3r{C(?N5TCa!9p+^@>#C}?*|BvX=1$b2334Mo*Psskn>+i_zaj}`BkzMJ17R@{Q z?NI3Qg6Z#CT(+e5mC1R|GOk+;Yj|~&_Sp{VtEfX>aiw9~cH(l=IvoSEZfOa(H?=d$ zC*)(R`}k2q(AOs9gRdO&4zFyh>dS5+h}P~x(h#5jy-rE9CQY??QCEGHd)0Se;$FKO z9+SZliIiSzQf zDg*#JV9;s6P1SFx5Wob?cf)@KGk>T3JJ(IQ;CH2ot=Zc2_4gJFnL~;7$%S1F-*&H< ztn#ZvhF4l^XzsrAFKUdZ!;iS+J!Q;Cxca#C#3PF4jmJ(u%^1qD*Zaoq_GsqB$zz3A zORg<7Wf+&8Eb-q*32lA0%kL7gD8eP|X^ugmU}mP4!m{`H}dR?TQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;Xjpu3YE>H9DD#9;RQ2@0SxvjX(iut($?L{#LU3-e{th-gT^HWvTV$uvV1IJEFwQ= zFU>#OaW$cE`y~aJU$)cvL|Hx=l!BzCS@H~W8n7ww{N%pG)nFmk)PXhHxS**c51Kkk z0!lKA6~L*ZiPL)PHl>|WpybEH#vCdt%))BG%*gm3IWE<~ammPFcd~iC5YslXsi)X$ zCoq0@es*eirTl_Fx)S@MQkM5Lc9r>;Sbcx5?P%JhR-l}} zbzi8g;HN)_eRu7TuU%~wU;BgKBO;_lxZ+Ri z6iOYF&Dqy+{MY|o^-TVkl+<}1mTZ_6VzcCrL&~pz!bvYe?`IlKopNaEw!qzfl3#wV z+h)1po#mEb-~alHw|c}$Z=22DWgNh|;=O0A`HkH_^*?03UVq`}Tjieg`2k|g%#1ob z42&Ag46+KkGMN`XAF_3SGa>fZi}Ra)2RTh)oo>xn7I&-e?l*fE4h}Y0FpOBh$N&H+ C*a{5* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/324d3734d962d718e23536429788d328a81e0704 b/fuzz/corpora/client/324d3734d962d718e23536429788d328a81e0704 new file mode 100644 index 0000000000000000000000000000000000000000..e6c24069a7afd436ee2f2e0967705b1bd2051270 GIT binary patch literal 363 zcmd^%u?;{_7zXcuUqVE*Pi!DGpF&}~H;PfLVH*)q8^Bf9++~?9!7BL!ju|=|Y{K-A dr5Ia61aP|8yHYqcobPR@>gn;NxWJwNk_(@!KUn|( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3256119ab96da3ea1ee50c47a2b8781c3dea8b3e b/fuzz/corpora/client/3256119ab96da3ea1ee50c47a2b8781c3dea8b3e new file mode 100644 index 0000000000000000000000000000000000000000..2ecc64eb4bde0c8842157be3ce2df651ecd5796c GIT binary patch literal 546 zcmWe*W@Zv*VqgelW?*1al3!PLrmRT$aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1oNb-CiHMoiC{Mj9}HubDNcxDAtI-d@-r|b6;4| zuQ%W4X*SGQMuv``4JN0qe3ahTxIiW)qGh*@k@eb$lV?r7=gPgCkRsZ#)ur(6)N9t_ zep)8eVip)|GT(IWnq8^>lb7F^7w?RDLx;9$^UU}0cl00Sll1uXNK9CZ)P{t#I6E%v~U4H1MtxYz61hvfl!M&YeJnu zoj@IPsE#<4$6Kw0%EM-JkPAX@T4w z@_>=62T|LErZZQ9U1robJ%*R_6IwPQFb=f{X9srd!1<(A5o&>HBmHw28{o<+!9`Vi re(2Z-5Nc_>WTF27%Kq{-DaE}P{hFGkd3|2`YE4ZUOsb`f5vP0u)zF4u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/32a2b0616ab084adc7e30d087737085c3cd7018f b/fuzz/corpora/client/32a2b0616ab084adc7e30d087737085c3cd7018f new file mode 100644 index 0000000000000000000000000000000000000000..4097eab9af765cc858632471ec446bc6ade57a30 GIT binary patch literal 2101 zcmeH{u}T9$5QhJm*;|cwXOMtFG(oVDRDTM~K(M;jA{M@k>=p+WK7&G@A%&H1;OnG3 z$!Xz<5D20d$k+WWGym)?`yU(kslbgH*Koe(oR|WgN+3WVNa4@mPvGtt-7TZNKAQ?v z$lP~EWl=73ku(91#$D##W{#Qv^ceQ@hTAvE!*Rxgx};an9qpP?ul(MqEZ!z6jC!d> zRaN(On`NWfhFok|x1-%ylmzV_@o$(9c*@M%Y|wMbhh@4_UFT}m{I(Xtzi$ol!YB(y i8UA9p{E$cC>Fez!frUpfJZKA+psNJjzPH=4wY&qiV}(rs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/32beaf822db39db75307402ea58dd6480ce0ffbf b/fuzz/corpora/client/32beaf822db39db75307402ea58dd6480ce0ffbf new file mode 100644 index 0000000000000000000000000000000000000000..fdffb5495c0d567582aad58ba81fb2872709f7c9 GIT binary patch literal 1845 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07(SeDR;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0*sdg3pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$~ z94-G@zfK=4%+qMqSfDPKDzlFLYIMG?^IPo+8++EP&hnyLt?R*oDXYvP zVIbCkp`a9`fCr>sn1$7VnUV27vWHng9&Ti?eo>J-^_p$gcVS5#=|dgslvaP~HTqgp zn0{XOqRgSg?T=or>Wq0}vf5+fA^WN8wB6^aR%H9n5?E67_xyJzo()_aOQIe8Cdujz-f-5lZAny6`UsPbs4)?EPOJt`!UNemlSroF8e6b8)mEY{&QJf)`?9&qZg|mkuu$=@zOz4XGg5e zgSeLmzn|auNKhr{zs1iQ*}MNv70qj3ktFhC24lJItNvMLmr5Jk%Wt^H3K*ALIk9C;3I5?goM;^?_I zg;K|4bM|!{|Mh=YJ(K?>C3T*-e`l+mV|<;%_qK2|r!X*x z+C0wLHdr?>z=|n@P=f}Dr7$-zFfcG;ID<(MB4i2&=5Q88;PiP?w5xKxO`X$Y(=;jh z_x)%8G9I8|Htc@{C_E_^E@osFe}7n$sdQ5U;l)YUWDGyG@APJ@R7xGVUKE>J#LFh$uKZ5 zGEC9+K3}AC5UogpB}^0`&&F(EV89}QB8Uu-ill$~@K|ACWcFZyC`&+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/32d84d2b74834021f9be5c433aaf46136390a3f5 b/fuzz/corpora/client/32d84d2b74834021f9be5c433aaf46136390a3f5 new file mode 100644 index 0000000000000000000000000000000000000000..0a21ea5ca6b58b83408f41188de8740f1a80ab30 GIT binary patch literal 10483 zcmeHN3pkWp_uuclGvj_8jawME3Sk>YI0>n!B&A8wM~ulO*D;C;xt5~nBu-Jz(Wyi! zMM9D&M@8v!j#H_8((Mpkj$HoD_q=0<;Tz{)|5M*{{@-)f^LW_Xe&6-(wbxp|wbxo? z6a|(z0B9(3p}b!;`wJNow^k5C{OyH<5s1 zM3jyvl5lo(6B3le2BMPUuA#w9Lszypn`xp6HLyu>Nu`A$3??gt$)>mk`1%E~BPcHH zXo?ft7pf~tnV3N{swoxHpc!;mlrotG&8Sq~@Uz*lg|mr2B>4RZ0if~e0LG`{;^Tpy zLF17ts(GbA(s=pmo%4@g=ySLzwraE11=`7M-ITrgTWim1Y{>LmU~*IT`8h51FzrlM z!g9hLEWhJOZUqjX8lh~KTh(L zxaeW`j;HKcIW@Djfj?;kyftD>dvNge`c2|bT-|bxvofRbu^PLXOEe_pi*t2kk`z?v zhU=?(^TbL;*Q};8w@xFY2*67NuFio}JOIgDos2U?c0T{UGjnG|9;D%cKUFZyuEqi&s)ym zwM*e4Gm>YFT8`h>u^eHh^@S{_$T72S*%z`LjlZ*dDzZxG`0;BRBq$9>*%4aaql>4b&R^J20WhLkWPi0puP)Zo>qm z1tuUHc#JqaJOfaSD59U@*ldkQz7$%hD@uJ)q~m|;IO@knpM!xsoHV7H&}LycX$EOj zQ{GVM&JPa>fnyGb3&)e-2CJ= zbA{?s3x*yR7OLkxsB}l3-OD~Et~7ADzCe9t$CgCL`(%}=@6}@a_8Km3VQF2O0B}V~ zt;I!Iy_1Fy3C`pw5xSdK=d|>MTjP+A_vH8ml0+1MQREXNB97vCzJ?$;P4Fh4=DEzu z{BlC{fu89u$-Bac>@2rdJvMk(GiBR9>P2vrEfX|aq_Gr&QWU6B41f18+weZVyvj$V z(mmc7YGNo$!K*+eC`lAIAR-J_kRaGf5CEEhAi&&>Qt~J&Ve!Sp9E5oPN?&b7@R_tq zi?<8zNf>SNMCLZ>Wz1SenEm_=Ka8T&@hDW_Moc6r2WIFBR%8U5vM_{UWTFa{v3Zmv zzW|$ON3balL7_h0K@@vCZVY7#%^=N$W~a6-Ep?7MFEyVn;kuN5xH-Wm ztLN2fuPaXoTjlFL_u5o@I9j}O?bqoV%6u`UzU7^()VoE)hgP)5)a0)Z-Bx?kMPmj; zZGRPwSQZp_%xd=0S;Soz7R%vZ#ptwm4Gf!v5AD6X_N~#PlDVzdUe*VylwSYxZ*+Y) zW${jpMrCh}8+pg(FbtAt0nDUE<%R`XA6&C){<(FL>=pgrDzhnaS1rGj#pm~WZ_3h5 zb6y_VQQj@uq%hp96?n$EWdWLnk!J`zBxSD&3mf4t}+k*r!h zL35=s&6PnA4jzvJgb0m@q6S2SKoCKs@mi1q)rnI_#t=!7_h+-itc;EQj3T0g8NNo0 z&|oOfjW4n1MIjMEI5-4A8aAhaH-a;ve*TR7X(=i?8`xoN{)6h#3W1u5y_?wn(OwGQ z?e{<1ckSR5&n^w>a&OPbpA^U_3eHFZP=W#_Z~VumbBvsM?W(^oiT;Lg`Knam?nKV$ zJtBv9k>IH%0szPb0Ng%fFX&eP)McfjqJn5&c0i$m5gKgFU>J^@R%_HLkB%US@lC zL~gJ2Ilsg7iFoj3qs<@Y7oW~pqrShbQ<)rB(5`&2p_B05M$1EK!{Xy_aTiwYewiHw z-Az8uz&j=-O?5o|gKpi8mv$#r1D?*4PYe4Xvwcyyh*SI;w-0B7>j>xeZ@yTqT2*4T ze%P#f$L^S;(Sd$0I@h|=vo32tze4R>nxo)Q68fHOT6T2js{0 z4>VdCFWZoI)oxGtZr$ct9~LTETgE+E_3x4*RKnhL)1`Y9i7)+nsIO)|^b@i9eP>-*y9em1QoU`iq7@W$ ziZ(YWL(KYHF{YT7bTaW!U4-WCF0ZYf>B(AF5$Nf)yH5IdyqlB#Y^}VQzj?dWy$<^< zk6H11;x($$e?GC?m+ZE$&C@Klk@gEf<6#0C19_nn4u{HDbqNXzyW~5MM-Ex82f>Sz zMCOM_2CVarGBJb(7;H$8ba*oq*Qc1pQ0$p3cEGv-hBuozh9DSHK`NwCO`sWskbB#= zfEJ@eICnfhG9L{UCqqLAW-u2e^~TWf4QUN^mwgr1?lG%J}69~wbd>t*vx9oy!aE{;Kt4DIl0q(uRm%|R1R-)?z(e# zbD{DLdVAwGyLeHZ9crN>)NivmdfB<7S1wLLi(eH(JeK?{@<6(36&91 zE19Xjd#z>1pt&o_@{Z>;gZtLU6fRI-DWNl#UNrvydY7L%; zukRedp_q3=aGLl}2x0zqw*UW}EtdO0IXRyzBu7Tls zUi5Vo#vc|C|GD`noGb++^r{2LgFNmm;m0)w^+UGV+F!wy2PX>`0O zNm$mDq_mJ9>`cg-A^^yiYn^w;|EM{6=7JA&bAC!Jk;j#jvzkO=GLU}zuBNJJjr?Il zr5X=kpS!(F8szXs8_%rDD`r_nxm=y8wFFcRwR+4hLgYDd_=qZh^}}yGdFE^!XCzuk}~o{i8)y7Q=|0yd7}Nz zZ{LSJw@Gnj-pZx1y>n>$YG@Pv z!!2#qnlAZ-eQN)T*@uU1eFs01e4f)E1yHm0)@7A1t8#uOL3A#+Jk?`))^!QTxS-6@ zQ^ciwhv@;;Avf9b9~!4S4H)+Zyehfb(5;>3cgTf|f{~=70t&dv3IJ+vXSWpFw#CU6 z%)E}!&4%cYUr1I(Ox^HNe5dsc)3V~8U2;2%BCbE#M!8zNji?c{_ZsOpk*%SKYIqcpMf z(oaCgw*@GTwgrsq1rUru#uxepIs+ytMNC>TK%=daH}Wg;%bXe+f_(=6iv`+n+Zw)7 z#QX^$JQgu$j6}@;X%H^THd8phuk}^IR0Yw6f z)*{_r7VO-APKd7gfQ^B4F{@AR`#Yyea%qJxRxGFP#*#}GIHY5p*pB+fJ{wn1EB5bI zK4h{gAH<1)HV8+1MOH)7;D@_$j?JURDKZMdd2Z(m+F!!-uiahwbIL8;ymV%6Q}mQM z(#Q1dn(r@U^7OTV&sr1feBqHK{|_K34q-6U5X(!A#k`VA3n65(Ak&QE0;4HT5Mq(? zr?14`HcE=)hy2T+V3m#gH8d0*eFh`yxDl6lw(Bvjj|W9&NMI6i!U5no;T=MVGByVg z6d-_u892Y(N*gJ+Laf}%JBSeyR&IqP9EAMB62v6Qr%}6C(Bx0?`C`AZA4Mpo4k0&e zg%Kv;v3bNv?cem4DybEXSdR)GVUsI33Ta~2h56Mw{J67(B8=fX+lH2$E4 eP`!}3uTAU#zt3Wkf6#GZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/32e17f50517146768c9a47b86c61523f70796d17 b/fuzz/corpora/client/32e17f50517146768c9a47b86c61523f70796d17 new file mode 100644 index 0000000000000000000000000000000000000000..996d4d75f50f59e96b268d007bf6db7fe0ee4b87 GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D3pIrpA1St($Xw>200Db6nK7GxWt{5XybyWjy!1UCD$ zFZiP?u`fC$>FNjHqk=4Y<(nhsGD5?qtHQ1_{}QY3@3kFGo74)F^SAB`l@SBc@OwmrvI*$MP zzpI|f|B{kA&%=@pvqEf^{BcP6^-nnIMdOC9_99lw^2!ARD+J^lD6FJY^G}w;7VP z!#76z=qkQb?qJaLSyg;lA@wQ0%E^de_6fGpF VJKaK92qM?oJvg*%v!?I0*a9JZU0nbG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3327148340a956e13c335c8f5de4b36d2006ba4d b/fuzz/corpora/client/3327148340a956e13c335c8f5de4b36d2006ba4d new file mode 100644 index 0000000000000000000000000000000000000000..a3ca572691062f6f3abb20952b5bdaa56b0bcdab GIT binary patch literal 544 zcmWe*W@fNtVqh?3X8x_ey0Gc@6DQy6FT-m!m+OZ!T;H&1tCI0s`3v**%${Aqa6p-X zftNv_C*_cCF*o2uJLk)!u1VJ1Q9SPzaRRE&Mt0;xyI&Oo|LMxQj9!e$9}wP!R?I DPK1}F literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/33b43db2bc461b1ddd85020449b4776fb7cfbf58 b/fuzz/corpora/client/33b43db2bc461b1ddd85020449b4776fb7cfbf58 new file mode 100644 index 0000000000000000000000000000000000000000..2cdbfe4f79372940968d84b3093276fab44047f8 GIT binary patch literal 544 zcmbV|ziPrz6vn@E&o!DR79^0kq^-E=@@44Ip^G3miAx4w#0SXWa|pgjpP(HIf`iYZ z}|^fPAx%FBY=dsSz3< z$GW5Mbtl`!=erfovw*&*xn*R?EaJc=;X_?ZW+OgV;;<1LUdr$(={E|=R{GB|t~Kdi z7q1yzS2yDI+zl#Soxy_mu|ONtv_G!wS6njnG*2IGT#GGA7t*o4>4GCH3nJU8vc_dy J{5JNlTmT=)TuJ}{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/33b5dce0dc50e5bcd4ce68f949f681a4e546faf0 b/fuzz/corpora/client/33b5dce0dc50e5bcd4ce68f949f681a4e546faf0 new file mode 100644 index 0000000000000000000000000000000000000000..b7b20bd285677185fe9c327d0e100417102c22fc GIT binary patch literal 34 acmWe-u3=zeoGQv(!vF=WAU0G8L;(OqVgxe) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/33c931309638367df3954024eb0328756cbd8e3b b/fuzz/corpora/client/33c931309638367df3954024eb0328756cbd8e3b new file mode 100644 index 0000000000000000000000000000000000000000..72300afa4a4555d4ea29bca06373eb5db140570c GIT binary patch literal 476 zcmV<20VDnv0|Nj(0ssIx0|Nm90|W&I2M7rY3k(eo4-gR&6BHE|7Z@2D8yp=TA0Pk# zn*ab2{{a92001KZ000&M000*N02TuS0g4O&0fqp8u?vrupn%{V-jd#4u3c2@QpumZ z`v#-NnrfZOQqntNU~}Szb)r2Om^kkqF6L6e6YR9EsRj`vB$r$~)SH99tjpbfki@-k zm`IMCA)0e?PXE^WK-eU+t$q>_W4L5Df&7tU?uU3&Sl=Jk{@}7o3{!nVDitrj#~jnir5UZ S3RKu076StS1P%ZI02Tw~GQSi6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/33cda12282158ba25c89adb9c9f63d7ea15e2b91 b/fuzz/corpora/client/33cda12282158ba25c89adb9c9f63d7ea15e2b91 new file mode 100644 index 0000000000000000000000000000000000000000..c54ab49b85d060400936ed78468fb725f67a65c7 GIT binary patch literal 2519 zcmWe*W@NBrVqh?3X572&yL8^GL@znN=8Xwb2ZVc{TXLM(&XwrGz{hZq0R-3?77f!RC; zylk9WZ60mkc^Mg5Ss4sm4Y>_C*_cCF*o2uJLk)!u1VJ1Q9EDF$-lyoM$QCPv0a2Brok22tX?hUNw) zMn+IBert3wttm+@%0pPA5KvO7;8Rj&&^RC2{fw*(%#FPa292Fejg1VN+9#G7JxTiS z`}xA!$Zl7oy&v88b4FAv?KNFDUA1k>f`$WI&g~`_<@tUFWyj6E^m&SD73r z_TuO-JI5U|>r$tBBn7ux*BkJF^b51F8Za|5{zvvOE6Br* z4Aw6ya;ILi&H64ZsUv-;W1Z6KFTF-zYYNlP>t2*Obh!P|%YB_OPfS*OOgv;i)m?kt zJk^S9|5*Y{ivFJe&cw5Ui(^UDqo*Zxg0dzFStsQ)KkFr{-I@13yNc^!aQKW>MH4Gn z>g4-VedW1@*341iZxN9S)s^4l%0=P>YlB&ZVf-{NPD?A?E-isrSiND}!m zgRy*-z6dA+7{!#1^QRy8^LL5!+R7>v$qv`$s{~?gxkqX`i%fJOM zrR95xVX$IqNg`4;g0*~4A*Fm@PGtFxt)%xNyQIHHbV&~?$U)U6sH8U#Yrw1uaFq18 XieFi>ir*nz)F1qQo}9XP(8Uk{Js6Fg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/343371766f1a0708e85f1117b6f7206fc99b539c b/fuzz/corpora/client/343371766f1a0708e85f1117b6f7206fc99b539c new file mode 100644 index 0000000000000000000000000000000000000000..8d127b7118b30c88c4f24f4cd6a94fdd81ed7a9f GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^js=n3)(2m^c}3!c1&nW7lf)IA_bkXwqQNz~BiJrx-Laj6zrlP#l=p003Zs BcSHaH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3447baa5749505bd5106bc8940929e552e1cf1b5 b/fuzz/corpora/client/3447baa5749505bd5106bc8940929e552e1cf1b5 new file mode 100644 index 0000000000000000000000000000000000000000..6adf04fdcec5d71bba8389d26df947e42218cfa3 GIT binary patch literal 6631 zcmeHM3s6(X8s2kG5=aOj1_BC%@K8VmmH=%*5hz-)f?^Rtpdf^lhw?B4C07Lr4-uhA z74ZUETd0a42+C84Jfu>!qWI{gK2SyxY!y(s$m5zj2a*&N+B#$BcINueWODY*p6uDp z_wE1v-_kJzSfKz|Vn}`Ekb3xI|7ym{gtGN>8))f|tYllODEb}M8H}EE_9~i{ONH_z@`7Zi!~u^Z2y$1&4}TKG*0Rc(1Vo5Ky~@R%MUfk7d> zD5fiq&vfPmLWZimnFX|9nX{lJw18f!@@5}G3l>Y_2lMcvM=Oynuyrbc?*5=HhPt2~&>Z#IU zMCxX8TYJO!)=5J<6whVRqgy`R{Rr0&_&QF8NmP|5&`AppsDg)5;Z33Jy}AkYcQyQ6Ou zUz8OpXmP4W)(STsjs7{QbbK*2bqQ*azGM0hRQ!1wfe0}K5lx;j5ub28Skw~}mUYu6 zbci-*p?XtFiB8drbk^XuO+jtOS2dcNcXss(clkW9D00edvdt{aExBU5fV%H_(c4p18BLm9mYi)G;o^Or~Z7m=6&euOT z*Rsr@*UoTZ_2(M*e0v**+RD0=^ga`PG`vmo&Z`UDLpzTJD8D>_Y&mYKjQ;@$9Yg3~ z66(bRlE@1%OiV8%>xe1VKP=K^S0kT;dvK@pPd__|_<4E8Y~bQ^_qo#lL; zEi`4w?@M*Qk-ed+kRkuc=$*ns#=+aQUdW@H*~chq!_DXN8Edzj2+l# zyrPY()A$-sixS(5i?aG>+ywWok3!%!+&(F!A%xw(5a;SDf|37%ad_U!X z<^-P}xOhm#w_A(#nZIxJ56W~51E;6}lwv^5pYZBJ75l)_yXyaT;V&XKpO-JpNDxUk z?gJA$x1nT}5dc6Q0N~mw2Pp(T{oMcnOrp`-gR#20n&eQCt6a^F2s34KH%6I8aoEvZ z4%^>^&D{uB;@cgQ;0TvN2NJjlThgu#G z2W@q{)i$p<{v56M%y^s~1HH^%84#Qj6E&R5zMa?f<74|0^^k{4XQxHJR80A_QpP#n z$K&PcuqI+v&epSa>Ss!=H;h@-rDkkD$`1{4)w|f8p4F_|^F3=|)d6M4(uhG`7TxCC z;`!bu9S_D7s4Tsf7ikeMvbv!xU-Nq?7$4|4BqssY{#v!;68^V zT6LCJPrQfc@1gTO{{CwGB{a3L^{#2Qn9WZxy8hy_fS?UeVzH0jlT1syeY36$ zbr!Jier#l1Ga+;0kHYwZNkV5h_q&K6Q*Nx^RMpO0I%1Qpph9>Cqj6&E62jre9n*IB zW_f|*w7J5aAWNH0fYQ{YIC)Kg3do?MQm4j?@SXO|@=1;eFnkMH@R*F7A1nomQ$Vwi@8=YuICpTrp7EW<+l@EMo**&%I8Pw zMpOu$uIoP=Yj&wU>$kng+Hd_7_$o;c|{B8aqkRaW$kOqs$6|$tRMs_#5(+8^>u>6Mlzx@kdQyV5Z*q2H7-Fs_&Y zXtVB`6dL~L^^DD}38w2x-;-_CK?JkPCbblxFeDO|_*2aAo zY0qj&jX%j{Cz&UYd34cLF#wpiyYKi{K3QyGS8j5&;mgwfsyKYSjYQg^KGUy%cy_w-}e_jlSE%TPT}W&WJo9qv^T7t7x2RG1SOT$`U!qh+s< z-75#aTA+Q;S>I0atcYBjvp@3SqnS&Zc{7$Y zGpLVgOPUJZT;<;iqM7js1&GdM<&Kvs0z?r&0YVv1W3L7JTKnC{|6g$=C99+yIpepz zh~>8(fN9AZ%YK8bdmFaD)^@$ZnYWu_QL@ALKheEnv=w*Ft|YYP?&FO?^3RZJyz|1Nr(QpB>p zZTI8|x9zfj^0Fmsc0SeZBMbYO5(Y3(%)=66==H_bWR`z7e_74=Z?YKky7b)hqOTrV1`EQbh@x)uq9Z>q_ zdKpbAt+02^XRHj|nED7sy1pQ%o@*Vjbps9LH|;}YCi@VgWY7Vj)Jk6mX(KOh#5w); zFVisyYQ_%+u%S{;a6?AzPsvx&rRki!3w)I&3daoXFW*|u5o54LGPE{+Fdz=9@rLwl< r7E^qIf8!rjD9?a!TvSTB;CEk}HZ+s2c_A+(=3yAfSZA_ zgn_Y;ficgZi80Hd@zVlkCPpSEMh*imHV&;ek8`#x%uEKthJptCY|No7%)%V0$tlH& z#ug?9a^k#(W(Jl<#)gJQmd3_W;=D%4T_Uw@ggC;)sknIA6Ovs>Qk0@L2%^b zi%-tpH0+&lc2mdWbi-Rob#tySNM$`<*nXDDkmG>9&zG69SJ#Nfyv*e$J_M8ogH*AT{7O3Q5U^vUnAd$$TRoy>H#?V%?^qJeQ$?C7F z-p`r1_R4*p8AoNbcBjN$ST9r&!eK$-llz z`&;*OzPhH_c_Koas&g#7REy6l#BVN_Y_#`26sHx-kOuOQ{a10fYZusSZ*Dm^JLBEf pf^(1WYiFguPr0S_>wPkJ$EwKq`DYJ2J$Ik2&AX^-LbV0CIslrv3s3+6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/34541f626470b171388498faab41fab8b4122a06 b/fuzz/corpora/client/34541f626470b171388498faab41fab8b4122a06 new file mode 100644 index 0000000000000000000000000000000000000000..f6e6e34cf7922631390f1f00398ef002c6d8dd42 GIT binary patch literal 6600 zcmeHM2~<;88onSQHQgmjJe)2ox#Uf?^Rtpll&!kxd9ns)B??L?}{4 z96)OeRS^V1S%t_Vm8uoRr9)j%jw0A9pfboZX3m2o0z#+GIH%Lo{^#W6-FNPL_r06% z`~UC%LPHT?h6BJ9Md~YuRKgznR?}A}l=&=Zpr$`ElWwgd`_5U}2qr=b09l{~fDi!) z07?MRPz3jx48ZvToHxLELO#w7@{z{FC=S8lNMQ7&gL~23TndyWk`^c1ClARY2!Q~g zt&t2Q5m6UBk&3f+F``0wY#>b`JBNpIn9f{ZF2_g%s$(a~6y;T6Y))hths$sc@(&2& zMlqbYJca|;AJUa%jZB~k%a{dCp$T+Xk~Mk{ny^@+;ae}moq3t~uO>e~LI7xdI)L%J zaPjd#PrvmD>w%xp@%fb#8+O|stsk&EOLE()S#MgBy)b#-;T;X9)i-Abd}wrKZcmja zJwhupvb8sqXPz{)L+)G_ExP5SO%APW%lv2Tyv1vBMlLpP3e!!}J*-3Ls2-QP;StWX zd7{6kEUi>~?^;?<%g74rYSj|XG8MO`j*^?l15yTXC<2gtC%77_5m6VlId~dgVR!V6 z;)~LPIqICMk@bR*qtQPlm5y(wnigIe(ss-|fr4F6#SFH7xFH*35VrMt&Uy^-m*)hD=)rNPiP*`ZdNnv01f(Y(hEiI z$N;1RAU6SW4f2sT$VWDd77~hB2_T6mwK&=SvIQP_SD2?O$-Yy*iXZjOcpD~**lx@+ zGJOwYy9qR98HO98W56-!ja7wo*$+qW6c*AC-mY~=9^K47MphnfK9^5l-?c5l{uXV4>Y!Tez&_^3 zZIPOd(`Z_h*j`+e)h|wh0D!quk|2LIEk?@4)%(GsbpF*T{1sg}bpnNm0wCcpiHO*f z@nVD^I1TXZu&LKt^QFx(yxgZcPDx)x5V={d?Rs4BLZGQ-lc;_DUty#ftI!6^y=r6^GL#lN~x#Xhj|uF5|gdCLgR=Vc2s z5`>bxeL$4BMSF|@0P+9;*G}0?2EZhmygk^etE-7N6}bx4?C?-Sc4SDDVHAfQ9m!$) z8n7cn;A$+LG4OWK7TOT;E@}(_mq9b4v_26b5TtMjjTy-0Mnst#;`j&xYGr;(oIek- zj^1WqQD5&NaQ->c+vLmC=#*N&npETafJIPXU9NyqgT3k`@}?5`?7BqHvRC}xtCUvP9+mG^s1Dv!kcBf}GYxR7`8d!5c!LBrXkefxb_@;P~ z$4R?`F$KA!U5{H^KaS-(U%K_mKgzdjNe8`#X&2@o;11g`f;$5@{UY6QYb>zO=7@To z>D3c&hrc(9@KktV#aLWF{uBJ+#rWg@g}*-u{t}v6*xJ|BT8tJY=wE+vna@jHGfwz=Re>F}MX{pzhQOrGBrvJUtHgO~n!x0fKt-iyjXVBZ4Y53eC}EmB zk|6*TOCc-1Pbi&-tE6RJklMZn8M5iVaE7OTc#Nqm@bLG$(eKzIk2lzI%I#orq*;v9 z`6YU(F)Ivt?F7fs6Dj=iMG;!z6$1O~I?u+M9c#~eZ!a?U-u_a~-fdkXHD)Yn@75z) zPmU}kKjGx1E$4s99#x)?+*js|H24XW`+5>=uIwEQ>#zwl*844&f7!I)JGBr&%J~stZ5(b*yQU81KKEqKy5$99R{kTesD3>z zok6UueN9=FYtO8HBtu+XX?F6d*=c7-p<#Z7y_b|zWvX$m%Bbty%5PeA9EJ`1gMKc( z((*(rE#NCB8VV-#nF0#N6%hap*RtD+tvcf5^OsygTueq??)6g6M5%6mMc!?pYg|$M z^b7gjMNyaT?_``W-bqvs*>{optd`jLqfB;^aq^gJ7flHTfN{I~j&J3Y{!)3#2w%3pA+%8i!i-y9V4}g7JSR7?)oC zT?@9@5t5qX2w?@AIo%POJweV;u;27Eex+dlsYU!Br(m1^-UZu)#lo853Evb|jNQMB zmL?x=+qdnW4F0xN_K)tCB(=_`T74uzAEW%l+ZsC_!jWl-bGpGZL_j5k8MjcCCEeQ; z-*mDFnQDqoa#3e7JjA|)1^g=v{BI=lZz#gA zCG(yM$^3s(gt5X~962EW_4P8Ud|F}ex=&acnDz8N4(a-glzOgpz|t8sklyqMk=gt~ zh$Ddx2qj+m21p%wc_YsLvc%S+p%B!JJOAiVDJQTYqxQ$-tGJcvoID?%;)*%P^sF!6 zTE!6|u|>SJ2Il;Wf+9Wu6f%UN943Siz810+5T9a*4zO?RqXcE?5RQvV@f7UrwAY51PdE{U+@OHNhm2gP J2+$o_`Y&rg%-jF~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/347869bb45903b5189fb0c93c4dff3af14d1bb4c b/fuzz/corpora/client/347869bb45903b5189fb0c93c4dff3af14d1bb4c new file mode 100644 index 0000000000000000000000000000000000000000..f927f50a347b06027384fd6441b7ae8e35a61b82 GIT binary patch literal 544 zcmWe*W@fNtVqh?3W}aQpqrIT=-1+}M`PVxvzmQelsrYD4<9*HlR*lJrWi4+q98hLp z;AK!|VEE6-z{tQL&cGnX%*=R~n}P8r1LHLY#>)mxjOPuS7|RwgGchtTao)Ve!r?VqgFOP{w@r literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/348baf9b57a4a817d58439beb37f945f471f74ab b/fuzz/corpora/client/348baf9b57a4a817d58439beb37f945f471f74ab new file mode 100644 index 0000000000000000000000000000000000000000..0a1098b9b4322254714bacc09d01cbce7ca37e48 GIT binary patch literal 724 zcmcJNuS-Kw6vxlK_q~U6KTtNFmg$_$^jV$3G%!q=VK6}ul)1EEu$X)c1B1a}u_&yF zVac!}IzbRDOM-ub(V&6`$8?De0`3f_|y~sjyx%m-S%5{Z8E=t5RWyecu%DE(yHW-VI zL%rJ9RC9C8+QaeKG*Gq6)>Q*CCCC(knW=ba&}S(8E1TeKuzux=366x|PzQmCNJWG% zdMm6`SceYp>}RjT!fvnN80bwvcE;`>Uh3rG08ZGuXSevUz0_ix1x`O7yPQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHUY2I2n!^KmjKk zyH=aWIa?M+16MB`o2Y zS7K0CeH-tc9_{PIE*azj-oyj}Vj0YR2_kKJ0dBx%)n^u77#bq&)2!TRf}Jmal*BhrWL% z&wl3i`}T6XiaA9aw{op7UH)*!(dxJIuh|}%JvekK=fuLJ5(1iw8?8e z9tQGFr8*E}W@gyN!@#hKnL$=TS0?kq=R>ycZzjb4da>#J?;xistkbRe%HnR--Th{7 z&B4aZ&}Gor&g8^6`=sh5i!6pq_uR^x)n$M8GjCp@^)lOe9lyntrhmWl7t9mbco)BYFlGu&Pm_`*L(+*;pIwyaDu zI_>!9Nxe5`&N*^n&g}(qEUTK*<{SR8?fu*S_u1Sh86{Wb8xo$USI7z;HJk|mienq< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/34a36018f4fc246933708d0ac7d6f29f71e8c339 b/fuzz/corpora/client/34a36018f4fc246933708d0ac7d6f29f71e8c339 new file mode 100644 index 0000000000000000000000000000000000000000..6f029871115c1cba9cf8904433045faa219091ba GIT binary patch literal 1436 zcmWe*Hej%1Vqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#7_1l>7#SGE7#PHunVAoBGcfOGVBW*PywjkGd8RhY>!)KJ(!5X9l&;|k8tP1Ox9NvusZ zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cCl30S%n#_`7Mh1qzU~8Hfm7pGI`_9YA$jHjT+{DPwV9>+WP?W@KPo+_>DJafyK}8*`|v9E%u>$j{kJ^Uro% zO(@)cNx|ip?Q}j-mQMzyAZcZmJcFFsSQRYfb~jjJVCd-zP93mlV`dW!W#JHprH*ZQ zqYaiinvjwo56D_!7FGjhM#lf}xa4MJWaS0LB_o5~$>#M!Oxwh!o?@?^!1&$y*{R)? z@(cdxO6-eHNxJ&M_oyI?Uis#Txoe6nD*}$|Xm(ZD=~rH2_5HoJqiK^`fpY%VeI8fT zKm9rEyK8@Z?P{y|+8_KL5g{$Y6@OYMS1(h3yG)hqZR(sJo2E(0za=CYA4;VDI*_za z;{A(e=L?g+=Do0A7Myx%021x1H_n_83lMjnVR9t W&p)e%K**~PrI2Sr2TkY#SOEYUn3}`@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/34abea6b0edaba25b224f823ae91e8375d7a7140 b/fuzz/corpora/client/34abea6b0edaba25b224f823ae91e8375d7a7140 new file mode 100644 index 0000000000000000000000000000000000000000..331011b446b36d9b47f4c8db080c8c31b873d3c1 GIT binary patch literal 571 zcmWe*W@Zv*VqgelX8g~jl(??!Oi7W($ythK>^z)Bl59u&)nDZaIKEz5^zDwqKGV%! zS6n|&d6<0u%~FFz*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5EsMyKc;g znqaW@W!aXlHD8?GylW}S_|aq{zW#X^&yx2Y-*RrR58cie)Otp+YUR1jN=p=L#Q9!K zs{Y&;R`l!5_j#JlH`UXAZ%cAjVqjXw=jV30An2T2uJd|5l5o3?vLV*_cCRg;|&k7!0^UOnw#? zW+v7J$WG_p#K7Fx$k6e#!RXYL57PS@7s#YUwCuL||NsC0lV?r7=O(lb7E#7w?RDxPU;4% zJNj`W%RDywh2G~1i&VJIt0v876`#iejw%L)mXhukgR|>b&7E>%eIFkK1A_=NBLgF& W7&9Y-1SlXO$`}~V$%VuG{s{nI$II>j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/34b727cc0eee608d13e9c683fa5d7559f3bad510 b/fuzz/corpora/client/34b727cc0eee608d13e9c683fa5d7559f3bad510 new file mode 100644 index 0000000000000000000000000000000000000000..5b7ea2567ab683a345927052998cffaa58c8228c GIT binary patch literal 475 zcmWe*W@fNuVqmajW@h}w#KOwP&cVsW&BM#bFCZu+EFvl_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO168L)yMSVSA(Km*RA8Nje2+r`5*fJ)Y> zGBALB!^rTHfsu`&VIz0{v<3W7FUM-U2|77{&u_MH!&zB#Phkd`0wb2d!2;Y(el3>z s>K}dPz{0@w@w_LttePZW*%t4?rJ3;QJWTy&u8QSh5b1>fcIib|KJ!ZnnlFal4^9(~3zBrf} z1gb8LWW8=98SXKS`_6}3v!A3sNUL0V^w^7*NAU;r85kJEn3?8Y&vdg9N#FBs}vdS~ozBF_#sT&NGb1~*69dyT>&!>{Q|C|L zr!P09%jat2^z7{`<#^qG-(9&MJ#d2YfYMMQ6i%H3Rm96_Y zMc4a$kEK!-lmJ-P>@w-kuVTz zz^;G?q+ghY)qt6i@jp^1GkY)?xH2g+d|F@{7ieX6xT$jXJN1Cpz5=$Aso|G2OBe=S YtU`i&G*&^;PGYS7ryPhfGczy%05fWMn*aa+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/34f0b0bedec22d8a49d878af8903733f8cdd7047 b/fuzz/corpora/client/34f0b0bedec22d8a49d878af8903733f8cdd7047 new file mode 100644 index 0000000000000000000000000000000000000000..f371755a8aa93f73680d7f1af1869d74b200fd29 GIT binary patch literal 115 zcmajXu?c`M07b!PJ_ID#W&sN!X8V6J HWz+Zrewz>Q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/34fa71215d3a91975b549c371e13236e05f97859 b/fuzz/corpora/client/34fa71215d3a91975b549c371e13236e05f97859 new file mode 100644 index 0000000000000000000000000000000000000000..4887d85546408b71e2ccb00bdcdedd0d225ed2d4 GIT binary patch literal 880 zcmchVT}YE*6vxl=u~)ab>DZV;Xj36-k~~`(hN+lXTPYT{=0{(vO&i)A`c4osrh#~C zAEJ_4X_!=GC|)IcC2Hw{C?tqkk|hd~T}+I6;vFXCO?REU^PB@e{=f6+34wzcAdQf~ z;M`k#Z^MxKNJER^gH`tI+XdfQ8i{~F#hz}H4aQRdRFDk75g>qA06ihNRtdNoa1~%T zYr-zpgqH6Tj4+l%a4dB(Av&sn$%P2cEwh;vu{@KK$pvB)ab>S6-Cuo zTziW|hv+gTvYpbSLK|oGh^`us%We?e&I-3!Yd9g+8}dabONdnkrUH|JiNG{7?K79g zs!Ru1I!k9P+-_m0pv5_VV%|{IUl{R+N*l*Hw{p%o*f%jYDugk0EJlbhHd|&hF%o1c zjTDl|MWAY*x!_S;$9lr^;a#?QhkV@ZTQiUP&#cymD3W`G-3yN=gSW<7opfV9|Mbk~ zljfen=vQrp*^V7+Lm!`h3U##)w$!W)Pn9k=# z6cIPDa-0sYua2r)HT}oinnqrh`js6IXSSu?{96A=TY0ArRz`ZhrkI_c7Xy02S3{g5 z0N_(PJt43^3V;!aH!wv&cPj6i#aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCy8W@wz`ncebKuX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>k&&U=H8LY=lgWgaWm~$| zd~tg7uB9mBN0Wuz`sZCdOWt>UE4aO0!hn;FIaF4dg~@=yfE&c*XJKJxVqJi2EH}v5 zMuv``4d>*-T@T&uzgGLWP0w9WOwMffw7n}L1z&%8c24?LQe=VJoN@*)n+^7JENtQ{ znV9YV{aq|&K%yNcr>=aI-q*N5CMBX}w~dkY+K7{9O}^*Gy_=9C+OgH8@b1)W*5ZCz zCevaTm~JxPbncp6ss59f-z`K;peuDm>0wMM*fS4&|@^?9T9tL9F*vA&Owfq_AUnHd0xtF<=( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/35604b6431e63142f19c8add678077fd77bda2e6 b/fuzz/corpora/client/35604b6431e63142f19c8add678077fd77bda2e6 new file mode 100644 index 0000000000000000000000000000000000000000..efd144a5bb410736c7697c6482fea8079e176847 GIT binary patch literal 2251 zcmd6ndoU7TjwWt05_nz~<@AG`0%SR0bL%*DG=hT3A*Z{ma4^6SV+4a?22Q~-R2DuF=(xjX0g=J(sNi;; z*b!R(1C^L6Z1aYRv#BogJ#Wg2xhI)@&@?gED#Wd%5)2f%AOAPhJCXQClTE%92Hz%)%$`vF=GTSQKhwGQ^(9Xz{k%dTK zZ&Y3<{n)07Zl0Ry9f2+Nu@WVFw3V>YcRN0}>h>>e=4R`+?;39>X(H_OniP89|rn!cKO zdh==Q42PE)@nA#x?#l{jep#q3hYXUO}yQmV~pjocrxT=K_KFwD8?r;mM-j zHXLz8IA7~>C>v*>VIi0Ow{-_5MK!B%kq$rZ7UlIhDz+5Z-zOhE zEF`JFS-CgqRkMc`cfI{JVXDHzbDKTI$48z8j`8`rWrgP2u;rdZ- z&?yFG(S|S)`(b~|i!tvDnRff3<@=2H9P0ShnVtOHn}PdsL3zMhxOZI+1!w^!0?MGM z;_v{4VE{-36aaw3%`M}5YfHjID31qyu%n+r5L^Z@xENrt&Zpo)`Uoyn6;%~?Qs2SF z2H3pK*z;q!e1bc8h>D_F%@Nch>2q@!!+&d)*`38pGA$KP4 z)t0T<*PTyXX?N3Iy2fs}wM@*vyW-xi+%9YTMFEzR4XLN@8lGJHI?B9<#ZubW`jS_K zH2>m4 z4NZmXBvHuu+CjzL93k?it8u*hMWq$4(b&qIc`Rf)>vUUrQu{9H{OztG_iObm&Gw@Y) zWQqC~x&A(|dqHVbLR{KunYvMc(G#P;;%krSQ@O-MGPRxW&~A+|5=+Bcd6~@qZr8GC zFZ0z!5|*H}EHt8tWRXC>P198|Q>L!bGDi#2{T1{h4WuR0jk2@>Pdl=C{JQ&`;{5hh{ps3CtT}LAo6}Ok_#dnaq S{n*-!I$D+nKZrCt@qYuz8)Z=d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3568c55adab1ac1eebd3c920460db20651a8b804 b/fuzz/corpora/client/3568c55adab1ac1eebd3c920460db20651a8b804 new file mode 100644 index 0000000000000000000000000000000000000000..5f2820c7a8f65347d0986d0c58c5dafaea8f6b6c GIT binary patch literal 878 zcmWe*W@fNtVqh?3WX%xC#Pj`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AX4`jOMn+av1_M_^ZUas>=1>+kVJ62=Ltz6!5XXv#D>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmo>@|?5KvO7;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m)tehJ#dV8s|gY?*Vo{BP#=QV=se2V<%H%BZs8+iDf1lN&kI6UsxO2?YeyL zNB8}l5!Fh2jn_?AZJV;7;lLL8vWe+#1{VZcwkydMC{HXp@iMp4snGBNl3|F$^5z|TOIjX6}7k420{q`UO$n$sNn_~cW!{|eiev%K_H z>v~9FslYQdQ?J=(eHWJ0kv`P1 zPHFX*UZbxyh3V&YFUlM`-2Uk0zRs8@=Bqs>9tve)*LI($T9NHPOJGUS-}B#@cs6ix zEQxybw4_c@)-oaMqHtgN^kYXEjEVcRys xZ2J$hjS-qXN?A>rna^*yac$+SlKV|N_n+}I0;OZin`r40J;6W{xR@b3GnRRJs$eykB~oH6ymo3ly{(=S&|dHdd7^_k}z1-Y{h z|FbJrg&pDCvGMMG=Ag7Ec1laX{M!8XZ{yzIVGH&h;9_9l|If(4$ncAcfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys_85MW@S z;A3E5AScdiU|?WiXli0%YGGnw1mdcLM4-UcklTP0q=`+K$sp8F*gz1(;o#viP`EHh z7o;fFP|-jhB*?`hVPasIT4a!FpkR<`ppa=`0JkR6K$wjk>=GtMsFRo(gq59`K00Tb*SvKZS zSw0pq7LnC0m)5MF`k~2Btb#o>JpPGVZ_`Dv^JJA-Bn-qFuq)sJ=@({UHDG3B{BOVs zbt(%Zvj>BLE0ZF_rv;`ZnduAWS%)$Z3fa`;l;T8V3lmVt8k!kc8W|fJ8d(|}M~U+S E0Jge-`~Uy| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/35b1d1d9ba0a5e964f0fd90f4b54ab15307cfb1b b/fuzz/corpora/client/35b1d1d9ba0a5e964f0fd90f4b54ab15307cfb1b new file mode 100644 index 0000000000000000000000000000000000000000..37b9f4007b925e9e5283ead2a73172dc3480cd4f GIT binary patch literal 1335 zcmd^;PfElv6vn@o*9O~86{&Otsei_e%qV_cxNs{7USLk(-kk@SEan!1px_B+F(4?o z@f2P|ca^qw6sd>{SN(00moG10@{*)V92?+BmA`<;LmP zE!(QU*^fUHNPY|dWE0jlZ8#ZxJ%IR7Co7UlRNj!WbRD9 z-*3L}y9^ux8w>z04r|JKwZotIS1?z^m#m#tOG|xhquf+Z@mE_?2Zlol099ZJfD{4< zfF=M89AclV04xAtegN}9V$2hXVclUIgBV5z11Frl3Z`XKkt&HiH_0ifR~14c5ul}( zDu_(N-3cTbX76rELmIM%GL_=CA&k#<6Z#AJmikCfc9TNYS{BaZ3&QzAmPbfnP>3*+ z(wWswqr3Zavd1YEhxdAi6 zFkR5p877*a*t<>rTm~bm@#BroO}xdq&v`j>S7!BJtlJoFl4x?+n90{Uu5`nD1KZ)L z*`AVJ#YTHSVRSV1FS4)DDdI2C_N;F$x_LY(xf{bFfVr+{1=1zq?z(CO27$ga>PF#3 zWr>;|zr267Wc|^oUlNOlHdEJ-poJLQChkC$ji(Wa2!~KQdcj25g5$t~j_9zAo3^37 zw3+j?>ywKN3SOpidbVr~YGz;6sc+cc)+yQH^U%7$DZPGiMv#Jrc%f=vuE0{ZTLEg*k7|?Ss$OeMx!X=CS{{AU&E8qnE~a(NmdTm}8`# zKxezp(mT_2fP7NfXAOtHZ4Lv6fS?A3Fb8%J07x9dWGox*?D*zk`p&yjdGuLmRtHM0 zs`ng|C_rdF3_{;Ed)tOP9f@7`VlA=l61#;}x%5akJ$1FM!Lt{eVnUlv_Ic+TpPR)k zG3m53omcUh&VAp`y58oJHVvasr62TdS#am|1;N4X#{%fD_QNlZThL{H0A%2h0Y;%- zJ|T%b7suu4g=a_XGRqfTZkG0`7uy}Z68gms{kELAd#2L)al8gyn^sV3_GWtF@Qw9Q>WzAMZ#HC5kfzA7H|&3KzkmS?*a$CCTL zEZeOSmt!SwPPp>CfeDI=R60~tCdu|Sh$i1n43d41 zm*RXQb6t5pQ}v^PJNfy{1GlTZ;NzQ_$0%BT4d-&1tJ}83JKbW;(&^ES>E6d)-YhVv z8<(a92`z;M8C{AZ2mqKirU;5xFrt;*J^UWdNflomlfUwjV>?huH~=I0OC~`l3PFJo zi0Omphq=C=%zv*TT9o~}v1{V)2$C?vqs3GRUP@+c|LmL+#@fOZ(L?p)yS@|#i~Q*S z$O=B)eevK7-*!FDr~bZCKhhaE4o*=4D8_-7KjHO-a^C(WceVfJB3eLfIIo(Y7B3yC z+xz8(TfWB-0FVO!xOU26Gyq1W$=idiqN0N2P?}Az;B5%A;0e}8T14`BQ35{C-<&5{ zk5z*}q6 z^5ZYC8qc&RnbFA0^0f)UDIr0}spQ+)^*=qaFVYTqv}F3Oh*#>#AD1aP$N6}?IvrL| zEYI3}wp#m4@%(jz*3~I#TaSuDgItX+wx?z^70Y^??pVB`N0`B|{kCw9_X)=X z(RtYeZBLq-md6O)F5P+^80p_Oua#NJb_{ox2>TpZq4$C}{-)e|YcTkk!x6n|?$z(# z4u5YP!eikjJB$_Q$KSypL4iN<6#o8C@E2d-$TPa8+h{o_-t79z%VJT&O25@cG3tdr zMo-hZcKfDXml(|D-TlyvT{%o+;*O%Yyir7^FZ;URp};2E_53{3 zl;}kkq86gd!1u}GlXD^rH$kOFzTehY>Q0`k5@^wbiF-F6F?@Pt zHsvWlXV*gUSG)nOnec%YzrQv>qV=pJ-r>sLp74&vNpAeBIb5Ote(u+`^K|c&`c|iO zcD27}Ppv!2D7y7QNQ;U4rh`1Mc@bsb?Z}Hod0ov^B9RE&P4A z#?FGsOAofQ&KGVc>8;;)k@mcbRQIz=W};Qnphp`+69<5GyZw%T+0%vAb|=k`*6uF; zn%tv#!fsXE``__yGizoL@5wsZ^*wqKm0W$S`kxWq_wF0VtnIpIr$jx)_DugJyFJ{i zG&Y8}*(pCOFt{o=ty0fkEwfVvd^K19zQ?cW#-@*ot@tx!GZlEe%=a-Z?OCV3aMjut zif3uW>a4FL4m_S*vdo@TvP{A*CX_6thS~H#1<&MoL}F+#nwiU_h#0B^B!-lsV{BYt zHxm`{#o%+-I9G2?Pa6Tqm7LP592H`hyO8oTm4SAEJ!lQ~ZxV6g3Ta>}`; z?!|7Pmi(qY2q&`#5k>~B2#r|fYY?sf)s0xE%OkE914p28$oR*5i}}H|X;nWbUB#B9 z@^dbTW-L-WW@>-=)-t}FGBzrv)|VOo@}Md%0F{DJ7@v(0LVxmDs@5`u_yWYYX1O8} z%NZdV`~B-ZWxqBOnq!*^vv0ILH}o`I93L4Y3(lC8S$emVnk=-4) YY$US@ha+DY5_I^Wr8^A*lm7Sq0K#yWu>b%7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/36065c921d38ad69b82cba89ed8bb7aa20522ad0 b/fuzz/corpora/client/36065c921d38ad69b82cba89ed8bb7aa20522ad0 new file mode 100644 index 0000000000000000000000000000000000000000..2804cbfdaddb71b7d7c6eaeb190ad819b9543ace GIT binary patch literal 1906 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gd0y1^xhC8>sr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>M`4`B<$fLAFMK0b)&=LF0U6_cO9GFgNxx7&LY=H8wJ6YM)qU^d#xO@8=6^BfDLV z_I`BV&lypzwAXaqbk(*g3mOh=lP{Z??q+yF;Kg<&xdP>hMJHb7R@$|GZ{R;NRjl-= zN1@M&Wc$URlILjo&-!)xU}2s{tHuI#xm1}|tXHG+b)Da8PuSSAUS)Ei*o&jT>>PK< ztV^|)jyQC4-L+Ne9UqyP85tNC2N?Jn$g(kq%JQ*@v50h+UR`sVV;`S<>h@n@`*N0- z&T3r`4oq2P76}8f222IFTGt!!fbMy-UUuz1}&+A^4Idr)F(aU|EF;7fZdrUlJKXsk9`#jZ(Z2wsTON#!U|IWm- zfs12F)T5^*b%L^{30WuQGe7GktKFIRKD&zRVQ~12RYemkSnA~aQ+?&Rh1Seb;cpR< z3elC{{b4TWCXSd$qtpg9F=j>v7Cr`Wnq%l>VPI$lr^$L<#_ksjpG@q&_a6#=>WlA5 z`ER^u!is%pi7+m5@*{|%W%Zt)6IdUe(Y>Uw({atF3`Wd}g{fLz5 zMva&5nmRjTWgf)6Jox?m#z%rGLH{j&*2v!dcdBS!`-&uyA2S%sSLus@B7jkhnUMwL z9D~^e((Z$0R7txfhQW%dC5cE`1SRbvvIq%jcR6O--GVLcTEWw<7w)vnPAKg%SvA9w z@9Y2rF}&#)lsrL&0jcR1OQH%TKT*LGunE=#yzbg6cpBD%Ct?chLrTQ3Qk295?4YTG zGr2OLm(iRCY`j{19&O+ZLQ)>;#+8T4enN_PgHQv8P0S3KC3q7j!`5v|JEK^ZD&j7G zxLFyPn;01x>`peX7h>8bHuV&H?F7c}&d*Nmu9RQ!M^|EBbV?FY<>%E8zDETG^~yI# z%w1CvV5w7dT(hgfPQUUJtMBi%9Zd{8Ov?FN_jz1V|Mcgu@2>svwX3b-Yk%;2M1-^m zNBn7>TrIa}i(2S|Wy)`tsdBwdozr8}^#6YYgCyfaiPT>QlJ-fwf6?rGVe;3!7xrzz UsTb#%mL!%agu}|E|Ik_o0Em*w6951J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/362e084c3a6d688c2cd6b631ee676684de00c869 b/fuzz/corpora/client/362e084c3a6d688c2cd6b631ee676684de00c869 new file mode 100644 index 0000000000000000000000000000000000000000..82efcaf118e0ec8bc57266cbca7346cf56736194 GIT binary patch literal 423 zcmd6gF$w}f5Cm&>xDAv8qxAuXCVhc{a4!)A10OQ_5})D={E;Z`1_mc+Xl32ZR2LW9 z1RHmKf$JK2R`4(kmQdX7IL8jy9^2_`(&>KjWJ-&PZk7$YR>u&EoLd+}K}C_fTP;IS WCW=Oq^g;i=ez|^DwdMNqw>$xze@P7h literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3650fa171f0ae12242f23e5e282ce149e396ef31 b/fuzz/corpora/client/3650fa171f0ae12242f23e5e282ce149e396ef31 new file mode 100644 index 0000000000000000000000000000000000000000..5891d569b4bed35277338037b37a54ba70c67edb GIT binary patch literal 850 zcmeIuu?>JQ5JS;#Tu?wma|^J*wSd?yn?pmLNTh@}fGsJh9_nh$SKfL8%Z*byK87LaEYH1c~g%Q@COWG)P$pJ768`fQpZ7 zBOyD53y_F}Pj_eZ=DoS2xyK40LUf~w4rU$uplhPwgNcbIL?PKTvL|G=aOM_HpB_~h z!a!_;d9f~DW9HB!94%7BRyPKb{pxW(i5uNo63HUMuqw%_xt*@yWN8QUV*Pw23@4W& z1Y87-b9#E(sAG@Xi~o_`6sL%+Zl;;>Y6HSjrN&gM`E51N|J*g=EgS>+Tb(VVy=NO* zzlsE-g7IR6qz;V%9_|6mI)kQB1H6QSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhBh&tTBR$i>ve$jI=Y zJRn7`MjYTD4sj&FKnd`V4^ye*Ut{(E?L;$&DFRpaDQP9&bJEt`$;8ZPrM|dvxk2L+ z16elaP+2|}F&2@ZvzO+d?YNpyxc!oX%P-sMe4;F$3`#-L(kyufISoHWmd-|3;Q49c z5_eLfjSHGO@}Q}sB%ma-SOJ_mnm7gE$&ZJPIaE}bh1GzWk?}urTylfsl99pgWb=9< zrfp(VPqEidVEpd+?9}c``2~M;CH6(9BwhXBd-M&9Uis#Txs1>N?5eP<%)i9y`+IFi z($I>mK)w#ZVC4NufKS!N1XJw+3a1$0l&iqwk6jzv*|7(-hX})_i4gx9aYGvv=X(V1ot2 Ihy_fF04BxCod5s; literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/36f44e24d6aca4247d53f543f95df45f5e96d373 b/fuzz/corpora/client/36f44e24d6aca4247d53f543f95df45f5e96d373 new file mode 100644 index 0000000000000000000000000000000000000000..871ff6d0f378135e110922e832ef9321fbb9f170 GIT binary patch literal 1528 zcmajedo+}J7zgm*`@Uu{V`dV=WDVn1nRR(*gf`Y~B6p{DC#5MOX>1avP=u*PD5E-* zkXuDYWOYNXVI$4DBw7j4D5Ttr*kjvmJ9|0%-|zdJ^E`ii&*!Irz~CDg07C>86?b*! z=kSY&sR^`j8w-OQlOBgyF&sfYkL#0}!C-@GIRFSi1Arw6KmaHLpn$-bd_2Hh2AFIB zccOf_4dp{+nFtKQFuVew1gtbY+BSNY06};RKuHV&ipL^s2}DN1ipH`;RTK#fBb3Qp z&qSHVsDYazfw>$F|A;7sp@7PNS|G6YbG;AnXe{qQ9?cTvL+W2%hcE!)LnMImAsozy zAkcbGxFDt9Q=(+Wo!B?P98|W4@|gXHpw)F5~ zLrbE)NP<#zziLG1L++&G?lr$&eM4y-G$t0BAg_X6o6ci&Tb2glF1OUgG@6M~A?dPt zRjTf}=1`Z{1Csc%?x2I$Jui%gHtOb>IjR&SYQ`~31qnls>xPh&L!#n}Q_egybJv;s zh?YU{Q?riU6rq;*yoEcKn-gYNR;M9sj1-P+thhmZ-eg(Cj=h}%x>m&xy_?EYg%Joq zIr^wBDuYGXR5=J*l7LZwQkRpK#B!}tUt=K*MiPPkdVN_b{`X2DU@g1#rKkHXoA!f3 z94_>ukybD=JwZ{te*Ugsct9y>g)_Erfq$92=rH@(@fAlQ}W6%>n zC9)jR>y4Se$vxI?>m*#-_-vE&RNX_qtr+((ZAV9h>39S65!H)gFM7+T-|m%f3JIVO zr{z8?x4NWD2@o@b!lF6hyb_&`V`@Xub9{lx3452-@}>xBL-L-TQgLbZ`z;zX6C9HL z8dyr6dQs#77o10G@TN0SI-DB@m$ByNYUA8kQ+00lS8`maV&I=q zomYT&!fv>ARJaLK+2f;4KOYgJnLoMH&S~3wd8^J41)mZ%05_m~xEAF@*Zze4_nuIB z#!7U>C#TXZ+7^F*-e=v*wEsi*Kfc5Np)Ox3ee!r*`f(-O`bOf!*>B6V*522%I|AR` zmarw5Yu<)arTgj8l8?2jRwrV57cyPlPw)jr`0dX>+)-iJ5Mm6n}Hk;8qY1UTeHMNwxOP1BL0To9pTKa1k?Ha9>UXf0UZ2u+d z4&Q_8d3FUIp$4q)1@UtBf%C)9Cnw}Bl$*&t@#*+v>Zo^T2XuY9C|lb_@IrAFE_O;r zKfJV(OdlR`-42cv$OM^1@Pq>+;!mhGP&JhF88rq)APAtuYU zVSo1^r_M18OPjh=eI|yVHEr>>Kd-xDXtdnX!FDEEqqytJM}@^$t`w+$+Rz*3V7lY< z|f~VR6%#TpPJiS_HRyliJ+_=kJr0Osk zD4LyE#Xjv*dC`qr9N8jz77-dwc=jgBWz)>#7#s53nuU=qgxU-Hl0p<&5$)2X7{lO5 z26tBTW)X*@Igy|_{j@3xN>6XiYz{mtdqBB#`aPw~y{9Ccb=%>zo@^*l0f8a941iW6 GfchH;u~dQp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3716f5162f27c323fc154f900fac772ab1fb9e8e b/fuzz/corpora/client/3716f5162f27c323fc154f900fac772ab1fb9e8e new file mode 100644 index 0000000000000000000000000000000000000000..4969e97962bfc74f3177a6b4c65abb66d557fc15 GIT binary patch literal 476 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{okBMC4tFo8WR%D@2gI4BGnHgfk*Q*3x3 zJ8javxOK51Z-P$FXJBApFqxG#_f(MerNo5dM{T9k77$Xg$W~&8<$F23XF&&q-)vd8 zl1*^2)K~xLGY1w1u8-$Ev1QdH`O3C<4=&AwPv=4AgTQ94kQ;Jh%*+fdd<+Z>V(b8w CgEzDQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/373254ae2e191ec0f4bb0e62ad63cc4e8b6aaac3 b/fuzz/corpora/client/373254ae2e191ec0f4bb0e62ad63cc4e8b6aaac3 new file mode 100644 index 0000000000000000000000000000000000000000..03b399aac56326a95024cc6eddded52954712cd8 GIT binary patch literal 9364 zcmeHN3pkWnA3yJ9h8eds(@-)76%vj?TS{29u~Axy5HTi{5Tnc%F;Y@(sl*~(bQ6V& zBqUP0>b|R+vL(7nm(Q(jzULh?GUBVgZNH~)pZ?D?&&-)Q@0|CX_y0Tp-~abN3=9Ed zQ2@*^q_nVAE$Fd#5p!y6{+uD@w6%}M%2pqtdMi#m0lG{E00p28fDi!)04e}5Fa(_| z2T&h?dI8h}3Q$)lKu&DKPy|IOpfk_jEqg$kJX9c4My{}3(W-zTBocs=jO8GOj5*_E z8fxuqOoPfqLsp*Z6uf|I;KcLhag8;h2Jt0TUezv$!wn7M@>nhbzJ39`FqR{a&$8$F zLZ*s>u_-iVo3No7G=**|3dY|-Q#M=N{OnQ(Tv5m6{z$9=>AJw&?Q18jBMBelWf?pz(+nGekQvw7O{l z-#o50TIpmGBfRRzh4$4P%gmRY^pVq2JIFxT{QFncbuAQMeTtb`~2ctPz(V`rX!pR)ybH%x+2cN>8r!9=bV!*Q`F!d z>6lp-xF`H(T&`#_)wOX|$cXN{gFJCP4JSbiL4;isMsV>1!(w8#mxoqVuB>k=TjlY&ze?L zK94H9)2;p?FG^Y6bk4jp8Ue2iIU{aoG|&H;df&+$^JbUS{`d4ypdU!4=lgNxNI zx=mJkql#t^z316eir{?jj&xQ*J{tDd5c$R)~CnR=?TqaIF;&SYeBjGhw#FXJ8}T2 z1;`D6T!jLp1`3cx;(>%>R02pL%ZyxMd(i?%digwpe+*jv_&ifZ;fvx`a;s9-O0+%) z$zrsdu#L^WBhYRN&DbX5X0MrdZ7MrE``A>3LeZwu&&+2*ns_x)ge)ssRt%BBz6W@N zen9&r1@p>>~t>Cg0e#KWxcaSGz0CeM* zLPl(`1X68BFd~~INpY~kGG47WTGB3&HiXIQVE*rFR_DLC(wUo)H&(n;3 z@iWh#??wML)&FqIxr{-c4I1p9ygkFu&>0v84#@+Mi-D)!_`9=5I4KkFs{PA>KaNy+ zS|Mv)tgw6EP7!b1;x$G90O>EgD_mk+hg-!Z)6!ei?LY5@-?4qOw` zrWF5Up^SZuhfCYx1r?+tsY{AV)Q;tv&wp!LlCUmv4}YGYY{O@zf$^X6o9sj%iFSeqJGwiB*mGOvJ{cEo; z3i!*XdCeRarIh0_>{+6j)usX0%Ctsu?tZUtaI}lY#O#4FJ9`kB_OxBW7vitaS$O0M zYhs5*vf?28B@8Ekt&Io4!00|ZY`5DvxzAYOjLXvcBA7H)JIOxPi(n!E3@Fq(>W1&q z?28_C@mV<%z=$nm!kO6IfoLHk>8woTdZg8+;p{QK#rey0nV>vD2 zZQRBsyS1O~9!`D6OU9 zd^_IJd>WnW0@z8LDv}DPADj9}jy$z+Y~J&+hn*aRMwtb+o-&Sw2_|W3oh}0kcU0@x zw;R0(c#?am>Y4T$zpai840Q1`ItE0H2!Qgd$u&7vwab(H_l65*~C0QeI(>dD9V)BXKZp@h*He z-qh-#;hyqeayL`nsN`AAi1}_8=Qgu+5UGynWYzxgRd{^K-jd%#TI%lUM9q0oXJsHG z?|LZlW?Dm#Tfwp@&Jx?KRA2w%%ymaKtQC`+(dwOw2oNOz z1qf9X#(EjrtNrEeADsMjXRFf5Pd8X4>Bcdy$ZWP(BmjMaHHsq!YhX86*N0FEu=;*6 zupaCQ){;*ID<)2+bTE*F1CU5iG=PK`^=lu`fO;fAB2O#&LjHzH{^tX}_$^+43BD*4 z^Tn?rUdu=cLPWea=q(7*RPA`&puPkl0RM*KwC*?cLT}-)SXb(h90- zw}L7qoA%@&(wb-w5w#z^qhDD9D@&`Lo{;N6RvN)IxFvL$UgFUWq?4n_E01XCcAV344 z0Odjf@DQ*(|1~%M>$>14NDc3G!S!9b;8!9w5b{D!Xp8dp zYxy+gHCatFeqyg9>T6?Aq<$_X;be7-r4uNpd{_iU`YVD$lmcoY>^=}M3(`8;t}nB_ z*j>A0U=SP?9dE!|bGiQI>xzF{aT%SsmYaT-KWKvDUOnrJx9qrLrd=f&T9Y{5AU1i) z2Ov*{Z~@l1L;{QZ~_+6geU`%yd>&i zx4lQ@07wTD8r3OrL+bC+M^k97b}VjCD38YtlEe~69$z919ye@gB8XtmgB6;RB^9rk z1&&|=0M13nfU8SO6%%##OxY|bJnt4Q_v_vZy(ZnoPG^5)((}_7fv1IATlCq!LFcj< zn6SB3C?vdD*j2zal?MP~K%E7tr|FO-z7OJ^c+IemQZ|0_6|5Q-)$dH4{1;JwgT3?s>k5PGyI@`^2s7vQ%o!`NB!yHH3& JfNsa=e*?)Wgp2?H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/374566d471766486329b66593035c67a89e6f4b1 b/fuzz/corpora/client/374566d471766486329b66593035c67a89e6f4b1 new file mode 100644 index 0000000000000000000000000000000000000000..d5aae58380f7544de7a19aa68a170b282d6135c8 GIT binary patch literal 858 zcmd6ly-EW?6ot>+JG*3)-GHo2(yWQ3vpQQ?_yB^Hq*<^K1Ph)sb#E}4ps{95#Er0?O;MKqY1Hh@uRS$9rxqzH=CTE

sM!d&|{(pdkUwfGHlvS!t)wj;>l3cRG{-`}qc+6^I ohjiCp3-TZ+Z9+AM?S+#P`VTgBs#xa0LQ%y_*ve|PHT7$}0lT`HRR910 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3754a83a48b5ece5435b185c99f93da0a222e16b b/fuzz/corpora/client/3754a83a48b5ece5435b185c99f93da0a222e16b new file mode 100644 index 0000000000000000000000000000000000000000..5c0352d0cd4fd035a693b49bafeddc39938ac541 GIT binary patch literal 260 zcmWe*W@fNtVqh?3W&i^gk@bADdK7Bi9E>-9PAGM5kD0KtBr|=%Ji|~127LwwUIt|b qhX0HVj0|GT3}6h>2x1f9U`i7s0y7t30}fpX1(;g!iKv)=W&{8s*b(3W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/375a2f25d36328c2e2d1fd42aa0b00974263aae3 b/fuzz/corpora/client/375a2f25d36328c2e2d1fd42aa0b00974263aae3 new file mode 100644 index 0000000000000000000000000000000000000000..2e5402f4c62fd8d28f74659476305ab04c840231 GIT binary patch literal 1189 zcmWe*W@1^u#J~{9%yee4((BKOejZ;RAO6-7c-KhFFEjXNP^h2%a^Ag(x>>gs_L;u8 z6QzH-Gty&X$a~*yFSxhZam>w~s$+TTpqTnu2X+Qy1_sXmj0}tnAi&MQxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9NauX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>kzrr8Yh*^$T9XMc%eHi_ z`Qr5ET}x5Mk0ukj_0PL_mb~xymUnx7=ytxK)-!@tE6;6KTB1}V{_@47>d$>)MZeyB zpQqV;Q$6kXwj@`j4@K+v{M;@V1f7!$cRh5s|61+iHa&MiF*(!O)Ap{26ny~wCB z(;FE&em0n#y7EzaU*iIql!%tyHb&NKBTk+*`JOBHZbFJ^$5xlZyHl@Oi~DJrOp94y zy2*UgxodW%`cGbdV_v*7=8?PWFZu5&?-COQ7j>qpCjD3KRXM2}5M;&Y%QBD6exdid z!XlN==T(#Dvx?8V^73HS8u7wiErli3=Z)5{nmgsj`aT{8rcOqN|7c+CkC2E(yS-+u zzZ0gQZfo=L#?CXpk2)HQq)eWBPGz>;&szP*$;mvWH@-D)Vp?}3vFh@DxvN+IrY5Qw zf0d7C%e&B;oEmETR_gPoaN)T6@RO!9{CNri=l3s)WIskMG+X=J)L_ji ze-Eq5sy$pAn>MTbPQ1vm(tFd1$G>-G-P)dT{Y!?dztiG-mcC!sg}r^AT(nz~n|=9- zcU-vz^O*iTJp298n*$~+XEjXp6DJn^oAa`@`G23kkkPwOjm?MuSxfumuPwIT`e%>c zAqCc>eIJ`^#hN!A`|PE5aMSx=9obG6i5fA}Vcuq7WI_Z2rst0~pVKv)y7Hl!qezPJ z?=vI@!d5(iU^93E;U7bTs$aNm$8W|G?)4L`UaPK~7tF?RA|-yu`@;uq53<#~|Lu~P z-S7VYv8Oj*g6E7+|G$Su#?3$fUH`a_;d;%_OTN2n@UJvW%l!~-6KNs&AT7({vC#r! z0hP_3ef+A7FXu&UV&A-Wx5J9Zo8F4GUyVQb>B#r>&W=vk9jCX<`=eg;=QSimb1>fcIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945QVBIIroKvbG|{OfiN38$W%KfMgtBe1}0|4|Ns6oJ29}FRy3X^rzFL| zw)bB^c)C6eH|%c&|M60*<(za+XGh_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO168HffAaG(Kakq5Bq7l4|@$ncYak&U5Y zBX|F_1^iIg#cI3>IyryOZ?|nJtvze%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~y%hqpc?@{j zIJMe5+P?ELGP1HV7`Pg88*s8QhqABsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>NhKxv9FC)|6neCaBDyaXzy98Ce;a8+#cH8atU98yPgUPb@QflJwvA^M$pM-L6J^ zKf3SdjHp)HYr1Z_YTJ|r4F|T!mrYD}GrS=1V!M)Df%3$n6EAZsty;e~@E@5fR(jN< z(C0+5{o+r_bF}~|(tI_$o&Tq9RZ0uRDGC5G}#nE4Ojyq)5 zrCLiz9J;yg+N$)9k4(&r42+8d4Ezja*_cCR`B=nQM7m3_t~t%Ik54{z`>(KlIm=6D zwXO#TrmQlHgn?KCrh;3o>kW87`h{6o4VW1j|08>t73ASY2J06Uxl^y%W_=fy)R8{a zu}*3AmtLcsI^6!~<-X3CCnl>sCLXe%x=!1Do@zz5|15zeMSstKXX4qw z#jzyn(bJMTL0OZ8tdsJYpY@W}?#z3iUB&eALKrNN<>}()-V4by+7i{fu6$eniT2qsB`IO`RRFG7sWj9{hfO z<0CYh>^KJ5@BVeMOSUj~R^RtMo-c5x^+M%*X2}%@v@R#*A1_aA`b&NWtgc2`e_aOizJaKgZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/37b2f70ee401ef26f4161d2a995fb3dc254cc430 b/fuzz/corpora/client/37b2f70ee401ef26f4161d2a995fb3dc254cc430 new file mode 100644 index 0000000000000000000000000000000000000000..feb74e18b410bc3db76158393c88fd41ec75590e GIT binary patch literal 3155 zcmb`JX;f3!7RT?+O~RCfA;_eJNt7`;H#1a%NCiX%6eF)_L5zU}1A!z|5J3_Ur3#8l zK_66nIAHrM3Kp!=7FnnWB1Nf1eMCe=aX>6lK`eG%pcMQ1R^Nx-Z~NSR*4byD{r~N4 zfgq4C4uU>FkkvkczSdn8nNJ(e4TsLFp)Gj2tfQb-VL0FKwt_@!nh!NFAc*=7hF}P? zgdoTXf*>OZ2SXMJLNYLdNCb$4gYY>(gUr^#mAu;GywCUnAQKJTa)WYT zlVRA10D&c_5ilSkLOhX*6NaNyV2T-rRKq~IJWeLIUy>+7oq-d!h*0NDFRH|fM6t@= zFGVGhE2OG4`#>h3S&~r>3YdJ9#{o=cq$L^U0+h)G6JI2d{OM8pBt!ognKV|eNR-B) z7Qh@kN{>WdE>B5R#YhwFS4+j4rsE>bjLQ8qrqRb*1)e-6reJ4sknl zHG;Mc406l&ukA^*kvsDR0k<{A<7&Tc3%{x#&#ydsZ11W)y&bAcw4>JqXej=hxQ^bB zDrRTglFX_e+H>S6un+Y#< zUE{RFn^usCdsCN9-+gfH%P^ClhkX9|W0k9Qjn`IG+FE~{yJ~xRgPZV1VT7PKyX1bL zc;_Q#iGSOL(>sp~X-bNkapvRFdl%Y|)8(hYx{qUyq^RA}UEy8q*s^-pdL@zN?9kkMhgL=L0k!RN~iA_lN9Fvwo9_zPsuWfs=ten#p!8KcA z!V+wKDE#-!qa&1oHix%1&f|W&%RhTpWdE3D9)SfT0Z3Ja>w^L=5RWV0h6vuF3k7kSql z1|!E~$aTyQ^U765;i1AK*EH*k2A_Nsed!({%d9DCzi<7TAiggA_1ylk!hu;$?YeNX zF8J-CRoaa2$~VflH~bK0=K_$0xAm1PWLqn}7aZpi3%*@y`XmECSKB}O7EK=8|Kqx0 zdT`aE>#dKQ;%%z0hIh|ey3?-NI>xT8tWqFy&*4bLInCA=0~|-fi@v*`6>M_J?diE< zd(+FT119+Lp_t7@&g~&9Q+jKk>9?4_z2+ES6Ve`l6c;0z4X3r~Rf}2e=LE@hTAj0V zBbk#|RyIa4P0OS4E>;yNq?2q>KLqN&Ng+}(A?BDjY%Y=H=Z$?y*g!JP_##7mw&iLF zChG`W8Yb&M)hT6K)_8LqOa%1b_ySY#j=%-bezS!_yxA0Q;^@k>1kr|xK43;fgs~G? z&<8}=1?!T4GbwC3@F;f!F6Hxb=T2|jl9nJ^k8Na#6fz|vP8By%U^_$#8L*s0h6$kj z0U7W2Qv_=-)o)JNx5dY0Ka1+j)Y>*}?I94Mi*v_LGLqhlVwSE47m7KIl_R`_Epx<{w<%TB*%#Cd*fE zM=}uK|GY`daIhY2_GYa3WY=ZCy~(?sukl8LmqAX?n>Z$4^*CiIw=8GVn-llkG@%{H zQQ9Q^{7gt0v?M-`8)QE5=#JC#eYLYONxKH>KR^2h*TzvMJH=Tf+hgFfZ(xIgBV`-$ zP@~e}Mt^ixU;Z{nZzXbiUBOq9UY(%$;W{$|30LcVv)8|94NtvSZFfHZr;{r;SVVkw zD~g@j%;|yS$ zbEj79!^NT$h1lL-tWZf~rJ@*>`1b(>LjYg`4ig1zY~H}84?f^CQJ_LG^KZe-UupmL zRVxwrMQ7<`vpRFl-32m!Uvgb)VQ2l}u4N;Y{6%i1l*)mXNx$jQ@yG z7oVAYq`zt1u~W~p`tn?iKX<)M-o2J>o!k=A-}z(u z3F|hYw)yGxD1P{ZwV}H_$HSbsZ)5vg3yyeMLv=+suReU%F&;5>1rTMqaCsv5dN__HzFIhhK_~-SwIqOT)9$Nribc6e&Sr^WaFBUczhu*41^2?4EWfXLs<-j*+EJb z3=9n9#CcJ4p>eV3$v0?XR6;hIk(GhDiIJbdpox)-sfm%10RsL*0mHVF23q->>kRf7 zL^|yZ``}~n-Oym)8fJsSi3T?e3>aR)?9YqnU~x1kSr)F>*KyVMmWW+)htgw%mj;%c zYkptw`IMw!F#Xxvk4bV*PkJmkrDtFe)nxE?<74N8T9He4p72<1pj@)td_(@>6axc; zrW4-`+8oYZG?;&`$N9HSHQe*GA-)pYy-!1MgwDkU91sr%YyG|9ee@P4g+VV83Y_>br*1CVm4s- zxj4YU4;`NRh^3_ZDJ%uCN^6nE(}XQ@4#9JXH}EK0T39F=3C6|) zxUc&RGjI4qMi-K3!;Bxye#}8DBKIyx5XD3u=?Uo(sV$5G3?Fwa1*8B1?WR>;T>~LJ zhcL)O1eyy4U%wsGIB40vBKnz+-fJa#{cU&+BNw`pR{3cu1&o|OP53a~N}O9qEfxT5 lghRFoV4q+NUvrT}%Bc(So+(tSPTFm1I+VCH!D6xe4-dE5hGzf( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/37cf60ec71a229b5f69c7055cb526f66c0d278e7 b/fuzz/corpora/client/37cf60ec71a229b5f69c7055cb526f66c0d278e7 new file mode 100644 index 0000000000000000000000000000000000000000..e00499e7059825a8839ceb37356f12a6b2cb5533 GIT binary patch literal 88 tcmWe*Hed*1VqoyA7cqbV0R|Wg1qd@SXfS9nFn}u9|8d~ zfTcw(#GvM&Dp0emsxqr`v9Fa-Mey!bOoSqZ+C=R&A!3@~crnIENSBOIN|D7ByPSaW zsFzO```P;?W_{78&vAP)311=kBlOykY}1CM-^MLXy4LmWz1I1~gtj+9yRK{-f5Otb zd3#+rI<4J2pYJR$J#<&dtKGx!Jvp<&u_tbE<78la+Ir;M$mkgx^TRA(-ZgHI7x|*J zKn|uj$y`X6a!JE7(%)|4;T$uUH?p+Weou%y2`R&*7Gdkcrn9gOuTZD3w7^Kh{d1@r fz`8RDRy#FMleF^yLM`EIPYMVK2nYxW_V%KO+MpgBUXdQyMn|QxXGH zJOfjVK@(GiK@;P_13xu8JHTF7(^kgVWY^J#`(zZXJlny zZtP_+XzXNaY-G8iePWr}lce9DFZiyF>~>wg_oMs%=MmLPdrj6&S8bcJpy9w4`Lc=W zZiW{GTDB|66(~e?H7Mao}=Y&{p<9>!aR*ujRop* zsWR)>`=ax8o!@Ft*x0jPC3oFRaVyq?`*+B!OSP7cICOK}wN>dIADNihf7dS#Fz_>w zWn&JN?Z3kIt2*Obh!P|%YB_OPfS*O zOgv;ib)B~RJk^S9|5*Y{ivFJe&cw5Ui}nA1)~6+Pg0hAQStsQ)KkFr{-I@13yGr9> zNcfCZMH4Gn>g4-VedW1@*341iZxNFU)s^4G=3R0VX?-l@t!w;RT>L4s=mQxB1^}*C1;hXV literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3802781ea5df312230ae05b88d66f500f0900a46 b/fuzz/corpora/client/3802781ea5df312230ae05b88d66f500f0900a46 new file mode 100644 index 0000000000000000000000000000000000000000..d75837eb8183248298c0fe936f8a4bb17150a015 GIT binary patch literal 432 zcmWe*W@fNtVqh?3WQSimb1>TYIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945QVBIIroKvbG|{OfiN38$W%KfMgtBe1||k2hCd9M~ z?fn-J-g^1x2OIYa%`@|iw*;^qei2ao_3X9K8}>JX|9Gj@a!$IZv!id#W&BWx>{gjQ|6b2)YXZ42ODS literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38183ed3113981e532e78b8ef5797e991cdb6c95 b/fuzz/corpora/client/38183ed3113981e532e78b8ef5797e991cdb6c95 new file mode 100644 index 0000000000000000000000000000000000000000..443e61c8b96d65e7905a35420129d2236395f51d GIT binary patch literal 544 zcmbtRy-LGi6g~I5pI@6cDM%pc5`V~6my^MvLq!B3lXU6O7jYFj_#A?Rui+EKK`3YgPUNyk7wka=;4&NP$FEzWR_AWC{7?LO!^V#}_q1 z6JWKz7`V>pt*jhAd*9HbvN5&yvL@&s%Z05wT&ssOec6Z55Jxx)<1b_`6I8R@D2Z7U|RqH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38339db40cbba4829d1337deb476f8d5367090fc b/fuzz/corpora/client/38339db40cbba4829d1337deb476f8d5367090fc new file mode 100644 index 0000000000000000000000000000000000000000..171dab8cdf9aef9e2f20d65f19ac368bcc34264b GIT binary patch literal 2836 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>SzBlk6nJQL#)T_|vM6&(jPsww%{Aa-= z7pTjn%B*6)8lA7}^yB)3jXmpCCI^bWIQq-Zafi&hRBP#oLpRr5Tb17Nk%^g+fpKww zfuDga8*`{EABz}^NO$SgHK#fD@yVxd{}r|`XL;$Z*7e}PlvQStFc53Nu7C%mUzml} zfSHBiKeC5eK^|^ouzpdIJN24v)^}k^9qB_I>y%c1={5RVQ<#2U_oB?9!|jh=?(2+s zVzSy};vxH~>$KhHsa9nB&k|Tt^!NOCCY}vk9801eJuRsdlr>4nIw_y|Sua`b&b;^8 zRa_5)!)L52npnY7C*PmyE6**oW{wJfi-=UHZuagEb2&G0#6%jUHmHd)GcvI7F@Vz? zLnjLZLn}B<*6T8MzgYNWV)s2*;QiDW-;?s+c+Z3t`_K|$T;$|O5LL_SJwK>cErj&hViQc|$k)Kl!W6BxfcKRdO%Qhvc7U5S0s zDM?p9_#PEx(JS8^F?UTxfTd2+am}s@JN?Q_tiHe3b~J5LD^Skgy3gZ^`lmmKeRu7T zuU%~wU;BgKBO;_lIO0$1q+0wtm1-31stOTL7Ab=M@V1@uH7flw0i&TO@0D1|6z0^g^ k{Qv(m`~$}=q!7!c634_C*_cCF41}2s3=D-01i>6WF1R8C zLq!95hzbdWAOt8F7=W>XoH#Fv92yswH5?>b)5NF*@_<&GN85K^Mn*cW=2K>w8Y5V#K_1%CwB~5AjZthz{1DC00{^HQAe7# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38917dc4cd56ffc4e9f0544d459f872dd0065b8b b/fuzz/corpora/client/38917dc4cd56ffc4e9f0544d459f872dd0065b8b new file mode 100644 index 0000000000000000000000000000000000000000..fa809c5a33c6eb0f26711eeaeec769cb7ad33560 GIT binary patch literal 1049 zcmWe*Hem2!VqoxKW;P%I6bQ&09METAU=U+wW@ z7!8;>8E(Q1;bdcnF<2dm(bKnS7% zIdNVT5i~AVYeHEFSp)Mmhz7GG4TRa)wc0$+*)lP*aex`j3~bC!42&qYlK~b782A~; zvN4Cs^0A2F&<_d)S!EX7p}+%DAk4xF(a#BWDhngC2LlcxNd*LA6&xZgj97!4aI9hk UH*I6}!TN6evC247Vig?#01IEaoB#j- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38917eb7ad6a76e8062479e6bd002742b0516753 b/fuzz/corpora/client/38917eb7ad6a76e8062479e6bd002742b0516753 new file mode 100644 index 0000000000000000000000000000000000000000..c000197ea8bc729e3a38a23e41fc186e35f6df42 GIT binary patch literal 696 zcmWe*Hej%1Vqh?3W;P%I7!J%~VBlp?W?=Zw$iT>8V8Fm2#>~u=#?8Q##K08Kz!YQ9 z#1vuB#CUK4GZUi$6DPxOn2Ee>oLX%jZQpqr8Ch8w3|tMl4LI4DLs<-jnG6gJg$)G3 z93C#1dIJMPMFV+=paen?0u&4kz}P@eoEJq7jSI8Jz<@Gq8s{UspOKY;xv`hQps|yw zv61or|Ns9P7#J9RKVMiI+3mV~???CjoDtPZdyUq$tF}#9&~RXjeA&cwH^U18E!&mk z3X~@nop_mB*=kkZz<*?_Sm{x(LZ1`K_KQCyGdNhyx^?dIKbe@V8NMwJFz_>wWn&JNB`o2YXOLQymujF8o|$5hX;7?SU{I;xV~}DXC(a8q91PI7 z)Uu|`Kmh7=CPp?^?M4;`CFUds7QRv=-_;T`f5`3Gq89ofk@J92=_jMT4KeR4zq2rM z=CNr!UUTC9l>HM^Sbjb52|N2d&}hCt|AlG(_KDJ;Ha}Yb^!wZy8#;>KY&jNhWAuKW zZKU&}A9rs>pUUC0E;ySU8MkzC<8p(>B?hu=%%QS;EMhDoD1L>3QjoMVOP)ba16BnK zJ(sv60>VI;$-n>>-Uh;4FjEW+3>6LK5j=u`2V|`<3#$P$BclN*YN0xqGZ_f#r4kTh zW@ebg!@$tT%pj|vE0cNQ^C4UJHxpuiz1VdAcaYN**6G%KWpTIa?tZg(;b3KENHa)b zGBEVhx_q*1f|{t*yhAoiTSCHFIlr|AvOG^K%`IKcaqCp-#DB4qGB%&Hm)&)0X5}6& H(scj;-8$bq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38ab5fd3c3858c55325844ae1bcc8e8da188334e b/fuzz/corpora/client/38ab5fd3c3858c55325844ae1bcc8e8da188334e new file mode 100644 index 0000000000000000000000000000000000000000..92837b17db008be44640e8646870cd1e6aa0cdcc GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z|DA!6fkBypfkBLcfkB*sL5!J^nVW}!nVqqLfx%#~fy?LV;UYtNSb_kbK+L}aecnwM z6;@hZI`zN){(lf)U}OSC0vt?BHq^;IucyR$UT}S(%*+c4C)jTP;;L;~AnsozJDb%r jG^%w2&qjWUmW5kq#2gYli?Cr7kPXC`85vmkK=}gz^yaGN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38b78f8485a74eaffb9e94fdf56db9118c292551 b/fuzz/corpora/client/38b78f8485a74eaffb9e94fdf56db9118c292551 new file mode 100644 index 0000000000000000000000000000000000000000..565ba3d74bbdb1d80f9e53221ee2d3acd51187b8 GIT binary patch literal 112 zcmZ9EITk=b6u|O*`>rsIy>tbIyK9__0*$nJiBV;DU{e)GUC$4~C{EHWFUks#x@m3K e592g194%CrAk4g+U{qOC@DwZLpLv$&zqkRc6$jw} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/38d49595e207567b286186416ef165436bb81908 b/fuzz/corpora/client/38d49595e207567b286186416ef165436bb81908 new file mode 100644 index 0000000000000000000000000000000000000000..c9e9be15bfe2a7cddc21d1f62bac7b080734eaca GIT binary patch literal 2331 zcmeH{%}T>S6ot>7I~h#Upb|;lwElGG>SWD1u@@dX3pH7nYqJFlsGfMsVaW}xBw!IfDeHHeIQZQw-EXQeTF_U(>XIU zyHg`HKIT=#$oVJJtLb|r5_;fe8q#+(dDnQViZ1SS)~!WsS{CjUA2lSfV-IB+^13~gffmOjL7 zzCE%xB$pff4!t~WY(1(7o3#v!T6QH&RK1-DUhjPU0_gSnzMI0eG&$R%|6ST{+K!WY d?|bjka?4isP0!U?%;m&3&e2g)wAhZ#@(E6yr#Aoq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/39161a743aa186ccd23d49238edf2272337fe6b9 b/fuzz/corpora/client/39161a743aa186ccd23d49238edf2272337fe6b9 new file mode 100644 index 0000000000000000000000000000000000000000..24c3e3a61f7fd10665f6d50983944e89dcecd664 GIT binary patch literal 3155 zcmb`JX;f3!7RT?+O~RCfAu$X}m_!+qa}zQ^C5Ti&R6sHEiWbBeNH7pcLIn{d0a2=; zs1)=;#fJm7&!S+#Ds7R4iXc*yTGR(3B8mfIi3(z|>jI_N*SGpU^nTmt?z7H5`|SU3 zZ#sfNJ~#;a06|uJ2l!ZamS;SzKQ|mQubQ#o>9Y3x8l~ZU-`h$Oqj5e|&w?Q8I~al? z$Q*(o2MB_UARG+Q5rkx51d#|32?yb`ffk<$w1~6}!NEA3J}P~+#c`kU13)Gkxa0)p zye7l25di{AP$OVKL_~NZ6(MiFIOZdsH0^GwyR~5P1A9aX2xX>W=+IJqHNll=_pfb9vynUVh5om-#^V~_Z41Au8_%madTj5iJ-zMfON^t}glGuUhai-!FSod-Caa?WP#sTtKD5d$(o5Vbu7p_N! zj^UI#2X0Tw97}H;0z+`Q7G4UpZ~(9-A|h)?JeGRGVr$q&q=&$ezAF(X5cCinu*80w z;?00bHt`R6mJ+AjU>Ls^L;%;{?D@DH8>w2I=*40sZj{Y<8dks(-vBmKtW^K*4B%;J zv0P@GpjM$XcPPZF#K{;bcsia|*gWUun5WZ~IqBCIP_{|ojN-IqfP}?Jh2eL29Dslg zW;x(306mi))J3Gvu6rf@`jeNMn)Bx&CYxHD+mi7RgXMcRAA(2y8q*sbx&>#@l(s|ky&EiweOxXwuoAvmwB_Y#Fd zVA1Gc4)VtusS*3TD14}}9f02k$=TrMxd zoXlafJ$P&nKI(}IBK}Uw{S{kET=1LLc7_&s5zDnbouPqsxjru}6RmdmXY}m8_#*e3 z-C)FcG`W`jVQ!h)C@e&DM*ZpTw93VtwsXRy+HRer zV*{C+TUt6sF-^^7@Gn;8D`k^x(L4m2zDXfcF(GEt>Ngil^K!?&By1p=rhkzxIoo_S z7?X9lH3O6NpX!t{Eo(dt2NMDFH@?6WyghINjNfdL2yZsUn^>kQHD0`7q7Rr65mC$p z7W4rTcEY+O;7$sg3EawDfK%DLoVn8*x1`34*JB%5Vx?TgidDx>6xa^2QVz@~kzoQT ze?Z3j{S?94OVyhbwykloS?VNXTc}qoiP7_(N zdOMPi`26QhYPy}}Xpg=u-{4u<%jKuIi{yI@y!Q=kFtDd= zBOYo{+1==m%IwSAX78m!POr=VO4_Rv7Cl^NW+3Htd)@5yD_q0Z?A6$u&->}*$_@1J z&u&F}WHfO*Aw&bTNIKBs`ln=XcD{dRq6h>C1ivqPlZnU18&dTaCnd{bqEk?J;EHv3 zBkJ6#727b0I9VyN^^+*ovKW~-S}pl~0KpId*nrDMfd@8kVAF>H2-ql4qnP=(VCJv1 zfBUM182q9$cd%NWvF7dqxu7qpHl?7W?r`U_kqW;WWMH|Sp8k&8|6s*D)gEV#7Nlg0jfnIX+Dw))+*|ejMg72@0Tw8xA5|+%{aP{uBEX$91z9%@Z$ID({lKPkqbW!!LkCHa_ zjZSHQ2xy+oXu^TC%zo*p>-DO_p8`4^R-1%yiuWAqn9EG#F27p8ya8_#IXs z$=1eLkH;ez47?_V%mL_O7H}_f&2gR*vY7Q>5SW||{x1k%^!Q5%D8&*LODRcIsAOt| zGWEUM{s2NW8t9XIW(mPd>1H{ASf$Z#8`8ggIVmG%u;E$92R849hMIzJ`Uy^b1JW&i z5M})93Ib;4Lmsl4<5&Z$Kmijc!2N0LHRrZo5SG= h07t;#0=|IF=W}^q7NN8+=m^rcHBD$gT$Wke@+(&fMzsI{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3920e1e845b33a5c60135ef6d531cdb522dfd58b b/fuzz/corpora/client/3920e1e845b33a5c60135ef6d531cdb522dfd58b new file mode 100644 index 0000000000000000000000000000000000000000..6119cbc7d903b0bdedb3980c83af9f49bd9cbc08 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rKq@f60z|QhkqLyb=_|k{NFh+CP(L}~ zuRx!7(?x}qR+mowumAu5e<%wl10xe65|VWc85pK9KPibF5XQgR$pw>KJS376Bzm5Oaw>i)EVL3q@CEJ(?CorYOL4tmD+mfc!4(IB zf{jn%8(7;JNn-F1k;8)n^|!_D?9A>ryE_{yv2B1YRgM66n}CmHAQcGE1VUB4_n^1X z8|aXU4w#tp3pGOHU{LPp+fJu{(0}$tyc)P4dvt8=S_}*s2b?Jkw~Qy_B`(@oO2J${ z`9QYbyjh=*7n=V20+L_MAIZ3dOcjZ=KOR78&_o(wBCbh9kp2!{I3f?G7!zhK6E)?B-@?C$Gx?Up;6gcx$IrDcg4uoZZvI$)@;>H@;GzPTSt}7$x+WM$*L6!pNmnm eC!C!0-yl?#^*Ur#5tZNUTc&IovyT1?ExZEFs6ep* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/39a2ee42bb20a7eabbb1b3ab53557eab69954a1a b/fuzz/corpora/client/39a2ee42bb20a7eabbb1b3ab53557eab69954a1a new file mode 100644 index 0000000000000000000000000000000000000000..e1a6e084ba16fe66cb2184ca983499de92957ef4 GIT binary patch literal 1336 zcmd^;%}T>S5Xb+slY}N|6p5sQ#E*KBs`$^rgI7WD1^NWuz4-vmp>H7w3O+#(1wp}! zPvOaT@EA#AS}Tzt!Gri?VRycEX4u(CiDLsCsj>k)9s&V&fJ`7j4~SIt$%j5b@1aws zI$>(AuGI*Qi%E53;JAbF+4wCG@on%l@##7`v=|yP3As`VUgb|F+uU^WlESq@`Alwo zSo6I&Z}ftB0Ld@nkJ5N$nmSVHe{Mi*Xe!HKDxOJ2khOpC_heTB`-*9inVjSpWb4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/39c7e43c65b1e8905057ceec4be22c1ed10e5490 b/fuzz/corpora/client/39c7e43c65b1e8905057ceec4be22c1ed10e5490 new file mode 100644 index 0000000000000000000000000000000000000000..6d60f34d500d32da1611187cab3352323ccb37ad GIT binary patch literal 536 zcmchTJqp555QJxUUji{E7Qr6`#oB7Tg{?&n^eh4v-at^WwGaeP<2@{uXJw+0E?>3F zF0->UGHRi~#*8g2TIR$7NL~U#Acfo^H^`M+xo|7Plc`XJ%;IEOt*d7yl15;@>a!PH z>8$ven2)pCsYd&=?~mV#62bf)^gH#wrqd-47cy|r@X>k736t2$S>cpm8p?rlrcpBt M^B!IL{6`Mp4KRsbMF0Q* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/39d3c26340f83f59a988109708e33b47293cde7b b/fuzz/corpora/client/39d3c26340f83f59a988109708e33b47293cde7b new file mode 100644 index 0000000000000000000000000000000000000000..98f2223d16f027e746c9776bf2a485167fcb0b9a GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;P%I7!K$&Fz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^gN$n3)(2m^c}3!c633W7lf)IA_bkXy9tdZNSOK9Li!K%w%9-C~P3e2C|ul d3#QhIgX0|UeV{|t=Vjz$|WFxWCM z@G>YfF#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItkli~LUAHCHA zvv~}7**LY@JlekVGBUEVG8niTavN~6F^96S2{So{8VVZ-f;b#JT*3Ldsk*@>i6yCq ziU#r^K`tH%&%Bb9^Ah}W?ibabi|>X>#lWt zOkc&stjNH)IKaTqK$eX;RF;oLj76lo^y-?^9Q*j>Q@8&L+n2Mv^j7P7aA3+Rvq%_- zH6SanhAZF!=@({UHDG3B{EzHmR*;7q8LVGaN;)rd8!rJ{<8#@6#YH_orz}y7sryQM^8)Y1Z6D~ zvQElpe%4D?yEE^7b`{sdknkC+iY8XD)XDd!`pR>!5t^gI-y$Lvsw+R|!(7fy95Inb ssSRpk%*+fdybKJyAchzN0|z4;t2V16BPfM3Ffi~z>D;r$7aui_@% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/39dba2704bf07584552d5cd605740ef5b08610bc b/fuzz/corpora/client/39dba2704bf07584552d5cd605740ef5b08610bc new file mode 100644 index 0000000000000000000000000000000000000000..22051f59a053f772f975e69610a4faa28d2d6b8e GIT binary patch literal 845 zcmWe*Hej%1Vqh?3WjG39Kn45tqpMfcdfhp6Vi7C~fiShLUW+p}hCQgR?22jAs#;(=o zan6>7(ZJP^+klgeIh2J>n8_g2P}o2a#NiO;GRV(O)io$dEJ-y~G>``gatTX#=9Q!t z<)xM=glDFtXO`m=$cgj93K6qa8Pe8SE?4>X$Z z&wpW>zkQDJ zafyK}8*`{EABz}^2#Q}}pcEvn%#vr2(|}dMLeC}ch=4E5Gfd)PVCZ9JkX6u?$-MCSkgfZh39-Lk zY&!ot$Y~1ebZfq{uv>L^zS+BQurf2G8Kf{782V{lK3O(FO;l>$A)BQwA>pi?-&zA% ho~M=OmagWwbt-k@zt~9`o6p(H?m9KIa*r12IsiV|>T3W1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/39eaa17ca277e733373f01548d63b3c67072cb76 b/fuzz/corpora/client/39eaa17ca277e733373f01548d63b3c67072cb76 new file mode 100644 index 0000000000000000000000000000000000000000..8eb1a1ee8da6e4334955cfa80a1b3a04a0e00d8d GIT binary patch literal 73 xcmWe*Hej%4VqmalW;P%I7#PwS7=-^bGB7eQh%+!SC^IlHa5FG58i<0l0swio31dM3vOHvz;)SA?a#2H$gpn12Hf*}Nez^#q* zS$+waJw*u90G=x|2flN!(rpK&YA+!=X^hAwJRj@0^lIt2_s z(A4M!qyWLUqOlbnumbEE6rt%9FaSYgy6uc bK;Qcz6VSYiuV02{SpOgK`zMA+*e~q_HjyDY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3a5c010ef555fb36c97ced3704d6b585b1dc7b04 b/fuzz/corpora/client/3a5c010ef555fb36c97ced3704d6b585b1dc7b04 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/3a9d098a3fbfa918964f0440753a6e394b74b4fd b/fuzz/corpora/client/3a9d098a3fbfa918964f0440753a6e394b74b4fd new file mode 100644 index 0000000000000000000000000000000000000000..baa171b2379cac2bee920daef4ff5c894b7788dc GIT binary patch literal 757 zcmWe*W@Zv*VqgelW@2DalHXExrmRTgaX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>Gn<9+DFZ_b0|O_=KL$ny5a4ED+{VDTnSpVG zK@;N|gC<7N1}H7ZoQO$cghB zni*Icnj4xL7?~JGiSrtOxFAD8T$uV$7O48h`N$?RvNA9?_A(eWb}}_KGICVAMrK4! zFjy-Ob`%4{yOyGiA5A85npRyrOWt>U%e%ckbUR;A>lwkSmFG4qEm5oy=X)`!`g31c z(XTh(=V>G+w5(b=X%psz}EKCLr2Hb4Sp|boeEX+)- z3y_`84RU%TL&whslT%kdO7AO;e>~f)Ww(uy_1cJ&XHCB6%DtPABHFRlrSR_5Yu4g^ zTBg%t7MN}_-*oPpU8(+)m*1Ed?~Hlm?)ppqd&;}SM8QR!sj5l;6?;`q>ISSk`f(%6 zJU07<-scL7R6d_qO`6XtJ`WOA3<@nJ-7N-Z*RPs8<;MCxJ_ZH`5oRU^Mn*AaCWZ|H nppb-y9w-0@-U$%U$O3cy+LvWpy4HMg!Y|Gs$iTqB0*Z712M+iv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3ab86c2721f9e162cc469ed916e125ebbf9825c0 b/fuzz/corpora/client/3ab86c2721f9e162cc469ed916e125ebbf9825c0 new file mode 100644 index 0000000000000000000000000000000000000000..8ed49700b60ad18fc5aa23c01cc6738e15034b37 GIT binary patch literal 206 zcmb`BITAns5Wuq5eJkAOsC+@;?;7u-!1#c)naQM3Wiwz^6+=zSc3jU7!YEGC43NC6 m>Za}bVVu}2$WB2Rc{rd@WeLGjY9W5joqYY1{^ZZxpYsJhg9oty literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3ab940bd4c987a6f6c315b7a69078cef855b6776 b/fuzz/corpora/client/3ab940bd4c987a6f6c315b7a69078cef855b6776 new file mode 100644 index 0000000000000000000000000000000000000000..49f46a98d345e9e516ea43d15d27a6ab6aecd9e7 GIT binary patch literal 2101 zcmeH{u}T9$7=-8Fe{W;FI}ZsML=$2sS4|2_L9DJ#5euKj-QvK)XHf7NQl#1a zLZ)t*mqocvMdAoNo@Y#*E-e%H?J*sv4YwbXNArY-^_Ee6@1VB~=E@E7ve;Z3VKA4K z6L*~6A8^q)w5Nxp28qxoLB39S#>DAzGP2QEAaSKKYirf~w(9+#rv_Ow$cjOxzgRAN c`p7@;PA?JEKY{+y{DTlo)qvf5yPnSS37Ud}`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3acbb10d830af724a9b623e92281cb369c7f3a0b b/fuzz/corpora/client/3acbb10d830af724a9b623e92281cb369c7f3a0b new file mode 100644 index 0000000000000000000000000000000000000000..1a6fad77410ee1c27fe4942a79ee98d8ca08b27d GIT binary patch literal 475 zcmWe*W@fNuVqmajW@h}w#KOwP&cVsW&BM#bFCZu+EFvl_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO168HfiBFrWcrkO|QAGcx>SU}Rxv*vQ>K zZ2>>jJ+T^Zf=*IM(Y*{r)zOpUegG)2v(|MTNH*}2HM{l(N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3af34c7276726be66029cca901a054aff38a264a b/fuzz/corpora/client/3af34c7276726be66029cca901a054aff38a264a new file mode 100644 index 0000000000000000000000000000000000000000..afe09ac1e569897fa8c03a6cfadf7fead2495b40 GIT binary patch literal 16645 zcmeHO2|QHm`+v`znXwBa`!bf0^_^j4i9#Zk+*~OMV@#riLH1%SrBzC~B`MuDg>=&< zX(41OsjE$;TWO(%lBMSVIWvagR=4~6-~0dn{{P>73iH16p7%ZHIp=+z@AG`0BZs2E z5(fYcMb4G=DldOQKc(iHa?DSulC4A8$xBeopc&Pa3Te;`ddW*rCP6bQb*TBLmx=uHGReCI&mSQGG$JQ5XZ}~y4 zqpIK5?vzRq(^`4{#oI-<4hODzi$f8B6u3cGs7gdVR3-6pc-eJPH;-Huu8>q`p6s7j zvFt$9owQ=EGF7$k3Q#Udb{*>r1H`f8Nq7Q85riXn!36ArlYwpJ%Qws~C}UwM5d^5p>>)AG!N z6=NPkp9Ndmd878Pn$hh?Xsue5xhJ{!K@5B5`IH=l zc(?j(<*AV4>(5wpProH*9Or}B*GvY*5s~B> z%NfQLWvGbtqa>N>SbtiOLn3{Hlitbso3UW zBjW&MBceF$nsfE>(cZ0Yo2`fi?1!yx&gB_X-YSMEt(m^^;ijs$8I2lUUZ3d_C#lmi z@*~CE=XmUEWcz1#yl=6kn7Cr90+D`{IKOcX&smEQS$7OK$k8Oz+ z`Ab7rS6*{d*MsQPJHin^EL(NZYVv_e#Es`>O5EB}Y`y8%ZR}EP-+cAO z+pMlfi0NlK1zAc7dj#J-M9yxk)~+sx`EFH|~p%PQgw4Nch!!F3B@ydv|=3 zdaeGx@LdO67gbpYSh4*4OHOqkdvQBK6t5XYgWB}(xlfvpxVX)lx}F@gZlV0-KGL!rU6r~f)5BXdishI4fJwK_);cw- z1XBIVu9SSDW^SP#mOi7UXc=supng*CZotvoI92epptkyltaZn8Hf=vek#IrP&bU6U z$;?r;%I9)w&a4AjjANz=R~_!DTQGbiLmaQy26i{u z7|FS2$q^S!%n1FFQx#rgm7Q9)GG1++)2=ux^POQP*U!D~u(E6ER!_d7zAXV3_QW08 z(is|9QoFD_Wmo>Mr;$#*B9-OF&PR49b_3@w$$^zVSKnK;CEKd<^9&KR;#~L{(a_yb?&5{t<&9H5(r}h3(-d8sSh00x?!q>Se$V^S)He&w zJ}G9K`mJu?+k>(Z0w_#vK2n(dhV3dBBjn-f`pI-Q|9ei3PTm1{)NA9jq zwOv+U=lJs`PP%Ng9;2Xc;&s0WIsLXBD~*@h${ng!XbyRo-G8f|zURW;$2UuJ(~cia z2|H%7*^Xg;VD}XZe1b!4$nK+0okV{vvAZsjxjs)!esEIwx{u8ZsL_sgWqDhK;<6{K zcbyy6Ue+mGCp*}v8GPKeX*#-nJG!#+SX+FtqiNF_+whZZJrgEel%Qqo+BG049h;#x zsj7G*D~RXPlb^xl-*{eIn(MWP@Dl+c1c*x~9!_MQs;lRDeYNsmbUYrq+$YK@mydBh zl9=lmhaen09tB9t{<&UNJKwFGdoFd>cC@h_Z#iB#CgpM4wj7r$j&JM4qnGST*jqX? za(8gq%dA)L7ah!*yaE_T>4m1>|HUPE)AL0~tv#jA1lS@^rWL3{8EqRzrx;#pq(8hZ!>PQ+o$ANM3pGoj#ZBj(v&yqw}@WBZFqK9 zZARo%)!O1<*(a?PJP*m-t9%fg?)K2RbZ?UbBnCJ*|~?rPI||8&g}Sb`OXd7sT=l6tJY5Ob3Fx+(~ymvfNVr<$mEHQIm88=hMan#tIB_V}1>E4q5W`wVDI^R&=aaMDOybbALrYER?j zlqn)x+9z}u;I8g=PMtr?ZSf+yX7Sz!mva5Cp%-E(_sl)w6y7a(p|V+w_iTOZ-XX*> zTEXt!G}m$&G38%!h1fbZ`S*k7DF*$_%3?>Ru6Wj#x3RqN_@kAdMSpc^HuCEG6t5v! zud~|WMXUD~dw8KGuDl^(reB!GG&2MdNjq?(%SrdV(&-qBfccKAj7WEl&C6UZh|riQ zY(PW^1R+EcuL;Reji|zFLnK{hNn~W0m5E89aYSqgBfyvu8UkgwSQUG$g&`3^I5-4A z8rG+dH-?5#KVL6jCtXQZia9~QOPs_?S)yu0MP9TCR?SVrzMj#K?rwJ1+_ojYzk#*#fhjmsvpT^<|n=(L=4I2%c&(Z%L{B zlp3KF_O8=IvP+)$BCw14((rzu(3B7BE{3%&1W(T@-!NCwT(+!)X1^>`#Ab^KQ$$lT zjkx<_gvO1hzDd7rNYk{6K#%!tELzguW4ryCpNz;7^ERtn?GD)sCnaYktDoKQ>(RLZ za-Q36`i1)4z!xj~)0we`_b#k z@d2^?*8s5-GlUD2CyoH(Z=lpGIkol*G}&E8bEan*O6+Tns+wx^NX>kOl$IM1W+ zx_p;5gAJ!;Kgy1Gd7~e(W9k%lSDW}2@WHEQp)?MpOy%wUK| zwSGu0#T8wq$K80KcJt;ZCSBX~y}B=P`L#3#)5E4ysr!T{$!C>kEiGq`c-X_I>!RED zXWZ$2-N90QJAaS)(PuPxq;8J0Rcu_j=rQ(j?E(6A;X^Y^YaS1r4!(2J@7JCss&niM z+AL@H6wT{=#$cUQ6caj7(}hs?rSKpl4=6-^}`)`#dd$vvH0Lwd-AS z%B9cN%Cka`Mp&O1EH}QWL8#jJHYHImrL?-+Mdw24>;5%M?Jekf-rM;B8bELe(3edJ z5xTK)=IZyZ8dp}#qF);*8JPMmzpPO!q@wvQkaytZt(ez+C7412BGoCYy!JEE}t zyR+y3-Mp{uLG{!fGu5{jx)l;=rE_o9*xQF6lTnxa;93Dc4Lrhk=nkCH-Y2e~d2XdE z{`}s${zWlv@(*rruu2xEFz1VB#${e-y)H=TKVuZ7&>yKicC5!9TG8H`(v(9ta$trXc7vlQX zmTU6a$LZv}>C)TF4kx-#e&O`F=$`xib?>}BJYcevvdcvB?PlD=e=yE^J!c=@O-Yo1 z1GcouIQfoSQ|26gOS@e;y&#@dv-y0jhe5-&?Y6l(0rd|WQxwDNT%Wewj6bB<;L%p| zs@ccf{fYOS^+uoFw9E$=KfStfpQR!=nT@mDEGGHc!uYx>VaJErwxQ#MRErJOHu+h$ z_nW(uEL(hZ4DQ+-ls!j%setOu#fLvBG_`qTaaPDY)jv1(g&gehtu*KeU;10$5cYTj zlRJ6X!+@7DaDKX^&!D+9`&Xw{Ewa=c)11uREdm*b$~gTc8!`q8M?sTu!$z6_Q4xeQ z3XEWW#)@aLO(6xEc{+m&awouDIh zAmTk#$pBhIOTHVyA#z68ToG0#CehK+qbFlABSNEC3}%E0iy0Og5fmB9iXCIbFrT;L zk<4<}nQ}7ekced+TAlMoP+v!C9&A0oIiNBwho?5@#RVa&PLW!iKCkog zjub|8|1lP@B)63X%`N zI0O%Gqsp$y^uR3-v=7jb75vaUrLFcBfn3smnaViLwE#N!Xk<0;Cgdl>~ z{4TBWF*W32>XBoHP3>PKqqzXg)bb}DZHM^1|1FV2QEVc-BsMuV)5sc-3oQjjUP7=1 zp(F(YAd7;bUjiQmIsxe89t8jx%6>r-wjHtTmmCU(Auo?Ndgk8?`S)F;1q6@e@q|b6 zcyk5wco4_iKYXrbR2~nC6NhHRAhn>3X^!OaMy_Nek7tV;$>Rx5@;3@!#TpPoG5}WA z;{d=2C|m3=e_iZO^N1|8UMz}Wd3*cD_sl%oM_EPShL)t|Lp6!co&>A8NiO5$0kFY{ ztgcZ+7Wxe$YgXaFrxN4uB(i?QPv8+*8t#!nV~DJw6ghe5Dg5(9mdtnYWzpY7WC;ln zS;DObHT%r;{5i9`uN}QTL}Ur5w5g=^)}aD+vE+{RAg8aYg0hDnx+BFQbIbeX9aGW+ znAdY@k@Otewn{_Q`zL(L*FJyq)Z9+|LaAKQU5l#5SK&(4s>>?YTjQVYVOD@gyaFUDfp2dAt)vNFYibxeqfb&BXR@!8 z4_P(Waj;aJ2VMkAI3)3RBEygZz%~%lWUMLDBwZY?^3yeP4e@TjXku!<{2Z3*PQnZi zue1{JW8)N3_ngS_z9`)Q;p4yXa^+AIN8*8kOKMT-MJwu8u(WD-2+@SZMOcc&s!h5t zmP^@P{kizVJ#q!@xJ!#;_tr;@rdK~((j6Bzhj`l8J+x-d{6$keeShM7IeBnk~u%_u`@?&0R|#(y=(ot%uXh<9AD z#OtV8=JOT5tUc0Wuh*5zTJn)?p;r8Ct@yszYd$Q$TkLUCa&B6^bljoFVRIYRJRL9I-*hYSak{aSw454kXRy8J z9_g1oPaBnA_%8_4$&CgsLpPX=Ly^y)3NW@EH-kCBpEF^DcCC@yTr0`h_&nm2Ju@4_S=!xA6a04*V3u#1a#y`eQ-$g@#k62@4ZP zA$tMWyfbXQL4Isw6Q^%n@zev?f}=Au+H;d1OypQ4GcKuG-UgLgqg*q$YzIZ|ivi>| zKyCr#24o{mkd3Sua?Q8z;K8gJiRWKJ5iWI$RpG!SN)iCy{uwIiL2;mekDA?!Hi?FIekf zf355nohRAaK+F);NajiaQwm1OGvBI6D zwhMJH65>joe(Ap^6cS{@lJo=ye_Mu`u(2W#u=6p|*dhOi<*#$c2sbDdthM=fbjPoF?%3?B?pR~A zJD&JG?s(g|gA2yEBr*3j_#~KghHWm1KT# zfA9$sh$ry&F27oXmwFvdkR%y>agMLb|3KDG0E1xZ0Z$+HaXAzM8yo(?Q{-1|YZj zmDGSRN%SUOVpMf<VDKfR~J-&Ms8= z=_9Xdhb~e{je18tm*o9Awil0xEGOzc=CMNpm-&zUwKC?x9nNdHj?HUPJwTqyL5z;|+2>k~1x~gHiLrqf&5YK&f^Gv(Z_hzzF%*6UU(_h?(mpa@c z-Z$LxXr0pPKIo#8D3aA?cxvOBOXHjqoVPtz81xqXd>0nbpefG`squ=&aHudOVPTXS zUR+O<&#$5gH*JD&OK`C8Dv2n}MKK&AN#5=zg@iRYD36rj!5gVBpqvk1=;H}Lm#Zbf zL;RgG0s?TR1i%@`kIBux5R;#zekmp&iq233U~ftM2@oJD(JO}4MGM5(G6FIAvEd+` zS8a>&xZDt3U_6OC{u?nl(txQI0SIf1#)rDgybP3LkJa-MzEOe*-urLWBKHlOub(3?k&GaaYZ0-Rm%a%O zhu;eMhG283<0nF0I3ZsvUn5=p8)Lch|2tIsmjs|akd3~9Y+Nhmqj|LwV-z*Ih;Y~f zU~kn7t%;c%!MAFL`*|NQQ@~?Y%^=N^dyLmuR&~@{HN(~fd#i>!9$P{1t(xIZ-UkQ; ztlU4g<=gV*dYG>q^9S4dANfcAk$>bL`A7a$8B@vnm1+K$Dp`jMAh`1HU45BE6y_@r QHyz=|$`pMqw~;Ew^cm|bn) dd^`HjgTDfO-c1)3R$5&;^&bit7(a_K0|0g3!3zKY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3b982b2cf09a883795614f37fdff3075d70699a7 b/fuzz/corpora/client/3b982b2cf09a883795614f37fdff3075d70699a7 new file mode 100644 index 0000000000000000000000000000000000000000..ee567917a1840f91fe2c0cebb622d6c7ccd66eff GIT binary patch literal 2251 zcmd^B~mtZNWz6gQ=u@HnQ=5oFvI*HXnK7I> zgVV=b6^1Yn+j?&@oV>=&VL({#HxOGL8IA1hjczM0y*3wOtsh}EKZ52|x6?y7*|oLa zWca*i7*4juF;nT53L>3_B@kDs649k+1k`ara+GC(Cs`%#I@m;Hb<}B^0Ll!6dDJjQ zr8fU3@~_?IBvx|D1<&gN^gp$#Q|x0O-Qfg4-`Ri2Q2mO yV(N*Xy<=NcALi_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO168HffAaG(Kakq6N9Gcx>SU}Rxv*vQ>K zZ2>>jJ+T^Zf=*IM(Y*{r)zOpUegG)2v(|MTNH*}4PM{qR& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3ba4f4f81f590470627b176a21644fe0b193f679 b/fuzz/corpora/client/3ba4f4f81f590470627b176a21644fe0b193f679 new file mode 100644 index 0000000000000000000000000000000000000000..9fae617ff67d7a84e91f89668c5c9ec5110eb231 GIT binary patch literal 1022 zcmWe*W@fNtVqh?3WXtY`T^j`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AN85K^Mn+av1_M_^ZUas><}emEVJ62=Ltz6!Hs(+k4j!)H{M=OC;F83W zR6|7rd5|C%kA!DlNorAEYKcO4W=eWyNwGpeNu`2MNs57-IIp3Jfr*i^k%6g!iD8sD zuc5htiIEYQYY+vqCX_*dB5NAwBfFoGm4Ugjm%*U1lc}+h;fD5!Wkyeu{`-Euur{)r zp?>d2_x+p^)k=F!*G*SFHf2G>fi3c76Vu%cF9@`3SCT7Go>+9^Wp1TaYk33zk*Q*( zN3Rw7oJh7`{3)5i!GG4T(+3OlG+H&LtIMUztYg0#ov-WsR(rz6p7koZ>t2dmu^!yN zLuOs7wRFUxo0G1sO7Hl{#LUR>b#Z`!pMfkJbEqsIix`VYX_uDQX^wS#@~PW@h3(5( zUV5u_JvcCBm02VV#2Q4pORugu&9M(v0S`#OFbiu60|UcdNo_Fqd-^M@*zqYJ-{>Gc&^vUIvCk3=CM(5fc^w(qYTQAYjSNz`(%3 z!pg?W!OqDIqj|Xa_yq)oghfQf#3dx9q-A8~<>D9SQa7|UC- zZ%2$$T81G@NL0x3Qdts1L^bbKZ|7XzbDeYlcmHwU*Z01^zu)J&r4R_=76<_B5D2ID zz+VB*wA?CHU0lB){-#4100vmY-yQ9mMU*6C#yxy7#5VnG86T9fnruQv;cPH!N{X>o zJ1mlMIUDc=fK7Z50DrbY0fHDnP!>Qs!*t{^n2vauhk!r`0>xmo;3myDLfi@(1Vsb@ zSX^f_j21)?kqA-2z#x)4nFK3Hqjd~mV;y51V_g_)zlQZU1WkvoowPh{yhWJkJN%G3cH?wV<0-6gTJ9TH zQ22+`o$f_iPqtO5mW|rU{zqiz+S>JG?N$6t=OjddqB>eL068c zmr0<9XH^4_`Hp@5ZSaHmSG^0x2a?F=ZC#bgb+%>^q#E8dXK)@q;-pJz=J_diZ_~Gm z*Lw2VSy4@eqiLyUC0Dm6z&>SnR53F#lJur|XrW!>G$ylr8l4MGO-7ZE;;$WE8>dNW zJ!YC>FDso+a*;OsB5^ir2d2GSw(4Qf*dBW`hnIp?e=Whcrf)UX}5w|9}%tBLwlMqovw9EH|RLwp=zM4yKEVM6SuQ8U_Mvr z+eE{T+>_O@otM7981OP5dw+Y9$#uG22Ma53uUUr2XSP0+Kj_ObinyXZQv{W8p7;v|*u zbT=9E>2KR~-3G-5JxiB^SsgL^&UUn0+)ClcNm4b)h3z|gJc6V&M{Y##Ib$YO+#=I^ zZZTu+Wd|w$QNcuiO?GT;IfGKIcMV52C}Oo5AtTMh&auj;EJX&Ya6Ra&mvd3lUkwA2 zR(qZFs1~@pxoJW#ZreL^t}jO0H^o?I8Y8x)3M0ou851MSEUQ+Fh4v+?PYzLD@=!3# z_r*-=?6T{fEVJ{#t`H6XxZ!_U`KEkuB_g+PY4q9$P97+fhvi^VK?G4=0x19^K#&ik zeq@`GNCYHwapSiY6#x)48ekUJCT1p@Z2Z98LMX-E$jc`K;!5>XnxDrIV{wp=U}pbt zeBZdsz~it)Z#I6$*&J7WxtD4|?oF4jP>hs=2cN zj_#Eb2-$;~KN`@F>6|1Hz)L>14g~e^kX1-7oX^%c;~vOJH?6#K7692W9jt@tpu#V> zpf;*RZG?-^|AC9)-{E5D{J(faV{PmU{+Rv>0Mo8RG#ao(x7J67>0Nw%Z!vqcpRnI1 ze;nD%?BB-i$GV2YRmwHYly!{3%v3Yq7d zbV{B&qHu34^}v3T_t%nVPQ7l~9V=j6Uo~byq7lFIUD@Q)2d>b_nHs#PPx9^T{Ie(4 z%yB9=B&*+25i!kjL!PtgrINcw<(%qlD@t*-1w}E=pV;|pt6fJYcYD;fi2~3+LEzua zEnjswUU1LqM&-~kr5$_C76#cIM%QjQqj<~!C+VfT-jSBmrFQf5(l+f0GFdca@H4Fj zs(4BY?|ZAz-~a6-NlkZI(OuB*c`W%Paqrx3ygEk-w+oJK`dPN3l+mdq>iF%1*Sz`n zf$|H-^9{=1>BD91wgi)~@cSaw^jfubQjc))p&IVQI@|Yky~n_kkGw6uaKzYjsiI`7 zjI7W-6f3ZZ`%&Z^B^UZS*10l1+pLG|)X>u=T?_o4{UMgYPqy8P{kTYDJo#=aXYF4e zWLo$2{+`E50-WRpMwAqzriEvv{-|bt?a~>%5lQ1j=8w5e`FuVALLiW-|5zcleqA>& z#jb!|r7U=EPI8JxmcO;HnJMnH&QWY?v~N_Kz*}zc9D|X=J^$15YIcKDVVIDj_yK zZ(3U2OZ}Dlr+99%3YIFIh{g^v%!dphVq!z^AT5hDGj7L@cF{JeX(2Nk*g@glC^!NC zNMA{Oj~I5ZoHn8=!&68lQgx*Md*^ieoU<8PyJE$YQnxoB2?6_HGYAuf()I#&RCFt7 w2>V{BZVIh4y`17Sm+~=mX4eM@LzI`;yris;s;L`lP>vr)|K}KC{JKW|1ag?sAOHXW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3bbf27c3406727197d9e5239f4e26c7a5afb95af b/fuzz/corpora/client/3bbf27c3406727197d9e5239f4e26c7a5afb95af new file mode 100644 index 0000000000000000000000000000000000000000..08bacf41bb56857ea56e170cd9fb0af33ec49061 GIT binary patch literal 424 zcmWe*W@fNtVqh?3W!4CKUl4b2RVjKIji zAPS9(&?C&n?wFkWLcuxTAksjXja{n^ZW7D{MZ;Ng_oNuu_Wlb9Z@v8UgN=KI=9ziM zTLRb)zX&M)diGlA4f`9xf4tOcIVauI+0nP_FuzBQ$F#>1e`2`)-8NWkYG7=@$HpEi z%g@O8pM`~)iJ8Mdn2kA9R+WXvnv0D?n~jl`m7STL$e_b_}Kr46Oed85kMFm>HPTxEYv|7?|Q2 zm|_f?m?8|C7!NLBW@2Pw;$--}!AEbkz-%4^UN%mxHjlRNyo`*jtPBROhTI06Y|No7 zY{E>Ap@zZ+f*=kD4_9!0ZmMo@Nn%N=p`w92NRW$1!ZWWVwJ0yOL?JvgB|WpGSRtUK zQo*Mr#XwG+*U-ek#K_plz|_FRAWEFq(A>bp$Oy`%mNkv@k=@V8%D~*%%V5yh$<)}$ za6|jVGNUI+|9wASSR2{xx_s|P_x+p^)k=F!*G*S#o3fzcz!v$kiRo^J7X(_iD;G>u zk}Ep#GPlyIwY-7<$W*b?qh5tRCz94SxN8m$@&)a6oT*0EoW&ewH* zt36?3&w7>IbuY!OSP$;sA+s*kS~}v;&2`sSrFVQ}VrFDuTpVEFXCTYQ94gDlBE}-p zU3zuRX^wq-@~PW@h3(5(UV5u_JvcCBm02VV#2T|s`rhZ`BJ zUsU8yy=I&BU06~_`cTI@rPW`0jlR|trk~fnD0Ap=`=gipI%A%gtoE3A$bRZNZTESq z71{o?1eO&2J^!7FX9E|dOX>t=Efca%%4dGoOIEux?|pU^*TazT8LNsWRGa|^ARqr%@JA{DADzx%^n&P^OKV$2K-prnSIz?4G~LE#`w!Xb=L0g4tB4nAE7 zIWP-F9}0&UY4X(IZ~}_$C>-)Mz>I*=2vbl*P&hc$AcVmzm=+j~B8X5+K$;j`I1Ixf zjA9`UH3(ra3sVb<2nq*N1Ew^2YH&CT#ds7Bc^Y6wz-WXiC?Y5v9BL54U=~aZj7AY; K5Mz!66&L_zcLZ$! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3c2b5eb4ddb34e87c629cde317c5efb8969b7d8a b/fuzz/corpora/client/3c2b5eb4ddb34e87c629cde317c5efb8969b7d8a new file mode 100644 index 0000000000000000000000000000000000000000..4019cdc2b9d446118d741de2a7915d4f21c667a0 GIT binary patch literal 2837 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>}AwE9c0(bt;7^z*tGWey!~ zfAn%+XUr3m)gBWM*-u@k?LJSnBHMqKz>=cB=f5-YZ1}{nBvniw-9 z0}CGmIL$G1vM?~Tg41NZE@StLg-<4S--89-Pkr${DgTZ4OjxlGEfK~=PJRSYwXELr za{}w5GrE@)cDgS6DAF5dtMvYJSzXqNO+TX-s~?dv-Kg=>K~rZ(tjvSBmj}O}-}p#S zCFsA!&l=gg|4tRnYhRHh@?!>L`6_)8Py{fFF*CA5w8FGN61PF90mCL{23ZANnam5H z581lE$@}#G&j0@m{}{xW4WJp1nSntJl$+RLfI*Cznei?+gX2vG#%m0WmkpX2&l@x` zmi|TebFgNS3me36=cyX-yAV_O+|pEPSJ7At_nN-%1f-izt?s&ZBi>x&fmJv zoT4#{X1M>+oBWdK0oz8WWHX1;pkiCp7i+vV$2NCh~7GznE@2IA|PszAyDCm zH_{;G8??kDDg%i-mMxY(9kK&^2I3+k1Ig1q19judK**_e&?i>qx64$y-lop!v1yu= z{98hj@u5WOuLDW@B;LPhcD^wAYu*d{w&2u@b4*JTOBBLkCC&f;{}DA3w2A})P}X)} zVqmagW;7rG7!C+CFo+=PQ~?H%UIqaM1_D)LNovsy(`g5EWbbZ`+tc;(!!t8So`ajj z*4?%^dhSi3)G^tdeI3Vt{ohs3eXI3mFEKQ2-QA4R;71AI~0ZTet2LJ#7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3c4ae91f3376531b4636dbe5aa55c5d5e3e3053a b/fuzz/corpora/client/3c4ae91f3376531b4636dbe5aa55c5d5e3e3053a new file mode 100644 index 0000000000000000000000000000000000000000..9bf32eb4be1d0441f79f76dad0a34e613cf62817 GIT binary patch literal 2835 zcmb7`dpOkV7RP_T`OS>`eHyvW z>_<;YMbwEMNe(qplw?{Hj-}PJTU7zpz5fKEk z$3PGZfv;Se)!X(mtl7|ecSERdyH?S2dwFq_Vwmc8*C5%FgCG^i7=olQ1VfNE1Q8J! z6R8AY!XZougb4!Kn9U#?zE*``U<^h9`fz?d?Tq?Alz|Ff!6MHyZ&n3{aX1LLF_eG; z9${ngS{N5LLkno2hP<+(KQDnx^%sT-xr`NnggO>1Vs55kq9!U zh)-VEt89dn>3&-Z+)iDY^0=z7d8g48R$ZBC-l3|j_KT#Hk|=k^9rdv$Bf~`F62ACF zLaIaVY?fMQDKWXrD`~x$<6QlQQ(@tARJyRLRvL2kYvt~5DoiC98G^8K?t@@=XlZqxfsZSkj) zALZ817t_EPyBrX+2nGB<*`SP`*TUie0>jd!3FFX&MbPT89SNm_j+LX$6m#yDL(ZND6i$0?7(J__H#Folr+y)n5g9tblKFnme-XE zjq*WTnA|KgA_7BLRcOBFpnNO@<<9qHCKWCi`(dP{K(bi8Il6Xhgw(3FxTfu^CJf$k za9FnMWairGP~7k>YCri$x06$ZqD_uQuclKnV#SSfTdP-g>arSEz4+GLviWcNL%}bu z&Gt16Ynb>+?dEnFJpRZHUZ@NCp)s&UEN&{5M?5b)ES~J@GS7__um&s!i@{>qpxoFnm{u-KE0#UWJ`k*3f+yR55l=-e zMGqb?DxQl*V3-19Spfad&INp2l7-PcevB}c?7;-tu+h>~QFyXpH3($GiWoHK3JdJ^ zpa;Gs4*2Tqp$ER6t@+MVI*Gb_-7|*vcTMH@u9yt`6sFR|{4T#rsO0a%KGB;UUOG9x zCFJ^3T$W~M@FC~ct)6x>{<9{dA4*;<>+GBHSDEqpc>H@wdRtW-Z%_LjU(zaoeEUdV zurWTf#^IY&w)lNl)@fkJ(@i9!a~~N=9}e9Qou+x!uj%i3*%_(j~6GpmSS>wc^uNN5p`_U>#(#^(?V~* zReT{bJbv2 zip3%jj0ZHlJOvNqaB{FJ)(DV+Azoi*12|7JS}06(pwpvhg46^~1dYQ>0Gjiff}WQL zco>#qUj&#bD zN~ITj=(8b59AYbc({gcz>31zWbM7g`@9MbCIzF8}=_iQ}8G-(;O+GwpUUYOrPmLr` ztis#02T4bqe|evpzCveC>_Fd`Qh3AVK+=BGUfXwG>mlP;oh%B8tTe@g>V`*h z1iFcDCfKTz+W41Ilgx3;$5C?5ZwopSC0n7<7QK5mx<>Kw=UHpwixnIXDsUByRCDpi zI|M84jfP~66y+K@2#|)*eRa{pGfrjCLp2qmZ6pqZ!>*-UZAAw}q?V$e&iO?U0}ek7 zw$2c<9zci)WFzUoBG0qe5es85h-S;^(n6s#*!xS!)#o1@tEeUCmXsV58McE#1r(HU zB`uQ$583}2Cz;PByK?!$n8+ATn2`Gi?5L;!CSWlcz#0HBKaA~w-DeZ5`7$1HQMk1K zn{at>6XpfY{14&!A8K-={N|eFEJEeEa`yu?pYEwWuGfgA0aV{t`P8hmfOBsqL*n|O zq8|zG2+LRx+uf^o^2H@rZ?Y-3@02-Jm_^)r(z{zHsoQ&W;Qr3jI=9&p@o)XXHvZ3o zd4$i}nh zX!IPVzp?Zuj|awNbswwp;^PBL#(R63MRZaAhcjP*toE5S96%Ic=@;l?U_5Y;VP^#x zfL=wdqU4z`@XF!G)1tUMAv!xyXl3jPxad=J!sglYma*pn+<+?{%QhfGU^TE`)B+4l zq@s5T9O(4z+qZvt8J{cQCG$C40iDlH@>D0W9>IH$d6%PKqQx*-5;8NEq-5u{h6+Vl zqAV@SV6qcQrEsGZUWQ2Fp5F7`bGq-j=icYP?;qdie4pnz&qo%9MVcW1*bl>Iv3tAw zwQG3p=gH~XgGs{}w4C{ZDkVbs_l`B`;0cT>OVzRM3RRaMoBq3f73ss8O}OG`wK}u8 zZ~7`NsOkGVfE@rJx&{Iu0H^=}7Qheyi~@jiMYt#@gbP2u216hOf#L`rBdQ%ui(bTo zAQlZE8%Poe9s@g~U>wGu%{auRh zZlK5mQ}(B*qeVK*3*F6jZ+^txgaz3V^e@e7>WlH$&j<0KolEGKMhB#vgVTlQyHo_) z*Zp#e2i^E)9;W{8$I2fFD<*0K-<^FF6d%)d#U%FrY{@1opFR=X>Ah7N3dWpK%+m*7QquW2b? zAtxl0Z*8bkS1|Fh3{|;LeC<*83Q_{b3kA*llj5o}uBJaA;ca2%I{Wd~gbXFq)cIM6 z3j!>%i(A#>XUCY>r5httpU;)bQ$4DN?23|@6_n66t2ZjfOuG1K>mGrZuxq=XtbLL! z=CD?*@1ZrmU#n?qWKH;a(&Q;$uX4c= zAus3J%UW=Xc!zLCpH`X|CIo2H;@`vRZ3_m2NeK)+Wpkk;-k^um6g!!s<3wS*&>pM% zD;!lQT@!8Xxa~KStGY7wKr`2~BC6x!>Wh~idq+Or{E*h_mfg%cSr=rVU|XKXzm}^D z!jB&M)rtA$eRz!$nah>fSlUtVDcKby2z!*WC;P}Se%bkL5c!WI1}h4w6!)0Xf_az= zqJf`_IGD%sYQlF;6)7p*F=;u$vQ#83^x@v>A44C1RT8j-UVNVtvx`oR++y{OQJhqd z|AK6FY6#Kgl7`NtS`AR8RV^tp@+*^ct`&VyeDK)qg|m6>krt=gpIhI!x)v=RL}V5| z*XnU+%W4m2hU=fSkS%GJ?>#-2x;)U%$Zsqd>#xj?sw(5LDvT4UOrxT_7GqSX)w$Do zW#cwtFUzSt_=L;3Sh*kD{Nk2+50itesWrLD>t5VE;L6XM3qSBM(k>nD97UPPhy?S- zhSM@^TdZfFReyL)+hcvkp>ojLHdm_V04=KM1B(m;(a{rsgS+-n&D<1Bfw*+kt_M(uu6UMy{S zU-wKZss#XR5iVGba6#q2;DY^I%Kr}+!~cYfq3eIMaPofb3!(v-a|J*+u@Hv?%yaDw zQRfUIhU(|C-}lpY*yoR;dei!4TKo7Gg$Id+DH$b2QnO>xjiU4d!L5f6I;^RE&MCzP zlG~l<=>}0vtb$vm@tx5lQnIJAb?kes&(MAM zm-8o-94rfmP4>>;ahjT7`qwL9*A=x+i-ogtp&uh1i=$tj7@#_c23r}4{;S!aqIhfZ z4wB^QIS%jHs@X<6-!isY^^XSqr>bav{46g_mRH#c5|&kcYO z2-sZRq4$-*up@r0U)@&g8EMKoiC!PLc2!PLKd)rrp;N!KsO8OEy_YyR@#&y`KK3_> zrxNt**Z1+$-DBa6S^B5CB_c2$i&za~|KZSggyJN71d5l8z1!GP#3R4B)<2#TkQl6C z`69p(_lJXKgIsmsiu&~e)_42W{Qc>bgi5yq1pAEoK9E=D>w!DoF!JbP{@zHo&|eIUDyzguG@!!l-l(T3BKCwD0ew=~}LxLGKlY>cYT zke%%>diLbWYW=Lyef#mR3%tBd5v=K36hFU!g@{j?E7-`W2LC0}n;HR4{5~QE9f^h@ zzydLc2;#=If1*n)J#?xMKTmCc7cbo|{#BRbs;v$YXp5pvF>LpY;)k7fwEZy)6OH#? zkJ*0^jiwy+5eEQ34u%0T075VdjaermDu%`3#U<8nkd%^^k(HBIP~1pRQdUt_+oZ0s Wd5b1dOIt@*Pk$>yl7?Xb1pftLE#w3M literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3c77d257452ff16231ddabd88cc98966e93799b5 b/fuzz/corpora/client/3c77d257452ff16231ddabd88cc98966e93799b5 new file mode 100644 index 0000000000000000000000000000000000000000..e3acd3aec901d5e7dc03c67a0ab4688211669b71 GIT binary patch literal 579 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZj3=EwA85tNEK!BTpaT^2UW(LL$ z22G4>44N247cet1GBGhS8St`kYPET^edlFlz{Y=EP3DYE${aF(CvIdt!D(QR-W6ev_z>!{N;;D)t~#qihjNM zK995crh3}%ZAq?5ABxuT`MFs$Sh?t18M|Fzo3ZF=s4VsfUlr|n%4Dfs%!vvbm~ zk|GP#=9Dvd*=(?%W1$mY$;8aa@Ncn{frJ4k8*`|vFbk6bg8?^)$*YkSuHR6T4S_(_5&l{~@HFwI5^?iH{3=AU7%nXc-V$9483TQw; Vgn@zQxlVD0zWbStnP*n(0057d%wGTi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3c950182f51cb93042f09dad7bb60b927252ab39 b/fuzz/corpora/client/3c950182f51cb93042f09dad7bb60b927252ab39 new file mode 100644 index 0000000000000000000000000000000000000000..8bec4c8a13f853eb30cab2ffb5d7dbd0ce4512c4 GIT binary patch literal 2332 zcmWe*Hej%1Vqh?3WM^Kwb1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zelQHH`*Mj7m@sw0-AgWMpJzU~XdMXE11DF8Z_Sy-I-<_YG+FdEX;E%4vzUY*ss~>!i3bN>xZ;qI|rpU4);JA)vSB0H^ zl3&ney9Zs$6eV z=k(ZM$xQVOBxfcL9GNN8XzG+hQ#S?f_Iu9F=C{pq!#m3@!M^|X7jN~5V-MKYWjtH* zceuc|MJLpKe(Hb7e7*j{(YMMy>GK1`n3-7xco|rEte6=7|NsAsfq_AC!&xua56{dT zc@Az8TX);y=(#tAQpaR-_H`Wp^?z4Alm8_pb)L9?XRDoKe4WGhws14w6Jus(U^Ji} z$ykd7x=XLFInA+;Pd;_~udvNI%S&&yt~aASsG6$U;}=x=Xxm$kQzC!PDKRiGG`KNO zpUzx&VB@{&^{&R}ci9zgzxPE|^$@RV=iIr!`QG6GUoZg;53A4MJkS z%R}a10Y9;b5eAGfCEPFu2z*245CZQBDIgy32nq^@KBPwb-S!5@Crk>my$=imk}_NMdD6x~OfJ ztwcom4Ee}rt4--+ukAy5O0-+3T=}@oecmy{jAriU-u6EG+}+>vc+5G^dEax+|NMXF z|NsA9DvAIL902Ah(oi*`8urAuhPFDfeB**9O2%Ug>Gop2u%7`3-5C{OS zGLeNOBI=4KQgAk|CKRZEHKfThF5#gpLl?F$n`NR2HLy+@vWi0(lNA}pV$Dv4d$ge3sd$V+1YePV@p=RMN+1Z=|zU};}WX!b3u z;1SCFC8{l{rCP-=GZ@3$HwSbWUQ=sn-PP0IxZCTYS+RXq%i8Qx1G~cuV>YeHom&|B z&yEos`IL-wp-0ancASE`*~Z`>G=g3jF&EuAJh15tnFlUz2Tw$1#o*&KGFeUx#27q}W~oE*iqa6+R=C-mO1uV-@5(Rha!8wov^4Lj+ztBwvSW~{f;8hEiKF1Wp7)U!bM z`~vfGy?$%`B{iR^-S_Tq9_c9WQPBC6`@!gT^}DYxMjqaE+)wevJs=n62s-U7*R}O?sio zU0Hy10pu1yu0sye0XfJP{zP0pD*+@Cr52~yU$Md?@5<+C%5v|NuY#qDU<7N;hRJ-k zn=(wy-^bW)2F)3!{HEBQ7mka$RJdH;r6Pgt8z6;mO&mg$=9v{mq|grmzSkhA=N#+n zoJM1s-2ODjn>m}Ri)eBmjo&RQq8++Z=Yc%Fm2+H1WwiBt0d0NH_C)*J)CFq8>TyH+ z4L|9K)M}nV)8eGglH%+^iI*T}H8n=c)y?POq72S85&rU@6dgb&q5w?smqbMDW$*$I zL2#Pj`4MyPwU+O-a$@tI={hHW89`)cyLIZb!OKRaU7wwo!qKOw2gdp+ z{w+7~%+RI7O5VL1j8A>NqkmAOq9`~`2A~WDD!%yF7ps{ESKd?ohg0lQLhA*&qRd3@ z)V+O>e{u6|i~s=g0RY!e+X_2?5KU(9Y&A7CMBBRT;7DQF;-Q(5X!UZ?yHa`=OFZix}q%OZ3xXmK(=*5}d|QrgAD4MQDdt zHrn6NeLm6ZRCms2N3o^Pj#u*b?(32$F%!xAwjI@edUT=8Q&xWZGR{}bah3VV0~OX- zlV79CKwqNm)qTTZeJfI2Sl9B+*}ezO4>T=Nzgy{DpVmLv`<@NCxq@1H`-8SCziwXe zy?RJv>V+|GT|910rbTq7s&CtM9Y>7^gMKNy+V)gCJ>Y9+Dhej^Ges2eG9mz) zuIF@=Sa-!M6fC)nxSEZ--tQ-$jZ)k4T4s-xo@r&tvo96)6h~ctu#0}7WEW8*Wd9|~ z^EzVlPqI15rYRF{Jyc~B0Q#NYyS`OVmzh~t7#(Z+vg`n9SoxIox`g+?W8R@PC=t4` zLDr*>UPPzXAFuy=#8CHr-MEc|-PVRuWcSlqKj-y^c~r*7F}K+l<@yKK6=c?G*v!f4 zmjz!f*1YfbOO~$wqcT&L5;jw@+sh&^{mS7@^2^q3?38h@j98z0AmY$t$tBA|i6x7K z>_TkGQmLJ%I9>2a_D9G;w1hKrtQ6rO@&IxW8D1Eh0o;uCyT_le_?aTBpxij?v!j^d zvjYIJWQ}9;$r>_6*1Zuj7+L+_8CffY$y)!GWJUSKlr9Rg@c?9DDH=ecYb4^gD!C<KP0SkroepK6;9L#y}B0SJ#zGm@0z(~T>2N)ivT?Mt5aB8#0e{rg= z;$2h7+%sMCKRi`waSZr((@2P4)2CV_(N4d0tnj?VM}I%Cg92vt@*{^$Tq#0NAV6>I Iz3KM90H}bKLjV8( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3ced1bd1ed09c16f69933c26544feddf4dc13b0c b/fuzz/corpora/client/3ced1bd1ed09c16f69933c26544feddf4dc13b0c new file mode 100644 index 0000000000000000000000000000000000000000..2adbd209caf76a5098b144771c190f85375a46ba GIT binary patch literal 519 zcmWe*Uctn~#J~{F% z|LlrYVMjQ3Y`lA)IVkOkozl`Tzc#=9+qn04*n)irxEL7t|1&Z$GW_CVU}9td0d5Ay z5(dUX2F5&tCdMp-#!m~FnHZUv7M*f_M>JkHs&Ff$nl8wwimvoVLVFbi{}CZ`l9 z8e5nc$cghBni*Ic85LsYXFOfHv^^SVQVkrX& z15P&PP+4IXCIbcoZV;27g@u`ky}=O4r_AXL1}RJi-u8S##fyaWR!g2;eqe#jt4~?t z1;LSzFFrYY)2MgC*-agf(+zJW)y=uSAeHraVf$Go1C9fbU>9UyV4!xepS@`W08L@6 AVgLXD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3cf7bbf0751a847b1b7e1bb39c4b656354faed05 b/fuzz/corpora/client/3cf7bbf0751a847b1b7e1bb39c4b656354faed05 new file mode 100644 index 0000000000000000000000000000000000000000..05a8cceb80ace82240719075dee48405c882cc87 GIT binary patch literal 1040 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)WpaL@)a`R zLgoxnP>L-zB%!7TXdLVAWMa1c_jhsQa)ZVt2C{6-p|X4|Vk{y*XD`h^+i^9aaQh_% zmtVHi`9xVh8I-ayYso6JyY|P|t~QFVWnl1# z2x$?n_|rPMdYSUuWvX0nQ|I*9)FmhXmXKt8D3SW>K+-;m_b-~ACrtjD_rks{CH3MQ z(~`s)rqd4S$ll!=x2Nmnhi7JvJO?+4t-Eb;^xT_5sbjJ^`#O&Q`oF85$^Vj)I?uzB z4YNXQmi%!@`SnjY=|$-MOrxn&4o%$@xZCeJH=Ex!%MI@=_XPX?*I&HVBaS^_TbJ={ n>EGc3+ZLTr_xY*+A@lY63rF87_oUAc5MyR$VBuq6U=RZU7gHEZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3d2844ffa4832210fe5284d9ab48837a708928dd b/fuzz/corpora/client/3d2844ffa4832210fe5284d9ab48837a708928dd new file mode 100644 index 0000000000000000000000000000000000000000..94a5640d96c4ffe5eef269b0a1130565e618ecba GIT binary patch literal 2332 zcmWe*Hej%1Vqh?3WM^Kwb1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zelQHH`*Mj7m@sw0-AgWMpJzU~XdMXE11DF8Z_Sy-I-<_YG+FdEX;E%4vzUY*ss~>!i3bN>xZ;qI|rpU4);JA)vSB0H^ zl3&ney9Zs$6eV z=k(ZM$xQVOBxfcL9GNN8XzG+hQ#S?f_Iu9F=C{pq!#m3@!M^|X7jN~5V-MKYWjtH* zceuc|MJLpKe(Hb7e7*j{(YMMy>GK1`n3-7xco|rEte6=7|NsAsfq_AC!&xua56{dT zc@Az8TX);y=(#tAQpaR-_H`Wp^?z4Alm8_pb)L9?XRDoKe4WGhws14w6Jus(U^Ji} z$ykd7x=XLFInA+;Pd;_~udvNI%S&&yt~aASsG6$U;}=x=Xxm$kQzC!PDKRiGG`KNO zpUzx&VB@{&^{&R}ci9zgzxPE|^$@RV=iIr!`QG6GUmyS^`wfQ@tl&LXQ7VA{5Fk&2 zQGbxs1|hNEJjefE!H- zC}0s58jC}@uxL1-Au;5Y6`9<44w)$k6>w;4fT6^xsJwdPE;fg^iz6WVM~6p73;0A| zK?-rRARHKIsnD!}HQkC17{D3?XsOU_fi<1JWd6@#1b-ezcxvVU!x#t=7C=ClixLVU zbCUSXP2KVaNSW%lBhT&ZwJDG53fuP@U1QXinC2X<$ZWf8m|PU;PP?Z*)@WpqU|hr# zzlu+B$eztq>nJ89b$TUk7PFlz-?7Uqd`>JbeHCjBIC|A`4|j6Ot`nrf`usYRBU=e$ zo%2pEO?tJQ^}5^JAJ-04M;@3$Aut42`T}pDk40Ges%QclpO^ITe7Ah7sv)Owep_qY z*`z1gb<$$$8>3ePLMA?s_a_UKCHrw`3_xIbab?07Ny0*C{n(!P;sM8)S)8_|Zu@~+ zqneol`fuMQM)s2L>$U%D|M08U+`tj*wVp-o&c(GPkCUc*Vtr1ipXU9$cNV35QBnSM z!0-z}x`w`WNX%`+=xGYu?B|njVpA2LGyO}ec}08B>4t|mTMU&n&zG5~W#M&L{1^$$%L zwByLIY}J{Jjng5R;XC9$;ty_Trtk&Z9F5*gC#T1V8|HRauIwYg=}-}Hup zUfr1OtsmAf@msW;`%eGqr!L;f{Z(Q352f(#YARlG0Wbl9<-`pDYCs@;BKdvPKa+nG zUTF@~xf&p(f;E!L645$fHBiPXlCUtF7q_y&N*D+c!7yawPpo^kN3`kszET+b)6J>2 zrua+wSM8?V2b3tOLGXqy^FrILn6JhzEu+I?p%H+WQi444I~Q)otkOe%%qH({Shie239cd+Xe+dapVqHV)31nzpMja?8sXR5em^4QxB> z4)UU9iXeOmgd;NOHKfol$u9=Rgez;LRi|;9y6(tC!=UA|8EeSvDVCty@`uh_&g9EVQ#hb* za6F5zlkjeWr8=pFeH}STAGdrODd+q?uRURKCp6lu`@lxWC@$_IV?$h_g5wbdj)IYD zHuh9If6ar@;LMSNY$FFgQXg`#HfngrspMsdrb3j>pu@nhYw=E7;bEa+bHR@n{K5(T z#~ue+r;8bnAVdg6NE)!n@$7L#!zdJ@**vClcFO+_t40I zB#{s$oXL`h$b7+0;&F(s9G)OLBAOj4;QS7|L{tDBFz7U34FHf1V>@8?*#sNDj7L}& zF0H>3E)Pz;RM5c&4Ty*_5i*)y1iBp+b_?>4x`?M3gyhr;V?mee{mo+H_S#TmG0MJ3N%fN*<-R`V#QQByTs1lUI!l8?A@;-bHcXs- ze~=mJC&w!MHTw8!WSt*6@kNc5<8!-aIh(AovXs{ZFcaKH8cU2FnOh?DEf7w~NF~X} zv*&2k9I3CN_(zXN#zb`=tJ1<#{VT?MTdGA=LGD7$7a*&BCJh4+1$glbbWt!CILNTG z0yIFaAXkub%$Im&^WrFx9IikzJ0#G`*yD2~SIrKUvga*h&jYvtS1g*PPlUjFV85&d zD40N&oW*ybQg`p({pDdi4xgLEV{`aa9w&jzj}~xwDbh|kSv*uFU?t_}S6xMd59!rLrP;MpVXUG~xO^KIH`j@;}x- z)}?FP)s$G{tB>`KSL)&AH(qIeQS@e?&A9$HZr76*KD%%vW3Q7@x1-!du$`dn7sS{5 T`?}J}(05tRngj%aw|3 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3d41b72b73575e4d8506fce6f48f9b3d6b25d788 b/fuzz/corpora/client/3d41b72b73575e4d8506fce6f48f9b3d6b25d788 new file mode 100644 index 0000000000000000000000000000000000000000..4600c8aeaf62c961e88c942a8fdba6eefce81f19 GIT binary patch literal 3495 zcmd^B%Wl&^6ut9u^Kc%`6o*%7+E5TJRL4SWV1dLYM2POPW8eHlrFew$9g+9~{)P`g zutMqri6vIBPP<(d;(u%+b$ZqF#^tj z!5HulF|AauD|HYAA2QGv)MsOBl%8rMY5Q z%AS0Lhfs^z>=GkWRF;;dYXD}>#)GVEAkOZy?iNzQQ&k~yeA z&+ZS6p$3OB*c{IyX`kRRjux}UgZcf61R45v+dy`+NQ~k*R||hbKq7z<=P>+Bx$c!B zoECN84PUl|-in*#Kf!VMf!E0k$_YL}9I{yD0e|f?F>I+T75_Cvto;iF-!knlL!$j9 z_dBU}Rm8}dK^S-*3Hj-g{gpV4)I6#r{Q+_&pcIK9xWqq(^}-W^y>*F=*IQ BX|(_V literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3d548b0c8a5412835b66966d0064f675f141efed b/fuzz/corpora/client/3d548b0c8a5412835b66966d0064f675f141efed new file mode 100644 index 0000000000000000000000000000000000000000..219a2efe5079e2ded2fb303c13f79209ff90f2c8 GIT binary patch literal 532 zcmWe*W@h4HVqgeoW{ya=-?VJS2A$2Cxo>AnnY(=v{I2~y$iiS`ViYCLYXsq%8i2UiHANZ-v$2ECWnzR{z|6?b?8LwlB~ZV? zqOehb!Hvc8`JSKeH#Ix{%al6UV{}iSb%k)}ANO!^YwK;vaSj|z^)d|oDnpgW2&dh?cXd->|>wfzX=iL5w!De=Be z>!0tH>rZO^_vK+=$YW-ZRmirBRzJjAwaGm&W}nZW$oE3Cg<@+ST=Ki5aaM7^nt%io zGlLt*#+0*m2@AfhsMO#7KRy2Ap%d11x6iI_NcBFmRbBeO;08A)h46cy*jzk2?+dtA TJBLQZD3orRCxh-m6ZPK!!g{D0 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3d5f2d9a6b27091529338c4fe45f3ff612ed4084 b/fuzz/corpora/client/3d5f2d9a6b27091529338c4fe45f3ff612ed4084 new file mode 100644 index 0000000000000000000000000000000000000000..fb296ac373b59aa14a3695f3b351e82c7672fa4c GIT binary patch literal 1176 zcmWe*W?%?pVqoxPW?*DuW?^Mx=iubx=HZp&7Z4N@77-N_mync_mXVc{S5QDvz=x^e zfCvKv>wiWDMg}ov24-Gv24+qMW;O<9W`icC{{~Hr&lfN=F)}d;GHh&lXEJj}+3);K zq9@!dS!WyYvTN z)G)%hBmoYRRFeY)$R6bWSQi)wgY>Dg@ECBhacHwKva+%>Ga6tR7Ah;qB4i-Y#FtiDRi&4d zUzC}bUR<1m9Om5MFlS_#bnpE%w(9?dwSEg~*X>Z+qWOK=9CO)xiJR{K?O&Qs<-2>Q z{zR9YnXHBTpR!BxGZvbyIZuiI% zqRtoD)!WyGRn?&YtJL`+A=Hy080wuHX0m z5fB9O#X!*C5M-TCpf9nfD&tAhg~_nRbyiEBtn4bN7i-)5-4WxhTI``FDg+t7fgu=z zOd$v&LlC3`VPJ@WAb2eu2#<;KZ0J^A_Q%+FM zD_t1Y!9gIHrUSH4gpEawG3*GMF)&mOw2id`MWQ$%j})B1rP%?pDu@^_d>54R#0fkp z$uC*T7l{SZR8k-vSefe57&Jg<(mWY}PG4`TOY;CUx(84{>jD3xOKIY@{W(HGtVo<7 z;Lr%bM75L#UU!u!IYG)1B#_n#c-!99g@3;;Q?Ni?7hZ4Mwr!L+b-@&_Xe*Gzw(su~ z#zBZ2)`x%`*2c(T7&;rW=a7pOj_(dJ{i5F1{eDAHGuM`H?5m_jb`EXuya8()MQJfHCS$Ims6#5%8?G(mggagVjTE1R6yw~8WJC0V6I zfxNws=%xN0m(J`x&bE^1$*5;PE4zQG^EgFx8f^NEa~#vqxMf859F)>l@j5Zz`kC{Q ziDMYClFS%LSxEH3ATR`1$>9}14hI5D6k%K1VO2+8;f%t|as2N-e<7>C7-N26y^IR< zRIl}6_zf0|U|s zd`*DD@EZ&a0S1b&7g%E{zy&x}I#e#snf+j5jA|m4yIUxs#!2IZq8N^l!W9dFsVWr- zYXH0)t}RTzxkPUlAI>OETM6(e!nRYdfdLS(R((dsnt@D$Nk|_`uxNbw;g)RX^OyrO z;EYF6Z5RvRPQ~D0poyY!GCYjI0DvO)meyEDU=Qpn$qJhs>$epqZV7&`)u@5Net~p# zaUTi`QT3TeB&p_JihRY7S*0*~_sX-Tb6e~3E-)tpZtGCCN5RY591A^H@mmFbXzsW9@v%{@076Q+gvEt7pya=KS(R=9i`t zrzZx_I-Ggj8$2ClHMDxw>Q58&7Z9z1FQn4zZ)Wn#Fa_b{Fun zTZxwgY^NfMe;CSiFu3CMZ|BO-tlGO+jrse z(z~33vTtb#cQkh}DkkOQYx?=o!_XI|q%U7N<{w_wUfrM5sw-Nz8%ale|NS~O-G(^b z>P=n!dEQmO{Ym@mZg@_Gtc1u(2Z%@Uhiis;PY{9U%* z66DOLf>ZoKC9CA&CL=ArN5A*&LI2_np0fQi>x=onoLsY+5cy?qlzT=iqX$A{K#rsX zIY#kT_C^;K?;jKn2Z7KJWpAMV*;s93jpa$nf*4K;%@sJS1g~SfNEM0Yq>v(b++;D2 z*PpDYd7PYG*#w%h*_p*Yet{AsRh=Jv>w&&Q*;+=TMa zn@pK3VDvTxRHcbqi+;SucJBD8gjKe9^Ywc-vWQ7-p^EOG)4m~gu=`t|+>COIc(5@n z&vh=G>@gdwXfHT&o(MG*W4wxV^jesdE=%0um#bJJeGSVR7pr}nyar!;L>PN@M=f@~ z>r-v=J$=*+aae;*dho5A&wb`a4Ug=Yved@}pp0&Eew4Ijc>1mOCxC41ckL@O2_`}O zY3G}@#lHmhkVyt%Zl#44-S27tqiE27Ya48^IFPRezxgj8;*BC~Yc(7IwbHfHImhws z4b2q`DRDfJRCRaE8ws&cLY1hShs#ml)uHnSAP_7E{wS7hNrJ%NfY)zE1_KjZRk!0!M9)@L)f?}(-?mTDQ9XPjl{YJ^`sa^{@ zk@;#Mzxbf&X_m*RwiWDMg}ov24-Gv24+qMW;O<9W`icC{{~Hr&lfN=F)}d;GHh&lXEJj}+3);K zq9@!dS!WyYvTZ74ahFR2RJx5I6kgZTG?B)*m$bfnYk+ij&r#SI5IIa{`|H$z`ze2 z+OqtNjQ?3!n3-4?7znd5hsvt5@ECBhacHwKva+%>GaB%K1cgD0m<$*UBtbku79j(H zCcd=Nsw%yt{G!af^y1tzkz3(_EGDr9}lgwO1Q~iY98vFbm{H1H3r$Y z7J7(JQ*NCVUj9;Pkva1&&vFOrGVfalS;9k2l$u>NR_h7==UpATad|`}tLjfV+wE&u zEOmaa-;wdV&#=(wf5A()+!(eA9m*a&0k61Lu6yxk-_r6a*He@%W{5AbS{^xH*1B|p zRO5Te-`d-krz9#Z$*=wuvAf5wJpDp!L|NBvF=hrvEgl9&HD(4`1@^@?dqfl_pV%IH mM_S-T&K5OuuZvkLg5PrAKd@;>u1pOh)Z-%zG{F4J82|u$$cnrG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3da58e2ca7120fc98dc41fc830a3a843738a285d b/fuzz/corpora/client/3da58e2ca7120fc98dc41fc830a3a843738a285d new file mode 100644 index 0000000000000000000000000000000000000000..4d852fbc0278d46d87d35ea31b80145eb9d07e4a GIT binary patch literal 111 zcmajXArb%(00q(IS4A;8LHt#4cQ+$AfSq}Di_D5JC4XX9$R`k>f&CPTk)VGEwl9Cr B5S#!2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3db1eacde509497013bb509c22eb1f72d6a84093 b/fuzz/corpora/client/3db1eacde509497013bb509c22eb1f72d6a84093 new file mode 100644 index 0000000000000000000000000000000000000000..5132faa77befd94024f9b5201975291cabc11f75 GIT binary patch literal 12 PcmWe*W@KPw5CM|_0n`9B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3dba7bf1ef103a72d1617dc1e4101489b82331ff b/fuzz/corpora/client/3dba7bf1ef103a72d1617dc1e4101489b82331ff new file mode 100644 index 0000000000000000000000000000000000000000..c1dd457377eae23c8623cfa42f27f12d804b41c3 GIT binary patch literal 696 zcmWe*W@fNtVqh?3X4YD{t?kmgJu|bj?#RSP8Xcdvl>IgX1Tbzp8g0P9V8g(`%OJ+U z@Sl-^k%2*+fkBL!nJJB%fhmcBDV~8T#-NEQ!k~%q-~whQMkXdshTj`}^i~VZ<}u)9 zIRo2mZTag8pwkL zxp*Wz^GZ^S@={9_!ZTCSGfRpU0!k_sd`dhG12Y+wHJ(p#QNRPzFU-Pfz|6?_AKAmKAP+Y(Sih*qoqEkS>$|X|j`X39 zbxNzh^csDwDNH}Fdr{`l;r2%__jSfRF~@sR!0b=vOpR4cOmX9+AR`g{I66VC=N zjwMl#o|e=J%33C5os`e~te32IXWsklDz1ki;S3B#6DwHi7<++8{%u(TQ5s?bj fm7nurF6SnWm`Ib<1~oBeW(F2M25_32%Af)O> u)K~xLGY1w1u8-$Ev1QdH`O3C<4=&AwPv>F2+{_hnLr#pDnSq55Bm@9fWrf%P literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3dc80ac90d3b8b2d550d51b7a7db1f6548c2658f b/fuzz/corpora/client/3dc80ac90d3b8b2d550d51b7a7db1f6548c2658f new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/3dd7d82ef3436c4c45096641909ac1ec0f81cc73 b/fuzz/corpora/client/3dd7d82ef3436c4c45096641909ac1ec0f81cc73 new file mode 100644 index 0000000000000000000000000000000000000000..4bf5aa44af939bbece0d8d6c5fb6a8df6749c7fa GIT binary patch literal 11143 zcmeIw&r4KM6bJBg?|E-*a>gHwyb*N9bdUxmI0Htci-@oy`neEB3Ifes`JC+@yizM2m%?(PRxg0Dz;!dOCU^yZpRm*Z2sVpOV zl<|%h@kVcMzo_hAnZ))J5_?A5_MwgL!polcQ1Q~Q^*4jF{jZj{&aKQOr#hBTIL|vX z&vL0x@7wNYN6*T7!=n!!(aBi$ZeermVej;VRQ>9_b#Lv$wTp$}Q%gUG7rU-3?0m`J z8IMoLb4Q~itxnC?>l4S${OErAZtiXSn6nw~HS;SUTb+@by24D%MbTPhyR_(N>lUUWZM%w*J&_s`M1 sL6mj7q1pZHsY(+wDJ9JDst*7F000000000000000000000B{if1GpJSZ~y=R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3e20c1e2b54bf37e4ab0b0cbaeb172fdb368d4f9 b/fuzz/corpora/client/3e20c1e2b54bf37e4ab0b0cbaeb172fdb368d4f9 new file mode 100644 index 0000000000000000000000000000000000000000..c440e0bb2a087583ca122a6a96873a94ef247884 GIT binary patch literal 6599 zcmeHM3piA1AAirBnPJ8t4MSm!OCb%fLA#W&vb0fJiLk_&b;&J8nXSmUB(YLSA8OlW zD-ltyF}Y;3)uwdW&vsFs673c$pIpA?d(N1#i0|9Jr+xOj?EiV@ne(3KJ?A~=o!{^O z|NVbMLlIz(1HcSL>MMs-!=Cz9(^n^yZJgggO@Cr8-C9NVm0QsW#zP7KS)dJo5CI4P z$^g(%1oycN!1)2355RdrKF%HTk;bDa4#D9_VDz-3N70;I3X~<179~3*56L13fdHVL zu?!>;QCB>XinDPwra}d5AWb2=gokpNE?i$O$5<0;U?<5Gm6c&^PGlH|%Ww(v@Y6O`$2vgayr@DfCd5HU0pavRLBbJ1@hXd71dHCOA{==klX|D||&d!B26ajcSAi^BjjRzn}gvmH2vZv?kN11!>3&k;Pq+I7O zG^yKrLLdR5;W!ArH|*~kpL8s4<;#tPt}D!TMvdLE0mbz7mRfx;x5NgwmJfU8>t2{| zR;Jf$t-rYXGqnfay^TX{WnBt7p9()5-oEtSn@f>LcAfB3e0>PndeTS{`vDLdiqOC$ z)QcA+k`|$;m|kdZM4CY%?`oTHSiaQy__g4zyEVJ=;yd+)7V+$6b@L9;VDL7*P~@Hr zKso?&8z46zA8CVpWQ%wqp_r8bl891^k{zyE;*s}-dAhRfd*!R-QQwYtVX~O*CM;vK z4=}cyLNk_$csS#m7mUu3RD?oNQkjMA8z5D@n>d6hE!tKTkwQNL_-=!suJfF)vIRzT z*#oJLx3V`?71Cut9=%ssNI!hH)&qHRJNpD#Ww`l5K7D=H_5_DJwE1d->aha{n5)_% zwHl|r?nEzH;gW3K0chg1;mp;y}hr z5Q5+|!Hc72-fJzEG{^9ApX)j&eHlUIX1TTNbHOWt(yq@gNZ}aU={&_?&4m6hxPd$$ z#lPePo*lS+M9I5bgY~Jecl7s)G!zAAC;*hAK*bmT=28{=(2D!2e{0c9V*~(@2LQNn#&$9QCeh^G!B$;eO|-4ZRjg)*hZ?aXL!ykLIPB<14%^p| z9T@^wW9f{6w}*DnmWX#%X8^bqniHiBhzNlog+pk}KrS~T%EAc8M-Wge^Hbuyxrj~l zc0qXD$cr=d|mw$iWk(Nhs;7P0StWWcN$mof3jVSK?PAv2u&ZTJrECBYGDw8JX|4mWjQj5Ryep7+^NWZ|>pwY-D-xn&!EmwcpJpViO5JAet5n*i{ZcV$EF6ANjbk4eE1!LC!BX6jFJ+7TW ztgHh~S(R(gt$rdyTwQ5?`nma87bl@neuaa#lyhaONv`Us+nma8T6G z!k(h2D-U-uE*9@1YJ?oPOnp&HZ2VCsJIN$@%&m*2i~_*8+kMZs^4T&|>vF^64PTZX zBn>K`wq6(i!ME(Y^m-*iCpO7?`0>l=l)4jje~lREe4rb- zTr7K=Lt&18U~PUzjfRa}cCQTBw@CAW+s~Q0`j1OZI7-+`MQ*POz4R*vH_0zsx3Qh< zUJFV2wk#Fexr)CwJhS5w@)51c${cG&_=r4!e1t42W77gR zZT$Y@pEN)E|C`Ov1X(5R#yOuIMJ%5k0L)0%Shkp~AroZX8$rg%>i^!zT0WVqb-$6U zsJNNZML`xGfJ{uH0VKM5)|lvk)Mx8}CN)4Jq*cFfy#1*ce?Psr{3z5Z{n*A{)!dT%gjvP?< z`eqqbA+4}?-KVS!%z63{hje{TO1;oJVC4cDNN?MN$ZYl?#F0P;gcDZz21p%weJjr4 z>V&IBLm{XU8UN@|DJQTYqxQ$->$nx^oV-gsrR8!b^lh%*S;-M2u|=}9CT9GLgCaQq z6f%UN943Si{;FdsDk~x6L_&@!!x{1zju2w%_qWf)?luw1Q->0>Z?ZindKxnnowx=I z)|8Pb#C-Ie@;3&G=*a*C1qcvgrkTWXH5+$aA?CP>w{$#aa$F%52cd*85Ze<;Ot4Z> tQ*w$SKES@Qk1~{{LnsoJk}25PX|D}2n{Ye|xj_L(j~KgB5ui7+})*12+V(|W#HCHI?l8l3SHFer6yH<+-pBr|=%Ji}0i1KJD> zybQ_=4F4G!7#SGE85qQvnVI%-GcfIBVA{sOwArAEX}v)cli&hoCPo7$PKIL!P{7H? zuGQvo&X$GIz}1l3fRl|ml*K@d$-ux+*gz1>5$1xaH83z#G?0e~N+1N$fSfoliU=AP z$r@oYtWhv90Aqv3*#-how=*%av1&K6Feo!OwlT0UI$yMysZ_9nv*E<+h4~AYm29h+ z(z-b1X6IvpA4}@e*!j72^HvHAtvtrG_N7MbrauQSvlhk*JIxV!{N~B*Jwi+}s~OjG z`LNriN2}k; zzh--6_TbQ|oD&O=N(g8!Zd`8AxWqt~jX6}7k420{1SLdZpcEvn%#vr2(|}dMLeC}c zR0^&p2AHJ=20S2Zg;`h)n3)(1KnVaU#oX9~q-wx{7&9}&HXa6sP0S3k3c50x7d{`d zb$>G<_ScI|=YIz|O<|pG%@-DTtM2YMdlwEiW`-_<#&#wr#@Q!TCs|}MT)O90-mEVB zyPtXU3WJx~&g=LsrZoNgoxfn7z{XQAGUW_TM)}RPS6&{mc5MNty+P5#lWBZ8=9?Q& z?`Lu>ZBP4Oyw7lZUEqsQO?GR2L)o%2&FHk_pSdPgsm+|TBeSGf!Jx$8KL+>*6#)Ri CgBUCT literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3e35b3f34193758bb9d679e282e04306e14e8dc5 b/fuzz/corpora/client/3e35b3f34193758bb9d679e282e04306e14e8dc5 new file mode 100644 index 0000000000000000000000000000000000000000..26a807d8f089cf1bf5b1355e1acb6ae709dcbccf GIT binary patch literal 955 zcmWe*Hej%1Vqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHUY2I2n!^KmjKk zyH=aWIa?M+16M6x%%41AxUuwi|`g8CyYhkRg(;ShtCKUDNnn`7SHOl;@U|_()1k*?v-~m}H$HHpB%*bc}ig5!211_cu2F#5;43wEnRUpR9%&?7zfngIf zgRFwCOy-5phiu*7Oo;vUV$=EGK~7Uxr(5%t#oemA`_0~kgN>P?%b>BH$%%3HN!3Ya zSqzu%xs^Ao%l__X-n>HVWw!G=ev>Ip|9Z+VRhmdT-90bL7ID+Y97a QRyC!~H~eGU`yUGc05Dw~AOHXW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3e3f779968d2b7f011e6ab74f0e0058fc1ccf158 b/fuzz/corpora/client/3e3f779968d2b7f011e6ab74f0e0058fc1ccf158 new file mode 100644 index 0000000000000000000000000000000000000000..51fc9a8d96a7b3989d10c3ba8ac57f2b9743f2d4 GIT binary patch literal 880 zcmb`FT}YEr7{{OU;j5c&IyR;d+NKbtC}(dOhN+lHt`rShe)YB5s|{@qeJ2PR(;&RH z4^c_2G)xLI6t5D!GPQI;6cU7zWQl@g7ZamSyvw9^(@p=o=bQsS{=erK34ucxAe9i` z(EQtyzNTTVxz*HUwuU_Ydfsz}h9MwOwXcWSU?K@X0|@{e0Ro5yFcO06!vWUf+kV zQgX3umnDmt?N$!e`WUNAmg-zmiAi=ks+@AYsYq@#<;xBh7p?J4`=)%8z8PlOFP2AZ zEC*Q{OJgiB?qH~($Ju{k-cZe782P(KAHzAfa?UxFY-4Ox2w)mmln|PDJ#Q`pBOxTI znL<3d095M{3m(OEZpJ+u*<)L@t0qLxhB)Ruz24}jNaYgtE`OWe|YlI-`z3PTDLYbdG4^d-jh+5bAR*wyNa0_ZMu8*V%gaTea!=` zxu3-f#1^ZiMrs)B$YjL5a>=`7_?+dw{VlI_YKwW4>jdiZvKqr+2g@Yx6{G_o01$X! zz1M$qM+5|mC~mvaH6P@=)M}Dkb+RnEev2rQ8x=81##5G8lx0RJSUnA41R=As+JGO5 zh!a>PPJ`E1#gW7I?t$(zwzS96}qrG2}M2G9eppo!(Kj#Pl z__V=D2pot2U<6`KO#R$&GWV*^vU)7NIyu$8R{6uJ>PqC@>WZ7!7LMd#0%1(RC=nwH Rzp~vZD2AZyTBy$YhzfoqxWWt{KYlC(^FeO^337YGM(+M;3mP8C-kWqUZe481o1l|y zbLa2L`h98^1A|(wfm;46x#S;QWy==%a8z;12g~l~V$9sOs0$J(JWLFX3=ng+Ld}^5 zH)sBy-)!L)v$E!%3bMYGm{9zvt#pyCM25wCIlX5=2ZY~jS+|l+P+4VqjLntV&HLA! zzFRxt$lih(E`4(pXE8D`l!N^2ZuDz$s$ZxNMigl#d^!&cl+9crH{`^anHgC47#JAD F*a4~Ifc*df literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3e5994042812fc8e70c3f207be024698a0bfdb66 b/fuzz/corpora/client/3e5994042812fc8e70c3f207be024698a0bfdb66 new file mode 100644 index 0000000000000000000000000000000000000000..fb18abfa65e03e1634a77b7f96b85e9134c6e874 GIT binary patch literal 880 zcmchVT}YEr7{{OU;j5c&IyR;d+NKbtBxi3KhN*~Ht`rS>^Q*7brVZ_N=sQ8km(fWg3Ak5vFO2d-XN=;U+d1bP3b!y46#|%A79j-3-^iXx#YhNB zXrK^FE&|ni#oR|xZ5uJqhxSPG4$YY8T@y!qXIAUhDbmQo-i5~#bGJvEopf_P=k)aF zlVVq1`0JLubjPl>!H-Wrt#`BzG*zz*jh{avu6CvtXFk~Y@V<1aQlH|PzEpg!x4WT_ zHT1A(fk@GMYNn?C)-*;uOP75MrZ4H9JKwX5CN`N@y^f=@k5!ubTUi?MEFl8`0f4{* z`~99{+ah46h=S&u?Xx?47uhW?xmr5I%b)9nr z0DRJ9CIk+K0Wbp57N&h+I+b3ou~PQat!a1NS zlYgeHv`<=`A?z!J_6p@!ePAOgi0Is_h z_Q*lgNYANnzv$BMX(^#_*<{0DzSxh?QD5*u2PC^Y|efBv$NGRbJG84Vs_@$ f*O;ReMr?ozNjLJo^lshT9YbS4xa1oPr`U z5c&d}iY8H;f*_otwub%zYiMXNZmGzfqu+LZJcsifO@Jmj(S+coV$-;Y9*mXukM+ds zT6Lo`wRO`drQ_#D{PEqrM>IsFQiQ0(h!H@f3C>p>#52T~h%X|~=aFa46Tum{jlR%D zRcz71OyN^yOqL1Bm;*LNq$S0}6X}=-!{z{|9Y7Y)p=V>G2%6IF^Z|Mn$m$^gIp_$b zbcCP-0k7IS@PlRit20Jl4rFx>Nc#0YrSHP zYqRxqtmWRk4F^^uJ#S_C2sp%pRS)8Y+^l!S-OJU}WvjiqqWpNV40^4L&TJ4;y67|2LZ8B)N!wi+lq=CYkF1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3f1106688b0f5981833f7966d69e11309aa114f5 b/fuzz/corpora/client/3f1106688b0f5981833f7966d69e11309aa114f5 new file mode 100644 index 0000000000000000000000000000000000000000..0f80ee0e3907a7f1bcdf13c02d970451c13d1df4 GIT binary patch literal 544 zcmb7>y-EW?6ot>7*=%<61FowZiL6<%O2l{<5fq{XQ4A=OW)W>Q{wt zWB^A>`bdI0pf>28>-5HTI=hjASeWQAFNCj{dc1H|d0ofrmB1Zz{rg{I_=o~J`N=N?V##1(T_chx(&uovo*He4a+8^Fs U&nHhW`Jg#hwi>O{OM6t}8${w>mjD0& literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3f39e78db6ac6c33ab6fb4275f8b208dd32388bc b/fuzz/corpora/client/3f39e78db6ac6c33ab6fb4275f8b208dd32388bc new file mode 100644 index 0000000000000000000000000000000000000000..c884e63c2e1fc7cddfb4e497501a0cb0b03caba6 GIT binary patch literal 743 zcmc&x%Sr=55UlQ=S+hwdAS;tx)(5$Hsy%qf2M9Tdmw*Q$;KA>3atL_v8x;H!zsiFL zWj8D)5`0`t!N7D)G1b)_jhHBKX2Kr;>;VB|;9VfV5Qrvv+k@Uf=g?~|^ok34c`_Ah zj<@#5kmaY#>GCy*cn_XeJ?5Fs91A6@g8NO;@3wlfI^ofZ9DR~29FxuA;V^8xeJTH9 z)BVOKJ+AjJ9+n=!bgwC4!~Y*4f(B|NpD%gAGP7AZaM2xXZKED$Id&t)yX}I0EhwC) ciEurzuLJKcX^UtA7l2NEp>Jql0Q_nPALc=PyZ`_I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3f51c17797a205d7432f33d302c5c0abc69064f8 b/fuzz/corpora/client/3f51c17797a205d7432f33d302c5c0abc69064f8 new file mode 100644 index 0000000000000000000000000000000000000000..b711b9913ed8ba92eb7bcd6a856898f75d1f04a7 GIT binary patch literal 48 ncmWe*Hek?VVqj2XW`F<#6u`j1@aI1R1A~D90|O(2I5PtPdHV&m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3f87c98730955a346b13cedbd599dd2fc965e068 b/fuzz/corpora/client/3f87c98730955a346b13cedbd599dd2fc965e068 new file mode 100644 index 0000000000000000000000000000000000000000..b3329cde5a204daafb8f73e6154e3b6a80ca10d3 GIT binary patch literal 1153 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>~|(tI_$o&Tq9RZ0uRDGC5G}#nE4Ojyq)5rCLiz9J;yg z+N$)9k4(&r42+8d4Ezja*_cCR`B=nQM7m3_t~t%Ik54{z`>(KlIm=6LwXO#TrmQlH zgn?KCb_F~j{lYA)2F#3%|B*e+3i5CxgY}Dw+^N@Wv%U*U>PR2zSf{l5ORv$_n!@z+ zx))^*9d3X0a$jf66O+{*6A#%>U8n6nPqiZ3f0n?KqQB?AGx2QT;#d;(=xIrvpsYzk z)=Bxy&&l(uvft~e-Qju|96n=J(ZmXtI{E%oUwLk!HFH$>TSTNnb>(+|n9I3|BPP-) zwLwjcnUR5oj{%(K7&=)P7+S$;vR;?5`^Ca16T9#Ihk~E_;(Jp58}FI0Vjo%}jEkK7 z2%>0Nz31ly)<1_2XQYC zem}qQk)TS@e~X_rvUmTTDw@~6B1z=O494(;V$95-5(kt$8BCeE0V?E3=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3f9453768bffb8985d6da01cb729b85d2f2268b0 b/fuzz/corpora/client/3f9453768bffb8985d6da01cb729b85d2f2268b0 new file mode 100644 index 0000000000000000000000000000000000000000..b9f7c8c0da84563ddb83b570a13caabbb317238b GIT binary patch literal 558 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<}TG&Coc>GrQ%f$e9Ck7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMn;Be*T{^hO(qjwmTl=; z^Tp}SyOyGiA59i=>z{Y=EP3DYt>E^02?I_x=1^H-7A6A*18xwLpM`~)iFE<8vD_eI z8yPx&Hk^|ScRh5s|61+iHa&MiF*(E8)Ap{26ny>V**WP~Ns$F=bIKXKY&O`>vCxUH zWMXFg_jj?B0TFhvBH3Yb>dHsyeT@rbQX*P*+Zb7|jW~JMOXn;jd}6Tm`CoezvRECyh}_JT-2GWn)F|_SLLK`K#&!m zFUveO`-R@;3X4=epI1$q&niCe%FBaQYs3q8wG@_ApEp{+YVMR9>-+c^7#KvD`LO^1 DSzWf} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3fb855d707f9826a94b2fc122c4b5a9f06926042 b/fuzz/corpora/client/3fb855d707f9826a94b2fc122c4b5a9f06926042 new file mode 100644 index 0000000000000000000000000000000000000000..8fee71c80c755feeb95a01e2c6b14d57e9f593b0 GIT binary patch literal 2251 zcmai0c{J1u8~!b0$rvTFT#WT1l%KJ$Uo#R{B1%G*F^Uw%*4S%iETJgNPz__bku}RF zMky`UEFn=L%cX3IQA9QObWeYDJKs6q^WXc&`<&-}pYuNF6@y{^HV6RhVc7W{@B<5N zH_H`Qx6TW{z8oRZJv_$x=49U@ASW6(<>@Ew*s05u@I@OcNhVblErz0J#ps)LV***1 zn1CMuY~z9e_zw*l;FSh=B>|KRLPH%xXz+u47y=;(6hbh(+td=Q64o&wh~@zhVXf^5 zh8K23!GgTOAw&-n5y6UMwDb@|Eki9sZ3JiFB96iRTp~hRf{4IBEh4aY2oa&d1cV0Z z^75%ASoIp9K!gUVLNpMBBZnG8=EFBnTAnuC!SCod_JA^Z{d7pvDI9-B-fK6IztJdU zZnsB?I_dngHk;8eDaCLn^MdYq^*I<$X-XIRfc#3?+R6V)f%srF}3?yV8G zR%36YU{9~=Mo!IJ_PIBq_Y?gFR!aA$kj~k;$&>2sOrnUjocY#~W#q84HnD{hAm6u3 z*E&)C@h2BqC52WsOC4*e`n^F8X?tQy8OhPa*Da$fU8<+0vn%H@dC=@kOyvaO>Y>dk zs+jsCh6nDF-02ioag)y?XLD4fyZW@tGURWI2e+ZTOKq2BL?h*Ekrf$Bfj-rpt{i%9{xBO{Qmv8> z*lSh6is1lO?}fHv-JgCm97(@I+=De4bj0ZNQ=cTwXR0654moc1KrvX-L$ZRqt)r(r zXgN>r>vW?^-pQKyo{Qg}4|^Y)d{;cf=x}4UkGg|ZWG(h-%b5N5&AZz9| zihnh4yHrKb-IF`}D4j9)GY>Ld$1$5uV-(y6SDmktS=ye7Q-y0V4dem7FX9M`?DGWE zyHp}0Q)SrhOD6oLH8dzVHk`Y8P5D?dAJ6(kX5s;Ne4MiRXX34NBg`VAdF)=K22JZ# zK$iInyr>*OdzZx5d3Tz*`-sqpSNX?KR(G7)+3qfjn`ztxQHm<5sB3q>XNZ{E`1RPm zXUxP(+aw13SF<)>bQ2367ETYEs%nt9X)L39H=z6>T2j&#IiY6d10?_hYVH z%0r8P(GN=57;x61Sm5vEW$-;Oc5rFEwi@fu9A}el2&eDjM@@y(r^gvN*6kK6U4j(f z+~~sEgP|JS@3TAsx@#^WJh z-t3{V#K9@o;YSh4K5W8*i-WL!Z1o>UqNiVD*KNIx)J2c}6?KSVYoQyZe81lz?0~@u zzS_(CZfRdGgHZj_%SVESqu|6BQ&rc zp@G;R;e!4}<^K;C{eOpxzRUk=p|XDF1$h9NdKo~dNf4C^tkGggD# z3FwV?GEkAQl#h3Nc^ws2&}%~f&$f)I-_?qsr!1?u<2Hv+xe*m^7ruGS^n3+##1h_v?xpDM(;a%(Nw?~i3shFCqjIdkjy?c`#Cu%KJ^@JEX_y#*P^z|fBN&BO$2XDZ$c+yEn)1}`y^-d!0=bburbL<4k6SFCl zsp6zpoaJ}HGAqXm^eW%#A{AYBRz?w#_XKKabxK>re*V&fwH?!2Y`<3xp2KUtGIoTb zal=DvRb@LRSiyHC(R?Kx?*;tHdC-^1p7p8479CWNs*Wb{YVbGaTs)ndYPS>jew9jp z{LNU(Ca^NZxc5JUFkkH|A#rFgQ^_qE_v+pF|g=r;E`xjZDM}X{h zX9Fw=a=?9iEa=-%25bI z{C70QB*kau&xI76rt>B|uwH1d0}HL9vJ+P!K}OBAXDDR0Ro(h)|@8 z_yDafR7DU3WfdZeRH{}Kmpr=4%3zE$K{x6LoMtinWDBboXv>}=WrSB!2yB6 z+-Qaim&b7820*&1ys0@fXPL2}1vH1As`94qLUR^NJbdG2xHB)4@TK(qBLsjZWB{13 z3zv`p42{~3upameou6Mhv3~c8qYZ-&XGtDgbs8*6a~7oRJG`UuwASXVzzJ?Oj9bZ5>@^SEEtNS)%UI+*x|_cwp)v4n+V`-~v}cO(N>1seq^9m3PP7 zD7h#rP|)I3kFFDh9*y}ixlFW~n!0#3NZT><1PXRN6;FUDf(WG_n1DTS0$9=;8nSEF&v#>Lof$Yts*v?w&*JP@NJ9~TR{$c+fn9h2l0}$|XCk|Mzj~0h`>s$NBPOc# z0YbC-J;wwR5E@T_&}aSL?uki9;#WT3K|oTcI5Mc5vCdkj|M}*)khY2uuLAvZ z^DW8^`fLps*L4hS9 z zTD*&~-5gr5%*4YPpS*BvhNL1CijvAKY+nzl;@!j{L|M_cqKFLoKEU@F1$Uq2e3>IK zq08?}bGnhUvAT#Z|H0Uuq9Xdi+jXAEqnkO$$Z8`k=L+cSy0;}d-lEOd7}AUz+{gT= zJxZr(8cmCnI!cPO2WCxz{8hAA88>&|2MaU!SEuk-eC5;$6e0@1B!5Xn#F31bAOyi_ zgJ*{=eAZaK(-O)(i{8bajO-TO-fvlhs}CqUltm12vuV~}mn`%;>2NT% zFmJ5;aa-F*aa`9+w_XKA`*knwq}MVX!kq-%5qm~RSJ0-PWjk+;2ld+@(Wl_6Y{4*GX5nC4@4nud$IN__6g$^^; z0yn%YbtZvHRa+^^Q_}<{p9CtabZR~E-)KwZ5kv{o(&*_%HG$UUA5-Ssz-9fRaKTJ zpIV-FbrzZwR66>|xKyQ?<*ARk&#C&lP2Xw6WFYvbvMa4mbkhUBbfKYOLZ2z4K%|HO zXuOuwUSiuBuT-%365?h)=60`-awb}1^DFXhYXh^&lBb_5?JkbKbblw~e92CtR_MNq z)Ms_XrXS>TlFd@a-MeY3C;*JxJ$L-7o-8%DtuQ{?_<7lW(va#&+qDVre#5>^Z%`q0 zVUuh}9zKsrtv^=(&&a{9d-`!32D)sSG8B(fSwH6WgnL%T$Fa9M7Uc#6)fHscYS}5| z^vQuQ7HQve|0zq~@L`!5M+IA{*!@M3w_)YbM#ZITH*}CaDkInB?vFh9X!e$6!K^LI zEb3y$mZefRPx;q|XLdY7KB6P7%&}I4k0=7jN64ZwHZ5?|#&19VL-S+!r!_yOe`fPD zNmfa_amIIhG0S&505g&`jx8o@=pv#!A zrzOtm{?0G~o$8>fO**JkY*T3sGSw56GEryoJ7%>dP@Yxt7KwSe#;J`hZOQ%y18qbO z@E^p$-%*5rRm^)P6!TxC2xEn}Bx+FUtLx=drSzh{wI8!GG3V($9Mb(MDeYX_pp7eN zB)x7ABD2|p5Jv)?5Kda<>mhaY<&Aj9%ag7a4TYdqWc;JUWt^bK%(@>^uHu$waPlwk zRF)|mGqk&WYb8gF#8%1D+L-Y#4vOReP{U~_I6;W1 z-`_tI`?bkXojQ~>c+&Qq=x!`fbn+T3SW`x#5cAP%%4-Z1F^~fY3J@T~Of!k&YBAxs zLdLOKS6G9*vQ>KZ9&5W*?W`j#jT4Cc@uPU{+_vPS-(%s z`Y)oEYp9n0N{)cRsOC&VGUqp2xW%ljxu=4xFNG%*KWZyoWGgYl^1Yniv!DaQZ?>#k z$tI|*GCjuT%IxO-Yfj&-op5At!3>waIf}Djo_4qRwOHz_fApCH3j^23^PbqUYLa|q fTf7ICX2PfQuprpX6>>vPjG38%g^z)OL5v*$+`MqY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3ff4a7536ebcd75032798768c6f1e5067ac67182 b/fuzz/corpora/client/3ff4a7536ebcd75032798768c6f1e5067ac67182 new file mode 100644 index 0000000000000000000000000000000000000000..9efa0115f45e53642e39c8c43619ee8c2272638b GIT binary patch literal 53 ecmWe*HefJdVqnl=W;P%I7#K_$7+4rs85jV<3kK`} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/3ff8cb9dc50203bd44124c84882b8d53b1b67ab0 b/fuzz/corpora/client/3ff8cb9dc50203bd44124c84882b8d53b1b67ab0 new file mode 100644 index 0000000000000000000000000000000000000000..7bab582884e1a5de8f6ebed2387606a8e99912c7 GIT binary patch literal 934 zcmd5(Jxc>Y6r6o;Z{d=x5KcB}&JWUA%@rw9q!h#=qzPCEf{4E(n<8N0Z&2`;_@`8` zP%cL>C#RxK9C*df4sYJP7nB$YFjVCa0LFmF0C+PnKo1D2a@~epLM|ZZT*w(0=J8&| zP*S|EJ9?KMEl-xu-k2l-kBc@_R~lwQ78$!vXO^ATT2B^-+^@*~2U+2OTow0vzV`R& z`5T+oH#YHZbAFRR<1H9(Bu3Qyw*V=Z_%P*!xzky`V}spo9HU%jKCpd;d9$EX3No8q ktuk#K%sxT?LDHa#7Z1!&8}t1M)%l#TDpPOr6~6_%18-)e`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4020295b5d1219f6327760c01ceb352dd86d9675 b/fuzz/corpora/client/4020295b5d1219f6327760c01ceb352dd86d9675 new file mode 100644 index 0000000000000000000000000000000000000000..2101a4b1f657bb1c03e503fd46cc8d16a263ee19 GIT binary patch literal 2929 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDAI%g4IdNV?69W??V}mK~FxyNQ8EKPa->b@|?p?)y0- zs=fD`uA8pfHf2G>fi3c76Vu%cF9^KYt|V8WJhAA+%iKz<*6$7cN2ZFE9`!2pIgxC? z_*3#6E&o~nplYM;yAj?%JyK zj*m>tj0}v60}T8OWZ9TQW%*ddSVX!@udX@Gv5!wab^EWdeL2fZZ?&!m2d1nti-dt# z19k;GApOEDtOm@CjQ^26%nI^wBZKveirlH!Y_q-#OX^4;>R6|=`b)3j*P6og^ST#h z4jnF*eYvkQ=84H_kBNuur>@g>pQl=p?LSLkNzvc)-~jT!p8tka}1p<3=FN{G+D39*!^PRlZoB;V1f5jUwlu>f8#w9R_sGdgmICRAAwZe z|G%u>^K%00qcggf6n45U`zX>IW~=o6b6H*1iA_JF7potUGTo^0(m_*aN36_)xR(dN zpWpaMP$lTU#m^eqyZ=rV&1+wgB=TbhWBDq55l{p$iZL^?U%;vrlE@804Hz~tGsr6F z%4A;ne8|@QP2Q*fcmDrp_{Si|Yyi!G%nS@-pj^cc0}Nu!%#3%r862V6kGkL{1LHLY z#>)mxjOPuS7|VX5xD-9Nm4Ndq)EgL*DNURVTem6gjAB`;h&v&1vobI@F)}jPoorq& z#I#Lp>M8cx35?&JpPkxWDZk*4uEf6Rl%%U4e2)sU=#_7dn7gJTz*48^xMo*{oqpvd zR^Q)iJDN7B6)5L#-RE&d{nMYrzPt9v*RHmTul>RA5fRcN9Py`ha`m!pmK)w#ZUL1S zjF14kyxBR}_rLz)tsZgg0o%HaXG{MM7udGwgu2g9{STS1*IzjLR=FpAet;M=12lzg zoz2Vuid7L1MQ;SL5LCD#5`!W;A~8VY4N`tWOH^DL)CiG5+aHNLmMxY(9kPSS3`%m& z?MCEWd4f3?PfJEKFPord40aMTM#t(y>y*AolbA7<$x3xMzI${Wf6Ya$ z^bc<;k=E4c7}iYg5MWTVy$59&PXRDNGJsBi0K@`V8KaGnKA<)Bw|CsdEX@QAKDF!gal1DvJ}$w@0EuV6u=aQZCy?j1id3BSd3q{aIy4 zspi%cdm?TLHH~7NQ`M9PRVkA+ucyYVHA*E~vs9>gF(KAu-;H}P0}<^z9hIvw9n;t1 zI))1(&HWoAbJGTlNsM#qzYEINFftdULd}CsxJd}NT`HK$qC^NwY2lE>P60Rj9Yy!z zx|S0j4{w!c+=g+7f6*}-IJVHd#EC%_w$0w3n7%UB?%^vlg-0hpA9nN>N5AeU&T(&E z9Qye1(^7ZmU|U0Q_{oXAj)k7Aio9FPAKq6zuQO-*CQnzm?%Zza$Cf^f7nmGx=2mVQ z=*&jun?DnnwS39(UHwr|KCy!S&^Vc^0j#qObYeF1%@YE^0AO{&d9&}px(L`P;$ObY zosyz9Xquw_5mBNwues63Qs?GF&x{ITMIMHXki^hySN(9pynxj-9p0Q9HMhs~AL?+8 zysQjFcHN!)uWM_sH$iZu_gjkHqrMohGJRo5*9idV&n#BPU{@3XGKiPZ_|$SF|3VDf j4rbOqNOK3Pe|inqYhi_ueR-Tg1PYYcC`tMS18?t9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/404e008f342715851fdd16c5930333dd2da4974d b/fuzz/corpora/client/404e008f342715851fdd16c5930333dd2da4974d new file mode 100644 index 0000000000000000000000000000000000000000..8ccfc60bdc3a7ea25edd3fd8b3d68e4797dc4718 GIT binary patch literal 449 zcmWe*W@fNtVqh?3WQSimb1>TYIib|KJ!ZnnlFan~|4l*}4(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zFpv}HH8e9cG6Ew5 zgD5Ch9VB945Czx61JaY6`$EAv-yqUJn2jA|svQ%f0S6NU69W^|9}Q+FMhsUlG0kEy zmQ#{qVB7I8AiVYR&kr{46`E(}8E*+-JNzP``0Lqgp*QSr1piS`tL2<@PiIHpuEYEu zH6GI*OZ|sBQTCKdN8 Avj6}9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/407283a515b063772d6365bb03272b112b63a783 b/fuzz/corpora/client/407283a515b063772d6365bb03272b112b63a783 new file mode 100644 index 0000000000000000000000000000000000000000..e91cdc9f55c23fb32bc98371cf9278b5f346a1ae GIT binary patch literal 687 zcmWe*W@1{w#J~{F%yc`~NC$b3UX&1 z{%2RL3OmBNW8>ZX%t2{S?39*%`L+4&-^RVa!xrp2z{SA8|DTb8k%57mfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys^@nw(Oc zXl!9(AScdiXl7t(WNc_?W@&63CC+OE>55PKmp)UZ^6-DSOSios5Z`aldr>(sg<^RDOx+FXh|!UsKYP ze|?qqx9;bBbxpJLM1(d~=U8~D7N1p!-&`))XzzU}PAirn4dfyFui|dkF0j|$+;VPq z#=ETr=N{kJgd_k4hGg!JRgv-Y&mMSs?mkLx;9$^UU}0cl00TA%#lXPKpjYF=R{8+|9>4<^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/40e9094bdc66b8016ec4682108a50f35e14f10ab b/fuzz/corpora/client/40e9094bdc66b8016ec4682108a50f35e14f10ab new file mode 100644 index 0000000000000000000000000000000000000000..4606fd8541eaf730b36ec97f2ba5d65b2e47a68f GIT binary patch literal 860 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vc&fRaiDpOO>Hp(fLYTxAKCqktPISJy$lA8olK3544T>}mKi-s`tSSs!rI7g*X4UZy6@+V zs8-r*x^B8^+mr{+ieIZ*7y(O-6sJ7m_ST1!V9 zy1DM!s`QSJOw5c7jEe&d{0wB-m_udxSj1RFO0TZzKFzU@Pd;_~udsbN%S&&yt_KIE ztTKy)fmnk`cj?tN7z%hm`h{6o4VW1j|08>t73ASY2J06Uxl^y%W_=fy)R8{au}*3A zmtLcsI^6!~<-X3CCnl>sCLXe%x=!1Do@zz5|15zeMSstKXX4qw#jzyn z(bJMTL0OZ8tdsJYpY@W}?#z3iUB&edNo_ zFqd-^M@*zqYJ-{>Ga~~F9|JheF?6ypFtmcxWW6q9_lt#3CU)QZ4+TH<#rLHAH{LU0 z#Xht|7#BJD5k%3lde6@ZtdGv2_+BJa>>6wJ3(Ges>L$Ejb8MflMGs0z)taX+sbZ zfiY1^5GDe`ghH5Lkc-(0a^Y(=2nNPr6rd01H&V~2|4kXF;1w(jyb9)3U>JvkfID3Y zDBuwm7O#bIWzn^O25QJFD+X{AIg|iFxPU`n1&mOqqVmf1JJ=lF4vv5n7#kTKE8vs- z1nH!Wf=FPftwOf}HVkV9U;-Nuq^&}?12zoCqWM3E5&U@=;qm3)591(2SONiIAx0>K zEXbmh*Y&EKA!VBXwj%daS7tn~Ds0_le1+LiVODUcCa3eFQEFMV2mOxvM2oRul1Uj) z^dd3cF@HWst-G9<(&L@HQN(tseZ#J@^gSwBTs5l=Ir{Z-_qTH?Zd2sars77^gPVyH zJ@1`eTlE__YxTBvJ!}}RkKQ|jL0|~3^#eY@0FST?RIx-Xp(y44**^IWRU=Nz`z;*_ zr&1o}H%g0XV1iuiqBAd8W31n&nw%B%`)20*<_@odA7<_EsvnfqQtko zu2yK458lS$6~u@ICm?a6EkTr~0HSXq&Hsdx)C?e<8Cb$jWWx{j~9 zFl5`oQQ5YW+3RP+aHF>-549>Yr1j1YKTuSKcdX52Ru7nayzv9JgrNHNh;@#Jv7=cVukr1d-4RJtC} zLH&r9rU&X5@C78_1a3rl0?Ex)3XV0f0ZclR&Scu6;Mmd`)~*a|rUTO<2&`YmCo5oy zPem<7PcAn)frCb%n*kG90R7L-MSfgU1TkD*tRS7_$pE>q@$ytrdU9bk2;{-4&4u%rFu868|-`89jDuT>;Hdaz~dDg zii|`$;YPQs>zvu-JZ3B>Po&f1Vf-$jyyLeVZ}sbzzhAB(Y20u)qK>V39iCBcR_x=S zGJ0uBzL)T^-#G4q&wvL~QGsN2Hi>sNx?2xic1~^)&zYHZsW1zxt3Rk}q!$|6^)&9| z#mXc>_#6nwWYlX&sbADz9E^)p*2t{S|McLx73;jIdN-1uSdU)R-6Onx+bp1WN}aEZN*d8k?8Er$q~*r7cTEdC`_Zqz+UU zA;QAL=@=Zmyt|e_s(*i)bUQA3_f*JGme`;>d&CS6^_YG*Euti5iK}xtRzkK-lykO3 zBDvT{n-4wW7+2+&k&i3Ryld%|cTXYVhpyYqG3c+_q{H(TB}X^))rkv4 zD%>r5kW9qo*Z1j}t8^Abje(lZg?b* zubcE{ilsWOjei+E&6u=$94+Vawx}yfyd4^E)4OM@Yn+g9p1CfeRKe+>0!P7EH6MSx zi@)mLcxcX8NxrcoA888P*AO#0=UnkTOj9AoR_r)D>Q=tpPIy3Q)K>EIIsZsv;NgcM zHd!L(0|*g5y z(lT{VPC-4SfM@I!9*5+{;R#}+V%gyW&c9(tMFlVblR*bI008MUwg>i~O|b6Ec*G^) z(*94v<;h8u3YvxIXW{xUYI39U=DL+kLiM>yj{{WS-kCja*NEkT6u(!6l$?yfb8n_Y z;|HOVp9t>=E0_;EJ!*IHL}gcRvdFjZR5(|eN8WnUzgs7{*Jpg_{;tzHw^?G*?}H(> z0ndVciz%P{Ol&_!jrZ+4;h+Pxlw%yqlvF?2Q|}t!j=tUG%vF;!XtXliALcOn-ZntX zVJO6${EJf^;R<7NC9=jJoBZsIwbN7kHaXk8h^q9LL@*cHNuEfKA6r-?^)(Pq$w(#3 z=Cjv$%mR6^x%_9(2PPzSU+c=!<3r2lduN7aOiAH~GhcwL_L(#sKonrf7wBSOJaCj@ zXAS6pRzs;F7g#Lv%H}0dqd8mwIy+EkW$f`e=u@-9rR@30*z*MLzzvUO8IT~b7C0g(7X7KG+J6(+LxE{IDBpjkImuJc$_3IKUToyrGM3l=-)-^Q_USd8;F_(0N*T> zA9yW)<3@5;)O6R>&{`wO>*d*>6+Jn0wJfqTqf%A`uc+F@>{hKI&rd}`!TgU65A_&2 z_Gc<=2=#{tCu{Wy^6M|PJu7>)+ji1m3%B=CJD*)Tmc7f_xX(#$D%4(3^&8^n^J8P> QboiS*7fm99z?+o+1)!1n5dZ)H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4116416909edaace11c66929faf0e868c118f1b2 b/fuzz/corpora/client/4116416909edaace11c66929faf0e868c118f1b2 new file mode 100644 index 0000000000000000000000000000000000000000..317e890dba56472f08fcf86e4fc3281b1c111c6b GIT binary patch literal 2571 zcmchYc~p~E8piLpBrG9dWmOP@j)I7I^CdtKL<2HJii*;(DUpy+ij~a-5m|-=f#OmX z5tJn;sK5vcxFL#5kxgV11*(WvMnx160t01~%!$+)+cT&0$DHYV?mzE6_r3SI%k#T> z7^Yf}0(;Tg*mH>T9b);F^1-^EVd&w@;NO&onYQU#yQMCv{kxyZpXS%Sc4fL5UbKqb zcwlLKN#>q7{-c|{BX`V0jIzoGsWSA%^Z2r-PKVY`-KY%|P$p0PH1s;A)POBK|IocC zT~NV@Yj*C{VhMPfp)MUw!Sc2hOZC>J>ydpIr-gr|sEce|eq{HhgjnOfu6etb+vG$n z>!=wXSkAsLH<2`$WX93YjO{8tJQN;W-n2=cly|)Q3NmDV)+o%1Q<@(y2b{N>|4869 zkK6U6ALK7JcIf0%nH`ebX@eO{yci-M&W#1z=WLl%s!(feITJZ7qkZVFGLr>WB)5Dw zeZO0{_NRf<&odkSbL%6%t&U!I(5*bP?zqen!LHXtR;!2SKYyg7Ix5pLEN!_OG`lUj zDgJuKm${qzs8imLqltH$m>=dGVFaW;D;UG12nnE41bF601mC8%4i(Ltcb3)gO@z~2 z`go_tW2->Y*FTm-O_C;_W~Ba^$KJij`DcD{`c>*1xXkO?E=wu>Vb~GpF18NMiJ@!o zVUQSg2FqCI|4*{7JbH9^5CR=)bp(+&g*C zmxy*@Uy>bGxqo`2UtP{{JK?)3VA@3bL!@UCE}1^ zg@VZiHz(DAk%GhMn+5S4tNyR2Ub z)yb+Kk$__;oK2qvHI>j%*H&TY>Hb_CVl#7m0L?iZ z`a*4tR*hTe`SC zD}6lQyDf@WOYgI+`o6kWixbDm>^FG7S$+BuEVPCUx>Dj?Ed){6gsaaZb()`8oIGfm zLx>80$kSzASu^#vZ$$oHl->11u@O%v(7QWsPuC?&UhJOR8jp0F_+p}`-flsVuIc65 z`DvUfkM`jscmqJLKq+z&N)h8}!>gmYPakkrtvm4yznA$yx3RO%vCz}JFym-Rk@iS`$}KfsLDOGrs#;vw zo!%M6%-Jiv$9T-lvu4eY<<+1y*_&l%;A)!e|6?{Db)wZFX{FlXXA9+pXmdViw~xEW z*Z%zZ=L(+G<_5H5w|3HdZMeG(Mtuj34pC4H0m$z@a)kW3e2P-O1k9y?KPW1!ZaMF2 z-@+b>XArhFP{>!1XW;6;S{h4$y4?4S`ZL2uhLHGY?1#p4_l{@k&c$EmZr(3^)Q^ z=oF}?bQoD1WpnA;@C#+4t*Y)B9vZaNQ_L3!(M_Srj0X+Ygo%T;hXsjg-XX%^5V45n zA&#NVjQfKQ{CDG%B6qP6?trsqcFDpqGHHnf2lKH&fNMq(YtI-Qn>4<5VG;K!U+pFl zHA>VZZXS-Az!9}DvUz`LsRs(N6$Yy_k1GnX!&>B z-&~L%Pdr<{#eo=>t?+d&n0)+j)17Ua_7N=tU*4%gNfDHsWH8~UiT@`7b_Bs-*be%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>}AwE9c0(bt;7^z*tGWey!~ zfAn%+XUr3m)gBWM*-u@k?LJSnBHMqKz>=cB=f5-YY~bQp67}e5Nu8jqNkZ01`OMFH z$!d4zz0a=VdKer&V^z__3YI$g{#0LiZlN`ERQOv&q(XJGcYm16xrrkt(kQh-O^lh5 zfrXC&oaPuhSr`~v!D+Hym$CcB!Y32E@4*7^r@r`}l>f$iCalJnGkgb)0n)!u+fq{{knSntJltI~H zfI*Cznei?+gX2vG#%m0WmkpX2&l@x`mi>feLW58PhE2>2vI@E~nHN4EvUPux_v!zg z|Nj~OF^Dl6Knn;m4aLm3O`Hr{w<+z6Vp*z)JK1rwGB7tWGBVhmY+f(Kv`uX4DfZe4 zjNhG~o!VU~zu=Fq#J=d1q^lo%j|#Hrm2ZxiyQU(*Qm5#+W>yY|P|uC|J={lV`M5z-JJ;3lzkw=IsI zds8TNOg3j<$MIkPchxibUs6)%d04VxR*21#KMpCs{s||&2)&*;hp6cQ0dAD@yF%O&cVL_^%rmTh+_}f)@3|f`ggd%wnZn@eSYeH$b7y2!qKDrJO*1-L3TF=i%c7Gavuaj^p zJ}6ylx45o#E1^mcDFGqCfeE4JD;mwueG=#chbf}sWrBDL3YeM5s)50};ngs-VkWAb z7k4aMEPXm;2ldK%dD@rr-Bc^*M+<8#ZG_Rn8b`}@w6G?jN}yt4O>wJ*CQYGHL#f-m F1OPrHTqghk literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/412f05b1ff0bf677c132f8ce40b78b946b540d3e b/fuzz/corpora/client/412f05b1ff0bf677c132f8ce40b78b946b540d3e new file mode 100644 index 0000000000000000000000000000000000000000..3b8297793ffc8566e764fc19ca9cab48e46aaceb GIT binary patch literal 784 zcmaiyZAep57{{OU;?+$z8yiy)ZA*w!lCxWeVJae)D@DVWZ@sN{wV_>y-U&j+Gzh=i zi>Rbl8YUGPik}kwWNPVxC?p6a$r1(0K1_@{afeAs(DUs%=RExQ|DIze1P)<&=9q>f_K;`a&U??$Fa!iD_I8O57)u1uK|BCQfB>QZ%!J_DaKP1os{p%M z6P8#LTE0s#!dL@yqe+W#kr8=JBZP9EGm}OU%eI9xjX)eirV&$z&BzP_anLZMwy^rL zw69QcDw560cB+S3W3*jXq#9W&vM6p>g+U^3y&w}ZjH9M=*E2Rsp-!r z#P0ma*RA;(&X~2qk54}ZI@<=CYgUHF&m9(5yV6Rs?yrA%Up7^xPxVY+EIIq2r?HPU z_Oe)kIAZnGOilf5>5O=mF8LNrUot$mzvmQBY%s5S9ZzK+t1|Vsv2@~DLIwZ=0Ko_L zd%Z`uM8I|tg)KKaX1Dn+wp%2*Mo}dBw}=9zUKOL(Xwu@6y37a_YosBJAY@fn8}vgF zaRV#IDe&gXh`zpy8L@6^G{aQD|l(Ivm^Hxs@Z;2Z$} zpEQ{Xfddf$j6ke~Xqr(R5XJQSh5b1>fcIib|KJ!ZnnlFal4^9(~77)%)$ zco~!#82&RdFfuTRF))ZRGcq6MW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@o5rYFX37sD$hRMpg#qCPsb+gC<5UrY1&4hF#pZS|o)S9ZPHUZ1?Vs-WUA3DBfgJ zS82ztq@7*H54my=>s9}7U9)jQjNGi7Pb9_a7vGbdck~JCS9_&si8Ak1pPBYX^uL;3 zVGw2bPlLsyrA5YL<092VXJ0w4lg@nVBGgmxgTKRT8@o?qO!$v2xrbP{&#K=XR&%TnM&I(!gGYa2u+`RoK8{Nuw^>iE~hsJxwM>M%v%%04BngSSJXfKIqbV@e|+s~ ztN7X<{2mb@Ey5LlS|?X8Q+~TlmFsQloF1E|Ny)z@BpDw{r2aaPv`^ywi)QBwlfUM@ zux|@ay*S6TByoo6v;#V_celpv>3aF$nVBQc!A)Z8Zd)8Z_oh(lm~76zj^n@n@2Y3= zzoewW^RQ&YtPqGK1`m>C&Z_!z($nqejj1H)7X5a?go zek{T|;_10CW6wOnAGW$}2Iha(>%^x7uD@HDmB$yGq4(siEz5+t?hijqFDhqQy7r(@ zPi~#g@%xPr*#GYfS>_qhl*bn$6?wxlG@o~xx`CB4i`lG}wsa4J9m~W_=15;|SBico zb=AM%N#l!r&Rfo#`=2~pwNdGbKj$`&)xXU5{eC^q<6z(kXEkrni55+lL_jHxQH-6D G!2ke4T*|5d literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/414c20c40a0d30d9df1835531bec015f636999ec b/fuzz/corpora/client/414c20c40a0d30d9df1835531bec015f636999ec new file mode 100644 index 0000000000000000000000000000000000000000..b7b3d2802ce7d14300cb6f75ed078dfef0922aee GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W)>})*12+V(|W#HCHI?l8l3SHFer6yH<+-pBr|=%Ji}0i1KJD> zybQ_=4F4G!7#SGE85qQvnVI%-GcfIBVA{sOwArAEX}v)cli&hoCPo7$PKIL!P{7H? zuGQvo&X$GIz}1l3fRl|ml*K@d$-ux+*gz1>5$1xaH83z#G?0e~N+1N$fSfoliU=AP z$r@oYtWhv90Aqv3*#-how=*%av1&K6Feo!OwlT0UI$yMysZ_9nv*E<+h4~AYm29h+ z(z-b1X6IvpA4}@e*!j72^HvHAtvtrG_N7MbrauQSvlhk*JIxV!{N~B*Jwi+}s~OjG z`LNriN2}k; zzh--6_TbQ|oD&O=N(g8!Zd`8AxWqt~jX6}7k420{1SLdZpcEvn%#vr2(|}dMLeC}c zBnQ_inCV~u3$7*xgfI`tT45Ge17;=$15g5hN-;O~AgLN~AjZthu#Ja-VG}chtb(pg z=7rCPY~9~Xi2e0q)A`>)PE%N?Tl0m*-Kx9$&EAEBjhUg#ps}6FiE;Kx)kzjv443Y? zl{c%){_bbqyu$Ehw(~lEiz!Y2e&;WkC$RCU;U@MIca zj``-s)BBkmOWV`_7wTep GK}7(f!Wg0e literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/41521ea3a51b79a706269d6231fc4fdbd818f0ab b/fuzz/corpora/client/41521ea3a51b79a706269d6231fc4fdbd818f0ab new file mode 100644 index 0000000000000000000000000000000000000000..fa3f8a2630b0c774ac16c7b1c0189c15d86ed468 GIT binary patch literal 860 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72bUVqg&b z&&a^Yz@W^)z#zuJz#z`RAjZtd%+15V%+A=rKpJ3YFc?fg0Npui5Z9#)B1eibGcvI7 zfgSo+pwGMMqQXk6OQ-(V|Ns9#l!cRlkqIRdrX?Hdo_o*C`Of*y z`R4F&98AXmn1eILHXsI9uIEJiUjCXvn&LzT#w0viWM8*eyNfz70!7 z-1?g50*)o#=HMI9%8VII_uKTz(dxk+C51&_&)wD0M4#gqUh;LDL;Mii)G@!na$SpJ zLRr_YLxqUvyLfqvo=HSZ_K)7Wp ze`gxjUzy?h)t;!{(6LXueD+>D=4jsSwVqO5s4n)HyE(tsNp>YG!Z$Y~?~YWy?Y=l~ zW<%ZaZN;+AB%^fEiG}-a*EJTqs=lMXSQuSA7&tSV_f$HVQh%U7amU1P=R;jZn7T(O zxs_sN?t|eFzyb!&LJX85YZ8}P+Yy@5>pPRspQVRG?Ty9K!!cy8`5s4%M`M{c>#P`d zgOG?qk;r-2Mz)y~6*QeVRU}GWp?pP+eT*tzBn|SDid|#Ww2m_zagK>o$`j}$N{395 zDkdp$2%{0fBTRDYt$GK%CY`rhciG!$lLDsYtqDOK4Mt-KUlJGsXrjgv5@v|Um;|?z zJj?25ij%8)(<^>lVo?>DE%Zi|7@oOdzDE9-GC2QNG8lHsYOBy0P#s`gc^IhL5JJMVD z!stOm*zXp0gMQmp7IiNY`?@+#OgjE+OHkh;zV*?vqeWR=H?mxcl%6;9N^;tLtN+;Z zn1|!Q3j;ucw2P5!AoZLw126dy5c%r}gP&}8*7Z5; za83PR|mTK#cH?qWBwo0yV#YV^k) zNk+_n9OjkAy%}acGJXXegQUJT2ON_43_$$itn8?fAILo=;&ZdNhFr^CQCZ681`M>9 zmh$)CsEUN0&ABCPv%WKD3;6Ro)@B5@@hq%*t<#=lPoCANwyi4&MYDA}{qV-iM-Jz7 zF|&Coda{VcckOpDO**~3VRVO~Q6N|dhw!CNmGMA;{4pEwG+(kPY^ui@CUx&)htN$s z6G{4~h|7*N=s7jvgR=U1x%I)&`CqcS`ERuU3s!SJLRR17tWMMHBOk%6roP`<9cC5i ze@F#>eOBKAtKp*x{aeC}s=&lMRA3pwvo^ws(FJyByBIJ-??{2)zPsc3ivMDF{}ZSi B)f4~# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/41a12ddab78f0aae7d8112e267a71154a3574f2c b/fuzz/corpora/client/41a12ddab78f0aae7d8112e267a71154a3574f2c new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/41a8b7532ab744143297821a7b3200f09ae04c24 b/fuzz/corpora/client/41a8b7532ab744143297821a7b3200f09ae04c24 new file mode 100644 index 0000000000000000000000000000000000000000..4f325dfb93a691ead15ce05c3e959ec1123657a5 GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok4A?;fc|ZWFjgjFe$n=Jd-2KxQG(3=< zHtAm6y4a96K_}<$`OOw?HY;oHDNM&GFk*KMI&io6wOHz_fApCH3j^23^PbqUYLa|q hTf7ICX2PfQL^ym9xDw{2&0HZjaR3(-nN6tGsQT188hdf`b$!J6-x-2@T^#mD~Jeoy;*H107wGdnZy^_zD!r6}Y> zA|$4WBYPXHX59(hZ#yD&=M>9g{)*pxv`hEthU)h}h8Soeq=y_3QV@th$P6JZJusmbd=OJP!=ka3Oj-wzNpJHA3RGUjhiKv3C2wikC-lt7mSi63WmwT z!PZPq=n0-84-tsL6DFGJ3A=-*NTfV{=VoNBHQtPc+7bZo!_N#Nr*txu*)9TTtw@MoQ z`|P*Qm-et4fBaH@)z*lmk4TC@MBXSE0X7^e$VQ)K$}(A&aAEst?IL|U>AuFXMKixn zxV*T49!whtmN}Rvn=FfKr2r2<&u6iLA_#^03$yVHr=T9U=0;^z`9(JHExK79Uz%^f zt$u~*_m5&DDqVlDKK|X3n%hO`lW%x-8I*avS604Dz(&WpGe)jA{4(y3$_A3RLs$FD zi8VK63yf?$r$nBzoBqU2()r592Q%jB{t`HD-PX9wxvT|ttE9v2xW?PFI~go8u?%vZ zap+-=PNDYX2_k87XH$wmEPX_;Ih4*qXfeGe7rGM5Zhd|ub6K@&@SeMy9S&D`9M0HM z^vWU(p0K)xDYbdw;3reqHD_GU2@VX{{K#a*SU>v*Pi8NOEG>LKDX+^3OYzRGw|hHv z+y9~U^k)9QKvBq@8=)cTzy#QlpIBT7yX$ZMRS;M!dI(4(pA2+q&nKPuiIwQKo7?eDU=Hq|qP5CB(}FgJ((HgjQgIuT%QQ1MziPyi5=Ar%Jk*r$**4=HRy19 zuSXU!mP-dNxW207QF=wk`x9S=>g^NtPtTQc14jmZSs@S0x_@^<$oIdnlZ{UVf7GfeoE%n=)^AI8j+2s8>Ja#ikFclZtX@L@y~mJIbyrP`xi}$B&-5aEouxue)1x6=*J~L$HJ`A0g<+yyrn1q_Wb=qYnFDmRK zca5kVNUdE9*ZV3RcEVXLL!*Z;*0> zQ5QzEx=<=^Ho*?(86|B^lI|}%!>AkE!@D~NT_19lV`_Eym6fZHSFQm;C|E2C5gc&i zXuEI-Hd~9(XW4@QY&q7;Nw}LNItq+wZG@j^%nU_b|i?g;Iy3<*W@Hf>4kI0x_<`j^zg3z&W>TZs#=1PP1h( zGF3xiA%6~>CDBptlDL`i?h&#GT2kDwn3^%NYY6&E*<}$`i6om)U(_o3-P-t#pgb}n zwJ!Mlf@+%+3$HtJP)VnzZ%SRG7F6fRrQK2_o>To7Din&{r`;PuKJ$&t9yM<P8!%#(@+BFdgt8!6*R1FaWGVG!!U4U8r_N-8Xo*W(4ZZ zOaMMd%Nci_Bskji0fh`5`jXf)(MCL^5D?E7jrfpkMH_EZEP^B{<3qLT>lXWPBQ#aLAuaMOUB1?U*o5g*L+1)z!3FDiF29rViXiZ&Bq2^J z=qHVnO`kel5-O9nsC;@|h(Ih7f+rpUY+Ag*TO@@0e>z~~@{LHnAREyZM5w+(p%>Txs{HUefmizAcNoM1$ zY?e99pp3$eCk8li6H2QCTy3!-sK+C3}o9(J8J~fSAfqb9y!JS=x_S<4|M0D4j>NBlbDp*$y=j|#oh%=(5X)<0Tn47S8v#KkcVg7ve3;{*@Xv;`4%a_d_2q z>Sb(7QN(cGL@*K>fFA9K@i-6n7e;14N)$L|ornFWg_08nQMd&WVqy6J2Shjl@|3*Xd+p->6{k+5$H z)Pv2)z5qVM>+!8ka0s|sPzt&bvylWSZ>YIf3@iX}hfH`0w-!=-z%BtuO)|x=0&uMGK_ft4Z-B{b@oV=0g#r<@J9gX__BBE7s?lcv-~>2ABRqg~ zsDaO#8UVi%$l)M-55NN(0JsbCeGnrCn1pXB-~hnQn@} zUBzYWugal>E_@xLAuoDi9h{&~?eXvaBml?-Gx`e9<1`0APjn@qz)B=3ETm7$*;8S zsvQY%WG?i;#aGeKkk&yqe1rP_Vs2s7mHi!;T-B?Y5@{WDN}O#zjqB80Ex_4x%n8Dj zj1fb}IN;bAsc0EWkBcZBL~#&Bft*x;ocN9LmyOU)wVG&X3Jw^ntU2)McfpZuYi^r5 zUVkR~O(u^H;gldYp0hP6IC*F9DR1ZKT??8HznIYXz}SbwdNqg^6>XCx%R-aE~o5#7WTzbLpvWdTBsr|2kw-5U0Y;QWN^h26^{%7=p*V*O6 z7dQ5#rT4S{=t++!Iw!s~On#hNGjP@HQAZ10GOXsRsE1QiCzfo0J`qHbhv7l?_`2DF z)y~Im9oqD$yy;r_!k^5y8GPC`Ysi^3V@I822N?EgA#YUS60lg%004Zf)*M+p&{Y{D zilx+i1OY4(5FMr47_p4OP_C~&5dg1DC(RJNQsQ5SX7&gu0_!v;)(lhm1(DT5_X3E1BN<9hZ+60pxO~=(v-ay_=r4&LXnS$$3!zdk@{)t56uR{7WRzolEOmvR2X8Ft`A%yW{=tO z&~&HE>?N6g^)ojV2WIlBzt7%Cr1}M4Jlf}(c4n9?-^u^LIoYxaQCUAr_f+N0`S9=- zS>yiQf~&U*PK~=>acge>E+(Q9MS54C*~7={4l!~m3f23NeWlCXJiOC^_b6=mw2#vg z-DxGOzbO@gAe@Auz4VRazc6;&W>Nliajx~9$B||+ffIiH;YRr-;fjp%!ll1P2rq{% z$o?r;%03ypq?{CL7rPIu|IFq>zSlXQG|IBaq?L$ydD;NNTq@jkk%ks|{LS z{y~Uv(WDuMi9CeLDP$hXa-P5H6KkQLQ$p>)#?@W!%zKcX`R(~@ymckk&WFN-&lVWZ z9n*Kl_KE{Us7`QWx0MmymhVWcpS&tTzewR^G1#DBp3Bo^zv(ZKZA-wURFFuGlc`{+^hMU$41DMmz|=?A-W3!d<#` zLdd4_;+qxMIB7%U=4H(HZsm!~?RkRtn$p1Po>uv9^YfeOSxsfnQ!0B5)z&S%p_y0q zRQ1&MR9{m9?*&hxm&nUo*xgg4@;01sxQ4sQ)LW*k9?Kb)+ofER>MRtuu)O-Mu)J>c zLp00#CJn6GQ+1|`t0^aBG#m?%wxa(S+Ym={$YZH}! z+sv1J>}V^wHot4w1(r#xs{`AGR&QuRGq2>0Q0A35AOwIgfq~OtC>1Wc&wukFsT09ROM)VGf@RY8C>V{sIsI zAQ%kIkuXkwX}(AUyI<3oqX2kQBusOsEe-!W!E6YrC95cN+gcqBRV3W1yyA7tWI$4t zJ1$mzlP53GU%yk6`YoB9@r`VHMD9jm5GrHx^8 zJs>A@nD|Tw?b&OO2-a5})tx^s&Vb}`D78)HmL$lod}R`(r&DUF@9MvVJ z@BQNAR{HL%>icut_vD@2RcmsSuiI3AQXQQC;RpA|oZ56ahZEUUwq9Y;K{iH@ zUwk+G;L(tzZN4E%&kP2Q|6mb+?u*5%=WlkX+w7=YC(V|9mlQ8)GPfXpF_$(LhZUJW zxRu)P-0I(F-RhMVC=DX$tS{1s{2{xCEOecCO>sAyt9ybEe|-C4tydr3u|m`QpS?{f zisX|BjiyKsHbQ9jnb~m;r`BtUwRk#l7Mzk*UGB^>>~s37f~Qvm`^3A3oFDMy(_bW& z_r8MA0h7)}jq6*cdKC~h>uG5psE@7M4W*g7nJ~nT=S?s|@GTHn} zQNh-nPcIg%#QuXxtL%e{+)(}7dUBX9ogBtdC;%aC#2P>vkR+2J=FA}xLV}zt3I*|7 z)!HorOrPXoOOrb2XO+Qu7jF*vwPHrvN~Fgbj!mjo)HnpSMEdvhy5GLJt0aBe(~NHW zNgwqU|F`=yj6b27NUs`n4K$NJrpc`rP?0|2^gF3d*gu2xq5Yj_dI%jyC=Hg~J!vXWh%_A0yAo6Xax@cM z9h0xC6I0j=@??l9?EK=H`tKKy0F72jK~B!5!XVH09HON8B`DwQN}Y{6Lp9S-~- DH5@(j literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/41f73a08c77291d4b7fce287e0fb4cba2fa76e42 b/fuzz/corpora/client/41f73a08c77291d4b7fce287e0fb4cba2fa76e42 new file mode 100644 index 0000000000000000000000000000000000000000..f3aaa78025da4b1e798fa30ca7641948358cc1c1 GIT binary patch literal 3435 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>&hpY*t?R*oDXYvP zVIbCkT>%eBzc34{0W%}xe`F7{f;`;FVEv*Zcj`6Utnb2-I?{(a)+w$2(rfg!rZD}y z?nRkHhua^$+}9cN#ALO{#6$K|*J-=YQ?1DMpCz!Q={`dRkH^C~K0C zby7a_vtF{=oq6xGtGFHphtF75G_iuEPQE|YSDssF%^Vf}77?jX-R#{T=5lW0h>0{x zZBP?qW@KRDV*sZ)hE5g+hE{Nztk-4iezEY$#O{0lq2Q;!_@0#i#(O5L*oT$~<02%^v?(TmlONSSWbc99{+jo~zAZTQ;vCbG z#1e&YSQP&M{~wXnp=A#Uh%p;5I506V*f2915C9AZgc%q_5QUWh14u7}00RSovZf@p zXol&u13I#Ix5n-1dimkmHbFahbY(Ixd_H9B z{wD9!|2zNxGyDU`4WuGrrqocRI%Ya3(!nlbM03#sW~Nbfce&{wE({E#@zKOMxYD0B zUs>F(y1U=(T{u{o8PW_=m<$a4v@V}4o1i8tHSdtk(w2~LR?cs&fh^C{N^?tBbKE+W zI`Lm@$@I}7YInpwF=i^)K6Vah4P4Pv*9ir E0R{yCjsO4v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/422573d3614683646e27ec50f2289a91b396819a b/fuzz/corpora/client/422573d3614683646e27ec50f2289a91b396819a new file mode 100644 index 0000000000000000000000000000000000000000..b337c08e234602b6891076af32e1bb1e0a99e349 GIT binary patch literal 1248 zcmWe*W@NBrVqh?3W<0;)#QSh5b1>fcIib|KJ!ZnnlFal4^9(~77}yyY zco~!#82&RdFfuTRGcbrTGcq6MW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@o5rYFX37sD$hRMpg#qCPsb+gC<5UrY1&4hF#pZS|o)S9ZPHUZ1?Vs-WUA3DBfgJ zS82ztq@7*H54my=>s9}7U9)jQjNGi7Pb9_a7vGbdck~JCS9_&si8Ak1pPBYX^uL;3 zVGw2bPlLsyrA5YL<092VXJ0w4lg@nVBGgmxgTKRT8@o?qO!$v2xrbP{&#K=XR&%TnM&I(!gGYa2u+`RoK8{Nuw^>iE~hsJxwM>M%v%%04Bnji(dKWh`DQuEGq(z>u7dW*y&eZV)gyKwxem2T7h!@)_opV)Ia?>?7M4!eC=wh z_}U-*9uXle!WDm7Cs!|1e!EPS>uu_s9-F2~$-gBe86Qfd{yLDfPvZTHX6Fl&zvjKL zZwpSnILEXkafa!%13I#Ix5n-1dimj*nIq4^O=9bATO2+2rcmmbY|g%pRCuw=um5St}`98!M$6Ha;&dOy=>>XbuMw*~I@d(O?~x6N|HJIgJ>zW?VL?5z5c?{x5_=~^8>_~85vmk7{D2tVI~U$!&C+k=wI1> zEW$eC>A5fy&pg2&wz_Qw=7-noaGO44Uh7b%pJwrW|NB*nixqsu@?LGd(Xh*4@||5> zWhI?U7N1-&U6FlCSKFsQdL437k$ZRKMD3U=w9Sp-!;(uc-w7OgRv;Q$;5{)%=G57T znoBt2=Sb|&=e*Uf()4ZCWzSFj>wb40daIh5C@ObDzHWV+`*qn1+t|K)i-1xZBgnB5 smNt`D?%6okQXItDDChs4YYKlt@8+|Q&&@4uYx}ih!T;9xHR8;S0Pv0AZ2$lO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/42477f71aaa56701e571e3427debf864e9405775 b/fuzz/corpora/client/42477f71aaa56701e571e3427debf864e9405775 new file mode 100644 index 0000000000000000000000000000000000000000..b1986c28b75595cb4210a66ca53ffdf8143c2d91 GIT binary patch literal 3218 zcmeHJdr(tn7C+y;HwlD1z_0(Uq*-i5UV@fah{z(P zs1OlB@og3aRPa4O>!Z}JqWA(-s#FDMRkUgm!QPznj?s>vw6&1qE5s#OWU64nAKTJ8j*<9DR&Bym*^jC4J%HjAz^J z31Z!tWHnEzGr9G&dF#EfJIfOEXV0~3TZ3!I0Dzbz$)8PttO4>ApetB|>ahmJ6_W(Q zgfTQ>1B}@mhjisdcUOcx##oK9)DL5+H^$i7g3rXt72{nLF5_LsGUjl`)BC{h(y&DYRt-!ey;S&zG~=<{ zkVcKA1JeXyk>S+|#5U?Z0|_GAsRV%tA_EK%5Y1cXDs2ZUgAee-^9e%I+UyQ~9R zze-cy6b~NqQj+v6cht=KDA~8W{ID;Uut}9fK#3{y5^Y0iN#0Y9uQ;BgniqV}{%g(U z-YQ6JDN8I)`EUS_`M-!_VG<$wZIvlRDgk>EL*bWV#iH4+&Zjjawmuo|w>CSH9g{b& zVPp*azpH%%`M=)P+Tiw9?YXo4cU4T1;7$NcBuPY&6pPIqLM6Yysd702Bfk_uYDw$pe%Qbl|zR%a?s=(U2)1CNz2BT zMP;AOeKhBX?Welg^IQu4TJ&H}t>{r@nVxNCJB;;;rcHes0!#gpuX`+~&FybkmI!l4 zWIcjtZX6@vPgmXWx~% zE^ZRWPEh%TG(6Uo;)v!QN(-Is+Je5*V8mJF;TAWu`CH0eHC~qHIkIH58O<+I9o!cf z#IozMc0XE5O?2uiKlXWdwqoU2I`ZN4FBYYC$3M{#5~$98qZM&^mY=>A9Cc{8 z8b?e0aDvnuhxQB3TlDGAJG|Ak-wTdEqig3`{wE~ z*8JQ|?`xYQj_R%X)4Ol$_0~nVPRvJbjNn-QyMlwYxD;dDCpdfXJ&ZMYfZ%A}55R_i zcY;HpiuVOap^!Vv6(8IxLhC9&>Ey1hjFfE;3fc8*0%t;Id&`su5zE@#WK~mMSOAFt zuJr-{2>L`aF{?plP;vuOJ?d(Wrw+SbZB4lL9PY^~ZZ?nk`AU-8xe=^zZ*uuh+BD+u zm@QiuoKROeFP%T`(5CfX7X^MzTl{(4i>c{N%f8|S&7GAzY5dK>8u5wK3mbRachN?R z`JWWz>~*0dcpggUtb`jGS4$GdnQz=TZ%$*hXZHMyo;%B;(stb^KTnx_#m=gEbC1ddGxnjG^j??D%|Y&(HyVV-|%E zZ~&hCLt6PD;)po!JSQ;+bxwP5{$zqpanC5r>II=8*Pi;EHKRtaIviM38s!r2_r24| zObmeHCyz;JVEJ?($j}_JuZmn@Tdll0{Fk27J|}8|6H8o!6T5`Uz`0sce9ziVYxdec z-fPEw99Eb$NwaZjx1|-jYZ>;sHl*6JqdjffrA;rtY@d?uA9lG=5wj%!vaZ%ia=U7g zN9gO{L?P{}pVVXXa=*(vGW(=&n+efIpr_1}lY9o@AJRm+r z(9himUd;{MdD5$({8oT;xcj7My{&4$Kn(0vGTmqW=mpry%k$|2xqX`B)fX2v3EEk~ z0mG7nr3;5W-k@;Etu~ci^;p_6)p68uf_w=dT-AUN3jpYmj1pS(uE)s81Q6M)j7>NN zW5a5^lUa>90I#tXo8th;0YI)u!ORDk;gN#_02=6FfG9!iSf3KhEw8LkRoScVENLyj z-&vGjS@9?%>Rj-oafVR@_JQ6rNqe7fOtWWdE=%>U4d>}(nx<8hF(3k^^alfgZmHbq zi~7+r<9f65l|!~%lGd?rzUE>+d!2$cXa7_2LC3gt8(LHMy1!Vywbp+FujO3fw&%qT z2T_{)qQ;t!Um0x(i76X7`FLtyDW4aoR`&hsN5b7|jqBP~DZ(>(;@GoZEBpQUUt8KX A{Qv*} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/425456a3461762f34471f97fd452cc81bd458c8d b/fuzz/corpora/client/425456a3461762f34471f97fd452cc81bd458c8d new file mode 100644 index 0000000000000000000000000000000000000000..846ce1fff1309ec96a6946b99b075ffff31760d1 GIT binary patch literal 3372 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>&hpY*t?R*oDXYvP zVIbCkT>%eBzc34{0W%}xe`F7{f;`;FVEv*Zcj`6Utnb2-I?{(a)+w$2(rfg!rZD}y z?nRkHhua^$+}9cN#ALO{#6$K|*J-=YQ?1DMpCz!Q={`dRkH^C~K0C zby7a_vtF{=oq6xGtGFHphtF75G_iuEPQE|YSDssF%^Vf}77?jX-R#{T=5lW0h>0{x zZBP?qW@KRDV*sZ)hE5g+hE{Nztk-4iezEY$#O{0lq2Q;!_@0#i#(O5L*oT$~<02%^v?(TmlONSSWbc99{+jo~zAZTQ;vCbG z#1e&YSQP&M{~wXnp=A#Uh%p;5I506V*f2915C9AZgc%q_5QUWh14u7}00RSovZf@p zXol&u13I#Ix5n-1dimkmHbFahbY(Ixd_H9B z{wD9!|2zNxGyDU`4WuGrrqocRI%Ya3(!nlbM03#sW~Nbfce&{wE({E#@zKOMxYD0B zUs>F(y1U=(T{u{o8PW_=m<$a4v@V}4o1i8tHSdtk(w2~LR?cs&fh^C{N^?tBbKE+W zI`Lm@$@I}7YInpwF=i^)K68A;PRdr7j*`U(uv? F001^o#eDz( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/42636b2ecfe8496cdc95c58103218b0bcad0b2dd b/fuzz/corpora/client/42636b2ecfe8496cdc95c58103218b0bcad0b2dd new file mode 100644 index 0000000000000000000000000000000000000000..b3f5fb20178e2cad65bd05bcf40d30438dca6f96 GIT binary patch literal 2331 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@o5rimW*>7j8`xqY|4eP-Gl z(f?|Cg+Y|zKMfX-mKGV0jf+$doqgrFPCE0ci%?I&5B?6XZR|dcG2uV9*`tPP&DvMKoNKCV@sAHvspDT0qw;p5slyb3EBlnRlJ7Zb>+WP?W@KPo+_>DJ zafyK}8*`|v9E%u>$j{kJ^Uro%O(@)cNx|ip?Q}j-mQMzyAZcZmJcFFsSQRYfb~jjJ zVCdcW=6*U$Z^RHj!Q-cyOYi9g_yR9O+Ce4 zJAv`L^RrXCE9Dpb(UsU2osx9*gYQv67QOP#5p&lRSylub*U{{%u+y)+#OnKdZAa54 zwF2e*t@}K#sDJu%*mu|d_}bN0@wGqrJt9I{ge(5EPOe_2{C1ft*W1)NJvL2~l7CA` zGCq_@{dFK|pTzqY&CVAlf6aSgzbrWQ;vCbG#2Kd34(Q0<-5R&2>*a@MW{x}uH;Jvg zZE^J6n?k8$vN`)YF75h%yq?Mbmy$Zq!;%fNLTr}&aY*^~PdMpC=>1HisZ$P3-4?jp z?>RS{-!{t)?<}_j`~KHoywxL)Jz!gx@oeee;R4$holy7rssADK_4*4(-zxW{&kqn| zW@Z)OWnks8Vq*CJ|Nk!r1_sFuXT4mpy5RV)|GVm${4Xh~@x=W*TkRa<>m0tfg_}8L zu9tj+`Hgu?9!{&>_g>~;RifaLexa9%@tXgQbM4vLd^UTp|TMs{W=29{^qnUD6T&Y!+dUk*!jGX3}q0ZeoN3=D8fUf8#hkcjI2 znT}H}5j8N7oru(lOhm9WgqCiQ(+Q~&^)(M3c60}%MHcQHPeD0hz{$q0)#h=|7A;7j zfQtuz&1+&{Vq|P&U}|7u0IGS-4NQ!Tpj=!vFAuf~9*;GR^N|Z{P{rHW%V5yh$<)}$ zaYOsWG82uY|GuA3bL``@N!|V{Y+ugu(p#J^vb)*kMsL^qnANOoQ;& zK13z8(lDt=QM^j@%GA;YQAiL1lNQBt^!;M*u@&L zlQp8{`vfD5)i5_2zZe}Bn$6Tg5a*dQ$rP~+YY0;dL=w^rm`YXy(+fnR!3IrU)m7)A zJlQTgtroUdX=)4+Hn;4oc02RUvddBKl55Pla-BI#cChGht$)%#;UD);G3#NmC|qkj z$`V;3V}a)mh6)Cp_9x~Y)&7N%e`pO6oO2uJoJ0OLMxsIhQ_J=UL9sV8XOb}zRB;Uy z_K{0KbzU+1NkrRb^oybW(!57dC>=FXV_$0uBc7!zz6ImgRL|Y-nFSMD%&UxJsN2UXjeV^wg?N^b9)JKq;DhZ! z&&eGTuvmpxB+vDk7X>F>3Z>8Rn|D>(BR|_k{U2Aco!~LqyMEL3k z=Li7!q|rnO90>(r1ftAL^U`=WBUPTjBj01!|u`z-&g zR|FW=!9gH^p#!u~Bn*ohV!}chhCpAv&^FZe6N_U+d`dtZk3j`C>L6k`|6NeVm&Ea9 z6z@ctKr9i;k|};nU|~#Puo!^JX1K8clex~Az;Fc&rYo3z)&apMkJ7|z`*20VXt5+t z$Yqd#k@_eNJYl6cF;2!6#!=P^`CH%Bh5xWFV=!;FEMX^EVWxOuX-&1$WcJzM8RZ>_?Dnw8OT)ab%b@K&yx~QN-t#fffB#x#N3L<-!4S6AA9r1|tGvNJ>{dZIrzoR% zz>mM@5wqB*?b4Y&$HOe7L^=KJmnHWvwI8R6PlJtLa*t!`>NgJ&&Ou2nWv}CNEuT3Y z89RoNsBBn$N%P5`7zBpk3I)6zC}2Nejv`^^RIK{y%N$U68BXxSS1;tX7o$ustdr9L zQT?+n48Or*5e$q18mj4l!Z@4;3}dYU1z7yK25^>vKqia#pwnY$(&R0?O|u`vK%H-> z&esGe48Os^5MZfemRK5a1oq{&KT3>JC(?PlL{fT;EJh@b;)-ZIi3k|0(_JIp^)EkuC9Ao8Oo0h- zz@w-(jD>F}V{kCgM9~;I9>!n*n5)nZECSSW8>Lm2<=YD5Hw!;#HM(Dbw;yx1xQ~T} zsQb({oKkf!NwNIrjA9tQd*xZfxh*w07ue&zw{>XSBH*PhcKL3raEl++OgvgzphML^ z@a2p8;ag*F$rTOAMev)aO44FdF>IXfPP{rAPu3F1)Os%cZ|jCYRM^wLE9=<&q2uGUEFWB zGbldZv*>XKE`Y^w11vYzEP5DBX9m-m<<4?n_fJyp@7PjekKMYVE2O{!tx)uJh4|NJ zdp#q^o9^~a>)U(zS@sR9(RDLiLLKw->~fh-XmHq(8;YpH(cv#5uiVF_8#F~6@Ty<$ z&sK%LTA-XN7@F7At_mfn0;kK?^rrq)zFEAh;g=9gTYxONqbXe_+EMAjKJJF*{kU8o zJDj?pS2;P&NSHeC>&9_fVAax_t&f{xO{=em_RL$p$FiBsCAXDUa(E7zE<%20Gx@Tw z^+aglPXp<;dROe9TqvUGUv)pEhbWNhTxt8lebLb&rN!U;8l!zjq{lB4y2=J)31NsgbpOF2D*WXdvVq-E!B0AH0 z&6{@gQBmmff~oJCowlU)mMZv;a-K^xXJ~b!_Sts&tH?thu_YnfcH(kUJM8^4Z)u6P zH@30L#ucNhdj*k$(AUP4gRksz53g*k?9FN>h}Z5yQW3BJy-rTGB2PAZ&{utxbJcra z!d~hPw~4?Nkj>L3mfop8n{?^+l`gdAxcu9C7KbvWrt!~5!ib~B=;N4C=CET=jE2|C zJ&p0b>mlVuvs2WvmgoMVOv6l^r*OTSe4pI%V(xDzS8pPPAMB2BNo!_xL5LhEkW`?+DBsH7;G*)w zi^Aa`5cIL^^=9V`R@+cxSwf;Pikrl60uE}y>liLjN20k&lu$k|QNpMA@Fg-~w2;S@ z@!uN|H39$=u$TA0+IqvYwl^n6IhIy5v#omqX{jXg^4c$8<7CPMZtTg(OIc$R1 zuEr)j_}2gQb&Qy}meaR1ZDU|^DydM~L5oj&U< zKio{hmx>c5Jie4J;m3=mLYY{S{FmNFvcoTIK)% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/429963c2990d644921a810d1d2a9b73b0e4d6bb4 b/fuzz/corpora/client/429963c2990d644921a810d1d2a9b73b0e4d6bb4 new file mode 100644 index 0000000000000000000000000000000000000000..4df4d9ed1b5b69ab919854bcfac6c973afee51aa GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11DHQpD4>GgHn*RG)taAP6IXto}U&jaVI6(xS**c51Kkk z0!lKA6~L*Z37q_PMuCza4;yo+s4xqw0W%}xf8@AS2gfBNgWbvI^+HVB#HOBNubsg7 z-TC3E-IekS{^&~Vi%vuu_slEbyd$-gBe86Qfd{yLDf zPvZTHX6H+jzvjKLZwpSnILEpqafa!%13I#Ix5n-1dimj*nIq4^O=9bATO2+2rcmmb zY|g%pRCuw=um5St}`98!M$6Ha;&dOy=>>XbuMw*~I@ll<~?-8Rb& z?<}_j`~KHoywxL4dfROFF5`gT;R4$holy7rssADK_4*4(-zxW{&kqn|W@gmkVPMo? yW{_3TmC3yD`H-#qn+dVMUYy_bJIHAY>vU_rvbbAycfZ-YaB#4}f?>o0Mg{;39p*s* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/42c065abb043286c119da39db91c82a4f6a95ac6 b/fuzz/corpora/client/42c065abb043286c119da39db91c82a4f6a95ac6 new file mode 100644 index 0000000000000000000000000000000000000000..c1d56926ce647836ba2e0e66d7eb2941e75fbea4 GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)Wpch0`k_- z0agT@ss)lS#g-b9P*Vdmj&*l3G28z8ySQ<=LE{nwSvKZSSw0pq7LlK`m*$`CxSCM7 z{gQ&qFWc#SqAZ^bO4*pTWR+R+400N@3kFGo74)F^SAEvxT5~)&tczP`{Qd@8^zZ$ zFnC0Svaa(&q<=F*7r;@G*e$G-K%w06k+F*#H0l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/42ce64afe00f8181e0d48b1424175b375c246543 b/fuzz/corpora/client/42ce64afe00f8181e0d48b1424175b375c246543 new file mode 100644 index 0000000000000000000000000000000000000000..77308cd6b5c122d391d484ec59f95eec9aeda829 GIT binary patch literal 695 zcmchSPbhh1_xtob-{)%zP!}ia6g;z7ln24Bww;Y_ zyYF^3-;u`8taX6z&l^$-(#jKV&u-}|Cvfct`OuBmy)jAOS>I+6R*Qhmw7Bl_6iR; z)uVIGh0deR*7SOIq2fURYcr+$cmk=iKZv2yWN+@VtbgMKKsTc2H%C{8vBd{27_rdITgpB;4KOIaDkx1x) z)ih@0>(H|7UzL(pRM32&Y@{_-E-S%p&@JvymprJOgKlP=!)@v_FiLXOVVh-Nhn>3h hEPD_&>W}zzJ5E!>#}T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/430e22be868d6f927181d0c6e25b95e8b97e3fb5 b/fuzz/corpora/client/430e22be868d6f927181d0c6e25b95e8b97e3fb5 new file mode 100644 index 0000000000000000000000000000000000000000..d086e7465d3d0cb80ab4db62826bb6953c8dd80d GIT binary patch literal 554 zcmWe*W@Zv*VqgelW-^v5m0wqOrmRT$aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf2?0|V!OMi9loz`)JGxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9NauX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>5$qC*fdje;0_Xxb0Tc80 z|BQ>J3?vLV*_cCRg;|&k7!0^UOnw#?W+v7J$WG@5IlYmg<7b1(sVg6)_cbn%Nr`CL zZDVA;Hsa)2lkd55?=$~UD=bp^d|owaKCAe=D=!aLtr0KW p)lyPYecovOs<~5ctncGvU|QSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D#M!Oxwh! zo?@?^!1&$y*{R)?@(cdxO6-eHNxJ&M_oyI?Uis#Txv&W7s<5lfzr^bMdu>P4Cba_P z{H^;!Wd%R|IqbV@e|+s~tN7X<{2mb@Ey5LlS|?X8Q+~TlmFsQloRY(}#mT=VBpDw{ zr2aaPv`^ywi)QCblfUM@ux|@ay*S6ZByoo6v;#V_celpv>3aF$nVBQc!A)Z8Zd)8Z z_oh(lm~76zj^n@n@2Y3=zoewj^RQ&YtPq^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwa_7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pv%*9aOI3L+WMpg#q#$E=4#!jZjMwWfmu8|p0YfUD+EZfqx z=8MytcP&L3KblPB)<5s!S@OQ)Ti)&Uq1*X_TF(eptvt6`X^CQu_{$fQsz3LI75#ei zeV%6XP4%?j+mc+BJ`}Cv^K-jg5Ohv1-1X4i{%f_5+w|N8#pFz9Pusg9Qtq(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~QTHH^|WLnGu z(@o}^&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=-NhxU=Svh$Hh654|41)g|836RFg+BlQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/435667da819e3275c9376bf31e145e704cabe4ba b/fuzz/corpora/client/435667da819e3275c9376bf31e145e704cabe4ba new file mode 100644 index 0000000000000000000000000000000000000000..4275a878e9eb5a81529a495047df8a22d7f52a0d GIT binary patch literal 550 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^js=n3)(2m^c}3!c633W7lf)IA_bkXy9tdZNSL}vP_uCz`#)0K#+|&l!b$b z3#Qhf!$QlELHDIF+48Sy)9cds8 zbvhFx8wc1A%#7^JP7Ey1v@;*=Pn|z~pS~RLlrEpE)3dj)l;d^#eRt(bxw&_CMKM0V zHhl$`#LvS=7R!Y_s%iGPEhZ)NRkrTq6kYH0MM?)32N?Jn$b!6SrXt27g5nt%0EL3A zGK++P*g}!zEes3{3=0_=SwON3j9@i9AO(UftOm@D3^z)Bl59u&)nDZaIG$db|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5Es2*BUrWa+-9XEiZ$YVFD6xg z?h7mW_2&CL&E}ixX}`B6xhgR*t>g1^yIc@-PA=T_kX8S++Q)5r?t)@+mb0hrjTBt* z`pdI((yx*t%hkLX<`md$u%FW@XMU84`TKvy#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7 z>jGq_bAz1T$k6e#!Q|AH57PS@7s#YUwCuJqvR)f;@~p}C+?00{dd*tg zPs?;#%mUL*=9|u4vn$nq^70$=;+-*%++Bake@}Urm?*fYGgUR|zhbY-N!@^TM?Y?4 zna5_o(ED6rkqXy&)uj2X;`1O;#h}nq(%oWkcKxckQ*Ny9<6~f85MgFyU}O|yW@JzR T1td5|85kJQ{La9ju=XVYViU-- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/439cc06171fd6631cf873412c169375744fa0393 b/fuzz/corpora/client/439cc06171fd6631cf873412c169375744fa0393 new file mode 100644 index 0000000000000000000000000000000000000000..254f0de116d4c3a4ea19460fcb3fb0d7675a4d90 GIT binary patch literal 2128 zcmeHHze_?<6#nkL?^&j=9~jSu)WXe{&!C}pBch@Pp&$qnYOSH5DW6aj(csV$L4r_Q zQ_$SpztLc0Ee#FEeJ{0AvB?npmUHgMx#xWM-gA$wh-nE-DZv&1dH@S?pe!JOFkmYo zw*ruxkQe#A888LFvawC8Oo@S6rH4DjA^Pr_u&Pl1zp;Y zEOq-skBj@*etvs4$%nxbqdW0D`ND&lqxb9pFYG{9 zI-_?a;o;;}DgjYk<`N@5m5%fqwlQ3vf^;u45;sO@XB!6u_5P4yQVGHD2R8MA9W>0^ z9<1pywh}P<;r1L(4d6(#IBbuErWn=_AgF{uD=h9PbkiR%>V!Z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/43a6726af7eece6377804be48487808fcfa59529 b/fuzz/corpora/client/43a6726af7eece6377804be48487808fcfa59529 new file mode 100644 index 0000000000000000000000000000000000000000..b3cc6370388077a4bb108c43893c7bde24cfe046 GIT binary patch literal 9318 zcmd5?eM}Q)9DeVvg@OeUSV8$HA}TAxT}xF4GF|+F4HP3)P_iLf33TAfipbowY!-El zDT!n%4#_kcK}vOI%ost~bU353Wipt?ZGg$lW<+ISf~3oRmG{h*-lKcwXDdiVDE zJ-_GoJSRc`SOo)+f`Ik??M2y7eMT;eR~(afe&xF=;?P=kwLzRQ>-W5#I~NAR4rQ%; z&~#9d_Dip#&)C~qX*j)oUtwo|QjKcK*FnuyY5)PiH$ngcA_TyjCjmGc!0!M!6a5%Y zM?Z#IYY`ZNVGl5DNS;&gQ!PZj+&lzjiDiR3A&Ach=u+t<)WZ!?@Z9|1HxyDobPD!C zAoN_lC0`l6TC+i;luk#**grjmfk_1#WnqC*6Sg*YQ%TD0cr6?EbwV2;u{zv;v@|d*RYj001~4 z>&rH#Jn3l2C|`Q=;-lp)9_ib|FUs{_%q}}ntG#qiytOiCnY6=aS5tWCdowBv+wbR> z#7))}Yrn4&6MTyv%QH`8HUujt}Yv>H1IWa`rre5eUQ|OGQ_pA#R8w#G5DL`Ii^nI(<#h>@8L{ z4XtT@_hiv;x<-66LuT*-QIVGY03mk1ACHeB5M(reU_SQ1r6B&VZTVH533-ElQ(p;c z+oKP!AE=1=_d|8g&FG(k+rHb~bH90SW}m!1v9fJpl|E{D&CG48m4|(f7mnNazFj&TYjj$%C67RF=c^W;(#jddZ$ElY_F;|PIqURPB6iFtk5!{k;&7{-4f zF+P(6UhVeK8GpI*zi)%#bN*WnnZLjd*DQdTChMK)hP8vrG%$Qldx1#A03IIsim4xGD`+I=!u{G&( zyrkx5-?!%7)BTYY>>tp(Ec&ItvD0Gfj%Ib?Hwo}Z1)yh9%k2YGTCbLq$TOWA!#MX0 zcCzXCGvyHmS;dv}3&_6-#2s)nN0$+Y%(Uoj5~q+zib9+r>#U;JcW3TDrOC~yt&uAH z9;!%?V%$w^900&1EbJiN%333hblsg07B1U6t2>56qi0bIE-<)uZVU}*{Psd(hsb&{ z8xSe7ObzHsM~X>gaWo(`C9<4oKvx6eD7qjU5H7OZhaK)FtSXGPn_#MvMP&JrBFmzi zJjF!TTy~Kqur9KQZo(z9Y|%EpAd0Tp+VOa66c21MNSjoa1W{AOOXy4!6>=_&xR>0i0mW=SUdHD$)sU$2WHYZI>6%k zVe>@l2Z^OgV>fqjm^2RR2kSn|__a8DyhNgBQ&X9xjW{0iMP=?*(z=_FW+P$?Z*VN# z%|u$)UVXUT+(sl3s-bMe2XusDS7ozU@a{&9;h4oT28G+CTr<=xCVfUq;m&oyMzkBD z0)uCy6&sO6Xqp4Y1j9A3KH$f&&i4t{ol%QN!bLmbjM7{JlTqqI=6~d}DSE=#J3-aX$y98WJ@|Lu;#J{Q+u zUFXkJ9wwiEv(z%tHTqI+xYMa;Gc-=}%x-zg$iTqFz`*&Rk%5r`1h^R(w=pnoW?0A|oR!19M|9gF#~_Q)45`zG~OVjHtCH z6JC~W>00x}>CL;AqKqF+CUWbackwKF-|;Q)_WIE6d_k>e1gln_+pM%iu}1vmi%Hd= z`@)KTz4<;*v-zfa+V5>iu1X9{>-hZKE*AuylM8n}bhrOn?c+8*cR?{ZgW1#eu80(T z{N>p>=~qdS1!^|sbG#Tf*w3-hiLYd0{{EkFv6O*?0Vf-CsH`vxlL3PPH;Bp4!otkN zx&Ybf+#shnGIacGFgbN4l!dKvflNw7%WfMZ>$MRl&zgMCm3ucKMYLn9OX1zA*Q~|; zv`nVOEHK?uiGqtdQ&lVslT*`-Obk;JlhYDY z6AjZ+QjHCbO;b&c(pbgkU3q!1YK?f|u9lLL>hmV+R?VGqV|^bV0|SEyGZO@SP_F}(f<@G7EF!H3X^KQsZt%~kr8Dcj-xs2%i`%r4_>w_SLil{ZScM0= zxzK8!i!ZfEt?)%3ZXgi4C*@`{@+3BmWfYT8$`##({)=;1Mw`R1vQ_IdHS5{8WXstt zvZZV$28lft5g4JItwa?@;99Y#VlGA~l_SGvZnKog_gW~P}lOYbW@e)RYj+FZ)0%Ko0F@w?WXK4 z^NI&`<1XwI*Gd z*#?t%9>4Y6nLqZ$}|qI zY~FZG`+f0A%VtU@^ZZey8#5uFn;_)=_vP`CCdBNxU_Q5CJ@^-OTs*LjZ~R8yCHpM)Xun_O$_2rF1Dm#IwVxhJJ{)!-K-Ca#ik>>-%xi%^ zri1th*{ON(}T_g5I-@0$mI`5^o0E3NdB&Nn1{qCqmOlFZ7z2; z*6Jx|sd*xMVZ8n8=_R7k#u=Nb#|gmIi8If4ofghuE;4dt(TOvNEQ83fGDM6+7G=v> zlp%{8XPmr_8ai>tww+JcM&sD#v7Awl;MYmS%;{INxwnA%KbL6FW$F12jXdyL8=9Ig zrSwEPr*kWa`5mqISh=10X)QtS?i zHc5x8>1u0@iDPh5wwWe6i>f{i_Z+`R0~-Y@0Cr`W6=1> Gn#3OwsCqB} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/446f592c40b0a35c853e1a20a2bee6be16f75e29 b/fuzz/corpora/client/446f592c40b0a35c853e1a20a2bee6be16f75e29 new file mode 100644 index 0000000000000000000000000000000000000000..91d735c2fe7ded1f73bb4dbe89e2d42054c0a019 GIT binary patch literal 919 zcmc&yJxc>Y6rA0+cW@>bkc3N`_?1Gjnk!P+2_lGv*c@00f{0eJw9cjoh*$*tC=H~u z2nhZGt^5U|Kf%&Q3k&5gTw;PCVv&J`H}mH08 zXP|eXcc8b~&|7S%yS8XW?cpQ6(RaPY=34XJSITj~)i6WPjTh!M8Rj|ZN@SRwNd06u z%juq28i+m2kjddx(I4uK&~!~?{jS=OQBa*tZm{f1RL+^e6jI|5 z;>RpkOo>7LXG1nNxZ8k<$R(1nMCapG)w(q=*jI68-2CjzO z2Apinp)72|Opc+3!UlpM4hIicaDHy8Zg5FrNvffufjoo+NpbN=c;=O)7UiXuD1>KP zr)Odcrle<<6e|RjR4VwCq!`GF^BS5Mm>3xw8JHTF7(|Kl8k!rJ7#TsicwL~1Z~>+@ z)=+Eoz}7U*2l)}^HAYqj=EhzIgT_v#Mg~I>=IaJ#%>N-kjCmsiBZCMtGXtX`v)0OO L@kO2ney#=pu7_1# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/447d5a7995e61137c3a2787ac7df97f0bef21553 b/fuzz/corpora/client/447d5a7995e61137c3a2787ac7df97f0bef21553 new file mode 100644 index 0000000000000000000000000000000000000000..af1cac6ce285a44309ac74d0c2b4ab8021a90c5c GIT binary patch literal 747 zcmWe*W@Zv*VqgelW@2DalHXExrmRTgaX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>Gn<9+DFZ_b0|O_=KL$ny5a4ED+{VDTnSpVG zK@;N|gC<7N1}H7ZoQO$cghB zni*Icnj4xL7?~JGiSrtOxFAD8T$uV$7O48h`N$?RvNA9?_A(eWb}}_KGICVAMrK4! zFjy-Ob`%4{yOyGiA5DgGnpRyrOWt>U%e%ckbUR;A>lwkSmFG4qEm5oy=X)`!`g31c z(XTh(=V>G+w5(b=X%psz}EKCLr2Hb4Sp|boeEX+)- z3y_`84RU%TL&whslT%kdO7AO;e>~f;Ww(uy_1cJ&XHCB6%DtPABHFRlrSR_5Yu4g^ zTBg%t7MN}_-*oPpU8(+)m*1Ed?~Hlm?)ppqd&;}SM8QR!sj5l;6?;`q>ISSk`f(%6 zJU07<-scL7R6d_qO`6XtJ`WOA3<@nJ-7N-Z*RPs8<;MCxJ_ZH`5oRU^Mn*AaCI$lm VP)I^U4-|m(cftnTP9Pz50RYX#_$mMZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/44828d3fd63dfcabac5eb4ea8d270016a5be20bd b/fuzz/corpora/client/44828d3fd63dfcabac5eb4ea8d270016a5be20bd new file mode 100644 index 0000000000000000000000000000000000000000..a949cb8b67695dbac7e8b4904002eedc603af926 GIT binary patch literal 2101 zcmeH`F$%&^42F}J*Hmq5k%A&xaS_DncW@NMsjEX5kMo9}L+~Kp!0R|FZ5^zO2k?E{ zpOF0Fhl~Y17^0I1ez5$}2OWs|PbMas5JjYO(ka<9oCTcRE@BvlfkgY8s;C|ba}*Fp z+Z2gPX%Xw&V=+lOZeJ3^ZHz%Pk~McbIl`HphMTIm?+wG5b?pRYtisMJkEeq;4yaT4 eQ?5B?h*iowvq76dRIAk5R(-tf$|vUW{3kC~LV|k$ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/449ee0e2202dbe1030981a9490f5b24cb7885dae b/fuzz/corpora/client/449ee0e2202dbe1030981a9490f5b24cb7885dae new file mode 100644 index 0000000000000000000000000000000000000000..9717eaf968954ce5febca1a709df028b9455e36e GIT binary patch literal 415 zcmWe*W@enl#J~{F%)D1RGCPj*OQ1oIZ29$nW~Z4}&2+w~!L!Nd(zCsuQ3qZq>@yXe zvSW)sQ&*F1>-Ia>Hg3r|m3}Lt-ZDCf0Rk8q82JA)f+%hVCPuIrHv^+N1EUE8qoF|) zqpm^Y)dkE_H?Ss zo@|~yi=_-C3^>`CLuG|om<$*UxY?LvW%*fHn3>ockUhif&S2oeq)>TPE!SH9^PkRK z(MO)MY~ow26O>&&Je&F?!_SI1=kqct1l>`L(eqlyJL)B5Lo O<@%Fa|9$xw7#IKrV0q*K literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/44e25a64e57cd09e5ddaa8822bbe46fc255ad494 b/fuzz/corpora/client/44e25a64e57cd09e5ddaa8822bbe46fc255ad494 new file mode 100644 index 0000000000000000000000000000000000000000..008d145d527d20c208c4e4fa9aac9d2afcffbb04 GIT binary patch literal 2331 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@pH0=O~J-IWSitpky1^nkGgiWDhX1GB7tW@-rATF>*0AF)}jj;=a`)Da7blTBB#X zcW?B*;MYa*CX>2KJ9Z`Q>@t4Hm3vsP`iJY9jT2(zX5D-uDOSJup5(lvPguX&D@99` zd9V7+v^S#v)$|I3D8qjmEFLW_G9DWjsUAA}*>Rn8=2I7;o`N6z9bVhmeHvrJe{9J; z#JYV}_5MB5yVqM~|1sIq)nB{3GAlhm<@B@OsfU$c95edpKSRWQeg4;ysbaQ^7OO>X zaGzVTWcKezuTGrst}6*XbNgRPapEJLn{qpK-Sd3*mHc#8$hx0V_=e-=?LQgsotMe) zF}=99`Owj1mCLe64b>iNU-@#bsj|gCK1`*Ke@%?a+li(QQv|N;Q_@Pl=cKK>lZly; zfpKx;a)ZVt2C{6-p|X4|Vk{y*XD`h^+i^9aaQh_%mtVHi`9xVh8I*#gm09u(avHEI zSm?RLouX(%q>d(}c3 z?n?Oue{?1GMW-ZP{os34kVUV2bHv;=MV1u-$8|L8E9~?uFR}XmUfa>MNv%LRf9pPv zE9#&A9QNI{KfZRgRebFaevgQd7U7CNt&^*lDZgE&%JnvNPLEB~q~zZcl8g@}Qhyyt z+9&b;MYHpT$zStc*tZ3zUYuiEk~qV3+5sKeyIbS-biMrW%*>JJ;3lzkw=IsIds8TN zOg3j<$E98WkJmH#|58%td04VxR*21#KMpCs{s||&2)&* z;hp7{VBi1xi?@2ju?KAHGM+8{J6vGfq7&*qKlMLkzFvRf=v(EU^!Wi|%*?C;ybP>7 zR!j{4|NsBRz`!86;jEV{Ru>%q^?z4Alm8_pb)L9?XRDoKe4WGhws12?3Dj?}C~Op9 zaAUE2zUSxrP0fz~GNlgo7%|wgFtRYRFtadfvkeq`6ImA1A~m801S~+nq5~gHxI^jN zfJY&NJ|ukpFbrHW!U!L5xi(Wip17KQ#S?f_A|f^ gCT#3kuadj&rMMOA!TmdA)}>lYM;y9&=Gv-s03wTw`Tzg` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/44f00fca850d1f5c13aba8fb6d1d3a0cadf53cdd b/fuzz/corpora/client/44f00fca850d1f5c13aba8fb6d1d3a0cadf53cdd new file mode 100644 index 0000000000000000000000000000000000000000..4677ec2f7fc7710f1868297cb8518300288b8409 GIT binary patch literal 544 zcmeIqAr6B;7)0SW`xnTDV5zG?)(ir{^*9Mf=?yBHG(m6{P^+;O{nX2d>BGzkrU+l) v^@NTA4k5ThAECWP8~UP;7rnj6Ya}^kw(^+krers^&b9owRc@Ti{P&wq@-t%s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/44f8df6b20046019a46222f769a77717dbb9d396 b/fuzz/corpora/client/44f8df6b20046019a46222f769a77717dbb9d396 new file mode 100644 index 0000000000000000000000000000000000000000..cc5c56dc45632ce9a2932cfabef4cba4c8e26949 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHUY2I2n!^7#OVb z<2NwiWMkKA^EhYA!f4=X$Zf#M#vIDRCd}j*YA9?V2;!&;a~b648t5977?c24&{PHU<_(=Zh9Il?qmHHk^39Fn{5)l5G`JS{J9>?0hWnV@X{aJ3qH>-b!Ji zmB*OYzSM}_^ylDZ*1}j}r#T{z-#nSUM~F#gHRF0NA9lO6+XFqfMeS5iG#hjvzTe;SkE`K=VX!Tq9*KCi>9vnKAb7J992?5Q;jmr%h zml(*hF^9_Xv52vV%-Fi@3ok#41~6Ix literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/44ff85718ff8bc622f3aa5c563415402a4060543 b/fuzz/corpora/client/44ff85718ff8bc622f3aa5c563415402a4060543 new file mode 100644 index 0000000000000000000000000000000000000000..1b1dc803a906219ddfcf51cc68c81165eda94df6 GIT binary patch literal 720 zcmWe*W@fNtVqh?3X4YD{t?kmgJu|bj?#RSP8Xcdvl>IgX0|UeV{|t=Vjz$|WFxWCM z@G>YfF#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItkli~LUAHCHA zvv~}7**LY@JlekVGBUEVG8niTavN~6F^96S3o|)}8VVZ-vN4Cs^6_v5=jW#C2A3q3 zq#7z3$b(dH@kn^)m82HsrIsj!XQrfQmJ}-llvFDClz1A*iSrto7?>Ct8yT1ym>5Kf z^BS5Pm>3yBxd?06kgQ?hAkCT-gU0#D?q_6WU~cSXFlg*#YHS1r4+wB>=Fwjp+3mV~ z???CjoDtPZdrj9(S8bcJpy9w4`Lc=WZiW{GTDB|66(~e?H7Mao}=YI>(}Xng?SpS8Vl6rbY#|XU5(Dyb$+WoVPnsFmE3hN#jRKm?%yG^ zF4bB(;?T`?*H)!>d}Lx)WMEtzVBlvU3l2gSF&2^T(yMDubL``jPu>12Y+ugu(p#MPH^Mre)-e~XAzsIL5+ r4|6#;al}L#r8cOEF*7r;@G>w6fEZ#73>=JXtlG%QjFpj%k%0jK3hCf^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4520450321539eee9eab48ddc83026d011e9a62b b/fuzz/corpora/client/4520450321539eee9eab48ddc83026d011e9a62b new file mode 100644 index 0000000000000000000000000000000000000000..3e86fcfdca7731759e9206bb3233391734e9fd67 GIT binary patch literal 62 ocmWe*Hej%1Vqh?3W;P%I7!GJNFz_;PGcYO|7%(sxC^Iks02dwzm;e9( literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/453218526bb2c4c7d56b2fa5855dd38056886dce b/fuzz/corpora/client/453218526bb2c4c7d56b2fa5855dd38056886dce new file mode 100644 index 0000000000000000000000000000000000000000..5e1dd155ff615d09fdeb9c66e6f390b5444caa1d GIT binary patch literal 2331 zcmeHI%Sr=55Uie_UC3j7u(EoIMsxFG?I8!fi~0fi3-RXN%prdfPz?A55d=ZOkMgL@ zE~|-bh~j0%Eg0zOp6TwXYM4ZcLj&|xxdgxg5TOUW2?R)hL{(o}&?o34^np&NbY^_5 zMrazC78#?kQJ4(CB;ADm%PtxCwu+@`=is*Ya}88)X6I7q-mT8=6d*tFkZ;p;T?w)c0wI=R%~K7 zN{P7i;hw$V`BmwGo3qKuuVl+7!^`Go#;@(m#x|gea8}D!re!T*q8hA42--)bvV990 kl2)u(wc;<-_5vOQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+z>U?3;XYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#hC`Su3T#aYk~OJZ5+%Y#d7gQxp|XM~)}$CTF)AT@fRUAfxrvdV!Jvte zi>Zl`k>Niau)gSw9G8p?b|;(H3o&gIn|g}9 zb^_yf=VzyOSIRH=qbsp5Iwk4q2j8QDEPCaeBjz$f1Fx&Xt}_1;tMBi%9Zj3m3Y7D= z?hBO_{PgFr@2>svwX3b-Yk%;2M1-^mSNv(6T)j;B?J`xax2bbV4%ZeZ|CW$sd?=Cn z>p;>ziT5v>oi9!Pn)kxKEjab!9P5(A8K%tG<%efxjywl9iLJYBarE4q zLaAf2Ir}<}|N6hHp2`1`k~+`Bk`1#$Y?l0SNcr_oIO#>`{Y;~&Qw~kt7P#9_^2^V4 z+blP{v)mHw`(Jn|LAtK5@5KR}F`nNf#_ zfl-5*K~_OmCiBAQL$>a3CdB@FaemY9Ag3v;)2;c+;%?R5{bujN!NCR#h7k)G831z) BV(9!7!c634ZZ zxM1oH3=9e>mS~mydjh~ZB zo!et3tSre)Uog)wl!2LvkqH#o+mv=ju`E@Dx)r3GksB$nS=fY=RW8dOHB?j7zVhW< zQ)P>Pe3(id|C$(;w-ZerrU+cwr>K>D&q-T%Clj;#zrTwcmm4%LF$iU036QSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhBDFi5+%Y#d7gQxp|XORsMa(wDj|D-k(GhDiIJbdpox)-sfm%1@jrFI zKMIW@LO%lo1H=FS{~v&8yr2P#tbcr%N*(_itN(8&nmJ4nxUx@4EBT(2w(d?QW@an( z#f{4i8kZQzvN4Cs^0A1qi2R(rH2-YJ)r7+BmlRxn*-qyZW%*=K3X+y)$ur1l_$jh< zHo5}OPYaj0lM-!Q!V;dK)R6~D9hoWVB>^Rw#R}lm(ZneLPkuaX%%P&fEUX61jEw)0 zMo@dWyYv0^@h*XQy^o$}jk%E3q#+CF$x1-=l&odgYrV<}yOV zrK`fOGXD~*@9(u8O`FsTl=HXl^SGk^>Ca)`UHju}S6ju`{^0kB2x$?n_|rPMdYSUu zWvX0nQ|F`{t}RafEg{MHP$Ko$fuwyB?_V@KUz+?i?}dF^aO%Z5)+LEEOs5^tk-fV$ zZco?C56{dUc@Az8TX);y=(#tAQpaR-_H`Wp^?z4Alm8_pb)JVM8)k*rEcxS*^6Q^) z(u>ghnMPBm9GbcFf%b4Fmc|58_3DV4r4bMHZU+4HW+ZSfh-heGQiK}MJW757L$vIENx`k UHb}HJuqngB8xLS-fC1c!0D??m3;+NC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/45c265cdca0b730592a11ac31edd8885c547e9a6 b/fuzz/corpora/client/45c265cdca0b730592a11ac31edd8885c547e9a6 new file mode 100644 index 0000000000000000000000000000000000000000..f01a0d2b6b16a5c19d5431c7dcb3fdb1a98bdc3c GIT binary patch literal 480 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok49MUgG6ySY7^FaxXm_Q6{ZIi?&&co- z6b21geM%%C&ffL$yeGD-nj~M@7Vp8Op77~B%=FD%Avfg2n3)+^_!t-%#Mqe`7#IM7 CA&u(* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/45c5090a9cd6236b4d47368023ed74ce8a74e25c b/fuzz/corpora/client/45c5090a9cd6236b4d47368023ed74ce8a74e25c new file mode 100644 index 0000000000000000000000000000000000000000..a65056fb70635aa6b9dd11b034af2b6f5fb132a9 GIT binary patch literal 778 zcmaKpZAepL6vxl=va3@!8yiyyZ6-u1$+KIAVJae)D@DU@zGb=E)rNK*dS?h3(;)h4 zFQSrKshCuxD1J)xlc}W(qL84JBug|z`=BUw;|`PBht9X>oagZ4|2t+v;3x)&C&b$~ z^FFV$ZeZ=x)$eu3ZJPeo5_d5TL_nbIKsztMXe@vZq5%{H2p|l=ObD(H23!fa0={47W+LSS5*h7TM`2bIR409J$t#DLYtXn9e)l9ruoTCzD6j_Urw$Uk+)a79sUilQixw~Y}f=fl*nU0guS&5Y?Jj5tkf zJ%zpGB2c}X&w3KxvJv@WaGx+|*N*b;HGbH0Zl!jeBCW*jpMN?&dv~PKK{w|z&rW?k z&39ynzG=!%vF~0R`276KdRueft*Yh0u?xremG-29v_~5sKNL+?=o4L2mkQ2zch>i? z`Ysm15g|fP&D7M}oXm)8@v>*$^ex48Z!05ze3QA=aWs`YtisgW%#w*~5g7mo0Qf%G z9(JAB5dr=pavN{A&iMJxw^>A~N|r_GkBA((Ru!YxNZi7rddv_NYor=R5Q+?eq zaRMvF3GnvXu)fjIbE>If=yjndxaIMbUs{`{|3`_txbpvL%kS5~@=(WWEbowB^_q#Y zvaToy0F()nnGiS}0>B7FSQvh3I+K3gz%QLlEPobnFa70Q*0#oMwFMR3xe+y-h6w~R P4x<>1)OCREJbv{X!}AVX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/45ceb2312ce8559b8581985a99b6ba80eb24c467 b/fuzz/corpora/client/45ceb2312ce8559b8581985a99b6ba80eb24c467 new file mode 100644 index 0000000000000000000000000000000000000000..e9837f8cdd7b65909f877f5b591ff8381ed037f8 GIT binary patch literal 688 zcmWe*W@1{w#J~{F%yc`~ZX%t2{S?39*%`L+4&-^RVa!xrp2z{SA8|DTb8k%57mfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys^@nw(Oc zXl!9(AScdiXl7t(WNc_?WNB<1CC+PPkHp2UsmwrtjU8+*6C)d|b|VXe5_1v*%ZXXR z?WU|jD?W&A)GlkEX!|8+_JQDuJok>xna9{{8+T*B;}4FBNhRwv?RH)&>5j~udOLON zwZ-MJdsdYE+Ob99?u+#&!ylY`QQ@L4Vs!L>r-o&jZv>Z@p!U8*-dNT<>J^Kn3?vLV z*_cCRg;|&k7!0^UOnw#?W+wIqWS=spGZ>^W8F<_C2^B9A(pxQgcKLw?GOs>mi5CP% zKEC+m>`lY96V7hxc${u{E2(bI^#!S{#|zufG8u3j(D(T=Q}*gQvrCq3%u?3TeJ!%* z?_IEM>i?&Z{A`70glv}lv(TQiA@PPS(b)o(JPZtHnHeM!S+uJAC&?JvYL-58`!!kp zRn_}B6W3n3&okqwjMnayxC`rrDuSG{*PPqQn8+FTOQ$bgr)NXumze%izJ32SB|Z7q zS80Fie$H3dG&@g3Xj65Lg_mmaS%vt`<&ur|-iP9}Vj0pv9TL zzkvZK8@pDU$2nUTMgvzvZUas>=1>+kVJ62=Ltz6!5QjsU%OF43K-Zwepv1sX(Lf#~ z$R#Y{nO9;^lxI+)V33(&kXcf!U{GS9;8T)fASccXaxWa9aj9iZ<7@)~sN0zs*;ut3 zSs0X=8`~II7@aR#%v35^!P#))^}_sx%SyIYOle)5ag($Y3%&mx_K*wg;pM8 zTKiHXcGI7OmstyAg`MVzJbv?J_8uW7nbnNzxqR5|(sK8GUS0q4q)B<&HMV$GpDkbi z-Vc5MOrHJB?f32Fb`^7qHg4rwU%LF^jHA_WcW=2Nj z1i;+b!vNDa2!I$fGs89>28K<{46+KkGMN`XAF_3SGa>fZi%sW$2RTh)Rj}qOi@Q~K z_gj(+2OBd(mqBAYlN00Yld6-FYRY>JqaFoSG8d#ASvIMby6vHpc2fm8Xw2L?@CI4{=mB#8qzFI& zFaUs#A?V+90U8X@K!Ex~G3o=wNZmdRMNm`+3>NqAmU#ziy4_Cc_^dUn;g;k~-k7y-L+x>s)tRB6*k2smQDMf6 zHqVS{>Woa7p4PiT|8zDzuJO}V?oEQ(`OgKrr!LIxKUcRZ$|}ujpCwahbV%!}-%7UY z6Pq1Jww7A#Ttx3^?4LEK(x^l@!_cR`wdC5N(DZH;LjaQR2^T@by#z5n>1;RX#8gKX5Xb(Gee+ea$(% zmpXBpVSRduS<%aFoSt>7LYvu_jOrUUwRK81``>pg;$_w^$}X{S+dDaa#lqaN1u_3_ z?nNnw$=U_JZ4X3=uaJE50P(^YY$xC?+$WkZ7`9=wYHezIeBV zekyGepKWroYmd%RZU3bl;f5)63;~2OKxT7bGXa1!nN23Kku4qH-Ot=|TPjDNok4Yo z)S-IEL5ac$ZQmGSz|x&ZL05@)k#FIFdpHy!Qs%eOo| ziF?GV)5UsP%WnD%NHvgVK-4Zi?{jv;iQ zWcBh5Njg(8OinK>FM6v@VZw!GX`g7`jjgh>lH^*JN2?U9jI(;0EVGR}z75%mQ!*bRucnkPsqK3q|Pc~uR+j3A&&_j>BY@yMLG zb+*nmHGUGW$1#D9UuVRnR|TKQaJWZ~Y_MJXYF_b?9sbPR*83CbN%^-Y?rpqJ?3r!m z$5{Q@p%-Y4&-O<-@zB@)wH1Mvnrg&5^8MucUmndVF${Y!cl_4qSNiFnmTS2u`+L7S z9$8PU$X$D?+VEuQ^c91S)fwB@A4muf^|UzGzAd}KyyGWM_rhH?x6+k8qHMbJ_r+8E z4!iA%FUT8cd(_nQS)$16{EgQku|aLqTA3%1z4 zy0)J^nP9SSkj;?zg#=&i@@O1Kuw8S^XHRjAQ@rPyY1SF>v+NRDh#mt!ri+hGi8fzZ zCgEMNd_LIVQFSVCebMy5^{@1KK8sVS@q=kQ*X}oevVSu9iE#JUnc}Yn1B{8tJ%+Hq zHdw-V){)|Rac56d$Lx(>!b`ikqM%*eZ)&F*-zp2J&gkrF|6mTK?kK(F#z&18eqA-` zC*uf7`k8)dRT8?e#mtg&PjonU@yvojmyrI~)Zh;OoiI*zR(*E)qLT|A>XH_eI~{)N zbll5BYL{Qe3()c`&v3{y9Pl1n{(Y0Bd!Job*yGZRjZe(ChJNcw$H1HXjD`VOMg&0Z z<(%eXm)4|l`P0rLe8&O)-A>BMSfkai$y=PQ9LkEHel>1OQSAA9n^C*V63dA}_5w=U~hp+9r+vKF#WS@e?JZ=&}+)LgPm)>yJ= z$S%~DEM?|-wBdqBvpqsFVy2v#*h z6nM(*IT=N{7&f#92WP}c26>;=Z^SbOhFIy+F$mmI0C+0Dp$4qsIe=gQ0aCoxrs&gh z-}GrA-lv7A4ro*x{G}2)XVj}B{n?^)7 z@dfcY@flKlf)t1LMKLJ`0)A^E<7GYr%(jmZoa{!IUt(Gu0g@Q*5451#+CO=d|GklY zBxZ|XHkC2-kpeU#c)V)tz0|x}6zcjuR}0-#$ES;nW5w+5@uBnfnkiX{gC_LWo2w#w z6vb2=i3m>1Pw$shNynpb5l$~ZK(7`m*qE_)>Z5=v=RE-PD@X!(z7FFKr8NMtb+@sE s!EIX!krW5u!tzUO$k7S}yIJ;VEy~ya3^9gUj{gS*iKtf;G5^570cw$ai~s-t literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/45f2402bbff42a25395486eda0fbaec46ab04ae1 b/fuzz/corpora/client/45f2402bbff42a25395486eda0fbaec46ab04ae1 new file mode 100644 index 0000000000000000000000000000000000000000..c952ac444bed83aaab24f255212281d66888a382 GIT binary patch literal 903 zcmWe*W@NBsVqmajW@KbyW?^Mx=iubx=Hcbz7Z4N@77-N_mtbdr0d@uk!T*d5j0_CQ z3=9ln3=9n73=Cq-jLf{;49uJi%xnzI%mz(N{|%ZLpD$o$Vq{_xWZ2j;W2VWwvfufe zL{GR^vd%W(W#iOp^Jx3d%gD&h%3vU5C}6uF+CLN=O_m4Ug5k)Oe!iIIz`iIEZJ1qKEV1e1Y* zfr){M!3s&_KZt$K{j}ijOLP0?U6K=7f1H7V;s5{t{~3Po`4j21Gwg$p{ddEbeQTKK z6;5ouVYHXw)tb}~|Bmx_|ILf&U~!yOvMgM$uj8uitxy)u4yDJzFLzmTuK9hz=abDn z&FRnHeoO)x1_B~cO;_G-eC&KsOL6JW6CTSgl}nbJZ{ShWj{WmwYg?zYQq5=U&zwh= z2sC_hd*s$%7O;Q4_5|sQ}3+!Tzcv}{HFZSSz-Sa=5 z{e3^B{<_3!{wW$zk1=uyI5IIaGB7R=y|_3BIn24iVa~`f z>E8QkY}Nk@YyB3~uG^usMd$mpIp(tc&u_Z_w|{9mmGADI`V(DpX0jIUf66Y&&sb=- z=0t%7mu+A#KeP1vq=l!oy?TVSLjq=H|670a+x`f_h`6V1a@N@fbwvyeH1La@?e;Y+ zmO4Mz@5uPwXIg0Vzu=`?Zp;K_9<~i00k64Mu6yxk-_o)v*He@%W{5AbS{^xH*1B|p zRO5Te-`d-krz9#Z$*=wuvAf5wJpDp!L|NBvF=j>v7Cul8VP<4l#lpa_jDbN$fnfo9 I21DWl0ROrO`~Uy| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4603d21ae71cc03d586eb1a1170712f6abb74800 b/fuzz/corpora/client/4603d21ae71cc03d586eb1a1170712f6abb74800 new file mode 100644 index 0000000000000000000000000000000000000000..7ebf7e60fe96d571b168d902e608849c0c48f81f GIT binary patch literal 476 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok)BuWbL*Bz#^aJt`t5B`}_Zx=;SQxmL>dvbK@nO+9WxaIidN55P0if@&Z&3rdFR~o{mvyI z2;_uh#ZrPG4af|FWH1CnkRAjP z5EvDu2B9J#R49ZB2HB`hARE3?g`i**N(Fj)YJDZLJI&woTqGm~ zh*C*wMUlWnPlIj;>=?ETzyx+6NKb?A0PGlydGo&xBl;XBW>FaN(Z&A{V<1Fa1OahA zN-Tz~$dcn%4J#WVb=ro_1)e7^O?qEe*|fv-60@$%BJV&|R{MEkN(s-4eoK3-$*A3S4c2A-Z7=o(1QQ`1F^KYmE!^-*pcb^K%3@Uyo3;1Rp!J|!J)rFCTQBNp4^{10m%6a2Gp2Bm&h zRry%Z@Dovnj>~&(y6qRH7>yejnX{wJ|f#tP=lI`dW;$H4LqMGjM3UjR-yaAgM z*Yc`TrBOL}GlQFDNkCu-tqINb9F&iSpxn8h%%s2tV?U0R6i63}H%rrNjg;B87T2_W z)r29N_YW(+I-a?DDhxAxgVIm>$@BOmzG$P1>C35Ho!!#d_0WR9~x7(e{jEjY5PCIbJq9Ntz-!^R44W7Ul@z7Z+F!10mTk4A}>g>K|>-UUPY8IgI_~ z>STL!!nwkWj#FNPYSgq4cvZJmvBP@IH)H1(&|$OD2*A%#g46Kk^1l}(3q_>WTRBv^ zA<&om5uC1<+%FP}NZ#@Mi12ulhx;5iw!jWB=}bD4X)ou-p3bm!XV@~Gm`*`p^&&jk ztOYz(ajM>YJ};gtk3hEoW{LntpPcjfxF?IE`GOcxD#@DxvSHK3smkHWhP5D&4XdK$ zIagStw*}t|C~?MCXAj*A@M+C=o77J<*zJ`uw6|+AzjxV0(8q9%CdPO9RU$Q(Kl@m3 zc0}pKi_M`|A7ip~J3|h*wQliooMz3KkG?N?wxqLfnx!%A`{C&K()6~fIR38oTLHus z0QvTTvT%KTW{vYVCmgVQF0Ii)zeqQij?R9dC%r##H*AXPTfeHm=XqzWLF0}8|B0-J zOV$(+CHmpSo0T=L9C8jbhMObN@A5Kz%PMXAEz4K?s`c*|%SbxcoDONDt6qhtm0A?~ zZAc!zFs|H<|Ilk1d(N-V3n?o@GTIxYJL)}c`!2dBHA$x}EIKrp`IVLLHFZ++O&q%F z_XuJXiXeUp#3Ksmb>^U-mtPEwiB#7~uTAGRci&KmhDqyrOZJfOLoC6t^{dX+ly|Nc z49n1H1cI@Eid80KVGKqI)cqx@DpepLA;R06Y=I+mMZ5(PXUoO z(42<|4G*TGF!18;S^%l`-AU5TSl-U@kbw-TacAa`1s3Wue}7U!Nyv~^W^--C9J?sj zOqon}zK1pwddNApA|NdnQ<#3++9&6ZO8gHUH}4lYyKcxVOQ;_Gp?=7b*hId6jT!sa1Q$?Z)+N1}8KG}>Z#$KJp+KK?9oReZ6E%YGHEim7HU z_GpK2*`3kQtdXKzQ)eO45Vof-dU)Ek>}i;;O0>Pyd2raHbc=&{pP1NE^z)ewk%Yj5 z_e1P5B+PpdA_mz=I2*QFC={aGGP<}>@)_*+CFI(3myK4%DS0L($3%s1r&9n~ zPPiJ*eBMK1J>et^xFip*Kok=d!wDC0Kf^8;6~F*Y1|8S|0Op3VBXIm=f>mF}BPhQGS>>r$QzG(cj_l~`;89V-EmU?CR-}`y+6dB z^(5H8kn%CW%>F~vXwRNwPWn(&DaxrtP4lB8^|mqQ@SAn6d@Uv8dK;6yVNS#E>{&Rc zfe=gbFD^CsOANL7XVWQLm&cARO7=Ms6{*h&U^=v&JeCwUGCPmzDCfKx%t+e)w&le~2Nuou_B8A0qWt%#z93oa6KWWMsKBx>*hRru;H==z7SI8$ zic&?+vziB%BZ#N+xO|a(c*v<$z$fI&@0t@n2cMq;K5yU&Jg{iCF$n@IfzyH*pkM+; zewNUgM%%V++n0w4xI%uifWsBi1l&ZvFh;}|q<+YY+Cns5ZhYufEXoq~zsJ`xnL=`P~m%g`DD%%pI<#JuXV)p^kPHzaasBKh~E| Pgul*l(KcK@($^LF1mBuq z#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7JBm-4(-~0wL^Hs{z;KqCK_ZbwtGa)ZjG?V& z=`*)qlht2Uy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm z_g_=elYf1c_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuAE~X|%#wJEa2D_8Z>xGz>fMJ#d2YfYMMQ6i%H3Rm96_YMc4a$kG4sSHQytaz6_zL<1)qqX8330|NsCvj+pr3~B%Xf_QRC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/468b6de1f8afb7651339b8efc49220aba4aa7293 b/fuzz/corpora/client/468b6de1f8afb7651339b8efc49220aba4aa7293 new file mode 100644 index 0000000000000000000000000000000000000000..c54bb0d6695b751bc418199a4e767bb5209b57df GIT binary patch literal 955 zcmWe*Hej%1Vqh?3WS17Tb1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHUY2I2n!^KmjKk zyH=aWIa?M+16MK|Z z!u*BHO14!@X15k_`7#MId zT`*v7>_M}Eroe}Q>0->x4BL1Z7&b98$SUZ{WM24u$kzSMgxFs%7?>CsoTji&x8^I0 zyH$7ho4pGM8#6-kdq-$b~t#7s#=!YD$}Ls9@Xs9}55gJ)s%Y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/469eec98ee5a95d71e476216d28f6ec4c169d28f b/fuzz/corpora/client/469eec98ee5a95d71e476216d28f6ec4c169d28f new file mode 100644 index 0000000000000000000000000000000000000000..7b7103c2cad072d73edd6daffc4aedef271161d8 GIT binary patch literal 5331 zcmeHLX;4#H8htM>3Hu&{?2%0&B)JKM%?2827EuAABZ>@L2s;LnfP%6l0?GgiDuNCu zU08~!Am|7!h{%9OP*6l#?G}+nL}^fj7Ewp0UIN`{^-R@N&95Hbzx&m__j~ugbH4AK zM??_F4g*0<1io@>1Kc!Y(;YhavNbPb?}4rCSO{kZWQik~100Chx zMks{L$l{aNb;|1@MVjxHJl9iKCf%>fZQf~kg;`T#l5?mcv-P4ua#5rk{f_ErgQ0$c zQ4vr4B0j}FdnQw*y_lHP;hDHz%yz1L!!9%TJ~}u5RIJqJ=vK?z-^!)9jFSuN@@tI` zZX}L&ymxeN)UDyH*4flxZfdWMnlU& zr)_VI;hE_I#;>~)BYP-!b=&^2XXr&sZs4%hN{^y8r{Ws2`!SOpvED~jPw@WPGlNk) zFE4u{VCb13T}{s_B<7|;^c0nC`qQyjv8nP;{rpR-c||+0=?42b8w?cG&z2dhWD&Gk zl-Q=%<#P41fm;}yOj9BPLs(@GYZ}HnV8_ zi|%01i)%AIbwg^#zH_#-yYwD^>f{~UQx!&dR|;>hrV-E&022{dMqCe|dIZuVQQk)V zJ^5GRrKT|L%K<_fSb^Rw39Aj314X<%84t60af>fl0S6%>7>2CxzXCNi2wu}^R%o*k_tofy1?sR^SOgFxEYVPM=WxH}CGiEMwcFTK zx(?7n$;Da18%tmXm~H0wP!* zgPys}9J@X6flrY=zEU*!z{jIG*J)BKL3^)T`r!VK$=vQ069Jz>l^Ph|k2{JdEw zxDtkvOW_|C7m<>yRK)$8WJTrMH0-LN~NimiAZ znp$j<@8z2`bZK0+lkl9Ev*Q`=Ri0tCB2%2^z-Ex2jjvO)zYfdIE|gRq(wu&`JyRn(DN~#sMGuf za+Oi!s=)9Z7K=bI9#HYJWIT++$-v53LqG!hcwOljz&Yws0zra3jTTAer^K_vscddM zP?yvcbiFLV!|)sih5!?d8DOcv0+?51n{(_%_|`arpe zVszfr8=OnUseA|7GFEz%{WVWLKFWoa)L2t@i1|$H!oXH&q)F$VwYFhg+L*;Dz@izX7dn3V_!v)!f_I#u+WM56x z(6nR8^AL5pDC+_H{vns*tv12~7lj5*1wWkg4JY~^ei&qxE@nP}5FrpDX}~uC#Ye;a}|pXVbk$aKwrC)3?I@e=uN_Pb2~58C-g z>CH9EnS}ClrEUkP-kpY0i5tcC@wz^gBqyvE|4rUu@#D zGnNidZJT7Qv%<hy$4JyHxwpRf2lod?Bvo(A z(!%3?i_C0ms(DmF?uRp<$yOCS^5=o{5~5KzxP)kyp2R8P03rv^eb$XIFdo=TZIdOS z16l>8f}CSE@3+{zIBFz^D?q(JYPzJ}iO)fc7duqqoxG&p$sM=?7d)1wM}oj=V7K7q zFffsV?!~vK(Y9~j{`qD+4xgLEV{`a49w&jzj}~xwDPPo9^yg6WQ}u0L>xk+(0ADYZ z?RhPG<3?h7#6;V8-)e)o*NgdlR{Z49)uQm$)KV#}Jt8XOGa5De+&|?71oA)DJk()m z*`6t}B2*vl9jnwO$gaKA^sMOBZtF3oT{5y$QoJb%FN%M(MkV+dR7WX1P!WDS~OCgXdrKO#nk78}3 zq&m4Hk-Ni?2gt|5&M-5-*_~yFN<13iUcm#pI1uOi3E)zJV5rcb1#Lh*RGFBRiF_{A z2u&ZaRZ`#^lf~WQClF~laB$sY$7^hxVQog{ozG8$QdPzMwGoB#j- literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/46b8e552df0beebadc21f858648f80b932d9e6b6 b/fuzz/corpora/client/46b8e552df0beebadc21f858648f80b932d9e6b6 new file mode 100644 index 0000000000000000000000000000000000000000..307e7a062a8cf64f71135d1be295f3ca7e00ad0d GIT binary patch literal 476 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{okBOHLjpkX6-|1`yh2eQ*9-HTfn8}cUT zoW>~(L(|Zh($ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/46c645c86a93c2a8da13ae9743936483988de7ea b/fuzz/corpora/client/46c645c86a93c2a8da13ae9743936483988de7ea new file mode 100644 index 0000000000000000000000000000000000000000..78af1c2b2ab6091ffc3710d58769b143b22590fa GIT binary patch literal 696 zcmWe*W@fNtVqh?3X4YD{t?kmgJu|bj?#RSP8Xcdvl>Iit|NsC0GcYi2I~r}kz+l6` zz{?=U!0?}ufsuhhoPj}%nVBh#n}I2bfhnGWDaN3QDZ-$M@!$exCPpSEPKMtbeDqce z%;quRW#iOp^Jx3c%gD&c%3$DX$Zf#M#vIDRCd}j*YA9?V2;y+?a0Tb*rs@WlB$lKa zDjLXx1i5%5Jo8FYi}F%S6v8u8(lbkn6#_~s6?{rO4dldm4NVM8jLsMtm>QTEM2Yhn zSeP0a8X6iHnHm{H!K^8z$eI*`#`!S!e}}lAxv`hQps|ywv5|p7z{CPK;9h~UX3>e4 zxp^AB8Vl6rQf1b$UyaV!b$+WoVPnsFmE3hN#donD+`mI+U8;0o#G#w(uB}S%_{hYp z$iTQbz`)NymW?@7mXAe@MWnm*>YCFW`}pKjxBm*;m%qI9R_l6jV9F}9NEnDVKosyp z73|M}DBuC<7iM8KU}j|ekL+PqRtDzAMh5E_6}eNd*=Btgmei3x)Ui%!^_O0wuQi3~ z=XEd296H?o=;gl7m?tKyJtiKqpSn)leV%GXw*M@FB}ISFe`n&^z{Rm7>e17ZIzd^> zgshYDnV7ncc8SHXs`|Y1SXoiN)E%A`c)~iA}&l5G?dDbOHua_zVhm7QTZ% zftBE6SXo#ov%2mg0kLsY%-77lhs)e^XNE~NF;>8~7XAXz0%DAScYy!{Al0HyI#9<@ zM^J~Hssm2t{#q-cittwM7>Cj3Y`qi0=e1e z9W$1k@s|4;;9Gt4W(8)dJH)@#Zi$z=d;yv!?uf c(RUXh)Y5t^C6C9myrA}3Z!ND)kH^y>AFlojQvd(} literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4701bac77223887e0e9eaac28c18a960b9707faf b/fuzz/corpora/client/4701bac77223887e0e9eaac28c18a960b9707faf new file mode 100644 index 0000000000000000000000000000000000000000..41c48c3d92deab7c2cad330288f161b7ecaedfb3 GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQisKLP8#K_NJ(8S2a)Wpch*Z}eu z4#0v#oSHx#mtk5U32sAI15jXxv#<##t6Y{nYN)2DedWu!rpgxo_%M|^{xvZwZzq~M zOcA)UPf;uRo|CrjP9|pee}5M@E;ndgVj#=L94gDlBE}-}bN15wvmI9xFjd>)QC+zG zl7h=G+v$9wET0TY*_gFtm09u(avI>qAuCvzzQo-Wo;pyXjYF7-)PWRjO-RX)2jmA~ z7FGjhM#le;xU>hyB`Y^5E*Tl@PByO>V%jD)^%Q&U1jg^q&ra>Glwa^iS7KjuO48L2 zzDEUF^vX9!%w1DtSrKqtN3*NKPQUUJtMBi%9Zj3m3Y7D=?(?{!{^`$Q-(CCTYgZe^ z*D^48M1-^mSNv(6T)j;B?J`xax2bb_Z0eGee@jR*K9orPbs%Y<#QPV`&J!ko&3j?r zmXdmLj%i8a4AW@`bY$;tjoZ@o^20MTN1lV5#Ma%mIC}0~q0}+ioP8a~fBoN8&*Xne zNuB3m$%a`WHcS3Er2P6Pob)2}ex}jXDTk(R3f%4YoSV&Wo8^XgmV1JI|LZT_>Ji5t uu&v8@w)F3Cfo+RUsQdiX|B(55{e`1%m3z|X{}*FsW?SQHQgmq6NrB2cto3yMVqfr1cH7G)8FlBytK5fO@1 z5eLxPLRADoP*x$bNTq5;ap_POl%oi?3aAXSjOlqHp`b7==g^tyO#gFo^6oqL<-T|G zegFUc-=m=ju)qPpMv=OTLG{olzE$*9@ueH)*HhCTTgbLll6@7HH-NE_0YDz;0w6*F z0)Q$2G!(&oDhF_W0Otd6UQmE@hXSPG2#P~+I1(5+<>*m3Cx-&%iKInI4oQRZ2tptL zxWZHpl8C4)o=C;nx|&j<5;l;fkX^z;xJ(zGFOO@g4Yjb7WQy9#P!2aDl*?nd1^EXA z@gf<{JU+vb=MU+s@}}m{oMpy>Y-kQWROL>C~}{vlb-nKeDs_jMkQnfDcTs&grhy zp@-{cM6~pT@GTPucPgIGq(wD5sg0-MmG?y5 zEV?8sRM6s94zCk#Iu`X~Vu^S&HFfc7khXK`2^8#lDxLsQ1QAVqU;_5QabQVzbV%kc ztKdQEyv6E`$;CQ_FVk29+cyWaGOuYgHtp){5$^VSXkO@$(P*7nY-E3ULG;Ge*>mzE z{@FT+qnskk=6iHL;>9Rwnr{gHPAlkzF=yeO!@V0nBR_C)J9r`@BN`v0mCkk2lABwU ztEZTtJl~b6b++#isZ7>uJ&U_@Aq_#m*ja~U-1EKRWvyD-`;%L8e+Bz$p-WOY9f?LXlJoEI= z&u5n!^w=0KuKGmdzIRW-hF*B;_$BHe#);7B3nJ#E6)QY4TbQS-%FilarMLQa%!J7jwwtj` z+3#X(H-~JNnPfQSljo02kyJz?aZ;Iv?du^`vYR-BC@bDp6p=yS2ly_dpw4sLFSCRu zbou=$jyJP5Ru<6ZKNz`NP(VL)r^W+$d@JiXS#7B4d>(yW=k|Dq+qC%_1DY}Y`c@lriBS@MTMDt(eGgujw2Cr_XdQ2@sIOCll; zWV{q12u>S3Kf?B2WBE>#fS>bB-#PK~a3U|$t<8`JUJ6xqeR5s~$JkEiD+g=G_kG3- z(<3-&6mG6MqSz>4JPg zdc0^nZy%H-Zpj`a0DxQo!1dF1;{f>ZUj_hR0*Pi0#j2_*qFs58aup{m#Do*EDbgg8 z%ZZBMa(srv3!xV)dX$%jc$sze-R3 zutLT$&dcr9nUF?8W%jmnwd!X}EH{pt*QTWJIK~eSaMrujm6qA0+x;!8fAv9S`;xE$ zUM9`z>!O98r|b_!=jV)cK51$BD2C^9`Sxr7NZ-!I?euDYbR$Fo>;B^pMvL~9Dp;%pW?qAfANjY9KGwB&87?Ejc&ZWBH$;i_F1PF zqgdpn_cViTvwzMFq0S=Cz4win)nh6r?ih^AAJaMF1Ui)SP1yIzH#cmqY-21Rw#rga z!9RylV?Ydrn|4k);j5MT_EVM$SG+8BD*Z`STPaOrZ|F|}36xjpRD0mR(VkvC$q@jG z<&b6H#h1**RnRgo%Iw&S4BB;FJj>TQGRjmFdiwj_>~m^X!W(Zr?S7~z!Xn!F!eYae z=w&ASHiFa0$z(y-~gkz1{J4SN9Esc3UU8aIfXEdAIFTHD^~nmLsmJusHS1;*5)v$Rw}a!CS_;BE>96eZ*}}#n&zRjzcDWK|hsTZGNho z8t|nv4FzNJO&JAZ!3044^{mz+oAy|xyv3IhSMw3q`#qGiks4cGllNE|n3Wej`&?;H zVdUipyBHUWb`iBU?Y~5QUPEm7K`txNENRrOlctISz_`Tz<GqO@y^OMxGqrs@rA_^K zylMXo641#8tJ=81I>}X?s6i%MrV~8YY3z_`T?>?NnYdNzZLV=_;Y@UFe?u`_iw)vG zNHNc>2#+b|Suet}W0HBMRT!(hMG^f?-++N9*fUsG*v^Mr)KoS(`0ici}4B;{%gz#4(OHo@1AvXeY%^A*+&v1kg zlfS=zCiZLNp*nde?eHercjCKYqv-fGSg@(SQ< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47064d81eada3b2d8589c75db7afb81a70b80f83 b/fuzz/corpora/client/47064d81eada3b2d8589c75db7afb81a70b80f83 new file mode 100644 index 0000000000000000000000000000000000000000..2ada10fb207508cb929b78fcf782814d242b5825 GIT binary patch literal 741 zcmWe*Hej%1Vqh?3WX%xC#Pj`!`C8mpiNFMe@`19KS| zcp2U?aQtUvU}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItk^Y8BsK6EvT6sF#>R$GIIQ8oWsM#-Yf4fK8s{UspOKw`xv`hQps|ywv6173_K77X8cF|s zKVMjTv)gs~-jDA4IU}l-_L{Ftzg3wXUvIA`Up6t_&ESGS%XTHX0_FV96EAZsty;?) z_>W8tD?REJ=yM|3e(|T|Ia>a+ew{v8n5WUIu|QoeRc0Og)#!X)=eODuHukJn$zAtS z+=}(!{v9&wQmv&U4&7XLZB=^5M<(Wj{}~qt82A~;vN4Cs^0A1qh%}d8U2~daAD?{c z_FrN9a+a6gYF%#%3QSpD76}8f29a(o3JiEa3WQl$4VW1j|08>tm6d_Hv5~?0MMdt^ zYqnY6g(Y>Q4|S|lTK%QhCAcF6SnWm`KCa1~oBeW(F2M1_lNZW@ZLPMh0eP1`PvFHmr%~wp3}XoYw+@ilc81 J2{yH^0RWAm?(_fv literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/470e5b2eaf9f3dec2db0dce69f893e3352f9e8e0 b/fuzz/corpora/client/470e5b2eaf9f3dec2db0dce69f893e3352f9e8e0 new file mode 100644 index 0000000000000000000000000000000000000000..0ebde9000f9aecb60c399255131712d2491860f6 GIT binary patch literal 544 zcmb7>y-EW?6ot>soourC0oT=yL}FH~q8RTYfnwS^W!Acb!rzCvU+3E9TNk15W*40F!C;}By-0!u_3002D|BCj=G=YSM4KvzHj zX}}>8UkQi~L>uCh>*9m!;^K~^U}>Vmyd1n@8qwLC%KNGkyx}F-G)O7mmh5{rTL$?m zmW(rVZC>B5dDEQJ&3JM`muFmKmrq$Ax615pGxJnB70Sn~%d1eQZ{sWDzcy~zW{>TD zbSaEjFau#^rYxn9G6taQN~z=!4CP;-ETok8Ro>yOL4LNNoKWyEdJEZt(pwntG!Owv zgM7VzsWSM(F#?2e2q-np$L~hxcr8*q@t(I{GP#GJh1O+ycQSiBb3oSN W=>BFtaemE5&Bc<{XcgbuKW#dNeCkoH{&ZCkwE@|Tp{2E<`$Bjd((^DLQo8Nf-D3($*=T_`az09E+|cpd{0h5!aYp{g$_^a=V1eW247ow>eIBQ!Bq zO|UGC&lcy4*Gwc0z-g5-4z;#nZdg}2`(B9hq_HQfV;=g=B;V(Z^yBDV>*w|QV32({ zko+S4RT?KJpD!Q*)JYF?k{BlfrW>c&IgD?byZJrmOO~P5W!DyVuk{%&y?SV8ytryL rxaAV9j=!Vh)AnsZ_2D<0QP(BhaSBx#bs(pTviWA;5?R?sk^U8L?uhUo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47603f290f3a82381a943cff8384d7e93dd4a57b b/fuzz/corpora/client/47603f290f3a82381a943cff8384d7e93dd4a57b new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/47648083d3864c4fd76c1dc90c7e7910b2a1626f b/fuzz/corpora/client/47648083d3864c4fd76c1dc90c7e7910b2a1626f new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/476d331b2164899718b97900c03c0fc330ad03cb b/fuzz/corpora/client/476d331b2164899718b97900c03c0fc330ad03cb new file mode 100644 index 0000000000000000000000000000000000000000..129f626ec69c3e0428876b1c564dd8dd7244f87b GIT binary patch literal 15 WcmWe*R%c*kVqnf^5MgF!U;qFIV*u0u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47880e581db7d5597d964633910974dc5d3a279a b/fuzz/corpora/client/47880e581db7d5597d964633910974dc5d3a279a new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/479211e96659f789c9acc3d60eeaee8855b36c16 b/fuzz/corpora/client/479211e96659f789c9acc3d60eeaee8855b36c16 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/47a20c330833be60e2131436c571b96284972596 b/fuzz/corpora/client/47a20c330833be60e2131436c571b96284972596 new file mode 100644 index 0000000000000000000000000000000000000000..377c6f6be90ec7883eba3683eefa5d2ffe91570a GIT binary patch literal 379 zcmbV|F$%&!5Jms)NJJ%;2{tCF)TH@aMAQ>_2ajQCW8*z+#YQ}V2N112iiNDKWD!X! zAIuCh%zQo*2{G3|DME5YlGnS-zide2QUD=VfSo`AF%XHUaSuvdj|aEpUbH&tjt#uP zAZX`>*2zwE-=e}c@M@U-#qu`ODkoFYJ^^?qq>00CQ^#aXf}OpHuSoD4U8SZ;aN z?tg8-$;PhL=5fxJh0(y(klTQhjX9KsO_<3s)KJ(!5X9l&;R?>rP1Ox9Ni0bLGq-T~CD+H8OD)^M77|4n98k!iG7#YtpHZn9dj{QSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB#OaW$cE`y~aJU$)cvL|Hx=l!BzCS@H~W8h(l_osF)*^V7m5 z?l_|j>Uc(^)WHQ!9eL2yQ4&y+S*!p~9Zg8dkB5ypR8*LS)qt6i@jr50a)aZNk-_d{ z^LinsZDLbTvDZ#u{O8UH#yDRFFlld~?KHMyMOQD(ourFR}Xm zUfa>MNv%LRf9pPvE9#&A9QNI{KfZRgRebFaevgQd7U7CNt&^*lDZgE&%JnvNPRZfg z;^f~Fl8g@}Qhyyt+9&b;MYHpz$zStc*tZ3zUYuiHk~qV3+5sKeyIbS-biMrW%*>JJ z;3lzkw=IsIds8TNOg3j<$MIkPchxibUs6)%d04VxR)~$&ABU7*|AdoXgx=3InmXms z)NO&g{UpEqT(`|~!#m3@!M^|X7jN~5lioI)y~{Y@ceuc|MJLpKe(Hb7e7*j{(YMMy z>GK1`n3)-Mco-Npm>FahbY(Ixd_H9B{$@h#uNRxn{|<7R!aCiWuPp9X-Q92YE*u`eHyt><5G;7d1n~6Hnwb+RERw(Ic{TIN5jlev|UCh2Sp|7 zQ1;R)sfaqUBgvsAijwSV?<8ANHYIkFPR{zx&{1ojv({Pby#GDVdf)f?J;QA_42IVj#pt#hTePXLv`D<3SZdEOBxl!RKL3p$(9@hsX)dMv;ade1ZhJM z5rHw0N)RR-!h}GWAdrRG3bNqql?VpLU=*PF3ma)?)&HgpRPYKGxt_VRDlm-0LBNfn z1QhTH8;jS%xUd;oKm#@8l@S;Mo|PX)K+0w18b%g6R?0a2-H?#*aB-NbJ6^t!-)PojQGUz?}u>^A})l0I1eKh zL*^98sT+C~4UjV3Z(F|G>8n#7*A%wyCSPUMmYU`suFPz^WRzSS<<7XPKGsM!OfW7M zNM6RLIONP`s&$kQlRCW;H%d6pRc|@v7Cy%o7FXqJL#}>}+=K0Ws_O)$sJ@`i$OUO@paIRavRn>^w_+d*c z?{w1RoH}VS4UDlX0Wp)1FZh!U%IJA5EDj(rys$iB9Gb8gT06EYzGT2Lc2-NrQm=hq zE&1$BA@h$P5~F&l_w?KUv3K}oYhKWZ^=i-JcIT2>ipO!&U2#6g)K3cj**l9-zMv?7 zGI030C|$$AIyCl{QOq=rWA^Lu*Kw(e&-??*Y6Qi*u<1qzxSNcWG|!crsAUs$+0?k^ zHx&vE@!K$UGy7j9j z4BmEVShnj_#`@_{-0*E`AL%EzQ&WV(Eso^Z)5+*q9x>o|lbg&AoED5U%RsvDC@77Rl+0i?R8yRtT1+fxSPf4MQ$ z))arS;ELU}`+yQHH5gvkWnN^v8TZZD#U*suY%Br@QcAQ`Jh=St1xZ2?Y5fikjiCp0 zP(Pxj>5lqELJ`S>#}5zVkz8G*+*ko?z+$i%ES3$*jSYio<-)XL*|Y2e!TM!*vi+Cv zRMb-R;Paz+Tr>j16d20_=zn%D;^UGeislPqL@6W>Cdh)x%Tq<+$%54&kOeDZ(45OH zuseeu`W8FjtFne3`g*qHIZx>%=yo_pxZ%*6d_g~$hfgMjX862Ja$Vi+&{2+9i=2f?@ulrR;tZu{Y|No8tPgZQm zHu;G}>NhNYzfwxlxM_b>9b5S(EVab6z}qir z`0|8&7vWzbL;r7#E?ekyew&ZR)x$6Ai&t8a=W0faLaCarp5-Q>rQGd3k_` z;ROr~0T${r!qR{xu&7*9X_l*Nk}OIPEgcNE;PB(=905;Aj}k>mTb73MqAi0+9jGos zgoOuEFgSR5cP)Wb^WhBXPHfbkiQxY9L4%HrAyYimX)=FCLXA%!tjOY8iaFMiP8kae z3zxd-vmr+vV#|F~b8rP|_bfcK?cL!z z3V+L9Bn@%?^+QV9DxEor1ATLH!A+Ngi3d!3Y~Oorgp6Nzu+(dZj5CF@(i9D-8y?LT z>L$FMV5?4Q<6lKhGRG~SM9De7%WqE@+zyR4>)p4}CG&U}SnGI23XX>qxC&&|9Q=uP z;i~(iA()GRog)taJvw3uRq0kxZ{Uzk;(#OUsYRS1JCdEXC?P5>?1tnZb z%Vg0*@_)`r5^zbbT!APiGKLc-;{F?UR8#;Hu$T;B4FHf1V>@8?*#zspj7MA&F75v$ zTprwbsi2vA@c6*hB`lo8`!8y8v+UNol`KNV`7-x|G@q`iy{^}ZB>`05*Ll>;)PVDE zCqv@;pu(RB?+GhdkJ{X;b_*oM*KV;XckY%tm77J}e%iA~C$YkS$7;e==J-lvjUP7g`B^K+XLikUHre6jDX)lNCZvrrmKZlOw@B(6AfAws zN|B9c&(Y{PN?$|C&mIqrN$NgUWko0YmyP$fREy}sy!o?VfUNeJG#o$_;Ds;H#lU#r zAj8fIFaW)hT1m+@U*we|;L)PEd=WZ3P-tcB3AyM~bHb$TdCS=I0B*n)k7XN>Ag~tL zFKGb=CQ{M6gbsB2&Ye5IyiC9q@{6JE|Q;V?(p6~)XW9= z2C;na8~K|z6VoFn+b8f S>&hm>-ex;%5)lO6r2H=+GWg#B literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47ca2c7bc80158746edcc8b0f58af0808036ba55 b/fuzz/corpora/client/47ca2c7bc80158746edcc8b0f58af0808036ba55 new file mode 100644 index 0000000000000000000000000000000000000000..e84d0a41820ba0ef748fd2768d1fa5667cb64e33 GIT binary patch literal 475 zcmWe*W@fNuVqmajW@h}w#KOwP&cVsW&BM#bFCZu+EFvl_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO16859{HfRTZLAvh=i%EJO0;6MY;A`hVI zw{FO8aPe>rz+o1uVyXZEs40vLzZn?W7#cQm_fK2E5ApKPSdBM9C+F|^%@%GkD{Jm4 z%pg+$g%lCM-Q?F|sjvRgXAUe3Tp!PSV#}&Y@|A7z9$cCUpU%VdZ{`ZQAt%Pn%)r72 G5&{5^jgV;o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47cd98babc2f0524a0de1367636f269a850fe273 b/fuzz/corpora/client/47cd98babc2f0524a0de1367636f269a850fe273 new file mode 100644 index 0000000000000000000000000000000000000000..e6a2fcd56f1cbc8ae7de3878682102a0da559a02 GIT binary patch literal 18 OcmWe*HeldoKn4H>hX7Xq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47d40fa986fa7ed8d9aaa2a767814b0bcc543be6 b/fuzz/corpora/client/47d40fa986fa7ed8d9aaa2a767814b0bcc543be6 new file mode 100644 index 0000000000000000000000000000000000000000..c403eb8dcb03f71d732b8c78cefc2353c2f7b803 GIT binary patch literal 1693 zcmWe*W?%?pVqoxPW;nm$#QSh5b1>fcIib|KJ!ZnnlFal4^9(~3zBrf} z1gb8LWW8=98SXKS`_6}3v!A3sNUL0V^w^7*NAU-Q85mgqGcqtTh%qy;uH-q^>V&u>J{Ixb_Ut@h@%b|y>mhCs{zBIl0pV2qn zguFsov6$}1%r!6E9@ZZ}w{LCZ_bp}rj-BoII?p1p|H%H=I=_~D_DNK~z5JcT#V4kG zYpt1I7QeFj&8mC${}ZMgQM3BzC|H}V;PXE@|eQ%Hz6= z?R?}`_p5XnZJE&X^y=ZK%+pKHZ`jl8S7K)${_O~}s&V-(yDNzjYgC`laENEiTwLS1 z>#*{g;|*(GyX@J>cmI^*`p}N;3^%4rc0c|2Wd$=6qdWuSVtoT$10FW!P+4I{#{Vo# z1`GzWAf76Vn1P5k8wVRBD=RxQBO8Y{gvEp$q}<>jWn^#_411Oozs>D(!5Z_oE{3K1 zQ$%tPmo0j-+`;f;g^8>e+Zuh7@4NJslHLj)PMuabmpOd;mU9>TTeEgEyk)$eDr}(t(N7Dp|QyJO#t)`{Ka&*l(n&WVML67&e++)sCNqUW< zkNmk3W|g~(F*7q*GBGfiGBXoO@C*mE85npOlo=SniJC#2fkBL!nQ1RK1Jh0hrfm#N zn+=+n)*Cc2O@t(DPKIN_?^---_rEsaWMelnHZn9dk1}X5%&dHR{A{G+xSPZ?E`1v%^Ly z^QLr{VF&B?Q0Bcc@8@>z^8GDmoImftiq+h{Y*yQ<*SNFpyOXY|HKV>=W##8sPv3~2 zB2L#T#L_n@GB6!8Xkt2K(8Rb3R-QAW6%Pg?hC&7ckm8xsSs^GtzXY>TH;EGG)qoc2 MQRYU*2AH(~0MpszrT_o{ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47dc5b070567f17f6ab071b291ea801853f103a5 b/fuzz/corpora/client/47dc5b070567f17f6ab071b291ea801853f103a5 new file mode 100644 index 0000000000000000000000000000000000000000..b89a09596383a5e454d5b94c23d14f4f972da20b GIT binary patch literal 2899 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e3{YUnvHb*BqM*w`D4(5yftNv}=15-Q$Q;b0qQ-nbirP1Ox9Ni0bLGq-T~CD+H8OD)^M77|4n98k!iG7#SNGm>QTEM2Yhnnj4rH89})uTT_B& zO##H3#`(zZXJlnyZtP_+XzXNaY-G^XKC$eW^xRDhJo-VA-LA{`estf@8BwjY*L2-< z)wU@M8V+ocFPoU|W_Us1#damR0_BNCCtl`OTD5*};6E}|tn{c?q0fnA`^BG<=VI&T)s#x>RfFh(kBmU0apj@sWv{ zk%4h>fPtTZEE{vEEFX&)i%56r)itL%_VLN5ZvPdwFK2n_t=9G6z?4;HkuVTzz^;G? zq+ghY)qt6i@jtSMSwS9dWUziwkvsL8ZPs^TNge4!9qW`MPGJv}TS9e~XAzsBZS|4|6#;al}L#r8cOEF*7o- z@G*eX9787y14An~QP%4+cE4EoWMcO{NYMTN|5IOlPs)GeJrh>!Lra8lk&_=mR4uFb z{G7o0=#1_qg`KX;K8o~)*($yNTvnHLV$;v)#p*|-OgC!0bkNk<5i9c`?&ZPn=QlnQ zR0;ZT@v}zu?!Qw-^V(M=iTs$sSiVYM1QY>`V$6)}7qDuDByxjL1BOk^46+KkGMN{w zQ6dH<+&>?(b$^rh>HnSo{~7)8UH#yDRFFlld~?LyH5CDtIz`7dyDIGTD=)G7{$AVBv`MW% zIe+Uuk1Oh*{v7t*wLiXgwN-rW4}On`kQU*HKdqCimu<7$@Xm4zC}T51%9qQVor8V< z>o4Bw5yu{|t;=|}^zU$iZHrE*`~1}ZkokK3g`;nkd(!6zh%qxjlfu^7%nYF57XeXZ zAy?9M{Ui?%={``YiZ`ku1t+v9B`Rl%JC-e$J{_`ydO1^`_Bpc~SI!(#XK+-;m_b-~AFHHWL_rks{IQ8Nj(~`szg>YCA_W%EXL{$f^ zdqDtHAUH5FFxW6N8V~>s2ZR|IL=cs=00T%b0~Z4Wp1PJp!V^>p&M=*JKu7lO*0?=g zFF!mpbL2U=No?J1i=*e>6iOYF&Dqy+{MY|o^-TVkl+<}1mTZ_6VzcCrL&~pz!bvYe z?`N7!opNaEw!rm%&$-$B21OnxGUt(@j9_NPUM@rG0V)^v^fHtkOXVYrrShSddnm6a Hsq9h!QvjCH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47dee10eaa015ff2e590df5b8123ea0d15355b7c b/fuzz/corpora/client/47dee10eaa015ff2e590df5b8123ea0d15355b7c new file mode 100644 index 0000000000000000000000000000000000000000..da16a8487f631149843b76e9b9a423425dca557d GIT binary patch literal 25 RcmWe(Heg^7K_v`8000!n0u2BF literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47e9735be82d62c462278e0300ff98d06cbc328e b/fuzz/corpora/client/47e9735be82d62c462278e0300ff98d06cbc328e new file mode 100644 index 0000000000000000000000000000000000000000..a39312de681a70d3c669561c1051bac5aa1a7cc6 GIT binary patch literal 1529 zcmWe*Heg_65(AM8NMsCHbg`m eNtQv3nVEr+8%#pj24MCmIT`|^Auw!101N>5R9cMy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/47ff91f0692c1468f74a1ab260bacc428871187e b/fuzz/corpora/client/47ff91f0692c1468f74a1ab260bacc428871187e new file mode 100644 index 0000000000000000000000000000000000000000..8f1884e8d708091d0a0fd9f6142d88e2bc1d7ae2 GIT binary patch literal 557 zcmWe*W?~X%VqgelW-3;^&{kmYP#oH^LBL5rP^s7?)4#sWur4p>sLr9~w;B{gTE25H z*tnd#AN85K^Mn-N{1_M4r9s@2m=1>-9VdkRZL<2c-UPChjOG8UT zOJf5g<0x@nBV;ay`o{UlCNi=zFgNxx7&LY=H8!$;Y4R~;sWfT0wfobY2Uk5D{1!f9 zxisyn=!wgR>=p-WES@rB<#OSVkJ}D%#w|LzYVVG-u8x<(r>rm$vJL+dXEJTw>ARnI zF`R1+w@{aGS8R>FIg6!qA)8IJJ?G>{s-G7#ou2Q}65$h&7MrNFe$oBIa}q8vAFMFE zV-{K^@hS3^%w#PlW=00a#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7>jGq_bAz1T$l&!) z`anQ$bfv~LHqV=N-#JDy>hdcdN8YBDO)YdZ^Pd_Ycai4uNnC;c9{0T;O6WUnIi(-#}@rrS6tW0$H2fK#>~VZAi~JN)BbyQ>Z|;7&oyLr GD**s5+rlsa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/48011934c31d2d67c6553911f39d476249dbde2a b/fuzz/corpora/client/48011934c31d2d67c6553911f39d476249dbde2a new file mode 100644 index 0000000000000000000000000000000000000000..2e16626639f927e4b0620b9f0c1522434d85b851 GIT binary patch literal 936 zcmWe*Hej%1Vqh?3W;P%I7#QXW8#D?RE}=yM|3e(|Sd1_%FHzfK=4%+qMqSfDPK zDzlFLYIMG?^IPo+8++EP< zHs(-SJ{B<+5tJ~20Z?GdDziu!h&5nWzynes%))BG%*bef>|s_H2Ij^_2ADzg2QiUG zsSRpk%*+fwco`V#z4*l$7;KSKA`9-6n8M7&$OKA>8+`Ou3(V$0@fac{hOw{-GdYGD z3LAhe`t+TbfuR9v5gTff=VM@CU}0cjU?6B<6WBm-(&pev=DmLX`t=haf-C?4WfJhs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4823b3ddf2a2c1c4965575ec0ea5415fba1d8a2d b/fuzz/corpora/client/4823b3ddf2a2c1c4965575ec0ea5415fba1d8a2d new file mode 100644 index 0000000000000000000000000000000000000000..db017070f3b46a0740ca3f4d4c2e3ba5ea1cde5d GIT binary patch literal 3154 zcmb`Ke>_zA8pqF>GcyL`x5lrGK`OsyzGs**l##3-sZg5Sl_gEXj3&d(*hpkXDO;4v zQkQMI`k}g|XlcuC@=`>y%C^)cNlHJYHI>rpzRpm|Yw!JQ&tK>Joag&J&w0Mj=ly&S z1wkMm90binkd@wnJ{Fy2na}DjjD*gvqRxM|q&>e{sx!y;j+9Jom;=>0Ly*Y_7=j_l z41yqg2!eDW91KwqgsiO#kqHnP2jRB>B|Zx%5upmf!8jZV6~5l&u-D)r&?9O)b%8b!;o*rUI9@nv0*tVMj)_j7L=rC+&=w`~Q3qg;84;72pNw*WG*KX@ z`KHK)5~)a@Mhj#Ds+k_jLIIP5dawYK8EK}6vH{9u1I-l)gn#)e5?RMDRxFB>NE1b| zCu=bwfgZ03n9i512TIs(>UY8f z2vNcY5KzK8I3)~2=YqHIcag&h9l>VbRoijy*A&$A?Sv*iYBZv?pz~VwkLnE;8*Ssa ztE;%JYZ-dYm)_9GR><8s+<-eugK>rL)&-|)$MedM9Nn{GcVD~wD)q<>E;AJWQ+#{h z*JV~2UBVfa!@Cb30TgabLYJ0ldk&$5(<>A7cLeXN+WWAQXm8pv@~DkftGl%-v0v-uvpbIQs4{&8nT_b;~{qf5?!)!)P(!`0NT8`L`wr8XaYmy~Do()sZ4 zQJhq5&+1K`Y2l4SURBF&IhfL{qkg5xB@VkV)rD<)57a{K=Uw7SR&r zGIZ(;315~p5u*{Ff;TN}p80AlZSJ+188_$aZxzCs#pz1`8H>>bhCkqO00K5dgg3(; zZw@F~l;Cb6#j5tT@W*doDXK57vAhteU;taporbpr=73DpaVEle_;wnO00R<{7_T71 zI2-^INpS>ofP>0jW&0__|M5NIsRc*S#R?9F*b%gfd#TFMOWDOR@$S`^b?4Vt?YzJl z3An9G-xv)qY19rAXB+7)}u>5#(st|J2- z+L=}PKo!-G6zxU#ePuru9MtD|U(c#~QQZ1;*D+BkgLw|d0;5CqZVCYPi zet&R9PsT5*b&_p$zlPb&1;~OsB-t|Y=5nw3$2^GnKQA`IKh2ocGw}93nmo4ex78!` z;EIJeTb?u|SXN#S@1C)EhfR}3tW9faIhXIeg(VVfX|lKyU^g0G_{)Q=V8g3U&n^_v zj2hkc8{$>Nu^S5=+CrA6^i@A6HJiS_VV6)9(iVUe6(N~*XM55sxNS8(ZvM#^)D8~y zdaT^i(lLFbv|Oskm5O|+Xo4+@M?lf95u){k5KZeg77O!o$4(N~l8rJ>WC+eTUk{m( zH5HTfU+Pq!i1=F@V6w)W;$R}66G_ei7?xldZwF|A`jIyP&M}_kO*~zeww}LM(+7-+ zh|>fXNPq~#SeFDWOxRRB9k>7|)m+u=oLOH?T!T$y@TFoIBVHb_DKI);Dh6iQG<&=u z(4U5ksr?i`A^Q{Wj?-Eb;4d{*7bafu$|wJvmK! zl9k(#48-R@@6s}CE#5YHF_wM1v(a}?@-BxP9;3laAo~{$9)_oT?XzT?mb%lM5_jJ= zr0(A$vrPKqIZuDcjQAvei22l|J6_A@^^W?ao>kDmMXOtEOFOan3~Qlyx3>4*!L{0U z`df(y>t(jL24b@M^S0V~$&j>jV%eSU?jJQRBrHW%}LKec=< zCF1+8X!pz}RwslgfD*|7O5DJt?2RuDOidI44}p*`Wp9XWHg@pP@=s0?#l@zguD}_y z=$g!$w9vu@{1mBx<|mNKMR6j2tX%N<0D>U^FgYwH3f!^t28I9*;9x@(0C4DU!OV2+ z|2R$icdncB!Jld~d&`xXtM1JgbNZ8OQVTk24|OgXE%&QN2AA4uk+$FY2P4kY@n=Hn zj#AEJLQO(u^5KDo)kn{~$m-9XYw&}^?dRDer;Zjh7GGOv&N3}MRUEK~9@_kJo8M(h zVT5bgi(J>NjS;8*7>ZeU6UzI^bkuYPtE(=cEM3}EaOoP)x%Jl~ZprMm*YDlPwn%Oc z8R+;e{kTOducztR&1g>e!>G`muH#|$?Dug4E%}E%Eufl0oM(Zq{y2x;ZcRAwdMQ_8 zpk-a*Lfy66v+o@{+{CjZdbaaj?{d?hnNQ7;xy$j%4^O&z-{)M^VsBYflJ9= zkCWH+Qzo@P3>445(0@U8RB%EI3RJ3lvJY`_1%xF=gW0U+A&2h2ZZ(jUQK;58v+ zH-M@bz*Xg(<2Wf~zEn()7f9q-@A#}{nWlL7u^KgpOsF{!_ya#8o@Y&iz&zmjktR5p z;)<;$^I|YGC(EgeNd+=Vij*&qF{FYdiA*GyNYlQk?RgNQP(a__H%<&$Ofk*@#7YIJ zZJ5;9n4B3mRR6qVp3R5h;iiz=ew;HufeiCsdD;I;Xkist4 r`_o-kObgD*B6rghlrMe{7EJp+z@B>IAc%z^j+gvZC!bP}H(LD{TRuhY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/483a47c4a1b14d3fd45b9bb6123d2b9eaec521e2 b/fuzz/corpora/client/483a47c4a1b14d3fd45b9bb6123d2b9eaec521e2 new file mode 100644 index 0000000000000000000000000000000000000000..ef1e6f50b1d41f8ba4837de5b63c81b8f776a11c GIT binary patch literal 695 zcmWe*Hej%1Vqh?3W;7rG7#LU?7er&gOs+jm|@Mpjk^16MF%V`l_=LwA0|Ns*)-=vXc0VI4 z19M|9gF#~_Qz!!i0|W2bfBzWHfBN|i=0Qt2*GJKX;0<-X1sVYAg96A#%>U8ntRUbcJm`-*&3eQK5j4O9QXtI2YQSv3Xn^ctR*;7q W8PJr|9f&bAGO+M5FfbT^q6+{ZeX!#I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/484424395f7e7f99acb92c49da323033b3fb0bb2 b/fuzz/corpora/client/484424395f7e7f99acb92c49da323033b3fb0bb2 new file mode 100644 index 0000000000000000000000000000000000000000..77fd3e1bb9f8a4c3dd4349d509162597235b2d4b GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W6LJA%YSJK?qPVFaTo%IdNVT zIW#UQ)^H)L0T~YhFxsGTwt)cD?M#eptlEt%49d)nZ44}o&KE6aDiy5YY&h|HVgABp zCEF^dv@TA$+4)%D$CA1CeH-tc9_{PIE*azj-oyj}Vj0 zYR2_kKJ0dBx%)n^u77#bq&)2!TRf}Jmal*BhrWL%&wl3i`}T6XiaA9aw{op7UH)*! z(dxJIuh|}%JvekK=fuLJ5(1iw8a3CdB@FvB}`KfzuRL1#7;ZID@*o2KELVY|IQ@2951ZPK>ip8cedtVz_kA z&7fIb_IE$?W&^F4+0N^x!rUZaaOy>-+*X4qKLdN^((Da5ALf{E-oO7e RlVfRn+WiBYb_g(#3jh%B?Xds= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4855b2c760419be7de0effecacf3e576abd35d73 b/fuzz/corpora/client/4855b2c760419be7de0effecacf3e576abd35d73 new file mode 100644 index 0000000000000000000000000000000000000000..eac5191b4054c8feb8b306b1146a587f25a15fdd GIT binary patch literal 476 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok2(Smi#01|lh0p<|`jG(_0|X$8;R5my siT5b-|4?{HfCXwWh+<`61cgBZk~FE{H>n!10WoG~1{OXB1_m*907Y?csQ>@~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4855c42f2a199d527a8d3bcbf48e63e623221c6a b/fuzz/corpora/client/4855c42f2a199d527a8d3bcbf48e63e623221c6a new file mode 100644 index 0000000000000000000000000000000000000000..f1a1bff1f8a6c09bc3f3068a4a338fe45760e6a3 GIT binary patch literal 6599 zcmeHM2~<;88onSQHQgmjG=+5hzly1;rwQKtTv8i)=zrQWYdDB0`ZW z;s9D(sEQy6$|^(_sZ^~fE*_u>Xh4{$tv#KY)Bl{Dy!+05@4k2Q zegFUcUuY--EN}prqew&5uv++IzZ&|g#PSUb8mSqNEM(iN$$oQIG=Yhb0YDz;03bvF z0)PqtG!(&oDhF`>0Ot#E-jI*;fPAFsFp5KPI1(5;>Eu~FH;)44iKN9Tjw!?P2tptL zXm271Nkr5QPo&~(-At%Z5gW)-$gUA#9HuMRkIOO9f|}S#GDUS|IGYm{&fzlLg98GC zxzP+4E|1~F4S;kNc@r~e#xi9=b7%%VRpd?Hg=Q?4c=*Q4aA#g7;Y;b~M+g8-$N(^5 z7cLvcPO08rp2^=xXG!FZC&t;oxgas^615;P2u{<`iJ%C9QETeH@qU4 zc25lVl&6>J?p;IcZ5>^1TccjeS*qsI+*x|_cwp)v4n+V`-~v}c4I=8MF$Yh>EA5WC zQF2jMFh`S9J-SX1dNk(8sy)oh(zYUpriVeH1$xpNDn z{@Ff^qnsqm7J7C+Q!rfY4|Hgg)!{c27(?62J2K2155GW(T9z{>Y$G#yTtQ{^y(HLfR@uybAQr zEif zBL|R9fZPPgHONQWAs^W+UPvfrC4eNN%;FTs%T{>gZDF3SBL7zTDtXk`<4u?>X1giN z#Qa^1?Pk!NWhx%d_~wOUGb9zEP?S_=Vf%VW74IevAucN#tg`cNlQN3xV>^PtM8U7~AMPr4X&efzP-> zJYS{1|Zv7b-OcSd2_JU)YK5|D)W?T*b!mI?5NOa<7f^$CW^!M zGh#=D!c|y0W8fX2J+vd@-82{gE`=6ESwkX1Ajsel8Z(H?jf}Q5#_xW2 zuagc3V+-@fx*xZ-eH6!ay>#nUK(t@?l1_Rp(;?hRz#Xw;gmeXM`dPN~)_73A-4V@t z^Q$M`41cc`;i>S#im{}A{1*J-CHUk2g}?td{FTm(zr^NNw(d2JR+B}EhSy(Q=JS$P z`>xZCQz-G)eUfEvvv2Nof%and-S-WdwG%QX;V4WfloB!{dEZ2QpL%1%rs@vHiczba zIm-BFFlGXX;V^W^j1#_ES?B=mQLHGwCNQZp2~4W$N=crYCNTLVP+6s2>xutHOCpaT zN|+{(R{iTAV$J!)n?0E9t ztw(g899c+y!pTox#{YsnraB+FugV#1^cSf1_a@q1**g^8Yn|fCxtedz^*dm`zj2Ai zol2kjw7!9!cWfz56|~Y@@3mh3dDDV#H9`fc=SPKg@wn9;+Ip1x+>^O$mlclN1dP6- z`uDnZ1+%jEHD_0?IkW1K9C1~Z#mT1@r(Kl2;yz%N~BD45V^N+=L1A^;k%<+PXBbjB+dEV+cZnT@&K>!X~BR^R-JyxU6O zw6f&s=Zd?Fqc7dx$v9uKlc*WG?;`bC9kJ;LxtwIvlyUcNnhFX4<95#-zp5w8%xo%* zjy8T?wx2Yla?)mP!n@zFZ_^u;30>GEn~{glV^Zsn)&D(mu)+=hWJ8>S4!<5bp< zc|GBtmGN=xt&T;x0YP;InYEg>b8`CRz!!_P?z#VzrDyQ4%#@>ytyJv(qR88za%iK% zvb7sJ$R3rE>vH!;9(*)=%d&9RmSq-oF=NY8sgtMlOT#le9w8smmR9CiE5b(<0OTWN zQ5l;SxM}0JAOEKLF?hq~C-;A&`I#iEq}@21LdZJP$>MVYT#Fm)6vqU)Q67zD6QyW{_lKl@1v=%wQe-HzIMG^i* zG4GjB%u|Z+?^4Xas|aI-w~1OQm*1wWN`8?@RXO& zIc8vc`PNE~7>TWtrL{2QUmO(40ici}4C62%gzy&~OHo}3AtwrQ%or|^$8drWQ@_7{ zCU&>UP?e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~y%hqpc?@{j zIJMe5+P?ELGP1HV7`Pg88*s8QhqABsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>NhKxv9FC)|6neCaBDyaXzy98Ce;a8+#cH8atU98yPgUPb@QflJwvA^M$pM-L6J^ zKf3SdjHp)HYr1Z_YTJ|r4F|T!mrYD}GrS=1V!M)Df%3$n6EAZsty;e~@E@5fR(jN< z(C0+5{o+r_bF}~|(tI_$o&Tq9RZ0uRDGC5G}#nE4Ojyq)5 zrCLiz9J;yg+N$)9k4(&r42+8d4Ezja*_cCR`B=nQM7m3_t~t%Ik54{z`>(KlIm=6D zwXO#TrmQlHgn?KCrh;3o>kW87`h{6o4VW1j|08>t73ASY2J06Uxl^y%W_=fy)R8{a zu}*3AmtLcsI^6!~<-X3CCnl>sCLXe%x=!1Do@zz5|15zeMSstKXX4qw z#jzyn(bJMTL0OZ8tdsJYpY@W}?#z3iUB&elOh8 zO62565Jk)CJwGR~K02d&Nnxk!vX3IYVYW)|KbO^Io!Im>cErj& zh(R!5VCzvGqm^1hN$$a(c>p8E71jU% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/489e84b87ce86b6ae9a8adab5c3492902e53fca7 b/fuzz/corpora/client/489e84b87ce86b6ae9a8adab5c3492902e53fca7 new file mode 100644 index 0000000000000000000000000000000000000000..454285306fc2aa1a049d30e3a68c0c5f8cb0d6ec GIT binary patch literal 2251 zcmai0c{J1u8~!b0$QUKETuZi#qWsL*m%fI?m54~lGDeZI)7WcfETJgNPz__bku}RF zMky`!EhNg4CefkrKhGX(BpmI%+z21gGsFg2nw@BK&H62=9*;LD)Tzh)`iegbHb( zx%bDKc59OmLN?EuoY&dKW9v2gggkNkd|>@K98YTYuoK8rryID> zWwub6bopho`N-GA0=SKF#d)DwMs7Xn&u}sgIDi-U z7N`9Dv%|#jsO~^r2TQ!>puctUfyg3yLIiQRab&q&>AXZn*&H?-nwgF)8#lapd~=c_ zto)4bg1aVtKG9J`|BK+oOht+I9(-}C%zY6bXF%(XdV)!xga^*`K}*Fq+>KORu|U0? zn2whrXB#kw14#li`EAWsDT&pY$r*KOSXj!e-eRWpMy6zs7lt3Af`A|Hv{Uty=WZm- z#@&g<`Os2Pf_wE_^THHTB`%`FXk_m`k~6=zac`RkyT{;wutkb6+J0ZWuMMZkzg0Iq z`ax8Kh@rbr4PDv?^d)59p9 zmF%73rCkrt?(QMCMLteD#&8_NZrY8Kai1L3zlo*eUE?P6R$(g01#B%Vtb?2P+7@*c;cf zF(O~J{1Z3&?A6J}ga_HF+^-6(9hz>fL|HdPn`h|2ds28%lOeRJF?yz1i}7+hAK5c2 zBCqOL5Yy|`e9FR_)4fdnOMptSl5gzjf6cs-XPwIQ>~__=9|EV3z1G1;wa;)@ zT|ayef4vw&^-3(A^dFGunkJfpS3NClOcld|Hz4sa4om5RO8_lR@Ba0R0LVh9U=2bA zrTz&Q%r7ecf4FG%%VcU<*C@GJDl^{iW};>j0ydAY4_B38`!NntJBLnM%nd1 zcZ{93qNs^XjMJOjsNmdgecFF^q)z_6KOgE~nns^CKXJ~9D0@He-E)TPOZaJs+K8rY znCOcAoWxBG1cLzhFYo+*@eV})tRAzio&t0l<90Cv<{QwaEJntiM>$86`5U>Uuw;s1 zfsl0Y5=Xa7=-dgZhZ8AB4ii0!zjoO7IWs!fL30(0DgFiHhJEi#r&niNxyLS48Gi9h zDq!SZJhN#;ki9Kb`Hl=nH;RwAEu@tQsf>%;*I1U95UTSEqa8l6ayK`+Pfj0jt!?82 zpg%z1M^14#oU#p@(|HfgZr>j{C9POL!T*CQ27gDSpPezfq`#liSqchy)I~knHDKbt7>MODLk!O+Pr$fP@AZ9CS!YMJr0KhfDi~| zXgrfjsolcoBwKZ|yPmul`@M0qaw#g_WODA-)_Mjh?|#u3HLbq1nddLQV99`M^!YVv z?M*+VHpsD0KBANJnPoLQJuT35CXBYg$qoz}9FzNKsI6Q%N458y;Jz{??`rir9dz;8 zyVG9Oc&rFBeq3vy1-ujSg>GZlU_R={mDegeN~Jex5)rNBajb7lzVGG5!!IIgMQqrz z!HD;+y2$vLw46B+1$Tuv3ZLRylVtH^o&+pzgl06N3E3vp1r1R$iSv_ItSCoS-Ku61 zy^a+a_8OxWZ}?P0THqi*&Olrhu1I&|mW_}btNq?Jm$vAjk5w&Sck`<;$VEZGAw(aN zh{UM61B&H6Qc65tmn$1WYV@up+b<@644GG%g(Pex1$V9<(ZE!BkJQPGV&k@-5#yhp Gk-q`7-QC^* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/48b98191a2f3736ca83d0462ca105a311711c85e b/fuzz/corpora/client/48b98191a2f3736ca83d0462ca105a311711c85e new file mode 100644 index 0000000000000000000000000000000000000000..0f9715507f2fa937a161ca5911ba6ffa39afc331 GIT binary patch literal 544 zcmbtQyGjF55Ir-q-s~nDAFOO_*4K7PbGEQZkwy?wiA@TB!@@R@!tW6L5&Z#E2to?K zW#z_PmJJ3A4-A}hm^)|gYmnes1u0|x6>{r~^~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/491d0a04b77793e8674d6148598ff0fa1573827c b/fuzz/corpora/client/491d0a04b77793e8674d6148598ff0fa1573827c new file mode 100644 index 0000000000000000000000000000000000000000..83b97e7461708aad7f00add79e8adc59c1184cbb GIT binary patch literal 6759 zcmeHM2~bnl8a_8S2_ys%0|5m>SQHQgCjr`mB2cto3yMVqfr1cH7G)8FlBytK5fO@1 z5g(wng{laGpsYeFC_oyHpg07FBZ1LVjvj?`awt%qNLrNSkTfWdAOr${ zD_C-nL_}TjL@LhKl|_Y0*g%#-b_omNGF^DSJT6NcYGEhI6t$J19BxD?m&b4m@(&2& zMKYXue1;>>AJSFjS!U3TZOVq`&&f?z5C9sN24LK7 zTwEM5G-^4@e&{#k^y2Et^?OzvtLwKvM{?h$Q)gbBwIFH#k)8Etw64GM?xNM%BbORBhZ-ar9MPw9HBQLf^bBL# zJvG`}np&c_Zw;-xd1RSwl}0gliMo4Zd-1Ik0m=P16ah${Gh78ViKwfl0-lCf-V=4R z=#s2ZL5o{CvQD_^Sk%vnCE{di>f+TPZRgArDA@H>JOQEzBAWcb1nhz1z>@Chkjz_F z!GqL!i`5&Gi**WLrm+XMZw_c>Uejo7+SS=3-0k(ytk5B&(K@r($o}wx=#8th=j2EH zyLAvpIYpMu_vn1Yi&4@v+YtPNR?rJ$&cZu~dpCYTe&FJE@I*vLG(JWvo$I6}H@7HP zPccDxzAIDfY~LYLnXK1(Hh1Sj8j1kC0uW;k?8XC-D8^(g6WP=K&BKg6_e7EyHc_qh z7n#=XJuZ}j(0Ck#-s|^uj!!xoyYj^bLg!^>8>4!~(SGH$byhmPFSf)4x0DTg=INiG zZ(eH9V`I3u>NAb|-aQS2t)-nxdY_6u7~ZaV_tnLS!@G|ADGwb)ww^Fi#{K|=h9WdD z3H6c%iKIm+Dxnve6P{{Rz`xQe8dfZ^Id(O8>u&AN+_(-yk!2jGNzKq9lhaR(RxXVVl?-Qm^8C?hMa58yh>AqwqB0BH*F&l#n>d6hD^4ql$eiaMT?ekb@O?+Fimi63V$V6PMts@q5w?rmqbJy$apD2 z5S%u6e#G2+jpchy0)Eajedok4!->31w>Co_cqvrb_1SqD9Ai73uNBKlSyF`azk7qTnG7h8 zx_wYmxFtD8006lFfa|C2CIes+P2L=ARaI3)yYd|6Do$942`6Gxq)8-~6BWVb_!@H} zHo;X`Ib-1M;R2p_YrQlgS;{Hjw-ACNU|=7)p{@D2$H8V;r3E@=GmiEXiZ(4*yZQ^SW8lRvJIag6hF8#)ux zNT|%-cCJ?aY>DN@F|*o~^c~0e!2!;Cm%7q2n{>OsXZNo@sBB*nHo(iIS$$iy(DRi2 zq3Haa(at9=EuX~jTrS^!}B z<1!}h7>vuGBxHtjz6<*?`R0brm2HgWBUV`oD){Fx3L~~IJ``@+Ipc(HR_5E!_%3k8 z%Ti|&m{he1oJshzUXW|tb{k-dfNR^QG`Xb^M%ERDbdSJ_-zEI(UZx7vW4NgVdX-H8~V@3 znw)CR`RpjP^w}|_=-|FKff_xQxNqB0-KR$vke_mMQNXvH$^+i1?6pht$87vZUQzwJT|0u0&bGmA4WP9l@M zatCi2=ZX~59Q9GRIThcw=sOOZ^acG=a<%!XZfd~S&NLK^>oa8(h!qh4_1Cjni)`9s zmGTx}MqJHCUGMi$&PHl%c}3o1Wnfxf^z2KeJ%y2%AM9dWDB4BT+O+=?^?41k;U~GQ zMAM`(w@#WW3IO9y*InO=r%TOj%8ZZIe_3*XG@yFQW^LU2-*N8H>r@CG*d&|bM=zq1 zYme9dGrYg!zJAPxz789v48{F)#?Lujp&sS2F`R7<1=;?AHF@dPTDA&VJ#yfyMcVh> ze#y``d{kn}Rl!y&bbDFgWmrD2QE}$9Vf?Xv@b z8Oa*Md5x@l!^s#~{ofi{%O;bx_79R3l{8cOD9FSEkby}wfJ9Zz8n1Og(gggGc&%HS z)GUcnS@pKD`A%E@soL_tez&v!$1w-6SW;u;E$9iEDTWoMCz#U>tJ&-KJ3aBY&=Zz_ zwVp6zv$0-%+}1@^Vh-%4r7DH3=-qx_4u8ic>n9Iul4i#<-CmNgmr-`|O?@X%sjDy% z)BUGG0y@>zNO#V1=N#Xw=a>| z>`RCvfp!Qdto-$mIx=)K*5S&8>qbK%s1|Qbpo1mc!20x>pOUWOmZx!ZFY;BEDI7Pn zy>fdcSAxN2>C)QR#)Kp&(gQ#tLm0wkLI~mSI-8=l5<+eSb(G7^V`kDgPuSy0444j?E%fC!_X)DboxcZ4D42uo5r z9y2+@kcxv)y4eD;oJeDWmCD-EQw+%g_Kkg1p*$TzvDTAL!Ol*5Y{;6(c>ymd;K*T? LD-{6-Bk%nN_$C-n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/493547f75d1b5c67a5269647d3cd0525cb1fa7ae b/fuzz/corpora/client/493547f75d1b5c67a5269647d3cd0525cb1fa7ae new file mode 100644 index 0000000000000000000000000000000000000000..3699cdc3e089ca79b1c8c0382b7ea9311af5fe20 GIT binary patch literal 1868 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>RfFh(kBmU0apj z@sWv{k%4h>fPtTZEE{vEEFX&)i%56r)itL%_VLN5ZvPdwFK2n_t=9G6z?4;HkuVTz zz^;G?q+ghY)qt6i@jtSMSwS9dWUziwkvsL8ZPs^TNge4!9qW`MPGJv}TS9e~XAzsIL6(4|6#;al}L#r8cOE zF*7o-@G*eX9787y14An~P1fr&cCT3YWMcQd|4{H#Uwlu>f8#w9R_sGdgmICRA3+o? ztM~kz!20Nn?j?ntuFF1(^oH3gz5iTRmvv&(&*;VKN2E+QYP@vN)Y%a$^C0f!!SClc zJ`z+3`fu^GM)vN%Q$_RIS0su2n88@SN?!yN0gPhIj4aSRGGO4uOSCk#tYjN{np%aD zroicPyTA+5(j}@HlLN(G9Q|eINMyRa#j%f1ouqV0LBcKv14#PkA(+0;P$hly6g+s= zUH)iU=dI80UlhrHj96&4_PMFSnp6HBR+UwIxHdLzR{5QHkz=LzrW22U@65WjJ>mM7 z3|W7t#rG_IzpM*;`#ia5w=+K!#YRp+@4JDm=iDhTTF8QDtfGjEuh#I97Md~f@| zv#+MSjk4j@U-vz!V5{vy7A6Ke0~;opT5kOm2K9C4NoDK*lOL=ANjWbUBzpi SmrOE@j0_A6uy6yh2?GFAbiRlH literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/495035f4676d88b9a8184835954cc50977062c36 b/fuzz/corpora/client/495035f4676d88b9a8184835954cc50977062c36 new file mode 100644 index 0000000000000000000000000000000000000000..71b2960fa38c36c140f5d50829f3d342f31ab205 GIT binary patch literal 778 zcmaiyT}YEr7{{OU;j5c&Ha4ap+LjQdBxftbFclHYm7-y9e)YB5s}1dS=sQ8km8xuIf9;lzvw+jLl6)s+uxBW!e~5z4q^c~0t65NU?v1thXSqyTmjh4 z8nDC~(9(T^5yl#r9Z6V-2@lI*8X=hTtmzbrSf(wMX#^q)=|)UNn~@m=BGM3}Hox+! zbRb`GDw560cB@6LG14I`Qk5(fSQNLb%&k;g@|0Rjw&G$j5jy{bf80OjpJcX!_TmVg z?J!GXNsI-q+ZZYsar&Q_cU1QmM%mOEBRS^|&N+vIEsRKo0H%iR5`yDyW=*GHBm~9R zQ`kc;0o8l$IgcY-*JEA`?iJ^pno+xV)jsSyyHdMGkwzBw%|98Ry))9}q8oGBXQsZK zvUlc&ziG}*b4INWe0uhIt-Yncv1)m6?7~s|N=Hgj#>4fGA4(=G^vRy7%SGpVy6Ssb zeK(61h#0M>W@_qdNoB;dc*Qqw`kLms`y;Dxe1mz_b}W^BtisgS!cvK65g7mo00bU5 z9&{hy76Cg&?XWavHF+%WXI*caORXlh5=t*`Z;wB`3|V0ozXTfE&Rzv?p+zOu$S z0suZ?G7|!a!T=b7XbaQ6G@Z`8Zm=z#NG^Yx=q&x|Ue>h5@pfy8_V$h83``(|2^hs; Mq>cjw0{wG-0mCK?1ONa4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/49676005a555a0a471bbc3a071441f11d64b60dd b/fuzz/corpora/client/49676005a555a0a471bbc3a071441f11d64b60dd new file mode 100644 index 0000000000000000000000000000000000000000..2a0a0f90fa2d3599d4a72c7d0ad3f9b6f6e7e870 GIT binary patch literal 688 zcmWe*W@1{w#J~{F%yc`~;~i({0)Aiv2kd%d7QIlVP-NAHWW1AXJZa!VHV~{O-?CJ zG`27?kQ3)MG&8U?GPX4|vNSf166ZAna}6O}n5J+PO=SiGZ0uljnHbqvwHsL&l$etk zSWe6eZZ~BOTJb?_qjp*QMB6VpvkwGMC3J2foJd?UEL1hw}i^2V~>QLk7m zWgua|$;KQiE6l=Vz+k`)V)C=FFf*|?Ap4X#oxvc5$-vv5PpEj2klt#^v&#=Gka_hf zOS~XB^6|wdXKxzzPB^=%<8iv-t)#j+*B7L+9xrS^%VfZDK;P%fOxdgJ%r05BF-uuT z_qE8Lzjwj5ssEos^0O715wcnG&q907hQu4TL}v?B@-Q%*WoD2_WYMbbpCn^wt6BQY z?bl@WS5@!lOk8{AKF^G!GFrP+;x4Qgst9t*UUP0IV{pcw0^x$=I&S(89)E*fv4y0v$c6=R86QhVlpuL|NsBr8#m@H zVw`XPNK-iNy*j%?j`%5Xm)0|SEyGXUV( B2iX7s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/49a2431a993b70f453dc77186bc7be98af045d09 b/fuzz/corpora/client/49a2431a993b70f453dc77186bc7be98af045d09 new file mode 100644 index 0000000000000000000000000000000000000000..db86223c66464dfb79a7f580b809af3f26393c9c GIT binary patch literal 3159 zcmeHJNp2HC6#X@H$3uIFE3|=-#E!8L1j1`UHn2cqV(e%ZCgk|Ebx;hyZ%tW{QJMx6$;QBPV`y`tO0#_PNaS@Vnkgc8W2&P zI728zP_0woQNT%lhL)e8#bhQp1FxjJHvH<7>AUIA24i)Pa2nN7^~G5FijNT~Y@0<* z)kZd>cM3#942)5z2bs}%0ZiPl5wPEFIP)9}OH7hdP#kF~1hpgqh(hd`QV7zmOpTkt z#u{~T#|1aD9V|3E%>Pg3kh7vsI5G_6m^gt8vp zGwyBKL0ePKY%uXFM?UksEin1vuXfR%u_;5jQ(7i4XH<+qau5#8Y9R0S!_r`&ZvuMq z{t~x^2|19D@d(4&VAh}Rt_ZemDH2O;<_sY516o`|^Ghc~R^5t?!rP)OBnqGw6kyj5 zqJ-)s55g(~?3a_CmpF00b0a;G{TQ6zrpj%!Wi_0(#NQBKr9?!Ca^9|?b<>crWoRu0 zXFiT|dULq?7#1CqZ)KqZAI#cL9I=n_bV1BkqifQ7vV9|}IL#Z{TiVCa;v+QwT26b< zBb*g!-?k51LT$}E96iI4eY>lNb4!lzC0KX+_(Pf5Ph}>DIrmdbas>TX%xC#Pj`!`C8de4fn9IPx%kYkY z;Xfk-BLjmt1A`bdGgBHj15*+MQ#=Dxj6oAqgh3PI!3E4rj7&_Ne}8ZA(OWGro5z5c zjZ>@5qwPB{BO@y-gMq6dw*e;`b0`a&Fq31bp|F7R=%qvMP%1bR#2+vGO&nzic2q>vk@F__#kQ3)MG%+wSGBz?WH83%V66ZBEH!v|W zGBPqZHa3jHVGRe|nnYA<^l(_yI3L;ljO+}|jlB#8jh#%5jT|?$Pb@LfNc!*l`NG

-53GJdIY31?qCCGV9o{M(6W7ztwKo*t1?Gcil^IE7pVi zcgUlYQdQ?J=(eHWJ0 zkv`P1PHFX*UX!mih3V&YFUlM`EYB^pW{wJfi-=UHuKmc+Mp)J%*?>T$H2fK!pzLT$Oz)fSWB;qNW~Ep0M&f$d;kCd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/49e7ef268daa0a2cdd0c24d1c4c6a713bf7be64e b/fuzz/corpora/client/49e7ef268daa0a2cdd0c24d1c4c6a713bf7be64e new file mode 100644 index 0000000000000000000000000000000000000000..3006a1711a55edcf9c01098f0147640dae5d86b1 GIT binary patch literal 2331 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@o5rimW*>7j8`xqY|4eP-Gl z(f?|Cg+Y|zKMfX-mKGV0jf+$doqgrFPCE0ci%?I&5B?6XZR|dcG2uV9*`tPP&DvMKoNKCV@sAHvspDT0qw;p5slyb3EBlnRlJ7Zb>+WP?W@KPo+_>DJ zafyK}8*`|v9E%u>$j{kJ^Uro%O(@)cNx|ip?Q}j-mQMzyAZcZmJcFFsSQRYfb~jjJ zVCdIU}j|ej~tiW;J9RDushkjUWjR%*wj<(wG$Y> zJ3l+MyHb9^A6*VTX%5Rsca=lHR(__;#DfzdAB;!Mg z)L#dZ_DQ^d(d>L-^4Gi<_RE4(FU~P7Nt|Ii?SPK#-K}wZx?X;GX6DFqaFf`&+ZIR9 zy(yGBCY!Ube!4=wIRSW_4n7*L9PmTwHqjg1V}FDi1UUbD^m kE-a}deW+ud(&{h0Vqa?t8Dtdg2xYh|)oSOd&0Q_Y)aR2}S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/49ea35e443da6d5940cb0d28f39652597f63fbbd b/fuzz/corpora/client/49ea35e443da6d5940cb0d28f39652597f63fbbd new file mode 100644 index 0000000000000000000000000000000000000000..c1eb0cdb59d5c26cf1249dc0378909f82afbbeda GIT binary patch literal 544 zcmWe*Hej%1Vqh?3WM^Kwb1>fcIib|KJ!ZnnlFal41_lNU2ecU& zco~!#82&RdFfuTRGcbrTGc(@hW?;O@z<7;;@v=b^<9UN7#OpFFhoD4S&pn#K& zU8&9EoUIk3fvX|60Vf-CC<}`)lR>DVuz?_m!@f=q znn(j-Hg+wL)0r6AIKT{M1`%Z^CMHHECJqKD;AdiBU}9oOW71M+fQjJ%TxjA84=#Fq zb<>>I&1;(rHkwRyOg39S|F{K9jdNx0{I$>Axvp<;y!drO&pdANKjwwqKQ2WYmAg7_ zn>U&L%CexSqq9HN1?_F|na+If5sRfLM@94Fd(&ok9e4eBil_YcW6P(UZN~9gd<+Z> z;>^qphUNx_CWeL<#wKP4CT5mK#)js`hGrJ##sjaI9RT6hH=)WJ#Yq+J3<3xW_kIEawJL4rf-Q&1-@3^o44RfL)!SD-2EkprI5PdLW zL=mE}V0_+3e2(}m@f->~ivqjY6P$s2=-8PUaC!QQ>0&*=m@E^yHA44(LW4KpqC-83S<`Ku09t7<|!G{*{fn+qgfINth*q zxxqDRfYs?cpfF7ueO%VdH{`1;Z3FGqb*sDbS{i&?Sz5ci$|qyj)w|l+M(%#FlHRV4 zm974Xo!-L2)Z+6@iNpQwKlZv0rtcn%)sQ;8b+UQX(`D5nBl5-hY0T0`+q2bM>*g@O z{=x+#wx7WyRF}}ypcIx`f84~uKBk(GqIhzYCj54TBFPYpp)s&*2R5mx{oe@-MpBT7 H@b#&mI;xoQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/49fedf65a47ea0d23221c2bb8e309f50a3add5ce b/fuzz/corpora/client/49fedf65a47ea0d23221c2bb8e309f50a3add5ce new file mode 100644 index 0000000000000000000000000000000000000000..0d48b2d8b8f1db82bdfcc6de8d4c878c078c3156 GIT binary patch literal 546 zcmWe*W@Zv*VqgelW?*1al3!PLrmRT$Eab80+14~15 zLsJ7I6T>KRUL#~KOnoR!edBy&6B$_YW;3>rI`8XH;mRl7!JM6ETM@Um=6*P1U* zZ{D>OW&CI|kz4<~i)YFEj&FIl*N1NB3u-+hShe!pW~C*HHG(f+Osf9e7gqG^&G&hl z%{SH4es4>1RbpUT$LHsExghAAT)69@yZzT{AGhhb2a3s=&Yre+MWo>CFVD_NzeXZ!K}>!Y7G@^a1;|e4206Wv zq2p(R$*C(JrS~;1kV%PX*==KFy*A?HS(ER%a_=Ujh<0psDZD%Nnzgu}mdUi31*V(K zH=Vm?SE~Qy{)+|^Q2QhnZN{i?ZBZmjR)V_;wqVPU_* zOxmdgUjucZ2!bHY$7Ttr!54&zr~@L16B(A5Ah57U;*8s3vSd5|-Q4@-JLjIqo-yhjid$4G)C0D@o> zEFQtKAQ-ElWCTJo)ODRc`sJ8QpdAwyP+$+Kr1_6=x zF2uF$i--Xh7-ZpY2n@>IVmf!M1|*-|sP=7sk(Ni-9!Ls(QVk5GAKezGqA2t4JJP5+dP&6XQ$P%2GbZ&-)YosW_>a6WuY2h7;PqZJYtzMRy zR-)OhE_dYm(3a=?+G{d2e7C*5J(Q9pWP%kTCBPa9d+?iM1R0^3BhboE9cr zMYEL)LX9>q2G;4Z(B8}sW>`5pHR|IrZFG$rP_`YGXtrW1z zPQbUl@da63QR|9ogY~MMgN+p=Y)|qwId~W3ChFn+)M$7+uJ*a=GBd>XmLApw*XgF> zaw@)>6DW*X;eBC-9IH_}p|QyGCN~3Mo4;5Poi=!Dr63L{ zL)L`)yydI3`=4!Jj$~goUDpcNDF$0qZTGV^K3I$^9IVetI9$90xsmuO^GP3$X*__r zv4~2!cg80YogszpK_=&Z*lgVEENu4%gU*< z*}v#{;=DGAgcGalR}@nxFN@=EKd@|Q7zr2K2>Yy7vo_t>Aqfvy*fmXG8e|&!Sy1hK zjXy{BV|!X$YhG%TzWb4!-?QS7b79AP6kPH5cH0_XWq4XyVlynhX>fc=aZTHBMP$?2 zu*Tl?e1FlA`>soSPX=~%NaU3k>P7K&O%@gmDj~?jUp&Co~ zHxWF2rcnJb>OS2!sxZdA^hK4!_ts2pdXFm6OjTU1_nCRAxO-^V29b-{_7n9Vx(SjZ z39sGn+4u9rzPA09qYEm+lig$+m~U+!+ihN3*~?!fol`kDFgrprdS;KVqw^z&L+p2r zzc&s&dh|oBIxLl*zTe@~8^%d2=>XftMSefw0q#=z(j92|V!z@^DG_`CsQ*#c%JMgt~JhMNWk04cBzyZ`_I literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4a1cb5934068656c3c30787f6efa531032f18f7e b/fuzz/corpora/client/4a1cb5934068656c3c30787f6efa531032f18f7e new file mode 100644 index 0000000000000000000000000000000000000000..325b38e83faded848ac51559d16231f00ad265b4 GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok43vTf0w4uVUIUGf1iFyeSU?RHF`VEv zx{NwPKmf{QWcUdRgNBXV{nHjSJdm9>>0aEr*pN3tC+F|^%@%GpD{Jm4%pg->BreF@ xEq*PQ`syEj=D@E~pC05UA33(%yREq?|2 zyqhj6tW>;o>VN(J|Nlc-I2jn37#pAgz>utC$iOg-A@{tV66blr^@TDsFDRT~yZwu+ zwq=31f068LR?pC=)(t!x`6XHwZk-WxNboH2Zi~WHs(~p)eQ=HXMp7GyF*7o-@PYCN E04BhUSJmsWd?%q=h95*p7gX8WHoEpNtBjELo_a z1*R!PQkhthLE~`%)sn>Kve_JOwig$0I4dkkY)`=EcmnOS0*G{%+VF8HeWGDdoJ1Ti zl_iVg*koXVE~Q5#EtaMwE8@h-wB=&q#*fa1MBTV7!3=F&M5B!xH!>5n0W$^CB%p#F zboUA4AVdWlLqG)^VpK2;oeAHu&s6~@c86Pj)8OFopt0oAQU{TFfQB8@S<-X0;Rnq| z$|n1S9h!Ro&UGwO`-QhOq78C)j(^A7PB`QJOs%8s}phN@n?$O6LxQ)Tj zhxG3CH+8I}@9?D-XJf`2bD2B$uX-J2^4o~tKYp!sri}V*VT(JOj(9HHUe)Zvzf}_B zUzS_`kS8p7!YL2xym-3c2%jo9QnJo`UGd=JjU!CyDX`}2xFeXxru9Rlvru~bf$@|g zyJ*J2k;537hR*FzpGonVFn(jkJHn` z017&7iZuf!FrlbYb!OJhc}Ckr zaCUj-B0$6=451W;-(xWV0(NM`bgUI1J6nX`!;@{A-iUtK@LJh$ey#Pn6-pMcM;&Nb z>q;v?#2Yg3Fc!X@fx*E*ACFH^5@8Gm0Mx|}>kQ@q#{#+tM_oRO8$$}Ds zqv_tSUpGCwHR6>~-Hf~&rS`@hars_pcGsE39xlwOdsww<5GmWk-unf8B0O}!=K;y4 zAuK*A(``ar3AwJ_{C*1rEvn*n#(0{AnYjCJdCdRU>qBEkL!C<|tsSQV3#HZ<$5P&n z44iQ~{j@jiT`cwClEq8DN;aNd;(A!@b-%o(^qzmy@B4=%yPMeaO*uQV((TQ^MA#VHt z7cjPR#lo#^l*=IwW6`BQKgkNN#L~2Zh8Ozn7L(T< z66+&wgdk;QNOtq-zRcQS_Z#Q@Qycp?x@3azC~`g{lZuZed{zPenoPhI zxKue+&32yk0aOW0c}9|8EebZ4Kqis15)=vA1Y-(h5@0!v3=?4VCuDqHPZ6}d92-AM z>r70@eG%K8-DlgfrQZ<`U7j^@w9PFkyRT9ubX5vG;{At~UeZ6)!Fs!TpKoGC)TV8? z!mKWr(5<%&B%2>~au1BEhL`qs+*daYs#GUK>fed^?hb1pH?_Bg>xh zuFaRVWJ6(V;O^9&j@P}$!WTjGmn~eAll}A@`R2tQ%(moRw@s+~w#uzjetW?;8n(ng zO&I1pbG?_K7x1RwQcB-SNPXVsmZ!CYL~@F|K(fogZ_m&=0|%pR_yd>Z_P5lla|VmH zIrz$v(`$-PiUu_PWsldG8Hhald~Xi~m9F$s?pE5JFZ%b1rR&Hs-}c6OWVdm9AVdjN zNET3G)E{JTc3!P}P&ga}B0k98dAjj10Y=k}hhA`Mnm9f#o$Uq~sD)rY>w|?BEfl25 zgtQ=`Od*aJ3*r>QKN=7e0bm{Aa@fEF?Ke;aqyz6y!@mVHAGN=Ix_|ngzT(a`D*^aj zV@bDOp1tz^Jc;*UYGZmychmPhi^gh#8jzvI_Imm|?tICL_i_FSmtIim{RG#Tn4Nl1 z-LmHJsh2r}`A){)Io^JeJ9^@9No)Dl1y;bK@=l z`OR4G=trv}3*Dxo=$@1D>W<=rJ`||26ysAuFq-macG=?gzgg@rHP*AOb*1iH<1;Ys z8Ex*<9Xp$G*RRInC(bh~#K{Sp`sld3-vjUSdY)U?R%ARS1I_AY#*@_bgX9m|9|6i2 zy4tr0Rg2y+Zq}9lo7Y39nMAsm?>f*uEp94W(mzMTxoI>Qqk=O>OF9l92Jm|{KhkWC zQ3Dpiz@!mQ0u;m5UWpS%z+I6XrsQ zQVDH%V3r)QkZhI*@O4W48zcIyt*P1Z!i9G2 I(N>%P0<>mMr2qf` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4a9f4ec339c6cb5681679ee0b2bb02ccaec4d2a2 b/fuzz/corpora/client/4a9f4ec339c6cb5681679ee0b2bb02ccaec4d2a2 new file mode 100644 index 0000000000000000000000000000000000000000..51faef6c43c924de1e476d3fe8669ee44dd1dbba GIT binary patch literal 541 zcmWe*W@fNtVqh?3WQSh5OEBK}Iib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@bFY&A@nqf$=B<;~|44#(f4&j5!OKnHZUvI2nGXtoicl zL4~>j7aNCGo5wj@7G@>`S3_^VYiNnY z#b-?}$eKh{Yw}7`i}F%2t?@GuU}Fcnor#f+RlAXeL6O;tfrSALFro3`V5!xci8Gfv zy>FI(xrBMR*mT;CxqzyP%F$z;G7;{=H%+rQ80HHfWT=3 zF=j>v7CtcVuRx!7(?x}qR+mowumAu5e<%wl10xekKu$|G)X6=sr^I<)aDAc7%nJ%9 z*lz#gs%=>y?q4K3n-z;*W@ebxIP?ya=p_~mO!R^QjtHP6@?d&BL!(+Z@NDE4Xj!;* zM$93>v!KM~2To#mfe>C<7)XIJ(1F%s59Ux7E`tWc1_lPh1_MquW-AspVJ0{iRl_w1 z7u~5CQTGHx1O)y=!F?D5JAmtjNfS_y0^pkA4yRoR>%;9Z7||i@019*iXes~zwxVyo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4ad70fea32a3af382d761103760f6633dc517ad4 b/fuzz/corpora/client/4ad70fea32a3af382d761103760f6633dc517ad4 new file mode 100644 index 0000000000000000000000000000000000000000..e855d5bd580c1c9ceb0ba30db638bc817db98609 GIT binary patch literal 475 zcmWe*W@fNuVqmajW@h}w#KOwP&cVsW&BM#bFCZu+EFvl_ zJ0k-l1A{UH1H%Ib28KBd3}Vd8j9okojBO1683=*~Y(N8>APE4Aew+@$YAhB5&_Uq( zc-|8}=ss3pgj&?V*ue0Ufl-2?VIz0{v<3W7;aH6~K_}<$`OOv{9O@b3>SSnS;qT`Y z2?;U>#x{fjFmpfv#z6w^hQAg|ef5t%b6_FFCDD`QE8F5dxHJoU}NEnSO<$dM<6fa6KEj_7Cwt| zdy(~mM7U}8o7v&}nM8?K1H7p64zL~r9b~{sAV3dDROQ%)93Xqhjw{)6CChI$LKEU} z=@*6KzA^WBHHc76^7V8l+35B J)9S$bI0MrfS2_Ry literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4afa220c781df8a04b016958450413cd9b1f126c b/fuzz/corpora/client/4afa220c781df8a04b016958450413cd9b1f126c new file mode 100644 index 0000000000000000000000000000000000000000..c2c70c017e7dc240c431f7ccd755db26f3cadb2a GIT binary patch literal 688 zcmWe*W@1{w#J~{F%yc`~ZX%t2{S?39*%`L+4&-^RVa!xo%Bz{SA8|DTb8k%57mfr*g;1h^R( zOBfgn85r{nni#VT8b2*yW@2PwV&pL3V&l+i^EhYA!pvkKY$#~J&&C|e!Ys^@nw(Oc zXl!9(AScdiXl7t(WNc_?WNB<1CC+Pv%*C#$%s_yR9c(TWBO9xBBMXBPa}oo~iCMwz zrmR6LK8S79E^D7?`z2@gf#8We_m0h($JlHecVoZf4~~gRCF?Zpc3vv!j?A5UJ9X=| z#pSVkR+RkOu|?tTi}feNADnwp;i4{Lbo76xhGm&=1ecef_P#{kSk^o06^o?|Bn&v& zm_ucSS(pqM47fo|eijyHCiVtopE9R27^E;6c-!*{6)zIfTP=BZ`GEy8uRdjo7X(K> zzWC(qO~c*^XE${`PB*-jR5$1Pf>hSyh3#jV3^)$x`+S)xdv%@JCCfHuDeLII7TNRn zF4#8p|5HeQwn8&PHcS3lXwTV@c*BiwLFYp>krnQ>G`Yj;ZAh4n%eK~C9g&h2DOev${N45n vYLA#TO@vDlk7l!LJ$}4BQ0k@+%kjs*TzenxjySS)-zmfWd<+Z>BFszxs7VO= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b02fbc02a6528f684c21f7e4330b07d2dd5d9f8 b/fuzz/corpora/client/4b02fbc02a6528f684c21f7e4330b07d2dd5d9f8 new file mode 100644 index 0000000000000000000000000000000000000000..b137db2d46cbb3b054e0a62df47adba2959e11c7 GIT binary patch literal 2131 zcmeHIYfuwc6h3!%v*aCOYzS%~f}kX5Zzw@PQc(v@Q78xjoLW#QT8dghz&B!eXj`?S z5E0O#PALq?ql2%}5qv;xts-bqd{wCroDspQ<>6yH8$#=}{^|5rXZr2Ty?f4lJ7>>5 z-?>Llk}!(^Fpy+(&6T$DeWq%0;U?AE>HhE3KAD#~ZNuEH`;WE@BgE#wL_jLJ|lQ zJZQ&O@Ms%#j^VuC7vTV{0P|?lNKrC^VYD(VWeu*7k1>uP&+_B7qp>6Fz7nT+GH z3NOPr0b^AN#;REuV+T7C%hl>Uy>;H6-X5$umi1T`{AUja{?mK;csIZq`BL=YRn3JC!~5L_VCLmrTTW8020enEfz>3t3n9cwZT z*W@EcJyWJX&Kp0oIoavNz7QOYl{9HoiYYlYydtZ$vLe676f9q1V~mWsPP_Fn`5|;SXnj|JAYQbfkCTC%f*=Zje2!t173Z z&SN-z3}YMA8dVvxuFZcDGu-vEqC%24Ey_!i{8(gxs>abItd#|~8qVmi8?K7Ck4|MtB8`syJVN>&- z@gl9&v0#r^<(Z}4e0}I<$sTfKZ1-7B;HF`k@Q}j9SJmym)kjIAqVMK7OiIM*$)9y5 zu0B-V{YCk^HRlA~HA1tdanetZPgeQPYnP->GzP`Cc9|=2;?+F{JF|0k;b1lx*(~>; zls5C~2}*DDbjl2HtC%2VL>0!`Z=&XKT>2gKhbk!__x|d`A3xusOY&frKA66EZg`e# z#f$9it4p1`N?rI}@x`0`Oxxm~E9}v2Mf^ZR>~TeRXXdmE+n+7zoSYLD-%_kgnP1Ri zZg5xLI1ugs(ZDNNY^U+(1dsf@llccjj|Sft(7^|NY99I2g#|GQ-wH;j86wQG1UD7FJ)6P>t35J+|nq^BiFvD;BI{2KTdpfb9bVdhTgmGc}i< zo;R(`dOs#&OuD3U?wGDzojUKhtJe0-*xBcB?0~EB z*8Gm@yS=*#>S`WtOm2$t^RkctfZlJ(No84I+HRR?YEhN@w*J7ZV;IIr@c2(x{ymRA=aG1AHu^H|RLC%X;LsnzRkM9qUW=PZt$6gyjlvHWlxF zQlhR!nfmA}^;7z|xv?o#ZtoshKX{Z+O4ip6z71jJ?c*lj?ByAf)A{n$#=xW@KmHv@ Csf%9# literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b13a1c5d6078c4edfb1b1c67392a1fd1f0517cf b/fuzz/corpora/client/4b13a1c5d6078c4edfb1b1c67392a1fd1f0517cf new file mode 100644 index 0000000000000000000000000000000000000000..5656d43dc78af077d19e8a4ca50080d0c1fc6c57 GIT binary patch literal 547 zcmWe*W@Zv*VqgelW?*1al3!PLrmRTgIpMSH|GSM~qQf|1@sb@1ZPV&rddCJJZz|O$H`Ja)2kpTp_85p-QFm7gG++fhe zxW=G~QFH+_6C)E7Ba;Cy8>d#AN85K^Mn-N{1_M4r9s@2m=5Q8fVdkRZL<2c-UPChj zOG9%*Qv)Lt!zgiHBV;a2eJD(Q<9uWj8Ce;a8+#cH8atU98(H>MyGCY2O)yydvTRG& znlDao-nA5E{AeN!YCR)Zwes9%r6r0r;(RYARe$aaEBf{3 z`#jC&o9b!5wq(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~QTHH^|bXv>; z(@o}^&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=%ugXc?fFLVAUzT}n_6xnw x6&9&{KChZIpH+MwB&rw`T1rZ)&l{~@HFwI5^?iH{3=AU73=E8nV$948S^y0dyG8&2 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b1d647f9873b9885f809ee3f9e9d1ac529fbc8c b/fuzz/corpora/client/4b1d647f9873b9885f809ee3f9e9d1ac529fbc8c new file mode 100644 index 0000000000000000000000000000000000000000..f3da96e122467e9fcbe64b57daf098890317a1a4 GIT binary patch literal 3154 zcmeHJ&2G~`5T4mxyNTnZNnMii(+~(bK!x}$ZuEe}B~(bg<%0SEd4U{}@Tw}Wfz%h_ zF?aw3C!`*bID&RJ-ndDeaZqw`{hse2j&{a(|V=U7@|njeKkz#oM;$~ORM7yITY#6H!) zc=Nh^u(75++;PFJMFtDakBjfg0ZGlf1kI7q%(N7K>mW>*U21*@&0`#fa&kCQ-IC96 z*SI@sZ;g8z){a6Bf*r6rTjQ?|w#H6rjj^dQVTKYQJT$AJIzZVgJu(3Ub#GIBCS;_Z zZVI`M0C{@Pq#ncATrU?Ee;ferV{ z)Lz-`m5FQW4DVO`)uGtUTiRQY%%J55Xz_hL?Sp`D>SzzR+dvyFJIj-u`L9Wz0^*otmi_lD=3lvKE{6aB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b2369a90ae16c4ceef256000c0a9f5c47979eb6 b/fuzz/corpora/client/4b2369a90ae16c4ceef256000c0a9f5c47979eb6 new file mode 100644 index 0000000000000000000000000000000000000000..c38e7807bcbbe85d333808a2be3d79f7e7a3c444 GIT binary patch literal 633 zcmbVIy-UMz5WUMUreBF5k+g`3sRa>B@pW);a1oS(rF1ZY?j4F-K_?N3;NV>7Bnn;Z zUm!U6fzEai3q`wh(AmL393m+#SP=_--13gQ_wJq{K#LO5f)E%0x=9jglpyk$m?%nQ z2*Irgag(?~{0NupaC!GkNDL`N&7NXN3Cta39+qUrN;-m&A{<%KCG4bijQJ#}h5-~( z{z4%g$CTd;t1+LJP=Jjh{Ic_aodsY;wVrqfzi7XWGqlYn^zP{rE5XhWf&*fi5so=38}fMf88>Gj-~gC`i%tq=LXN>W_^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bC3=9k$;ZCQX&Coc>GrQ#}BLf2q0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1uX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>k!4@CYh*^$T9XMc%eHi_ z`Qr5ET}x5Mk0ukj_0PL_mb~xymUnx7=ytxK)-!@tE6;6KTB2AZ{_@47>d$>)MZeyB zpQqV;Q$6kXwj@`j4@K+v{M;@V1f7!$cRh5s|61+iHa&MiF*(!O)Ap{26ny>V**WP~ zNs$F=bIKXKY&O`>vCxUHWMcmQpK-C2frJ4k8*`|vFbk6bg8?^)$*YkSuHR6T4T1rZ)&ugt;HFwI5^?iH{3=AU7%nXc-V$9480wN3y TjXckFiZ%4z&uq**vswoLbX>|N literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b3ead03e64f4cd07ba2b4e37c1021743e771fce b/fuzz/corpora/client/4b3ead03e64f4cd07ba2b4e37c1021743e771fce new file mode 100644 index 0000000000000000000000000000000000000000..f0798b0210c1fa1b9b2ee0f08e31641247fd4f52 GIT binary patch literal 853 zcmchV&r1S96vyAp>~8+p4MJFjS~V?#ynKbac#R?=!i!)O1O|Ci3@W6HD=9>E2#Ssg zK}6I-&^6E~5IPri?;nT`9lFE@8x>`j@N;{^=R5P>V{`!;;zSSve?WB*xhP6Rej;56 zzThREAwEZZ7G<7BnKf#HGjKP(I+tmRd$2lQebE?`Wx{CO3%4RtlH%h?#eL|q3zzCa z-buuJ5wZ_GY5+N4F$aVJWC4VeD268i1pS($zw@p9uV>8t&;2u*gt{1kq!4+|J}Nf*8&=(FY4iI9_-9^1-@0&fUaGJ1>Lm?5c kRY2KsEq+>)`+U6Vj~XnbuON`~3n(!LVw7_zXOV`M53Pm`&;S4c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b66e4ce7ce4f4bd67344ae5b45eed10f533ec8b b/fuzz/corpora/client/4b66e4ce7ce4f4bd67344ae5b45eed10f533ec8b new file mode 100644 index 0000000000000000000000000000000000000000..57d63c698ded6eb7e3bf24228d4059527675b543 GIT binary patch literal 2331 zcmeH{%Syvg5QgV+5=hc`A(FbOx9(j1UARziDfj|?4R`MCS@bOmih@tjg&-*SP_9Hd zspTXgSX*@=?YGI9$>g8OKOwn-j)mw*6*C|@B}%DF^v=XYZK7ONUlP(M(nrzlI8cIq<# zYT-O>V&A5a#`DNsi?ii}@(XZ4YI&VtITp)Il^K>0abM2u;2wiJbVBWS)=X};8jZMg zx4Y&7xN0o8Ng5yfDJ|DFGXazt|neRfCO`g4W66R?qx@EJ*lQ!Zn0ziMcVK r3gwAKM7)rT{v#+)UhL!hZk64r=zPVSbFEz9J^VeI_EnvB#S-%YGV6Qi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b81e8c7b0c87c0a16eab29b88c8ed6783d32439 b/fuzz/corpora/client/4b81e8c7b0c87c0a16eab29b88c8ed6783d32439 new file mode 100644 index 0000000000000000000000000000000000000000..6045217744943d90ef44a4e8eea1c8cc492d6373 GIT binary patch literal 546 zcmWe*W@Zv*VqgelW@2Dcl3!PLrmRT$aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf2q0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1oNb-CiHMoiC{Mj9}HubDNcxDAtI-d@-r|b6;4| zuQ%W4X*Slb7F^7w?RD literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b88c521e277511aee7750ae551df7fc1cf993c6 b/fuzz/corpora/client/4b88c521e277511aee7750ae551df7fc1cf993c6 new file mode 100644 index 0000000000000000000000000000000000000000..f1379461096342c6bfdb39966a37a31ce4978ed8 GIT binary patch literal 768 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*OcNI{GchtTaWWhWe%Inz zyZ^NTCmXwwv5}#vd6YqeA-4f18*?ZNn=q4OsG+cdAc(^u!WEpK3sK>UM@6b`@K7+r zc=-C3i7ix^*^z~um@7#vNi|e7kOxILmyCpGUP)?EUTTR#cxFm^W=S#jG?A(sToOfk LnqYteLg@+sdhL%m literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4b99ac8d42376a474890a941042b422605b0d4e6 b/fuzz/corpora/client/4b99ac8d42376a474890a941042b422605b0d4e6 new file mode 100644 index 0000000000000000000000000000000000000000..8aaf906844e80d64725a8b351dfc0489e6f51200 GIT binary patch literal 539 zcmWe*W@Zv*VqgelW@Kbil3!PLrmRT$aR`R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(1~CQ(ZU)9}42+u@ z7&jO+F|ILaViaA#%*4pV#K>g8%f_kI=F#?@mywa1mBE0|kjH?FjrlqYvoLc}aiW2o zIIp3Zfu*6jp{aq9iD8sDuO~7Wran{zq&~LTpm9F3iHxia%#FPa292Fejg2h(QvE`G zeAb#wcv-fkYt0v@H(-8~soeVKT|7(PcYMpcy*_k1Ur_5A!K#(#HY+Vrd^xE`{8{zq zzObTSZ@$mdY`&?U_Iq2Bs}ciKFQ1>=<$|Dda^bFr?)G1+ecYz!E+{5vFq@450?tXl zN{X~8FJMrcj^0s4z77QiDU})*12+V(|W#HCHI?l8l3SHFer6yH<+-pBr|=%Ji}0i1KJD> zybQ_=4F4G!7#SGE85qQvnVI%-GcfIBVA{sOwArAEX}v)cli&hoCPo7$PKIL!P{7H? zuGQvo&X$GIz}1l3fRl|ml*K@d$-ux+*gz1>5$1xaH83z#G?0e~N+1N$fSfoliU=AP z$r@oYtWhv90Aqv3*#-how=*%av1&K6Feo!OwlT0UI$yMysZ_9nv*E<+h4~AYm29h+ z(z-b1X6IvpA4}@e*!j72^HvHAtvtrG_N7MbrauQSvlhk*JIxV!{N~B*Jwi+}s~OjG z`LNriN2}k; zzh--6_TbQ|oD&O=N(g8!Zd`8AxWqt~jX6}7k420{1SLdZpcEvn%#vr2(|}dMLeC}c zR0^&p2AHJ=20S2Zg;`h)n3)(1KnVaU#oX9~q-wx{7&9}&HXa6sP0S3k3c50x7d{{Q z4*~bi{|<7R!aCiWFD&j>-Q92YE*xyk3|$6|?MzOLvrno{vdCh%bkD84SzY#bKlA1l z1~0Rn*YR6SY5Mm&f5AL~ji+8@${C!D@|$a~ygXv<+5%2{gQABg)A(}CH#eT%&*WIz yp7y_ZpW*hpz!#w`?AH2*vSnqO(P_s&b4{vJn>oiXv!qzTpu_;`8YJ)!$_4<7N*aRz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4c013395cb5ece5d66453efddeec60f793669813 b/fuzz/corpora/client/4c013395cb5ece5d66453efddeec60f793669813 new file mode 100644 index 0000000000000000000000000000000000000000..ae7f95fe8ecd3b68dd6cd2d8ecb83dc5e6619bf5 GIT binary patch literal 45 RcmWe(Heg^7Axs#6002Dc11SIi literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4c0430fc59399ca198329d1cba1937b111d61546 b/fuzz/corpora/client/4c0430fc59399ca198329d1cba1937b111d61546 new file mode 100644 index 0000000000000000000000000000000000000000..e02b2d8ce7d4b2cdcce80ebd47d2c4ac5676097f GIT binary patch literal 544 zcmbV}y=nqM6ot>dcQd;F6k%aavzlOK1UXxzNRdVmtU?+KU&IHn@Hqru#3x9KK)}Lh zN!VFtBuWy<*UUZlT;>dSaw8rUcrfE1U_S=B7y_RH0eV1gCdW490QrEtb1iRN%W7*X z)D(wsW9k~AoRw{+&K3zXCCiN0UUXW#4I||p2X*r%w1QWizV7$B!SkHSUt%IZ#DoYR zvt;HP_nZ0alZtEl!q6H{RYeul8JZw90#(hUsu`VWOhr|9FMMX-Jih5W)fS3L X61Q+c$5p?UT-C;D%QnZw?Em-zJvmau literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4c161b61757c06aa6c6a451f1a4657bbf361c6c4 b/fuzz/corpora/client/4c161b61757c06aa6c6a451f1a4657bbf361c6c4 new file mode 100644 index 0000000000000000000000000000000000000000..8e1dc91e746bcd2dbfc82807f5fa4d6844c7f9c0 GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W*_7?e7<$4ppRl9|3>o?$4%0c{2b zUIt|bhX0HVj0_Co3=Cq-%uIW^8JKo5Fl}RC+HBCowBDeJNpJx(6QcnWC&MuVDBxsc z*J|@PXUoE9;A+Tiz{$oO%3>hQWME(@Y#<2XaKY3X7#J!V$U_7r5P}Gx0Ak9C^CCnH z3=Gh?Fl!79NU{cOw1EMb2D2My8wfz%&cw*Zs@=%Kpv>IZ#=yepe9>a2Qo#z&h7+$B z<}X}UvaMoD>*AD~osR{6EU8Ol=jYbVTPZBG@)*}PJjZ!fp2m{YWIE7$tc zk;Pze&#k;!UG{fBD51T~ zc3wBtVoKA$-}wvX2^gGuktw(JWR#zQz4CH{wQCEC4EWOQPjWuYG2gs@zX6kDX?xn2 d;(dnO>(XBM2Z>wjGhhLn0%(H53=HpKLI5Lf^_u_y literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4c2369673f89a69bd79ebef71b5775f9fb317e81 b/fuzz/corpora/client/4c2369673f89a69bd79ebef71b5775f9fb317e81 new file mode 100644 index 0000000000000000000000000000000000000000..0d2bbe7d486ff7002449422b056bf129f1bde9fb GIT binary patch literal 53 ecmWe*HefJdVqj2XX4W#m1~$M284iGyg17+FfC&Tu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4c59c2482c6404082a0635858985b71b82cc5146 b/fuzz/corpora/client/4c59c2482c6404082a0635858985b71b82cc5146 new file mode 100644 index 0000000000000000000000000000000000000000..b6ba9ef305c262f227ba93d5e1fa18998aabb6b6 GIT binary patch literal 544 zcmb7>u}Z^G6o&tEZ-`BsC=zI$VoDdah<^qL3oeS{(7`2x50IgVi-Ql)!J)IzNp#H< z2oBXJ&_NUmc5(0}93nSOwNxGaIKzK_IQ-|HTh+vt0yec~4gieR6stz#z6p3}0GU95 z8c@|*Mis~q@&b8cS033FDhET7yJpI<=hn^-9=0vvUR0rD>)5h<#W?c0Xqu8+CYh|0 zjFPC%Wn-4zC1aj2VaN_mg@j zHg;4_Y*}NWl&Tlb!k1&fr0Xfw%5_)HuC*4EPLr47k{sLs^)GnGFmQ4dldm zQ7lE{VyJJNk8C0%D+6<5FM~m2CsSi1BgiET3=9poc7K}l;Hrm%-@->Mm!@46J#qP{ z-Qr-4#ZzXiTrT|aaoa)8xJ4&d?cH(K)$wxplocjIw&7pmOs1_nefRS&hI6gq7U~l2 zimkCXXR(wnJZIBp9 r+sw@^&sN)<;mw}pHf5%G!sy&^v=j_?%y5=(PcfH^DzTfM< zpXYw=p`!?}#sR=Zk?OKO?TE(#6^unmCs$0Xp{75wR%|RM2dFHl1tXyVfHE)yK!N}S z08IesD1!To62JuloIk+%LJ`gjijdkvC=S8lNMP`Ui+6!q4h1R`Ni#P&Z|YM<5CQ=} zM@uD0BBCC6A{A%vVM&GR*g%m&c8?6_v)ly%0=}g_)Wa^4DOw97c>L%HzJTc&5)>RF zh+(=3giIGf5M*d7TXGs{$gFuPvi>t?%Z*@FU-Q#qQ1Lebb&p8*5JMt;q=f*z&4cN4Wtb z$}l6ku`^s~lhU_Q^?W8hw&9c2E{(kTxzBm~XD-ejxKz73!X(AykTHX=b4=lePbACX zsoBnx+lq~LFQIod49v5y&?(~2(e|oqDY|(qIJF0dA^^#CgNvXp5%thj!PD`yt+6)> zFDZ&u^!Vii%fw+vVt-009zIN6L%bHGZ=84n1-qY$CqNWIB=Rpzz+N~J%;|^=&%9|H z+DDx_OS>+$$e`e5I=grM>fk2UHJ!Tp&263HExr#p1FL_;|e?d{;fCDTVuu zRFi2ek7;^myAO~`6n&So`5R}@Q3T*sz%b^(7CZnc!<7qcBZo`KG(VD*IC=wbh1s|=rhTO{p;u4d3`bZ;O3)&v{(C(wZ|-I*gpWFqX-?y zpf&s4;t!UMO-$ z2_P*1xe1W#P=qu=5wb?QkVMK#07*oJnVX!i*y54*g?Wai@_Xg0Y^!g^yD(YGb}P0e zcQ(d$4&<_}q{9i{Ja2GA`0k70N-vF(sqvjWtP~2 zp}Z%}$k+_gZemO&NE}TlL+!7Ay_H& zr~Ng1<>{VF2Q~cK_1K>U_{DxlqoXJ|MFF4~1zG|4*B8rq`xe~Q{=2Ji4x#>na{i7a z$!Ol*Cr#YaGe!Ua`vCygPdUf~K#nHw4z`Ml3Zg@44y}S08E(Og4vVpf;qzjn`Mdyg zUUV2-grzek-U&KF2O{1>mkHn;XiZc!BO(NX0uG_GRtf}BF*X)B5rTk9rJs_gPC@Kr z*PGi`SNn+FpG5m}cBRFpRtBC)v${_XuQy-!%CYd|PG3fL%Y&)(gxtGR4>mj?^v*Z% z(OUEAu@|^%uN{xG;-I(XYZJV4a zhr@bR+-t|*4dHK;`LO`T%Dt>Y{T77dWe6AjiSXYA;s1I3CDk?XjIQf8Sk6c?`{Csk zkuZ6&|1zU^)k0sRrx{$kJ!(IQ4QBH0eq_cvGa{4{kHEw{IjPj2^G)RUsW*yNmp3yP z4A^F=XyBj2*byK`z_5+72`l6$e6=vo2|A)!*?mL8QYVtIRIP=wOgK)$ib$Ze%;1bS z{u_On0D~xDoB&fI02E77^S(S<^H1L`l*x}I{!p_`Nmsz&t?4n0X#6@M+C!SfKc6XInYjU0MuO1YAUpANl?$7bs6#C40_z_q@0b> zS@W8_)z-wSwD8$>^{oXlm+x<8UMSp5)C=2liTb>fSo@<=R*Kc8AG+^b7;S|RFmToiVy>N?TMhBNO4~JK6lCH7$iPG(Kw>K+X z&flUJ-&egJQ;y%VUdt>eg)x>BR_imwYQ;&4)T7ORof7>qWNALM0-PUJ@T_kZAv*h@@I!8W|fpLj*yo1z7Kt~BP z?9pnCHg98$S$PdI)^(M$X(w@1WX8wnlV#Ew722e%mD!_9TpD@urZ2|8x3P@ncP6)& zKcbhL_lDW~-|ppJ6l%;&J6p0No?^7T9X+atk*%v?|Lm19yK?vcmI+mif z5JG-52MhL?(Qrul=riVr5)?5} z0tgBaAi-=onWxJg@pK{P=|UU{w8$Pek*5o(I0$8gf!LYIVw9CMec2_Z^b7VE`)ERC i286?+QZ@y$jHjT z+{DPwV9>w7PWaKNK)9eimb9WMJU~%iRr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4ccd050b032794d602a29300fadc8368fce74b10 b/fuzz/corpora/client/4ccd050b032794d602a29300fadc8368fce74b10 new file mode 100644 index 0000000000000000000000000000000000000000..173f0828f8763ac46d369d2e044d1beeb456d41a GIT binary patch literal 544 zcmchRI|{;J5QJy{O`=gFNFcF^57KEfDJ(2(1i?ydEWC&Zu<#s$7x4sI2!e%Yi5Qij z1OyAG*`1GNW&ApTT}KxdeM2Tb8=0w9Ubke@W%~h}In33$udUF_3CR!pV@(!KW;5HD^q;RA gVcFPeYLnD4-pYT`Zq6AaM;B4u3W@`wxS0P_Hzq(}rvLx| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4cfce7610603fb34b52899d5ae825a9267cc6f13 b/fuzz/corpora/client/4cfce7610603fb34b52899d5ae825a9267cc6f13 new file mode 100644 index 0000000000000000000000000000000000000000..521bf85e805af97ff92e21a2f0d1cde84287cf5a GIT binary patch literal 3108 zcmeHJdr(tn7C+y;Hwg)OfMG+h0x<|Gpng$N1W~F*Qv{462x>(Uq*-i5UV_Ri1Z0s? zR6s;fe47OU6?_lS`Y5%lD82xdDpkQ*6|GuCuy^N%ptQ9!JF_#p|LpJ1eD|I+=g#@Q z?>v4-LXzM`04Pbap|a_QZnvgFSePYCnBhL|(2FH8)7LM`(M7AnO13NfWG~$(;5oK? z16emGTg+GH8{dA`vh9B8-R1GRbLTs>Z9#Qo06;>LOGpA? zf(y;q04|$jpRT;*=7O+?!WeVeq#s3z37S@ju_+@M@p%~I&{2$isA4F#W|Ta>lo2Cw zD3;+UjMW&+R2a*=FveEq0>)P1G~U_CdA##jMjXy)^b3CPhAk$r-#|CA%SC^1Gaf4p zZq!&d&`lr~8@5g$wvqk}B#3RM5dS zOiZak*hC{-9Mz5hqE=u5n`@u0Oz#pPWXu9mgAiR=gy!)4U&cw`))~OG}m$$phtEav+2ND5X*8>0u z`eYI@yHRf7Rs&Mp>+87FhTW*KB3ycp^k$W`m_`3|HPQ9_2v(REx#CA{Dsg1Y)@=(< zs;eg~TQKhM<_(^ggsSGPzI@)Ll=SB1>o|e)W+zP^e`~Nta`McgragAuw9yj5Cxtot zoau1ByK+KS{LPGOr3vHAHtnB3w<*dad%-1-UFDIfyC0CBCr`O*Ytgc$ThhLB`GVsW z9Kp)^>hP8_06WsqjQaQ42LR}0x)sLqRWJC{TTCo2H*UPv#MV4oF?MjUW>o7vh1!2+ zX_YpkF{3O)yT2e}c9h+aL@F>YC=A}7^%u|9JXSP|glG1y?y;_VAt4b^LZ%n;8f=4i zu*|m`dY?=iy+MmFR{Xs)KLa~zq80Z`nO zG4YKo@1BDhn!|S05i4zKl-Gv;+h#N-UwzpzHQhJ#N|96a(t<1bb&i&Isu#P5y!lle z+~N15dTd_qw|PhBobqWmX8RnSRQYsLm9ICgK5RTRR_X6}<-odjB2mc);!_0u-TUC{ zc>%jlc@|dO_LmKJoBUiKs*a1qz*r^GebNt}fGs>do;_69r8-=Dc}WwmogL&qEKyXp zXxNjDPWHJqCh}|U%UY*7j5p5PhSgon zu*v~=gDuz`dqDO83a4buJisK60_*|MKn(*#31h~3mrA$3wmMyH=XZB$Tg8K};)1Hm z#~G35gC>tNq$02n>dz$8uWwDVXKAj;bS{k-=p>q^{U|OV0wwnw13>;Vh2s|uqvhNN z(~4C?wqBOivv0lOVF7!+6Kn2)XOcq>vFkUsrR;Nixnf(L??!&>`J(MFO6(7zRJX-V uwI9DW+87*NK61*5l)kHcQIb;C_tlU1do>!DwAIO?vw4!3bDpdE_4r@@`Q?oO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4d1a707cdb313724ea95783f884bb18c446aeb13 b/fuzz/corpora/client/4d1a707cdb313724ea95783f884bb18c446aeb13 new file mode 100644 index 0000000000000000000000000000000000000000..c1a2bd379088e136c6aa61559f12593b323dc757 GIT binary patch literal 6600 zcmeHM2~<;88onSQHQgmjG=+5hzly1;rwQKtTv8i)=zrQWYdDB0`ZW z;s9D(sEQy6$|^(_sZ^~fE*sXaY2)Bl{Dy!+05@4k2Q zegFUcUuY--EN}prqew&5uv++IzZ&|g#PSUb8mSqNEM(iN$$oQIG=Yhb0YDz;03bvF z0)PqtG!(&oDhF`>0Ot#E-jI*;fPAFsFp5KPI1(5;>Eu~FH;)44iKN9Tjw!?P2tptL zXm271Nkr5QPo&~(-At%Z5gW)-$gUA#9HuMRkIOO9f|}S#GDUS|IGYm{&fzlLg98GC zxzP+4E|1~F4S;kNc@r~e#xi9=b7%%VRpd?Hg=Q?4c=*Q4aA#g7;Y;b~M+g8-$N(^5 z7cLvcPO08rp2^=xXG!FZC&t;oxgZ>?&!s)P2u{<`iJ%C9QETeH@qU4 zc25lVl&6>J?p;IcZ5>^1TccjeS*qsI+*x|_cwp)v4n+V`-~v}c4I=8MF$Yh>EA5WC zQF2jMFh`S9J-SX1dNk(8sy)oh(zYUpriVeH1$xpNDn z{@Ff^qnsqm7J7C+Q!rfY4|Hgg)!{c27(?62J2K2155GW(T9z{>Y$G#yTtQ{^y(HLfR@uybAQr zEif zBL|R9fZPPgHONQWAs^W+UPvfrC4eNN%;FTs%T{>gZDF3SBL7zTDtXk`<4u?>X1giN z#Qa^1?Pk!NWhx%d_~wOUGb9zEP?S_=Vf%VW74IevAucN#tg`cNlQN3xV>^PtM8U7~AMPr4X&efzP-> zJYS{1|Zv7b-OcSd2_JU)YK5|D)W?T*b!mI?5NOa<7f^$CW^!M zGh#=D!c|y0W8fX2J+vd@-82{gE`=6ESwkX1Ajsel8Z(H?jf}Q5#_xW2 zuagc3V+-@fx*xZ-eH6!ay>#nUK(t@?l1_Rp(;?hRz#Xw;gmeXM`dPN~)_73A-4V@t z^Q$M`41cc`;i>S#im{}A{3rOsOYq143xEG7_)BbVW$RwkXf;`sXn6g_Wj-%yweLFJ zIE4~#-6vV*Hv8sY7iceL-+kYZSvw(P5{|-zLMb6LlJ`x-_o+8FY^v^HtQfV*nWKz< z24g0G7!E^s%sAnzm4yz_9>t2{YXXxxlfa~^u9W1dX#$f^0+m(TwVwEIv?THfqJ(Mk zNR9wdEQKupF0pJLu8Nj@L1z0NWZ16f!Wo|C;c=#_z$?K2#(;CHBHn1rDUX9CQ5LZ- z=a(3y#V$AIbr77#PNecH7DehrR0pdH9ajrY-yS>=bcl%2PM~}5h)Y$Rly<3my zJUOzE{DhOAzKs6`drWmca$l7*+UPG(?e9&ryRvsEyw^I#m2)-Uoa=YMe1GE-jXRY- z^=W+rJ@433nks0ex87^L{PU&--)e*kQqPYH>*8^%JGAvE_qiu?*Dfm@w+R@1MfLA> z>k4LN?`zJkT61RABRS%#DvOg(El#^S3yljZ9ere6s?tpJ)W+QBR(;*3=QLtG5d2fw zmDVRZ>49Im&`>a;&y-LgQbYhWUdw4OvFVIgELd_0aWflpyVplK6Rp1a6?wOnzG-F2 z)6W%m7e`;ZzmsvkWG7KGbl*klvpQna4{|xlrYYm@-82;x0LJZ}JAPG9mYLa97#(f= zylg*dNadu>+Jtw%Vc(`VC=8xYu$7IDNE1bVVNmM8C$8?{Y8SD&0rBWwP>DPv5c058pqAjh=u~vkSC;-Su$f7bf zEpXGuZ$JJ;^JDP8+5AkBRnl&p@!ej`^4$)=jAV^ti^&=~N!C4)WQ?oF*UQsWCx@%TL&c70Ev)R^S1H!mtOos_2QpduO)_%%oIZi ztJlowhS2Q!afW*Rx}EV?z5Z{n*Oq^Fy*6X9uwHn=Hbs@=_V1#lD@NG&Z@VXlzipHA zgQqn~qwA?oKS|Kfs5tSazK)l0bXww^?(Yl}&`H9G98}fG=52~?Dy>1LdZJP$>MVYT z#Fm)6vqU)Q67zD6QyW{_lKnRfv=%wQe-HzILlOQ}G4GjB%+f_z|MyAe-&KXN z%3BgOsQA_Oa;jo_QQz8+S(%vi^d1iB{*;t69w7kJ9c=NvPzy?kpWM-0VQ$5JLE?kfo@ugpd;jIc5wO$YVG`h{@mIJ`=m!WT;FXO58qae@^r? z<|sOO4Hm2^BT49q0|*KbAjDiViREfOVYx!gausjsM9gHlLMjeI31c9( zCz6_ zwq3Ro5#<__OEz0=N|*iHF3Ks-em~Fm zeV*s@J`@xImKXpmP^6)1SUuv2e+_kYV)@2}jpU5Sma=WtM1O^qO<>Yw0FVc|00h8;>j30cT+M{5)NcZM7PLr7Tt~G&taKrLoMM&B1vsk1e3*%U~y<3A%Q_5 zoM@UWhf8zj1VXB+ys0@fXP7ad1vH0Vs`94qLvsd0G<@S_II}O4@U`UqBRGI2WB{13 z8=3Ig3*EAKBS>Mr%t}&_||M=k-?W zP@{CS*lm5`T&v{aor>qPDKV`dZ+32D+7vuz<}X>3J9?>UbA&;%!4Z8bOXGyhP47s$ z{Zpg8<>_U5`_@u=TSr&e)o7HmmZ^I-cb48d5tKTJK@oryxWd&?6OX!UDqtyCtSRSj{$KUPq(7f0wtJx;I)X4GhqS#Gqa_1GY z|Jy!{A)O-17J79*;>0Ownr{sKK`Z2iF>~>q!~L7SAU<&OICz4c6^o72%4E4{$;~gx z*HcVVUg%EOIy-QPP$BEHfx+6jn1Uhzs{kf^4(!GPkUZg&@pNQQ?>7&#_S_SQY{W#h zK2Ts*zxOy_?1aXXPUyQ~U-#ssqw%X=Y{Ye6rgzY49gYqvXRNo@>3^{$F0`#;#JfQM z{6dRzgFaisr8S>v-1qHk8g4J|R?_=a@WIG-&AYEJvJdY%9-#c{AhPv@iL&q?fKX6` z0wla%v>=|a1Vu&iLi3{1jf%Ke+65zuWwytzhHl-h-JPG%Whk&pV76#lc7jHu-^&X{ z?#cnA6Ck$$avk!JcF04vh!zrvR0$vfFS8`Y>54TLd0ReDRh56MdKKU5@9j;LEK<7} z!_?w^q1w%%1;b1e#F9et<`%iJZ|1Ieb?kKqwt(;j}Ai)c*$4U_1SqD3~f7=s~oDGIPe80nCqwf zuiW4>gO?7g`1WWqKK1vF`9Yb2qTnW(=Ff^fzX* z!{BP+c1FWGLI-G%$GU6M09*zw@v=sE1c#HsAQXBqhZ7ZTWrE=$2&j|$IcdRs#4cvL zv2{a(H{b0Swx9V|X)&pF0kvsn4~XF{#@k*wl$7uFq2_izTtJC0xVPYN>qFd-jgGh4 zmQPN+z%+PfKFNuNUZ$@Nuue%y8cyZkE^7YqiCw9B$fK3>)1zJ~rhZ%{%qr-gO}Z~j%b^Y(afzx`3IdW&l( z-zopYO8xJj=6{LJtxUb^nysdb6OC@Xyu#xqt?^s07pGX_qxUq+!gl|>8+@H5%zGai z(Q7Bun1o|6p->``8Oi%D^2gMh8#h;X&{mFG=P0OPpTiiTuywH!Fl^_n6TVqh=s0UE zaL3A$XG<{2YOBQi)Qkj^M*x*oI<;Qd@3iMmkK}Lw6>cFben>2vkEx<$UzFLg7a6wi zxpl4-KR$v5udX1)0gwUVveaTKpv>EMjHe8 zYW=;5_E+}}MfBRFxUsI~TX6gjS{!Ixs(H84w?3_Jpyxe1Qd0$`^!5j>SAN~R@O#ZL ze(Hr$L0vp%O^1#?=>g|d?z-iLOk_j=G+xhX zFR|^6S1MR~8F4osbHCq5IvcIA$+It&_7q27ez1#np=1|cD{TKI^7A@; z(@%0a$!00z9^DjG6ad@2J79`}%Pk2fA$OG9=H_SwH9XM0i!k$1%4#73Bs7*A-;eYS}5|^vQv* zmT2Gi_$5o<@KKo=OGUU+vB%3IAH&L_O^VCcZR{X=Rz|JQJrH&1@!TcLqB%>JIkJmc zOO{IAJmudCp1J)I@(>-#%v@NC@DN1+c?fYLjLk62jPcvIe_ru3C022{an^4~F~e^M z0JDlUjwupr*pyiJMiGT#4SZ{2t&kLJ{ht&oDk`S*QIL%VAWN8{0VJkoPW$5uNTL9m z@U)t@?Qhb2@h{C6--UQBGYtp{<28LI5Sn{`l*a3SM7*~8f5&Tc218g2PhwM4CGNm( zO1e^{L;v>sa@aezIX`*X5H!1<>Gl)&{j`dcZ_0JN#Z~*1&Ez}7ICMHeRhuHH)3B*z z4l(c*mSr0_9pIZxzGKwa#r!NhJFR3bdIZz<*K3{3n9&ZyEF6$&C3O3Btm_ zTf!bx`sPMCSt-4!Z{4SiOd)yt0E2XYPDnf7HfZAp8VSG0gUAd#C@aQ;5JLc+5Kf`; z4Ujzg>Snytl_{!4K_RG}0RQN487sIkv+k#qYnYW8to(~yl@$ud4ehSnUd0mmV5@j( zZ6Wv<8A<#Bkcbe5v*-{)_*))JQd&DO8q1W$B^DJAJ6}E)=QLyB4HSSqhb%h@>E-m6e|C{n-JcGcrAs>(nH`sIt2b3LFFkZ1|eif4kk^+o4u#C>7s~%96(Tj z0D%xMi#rM}COZnDu%l3f3@2^2jzUPrKqzk3g+k^hwkhhYtS!Do6MYc=7XGM0c`Aex gho<5w!mBf|9yFcGBZ@d7K}Qaox|0!LF#6vA014uo#{d8T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4d36a58efae3b11ad750afbbebf6f1b4426c6ddd b/fuzz/corpora/client/4d36a58efae3b11ad750afbbebf6f1b4426c6ddd new file mode 100644 index 0000000000000000000000000000000000000000..5b16a125916ccacbc8aeea0612893dae20eb9737 GIT binary patch literal 601 zcmb_YJxjv?5WUOA^eYi0k`^&B+RajY1sxn*1f^gpT_Wh7p}2K$5|IiH&V^2*(8c}& z!NCu7wu4wG+NFce4i4g=B(xwRbkN5w@3?z+?^yy`REQQtFa&g!Au=dU^vT3TNg_*x zy9weBahv!aRc@im+b5zhlo)jeiZLxRdyv0dQW-0`1Y(+as%9$iawf(C64m1X{A{q` z=cX|gG~;?IpcVLVQASX132+MloTM=j5AlQk*O?8N{nr)NqM--jh%A%(oGJG%{p0$@ zoMY4u3lH_Jv!-LLesr5n=jiEtlV95P(|GFr=C`~QH$NOfgMGFxxBvphd*l9HdYwz~~J=izZ5ePHBr7U^s3;q?B2+iw65VGB2 NVyaLSn!=S5XWbBHru56ss=2gm7YX;`sdJNq4dvWJ{}11~}!#5eFcd;_82 z2iXXc6v@GZBKh5BcV}m3V1Fk9AByN&1RYE}_CZUc;GKzy#zY~Rb26u-x3KyKRvsTj zF%$!_31;QGe2JMuk8qTyh>dJCBJ)|}VjMTBwL&C$grQ5x+`Fx;VAb3VX65>6p%_+O zRh4iVH16r?X(N_BYA^mz_C)*dJKIfghRDcfl4-9#7FJQJwTqhHR*K@+r$)SmWuSPi z-7-38ZfJa`1T6~3`3OlZjREfO08BeY)5rmyD+%5r`x1@sG=n$D>gVIw&4DC6Xria* GFYy7vm4sXX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4d4a2b9380be627ed32882398fd19a7f1d7442a2 b/fuzz/corpora/client/4d4a2b9380be627ed32882398fd19a7f1d7442a2 new file mode 100644 index 0000000000000000000000000000000000000000..7da9e04266a87e58f971a283e91cc8d7a00f5aaf GIT binary patch literal 6599 zcmeHM3s6&68a_8S2_ys%0|5m>cqkwS4k2j^ia^nVEhrWd1PVe(c_d+?;z) zzVH9P|GP940hTxbI4DwIIiwl(#IKsZDxqw{{03_JV@vtgDzcx_@C=HybKB9XKx*)e%Y5kUw9 z09TkRKoSvk!xO1EJ2!JGRKW)F6tZi0D39sN_v7=-b)gP+l1$N98OG&BhVl3e_uzoQ zV15+Cg)d+@@dF@TUD2Ek*(?hdD$@P0y9IGF2I7jl>rdQ7?$zG7W|H#gUGdf!`13xjpI;W>f zj~=0)8QIz!DzHi#+Npd#ix%DT>1L-^u1)@PZr-BRIU|=EH-{M|867dC^R!OL-Si4) z+CMefTb5R8ux|~mr)6ZBUA0yTZ;7TyQ%A|I6M-oMI1~X$z6)FhwTY;kwi2F(SKSkR zv-py{NJ)oRHL^~$=~(nHNu}ePsjZLKfV7>nPoQAeQ}G0dB8YhE0~4?Zjt5J6VnVZS zS%(Z!=PlN3N-5DRdYR4|+`c)mjd@M0sd-mduV}aTLw1p4W|K`;iHXDE1u+{}=gcXH z{72gmj&h1DU*OsGh##w>&E635qfYP(Q|`h$hx<1Eh5W$P{oskn%ou#EP6p3eM`3Pp zo`G_r>U=k*&e{G$q;h%h^(@}bg)|facqK57Ij|cKK+-rSwB>!Hl($D*el=g z{CrNCQLnA>;_5H7?)&sM4z-nasTh1N{%Cl+_TASPBMsqL|=AzOFrcICx)8jG#sxy{;^9iYMFO?sio zT?K%20OS@xu0tWx28GBL$wFcYD*+@CM_kJie8EoUAe2d_JGPu4{XO<89h}twHVBf&I+S z+9LHDXVA1LvAwt`t6ydk6t1Gh$ho=uK3teCyf%%$k}IcApb$|2CizPuB93Id6d?#s z7d$`0@mXW_L98l7LKg+${m=9ix)OLMwUJl3DP8X<#=qB|4g&!pFRsCyD z(3yctht+(#by%PK`9%MyN<&d_ngT#63N-xiuP;_{4=%r_`FCf*5<>F@#lnmP@nqgU zC`sIsJw^Zkc>sXxr|qW#U zxsjXTDlDBb@D6YVv?t=-v>5;{ftEyh6Cy$&$l(wgGlw`|H%`lv@9qREr1X&}P$ZuT~V7?e(VTbUd6#i_5<^?{LdQ!k~?w zm&TUQPQ1X?dt^Mxj)9)$uZ{4IiHTZ{W#27m`ss;XiDvMl<#W>_UMZ)1S}Erg@9qBT zOlT9KDreidI?c1CRvX9Ib*ULUjtN2nT?{UDr)M?m_x!*bSbb2{p)`DupGC9&u6Uu> zDThNb1-YYLPg+|)i{-mszWq8N%CBp22fc>r5auM}58E?BI)gU^1AK@>dsfBBBUAx76VS>qxmsf;>#MQp*3}Tgwy$zmba%}g{ zxgpY9#J%^i3A1KG#>5|k@dZkpcmrSPEJ8V?ya%TqP~*qTG(X z$dG;a#j^sPBV$Yrkyn8K&3@+=6};)z(;kP4BQ0ZGE-W@qjag|A@!cSn(x?~Yf>jvi|hsWD?o`?ej`e|mHQ`6(|iZK?2U?x@B*kMXP?QhDeTyu8SV+G=>O3PEv zEYG+)i_P*Y9DU?mDpM_THAmg&RDRcL=rnBBAN*_S)t0CFX@TFk&`>a;&s0$`u806= zxSrisY}*m1lE3&e;>I3zyWdMW8>O}7HF=Mzi7yJcA*vt^N? zE@o|6D)e(ze{XnX;}HrGy{XC^Yej^JGJryaJYL3T1a8Lo-N*l5^D{|SX}fXOcSjM+ zcLxBok~Nn523hw;kTJ3byfd>ns*n{fyD-=vt|t_V*k=Kqo+j1}JE$N`ma zZd&Eu@XXFB;>IfE>OU5f)G=`e|{$RYm=cqeJCyZQ|-C&yWybdNC6-yK!6ydpVV>XOgOF(b6h1`IuWxuu8@j@Q2H_hVtXQuNmi=r tN>4E)2iQ0EQHP3j2**XGbP9HM#$!YC$vrRR2L~QGZ0<%yfYHbY{{%6X*4zL9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4d4bed7ffa0c3127782cd04fdd0198ed80c3824f b/fuzz/corpora/client/4d4bed7ffa0c3127782cd04fdd0198ed80c3824f new file mode 100644 index 0000000000000000000000000000000000000000..ef9dfe5627b10f547d7bdd899e2e10e9b29d9368 GIT binary patch literal 1077 zcmd^7I|{;35S)Gc5{OBN8qq=w+FFgb@B-pt1mUF+EIfmPmr$_qR+dVPps`7*kg0aq z&kVcUS6UiisfINe*W`Ikf#fa_AcPSDMWAcw3UXmCC+0Fas1X_=V?UT~=9^nA5_(`~ zmN52pVKwq!O4%T;Xns-lW?i<+mf&6J_Mf9$9@OnXw>8e;UG*CnC3zfi$jH~lD79Yc hBP>{A?UPj(qkmu`CLuG|om<$*UxIs*Q78YhERs&?GbAy~d@NNbH E0EbF5XQgRNuo(EibQgP#6M@DoQhux1+NqYJFBZL?CpGjOL1=@2nsf~R~!fm zHa>-KU~T6~5`%w;93C8~zb$rWXLrBZ+1W^mT?1^ZatOHF0s^c61Azc_AX3$PA9@SD zf%chdkEuC3S0gkodgY0M<2Jho-RD5Wx553yr|W3jVra-DlUB5lc%ZCJbv6;-|QQe*6Ky)ik(Zwj<(||E3#&*GRf1-J#U>$#XuO!PZ6h0TD gW=}Xi>AyjwDjPM(nj$X0*|$tOGD;c!8zum}0;c>x&;S4c literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4e020e2dd25ae2a78cc2c57500cbe19002f8afd2 b/fuzz/corpora/client/4e020e2dd25ae2a78cc2c57500cbe19002f8afd2 new file mode 100644 index 0000000000000000000000000000000000000000..0b7c050c2c94f23e8fc387f4369d4ece41cc8680 GIT binary patch literal 202 zcmaiuJr2QO06<^+m7*=*NBj9{D;*4MRuZQWj$q*g(%k_Z!D18(gQ1J0cQ84C%}&HB z@rL)-r^Stl2_peu6^dTTE<0|eT9c~Y@B`g!wL4)HcQ=p)pk4+BXkZCkK?_*B&=bT- zp4$FpHAD-r`Lk}$W(}#1e%^MS>4hY9Tx8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vc2fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0P}(k6pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$K zx|aW}U#AZi=4rHQEKrwAm08DrH9B9{`K|VZjXmpCa@V~Sw_-iGe}~MvRBP#oLpRr5 zTb17Nk%^g+fpKwwfuDga8*`{EABz}^NO$SgHK#fD@yVxd{}r|`XL;$Z*7e}PlvQSt zFc53Nu7C%mUzml}fSHl;KeC5eK^|^ouzpdIJN24v)^}k^9qB_I>y%c1={5RVQ<#2U z_oB?93GI(w?(2+sVzSy};vxH~(DcGMOJGUS-}B#@cs6ixEQxybw4_c@)-oaMq!r$`d>8eW)TyDg3ZsLfEG)iqy6Jus%VBuq6 MU=R~#Wawl80H(IxGXMYp literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4e3de75ddd56a6da8dcfe73691192fb9e28ef43c b/fuzz/corpora/client/4e3de75ddd56a6da8dcfe73691192fb9e28ef43c new file mode 100644 index 0000000000000000000000000000000000000000..c349fd59cdfa1210c6b9a697968e6ecd1a080a1b GIT binary patch literal 423 zcmbV|!3qIU6o&tE&+U$wkxb33MpLq3^Gg;M7OcDgMJWppf`#W$Uc?jFc?T~cGR6W) z`Bvw2{_}M@krF)vbXEBS99lqtI&c*T5Cf5_EK86DWDc2eBNMJKJ2gU6`Op f9VZRzzi54T|J^-gNUmJrIW>dRv-}CZp$hT_8y-Vr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4e62ab44732093f6bec5a90d8b5650705fcb692e b/fuzz/corpora/client/4e62ab44732093f6bec5a90d8b5650705fcb692e new file mode 100644 index 0000000000000000000000000000000000000000..28842753d6cb7b95dec79674d2d13d5931245bb7 GIT binary patch literal 9360 zcmeHM2~<;88ou|vmq0?;8XFc_!X~m`Fwv0?qBtTdxRgc_8Bj2$U|06h7|3n7I9&?I*qM5E$70x>a!+?mL*bHbqa*dyd_g)FH!uMjbe`#$U% zY=k=B$ihfh<-2~Shm$L4LCdXAj492r%iK~Zt~@**WC?uHd4u$$))sL#SqU|*(J7u8NeYER z%u1}DI?KN%!h6@Fh&;y`xi4y~;$uc;j4ZUb;G30dU7i=~GO^8R(}DG6w$Y`nMxKE@Kh~W^xT{F>iWKP9-=6VE+7}om)%7gqf&20!{#1gAFV2}n( zf`V`ek@5pm{seG|1SsF^*BC4u2ZSEz#2m;b0LUVD0oMH*dwIfdG~KyYJGe4{;H&L$$1F}j?l{z zi*9bMUfyPTm)bJ=hWzisnw{0g1`fL}lQZoAzucvWmZmVi5W#I*k&$ zzz~CkEG5QbBxCpcyOtPiXQ%)`nXyzRHi6f}SZxM9FgBX+5-3_A;&(Hapfil8#EAF_ zF?Rm3F$xp6oX)Rw9a*I>qmnHYk zE_IrmZ>4rRTK@gT%jh>hnX|Px zAuE|kv)srJu+;frU!JXg`Y=BL*{z$#Uofa1jP&h_Ta#r9dIv@Mg*ID z=(V`bB#Lq0**=FJSD^ooQO$*^24>nX{%nEcJ#lDz+7!<>yZ>LCF2l@>PCO!%9PZKyNE{Ba?JFr z^CI9oKuz9`u|tBO@x}=eK1p}R`OGWsII30gqhUDZTZyNw;&46x_#x0gYO#9GjGki* z@ywYJDhO>vg;0S(fVddoONDwY@ z6Nm)D*zg5H*N6lmG9rJ*CJc}sVo>Q$R7k*v6pR9u5url?xD-NA{6fY)7bWEgXTSwS7ha%Q7hIQ!hCBrC+28 zSIEzC3m!|`KW_Ro>=syS#Qw6wVMA^}?cS!$8r|60tMF9Z``U|?R4bF`HJ)y>maacD z;fwfye zI`DWtZ{n(uO)^oWpfKN^ryeTU2_1m_4Pajb>=2S-WhfRi?2#;|JN=}OUI!J#bJrY` zq_B~9#WBq>`AZ*@vy_iXAg0$%GR~QrbQwF=@cfc|+kYqc9Qo$e)WvQu^F&WV!QGw1 zKd}x^KJ;O{zCm;TnQW6Mf`B!ceL65aU@G$tWzM%R$~~Cmm9^5MX?bbZ=f2o@;g#!I zTf7b7gT29*3%)20sP@urpWG;49h_!&pm~wr#0CeFZxHLeg3c=%I@ioV{)IfQXu($Q zmzB=u*N=oAU)%cN_UH+WsJ)Zdvh}-&K~W*;Dhhhg)2x)hAe2^^@%->EG=u$$lW6&Pvwe%?Z0TVuSQTuL$6< z#Oe)HML=JC!~Fo7gjs<{h1}3to}*7nQ?|F;&&>Edjw;HY^PPhTJSiu=IOx>xZ9*=Y z`Ze~%yS^={gj}Q|A`#-d1R{i#MI<>*KzzhTk%)Y;XClP*M{kk#QJL?u%v{9mRtp%U zYIn*89BSb{fVk}x*;2tT$SHTT(A~1u|8maaqcRI!-2wy-;&o1>sMqmI`I@SMvg4Jb73ui*Gsui9kO9C9Qop_FmIMy$ksZd~@diT- zg41RW^drl}_wEe)<3S1L4jzU9@JyjlfI$weaf_nMAD66bJM5# z1fBcKiWA8W6X(pTolMY~Dyhx~sBSZ7ED$?SyJ0siaaC=xiu@qua2MU+&47@rvQx!p zuI8Iu3XAz+vrWSOAg0^#wtI6+D6}8BWuS7{K!pomS84fw&)dpWu>M=jbOsy3`${mn zP@~yZ%ZwV$-dRBz8l{cfD#b`mX`_E>W3YsOADTU0quIO0Aj|(6&91IYHc+#Zotc59 zGL3F0gS2v=MOBuo>9eRBXmqLi?;$ELf#2x=;~Bi=st+L`00@fLNk3SnRrCD7xCW-s*bizrF9?_wIYn{(Wa# zpeW>rK+tC>y2K~gFS_+$=8M{Mz2Q?U88ctZZ!V~k8BFuPC!;dzra_Ppg3Ld_5DY<< z5CjcC(10O?z>o!sQuPfXDhZ+@5Vjepuq>cLMdc_0BM1c-z1`@r%lI*%k@cN&LUP{G zVAzlZfw{OL&?lo&7}*?&ip0%tBY#1ZrwVzP**UUFHHn0*na$f!XyY) z!Nw3!!3Ky5hM_Z|+xEC9;DnY?%P*?zXFRMfy2!T|nfqz+=%%99t5x4=*IBK%6K>O1 z`ZlfM&>DVv$D~d|?@#j$x~DQ8Qu=S1^-axCe#PMhGX9gn>&^s zoRo1_G~skl;i1F8!Z$YIt{%NPhqTYLT`uTs3Ef?}>+xwai{8@vT1~y$dwf$%mLvEzxoLRZ=;e{JV+0t*ps+Dm^k?NYYU9_`MTEqT<jim(7^w2i4#iW|IqVGO`qpUi=+WOowB?s6M0ZhyqOaxT2fioG#;5+FE2?i80S*WDK z2m$~RVv9L~X~5xtlg4hW#J~6-$@qptbqxnY?$OMX57Jcge#$O|$@ee6u05MrnRm{! zH|UNbdwmQX(BN3;v5++LX=UHjfFeT&)7>lI)I7h{JZxbU!7#{a#_8xZAH`T`Q^N(Xm_)@CT_l) zo<#lo&EYr9Cyvs4JS2H|F5*ud<@T;YK8igSF_aA6GKWtRj8{PNs|X& zaUoBvO#N+k+qE*#as|O4HaaHs%kONLR;6n1TK}^tgc;fQR#N9?xBe9-Qlj zbKQ7eEU#t%Ps;rTTX>^v+2@3On5}VV)`WJY$Ml)Bhe%8Qgt)RWCdA zWWdeFXLSkIr>{k}O_;acw%#hvwyCVbm+!opCl+k3x4IN$-xpc@z#A4e z8@K?c1D@qmbEb@dYB+JV6JMIhVaX(Nj!+@gH5i*OlK@L1jft56qfd}A?miur{qccg z%%%ik_RE--OtnqjrgjH1bZN@qv3l3UOm&$`;G*Qui1+PUbdhqVk@GHgk9Wepi1k}Y zc^S=4A)9aMOEz9?;_dHMbuUtjVmqNPESX=vbIjknps_-oQ%{pF*@|YMe*YOr&#<%V zulMFG{5ULgz!QS9Ls-Z`xT|@{J2-uefTU30XIIx6eS4!V5JUe-gi0ziMB0Pn8Ln zfdZLA953d_DFlBEAOr#c7x1_^m_f`N1OhyP=a~6-Fq5dmkK-Sh`3vn6bA=-@SKPZc zkq>^;TC%K{WG;U&Q{vf~Qk_=RQgfhneqTjk7237HPLHzf-ak0;UXDMI(zcg*J|$Hr zWTqU_)U7)5?W?TL-08+&Iox@f-FxCl(UsDx0TX%jvJ<62JK5n4ueSzXuqcjpjd+#o znzcUq#IN14Yi~mN-_!f(6L@!PgAQ(x)ffGAHOjf^=Mvw2Q`cO3a6Q{9r6Ekya(lxu ztEMP*{fnD1o{^7Ngy*>qMX=o8$7>o34tZHY)y0Tck)hF$C%f5(wD;`-U#YR4%}E!= zj#XYA1MZRLUM(?Go$vcp(0|}QpNLLhgrz+G+Rf*o=XpK%&8zpNKeGVZ*jneODQi3X zN3`DqlrKNheuzfY?|k!g@h`!xET&1gTWR6`mT}tuQ#2TlX_o|0efY!2Fo4OxdsxVB z00*3M*K+3^#}Og(WfHbfAXN}|2Y~^?A?L_-&BKq=sX1&|&B0&}2qa@sHcSY72E0aT zg1{E8#Jl9)9FA_X9RD(zKrT&{@da{@Opq*kaR`R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(1~CQ(ZU)9}42+u@ z7&jO+F|ILaViaA#%*4pV#K>g8%f_kI=F#?@my?m3mBE0|kjH?FjrlqYvoLc}aiW2o zIIp3Zfu*6jp{YTciD8sDuP2OaWMUWvQy&UeA6snDI3HmmBO@a#19M|9gF#~_Q)45` zK2H}{N1wGO6JC~W>00x}=}qdMRhu_AnaZty-o>-zeaE-F+v`KO^98k@5v*EyZnM%7 z#TxOK&n8uW?h7mW_2&CL&E}ixX}`B6xhgR*_44_-T`mYZCl~H|=x+bD+Q)5r?t)@+ z2D8~1AmE(ztE5Pq@&X36IbIv==UC{(S28hw-^RFD%0R+^lZ`o4R+xp!fWd$p#N=mT zVP;}ofb4WGkkcC(I({~oe3agI>Pq7RncXcBHYrBdy%B;8Cf{@AtS6+1c5HPiygT)p zwYZ;_$+VaSrkl(+ox5gNs{iEWH|E7VV;=2x{U!hX-J;IK6v4z)72W@;s!6>k1A?sh zd|BqP*)Q}yS6HO-`Mhe8fp0CYEhkAfJAq!Oif3 zK+AR|xdP>hMJHb7R$8@|H}D^sDpq>btI+2}vi;&u$#b;)t$&?7SeU2Ls&h7 zdtY?EuJc>%2^)LXtK_bGDQ?AjaQ_aOb*a|U5r=NByS6I5<0BI@`|tY20S0~svTV$u zvV1IJEF#_ATEW^J`}pKjxBm*;m$SU|R_l6jV9F}9NEnDUh;)};U2_^;0S`#OunMaI zGb7`FWDm1~Jlx1&{h}gw>NVS}@4}Kg(uX?MDXsp}YxK3IF#WvlMVUi~+aJB$$H)K% z3ieaiX}ix;t;qJDC9tIE@A>acJR7(;mP9>zT2dz{YnhOBQa?i8M@YP!nTjU|`{6U|&;j8$Th^^)6I?9y z)j#^ofrWwV<9SbPSv5(%vMt_&OEclqd64-au$e35hMX8PGXo1B0|SE?J2L|SQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*-B(Wsb zP|-jhBenp7@{65*me&%D%7SwS>wni!RkJ;2Dyz}&>h&tTBR$i>ve$jI=Y zAh1SNu^g347@+CL3W#yXf34uxMe!z+x=ME%ckSv(ddQV~Sg-nr>za)dVi*Vk|M)PK zI{r0Q|KCnDbC@D zCKPVJq~P+)b~>LZ%O`_UkhC;Qo4sUr`XI!XdcGK&?!siO%g z`SGwZhl&cbuo^HkGX6)7OKxynGBVhmY+f(Kv`uX4DfZe4jNhG~o!VU~zu=Fq#J=d1 zq^lo%j|#Hrm2Zxi%Lommt_r)#{7bC9zt?s&ZBi>x&fmH(R95iQpToYp_Q%(*wu-O) z!S4|f(jr{(r*(4mGUd0+RJq=!&M7%uTb%q`LXz>JMCz{tN&6(;zi4*8H2G`Z3;VX< z)QfYhOA=?8PCK9@dv|Nxp01Z4o|!rF9NZ+f?zY9zb8iZzj>+ci>p1@F|E_u_|4T~h zJP%7Y%nGqt^2Z_N*FWK;7oqnvjiydHG<93xZa>K{Ki6%u-0;qFOR(>M{l!~7;-t6D zX74f%_#G~=ZP5vJpP%|4GGDL1aP+NmPx|}-F=l2)9UcZo4Q2*e1znlU3!e|!y1$ta o`|HK|O}~Sjrm#-8<|~W4Rd@HBy$c5i8!Q+`B>4aT|33x>0H#ygrvLx| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4f57c8c119ef4d898f4c6334a78399e1506b5370 b/fuzz/corpora/client/4f57c8c119ef4d898f4c6334a78399e1506b5370 new file mode 100644 index 0000000000000000000000000000000000000000..29e0730a1cf8c5efaa13a3dbcc51eba4a78e0b3f GIT binary patch literal 3159 zcmeHJ%Wl&^6utAX^KwiQ2PZu8XhVQDG(8sThAxnhP^gf)t12NrARmw{k?K*^?+EIT z@ELpnf)!F1NGw4!PFyE(3l$NY=B(nmkD1)L=iKoH=p`rG7Xp6(ecC1RelcQ1H6rQ| zQGqyvFNBjTkYkaan_=p+dg}9_Or-X!6F<41>|gTByEo$A@ESv zA9*i7FcIwoAn2l_7lrpQUL0xbsEzSxsDGe60GhR8yo<)dCx)}F;BmxT!O34n1wN{J ztBez;YHRE4T(PrW4QjZno#D8b84MKLO#V-1kx=XoL9sknjM0MotpnFxcCOf4C^kUD z7DtV))TOtgQp`2sJ#8+_N>Ey=)6mZLY-U*&Am1-pR|#`QSNgJ=n$^)~^caKWAhh&X zN7msZ{i-*#LrdOA9S#!hmxOj{$}K#ZbkRB8NSe|yPb{(SGl0YoC~*PBKSwfT8Y@|- zfbeQ23y}g%6(H{wjo6Ga(i+qc9+*ay!mGsVQ#FE-o;eLzl%5r;+*(_%N2D#`H-uj_ z5gUN4Um4M`#W5iLD;!)+!m_5dta1STsorFmD>uk0HSpNgoFrK`y|3J{oV1u@f(iGF-QOa literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4f63f669b7dedacfe7a6a6e5e365c0b7b3cb9f8c b/fuzz/corpora/client/4f63f669b7dedacfe7a6a6e5e365c0b7b3cb9f8c new file mode 100644 index 0000000000000000000000000000000000000000..33153ae82bfc8f4ce3a9c8eb2f2613a87957b97a GIT binary patch literal 116 zcmWe*Hej%1Vqh?3W-uTC7#Q>!734H(n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4fb68cc6a17c0bb045ab2aa8c7d06a0273be24c0 b/fuzz/corpora/client/4fb68cc6a17c0bb045ab2aa8c7d06a0273be24c0 new file mode 100644 index 0000000000000000000000000000000000000000..2827c100f1edef0da51d20d9bf0f07800960ba0a GIT binary patch literal 548 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@bFY&A@nqf$=B<;~|44#(f4&j5!OKnHZUvI2nGXtoicl zL4~>j7aNCGo5wj@7G@>`S3_^VYiNnY zCDod|lGLKSR7`993^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|kuwZ)7#KMJGcqtTfB-iG<2DAy%?yki z44N3%7&I}8E?{P2WMX1uGT>$7)N1o+`_9YA$j!=Nz-P!~z{SQK%EBznTvVKBAScdi zXl7t(Xl`g~U}Rz#CC+Pf@;rizp}uiGvWbkW49tza3iu1X(@*75m)ea66`aOiITwc5vRdhUW^awfBD(Zv zH!^hmY%n=><)iez#sxAd5iPrIjI7s2oIGptJy-7CgcQ+^tuBRkr(Uxb_tP?&7PG)~ zlli7|*X&C5pS=9Wym)8KBX`$d^50Y5B_;|k>P%Hl`mfrna#A-S$coRGWgeUTLho~h zMJk`qt0v876`yzI<-w{o;)T0f3QMZb8?9e8cgl_ReS8cI3?j_T42+Co%*+e|A`A>X J&vlA3^Z`3o#25eo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/4ffb0574ef5da44f24bdc034923d80214e0b1d5c b/fuzz/corpora/client/4ffb0574ef5da44f24bdc034923d80214e0b1d5c new file mode 100644 index 0000000000000000000000000000000000000000..45b9b7221297d00523aa53cdf3d448b21b5598c4 GIT binary patch literal 728 zcmWe*W?%?pVqoxPW{Cc9qBQBJz~7_tev8eoEfNY;nHgRi(i@A3Wz}yKI);H?@#~g@J)pgOP!eL5!J!DUF+fDT#q8 zo`EUGpouBMpo#I|0%j&gCMHgX-y3}NRtwDLG2mt6)N1o+``*jQ$jZuK;A+Tiz{$oO z%EBhhYpRN=p>NGgHztONtc& zN-7n6N>U8u#CZ)(3`~rSjSNf;ObnvLc@51COpJ`6T#~Gjfm)Lax5ffyP2+sH`*|4| z8Ce;a8+#cH8atU98(D5>pIBz}B}uHiqVsi~-)c|T*t1?G zcil^IE7pVicgn0wwU&-JbaUP9Rp}icnV8vs*Dnq*@H3EQV~&;OV-aH!=`Ovx<}}AX zKKaz`zryzAEHAy)x*i;uvdSzH24W2&3=9km7z%jUm_s#%Sy&C285#d0Jj@A-Fy_Wa z2J06Uxl^y%W_=fy)R8{au}*3AmtLcsI^6!~<-X3CCnoznCLXe%x=!1D zo@zz5|15zeMSstKXX4qw#jzyn(bJMTL0QX$tdsJYpY@W}?#z3iU8V6bBz(rIqKOqO zb@KhGzVh5cYv!o%w}?okFfjiAKbLb8M@*zqYJ-{>GXnz)9|Hq}2r~l%BO{2*+}O(v E0OZp6)c^nh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/502225ececfd25bc9096ca0134fe0d16d6c13052 b/fuzz/corpora/client/502225ececfd25bc9096ca0134fe0d16d6c13052 new file mode 100644 index 0000000000000000000000000000000000000000..0947f3e5f8a66f7f3842e0ba79f37da96b20c0c0 GIT binary patch literal 2836 zcmbuBc~DbX7Kh)Ed}nUu1tGgRouLjbcI=0W|nuTDy#jXaY_l-gMLS2yoqF#Xi~x# zzeq@R%$>_p?<^%GcX=nR7qeZe->@qzeUC~OR@F))jzO)${jEHT+a$TTp|IZc;6}oD z*L!EzW`jD;YW>X}593MB51|TpjS(-3Lny?63J-#EMbkHewPFvSXzhiG5 z>C9{qOhdCY7_obOSM6a0Vo&7oAzE8$KA zjXV=(Xd2pt#ojcInW3`He>wIlE=}oaKwx<-zhnnG!+1YugR!#K*$Pwj9K0Tj64&y& zQn3*iyoJHZGAAG~gjR!OJqP8ZAt+bYlbIB_VEl*Cl7gYd;?2`^S|cUat;IEMUo~OK zmV+bmT_-cw&V*q`Zc+M)Kf0fs#usgJBE6bP$%qv<&Tp+=*{R2DSoPvt3#;b884QQK zxHi|(lMc z2^R`4+s}9mDpS)!;5FSA#daGp-;7^aM2E#fBLFX>L|fI9!~33}ED#dcZevsF`aoCe zN3^v(q<*15Nc4>7MTEx_-CSkdSOXitq%-MErmd74TROwqm0`_vU^)bWwM+111uWvJ zq^;!1<8k9T(g<`jU?LA-@Y%V5k883pn#Ye3rV>3FAR8tvO;rj{HmnYTY*+~;&AGx7 zy*>DWUx_2OI(ztmpI2+X%d~Ey-d>N4;r(6H`MoQqf7Ch{uGm?)fsZgrFE;9{cOOT>DY&o7t1>PW&>1by+0oReki@IDvr0O{f?jUDu8_Z z2q)MWpIPJh%_%$VzANiA(G%&WLu2zF=}8|B-4C0gde^V%?|Io7tJiqzFK%4*e_R>x zc-guFW3g_y@$JeQXEr&98NvnmN-UXDl{hH;iaozH_%Vk8(8xBV_&{eO)(@M<> zef*P0E=}UP@gI9hu@`*$Jdm<7B%{4yXlK2C&@q^6-+GqVm=W`1Sm2Q|&qd?UNA z`hENuxg?051JS6QdQBPi3;K(JF_9{o>9y&c=I&c^)i7$kXwDk;evBpPw|>>SYSPwK zhhYgCjX*FKP_Z~N7RF!{U^O%e5P=caKyCv#Pb*p|Omw8txKu%E0y~n*<|P0vnW#w5 z;{X~1p^uuW}B_U&|GMi&1V%tPH zXG$cJi#@ct&?Anq6@F>Cn8NhCmR>pc6ytYw+-4r1$)55biVhux{;oqjJZDjKbVEFS%2U39H9k1(&x49f?C*p|KYId$xL{`1te8HSxuYP6rh^iX^pM z?C}o4ihET_`;Z|7P06;d4?ScJg6Ri0%9$`_r zbpA@YJUIz6MYH%rx&Dis+$g`fW;qjId9K{!0M)m9dXL*RLTMny?^Qk}D=qNco2k&a zeyHe2{5$+I=EHW6>YaRX$<>=I^6fii&K2g7x1RLw)=ld685_92^R(`5){ywO{t(-M zXTiROluv#pwjZO$diI@g(1n^xQ4S@_YM<<>cMUN|-)?Z`sVf-PTN&*Sa~OGV8=&nl z5MoaL*{KG9g)y-lS>=yTdUnRz>8X8-f^AMjMe0iem|DhbWt!CILfiJ z26RBHqEwOdEEafW^W&*p4o@f@9#UxK>{a9Gp= z6ilE7yimFb?Y}Ov|{8SJWEcjUWP@kb| zf2Pa^UwgQJqS^qDTYIVHS;?#2wiAY%c-@a$1?=L{%$?4p9w&v#PAnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JA;7>lS1WHwOniY&wn~| zMIU+2vWai8PEdCB@NDXn3_mO4oX^Xo5OhZ|MsMCSZZBV5y|y1=JdqVgFD2gBY5nuP za{WoI|Gqp740+59vI^OD(dvg-i#E9j#_aR?6Zu|fwoq)%gG+vwG(i5eU}0uva699| zq>ysfE@8p96_xti|EI@)Jaodk?)KT$4XNH|wyI127yJ(eE}osPnSGko&Y=-83Z$E^AGJ+n_UH25F@E0M1f literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5026ffd82ec3ca107a55fa98a0e0182743845cb6 b/fuzz/corpora/client/5026ffd82ec3ca107a55fa98a0e0182743845cb6 new file mode 100644 index 0000000000000000000000000000000000000000..e0f7cdbc1531d1ecf66bf16079e59a3b74978e83 GIT binary patch literal 2439 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~77;G6B zco~!#82&RdFfuTRGcbrTGczCNW?z zsAwP$666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?F}5(Ui~@5l z3@pH0=O~J-IWQM)O%tOMvIiJh8JL?G`56qF7`d357#SIMao=i@6k>ENtaSg1nUx-(a{5{C)Wgazjv0OQpCRJDKL2aUR59B{i`AkxxX-Ov zGW++VS0_$**OdgHx&1GtIPsCrO}U-A?s-1@N`5*kWZlmwe8X|`_MeRR&dcQYm|k4l zeCTMh%4ON3hHA~)SH7HUs%-I(4^ye*UlXJ9cA}}n6oD)Il(drXIce+eWMXDyU|ig| z+@NuZfh-$ys4O3g7>mfy*-P`!c3e#;+IU}j|ej~tiW;J9RDushkjUWjR%*wj<(wG$Y>J3l+MyHb9^ zA6*VTX%5Rsca=lHR(__;#DfzdAB;!Mg)L#dZ_DQ^d z(d>L-^4Gi<_HDtb7w4FkB+f9Mc0fn=?$)?HT`xa8GjrrQxJhi?ZHuGl-V{n5lg-)J zacS58bAh$e$Tnt{I*$ccxSmK z*!REw;;kNW>;c=ljAu*#4j0(A=!Ck@PyG*>uh(BV`c}CoeSUx#Gc&6IF9R!&6%)h% z|Nnn6Ffd4NIP2w#)dk0Y{ohs3E!@m0<~Qaoc{r_h-+P&Z zRf&Q}`VFvyc~;Ap&G4Rf<3##hkOGDSA}GZQqFlfz0Kg>>id6xQk1d}VRB>h6BCci~`TX6U-``H-#qn+dVMUTiv# zO@Tf^6$7ZCiFkhupesimNot})i!78PXA>ET7|lEs69RYpVJ|xjCT#3kuadj&rMMOA z!TmdA)}>k#mu0#P8rzwi7-yeUon(>4aOs{~d9%9g?|$aZE3{r_JFnxnn9}s`cm9HT z0vk`g$duc9GRkkRz4G#iwQCEC?D-yYrX`%rG1=TGeR@BWV`+QZ|Kfdy+v@^f_y>tw z>l@0Jl|>x7x$fGkbj|3rJ>@sWvHk%4h>fPvqfBNyh}ULd#1aDEd@nynbK I0hSgQ0287axBvhE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/50306bcebf05a3cbf64dcf6487b77cbc3521f18e b/fuzz/corpora/client/50306bcebf05a3cbf64dcf6487b77cbc3521f18e new file mode 100644 index 0000000000000000000000000000000000000000..f353b6a8c4c9f951fc56cf8f950192524a78a2a3 GIT binary patch literal 695 zcmchTze_?<6vxlK_q`WSeNq@N7t3nOmajoYOW`0zRJc4a2m*)v2X1R{gQSSUDQL++ z=oi@57-f@FG(~L<{R7(2&|uswurR0Svz>Fkhx7d&SAZrs(Wv10&9XX;?GNo04rJnK zwKQ2=+qk&Sdt)bR{I=G)OVmN+&>&Hr5hH-e6`Zg5iD!r}6JNqQPh*{x4+Ur7Hof5! z$FgI&ncSPGjJkuXfA= z6-*Ut?KCa8c|5;A%c9B!BUVgd0TD}hk)Yuk-7VzM&jetETMjh=y&p162*%JH*wld) Q{kr&1xPp@rBx)FW2Ly(b^8f$< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/50342c8d3329526e48c4888cf3bdec35830f8378 b/fuzz/corpora/client/50342c8d3329526e48c4888cf3bdec35830f8378 new file mode 100644 index 0000000000000000000000000000000000000000..15168c0832d16a1c077464b80b69dec3caa6f14a GIT binary patch literal 685 zcmWe*Heg!8#J~{F%yc`~KcK@($^LF1mBuq z#Zm?m2Apinp|Zj(Oa=@F+#n`D3kx$7JBm-4(-~0wL^Hs{z;KqCK_ZbwtGa)ZjG?V& z=`*)qlht2Uy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm z_g_=elYf1c_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuAQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHUY2I2n!^KmjKk zyH=aWIa?M+16MK|Z z!u*BHO14!@XKfRq538+$+|4i+HB%*?Qjhk;=eGlQ&xu1w~I&xdT?-%N=8^#k$tJj1>Z^bB unF9+0*T?go*s^Mpd}U0$2bX5Tr}H55L0~gi$PGC$W@ZK!J_ZH`F?ImRJU(my literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5042916028aaac3abf02283666f0414f93f3b95e b/fuzz/corpora/client/5042916028aaac3abf02283666f0414f93f3b95e new file mode 100644 index 0000000000000000000000000000000000000000..20500ece12e4d4253d00a4f8b5017297de37aaef GIT binary patch literal 2958 zcmc(hc~DbX7Kh)2c&jqKUAIFanU%nG}?oHM`OI1WRzr5 z$`idvOmobe%U16yBcybDC$AT=U25L2D=mGGN)}f2N+XUzox=UCT#DNyxumhE!Svup z!g%+4XV(^kdd_P7&7BYHhw7sDPNNVQf@}PM4=}_cEJHOk0gW$Axqr47*RE#FX@0+{ zJ>gW!qr3)LF%3=7%K;%9U&#BD4Jy*}+Gq?wU|6y=VT?3kA+&mYM`GEKQ{0@ku9bf0 z-g?rR*S6H{@Fi=QaP`L zI}tSUOpvK*XcHE9(>Qj9$~OPy*sJ(-rKbUb6?MGQ9q3Hs{hSTP%35bDP1SSpdMrwO z>+34TCS33q1}EE`fWQ!14U+X7RDgz{JXud>QQ*SyA4W?H#f!z8r|GmsO03&TYTLhR z!jLToN94OsX04qG!;IXb3=n^GKRJyr-sD7jHItedCu*ACTC=iCkJ-5D#kUq#Eq^f> z4ta5HuD@|a)6`#LKflZH@uwc%u|2gB_;(fX_Bt9~`T#HiffYne0BS-YLn7sE%->Ug z7hY;?9bPy zJ6aMi6kWET@fcF3riZ|5dMrxpHe$XRzp#i7i-kr2UPg(wswap0JuihXAgDWU#TOuCTIA8pI2Lf%d~Ei-d>N);r-py1$`@~f7Ch{uGm~)fIBcrERO1{cOOT>DY(T7t6Z(X9HAcy+0oRUYyZh9nam2`aN-UXDk|C;TsaozH_%jHDP8xBV_(ABTQ)62|? zeEd^JE=}Tk@E`j~aTk30J&^KpB(tMYytBdGy8p6saqCVnzM!%>G?k_@5fkze%n{j zs7awwhhYgCjX*FKP_Z~N7RF!{U^O%e5P=caKyCv#Un@o+NOGjnqN)6}M0O;V%}oSa zGC7l;#{n!1OHeQbm{OlHnhLCdW%a6R^L#ziR6&wp@nD1{o0~{u^Ah;9XhF1$7OE6g z9XY=mKy86vG(41s!oW)#dy(O~_os=s4(!IN@AwCDu-hw zWZOhJXGtWIi@mhD&?Am=LJ1=siZA>k?;d&r>zgeH%JMZ<7$*V4=M*Xl!HeX(v zk|7PFBe{INq&Jf+wJ9C!%jhY_gw^9{1(&ylok`-Y&{(VfJzG6eLc)3GnuHQXr-OF?j?OMTIhJvLfNTfsd!B{nL2 z2b}`QQgKn%HeK)#1D>%{cpRb|hbM@Qie-ljIDhDjRL=kdFd1}U0|1cC0rtTDvkBIG z8IQ22nL7VYGd($pGA*_ELo@$_klm=bxn?;NUv;j+;{esSXL^s@H9}b+#qU)CB|AOv z+?%P;_yMT+NBledGUme$kD8r4QR&s2Eb{F;<<6Dnk++`o?bc21@fjPuzw@;2ZI)Q{ z+dznIz_VcABFZN}6WfnbW4-%MIOsynWhjSIWwlTC)Vqe5qi;7jbJZ0L8?21>hdGSA zw++yC7z{Bd|LjzYzrvVUj;!)WCqFx5?ex^XRlznlqB89z0nCPWkjInbN9Pwr;x!OX z%0+@KpA5XlV&=&MO=UlMJ}@C__*z$#93NaVS#+dZ#uOKPIP-;usDCC60}w@6@&&pm z7z-Tb*jWQQpjA_<$@vxwys~)-)MyS@ApLDgp_Q}8=SZKL9WGO|>WlloL^o6kCe zRzAQs332_eaW`%xXGTqRP7ba%mb_k?{aMkILsv^9JJKuUMevHMNz7`|9`yWF7!=I^ zSpQI;p=*Dp+y-BFcwnN&0FPUHsr6autKGH}hMTxOkJ|X`lF_W4&ZJ%^g~?ERLFKQA VpU)2s6;t7Fa$U3t2m)_V`4?=Bb8`Ry literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/50750d88f170a89e8b0532caad49e0ea3e1ebdb0 b/fuzz/corpora/client/50750d88f170a89e8b0532caad49e0ea3e1ebdb0 new file mode 100644 index 0000000000000000000000000000000000000000..86cbe7219348c7c580bc9560070f9dd03f9d0414 GIT binary patch literal 884 zcmWe*Hej%1Vqh?3W;P%I7!J%~VBlp?W?=Zw$iT?JAkV-c#>~u=#?8Q##K08Kz!YQ9 z#1vuB#CUK4GZUi$6DPxOn2Ee>oLX%jZQpqr8Ch8w3|tMl4LI4DLs<-jnG6gJg$)G3 z93C#1dIJMPMFV+=paen?0u&4kz}P@eoEJq7jSI8Jz<@Gq8s{UspOKY;xv`hQps|yw zv61or|Ns9P7#J9RKVMiI+3mV~???CjoDtPZdyUq$tF}#9&~RXjeA&cwH^U18E!&mk z3X~@nop_mB*=kkZz<*?_Sm{x(LZ1`K_KQCyGdNhyx^?dIKbe@V8NMwJFz_>wWn&JNX%xC#Pj`!`C8mpiNFMe@`0}B`! zcp2U?F#Km^U}RtrXJ8OxW@bv`W?)KUV2Wp8iZN(niZEzmJh*_FiIItk^Y8BsK6EvT6sF#>R$GIIQ8oWsM#VYZ~VxyPuJrfw{4l!Jx5|sj-pchW3diCK^fqeLr7V zd$Zeh`QDH2`#B@3mG+viOTSf_9ba#+Cto%(-Ob>FK+AR|xdP?<&J!&h7`_<@tUgx*k6E^m&SIJ%XQrwF5 z;Qk#l>r$h@n@ z`*N0--fCSB4oq2H76}8f29a)T3V1;Jg;`h)m>C)WBYT*Ym4Ugjk-_>!MefvVwprhW zC3U0^b*xib{iWCBYfWMLdEJXLhYrhg3$2->!rvky6{>4Lb)B~RJk^S9|5*Y{ivFJe z&cw5Ui(^UDqo*Zxg0hwgStsQ+KIg4-VeUZ(P-~C}O d=O&JrNW;_yH8Eyp1{OXB1_lvkW(Gz^1^|Mb;qCwc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/50bed2f1822d9bf3c0084847a5360e340e76b62b b/fuzz/corpora/client/50bed2f1822d9bf3c0084847a5360e340e76b62b new file mode 100644 index 0000000000000000000000000000000000000000..8e8c1777d994d118b6f9e9aa2e957a57f83b14ed GIT binary patch literal 544 zcma)&y-EX75QWdo4ZE8^e~2Vjx|%{v5Y85>L=Z#}Ei7zO_yAj^wGeDm_zIT#Bh};5^%A;HeAL(FUdh0a`%QIeDu> z#*kOY3y1Q|p1q{e@{6GH*Zcy2m8X~q{?#O`lV7s*-si=HWAe-B(oh`$dV1N zn^~!?n!IGjm;+kH=VW|Fa;;Uj***5sG}%p3lUqKHEMkHp=K5bT@odZm8$sByr>g`} z-Z-qZk5ol9`u;FrQ318n@s4pgEB<2gImtIYOR9R}g{q+F3#Pvmo(Bsb-NE}~c6a-b SXWA$L`Dsk$HAiPod%gg#n|}iU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/50c2966e5f59a40c6537029586949fc1c3d4716a b/fuzz/corpora/client/50c2966e5f59a40c6537029586949fc1c3d4716a new file mode 100644 index 0000000000000000000000000000000000000000..641cb32e3ef8392fe890f04ee2b186e0b1415b29 GIT binary patch literal 2457 zcmWe*Hej%1Vqh?3WM^Kwb1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zelQHH`*Mj7m@sw0-AgWMpJzU~XdMXE11DF8Z_Sy-I-<_YG+FdEX;E%4vzUY*ss~>!i3bN>xZ;qI|rpU4);JA)vSB0H^ zl3&ney9Zs$6eV z=k(ZM$xQVOBxfcL9GNN8XzG+hQ#S?f_Iu9F=C{pq!#m3@!M^|X7jN~5V-MKYWjtH* zceuc|MJLpKe(Hb7e7*j{(YMMy>GK1`n3-7xco|rEte6=7|NsAsfq_AC!&xua56{dT zc@Az8TX);y=(#tAQpaR-_H`Wp^?z4Alm8_pb)L9?XRDoKe4WGhws14w6Jus(U^Ji} z$ykd7x=XLFInA+;Pd;_~udvNI%S&&yt~aASsG6$U;}=x=Xxm$kQzC!PDKRiGG`KNO zpUzx&VB@{&^{&R}ciFwC8YtX;?~AJHAzstYxpRN>y~6>%U;-Q}2>>BMK@I{+Xa)Wt z861SfMgpctYy|j;V3GhBVQRTy3=sH+%)tW8Nd_o}yhq_t2XHKjdi1oUPEgh|A?u`k z=4ZWRwLA0PXIF7O3<;mHs%T;bOPzdws;@k^(3&|a{4F9gRs!~b2RIA+z;wj=_K@>#s3v_dG5f>*r3N}Ms9GrzprGj)) zhYkfn!4Kdjeh&vh@WD;VtF1L@OA*`OklcHdd;jN=9FB$r%N$?{k$wSS1we%qz!w7s z5ChN<@lgT12fPEUla4jgd8v$?5f4JmJW&k<)5Wdgo649X18rm!3I;GIQIr#9qBPl< zgv|GeGP5+(Sd80?Hc2s@j;Zzv5j9Qy$b@Ve<7j#)iMuh@*__h>CIjkh97ty&t}_NM z8-@@rzMM+oiVByM2w*M|ku+(lZ6NaEaZ1`JI%@mEh0=CguY`qcRFVl9BWErZBbTET zYKZcL3UWBB`KbpBu6m&Pss~n1f361+Z}q_XQM;@MV?Jfv^}zDOH~8*t3vbd0AW=&d zio-u4Yxt2C*F56W&5K^CKA)XjN0Nt|Ym2w9JNfnF?bGVP-fsCklLO?8dkbS{nuF{g zsVPmIbBASO)_+VZ`+u@`$f<5L5#D1dK4qIOHLWNN3NzDA>xJ#MerHcy5&KgJ4=jUv o%H{CFgD_v`xcd3wxhEnb(Gv}nmY&E`AN52A8X`y$09Swi4RoXKI{*Lx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/510213979c1bbc19d27b3225566d6158b603be3e b/fuzz/corpora/client/510213979c1bbc19d27b3225566d6158b603be3e new file mode 100644 index 0000000000000000000000000000000000000000..665f715b9be74306bcc413505cdcff55b3d133d2 GIT binary patch literal 480 zcmWe*W@fNuVqmajWaYRxOsT__yq)oghfQf#3dx9q-A8~1pWl#j8ZGOf6jzi3Fh}9YjI03q`3nzNt{&bQcKy@7@DE@AEvr*GLE)!T_;^ zczUKLb31B!wc+)qnqy|4XWuWl&Qd=F1WNX{iPEA>6-*EA`y3V+kik@fFXw3!2^6tZ(VwXVvRg>jV`>rgOeYWv_0y|! z%CFdBa^xb}CWf<}%BET$Vs^;33I`zoc58`Ut~6!I)uwdW%EE#*o>9+;XV^2w#Qjo1 zutq${;#eGG-sPr@g$jC{{JYFMs`*1k{-M!_aL&z~a}K#1G8QU$WvW<^;2U)#Z6X09 z!6&+wLIk-8RO^y59)~oqggx)uWtk~b4N0ygX~2DEv3i*zl|$Gw`($ML_F#jRuFj;N z9{-XpwPyytZp=(7+OgF8@#&}K)~25NiiN)6^M|FywuJnY2P+@m7mk%_2cC%$_OWt{Alg&{f%QnYm5Lt3H=Nth59C;Htr<56>$m*#N zBM5~n)q3-xh}eM@<2ZPGbwJyo>pIz3*Z-=(?ce-pe2d!+wEp6@^llX_^tXSDmaLAK z-A2L}m)9S{M-4_o;6MNXBM@q0>KBGnsn>Mk{E7I|nAoC);-7X^OB8Qa7v8!)eKZ9V n@M8i-Q5boBfYP)wn~*neN61C#Kjg|U*rt$gAo%YFf+BtalCm>= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5137cc7acaa8b94b269020969632451a385dbdad b/fuzz/corpora/client/5137cc7acaa8b94b269020969632451a385dbdad new file mode 100644 index 0000000000000000000000000000000000000000..75a6ca2d1840a8b9d2ec486fc7a0b0df86307f53 GIT binary patch literal 6599 zcmeHM3s4i+8a|s%0to@cgn$AeJQNTEhY;F=qENIz3yMVqfr1cH9`X``lByu#AtH#V zh!@b>LRADoP@Y2MA(g5X#YZpofij9?4z)v0gQ(X0P;Ww05Jj( z08{{=qX_PEIe_y8IB$USghHGf6e0~rQ5=H9k-*4l2lv7`ITR>QBrQs^OB$3%5CQ?f zl_qkKL_}TiL@LhO#e@o#uz@Uv>>L)tV>$DE_&gIWsEM5dQE2mp;s12AqE zE-nrj7`7Z^Kk^kjzPxs7{qB{=>-ufaliapy*O?V(El4_WbVvPJ&CMD9ADLX6(_N{} z2-nGoXz2+NSR@YaP`r>yk81vSlS2!4dEN_d?xNM%!<)KALX@(5$u zJTu%|np&c}e+|96d3c$1m3lF6iJDtud-3g){>l9~6ah${6I=x~h^UK(0-lbi?T)%t zbXiuUpvkKoUMC7Z9`$2l$=GIU=-^c$eaFlbDA@H>JOQEzBA)!f1nhz1z>@Chkj&eb zL4(wJi`5#Fi?s`1rLhOLZSrqrT~}{x+S%D7+U5C(Q)rjbxF)mM(DulJ=#8th=j2EH zw{;LlIZc+$ckg`6k5SU#YzX>JGw`Jmcj4V5y&JzEKXi6IbTT3%8Xu#X&U4h1n_HBt ztC&EW@50hN*LRpyChNJL&D*h%jv@fB0LCx}cHsd?9K&QR3)$WM)uW8v_r;PJGFGYe z6PwoVJt2~U&}bZlUhDUFj!!xkYyWZsq4Nr>jaj|&SU)Xoouzi~%gr%CEoDO*dKt!py!|lb~=FJzB=a)%(%HG~x9r{FPiebpnNm0x-c}5)rW@LHiv|0VDpcKf4w^w_-n^Nut>A`C3o_E6pY z$;p?vI=A$vS<%ql;VCykc%@_-n=Fk1J#x;yhhnpABgw zRAz5IU#oVm#A4$pr#2;h`*A^#zmx9euC&Z1o$hbh{i_erY)irh_?dLeuZtFXoVGn2 zou4z(`Lw0wlNi49l{;_zB7Hg+w==3)wxJFp{*Vnbs3Tz0&$8`zMgw|nj%n7KT|f1g z!XN%0{QceV7vI>-)xDw7Y_c%k@aC(lLP5f6?{&H{ibbBf&oa!c4$QeJ(q6>9|DhqP zdR)fD9fxuGlZ4Dr&NpG-C*Rtzsj`i^V%RcEK^gx7Mq$L(!H2@&9Wze&%0AzA##-Ql zm!-}mFsZ8c(mXXyU?Kp_snD)=$A6*nTxBSXI_%oz84v^>AG}I zpm}tZr7H69^S#yQ*sO#%+H%J2a8ZPLwA01K1}V|Yj0J53$B|RX!m@?oI$`A^yPJA1 zMw=XK&U-`{Eg(PR<)$tb?&FTA&O;um@`meuMXJ5s z@iy1?4}^9vPjcp6&o$%w95OptzgXj5xmRsUPhZ!2)|7@adhwkPny>!6Y5unw!J_1g z!{VA)-0C)MJ<3D=>Fl*j^GB`xhTl+qyInd0*_j6#Gb`4dTlGYaxT?bZ^mFsG&W>W^ zymC7)8K;UA(;T%C*Etnmx9B+x8TSSLRC2BPnNF(zmrisPjO#NR3dR%>0QEPrT8pgO zW0mq2UqM_rBQ6hmDCZ*8H@_k8w$wK*FM7U5X?J1dm4`c-7mIchHG>aaroN~lHvAx$ zm1vqY>e@+HK>=Xi?Yiev@oXu_s?6wk{hpG8qyd%FR%_$l|Au>)QKwAkz$RG@J$@OL zTzjJS-{Jio5AsL4yO*0fg0>X8Hc7HK_j z{V7Aw;Bkp5PZ?XO(DhY;r$PC^M#ZITH?)!6%EQ-X9}GYIWcHS2!K^LIEb3y$mZe-L zhxTj3Gdmuk5Ye8j%&}HPh$sRmM95=hY+B%^jo*Fz{hFT%vP#>HbKctv+1}d$n31e8 zTnSl&C&;=toQ#px@12pgY%*DE{~%dWNi(H~f=oOB8JI)^NL1CV@%tUnqy}gVX;tqU zZ~y4UKUFXO73#Ij6hjEB*R1J=5LMNl&kLQ&5E7C=`9Jmg|Gr*Z{1582rX+XGSg$#3 zHr5M|+oq^;%)wpsRHd+$z1tqh;qO{y{ouZwq|xzQrI}BVt<^camiun%| z;a?T=-f_kJ7b(J6;Vp{jSNiH^DOD-8pl9u;>~zd|`T&P?eojic(9*x$8Pt=0YY!r` z*@F;A0__k^Smo;>b@=tISi7qet`;4IpnA;sM+ZxI0rlxMKO|kptw`hLUJ@uTQ#fH@ zef5q#PlCZ_>C#%5@h=IA^Z-!E5Qgwr5JLE?j-{yDL&%GOJPy+d3YZQMV(Ryg&%}Oh zB2=ahr48O>dv5G*%usaV8Z6jTMq?r2qsNrj7$~AI2M`n>K#b8(>bRPXJFXCOTqRpN z9y2+vkcxv)`Z5Dzdm@bqR?@Vjr>K;2KzRm)W1>i_@% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 b/fuzz/corpora/client/51bf90d9e31ff39fca34a5e508b0ad6f35a6f339 new file mode 100644 index 0000000000000000000000000000000000000000..8435cb058dbe9adef8f6f310af9004fffee7b3b3 GIT binary patch literal 956 zcmWe*W@fNtVqh?3WYfF#Km^U}RtrXJ8OxW@g&U&A_yifoU59(`JJvru7C*Oo9uTnHZUvI2n!wziV0L z$N$uTlZ{=g&EuRc3!{OnA-4f18*?ZNn=q4OsG+cdAc(^u%oUuUo2naJl30>zsAwP$ z666w=@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e9YH?TA?FfcGRh!W>DG%z!; zuz+%@WliI30|BVpnHbqvwHsL&l$jgb7+4scFIvo0DpC3R`+{M@>ED}{wt9%EYjQX_WLpM#fK3uA?y=7>Cg^JMlOAtssCjO)34*zMAC z_kCVn|MH|sdD=C$cvhb+U;o|@eg90J{mkw6?d5hAbBZ=@r=;>X8Q#|%nA z(#kA(200B_6)f~z;!dUDYC?)~9+0)dEUX61jEw)05&&~!4}(Et2a^+{{x6o8!vga6 zYOjaaEUJFsxV7VtQh0*@5}mh|4excbuC0-J9lEqSLh|vS#_8+icJ1rUDem9yX1vXK zVy-6B`wbSHOiqlRUY}Zv(q30=Qr^v`GLH++ko5ERd z=hsTHahQCLYkoCdM#_5AzQzSY|39pEcQl_a#>~vHjfa6@6ElOXg04*Fh0lj<-QP@z z{q=D3?q}Yt zq4hG`dEHctDNX-=FUX%Ku<_K3Ot~lqhOLZ#C+9M(U0YC;z?Wu!lJjAX`R4tNr)cq{+_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/521799d69a9250ddc3195bd8b8fc371e1dcce1d3 b/fuzz/corpora/client/521799d69a9250ddc3195bd8b8fc371e1dcce1d3 new file mode 100644 index 0000000000000000000000000000000000000000..3e5a2c8f06d31942312757f64c36793ef0215893 GIT binary patch literal 696 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>BpZ64TXLM(&XvgLaxj2bP$iv#fsuiM zmqD3<;XfmYDbBzk#>~i+#?8Q##K08Kz!YQ9#1vuB#CUK4GZP~d6DPw4pWk|`1!nUY z@Un4gwRyCC=VfGM)nqVmHRLwnWMd9xVH0L@3^f!s5Cm~Jc({V|b5nJLOA<>`4HXUK zL4sU75}tV_sYQ9IB?{r0De0Ld#R>r>l?py3DF$-lyoLq_mS&a)rl!V*7E$87hUNw) zMn*;krUoVkQIuNa4z;FnKC=56Ss9ocdl?KGJDEZmkO1>{2B-%?3K|)#UsR+{y=I&B zU06~_`cTI@rPW`0O} zaB(b&di1oUPLL5IrLgX$xE1Tc{X68LO4nUmmEQ4@iJ6gsadCiwpMfkJbEqsIix`VY zcj?tNr#bfV$)|4r6}B&DdFidz_29siRc4Vec-4Yk0S`#OFbk^zGb7`FWDg_!lZ);j zqpvlE>F0GX${ae}j^dwn+V1mIE3*Bu_(#?~jT!pFeCAa;_Ok)aa+=62A| literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/521991312b6d2fe4e3970eb97a35e4bd1e5e75ed b/fuzz/corpora/client/521991312b6d2fe4e3970eb97a35e4bd1e5e75ed new file mode 100644 index 0000000000000000000000000000000000000000..1c8e8e1eb601ce8be26f8043f087bb94272736d6 GIT binary patch literal 2101 zcmeH{Jx;?w5QXPwy>|SQA1r|o1f@i&o(oD+q)JPXf*gTMAaCJ{8_*ze5N^OZxB(5w z$TmVUDcnRsLH@d@)y$jO)xKjz03o_jMF+EvbI={ppk!jIh{&FkJteb&Gl0{VCl!V; zkl4YzSQYOHbL0^w*$9c%wLxsZJuXg?mfJ6hVHP8-OVWC7r%O1wvi`hSyuGAdW|gQ?BV%gS{O zTMrQ0ppFEif}?DVVG|lY9v=YAI)mn?CQN+*Z&e81B5i_ZA&fvsNCeO&i+pSi(9`qZ F_yV^CgY^Ia literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/52411c6a2453ce5c648a6c72f0ee921b95a9f712 b/fuzz/corpora/client/52411c6a2453ce5c648a6c72f0ee921b95a9f712 new file mode 100644 index 0000000000000000000000000000000000000000..4896ff5dd02976b405b33795258333765040e282 GIT binary patch literal 2252 zcmai!X*iUP8poeyOqfC0)!1Ijko3$98cW`WWRhsJq+^)I5-M9LTg{9mDf{+j3uP&? zMV1!I*!Mk^!a*sCAtL5nT~{AE?{${@+yBFTU;lgiNy0FH69fRqVOTHnXwRTp726?@ zn4&fkKZfR$(qC2}U6cE(lQ(^N2Cd+!VA+0)qRxp-`OCb5FvT+o+5SnfR&VjUhI}*X z%i{yU0RRx-fdB{qQUHJf&^Q1s1E6dX7Rm}?!O!o&5C}n_Fd~E&Pz$GquLyx4h7Ult z5kwFnG;E22v1o4}x;=xA$Vmwiv=JR5fryaEByC$MA>!{65hh>}K{RZ+35&swK6Hcy z8zL-73%x}xoZ3Z3fd~u2Lo5&k6?r@!4*;D^Ty?hcTe`h{?mvFp)u+~ZAAdsTYdes? zTG!`en0@|k#?_uCvo}AY^5E9=YqZZzib^ZdcLV*|(7{!{VeJ!Q)|XSbf!*@0YInUd z3P$WWdXBo@4rfcNxn(moe(x?li*V~(C_EU&@UyT}WK>${2hz*Avz(E6T?I^QkJhwr6i!@;0E6p1weK;4QLsfI>1~E2) zcz;{1l8laKku;B&M4wiT z^f<-ic(v#zg;s?G%0-!E1n6p~dG76fI{!hJGQgE*Hp?dm5guT}iW25LTuNKdaM>Am zhHJn%{6pMD4Qf$VFc+YH5nd0WwJ+<8#K+S2$mw$}g*1Dajghm7yRAq*Hq_@z-ZJ(w zMLdC)&IexenFb z+aVh629kwM(tQ^elh%eh=-CZ9lY`~yoQh($XBjz;!qCpoY9^zCjILbBDxNkG94@8w z3dP>c#7O)W|j%gfoX;r6qmyEAG3z2qrdqojg zbmCWtb=H4hFkXM}RN~FU_xE45!$-R$Mwb(Y4mG2PM5LM@@Soi5+o13f`i?bB2wIxT z)i~{pG(+Q-Y7ELW8jJ#Z>?w1>WJlWGoUVBzV(*}ZC#}k$QfiC%1J`nlq94^ty|*A} z1`45K0q8IY{Q5Xv@#-m?oI2CnC2y=0RQBsHjMQ-0279!V3dgl6;*O;Cj)aUZnsvpWDu@v=*aXwQki)wZMA5 zpN{gM$cr51&VTThU9id4E}qdsirOrwx>o|82$r!bl-KFK{Dnu#TPD|Q+(sWe3@@FN zwJ^*bLyj&zw3?e?c-P5bw&b^b5e)Ingno>7u1tKc*F<&VHTTlvyf@Q7hOv3k7NW#2 zi%j;*O}!mv9>qR-l|P|*<@0OT-3`ff{6A8D^}P;&5D1vW z9N6;>M>oTNtJ~aH;}ojv>CU&+j~64=TDK%?;JCYPbw$;cvH2)&Wai^Zjcm-HA}>T} zckdqKq&P&vJJK}H_lR6WJFZ}q$=+i@?{Ee2<_Hum8d=iN8OkOO+!>tC@Qu5yY&hU+ ziT!G!@{O0 zw=&+orgF~*+pX&2?Yw*oPpOvF<{VZYPc@9#n!oLWsQV!~?yiPB$GlwW1Tv~JRdQi4 z|7CssX5IhigYaWS5IPeML4X0G58;H#HL9Y3zPMmY&|JUJ5~br^w0MW`H+811ni7Pg lt_UaX$y98WJ@|Lu;#KC{hU zS6n|&d6<0u%~H!m*XT=33=q)P^6V)i0|Pq)1LuE621W)3F$M;12F7g+jGGx4HyAWA zt}$q06kWi~#K^?N$Yj9F#;Mij(e|B}F`Ao|!GO<@$AF8C`8o@;Fmq9HqJf+^uc4WN zrJ3I-k(GhDv6sQ1v6HE>k!4@1U#OqYT9XMc z%eHi_`Qr2@)i2b?r^#gfbGa^_CGR`F<=tK%x}7hm^^9PZ*163}OB8FwUp|{u{kbo! z=$Gc3=I`@vs;B+lrsSH$z|_m<=XSXu=uo(v>$$uA*J>ZP>A4Gv$!X1=ws(b_;Oj5X z&RM;(Ns25lU{IRlwZVRliB5ba6Z7|NjEkiVBn&v&m_ucSS(pqM47fo|eijyHCe{VW zPUi+Wy^*2gXM^#nD<7rzH7<}ziD=nvV`SYMaq_J3_guMm6H-Jwwz?GFoqEk$+)vA7 zTFe5|P3D`@(?tfL)q~4POK~{XetLCxU xGl!llEK>P=UNvbxtN6StFAr9&5igw8Qc_ZV-eldXxl?Ye@8e@&U=U$u1^{iCy$ApR literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/525fd97a89ba10a66229d5d84e252789d13661f0 b/fuzz/corpora/client/525fd97a89ba10a66229d5d84e252789d13661f0 new file mode 100644 index 0000000000000000000000000000000000000000..f656162d8b67202b95537105f3f09424fd60dfdb GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^js=n3)(2m^c}3!c633V}~(a4Y>_C*_cCF41}5f|2Gsi5Cm~Jc(`B+3=9kv z4dlTpcq9;lXh2S!7exe(i(-v|0kSm;7v?~8VzEZSzyJjsL>dUQv1_$?oU>(OWa9uc zm>GnXotT&ynV32lpn#u=fq@BxwO}F)QH;;8O<%z!@$>MJ#d2YfYMMQ6i*d?)m96_Y zMc4a$kun?sV`(Kt zSW_&N8f9rk`~zxqXV6>vx^>U_&gp*NIoH!fzW_a2vjhMrM=`XU7&o0jHR^$)f&wyt zr?q;if+|2gK|M0B9++2KM_LrcL4oWmz2exF9lMkFLzd!1SVhOyIm>c|xzJ^;NfN0f z$*9Y8M`1IY44F*Tk&8<{BL-ZfIl&wm%#du%RLA_0Cf$xPe=_#}WEgEQnh9#aATF~& z_s6;@J5icJqqcQSM2RE-6hje9L^5KKMCtlLAkrctF!dPFtwiK_jdKrMo9FR5Q?^@#YgLp<$F3YNZ&^?N{$W}JN_iR>-FHsk_X;b+6@#nc)%10J m)5*u(VqV&g8`6oXvy0cm&z;^ke}4V;+0z3Uk;~2HgRgIQxnq+6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/527b3fafbb1e16c3e840eaf26dd0b023bb140e46 b/fuzz/corpora/client/527b3fafbb1e16c3e840eaf26dd0b023bb140e46 new file mode 100644 index 0000000000000000000000000000000000000000..2fde5e231ac20656dd835baa8d5cd1b6fdd49acc GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok3=9km4Ojq390pSTLVbK-94Pn&)`>$i zKA=%vk58I%&`!_@0jLT_hM%A?XxPZzKW#z71KDYl?!~Q(4S5rEa{iv*Y~kj!vgV#* zc)*~D8e|HLurOd?5I`_7fV;)7#Zq7Wqt6^z7`Q&3_r#V}ljJMg;yt)D6F!}Xsou;L PazjpxnVErw4;U_~$KvvISs;jjvUe61d;p4;r>Jaj-AF-2Tz6N2CCezFf-)!? zMGF-R^-*aMk!b1z1xrbRYE8r-!3PzP6cH7xF(}{z8f+FS*)+CEfAmKa=GUB=Z*snK z&Ue1KB80#K0)Y7ltqcfVV0*tb>qUJ{|MD4?V*eMBEeER%T(_Wh17Cd24FC-Q!VeHY z0IUH3LjVl%00DsrA-)9<@Hv1_0CE>*$(@)*+7d)Sf-tAGZ??N0n)Db8C<~9=u-vx- z2zeZU!)YG2ppcTJgoHAh7UC(!fGgyN>h+pLwIn<_fp*0%6jE9sp~Lt?Mr}w|Gm@aq zj8<>ZF&UCj85Ua$XgN*G=Fom}ER)4p3us?V%Y5+maBe8=~lVA4*9KCnW-L`-34qA7!w%m8co|1YG<(&dmU{Ox-qfqt! zURm+triKgq%a!6(%WUbTxML3+n#;ZP=keOO_;RAUcGEM#6_DO|VkqT+W3=bVzEgx@ zz(wAb?qC~0AP8V73zuLPhT`cIQciazjjcELq+l?|48hSm4#x};*w*-Z3ON-|X8+n} z?ME1dWGs%so*!fEoa?A%n3Q=^Y04&@$!MgZ;X$D?uLJ{Q0*2$@ghZV>nMtKhztAV7 zri^j4Bt@jv;YNqS;kh$!IAq@Tx7@9TS;gBTG2h5h2;m2kzyLcMBNx&Ji&(3OPD*57 z`$l_t%V2iZ59{n|VzQ;!$q0~;cGw24*Km(nluc3yl`65E4{4$+05 zxeP~yb~uN7MSQHQgmq6NrB2cto3yMVqfr1cH7TF9zNmY=rhzLch zhy!SCp(=tPD60@zq*Aq_xOAus%25Pc1ylxE#>{z;ARtWZIrdCvrvEuPdH0?Ba^Ji8 zzW@LJ@6k{MSl|F)qexxFpnBM2-zxg5_|gsY>#1pvEM!|M$-WB98^CzT03Z)^0T3eq z0YDW18j9dPmjgIIfb#)3FDS&hLm|>|7{wtt90`n^bo3~klS6^>MAD)phonJy1R)Rr zTwy8)Nkr5YPo&~(T}`P_2^+{#$S&cbT&4@(m(MlThFaK3GDU4=7>COXnD{1_!o^9{j2Xazkt<}AE@sCVNR0Bo*xw%ET zdWs3k^Ie%*XZjA3%4EIPv$#7J(oh886~Gwgz%D!hiDQ_IWg@$~zj=_c`>t3LLnf-V z{$jJ*J;y{+5E_qz(0l#f&hbe{Vpl%jK0Y-3cfIMT12w$4hY_xa|S;Fhu>&piEe z^Vy{aJvN4mt3K1X=iSpV*jn1Dr1z=#gQ0DjcV1oK9ol)!Px<8mWXo|AW$X_?XedGh zlTa^NkVsmDq7r(cIT5Kw1%k`1;vvNno1<5Px9rmH%#G_X6kEn|nlvriLA}wN^g@w4 zasX)u$W4G;gF>Vg3X#o{g~Sq80!SjtEJ|{?Y=uYO73S%x^6!+d(p!Bq-iFB%wwtj` z+3#a)H-~JNnPfQQljo1jkW|Ftv7|B!+t)*?WH)gLQFd%wQA7s)5a7Fvf;!J~zs?ew z(B=1~INr$GSXn@q|7he+K>_{X?HUi{(ao%5WVNBDb9wZ2o!jCaZqepz3~0vm?_++_ z%F}6>M$^KCwxYt!zFCu?a1||D#?{T|!NN4*)hYayTsd_Dg@^($!Cw*)aUkQR2tjb# z;Mrle_ZrLhnxX|cPxYM>zle%25Sq@*7o^9FC-U|I zN#d65F#-U{1pr(-Wj7fBlW6kxV5_RCBHESbC|7a9LrplmkVunAE+>k|<@g$Ncp-2V zmd+S>d$rv3!(;sI=Ll4te26%^r1PzDMZx=NF_}I2sJ?P=`xv3E^6_Y=%ka3Lja(j6?w2@Gm zz4dIZ`k4~TjictZDe2pf3W5Wi^)7a$Wj5({f6wY)eL&g1Bz%CMNwfO4Xrbpx`-9Q> zIU}8qTUtJe;k#VA^~yiew{vkjy_#ts<|yJ1*)f7U0yq6C+kR^_u-ER0RxSJLi9Z$o z@KXE<|H9w@3I5_6n>l*dG@DHq#v5IKaakxxSnab;FGjJ*OYcbr+h*UK>mr>+oVya461~hs&_-|?IguQdoXoDsEo$bB{L zaJ`>Mt+zYg?#kYQux{%l7w*+uHsALEdw>06%{%4ZwJAM)UGLda8p>$Jw?1gT{OhLq z-)n}5lFtu|YhrP$+jR6P_xUHY*DlQ;wecT*MfK};?FeFJ?rY4fSaW98BRS%#3X79Z zEl#^QiB0m#9lT|nD^kpI)JNRrRD9c_?>J=A7xYWXmF6e9sR3U*(@-$3&y-OxricKj zzn0ZnWYZq2l(+a2;%YwPdas9aCQ@VbEAnnD1GDm?r(Y`VE{wc%e<$O7(N3aP$i9oz zXEnrzpX9O<&5}mlI%%pX0F2vRcYG_JEH$?&Gd^1XWyyZhfa*z`wQ=u%$GJ_fQz3L< zlWc|_K95SSJy!eoi2jay`Y{{&I&7FS6!%jZKj(CXd6dV-aJD)WWcvr!SD&0rCc{h`E|oHJ077B(V48wu~tNgC;})%$YW(}THvOQ-+la>=Ev}Vv-z1ItF+xX zq07aq4wQI(keyJ)FO;VXK#-IK%Lw#oX*!~$BylDzHr4A~i49IJR&mTe82wK?cU_ET0m<~)6XLpnbvrJQT&w{`*b zq&MwBWHx&c;z*z!!U?NK+tGMN9+}sNS zm1PRY3~evpTFI3lv01vbHfH=wf+9Tt6f%UNTqcANzSgl6wUrQZd5~+)aE1bgBZQdx z{rxksUz-TksY7XlH`$&WyBju&PF#ZpYszRWBz*Lo@)`q04CDZU0tARL(@g5Pvd0}) zh&is3Egg@U99KxiK`4Eh0kJ)i#sn*swWX&Rk^}4;`=~;BI)r1QQaS}YJMFQd>BOEF S@Ph&lA2M~NBEVqyy?+56Ue-?l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/534e2e2fccd47e5e4763f05d4cc79dfba1005455 b/fuzz/corpora/client/534e2e2fccd47e5e4763f05d4cc79dfba1005455 new file mode 100644 index 0000000000000000000000000000000000000000..33341db77276d4412b11dddfd7e62f04f6948388 GIT binary patch literal 2101 zcmeH{v1$TA7=-8Fe{U1LJ0%E_5S5g{YAmco2&t}3VG5td-QplcoT3Nw%YRalI0EkmO{PvKmWliG=(W?5+n!`&kg#5CX%+Vl`pRI2?xvq->#-3A^Stjg znw5^Ms3_1N5vnZ6WtWdkoKCte8|?y#x2kDvp~~M@y+3QSh5b1>fcIib|KJ!ZnnlFal4^9(~74sbFs z@G>YfF#Km^U}RtrXJ8OxW@4Pr&A>RDfpG={<5Ytt#)$?^jLr*~nHZUvI2q<>EL^!I zK;fAID;u+RYJq{PA-4f18*?ZNn=q4OsG+cdAc(`k!xfyLo2naJl30>zsAwP$66E5M z@XRYoEy_zRQ3%gWNzW`PRtPAmRPZTDF_07IH8e3WF)}tXHZn9dj{tzd7-Dziu!h&5nWzys1R%))BG%*gm3X160l9=Fxv z?xX(SMQvsj^7IxqwbtFRpH%g_)hJ})Dfw%qyL(u2ycZzjb4da>#J?;xistkbRe%HnR- z-Th|o!olEB>UAbGQ#ve1MN(Q{d!%-y2#cKG+*I i|K7Au@0W0KctjjoQ?X7qN!dzIID{Ew9Sa`=0|NlBR>D01 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/53663cc2b1f5716e050630e1d709f3ef933bade5 b/fuzz/corpora/client/53663cc2b1f5716e050630e1d709f3ef933bade5 new file mode 100644 index 0000000000000000000000000000000000000000..86fb408f847d3cd42408c0baf00f8c4ea946b567 GIT binary patch literal 3154 zcmeHJOKuZE5Uu`A;&^N)8L$c94{=yPM0g{_1}~7<1ca1bb{xQ$K+3eDoCC=h;Rq~q zfCyGdSs<|lRrkzz#`4&XWQhfSD|hv)sdjh0*WFg2w~}b26qbO#z9fqN2ogjcA{r7= zouoipsjyb3&`>BzU&87OST+8lq=4MczuE|D&#&HJ{cZ?RH-ryy9koE6YeW)=BkcLX zj!zf>h@WEUgO8^{2cGrdU%gHv8#>GkF`i#4OiMB1HtxAnVg4ysBVSiWcI)ckz9%<* z!5mf`7XPO(q^xMsw~L&y0VY;_gcYag2HbSIU9l$zfjaN*>HRs=<6!$Z5XNjl=udOz z*M}}IqFK4dkf$Rdpe2AlkB0g|W%(ye80d$U1OQCw>t~B7WfX-q;)WAcCj5UO^$S+r z!pduJL(bjG8-;geTgV(BnsIY@thR==5Pf$?Q_1fh3WnGnqxhEvO;MOmKY4^xL)daXd08Gu`4HNqMRaW;dIP+>gy-Us_6imR3NF~WXzxw|I DK}jxN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/537021ef5376d35e88defa29e820f85d5adf12d3 b/fuzz/corpora/client/537021ef5376d35e88defa29e820f85d5adf12d3 new file mode 100644 index 0000000000000000000000000000000000000000..57fe85e05d6be6074c4595f3297550a24c752d8b GIT binary patch literal 778 zcmaixT}YE*6vxl=u~(;VHr_D>(YAyzC3*IiVVH`DtrgQh4^BjKsf5$)w9LE4jg!l&M zKNR*h4#$~Vq8d+HR6`r(o-!JYfI#J;ZpjK02>=?11>gt}Km>q+5L_1uxCU@FU?*$F z4%UoT9}tW%R>Q)0;&M!QST0iwL7ZpLrBcMQ%%Myz5UY?OVrn&uOeYX44HiQRYOXmB z7sxi*VK%Y-N;5=^w76tPt;umm7>ZvYo|5XnfPYDc_`ThMA8@B@r6) zF_z4d8S_8)FjNq6#^0FtRPzr;{;3foIp-G6IfuesjFk$0Og-Bt1jXOVo=e3@P$e`` zI6y7~)q14dr;#1oF)v3BS{H5V3CXi5jd?GuH*8U)b_sDy&!!gcjId4>7;&#$^)BhZrMvI_$S#`NVIE~1OI==8tsiJ-X~eyPbN~bZ{2we2 z`%dkNfItxit+zYp1AG@*j1E_=EIV9(MC8j2iWsHF6PH(%V}>bMk*XL$$fTUs?}sAd z1Xh8Q;obEyZL6;TOk4Bln-Xtm$CKHBv=-IS_i|6!f6`XnuZOkKo{a>_?s`37Abfp` za|8fU+K?f-Ox#^r&Fq)C)p}~IoH&k@w_Xf^v+GwSSBVA%mj?$ MF;dn6cJl<(ZvsUO6aWAK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/537c0e304aabce2e8345cbd25cc24218af766300 b/fuzz/corpora/client/537c0e304aabce2e8345cbd25cc24218af766300 new file mode 100644 index 0000000000000000000000000000000000000000..d99f3b7fb942703a3775024afbe9f52d4adbf993 GIT binary patch literal 2331 zcmeH_Jx;?w5QX3D*jAjxfyl_vgx`*a=Yj%yBrcF^&~bolky{`kfy4s>TU~0%bW!o=W^^u7A4!7PE8|7xnwktQ+lX8dT#B!QV z?PD9?n)FX!TiJCVu-`xJza%0OLanTTR_exz0AnHk9>(3AtKJQJ*X%^v?X-d{SgV}F zdE~UgS>?;c(R8WOAmq?_j9*4|zi@HZKZ8s)Tul%*kLS;;kMo~h9-cj4k>{zBs?JWx eDf(sPyR#O4Zg%B7-q*8m+Rx~#ne_kXSMv%=F7;{v literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/538d2cd0c51df357853bdbc481303465436e73ac b/fuzz/corpora/client/538d2cd0c51df357853bdbc481303465436e73ac new file mode 100644 index 0000000000000000000000000000000000000000..7788e68161702e2a70910d5a812c572ddb11d300 GIT binary patch literal 778 zcmaiyT}V@57{{OY!=p#tY-~&+v@Ib@N#30@3{w%2TqzoM@++&=jyAM8^h^*cra^dX zAEJ_4X_!=GC|)IcWoqeyC?p6a$r1(0E)=8QILoAV)Bo=MfFJ+g^Oy;N!x$i$5dXmJ zyP}>egL-Q-fk5vAB_4#XN=*T+d1bPincH^6#|%gwnGR_xSlhUhLI4G*hpbFIS*9t zmGU0Nv~R>cAKD|&JH#=`yC#kJPOmnsQzW{Dy$g>g=5CF)IO*nm?y2d|C#3HDsMoFe z8IGN6gCC!MTJLNdXs%ru8b5nPTJ1_J$-2Ms;eFXuwLaA|eWB#cgPz7d*4WEp1tQ1l zshOJk+tL~FEM4?1n7(9qZhy}yp4enw?Kz&heXQEl-^S93X9*bq2mk~=*zffo-4+4C zA_`k>bj$|%F1A|~cde=_?mr?5)CNtAmeHieC2g3I8rDcd7(vLYjW*ziBH{v8fm7hk z_0q3?KW)9|ZOUqt)E>7cgukZ0e{dCULPw(3qjtPFR5O_ZGOm;GkKSJye$7L!k! z%!I(fNB~A4*23@$)5+|s25I?NYSoiuN5xOqirA6BJHyLvUbBv5VFF=Hz$gKu-+R5) HCn&!Fd%XzO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/53ad80d7b46a8036be194cdb78ef8036a0ce0b50 b/fuzz/corpora/client/53ad80d7b46a8036be194cdb78ef8036a0ce0b50 new file mode 100644 index 0000000000000000000000000000000000000000..751334f57a3fc9c2c7c2f77f535b457a123dda4c GIT binary patch literal 47 jcmWe*4r9<_Vqj2XW@G>Z0~7!eV_-03U|?imSos40V=DzY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/53d3188ce0211fa95e7468ccc3f66c84e29d6cca b/fuzz/corpora/client/53d3188ce0211fa95e7468ccc3f66c84e29d6cca new file mode 100644 index 0000000000000000000000000000000000000000..279bf863bee4bf29317c5748acb556ce000a11ff GIT binary patch literal 2251 zcmd5-c~H}58vY$gh$KNN%25a)ut-JWN5Xwg0a;i?DURIb2*IjYAY4WCXPMyU%~m%=gXveDCwU&npij zSRn)et}yI1<@`lP^zzb0#aZEv+nUQ8@v?*8o>%PbFC5WNDA&-Dm#=yJ?rAT zms)#)V(C&Xo)HWzB42osDb3>0y*+!3oRV}OzwuVn(h$r#7&V+RmI~ZHWxy+yp zHV-Xz=$ux`<;@Vd(BwocZ^Sm^$h$G7yzV281u0eibc&CHCMi9O^u26@rjl8(EkmtNXE2EO0wMyFCGA4j%#@nEwA^|F zf)lLTaCEXQJ&$Ofv$6!SK;SjW)3>JSaUd19eq(fg_I$abO;F8C=h94S6`Apa-H@6o z)lVkGzPJ6PxX0?C{LxH#jMrz$VaFwc@HX?DOLyZgsHQj+#F(30qv`iHE>4--JQb@k zTh%xW;{Ex92dO z^xDU8Qz?fWkTh1j0<%Cgu-%BMLfXj|LicWCk2%0Hco~{w_uOW;x-EH+;^vGW%g%2=W+3qPYE)t8 zCF`#{JM3?yNfLL{b*LpBpY;Yr%I_Cljng}0Eng;7>gmm6-hyk( zamN}jIp@ONV<@vd*mLZ05hu^7)qbf1Pd`<_D6T%78W8++Hgj&(_g0?eS>QmlPFUjb zKb(TorhR!99=jTXtig#xB}7CS!DC=Iq8tj1z#xbqxNWu*g@Pfe-;XWKWCFjL(fR~BhM0X&?5#i`As^8{$|Gjs$DswH0hswMfH0Gx|AQt#+X?um-hr5p z)#J9+|G9UD{{=7c0Q5Hyko*kZ`f<h>W@>Y_~?N*%xb8jg%b1RC)H=qHcwEr$g67pn9v^+s3+X4=06qJddT_3 zd$b$nx!`FdlPUDEo5?T5i&GKACC}@|yjMm@d54Rm`T3ap(p9V)tqn>qw(M|q+xP}Q z_+{Pa{VS)4F195ivm+}N?sKoG5%-jEQl)JR(jhc1^nSE!ZEUXD5Y?q)s87j=*vg+y zU`wvJd_r1SX0jh|StvV)@ggm1-{04Jq>dI`Sz^b^v#W(-C+&yTi|@WUV{1y$`7-yH zcLN{<0=Y(yR5R-~$VF+co#L*h7SUgt-&HNfB|D7G{C#6Bms)(MOvK7=C>LV?iH{~m zq;h6gS#=pSqq-=cJ}pM4KAD)*qZ8A&9J;qjY?e{*9vfb zo&)-as_pbrv=^1(MvfRgYXz?{-g1t6G&&E{(8X;U!z_-#n1Yz3jS#{TO2XpjKW|~w zDI6DTL?a=)>SL1=vWsREw1c!?XunQsyP`p+V=og(Lu|VtW614tebfLmk1{*v%8&EW zH?I~_IraR=m>!%#vh717by+Q-x!D8Lkjk&i{134GU;hPYYEsq! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/53d67eb0ed83cda2b72d803cc98cbbabc66174bf b/fuzz/corpora/client/53d67eb0ed83cda2b72d803cc98cbbabc66174bf new file mode 100644 index 0000000000000000000000000000000000000000..969c0e08e0f64954170a1a6b2cd1722012eb4539 GIT binary patch literal 845 zcmWe*Hej%1Vqh?3WQSh5b5Pv)IiZw+iGg8dNoM+jdB&j(2ecU& zco~!#82&RdFfuTRGcbrTGcy%)Gce^dFy$~XWg0Xwr5ZFbzFxr0#Av|8$#CBQ3OL!= zwc0$+*|IPixEgXBaI!InvKYuQ85kG}8wi3q!dx)51_p+T2J#R=iEHQ2pGQa-7$`uo zft)xmvbX^n7s(o7BCLTK1u`B4;MSBG2tb|A#K^{~-N?eA#GJ&y!dGhKyINxA54k;C z)IuL5avm@${baPaA?AJMcNRv@JT{HTYfjvsvVUR<%dZDMVP~HQ8qN3Tzc9_;K2iG9 z=11$FexEyILr2k@Eyv<*jNZ?)jdWi0Mm4J3X)c4$ur1l5HXNvfB+;V3q6;(Qz;;tkRp=@WUVj@s{u13qXAOXGG`)N zPE#Pp%*-%}hk>DwnL$=TS0?kq=R>ycZzjYszu0v0chLX;tkbRe%HnR--Th|o!okYS zkY3 JZx{L91^~np<0Sw9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/53df8a069c8fdb2615b2d5ef7124d2f96748ae96 b/fuzz/corpora/client/53df8a069c8fdb2615b2d5ef7124d2f96748ae96 new file mode 100644 index 0000000000000000000000000000000000000000..c6da7286070ddf14a271d8f16c750d145bdab3c2 GIT binary patch literal 479 zcmWe*Hej%2VqmajW;P%I7#L11t;- zj3Dg^X|azez~JK-1CRhn?jx851|YW^fZX1&k-LA|f(8SFdj|KA!{PU-SqutJ z28L?+ujG<{aFrP>@-e95ln;if0SANN_j(2fhMy2~3?Sy<0c{2b2Hy=Vp(@^hX=NpVPYL#qxxgA(4aMbe}hwf|!Og*W67=vZ9+?reN zhU1p(JF>5f3voeNduFQTm`PA50_(%Qn5pQPX=TV~v+XnM_ChLyQRgu7+wEl^1cXyp z_JF$$)KIm(JSj|0Dt(ErlN{XZ>>LFga@jKmjY@iiBR^dV%}i?F`!l^)tdYZIc7^Q6 ztoG-@7WbZ>*P}OlOAnwR!1*x(xW{X2@{Q}zujbjm3#Yuctz83I0&*k}9Fxkj6e%^MS>4hZ)?x8yjnohy;g_XUnC@nHLEy!9dAS1R ziA5(~=2lv@esADEGF7bfs7ImCiDdi5pOWWj`Oo@w`e0$6MytjGb-65=RjgN|^L3ry zYERhMvtDI#pxBF}zw8`$$gE4XmX0`dbKSL7=^Y=Lm>C%u7Y7*l8OX9RhsyG?h_Q%t zmtI|SnqwcIeCqaJVf%8Hm(FTk4-QOOWflnou?9>9w_4X5@PPCSv#=U4Gcx{1_Ao2R z!;K8qFDi1UUbD^mE-a}deW+ud(&{h0Mqg_R)6eT(lsR;`{n5*PoiR^LR(ni5WIuJC zw);HQifsQ`0!xbip8w9ovw@3aNz@~&k~%?I(}b*(@|mCYlGX0ad!Jp!^)NVm#;T%; z6)bh~{i(k4+(K*SsPMOlNQLUk@BT2Ca}!5Qq+x16`KF=Z9C;&8jb3tGk@ma(*OhnO82)*xiAt7pn+%rjsO9K0vHIvRe^vj0G9){ zvwCb}^=R<{!3bj&%nl#;5)mAf#Z-bn=NVH;6tQ$Ekf{W+S4b5xl_ins1R~P_QJq(D z%@&uZSQMKS$##1W)nb_0q1Y-NgaFvBrFNytn4{DfGZia~2-SGTJ!76x&jgbWnuGQj9xryT5eA&OnbQY@k8-Mxi--`d8P2eqprFh zR@cqK1tN!Qse$Tyo0A!FE?jlb>%XNq?`>ohjIA@5cN|R}ZdR`EZDz^Dxqx&41OR*& z%$?mQ+4QDw8Fq@u+qm62v%`0R*=TcADvHgqEh0y$;hZA?fMai?7rbQ#d9fn(V+5f{ zZ?!%@6cIbH5}W|t>>IYvJxdU4sPwq&&^|k(yw(Nd2EDd&ik2P5xuX+uH zFRyMsgpcbDgutO707f9($kZ?OXVP!zq{UN-WpVMArIKHERcj1yQy1U4IeR<}69`}e RMll%qa)7t#|FR$?>Nor)Xnz0z literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/545aee70725af3d5deb4f43e6bd882ebc992aa5d b/fuzz/corpora/client/545aee70725af3d5deb4f43e6bd882ebc992aa5d new file mode 100644 index 0000000000000000000000000000000000000000..c36dc3f70b79a1e85c69877ddee56a570374f186 GIT binary patch literal 768 zcmWe*Hej%1Vqh?3W;TF;^?b8>6l&cZj5mHxD2-{K;JmUVGkw84!%&6;+6)Z549W}) z{}~w=85qPF7{r*Fnf7usFzsYu+Qz`N*`SGOy+IR`-~whQMkXdshGW6+T2}dKJT>5C zW7lf)IA_bkXy9tdZNSOK9LmBb%;XqqC~P1I;&2Fa1?T6c>IRo2mZTag8pwkLxr8M= z^GZ^S@={9_!ZTCSGfRpU0!k_sd`eObUJhZHdgIM76xVJ#x@2P27I6rhom)3ybi{|4j8cugMcyvTvl^&<8p(>B?hu=%%QS; zEMhDoGqx^!Ioqx7$HG^Ng_ob_C4PJ?bX&0pDTx7hmr`#x<`i8wPe JgMkwi0010q!TA6H literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54614d71a03ca9bf84bacabb16fb38a036377843 b/fuzz/corpora/client/54614d71a03ca9bf84bacabb16fb38a036377843 new file mode 100644 index 0000000000000000000000000000000000000000..62086f7fb9b98b25ff6484680616d03ae8253f87 GIT binary patch literal 478 zcmdUrxedZV6hzwiR*aJ7<3Z^RO3^@^f{BJ@t|K6CI a=SPa~?5K&ArbzX{@vHlDOcfUZ^U4bh#&;?J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/547fa587ca66dbd970950e8108e8f4e6bd1c728b b/fuzz/corpora/client/547fa587ca66dbd970950e8108e8f4e6bd1c728b new file mode 100644 index 0000000000000000000000000000000000000000..99fa8ad4d588c327462917ed3081baa14960f499 GIT binary patch literal 3154 zcmeH}X;f257RTR~$Cj`KK|n(wMrARn7YR#7gNTaYiinK3#u$=dAee+^QIJGLX#qv0 zK}QDWxIjCjsMx?L-HjYn#6}0V0d3L<8pVZ1iGrXqCqZfSILqmt5A$K(r+4e!I(4gF z{eSmwkD^cj0ztn+(Ph(v0~}ipr9G`Z+q-CD1#Q~X`OUeN3iC;UcNAn={UityLlAWc zhF}PCfFNi9f(9%g1cvNUlx$`Jkx394fv^mq!P0>Sm6V_ej3B0j8UaJRyf}43{ z&duzjz_0}g0wIJ2FvHOZ45uOy;RF@f7y@&ud9YkAmWk*gaYBL#7=}TVI&Nf8B~rwR zRP?|El|-(Ps*>r!96)oR5L|-b_z}Kbz~MwWPzWDDaD0IAi2{<(E@etK4-&|v(Q-wc zR6y7RJHt{YWXb}0LYzt#Ok|0T1+#?mSfGL3M(-0Q zL8u0{f`A4#M>H@DoeABs-%AC@+zfU2veM1_UR7S5&`m-O&=ZkOc`cVKztJZ;rnriC z=qvb5>)DjX@B8RvXY}qQ{+v4+t9RNKt#3>AFI)7?sX#`Dasb-&9b@1N#Yo#ptNw9X6pcJX9+0aF)hLReK2jX*F!aWc7 z97Pm*2Dd$Foa1x^g(3Km2A&5ra4;B;qY>konBnM6J#lz8$pnRsZzPfliU3E$XB*5G zSZh8#XUT^&7{*qDDB$@a25y-y5|t{R$7aWGkdFE_?BI~VU=B;DP>o84N0NmysVGjR zBu3AW3zhN1HCkf!m|cG3xR-fP+%zAM4K-3>cnCuP1Y8Ue0~-tM z-R(l#aC_&PSCVhOc&V;Dx6bKol$s4(4GDD235*3~+}sm~G5B^eLV|%Qj*Hb~7(oCq zq_|-2U=m=KFm$dXCH|BB$VOi{3*&`@A)iQk`Agz>uz#Ak zf|arwp4sTW+c%6f?NLSlqnUXYOq+eHUe-Lh(c_zZs1|+QOKTOBdi+Ukd)J*!bZ4iZ z?krh(A1&BR?3=|H44vEIe~;o^84?}4Y099q2=ZFDxou_B^Z6y*rbr*#5bLS@Ee|99 z^72T(Wmi+!8z<(wz-+nG`TqFVJsoEzpL*OH@_IF`Gi*WF@;IxBd0t1QzCRU~<+t%` z-X7>)bhCz-VdM3%neC&SxT#zx5B#Hk(sYYz8@<@f^ye8`^6__SQDx{9Es~@Ry5xnA ztw?w~tF7MYLf%oOUXt=~YX9%#@Wpg~%OF@z$#t)CnenE5dl-V?x_ zN(mOpmnssJDg%R9gtPG?Vkp&iWIR|VUnh{!g944{nF_oCm*5gyu8$Et1ZOJ2nacI& z`bT}B9PhtCxqru&gC1Do%9h1>Jp7QRy=C#-nyi55j`2=A=A^any6`;fs%v-DI{~GN zGb^h^Wf8t8;_y|?y8P}Z%hz1IM@qM?U%fA&X2o1TeR$sl-C$nVnEGq_aEdUSj@09!nKfH~z42l&n9iQ%i#g ztqiipPz1&S>jPh47;^)3K>H8_IMen$Z^SHRa;$K@u@Bf9<{PnK3UC-6LSP7RhlR}o zUcjSda>>NZ2_H>d=OL8GvV{tnk}Xz=jTek1RLFpXVHzE?29}>7)$w%$ zj~(_!_NBl*8+S3U`u2y;hZsNCbFELbGt!lt7kIN8;&$J*rtQyAI>o%SZkzcj0_D*Zywm_&FXwX!k zL3HnBZ+lKR`k+W82rT?q_SVLqjhRzTW^YW8MhlXNDZtav-7TmS-jC43MZyGyh#n+T zsHD+Sp+F`2#ef(P062ilA%M5RZx|5Z2mD6DUxS%gBYxa}!OZ8iKQuJdGQYnps1og3 z;A&#J$^R|UI-u^%Gc&w9q$x$zUY}NVUFbu_7ZNGkt ram=r*IwM8@IomdD32WIOSwaQ`LH|pZ5d7Z~{zgmqulpA7Gxq!+-wPfE literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54b10439f58686929a540d023332d55d463265a1 b/fuzz/corpora/client/54b10439f58686929a540d023332d55d463265a1 new file mode 100644 index 0000000000000000000000000000000000000000..171ff1aa9e54243f2cfb14fc11a846b01b751523 GIT binary patch literal 1335 zcmWe*Hej%1Vqh?3W;P%I7!K$&Fz_-cGcf#TWME`q5NBWzV`gSP%+0{OpMiM~1M^OU zCg!aMO-yqaFf%b4FmW<$g_+39#;Mij(e|B}k&&B~!NAp!+klgeIh4gfn90DvP}o2a z!r_9cH!v_%G>~TlIZ0RoEO^4eKmjTXqQPuAabAQ50|NszE=ksKL9D?Bni!RkJ;2Dy zz}&>h&tTBR$i>ve$jJDgI^Z9L#t@;OfoNcWsnS0_Or?&0jn)6R6U`i^2wd5xq?LTn zNn3X(6LX`L`r^jr28~M$WZ9TQW%*ddSVXXeq(Lc2TAC#ft0e6J4>%>UutID=O^nP< mjEoGlvwCO%F=l2)9UcZo4Q2*eST@56IM^65Q^$w`3Jd@oZ$(4^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54b46c5600118a249495f2f8ef2d129d62332b6e b/fuzz/corpora/client/54b46c5600118a249495f2f8ef2d129d62332b6e new file mode 100644 index 0000000000000000000000000000000000000000..19f98e38cb2f11e7194c02a6f98795f4a5f9162a GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mh=iubx=Hcbz7Z4N@77-N_mtbdLV33uQS72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok3}Dc}Aj}A2eEOTtui?hFiw$`b zbaMWl-)!NAv$E!%!t{{>*dv&rp@GI0zyQk+2+Q5@*J7!!{?TU+EDT&9&wFCas!8&d cZL2)EG!s6Zhbi975pqLLjG38%g%2bI0FJbNDgXcg literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54c69cc77e09e4f482657ec9641f5f268161ac43 b/fuzz/corpora/client/54c69cc77e09e4f482657ec9641f5f268161ac43 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/54cc1e1dfb060c8be71921970dea715875ed76d9 b/fuzz/corpora/client/54cc1e1dfb060c8be71921970dea715875ed76d9 new file mode 100644 index 0000000000000000000000000000000000000000..e07d43cb04d3c754dbda248e0f0535318454a842 GIT binary patch literal 476 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zpOJx)fkBypfkBLcfkB*sL5!K1v5SX+v5lc&BX|F_1q}~m?@hWFw=Op1P0-2tdw#Pm zJ~k_B?x~7l6k z%StbS{mi+pqNop(@+OtFtg#olai>)G%uVCmu75I?m6s=9`gCf6me+N6hwXat)9s{$ zJjD}a-qlQ+74k;YWyQJFd#fhNSGLXG&ZU{~>HMC)XhyfL8$6r2LT<>3F*7r;@PVR- F836R7%NhUx literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54ceda6ec5c9baed5697061441dfb8069687c950 b/fuzz/corpora/client/54ceda6ec5c9baed5697061441dfb8069687c950 new file mode 100644 index 0000000000000000000000000000000000000000..22439bd812473a2c90e8507f1415d0c52905bab4 GIT binary patch literal 565 zcmWe*HefPfVqgeoW;P%I6bQ&09MEQ9;Q!Caz{tSB&A`NHz`y`vFqSYd7BVpA88k6w z88m)cz|6#Gz{F@^z{SP^H&ED6(14$fIh4gf7$GPp&I?xn0%%;ACIbUxO=SiGZ0uTX z9_MVC7};308(A3Cn3EV-Pz<60SS)2AVZh1894af!!en4zzzt&Zvq0=c@+osV0}X7a GHvj;ZC1Obc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54cedcbc0cc04916f02140f92e460948b883a196 b/fuzz/corpora/client/54cedcbc0cc04916f02140f92e460948b883a196 new file mode 100644 index 0000000000000000000000000000000000000000..80a122db9d8da904fb404c4a969f6a9a5f14ca4a GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>WZIib|KJ!ZnnlDPB*^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-)jI|NrB#h683z36eFbToNV1MR}fisiCrhXx20_Dj|D-k(GhDiIJbdpox)-sfm%1 z;Xg9qV1NK*F-%a8DFgvf-2(&u{|DQT%WddDNh|rDleX?oCT0evsKt%T4H}mi$g(kq z%JQ*@v55Sfy)^%9$JKe%Vgv6J_~iPzsWkX2~) zji(dKWh`Ef=i0P`ZtIWT|>ic_b zN7E*?0_FUz`$A;}Km9rEyK8@Z?P{y|+8_KL5g{$Y6@OYMS1(h3yG)hqZR(to!?nf9 zza=CYA4;VDI*_za;{A(e=S!2n=Do0Q3r@W_$GRkOhVirmIm~EVl&v{?}i;)gw-N+idnO;{etb?>%G9Z|wf5{~`1B`U^+jD)*$% z4-jK!X4K(fVANn{kX6u?$-MCSkgfZh39-LkoZs|2$Y~1ebZfq{xLb91zuCKRaInFG JVZ;JP1^{Rgh(Z7W literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/54d1730286b3db1fb8dfb087f41f34e87a45fffa b/fuzz/corpora/client/54d1730286b3db1fb8dfb087f41f34e87a45fffa new file mode 100644 index 0000000000000000000000000000000000000000..10237ce6be0d4d7de7e8628f3f15848eaee3c12d GIT binary patch literal 546 zcmWe*W@Zv*VqgelW@2Dcl3!PLrmRT$aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1oNb-CiHMoiC{Mj9}HubDNcxDAtI-d@-r|b6;4| zuQ%W4X*Sq(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~Q zTHH^|WLnGu(@o}^&Rw%B)qnEx8xgKt=zXrRNagc+)uj2X;`6S&JXp0xyl_`bNlEp2 blXa`+PPwtZkB@f$2$Br_mjEBK{@I;TQZG_e;IQmbwUry ze^#f(UVDRMe0oh9*#oeu$tRE{8~SKd;)EnZ(hWE_lCSr=Qx$zyO+(Q+CDDALnug!M JFif@o#2QZyRt*3E literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/557d576ebdf5f2567d66b3a74f24f6e66e2145be b/fuzz/corpora/client/557d576ebdf5f2567d66b3a74f24f6e66e2145be new file mode 100644 index 0000000000000000000000000000000000000000..201d4de5fa65b617a873a116025e92f04d9b2954 GIT binary patch literal 741 zcmWe*Hed*3VqoxPW{Cc9qLllmz~7_tev6GSEK(0tnHgRT4FdzUJ z*cljD|1&Z$GKeuVFr{%bFeNcC#WOI)7&I|O7&I{+T)@o4Xu!nD@Ec|jFB_*;n@8Js zUPeY%Rt5uCLv903Hs(+kHen`%P(xt@K@i7)hsz*8H&qv;Db-NXKprH>#UtUFXOLQy zmujF8ZeWmZU|^sSU{I;xV_;w)C(aAA01VK$)Uu{=KC=56s~DIYdl?KGJDD0AS#D^b zSZ4Ml>G$UgzH1}9U6=3u=)V7XM77dhlXcTo+omk=KCnf;Y+|~b;RS(~?MiY5$`gxD zytJ;gYAtWzKQdLU^r%;%&xvIF#h;SrX!%<+pFUWar_idgKwU0XW*vK9biS_hTkQ!O zd)BMuu6rqN#d>i64w-eS*3uD&ZmzqwD!t<)6Epko`o#eTeg?8^%%QS;EMhDoC}9Ev zpum(>W|1%uYY;Igg^3~o9*_cI7FGjhMn(gWhv9N<49ty<3~=rM0WoF<1{OXB1_lvk Q1_nk(17-#W0d%JT09^LAc>n+a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/55a46e0c0017b0cb6b9d26f4a85f0a9c8e411a16 b/fuzz/corpora/client/55a46e0c0017b0cb6b9d26f4a85f0a9c8e411a16 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/560b6647ea9f16670e6dc44fb133eebaccd8896b b/fuzz/corpora/client/560b6647ea9f16670e6dc44fb133eebaccd8896b new file mode 100644 index 0000000000000000000000000000000000000000..f358b911fff09daf14f8308c35610e47f3859b68 GIT binary patch literal 2835 zcmb`Jc~DbX7Kh)X@kzu+i$7s;Qd$-#K;fJ@1@*zTbHS z1c4k;5X3~_%NOVLx4(#JHuBxw5U$s*UG&TmCuvfOQ2XX8Bwq>;qzairkQ9bs2-1Nd z0s^C=l_69lgbIUDAwZ1U0>tpuDg*_iP>Rs|a~r6qHU6doRI!RydER+*sxXYfK){2p z3>2{l3ysxAxv}WlKvQPmRFndFi5yCxFha+D=42q57#tH>Q ze_8R3efi1&^0hquR1na2M?SUtl1xkZ zlIMwOPPud0>Yb&8lrEp-4HC9%^=o#8mETe6;;LF@#4)H;)QWb^xX$=p859fOX4?iqRBmLD=|yUM$y!?m=I>~+k1XT0B0jT8KT_06GF&MDze z1dluwW@;MRhR5A7j-8>hEq*!nGCp1DNnlWUEx%+ZI@5SRXQQ#Q)|m=3^&Gq&ixS`R zs#38L7qXSX$+jRMFoafv7J3fKM?+BVLQiH<;DYh*M@tHZmWnq|(`k*8+O!tew0+Tp zp<54*$akI0S~nAp8M#U6C;sShavEQ>*_rfmCN(oo(m21ZdR3<$vtjk~uPv>c|6(v4 z`uyr#U&Dx|S%B1G{yW1*AG`U-_S8h;-ADXAiBFPaAN~(0h7+8GnsZWZtUm`8#jgx(~;>I4Aw2flNGpx zr;@gk7mvqH;K(A-&4H;rfWar{B0g>@!WbSuR+vWgVgNBrTAr#59x<#A0WqwElI2`s zh29Zz-@n8OTP+^G@9*83?>eoUq_@{Ib9jH(bbhbNRPe_L)h5O_`Bg&YKtI-rUU6jU z)Wp`XYfmuQTAiVXTwAw!JIn^onT@?KdA_2vZ#GbM*5||VZ-+A4s^WQj+Hdfu8*S(7o^(s!#pe{+<_|ae9q6|Nl1zK3cK9 zz*wRiVSKBy#)VDJVa9TDB)VOmq_=^kZNFywXk4@U?NS+0^Sa{^4RqD3i1bqPLf?Rt zk&BbKZv2N{QrvmpK2M~q49RS77}{0uVbgcXCAn#6*4(^9m6=~z`Cd&kE#Jt#t9~Cp zR;~!5XFxP6hhB35`bGK0z?di%&5YU%PILE7xo8-*Ua(*d`#i!D^jp8^Ts2wes>84p zjYc3C3#eEe84F`D3a}cQ1c<;0Yaq7)oTn8d6ec;*Xk4lwEs-5XW%CjTCl@qDb{+?? zFf2vE5MauD#%L{Qm!^17!{|tk zKriX_Bui~d2m69M#h9>u#8q&8Q_zt#v<(_-(Z6e_M@mRI$6T9Gtmu4Dk)udb%f%k= z5SZK@3(FoY$|X4okcRMmbulBeE@jWcwG?CQhMWdR+)KCFiw=m4TZ(=<8xTbZI{YBi zHdDg94{l4yG&F7127qMU<&|P7{(63;gbp0ejbmoBwRZG zNw~Z?i3@^e`G;`*7d5$Feq-%QCcg4)x#t0@U-$GL_p5}`Ad3IXd`fnD(An2hVe$P? z(U17I_!Z0t?Vi=U_>z(+=h&lRZqYF=6!LZ)iXn(ll$UD10ZO4I7 z3-Zs-HTcVniIvFe0Ce)x(>Bge99k6Yaw03zUJ$@+SUY(IXuyzZM4HT-PKi;oX18}IGuRxw5S?@xaQvic{|FaS}6rJtdTg0a9!j-3sl z16mcOikxS;$Sa$lK;?3HLfPz)K`UoZz>z&QJ7R%7UpaeTzyr8r(JVtE1l9n@B`rX~ z1d8k~ffJ3kW5cp&O?E$Zk1;HVL4|OK`3|)uQ zWw!X*!~GN026)`Mi!Dz}UhcM=Fx<@Re%LBt7msG`av}9ND@=wt2rGU?{C&T#FQ1Bd Oo#U!SKoEGN%D(~hT=|{= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/567861a0ef3daef5b992549f6fea78ff39f299d7 b/fuzz/corpora/client/567861a0ef3daef5b992549f6fea78ff39f299d7 new file mode 100644 index 0000000000000000000000000000000000000000..940a1e121d0b598e816b9e060fa387c61e5b0d6d GIT binary patch literal 2543 zcmWe*Hej%1Vqh?3WM^Kwb1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zelQHH`*Mj7m@sw0-AgWMpJzU~XdMXE11DF8Z_Sy-I-<_YG+FdEX;E%4vzUY*ss~>!i3bN>xZ;qI|rpU4);JA)vSB0H^ zl3&ney9Zs$6eV z=k(ZM$xQVOBxfcLEe3FILeET@MpLI8nz|`)x8HMaHot9_8{S!N3HJT3zj&)h9DBgF zF5}sfzrzK#Ejpp@^Hcvr=Iiwrj=ojyNuM7e#>~trz{|kOW5vYq|NsAA3=9mC8_s&U zet2f)$a8R$*t**mN6)<}lsYDxv#;a$um8L1nfxy)sq@7BJ6r7>~vXXh1!Zu@(t*mtI|SnqwcIeCqaJVViT7m)>e!Z$^7iHC468FR1jy+Z}O0|(#^`2qnT{x`TF z5#T)$YRCfr!9bn_y?>C@1|hNE`#pdBo zbGaqk(vm2VR%ZG)W<8ED;#j;w4%;^?lg6aXnHiwYn)!P$PmC2@toitXH~p7Jy@!0l z3!9q9PmZ|PNkb536+i%zMIcNe9>U~9m>dZ1LAh`j$_15K2n=8tUI(EBtT;8+I(Cr& z03HLOL>d9bV-cnZA|YZyVVI-Jas-+IN~dq7qjW=5-&Kx4Un{r#U83?dSyblp2Lj^| z+xsww!tf5}P|Q&-Q2V+&z(5EW5FwNca4;7DsPnF1Sxj%BOwocpb8v({s$>fa=)*_B zzVm6&DGXgrz)$t6@(2;;rK~uL9M66kVrUe_D`%;6*nc$A7Ztqvy}V)g+Lc;*Vpr;k z75ajX$KfEdEGzLj5;1Ny9M$r$rZ{G?{OC$^d$MhZhzbCFPBAhlCgz*grsMs-0; zv|wU;^$p2qt>z`n_*{1r*kl3uS(0*vl5_FJal(x(?&9p@S! zaIJ;72kCCzQO48FUetI(<+P0I`Tn6dPqbpD}Ym`-TjN| zSnLwl&FG}9(*_x1gt(1=V6Rw0deb4ZmaHT@zJD`A(Ni~uG~$HwNDJL@Hb$FuLq8vD zYN|TTjyG0g_kEW@i^nW7k-Mzvj8l~kAC&b2GV2P8@DA8*6~_fTFf{|dTGR_saT%~uN z7x$A~UI~8Bv-cHGw2--V>j$$3`{G!d@2XcUquY4X`y5a2b)>pSE>Yv^AzKd)aU|N@ zulu975#Y4(X7hp2~8smesr~`rK~I5-Pm&ThFd3($IEQt<)~7$=m6c z7N+$L@^@Cv>!gCJk5{)3*VAg$J8Qh69psn+t7JF7z^xpcqV8~g#!tLNY1?1`J)518 zF;i+I4J2mZ`Q%COo^Eh`z9dJ>iT7Mi0T(|fp%+4zkz6uyO}PjH1MD{gLe@?KSJ_8Z*?`1nG;bviVTri&&coFP z=q2jSKd{b2LTp6S2TMQodCAM&VDd$aXZz2FK2^A0(fd9F%pdRPHri)nDRZ~$&c<=G z=gr;>7xYz+O;*|4Suez@m-b%yD7zBR7K57ln+GH8jNQ)6&hc93HD|27Z>KLTXBxuV zdG*$LADcuUl(tSucae(4#qdL!Mwy#n<#X4CE&EJ6RP1JhI~HdYm}h)zF1eCQquV>4 zMukTbp1zK8+OhCB&Wg0Oad~1Vq2c1elrT9))FW|X+?LR28hcUWW(kX>F_WY*-(Q;o nGBP@|+JetX9abuze<$DTK2R3PxMg=nS1Mdm7J4gs7+|Ezf57e?XkrLt0s%TetSXl}SI0mXRUTh;3&YwIY{H2khN~uVt{LpUZBiSw=|yvJbX#rAhZX zy=3$~x{;vjc2KG47#1E`p|k8qdejQ-PrRLT#w5^1(z3Dt;gMe<8QMRu;ArFtk$t(j L^2$2B>-7XzJylqs literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/56a47aaccaaadd63bfca9bd5c42562e9f9ae8c45 b/fuzz/corpora/client/56a47aaccaaadd63bfca9bd5c42562e9f9ae8c45 new file mode 100644 index 0000000000000000000000000000000000000000..6771eadd03a517ad1c78e4feb1d2322bd12ddbb6 GIT binary patch literal 935 zcmWe*W@Zv*VqgelW^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%0RmVU7&!kkGBAR9+zgD{7#KG*Fm5ntVq9a; z#3;IenTe5!iIK^GmyJ`a&72*BUrWa+-9XEN;TpyUreh0+!t2#>&^FhoXt1Y z(|&JDa#i|Jw2sfu?Q%iTIk|AxLwEbH)jn?1a~BkoGo3wc?}|vl*I%BUlYW&HS)ewj zoWaXxgZ&%}o%l*7W=4j8i=_-C3^>`CLuG|om<$*UxIs*Q78YhE)&>2JySQu%yd zHEBMp_`EAG4_2)aFWl8qSWV#0WMW`2 zWo9-oFiYSa|t)UgF2cQpXHRLDI@Bc?LNRa0LPD4dej^I1zsU literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/56bed2ccefcbfac147ffae8d342bd06c05361978 b/fuzz/corpora/client/56bed2ccefcbfac147ffae8d342bd06c05361978 new file mode 100644 index 0000000000000000000000000000000000000000..ea52b055904264c45c6592bb2c32e4d9fb894051 GIT binary patch literal 747 zcmWe*Heh*4EPLr47k{sLs^)GnTv`O4dldmQ7lB` zVyJJNk8C0%D+6<5FM~m2CsSi1!@g?Q$c(79CKFzkZRuL`#p%sEn9c$U2H_?CBj zedu<+pw=^jRV&YJR$8J|BmVNmr0UOoVMV{*e4nS;d{aH`_qHTgr4L2x`25^17X+P? z3wJ$qxBpu0<2F5aK`}Yg+0*u}h!lMN<=HvuS4oitYIDjNylghu&#};nuVi9oWMEt@ zWgua|$;KQiE6l=Vz+k`)V)C=FFf*~D2L^LvBLmEZ0|j^(7)~-Xh&!_Ey8FLn*O6cE z4xDAzyY=;$r{f70p}i&*2KQIBT=-FaohOF#K-BVic@pYBMIBZ@WasK&d)l`&<=R@g zO(`3nFFg8ygO#D7AR-km=vsk|u7*Ji5^)64>C7tgq7vU_VSy5|1zSJ|x4 zbGz`@hScP))L_j?5$kuGKAIvRG%K&^o$w@PtuXr&Qddd>7exKt6~n>Z(p>D^{*Lux xE{8JPx%o4ue`mb^ojXbAWyVqW7u&_ARA_E{dQJY@RGDjWiKS;>y*mjCL;zwA?OXr= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/56cf05954e86ee34832109af775f13b833beddd1 b/fuzz/corpora/client/56cf05954e86ee34832109af775f13b833beddd1 new file mode 100644 index 0000000000000000000000000000000000000000..ddea9fd2e56f525902ef561155559e72b32c0d93 GIT binary patch literal 1335 zcmd^;O-jT-5QSfLb;2Z>C=$sC5`Q=1556p1xD^C1kZZW}0Mm=Pg&-(+f>{g*3T`}w z*KlVfi5Vq~hzmvZ+jPIKu71^jsS<|hV>1gU8}BzD9@NP^=p-~w1m$0+b11DYZ13@CXK!NEpu8Mjb9lwf z*CLyw#n|(;n7yK@s J%O9>sUI1}ZdI+JxW?Z`5Pt0drb~*X5WB+`p%1uM=p~Ra eF+hs2xx)ejvJUAAH+f4gx3O-P^OdP8?Uy{$zdw!u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5719fbb473022143f337a7c6bca19692786cd989 b/fuzz/corpora/client/5719fbb473022143f337a7c6bca19692786cd989 new file mode 100644 index 0000000000000000000000000000000000000000..f0e56faa4577fa3cbc2e7142cd5fa29011277060 GIT binary patch literal 1366 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D3pIrpA1St($Xw>200Db6nK7GxWt{5XybyWjy!1UCD$FZiP?u`fC$>FNjHqk=4Y<(nhsGD5?qtHQ1_{}QY3@3kFGo74)F^SAB`l@SBc@Owmrv zI*$MPzpI|f|B{kA&%=@pvqEf^{BcP6^-nnIMd7M`q literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/574bee07c2d73d1380696b884703f9f391ef48b1 b/fuzz/corpora/client/574bee07c2d73d1380696b884703f9f391ef48b1 new file mode 100644 index 0000000000000000000000000000000000000000..7f22e553408cdc11f20885be50e081215fe2f8c2 GIT binary patch literal 666 zcmWe*Hej%1Vqh?3W}aQpqrI~7-1+}M`PVxvzmQelsrYD4<9*HlR*lJrWi4+q9MEQ9 z;AK!|VEE6-z{tQL&cGnX%*=R~n}P8r1LHLY#>)mxjOPuS7|RwgGcg)4aWdRAfC5f7 zcC9v#bG9su2CjzO2Apinp)72|Oa`Hb!UlpM4hIjHfq_A)u0e@GNvffufjmf%i$}uK zpd_`(AhkrnAk!c{v&29lprlg4r^LWOPMjBJI2fRDsbx*1fiTqROpI(CU_UT3vNJm| zusqYwe6&Ax{`7tNa=cTze6CK<-o8?f*X{S+l`G}u-q{t!`25=R6;AbGq#vCfk$0EieV$cHe#)l?9F$4Bcu#cJyz@Z?k z%pzeR)_`3B4@kc-3#$P$BclOQC^LI7K!ODsgtDk2bBP0D%*+fWJPZs4%nY&$ALepZ zrZ28Eyl-*x{JX&8o`oxZ>|$VGVYu(|DMIVtd=?gF1`h)_CPjw-|Ns7HU|?YQ4+8uD u|KIcMm+o@$c`cuJo;vg=Sv8PJk>Tl){|F`j|3CY`XYDVL5{=I*A!+~z0LB#n literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/57532513716d00e062c1126b380c6b419a4ac1ee b/fuzz/corpora/client/57532513716d00e062c1126b380c6b419a4ac1ee new file mode 100644 index 0000000000000000000000000000000000000000..55a0565ecfead27774a186445cd023ea6bd76cc7 GIT binary patch literal 532 zcmWe*W@h4HVqgeoW{ya=-?VJS2A$2Cxo>AnnY(=v{I2~yXlh_&ViYCLYlO_jt|`($n2jB5E)yfv0%k^bW+w)gD1rJ77KM!h z3~nrz&-eU%zp2^rU#8T-9;18utSf{&|G0;XTU&2Sj&tB(s;{~IN-i<7%h~C|wk>K; zr>gA9=Gn7Y%0R+^lZ`o4R+xp!fWd$p#N=mTVP;})K=ur?JA;7>lS1WHwOniY&wn~| zMIU+2vWai8PEdCB@NDY)5q?(0IiHtFA?S``jNZIu++M!AdTl?#cp@u~UP`>L)B5Lo z<@%Fa|9yEF81k4IWEHaQqSX(v7Hx75jM?Y&C-S|}Y@yhi2bcUVX`EHuuO=YD#LVCZ zvN7eXUBZHID=PK3|4)zqc<6+6-R-lh8&bW`Y*m;3FSx;tNg@2+do~x(PSetFFsJOqF}))t>{8Q5G_hA=oJw$iVwsR6@g;cfZE`_Yu&ZF?)-Q5*)wOKGyC`L zeMkrb`C%Yv9)hg!;rdy1Rc1bKJU1LZyOuov`QnbkI+^|)|2r}QxoHjr2_eYrJq*DR zWC20YCfNVizuow)c7sHbUn9OJkB7+SWOg5N&qJcJD#mVJ2p@KAX04|Ekv!#=j5w{NvYZC#zx37KXU3;Rt*A_KHSl-mRi2 z-;(Uohg?D46J}{Z`^D3FM|fnpp^|>)>#_$IZycdXPk}XG#~#7dH>@8Zo`q6d4~!-i z*hRV=96F4VX{fB;)R|U37zBpkN)@~as9-Lz#UnghM=W~ux-NJ)5T}E{c-RGx)5YoN zV1N}mZGtrg#ws4xVA?s0CSSnebYNZVDi94^K8}Gyj-5!MNb;uBlh%v1ehr-);?HH$ z_%el-GyKV!FA)n86>{0a&fKdrGj7f|+$MrE zOVbwv0v>S@NMZOr76Tw)hek}rS^|=jdFVYn$)@3r=!Xrjm38OWTAzzn(t$ndK*3s< zTLJ=J-vtk2;oE5#91L{vc%hO2V=w@qE_PTaFb6p1QPuXJLY%grZ|K~Rz{&kcv=h!? zGT~r|9Yv|WpQ>7PA-fdD-@Wpx@oYkE{yDGVpxXwtO)>DoR;OK_OL6m`)Q&t^SY+U6 zviIxP4bN^3d8So1BJYOD-LXfUzgL>xb)qu{^RsFmR;=nrO7<}JenA}z4esMSAllT0 z#3iJ=jfu-4*R`A9Z-Jo26|D9swrPm5yYH6AynnquG-5c=zI5E$al$`eYJG7e>D^G@ znYpK*c89!+AwOKYWa(FlMzf1t4~sqTmsS*EeOTRl6yS}pbe zPBX{H;H-%zTTl1pf*!(&38kPe)U5}TDi3IO#aq^<{PD%Tw^waXNNSEHtw?`(pzvW1 zUwzhi96~feg$w}|rfUjA2*x}6vx5Q)wXqQSkpTK;M6N)(T$UnNpbVlhY$g*CiD2yV#rdu5emy(1{Icjx6-x!3InqbFjC^~^7FD-;Hi;k<*_Rcng}pM4c_b-^6XlyV(r??t9kjd? zVK;)1k`g4d@pMmmb)fr=bH2&-JsL;HOGH*~dHI;3Nm?%1^Kx~eOgzOF_o+4;@IW~Hf(jG6&ei74| z*<;(ZrPmP;U7j^|w8bqUv!`4oa8>d>;(P~|UD7?%Mt{3{pLcv&#HMYy{EQCg;H|gx zB%2?#vknZa2AB1SR`)~SSWv!w>r}9RNn2G4yAf z|J}(u9j|+igf51tFPm7#Cwr+`^36*;Xf27mZX1*LZIxRm{r-YyIB0=?DjZ}!bG;|j z@q3eZDXC{Aq&{zRi*4;7k(^>JlTMqdLnj@_wBxb;+3At-AcRj1;3qGwvH6_ZFh`EW(%teLX<#-WB?UL{XzDo z=hfN=g~LH0?1Su`rWy}pU^vxy=maLGh~r{Y8E(J@wHTPq`e30%3iv590VO~nQ;6fl z{8)wHuLcB=Es1~$SWE`+K>LkJ1OTs3!)cgV{x>o6QTyAc`ltWsEACvg-gVo&_RGBVoDY|f#=hFU5iEr8Lb=U4+&$dc#4O4gints%(o!8Uy{AP?- zQ4t->Y8>4T8@G6_v6kSfsH@t2zAlgY!6om6ue`YsjA1%V&{kLB4? zATSSbK6Wn{nB<0jOYTjlPj;5tACn2>(i9nAAg9X&Nm993A(f>~%k6m(qEtc~9+)PE zEh3rb0DO&7_r{QJb8~WL+~B1bo%8J84-K`1-45_N^&`lz{DqhO&-gaBN!gR&xXOer zXU#gf6M50A>MJL!QmGs*(MFiAc%wnfGdrp zAs&Z1V{s&mm9r5E%5eu$M1oUjFhk#o>CI#qsY43)O9D~JE`-hq4`DE=E&;xN0n7-h zBQu(6&-8_AiZVtf(1d18gQm~~x+%&SErupEnqWBNWtdYh6Zh5l`$r@I8kYuO+%8O9 z9MIKkJwm(h!*O_a`NaC&E05L>*qp(;Zq=waEzX*swD0hahEtTy8GaucU7p=jrJ)w4 znGxRF8ysz(IJ86dY$iFf<)cmZt@P!2PwBY}S7(o0XxtQ{lc;l8TaBS|T=KemsJ``M zy**{AC0cvekb7E2mRVJ+6f>46yEb(c-#G4g?J1 z;s0wJ!VpUdQu%IO5127>swNu(zo!H|GoUZHb*OLS=Y)GsE(eZ>XGCFRDCrCbiu9bK zTrJrI`FYOzl+*nO@#Rt;>uHP~3&wG!Jb$gDng-&R|cS6tgd%O6Pj>OtM+aS?(QNNv9v+~G*eA+q-jlO4_V**>thu!nE z&(1R~)9JO;T~z(4%3aUi#-X;dE;+4FIPVW{Q@#E2eE6ZA$9&{p96+`lH(u3#$I+Wr%{oAX-XFsY zMQ%$2qyr!~0CE+wkT%FdHVYQw2%-`|JWg_9lI>f;TnyT!n81G6m`J98umrAV}PTJw^Zkxd4ExC#}ajz_>8sJDVVaDX()lR99EytSfTl ztLdS^hV<~D2*U^lJu;j@_cox12fKBZ>R@dX5>#xwk9?N2JM(~!q;~BHdCGj&R8kZ6ae$r9wj?ro|*(O5ddaa zYSg%4zg3?K9`W(4v;;u8DP-CA@g;LGmE_FxlH2znL)P8rPe)S@kLfG1-FQsU+E2%t9cs^bZ7($U+Wtb; z)^%+HDQYZn@75!lkB`hJJZ9vkE@gd5A61%*+*4wVH2AQU`g-E6FYg@;=~9y1!wO>g@{8x|H7j?)R*SjpgLxoA0+=`eoC+?^J`>$>&BmwXvAh?Hby|d(6`8 zwM+BIEPY2_l6-ocI|FE$`K-11m6)$c1uG79+kOdbV1LEI z5h|Ns5_VhY7*`ZM`9f}YVZ_CIJE`Z2cH$^O`!0~4*5Vp}l+H>tP8xIRA}gW*P;YhL z_O5)q)Wovf;Aq1aCHwJ%ilvro;}(BQzok~MAkoR4WI6ocS!8nEvAX|;4Rqesj@i)P zX{j$sbUm5zQ%-k?TSaUPeXDIjwy%F}UV071YF1XSH289%`dycwGqiOdlo&GhU$V@fwq%(GT})ZBRA}bN|6cHrru9e2LNq3q zA}mA}Ko&ya9b=OWGif|C8!Z){&+iy+7Hx|dH=8aN<7P2#7UO0yZszyf{$kxG#?5cC zZhM<>GZrU>$~jMkoBsr-h;g$RH~)Ka^Xu3G2Vlw~ zH-;`Ka)U%g?w&9Lx5)K<&ujh3L@G(ij>!m_ib!SQL4~-__0IRX%>RZy z7e$blrtEW>&}du^i7z)m6=L@9BB#oQuI$@(R~mcEGV4dT<#^T3Cz^eDb|1C;#7y~6 zcOly)vdR6OAqjM%@<2(XJeVLi7~i{_s3jODKA46loR-c*qs0HM4eGJm| z89wD~>%ej+(18CVt&U7bt3wPPbU-MQn5>7Skr&rvZ7+$~U@{6p4NowGf)a**LwfCx zNmno{(ipktqZO9TI;LxN>82e+;Dar~rPaBD8G#Xn9{`a6VK74%S9N^NcD0 q-Q0KXOA*SbLCEXY3gI~S+e!5VG!lXF0%m~U;X_8wBn0S;y!RWO$Enl+ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/57f546399fa63f8e2d7dc49067fe9c08adea7490 b/fuzz/corpora/client/57f546399fa63f8e2d7dc49067fe9c08adea7490 new file mode 100644 index 0000000000000000000000000000000000000000..f4f35c41c49c409ca01dd48750b3edf5cc45b875 GIT binary patch literal 784 zcmaiyT}V@57{{OY!=sySHqMxWXj?**lDs=*7^Na%xl%ON$*-)IJKE5WL(c>uV;Y3F z_8}UjeHbPc8H!hlUYS~RK@<{%l4Oa3WEYANC(bk}3Hsl?U;Oz0p4UPM9KZmngarGh z-WQfP_8V<2ag9eDVb8yx^F`1y1OzH~cM2kmBm)>A5kN(N0Ac_vgy6bJz%_uY0ee_8 zmRK`dxJxj?SO?R?DRT+YQF%l;d&MpO|;l@E1n;Y2ag3RduMUszTugMx;Yn9>CetzE!jhXP z>>%fX8ht|Ew+*Hj{fQ@a2Ti zl^^}4EkDy0x7`2f+2@rz?R_n^ivy!)4+%@1>BWcduYUYcI#F#r=na$?pLzJ8sfRUn zvv`h(@kVN)=HB)UM!fSE{Ilk-nckZ}a*D>*m`^)Sq_Uq?n|s??2Jy}#6955#&;`f6 z?xUL`V5$O``TYMKetdd--D3bhJM1j(viP18gGB>XcGfKnqG>j31Y}#l;ekdXy zU==tG-d-9qwwij5w>1yGF7ZcpJPK@SyZ*Jx{?oSVc0DW(c7010-14hl3sIL=R22b$ zI&QWQ0{fx>7=d^z)4w#I%)V^0FB}V0Jxz607+^j6((6}jLrzQ}f^irnVWd3=*y!`m F`~rB44X^+J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/582e104df62895bb20cf7bc896a0b7ad71d86d97 b/fuzz/corpora/client/582e104df62895bb20cf7bc896a0b7ad71d86d97 new file mode 100644 index 0000000000000000000000000000000000000000..25933d726f2461148d21cf3eb3520378ca60d0f3 GIT binary patch literal 478 zcmWe*W@fNuVqmajX4YY1W?^Mx*W%>j=Hcbz7Z4N@77-N_mync_laW@JS72b6&A=e| zosof&fkBahf#CrI1H&8!1~F!4#x5QP#x{ok0}6ip|G$1f9q=C%1`Qjz`==>3Jdm9> o>0aEr*pN3tC+9POLJSOO>%PrgAvfg2n3)+^_!t-%#Mqe`0FY5}9RL6T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5861f7c21e011201992bdd3aa4b0508221ae0a91 b/fuzz/corpora/client/5861f7c21e011201992bdd3aa4b0508221ae0a91 new file mode 100644 index 0000000000000000000000000000000000000000..0e8aaf7b50c90881db9a27c22111d900d58a34b9 GIT binary patch literal 1198 zcmWe*Hej%1Vqh?3W;7rG7#Q>!7!c634_C*_cCF41}2s3=D-01R)$Q1B16v zb%u%t@(@7@xK1RX0AkCD^CAfu7@%=+Si=Fb1_rQL12)>g08E3~O^iw)4`{V{w0-Ag zWMpJzU~XdMXE11DyF z>?_B0(wR?Pgn9~o@OOA^WB1XC3IDMr_mJlHS=IaZNbg>6mHo%Wr?jAHd1Y35fY#|} zy;Bb>zc^;}(SL@B`}+K^B~!(07p+l?-rzpBV#(~^k6xWP;ayh}eCGDQl;XrkIydEZ z>bmFo>?`@{tdMm-qwo#K&D(!6-a9Xo-(zxdZS$d{$tss+j~b{oYhU?tuBo!cKR!&Q zj(<&z%G-&i4pRiK>{HT8zUQQ^yOW8T@fYLb#^nZ$OAKV$m_udxSj1FB7#Lt-j08$S z(#kA(200BPNWyTi&~ur)fq?-ybr=|cQ-=XKb$~cX(ZX%xC#Pj`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AX4`jOMn+av1_M_^ZUas>=1>+kVJ62=Ltz6!5XXv#D>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmo>@|?5KvO7;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m)tehJ#dV8s|gY?*Vo{BP#=QV=se2V<%H%BZs8+iDf1lN&kI6UsxO2?YeyL zNB8}l5!Fh2jn_?AZJV;7;lLL8vWe+#1{VZcwkydMC{HXp@iMp4snGBNl3|F$^5z|TOIjX6}7k420{q`UO$n$sNn_~cW!{|eiev%K_H z>v~9FslYQdQ?J=(eHWJ0kv`P1 zPHFX*UZbxyh3V&YFUlM`-2Uk0zRs8@=Bqs>9tve)*LI($T9NHPOJGUS-}B#@cs6ix zEQxybw4_c@)-oaMq}uf>fEJKq2z&_y=mWVHb>4tAJClRSM=BCU;C|U=66=wPGewpe*PX*otIj9OZEntj10VEk zIdh|*`UuHiZY@J{i3~|EQ?(|mv$E~o{QMF@+Z)hMm9_AQH)s49?Z0_>dwPAm;JeZS zc{t)Bi&&3}uE|Yrp_aSMVrT};uNEhCTta3dY7x#a9Jz&Uv+Jxtt_7xx>d#?nfNNKT a%N0tSq~{($sAcW8Ntr+(5C{YUf8!hK3j7`b literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/594b51481ac6bc7df439cce4bed815db8164c6c1 b/fuzz/corpora/client/594b51481ac6bc7df439cce4bed815db8164c6c1 new file mode 100644 index 0000000000000000000000000000000000000000..a7c9404ccbb7179c942bb2fb9efa77bb644a29ff GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^js=n3)(2m^c}3!c633W7lf)IA_bkXy9tdZNSOK9Li!K%w%9-C~P1I=J0UA z)EXEVDjLW`1SJrH2%rFB%8BzLL<|fJ(70q;12)>g08E3~kp{w0r!z4ca4@m_2gx=t zJ29YGP7YWcVBlvU%f=ik%f}*y!vIhy$SSj74FxdZ0Vxn>VTJGzq0H<-xdR~p06$e; A=Kufz literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/595bae747a7c43c3288f8a519fd20b222176cc17 b/fuzz/corpora/client/595bae747a7c43c3288f8a519fd20b222176cc17 new file mode 100644 index 0000000000000000000000000000000000000000..caffefc0ff11e3c5b1a953d0a32729233472b685 GIT binary patch literal 941 zcmdr~Jxc>Y6rA_o?!lQ`K~63<@dG=nxxylaWxz_(9HbBg3;)Na2w3a z=!V3ASOpx|<-Oh6ondwxBZdlGn(-F^S3tlyFc%2W2O2Yd=t1wHchFl-b;7B~(3IQjm^U00)(!Su;|{m_Scd6-gqcyL^R@Fd5pFz~ f#fVJY5gIeh129x_WyXvD`nO(~I!*I;_22Lb?lqz_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/599d784cfd25bef4be70e37bb6413637779f187f b/fuzz/corpora/client/599d784cfd25bef4be70e37bb6413637779f187f new file mode 100644 index 0000000000000000000000000000000000000000..0bda23e28983e56736770aa6b8837fe11d5afe5a GIT binary patch literal 751 zcmbV}TSydf6o=3M;^?mKn#{5ap{)v0N^)k)QcT4}a!b*$$y-@lJKCa+i;jX2u_}Z; zN+lYpT?|_)G87?5^eOD31wlj*N|GfCl07H}P0VHy(o^T{cg}&2^Bp^5kWK+o8GAMK z?rmvR+psmh!_oeD^wPJGQ;$yYFaiu}cJ`qR6UhJ;NCeOc5P)a^J7csl9B4hzI-p)` zqYAc>#T$$gN=+~`o-!X78BvHPAyn7%r!zUhJSiMa0+WRtk#boQF-l-E4-?HL_2-mb zC7N4PqbVQVPJ1c@Q4bwK_ z9}E{nn)5eC=9Wzuix}h5e-)H&U}P=?G0nI|2u-?}Kb=X55R%-=A%UF+Zf$ZF-izs3 zi+eJ%U7mHDCY((x&N2V-<(5@WOscSB?*8P=mGMpwU!N^FHud?4v%e_vbyrcgd+W;Z z$A_O*d%K4^8kR<$p4{(T?#nFCy|wn?edY5yYld&?OnKFv+pUAxI)JePlVh#i&TWD2 zEM&fgv;H~Tmu%nF@A+ku>)2$B6S?ZgI$NL{vzTvz5C8@M!3EdNfrEw!$?y%EMf}Tm znaiQ54VtE?zeN;lEgNq1@s#-mc(|)- z^ks!Vyyx!Je_dO9y&0B9`@bej9`!}Q&h+I~T_*sbKeO2xgFO)d$RO5%<_z1>ybDpd jcqpUxL8^PH`iIwaElKY+S6*(PIgra4grPu*nUaK`!Oieo literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/599ed8f0d63d43ae6b804ab649281e2aa43fd802 b/fuzz/corpora/client/599ed8f0d63d43ae6b804ab649281e2aa43fd802 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/59fa41502b876196519bcdad0966b6732523b238 b/fuzz/corpora/client/59fa41502b876196519bcdad0966b6732523b238 new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/5a03b6eb72ef691f55a3815d8de1410f05c761fd b/fuzz/corpora/client/5a03b6eb72ef691f55a3815d8de1410f05c761fd new file mode 100644 index 0000000000000000000000000000000000000000..a85c7372db38a8df5d3b010053e8793ce87cb311 GIT binary patch literal 6599 zcmeHM2~<;88onSQHQgmjG=+5hzly1;rwQKtTv8i)=zrGAc+|M1&$$ z!~wLnP!&NClvRiH z0)Q$2G!(&oE(dS{0OtpAK9G;|gnXp=5Q;-^I1(5;;p|m1C!Yf4iKIoTPN~E42tptL z=wK=bNkr5gPo(1P+)b%a2^+{#$ZnD09HtxBpUW}ThFaK3GDU4g1e+5b!QnDILIQ(A zxG@Y@E|1~N4TN-6c~f&}&N5>`3uq3#ROL9seq^9m3PHn zFTEfuP|)JkjII@g9f|!ZrChX`n!0#3NZUU11PXRN6;FUDf(WHwn1H=-B3RNJ7oKy& zI&_#iZ?SqyTA5DCi%izg){Q|O%qto#tvh=91Ur51o0m9cx7g&A895$Y5Vv7f-khT7 ze{~GwC@09WMP5A*xbaGw=IcYh*9v)V%wBlwVE=}{k?*;A>^~Nr9fyzC%Hp_a$;~Y- z&{IrSX1dSUIz4cJR4MDTj>Xx&kcJ`vuK+}t13U2mq=+z?z(jWSetkcC*BzlaMod&2 z0)=J`yN?PaAT*u;q3^mqJrk1-C#-nBp3rlV*~zGLI6SDFxz<{z|M{l)(Dup^??U~v z^DQb2`fLps*M6pP*SD{ExTB&+N$*qP2P0dT+Bx0!>D*(+fpz z%K@YdAU6PV74ne|$VWDb7ZQqD2_T6mvnbW+k~JQASD2@(%D+>-N*?v~cpD~**>1)% zwRj(6yE(LAnTdxpzIoBu3`s>O6eX2e*uD-@#k+|^h_a$>MG+bFLx6v16w-5s^Hr|E zgf71~-T8X%hMHo!{6}NAi;L+8Zq<7sk8b21C993Jo-L%W?b({-bdxq;V@NZ8a4++d zj%c0cX*4ZK?kp|I8IUAF0Kl9nNszyi7ANEG;dg&wCjZJ5{)(@hI)Oq&0hr`3iHJCn z@e+g}IBoFkkcIDRtM^*tc==EDT~oe@B64#)It{ttg+OJ;XJ=(_jIDH@a;SFFz~8vR zJU`{X=LMe{yl_y(_n{W+Q-9ys@0DpN3Qkf0C`W;sKmOJE8utF>chvvs!dpUUJttqB zl_Z?Z+xx|dTfD~z0H6Q>aP_3UGytS%^7de>t*s^6SLG|$vLnMy*wJAzCNUg#Y&3`M zZ_JJkgDbIg#=tv52WU^kyK6E4TmmhLvPMLNK#;*9G-fcD8x><^g5x6ysF(XGdEQ*a zE_SQ2bz`Hq!0qQ~Kl3lsW7Fyb>e9{bk;7Y!x4d*Ht=R2D&+EEBkCsq)XWqfK`-CAI z9dETwpB#IRYxK-|oErzdOkWw`osyF^oGQLq(DK7$yE65V2g~PXM7>l@`?y-hInl@C z<*D!%LQUS5GY#se%dIwyn>VCqZ9BpX4RY1H@Gvu{Rk!y$*5IoB%8uocL);vi^*5yp zy-zqEh%3q;>v`PX{z*L7?c&W>fieC)i@WG`Oveak0e8fn5!xNR@fX>yo8!U#_J_3^ zEUp}XJN&&?gr~v_E5?%g@muhRm*9{87yka=@K-i7{*qeS*m_qr+e{ZG8C`pEiO)-3 z<+oNZUa{0i?@6|W?cO=p1Uie@cRn;?)=kKm#3L}VNJ_|z4g@D2>PKH$=(gg4%N((^!R zv}K&@xy6R*aRk8YB)E(nPvciEjM9y)5;$Gce>UFgQh&y8TZxt5wwH=do@R zx2t>`()$J;zGp{iuB4US{Gjd9FB|87rx_+lJ2xtuw6zfjs$5_9q14#v6C9Yn3Ly%(s@>WR%i%H^h*rH*^_&{Racot12O$y~U|GFEF^iFsn|>P9e8X4t%*t`>w~&+4_bL%FQ?`*h(cHFN%E(tA;ix zE?u*}lk8a)wKi{G)PYB{w=4^0ZCPef7c;gjRl51gzcxIx;}P-^9cg8bwIX~(5kNjd z7L~DSftxmd_wgT^AH%n7e)9e|nx9FsO4^One%ne|e%k<;k*x7-F+5(6N2evu>Hf|z z0i7g_$U#+`Y~H5WrqUW@swXOCqR!%XNNkD8J4>W9%Ckz@EHN)vJGZl?E!qFVKpT+* z{0A}c4T|uuih1{hVxCfjf0ttZT}2oxyrt2DN?%{Apekh)_pSMqm4!J^AK;Ll&q?WL z+XrpjKojY8dk~q;9)vg&=z?(4Dqjbwqc5)~I9-}_wP+{=bt2;*9WLhtH)YlTn0f`b zJd;y!o~N=*;i#eArJE}_VkEXnme$6Me{oPG2Y^C`Fr34L5W-(|EJbYvgq&!|F=x0! z9>WjeS(1JRL%jsFX~>&Q5!6 Xh}nb_QOpeqI&{#~or(a1(f9rh$!FCr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5a0e61b15fce26602553aa93f9d42230589ef56a b/fuzz/corpora/client/5a0e61b15fce26602553aa93f9d42230589ef56a new file mode 100644 index 0000000000000000000000000000000000000000..946d7ed4bf46b39acebd872d75dbfec62ef28c5c GIT binary patch literal 751 zcmbV}Ur1AN6vxl+k5@O{OzxOMXj36-lANt9#Z*izSBi$+{8y{ht~Rvm&^tk>mDAPi23!AczP;NwTDYWDkl#H?~Yddg{D=&pGhne2$qh$f5uljJ+Cq z_qM{>K5R_xu$+H5IPTP?+^83{O~H{TC-&MG`*NxZZmoQHU-P`dnC+c9UFE!UyKNBL1~5@zQlgQYxhc?{ zi_E)l#y@BJlIOkpqo{In6@8&`Dp&m2UA(uyx_Pwa9~{oY!vY?-<1xF ztTd^rto#vCrnauR(ZZTAB%O&W#y6;|33PIY(bs z`=fjAPW{)l_19YmOveg0(+Ax@%UgS6_4a;>^AR&L9c}O01Nm`~vtx?@Ryy literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5a1c63b8fd17cbcdce5cce62a9ed57dcdcc1d788 b/fuzz/corpora/client/5a1c63b8fd17cbcdce5cce62a9ed57dcdcc1d788 new file mode 100644 index 0000000000000000000000000000000000000000..62aed534088420751b5ba939c21bb255ae5a93bd GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;S2|17>yx19YGX5@0x>&A`CRpv=JVpOJx)fkB*sL5!K1@h&$5 z<4p#}YYdE+4VoCw8#FPNEnsG1G+^RnxCt|dlZ{=e&EuS{6{CTxA-4f18*?ZNi!hTx zsG+cdAc(`k!)0J#kg5yPkZP!CAP*Ac;*kJxiwsf?6bv#AKu96Lz(B#rz`#IGoEN0l z+`!V*)X>b(6vS1BS!ZB?u!fCPYZQ>Ji8K&qW7h&Xor#f+1I%D%5K(qwVq#=s;(!Dg z0|P%30|OHXYr#ZNfB-U&kp-E@(EjM$tS<8g1lk%CL^^(=@%zK|*#q}^Ge8#Gxi4`n$^8Km4^4vme=BV(u zh)9L%%J2R#mva+GOr%k2gPIsK0|N`65CekBRji_Ao>$(iDhy*V5OAj} z14S&tLSwa2t}MDX(3BZC6{P@P0*4YH3>R|fD}b@gsid-e?KU=tzl|d#2F6B4#|i~R zKVd3yy)Y6O>8R3efDOZ%0hquB1nH>K?SKt~v0(nsVT6AkMs$4X_rn+n5fwo|l#ddL zAPchi1)H_QF$z9$_>&0xB>No5POW&i?g;llEh+|NzaDOY0;x<7pZYZobJ-CrD z*7e@mwb`JKvs!<1$HTh8+UUJgCgBTHBWtsdKvP&()oH><5{rQfl) zj&x?Gi1GWbr071%U4xE)?HPX2mLEJ~v(l@i!=<#2?0L*=N4)P*jT8KT_sybI&MVUHBXM?e_*4YYE^&Gq&ixS`R zx>B(b7rceR$ucJ(Foafv=6epxM?+BVd{1Ul;DWIqMoJ1Ki^ZFx>9j^lty_z0+P-SS zkSzy?<-1O1uAL6U4Bw*k6Mu9+IfXCUjwCx`bvKUp9ouHD9_()EF^ z%#UbmdC2@ifsp9QT+HIkE_JGhiYQVDQbRu#|N(|*U#cojgt zeS{NiNbdql+kVaR*0^r@+vPH%<_(7<8tAIm;c2C2g+Bht z!3b08X#L$5gx{et{rU`(WnW_oQpr@8xv!O>E<0|~paxsPJcP+hg?kRG2b=+nipU$52m&AmQK!4XE9-g%*I=Z2!Mv^C1 z&y`5dAfhcAqcie-ljIe)+|6BWP!Oa>j;008EPu|2T=Y=Sjk#v?2Wm(E`a zmnSD-UeGN55U&5CCO67&u365+SDq{PI6(F7p4#JfjZhj$@q3j|$w~`6_hvFQz8@<3 z5&sUqjQOzLqk1P_Typg$i+uY|nRA7Cw!0nJaq-bdMl&-VGhIZZ3DC&213lq zKReanuQ0}!Bdh$;no!cSGuBQ|?OPOVb0R8IUlPDfXghfIXuJRg`4HGHkhi;oX18Sw3CmN7;7AI^M%vifJ%FaS}6rC-2{g0a9+4xTlj z16mcOikxS$KrEZjrABjjLfQ0?VJoLkz>z&RJA9r#A31%Vz#X_@(JVtE1XcrwMKwUd z1d8k~fg_E!ef#z=FXM9ryktI`BcSm)i9A89kjGE`suyLy7b#D*w)w0hXypNHqX^gc z8h7JHQbyEd$Hc&DW9jRq*`F0ZIdruovOTR_UIeeG>V(W@?E%kE1wp}rk980A8M^jo z%53nphx^B?4e+?Nms*~cyxMI$Zn%lp{is#IE*{C;=}hWzQkV#}7gqd=`1$-$Up^WB OCdWmKfFSS&mHz<}Aq(m+gx*%r6F1LxYrBErkrAVPr zxtzohTS>WeJ*6w%sHE8CddzudN~Vt5ou}tKXYccz^~d)-?>B3{^}cJZcm39HkuVI* zMFB9tu$JQ6xAL;tMG~p;!!q6Bl9j>n*;pxLqZwHkilC?{C@q_Jb|voUR46Vasd%rk>5byw+Q3+5~ z2y?&*$)bxKsIpL+w-AvPv-jV~(6MK_Ga1yWP?h&mOjh2~kI4x1V=&21zFywG%pkHI zGn8!2^nxmr#i_I595@&1&oYE_SMryJ(D38(hs@Mud@{pED1rw-@Bm{Yk^r(1F_euU zpn}jAJw*mt#M-KBTvfG-WB)SHO@B`uE4ISpY}~ANv5j@QTL#QdoJw?2Nxk!A3MnG{ z!IaGUC-`?JlvVPlT9SdFOZKr=gbb3bbibI_E$?xD}7S0Z=r zj`;ML=Bid2Ts^t1w%$|yx^g{LW1IGk-<#Q?(Y9`m>fw?nT-3Xh3>NN_y1}7nc|Q0_ zTjwl_AppsaItHV1pt2C=psa!;;p7I>j`}yn-dwY({2F=jknsVDNw{9f;{B|K^Me~A zCsa60Fo!viYH9YZ>?r%L>|pcKkMbe?h&;2hI6TA{-P^0@hiUN4Q)-F#+6#)-hWA$AvM&WHGAW~dpw8bry%X} zjG-D2j(kt&Hq+L<@BBJVa_t#c(+!yJDF*v%W-8w=b*+r+dh=}dBI5beq{6#~_06v~ zDO^zAz=^$9!MzxP+73}PiS5kd)aCPYMizPvjmmm-Iz05HCGV?EE?aia<~c#grfhEU z>$xTNbgo`@sfDYsU0K|$G{s>jsj?#tn%0AQZ+u@Cwbpm5#d{yJBVia`N*v&c^H9L$ za)$r_Q;M6c%qHBy#UXA*1ZsPYqDgceZQ5e$LN|4)iY8!Q8CI&1b8ctmwC@k&^eCPG z#a;Th1eq>(H#X7&*+_5}h6+@V1N`cN+$R9!4nS@JR+{W9;*9pJ!MB^TW0 z(|R(EolTDn5CG~A&acnNQa_A!dlxcnvHSD4`IxNPzE7& z7Hu5LJ}h}=THg*P`!J^R%#9guXOh?hv{*093 z*w4Lqzin0H1_`5pCQoPAqk`Zdfg>5o<)tiuSU{IgnA#?^95xx2*jS-#JkU9dZG4oU@C z!!}M2pfgrw4;qWryBr)4cpH=UKrZHBGhUGCNsHI)CIE96_AabAFK7l#n!q7QfWlNZV}I?E+Z3B7vcoeg-HCIx>z!U zn0D5oOfvZcbf5L5sc|o}XZTPP5G4tgrX?QigC)iLrZseqVeLulSQNR0~YS0f5(1@GQG|dA-LGbx+m1 zfi`zZfF}_`Ektt1Vtj|CqfGy{;sL20A=={crwSEICWW5S4e49^T6iF{8M8@Gcj&|K z=yLvkX|8v?elS9fa-{c(kK^=vgPQF#2s4-GEPkN)o*rt1ue&Iom#~eSlCD+}wCmR) z&FHC>}zRO!jc z$8q}H?&GR;@fmjji1~0F9b{+c;U`HuAB;iYpx)$4FYc_$#N!-3KOawWSLeMQe679+ z%Utdne8&}?Yvi+Lxo_omIT}-X`hvsPHJlz?m96=kg2AcjT?=Q-{M%}!N3LDx`&&+R zNUQ(MH5}Zke1EhtFmuOo54nL9WOKfr9FG?wBn$!Lmx{+O_`=`egd)O`P-T=4IdV1} zW3|N;@y7tlYPjABL>%GWNh~S~7jWJ}rIL8Qv1Lj`a_56=AMx7s0>GA7R_Zv|Q zm(Z=3;mbjdm|!jVIL7!25#hV(jy0~$GOYTg0Qm9ykZ%d7k^5IG$k!?kL`A{y*yjX> zB_Arz_^7AQ?jF4Iw1k!BDa_guG$Nm;t^_#xQ_D z9t$K$s|_2)h6o(Pm}Ck&vY%@)S=68li&21=~o@waNWnm*qD6FcwN8jl$naPv4xa^-*?g8ZQbPEqH|TLwr)p97w1=(C;9~zNwp@Q V)ka>a`|e3pRN7c$%|?)be*#l7g|7er literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5a35c9ac7326faf64d6ba9530ac6e9a0551f0fb7 b/fuzz/corpora/client/5a35c9ac7326faf64d6ba9530ac6e9a0551f0fb7 new file mode 100644 index 0000000000000000000000000000000000000000..161791505d399e8d31ce1fa19e3f24bdcd974265 GIT binary patch literal 2252 zcmb7Gc{J1u8~!b0$QUhTxz^;Oh@WNbe9cJalZZ&jGDamOV{7c18B0<`47VohjbzDk zU51pF(U2u1DkH|FY>6SF@}0hOzjLbdo%5aV{qOzbdC&8_&v~EoO2M#58w3E3Fzoiu z?odX!&BA$^nYNqdI~UjEx4ym{DbqQa&-?1?*ea?lnZWl6kauavv1I%)CaSV2RmHPm zm`N$dS{+X``w|NX0Dw&!AOHg23Im|!0kkZDa!2T>BM2S7UjRcO1cBlR7QJbA5;187 z3xXIS0NJX$8Ns4q7Zfap4hbcBlSzo8G*;ITG0`>AHPJ`(jNPTNdf&H*xULu?`frE? z>=#Nx=r94HLpZeX?j&NjF$zZLkOo8tL7;87P3UyQ+HspxCR;>Y0(keSW7kfFHk~jM zxtjOd6BKDQ4V_B#F4ZK*KWnoa{+wC@x3kWB&9?2>xsvvKG?fAETNN5Kbdqq5$Pq;M zD7EkYJ^040Ay1B(pJ|AXZ*`-f<}Lf&o3MMy0euT)`%=m096WcB>mAIaNwtD$&d@w^ z$W5QrDmc5NXFJX|S@Y3HcO_L7&Ww$Ltz5l!uv7Y;*fQqD7}D$3;e`&3Q}Q{L)7U&{ zaw4{Jl#p?7jZc%(e8@D@yQF+7)kE6+lf;=^b@`6}LnZ(z0F%Y-ZH}3#b-C#|jk;J{ zSh2}|l6xgr!65)64$(n?qIcA@?*1cRGG_JW*xXEHg$&-W?v-6>Cb>pG=Bd@Nk}=s! zJkYwg{iLABVvm%4rWD$3S4xoc1}B(nnw{`xT(n}U&5bBi!|N2C-j?}yrugRqCE61u zW(-ok6jgC`F6d-+yN7^rqhOE?&S_N1pVcN-7WqsZ4rm_DJLIeyXQ(36sk;~_)`eK=q~q*@w9z~PP{A&Ulm#z z%}Up%*C$kJ_sF$4?bDW0WoI{%jPSy4vTaN43WPnRiwAd5M!d=lWut zQ%izf4&2R0nQRw{V2qD2b8VkkFLa1e{cpq+)gB1T4|qP4IlJt6E7$xSpcSqWl*IeP zHXwb4P#@%VFQCv0taLo8? z#T9!$Q%yjnm#Cj4ZP|m(Kto8=-^s2pv@XJ6te7vHaiRV)SFU7`gv92rd8nxu6gL z(=G!DEd`>{fF-&e4i#x|{#ElLYjl9P*S?UC>SGRU=k{|fiw|oQXXTcaN-T^gJ=o+` z)PB3AvCA6Y@0xYXV4H>Ol9vIq>M2jq1av358mr6L>`3%{c?}g_*lo`E$EK_NUj@a` z(|lsWQM*GYJV`2dirze8`8o{+>PN8+#hi zX|1;~dc z=L%@2Wj`)HYu&QzZNeNe_9Ev@XWC_E4<1z$(lD*IH6T;*mpLoTvBUP z&aK{|svKWeRGQ%afnB(^+I@Ipk55Cp7y$hf1UCMz%2ns1Ma{O??hGGMR<|%;7-Dl6 z-FpnP%f<}xl79N@omX#kt6sPK6st2%CX0m+eWcYwRgXzg{cjWp2EH68sp>B)d85xh zOC%q6v6%ZsQ12??74O=P%XJW=j83Lf`6Vf@1oQ7g6c&ya8dko=Ar&1CMAOKqyP`Gp zI@NVjuSnT}TJHEdJK$A=&)|~3f&-y=#N^;o)seZkk8S{jKp+SAP%*P%UB4jRu~X1>|MAGLt!p*&aVa+Z>EG5@a>zw@ z%0}o}O%-h-e~E=Fgj{0IEYlk@D7c0&k3Q9y&W(?3$Ek^lt(;>~jMoK30&aN$XJc>{eSA|Dsatuj` zQTix0D6u#wes1sMmWNw;@K2_u*R&SVLHEamE zTx<**qUDli_>Sy24;|CmHZrr39U9ex(M=&dz$tIl7T2?o(}AnAeT7wGc8)ZB?V8S- zb2rE8RIT_@>MaUU5MYUzL-Mg09X~+5sz*^nBp|+~C8FN!Qo7q*`um6(ttm)8Fy4Ig W(moufHgLFcM=}rl!!z>j5&0MYw%c(4 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5a6a9e4fcf0e695229b6214d22a863528c6bd043 b/fuzz/corpora/client/5a6a9e4fcf0e695229b6214d22a863528c6bd043 new file mode 100644 index 0000000000000000000000000000000000000000..0ae2b9eb127069b6cd3fd416aace44e71c12938c GIT binary patch literal 475 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1H&8!1~F!4#x5QP#x{ok3`l?%iOs;kpoq%F0UAgI8YHTx0T6(i z$;j{%6b20&x%;OrXm}tyZPLBCb+I9Df=f^+u}XAG!s6ZhpFAn6>>vPjG38%g%2bI0ISN0cmMzZ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5aa2d2beb9109771aedfac52e64498fa50f6abd7 b/fuzz/corpora/client/5aa2d2beb9109771aedfac52e64498fa50f6abd7 new file mode 100644 index 0000000000000000000000000000000000000000..cb325fe0ae164518bfae4374855979f6baf5c64a GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W{@Le=WJOR4O|Vm4LI4DLs{5_nH)n6g$)Ej91dYFgZx|rU4s&X5(7g;19^}jm#~Cq zUWq|bo}m^A|2F*;X;7b#cng&c^~jmei%O^KHQ{mYXkG<_ScI|=YIz|O<`5A z<|~W4Rd@HBy$c5$Geeg_V>^=*~B?b?E(1im!;lbjE8%s21ff11g$v_0*A@jk=tb!jjB SgT$@%88E<`{~Q=%NB{s$e-q;X literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5ab4c8a28ab63acf928a0ac00ab2768cb2b67994 b/fuzz/corpora/client/5ab4c8a28ab63acf928a0ac00ab2768cb2b67994 new file mode 100644 index 0000000000000000000000000000000000000000..e8f81bd1e59f860679fca294ade0542517b652a6 GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;P%I7!D{iFz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^jO>Ff%b4Fmc|58_3DV4r4bMHZU+4HW+ZSfh-heGQi7K;6*6>MHZ8bi!5zq V+BQhEHLxke!W$1@XMh3RiU4Q8VEO<6 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 b/fuzz/corpora/client/5ad8dc0ab851015a2600fc62d79d3b66fe8f66a8 new file mode 100644 index 0000000000000000000000000000000000000000..b2e53e8144a59ea4e9fcb2a859654183ad4724ef GIT binary patch literal 6 NcmWe-W@KPw0ssJ;0384T literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5ad977b04179f3ca51c54cda82bfb1a2df3770cc b/fuzz/corpora/client/5ad977b04179f3ca51c54cda82bfb1a2df3770cc new file mode 100644 index 0000000000000000000000000000000000000000..397ecfe4688cc06e12718fca43d39d93cebfdaa5 GIT binary patch literal 53 ecmWe*HefJdVqnl=W;P%I7z_*y7+4ti7#IM={s&M1 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5ae0dcf2b92f63c4ba84c2099a7d24fb0b9502a6 b/fuzz/corpora/client/5ae0dcf2b92f63c4ba84c2099a7d24fb0b9502a6 new file mode 100644 index 0000000000000000000000000000000000000000..7a249246793dcb477fba2b490870f1a9000999bf GIT binary patch literal 2292 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~y%hqpc?@{j zIJMe5+P?ELGP1HV7`Pg88*s8QhqABsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>NhKxv9FC)|6neCaBDyaXzy98Ce;a8+#cH8atU98yPgUPb@QflJwvA^M$pM-L6J^ zKf3SdjHp)HYr1Z_YTJ|r4F|T!mrYD}GrS=1V!M)Df%3$n6EAZsty;e~@E@5fR(jN< z(C0+5{o+r_bF}~|(tI_$o&Tq9RZ0uRDGC5G}#nE4Ojyq)5 zrCLiz*r^2?txE6s$i&RZz_>WTz|TOIjX6}7k420{q`UO$n$sNn_~cW!{|eiev%GXx z>w0it$||!+7>G4sD!A3U-hcy%c1={5RVQ<#2U_oB?9!|jh=?(2+sVzSy};vxH~>$KhHsa9nB&k|Tt^!NOCCY}vk z9801eJuRsdlr>4nIw_y|Sua`b&b;^8Ra_5)!)L52npnY72Tf%Rb5!_SM5ID><#&IW z%ejdoCekRiK~0RAk%5Je0i5O-I$0PPTEWWebr`!}EPOJt``&*j_^B_B%g>RMA3+o? ztM~kz!20Nn?j?ntuFF1(^oH3gz5iTRmvv&(&*;VKN2E+QYP@vN)Y%a$^C0f!!SClc zJ`z+3`fu^GM)vN%Q$_RIS0su2n88@SN?!yN0gPhIj4UAM7@(weSRyk*OUpSa@U;A3 z8CBA9iD9r}YDpqemcf>mOHxQl%gael%UYtsP0Z#v67y&>Cs1S$l4K4lbQq9p zT1dJex~9$DfL;eOFfcG8SGTYd_5c6>h?*BxNMizmb+U~C!8%zTqwX)E#EaN{2moe% B1Bw6u literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5aeea43cd486aec1a8ca9d8c79278a691683cd88 b/fuzz/corpora/client/5aeea43cd486aec1a8ca9d8c79278a691683cd88 new file mode 100644 index 0000000000000000000000000000000000000000..b51594d163cdf3dc3298b4969abda617137e7f6b GIT binary patch literal 1921 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gd0y1^xhC8>sr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>M`4`B<$f!DdaFLF0U6_cO9GFgNxx7&LY=H8wJ6YM)qU^d#xO@8=6^BfDLV_I`BV z&lypzwAXaqbk(*g3mOh=kuRH=?q+yF;Kg<&xdP>hMJHb7R$8@wZ{R;NRjl-=N1@M& zWc$URlILjo&-!)xU}2s{tHuI#xm1}|tXHG+b)7Y}Cv5CluQEAM?8VVvc8)t_)}>lY zM;yAj?%JyKj*m>tj0}v60}T8OWZ9TQW%*ddSVX!@udX@Gv5!wab^EWdeL2fZXSJ>e z2d1nti-dt#1Ezvot?LbVK>CGQSPhsN8UG`Dm=)yVMh5E_6}eNd*=Btgmei3x)Ui%! z^_O0wuQi3~=XEd296H?o=;gl7m?tKyJtiKqpSn)leV%GXw*M@FB}ISFe`n&^z{Rm7 z>e17ZIzd^}gshYDnVQEG#l7&9XS3m*eG%`tScFfg=&(`3CaWA}@NPbPNX`ws;_^~Lw3{5Rb* zVZ}bQL>L!2`4L3XvU<ALKrNN<>}()-V4by+7i{ft&$d_>B0qsB`I zO`RRFG7sWj9{hfO<0CYh>^KJ5@BVeMOSUj~R^RtMo-c5x^+M%*evPKp<^n zPjskh`@u4*r0o*JV8zsuM5HW)HEpLLr)?ZVe7jxfQWBebZLC5*|>5{uPwWeIaUS%QK5dLTb{1A0Zk zz`($WTp1uGM?}2iL2=*ZW DnenZW literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5b757e060f0969dcd095a31a8c02a3e06026669f b/fuzz/corpora/client/5b757e060f0969dcd095a31a8c02a3e06026669f new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/5ba3b3bd49d6d35c93acde3803bc84fa665f11b0 b/fuzz/corpora/client/5ba3b3bd49d6d35c93acde3803bc84fa665f11b0 new file mode 100644 index 0000000000000000000000000000000000000000..6ce2cc42f14ba3e8a2583d6d66e19185634391d8 GIT binary patch literal 6607 zcmeHM2~bnl8a_8S2_ys%0|5n+uqYq~4guPNqENIz1;rwQKtTv8i)=zrQWYdDB0>=r z@c~*}sEQy6$|^(_sZ^~fE`8JmWfZ|y0hNa=&%C)ILEyo(&e%7d*Zwn^+;ivLoO@5c z@BhF5yEGI57B~RRQKY_dNImSSZ#8{&LfOXo4b=1}7P75XWM739jbJ=v0FVbd0EiHP z0H6v04MlKY$N`)m!1(~27Zl*!p#W(-isBF)js!+eJ9-q&$)!MfB56^wee#ezf)EG* zt~8N@BqHjHCsJ`Xt|nBdgbidVWS8(zF3W}I%j248K?Zh`Oi^;1iQ;b9$<@ z=@B}ak*&RB0XXJ9@<}m#v{iAwxuEt53Tb|)8 z+h>M*%hF19_phb(w2UmXsn#grE>U-H>L|H=G9YCDhav#UcZRE>CJ}YjRKU~l%6p=3 z6@?u#TbY^+-6 zFEXv$dqOA$q0u-9y*KRd8lQA5&f(=oLe~{mJF{lxu>s}u^;X(_FSo=7x0Vlk=IdRU zZ(gR~Yi+Q&`g4s3-o1@OZDn0bx}S+Y8s4sX@6DyiBfC!cDZf61Y&~hLjQs%!4Mk{R z66z%j5=o0tR6;K_HzLijkbkvJG^|)^ef(PR*4Hk8(zQA#C(6OqQ_S zlx<@EA;xwyXwEj33}<}ug3%e0iby0*DzmVC1EflJ6NeCG#oLM^GU&$u-)$Jwb)Nfm zw$PX^e<0QIR`#Z4)#udLU13XP+Re4L4uNr?2nYo?w56HeX{8AowB(UDw^uMsCQ z1g^%?853^@S3+AN-c^$c;1Xy-lrp|Jvayoe}EW1Ij%K&{-*iSyFZ=aZ`VPE#`f~Fsz+LWjVJzg<4E#kFe%BPhwj`3b@ug``y z5vp>wov%|rS8BOw%&aaoW5;oRaDcP!#A6u%auEC{G)uk7I)BVSaxBKLf)_~Gq^Kw^RKcUcg6zyY>zSO%&(vN zQ{fN)H~#)=_)BPN;ppDbY%y7wV0iP@RRKS7jn8`BSjA#5-DjER)(7U?6lyQx-2d2+ zRWmMQ;*Z1lf=NPVIQP5oA5(5^++5YpTrpymt)PN`0i!Wu>)^v+$j%ujeB)4HH)Abu z#miD>5|~sq2Wg&~CNL2I=2U9ec;LU&nq3~r5dey%kYzt4l+MLf(y}he?AVJ8*>+z# z$7dWJW2p%}{rztBJGCg`jkca~KU^GX5#xMuu|aCgGGl%_!D;kVilBU9gid&c(Eg_0 zi?L>>+Veg;iY$G0yjHY#UzbRY8B5x~?U>H9V++X7xOr(y1^YOoYV(kXYTS_qKcQM* zPlD~W{exjW%adKW*YnJIzK6^YHZ0b>SK(ck+S}j#feodxoK|w@qn4|`Zl3?WW{5E5 z;)tj=4!5RVTaWUPcRFX?(tS)rmV`f=T<+FBd)HrIQ`t>tc#P# zIKRT)TgJIE)ihUq)NM}Xx2<}P!^ZtVzm#5Ud8U&V@U=4y1>^cm83kfR1VF=$?6zX- zjyR?K#a9qlvr*Rvy_9oN8e86w_gLwhRun(~N@-6~)Rl+3m=}w85g8!|E>mCB5*vS# z%T6*)9&_uWsiFWd?{?qwt$eoB%(~p@c*9qv2T6mfr>)n;fA}5eF1=ob(1}g59)A2X zI;HMJ-9IA+Iv?o8ZtU;0X30?8&t(3b+a2an5f{tZW?z`&A6T28QNyrN$nKQ``xa?E zaQh`w&){*XDOUwssmSeBp_f6$;3mbT>o&HN-76y2=NybU{ABi)Wx=d1%Pi_*#+Ic* zCs+Ax!!tV`p#agItjw`iM1Uv)C_u>KGBz!6)5h;V{(8;N1X-o+#yOuIMF0RKU6RN8S1sn6hjEB*R1J=5LL~A#|@jw5E76;#ozV%|Gr*Z{txOkLz25@tk-62 zHr5M|+oq^W?7`i%G^OyBecK<%;qO{!|Kzcpq}lmgr;jA;W0s$KS6|0d+OWY@>6@EnRHd}S-gTd`Gcf1rBOKE81u6AH>%ejs&_J4Q z4~j!k?1;{06G9vbbU-*^nQws9k=M84?5|F^TQn4c8u1GNbf}aY*pN~CQ}T7(iga$? zCBDisg%bugSMNA*C0J~c-hvkP0zeWJ=>edSAq?fRAcXL(o~5WcK*)`RTr;LK49q0|*KbAi`)UbzaTK zomYrCuaYetkC~iTNX0=YeW?MlJ(0!)JC(Jhr>K;2LU}rbVsR;*f}NfA*wAER U&kK1$0Y{IRxKa_IKk~tU01+S3^Z)<= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5bf598f119a7860cc7b59388a11b0b543073ce92 b/fuzz/corpora/client/5bf598f119a7860cc7b59388a11b0b543073ce92 new file mode 100644 index 0000000000000000000000000000000000000000..f9916a412085af22df9159034460a6fc83c6954a GIT binary patch literal 853 zcmWe*Hed*3VqoxPW{Cc9qBQBJz~7_tev3^mED{P-nHgR<`+(d{wfk9*q`%xzFdzUJ z*cljD|1&Z$GKeuVFr{%bFeNcC#WOI)7&I|O7&I{+T)@o4Xu!nD@Ec|jFB_*;n@8Js zUPeY%Rt5uCLv903Hs(+kHen`%P(xt@K@f+7hsz*8H&qv;Db-NXKprH>#Uo*mXOLQy zmujF8ZeWmZU|^sSU{I;xV_;w)C(aAA01VK$)Uu{=KC=56Ss9ocdl?KGJDD0AS#D^b zSZ4Ml>G$UgzH1}9U6=3u=)V7XM77dhlXcTo+omjNIIu;&Y+|~b;RS(~?MiY5$`gxD zyv(h%YAtWzKQdLU^r%;%&xvIF#h;SrX!%?JI(@J(Poq_1fx29(%sTeI=zLx0x7rgn z_N-UQUH4MliuK_B9Wv`ut)(Ll-CTEVReHxqCT8~E^@{@x{0wB-m_udxSj1RFx=RfV zPIDOW$)|4rWnf^iywsp|JvcCBm02VV#2T^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE{gdYF9v%~H!m*XT>R;ZCQX&Coc>GrQ%f$Qgz?3=EwA85tNEK!BTpaT^2UW(LL$ z22G4>44N247cet1GBGhS8St`kYPET^edlFl|0 z;S@2XCAlhnC|bwo2lm-_2G&D&`>)kLZqsv@5R)^WJ#FubNWs@%o}H6^l@wW^ zHm96H!)5~~0|P^RB@^?aQpUwn1`-CGY|Npu!YoV%3q(rprwlT6^8*%ci$@g5jcN0=XJGQzM-ko~QTHH^|WLnGu(@o}^ z&Rw%B)qnEx8}s6wF^}9`f60GOd6$?dxTrH#HR-=JE}kXtJHF-Ih9{51zyJJ3O&;IpX*QFUJiKf+*w3-hK}#O4gDZKkiqE_95`XfT K!^|Kc0ww^e@`7^! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5c0d1690fbca8608cd919bc700daced138d2e03f b/fuzz/corpora/client/5c0d1690fbca8608cd919bc700daced138d2e03f new file mode 100644 index 0000000000000000000000000000000000000000..708b9e1226f482dd2545dce7f300ff9520c5ad41 GIT binary patch literal 602 zcmWe*Hej%1Vqh?3X8yiDHRC}4uIp_VnOu5P=bWlEwc}f%>3Ht8XR6R6P4y`Z2ecU& zco~!#82&RdFfuTRGcbrTGc(@hW?;O@z<7;;@v=b^<9UN7#OpFFhoD4S&pn#K& zk-d$@Y-u1?S1zEY0Y?f2c4E9K_i*%ih3 z{Mz&tToOMIA6YCH_Nb=W6o%h>&o`sN_-XV}jK878<{dTVXYFT!Y?Oskh?SC}WWgttP^L)Pm{JxB z8)YR%(JXCEIf7V-gDl2&wJ0krV!N{2#N3;fDqtC0C-VQKsI2C z=-w3QF6d6^4o>KHPN--^w4(OlIewzo?J1vboPP8w<#K^_!4!Jjc0r#egFa@urOjY! za$HXai&*d$%y|#KQAj$2`Ptr2xrF7b_#~Wef7bUjLF^N{DDAtFm~NPQZq%SbIBY!I%89e zT)XWCx$?v)Sv6I*Ovn|JPMzCTEO2hSq~DoG_nAl5=JN1j>ujTsH(C_#*IL;^zgyb; zX@+TJed-}gW2Eo Slt7jUl%j}=BxL^iW4r=+dIIPG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5c3c45d31de4f8113fba84de3f53126b3c33fad6 b/fuzz/corpora/client/5c3c45d31de4f8113fba84de3f53126b3c33fad6 new file mode 100644 index 0000000000000000000000000000000000000000..91342bf4af5682799a8913362478546a18b929d4 GIT binary patch literal 2331 zcmeH{%Syvg5QgV+5=hc`A(FbOx9(j1UARziDfj|?4R`MCS@bOmih@tjg&-*SP%f2| zT22xIu~iq+ew&<`O#Ye7ACfERRESPg(E`yqQA&NH4<;t+66LD;mXN-XK9fGd>J(Nc zw<-*YXgXI+!{~T?Iet%>lYnqBNDzfOG{^)PWZ0es@w^@w9AbZ#-1SM%fjjPXQ=b7) z3m0h<`!xp`*Q9_j~G3m7wWLLVREz6xQJ_a zyKk<5o5q5>r17zz(s6Aw6F`|!_A)8FTw9o{23siwowMav-TMDnlJKvDYY5j83uC?% n$`gx-cp(@4M^K);@Ze%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07(SeDR;r9j~z10Gsr2J#?5 zE*=Tbypq(Sywnnf@XVC-%#vb-fRaiDpOO>)iDgDllK%UCzOXj3+jaTgkM8?9BdV45 zny#C!+BRiD!+|aGWfRlg3@-@0*sdg3pgghY#LL`DtJd!g{70sWl^*pf^f{4izxY$~ z94-G@zfK=4%+qMqSfDPKDzlFLYIMG?^IPo+8++EP&hnyLt?R*oDXYvP zVIbB3S0E2nPzqAO1JWk|=H!@hisK}jq%{J@1u%wRkp^kM*tH1Ob zeXS`>Kd*aH=Fs8xM=w`(#yl}u?J@C?{nT~Z?(HtafJ}LjwcD!{G24tBNL8u++)-r~1ls3$2->!rvky6{;)0`@>w$ zO&l?ihN%r|V$6&TEPM>$G{?}%!obi9PLuVzjNL01KAG5k&w_2*rH?g_7XH*1-;?s+ zc+aF2`{E)eKU!Ar`8k30(HY%K3OikweH7^pvsHTkxvVbh#HOFoi`9=vnQqj0>7c2z zBUa`?+{=UC&u@Grs1o$w;%ANQ-G8Tw=C!X#68SNMv0V36|17ghrH$?7H{5@wELmrM zPs&PkmA(il0vN@Z8JS;*Ffj1I!FwJako&N@M{>hiFV_#x%p7?RZW3E}+v4cCH-%Ei zWOMd)9RKxyS3Q&eB_(y9xPND>onw5R!}qpuGp8^xh~v#|2B6$#00mSD6DAlCf-%Sg zp)6u>jT9Qi#0V>gFaV@1VZ6q`cv+m`V+s>9<6UkB#+wWmzN`*nQ7ux5h7?-v)3&D? zau|q1N)~9KGBav$GcYns800Y+r0#!hz{$q0)#h=|w!ylA0ai*Ggc>wJEQPs&fq{V$ z!x>D95Ft}IFo(0~0Mwy&sB*ncozr8}G%5M_{b&E=BvOAJNZKdy{zbF%g~?y@Uf8z< zr(T?6T9P=!blL$O*}Gfg_H@03rbo7Qx8)J(@zSpU$LpE=e<`W+JS^ETE5v5WABU7* z|AdoXgx=3In)>tbk;QUhk7}AdZi`9DFfcGOOwsi|U!-&ptwe$)OcWr`#%y3pmG+@LDPW)Qvxx^i%+UR)VV0TmE`t9YnD_&l^#aMKq IcDHXj0K!ZfqyPW_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5cc8aa172ac8517befe6a103d0c6a319aa4bb2b7 b/fuzz/corpora/client/5cc8aa172ac8517befe6a103d0c6a319aa4bb2b7 new file mode 100644 index 0000000000000000000000000000000000000000..70224e70b720a4dba72d5e826d56369d040f62ed GIT binary patch literal 571 zcmWe*W@Zv*VqgelX8g~jl(??!Oi7W($ythK>^z)Bl59u&)nDZaIKEz5^zDwqKGV%! zS6n|&d6<0u%~FFz*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5EsMyGCY2 zO)yydvTRG&nlDao-nA5E{Ae-}U;n&|XUY4HZ#lQuhi>N!YCR)Zwes9%r6r0r;(RYA zRe$aaEBf{3`#jC&o9b!5wQZ=j z>NRU|KP}T~F$+vLnQuCG&8}4c$;)q=i+9F6a(DeD|2^ehVxr)p&Q#T;|BAgTCv^kX z9sRhGWgeUTLho~hMJin9Rg>nkiqGQ!M-_uYOG$T&!P)hz=1#e>zK@TAfkA|sk%5s> WjG2)^0u+!CWeg1GCb0U)>k1i8IoBX|F_ z1q}~m?@hWFw=Op1P0-2td*-rb{XR8|fk7?TP%ZzJT=EaDvSo{WII1}1gJt)#GiGjE z)CCC?9wr7h28cOZq2^3OGUqp2xW%ljxu=4xFC``vKWZyoWGgYl^1Yniv!DaQZ?>#k z$tI|*GCjuT%IxO-Yfj&-op5At!3>waIf}Cwq5gNb__bK-tAF&F0}BJ!$Mc@pvTBlY kWm~)lmuAAJ^RO`5%oTD&PK=qEfrXEOfkBL&nPC+R04Cjq6aWAK literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5cfbfd352aa59744e0b886359a9585ea535bbf48 b/fuzz/corpora/client/5cfbfd352aa59744e0b886359a9585ea535bbf48 new file mode 100644 index 0000000000000000000000000000000000000000..ead3df9724a5db9e898d5110c6a93ddd0ebb68fa GIT binary patch literal 53 ccmWe*HefJdVqnl>W;P%I7!K$&Fo0D70Ll#rUH||9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5cfdf4bbb1aa4fb4e48c735169c98d1e7fd198ae b/fuzz/corpora/client/5cfdf4bbb1aa4fb4e48c735169c98d1e7fd198ae new file mode 100644 index 0000000000000000000000000000000000000000..798f1a840c0807dbb59ee667e8e8b46c2d6592d9 GIT binary patch literal 144 zcmWe*Hej%1Vqh?3WS3sLb5Pv)xuDd!J!ZnnlFal4^Q=P|4rntl z@G__~F#Km?VEp}GoPj}%nVG?gn}I=#0VK?Az-hqF#QOjLf9C)Hx&QxX_`iSu{{04= Z1}seK3@aBmp_v?sFd3|sg{hH&0RUfcFQ@s^IQZ7_hPzM zwxlh7IO8folP*aSU`~CiBk|0>A(uxZu9ocfb@OnZ9A8h=2Jm zal2HlPS;iKw}?W$Y2A%6mOM9aJ~P6^iaZ1vA@SyGgMK(+KEO(v3UAJj+S{Z04|PH3$wtP`sLg5-g;}7b%1U1wms% zgAi0p&?HgN?o!a7Q4I|a#Z!WaLV`Toxxdc2muo3vUIH@;?0|TOJmCZMcL4!QL9X;d zE82A)u;T!!g8TaI?f1yLU`=GlgT^9hd0Gh9j znR8ZBwfghajhWpZu9L^3<)dnmSFz1Q(r)zaUJpmtN0=km3M_54E#H%AE>H4>9P=W# z8%#3EL_7OC?w&3l&sO;?Re}?zbDU+wP?<r)18RAeE?dWpjA&t6 p#h(lOUVli_sf6Iyg>`RXx8v7z8M0A}VW Hpcw!F&*5QM literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5d969e248b38152590f6a21e9308c70586fd03f3 b/fuzz/corpora/client/5d969e248b38152590f6a21e9308c70586fd03f3 new file mode 100644 index 0000000000000000000000000000000000000000..08bcc0118128cdd2f0ff0cc3a04d6f70612b1936 GIT binary patch literal 1336 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(ro_O= zvQ*K4myJ`a&7z zsAwP$67&+5@XRYoEjp1}q7a^$lAc*otPoIAso+zRVjw5ZYiMR*ZeVF(Vr*ex83pEA z7-&MdIIQ7-SyO^!O)8f}iEvS#XI^TktRR{-O^iy&9$;i;U~XdMXE11D3pIrpA1St($Xw>200Db6nK7GxWt{5XybyWjy!1UCD$FZiP?u`fC$>FNjHqk=4Y<(nhsGD5?qtHQ1_{}QY3@3kFGo74)F^SAB`l@SBc@Owmrv zI*$MPzpI|f|B{kA&%=@pvqEf^{BcP6^-nnIMdX%xC#Pj`!`C8mpiNFMe?b23rOO zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF)}f6GW_1)qqkaM zHje=>8>d#AX4`jOMn+av1_M_^ZUas>=1>+kVJ62=Ltz6!5XXv#D>y$lRX4aKu_V<{ z(Lf#~$i*Y!nOBlpl$Tnf5T2Qmo>@|?5KvO7;8T)fAScdiXkuVuWNc($YG7gzCC+PT zZeU_$1m)tehJ#dV8s|gY?*Vo{BP#=QV=se2V<%H%BZs8+iDf1lN&kI6UsxO2?YeyL zNB8}l5!Fh2jn_?AZJV;7;lLL8vWe+#1{VZcwkydMC{HXp@iMp4snGBNl3|F$^5z|TOIjX6}7k420{q`UO$n$sNn_~cW!{|eiev%K_H z>v~9FslYQdQ?J=(eHWJ0kv`P1 zPHFX*UZbxyh3V&YFUlM`-2Uk0zRs8@=Bqs>9tve)*LI($T9NHPOJGUS-}B#@cs6ix zEQxybw4_c@)-oaMq^z)Bl59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|Mg|5)1_sXmj0}tnAi&MQxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9NauX7ZoQO$cghB zni*Icnj4xL7?~JGiSrsEb1~F6&PO(pk(GhDv6sQ1v6HE>k!4@CYh*^$T9XMc%eHi_ z`Qr5ET}x5Mk0ukj_0PL_mb~xymUnx7=ytxK)-!@tE6;6KTB2AZ{_@47>d$>)MZeyB zpQqV;Q$6kXwj@`j4@K+v{M;@V1f7!$cRh5s|61+iHa&MiF*(!O)Ap{26ny>V**WP~ zNs$F=bIKXKY&O`>vCxUHWMcmQpK-C2frJ4k8*`|vFbk6bg8?^)$*YkSuHR6T4T1rZ)&l{~@HFwI5^?iH{3=AU7%nXc-V$9480wN3y SJkNECGxXihY|K2fS_c3R1j`Ko literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5e481dbaeefbe42f74a9f5dabb777497bc2090c7 b/fuzz/corpora/client/5e481dbaeefbe42f74a9f5dabb777497bc2090c7 new file mode 100644 index 0000000000000000000000000000000000000000..896828a6b803d6d3ea7420a65df56afbf1ac9b8a GIT binary patch literal 859 zcmWe*W@b=jV_@K8W?>Lx;9$^UU}0cl00Sll1uJQ5CkwkS0Xx;Ij*71{$s%i*ekUUo}@q6To&&bEvNQQOh0Ox2|EA) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5e9cfe4dfd530063c07e2efcd164e98b0cbaab8e b/fuzz/corpora/client/5e9cfe4dfd530063c07e2efcd164e98b0cbaab8e new file mode 100644 index 0000000000000000000000000000000000000000..096de9d95bbc6319e27ac25a6d794e72b902260f GIT binary patch literal 844 zcmWe*Hej%1Vqh?3W;P%I7#M6B7er&gOs+jm|@Mpjk^16MYW;3>rI`8XFmIXrEYS^d#xO@8=6^BfDLf@BQe$pEIIbX|L(J z>8fp07Bn2#B40K!-OccVK+AR|xdP>hMJHb7R$8@|H}D^sDpq>btI+2}vi;&u$#b;) zXZ<>TurN=fNMnJzT&m1E_N&qPy3TL4Cv5Cluadj&rMMOA!TmdA3{tJ7BM#kMcWqUA z$44e+Mh3>k0S0~svTV$uvV1IJEF#^dR}D@Z81TubZvSOqV6eQ@pmjYsFlCilBn-qF yuq)sJ=@({UHDG3BG(h$+FUZ4<3@9Nz06>hHnSq6m0i5O-rm`?FOdJ45;0FMIg~t2< literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5ee2b0150e4aae4bbcba314d9d052f90f8916eec b/fuzz/corpora/client/5ee2b0150e4aae4bbcba314d9d052f90f8916eec new file mode 100644 index 0000000000000000000000000000000000000000..ca99b80fc216ef9e6a7e20b1de41541c3909dc7d GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!!(qlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)WpaL@)a^* zLgowz`2YX^f8s5MxK|TJLn*e@kW}j29)m~?&^XrJ$;52?@9*NqQlJ-fwf6?qb zp@1vzg?(E}>cu&xC5bakrybCdy}LDTPuI&2&&(Wo4sH@#ciZCVxi^JU$7FN%bsYco ze^)(||0N}Lo`)qHW`)=+`QwoC>z{Dai_rU-MpLI8nz|`)x8HMaHot9_8{S#&3HJT3 zzj&)h9DBgFF5}tKzrzK#Ejpp@^Hcvr=Iiwrj=ojyNuM7e#>~vX!p8v0(~PA%0Ds6I Ai2wiq literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5efd73d9112526d6a83f9a10974a177359415a0c b/fuzz/corpora/client/5efd73d9112526d6a83f9a10974a177359415a0c new file mode 100644 index 0000000000000000000000000000000000000000..33f221c47efedca5cb36c48295f9a3167011b513 GIT binary patch literal 875 zcmWe*W?%?pVqoxPW{Cc9qBQBJz~7_tev3`6EfNY;nHgRT4n3>@J zcKeLbkSmWvpZtG(aN>gh|ND!seej%@?Xp>V-_$||b_NF4|BMWb3}Va-OljN#UtUFSCU$kms+9_o|%%KSyHSJ zP*SPjQ<7pJC(dhVVqjrnW@2byU||p?&TD9HU}9usWMFDwVh}|wYZ~VxyPuJjfw{4l z!Jx5|sj-pehW3eNW>1oSf4<Q@8&L+n2Mv^j7P7aA3+Rvq%_-HDFi31JWk|=H!@hisK}jq%{J@1u%wRkp^kM*tH1ObeXS`>Kd*aH=Fs8xM=$qv#yl}u?J@C? z{nT~Z?(HtafMK`|K)>haurJ zRuxUGV5yVuPxY1O7Fsh$g}+5aDpXf~_lLQhn>b=3jZz!b#F!ZvSojzi7(|#E7#JBr z+y(|X*l_*EHrv&`u}33(eoZGGS=BO?CT jjaT$FNQ=d)`3W~3IqbhZMeyLs?v33l8;p97?X(2|xK}<` literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5f103ecee080798186fa162c1df1ffc4d0c17c22 b/fuzz/corpora/client/5f103ecee080798186fa162c1df1ffc4d0c17c22 new file mode 100644 index 0000000000000000000000000000000000000000..131ed7efbf93ce4372d56b758e32013ed83ab8a6 GIT binary patch literal 923 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>~|(tI_$o&Tq9RZ0uRDGC5G}#nE4Ojyq)5rCLiz9J;yg z+N$)9k4(&r42+8d4Ezja*_cCR`B=nQM7m3_t~t%Ik54{z`>(KlIm=6LwXO#TrmQlH zgn?KCb_F~j{lYA)2F#3%|B*e+3i5CxgY}Dw+^N@Wv%U*U>PR2zSf{l5ORv$_vcmN9 zx))^*9d3X0a$jf66O+{*6A#%>U8n6nPqiZ3f0n?KqQB?AGx2QT;#d;(;Au&npsZy= z)=Bxy&w9yfcjmp%uHt$a96n=J(ZmXtI{E%oUwLk!HFH$>TSTNnb>(+|n9I3|BPP-~ zwLwjcnUR5oj{%(K7&=)P7+S$;vR;?5`^Ca16T9#Ihk~E_;(Jp58}FI0Vjo%}jEkK7 z2%>0Nz31ly)<1_2XQYC yem}qQk)TS@e~X_rvUmTTDw@~6B1z=O494L$eAM5^z)Bl59u&)nDZaIKEz5^zDwqKGV%! zS6n|&d6<0u%~FFz*XT>R;ZCQXNobtpnceb~k%57ofr0ZsBLgD?2yinnZew8F%)q$8 zpowvfK@+3s0%j&gCMHHE170>xtu~Lg@4SqR+^h@+e1<#*Tx`tYdzgipi;5EsMyGCY2 zO)yydvTRG&nlDao-nA5E{Ae-}U;n&|XUY4HZ#lQuhi>N!YCR)Zwes9%r6r0r;(RYA zRe$aaEBf{3`#jC&o9b!5w?}1u`iSExT=utk*`IJZthjH{sm`Inj=-E`@ie zUb7bW(=weFv%qwd`KEK%>`L{Yy!^(zcxTKbch_I?-&5WtCJHX;y!@MMMR#03iw3KwW7@S?dYVMR9>-+c^7#KvD85tNE Q#h4ixI6wgjj!^~%0HwOYqyPW_ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5f5fc6b831506622633923b879bb6ace522fc572 b/fuzz/corpora/client/5f5fc6b831506622633923b879bb6ace522fc572 new file mode 100644 index 0000000000000000000000000000000000000000..5bff6c9419e622b588fffa1e952dd871bd47682a GIT binary patch literal 1471 zcmeH_ze_?<6vxlK=RNWH3qpCin3e<~1YZY-+M|dl7r`M2l9w$RITX_36B5E2f?Qe> z+!}1@56CD8oQwK1nt~dN_u`R-&?30_neI9Fe9!rw%hee)D~Zy~_y-~nk)IMopMnHY zm`G=qn_iL|B-crF9T9$=YJ=%`b$i66RB0XfDnwuAoFV6~veo zxP2b%Y#TF{$Vg2fW+gqo2#PRDMFVjF1px63%JF3Y<6*xuz~)als4?b6uYaKun*4EPLr47k{sLs^)GnGFmQ4dldm zQ7lE{VyJJNk8C0%D+6<5FM~m2CsSi1!Q5^{88ST*hE@8rivBE)XjYzh8SeayJ`;G2CVD<^wq-R_TD tI76rt>C6KnD2ox#Uf?^Rtpdf^lMK&QQsR|Mn5ur#G z@c~*}sEQy6$|^(_sZ^~fE`8JmRU zzW@LJFEkVZ<~RV@C{kZJq!#wrx0=2xp=`r~25R~vbJ^A^vhSP~jbJ=v0FVbd0EiHP z0H6W@4MlLD$^o1o!1(~27Zl*!p#W(-jN%X+js!+eI(ih%&80wjB5855L-LS3f)EG* z+L_2f5)pO96R9{GR}(5!#0IhyvP*awU25duKt(*ca% zg^P~|28OLiSP%R}PS3BLSijruX#IfwS(5u!?Rs`e_QK?Shj%ob*4&&K@PWydxjj|d z^a!2I$kyIazD3f|4ux}BwCI)(H#xR)tn#06@)obo8M)ZFDNH{}|F9mNtA1SOhG#g_ z_KD%1vb0j&y=!PaEhEcqs?|%lOV!+)I!bOH4@eonp$I_oo#85|K}20O=HO{~rQOjt ziZ99v=V)@PM%D>Kjz<5OR4U#~4IR8Hr0tk_0tLICiYGu6K}3^Zn1H=-JXqQj6Pk6? zGI)qOe~DUCN{M#Si*(lDwoL(T%&Y26%{#k#g}b~Sm=!r>Hd$qr7}_6N7_)J8&fJ2? zf42?cC@0CX1s+`wd9jKbW*dUP(+qlU#94IvP~XPS$oE~`4jhlnjKRlhW^kP}<>nRV z=_({DFA~;MVeC&wRae z3)p4)z19Xxsy|V`=iS>l)K=D|sQa<#z2R+3@4UJYd1&V`Kc$xkkS)iJm9QTGp`i#3 zOhUb6K_Y1}ic08(=0>C$7Vrjp@|Z(cAuLsAim#7Siqwy%d&$!_8hqO5pZQA7rPAK<$UgSyUgzswdI z)8+T2I^M|MSXD@u|6ue^VIlqC?OG4y(ar2*WYyv3bNTdjUE2~IZqXK~4{F2?>|=h^ z7OCAhjiyD3?Zrh|{n8`|0GK-^2?|!xVq{$1d>$-H7hIjfU&)nICs2qe02BNr5fKM6 zUWyO|rv;uJW_z!(c&9mrpZiqLIqCBVA}`CW-GB#P2$gq!a!v-v*hc3o1#2brf5r>s z`zZY*C-C&Z#Y4*8-I}bAeZ8ZT05GMXpjcCp^@c6B!a^9L42CM{+s7 zMx4kHxC%>W47@$GgSJGxs|EwWrO=!xYe+;01Q{GcV+Qhg5m6S#I01ryTDcz+=g&iI zqPH1Y*4KLqU4Dx6G5aDlI;GaHCe`#lIkeem>r1=hvOQk(oQ?s{?=O1c$Kp3>r z_Eg>c(edZFdiRXS*)h<=uW)MDe9SzT(z_M`mZ0B7Bc-RW7)Iz8XA238+XvM&uEfNA zRVen-eUizx-Z%HUP7vCNQZp2~4W$N@<>&CNKpgP*JH}O*Vd!l=bg-1yR2Z$+JEE~)vw33 zGl-S7uPLi?&6!n?%~7*FaDYJT51T%OfiJ8 zdd-|}2+f`!XQ))!^`hWF;ZBc6a=N4=;77J^J$9+>&Id=apTAE_GUEj8Q za`@ZU**|z#ku*A=>hzI>eT?!GZ))s#ibkeo&gllv5CNTFjMzd|o#@`C_@WY@@vG})RK>Ky-nAdIGBE4uJsi^YDJk__>wuLDXdu1r4bLPlr&fDy37fv(sK1Vm{$`6!L-s4j(dcr6NFo-ve?bv3J+TA9WD^6syHYI0Hm)0^i!HzxO*BR3N;oBd;5lHi!6wWK YMT&hUL;%gzzLnveX#KVgW9|KGFB88%&Hw-a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/5fd8705410507c8bc7507f4a71117c1e95827f45 b/fuzz/corpora/client/5fd8705410507c8bc7507f4a71117c1e95827f45 new file mode 100644 index 0000000000000000000000000000000000000000..91cd3ff54a7d7e400c6ccc7a022271ae7504e5a2 GIT binary patch literal 544 zcmWe*Hej%1Vqh?3W;P%I7!D{iFz_-cGcf#TWME`q5NBWzV`gT&%gw-elY#LX1LI|b zCdTsyO^js=n3)(2m^g334di5Fhp`(B8yFZ28w@zvKo$x!8K7}_5i-AUGp~ZRqAQ@5 YD4LVtT!{JTE~Lm-0|qdFh0dS@0Dzrl2LJ#7 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/600549b4cb0d53314e63a9b2b0f94767c82f3f00 b/fuzz/corpora/client/600549b4cb0d53314e63a9b2b0f94767c82f3f00 new file mode 100644 index 0000000000000000000000000000000000000000..212487980eab4a0974c4ebfd2c116c4f5baef219 GIT binary patch literal 667 zcmcIh!Ab&A6us}hY1GldVnSO)O^8HBaNfXZ1}zH0gcd=#$ZZTMgn~>#&?1KL2l|0N zr7x&O5V&aBFVxa_>R1RZT6B1ud)|HboOe%7f~rj9O9>i5CJ3|G&;&hh64_KB8VV9b zd7_+@;w?>LK;o6e3nKB1NL)Qg7T^>O;yEcZQR*K)?d}L1s5DZhY#4^aXeb8@x=3a$ z0Kt}i5U4e*YSPLq>9U6aF51w?JqFw(04sT0_f}B#eN|SzF4to@;9JK0tBm_o<`mAv zItw#7`h%p!!alQLPL3Bwlw~63dE(M=g81fF#Et)su>&UK4v}$-NVar3%t_VyxGCOe z-(j1nQvb03X$z5_Bh=%7OotmMaX^-1)wdS&QuWv9guXEr(_uPIzi~}U52f0 luN_{yHBX16e5Jf?Rq^3@&AhG3P+obQ)68y~Q=&C;KwsIf%7Fj? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6073423c01a2dd0fca0bfbb909f6bd77bc2566b4 b/fuzz/corpora/client/6073423c01a2dd0fca0bfbb909f6bd77bc2566b4 new file mode 100644 index 0000000000000000000000000000000000000000..048526b28a8c1c8d005358d6de831606cab87f98 GIT binary patch literal 1077 zcmd6kJqp4=5QX3DZUT~o_=gsfpsm%*Exdqu7(v(+f`w;L@C<^2g}v7iER`4`Dgi-| z_^NsA?9SWyI+}(Gm}tch>VG)ru?2)zfdC$q5XcHWgPuYTOl8MZ25YT^O31*i4dQSh5b1>fcIiWPBeS-7KlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB#HfVq0Y+8^<|amd27@L> zE~X|%M#lee@B+m82j{|pHJpVFyhjy;>d(Xp7{~_dr0ImY3!=+EUQwlve~s1uw-b#V zrU+cwr=*p9&q-T%Clj-J{qDt$%MBWr7|60QhsyG?h_Q(LoV_&vY{%7v!tIw7Tz=V3 z=M!c5WKar{mS)K_$Z5c)!1L3>CGMm|8y7Tnv@CG;s>RlOGQobEv2= z3#$P$BjbPMxa0=MB_o5~$>#M!Oxwh!o?@?^!1&$y*{R)?@(cdxO6-eHNxJ&M_vjlI zz4FZwa~Yul*i~UynSY7Z_xIY4rcG)E%K2OOd0bKd^yjeeuKn?~tF7W|fAD)mgtQ1( z{ArzBy-fM-GF7g(sdG{e*A^%LmXKt8D3SW>K+-;m_b-~AFHQcM_rks{IQ8Nj>ypG7 zrqd4S$ll!=x2NmnhiB%FJO?+4t-Eb;^xT_5sbjJ^`#O&Q`oF85$^Vj)I?uzB4YNW7 zmi%!@`SnjY=|$-MOrxn&4o%$_xZ6+i%g=S&EH}Kf+!E~jUw`pdk2vXVv)Q|h1Ad1K zY+H0f-RGzNht${WFC2ZV+><^(K#ZB0QHO_tQG=O5RzX)L^TOvtw(f5x#Qu75e$($D crzxz{t@+C0Zq?oWX79qm!3GP45epa<0ab&ID*ylh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/607462bf13e38b256dc7daf81187b71350e13d71 b/fuzz/corpora/client/607462bf13e38b256dc7daf81187b71350e13d71 new file mode 100644 index 0000000000000000000000000000000000000000..1a0f1786b48558fab95af8ad4cde7612bd6ab2c2 GIT binary patch literal 544 zcmd6hI|{;J5QJyBXBwcJKg@uKUAb0@_uaiPNgoQ`(1S$wZ3eOVp5i~*2 z(hnAPhTWa@4KY?=WDLK6-4JjQ0l7ec0Pu~Giv!6ZXUK`E9GD8XMulo4D=ykry=Z5N zL)$Wo8a>VP#AD|!TFqjBOa|;f%Q<0?@@;xRzZXTN-VnVW1T+*}Z@oK)G ds924AW8g(oRZ(5zNm~KERU8)950w7@SFYb-R!IN= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6080ce84f71a01f19b825e6842d07939896d3fc9 b/fuzz/corpora/client/6080ce84f71a01f19b825e6842d07939896d3fc9 new file mode 100644 index 0000000000000000000000000000000000000000..a1f2cf55b6a53026b1670a80e1c12438fbc093b7 GIT binary patch literal 540 zcmWe*W@Zv+VqgemW@dYOH2AgM44N247cet1GBGhS8St`kYPET^edlFl0R3x9mvc91h}(aBYNcbs)~yc|Adg^7@D z_?I}7Y3okk{k)6eTx+<6x`ex8YwXQgETs$2*)-d8PJX2Nc`?)J`5rA1J^^X5iAw7i z-9J1h;R4w23=H!mK1IH=nrOwu%)r33Sjs@cfRl|mR92XU$$-It8^q*iVPR%sU4ZO# zZjjR(8NB{U9|-7;uGE;u=6SQOd?J5dyz?6FfNlDp7}p-x;ZDDm#>l=mwe`%BryrKJ z+zdH0+uhK|j+O6~d%E0j=4o4>G!*yzl?$&`_xO6y6^qMH&G_-1 sqb&N;X8mLfyWgAtNOB1^J52jvcyo4&%n^a^V~hT*E3WJ0V_;wa055UACjbBd literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/608148368caa52c023cbe7c4ed173426063f788c b/fuzz/corpora/client/608148368caa52c023cbe7c4ed173426063f788c new file mode 100644 index 0000000000000000000000000000000000000000..4bcb290088f7c92078cc5546625e420eda421f51 GIT binary patch literal 546 zcmWe*W@Zv*VqgelW?*1al3!PLrmRT$?>aX$y98WJ@|Lu;#KGV%! zS6n|&d6<0u%~H!m*XT>R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(5a4ED+{VDTnSpVG zK@;N|gC<7N1oNb-CiHMoiC{Mj9}HubDNcxDAtI-d@-r|b6;4| zuQ%W4X*SQZ=j z>NRU|KP{7KF$+vLnQuCG&8}4c$;)rTi+9F6a(DeD|2^ehVxr)p&Q#T;|Ej$zCv^jY ztoVFc=CRo?^gcJKNagc+)uj2X;`6S&JXp0xyl_`bNlEp2*lwA8~6SWTd?l{7Xt(Te?|sIhF@F^OpFX5z|Fu| z!oXO_z?f&y#F%B!_-O$%6C)E7BZmPO8;4e#$2nUTW+nq+LqP+6Hs(+kW?_!h zV+#`lIdNV?GXqN_V?#qDOKamOab6=h*Vs4;yQVS&0XBB9xlD{~tlEt%4D!rL3@j&R z1-F~B2CeuYwo$vReWLA`oY@D0C-U4oHfJ7Vvu)gs{f<94CMK1v)3n=psiZqHck1ob zt=ATp$L?8C@@vNyg}X1-pA3I+?nQ-*x`@%y|D76^Wxf$hy#%%QCGy6y-cheuEM*{J zz{$oODl5#wWWZp+4Px@MurM>RHz50zIi0~Eg~`C%o=>QFk&xbM$+OE3ERcEiDNDQ{ zIP&quCueUO^-eh3@i={x;jN^)IoB7YvK}vNKg(pmaR3tRf(#4{pkV*<3m)wM85tP3 N4)Bv7>}PKp0RYH1soVen literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/609f244309f2e43c5875fecee65f0a30d8b526d5 b/fuzz/corpora/client/609f244309f2e43c5875fecee65f0a30d8b526d5 new file mode 100644 index 0000000000000000000000000000000000000000..8869aa12741c986bbbb6461b35f98c1d5ee5a4fd GIT binary patch literal 544 zcmbV}J4*vW6ov0&v#)FrSx78=tV9qM;VigH6q|?`M8swbYe^wuV__vI5$r4^ognxJ z{0~+(f>8t^g7{M+6OAz<3Vuv;?#$eC=S*HfB_T>wL2c9_d}qQG=z5AMM@6C*6B8AP z@~ZrjC2kTw5kI2F4b*u5QiUNNH9LJg+nGG6+%3*Cmg6iuTT{yl1!)|j-v~GG0aT~W zg=##C5mWSo0VDTNMTBjb6>R{~8fGwD$eFWqC?!ce8z)ANckFZ)AShT+hQv&A_L%2L!gJXa8gEu)kBf{bU>YHm^Sr4Hide2CoM{AN6S752Z5ELk1Y)CMqPDo^ zqP)9Uu`9AAo^4kTwPK9bt;n@*xx}nE9aT=H&RnE4nDZ3}i;LC;#sg!4(ZB?=?2*c& zb(VcBjioUbY&S7f5OMaOn735-7e@J^6Jt2%R?azxk`0WF3PDUgixNVUuH{W-U?hYj zH&RF-=YZp$k#1}S@vx!{U4uxTJ31UAP@`SH8brCmI0tF$YEXpDTB~?MfA|i-X z5g(wng{la$DXS1!q*Aq_xb#sMlu-m*1ymlgJo6?Yp`gYRM%p8rfH_uM%*=bn@A zJOB58hlU}*0tLVvL+UGs)IuNoR?}C;m#v@MKuLRKA=_F-@>N*c2*yJO0C}JTfDi!) z04e~`Fa-TV4xoMj^#Q0C zsT?E{FjpLbg4(*8QlOHkAxkE?goSX7T)4hmj;R*Z6x}3|RhNgdIT4{8F2gOzKOl%3 z$#CZK7>-AN5g5&%^3lom|mIHQ>9H0 z*U5-z?G52sCJyaTJeNs}YWZ}NV=LP_?-@IH!K&<$i;bH?^%M1v=+QaqCuDATh8fvC zG2C00TB5seHLa&*WQlFHdNF5_ntM}6@y!zf$pa{c03^>Du7nx{%vD1HN5fHfN8Kp8 zC@WCVK~f^>bp0cri6}aH^2DWBLwc(eo4>9%2Y0oIGK?Xu@$|QBQP8=1r^M zAhE>_K@+1D; zHiVK(NwWDKT@Sf2N*b*7!9QpQJvV00zkRrG!k^PMUJFi*j`p z6R2}tjWo~nA0n2^daYw}cFdoNT z%k+C~3>H>@u71zEw{fVgtV>DvGvPga#&| zUNRtoxB$Z>^ult&Qww3M;hWFP7o^7vCpPYb z<2$#3bd?bRKrR5_+9|sU2z>gx0RWgpqqhfRb#*ntt|Et8%?=AOVMlC?G>PP}qarwL zUt@N}Mz~V6-7#?Xa2d2C;9NBr04{p;KUrmbHeNsrX@z$5iiputS(X%@q%%R2R-JNr|PQg&TKF+u@t# z`S#Q13Rj#gWjX;$QJuiaYXX!{1QnIqH6FO{v}Tr1a(IA=wvZ)1#FxxQD`}Y*WVY`` zhU~g8oZ)F688cE9c>4R@=yz&S!WnNl<$kCr!Xn!F{6d42=p`n+cD&Q*$z*={{BWJH z3W39Qy=P<1PPJ!!wijCZY=5cf;Jzk-5bA1n*A81&pai_w&E~U4>`vY5YV>zw()<-Ruf88|q zdyS2P446u%zV&LC#y{-(^z)n`^dk|V6Fv?zUQ zaoWX6Xp&dq;4R}^nPQfsHtII3^4nHD$6=HHpkGR^v^>#C4fxubhJkVYM#X?wF#*tU zEvv1_rXyAl>BkdbGk!4Dq>^UTOA6r{R30#EhdX8mZ9jMS+(=#oz|T#cS5LliVx9*Jd9GKlEtkl4jnFCCv=# zW7?9YLMMm%TR}849w8smo~+zOr3xQW1dxxA#A)ocKwoRW`}qGWjwZ+|El1AyY%gT` zYzJUkvc|CAAnV?6l8CJS?~JVFlgV25C&`LQiY+}1Wa0qG5D7SdL{-lie_SC=Dv-oT ztA5vbd#@M&QoZ=!kgsK?7)I~&_5XUl-cxdbIH*$kPV=?p-<_{nOs1$*9=BC7<(LDz zXsJqJ%lfw6lf&J%$@`WzEN3StxR4B}+OU)48&c zfAs6cr-gkoVS?IODS+O(nR#F`gyg945mHg%;S JK!4LWTkcd~D32EC#~t5QPc`a^k!wdeFG& zdR{0P7#Ktv2(z(+O=V()8qdtg&g{g%a$3=NmYk9l1KZwz0pYEee}1rWuh2X*&v;7! z+u;`h#b3`}3%y}~BlwS(S}o_KdpbM%b{*#TsPUNgSmI9%*T35ai%kuT4fxogt}|d^ z2Dwd`jX6|Sm4!!x3(2KCY#=#CMgtZm0|SEwHV&8^ljHw-7#kTdkOG*Q8K8OrxEfUX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/60e32d5b52d1df4d91c76669255a0395ebb4450b b/fuzz/corpora/client/60e32d5b52d1df4d91c76669255a0395ebb4450b new file mode 100644 index 00000000..e69de29b diff --git a/fuzz/corpora/client/60e8f09184cbc607c12d0527215fdf8b99d2d03c b/fuzz/corpora/client/60e8f09184cbc607c12d0527215fdf8b99d2d03c new file mode 100644 index 0000000000000000000000000000000000000000..819fb42a613a0bddc02f900b094e49bd96e38b47 GIT binary patch literal 2101 zcmeH{Jx;?w5QXPwy>|SQA1r|o1f@i&o(oDSQl+IxL5@Jh4Uo5R#SLhXI0!f39Nd5g zWMms5nG|lKAR>R=(`x3;>}ubkB7hKGtD=Kh$2sVhXizdSRYYV@$sUtg!x_No%aaO2 z7)b13UM!3EggNpElWc^<>dGLt-yUa2Nz3h*#4w8y)+K2@x6=ijTv&fzEMG5$;pANI z%Can5ZFa-`ZfttCgF5zTJFWgV&r_Trwz`_8#%orIDm5~uR_$-AdH(0OM!be&ApdN# zWxVkKp$+OtFe*66#uzrC;p6cEz^pT9erm$h2k=&f;0@9yXs(122nmS*x?quyjRAUk G_Khz{ZiUVO literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6107fb2e4cd364b9ed12afc9b97dce0afbed7ce9 b/fuzz/corpora/client/6107fb2e4cd364b9ed12afc9b97dce0afbed7ce9 new file mode 100644 index 0000000000000000000000000000000000000000..0f5ee651a0857d7ad461a44e63b9b1e3eeaf027a GIT binary patch literal 3208 zcmWe*W@fNtVqh?3WX%xC#Pj`!`C8mpiNFMe?b22%zG zUIt|bhX0HVj0_Co3=Cq-%uH$A3`|K3Oz{j%F$PUc5e7|+2Ny6iF&Z#&GW<4x0$w&w ztu~Lg@4SqRtgH+Mu7=zOoNUYn1_r`R1_p-027+wNp)3YGTrl+p28N0T@(@7@gdhYc z7#M)Dft)xmiX0l3I@Y8ZG|oqMKO-vxb7L=qL1QOVV2?Gww4o+SPE{d{3{+jpyY8j9HS59sJ7m_S zT1!V9y1DM!s`QSJOw5c7Ul#`$_!-EuF^9_Xv52vVpo9qwfC5uinMJ}ttO2_M9*_cI z7Sf9Y`R?%*?>T#{f=q3{zPc7$$;T!_YmDZbAbh%*+goj0Vii zoCd-u389UMgy4mm5aL;VwtW42KlJ@GdG<56-?x|BRm>^cxRq;t>GFp&j#j^wf6eyD z?7^W^IVTn#l@QQe+_>DJaS2i)n6Y))%h_&qKNcD&7G5^UGcb5;aLk|-k_hq)a>NW& znH1)txgQ-cF)|#J(d61%)$rzph|Q)(CPRjg@eB+<{{R2aKqO$dOUvE&d3F8ElP2Y9 z*Vt(7D`o>&VfIpdrDw$1MKyaXG@Zi(PrI{l2}^k9m82HsrIsj!XQl`loSST7$@|?5KvO7;8T(UDisY)3`~rSjSNf;ObnvLc@51COpJ`6Tv(|{sWsS3 z#r2SK#E^y6fSHl;KbjXo<%so*irlH!Y_q-#OX^4;>R6|=`b)3T*P6og^ST#h4jpcP z^m1Qk%oCH<9up7QPhF?&K2NnG+kck8lA^!ozccY{;Nn;k_2_9youI5`Le@$7%+Gqs zYIo+n&#vNn7!p2XRnf!>mOA6y8>8UK9~|GE%M-;k}q)#uNO*(C?!>F7A@o#xIgdsRLL*tzMV|!EewJi zrB>R<2`8v8pS7vnc4EEUz3O!n``nlua&Fz7IK^I&@xzL!tMdz2`5v|9edm7jP)Agq d>c;zNe9qT2K@|xj6PRQGlLn(CEkmI2G5~5(kC6ZX literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/61085b2e7d58fa41c886db5ac50f4a527b09dd0e b/fuzz/corpora/client/61085b2e7d58fa41c886db5ac50f4a527b09dd0e new file mode 100644 index 0000000000000000000000000000000000000000..f381838858d493a9a82a59adaa95a327a89f0cf2 GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)Wpch2=dl& z09Ig6Xo1L5aB65;yz<(tp7ngt)R2Ul8lZ8kyOW8TLHY0E#^nZ$OAKV$m_udxSj1RF ze$HN+f41XlLgDsH3NF8Fr}K%jd@?9yW7d*YX2~uu_s9-F%4U-Mqrx22?BoMT#&IKy<>0Ug=9TjTb0z5MXZ%#r8dCb4z5EsmahQz&&z zHfLYQ@n8RU)ie2DQc~x6Sh8VOh|Q8e4k^F>2`9Y>y`O0`b;_Zsn*w+HJ?Ccg+h!Tc zqPi#8_rLz)tsZgg0o%HaXG{MM7udGwgu2g9{STS1*IzjLR=FpAet;M=GXo1B11L{3 HmhJ!my>%EB literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/614cf57cc1de9191ab4b72b41a9692b3593b7eef b/fuzz/corpora/client/614cf57cc1de9191ab4b72b41a9692b3593b7eef new file mode 100644 index 0000000000000000000000000000000000000000..47f19d059033834f61b3fa1b3ecb49f532f8e778 GIT binary patch literal 3197 zcmeHJdrVVj6#u?^Z(HaCAI0*ng$9v_^t+XUDB#dRDKdp&B_iq&E3E=$X8l9jp84*xpB8mhbOhBTd4xPrKfC_A|v?!@Y|5)N&miYa3&-b01^E>Bv z&M!xR<6tHRzziH;;47bLb+a)2NnLf%yh#;8pC=*ByDD{TC;v7bS9snDfLH+d!w^6K zEC2ul01R*d27v&_xuzVzWdJS)h)swlHX<5V7vLDgFcVV!BF%Bnmtu{7JB~m2Bkd8>Kzr^{rqnDIQm!P6V{;Mgq zR;Qs-MRF+;TJT62NlK@YUNR(=Mq2PlPee*Rk>Nxl^?O5^aM`n?<1{O@x&%!$DM04> zP%JL*EA8q8Dq52uTA)!SkK*DQt=8JdZtbn`Yg{hj zHPpToac%H+C%?cpddyIU|K=}_)eP+{Eh_$g{_f6Z>VmN7il1~IaXPlSb77&)`d0OX z^6uS-i;%!?>B?4?d2<$H|FkcC})bzulIB{$*KaLJYsd+skyXBymh*8 zS2{LOmFfQ7-l)FNvCq4G_uV+|Y}Mnvfz({8De;`YrJ&A5c`ZA_FE2Cyo?Ny4p)`MX zWBrNkCCaWOvkb|}#ryBpH)^>0N|`GjclQh{QkI zk3#%FK5@nk$1yY<1fCJ14a^6+5b@^#rzX+}AFFWev`|y}}qi z4=Y|hoR!US9GA1WujcW!Zm-nBI=sI}*cx5pawv0ryR(FRx?^Mcy@IIwc-|f|=S%Tm za8RfBU7k&)VnzJADTA5=z-?JtM^xjpkOEm_gy(q0*r|RSx|B!zie8yLY7G0++HuH# zht|6ORbqd4=gG+@es5LuFA>@uD?e78-F++DtytrAJHIry!>{JAy-x)=4!kh{WH{b; zV~bVFqHkr&(uH4NzSkwcoc8MO*)7A!ca8VsMC*Zx_b0TZZ|zwkit?%EWJNz zC*5q++Z*5SFfs}R1K|)38&w$(0w@5p2hR&+OTwmmo}*LuJ#`A*yepAO}< T3XK0>75KxuJ6@pv6ubN1w7l1= literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/615692dd7670c91361b426507fb5975192309ce8 b/fuzz/corpora/client/615692dd7670c91361b426507fb5975192309ce8 new file mode 100644 index 0000000000000000000000000000000000000000..c2e01d17c14fa35a28252bb6e048e59b438f25fd GIT binary patch literal 539 zcmWe*W@Zv*VqgelW@Kbil3!PLrmRT$aR`R;ZCQX&Coc>GrQ#}BLf3F0|V!OMg~R(1~CQ(ZU)9}42+u@ z7&jO+F|ILaViaA#%*4pV#K>g8%f_kI=F#?@mywa1mBE0|kjH?FjrlqYvoLc}aiW2o zIIp3Zfu*6jp{aq9iD8sDuO~7Wraly`KDOAPaXzw%jI0dIjlB#8jh#%5jV$|8{X%_w z)|yOsS+=EX%@?OPV1ARS-1_HTJWJkpe9ODNK6E=@Q0p1Ns+H$9D=ks1c{xe^S@q|> zu%cgYzR%NazNwz}ds~vL5(85&pP$?1f}nG9;jV}7_Ft=g+@|L)C?=;dn~ebi&Pl&Y zinJ*&U{IUmwZVRlg-(1W6Z7|NjEkiVBn&v&m_ucSS(pqM47fo|eijyHCe{VWPUiwS zy^*2gXM@Q{`F*FZG%k=yiD=nvV`SYMaq_Im_gp#a2`Qo-TU`q8PQ7L=?x$rkEoOn~ zCi6|_uGy99KY96$dGXGeN4s5r$$w9ImpK3ZqRvzm-T$hpNxdfnf~@#_S?00XFZ4cF tSfuj#ykgRPR`GdPULLGkBW}B^rKF_#yve#%bEn)`-^a(mz#ziR3;>ckyS@Mb literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/618a704e234ee6d8a576908cd9c78f8327df3938 b/fuzz/corpora/client/618a704e234ee6d8a576908cd9c78f8327df3938 new file mode 100644 index 0000000000000000000000000000000000000000..9c15837ba702408c8f7ac17bee49730fde8ac0f8 GIT binary patch literal 545 zcmb7=%}WAN6vgj*cN`rZp=oN2!W?N47TFmhD9{ig5{hs$M77O6XcyEj0)sY*e?!ow zm9%VCty|P05M1;hMEh38Q$|&v{K?*^9x@+1E5%!uM=gs)?9U z0F@bay5gmgQp2b@qS_-=;Nk#kxn;mz12CS5|FEjsv%sV;qyJaN4a#i7?pc>Yk97XP zG%!(=Qb-vgliIHM)MOv(SHD9=A*H-7V;xDI{bW{i0>*==6p~p@rSQ$2DyWMKQ)l0@ zwNQ80(8Kv|%3Pw}g&`&q!eOF9-MD?Pwf2@mxqa_`^B%MFDDM!+8Nwh V$;6J&v0I-jShYs(shJ*T`U2^T55NNxxu-5kE7=uG@^nm54~lGDeZY*c!WL#*!4-hFg>Mi)6`i z#gNis%@Pt7vV4>+F?>YjJKfVgr#knX`~3I*@x14G-{-u~c|~EEuN49S8yI$cZ+R>= z#BBMZ_;!^FFWa!0>9*fjIYiNsF2`$*Y$5ZL107=0y)#EQa&V9bmt zbF*fYKl2J3@Bx4w+aLe}-+%$oQUF>4Ksg}{)Cq(EKg@$65Q0EK1dHCWFWx+U9SedO z9sm*2+KFJ%ussSEKnDhq-6&*4MhvT^gXnANYw6<=oSu^y7WZR`2x%HQ6ayd$q6@uuOy1O#8KL>0Td%R2$#gOOGiT6d*tacZ6EA?Ch&FY#(C95SbM;(M8GzB#9 z`{z!-LGi8R?366)Zalram(~&WAma$zc?`ShFiOLHbk_bNk%@Otm@HU@86XevZ4t+F zsa{X9J&VQC(iQq`-c-_WT5AIWqZ%GOXI_KEB#Ow9@O#9+%(*g5T!#gRJxbStbGu>>obT#1y_K>ZFG5qL6n5_Ia}N^T zH+DT*LIHB@uUB?@JX3C>Y|s_{-VCbUI)Z-yvuukgWf}&6GFAP0!Oi6KWS7M4F$+ z+Q$(gZ*H^tV{_J$`AT% zLk{bm;;p`V@HYPH9SGGYwRAjSP^x>HYz|)Xwze}@2@lzTB*V8ks^{DSnHh$6ubu}$ z4#EIy5e6vpJzOxqsQmxoqWg2W=sNu`3O)D7z90_()2{*uJrSbQfmMbj0Trfw@pa=0 zdwkIRpjG}Ps-HEur+uL1K;d!K!i?;aV&Ubf_(wZj3p(yJ)pwf`2OKhPYwtF8SasEA zRXiKzHUK?w4tgr$X7X_^udbs)@_US!|Jac}`8&4|dX{S*d(!gQ85gp`-GaAI*zV8a zN1<9HI`-k>D~@wgsTc?b0q`g9sK0mzqJLD6`KF!@beZCIzAKwvoo(kG zJ6BEm2p3mvpSPt|%qe6coogedOeCZuA_V z-tS)5Apk)C1cB}EDBrLvuD3fX32yOQN$C!)s=p;N9o3a zPf?mv6pBE|@L%+5sNyL(eBiCj;NX|jWF`EXtQ*?zc^u`mz4792+*$`=*BFNmLbkO4 zb$lj?Hd&PTn!EHqPfL}{(;|@nge~F=w6>(Xx2t`t7>bKQv<)UXXBXL$=17Z zA6DqhCtnREE&a=b3~N8%*LW<)(~`W*j1py5w{k6%A5|}HUOGq8Bdeau`tRHT2!TKr z;jv6w-4;GC#ionf{qX77@6DT4OVNpDlXL&tTF;^s+$|YnWHgku^8G0gA{}^zHNVEF zOQjO(f}Q)7BD=Q#;@HeiPYbo23TG~C=L7{0jVXR0>8VxCF&w=ocrQ*Vx!b(V1l{~( zcRGrjj+J1>j}ivkz#EaDSauFgmZMajf_8;b2CGGfjOeC}WBua_{bLpnK8>ssv*Rj+ zAilfmqY~pX^5(>pJ(XW6e@tjkR>0HvE@N>cOp_5E$o_JD@Gw1_JU?l}iFVdBsBWdO z>N!E-y%?=T(j$VLkcJ@6SW*+N%=F+@h*TV_``SI1vFK!k)vQ?epw=4aqafe_VgyM= zVKhAfm5N>&RX(4Xs;1Cd!z(F{izy#M=hbH+Dc=~QovVikm}=jVdijJ=>`%|gw@2h} D0U+Bu literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/61d8266017983e5a558b76dfd0a566f6a0a13f98 b/fuzz/corpora/client/61d8266017983e5a558b76dfd0a566f6a0a13f98 new file mode 100644 index 0000000000000000000000000000000000000000..a687ee662b20585632baf0c923a579ee75982026 GIT binary patch literal 2101 zcmeH{Jx;?w5QXPwy>{ZC1T29N1VvOR)pHSvh9*^7iXf3Aa0_qYiW|@%+<{kZ*%V5eW(TCDXQSh5b1>fcIib|KJ!ZnnlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*-B(Wsb zP|-jhBenp7@{65*me&%D%7SwS>wni!RkJ;2Dyz}&>h&tTBR$i>ve$jI;? z2Vh`e_y>`)MpdyKl}i|)>BkCiy8{Vm1-~weH<{E`y3@F8S4YxAuH3_V)jwRS#^ ztN>0OO-RX)hmAQ@RG5X;fSHl;KXP1hgX5Bs!R}=9dLgE5VpC7C*G^#k?)>c3?n?Ou ze{?1GMW-ZP{os34kVUV2bHrRmXdrb}*j46VV)gyKwxem2T7h!@)_tL}f}j2z_T9BV zzIL@$eC-c@kBE>K;fg=4ldG30zg?!v^)_`*$>G}KIwqU5ujBZy|GVm$ z{4Xh~^E@osFe}7n$sdQ5U;l)YUWDGyG@3f)(9~^#yZt1;{9L!qa>F~zEy2G3^%rmT zh?Cwno4w08;CHydwnZn@eSYeH$b7y2!qK6?A1XFMK{^ o>;7g!?5`K+H~kKBn!-BWny)PGR^8oi_AVS8Y_MP$seq9I0Iwv`lK=n! literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/625ad3c5809b7123fc9ac59bb3207b0c683b29a4 b/fuzz/corpora/client/625ad3c5809b7123fc9ac59bb3207b0c683b29a4 new file mode 100644 index 0000000000000000000000000000000000000000..39f1e8000714e8ba9dd0c76fad10f6cacbac0970 GIT binary patch literal 1044 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!!(qlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?RhY>!)KJ(!5X9l&;|k8tP1Ox9Ni0b< zR5XwW333Tbc;=O)7UiXuD1>LGq!*MFD+H8OD)^M77|4n98k!lH8(12c7+V-vMuE8& zh89pR!WuSYYlJz#*4$cy&zejmYnm99pdM)Z&dbQi$jZRn#K_NJ(8S2a)WpaL@)asz zLgmsO{Qv*|KkY4r#b9aj?yw_j3l z`DHtuPn6}8K`9%vmaH;Mo@3kFGo74)F^SAB;1v&`qj;~#96kp50 z;1LnhB3$vOb#nDG<+saJx!$JE>9MIxPW~++$@owr_1A%0qG&@fy;L3Yp-L5PxsC|hbaUYP|~ zS&PP72{8*%LNtq!jXY9b`81a?$cq2wob&J3c?lH3$^m3kdTEgDmAjLji|uLo70#U) z+#AZW7Dr_`&Ql$&13NRYk`ACl1YiURfB`_Dl$=HaIRbJBWFLEo7kfzC1my^FYB<6V zsa4^oe%oFyPq5GuiE0%s<5ABcTJ#vL6k1J?MYJSg!nstdndW#k#r?C1zu)D8{>ppb#Ylg8@a-ETXN(M=NM2LIfK_euH3R z6)dgP+CmEC5WN@)x6u6DM5?SJO;Ru49s+ zOf(TAo9eUbcHPNRMipa;F=dabPBtBpI(Ci7-XNmMR5H{bk+SEZN)RLe#?U`8b~t96 z%-_~IlTm*L0hud%p678)@d~2&)_4E{H6TBbJ}5KJ`Av;BDJ_MYE@)P$@qjG(TSyl) zwS_+Sec_Xk!Zl27sONMUSyfxsn5g#ua6|x%Spq1v^t+E{_h4nHc<4N=KaOW^Kj+$K gsjZ3hRc==pd&4_x`S{5N?YHJjMzdXf?u-ij0LX`B&Hw-a literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6265d6f0beafd687e643cacac81c166714fc7560 b/fuzz/corpora/client/6265d6f0beafd687e643cacac81c166714fc7560 new file mode 100644 index 0000000000000000000000000000000000000000..347b08510be24ec85fadd9f56006d3b5d3e72e03 GIT binary patch literal 860 zcmWe*Hej%1Vqh?3W;7rG7!HUqFz_-cGcf#TWME`q5NBWzV`gMZ<7Qw=Vql7AV2Uwl zVu~9^-Kq0`OQo+YS!$3})7iIw% zpm9mJMh$9>0g^Qa295I(?q_6Vv}9mrNY^rG>||Kfb3ybRtDzAMg|<(=mx}?85vgbFfc4*W{_3DZL0}bilG4%Iv`+RP!3f*6GM}< zff7ipkYB)H-f;s-0|VbqCiNBuL72kjv%oAl0|SGJFfkaI4`ZN!9|i^uJv}`=5J3P3 C$HDag literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/62835f78ff41c6a85973d16e20ec73fa294a29c1 b/fuzz/corpora/client/62835f78ff41c6a85973d16e20ec73fa294a29c1 new file mode 100644 index 0000000000000000000000000000000000000000..91e46b88c7faa416e173b146ddaea10bb31d050a GIT binary patch literal 3156 zcmeHJYgAKL7C!fp5c0qTFbHS}U_>4!=LQ18D2U2aR1~8l;v>YE1Oq`5il{-jAWFpt zRY$a1GYb{9)1qR5TCC_oMJzB>>p~q;6pL?)B^D8DXC(-wPCNZEv)25X`zz<%y>q^^ z@ArLsb1@8rp#b~|!xm1B3Uh8N%XwONws-D?O5T*Gajn~{GU#66w=YN z_OTFz5dmNf!GN|@Oo~$-P-z0;06CTg-GLsZ)haa#eoUI25I|4MCgw19cvG*)NK@$f z;hB1sHbbq?=0}Mk&xu7y2q>OR1WBM+oan?N0wEy|gw`h!s($k*8k0UlrctkA0{~AcZ7L)YkCFF8C;%go zQ2>$%9VHP2oQd7C&rgq}+=z90zsh6s-RhEyau1b5n3-7ARMK{}>N9he^E!9s7IS52 z(@GJm@q8bj>5AR)3XQx?j(U?9zG>R0wQsf^J96}c1v~Gx>M!$-G>3}k;-4#9?=3EK zHQZ8-KHanP@Da!jU7m8w#<8`Ka$s_YPI3Q6?C#24-<_s2huy`%Qp z63;CmyzM#YtLl8=j{Qk5;@Lm+O#Sei3UBAi;Eja(T5WmYg3ZP{AL;dyMWK81OFN?! zTOW!`XEa?nwY6Nz)7j;T&MZA}_d-j#PB5pA`uiD46**AP;4+1I$K_IaC^um z->tK1C=5aHB$x<&ht^(bp_@vtPY)4^(pRfTd>TQad*Wjt zHJwSMx`qAmK=miBvPow)V#NWA(W+dS#3=8295V(k6@$Fi2?)m&ugnH-l^SYYU%Hp$=dn0c$ zgzJ_e(;K~a2F;^Pd06@K;q(%QfU|q)i`pmGdxEmd>ahM^-Yr?V&tLQG?|6%d?&93j zoyMg5*xp^l?wOtgvC;Q}@3LI0VpgTDpERI82>g;av?nz^k26Y|76sbJu>C_fK9K(H z#gUhGkDA+ecR#9Nrg!L6&+VGFeUQ-!09JA7v_Wd*y^OHAuimKR2CUmWC#uY#6 zn99tb7PR+W9ruam^ojI^>pKr^?<|ye)v&z*W`-oz14*=P(1tKHB!6U~7zBXRe{BnI z9f0n@ic)A7WMt~}77r2Yi^85er@L&4%<0&1>3LDJdw1d+ z8LL`6v&g7tB+Qi_ZYGoWbU#_V{PJB&u6_No-C?y$q9>aZ`o?z+lsp<;-(pT+nPXoc zT3|AKXtqR|)N-XKi(BaF)3>9Xu8)_brg96$K5>mm)o0ChYmLGdGrf+2`rmy?oA< z;C*b|*dtrFM^HRxe&)TZXS7Dg*UcU&m2+AmvAuh-oVrt{^%W8REoVd5RGZ8K!9|v& z=-|NtJ5F{HFX&Rm_6#+OS-d6h0nEEUQizUq>q=GIiUvNWtYmTwCk%?3#;@iK%G%B% z>)+I=okfJ+7FpvMicq0&$X^f}+yn9N^2jmx8z%Gfd&x( zEL{>xEPHOa5c)wM<3!_x!trm7YA`X`N3Km3$ul%Mky5X;5=_(1hT>Zul0To;tKXANZQfiLrAgS=nlLxE{eKh|f?aVb% z-|~GSDF@=$ZK4z#T79AmuG?xhTx^mY>Lt79n^ep1gZG{If9dnywtx1uW2V9emUiK0 z%z%ac<5jl7-MPOZL^SWc;w#}Ftl1%G4tg0I2Ry&8m#{zW@XXb1m>nQ&0N^H@x356w zlK#Upsa>}d^|7*B{KT(aX%qJ2){E(;C7|mI*Xw~U9vUu&fnXE>$tbMlWZTW-Wn_ij z{$jo%a+?3C-W8cMHYe>ou2(CK9}!aP48pRE9>a487sJqV41j(P&?VnPyR(S87w3@>5szd6R5@JB#`{{J7AF>Cn4 z{Kxh9UsW9d0HpXJ$uWx`Sf95y<6_9rn{!otu4#{DHM}|br&hQ)=WcrtOlzp7%j{-e zh-Y!eD*><^hE-GV{^zsEc#Jt0+0 R3?Y;R{SigqM*dnh{{$p;smA~S literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6288a9c43786d1290e4009719e4be28e5eec7ee2 b/fuzz/corpora/client/6288a9c43786d1290e4009719e4be28e5eec7ee2 new file mode 100644 index 0000000000000000000000000000000000000000..8e7d0344f8401ada1dc271e13f217bd6ee5fd3ee GIT binary patch literal 544 zcmbV`Jr06E5QX3DA_fVGh6Jqq37s^L!otGR#0z*8`=#I#HXg+jXklVP;aN1Y5`v9{ zubG)IFEbNqVxxey*8Br5DG(q5UIGDPAktc%KBR;^Aa~|+V=l+DRzl^WtT%e@a8>ND zTSvIde0r`vI1Ck;g`C)7RA{cnfwhp(+jV{z6lTxh?&&`nx8NS&G(`d~*s2g5fCD?Y b$>s%{R7iY-H{DO%#JB2>}H{cqkwOLrB_!B2cto3yMVqfr1cH9?C-qN>&944-uhA z6>$NrEmTDi1m!729#W}VQG9f%50s+_whE{$@>sLyhJ=E`ww~3qJ=^~0X2Y@2b13-)b z1OPPv=qQ5wTmj(x0nQiTyrB^10fk88Aryz;a3nB#!pXB}RxSl95=je^9g~L?5rjYh zaGALRBoR?JJdujCb2Fzx6|5moA-jf$@=RR$ete#}4%EhOk}2xT!??W2Fdm=j9vl!D z%#UKa@C8gKegI^sDVnn(n`Oa*9LR>AYKrFXLpF;gZNBj^{ON~@|7!C4BLslPrvn(j z6Bi#3jEq|kv+nzgou6GkzINBLBlQCgXGk7fbn7`K+4GY39@^e;N_$gg;78_{XZ2L+ zG9vUcBU^hz1y)Hz+m+8|(W6^F-ssfIwaI_V&0DZCXXHZT#xTPq!$SrPp5`&R>t5j| z_K%Hsm!*~J?^#9fX&G5!SFKsXTcqL9)KPNdSYXNk4n+Wx?*dmqEh6fsrG%&BX}hAY z7hjMUDQWYnM%IWn9EtuZsZ_F&Cz~lPj7{%{#h!MLWIkvx^)vn{2X5j2#Zni&?)iXI4Sv zzuJayloMq60?)1o{8$w&_PUVowS%9Ta_8SV*th;~NfJ!PnIOA*zP_Ki>yB6&!)9uA z0b+}~-A6?-5SosI&}Z$QuJKNX(kpf)K=D|qW`J*gW;`Ow_l!*JhlLLt%yg~%r9Kw>E?0VEOS79=}fvc@BC3-b&$#ka~=*{i-DZ^C3L+bvk; zocA%dvmu9NA#F}O^McW7HWjg0vZ>6#_O*~IT}>Q9l$R_kipZfK0(`e|aMu~$SJ@&n zhT`5-r|a44s|p#4AC2BFEMy$GRqKg7ypesBtUla)HlMMkYiokzP5NBTL9N(&7oLbT}`yF$fZ?t!$ZxuksG4SqIlfsNFLYE zlpDDLuD~`sCf)%qgZ4zcn-&wmMbMHcZ%jl81UVc+HwohNBciO#a6$wDwF*Ba&Y6wa zMQ=5=uCMnJx&9pK%l!rTwlVi_t^&T0IvSXm9`Ab8*V`8GFW7#+Jntpg>SE3R8VCn3%h!@H!A6Lpb#e2KI zI2GDNsLI)LrcUE@snz;1c3o=5wj+X&Ko|WB-RW7)dOhE<23GE;Ih2ME^0VmH-xSaH zI^l32rXY8;>rrd#C$W6ji#J~eMEP|s>|oTGID|Qg_`~+hkj|iuzsPso91H5RKdfEH zxpMs7qmwuZzJE}33NTqQ9XkKQ-@C?NLQ@M@|EgAt`TPXqYtJtU1&J$t*XYM87kleJ z&g9tcopnv5yMTM=Lt~Sgagh^$1jZLkk~zb<--iE?a(&&#s&?km5$kLvRs2&JjS*W9 z9|kvUpSHu-%L^Q)%@l5UdFpiXld8U4wu`+YKZPVvQK?(wiT_q-X7Qvz04TPFEcrg6 zbT+P%o^@Vs+iqmYzWe-Xf%c&>6LpbSfdBP==N1*b>E@Fj2Z|#tV_eQHG)j$GVkT%O zIFBAr5th%7&mGlVE>&&tO=OO|mQRN*;&rx1Y1GVWHOT3ZJ^v-u~|Q>?n=p z^pcw&v|RdS9tQT*f!m0d+q7w_$0 zo-5u#)ZVc70`+MvvGGTR>?DiiG50RI8VUgOR`+ec%Eyb@w&kWr8onsqM;cT+VY@p1 z{cpLq81<@zPOOvd@PlX3DRoEd{t+?IdDkFzU4N&oi5$h_Wadw~-C>>;ak1Pjj)ge^ zLACiAHQIJc*}V$j%LO`j-G9zBFnUmG!BfRXDsq2b=xtOnxL$ej>UHg8kBW#jIr}0G zJe;|pnKxrWGlTY+wxFrd%ccEV4$X{5C`5E8>vpVA5hBU}3K6m-jlB}MSK4ns{(Pm; z1X*Rp$Z6kgMJ(TK08C5PSng|N-5o*3$Qtn0$XY&`taZPWtf;iqGC)BV9)L_NMFJ$c zddB$e`e;&lBtcsB+s4~pdhwm=#Xmy6mYZT1{kQpg?lfk{|3khm{!`~`tN(SrX0upW zr95t`qN=g`cGA;S!k6`Jy{mw~Wt;t@rwvJ~^NC&`Nz}(IKmMk!kC&{bpNLo8pCJM| z)n8Sg@K>jps*^RyRL69Z#X5r9~^k-pt&0r0fr;* F{Tt?`---YL literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/62e0b3b35d06287a592bd826331ef2425c56b800 b/fuzz/corpora/client/62e0b3b35d06287a592bd826331ef2425c56b800 new file mode 100644 index 0000000000000000000000000000000000000000..1e976631143d0fcf6075d5eed13c0cf366514fac GIT binary patch literal 1464 zcmWe*W@fNtVqh?3WQSh5b1>fcIiWPBeS-7KlFal4^9(~74(Ky5 z@G>YfF#Km^U}RtrXJ8OxW@bLj&A_~$fq4%D^G<^%=B)-zOmi17GchtTaWZV(rnEDP zWvQY8FB_*;n@8JsUPeZ4Rt5uCLv903Hs(+kHen{mP(xt@K@dknm@7CxH&r*dB(Wsb zP|-jhB#HfVq0Y+8^<|amd27@L> zE~X|%M#lI5QNTYG9vE0-3Lyb1>qi3W5OxM!NGtetQM~b_uF{>xUAsDx9&+U#)~ovA zx@O~q7zP+%1Tnw_OdEvfAFrrV$G^tv|J#X14pRiK>{HT8zUQQ^yOW8Tv1<3?#^nZ$ zOAKV$m_udxSj1RFe$HN+f41XlLgDsH3NF8Fr}K%jd@?8nNlUZj8RRrzQ{ee&;SzUJ zqKylhI`W{Yqa>gtvseL~I+{2I;K`4NjX6|Qn1$7VnUV27a$ItQP4 zCba_P{H^;uuBdCV$O)Vc!;|MqIzrzK#Ejpp@^Hcvr=Iiwrj=ojyNuM7e z#>~v9%frB^!OS45pevJk;qxI|_cs$_f4w-r>35LR6xQk1d}VRB>h6BCcj4e*V`LB> RU;s<3BMJQf0rxGFA^;Hc?W+I) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/62e211af4116ff2f3f6fd5e4301a0bc3eda1c487 b/fuzz/corpora/client/62e211af4116ff2f3f6fd5e4301a0bc3eda1c487 new file mode 100644 index 0000000000000000000000000000000000000000..fed3013b065af267351557ac0220b912741cc4cc GIT binary patch literal 2101 zcmeH{v1$TA7=-8Fe{YSsyGRfsVw9BOsC8Ow3N*h30(5{F?h&pFJ7=&n2HmdJ2#t`b zYi9X4|4K#T2)rM*m^z(WChp)d=%gjLisaoe;cc;`U7S1U8-saqjVvF3j*Kvv=e<*$ zl{TuWsh~k3RK~87_da_}oKE{~8|@Q_cdBJ=p~~M@z5nynAR7kxV35HtmdlAg@~h+9 XO9b^x&@aqC2*KYfF#Km^U}RtrXJ8OxW@akpW?;%^V9H@&$~0(VN;PO=e7%5~iIItkli~h;y=O1^ zd3+5x+1Rz(JkHs&FdDcTavN~6F^96S2{So{8VVZ-f;b$)T*3Ldsk*@>i6yCqiU#r^ zK`vnl&%Bb137VCLo)+&14{z~14Cn@C@|N;zyivp zmNjJt0#K(jF|x60H?lA&F()yw@Rb_*u9lejLvGI&wa^ENoCl0bKN;<9h#{cW^+k6AEubY~lSM3P9oAgcO-PAZvwLSPhsN;o)O@ Wj*XFtwSj?wfdLXe#Doo{DFgt&NZ9oN literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6334dd2dda9f9a6f620b5ef68a0d77ba7cf9386e b/fuzz/corpora/client/6334dd2dda9f9a6f620b5ef68a0d77ba7cf9386e new file mode 100644 index 0000000000000000000000000000000000000000..116ae32d9d731e3a16357f5128cee58defe0e7d9 GIT binary patch literal 4001 zcmeHKeK?fq8h_sRof*T-$XA3gNab^$cNmO{WD%9rG})CEO~Z_aVP+JG%qV4jl*&?@ z%^rQIJ*Cpphuzerh-8%<>X0PWR?<=ltG$NUsk3{|xvsPSoO7M$y52vY`@P@yzMtp0 z@89qD=wlf0KmnM8VJqkPdKk7Ar#!1V-@kNbnd#hTi<@%FB^t9l??|Yo)w2MI1VHy4 z0uTTU002V(3{e1z0DTOjs#5@!2&gC^Y=H_wDpX*CA`C@Pl#B~rZ?f7w7rZ?t_!u56AfJrU$Hn+#Hahk@Ng?=sWf7`(7z2^Q$jjRgq zXHV4HJ1gr~S#EbT%}GIrD$*Qw>Ne7^twrN$!;;*&7!^Y9~RMdi9Dw6h?g?!ZuN zwi(CvVBcX>GGNK-Oqgys55*9G6f2NLP=WYD6B5QXu_7q9o@`4(yoqWULPBgwL^4rL z4TXlv*V+UfsHNZ%C?D*zVC(}TQ4JvzLSQhootQ(5bTffW7VE}f#I6&n91X+Q&(oLb zz>~;SoRLXqo=C`#kx6lfPsa|^iYJa{h-o2n^o=WD3%*@lBA@q_hz!SMC-9$Sw{wcsdY z1&09VAbRP&1jV9@X$1)B?$wu7XQRuq&b#*ev``#2h9V2x48Y9+rF+d zvrqlh=Jz(#^ue+v%RY;lGBeliu+ZgRK}lY_d*v_tdY3j=;`6ob9yKwXduAq;_J}>d z9+)+ca#njFO`ZH=eh2mVsGMK!Z{L9?NWE(8NYl#VfBB^S%{7zbqSMD>S0+6;knz=f3=9xn}Jjkf!wbndwFGUJAMZ}4b1t%CVUMv;udS;{?lL$M~W_vvSTSML*3 zb*e-6cvP-h=sLi8GoxoX_sP`i#sLm(z<=bxijL$Tiq?s@Rs9%fHXCB|?~tX-M4L<8 z<{oh&<$S+LoA5MwMn})v5j<{q&+RY@!@qRF&HA6Jql`{p=d@2>QqNkskdX}dH1-AjsYvH%QRL-Vd1c*c4CI9%azg`iEtcS$WYSVaCO}d`&VPzb&<@%Z%`Td0J>xx4 zMLI|mqj_tT1j67+L{dhiEOM;C9C#8DG*IFJouCCZKZ1-8`4m&q%dw%O^oFR&wCADC zDIF%&n>(#Y;L42QqqX+YDIJ9hzMY)s6yg44`DOB%dd8d8d)=b;2X5R-%t~&uS-9nv zx@gnG2G)UoMep(s!Rl`Cg#rD`H`dwvmeiMYq}S5KE4N|En8)9T5|hmh-`2V@maWgK z@!S=+!|I01p#NfE`J$Sob)wTURk~@3lS6IH&K51xy<4P4u|GfOYW5nCev0g6KDBF) zRP%V9c{#RY73jHOe9PI$LZpvjfQBz)cF2OKWrSUzv6BJL@)8L4s$349Ni3i`F^T+?7YB>HoQBncG|Ns1N?t$neYk_E| z`n=sbU%hVE+)6rdS!#Z(XLV|K_ErlwDRwF>=Y*hZz&-y_n2x%@xx=lc%PVh{i+q>d z>_Yb6jxS%UAM|Bgs8dQUs}*2!sKAn;0_}OvVmcRkRQsMt1Tf%zsalWgXf3EYuA|kw zgv#BLfrRyiMx1;nn|gh>5edV*N`(um)#sX)AsJX620G%r~k!rPAPbOp*Qp*5x6FF z0OvsVgcwH=eS0Oxz55e~)Q!OyyL9ozGNncvV@(NPDvp=%_)><1A1js$WnxL<2YoUJ zU~)NFe_tmiV3EE~IwYNzlN{dRMn|Iy7^h10B6f&QX*(YH^* Ud*lOns_9X1`wvHPjq$o)0WV%r5C8xG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/635add8a959ea9c5b224d91bf27acd1594b7b2c1 b/fuzz/corpora/client/635add8a959ea9c5b224d91bf27acd1594b7b2c1 new file mode 100644 index 0000000000000000000000000000000000000000..2f5234ffbffa7bbaf4ccfeee6514711985a06ba0 GIT binary patch literal 546 zcmWe*W@fNtVqh?3W)`iR)+yE_nD6?&<^ea$9f#@HqwG0l@4r)i&$;it!rDy?2ecU& zco~!#82&RdFfuTRGcbrTGc(@hW?;O@z<7;;@v=b^<9UN7#OpHuSoD4U8SZ;aN z?tg8-$;PhL=5fxJh0(y(klTQhjXC5Wn=q4OsG+cdARBWi3kMHZaDHy8Zg5FrNvffu zfjmf%i$}sUuOzi7FSSG=Tred)v!qxdprlg4rzFKdPMp`!#K6SJc&@RLp{aQkm}_ce zYy{!LtO;cy(V9$DYa$JVp-yLFWa9w)ftit=*@=PWnRe!*{i*Y(@6(s#ozmrVb$a&p zm2$jpzwfSGDL41dt|-Rm*QT%FlK6S}$YQy$M>WkJx5cDnzRK2poTBS}zDVid;s66b z16hzajakH0L{_(4TC;lUhbBL<3ii0vCae-E5hnp&Azhj$PP|~N~8W4U- qvxMQxKGF8rBkW8GHFA|AS&Gdcs!B2{<3(o9%GmPp^gPixF=haGfT`#J literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/639d5d5572fb305ad57c9f4d2487875918aa9cb6 b/fuzz/corpora/client/639d5d5572fb305ad57c9f4d2487875918aa9cb6 new file mode 100644 index 0000000000000000000000000000000000000000..127aaef1391a653140592ef48a79d994987a3af1 GIT binary patch literal 716 zcmWe*W@NBrVqh?3X572&yL8^G#2s=B5Wx7{lHW23`hb28REP42%p6 z;tUL8%#2KF+zd=f3{3G1Ofd#cOc4f6j0YDmGchtTaWeeg;G?%%U^b5dFB_*;n@8Js zUPeY%Rt5uCLv903Hs(+kHen{mP(xt@K@f+7hbuTgH&r*dB(WsbP|-jhB*?`h;hC45 zT9lVsq7a^$lAc*otPoIAso+zRVjw5ZYiMF%Vq|P&U}|7u5GBq#!Q8;a$Oy_sSffgu zH6_@sX`GMjenwUX=EhzIgT_v##zqEB?Gww4o+SPE{d{3f`$WI-3;`_<@tUFWyj6E^m&SD73r_TuO-JI5U|>r$k0S0~svTV$uvV1IJEFz^>*L0ue*vBWIy8Tz!o}A^Sw_4YO15;L+MZ!R= zL8QC%>KeF$eNY8FApOEDtOm@CjQ^26%nI^wBZKveirlH!Y_q-#OX^4;>R6|=`b)3T z*P6og^ST#h4jpcP^m1Qk%oCH<9up7QPhF?&K2NnG+kck8lA^!ozccY{;Nn;k_2_9y zouI5qLe@$7%+GqsYIo+n&#vNn7#u!hRnf!>mOAPg3!hBvzW4t>0Ea^7Z~y=R literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/63c09123324fa1d3c3b7114c73ecb217a094fc7f b/fuzz/corpora/client/63c09123324fa1d3c3b7114c73ecb217a094fc7f new file mode 100644 index 0000000000000000000000000000000000000000..8a6ffa91e1c06b4db2d610f8e26bbdd688aff7ed GIT binary patch literal 748 zcmc(du}eZx7{$-M_dVgIPmC8&7tL_f<-DPxA{;`HplA^cg1{ixT3Qc*iv$rQ z1O-8^O%g$ae?jyI^ba%zH5ku&yhlsm(r>!oxgXy--{snhSdhTHQv3s888DFpMgjsz z0=80eHwsyU+=kp@Q&!m&k3A&?rGZa>q8Tyrt#a$#6hha*k`tv7Q5B7rBpr*><03ZY z_mj>XXTQZ%AO>W;VvTxoGqacT11~oC)V0ageGXY9cP{cg|L|`ER#@opR3K3L zTw*nW{_}19_)V%V+E*J~XF8%P>9}Uo3R**WkD1PCDcX&hkQ@;68Z1qx5`x~s1y@hB Z%0)e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gd0y1^xhC8>sr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>M`4`B<$f!DdaFLF0U6_cO9GFgNxx7&LY=H8wJ6YM)qU^d#xO@8=6^BfDLV_I`BV z&lypzwAXaqbk(*g3mOh=kuRH=?q+yF;Kg<&xdP>hMJHb7R$8@wZ{R;NRjl-=N1@M& zWc$URlILjo&-!)xU}2s{tHuI#xm1}|tXHG+b)Da8PuSSAUS)Ei*o&jT>>PKh@n@`*N0-&T3r` z4oq2P76}8f222IFTGt!!fbMy-UUuz1}&+A^4Idr)F(aU|EF;7fZdrUlJKXsk9`#jZ(Z2wsTON#!U|IWm-fs12F z)FZ2sIzd^}gshYDnVQEG#l7&9XS3m*eG%`tScFfg=&(`3CaWA}@NPbPNX`ws;_^~Lw3{5Re+ zVZ}bQL>L!2`4L3XvU<ALKrNN<>}()-V4by+7i{fu6$eniT2qsB`I zO`RRFG7sWj9{hfO<0CYh>^KJ5@BVeMOSUj~R^RtMo-c5x^+M%*X=GBMb(l zq<8EI5jDL(SVoofUSb%mm|BvEl&!F)_Y_jn`*M=gyBF^C&Q7iL4oc3T!h_WGPTfQZ zO7KrX3El*Mg4Y_%Dc&4Uif16dn9tAMfL_isFfcG8m-Vph{Qv)dM6nObW7e>Yh5`sy Y2sQ=;D+G0nil>AUFOuy;?0|p|0gQ2wfB*mh literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/63d196d68bdb46038b295031ae2995cac32a74a5 b/fuzz/corpora/client/63d196d68bdb46038b295031ae2995cac32a74a5 new file mode 100644 index 0000000000000000000000000000000000000000..55807185057abee6af4f9b5b08cc87eb32a4d280 GIT binary patch literal 363 zcmdUqu?c`c6vguIiy&elg0_}|&AS5&-NXGH#WmbUECegDHC>uOS{HMG$vx>E_7N%x sBusSBy4z5K17?R7rOksW6dZS~$bHSEAgPJvLnD#;iv5i5YyI;qo<)E=2mk;8 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/63ecf1d38ea2016b9afb23ae3afca58d5dd3d1b4 b/fuzz/corpora/client/63ecf1d38ea2016b9afb23ae3afca58d5dd3d1b4 new file mode 100644 index 0000000000000000000000000000000000000000..e0d235c738aa4eaf29d66e4b682563c86c560140 GIT binary patch literal 13200 zcmeHN2~<;88ou|vB#;ochK5A~kws*`U}8r)2@ASOdK9wCq6$eM-=iV@RH zeX_T45$gFOD^q=~-v)Hm(;&@hc!NyCF?;DW^N@7A=KVt|z@=*dlCHp{Qt+d5!*0(T zQOcl)XZ|#6703br0D9;Wo1^^RGZRXV-k(_0d#1e5K5s*QazjU4x>s&$w&C#tc1r!^ zq`-z~pPdh)f$y}<&l>BJ;z#C=EOxLGT9)fvn4RD{zSDVK)#?hnxbhBDFKS)QUo6Xo zpAHLEw3fG&ik9EUa0uYe>1ZnA&~O3AfWoGjXuT6vBVH!QmSTq3*@F*Y5(8KiD#9T| znh#9<1Hh$Hpt{i8YHS<_6a&y>bD)3%Kt6FNVAb2YpFx@ljspl0v6K1@Zou*vXV)IE zUX(BL_c&vebI8Uj(RK)fh@=J{c>Ln3;Of~31NjA7%!-5p!}GoS20!;{XTc!d6ePN0-tV~9s$wtD+_ zn93)Gp8j^}(KN^LAu}2$QWz|=N%0b4a=cK&4T+ie5o%h`8w0Xkrd+e1lCrF^6x2Ga z@qmrPJ{*D9gTgP#kC&djw9Wi{Wc*L-ZIdfQS?)(V@60Nr(tqYxfLasv|5P{vUxp(X zfg_cHZe>PWm|AA3i6b-?<|k0$h%S>6oDe5;4VKK62>Wn^!eDAWj3`F3kUL$H&JC2z zBXGonhj^Z&JP{x9P?)K{$0vyA>Dkv+D-lw4W4l@A zF2fYd%WcXYt?_)kG)dI#de%~LY*~9p^@{Ktyt06Ng-=1b^TciTX$z)pHrkc^qPZJm zRx)&Vg|+`vl4;BtGbi?xb<9Jz=n_#8CIGu}z~Khn38quR%s=*C&}kmayzAmn$e6L+@b9Cp z7H1e)>OT7;$YwN6Fe{v#dI3A!^7Oo7(|`QN9sKUa}jCh?zz0dH7>Jlt4!!3jpofC+wqw~_duh2cjP9o*rMr+bE&H{ z&N>C;oTH1EDo*paKa_QS*7il@4Y1Ob`%Smwn$1Ctd)o3E^b=+-!!vN7%g@p?hMPZa z@N%EAX!S|Iuanl=H+}MCav-q1dz^1ne$6&};nEw$Y z^J;E}zwfB3hjRqumxZsBOJYRD+dKqXn?_~)ICfMIV1EVJp8>WX$*>BPfElZt=!qVr zF+_+?({aiRX!52&EsI0~j}Lr{^t#$m=LXN+{jT;Gj}}MoHn0{RdN#9KT#|Azw?ge|Y1xAh&~&vQ@`f*xJcLY0SkDpk9MQXT%nKHtE#gb&ZsdPc>%zHmFyhF{j(ayp z`!VZIvCA+0uDf#_ERA~Y5O*S~d|S%}r= z0x(F^?ePUT)WOFA%1!5(_8Q^#!fJOb{S7MvFBC2~B)8J{e||+Sx7vF7yD<1uOW_`d z+0$2C_`WwKo61Hyf}V~H^)I|e1fe}ZbKy0;6|wMdrV%kfFcW}j1QQwRk`x>`AbX6v zb%=o&1Sc#V83z|<-??S-`+ZW(1Kf`U;E7VHB%--jX*y%)$5lTp%j!7AOP$|BBRTsA zPDtJ?XWu#qXU}@)IQu)pR9+?0v>+o*wc@6&SiMg)+P6os`cP?fqGsG|h2tvfvn6r0 zvpl`2S^3nk!nfp1Z0d^P?M2e7j!G|S^fAtu*1S>G=?(`QeaCuMunP63aK_|N%o}L(4+eeF36E;!}}>O zl4=8~HmE~;Qf(0Yf2$3^SH(DfYa`VLGDApa2+0f~nITl=E8f{8I?35d&Q4|swX5OO z$t`s?5>aJGW(dg)A(X=F>y6jB7sSf!Xk|j2`CbT2=;Dao5IQ;h+yk02(h$RTct%OmWU|XU=dvCD>q~sgxKVwAMNdpCa=^)hOJo0|it7 zO(38McuLW04m1HhgC1o-p$zEwS}_S{F-aC=?YY|J;kadyv>Q3e+Nx(+E=#ZB%7QVO zydxq(-3;tCR%OLBo&2I{_9YNsj>MGT74dgOq+Bc{%Og_uH^!b76U>P5|Hd4MYfkTs zTTFH)5(@K`O=e=w=+icDFSyP^O9 literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/63f9878ffbe9cd019eb9c31119f93e60038706ad b/fuzz/corpora/client/63f9878ffbe9cd019eb9c31119f93e60038706ad new file mode 100644 index 0000000000000000000000000000000000000000..281bd4857c5d8a15b93e9683aac1fa2be0603eff GIT binary patch literal 424 zcmWe*W@fNtVqh?3WQSimb1>fcIib|KJ!ZnnlFal4^Nd0n4rntl z@G>YfF#Km^U}RtrXJ8OxW@b#`W?)QUV2ov8j526q3^Qo_yMURAk%>t_+U|&@$)qOL zS7OpH+DnHkxcofue7D;m#|Q<7p}+xssdy!Gs-< znrG%2ZwX*K{34+E>)C6eH|%c&|M60*<(za+XGh}ylN=SK$bNi6CeO3V(tO} Dn*Dkc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/64111d0aa717252d1fc807fe6176836e974d1b51 b/fuzz/corpora/client/64111d0aa717252d1fc807fe6176836e974d1b51 new file mode 100644 index 0000000000000000000000000000000000000000..da456a0251163af2443f9847c965907a06a18d07 GIT binary patch literal 1335 zcmd^;Jxatt9L3*%{>fmHjUth(An{{uWL11AENlhA3+xH(?L5Fvv9}Ne1y8WWf}mjI zDZGYdB#Bvd0ea$UNbCEyAWhneTDOmP<-DtHw8S_scEI zs=nQizXy<9l7ET`>zFp23>G&aKGew?=p-~w1Vu*~46okL507U?X^Q*tBgYTStd6o( zFZDLsPLemJz2#lEn*T?ydP$yNC&V_GM^$$znCp&`s>)Fha-hhXZ}uZAR?uxXfgmzAr9@)3lEzZ+^*_5@s|6EZ8`(z;!5FQLT;L;wH) literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/643dfa2d1975be94deee11c5f4fe5f7ba03d1dd0 b/fuzz/corpora/client/643dfa2d1975be94deee11c5f4fe5f7ba03d1dd0 new file mode 100644 index 0000000000000000000000000000000000000000..b10aaf00f738b2306e049eb6f787e146339fdf4c GIT binary patch literal 694 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gS5=4N2ZXJE=`?`nyeKNuLdsD(aA+=@2HF)%1Nn`{ubbaCTygT^HW wvTV$uvV1IJC_Y7iQjoMVOCCamE`SGQtuPBK#4=7ccBrk)nGAHX-@w2C0DT*hP5=M^ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6481c36d92d9ca0fe3614e4d51fe19e4c11c88f4 b/fuzz/corpora/client/6481c36d92d9ca0fe3614e4d51fe19e4c11c88f4 new file mode 100644 index 0000000000000000000000000000000000000000..a5e8292ae5d7f457654944abd9c1b6ed24377596 GIT binary patch literal 539 zcmWe*W@Zv*VqgelW@2Ev_aLy-xU=`k$yw~C>^$s6l59u&)nDZaIG$d*{@WdeeWshe zuDE`l@-X@Qo28bCuF;or!<|k&o1t-%XLid|Mg|6U1_sXmj0}tnAi&MQxQ&5vGXvuW zgC@o`22G5j3z(T0nV1-v40zc%wc0$|zVk9Na zTe{YKaeDKvr6}V^lZo8==UqHY-gkV$}p7wiNlB*H}(>gvsx61`V=j6g&58ds*R{OY3&s|VV&S3Vmy(=OGUw?Ua zPWn|+WPzGZ`5Z5X4fb;^bmA+Sn7{vLTr6cEVZh1894af!!eqc;zzt&Zv#>BTu`WP% zIycDajSL+>8%$1J`6#`wae+)qM9Xd)BkQ#hC(oLE&y{;OAw{%ft4rbCsn@K<{j^M` z#Vj!0WWMR#HM>&%CojJ-FWwpR$ldjq{P&c1iHU-XI#X42|EsDd^_~m}vf}e)na5_o w(ED6rk;>=us!8)%#phjld9Z4Yc;T*=l9KB4ChJzsopNJ+A0Gn)g9tM-0Dz0bp#T5? literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/64a869b598ffedcd1aa51728d0609a9a429c8336 b/fuzz/corpora/client/64a869b598ffedcd1aa51728d0609a9a429c8336 new file mode 100644 index 0000000000000000000000000000000000000000..0c6c287f2f9e84124a576b961b5f56b530da0bfa GIT binary patch literal 876 zcmWe*W@NBrVqh?3X572&yL8^G#2s>e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf^30U<%#vb-fRaiDpOO>H49tza3}A zwE9c0(bt;7^z*tGWey!~fAn%+XUr3m)gBWM*-u@k?LJSnBHMqKz>=cB=f5-YY~bQp z67}e5Nu8jqNkZ01`OMFH$!d4zz0a=VdKer&V^z__3YI$g{#0LiZlN`ERQOv&q(XJ& zcYm16xrrkt(lE6_O^lh5frXC&oaPuhSr`~v!D+Hym$CcB!Y32E@BN2@pZel^QvMt7 znXqCXS|W^#ocsu)Xj#4I=LFVAm(J|eRd8MQQKUD_R_XocvbwAjn|?+wRzD(Tx>4h$ zgQm`oSeXZLFAsh{zwwcvO3;6cpEa^~|D7tD*S;c2TjGpa@_DIZlC@2{o}p IGYtX&01ap^5C8xG literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/64aa71fbf19463b62d08ed58abf584b321579479 b/fuzz/corpora/client/64aa71fbf19463b62d08ed58abf584b321579479 new file mode 100644 index 0000000000000000000000000000000000000000..e2fdfbe0a491bfa5694a3269e12f64b0bfb32e96 GIT binary patch literal 878 zcmWe*W@fNtVqh?3WX%xC#Pj`!`C8mpiNFMe?b22%zG zUWRuJ4F4G!7#SGE85qQvnVHhK8JLn7nBp0jVhoy?A`F@s4=!M4Vq{|C{QG-@kKSs5 z**pfkY@Awc9&O)w85vnw84O$vxeYkkm_u3Egqa*e4TTK^K^#>cuHgLKRNdf`#FA7) zMFV+|AQz8>XI@EaQC@0^LU?9MdS*$nLO@BSf=@|`ft)z6p^1Tsk+G41sey?>lsK=U zxq*q15tNI=8V*veX`GMjenxf%=EhzIgT_v##zu}C+9#HnXe9mj{d{5V&2HD_dq2AG z=ZvUU+H1Zp{Z?gme7(J%eA&cwH-ifTE!&mk3Y7CZPrS^nv}!GH;6E}otn{c?pwEe9 z`^BG<=VdIADNgB{%2eqVBlvU%f=ik%f}+dBGO%YbF0GX${ae}{^;et&X_0Wt34(jvY)z6+kKvDMYjJefh9$M&wpp)*}%oIB|x@*1D@lGX0ad!Jp!^)MuS#;T%;6)bh~{i(k4+(K*SsPMOlNQLUk@BT2C wa}!5Qq(N$fniw-P0}CGm1A_=NGXoI~|0MS$dcK`qY literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/64c63d372985cece83adba25d2eeac22819562d8 b/fuzz/corpora/client/64c63d372985cece83adba25d2eeac22819562d8 new file mode 100644 index 0000000000000000000000000000000000000000..45710f6efe81606b40ad6a03d3dc2f861ef1fe3b GIT binary patch literal 955 zcmWe*Hej%1Vqh?3W;P%I7!GJNFz_-cGcf#TWME`q5NBWzV`gUB%gw;FlYwa)1Jh=M zCZ_cUO-zCdn3)(2m^c}Z!A#_2W7lf)IA_bkXy9tdZNSOK9LmBb%w!O1C~P1I;ur{X z8RX|0=o*w5lo%K)8pwkLxr8MQ@=6Sf@(fB83=C2X3`z_XK-i}w#XwG+7iKsZpmC{X zP2+3>0jS%V7};308(A2XnH$>}SQwozTFg``Si#wF;`PG(h098|RZMAJoN}}CvA~Zd zb!qJU+`4%yg@slgV_N%CBX-lDgO^zgV}+gOh&+DtWcD5*CYjZY>$!Z`?b34heO_Jv z@}x<5+BLR#R-Y|j|K1OM|4g3!%<#rWwiZ*WLT3@>S;f$lzZ{=UJJu-W6=v2;$ zg-0a>G#586H)vd9Aj`%aD$B#~=#4eEX@G*B$OY>;PQ@Yvv(K`BUDnI+F4 zrva;ig(1t_4O|Vtv0`9gAj||JK(PX%xsU=G94jC}2_!)j(8P)0@_?)rW??m8W@I!# xN&w7_Jq!p{0}jNPnHje6FfeRlW{_1Npk!0*V2@Ac7z$_&;7f z8fKT6O$eBm5HK~&(9<(r-80pR5+?>YR^=}M&VU$o;9DR-1xQr&BZ9s`U!gB_+M_d_ zdo@B+KySbphlQi|W&0}@i30Gv5wQ?z)3R*HMw#2$rZ~7yHV(L-Id_N73^g*H+^fVR zXJgwr(|CIFy;CEfQ`^a5{s9s|oos?mipGgxq=tV8<2&cE^~6?})li$&4V&1Vi63$6 zkL&h^*LM>yJY01z7LqON3@@9@wO`4nE!%)9!n~GIs^wb3L^aro5tL3R$~F}=B&}HS ys}C5rtq%PQ*^-WBv8^)C&p$3uW&VB3;2W!Ds@9kppMQjz3z-9A=LlM3_0R{Iv$3WC literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/64f738a679d56249cc30be4dfd2f0c5bd5e28c5b b/fuzz/corpora/client/64f738a679d56249cc30be4dfd2f0c5bd5e28c5b new file mode 100644 index 0000000000000000000000000000000000000000..628277ff97d17ac0f229dec53548ef98f6ba08ff GIT binary patch literal 778 zcmaixT}YE*6vxl=u~(;VHa4ap+LlnMB+uS53{w%YTqzp%=6AW;w4u$R?*yS@E(mY! zLsU{L4V8+L#H&QFOf6jyK?I>BS)w4?g<{kb?=Y#|bnc#Wp2Ls-?-&VzV;CTX5KF;< zgux15p4QwNbM1sxHN0NssidI@2-GC>h!RXB0cao|fFnQvQ2<6laAP>&dcbvnoy>cfiauQ(1B z$u`+xF|)l&GfW?Cb;*tfm!sGuJMA@2xzSW8H=FWgJBy3b_^16-{z?A~vm6%7qBNGH zES04)7I^MrsG!GLe`DTL%|96Vr$!&mIk$4oITY_;Bq{_jO>B=4l6W(BE*&F5mDECE zAGrur>k;!GM|W<;y&TyuE!fl(qGv-K^H!`iZ&IXo2?rOSOwHdJZ?n_wg}igKU(blW z1(9#t3o>mn8!tXT`?A^H@w~NRb!76wadE9Dy)^sb)~AoAw3Tw`6LYd6aQHb$MBxVW@*;5ce|D0T2KPe6T*~ zKe;Ocf<+Xy-Rk-f-CV4@U>0O z5diRMgOLz85&^&n#F`j>WjLF2T_>)bN~?XEVyph;Tvc}^^6s$m+c(T(*_c2m6EI4| MNLdHi$rDt+0iO8@MF0Q* literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/651dcc3e47fa5ead53f9b26f911aeb77d5f248af b/fuzz/corpora/client/651dcc3e47fa5ead53f9b26f911aeb77d5f248af new file mode 100644 index 0000000000000000000000000000000000000000..49fc0189b4f4d75fe8eff818ff7b4c368d6f6e8d GIT binary patch literal 728 zcmWe*W@4~pVqh?3W}47(uyLiEvT6s%sjyWY(ox zOGg~Kx$fGk^p1~A%!~|-ivtY&3}o4uLuL6`#8^bSORugu&9RS9K6U%AuzfkpOK-KV z2M4CCGK++PSc6DuFBSznApOEDtOm@CjQ^26%nI^wBZKveirlH!Y_q-#OX^4;>R6|= z`b)3T*P6of>ADwX4jpcP^m1Qk%oCH<9up7QPhF?&K2NnG+kck8lA^!ozccY{;Nn;k z_2_9youI5`Le@$7%+GqsYIo+n&#vNn7!p2XRnf!>mOA{M~wCK~5j4+Km IKObrW02_((ga7~l literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6527e0d26192e7deaa20366cf0701f3ec54463b9 b/fuzz/corpora/client/6527e0d26192e7deaa20366cf0701f3ec54463b9 new file mode 100644 index 0000000000000000000000000000000000000000..0874bb5c7e47088d16d4c02813a256a1d2fd1f32 GIT binary patch literal 624 zcmWe*W@gG{VqgeoW?r&zrS5lMjctxU-W7ayj{L)2clx8}k7?XnvVSG{p8OoIAa_wszjJcFJ-_RKHUk6ye?|sI1_o{hCPoGj;AUVf zVPGs|V9YaUV$3pV{Ir0XiIItkk;8zCjYF%=1|{Ys29^`E zg4<15gI0VH+o)aEKGF6|&g=uh6M60(n=_BG**5ORe#aji6O&5TY1-|)RMH)pJN0(z z)@zH)WB05m`L$zMkVKVTx=MySkB&4@m^6c^h3uIn>$`UUK zj(mLa$=RC*y%WxE>Uf-PXq{9y=lX(F*5ifkXPFE*4(R)QnJIg9o!KSJHfAa7=)M-& z^Y<>;Hue8gNPf0LGeR~?{#j_x*^qdnmgsDON*)G=K4u14g?~C~LQYqoY1J&AkoRm; zo$eXcBlD_iZ-qXp6MLZf=V&l1Gea84MP^SsiyNP;b+_S7vo^N!@v%#&ZS%`feC1u1 zC3+^mr0WeYW5)mg|Nk>ER6Gh2+Ylf!aH$SJFnEgGgL|I5Zj{2a=d)yGK<(I h2kj_nIf1LXmPUrgOyXVd_1?+zeA+RoxR&Mg1pro$1i8Ua)B+|c_n5a!eT_UQIV1!Zz zK?`K15L9Nnq7VnR6oO)^^jt-98#fYi zeU`z&@NxckvPaTzgJ8HK3^UEquN{P)vQLKJ!f+3Vz8oB$DBJpMO#ITB&z`p@1#a2L z`>KVeneX#3rGeG^t#;9!v93aOu&_*E�N91PDiV)m1kUn#J_{me5hR7v`G6QjXMP zJc2hFjW!sWqOjy{&H$1>VB{5y_?*~~bGKrn@VaOVsRQWD0j$d)y5j~>LATNya&fqi zb=LDAU2f+stC4t1{0;G!oDfHgg}6r6bt}S#m9?^OF`Vc8=6Lln99nk2vxO3TX4o9h z6Jej@2~H=Y$;0u34H5xuyRD;|e~^pQypz3?eGDT%z=*GlW$$@}i=ynC?y?p1-n7Hf zQ=GZCyG}1Cr}q@oki|L+_-C7$!j{@;e>JAsze4Y5S^J_FL(J+xy$i^g!ir`}x_6;-hX5M-VR2HI8DNr9OLHLeE6QJ8Aq6`&@dQ41| zBl48u*A#J=_?h?#F?SI2(WMfGIMf~XajZn?wED2I#@Gr{a4Z#R?Fyp6#iSv2Itie$ zYzi8|EM`nFna&&9L<2tdVUAx1{2c((xs1tOML7(El^`^9VJHWD%2@xE@xRLK!X1n* zY}x%C6lIGQ5f-sO3?rHlA~Cl#jQovGbMEe{jv5M+b6s{Z`L-*LaaesCS`y|nqzIdAnYlE>|nx5}od JDY9V+zXQZ(UYP&@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/659084db34790be2cd40eaf8f0bcbbb945178d93 b/fuzz/corpora/client/659084db34790be2cd40eaf8f0bcbbb945178d93 new file mode 100644 index 0000000000000000000000000000000000000000..d6cfdfc328cd0ab6a637a3f356125c5360c8cfec GIT binary patch literal 423 zcmbV|%?bfw6o%jPov&{uW+YQ%MM^eoUP-aAVC4ozQOd%FVBtEH8*v48?!irn#?N9% z%CkDB^PZ>EiIwOZpsUIs;Lrj>)Pbu&fHDxP$}$gGK<1DcH!|V+vQr~8#SdN1`OWS4 zIIwD1Y8P2>npj5OBUod#9AQk@c=?EFqKkU2g+)u0&L}=~Z g5jjmN4I5;HflGgvh78G-^IualJiW@F;2WwSZ#y_civR!s literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6590cd4950285c8566e184ffa0f7ccd09dad53b7 b/fuzz/corpora/client/6590cd4950285c8566e184ffa0f7ccd09dad53b7 new file mode 100644 index 0000000000000000000000000000000000000000..421d571598e33989d993383eea2e8014fa5b291e GIT binary patch literal 981 zcmWe*Hed*3VqoxPW-v4}G&C?XFfcMPHH*5oNGMQcW_aQ3mGY5l_p=_|nf*nT;)89E^L3ryYERhM zvtA{4-Ai#R)`Rk|=H!`4v^Z)=c mW(EcpJ_ZH`5oQJkMn(f>21W)3u&WrLH0=Pyo`C|mZ3h4mt>yaw literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/659154d8626452caa2f932a2535c31d53bd5fa2c b/fuzz/corpora/client/659154d8626452caa2f932a2535c31d53bd5fa2c new file mode 100644 index 0000000000000000000000000000000000000000..7010c518a051427475c36216388203814eedc7f1 GIT binary patch literal 480 zcmWe*W@fNuVqmajW@cn!W?^Mx=iubx=Hcbz7Z4N@77-N_mync_mXVc{S72b6&A=e| zosof&fkBypf#CrI1LGV91~F!4#x5QP#x{ok>i;$V4+)@2mMfVVAOO4OuAiVVXxPZz zKW#z71KDYl?!~Q(4S5rEa{iv*Y~g0JvgV!&vc8mS3sLb5Pv)xuDd!J!ZnnlFal4^Q=P|4rntl z@G>YfF#Km?VEp}GoPj}%nVG?gn}I=#fkB;tf!l!7fSsw4g`t6gf${(U|6lQSh5b1>fcIib|KJ!ZnnlFal4^9(~74rntl z@G>YfF#Km^U}RtrXJ8OxW@akpW?;%^V9H@&$~0(VN;PO=e7%5~iP3ozBF_#;V=O!l1;Q#K6K=YUI0GV&)IIJzLa5A0%=f zFe?3Iw6`JVedTu+M$SAojmK+F+@G?4VhYQz2R>nEp9dPv_vgPb&EGyz`qSn|>z{s~ zJ7Ysf(VH#D;%$uH&$EqmUi9Pct>{xZeAWeLlOyAnE^b_I(741vmW?@7mXAe@MFi?D zR8R_%R%XdF$Z5c;V4>#{ccg$2rXV1ikRp=@WUVj@s{u13qXAOXGG{WNx{r21jG38X z5)T7IA2Wljg04*Fh0lj<-QP@zz4c<#`QJfKQ&^{4^OeQjs=NEm-i3penIX*}g~`Cs zPwVo@vI%OUQu7YkENux1XXX6X8p!fItu(iEHOH+}sT2RjmQ3G#&R%xcshO4cw3rM8 zSK9vEpR!A8V!|ycbyd$*<(B%_x2CceZ?R4MzUp&Nv6fWwwyUSJlNPBY%ik{YyA1$} CIOB8x literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/65a5c1b565fdc69089dab91218ae5ac64e5e29d3 b/fuzz/corpora/client/65a5c1b565fdc69089dab91218ae5ac64e5e29d3 new file mode 100644 index 0000000000000000000000000000000000000000..90e755a2c0044ed30a21907ce9f7b7901f10852d GIT binary patch literal 478 zcmdUryAgr_5C!*mAfm{} >Bj8z!W8xaASu@+|+hC0>&iCe(V&bmYsz)iA1VKj-S z$!wl3vb-pltM$gWyM1*yp6c@j9#FmwgDda?p5T)8Dc14%bMAxsUB3tIAjb%}M3?~{ G=X?QBa)ibJ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/65bc3b3333ef4633f341bf82c67232fdd4f68df0 b/fuzz/corpora/client/65bc3b3333ef4633f341bf82c67232fdd4f68df0 new file mode 100644 index 0000000000000000000000000000000000000000..749291b98e48d16feb942f58da113d3d668543c7 GIT binary patch literal 1048 zcmWe*W@fNtVqh?3WQSh5b1>fcIib|KJ!ZnnlFal4^9(~781xw! zco~!#82&RdFfuTRF))ZRGczCNW?B`o2YSCU$kms+9_o|%%KSyHSJP*SPjQ<7pJC(dhVW?*h$X<%Y(VPF{r z=2{q7K)En$LQ$;|<{;6UCPpQw2im^#GBPr*0AF*1UD1p+VzjD`Ug z5Ccp=fEEKoDf8{yw{J6m2=YNFix}ye6>s0ZtwxNto5U!B04C=8hm4CGmm4%LF_2|r z4wdC&5n~bgIeTgT*^a9Th1)MFxcsu6&L_(9$)FS@t;~{V&>)fnRS?R;iBPaGUBewm zv~dWN7Hv(O3>#p{j|XI}H4Cc&Gb7`FNL<>3Wbz4FZwbJrAERsic_bN7E*?0_FTo z`#i3wfBJLSch~;-+SOL^wLkbhB0^e(EB>@ju3o16c9|;I+tfKdHcgX~e@jR*K9orP zbs%Y<#QPV`&J!ko&3j?rmXdmLjzLM{4AW@`bY$;tRo}Dt<%efxjywl9iLJYBarE4q zLaAf2Ir}<}|N6hHp2`1`k~+`Bk`1#$Y?l0SNcr_oIO#>`{Y;~&Qw~kt7I=u;kL|hN zHp>m~EcXQa{?}i;)gz8QU|W~*>`++=fo+RUsQdiX|B(55{e`1%m3z|X2Z%8o5Zrz5E}D-E%E=`tiJEk&=86>Q6>a=z0v19{3hn#@HeQ5)ggL zsXdy7=iG3!9x6s>TibtO@yRywQMH zJ?@e%^MS>4hZ)?x8yjnohy;g^U`k?Oif3SoF=%3nFlb^txPY07k%@_u;r9j~z10Gsr2J#?5 zE*=TbyyVoPywnnf@XVC-%#vb-fRaiDpOO>&hpY*t?R*oDXYvP zVIbCkT>%eBzc34{0W%}xe`F7{f;`;FVEv*Zcj`6Utnb2-I?{(a)+w$2(rfg!rZD}y z?nRkHhua^$+}9cN#ALO{#6$K|*J-=YQ?1DMpCz!Q={`dRkH^C~K0C zby7a_vtF{=oq6xGtGFHphtF75G_iuEPQE|YSDssF%^Vf}77?jX-R#{T=5lW0h>0{x zZBP?qW@KRDV*sZ)hE5g+hE{Nztk-4iezEY$#O{0lq2Q;!_@0#i#(O5L*oT$~<02%^v?(TmlONSSWbc99{+jo~zAZTQ;vCbG z#1e&YSQP&M{~wXnp=A#Uh%p;5I506V*f2915C9AZgc%q_5QUWh14u7}00RSovZf@p zXol&u13I#Ix5n-1dimkmHbFahbY(Ixd_H9B z{wD9!|2zNxGyDU`4WuGrrqocRI%Ya3(!nlbM03#sW+sx=F;m$*hLLC<0|V9KV?>4@ z71J|3{H*!P;%?R5{bujN!OF~#W{|>UVCbiH`DEDyHBqT~hisO%goLwlerpY6d7f69 zTe_O#)~VEq|6)s~Z$4))yX(}<$~{_427)UOvpLM(B{ebOmXx}x=PLSVe43OdL)_3^ z1wGm;E6<((|5JRu!}1GR<(=%0<}}{d{BPBmd^pAOCc^=3lvX(rB_=Uyz%>mKW(_KJ S@$mYJoZ11No9=RBuWbNH4#j`~ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/65f06431a42ef4bb9b8701836beee0c150e754fe b/fuzz/corpora/client/65f06431a42ef4bb9b8701836beee0c150e754fe new file mode 100644 index 0000000000000000000000000000000000000000..cf7a695db38aa6de0e5480ec76be0170a59c6500 GIT binary patch literal 982 zcmWe*W?%?pVqoxPW{Cc9qBQBJz~7_tev3^mED{P-nHgR)FR?K>|cBP%O|fvX|60Vf-C zC<~h~lVhl%uz?_m!@Mq6X!KFF|aT(GchzUurP=c=QT7pFflSRGB7nTF^Hm;HI4I;-OtF%z}(o& zV9?mf)Y!;!L;J)svnNTvKVR@&8`pH*Hp0KfJy-M!7m*Q5e2lwxgS(j=p9dYR9x@)V_J3cZov;VGN9AMyQAj`%a zD$BI7vi6S9&|>dAjr%e*u1eRh?`!;tV9 ztBNL8u++)-r~1ls3$2->!rvky6{;)0`@>w$O&l?iMyU;IV$2K-EPMDC2$gvrrObdRcTMin tW`ndoV+X;WbvCE2iGtjw?Ye4y!i`4``)^MXJb1EuW4Fo%quygXZ2`LVU_t-@ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/66033b5c7d3556a787805bdb0074ecf18293914c b/fuzz/corpora/client/66033b5c7d3556a787805bdb0074ecf18293914c new file mode 100644 index 0000000000000000000000000000000000000000..bc31d6e5ca87523b8732d6d1212462782beeb621 GIT binary patch literal 2101 zcmeH{v1$TA7=-8Fe{a>?T|@*WB#Nb2jYUc!q_VZp!nfHi4lMEv3FH}4r1A}X9ZSQV z7M=(;0Tu4+hGlp5pJk_`tkVE9RbF6lVV!sb8asgiT_A>gfqQ~oGS~%!uD{d>jgYBp zjIwFAO-14eY>k^toz5*2ckt+U(~{eX7XB$|!=Z0xAz#o_TXal7d28XYACO*MBCHd+wZ@bI-~5 zo&Wp4Lq`!{g#*A6MH;I|)WRS6*D_WnR;-`jM9q9?CEH#@_E%We3?@Sc0C}JTfDi!) z04e~`Q3Ut79KZztoFBmXKt9eB@{#64C=S8lNMQVgvscNSd5*QT1 zjb^%Xc}!<+AY`b>n^`~$mN^SrLJR1nB5(FSv|zEs%{Lx~JM%CJUr&91gaFWlOaK#h z;Sv&nfl>Qm*8KpX%d^YJ*QGB%(m3RJhUB?byV0^NcR|YDLpz#IX>QIA`pE3^oW2@u zMx;)5RC|9I&pLTzhvL~BdQ98Lo1EL(wuMjG1%|8g#x68(3fE88KcvUts2`KL?j2$5 z@YrZ~MMk;qp4Ifewy~x5wd!S@#cG}{U1c|p1*Hz*Py`@_u5cyPAfoOX3V1r6mL7Ax z^n$EFL6cK6wpOt5NX*a4<)X#Z(7~%h`i_}9P_XBzcmhNbL^yTA1Z=_yU~yk;Sk4Wb z&=KmqMQSanW!fdrGg-siHU)JUUr}#q-PzMG*yVHIqQoh?#WttR$noHU*bS@l<`hN! zw_^lHIYE{!^6GiOjZ@OFSReX>X2>%W_QG2S2R3{`zUSt#|5#LZEIv*%i{qjxH@CDv zS22k;-`!aA^xy$frL5077H7voI*I_i0uW&i?7{<(EW%{GF_PZ*&He23J3?`cnyNGe z3e6jK9~DSIXfg>x-*tO>COaLDU-4``q35D;C$nz(;UQY)S{v7-A{!djBeAo{qlU&!JS6~XfO67TaKC1us;ByqX->L zLA`iDBFPX%#q>h+BQuPOd6znbql)ErM=pnM*`?J}kkD-)v`%2RYFKrFCZpHsg(A1* z0MZ4J8vwZq`A7%kBb&to3B{}gkVKR*OmVtogGb&L<{2vTZ*ohvY9 z$nQ;azMi|GrkElB(fIA+V#a}6^tgG%ZQ$EG@|yoOKiAucXJyxO@2BUzo|iGL66DC#QFy5K#c6{3Q_)Co*1w5Co?M zo*uIFU2XkdE1#GDM9($(%Sa+O$D`AL3!V#r;Q+0#6a^3C5IqaAy4%^>^ z9kmgz#5Ox7-VrW`4n(}W1{1)=(26K)L_`P#85}}44(4(rqpeMGd;|gYaz7`{n~T`T zY%{TGZ1fhm{SxJ8@l{$(YJEUmn)y9)SgXm_7t2d4cKa~$y6(@T#~0q2cd+d~Vc1sN zTXpj%$DZLDJ+mI=#zHT%m-=|8q$G8xifkShY4QW~1kMKf+Ty-z>X6Cf&^nK47TD70%SROIV&7s?TTe{Hu zgyVtOqWtlmNA2yO#Btp&-h3Gt?ccMgi&1Cn815|KjyfZAKO z+tP0DoNEGYL-w5yjg0Fi)lR|@m{2rD?~LYu7x822_4S)-I+@GHY;qNp@lRn4#&8{c zINZ2n#tz@CC~}-JWw_&IsWa(Ns;U$)ujo)d2~<^U*LmT;)0$mH$q@jG?IlZpNGzX= ztET6im)X7>8FA=6f10OxXu?=k;2junebA*%32(CHr00RsD63f4bBhepVwaloItec0 z$5Z*03nO(Rssv8g^qx+%y40WX+g@VrxBZ2pljoWwYV1Vvo~?&<9v@yne#|MzSi=8` zJ+3+rxu?n*YYGsk4)i5DT;4Mr-e;TQ#<@~p$@SlFxvy!F#_cNKhP3{{-uLV&&6V`B zn;*1Y`gPO%?=?0GQqPSE>*H~&I<@sE_qZqW)+{NSunQb}Ne$?8?+#(*>}|=ZUVVDy zLpkEgYO51ZtWLSP2u%yCoP1?mtJBQ$)y6%{s=sa5a~?Gv4Ed$}a@%8_jG(Vw=_r_# zaWoW&gcATwS93c`?YiQX3Kv~O+%3l4@Agwpr>k#%Nlv%XH?Jyv@}*LGN%X~gJDKN7 zcM>%>?!7>LT2E~LNiH|pJY~Y8hpvJGz`WIa+rRqp5(~RZlOs)EmhU4CtDLY~lkom` z>|2aRWkNUB$!_$)vzXL|qYeL#9O}NS7q@<}+s;^q;(0Rr=ltGqud4Vs_Ex9jyujf4 z!mK(?dxhM7Iq;RC)?JTZvh@rel$&#uv5`tVo)`NVR1I%XT(V|;C)u+qa&6we$O8{& zuWS~~TG`AZLT0RNs&w*cztu&v;}P-^?WqDDt62DmB7l5^EXrrE1n!mg+mHXZ8p&{k zDrKvrEIIABy@chr9e^3x8pm#Zjjp>R$rxP&-x^&jr_#0IHM-83k*=t?>e53&4jzDP zQ8GYcYG;iG&>WY?*1!(LWjc?PTnkw}3yFv7_I)jBWjQ zXKV`=3oDu@{Z&*sZr?6?hEl}xfo*r?@VD%8fAX>=X>>o)86XJ;n3c!h)By69l=sqj z)d(6Ppwq2ZRjJiF&0n3WLZ+LiQ{2{BjFDOW3zTP_yhY-2u6Ax`PxWs9Kr`Eltm3~& zGyh%|emx0KYUXz&31f-3G-^ocn`;$RrHtbKHJ`GwFpKH~9MbbSDeY|gkgXeNBE9Y- zBD4935Jv)C5K2Aub&xvt;(EN(C8_;IMD-6@ggo=@Txz0cl6&esbn8bWsQ__N z<}O`BRon&5(c&`;g2!~TT9U?0o3w(2n5I(+!RdwdU||p6l>Hly66jh$N5Kt#!d%dR L@O^)7&foF@0rILr literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/664a7acb6461717b5f9b6d0a7293d1e73ee2e123 b/fuzz/corpora/client/664a7acb6461717b5f9b6d0a7293d1e73ee2e123 new file mode 100644 index 0000000000000000000000000000000000000000..7c5b8663ecbfd2ecbbe45f97ccb5ab00f8b60453 GIT binary patch literal 155 vcmWe*Hed*1VqoyA7cn3JgqavL7&I7E7-Sg~7{~^2OPHZXzy*+iI*1Jbu>cOA literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/664bc8798533a1b6b6be2db217238cd1be7404cb b/fuzz/corpora/client/664bc8798533a1b6b6be2db217238cd1be7404cb new file mode 100644 index 0000000000000000000000000000000000000000..b15b870d3702bd37efe3fc3b8ed8f984b4348cfe GIT binary patch literal 1077 zcmd6kF$%&!5Jms&Yyy&ms1YqBqOH~U7G6L+j38`^be=)MGYAS6-pW$Z2u2CmDDhYO znc4j_`?^X?1I*R%gN7gKJS9MU5eN{#2!Y!{m(T^|$V~RkWVBHuG(tvxW1LU(b0iXY zU~3XH@^xkz`j4bRFM7#*v+PXTY!+7<&qlW{KP?{AtevCSYx+jJln8}Wr48Dl3f_OE%y4NqMnjOi%W%mPJ0e`K+mH+?% literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/66590baf9e116e67817526c8941a73e922cebd63 b/fuzz/corpora/client/66590baf9e116e67817526c8941a73e922cebd63 new file mode 100644 index 0000000000000000000000000000000000000000..ad605c03da1b39831fa2dea0d0b5dceb5d162929 GIT binary patch literal 544 zcmd6iI|{;J5QJy<4>2(bD1pSv2Ucn`DJ(2(goqcg@H#0xhez=QS_p!LUGAY66C`N_ zD?eD+S%%%&$Pfz!=Em>~IL?3oW8fhWAO<31|{7`TvzC=K)tQ literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6663a6502f3ed213b02bf7f03ce6931ae8e2b60b b/fuzz/corpora/client/6663a6502f3ed213b02bf7f03ce6931ae8e2b60b new file mode 100644 index 0000000000000000000000000000000000000000..1e1fb4c41ea16faf144d38bd8f55119fa1534728 GIT binary patch literal 661 zcmWe*Hej%1Vqh?3W_s{k=ug1h-LW^lijVsk)^xjOubQn_d-K4oDb5-bib_Qo4sbCr z@G>YfF#Km^U}RtrXJ8OxW@5a{&A@n*f$#Uo*0 zP?B0?kXoV;o@tPtSyHSJP-39qQ(|BsC(a8q91PI7)UqbhKp5(DCPp?6upgKi*_oXf zSe|KTKH8r;fBHUsIo>H-PKZ%9V0+@9c_Ve12{E3NDGChmS0l3wu=4 z>~UL6O6IF<-Nz}q-sg*y4lWKb@H3EQV-A(&V-aH!F=zpMqsdRqfIT!k-ayTu$p9P* zvdSzH1`LeY74U%c3$w5qFf%e5AcZos2LnpzkPpO|nHUOq7#MPx8DteqOXVq$R&+S4;#PIw&<5jo6;VB z`OLYJ$(J3%_BGvq#-xyT*QwcYvwy@7#sf+dJZyd((|jNzuOz+U(7N0cR{yuu0RUJS BxWWJc literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/666523b595f1486cbd1c80fb691b3cd89de0a315 b/fuzz/corpora/client/666523b595f1486cbd1c80fb691b3cd89de0a315 new file mode 100644 index 0000000000000000000000000000000000000000..69df4ee7e4a6a1fbcdfc2cbbca24e52d44f1a0e1 GIT binary patch literal 16645 zcmeHO2|SeB`#X+Ak;-uFH8p7T7<`99C{JyZ+< z7AOEr3@JbIVc4Q)UM1?&;}6XrTB)$^v4wbbv80#ugcCp@VgN`1EdY23KmbqzfQljL z0y03o0qP0RxsZ#xK`wG43quhUl>nUw9cJgsW>BCMNy1>2{i+XA2tp(RIFU|<5+uxp zKvF=*yU-P&9NrM8NIHiEvy7bCUThY9IMl#9B`M027x}Ql7O~hg*8pF?0CqUdi5*3A zVEaOKB`LZYG-H@DAQPIw*-BFMAD|h7(cS#!Vb}u?!`UhN`w=3*IO_o9B%vG*&^N5! z!+7Y;oA&0?0r#~N_m;o1J1*h2OtYMspQf{FOIBRvuNq5I{3g*a$v!F8R1eik39Eh@ z9A&xkL!8X%RBA-kl*JC!K4Y_A`(zq8ZtJ*kV(}uqm3mpa>MYg$V%O({7}>TMZakD+ zpuKqp^+{F7nDHg5`7EnpZYS&WZ|wI=e1&2NK(d|Sbf`wcT-2lqRD$B#i0gS5#4DsV zSj8Q)Di-dIxV5r?KbdM;1Z7B#8~6eWe!l{N2r&fViM}uqe_;-=dJ-9&dc!*KgM!M) zVJ8#wHFMvtW4v3w*ssp$vg*lGtDBxyB+Y$jmTRAKa%^h8q1_Ih$RNjUvb)26uls;f z4oZsep563_9V@41Hb3y3M!*|mpAmO-gkCQ-yfC|Nr=_hz?!B(me0%7mPt?? z>SCmEtZlnQq4->P1}km^6+-|)8t`=vBoP2u$=AshM#$PHKR--a+raCVb`zyCU!G~% z#(fn+B{UW&p@;kCCc#B}R!n{~pV)NK=nAcL;+|KE>ts8(3Y~J||oE^ibv@ zy{F^!N0!V}z31`t#D}^=O>){l@Y?3(E*iHq42tt>d-J6pY(@DR61h@TN>oqdw1)<8w;Qq8?Nler{eEa+eH{ zdVt&j$W_Qi>L3?c(mfEb+bRK+Ac+~Qvahu!Am2;p)s>{atGx<;>gVz;mfUUarVKjs z2i)4tAd_L*-5l`EcXtlpRCqkTQyIkC-JwGFY@!HBoIkA?B8J%jLbG8&({a|$vb#qiqrUyl(b>r38)^F_mD^99&Q_n*v^?JaHg%}#JGIzXTa2dG zg=wDXXQsIcSMqXG+Xi)l-09RvF&9_Qha=W;FZZ$E?mPQlKp|lO^w_Ti39*+X2sH#j zhlAHyOph6s=BFZ~GG6LBty~{UVyC)Z(Px9V6+>3fJ1vINma9i81`dyJi)Q;rc`E+2 z&HvX|7j_KsXx3o-=;aY{PLYaX;4lS%0t_g75xUM7`=n2381{Zzloj#RS*e^2@w^_t zo!;%ZyXP1I0AvCHt{%1(RR9q)`F3S1DJdb@7G)@w_=E(T_=GJCHwkC?M1-+?yo`Oq z7Q*ScJEIZo;6!LkBDkp00JMS@BymF$LL`cz2-V1+%?=H>G(out0*;bzC8)?F<0F_!rAmLJ%W8gf~x(YT{H!9H2N&7k_Reg5L&E3^q6)@jm12(MuTZrECcMQ~x5y^k$AR)cXS2nctul}a-V&0+sx6sKaKP4=u+^0;?fwvNZoQW^~j84 z(;t&b(~npjd};Bk^E94Gc9Fe@nA4FprWwOJU1g8#s@8RAH)#uaUT~?ZMJw5FrxO(e z0(_>30X`xEpz>;3UEa9*6>`}lFCs2xoi6vDQjUeIF6ok7YprKml=pJI+}hmmi}zR4 z&gQKqX)N4wLE-gL(uv>5X)8@veR6H0Dq#T7?lj-^I?^)QY+Rx7-pcg_TP5Bp9UM24 z^TRJbcht*=5F7D}#%tHyh}vGdy+#~F!H+zzMQ%4l9RyJ$tM&ocX* zZNC0Tvp1A#jF(P(N(P$@hTn62o}#P&sKAsp1Rp8a^=-~v{i1h4GNWhCzar^Y6gq3$ z*3j*b2M<|v1`SyTK^FstEJa!wioF5P;Q9!;h^8nq$3qb=A_E{7k>qb<{RHjT{{HfX z;79*|Gx+H-R$;ht%rhpJ;TZ$KfW{i@(`~E^dyI8ss3dNzzTeGQ3q_5!>?@5G>kg)L zF_20CAO(kL0EsB+BQ|!u%|DKSL;@hbrj>keeftM5{;7EJudrW>^+^cf`?XR3gwWvr zae)2$^K`~P`}KeOer@@m-mlFV3_KPVq)o9Qv0Ia<$#NkRTbJJ>6Yh*l`)&4E3AM(T zTCEZlt+c`e-!J`kxGita-JaK+Hu!S*jd?Ds6_4EdNhgp;0n??sJf zoLySEwx+i|$%cTRcdtgMPkNdRO7 z8C^0!`TGDM1B4Bb#Q<3Zxkw=7ycVRK5OFBkof9EoC{&=!K^YR}M!*!rSw6nuUZ$hW z_z1@wS};uMbcThg>1-t_hDg&=c#}(?o0dS?-lPlBkV62Pm^UC)Z*yMFB>uRsje5v% z$?6pAw+k~Wol__cXEJvn@zx$UkB|Q-p5o2U*B?`Qg}v52IQ2HG=tlO^d1d?99VNfg z?mj6v=X$U9N#q1wMMf1bNzY=*G&jj9a)uRNQuBy+bR)BeLS=p;T1|m~LIBBlY#~D+ zV5nG}=$m4G0Q#bE>R4&{@Llr8xhge#E3;Iey$)0gb#{Mn`C&~xeci^I!o&xD^jqGs znZISRh-VkCu0f%ArHRAapVY4Bn_sb5g$=cuvpzwsuHlk3cS9G=r+J^gn_8eovrBT# zOiy~koFLgK3IH|y?25s%4VzTy*7_06lR7r*K8tS6OgV6^k&<4eYH-Zg<5Gcqgfmg|lq4f@gvky8ZuDgHC z?Q~JadHQiYVJi@dB!s~%BM2ev#kv&b$q=%_Aj^#A1fysU5aRmt^;bd&_3;A&=yqJ`Au0iigb$M0{ep01q!f0U!k7e~!SDjoof))Ig5yYwplhwi~{3Ui~&g#Lu;( zX2Gt;QYQm@r914CU9*dUq3qBpSBk2$aJC7bh}g zcZNMLC)t-~re&06P1+z`NmQ3w%CXs_NQ-FYS=J~na8f^Zf766}UJ$n1JTC5?c(5Bsg{hrL97tZal9k01f@lfMZETMAP9q$)gaurA3 z8|Gf*n4dfT@UFcHv)f94?)X^i{K#m2@i_`WCnG%;bl~Gmw_V4kY%91ki>7Nm`qj?)Lyy$Y<}P|6Xu#yc$ligr3?QQ;kdF7p9$5hB-d#hhc28ZrI zKi#kS(Db6xj8LOzX5y6+)|L5mWjt@aqdeo~Yfk*BE~{Y(iawPYpQI71*1w96 zp~e@Uc{63iiNe;7#2}kdUV3xWaMQNp@pu415s=0_slKVW(==%${>ad-+A)`_dUtA3c(* znj0Peg0~}_{ab_9OPf)Khn{iW{qKv#J>Lxz!ZSWwOG?9|>&WyZn-ff$ zoUt^+dYB1zFx6X3bGcSSaaYZ=EiJQ=M-zlvi-Iw5G^!dyHt_|z`E}}g;(;p;l}8p? zC2w$V+3+&*`N*fJs*9R}%-ab}a$)eDlHsfGN;S<7RGoN^nW^kgw$N5d%18Ru#(NzS z?kKuFKZ0TeB1ueKLXu38l9rK`!_y8!l$2G54pUWA*Pww)WdP*(a8yIM7gh1S9?+uz zK*WGD0(wyezL_BS_qG37!7!jFd^6477yo*}r)Vq+fE9+#vbG!RdNVurMdi^qjw24M zkAC5BdHsD^QfOIf|Eta7%t926eFo1X%`aWw~$4fyvT>H1GR862Bx5D7ZO6n_Ms?0 z_`m=Fp9ddlSEIMIwA$(XQSgD|f$kVefGYteCZaSD8spQ)$9LZrL*baMUO4r5ZG0t$ zq8ex~kRm9cP?UCpW75x%Dc%_dS&#+;ApVc$1fdY2;t&4;S}>V(b2<~pYr4YWpa@KvByE#kn=&Lfeo*0l*gnH4yd;EP}WWs6ki)`xK%@ez>UM zZqs4&<~-zr?p269nmPizRes2++y2z&WN`$#cNHoI zQ3Vu$8Gj7H@$f`c^dNqBkHP+d2n@Cxwg}f^T>ZC;;{tR(J5`jht+5f%LXyTFj(zrib3lkFZ@mcViAa zz%OeD-G%mcoH?AK^NTz2x6vxD_FKt!+HPe$WZhd3l~Z-*NkWrnr3s%GCKAMdMwSBg z4uo5iV~#%;aaFw=f(Q?B24MioP+vMrzcR5%QBRbaWM*z=Ze~h18<~{W2Y>o*WF5orciAxGe(vXDUWG4}N zt+2dd?n*0YjO0!|9-oeoZl8HoSrU9W`RJ%OlWvfWqdgFt^ZFZqm_Z!<*7Md zpdz1gs~}~^3Yi%e5zfZJpD}$HR1u&*`AK*`JDg3kTNvW)wUA~zp0E6-&LrqooPT=I`^hiiX|zV zd+(-`eOc1jS1O@H6DP&q+fel?sdo6w*e zK4|Ze-(}ZN&l>Ul^%5#IZ?f&f4iUMqZ*u>HRv!gqo=w);xyrEZfIv?nf(2w311NppULvo&e9 ztT1-Kf&d>cHmldz`6+P*WHRV~Fak8ge+ce#M!``GdUq4r^bKjLLcgXom|wGF1@rx# zey?BqLc08H`Z*hArsDPk>611YJDz{F+V%uB)z!$UHOVM0+V#Nem!3gaz`9b!kBUQ> z^_7#dmxWcQ96#q`SaT_DOy&sRi;cDMDvQrgZ@zYYS&mALOGEXGD<0;~kLEfi8+AEp znSWZ)d|~}=3l&hDidv+QrMpHMUsfY-dp~VVh>Vz8!ASKD^DUY>%$*f1u6c|wyluTt zv7GT-8Pofbu=r7~srCI)$HdGNyfdSoQQ=$9O2a3MgC4eb6YSa`r$w-n8w!pB*f;yP z8(t|){mt&C7ERXCG=1aFYa$H1%4h@sbxEDML|=+r%>Ecw$@z=Z@sgj5ngW9G@ann* z!h_QMvKih%!0=qBCEnH`m_j-<$ui0^T&0h5Z7of3ny#@QD};@2Eyn*(-mb~grAzxh zEQ}Q%5)tOZ3O5O3g@%L&utUP4M7PH7gA7aV%P*Qfl`6jqk_tKEb#3Bj&n}K#@bYBK zH7gBXo9Nr;RX1)qp5j}XP_0rmN%Ny~YQ=-NDY9n_UK~xM$(^wE^D#+K=@8OZnztSUjAI|!cNB&c%qq`pTr;hQL z7al+$ZsdPM>2qEYUXo4db6#<&@Vw%T!Okn@_c^Z^jC&H|0G@=$d*3Jj{4bqXOfA4Y z$=`61aG_!tQC12NDVG2G1YjfrLc|~>AOwVf2|oDKgzY|mALPsY*VBqKI4MpWvmJuh zl-xSVf{s?|%h%oOstL_)u@l!w54khs-6!7h#`yJb!=E?1 zmnPjvT;?>~&7<6OUVg^pWbETz!{tv;M`|A~vhq#Llvy5`mL10u*XHt zGY-dhKmdkda1Mxa9|E9#t@Q*13jlBdItpA}UM`&?w|DAR?vabLL`RqtaPWl*#1!XP)FOKYdWytVdbRma|@mfFd zczA(@CpaW$Mgaig$r~tnR&nOUSULE7s#VYdrq_!FT>%o?40zimZ*Gonw6P^%Kpc`# zBoIXe^_kBJC*L4KjN>v8_`o~A2IC0iD=A0=K`F^E3^ORk;c$e3UiT09_X~=Bce;#U9zvZ0E#Jr;0a-?u-h;_ zb>>{1Jl_kGGO5P4*yy+WpD|GwKsTEujjeQzL^ivlUWsRJn+tWL8R@!D(eg;QlT&qk zXbX*g`}N3>I^JhTVpbVnmA z-CEfMDnzQGk4nY}7v{%Sl4Rvi2lS+l9@SC(*XGjF*0|5TN_?PG;UYgu?xszP0!VTV zO)mKl6oI`1{@6RR)9OR7e)YYJz-NRsr?Zxkg7n{k4dXNevm||m)qs`9O%y{hkeaA!>-Lp0#{pr! z&yX5vG!pae*c7SL_7gGNCz$p}@_ueBXIOPGVb#{pqheUK>zZH~LFioNc@D80khAiq Z?j=@8j5KAggW(P0E@fH|$$uu#^FCx#fm;9o literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/66d0e2e70e2257ea87b599ba17cddb82cad84fcf b/fuzz/corpora/client/66d0e2e70e2257ea87b599ba17cddb82cad84fcf new file mode 100644 index 0000000000000000000000000000000000000000..aa0e03911c482f2865a56866fb0902024ca0e26a GIT binary patch literal 6607 zcmeHM3pA8zAAjC?XNDPrGz^6?E`>Ba2D?isRxNfZtwdO2%(~}R_ur$oDj$|skv`OZ6LG<=+P&uPE2=iC10I5W?Cp4aof&-{M> z|L^~MXea_KaR6ALNJG`IdiWE+8v3fl@(uGFsTq$gW!tLBehMp^z(mLZAP;l_5F!8p zKotNQir~JK12}(x^949>$j5m=KGJjq#UVHx35=a`@+_W{M}hK0(xMcHlwo-UArJsu zX(|UvMAQvWq~dJdOsP-_8^}_~t`T7zrYqNv%Q4l4TG&N0Ma?ms&4~)oKw1DQ&^A9h>oq3srZ=|0eApkTX z1Hgn`xP$~?Xw-I;_0V7F{Nn1#^}AOdYZ$aYNAlRJ(_m4Wvmj;vksXa^v^Hl2eqwrc zPH(jiJyJI-s;w`KXO%p>L-BkzEvEI;O-^m>h`~pkVh?@dSt>h*0{43D^rKfF-@L zVcEB=Lx!pI7OOX>mg*G0%wP>|+Z5Q&yr$9Iva`ESu*>_Qd9g!Q^P22ZBm2V(VmGeN zol_X~@AhFF{@d_%~OTEQ=j*$eL+?%((o`GKqZ!4pwgvG_QxOpddb z+}x6UJ;fyD`EE?Dvjc}n6|&yzS)3gUX($5l3P6N8unP}BvIvv$Ok{WOw-2*+-@_n) z#fXV&eSpxce(!OC1cb&DAoN+kuX|$7(Rjxf8wlN(nH`MUl}87aGuBz_^uO2~7t&TS z;#Hu3e!fMyL7$D`;+iis?)&sL4Y!wfE9reM{AgsG=H1s9qYm#p?yvmnAhP9zi8A&B zAT$)A0V&jr7bKDvp{ST%XkKKxQ4#M-yKqFY%;wnDkS)8kyYmye424z+>=sSSPS9xd z-}FL}yK(^O1jsFbT!(z59rBUQ;)R4_Rsu*O$}CE8xMGb*-WBHQs`BrYuaZZd62sVN zI+I1zorTF_wwtj`Ek4BNm_rMenRqzkn-`AFkW_?1QBs+O?du^`yqh?LC@b1l6p=wc z2KXMM;O=vrZ*l}Cbou>hPB(KlRu|FbKN-7QR75{?r_K|3d@JWTS#6}{d;xu3_qIfb z+qC%_Lz;1e`b;LPPFkLQK4`Zmd+S>d$rvOQNh15g`y{a0rbV#N|dtTbbba2m$I5EI{(@SxQWHjbOur)6$G#tR8_(Yw@>k=>%(`vYrm^+9F(vWOvW zHqH9Gl7(KU><`5j=8bhfX>0o|j_Z2)_UnLXzwX7I^jfBUxRZc8V#f&S3flCWZ0GIq zpnkifTJ;v!PX49vhkuX1zZ?D%n_Jm>*EL&B7bY6rczK1-OIq!_PA^We#9QxamW9p! zIX474i`e%*He%LJ$e4sVtI1Jq} zP!NYs^%!kQ_}<{0>GRqomx-)_u8||BRK*5QJ`cnSa>@l@@ z$OARbXrsSCt-m+X?&`jw@ZRMquAFQ67F@rB76%#^Yu>H&sZZ-0==s2w(o{h!z5P+^ zmESha|3NcUka}TMSQn35-JzpTdB8oDyLM^exJ|(5YpQ>*TURhEdw+9w)ta-b9?KC| zRau^TW_iZdS!hyF>EI*dQk7leWwwVf#6@uuC_kaO%MFWg@%F&eWr{8 zks<=1@p?{siA`s`Qo-WOh@1JC+x1zV}u{biB2Vdc<9#ieUEbdWtNBiH2~h&=Ro_LgPA ztS!qd>O!hzc_VZxb@PK#;@%L+fCdoR{ zNC<^zeYY0_0A#_8WQ}8s$r?II*1eHrjI06gjI0&XWUc?5WJSfzls*cw@c?9D5)B|R zHM7RsJ0PhBNQAVSca69Adht)yi+_cBEi=Us!s<11x*2A?b2x>(K0O)WT zC#W&A?&p+ixD^?k{EIx5WeUd)ZLi#R;OO<6v-DrAww9(VL}Mu8$C-= zbA*r+1v%yn7sz8cL5Qi~-#-)kZB^&DGp4U_2JTJJuP-f-@g%fPI ze{t2eED-lElAXQpd|8OdObsxD@ZP>%xOn&A!~4Pgub4=G|Nj{n7`KQwPGw~H&*1*%?DVQFmsQ`sf9Cl{LGG-> z|LlrYVMjQ3Y`lA)IVkOkozl`Tzc#=9+qn04*n)irxEL7t|1&Z$GB9v6FflTK05=0; z2?Jvx17n^+6JwS^VzHEggaIcT zbEvE^3zGqZ0XK-r&%(mY#NL4HQ|5FAgA^tMZ+kwW;zdGwt0m7aKd?aN)u$}+g5b!< z7oVKHY1ljA?52*#>4vwG>gHTukji?zu>CBPA;$rIpD#0IudXw@WZA|nWgXquB76Sc z1>2_ne+tRZR%k}ZX30Mb?Kv9~Z`cx@El|nBz;KqCK_ZbwtGa)ZjG?V&=`*)qlht2U zy`M92?UnmHGmgq=?M{iiuwJMl$SHfxxt)xOoN>Q&`qFiJHdKCz=`ZEm_g_=elYf1c z_P6fme05E;^F)L;Rp(fEsTQAAh~Hc;*=X;5C{8PuAr0gq`>*0|*DkQv-rRC-cE-D{ q1?L{$*Un0RpK?p<*ZXAdj#ZKI^Uof5dhR}3n|D#wglY?NbpQa1U<;`L literal 0 HcmV?d00001 diff --git a/fuzz/corpora/client/6747a445de70bedb65e0684c725b7fe8d46ba4e2 b/fuzz/corpora/client/6747a445de70bedb65e0684c725b7fe8d46ba4e2 new file mode 100644 index 0000000000000000000000000000000000000000..b221385c01bab697f2a38ccf63e90b2eee2204f6 GIT binary patch literal 3156 zcmb`JdpMNo8^_37YbRoCu+`(E!K@AJI({k-?{y!YpO-zF#u z`5+MV4T`Su4)8JWIGpjK;lgn6+-mFjFP66z)QGele7i(=>m~=NfdWBBpI``vAX5l} zNDu_+KnM((peSBT2f||^JOW{|fDDrfWGJs3MPLNcr1IWvwcn@r7!Yt;PT5NsBLo=M z!9rjuRR?I{&@c?n2nh?N8UX{$cj}eOE`O#Dp zV66I-2A;4&m=rIG=EoD)@HtyP$AzC6mnoQ~jtj55Wy=;aR~;~!E!+fTu-()?vsL?q zu@EYQ^&lXFwGkN%L+1l`9&nMsvF(AT-`Ci=KdLQkWZUtKe3aDi*20eKHNPmgn5Wuu zcPgt{ts5zXmP;cd`?pSc9ej>l(=&`-4_w=?&u38_x#i9jce&x3H zetXz5y^}YqYG}`qqrij}72By{+?I_!#OM)o`r8BdSMPgVg(Dfa4?nq0uU-6NK%={- z{>EC;PNsE12J*gkJ9+oPb#FuT-wb*G_gp%o>o*n}v+lD8RBrqwIggE|;UqcC4>Ki~Kvqh2_#_(rjwt&xxmx!q| zJ%ns=!eopN7!!$#h z*kBxi10a@@%56V~_z(LL%uF~Pb;7|AGn`oYFj=ZTa_0R7Pd8Qn0K*xryJEM;~{UkMf;7Fkk=4Dp( zm9OhZi}z9YFCvWxF6s4pM6j$`8nY?Qb(~)cxop_ly{`53@^X4>xQF3VeK*#&Ct*Lo zJvyp8(7N)2h5dwYp3vg*Xu{Y~@A-M>o^>uAi?r@rxnkwF@p^L$U5@cRAC^=Ub+hU} z9vlpAuct0BaCy>3@lec7t5gVme^fen>(m)2xmud97Rd3ZC#0O3Kvy}EEcUzRf-|d5 z`nbA#qLDk8GHEDfi1%26UMV&i58hrk3)YV7WOv9$g{XX?;moSu}BXbnvg#)viZYx6x%D@k0tL5px zm&XZn8vY2ena4mEbZLrL3buV>&Oh#nEBI}h0p@x79JyjlNlhHze{cOTIk0l!og2@Z zVlAp}hIY?dw#%m3JldwUw1UNU&Z6@(cqfb0ewvQ zP;_dMeO}P2q~4mBnk~j3ZrR0F2i^8Zi;K~WhI8_?%EfNCFR&78kABH>;Ms1PmckdZ8)VjT(UT26MLh&4j8KZ)v}-oa4`A_fgwPj1e*+8 zfRl7y`CP|2UpQ`1Ia1gnftbRTaMcM$W{U*CROLp*=mXuaBxACks_V=&_9x$;AhyPG zx4(>R&yZU+ZR@eeL09ICpJ;a7lp!ybaa^Qq_n7mPfg75Qt5_pZ2bi&kLQ;2N^U~X# zmSo-45^Qa3rI!uM23N`BqWYolO^H8@IOZQ*aic<>-AoX!$wAXmpFiKHq}!U0H8UwI zH|JgR-J7`E{+8!x;Btucs)??DriYX%-nzn_+#J8>zP|N=EU`txo0nm_gQmD=+(FuN zmu{|x&%0fX3G%g&;-ckU4+}ei;4FQiV2_sfzJZNecDg%oWsPFnyNamH{`?(wOfhFDyYI8CFf2UV%GztHqGtxbynce}RQXoUqfecYh zVQ+X*G4r6XSO^47VedHEc<8HtHb&b>V{u{I$4y)m_JE&eRMsl*3LEafp5# zk%S+^XGcpoe>ET~2>>*pYCLFkPoU~P=nTLB?lh{qC!H4YugJ_a`#Jy6S9IMpV}p-M zQ%kejC@~%?GQ*3Q)M&c1g z)B0m)UuE{^&eQwR{{GAD!>5lGUMso2(2Qz-yv(86BE+juM|XljZnMH3e7Axn)YGu4bg|yO-mCY$ zN2rlkd*oc_2i_INztNtXq4QQ@5+9#(^M1s*s6orxa46-O2~b8gI6qB{>mQq9e+Wol ze!>0{1#isxPF2zW0y;=U{b09}J!S1P*#BE;&{F|tsbU`sP#FI7r5JeQ0CN&#H$VlH zpIn`svmK{EW{U)5E=MR))sDYt7ORto9j&H0Xp-gtuo(E^Fkx0i2z&#)rqu+2OmDCDlA}s;)01 z_Xo4im_-K-oxC6G9ZM|>UyJYh*uk_SpWTO#c=Kncf`Nl!Xp>&foqME{jEcIfR3&nX zjc#uL$nP5QymjVb&Q45Cqm@Pd>@z3$Lv_2a8o!EP^rz?=&lu8_=i*BM& zk%UA_SKZIiO*tjHNu7STPV=vC%*cqpT7Umpt@C@=nl-a$_BZ?6`+J}LKJW8xCWe6V zC;+AyQd-!m8u-+!h&4Snf8MZi`uZp1Wvh=-y%Z*&0$nBpfIQFwK!^YY0A&D}7=q51 z1E@DZJpt+t1*i)YAg6XV-7ThCeT$`-sn4M!r_RUUpx%I?_pxL_q>0E1hAO(0LH9AV`6}=UiDti zBX6Pon=1$Btevv2v}Ni^ipw(1Qqx1pBUf$N5nX;%eMzG44@Or8H6GJs1#2aSR5vY( zFpF!ARy>`=46FKav0XLSBJ(vjee{gfjti$22kOM>?9gWMh98i*=@z7K{X%bJ{<_=| zn`bf`t2!oG6%9Yco1p4aQG4jt0pIu*6hi=#=>VrgH8SR;rhqeX#@eu(ITvKh6x4ag zI%byz>6ZC|R{GE} zsul5vG_(I)&w0Civ2Tt3)!`MDtLvM}*0?`1$+k(Xn3;4)Z)(QK@P#u{2kj2|tELsD zAKtib_@6Zzx{ePnIp&PR!B?+eA&Zm3-1BQ!4A zxW7!|ga%zs=rLz=eOITwD{SA)Bh_Ejzs5d3Wp4{({cLm1<~K{C7E~W@cgxg1JYr3J6k%Zj*MBWzd9wcK}Q!O}Gv_31Hnxk!6GNV`7TsFs%UOtcDpMq9DKF?B?|EhSE+^Uqd60I*m zvKZ~g93#{32(+6(Q;xB?*=y!qo67FaJ~kDhP_(J^GxIr+E?!L(AjO?*ZPR z=U;!4w>`PckR`t*!R}`A!ed!1`5!v(Wo5Cp-7R)Sp4>{_PgQBJJe|p!UB5im<_>e% z@V9DFEnD=b)r4rC>IKv6mDh5zlV0_^2@0k&!)2VDJs*u)FSsg&U-6aF9cW|>fNuO! z$cPOUmv{(*YJk@}Og(0rjja?!q`lO3i2Eg&%ujN@rppI^mJL}w_p}VkUe1bOEYOI3 z^)ufu!jti9s^8I;3mHQ^8q_&Id3l7LV=yrc9H9Y_i-G4}`1|w6xG9tGtNzPAVgjl1 ztbEpnSYh|Rog&`2#cPZJ0MY>f*N<5DbbuZ(>2fwPg4I7KI208Xk*y2T7)9KmMTXpv zfKbCw9yct6$MrJch6KRr#CFEUr@|@Fnv6TCu>qU_$CG9C$OwrfgCb0QKR!P=)XWeS zAP6XyyS;MgV8kkHxq*3Usau)jvk*^{O$lM~#oosgj2}`LRT?a7o05~i(VdlA`)DY0 zMdtmX8C8!+Z!I+4RF+IT@CGe)+3++u9J(64*THR8t{iTYziVX0rKeVhRQ(@M9=tBN zO)>t*LK(XlcjvaFiz-ORQkR`9Q9Y4sw(y-vNy3K6eGv)p&-}G9!gC zH8E$g`c)Ihs3e!De$L7m^? z=d!hT-uX3K?^Q1`y?XGQ@<05m`k%`G#{a&AoDBHir~EIrqKZ4>x>}Xds93!le_j?u zteoLFdqk9Cj{ArgiKdoY2Hhyr9L>G|y`KK@E*cZF560~7L1fy~_5@vuzd3L5v1{zf z9p=djL-5xyi~zP49tZ=X`|PmOcK6giV}TPcOYe(d(p79F`&2K2i2yLDQ1iGezDJ`k zdep^deHZHSP(!<}y zZC

- * The Whirlpool algorithm was developed by - * Paulo S. L. M. Barreto and - * Vincent Rijmen. - * * See * P.S.L.M. Barreto, V. Rijmen, * ``The Whirlpool hashing function,'' diff --git a/crypto/whrlpool/wp_dgst.c b/crypto/whrlpool/wp_dgst.c index 6d925517..1ac29803 100644 --- a/crypto/whrlpool/wp_dgst.c +++ b/crypto/whrlpool/wp_dgst.c @@ -10,14 +10,6 @@ /** * The Whirlpool hashing function. * - *